occam-furtle 3.0.305 → 3.0.310

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 (87) hide show
  1. package/lib/element/assignment/array.js +20 -20
  2. package/lib/element/assignment/object.js +17 -14
  3. package/lib/element/binding/named.js +6 -6
  4. package/lib/element/binding.js +4 -4
  5. package/lib/element/every.js +8 -8
  6. package/lib/element/nodeQuery.js +5 -5
  7. package/lib/element/nodesQuery.js +5 -5
  8. package/lib/element/parameter.js +4 -4
  9. package/lib/element/primitive.js +42 -23
  10. package/lib/element/procedure/anonymous.js +4 -4
  11. package/lib/element/procedure.js +8 -10
  12. package/lib/element/reduce.js +6 -6
  13. package/lib/element/some.js +8 -8
  14. package/lib/element/term/comparison.js +4 -4
  15. package/lib/element/term/logical.js +7 -7
  16. package/lib/element/term/negated.js +5 -5
  17. package/lib/element/term.js +3 -3
  18. package/lib/element/ternary.js +5 -5
  19. package/lib/element/type.js +94 -0
  20. package/lib/element/value.js +56 -5
  21. package/lib/element/variable.js +4 -4
  22. package/lib/node/assignments/variable.js +4 -10
  23. package/lib/node/binding/named.js +2 -2
  24. package/lib/node/binding.js +16 -23
  25. package/lib/node/declaration/procedure.js +4 -10
  26. package/lib/node/parameter.js +5 -10
  27. package/lib/node/primitive.js +9 -9
  28. package/lib/node/procedure/anoymous.js +4 -10
  29. package/lib/node/type.js +41 -0
  30. package/lib/nominalValueProperties.js +86 -0
  31. package/lib/nominalValueProperty.js +45 -0
  32. package/lib/nonTerminalNodeMap.js +3 -1
  33. package/lib/preamble.js +2 -1
  34. package/lib/ruleNames.js +5 -1
  35. package/lib/typeNames.js +34 -0
  36. package/lib/utilities/element.js +50 -18
  37. package/lib/utilities/primitive.js +13 -9
  38. package/lib/utilities/string.js +35 -22
  39. package/lib/utilities/value.js +9 -20
  40. package/lib/utilities/values.js +3 -3
  41. package/package.json +2 -2
  42. package/src/element/assignment/array.js +31 -26
  43. package/src/element/assignment/object.js +20 -13
  44. package/src/element/binding/named.js +10 -6
  45. package/src/element/binding.js +5 -3
  46. package/src/element/every.js +9 -7
  47. package/src/element/nodeQuery.js +5 -4
  48. package/src/element/nodesQuery.js +5 -4
  49. package/src/element/parameter.js +5 -3
  50. package/src/element/primitive.js +56 -26
  51. package/src/element/procedure/anonymous.js +5 -3
  52. package/src/element/procedure.js +8 -12
  53. package/src/element/reduce.js +6 -5
  54. package/src/element/some.js +9 -7
  55. package/src/element/term/comparison.js +6 -3
  56. package/src/element/term/logical.js +8 -6
  57. package/src/element/term/negated.js +5 -4
  58. package/src/element/term.js +3 -2
  59. package/src/element/ternary.js +5 -4
  60. package/src/element/type.js +128 -0
  61. package/src/element/value.js +27 -3
  62. package/src/element/variable.js +5 -3
  63. package/src/node/assignments/variable.js +5 -13
  64. package/src/node/binding/named.js +1 -1
  65. package/src/node/binding.js +19 -30
  66. package/src/node/declaration/procedure.js +5 -13
  67. package/src/node/parameter.js +6 -14
  68. package/src/node/primitive.js +8 -8
  69. package/src/node/procedure/anoymous.js +5 -13
  70. package/src/node/type.js +43 -0
  71. package/src/nominalValueProperties.js +103 -0
  72. package/src/nominalValueProperty.js +55 -0
  73. package/src/nonTerminalNodeMap.js +3 -0
  74. package/src/preamble.js +1 -0
  75. package/src/ruleNames.js +1 -0
  76. package/src/typeNames.js +7 -0
  77. package/src/utilities/element.js +67 -19
  78. package/src/utilities/primitive.js +31 -22
  79. package/src/utilities/string.js +42 -24
  80. package/src/utilities/value.js +18 -31
  81. package/src/utilities/values.js +1 -2
  82. package/lib/nodeProperties.js +0 -78
  83. package/lib/nodeProperty.js +0 -45
  84. package/lib/types.js +0 -34
  85. package/src/nodeProperties.js +0 -89
  86. package/src/nodeProperty.js +0 -53
  87. package/src/types.js +0 -7
@@ -24,6 +24,9 @@ _export(exports, {
24
24
  get anonymousProcedureFromSomeNode () {
25
25
  return anonymousProcedureFromSomeNode;
26
26
  },
27
+ get argumentTypeFromTypeNode () {
28
+ return argumentTypeFromTypeNode;
29
+ },
27
30
  get arrayAssignmentFromArrayAssignmentNode () {
28
31
  return arrayAssignmentFromArrayAssignmentNode;
29
32
  },
@@ -120,6 +123,9 @@ _export(exports, {
120
123
  get nameFromReferenceNode () {
121
124
  return nameFromReferenceNode;
122
125
  },
126
+ get nameFromTypeNode () {
127
+ return nameFromTypeNode;
128
+ },
123
129
  get nameFromVariableNode () {
124
130
  return nameFromVariableNode;
125
131
  },
@@ -282,6 +288,9 @@ _export(exports, {
282
288
  get ternaryFromTernaryNode () {
283
289
  return ternaryFromTernaryNode;
284
290
  },
291
+ get typeFromAnonymousProcedureNode () {
292
+ return typeFromAnonymousProcedureNode;
293
+ },
285
294
  get typeFromBindingNode () {
286
295
  return typeFromBindingNode;
287
296
  },
@@ -300,12 +309,12 @@ _export(exports, {
300
309
  get typeFromPrimitiveNode () {
301
310
  return typeFromPrimitiveNode;
302
311
  },
303
- get typeFromProcedureAnonymousProcedureNode () {
304
- return typeFromProcedureAnonymousProcedureNode;
305
- },
306
312
  get typeFromProcedureDeclarationNode () {
307
313
  return typeFromProcedureDeclarationNode;
308
314
  },
315
+ get typeFromTypeNode () {
316
+ return typeFromTypeNode;
317
+ },
309
318
  get typeFromVariableAssignmentsNode () {
310
319
  return typeFromVariableAssignmentsNode;
311
320
  },
@@ -387,7 +396,7 @@ _export(exports, {
387
396
  });
388
397
  const _occamquery = require("occam-query");
389
398
  const _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
390
- const _types = require("../types");
399
+ const _typeNames = require("../typeNames");
391
400
  const _string = require("../utilities/string");
392
401
  function _interop_require_default(obj) {
393
402
  return obj && obj.__esModule ? obj : {
@@ -419,6 +428,12 @@ function termFromTermNode(termNode, context) {
419
428
  const term = new Term(context, string, node, breakPoint, variable, primitive, negatedTerm, logicalTerm, bracketedTerm, comparisonTerm);
420
429
  return term;
421
430
  }
431
+ function typeFromTypeNode(typeNode, context) {
432
+ const { Type } = _elements.default, node = typeNode, string = context.nodeAsString(node), name = nameFromTypeNode(typeNode, context), argumentType = argumentTypeFromTypeNode(typeNode, context), breakPoint = null;
433
+ context = null;
434
+ const type = new Type(context, string, node, breakPoint, name, argumentType);
435
+ return type;
436
+ }
422
437
  function valueFromValueNode(valueNode, context) {
423
438
  const { Value } = _elements.default, node = valueNode, variable = variableFromValueNode(valueNode, context), primitive = primitiveFromValueNode(valueNode, context), properties = [
424
439
  variable,
@@ -607,7 +622,7 @@ function objectAssignmentFromObjectAssignmentNode(objectAssignmentNode, context)
607
622
  return objectAssignment;
608
623
  }
609
624
  function anonymousProcedureFromAnonymousProcedureNode(anonymousProcedureNode, context) {
610
- const { AnonymousProcedure } = _elements.default, node = anonymousProcedureNode, type = typeFromProcedureAnonymousProcedureNode(anonymousProcedureNode, context), parameters = parametersFromAnonymousProcedureNode(anonymousProcedureNode, context), returnBlock = returnBlockFromAnonymousProcedureNode(anonymousProcedureNode, context), nonymousProcedureString = (0, _string.anonymousProcedureStringFromTypeParametersAndReturnBlock)(type, parameters, returnBlock), string = nonymousProcedureString, breakPoint = null;
625
+ const { AnonymousProcedure } = _elements.default, node = anonymousProcedureNode, type = typeFromAnonymousProcedureNode(anonymousProcedureNode, context), parameters = parametersFromAnonymousProcedureNode(anonymousProcedureNode, context), returnBlock = returnBlockFromAnonymousProcedureNode(anonymousProcedureNode, context), nonymousProcedureString = (0, _string.anonymousProcedureStringFromTypeParametersAndReturnBlock)(type, parameters, returnBlock), string = nonymousProcedureString, breakPoint = null;
611
626
  context = null;
612
627
  const anonymousProcedure = new AnonymousProcedure(context, string, node, breakPoint, type, parameters, returnBlock);
613
628
  return anonymousProcedure;
@@ -632,6 +647,10 @@ function variableFromTypeAndVariableNode(type, variableNode, context) {
632
647
  const { Variable } = _elements.default, node = variableNode, name = nameFromVariableNode(variableNode), value = valueFromTypeAndVariableNode(type, variableNode, context), variableString = (0, _string.variableStringFromName)(name), string = variableString, breakPoint = null, variable = new Variable(context, string, node, breakPoint, type, name, value);
633
648
  return variable;
634
649
  }
650
+ function nameFromTypeNode(typeNode, context) {
651
+ const name = typeNode.getName();
652
+ return name;
653
+ }
635
654
  function nameFromLabelNode(labelNode, context) {
636
655
  const name = labelNode.getName();
637
656
  return name;
@@ -649,7 +668,11 @@ function nameFromBindingNode(bindingNode, context) {
649
668
  return name;
650
669
  }
651
670
  function typeFromBindingNode(bindingNode, context) {
652
- const type = bindingNode.getType();
671
+ let type = null;
672
+ const typeNode = bindingNode.getTypeNode();
673
+ if (typeNode != null) {
674
+ type = typeFromTypeNode(typeNode, context);
675
+ }
653
676
  return type;
654
677
  }
655
678
  function variableFromSomeNode(someNode, context) {
@@ -689,7 +712,7 @@ function elidedFromBindingNode(bindingNode, context) {
689
712
  return elided;
690
713
  }
691
714
  function typeFromParaneterNode(parameterNode, context) {
692
- const type = parameterNode.getType();
715
+ const typeNode = parameterNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
693
716
  return type;
694
717
  }
695
718
  function nameFromParaneterNode(parameterNode, context) {
@@ -701,7 +724,7 @@ function nameFromReferenceNode(referenceNode, context) {
701
724
  return name;
702
725
  }
703
726
  function typeFromPrimitiveNode(primitiveNode, context) {
704
- const type = primitiveNode.getType();
727
+ const { Type } = _elements.default, typeName = primitiveNode.getTypeName(), type = Type.fromTypeName(typeName, context);
705
728
  return type;
706
729
  }
707
730
  function variableFromValueNode(valueNode, context) {
@@ -777,17 +800,26 @@ function logicalTermFromTermNode(termNode, context) {
777
800
  return logicalTerm;
778
801
  }
779
802
  function typeFromLogicalTermNode(logicalTermNode, context) {
780
- const type = _types.BOOLEAN_TYPE;
803
+ const type = _typeNames.BOOLEAN_TYPE_NAME;
781
804
  return type;
782
805
  }
783
806
  function typeFromNegatedTermNode(logicalTermNode, context) {
784
- const type = _types.BOOLEAN_TYPE;
807
+ const type = _typeNames.BOOLEAN_TYPE_NAME;
785
808
  return type;
786
809
  }
787
810
  function termFromNegatedTermNode(negatedTermNode, context) {
788
811
  const termNode = negatedTermNode.getTermNode(), term = termFromTermNode(termNode, context);
789
812
  return term;
790
813
  }
814
+ function argumentTypeFromTypeNode(typeNode, context) {
815
+ let argumentType = null;
816
+ const argumentTypeName = typeNode.getArgumentTypeName();
817
+ if (argumentTypeName !== null) {
818
+ const { Type } = _elements.default;
819
+ argumentType = Type.fromTypeName(argumentTypeName, context);
820
+ }
821
+ return argumentType;
822
+ }
791
823
  function reduceFromExpressionNode(expressionNode, context) {
792
824
  let reduce = null;
793
825
  const reduceNode = expressionNode.getReduceNode();
@@ -804,7 +836,7 @@ function stepsFromReturnBlockNode(returnBlockNode, context) {
804
836
  return steps;
805
837
  }
806
838
  function typeFromNamedBindingNode(namedBindingNode, context) {
807
- const type = namedBindingNode.getType();
839
+ const typeNode = namedBindingNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
808
840
  return type;
809
841
  }
810
842
  function nameFromNamedBindingNode(namedBindingNode, context) {
@@ -951,6 +983,10 @@ function disjunctionFromLogicalTermNode(logicalTermNode, context) {
951
983
  const disjunction = logicalTermNode.isDisjunction();
952
984
  return disjunction;
953
985
  }
986
+ function typeFromAnonymousProcedureNode(anonymousProcedureNode, context) {
987
+ const typeNode = anonymousProcedureNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
988
+ return type;
989
+ }
954
990
  function variableAssignmentsFromStepNode(stepNode, context) {
955
991
  let variableAssignments = null;
956
992
  const variableAssignmentsNode = stepNode.getVariableAssignmentsNode();
@@ -984,7 +1020,7 @@ function bindingsFromArrayAssignmentNode(arrayAssignmentNode, context) {
984
1020
  return bindings;
985
1021
  }
986
1022
  function typeFromVariableAssignmentsNode(variableAssignmentsNode, context) {
987
- const type = variableAssignmentsNode.getType();
1023
+ const typeNode = variableAssignmentsNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
988
1024
  return type;
989
1025
  }
990
1026
  function anonymousProcedureFromReduceNode(reduceNode, context) {
@@ -996,7 +1032,7 @@ function variableFromObjectAssignmentNode(objectAssignmentNode, context) {
996
1032
  return variable;
997
1033
  }
998
1034
  function typeFromProcedureDeclarationNode(procedureDeclarationNode, context) {
999
- const type = procedureDeclarationNode.getType();
1035
+ const typeNode = procedureDeclarationNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
1000
1036
  return type;
1001
1037
  }
1002
1038
  function labelFromProcedureDeclarationNode(procedureDeclarationNode, context) {
@@ -1023,10 +1059,6 @@ function parametersFromProcedureDeclarationNode(procedureDeclarationNode, contex
1023
1059
  const parametersNode = procedureDeclarationNode.getParametersNode(), parameters = parametersFromParametersNode(parametersNode, context);
1024
1060
  return parameters;
1025
1061
  }
1026
- function typeFromProcedureAnonymousProcedureNode(anonymousProcedureNode, context) {
1027
- const type = anonymousProcedureNode.getType();
1028
- return type;
1029
- }
1030
1062
  function returnBlockFromProcedureDeclarationNode(procedureDeclarationNode, context) {
1031
1063
  const returnBlockNode = procedureDeclarationNode.getReturnBlockNode(), returnBlock = returnBlockFromReturnBlockNode(returnBlockNode, context);
1032
1064
  return returnBlock;
@@ -1078,4 +1110,4 @@ function variableAssignmentsArrayFromTypeAndVariableAssignmentsNode(type, variab
1078
1110
  return variableAssignmentsArray;
1079
1111
  }
1080
1112
 
1081
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMsXG4gICAgICAgICB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgcHJvY2VkdXJlRGVjbGFyYXRpb25TdHJpbmdGcm9tUHJvY2VkdXJlLFxuICAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUsXG4gICAgICAgICBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlLFxuICAgICAgICAgZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrLFxuICAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2ssXG4gICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSxcbiAgICAgICAgIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGVwIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0ZXBOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYXJyYXlBc3NpZ25tZW50ID0gYXJyYXlBc3NpZ25tZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgb2JqZWN0QXNzaWdtZW50ID0gb2JqZWN0QXNzaWdubWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdtZW50cyA9IHZhcmlhYmxlQXNzaWdubWVudHNGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXAgPSBuZXcgU3RlcChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5QXNzaWdubWVudCwgb2JqZWN0QXNzaWdtZW50LCB2YXJpYWJsZUFzc2lnbWVudHMpO1xuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNvbWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc29tZU5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNvbWVTdHJpbmcgPSBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBzb21lU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNvbWUgPSBuZXcgU29tZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiBzb21lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgbmVnYXRlZFRlcm0gPSBuZWdhdGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgbG9naWNhbFRlcm0gPSBsb2dpY2FsVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgYnJhY2tldGVkVGVybSA9IGJyYWNrZXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGNvbXBhcmlzb25UZXJtID0gY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICB2YXJpYWJsZSxcbiAgICAgIHByaW1pdGl2ZSxcbiAgICAgIG5lZ2F0ZWRUZXJtLFxuICAgICAgbG9naWNhbFRlcm0sXG4gICAgICBicmFja2V0ZWRUZXJtLFxuICAgICAgY29tcGFyaXNvblRlcm1cbiAgICBdLFxuICAgIHRlcm1TdHJpbmcgPSB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcywgY29udGV4dCksXG4gICAgc3RyaW5nID0gdGVybVN0cmluZywgIC8vL1xuICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm0gPSBuZXcgVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBwcmltaXRpdmUsIG5lZ2F0ZWRUZXJtLCBsb2dpY2FsVGVybSwgYnJhY2tldGVkVGVybSwgY29tcGFyaXNvblRlcm0pO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhbHVlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhbHVlTm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgdmFyaWFibGUsXG4gICAgICAgICAgcHJpbWl0aXZlXG4gICAgICAgIF0sXG4gICAgICAgIHZhbHVlU3RyaW5nID0gdmFsdWVTdHJpbmdGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gdmFsdWVTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFsdWUgPSBuZXcgVmFsdWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcHJpbWl0aXZlKTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21UZXJtc05vZGUodGVybXNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybXNOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm1Ob2RlcyA9IHRlcm1zTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXNBcnJheSA9IHRlcm1zQXJyYXlGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gdGVybXNBcnJheSwgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1zID0gbmV3IFRlcm1zKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXZlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXZlcnlOb2RlLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeVN0cmluZyA9IGV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBldmVyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5ID0gbmV3IEV2ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSk7XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxhYmVsTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0Zyb21WYWx1ZXNOb2RlKHZhbHVlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYWx1ZXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB2YWx1ZU5vZGVzID0gdmFsdWVzTm9kZS5nZXRWYWx1ZU5vZGVzKCksXG4gICAgICAgIHZhbHVlc0FycmF5ID0gdmFsdWVzQXJyYXlGcm9tVmFsdWVOb2Rlcyh2YWx1ZU5vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSB2YWx1ZXNBcnJheSwgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhbHVlcyA9IG5ldyBWYWx1ZXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWR1Y2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVkdWNlTm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlU3RyaW5nID0gcmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGluaXRpYWxWYWx1ZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gcmVkdWNlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZHVjZSA9IG5ldyBSZWR1Y2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgaW5pdGlhbFZhbHVlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiByZWR1Y2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBiaW5kaW5nTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVsaWRlZCA9IGVsaWRlZEZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZyA9IG5ldyBCaW5kaW5nKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgZWxpZGVkKTtcblxuICByZXR1cm4gYmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm5hcnlGcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJuYXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm5hcnlOb2RlLCAvLy9cbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbHNlRXhwcmVzc2lvbiA9IGVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeVN0cmluZyA9IHRlcm5hcnlTdHJpbmdGcm9tVGVybSh0ZXJtKSxcbiAgICAgICAgc3RyaW5nID0gdGVybmFyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm5hcnkgPSBuZXcgVGVybmFyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIGlmRXhwcmVzc2lvbiwgZWxzZUV4cHJlc3Npb24pO1xuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYmluZGluZ3NOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gYmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZ3MgPSBuZXcgQmluZGluZ3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lKTtcblxuICByZXR1cm4gcGFyYW1ldGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZVF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVRdWVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBub2RlUXVlcnlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBub2RlUXVlcnkgPSBuZXcgTm9kZVF1ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZVF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByaW1pdGl2ZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmltaXRpdmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJpbWl0aXZlID0gbmV3IFByaW1pdGl2ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHZhbHVlKTtcblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZXNRdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVzUXVlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbm9kZXNRdWVyeU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcXVlcnkgPSBxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNRdWVyeSA9IG5ldyBOb2Rlc1F1ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZXNRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXJzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlcnNOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcGFyYW1ldGVyc0FycmF5ID0gcGFyYW1ldGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBwYXJhbWV0ZXJzQXJyYXk7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgUGFyYW1ldGVycyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFeHByZXNzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGV4cHJlc3Npb25Ob2RlLCAgLy8vXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc29tZSA9IHNvbWVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeSA9IGV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlID0gcmVkdWNlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeSA9IHRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2RlUXVlcnkgPSBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgdGVybSxcbiAgICAgICAgICBzb21lLFxuICAgICAgICAgIGV2ZXJ5LFxuICAgICAgICAgIHJlZHVjZSxcbiAgICAgICAgICB0ZXJuYXJ5LFxuICAgICAgICAgIG5vZGVRdWVyeSxcbiAgICAgICAgICBub2Rlc1F1ZXJ5LFxuICAgICAgICAgIHJldHVybkJsb2NrLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGxcbiAgICAgICAgXSxcbiAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IGV4cHJlc3Npb25TdHJpbmdGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gZXhwcmVzc2lvblN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBleHByZXNzaW9uID0gbmV3IEV4cHJlc3Npb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBzb21lLCBldmVyeSwgcmVkdWNlLCB0ZXJuYXJ5LCBub2RlUXVlcnksIG5vZGVzUXVlcnksIHJldHVybkJsb2NrLCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZXR1cm5CbG9jayB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZXR1cm5CbG9ja05vZGUsIC8vL1xuICAgICAgICBzdGVwcyA9IHN0ZXBzRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICBub25zZW5zaWNhbCA9IG5vbnNlbnNpY2FsRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5TdGF0ZW1lbnQgPSByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrU3RyaW5nID0gcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnQpLFxuICAgICAgICBzdHJpbmcgPSByZXR1cm5CbG9ja1N0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5CbG9jayA9IG5ldyBSZXR1cm5CbG9jayhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0ZXBzLCBub25zZW5zaWNhbCwgcmV0dXJuU3RhdGVtZW50KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmVnYXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmVnYXRlZFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtTm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OZWdhdGVkVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZFRlcm0gPSBuZXcgTmVnYXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB0ZXJtKTtcblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTG9naWNhbFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbG9naWNhbFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGlzanVuY3Rpb24gPSBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsb2dpY2FsVGVybSA9IG5ldyBMb2dpY2FsVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGRpc2p1bmN0aW9uLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gbG9naWNhbFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmFtZWRCaW5kaW5nIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5hbWVkQmluZGluZ05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbGlhcyA9IGFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmV3IE5hbWVkQmluZGluZyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIGFsaWFzKTtcblxuICByZXR1cm4gbmFtZWRCaW5kaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5hbWVkQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmFtZWRCaW5kaW5nc05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWVkQmluZGluZ05vZGVzID0gbmFtZWRCaW5kaW5nc05vZGUuZ2V0TmFtZWRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgbmFtZWRCaW5kaW5nc0FycmF5ID0gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IG5hbWVkQmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5ncyA9IG5ldyBOYW1lZEJpbmRpbmdzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiBuYW1lZEJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYnJhY2tldGVkVGVybU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRUZXJtID0gbmV3IEJyYWNrZXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtKTtcblxuICByZXR1cm4gYnJhY2tldGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgdmFsdWVzKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wYXJpc29uVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21wYXJpc29uVGVybSA9IG5ldyBDb21wYXJpc29uVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRCaW5kaW5nc05vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZS5nZXROYW1lZEJpbmRpbmdzTm9kZSgpLFxuICAgICAgICBuYW1lZEJpbmRpbmdzID0gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG5hbWVkQmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVTdHJpbmcgPSBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrKHR5cGUsIGxhYmVsLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayksXG4gICAgICAgIHN0cmluZyA9IHByb2NlZHVyZVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBwcm9jZWR1cmUgPSBuZXcgUHJvY2VkdXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbGFiZWwsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKTtcblxuICByZXR1cm4gcHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlBc3NpZ25tZW50RnJvbUFycmF5QXNzaWdubWVudE5vZGUoYXJyYXlBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFycmF5QXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhcnJheUFzc2lnbm1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUFycmF5QXNzaWdubWVudE5vZGUoYXJyYXlBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3NGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBhcnJheUFzc2lnbm1lbnQgPSBuZXcgQXJyYXlBc3NpZ25tZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGJpbmRpbmdzKTtcblxuICByZXR1cm4gYXJyYXlBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJldHVyblN0YXRlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZXR1cm5TdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuU3RhdGVtZW50ID0gbmV3IFJldHVyblN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhbHVlKTtcblxuICByZXR1cm4gcmV0dXJuU3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE9iamVjdEFzc2lnbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lZEJpbmRpbmdzID0gbmFtZWRCaW5kaW5nc0Zyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgb2JqZWN0QXNzaWdubWVudCA9IG5ldyBPYmplY3RBc3NpZ21lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgbmFtZWRCaW5kaW5ncyk7XG5cbiAgcmV0dXJuIG9iamVjdEFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQW5vbnltb3VzUHJvY2VkdXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUsICAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvY2VkdXJlQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub255bW91c1Byb2NlZHVyZVN0cmluZyA9IGFub255bW91c1Byb2NlZHVyZVN0cmluZ0Zyb21UeXBlUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrKHR5cGUsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSxcbiAgICAgICAgc3RyaW5nID0gbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmUgPSBuZXcgQW5vbnltb3VzUHJvY2VkdXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVBc3NpZ25tZW50cyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5KHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSksXG4gICAgICAgIGFycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5LCAvLy9cbiAgICAgICAgc3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudHMgPSBuZXcgVmFyaWFibGVBc3NpZ25tZW50cyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZURlY2xhcmF0aW9uRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgcHJvY2VkdXJlID0gcHJvY2VkdXJlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVEZWNsYXJhdGlvblN0cmluZyA9IHByb2NlZHVyZURlY2xhcmF0aW9uU3RyaW5nRnJvbVByb2NlZHVyZShwcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVEZWNsYXJhdGlvblN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVEZWNsYXJhdGlvbiA9IG5ldyBQcm9jZWR1cmVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHByb2NlZHVyZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZUFzc2lnbm1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlKHR5cGUsIHZhcmlhYmxlLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhc3NpZ25tZW50ID0gbmV3IFZhcmlhYmxlQXNzaWdubWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gYXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZVN0cmluZ0Zyb21OYW1lKG5hbWUpLFxuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCB2YWx1ZSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBsYWJlbE5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFsdWVOb2RlKCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm5hcnlOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IGJpbmRpbmdOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IGJpbmRpbmdOb2RlLmdldFR5cGUoKTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHNvbWVOb2RlLmdldFZhcmlhYmxlTm9kZSgpLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gIGNvbnN0IG5hbWUgPSB2YXJpYWJsZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB0ZXJtTm9kZS5nZXRQcmltaXRpdmVOb2RlKCk7XG5cbiAgaWYgKHByaW1pdGl2ZU5vZGUgIT09IG51bGwpIHtcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGlkZWRGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZWxpZGVkID0gYmluZGluZ05vZGUuaXNFbGlkZWQoKTtcblxuICByZXR1cm4gZWxpZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IHBhcmFtZXRlck5vZGUuZ2V0VHlwZSgpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHJlZmVyZW5jZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IHByaW1pdGl2ZU5vZGUuZ2V0VHlwZSgpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhbHVlTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB2YWx1ZU5vZGUuZ2V0UHJpbWl0aXZlTm9kZSgpO1xuXG4gIGlmIChwcmltaXRpdmVOb2RlICE9PSBudWxsKSB7XG4gICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc29tZSA9IG51bGw7XG5cbiAgY29uc3Qgc29tZU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRTb21lTm9kZSgpO1xuXG4gIGlmIChzb21lTm9kZSAhPT0gbnVsbCkge1xuICAgIHNvbWUgPSBzb21lRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzb21lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICByZXR1cm4gcXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWUgPSBwcmltaXRpdmVOb2RlLmdldFZhbHVlKCk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9kZXNRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICByZXR1cm4gcXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZXZlcnkgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldEV2ZXJ5Tm9kZSgpO1xuXG4gIGlmIChldmVyeU5vZGUgIT09IG51bGwpIHtcbiAgICBldmVyeSA9IGV2ZXJ5RnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5lZ2F0ZWRUZXJtID0gbnVsbDtcblxuICBjb25zdCBuZWdhdGVkVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXROZWdhdGVkVGVybU5vZGUoKTtcblxuICBpZiAobmVnYXRlZFRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgbmVnYXRlZFRlcm0gPSBuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBuZWdhdGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2ljYWxUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsb2dpY2FsVGVybSA9IG51bGw7XG5cbiAgY29uc3QgbG9naWNhbFRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0TG9naWNhbFRlcm1Ob2RlKCk7XG5cbiAgaWYgKGxvZ2ljYWxUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGxvZ2ljYWxUZXJtID0gbG9naWNhbFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbG9naWNhbFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IEJPT0xFQU5fVFlQRTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gQk9PTEVBTl9UWVBFO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gbmVnYXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVkdWNlID0gbnVsbDtcblxuICBjb25zdCByZWR1Y2VOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UmVkdWNlTm9kZSgpO1xuXG4gIGlmIChyZWR1Y2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVkdWNlID0gcmVkdWNlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVkdWNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwTm9kZXMgPSByZXR1cm5CbG9ja05vZGUuZ2V0U3RlcE5vZGVzKCksXG4gICAgICAgIHN0ZXBzID0gc3RlcE5vZGVzLm1hcCgoc3RlcE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG5hbWVkQmluZGluZ05vZGUuZ2V0VHlwZSgpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IG5hbWVkQmluZGluZ05vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxpYXNGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFsaWFzID0gbmFtZWRCaW5kaW5nTm9kZS5nZXRBbGlhcygpO1xuXG4gIHJldHVybiBhbGlhcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBub2RlUXVlcnlOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm5hcnkgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm5hcnlOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VGVybmFyeU5vZGUoKTtcblxuICBpZiAodGVybmFyeU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJuYXJ5ID0gdGVybmFyeUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybmFyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGJyYWNrZXRlZFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IGJyYWNrZXRlZFRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0QnJhY2tldGVkVGVybU5vZGUoKTtcblxuICBpZiAoYnJhY2tldGVkVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBicmFja2V0ZWRUZXJtID0gYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYnJhY2tldGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBicmFja2V0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlKHRlcm1OT2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb21wYXJpc29uVGVybSA9IG51bGw7XG5cbiAgY29uc3QgY29tcGFyaXNvblRlcm1Ob2RlID0gdGVybU5PZGUuZ2V0Q29tcGFyaXNvblRlcm1Ob2RlKCk7XG5cbiAgaWYgKGNvbXBhcmlzb25UZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbXBhcmlzb25UZXJtID0gY29tcGFyaXNvblRlcm1Gcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29tcGFyaXNvblRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsVmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gdmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW5pdGlhbFZhbHVlID0gdmFsdWU7IC8vL1xuXG4gIHJldHVybiBpbml0aWFsVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHByZXNzaW9uRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBub2Rlc1F1ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUFzc2lnbm1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGFycmF5QXNzaWdubWVudCA9IG51bGw7XG5cbiAgY29uc3QgYXJyYXlBc3NpZ25tZW50Tm9kZSA9IHN0ZXBOb2RlLmdldEFycmF5QXNzaWdubWVudE5vZGUoKTtcblxuICBpZiAoYXJyYXlBc3NpZ25tZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGFycmF5QXNzaWdubWVudCA9IGFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZkV4cHJlc3Npb25Ob2RlID0gdGVybmFyeU5vZGUuZ2V0SWZFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGlmRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpZkV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vZGVRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZVF1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVRdWVyeU5vZGUoKTtcblxuICBpZiAobm9kZVF1ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5vZGVRdWVyeSA9IG5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFZhbHVlc05vZGUoKSxcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzRnJvbVZhbHVlc05vZGUodmFsdWVzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gbnVsbDtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVOb2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZS5nZXRWYWx1ZU5vZGUoKSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RBc3NpZ25tZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBvYmplY3RBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBvYmplY3RBc3NpZ25tZW50Tm9kZSA9IHN0ZXBOb2RlLmdldE9iamVjdEFzc2lnbm1lbnROb2RlKCk7XG5cbiAgaWYgKG9iamVjdEFzc2lnbm1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgb2JqZWN0QXNzaWdubWVudCA9IG9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdEFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBub2Rlc1F1ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc1F1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVzUXVlcnlOb2RlKCk7XG5cbiAgaWYgKG5vZGVzUXVlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgbm9kZXNRdWVyeSA9IG5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGNvbXBhcmlzb25UZXJtTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVsc2VFeHByZXNzaW9uTm9kZSA9IHRlcm5hcnlOb2RlLmdldEVsc2VFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBlbHNlRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZWxzZUV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZWxzZUV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmV0dXJuQmxvY2sgPSBudWxsO1xuXG4gIGNvbnN0IHJldHVybkJsb2NrTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFJldHVybkJsb2NrTm9kZSgpO1xuXG4gIGlmIChyZXR1cm5CbG9ja05vZGUgIT09IG51bGwpIHtcbiAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSBzb21lTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vbnNlbnNpY2FsID0gcmV0dXJuQmxvY2tOb2RlLmlzTm9uc2Vuc2ljYWwoKTtcblxuICByZXR1cm4gbm9uc2Vuc2ljYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRpc2p1bmN0aW9uID0gbG9naWNhbFRlcm1Ob2RlLmlzRGlzanVuY3Rpb24oKTtcblxuICByZXR1cm4gZGlzanVuY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZUFzc2lnbm1lbnRzID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSA9IHN0ZXBOb2RlLmdldFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGVBc3NpZ25tZW50cyA9IHZhcmlhYmxlQXNzaWdubWVudHNGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gZXZlcnlOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmluZGluZ3NOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRCaW5kaW5nc05vZGUoKSxcbiAgICAgICAgYmluZGluZ3MgPSBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZS5nZXRUeXBlKCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSByZWR1Y2VOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGUoKTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVyblN0YXRlbWVudE5vZGUgPSByZXR1cm5CbG9ja05vZGUuZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICByZXR1cm5TdGF0ZW1lbnQgPSByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmV0dXJuU3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uTm9kZSA9IHZhcmlhYmxlQXNzaWdtZW50Tm9kZS5nZXRFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVybkJsb2NrTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNOb2RlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLmdldFBhcmFtZXRlcnNOb2RlKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvY2VkdXJlQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFR5cGUoKTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuQmxvY2tOb2RlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLmdldFJldHVybkJsb2NrTm9kZSgpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNBcnJheUZyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zQXJyYXkgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzKHZhbHVlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzQXJyYXkgPSB2YWx1ZU5vZGVzLm1hcCgodmFsdWVOb2RlKSA9PiB7IC8vL1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBiaW5kaW5nTm9kZXMgPSBiaW5kaW5nc05vZGUuZ2V0QmluZGluZ05vZGVzKCksXG4gICAgICAgIGJpbmRpbmdzQXJyYXkgPSBiaW5kaW5nTm9kZXMubWFwKChiaW5kaW5nTm9kZSkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCBiaW5kaW5nID0gYmluZGluZ0Zyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gYmluZGluZztcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBwYXJhbWV0ZXJzTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzQXJyYXkgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHsgLy8vXG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVyc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRQYXJhbWV0ZXJzQXJyYXkgPSBuYW1lZEJpbmRpbmdOb2Rlcy5tYXAoKG5hbWVkQmluZGluZ05vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmFtZWRCaW5kaW5nRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbmFtZWRCaW5kaW5nO1xuICB9KTtcblxuICByZXR1cm4gbmFtZWRQYXJhbWV0ZXJzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudE5vZGVzID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUuZ2V0VmFyaWFibGVBc3NpZ25tZW50Tm9kZXMoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMubWFwKCh2YXJpYWJsZUFzc2lnbm1lbnROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheTtcbn1cbiJdLCJuYW1lcyI6WyJhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbVJlZHVjZU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUiLCJhcnJheUFzc2lnbm1lbnRGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZSIsImFycmF5QXNzaWdubWVudEZyb21TdGVwTm9kZSIsImJpbmRpbmdGcm9tQmluZGluZ05vZGUiLCJiaW5kaW5nc0FycmF5RnJvbUJpbmRpbmdzTm9kZSIsImJpbmRpbmdzRnJvbUFycmF5QXNzaWdubWVudE5vZGUiLCJiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUiLCJicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlIiwiYnJhY2tldGVkVGVybUZyb21UZXJtTm9kZSIsImNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZSIsImNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlIiwiZGlzanVuY3Rpb25Gcm9tTG9naWNhbFRlcm1Ob2RlIiwiZWxpZGVkRnJvbUJpbmRpbmdOb2RlIiwiZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJldmVyeUZyb21FdmVyeU5vZGUiLCJldmVyeUZyb21FeHByZXNzaW9uTm9kZSIsImV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUiLCJleHByZXNzaW9uRnJvbVZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJleHByZXNzaW9uRnJvbVZhcmlhYmxlTm9kZSIsImlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSIsImluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlIiwibGVmdFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlIiwibGVmdFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwibG9naWNhbFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwibG9naWNhbFRlcm1Gcm9tVGVybU5vZGUiLCJuYW1lRnJvbUJpbmRpbmdOb2RlIiwibmFtZUZyb21MYWJlbE5vZGUiLCJuYW1lRnJvbU5hbWVkQmluZGluZ05vZGUiLCJuYW1lRnJvbVBhcmFuZXRlck5vZGUiLCJuYW1lRnJvbVJlZmVyZW5jZU5vZGUiLCJuYW1lRnJvbVZhcmlhYmxlTm9kZSIsIm5hbWVkQmluZGluZ0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwibmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZSIsIm5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyIsIm5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUiLCJub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZSIsIm5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlIiwibm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlIiwib2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsIm9iamVjdEFzc2lnbm1lbnRGcm9tU3RlcE5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZSIsInBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSIsInByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlIiwicHJpbWl0aXZlRnJvbVRlcm1Ob2RlIiwicHJpbWl0aXZlRnJvbVZhbHVlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlRGVjbGFyYXRpb25Gcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlIiwicHJvY2VkdXJlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSIsInF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUiLCJxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsInJlZHVjZUZyb21FeHByZXNzaW9uTm9kZSIsInJlZHVjZUZyb21SZWR1Y2VOb2RlIiwicmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZXR1cm5CbG9ja0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwicmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUiLCJyZXR1cm5CbG9ja0Zyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUiLCJyZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUiLCJyZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuQmxvY2tOb2RlIiwicmV0dXJuU3RhdGVtZW50RnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJyaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlIiwicmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZSIsInNvbWVGcm9tRXhwcmVzc2lvbk5vZGUiLCJzb21lRnJvbVNvbWVOb2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBzRnJvbVJldHVybkJsb2NrTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJ0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlIiwidGVybUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UZXJuYXJ5Tm9kZSIsInRlcm1zQXJyYXlGcm9tVGVybU5vZGVzIiwidGVybXNGcm9tVGVybXNOb2RlIiwidGVybmFyeUZyb21FeHByZXNzaW9uTm9kZSIsInRlcm5hcnlGcm9tVGVybmFyeU5vZGUiLCJ0eXBlRnJvbUJpbmRpbmdOb2RlIiwidHlwZUZyb21Mb2dpY2FsVGVybU5vZGUiLCJ0eXBlRnJvbU5hbWVkQmluZGluZ05vZGUiLCJ0eXBlRnJvbU5lZ2F0ZWRUZXJtTm9kZSIsInR5cGVGcm9tUGFyYW5ldGVyTm9kZSIsInR5cGVGcm9tUHJpbWl0aXZlTm9kZSIsInR5cGVGcm9tUHJvY2VkdXJlQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInR5cGVGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInR5cGVGcm9tVmFyaWFibGVOb2RlIiwidmFsdWVGcm9tUHJpbWl0aXZlTm9kZSIsInZhbHVlRnJvbVJlZHVjZU5vZGUiLCJ2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwidmFsdWVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSIsInZhbHVlRnJvbVZhbHVlTm9kZSIsInZhbHVlc0FycmF5RnJvbVZhbHVlTm9kZXMiLCJ2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJ2YWx1ZXNGcm9tVmFsdWVzTm9kZSIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0ZXBOb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInZhcmlhYmxlRnJvbUFycmF5QXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21FdmVyeU5vZGUiLCJ2YXJpYWJsZUZyb21Ob2RlUXVlcnlOb2RlIiwidmFyaWFibGVGcm9tTm9kZXNRdWVyeU5vZGUiLCJ2YXJpYWJsZUZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbVJlZHVjZU5vZGUiLCJ2YXJpYWJsZUZyb21Tb21lTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlIiwidmFyaWFibGVGcm9tVmFsdWVOb2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwic3RlcE5vZGUiLCJjb250ZXh0IiwiU3RlcCIsImVsZW1lbnRzIiwibm9kZSIsInN0cmluZyIsIm5vZGVBc1N0cmluZyIsImJyZWFrUG9pbnQiLCJhcnJheUFzc2lnbm1lbnQiLCJvYmplY3RBc3NpZ21lbnQiLCJ2YXJpYWJsZUFzc2lnbWVudHMiLCJzdGVwIiwic29tZU5vZGUiLCJTb21lIiwidmFyaWFibGUiLCJhbm9ueW1vdXNQcm9jZWR1cmUiLCJzb21lU3RyaW5nIiwic29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSIsInNvbWUiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJwcmltaXRpdmUiLCJuZWdhdGVkVGVybSIsImxvZ2ljYWxUZXJtIiwiYnJhY2tldGVkVGVybSIsImNvbXBhcmlzb25UZXJtIiwicHJvcGVydGllcyIsInRlcm1TdHJpbmciLCJ0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ0ZXJtIiwidmFsdWVOb2RlIiwiVmFsdWUiLCJ2YWx1ZVN0cmluZyIsInZhbHVlU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ2YWx1ZSIsInRlcm1zTm9kZSIsIlRlcm1zIiwidGVybU5vZGVzIiwiZ2V0VGVybU5vZGVzIiwidGVybXNBcnJheSIsImFycmF5IiwidGVybXMiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwiZXZlcnlOb2RlIiwiRXZlcnkiLCJldmVyeVN0cmluZyIsImV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwiZXZlcnkiLCJsYWJlbE5vZGUiLCJMYWJlbCIsIm5hbWUiLCJsYWJlbCIsInZhbHVlc05vZGUiLCJWYWx1ZXMiLCJ2YWx1ZU5vZGVzIiwiZ2V0VmFsdWVOb2RlcyIsInZhbHVlc0FycmF5IiwidmFsdWVzIiwicmVkdWNlTm9kZSIsIlJlZHVjZSIsImluaXRpYWxWYWx1ZSIsInJlZHVjZVN0cmluZyIsInJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwicmVkdWNlIiwiYmluZGluZ05vZGUiLCJCaW5kaW5nIiwidHlwZSIsImVsaWRlZCIsImJpbmRpbmciLCJ0ZXJuYXJ5Tm9kZSIsIlRlcm5hcnkiLCJpZkV4cHJlc3Npb24iLCJlbHNlRXhwcmVzc2lvbiIsInRlcm5hcnlTdHJpbmciLCJ0ZXJuYXJ5U3RyaW5nRnJvbVRlcm0iLCJ0ZXJuYXJ5IiwidmFyaWFibGVOb2RlIiwiVmFyaWFibGUiLCJleHByZXNzaW9uIiwiYmluZGluZ3NOb2RlIiwiQmluZGluZ3MiLCJiaW5kaW5nc0FycmF5IiwiYmluZGluZ3MiLCJyZWZlcmVuY2VOb2RlIiwiUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicGFyYW1ldGVyTm9kZSIsIlBhcmFtZXRlciIsInBhcmFtZXRlciIsIm5vZGVRdWVyeU5vZGUiLCJOb2RlUXVlcnkiLCJxdWVyeSIsIm5vZGVRdWVyeSIsInByaW1pdGl2ZU5vZGUiLCJQcmltaXRpdmUiLCJub2Rlc1F1ZXJ5Tm9kZSIsIk5vZGVzUXVlcnkiLCJub2Rlc1F1ZXJ5IiwicGFyYW1ldGVyc05vZGUiLCJQYXJhbWV0ZXJzIiwicGFyYW1ldGVyc0FycmF5IiwicGFyYW1ldGVycyIsImV4cHJlc3Npb25Ob2RlIiwiRXhwcmVzc2lvbiIsInJldHVybkJsb2NrIiwicHJvY2VkdXJlQ2FsbCIsImV4cHJlc3Npb25TdHJpbmciLCJleHByZXNzaW9uU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJyZXR1cm5CbG9ja05vZGUiLCJSZXR1cm5CbG9jayIsInN0ZXBzIiwibm9uc2Vuc2ljYWwiLCJyZXR1cm5TdGF0ZW1lbnQiLCJyZXR1cm5CbG9ja1N0cmluZyIsInJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJuZWdhdGVkVGVybU5vZGUiLCJOZWdhdGVkVGVybSIsImdldFRlcm1Ob2RlIiwibG9naWNhbFRlcm1Ob2RlIiwiTG9naWNhbFRlcm0iLCJkaXNqdW5jdGlvbiIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwibmFtZWRCaW5kaW5nTm9kZSIsIk5hbWVkQmluZGluZyIsImFsaWFzIiwibmFtZWRCaW5kaW5nIiwibmFtZWRCaW5kaW5nc05vZGUiLCJOYW1lZEJpbmRpbmdzIiwibmFtZWRCaW5kaW5nTm9kZXMiLCJnZXROYW1lZEJpbmRpbmdOb2RlcyIsIm5hbWVkQmluZGluZ3NBcnJheSIsIm5hbWVkQmluZGluZ3MiLCJicmFja2V0ZWRUZXJtTm9kZSIsIkJyYWNrZXRlZFRlcm0iLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJjb21wYXJpc29uVGVybU5vZGUiLCJDb21wYXJpc29uVGVybSIsIm5lZ2F0ZWQiLCJvYmplY3RBc3NpZ25tZW50Tm9kZSIsImdldE5hbWVkQmluZGluZ3NOb2RlIiwicHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlIiwiUHJvY2VkdXJlIiwicHJvY2VkdXJlU3RyaW5nIiwicHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVMYWJlbFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsInByb2NlZHVyZSIsImFycmF5QXNzaWdubWVudE5vZGUiLCJBcnJheUFzc2lnbm1lbnQiLCJyZXR1cm5TdGF0ZW1lbnROb2RlIiwiUmV0dXJuU3RhdGVtZW50IiwiT2JqZWN0QXNzaWdtZW50Iiwib2JqZWN0QXNzaWdubWVudCIsImFub255bW91c1Byb2NlZHVyZU5vZGUiLCJBbm9ueW1vdXNQcm9jZWR1cmUiLCJub255bW91c1Byb2NlZHVyZVN0cmluZyIsImFub255bW91c1Byb2NlZHVyZVN0cmluZ0Zyb21UeXBlUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrIiwidmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJWYXJpYWJsZUFzc2lnbm1lbnRzIiwidmFyaWFibGVBc3NpZ25tZW50c0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nIiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzIiwiUHJvY2VkdXJlRGVjbGFyYXRpb24iLCJwcm9jZWR1cmVEZWNsYXJhdGlvblN0cmluZyIsInByb2NlZHVyZURlY2xhcmF0aW9uU3RyaW5nRnJvbVByb2NlZHVyZSIsInByb2NlZHVyZURlY2xhcmF0aW9uIiwidmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsIlZhcmlhYmxlQXNzaWdubWVudCIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUiLCJhc3NpZ25tZW50IiwidmFyaWFibGVTdHJpbmciLCJ2YXJpYWJsZVN0cmluZ0Zyb21OYW1lIiwiZ2V0TmFtZSIsImdldFZhbHVlTm9kZSIsImdldFR5cGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJnZXRQcmltaXRpdmVOb2RlIiwiaXNFbGlkZWQiLCJnZXRTb21lTm9kZSIsImdldFN0cmluZyIsIlF1ZXJ5IiwiZnJvbUV4cHJlc3Npb25TdHJpbmciLCJnZXRWYWx1ZSIsImdldEV2ZXJ5Tm9kZSIsImdldE5lZ2F0ZWRUZXJtTm9kZSIsImdldExvZ2ljYWxUZXJtTm9kZSIsIkJPT0xFQU5fVFlQRSIsImdldFJlZHVjZU5vZGUiLCJzdGVwTm9kZXMiLCJnZXRTdGVwTm9kZXMiLCJtYXAiLCJnZXRBbGlhcyIsImdldFRlcm5hcnlOb2RlIiwiZ2V0QnJhY2tldGVkVGVybU5vZGUiLCJ0ZXJtTk9kZSIsImdldENvbXBhcmlzb25UZXJtTm9kZSIsImdldEFycmF5QXNzaWdubWVudE5vZGUiLCJpZkV4cHJlc3Npb25Ob2RlIiwiZ2V0SWZFeHByZXNzaW9uTm9kZSIsImdldE5vZGVRdWVyeU5vZGUiLCJsZWZ0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJnZXRWYWx1ZXNOb2RlIiwiZ2V0T2JqZWN0QXNzaWdubWVudE5vZGUiLCJnZXROb2Rlc1F1ZXJ5Tm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiaXNOZWdhdGVkIiwiZWxzZUV4cHJlc3Npb25Ob2RlIiwiZ2V0RWxzZUV4cHJlc3Npb25Ob2RlIiwiZ2V0UmV0dXJuQmxvY2tOb2RlIiwiZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsImlzTm9uc2Vuc2ljYWwiLCJnZXRSZWZlcmVuY2VOb2RlIiwiaXNEaXNqdW5jdGlvbiIsImdldFZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwiZ2V0UHJvY2VkdXJlQ2FsbE5vZGUiLCJnZXRCaW5kaW5nc05vZGUiLCJnZXRMYWJlbE5vZGUiLCJnZXRSZXR1cm5TdGF0ZW1lbnROb2RlIiwidmFyaWFibGVBc3NpZ21lbnROb2RlIiwiZ2V0RXhwcmVzc2lvbk5vZGUiLCJnZXRQYXJhbWV0ZXJzTm9kZSIsImJpbmRpbmdOb2RlcyIsImdldEJpbmRpbmdOb2RlcyIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJuYW1lZFBhcmFtZXRlcnNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudE5vZGVzIiwiZ2V0VmFyaWFibGVBc3NpZ25tZW50Tm9kZXMiLCJ2YXJpYWJsZUFzc2lnbm1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQW81QmdCQTtlQUFBQTs7UUFsV0FDO2VBQUFBOztRQTZrQkFDO2VBQUFBOztRQThDQUM7ZUFBQUE7O1FBM0ZBQztlQUFBQTs7UUE1a0JBQztlQUFBQTs7UUEwZEFDO2VBQUFBOztRQTl4QkFDO2VBQUFBOztRQWlsQ0FDO2VBQUFBOztRQW5IQUM7ZUFBQUE7O1FBNzZCQUM7ZUFBQUE7O1FBc05BQztlQUFBQTs7UUFvZUFDO2VBQUFBOztRQTFjQUM7ZUFBQUE7O1FBNmRBQztlQUFBQTs7UUE2S0FDO2VBQUFBOztRQTlaQUM7ZUFBQUE7O1FBZ1hBQztlQUFBQTs7UUF6OEJBQztlQUFBQTs7UUFhQUM7ZUFBQUE7O1FBdXJCQUM7ZUFBQUE7O1FBL2RBQztlQUFBQTs7UUFvM0JBQztlQUFBQTs7UUE1UEFDO2VBQUFBOztRQXlCQUM7ZUFBQUE7O1FBaENBQztlQUFBQTs7UUF6ekJBQztlQUFBQTs7UUE4aUNBQztlQUFBQTs7UUEzRkFDO2VBQUFBOztRQXZHQUM7ZUFBQUE7O1FBcG1CQUM7ZUFBQUE7O1FBdWJBQztlQUFBQTs7UUFqTUFDO2VBQUFBOztRQXBCQUM7ZUFBQUE7O1FBaVJBQztlQUFBQTs7UUFuTEFDO2VBQUFBOztRQU1BQztlQUFBQTs7UUFqREFDO2VBQUFBOztRQXZRQUM7ZUFBQUE7O1FBZ0JBQztlQUFBQTs7UUF1REFDO2VBQUFBOztRQXl6QkFDO2VBQUFBOztRQWhQQUM7ZUFBQUE7O1FBM3FCQUM7ZUFBQUE7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
1113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMsXG4gICAgICAgICB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgcHJvY2VkdXJlRGVjbGFyYXRpb25TdHJpbmdGcm9tUHJvY2VkdXJlLFxuICAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUsXG4gICAgICAgICBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlLFxuICAgICAgICAgZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrLFxuICAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2ssXG4gICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSxcbiAgICAgICAgIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGVwIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0ZXBOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYXJyYXlBc3NpZ25tZW50ID0gYXJyYXlBc3NpZ25tZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgb2JqZWN0QXNzaWdtZW50ID0gb2JqZWN0QXNzaWdubWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdtZW50cyA9IHZhcmlhYmxlQXNzaWdubWVudHNGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXAgPSBuZXcgU3RlcChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5QXNzaWdubWVudCwgb2JqZWN0QXNzaWdtZW50LCB2YXJpYWJsZUFzc2lnbWVudHMpO1xuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNvbWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc29tZU5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNvbWVTdHJpbmcgPSBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBzb21lU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNvbWUgPSBuZXcgU29tZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiBzb21lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgbmVnYXRlZFRlcm0gPSBuZWdhdGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgbG9naWNhbFRlcm0gPSBsb2dpY2FsVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgYnJhY2tldGVkVGVybSA9IGJyYWNrZXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGNvbXBhcmlzb25UZXJtID0gY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICB2YXJpYWJsZSxcbiAgICAgIHByaW1pdGl2ZSxcbiAgICAgIG5lZ2F0ZWRUZXJtLFxuICAgICAgbG9naWNhbFRlcm0sXG4gICAgICBicmFja2V0ZWRUZXJtLFxuICAgICAgY29tcGFyaXNvblRlcm1cbiAgICBdLFxuICAgIHRlcm1TdHJpbmcgPSB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcywgY29udGV4dCksXG4gICAgc3RyaW5nID0gdGVybVN0cmluZywgIC8vL1xuICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm0gPSBuZXcgVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBwcmltaXRpdmUsIG5lZ2F0ZWRUZXJtLCBsb2dpY2FsVGVybSwgYnJhY2tldGVkVGVybSwgY29tcGFyaXNvblRlcm0pO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJndW1lbnRUeXBlID0gYXJndW1lbnRUeXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgYXJndW1lbnRUeXBlKTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYWx1ZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YWx1ZU5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgIHZhcmlhYmxlLFxuICAgICAgICAgIHByaW1pdGl2ZVxuICAgICAgICBdLFxuICAgICAgICB2YWx1ZVN0cmluZyA9IHZhbHVlU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcywgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHZhbHVlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhbHVlID0gbmV3IFZhbHVlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHByaW1pdGl2ZSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tVGVybXNOb2RlKHRlcm1zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm1zIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1zTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtTm9kZXMgPSB0ZXJtc05vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zQXJyYXkgPSB0ZXJtc0FycmF5RnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IHRlcm1zQXJyYXksIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtcyA9IG5ldyBUZXJtcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckZyb21FcnJvck5vZGUoZXJyb3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXJyb3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXJyb3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEV2ZXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGV2ZXJ5Tm9kZSwgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXZlcnlTdHJpbmcgPSBldmVyeVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gZXZlcnlTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBldmVyeSA9IG5ldyBFdmVyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiBldmVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsYWJlbE5vZGUsXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNGcm9tVmFsdWVzTm9kZSh2YWx1ZXNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFsdWVzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhbHVlc05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdmFsdWVOb2RlcyA9IHZhbHVlc05vZGUuZ2V0VmFsdWVOb2RlcygpLFxuICAgICAgICB2YWx1ZXNBcnJheSA9IHZhbHVlc0FycmF5RnJvbVZhbHVlTm9kZXModmFsdWVOb2RlcywgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gdmFsdWVzQXJyYXksIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YWx1ZXMgPSBuZXcgVmFsdWVzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVkdWNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZHVjZU5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpbml0aWFsVmFsdWUgPSBpbml0aWFsVmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZHVjZVN0cmluZyA9IHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBpbml0aWFsVmFsdWUsIGFub255bW91c1Byb2NlZHVyZSksXG4gICAgICAgIHN0cmluZyA9IHJlZHVjZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCByZWR1Y2UgPSBuZXcgUmVkdWNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGluaXRpYWxWYWx1ZSwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gcmVkdWNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ0Zyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJpbmRpbmcgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYmluZGluZ05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbGlkZWQgPSBlbGlkZWRGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGJpbmRpbmcgPSBuZXcgQmluZGluZyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIGVsaWRlZCk7XG5cbiAgcmV0dXJuIGJpbmRpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybmFyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJuYXJ5Tm9kZSwgLy8vXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaWZFeHByZXNzaW9uID0gaWZFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZWxzZUV4cHJlc3Npb24gPSBlbHNlRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm5hcnlTdHJpbmcgPSB0ZXJuYXJ5U3RyaW5nRnJvbVRlcm0odGVybSksXG4gICAgICAgIHN0cmluZyA9IHRlcm5hcnlTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJuYXJ5ID0gbmV3IFRlcm5hcnkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBpZkV4cHJlc3Npb24sIGVsc2VFeHByZXNzaW9uKTtcblxuICByZXR1cm4gdGVybmFyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ3NGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJpbmRpbmdzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJpbmRpbmdzTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGJpbmRpbmdzQXJyYXkgPSBiaW5kaW5nc0FycmF5RnJvbUJpbmRpbmdzTm9kZShiaW5kaW5nc05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IGJpbmRpbmdzQXJyYXk7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGJpbmRpbmdzID0gbmV3IEJpbmRpbmdzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiBiaW5kaW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOb2RlUXVlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbm9kZVF1ZXJ5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZVF1ZXJ5ID0gbmV3IE5vZGVRdWVyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBxdWVyeSk7XG5cbiAgcmV0dXJuIG5vZGVRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcmltaXRpdmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJpbWl0aXZlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZSA9IG5ldyBQcmltaXRpdmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB2YWx1ZSk7XG5cbiAgcmV0dXJuIHByaW1pdGl2ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOb2Rlc1F1ZXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5vZGVzUXVlcnlOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzUXVlcnkgPSBuZXcgTm9kZXNRdWVyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBxdWVyeSk7XG5cbiAgcmV0dXJuIG5vZGVzUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUGFyYW1ldGVycyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJzTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHBhcmFtZXRlcnNBcnJheSA9IHBhcmFtZXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gcGFyYW1ldGVyc0FycmF5OyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXJzID0gbmV3IFBhcmFtZXRlcnMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXhwcmVzc2lvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBleHByZXNzaW9uTm9kZSwgIC8vL1xuICAgICAgICB0ZXJtID0gdGVybUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNvbWUgPSBzb21lRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXZlcnkgPSBldmVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZHVjZSA9IHJlZHVjZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm5hcnkgPSB0ZXJuYXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9kZXNRdWVyeSA9IG5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgIHRlcm0sXG4gICAgICAgICAgc29tZSxcbiAgICAgICAgICBldmVyeSxcbiAgICAgICAgICByZWR1Y2UsXG4gICAgICAgICAgdGVybmFyeSxcbiAgICAgICAgICBub2RlUXVlcnksXG4gICAgICAgICAgbm9kZXNRdWVyeSxcbiAgICAgICAgICByZXR1cm5CbG9jayxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsXG4gICAgICAgIF0sXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBleHByZXNzaW9uU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcywgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IGV4cHJlc3Npb25TdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IG5ldyBFeHByZXNzaW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgc29tZSwgZXZlcnksIHJlZHVjZSwgdGVybmFyeSwgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5LCByZXR1cm5CbG9jaywgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmV0dXJuQmxvY2sgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmV0dXJuQmxvY2tOb2RlLCAvLy9cbiAgICAgICAgc3RlcHMgPSBzdGVwc0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9uc2Vuc2ljYWwgPSBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuU3RhdGVtZW50ID0gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50KSxcbiAgICAgICAgc3RyaW5nID0gcmV0dXJuQmxvY2tTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuQmxvY2sgPSBuZXcgUmV0dXJuQmxvY2soY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGVwcywgbm9uc2Vuc2ljYWwsIHJldHVyblN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5lZ2F0ZWRUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybU5vZGUgPSBuZWdhdGVkVGVybU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWRUZXJtID0gbmV3IE5lZ2F0ZWRUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdGVybSk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9naWNhbFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExvZ2ljYWxUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxvZ2ljYWxUZXJtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRpc2p1bmN0aW9uID0gZGlzanVuY3Rpb25Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbG9naWNhbFRlcm0gPSBuZXcgTG9naWNhbFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBkaXNqdW5jdGlvbiwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGxvZ2ljYWxUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRCaW5kaW5nRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5hbWVkQmluZGluZyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBuYW1lZEJpbmRpbmdOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYWxpYXMgPSBhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5hbWVkQmluZGluZyA9IG5ldyBOYW1lZEJpbmRpbmcoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBhbGlhcyk7XG5cbiAgcmV0dXJuIG5hbWVkQmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkQmluZGluZ3NGcm9tTmFtZWRCaW5kaW5nc05vZGUobmFtZWRCaW5kaW5nc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOYW1lZEJpbmRpbmdzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5hbWVkQmluZGluZ3NOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lZEJpbmRpbmdOb2RlcyA9IG5hbWVkQmluZGluZ3NOb2RlLmdldE5hbWVkQmluZGluZ05vZGVzKCksXG4gICAgICAgIG5hbWVkQmluZGluZ3NBcnJheSA9IG5hbWVkUGFyYW1ldGVyc0FycmF5RnJvbU5hbWVkQmluZGluZ05vZGVzKG5hbWVkQmluZGluZ05vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBuYW1lZEJpbmRpbmdzQXJyYXk7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5hbWVkQmluZGluZ3MgPSBuZXcgTmFtZWRCaW5kaW5ncyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gbmFtZWRCaW5kaW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZFRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkVGVybSA9IG5ldyBCcmFja2V0ZWRUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbmV3IFByb2NlZHVyZUNhbGwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHZhbHVlcyk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tcGFyaXNvblRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29tcGFyaXNvblRlcm0gPSBuZXcgQ29tcGFyaXNvblRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuZWdhdGVkLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gY29tcGFyaXNvblRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZEJpbmRpbmdzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWVkQmluZGluZ3NOb2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUuZ2V0TmFtZWRCaW5kaW5nc05vZGUoKSxcbiAgICAgICAgbmFtZWRCaW5kaW5ncyA9IG5hbWVkQmluZGluZ3NGcm9tTmFtZWRCaW5kaW5nc05vZGUobmFtZWRCaW5kaW5nc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBuYW1lZEJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlU3RyaW5nID0gcHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVMYWJlbFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBsYWJlbCwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spLFxuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcHJvY2VkdXJlID0gbmV3IFByb2NlZHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGxhYmVsLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBcnJheUFzc2lnbm1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBiaW5kaW5ncyA9IGJpbmRpbmdzRnJvbUFycmF5QXNzaWdubWVudE5vZGUoYXJyYXlBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYXJyYXlBc3NpZ25tZW50ID0gbmV3IEFycmF5QXNzaWdubWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBiaW5kaW5ncyk7XG5cbiAgcmV0dXJuIGFycmF5QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZXR1cm5TdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJldHVyblN0YXRlbWVudCA9IG5ldyBSZXR1cm5TdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YWx1ZSk7XG5cbiAgcmV0dXJuIHJldHVyblN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBPYmplY3RBc3NpZ21lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZWRCaW5kaW5ncyA9IG5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG9iamVjdEFzc2lnbm1lbnQgPSBuZXcgT2JqZWN0QXNzaWdtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIG5hbWVkQmluZGluZ3MpO1xuXG4gIHJldHVybiBvYmplY3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFub255bW91c1Byb2NlZHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCAgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayksXG4gICAgICAgIHN0cmluZyA9IG5vbnltb3VzUHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlID0gbmV3IEFub255bW91c1Byb2NlZHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlQXNzaWdubWVudHMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIC8vL1xuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkpLFxuICAgICAgICBhcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnRzID0gbmV3IFZhcmlhYmxlQXNzaWdubWVudHMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVEZWNsYXJhdGlvbkZyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHByb2NlZHVyZSA9IHByb2NlZHVyZUZyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUocHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlRGVjbGFyYXRpb25TdHJpbmcgPSBwcm9jZWR1cmVEZWNsYXJhdGlvblN0cmluZ0Zyb21Qcm9jZWR1cmUocHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlRGVjbGFyYXRpb25TdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlRGVjbGFyYXRpb24gPSBuZXcgUHJvY2VkdXJlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwcm9jZWR1cmUpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVBc3NpZ25tZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudE5vZGUsICAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSh0eXBlLCB2YXJpYWJsZSwgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYXNzaWdubWVudCA9IG5ldyBWYXJpYWJsZUFzc2lnbm1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIGFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlU3RyaW5nID0gdmFyaWFibGVTdHJpbmdGcm9tTmFtZShuYW1lKSxcbiAgICAgICAgc3RyaW5nID0gdmFyaWFibGVTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgdmFsdWUpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHR5cGVOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gbGFiZWxOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZU5vZGUgPSByZWR1Y2VOb2RlLmdldFZhbHVlTm9kZSgpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBiaW5kaW5nTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IGJpbmRpbmdOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVOb2RlICE9IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHNvbWVOb2RlLmdldFZhcmlhYmxlTm9kZSgpLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gIGNvbnN0IG5hbWUgPSB2YXJpYWJsZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB0ZXJtTm9kZS5nZXRQcmltaXRpdmVOb2RlKCk7XG5cbiAgaWYgKHByaW1pdGl2ZU5vZGUgIT09IG51bGwpIHtcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGlkZWRGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZWxpZGVkID0gYmluZGluZ05vZGUuaXNFbGlkZWQoKTtcblxuICByZXR1cm4gZWxpZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwYXJhbWV0ZXJOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSByZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGVOYW1lID0gcHJpbWl0aXZlTm9kZS5nZXRUeXBlTmFtZSgpLFxuICAgICAgICB0eXBlID0gVHlwZS5mcm9tVHlwZU5hbWUodHlwZU5hbWUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhbHVlTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB2YWx1ZU5vZGUuZ2V0UHJpbWl0aXZlTm9kZSgpO1xuXG4gIGlmIChwcmltaXRpdmVOb2RlICE9PSBudWxsKSB7XG4gICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc29tZSA9IG51bGw7XG5cbiAgY29uc3Qgc29tZU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRTb21lTm9kZSgpO1xuXG4gIGlmIChzb21lTm9kZSAhPT0gbnVsbCkge1xuICAgIHNvbWUgPSBzb21lRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzb21lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICByZXR1cm4gcXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWUgPSBwcmltaXRpdmVOb2RlLmdldFZhbHVlKCk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9kZXNRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICByZXR1cm4gcXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZXZlcnkgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldEV2ZXJ5Tm9kZSgpO1xuXG4gIGlmIChldmVyeU5vZGUgIT09IG51bGwpIHtcbiAgICBldmVyeSA9IGV2ZXJ5RnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5lZ2F0ZWRUZXJtID0gbnVsbDtcblxuICBjb25zdCBuZWdhdGVkVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXROZWdhdGVkVGVybU5vZGUoKTtcblxuICBpZiAobmVnYXRlZFRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgbmVnYXRlZFRlcm0gPSBuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBuZWdhdGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2ljYWxUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsb2dpY2FsVGVybSA9IG51bGw7XG5cbiAgY29uc3QgbG9naWNhbFRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0TG9naWNhbFRlcm1Ob2RlKCk7XG5cbiAgaWYgKGxvZ2ljYWxUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGxvZ2ljYWxUZXJtID0gbG9naWNhbFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbG9naWNhbFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IEJPT0xFQU5fVFlQRV9OQU1FO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21OZWdhdGVkVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBCT09MRUFOX1RZUEVfTkFNRTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcmd1bWVudFR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGFyZ3VtZW50VHlwZSA9IG51bGw7XG5cbiAgY29uc3QgYXJndW1lbnRUeXBlTmFtZSA9IHR5cGVOb2RlLmdldEFyZ3VtZW50VHlwZU5hbWUoKTtcblxuICBpZiAoYXJndW1lbnRUeXBlTmFtZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHM7XG5cbiAgICBhcmd1bWVudFR5cGUgPSBUeXBlLmZyb21UeXBlTmFtZShhcmd1bWVudFR5cGVOYW1lLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBhcmd1bWVudFR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZHVjZSA9IG51bGw7XG5cbiAgY29uc3QgcmVkdWNlTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFJlZHVjZU5vZGUoKTtcblxuICBpZiAocmVkdWNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZHVjZSA9IHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZHVjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE5vZGVzID0gcmV0dXJuQmxvY2tOb2RlLmdldFN0ZXBOb2RlcygpLFxuICAgICAgICBzdGVwcyA9IHN0ZXBOb2Rlcy5tYXAoKHN0ZXBOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcCA9IHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gbmFtZWRCaW5kaW5nTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gbmFtZWRCaW5kaW5nTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYWxpYXMgPSBuYW1lZEJpbmRpbmdOb2RlLmdldEFsaWFzKCk7XG5cbiAgcmV0dXJuIGFsaWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVRdWVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybmFyeSA9IG51bGw7XG5cbiAgY29uc3QgdGVybmFyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUZXJuYXJ5Tm9kZSgpO1xuXG4gIGlmICh0ZXJuYXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm5hcnkgPSB0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgYnJhY2tldGVkVGVybSA9IG51bGw7XG5cbiAgY29uc3QgYnJhY2tldGVkVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRCcmFja2V0ZWRUZXJtTm9kZSgpO1xuXG4gIGlmIChicmFja2V0ZWRUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBicmFja2V0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUodGVybU5PZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbXBhcmlzb25UZXJtID0gbnVsbDtcblxuICBjb25zdCBjb21wYXJpc29uVGVybU5vZGUgPSB0ZXJtTk9kZS5nZXRDb21wYXJpc29uVGVybU5vZGUoKTtcblxuICBpZiAoY29tcGFyaXNvblRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgY29tcGFyaXNvblRlcm0gPSBjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWUgPSB2YWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpbml0aWFsVmFsdWUgPSB2YWx1ZTsgLy8vXG5cbiAgcmV0dXJuIGluaXRpYWxWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uID0gbnVsbDtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVzUXVlcnlOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5QXNzaWdubWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgYXJyYXlBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBhcnJheUFzc2lnbm1lbnROb2RlID0gc3RlcE5vZGUuZ2V0QXJyYXlBc3NpZ25tZW50Tm9kZSgpO1xuXG4gIGlmIChhcnJheUFzc2lnbm1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgYXJyYXlBc3NpZ25tZW50ID0gYXJyYXlBc3NpZ25tZW50RnJvbUFycmF5QXNzaWdubWVudE5vZGUoYXJyYXlBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXJyYXlBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWZFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlmRXhwcmVzc2lvbk5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRJZkV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGlmRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoaWZFeHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGlmRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbm9kZVF1ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBub2RlUXVlcnlOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0Tm9kZVF1ZXJ5Tm9kZSgpO1xuXG4gIGlmIChub2RlUXVlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgbm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbm9kZVF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVmdFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0VGVybU5vZGUgPSBsb2dpY2FsVGVybU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIGxlZnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShsZWZ0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsZWZ0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZXNOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0VmFsdWVzTm9kZSgpLFxuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXNGcm9tVmFsdWVzTm9kZSh2YWx1ZXNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWUgPSBudWxsO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZU5vZGUgPSByZXR1cm5TdGF0ZW1lbnROb2RlLmdldFZhbHVlTm9kZSgpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEFzc2lnbm1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG9iamVjdEFzc2lnbm1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IG9iamVjdEFzc2lnbm1lbnROb2RlID0gc3RlcE5vZGUuZ2V0T2JqZWN0QXNzaWdubWVudE5vZGUoKTtcblxuICBpZiAob2JqZWN0QXNzaWdubWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBvYmplY3RBc3NpZ25tZW50ID0gb2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vZGVzUXVlcnkgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzUXVlcnlOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0Tm9kZXNRdWVyeU5vZGUoKTtcblxuICBpZiAobm9kZXNRdWVyeU5vZGUgIT09IG51bGwpIHtcbiAgICBub2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbm9kZXNRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBsb2dpY2FsVGVybU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgIHJpZ2h0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmlnaHRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJpZ2h0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29tcGFyaXNvblRlcm1Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZWxzZUV4cHJlc3Npb25Ob2RlID0gdGVybmFyeU5vZGUuZ2V0RWxzZUV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGVsc2VFeHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShlbHNlRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBlbHNlRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZXR1cm5CbG9jayA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuQmxvY2tOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCk7XG5cbiAgaWYgKHJldHVybkJsb2NrTm9kZSAhPT0gbnVsbCkge1xuICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IHNvbWVOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbnNlbnNpY2FsRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgbm9uc2Vuc2ljYWwgPSByZXR1cm5CbG9ja05vZGUuaXNOb25zZW5zaWNhbCgpO1xuXG4gIHJldHVybiBub25zZW5zaWNhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVmdFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0VGVybU5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIGxlZnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShsZWZ0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsZWZ0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2p1bmN0aW9uRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGlzanVuY3Rpb24gPSBsb2dpY2FsVGVybU5vZGUuaXNEaXNqdW5jdGlvbigpO1xuXG4gIHJldHVybiBkaXNqdW5jdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gYW5vbnltb3VzUHJvY2VkdXJlTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZUFzc2lnbm1lbnRzID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSA9IHN0ZXBOb2RlLmdldFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGVBc3NpZ25tZW50cyA9IHZhcmlhYmxlQXNzaWdubWVudHNGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gZXZlcnlOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmluZGluZ3NOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRCaW5kaW5nc05vZGUoKSxcbiAgICAgICAgYmluZGluZ3MgPSBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gcmVkdWNlTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGUgPSBwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUuZ2V0TGFiZWxOb2RlKCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuU3RhdGVtZW50Tm9kZSA9IHJldHVybkJsb2NrTm9kZS5nZXRSZXR1cm5TdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJldHVyblN0YXRlbWVudCA9IHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5TdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHByZXNzaW9uRnJvbVZhcmlhYmxlQXNzaWdubWVudE5vZGUodmFyaWFibGVBc3NpZ21lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGV4cHJlc3Npb25Ob2RlID0gdmFyaWFibGVBc3NpZ21lbnROb2RlLmdldEV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnNOb2RlID0gYW5vbnltb3VzUHJvY2VkdXJlTm9kZS5nZXRQYXJhbWV0ZXJzTm9kZSgpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuQmxvY2tOb2RlID0gYW5vbnltb3VzUHJvY2VkdXJlTm9kZS5nZXRSZXR1cm5CbG9ja05vZGUoKSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSBwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlKHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0FycmF5RnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXNBcnJheSA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7IC8vL1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0FycmF5RnJvbVZhbHVlTm9kZXModmFsdWVOb2RlcywgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZXNBcnJheSA9IHZhbHVlTm9kZXMubWFwKCh2YWx1ZU5vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJpbmRpbmdOb2RlcyA9IGJpbmRpbmdzTm9kZS5nZXRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdOb2Rlcy5tYXAoKGJpbmRpbmdOb2RlKSA9PiB7IC8vL1xuICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBiaW5kaW5nO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gYmluZGluZ3NBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnNOb2RlLmdldFBhcmFtZXRlck5vZGVzKCksXG4gICAgICAgIHBhcmFtZXRlcnNBcnJheSA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyhuYW1lZEJpbmRpbmdOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBuYW1lZFBhcmFtZXRlcnNBcnJheSA9IG5hbWVkQmluZGluZ05vZGVzLm1hcCgobmFtZWRCaW5kaW5nTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCBuYW1lZEJpbmRpbmcgPSBuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBuYW1lZEJpbmRpbmc7XG4gIH0pO1xuXG4gIHJldHVybiBuYW1lZFBhcmFtZXRlcnNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcygpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2Rlcy5tYXAoKHZhcmlhYmxlQXNzaWdubWVudE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5O1xufVxuIl0sIm5hbWVzIjpbImFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21FdmVyeU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZSIsImFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSIsImFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlIiwiYXJyYXlBc3NpZ25tZW50RnJvbVN0ZXBOb2RlIiwiYmluZGluZ0Zyb21CaW5kaW5nTm9kZSIsImJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlIiwiYmluZGluZ3NGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZSIsImJpbmRpbmdzRnJvbUJpbmRpbmdzTm9kZSIsImJyYWNrZXRlZFRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlIiwiY29tcGFyaXNvblRlcm1Gcm9tQ29tcGFyaXNvblRlcm1Ob2RlIiwiY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUiLCJkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUiLCJlbGlkZWRGcm9tQmluZGluZ05vZGUiLCJlbHNlRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSIsImVycm9yRnJvbUVycm9yTm9kZSIsImV2ZXJ5RnJvbUV2ZXJ5Tm9kZSIsImV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlIiwiZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZSIsImV4cHJlc3Npb25Gcm9tVmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsImV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlIiwiaWZFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlIiwiaW5pdGlhbFZhbHVlRnJvbVJlZHVjZU5vZGUiLCJsYWJlbEZyb21MYWJlbE5vZGUiLCJsYWJlbEZyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUiLCJsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUiLCJsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJsb2dpY2FsVGVybUZyb21UZXJtTm9kZSIsIm5hbWVGcm9tQmluZGluZ05vZGUiLCJuYW1lRnJvbUxhYmVsTm9kZSIsIm5hbWVGcm9tTmFtZWRCaW5kaW5nTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVZhcmlhYmxlTm9kZSIsIm5hbWVkQmluZGluZ0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwibmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZSIsIm5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyIsIm5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUiLCJub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZSIsIm5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlIiwibm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlIiwib2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsIm9iamVjdEFzc2lnbm1lbnRGcm9tU3RlcE5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZSIsInBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSIsInByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlIiwicHJpbWl0aXZlRnJvbVRlcm1Ob2RlIiwicHJpbWl0aXZlRnJvbVZhbHVlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlRGVjbGFyYXRpb25Gcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlIiwicHJvY2VkdXJlRnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSIsInF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUiLCJxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsInJlZHVjZUZyb21FeHByZXNzaW9uTm9kZSIsInJlZHVjZUZyb21SZWR1Y2VOb2RlIiwicmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZXR1cm5CbG9ja0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwicmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUiLCJyZXR1cm5CbG9ja0Zyb21Qcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUiLCJyZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUiLCJyZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuQmxvY2tOb2RlIiwicmV0dXJuU3RhdGVtZW50RnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJyaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlIiwicmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZSIsInNvbWVGcm9tRXhwcmVzc2lvbk5vZGUiLCJzb21lRnJvbVNvbWVOb2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBzRnJvbVJldHVybkJsb2NrTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJ0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlIiwidGVybUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UZXJuYXJ5Tm9kZSIsInRlcm1zQXJyYXlGcm9tVGVybU5vZGVzIiwidGVybXNGcm9tVGVybXNOb2RlIiwidGVybmFyeUZyb21FeHByZXNzaW9uTm9kZSIsInRlcm5hcnlGcm9tVGVybmFyeU5vZGUiLCJ0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUiLCJ0eXBlRnJvbUJpbmRpbmdOb2RlIiwidHlwZUZyb21Mb2dpY2FsVGVybU5vZGUiLCJ0eXBlRnJvbU5hbWVkQmluZGluZ05vZGUiLCJ0eXBlRnJvbU5lZ2F0ZWRUZXJtTm9kZSIsInR5cGVGcm9tUGFyYW5ldGVyTm9kZSIsInR5cGVGcm9tUHJpbWl0aXZlTm9kZSIsInR5cGVGcm9tUHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UeXBlTm9kZSIsInR5cGVGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlTm9kZSIsInZhbHVlRnJvbVByaW1pdGl2ZU5vZGUiLCJ2YWx1ZUZyb21SZWR1Y2VOb2RlIiwidmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUiLCJ2YWx1ZUZyb21WYWx1ZU5vZGUiLCJ2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzIiwidmFsdWVzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwidmFsdWVzRnJvbVZhbHVlc05vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGVwTm9kZSIsInZhcmlhYmxlQXNzaWdubWVudHNGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tRXZlcnlOb2RlIiwidmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZSIsInZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlIiwidmFyaWFibGVGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21SZWR1Y2VOb2RlIiwidmFyaWFibGVGcm9tU29tZU5vZGUiLCJ2YXJpYWJsZUZyb21UZXJtTm9kZSIsInZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlRnJvbVZhbHVlTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSIsInN0ZXBOb2RlIiwiY29udGV4dCIsIlN0ZXAiLCJlbGVtZW50cyIsIm5vZGUiLCJzdHJpbmciLCJub2RlQXNTdHJpbmciLCJicmVha1BvaW50IiwiYXJyYXlBc3NpZ25tZW50Iiwib2JqZWN0QXNzaWdtZW50IiwidmFyaWFibGVBc3NpZ21lbnRzIiwic3RlcCIsInNvbWVOb2RlIiwiU29tZSIsInZhcmlhYmxlIiwiYW5vbnltb3VzUHJvY2VkdXJlIiwic29tZVN0cmluZyIsInNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJzb21lIiwidGVybU5vZGUiLCJUZXJtIiwicHJpbWl0aXZlIiwibmVnYXRlZFRlcm0iLCJsb2dpY2FsVGVybSIsImJyYWNrZXRlZFRlcm0iLCJjb21wYXJpc29uVGVybSIsInByb3BlcnRpZXMiLCJ0ZXJtU3RyaW5nIiwidGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidGVybSIsInR5cGVOb2RlIiwiVHlwZSIsIm5hbWUiLCJhcmd1bWVudFR5cGUiLCJ0eXBlIiwidmFsdWVOb2RlIiwiVmFsdWUiLCJ2YWx1ZVN0cmluZyIsInZhbHVlU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ2YWx1ZSIsInRlcm1zTm9kZSIsIlRlcm1zIiwidGVybU5vZGVzIiwiZ2V0VGVybU5vZGVzIiwidGVybXNBcnJheSIsImFycmF5IiwidGVybXMiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwiZXZlcnlOb2RlIiwiRXZlcnkiLCJldmVyeVN0cmluZyIsImV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwiZXZlcnkiLCJsYWJlbE5vZGUiLCJMYWJlbCIsImxhYmVsIiwidmFsdWVzTm9kZSIsIlZhbHVlcyIsInZhbHVlTm9kZXMiLCJnZXRWYWx1ZU5vZGVzIiwidmFsdWVzQXJyYXkiLCJ2YWx1ZXMiLCJyZWR1Y2VOb2RlIiwiUmVkdWNlIiwiaW5pdGlhbFZhbHVlIiwicmVkdWNlU3RyaW5nIiwicmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJyZWR1Y2UiLCJiaW5kaW5nTm9kZSIsIkJpbmRpbmciLCJlbGlkZWQiLCJiaW5kaW5nIiwidGVybmFyeU5vZGUiLCJUZXJuYXJ5IiwiaWZFeHByZXNzaW9uIiwiZWxzZUV4cHJlc3Npb24iLCJ0ZXJuYXJ5U3RyaW5nIiwidGVybmFyeVN0cmluZ0Zyb21UZXJtIiwidGVybmFyeSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiZXhwcmVzc2lvbiIsImJpbmRpbmdzTm9kZSIsIkJpbmRpbmdzIiwiYmluZGluZ3NBcnJheSIsImJpbmRpbmdzIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJub2RlUXVlcnlOb2RlIiwiTm9kZVF1ZXJ5IiwicXVlcnkiLCJub2RlUXVlcnkiLCJwcmltaXRpdmVOb2RlIiwiUHJpbWl0aXZlIiwibm9kZXNRdWVyeU5vZGUiLCJOb2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsInBhcmFtZXRlcnNOb2RlIiwiUGFyYW1ldGVycyIsInBhcmFtZXRlcnNBcnJheSIsInBhcmFtZXRlcnMiLCJleHByZXNzaW9uTm9kZSIsIkV4cHJlc3Npb24iLCJyZXR1cm5CbG9jayIsInByb2NlZHVyZUNhbGwiLCJleHByZXNzaW9uU3RyaW5nIiwiZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwicmV0dXJuQmxvY2tOb2RlIiwiUmV0dXJuQmxvY2siLCJzdGVwcyIsIm5vbnNlbnNpY2FsIiwicmV0dXJuU3RhdGVtZW50IiwicmV0dXJuQmxvY2tTdHJpbmciLCJyZXR1cm5CbG9ja1N0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwibmVnYXRlZFRlcm1Ob2RlIiwiTmVnYXRlZFRlcm0iLCJnZXRUZXJtTm9kZSIsImxvZ2ljYWxUZXJtTm9kZSIsIkxvZ2ljYWxUZXJtIiwiZGlzanVuY3Rpb24iLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsIm5hbWVkQmluZGluZ05vZGUiLCJOYW1lZEJpbmRpbmciLCJhbGlhcyIsIm5hbWVkQmluZGluZyIsIm5hbWVkQmluZGluZ3NOb2RlIiwiTmFtZWRCaW5kaW5ncyIsIm5hbWVkQmluZGluZ05vZGVzIiwiZ2V0TmFtZWRCaW5kaW5nTm9kZXMiLCJuYW1lZEJpbmRpbmdzQXJyYXkiLCJuYW1lZEJpbmRpbmdzIiwiYnJhY2tldGVkVGVybU5vZGUiLCJCcmFja2V0ZWRUZXJtIiwicHJvY2VkdXJlQ2FsbE5vZGUiLCJQcm9jZWR1cmVDYWxsIiwiY29tcGFyaXNvblRlcm1Ob2RlIiwiQ29tcGFyaXNvblRlcm0iLCJuZWdhdGVkIiwib2JqZWN0QXNzaWdubWVudE5vZGUiLCJnZXROYW1lZEJpbmRpbmdzTm9kZSIsInByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSIsIlByb2NlZHVyZSIsInByb2NlZHVyZVN0cmluZyIsInByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2siLCJwcm9jZWR1cmUiLCJhcnJheUFzc2lnbm1lbnROb2RlIiwiQXJyYXlBc3NpZ25tZW50IiwicmV0dXJuU3RhdGVtZW50Tm9kZSIsIlJldHVyblN0YXRlbWVudCIsIk9iamVjdEFzc2lnbWVudCIsIm9iamVjdEFzc2lnbm1lbnQiLCJhbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwiQW5vbnltb3VzUHJvY2VkdXJlIiwibm9ueW1vdXNQcm9jZWR1cmVTdHJpbmciLCJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsInZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwiVmFyaWFibGVBc3NpZ25tZW50cyIsInZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZyIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50cyIsIlByb2NlZHVyZURlY2xhcmF0aW9uIiwicHJvY2VkdXJlRGVjbGFyYXRpb25TdHJpbmciLCJwcm9jZWR1cmVEZWNsYXJhdGlvblN0cmluZ0Zyb21Qcm9jZWR1cmUiLCJwcm9jZWR1cmVEZWNsYXJhdGlvbiIsInZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJWYXJpYWJsZUFzc2lnbm1lbnQiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlIiwiYXNzaWdubWVudCIsInZhcmlhYmxlU3RyaW5nIiwidmFyaWFibGVTdHJpbmdGcm9tTmFtZSIsImdldE5hbWUiLCJnZXRWYWx1ZU5vZGUiLCJnZXRUeXBlTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsImdldFByaW1pdGl2ZU5vZGUiLCJpc0VsaWRlZCIsInR5cGVOYW1lIiwiZ2V0VHlwZU5hbWUiLCJmcm9tVHlwZU5hbWUiLCJnZXRTb21lTm9kZSIsImdldFN0cmluZyIsIlF1ZXJ5IiwiZnJvbUV4cHJlc3Npb25TdHJpbmciLCJnZXRWYWx1ZSIsImdldEV2ZXJ5Tm9kZSIsImdldE5lZ2F0ZWRUZXJtTm9kZSIsImdldExvZ2ljYWxUZXJtTm9kZSIsIkJPT0xFQU5fVFlQRV9OQU1FIiwiYXJndW1lbnRUeXBlTmFtZSIsImdldEFyZ3VtZW50VHlwZU5hbWUiLCJnZXRSZWR1Y2VOb2RlIiwic3RlcE5vZGVzIiwiZ2V0U3RlcE5vZGVzIiwibWFwIiwiZ2V0QWxpYXMiLCJnZXRUZXJuYXJ5Tm9kZSIsImdldEJyYWNrZXRlZFRlcm1Ob2RlIiwidGVybU5PZGUiLCJnZXRDb21wYXJpc29uVGVybU5vZGUiLCJnZXRBcnJheUFzc2lnbm1lbnROb2RlIiwiaWZFeHByZXNzaW9uTm9kZSIsImdldElmRXhwcmVzc2lvbk5vZGUiLCJnZXROb2RlUXVlcnlOb2RlIiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwiZ2V0VmFsdWVzTm9kZSIsImdldE9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0Tm9kZXNRdWVyeU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImlzTmVnYXRlZCIsImVsc2VFeHByZXNzaW9uTm9kZSIsImdldEVsc2VFeHByZXNzaW9uTm9kZSIsImdldFJldHVybkJsb2NrTm9kZSIsImdldEFub255bW91c1Byb2NlZHVyZU5vZGUiLCJpc05vbnNlbnNpY2FsIiwiZ2V0UmVmZXJlbmNlTm9kZSIsImlzRGlzanVuY3Rpb24iLCJnZXRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsImdldFByb2NlZHVyZUNhbGxOb2RlIiwiZ2V0QmluZGluZ3NOb2RlIiwiZ2V0TGFiZWxOb2RlIiwiZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSIsInZhcmlhYmxlQXNzaWdtZW50Tm9kZSIsImdldEV4cHJlc3Npb25Ob2RlIiwiZ2V0UGFyYW1ldGVyc05vZGUiLCJiaW5kaW5nTm9kZXMiLCJnZXRCaW5kaW5nTm9kZXMiLCJwYXJhbWV0ZXJOb2RlcyIsImdldFBhcmFtZXRlck5vZGVzIiwibmFtZWRQYXJhbWV0ZXJzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnROb2RlcyIsImdldFZhcmlhYmxlQXNzaWdubWVudE5v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