@kontur.candy/tools 2.138.0 → 2.140.0-debug
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/CHANGELOG.md +79 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js +80 -9
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +26 -4
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +11 -0
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +6 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js +14 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +6 -0
- package/distr/Common/HttpClient/HttpClient.js +5 -2
- package/distr/Common/IterableUtils.js +26 -1
- package/distr/Common/KCLangRuntimeUtils.js +10 -2
- package/distr/Common/ModelPath/BuildIterationSequence.js +3 -2
- package/distr/Common/ModelPath/ModelPath.js +15 -4
- package/distr/Common/StringArrayKey.js +4 -12
- package/distr/Common/UseShowOnce.js +88 -0
- package/distr/Common/hashUtils.js +17 -0
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js +10 -4
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +45 -2
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +3 -1
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +1 -1
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +6 -6
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +46 -4
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +2 -2
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +12 -6
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +2 -2
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +5 -2
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +37 -0
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +9 -7
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +5 -3
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +151 -57
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +226 -137
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -76,6 +76,14 @@ class FakeCandyApiDraftClient {
|
|
|
76
76
|
return Promise.resolve();
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
+
runMassAction(actionId, parameters) {
|
|
80
|
+
return Promise.resolve();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
acceptTransferType(fufDriveUri, transferType, abortSignal) {
|
|
84
|
+
return Promise.resolve(undefined);
|
|
85
|
+
}
|
|
86
|
+
|
|
79
87
|
cancelTask(taskId) {
|
|
80
88
|
return Promise.resolve(undefined);
|
|
81
89
|
}
|
|
@@ -124,6 +132,10 @@ class FakeCandyApiDraftClient {
|
|
|
124
132
|
throw new _Errors.NotImplementedError();
|
|
125
133
|
}
|
|
126
134
|
|
|
135
|
+
print(type, body) {
|
|
136
|
+
throw new _Errors.NotImplementedError();
|
|
137
|
+
}
|
|
138
|
+
|
|
127
139
|
getFileProperties(driveUri) {
|
|
128
140
|
return Promise.resolve(undefined);
|
|
129
141
|
}
|
|
@@ -188,6 +200,10 @@ class FakeCandyApiDraftClient {
|
|
|
188
200
|
throw new _Errors.NotImplementedError();
|
|
189
201
|
}
|
|
190
202
|
|
|
203
|
+
getRawPartialInnerAsJsonTree(rules, maxInstanceCount) {
|
|
204
|
+
throw new _Errors.NotImplementedError();
|
|
205
|
+
}
|
|
206
|
+
|
|
191
207
|
getTaskById(taskId) {
|
|
192
208
|
return Promise.resolve(undefined);
|
|
193
209
|
}
|
|
@@ -204,11 +220,13 @@ class FakeCandyApiDraftClient {
|
|
|
204
220
|
return Promise.resolve(undefined);
|
|
205
221
|
}
|
|
206
222
|
|
|
207
|
-
async sendChangeSet(data) {
|
|
208
|
-
return Promise.resolve(
|
|
223
|
+
async sendChangeSet(data, currentDataVersion) {
|
|
224
|
+
return Promise.resolve({
|
|
225
|
+
dataVersion: 0
|
|
226
|
+
});
|
|
209
227
|
}
|
|
210
228
|
|
|
211
|
-
sendChangeSetSync(data) {
|
|
229
|
+
sendChangeSetSync(data, currentDataVersion) {
|
|
212
230
|
return 200;
|
|
213
231
|
}
|
|
214
232
|
|
|
@@ -240,7 +258,11 @@ class FakeCandyApiDraftClient {
|
|
|
240
258
|
return Promise.resolve(undefined);
|
|
241
259
|
}
|
|
242
260
|
|
|
261
|
+
getDataVersion() {
|
|
262
|
+
return Promise.resolve(0);
|
|
263
|
+
}
|
|
264
|
+
|
|
243
265
|
}
|
|
244
266
|
|
|
245
267
|
exports.FakeCandyApiDraftClient = FakeCandyApiDraftClient;
|
|
246
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9GYWtlQ2FuZHlBcGlDbGllbnQudHMiXSwibmFtZXMiOlsiRmFrZUNhbmR5QXBpQ2xpZW50IiwiZGlnZXN0Q2xpZW50IiwiRmFrZURpZ2VzdEFwaUNsaWVudCIsImNyZWF0ZURpZ2VzdEFwaUNsaWVudCIsImRyYWZ0RnVsbElkIiwiY3JlYXRlUGlja2xpc3QiLCJnSWQiLCJkYXRhIiwiZ2V0QWxsR2Z2cyIsImFib3J0U2lnbmFsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGVja0FsaXZlIiwidW5kZWZpbmVkIiwiY3JlYXRlRHJhZnQiLCJucyIsImdmdiIsImJvZHkiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZm9yRHJhZnQiLCJGYWtlQ2FuZHlBcGlEcmFmdENsaWVudCIsImNyZWF0ZURyYWZ0RnJvbURyaXZlIiwiZnVmRHJpdmVVcmkiLCJjcmVhdGVFbXB0eURyYWZ0IiwiZ2V0SW5mb0J5SW5ucyIsImlubnMiLCJnZXRGZWF0dXJlRmxhZ3NXaXRob3V0UHJvbWlzZSIsImZlYXR1cmVGbGFncyIsImdldEZlYXR1cmVGbGFncyIsInJlc3BvbnNlIiwiY2FuZHlUZXN0RmVhdHVyZSIsImRlbGV0ZUluc3RhbmNlcyIsIm11bHRpcGxpY2l0eVBhdGgiLCJpbnN0YW5jZXMiLCJpbXBvcnRFbXBsb3llZXMiLCJyZXF1ZXN0IiwiY2FuY2VsVGFzayIsInRhc2tJZCIsImNsZWFyRHJhZnQiLCJjb252ZXJ0RHJhZnRGcm9tUHJldkdmdiIsImNyZWF0ZU9yVXBkYXRlQXR0YWNobWVudHMiLCJhdHRhY2htZW50cyIsImVucXVldWVUYXNrIiwidGFza0luZm8iLCJnZXRBbGxBdHRhY2htZW50cyIsImdldEFsbFRhc2tzIiwiZ2V0QXR0YWNobWVudEJ5SWQiLCJhdHRhY2htZW50SWQiLCJnZXRFcnJvckxvZyIsImdldEVycm9yTG9nV2l0aENoZWNrU2NlbmFyaW9zIiwiY2hlY2tTY2VuYXJpb3MiLCJnZXRFeHBlcnRFcnJvckxvZyIsImdldEV4cGxhbmF0b3J5Tm90ZSIsImdldEZpbGVQcm9wZXJ0aWVzIiwiZHJpdmVVcmkiLCJwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMiLCJ1cGxvYWRBbmRHZXRGaWxlUHJvcGVydGllcyIsImRyaXZlVXJpcyIsInNlcnZlckVycm9yIiwiU2VydmVyRXJyb3JzIiwiVW5rbm93bkVycm9yIiwic291cmNlc1RvdGFsQ291bnQiLCJpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXMiLCJnZXRIcmVmRG93bmxvYWRGdWYiLCJnZXRIcmVmRG93bmxvYWRJbm5lciIsImdldEhyZWZUb0NvbnZlcnRhdGlvbkxvZyIsImdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbyIsImdldEhyZWZUb0Rvd25sb2FkRm9ybXNDbGllbnRJbmZvIiwiZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZiIsImdldEhyZWZUb0Vycm9yTG9nUGRmIiwiZXJyb3JMb2dOYW1lIiwicHJvcHNOYW1lIiwiZ2V0SHJlZlRvSW5uZXJFZGl0b3IiLCJnZXRSZXF1aXNpdGVzIiwicmVxdWlzaXRlTGlzdCIsImdldElubmVyIiwicGF0aHMiLCJnZXRQYXJ0aWFsSW5uZXIiLCJydWxlcyIsIm1heEluc3RhbmNlQ291bnQiLCJnZXRQYXJ0aWFsSW5uZXJBc0pzb25UcmVlIiwiZ2V0VGFza0J5SWQiLCJub3JtYWxpemVCeVJ1bGVzIiwicGF0Y2hQcmVzZW50YXRpb24iLCJ0eXBlIiwiY29udGVudCIsInJlbW92ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudElkcyIsInNlbmRDaGFuZ2VTZXQiLCJzZW5kQ2hhbmdlU2V0U3luYyIsInNldEZ1ZkJ5RHJpdmVVcmkiLCJjb21iaW5lRnVmQnlEcml2ZVVyaSIsImNvbWJpbmVNZXRob2QiLCJtdWx0aXBsZUNvbWJpbmVGdWZCeURyaXZlVXJpIiwic2V0UHJlc2VudGF0aW9uIiwic2V0QWxsQ2hlY2tib3hlc0ZvcjExMzEwMyIsImVuYWJsZWQiLCJzZWFyY2hJbnN0YW5jZXNCeVRleHQiLCJ0ZXh0IiwicGF0aFByZWZpeCIsInBhdGhzVG9TZWFyY2giLCJjdXN0b21Ob3JtYWxpemUiLCJub3JtYWxpemVySWQiLCJwYXRoUHJlZml4ZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFxQkE7O0FBQ0E7O0FBR08sTUFBTUEsa0JBQU4sQ0FBb0Q7QUFBQTtBQUFBLFNBQ3RDQyxZQURzQyxHQUN2QixJQUFJQyx3Q0FBSixFQUR1QjtBQUFBOztBQUdoREMsRUFBQUEscUJBQXFCLENBQUNDLFdBQUQsRUFBNkM7QUFDckUsV0FBTyxLQUFLSCxZQUFaO0FBQ0g7O0FBRU1JLEVBQUFBLGNBQWMsQ0FBQ0MsR0FBRCxFQUFjQyxJQUFkLEVBQThDO0FBQy9ELFNBQUtOLFlBQUwsQ0FBa0JJLGNBQWxCLENBQWlDQyxHQUFqQyxFQUFzQ0MsSUFBdEM7QUFDSDs7QUFFTUMsRUFBQUEsVUFBVSxDQUFDQyxXQUFELEVBQStDO0FBQzVELFdBQU9DLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0g7O0FBRU1DLEVBQUFBLFVBQVUsR0FBa0I7QUFDL0IsV0FBT0YsT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxTQUFoQixDQUFQO0FBQ0g7O0FBSU1DLEVBQUFBLFdBQVcsQ0FBQ0MsRUFBRCxFQUFhQyxHQUFiLEVBQXNDQyxJQUF0QyxFQUFtRjtBQUNqRyxVQUFNLElBQUlDLDJCQUFKLEVBQU47QUFDSDs7QUFFTUMsRUFBQUEsUUFBUSxDQUFDZixXQUFELEVBQWlEO0FBQzVELFdBQU8sSUFBSWdCLHVCQUFKLEVBQVA7QUFDSDs7QUFFTUMsRUFBQUEsb0JBQW9CLENBQ3ZCTixFQUR1QixFQUV2Qk8sV0FGdUIsRUFHdkJiLFdBSHVCLEVBSUs7QUFDNUIsVUFBTSxJQUFJUywyQkFBSixFQUFOO0FBQ0g7O0FBRU1LLEVBQUFBLGdCQUFnQixDQUFDUixFQUFELEVBQWFDLEdBQWIsRUFBMEJQLFdBQTFCLEVBQW1GO0FBQ3RHLFVBQU0sSUFBSVMsMkJBQUosRUFBTjtBQUNIOztBQUVNTSxFQUFBQSxh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aEIsQ0FBUDtBQUNIOztBQUVNMEYsRUFBQUEsZUFBZSxDQUFDQyxZQUFELEVBQXVCQyxZQUF2QixFQUE4RDtBQUNoRixXQUFPN0YsT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxTQUFoQixDQUFQO0FBQ0g7O0FBMUxnRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGlja2xpc3REYXRhSXRlbSB9IGZyb20gXCIuLi8uLi9FbmdpbmUvc3JjL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSBcIi4uL0Vycm9yc1wiO1xuaW1wb3J0IHsgSHR0cFN0YXR1c0NvZGUgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9JSHR0cENsaWVudFwiO1xuXG5pbXBvcnQgdHlwZSB7IENoZWNrU2NlbmFyaW9UeXBlLCBJQ2FuZHlBcGlDbGllbnQsIElDYW5keUFwaURyYWZ0Q2xpZW50IH0gZnJvbSBcIi4vSUNhbmR5QXBpQ2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVySW5uZXJSZXNwb25zZSwgU2VydmVySnNvblJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvR2V0SW5uZXIvU2VydmVySW5uZXJSZXNwb25zZVwiO1xuaW1wb3J0IHsgRmlsZVByb3BlcnRpZXMsIFVwbG9hZEZpbGVQcm9wZXJ0aWVzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvRmlsZVByb3BlcnRpZXNcIjtcbmltcG9ydCB7IENyZWF0ZURyYWZ0UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9DcmVhdGVEcmFmdC9DcmVhdGVEcmFmdFJlc3BvbnNlXCI7XG5pbXBvcnQgeyBDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0V4cGxhbmF0b3J5Tm90ZS9DcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZVwiO1xuaW1wb3J0IHsgRHJhZnRGdWxsSWQgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEZ1bGxJZFwiO1xuaW1wb3J0IHsgU2VydmVyQ2hhbmdlU2V0IH0gZnJvbSBcIi4vVHlwZXMvQ2hhbmdlU2V0L1NlcnZlckNoYW5nZVNldFwiO1xuaW1wb3J0IHsgU2VydmVyVGFzaywgVmVyaWZ5QW5kRml4Rm5zUmVxdWlyZW1lbnRzVGFza0luZm8gfSBmcm9tIFwiLi9UeXBlcy9UYXNrcy9UYXNrc1wiO1xuaW1wb3J0IHsgR2V0QnlJbm5SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzVHlwZXNcIjtcbmltcG9ydCB7IEF0dGFjaEluZm8gfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9BdHRhY21lbnRzXCI7XG5pbXBvcnQgeyBEcmFmdFByZXNlbnRhdGlvblR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmVzZW50YXRpb25zL0RyYWZ0UHJlc2VudGF0aW9uVHlwZVwiO1xuaW1wb3J0IHsgQ29udmVydERyYWZ0UmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9Db252ZXJ0RHJhZnRSZXF1ZXN0XCI7XG5pbXBvcnQgeyBQcmVzZW50YXRpb25Db250ZW50IH0gZnJvbSBcIi4vVHlwZXMvUHJlc2VudGF0aW9ucy9QcmVzZW50YXRpb25Db250ZW50XCI7XG5pbXBvcnQgeyBTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2VcIjtcbmltcG9ydCB7IENvbWJpbmVGdWZSZXN1bHQsIEZ1ZkNvbWJpbmVNZXRob2QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9GZWF0dXJlRmxhZ3MvRmVhdHVyZUZsYWdzUmVzcG9uc2VcIjtcbmltcG9ydCB7IElEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi9EaWdlc3RBcGlDbGllbnQvSURpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgRmFrZURpZ2VzdEFwaUNsaWVudCB9IGZyb20gXCIuL0RpZ2VzdEFwaUNsaWVudC9GYWtlcy9GYWtlRGlnZXN0QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBTZXJ2ZXJFcnJvcnMgfSBmcm9tIFwiLi9DYW5keUFwaUNsaWVudFwiO1xuaW1wb3J0IHsgSW1wb3J0RW1wbG95ZWVzUmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL1N0YWZmL0ltcG9ydEVtcGxveWVlc1JlcXVlc3RcIjtcblxuZXhwb3J0IGNsYXNzIEZha2VDYW5keUFwaUNsaWVudCBpbXBsZW1lbnRzIElDYW5keUFwaUNsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWdlc3RDbGllbnQgPSBuZXcgRmFrZURpZ2VzdEFwaUNsaWVudCgpO1xuXG4gICAgcHVibGljIGNyZWF0ZURpZ2VzdEFwaUNsaWVudChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpOiBJRGlnZXN0QXBpQ2xpZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlnZXN0Q2xpZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVQaWNrbGlzdChnSWQ6IHN0cmluZywgZGF0YTogUGlja2xpc3REYXRhSXRlbVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlnZXN0Q2xpZW50LmNyZWF0ZVBpY2tsaXN0KGdJZCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbEdmdnMoYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoZWNrQWxpdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBjcmVhdGVEcmFmdChuczogc3RyaW5nLCBnZnY6IHVuZGVmaW5lZCwgYm9keTogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcgfCB1bmRlZmluZWQsIGJvZHk/OiBCdWZmZXIpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yRHJhZnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgICAgICByZXR1cm4gbmV3IEZha2VDYW5keUFwaURyYWZ0Q2xpZW50KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURyYWZ0RnJvbURyaXZlKFxuICAgICAgICBuczogc3RyaW5nLFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUVtcHR5RHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SW5mb0J5SW5ucyhkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGlubnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxHZXRCeUlublJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZlYXR1cmVGbGFnc1dpdGhvdXRQcm9taXNlKGZlYXR1cmVGbGFnczogRmVhdHVyZUZsYWdzUmVzcG9uc2UpOiBGZWF0dXJlRmxhZ3NSZXNwb25zZSB7XG4gICAgICAgIHJldHVybiBmZWF0dXJlRmxhZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZlYXR1cmVGbGFncygpOiBQcm9taXNlPEZlYXR1cmVGbGFnc1Jlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBGZWF0dXJlRmxhZ3NSZXNwb25zZSA9IHsgY2FuZHlUZXN0RmVhdHVyZTogXCJ0cnVlXCIgfTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmFrZUNhbmR5QXBpRHJhZnRDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlEcmFmdENsaWVudCB7XG4gICAgcHVibGljIGRlbGV0ZUluc3RhbmNlcyhtdWx0aXBsaWNpdHlQYXRoOiBzdHJpbmcsIGluc3RhbmNlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbXBvcnRFbXBsb3llZXMocmVxdWVzdDogSW1wb3J0RW1wbG95ZWVzUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbmNlbFRhc2sodGFza0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhckRyYWZ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnZlcnREcmFmdEZyb21QcmV2R2Z2KHJlcXVlc3Q6IENvbnZlcnREcmFmdFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzOiByZWFkb25seSBBdHRhY2hJbmZvW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbnF1ZXVlVGFzayh0YXNrSWQ6IHN0cmluZywgdGFza0luZm86IFZlcmlmeUFuZEZpeEZuc1JlcXVpcmVtZW50c1Rhc2tJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsQXR0YWNobWVudHMoKTogUHJvbWlzZTxBdHRhY2hJbmZvW10+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbFRhc2tzKCk6IFByb21pc2U8U2VydmVyVGFza1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBdHRhY2htZW50QnlJZChhdHRhY2htZW50SWQ6IHN0cmluZyk6IFByb21pc2U8QXR0YWNoSW5mbz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFcnJvckxvZygpOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEVycm9yTG9nV2l0aENoZWNrU2NlbmFyaW9zKGNoZWNrU2NlbmFyaW9zOiBDaGVja1NjZW5hcmlvVHlwZVtdKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFeHBlcnRFcnJvckxvZygpOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEV4cGxhbmF0b3J5Tm90ZSgpOiBQcm9taXNlPENyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpbGVQcm9wZXJ0aWVzKGRyaXZlVXJpOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJlcGFyZUFuZEdldEZpbGVQcm9wZXJ0aWVzKGRyaXZlVXJpOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxGaWxlUHJvcGVydGllcyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICAgIHNlcnZlckVycm9yOiBTZXJ2ZXJFcnJvcnMuVW5rbm93bkVycm9yLFxuICAgICAgICAgICAgc291cmNlc1RvdGFsQ291bnQ6IDAsXG4gICAgICAgICAgICBpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXM6IFwiXCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRGdWYoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZEb3dubG9hZElubmVyKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2coKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRGb3Jtc0NsaWVudEluZm8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkSW5uZXJGdWYoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Vycm9yTG9nUGRmKGVycm9yTG9nTmFtZTogc3RyaW5nLCBwcm9wc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Jbm5lckVkaXRvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0UmVxdWlzaXRlcyhyZXF1aXNpdGVMaXN0OiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8U2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5uZXIocGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxTZXJ2ZXJJbm5lclJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyKHJ1bGVzOiByZWFkb25seSBzdHJpbmdbXSwgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlcik6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXJ0aWFsSW5uZXJBc0pzb25UcmVlKHJ1bGVzOiByZWFkb25seSBzdHJpbmdbXSwgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlcik6IFByb21pc2U8U2VydmVySnNvblJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRhc2tCeUlkKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTxTZXJ2ZXJUYXNrIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm9ybWFsaXplQnlSdWxlcyhydWxlczogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGF0Y2hQcmVzZW50YXRpb24odHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlLCBjb250ZW50OiBQcmVzZW50YXRpb25Db250ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlQXR0YWNobWVudHMoYXR0YWNobWVudElkczogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kQ2hhbmdlU2V0KGRhdGE6IFNlcnZlckNoYW5nZVNldCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbmRDaGFuZ2VTZXRTeW5jKGRhdGE6IFNlcnZlckNoYW5nZVNldCk6IEh0dHBTdGF0dXNDb2RlIHtcbiAgICAgICAgcmV0dXJuIDIwMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RnVmQnlEcml2ZVVyaShkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2RcbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtdWx0aXBsZUNvbWJpbmVGdWZCeURyaXZlVXJpKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBGdWZDb21iaW5lTWV0aG9kXG4gICAgKTogUHJvbWlzZTxDb21iaW5lRnVmUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UHJlc2VudGF0aW9uKHR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSwgY29udGVudDogc3RyaW5nIHwgdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFsbENoZWNrYm94ZXNGb3IxMTMxMDMoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaEluc3RhbmNlc0J5VGV4dChcbiAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICBwYXRoUHJlZml4OiBzdHJpbmcsXG4gICAgICAgIHBhdGhzVG9TZWFyY2g6IHN0cmluZ1tdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3VzdG9tTm9ybWFsaXplKG5vcm1hbGl6ZXJJZDogc3RyaW5nLCBwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG59XG4iXX0=
|
|
268
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9GYWtlQ2FuZHlBcGlDbGllbnQudHMiXSwibmFtZXMiOlsiRmFrZUNhbmR5QXBpQ2xpZW50IiwiZGlnZXN0Q2xpZW50IiwiRmFrZURpZ2VzdEFwaUNsaWVudCIsImNyZWF0ZURpZ2VzdEFwaUNsaWVudCIsImRyYWZ0RnVsbElkIiwiY3JlYXRlUGlja2xpc3QiLCJnSWQiLCJkYXRhIiwiZ2V0QWxsR2Z2cyIsImFib3J0U2lnbmFsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGVja0FsaXZlIiwidW5kZWZpbmVkIiwiY3JlYXRlRHJhZnQiLCJucyIsImdmdiIsImJvZHkiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZm9yRHJhZnQiLCJGYWtlQ2FuZHlBcGlEcmFmdENsaWVudCIsImNyZWF0ZURyYWZ0RnJvbURyaXZlIiwiZnVmRHJpdmVVcmkiLCJjcmVhdGVFbXB0eURyYWZ0IiwiZ2V0SW5mb0J5SW5ucyIsImlubnMiLCJnZXRGZWF0dXJlRmxhZ3NXaXRob3V0UHJvbWlzZSIsImZlYXR1cmVGbGFncyIsImdldEZlYXR1cmVGbGFncyIsInJlc3BvbnNlIiwiY2FuZHlUZXN0RmVhdHVyZSIsImRlbGV0ZUluc3RhbmNlcyIsIm11bHRpcGxpY2l0eVBhdGgiLCJpbnN0YW5jZXMiLCJpbXBvcnRFbXBsb3llZXMiLCJyZXF1ZXN0IiwicnVuTWFzc0FjdGlvbiIsImFjdGlvbklkIiwicGFyYW1ldGVycyIsImFjY2VwdFRyYW5zZmVyVHlwZSIsInRyYW5zZmVyVHlwZSIsImNhbmNlbFRhc2siLCJ0YXNrSWQiLCJjbGVhckRyYWZ0IiwiY29udmVydERyYWZ0RnJvbVByZXZHZnYiLCJjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJlbnF1ZXVlVGFzayIsInRhc2tJbmZvIiwiZ2V0QWxsQXR0YWNobWVudHMiLCJnZXRBbGxUYXNrcyIsImdldEF0dGFjaG1lbnRCeUlkIiwiYXR0YWNobWVudElkIiwiZ2V0RXJyb3JMb2ciLCJnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyIsImNoZWNrU2NlbmFyaW9zIiwiZ2V0RXhwZXJ0RXJyb3JMb2ciLCJnZXRFeHBsYW5hdG9yeU5vdGUiLCJwcmludCIsInR5cGUiLCJnZXRGaWxlUHJvcGVydGllcyIsImRyaXZlVXJpIiwicHJlcGFyZUFuZEdldEZpbGVQcm9wZXJ0aWVzIiwidXBsb2FkQW5kR2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaXMiLCJzZXJ2ZXJFcnJvciIsIlNlcnZlckVycm9ycyIsIlVua25vd25FcnJvciIsInNvdXJjZXNUb3RhbENvdW50IiwiaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzIiwiZ2V0SHJlZkRvd25sb2FkRnVmIiwiZ2V0SHJlZkRvd25sb2FkSW5uZXIiLCJnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2ciLCJnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8iLCJnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbyIsImdldEhyZWZUb0Rvd25sb2FkSW5uZXJGdWYiLCJnZXRIcmVmVG9FcnJvckxvZ1BkZiIsImVycm9yTG9nTmFtZSIsInByb3BzTmFtZSIsImdldEhyZWZUb0lubmVyRWRpdG9yIiwiZ2V0UmVxdWlzaXRlcyIsInJlcXVpc2l0ZUxpc3QiLCJnZXRJbm5lciIsInBhdGhzIiwiZ2V0UGFydGlhbElubmVyIiwicnVsZXMiLCJtYXhJbnN0YW5jZUNvdW50IiwiZ2V0UGFydGlhbElubmVyQXNKc29uVHJlZSIsImdldFJhd1BhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJnZXRUYXNrQnlJZCIsIm5vcm1hbGl6ZUJ5UnVsZXMiLCJwYXRjaFByZXNlbnRhdGlvbiIsImNvbnRlbnQiLCJyZW1vdmVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRJZHMiLCJzZW5kQ2hhbmdlU2V0IiwiY3VycmVudERhdGFWZXJzaW9uIiwiZGF0YVZlcnNpb24iLCJzZW5kQ2hhbmdlU2V0U3luYyIsInNldEZ1ZkJ5RHJpdmVVcmkiLCJjb21iaW5lRnVmQnlEcml2ZVVyaSIsImNvbWJpbmVNZXRob2QiLCJtdWx0aXBsZUNvbWJpbmVGdWZCeURyaXZlVXJpIiwic2V0UHJlc2VudGF0aW9uIiwic2V0QWxsQ2hlY2tib3hlc0ZvcjExMzEwMyIsImVuYWJsZWQiLCJzZWFyY2hJbnN0YW5jZXNCeVRleHQiLCJ0ZXh0IiwicGF0aFByZWZpeCIsInBhdGhzVG9TZWFyY2giLCJjdXN0b21Ob3JtYWxpemUiLCJub3JtYWxpemVySWQiLCJwYXRoUHJlZml4ZXMiLCJnZXREYXRhVmVyc2lvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQW9CQTs7QUFDQTs7QUFPTyxNQUFNQSxrQkFBTixDQUFvRDtBQUFBO0FBQUEsU0FDdENDLFlBRHNDLEdBQ3ZCLElBQUlDLHdDQUFKLEVBRHVCO0FBQUE7O0FBR2hEQyxFQUFBQSxxQkFBcUIsQ0FBQ0MsV0FBRCxFQUE2QztBQUNyRSxXQUFPLEtBQUtILFlBQVo7QUFDSDs7QUFFTUksRUFBQUEsY0FBYyxDQUFDQyxHQUFELEVBQWNDLElBQWQsRUFBOEM7QUFDL0QsU0FBS04sWUFBTCxDQUFrQkksY0FBbEIsQ0FBaUNDLEdBQWpDLEVBQXNDQyxJQUF0QztBQUNIOztBQUVNQyxFQUFBQSxVQUFVLENBQUNDLFdBQUQsRUFBK0M7QUFDNUQsV0FBT0MsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDSDs7QUFFTUMsRUFBQUEsVUFBVSxHQUFrQjtBQUMvQixXQUFPRixPQUFPLENBQUNDLE9BQVIsQ0FBZ0JFLFNBQWhCLENBQVA7QUFDSDs7QUFJTUMsRUFBQUEsV0FBVyxDQUFDQyxFQUFELEVBQWFDLEdBQWIsRUFBc0NDLElBQXRDLEVBQW1GO0FBQ2pHLFVBQU0sSUFBSUMsMkJBQUosRUFBTjtBQUNIOztBQUVNQyxFQUFBQSxRQUFRLENBQUNmLFdBQUQsRUFBaUQ7QUFDNUQsV0FBTyxJQUFJZ0IsdUJBQUosRUFBUDtBQUNIOztBQUVNQyxFQUFBQSxvQkFBb0IsQ0FDdkJOLEVBRHVCLEVBRXZC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QUFBQSxnQkFBZ0IsQ0FBQ3RDLFFBQUQsRUFBa0M7QUFDckQsV0FBT25ELE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsU0FBaEIsQ0FBUDtBQUNIOztBQUVNdUYsRUFBQUEsb0JBQW9CLENBQ3ZCdkMsUUFEdUIsRUFFdkJ3QyxhQUZ1QixFQUdjO0FBQ3JDLFdBQU8zRixPQUFPLENBQUNDLE9BQVIsQ0FBZ0JFLFNBQWhCLENBQVA7QUFDSDs7QUFFTXlGLEVBQUFBLDRCQUE0QixDQUMvQnRDLFNBRCtCLEVBRS9CcUMsYUFGK0IsRUFHTTtBQUNyQyxXQUFPM0YsT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxTQUFoQixDQUFQO0FBQ0g7O0FBRU0wRixFQUFBQSxlQUFlLENBQUM1QyxJQUFELEVBQThCaUMsT0FBOUIsRUFBd0U7QUFDMUYsV0FBT2xGLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsU0FBaEIsQ0FBUDtBQUNIOztBQUVNMkYsRUFBQUEseUJBQXlCLENBQUNDLE9BQUQsRUFBa0M7QUFDOUQsV0FBTy9GLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsU0FBaEIsQ0FBUDtBQUNIOztBQUVNNkYsRUFBQUEscUJBQXFCLENBQ3hCQyxJQUR3QixFQUV4QkMsVUFGd0IsRUFHeEJDLGFBSHdCLEVBSXhCdkIsZ0JBSndCLEVBS1A7QUFDakIsV0FBTzVFLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0g7O0FBRU1tRyxFQUFBQSxlQUFlLENBQUNDLFlBQUQsRUFBdUJDLFlBQXZCLEVBQThEO0FBQ2hGLFdBQU90RyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0JFLFNBQWhCLENBQVA7QUFDSDs7QUFFTW9HLEVBQUFBLGNBQWMsR0FBb0I7QUFDckMsV0FBT3ZHLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixDQUFoQixDQUFQO0FBQ0g7O0FBck5nRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGlja2xpc3REYXRhSXRlbSB9IGZyb20gXCIuLi8uLi9FbmdpbmUvc3JjL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSBcIi4uL0Vycm9yc1wiO1xuXG5pbXBvcnQgdHlwZSB7IENoZWNrU2NlbmFyaW9UeXBlLCBJQ2FuZHlBcGlDbGllbnQsIElDYW5keUFwaURyYWZ0Q2xpZW50LCBJU2VuZENoYW5nZVNldFJlc3VsdCB9IGZyb20gXCIuL0lDYW5keUFwaUNsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlcklubmVyUmVzcG9uc2UsIFNlcnZlckpzb25SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlcklubmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IEZpbGVQcm9wZXJ0aWVzLCBTZXJ2ZXJFcnJvclJlc3BvbnNlLCBVcGxvYWRGaWxlUHJvcGVydGllc1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0ZpbGVQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgeyBDcmVhdGVEcmFmdFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQ3JlYXRlRHJhZnQvQ3JlYXRlRHJhZnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9FeHBsYW5hdG9yeU5vdGUvQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2VcIjtcbmltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcbmltcG9ydCB7IFNlcnZlckNoYW5nZVNldCB9IGZyb20gXCIuL1R5cGVzL0NoYW5nZVNldC9TZXJ2ZXJDaGFuZ2VTZXRcIjtcbmltcG9ydCB7IFNlcnZlclRhc2ssIFZlcmlmeUFuZEZpeEZuc1JlcXVpcmVtZW50c1Rhc2tJbmZvIH0gZnJvbSBcIi4vVHlwZXMvVGFza3MvVGFza3NcIjtcbmltcG9ydCB7IEdldEJ5SW5uUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9Gb2N1cy9Gb2N1c1R5cGVzXCI7XG5pbXBvcnQgeyBBdHRhY2hJbmZvIH0gZnJvbSBcIi4vVHlwZXMvQXR0YWNobWVudHMvQXR0YWNtZW50c1wiO1xuaW1wb3J0IHsgRHJhZnRQcmVzZW50YXRpb25UeXBlIH0gZnJvbSBcIi4vVHlwZXMvUHJlc2VudGF0aW9ucy9EcmFmdFByZXNlbnRhdGlvblR5cGVcIjtcbmltcG9ydCB7IENvbnZlcnREcmFmdFJlcXVlc3QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29udmVydERyYWZ0UmVxdWVzdFwiO1xuaW1wb3J0IHsgUHJlc2VudGF0aW9uQ29udGVudCB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvUHJlc2VudGF0aW9uQ29udGVudFwiO1xuaW1wb3J0IHsgU2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvR2V0SW5uZXIvU2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBDb21iaW5lRnVmUmVzdWx0LCBGdWZDb21iaW5lTWV0aG9kIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbWJpbmVGdWZSZXN1bHRcIjtcbmltcG9ydCB7IEZlYXR1cmVGbGFnc1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRmVhdHVyZUZsYWdzL0ZlYXR1cmVGbGFnc1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBJRGlnZXN0QXBpQ2xpZW50IH0gZnJvbSBcIi4vRGlnZXN0QXBpQ2xpZW50L0lEaWdlc3RBcGlDbGllbnRcIjtcbmltcG9ydCB7IEZha2VEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi9EaWdlc3RBcGlDbGllbnQvRmFrZXMvRmFrZURpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgU2VydmVyRXJyb3JzIH0gZnJvbSBcIi4vQ2FuZHlBcGlDbGllbnRcIjtcbmltcG9ydCB7IEltcG9ydEVtcGxveWVlc1JlcXVlc3QgfSBmcm9tIFwiLi9UeXBlcy9TdGFmZi9JbXBvcnRFbXBsb3llZXNSZXF1ZXN0XCI7XG5pbXBvcnQgeyBNYXNzQWN0aW9uUGFyYW1ldGVycyB9IGZyb20gXCIuL1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmludC9QcmludFR5cGVcIjtcbmltcG9ydCB7IFByaW50UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9QcmludC9QcmludFJlc3BvbnNlXCI7XG5pbXBvcnQgeyBTZXJ2ZXJSYXdSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJhd1Jlc3BvbnNlXCI7XG5cbmV4cG9ydCBjbGFzcyBGYWtlQ2FuZHlBcGlDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlnZXN0Q2xpZW50ID0gbmV3IEZha2VEaWdlc3RBcGlDbGllbnQoKTtcblxuICAgIHB1YmxpYyBjcmVhdGVEaWdlc3RBcGlDbGllbnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSURpZ2VzdEFwaUNsaWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpZ2VzdENsaWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUGlja2xpc3QoZ0lkOiBzdHJpbmcsIGRhdGE6IFBpY2tsaXN0RGF0YUl0ZW1bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpZ2VzdENsaWVudC5jcmVhdGVQaWNrbGlzdChnSWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxHZnZzKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGVja0FsaXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQsIGJvZHk6IEJ1ZmZlcik6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT47XG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nIHwgdW5kZWZpbmVkLCBib2R5PzogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvckRyYWZ0KGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCk6IElDYW5keUFwaURyYWZ0Q2xpZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWtlQ2FuZHlBcGlEcmFmdENsaWVudCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEcmFmdEZyb21Ecml2ZShcbiAgICAgICAgbnM6IHN0cmluZyxcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVFbXB0eURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEluZm9CeUlubnMoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkLCBpbm5zOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8R2V0QnlJbm5SZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGZWF0dXJlRmxhZ3NXaXRob3V0UHJvbWlzZShmZWF0dXJlRmxhZ3M6IEZlYXR1cmVGbGFnc1Jlc3BvbnNlKTogRmVhdHVyZUZsYWdzUmVzcG9uc2Uge1xuICAgICAgICByZXR1cm4gZmVhdHVyZUZsYWdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGZWF0dXJlRmxhZ3MoKTogUHJvbWlzZTxGZWF0dXJlRmxhZ3NSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZTogRmVhdHVyZUZsYWdzUmVzcG9uc2UgPSB7IGNhbmR5VGVzdEZlYXR1cmU6IFwidHJ1ZVwiIH07XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZha2VDYW5keUFwaURyYWZ0Q2xpZW50IGltcGxlbWVudHMgSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgIHB1YmxpYyBkZWxldGVJbnN0YW5jZXMobXVsdGlwbGljaXR5UGF0aDogc3RyaW5nLCBpbnN0YW5jZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW1wb3J0RW1wbG95ZWVzKHJlcXVlc3Q6IEltcG9ydEVtcGxveWVlc1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5NYXNzQWN0aW9uKGFjdGlvbklkOiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBNYXNzQWN0aW9uUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjY2VwdFRyYW5zZmVyVHlwZShcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgdHJhbnNmZXJUeXBlOiBzdHJpbmcsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFNlcnZlckVycm9yUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYW5jZWxUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJEcmFmdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb252ZXJ0RHJhZnRGcm9tUHJldkdmdihyZXF1ZXN0OiBDb252ZXJ0RHJhZnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlT3JVcGRhdGVBdHRhY2htZW50cyhhdHRhY2htZW50czogcmVhZG9ubHkgQXR0YWNoSW5mb1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5xdWV1ZVRhc2sodGFza0lkOiBzdHJpbmcsIHRhc2tJbmZvOiBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbEF0dGFjaG1lbnRzKCk6IFByb21pc2U8QXR0YWNoSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxUYXNrcygpOiBQcm9taXNlPFNlcnZlclRhc2tbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXR0YWNobWVudEJ5SWQoYXR0YWNobWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEF0dGFjaEluZm8+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyhjaGVja1NjZW5hcmlvczogQ2hlY2tTY2VuYXJpb1R5cGVbXSk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXhwZXJ0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFeHBsYW5hdG9yeU5vdGUoKTogUHJvbWlzZTxDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludCh0eXBlOiBQcmludFR5cGUsIGJvZHk/OiBzdHJpbmdbXSk6IFByb21pc2U8UHJpbnRSZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTxGaWxlUHJvcGVydGllcyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nLCBnZnY6IHN0cmluZyk6IFByb21pc2U8RmlsZVByb3BlcnRpZXMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGxvYWRBbmRHZXRGaWxlUHJvcGVydGllcyhcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXSxcbiAgICAgICAgZ2Z2OiBzdHJpbmcsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFVwbG9hZEZpbGVQcm9wZXJ0aWVzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICBzZXJ2ZXJFcnJvcjogU2VydmVyRXJyb3JzLlVua25vd25FcnJvcixcbiAgICAgICAgICAgIHNvdXJjZXNUb3RhbENvdW50OiAwLFxuICAgICAgICAgICAgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRJbm5lcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkRm9ybXNDbGllbnRJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9FcnJvckxvZ1BkZihlcnJvckxvZ05hbWU6IHN0cmluZywgcHJvcHNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvSW5uZXJFZGl0b3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFJlcXVpc2l0ZXMocmVxdWlzaXRlTGlzdDogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldElubmVyKHBhdGhzOiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcnRpYWxJbm5lcihydWxlczogcmVhZG9ubHkgc3RyaW5nW10sIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXIpOiBQcm9taXNlPFNlcnZlcklubmVyUmVzcG9uc2U+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyQXNKc29uVHJlZShydWxlczogcmVhZG9ubHkgc3RyaW5nW10sIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXIpOiBQcm9taXNlPFNlcnZlckpzb25SZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSYXdQYXJ0aWFsSW5uZXJBc0pzb25UcmVlKFxuICAgICAgICBydWxlczogcmVhZG9ubHkgc3RyaW5nW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPFNlcnZlclJhd1Jlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRhc2tCeUlkKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTxTZXJ2ZXJUYXNrIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm9ybWFsaXplQnlSdWxlcyhydWxlczogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGF0Y2hQcmVzZW50YXRpb24odHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlLCBjb250ZW50OiBQcmVzZW50YXRpb25Db250ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlQXR0YWNobWVudHMoYXR0YWNobWVudElkczogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kQ2hhbmdlU2V0KGRhdGE6IFNlcnZlckNoYW5nZVNldCwgY3VycmVudERhdGFWZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPElTZW5kQ2hhbmdlU2V0UmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBkYXRhVmVyc2lvbjogMCB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VuZENoYW5nZVNldFN5bmMoZGF0YTogU2VydmVyQ2hhbmdlU2V0LCBjdXJyZW50RGF0YVZlcnNpb246IG51bWJlcik6IElTZW5kQ2hhbmdlU2V0UmVzdWx0IHtcbiAgICAgICAgcmV0dXJuIDIwMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RnVmQnlEcml2ZVVyaShkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2RcbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtdWx0aXBsZUNvbWJpbmVGdWZCeURyaXZlVXJpKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBGdWZDb21iaW5lTWV0aG9kXG4gICAgKTogUHJvbWlzZTxDb21iaW5lRnVmUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UHJlc2VudGF0aW9uKHR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSwgY29udGVudDogc3RyaW5nIHwgdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFsbENoZWNrYm94ZXNGb3IxMTMxMDMoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaEluc3RhbmNlc0J5VGV4dChcbiAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICBwYXRoUHJlZml4OiBzdHJpbmcsXG4gICAgICAgIHBhdGhzVG9TZWFyY2g6IHN0cmluZ1tdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3VzdG9tTm9ybWFsaXplKG5vcm1hbGl6ZXJJZDogc3RyaW5nLCBwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGF0YVZlcnNpb24oKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgwKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isServerRawResponseRootItem = void 0;
|
|
7
|
+
|
|
8
|
+
const isServerRawResponseRootItem = item => item["@"] != undefined;
|
|
9
|
+
|
|
10
|
+
exports.isServerRawResponseRootItem = isServerRawResponseRootItem;
|
|
11
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSYXdSZXNwb25zZS50cyJdLCJuYW1lcyI6WyJpc1NlcnZlclJhd1Jlc3BvbnNlUm9vdEl0ZW0iLCJpdGVtIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBZ0JPLE1BQU1BLDJCQUEyQixHQUNwQ0MsSUFEdUMsSUFFSEEsSUFBSSxDQUFDLEdBQUQsQ0FBSixJQUFhQyxTQUY5QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFBhdGhXaXRoSW5uZXJGaWVsZE5hbWUgPSBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nSW5uZXJWaWV3TW9kZWwge1xuICAgIFtwYXRoOiBQYXRoV2l0aElubmVyRmllbGROYW1lXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlclJhd1Jlc3BvbnNlUm9vdEl0ZW0ge1xuICAgIFwiQFwiOiBTdHJpbmdJbm5lclZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IHR5cGUgUGF0aFdpdGhNdWx0aXBsaWNpdHlJbnN0YW5jZU51bWJlciA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJSYXdSZXNwb25zZUl0ZW0ge1xuICAgIFtwYXRoOiBQYXRoV2l0aE11bHRpcGxpY2l0eUluc3RhbmNlTnVtYmVyXTogU3RyaW5nSW5uZXJWaWV3TW9kZWw7XG59XG5cbmV4cG9ydCBjb25zdCBpc1NlcnZlclJhd1Jlc3BvbnNlUm9vdEl0ZW0gPSAoXG4gICAgaXRlbTogU2VydmVyUmF3UmVzcG9uc2VSb290SXRlbSB8IFNlcnZlclJhd1Jlc3BvbnNlSXRlbVxuKTogaXRlbSBpcyBTZXJ2ZXJSYXdSZXNwb25zZVJvb3RJdGVtID0+IGl0ZW1bXCJAXCJdICE9IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgU2VydmVyUmF3UmVzcG9uc2UgPSBSZWFkb25seTxbU2VydmVyUmF3UmVzcG9uc2VSb290SXRlbSwgLi4uU2VydmVyUmF3UmVzcG9uc2VJdGVtW11dPjtcbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.PrintType = void 0;
|
|
7
|
+
let PrintType;
|
|
8
|
+
exports.PrintType = PrintType;
|
|
9
|
+
|
|
10
|
+
(function (PrintType) {
|
|
11
|
+
PrintType["NdflPerson"] = "NdflPerson";
|
|
12
|
+
PrintType["EfsPerson"] = "EfsPerson";
|
|
13
|
+
})(PrintType || (exports.PrintType = PrintType = {}));
|
|
14
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9QcmludC9QcmludFR5cGUudHMiXSwibmFtZXMiOlsiUHJpbnRUeXBlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7SUFBWUEsUzs7O1dBQUFBLFM7QUFBQUEsRUFBQUEsUztBQUFBQSxFQUFBQSxTO0dBQUFBLFMseUJBQUFBLFMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBQcmludFR5cGUge1xuICAgIE5kZmxQZXJzb24gPSBcIk5kZmxQZXJzb25cIixcbiAgICBFZnNQZXJzb24gPSBcIkVmc1BlcnNvblwiLFxufVxuIl19
|
|
@@ -259,7 +259,10 @@ class HttpClient {
|
|
|
259
259
|
request.withCredentials = true;
|
|
260
260
|
request.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
|
|
261
261
|
request.send(JSON.stringify(data));
|
|
262
|
-
return
|
|
262
|
+
return {
|
|
263
|
+
status: request.status,
|
|
264
|
+
json: () => JSON.parse(request.responseText)
|
|
265
|
+
};
|
|
263
266
|
}
|
|
264
267
|
|
|
265
268
|
makeParamValueString(param, value) {
|
|
@@ -363,4 +366,4 @@ class HttpError extends Error {
|
|
|
363
366
|
}
|
|
364
367
|
|
|
365
368
|
exports.HttpError = HttpError;
|
|
366
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9IdHRwQ2xpZW50L0h0dHBDbGllbnQudHMiXSwibmFtZXMiOlsidHJpbVRyYWlsaW5nU2xhc2giLCJ1cmwiLCJzbGljZSIsInRyaW1MZWFkaW5nU2xhc2giLCJIdHRwQ2xpZW50UmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsImZldGNoUmVzcG9uc2UiLCJzdGF0dXMiLCJqc29uIiwicmVzcG9uc2VEYXRhIiwiSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIiwiZXhlY3V0ZSIsImV4ZWN1dGVSZXF1ZXN0IiwiYWNjZXB0Q29kZXMiLCJxdWVyeVBhcmFtcyIsInNpZ25hbCIsImJvZHlGYWN0b3J5IiwiY29udGVudFR5cGUiLCJ0aGVuIiwiYXJncyIsInJlc3VsdFByb21pc2UiLCJyZXN1bHQiLCJjcmVhdGVDb25maWciLCJ3aXRoQWJvcnRTaWduYWwiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJib2R5IiwidW5kZWZpbmVkIiwid2l0aEpzb25Cb2R5Iiwic2VyaWFsaXphYmxlQm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ3aXRoUXVlcnlQYXJhbXMiLCJ3aXRoUmF3Qm9keSIsImFjY2VwdENvZGUiLCJjb2RlIiwicHVzaCIsImNyZWF0ZSIsImZuIiwiSHR0cENsaWVudCIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJhdXRoZW50aWNhdGlvblByb3ZpZGVyIiwiZGVmYXVsdFF1ZXJ5UGFyYW1zIiwiZGVmYXVsdFBhcmFtcyIsImdldCIsIm1ldGhvZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImRlbGV0ZSIsImNvbmZpZyIsImZldGNoVXJsIiwicmVxdWVzdCIsImFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicmVzcG9uc2UiLCJjaGVja1N0YXR1cyIsIm9wdGlvbnMiLCJoZWFkZXJzIiwicGF0aCIsInBhcmFtcyIsInJlc3VsdFBhcmFtcyIsImluY2x1ZGVzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIk5vdFN1cHBvcnRlZEVycm9yIiwiY3JlYXRlUXVlcnlTdHJpbmciLCJpc1N1Y2Nlc3NSZXNwb25zZVN0YXR1cyIsImlzQWNjZXB0Q29kZXNJbmNsdWRlc1Jlc3BvbnNlU3RhdHVzIiwiZXJyb3JUZXh0IiwidGV4dCIsInNlcnZlclJlc3BvbnNlIiwicGFyc2UiLCJlIiwiZXJyb3IiLCJIdHRwRXJyb3IiLCJNZXNzYWdlIiwibWVzc2FnZSIsIkVycm9yIiwicG9zdFN5bmMiLCJkYXRhIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwid2l0aENyZWRlbnRpYWxzIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJtYWtlUGFyYW1WYWx1ZVN0cmluZyIsInBhcmFtIiwidmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwYXJhbXMyIiwibWFwIiwia2V5IiwidG9TdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJpdGVtIiwiZmlsdGVyIiwieCIsImpvaW4iLCJjcmVhdGVGZXRjaEltcGwiLCJmZXRjaFdpdGhPcHRpb25zIiwiaW5wdXQiLCJpbml0IiwicmVxdWVzdEluaXQiLCJjYWNoZSIsImNyZWRlbnRpYWxzIiwiaW50ZWdyaXR5Iiwia2VlcGFsaXZlIiwibW9kZSIsInJlZGlyZWN0IiwicmVmZXJyZXIiLCJyZWZlcnJlclBvbGljeSIsInN0YXR1c0NvZGUiLCJuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBWUEsU0FBU0EsaUJBQVQsQ0FBMkJDLEdBQTNCLEVBQWdEO0FBQzVDLFNBQU9BLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLENBQUMsQ0FBWCxNQUFrQixHQUFsQixHQUF3QkQsR0FBRyxDQUFDQyxLQUFKLENBQVUsQ0FBVixFQUFhLENBQUMsQ0FBZCxDQUF4QixHQUEyQ0QsR0FBbEQ7QUFDSDs7QUFFRCxTQUFTRSxnQkFBVCxDQUEwQkYsR0FBMUIsRUFBK0M7QUFDM0MsU0FBT0EsR0FBRyxDQUFDLENBQUQsQ0FBSCxLQUFXLEdBQVgsR0FB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QyxXQUFPLE1BQU1BLE9BQU4sR0FBaUIsaUJBQWdCLEtBQUtvQyxVQUFXLEVBQXhEO0FBQ0g7O0FBWGdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIE5vdFN1cHBvcnRlZEVycm9yIH0gZnJvbSBcIi4uL0Vycm9yc1wiO1xuXG5pbXBvcnQgeyBGZXRjaCB9IGZyb20gXCIuL0ZldGNoSW1wbGVtZW50YXRpb24vRmV0Y2hcIjtcbmltcG9ydCB7XG4gICAgSHR0cFN0YXR1c0NvZGUsXG4gICAgSUh0dHBDbGllbnQsXG4gICAgSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlcixcbiAgICBJSHR0cENsaWVudFJlc3BvbnNlLFxuICAgIFF1ZXJ5UGFyYW1zT2JqZWN0LFxufSBmcm9tIFwiLi9JSHR0cENsaWVudFwiO1xuaW1wb3J0IHsgSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi9IdHRwQ2xpZW50QXV0aGVudGljYXRpb25Qcm92aWRlclwiO1xuXG5mdW5jdGlvbiB0cmltVHJhaWxpbmdTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5zbGljZSgtMSkgPT09IFwiL1wiID8gdXJsLnNsaWNlKDAsIC0xKSA6IHVybDtcbn1cblxuZnVuY3Rpb24gdHJpbUxlYWRpbmdTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybFswXSA9PT0gXCIvXCIgPyB1cmwuc2xpY2UoMSkgOiB1cmw7XG59XG5cbnR5cGUgQm9keUZhY3RvcnkgPSAoKSA9PiBCb2R5SW5pdCB8IG51bGw7XG5cbmludGVyZmFjZSBJSHR0cENsaWVudFJlcXVlc3RDb25maWcge1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAgIGJvZHlGYWN0b3J5PzogQm9keUZhY3Rvcnk7XG4gICAgYWNjZXB0Q29kZXM6IEh0dHBTdGF0dXNDb2RlW107XG4gICAgcXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zT2JqZWN0O1xuICAgIGNvbnRlbnRUeXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudFJlc3BvbnNlIGltcGxlbWVudHMgSUh0dHBDbGllbnRSZXNwb25zZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmZXRjaFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihmZXRjaFJlc3BvbnNlOiBSZXNwb25zZSkge1xuICAgICAgICB0aGlzLmZldGNoUmVzcG9uc2UgPSBmZXRjaFJlc3BvbnNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3RhdHVzKCk6IEh0dHBTdGF0dXNDb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hSZXNwb25zZS5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGpzb248VD4oKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2hSZXNwb25zZS5qc29uKCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhO1xuICAgIH1cbn1cblxudHlwZSBSZXF1ZXN0RXhlY3V0aW9uRnVuY3Rpb24gPSAoY29uZmlnOiBJSHR0cENsaWVudFJlcXVlc3RDb25maWcpID0+IFByb21pc2U8SHR0cENsaWVudFJlc3BvbnNlIHwgUmVzcG9uc2U+O1xuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIGltcGxlbWVudHMgSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRlUmVxdWVzdDogUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWNjZXB0Q29kZXM6IEh0dHBTdGF0dXNDb2RlW10gPSBbXTtcbiAgICBwcml2YXRlIHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdCA9IHt9O1xuICAgIHByaXZhdGUgc2lnbmFsOiB1bmRlZmluZWQgfCBBYm9ydFNpZ25hbDtcbiAgICBwcml2YXRlIGJvZHlGYWN0b3J5PzogQm9keUZhY3Rvcnk7XG4gICAgcHJpdmF0ZSBjb250ZW50VHlwZT86IHN0cmluZztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihleGVjdXRlOiBSZXF1ZXN0RXhlY3V0aW9uRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5leGVjdXRlUmVxdWVzdCA9IGV4ZWN1dGU7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBYm9ydFNpZ25hbChzaWduYWw6IHVuZGVmaW5lZCB8IEFib3J0U2lnbmFsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuc2lnbmFsID0gc2lnbmFsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEJvZHlGcm9tQnVmZmVyKGJvZHk6IGZhbHNlIHwgQnVmZmVyIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIGlmIChib2R5ID09PSBmYWxzZSB8fCBib2R5ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ib2R5RmFjdG9yeSA9ICgpID0+IGJvZHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSnNvbkJvZHkoc2VyaWFsaXphYmxlQm9keTogdW5rbm93biB8IHt9IHwgdW5rbm93bltdIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIGlmIChzZXJpYWxpemFibGVCb2R5ICE9PSBmYWxzZSAmJiBzZXJpYWxpemFibGVCb2R5ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5ib2R5RmFjdG9yeSA9ICgpID0+IEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6YWJsZUJvZHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zT2JqZWN0IHwgZmFsc2UgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgLi4ucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmF3Qm9keShib2R5OiBCdWZmZXIgfCBzdHJpbmcgfCBmYWxzZSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoYm9keSAhPT0gZmFsc2UgJiYgYm9keSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBib2R5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBqc29uPFQ+KCk6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzO1xuICAgICAgICByZXR1cm4gcmVzdWx0Lmpzb248VD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWNjZXB0Q29kZShjb2RlOiBIdHRwU3RhdHVzQ29kZSk6IHRoaXMge1xuICAgICAgICB0aGlzLmFjY2VwdENvZGVzLnB1c2goY29kZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkb25seSB0aGVuOiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZT5bXCJ0aGVuXCJdID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVSZXF1ZXN0KHRoaXMuY3JlYXRlQ29uZmlnKCkpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEh0dHBDbGllbnRSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSHR0cENsaWVudFJlc3BvbnNlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHJldHVybiByZXN1bHRQcm9taXNlLnRoZW4oLi4uYXJncyk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgY3JlYXRlQ29uZmlnKCk6IElIdHRwQ2xpZW50UmVxdWVzdENvbmZpZyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaWduYWw6IHRoaXMuc2lnbmFsLFxuICAgICAgICAgICAgYm9keUZhY3Rvcnk6IHRoaXMuYm9keUZhY3RvcnksXG4gICAgICAgICAgICBhY2NlcHRDb2RlczogdGhpcy5hY2NlcHRDb2RlcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHRoaXMuY29udGVudFR5cGUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUoZm46IFJlcXVlc3RFeGVjdXRpb25GdW5jdGlvbik6IEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiBuZXcgSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyKGZuKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIdHRwQ2xpZW50IGltcGxlbWVudHMgSUh0dHBDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmV0Y2hJbXBsOiBGZXRjaDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmw6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXI6IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFBhcmFtcz86IFF1ZXJ5UGFyYW1zT2JqZWN0ID0ge307XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGZldGNoSW1wbDogRmV0Y2gsXG4gICAgICAgIGJhc2VVcmw6IHVuZGVmaW5lZCB8IHN0cmluZyxcbiAgICAgICAgYXV0aGVudGljYXRpb25Qcm92aWRlcjogSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIsXG4gICAgICAgIGRlZmF1bHRRdWVyeVBhcmFtcz86IFF1ZXJ5UGFyYW1zT2JqZWN0XG4gICAgKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hJbXBsID0gZmV0Y2hJbXBsO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID09IHVuZGVmaW5lZCA/IGJhc2VVcmwgOiB0cmltVHJhaWxpbmdTbGFzaChiYXNlVXJsKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0UGFyYW1zID0gZGVmYXVsdFF1ZXJ5UGFyYW1zO1xuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgPSBhdXRoZW50aWNhdGlvblByb3ZpZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiR0VUXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBvc3QodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiUE9TVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwdXQodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiUFVUXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBhdGNoKHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBBVENIXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZSh1cmw6IHN0cmluZyk6IElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QoXCJERUxFVEVcIikodXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ldGhvZChtZXRob2Q6IFwiR0VUXCIgfCBcIlBPU1RcIiB8IFwiUFVUXCIgfCBcIlBBVENIXCIgfCBcIkRFTEVURVwiKTogKHVybDogc3RyaW5nKSA9PiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuICh1cmw6IHN0cmluZykgPT5cbiAgICAgICAgICAgIEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlci5jcmVhdGUoYXN5bmMgY29uZmlnID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZXRjaFVybCA9IHRoaXMudXJsKHVybCwgY29uZmlnLnF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdCA9IHRoaXMuYXBwZW5kRGVmYXVsdFJlcXVlc3RIZWFkZXJzKHsgbWV0aG9kOiBtZXRob2QgfSwgY29uZmlnLmNvbnRlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyKHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2lnbmFsID0gY29uZmlnLnNpZ25hbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5ib2R5RmFjdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kID09PSBcIkdFVFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJtZXRob2RcIiwgXCJCb2R5IGlzIG5vdCBhbGxvd2VkIGZvciBHRVQgcmVxdWVzdHNcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gY29uZmlnLmJvZHlGYWN0b3J5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaEltcGwoZmV0Y2hVcmwsIHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tTdGF0dXMocmVzcG9uc2UsIGNvbmZpZy5hY2NlcHRDb2Rlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmREZWZhdWx0UmVxdWVzdEhlYWRlcnMob3B0aW9uczogUmVxdWVzdEluaXQsIGNvbnRlbnRUeXBlPzogdW5kZWZpbmVkIHwgc3RyaW5nKTogUmVxdWVzdEluaXQge1xuICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgPz8ge307XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IGNvbnRlbnRUeXBlID8/IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJDYWNoZS1Db250cm9sXCJdID0gXCJuby1jYWNoZSwgbm8tc3RvcmVcIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiUHJhZ21hXCJdID0gXCJuby1jYWNoZVwiO1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJFeHBpcmVzXCJdID0gXCIwXCI7XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHVuZGVmaW5lZCB8IFF1ZXJ5UGFyYW1zT2JqZWN0KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHBhdGg7XG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmJhc2VVcmwgKyBcIi9cIiArIHRyaW1MZWFkaW5nU2xhc2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRQYXJhbXMgPSB7IC4uLnRoaXMuZGVmYXVsdFBhcmFtcywgLi4ucGFyYW1zIH07XG4gICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKFwiP1wiKSAmJiBwYXJhbXMgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKHJlc3VsdFBhcmFtcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEVycm9yKGBQYXNzaW5nIHNlYXJjaCBwYXJhbXMgaW4gdXJsIGFuZCB2aWEgcGFyYW1zIG9iamVjdCBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgdGhpcy5jcmVhdGVRdWVyeVN0cmluZyhyZXN1bHRQYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlLCBhY2NlcHRDb2Rlcz86IEh0dHBTdGF0dXNDb2RlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgaXNTdWNjZXNzUmVzcG9uc2VTdGF0dXMgPSByZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMDtcbiAgICAgICAgY29uc3QgaXNBY2NlcHRDb2Rlc0luY2x1ZGVzUmVzcG9uc2VTdGF0dXMgPSAoYWNjZXB0Q29kZXMgPz8gW10pLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIGlmICghaXNTdWNjZXNzUmVzcG9uc2VTdGF0dXMgJiYgIWlzQWNjZXB0Q29kZXNJbmNsdWRlc1Jlc3BvbnNlU3RhdHVzKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICBsZXQgc2VydmVyUmVzcG9uc2U7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlID0gSlNPTi5wYXJzZShlcnJvclRleHQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlcnZlclJlc3BvbnNlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChcImVycm9yXCIgaW4gc2VydmVyUmVzcG9uc2UgJiYgdHlwZW9mIHNlcnZlclJlc3BvbnNlLmVycm9yID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoc2VydmVyUmVzcG9uc2UuZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlLk1lc3NhZ2UgPz8gc2VydmVyUmVzcG9uc2UubWVzc2FnZSA/PyBzZXJ2ZXJSZXNwb25zZS5FcnJvcixcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JUZXh0LCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHBvc3RTeW5jKHVybDogc3RyaW5nLCBwYXJhbXM6IHVuZGVmaW5lZCB8IFF1ZXJ5UGFyYW1zT2JqZWN0LCBkYXRhOiB7fSk6IEh0dHBTdGF0dXNDb2RlIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICByZXF1ZXN0Lm9wZW4oXCJQT1NUXCIsIHRoaXMudXJsKHVybCwgcGFyYW1zKSwgZmFsc2UpO1xuICAgICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLThcIik7XG4gICAgICAgIHJlcXVlc3Quc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgIHJldHVybiByZXF1ZXN0LnN0YXR1cztcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ha2VQYXJhbVZhbHVlU3RyaW5nKHBhcmFtOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtKX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVRdWVyeVN0cmluZyhwYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChwYXJhbXMgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbXMyID0gcGFyYW1zO1xuICAgICAgICBsZXQgcmVzdWx0ID0gT2JqZWN0LmtleXMocGFyYW1zKVxuICAgICAgICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zMltrZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlUGFyYW1WYWx1ZVN0cmluZyhrZXksIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlUGFyYW1WYWx1ZVN0cmluZyhrZXksIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCBpdGVtLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4ICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiJlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHggPT4geCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAuam9pbihcIiZcIik7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCA/IFwiP1wiICsgcmVzdWx0IDogXCJcIjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRmV0Y2hJbXBsKCk6IEZldGNoIHtcbiAgICAgICAgY29uc3QgZmV0Y2hXaXRoT3B0aW9ucyA9IChpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ/OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZXRjaFVybCA9IHRoaXMudXJsKGlucHV0LCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGluaXQgPSBpbml0ID8/IHt9O1xuICAgICAgICAgICAgICAgIGluaXQuaGVhZGVycyA9IGluaXQuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgICAgICAgICBpbml0LmhlYWRlcnNbXCJDYWNoZS1Db250cm9sXCJdID0gXCJuby1jYWNoZSwgbm8tc3RvcmVcIjtcbiAgICAgICAgICAgICAgICBpbml0LmhlYWRlcnNbXCJQcmFnbWFcIl0gPSBcIm5vLWNhY2hlXCI7XG4gICAgICAgICAgICAgICAgaW5pdC5oZWFkZXJzW1wiRXhwaXJlc1wiXSA9IFwiMFwiO1xuICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXIoaW5pdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hJbXBsKGZldGNoVXJsLCBpbml0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSB0aGlzLnVybChpbnB1dC51cmwsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVlc3RJbml0OiBSZXF1ZXN0SW5pdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgW1wiQ2FjaGUtQ29udHJvbFwiXTogXCJuby1jYWNoZSwgbm8tc3RvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcIlByYWdtYVwiXTogXCJuby1jYWNoZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1wiRXhwaXJlc1wiXTogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pbnB1dC5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGlucHV0LnNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGU6IGlucHV0LmNhY2hlLFxuICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogaW5wdXQuY3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgICAgIGludGVncml0eTogaW5wdXQuaW50ZWdyaXR5LFxuICAgICAgICAgICAgICAgICAgICBrZWVwYWxpdmU6IGlucHV0LmtlZXBhbGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBpbnB1dC5tZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IGlucHV0Lm1vZGUsXG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBpbnB1dC5yZWRpcmVjdCxcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJyZXI6IGlucHV0LnJlZmVycmVyLFxuICAgICAgICAgICAgICAgICAgICByZWZlcnJlclBvbGljeTogaW5wdXQucmVmZXJyZXJQb2xpY3ksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0SW5pdCA9IHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlcihyZXF1ZXN0SW5pdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hJbXBsKGZldGNoVXJsLCByZXF1ZXN0SW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBmZXRjaFdpdGhPcHRpb25zO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzQ29kZTogbnVtYmVyO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzQ29kZTogbnVtYmVyKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkh0dHBFcnJvclwiO1xuICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3VwZXIubWVzc2FnZSArIGAuIFN0YXR1c0NvZGU6ICR7dGhpcy5zdGF0dXNDb2RlfWA7XG4gICAgfVxufVxuIl19
|
|
369
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9IdHRwQ2xpZW50L0h0dHBDbGllbnQudHMiXSwibmFtZXMiOlsidHJpbVRyYWlsaW5nU2xhc2giLCJ1cmwiLCJzbGljZSIsInRyaW1MZWFkaW5nU2xhc2giLCJIdHRwQ2xpZW50UmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsImZldGNoUmVzcG9uc2UiLCJzdGF0dXMiLCJqc29uIiwicmVzcG9uc2VEYXRhIiwiSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIiwiZXhlY3V0ZSIsImV4ZWN1dGVSZXF1ZXN0IiwiYWNjZXB0Q29kZXMiLCJxdWVyeVBhcmFtcyIsInNpZ25hbCIsImJvZHlGYWN0b3J5IiwiY29udGVudFR5cGUiLCJ0aGVuIiwiYXJncyIsInJlc3VsdFByb21pc2UiLCJyZXN1bHQiLCJjcmVhdGVDb25maWciLCJ3aXRoQWJvcnRTaWduYWwiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJib2R5IiwidW5kZWZpbmVkIiwid2l0aEpzb25Cb2R5Iiwic2VyaWFsaXphYmxlQm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ3aXRoUXVlcnlQYXJhbXMiLCJ3aXRoUmF3Qm9keSIsImFjY2VwdENvZGUiLCJjb2RlIiwicHVzaCIsImNyZWF0ZSIsImZuIiwiSHR0cENsaWVudCIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJhdXRoZW50aWNhdGlvblByb3ZpZGVyIiwiZGVmYXVsdFF1ZXJ5UGFyYW1zIiwiZGVmYXVsdFBhcmFtcyIsImdldCIsIm1ldGhvZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImRlbGV0ZSIsImNvbmZpZyIsImZldGNoVXJsIiwicmVxdWVzdCIsImFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicmVzcG9uc2UiLCJjaGVja1N0YXR1cyIsIm9wdGlvbnMiLCJoZWFkZXJzIiwicGF0aCIsInBhcmFtcyIsInJlc3VsdFBhcmFtcyIsImluY2x1ZGVzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIk5vdFN1cHBvcnRlZEVycm9yIiwiY3JlYXRlUXVlcnlTdHJpbmciLCJpc1N1Y2Nlc3NSZXNwb25zZVN0YXR1cyIsImlzQWNjZXB0Q29kZXNJbmNsdWRlc1Jlc3BvbnNlU3RhdHVzIiwiZXJyb3JUZXh0IiwidGV4dCIsInNlcnZlclJlc3BvbnNlIiwicGFyc2UiLCJlIiwiZXJyb3IiLCJIdHRwRXJyb3IiLCJNZXNzYWdlIiwibWVzc2FnZSIsIkVycm9yIiwicG9zdFN5bmMiLCJkYXRhIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwid2l0aENyZWRlbnRpYWxzIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJyZXNwb25zZVRleHQiLCJtYWtlUGFyYW1WYWx1ZVN0cmluZyIsInBhcmFtIiwidmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwYXJhbXMyIiwibWFwIiwia2V5IiwidG9TdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJpdGVtIiwiZmlsdGVyIiwieCIsImpvaW4iLCJjcmVhdGVGZXRjaEltcGwiLCJmZXRjaFdpdGhPcHRpb25zIiwiaW5wdXQiLCJpbml0IiwicmVxdWVzdEluaXQiLCJjYWNoZSIsImNyZWRlbnRpYWxzIiwiaW50ZWdyaXR5Iiwia2VlcGFsaXZlIiwibW9kZSIsInJlZGlyZWN0IiwicmVmZXJyZXIiLCJyZWZlcnJlclBvbGljeSIsInN0YXR1c0NvZGUiLCJuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBYUEsU0FBU0EsaUJBQVQsQ0FBMkJDLEdBQTNCLEVBQWdEO0FBQzVDLFNBQU9BLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLENBQUMsQ0FBWCxNQUFrQixHQUFsQixHQUF3QkQsR0FBRyxDQUFDQyxLQUFKLENBQVUsQ0FBVixFQUFhLENBQUMsQ0FBZCxDQUF4QixHQUEyQ0QsR0FBbEQ7QUFDSDs7QUFFRCxTQUFTRSxnQkFBVCxDQUEwQkYsR0FBMUIsRUFBK0M7QUFDM0MsU0FBT0EsR0FBRyxDQUFDLENBQUQsQ0FB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TXJDLE9BQU47QUFEb0QsU0FGeENxQyxVQUV3QztBQUVwRCxTQUFLQyxJQUFMLEdBQVksV0FBWjtBQUNBLFNBQUtELFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0g7O0FBRTBCLE1BQVByQyxPQUFPLEdBQVc7QUFDbEMsV0FBTyxNQUFNQSxPQUFOLEdBQWlCLGlCQUFnQixLQUFLcUMsVUFBVyxFQUF4RDtBQUNIOztBQVhnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBOb3RTdXBwb3J0ZWRFcnJvciB9IGZyb20gXCIuLi9FcnJvcnNcIjtcblxuaW1wb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi9GZXRjaEltcGxlbWVudGF0aW9uL0ZldGNoXCI7XG5pbXBvcnQge1xuICAgIEh0dHBTdGF0dXNDb2RlLFxuICAgIElIdHRwQ2xpZW50LFxuICAgIElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIsXG4gICAgSUh0dHBDbGllbnRSZXNwb25zZSxcbiAgICBJSHR0cENsaWVudFJlc3BvbnNlU3luYyxcbiAgICBRdWVyeVBhcmFtc09iamVjdCxcbn0gZnJvbSBcIi4vSUh0dHBDbGllbnRcIjtcbmltcG9ydCB7IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyIH0gZnJvbSBcIi4vSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJcIjtcblxuZnVuY3Rpb24gdHJpbVRyYWlsaW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmZ1bmN0aW9uIHRyaW1MZWFkaW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmxbMF0gPT09IFwiL1wiID8gdXJsLnNsaWNlKDEpIDogdXJsO1xufVxuXG50eXBlIEJvZHlGYWN0b3J5ID0gKCkgPT4gQm9keUluaXQgfCBudWxsO1xuXG5pbnRlcmZhY2UgSUh0dHBDbGllbnRSZXF1ZXN0Q29uZmlnIHtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgICBib2R5RmFjdG9yeT86IEJvZHlGYWN0b3J5O1xuICAgIGFjY2VwdENvZGVzOiBIdHRwU3RhdHVzQ29kZVtdO1xuICAgIHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdDtcbiAgICBjb250ZW50VHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSBpbXBsZW1lbnRzIElIdHRwQ2xpZW50UmVzcG9uc2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmV0Y2hSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZmV0Y2hSZXNwb25zZTogUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5mZXRjaFJlc3BvbnNlID0gZmV0Y2hSZXNwb25zZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN0YXR1cygpOiBIdHRwU3RhdHVzQ29kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoUmVzcG9uc2Uuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBqc29uPFQ+KCk6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmZldGNoUmVzcG9uc2UuanNvbigpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YTtcbiAgICB9XG59XG5cbnR5cGUgUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uID0gKGNvbmZpZzogSUh0dHBDbGllbnRSZXF1ZXN0Q29uZmlnKSA9PiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZSB8IFJlc3BvbnNlPjtcblxuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciBpbXBsZW1lbnRzIElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0ZVJlcXVlc3Q6IFJlcXVlc3RFeGVjdXRpb25GdW5jdGlvbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjY2VwdENvZGVzOiBIdHRwU3RhdHVzQ29kZVtdID0gW107XG4gICAgcHJpdmF0ZSBxdWVyeVBhcmFtczogUXVlcnlQYXJhbXNPYmplY3QgPSB7fTtcbiAgICBwcml2YXRlIHNpZ25hbDogdW5kZWZpbmVkIHwgQWJvcnRTaWduYWw7XG4gICAgcHJpdmF0ZSBib2R5RmFjdG9yeT86IEJvZHlGYWN0b3J5O1xuICAgIHByaXZhdGUgY29udGVudFR5cGU/OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZXhlY3V0ZTogUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZVJlcXVlc3QgPSBleGVjdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWJvcnRTaWduYWwoc2lnbmFsOiB1bmRlZmluZWQgfCBBYm9ydFNpZ25hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLnNpZ25hbCA9IHNpZ25hbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb250ZW50VHlwZShjb250ZW50VHlwZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhCb2R5RnJvbUJ1ZmZlcihib2R5OiBmYWxzZSB8IEJ1ZmZlciB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoYm9keSA9PT0gZmFsc2UgfHwgYm9keSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBib2R5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEpzb25Cb2R5KHNlcmlhbGl6YWJsZUJvZHk6IHVua25vd24gfCB7fSB8IHVua25vd25bXSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoc2VyaWFsaXphYmxlQm9keSAhPT0gZmFsc2UgJiYgc2VyaWFsaXphYmxlQm9keSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBKU09OLnN0cmluZ2lmeShzZXJpYWxpemFibGVCb2R5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdCB8IGZhbHNlIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIGlmIChxdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJhd0JvZHkoYm9keTogQnVmZmVyIHwgc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICAgICAgaWYgKGJvZHkgIT09IGZhbHNlICYmIGJvZHkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHlGYWN0b3J5ID0gKCkgPT4gYm9keTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMganNvbjxUPigpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcztcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5qc29uPFQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjY2VwdENvZGUoY29kZTogSHR0cFN0YXR1c0NvZGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5hY2NlcHRDb2Rlcy5wdXNoKGNvZGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgdGhlbjogUHJvbWlzZTxIdHRwQ2xpZW50UmVzcG9uc2U+W1widGhlblwiXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdCh0aGlzLmNyZWF0ZUNvbmZpZygpKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBIdHRwQ2xpZW50UmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEh0dHBDbGllbnRSZXNwb25zZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0UHJvbWlzZS50aGVuKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbmZpZygpOiBJSHR0cENsaWVudFJlcXVlc3RDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2lnbmFsOiB0aGlzLnNpZ25hbCxcbiAgICAgICAgICAgIGJvZHlGYWN0b3J5OiB0aGlzLmJvZHlGYWN0b3J5LFxuICAgICAgICAgICAgYWNjZXB0Q29kZXM6IHRoaXMuYWNjZXB0Q29kZXMsXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB0aGlzLmNvbnRlbnRUeXBlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlKGZuOiBSZXF1ZXN0RXhlY3V0aW9uRnVuY3Rpb24pOiBIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gbmV3IEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlcihmbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudCBpbXBsZW1lbnRzIElIdHRwQ2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZldGNoSW1wbDogRmV0Y2g7XG4gICAgcHJpdmF0ZSByZWFkb25seSBiYXNlVXJsOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoZW50aWNhdGlvblByb3ZpZGVyOiBIdHRwQ2xpZW50QXV0aGVudGljYXRpb25Qcm92aWRlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdCA9IHt9O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBmZXRjaEltcGw6IEZldGNoLFxuICAgICAgICBiYXNlVXJsOiB1bmRlZmluZWQgfCBzdHJpbmcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uUHJvdmlkZXI6IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyLFxuICAgICAgICBkZWZhdWx0UXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdFxuICAgICkge1xuICAgICAgICB0aGlzLmZldGNoSW1wbCA9IGZldGNoSW1wbDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA9PSB1bmRlZmluZWQgPyBiYXNlVXJsIDogdHJpbVRyYWlsaW5nU2xhc2goYmFzZVVybCk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFBhcmFtcyA9IGRlZmF1bHRRdWVyeVBhcmFtcztcbiAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyID0gYXV0aGVudGljYXRpb25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIkdFVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb3N0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBPU1RcIikodXJsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHV0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBVVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXRjaCh1cmw6IHN0cmluZyk6IElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QoXCJQQVRDSFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiREVMRVRFXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZXRob2QobWV0aG9kOiBcIkdFVFwiIHwgXCJQT1NUXCIgfCBcIlBVVFwiIHwgXCJQQVRDSFwiIHwgXCJERUxFVEVcIik6ICh1cmw6IHN0cmluZykgPT4gSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiAodXJsOiBzdHJpbmcpID0+XG4gICAgICAgICAgICBIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIuY3JlYXRlKGFzeW5jIGNvbmZpZyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSB0aGlzLnVybCh1cmwsIGNvbmZpZy5xdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyh7IG1ldGhvZDogbWV0aG9kIH0sIGNvbmZpZy5jb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdCA9IHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlcihyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNpZ25hbCA9IGNvbmZpZy5zaWduYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuYm9keUZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibWV0aG9kXCIsIFwiQm9keSBpcyBub3QgYWxsb3dlZCBmb3IgR0VUIHJlcXVlc3RzXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IGNvbmZpZy5ib2R5RmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hJbXBsKGZldGNoVXJsLCByZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrU3RhdHVzKHJlc3BvbnNlLCBjb25maWcuYWNjZXB0Q29kZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kRGVmYXVsdFJlcXVlc3RIZWFkZXJzKG9wdGlvbnM6IFJlcXVlc3RJbml0LCBjb250ZW50VHlwZT86IHVuZGVmaW5lZCB8IHN0cmluZyk6IFJlcXVlc3RJbml0IHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBjb250ZW50VHlwZSA/PyBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IFwibm8tY2FjaGUsIG5vLXN0b3JlXCI7XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1tcIlByYWdtYVwiXSA9IFwibm8tY2FjaGVcIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiRXhwaXJlc1wiXSA9IFwiMFwiO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB1bmRlZmluZWQgfCBRdWVyeVBhcmFtc09iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSBwYXRoO1xuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5iYXNlVXJsICsgXCIvXCIgKyB0cmltTGVhZGluZ1NsYXNoKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0UGFyYW1zID0geyAuLi50aGlzLmRlZmF1bHRQYXJhbXMsIC4uLnBhcmFtcyB9O1xuICAgICAgICBpZiAocGF0aC5pbmNsdWRlcyhcIj9cIikgJiYgcGFyYW1zICE9IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhyZXN1bHRQYXJhbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcihgUGFzc2luZyBzZWFyY2ggcGFyYW1zIGluIHVybCBhbmQgdmlhIHBhcmFtcyBvYmplY3QgaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHRoaXMuY3JlYXRlUXVlcnlTdHJpbmcocmVzdWx0UGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSwgYWNjZXB0Q29kZXM/OiBIdHRwU3RhdHVzQ29kZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGlzU3VjY2Vzc1Jlc3BvbnNlU3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDA7XG4gICAgICAgIGNvbnN0IGlzQWNjZXB0Q29kZXNJbmNsdWRlc1Jlc3BvbnNlU3RhdHVzID0gKGFjY2VwdENvZGVzID8/IFtdKS5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICBpZiAoIWlzU3VjY2Vzc1Jlc3BvbnNlU3RhdHVzICYmICFpc0FjY2VwdENvZGVzSW5jbHVkZXNSZXNwb25zZVN0YXR1cykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgICAgbGV0IHNlcnZlclJlc3BvbnNlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZSA9IEpTT04ucGFyc2UoZXJyb3JUZXh0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZXJ2ZXJSZXNwb25zZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXCJlcnJvclwiIGluIHNlcnZlclJlc3BvbnNlICYmIHR5cGVvZiBzZXJ2ZXJSZXNwb25zZS5lcnJvciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHNlcnZlclJlc3BvbnNlLmVycm9yKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZS5NZXNzYWdlID8/IHNlcnZlclJlc3BvbnNlLm1lc3NhZ2UgPz8gc2VydmVyUmVzcG9uc2UuRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKGVycm9yVGV4dCwgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwb3N0U3luYyh1cmw6IHN0cmluZywgcGFyYW1zOiB1bmRlZmluZWQgfCBRdWVyeVBhcmFtc09iamVjdCwgZGF0YToge30pOiBJSHR0cENsaWVudFJlc3BvbnNlU3luYyB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgcmVxdWVzdC5vcGVuKFwiUE9TVFwiLCB0aGlzLnVybCh1cmwsIHBhcmFtcyksIGZhbHNlKTtcbiAgICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04XCIpO1xuICAgICAgICByZXF1ZXN0LnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgICAgIGpzb246IDxUPigpID0+IEpTT04ucGFyc2UocmVxdWVzdC5yZXNwb25zZVRleHQpIGFzIFQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlUGFyYW1WYWx1ZVN0cmluZyhwYXJhbTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUXVlcnlTdHJpbmcocGFyYW1zPzogUXVlcnlQYXJhbXNPYmplY3QpOiBzdHJpbmcge1xuICAgICAgICBpZiAocGFyYW1zID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zMiA9IHBhcmFtcztcbiAgICAgICAgbGV0IHJlc3VsdCA9IE9iamVjdC5rZXlzKHBhcmFtcylcbiAgICAgICAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtczJba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VQYXJhbVZhbHVlU3RyaW5nKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VQYXJhbVZhbHVlU3RyaW5nKGtleSwgaXRlbS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHggPT4geCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbihcIiZcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcih4ID0+IHggIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgPyBcIj9cIiArIHJlc3VsdCA6IFwiXCI7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZldGNoSW1wbCgpOiBGZXRjaCB7XG4gICAgICAgIGNvbnN0IGZldGNoV2l0aE9wdGlvbnMgPSAoaW5wdXQ6IFJlcXVlc3RJbmZvLCBpbml0PzogUmVxdWVzdEluaXQpOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSB0aGlzLnVybChpbnB1dCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBpbml0ID0gaW5pdCA/PyB7fTtcbiAgICAgICAgICAgICAgICBpbml0LmhlYWRlcnMgPSBpbml0LmhlYWRlcnMgPz8ge307XG4gICAgICAgICAgICAgICAgaW5pdC5oZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IFwibm8tY2FjaGUsIG5vLXN0b3JlXCI7XG4gICAgICAgICAgICAgICAgaW5pdC5oZWFkZXJzW1wiUHJhZ21hXCJdID0gXCJuby1jYWNoZVwiO1xuICAgICAgICAgICAgICAgIGluaXQuaGVhZGVyc1tcIkV4cGlyZXNcIl0gPSBcIjBcIjtcbiAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyKGluaXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoSW1wbChmZXRjaFVybCwgaW5pdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZldGNoVXJsID0gdGhpcy51cmwoaW5wdXQudXJsLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0SW5pdDogUmVxdWVzdEluaXQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcIkNhY2hlLUNvbnRyb2xcIl06IFwibm8tY2FjaGUsIG5vLXN0b3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBbXCJQcmFnbWFcIl06IFwibm8tY2FjaGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcIkV4cGlyZXNcIl06IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaW5wdXQuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBpbnB1dC5zaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlOiBpbnB1dC5jYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IGlucHV0LmNyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IGlucHV0LmludGVncml0eSxcbiAgICAgICAgICAgICAgICAgICAga2VlcGFsaXZlOiBpbnB1dC5rZWVwYWxpdmUsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogaW5wdXQubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBpbnB1dC5tb2RlLFxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogaW5wdXQucmVkaXJlY3QsXG4gICAgICAgICAgICAgICAgICAgIHJlZmVycmVyOiBpbnB1dC5yZWZlcnJlcixcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJyZXJQb2xpY3k6IGlucHV0LnJlZmVycmVyUG9saWN5LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxdWVzdEluaXQgPSB0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXIocmVxdWVzdEluaXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoSW1wbChmZXRjaFVybCwgcmVxdWVzdEluaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZmV0Y2hXaXRoT3B0aW9ucztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIdHRwRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0NvZGU6IG51bWJlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1c0NvZGU6IG51bWJlcikge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJIdHRwRXJyb3JcIjtcbiAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IG1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLm1lc3NhZ2UgKyBgLiBTdGF0dXNDb2RlOiAke3RoaXMuc3RhdHVzQ29kZX1gO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -328,9 +328,34 @@ class IterUtils {
|
|
|
328
328
|
return Iterator.from(items).reduce((acc, item) => reducer(acc, item, index++), initialValue);
|
|
329
329
|
}
|
|
330
330
|
|
|
331
|
+
static *batch(items, batchSize) {
|
|
332
|
+
const iterator = Iterator.from(items);
|
|
333
|
+
const safeBatchSize = batchSize > 0 ? batchSize : 1;
|
|
334
|
+
let done = false;
|
|
335
|
+
|
|
336
|
+
while (!done) {
|
|
337
|
+
const batch = [];
|
|
338
|
+
|
|
339
|
+
while (batch.length < safeBatchSize) {
|
|
340
|
+
const current = iterator.next();
|
|
341
|
+
|
|
342
|
+
if (current.done) {
|
|
343
|
+
done = true;
|
|
344
|
+
break;
|
|
345
|
+
} else {
|
|
346
|
+
batch.push(current.value);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
if (batch.length > 0) {
|
|
351
|
+
yield batch;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
331
356
|
}
|
|
332
357
|
|
|
333
358
|
exports.IterUtils = IterUtils;
|
|
334
359
|
IterUtils.count = count;
|
|
335
360
|
IterUtils.concat = concat;
|
|
336
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JdGVyYWJsZVV0aWxzLnRzIl0sIm5hbWVzIjpbInJldmVyc2VBcnJheSIsImFycmF5IiwiaSIsImxlbmd0aCIsInRvQXN5bmNJdGVyYXRvciIsImdlbmVyYXRvciIsIkFzeW5jSXRlcmF0b3IiLCJmcm9tIiwiZmluZExhc3QiLCJpdGVtcyIsImNvbmRpdGlvbiIsInJlc3VsdCIsIml0ZW0iLCJjb25jYXQiLCJpdGVyYWJsZXMiLCJpdGVyYWJsZUl0ZW0iLCJpdGVyYXRlVmFsdWVzIiwib2JqIiwia2V5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaXRlcmF0ZUtleXMiLCJpdGVyYXRlRW50cmllcyIsImNvdW50IiwiX2l0ZW0iLCJFbXB0eVNpbmdsZUVsZW1lbnQiLCJTeW1ib2wiLCJmb3IiLCJOb1ZhbHVlTWFya2VyIiwiSXRlclV0aWxzIiwiaXNFbXB0eSIsIml0ZXJhYmxlIiwiZ3JvdXBCeSIsInNlbGVjdEtleSIsIk1hcCIsImtleUxpc3QiLCJnZXQiLCJ1bmRlZmluZWQiLCJzZXQiLCJwdXNoIiwic29ydEJ5Iiwic2VsZWN0b3IiLCJzb3J0IiwiYUl0ZW0iLCJiSXRlbSIsImxlZnRWYWx1ZSIsInJpZ2h0VmFsdWUiLCJsYXN0IiwiQXJyYXkiLCJpc0FycmF5IiwibGFzdEl0ZW0iLCJmaXJzdCIsImZpcnN0SXRlbSIsInNpbmdsZSIsInNpbmdsZUFzc2VydE1lc3NhZ2UiLCJFcnJvciIsInNpbmdsZUVsZW1lbnQiLCJpbmRleCIsInNraXBMYXN0Iiwic2tpcENvdW50IiwicHJldkl0ZW1zIiwiZmlsbCIsInJlc3VsdEl0ZW0iLCJjdXJyZW50SW5kZXgiLCJtaW5CeSIsImNvbXBhcmVGdW5jIiwibWluVmFsdWUiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1pbkJ5T3JVbmRlZmluZWQiLCJyYW5nZSIsImluU3RhcnRPckNvdW50IiwiaW5JdGVtQ291bnQiLCJzdGFydCIsIml0ZW1Db3VudCIsImludGVyc3BlcnNlIiwiaW50ZXJzcGVyc2VGbiIsImZsYXRNYXAiLCJ4IiwiemlwIiwiaXRlcmF0b3JzIiwibWFwIiwiaXQiLCJJdGVyYXRvciIsImhhc1VuZG9uZUl0ZXJhdG9ycyIsInJlc3VsdEVudHJ5IiwiaXRlcmF0b3IiLCJyZXN1bHRWYWx1ZSIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJkaXN0aW5jdEJ5IiwiaWRTZWxlY3RvciIsIlNldCIsImlkIiwiaGFzIiwiYWRkIiwicmVkdWNlIiwicmVkdWNlciIsImluaXRpYWxWYWx1ZSIsImFjYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUE7O0FBRU8sVUFBVUEsWUFBVixDQUEwQkMsS0FBMUIsRUFBb0U7QUFDdkUsT0FBSyxJQUFJQyxDQUFDLEdBQUdELEtBQUssQ0FBQ0UsTUFBTixHQUFlLENBQTVCLEVBQStCRCxDQUFDLElBQUksQ0FBcEMsRUFBdUNBLENBQUMsRUFBeEMsRUFBNEM7QUFDeEM7QUFDQSxVQUFNRCxLQUFLLENBQUNDLENBQUQsQ0FBWDtBQUNIO0FBQ0o7O0FBRU0sU0FBU0UsZUFBVCxDQUE0QkMsU0FBNUIsRUFBMEY7QUFDN0YsU0FBT0MsYUFBYSxDQUFDQyxJQUFkLENBQW1CRixTQUFTLEVBQTVCLENBQVA7QUFDSDs7QUFFTSxTQUFTRyxRQUFULENBQXFCQyxLQUFyQixFQUF5Q0MsU0FBekMsRUFBeUY7QUFDNUYsTUFBSUMsTUFBSjs7QUFDQSxPQUFLLE1BQU1DLElBQVgsSUFBbUJILEtBQW5CLEVBQTBCO0FBQ3RCLFFBQUlDLFNBQVMsQ0FBQ0UsSUFBRCxDQUFiLEVBQXFCO0FBQ2pCRCxNQUFBQSxNQUFNLEdBQUdDLElBQVQ7QUFDSDtBQUNKOztBQUNELFNBQU9ELE1BQVA7QUFDSDs7QUFFTSxVQUFVRSxNQUFWLENBQW9CLEdBQUdDLFNBQXZCLEVBQTJFO0FBQzlFLE9BQUssTUFBTUMsWUFBWCxJQUEyQkQsU0FBM0IsRUFBc0M7QUFDbEMsV0FBT0MsWUFBUDtBQUNIO0FBQ0o7O0FBRU0s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RixJQUFYLElBQW1CSCxLQUFuQixFQUEwQjtBQUN0QixZQUFNc0YsRUFBRSxHQUFHRixVQUFVLENBQUNqRixJQUFELENBQXJCOztBQUNBLFVBQUksQ0FBQzRCLEdBQUcsQ0FBQ3dELEdBQUosQ0FBUUQsRUFBUixDQUFMLEVBQWtCO0FBQ2R2RCxRQUFBQSxHQUFHLENBQUN5RCxHQUFKLENBQVFGLEVBQVI7QUFDQSxjQUFNbkYsSUFBTjtBQUNIO0FBQ0o7QUFDSjs7QUFFbUIsU0FBTnNGLE1BQU0sQ0FDaEJ6RixLQURnQixFQUVoQjBGLE9BRmdCLEVBR2hCQyxZQUhnQixFQUlmO0FBQ0QsUUFBSXpDLEtBQUssR0FBRyxDQUFaO0FBQ0EsV0FBT3lCLFFBQVEsQ0FBQzdFLElBQVQsQ0FBY0UsS0FBZCxFQUFxQnlGLE1BQXJCLENBQTRCLENBQUNHLEdBQUQsRUFBTXpGLElBQU4sS0FBZXVGLE9BQU8sQ0FBQ0UsR0FBRCxFQUFNekYsSUFBTixFQUFZK0MsS0FBSyxFQUFqQixDQUFsRCxFQUF3RXlDLFlBQXhFLENBQVA7QUFDSDs7QUFsT2tCOzs7QUFBVnJFLFMsQ0FDS04sSyxHQUFRQSxLO0FBRGJNLFMsQ0FFS2xCLE0sR0FBU0EsTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1pbkxlbmd0aEFycmF5LCByZWplY3QgfSBmcm9tIFwiLi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgQ29tcGFyZUZ1bmMgfSBmcm9tIFwiLi9Db21wYXJlcnNcIjtcbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gZnJvbSBcIi4vRXJyb3JzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiogcmV2ZXJzZUFycmF5PFQ+KGFycmF5OiByZWFkb25seSBUW10pOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcbiAgICBmb3IgKGxldCBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgeWllbGQgYXJyYXlbaV0hO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQXN5bmNJdGVyYXRvcjxUPihnZW5lcmF0b3I6ICgpID0+IEFzeW5jR2VuZXJhdG9yPFQ+KTogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcbiAgICByZXR1cm4gQXN5bmNJdGVyYXRvci5mcm9tKGdlbmVyYXRvcigpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMYXN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiwgY29uZGl0aW9uOiAoaXRlbTogVCkgPT4gYm9vbGVhbik6IFQgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXN1bHQ6IFQgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgIGlmIChjb25kaXRpb24oaXRlbSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGl0ZW07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBjb25jYXQ8VD4oLi4uaXRlcmFibGVzOiBBcnJheTxJdGVyYWJsZTxUPj4pOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcbiAgICBmb3IgKGNvbnN0IGl0ZXJhYmxlSXRlbSBvZiBpdGVyYWJsZXMpIHtcbiAgICAgICAgeWllbGQqIGl0ZXJhYmxlSXRlbTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlcmF0ZVZhbHVlczxUSyBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCB8IG51bWJlciwgVFY+KG9iajogeyBba2V5IGluIFRLXTogVFYgfSk6IEl0ZXJhYmxlPFRWPiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICB5aWVsZCBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVLZXlzPFRPPihvYmo6IFJlYWRvbmx5PFRPPik6IEl0ZXJhYmxlPEV4dHJhY3Q8a2V5b2YgVE8sIHN0cmluZz4+O1xuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVLZXlzPFRWPihvYmo6IFJlYWRvbmx5PHsgW2tleTogc3RyaW5nXTogVFYgfT4pOiBJdGVyYWJsZTxzdHJpbmc+O1xuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVLZXlzKG9iajogUmVhZG9ubHk8e30+KTogSXRlcmFibGU8c3RyaW5nPjtcbmV4cG9ydCBmdW5jdGlvbiogaXRlcmF0ZUtleXM8VEsgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgfCBudW1iZXI+KG9iajogeyBba2V5IGluIFRLXTogdW5rbm93biB9KTogSXRlcmFibGU8VEs+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIHlpZWxkIGtleTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVFbnRyaWVzPFRPPihvYmo6IFJlYWRvbmx5PFRPPik6IEl0ZXJhYmxlPFtFeHRyYWN0PGtleW9mIFRPLCBzdHJpbmc+LCBUT1trZXlvZiBUT11dPjtcbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlRW50cmllczxUVj4ob2JqOiBSZWFkb25seTx7IFtrZXk6IHN0cmluZ106IFRWIH0+KTogSXRlcmFibGU8W3N0cmluZywgVFZdPjtcbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlRW50cmllcyhvYmo6IFJlYWRvbmx5PHt9Pik6IEl0ZXJhYmxlPFtzdHJpbmcsIHVua25vd25dPjtcbmV4cG9ydCBmdW5jdGlvbiogaXRlcmF0ZUVudHJpZXM8VFY+KG9iajogUmVhZG9ubHk8eyBba2V5OiBzdHJpbmddOiBUViB9Pik6IEl0ZXJhYmxlPFtzdHJpbmcsIFRWXT4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIHlpZWxkIFtrZXksIG9ialtrZXldIV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3VudDxUPihpdGVtczogSXRlcmFibGU8VD4pOiBudW1iZXIge1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGZvciAoY29uc3QgX2l0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgcmVzdWx0Kys7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IEVtcHR5U2luZ2xlRWxlbWVudCA9IFN5bWJvbC5mb3IoXCJFbXB0eVNpbmdsZUVsZW1lbnRcIik7XG5jb25zdCBOb1ZhbHVlTWFya2VyID0gU3ltYm9sLmZvcihcIk5vVmFsdWVNYXJrZXJcIik7XG5cbmV4cG9ydCBjbGFzcyBJdGVyVXRpbHMge1xuICAgIHB1YmxpYyBzdGF0aWMgY291bnQgPSBjb3VudDtcbiAgICBwdWJsaWMgc3RhdGljIGNvbmNhdCA9IGNvbmNhdDtcblxuICAgIHB1YmxpYyBzdGF0aWMgaXNFbXB0eTxUPihpdGVyYWJsZTogSXRlcmFibGU8VD4pOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChjb25zdCBfaXRlbSBvZiBpdGVyYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ3JvdXBCeTxULCBUS2V5PihpdGVyYWJsZTogSXRlcmFibGU8VD4sIHNlbGVjdEtleTogKGl0ZW06IFQpID0+IFRLZXkpOiBNYXA8VEtleSwgVFtdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8VEtleSwgVFtdPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNlbGVjdEtleShpdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGtleUxpc3QgPSByZXN1bHQuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoa2V5TGlzdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGtleSwgW2l0ZW1dKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAga2V5TGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzb3J0Qnk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSwgc2VsZWN0b3I6IChpdGVtOiBUKSA9PiBzdHJpbmcpOiBUW10ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uaXRlbXNdO1xuICAgICAgICByZXN1bHQuc29ydCgoYUl0ZW0sIGJJdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0VmFsdWUgPSBzZWxlY3RvcihhSXRlbSk7XG4gICAgICAgICAgICBjb25zdCByaWdodFZhbHVlID0gc2VsZWN0b3IoYkl0ZW0pO1xuICAgICAgICAgICAgaWYgKGxlZnRWYWx1ZSA9PT0gcmlnaHRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0VmFsdWUgPCByaWdodFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBsYXN0PFQ+KGl0ZW1zOiBNaW5MZW5ndGhBcnJheTxULCAxPik6IFQ7XG4gICAgcHVibGljIHN0YXRpYyBsYXN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiB8IHJlYWRvbmx5IFRbXSk6IHVuZGVmaW5lZCB8IFQ7XG4gICAgcHVibGljIHN0YXRpYyBsYXN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiB8IHJlYWRvbmx5IFRbXSk6IHVuZGVmaW5lZCB8IFQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGFzdEl0ZW06IFQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgbGFzdEl0ZW0gPSBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYXN0SXRlbTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZpcnN0PFQ+KGl0ZW1zOiBbVCwgLi4udW5rbm93bltdXSk6IFQ7XG4gICAgcHVibGljIHN0YXRpYyBmaXJzdDxUPihpdGVtczogTWluTGVuZ3RoQXJyYXk8VCwgMT4pOiBUO1xuICAgIHB1YmxpYyBzdGF0aWMgZmlyc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVDtcbiAgICBwdWJsaWMgc3RhdGljIGZpcnN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiB8IHJlYWRvbmx5IFRbXSk6IHVuZGVmaW5lZCB8IFQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtc1swXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmlyc3RJdGVtOiBUIHwgdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGZpcnN0SXRlbSA9IGl0ZW07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RJdGVtO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2luZ2xlPFQ+KGl0ZW1zOiByZWFkb25seSBUW10gfCBJdGVyYWJsZTxUPiwgc2luZ2xlQXNzZXJ0TWVzc2FnZT86IHN0cmluZyk6IFQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFzc2VydE1lc3NhZ2UgPz8gYFNlcXVlbmNlIG11c3QgY29udGFpbiBleGFjdGx5IHNpbmdsZSBlbGVtZW50LCBidXQgZ290ICR7aXRlbXMubGVuZ3RofWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zWzBdID8/IHJlamVjdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHNpbmdsZUVsZW1lbnQ6IFQgfCB0eXBlb2YgRW1wdHlTaW5nbGVFbGVtZW50ID0gRW1wdHlTaW5nbGVFbGVtZW50O1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNpbmdsZUVsZW1lbnQgIT09IEVtcHR5U2luZ2xlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVBc3NlcnRNZXNzYWdlID8/IGBTZXF1ZW5jZSBtdXN0IGNvbnRhaW4gZXhhY3RseSBzaW5nbGUgZWxlbWVudCwgYnV0IGdvdCBhdCBsZWFzdCAyYFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzaW5nbGVFbGVtZW50ID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaW5nbGVFbGVtZW50ID09PSBFbXB0eVNpbmdsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc2luZ2xlQXNzZXJ0TWVzc2FnZSA/PyBcIlNlcXVlbmNlIG11c3QgY29udGFpbiBleGFjdGx5IHNpbmdsZSBlbGVtZW50LCBidXQgZ290IDBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2luZ2xlRWxlbWVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgKml0ZXJhdGVFbnRyaWVzPFQ+KGl0ZW1zOiByZWFkb25seSBUW10gfCBUW10gfCBJdGVyYWJsZTxUPik6IEl0ZXJhYmxlPFtudW1iZXIsIFRdPiB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgeWllbGQgW2luZGV4LCBpdGVtXTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljICpza2lwTGFzdDxUPihpdGVtczogSXRlcmFibGU8VD4sIHNraXBDb3VudDogbnVtYmVyKTogSXRlcmFibGU8VD4ge1xuICAgICAgICBpZiAoc2tpcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICB5aWVsZCogaXRlbXM7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldkl0ZW1zOiBBcnJheTxUIHwgdHlwZW9mIEVtcHR5U2luZ2xlRWxlbWVudD4gPSBuZXcgQXJyYXkoc2tpcENvdW50KS5maWxsKEVtcHR5U2luZ2xlRWxlbWVudCk7XG4gICAgICAgIGxldCByZXN1bHRJdGVtOiBUIHwgdHlwZW9mIEVtcHR5U2luZ2xlRWxlbWVudCA9IEVtcHR5U2luZ2xlRWxlbWVudDtcbiAgICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciDQkiDQvtCx0YnQtdC8LCDRgdGC0YDQvtC60LAg0LLRi9GI0LUg0LPQsNGA0LDQvdGC0LjRgNGD0LXRgiDQtNC70LjQvdGDINC80LDRgdGB0LjQstCwXG4gICAgICAgICAgICByZXN1bHRJdGVtID0gcHJldkl0ZW1zW2N1cnJlbnRJbmRleF07XG4gICAgICAgICAgICBwcmV2SXRlbXNbY3VycmVudEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICBjdXJyZW50SW5kZXggPSAoY3VycmVudEluZGV4ICsgMSkgJSBza2lwQ291bnQ7XG4gICAgICAgICAgICBpZiAocmVzdWx0SXRlbSAhPSBFbXB0eVNpbmdsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCByZXN1bHRJdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBtaW5CeTxUPihpdGVtczogcmVhZG9ubHkgVFtdIHwgVFtdIHwgSXRlcmFibGU8VD4sIGNvbXBhcmVGdW5jOiBDb21wYXJlRnVuYzxUPik6IFQge1xuICAgICAgICBsZXQgbWluVmFsdWU6IHR5cGVvZiBOb1ZhbHVlTWFya2VyIHwgVCA9IE5vVmFsdWVNYXJrZXI7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgaWYgKG1pblZhbHVlID09PSBOb1ZhbHVlTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBpdGVtO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wYXJlRnVuYyhpdGVtLCBtaW5WYWx1ZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaW5WYWx1ZSA9PT0gTm9WYWx1ZU1hcmtlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwiaXRlbXNcIiwgXCJJdGVtcyBzaG91bGQgYmUgbm90IGVtcHR5IGxpc3RcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pblZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbWluQnlPclVuZGVmaW5lZDxUPihcbiAgICAgICAgaXRlbXM6IHJlYWRvbmx5IFRbXSB8IFRbXSB8IEl0ZXJhYmxlPFQ+LFxuICAgICAgICBjb21wYXJlRnVuYzogQ29tcGFyZUZ1bmM8VD5cbiAgICApOiBUIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IG1pblZhbHVlOiB0eXBlb2YgTm9WYWx1ZU1hcmtlciB8IFQgPSBOb1ZhbHVlTWFya2VyO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChtaW5WYWx1ZSA9PT0gTm9WYWx1ZU1hcmtlcikge1xuICAgICAgICAgICAgICAgIG1pblZhbHVlID0gaXRlbTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZUZ1bmMoaXRlbSwgbWluVmFsdWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG1pblZhbHVlID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWluVmFsdWUgPT09IE5vVmFsdWVNYXJrZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pblZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmFuZ2UoaXRlbUNvdW50OiBudW1iZXIpOiBJdGVyYWJsZTxudW1iZXI+O1xuICAgIHB1YmxpYyBzdGF0aWMgcmFuZ2Uoc3RhcnQ6IG51bWJlciwgaXRlbUNvdW50OiBudW1iZXIpOiBJdGVyYWJsZTxudW1iZXI+O1xuICAgIHB1YmxpYyBzdGF0aWMgKnJhbmdlKGluU3RhcnRPckNvdW50OiBudW1iZXIsIGluSXRlbUNvdW50PzogbnVtYmVyKTogSXRlcmFibGU8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5JdGVtQ291bnQgPT09IHVuZGVmaW5lZCA/IDAgOiBpblN0YXJ0T3JDb3VudDtcbiAgICAgICAgY29uc3QgaXRlbUNvdW50ID0gaW5JdGVtQ291bnQgPT09IHVuZGVmaW5lZCA/IGluU3RhcnRPckNvdW50IDogaW5JdGVtQ291bnQ7XG4gICAgICAgIGlmIChpdGVtQ291bnQgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJpdGVtQ291bnRcIiwgXCJpdGVtQ291bnQgbXVzdCBiZSBhIG5vbiBuZWdhdGl2ZSBudW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBpdGVtQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgeWllbGQgaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5INCS0YHRgtCw0LLQu9GP0LXRgiDQvNC10LbQtNGDINGN0LvQtdC80LXQvdGC0LDQvNC4INC80LDRgdGB0LjQstCwINC30LDQtNCw0L3QvdGL0Lkg0Y3Qu9C10LzQtdC90YIg0Lgg0LLQvtC30LLRgNCw0YnQsNC10YIg0L3QvtCy0YvQuSDQvNCw0YHRgdC40LJcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGludGVyc3BlcnNlPFRJLCBUUz4oaXRlbXM6IFRJW10sIGl0ZW06IFRTKTogQXJyYXk8VEkgfCBUUz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnNwZXJzZUZuKGl0ZW1zLCAoKSA9PiBpdGVtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSDQktGB0YLQsNCy0LvRj9C10YIg0LzQtdC20LTRgyDRjdC70LXQvNC10L3RgtCw0LzQuCDQvNCw0YHRgdC40LLQsCDRjdC70LXQvNC10L3Rgiwg0YHQvtC30LTQsNCy0LDQtdC80YvQuSDRhNGD0L3QutGG0LjQtdC5LCDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDQvdC+0LLRi9C5INC80LDRgdGB0LjQslxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJzcGVyc2VGbjxUSSwgVFM+KGl0ZW1zOiBUSVtdLCBpdGVtOiAobmV4dEl0ZW06IFRJLCBpbmRleDogbnVtYmVyKSA9PiBUUyk6IEFycmF5PFRJIHwgVFM+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZsYXRNYXAoKHgsIGluZGV4KSA9PiAoaW5kZXggPT09IDAgPyBbeF0gOiBbaXRlbSh4LCBpbmRleCksIHhdKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyB6aXA8VDEsIFQyPihpdGVtczE6IEl0ZXJhYmxlPFQxPiwgaXRlbXMyOiBJdGVyYWJsZTxUMj4pOiBJdGVyYWJsZTxbVDEgfCB1bmRlZmluZWQsIFQyIHwgdW5kZWZpbmVkXT47XG4gICAgcHVibGljIHN0YXRpYyAqemlwKC4uLml0ZXJhYmxlczogQXJyYXk8SXRlcmFibGU8dW5rbm93bj4+KTogSXRlcmFibGU8dW5rbm93bltdPiB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yczogQXJyYXk8SXRlcmF0b3I8dW5rbm93bj4gfCB0eXBlb2YgTm9WYWx1ZU1hcmtlcj4gPSBpdGVyYWJsZXMubWFwKGl0ID0+IEl0ZXJhdG9yLmZyb20oaXQpKTtcbiAgICAgICAgbGV0IGhhc1VuZG9uZUl0ZXJhdG9ycyA9IHRydWU7XG4gICAgICAgIHdoaWxlIChoYXNVbmRvbmVJdGVyYXRvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdEVudHJ5ID0gW107XG4gICAgICAgICAgICBoYXNVbmRvbmVJdGVyYXRvcnMgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ksIGl0ZXJhdG9yXSBvZiB0aGlzLml0ZXJhdGVFbnRyaWVzKGl0ZXJhdG9ycykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgPT09IE5vVmFsdWVNYXJrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0RW50cnkucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdFZhbHVlID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0VmFsdWUuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0RW50cnkucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JzW2ldID0gTm9WYWx1ZU1hcmtlcjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEVudHJ5LnB1c2gocmVzdWx0VmFsdWUudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzVW5kb25lSXRlcmF0b3JzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNVbmRvbmVJdGVyYXRvcnMpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCByZXN1bHRFbnRyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgKmRpc3RpbmN0Qnk8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+LCBpZFNlbGVjdG9yOiAoaXRlbTogVCkgPT4gc3RyaW5nKTogSXRlcmFibGU8VD4ge1xuICAgICAgICBjb25zdCBzZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGlkU2VsZWN0b3IoaXRlbSk7XG4gICAgICAgICAgICBpZiAoIXNldC5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgICAgc2V0LmFkZChpZCk7XG4gICAgICAgICAgICAgICAgeWllbGQgaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVkdWNlPFQsIFU+KFxuICAgICAgICBpdGVtczogSXRlcmFibGU8VD4sXG4gICAgICAgIHJlZHVjZXI6IChhY2N1bXVsYXRvcjogVSwgaXRlbTogVCwgaW5kZXg6IG51bWJlcikgPT4gVSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBVXG4gICAgKTogVSB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIHJldHVybiBJdGVyYXRvci5mcm9tKGl0ZW1zKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gcmVkdWNlcihhY2MsIGl0ZW0sIGluZGV4KyspLCBpbml0aWFsVmFsdWUpO1xuICAgIH1cbn1cbiJdfQ==
|
|
361
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JdGVyYWJsZVV0aWxzLnRzIl0sIm5hbWVzIjpbInJldmVyc2VBcnJheSIsImFycmF5IiwiaSIsImxlbmd0aCIsInRvQXN5bmNJdGVyYXRvciIsImdlbmVyYXRvciIsIkFzeW5jSXRlcmF0b3IiLCJmcm9tIiwiZmluZExhc3QiLCJpdGVtcyIsImNvbmRpdGlvbiIsInJlc3VsdCIsIml0ZW0iLCJjb25jYXQiLCJpdGVyYWJsZXMiLCJpdGVyYWJsZUl0ZW0iLCJpdGVyYXRlVmFsdWVzIiwib2JqIiwia2V5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaXRlcmF0ZUtleXMiLCJpdGVyYXRlRW50cmllcyIsImNvdW50IiwiX2l0ZW0iLCJFbXB0eVNpbmdsZUVsZW1lbnQiLCJTeW1ib2wiLCJmb3IiLCJOb1ZhbHVlTWFya2VyIiwiSXRlclV0aWxzIiwiaXNFbXB0eSIsIml0ZXJhYmxlIiwiZ3JvdXBCeSIsInNlbGVjdEtleSIsIk1hcCIsImtleUxpc3QiLCJnZXQiLCJ1bmRlZmluZWQiLCJzZXQiLCJwdXNoIiwic29ydEJ5Iiwic2VsZWN0b3IiLCJzb3J0IiwiYUl0ZW0iLCJiSXRlbSIsImxlZnRWYWx1ZSIsInJpZ2h0VmFsdWUiLCJsYXN0IiwiQXJyYXkiLCJpc0FycmF5IiwibGFzdEl0ZW0iLCJmaXJzdCIsImZpcnN0SXRlbSIsInNpbmdsZSIsInNpbmdsZUFzc2VydE1lc3NhZ2UiLCJFcnJvciIsInNpbmdsZUVsZW1lbnQiLCJpbmRleCIsInNraXBMYXN0Iiwic2tpcENvdW50IiwicHJldkl0ZW1zIiwiZmlsbCIsInJlc3VsdEl0ZW0iLCJjdXJyZW50SW5kZXgiLCJtaW5CeSIsImNvbXBhcmVGdW5jIiwibWluVmFsdWUiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1pbkJ5T3JVbmRlZmluZWQiLCJyYW5nZSIsImluU3RhcnRPckNvdW50IiwiaW5JdGVtQ291bnQiLCJzdGFydCIsIml0ZW1Db3VudCIsImludGVyc3BlcnNlIiwiaW50ZXJzcGVyc2VGbiIsImZsYXRNYXAiLCJ4IiwiemlwIiwiaXRlcmF0b3JzIiwibWFwIiwiaXQiLCJJdGVyYXRvciIsImhhc1VuZG9uZUl0ZXJhdG9ycyIsInJlc3VsdEVudHJ5IiwiaXRlcmF0b3IiLCJyZXN1bHRWYWx1ZSIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJkaXN0aW5jdEJ5IiwiaWRTZWxlY3RvciIsIlNldCIsImlkIiwiaGFzIiwiYWRkIiwicmVkdWNlIiwicmVkdWNlciIsImluaXRpYWxWYWx1ZSIsImFjYyIsImJhdGNoIiwiYmF0Y2hTaXplIiwic2FmZUJhdGNoU2l6ZSIsImN1cnJlbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUVBOztBQUVPLFVBQVVBLFlBQVYsQ0FBMEJDLEtBQTFCLEVBQW9FO0FBQ3ZFLE9BQUssSUFBSUMsQ0FBQyxHQUFHRCxLQUFLLENBQUNFLE1BQU4sR0FBZSxDQUE1QixFQUErQkQsQ0FBQyxJQUFJLENBQXBDLEVBQXVDQSxDQUFDLEVBQXhDLEVBQTRDO0FBQ3hDO0FBQ0EsVUFBTUQsS0FBSyxDQUFDQyxDQUFELENBQVg7QUFDSDtBQUNKOztBQUVNLFNBQVNFLGVBQVQsQ0FBNEJDLFNBQTVCLEVBQTBGO0FBQzdGLFNBQU9DLGFBQWEsQ0FBQ0MsSUFBZCxDQUFtQkYsU0FBUyxFQUE1QixDQUFQO0FBQ0g7O0FBRU0sU0FBU0csUUFBVCxDQUFxQkMsS0FBckIsRUFBeUNDLFNBQXpDLEVBQXlGO0FBQzVGLE1BQUlDLE1BQUo7O0FBQ0EsT0FBSyxNQUFNQyxJQUFYLElBQW1CSCxLQUFuQixFQUEwQjtBQUN0QixRQUFJQyxTQUFTLENBQUNFLElBQUQsQ0FBYixFQUFxQjtBQUNqQkQsTUFBQUEsTUFBTSxHQUFHQyxJQUFUO0FBQ0g7QUFDSjs7QUFDRCxTQUFPRCxNQUFQO0FBQ0g7O0FBRU0sVUFBVUUsTUFBVixDQUFvQixHQUFHQyxTQUF2QixFQUEyRTtBQUM5RSxPQUFLLE1BQU1DLFlBQVgsSUFBMkJE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QUFJLEdBQUcsSUFBUDtBQUNBO0FBQ0gsU0FIRCxNQUdPO0FBQ0hZLFVBQUFBLEtBQUssQ0FBQzdELElBQU4sQ0FBV2dFLE9BQU8sQ0FBQ2QsS0FBbkI7QUFDSDtBQUNKOztBQUNELFVBQUlXLEtBQUssQ0FBQ25HLE1BQU4sR0FBZSxDQUFuQixFQUFzQjtBQUNsQixjQUFNbUcsS0FBTjtBQUNIO0FBQ0o7QUFDSjs7QUF2UGtCOzs7QUFBVnZFLFMsQ0FDS04sSyxHQUFRQSxLO0FBRGJNLFMsQ0FFS2xCLE0sR0FBU0EsTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1pbkxlbmd0aEFycmF5LCByZWplY3QgfSBmcm9tIFwiLi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgQ29tcGFyZUZ1bmMgfSBmcm9tIFwiLi9Db21wYXJlcnNcIjtcbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gZnJvbSBcIi4vRXJyb3JzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiogcmV2ZXJzZUFycmF5PFQ+KGFycmF5OiByZWFkb25seSBUW10pOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcbiAgICBmb3IgKGxldCBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgeWllbGQgYXJyYXlbaV0hO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQXN5bmNJdGVyYXRvcjxUPihnZW5lcmF0b3I6ICgpID0+IEFzeW5jR2VuZXJhdG9yPFQ+KTogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcbiAgICByZXR1cm4gQXN5bmNJdGVyYXRvci5mcm9tKGdlbmVyYXRvcigpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMYXN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiwgY29uZGl0aW9uOiAoaXRlbTogVCkgPT4gYm9vbGVhbik6IFQgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXN1bHQ6IFQgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgIGlmIChjb25kaXRpb24oaXRlbSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGl0ZW07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBjb25jYXQ8VD4oLi4uaXRlcmFibGVzOiBBcnJheTxJdGVyYWJsZTxUPj4pOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcbiAgICBmb3IgKGNvbnN0IGl0ZXJhYmxlSXRlbSBvZiBpdGVyYWJsZXMpIHtcbiAgICAgICAgeWllbGQqIGl0ZXJhYmxlSXRlbTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlcmF0ZVZhbHVlczxUSyBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCB8IG51bWJlciwgVFY+KG9iajogeyBba2V5IGluIFRLXTogVFYgfSk6IEl0ZXJhYmxlPFRWPiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICB5aWVsZCBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVLZXlzPFRPPihvYmo6IFJlYWRvbmx5PFRPPik6IEl0ZXJhYmxlPEV4dHJhY3Q8a2V5b2YgVE8sIHN0cmluZz4+O1xuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVLZXlzPFRWPihvYmo6IFJlYWRvbmx5PHsgW2tleTogc3RyaW5nXTogVFYgfT4pOiBJdGVyYWJsZTxzdHJpbmc+O1xuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVLZXlzKG9iajogUmVhZG9ubHk8e30+KTogSXRlcmFibGU8c3RyaW5nPjtcbmV4cG9ydCBmdW5jdGlvbiogaXRlcmF0ZUtleXM8VEsgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgfCBudW1iZXI+KG9iajogeyBba2V5IGluIFRLXTogdW5rbm93biB9KTogSXRlcmFibGU8VEs+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIHlpZWxkIGtleTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVFbnRyaWVzPFRPPihvYmo6IFJlYWRvbmx5PFRPPik6IEl0ZXJhYmxlPFtFeHRyYWN0PGtleW9mIFRPLCBzdHJpbmc+LCBUT1trZXlvZiBUT11dPjtcbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlRW50cmllczxUVj4ob2JqOiBSZWFkb25seTx7IFtrZXk6IHN0cmluZ106IFRWIH0+KTogSXRlcmFibGU8W3N0cmluZywgVFZdPjtcbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlRW50cmllcyhvYmo6IFJlYWRvbmx5PHt9Pik6IEl0ZXJhYmxlPFtzdHJpbmcsIHVua25vd25dPjtcbmV4cG9ydCBmdW5jdGlvbiogaXRlcmF0ZUVudHJpZXM8VFY+KG9iajogUmVhZG9ubHk8eyBba2V5OiBzdHJpbmddOiBUViB9Pik6IEl0ZXJhYmxlPFtzdHJpbmcsIFRWXT4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIHlpZWxkIFtrZXksIG9ialtrZXldIV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3VudDxUPihpdGVtczogSXRlcmFibGU8VD4pOiBudW1iZXIge1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGZvciAoY29uc3QgX2l0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgcmVzdWx0Kys7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IEVtcHR5U2luZ2xlRWxlbWVudCA9IFN5bWJvbC5mb3IoXCJFbXB0eVNpbmdsZUVsZW1lbnRcIik7XG5jb25zdCBOb1ZhbHVlTWFya2VyID0gU3ltYm9sLmZvcihcIk5vVmFsdWVNYXJrZXJcIik7XG5cbmV4cG9ydCBjbGFzcyBJdGVyVXRpbHMge1xuICAgIHB1YmxpYyBzdGF0aWMgY291bnQgPSBjb3VudDtcbiAgICBwdWJsaWMgc3RhdGljIGNvbmNhdCA9IGNvbmNhdDtcblxuICAgIHB1YmxpYyBzdGF0aWMgaXNFbXB0eTxUPihpdGVyYWJsZTogSXRlcmFibGU8VD4pOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChjb25zdCBfaXRlbSBvZiBpdGVyYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ3JvdXBCeTxULCBUS2V5PihpdGVyYWJsZTogSXRlcmFibGU8VD4sIHNlbGVjdEtleTogKGl0ZW06IFQpID0+IFRLZXkpOiBNYXA8VEtleSwgVFtdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8VEtleSwgVFtdPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNlbGVjdEtleShpdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGtleUxpc3QgPSByZXN1bHQuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoa2V5TGlzdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGtleSwgW2l0ZW1dKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAga2V5TGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzb3J0Qnk8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+LCBzZWxlY3RvcjogKGl0ZW06IFQpID0+IHN0cmluZyB8IG51bWJlcik6IFRbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5pdGVtc107XG4gICAgICAgIHJlc3VsdC5zb3J0KChhSXRlbSwgYkl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRWYWx1ZSA9IHNlbGVjdG9yKGFJdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0VmFsdWUgPSBzZWxlY3RvcihiSXRlbSk7XG4gICAgICAgICAgICBpZiAobGVmdFZhbHVlID09PSByaWdodFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnRWYWx1ZSA8IHJpZ2h0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IE1pbkxlbmd0aEFycmF5PFQsIDE+KTogVDtcbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVDtcbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsYXN0SXRlbTogVCB8IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBsYXN0SXRlbSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhc3RJdGVtO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZmlyc3Q8VD4oaXRlbXM6IFtULCAuLi51bmtub3duW11dKTogVDtcbiAgICBwdWJsaWMgc3RhdGljIGZpcnN0PFQ+KGl0ZW1zOiBNaW5MZW5ndGhBcnJheTxULCAxPik6IFQ7XG4gICAgcHVibGljIHN0YXRpYyBmaXJzdDxUPihpdGVtczogSXRlcmFibGU8VD4gfCByZWFkb25seSBUW10pOiB1bmRlZmluZWQgfCBUO1xuICAgIHB1YmxpYyBzdGF0aWMgZmlyc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zWzBdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaXJzdEl0ZW06IFQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgZmlyc3RJdGVtID0gaXRlbTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdEl0ZW07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzaW5nbGU8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSB8IEl0ZXJhYmxlPFQ+LCBzaW5nbGVBc3NlcnRNZXNzYWdlPzogc3RyaW5nKTogVCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQXNzZXJ0TWVzc2FnZSA/PyBgU2VxdWVuY2UgbXVzdCBjb250YWluIGV4YWN0bHkgc2luZ2xlIGVsZW1lbnQsIGJ1dCBnb3QgJHtpdGVtcy5sZW5ndGh9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbXNbMF0gPz8gcmVqZWN0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgc2luZ2xlRWxlbWVudDogVCB8IHR5cGVvZiBFbXB0eVNpbmdsZUVsZW1lbnQgPSBFbXB0eVNpbmdsZUVsZW1lbnQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2luZ2xlRWxlbWVudCAhPT0gRW1wdHlTaW5nbGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZUFzc2VydE1lc3NhZ2UgPz8gYFNlcXVlbmNlIG11c3QgY29udGFpbiBleGFjdGx5IHNpbmdsZSBlbGVtZW50LCBidXQgZ290IGF0IGxlYXN0IDJgXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNpbmdsZUVsZW1lbnQgPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNpbmdsZUVsZW1lbnQgPT09IEVtcHR5U2luZ2xlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzaW5nbGVBc3NlcnRNZXNzYWdlID8/IFwiU2VxdWVuY2UgbXVzdCBjb250YWluIGV4YWN0bHkgc2luZ2xlIGVsZW1lbnQsIGJ1dCBnb3QgMFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzaW5nbGVFbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyAqaXRlcmF0ZUVudHJpZXM8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSB8IFRbXSB8IEl0ZXJhYmxlPFQ+KTogSXRlcmFibGU8W251bWJlciwgVF0+IHtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICB5aWVsZCBbaW5kZXgsIGl0ZW1dO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgKnNraXBMYXN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiwgc2tpcENvdW50OiBudW1iZXIpOiBJdGVyYWJsZTxUPiB7XG4gICAgICAgIGlmIChza2lwQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHlpZWxkKiBpdGVtcztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2SXRlbXM6IEFycmF5PFQgfCB0eXBlb2YgRW1wdHlTaW5nbGVFbGVtZW50PiA9IG5ldyBBcnJheShza2lwQ291bnQpLmZpbGwoRW1wdHlTaW5nbGVFbGVtZW50KTtcbiAgICAgICAgbGV0IHJlc3VsdEl0ZW06IFQgfCB0eXBlb2YgRW1wdHlTaW5nbGVFbGVtZW50ID0gRW1wdHlTaW5nbGVFbGVtZW50O1xuICAgICAgICBsZXQgY3VycmVudEluZGV4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yINCSINC+0LHRidC10LwsINGB0YLRgNC+0LrQsCDQstGL0YjQtSDQs9Cw0YDQsNC90YLQuNGA0YPQtdGCINC00LvQuNC90YMg0LzQsNGB0YHQuNCy0LBcbiAgICAgICAgICAgIHJlc3VsdEl0ZW0gPSBwcmV2SXRlbXNbY3VycmVudEluZGV4XTtcbiAgICAgICAgICAgIHByZXZJdGVtc1tjdXJyZW50SW5kZXhdID0gaXRlbTtcbiAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IChjdXJyZW50SW5kZXggKyAxKSAlIHNraXBDb3VudDtcbiAgICAgICAgICAgIGlmIChyZXN1bHRJdGVtICE9IEVtcHR5U2luZ2xlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdEl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG1pbkJ5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10gfCBUW10gfCBJdGVyYWJsZTxUPiwgY29tcGFyZUZ1bmM6IENvbXBhcmVGdW5jPFQ+KTogVCB7XG4gICAgICAgIGxldCBtaW5WYWx1ZTogdHlwZW9mIE5vVmFsdWVNYXJrZXIgfCBUID0gTm9WYWx1ZU1hcmtlcjtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAobWluVmFsdWUgPT09IE5vVmFsdWVNYXJrZXIpIHtcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IGl0ZW07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVGdW5jKGl0ZW0sIG1pblZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pblZhbHVlID09PSBOb1ZhbHVlTWFya2VyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJpdGVtc1wiLCBcIkl0ZW1zIHNob3VsZCBiZSBub3QgZW1wdHkgbGlzdFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBtaW5CeU9yVW5kZWZpbmVkPFQ+KFxuICAgICAgICBpdGVtczogcmVhZG9ubHkgVFtdIHwgVFtdIHwgSXRlcmFibGU8VD4sXG4gICAgICAgIGNvbXBhcmVGdW5jOiBDb21wYXJlRnVuYzxUPlxuICAgICk6IFQgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgbWluVmFsdWU6IHR5cGVvZiBOb1ZhbHVlTWFya2VyIHwgVCA9IE5vVmFsdWVNYXJrZXI7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgaWYgKG1pblZhbHVlID09PSBOb1ZhbHVlTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBpdGVtO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wYXJlRnVuYyhpdGVtLCBtaW5WYWx1ZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaW5WYWx1ZSA9PT0gTm9WYWx1ZU1hcmtlcikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByYW5nZShpdGVtQ291bnQ6IG51bWJlcik6IEl0ZXJhYmxlPG51bWJlcj47XG4gICAgcHVibGljIHN0YXRpYyByYW5nZShzdGFydDogbnVtYmVyLCBpdGVtQ291bnQ6IG51bWJlcik6IEl0ZXJhYmxlPG51bWJlcj47XG4gICAgcHVibGljIHN0YXRpYyAqcmFuZ2UoaW5TdGFydE9yQ291bnQ6IG51bWJlciwgaW5JdGVtQ291bnQ/OiBudW1iZXIpOiBJdGVyYWJsZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbkl0ZW1Db3VudCA9PT0gdW5kZWZpbmVkID8gMCA6IGluU3RhcnRPckNvdW50O1xuICAgICAgICBjb25zdCBpdGVtQ291bnQgPSBpbkl0ZW1Db3VudCA9PT0gdW5kZWZpbmVkID8gaW5TdGFydE9yQ291bnQgOiBpbkl0ZW1Db3VudDtcbiAgICAgICAgaWYgKGl0ZW1Db3VudCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIml0ZW1Db3VudFwiLCBcIml0ZW1Db3VudCBtdXN0IGJlIGEgbm9uIG5lZ2F0aXZlIG51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBzdGFydCArIGl0ZW1Db3VudDsgaSsrKSB7XG4gICAgICAgICAgICB5aWVsZCBpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkg0JLRgdGC0LDQstC70Y/QtdGCINC80LXQttC00YMg0Y3Qu9C10LzQtdC90YLQsNC80Lgg0LzQsNGB0YHQuNCy0LAg0LfQsNC00LDQvdC90YvQuSDRjdC70LXQvNC10L3RgiDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDQvdC+0LLRi9C5INC80LDRgdGB0LjQslxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJzcGVyc2U8VEksIFRTPihpdGVtczogVElbXSwgaXRlbTogVFMpOiBBcnJheTxUSSB8IFRTPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVyc3BlcnNlRm4oaXRlbXMsICgpID0+IGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5INCS0YHRgtCw0LLQu9GP0LXRgiDQvNC10LbQtNGDINGN0LvQtdC80LXQvdGC0LDQvNC4INC80LDRgdGB0LjQstCwINGN0LvQtdC80LXQvdGCLCDRgdC+0LfQtNCw0LLQsNC10LzRi9C5INGE0YPQvdC60YbQuNC10LksINC4INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINC90L7QstGL0Lkg0LzQsNGB0YHQuNCyXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBpbnRlcnNwZXJzZUZuPFRJLCBUUz4oaXRlbXM6IFRJW10sIGl0ZW06IChuZXh0SXRlbTogVEksIGluZGV4OiBudW1iZXIpID0+IFRTKTogQXJyYXk8VEkgfCBUUz4ge1xuICAgICAgICByZXR1cm4gaXRlbXMuZmxhdE1hcCgoeCwgaW5kZXgpID0+IChpbmRleCA9PT0gMCA/IFt4XSA6IFtpdGVtKHgsIGluZGV4KSwgeF0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHppcDxUMSwgVDI+KGl0ZW1zMTogSXRlcmFibGU8VDE+LCBpdGVtczI6IEl0ZXJhYmxlPFQyPik6IEl0ZXJhYmxlPFtUMSB8IHVuZGVmaW5lZCwgVDIgfCB1bmRlZmluZWRdPjtcbiAgICBwdWJsaWMgc3RhdGljICp6aXAoLi4uaXRlcmFibGVzOiBBcnJheTxJdGVyYWJsZTx1bmtub3duPj4pOiBJdGVyYWJsZTx1bmtub3duW10+IHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3JzOiBBcnJheTxJdGVyYXRvcjx1bmtub3duPiB8IHR5cGVvZiBOb1ZhbHVlTWFya2VyPiA9IGl0ZXJhYmxlcy5tYXAoaXQgPT4gSXRlcmF0b3IuZnJvbShpdCkpO1xuICAgICAgICBsZXQgaGFzVW5kb25lSXRlcmF0b3JzID0gdHJ1ZTtcbiAgICAgICAgd2hpbGUgKGhhc1VuZG9uZUl0ZXJhdG9ycykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0RW50cnkgPSBbXTtcbiAgICAgICAgICAgIGhhc1VuZG9uZUl0ZXJhdG9ycyA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaSwgaXRlcmF0b3JdIG9mIHRoaXMuaXRlcmF0ZUVudHJpZXMoaXRlcmF0b3JzKSkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvciA9PT0gTm9WYWx1ZU1hcmtlcikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRFbnRyeS5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0VmFsdWUgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRWYWx1ZS5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRFbnRyeS5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcnNbaV0gPSBOb1ZhbHVlTWFya2VyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0RW50cnkucHVzaChyZXN1bHRWYWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNVbmRvbmVJdGVyYXRvcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc1VuZG9uZUl0ZXJhdG9ycykge1xuICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdEVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyAqZGlzdGluY3RCeTxUPihpdGVtczogSXRlcmFibGU8VD4sIGlkU2VsZWN0b3I6IChpdGVtOiBUKSA9PiBzdHJpbmcpOiBJdGVyYWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gaWRTZWxlY3RvcihpdGVtKTtcbiAgICAgICAgICAgIGlmICghc2V0LmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICBzZXQuYWRkKGlkKTtcbiAgICAgICAgICAgICAgICB5aWVsZCBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZWR1Y2U8VCwgVT4oXG4gICAgICAgIGl0ZW1zOiBJdGVyYWJsZTxUPixcbiAgICAgICAgcmVkdWNlcjogKGFjY3VtdWxhdG9yOiBVLCBpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiBVLFxuICAgICAgICBpbml0aWFsVmFsdWU6IFVcbiAgICApOiBVIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIEl0ZXJhdG9yLmZyb20oaXRlbXMpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiByZWR1Y2VyKGFjYywgaXRlbSwgaW5kZXgrKyksIGluaXRpYWxWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyAqYmF0Y2g8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+LCBiYXRjaFNpemU6IG51bWJlcik6IEl0ZXJhYmxlPEl0ZXJhYmxlPFQ+PiB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gSXRlcmF0b3IuZnJvbShpdGVtcyk7XG4gICAgICAgIGNvbnN0IHNhZmVCYXRjaFNpemUgPSBiYXRjaFNpemUgPiAwID8gYmF0Y2hTaXplIDogMTtcbiAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUgKCFkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBiYXRjaDogVFtdID0gW107XG4gICAgICAgICAgICB3aGlsZSAoYmF0Y2gubGVuZ3RoIDwgc2FmZUJhdGNoU2l6ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYmF0Y2gucHVzaChjdXJyZW50LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYmF0Y2gubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGJhdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
|