@sunbird-cb/toc 0.0.21 → 0.0.22

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.
@@ -15,19 +15,9 @@ export class AppTocV2Service {
15
15
  contentHeirarchy['preliminaryAssessmentDetail'].parent = contentHeirarchy.identifier;
16
16
  // Mark this as the pre-assessment for milestone locking logic
17
17
  contentHeirarchy['preliminaryAssessmentDetail'].isPreAssessment = true;
18
- console.log('🔍 [CONSTRUCT HIERARCHY] Setting isPreAssessment=true on preliminaryAssessmentDetail:', {
19
- id: contentHeirarchy['preliminaryAssessmentDetail'].identifier,
20
- name: contentHeirarchy['preliminaryAssessmentDetail'].name,
21
- isPreAssessment: contentHeirarchy['preliminaryAssessmentDetail'].isPreAssessment,
22
- parent: contentHeirarchy['preliminaryAssessmentDetail'].parent,
23
- primaryCategory: contentHeirarchy['preliminaryAssessmentDetail'].primaryCategory
24
- });
25
18
  contentHeirarchy['children'].push(contentHeirarchy['preliminaryAssessmentDetail']);
26
19
  leafNodes.push(contentReadData?.preliminaryAssessment || contentReadData?.preliminaryAssessmentDetail?.identifier);
27
20
  }
28
- else {
29
- console.log('⚠️ [CONSTRUCT HIERARCHY] No preliminaryAssessmentDetail found in contentReadData');
30
- }
31
21
  // Track milestone index for proper locking logic
32
22
  // All milestones are locked by default - unlocking is computed based on progress
33
23
  let milestoneIndex = 0;
@@ -215,15 +205,6 @@ export class AppTocV2Service {
215
205
  node.completionPercentage = progress;
216
206
  node.completionStatus = status;
217
207
  node.status = status;
218
- console.log(`Direct enrollment found for ${node.identifier}:`, {
219
- completionPercentage: progress,
220
- completionStatus: status,
221
- enrollmentData: {
222
- progress: enrollment.progress,
223
- completionPercentage: enrollment.completionPercentage,
224
- status: enrollment.status
225
- }
226
- });
227
208
  return;
228
209
  }
229
210
  // Try both contentId and collectionId as the API response may use either field
@@ -255,11 +236,6 @@ export class AppTocV2Service {
255
236
  node.completionStatus = 0;
256
237
  node.status = 0;
257
238
  }
258
- console.log(`Updated node progress for ${node.identifier}:`, {
259
- completionStatus: node.completionStatus,
260
- completionPercentage: node.completionPercentage,
261
- status: node.status
262
- });
263
239
  }
264
240
  updateCourseProgress(course, parentContentIdentifier, enrollmentListData) {
265
241
  const enrollment = this.findEnrollment(enrollmentListData, course?.identifier);
@@ -342,4 +318,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
342
318
  providedIn: 'root'
343
319
  }]
344
320
  }], ctorParameters: function () { return [{ type: i1.AppTocService }]; } });
345
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy12Mi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL3NlcnZpY2VzL2FwcC10b2MtdjIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBSWpELE1BQU0sT0FBTyxlQUFlO0lBRTFCLFlBQW9CLE1BQXFCO1FBQXJCLFdBQU0sR0FBTixNQUFNLENBQWU7SUFBSSxDQUFDO0lBRTlDLHNCQUFzQixDQUFDLGVBQW9CO1FBQ3pDLElBQUksZ0JBQWdCLEdBQVEsRUFBRSxHQUFHLGVBQWUsRUFBRSxDQUFBO1FBQ2xELElBQUksU0FBUyxHQUFhLEVBQUUsQ0FBQTtRQUM1QixJQUFJLGdCQUFnQixDQUFDLDZCQUE2QixDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5SCxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDakMsbUVBQW1FO1lBQ25FLGdCQUFnQixDQUFDLDZCQUE2QixDQUFDLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQTtZQUNwRiw4REFBOEQ7WUFDOUQsZ0JBQWdCLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFBO1lBRXRFLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUZBQXVGLEVBQUU7Z0JBQ25HLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLFVBQVU7Z0JBQzlELElBQUksRUFBRSxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLElBQUk7Z0JBQzFELGVBQWUsRUFB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RyxHQUFHLENBQUMsQ0FBQTt3QkFDaEYsTUFBTSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFBO3dCQUNwRixNQUFNLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7cUJBRXRIO2lCQUNGO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFTyxjQUFjLENBQUMsY0FBbUIsRUFBRSxVQUFrQjtRQUM1RCxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQTtRQUMxRCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEtBQUssVUFBVSxJQUFJLEVBQUUsQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDLENBQUE7SUFDeEcsQ0FBQzsrR0F0V1UsZUFBZTttSEFBZixlQUFlLGNBRmQsTUFBTTs7NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBUb2NTZXJ2aWNlIH0gZnJvbSAnLi9hcHAtdG9jLnNlcnZpY2UnO1xuaW1wb3J0IHsgTnNDb250ZW50IH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXBwVG9jVjJTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRvY1N2YzogQXBwVG9jU2VydmljZSkgeyB9XG5cbiAgY29uc3RydWN0SGVpcmFyY2h5RGF0YShjb250ZW50UmVhZERhdGE6IGFueSk6IGFueSB7XG4gICAgbGV0IGNvbnRlbnRIZWlyYXJjaHk6IGFueSA9IHsgLi4uY29udGVudFJlYWREYXRhIH1cbiAgICBsZXQgbGVhZk5vZGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgaWYgKGNvbnRlbnRIZWlyYXJjaHlbJ3ByZWxpbWluYXJ5QXNzZXNzbWVudERldGFpbCddICYmIE9iamVjdC5rZXlzKGNvbnRlbnRIZWlyYXJjaHlbJ3ByZWxpbWluYXJ5QXNzZXNzbWVudERldGFpbCddKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb250ZW50SGVpcmFyY2h5WydjaGlsZHJlbiddID0gW11cbiAgICAgIC8vIFNldCBwYXJlbnQgcmVmZXJlbmNlIGZvciBwcmVsaW1pbmFyeSBhc3Nlc3NtZW50IChwcmUtYXNzZXNzbWVudClcbiAgICAgIGNvbnRlbnRIZWlyYXJjaHlbJ3ByZWxpbWluYXJ5QXNzZXNzbWVudERldGFpbCddLnBhcmVudCA9IGNvbnRlbnRIZWlyYXJjaHkuaWRlbnRpZmllclxuICAgICAgLy8gTWFyayB0aGlzIGFzIHRoZSBwcmUtYXNzZXNzbWVudCBmb3IgbWlsZXN0b25lIGxvY2tpbmcgbG9naWNcbiAgICAgIGNvbnRlbnRIZWlyYXJjaHlbJ3ByZWxpbWluYXJ5QXNzZXNzbWVudERldGFpbCddLmlzUHJlQXNzZXNzbWVudCA9IHRydWVcbiAgICAgIFxuICAgICAgY29uc29sZS5sb2coJ/CflI0gW0NPTlNUUlVDVCBISUVSQVJDSFldIFNldHRpbmcgaXNQcmVBc3Nlc3NtZW50PXRydWUgb24gcHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsOicsIHtcbiAgICAgICAgaWQ6IGNvbnRlbnRIZWlyYXJjaHlbJ3ByZWxpbWluYXJ5QXNzZXNzbWVudERldGFpbCddLmlkZW50aWZpZXIsXG4gICAgICAgIG5hbWU6IGNvbnRlbnRIZWlyYXJjaHlbJ3ByZWxpbWluYXJ5QXNzZXNzbWVudERldGFpbCddLm5hbWUsXG4gICAgICAgIGlzUHJlQXNzZXNzbWVudDogY29udGVudEhlaXJhcmNoeVsncHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsJ10uaXNQcmVBc3Nlc3NtZW50LFxuICAgICAgICBwYXJlbnQ6IGNvbnRlbnRIZWlyYXJjaHlbJ3ByZWxpbWluYXJ5QXNzZXNzbWVudERldGFpbCddLnBhcmVudCxcbiAgICAgICAgcHJpbWFyeUNhdGVnb3J5OiBjb250ZW50SGVpcmFyY2h5WydwcmVsaW1pbmFyeUFzc2Vzc21lbnREZXRhaWwnXS5wcmltYXJ5Q2F0ZWdvcnlcbiAgICAgIH0pXG4gICAgICBcbiAgICAgIGNvbnRlbnRIZWlyYXJjaHlbJ2NoaWxkcmVuJ10ucHVzaChjb250ZW50SGVpcmFyY2h5WydwcmVsaW1pbmFyeUFzc2Vzc21lbnREZXRhaWwnXSlcbiAgICAgIGxlYWZOb2Rlcy5wdXNoKGNvbnRlbnRSZWFkRGF0YT8ucHJlbGltaW5hcnlBc3Nlc3NtZW50IHx8IGNvbnRlbnRSZWFkRGF0YT8ucHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsPy5pZGVudGlmaWVyKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygn4pqg77iPIFtDT05TVFJVQ1QgSElFUkFSQ0hZXSBObyBwcmVsaW1pbmFyeUFzc2Vzc21lbnREZXRhaWwgZm91bmQgaW4gY29udGVudFJlYWREYXRhJylcbiAgICB9XG5cbiAgICAvLyBUcmFjayBtaWxlc3RvbmUgaW5kZXggZm9yIHByb3BlciBsb2NraW5nIGxvZ2ljXG4gICAgLy8gQWxsIG1pbGVzdG9uZXMgYXJlIGxvY2tlZCBieSBkZWZhdWx0IC0gdW5sb2NraW5nIGlzIGNvbXB1dGVkIGJhc2VkIG9uIHByb2dyZXNzXG4gICAgbGV0IG1pbGVzdG9uZUluZGV4ID0gMFxuICAgIGNvbnRlbnRIZWlyYXJjaHlbJ21pbGVzdG9uZXNfdjEnXS5mb3JFYWNoKChtaWxlc3RvbmU6IGFueSkgPT4ge1xuICAgICAgLy8gQWxsIG1pbGVzdG9uZXMgYXJlIGxvY2tlZCBieSBkZWZhdWx0XG4gICAgICAvLyBNMSB1bmxvY2tzIHdoZW4gcHJlLWFzc2Vzc21lbnQgaXMgY29tcGxldGVkXG4gICAgICAvLyBNMisgdW5sb2NrIHdoZW4gcHJldmlvdXMgbWlsZXN0b25lJ3MgbWFuZGF0b3J5IGNvbnRlbnQgKyBhc3Nlc3NtZW50IGFyZSBjb21wbGV0ZWRcbiAgICAgIGNvbnN0IHNob3VsZEJlTG9ja2VkID0gdHJ1ZVxuXG4gICAgICBsZXQgbWlsZVN0b25lRGF0YTogYW55ID0ge1xuICAgICAgICBcImlkZW50aWZpZXJcIjogbWlsZXN0b25lLmlkLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IG1pbGVzdG9uZS5kZXNjcmlwdGlvbixcbiAgICAgICAgXCJtaW1lVHlwZVwiOiBcImFwcGxpY2F0aW9uL3ZuZC5la3N0ZXAuY29udGVudC1jb2xsZWN0aW9uXCIsXG4gICAgICAgIFwiZHVyYXRpb25cIjogXCIwXCIsXG4gICAgICAgIFwicHJpbWFyeUNhdGVnb3J5XCI6IFwiTWlsZXN0b25lXCIsXG4gICAgICAgIFwiY291cnNlQ2F0ZWdvcnlcIjogXCJNaWxlc3RvbmVcIixcbiAgICAgICAgXCJjcmVhdGVkQnlcIjogXCIyNTMxMWE0Zi1mYTQyLTRjZjctODgyYS01ZTc5MTk4ZWRmY2JcIixcbiAgICAgICAgXCJuYW1lXCI6IG1pbGVzdG9uZS5uYW1lLFxuICAgICAgICBcImNvbnRlbnRUeXBlXCI6IFwiQ291cnNlXCIsXG4gICAgICAgIFwiaXNMb2NrZWRcIjogc2hvdWxkQmVMb2NrZWQsXG4gICAgICAgIFwibWlsZXN0b25lSW5kZXhcIjogbWlsZXN0b25lSW5kZXgsXG4gICAgICAgIFwic3RhdHVzXCI6IDAsXG4gICAgICAgIFwiY29tcGxldGlvblN0YXR1c1wiOiAwLFxuICAgICAgICBcImNvbXBsZXRpb25QZXJjZW50YWdlXCI6IDAsXG4gICAgICAgIFwibGVhZk5vZGVzXCI6IFtdLFxuICAgICAgICAvLyBQcmUtY29tcHV0ZWQgZmxhZ3MgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvblxuICAgICAgICBcImlzTWlsZXN0b25lXCI6IHRydWUsXG4gICAgICAgIFwiaXNDb2xsZWN0aW9uXCI6IHRydWUsXG4gICAgICAgIFwiaXNNb2R1bGVcIjogZmFsc2UsXG4gICAgICAgIFwiaXNSZXNvdXJjZVwiOiBmYWxzZSxcbiAgICAgICAgXCJpc0xlYXJuaW5nUGF0aHdheVwiOiBmYWxzZSxcbiAgICAgICAgXCJwYXJlbnRcIjogY29udGVudEhlaXJhcmNoeS5pZGVudGlmaWVyXG4gICAgICB9XG5cbiAgICAgIG1pbGVTdG9uZURhdGFbJ2NoaWxkcmVuJ10gPSBbXVxuICAgICAgaWYgKG1pbGVzdG9uZT8uY291cnNlcyAmJiBtaWxlc3RvbmU/LmNvdXJzZXM/Lmxlbmd0aCkge1xuICAgICAgICBtaWxlc3RvbmUuY291cnNlcy5mb3JFYWNoKChtaWxlU3RvbmVDb3Vyc2U6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIFNldCBwYXJlbnQgcmVmZXJlbmNlIGZvciBjb3Vyc2VzIGluc2lkZSBtaWxlc3RvbmVcbiAgICAgICAgICBtaWxlU3RvbmVDb3Vyc2UucGFyZW50ID0gbWlsZXN0b25lLmlkXG4gICAgICAgICAgbWlsZVN0b25lQ291cnNlWydtb2R1bGVDb3VudCddID0gMFxuICAgICAgICAgIG1pbGVTdG9uZURhdGFbJ2R1cmF0aW9uJ10gPSBTdHJpbmcoTnVtYmVyKG1pbGVTdG9uZURhdGFbJ2R1cmF0aW9uJ10pICsgTnVtYmVyKG1pbGVTdG9uZUNvdXJzZT8uZHVyYXRpb24gfHwgMCkpXG4gICAgICAgICAgdGhpcy50b2NTdmMubWFwTW9kdWxlQ291bnQobWlsZVN0b25lQ291cnNlKVxuICAgICAgICAgIGlmIChtaWxlU3RvbmVDb3Vyc2UgJiYgbWlsZVN0b25lQ291cnNlPy5sZWFmTm9kZXMgJiYgbWlsZVN0b25lQ291cnNlPy5sZWFmTm9kZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgbGVhZk5vZGVzID0gWy4uLmxlYWZOb2RlcywgLi4ubWlsZVN0b25lQ291cnNlLmxlYWZOb2Rlc11cbiAgICAgICAgICAgIG1pbGVTdG9uZURhdGFbJ2xlYWZOb2RlcyddID0gWy4uLm1pbGVTdG9uZURhdGE/LmxlYWZOb2RlcywgLi4ubWlsZVN0b25lQ291cnNlLmxlYWZOb2Rlc11cblxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRvY1N2Yy5jaGVja01vZHVsZVdpc2VEYXRhKG1pbGVTdG9uZUNvdXJzZSlcbiAgICAgICAgfSlcblxuICAgICAgfVxuICAgICAgaWYgKG1pbGVzdG9uZT8uYXNzZXNzbWVudERldGFpbCkge1xuICAgICAgICAvLyBTZXQgcGFyZW50IHJlZmVyZW5jZSBmb3IgYXNzZXNzbWVudCBpbnNpZGUgbWlsZXN0b25lXG4gICAgICAgIG1pbGVzdG9uZS5hc3Nlc3NtZW50RGV0YWlsLnBhcmVudCA9IG1pbGVzdG9uZS5pZFxuICAgICAgICBsZWFmTm9kZXMucHVzaChtaWxlc3RvbmU/LmFzc2Vzc21lbnREZXRhaWw/LmlkZW50aWZpZXIpXG4gICAgICAgIG1pbGVTdG9uZURhdGFbJ2xlYWZOb2RlcyddID0gWy4uLm1pbGVTdG9uZURhdGE/LmxlYWZOb2RlcywgbWlsZXN0b25lPy5hc3Nlc3NtZW50RGV0YWlsPy5pZGVudGlmaWVyXVxuICAgICAgICBtaWxlU3RvbmVEYXRhWydjaGlsZHJlbiddLnB1c2gobWlsZXN0b25lPy5hc3Nlc3NtZW50RGV0YWlsKVxuICAgICAgfVxuICAgICAgbWlsZVN0b25lRGF0YVsnY2hpbGRyZW4nXSA9IFsuLi5taWxlc3RvbmVbJ2NvdXJzZXMnXSwgLi4ubWlsZVN0b25lRGF0YVsnY2hpbGRyZW4nXV1cbiAgICAgIG1pbGVTdG9uZURhdGFbJ2xlYWZOb2Rlc0NvdW50J10gPSBtaWxlU3RvbmVEYXRhWydsZWFmTm9kZXMnXS5sZW5ndGhcbiAgICAgICAgdGhpcy5tYXBNb2R1bGVDb3VudChtaWxlU3RvbmVEYXRhKVxuICAgICAgY29udGVudEhlaXJhcmNoeVsnY2hpbGRyZW4nXSA9IGNvbnRlbnRIZWlyYXJjaHlbJ2NoaWxkcmVuJ10gPyBbLi4uY29udGVudEhlaXJhcmNoeVsnY2hpbGRyZW4nXSwgbWlsZVN0b25lRGF0YV0gOiBbbWlsZVN0b25lRGF0YV1cblxuICAgICAgbWlsZXN0b25lSW5kZXgrK1xuICAgIH0pXG4gICAgY29udGVudEhlaXJhcmNoeVsnbGVhZk5vZGVzJ10gPSBbLi4ubGVhZk5vZGVzXVxuICAgIGNvbnRlbnRIZWlyYXJjaHlbJ2xlYWZOb2Rlc0NvdW50J10gPSBsZWFmTm9kZXMubGVuZ3RoXG4gICAgcmV0dXJuIGNvbnRlbnRIZWlyYXJjaHlcbiAgfVxuXG4gICBtYXBNb2R1bGVDb3VudChjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQpIHtcbiAgICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgY29udGVudC5jaGlsZHJlbi5tYXAoY2hpbGQgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkNPVVJTRSkge1xuICAgICAgICAgICAgaWYoY2hpbGQ/Lm1vZHVsZUNvdW50KSB7XG4gICAgICAgICAgICBjb250ZW50Wydtb2R1bGVDb3VudCddID0gY29udGVudFsnbW9kdWxlQ291bnQnXSA/IGNvbnRlbnRbJ21vZHVsZUNvdW50J10gKyBjaGlsZD8ubW9kdWxlQ291bnQgOiBcbiAgICAgICAgICAgIGNoaWxkPy5tb2R1bGVDb3VudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cblxuICBtYXBDb250ZW50SGllcmFyY2h5UHJvZ3Jlc3NVcGRhdGUoY29udGVudEhlaXJhcmNoeURhdGE6IGFueSwgZW5yb2xsbWVudExpc3REYXRhOiBhbnkpIHtcbiAgICBpZiAoY29udGVudEhlaXJhcmNoeURhdGEgJiYgY29udGVudEhlaXJhcmNoeURhdGEuY2hpbGRyZW4pIHtcbiAgICAgIGxldCB0b3RhbExlYWZOb2RlcyA9IDBcbiAgICAgIGxldCB0b3RhbENvbXBsZXRlZExlYWZOb2RlcyA9IDBcbiAgICAgIGxldCBMUGVucm9sbG1lbnQgPSB0aGlzLmZpbmRFbnJvbGxtZW50KGVucm9sbG1lbnRMaXN0RGF0YSwgY29udGVudEhlaXJhcmNoeURhdGE/LmlkZW50aWZpZXIpXG5cbiAgICAgIC8vIEZpcnN0IHBhc3M6IFVwZGF0ZSBwcm9ncmVzcyBmb3IgYWxsIGNvbnRlbnRcbiAgICAgIGNvbnRlbnRIZWlyYXJjaHlEYXRhLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gJ01pbGVzdG9uZScpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU1pbGVzdG9uZVByb2dyZXNzKGNoaWxkLCBjb250ZW50SGVpcmFyY2h5RGF0YT8uaWRlbnRpZmllciwgZW5yb2xsbWVudExpc3REYXRhKVxuICAgICAgICAgIHRvdGFsTGVhZk5vZGVzICs9IGNoaWxkLmxlYWZOb2Rlc0NvdW50IHx8IDBcbiAgICAgICAgICB0b3RhbENvbXBsZXRlZExlYWZOb2RlcyArPSBjaGlsZC5jb21wbGV0ZWRMZWFmTm9kZXNDb3VudCB8fCAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRm9yIHByZS1hc3Nlc3NtZW50IGFuZCBvdGhlciByb290LWxldmVsIGNvbnRlbnRcbiAgICAgICAgICAvLyBUcnkgdG8gZmluZCBlbnJvbGxtZW50IHdpdGggcGFyZW50IGlkZW50aWZpZXIgZmlyc3QsIHRoZW4gd2l0aCBjaGlsZCdzIG93biBpZGVudGlmaWVyXG4gICAgICAgICAgbGV0IGVucm9sbG1lbnQgPSB0aGlzLmZpbmRFbnJvbGxtZW50KGVucm9sbG1lbnRMaXN0RGF0YSwgY29udGVudEhlaXJhcmNoeURhdGE/LmlkZW50aWZpZXIpXG4gICAgICAgICAgaWYgKCFlbnJvbGxtZW50KSB7XG4gICAgICAgICAgICBlbnJvbGxtZW50ID0gdGhpcy5maW5kRW5yb2xsbWVudChlbnJvbGxtZW50TGlzdERhdGEsIGNoaWxkPy5pZGVudGlmaWVyKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwZGF0ZU5vZGVQcm9ncmVzcyhjaGlsZCwgZW5yb2xsbWVudClcbiAgICAgICAgICBjb25zdCBpc0NvbXBsZXRlZCA9IGNoaWxkLnN0YXR1cyA9PT0gMiB8fCBjaGlsZC5jb21wbGV0aW9uU3RhdHVzID09PSAyIHx8IGNoaWxkLmNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMFxuICAgICAgICAgIHRvdGFsTGVhZk5vZGVzICs9IGNoaWxkLmxlYWZOb2Rlc0NvdW50IHx8IDFcbiAgICAgICAgICB0b3RhbENvbXBsZXRlZExlYWZOb2RlcyArPSBpc0NvbXBsZXRlZCA/IChjaGlsZC5sZWFmTm9kZXNDb3VudCB8fCAxKSA6IDBcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmKExQZW5yb2xsbWVudCAmJiBMUGVucm9sbG1lbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCkge1xuICAgICAgICBjb250ZW50SGVpcmFyY2h5RGF0YS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IDEwMFxuICAgICAgICBjb250ZW50SGVpcmFyY2h5RGF0YS5jb21wbGV0aW9uU3RhdHVzID0gMlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRvdGFsTGVhZk5vZGVzID4gMCkge1xuICAgICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRQZXJjZW50YWdlID0gTWF0aC5yb3VuZCgoTnVtYmVyKHRvdGFsQ29tcGxldGVkTGVhZk5vZGVzKSAvIE51bWJlcih0b3RhbExlYWZOb2RlcykpICogMTAwKVxuICAgICAgICAgIGNvbnRlbnRIZWlyYXJjaHlEYXRhLmNvbXBsZXRpb25QZXJjZW50YWdlID0gaXNOYU4oY2FsY3VsYXRlZFBlcmNlbnRhZ2UpID8gMCA6IGNhbGN1bGF0ZWRQZXJjZW50YWdlXG4gICAgICAgICAgY29udGVudEhlaXJhcmNoeURhdGEuY29tcGxldGlvblN0YXR1cyA9IE51bWJlcihjb250ZW50SGVpcmFyY2h5RGF0YS5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwID8gMiA6IChjb250ZW50SGVpcmFyY2h5RGF0YS5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDAgPyAxIDogMCkpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTk9URTogTWlsZXN0b25lIGxvY2tpbmcgaXMgY29tcHV0ZWQgQUZURVIgaGFzaG1hcCBpcyBidWlsdFxuICAgICAgLy8gU2VlIGFwcC10b2MtaG9tZS12Mi5jb21wb25lbnQudHMgLT4gZmV0Y2hDb250ZW50SGllcmFyY2h5KCkgZmxvdzpcbiAgICAgIC8vIDEuIG1hcENvbnRlbnRIaWVyYXJjaHlQcm9ncmVzc1VwZGF0ZSAodGhpcyBtZXRob2QpIC0gdXBkYXRlcyBwcm9ncmVzcyBvbiBjb250ZW50IHRyZWVcbiAgICAgIC8vIDIuIGNhbGxIaXJhcmNoeVByb2dyZXNzSGFzaG1hcCgpIC0gYnVpbGRzIGhhc2htYXAgZnJvbSBjb250ZW50IHRyZWVcbiAgICAgIC8vIDMuIGNvbXB1dGVNaWxlc3RvbmVMb2NraW5nU3RhdHVzKCkgLSBjb21wdXRlcyBsb2NrcyB1c2luZyBoYXNobWFwXG4gICAgfVxuICAgIHJldHVybiBjb250ZW50SGVpcmFyY2h5RGF0YVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNaWxlc3RvbmVQcm9ncmVzcyhtaWxlc3RvbmU6IGFueSwgcGFyZW50Q29udGVudElkZW50aWZpZXI6IHN0cmluZywgZW5yb2xsbWVudExpc3REYXRhOiBhbnkpIHtcbiAgICBsZXQgdG90YWxMZWFmTm9kZXMgPSAwXG4gICAgbGV0IHRvdGFsQ29tcGxldGVkTGVhZk5vZGVzID0gMFxuICAgIGxldCBjb21wbGV0ZWRDb3Vyc2VzID0gMFxuICAgIGxldCB0b3RhbENvdXJzZXMgPSAwXG5cbiAgICBpZiAobWlsZXN0b25lLmNoaWxkcmVuKSB7XG4gICAgICBtaWxlc3RvbmUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoY2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSAnQ291cnNlJykge1xuICAgICAgICAgIHRvdGFsQ291cnNlcyArPSAxXG4gICAgICAgICAgdGhpcy51cGRhdGVDb3Vyc2VQcm9ncmVzcyhjaGlsZCwgcGFyZW50Q29udGVudElkZW50aWZpZXIsIGVucm9sbG1lbnRMaXN0RGF0YSlcbiAgICAgICAgICAvLyBDaGVjayBib3RoIHN0YXR1cyBhbmQgY29tcGxldGlvblN0YXR1cyBmb3IgY29tcGxldGlvblxuICAgICAgICAgIGlmIChjaGlsZC5zdGF0dXMgPT09IDIgfHwgY2hpbGQuY29tcGxldGlvblN0YXR1cyA9PT0gMiB8fCBjaGlsZC5jb21wbGV0aW9uUGVyY2VudGFnZSA+PSAxMDApIHtcbiAgICAgICAgICAgIGNvbXBsZXRlZENvdXJzZXMgKz0gMVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb3IgYXNzZXNzbWVudHMgYW5kIG90aGVyIGNvbnRlbnQsIHRyeSBtdWx0aXBsZSBlbnJvbGxtZW50IHNvdXJjZXNcbiAgICAgICAgICAvLyBGaXJzdCB0cnkgcGFyZW50IExlYXJuaW5nIFBhdGh3YXkgZW5yb2xsbWVudFxuICAgICAgICAgIGxldCBlbnJvbGxtZW50ID0gdGhpcy5maW5kRW5yb2xsbWVudChlbnJvbGxtZW50TGlzdERhdGEsIHBhcmVudENvbnRlbnRJZGVudGlmaWVyKVxuICAgICAgICAgIGlmICghZW5yb2xsbWVudCkge1xuICAgICAgICAgICAgLy8gVHJ5IG1pbGVzdG9uZSBlbnJvbGxtZW50XG4gICAgICAgICAgICBlbnJvbGxtZW50ID0gdGhpcy5maW5kRW5yb2xsbWVudChlbnJvbGxtZW50TGlzdERhdGEsIG1pbGVzdG9uZT8uaWRlbnRpZmllcilcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVOb2RlUHJvZ3Jlc3MoY2hpbGQsIGVucm9sbG1lbnQpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsZWFmTm9kZXMgPSBjaGlsZC5sZWFmTm9kZXNDb3VudCB8fCAxXG4gICAgICAgIHRvdGFsTGVhZk5vZGVzICs9IGxlYWZOb2Rlc1xuICAgICAgICAvLyBDaGVjayBib3RoIHN0YXR1cyBhbmQgY29tcGxldGlvblN0YXR1cyBmb3IgY29tcGxldGlvblxuICAgICAgICBpZiAoY2hpbGQuc3RhdHVzID09PSAyIHx8IGNoaWxkLmNvbXBsZXRpb25TdGF0dXMgPT09IDIgfHwgY2hpbGQuY29tcGxldGlvblBlcmNlbnRhZ2UgPj0gMTAwKSB7XG4gICAgICAgICAgdG90YWxDb21wbGV0ZWRMZWFmTm9kZXMgKz0gbGVhZk5vZGVzXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgbWlsZXN0b25lLmxlYWZOb2Rlc0NvdW50ID0gdG90YWxMZWFmTm9kZXNcbiAgICBtaWxlc3RvbmUuY29tcGxldGVkTGVhZk5vZGVzQ291bnQgPSB0b3RhbENvbXBsZXRlZExlYWZOb2Rlc1xuICAgIG1pbGVzdG9uZS50b3RhbENvdXJzZXMgPSB0b3RhbENvdXJzZXNcbiAgICBtaWxlc3RvbmUuY29tcGxldGVkQ291cnNlcyA9IGNvbXBsZXRlZENvdXJzZXNcblxuICAgIGlmICh0b3RhbExlYWZOb2RlcyA+IDApIHtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRQZXJjZW50YWdlID0gTWF0aC5yb3VuZCgodG90YWxDb21wbGV0ZWRMZWFmTm9kZXMgLyB0b3RhbExlYWZOb2RlcykgKiAxMDApXG4gICAgICBtaWxlc3RvbmUuY29tcGxldGlvblBlcmNlbnRhZ2UgPSBpc05hTihjYWxjdWxhdGVkUGVyY2VudGFnZSkgPyAwIDogY2FsY3VsYXRlZFBlcmNlbnRhZ2VcbiAgICAgIG1pbGVzdG9uZS5jb21wbGV0aW9uU3RhdHVzID0gTnVtYmVyKG1pbGVzdG9uZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwID8gMiA6IChtaWxlc3RvbmUuY29tcGxldGlvblBlcmNlbnRhZ2UgPiAwID8gMSA6IDApKVxuICAgICAgbWlsZXN0b25lLnN0YXR1cyA9IE51bWJlcihtaWxlc3RvbmUuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCA/IDIgOiAobWlsZXN0b25lLmNvbXBsZXRpb25QZXJjZW50YWdlID4gMCA/IDEgOiAwKSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU5vZGVQcm9ncmVzcyhub2RlOiBhbnksIGVucm9sbG1lbnQ6IGFueSkge1xuICAgIGlmICghZW5yb2xsbWVudCkge1xuICAgICAgLy8gSWYgbm8gZW5yb2xsbWVudCBkYXRhLCBwcmVzZXJ2ZSBleGlzdGluZyBjb21wbGV0aW9uIGRhdGEgZnJvbSBjb250ZW50IGhpZXJhcmNoeVxuICAgICAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGFzc2Vzc21lbnRzIHRoYXQgbWF5IGhhdmUgY29tcGxldGlvbiBkYXRhIGJ1dCBubyBlbnJvbGxtZW50IGVudHJ5XG4gICAgICBpZiAobm9kZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gdW5kZWZpbmVkICYmIG5vZGUuY29tcGxldGlvblN0YXR1cyA9PT0gdW5kZWZpbmVkICYmIG5vZGUuc3RhdHVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9kZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IDBcbiAgICAgICAgbm9kZS5jb21wbGV0aW9uU3RhdHVzID0gMFxuICAgICAgICBub2RlLnN0YXR1cyA9IDBcbiAgICAgIH1cbiAgICAgIC8vIE90aGVyd2lzZSwga2VlcCB0aGUgZXhpc3RpbmcgdmFsdWVzIGZyb20gY29udGVudCBoaWVyYXJjaHlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBub2RlIGl0c2VsZiBpcyB0aGUgZW5yb2xsZWQgY29udGVudCAoZGlyZWN0IGVucm9sbG1lbnQpXG4gICAgLy8gVGhpcyBoYXBwZW5zIGZvciBwcmUtYXNzZXNzbWVudHMgYW5kIHN0YW5kYWxvbmUgY29udGVudFxuICAgIGNvbnN0IGlzRGlyZWN0RW5yb2xsbWVudCA9IGVucm9sbG1lbnQuY29sbGVjdGlvbklkID09PSBub2RlLmlkZW50aWZpZXIgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVucm9sbG1lbnQuY29udGVudElkID09PSBub2RlLmlkZW50aWZpZXJcbiAgICBcbiAgICBpZiAoaXNEaXJlY3RFbnJvbGxtZW50KSB7XG4gICAgICBcbiAgICAgIC8vIFVzZSBlbnJvbGxtZW50J3MgZGlyZWN0IHByb2dyZXNzXG4gICAgICBjb25zdCBwcm9ncmVzcyA9IGVucm9sbG1lbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgZW5yb2xsbWVudC5wcm9ncmVzcyB8fCAwXG4gICAgICBjb25zdCBzdGF0dXMgPSBOdW1iZXIoZW5yb2xsbWVudC5zdGF0dXMpIHx8IDBcbiAgICAgIFxuICAgICAgbm9kZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IHByb2dyZXNzXG4gICAgICBub2RlLmNvbXBsZXRpb25TdGF0dXMgPSBzdGF0dXNcbiAgICAgIG5vZGUuc3RhdHVzID0gc3RhdHVzXG4gICAgICBcbiAgICAgIGNvbnNvbGUubG9nKGBEaXJlY3QgZW5yb2xsbWVudCBmb3VuZCBmb3IgJHtub2RlLmlkZW50aWZpZXJ9OmAsIHtcbiAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IHByb2dyZXNzLFxuICAgICAgICBjb21wbGV0aW9uU3RhdHVzOiBzdGF0dXMsXG4gICAgICAgIGVucm9sbG1lbnREYXRhOiB7IFxuICAgICAgICAgIHByb2dyZXNzOiBlbnJvbGxtZW50LnByb2dyZXNzLCBcbiAgICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogZW5yb2xsbWVudC5jb21wbGV0aW9uUGVyY2VudGFnZSxcbiAgICAgICAgICBzdGF0dXM6IGVucm9sbG1lbnQuc3RhdHVzIFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gVHJ5IGJvdGggY29udGVudElkIGFuZCBjb2xsZWN0aW9uSWQgYXMgdGhlIEFQSSByZXNwb25zZSBtYXkgdXNlIGVpdGhlciBmaWVsZFxuICAgIGNvbnN0IG5vZGVFbnJvbGxEYXRhID0gZW5yb2xsbWVudD8uY29udGVudExpc3Q/LmZpbmQoKGVsZTogYW55KSA9PiBcbiAgICAgIGVsZT8uY29udGVudElkID09PSBub2RlLmlkZW50aWZpZXIgfHwgZWxlPy5jb2xsZWN0aW9uSWQgPT09IG5vZGUuaWRlbnRpZmllclxuICAgIClcbiAgICBcbiAgICBpZiAoZW5yb2xsbWVudCAmJiBub2RlRW5yb2xsRGF0YSAmJiBub2RlRW5yb2xsRGF0YS5zdGF0dXMgPCAyKSB7XG4gICAgICBub2RlLmNvbXBsZXRpb25QZXJjZW50YWdlID0gbm9kZUVucm9sbERhdGEuY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgbm9kZUVucm9sbERhdGEucHJvZ3Jlc3MgfHwgMFxuICAgICAgbm9kZS5jb21wbGV0aW9uU3RhdHVzID0gTnVtYmVyKG5vZGVFbnJvbGxEYXRhLnN0YXR1cykgfHwgMFxuICAgICAgbm9kZS5zdGF0dXMgPSBOdW1iZXIobm9kZUVucm9sbERhdGEuc3RhdHVzKSB8fCAwXG4gICAgfSBlbHNlIGlmIChlbnJvbGxtZW50ICYmIG5vZGVFbnJvbGxEYXRhICYmIG5vZGVFbnJvbGxEYXRhLnN0YXR1cyA9PT0gMikge1xuICAgICAgbm9kZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IDEwMFxuICAgICAgbm9kZS5jb21wbGV0aW9uU3RhdHVzID0gMlxuICAgICAgbm9kZS5zdGF0dXMgPSAyXG4gICAgfSBlbHNlIGlmIChlbnJvbGxtZW50ICYmICFub2RlRW5yb2xsRGF0YSkge1xuICAgICAgLy8gRW5yb2xsbWVudCBleGlzdHMgYnV0IHRoaXMgbm9kZSBpcyBub3QgaW4gY29udGVudExpc3RcbiAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBmb3IgY29tcGxldGVkIGFzc2Vzc21lbnRzIC0gcHJlc2VydmUgdGhlaXIgY29tcGxldGlvbiBkYXRhIGZyb20gY29udGVudCBoaWVyYXJjaHlcbiAgICAgIC8vIE9ubHkgcmVzZXQgdG8gMCBpZiB0aGVyZSdzIG5vIGNvbXBsZXRpb24gZGF0YSBhdCBhbGxcbiAgICAgIGlmIChub2RlLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSB1bmRlZmluZWQgJiYgbm9kZS5jb21wbGV0aW9uU3RhdHVzID09PSB1bmRlZmluZWQgJiYgbm9kZS5zdGF0dXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBub2RlLmNvbXBsZXRpb25QZXJjZW50YWdlID0gMFxuICAgICAgICBub2RlLmNvbXBsZXRpb25TdGF0dXMgPSAwXG4gICAgICAgIG5vZGUuc3RhdHVzID0gMFxuICAgICAgfVxuICAgICAgLy8gT3RoZXJ3aXNlIGtlZXAgZXhpc3RpbmcgdmFsdWVzIGZyb20gY29udGVudCBoaWVyYXJjaHlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gZW5yb2xsbWVudCBhdCBhbGwgLSByZXNldCB0byAwXG4gICAgICBub2RlLmNvbXBsZXRpb25QZXJjZW50YWdlID0gMFxuICAgICAgbm9kZS5jb21wbGV0aW9uU3RhdHVzID0gMFxuICAgICAgbm9kZS5zdGF0dXMgPSAwXG4gICAgfVxuICAgIFxuICAgIGNvbnNvbGUubG9nKGBVcGRhdGVkIG5vZGUgcHJvZ3Jlc3MgZm9yICR7bm9kZS5pZGVudGlmaWVyfTpgLCB7XG4gICAgICBjb21wbGV0aW9uU3RhdHVzOiBub2RlLmNvbXBsZXRpb25TdGF0dXMsXG4gICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogbm9kZS5jb21wbGV0aW9uUGVyY2VudGFnZSxcbiAgICAgIHN0YXR1czogbm9kZS5zdGF0dXNcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb3Vyc2VQcm9ncmVzcyhjb3Vyc2U6IGFueSwgcGFyZW50Q29udGVudElkZW50aWZpZXIsIGVucm9sbG1lbnRMaXN0RGF0YTogYW55KSB7XG4gICAgY29uc3QgZW5yb2xsbWVudCA9IHRoaXMuZmluZEVucm9sbG1lbnQoZW5yb2xsbWVudExpc3REYXRhLCBjb3Vyc2U/LmlkZW50aWZpZXIpXG5cbiAgICBpZiAoZW5yb2xsbWVudD8uY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCkge1xuICAgICAgLy8gRW5yb2xsbWVudCBzaG93cyAxMDAlIC0gbWFyayBjb3Vyc2UgYXMgY29tcGxldGVcbiAgICAgIGNvdXJzZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IDEwMFxuICAgICAgY291cnNlLmNvbXBsZXRpb25TdGF0dXMgPSAyXG4gICAgICBpZiAoZW5yb2xsbWVudC5pc3N1ZWRDZXJ0aWZpY2F0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY2VydGlmaWNhdGU6IGFueSA9IGVucm9sbG1lbnQuaXNzdWVkQ2VydGlmaWNhdGVzLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShhLmxhc3RJc3N1ZWRPbikuZ2V0VGltZSgpIC0gbmV3IERhdGUoYi5sYXN0SXNzdWVkT24pLmdldFRpbWUoKSlcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNlcnRJZDogYW55ID0gY2VydGlmaWNhdGVbMF0uaWRlbnRpZmllclxuICAgICAgICAgICAgICAgICAgY291cnNlLmlzc3VlZENlcnRpZmljYXRlc0lkID0gY2VydElkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgdGhpcy50b2NTdmMubWFwQ29tcGxldGlvbkNoaWxkUGVyY2VudGFnZVByb2dyYW0oY291cnNlKVxuICAgIH0gZWxzZSBpZiAoZW5yb2xsbWVudCAmJiBlbnJvbGxtZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID4gMCkge1xuICAgICAgLy8gRW5yb2xsbWVudCBoYXMgcGFydGlhbCBwcm9ncmVzc1xuICAgICAgY291cnNlLmNvbXBsZXRpb25QZXJjZW50YWdlID0gZW5yb2xsbWVudC5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCAwXG4gICAgICBjb3Vyc2UuY29tcGxldGlvblN0YXR1cyA9IDFcbiAgICAgIC8vIEFsc28gdXBkYXRlIGNoaWxkcmVuXG4gICAgICBpZiAoY291cnNlLmNoaWxkcmVuICYmIGNvdXJzZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvdXJzZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XG4gICAgICAgICAgXG5cbiAgICAgICAgICAvLyBJZiBjaGlsZCBpcyBhIG1vZHVsZSwgdXBkYXRlIGl0cyBjaGlsZHJlbiAocmVzb3VyY2VzKSBhcyB3ZWxsXG4gICAgICAgICAgaWYgKGNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFICYmIGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNoaWxkLmNoaWxkcmVuLmZvckVhY2goKHJlc291cmNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVOb2RlUHJvZ3Jlc3MocmVzb3VyY2UsIGVucm9sbG1lbnQpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVOb2RlUHJvZ3Jlc3MoY2hpbGQsIGVucm9sbG1lbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY291cnNlLmNoaWxkcmVuICYmIGNvdXJzZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxldCB0b3RhbExlYWZOb2RlcyA9IGNvdXJzZS5sZWFmTm9kZXNDb3VudCB8fCAwXG4gICAgICAgIGxldCB0b3RhbENvbXBsZXRlZCA9IDBcblxuICAgICAgICBjb3Vyc2UuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIElmIGNoaWxkIGlzIGEgbW9kdWxlLCB1cGRhdGUgaXRzIGNoaWxkcmVuIChyZXNvdXJjZXMpIGFzIHdlbGxcbiAgICAgICAgICBpZiAoY2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5NT0RVTEUgJiYgY2hpbGQuY2hpbGRyZW4gJiYgY2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY2hpbGQuY2hpbGRyZW4uZm9yRWFjaCgocmVzb3VyY2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU5vZGVQcm9ncmVzcyhyZXNvdXJjZSwgZW5yb2xsbWVudClcbiAgICAgICAgICAgICAgaWYgKHJlc291cmNlLmNvbXBsZXRpb25TdGF0dXMgPT09IDIgfHwgcmVzb3VyY2UuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCkge1xuICAgICAgICAgICAgICAgIHRvdGFsQ29tcGxldGVkICs9IHJlc291cmNlLmxlYWZOb2Rlc0NvdW50IHx8IDFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXBkYXRlTm9kZVByb2dyZXNzKGNoaWxkLCBlbnJvbGxtZW50KVxuXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjaGlsZC5jb21wbGV0aW9uU3RhdHVzID09PSAyIHx8IGNoaWxkLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDApIHtcbiAgICAgICAgICAgIHRvdGFsQ29tcGxldGVkICs9IGNoaWxkLmxlYWZOb2Rlc0NvdW50IHx8IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gSWYgaXQncyBhIGNvbGxlY3Rpb24gYW5kIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIGVucm9sbG1lbnQgcHJvZ3Jlc3MsIGNhbGN1bGF0ZSBpdFxuICAgICAgICBpZiAoIWVucm9sbG1lbnQgfHwgIWNvdXJzZS5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCBjb3Vyc2UuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDApIHtcbiAgICAgICAgICBpZiAoIXRvdGFsTGVhZk5vZGVzKSB7XG4gICAgICAgICAgICB0b3RhbExlYWZOb2RlcyA9IGNvdXJzZS5jaGlsZHJlbi5yZWR1Y2UoKGFjYzogbnVtYmVyLCBjdXJyOiBhbnkpID0+IGFjYyArIChjdXJyLmxlYWZOb2Rlc0NvdW50IHx8IDEpLCAwKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodG90YWxMZWFmTm9kZXMgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxjdWxhdGVkUGVyY2VudGFnZSA9IE1hdGgucm91bmQoKHRvdGFsQ29tcGxldGVkIC8gdG90YWxMZWFmTm9kZXMpICogMTAwKVxuICAgICAgICAgICAgY291cnNlLmNvbXBsZXRpb25QZXJjZW50YWdlID0gaXNOYU4oY2FsY3VsYXRlZFBlcmNlbnRhZ2UpID8gMCA6IGNhbGN1bGF0ZWRQZXJjZW50YWdlXG4gICAgICAgICAgICBjb3Vyc2UuY29tcGxldGlvblN0YXR1cyA9IE51bWJlcihjb3Vyc2UuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCA/IDIgOiAoY291cnNlLmNvbXBsZXRpb25QZXJjZW50YWdlID4gMCA/IDEgOiAwKSlcblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZEVucm9sbG1lbnQoZW5yb2xsbWVudExpc3Q6IGFueSwgaWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgaWYgKCFlbnJvbGxtZW50TGlzdCB8fCAhZW5yb2xsbWVudExpc3QubGVuZ3RoKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiBlbnJvbGxtZW50TGlzdC5maW5kKChlbDogYW55KSA9PiBlbC5jb2xsZWN0aW9uSWQgPT09IGlkZW50aWZpZXIgfHwgZWwuY29udGVudElkID09PSBpZGVudGlmaWVyKVxuICB9XG5cblxuXG59XG5cbiJdfQ==
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy12Mi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL3NlcnZpY2VzL2FwcC10b2MtdjIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBSWpELE1BQU0sT0FBTyxlQUFlO0lBRTFCLFlBQW9CLE1BQXFCO1FBQXJCLFdBQU0sR0FBTixNQUFNLENBQWU7SUFBSSxDQUFDO0lBRTlDLHNCQUFzQixDQUFDLGVBQW9CO1FBQ3pDLElBQUksZ0JBQWdCLEdBQVEsRUFBRSxHQUFHLGVBQWUsRUFBRSxDQUFBO1FBQ2xELElBQUksU0FBUyxHQUFhLEVBQUUsQ0FBQTtRQUM1QixJQUFJLGdCQUFnQixDQUFDLDZCQUE2QixDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5SCxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDakMsbUVBQW1FO1lBQ25FLGdCQUFnQixDQUFDLDZCQUE2QixDQUFDLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQTtZQUNwRiw4REFBOEQ7WUFDOUQsZ0JBQWdCLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFBO1lBR3RFLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUE7WUFDbEYsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUscUJBQXFCLElBQUksZUFBZSxFQUFFLDJCQUEyQixFQUFFLFVBQVUsQ0FB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QyxDQUFDLENBQUE7cUJBQ3pHO29CQUNELElBQUksY0FBYyxHQUFHLENBQUMsRUFBRTt3QkFDdEIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFBO3dCQUNoRixNQUFNLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUE7d0JBQ3BGLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLG9CQUFvQixLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtxQkFFdEg7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVPLGNBQWMsQ0FBQyxjQUFtQixFQUFFLFVBQWtCO1FBQzVELElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBQzFELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksS0FBSyxVQUFVLElBQUksRUFBRSxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUMsQ0FBQTtJQUN4RyxDQUFDOytHQWpWVSxlQUFlO21IQUFmLGVBQWUsY0FGZCxNQUFNOzs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcFRvY1NlcnZpY2UgfSBmcm9tICcuL2FwcC10b2Muc2VydmljZSc7XG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12Mic7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBcHBUb2NWMlNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdG9jU3ZjOiBBcHBUb2NTZXJ2aWNlKSB7IH1cblxuICBjb25zdHJ1Y3RIZWlyYXJjaHlEYXRhKGNvbnRlbnRSZWFkRGF0YTogYW55KTogYW55IHtcbiAgICBsZXQgY29udGVudEhlaXJhcmNoeTogYW55ID0geyAuLi5jb250ZW50UmVhZERhdGEgfVxuICAgIGxldCBsZWFmTm9kZXM6IHN0cmluZ1tdID0gW11cbiAgICBpZiAoY29udGVudEhlaXJhcmNoeVsncHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsJ10gJiYgT2JqZWN0LmtleXMoY29udGVudEhlaXJhcmNoeVsncHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsJ10pLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnRlbnRIZWlyYXJjaHlbJ2NoaWxkcmVuJ10gPSBbXVxuICAgICAgLy8gU2V0IHBhcmVudCByZWZlcmVuY2UgZm9yIHByZWxpbWluYXJ5IGFzc2Vzc21lbnQgKHByZS1hc3Nlc3NtZW50KVxuICAgICAgY29udGVudEhlaXJhcmNoeVsncHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsJ10ucGFyZW50ID0gY29udGVudEhlaXJhcmNoeS5pZGVudGlmaWVyXG4gICAgICAvLyBNYXJrIHRoaXMgYXMgdGhlIHByZS1hc3Nlc3NtZW50IGZvciBtaWxlc3RvbmUgbG9ja2luZyBsb2dpY1xuICAgICAgY29udGVudEhlaXJhcmNoeVsncHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsJ10uaXNQcmVBc3Nlc3NtZW50ID0gdHJ1ZVxuICAgICAgXG4gICAgIFxuICAgICAgY29udGVudEhlaXJhcmNoeVsnY2hpbGRyZW4nXS5wdXNoKGNvbnRlbnRIZWlyYXJjaHlbJ3ByZWxpbWluYXJ5QXNzZXNzbWVudERldGFpbCddKVxuICAgICAgbGVhZk5vZGVzLnB1c2goY29udGVudFJlYWREYXRhPy5wcmVsaW1pbmFyeUFzc2Vzc21lbnQgfHwgY29udGVudFJlYWREYXRhPy5wcmVsaW1pbmFyeUFzc2Vzc21lbnREZXRhaWw/LmlkZW50aWZpZXIpXG4gICAgfVxuXG4gICAgLy8gVHJhY2sgbWlsZXN0b25lIGluZGV4IGZvciBwcm9wZXIgbG9ja2luZyBsb2dpY1xuICAgIC8vIEFsbCBtaWxlc3RvbmVzIGFyZSBsb2NrZWQgYnkgZGVmYXVsdCAtIHVubG9ja2luZyBpcyBjb21wdXRlZCBiYXNlZCBvbiBwcm9ncmVzc1xuICAgIGxldCBtaWxlc3RvbmVJbmRleCA9IDBcbiAgICBjb250ZW50SGVpcmFyY2h5WydtaWxlc3RvbmVzX3YxJ10uZm9yRWFjaCgobWlsZXN0b25lOiBhbnkpID0+IHtcbiAgICAgIC8vIEFsbCBtaWxlc3RvbmVzIGFyZSBsb2NrZWQgYnkgZGVmYXVsdFxuICAgICAgLy8gTTEgdW5sb2NrcyB3aGVuIHByZS1hc3Nlc3NtZW50IGlzIGNvbXBsZXRlZFxuICAgICAgLy8gTTIrIHVubG9jayB3aGVuIHByZXZpb3VzIG1pbGVzdG9uZSdzIG1hbmRhdG9yeSBjb250ZW50ICsgYXNzZXNzbWVudCBhcmUgY29tcGxldGVkXG4gICAgICBjb25zdCBzaG91bGRCZUxvY2tlZCA9IHRydWVcblxuICAgICAgbGV0IG1pbGVTdG9uZURhdGE6IGFueSA9IHtcbiAgICAgICAgXCJpZGVudGlmaWVyXCI6IG1pbGVzdG9uZS5pZCxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBtaWxlc3RvbmUuZGVzY3JpcHRpb24sXG4gICAgICAgIFwibWltZVR5cGVcIjogXCJhcHBsaWNhdGlvbi92bmQuZWtzdGVwLmNvbnRlbnQtY29sbGVjdGlvblwiLFxuICAgICAgICBcImR1cmF0aW9uXCI6IFwiMFwiLFxuICAgICAgICBcInByaW1hcnlDYXRlZ29yeVwiOiBcIk1pbGVzdG9uZVwiLFxuICAgICAgICBcImNvdXJzZUNhdGVnb3J5XCI6IFwiTWlsZXN0b25lXCIsXG4gICAgICAgIFwiY3JlYXRlZEJ5XCI6IFwiMjUzMTFhNGYtZmE0Mi00Y2Y3LTg4MmEtNWU3OTE5OGVkZmNiXCIsXG4gICAgICAgIFwibmFtZVwiOiBtaWxlc3RvbmUubmFtZSxcbiAgICAgICAgXCJjb250ZW50VHlwZVwiOiBcIkNvdXJzZVwiLFxuICAgICAgICBcImlzTG9ja2VkXCI6IHNob3VsZEJlTG9ja2VkLFxuICAgICAgICBcIm1pbGVzdG9uZUluZGV4XCI6IG1pbGVzdG9uZUluZGV4LFxuICAgICAgICBcInN0YXR1c1wiOiAwLFxuICAgICAgICBcImNvbXBsZXRpb25TdGF0dXNcIjogMCxcbiAgICAgICAgXCJjb21wbGV0aW9uUGVyY2VudGFnZVwiOiAwLFxuICAgICAgICBcImxlYWZOb2Rlc1wiOiBbXSxcbiAgICAgICAgLy8gUHJlLWNvbXB1dGVkIGZsYWdzIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25cbiAgICAgICAgXCJpc01pbGVzdG9uZVwiOiB0cnVlLFxuICAgICAgICBcImlzQ29sbGVjdGlvblwiOiB0cnVlLFxuICAgICAgICBcImlzTW9kdWxlXCI6IGZhbHNlLFxuICAgICAgICBcImlzUmVzb3VyY2VcIjogZmFsc2UsXG4gICAgICAgIFwiaXNMZWFybmluZ1BhdGh3YXlcIjogZmFsc2UsXG4gICAgICAgIFwicGFyZW50XCI6IGNvbnRlbnRIZWlyYXJjaHkuaWRlbnRpZmllclxuICAgICAgfVxuXG4gICAgICBtaWxlU3RvbmVEYXRhWydjaGlsZHJlbiddID0gW11cbiAgICAgIGlmIChtaWxlc3RvbmU/LmNvdXJzZXMgJiYgbWlsZXN0b25lPy5jb3Vyc2VzPy5sZW5ndGgpIHtcbiAgICAgICAgbWlsZXN0b25lLmNvdXJzZXMuZm9yRWFjaCgobWlsZVN0b25lQ291cnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBTZXQgcGFyZW50IHJlZmVyZW5jZSBmb3IgY291cnNlcyBpbnNpZGUgbWlsZXN0b25lXG4gICAgICAgICAgbWlsZVN0b25lQ291cnNlLnBhcmVudCA9IG1pbGVzdG9uZS5pZFxuICAgICAgICAgIG1pbGVTdG9uZUNvdXJzZVsnbW9kdWxlQ291bnQnXSA9IDBcbiAgICAgICAgICBtaWxlU3RvbmVEYXRhWydkdXJhdGlvbiddID0gU3RyaW5nKE51bWJlcihtaWxlU3RvbmVEYXRhWydkdXJhdGlvbiddKSArIE51bWJlcihtaWxlU3RvbmVDb3Vyc2U/LmR1cmF0aW9uIHx8IDApKVxuICAgICAgICAgIHRoaXMudG9jU3ZjLm1hcE1vZHVsZUNvdW50KG1pbGVTdG9uZUNvdXJzZSlcbiAgICAgICAgICBpZiAobWlsZVN0b25lQ291cnNlICYmIG1pbGVTdG9uZUNvdXJzZT8ubGVhZk5vZGVzICYmIG1pbGVTdG9uZUNvdXJzZT8ubGVhZk5vZGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxlYWZOb2RlcyA9IFsuLi5sZWFmTm9kZXMsIC4uLm1pbGVTdG9uZUNvdXJzZS5sZWFmTm9kZXNdXG4gICAgICAgICAgICBtaWxlU3RvbmVEYXRhWydsZWFmTm9kZXMnXSA9IFsuLi5taWxlU3RvbmVEYXRhPy5sZWFmTm9kZXMsIC4uLm1pbGVTdG9uZUNvdXJzZS5sZWFmTm9kZXNdXG5cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50b2NTdmMuY2hlY2tNb2R1bGVXaXNlRGF0YShtaWxlU3RvbmVDb3Vyc2UpXG4gICAgICAgIH0pXG5cbiAgICAgIH1cbiAgICAgIGlmIChtaWxlc3RvbmU/LmFzc2Vzc21lbnREZXRhaWwpIHtcbiAgICAgICAgLy8gU2V0IHBhcmVudCByZWZlcmVuY2UgZm9yIGFzc2Vzc21lbnQgaW5zaWRlIG1pbGVzdG9uZVxuICAgICAgICBtaWxlc3RvbmUuYXNzZXNzbWVudERldGFpbC5wYXJlbnQgPSBtaWxlc3RvbmUuaWRcbiAgICAgICAgbGVhZk5vZGVzLnB1c2gobWlsZXN0b25lPy5hc3Nlc3NtZW50RGV0YWlsPy5pZGVudGlmaWVyKVxuICAgICAgICBtaWxlU3RvbmVEYXRhWydsZWFmTm9kZXMnXSA9IFsuLi5taWxlU3RvbmVEYXRhPy5sZWFmTm9kZXMsIG1pbGVzdG9uZT8uYXNzZXNzbWVudERldGFpbD8uaWRlbnRpZmllcl1cbiAgICAgICAgbWlsZVN0b25lRGF0YVsnY2hpbGRyZW4nXS5wdXNoKG1pbGVzdG9uZT8uYXNzZXNzbWVudERldGFpbClcbiAgICAgIH1cbiAgICAgIG1pbGVTdG9uZURhdGFbJ2NoaWxkcmVuJ10gPSBbLi4ubWlsZXN0b25lWydjb3Vyc2VzJ10sIC4uLm1pbGVTdG9uZURhdGFbJ2NoaWxkcmVuJ11dXG4gICAgICBtaWxlU3RvbmVEYXRhWydsZWFmTm9kZXNDb3VudCddID0gbWlsZVN0b25lRGF0YVsnbGVhZk5vZGVzJ10ubGVuZ3RoXG4gICAgICAgIHRoaXMubWFwTW9kdWxlQ291bnQobWlsZVN0b25lRGF0YSlcbiAgICAgIGNvbnRlbnRIZWlyYXJjaHlbJ2NoaWxkcmVuJ10gPSBjb250ZW50SGVpcmFyY2h5WydjaGlsZHJlbiddID8gWy4uLmNvbnRlbnRIZWlyYXJjaHlbJ2NoaWxkcmVuJ10sIG1pbGVTdG9uZURhdGFdIDogW21pbGVTdG9uZURhdGFdXG5cbiAgICAgIG1pbGVzdG9uZUluZGV4KytcbiAgICB9KVxuICAgIGNvbnRlbnRIZWlyYXJjaHlbJ2xlYWZOb2RlcyddID0gWy4uLmxlYWZOb2Rlc11cbiAgICBjb250ZW50SGVpcmFyY2h5WydsZWFmTm9kZXNDb3VudCddID0gbGVhZk5vZGVzLmxlbmd0aFxuICAgIHJldHVybiBjb250ZW50SGVpcmFyY2h5XG4gIH1cblxuICAgbWFwTW9kdWxlQ291bnQoY29udGVudDogTnNDb250ZW50LklDb250ZW50KSB7XG4gICAgICBpZiAoY29udGVudCAmJiBjb250ZW50LmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnRlbnQuY2hpbGRyZW4ubWFwKGNoaWxkID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UpIHtcbiAgICAgICAgICAgIGlmKGNoaWxkPy5tb2R1bGVDb3VudCkge1xuICAgICAgICAgICAgY29udGVudFsnbW9kdWxlQ291bnQnXSA9IGNvbnRlbnRbJ21vZHVsZUNvdW50J10gPyBjb250ZW50Wydtb2R1bGVDb3VudCddICsgY2hpbGQ/Lm1vZHVsZUNvdW50IDogXG4gICAgICAgICAgICBjaGlsZD8ubW9kdWxlQ291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG5cbiAgbWFwQ29udGVudEhpZXJhcmNoeVByb2dyZXNzVXBkYXRlKGNvbnRlbnRIZWlyYXJjaHlEYXRhOiBhbnksIGVucm9sbG1lbnRMaXN0RGF0YTogYW55KSB7XG4gICAgaWYgKGNvbnRlbnRIZWlyYXJjaHlEYXRhICYmIGNvbnRlbnRIZWlyYXJjaHlEYXRhLmNoaWxkcmVuKSB7XG4gICAgICBsZXQgdG90YWxMZWFmTm9kZXMgPSAwXG4gICAgICBsZXQgdG90YWxDb21wbGV0ZWRMZWFmTm9kZXMgPSAwXG4gICAgICBsZXQgTFBlbnJvbGxtZW50ID0gdGhpcy5maW5kRW5yb2xsbWVudChlbnJvbGxtZW50TGlzdERhdGEsIGNvbnRlbnRIZWlyYXJjaHlEYXRhPy5pZGVudGlmaWVyKVxuXG4gICAgICAvLyBGaXJzdCBwYXNzOiBVcGRhdGUgcHJvZ3Jlc3MgZm9yIGFsbCBjb250ZW50XG4gICAgICBjb250ZW50SGVpcmFyY2h5RGF0YS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XG4gICAgICAgIGlmIChjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdNaWxlc3RvbmUnKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVNaWxlc3RvbmVQcm9ncmVzcyhjaGlsZCwgY29udGVudEhlaXJhcmNoeURhdGE/LmlkZW50aWZpZXIsIGVucm9sbG1lbnRMaXN0RGF0YSlcbiAgICAgICAgICB0b3RhbExlYWZOb2RlcyArPSBjaGlsZC5sZWFmTm9kZXNDb3VudCB8fCAwXG4gICAgICAgICAgdG90YWxDb21wbGV0ZWRMZWFmTm9kZXMgKz0gY2hpbGQuY29tcGxldGVkTGVhZk5vZGVzQ291bnQgfHwgMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciBwcmUtYXNzZXNzbWVudCBhbmQgb3RoZXIgcm9vdC1sZXZlbCBjb250ZW50XG4gICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgZW5yb2xsbWVudCB3aXRoIHBhcmVudCBpZGVudGlmaWVyIGZpcnN0LCB0aGVuIHdpdGggY2hpbGQncyBvd24gaWRlbnRpZmllclxuICAgICAgICAgIGxldCBlbnJvbGxtZW50ID0gdGhpcy5maW5kRW5yb2xsbWVudChlbnJvbGxtZW50TGlzdERhdGEsIGNvbnRlbnRIZWlyYXJjaHlEYXRhPy5pZGVudGlmaWVyKVxuICAgICAgICAgIGlmICghZW5yb2xsbWVudCkge1xuICAgICAgICAgICAgZW5yb2xsbWVudCA9IHRoaXMuZmluZEVucm9sbG1lbnQoZW5yb2xsbWVudExpc3REYXRhLCBjaGlsZD8uaWRlbnRpZmllcilcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVOb2RlUHJvZ3Jlc3MoY2hpbGQsIGVucm9sbG1lbnQpXG4gICAgICAgICAgY29uc3QgaXNDb21wbGV0ZWQgPSBjaGlsZC5zdGF0dXMgPT09IDIgfHwgY2hpbGQuY29tcGxldGlvblN0YXR1cyA9PT0gMiB8fCBjaGlsZC5jb21wbGV0aW9uUGVyY2VudGFnZSA+PSAxMDBcbiAgICAgICAgICB0b3RhbExlYWZOb2RlcyArPSBjaGlsZC5sZWFmTm9kZXNDb3VudCB8fCAxXG4gICAgICAgICAgdG90YWxDb21wbGV0ZWRMZWFmTm9kZXMgKz0gaXNDb21wbGV0ZWQgPyAoY2hpbGQubGVhZk5vZGVzQ291bnQgfHwgMSkgOiAwXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZihMUGVucm9sbG1lbnQgJiYgTFBlbnJvbGxtZW50LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDApIHtcbiAgICAgICAgY29udGVudEhlaXJhcmNoeURhdGEuY29tcGxldGlvblBlcmNlbnRhZ2UgPSAxMDBcbiAgICAgICAgY29udGVudEhlaXJhcmNoeURhdGEuY29tcGxldGlvblN0YXR1cyA9IDJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0b3RhbExlYWZOb2RlcyA+IDApIHtcbiAgICAgICAgICBjb25zdCBjYWxjdWxhdGVkUGVyY2VudGFnZSA9IE1hdGgucm91bmQoKE51bWJlcih0b3RhbENvbXBsZXRlZExlYWZOb2RlcykgLyBOdW1iZXIodG90YWxMZWFmTm9kZXMpKSAqIDEwMClcbiAgICAgICAgICBjb250ZW50SGVpcmFyY2h5RGF0YS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IGlzTmFOKGNhbGN1bGF0ZWRQZXJjZW50YWdlKSA/IDAgOiBjYWxjdWxhdGVkUGVyY2VudGFnZVxuICAgICAgICAgIGNvbnRlbnRIZWlyYXJjaHlEYXRhLmNvbXBsZXRpb25TdGF0dXMgPSBOdW1iZXIoY29udGVudEhlaXJhcmNoeURhdGEuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCA/IDIgOiAoY29udGVudEhlaXJhcmNoeURhdGEuY29tcGxldGlvblBlcmNlbnRhZ2UgPiAwID8gMSA6IDApKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE5PVEU6IE1pbGVzdG9uZSBsb2NraW5nIGlzIGNvbXB1dGVkIEFGVEVSIGhhc2htYXAgaXMgYnVpbHRcbiAgICAgIC8vIFNlZSBhcHAtdG9jLWhvbWUtdjIuY29tcG9uZW50LnRzIC0+IGZldGNoQ29udGVudEhpZXJhcmNoeSgpIGZsb3c6XG4gICAgICAvLyAxLiBtYXBDb250ZW50SGllcmFyY2h5UHJvZ3Jlc3NVcGRhdGUgKHRoaXMgbWV0aG9kKSAtIHVwZGF0ZXMgcHJvZ3Jlc3Mgb24gY29udGVudCB0cmVlXG4gICAgICAvLyAyLiBjYWxsSGlyYXJjaHlQcm9ncmVzc0hhc2htYXAoKSAtIGJ1aWxkcyBoYXNobWFwIGZyb20gY29udGVudCB0cmVlXG4gICAgICAvLyAzLiBjb21wdXRlTWlsZXN0b25lTG9ja2luZ1N0YXR1cygpIC0gY29tcHV0ZXMgbG9ja3MgdXNpbmcgaGFzaG1hcFxuICAgIH1cbiAgICByZXR1cm4gY29udGVudEhlaXJhcmNoeURhdGFcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWlsZXN0b25lUHJvZ3Jlc3MobWlsZXN0b25lOiBhbnksIHBhcmVudENvbnRlbnRJZGVudGlmaWVyOiBzdHJpbmcsIGVucm9sbG1lbnRMaXN0RGF0YTogYW55KSB7XG4gICAgbGV0IHRvdGFsTGVhZk5vZGVzID0gMFxuICAgIGxldCB0b3RhbENvbXBsZXRlZExlYWZOb2RlcyA9IDBcbiAgICBsZXQgY29tcGxldGVkQ291cnNlcyA9IDBcbiAgICBsZXQgdG90YWxDb3Vyc2VzID0gMFxuXG4gICAgaWYgKG1pbGVzdG9uZS5jaGlsZHJlbikge1xuICAgICAgbWlsZXN0b25lLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gJ0NvdXJzZScpIHtcbiAgICAgICAgICB0b3RhbENvdXJzZXMgKz0gMVxuICAgICAgICAgIHRoaXMudXBkYXRlQ291cnNlUHJvZ3Jlc3MoY2hpbGQsIHBhcmVudENvbnRlbnRJZGVudGlmaWVyLCBlbnJvbGxtZW50TGlzdERhdGEpXG4gICAgICAgICAgLy8gQ2hlY2sgYm90aCBzdGF0dXMgYW5kIGNvbXBsZXRpb25TdGF0dXMgZm9yIGNvbXBsZXRpb25cbiAgICAgICAgICBpZiAoY2hpbGQuc3RhdHVzID09PSAyIHx8IGNoaWxkLmNvbXBsZXRpb25TdGF0dXMgPT09IDIgfHwgY2hpbGQuY29tcGxldGlvblBlcmNlbnRhZ2UgPj0gMTAwKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWRDb3Vyc2VzICs9IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRm9yIGFzc2Vzc21lbnRzIGFuZCBvdGhlciBjb250ZW50LCB0cnkgbXVsdGlwbGUgZW5yb2xsbWVudCBzb3VyY2VzXG4gICAgICAgICAgLy8gRmlyc3QgdHJ5IHBhcmVudCBMZWFybmluZyBQYXRod2F5IGVucm9sbG1lbnRcbiAgICAgICAgICBsZXQgZW5yb2xsbWVudCA9IHRoaXMuZmluZEVucm9sbG1lbnQoZW5yb2xsbWVudExpc3REYXRhLCBwYXJlbnRDb250ZW50SWRlbnRpZmllcilcbiAgICAgICAgICBpZiAoIWVucm9sbG1lbnQpIHtcbiAgICAgICAgICAgIC8vIFRyeSBtaWxlc3RvbmUgZW5yb2xsbWVudFxuICAgICAgICAgICAgZW5yb2xsbWVudCA9IHRoaXMuZmluZEVucm9sbG1lbnQoZW5yb2xsbWVudExpc3REYXRhLCBtaWxlc3RvbmU/LmlkZW50aWZpZXIpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXBkYXRlTm9kZVByb2dyZXNzKGNoaWxkLCBlbnJvbGxtZW50KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGVhZk5vZGVzID0gY2hpbGQubGVhZk5vZGVzQ291bnQgfHwgMVxuICAgICAgICB0b3RhbExlYWZOb2RlcyArPSBsZWFmTm9kZXNcbiAgICAgICAgLy8gQ2hlY2sgYm90aCBzdGF0dXMgYW5kIGNvbXBsZXRpb25TdGF0dXMgZm9yIGNvbXBsZXRpb25cbiAgICAgICAgaWYgKGNoaWxkLnN0YXR1cyA9PT0gMiB8fCBjaGlsZC5jb21wbGV0aW9uU3RhdHVzID09PSAyIHx8IGNoaWxkLmNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMCkge1xuICAgICAgICAgIHRvdGFsQ29tcGxldGVkTGVhZk5vZGVzICs9IGxlYWZOb2Rlc1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIG1pbGVzdG9uZS5sZWFmTm9kZXNDb3VudCA9IHRvdGFsTGVhZk5vZGVzXG4gICAgbWlsZXN0b25lLmNvbXBsZXRlZExlYWZOb2Rlc0NvdW50ID0gdG90YWxDb21wbGV0ZWRMZWFmTm9kZXNcbiAgICBtaWxlc3RvbmUudG90YWxDb3Vyc2VzID0gdG90YWxDb3Vyc2VzXG4gICAgbWlsZXN0b25lLmNvbXBsZXRlZENvdXJzZXMgPSBjb21wbGV0ZWRDb3Vyc2VzXG5cbiAgICBpZiAodG90YWxMZWFmTm9kZXMgPiAwKSB7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkUGVyY2VudGFnZSA9IE1hdGgucm91bmQoKHRvdGFsQ29tcGxldGVkTGVhZk5vZGVzIC8gdG90YWxMZWFmTm9kZXMpICogMTAwKVxuICAgICAgbWlsZXN0b25lLmNvbXBsZXRpb25QZXJjZW50YWdlID0gaXNOYU4oY2FsY3VsYXRlZFBlcmNlbnRhZ2UpID8gMCA6IGNhbGN1bGF0ZWRQZXJjZW50YWdlXG4gICAgICBtaWxlc3RvbmUuY29tcGxldGlvblN0YXR1cyA9IE51bWJlcihtaWxlc3RvbmUuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCA/IDIgOiAobWlsZXN0b25lLmNvbXBsZXRpb25QZXJjZW50YWdlID4gMCA/IDEgOiAwKSlcbiAgICAgIG1pbGVzdG9uZS5zdGF0dXMgPSBOdW1iZXIobWlsZXN0b25lLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDAgPyAyIDogKG1pbGVzdG9uZS5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDAgPyAxIDogMCkpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVOb2RlUHJvZ3Jlc3Mobm9kZTogYW55LCBlbnJvbGxtZW50OiBhbnkpIHtcbiAgICBpZiAoIWVucm9sbG1lbnQpIHtcbiAgICAgIC8vIElmIG5vIGVucm9sbG1lbnQgZGF0YSwgcHJlc2VydmUgZXhpc3RpbmcgY29tcGxldGlvbiBkYXRhIGZyb20gY29udGVudCBoaWVyYXJjaHlcbiAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGZvciBhc3Nlc3NtZW50cyB0aGF0IG1heSBoYXZlIGNvbXBsZXRpb24gZGF0YSBidXQgbm8gZW5yb2xsbWVudCBlbnRyeVxuICAgICAgaWYgKG5vZGUuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IHVuZGVmaW5lZCAmJiBub2RlLmNvbXBsZXRpb25TdGF0dXMgPT09IHVuZGVmaW5lZCAmJiBub2RlLnN0YXR1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuY29tcGxldGlvblBlcmNlbnRhZ2UgPSAwXG4gICAgICAgIG5vZGUuY29tcGxldGlvblN0YXR1cyA9IDBcbiAgICAgICAgbm9kZS5zdGF0dXMgPSAwXG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2UsIGtlZXAgdGhlIGV4aXN0aW5nIHZhbHVlcyBmcm9tIGNvbnRlbnQgaGllcmFyY2h5XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgbm9kZSBpdHNlbGYgaXMgdGhlIGVucm9sbGVkIGNvbnRlbnQgKGRpcmVjdCBlbnJvbGxtZW50KVxuICAgIC8vIFRoaXMgaGFwcGVucyBmb3IgcHJlLWFzc2Vzc21lbnRzIGFuZCBzdGFuZGFsb25lIGNvbnRlbnRcbiAgICBjb25zdCBpc0RpcmVjdEVucm9sbG1lbnQgPSBlbnJvbGxtZW50LmNvbGxlY3Rpb25JZCA9PT0gbm9kZS5pZGVudGlmaWVyIHx8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnJvbGxtZW50LmNvbnRlbnRJZCA9PT0gbm9kZS5pZGVudGlmaWVyXG4gICAgXG4gICAgaWYgKGlzRGlyZWN0RW5yb2xsbWVudCkge1xuICAgICAgXG4gICAgICAvLyBVc2UgZW5yb2xsbWVudCdzIGRpcmVjdCBwcm9ncmVzc1xuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBlbnJvbGxtZW50LmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IGVucm9sbG1lbnQucHJvZ3Jlc3MgfHwgMFxuICAgICAgY29uc3Qgc3RhdHVzID0gTnVtYmVyKGVucm9sbG1lbnQuc3RhdHVzKSB8fCAwXG4gICAgICBcbiAgICAgIG5vZGUuY29tcGxldGlvblBlcmNlbnRhZ2UgPSBwcm9ncmVzc1xuICAgICAgbm9kZS5jb21wbGV0aW9uU3RhdHVzID0gc3RhdHVzXG4gICAgICBub2RlLnN0YXR1cyA9IHN0YXR1c1xuICAgICAgXG4gICAgICBcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFRyeSBib3RoIGNvbnRlbnRJZCBhbmQgY29sbGVjdGlvbklkIGFzIHRoZSBBUEkgcmVzcG9uc2UgbWF5IHVzZSBlaXRoZXIgZmllbGRcbiAgICBjb25zdCBub2RlRW5yb2xsRGF0YSA9IGVucm9sbG1lbnQ/LmNvbnRlbnRMaXN0Py5maW5kKChlbGU6IGFueSkgPT4gXG4gICAgICBlbGU/LmNvbnRlbnRJZCA9PT0gbm9kZS5pZGVudGlmaWVyIHx8IGVsZT8uY29sbGVjdGlvbklkID09PSBub2RlLmlkZW50aWZpZXJcbiAgICApXG4gICAgXG4gICAgaWYgKGVucm9sbG1lbnQgJiYgbm9kZUVucm9sbERhdGEgJiYgbm9kZUVucm9sbERhdGEuc3RhdHVzIDwgMikge1xuICAgICAgbm9kZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IG5vZGVFbnJvbGxEYXRhLmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IG5vZGVFbnJvbGxEYXRhLnByb2dyZXNzIHx8IDBcbiAgICAgIG5vZGUuY29tcGxldGlvblN0YXR1cyA9IE51bWJlcihub2RlRW5yb2xsRGF0YS5zdGF0dXMpIHx8IDBcbiAgICAgIG5vZGUuc3RhdHVzID0gTnVtYmVyKG5vZGVFbnJvbGxEYXRhLnN0YXR1cykgfHwgMFxuICAgIH0gZWxzZSBpZiAoZW5yb2xsbWVudCAmJiBub2RlRW5yb2xsRGF0YSAmJiBub2RlRW5yb2xsRGF0YS5zdGF0dXMgPT09IDIpIHtcbiAgICAgIG5vZGUuY29tcGxldGlvblBlcmNlbnRhZ2UgPSAxMDBcbiAgICAgIG5vZGUuY29tcGxldGlvblN0YXR1cyA9IDJcbiAgICAgIG5vZGUuc3RhdHVzID0gMlxuICAgIH0gZWxzZSBpZiAoZW5yb2xsbWVudCAmJiAhbm9kZUVucm9sbERhdGEpIHtcbiAgICAgIC8vIEVucm9sbG1lbnQgZXhpc3RzIGJ1dCB0aGlzIG5vZGUgaXMgbm90IGluIGNvbnRlbnRMaXN0XG4gICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gZm9yIGNvbXBsZXRlZCBhc3Nlc3NtZW50cyAtIHByZXNlcnZlIHRoZWlyIGNvbXBsZXRpb24gZGF0YSBmcm9tIGNvbnRlbnQgaGllcmFyY2h5XG4gICAgICAvLyBPbmx5IHJlc2V0IHRvIDAgaWYgdGhlcmUncyBubyBjb21wbGV0aW9uIGRhdGEgYXQgYWxsXG4gICAgICBpZiAobm9kZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gdW5kZWZpbmVkICYmIG5vZGUuY29tcGxldGlvblN0YXR1cyA9PT0gdW5kZWZpbmVkICYmIG5vZGUuc3RhdHVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9kZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IDBcbiAgICAgICAgbm9kZS5jb21wbGV0aW9uU3RhdHVzID0gMFxuICAgICAgICBub2RlLnN0YXR1cyA9IDBcbiAgICAgIH1cbiAgICAgIC8vIE90aGVyd2lzZSBrZWVwIGV4aXN0aW5nIHZhbHVlcyBmcm9tIGNvbnRlbnQgaGllcmFyY2h5XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGVucm9sbG1lbnQgYXQgYWxsIC0gcmVzZXQgdG8gMFxuICAgICAgbm9kZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IDBcbiAgICAgIG5vZGUuY29tcGxldGlvblN0YXR1cyA9IDBcbiAgICAgIG5vZGUuc3RhdHVzID0gMFxuICAgIH1cbiAgICBcbiAgICBcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ291cnNlUHJvZ3Jlc3MoY291cnNlOiBhbnksIHBhcmVudENvbnRlbnRJZGVudGlmaWVyLCBlbnJvbGxtZW50TGlzdERhdGE6IGFueSkge1xuICAgIGNvbnN0IGVucm9sbG1lbnQgPSB0aGlzLmZpbmRFbnJvbGxtZW50KGVucm9sbG1lbnRMaXN0RGF0YSwgY291cnNlPy5pZGVudGlmaWVyKVxuXG4gICAgaWYgKGVucm9sbG1lbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDApIHtcbiAgICAgIC8vIEVucm9sbG1lbnQgc2hvd3MgMTAwJSAtIG1hcmsgY291cnNlIGFzIGNvbXBsZXRlXG4gICAgICBjb3Vyc2UuY29tcGxldGlvblBlcmNlbnRhZ2UgPSAxMDBcbiAgICAgIGNvdXJzZS5jb21wbGV0aW9uU3RhdHVzID0gMlxuICAgICAgaWYgKGVucm9sbG1lbnQuaXNzdWVkQ2VydGlmaWNhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNlcnRpZmljYXRlOiBhbnkgPSBlbnJvbGxtZW50Lmlzc3VlZENlcnRpZmljYXRlcy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoYS5sYXN0SXNzdWVkT24pLmdldFRpbWUoKSAtIG5ldyBEYXRlKGIubGFzdElzc3VlZE9uKS5nZXRUaW1lKCkpXG4gICAgICAgICAgICAgICAgICBjb25zdCBjZXJ0SWQ6IGFueSA9IGNlcnRpZmljYXRlWzBdLmlkZW50aWZpZXJcbiAgICAgICAgICAgICAgICAgIGNvdXJzZS5pc3N1ZWRDZXJ0aWZpY2F0ZXNJZCA9IGNlcnRJZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgIHRoaXMudG9jU3ZjLm1hcENvbXBsZXRpb25DaGlsZFBlcmNlbnRhZ2VQcm9ncmFtKGNvdXJzZSlcbiAgICB9IGVsc2UgaWYgKGVucm9sbG1lbnQgJiYgZW5yb2xsbWVudC5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDApIHtcbiAgICAgIC8vIEVucm9sbG1lbnQgaGFzIHBhcnRpYWwgcHJvZ3Jlc3NcbiAgICAgIGNvdXJzZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IGVucm9sbG1lbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgMFxuICAgICAgY291cnNlLmNvbXBsZXRpb25TdGF0dXMgPSAxXG4gICAgICAvLyBBbHNvIHVwZGF0ZSBjaGlsZHJlblxuICAgICAgaWYgKGNvdXJzZS5jaGlsZHJlbiAmJiBjb3Vyc2UuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBjb3Vyc2UuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIFxuXG4gICAgICAgICAgLy8gSWYgY2hpbGQgaXMgYSBtb2R1bGUsIHVwZGF0ZSBpdHMgY2hpbGRyZW4gKHJlc291cmNlcykgYXMgd2VsbFxuICAgICAgICAgIGlmIChjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk1PRFVMRSAmJiBjaGlsZC5jaGlsZHJlbiAmJiBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjaGlsZC5jaGlsZHJlbi5mb3JFYWNoKChyZXNvdXJjZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlTm9kZVByb2dyZXNzKHJlc291cmNlLCBlbnJvbGxtZW50KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXBkYXRlTm9kZVByb2dyZXNzKGNoaWxkLCBlbnJvbGxtZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvdXJzZS5jaGlsZHJlbiAmJiBjb3Vyc2UuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgdG90YWxMZWFmTm9kZXMgPSBjb3Vyc2UubGVhZk5vZGVzQ291bnQgfHwgMFxuICAgICAgICBsZXQgdG90YWxDb21wbGV0ZWQgPSAwXG5cbiAgICAgICAgY291cnNlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBJZiBjaGlsZCBpcyBhIG1vZHVsZSwgdXBkYXRlIGl0cyBjaGlsZHJlbiAocmVzb3VyY2VzKSBhcyB3ZWxsXG4gICAgICAgICAgaWYgKGNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFICYmIGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNoaWxkLmNoaWxkcmVuLmZvckVhY2goKHJlc291cmNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVOb2RlUHJvZ3Jlc3MocmVzb3VyY2UsIGVucm9sbG1lbnQpXG4gICAgICAgICAgICAgIGlmIChyZXNvdXJjZS5jb21wbGV0aW9uU3RhdHVzID09PSAyIHx8IHJlc291cmNlLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDApIHtcbiAgICAgICAgICAgICAgICB0b3RhbENvbXBsZXRlZCArPSByZXNvdXJjZS5sZWFmTm9kZXNDb3VudCB8fCAxXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU5vZGVQcm9ncmVzcyhjaGlsZCwgZW5yb2xsbWVudClcblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hpbGQuY29tcGxldGlvblN0YXR1cyA9PT0gMiB8fCBjaGlsZC5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwKSB7XG4gICAgICAgICAgICB0b3RhbENvbXBsZXRlZCArPSBjaGlsZC5sZWFmTm9kZXNDb3VudCB8fCAxXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIElmIGl0J3MgYSBjb2xsZWN0aW9uIGFuZCBkb2Vzbid0IGhhdmUgaXRzIG93biBlbnJvbGxtZW50IHByb2dyZXNzLCBjYWxjdWxhdGUgaXRcbiAgICAgICAgaWYgKCFlbnJvbGxtZW50IHx8ICFjb3Vyc2UuY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgY291cnNlLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAwKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbExlYWZOb2Rlcykge1xuICAgICAgICAgICAgdG90YWxMZWFmTm9kZXMgPSBjb3Vyc2UuY2hpbGRyZW4ucmVkdWNlKChhY2M6IG51bWJlciwgY3VycjogYW55KSA9PiBhY2MgKyAoY3Vyci5sZWFmTm9kZXNDb3VudCB8fCAxKSwgMClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRvdGFsTGVhZk5vZGVzID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZFBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKCh0b3RhbENvbXBsZXRlZCAvIHRvdGFsTGVhZk5vZGVzKSAqIDEwMClcbiAgICAgICAgICAgIGNvdXJzZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IGlzTmFOKGNhbGN1bGF0ZWRQZXJjZW50YWdlKSA/IDAgOiBjYWxjdWxhdGVkUGVyY2VudGFnZVxuICAgICAgICAgICAgY291cnNlLmNvbXBsZXRpb25TdGF0dXMgPSBOdW1iZXIoY291cnNlLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDAgPyAyIDogKGNvdXJzZS5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDAgPyAxIDogMCkpXG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmRFbnJvbGxtZW50KGVucm9sbG1lbnRMaXN0OiBhbnksIGlkZW50aWZpZXI6IHN0cmluZykge1xuICAgIGlmICghZW5yb2xsbWVudExpc3QgfHwgIWVucm9sbG1lbnRMaXN0Lmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gZW5yb2xsbWVudExpc3QuZmluZCgoZWw6IGFueSkgPT4gZWwuY29sbGVjdGlvbklkID09PSBpZGVudGlmaWVyIHx8IGVsLmNvbnRlbnRJZCA9PT0gaWRlbnRpZmllcilcbiAgfVxuXG5cblxufVxuXG4iXX0=