breeze-client 2.1.5 → 2.1.6
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/adapter-data-service-odata/adapter-data-service-odata.d.ts +0 -1
- package/breeze-client.metadata.json +1 -1
- package/bundles/breeze-client-adapter-data-service-odata.umd.js +4 -0
- package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +1 -1
- package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +1 -1
- package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +1 -1
- package/bundles/breeze-client-adapter-data-service-webapi.umd.js +8 -1
- package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +1 -1
- package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +1 -1
- package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +1 -1
- package/bundles/breeze-client.umd.js +103 -20
- package/bundles/breeze-client.umd.js.map +1 -1
- package/bundles/breeze-client.umd.min.js +1 -1
- package/bundles/breeze-client.umd.min.js.map +1 -1
- package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +5 -1
- package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +9 -2
- package/esm2015/src/abstract-data-service-adapter.js +1 -1
- package/esm2015/src/core.js +14 -9
- package/esm2015/src/data-type.js +60 -1
- package/esm2015/src/entity-action.js +1 -1
- package/esm2015/src/entity-aspect.js +6 -8
- package/esm2015/src/entity-manager.js +1 -1
- package/esm2015/src/entity-metadata.js +1 -1
- package/esm2015/src/entity-query.js +1 -1
- package/esm2015/src/entity-state.js +9 -1
- package/esm2015/src/enum.js +1 -1
- package/esm2015/src/key-generator.js +1 -1
- package/esm2015/src/mapping-context.js +9 -3
- package/esm2015/src/predicate.js +12 -5
- package/esm5/adapter-data-service-odata/adapter-data-service-odata.js +5 -1
- package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +9 -2
- package/esm5/src/abstract-data-service-adapter.js +1 -1
- package/esm5/src/core.js +13 -8
- package/esm5/src/data-type.js +60 -1
- package/esm5/src/entity-action.js +1 -1
- package/esm5/src/entity-aspect.js +6 -8
- package/esm5/src/entity-manager.js +1 -1
- package/esm5/src/entity-metadata.js +1 -1
- package/esm5/src/entity-query.js +1 -1
- package/esm5/src/entity-state.js +9 -1
- package/esm5/src/enum.js +1 -1
- package/esm5/src/key-generator.js +1 -1
- package/esm5/src/mapping-context.js +9 -3
- package/esm5/src/predicate.js +12 -5
- package/fesm2015/breeze-client-adapter-data-service-odata.js +4 -0
- package/fesm2015/breeze-client-adapter-data-service-odata.js.map +1 -1
- package/fesm2015/breeze-client-adapter-data-service-webapi.js +9 -2
- package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +1 -1
- package/fesm2015/breeze-client.js +104 -21
- package/fesm2015/breeze-client.js.map +1 -1
- package/fesm5/breeze-client-adapter-data-service-odata.js +4 -0
- package/fesm5/breeze-client-adapter-data-service-odata.js.map +1 -1
- package/fesm5/breeze-client-adapter-data-service-webapi.js +9 -2
- package/fesm5/breeze-client-adapter-data-service-webapi.js.map +1 -1
- package/fesm5/breeze-client.js +103 -20
- package/fesm5/breeze-client.js.map +1 -1
- package/package.json +1 -1
- package/src/abstract-data-service-adapter.d.ts +0 -1
- package/src/data-type.d.ts +5 -0
- package/src/entity-aspect.d.ts +5 -5
- package/src/entity-manager.d.ts +4 -4
- package/src/entity-metadata.d.ts +37 -27
- package/src/entity-state.d.ts +4 -0
- package/src/mapping-context.d.ts +1 -1
- package/src/predicate.d.ts +4 -7
|
@@ -285,6 +285,7 @@ function toQueryString(obj) {
|
|
|
285
285
|
}
|
|
286
286
|
return parts.join("&");
|
|
287
287
|
}
|
|
288
|
+
/** Transform data properties while unwrapping entities */
|
|
288
289
|
function transformValue(prop, val) {
|
|
289
290
|
if (prop.isUnmapped)
|
|
290
291
|
return undefined;
|
|
@@ -293,6 +294,9 @@ function transformValue(prop, val) {
|
|
|
293
294
|
// from other dateTimes. This fix compensates before the save.
|
|
294
295
|
val = val && new Date(val.getTime() - (val.getTimezoneOffset() * 60000));
|
|
295
296
|
}
|
|
297
|
+
else if (prop.dataType === breeze.DataType.DateOnly) {
|
|
298
|
+
val = breeze.DataType.toDateOnlyString(val);
|
|
299
|
+
}
|
|
296
300
|
else if (prop.dataType.quoteJsonOData) {
|
|
297
301
|
val = val != null ? val.toString() : val;
|
|
298
302
|
}
|
|
@@ -456,4 +460,4 @@ webApiOData4Ctor.prototype.initialize = function () {
|
|
|
456
460
|
webApiOData4Ctor.prototype.headers = { "OData-Version": "4.0" };
|
|
457
461
|
breeze.config.registerAdapter("dataService", webApiOData4Ctor);
|
|
458
462
|
export { ɵ0, ɵ1 };
|
|
459
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50L2FkYXB0ZXItZGF0YS1zZXJ2aWNlLW9kYXRhLyIsInNvdXJjZXMiOlsiYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUQsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQVl2QixjQUFjO0FBQ2QsTUFBTSxPQUFPLHVCQUF3QixTQUFRLE1BQU0sQ0FBQywwQkFBMEI7SUFRNUU7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQU5WLHNFQUFzRTtRQUN0RSx3RUFBd0U7UUFDeEUsc0ZBQXNGO1FBQ3RGLFlBQU8sR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1FBa04xQyx1QkFBa0IsR0FBOEIsSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUM7WUFDNUUsSUFBSSxFQUFFLGVBQWU7WUFFckIsU0FBUyxFQUFFLFVBQVUsSUFBUyxFQUFFLGNBQXFDLEVBQUUsV0FBK0I7Z0JBQ3BHLElBQUksTUFBTSxHQUFRLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxJQUFJLElBQUksSUFBSTtvQkFBRSxPQUFPLE1BQU0sQ0FBQztnQkFDaEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDL0IsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO29CQUNwQixrRkFBa0Y7b0JBQ2xGLElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMzRSxJQUFJLEVBQUUsR0FBRyxjQUFjLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxD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YUFBYSxFQUFFLGdCQUF1QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBicmVlemUgZnJvbSAnYnJlZXplLWNsaWVudCc7XHJcbmltcG9ydCB7IGFwcGVuZFF1ZXJ5U3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnLi9hZGFwdGVyLWNvcmUnO1xyXG5cclxubGV0IGNvcmUgPSBicmVlemUuY29yZTtcclxuXHJcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55O1xyXG5kZWNsYXJlIHZhciBkb2N1bWVudDogYW55O1xyXG5kZWNsYXJlIHZhciB1cmw6IGFueTsgLy8gbmVlZGVkIHRvIGFjY2VzcyBub2RlJ3MgdXJsLnBhcnNlXHJcbmRlY2xhcmUgdmFyIE9EYXRhOiBhbnk7XHJcblxyXG5pbnRlcmZhY2UgT0RhdGFTYXZlQ29udGV4dCBleHRlbmRzIGJyZWV6ZS5TYXZlQ29udGV4dCB7XHJcbiAgdGVtcEtleXM6IGJyZWV6ZS5FbnRpdHlLZXlbXTtcclxuICBjb250ZW50S2V5czogYnJlZXplLkVudGl0eVtdO1xyXG59XHJcblxyXG4vKiogQGhpZGRlbiAqL1xyXG5leHBvcnQgY2xhc3MgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXIgZXh0ZW5kcyBicmVlemUuQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICByZWxhdGl2ZVVybDogYm9vbGVhbiB8ICgoZHM6IGJyZWV6ZS5EYXRhU2VydmljZSwgdXJsOiBzdHJpbmcpID0+IHN0cmluZyk7XHJcbiAgLy8gX2NhdGNoTm9Db25uZWN0aW9uRXJyb3IgPSBhYnN0cmFjdERzYVByb3RvLl9jYXRjaE5vQ29ubmVjdGlvbkVycm9yO1xyXG4gIC8vIGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciA9IGFic3RyYWN0RHNhUHJvdG8uY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yO1xyXG4gIC8vIF9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IgPSBhYnN0cmFjdERzYVByb3RvLl9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3I7XHJcbiAgaGVhZGVycyA9IHsgXCJEYXRhU2VydmljZVZlcnNpb25cIjogXCIyLjBcIiB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLm5hbWUgPSBcIk9EYXRhXCI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVnaXN0ZXIoY29uZmlnPzogYnJlZXplLkJyZWV6ZUNvbmZpZykge1xyXG4gICAgY29uZmlnID0gY29uZmlnIHx8IGJyZWV6ZS5jb25maWc7XHJcbiAgICBjb25maWcucmVnaXN0ZXJBZGFwdGVyKFwiZGF0YVNlcnZpY2VcIiwgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXIpO1xyXG4gICAgcmV0dXJuIGNvbmZpZy5pbml0aWFsaXplQWRhcHRlckluc3RhbmNlKFwiZGF0YVNlcnZpY2VcIiwgXCJPRGF0YVwiLCB0cnVlKSBhcyBEYXRhU2VydmljZU9EYXRhQWRhcHRlcjtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemUoKSB7XHJcbiAgICBPRGF0YSA9IGNvcmUucmVxdWlyZUxpYihcIk9EYXRhXCIsIFwiTmVlZGVkIHRvIHN1cHBvcnQgcmVtb3RlIE9EYXRhIHNlcnZpY2VzXCIpO1xyXG4gICAgT0RhdGEuanNvbkhhbmRsZXIucmVjb2duaXplRGF0ZXMgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEFic29sdXRlIFVSTCBpcyB0aGUgZGVmYXVsdCBhcyBvZiBCcmVlemUgMS41LjUuICBcclxuICAvLyBUbyB1c2UgcmVsYXRpdmUgVVJMIChsaWtlIHByZS0xLjUuNSksIGFkZCBhZGFwdGVySW5zdGFuY2UucmVsYXRpdmVVcmwgPSB0cnVlOlxyXG4gIC8vXHJcbiAgLy8gICAgIGxldCBkcyA9IGJyZWV6ZS5jb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZShcImRhdGFTZXJ2aWNlXCIsIFwid2ViQXBpT0RhdGFcIik7XHJcbiAgLy8gICAgIGRzLnJlbGF0aXZlVXJsID0gdHJ1ZTsgXHJcbiAgLy9cclxuICAvLyBUbyB1c2UgY3VzdG9tIHVybCBjb25zdHJ1Y3Rpb24sIGFkZCBhZGFwdGVySW5zdGFuY2UucmVsYXRpdmVVcmwgPSBteWZ1bmN0aW9uKGRhdGFTZXJ2aWNlLCB1cmwpOlxyXG4gIC8vXHJcbiAgLy8gICAgIGxldCBkcyA9IGJyZWV6ZS5jb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZShcImRhdGFTZXJ2aWNlXCIsIFwid2ViQXBpT0RhdGFcIik7XHJcbiAgLy8gICAgIGRzLnJlbGF0aXZlVXJsID0gZnVuY3Rpb24oZGF0YVNlcnZpY2UsIHVybCkge1xyXG4gIC8vICAgICAgICByZXR1cm4gc29tZWhvd0NvbnZlcnQodXJsKTtcclxuICAvLyAgICAgfVxyXG4gIC8vXHJcblxyXG4gIGZldGNoTWV0YWRhdGEobWV0YWRhdGFTdG9yZTogYnJlZXplLk1ldGFkYXRhU3RvcmUsIGRhdGFTZXJ2aWNlOiBicmVlemUuRGF0YVNlcnZpY2UpIHtcclxuICAgIGxldCBzZXJ2aWNlTmFtZSA9IGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lO1xyXG5cclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIGlmICh0aGlzLnJlbGF0aXZlVXJsID09PSB0cnVlKSB7XHJcbiAgICAgIHVybCA9IGRhdGFTZXJ2aWNlLnF1YWxpZnlVcmwoJyRtZXRhZGF0YScpO1xyXG4gICAgfSBlbHNlIGlmIChjb3JlLmlzRnVuY3Rpb24odGhpcy5yZWxhdGl2ZVVybCkpIHtcclxuICAgICAgdXJsID0gKHRoaXMucmVsYXRpdmVVcmwgYXMgYW55KShkYXRhU2VydmljZSwgJyRtZXRhZGF0YScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gdGhpcy5nZXRBYnNvbHV0ZVVybChkYXRhU2VydmljZSwgJyRtZXRhZGF0YScpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtaGVhZGVycyA9IGNvcmUuZXh0ZW5kKHt9LCB0aGlzLmhlYWRlcnMpO1xyXG4gICAgKG1oZWFkZXJzIGFzIGFueSkuQWNjZXB0ID0gJ2FwcGxpY2F0aW9uLyo7IG9kYXRhLm1ldGFkYXRhPWZ1bGwnO1xyXG5cclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAvLyBPRGF0YS5yZWFkKHVybCxcclxuICAgICAgT0RhdGEucmVhZCh7XHJcbiAgICAgICAgcmVxdWVzdFVyaTogdXJsLFxyXG4gICAgICAgIC8vIGhlYWRlcnM6IHsgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJ9XHJcbiAgICAgICAgaGVhZGVyczogbWhlYWRlcnNcclxuICAgICAgfSxcclxuICAgICAgICBmdW5jdGlvbiAoZGF0YTogYW55KSB7XHJcbiAgICAgICAgICAvLyBkYXRhLmRhdGFTZXJ2aWNlcy5zY2hlbWEgaXMgYW4gYXJyYXkgb2Ygc2NoZW1hcy4gd2l0aCBwcm9wZXJ0aWVzIG9mXHJcbiAgICAgICAgICAvLyBlbnRpdHlDb250YWluZXJbXSwgYXNzb2NpYXRpb25bXSwgZW50aXR5VHlwZVtdLCBhbmQgbmFtZXNwYWNlLlxyXG4gICAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLmRhdGFTZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBuZXcgRXJyb3IoXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yOiBcIiArIHVybCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGNzZGxNZXRhZGF0YSA9IGRhdGEuZGF0YVNlcnZpY2VzO1xyXG5cclxuICAgICAgICAgIC8vIG1pZ2h0IGhhdmUgYmVlbiBmZXRjaGVkIGJ5IGFub3RoZXIgcXVlcnlcclxuICAgICAgICAgIGlmICghbWV0YWRhdGFTdG9yZS5oYXNNZXRhZGF0YUZvcihzZXJ2aWNlTmFtZSkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBtZXRhZGF0YVN0b3JlLmltcG9ydE1ldGFkYXRhKGNzZGxNZXRhZGF0YSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcIk1ldGFkYXRhIHF1ZXJ5IGZhaWxlZCBmb3IgXCIgKyB1cmwgKyBcIjsgVW5hYmxlIHRvIHByb2Nlc3MgcmV0dXJuZWQgbWV0YWRhdGE6IFwiICsgZS5tZXNzYWdlKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1ldGFkYXRhU3RvcmUuYWRkRGF0YVNlcnZpY2UoZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZXNvbHZlKGNzZGxNZXRhZGF0YSk7XHJcblxyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICBsZXQgZXJyID0gY3JlYXRlRXJyb3IoZXJyb3IsIHVybCk7XHJcbiAgICAgICAgICBlcnIubWVzc2FnZSA9IFwiTWV0YWRhdGEgcXVlcnkgZmFpbGVkIGZvcjogXCIgKyB1cmwgKyBcIjsgXCIgKyAoZXJyLm1lc3NhZ2UgfHwgXCJcIik7XHJcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBPRGF0YS5tZXRhZGF0YUhhbmRsZXJcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBleGVjdXRlUXVlcnkobWFwcGluZ0NvbnRleHQ6IGJyZWV6ZS5NYXBwaW5nQ29udGV4dCkge1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMucmVsYXRpdmVVcmwgPT09IHRydWUpIHtcclxuICAgICAgdXJsID0gbWFwcGluZ0NvbnRleHQuZ2V0VXJsKCk7XHJcbiAgICB9IGVsc2UgaWYgKGNvcmUuaXNGdW5jdGlvbih0aGlzLnJlbGF0aXZlVXJsKSkge1xyXG4gICAgICB1cmwgPSAodGhpcy5yZWxhdGl2ZVVybCBhcyBhbnkpKG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLCBtYXBwaW5nQ29udGV4dC5nZXRVcmwoKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmwgPSB0aGlzLmdldEFic29sdXRlVXJsKG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLCBtYXBwaW5nQ29udGV4dC5nZXRVcmwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIHF1ZXJ5IHBhcmFtcyBpZiAud2l0aFBhcmFtZXRlcnMgd2FzIHVzZWRcclxuICAgIGxldCBxdWVyeSA9IG1hcHBpbmdDb250ZXh0LnF1ZXJ5IGFzIGJyZWV6ZS5FbnRpdHlRdWVyeTtcclxuICAgIGlmICghY29yZS5pc0VtcHR5KHF1ZXJ5LnBhcmFtZXRlcnMpKSB7XHJcbiAgICAgIGxldCBwYXJhbVN0cmluZyA9IHRvUXVlcnlTdHJpbmcocXVlcnkucGFyYW1ldGVycyk7XHJcbiAgICAgIHVybCA9IGFwcGVuZFF1ZXJ5U3RyaW5nUGFyYW1ldGVyKHVybCwgcGFyYW1TdHJpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2U8YnJlZXplLlF1ZXJ5UmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIE9EYXRhLnJlYWQoe1xyXG4gICAgICAgIHJlcXVlc3RVcmk6IHVybCxcclxuICAgICAgICBoZWFkZXJzOiBjb3JlLmV4dGVuZCh7fSwgdGhpcy5oZWFkZXJzKVxyXG4gICAgICB9LFxyXG4gICAgICAgIGZ1bmN0aW9uIChkYXRhOiBhbnksIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICAgIGxldCBpbmxpbmVDb3VudDogYW55O1xyXG4gICAgICAgICAgaWYgKGRhdGEuX19jb3VudCkge1xyXG4gICAgICAgICAgICAvLyBPRGF0YSBjYW4gcmV0dXJuIGRhdGEuX19jb3VudCBhcyBhIHN0cmluZ1xyXG4gICAgICAgICAgICBpbmxpbmVDb3VudCA9IHBhcnNlSW50KGRhdGEuX19jb3VudCwgMTApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gT2RhdGEgcmV0dXJucyBkaWZmZXJlbnQgcmVzdWx0IHN0cnVjdHVyZSB3aGVuIGl0IHJldHVybnMgbXVsdGlwbGUgZW50aXRpZXMgKGRhdGEucmVzdWx0cykgdnMgc2luZ2xlIGVudGl0eSAoZGF0YSBkaXJlY3RseSkuXHJcbiAgICAgICAgICAvLyBAc2VlIGh0dHA6Ly93d3cub2RhdGEub3JnL2RvY3VtZW50YXRpb24vb2RhdGEtdmVyc2lvbi0yLTAvanNvbi1mb3JtYXQvI1JlcHJlc2VudGluZ0NvbGxlY3Rpb25zT2ZFbnRyaWVzXHJcbiAgICAgICAgICAvLyBhbmQgaHR0cDovL3d3dy5vZGF0YS5vcmcvZG9jdW1lbnRhdGlvbi9vZGF0YS12ZXJzaW9uLTItMC9qc29uLWZvcm1hdC8jUmVwcmVzZW50aW5nRW50cmllc1xyXG4gICAgICAgICAgbGV0IHJlc3VsdHM6IGFueTtcclxuICAgICAgICAgIGlmIChkYXRhLnJlc3VsdHMpIHtcclxuICAgICAgICAgICAgcmVzdWx0cyA9IGRhdGEucmVzdWx0cztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHMgPSBkYXRhO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoeyByZXN1bHRzOiByZXN1bHRzLCBpbmxpbmVDb3VudDogaW5saW5lQ291bnQsIGh0dHBSZXNwb25zZTogcmVzcG9uc2UsIHF1ZXJ5OiBxdWVyeSB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGVycm9yLCB1cmwpKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHNhdmVDaGFuZ2VzKG9kYXRhU2F2ZUNvbnRleHQ6IGJyZWV6ZS5TYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZTogYnJlZXplLlNhdmVCdW5kbGUpOiBQcm9taXNlPGJyZWV6ZS5TYXZlUmVzdWx0PiB7XHJcbiAgICBsZXQgYWRhcHRlciA9IG9kYXRhU2F2ZUNvbnRleHQuYWRhcHRlciA9IHRoaXM7XHJcbiAgICBsZXQgc2F2ZUNvbnRleHQgPSBvZGF0YVNhdmVDb250ZXh0IGFzIE9EYXRhU2F2ZUNvbnRleHQ7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5yZWxhdGl2ZVVybCA9PT0gdHJ1ZSkge1xyXG4gICAgICBzYXZlQ29udGV4dC5yb3V0ZVByZWZpeCA9IGFkYXB0ZXIuZ2V0Um91dGVQcmVmaXgoc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UpO1xyXG4gICAgICB1cmwgPSBzYXZlQ29udGV4dC5kYXRhU2VydmljZS5xdWFsaWZ5VXJsKFwiJGJhdGNoXCIpO1xyXG4gICAgfSBlbHNlIGlmIChjb3JlLmlzRnVuY3Rpb24oYWRhcHRlci5yZWxhdGl2ZVVybCkpIHtcclxuICAgICAgc2F2ZUNvbnRleHQucm91dGVQcmVmaXggPSAoYWRhcHRlci5yZWxhdGl2ZVVybCBhcyBGdW5jdGlvbikoc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UsICcnKTtcclxuICAgICAgdXJsID0gc2F2ZUNvbnRleHQucm91dGVQcmVmaXggKyAnJGJhdGNoJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNhdmVDb250ZXh0LnJvdXRlUHJlZml4ID0gYWRhcHRlci5nZXRBYnNvbHV0ZVVybChzYXZlQ29udGV4dC5kYXRhU2VydmljZSwgJycpO1xyXG4gICAgICB1cmwgPSBzYXZlQ29udGV4dC5yb3V0ZVByZWZpeCArICckYmF0Y2gnO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXF1ZXN0RGF0YSA9IGNyZWF0ZUNoYW5nZVJlcXVlc3RzKHNhdmVDb250ZXh0LCBzYXZlQnVuZGxlKTtcclxuICAgIGxldCB0ZW1wS2V5cyA9IHNhdmVDb250ZXh0LnRlbXBLZXlzO1xyXG4gICAgbGV0IGNvbnRlbnRLZXlzID0gc2F2ZUNvbnRleHQuY29udGVudEtleXM7XHJcbiAgICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlPGJyZWV6ZS5TYXZlUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIE9EYXRhLnJlcXVlc3Qoe1xyXG4gICAgICAgIGhlYWRlcnM6IGNvcmUuZXh0ZW5kKHt9LCB0aGlzLmhlYWRlcnMpLFxyXG4gICAgICAgIHJlcXVlc3RVcmk6IHVybCxcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGRhdGE6IHJlcXVlc3REYXRhXHJcbiAgICAgIH0sIGZ1bmN0aW9uIChkYXRhOiBhbnksIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICBsZXQgZW50aXRpZXM6IGFueVtdID0gW107XHJcbiAgICAgICAgbGV0IGtleU1hcHBpbmdzOiBicmVlemUuS2V5TWFwcGluZ1tdID0gW107XHJcbiAgICAgICAgbGV0IHNhdmVSZXN1bHQ6IGJyZWV6ZS5TYXZlUmVzdWx0ID0geyBlbnRpdGllczogZW50aXRpZXMsIGtleU1hcHBpbmdzOiBrZXlNYXBwaW5ncyB9O1xyXG4gICAgICAgIGRhdGEuX19iYXRjaFJlc3BvbnNlcy5mb3JFYWNoKGZ1bmN0aW9uIChicjogYW55KSB7XHJcbiAgICAgICAgICBici5fX2NoYW5nZVJlc3BvbnNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjcjogYW55KSB7XHJcbiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IGNyLnJlc3BvbnNlIHx8IGNyO1xyXG4gICAgICAgICAgICBsZXQgc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1c0NvZGU7XHJcbiAgICAgICAgICAgIGlmICgoIXN0YXR1c0NvZGUpIHx8IHN0YXR1c0NvZGUgPj0gNDAwKSB7XHJcbiAgICAgICAgICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKGNyLCB1cmwpKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBjb250ZW50SWQgPSBjci5oZWFkZXJzW1wiQ29udGVudC1JRFwiXTtcclxuICAgICAgICAgICAgLy8gT2xpbmdvIHNlbmRzIGRpZmZlcmVudCBjYXNlIG9mICdJRCcgZm9yIHRoZSBoZWFkZXIgbmFtZS5cclxuICAgICAgICAgICAgaWYgKCFjb250ZW50SWQpIHtcclxuICAgICAgICAgICAgICBjb250ZW50SWQgPSBjci5oZWFkZXJzW1wiQ29udGVudC1JZFwiXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHJhd0VudGl0eSA9IGNyLmRhdGE7XHJcbiAgICAgICAgICAgIGlmIChyYXdFbnRpdHkpIHtcclxuICAgICAgICAgICAgICBsZXQgdGVtcEtleSA9IHRlbXBLZXlzW2NvbnRlbnRJZF07XHJcbiAgICAgICAgICAgICAgaWYgKHRlbXBLZXkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlbnRpdHlUeXBlID0gdGVtcEtleS5lbnRpdHlUeXBlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVudGl0eVR5cGUuYXV0b0dlbmVyYXRlZEtleVR5cGUgIT09IGJyZWV6ZS5BdXRvR2VuZXJhdGVkS2V5VHlwZS5Ob25lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB0ZW1wVmFsdWUgPSB0ZW1wS2V5LnZhbHVlc1swXTtcclxuICAgICAgICAgICAgICAgICAgbGV0IHJlYWxLZXkgPSBlbnRpdHlUeXBlLmdldEVudGl0eUtleUZyb21SYXdFbnRpdHkocmF3RW50aXR5LCBicmVlemUuRGF0YVByb3BlcnR5LmdldFJhd1ZhbHVlRnJvbVNlcnZlcik7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBrZXlNYXBwaW5nID0geyBlbnRpdHlUeXBlTmFtZTogZW50aXR5VHlwZS5uYW1lLCB0ZW1wVmFsdWU6IHRlbXBWYWx1ZSwgcmVhbFZhbHVlOiByZWFsS2V5LnZhbHVlc1swXSB9O1xyXG4gICAgICAgICAgICAgICAgICBrZXlNYXBwaW5ncy5wdXNoKGtleU1hcHBpbmcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbnRpdGllcy5wdXNoKHJhd0VudGl0eSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IG9yaWdFbnRpdHkgPSBjb250ZW50S2V5c1tjb250ZW50SWRdO1xyXG4gICAgICAgICAgICAgIGVudGl0aWVzLnB1c2gob3JpZ0VudGl0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlKHNhdmVSZXN1bHQpO1xyXG4gICAgICB9LCBmdW5jdGlvbiAoZXJyOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGVyciwgdXJsKSk7XHJcbiAgICAgIH0sIE9EYXRhLmJhdGNoSGFuZGxlcik7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG5cclxuICB9XHJcblxyXG4gIGpzb25SZXN1bHRzQWRhcHRlcjogYnJlZXplLkpzb25SZXN1bHRzQWRhcHRlciA9IG5ldyBicmVlemUuSnNvblJlc3VsdHNBZGFwdGVyKHtcclxuICAgIG5hbWU6IFwiT0RhdGFfZGVmYXVsdFwiLFxyXG5cclxuICAgIHZpc2l0Tm9kZTogZnVuY3Rpb24gKG5vZGU6IGFueSwgbWFwcGluZ0NvbnRleHQ6IGJyZWV6ZS5NYXBwaW5nQ29udGV4dCwgbm9kZUNvbnRleHQ6IGJyZWV6ZS5Ob2RlQ29udGV4dCkge1xyXG4gICAgICBsZXQgcmVzdWx0OiBhbnkgPSB7fTtcclxuICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgbGV0IG1ldGFkYXRhID0gbm9kZS5fX21ldGFkYXRhO1xyXG4gICAgICBpZiAobWV0YWRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgIC8vIFRPRE86IG1heSBiZSBhYmxlIHRvIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudCBieSBjYWNoaW5nIG9mIHRoZSBwcmV2aW91cyB2YWx1ZS5cclxuICAgICAgICBsZXQgZW50aXR5VHlwZU5hbWUgPSBicmVlemUuTWV0YWRhdGFTdG9yZS5ub3JtYWxpemVUeXBlTmFtZShtZXRhZGF0YS50eXBlKTtcclxuICAgICAgICBsZXQgZXQgPSBlbnRpdHlUeXBlTmFtZSAmJiBtYXBwaW5nQ29udGV4dC5lbnRpdHlNYW5hZ2VyLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShlbnRpdHlUeXBlTmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgLy8gT0RhdGEgcmVzcG9uc2UgZG9lc24ndCBkaXN0aW5ndWlzaCBhIHByb2plY3Rpb24gZnJvbSBhIHdob2xlIGVudGl0eS5cclxuICAgICAgICAvLyBXZSdsbCBhc3N1bWUgdGhhdCB3aG9sZS1lbnRpdHkgZGF0YSB3b3VsZCBoYXZlIGF0IGxlYXN0IGFzIG1hbnkgcHJvcGVydGllcyAgKDw9KVxyXG4gICAgICAgIC8vIGFzIHRoZSBFbnRpdHlUeXBlIGhhcyBtYXBwZWQgcHJvcGVydGllcyBvbiB0aGUgYmFzaXMgdGhhdFxyXG4gICAgICAgIC8vIG1vc3QgcHJvamVjdGlvbnMgcmVtb3ZlIHByb3BlcnRpZXMgcmF0aGVyIHRoYW4gYWRkIHRoZW0uXHJcbiAgICAgICAgLy8gSWYgbm90LCBhc3N1bWUgaXQncyBhIHByb2plY3Rpb24gYW5kIGRvIE5PVCB0cmVhdCBhcyBhbiBlbnRpdHlcclxuICAgICAgICBpZiAoZXQgJiYgZXQuX21hcHBlZFByb3BlcnRpZXNDb3VudCA8PSBPYmplY3Qua2V5cyhub2RlKS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAvLyBpZiAoZXQgJiYgZXQuX21hcHBlZFByb3BlcnRpZXNDb3VudCA9PT0gT2JqZWN0LmtleXMobm9kZSkubGVuZ3RoIC0gMSkgeyAvLyBPTERcclxuICAgICAgICAgIHJlc3VsdC5lbnRpdHlUeXBlID0gZXQ7XHJcbiAgICAgICAgICBsZXQgdXJpS2V5ID0gbWV0YWRhdGEudXJpIHx8IG1ldGFkYXRhLmlkO1xyXG4gICAgICAgICAgaWYgKHVyaUtleSkge1xyXG4gICAgICAgICAgICAvLyBTdHJpcCBiYXNlVXJpIHRvIG1ha2UgdXJpS2V5IGEgcmVsYXRpdmUgdXJpXHJcbiAgICAgICAgICAgIC8vIFRvZG86IHdoeSBpcyB0aGlzIG5lY2Vzc2FyeSB3aGVuIGFic29sdXRlIHdvcmtzIGZvciBldmVyeSBPRGF0YSBzb3VyY2UgdGVzdGVkP1xyXG4gICAgICAgICAgICBsZXQgcmUgPSBuZXcgUmVnRXhwKCdeJyArIG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lLCAnaScpO1xyXG4gICAgICAgICAgICB1cmlLZXkgPSB1cmlLZXkucmVwbGFjZShyZSwgJycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzdWx0LmV4dHJhTWV0YWRhdGEgPSB7XHJcbiAgICAgICAgICAgIHVyaUtleTogdXJpS2V5LFxyXG4gICAgICAgICAgICBldGFnOiBtZXRhZGF0YS5ldGFnXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBPRGF0YSB2MyAtIHByb2plY3Rpb24gYXJyYXlzIHdpbGwgYmUgZW5jbG9zZWQgaW4gYSByZXN1bHRzIGFycmF5XHJcbiAgICAgIGlmIChub2RlLnJlc3VsdHMpIHtcclxuICAgICAgICByZXN1bHQubm9kZSA9IG5vZGUucmVzdWx0cztcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHByb3BlcnR5TmFtZSA9IG5vZGVDb250ZXh0LnByb3BlcnR5TmFtZTtcclxuICAgICAgcmVzdWx0Lmlnbm9yZSA9IG5vZGUuX19kZWZlcnJlZCAhPSBudWxsIHx8IHByb3BlcnR5TmFtZSA9PT0gXCJfX21ldGFkYXRhXCIgfHxcclxuICAgICAgICAvLyBFbnRpdHlLZXkgcHJvcGVydGllcyBjYW4gYmUgcHJvZHVjZWQgYnkgRURNWCBtb2RlbHNcclxuICAgICAgICAocHJvcGVydHlOYW1lID09PSBcIkVudGl0eUtleVwiICYmIG5vZGUuJHR5cGUgJiYgY29yZS5zdHJpbmdTdGFydHNXaXRoKG5vZGUuJHR5cGUsIFwiU3lzdGVtLkRhdGFcIikpO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgZ2V0QWJzb2x1dGVVcmwoZGF0YVNlcnZpY2U6IGJyZWV6ZS5EYXRhU2VydmljZSwgdXJsOiBzdHJpbmcpIHtcclxuICAgIGxldCBzZXJ2aWNlTmFtZSA9IGRhdGFTZXJ2aWNlLnF1YWxpZnlVcmwoJycpO1xyXG4gICAgLy8gb25seSBwcmVmaXggd2l0aCBzZXJ2aWNlTmFtZSBpZiBub3QgYWxyZWFkeSBvbiB0aGUgdXJsXHJcbiAgICBsZXQgYmFzZSA9IChjb3JlLnN0cmluZ1N0YXJ0c1dpdGgodXJsLCBzZXJ2aWNlTmFtZSkpID8gJycgOiBzZXJ2aWNlTmFtZTtcclxuICAgIC8vIElmIG5vIHByb3RvY29sLCB0dXJuIGJhc2UgaW50byBhbiBhYnNvbHV0ZSBVUklcclxuICAgIGlmICh3aW5kb3cgJiYgc2VydmljZU5hbWUuaW5kZXhPZignLy8nKSA8IDApIHtcclxuICAgICAgLy8gbm8gcHJvdG9jb2w7IG1ha2UgaXQgYWJzb2x1dGVcclxuICAgICAgYmFzZSA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArXHJcbiAgICAgICAgKGNvcmUuc3RyaW5nU3RhcnRzV2l0aChzZXJ2aWNlTmFtZSwgJy8nKSA/ICcnIDogJy8nKSArXHJcbiAgICAgICAgYmFzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBiYXNlICsgdXJsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um91dGVQcmVmaXgoZGF0YVNlcnZpY2U6IGJyZWV6ZS5EYXRhU2VydmljZSkge1xyXG4gICAgLy8gR2V0IHRoZSByb3V0ZVByZWZpeCBmcm9tIGEgV2ViIEFQSSBPRGF0YSBzZXJ2aWNlIG5hbWUuXHJcbiAgICAvLyBUaGUgcm91dGVQcmVmaXggaXMgcHJlc3VtZWQgdG8gYmUgdGhlIHBhdGhuYW1lIHdpdGhpbiB0aGUgZGF0YVNlcnZpY2Uuc2VydmljZU5hbWVcclxuICAgIC8vIEV4YW1wbGVzIG9mIHNlcnZpY2VuYW1lIC0+IHJvdXRlUHJlZml4OlxyXG4gICAgLy8gICAnaHR0cDovL2xvY2FsaG9zdDo1NTgwMi9vZGF0YS8nIC0+ICdvZGF0YS8nXHJcbiAgICAvLyAgICdodHRwOi8vMTk4LjE1NC4xMjEuNzUvc2VydmljZS9vZGF0YS8nIC0+ICdzZXJ2aWNlL29kYXRhLydcclxuICAgIGxldCBwYXJzZXI6IGFueTtcclxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICdvYmplY3QnKSB7IC8vIGJyb3dzZXJcclxuICAgICAgcGFyc2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICBwYXJzZXIuaHJlZiA9IGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lO1xyXG4gICAgfSBlbHNlIHsgLy8gbm9kZVxyXG4gICAgICAvLyBUT0RPOiBob3cgdG8gYmVzdCBoYW5kbGUgdGhpc1xyXG4gICAgICAvLyBhc3N1bWVzIGV4aXN0ZW5jZSBvZiBub2RlJ3MgdXJsLnBhcnNlIG1ldGhvZC5cclxuICAgICAgcGFyc2VyID0gdXJsLnBhcnNlKGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lKTtcclxuICAgIH1cclxuICAgIGxldCBwcmVmaXggPSBwYXJzZXIucGF0aG5hbWU7XHJcbiAgICBpZiAocHJlZml4WzBdID09PSAnLycpIHtcclxuICAgICAgcHJlZml4ID0gcHJlZml4LnN1YnN0cigxKTtcclxuICAgIH0gLy8gZHJvcCBsZWFkaW5nICcvJyAgKGFsbCBidXQgSUUpXHJcbiAgICBpZiAocHJlZml4LnN1YnN0cigtMSkgIT09ICcvJykge1xyXG4gICAgICBwcmVmaXggKz0gJy8nO1xyXG4gICAgfSAgICAgIC8vIGVuc3VyZSB0cmFpbGluZyAnLydcclxuICAgIHJldHVybiBwcmVmaXg7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuLy8gY3J1ZGUgc2VyaWFsaXplci4gIERvZXNuJ3QgcmVjdXJzZVxyXG5mdW5jdGlvbiB0b1F1ZXJ5U3RyaW5nKG9iajogT2JqZWN0KSB7XHJcbiAgbGV0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGZvciAobGV0IGkgaW4gb2JqKSB7XHJcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGkpICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2JqW2ldKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBwYXJ0cy5qb2luKFwiJlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdHJhbnNmb3JtVmFsdWUocHJvcDogYnJlZXplLkRhdGFQcm9wZXJ0eSwgdmFsOiBhbnkpIHtcclxuICBpZiAocHJvcC5pc1VubWFwcGVkKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIGlmIChwcm9wLmRhdGFUeXBlID09PSBicmVlemUuRGF0YVR5cGUuRGF0ZVRpbWVPZmZzZXQpIHtcclxuICAgIC8vIFRoZSBkYXRhanMgbGliIHRyaWVzIHRvIHRyZWF0IGNsaWVudCBkYXRlVGltZXMgdGhhdCBhcmUgZGVmaW5lZCBhcyBEYXRlVGltZU9mZnNldCBvbiB0aGUgc2VydmVyIGRpZmZlcmVudGx5XHJcbiAgICAvLyBmcm9tIG90aGVyIGRhdGVUaW1lcy4gVGhpcyBmaXggY29tcGVuc2F0ZXMgYmVmb3JlIHRoZSBzYXZlLlxyXG4gICAgdmFsID0gdmFsICYmIG5ldyBEYXRlKHZhbC5nZXRUaW1lKCkgLSAodmFsLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpO1xyXG4gIH0gZWxzZSBpZiAoKHByb3AuZGF0YVR5cGUgYXMgYnJlZXplLkRhdGFUeXBlKS5xdW90ZUpzb25PRGF0YSkge1xyXG4gICAgdmFsID0gdmFsICE9IG51bGwgPyB2YWwudG9TdHJpbmcoKSA6IHZhbDtcclxuICB9XHJcbiAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlQ2hhbmdlUmVxdWVzdHMoc2F2ZUNvbnRleHQ6IE9EYXRhU2F2ZUNvbnRleHQsIHNhdmVCdW5kbGU6IGJyZWV6ZS5TYXZlQnVuZGxlKSB7XHJcbiAgbGV0IGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciA9IChzYXZlQ29udGV4dC5hZGFwdGVyIGFzIERhdGFTZXJ2aWNlT0RhdGFBZGFwdGVyKS5fY3JlYXRlQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yKHNhdmVDb250ZXh0LCBzYXZlQnVuZGxlKTtcclxuICBsZXQgY2hhbmdlUmVxdWVzdHM6IGFueVtdID0gW107XHJcbiAgbGV0IHRlbXBLZXlzOiBicmVlemUuRW50aXR5S2V5W10gPSBbXTtcclxuICBsZXQgY29udGVudEtleXM6IGJyZWV6ZS5FbnRpdHlbXSA9IFtdO1xyXG4gIGxldCBlbnRpdHlNYW5hZ2VyID0gc2F2ZUNvbnRleHQuZW50aXR5TWFuYWdlcjtcclxuICBsZXQgaGVscGVyID0gZW50aXR5TWFuYWdlci5oZWxwZXI7XHJcbiAgbGV0IGlkID0gMDtcclxuICBsZXQgcm91dGVQcmVmaXggPSBzYXZlQ29udGV4dC5yb3V0ZVByZWZpeDtcclxuXHJcbiAgc2F2ZUJ1bmRsZS5lbnRpdGllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRpdHksIGluZGV4KSB7XHJcbiAgICBsZXQgYXNwZWN0ID0gZW50aXR5LmVudGl0eUFzcGVjdDtcclxuICAgIGlkID0gaWQgKyAxOyAvLyB3ZSBhcmUgZGVsaWJlcmF0ZWx5IHNraXBwaW5nIGlkPTAgYmVjYXVzZSBDb250ZW50LUlEID0gMCBzZWVtcyB0byBiZSBpZ25vcmVkLlxyXG4gICAgbGV0IHJlcXVlc3QgPSB7IGhlYWRlcnM6IHsgXCJDb250ZW50LUlEXCI6IGlkLCBcIkRhdGFTZXJ2aWNlVmVyc2lvblwiOiBcIjIuMFwiIH0gfSBhcyBhbnk7XHJcbiAgICBjb250ZW50S2V5c1tpZF0gPSBlbnRpdHk7XHJcbiAgICBpZiAoYXNwZWN0LmVudGl0eVN0YXRlLmlzQWRkZWQoKSkge1xyXG4gICAgICByZXF1ZXN0LnJlcXVlc3RVcmkgPSByb3V0ZVByZWZpeCArIGVudGl0eS5lbnRpdHlUeXBlLmRlZmF1bHRSZXNvdXJjZU5hbWU7XHJcbiAgICAgIHJlcXVlc3QubWV0aG9kID0gXCJQT1NUXCI7XHJcbiAgICAgIHJlcXVlc3QuZGF0YSA9IGhlbHBlci51bndyYXBJbnN0YW5jZShlbnRpdHksIHRyYW5zZm9ybVZhbHVlKTtcclxuICAgICAgdGVtcEtleXNbaWRdID0gYXNwZWN0LmdldEtleSgpO1xyXG4gICAgfSBlbHNlIGlmIChhc3BlY3QuZW50aXR5U3RhdGUuaXNNb2RpZmllZCgpKSB7XHJcbiAgICAgIHVwZGF0ZURlbGV0ZU1lcmdlUmVxdWVzdChyZXF1ZXN0LCBhc3BlY3QsIHJvdXRlUHJlZml4ISk7XHJcbiAgICAgIHJlcXVlc3QubWV0aG9kID0gXCJNRVJHRVwiO1xyXG4gICAgICByZXF1ZXN0LmRhdGEgPSBoZWxwZXIudW53cmFwQ2hhbmdlZFZhbHVlcyhlbnRpdHksIGVudGl0eU1hbmFnZXIubWV0YWRhdGFTdG9yZSwgdHJhbnNmb3JtVmFsdWUpO1xyXG4gICAgICAvLyBzaG91bGQgYmUgYSBQQVRDSC9NRVJHRVxyXG4gICAgfSBlbHNlIGlmIChhc3BlY3QuZW50aXR5U3RhdGUuaXNEZWxldGVkKCkpIHtcclxuICAgICAgdXBkYXRlRGVsZXRlTWVyZ2VSZXF1ZXN0KHJlcXVlc3QsIGFzcGVjdCwgcm91dGVQcmVmaXghKTtcclxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBcIkRFTEVURVwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmVxdWVzdCA9IGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvci5nZXRSZXF1ZXN0KHJlcXVlc3QsIGVudGl0eSwgaW5kZXgpO1xyXG4gICAgY2hhbmdlUmVxdWVzdHMucHVzaChyZXF1ZXN0KTtcclxuICB9KTtcclxuICBzYXZlQ29udGV4dC5jb250ZW50S2V5cyA9IGNvbnRlbnRLZXlzO1xyXG4gIHNhdmVDb250ZXh0LnRlbXBLZXlzID0gdGVtcEtleXM7XHJcbiAgY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLmRvbmUoY2hhbmdlUmVxdWVzdHMpO1xyXG4gIHJldHVybiB7XHJcbiAgICBfX2JhdGNoUmVxdWVzdHM6IFtcclxuICAgICAge1xyXG4gICAgICAgIF9fY2hhbmdlUmVxdWVzdHM6IGNoYW5nZVJlcXVlc3RzXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9O1xyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlRGVsZXRlTWVyZ2VSZXF1ZXN0KHJlcXVlc3Q6IGFueSwgYXNwZWN0OiBicmVlemUuRW50aXR5QXNwZWN0LCByb3V0ZVByZWZpeDogc3RyaW5nKSB7XHJcbiAgbGV0IHVyaUtleTogc3RyaW5nO1xyXG4gIGxldCBleHRyYU1ldGFkYXRhID0gYXNwZWN0LmV4dHJhTWV0YWRhdGE7XHJcbiAgaWYgKGV4dHJhTWV0YWRhdGEgPT0gbnVsbCkge1xyXG4gICAgdXJpS2V5ID0gZ2V0VXJpS2V5KGFzcGVjdCk7XHJcbiAgICBhc3BlY3QuZXh0cmFNZXRhZGF0YSA9IHtcclxuICAgICAgdXJpS2V5OiB1cmlLZXlcclxuICAgIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIHVyaUtleSA9IGV4dHJhTWV0YWRhdGEudXJpS2V5O1xyXG4gICAgaWYgKGV4dHJhTWV0YWRhdGEuZXRhZykge1xyXG4gICAgICByZXF1ZXN0LmhlYWRlcnNbXCJJZi1NYXRjaFwiXSA9IGV4dHJhTWV0YWRhdGEuZXRhZztcclxuICAgIH1cclxuICB9XHJcbiAgcmVxdWVzdC5yZXF1ZXN0VXJpID1cclxuICAgIC8vIHVzZSByb3V0ZVByZWZpeCBpZiB1cmlLZXkgbGFja3MgcHJvdG9jb2wgKGkuZS4sIHJlbGF0aXZlIHVyaSlcclxuICAgIHVyaUtleS5pbmRleE9mKCcvLycpID4gMCA/IHVyaUtleSA6IHJvdXRlUHJlZml4ICsgdXJpS2V5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRVcmlLZXkoYXNwZWN0OiBicmVlemUuRW50aXR5QXNwZWN0KSB7XHJcbiAgbGV0IGVudGl0eVR5cGUgPSBhc3BlY3QuZW50aXR5IS5lbnRpdHlUeXBlO1xyXG4gIGxldCByZXNvdXJjZU5hbWUgPSBlbnRpdHlUeXBlLmRlZmF1bHRSZXNvdXJjZU5hbWU7XHJcbiAgbGV0IGtwcyA9IGVudGl0eVR5cGUua2V5UHJvcGVydGllcztcclxuICBsZXQgdXJpS2V5ID0gcmVzb3VyY2VOYW1lICsgXCIoXCI7XHJcbiAgaWYgKGtwcy5sZW5ndGggPT09IDEpIHtcclxuICAgIHVyaUtleSA9IHVyaUtleSArIGZtdFByb3BlcnR5KGtwc1swXSwgYXNwZWN0KSArIFwiKVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBsZXQgZGVsaW0gPSBcIlwiO1xyXG4gICAga3BzLmZvckVhY2goZnVuY3Rpb24gKGtwKSB7XHJcbiAgICAgIHVyaUtleSA9IHVyaUtleSArIGRlbGltICsga3AubmFtZU9uU2VydmVyICsgXCI9XCIgKyBmbXRQcm9wZXJ0eShrcCwgYXNwZWN0KTtcclxuICAgICAgZGVsaW0gPSBcIixcIjtcclxuICAgIH0pO1xyXG4gICAgdXJpS2V5ID0gdXJpS2V5ICsgXCIpXCI7XHJcbiAgfVxyXG4gIHJldHVybiB1cmlLZXk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdFByb3BlcnR5KHByb3A6IGJyZWV6ZS5EYXRhUHJvcGVydHksIGFzcGVjdDogYnJlZXplLkVudGl0eUFzcGVjdCkge1xyXG4gIHJldHVybiAocHJvcC5kYXRhVHlwZSBhcyBicmVlemUuRGF0YVR5cGUpLmZtdE9EYXRhIShhc3BlY3QuZ2V0UHJvcGVydHlWYWx1ZShwcm9wLm5hbWUpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlRXJyb3IoZXJyb3I6IGFueSwgdXJsOiBzdHJpbmcpIHtcclxuICAvLyBPRGF0YSBlcnJvcnMgY2FuIGhhdmUgdGhlIG1lc3NhZ2UgYnVyaWVkIHZlcnkgZGVlcGx5IC0gYW5kIG5vbm9idmlvdXNseVxyXG4gIC8vIHRoaXMgY29kZSBpcyB0cmlja3kgc28gYmUgY2FyZWZ1bCBjaGFuZ2luZyB0aGUgcmVzcG9uc2UuYm9keSBwYXJzaW5nLlxyXG4gIGxldCByZXN1bHQgPSBuZXcgRXJyb3IoKSBhcyBicmVlemUuU2VydmVyRXJyb3I7XHJcbiAgbGV0IHJlc3BvbnNlID0gZXJyb3IgJiYgZXJyb3IucmVzcG9uc2U7XHJcbiAgaWYgKCFyZXNwb25zZSkge1xyXG4gICAgLy8gaW4gY2FzZSBEYXRhSlMgcmV0dXJucyBcIk5vIGhhbmRsZXIgZm9yIHRoaXMgZGF0YVwiXHJcbiAgICByZXN1bHQubWVzc2FnZSA9IGVycm9yO1xyXG4gICAgcmVzdWx0LnN0YXR1c1RleHQgPSBlcnJvcjtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG4gIHJlc3VsdC5tZXNzYWdlID0gcmVzcG9uc2Uuc3RhdHVzVGV4dDtcclxuICByZXN1bHQuc3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXR1c1RleHQ7XHJcbiAgcmVzdWx0LnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1c0NvZGU7XHJcbiAgLy8gbm9uIHN0ZFxyXG4gIGlmICh1cmwpIHJlc3VsdC51cmwgPSB1cmw7XHJcbiAgcmVzdWx0LmJvZHkgPSByZXNwb25zZS5ib2R5O1xyXG4gIGlmIChyZXNwb25zZS5ib2R5KSB7XHJcbiAgICBsZXQgbmV4dEVycjogYW55O1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGJvZHkgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICByZXN1bHQuYm9keSA9IGJvZHk7XHJcbiAgICAgIC8vIE9EYXRhIHYzIGxvZ2ljXHJcbiAgICAgIGlmIChib2R5WydvZGF0YS5lcnJvciddKSB7XHJcbiAgICAgICAgYm9keSA9IGJvZHlbJ29kYXRhLmVycm9yJ107XHJcbiAgICAgIH1cclxuICAgICAgbGV0IG1zZyA9IFwiXCI7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICBuZXh0RXJyID0gYm9keS5lcnJvciB8fCBib2R5LmlubmVyZXJyb3I7XHJcbiAgICAgICAgaWYgKCFuZXh0RXJyKSBtc2cgPSBtc2cgKyBnZXRNZXNzYWdlKGJvZHkpO1xyXG4gICAgICAgIG5leHRFcnIgPSBuZXh0RXJyIHx8IGJvZHkuaW50ZXJuYWxleGNlcHRpb247XHJcbiAgICAgICAgYm9keSA9IG5leHRFcnIgfHwgYm9keTtcclxuICAgICAgfSB3aGlsZSAobmV4dEVycik7XHJcbiAgICAgIGlmIChtc2cubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlc3VsdC5tZXNzYWdlID0gbXNnO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuICBicmVlemUuQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIuX2NhdGNoTm9Db25uZWN0aW9uRXJyb3IocmVzdWx0KTtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRNZXNzYWdlKGJvZHk6IGFueSkge1xyXG4gIGxldCBtc2cgPSBib2R5Lm1lc3NhZ2UgfHwgXCJcIjtcclxuICByZXR1cm4gKCh0eXBlb2YgKG1zZykgPT09IFwic3RyaW5nXCIpID8gbXNnIDogbXNnLnZhbHVlKSArIFwiOyBcIjtcclxufVxyXG5cclxuYnJlZXplLmNvbmZpZy5yZWdpc3RlckFkYXB0ZXIoXCJkYXRhU2VydmljZVwiLCBEYXRhU2VydmljZU9EYXRhQWRhcHRlcik7XHJcblxyXG5cclxubGV0IHdlYkFwaU9EYXRhQ3RvciA9IGZ1bmN0aW9uICgpIHtcclxuICB0aGlzLm5hbWUgPSBcIndlYkFwaU9EYXRhXCI7XHJcbn07XHJcblxyXG5icmVlemUuY29yZS5leHRlbmQod2ViQXBpT0RhdGFDdG9yLnByb3RvdHlwZSwgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXIucHJvdG90eXBlKTtcclxuXHJcbmJyZWV6ZS5jb25maWcucmVnaXN0ZXJBZGFwdGVyKFwiZGF0YVNlcnZpY2VcIiwgd2ViQXBpT0RhdGFDdG9yIGFzIGFueSk7XHJcbi8vIE9EYXRhIDQgYWRhcHRlclxyXG5sZXQgd2ViQXBpT0RhdGE0Q3RvciA9IGZ1bmN0aW9uICgpIHtcclxuICB0aGlzLm5hbWUgPSBcIndlYkFwaU9EYXRhNFwiO1xyXG59O1xyXG5icmVlemUuY29yZS5leHRlbmQod2ViQXBpT0RhdGE0Q3Rvci5wcm90b3R5cGUsIHdlYkFwaU9EYXRhQ3Rvci5wcm90b3R5cGUpO1xyXG53ZWJBcGlPRGF0YTRDdG9yLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKCkge1xyXG4gIC8vIEFhcmdoLi4uIHRoZXkgbW92ZWQgdGhlIGNoZWVzZS5cclxuICBsZXQgZGF0YWpzID0gY29yZS5yZXF1aXJlTGliKFwiZGF0YWpzXCIsIFwiTmVlZGVkIHRvIHN1cHBvcnQgcmVtb3RlIE9EYXRhIHY0IHNlcnZpY2VzXCIpO1xyXG4gIE9EYXRhID0gZGF0YWpzLlY0Lm9EYXRhO1xyXG4gIE9EYXRhLmpzb24uanNvbkhhbmRsZXIucmVjb2duaXplRGF0ZXMgPSB0cnVlO1xyXG59O1xyXG53ZWJBcGlPRGF0YTRDdG9yLnByb3RvdHlwZS5oZWFkZXJzID0geyBcIk9EYXRhLVZlcnNpb25cIjogXCI0LjBcIiB9O1xyXG5icmVlemUuY29uZmlnLnJlZ2lzdGVyQWRhcHRlcihcImRhdGFTZXJ2aWNlXCIsIHdlYkFwaU9EYXRhNEN0b3IgYXMgYW55KTtcclxuXHJcblxyXG5cclxuXHJcbiJdfQ==
|
|
463
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50L2FkYXB0ZXItZGF0YS1zZXJ2aWNlLW9kYXRhLyIsInNvdXJjZXMiOlsiYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUQsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQVl2QixjQUFjO0FBQ2QsTUFBTSxPQUFPLHVCQUF3QixTQUFRLE1BQU0sQ0FBQywwQkFBMEI7SUFPNUU7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQU5WLHNFQUFzRTtRQUN0RSx3RUFBd0U7UUFDeEUsc0ZBQXNGO1FBQ3RGLFlBQU8sR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1FBa04xQyx1QkFBa0IsR0FBOEIsSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUM7WUFDNUUsSUFBSSxFQUFFLGVBQWU7WUFFckIsU0FBUyxFQUFFLFVBQVUsSUFBUyxFQUFFLGNBQXFDLEVBQUUsV0FBK0I7Z0JBQ3BHLElBQUksTUFBTSxHQUFRLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxJQUFJLElBQUksSUFBSTtvQkFBRSxPQUFPLE1BQU0sQ0FBQztnQkFDaEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDL0IsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO29CQUNwQixrRkFBa0Y7b0JBQ2xGLElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMzRSxJQUFJLEVBQUUsR0FBRyxjQUFjLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDMUcsdUVBQXVFO29CQUN2RSxtRkFBbUY7b0JBQ25GLDREQUE0RDtvQkFDNUQsMkRBQTJEO29CQUMzRCxpRUFBaUU7b0JBQ2pFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxzQkFBc0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ25FLGlGQUFpRjt3QkFDakYsTUFBTSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7d0JBQ3ZCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQzt3QkFDekMsSUFBSSxNQUFNLEVBQUU7NEJBQ1YsOENBQThDOzRCQUM5QyxpRkFBaUY7NEJBQ2pGLElBQUksRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQzs0QkFDdkUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3lCQUNqQzt3QkFDRCxNQUFNLENBQUMsYUFBYSxHQUFHOzRCQUNyQixNQUFNLEVBQUUsTUFBTTs0QkFDZCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7eUJBQ3BCLENBQUM7cUJBQ0g7aUJBQ0Y7Z0JBQ0QsbUVBQW1FO2dCQUNuRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztpQkFDNUI7Z0JBRUQsSUFBSSxZQUFZLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQztnQkFDNUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxZQUFZLEtBQUssWUFBWTtvQkFDdEUsc0RBQXNEO29CQUN0RCxDQUFDLFlBQVksS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUNuRyxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1NBRUYsQ0FBQyxDQUFDO1FBMVBELElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQTRCO1FBQzFDLE1BQU0sR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNqQyxNQUFNLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sTUFBTSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUE0QixDQUFDO0lBQ25HLENBQUM7SUFFRCxVQUFVO1FBQ1IsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLHlDQUF5QyxDQUFDLENBQUM7UUFDNUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzFDLENBQUM7SUFHRCxvREFBb0Q7SUFDcEQsZ0ZBQWdGO0lBQ2hGLEVBQUU7SUFDRixzRkFBc0Y7SUFDdEYsOEJBQThCO0lBQzlCLEVBQUU7SUFDRixrR0FBa0c7SUFDbEcsRUFBRTtJQUNGLHNGQUFzRjtJQUN0RixvREFBb0Q7SUFDcEQscUNBQXFDO0lBQ3JDLFFBQVE7SUFDUixFQUFFO0lBRUYsYUFBYSxDQUFDLGFBQW1DLEVBQUUsV0FBK0I7UUFDaEYsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUUxQyxJQUFJLEdBQVcsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQzdCLEdBQUcsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM1QyxHQUFHLEdBQUksSUFBSSxDQUFDLFdBQW1CLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQzNEO2FBQU07WUFDTCxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDckQ7UUFFRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsUUFBZ0IsQ0FBQyxNQUFNLEdBQUcsb0NBQW9DLENBQUM7UUFFaEUsSUFBSSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDNUMsa0JBQWtCO1lBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsMkNBQTJDO2dCQUMzQyxPQUFPLEVBQUUsUUFBUTthQUNsQixFQUNDLFVBQVUsSUFBUztnQkFDakIsc0VBQXNFO2dCQUN0RSxpRUFBaUU7Z0JBQ2pFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUMvQixJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsR0FBRyxHQUFHLENBQUMsQ0FBQztvQkFDM0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3RCO2dCQUNELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBRXJDLDJDQUEyQztnQkFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQzlDLElBQUk7d0JBQ0YsYUFBYSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztxQkFDNUM7b0JBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ1YsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsNEJBQTRCLEdBQUcsR0FBRyxHQUFHLHlDQUF5QyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO3FCQUN0SDtvQkFFRCxhQUFhLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUMzQztnQkFFRCxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUUvQixDQUFDLEVBQUUsVUFBVSxLQUFVO2dCQUNyQixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxHQUFHLENBQUMsT0FBTyxHQUFHLDZCQUE2QixHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixDQUFDLEVBQ0QsS0FBSyxDQUFDLGVBQWUsQ0FDdEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUlELFlBQVksQ0FBQyxjQUFxQztRQUNoRCxJQUFJLEdBQVcsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQzdCLEdBQUcsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDL0I7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzVDLEdBQUcsR0FBSSxJQUFJLENBQUMsV0FBbUIsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ3RGO2FBQU07WUFDTCxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ2hGO1FBRUQsK0NBQStDO1FBQy9DLElBQUksS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUEyQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNuQyxJQUFJLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xELEdBQUcsR0FBRywwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxJQUFJLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBcUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDaEUsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDVCxVQUFVLEVBQUUsR0FBRztnQkFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUN2QyxFQUNDLFVBQVUsSUFBUyxFQUFFLFFBQWE7Z0JBQ2hDLElBQUksV0FBZ0IsQ0FBQztnQkFDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNoQiw0Q0FBNEM7b0JBQzVDLFdBQVcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDMUM7Z0JBQ0QsOEhBQThIO2dCQUM5SCwwR0FBMEc7Z0JBQzFHLDRGQUE0RjtnQkFDNUYsSUFBSSxPQUFZLENBQUM7Z0JBQ2pCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDaEIsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7aUJBQ3hCO3FCQUFNO29CQUNMLE9BQU8sR0FBRyxJQUFJLENBQUM7aUJBQ2hCO2dCQUNELE9BQU8sT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDdkcsQ0FBQyxFQUNELFVBQVUsS0FBVTtnQkFDbEIsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBR0QsV0FBVyxDQUFDLGdCQUFvQyxFQUFFLFVBQTZCO1FBQzdFLElBQUksT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDOUMsSUFBSSxXQUFXLEdBQUcsZ0JBQW9DLENBQUM7UUFDdkQsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtZQUM3QixXQUFXLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFFLEdBQUcsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNwRDthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDL0MsV0FBVyxDQUFDLFdBQVcsR0FBSSxPQUFPLENBQUMsV0FBd0IsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pGLEdBQUcsR0FBRyxXQUFXLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztTQUMxQzthQUFNO1lBQ0wsV0FBVyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUUsR0FBRyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDO1NBQzFDO1FBRUQsSUFBSSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDcEMsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUMxQyxJQUFJLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBb0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDL0QsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDdEMsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsSUFBSSxFQUFFLFdBQVc7YUFDbEIsRUFBRSxVQUFVLElBQVMsRUFBRSxRQUFhO2dCQUNuQyxJQUFJLFFBQVEsR0FBVSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksV0FBVyxHQUF3QixFQUFFLENBQUM7Z0JBQzFDLElBQUksVUFBVSxHQUFzQixFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUNyRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBTztvQkFDN0MsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQU87d0JBQzVDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO3dCQUNqQyxJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO3dCQUNyQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLElBQUksR0FBRyxFQUFFOzRCQUN0QyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUM3QixPQUFPO3lCQUNSO3dCQUVELElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ3pDLDJEQUEyRDt3QkFDM0QsSUFBSSxDQUFDLFNBQVMsRUFBRTs0QkFDZCxTQUFTLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQzt5QkFDdEM7d0JBRUQsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDeEIsSUFBSSxTQUFTLEVBQUU7NEJBQ2IsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUNsQyxJQUFJLE9BQU8sRUFBRTtnQ0FDWCxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO2dDQUNwQyxJQUFJLFVBQVUsQ0FBQyxvQkFBb0IsS0FBSyxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFO29DQUN4RSxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUNsQyxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMseUJBQXlCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQ0FDekcsSUFBSSxVQUFVLEdBQUcsRUFBRSxjQUFjLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0NBQ3pHLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUNBQzlCOzZCQUNGOzRCQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7eUJBQzFCOzZCQUFNOzRCQUNMLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQzs0QkFDeEMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzt5QkFDM0I7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0IsQ0FBQyxFQUFFLFVBQVUsR0FBUTtnQkFDbkIsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUVqQixDQUFDO0lBZ0RELGNBQWMsQ0FBQyxXQUErQixFQUFFLEdBQVc7UUFDekQsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3Qyx5REFBeUQ7UUFDekQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ3hFLGlEQUFpRDtRQUNqRCxJQUFJLE1BQU0sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMzQyxnQ0FBZ0M7WUFDaEMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUk7Z0JBQzNELENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3BELElBQUksQ0FBQztTQUNSO1FBQ0QsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxjQUFjLENBQUMsV0FBK0I7UUFDNUMseURBQXlEO1FBQ3pELG9GQUFvRjtRQUNwRiwwQ0FBMEM7UUFDMUMsZ0RBQWdEO1FBQ2hELCtEQUErRDtRQUMvRCxJQUFJLE1BQVcsQ0FBQztRQUNoQixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxFQUFFLFVBQVU7WUFDNUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO1NBQ3ZDO2FBQU0sRUFBRSxPQUFPO1lBQ2QsZ0NBQWdDO1lBQ2hDLGdEQUFnRDtZQUNoRCxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDN0M7UUFDRCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtZQUNyQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQixDQUFDLGlDQUFpQztRQUNuQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEdBQUcsQ0FBQztTQUNmLENBQU0sc0JBQXNCO1FBQzdCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FFRjtBQUVELHFDQUFxQztBQUNyQyxTQUFTLGFBQWEsQ0FBQyxHQUFXO0lBQ2hDLElBQUksS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUN6QixLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRTtRQUNqQixJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekIsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RTtLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFFRCwwREFBMEQ7QUFDMUQsU0FBUyxjQUFjLENBQUMsSUFBeUIsRUFBRSxHQUFRO0lBQ3pELElBQUksSUFBSSxDQUFDLFVBQVU7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUN0QyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUU7UUFDcEQsOEdBQThHO1FBQzlHLDhEQUE4RDtRQUM5RCxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDMUU7U0FBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7UUFDckQsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDN0M7U0FBTSxJQUFLLElBQUksQ0FBQyxRQUE0QixDQUFDLGNBQWMsRUFBRTtRQUM1RCxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7S0FDMUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLFdBQTZCLEVBQUUsVUFBNkI7SUFDeEYsSUFBSSx3QkFBd0IsR0FBSSxXQUFXLENBQUMsT0FBbUMsQ0FBQywrQkFBK0IsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekksSUFBSSxjQUFjLEdBQVUsRUFBRSxDQUFDO0lBQy9CLElBQUksUUFBUSxHQUF1QixFQUFFLENBQUM7SUFDdEMsSUFBSSxXQUFXLEdBQW9CLEVBQUUsQ0FBQztJQUN0QyxJQUFJLGFBQWEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO0lBQzlDLElBQUksTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDbEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQztJQUUxQyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRSxLQUFLO1FBQ2pELElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDakMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxnRkFBZ0Y7UUFDN0YsSUFBSSxPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxFQUFTLENBQUM7UUFDcEYsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUN6QixJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDaEMsT0FBTyxDQUFDLFVBQVUsR0FBRyxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztZQUN6RSxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUN4QixPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzdELFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDaEM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDMUMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFZLENBQUMsQ0FBQztZQUN4RCxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztZQUN6QixPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUMvRiwwQkFBMEI7U0FDM0I7YUFBTSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDekMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFZLENBQUMsQ0FBQztZQUN4RCxPQUFPLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztTQUMzQjthQUFNO1lBQ0wsT0FBTztTQUNSO1FBQ0QsT0FBTyxHQUFHLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDSCxXQUFXLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUN0QyxXQUFXLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUNoQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUMsT0FBTztRQUNMLGVBQWUsRUFBRTtZQUNmO2dCQUNFLGdCQUFnQixFQUFFLGNBQWM7YUFDakM7U0FDRjtLQUNGLENBQUM7QUFFSixDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FBQyxPQUFZLEVBQUUsTUFBMkIsRUFBRSxXQUFtQjtJQUM5RixJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO0lBQ3pDLElBQUksYUFBYSxJQUFJLElBQUksRUFBRTtRQUN6QixNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxhQUFhLEdBQUc7WUFDckIsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDO0tBQ0g7U0FBTTtRQUNMLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQzlCLElBQUksYUFBYSxDQUFDLElBQUksRUFBRTtZQUN0QixPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUM7U0FDbEQ7S0FDRjtJQUNELE9BQU8sQ0FBQyxVQUFVO1FBQ2hCLGdFQUFnRTtRQUNoRSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzdELENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxNQUEyQjtJQUM1QyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTyxDQUFDLFVBQVUsQ0FBQztJQUMzQyxJQUFJLFlBQVksR0FBRyxVQUFVLENBQUMsbUJBQW1CLENBQUM7SUFDbEQsSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUNuQyxJQUFJLE1BQU0sR0FBRyxZQUFZLEdBQUcsR0FBRyxDQUFDO0lBQ2hDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDcEIsTUFBTSxHQUFHLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRDtTQUFNO1FBQ0wsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDdEIsTUFBTSxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxRSxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQztLQUN2QjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUF5QixFQUFFLE1BQTJCO0lBQ3pFLE9BQVEsSUFBSSxDQUFDLFFBQTRCLENBQUMsUUFBUyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxRixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBVSxFQUFFLEdBQVc7SUFDMUMsMEVBQTBFO0lBQzFFLHdFQUF3RTtJQUN4RSxJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBd0IsQ0FBQztJQUMvQyxJQUFJLFFBQVEsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUN2QyxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ2Isb0RBQW9EO1FBQ3BELE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDO0tBQ2Y7SUFDRCxNQUFNLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDckMsTUFBTSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUNwQyxVQUFVO0lBQ1YsSUFBSSxHQUFHO1FBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDMUIsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzVCLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtRQUNqQixJQUFJLE9BQVksQ0FBQztRQUNqQixJQUFJO1lBQ0YsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDbkIsaUJBQWlCO1lBQ2pCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2IsR0FBRztnQkFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsT0FBTztvQkFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUM7Z0JBQzVDLElBQUksR0FBRyxPQUFPLElBQUksSUFBSSxDQUFDO2FBQ3hCLFFBQVEsT0FBTyxFQUFFO1lBQ2xCLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2xCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO2FBQ3RCO1NBQ0Y7UUFBQyxPQUFPLENBQUMsRUFBRTtTQUVYO0tBQ0Y7SUFDRCxNQUFNLENBQUMsMEJBQTBCLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLElBQVM7SUFDM0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDN0IsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0FBR3RFLElBQUksZUFBZSxHQUFHO0lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO0FBQzVCLENBQUMsQ0FBQzs7QUFFRixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRWpGLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxlQUFzQixDQUFDLENBQUM7QUFDckUsa0JBQWtCO0FBQ2xCLElBQUksZ0JBQWdCLEdBQUc7SUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUM7QUFDN0IsQ0FBQyxDQUFDOztBQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUUsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRztJQUN0QyxrQ0FBa0M7SUFDbEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsNENBQTRDLENBQUMsQ0FBQztJQUNyRixLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztBQUMvQyxDQUFDLENBQUM7QUFDRixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxnQkFBdUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYnJlZXplIGZyb20gJ2JyZWV6ZS1jbGllbnQnO1xyXG5pbXBvcnQgeyBhcHBlbmRRdWVyeVN0cmluZ1BhcmFtZXRlciB9IGZyb20gJy4vYWRhcHRlci1jb3JlJztcclxuXHJcbmxldCBjb3JlID0gYnJlZXplLmNvcmU7XHJcblxyXG5kZWNsYXJlIHZhciB3aW5kb3c6IGFueTtcclxuZGVjbGFyZSB2YXIgZG9jdW1lbnQ6IGFueTtcclxuZGVjbGFyZSB2YXIgdXJsOiBhbnk7IC8vIG5lZWRlZCB0byBhY2Nlc3Mgbm9kZSdzIHVybC5wYXJzZVxyXG5kZWNsYXJlIHZhciBPRGF0YTogYW55O1xyXG5cclxuaW50ZXJmYWNlIE9EYXRhU2F2ZUNvbnRleHQgZXh0ZW5kcyBicmVlemUuU2F2ZUNvbnRleHQge1xyXG4gIHRlbXBLZXlzOiBicmVlemUuRW50aXR5S2V5W107XHJcbiAgY29udGVudEtleXM6IGJyZWV6ZS5FbnRpdHlbXTtcclxufVxyXG5cclxuLyoqIEBoaWRkZW4gKi9cclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlT0RhdGFBZGFwdGVyIGV4dGVuZHMgYnJlZXplLkFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyIHtcclxuICByZWxhdGl2ZVVybDogYm9vbGVhbiB8ICgoZHM6IGJyZWV6ZS5EYXRhU2VydmljZSwgdXJsOiBzdHJpbmcpID0+IHN0cmluZyk7XHJcbiAgLy8gX2NhdGNoTm9Db25uZWN0aW9uRXJyb3IgPSBhYnN0cmFjdERzYVByb3RvLl9jYXRjaE5vQ29ubmVjdGlvbkVycm9yO1xyXG4gIC8vIGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciA9IGFic3RyYWN0RHNhUHJvdG8uY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yO1xyXG4gIC8vIF9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IgPSBhYnN0cmFjdERzYVByb3RvLl9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3I7XHJcbiAgaGVhZGVycyA9IHsgXCJEYXRhU2VydmljZVZlcnNpb25cIjogXCIyLjBcIiB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLm5hbWUgPSBcIk9EYXRhXCI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVnaXN0ZXIoY29uZmlnPzogYnJlZXplLkJyZWV6ZUNvbmZpZykge1xyXG4gICAgY29uZmlnID0gY29uZmlnIHx8IGJyZWV6ZS5jb25maWc7XHJcbiAgICBjb25maWcucmVnaXN0ZXJBZGFwdGVyKFwiZGF0YVNlcnZpY2VcIiwgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXIpO1xyXG4gICAgcmV0dXJuIGNvbmZpZy5pbml0aWFsaXplQWRhcHRlckluc3RhbmNlKFwiZGF0YVNlcnZpY2VcIiwgXCJPRGF0YVwiLCB0cnVlKSBhcyBEYXRhU2VydmljZU9EYXRhQWRhcHRlcjtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemUoKSB7XHJcbiAgICBPRGF0YSA9IGNvcmUucmVxdWlyZUxpYihcIk9EYXRhXCIsIFwiTmVlZGVkIHRvIHN1cHBvcnQgcmVtb3RlIE9EYXRhIHNlcnZpY2VzXCIpO1xyXG4gICAgT0RhdGEuanNvbkhhbmRsZXIucmVjb2duaXplRGF0ZXMgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEFic29sdXRlIFVSTCBpcyB0aGUgZGVmYXVsdCBhcyBvZiBCcmVlemUgMS41LjUuICBcclxuICAvLyBUbyB1c2UgcmVsYXRpdmUgVVJMIChsaWtlIHByZS0xLjUuNSksIGFkZCBhZGFwdGVySW5zdGFuY2UucmVsYXRpdmVVcmwgPSB0cnVlOlxyXG4gIC8vXHJcbiAgLy8gICAgIGxldCBkcyA9IGJyZWV6ZS5jb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZShcImRhdGFTZXJ2aWNlXCIsIFwid2ViQXBpT0RhdGFcIik7XHJcbiAgLy8gICAgIGRzLnJlbGF0aXZlVXJsID0gdHJ1ZTsgXHJcbiAgLy9cclxuICAvLyBUbyB1c2UgY3VzdG9tIHVybCBjb25zdHJ1Y3Rpb24sIGFkZCBhZGFwdGVySW5zdGFuY2UucmVsYXRpdmVVcmwgPSBteWZ1bmN0aW9uKGRhdGFTZXJ2aWNlLCB1cmwpOlxyXG4gIC8vXHJcbiAgLy8gICAgIGxldCBkcyA9IGJyZWV6ZS5jb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZShcImRhdGFTZXJ2aWNlXCIsIFwid2ViQXBpT0RhdGFcIik7XHJcbiAgLy8gICAgIGRzLnJlbGF0aXZlVXJsID0gZnVuY3Rpb24oZGF0YVNlcnZpY2UsIHVybCkge1xyXG4gIC8vICAgICAgICByZXR1cm4gc29tZWhvd0NvbnZlcnQodXJsKTtcclxuICAvLyAgICAgfVxyXG4gIC8vXHJcblxyXG4gIGZldGNoTWV0YWRhdGEobWV0YWRhdGFTdG9yZTogYnJlZXplLk1ldGFkYXRhU3RvcmUsIGRhdGFTZXJ2aWNlOiBicmVlemUuRGF0YVNlcnZpY2UpIHtcclxuICAgIGxldCBzZXJ2aWNlTmFtZSA9IGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lO1xyXG5cclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIGlmICh0aGlzLnJlbGF0aXZlVXJsID09PSB0cnVlKSB7XHJcbiAgICAgIHVybCA9IGRhdGFTZXJ2aWNlLnF1YWxpZnlVcmwoJyRtZXRhZGF0YScpO1xyXG4gICAgfSBlbHNlIGlmIChjb3JlLmlzRnVuY3Rpb24odGhpcy5yZWxhdGl2ZVVybCkpIHtcclxuICAgICAgdXJsID0gKHRoaXMucmVsYXRpdmVVcmwgYXMgYW55KShkYXRhU2VydmljZSwgJyRtZXRhZGF0YScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gdGhpcy5nZXRBYnNvbHV0ZVVybChkYXRhU2VydmljZSwgJyRtZXRhZGF0YScpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtaGVhZGVycyA9IGNvcmUuZXh0ZW5kKHt9LCB0aGlzLmhlYWRlcnMpO1xyXG4gICAgKG1oZWFkZXJzIGFzIGFueSkuQWNjZXB0ID0gJ2FwcGxpY2F0aW9uLyo7IG9kYXRhLm1ldGFkYXRhPWZ1bGwnO1xyXG5cclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAvLyBPRGF0YS5yZWFkKHVybCxcclxuICAgICAgT0RhdGEucmVhZCh7XHJcbiAgICAgICAgcmVxdWVzdFVyaTogdXJsLFxyXG4gICAgICAgIC8vIGhlYWRlcnM6IHsgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJ9XHJcbiAgICAgICAgaGVhZGVyczogbWhlYWRlcnNcclxuICAgICAgfSxcclxuICAgICAgICBmdW5jdGlvbiAoZGF0YTogYW55KSB7XHJcbiAgICAgICAgICAvLyBkYXRhLmRhdGFTZXJ2aWNlcy5zY2hlbWEgaXMgYW4gYXJyYXkgb2Ygc2NoZW1hcy4gd2l0aCBwcm9wZXJ0aWVzIG9mXHJcbiAgICAgICAgICAvLyBlbnRpdHlDb250YWluZXJbXSwgYXNzb2NpYXRpb25bXSwgZW50aXR5VHlwZVtdLCBhbmQgbmFtZXNwYWNlLlxyXG4gICAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLmRhdGFTZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBuZXcgRXJyb3IoXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yOiBcIiArIHVybCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGNzZGxNZXRhZGF0YSA9IGRhdGEuZGF0YVNlcnZpY2VzO1xyXG5cclxuICAgICAgICAgIC8vIG1pZ2h0IGhhdmUgYmVlbiBmZXRjaGVkIGJ5IGFub3RoZXIgcXVlcnlcclxuICAgICAgICAgIGlmICghbWV0YWRhdGFTdG9yZS5oYXNNZXRhZGF0YUZvcihzZXJ2aWNlTmFtZSkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBtZXRhZGF0YVN0b3JlLmltcG9ydE1ldGFkYXRhKGNzZGxNZXRhZGF0YSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcIk1ldGFkYXRhIHF1ZXJ5IGZhaWxlZCBmb3IgXCIgKyB1cmwgKyBcIjsgVW5hYmxlIHRvIHByb2Nlc3MgcmV0dXJuZWQgbWV0YWRhdGE6IFwiICsgZS5tZXNzYWdlKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1ldGFkYXRhU3RvcmUuYWRkRGF0YVNlcnZpY2UoZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZXNvbHZlKGNzZGxNZXRhZGF0YSk7XHJcblxyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICBsZXQgZXJyID0gY3JlYXRlRXJyb3IoZXJyb3IsIHVybCk7XHJcbiAgICAgICAgICBlcnIubWVzc2FnZSA9IFwiTWV0YWRhdGEgcXVlcnkgZmFpbGVkIGZvcjogXCIgKyB1cmwgKyBcIjsgXCIgKyAoZXJyLm1lc3NhZ2UgfHwgXCJcIik7XHJcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBPRGF0YS5tZXRhZGF0YUhhbmRsZXJcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBleGVjdXRlUXVlcnkobWFwcGluZ0NvbnRleHQ6IGJyZWV6ZS5NYXBwaW5nQ29udGV4dCkge1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMucmVsYXRpdmVVcmwgPT09IHRydWUpIHtcclxuICAgICAgdXJsID0gbWFwcGluZ0NvbnRleHQuZ2V0VXJsKCk7XHJcbiAgICB9IGVsc2UgaWYgKGNvcmUuaXNGdW5jdGlvbih0aGlzLnJlbGF0aXZlVXJsKSkge1xyXG4gICAgICB1cmwgPSAodGhpcy5yZWxhdGl2ZVVybCBhcyBhbnkpKG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLCBtYXBwaW5nQ29udGV4dC5nZXRVcmwoKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmwgPSB0aGlzLmdldEFic29sdXRlVXJsKG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLCBtYXBwaW5nQ29udGV4dC5nZXRVcmwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIHF1ZXJ5IHBhcmFtcyBpZiAud2l0aFBhcmFtZXRlcnMgd2FzIHVzZWRcclxuICAgIGxldCBxdWVyeSA9IG1hcHBpbmdDb250ZXh0LnF1ZXJ5IGFzIGJyZWV6ZS5FbnRpdHlRdWVyeTtcclxuICAgIGlmICghY29yZS5pc0VtcHR5KHF1ZXJ5LnBhcmFtZXRlcnMpKSB7XHJcbiAgICAgIGxldCBwYXJhbVN0cmluZyA9IHRvUXVlcnlTdHJpbmcocXVlcnkucGFyYW1ldGVycyk7XHJcbiAgICAgIHVybCA9IGFwcGVuZFF1ZXJ5U3RyaW5nUGFyYW1ldGVyKHVybCwgcGFyYW1TdHJpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2U8YnJlZXplLlF1ZXJ5UmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIE9EYXRhLnJlYWQoe1xyXG4gICAgICAgIHJlcXVlc3RVcmk6IHVybCxcclxuICAgICAgICBoZWFkZXJzOiBjb3JlLmV4dGVuZCh7fSwgdGhpcy5oZWFkZXJzKVxyXG4gICAgICB9LFxyXG4gICAgICAgIGZ1bmN0aW9uIChkYXRhOiBhbnksIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICAgIGxldCBpbmxpbmVDb3VudDogYW55O1xyXG4gICAgICAgICAgaWYgKGRhdGEuX19jb3VudCkge1xyXG4gICAgICAgICAgICAvLyBPRGF0YSBjYW4gcmV0dXJuIGRhdGEuX19jb3VudCBhcyBhIHN0cmluZ1xyXG4gICAgICAgICAgICBpbmxpbmVDb3VudCA9IHBhcnNlSW50KGRhdGEuX19jb3VudCwgMTApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gT2RhdGEgcmV0dXJucyBkaWZmZXJlbnQgcmVzdWx0IHN0cnVjdHVyZSB3aGVuIGl0IHJldHVybnMgbXVsdGlwbGUgZW50aXRpZXMgKGRhdGEucmVzdWx0cykgdnMgc2luZ2xlIGVudGl0eSAoZGF0YSBkaXJlY3RseSkuXHJcbiAgICAgICAgICAvLyBAc2VlIGh0dHA6Ly93d3cub2RhdGEub3JnL2RvY3VtZW50YXRpb24vb2RhdGEtdmVyc2lvbi0yLTAvanNvbi1mb3JtYXQvI1JlcHJlc2VudGluZ0NvbGxlY3Rpb25zT2ZFbnRyaWVzXHJcbiAgICAgICAgICAvLyBhbmQgaHR0cDovL3d3dy5vZGF0YS5vcmcvZG9jdW1lbnRhdGlvbi9vZGF0YS12ZXJzaW9uLTItMC9qc29uLWZvcm1hdC8jUmVwcmVzZW50aW5nRW50cmllc1xyXG4gICAgICAgICAgbGV0IHJlc3VsdHM6IGFueTtcclxuICAgICAgICAgIGlmIChkYXRhLnJlc3VsdHMpIHtcclxuICAgICAgICAgICAgcmVzdWx0cyA9IGRhdGEucmVzdWx0cztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHMgPSBkYXRhO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoeyByZXN1bHRzOiByZXN1bHRzLCBpbmxpbmVDb3VudDogaW5saW5lQ291bnQsIGh0dHBSZXNwb25zZTogcmVzcG9uc2UsIHF1ZXJ5OiBxdWVyeSB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGVycm9yLCB1cmwpKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHNhdmVDaGFuZ2VzKG9kYXRhU2F2ZUNvbnRleHQ6IGJyZWV6ZS5TYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZTogYnJlZXplLlNhdmVCdW5kbGUpOiBQcm9taXNlPGJyZWV6ZS5TYXZlUmVzdWx0PiB7XHJcbiAgICBsZXQgYWRhcHRlciA9IG9kYXRhU2F2ZUNvbnRleHQuYWRhcHRlciA9IHRoaXM7XHJcbiAgICBsZXQgc2F2ZUNvbnRleHQgPSBvZGF0YVNhdmVDb250ZXh0IGFzIE9EYXRhU2F2ZUNvbnRleHQ7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5yZWxhdGl2ZVVybCA9PT0gdHJ1ZSkge1xyXG4gICAgICBzYXZlQ29udGV4dC5yb3V0ZVByZWZpeCA9IGFkYXB0ZXIuZ2V0Um91dGVQcmVmaXgoc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UpO1xyXG4gICAgICB1cmwgPSBzYXZlQ29udGV4dC5kYXRhU2VydmljZS5xdWFsaWZ5VXJsKFwiJGJhdGNoXCIpO1xyXG4gICAgfSBlbHNlIGlmIChjb3JlLmlzRnVuY3Rpb24oYWRhcHRlci5yZWxhdGl2ZVVybCkpIHtcclxuICAgICAgc2F2ZUNvbnRleHQucm91dGVQcmVmaXggPSAoYWRhcHRlci5yZWxhdGl2ZVVybCBhcyBGdW5jdGlvbikoc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UsICcnKTtcclxuICAgICAgdXJsID0gc2F2ZUNvbnRleHQucm91dGVQcmVmaXggKyAnJGJhdGNoJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNhdmVDb250ZXh0LnJvdXRlUHJlZml4ID0gYWRhcHRlci5nZXRBYnNvbHV0ZVVybChzYXZlQ29udGV4dC5kYXRhU2VydmljZSwgJycpO1xyXG4gICAgICB1cmwgPSBzYXZlQ29udGV4dC5yb3V0ZVByZWZpeCArICckYmF0Y2gnO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXF1ZXN0RGF0YSA9IGNyZWF0ZUNoYW5nZVJlcXVlc3RzKHNhdmVDb250ZXh0LCBzYXZlQnVuZGxlKTtcclxuICAgIGxldCB0ZW1wS2V5cyA9IHNhdmVDb250ZXh0LnRlbXBLZXlzO1xyXG4gICAgbGV0IGNvbnRlbnRLZXlzID0gc2F2ZUNvbnRleHQuY29udGVudEtleXM7XHJcbiAgICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlPGJyZWV6ZS5TYXZlUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIE9EYXRhLnJlcXVlc3Qoe1xyXG4gICAgICAgIGhlYWRlcnM6IGNvcmUuZXh0ZW5kKHt9LCB0aGlzLmhlYWRlcnMpLFxyXG4gICAgICAgIHJlcXVlc3RVcmk6IHVybCxcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGRhdGE6IHJlcXVlc3REYXRhXHJcbiAgICAgIH0sIGZ1bmN0aW9uIChkYXRhOiBhbnksIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICBsZXQgZW50aXRpZXM6IGFueVtdID0gW107XHJcbiAgICAgICAgbGV0IGtleU1hcHBpbmdzOiBicmVlemUuS2V5TWFwcGluZ1tdID0gW107XHJcbiAgICAgICAgbGV0IHNhdmVSZXN1bHQ6IGJyZWV6ZS5TYXZlUmVzdWx0ID0geyBlbnRpdGllczogZW50aXRpZXMsIGtleU1hcHBpbmdzOiBrZXlNYXBwaW5ncyB9O1xyXG4gICAgICAgIGRhdGEuX19iYXRjaFJlc3BvbnNlcy5mb3JFYWNoKGZ1bmN0aW9uIChicjogYW55KSB7XHJcbiAgICAgICAgICBici5fX2NoYW5nZVJlc3BvbnNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjcjogYW55KSB7XHJcbiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IGNyLnJlc3BvbnNlIHx8IGNyO1xyXG4gICAgICAgICAgICBsZXQgc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1c0NvZGU7XHJcbiAgICAgICAgICAgIGlmICgoIXN0YXR1c0NvZGUpIHx8IHN0YXR1c0NvZGUgPj0gNDAwKSB7XHJcbiAgICAgICAgICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKGNyLCB1cmwpKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBjb250ZW50SWQgPSBjci5oZWFkZXJzW1wiQ29udGVudC1JRFwiXTtcclxuICAgICAgICAgICAgLy8gT2xpbmdvIHNlbmRzIGRpZmZlcmVudCBjYXNlIG9mICdJRCcgZm9yIHRoZSBoZWFkZXIgbmFtZS5cclxuICAgICAgICAgICAgaWYgKCFjb250ZW50SWQpIHtcclxuICAgICAgICAgICAgICBjb250ZW50SWQgPSBjci5oZWFkZXJzW1wiQ29udGVudC1JZFwiXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHJhd0VudGl0eSA9IGNyLmRhdGE7XHJcbiAgICAgICAgICAgIGlmIChyYXdFbnRpdHkpIHtcclxuICAgICAgICAgICAgICBsZXQgdGVtcEtleSA9IHRlbXBLZXlzW2NvbnRlbnRJZF07XHJcbiAgICAgICAgICAgICAgaWYgKHRlbXBLZXkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlbnRpdHlUeXBlID0gdGVtcEtleS5lbnRpdHlUeXBlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVudGl0eVR5cGUuYXV0b0dlbmVyYXRlZEtleVR5cGUgIT09IGJyZWV6ZS5BdXRvR2VuZXJhdGVkS2V5VHlwZS5Ob25lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB0ZW1wVmFsdWUgPSB0ZW1wS2V5LnZhbHVlc1swXTtcclxuICAgICAgICAgICAgICAgICAgbGV0IHJlYWxLZXkgPSBlbnRpdHlUeXBlLmdldEVudGl0eUtleUZyb21SYXdFbnRpdHkocmF3RW50aXR5LCBicmVlemUuRGF0YVByb3BlcnR5LmdldFJhd1ZhbHVlRnJvbVNlcnZlcik7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBrZXlNYXBwaW5nID0geyBlbnRpdHlUeXBlTmFtZTogZW50aXR5VHlwZS5uYW1lLCB0ZW1wVmFsdWU6IHRlbXBWYWx1ZSwgcmVhbFZhbHVlOiByZWFsS2V5LnZhbHVlc1swXSB9O1xyXG4gICAgICAgICAgICAgICAgICBrZXlNYXBwaW5ncy5wdXNoKGtleU1hcHBpbmcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbnRpdGllcy5wdXNoKHJhd0VudGl0eSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IG9yaWdFbnRpdHkgPSBjb250ZW50S2V5c1tjb250ZW50SWRdO1xyXG4gICAgICAgICAgICAgIGVudGl0aWVzLnB1c2gob3JpZ0VudGl0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlKHNhdmVSZXN1bHQpO1xyXG4gICAgICB9LCBmdW5jdGlvbiAoZXJyOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGVyciwgdXJsKSk7XHJcbiAgICAgIH0sIE9EYXRhLmJhdGNoSGFuZGxlcik7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG5cclxuICB9XHJcblxyXG4gIGpzb25SZXN1bHRzQWRhcHRlcjogYnJlZXplLkpzb25SZXN1bHRzQWRhcHRlciA9IG5ldyBicmVlemUuSnNvblJlc3VsdHNBZGFwdGVyKHtcclxuICAgIG5hbWU6IFwiT0RhdGFfZGVmYXVsdFwiLFxyXG5cclxuICAgIHZpc2l0Tm9kZTogZnVuY3Rpb24gKG5vZGU6IGFueSwgbWFwcGluZ0NvbnRleHQ6IGJyZWV6ZS5NYXBwaW5nQ29udGV4dCwgbm9kZUNvbnRleHQ6IGJyZWV6ZS5Ob2RlQ29udGV4dCkge1xyXG4gICAgICBsZXQgcmVzdWx0OiBhbnkgPSB7fTtcclxuICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgbGV0IG1ldGFkYXRhID0gbm9kZS5fX21ldGFkYXRhO1xyXG4gICAgICBpZiAobWV0YWRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgIC8vIFRPRE86IG1heSBiZSBhYmxlIHRvIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudCBieSBjYWNoaW5nIG9mIHRoZSBwcmV2aW91cyB2YWx1ZS5cclxuICAgICAgICBsZXQgZW50aXR5VHlwZU5hbWUgPSBicmVlemUuTWV0YWRhdGFTdG9yZS5ub3JtYWxpemVUeXBlTmFtZShtZXRhZGF0YS50eXBlKTtcclxuICAgICAgICBsZXQgZXQgPSBlbnRpdHlUeXBlTmFtZSAmJiBtYXBwaW5nQ29udGV4dC5lbnRpdHlNYW5hZ2VyLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShlbnRpdHlUeXBlTmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgLy8gT0RhdGEgcmVzcG9uc2UgZG9lc24ndCBkaXN0aW5ndWlzaCBhIHByb2plY3Rpb24gZnJvbSBhIHdob2xlIGVudGl0eS5cclxuICAgICAgICAvLyBXZSdsbCBhc3N1bWUgdGhhdCB3aG9sZS1lbnRpdHkgZGF0YSB3b3VsZCBoYXZlIGF0IGxlYXN0IGFzIG1hbnkgcHJvcGVydGllcyAgKDw9KVxyXG4gICAgICAgIC8vIGFzIHRoZSBFbnRpdHlUeXBlIGhhcyBtYXBwZWQgcHJvcGVydGllcyBvbiB0aGUgYmFzaXMgdGhhdFxyXG4gICAgICAgIC8vIG1vc3QgcHJvamVjdGlvbnMgcmVtb3ZlIHByb3BlcnRpZXMgcmF0aGVyIHRoYW4gYWRkIHRoZW0uXHJcbiAgICAgICAgLy8gSWYgbm90LCBhc3N1bWUgaXQncyBhIHByb2plY3Rpb24gYW5kIGRvIE5PVCB0cmVhdCBhcyBhbiBlbnRpdHlcclxuICAgICAgICBpZiAoZXQgJiYgZXQuX21hcHBlZFByb3BlcnRpZXNDb3VudCA8PSBPYmplY3Qua2V5cyhub2RlKS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAvLyBpZiAoZXQgJiYgZXQuX21hcHBlZFByb3BlcnRpZXNDb3VudCA9PT0gT2JqZWN0LmtleXMobm9kZSkubGVuZ3RoIC0gMSkgeyAvLyBPTERcclxuICAgICAgICAgIHJlc3VsdC5lbnRpdHlUeXBlID0gZXQ7XHJcbiAgICAgICAgICBsZXQgdXJpS2V5ID0gbWV0YWRhdGEudXJpIHx8IG1ldGFkYXRhLmlkO1xyXG4gICAgICAgICAgaWYgKHVyaUtleSkge1xyXG4gICAgICAgICAgICAvLyBTdHJpcCBiYXNlVXJpIHRvIG1ha2UgdXJpS2V5IGEgcmVsYXRpdmUgdXJpXHJcbiAgICAgICAgICAgIC8vIFRvZG86IHdoeSBpcyB0aGlzIG5lY2Vzc2FyeSB3aGVuIGFic29sdXRlIHdvcmtzIGZvciBldmVyeSBPRGF0YSBzb3VyY2UgdGVzdGVkP1xyXG4gICAgICAgICAgICBsZXQgcmUgPSBuZXcgUmVnRXhwKCdeJyArIG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lLCAnaScpO1xyXG4gICAgICAgICAgICB1cmlLZXkgPSB1cmlLZXkucmVwbGFjZShyZSwgJycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzdWx0LmV4dHJhTWV0YWRhdGEgPSB7XHJcbiAgICAgICAgICAgIHVyaUtleTogdXJpS2V5LFxyXG4gICAgICAgICAgICBldGFnOiBtZXRhZGF0YS5ldGFnXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBPRGF0YSB2MyAtIHByb2plY3Rpb24gYXJyYXlzIHdpbGwgYmUgZW5jbG9zZWQgaW4gYSByZXN1bHRzIGFycmF5XHJcbiAgICAgIGlmIChub2RlLnJlc3VsdHMpIHtcclxuICAgICAgICByZXN1bHQubm9kZSA9IG5vZGUucmVzdWx0cztcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHByb3BlcnR5TmFtZSA9IG5vZGVDb250ZXh0LnByb3BlcnR5TmFtZTtcclxuICAgICAgcmVzdWx0Lmlnbm9yZSA9IG5vZGUuX19kZWZlcnJlZCAhPSBudWxsIHx8IHByb3BlcnR5TmFtZSA9PT0gXCJfX21ldGFkYXRhXCIgfHxcclxuICAgICAgICAvLyBFbnRpdHlLZXkgcHJvcGVydGllcyBjYW4gYmUgcHJvZHVjZWQgYnkgRURNWCBtb2RlbHNcclxuICAgICAgICAocHJvcGVydHlOYW1lID09PSBcIkVudGl0eUtleVwiICYmIG5vZGUuJHR5cGUgJiYgY29yZS5zdHJpbmdTdGFydHNXaXRoKG5vZGUuJHR5cGUsIFwiU3lzdGVtLkRhdGFcIikpO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgZ2V0QWJzb2x1dGVVcmwoZGF0YVNlcnZpY2U6IGJyZWV6ZS5EYXRhU2VydmljZSwgdXJsOiBzdHJpbmcpIHtcclxuICAgIGxldCBzZXJ2aWNlTmFtZSA9IGRhdGFTZXJ2aWNlLnF1YWxpZnlVcmwoJycpO1xyXG4gICAgLy8gb25seSBwcmVmaXggd2l0aCBzZXJ2aWNlTmFtZSBpZiBub3QgYWxyZWFkeSBvbiB0aGUgdXJsXHJcbiAgICBsZXQgYmFzZSA9IChjb3JlLnN0cmluZ1N0YXJ0c1dpdGgodXJsLCBzZXJ2aWNlTmFtZSkpID8gJycgOiBzZXJ2aWNlTmFtZTtcclxuICAgIC8vIElmIG5vIHByb3RvY29sLCB0dXJuIGJhc2UgaW50byBhbiBhYnNvbHV0ZSBVUklcclxuICAgIGlmICh3aW5kb3cgJiYgc2VydmljZU5hbWUuaW5kZXhPZignLy8nKSA8IDApIHtcclxuICAgICAgLy8gbm8gcHJvdG9jb2w7IG1ha2UgaXQgYWJzb2x1dGVcclxuICAgICAgYmFzZSA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArXHJcbiAgICAgICAgKGNvcmUuc3RyaW5nU3RhcnRzV2l0aChzZXJ2aWNlTmFtZSwgJy8nKSA/ICcnIDogJy8nKSArXHJcbiAgICAgICAgYmFzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBiYXNlICsgdXJsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um91dGVQcmVmaXgoZGF0YVNlcnZpY2U6IGJyZWV6ZS5EYXRhU2VydmljZSkge1xyXG4gICAgLy8gR2V0IHRoZSByb3V0ZVByZWZpeCBmcm9tIGEgV2ViIEFQSSBPRGF0YSBzZXJ2aWNlIG5hbWUuXHJcbiAgICAvLyBUaGUgcm91dGVQcmVmaXggaXMgcHJlc3VtZWQgdG8gYmUgdGhlIHBhdGhuYW1lIHdpdGhpbiB0aGUgZGF0YVNlcnZpY2Uuc2VydmljZU5hbWVcclxuICAgIC8vIEV4YW1wbGVzIG9mIHNlcnZpY2VuYW1lIC0+IHJvdXRlUHJlZml4OlxyXG4gICAgLy8gICAnaHR0cDovL2xvY2FsaG9zdDo1NTgwMi9vZGF0YS8nIC0+ICdvZGF0YS8nXHJcbiAgICAvLyAgICdodHRwOi8vMTk4LjE1NC4xMjEuNzUvc2VydmljZS9vZGF0YS8nIC0+ICdzZXJ2aWNlL29kYXRhLydcclxuICAgIGxldCBwYXJzZXI6IGFueTtcclxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICdvYmplY3QnKSB7IC8vIGJyb3dzZXJcclxuICAgICAgcGFyc2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICBwYXJzZXIuaHJlZiA9IGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lO1xyXG4gICAgfSBlbHNlIHsgLy8gbm9kZVxyXG4gICAgICAvLyBUT0RPOiBob3cgdG8gYmVzdCBoYW5kbGUgdGhpc1xyXG4gICAgICAvLyBhc3N1bWVzIGV4aXN0ZW5jZSBvZiBub2RlJ3MgdXJsLnBhcnNlIG1ldGhvZC5cclxuICAgICAgcGFyc2VyID0gdXJsLnBhcnNlKGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lKTtcclxuICAgIH1cclxuICAgIGxldCBwcmVmaXggPSBwYXJzZXIucGF0aG5hbWU7XHJcbiAgICBpZiAocHJlZml4WzBdID09PSAnLycpIHtcclxuICAgICAgcHJlZml4ID0gcHJlZml4LnN1YnN0cigxKTtcclxuICAgIH0gLy8gZHJvcCBsZWFkaW5nICcvJyAgKGFsbCBidXQgSUUpXHJcbiAgICBpZiAocHJlZml4LnN1YnN0cigtMSkgIT09ICcvJykge1xyXG4gICAgICBwcmVmaXggKz0gJy8nO1xyXG4gICAgfSAgICAgIC8vIGVuc3VyZSB0cmFpbGluZyAnLydcclxuICAgIHJldHVybiBwcmVmaXg7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuLy8gY3J1ZGUgc2VyaWFsaXplci4gIERvZXNuJ3QgcmVjdXJzZVxyXG5mdW5jdGlvbiB0b1F1ZXJ5U3RyaW5nKG9iajogT2JqZWN0KSB7XHJcbiAgbGV0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGZvciAobGV0IGkgaW4gb2JqKSB7XHJcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGkpICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2JqW2ldKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBwYXJ0cy5qb2luKFwiJlwiKTtcclxufVxyXG5cclxuLyoqIFRyYW5zZm9ybSBkYXRhIHByb3BlcnRpZXMgd2hpbGUgdW53cmFwcGluZyBlbnRpdGllcyAqL1xyXG5mdW5jdGlvbiB0cmFuc2Zvcm1WYWx1ZShwcm9wOiBicmVlemUuRGF0YVByb3BlcnR5LCB2YWw6IGFueSkge1xyXG4gIGlmIChwcm9wLmlzVW5tYXBwZWQpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgaWYgKHByb3AuZGF0YVR5cGUgPT09IGJyZWV6ZS5EYXRhVHlwZS5EYXRlVGltZU9mZnNldCkge1xyXG4gICAgLy8gVGhlIGRhdGFqcyBsaWIgdHJpZXMgdG8gdHJlYXQgY2xpZW50IGRhdGVUaW1lcyB0aGF0IGFyZSBkZWZpbmVkIGFzIERhdGVUaW1lT2Zmc2V0IG9uIHRoZSBzZXJ2ZXIgZGlmZmVyZW50bHlcclxuICAgIC8vIGZyb20gb3RoZXIgZGF0ZVRpbWVzLiBUaGlzIGZpeCBjb21wZW5zYXRlcyBiZWZvcmUgdGhlIHNhdmUuXHJcbiAgICB2YWwgPSB2YWwgJiYgbmV3IERhdGUodmFsLmdldFRpbWUoKSAtICh2YWwuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKSk7XHJcbiAgfSBlbHNlIGlmIChwcm9wLmRhdGFUeXBlID09PSBicmVlemUuRGF0YVR5cGUuRGF0ZU9ubHkpIHtcclxuICAgIHZhbCA9IGJyZWV6ZS5EYXRhVHlwZS50b0RhdGVPbmx5U3RyaW5nKHZhbCk7XHJcbiAgfSBlbHNlIGlmICgocHJvcC5kYXRhVHlwZSBhcyBicmVlemUuRGF0YVR5cGUpLnF1b3RlSnNvbk9EYXRhKSB7XHJcbiAgICB2YWwgPSB2YWwgIT0gbnVsbCA/IHZhbC50b1N0cmluZygpIDogdmFsO1xyXG4gIH1cclxuICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVDaGFuZ2VSZXF1ZXN0cyhzYXZlQ29udGV4dDogT0RhdGFTYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZTogYnJlZXplLlNhdmVCdW5kbGUpIHtcclxuICBsZXQgY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yID0gKHNhdmVDb250ZXh0LmFkYXB0ZXIgYXMgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXIpLl9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3Ioc2F2ZUNvbnRleHQsIHNhdmVCdW5kbGUpO1xyXG4gIGxldCBjaGFuZ2VSZXF1ZXN0czogYW55W10gPSBbXTtcclxuICBsZXQgdGVtcEtleXM6IGJyZWV6ZS5FbnRpdHlLZXlbXSA9IFtdO1xyXG4gIGxldCBjb250ZW50S2V5czogYnJlZXplLkVudGl0eVtdID0gW107XHJcbiAgbGV0IGVudGl0eU1hbmFnZXIgPSBzYXZlQ29udGV4dC5lbnRpdHlNYW5hZ2VyO1xyXG4gIGxldCBoZWxwZXIgPSBlbnRpdHlNYW5hZ2VyLmhlbHBlcjtcclxuICBsZXQgaWQgPSAwO1xyXG4gIGxldCByb3V0ZVByZWZpeCA9IHNhdmVDb250ZXh0LnJvdXRlUHJlZml4O1xyXG5cclxuICBzYXZlQnVuZGxlLmVudGl0aWVzLmZvckVhY2goZnVuY3Rpb24gKGVudGl0eSwgaW5kZXgpIHtcclxuICAgIGxldCBhc3BlY3QgPSBlbnRpdHkuZW50aXR5QXNwZWN0O1xyXG4gICAgaWQgPSBpZCArIDE7IC8vIHdlIGFyZSBkZWxpYmVyYXRlbHkgc2tpcHBpbmcgaWQ9MCBiZWNhdXNlIENvbnRlbnQtSUQgPSAwIHNlZW1zIHRvIGJlIGlnbm9yZWQuXHJcbiAgICBsZXQgcmVxdWVzdCA9IHsgaGVhZGVyczogeyBcIkNvbnRlbnQtSURcIjogaWQsIFwiRGF0YVNlcnZpY2VWZXJzaW9uXCI6IFwiMi4wXCIgfSB9IGFzIGFueTtcclxuICAgIGNvbnRlbnRLZXlzW2lkXSA9IGVudGl0eTtcclxuICAgIGlmIChhc3BlY3QuZW50aXR5U3RhdGUuaXNBZGRlZCgpKSB7XHJcbiAgICAgIHJlcXVlc3QucmVxdWVzdFVyaSA9IHJvdXRlUHJlZml4ICsgZW50aXR5LmVudGl0eVR5cGUuZGVmYXVsdFJlc291cmNlTmFtZTtcclxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBcIlBPU1RcIjtcclxuICAgICAgcmVxdWVzdC5kYXRhID0gaGVscGVyLnVud3JhcEluc3RhbmNlKGVudGl0eSwgdHJhbnNmb3JtVmFsdWUpO1xyXG4gICAgICB0ZW1wS2V5c1tpZF0gPSBhc3BlY3QuZ2V0S2V5KCk7XHJcbiAgICB9IGVsc2UgaWYgKGFzcGVjdC5lbnRpdHlTdGF0ZS5pc01vZGlmaWVkKCkpIHtcclxuICAgICAgdXBkYXRlRGVsZXRlTWVyZ2VSZXF1ZXN0KHJlcXVlc3QsIGFzcGVjdCwgcm91dGVQcmVmaXghKTtcclxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBcIk1FUkdFXCI7XHJcbiAgICAgIHJlcXVlc3QuZGF0YSA9IGhlbHBlci51bndyYXBDaGFuZ2VkVmFsdWVzKGVudGl0eSwgZW50aXR5TWFuYWdlci5tZXRhZGF0YVN0b3JlLCB0cmFuc2Zvcm1WYWx1ZSk7XHJcbiAgICAgIC8vIHNob3VsZCBiZSBhIFBBVENIL01FUkdFXHJcbiAgICB9IGVsc2UgaWYgKGFzcGVjdC5lbnRpdHlTdGF0ZS5pc0RlbGV0ZWQoKSkge1xyXG4gICAgICB1cGRhdGVEZWxldGVNZXJnZVJlcXVlc3QocmVxdWVzdCwgYXNwZWN0LCByb3V0ZVByZWZpeCEpO1xyXG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9IFwiREVMRVRFXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXF1ZXN0ID0gY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLmdldFJlcXVlc3QocmVxdWVzdCwgZW50aXR5LCBpbmRleCk7XHJcbiAgICBjaGFuZ2VSZXF1ZXN0cy5wdXNoKHJlcXVlc3QpO1xyXG4gIH0pO1xyXG4gIHNhdmVDb250ZXh0LmNvbnRlbnRLZXlzID0gY29udGVudEtleXM7XHJcbiAgc2F2ZUNvbnRleHQudGVtcEtleXMgPSB0ZW1wS2V5cztcclxuICBjaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IuZG9uZShjaGFuZ2VSZXF1ZXN0cyk7XHJcbiAgcmV0dXJuIHtcclxuICAgIF9fYmF0Y2hSZXF1ZXN0czogW1xyXG4gICAgICB7XHJcbiAgICAgICAgX19jaGFuZ2VSZXF1ZXN0czogY2hhbmdlUmVxdWVzdHNcclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH07XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVEZWxldGVNZXJnZVJlcXVlc3QocmVxdWVzdDogYW55LCBhc3BlY3Q6IGJyZWV6ZS5FbnRpdHlBc3BlY3QsIHJvdXRlUHJlZml4OiBzdHJpbmcpIHtcclxuICBsZXQgdXJpS2V5OiBzdHJpbmc7XHJcbiAgbGV0IGV4dHJhTWV0YWRhdGEgPSBhc3BlY3QuZXh0cmFNZXRhZGF0YTtcclxuICBpZiAoZXh0cmFNZXRhZGF0YSA9PSBudWxsKSB7XHJcbiAgICB1cmlLZXkgPSBnZXRVcmlLZXkoYXNwZWN0KTtcclxuICAgIGFzcGVjdC5leHRyYU1ldGFkYXRhID0ge1xyXG4gICAgICB1cmlLZXk6IHVyaUtleVxyXG4gICAgfTtcclxuICB9IGVsc2Uge1xyXG4gICAgdXJpS2V5ID0gZXh0cmFNZXRhZGF0YS51cmlLZXk7XHJcbiAgICBpZiAoZXh0cmFNZXRhZGF0YS5ldGFnKSB7XHJcbiAgICAgIHJlcXVlc3QuaGVhZGVyc1tcIklmLU1hdGNoXCJdID0gZXh0cmFNZXRhZGF0YS5ldGFnO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXF1ZXN0LnJlcXVlc3RVcmkgPVxyXG4gICAgLy8gdXNlIHJvdXRlUHJlZml4IGlmIHVyaUtleSBsYWNrcyBwcm90b2NvbCAoaS5lLiwgcmVsYXRpdmUgdXJpKVxyXG4gICAgdXJpS2V5LmluZGV4T2YoJy8vJykgPiAwID8gdXJpS2V5IDogcm91dGVQcmVmaXggKyB1cmlLZXk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFVyaUtleShhc3BlY3Q6IGJyZWV6ZS5FbnRpdHlBc3BlY3QpIHtcclxuICBsZXQgZW50aXR5VHlwZSA9IGFzcGVjdC5lbnRpdHkhLmVudGl0eVR5cGU7XHJcbiAgbGV0IHJlc291cmNlTmFtZSA9IGVudGl0eVR5cGUuZGVmYXVsdFJlc291cmNlTmFtZTtcclxuICBsZXQga3BzID0gZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzO1xyXG4gIGxldCB1cmlLZXkgPSByZXNvdXJjZU5hbWUgKyBcIihcIjtcclxuICBpZiAoa3BzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgdXJpS2V5ID0gdXJpS2V5ICsgZm10UHJvcGVydHkoa3BzWzBdLCBhc3BlY3QpICsgXCIpXCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIGxldCBkZWxpbSA9IFwiXCI7XHJcbiAgICBrcHMuZm9yRWFjaChmdW5jdGlvbiAoa3ApIHtcclxuICAgICAgdXJpS2V5ID0gdXJpS2V5ICsgZGVsaW0gKyBrcC5uYW1lT25TZXJ2ZXIgKyBcIj1cIiArIGZtdFByb3BlcnR5KGtwLCBhc3BlY3QpO1xyXG4gICAgICBkZWxpbSA9IFwiLFwiO1xyXG4gICAgfSk7XHJcbiAgICB1cmlLZXkgPSB1cmlLZXkgKyBcIilcIjtcclxuICB9XHJcbiAgcmV0dXJuIHVyaUtleTtcclxufVxyXG5cclxuZnVuY3Rpb24gZm10UHJvcGVydHkocHJvcDogYnJlZXplLkRhdGFQcm9wZXJ0eSwgYXNwZWN0OiBicmVlemUuRW50aXR5QXNwZWN0KSB7XHJcbiAgcmV0dXJuIChwcm9wLmRhdGFUeXBlIGFzIGJyZWV6ZS5EYXRhVHlwZSkuZm10T0RhdGEhKGFzcGVjdC5nZXRQcm9wZXJ0eVZhbHVlKHByb3AubmFtZSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVFcnJvcihlcnJvcjogYW55LCB1cmw6IHN0cmluZykge1xyXG4gIC8vIE9EYXRhIGVycm9ycyBjYW4gaGF2ZSB0aGUgbWVzc2FnZSBidXJpZWQgdmVyeSBkZWVwbHkgLSBhbmQgbm9ub2J2aW91c2x5XHJcbiAgLy8gdGhpcyBjb2RlIGlzIHRyaWNreSBzbyBiZSBjYXJlZnVsIGNoYW5naW5nIHRoZSByZXNwb25zZS5ib2R5IHBhcnNpbmcuXHJcbiAgbGV0IHJlc3VsdCA9IG5ldyBFcnJvcigpIGFzIGJyZWV6ZS5TZXJ2ZXJFcnJvcjtcclxuICBsZXQgcmVzcG9uc2UgPSBlcnJvciAmJiBlcnJvci5yZXNwb25zZTtcclxuICBpZiAoIXJlc3BvbnNlKSB7XHJcbiAgICAvLyBpbiBjYXNlIERhdGFKUyByZXR1cm5zIFwiTm8gaGFuZGxlciBmb3IgdGhpcyBkYXRhXCJcclxuICAgIHJlc3VsdC5tZXNzYWdlID0gZXJyb3I7XHJcbiAgICByZXN1bHQuc3RhdHVzVGV4dCA9IGVycm9yO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbiAgcmVzdWx0Lm1lc3NhZ2UgPSByZXNwb25zZS5zdGF0dXNUZXh0O1xyXG4gIHJlc3VsdC5zdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdHVzVGV4dDtcclxuICByZXN1bHQuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzQ29kZTtcclxuICAvLyBub24gc3RkXHJcbiAgaWYgKHVybCkgcmVzdWx0LnVybCA9IHVybDtcclxuICByZXN1bHQuYm9keSA9IHJlc3BvbnNlLmJvZHk7XHJcbiAgaWYgKHJlc3BvbnNlLmJvZHkpIHtcclxuICAgIGxldCBuZXh0RXJyOiBhbnk7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgYm9keSA9IEpTT04ucGFyc2UocmVzcG9uc2UuYm9keSk7XHJcbiAgICAgIHJlc3VsdC5ib2R5ID0gYm9keTtcclxuICAgICAgLy8gT0RhdGEgdjMgbG9naWNcclxuICAgICAgaWYgKGJvZHlbJ29kYXRhLmVycm9yJ10pIHtcclxuICAgICAgICBib2R5ID0gYm9keVsnb2RhdGEuZXJyb3InXTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgbXNnID0gXCJcIjtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIG5leHRFcnIgPSBib2R5LmVycm9yIHx8IGJvZHkuaW5uZXJlcnJvcjtcclxuICAgICAgICBpZiAoIW5leHRFcnIpIG1zZyA9IG1zZyArIGdldE1lc3NhZ2UoYm9keSk7XHJcbiAgICAgICAgbmV4dEVyciA9IG5leHRFcnIgfHwgYm9keS5pbnRlcm5hbGV4Y2VwdGlvbjtcclxuICAgICAgICBib2R5ID0gbmV4dEVyciB8fCBib2R5O1xyXG4gICAgICB9IHdoaWxlIChuZXh0RXJyKTtcclxuICAgICAgaWYgKG1zZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSBtc2c7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG4gIGJyZWV6ZS5BYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlci5fY2F0Y2hOb0Nvbm5lY3Rpb25FcnJvcihyZXN1bHQpO1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE1lc3NhZ2UoYm9keTogYW55KSB7XHJcbiAgbGV0IG1zZyA9IGJvZHkubWVzc2FnZSB8fCBcIlwiO1xyXG4gIHJldHVybiAoKHR5cGVvZiAobXNnKSA9PT0gXCJzdHJpbmdcIikgPyBtc2cgOiBtc2cudmFsdWUpICsgXCI7IFwiO1xyXG59XHJcblxyXG5icmVlemUuY29uZmlnLnJlZ2lzdGVyQWRhcHRlcihcImRhdGFTZXJ2aWNlXCIsIERhdGFTZXJ2aWNlT0RhdGFBZGFwdGVyKTtcclxuXHJcblxyXG5sZXQgd2ViQXBpT0RhdGFDdG9yID0gZnVuY3Rpb24gKCkge1xyXG4gIHRoaXMubmFtZSA9IFwid2ViQXBpT0RhdGFcIjtcclxufTtcclxuXHJcbmJyZWV6ZS5jb3JlLmV4dGVuZCh3ZWJBcGlPRGF0YUN0b3IucHJvdG90eXBlLCBEYXRhU2VydmljZU9EYXRhQWRhcHRlci5wcm90b3R5cGUpO1xyXG5cclxuYnJlZXplLmNvbmZpZy5yZWdpc3RlckFkYXB0ZXIoXCJkYXRhU2VydmljZVwiLCB3ZWJBcGlPRGF0YUN0b3IgYXMgYW55KTtcclxuLy8gT0RhdGEgNCBhZGFwdGVyXHJcbmxldCB3ZWJBcGlPRGF0YTRDdG9yID0gZnVuY3Rpb24gKCkge1xyXG4gIHRoaXMubmFtZSA9IFwid2ViQXBpT0RhdGE0XCI7XHJcbn07XHJcbmJyZWV6ZS5jb3JlLmV4dGVuZCh3ZWJBcGlPRGF0YTRDdG9yLnByb3RvdHlwZSwgd2ViQXBpT0RhdGFDdG9yLnByb3RvdHlwZSk7XHJcbndlYkFwaU9EYXRhNEN0b3IucHJvdG90eXBlLmluaXRpYWxpemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgLy8gQWFyZ2guLi4gdGhleSBtb3ZlZCB0aGUgY2hlZXNlLlxyXG4gIGxldCBkYXRhanMgPSBjb3JlLnJlcXVpcmVMaWIoXCJkYXRhanNcIiwgXCJOZWVkZWQgdG8gc3VwcG9ydCByZW1vdGUgT0RhdGEgdjQgc2VydmljZXNcIik7XHJcbiAgT0RhdGEgPSBkYXRhanMuVjQub0RhdGE7XHJcbiAgT0RhdGEuanNvbi5qc29uSGFuZGxlci5yZWNvZ25pemVEYXRlcyA9IHRydWU7XHJcbn07XHJcbndlYkFwaU9EYXRhNEN0b3IucHJvdG90eXBlLmhlYWRlcnMgPSB7IFwiT0RhdGEtVmVyc2lvblwiOiBcIjQuMFwiIH07XHJcbmJyZWV6ZS5jb25maWcucmVnaXN0ZXJBZGFwdGVyKFwiZGF0YVNlcnZpY2VcIiwgd2ViQXBpT0RhdGE0Q3RvciBhcyBhbnkpO1xyXG5cclxuXHJcblxyXG5cclxuIl19
|
|
@@ -36,7 +36,7 @@ export class DataServiceWebApiAdapter extends breeze.AbstractDataServiceAdapter
|
|
|
36
36
|
let helper = em.helper;
|
|
37
37
|
let serSaveBundle = {};
|
|
38
38
|
serSaveBundle.entities = saveBundle.entities.map(function (e, ix) {
|
|
39
|
-
let rawEntity = helper.unwrapInstance(e);
|
|
39
|
+
let rawEntity = helper.unwrapInstance(e, transformValue);
|
|
40
40
|
let autoGeneratedKey;
|
|
41
41
|
if (e.entityType.autoGeneratedKeyType !== breeze.AutoGeneratedKeyType.None) {
|
|
42
42
|
autoGeneratedKey = {
|
|
@@ -89,5 +89,12 @@ export class DataServiceWebApiAdapter extends breeze.AbstractDataServiceAdapter
|
|
|
89
89
|
return { entities: entities, keyMappings: keyMappings, deletedKeys: deletedKeys };
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
+
/** Transform data properties while unwrapping entities before save */
|
|
93
|
+
function transformValue(prop, val) {
|
|
94
|
+
if (prop.dataType === breeze.DataType.DateOnly) {
|
|
95
|
+
val = breeze.DataType.toDateOnlyString(val);
|
|
96
|
+
}
|
|
97
|
+
return val;
|
|
98
|
+
}
|
|
92
99
|
breeze.config.registerAdapter("dataService", DataServiceWebApiAdapter);
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci1kYXRhLXNlcnZpY2Utd2ViYXBpLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC9hZGFwdGVyLWRhdGEtc2VydmljZS13ZWJhcGkvIiwic291cmNlcyI6WyJhZGFwdGVyLWRhdGEtc2VydmljZS13ZWJhcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsNkRBQTZEO0FBRTdELGNBQWM7QUFDZCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsTUFBTSxDQUFDLDBCQUEwQjtJQUU3RTtRQUNFLEtBQUssRUFBRSxDQUFDO1FBNkVWLHVCQUFrQixHQUE4QixJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztZQUU1RSxJQUFJLEVBQUUsZ0JBQWdCO1lBRXRCLFNBQVMsRUFBRSxVQUFVLElBQVMsRUFBRSxjQUFxQyxFQUFFLFdBQStCO2dCQUNwRyxJQUFJLElBQUksSUFBSSxJQUFJO29CQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxVQUFVLEdBQUcsY0FBYyxJQUFJLGNBQWMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2xILElBQUksWUFBWSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUM7Z0JBQzVDLElBQUksTUFBTSxHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7Z0JBRS9ELE9BQU87b0JBQ0wsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRztvQkFDaEIsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNwQixNQUFNLEVBQUUsTUFB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RSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBRXBGLENBQUM7Q0F1QkY7QUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGJyZWV6ZSBmcm9tICdicmVlemUtY2xpZW50JztcclxuLy8gaW1wb3J0IHsgSnNvblJlc3VsdHNBZGFwdGVyLCBLZXlNYXBwaW5nIH0gZnJvbSAnLi9icmVlemUnO1xyXG5cclxuLyoqIEBoaWRkZW4gKi9cclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlV2ViQXBpQWRhcHRlciBleHRlbmRzIGJyZWV6ZS5BYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMubmFtZSA9IFwid2ViQXBpXCI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVnaXN0ZXIoY29uZmlnPzogYnJlZXplLkJyZWV6ZUNvbmZpZykge1xyXG4gICAgY29uZmlnID0gY29uZmlnIHx8IGJyZWV6ZS5jb25maWc7XHJcbiAgICBjb25maWcucmVnaXN0ZXJBZGFwdGVyKFwiZGF0YVNlcnZpY2VcIiwgRGF0YVNlcnZpY2VXZWJBcGlBZGFwdGVyKTtcclxuICAgIHJldHVybiBjb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZShcImRhdGFTZXJ2aWNlXCIsIFwid2ViQXBpXCIsIHRydWUpIGFzIERhdGFTZXJ2aWNlV2ViQXBpQWRhcHRlcjtcclxuICB9XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9wcmVwYXJlU2F2ZUJ1bmRsZShzYXZlQ29udGV4dDogYnJlZXplLlNhdmVDb250ZXh0LCBzYXZlQnVuZGxlOiBicmVlemUuU2F2ZUJ1bmRsZSkge1xyXG4gICAgbGV0IGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciA9IHRoaXMuX2NyZWF0ZUNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcihzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSk7XHJcbiAgICBsZXQgZW0gPSBzYXZlQ29udGV4dC5lbnRpdHlNYW5hZ2VyO1xyXG4gICAgbGV0IG1ldGFkYXRhU3RvcmUgPSBlbS5tZXRhZGF0YVN0b3JlO1xyXG4gICAgbGV0IGhlbHBlciA9IGVtLmhlbHBlcjtcclxuICAgIGxldCBzZXJTYXZlQnVuZGxlOiBhbnkgPSB7fTtcclxuICAgIHNlclNhdmVCdW5kbGUuZW50aXRpZXMgPSBzYXZlQnVuZGxlLmVudGl0aWVzLm1hcChmdW5jdGlvbiAoZSwgaXgpIHtcclxuICAgICAgbGV0IHJhd0VudGl0eSA9IGhlbHBlci51bndyYXBJbnN0YW5jZShlKTtcclxuXHJcbiAgICAgIGxldCBhdXRvR2VuZXJhdGVkS2V5OiBPYmplY3QgfCB1bmRlZmluZWQ7XHJcbiAgICAgIGlmIChlLmVudGl0eVR5cGUuYXV0b0dlbmVyYXRlZEtleVR5cGUgIT09IGJyZWV6ZS5BdXRvR2VuZXJhdGVkS2V5VHlwZS5Ob25lKSB7XHJcbiAgICAgICAgYXV0b0dlbmVyYXRlZEtleSA9IHtcclxuICAgICAgICAgIHByb3BlcnR5TmFtZTogZS5lbnRpdHlUeXBlLmtleVByb3BlcnRpZXNbMF0ubmFtZU9uU2VydmVyLFxyXG4gICAgICAgICAgYXV0b0dlbmVyYXRlZEtleVR5cGU6IGUuZW50aXR5VHlwZS5hdXRvR2VuZXJhdGVkS2V5VHlwZS5uYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IG9yaWdpbmFsVmFsdWVzT25TZXJ2ZXIgPSBoZWxwZXIudW53cmFwT3JpZ2luYWxWYWx1ZXMoZSwgbWV0YWRhdGFTdG9yZSk7XHJcbiAgICAgIHJhd0VudGl0eS5lbnRpdHlBc3BlY3QgPSB7XHJcbiAgICAgICAgZW50aXR5VHlwZU5hbWU6IGUuZW50aXR5VHlwZS5uYW1lLFxyXG4gICAgICAgIGRlZmF1bHRSZXNvdXJjZU5hbWU6IGUuZW50aXR5VHlwZS5kZWZhdWx0UmVzb3VyY2VOYW1lLFxyXG4gICAgICAgIGVudGl0eVN0YXRlOiBlLmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZS5uYW1lLFxyXG4gICAgICAgIG9yaWdpbmFsVmFsdWVzTWFwOiBvcmlnaW5hbFZhbHVlc09uU2VydmVyLFxyXG4gICAgICAgIGF1dG9HZW5lcmF0ZWRLZXk6IGF1dG9HZW5lcmF0ZWRLZXlcclxuICAgICAgfTtcclxuICAgICAgcmF3RW50aXR5ID0gY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLmdldFJlcXVlc3QocmF3RW50aXR5LCBlLCBpeCk7XHJcbiAgICAgIHJldHVybiByYXdFbnRpdHk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzZXJTYXZlQnVuZGxlLnNhdmVPcHRpb25zID0geyB0YWc6IHNhdmVCdW5kbGUuc2F2ZU9wdGlvbnMudGFnIH07XHJcbiAgICBjaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IuZG9uZShzZXJTYXZlQnVuZGxlLmVudGl0aWVzKTtcclxuICAgIHJldHVybiBzZXJTYXZlQnVuZGxlO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX3ByZXBhcmVTYXZlUmVzdWx0KHNhdmVDb250ZXh0OiBicmVlemUuU2F2ZUNvbnRleHQsIGRhdGE6IGFueSkge1xyXG4gICAgLy8gdXNlIHRoZSBqc29uUmVzdWx0QWRhcHRlciB0byBleHRyYWN0UmVzdWx0cyBhbmQgZXh0cmFjdEtleU1hcHBpbmdzXHJcbiAgICBsZXQganJhID0gc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UuanNvblJlc3VsdHNBZGFwdGVyIHx8IHRoaXMuanNvblJlc3VsdHNBZGFwdGVyO1xyXG4gICAgbGV0IGVudGl0aWVzID0ganJhLmV4dHJhY3RTYXZlUmVzdWx0cyhkYXRhKSB8fCBbXTtcclxuICAgIGxldCBrZXlNYXBwaW5nczogYnJlZXplLktleU1hcHBpbmdbXSA9IGpyYS5leHRyYWN0S2V5TWFwcGluZ3MoZGF0YSkgfHwgW107XHJcbiAgICBsZXQgZGVsZXRlZEtleXMgPSBqcmEuZXh0cmFjdERlbGV0ZWRLZXlzID8gKGpyYS5leHRyYWN0RGVsZXRlZEtleXMoZGF0YSkpIHx8IFtdIDogW107XHJcblxyXG4gICAgaWYgKGtleU1hcHBpbmdzLmxlbmd0aCkge1xyXG4gICAgICAvLyBIQUNLOiBuZWVkIHRvIGNoYW5nZSB0aGUgJ2Nhc2UnIG9mIHByb3BlcnRpZXMgaW4gdGhlIHNhdmVSZXN1bHRcclxuICAgICAgLy8gYnV0IEtleU1hcHBpbmcgcHJvcGVydGllcyBpbnRlcm5hbGx5IGFyZSBzdGlsbCB1Y2FzZS4gdWdoLi4uXHJcbiAgICAgIGtleU1hcHBpbmdzID0ga2V5TWFwcGluZ3MubWFwKGZ1bmN0aW9uIChrbSkge1xyXG4gICAgICAgIGlmIChrbS5lbnRpdHlUeXBlTmFtZSkgcmV0dXJuIGttOyAvLyBpdCdzIGFscmVhZHkgbG93ZXIgY2FzZVxyXG4gICAgICAgIGxldCBrbUhhY2sgPSBrbSBhcyBhbnk7XHJcbiAgICAgICAgbGV0IGVudGl0eVR5cGVOYW1lID0gYnJlZXplLk1ldGFkYXRhU3RvcmUubm9ybWFsaXplVHlwZU5hbWUoa21IYWNrLkVudGl0eVR5cGVOYW1lKTtcclxuICAgICAgICByZXR1cm4geyBlbnRpdHlUeXBlTmFtZTogZW50aXR5VHlwZU5hbWUsIHRlbXBWYWx1ZToga21IYWNrLlRlbXBWYWx1ZSwgcmVhbFZhbHVlOiBrbUhhY2suUmVhbFZhbHVlIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkZWxldGVkS2V5cy5sZW5ndGgpIHtcclxuICAgICAgZGVsZXRlZEtleXMgPSBkZWxldGVkS2V5cy5tYXAoZnVuY3Rpb24gKGRrKSB7XHJcbiAgICAgICAgaWYgKGRrLmVudGl0eVR5cGVOYW1lKSByZXR1cm4gZGs7IC8vIGl0J3MgYWxyZWFkeSBsb3dlciBjYXNlXHJcbiAgICAgICAgbGV0IGVudGl0eVR5cGVOYW1lID0gYnJlZXplLk1ldGFkYXRhU3RvcmUubm9ybWFsaXplVHlwZU5hbWUoZGsuRW50aXR5VHlwZU5hbWUpO1xyXG4gICAgICAgIC8vIE5PVEUgdGhlIGRrLktleVZhbHVlID0+IGtleVZhbHVlcyB0cmFuc2l0aW9uIC0gbmVlZGVkIGJlY2F1c2Ugd2UgYXJlIGRlc2VyaWFsaXppbmcgYW4gLk5FVCBFbnRpdHlLZXlcclxuICAgICAgICByZXR1cm4geyBlbnRpdHlUeXBlTmFtZTogZW50aXR5VHlwZU5hbWUsIGtleVZhbHVlczogZGsuS2V5VmFsdWUgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgZW50aXRpZXM6IGVudGl0aWVzLCBrZXlNYXBwaW5nczoga2V5TWFwcGluZ3MsIGRlbGV0ZWRLZXlzOiBkZWxldGVkS2V5cyB9O1xyXG5cclxuICB9XHJcblxyXG4gIGpzb25SZXN1bHRzQWRhcHRlcjogYnJlZXplLkpzb25SZXN1bHRzQWRhcHRlciA9IG5ldyBicmVlemUuSnNvblJlc3VsdHNBZGFwdGVyKHtcclxuXHJcbiAgICBuYW1lOiBcIndlYkFwaV9kZWZhdWx0XCIsXHJcblxyXG4gICAgdmlzaXROb2RlOiBmdW5jdGlvbiAobm9kZTogYW55LCBtYXBwaW5nQ29udGV4dDogYnJlZXplLk1hcHBpbmdDb250ZXh0LCBub2RlQ29udGV4dDogYnJlZXplLk5vZGVDb250ZXh0KSB7XHJcbiAgICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiB7fTtcclxuICAgICAgbGV0IGVudGl0eVR5cGVOYW1lID0gYnJlZXplLk1ldGFkYXRhU3RvcmUubm9ybWFsaXplVHlwZU5hbWUobm9kZS4kdHlwZSk7XHJcbiAgICAgIGxldCBlbnRpdHlUeXBlID0gZW50aXR5VHlwZU5hbWUgJiYgbWFwcGluZ0NvbnRleHQuZW50aXR5TWFuYWdlci5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoZW50aXR5VHlwZU5hbWUsIHRydWUpO1xyXG4gICAgICBsZXQgcHJvcGVydHlOYW1lID0gbm9kZUNvbnRleHQucHJvcGVydHlOYW1lO1xyXG4gICAgICBsZXQgaWdub3JlID0gcHJvcGVydHlOYW1lICYmIHByb3BlcnR5TmFtZS5zdWJzdHIoMCwgMSkgPT09IFwiJFwiO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxyXG4gICAgICAgIG5vZGVJZDogbm9kZS4kaWQsXHJcbiAgICAgICAgbm9kZVJlZklkOiBub2RlLiRyZWYsXHJcbiAgICAgICAgaWdub3JlOiBpZ25vcmVcclxuICAgICAgfSBhcyBhbnk7XHJcbiAgICB9XHJcblxyXG4gIH0pO1xyXG5cclxufVxyXG5cclxuYnJlZXplLmNvbmZpZy5yZWdpc3RlckFkYXB0ZXIoXCJkYXRhU2VydmljZVwiLCBEYXRhU2VydmljZVdlYkFwaUFkYXB0ZXIpO1xyXG4iXX0=
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci1kYXRhLXNlcnZpY2Utd2ViYXBpLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC9hZGFwdGVyLWRhdGEtc2VydmljZS13ZWJhcGkvIiwic291cmNlcyI6WyJhZGFwdGVyLWRhdGEtc2VydmljZS13ZWJhcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsNkRBQTZEO0FBRTdELGNBQWM7QUFDZCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsTUFBTSxDQUFDLDBCQUEwQjtJQUU3RTtRQUNFLEtBQUssRUFBRSxDQUFDO1FBNkVWLHVCQUFrQixHQUE4QixJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztZQUU1RSxJQUFJLEVBQUUsZ0JBQWdCO1lBRXRCLFNBQVMsRUFBRSxVQUFVLElBQVMsRUFBRSxjQUFxQyxFQUFFLFdBQStCO2dCQUNwRyxJQUFJLElBQUksSUFBSSxJQUFJO29CQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxVQUFVLEdBQUcsY0FBYyxJQUFJLGNBQWMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2xILElBQUksWUFBWSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUM7Z0JBQzVDLElBQUksTUFBTSxHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7Z0JBRS9ELE9BQU87b0JBQ0wsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRztvQkFDaEIsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNwQixNQUFNLEVBQUUsTUFB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RSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUVwRixDQUFDO0NBdUJGO0FBRUQsc0VBQXNFO0FBQ3RFLFNBQVMsY0FBYyxDQUFDLElBQXlCLEVBQUUsR0FBUTtJQUN6RCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7UUFDOUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDN0M7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFHRCxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGJyZWV6ZSBmcm9tICdicmVlemUtY2xpZW50JztcclxuLy8gaW1wb3J0IHsgSnNvblJlc3VsdHNBZGFwdGVyLCBLZXlNYXBwaW5nIH0gZnJvbSAnLi9icmVlemUnO1xyXG5cclxuLyoqIEBoaWRkZW4gKi9cclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlV2ViQXBpQWRhcHRlciBleHRlbmRzIGJyZWV6ZS5BYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMubmFtZSA9IFwid2ViQXBpXCI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVnaXN0ZXIoY29uZmlnPzogYnJlZXplLkJyZWV6ZUNvbmZpZykge1xyXG4gICAgY29uZmlnID0gY29uZmlnIHx8IGJyZWV6ZS5jb25maWc7XHJcbiAgICBjb25maWcucmVnaXN0ZXJBZGFwdGVyKFwiZGF0YVNlcnZpY2VcIiwgRGF0YVNlcnZpY2VXZWJBcGlBZGFwdGVyKTtcclxuICAgIHJldHVybiBjb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZShcImRhdGFTZXJ2aWNlXCIsIFwid2ViQXBpXCIsIHRydWUpIGFzIERhdGFTZXJ2aWNlV2ViQXBpQWRhcHRlcjtcclxuICB9XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9wcmVwYXJlU2F2ZUJ1bmRsZShzYXZlQ29udGV4dDogYnJlZXplLlNhdmVDb250ZXh0LCBzYXZlQnVuZGxlOiBicmVlemUuU2F2ZUJ1bmRsZSkge1xyXG4gICAgbGV0IGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciA9IHRoaXMuX2NyZWF0ZUNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcihzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSk7XHJcbiAgICBsZXQgZW0gPSBzYXZlQ29udGV4dC5lbnRpdHlNYW5hZ2VyO1xyXG4gICAgbGV0IG1ldGFkYXRhU3RvcmUgPSBlbS5tZXRhZGF0YVN0b3JlO1xyXG4gICAgbGV0IGhlbHBlciA9IGVtLmhlbHBlcjtcclxuICAgIGxldCBzZXJTYXZlQnVuZGxlOiBhbnkgPSB7fTtcclxuICAgIHNlclNhdmVCdW5kbGUuZW50aXRpZXMgPSBzYXZlQnVuZGxlLmVudGl0aWVzLm1hcChmdW5jdGlvbiAoZSwgaXgpIHtcclxuICAgICAgbGV0IHJhd0VudGl0eSA9IGhlbHBlci51bndyYXBJbnN0YW5jZShlLCB0cmFuc2Zvcm1WYWx1ZSk7XHJcblxyXG4gICAgICBsZXQgYXV0b0dlbmVyYXRlZEtleTogT2JqZWN0IHwgdW5kZWZpbmVkO1xyXG4gICAgICBpZiAoZS5lbnRpdHlUeXBlLmF1dG9HZW5lcmF0ZWRLZXlUeXBlICE9PSBicmVlemUuQXV0b0dlbmVyYXRlZEtleVR5cGUuTm9uZSkge1xyXG4gICAgICAgIGF1dG9HZW5lcmF0ZWRLZXkgPSB7XHJcbiAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGUuZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzWzBdLm5hbWVPblNlcnZlcixcclxuICAgICAgICAgIGF1dG9HZW5lcmF0ZWRLZXlUeXBlOiBlLmVudGl0eVR5cGUuYXV0b0dlbmVyYXRlZEtleVR5cGUubmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBvcmlnaW5hbFZhbHVlc09uU2VydmVyID0gaGVscGVyLnVud3JhcE9yaWdpbmFsVmFsdWVzKGUsIG1ldGFkYXRhU3RvcmUpO1xyXG4gICAgICByYXdFbnRpdHkuZW50aXR5QXNwZWN0ID0ge1xyXG4gICAgICAgIGVudGl0eVR5cGVOYW1lOiBlLmVudGl0eVR5cGUubmFtZSxcclxuICAgICAgICBkZWZhdWx0UmVzb3VyY2VOYW1lOiBlLmVudGl0eVR5cGUuZGVmYXVsdFJlc291cmNlTmFtZSxcclxuICAgICAgICBlbnRpdHlTdGF0ZTogZS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUubmFtZSxcclxuICAgICAgICBvcmlnaW5hbFZhbHVlc01hcDogb3JpZ2luYWxWYWx1ZXNPblNlcnZlcixcclxuICAgICAgICBhdXRvR2VuZXJhdGVkS2V5OiBhdXRvR2VuZXJhdGVkS2V5XHJcbiAgICAgIH07XHJcbiAgICAgIHJhd0VudGl0eSA9IGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvci5nZXRSZXF1ZXN0KHJhd0VudGl0eSwgZSwgaXgpO1xyXG4gICAgICByZXR1cm4gcmF3RW50aXR5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgc2VyU2F2ZUJ1bmRsZS5zYXZlT3B0aW9ucyA9IHsgdGFnOiBzYXZlQnVuZGxlLnNhdmVPcHRpb25zLnRhZyB9O1xyXG4gICAgY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLmRvbmUoc2VyU2F2ZUJ1bmRsZS5lbnRpdGllcyk7XHJcbiAgICByZXR1cm4gc2VyU2F2ZUJ1bmRsZTtcclxuICB9XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9wcmVwYXJlU2F2ZVJlc3VsdChzYXZlQ29udGV4dDogYnJlZXplLlNhdmVDb250ZXh0LCBkYXRhOiBhbnkpIHtcclxuICAgIC8vIHVzZSB0aGUganNvblJlc3VsdEFkYXB0ZXIgdG8gZXh0cmFjdFJlc3VsdHMgYW5kIGV4dHJhY3RLZXlNYXBwaW5nc1xyXG4gICAgbGV0IGpyYSA9IHNhdmVDb250ZXh0LmRhdGFTZXJ2aWNlLmpzb25SZXN1bHRzQWRhcHRlciB8fCB0aGlzLmpzb25SZXN1bHRzQWRhcHRlcjtcclxuICAgIGxldCBlbnRpdGllcyA9IGpyYS5leHRyYWN0U2F2ZVJlc3VsdHMoZGF0YSkgfHwgW107XHJcbiAgICBsZXQga2V5TWFwcGluZ3M6IGJyZWV6ZS5LZXlNYXBwaW5nW10gPSBqcmEuZXh0cmFjdEtleU1hcHBpbmdzKGRhdGEpIHx8IFtdO1xyXG4gICAgbGV0IGRlbGV0ZWRLZXlzID0ganJhLmV4dHJhY3REZWxldGVkS2V5cyA/IChqcmEuZXh0cmFjdERlbGV0ZWRLZXlzKGRhdGEpKSB8fCBbXSA6IFtdO1xyXG5cclxuICAgIGlmIChrZXlNYXBwaW5ncy5sZW5ndGgpIHtcclxuICAgICAgLy8gSEFDSzogbmVlZCB0byBjaGFuZ2UgdGhlICdjYXNlJyBvZiBwcm9wZXJ0aWVzIGluIHRoZSBzYXZlUmVzdWx0XHJcbiAgICAgIC8vIGJ1dCBLZXlNYXBwaW5nIHByb3BlcnRpZXMgaW50ZXJuYWxseSBhcmUgc3RpbGwgdWNhc2UuIHVnaC4uLlxyXG4gICAgICBrZXlNYXBwaW5ncyA9IGtleU1hcHBpbmdzLm1hcChmdW5jdGlvbiAoa20pIHtcclxuICAgICAgICBpZiAoa20uZW50aXR5VHlwZU5hbWUpIHJldHVybiBrbTsgLy8gaXQncyBhbHJlYWR5IGxvd2VyIGNhc2VcclxuICAgICAgICBsZXQga21IYWNrID0ga20gYXMgYW55O1xyXG4gICAgICAgIGxldCBlbnRpdHlUeXBlTmFtZSA9IGJyZWV6ZS5NZXRhZGF0YVN0b3JlLm5vcm1hbGl6ZVR5cGVOYW1lKGttSGFjay5FbnRpdHlUeXBlTmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIHsgZW50aXR5VHlwZU5hbWU6IGVudGl0eVR5cGVOYW1lLCB0ZW1wVmFsdWU6IGttSGFjay5UZW1wVmFsdWUsIHJlYWxWYWx1ZToga21IYWNrLlJlYWxWYWx1ZSB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGVsZXRlZEtleXMubGVuZ3RoKSB7XHJcbiAgICAgIGRlbGV0ZWRLZXlzID0gZGVsZXRlZEtleXMubWFwKGZ1bmN0aW9uIChkaykge1xyXG4gICAgICAgIGlmIChkay5lbnRpdHlUeXBlTmFtZSkgcmV0dXJuIGRrOyAvLyBpdCdzIGFscmVhZHkgbG93ZXIgY2FzZVxyXG4gICAgICAgIGxldCBlbnRpdHlUeXBlTmFtZSA9IGJyZWV6ZS5NZXRhZGF0YVN0b3JlLm5vcm1hbGl6ZVR5cGVOYW1lKGRrLkVudGl0eVR5cGVOYW1lKTtcclxuICAgICAgICAvLyBOT1RFIHRoZSBkay5LZXlWYWx1ZSA9PiBrZXlWYWx1ZXMgdHJhbnNpdGlvbiAtIG5lZWRlZCBiZWNhdXNlIHdlIGFyZSBkZXNlcmlhbGl6aW5nIGFuIC5ORVQgRW50aXR5S2V5XHJcbiAgICAgICAgcmV0dXJuIHsgZW50aXR5VHlwZU5hbWU6IGVudGl0eVR5cGVOYW1lLCBrZXlWYWx1ZXM6IGRrLktleVZhbHVlIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IGVudGl0aWVzOiBlbnRpdGllcywga2V5TWFwcGluZ3M6IGtleU1hcHBpbmdzLCBkZWxldGVkS2V5czogZGVsZXRlZEtleXMgfTtcclxuXHJcbiAgfVxyXG5cclxuICBqc29uUmVzdWx0c0FkYXB0ZXI6IGJyZWV6ZS5Kc29uUmVzdWx0c0FkYXB0ZXIgPSBuZXcgYnJlZXplLkpzb25SZXN1bHRzQWRhcHRlcih7XHJcblxyXG4gICAgbmFtZTogXCJ3ZWJBcGlfZGVmYXVsdFwiLFxyXG5cclxuICAgIHZpc2l0Tm9kZTogZnVuY3Rpb24gKG5vZGU6IGFueSwgbWFwcGluZ0NvbnRleHQ6IGJyZWV6ZS5NYXBwaW5nQ29udGV4dCwgbm9kZUNvbnRleHQ6IGJyZWV6ZS5Ob2RlQ29udGV4dCkge1xyXG4gICAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4ge307XHJcbiAgICAgIGxldCBlbnRpdHlUeXBlTmFtZSA9IGJyZWV6ZS5NZXRhZGF0YVN0b3JlLm5vcm1hbGl6ZVR5cGVOYW1lKG5vZGUuJHR5cGUpO1xyXG4gICAgICBsZXQgZW50aXR5VHlwZSA9IGVudGl0eVR5cGVOYW1lICYmIG1hcHBpbmdDb250ZXh0LmVudGl0eU1hbmFnZXIubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKGVudGl0eVR5cGVOYW1lLCB0cnVlKTtcclxuICAgICAgbGV0IHByb3BlcnR5TmFtZSA9IG5vZGVDb250ZXh0LnByb3BlcnR5TmFtZTtcclxuICAgICAgbGV0IGlnbm9yZSA9IHByb3BlcnR5TmFtZSAmJiBwcm9wZXJ0eU5hbWUuc3Vic3RyKDAsIDEpID09PSBcIiRcIjtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcclxuICAgICAgICBub2RlSWQ6IG5vZGUuJGlkLFxyXG4gICAgICAgIG5vZGVSZWZJZDogbm9kZS4kcmVmLFxyXG4gICAgICAgIGlnbm9yZTogaWdub3JlXHJcbiAgICAgIH0gYXMgYW55O1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbn1cclxuXHJcbi8qKiBUcmFuc2Zvcm0gZGF0YSBwcm9wZXJ0aWVzIHdoaWxlIHVud3JhcHBpbmcgZW50aXRpZXMgYmVmb3JlIHNhdmUgKi9cclxuZnVuY3Rpb24gdHJhbnNmb3JtVmFsdWUocHJvcDogYnJlZXplLkRhdGFQcm9wZXJ0eSwgdmFsOiBhbnkpIHtcclxuICBpZiAocHJvcC5kYXRhVHlwZSA9PT0gYnJlZXplLkRhdGFUeXBlLkRhdGVPbmx5KSB7XHJcbiAgICB2YWwgPSBicmVlemUuRGF0YVR5cGUudG9EYXRlT25seVN0cmluZyh2YWwpO1xyXG4gIH1cclxuICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG5cclxuYnJlZXplLmNvbmZpZy5yZWdpc3RlckFkYXB0ZXIoXCJkYXRhU2VydmljZVwiLCBEYXRhU2VydmljZVdlYkFwaUFkYXB0ZXIpO1xyXG4iXX0=
|
|
@@ -293,4 +293,4 @@ class DefaultChangeRequestInterceptor {
|
|
|
293
293
|
done(requests) {
|
|
294
294
|
}
|
|
295
295
|
}
|
|
296
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZGF0YS1zZXJ2aWNlLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL2Fic3RyYWN0LWRhdGEtc2VydmljZS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUtsQyxPQUFPLEVBQWUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEQ7OztFQUdFO0FBQ0YsTUFBTSxPQUFnQiwwQkFBMEI7SUFROUM7UUF3SkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7V0F5Qkc7UUFDSCw2QkFBd0IsR0FBaUMsK0JBQStCLENBQUM7UUEyQ3pGLHVCQUFrQixHQUFHLElBQUksa0JBQWtCLENBQUM7WUFDMUMsSUFBSSxFQUFFLE1BQU07WUFFWixTQUFTLEVBQUUsV0FBVSx1Q0FBdUM7Z0JBQzFELE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztTQUNGLENBQUMsQ0FBQztJQWxPSCxDQUFDO0lBR0QscUJBQXFCO0lBQ3JCLHFCQUFxQixDQUFDLHdCQUE2QjtRQUNqRCxJQUFJLHdCQUF3QixDQUFDLGFBQWEsS0FBSyxNQUFNLElBQUksd0JBQXdCLENBQUMsU0FBUyxFQUFFO1lBQzNGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQWMsTUFBTSxDQUFHLENBQUM7UUFFakUsbUhBQW1IO1FBQ25ILElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtZQUN2QyxPQUFPO1NBQ1I7UUFDRCxN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Q0FBQyxjQUFjLENBQUM7Z0JBQ2pFLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztnQkFDdEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxZQUFZO2dCQUM1QixZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVk7Z0JBQzVCLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTTthQUNqQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7S0FDSjtJQUVELElBQUksV0FBVyxJQUFJLFlBQVksRUFBRTtRQUUvQixJQUFJLFVBQVUsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQztRQUNyRyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUM5QixDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUNGLEdBQTJCLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztLQUMxRDtJQUVELEdBQUcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLGlHQUFpRyxDQUFDO0lBQzNILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUdELDJFQUEyRTtBQUMzRSxNQUFNLCtCQUErQjtJQUNuQyxZQUFZLFdBQXdCLEVBQUUsVUFBc0I7SUFFNUQsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFZLEVBQUUsTUFBYyxFQUFFLEtBQWE7UUFDcEQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksQ0FBQyxRQUFrQjtJQUN2QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBFbnRpdHlRdWVyeSB9IGZyb20gJy4vZW50aXR5LXF1ZXJ5JztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VBZGFwdGVyLCBBamF4QWRhcHRlciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yQ3RvciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yIH0gZnJvbSAnLi9pbnRlcmZhY2UtcmVnaXN0cnknO1xyXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5pbXBvcnQgeyBNYXBwaW5nQ29udGV4dCB9IGZyb20gJy4vbWFwcGluZy1jb250ZXh0JztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UsIEpzb25SZXN1bHRzQWRhcHRlciB9IGZyb20gJy4vZGF0YS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cFJlc3BvbnNlLCBTYXZlQ29udGV4dCwgU2F2ZUJ1bmRsZSwgU2VydmVyRXJyb3IsIFNhdmVSZXN1bHQsIFNhdmVFcnJvckZyb21TZXJ2ZXIsIFF1ZXJ5UmVzdWx0IH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcblxyXG4vKiogRm9yIHVzZSBieSBicmVlemUgcGx1Z2luIGF1dGhvcnMgb25seS4gIFRoZSBjbGFzcyBpcyB1c2VkIGFzIHRoZSBiYXNlIGNsYXNzIGZvciBtb3N0IFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dIGltcGxlbWVudGF0aW9uc1xyXG5AYWRhcHRlciAoc2VlIFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dKSAgICBcclxuQGhpZGRlblxyXG4qL1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIgaW1wbGVtZW50cyBEYXRhU2VydmljZUFkYXB0ZXIge1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF8kaW1wbD86IGFueTtcclxuICAvKiogVGhlIG5hbWUgb2YgdGhpcyBhZGFwdGVyLiAqL1xyXG4gIG5hbWU6IHN0cmluZztcclxuICAvKiogVGhlIFtbSUFqYXhBZGFwdGVyXV0gdXNlZCBieSB0aGlzIFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dLiAqL1xyXG4gIGFqYXhJbXBsOiBBamF4QWRhcHRlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gVE9ETyB1c2UgaW50ZXJmYWNlXHJcbiAgY2hlY2tGb3JSZWNvbXBvc2l0aW9uKGludGVyZmFjZUluaXRpYWxpemVkQXJnczogYW55KSB7XHJcbiAgICBpZiAoaW50ZXJmYWNlSW5pdGlhbGl6ZWRBcmdzLmludGVyZmFjZU5hbWUgPT09IFwiYWpheFwiICYmIGludGVyZmFjZUluaXRpYWxpemVkQXJncy5pc0RlZmF1bHQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKCkge1xyXG4gICAgdGhpcy5hamF4SW1wbCA9IGNvbmZpZy5nZXRBZGFwdGVySW5zdGFuY2U8QWpheEFkYXB0ZXI+KFwiYWpheFwiKSAhO1xyXG5cclxuICAgIC8vIGRvbid0IGNhY2hlICdhamF4JyBiZWNhdXNlIHRoZW4gd2Ugd291bGQgbmVlZCB0byBcIi5iaW5kXCIgaXQsIGFuZCBkb24ndCB3YW50IHRvIGJlY2F1c2Ugb2YgYnJvd2VyIHN1cHBvcnQgaXNzdWVzLlxyXG4gICAgaWYgKHRoaXMuYWpheEltcGwgJiYgdGhpcy5hamF4SW1wbC5hamF4KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIGFqYXggYWRhcHRlciBmb3IgZGF0YXNlcnZpY2UgYWRhcHRlciAnXCIgKyAodGhpcy5uYW1lIHx8ICcnKSArIFwiJy5cIik7XHJcbiAgfVxyXG5cclxuICBmZXRjaE1ldGFkYXRhKG1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUsIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSkge1xyXG4gICAgbGV0IHNlcnZpY2VOYW1lID0gZGF0YVNlcnZpY2Uuc2VydmljZU5hbWU7XHJcbiAgICBsZXQgdXJsID0gZGF0YVNlcnZpY2UucXVhbGlmeVVybChcIk1ldGFkYXRhXCIpO1xyXG5cclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5hamF4SW1wbC5hamF4KHtcclxuICAgICAgICB0eXBlOiBcIkdFVFwiLFxyXG4gICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogKGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICAgICAgLy8gbWlnaHQgaGF2ZSBiZWVuIGZldGNoZWQgYnkgYW5vdGhlciBxdWVyeVxyXG4gICAgICAgICAgaWYgKG1ldGFkYXRhU3RvcmUuaGFzTWV0YWRhdGFGb3Ioc2VydmljZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKFwiYWxyZWFkeSBmZXRjaGVkXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGRhdGEgPSBodHRwUmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgIGxldCBtZXRhZGF0YTogYW55O1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbWV0YWRhdGEgPSB0eXBlb2YgKGRhdGEpID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShkYXRhKSA6IGRhdGE7XHJcbiAgICAgICAgICAgIG1ldGFkYXRhU3RvcmUuaW1wb3J0TWV0YWRhdGEobWV0YWRhdGEpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyTXNnID0gXCJVbmFibGUgdG8gZWl0aGVyIHBhcnNlIG9yIGltcG9ydCBtZXRhZGF0YTogXCIgKyBlLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSwgXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yOiBcIiArIHVybCArIFwiLiBcIiArIGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gaW1wb3J0IG1heSBoYXZlIGJyb3VnaHQgaW4gdGhlIHNlcnZpY2UuXHJcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhU3RvcmUuaGFzTWV0YWRhdGFGb3Ioc2VydmljZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIG1ldGFkYXRhU3RvcmUuYWRkRGF0YVNlcnZpY2UoZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJlc29sdmUobWV0YWRhdGEpO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoaHR0cFJlc3BvbnNlOiBIdHRwUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSwgXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yOiBcIiArIHVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHByb21pc2U7XHJcbiAgfVxyXG5cclxuICBleGVjdXRlUXVlcnkobWFwcGluZ0NvbnRleHQ6IE1hcHBpbmdDb250ZXh0KSB7XHJcbiAgICBtYXBwaW5nQ29udGV4dC5hZGFwdGVyID0gdGhpcztcclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2U8UXVlcnlSZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgbGV0IHVybCA9IG1hcHBpbmdDb250ZXh0LmdldFVybCgpO1xyXG5cclxuICAgICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgICB0eXBlOiBcIkdFVFwiLFxyXG4gICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgIHBhcmFtczogKG1hcHBpbmdDb250ZXh0LnF1ZXJ5IGFzIEVudGl0eVF1ZXJ5KS5wYXJhbWV0ZXJzLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YSA9IGh0dHBSZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJEYXRhOiBRdWVyeVJlc3VsdDtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBkYXRhICYmIChkYXRhLnJlc3VsdHMgfHwgZGF0YS5SZXN1bHRzKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgICByRGF0YSA9IHsgcmVzdWx0czogcmVzdWx0cywgaW5saW5lQ291bnQ6IGRhdGEuaW5saW5lQ291bnQgfHwgZGF0YS5JbmxpbmVDb3VudCwgXHJcbiAgICAgICAgICAgICAgICBodHRwUmVzcG9uc2U6IGh0dHBSZXNwb25zZSwgcXVlcnk6IG1hcHBpbmdDb250ZXh0LnF1ZXJ5IH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgckRhdGEgPSB7IHJlc3VsdHM6IGRhdGEsIGh0dHBSZXNwb25zZTogaHR0cFJlc3BvbnNlLCBxdWVyeTogbWFwcGluZ0NvbnRleHQucXVlcnkgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShyRGF0YSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaGFuZGxlSHR0cEVycm9yKHJlamVjdCwgaHR0cFJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoaHR0cFJlc3BvbnNlOiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjcm9zc0RvbWFpbjogZmFsc2VcclxuICAgICAgfTtcclxuICAgICAgaWYgKG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLnVzZUpzb25wKSB7XHJcbiAgICAgICAgcGFyYW1zLmRhdGFUeXBlID0gJ2pzb25wJztcclxuICAgICAgICBwYXJhbXMuY3Jvc3NEb21haW4gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWpheEltcGwuYWpheChwYXJhbXMpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuICB9XHJcblxyXG4gIHNhdmVDaGFuZ2VzKHNhdmVDb250ZXh0OiBTYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZTogU2F2ZUJ1bmRsZSkge1xyXG4gICAgbGV0IGFkYXB0ZXIgPSBzYXZlQ29udGV4dC5hZGFwdGVyID0gdGhpcztcclxuXHJcbiAgICBsZXQgc2F2ZUJ1bmRsZVNlciA9IGFkYXB0ZXIuX3ByZXBhcmVTYXZlQnVuZGxlKHNhdmVDb250ZXh0LCBzYXZlQnVuZGxlKTtcclxuICAgIGxldCBidW5kbGUgPSBKU09OLnN0cmluZ2lmeShzYXZlQnVuZGxlU2VyKTtcclxuXHJcbiAgICBsZXQgdXJsID0gc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UucXVhbGlmeVVybChzYXZlQ29udGV4dC5yZXNvdXJjZU5hbWUpO1xyXG4gICAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxTYXZlUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuYWpheEltcGwuYWpheCh7XHJcbiAgICAgICAgdHlwZTogXCJQT1NUXCIsXHJcbiAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgZGF0YTogYnVuZGxlLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChodHRwUmVzcG9uc2U6IEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgaHR0cFJlc3BvbnNlLnNhdmVDb250ZXh0ID0gc2F2ZUNvbnRleHQ7XHJcbiAgICAgICAgICBsZXQgZGF0YSA9IGh0dHBSZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgaWYgKGRhdGEuRXJyb3JzIHx8IGRhdGEuZXJyb3JzKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgc2F2ZVJlc3VsdCA9IGFkYXB0ZXIuX3ByZXBhcmVTYXZlUmVzdWx0KHNhdmVDb250ZXh0LCBkYXRhKTtcclxuICAgICAgICAgICAgc2F2ZVJlc3VsdC5odHRwUmVzcG9uc2UgPSBodHRwUmVzcG9uc2U7XHJcbiAgICAgICAgICAgIHJlc29sdmUoc2F2ZVJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICBodHRwUmVzcG9uc2Uuc2F2ZUNvbnRleHQgPSBzYXZlQ29udGV4dDtcclxuICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLyoqIEFic3RyYWN0IG1ldGhvZCB0aGF0IG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuIGluIGFueSBjb25jcmV0ZSBEYXRhU2VydmljZUFkYXB0ZXIgc3ViY2xhc3MuIFxyXG4gIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIG1ldGhvZCBzaG91bGQgYmUgYSBzZXJpYWxpemFibGUgb2JqZWN0IHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgY2FsbGluZyBKU09OLnN0cmluZ2lmeSBvbiBpdC5cclxuICAqL1xyXG4gIF9wcmVwYXJlU2F2ZUJ1bmRsZShzYXZlQ29udGV4dDogU2F2ZUNvbnRleHQsIHNhdmVCdW5kbGU6IFNhdmVCdW5kbGUpOiBhbnkge1xyXG4gICAgLy8gVGhlIGltcGxlbWVudG9yIHNob3VsZCBjYWxsIF9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3JcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk5lZWQgYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBfcHJlcGFyZVNhdmVCdW5kbGVcIik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIGEgXCJDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3JcIlxyXG4gIHRoYXQgY2FuIHR3ZWFrIHRoZSBzYXZlQnVuZGxlIGJvdGggYXMgaXQgaXMgYnVpbHQgYW5kIHdoZW4gaXQgaXMgY29tcGxldGVkXHJcbiAgYnkgYSBjb25jcmV0ZSBEYXRhU2VydmljZUFkYXBhdGVyLlxyXG5cclxuICBJbml0aWFsaXplZCB3aXRoIGEgZGVmYXVsdCwgbm8tb3AgaW1wbGVtZW50YXRpb24gdGhhdCBkZXZlbG9wZXJzIGNhbiByZXBsYWNlIHdpdGggYVxyXG4gIHN1YnN0YW50aXZlIGltcGxlbWVudGF0aW9uIHRoYXQgY2hhbmdlcyB0aGUgaW5kaXZpZHVhbCBlbnRpdHkgY2hhbmdlIHJlcXVlc3RzXHJcbiAgb3IgYXNwZWN0cyBvZiB0aGUgZW50aXJlICdzYXZlQnVuZGxlJyB3aXRob3V0IGhhdmluZyB0byB3cml0ZSB0aGVpciBvd24gRGF0YVNlcnZpY2UgYWRhcHRlcnMuXHJcbiAgPiAgICAgbGV0IGFkYXB0ZXIgPSBicmVlemUuY29uZmlnLmdldEFkYXB0ZXJJbnN0YW5jZSgnZGF0YVNlcnZpY2UnKTtcclxuICA+ICAgICBhZGFwdGVyLmNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciA9IGZ1bmN0aW9uIChzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSkge1xyXG4gID4gICAgICAgICB0aGlzLmdldFJlcXVlc3QgPSBmdW5jdGlvbiAocmVxdWVzdCwgZW50aXR5LCBpbmRleCkge1xyXG4gID4gICAgICAgICAgICAvLyBhbHRlciB0aGUgcmVxdWVzdCB0aGF0IHRoZSBhZGFwdGVyIHByZXBhcmVkIGZvciB0aGlzIGVudGl0eVxyXG4gID4gICAgICAgICAgICAvLyBiYXNlZCBvbiB0aGUgZW50aXR5LCBzYXZlQ29udGV4dCwgYW5kIHNhdmVCdW5kbGVcclxuICA+ICAgICAgICAgICAgLy8gZS5nLiwgYWRkIGEgY3VzdG9tIGhlYWRlciBvciBwcnVuZSB0aGUgb3JpZ2luYWxWYWx1ZXNNYXBcclxuICA+ICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgPiAgICAgICAgfTtcclxuICA+ICAgICAgICB0aGlzLmRvbmUgPSBmdW5jdGlvbiAocmVxdWVzdHMpIHtcclxuICA+ICAgICAgICAgICAgLy8gYWx0ZXIgdGhlIGFycmF5IG9mIHJlcXVlc3RzIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGNoYW5nZS1zZXRcclxuICA+ICAgICAgICAgICAgLy8gYmFzZWQgb24gdGhlIHNhdmVDb250ZXh0IGFuZCBzYXZlQnVuZGxlXHJcbiAgPiAgICAgICAgfTtcclxuICA+ICAgICB9XHJcblxyXG4gIEBwYXJhbSBzYXZlQ29udGV4dCAtIFRoZSBCcmVlemVKUyBcImNvbnRleHRcIiBmb3IgdGhlIHNhdmUgb3BlcmF0aW9uLlxyXG4gIEBwYXJhbSBzYXZlQnVuZGxlIC0gQ29udGFpbnMgdGhlIGFycmF5IG9mIGVudGl0aWVzLXRvLWJlLXNhdmVkIChBS0EsIHRoZSBlbnRpdHkgY2hhbmdlLXNldCkuXHJcbiAgQHJldHVybiBDb25zdHJ1Y3RvciBmb3IgYSBcIkNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvclwiLlxyXG4gICoqL1xyXG4gIGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcjogQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yQ3RvciA9IERlZmF1bHRDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3I7XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3Ioc2F2ZUNvbnRleHQ6IFNhdmVDb250ZXh0LCBzYXZlQnVuZGxlOiBTYXZlQnVuZGxlKSB7XHJcbiAgICBsZXQgYWRhcHRlciA9IHNhdmVDb250ZXh0LmFkYXB0ZXIhO1xyXG4gICAgbGV0IGNyaSA9IGFkYXB0ZXIuY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yO1xyXG4gICAgbGV0IGlzRm4gPSBjb3JlLmlzRnVuY3Rpb247XHJcblxyXG4gICAgaWYgKGlzRm4oY3JpKSkge1xyXG4gICAgICBsZXQgcHJlID0gYWRhcHRlci5uYW1lICsgXCIgRGF0YVNlcnZpY2VBZGFwdGVyJ3MgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yXCI7XHJcbiAgICAgIGxldCBwb3N0ID0gXCIgaXMgbWlzc2luZyBvciBub3QgYSBmdW5jdGlvbi5cIjtcclxuICAgICAgbGV0IGludGVyY2VwdG9yID0gbmV3IGNyaShzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSk7XHJcbiAgICAgIGlmICghaXNGbihpbnRlcmNlcHRvci5nZXRSZXF1ZXN0KSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcmUgKyAnLmdldFJlcXVlc3QnICsgcG9zdCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpc0ZuKGludGVyY2VwdG9yLmRvbmUpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByZSArICcuZG9uZScgKyBwb3N0KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaW50ZXJjZXB0b3I7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbmV3IERlZmF1bHRDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3Ioc2F2ZUNvbnRleHQsIHNhdmVCdW5kbGUpIGFzIENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBBYnN0cmFjdCBtZXRob2QgdGhhdCBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBpbiBhbnkgY29uY3JldGUgRGF0YVNlcnZpY2VBZGFwdGVyIHN1YmxjbGFzcy4gXHJcbiAgVGhpcyBtZXRob2QgbmVlZHMgdG8gdGFrZSB0aGUgcmVzdWx0IHJldHVybmVkIHRoZSBzZXJ2ZXIgYW5kIGNvbnZlcnQgaXQgaW50byBhbiBJU2F2ZVJlc3VsdC4gXHJcbiAgKi9cclxuICBfcHJlcGFyZVNhdmVSZXN1bHQoc2F2ZUNvbnRleHQ6IFNhdmVDb250ZXh0LCBkYXRhOiBhbnkpOiBTYXZlUmVzdWx0IHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk5lZWQgYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBfcHJlcGFyZVNhdmVSZXN1bHRcIik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIFV0aWxpdHkgbWV0aG9kIHRoYXQgbWF5IGJlIHVzZWQgaW4gYW55IGNvbmNyZXRlIERhdGFTZXJ2aWNlQWRhcHRlciBzdWJsY2xhc3MgdG8gaGFuZGxlIGFueSBcclxuICBodHRwIGNvbm5lY3Rpb24gaXNzdWVzLiBcclxuICAqL1xyXG4gIC8vIFB1dCB0aGlzIGF0IHRoZSBib3R0b20gb2YgeW91ciBodHRwIGVycm9yIGFuYWx5c2lzXHJcbiAgc3RhdGljIF9jYXRjaE5vQ29ubmVjdGlvbkVycm9yKGVycjogU2VydmVyRXJyb3IpIHtcclxuICAgIGlmIChlcnIuc3RhdHVzID09PSAwICYmIGVyci5tZXNzYWdlID09IG51bGwpIHtcclxuICAgICAgZXJyLm1lc3NhZ2UgPSBcIkhUVFAgcmVzcG9uc2Ugc3RhdHVzIDAgYW5kIG5vIG1lc3NhZ2UuICBcIiArXHJcbiAgICAgICAgXCJMaWtlbHkgZGlkIG5vdCBvciBjb3VsZCBub3QgcmVhY2ggc2VydmVyLiBJcyB0aGUgc2VydmVyIHJ1bm5pbmc/XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBqc29uUmVzdWx0c0FkYXB0ZXIgPSBuZXcgSnNvblJlc3VsdHNBZGFwdGVyKHtcclxuICAgIG5hbWU6IFwibm9vcFwiLFxyXG5cclxuICAgIHZpc2l0Tm9kZTogZnVuY3Rpb24gKC8qIG5vZGUsIG1hcHBpbmdDb250ZXh0LCBub2RlQ29udGV4dCAqLykge1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZUh0dHBFcnJvcihyZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQsIGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlLCBtZXNzYWdlUHJlZml4Pzogc3RyaW5nKSB7XHJcbiAgbGV0IGVyciA9IGNyZWF0ZUVycm9yKGh0dHBSZXNwb25zZSk7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIuX2NhdGNoTm9Db25uZWN0aW9uRXJyb3IoZXJyKTtcclxuICBpZiAobWVzc2FnZVByZWZpeCkge1xyXG4gICAgZXJyLm1lc3NhZ2UgPSBtZXNzYWdlUHJlZml4ICsgXCI7IFwiICsgZXJyLm1lc3NhZ2U7XHJcbiAgfVxyXG4gIHJlamVjdChlcnIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVFcnJvcihodHRwUmVzcG9uc2U6IEh0dHBSZXNwb25zZSkge1xyXG4gIGxldCBlcnIgPSBuZXcgRXJyb3IoKSBhcyBTZXJ2ZXJFcnJvcjtcclxuICBlcnIuaHR0cFJlc3BvbnNlID0gaHR0cFJlc3BvbnNlO1xyXG4gIGVyci5zdGF0dXMgPSBodHRwUmVzcG9uc2Uuc3RhdHVzO1xyXG5cclxuICBsZXQgZXJyT2JqID0gaHR0cFJlc3BvbnNlLmRhdGE7XHJcblxyXG4gIGlmICghZXJyT2JqKSB7XHJcbiAgICBlcnIubWVzc2FnZSA9IGh0dHBSZXNwb25zZS5lcnJvciAmJiBodHRwUmVzcG9uc2UuZXJyb3IudG9TdHJpbmcoKTtcclxuICAgIHJldHVybiBlcnI7XHJcbiAgfVxyXG5cclxuICAvLyBzb21lIGFqYXggcHJvdmlkZXJzIHdpbGwgY29udmVydCBlcnJhbnQgcmVzdWx0IGludG8gYW4gb2JqZWN0IChhbmd1bGFyanMpLCBvdGhlcnMgd2lsbCBub3QgKGpRdWVyeSlcclxuICAvLyBpZiBub3QgZG8gaXQgaGVyZS5cclxuICBpZiAodHlwZW9mIGVyck9iaiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgdHJ5IHtcclxuICAgICAgZXJyT2JqID0gSlNPTi5wYXJzZShlcnJPYmopO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyBzb21ldGltZXMgaHR0cFJlc3BvbnNlLmRhdGEgaXMganVzdCB0aGUgZXJyb3IgbWVzc2FnZSBpdHNlbGZcclxuICAgICAgZXJyLm1lc3NhZ2UgPSBlcnJPYmo7XHJcbiAgICAgIHJldHVybiBlcnI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXQgc2F2ZUNvbnRleHQgPSBodHRwUmVzcG9uc2Uuc2F2ZUNvbnRleHQ7XHJcblxyXG4gIC8vIGlmIGFueSBvZiB0aGUgZm9sbG93IHByb3BlcnRpZXMgZXhpc3QgdGhlIHNvdXJjZSBpcyAuTkVUXHJcbiAgbGV0IHRtcCA9IGVyck9iai5NZXNzYWdlIHx8IGVyck9iai5FeGNlcHRpb25NZXNzYWdlIHx8IGVyck9iai5FbnRpdHlFcnJvcnMgfHwgZXJyT2JqLkVycm9ycztcclxuICBsZXQgaXNEb3ROZXQgPSAhIXRtcDtcclxuICBsZXQgbWVzc2FnZTogc3RyaW5nLCBlbnRpdHlFcnJvcnM6IGFueVtdO1xyXG4gIGlmICghaXNEb3ROZXQpIHtcclxuICAgIG1lc3NhZ2UgPSBlcnJPYmoubWVzc2FnZTtcclxuICAgIGVudGl0eUVycm9ycyA9IGVyck9iai5lcnJvcnMgfHwgZXJyT2JqLmVudGl0eUVycm9ycztcclxuICB9IGVsc2Uge1xyXG4gICAgbGV0IHRtcCA9IGVyck9iajtcclxuICAgIGRvIHtcclxuICAgICAgLy8gLk5FVCBleGNlcHRpb25zIGNhbiBwcm92aWRlIGJvdGggRXhjZXB0aW9uTWVzc2FnZSBhbmQgTWVzc2FnZSBidXQgRXhjZXB0aW9uTWV0aG9kIGlmIGl0XHJcbiAgICAgIC8vIGV4aXN0cyBoYXMgYSBtb3JlIGRldGFpbGVkIG1lc3NhZ2UuXHJcbiAgICAgIG1lc3NhZ2UgPSB0bXAuRXhjZXB0aW9uTWVzc2FnZSB8fCB0bXAuTWVzc2FnZTtcclxuICAgICAgdG1wID0gdG1wLklubmVyRXhjZXB0aW9uO1xyXG4gICAgfSB3aGlsZSAodG1wKTtcclxuICAgIC8vIC5FbnRpdHlFcnJvcnMgd2lsbCBvbmx5IG9jY3VyIGFzIGEgcmVzdWx0IG9mIGFuIEVudGl0eUVycm9yc0V4Y2VwdGlvbiBiZWluZyBkZWxpYmVyYXRlbHkgdGhyb3duIG9uIHRoZSBzZXJ2ZXJcclxuICAgIGVudGl0eUVycm9ycyA9IGVyck9iai5FcnJvcnMgfHwgZXJyT2JqLkVudGl0eUVycm9ycztcclxuICAgIGVudGl0eUVycm9ycyA9IGVudGl0eUVycm9ycyAmJiBlbnRpdHlFcnJvcnMubWFwKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZXJyb3JOYW1lOiBlLkVycm9yTmFtZSxcclxuICAgICAgICBlbnRpdHlUeXBlTmFtZTogTWV0YWRhdGFTdG9yZS5ub3JtYWxpemVUeXBlTmFtZShlLkVudGl0eVR5cGVOYW1lKSxcclxuICAgICAgICBrZXlWYWx1ZXM6IGUuS2V5VmFsdWVzLFxyXG4gICAgICAgIHByb3BlcnR5TmFtZTogZS5Qcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBlLkVycm9yTWVzc2FnZSxcclxuICAgICAgICBjdXN0b206IGUuQ3VzdG9tXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlmIChzYXZlQ29udGV4dCAmJiBlbnRpdHlFcnJvcnMpIHtcclxuXHJcbiAgICBsZXQgcHJvcE5hbWVGbiA9IHNhdmVDb250ZXh0LmVudGl0eU1hbmFnZXIubWV0YWRhdGFTdG9yZS5uYW1pbmdDb252ZW50aW9uLnNlcnZlclByb3BlcnR5TmFtZVRvQ2xpZW50O1xyXG4gICAgZW50aXR5RXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcclxuICAgICAgZS5wcm9wZXJ0eU5hbWUgPSBlLnByb3BlcnR5TmFtZSAmJiBwcm9wTmFtZUZuKGUucHJvcGVydHlOYW1lKTtcclxuICAgIH0pO1xyXG4gICAgKGVyciBhcyBTYXZlRXJyb3JGcm9tU2VydmVyKS5lbnRpdHlFcnJvcnMgPSBlbnRpdHlFcnJvcnM7XHJcbiAgfVxyXG5cclxuICBlcnIubWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJTZXJ2ZXIgc2lkZSBlcnJvcnMgZW5jb3VudGVyZWQgLSBzZWUgdGhlIGVudGl0eUVycm9ycyBjb2xsZWN0aW9uIG9uIHRoaXMgb2JqZWN0IGZvciBtb3JlIGRldGFpbFwiO1xyXG4gIHJldHVybiBlcnI7XHJcbn1cclxuXHJcblxyXG4vKiogVGhpcyBpcyBhIGRlZmF1bHQsIG5vLW9wIGltcGxlbWVudGF0aW9uIHRoYXQgZGV2ZWxvcGVycyBjYW4gcmVwbGFjZS4gKi9cclxuY2xhc3MgRGVmYXVsdENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciB7XHJcbiAgY29uc3RydWN0b3Ioc2F2ZUNvbnRleHQ6IFNhdmVDb250ZXh0LCBzYXZlQnVuZGxlOiBTYXZlQnVuZGxlKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0UmVxdWVzdChyZXF1ZXN0OiBhbnksIGVudGl0eTogRW50aXR5LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gcmVxdWVzdDtcclxuICB9XHJcblxyXG4gIGRvbmUocmVxdWVzdHM6IE9iamVjdFtdKSB7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
296
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZGF0YS1zZXJ2aWNlLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL2Fic3RyYWN0LWRhdGEtc2VydmljZS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUtsQyxPQUFPLEVBQWUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEQ7OztFQUdFO0FBQ0YsTUFBTSxPQUFnQiwwQkFBMEI7SUFBaEQ7UUE0SkU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7V0F5Qkc7UUFDSCw2QkFBd0IsR0FBaUMsK0JBQStCLENBQUM7UUEyQ3pGLHVCQUFrQixHQUFHLElBQUksa0JBQWtCLENBQUM7WUFDMUMsSUFBSSxFQUFFLE1BQU07WUFFWixTQUFTLEVBQUUsV0FBVSx1Q0FBdUM7Z0JBQzFELE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFoT0MscUJBQXFCO0lBQ3JCLHFCQUFxQixDQUFDLHdCQUE2QjtRQUNqRCxJQUFJLHdCQUF3QixDQUFDLGFBQWEsS0FBSyxNQUFNLElBQUksd0JBQXdCLENBQUMsU0FBUyxFQUFFO1lBQzNGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQWMsTUFBTSxDQUFHLENBQUM7UUFFakUsbUhBQW1IO1FBQ25ILElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtZQUN2QyxPQUFPO1NBQ1I7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBRUQsYUFBYSxDQUFDLGFBQTRCLEVBQUUsV0FBd0I7UUFDbEUsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUMxQyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTdDLElBQUksT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBRTVDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNqQixJQUFJLEVBQUUsS0FBSztnQkFDWCxHQUFHLEVBQUUsR0FBRztnQkFDUixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBMEIsRUFBRSxFQUFFO29CQUV0QywyQ0FBMkM7b0JBQzNDLElBQUksYUFBYSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRTt3QkFDN0MsT0FBTyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztxQkFDbkM7b0JBQ0QsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDN0IsSUFBSSxRQUFhLENBQUM7b0JBQ2xCLElBQUk7d0JBQ0YsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzt3QkFDaEUsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDeEM7b0JBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ1YsSUFBSSxNQUFNLEdBQUcsNkNBQTZDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQzt3QkFDdkUsZUFBZSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsNkJBQTZCLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQztxQkFDNUY7b0JBRUQsMENBQTBDO29CQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRTt3QkFDOUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztxQkFDM0M7b0JBRUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVwQixDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLFlBQTBCLEVBQUUsRUFBRTtvQkFDcEMsZUFBZSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsNkJBQTZCLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQzdFLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxZQUFZLENBQUMsY0FBOEI7UUFDekMsY0FBYyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDekQsSUFBSSxHQUFHLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRWxDLElBQUksTUFBTSxHQUFHO2dCQUNYLElBQUksRUFBRSxLQUFLO2dCQUNYLEdBQUcsRUFBRSxHQUFHO2dCQUNSLE1BQU0sRUFBRyxjQUFjLENBQUMsS0FBcUIsQ0FBQyxVQUFVO2dCQUN4RCxRQUFRLEVBQUUsTUFBTTtnQkFDaEIsT0FBTyxFQUFFLFVBQVUsWUFBMEI7b0JBQzNDLElBQUksSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7b0JBQzdCLElBQUk7d0JBQ0YsSUFBSSxLQUFrQixDQUFDO3dCQUN2QixJQUFJLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDckQsSUFBSSxPQUFPLEVBQUU7NEJBQ1gsS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVztnQ0FDM0UsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO3lCQUM3RDs2QkFBTTs0QkFDTCxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt5QkFDcEY7d0JBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUNoQjtvQkFBQyxPQUFPLENBQUMsRUFBRTt3QkFDVixJQUFJLENBQUMsWUFBWSxLQUFLLEVBQUU7NEJBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDWDs2QkFBTTs0QkFDTCxlQUFlLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO3lCQUN2QztxQkFDRjtnQkFFSCxDQUFDO2dCQUNELEtBQUssRUFBRSxVQUFVLFlBQTBCO29CQUN6QyxlQUFlLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO2dCQUNELFdBQVcsRUFBRSxLQUFLO2FBQ25CLENBQUM7WUFDRixJQUFJLGNBQWMsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO2dCQUN2QyxNQUFNLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztnQkFDMUIsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7YUFDM0I7WUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxXQUFXLENBQUMsV0FBd0IsRUFBRSxVQUFzQjtRQUMxRCxJQUFJLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUV6QyxJQUFJLGFBQWEsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFM0MsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZFLElBQUksT0FBTyxHQUFHLElBQUksT0FBTyxDQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNqQixJQUFJLEVBQUUsTUFBTTtnQkFDWixHQUFHLEVBQUUsR0FBRztnQkFDUixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsV0FBVyxFQUFFLGtCQUFrQjtnQkFDL0IsSUFBSSxFQUFFLE1BQU07Z0JBQ1osT0FBTyxFQUFFLFVBQVUsWUFBMEI7b0JBQzNDLFlBQVksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO29CQUN2QyxJQUFJLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO29CQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTt3QkFDOUIsZUFBZSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztxQkFDdkM7eUJBQU07d0JBQ0wsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDL0QsVUFBVSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7d0JBQ3ZDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDckI7Z0JBQ0gsQ0FBQztnQkFDRCxLQUFLLEVBQUUsVUFBVSxZQUEwQjtvQkFDekMsWUFBWSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7b0JBQ3ZDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7TUFFRTtJQUNGLGtCQUFrQixDQUFDLFdBQXdCLEVBQUUsVUFBc0I7UUFDakUsOERBQThEO1FBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBOEJELHdCQUF3QjtJQUN4QiwrQkFBK0IsQ0FBQyxXQUF3QixFQUFFLFVBQXNCO1FBQzlFLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFRLENBQUM7UUFDbkMsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1FBQzNDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDYixJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLGdEQUFnRCxDQUFDO1lBQzFFLElBQUksSUFBSSxHQUFHLGdDQUFnQyxDQUFDO1lBQzVDLElBQUksV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQzdDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQzthQUN2QztZQUNELE9BQU8sV0FBVyxDQUFDO1NBQ3BCO2FBQU07WUFDTCxPQUFPLElBQUksK0JBQStCLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBNkIsQ0FBQztTQUNqRztJQUNILENBQUM7SUFFRDs7TUFFRTtJQUNGLGtCQUFrQixDQUFDLFdBQXdCLEVBQUUsSUFBUztRQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUdEOztNQUVFO0lBQ0YscURBQXFEO0lBQ3JELE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxHQUFnQjtRQUM3QyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFO1lBQzNDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsMENBQTBDO2dCQUN0RCxrRUFBa0UsQ0FBQztTQUN0RTtJQUNILENBQUM7Q0FTRjtBQUVELFNBQVMsZUFBZSxDQUFDLE1BQThCLEVBQUUsWUFBMEIsRUFBRSxhQUFzQjtJQUN6RyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEMsMEJBQTBCLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEQsSUFBSSxhQUFhLEVBQUU7UUFDakIsR0FBRyxDQUFDLE9BQU8sR0FBRyxhQUFhLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7S0FDbEQ7SUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsWUFBMEI7SUFDN0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQWlCLENBQUM7SUFDckMsR0FBRyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDaEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBRWpDLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFFL0IsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNYLEdBQUcsQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLEtBQUssSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xFLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFFRCxzR0FBc0c7SUFDdEcscUJBQXFCO0lBQ3JCLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1FBQzlCLElBQUk7WUFDRixNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM3QjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsK0RBQStEO1lBQy9ELEdBQUcsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQ3JCLE9BQU8sR0FBRyxDQUFDO1NBQ1o7S0FDRjtJQUVELElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUM7SUFFM0MsMkRBQTJEO0lBQzNELElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM1RixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ3JCLElBQUksT0FBZSxFQUFFLFlBQW1CLENBQUM7SUFDekMsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNiLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3pCLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUM7S0FDckQ7U0FBTTtRQUNMLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUNqQixHQUFHO1lBQ0QsMEZBQTBGO1lBQzFGLHNDQUFzQztZQUN0QyxPQUFPLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDOUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUM7U0FDMUIsUUFBUSxHQUFHLEVBQUU7UUFDZCxnSEFBZ0g7UUFDaEgsWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQztRQUNwRCxZQUFZLEdBQUcsWUFBWSxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQ3pELE9BQU87Z0JBQ0wsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTO2dCQUN0QixjQUFjLEVBQUUsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7Z0JBQ2pFLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztnQkFDdEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxZQUFZO2dCQUM1QixZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVk7Z0JBQzVCLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTTthQUNqQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7S0FDSjtJQUVELElBQUksV0FBVyxJQUFJLFlBQVksRUFBRTtRQUUvQixJQUFJLFVBQVUsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQztRQUNyRyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUM5QixDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUNGLEdBQTJCLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztLQUMxRDtJQUVELEdBQUcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLGlHQUFpRyxDQUFDO0lBQzNILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUdELDJFQUEyRTtBQUMzRSxNQUFNLCtCQUErQjtJQUNuQyxZQUFZLFdBQXdCLEVBQUUsVUFBc0I7SUFFNUQsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFZLEVBQUUsTUFBYyxFQUFFLEtBQWE7UUFDcEQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksQ0FBQyxRQUFrQjtJQUN2QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBFbnRpdHlRdWVyeSB9IGZyb20gJy4vZW50aXR5LXF1ZXJ5JztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VBZGFwdGVyLCBBamF4QWRhcHRlciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yQ3RvciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yIH0gZnJvbSAnLi9pbnRlcmZhY2UtcmVnaXN0cnknO1xyXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5pbXBvcnQgeyBNYXBwaW5nQ29udGV4dCB9IGZyb20gJy4vbWFwcGluZy1jb250ZXh0JztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UsIEpzb25SZXN1bHRzQWRhcHRlciB9IGZyb20gJy4vZGF0YS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cFJlc3BvbnNlLCBTYXZlQ29udGV4dCwgU2F2ZUJ1bmRsZSwgU2VydmVyRXJyb3IsIFNhdmVSZXN1bHQsIFNhdmVFcnJvckZyb21TZXJ2ZXIsIFF1ZXJ5UmVzdWx0IH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcblxyXG4vKiogRm9yIHVzZSBieSBicmVlemUgcGx1Z2luIGF1dGhvcnMgb25seS4gIFRoZSBjbGFzcyBpcyB1c2VkIGFzIHRoZSBiYXNlIGNsYXNzIGZvciBtb3N0IFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dIGltcGxlbWVudGF0aW9uc1xyXG5AYWRhcHRlciAoc2VlIFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dKSAgICBcclxuQGhpZGRlblxyXG4qL1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIgaW1wbGVtZW50cyBEYXRhU2VydmljZUFkYXB0ZXIge1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIGRlY2xhcmUgXyRpbXBsPzogYW55O1xyXG4gIC8qKiBUaGUgbmFtZSBvZiB0aGlzIGFkYXB0ZXIuICovXHJcbiAgZGVjbGFyZSBuYW1lOiBzdHJpbmc7XHJcbiAgLyoqIFRoZSBbW0lBamF4QWRhcHRlcl1dIHVzZWQgYnkgdGhpcyBbW0lEYXRhU2VydmljZUFkYXB0ZXJdXS4gKi9cclxuICBkZWNsYXJlIGFqYXhJbXBsOiBBamF4QWRhcHRlcjtcclxuXHJcbiAgLy8gVE9ETyB1c2UgaW50ZXJmYWNlXHJcbiAgY2hlY2tGb3JSZWNvbXBvc2l0aW9uKGludGVyZmFjZUluaXRpYWxpemVkQXJnczogYW55KSB7XHJcbiAgICBpZiAoaW50ZXJmYWNlSW5pdGlhbGl6ZWRBcmdzLmludGVyZmFjZU5hbWUgPT09IFwiYWpheFwiICYmIGludGVyZmFjZUluaXRpYWxpemVkQXJncy5pc0RlZmF1bHQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKCkge1xyXG4gICAgdGhpcy5hamF4SW1wbCA9IGNvbmZpZy5nZXRBZGFwdGVySW5zdGFuY2U8QWpheEFkYXB0ZXI+KFwiYWpheFwiKSAhO1xyXG5cclxuICAgIC8vIGRvbid0IGNhY2hlICdhamF4JyBiZWNhdXNlIHRoZW4gd2Ugd291bGQgbmVlZCB0byBcIi5iaW5kXCIgaXQsIGFuZCBkb24ndCB3YW50IHRvIGJlY2F1c2Ugb2YgYnJvd2VyIHN1cHBvcnQgaXNzdWVzLlxyXG4gICAgaWYgKHRoaXMuYWpheEltcGwgJiYgdGhpcy5hamF4SW1wbC5hamF4KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIGFqYXggYWRhcHRlciBmb3IgZGF0YXNlcnZpY2UgYWRhcHRlciAnXCIgKyAodGhpcy5uYW1lIHx8ICcnKSArIFwiJy5cIik7XHJcbiAgfVxyXG5cclxuICBmZXRjaE1ldGFkYXRhKG1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUsIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSkge1xyXG4gICAgbGV0IHNlcnZpY2VOYW1lID0gZGF0YVNlcnZpY2Uuc2VydmljZU5hbWU7XHJcbiAgICBsZXQgdXJsID0gZGF0YVNlcnZpY2UucXVhbGlmeVVybChcIk1ldGFkYXRhXCIpO1xyXG5cclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5hamF4SW1wbC5hamF4KHtcclxuICAgICAgICB0eXBlOiBcIkdFVFwiLFxyXG4gICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogKGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICAgICAgLy8gbWlnaHQgaGF2ZSBiZWVuIGZldGNoZWQgYnkgYW5vdGhlciBxdWVyeVxyXG4gICAgICAgICAgaWYgKG1ldGFkYXRhU3RvcmUuaGFzTWV0YWRhdGFGb3Ioc2VydmljZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKFwiYWxyZWFkeSBmZXRjaGVkXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGRhdGEgPSBodHRwUmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgIGxldCBtZXRhZGF0YTogYW55O1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbWV0YWRhdGEgPSB0eXBlb2YgKGRhdGEpID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShkYXRhKSA6IGRhdGE7XHJcbiAgICAgICAgICAgIG1ldGFkYXRhU3RvcmUuaW1wb3J0TWV0YWRhdGEobWV0YWRhdGEpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyTXNnID0gXCJVbmFibGUgdG8gZWl0aGVyIHBhcnNlIG9yIGltcG9ydCBtZXRhZGF0YTogXCIgKyBlLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSwgXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yOiBcIiArIHVybCArIFwiLiBcIiArIGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gaW1wb3J0IG1heSBoYXZlIGJyb3VnaHQgaW4gdGhlIHNlcnZpY2UuXHJcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhU3RvcmUuaGFzTWV0YWRhdGFGb3Ioc2VydmljZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIG1ldGFkYXRhU3RvcmUuYWRkRGF0YVNlcnZpY2UoZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJlc29sdmUobWV0YWRhdGEpO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoaHR0cFJlc3BvbnNlOiBIdHRwUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSwgXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yOiBcIiArIHVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHByb21pc2U7XHJcbiAgfVxyXG5cclxuICBleGVjdXRlUXVlcnkobWFwcGluZ0NvbnRleHQ6IE1hcHBpbmdDb250ZXh0KSB7XHJcbiAgICBtYXBwaW5nQ29udGV4dC5hZGFwdGVyID0gdGhpcztcclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2U8UXVlcnlSZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgbGV0IHVybCA9IG1hcHBpbmdDb250ZXh0LmdldFVybCgpO1xyXG5cclxuICAgICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgICB0eXBlOiBcIkdFVFwiLFxyXG4gICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgIHBhcmFtczogKG1hcHBpbmdDb250ZXh0LnF1ZXJ5IGFzIEVudGl0eVF1ZXJ5KS5wYXJhbWV0ZXJzLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YSA9IGh0dHBSZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJEYXRhOiBRdWVyeVJlc3VsdDtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBkYXRhICYmIChkYXRhLnJlc3VsdHMgfHwgZGF0YS5SZXN1bHRzKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgICByRGF0YSA9IHsgcmVzdWx0czogcmVzdWx0cywgaW5saW5lQ291bnQ6IGRhdGEuaW5saW5lQ291bnQgfHwgZGF0YS5JbmxpbmVDb3VudCwgXHJcbiAgICAgICAgICAgICAgICBodHRwUmVzcG9uc2U6IGh0dHBSZXNwb25zZSwgcXVlcnk6IG1hcHBpbmdDb250ZXh0LnF1ZXJ5IH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgckRhdGEgPSB7IHJlc3VsdHM6IGRhdGEsIGh0dHBSZXNwb25zZTogaHR0cFJlc3BvbnNlLCBxdWVyeTogbWFwcGluZ0NvbnRleHQucXVlcnkgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShyRGF0YSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaGFuZGxlSHR0cEVycm9yKHJlamVjdCwgaHR0cFJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoaHR0cFJlc3BvbnNlOiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjcm9zc0RvbWFpbjogZmFsc2VcclxuICAgICAgfTtcclxuICAgICAgaWYgKG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLnVzZUpzb25wKSB7XHJcbiAgICAgICAgcGFyYW1zLmRhdGFUeXBlID0gJ2pzb25wJztcclxuICAgICAgICBwYXJhbXMuY3Jvc3NEb21haW4gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWpheEltcGwuYWpheChwYXJhbXMpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuICB9XHJcblxyXG4gIHNhdmVDaGFuZ2VzKHNhdmVDb250ZXh0OiBTYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZTogU2F2ZUJ1bmRsZSkge1xyXG4gICAgbGV0IGFkYXB0ZXIgPSBzYXZlQ29udGV4dC5hZGFwdGVyID0gdGhpcztcclxuXHJcbiAgICBsZXQgc2F2ZUJ1bmRsZVNlciA9IGFkYXB0ZXIuX3ByZXBhcmVTYXZlQnVuZGxlKHNhdmVDb250ZXh0LCBzYXZlQnVuZGxlKTtcclxuICAgIGxldCBidW5kbGUgPSBKU09OLnN0cmluZ2lmeShzYXZlQnVuZGxlU2VyKTtcclxuXHJcbiAgICBsZXQgdXJsID0gc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UucXVhbGlmeVVybChzYXZlQ29udGV4dC5yZXNvdXJjZU5hbWUpO1xyXG4gICAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxTYXZlUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuYWpheEltcGwuYWpheCh7XHJcbiAgICAgICAgdHlwZTogXCJQT1NUXCIsXHJcbiAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgZGF0YTogYnVuZGxlLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChodHRwUmVzcG9uc2U6IEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgaHR0cFJlc3BvbnNlLnNhdmVDb250ZXh0ID0gc2F2ZUNvbnRleHQ7XHJcbiAgICAgICAgICBsZXQgZGF0YSA9IGh0dHBSZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgaWYgKGRhdGEuRXJyb3JzIHx8IGRhdGEuZXJyb3JzKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgc2F2ZVJlc3VsdCA9IGFkYXB0ZXIuX3ByZXBhcmVTYXZlUmVzdWx0KHNhdmVDb250ZXh0LCBkYXRhKTtcclxuICAgICAgICAgICAgc2F2ZVJlc3VsdC5odHRwUmVzcG9uc2UgPSBodHRwUmVzcG9uc2U7XHJcbiAgICAgICAgICAgIHJlc29sdmUoc2F2ZVJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICBodHRwUmVzcG9uc2Uuc2F2ZUNvbnRleHQgPSBzYXZlQ29udGV4dDtcclxuICAgICAgICAgIGhhbmRsZUh0dHBFcnJvcihyZWplY3QsIGh0dHBSZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLyoqIEFic3RyYWN0IG1ldGhvZCB0aGF0IG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuIGluIGFueSBjb25jcmV0ZSBEYXRhU2VydmljZUFkYXB0ZXIgc3ViY2xhc3MuIFxyXG4gIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIG1ldGhvZCBzaG91bGQgYmUgYSBzZXJpYWxpemFibGUgb2JqZWN0IHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgY2FsbGluZyBKU09OLnN0cmluZ2lmeSBvbiBpdC5cclxuICAqL1xyXG4gIF9wcmVwYXJlU2F2ZUJ1bmRsZShzYXZlQ29udGV4dDogU2F2ZUNvbnRleHQsIHNhdmVCdW5kbGU6IFNhdmVCdW5kbGUpOiBhbnkge1xyXG4gICAgLy8gVGhlIGltcGxlbWVudG9yIHNob3VsZCBjYWxsIF9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3JcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk5lZWQgYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBfcHJlcGFyZVNhdmVCdW5kbGVcIik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIGEgXCJDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3JcIlxyXG4gIHRoYXQgY2FuIHR3ZWFrIHRoZSBzYXZlQnVuZGxlIGJvdGggYXMgaXQgaXMgYnVpbHQgYW5kIHdoZW4gaXQgaXMgY29tcGxldGVkXHJcbiAgYnkgYSBjb25jcmV0ZSBEYXRhU2VydmljZUFkYXBhdGVyLlxyXG5cclxuICBJbml0aWFsaXplZCB3aXRoIGEgZGVmYXVsdCwgbm8tb3AgaW1wbGVtZW50YXRpb24gdGhhdCBkZXZlbG9wZXJzIGNhbiByZXBsYWNlIHdpdGggYVxyXG4gIHN1YnN0YW50aXZlIGltcGxlbWVudGF0aW9uIHRoYXQgY2hhbmdlcyB0aGUgaW5kaXZpZHVhbCBlbnRpdHkgY2hhbmdlIHJlcXVlc3RzXHJcbiAgb3IgYXNwZWN0cyBvZiB0aGUgZW50aXJlICdzYXZlQnVuZGxlJyB3aXRob3V0IGhhdmluZyB0byB3cml0ZSB0aGVpciBvd24gRGF0YVNlcnZpY2UgYWRhcHRlcnMuXHJcbiAgPiAgICAgbGV0IGFkYXB0ZXIgPSBicmVlemUuY29uZmlnLmdldEFkYXB0ZXJJbnN0YW5jZSgnZGF0YVNlcnZpY2UnKTtcclxuICA+ICAgICBhZGFwdGVyLmNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciA9IGZ1bmN0aW9uIChzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSkge1xyXG4gID4gICAgICAgICB0aGlzLmdldFJlcXVlc3QgPSBmdW5jdGlvbiAocmVxdWVzdCwgZW50aXR5LCBpbmRleCkge1xyXG4gID4gICAgICAgICAgICAvLyBhbHRlciB0aGUgcmVxdWVzdCB0aGF0IHRoZSBhZGFwdGVyIHByZXBhcmVkIGZvciB0aGlzIGVudGl0eVxyXG4gID4gICAgICAgICAgICAvLyBiYXNlZCBvbiB0aGUgZW50aXR5LCBzYXZlQ29udGV4dCwgYW5kIHNhdmVCdW5kbGVcclxuICA+ICAgICAgICAgICAgLy8gZS5nLiwgYWRkIGEgY3VzdG9tIGhlYWRlciBvciBwcnVuZSB0aGUgb3JpZ2luYWxWYWx1ZXNNYXBcclxuICA+ICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgPiAgICAgICAgfTtcclxuICA+ICAgICAgICB0aGlzLmRvbmUgPSBmdW5jdGlvbiAocmVxdWVzdHMpIHtcclxuICA+ICAgICAgICAgICAgLy8gYWx0ZXIgdGhlIGFycmF5IG9mIHJlcXVlc3RzIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGNoYW5nZS1zZXRcclxuICA+ICAgICAgICAgICAgLy8gYmFzZWQgb24gdGhlIHNhdmVDb250ZXh0IGFuZCBzYXZlQnVuZGxlXHJcbiAgPiAgICAgICAgfTtcclxuICA+ICAgICB9XHJcblxyXG4gIEBwYXJhbSBzYXZlQ29udGV4dCAtIFRoZSBCcmVlemVKUyBcImNvbnRleHRcIiBmb3IgdGhlIHNhdmUgb3BlcmF0aW9uLlxyXG4gIEBwYXJhbSBzYXZlQnVuZGxlIC0gQ29udGFpbnMgdGhlIGFycmF5IG9mIGVudGl0aWVzLXRvLWJlLXNhdmVkIChBS0EsIHRoZSBlbnRpdHkgY2hhbmdlLXNldCkuXHJcbiAgQHJldHVybiBDb25zdHJ1Y3RvciBmb3IgYSBcIkNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvclwiLlxyXG4gICoqL1xyXG4gIGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcjogQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yQ3RvciA9IERlZmF1bHRDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3I7XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3Ioc2F2ZUNvbnRleHQ6IFNhdmVDb250ZXh0LCBzYXZlQnVuZGxlOiBTYXZlQnVuZGxlKSB7XHJcbiAgICBsZXQgYWRhcHRlciA9IHNhdmVDb250ZXh0LmFkYXB0ZXIhO1xyXG4gICAgbGV0IGNyaSA9IGFkYXB0ZXIuY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yO1xyXG4gICAgbGV0IGlzRm4gPSBjb3JlLmlzRnVuY3Rpb247XHJcblxyXG4gICAgaWYgKGlzRm4oY3JpKSkge1xyXG4gICAgICBsZXQgcHJlID0gYWRhcHRlci5uYW1lICsgXCIgRGF0YVNlcnZpY2VBZGFwdGVyJ3MgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yXCI7XHJcbiAgICAgIGxldCBwb3N0ID0gXCIgaXMgbWlzc2luZyBvciBub3QgYSBmdW5jdGlvbi5cIjtcclxuICAgICAgbGV0IGludGVyY2VwdG9yID0gbmV3IGNyaShzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSk7XHJcbiAgICAgIGlmICghaXNGbihpbnRlcmNlcHRvci5nZXRSZXF1ZXN0KSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcmUgKyAnLmdldFJlcXVlc3QnICsgcG9zdCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpc0ZuKGludGVyY2VwdG9yLmRvbmUpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByZSArICcuZG9uZScgKyBwb3N0KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaW50ZXJjZXB0b3I7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbmV3IERlZmF1bHRDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3Ioc2F2ZUNvbnRleHQsIHNhdmVCdW5kbGUpIGFzIENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBBYnN0cmFjdCBtZXRob2QgdGhhdCBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBpbiBhbnkgY29uY3JldGUgRGF0YVNlcnZpY2VBZGFwdGVyIHN1YmxjbGFzcy4gXHJcbiAgVGhpcyBtZXRob2QgbmVlZHMgdG8gdGFrZSB0aGUgcmVzdWx0IHJldHVybmVkIHRoZSBzZXJ2ZXIgYW5kIGNvbnZlcnQgaXQgaW50byBhbiBJU2F2ZVJlc3VsdC4gXHJcbiAgKi9cclxuICBfcHJlcGFyZVNhdmVSZXN1bHQoc2F2ZUNvbnRleHQ6IFNhdmVDb250ZXh0LCBkYXRhOiBhbnkpOiBTYXZlUmVzdWx0IHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk5lZWQgYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBfcHJlcGFyZVNhdmVSZXN1bHRcIik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIFV0aWxpdHkgbWV0aG9kIHRoYXQgbWF5IGJlIHVzZWQgaW4gYW55IGNvbmNyZXRlIERhdGFTZXJ2aWNlQWRhcHRlciBzdWJsY2xhc3MgdG8gaGFuZGxlIGFueSBcclxuICBodHRwIGNvbm5lY3Rpb24gaXNzdWVzLiBcclxuICAqL1xyXG4gIC8vIFB1dCB0aGlzIGF0IHRoZSBib3R0b20gb2YgeW91ciBodHRwIGVycm9yIGFuYWx5c2lzXHJcbiAgc3RhdGljIF9jYXRjaE5vQ29ubmVjdGlvbkVycm9yKGVycjogU2VydmVyRXJyb3IpIHtcclxuICAgIGlmIChlcnIuc3RhdHVzID09PSAwICYmIGVyci5tZXNzYWdlID09IG51bGwpIHtcclxuICAgICAgZXJyLm1lc3NhZ2UgPSBcIkhUVFAgcmVzcG9uc2Ugc3RhdHVzIDAgYW5kIG5vIG1lc3NhZ2UuICBcIiArXHJcbiAgICAgICAgXCJMaWtlbHkgZGlkIG5vdCBvciBjb3VsZCBub3QgcmVhY2ggc2VydmVyLiBJcyB0aGUgc2VydmVyIHJ1bm5pbmc/XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBqc29uUmVzdWx0c0FkYXB0ZXIgPSBuZXcgSnNvblJlc3VsdHNBZGFwdGVyKHtcclxuICAgIG5hbWU6IFwibm9vcFwiLFxyXG5cclxuICAgIHZpc2l0Tm9kZTogZnVuY3Rpb24gKC8qIG5vZGUsIG1hcHBpbmdDb250ZXh0LCBub2RlQ29udGV4dCAqLykge1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZUh0dHBFcnJvcihyZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQsIGh0dHBSZXNwb25zZTogSHR0cFJlc3BvbnNlLCBtZXNzYWdlUHJlZml4Pzogc3RyaW5nKSB7XHJcbiAgbGV0IGVyciA9IGNyZWF0ZUVycm9yKGh0dHBSZXNwb25zZSk7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIuX2NhdGNoTm9Db25uZWN0aW9uRXJyb3IoZXJyKTtcclxuICBpZiAobWVzc2FnZVByZWZpeCkge1xyXG4gICAgZXJyLm1lc3NhZ2UgPSBtZXNzYWdlUHJlZml4ICsgXCI7IFwiICsgZXJyLm1lc3NhZ2U7XHJcbiAgfVxyXG4gIHJlamVjdChlcnIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVFcnJvcihodHRwUmVzcG9uc2U6IEh0dHBSZXNwb25zZSkge1xyXG4gIGxldCBlcnIgPSBuZXcgRXJyb3IoKSBhcyBTZXJ2ZXJFcnJvcjtcclxuICBlcnIuaHR0cFJlc3BvbnNlID0gaHR0cFJlc3BvbnNlO1xyXG4gIGVyci5zdGF0dXMgPSBodHRwUmVzcG9uc2Uuc3RhdHVzO1xyXG5cclxuICBsZXQgZXJyT2JqID0gaHR0cFJlc3BvbnNlLmRhdGE7XHJcblxyXG4gIGlmICghZXJyT2JqKSB7XHJcbiAgICBlcnIubWVzc2FnZSA9IGh0dHBSZXNwb25zZS5lcnJvciAmJiBodHRwUmVzcG9uc2UuZXJyb3IudG9TdHJpbmcoKTtcclxuICAgIHJldHVybiBlcnI7XHJcbiAgfVxyXG5cclxuICAvLyBzb21lIGFqYXggcHJvdmlkZXJzIHdpbGwgY29udmVydCBlcnJhbnQgcmVzdWx0IGludG8gYW4gb2JqZWN0IChhbmd1bGFyanMpLCBvdGhlcnMgd2lsbCBub3QgKGpRdWVyeSlcclxuICAvLyBpZiBub3QgZG8gaXQgaGVyZS5cclxuICBpZiAodHlwZW9mIGVyck9iaiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgdHJ5IHtcclxuICAgICAgZXJyT2JqID0gSlNPTi5wYXJzZShlcnJPYmopO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyBzb21ldGltZXMgaHR0cFJlc3BvbnNlLmRhdGEgaXMganVzdCB0aGUgZXJyb3IgbWVzc2FnZSBpdHNlbGZcclxuICAgICAgZXJyLm1lc3NhZ2UgPSBlcnJPYmo7XHJcbiAgICAgIHJldHVybiBlcnI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXQgc2F2ZUNvbnRleHQgPSBodHRwUmVzcG9uc2Uuc2F2ZUNvbnRleHQ7XHJcblxyXG4gIC8vIGlmIGFueSBvZiB0aGUgZm9sbG93IHByb3BlcnRpZXMgZXhpc3QgdGhlIHNvdXJjZSBpcyAuTkVUXHJcbiAgbGV0IHRtcCA9IGVyck9iai5NZXNzYWdlIHx8IGVyck9iai5FeGNlcHRpb25NZXNzYWdlIHx8IGVyck9iai5FbnRpdHlFcnJvcnMgfHwgZXJyT2JqLkVycm9ycztcclxuICBsZXQgaXNEb3ROZXQgPSAhIXRtcDtcclxuICBsZXQgbWVzc2FnZTogc3RyaW5nLCBlbnRpdHlFcnJvcnM6IGFueVtdO1xyXG4gIGlmICghaXNEb3ROZXQpIHtcclxuICAgIG1lc3NhZ2UgPSBlcnJPYmoubWVzc2FnZTtcclxuICAgIGVudGl0eUVycm9ycyA9IGVyck9iai5lcnJvcnMgfHwgZXJyT2JqLmVudGl0eUVycm9ycztcclxuICB9IGVsc2Uge1xyXG4gICAgbGV0IHRtcCA9IGVyck9iajtcclxuICAgIGRvIHtcclxuICAgICAgLy8gLk5FVCBleGNlcHRpb25zIGNhbiBwcm92aWRlIGJvdGggRXhjZXB0aW9uTWVzc2FnZSBhbmQgTWVzc2FnZSBidXQgRXhjZXB0aW9uTWV0aG9kIGlmIGl0XHJcbiAgICAgIC8vIGV4aXN0cyBoYXMgYSBtb3JlIGRldGFpbGVkIG1lc3NhZ2UuXHJcbiAgICAgIG1lc3NhZ2UgPSB0bXAuRXhjZXB0aW9uTWVzc2FnZSB8fCB0bXAuTWVzc2FnZTtcclxuICAgICAgdG1wID0gdG1wLklubmVyRXhjZXB0aW9uO1xyXG4gICAgfSB3aGlsZSAodG1wKTtcclxuICAgIC8vIC5FbnRpdHlFcnJvcnMgd2lsbCBvbmx5IG9jY3VyIGFzIGEgcmVzdWx0IG9mIGFuIEVudGl0eUVycm9yc0V4Y2VwdGlvbiBiZWluZyBkZWxpYmVyYXRlbHkgdGhyb3duIG9uIHRoZSBzZXJ2ZXJcclxuICAgIGVudGl0eUVycm9ycyA9IGVyck9iai5FcnJvcnMgfHwgZXJyT2JqLkVudGl0eUVycm9ycztcclxuICAgIGVudGl0eUVycm9ycyA9IGVudGl0eUVycm9ycyAmJiBlbnRpdHlFcnJvcnMubWFwKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZXJyb3JOYW1lOiBlLkVycm9yTmFtZSxcclxuICAgICAgICBlbnRpdHlUeXBlTmFtZTogTWV0YWRhdGFTdG9yZS5ub3JtYWxpemVUeXBlTmFtZShlLkVudGl0eVR5cGVOYW1lKSxcclxuICAgICAgICBrZXlWYWx1ZXM6IGUuS2V5VmFsdWVzLFxyXG4gICAgICAgIHByb3BlcnR5TmFtZTogZS5Qcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBlLkVycm9yTWVzc2FnZSxcclxuICAgICAgICBjdXN0b206IGUuQ3VzdG9tXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlmIChzYXZlQ29udGV4dCAmJiBlbnRpdHlFcnJvcnMpIHtcclxuXHJcbiAgICBsZXQgcHJvcE5hbWVGbiA9IHNhdmVDb250ZXh0LmVudGl0eU1hbmFnZXIubWV0YWRhdGFTdG9yZS5uYW1pbmdDb252ZW50aW9uLnNlcnZlclByb3BlcnR5TmFtZVRvQ2xpZW50O1xyXG4gICAgZW50aXR5RXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcclxuICAgICAgZS5wcm9wZXJ0eU5hbWUgPSBlLnByb3BlcnR5TmFtZSAmJiBwcm9wTmFtZUZuKGUucHJvcGVydHlOYW1lKTtcclxuICAgIH0pO1xyXG4gICAgKGVyciBhcyBTYXZlRXJyb3JGcm9tU2VydmVyKS5lbnRpdHlFcnJvcnMgPSBlbnRpdHlFcnJvcnM7XHJcbiAgfVxyXG5cclxuICBlcnIubWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJTZXJ2ZXIgc2lkZSBlcnJvcnMgZW5jb3VudGVyZWQgLSBzZWUgdGhlIGVudGl0eUVycm9ycyBjb2xsZWN0aW9uIG9uIHRoaXMgb2JqZWN0IGZvciBtb3JlIGRldGFpbFwiO1xyXG4gIHJldHVybiBlcnI7XHJcbn1cclxuXHJcblxyXG4vKiogVGhpcyBpcyBhIGRlZmF1bHQsIG5vLW9wIGltcGxlbWVudGF0aW9uIHRoYXQgZGV2ZWxvcGVycyBjYW4gcmVwbGFjZS4gKi9cclxuY2xhc3MgRGVmYXVsdENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciB7XHJcbiAgY29uc3RydWN0b3Ioc2F2ZUNvbnRleHQ6IFNhdmVDb250ZXh0LCBzYXZlQnVuZGxlOiBTYXZlQnVuZGxlKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0UmVxdWVzdChyZXF1ZXN0OiBhbnksIGVudGl0eTogRW50aXR5LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gcmVxdWVzdDtcclxuICB9XHJcblxyXG4gIGRvbmUocmVxdWVzdHM6IE9iamVjdFtdKSB7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|