@angular/compiler 17.0.0-rc.0 → 17.0.0-rc.2

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 (101) hide show
  1. package/esm2022/src/ml_parser/ast.mjs +3 -2
  2. package/esm2022/src/ml_parser/html_whitespaces.mjs +2 -2
  3. package/esm2022/src/ml_parser/icu_ast_expander.mjs +2 -2
  4. package/esm2022/src/ml_parser/lexer.mjs +2 -13
  5. package/esm2022/src/ml_parser/parser.mjs +3 -3
  6. package/esm2022/src/render3/partial/class_metadata.mjs +1 -1
  7. package/esm2022/src/render3/partial/directive.mjs +1 -1
  8. package/esm2022/src/render3/partial/factory.mjs +1 -1
  9. package/esm2022/src/render3/partial/injectable.mjs +1 -1
  10. package/esm2022/src/render3/partial/injector.mjs +1 -1
  11. package/esm2022/src/render3/partial/ng_module.mjs +1 -1
  12. package/esm2022/src/render3/partial/pipe.mjs +1 -1
  13. package/esm2022/src/render3/r3_ast.mjs +57 -62
  14. package/esm2022/src/render3/r3_control_flow.mjs +18 -14
  15. package/esm2022/src/render3/r3_deferred_blocks.mjs +7 -8
  16. package/esm2022/src/render3/r3_deferred_triggers.mjs +46 -27
  17. package/esm2022/src/render3/r3_template_transform.mjs +2 -2
  18. package/esm2022/src/render3/view/t2_api.mjs +1 -1
  19. package/esm2022/src/render3/view/t2_binder.mjs +22 -10
  20. package/esm2022/src/render3/view/template.mjs +54 -5
  21. package/esm2022/src/template/pipeline/ir/index.mjs +2 -1
  22. package/esm2022/src/template/pipeline/ir/src/enums.mjs +124 -38
  23. package/esm2022/src/template/pipeline/ir/src/expression.mjs +127 -64
  24. package/esm2022/src/template/pipeline/ir/src/handle.mjs +13 -0
  25. package/esm2022/src/template/pipeline/ir/src/ops/create.mjs +71 -50
  26. package/esm2022/src/template/pipeline/ir/src/ops/shared.mjs +3 -2
  27. package/esm2022/src/template/pipeline/ir/src/ops/update.mjs +19 -8
  28. package/esm2022/src/template/pipeline/ir/src/traits.mjs +1 -32
  29. package/esm2022/src/template/pipeline/ir/src/variable.mjs +1 -1
  30. package/esm2022/src/template/pipeline/src/compilation.mjs +6 -1
  31. package/esm2022/src/template/pipeline/src/conversion.mjs +2 -2
  32. package/esm2022/src/template/pipeline/src/emit.mjs +118 -99
  33. package/esm2022/src/template/pipeline/src/ingest.mjs +204 -50
  34. package/esm2022/src/template/pipeline/src/instruction.mjs +57 -12
  35. package/esm2022/src/template/pipeline/src/phases/any_cast.mjs +4 -3
  36. package/esm2022/src/template/pipeline/src/phases/apply_i18n_expressions.mjs +3 -3
  37. package/esm2022/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.mjs +2 -2
  38. package/esm2022/src/template/pipeline/src/phases/attribute_extraction.mjs +4 -4
  39. package/esm2022/src/template/pipeline/src/phases/binding_specialization.mjs +2 -2
  40. package/esm2022/src/template/pipeline/src/phases/chaining.mjs +2 -2
  41. package/esm2022/src/template/pipeline/src/phases/collapse_singleton_interpolations.mjs +31 -0
  42. package/esm2022/src/template/pipeline/src/phases/conditionals.mjs +9 -6
  43. package/esm2022/src/template/pipeline/src/phases/const_collection.mjs +2 -2
  44. package/esm2022/src/template/pipeline/src/phases/defer_configs.mjs +30 -0
  45. package/esm2022/src/template/pipeline/src/phases/defer_resolve_targets.mjs +93 -0
  46. package/esm2022/src/template/pipeline/src/phases/empty_elements.mjs +4 -4
  47. package/esm2022/src/template/pipeline/src/phases/expand_safe_reads.mjs +7 -4
  48. package/esm2022/src/template/pipeline/src/phases/format_i18n_params.mjs +114 -0
  49. package/esm2022/src/template/pipeline/src/phases/generate_advance.mjs +4 -4
  50. package/esm2022/src/template/pipeline/src/phases/generate_projection_def.mjs +2 -2
  51. package/esm2022/src/template/pipeline/src/phases/generate_variables.mjs +13 -6
  52. package/esm2022/src/template/pipeline/src/phases/has_const_expression_collection.mjs +28 -0
  53. package/esm2022/src/template/pipeline/src/phases/host_style_property_parsing.mjs +8 -2
  54. package/esm2022/src/template/pipeline/src/phases/i18n_const_collection.mjs +129 -7
  55. package/esm2022/src/template/pipeline/src/phases/i18n_message_extraction.mjs +4 -105
  56. package/esm2022/src/template/pipeline/src/phases/i18n_text_extraction.mjs +9 -6
  57. package/esm2022/src/template/pipeline/src/phases/icu_extraction.mjs +8 -5
  58. package/esm2022/src/template/pipeline/src/phases/local_refs.mjs +2 -2
  59. package/esm2022/src/template/pipeline/src/phases/namespace.mjs +2 -2
  60. package/esm2022/src/template/pipeline/src/phases/naming.mjs +27 -11
  61. package/esm2022/src/template/pipeline/src/phases/next_context_merging.mjs +2 -2
  62. package/esm2022/src/template/pipeline/src/phases/ng_container.mjs +2 -2
  63. package/esm2022/src/template/pipeline/src/phases/nonbindable.mjs +2 -2
  64. package/esm2022/src/template/pipeline/src/phases/nullish_coalescing.mjs +8 -2
  65. package/esm2022/src/template/pipeline/src/phases/ordering.mjs +46 -32
  66. package/esm2022/src/template/pipeline/src/phases/parse_extracted_styles.mjs +3 -3
  67. package/esm2022/src/template/pipeline/src/phases/phase_remove_content_selectors.mjs +9 -9
  68. package/esm2022/src/template/pipeline/src/phases/pipe_creation.mjs +23 -6
  69. package/esm2022/src/template/pipeline/src/phases/pipe_variadic.mjs +7 -3
  70. package/esm2022/src/template/pipeline/src/phases/propagate_i18n_blocks.mjs +2 -2
  71. package/esm2022/src/template/pipeline/src/phases/propagate_i18n_placeholders.mjs +61 -0
  72. package/esm2022/src/template/pipeline/src/phases/pure_function_extraction.mjs +3 -2
  73. package/esm2022/src/template/pipeline/src/phases/pure_literal_structures.mjs +4 -4
  74. package/esm2022/src/template/pipeline/src/phases/reify.mjs +77 -26
  75. package/esm2022/src/template/pipeline/src/phases/remove_empty_bindings.mjs +5 -2
  76. package/esm2022/src/template/pipeline/src/phases/repeater_derived_vars.mjs +45 -0
  77. package/esm2022/src/template/pipeline/src/phases/resolve_contexts.mjs +7 -3
  78. package/esm2022/src/template/pipeline/src/phases/resolve_dollar_event.mjs +5 -5
  79. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_element_placeholders.mjs +109 -0
  80. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_expression_placeholders.mjs +58 -0
  81. package/esm2022/src/template/pipeline/src/phases/resolve_names.mjs +4 -3
  82. package/esm2022/src/template/pipeline/src/phases/resolve_sanitizers.mjs +5 -5
  83. package/esm2022/src/template/pipeline/src/phases/save_restore_view.mjs +16 -11
  84. package/esm2022/src/template/pipeline/src/phases/slot_allocation.mjs +5 -30
  85. package/esm2022/src/template/pipeline/src/phases/style_binding_specialization.mjs +3 -3
  86. package/esm2022/src/template/pipeline/src/phases/temporary_variables.mjs +3 -3
  87. package/esm2022/src/template/pipeline/src/phases/track_fn_generation.mjs +49 -0
  88. package/esm2022/src/template/pipeline/src/phases/track_fn_optimization.mjs +81 -0
  89. package/esm2022/src/template/pipeline/src/phases/track_variables.mjs +36 -0
  90. package/esm2022/src/template/pipeline/src/phases/var_counting.mjs +37 -4
  91. package/esm2022/src/template/pipeline/src/phases/variable_optimization.mjs +47 -7
  92. package/esm2022/src/template/pipeline/src/phases/wrap_icus.mjs +2 -2
  93. package/esm2022/src/template/pipeline/src/util/elements.mjs +6 -6
  94. package/esm2022/src/version.mjs +1 -1
  95. package/fesm2022/compiler.mjs +2004 -1048
  96. package/fesm2022/compiler.mjs.map +1 -1
  97. package/index.d.ts +45 -60
  98. package/package.json +3 -3
  99. package/esm2022/src/template/pipeline/src/phases/align_pipe_variadic_var_offset.mjs +0 -42
  100. package/esm2022/src/template/pipeline/src/phases/has_const_trait_collection.mjs +0 -34
  101. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_placeholders.mjs +0 -288
@@ -1,4 +1,5 @@
1
1
  /**
2
+ *
2
3
  * @license
3
4
  * Copyright Google LLC All Rights Reserved.
4
5
  *
@@ -8,105 +9,123 @@
8
9
  import * as o from '../../../../src/output/output_ast';
9
10
  import * as ir from '../ir';
10
11
  import { CompilationJobKind as Kind } from './compilation';
11
- import { phaseAlignPipeVariadicVarOffset } from './phases/align_pipe_variadic_var_offset';
12
- import { phaseFindAnyCasts } from './phases/any_cast';
13
- import { phaseApplyI18nExpressions } from './phases/apply_i18n_expressions';
14
- import { phaseAssignI18nSlotDependencies } from './phases/assign_i18n_slot_dependencies';
15
- import { phaseAttributeExtraction } from './phases/attribute_extraction';
16
- import { phaseBindingSpecialization } from './phases/binding_specialization';
17
- import { phaseChaining } from './phases/chaining';
18
- import { phaseConditionals } from './phases/conditionals';
19
- import { phaseConstCollection } from './phases/const_collection';
20
- import { phaseEmptyElements } from './phases/empty_elements';
21
- import { phaseExpandSafeReads } from './phases/expand_safe_reads';
22
- import { phaseGenerateAdvance } from './phases/generate_advance';
23
- import { phaseGenerateProjectionDef } from './phases/generate_projection_def';
24
- import { phaseGenerateVariables } from './phases/generate_variables';
25
- import { phaseConstTraitCollection } from './phases/has_const_trait_collection';
26
- import { phaseHostStylePropertyParsing } from './phases/host_style_property_parsing';
27
- import { phaseI18nConstCollection } from './phases/i18n_const_collection';
28
- import { phaseI18nMessageExtraction } from './phases/i18n_message_extraction';
29
- import { phaseI18nTextExtraction } from './phases/i18n_text_extraction';
30
- import { phaseIcuExtraction } from './phases/icu_extraction';
31
- import { phaseLocalRefs } from './phases/local_refs';
32
- import { phaseNamespace } from './phases/namespace';
33
- import { phaseNaming } from './phases/naming';
34
- import { phaseMergeNextContext } from './phases/next_context_merging';
35
- import { phaseNgContainer } from './phases/ng_container';
36
- import { phaseNonbindable } from './phases/nonbindable';
37
- import { phaseNullishCoalescing } from './phases/nullish_coalescing';
38
- import { phaseOrdering } from './phases/ordering';
39
- import { phaseParseExtractedStyles } from './phases/parse_extracted_styles';
40
- import { phaseRemoveContentSelectors } from './phases/phase_remove_content_selectors';
41
- import { phasePipeCreation } from './phases/pipe_creation';
42
- import { phasePipeVariadic } from './phases/pipe_variadic';
43
- import { phasePropagateI18nBlocks } from './phases/propagate_i18n_blocks';
44
- import { phasePureFunctionExtraction } from './phases/pure_function_extraction';
45
- import { phasePureLiteralStructures } from './phases/pure_literal_structures';
46
- import { phaseReify } from './phases/reify';
47
- import { phaseRemoveEmptyBindings } from './phases/remove_empty_bindings';
48
- import { phaseResolveContexts } from './phases/resolve_contexts';
49
- import { phaseResolveDollarEvent } from './phases/resolve_dollar_event';
50
- import { phaseResolveI18nPlaceholders } from './phases/resolve_i18n_placeholders';
51
- import { phaseResolveNames } from './phases/resolve_names';
52
- import { phaseResolveSanitizers } from './phases/resolve_sanitizers';
53
- import { phaseSaveRestoreView } from './phases/save_restore_view';
54
- import { phaseSlotAllocation } from './phases/slot_allocation';
55
- import { phaseStyleBindingSpecialization } from './phases/style_binding_specialization';
56
- import { phaseTemporaryVariables } from './phases/temporary_variables';
57
- import { phaseVarCounting } from './phases/var_counting';
58
- import { phaseVariableOptimization } from './phases/variable_optimization';
59
- import { phaseWrapIcus } from './phases/wrap_icus';
12
+ import { deleteAnyCasts } from './phases/any_cast';
13
+ import { applyI18nExpressions } from './phases/apply_i18n_expressions';
14
+ import { assignI18nSlotDependencies } from './phases/assign_i18n_slot_dependencies';
15
+ import { extractAttributes } from './phases/attribute_extraction';
16
+ import { specializeBindings } from './phases/binding_specialization';
17
+ import { chain } from './phases/chaining';
18
+ import { collapseSingletonInterpolations } from './phases/collapse_singleton_interpolations';
19
+ import { generateConditionalExpressions } from './phases/conditionals';
20
+ import { collectElementConsts } from './phases/const_collection';
21
+ import { configureDeferInstructions } from './phases/defer_configs';
22
+ import { resolveDeferTargetNames } from './phases/defer_resolve_targets';
23
+ import { collapseEmptyInstructions } from './phases/empty_elements';
24
+ import { expandSafeReads } from './phases/expand_safe_reads';
25
+ import { formatI18nParams } from './phases/format_i18n_params';
26
+ import { generateAdvance } from './phases/generate_advance';
27
+ import { generateProjectionDefs } from './phases/generate_projection_def';
28
+ import { generateVariables } from './phases/generate_variables';
29
+ import { collectConstExpressions } from './phases/has_const_expression_collection';
30
+ import { parseHostStyleProperties } from './phases/host_style_property_parsing';
31
+ import { collectI18nConsts } from './phases/i18n_const_collection';
32
+ import { extractI18nMessages } from './phases/i18n_message_extraction';
33
+ import { extractI18nText } from './phases/i18n_text_extraction';
34
+ import { extractI18nICUs } from './phases/icu_extraction';
35
+ import { liftLocalRefs } from './phases/local_refs';
36
+ import { emitNamespaceChanges } from './phases/namespace';
37
+ import { nameFunctionsAndVariables } from './phases/naming';
38
+ import { mergeNextContextExpressions } from './phases/next_context_merging';
39
+ import { generateNgContainerOps } from './phases/ng_container';
40
+ import { disableBindings } from './phases/nonbindable';
41
+ import { generateNullishCoalesceExpressions } from './phases/nullish_coalescing';
42
+ import { orderOps } from './phases/ordering';
43
+ import { parseExtractedStyles } from './phases/parse_extracted_styles';
44
+ import { removeContentSelectors } from './phases/phase_remove_content_selectors';
45
+ import { createPipes } from './phases/pipe_creation';
46
+ import { createVariadicPipes } from './phases/pipe_variadic';
47
+ import { propagateI18nBlocks } from './phases/propagate_i18n_blocks';
48
+ import { propogateI18nPlaceholders } from './phases/propagate_i18n_placeholders';
49
+ import { extractPureFunctions } from './phases/pure_function_extraction';
50
+ import { generatePureLiteralStructures } from './phases/pure_literal_structures';
51
+ import { reify } from './phases/reify';
52
+ import { removeEmptyBindings } from './phases/remove_empty_bindings';
53
+ import { generateRepeaterDerivedVars } from './phases/repeater_derived_vars';
54
+ import { resolveContexts } from './phases/resolve_contexts';
55
+ import { resolveDollarEvent } from './phases/resolve_dollar_event';
56
+ import { resolveI18nElementPlaceholders } from './phases/resolve_i18n_element_placeholders';
57
+ import { resolveI18nExpressionPlaceholders } from './phases/resolve_i18n_expression_placeholders';
58
+ import { resolveNames } from './phases/resolve_names';
59
+ import { resolveSanitizers } from './phases/resolve_sanitizers';
60
+ import { saveAndRestoreView } from './phases/save_restore_view';
61
+ import { allocateSlots } from './phases/slot_allocation';
62
+ import { specializeStyleBindings } from './phases/style_binding_specialization';
63
+ import { generateTemporaryVariables } from './phases/temporary_variables';
64
+ import { generateTrackFns } from './phases/track_fn_generation';
65
+ import { optimizeTrackFns } from './phases/track_fn_optimization';
66
+ import { generateTrackVariables } from './phases/track_variables';
67
+ import { countVariables } from './phases/var_counting';
68
+ import { optimizeVariables } from './phases/variable_optimization';
69
+ import { wrapI18nIcus } from './phases/wrap_icus';
60
70
  const phases = [
61
- { kind: Kind.Tmpl, fn: phaseRemoveContentSelectors },
62
- { kind: Kind.Host, fn: phaseHostStylePropertyParsing },
63
- { kind: Kind.Tmpl, fn: phaseNamespace },
64
- { kind: Kind.Both, fn: phaseStyleBindingSpecialization },
65
- { kind: Kind.Both, fn: phaseBindingSpecialization },
66
- { kind: Kind.Tmpl, fn: phasePropagateI18nBlocks },
67
- { kind: Kind.Tmpl, fn: phaseWrapIcus },
68
- { kind: Kind.Both, fn: phaseAttributeExtraction },
69
- { kind: Kind.Both, fn: phaseParseExtractedStyles },
70
- { kind: Kind.Tmpl, fn: phaseRemoveEmptyBindings },
71
- { kind: Kind.Tmpl, fn: phaseConditionals },
72
- { kind: Kind.Tmpl, fn: phasePipeCreation },
73
- { kind: Kind.Tmpl, fn: phaseI18nTextExtraction },
74
- { kind: Kind.Tmpl, fn: phaseIcuExtraction },
75
- { kind: Kind.Tmpl, fn: phaseApplyI18nExpressions },
76
- { kind: Kind.Tmpl, fn: phasePipeVariadic },
77
- { kind: Kind.Both, fn: phasePureLiteralStructures },
78
- { kind: Kind.Tmpl, fn: phaseGenerateProjectionDef },
79
- { kind: Kind.Tmpl, fn: phaseGenerateVariables },
80
- { kind: Kind.Tmpl, fn: phaseSaveRestoreView },
81
- { kind: Kind.Tmpl, fn: phaseFindAnyCasts },
82
- { kind: Kind.Both, fn: phaseResolveDollarEvent },
83
- { kind: Kind.Both, fn: phaseResolveNames },
84
- { kind: Kind.Both, fn: phaseResolveContexts },
85
- { kind: Kind.Tmpl, fn: phaseResolveSanitizers },
86
- { kind: Kind.Tmpl, fn: phaseLocalRefs },
87
- { kind: Kind.Both, fn: phaseNullishCoalescing },
88
- { kind: Kind.Both, fn: phaseExpandSafeReads },
89
- { kind: Kind.Both, fn: phaseTemporaryVariables },
90
- { kind: Kind.Tmpl, fn: phaseSlotAllocation },
91
- { kind: Kind.Tmpl, fn: phaseResolveI18nPlaceholders },
92
- { kind: Kind.Tmpl, fn: phaseI18nMessageExtraction },
93
- { kind: Kind.Tmpl, fn: phaseI18nConstCollection },
94
- { kind: Kind.Tmpl, fn: phaseConstTraitCollection },
95
- { kind: Kind.Both, fn: phaseConstCollection },
96
- { kind: Kind.Tmpl, fn: phaseAssignI18nSlotDependencies },
97
- { kind: Kind.Both, fn: phaseVarCounting },
98
- { kind: Kind.Tmpl, fn: phaseGenerateAdvance },
99
- { kind: Kind.Both, fn: phaseVariableOptimization },
100
- { kind: Kind.Both, fn: phaseNaming },
101
- { kind: Kind.Tmpl, fn: phaseMergeNextContext },
102
- { kind: Kind.Tmpl, fn: phaseNgContainer },
103
- { kind: Kind.Tmpl, fn: phaseEmptyElements },
104
- { kind: Kind.Tmpl, fn: phaseNonbindable },
105
- { kind: Kind.Both, fn: phasePureFunctionExtraction },
106
- { kind: Kind.Tmpl, fn: phaseAlignPipeVariadicVarOffset },
107
- { kind: Kind.Both, fn: phaseOrdering },
108
- { kind: Kind.Both, fn: phaseReify },
109
- { kind: Kind.Both, fn: phaseChaining },
71
+ { kind: Kind.Tmpl, fn: removeContentSelectors },
72
+ { kind: Kind.Host, fn: parseHostStyleProperties },
73
+ { kind: Kind.Tmpl, fn: emitNamespaceChanges },
74
+ { kind: Kind.Both, fn: specializeStyleBindings },
75
+ { kind: Kind.Both, fn: specializeBindings },
76
+ { kind: Kind.Tmpl, fn: propagateI18nBlocks },
77
+ { kind: Kind.Tmpl, fn: wrapI18nIcus },
78
+ { kind: Kind.Both, fn: extractAttributes },
79
+ { kind: Kind.Both, fn: parseExtractedStyles },
80
+ { kind: Kind.Tmpl, fn: removeEmptyBindings },
81
+ { kind: Kind.Both, fn: collapseSingletonInterpolations },
82
+ { kind: Kind.Both, fn: orderOps },
83
+ { kind: Kind.Tmpl, fn: generateConditionalExpressions },
84
+ { kind: Kind.Tmpl, fn: createPipes },
85
+ { kind: Kind.Tmpl, fn: configureDeferInstructions },
86
+ { kind: Kind.Tmpl, fn: extractI18nText },
87
+ { kind: Kind.Tmpl, fn: extractI18nICUs },
88
+ { kind: Kind.Tmpl, fn: applyI18nExpressions },
89
+ { kind: Kind.Tmpl, fn: createVariadicPipes },
90
+ { kind: Kind.Both, fn: generatePureLiteralStructures },
91
+ { kind: Kind.Tmpl, fn: generateProjectionDefs },
92
+ { kind: Kind.Tmpl, fn: generateVariables },
93
+ { kind: Kind.Tmpl, fn: saveAndRestoreView },
94
+ { kind: Kind.Tmpl, fn: deleteAnyCasts },
95
+ { kind: Kind.Both, fn: resolveDollarEvent },
96
+ { kind: Kind.Tmpl, fn: generateRepeaterDerivedVars },
97
+ { kind: Kind.Tmpl, fn: generateTrackVariables },
98
+ { kind: Kind.Both, fn: resolveNames },
99
+ { kind: Kind.Tmpl, fn: resolveDeferTargetNames },
100
+ { kind: Kind.Tmpl, fn: optimizeTrackFns },
101
+ { kind: Kind.Both, fn: resolveContexts },
102
+ { kind: Kind.Tmpl, fn: resolveSanitizers },
103
+ { kind: Kind.Tmpl, fn: liftLocalRefs },
104
+ { kind: Kind.Both, fn: generateNullishCoalesceExpressions },
105
+ { kind: Kind.Both, fn: expandSafeReads },
106
+ { kind: Kind.Both, fn: generateTemporaryVariables },
107
+ { kind: Kind.Tmpl, fn: allocateSlots },
108
+ { kind: Kind.Tmpl, fn: extractI18nMessages },
109
+ { kind: Kind.Tmpl, fn: resolveI18nElementPlaceholders },
110
+ { kind: Kind.Tmpl, fn: resolveI18nExpressionPlaceholders },
111
+ { kind: Kind.Tmpl, fn: propogateI18nPlaceholders },
112
+ { kind: Kind.Tmpl, fn: formatI18nParams },
113
+ { kind: Kind.Tmpl, fn: generateTrackFns },
114
+ { kind: Kind.Tmpl, fn: collectI18nConsts },
115
+ { kind: Kind.Tmpl, fn: collectConstExpressions },
116
+ { kind: Kind.Both, fn: collectElementConsts },
117
+ { kind: Kind.Tmpl, fn: assignI18nSlotDependencies },
118
+ { kind: Kind.Both, fn: countVariables },
119
+ { kind: Kind.Tmpl, fn: generateAdvance },
120
+ { kind: Kind.Both, fn: optimizeVariables },
121
+ { kind: Kind.Both, fn: nameFunctionsAndVariables },
122
+ { kind: Kind.Tmpl, fn: mergeNextContextExpressions },
123
+ { kind: Kind.Tmpl, fn: generateNgContainerOps },
124
+ { kind: Kind.Tmpl, fn: collapseEmptyInstructions },
125
+ { kind: Kind.Tmpl, fn: disableBindings },
126
+ { kind: Kind.Both, fn: extractPureFunctions },
127
+ { kind: Kind.Both, fn: reify },
128
+ { kind: Kind.Both, fn: chain },
110
129
  ];
111
130
  /**
112
131
  * Run all transformation phases in the correct order against a compilation job. After this
@@ -214,4 +233,4 @@ export function emitHostBindingFunction(job) {
214
233
  ],
215
234
  /* type */ undefined, /* sourceSpan */ undefined, job.root.fnName);
216
235
  }
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy90ZW1wbGF0ZS9waXBlbGluZS9zcmMvZW1pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssQ0FBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRXZELE9BQU8sS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTVCLE9BQU8sRUFBaUIsa0JBQWtCLElBQUksSUFBSSxFQUF5RixNQUFNLGVBQWUsQ0FBQztBQUVqSyxPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUN2RixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUN2RSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDNUUsT0FBTyxF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QUN6RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIG8gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL291dHB1dC9vdXRwdXRfYXN0JztcbmltcG9ydCB7Q29uc3RhbnRQb29sfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudF9wb29sJztcbmltcG9ydCAqIGFzIGlyIGZyb20gJy4uL2lyJztcblxuaW1wb3J0IHtDb21waWxhdGlvbkpvYiwgQ29tcGlsYXRpb25Kb2JLaW5kIGFzIEtpbmQsIHR5cGUgQ29tcG9uZW50Q29tcGlsYXRpb25Kb2IsIHR5cGUgSG9zdEJpbmRpbmdDb21waWxhdGlvbkpvYiwgdHlwZSBWaWV3Q29tcGlsYXRpb25Vbml0fSBmcm9tICcuL2NvbXBpbGF0aW9uJztcblxuaW1wb3J0IHtwaGFzZUFsaWduUGlwZVZhcmlhZGljVmFyT2Zmc2V0fSBmcm9tICcuL3BoYXNlcy9hbGlnbl9waXBlX3ZhcmlhZGljX3Zhcl9vZmZzZXQnO1xuaW1wb3J0IHtwaGFzZUZpbmRBbnlDYXN0c30gZnJvbSAnLi9waGFzZXMvYW55X2Nhc3QnO1xuaW1wb3J0IHtwaGFzZUFwcGx5STE4bkV4cHJlc3Npb25zfSBmcm9tICcuL3BoYXNlcy9hcHBseV9pMThuX2V4cHJlc3Npb25zJztcbmltcG9ydCB7cGhhc2VBc3NpZ25JMThuU2xvdERlcGVuZGVuY2llc30gZnJvbSAnLi9waGFzZXMvYXNzaWduX2kxOG5fc2xvdF9kZXBlbmRlbmNpZXMnO1xuaW1wb3J0IHtwaGFzZUF0dHJpYnV0ZUV4dHJhY3Rpb259IGZyb20gJy4vcGhhc2VzL2F0dHJpYnV0ZV9leHRyYWN0aW9uJztcbmltcG9ydCB7cGhhc2VCaW5kaW5nU3BlY2lhbGl6YXRpb259IGZyb20gJy4vcGhhc2VzL2JpbmRpbmdfc3BlY2lhbGl6YXRpb24nO1xuaW1wb3J0IHtwaGFzZUNoYWluaW5nfSBmcm9tICcuL3BoYXNlcy9jaGFpbmluZyc7XG5pbXBvcnQge3BoYXNlQ29uZGl0aW9uYWxzfSBmcm9tICcuL3BoYXNlcy9jb25kaXRpb25hbHMnO1xuaW1wb3J0IHtwaGFzZUNvbnN0Q29sbGVjdGlvbn0gZnJvbSAnLi9waGFzZXMvY29uc3RfY29sbGVjdGlvbic7XG5pbXBvcnQge3BoYXNlRW1wdHlFbGVtZW50c30gZnJvbSAnLi9waGFzZXMvZW1wdHlfZWxlbWVudHMnO1xuaW1wb3J0IHtwaGFzZUV4cGFuZFNhZmVSZWFkc30gZnJvbSAnLi9waGFzZXMvZXhwYW5kX3NhZmVfcmVhZHMnO1xuaW1wb3J0IHtwaGFzZUdlbmVyYXRlQWR2YW5jZX0gZnJvbSAnLi9waGFzZXMvZ2VuZXJhdGVfYWR2YW5jZSc7XG5pbXBvcnQge3BoYXNlR2VuZXJhdGVQcm9qZWN0aW9uRGVmfSBmcm9tICcuL3BoYXNlcy9nZW5lcmF0ZV9wcm9qZWN0aW9uX2RlZic7XG5pbXBvcnQge3BoYXNlR2VuZXJhdGVWYXJpYWJsZXN9IGZyb20gJy4vcGhhc2VzL2dlbmVyYXRlX3ZhcmlhYmxlcyc7XG5pbXBvcnQge3BoYXNlQ29uc3RUcmFpdENvbGxlY3Rpb259IGZyb20gJy4vcGhhc2VzL2hhc19jb25zdF90cmFpdF9jb2xsZWN0aW9uJztcbmltcG9ydCB7cGhhc2VIb3N0U3R5bGVQcm9wZXJ0eVBhcnNpbmd9IGZyb20gJy4vcGhhc2VzL2hvc3Rfc3R5bGVfcHJvcGVydHlfcGFyc2luZyc7XG5pbXBvcnQge3BoYXNlSTE4bkNvbnN0Q29sbGVjdGlvbn0gZnJvbSAnLi9waGFzZXMvaTE4bl9jb25zdF9jb2xsZWN0aW9uJztcbmltcG9ydCB7cGhhc2VJMThuTWVzc2FnZUV4dHJhY3Rpb259IGZyb20gJy4vcGhhc2VzL2kxOG5fbWVzc2FnZV9leHRyYWN0aW9uJztcbmltcG9ydCB7cGhhc2VJMThuVGV4dEV4dHJhY3Rpb259IGZyb20gJy4vcGhhc2VzL2kxOG5fdGV4dF9leHRyYWN0aW9uJztcbmltcG9ydCB7cGhhc2VJY3VFeHRyYWN0aW9ufSBmcm9tICcuL3BoYXNlcy9pY3VfZXh0cmFjdGlvbic7XG5pbXBvcnQge3BoYXNlTG9jYWxSZWZzfSBmcm9tICcuL3BoYXNlcy9sb2NhbF9yZWZzJztcbmltcG9ydCB7cGhhc2VOYW1lc3BhY2V9IGZyb20gJy4vcGhhc2VzL25hbWVzcGFjZSc7XG5pbXBvcnQge3BoYXNlTmFtaW5nfSBmcm9tICcuL3BoYXNlcy9uYW1pbmcnO1xuaW1wb3J0IHtwaGFzZU1lcmdlTmV4dENvbnRleHR9IGZyb20gJy4vcGhhc2VzL25leHRfY29udGV4dF9tZXJnaW5nJztcbmltcG9ydCB7cGhhc2VOZ0NvbnRhaW5lcn0gZnJvbSAnLi9waGFzZXMvbmdfY29udGFpbmVyJztcbmltcG9ydCB7cGhhc2VOb25iaW5kYWJsZX0gZnJvbSAnLi9waGFzZXMvbm9uYmluZGFibGUnO1xuaW1wb3J0IHtwaGFzZU51bGxpc2hDb2FsZXNjaW5nfSBmcm9tICcuL3BoYXNlcy9udWxsaXNoX2NvYWxlc2NpbmcnO1xuaW1wb3J0IHtwaGFzZU9yZGVyaW5nfSBmcm9tICcuL3BoYXNlcy9vcmRlcmluZyc7XG5pbXBvcnQge3BoYXNlUGFyc2VFeHRyYWN0ZWRTdHlsZXN9IGZyb20gJy4vcGhhc2VzL3BhcnNlX2V4dHJhY3RlZF9zdHlsZXMnO1xuaW1wb3J0IHtwaGFzZVJlbW92ZUNvbnRlbnRTZWxlY3RvcnN9IGZyb20gJy4vcGhhc2VzL3BoYXNlX3JlbW92ZV9jb250ZW50X3NlbGVjdG9ycyc7XG5pbXBvcnQge3BoYXNlUGlwZUNyZWF0aW9ufSBmcm9tICcuL3BoYXNlcy9waXBlX2NyZWF0aW9uJztcbmltcG9ydCB7cGhhc2VQaXBlVmFyaWFkaWN9IGZyb20gJy4vcGhhc2VzL3BpcGVfdmFyaWFkaWMnO1xuaW1wb3J0IHtwaGFzZVByb3BhZ2F0ZUkxOG5CbG9ja3N9IGZyb20gJy4vcGhhc2VzL3Byb3BhZ2F0ZV9pMThuX2Jsb2Nrcyc7XG5pbXBvcnQge3BoYXNlUHVyZUZ1bmN0aW9uRXh0cmFjdGlvbn0gZnJvbSAnLi9waGFzZXMvcHVyZV9mdW5jdGlvbl9leHRyYWN0aW9uJztcbmltcG9ydCB7cGhhc2VQdXJlTGl0ZXJhbFN0cnVjdHVyZXN9IGZyb20gJy4vcGhhc2VzL3B1cmVfbGl0ZXJhbF9zdHJ1Y3R1cmVzJztcbmltcG9ydCB7cGhhc2VSZWlmeX0gZnJvbSAnLi9waGFzZXMvcmVpZnknO1xuaW1wb3J0IHtwaGFzZVJlbW92ZUVtcHR5QmluZGluZ3N9IGZyb20gJy4vcGhhc2VzL3JlbW92ZV9lbXB0eV9iaW5kaW5ncyc7XG5pbXBvcnQge3BoYXNlUmVzb2x2ZUNvbnRleHRzfSBmcm9tICcuL3BoYXNlcy9yZXNvbHZlX2NvbnRleHRzJztcbmltcG9ydCB7cGhhc2VSZXNvbHZlRG9sbGFyRXZlbnR9IGZyb20gJy4vcGhhc2VzL3Jlc29sdmVfZG9sbGFyX2V2ZW50JztcbmltcG9ydCB7cGhhc2VSZXNvbHZlSTE4blBsYWNlaG9sZGVyc30gZnJvbSAnLi9waGFzZXMvcmVzb2x2ZV9pMThuX3BsYWNlaG9sZGVycyc7XG5pbXBvcnQge3BoYXNlUmVzb2x2ZU5hbWVzfSBmcm9tICcuL3BoYXNlcy9yZXNvbHZlX25hbWVzJztcbmltcG9ydCB7cGhhc2VSZXNvbHZlU2FuaXRpemVyc30gZnJvbSAnLi9waGFzZXMvcmVzb2x2ZV9zYW5pdGl6ZXJzJztcbmltcG9ydCB7cGhhc2VTYXZlUmVzdG9yZVZpZXd9IGZyb20gJy4vcGhhc2VzL3NhdmVfcmVzdG9yZV92aWV3JztcbmltcG9ydCB7cGhhc2VTbG90QWxsb2NhdGlvbn0gZnJvbSAnLi9waGFzZXMvc2xvdF9hbGxvY2F0aW9uJztcbmltcG9ydCB7cGhhc2VTdHlsZUJpbmRpbmdTcGVjaWFsaXphdGlvbn0gZnJvbSAnLi9waGFzZXMvc3R5bGVfYmluZGluZ19zcGVjaWFsaXphdGlvbic7XG5pbXBvcnQge3BoYXNlVGVtcG9yYXJ5VmFyaWFibGVzfSBmcm9tICcuL3BoYXNlcy90ZW1wb3JhcnlfdmFyaWFibGVzJztcbmltcG9ydCB7cGhhc2VWYXJDb3VudGluZ30gZnJvbSAnLi9waGFzZXMvdmFyX2NvdW50aW5nJztcbmltcG9ydCB7cGhhc2VWYXJpYWJsZU9wdGltaXphdGlvbn0gZnJvbSAnLi9waGFzZXMvdmFyaWFibGVfb3B0aW1pemF0aW9uJztcbmltcG9ydCB7cGhhc2VXcmFwSWN1c30gZnJvbSAnLi9waGFzZXMvd3JhcF9pY3VzJztcblxudHlwZSBQaGFzZSA9IHtcbiAgZm46IChqb2I6IENvbXBpbGF0aW9uSm9iKSA9PiB2b2lkOyBraW5kOiBLaW5kLkJvdGggfCBLaW5kLkhvc3QgfCBLaW5kLlRtcGw7XG59fHtcbiAgZm46IChqb2I6IENvbXBvbmVudENvbXBpbGF0aW9uSm9iKSA9PiB2b2lkO1xuICBraW5kOiBLaW5kLlRtcGw7XG59XG58e1xuICBmbjogKGpvYjogSG9zdEJpbmRpbmdDb21waWxhdGlvbkpvYikgPT4gdm9pZDtcbiAga2luZDogS2luZC5Ib3N0O1xufTtcblxuY29uc3QgcGhhc2VzOiBQaGFzZVtdID0gW1xuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VSZW1vdmVDb250ZW50U2VsZWN0b3JzfSxcbiAge2tpbmQ6IEtpbmQuSG9zdCwgZm46IHBoYXNlSG9zdFN0eWxlUHJvcGVydHlQYXJzaW5nfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlTmFtZXNwYWNlfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHBoYXNlU3R5bGVCaW5kaW5nU3BlY2lhbGl6YXRpb259LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VCaW5kaW5nU3BlY2lhbGl6YXRpb259LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VQcm9wYWdhdGVJMThuQmxvY2tzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlV3JhcEljdXN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VBdHRyaWJ1dGVFeHRyYWN0aW9ufSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHBoYXNlUGFyc2VFeHRyYWN0ZWRTdHlsZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VSZW1vdmVFbXB0eUJpbmRpbmdzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlQ29uZGl0aW9uYWxzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlUGlwZUNyZWF0aW9ufSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlSTE4blRleHRFeHRyYWN0aW9ufSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlSWN1RXh0cmFjdGlvbn0sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBwaGFzZUFwcGx5STE4bkV4cHJlc3Npb25zfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlUGlwZVZhcmlhZGljfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHBoYXNlUHVyZUxpdGVyYWxTdHJ1Y3R1cmVzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlR2VuZXJhdGVQcm9qZWN0aW9uRGVmfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlR2VuZXJhdGVWYXJpYWJsZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VTYXZlUmVzdG9yZVZpZXd9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VGaW5kQW55Q2FzdHN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VSZXNvbHZlRG9sbGFyRXZlbnR9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VSZXNvbHZlTmFtZXN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VSZXNvbHZlQ29udGV4dHN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VSZXNvbHZlU2FuaXRpemVyc30sICAvLyBUT0RPOiBydW4gaW4gYm90aFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VMb2NhbFJlZnN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VOdWxsaXNoQ29hbGVzY2luZ30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBwaGFzZUV4cGFuZFNhZmVSZWFkc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBwaGFzZVRlbXBvcmFyeVZhcmlhYmxlc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBwaGFzZVNsb3RBbGxvY2F0aW9ufSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlUmVzb2x2ZUkxOG5QbGFjZWhvbGRlcnN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VJMThuTWVzc2FnZUV4dHJhY3Rpb259LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VJMThuQ29uc3RDb2xsZWN0aW9ufSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlQ29uc3RUcmFpdENvbGxlY3Rpb259LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VDb25zdENvbGxlY3Rpb259LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VBc3NpZ25JMThuU2xvdERlcGVuZGVuY2llc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBwaGFzZVZhckNvdW50aW5nfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlR2VuZXJhdGVBZHZhbmNlfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHBoYXNlVmFyaWFibGVPcHRpbWl6YXRpb259LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VOYW1pbmd9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VNZXJnZU5leHRDb250ZXh0fSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlTmdDb250YWluZXJ9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VFbXB0eUVsZW1lbnRzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlTm9uYmluZGFibGV9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VQdXJlRnVuY3Rpb25FeHRyYWN0aW9ufSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlQWxpZ25QaXBlVmFyaWFkaWNWYXJPZmZzZXR9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VPcmRlcmluZ30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBwaGFzZVJlaWZ5fSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHBoYXNlQ2hhaW5pbmd9LFxuXTtcblxuLyoqXG4gKiBSdW4gYWxsIHRyYW5zZm9ybWF0aW9uIHBoYXNlcyBpbiB0aGUgY29ycmVjdCBvcmRlciBhZ2FpbnN0IGEgY29tcGlsYXRpb24gam9iLiBBZnRlciB0aGlzXG4gKiBwcm9jZXNzaW5nLCB0aGUgY29tcGlsYXRpb24gc2hvdWxkIGJlIGluIGEgc3RhdGUgd2hlcmUgaXQgY2FuIGJlIGVtaXR0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm0oam9iOiBDb21waWxhdGlvbkpvYiwga2luZDogS2luZCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHBoYXNlIG9mIHBoYXNlcykge1xuICAgIGlmIChwaGFzZS5raW5kID09PSBraW5kIHx8IHBoYXNlLmtpbmQgPT09IEtpbmQuQm90aCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgYFBoYXNlYCBhYm92ZSBlbnN1cmVzIGl0IGlzIGltcG9zc2libGUgdG8gY2FsbCBhIHBoYXNlIHRoYXQgZG9lc24ndCBzdXBwb3J0IHRoZVxuICAgICAgLy8gam9iIGtpbmQuXG4gICAgICBwaGFzZS5mbihqb2IgYXMgQ29tcGlsYXRpb25Kb2IgJiBDb21wb25lbnRDb21waWxhdGlvbkpvYiAmIEhvc3RCaW5kaW5nQ29tcGlsYXRpb25Kb2IpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbXBpbGUgYWxsIHZpZXdzIGluIHRoZSBnaXZlbiBgQ29tcG9uZW50Q29tcGlsYXRpb25gIGludG8gdGhlIGZpbmFsIHRlbXBsYXRlIGZ1bmN0aW9uLCB3aGljaCBtYXlcbiAqIHJlZmVyZW5jZSBjb25zdGFudHMgZGVmaW5lZCBpbiBhIGBDb25zdGFudFBvb2xgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdFRlbXBsYXRlRm4odHBsOiBDb21wb25lbnRDb21waWxhdGlvbkpvYiwgcG9vbDogQ29uc3RhbnRQb29sKTogby5GdW5jdGlvbkV4cHIge1xuICBjb25zdCByb290Rm4gPSBlbWl0Vmlldyh0cGwucm9vdCk7XG4gIGVtaXRDaGlsZFZpZXdzKHRwbC5yb290LCBwb29sKTtcbiAgcmV0dXJuIHJvb3RGbjtcbn1cblxuZnVuY3Rpb24gZW1pdENoaWxkVmlld3MocGFyZW50OiBWaWV3Q29tcGlsYXRpb25Vbml0LCBwb29sOiBDb25zdGFudFBvb2wpOiB2b2lkIHtcbiAgZm9yIChjb25zdCB1bml0IG9mIHBhcmVudC5qb2IudW5pdHMpIHtcbiAgICBpZiAodW5pdC5wYXJlbnQgIT09IHBhcmVudC54cmVmKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBDaGlsZCB2aWV3cyBhcmUgZW1pdHRlZCBkZXB0aC1maXJzdC5cbiAgICBlbWl0Q2hpbGRWaWV3cyh1bml0LCBwb29sKTtcblxuICAgIGNvbnN0IHZpZXdGbiA9IGVtaXRWaWV3KHVuaXQpO1xuICAgIHBvb2wuc3RhdGVtZW50cy5wdXNoKHZpZXdGbi50b0RlY2xTdG10KHZpZXdGbi5uYW1lISkpO1xuICB9XG59XG5cbi8qKlxuICogRW1pdCBhIHRlbXBsYXRlIGZ1bmN0aW9uIGZvciBhbiBpbmRpdmlkdWFsIGBWaWV3Q29tcGlsYXRpb25gICh3aGljaCBtYXkgYmUgZWl0aGVyIHRoZSByb290IHZpZXdcbiAqIG9yIGFuIGVtYmVkZGVkIHZpZXcpLlxuICovXG5mdW5jdGlvbiBlbWl0Vmlldyh2aWV3OiBWaWV3Q29tcGlsYXRpb25Vbml0KTogby5GdW5jdGlvbkV4cHIge1xuICBpZiAodmlldy5mbk5hbWUgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbkVycm9yOiB2aWV3ICR7dmlldy54cmVmfSBpcyB1bm5hbWVkYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVTdGF0ZW1lbnRzOiBvLlN0YXRlbWVudFtdID0gW107XG4gIGZvciAoY29uc3Qgb3Agb2Ygdmlldy5jcmVhdGUpIHtcbiAgICBpZiAob3Aua2luZCAhPT0gaXIuT3BLaW5kLlN0YXRlbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb25FcnJvcjogZXhwZWN0ZWQgYWxsIGNyZWF0ZSBvcHMgdG8gaGF2ZSBiZWVuIGNvbXBpbGVkLCBidXQgZ290ICR7XG4gICAgICAgICAgaXIuT3BLaW5kW29wLmtpbmRdfWApO1xuICAgIH1cbiAgICBjcmVhdGVTdGF0ZW1lbnRzLnB1c2gob3Auc3RhdGVtZW50KTtcbiAgfVxuICBjb25zdCB1cGRhdGVTdGF0ZW1lbnRzOiBvLlN0YXRlbWVudFtdID0gW107XG4gIGZvciAoY29uc3Qgb3Agb2Ygdmlldy51cGRhdGUpIHtcbiAgICBpZiAob3Aua2luZCAhPT0gaXIuT3BLaW5kLlN0YXRlbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb25FcnJvcjogZXhwZWN0ZWQgYWxsIHVwZGF0ZSBvcHMgdG8gaGF2ZSBiZWVuIGNvbXBpbGVkLCBidXQgZ290ICR7XG4gICAgICAgICAgaXIuT3BLaW5kW29wLmtpbmRdfWApO1xuICAgIH1cbiAgICB1cGRhdGVTdGF0ZW1lbnRzLnB1c2gob3Auc3RhdGVtZW50KTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUNvbmQgPSBtYXliZUdlbmVyYXRlUmZCbG9jaygxLCBjcmVhdGVTdGF0ZW1lbnRzKTtcbiAgY29uc3QgdXBkYXRlQ29uZCA9IG1heWJlR2VuZXJhdGVSZkJsb2NrKDIsIHVwZGF0ZVN0YXRlbWVudHMpO1xuICByZXR1cm4gby5mbihcbiAgICAgIFtcbiAgICAgICAgbmV3IG8uRm5QYXJhbSgncmYnKSxcbiAgICAgICAgbmV3IG8uRm5QYXJhbSgnY3R4JyksXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAuLi5jcmVhdGVDb25kLFxuICAgICAgICAuLi51cGRhdGVDb25kLFxuICAgICAgXSxcbiAgICAgIC8qIHR5cGUgKi8gdW5kZWZpbmVkLCAvKiBzb3VyY2VTcGFuICovIHVuZGVmaW5lZCwgdmlldy5mbk5hbWUpO1xufVxuXG5mdW5jdGlvbiBtYXliZUdlbmVyYXRlUmZCbG9jayhmbGFnOiBudW1iZXIsIHN0YXRlbWVudHM6IG8uU3RhdGVtZW50W10pOiBvLlN0YXRlbWVudFtdIHtcbiAgaWYgKHN0YXRlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICBvLmlmU3RtdChcbiAgICAgICAgbmV3IG8uQmluYXJ5T3BlcmF0b3JFeHByKG8uQmluYXJ5T3BlcmF0b3IuQml0d2lzZUFuZCwgby52YXJpYWJsZSgncmYnKSwgby5saXRlcmFsKGZsYWcpKSxcbiAgICAgICAgc3RhdGVtZW50cyksXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0SG9zdEJpbmRpbmdGdW5jdGlvbihqb2I6IEhvc3RCaW5kaW5nQ29tcGlsYXRpb25Kb2IpOiBvLkZ1bmN0aW9uRXhwcnxudWxsIHtcbiAgaWYgKGpvYi5yb290LmZuTmFtZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IGhvc3QgYmluZGluZyBmdW5jdGlvbiBpcyB1bm5hbWVkYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVTdGF0ZW1lbnRzOiBvLlN0YXRlbWVudFtdID0gW107XG4gIGZvciAoY29uc3Qgb3Agb2Ygam9iLnJvb3QuY3JlYXRlKSB7XG4gICAgaWYgKG9wLmtpbmQgIT09IGlyLk9wS2luZC5TdGF0ZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IGV4cGVjdGVkIGFsbCBjcmVhdGUgb3BzIHRvIGhhdmUgYmVlbiBjb21waWxlZCwgYnV0IGdvdCAke1xuICAgICAgICAgIGlyLk9wS2luZFtvcC5raW5kXX1gKTtcbiAgICB9XG4gICAgY3JlYXRlU3RhdGVtZW50cy5wdXNoKG9wLnN0YXRlbWVudCk7XG4gIH1cbiAgY29uc3QgdXBkYXRlU3RhdGVtZW50czogby5TdGF0ZW1lbnRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wIG9mIGpvYi5yb290LnVwZGF0ZSkge1xuICAgIGlmIChvcC5raW5kICE9PSBpci5PcEtpbmQuU3RhdGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbkVycm9yOiBleHBlY3RlZCBhbGwgdXBkYXRlIG9wcyB0byBoYXZlIGJlZW4gY29tcGlsZWQsIGJ1dCBnb3QgJHtcbiAgICAgICAgICBpci5PcEtpbmRbb3Aua2luZF19YCk7XG4gICAgfVxuICAgIHVwZGF0ZVN0YXRlbWVudHMucHVzaChvcC5zdGF0ZW1lbnQpO1xuICB9XG5cbiAgaWYgKGNyZWF0ZVN0YXRlbWVudHMubGVuZ3RoID09PSAwICYmIHVwZGF0ZVN0YXRlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjcmVhdGVDb25kID0gbWF5YmVHZW5lcmF0ZVJmQmxvY2soMSwgY3JlYXRlU3RhdGVtZW50cyk7XG4gIGNvbnN0IHVwZGF0ZUNvbmQgPSBtYXliZUdlbmVyYXRlUmZCbG9jaygyLCB1cGRhdGVTdGF0ZW1lbnRzKTtcbiAgcmV0dXJuIG8uZm4oXG4gICAgICBbXG4gICAgICAgIG5ldyBvLkZuUGFyYW0oJ3JmJyksXG4gICAgICAgIG5ldyBvLkZuUGFyYW0oJ2N0eCcpLFxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgLi4uY3JlYXRlQ29uZCxcbiAgICAgICAgLi4udXBkYXRlQ29uZCxcbiAgICAgIF0sXG4gICAgICAvKiB0eXBlICovIHVuZGVmaW5lZCwgLyogc291cmNlU3BhbiAqLyB1bmRlZmluZWQsIGpvYi5yb290LmZuTmFtZSk7XG59XG4iXX0=
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy90ZW1wbGF0ZS9waXBlbGluZS9zcmMvZW1pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxLQUFLLENBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUV2RCxPQUFPLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU1QixPQUFPLEVBQWlCLGtCQUFrQixJQUFJLElBQUksRUFBeUYsTUFBTSxlQUFlLENBQUM7QUFFakssT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN4QyxPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRixPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFD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LEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICpcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgbyBmcm9tICcuLi8uLi8uLi8uLi9zcmMvb3V0cHV0L291dHB1dF9hc3QnO1xuaW1wb3J0IHtDb25zdGFudFBvb2x9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50X3Bvb2wnO1xuaW1wb3J0ICogYXMgaXIgZnJvbSAnLi4vaXInO1xuXG5pbXBvcnQge0NvbXBpbGF0aW9uSm9iLCBDb21waWxhdGlvbkpvYktpbmQgYXMgS2luZCwgdHlwZSBDb21wb25lbnRDb21waWxhdGlvbkpvYiwgdHlwZSBIb3N0QmluZGluZ0NvbXBpbGF0aW9uSm9iLCB0eXBlIFZpZXdDb21waWxhdGlvblVuaXR9IGZyb20gJy4vY29tcGlsYXRpb24nO1xuXG5pbXBvcnQge2RlbGV0ZUFueUNhc3RzfSBmcm9tICcuL3BoYXNlcy9hbnlfY2FzdCc7XG5pbXBvcnQge2FwcGx5STE4bkV4cHJlc3Npb25zfSBmcm9tICcuL3BoYXNlcy9hcHBseV9pMThuX2V4cHJlc3Npb25zJztcbmltcG9ydCB7YXNzaWduSTE4blNsb3REZXBlbmRlbmNpZXN9IGZyb20gJy4vcGhhc2VzL2Fzc2lnbl9pMThuX3Nsb3RfZGVwZW5kZW5jaWVzJztcbmltcG9ydCB7ZXh0cmFjdEF0dHJpYnV0ZXN9IGZyb20gJy4vcGhhc2VzL2F0dHJpYnV0ZV9leHRyYWN0aW9uJztcbmltcG9ydCB7c3BlY2lhbGl6ZUJpbmRpbmdzfSBmcm9tICcuL3BoYXNlcy9iaW5kaW5nX3NwZWNpYWxpemF0aW9uJztcbmltcG9ydCB7Y2hhaW59IGZyb20gJy4vcGhhc2VzL2NoYWluaW5nJztcbmltcG9ydCB7Y29sbGFwc2VTaW5nbGV0b25JbnRlcnBvbGF0aW9uc30gZnJvbSAnLi9waGFzZXMvY29sbGFwc2Vfc2luZ2xldG9uX2ludGVycG9sYXRpb25zJztcbmltcG9ydCB7Z2VuZXJhdGVDb25kaXRpb25hbEV4cHJlc3Npb25zfSBmcm9tICcuL3BoYXNlcy9jb25kaXRpb25hbHMnO1xuaW1wb3J0IHtjb2xsZWN0RWxlbWVudENvbnN0c30gZnJvbSAnLi9waGFzZXMvY29uc3RfY29sbGVjdGlvbic7XG5pbXBvcnQge2NvbmZpZ3VyZURlZmVySW5zdHJ1Y3Rpb25zfSBmcm9tICcuL3BoYXNlcy9kZWZlcl9jb25maWdzJztcbmltcG9ydCB7cmVzb2x2ZURlZmVyVGFyZ2V0TmFtZXN9IGZyb20gJy4vcGhhc2VzL2RlZmVyX3Jlc29sdmVfdGFyZ2V0cyc7XG5pbXBvcnQge2NvbGxhcHNlRW1wdHlJbnN0cnVjdGlvbnN9IGZyb20gJy4vcGhhc2VzL2VtcHR5X2VsZW1lbnRzJztcbmltcG9ydCB7ZXhwYW5kU2FmZVJlYWRzfSBmcm9tICcuL3BoYXNlcy9leHBhbmRfc2FmZV9yZWFkcyc7XG5pbXBvcnQge2Zvcm1hdEkxOG5QYXJhbXN9IGZyb20gJy4vcGhhc2VzL2Zvcm1hdF9pMThuX3BhcmFtcyc7XG5pbXBvcnQge2dlbmVyYXRlQWR2YW5jZX0gZnJvbSAnLi9waGFzZXMvZ2VuZXJhdGVfYWR2YW5jZSc7XG5pbXBvcnQge2dlbmVyYXRlUHJvamVjdGlvbkRlZnN9IGZyb20gJy4vcGhhc2VzL2dlbmVyYXRlX3Byb2plY3Rpb25fZGVmJztcbmltcG9ydCB7Z2VuZXJhdGVWYXJpYWJsZXN9IGZyb20gJy4vcGhhc2VzL2dlbmVyYXRlX3ZhcmlhYmxlcyc7XG5pbXBvcnQge2NvbGxlY3RDb25zdEV4cHJlc3Npb25zfSBmcm9tICcuL3BoYXNlcy9oYXNfY29uc3RfZXhwcmVzc2lvbl9jb2xsZWN0aW9uJztcbmltcG9ydCB7cGFyc2VIb3N0U3R5bGVQcm9wZXJ0aWVzfSBmcm9tICcuL3BoYXNlcy9ob3N0X3N0eWxlX3Byb3BlcnR5X3BhcnNpbmcnO1xuaW1wb3J0IHtjb2xsZWN0STE4bkNvbnN0c30gZnJvbSAnLi9waGFzZXMvaTE4bl9jb25zdF9jb2xsZWN0aW9uJztcbmltcG9ydCB7ZXh0cmFjdEkxOG5NZXNzYWdlc30gZnJvbSAnLi9waGFzZXMvaTE4bl9tZXNzYWdlX2V4dHJhY3Rpb24nO1xuaW1wb3J0IHtleHRyYWN0STE4blRleHR9IGZyb20gJy4vcGhhc2VzL2kxOG5fdGV4dF9leHRyYWN0aW9uJztcbmltcG9ydCB7ZXh0cmFjdEkxOG5JQ1VzfSBmcm9tICcuL3BoYXNlcy9pY3VfZXh0cmFjdGlvbic7XG5pbXBvcnQge2xpZnRMb2NhbFJlZnN9IGZyb20gJy4vcGhhc2VzL2xvY2FsX3JlZnMnO1xuaW1wb3J0IHtlbWl0TmFtZXNwYWNlQ2hhbmdlc30gZnJvbSAnLi9waGFzZXMvbmFtZXNwYWNlJztcbmltcG9ydCB7bmFtZUZ1bmN0aW9uc0FuZFZhcmlhYmxlc30gZnJvbSAnLi9waGFzZXMvbmFtaW5nJztcbmltcG9ydCB7bWVyZ2VOZXh0Q29udGV4dEV4cHJlc3Npb25zfSBmcm9tICcuL3BoYXNlcy9uZXh0X2NvbnRleHRfbWVyZ2luZyc7XG5pbXBvcnQge2dlbmVyYXRlTmdDb250YWluZXJPcHN9IGZyb20gJy4vcGhhc2VzL25nX2NvbnRhaW5lcic7XG5pbXBvcnQge2Rpc2FibGVCaW5kaW5nc30gZnJvbSAnLi9waGFzZXMvbm9uYmluZGFibGUnO1xuaW1wb3J0IHtnZW5lcmF0ZU51bGxpc2hDb2FsZXNjZUV4cHJlc3Npb25zfSBmcm9tICcuL3BoYXNlcy9udWxsaXNoX2NvYWxlc2NpbmcnO1xuaW1wb3J0IHtvcmRlck9wc30gZnJvbSAnLi9waGFzZXMvb3JkZXJpbmcnO1xuaW1wb3J0IHtwYXJzZUV4dHJhY3RlZFN0eWxlc30gZnJvbSAnLi9waGFzZXMvcGFyc2VfZXh0cmFjdGVkX3N0eWxlcyc7XG5pbXBvcnQge3JlbW92ZUNvbnRlbnRTZWxlY3RvcnN9IGZyb20gJy4vcGhhc2VzL3BoYXNlX3JlbW92ZV9jb250ZW50X3NlbGVjdG9ycyc7XG5pbXBvcnQge2NyZWF0ZVBpcGVzfSBmcm9tICcuL3BoYXNlcy9waXBlX2NyZWF0aW9uJztcbmltcG9ydCB7Y3JlYXRlVmFyaWFkaWNQaXBlc30gZnJvbSAnLi9waGFzZXMvcGlwZV92YXJpYWRpYyc7XG5pbXBvcnQge3Byb3BhZ2F0ZUkxOG5CbG9ja3N9IGZyb20gJy4vcGhhc2VzL3Byb3BhZ2F0ZV9pMThuX2Jsb2Nrcyc7XG5pbXBvcnQge3Byb3BvZ2F0ZUkxOG5QbGFjZWhvbGRlcnN9IGZyb20gJy4vcGhhc2VzL3Byb3BhZ2F0ZV9pMThuX3BsYWNlaG9sZGVycyc7XG5pbXBvcnQge2V4dHJhY3RQdXJlRnVuY3Rpb25zfSBmcm9tICcuL3BoYXNlcy9wdXJlX2Z1bmN0aW9uX2V4dHJhY3Rpb24nO1xuaW1wb3J0IHtnZW5lcmF0ZVB1cmVMaXRlcmFsU3RydWN0dXJlc30gZnJvbSAnLi9waGFzZXMvcHVyZV9saXRlcmFsX3N0cnVjdHVyZXMnO1xuaW1wb3J0IHtyZWlmeX0gZnJvbSAnLi9waGFzZXMvcmVpZnknO1xuaW1wb3J0IHtyZW1vdmVFbXB0eUJpbmRpbmdzfSBmcm9tICcuL3BoYXNlcy9yZW1vdmVfZW1wdHlfYmluZGluZ3MnO1xuaW1wb3J0IHtnZW5lcmF0ZVJlcGVhdGVyRGVyaXZlZFZhcnN9IGZyb20gJy4vcGhhc2VzL3JlcGVhdGVyX2Rlcml2ZWRfdmFycyc7XG5pbXBvcnQge3Jlc29sdmVDb250ZXh0c30gZnJvbSAnLi9waGFzZXMvcmVzb2x2ZV9jb250ZXh0cyc7XG5pbXBvcnQge3Jlc29sdmVEb2xsYXJFdmVudH0gZnJvbSAnLi9waGFzZXMvcmVzb2x2ZV9kb2xsYXJfZXZlbnQnO1xuaW1wb3J0IHtyZXNvbHZlSTE4bkVsZW1lbnRQbGFjZWhvbGRlcnN9IGZyb20gJy4vcGhhc2VzL3Jlc29sdmVfaTE4bl9lbGVtZW50X3BsYWNlaG9sZGVycyc7XG5pbXBvcnQge3Jlc29sdmVJMThuRXhwcmVzc2lvblBsYWNlaG9sZGVyc30gZnJvbSAnLi9waGFzZXMvcmVzb2x2ZV9pMThuX2V4cHJlc3Npb25fcGxhY2Vob2xkZXJzJztcbmltcG9ydCB7cmVzb2x2ZU5hbWVzfSBmcm9tICcuL3BoYXNlcy9yZXNvbHZlX25hbWVzJztcbmltcG9ydCB7cmVzb2x2ZVNhbml0aXplcnN9IGZyb20gJy4vcGhhc2VzL3Jlc29sdmVfc2FuaXRpemVycyc7XG5pbXBvcnQge3NhdmVBbmRSZXN0b3JlVmlld30gZnJvbSAnLi9waGFzZXMvc2F2ZV9yZXN0b3JlX3ZpZXcnO1xuaW1wb3J0IHthbGxvY2F0ZVNsb3RzfSBmcm9tICcuL3BoYXNlcy9zbG90X2FsbG9jYXRpb24nO1xuaW1wb3J0IHtzcGVjaWFsaXplU3R5bGVCaW5kaW5nc30gZnJvbSAnLi9waGFzZXMvc3R5bGVfYmluZGluZ19zcGVjaWFsaXphdGlvbic7XG5pbXBvcnQge2dlbmVyYXRlVGVtcG9yYXJ5VmFyaWFibGVzfSBmcm9tICcuL3BoYXNlcy90ZW1wb3JhcnlfdmFyaWFibGVzJztcbmltcG9ydCB7Z2VuZXJhdGVUcmFja0Zuc30gZnJvbSAnLi9waGFzZXMvdHJhY2tfZm5fZ2VuZXJhdGlvbic7XG5pbXBvcnQge29wdGltaXplVHJhY2tGbnN9IGZyb20gJy4vcGhhc2VzL3RyYWNrX2ZuX29wdGltaXphdGlvbic7XG5pbXBvcnQge2dlbmVyYXRlVHJhY2tWYXJpYWJsZXN9IGZyb20gJy4vcGhhc2VzL3RyYWNrX3ZhcmlhYmxlcyc7XG5pbXBvcnQge2NvdW50VmFyaWFibGVzfSBmcm9tICcuL3BoYXNlcy92YXJfY291bnRpbmcnO1xuaW1wb3J0IHtvcHRpbWl6ZVZhcmlhYmxlc30gZnJvbSAnLi9waGFzZXMvdmFyaWFibGVfb3B0aW1pemF0aW9uJztcbmltcG9ydCB7d3JhcEkxOG5JY3VzfSBmcm9tICcuL3BoYXNlcy93cmFwX2ljdXMnO1xuXG50eXBlIFBoYXNlID0ge1xuICBmbjogKGpvYjogQ29tcGlsYXRpb25Kb2IpID0+IHZvaWQ7IGtpbmQ6IEtpbmQuQm90aCB8IEtpbmQuSG9zdCB8IEtpbmQuVG1wbDtcbn18e1xuICBmbjogKGpvYjogQ29tcG9uZW50Q29tcGlsYXRpb25Kb2IpID0+IHZvaWQ7XG4gIGtpbmQ6IEtpbmQuVG1wbDtcbn1cbnx7XG4gIGZuOiAoam9iOiBIb3N0QmluZGluZ0NvbXBpbGF0aW9uSm9iKSA9PiB2b2lkO1xuICBraW5kOiBLaW5kLkhvc3Q7XG59O1xuXG5jb25zdCBwaGFzZXM6IFBoYXNlW10gPSBbXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiByZW1vdmVDb250ZW50U2VsZWN0b3JzfSxcbiAge2tpbmQ6IEtpbmQuSG9zdCwgZm46IHBhcnNlSG9zdFN0eWxlUHJvcGVydGllc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBlbWl0TmFtZXNwYWNlQ2hhbmdlc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBzcGVjaWFsaXplU3R5bGVCaW5kaW5nc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBzcGVjaWFsaXplQmluZGluZ3N9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcHJvcGFnYXRlSTE4bkJsb2Nrc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiB3cmFwSTE4bkljdXN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogZXh0cmFjdEF0dHJpYnV0ZXN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGFyc2VFeHRyYWN0ZWRTdHlsZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcmVtb3ZlRW1wdHlCaW5kaW5nc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBjb2xsYXBzZVNpbmdsZXRvbkludGVycG9sYXRpb25zfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IG9yZGVyT3BzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IGdlbmVyYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBjcmVhdGVQaXBlc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBjb25maWd1cmVEZWZlckluc3RydWN0aW9uc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBleHRyYWN0STE4blRleHR9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogZXh0cmFjdEkxOG5JQ1VzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IGFwcGx5STE4bkV4cHJlc3Npb25zfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IGNyZWF0ZVZhcmlhZGljUGlwZXN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogZ2VuZXJhdGVQdXJlTGl0ZXJhbFN0cnVjdHVyZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogZ2VuZXJhdGVQcm9qZWN0aW9uRGVmc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBnZW5lcmF0ZVZhcmlhYmxlc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBzYXZlQW5kUmVzdG9yZVZpZXd9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogZGVsZXRlQW55Q2FzdHN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcmVzb2x2ZURvbGxhckV2ZW50fSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IGdlbmVyYXRlUmVwZWF0ZXJEZXJpdmVkVmFyc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBnZW5lcmF0ZVRyYWNrVmFyaWFibGVzfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHJlc29sdmVOYW1lc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiByZXNvbHZlRGVmZXJUYXJnZXROYW1lc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBvcHRpbWl6ZVRyYWNrRm5zfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHJlc29sdmVDb250ZXh0c30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiByZXNvbHZlU2FuaXRpemVyc30sICAvLyBUT0RPOiBydW4gaW4gYm90aFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogbGlmdExvY2FsUmVmc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBnZW5lcmF0ZU51bGxpc2hDb2FsZXNjZUV4cHJlc3Npb25zfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IGV4cGFuZFNhZmVSZWFkc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBnZW5lcmF0ZVRlbXBvcmFyeVZhcmlhYmxlc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBhbGxvY2F0ZVNsb3RzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IGV4dHJhY3RJMThuTWVzc2FnZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcmVzb2x2ZUkxOG5FbGVtZW50UGxhY2Vob2xkZXJzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHJlc29sdmVJMThuRXhwcmVzc2lvblBsYWNlaG9sZGVyc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBwcm9wb2dhdGVJMThuUGxhY2Vob2xkZXJzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IGZvcm1hdEkxOG5QYXJhbXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogZ2VuZXJhdGVUcmFja0Zuc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBjb2xsZWN0STE4bkNvbnN0c30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBjb2xsZWN0Q29uc3RFeHByZXNzaW9uc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBjb2xsZWN0RWxlbWVudENvbnN0c30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBhc3NpZ25JMThuU2xvdERlcGVuZGVuY2llc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBjb3VudFZhcmlhYmxlc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBnZW5lcmF0ZUFkdmFuY2V9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogb3B0aW1pemVWYXJpYWJsZXN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogbmFtZUZ1bmN0aW9uc0FuZFZhcmlhYmxlc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBtZXJnZU5leHRDb250ZXh0RXhwcmVzc2lvbnN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogZ2VuZXJhdGVOZ0NvbnRhaW5lck9wc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBjb2xsYXBzZUVtcHR5SW5zdHJ1Y3Rpb25zfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IGRpc2FibGVCaW5kaW5nc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBleHRyYWN0UHVyZUZ1bmN0aW9uc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiByZWlmeX0sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBjaGFpbn0sXG5dO1xuXG4vKipcbiAqIFJ1biBhbGwgdHJhbnNmb3JtYXRpb24gcGhhc2VzIGluIHRoZSBjb3JyZWN0IG9yZGVyIGFnYWluc3QgYSBjb21waWxhdGlvbiBqb2IuIEFmdGVyIHRoaXNcbiAqIHByb2Nlc3NpbmcsIHRoZSBjb21waWxhdGlvbiBzaG91bGQgYmUgaW4gYSBzdGF0ZSB3aGVyZSBpdCBjYW4gYmUgZW1pdHRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybShqb2I6IENvbXBpbGF0aW9uSm9iLCBraW5kOiBLaW5kKTogdm9pZCB7XG4gIGZvciAoY29uc3QgcGhhc2Ugb2YgcGhhc2VzKSB7XG4gICAgaWYgKHBoYXNlLmtpbmQgPT09IGtpbmQgfHwgcGhhc2Uua2luZCA9PT0gS2luZC5Cb3RoKSB7XG4gICAgICAvLyBUaGUgdHlwZSBvZiBgUGhhc2VgIGFib3ZlIGVuc3VyZXMgaXQgaXMgaW1wb3NzaWJsZSB0byBjYWxsIGEgcGhhc2UgdGhhdCBkb2Vzbid0IHN1cHBvcnQgdGhlXG4gICAgICAvLyBqb2Iga2luZC5cbiAgICAgIHBoYXNlLmZuKGpvYiBhcyBDb21waWxhdGlvbkpvYiAmIENvbXBvbmVudENvbXBpbGF0aW9uSm9iICYgSG9zdEJpbmRpbmdDb21waWxhdGlvbkpvYik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29tcGlsZSBhbGwgdmlld3MgaW4gdGhlIGdpdmVuIGBDb21wb25lbnRDb21waWxhdGlvbmAgaW50byB0aGUgZmluYWwgdGVtcGxhdGUgZnVuY3Rpb24sIHdoaWNoIG1heVxuICogcmVmZXJlbmNlIGNvbnN0YW50cyBkZWZpbmVkIGluIGEgYENvbnN0YW50UG9vbGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0VGVtcGxhdGVGbih0cGw6IENvbXBvbmVudENvbXBpbGF0aW9uSm9iLCBwb29sOiBDb25zdGFudFBvb2wpOiBvLkZ1bmN0aW9uRXhwciB7XG4gIGNvbnN0IHJvb3RGbiA9IGVtaXRWaWV3KHRwbC5yb290KTtcbiAgZW1pdENoaWxkVmlld3ModHBsLnJvb3QsIHBvb2wpO1xuICByZXR1cm4gcm9vdEZuO1xufVxuXG5mdW5jdGlvbiBlbWl0Q2hpbGRWaWV3cyhwYXJlbnQ6IFZpZXdDb21waWxhdGlvblVuaXQsIHBvb2w6IENvbnN0YW50UG9vbCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHVuaXQgb2YgcGFyZW50LmpvYi51bml0cykge1xuICAgIGlmICh1bml0LnBhcmVudCAhPT0gcGFyZW50LnhyZWYpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIENoaWxkIHZpZXdzIGFyZSBlbWl0dGVkIGRlcHRoLWZpcnN0LlxuICAgIGVtaXRDaGlsZFZpZXdzKHVuaXQsIHBvb2wpO1xuXG4gICAgY29uc3Qgdmlld0ZuID0gZW1pdFZpZXcodW5pdCk7XG4gICAgcG9vbC5zdGF0ZW1lbnRzLnB1c2godmlld0ZuLnRvRGVjbFN0bXQodmlld0ZuLm5hbWUhKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbWl0IGEgdGVtcGxhdGUgZnVuY3Rpb24gZm9yIGFuIGluZGl2aWR1YWwgYFZpZXdDb21waWxhdGlvbmAgKHdoaWNoIG1heSBiZSBlaXRoZXIgdGhlIHJvb3Qgdmlld1xuICogb3IgYW4gZW1iZWRkZWQgdmlldykuXG4gKi9cbmZ1bmN0aW9uIGVtaXRWaWV3KHZpZXc6IFZpZXdDb21waWxhdGlvblVuaXQpOiBvLkZ1bmN0aW9uRXhwciB7XG4gIGlmICh2aWV3LmZuTmFtZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IHZpZXcgJHt2aWV3LnhyZWZ9IGlzIHVubmFtZWRgKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZVN0YXRlbWVudHM6IG8uU3RhdGVtZW50W10gPSBbXTtcbiAgZm9yIChjb25zdCBvcCBvZiB2aWV3LmNyZWF0ZSkge1xuICAgIGlmIChvcC5raW5kICE9PSBpci5PcEtpbmQuU3RhdGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbkVycm9yOiBleHBlY3RlZCBhbGwgY3JlYXRlIG9wcyB0byBoYXZlIGJlZW4gY29tcGlsZWQsIGJ1dCBnb3QgJHtcbiAgICAgICAgICBpci5PcEtpbmRbb3Aua2luZF19YCk7XG4gICAgfVxuICAgIGNyZWF0ZVN0YXRlbWVudHMucHVzaChvcC5zdGF0ZW1lbnQpO1xuICB9XG4gIGNvbnN0IHVwZGF0ZVN0YXRlbWVudHM6IG8uU3RhdGVtZW50W10gPSBbXTtcbiAgZm9yIChjb25zdCBvcCBvZiB2aWV3LnVwZGF0ZSkge1xuICAgIGlmIChvcC5raW5kICE9PSBpci5PcEtpbmQuU3RhdGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbkVycm9yOiBleHBlY3RlZCBhbGwgdXBkYXRlIG9wcyB0byBoYXZlIGJlZW4gY29tcGlsZWQsIGJ1dCBnb3QgJHtcbiAgICAgICAgICBpci5PcEtpbmRbb3Aua2luZF19YCk7XG4gICAgfVxuICAgIHVwZGF0ZVN0YXRlbWVudHMucHVzaChvcC5zdGF0ZW1lbnQpO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlQ29uZCA9IG1heWJlR2VuZXJhdGVSZkJsb2NrKDEsIGNyZWF0ZVN0YXRlbWVudHMpO1xuICBjb25zdCB1cGRhdGVDb25kID0gbWF5YmVHZW5lcmF0ZVJmQmxvY2soMiwgdXBkYXRlU3RhdGVtZW50cyk7XG4gIHJldHVybiBvLmZuKFxuICAgICAgW1xuICAgICAgICBuZXcgby5GblBhcmFtKCdyZicpLFxuICAgICAgICBuZXcgby5GblBhcmFtKCdjdHgnKSxcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIC4uLmNyZWF0ZUNvbmQsXG4gICAgICAgIC4uLnVwZGF0ZUNvbmQsXG4gICAgICBdLFxuICAgICAgLyogdHlwZSAqLyB1bmRlZmluZWQsIC8qIHNvdXJjZVNwYW4gKi8gdW5kZWZpbmVkLCB2aWV3LmZuTmFtZSk7XG59XG5cbmZ1bmN0aW9uIG1heWJlR2VuZXJhdGVSZkJsb2NrKGZsYWc6IG51bWJlciwgc3RhdGVtZW50czogby5TdGF0ZW1lbnRbXSk6IG8uU3RhdGVtZW50W10ge1xuICBpZiAoc3RhdGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gW1xuICAgIG8uaWZTdG10KFxuICAgICAgICBuZXcgby5CaW5hcnlPcGVyYXRvckV4cHIoby5CaW5hcnlPcGVyYXRvci5CaXR3aXNlQW5kLCBvLnZhcmlhYmxlKCdyZicpLCBvLmxpdGVyYWwoZmxhZykpLFxuICAgICAgICBzdGF0ZW1lbnRzKSxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRIb3N0QmluZGluZ0Z1bmN0aW9uKGpvYjogSG9zdEJpbmRpbmdDb21waWxhdGlvbkpvYik6IG8uRnVuY3Rpb25FeHByfG51bGwge1xuICBpZiAoam9iLnJvb3QuZm5OYW1lID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb25FcnJvcjogaG9zdCBiaW5kaW5nIGZ1bmN0aW9uIGlzIHVubmFtZWRgKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZVN0YXRlbWVudHM6IG8uU3RhdGVtZW50W10gPSBbXTtcbiAgZm9yIChjb25zdCBvcCBvZiBqb2Iucm9vdC5jcmVhdGUpIHtcbiAgICBpZiAob3Aua2luZCAhPT0gaXIuT3BLaW5kLlN0YXRlbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb25FcnJvcjogZXhwZWN0ZWQgYWxsIGNyZWF0ZSBvcHMgdG8gaGF2ZSBiZWVuIGNvbXBpbGVkLCBidXQgZ290ICR7XG4gICAgICAgICAgaXIuT3BLaW5kW29wLmtpbmRdfWApO1xuICAgIH1cbiAgICBjcmVhdGVTdGF0ZW1lbnRzLnB1c2gob3Auc3RhdGVtZW50KTtcbiAgfVxuICBjb25zdCB1cGRhdGVTdGF0ZW1lbnRzOiBvLlN0YXRlbWVudFtdID0gW107XG4gIGZvciAoY29uc3Qgb3Agb2Ygam9iLnJvb3QudXBkYXRlKSB7XG4gICAgaWYgKG9wLmtpbmQgIT09IGlyLk9wS2luZC5TdGF0ZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IGV4cGVjdGVkIGFsbCB1cGRhdGUgb3BzIHRvIGhhdmUgYmVlbiBjb21waWxlZCwgYnV0IGdvdCAke1xuICAgICAgICAgIGlyLk9wS2luZFtvcC5raW5kXX1gKTtcbiAgICB9XG4gICAgdXBkYXRlU3RhdGVtZW50cy5wdXNoKG9wLnN0YXRlbWVudCk7XG4gIH1cblxuICBpZiAoY3JlYXRlU3RhdGVtZW50cy5sZW5ndGggPT09IDAgJiYgdXBkYXRlU3RhdGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUNvbmQgPSBtYXliZUdlbmVyYXRlUmZCbG9jaygxLCBjcmVhdGVTdGF0ZW1lbnRzKTtcbiAgY29uc3QgdXBkYXRlQ29uZCA9IG1heWJlR2VuZXJhdGVSZkJsb2NrKDIsIHVwZGF0ZVN0YXRlbWVudHMpO1xuICByZXR1cm4gby5mbihcbiAgICAgIFtcbiAgICAgICAgbmV3IG8uRm5QYXJhbSgncmYnKSxcbiAgICAgICAgbmV3IG8uRm5QYXJhbSgnY3R4JyksXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAuLi5jcmVhdGVDb25kLFxuICAgICAgICAuLi51cGRhdGVDb25kLFxuICAgICAgXSxcbiAgICAgIC8qIHR5cGUgKi8gdW5kZWZpbmVkLCAvKiBzb3VyY2VTcGFuICovIHVuZGVmaW5lZCwgam9iLnJvb3QuZm5OYW1lKTtcbn1cbiJdfQ==