occam-verify-cli 1.0.900 → 1.0.905

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.
Files changed (37) hide show
  1. package/lib/context/file/nominal.js +7 -4
  2. package/lib/context/mnemic.js +56 -26
  3. package/lib/context/synoptic.js +30 -14
  4. package/lib/context.js +31 -14
  5. package/lib/element/assertion/property.js +26 -25
  6. package/lib/element/assertion/satisfies.js +6 -1
  7. package/lib/element/assertion/type.js +7 -7
  8. package/lib/element/declaration/complexType.js +5 -3
  9. package/lib/element/declaration/property.js +17 -10
  10. package/lib/element/declaration/simpleType.js +11 -20
  11. package/lib/element/equality.js +3 -3
  12. package/lib/element/signature.js +40 -50
  13. package/lib/element/topLevelAssertion/axiom.js +9 -4
  14. package/lib/element/type.js +11 -14
  15. package/lib/utilities/assignment.js +3 -3
  16. package/lib/utilities/element.js +2 -2
  17. package/lib/utilities/json.js +23 -1
  18. package/lib/utilities/synoptic.js +12 -1
  19. package/package.json +1 -1
  20. package/src/context/file/nominal.js +8 -4
  21. package/src/context/mnemic.js +85 -31
  22. package/src/context/synoptic.js +40 -16
  23. package/src/context.js +44 -16
  24. package/src/element/assertion/property.js +38 -36
  25. package/src/element/assertion/satisfies.js +8 -0
  26. package/src/element/assertion/type.js +6 -6
  27. package/src/element/declaration/complexType.js +10 -2
  28. package/src/element/declaration/property.js +20 -11
  29. package/src/element/declaration/simpleType.js +16 -28
  30. package/src/element/equality.js +2 -2
  31. package/src/element/signature.js +53 -75
  32. package/src/element/topLevelAssertion/axiom.js +11 -4
  33. package/src/element/type.js +15 -19
  34. package/src/utilities/assignment.js +2 -2
  35. package/src/utilities/element.js +1 -1
  36. package/src/utilities/json.js +28 -2
  37. package/src/utilities/synoptic.js +10 -0
@@ -19,7 +19,7 @@ function _interop_require_default(obj) {
19
19
  }
20
20
  const { push } = _necessary.arrayUtilities;
21
21
  class MnemicContext extends _context.default {
22
- constructor(context, terms, frames, properties, equalities, judgements, assertions, statements, references, assumptions, metavariables, substitutions, propertyRelations){
22
+ constructor(context, terms, frames, properties, equalities, judgements, assertions, statements, signatures, references, assumptions, metavariables, substitutions, propertyRelations){
23
23
  super(context);
24
24
  this.terms = terms;
25
25
  this.frames = frames;
@@ -28,6 +28,7 @@ class MnemicContext extends _context.default {
28
28
  this.judgements = judgements;
29
29
  this.assertions = assertions;
30
30
  this.statements = statements;
31
+ this.signatures = signatures;
31
32
  this.references = references;
32
33
  this.assumptions = assumptions;
33
34
  this.metavariables = metavariables;
@@ -76,6 +77,13 @@ class MnemicContext extends _context.default {
76
77
  (0, _synoptic.compressStatements)(context);
77
78
  return statements;
78
79
  }
80
+ getSignatures(signatures = []) {
81
+ const context = this.getContext();
82
+ push(signatures, this.signatures);
83
+ context.getSignatures(signatures);
84
+ (0, _synoptic.compressSignatures)(context);
85
+ return signatures;
86
+ }
79
87
  getAssertions(assertions = []) {
80
88
  const context = this.getContext();
81
89
  push(assertions, this.assertions);
@@ -148,17 +156,23 @@ class MnemicContext extends _context.default {
148
156
  this.judgements.push(judgement);
149
157
  context.debug(`...added the '${judgementString}' judgement to the mnemic context.`);
150
158
  }
159
+ addAssertion(assertion) {
160
+ const context = this, assertionString = assertion.getString();
161
+ context.trace(`Adding the '${assertionString}' assertion to the mnemic context...`);
162
+ this.assertions.push(assertion);
163
+ context.debug(`...added the '${assertionString}' assertion to the mnemic context.`);
164
+ }
151
165
  addStatement(statement) {
152
166
  const context = this, statementString = statement.getString();
153
167
  context.trace(`Adding the '${statementString}' statement to the mnemic context...`);
154
168
  this.statements.push(statement);
155
169
  context.debug(`...added the '${statementString}' statement to the mnemic context.`);
156
170
  }
157
- addAssertion(assertion) {
158
- const context = this, assertionString = assertion.getString();
159
- context.trace(`Adding the '${assertionString}' assertion to the mnemic context...`);
160
- this.assertions.push(assertion);
161
- context.debug(`...added the '${assertionString}' assertion to the mnemic context.`);
171
+ addSignature(signature) {
172
+ const context = this, signatureString = signature.getString();
173
+ context.trace(`Adding the '${signatureString}' signature to the mnemic context...`);
174
+ this.signatures.push(signature);
175
+ context.debug(`...added the '${signatureString}' signature to the mnemic context.`);
162
176
  }
163
177
  addReference(reference) {
164
178
  const context = this, referenceString = reference.getString();
@@ -240,6 +254,15 @@ class MnemicContext extends _context.default {
240
254
  }) || null;
241
255
  return judgement;
242
256
  }
257
+ findAssertionByAssertionNode(assertionNode) {
258
+ const assertions = this.getAssertions(), assertion = assertions.find((assertion)=>{
259
+ const assertionNodeMatches = assertion.matchAssertionNode(assertionNode);
260
+ if (assertionNodeMatches) {
261
+ return true;
262
+ }
263
+ }) || null;
264
+ return assertion;
265
+ }
243
266
  findStatementByStatementNode(statementNode) {
244
267
  const statements = this.getStatements(), statement = statements.find((statement)=>{
245
268
  const statementNodeMatches = statement.matchStatementNode(statementNode);
@@ -249,6 +272,15 @@ class MnemicContext extends _context.default {
249
272
  }) || null;
250
273
  return statement;
251
274
  }
275
+ findSignatureBySignatureNode(signatureNode) {
276
+ const signatures = this.getSignatures(), signature = signatures.find((signature)=>{
277
+ const signatureNodeMatches = signature.matchSignatureNode(signatureNode);
278
+ if (signatureNodeMatches) {
279
+ return true;
280
+ }
281
+ }) || null;
282
+ return signature;
283
+ }
252
284
  findReferenceByReferenceNode(referenceNode) {
253
285
  const references = this.getReferences(), reference = references.find((reference)=>{
254
286
  const referenceMatcheReferenceNode = reference.matchReferenceNode(referenceNode);
@@ -258,15 +290,6 @@ class MnemicContext extends _context.default {
258
290
  }) || null;
259
291
  return reference;
260
292
  }
261
- findAssertionByAssertionNode(assertionNode) {
262
- const assertions = this.getAssertions(), assertion = assertions.find((assertion)=>{
263
- const assertionNodeMatches = assertion.matchAssertionNode(assertionNode);
264
- if (assertionNodeMatches) {
265
- return true;
266
- }
267
- }) || null;
268
- return assertion;
269
- }
270
293
  findAssumptionByAssumptionNode(assumptionNode) {
271
294
  const assumptions = this.getAssumptions(), assumption = assumptions.find((assumption)=>{
272
295
  const assumptionNodeMatches = assumption.matchAssumptionNode(assumptionNode);
@@ -336,13 +359,17 @@ class MnemicContext extends _context.default {
336
359
  const judgement = this.findJudgementByJudgementNode(judgementNode), judgementPresent = judgement !== null;
337
360
  return judgementPresent;
338
361
  }
362
+ isAssertionPresentByAssertionNode(assertionNode) {
363
+ const assertion = this.findAssertionByAssertionNode(assertionNode), assertionPresent = assertion !== null;
364
+ return assertionPresent;
365
+ }
339
366
  isStatementPresentByStatementNode(statementNode) {
340
367
  const statement = this.findStatementByStatementNode(statementNode), statementPresent = statement !== null;
341
368
  return statementPresent;
342
369
  }
343
- isAssertionPresentByAssertionNode(assertionNode) {
344
- const assertion = this.findAssertionByAssertionNode(assertionNode), assertionPresent = assertion !== null;
345
- return assertionPresent;
370
+ isSignaturePresentBySignatureNode(signatureNode) {
371
+ const signature = this.findSignatureBySignatureNode(signatureNode), signaturePresent = signature !== null;
372
+ return signaturePresent;
346
373
  }
347
374
  isAssumptionPresentByAssumptionNode(assumptionNode) {
348
375
  const assumption = this.findAssumptionByAssumptionNode(assumptionNode), assumptionPresent = assumption !== null;
@@ -380,19 +407,21 @@ class MnemicContext extends _context.default {
380
407
  this.properties = (0, _json.propertiesFromJSON)(json, context);
381
408
  this.judgements = (0, _json.judgementsFromJSON)(json, context);
382
409
  this.assertions = (0, _json.assertionsFromJSON)(json, context);
410
+ this.signatures = (0, _json.signaturesFromJSON)(json, context);
383
411
  this.substitutions = (0, _json.substitutionsFromJSON)(json, context);
384
412
  this.propertyRelations = (0, _json.propertyRelationsFromJSON)(json, context);
385
413
  }
386
414
  toJSON() {
387
- let terms = this.getTerms(), frames = this.getFrames(), properties = this.getProperties(), judgements = this.getJudgements(), equalities = this.getEqualities(), statements = this.getStatements(), assertions = this.getAssertions(), references = this.getReferences(), assumptions = this.getAssumptions(), metavariables = this.getMetavariables(), substitutions = this.getSubstitutions(), propertyRelations = this.getPropertyRelations();
388
- const termsJSON = (0, _json.termsToTermsJSON)(terms), framesJSON = (0, _json.framesToFramesJSON)(frames), propertiesJSON = (0, _json.propertiesToPropertiesJSON)(properties), judgementsJSON = (0, _json.judgementsToJudgementsJSON)(judgements), equalitiesJSON = (0, _json.equalitiesToEqualitiesJSON)(equalities), statementsJSON = (0, _json.statementsToStatementsJSON)(statements), assertionsJSON = (0, _json.assertionsToAssertionsJSON)(assertions), referencesJSON = (0, _json.referencesToReferencesJSON)(references), assumptionsJSON = (0, _json.assumptionsToAssumptionsJSON)(assumptions), metavariablesJSON = (0, _json.metavariablesToMetavariablesJSON)(metavariables), substitutionsJSON = (0, _json.substitutionsToSubstitutionsJSON)(substitutions), propertyRelationsJSON = (0, _json.propertyRelationsToPropertyRelationsJSON)(propertyRelations);
415
+ let terms = this.getTerms(), frames = this.getFrames(), properties = this.getProperties(), equalities = this.getEqualities(), judgements = this.getJudgements(), assertions = this.getAssertions(), statements = this.getStatements(), signatures = this.getSignatures(), references = this.getReferences(), assumptions = this.getAssumptions(), metavariables = this.getMetavariables(), substitutions = this.getSubstitutions(), propertyRelations = this.getPropertyRelations();
416
+ const termsJSON = (0, _json.termsToTermsJSON)(terms), framesJSON = (0, _json.framesToFramesJSON)(frames), propertiesJSON = (0, _json.propertiesToPropertiesJSON)(properties), equalitiesJSON = (0, _json.equalitiesToEqualitiesJSON)(equalities), judgementsJSON = (0, _json.judgementsToJudgementsJSON)(judgements), assertionsJSON = (0, _json.assertionsToAssertionsJSON)(assertions), statementsJSON = (0, _json.statementsToStatementsJSON)(statements), signaturesJSON = (0, _json.signaturesToSignaturesJSON)(signatures), referencesJSON = (0, _json.referencesToReferencesJSON)(references), assumptionsJSON = (0, _json.assumptionsToAssumptionsJSON)(assumptions), metavariablesJSON = (0, _json.metavariablesToMetavariablesJSON)(metavariables), substitutionsJSON = (0, _json.substitutionsToSubstitutionsJSON)(substitutions), propertyRelationsJSON = (0, _json.propertyRelationsToPropertyRelationsJSON)(propertyRelations);
389
417
  terms = termsJSON; ///
390
418
  frames = framesJSON; ///
391
419
  properties = propertiesJSON; ///
392
- judgements = judgementsJSON; ///
393
420
  equalities = equalitiesJSON; ///
394
- statements = statementsJSON; ///
421
+ judgements = judgementsJSON; ///
395
422
  assertions = assertionsJSON; ///
423
+ statements = statementsJSON; ///
424
+ signatures = signaturesJSON; ///
396
425
  references = referencesJSON; ///
397
426
  assumptions = assumptionsJSON; ///
398
427
  metavariables = metavariablesJSON; //
@@ -404,8 +433,9 @@ class MnemicContext extends _context.default {
404
433
  properties,
405
434
  equalities,
406
435
  judgements,
407
- statements,
408
436
  assertions,
437
+ statements,
438
+ signatures,
409
439
  references,
410
440
  assumptions,
411
441
  metavariables,
@@ -415,14 +445,14 @@ class MnemicContext extends _context.default {
415
445
  return json;
416
446
  }
417
447
  static fromJSON(json, context) {
418
- const terms = null, frames = null, properties = null, equalities = null, judgements = null, statements = null, assertions = null, references = null, assumptions = null, metavariables = null, substitutions = null, propertyRelations = null, mnemicContext = new MnemicContext(context, terms, frames, properties, equalities, judgements, assertions, statements, references, assumptions, metavariables, substitutions, propertyRelations);
448
+ const terms = null, frames = null, properties = null, equalities = null, judgements = null, statements = null, assertions = null, signatures = null, references = null, assumptions = null, metavariables = null, substitutions = null, propertyRelations = null, mnemicContext = new MnemicContext(context, terms, frames, properties, equalities, judgements, assertions, statements, signatures, references, assumptions, metavariables, substitutions, propertyRelations);
419
449
  mnemicContext.initialise(json);
420
450
  return mnemicContext;
421
451
  }
422
452
  static fromNothing(context) {
423
- const terms = [], frames = [], properties = [], equalities = [], judgements = [], statements = [], assertions = [], references = [], assumptions = [], metavariables = [], substitutions = [], propertyRelations = [], mnemicContext = new MnemicContext(context, terms, frames, properties, equalities, judgements, assertions, statements, references, assumptions, metavariables, substitutions, propertyRelations);
453
+ const terms = [], frames = [], properties = [], equalities = [], judgements = [], statements = [], assertions = [], signatures = [], references = [], assumptions = [], metavariables = [], substitutions = [], propertyRelations = [], mnemicContext = new MnemicContext(context, terms, frames, properties, equalities, judgements, assertions, statements, signatures, references, assumptions, metavariables, substitutions, propertyRelations);
424
454
  return mnemicContext;
425
455
  }
426
456
  }
427
457
 
428
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21uZW1pYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IGNvbXByZXNzVGVybXMsXG4gICAgICAgICBjb21wcmVzc0ZyYW1lcyxcbiAgICAgICAgIGNvbXByZXNzUHJvcGVydGllcyxcbiAgICAgICAgIGNvbXByZXNzRXF1YWxpdGllcyxcbiAgICAgICAgIGNvbXByZXNzSnVkZ2VtZW50cyxcbiAgICAgICAgIGNvbXByZXNzQXNzZXJ0aW9ucyxcbiAgICAgICAgIGNvbXByZXNzU3RhdGVtZW50cyxcbiAgICAgICAgIGNvbXByZXNzUmVmZXJlbmNlcyxcbiAgICAgICAgIGNvbXByZXNzQXNzdW1wdGlvbnMsXG4gICAgICAgICBjb21wcmVzc01ldGF2YXJpYWJsZXMsXG4gICAgICAgICBjb21wcmVzc1N1YnN0aXR1dGlvbnMsXG4gICAgICAgICBjb21wcmVzc1Byb3BlcnR5UmVsYXRpb25zLH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zeW5vcHRpY1wiO1xuaW1wb3J0IHsgdGVybXNGcm9tSlNPTixcbiAgICAgICAgIGZyYW1lc0Zyb21KU09OLFxuICAgICAgICAgdGVybXNUb1Rlcm1zSlNPTixcbiAgICAgICAgIGZyYW1lc1RvRnJhbWVzSlNPTixcbiAgICAgICAgIHByb3BlcnRpZXNGcm9tSlNPTixcbiAgICAgICAgIGVxdWFsaXRpZXNGcm9tSlNPTixcbiAgICAgICAgIGp1ZGdlbWVudHNGcm9tSlNPTixcbiAgICAgICAgIHN0YXRlbWVudHNGcm9tSlNPTixcbiAgICAgICAgIGFzc2VydGlvbnNGcm9tSlNPTixcbiAgICAgICAgIHJlZmVyZW5jZXNGcm9tSlNPTixcbiAgICAgICAgIGFzc3VtcHRpb25zRnJvbUpTT04sXG4gICAgICAgICBtZXRhdmFyaWFibGVzRnJvbUpTT04sXG4gICAgICAgICBzdWJzdGl0dXRpb25zRnJvbUpTT04sXG4gICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uc0Zyb21KU09OLFxuICAgICAgICAgcHJvcGVydGllc1RvUHJvcGVydGllc0pTT04sXG4gICAgICAgICBqdWRnZW1lbnRzVG9KdWRnZW1lbnRzSlNPTixcbiAgICAgICAgIGVxdWFsaXRpZXNUb0VxdWFsaXRpZXNKU09OLFxuICAgICAgICAgc3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04sXG4gICAgICAgICBhc3NlcnRpb25zVG9Bc3NlcnRpb25zSlNPTixcbiAgICAgICAgIHJlZmVyZW5jZXNUb1JlZmVyZW5jZXNKU09OLFxuICAgICAgICAgYXNzdW1wdGlvbnNUb0Fzc3VtcHRpb25zSlNPTixcbiAgICAgICAgIG1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OLFxuICAgICAgICAgc3Vic3RpdHV0aW9uc1RvU3Vic3RpdHV0aW9uc0pTT04sXG4gICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uc1RvUHJvcGVydHlSZWxhdGlvbnNKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcHVzaCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1uZW1pY0NvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdGVybXMsIGZyYW1lcywgcHJvcGVydGllcywgZXF1YWxpdGllcywganVkZ2VtZW50cywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgcmVmZXJlbmNlcywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMsIHByb3BlcnR5UmVsYXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgdGhpcy5mcmFtZXMgPSBmcmFtZXM7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICB0aGlzLmVxdWFsaXRpZXMgPSBlcXVhbGl0aWVzO1xuICAgIHRoaXMuanVkZ2VtZW50cyA9IGp1ZGdlbWVudHM7XG4gICAgdGhpcy5hc3NlcnRpb25zID0gYXNzZXJ0aW9ucztcbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzO1xuICAgIHRoaXMucmVmZXJlbmNlcyA9IHJlZmVyZW5jZXM7XG4gICAgdGhpcy5hc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zO1xuICAgIHRoaXMubWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXM7XG4gICAgdGhpcy5zdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9ucztcbiAgICB0aGlzLnByb3BlcnR5UmVsYXRpb25zID0gcHJvcGVydHlSZWxhdGlvbnM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaCh0ZXJtcywgdGhpcy50ZXJtcyk7XG5cbiAgICBjb250ZXh0LmdldFRlcm1zKHRlcm1zKTtcblxuICAgIGNvbXByZXNzVGVybXMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybXM7XG4gIH1cblxuICBnZXRGcmFtZXMoZnJhbWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGZyYW1lcywgdGhpcy5mcmFtZXMpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIGNvbXByZXNzRnJhbWVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZyYW1lcztcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMocHJvcGVydGllcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChwcm9wZXJ0aWVzLCB0aGlzLnByb3BlcnRpZXMpO1xuXG4gICAgY29udGV4dC5nZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xuXG4gICAgY29tcHJlc3NQcm9wZXJ0aWVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goZXF1YWxpdGllcywgdGhpcy5lcXVhbGl0aWVzKTtcblxuICAgIGNvbnRleHQuZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcblxuICAgIGNvbXByZXNzRXF1YWxpdGllcyhjb250ZXh0KTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0SnVkZ2VtZW50cyhqdWRnZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGp1ZGdlbWVudHMsIHRoaXMuanVkZ2VtZW50cyk7XG5cbiAgICBjb250ZXh0LmdldEp1ZGdlbWVudHMoanVkZ2VtZW50cyk7XG5cbiAgICBjb21wcmVzc0p1ZGdlbWVudHMoY29udGV4dCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50cztcbiAgfVxuXG4gIGdldFN0YXRlbWVudHMoc3RhdGVtZW50cyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChzdGF0ZW1lbnRzLCB0aGlzLnN0YXRlbWVudHMpO1xuXG4gICAgY29udGV4dC5nZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMpO1xuXG4gICAgY29tcHJlc3NTdGF0ZW1lbnRzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKGFzc2VydGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzZXJ0aW9ucywgdGhpcy5hc3NlcnRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zKTtcblxuICAgIGNvbXByZXNzQXNzZXJ0aW9ucyhjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlcyhyZWZlcmVuY2VzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHJlZmVyZW5jZXMsIHRoaXMucmVmZXJlbmNlcyk7XG5cbiAgICBjb250ZXh0LmdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyk7XG5cbiAgICBjb21wcmVzc1JlZmVyZW5jZXMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlcztcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25zKGFzc3VtcHRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGFzc3VtcHRpb25zLCB0aGlzLmFzc3VtcHRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuXG4gICAgY29tcHJlc3NBc3N1bXB0aW9ucyhjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9ucztcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChtZXRhdmFyaWFibGVzLCB0aGlzLm1ldGF2YXJpYWJsZXMpO1xuXG4gICAgY29udGV4dC5nZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpO1xuXG4gICAgY29tcHJlc3NNZXRhdmFyaWFibGVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goc3Vic3RpdHV0aW9ucywgdGhpcy5zdWJzdGl0dXRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKTtcblxuICAgIGNvbXByZXNzU3Vic3RpdHV0aW9ucyhjb250ZXh0KTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlSZWxhdGlvbnMocHJvcGVydHlSZWxhdGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gocHJvcGVydHlSZWxhdGlvbnMsIHRoaXMucHJvcGVydHlSZWxhdGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRQcm9wZXJ0eVJlbGF0aW9ucyhwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgICBjb21wcmVzc1Byb3BlcnR5UmVsYXRpb25zKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb25zO1xuICB9XG5cbiAgYWRkVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMudGVybXMucHVzaCh0ZXJtKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRGcmFtZShmcmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5mcmFtZXMucHVzaChmcmFtZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRFcXVhbGl0eShlcXVhbGl0eSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5lcXVhbGl0aWVzLnB1c2goZXF1YWxpdHkpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkUHJvcGVydHkocHJvcGVydHkpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgcHJvcGVydHlTdHJpbmcgPSBwcm9wZXJ0eS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMucHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5IHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEp1ZGdlbWVudChqdWRnZW1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAganVkZ2VtZW50U3RyaW5nID0ganVkZ2VtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmp1ZGdlbWVudHMucHVzaChqdWRnZW1lbnQpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnQoc3RhdGVtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzZXJ0aW9uKGFzc2VydGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBhc3NlcnRpb25TdHJpbmcgPSBhc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc2VydGlvblN0cmluZ30nIGFzc2VydGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuYXNzZXJ0aW9ucy5wdXNoKGFzc2VydGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLnJlZmVyZW5jZXMucHVzaChyZWZlcmVuY2UpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5hc3N1bXB0aW9ucy5wdXNoKGFzc3VtcHRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMucHVzaChtZXRhdmFyaWFibGUpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN1YnN0aXR1dGlvblN0cmluZyA9IHN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5zdWJzdGl0dXRpb25zLnB1c2goc3Vic3RpdHV0aW9uKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtzdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkUHJvcGVydHlSZWxhdGlvbihwcm9wZXJ0eVJlbGF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHByb3BlcnR5UmVsYXRpb25TdHJpbmcgPSBwcm9wZXJ0eVJlbGF0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nfScgcHJvcGVydHkgcmVsYXRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLnByb3BlcnR5UmVsYXRpb25zLnB1c2gocHJvcGVydHlSZWxhdGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7cHJvcGVydHlSZWxhdGlvblN0cmluZ30nIHByb3BlcnR5IHJlbGF0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFRlcm1zKHRlcm1zKSB7XG4gICAgdGVybXMuZm9yRWFjaCgodGVybSkgPT4ge1xuICAgICAgdGhpcy5hZGRUZXJtKHRlcm0pO1xuICAgIH0pO1xuICB9XG5cbiAgZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgdGVybXMgPSB0aGlzLmdldFRlcm1zKCksXG4gICAgICAgICAgdGVybSA9IHRlcm1zLmZpbmQoKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG4gICAgICBcbiAgICAgICAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9XG5cbiAgZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgZnJhbWVzID0gdGhpcy5nZXRGcmFtZXMoKSxcbiAgICAgICAgICBmcmFtZSA9IGZyYW1lcy5maW5kKChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZnJhbWVOb2RlTWF0Y2hlcyA9IGZyYW1lLm1hdGNoRnJhbWVOb2RlKGZyYW1lTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChmcmFtZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0aWVzID0gdGhpcy5nZXRFcXVhbGl0aWVzKCksXG4gICAgICBlcXVhbGl0eSA9IGVxdWFsaXRpZXMuZmluZCgoZXF1YWxpdHkpID0+IHtcbiAgICAgICAgY29uc3QgZXF1YWxpdHlOb2RlTWF0Y2hlcyA9IGVxdWFsaXR5Lm1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSk7XG5cbiAgICAgICAgaWYgKGVxdWFsaXR5Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfVxuXG4gIGZpbmRQcm9wZXJ0eUJ5UHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5Tm9kZU1hdGNoZXMgPSBwcm9wZXJ0eS5tYXRjaEVxdWFsaXR5Tm9kZShwcm9wZXJ0eU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocHJvcGVydHlOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG5cbiAgZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QganVkZ2VtZW50cyA9IHRoaXMuZ2V0SnVkZ2VtZW50cygpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudHMuZmluZCgoanVkZ2VtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IGp1ZGdlbWVudC5tYXRjaEp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChqdWRnZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBzdGF0ZW1lbnQubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbnMgPSB0aGlzLmdldEFzc2VydGlvbnMoKSxcbiAgICAgICAgICBhc3NlcnRpb24gPSBhc3NlcnRpb25zLmZpbmQoKGFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzZXJ0aW9uTm9kZU1hdGNoZXMgPSBhc3NlcnRpb24ubWF0Y2hBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzZXJ0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3NlcnRpb247XG4gIH1cblxuICBmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbnMuZmluZCgoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gYXNzdW1wdGlvbi5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc3VtcHRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZU1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVzLmZpbmQoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gc3Vic3RpdHV0aW9uLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZFByb3BlcnR5UmVsYXRpb25CeVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlKSB7XG4gICAgY29uc3QgcHJvcGVydHlSZWxhdGlvbnMgPSB0aGlzLmdldFByb3BlcnR5UmVsYXRpb25zKCksXG4gICAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5UmVsYXRpb25zLmZpbmQoKHByb3BlcnR5UmVsYXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5UmVsYXRpb25Ob2RlTWF0Y2hlcyA9IHByb3BlcnR5UmVsYXRpb24ubWF0Y2hFcXVhbGl0eU5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocHJvcGVydHlSZWxhdGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbjtcbiAgfVxuXG4gIGZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlID0gdGhpcy5maW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICAgICAgdmFyaWFibGUgPSBkZWNsYXJlZFZhcmlhYmxlOyAgLy8vXG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgdGVybVByZXNlbnQgPSAodGVybSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdGVybVByZXNlbnQ7XG4gIH1cblxuICBpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IChmcmFtZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZnJhbWVQcmVzZW50O1xuICB9XG5cbiAgaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IHRoaXMuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICBlcXVhbGl0eVByZXNlbnQgPSAoZXF1YWxpdHkgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzUHJvcGVydHlQcmVzZW50QnlQcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlKSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLmZpbmRQcm9wZXJ0eUJ5UHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSksXG4gICAgICAgICAgcHJvcGVydHlQcmVzZW50ID0gKHByb3BlcnR5ICE9PSBudWxsKTtcblxuICAgIHJldHVybiBwcm9wZXJ0eVByZXNlbnQ7XG4gIH1cblxuICBpc0p1ZGdlbWVudFByZXNlbnRCeUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSkge1xuICAgIGNvbnN0IGp1ZGdlbWVudCA9IHRoaXMuZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSxcbiAgICAgICAgICBqdWRnZW1lbnRQcmVzZW50ID0gKGp1ZGdlbWVudCAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50UHJlc2VudDtcbiAgfVxuXG4gIGlzU3RhdGVtZW50UHJlc2VudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlbWVudFByZXNlbnQgPSAoc3RhdGVtZW50ICE9PSBudWxsKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRQcmVzZW50O1xuICB9XG5cbiAgaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3NlcnRpb24gPSB0aGlzLmZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgYXNzZXJ0aW9uUHJlc2VudCA9IChhc3NlcnRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSB0aGlzLmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSksXG4gICAgICAgICAgYXNzdW1wdGlvblByZXNlbnQgPSAoYXNzdW1wdGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1JlZmVyZW5jZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICByZWZlcmVuY2VQcmVzZW50ID0gKHJlZmVyZW5jZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlUHJlc2VudDtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVuTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZW4gPSB0aGlzLmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlbk5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZW5QcmVzZW50ID0gKG1ldGF2YXJpYWJsZW4gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZW5QcmVzZW50O1xuICB9XG5cbiAgaXNTdWJzdGl0dXRpb25QcmVzZW50QnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uUHJlc2VudCA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1Byb3BlcnR5UmVsYXRpb25yZXNlbnRCeVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlKSB7XG4gICAgY29uc3QgcHJvcGVydHlSZWxhdGlvbiA9IHRoaXMuZmluZFByb3BlcnR5UmVsYXRpb25CeVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlKSxcbiAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucmVzZW50ID0gKHByb3BlcnR5UmVsYXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb25yZXNlbnQ7XG4gIH1cblxuICBjb21taXQoZWxlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgIGVsZW1lbnQuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoanNvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgIHRoaXMudGVybXMgPSB0ZXJtc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMucmVmZXJlbmNlcyA9IHJlZmVyZW5jZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuZnJhbWVzID0gZnJhbWVzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLmp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gICAgdGhpcy5hc3NlcnRpb25zID0gYXNzZXJ0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgICB0aGlzLnByb3BlcnR5UmVsYXRpb25zID0gcHJvcGVydHlSZWxhdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQgdGVybXMgPSB0aGlzLmdldFRlcm1zKCksXG4gICAgICAgIGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICAgIHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoKSxcbiAgICAgICAganVkZ2VtZW50cyA9IHRoaXMuZ2V0SnVkZ2VtZW50cygpLFxuICAgICAgICBlcXVhbGl0aWVzID0gdGhpcy5nZXRFcXVhbGl0aWVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gdGhpcy5nZXRBc3N1bXB0aW9ucygpLFxuICAgICAgICBtZXRhdmFyaWFibGVzID0gdGhpcy5nZXRNZXRhdmFyaWFibGVzKCksXG4gICAgICAgIHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbnMgPSB0aGlzLmdldFByb3BlcnR5UmVsYXRpb25zKCk7XG5cbiAgICBjb25zdCB0ZXJtc0pTT04gPSB0ZXJtc1RvVGVybXNKU09OKHRlcm1zKSxcbiAgICAgICAgICBmcmFtZXNKU09OID0gZnJhbWVzVG9GcmFtZXNKU09OKGZyYW1lcyksXG4gICAgICAgICAgcHJvcGVydGllc0pTT04gPSBwcm9wZXJ0aWVzVG9Qcm9wZXJ0aWVzSlNPTihwcm9wZXJ0aWVzKSxcbiAgICAgICAgICBqdWRnZW1lbnRzSlNPTiA9IGp1ZGdlbWVudHNUb0p1ZGdlbWVudHNKU09OKGp1ZGdlbWVudHMpLFxuICAgICAgICAgIGVxdWFsaXRpZXNKU09OID0gZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04oZXF1YWxpdGllcyksXG4gICAgICAgICAgc3RhdGVtZW50c0pTT04gPSBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTihzdGF0ZW1lbnRzKSxcbiAgICAgICAgICBhc3NlcnRpb25zSlNPTiA9IGFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OKGFzc2VydGlvbnMpLFxuICAgICAgICAgIHJlZmVyZW5jZXNKU09OID0gcmVmZXJlbmNlc1RvUmVmZXJlbmNlc0pTT04ocmVmZXJlbmNlcyksXG4gICAgICAgICAgYXNzdW1wdGlvbnNKU09OID0gYXNzdW1wdGlvbnNUb0Fzc3VtcHRpb25zSlNPTihhc3N1bXB0aW9ucyksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlc0pTT04gPSBtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTihtZXRhdmFyaWFibGVzKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zSlNPTiA9IHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OKHN1YnN0aXR1dGlvbnMpLFxuICAgICAgICAgIHByb3BlcnR5UmVsYXRpb25zSlNPTiA9IHByb3BlcnR5UmVsYXRpb25zVG9Qcm9wZXJ0eVJlbGF0aW9uc0pTT04ocHJvcGVydHlSZWxhdGlvbnMpO1xuXG4gICAgdGVybXMgPSB0ZXJtc0pTT047IC8vL1xuICAgIGZyYW1lcyA9IGZyYW1lc0pTT047IC8vL1xuICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzSlNPTjsgIC8vL1xuICAgIGp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzSlNPTjsgLy8vXG4gICAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNKU09OOyAvLy9cbiAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0pTT047IC8vL1xuICAgIGFzc2VydGlvbnMgPSBhc3NlcnRpb25zSlNPTjsgLy8vXG4gICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXNKU09OOyAvLy9cbiAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zSlNPTjsgLy8vXG4gICAgbWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNKU09OOyAgLy9cbiAgICBzdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0pTT047IC8vL1xuICAgIHByb3BlcnR5UmVsYXRpb25zID0gcHJvcGVydHlSZWxhdGlvbnNKU09OOyAvLy9cblxuICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICB0ZXJtcyxcbiAgICAgIGZyYW1lcyxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICBlcXVhbGl0aWVzLFxuICAgICAganVkZ2VtZW50cyxcbiAgICAgIHN0YXRlbWVudHMsXG4gICAgICBhc3NlcnRpb25zLFxuICAgICAgcmVmZXJlbmNlcyxcbiAgICAgIGFzc3VtcHRpb25zLFxuICAgICAgbWV0YXZhcmlhYmxlcyxcbiAgICAgIHN1YnN0aXR1dGlvbnMsXG4gICAgICBwcm9wZXJ0eVJlbGF0aW9uc1xuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybXMgPSBudWxsLFxuICAgICAgICAgIGZyYW1lcyA9IG51bGwsXG4gICAgICAgICAgcHJvcGVydGllcyA9IG51bGwsXG4gICAgICAgICAgZXF1YWxpdGllcyA9IG51bGwsXG4gICAgICAgICAganVkZ2VtZW50cyA9IG51bGwsXG4gICAgICAgICAgc3RhdGVtZW50cyA9IG51bGwsXG4gICAgICAgICAgYXNzZXJ0aW9ucyA9IG51bGwsXG4gICAgICAgICAgcmVmZXJlbmNlcyA9IG51bGwsXG4gICAgICAgICAgYXNzdW1wdGlvbnMgPSBudWxsLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXMgPSBudWxsLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBudWxsLFxuICAgICAgICAgIHByb3BlcnR5UmVsYXRpb25zID0gbnVsbCxcbiAgICAgICAgICBtbmVtaWNDb250ZXh0ID0gbmV3IE1uZW1pY0NvbnRleHQoY29udGV4dCwgdGVybXMsIGZyYW1lcywgcHJvcGVydGllcywgZXF1YWxpdGllcywganVkZ2VtZW50cywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgcmVmZXJlbmNlcywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMsIHByb3BlcnR5UmVsYXRpb25zKTtcblxuICAgIG1uZW1pY0NvbnRleHQuaW5pdGlhbGlzZShqc29uKTtcblxuICAgIHJldHVybiBtbmVtaWNDb250ZXh0O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCB0ZXJtcyA9IFtdLFxuICAgICAgICAgIGZyYW1lcyA9IFtdLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBbXSxcbiAgICAgICAgICBlcXVhbGl0aWVzID0gW10sXG4gICAgICAgICAganVkZ2VtZW50cyA9IFtdLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBbXSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gW10sXG4gICAgICAgICAgcmVmZXJlbmNlcyA9IFtdLFxuICAgICAgICAgIGFzc3VtcHRpb25zID0gW10sXG4gICAgICAgICAgbWV0YXZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdLFxuICAgICAgICAgIG1uZW1pY0NvbnRleHQgPSBuZXcgTW5lbWljQ29udGV4dChjb250ZXh0LCB0ZXJtcywgZnJhbWVzLCBwcm9wZXJ0aWVzLCBlcXVhbGl0aWVzLCBqdWRnZW1lbnRzLCBhc3NlcnRpb25zLCBzdGF0ZW1lbnRzLCByZWZlcmVuY2VzLCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlcywgc3Vic3RpdHV0aW9ucywgcHJvcGVydHlSZWxhdGlvbnMpO1xuXG4gICAgcmV0dXJuIG1uZW1pY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJNbmVtaWNDb250ZXh0IiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJ0ZXJtcyIsImZyYW1lcyIsInByb3BlcnRpZXMiLCJlcXVhbGl0aWVzIiwianVkZ2VtZW50cyIsImFzc2VydGlvbnMiLCJzdGF0ZW1lbnRzIiwicmVmZXJlbmNlcyIsImFzc3VtcHRpb25zIiwibWV0YXZhcmlhYmxlcyIsInN1YnN0aXR1dGlvbnMiLCJwcm9wZXJ0eVJlbGF0aW9ucyIsImdldFRlcm1zIiwiZ2V0Q29udGV4dCIsImNvbXByZXNzVGVybXMiLCJnZXRGcmFtZXMiLCJjb21wcmVzc0ZyYW1lcyIsImdldFByb3BlcnRpZXMiLCJjb21wcmVzc1Byb3BlcnRpZXMiLCJnZXRFcXVhbGl0aWVzIiwiY29tcHJlc3NFcXVhbGl0aWVzIiwiZ2V0SnVkZ2VtZW50cyIsImNvbXByZXNzSnVkZ2VtZW50cyIsImdldFN0YXRlbWVudHMiLCJjb21wcmVzc1N0YXRlbWVudHMiLCJnZXRBc3NlcnRpb25zIiwiY29tcHJlc3NBc3NlcnRpb25zIiwiZ2V0UmVmZXJlbmNlcyIsImNvbXByZXNzUmVmZXJlbmNlcyIsImdldEFzc3VtcHRpb25zIiwiY29tcHJlc3NBc3N1bXB0aW9ucyIsImdldE1ldGF2YXJpYWJsZXMiLCJjb21wcmVzc01ldGF2YXJpYWJsZXMiLCJnZXRTdWJzdGl0dXRpb25zIiwiY29tcHJlc3NTdWJzdGl0dXRpb25zIiwiZ2V0UHJvcGVydHlSZWxhdGlvbnMiLCJjb21wcmVzc1Byb3BlcnR5UmVsYXRpb25zIiwiYWRkVGVybSIsInRlcm0iLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWJ1ZyIsImFkZEZyYW1lIiwiZnJhbWUiLCJmcmFtZVN0cmluZyIsImFkZEVxdWFsaXR5IiwiZXF1YWxpdHkiLCJlcXVhbGl0eVN0cmluZyIsImFkZFByb3BlcnR5IiwicHJvcGVydHkiLCJwcm9wZXJ0eVN0cmluZyIsImFkZEp1ZGdlbWVudCIsImp1ZGdlbWVudCIsImp1ZGdlbWVudFN0cmluZyIsImFkZFN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsImFkZEFzc2VydGlvbiIsImFzc2VydGlvbiIsImFzc2VydGlvblN0cmluZyIsImFkZFJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInJlZmVyZW5jZVN0cmluZyIsImFkZEFzc3VtcHRpb24iLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvblN0cmluZyIsImFkZE1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZVN0cmluZyIsImFkZFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblN0cmluZyIsImFkZFByb3BlcnR5UmVsYXRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uIiwicHJvcGVydHlSZWxhdGlvblN0cmluZyIsImFkZFRlcm1zIiwiZm9yRWFjaCIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInRlcm1Ob2RlIiwiZmluZCIsInRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGUiLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsImZyYW1lTm9kZSIsImZyYW1lTm9kZU1hdGNoZXMiLCJtYXRjaEZyYW1lTm9kZSIsImZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlOb2RlTWF0Y2hlcyIsIm1hdGNoRXF1YWxpdHlOb2RlIiwiZmluZFByb3BlcnR5QnlQcm9wZXJ0eU5vZGUiLCJwcm9wZXJ0eU5vZGUiLCJwcm9wZXJ0eU5vZGVNYXRjaGVzIiwiZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoSnVkZ2VtZW50Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUiLCJtYXRjaFJlZmVyZW5jZU5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoU3Vic3RpdHV0aW9uTm9kZSIsImZpbmRQcm9wZXJ0eVJlbGF0aW9uQnlQcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbk5vZGVNYXRjaGVzIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJkZWNsYXJlZFZhcmlhYmxlIiwiZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlIiwiaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUiLCJ0ZXJtUHJlc2VudCIsImlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUiLCJmcmFtZVByZXNlbnQiLCJpc0VxdWFsaXR5UHJlc2VudEJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlQcmVzZW50IiwiaXNQcm9wZXJ0eVByZXNlbnRCeVByb3BlcnR5Tm9kZSIsInByb3BlcnR5UHJlc2VudCIsImlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudFByZXNlbnQiLCJpc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRQcmVzZW50IiwiaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uUHJlc2VudCIsImlzQXNzdW1wdGlvblByZXNlbnRCeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvblByZXNlbnQiLCJpc1JlZmVyZW5jZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VQcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlbk5vZGUiLCJtZXRhdmFyaWFibGVuIiwibWV0YXZhcmlhYmxlblByZXNlbnQiLCJpc1N1YnN0aXR1dGlvblByZXNlbnRCeVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25QcmVzZW50IiwiaXNQcm9wZXJ0eVJlbGF0aW9ucmVzZW50QnlQcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInByb3BlcnR5UmVsYXRpb25yZXNlbnQiLCJjb21taXQiLCJlbGVtZW50Iiwic2V0Q29udGV4dCIsImluaXRpYWxpc2UiLCJqc29uIiwidGVybXNGcm9tSlNPTiIsIm1ldGF2YXJpYWJsZXNGcm9tSlNPTiIsInN0YXRlbWVudHNGcm9tSlNPTiIsInJlZmVyZW5jZXNGcm9tSlNPTiIsImVxdWFsaXRpZXNGcm9tSlNPTiIsImFzc3VtcHRpb25zRnJvbUpTT04iLCJmcmFtZXNGcm9tSlNPTiIsInByb3BlcnRpZXNGcm9tSlNPTiIsImp1ZGdlbWVudHNGcm9tSlNPTiIsImFzc2VydGlvbnNGcm9tSlNPTiIsInN1YnN0aXR1dGlvbnNGcm9tSlNPTiIsInByb3BlcnR5UmVsYXRpb25zRnJvbUpTT04iLCJ0b0pTT04iLCJ0ZXJtc0pTT04iLCJ0ZXJtc1RvVGVybXNKU09OIiwiZnJhbWVzSlNPTiIsImZyYW1lc1RvRnJhbWVzSlNPTiIsInByb3BlcnRpZXNKU09OIiwicHJvcGVydGllc1RvUHJvcGVydGllc0pTT04iLCJqdWRnZW1lbnRzSlNPTiIsImp1ZGdlbWVudHNUb0p1ZGdlbWVudHNKU09OIiwiZXF1YWxpdGllc0pTT04iLCJlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTiIsInN0YXRlbWVudHNKU09OIiwic3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04iLCJhc3NlcnRpb25zSlNPTiIsImFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OIiwicmVmZXJlbmNlc0pTT04iLCJyZWZlcmVuY2VzVG9SZWZlcmVuY2VzSlNPTiIsImFzc3VtcHRpb25zSlNPTiIsImFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04iLCJtZXRhdmFyaWFibGVzSlNPTiIsIm1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OIiwic3Vic3RpdHV0aW9uc0pTT04iLCJzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiIsInByb3BlcnR5UmVsYXRpb25zSlNPTiIsInByb3BlcnR5UmVsYXRpb25zVG9Qcm9wZXJ0eVJlbGF0aW9uc0pTT04iLCJmcm9tSlNPTiIsIm1uZW1pY0NvbnRleHQiLCJmcm9tTm90aGluZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBNkNBOzs7ZUFBcUJBOzs7MkJBM0NVO2dFQUVYOzBCQWFzQjtzQkF3QmU7Ozs7OztBQUV6RCxNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyx5QkFBYztBQUVoQixNQUFNRixzQkFBc0JHLGdCQUFPO0lBQ2hELFlBQVlDLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFdBQVcsRUFBRUMsYUFBYSxFQUFFQyxhQUFhLEVBQUVDLGlCQUFpQixDQUFFO1FBQ3hLLEtBQUssQ0FBQ1o7UUFFTixJQUFJLENBQUNDLEtBQUssR0FBR0E7UUFDYixJQUFJLENBQUNDLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFB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
458
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21uZW1pYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IGNvbXByZXNzVGVybXMsXG4gICAgICAgICBjb21wcmVzc0ZyYW1lcyxcbiAgICAgICAgIGNvbXByZXNzUHJvcGVydGllcyxcbiAgICAgICAgIGNvbXByZXNzRXF1YWxpdGllcyxcbiAgICAgICAgIGNvbXByZXNzSnVkZ2VtZW50cyxcbiAgICAgICAgIGNvbXByZXNzQXNzZXJ0aW9ucyxcbiAgICAgICAgIGNvbXByZXNzU3RhdGVtZW50cyxcbiAgICAgICAgIGNvbXByZXNzU2lnbmF0dXJlcyxcbiAgICAgICAgIGNvbXByZXNzUmVmZXJlbmNlcyxcbiAgICAgICAgIGNvbXByZXNzQXNzdW1wdGlvbnMsXG4gICAgICAgICBjb21wcmVzc01ldGF2YXJpYWJsZXMsXG4gICAgICAgICBjb21wcmVzc1N1YnN0aXR1dGlvbnMsXG4gICAgICAgICBjb21wcmVzc1Byb3BlcnR5UmVsYXRpb25zLH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zeW5vcHRpY1wiO1xuaW1wb3J0IHsgdGVybXNGcm9tSlNPTixcbiAgICAgICAgIGZyYW1lc0Zyb21KU09OLFxuICAgICAgICAgdGVybXNUb1Rlcm1zSlNPTixcbiAgICAgICAgIGZyYW1lc1RvRnJhbWVzSlNPTixcbiAgICAgICAgIHByb3BlcnRpZXNGcm9tSlNPTixcbiAgICAgICAgIGVxdWFsaXRpZXNGcm9tSlNPTixcbiAgICAgICAgIGp1ZGdlbWVudHNGcm9tSlNPTixcbiAgICAgICAgIHN0YXRlbWVudHNGcm9tSlNPTixcbiAgICAgICAgIGFzc2VydGlvbnNGcm9tSlNPTixcbiAgICAgICAgIHJlZmVyZW5jZXNGcm9tSlNPTixcbiAgICAgICAgIHNpZ25hdHVyZXNGcm9tSlNPTixcbiAgICAgICAgIGFzc3VtcHRpb25zRnJvbUpTT04sXG4gICAgICAgICBtZXRhdmFyaWFibGVzRnJvbUpTT04sXG4gICAgICAgICBzdWJzdGl0dXRpb25zRnJvbUpTT04sXG4gICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uc0Zyb21KU09OLFxuICAgICAgICAgcHJvcGVydGllc1RvUHJvcGVydGllc0pTT04sXG4gICAgICAgICBqdWRnZW1lbnRzVG9KdWRnZW1lbnRzSlNPTixcbiAgICAgICAgIGVxdWFsaXRpZXNUb0VxdWFsaXRpZXNKU09OLFxuICAgICAgICAgc3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04sXG4gICAgICAgICBzaWduYXR1cmVzVG9TaWduYXR1cmVzSlNPTixcbiAgICAgICAgIGFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OLFxuICAgICAgICAgcmVmZXJlbmNlc1RvUmVmZXJlbmNlc0pTT04sXG4gICAgICAgICBhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OLFxuICAgICAgICAgbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04sXG4gICAgICAgICBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTixcbiAgICAgICAgIHByb3BlcnR5UmVsYXRpb25zVG9Qcm9wZXJ0eVJlbGF0aW9uc0pTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyBwdXNoIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW5lbWljQ29udGV4dCBleHRlbmRzIENvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCB0ZXJtcywgZnJhbWVzLCBwcm9wZXJ0aWVzLCBlcXVhbGl0aWVzLCBqdWRnZW1lbnRzLCBhc3NlcnRpb25zLCBzdGF0ZW1lbnRzLCBzaWduYXR1cmVzLCByZWZlcmVuY2VzLCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlcywgc3Vic3RpdHV0aW9ucywgcHJvcGVydHlSZWxhdGlvbnMpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgICB0aGlzLmZyYW1lcyA9IGZyYW1lcztcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXM7XG4gICAgdGhpcy5qdWRnZW1lbnRzID0ganVkZ2VtZW50cztcbiAgICB0aGlzLmFzc2VydGlvbnMgPSBhc3NlcnRpb25zO1xuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7XG4gICAgdGhpcy5zaWduYXR1cmVzID0gc2lnbmF0dXJlcztcbiAgICB0aGlzLnJlZmVyZW5jZXMgPSByZWZlcmVuY2VzO1xuICAgIHRoaXMuYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9ucztcbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnM7XG4gICAgdGhpcy5wcm9wZXJ0eVJlbGF0aW9ucyA9IHByb3BlcnR5UmVsYXRpb25zO1xuICB9XG5cbiAgZ2V0VGVybXModGVybXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2godGVybXMsIHRoaXMudGVybXMpO1xuXG4gICAgY29udGV4dC5nZXRUZXJtcyh0ZXJtcyk7XG5cbiAgICBjb21wcmVzc1Rlcm1zKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChmcmFtZXMsIHRoaXMuZnJhbWVzKTtcblxuICAgIGNvbnRleHQuZ2V0RnJhbWVzKGZyYW1lcyk7XG5cbiAgICBjb21wcmVzc0ZyYW1lcyhjb250ZXh0KTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gocHJvcGVydGllcywgdGhpcy5wcm9wZXJ0aWVzKTtcblxuICAgIGNvbnRleHQuZ2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcblxuICAgIGNvbXByZXNzUHJvcGVydGllcyhjb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGVxdWFsaXRpZXMsIHRoaXMuZXF1YWxpdGllcyk7XG5cbiAgICBjb250ZXh0LmdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyk7XG5cbiAgICBjb21wcmVzc0VxdWFsaXRpZXMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gZXF1YWxpdGllcztcbiAgfVxuXG4gIGdldEp1ZGdlbWVudHMoanVkZ2VtZW50cyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChqdWRnZW1lbnRzLCB0aGlzLmp1ZGdlbWVudHMpO1xuXG4gICAgY29udGV4dC5nZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMpO1xuXG4gICAgY29tcHJlc3NKdWRnZW1lbnRzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudHM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goc3RhdGVtZW50cywgdGhpcy5zdGF0ZW1lbnRzKTtcblxuICAgIGNvbnRleHQuZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzKTtcblxuICAgIGNvbXByZXNzU3RhdGVtZW50cyhjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlcyhzaWduYXR1cmVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHNpZ25hdHVyZXMsIHRoaXMuc2lnbmF0dXJlcyk7XG5cbiAgICBjb250ZXh0LmdldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyk7XG5cbiAgICBjb21wcmVzc1NpZ25hdHVyZXMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlcztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChhc3NlcnRpb25zLCB0aGlzLmFzc2VydGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgY29tcHJlc3NBc3NlcnRpb25zKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2gocmVmZXJlbmNlcywgdGhpcy5yZWZlcmVuY2VzKTtcblxuICAgIGNvbnRleHQuZ2V0UmVmZXJlbmNlcyhyZWZlcmVuY2VzKTtcblxuICAgIGNvbXByZXNzUmVmZXJlbmNlcyhjb250ZXh0KTtcblxuICAgIHJldHVybiByZWZlcmVuY2VzO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzdW1wdGlvbnMsIHRoaXMuYXNzdW1wdGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICBjb21wcmVzc0Fzc3VtcHRpb25zKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKG1ldGF2YXJpYWJsZXMsIHRoaXMubWV0YXZhcmlhYmxlcyk7XG5cbiAgICBjb250ZXh0LmdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyk7XG5cbiAgICBjb21wcmVzc01ldGF2YXJpYWJsZXMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChzdWJzdGl0dXRpb25zLCB0aGlzLnN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29tcHJlc3NTdWJzdGl0dXRpb25zKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRQcm9wZXJ0eVJlbGF0aW9ucyhwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChwcm9wZXJ0eVJlbGF0aW9ucywgdGhpcy5wcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgICBjb250ZXh0LmdldFByb3BlcnR5UmVsYXRpb25zKHByb3BlcnR5UmVsYXRpb25zKTtcblxuICAgIGNvbXByZXNzUHJvcGVydHlSZWxhdGlvbnMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbnM7XG4gIH1cblxuICBhZGRUZXJtKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy50ZXJtcy5wdXNoKHRlcm0pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEZyYW1lKGZyYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmZyYW1lcy5wdXNoKGZyYW1lKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEVxdWFsaXR5KGVxdWFsaXR5KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGVxdWFsaXR5U3RyaW5nID0gZXF1YWxpdHkuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmVxdWFsaXRpZXMucHVzaChlcXVhbGl0eSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRQcm9wZXJ0eShwcm9wZXJ0eSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5IHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkSnVkZ2VtZW50KGp1ZGdlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBqdWRnZW1lbnRTdHJpbmcgPSBqdWRnZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuanVkZ2VtZW50cy5wdXNoKGp1ZGdlbWVudCk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50IHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbihhc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzZXJ0aW9uU3RyaW5nID0gYXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmFzc2VydGlvbnMucHVzaChhc3NlcnRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Fzc2VydGlvblN0cmluZ30nIGFzc2VydGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnQoc3RhdGVtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkU2lnbmF0dXJlKHNpZ25hdHVyZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBzaWduYXR1cmVTdHJpbmcgPSBzaWduYXR1cmUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3NpZ25hdHVyZVN0cmluZ30nIHNpZ25hdHVyZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7c2lnbmF0dXJlU3RyaW5nfScgc2lnbmF0dXJlIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLnJlZmVyZW5jZXMucHVzaChyZWZlcmVuY2UpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IGFzc3VtcHRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5hc3N1bXB0aW9ucy5wdXNoKGFzc3VtcHRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMucHVzaChtZXRhdmFyaWFibGUpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN1YnN0aXR1dGlvblN0cmluZyA9IHN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5zdWJzdGl0dXRpb25zLnB1c2goc3Vic3RpdHV0aW9uKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtzdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkUHJvcGVydHlSZWxhdGlvbihwcm9wZXJ0eVJlbGF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHByb3BlcnR5UmVsYXRpb25TdHJpbmcgPSBwcm9wZXJ0eVJlbGF0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nfScgcHJvcGVydHkgcmVsYXRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLnByb3BlcnR5UmVsYXRpb25zLnB1c2gocHJvcGVydHlSZWxhdGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7cHJvcGVydHlSZWxhdGlvblN0cmluZ30nIHByb3BlcnR5IHJlbGF0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFRlcm1zKHRlcm1zKSB7XG4gICAgdGVybXMuZm9yRWFjaCgodGVybSkgPT4ge1xuICAgICAgdGhpcy5hZGRUZXJtKHRlcm0pO1xuICAgIH0pO1xuICB9XG5cbiAgZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgdGVybXMgPSB0aGlzLmdldFRlcm1zKCksXG4gICAgICAgICAgdGVybSA9IHRlcm1zLmZpbmQoKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG4gICAgICBcbiAgICAgICAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9XG5cbiAgZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgZnJhbWVzID0gdGhpcy5nZXRGcmFtZXMoKSxcbiAgICAgICAgICBmcmFtZSA9IGZyYW1lcy5maW5kKChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZnJhbWVOb2RlTWF0Y2hlcyA9IGZyYW1lLm1hdGNoRnJhbWVOb2RlKGZyYW1lTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChmcmFtZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0aWVzID0gdGhpcy5nZXRFcXVhbGl0aWVzKCksXG4gICAgICBlcXVhbGl0eSA9IGVxdWFsaXRpZXMuZmluZCgoZXF1YWxpdHkpID0+IHtcbiAgICAgICAgY29uc3QgZXF1YWxpdHlOb2RlTWF0Y2hlcyA9IGVxdWFsaXR5Lm1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSk7XG5cbiAgICAgICAgaWYgKGVxdWFsaXR5Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfVxuXG4gIGZpbmRQcm9wZXJ0eUJ5UHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5Tm9kZU1hdGNoZXMgPSBwcm9wZXJ0eS5tYXRjaEVxdWFsaXR5Tm9kZShwcm9wZXJ0eU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocHJvcGVydHlOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG5cbiAgZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QganVkZ2VtZW50cyA9IHRoaXMuZ2V0SnVkZ2VtZW50cygpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudHMuZmluZCgoanVkZ2VtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IGp1ZGdlbWVudC5tYXRjaEp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChqdWRnZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxuXG4gIGZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbnMgPSB0aGlzLmdldEFzc2VydGlvbnMoKSxcbiAgICAgICAgICBhc3NlcnRpb24gPSBhc3NlcnRpb25zLmZpbmQoKGFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzZXJ0aW9uTm9kZU1hdGNoZXMgPSBhc3NlcnRpb24ubWF0Y2hBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzZXJ0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3NlcnRpb247XG4gIH1cblxuICBmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gdGhpcy5nZXRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50cy5maW5kKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGVNYXRjaGVzID0gc3RhdGVtZW50Lm1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlbWVudE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlcyA9IHRoaXMuZ2V0U2lnbmF0dXJlcygpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZXMuZmluZCgoc2lnbmF0dXJlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzaWduYXR1cmVOb2RlTWF0Y2hlcyA9IHNpZ25hdHVyZS5tYXRjaFNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzaWduYXR1cmVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZTtcbiAgfVxuXG4gIGZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VzLmZpbmQoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZS5tYXRjaFJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VNYXRjaGVSZWZlcmVuY2VOb2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSB0aGlzLmdldEFzc3VtcHRpb25zKCksXG4gICAgICAgICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25zLmZpbmQoKGFzc3VtcHRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IGFzc3VtcHRpb24ubWF0Y2hBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3N1bXB0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9XG5cbiAgZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlcyA9IHRoaXMuZ2V0UmVmZXJlbmNlcygpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMuZmluZCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZU1hdGNoZU1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVzID0gdGhpcy5nZXRNZXRhdmFyaWFibGVzKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlcy5maW5kKChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZCgoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IHN1YnN0aXR1dGlvbi5tYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRQcm9wZXJ0eVJlbGF0aW9uQnlQcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSkge1xuICAgIGNvbnN0IHByb3BlcnR5UmVsYXRpb25zID0gdGhpcy5nZXRQcm9wZXJ0eVJlbGF0aW9ucygpLFxuICAgICAgICAgIHByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eVJlbGF0aW9ucy5maW5kKChwcm9wZXJ0eVJlbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uTm9kZU1hdGNoZXMgPSBwcm9wZXJ0eVJlbGF0aW9uLm1hdGNoRXF1YWxpdHlOb2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHByb3BlcnR5UmVsYXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG4gIH1cblxuICBmaW5kVmFyaWFibGVCeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IHRoaXMuZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpLFxuICAgICAgICAgIHZhcmlhYmxlID0gZGVjbGFyZWRWYXJpYWJsZTsgIC8vL1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtID0gdGhpcy5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgIHRlcm1QcmVzZW50ID0gKHRlcm0gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHRlcm1QcmVzZW50O1xuICB9XG5cbiAgaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSxcbiAgICAgICAgICBmcmFtZVByZXNlbnQgPSAoZnJhbWUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGZyYW1lUHJlc2VudDtcbiAgfVxuXG4gIGlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdHkgPSB0aGlzLmZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSksXG4gICAgICAgICAgZXF1YWxpdHlQcmVzZW50ID0gKGVxdWFsaXR5ICE9PSBudWxsKTtcblxuICAgIHJldHVybiBlcXVhbGl0eVByZXNlbnQ7XG4gIH1cblxuICBpc1Byb3BlcnR5UHJlc2VudEJ5UHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSkge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5maW5kUHJvcGVydHlCeVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUpLFxuICAgICAgICAgIHByb3BlcnR5UHJlc2VudCA9IChwcm9wZXJ0eSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlQcmVzZW50O1xuICB9XG5cbiAgaXNKdWRnZW1lbnRQcmVzZW50QnlKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpIHtcbiAgICBjb25zdCBqdWRnZW1lbnQgPSB0aGlzLmZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSksXG4gICAgICAgICAganVkZ2VtZW50UHJlc2VudCA9IChqdWRnZW1lbnQgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbiA9IHRoaXMuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgICBhc3NlcnRpb25QcmVzZW50ID0gKGFzc2VydGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzU3RhdGVtZW50UHJlc2VudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlbWVudFByZXNlbnQgPSAoc3RhdGVtZW50ICE9PSBudWxsKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRQcmVzZW50O1xuICB9XG5cbiAgaXNTaWduYXR1cmVQcmVzZW50QnlTaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUpIHtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSksXG4gICAgICAgICAgc2lnbmF0dXJlUHJlc2VudCA9IChzaWduYXR1cmUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZVByZXNlbnQ7XG4gIH1cblxuICBpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSB0aGlzLmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSksXG4gICAgICAgICAgYXNzdW1wdGlvblByZXNlbnQgPSAoYXNzdW1wdGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1JlZmVyZW5jZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICByZWZlcmVuY2VQcmVzZW50ID0gKHJlZmVyZW5jZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlUHJlc2VudDtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVuTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZW4gPSB0aGlzLmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlbk5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZW5QcmVzZW50ID0gKG1ldGF2YXJpYWJsZW4gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZW5QcmVzZW50O1xuICB9XG5cbiAgaXNTdWJzdGl0dXRpb25QcmVzZW50QnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uUHJlc2VudCA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1Byb3BlcnR5UmVsYXRpb25yZXNlbnRCeVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlKSB7XG4gICAgY29uc3QgcHJvcGVydHlSZWxhdGlvbiA9IHRoaXMuZmluZFByb3BlcnR5UmVsYXRpb25CeVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlKSxcbiAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucmVzZW50ID0gKHByb3BlcnR5UmVsYXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb25yZXNlbnQ7XG4gIH1cblxuICBjb21taXQoZWxlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgIGVsZW1lbnQuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoanNvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgIHRoaXMudGVybXMgPSB0ZXJtc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMucmVmZXJlbmNlcyA9IHJlZmVyZW5jZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuZnJhbWVzID0gZnJhbWVzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLmp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gICAgdGhpcy5hc3NlcnRpb25zID0gYXNzZXJ0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMuc2lnbmF0dXJlcyA9IHNpZ25hdHVyZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gICAgdGhpcy5wcm9wZXJ0eVJlbGF0aW9ucyA9IHByb3BlcnR5UmVsYXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICBmcmFtZXMgPSB0aGlzLmdldEZyYW1lcygpLFxuICAgICAgICBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAgIGVxdWFsaXRpZXMgPSB0aGlzLmdldEVxdWFsaXRpZXMoKSxcbiAgICAgICAganVkZ2VtZW50cyA9IHRoaXMuZ2V0SnVkZ2VtZW50cygpLFxuICAgICAgICBhc3NlcnRpb25zID0gdGhpcy5nZXRBc3NlcnRpb25zKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgc2lnbmF0dXJlcyA9IHRoaXMuZ2V0U2lnbmF0dXJlcygpLFxuICAgICAgICByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gdGhpcy5nZXRBc3N1bXB0aW9ucygpLFxuICAgICAgICBtZXRhdmFyaWFibGVzID0gdGhpcy5nZXRNZXRhdmFyaWFibGVzKCksXG4gICAgICAgIHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbnMgPSB0aGlzLmdldFByb3BlcnR5UmVsYXRpb25zKCk7XG5cbiAgICBjb25zdCB0ZXJtc0pTT04gPSB0ZXJtc1RvVGVybXNKU09OKHRlcm1zKSxcbiAgICAgICAgICBmcmFtZXNKU09OID0gZnJhbWVzVG9GcmFtZXNKU09OKGZyYW1lcyksXG4gICAgICAgICAgcHJvcGVydGllc0pTT04gPSBwcm9wZXJ0aWVzVG9Qcm9wZXJ0aWVzSlNPTihwcm9wZXJ0aWVzKSxcbiAgICAgICAgICBlcXVhbGl0aWVzSlNPTiA9IGVxdWFsaXRpZXNUb0VxdWFsaXRpZXNKU09OKGVxdWFsaXRpZXMpLFxuICAgICAgICAgIGp1ZGdlbWVudHNKU09OID0ganVkZ2VtZW50c1RvSnVkZ2VtZW50c0pTT04oanVkZ2VtZW50cyksXG4gICAgICAgICAgYXNzZXJ0aW9uc0pTT04gPSBhc3NlcnRpb25zVG9Bc3NlcnRpb25zSlNPTihhc3NlcnRpb25zKSxcbiAgICAgICAgICBzdGF0ZW1lbnRzSlNPTiA9IHN0YXRlbWVudHNUb1N0YXRlbWVudHNKU09OKHN0YXRlbWVudHMpLFxuICAgICAgICAgIHNpZ25hdHVyZXNKU09OID0gc2lnbmF0dXJlc1RvU2lnbmF0dXJlc0pTT04oc2lnbmF0dXJlcyksXG4gICAgICAgICAgcmVmZXJlbmNlc0pTT04gPSByZWZlcmVuY2VzVG9SZWZlcmVuY2VzSlNPTihyZWZlcmVuY2VzKSxcbiAgICAgICAgICBhc3N1bXB0aW9uc0pTT04gPSBhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OKGFzc3VtcHRpb25zKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzSlNPTiA9IG1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OKG1ldGF2YXJpYWJsZXMpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnNKU09OID0gc3Vic3RpdHV0aW9uc1RvU3Vic3RpdHV0aW9uc0pTT04oc3Vic3RpdHV0aW9ucyksXG4gICAgICAgICAgcHJvcGVydHlSZWxhdGlvbnNKU09OID0gcHJvcGVydHlSZWxhdGlvbnNUb1Byb3BlcnR5UmVsYXRpb25zSlNPTihwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgICB0ZXJtcyA9IHRlcm1zSlNPTjsgLy8vXG4gICAgZnJhbWVzID0gZnJhbWVzSlNPTjsgLy8vXG4gICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNKU09OOyAgLy8vXG4gICAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNKU09OOyAvLy9cbiAgICBqdWRnZW1lbnRzID0ganVkZ2VtZW50c0pTT047IC8vL1xuICAgIGFzc2VydGlvbnMgPSBhc3NlcnRpb25zSlNPTjsgLy8vXG4gICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNKU09OOyAvLy9cbiAgICBzaWduYXR1cmVzID0gc2lnbmF0dXJlc0pTT047IC8vL1xuICAgIHJlZmVyZW5jZXMgPSByZWZlcmVuY2VzSlNPTjsgLy8vXG4gICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0pTT047IC8vL1xuICAgIG1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzSlNPTjsgIC8vXG4gICAgc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNKU09OOyAvLy9cbiAgICBwcm9wZXJ0eVJlbGF0aW9ucyA9IHByb3BlcnR5UmVsYXRpb25zSlNPTjsgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgdGVybXMsXG4gICAgICBmcmFtZXMsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgZXF1YWxpdGllcyxcbiAgICAgIGp1ZGdlbWVudHMsXG4gICAgICBhc3NlcnRpb25zLFxuICAgICAgc3RhdGVtZW50cyxcbiAgICAgIHNpZ25hdHVyZXMsXG4gICAgICByZWZlcmVuY2VzLFxuICAgICAgYXNzdW1wdGlvbnMsXG4gICAgICBtZXRhdmFyaWFibGVzLFxuICAgICAgc3Vic3RpdHV0aW9ucyxcbiAgICAgIHByb3BlcnR5UmVsYXRpb25zXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB0ZXJtcyA9IG51bGwsXG4gICAgICAgICAgZnJhbWVzID0gbnVsbCxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gbnVsbCxcbiAgICAgICAgICBlcXVhbGl0aWVzID0gbnVsbCxcbiAgICAgICAgICBqdWRnZW1lbnRzID0gbnVsbCxcbiAgICAgICAgICBzdGF0ZW1lbnRzID0gbnVsbCxcbiAgICAgICAgICBhc3NlcnRpb25zID0gbnVsbCxcbiAgICAgICAgICBzaWduYXR1cmVzID0gbnVsbCxcbiAgICAgICAgICByZWZlcmVuY2VzID0gbnVsbCxcbiAgICAgICAgICBhc3N1bXB0aW9ucyA9IG51bGwsXG4gICAgICAgICAgbWV0YXZhcmlhYmxlcyA9IG51bGwsXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IG51bGwsXG4gICAgICAgICAgcHJvcGVydHlSZWxhdGlvbnMgPSBudWxsLFxuICAgICAgICAgIG1uZW1pY0NvbnRleHQgPSBuZXcgTW5lbWljQ29udGV4dChjb250ZXh0LCB0ZXJtcywgZnJhbWVzLCBwcm9wZXJ0aWVzLCBlcXVhbGl0aWVzLCBqdWRnZW1lbnRzLCBhc3NlcnRpb25zLCBzdGF0ZW1lbnRzLCBzaWduYXR1cmVzLCByZWZlcmVuY2VzLCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlcywgc3Vic3RpdHV0aW9ucywgcHJvcGVydHlSZWxhdGlvbnMpO1xuXG4gICAgbW5lbWljQ29udGV4dC5pbml0aWFsaXNlKGpzb24pO1xuXG4gICAgcmV0dXJuIG1uZW1pY0NvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1zID0gW10sXG4gICAgICAgICAgZnJhbWVzID0gW10sXG4gICAgICAgICAgcHJvcGVydGllcyA9IFtdLFxuICAgICAgICAgIGVxdWFsaXRpZXMgPSBbXSxcbiAgICAgICAgICBqdWRnZW1lbnRzID0gW10sXG4gICAgICAgICAgc3RhdGVtZW50cyA9IFtdLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICBzaWduYXR1cmVzID0gW10sXG4gICAgICAgICAgcmVmZXJlbmNlcyA9IFtdLFxuICAgICAgICAgIGFzc3VtcHRpb25zID0gW10sXG4gICAgICAgICAgbWV0YXZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdLFxuICAgICAgICAgIG1uZW1pY0NvbnRleHQgPSBuZXcgTW5lbWljQ29udGV4dChjb250ZXh0LCB0ZXJtcywgZnJhbWVzLCBwcm9wZXJ0aWVzLCBlcXVhbGl0aWVzLCBqdWRnZW1lbnRzLCBhc3NlcnRpb25zLCBzdGF0ZW1lbnRzLCBzaWduYXR1cmVzLCByZWZlcmVuY2VzLCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlcywgc3Vic3RpdHV0aW9ucywgcHJvcGVydHlSZWxhdGlvbnMpO1xuXG4gICAgcmV0dXJuIG1uZW1pY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJNbmVtaWNDb250ZXh0IiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJ0ZXJtcyIsImZyYW1lcyIsInByb3BlcnRpZXMiLCJlcXVhbGl0aWVzIiwianVkZ2VtZW50cyIsImFzc2VydGlvbnMiLCJzdGF0ZW1lbnRzIiwic2lnbmF0dXJlcyIsInJlZmVyZW5jZXMiLCJhc3N1bXB0aW9ucyIsIm1ldGF2YXJpYWJsZXMiLCJzdWJzdGl0dXRpb25zIiwicHJvcGVydHlSZWxhdGlvbnMiLCJnZXRUZXJtcyIsImdldENvbnRleHQiLCJjb21wcmVzc1Rlcm1zIiwiZ2V0RnJhbWVzIiwiY29tcHJlc3NGcmFtZXMiLCJnZXRQcm9wZXJ0aWVzIiwiY29tcHJlc3NQcm9wZXJ0aWVzIiwiZ2V0RXF1YWxpdGllcyIsImNvbXByZXNzRXF1YWxpdGllcyIsImdldEp1ZGdlbWVudHMiLCJjb21wcmVzc0p1ZGdlbWVudHMiLCJnZXRTdGF0ZW1lbnRzIiwiY29tcHJlc3NTdGF0ZW1lbnRzIiwiZ2V0U2lnbmF0dXJlcyIsImNvbXByZXNzU2lnbmF0dXJlcyIsImdldEFzc2VydGlvbnMiLCJjb21wcmVzc0Fzc2VydGlvbnMiLCJnZXRSZWZlcmVuY2VzIiwiY29tcHJlc3NSZWZlcmVuY2VzIiwiZ2V0QXNzdW1wdGlvbnMiLCJjb21wcmVzc0Fzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsImNvbXByZXNzTWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJjb21wcmVzc1N1YnN0aXR1dGlvbnMiLCJnZXRQcm9wZXJ0eVJlbGF0aW9ucyIsImNvbXByZXNzUHJvcGVydHlSZWxhdGlvbnMiLCJhZGRUZXJtIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwiYWRkRnJhbWUiLCJmcmFtZSIsImZyYW1lU3RyaW5nIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5U3RyaW5nIiwiYWRkUHJvcGVydHkiLCJwcm9wZXJ0eSIsInByb3BlcnR5U3RyaW5nIiwiYWRkSnVkZ2VtZW50IiwianVkZ2VtZW50IiwianVkZ2VtZW50U3RyaW5nIiwiYWRkQXNzZXJ0aW9uIiwiYXNzZXJ0aW9uIiwiYXNzZXJ0aW9uU3RyaW5nIiwiYWRkU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwiYWRkU2lnbmF0dXJlIiwic2lnbmF0dXJlIiwic2lnbmF0dXJlU3RyaW5nIiwiYWRkUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicmVmZXJlbmNlU3RyaW5nIiwiYWRkQXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uU3RyaW5nIiwiYWRkTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwiYWRkU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uU3RyaW5nIiwiYWRkUHJvcGVydHlSZWxhdGlvbiIsInByb3BlcnR5UmVsYXRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nIiwiYWRkVGVybXMiLCJmb3JFYWNoIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidGVybU5vZGUiLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWVOb2RlTWF0Y2hlcyIsIm1hdGNoRnJhbWVOb2RlIiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGVNYXRjaGVzIiwibWF0Y2hFcXVhbGl0eU5vZGUiLCJmaW5kUHJvcGVydHlCeVByb3BlcnR5Tm9kZSIsInByb3BlcnR5Tm9kZSIsInByb3BlcnR5Tm9kZU1hdGNoZXMiLCJmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlIiwianVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hKdWRnZW1lbnROb2RlIiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoQXNzZXJ0aW9uTm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJmaW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZU5vZGVNYXRjaGVzIiwibWF0Y2hTaWduYXR1cmVOb2RlIiwiZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VNYXRjaGVSZWZlcmVuY2VOb2RlIiwibWF0Y2hSZWZlcmVuY2VOb2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoU3Vic3RpdHV0aW9uTm9kZSIsImZpbmRQcm9wZXJ0eVJlbGF0aW9uQnlQcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbk5vZGVNYXRjaGVzIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJkZWNsYXJlZFZhcmlhYmxlIiwiZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlIiwiaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUiLCJ0ZXJtUHJlc2VudCIsImlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUiLCJmcmFtZVByZXNlbnQiLCJpc0VxdWFsaXR5UHJlc2VudEJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlQcmVzZW50IiwiaXNQcm9wZXJ0eVByZXNlbnRCeVByb3BlcnR5Tm9kZSIsInByb3BlcnR5UHJlc2VudCIsImlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudFByZXNlbnQiLCJpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25QcmVzZW50IiwiaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50UHJlc2VudCIsImlzU2lnbmF0dXJlUHJlc2VudEJ5U2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZVByZXNlbnQiLCJpc0Fzc3VtcHRpb25QcmVzZW50QnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25QcmVzZW50IiwiaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlUHJlc2VudCIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZW5Ob2RlIiwibWV0YXZhcmlhYmxlbiIsIm1ldGF2YXJpYWJsZW5QcmVzZW50IiwiaXNTdWJzdGl0dXRpb25QcmVzZW50QnlTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uUHJlc2VudCIsImlzUHJvcGVydHlSZWxhdGlvbnJlc2VudEJ5UHJvcGVydHlSZWxhdGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9ucmVzZW50IiwiY29tbWl0IiwiZWxlbWVudCIsInNldENvbnRleHQiLCJpbml0aWFsaXNlIiwianNvbiIsInRlcm1zRnJvbUpTT04iLCJtZXRhdmFyaWFibGVzRnJvbUpTT04iLCJzdGF0ZW1lbnRzRnJvbUpTT04iLCJyZWZlcmVuY2VzRnJvbUpTT04iLCJlcXVhbGl0aWVzRnJvbUpTT04iLCJhc3N1bXB0aW9uc0Zyb21KU09OIiwiZnJhbWVzRnJvbUpTT04iLCJwcm9wZXJ0aWVzRnJvbUpTT04iLCJqdWRnZW1lbnRzRnJvbUpTT04iLCJhc3NlcnRpb25zRnJvbUpTT04iLCJzaWduYXR1cmVzRnJvbUpTT04iLCJzdWJzdGl0dXRpb25zRnJvbUpTT04iLCJwcm9wZXJ0eVJlbGF0aW9uc0Zyb21KU09OIiwidG9KU09OIiwidGVybXNKU09OIiwidGVybXNUb1Rlcm1zSlNPTiIsImZyYW1lc0pTT04iLCJmcmFtZXNUb0ZyYW1lc0pTT04iLCJwcm9wZXJ0aWVzSlNPTiIsInByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OIiwiZXF1YWxpdGllc0pTT04iLCJlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTiIsImp1ZGdlbWVudHNKU09OIiwianVkZ2VtZW50c1RvSnVkZ2VtZW50c0pTT04iLCJhc3NlcnRpb25zSlNPTiIsImFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OIiwic3RhdGVtZW50c0pTT04iLCJzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTiIsInNpZ25hdHVyZXNKU09OIiwic2lnbmF0dXJlc1RvU2lnbmF0dXJlc0pTT04iLCJyZWZlcmVuY2VzSlNPTiIsInJlZmVyZW5jZXNUb1JlZmVyZW5jZXNKU09OIiwiYXNzdW1wdGlvbnNKU09OIiwiYXNzdW1wdGlvbnNUb0Fzc3VtcHRpb25zSlNPTiIsIm1ldGF2YXJpYWJsZXNKU09OIiwibWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04iLCJzdWJzdGl0dXRpb25zSlNPTiIsInN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OIiwicHJvcGVydHlSZWxhdGlvbnNKU09OIiwicHJvcGVydHlSZWxhdGlvbnNUb1Byb3BlcnR5UmVsYXRpb25zSlNPTiIsImZyb21KU09OIiwibW5lbWljQ29udGV4dCIsImZyb21Ob3RoaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFnREE7OztlQUFxQkE7OzsyQkE5Q1U7Z0VBRVg7MEJBY3NCO3NCQTBCZTs7Ozs7O0FBRXpELE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHlCQUFjO0FBRWhCLE1BQU1GLHNCQUFzQkcsZ0JBQU87SUFDaEQsWUFBWUMsT0FBTyxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxXQUFXLEVBQUVD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
@@ -60,6 +60,13 @@ class SynopticContext extends _context.default {
60
60
  (0, _synoptic.compressJudgements)(judgements);
61
61
  return judgements;
62
62
  }
63
+ getAssertions(assertions = []) {
64
+ this.contexts.forEach((context)=>{
65
+ context.getAssertions(assertions);
66
+ });
67
+ (0, _synoptic.compressAssertions)(assertions);
68
+ return assertions;
69
+ }
63
70
  getStatements(statements = []) {
64
71
  this.contexts.forEach((context)=>{
65
72
  context.getStatements(statements);
@@ -67,12 +74,12 @@ class SynopticContext extends _context.default {
67
74
  (0, _synoptic.compressStatements)(statements);
68
75
  return statements;
69
76
  }
70
- getAssertions(assertions = []) {
77
+ getSignatures(signatures = []) {
71
78
  this.contexts.forEach((context)=>{
72
- context.getAssertions(assertions);
79
+ context.getSignatures(signatures);
73
80
  });
74
- (0, _synoptic.compressAssertions)(assertions);
75
- return assertions;
81
+ (0, _synoptic.compressSignatures)(signatures);
82
+ return signatures;
76
83
  }
77
84
  getReferences(references = []) {
78
85
  this.contexts.forEach((context)=>{
@@ -154,6 +161,15 @@ class SynopticContext extends _context.default {
154
161
  }) || null;
155
162
  return judgement;
156
163
  }
164
+ findAssertionByAssertionNode(assertionNode) {
165
+ const assertions = this.getAssertions(), assertion = assertions.find((assertion)=>{
166
+ const assertionNodeMatches = assertion.matchAssertionNode(assertionNode);
167
+ if (assertionNodeMatches) {
168
+ return true;
169
+ }
170
+ }) || null;
171
+ return assertion;
172
+ }
157
173
  findStatementByStatementNode(statementNode) {
158
174
  const statements = this.getStatements(), statement = statements.find((statement)=>{
159
175
  const statementNodeMatches = statement.matchStatementNode(statementNode);
@@ -163,6 +179,15 @@ class SynopticContext extends _context.default {
163
179
  }) || null;
164
180
  return statement;
165
181
  }
182
+ findSignatureBySignatureNode(signatureNode) {
183
+ const signatures = this.getSignatures(), signature = signatures.find((signature)=>{
184
+ const signatureNodeMatches = signature.matchSignatureNode(signatureNode);
185
+ if (signatureNodeMatches) {
186
+ return true;
187
+ }
188
+ }) || null;
189
+ return signature;
190
+ }
166
191
  findReferenceByReferenceNode(referenceNode) {
167
192
  const references = this.getReferences(), reference = references.find((reference)=>{
168
193
  const referenceMatcheReferenceNode = reference.matchReferenceNode(referenceNode);
@@ -172,15 +197,6 @@ class SynopticContext extends _context.default {
172
197
  }) || null;
173
198
  return reference;
174
199
  }
175
- findAssertionByAssertionNode(assertionNode) {
176
- const assertions = this.getAssertions(), assertion = assertions.find((assertion)=>{
177
- const assertionNodeMatches = assertion.matchAssertionNode(assertionNode);
178
- if (assertionNodeMatches) {
179
- return true;
180
- }
181
- }) || null;
182
- return assertion;
183
- }
184
200
  findAssumptionByAssumptionNode(assumptionNode) {
185
201
  const assumptions = this.getAssumptions(), assumption = assumptions.find((assumption)=>{
186
202
  const assumptionNodeMatches = assumption.matchAssumptionNode(assumptionNode);
@@ -232,4 +248,4 @@ class SynopticContext extends _context.default {
232
248
  }
233
249
  }
234
250
 
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3N5bm9wdGljLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcblxuaW1wb3J0IHsgY29tcHJlc3NUZXJtcyxcbiAgICAgICAgIGNvbXByZXNzRnJhbWVzLFxuICAgICAgICAgY29tcHJlc3NQcm9wZXJ0aWVzLFxuICAgICAgICAgY29tcHJlc3NFcXVhbGl0aWVzLFxuICAgICAgICAgY29tcHJlc3NKdWRnZW1lbnRzLFxuICAgICAgICAgY29tcHJlc3NBc3NlcnRpb25zLFxuICAgICAgICAgY29tcHJlc3NTdGF0ZW1lbnRzLFxuICAgICAgICAgY29tcHJlc3NSZWZlcmVuY2VzLFxuICAgICAgICAgY29tcHJlc3NBc3N1bXB0aW9ucyxcbiAgICAgICAgIGNvbXByZXNzTWV0YXZhcmlhYmxlcyxcbiAgICAgICAgIGNvbXByZXNzU3Vic3RpdHV0aW9ucyxcbiAgICAgICAgIGNvbXByZXNzUHJvcGVydHlSZWxhdGlvbnMsfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N5bm9wdGljXCI7XG5cbmNvbnN0IHsgbGFzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN5bm9wdGljQ29udGV4dCBleHRlbmRzIENvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBjb250ZXh0cykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5jb250ZXh0cyA9IGNvbnRleHRzO1xuICB9XG5cbiAgZ2V0Q29udGV4dHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dHM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LmdldFRlcm1zKHRlcm1zKTtcbiAgICB9KTtcblxuICAgIGNvbXByZXNzVGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LmdldEZyYW1lcyhmcmFtZXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXRpZXM7XG4gIH1cblxuICBnZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NKdWRnZW1lbnRzKGp1ZGdlbWVudHMpO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudHM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NTdGF0ZW1lbnRzKHN0YXRlbWVudHMpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKGFzc2VydGlvbnMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LmdldEFzc3VtcHRpb25zKGFzc3VtcHRpb25zKTtcbiAgICB9KTtcblxuICAgIGNvbXByZXNzQXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcbiAgICB9KTtcblxuICAgIGNvbXByZXNzTWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnRleHQuZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKTtcbiAgICB9KTtcblxuICAgIGNvbXByZXNzU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlSZWxhdGlvbnMocHJvcGVydHlSZWxhdGlvbnMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRQcm9wZXJ0eVJlbGF0aW9ucyhwcm9wZXJ0eVJlbGF0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBjb21wcmVzc1Byb3BlcnR5UmVsYXRpb25zKHByb3BlcnR5UmVsYXRpb25zKTtcblxuICAgIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9ucztcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtcy5maW5kKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZXMuZmluZCgoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lTm9kZU1hdGNoZXMgPSBmcmFtZS5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZFByb3BlcnR5QnlQcm9wZXR5Tm9kZShwcm9wZXJ0eU5vZGUpIHtcbiAgICBjb25zdCBwcm9wZXJ0eXMgPSB0aGlzLmdldFByb3BlcnRpZXMoKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5cy5maW5kKChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOb2RlTWF0Y2hlcyA9IHByb3BlcnR5Lm1hdGNoRnJhbWVOb2RlKHByb3BlcnR5Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH1cblxuICBmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0aWVzID0gdGhpcy5nZXRFcXVhbGl0aWVzKCksXG4gICAgICAgICAgZXF1YWxpdHkgPSBlcXVhbGl0aWVzLmZpbmQoKGVxdWFsaXR5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlcXVhbGl0eU5vZGVNYXRjaGVzID0gZXF1YWxpdHkubWF0Y2hFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGVxdWFsaXR5Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfVxuXG4gIGZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSkge1xuICAgIGNvbnN0IGp1ZGdlbWVudHMgPSB0aGlzLmdldEp1ZGdlbWVudHMoKSxcbiAgICAgICAgICBqdWRnZW1lbnQgPSBqdWRnZW1lbnRzLmZpbmQoKGp1ZGdlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QganVkZ2VtZW50Tm9kZU1hdGNoZXMgPSBqdWRnZW1lbnQubWF0Y2hKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoanVkZ2VtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cblxuICBmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gdGhpcy5nZXRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50cy5maW5kKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGVNYXRjaGVzID0gc3RhdGVtZW50Lm1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlbWVudE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlcyA9IHRoaXMuZ2V0UmVmZXJlbmNlcygpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMuZmluZCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWZlcmVuY2VNYXRjaGVSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlLm1hdGNoUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH1cblxuICBmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3NlcnRpb25zID0gdGhpcy5nZXRBc3NlcnRpb25zKCksXG4gICAgICAgICAgYXNzZXJ0aW9uID0gYXNzZXJ0aW9ucy5maW5kKChhc3NlcnRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydGlvbk5vZGVNYXRjaGVzID0gYXNzZXJ0aW9uLm1hdGNoQXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc2VydGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSB0aGlzLmdldEFzc3VtcHRpb25zKCksXG4gICAgICAgICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25zLmZpbmQoKGFzc3VtcHRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IGFzc3VtcHRpb24ubWF0Y2hBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3N1bXB0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9XG5cbiAgZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlcyA9IHRoaXMuZ2V0UmVmZXJlbmNlcygpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMuZmluZCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZU1hdGNoZU1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVzID0gdGhpcy5nZXRNZXRhdmFyaWFibGVzKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlcy5maW5kKChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZCgoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IHN1YnN0aXR1dGlvbi5tYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRQcm9wZXJ0eVJlbGF0aW9uQnlQcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSkge1xuICAgIGNvbnN0IHByb3BlcnR5UmVsYXRpb25zID0gdGhpcy5nZXRQcm9wZXJ0eVJlbGF0aW9ucygpLFxuICAgICAgICAgIHByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eVJlbGF0aW9ucy5maW5kKChwcm9wZXJ0eVJlbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uTm9kZU1hdGNoZXMgPSBwcm9wZXJ0eVJlbGF0aW9uLm1hdGNoUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocHJvcGVydHlSZWxhdGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGV4dHMoY29udGV4dHMpIHtcbiAgICBjb25zdCBsYXN0Q29udGV4dCA9IGxhc3QoY29udGV4dHMpLFxuICAgICAgICAgIGNvbnRleHQgPSBsYXN0Q29udGV4dCwgIC8vL1xuICAgICAgICAgIHN5bm9wdGljQ29udGV4dCA9IG5ldyBTeW5vcHRpY0NvbnRleHQoY29udGV4dCwgY29udGV4dHMpO1xuXG4gICAgcmV0dXJuIHN5bm9wdGljQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlN5bm9wdGljQ29udGV4dCIsImxhc3QiLCJhcnJheVV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwiY29udGV4dHMiLCJnZXRDb250ZXh0cyIsImdldFRlcm1zIiwidGVybXMiLCJmb3JFYWNoIiwiY29tcHJlc3NUZXJtcyIsImdldEZyYW1lcyIsImZyYW1lcyIsImNvbXByZXNzRnJhbWVzIiwiZ2V0UHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJjb21wcmVzc1Byb3BlcnRpZXMiLCJnZXRFcXVhbGl0aWVzIiwiZXF1YWxpdGllcyIsImNvbXByZXNzRXF1YWxpdGllcyIsImdldEp1ZGdlbWVudHMiLCJqdWRnZW1lbnRzIiwiY29tcHJlc3NKdWRnZW1lbnRzIiwiZ2V0U3RhdGVtZW50cyIsInN0YXRlbWVudHMiLCJjb21wcmVzc1N0YXRlbWVudHMiLCJnZXRBc3NlcnRpb25zIiwiYXNzZXJ0aW9ucyIsImNvbXByZXNzQXNzZXJ0aW9ucyIsImdldFJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwiY29tcHJlc3NSZWZlcmVuY2VzIiwiZ2V0QXNzdW1wdGlvbnMiLCJhc3N1bXB0aW9ucyIsImNvbXByZXNzQXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlcyIsImNvbXByZXNzTWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25zIiwiY29tcHJlc3NTdWJzdGl0dXRpb25zIiwiZ2V0UHJvcGVydHlSZWxhdGlvbnMiLCJwcm9wZXJ0eVJlbGF0aW9ucyIsImNvbXByZXNzUHJvcGVydHlSZWxhdGlvbnMiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsInRlcm0iLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJmaW5kUHJvcGVydHlCeVByb3BldHlOb2RlIiwicHJvcGVydHlOb2RlIiwicHJvcGVydHlzIiwicHJvcGVydHkiLCJwcm9wZXJ0eU5vZGVNYXRjaGVzIiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eSIsImVxdWFsaXR5Tm9kZU1hdGNoZXMiLCJtYXRjaEVxdWFsaXR5Tm9kZSIsImZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnROb2RlIiwianVkZ2VtZW50IiwianVkZ2VtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaEp1ZGdlbWVudE5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudCIsInN0YXRlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hTdGF0ZW1lbnROb2RlIiwiZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2UiLCJyZWZlcmVuY2VNYXRjaGVSZWZlcmVuY2VOb2RlIiwibWF0Y2hSZWZlcmVuY2VOb2RlIiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb24iLCJhc3NlcnRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoQXNzZXJ0aW9uTm9kZSIsImZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbiIsImFzc3VtcHRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoQXNzdW1wdGlvbk5vZGUiLCJmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZU1hdGNoZU1ldGF2YXJpYWJsZU5vZGUiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hTdWJzdGl0dXRpb25Ob2RlIiwiZmluZFByb3BlcnR5UmVsYXRpb25CeVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uIiwicHJvcGVydHlSZWxhdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hQcm9wZXJ0eVJlbGF0aW9uTm9kZSIsImZyb21Db250ZXh0cyIsImxhc3RDb250ZXh0Iiwic3lub3B0aWNDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFxQkE7OztlQUFxQkE7OzsyQkFuQlU7Z0VBRVg7MEJBYXNCOzs7Ozs7QUFFMUMsTUFBTSxFQUFFQyxJQUFJLEVBQUUsR0FBR0MseUJBQWM7QUFFaEIsTUFBTUYsd0JBQXdCRyxnQkFBTztJQUNsRCxZQUFZQyxPQUFPLEVBQUVDLFFBQVEsQ0FBRTtRQUM3QixLQUFLLENBQUNEO1FBRU4sSUFBSSxDQUFDQyxRQUFRLEdBQUdBO0lBQ2xCO0lBRUFDLGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQ0QsUUFBUTtJQUN0QjtJQUVBRSxTQUFTQyxRQUFRLEVBQUUsRUFBRTtRQUNuQixJQUFJLENBQUNILFFBQVEsQ0FBQ0ksT0FBTyxDQUFDLENBQUNMO1lBQ3JCQSxRQUFRRyxRQUFRLENBQUNDO1FBQ25CO1FBRUFFLElBQUFBLHVCQUFhLEVBQUNGO1FBRWQsT0FBT0E7SUFDVDtJQUVBRyxVQUFVQyxTQUFTLEVBQUUsRUFBRTtRQUNyQixJQUFJLENBQUNQLFFBQVEsQ0FBQ0ksT0FBTyxDQUFDLENBQUNMO1lBQ3JCQSxRQUFRTyxTQUFTLENBQUNDO1FBQ3BCO1FBRUFDLElBQUFBLHdCQUFjLEVBQUNEO1FBRWYsT0FBT0E7SUFDVDtJQUVBRSxjQUFjQyxhQUFhLEVBQUUsRUFBRTtRQUM3QixJQUFJLENBQUNWLFFBQVEsQ0FBQ0ksT0FBTyxDQUFDLENBQUNMO1lBQ3JCQSxRQUFRVSxhQUFhLENBQUNDO1FBQ3hCO1FBRUFDLElBQUFBLDRCQUFrQixFQUFDRDtRQUVuQixPQUFPQTtJQUNUO0lBRUFFLGNBQWNDLGFBQWEsRUFBRSxFQUFFO1FBQzdCLElBQUksQ0FBQ2IsUUFBUSxDQUFDSSxPQUFPLENBQUMsQ0FBQ0w7WUFDckJBLFFBQVFhLGFBQWEsQ0FBQ0M7UUFDeEI7UUFFQUMsSUFBQUEsNEJBQWtCLEVBQUNEO1FBRW5CLE9BQU9BO0lBQ1Q7SUFFQUUsY0FBY0MsYUFBYSxFQUFFLEVBQUU7UUFDN0IsSUFBSSxDQUFDaEIsUUFBUSxDQUFDSSxPQUFPLENBQUMsQ0FBQ0w7WUFDckJBLFFBQVFnQixhQUFhLENBQUNDO1FBQ3hCO1FBRUFDLElBQUFBLDRCQUFrQixFQUFDRDtRQUVuQixPQUFPQTtJQUNUO0lBRUFFLGNBQWNDLGFBQWEsRUFBRSxFQUFFO1FBQzdCLElBQUksQ0FBQ25CLFFBQVEsQ0FBQ0ksT0FBTyxDQUFDLENBQUNMO1lBQ3JCQSxRQUFRbUIsYUFBYSxDQUFDQztRQUN4QjtRQUVBQyxJQUFBQSw0QkFBa0IsRUFBQ0Q7UUFFbkIsT0FBT0E7SUFDVDtJQUVBRSxjQUFjQyxhQUFhLEVBQUUsRUFBRTtRQUM3QixJQUFJLENBQUN0QixRQUFRLENBQUNJLE9BQU8sQ0FBQyxDQUFDTDtZQUNyQkEsUUFBUXNCLGFBQWEsQ0FBQ0M7UUFDeEI7UUFFQUMsSUFBQUEsNEJBQWtCLEVBQUNEO1FBRW5CLE9BQU9BO0lBQ1Q7SUFFQUUsY0FBY0MsYUFBYSxFQUFFLEVBQUU7UUFDN0IsSUFBSSxDQUFDekIsUUFBUSxDQUFDSSxPQUFPLENBQUMsQ0FBQ0w7WUFDckJBLFFBQVF5QixhQUFhLENBQUNDO1FBQ3hCO1FBRUFDLElBQUFBLDRCQUFrQixFQUFDRDtRQUVuQixPQUFPQTtJQUNUO0lBRUFFLGVBQWVDLGNBQWMsRUFBRSxFQUFFO1FBQy9CLElBQUksQ0FBQzVCLFFBQVEsQ0FBQ0ksT0FBTyxDQUFDLENBQUNMO1lBQ3JCQSxRQUFRNEIsY0FBYyxDQUFDQztRQUN6QjtRQUVBQyxJQUFBQSw2QkFBbUIsRUFBQ0Q7UUFFcEIsT0FBT0E7SUFDVDtJQUVBRSxpQkFBaUJDLGdCQUFnQixFQUFFLEVBQUU7UUFDbkMsSUFBSSxDQUFDL0IsUUFBUSxDQUFDSSxPQUFPLENBQUMsQ0FBQ0w7WUFDckJBLFFBQVErQixnQkFBZ0IsQ0FBQ0M7UUFDM0I7UUFFQUMsSUFBQUEsK0JBQXFCLEVBQUNEO1FBRXRCLE9BQU9BO0lBQ1Q7SUFFQUUsaUJBQWlCQyxnQkFBZ0IsRUFBRSxFQUFFO1FBQ25DLElBQUksQ0FBQ2xDLFFBQVEsQ0FBQ0ksT0FBTyxDQUFDLENBQUNMO1lBQ3JCQSxRQUFRa0MsZ0JBQWdCLENBQUNDO1FBQzNCO1FBRUFDLElBQUFBLCtCQUFxQixFQUFDRDtRQUV0QixPQUFPQTtJQUNUO0lBRUFFLHFCQUFxQkMsb0JBQW9CLEVBQUUsRUFBRTtRQUMzQyxJQUFJLENBQUNyQyxRQUFRLENBQUNJLE9BQU8sQ0FBQyxDQUFDTDtZQUNyQkEsUUFBUXFDLG9CQUFvQixDQUFDQztRQUMvQjtRQUVBQyxJQUFBQSxtQ0FBeUIsRUFBQ0Q7UUFFMUIsT0FBT0E7SUFDVDtJQUVBRSxtQkFBbUJDLFFBQVEsRUFBRTtRQUMzQixNQUFNckMsUUFBUSxJQUFJLENBQUNELFFBQVEsSUFDckJ1QyxPQUFPdEMsTUFBTXVDLElBQUksQ0FBQyxDQUFDRDtZQUNqQixNQUFNRSxrQkFBa0JGLEtBQUtHLGFBQWEsQ0FBQ0o7WUFFM0MsSUFBSUcsaUJBQWlCO2dCQUNuQixPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBT0Y7SUFDVDtJQUVBSSxxQkFBcUJDLFNBQVMsRUFBRTtRQUM5QixNQUFNdkMsU0FBUyxJQUFJLENBQUNELFNBQVMsSUFDdkJ5QyxRQUFReEMsT0FBT21DLElBQUksQ0FBQyxDQUFDSztZQUNuQixNQUFNQyxtQkFBbUJELE1BQU1FLGNBQWMsQ0FBQ0g7WUFFOUMsSUFBSUUsa0JBQWtCO2dCQUNwQixPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBT0Q7SUFDVDtJQUVBRywwQkFBMEJDLFlBQVksRUFBRTtRQUN0QyxNQUFNQyxZQUFZLElBQUksQ0FBQzNDLGFBQWEsSUFDOUI0QyxXQUFXRCxVQUFVVixJQUFJLENBQUMsQ0FBQ1c7WUFDekIsTUFBTUMsc0JBQXNCRCxTQUFTSixjQUFjLENBQUNFO1lBRXBELElBQUlHLHFCQUFxQjtnQkFDdkIsT0FBTztZQUNUO1FBQ0YsTUFBTTtRQUVaLE9BQU9EO0lBQ1Q7SUFFQUUsMkJBQTJCQyxZQUFZLEVBQUU7UUFDdkMsTUFBTTNDLGFBQWEsSUFBSSxDQUFDRCxhQUFhLElBQy9CNkMsV0FBVzVDLFdBQVc2QixJQUFJLENBQUMsQ0FBQ2U7WUFDMUIsTUFBTUMsc0JBQXNCRCxTQUFTRSxpQkFBaUIsQ0FBQ0g7WUFFdkQsSUFBSUUscUJBQXFCO2dCQUN2QixPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBT0Q7SUFDVDtJQUVBRyw2QkFBNkJDLGFBQWEsRUFBRTtRQUMxQyxNQUFNN0MsYUFBYSxJQUFJLENBQUNELGFBQWEsSUFDL0IrQyxZQUFZOUMsV0FBVzBCLElBQUksQ0FBQyxDQUFDb0I7WUFDM0IsTUFBTUMsdUJBQXVCRCxVQUFVRSxrQkFBa0IsQ0FBQ0g7WUFFMUQsSUFBSUUsc0JBQXNCO2dCQUN4QixPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBT0Q7SUFDVDtJQUVBRyw2QkFBNkJDLGFBQWEsRUFBRTtRQUMxQyxNQUFNL0MsYUFBYSxJQUFJLENBQUNELGFBQWEsSUFDL0JpRCxZQUFZaEQsV0FBV3VCLElBQUksQ0FBQyxDQUFDeUI7WUFDM0IsTUFBTUMsdUJBQXVCRCxVQUFVRSxrQkFBa0IsQ0FBQ0g7WUFFMUQsSUFBSUUsc0JBQXNCO2dCQUN4QixPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBT0Q7SUFDVDtJQUVBRyw2QkFBNkJDLGFBQWEsRUFBRTtRQUMxQyxNQUFNOUMsYUFBYSxJQUFJLENBQUNELGFBQWEsSUFDL0JnRCxZQUFZL0MsV0FBV2lCLElBQUksQ0FBQyxDQUFDOEI7WUFDM0IsTUFBTUMsK0JBQStCRCxVQUFVRSxrQkFBa0IsQ0FBQ0g7WUFFbEUsSUFBSUUsOEJBQThCO2dCQUNoQyxPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBT0Q7SUFDVDtJQUVBRyw2QkFBNkJDLGFBQWEsRUFBRTtRQUMxQyxNQUFNdEQsYUFBYSxJQUFJLENBQUNELGFBQWEsSUFDL0J3RCxZQUFZdkQsV0FBV29CLElBQUksQ0FBQyxDQUFDbUM7WUFDM0IsTUFBTUMsdUJBQXVCRCxVQUFVRSxrQkFBa0IsQ0FBQ0g7WUFFMUQsSUFBSUUsc0JBQXNCO2dCQUN4QixPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBT0Q7SUFDVDtJQUVBRywrQkFBK0JDLGNBQWMsRUFBRTtRQUM3QyxNQUFNckQsY0FBYyxJQUFJLENBQUNELGNBQWMsSUFDakN1RCxhQUFhdEQsWUFBWWMsSUFBSSxDQUFDLENBQUN3QztZQUM3QixNQUFNQyx3QkFBd0JELFdBQVdFLG1CQUFtQixDQUFDSDtZQUU3RCxJQUFJRSx1QkFBdUI7Z0JBQ3pCLE9BQU87WUFDVDtRQUNGLE1BQU07UUFFWixPQUFPRDtJQUNUO0lBRUFHLGdDQUFnQ0MsZ0JBQWdCLEVBQUU7UUFDaEQsTUFBTTdELGFBQWEsSUFBSSxDQUFDRCxhQUFhLElBQy9CZ0QsWUFBWS9DLFdBQVdpQixJQUFJLENBQUMsQ0FBQzhCO1lBQzNCLE1BQU1lLGtDQUFrQ2YsVUFBVWdCLHFCQUFxQixDQUFDRjtZQUV4RSxJQUFJQyxpQ0FBaUM7Z0JBQ25DLE9BQU87WUFDVDtRQUNGLE1BQU07UUFFWixPQUFPZjtJQUNUO0lBRUFpQixtQ0FBbUNILGdCQUFnQixFQUFFO1FBQ25ELE1BQU12RCxnQkFBZ0IsSUFBSSxDQUFDRCxnQkFBZ0IsSUFDckM0RCxlQUFlM0QsY0FBY1csSUFBSSxDQUFDLENBQUNnRDtZQUNqQyxNQUFNQywwQkFBMEJELGFBQWFGLHFCQUFxQixDQUFDRjtZQUVuRSxJQUFJSyx5QkFBeUI7Z0JBQzNCLE9BQU87WUFDVDtRQUNGLE1BQU07UUFFWixPQUFPRDtJQUNUO0lBRUFFLG1DQUFtQ0MsZ0JBQWdCLEVBQUU7UUFDbkQsTUFBTTNELGdCQUFnQixJQUFJLENBQUNELGdCQUFnQixJQUNyQzZELGVBQWU1RCxjQUFjUSxJQUFJLENBQUMsQ0FBQ29EO1lBQ2pDLE1BQU1DLDBCQUEwQkQsYUFBYUUscUJBQXFCLENBQUNIO1lBRW5FLElBQUlFLHlCQUF5QjtnQkFDM0IsT0FBTztZQUNUO1FBQ0YsTUFBTTtRQUVaLE9BQU9EO0lBQ1Q7SUFFQUcsMkNBQTJDQyxvQkFBb0IsRUFBRTtRQUMvRCxNQUFNN0Qsb0JBQW9CLElBQUksQ0FBQ0Qsb0JBQW9CLElBQzdDK0QsbUJBQW1COUQsa0JBQWtCSyxJQUFJLENBQUMsQ0FBQ3lEO1lBQ3pDLE1BQU1DLDhCQUE4QkQsaUJBQWlCRSx5QkFBeUIsQ0FBQ0g7WUFFL0UsSUFBSUUsNkJBQTZCO2dCQUMvQixPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosT0FBT0Q7SUFDVDtJQUVBLE9BQU9HLGFBQWF0RyxRQUFRLEVBQUU7UUFDNUIsTUFBTXVHLGNBQWMzRyxLQUFLSSxXQUNuQkQsVUFBVXdHLGFBQ1ZDLGtCQUFrQixJQUFJN0csZ0JBQWdCSSxTQUFTQztRQUVyRCxPQUFPd0c7SUFDVDtBQUNGIn0=
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3N5bm9wdGljLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcblxuaW1wb3J0IHsgY29tcHJlc3NUZXJtcyxcbiAgICAgICAgIGNvbXByZXNzRnJhbWVzLFxuICAgICAgICAgY29tcHJlc3NQcm9wZXJ0aWVzLFxuICAgICAgICAgY29tcHJlc3NFcXVhbGl0aWVzLFxuICAgICAgICAgY29tcHJlc3NKdWRnZW1lbnRzLFxuICAgICAgICAgY29tcHJlc3NBc3NlcnRpb25zLFxuICAgICAgICAgY29tcHJlc3NTdGF0ZW1lbnRzLFxuICAgICAgICAgY29tcHJlc3NTaWduYXR1cmVzLFxuICAgICAgICAgY29tcHJlc3NSZWZlcmVuY2VzLFxuICAgICAgICAgY29tcHJlc3NBc3N1bXB0aW9ucyxcbiAgICAgICAgIGNvbXByZXNzTWV0YXZhcmlhYmxlcyxcbiAgICAgICAgIGNvbXByZXNzU3Vic3RpdHV0aW9ucyxcbiAgICAgICAgIGNvbXByZXNzUHJvcGVydHlSZWxhdGlvbnMsfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N5bm9wdGljXCI7XG5cbmNvbnN0IHsgbGFzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN5bm9wdGljQ29udGV4dCBleHRlbmRzIENvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBjb250ZXh0cykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5jb250ZXh0cyA9IGNvbnRleHRzO1xuICB9XG5cbiAgZ2V0Q29udGV4dHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dHM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LmdldFRlcm1zKHRlcm1zKTtcbiAgICB9KTtcblxuICAgIGNvbXByZXNzVGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LmdldEZyYW1lcyhmcmFtZXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXRpZXM7XG4gIH1cblxuICBnZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NKdWRnZW1lbnRzKGp1ZGdlbWVudHMpO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudHM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKGFzc2VydGlvbnMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NTdGF0ZW1lbnRzKHN0YXRlbWVudHMpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRTaWduYXR1cmVzKHNpZ25hdHVyZXMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRTaWduYXR1cmVzKHNpZ25hdHVyZXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NTaWduYXR1cmVzKHNpZ25hdHVyZXMpO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZXM7XG4gIH1cblxuICBnZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LmdldEFzc3VtcHRpb25zKGFzc3VtcHRpb25zKTtcbiAgICB9KTtcblxuICAgIGNvbXByZXNzQXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcbiAgICB9KTtcblxuICAgIGNvbXByZXNzTWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnRleHQuZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKTtcbiAgICB9KTtcblxuICAgIGNvbXByZXNzU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlSZWxhdGlvbnMocHJvcGVydHlSZWxhdGlvbnMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRQcm9wZXJ0eVJlbGF0aW9ucyhwcm9wZXJ0eVJlbGF0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBjb21wcmVzc1Byb3BlcnR5UmVsYXRpb25zKHByb3BlcnR5UmVsYXRpb25zKTtcblxuICAgIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9ucztcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtcy5maW5kKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZXMuZmluZCgoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lTm9kZU1hdGNoZXMgPSBmcmFtZS5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZFByb3BlcnR5QnlQcm9wZXR5Tm9kZShwcm9wZXJ0eU5vZGUpIHtcbiAgICBjb25zdCBwcm9wZXJ0eXMgPSB0aGlzLmdldFByb3BlcnRpZXMoKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5cy5maW5kKChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOb2RlTWF0Y2hlcyA9IHByb3BlcnR5Lm1hdGNoRnJhbWVOb2RlKHByb3BlcnR5Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH1cblxuICBmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0aWVzID0gdGhpcy5nZXRFcXVhbGl0aWVzKCksXG4gICAgICAgICAgZXF1YWxpdHkgPSBlcXVhbGl0aWVzLmZpbmQoKGVxdWFsaXR5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlcXVhbGl0eU5vZGVNYXRjaGVzID0gZXF1YWxpdHkubWF0Y2hFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKTtcblxuICAgICAgICAgICAgaWYgKGVxdWFsaXR5Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfVxuXG4gIGZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSkge1xuICAgIGNvbnN0IGp1ZGdlbWVudHMgPSB0aGlzLmdldEp1ZGdlbWVudHMoKSxcbiAgICAgICAgICBqdWRnZW1lbnQgPSBqdWRnZW1lbnRzLmZpbmQoKGp1ZGdlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QganVkZ2VtZW50Tm9kZU1hdGNoZXMgPSBqdWRnZW1lbnQubWF0Y2hKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoanVkZ2VtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cblxuICBmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3NlcnRpb25zID0gdGhpcy5nZXRBc3NlcnRpb25zKCksXG4gICAgICAgICAgYXNzZXJ0aW9uID0gYXNzZXJ0aW9ucy5maW5kKChhc3NlcnRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydGlvbk5vZGVNYXRjaGVzID0gYXNzZXJ0aW9uLm1hdGNoQXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc2VydGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IHRoaXMuZ2V0U3RhdGVtZW50cygpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudHMuZmluZCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHN0YXRlbWVudC5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSkge1xuICAgIGNvbnN0IHNpZ25hdHVyZXMgPSB0aGlzLmdldFNpZ25hdHVyZXMoKSxcbiAgICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVzLmZpbmQoKHNpZ25hdHVyZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2lnbmF0dXJlTm9kZU1hdGNoZXMgPSBzaWduYXR1cmUubWF0Y2hTaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc2lnbmF0dXJlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzaWduYXR1cmU7XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc3VtcHRpb25zID0gdGhpcy5nZXRBc3N1bXB0aW9ucygpLFxuICAgICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9ucy5maW5kKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBhc3N1bXB0aW9uLm1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzdW1wdGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfVxuXG4gIGZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VzLmZpbmQoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZXMuZmluZCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IG1ldGF2YXJpYWJsZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLmZpbmQoKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBzdWJzdGl0dXRpb24ubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kUHJvcGVydHlSZWxhdGlvbkJ5UHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUpIHtcbiAgICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9ucyA9IHRoaXMuZ2V0UHJvcGVydHlSZWxhdGlvbnMoKSxcbiAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbnMuZmluZCgocHJvcGVydHlSZWxhdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlSZWxhdGlvbk5vZGVNYXRjaGVzID0gcHJvcGVydHlSZWxhdGlvbi5tYXRjaFByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHByb3BlcnR5UmVsYXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRleHRzKGNvbnRleHRzKSB7XG4gICAgY29uc3QgbGFzdENvbnRleHQgPSBsYXN0KGNvbnRleHRzKSxcbiAgICAgICAgICBjb250ZXh0ID0gbGFzdENvbnRleHQsICAvLy9cbiAgICAgICAgICBzeW5vcHRpY0NvbnRleHQgPSBuZXcgU3lub3B0aWNDb250ZXh0KGNvbnRleHQsIGNvbnRleHRzKTtcblxuICAgIHJldHVybiBzeW5vcHRpY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJTeW5vcHRpY0NvbnRleHQiLCJsYXN0IiwiYXJyYXlVdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsImNvbnRleHRzIiwiZ2V0Q29udGV4dHMiLCJnZXRUZXJtcyIsInRlcm1zIiwiZm9yRWFjaCIsImNvbXByZXNzVGVybXMiLCJnZXRGcmFtZXMiLCJmcmFtZXMiLCJjb21wcmVzc0ZyYW1lcyIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiY29tcHJlc3NQcm9wZXJ0aWVzIiwiZ2V0RXF1YWxpdGllcyIsImVxdWFsaXRpZXMiLCJjb21wcmVzc0VxdWFsaXRpZXMiLCJnZXRKdWRnZW1lbnRzIiwianVkZ2VtZW50cyIsImNvbXByZXNzSnVkZ2VtZW50cyIsImdldEFzc2VydGlvbnMiLCJhc3NlcnRpb25zIiwiY29tcHJlc3NBc3NlcnRpb25zIiwiZ2V0U3RhdGVtZW50cyIsInN0YXRlbWVudHMiLCJjb21wcmVzc1N0YXRlbWVudHMiLCJnZXRTaWduYXR1cmVzIiwic2lnbmF0dXJlcyIsImNvbXByZXNzU2lnbmF0dXJlcyIsImdldFJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwiY29tcHJlc3NSZWZlcmVuY2VzIiwiZ2V0QXNzdW1wdGlvbnMiLCJhc3N1bXB0aW9ucyIsImNvbXByZXNzQXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlcyIsImNvbXByZXNzTWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25zIiwiY29tcHJlc3NTdWJzdGl0dXRpb25zIiwiZ2V0UHJvcGVydHlSZWxhdGlvbnMiLCJwcm9wZXJ0eVJlbGF0aW9ucyIsImNvbXByZXNzUHJvcGVydHlSZWxhdGlvbnMiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsInRlcm0iLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJmaW5kUHJvcGVydHlCeVByb3BldHlOb2RlIiwicHJvcGVydHlOb2RlIiwicHJvcGVydHlzIiwicHJvcGVydHkiLCJwcm9wZXJ0eU5vZGVNYXRjaGVzIiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eSIsImVxdWFsaXR5Tm9kZU1hdGNoZXMiLCJtYXRjaEVxdWFsaXR5Tm9kZSIsImZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnROb2RlIiwianVkZ2VtZW50IiwianVkZ2VtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaEp1ZGdlbWVudE5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbiIsImFzc2VydGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsImZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUiLCJzaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlIiwic2lnbmF0dXJlTm9kZU1hdGNoZXMiLCJtYXRjaFNpZ25hdHVyZU5vZGUiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZSIsInJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUiLCJtYXRjaFJlZmVyZW5jZU5vZGUiLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoU3Vic3RpdHV0aW9uTm9kZSIsImZpbmRQcm9wZXJ0eVJlbGF0aW9uQnlQcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbiIsInByb3BlcnR5UmVsYXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJmcm9tQ29udGV4dHMiLCJsYXN0Q29udGV4dCIsInN5bm9wdGljQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBc0JBOzs7ZUFBcUJBOzs7MkJBcEJVO2dFQUVYOzBCQWNzQjs7Ozs7O0FBRTFDLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHlCQUFjO0FBRWhCLE1BQU1GLHdCQUF3QkcsZ0JBQU87SUFDbEQsWUFBWUMsT0FBTyxFQUFFQyxRQUFRLENBQUU7UUFDN0IsS0FBSyxDQUFDRDtRQUVOLElBQUksQ0FBQ0MsUUFBUSxHQUFHQTtJQUNsQjtJQUVBQyxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUNELFFBQVE7SUFDdEI7SUFFQUUsU0FBU0MsUUFBUSxFQUFFLEVBQUU7UUFDbkIsSUFBSSxDQUFDSCxRQUFRLENBQUNJLE9BQU8sQ0FBQyxDQUFD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