@angular/compiler 17.0.5 → 17.0.7

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 (49) hide show
  1. package/esm2022/src/compiler.mjs +2 -1
  2. package/esm2022/src/render3/partial/class_metadata.mjs +1 -1
  3. package/esm2022/src/render3/partial/directive.mjs +1 -1
  4. package/esm2022/src/render3/partial/factory.mjs +1 -1
  5. package/esm2022/src/render3/partial/injectable.mjs +1 -1
  6. package/esm2022/src/render3/partial/injector.mjs +1 -1
  7. package/esm2022/src/render3/partial/ng_module.mjs +1 -1
  8. package/esm2022/src/render3/partial/pipe.mjs +1 -1
  9. package/esm2022/src/render3/view/api.mjs +1 -1
  10. package/esm2022/src/render3/view/compiler.mjs +21 -8
  11. package/esm2022/src/render3/view/t2_api.mjs +1 -1
  12. package/esm2022/src/render3/view/t2_binder.mjs +6 -7
  13. package/esm2022/src/render3/view/template.mjs +1 -20
  14. package/esm2022/src/render3/view/util.mjs +24 -2
  15. package/esm2022/src/template/pipeline/ir/src/enums.mjs +34 -17
  16. package/esm2022/src/template/pipeline/ir/src/expression.mjs +19 -20
  17. package/esm2022/src/template/pipeline/ir/src/ops/create.mjs +37 -11
  18. package/esm2022/src/template/pipeline/ir/src/ops/host.mjs +5 -2
  19. package/esm2022/src/template/pipeline/ir/src/ops/update.mjs +29 -14
  20. package/esm2022/src/template/pipeline/src/emit.mjs +13 -9
  21. package/esm2022/src/template/pipeline/src/ingest.mjs +293 -158
  22. package/esm2022/src/template/pipeline/src/instruction.mjs +18 -14
  23. package/esm2022/src/template/pipeline/src/phases/apply_i18n_expressions.mjs +20 -4
  24. package/esm2022/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.mjs +44 -22
  25. package/esm2022/src/template/pipeline/src/phases/attribute_extraction.mjs +26 -5
  26. package/esm2022/src/template/pipeline/src/phases/binding_specialization.mjs +4 -4
  27. package/esm2022/src/template/pipeline/src/phases/const_collection.mjs +15 -6
  28. package/esm2022/src/template/pipeline/src/phases/convert_i18n_bindings.mjs +52 -0
  29. package/esm2022/src/template/pipeline/src/phases/create_i18n_contexts.mjs +23 -1
  30. package/esm2022/src/template/pipeline/src/phases/extract_i18n_messages.mjs +65 -88
  31. package/esm2022/src/template/pipeline/src/phases/generate_advance.mjs +2 -2
  32. package/esm2022/src/template/pipeline/src/phases/generate_variables.mjs +7 -1
  33. package/esm2022/src/template/pipeline/src/phases/i18n_const_collection.mjs +147 -35
  34. package/esm2022/src/template/pipeline/src/phases/i18n_text_extraction.mjs +5 -3
  35. package/esm2022/src/template/pipeline/src/phases/parse_extracted_styles.mjs +4 -3
  36. package/esm2022/src/template/pipeline/src/phases/phase_remove_content_selectors.mjs +15 -3
  37. package/esm2022/src/template/pipeline/src/phases/propagate_i18n_blocks.mjs +31 -12
  38. package/esm2022/src/template/pipeline/src/phases/reify.mjs +18 -15
  39. package/esm2022/src/template/pipeline/src/phases/remove_unused_i18n_attrs.mjs +33 -0
  40. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_element_placeholders.mjs +175 -31
  41. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_expression_placeholders.mjs +10 -5
  42. package/esm2022/src/template/pipeline/src/phases/resolve_sanitizers.mjs +78 -14
  43. package/esm2022/src/template/pipeline/src/phases/slot_allocation.mjs +3 -1
  44. package/esm2022/src/template/pipeline/src/phases/var_counting.mjs +3 -1
  45. package/esm2022/src/version.mjs +1 -1
  46. package/fesm2022/compiler.mjs +1266 -549
  47. package/fesm2022/compiler.mjs.map +1 -1
  48. package/index.d.ts +21 -1
  49. package/package.json +2 -2
@@ -6,7 +6,7 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  import * as o from '../../../../../output/output_ast';
9
- import { Namespace, OpKind } from '../enums';
9
+ import { I18nContextKind, Namespace, OpKind } from '../enums';
10
10
  import { SlotHandle } from '../handle';
11
11
  import { OpList } from '../operations';
12
12
  import { TRAIT_CONSUMES_SLOT } from '../traits';
@@ -46,10 +46,11 @@ export function createElementStartOp(tag, xref, namespace, i18nPlaceholder, sour
46
46
  /**
47
47
  * Create a `TemplateOp`.
48
48
  */
49
- export function createTemplateOp(xref, tag, functionNameSuffix, namespace, i18nPlaceholder, sourceSpan) {
49
+ export function createTemplateOp(xref, templateKind, tag, functionNameSuffix, namespace, i18nPlaceholder, sourceSpan) {
50
50
  return {
51
51
  kind: OpKind.Template,
52
52
  xref,
53
+ templateKind,
53
54
  attributes: null,
54
55
  tag,
55
56
  handle: new SlotHandle(),
@@ -65,7 +66,7 @@ export function createTemplateOp(xref, tag, functionNameSuffix, namespace, i18nP
65
66
  ...NEW_OP,
66
67
  };
67
68
  }
68
- export function createRepeaterCreateOp(primaryView, emptyView, tag, track, varNames, sourceSpan) {
69
+ export function createRepeaterCreateOp(primaryView, emptyView, tag, track, varNames, i18nPlaceholder, emptyI18nPlaceholder, sourceSpan) {
69
70
  return {
70
71
  kind: OpKind.RepeaterCreate,
71
72
  attributes: null,
@@ -83,6 +84,8 @@ export function createRepeaterCreateOp(primaryView, emptyView, tag, track, varNa
83
84
  vars: null,
84
85
  varNames,
85
86
  usesComponentInstance: false,
87
+ i18nPlaceholder,
88
+ emptyI18nPlaceholder,
86
89
  sourceSpan,
87
90
  ...TRAIT_CONSUMES_SLOT,
88
91
  ...NEW_OP,
@@ -131,7 +134,9 @@ export function createTextOp(xref, initialValue, sourceSpan) {
131
134
  /**
132
135
  * Create a `ListenerOp`. Host bindings reuse all the listener logic.
133
136
  */
134
- export function createListenerOp(target, targetSlot, name, tag, animationPhase, hostListener, sourceSpan) {
137
+ export function createListenerOp(target, targetSlot, name, tag, handlerOps, animationPhase, eventTarget, hostListener, sourceSpan) {
138
+ const handlerList = new OpList();
139
+ handlerList.push(handlerOps);
135
140
  return {
136
141
  kind: OpKind.Listener,
137
142
  target,
@@ -139,11 +144,12 @@ export function createListenerOp(target, targetSlot, name, tag, animationPhase,
139
144
  tag,
140
145
  hostListener,
141
146
  name,
142
- handlerOps: new OpList(),
147
+ handlerOps: handlerList,
143
148
  handlerFnName: null,
144
149
  consumesDollarEvent: false,
145
150
  isAnimationListener: animationPhase !== null,
146
- animationPhase: animationPhase,
151
+ animationPhase,
152
+ eventTarget,
147
153
  sourceSpan,
148
154
  ...NEW_OP,
149
155
  };
@@ -172,14 +178,15 @@ export function createProjectionDefOp(def) {
172
178
  ...NEW_OP,
173
179
  };
174
180
  }
175
- export function createProjectionOp(xref, selector, sourceSpan) {
181
+ export function createProjectionOp(xref, selector, i18nPlaceholder, attributes, sourceSpan) {
176
182
  return {
177
183
  kind: OpKind.Projection,
178
184
  xref,
179
185
  handle: new SlotHandle(),
180
186
  selector,
187
+ i18nPlaceholder,
181
188
  projectionSlotIndex: 0,
182
- attributes: [],
189
+ attributes,
183
190
  localRefs: [],
184
191
  sourceSpan,
185
192
  ...NEW_OP,
@@ -189,13 +196,17 @@ export function createProjectionOp(xref, selector, sourceSpan) {
189
196
  /**
190
197
  * Create an `ExtractedAttributeOp`.
191
198
  */
192
- export function createExtractedAttributeOp(target, bindingKind, name, expression) {
199
+ export function createExtractedAttributeOp(target, bindingKind, name, expression, i18nContext, i18nMessage, securityContext) {
193
200
  return {
194
201
  kind: OpKind.ExtractedAttribute,
195
202
  target,
196
203
  bindingKind,
197
204
  name,
198
205
  expression,
206
+ i18nContext,
207
+ i18nMessage,
208
+ securityContext,
209
+ trustedValueFn: null,
199
210
  ...NEW_OP,
200
211
  };
201
212
  }
@@ -238,10 +249,11 @@ export function createDeferOnOp(defer, trigger, prefetch, sourceSpan) {
238
249
  /**
239
250
  * Create an `ExtractedMessageOp`.
240
251
  */
241
- export function createI18nMessageOp(xref, i18nBlock, message, messagePlaceholder, params, postprocessingParams, needsPostprocessing) {
252
+ export function createI18nMessageOp(xref, i18nContext, i18nBlock, message, messagePlaceholder, params, postprocessingParams, needsPostprocessing) {
242
253
  return {
243
254
  kind: OpKind.I18nMessage,
244
255
  xref,
256
+ i18nContext,
245
257
  i18nBlock,
246
258
  message,
247
259
  messagePlaceholder,
@@ -304,6 +316,9 @@ export function createIcuEndOp(xref) {
304
316
  };
305
317
  }
306
318
  export function createI18nContextOp(contextKind, xref, i18nBlock, message, sourceSpan) {
319
+ if (i18nBlock === null && contextKind !== I18nContextKind.Attr) {
320
+ throw new Error('AssertionError: i18nBlock must be provided for non-attribute contexts.');
321
+ }
307
322
  return {
308
323
  kind: OpKind.I18nContext,
309
324
  contextKind,
@@ -316,10 +331,21 @@ export function createI18nContextOp(contextKind, xref, i18nBlock, message, sourc
316
331
  ...NEW_OP,
317
332
  };
318
333
  }
334
+ export function createI18nAttributesOp(xref, handle, target) {
335
+ return {
336
+ kind: OpKind.I18nAttributes,
337
+ xref,
338
+ handle,
339
+ target,
340
+ i18nAttributesConfig: null,
341
+ ...NEW_OP,
342
+ ...TRAIT_CONSUMES_SLOT,
343
+ };
344
+ }
319
345
  export function literalOrArrayLiteral(value) {
320
346
  if (Array.isArray(value)) {
321
347
  return o.literalArr(value.map(literalOrArrayLiteral));
322
348
  }
323
349
  return o.literal(value, o.INFERRED_TYPE);
324
350
  }
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL3RlbXBsYXRlL3BpcGVsaW5lL2lyL3NyYy9vcHMvY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUdILE9BQU8sS0FBSyxDQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFHdEQsT0FBTyxFQUFzRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hILE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxFQUFLLE1BQU0sRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQXNCLG1CQUFtQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRW5FLE9BQU8sRUFBWSxNQUFNLEVBQTBCLE1BQU0sVUFBVSxDQUFDO0FBbUJwRTs7R0FFRztBQUNILE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDdEMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsUUFBUTtJQUM3RixNQUFNLENBQUMsY0FBYztDQUN0QixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxFQUFZO0lBQ2pELE9BQU8sdUJBQXVCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBa0ZEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNoQyxHQUFXLEVBQUUsSUFBWSxFQUFFLFNBQW9CLEVBQUUsZUFBOEMsRUFDL0YsVUFBMkI7SUFDN0IsT0FBTztRQUNMLElBQUksRUFBRSxNQUFNLENBQUMsWUFBWTtRQUN6QixJQUFJO1FBQ0osR0FB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QUFVLGdCQUFnQixDQUM1QixJQUFZLEVBQUUsT0FBcUIsRUFBRSxrQkFBMEIsRUFDL0QsVUFBMkI7SUFDN0IsT0FBTztRQUNMLElBQUksRUFBRSxNQUFNLENBQUMsUUFBUTtRQUNyQixJQUFJO1FBQ0osT0FBTztRQUNQLGtCQUFrQjtRQUNsQixPQUFPLEVBQUUsSUFBSTtRQUNiLFVBQVU7UUFDVixHQUFHLE1BQU07S0FDVixDQUFDO0FBQ0osQ0FBQztBQWNEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFZO0lBQ3pDLE9BQU87UUFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDbkIsSUFBSTtRQUNKLEdBQUcsTUFBTTtLQUNWLENBQUM7QUFDSixDQUFDO0FBb0RELE1BQU0sVUFBVSxtQkFBbUIsQ0FDL0IsV0FBNEIsRUFBRSxJQUFZLEVBQUUsU0FBaUIsRUFBRSxPQUFxQixFQUNwRixVQUEyQjtJQUM3QixPQUFPO1FBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxXQUFXO1FBQ3hCLFdBQVc7UUFDWCxJQUFJO1FBQ0osU0FBUztRQUNULE9BQU87UUFDUCxVQUFVO1FBQ1YsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFO1FBQ2pCLG9CQUFvQixFQUFFLElBQUksR0FBRyxFQUFFO1FBQy9CLEdBQUcsTUFBTTtLQUNWLENBQUM7QUFDSixDQUFDO0FBUUQsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEtBQVU7SUFDOUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztLQUN2RDtJQUNELE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgaTE4biBmcm9tICcuLi8uLi8uLi8uLi8uLi9pMThuL2kxOG5fYXN0JztcbmltcG9ydCAqIGFzIG8gZnJvbSAnLi4vLi4vLi4vLi4vLi4vb3V0cHV0L291dHB1dF9hc3QnO1xuaW1wb3J0IHtQYXJzZVNvdXJjZVNwYW59IGZyb20gJy4uLy4uLy4uLy4uLy4uL3BhcnNlX3V0aWwnO1xuaW1wb3J0IHtSM0RlZmVyQmxvY2tNZXRhZGF0YX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vcmVuZGVyMy92aWV3L2FwaSc7XG5pbXBvcnQge0JpbmRpbmdLaW5kLCBEZWZlclRyaWdnZXJLaW5kLCBJMThuQ29udGV4dEtpbmQsIEkxOG5QYXJhbVZhbHVlRmxhZ3MsIE5hbWVzcGFjZSwgT3BLaW5kfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQge1Nsb3RIYW5kbGV9IGZyb20gJy4uL2hhbmRsZSc7XG5pbXBvcnQge09wLCBPcExpc3QsIFhyZWZJZH0gZnJvbSAnLi4vb3BlcmF0aW9ucyc7XG5pbXBvcnQge0NvbnN1bWVzU2xvdE9wVHJhaXQsIFRSQUlUX0NPTlNVTUVTX1NMT1R9IGZyb20gJy4uL3RyYWl0cyc7XG5cbmltcG9ydCB7TGlzdEVuZE9wLCBORVdfT1AsIFN0YXRlbWVudE9wLCBWYXJpYWJsZU9wfSBmcm9tICcuL3NoYXJlZCc7XG5cbmltcG9ydCB0eXBlIHtVcGRhdGVPcH0gZnJvbSAnLi91cGRhdGUnO1xuXG4vKipcbiAqIEFuIG9wZXJhdGlvbiB1c2FibGUgb24gdGhlIGNyZWF0aW9uIHNpZGUgb2YgdGhlIElSLlxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVPcCA9IExpc3RFbmRPcDxDcmVhdGVPcD58U3RhdGVtZW50T3A8Q3JlYXRlT3A+fEVsZW1lbnRPcHxFbGVtZW50U3RhcnRPcHxcbiAgICBFbGVtZW50RW5kT3B8Q29udGFpbmVyT3B8Q29udGFpbmVyU3RhcnRPcHxDb250YWluZXJFbmRPcHxUZW1wbGF0ZU9wfEVuYWJsZUJpbmRpbmdzT3B8XG4gICAgRGlzYWJsZUJpbmRpbmdzT3B8VGV4dE9wfExpc3RlbmVyT3B8UGlwZU9wfFZhcmlhYmxlT3A8Q3JlYXRlT3A+fE5hbWVzcGFjZU9wfFByb2plY3Rpb25EZWZPcHxcbiAgICBQcm9qZWN0aW9uT3B8RXh0cmFjdGVkQXR0cmlidXRlT3B8RGVmZXJPcHxEZWZlck9uT3B8UmVwZWF0ZXJDcmVhdGVPcHxJMThuTWVzc2FnZU9wfEkxOG5PcHxcbiAgICBJMThuU3RhcnRPcHxJMThuRW5kT3B8SWN1U3RhcnRPcHxJY3VFbmRPcHxJMThuQ29udGV4dE9wO1xuXG4vKipcbiAqIEFuIG9wZXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIG9mIGFuIGVsZW1lbnQgb3IgY29udGFpbmVyLlxuICovXG5leHBvcnQgdHlwZSBFbGVtZW50T3JDb250YWluZXJPcHMgPVxuICAgIEVsZW1lbnRPcHxFbGVtZW50U3RhcnRPcHxDb250YWluZXJPcHxDb250YWluZXJTdGFydE9wfFRlbXBsYXRlT3B8UmVwZWF0ZXJDcmVhdGVPcDtcblxuLyoqXG4gKiBUaGUgc2V0IG9mIE9wS2luZHMgdGhhdCByZXByZXNlbnQgdGhlIGNyZWF0aW9uIG9mIGFuIGVsZW1lbnQgb3IgY29udGFpbmVyXG4gKi9cbmNvbnN0IGVsZW1lbnRDb250YWluZXJPcEtpbmRzID0gbmV3IFNldChbXG4gIE9wS2luZC5FbGVtZW50LCBPcEtpbmQuRWxlbWVudFN0YXJ0LCBPcEtpbmQuQ29udGFpbmVyLCBPcEtpbmQuQ29udGFpbmVyU3RhcnQsIE9wS2luZC5UZW1wbGF0ZSxcbiAgT3BLaW5kLlJlcGVhdGVyQ3JlYXRlXG5dKTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gb3BlcmF0aW9uIHJlcHJlc2VudHMgdGhlIGNyZWF0aW9uIG9mIGFuIGVsZW1lbnQgb3IgY29udGFpbmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50T3JDb250YWluZXJPcChvcDogQ3JlYXRlT3ApOiBvcCBpcyBFbGVtZW50T3JDb250YWluZXJPcHMge1xuICByZXR1cm4gZWxlbWVudENvbnRhaW5lck9wS2luZHMuaGFzKG9wLmtpbmQpO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgbG9jYWwgcmVmZXJlbmNlIG9uIGFuIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxSZWYge1xuICAvKipcbiAgICogVXNlci1kZWZpbmVkIG5hbWUgb2YgdGhlIGxvY2FsIHJlZiB2YXJpYWJsZS5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGFyZ2V0IG9mIHRoZSBsb2NhbCByZWZlcmVuY2UgdmFyaWFibGUgKG9mdGVuIGAnJ2ApLlxuICAgKi9cbiAgdGFyZ2V0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQmFzZSBpbnRlcmZhY2UgZm9yIGBFbGVtZW50YCwgYEVsZW1lbnRTdGFydGAsIGFuZCBgVGVtcGxhdGVgIG9wZXJhdGlvbnMsIGNvbnRhaW5pbmcgY29tbW9uIGZpZWxkc1xuICogdXNlZCB0byByZXByZXNlbnQgdGhlaXIgZWxlbWVudC1saWtlIG5hdHVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50T3JDb250YWluZXJPcEJhc2UgZXh0ZW5kcyBPcDxDcmVhdGVPcD4sIENvbnN1bWVzU2xvdE9wVHJhaXQge1xuICBraW5kOiBFbGVtZW50T3JDb250YWluZXJPcHNbJ2tpbmQnXTtcblxuICAvKipcbiAgICogYFhyZWZJZGAgYWxsb2NhdGVkIGZvciB0aGlzIGVsZW1lbnQuXG4gICAqXG4gICAqIFRoaXMgSUQgaXMgdXNlZCB0byByZWZlcmVuY2UgdGhpcyBlbGVtZW50IGZyb20gb3RoZXIgSVIgc3RydWN0dXJlcy5cbiAgICovXG4gIHhyZWY6IFhyZWZJZDtcblxuICAvKipcbiAgICogQXR0cmlidXRlcyBvZiB2YXJpb3VzIGtpbmRzIG9uIHRoaXMgZWxlbWVudC4gUmVwcmVzZW50ZWQgYXMgYSBgQ29uc3RJbmRleGAgcG9pbnRlciBpbnRvIHRoZVxuICAgKiBzaGFyZWQgYGNvbnN0c2AgYXJyYXkgb2YgdGhlIGNvbXBvbmVudCBjb21waWxhdGlvbi5cbiAgICovXG4gIGF0dHJpYnV0ZXM6IENvbnN0SW5kZXh8bnVsbDtcblxuICAvKipcbiAgICogTG9jYWwgcmVmZXJlbmNlcyB0byB0aGlzIGVsZW1lbnQuXG4gICAqXG4gICAqIEJlZm9yZSBsb2NhbCByZWYgcHJvY2Vzc2luZywgdGhpcyBpcyBhbiBhcnJheSBvZiBgTG9jYWxSZWZgIGRlY2xhcmF0aW9ucy5cbiAgICpcbiAgICogQWZ0ZXIgcHJvY2Vzc2luZywgaXQncyBhIGBDb25zdEluZGV4YCBwb2ludGVyIGludG8gdGhlIHNoYXJlZCBgY29uc3RzYCBhcnJheSBvZiB0aGUgY29tcG9uZW50XG4gICAqIGNvbXBpbGF0aW9uLlxuICAgKi9cbiAgbG9jYWxSZWZzOiBMb2NhbFJlZltdfENvbnN0SW5kZXh8bnVsbDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGNvbnRhaW5lciBpcyBtYXJrZWQgYG5nTm9uQmluZGFibGVgLCB3aGljaCBkaXNhYmxlZCBBbmd1bGFyIGJpbmRpbmcgZm9yIGl0c2VsZiBhbmRcbiAgICogYWxsIGRlc2NlbmRhbnRzLlxuICAgKi9cbiAgbm9uQmluZGFibGU6IGJvb2xlYW47XG5cbiAgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRPcEJhc2UgZXh0ZW5kcyBFbGVtZW50T3JDb250YWluZXJPcEJhc2Uge1xuICBraW5kOiBPcEtpbmQuRWxlbWVudHxPcEtpbmQuRWxlbWVudFN0YXJ0fE9wS2luZC5UZW1wbGF0ZXxPcEtpbmQuUmVwZWF0ZXJDcmVhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSBIVE1MIHRhZyBuYW1lIGZvciB0aGlzIGVsZW1lbnQuXG4gICAqL1xuICB0YWc6IHN0cmluZ3xudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZXNwYWNlIG9mIHRoaXMgZWxlbWVudCwgd2hpY2ggY29udHJvbHMgdGhlIHByZWNlZGluZyBuYW1lc3BhY2UgaW5zdHJ1Y3Rpb24uXG4gICAqL1xuICBuYW1lc3BhY2U6IE5hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBMb2dpY2FsIG9wZXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHN0YXJ0IG9mIGFuIGVsZW1lbnQgaW4gdGhlIGNyZWF0aW9uIElSLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRTdGFydE9wIGV4dGVuZHMgRWxlbWVudE9wQmFzZSB7XG4gIGtpbmQ6IE9wS2luZC5FbGVtZW50U3RhcnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpMThuIHBsYWNlaG9sZGVyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZWxlbWVudC5cbiAgICovXG4gIGkxOG5QbGFjZWhvbGRlcj86IGkxOG4uVGFnUGxhY2Vob2xkZXI7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGBFbGVtZW50U3RhcnRPcGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbGVtZW50U3RhcnRPcChcbiAgICB0YWc6IHN0cmluZywgeHJlZjogWHJlZklkLCBuYW1lc3BhY2U6IE5hbWVzcGFjZSwgaTE4blBsYWNlaG9sZGVyOiBpMThuLlRhZ1BsYWNlaG9sZGVyfHVuZGVmaW5lZCxcbiAgICBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW4pOiBFbGVtZW50U3RhcnRPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLkVsZW1lbnRTdGFydCxcbiAgICB4cmVmLFxuICAgIHRhZyxcbiAgICBoYW5kbGU6IG5ldyBTbG90SGFuZGxlKCksXG4gICAgYXR0cmlidXRlczogbnVsbCxcbiAgICBsb2NhbFJlZnM6IFtdLFxuICAgIG5vbkJpbmRhYmxlOiBmYWxzZSxcbiAgICBuYW1lc3BhY2UsXG4gICAgaTE4blBsYWNlaG9sZGVyLFxuICAgIHNvdXJjZVNwYW4sXG4gICAgLi4uVFJBSVRfQ09OU1VNRVNfU0xPVCxcbiAgICAuLi5ORVdfT1AsXG4gIH07XG59XG5cbi8qKlxuICogTG9naWNhbCBvcGVyYXRpb24gcmVwcmVzZW50aW5nIGFuIGVsZW1lbnQgd2l0aCBubyBjaGlsZHJlbiBpbiB0aGUgY3JlYXRpb24gSVIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudE9wIGV4dGVuZHMgRWxlbWVudE9wQmFzZSB7XG4gIGtpbmQ6IE9wS2luZC5FbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgaTE4biBwbGFjZWhvbGRlciBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVsZW1lbnQuXG4gICAqL1xuICBpMThuUGxhY2Vob2xkZXI/OiBpMThuLlRhZ1BsYWNlaG9sZGVyO1xufVxuXG4vKipcbiAqIExvZ2ljYWwgb3BlcmF0aW9uIHJlcHJlc2VudGluZyBhbiBlbWJlZGRlZCB2aWV3IGRlY2xhcmF0aW9uIGluIHRoZSBjcmVhdGlvbiBJUi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZU9wIGV4dGVuZHMgRWxlbWVudE9wQmFzZSB7XG4gIGtpbmQ6IE9wS2luZC5UZW1wbGF0ZTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBkZWNsYXJhdGlvbiBzbG90cyB1c2VkIGJ5IHRoaXMgdGVtcGxhdGUsIG9yIGBudWxsYCBpZiBzbG90cyBoYXZlIG5vdCB5ZXQgYmVlblxuICAgKiBhc3NpZ25lZC5cbiAgICovXG4gIGRlY2xzOiBudW1iZXJ8bnVsbDtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBiaW5kaW5nIHZhcmlhYmxlIHNsb3RzIHVzZWQgYnkgdGhpcyB0ZW1wbGF0ZSwgb3IgYG51bGxgIGlmIGJpbmRpbmcgdmFyaWFibGVzIGhhdmVcbiAgICogbm90IHlldCBiZWVuIGNvdW50ZWQuXG4gICAqL1xuICB2YXJzOiBudW1iZXJ8bnVsbDtcblxuICAvKipcbiAgICogU3VmZml4IHRvIGFkZCB0byB0aGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb25OYW1lU3VmZml4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpMThuIHBsYWNlaG9sZGVyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGVtcGxhdGUuXG4gICAqL1xuICBpMThuUGxhY2Vob2xkZXI/OiBpMThuLlRhZ1BsYWNlaG9sZGVyO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGBUZW1wbGF0ZU9wYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRlbXBsYXRlT3AoXG4gICAgeHJlZjogWHJlZklkLCB0YWc6IHN0cmluZ3xudWxsLCBmdW5jdGlvbk5hbWVTdWZmaXg6IHN0cmluZywgbmFtZXNwYWNlOiBOYW1lc3BhY2UsXG4gICAgaTE4blBsYWNlaG9sZGVyOiBpMThuLlRhZ1BsYWNlaG9sZGVyfHVuZGVmaW5lZCwgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFuKTogVGVtcGxhdGVPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLlRlbXBsYXRlLFxuICAgIHhyZWYsXG4gICAgYXR0cmlidXRlczogbnVsbCxcbiAgICB0YWcsXG4gICAgaGFuZGxlOiBuZXcgU2xvdEhhbmRsZSgpLFxuICAgIGZ1bmN0aW9uTmFtZVN1ZmZpeCxcbiAgICBkZWNsczogbnVsbCxcbiAgICB2YXJzOiBudWxsLFxuICAgIGxvY2FsUmVmczogW10sXG4gICAgbm9uQmluZGFibGU6IGZhbHNlLFxuICAgIG5hbWVzcGFjZSxcbiAgICBpMThuUGxhY2Vob2xkZXIsXG4gICAgc291cmNlU3BhbixcbiAgICAuLi5UUkFJVF9DT05TVU1FU19TTE9ULFxuICAgIC4uLk5FV19PUCxcbiAgfTtcbn1cblxuLyoqXG4gKiBBbiBvcCB0aGF0IGNyZWF0ZXMgYSByZXBlYXRlciAoZS5nLiBhIGZvciBsb29wKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBlYXRlckNyZWF0ZU9wIGV4dGVuZHMgRWxlbWVudE9wQmFzZSB7XG4gIGtpbmQ6IE9wS2luZC5SZXBlYXRlckNyZWF0ZTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBkZWNsYXJhdGlvbiBzbG90cyB1c2VkIGJ5IHRoaXMgcmVwZWF0ZXIncyB0ZW1wbGF0ZSwgb3IgYG51bGxgIGlmIHNsb3RzIGhhdmUgbm90XG4gICAqIHlldCBiZWVuIGFzc2lnbmVkLlxuICAgKi9cbiAgZGVjbHM6IG51bWJlcnxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGJpbmRpbmcgdmFyaWFibGUgc2xvdHMgdXNlZCBieSB0aGlzIHJlcGVhdGVyJ3MsIG9yIGBudWxsYCBpZiBiaW5kaW5nIHZhcmlhYmxlc1xuICAgKiBoYXZlIG5vdCB5ZXQgYmVlbiBjb3VudGVkLlxuICAgKi9cbiAgdmFyczogbnVtYmVyfG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBYcmVmIG9mIHRoZSBlbXB0eSB2aWV3IGZ1bmN0aW9uLiAoRm9yIHRoZSBwcmltYXJ5IHZpZXcgZnVuY3Rpb24sIHVzZSB0aGUgYHhyZWZgIHByb3BlcnR5KS5cbiAgICovXG4gIGVtcHR5VmlldzogWHJlZklkfG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFjayBleHByZXNzaW9uIHRvIHVzZSB3aGlsZSBpdGVyYXRpbmcuXG4gICAqL1xuICB0cmFjazogby5FeHByZXNzaW9uO1xuXG4gIC8qKlxuICAgKiBgbnVsbGAgaW5pdGlhbGx5LCB0aGVuIGFuIGBvLkV4cHJlc3Npb25gLiBNaWdodCBiZSBhIHRyYWNrIGV4cHJlc3Npb24sIG9yIG1pZ2h0IGJlIGEgcmVmZXJlbmNlXG4gICAqIGludG8gdGhlIGNvbnN0YW50IHBvb2wuXG4gICAqL1xuICB0cmFja0J5Rm46IG8uRXhwcmVzc2lvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBDb250ZXh0IHZhcmlhYmxlcyBhdmFpYWxhYmxlIGluIHRoaXMgYmxvY2suXG4gICAqL1xuICB2YXJOYW1lczogUmVwZWF0ZXJWYXJOYW1lcztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcmVwZWF0ZXIgdHJhY2sgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAqL1xuICB1c2VzQ29tcG9uZW50SW5zdGFuY2U6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFN1ZmZpeCB0byBhZGQgdG8gdGhlIG5hbWUgb2YgdGhlIGdlbmVyYXRlZCB0ZW1wbGF0ZSBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uTmFtZVN1ZmZpeDogc3RyaW5nO1xuXG4gIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbjtcbn1cblxuLy8gVE9ETzogYWRkIHNvdXJjZSBzcGFucz9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwZWF0ZXJWYXJOYW1lcyB7XG4gICRpbmRleDogc3RyaW5nO1xuICAkY291bnQ6IHN0cmluZztcbiAgJGZpcnN0OiBzdHJpbmc7XG4gICRsYXN0OiBzdHJpbmc7XG4gICRldmVuOiBzdHJpbmc7XG4gICRvZGQ6IHN0cmluZztcbiAgJGltcGxpY2l0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXBlYXRlckNyZWF0ZU9wKFxuICAgIHByaW1hcnlWaWV3OiBYcmVmSWQsIGVtcHR5VmlldzogWHJlZklkfG51bGwsIHRhZzogc3RyaW5nfG51bGwsIHRyYWNrOiBvLkV4cHJlc3Npb24sXG4gICAgdmFyTmFtZXM6IFJlcGVhdGVyVmFyTmFtZXMsIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbik6IFJlcGVhdGVyQ3JlYXRlT3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IE9wS2luZC5SZXBlYXRlckNyZWF0ZSxcbiAgICBhdHRyaWJ1dGVzOiBudWxsLFxuICAgIHhyZWY6IHByaW1hcnlWaWV3LFxuICAgIGhhbmRsZTogbmV3IFNsb3RIYW5kbGUoKSxcbiAgICBlbXB0eVZpZXcsXG4gICAgdHJhY2ssXG4gICAgdHJhY2tCeUZuOiBudWxsLFxuICAgIHRhZyxcbiAgICBmdW5jdGlvbk5hbWVTdWZmaXg6ICdGb3InLFxuICAgIG5hbWVzcGFjZTogTmFtZXNwYWNlLkhUTUwsXG4gICAgbm9uQmluZGFibGU6IGZhbHNlLFxuICAgIGxvY2FsUmVmczogW10sXG4gICAgZGVjbHM6IG51bGwsXG4gICAgdmFyczogbnVsbCxcbiAgICB2YXJOYW1lcyxcbiAgICB1c2VzQ29tcG9uZW50SW5zdGFuY2U6IGZhbHNlLFxuICAgIHNvdXJjZVNwYW4sXG4gICAgLi4uVFJBSVRfQ09OU1VNRVNfU0xPVCxcbiAgICAuLi5ORVdfT1AsXG4gICAgbnVtU2xvdHNVc2VkOiBlbXB0eVZpZXcgPT09IG51bGwgPyAyIDogMyxcbiAgfTtcbn1cblxuLyoqXG4gKiBMb2dpY2FsIG9wZXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGVuZCBvZiBhbiBlbGVtZW50IHN0cnVjdHVyZSBpbiB0aGUgY3JlYXRpb24gSVIuXG4gKlxuICogUGFpcnMgd2l0aCBhbiBgRWxlbWVudFN0YXJ0YCBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudEVuZE9wIGV4dGVuZHMgT3A8Q3JlYXRlT3A+IHtcbiAga2luZDogT3BLaW5kLkVsZW1lbnRFbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBgWHJlZklkYCBvZiB0aGUgZWxlbWVudCBkZWNsYXJlZCB2aWEgYEVsZW1lbnRTdGFydGAuXG4gICAqL1xuICB4cmVmOiBYcmVmSWQ7XG5cbiAgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFufG51bGw7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGBFbGVtZW50RW5kT3BgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxlbWVudEVuZE9wKHhyZWY6IFhyZWZJZCwgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFufG51bGwpOiBFbGVtZW50RW5kT3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IE9wS2luZC5FbGVtZW50RW5kLFxuICAgIHhyZWYsXG4gICAgc291cmNlU3BhbixcbiAgICAuLi5ORVdfT1AsXG4gIH07XG59XG5cbi8qKlxuICogTG9naWNhbCBvcGVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSBzdGFydCBvZiBhIGNvbnRhaW5lciBpbiB0aGUgY3JlYXRpb24gSVIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyU3RhcnRPcCBleHRlbmRzIEVsZW1lbnRPckNvbnRhaW5lck9wQmFzZSB7XG4gIGtpbmQ6IE9wS2luZC5Db250YWluZXJTdGFydDtcbn1cblxuLyoqXG4gKiBMb2dpY2FsIG9wZXJhdGlvbiByZXByZXNlbnRpbmcgYW4gZW1wdHkgY29udGFpbmVyIGluIHRoZSBjcmVhdGlvbiBJUi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250YWluZXJPcCBleHRlbmRzIEVsZW1lbnRPckNvbnRhaW5lck9wQmFzZSB7XG4gIGtpbmQ6IE9wS2luZC5Db250YWluZXI7XG59XG5cbi8qKlxuICogTG9naWNhbCBvcGVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSBlbmQgb2YgYSBjb250YWluZXIgc3RydWN0dXJlIGluIHRoZSBjcmVhdGlvbiBJUi5cbiAqXG4gKiBQYWlycyB3aXRoIGFuIGBDb250YWluZXJTdGFydGAgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckVuZE9wIGV4dGVuZHMgT3A8Q3JlYXRlT3A+IHtcbiAga2luZDogT3BLaW5kLkNvbnRhaW5lckVuZDtcblxuICAvKipcbiAgICogVGhlIGBYcmVmSWRgIG9mIHRoZSBlbGVtZW50IGRlY2xhcmVkIHZpYSBgQ29udGFpbmVyU3RhcnRgLlxuICAgKi9cbiAgeHJlZjogWHJlZklkO1xuXG4gIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbjtcbn1cblxuLyoqXG4gKiBMb2dpY2FsIG9wZXJhdGlvbiBjYXVzaW5nIGJpbmRpbmcgdG8gYmUgZGlzYWJsZWQgaW4gZGVzY2VuZGVudHMgb2YgYSBub24tYmluZGFibGUgY29udGFpbmVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc2FibGVCaW5kaW5nc09wIGV4dGVuZHMgT3A8Q3JlYXRlT3A+IHtcbiAga2luZDogT3BLaW5kLkRpc2FibGVCaW5kaW5ncztcblxuICAvKipcbiAgICogYFhyZWZJZGAgb2YgdGhlIGVsZW1lbnQgdGhhdCB3YXMgbWFya2VkIG5vbi1iaW5kYWJsZS5cbiAgICovXG4gIHhyZWY6IFhyZWZJZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpc2FibGVCaW5kaW5nc09wKHhyZWY6IFhyZWZJZCk6IERpc2FibGVCaW5kaW5nc09wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBPcEtpbmQuRGlzYWJsZUJpbmRpbmdzLFxuICAgIHhyZWYsXG4gICAgLi4uTkVXX09QLFxuICB9O1xufVxuXG4vKipcbiAqIExvZ2ljYWwgb3BlcmF0aW9uIGNhdXNpbmcgYmluZGluZyB0byBiZSByZS1lbmFibGVkIGFmdGVyIHZpc2l0aW5nIGRlc2NlbmRhbnRzIG9mIGFcbiAqIG5vbi1iaW5kYWJsZSBjb250YWluZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5hYmxlQmluZGluZ3NPcCBleHRlbmRzIE9wPENyZWF0ZU9wPiB7XG4gIGtpbmQ6IE9wS2luZC5FbmFibGVCaW5kaW5ncztcblxuICAvKipcbiAgICogYFhyZWZJZGAgb2YgdGhlIGVsZW1lbnQgdGhhdCB3YXMgbWFya2VkIG5vbi1iaW5kYWJsZS5cbiAgICovXG4gIHhyZWY6IFhyZWZJZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVuYWJsZUJpbmRpbmdzT3AoeHJlZjogWHJlZklkKTogRW5hYmxlQmluZGluZ3NPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLkVuYWJsZUJpbmRpbmdzLFxuICAgIHhyZWYsXG4gICAgLi4uTkVXX09QLFxuICB9O1xufVxuXG4vKipcbiAqIExvZ2ljYWwgb3BlcmF0aW9uIHJlcHJlc2VudGluZyBhIHRleHQgbm9kZSBpbiB0aGUgY3JlYXRpb24gSVIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dE9wIGV4dGVuZHMgT3A8Q3JlYXRlT3A+LCBDb25zdW1lc1Nsb3RPcFRyYWl0IHtcbiAga2luZDogT3BLaW5kLlRleHQ7XG5cbiAgLyoqXG4gICAqIGBYcmVmSWRgIHVzZWQgdG8gcmVmZXJlbmNlIHRoaXMgdGV4dCBub2RlIGluIG90aGVyIElSIHN0cnVjdHVyZXMuXG4gICAqL1xuICB4cmVmOiBYcmVmSWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0aWMgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgdGV4dCBub2RlLlxuICAgKi9cbiAgaW5pdGlhbFZhbHVlOiBzdHJpbmc7XG5cbiAgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFufG51bGw7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYFRleHRPcGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUZXh0T3AoXG4gICAgeHJlZjogWHJlZklkLCBpbml0aWFsVmFsdWU6IHN0cmluZywgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFufG51bGwpOiBUZXh0T3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IE9wS2luZC5UZXh0LFxuICAgIHhyZWYsXG4gICAgaGFuZGxlOiBuZXcgU2xvdEhhbmRsZSgpLFxuICAgIGluaXRpYWxWYWx1ZSxcbiAgICBzb3VyY2VTcGFuLFxuICAgIC4uLlRSQUlUX0NPTlNVTUVTX1NMT1QsXG4gICAgLi4uTkVXX09QLFxuICB9O1xufVxuXG4vKipcbiAqIExvZ2ljYWwgb3BlcmF0aW9uIHJlcHJlc2VudGluZyBhbiBldmVudCBsaXN0ZW5lciBvbiBhbiBlbGVtZW50IGluIHRoZSBjcmVhdGlvbiBJUi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXN0ZW5lck9wIGV4dGVuZHMgT3A8Q3JlYXRlT3A+IHtcbiAga2luZDogT3BLaW5kLkxpc3RlbmVyO1xuXG4gIHRhcmdldDogWHJlZklkO1xuICB0YXJnZXRTbG90OiBTbG90SGFuZGxlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgbGlzdGVuZXIgaXMgZnJvbSBhIGhvc3QgYmluZGluZy5cbiAgICovXG4gIGhvc3RMaXN0ZW5lcjogYm9vbGVhbjtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgZXZlbnQgd2hpY2ggaXMgYmVpbmcgbGlzdGVuZWQgdG8uXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRhZyBuYW1lIG9mIHRoZSBlbGVtZW50IG9uIHdoaWNoIHRoaXMgbGlzdGVuZXIgaXMgcGxhY2VkLiBNaWdodCBiZSBudWxsLCBpZiB0aGlzIGxpc3RlbmVyXG4gICAqIGJlbG9uZ3MgdG8gYSBob3N0IGJpbmRpbmcuXG4gICAqL1xuICB0YWc6IHN0cmluZ3xudWxsO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgYFVwZGF0ZU9wYHMgcmVwcmVzZW50aW5nIHRoZSBib2R5IG9mIHRoZSBldmVudCBsaXN0ZW5lci5cbiAgICovXG4gIGhhbmRsZXJPcHM6IE9wTGlzdDxVcGRhdGVPcD47XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGZ1bmN0aW9uXG4gICAqL1xuICBoYW5kbGVyRm5OYW1lOiBzdHJpbmd8bnVsbDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGxpc3RlbmVyIGlzIGtub3duIHRvIGNvbnN1bWUgYCRldmVudGAgaW4gaXRzIGJvZHkuXG4gICAqL1xuICBjb25zdW1lc0RvbGxhckV2ZW50OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBsaXN0ZW5lciBpcyBsaXN0ZW5pbmcgZm9yIGFuIGFuaW1hdGlvbiBldmVudC5cbiAgICovXG4gIGlzQW5pbWF0aW9uTGlzdGVuZXI6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBhbmltYXRpb24gcGhhc2Ugb2YgdGhlIGxpc3RlbmVyLlxuICAgKi9cbiAgYW5pbWF0aW9uUGhhc2U6IHN0cmluZ3xudWxsO1xuXG4gIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBgTGlzdGVuZXJPcGAuIEhvc3QgYmluZGluZ3MgcmV1c2UgYWxsIHRoZSBsaXN0ZW5lciBsb2dpYy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyT3AoXG4gICAgdGFyZ2V0OiBYcmVmSWQsIHRhcmdldFNsb3Q6IFNsb3RIYW5kbGUsIG5hbWU6IHN0cmluZywgdGFnOiBzdHJpbmd8bnVsbCxcbiAgICBhbmltYXRpb25QaGFzZTogc3RyaW5nfG51bGwsIGhvc3RMaXN0ZW5lcjogYm9vbGVhbiwgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFuKTogTGlzdGVuZXJPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLkxpc3RlbmVyLFxuICAgIHRhcmdldCxcbiAgICB0YXJnZXRTbG90LFxuICAgIHRhZyxcbiAgICBob3N0TGlzdGVuZXIsXG4gICAgbmFtZSxcbiAgICBoYW5kbGVyT3BzOiBuZXcgT3BMaXN0KCksXG4gICAgaGFuZGxlckZuTmFtZTogbnVsbCxcbiAgICBjb25zdW1lc0RvbGxhckV2ZW50OiBmYWxzZSxcbiAgICBpc0FuaW1hdGlvbkxpc3RlbmVyOiBhbmltYXRpb25QaGFzZSAhPT0gbnVsbCxcbiAgICBhbmltYXRpb25QaGFzZTogYW5pbWF0aW9uUGhhc2UsXG4gICAgc291cmNlU3BhbixcbiAgICAuLi5ORVdfT1AsXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZU9wIGV4dGVuZHMgT3A8Q3JlYXRlT3A+LCBDb25zdW1lc1Nsb3RPcFRyYWl0IHtcbiAga2luZDogT3BLaW5kLlBpcGU7XG4gIHhyZWY6IFhyZWZJZDtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGlwZU9wKHhyZWY6IFhyZWZJZCwgc2xvdDogU2xvdEhhbmRsZSwgbmFtZTogc3RyaW5nKTogUGlwZU9wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBPcEtpbmQuUGlwZSxcbiAgICB4cmVmLFxuICAgIGhhbmRsZTogc2xvdCxcbiAgICBuYW1lLFxuICAgIC4uLk5FV19PUCxcbiAgICAuLi5UUkFJVF9DT05TVU1FU19TTE9ULFxuICB9O1xufVxuXG4vKipcbiAqIEFuIG9wIGNvcnJlc3BvbmRpbmcgdG8gYSBuYW1lc3BhY2UgaW5zdHJ1Y3Rpb24sIGZvciBzd2l0Y2hpbmcgYmV0d2VlbiBIVE1MLCBTVkcsIGFuZCBNYXRoTUwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmFtZXNwYWNlT3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4ge1xuICBraW5kOiBPcEtpbmQuTmFtZXNwYWNlO1xuICBhY3RpdmU6IE5hbWVzcGFjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU5hbWVzcGFjZU9wKG5hbWVzcGFjZTogTmFtZXNwYWNlKTogTmFtZXNwYWNlT3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IE9wS2luZC5OYW1lc3BhY2UsXG4gICAgYWN0aXZlOiBuYW1lc3BhY2UsXG4gICAgLi4uTkVXX09QLFxuICB9O1xufVxuXG4vKipcbiAqIEFuIG9wIHRoYXQgY3JlYXRlcyBhIGNvbnRlbnQgcHJvamVjdGlvbiBzbG90LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2plY3Rpb25EZWZPcCBleHRlbmRzIE9wPENyZWF0ZU9wPiB7XG4gIGtpbmQ6IE9wS2luZC5Qcm9qZWN0aW9uRGVmO1xuXG4gIC8vIFRoZSBwYXJzZWQgc2VsZWN0b3IgaW5mb3JtYXRpb24gZm9yIHRoaXMgcHJvamVjdGlvbiBkZWYuXG4gIGRlZjogby5FeHByZXNzaW9ufG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0aW9uRGVmT3AoZGVmOiBvLkV4cHJlc3Npb258bnVsbCk6IFByb2plY3Rpb25EZWZPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLlByb2plY3Rpb25EZWYsXG4gICAgZGVmLFxuICAgIC4uLk5FV19PUCxcbiAgfTtcbn1cblxuLyoqXG4gKiBBbiBvcCB0aGF0IGNyZWF0ZXMgYSBjb250ZW50IHByb2plY3Rpb24gc2xvdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0aW9uT3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4sIENvbnN1bWVzU2xvdE9wVHJhaXQge1xuICBraW5kOiBPcEtpbmQuUHJvamVjdGlvbjtcblxuICB4cmVmOiBYcmVmSWQ7XG5cbiAgcHJvamVjdGlvblNsb3RJbmRleDogbnVtYmVyO1xuXG4gIGF0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuXG4gIGxvY2FsUmVmczogc3RyaW5nW107XG5cbiAgc2VsZWN0b3I6IHN0cmluZztcblxuICBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0aW9uT3AoXG4gICAgeHJlZjogWHJlZklkLCBzZWxlY3Rvcjogc3RyaW5nLCBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW4pOiBQcm9qZWN0aW9uT3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IE9wS2luZC5Qcm9qZWN0aW9uLFxuICAgIHhyZWYsXG4gICAgaGFuZGxlOiBuZXcgU2xvdEhhbmRsZSgpLFxuICAgIHNlbGVjdG9yLFxuICAgIHByb2plY3Rpb25TbG90SW5kZXg6IDAsXG4gICAgYXR0cmlidXRlczogW10sXG4gICAgbG9jYWxSZWZzOiBbXSxcbiAgICBzb3VyY2VTcGFuLFxuICAgIC4uLk5FV19PUCxcbiAgICAuLi5UUkFJVF9DT05TVU1FU19TTE9ULFxuICB9O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gYXR0cmlidXRlIHRoYXQgaGFzIGJlZW4gZXh0cmFjdGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIGNvbnN0cyBhcnJheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRyYWN0ZWRBdHRyaWJ1dGVPcCBleHRlbmRzIE9wPENyZWF0ZU9wPiB7XG4gIGtpbmQ6IE9wS2luZC5FeHRyYWN0ZWRBdHRyaWJ1dGU7XG5cbiAgLyoqXG4gICAqIFRoZSBgWHJlZklkYCBvZiB0aGUgdGVtcGxhdGUtbGlrZSBlbGVtZW50IHRoZSBleHRyYWN0ZWQgYXR0cmlidXRlIHdpbGwgYmVsb25nIHRvLlxuICAgKi9cbiAgdGFyZ2V0OiBYcmVmSWQ7XG5cbiAgLyoqXG4gICAqICBUaGUga2luZCBvZiBiaW5kaW5nIHJlcHJlc2VudGVkIGJ5IHRoaXMgZXh0cmFjdGVkIGF0dHJpYnV0ZS5cbiAgICovXG4gIGJpbmRpbmdLaW5kOiBCaW5kaW5nS2luZDtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGV4dHJhY3RlZCBhdHRyaWJ1dGUuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBleHByZXNzaW9uIG9mIHRoZSBleHRyYWN0ZWQgYXR0cmlidXRlLlxuICAgKi9cbiAgZXhwcmVzc2lvbjogby5FeHByZXNzaW9ufG51bGw7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGBFeHRyYWN0ZWRBdHRyaWJ1dGVPcGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFeHRyYWN0ZWRBdHRyaWJ1dGVPcChcbiAgICB0YXJnZXQ6IFhyZWZJZCwgYmluZGluZ0tpbmQ6IEJpbmRpbmdLaW5kLCBuYW1lOiBzdHJpbmcsXG4gICAgZXhwcmVzc2lvbjogby5FeHByZXNzaW9ufG51bGwpOiBFeHRyYWN0ZWRBdHRyaWJ1dGVPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLkV4dHJhY3RlZEF0dHJpYnV0ZSxcbiAgICB0YXJnZXQsXG4gICAgYmluZGluZ0tpbmQsXG4gICAgbmFtZSxcbiAgICBleHByZXNzaW9uLFxuICAgIC4uLk5FV19PUCxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWZlck9wIGV4dGVuZHMgT3A8Q3JlYXRlT3A+LCBDb25zdW1lc1Nsb3RPcFRyYWl0IHtcbiAga2luZDogT3BLaW5kLkRlZmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgeHJlZiBvZiB0aGlzIGRlZmVyIG9wLlxuICAgKi9cbiAgeHJlZjogWHJlZklkO1xuXG4gIC8qKlxuICAgKiBUaGUgeHJlZiBvZiB0aGUgbWFpbiB2aWV3LlxuICAgKi9cbiAgbWFpblZpZXc6IFhyZWZJZDtcblxuICBtYWluU2xvdDogU2xvdEhhbmRsZTtcblxuICAvKipcbiAgICogU2Vjb25kYXJ5IGxvYWRpbmcgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVmZXIgb3AuXG4gICAqL1xuICBsb2FkaW5nVmlldzogWHJlZklkfG51bGw7XG5cbiAgbG9hZGluZ1Nsb3Q6IFNsb3RIYW5kbGV8bnVsbDtcblxuICAvKipcbiAgICogU2Vjb25kYXJ5IHBsYWNlaG9sZGVyIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlZmVyIG9wLlxuICAgKi9cbiAgcGxhY2Vob2xkZXJWaWV3OiBYcmVmSWR8bnVsbDtcblxuICBwbGFjZWhvbGRlclNsb3Q6IFNsb3RIYW5kbGV8bnVsbDtcblxuICAvKipcbiAgICogU2Vjb25kYXJ5IGVycm9yIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlZmVyIG9wLlxuICAgKi9cbiAgZXJyb3JWaWV3OiBYcmVmSWR8bnVsbDtcblxuICBlcnJvclNsb3Q6IFNsb3RIYW5kbGV8bnVsbDtcblxuICBwbGFjZWhvbGRlck1pbmltdW1UaW1lOiBudW1iZXJ8bnVsbDtcbiAgbG9hZGluZ01pbmltdW1UaW1lOiBudW1iZXJ8bnVsbDtcbiAgbG9hZGluZ0FmdGVyVGltZTogbnVtYmVyfG51bGw7XG5cbiAgcGxhY2Vob2xkZXJDb25maWc6IG8uRXhwcmVzc2lvbnxudWxsO1xuICBsb2FkaW5nQ29uZmlnOiBvLkV4cHJlc3Npb258bnVsbDtcblxuICAvKipcbiAgICogTWV0YWRhdGEgYWJvdXQgdGhpcyBkZWZlciBibG9jaywgcHJvdmlkZWQgYnkgdGhlIHBhcnNlci5cbiAgICovXG4gIG1ldGFkYXRhOiBSM0RlZmVyQmxvY2tNZXRhZGF0YTtcblxuICAvKipcbiAgICogQWZ0ZXIgcHJvY2Vzc2luZywgdGhlIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgZGVmZXIgZGVwcyB3aWxsIGJlIGV4dHJhY3RlZCB0byB0aGUgY29uc3RhbnRcbiAgICogcG9vbCwgYW5kIGEgcmVmZXJlbmNlIHRvIHRoYXQgZnVuY3Rpb24gd2lsbCBiZSBwb3B1bGF0ZWQgaGVyZS5cbiAgICovXG4gIHJlc29sdmVyRm46IG8uRXhwcmVzc2lvbnxudWxsO1xuXG4gIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmVyT3AoXG4gICAgeHJlZjogWHJlZklkLCBtYWluOiBYcmVmSWQsIG1haW5TbG90OiBTbG90SGFuZGxlLCBtZXRhZGF0YTogUjNEZWZlckJsb2NrTWV0YWRhdGEsXG4gICAgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFuKTogRGVmZXJPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLkRlZmVyLFxuICAgIHhyZWYsXG4gICAgaGFuZGxlOiBuZXcgU2xvdEhhbmRsZSgpLFxuICAgIG1haW5WaWV3OiBtYWluLFxuICAgIG1haW5TbG90LFxuICAgIGxvYWRpbmdWaWV3OiBudWxsLFxuICAgIGxvYWRpbmdTbG90OiBudWxsLFxuICAgIGxvYWRpbmdDb25maWc6IG51bGwsXG4gICAgbG9hZGluZ01pbmltdW1UaW1lOiBudWxsLFxuICAgIGxvYWRpbmdBZnRlclRpbWU6IG51bGwsXG4gICAgcGxhY2Vob2xkZXJWaWV3OiBudWxsLFxuICAgIHBsYWNlaG9sZGVyU2xvdDogbnVsbCxcbiAgICBwbGFjZWhvbGRlckNvbmZpZzogbnVsbCxcbiAgICBwbGFjZWhvbGRlck1pbmltdW1UaW1lOiBudWxsLFxuICAgIGVycm9yVmlldzogbnVsbCxcbiAgICBlcnJvclNsb3Q6IG51bGwsXG4gICAgbWV0YWRhdGEsXG4gICAgcmVzb2x2ZXJGbjogbnVsbCxcbiAgICBzb3VyY2VTcGFuLFxuICAgIC4uLk5FV19PUCxcbiAgICAuLi5UUkFJVF9DT05TVU1FU19TTE9ULFxuICAgIG51bVNsb3RzVXNlZDogMixcbiAgfTtcbn1cbmludGVyZmFjZSBEZWZlclRyaWdnZXJCYXNlIHtcbiAga2luZDogRGVmZXJUcmlnZ2VyS2luZDtcbn1cblxuaW50ZXJmYWNlIERlZmVyVHJpZ2dlcldpdGhUYXJnZXRCYXNlIGV4dGVuZHMgRGVmZXJUcmlnZ2VyQmFzZSB7XG4gIHRhcmdldE5hbWU6IHN0cmluZ3xudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgWHJlZiBvZiB0aGUgdGFyZ2V0ZWQgbmFtZS4gTWF5IGJlIGluIGEgZGlmZmVyZW50IHZpZXcuXG4gICAqL1xuICB0YXJnZXRYcmVmOiBYcmVmSWR8bnVsbDtcblxuICAvKipcbiAgICogVGhlIHNsb3QgaW5kZXggb2YgdGhlIG5hbWVkIHJlZmVyZW5jZSwgaW5zaWRlIHRoZSB2aWV3IHByb3ZpZGVkIGJlbG93LiBUaGlzIHNsb3QgbWF5IG5vdCBiZVxuICAgKiBpbnNpZGUgdGhlIGN1cnJlbnQgdmlldywgYW5kIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIGEgcmVzdWx0LlxuICAgKi9cbiAgdGFyZ2V0U2xvdDogU2xvdEhhbmRsZXxudWxsO1xuXG4gIHRhcmdldFZpZXc6IFhyZWZJZHxudWxsO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc3RlcHMgdG8gd2FsayB1cCBvciBkb3duIHRoZSB2aWV3IHRyZWUgdG8gZmluZCB0aGUgdGFyZ2V0IGxvY2FsUmVmLlxuICAgKi9cbiAgdGFyZ2V0U2xvdFZpZXdTdGVwczogbnVtYmVyfG51bGw7XG59XG5cbmludGVyZmFjZSBEZWZlcklkbGVUcmlnZ2VyIGV4dGVuZHMgRGVmZXJUcmlnZ2VyQmFzZSB7XG4gIGtpbmQ6IERlZmVyVHJpZ2dlcktpbmQuSWRsZTtcbn1cblxuaW50ZXJmYWNlIERlZmVySW1tZWRpYXRlVHJpZ2dlciBleHRlbmRzIERlZmVyVHJpZ2dlckJhc2Uge1xuICBraW5kOiBEZWZlclRyaWdnZXJLaW5kLkltbWVkaWF0ZTtcbn1cblxuaW50ZXJmYWNlIERlZmVySG92ZXJUcmlnZ2VyIGV4dGVuZHMgRGVmZXJUcmlnZ2VyV2l0aFRhcmdldEJhc2Uge1xuICBraW5kOiBEZWZlclRyaWdnZXJLaW5kLkhvdmVyO1xufVxuXG5pbnRlcmZhY2UgRGVmZXJUaW1lclRyaWdnZXIgZXh0ZW5kcyBEZWZlclRyaWdnZXJCYXNlIHtcbiAga2luZDogRGVmZXJUcmlnZ2VyS2luZC5UaW1lcjtcblxuICBkZWxheTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRGVmZXJJbnRlcmFjdGlvblRyaWdnZXIgZXh0ZW5kcyBEZWZlclRyaWdnZXJXaXRoVGFyZ2V0QmFzZSB7XG4gIGtpbmQ6IERlZmVyVHJpZ2dlcktpbmQuSW50ZXJhY3Rpb247XG59XG5cbmludGVyZmFjZSBEZWZlclZpZXdwb3J0VHJpZ2dlciBleHRlbmRzIERlZmVyVHJpZ2dlcldpdGhUYXJnZXRCYXNlIHtcbiAga2luZDogRGVmZXJUcmlnZ2VyS2luZC5WaWV3cG9ydDtcbn1cblxuLyoqXG4gKiBUaGUgdW5pb24gdHlwZSBvZiBhbGwgZGVmZXIgdHJpZ2dlciBpbnRlcmZhY2VzLlxuICovXG5leHBvcnQgdHlwZSBEZWZlclRyaWdnZXIgPSBEZWZlcklkbGVUcmlnZ2VyfERlZmVySW1tZWRpYXRlVHJpZ2dlcnxEZWZlclRpbWVyVHJpZ2dlcnxcbiAgICBEZWZlckhvdmVyVHJpZ2dlcnxEZWZlckludGVyYWN0aW9uVHJpZ2dlcnxEZWZlclZpZXdwb3J0VHJpZ2dlcjtcblxuZXhwb3J0IGludGVyZmFjZSBEZWZlck9uT3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4ge1xuICBraW5kOiBPcEtpbmQuRGVmZXJPbjtcblxuICBkZWZlcjogWHJlZklkO1xuXG4gIC8qKlxuICAgKiBUaGUgdHJpZ2dlciBmb3IgdGhpcyBkZWZlciBvcCAoZS5nLiBpZGxlLCBob3ZlciwgZXRjKS5cbiAgICovXG4gIHRyaWdnZXI6IERlZmVyVHJpZ2dlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbWl0IHRoZSBwcmVmZXRjaCB2ZXJzaW9uIG9mIHRoZSBpbnN0cnVjdGlvbi5cbiAgICovXG4gIHByZWZldGNoOiBib29sZWFuO1xuXG4gIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmVyT25PcChcbiAgICBkZWZlcjogWHJlZklkLCB0cmlnZ2VyOiBEZWZlclRyaWdnZXIsIHByZWZldGNoOiBib29sZWFuLFxuICAgIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbik6IERlZmVyT25PcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLkRlZmVyT24sXG4gICAgZGVmZXIsXG4gICAgdHJpZ2dlcixcbiAgICBwcmVmZXRjaCxcbiAgICBzb3VyY2VTcGFuLFxuICAgIC4uLk5FV19PUCxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIHZhbHVlIGluIGFuIGkxOG4gcGFyYW0gbWFwLiBFYWNoIHBsYWNlaG9sZGVyIGluIHRoZSBtYXAgbWF5IGhhdmUgbXVsdGlwbGUgb2ZcbiAqIHRoZXNlIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSTE4blBhcmFtVmFsdWUge1xuICAvKipcbiAgICogVGhlIHZhbHVlLlxuICAgKi9cbiAgdmFsdWU6IHN0cmluZ3xudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWItdGVtcGxhdGUgaW5kZXggYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZS5cbiAgICovXG4gIHN1YlRlbXBsYXRlSW5kZXg6IG51bWJlcnxudWxsO1xuXG4gIC8qKlxuICAgKiBGbGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlLlxuICAgKi9cbiAgZmxhZ3M6IEkxOG5QYXJhbVZhbHVlRmxhZ3M7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBpMThuIG1lc3NhZ2UgdGhhdCBoYXMgYmVlbiBleHRyYWN0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgY29uc3RzIGFycmF5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEkxOG5NZXNzYWdlT3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4ge1xuICBraW5kOiBPcEtpbmQuSTE4bk1lc3NhZ2U7XG5cbiAgLyoqXG4gICAqIEFuIGlkIHVzZWQgdG8gcmVmZXJlbmNlIHRoaXMgbWVzc2FnZS5cbiAgICovXG4gIHhyZWY6IFhyZWZJZDtcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gdGhlIGkxOG4gb3AgdGhpcyBtZXNzYWdlIHdhcyBleHRyYWN0ZWQgZnJvbS5cbiAgICovXG4gIGkxOG5CbG9jazogWHJlZklkO1xuXG4gIC8qKlxuICAgKiBUaGUgaTE4biBtZXNzYWdlIHJlcHJlc2VudGVkIGJ5IHRoaXMgb3AuXG4gICAqL1xuICBtZXNzYWdlOiBpMThuLk1lc3NhZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBwbGFjZWhvbGRlciB1c2VkIGZvciB0aGlzIG1lc3NhZ2Ugd2hlbiBpdCBpcyByZWZlcmVuY2VkIGluIGFub3RoZXIgbWVzc2FnZS5cbiAgICogRm9yIGEgdG9wLWxldmVsIG1lc3NhZ2UgdGhhdCBpc24ndCByZWZlcmVuY2VkIGZyb20gYW5vdGhlciBtZXNzYWdlLCB0aGlzIHdpbGwgYmUgbnVsbC5cbiAgICovXG4gIG1lc3NhZ2VQbGFjZWhvbGRlcjogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBtZXNzYWdlIG5lZWRzIHBvc3QtcHJvY2Vzc2luZy5cbiAgICovXG4gIG5lZWRzUG9zdHByb2Nlc3Npbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbSBtYXAsIHdpdGggcGxhY2Vob2xkZXJzIHJlcHJlc2VudGVkIGFzIGFuIGBFeHByZXNzaW9uYC5cbiAgICovXG4gIHBhcmFtczogTWFwPHN0cmluZywgby5FeHByZXNzaW9uPjtcblxuICAvKipcbiAgICogVGhlIHBvc3QtcHJvY2Vzc2luZyBwYXJhbSBtYXAsIHdpdGggcGxhY2Vob2xkZXJzIHJlcHJlc2VudGVkIGFzIGFuIGBFeHByZXNzaW9uYC5cbiAgICovXG4gIHBvc3Rwcm9jZXNzaW5nUGFyYW1zOiBNYXA8c3RyaW5nLCBvLkV4cHJlc3Npb24+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2Ygc3ViLW1lc3NhZ2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgdGhpcyBtZXNzYWdlLlxuICAgKi9cbiAgc3ViTWVzc2FnZXM6IFhyZWZJZFtdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBgRXh0cmFjdGVkTWVzc2FnZU9wYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUkxOG5NZXNzYWdlT3AoXG4gICAgeHJlZjogWHJlZklkLCBpMThuQmxvY2s6IFhyZWZJZCwgbWVzc2FnZTogaTE4bi5NZXNzYWdlLCBtZXNzYWdlUGxhY2Vob2xkZXI6IHN0cmluZ3xudWxsLFxuICAgIHBhcmFtczogTWFwPHN0cmluZywgby5FeHByZXNzaW9uPiwgcG9zdHByb2Nlc3NpbmdQYXJhbXM6IE1hcDxzdHJpbmcsIG8uRXhwcmVzc2lvbj4sXG4gICAgbmVlZHNQb3N0cHJvY2Vzc2luZzogYm9vbGVhbik6IEkxOG5NZXNzYWdlT3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IE9wS2luZC5JMThuTWVzc2FnZSxcbiAgICB4cmVmLFxuICAgIGkxOG5CbG9jayxcbiAgICBtZXNzYWdlLFxuICAgIG1lc3NhZ2VQbGFjZWhvbGRlcixcbiAgICBwYXJhbXMsXG4gICAgcG9zdHByb2Nlc3NpbmdQYXJhbXMsXG4gICAgbmVlZHNQb3N0cHJvY2Vzc2luZyxcbiAgICBzdWJNZXNzYWdlczogW10sXG4gICAgLi4uTkVXX09QLFxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEkxOG5PcEJhc2UgZXh0ZW5kcyBPcDxDcmVhdGVPcD4sIENvbnN1bWVzU2xvdE9wVHJhaXQge1xuICBraW5kOiBPcEtpbmQuSTE4blN0YXJ0fE9wS2luZC5JMThuO1xuXG4gIC8qKlxuICAgKiBgWHJlZklkYCBhbGxvY2F0ZWQgZm9yIHRoaXMgaTE4biBibG9jay5cbiAgICovXG4gIHhyZWY6IFhyZWZJZDtcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gdGhlIHJvb3QgaTE4biBibG9jayB0aGF0IHRoaXMgb25lIGJlbG9uZ3MgdG8uIEZvciBhIHJvb3QgaTE4biBibG9jaywgdGhpcyBpc1xuICAgKiB0aGUgc2FtZSBhcyB4cmVmLlxuICAgKi9cbiAgcm9vdDogWHJlZklkO1xuXG4gIC8qKlxuICAgKiBUaGUgaTE4biBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBvcC5cbiAgICovXG4gIG1lc3NhZ2U6IGkxOG4uTWVzc2FnZTtcblxuICAvKipcbiAgICogVGhlIGluZGV4IGluIHRoZSBjb25zdHMgYXJyYXkgd2hlcmUgdGhlIG1lc3NhZ2UgaTE4biBtZXNzYWdlIGlzIHN0b3JlZC5cbiAgICovXG4gIG1lc3NhZ2VJbmRleDogQ29uc3RJbmRleHxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhpcyBzdWItYmxvY2sgaW4gdGhlIGkxOG4gbWVzc2FnZS4gRm9yIGEgcm9vdCBpMThuIGJsb2NrLCB0aGlzIGlzIG51bGwuXG4gICAqL1xuICBzdWJUZW1wbGF0ZUluZGV4OiBudW1iZXJ8bnVsbDtcblxuICAvKipcbiAgICogVGhlIGkxOG4gY29udGV4dCBnZW5lcmF0ZWQgZnJvbSB0aGlzIGJsb2NrLiBJbml0aWFsbHkgbnVsbCwgdW50aWwgdGhlIGNvbnRleHQgaXMgY3JlYXRlZC5cbiAgICovXG4gIGNvbnRleHQ6IFhyZWZJZHxudWxsO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gZW1wdHkgaTE4biBibG9jay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJMThuT3AgZXh0ZW5kcyBJMThuT3BCYXNlIHtcbiAga2luZDogT3BLaW5kLkkxOG47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgc3RhcnQgb2YgYW4gaTE4biBibG9jay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJMThuU3RhcnRPcCBleHRlbmRzIEkxOG5PcEJhc2Uge1xuICBraW5kOiBPcEtpbmQuSTE4blN0YXJ0O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBgSTE4blN0YXJ0T3BgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSTE4blN0YXJ0T3AoeHJlZjogWHJlZklkLCBtZXNzYWdlOiBpMThuLk1lc3NhZ2UsIHJvb3Q/OiBYcmVmSWQpOiBJMThuU3RhcnRPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLkkxOG5TdGFydCxcbiAgICB4cmVmLFxuICAgIGhhbmRsZTogbmV3IFNsb3RIYW5kbGUoKSxcbiAgICByb290OiByb290ID8/IHhyZWYsXG4gICAgbWVzc2FnZSxcbiAgICBtZXNzYWdlSW5kZXg6IG51bGwsXG4gICAgc3ViVGVtcGxhdGVJbmRleDogbnVsbCxcbiAgICBjb250ZXh0OiBudWxsLFxuICAgIC4uLk5FV19PUCxcbiAgICAuLi5UUkFJVF9DT05TVU1FU19TTE9ULFxuICB9O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGVuZCBvZiBhbiBpMThuIGJsb2NrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEkxOG5FbmRPcCBleHRlbmRzIE9wPENyZWF0ZU9wPiB7XG4gIGtpbmQ6IE9wS2luZC5JMThuRW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgYFhyZWZJZGAgb2YgdGhlIGBJMThuU3RhcnRPcGAgdGhhdCBjcmVhdGVkIHRoaXMgYmxvY2suXG4gICAqL1xuICB4cmVmOiBYcmVmSWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGBJMThuRW5kT3BgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSTE4bkVuZE9wKHhyZWY6IFhyZWZJZCk6IEkxOG5FbmRPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLkkxOG5FbmQsXG4gICAgeHJlZixcbiAgICAuLi5ORVdfT1AsXG4gIH07XG59XG5cbi8qKlxuICogQW4gb3AgdGhhdCByZXByZXNlbnRzIHRoZSBzdGFydCBvZiBhbiBJQ1UgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJY3VTdGFydE9wIGV4dGVuZHMgT3A8Q3JlYXRlT3A+IHtcbiAga2luZDogT3BLaW5kLkljdVN0YXJ0O1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIElDVS5cbiAgICovXG4gIHhyZWY6IFhyZWZJZDtcblxuICAvKipcbiAgICogVGhlIGkxOG4gbWVzc2FnZSBmb3IgdGhpcyBJQ1UuXG4gICAqL1xuICBtZXNzYWdlOiBpMThuLk1lc3NhZ2U7XG5cbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIHVzZWQgdG8gcmVmZXJlbmNlIHRoaXMgSUNVIGluIG90aGVyIGkxOG4gbWVzc2FnZXMuXG4gICAqL1xuICBtZXNzYWdlUGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gdGhlIGkxOG4gY29udGV4dCBmb3IgdGhpcyBvcC4gSW5pdGlhbGx5IG51bGwsIHVudGlsIHRoZSBjb250ZXh0IGlzIGNyZWF0ZWQuXG4gICAqL1xuICBjb250ZXh0OiBYcmVmSWR8bnVsbDtcblxuICBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW47XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBJQ1Ugc3RhcnQgb3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJY3VTdGFydE9wKFxuICAgIHhyZWY6IFhyZWZJZCwgbWVzc2FnZTogaTE4bi5NZXNzYWdlLCBtZXNzYWdlUGxhY2Vob2xkZXI6IHN0cmluZyxcbiAgICBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW4pOiBJY3VTdGFydE9wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBPcEtpbmQuSWN1U3RhcnQsXG4gICAgeHJlZixcbiAgICBtZXNzYWdlLFxuICAgIG1lc3NhZ2VQbGFjZWhvbGRlcixcbiAgICBjb250ZXh0OiBudWxsLFxuICAgIHNvdXJjZVNwYW4sXG4gICAgLi4uTkVXX09QLFxuICB9O1xufVxuXG4vKipcbiAqIEFuIG9wIHRoYXQgcmVwcmVzZW50cyB0aGUgZW5kIG9mIGFuIElDVSBleHByZXNzaW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEljdUVuZE9wIGV4dGVuZHMgT3A8Q3JlYXRlT3A+IHtcbiAga2luZDogT3BLaW5kLkljdUVuZDtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBjb3JyZXNwb25kaW5nIEljdVN0YXJ0T3AuXG4gICAqL1xuICB4cmVmOiBYcmVmSWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBJQ1UgZW5kIG9wLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSWN1RW5kT3AoeHJlZjogWHJlZklkKTogSWN1RW5kT3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IE9wS2luZC5JY3VFbmQsXG4gICAgeHJlZixcbiAgICAuLi5ORVdfT1AsXG4gIH07XG59XG5cbi8qKlxuICogQW4gaTE4biBjb250ZXh0IHRoYXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIHRyYW5zbGF0ZWQgaTE4biBtZXNzYWdlLiBBIHNlcGFyYXRlIGNvbnRleHQgaXMgY3JlYXRlZFxuICogZm9yIHR3byBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICpcbiAqIDEuIEZvciBlYWNoIHRvcC1sZXZlbCBpMThuIGJsb2NrLlxuICogMi4gRm9yIGVhY2ggSUNVIHJlZmVyZW5jZWQgYXMgYSBzdWItbWVzc2FnZS4gSUNVcyB0aGF0IGFyZSByZWZlcmVuY2VkIGFzIGEgc3ViLW1lc3NhZ2Ugd2lsbCBiZVxuICogICAgdXNlZCB0byBnZW5lcmF0ZSBhIHNlcGFyYXRlIGkxOG4gbWVzc2FnZSwgYnV0IHdpbGwgbm90IGJlIGV4dHJhY3RlZCBkaXJlY3RseSBpbnRvIHRoZSBjb25zdHNcbiAqICAgIGFycmF5LiBJbnN0ZWFkIHRoZXkgd2lsbCBiZSBwdWxsZWQgaW4gYXMgcGFydCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdGVtZW50cyBmb3IgdGhlIG1lc3NhZ2VcbiAqICAgIHRoYXQgcmVmZXJlbmNlcyB0aGVtLlxuICpcbiAqIENoaWxkIGkxOG4gYmxvY2tzLCByZXN1bHRpbmcgZnJvbSB0aGUgdXNlIG9mIGFuIG5nLXRlbXBsYXRlIGluc2lkZSBvZiBhIHBhcmVudCBpMThuIGJsb2NrLCBkbyBub3RcbiAqIGdlbmVyYXRlIGEgc2VwYXJhdGUgY29udGV4dC4gSW5zdGVhZCB0aGVpciBjb250ZW50IGlzIGluY2x1ZGVkIGluIHRoZSB0cmFuc2xhdGVkIG1lc3NhZ2UgZm9yXG4gKiB0aGVpciByb290IGJsb2NrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEkxOG5Db250ZXh0T3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4ge1xuICBraW5kOiBPcEtpbmQuSTE4bkNvbnRleHQ7XG5cbiAgY29udGV4dEtpbmQ6IEkxOG5Db250ZXh0S2luZDtcblxuICAvKipcbiAgICogIFRoZSBpZCBvZiB0aGlzIGNvbnRleHQuXG4gICAqL1xuICB4cmVmOiBYcmVmSWQ7XG5cbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBJMThuU3RhcnRPcCBvciBJMThuT3AgdGhpcyBjb250ZXh0IGJlbG9uZ3MgdG8uXG4gICAqXG4gICAqIEl0IGlzIHBvc3NpYmxlIGZvciBtdWx0aXBsZSBjb250ZXh0cyB0byBiZWxvbmcgdG8gdGhlIHNhbWUgYmxvY2ssIHNpbmNlIGJvdGggdGhlIGJsb2NrIGFuZCBhbnlcbiAgICogSUNVcyBpbnNpZGUgdGhlIGJsb2NrIHdpbGwgZWFjaCBnZXQgdGhlaXIgb3duIGNvbnRleHQuXG4gICAqL1xuICBpMThuQmxvY2s6IFhyZWZJZDtcblxuICAvKipcbiAgICogVGhlIGkxOG4gbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0LlxuICAgKi9cbiAgbWVzc2FnZTogaTE4bi5NZXNzYWdlO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW0gbWFwIGZvciB0aGlzIGNvbnRleHQuXG4gICAqL1xuICBwYXJhbXM6IE1hcDxzdHJpbmcsIEkxOG5QYXJhbVZhbHVlW10+O1xuXG4gIC8qKlxuICAgKiBUaGUgcG9zdC1wcm9jZXNzaW5nIHBhcmFtIG1hcCBmb3IgdGhpcyBjb250ZXh0LlxuICAgKi9cbiAgcG9zdHByb2Nlc3NpbmdQYXJhbXM6IE1hcDxzdHJpbmcsIEkxOG5QYXJhbVZhbHVlW10+O1xuXG4gIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUkxOG5Db250ZXh0T3AoXG4gICAgY29udGV4dEtpbmQ6IEkxOG5Db250ZXh0S2luZCwgeHJlZjogWHJlZklkLCBpMThuQmxvY2s6IFhyZWZJZCwgbWVzc2FnZTogaTE4bi5NZXNzYWdlLFxuICAgIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbik6IEkxOG5Db250ZXh0T3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IE9wS2luZC5JMThuQ29udGV4dCxcbiAgICBjb250ZXh0S2luZCxcbiAgICB4cmVmLFxuICAgIGkxOG5CbG9jayxcbiAgICBtZXNzYWdlLFxuICAgIHNvdXJjZVNwYW4sXG4gICAgcGFyYW1zOiBuZXcgTWFwKCksXG4gICAgcG9zdHByb2Nlc3NpbmdQYXJhbXM6IG5ldyBNYXAoKSxcbiAgICAuLi5ORVdfT1AsXG4gIH07XG59XG5cbi8qKlxuICogQW4gaW5kZXggaW50byB0aGUgYGNvbnN0c2AgYXJyYXkgd2hpY2ggaXMgc2hhcmVkIGFjcm9zcyB0aGUgY29tcGlsYXRpb24gb2YgYWxsIHZpZXdzIGluIGFcbiAqIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IHR5cGUgQ29uc3RJbmRleCA9IG51bWJlciZ7X19icmFuZDogJ0NvbnN0SW5kZXgnfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpdGVyYWxPckFycmF5TGl0ZXJhbCh2YWx1ZTogYW55KTogby5FeHByZXNzaW9uIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIG8ubGl0ZXJhbEFycih2YWx1ZS5tYXAobGl0ZXJhbE9yQXJyYXlMaXRlcmFsKSk7XG4gIH1cbiAgcmV0dXJuIG8ubGl0ZXJhbCh2YWx1ZSwgby5JTkZFUlJFRF9UWVBFKTtcbn1cbiJdfQ==
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL3RlbXBsYXRlL3BpcGVsaW5lL2lyL3NyYy9vcHMvY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUlILE9BQU8sS0FBSyxDQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFHdEQsT0FBTyxFQUFnQyxlQUFlLEVBQXVCLFNBQVMsRUFBRSxNQUFNLEVBQWUsTUFBTSxVQUFVLENBQUM7QUFDOUgsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUssTUFBTSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBc0IsbUJBQW1CLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbkUsT0FBTyxFQUFZLE1BQU0sRUFBMEIsTUFBTSxVQUFVLENBQUM7QUFtQnBFOztHQUVHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN0QyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxRQUFRO0lBQzdGLE1BQU0sQ0FBQyxjQUFjO0NBQ3RCLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEVBQVk7SUFDakQsT0FBTyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFrRkQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2hDLEdBQVcsRUFBRSxJQUFZLEVBQUUsU0FBb0IsRUFBRSxlQUE4QyxFQUMvRixVQUEyQjtJQUM3QixPQUFPO1FBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1FBQ3pCLElB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QUNQLFVBQVU7UUFDVixNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDakIsb0JBQW9CLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDL0IsR0FBRyxNQUFNO0tBQ1YsQ0FBQztBQUNKLENBQUM7QUFnQkQsTUFBTSxVQUFVLHNCQUFzQixDQUNsQyxJQUFZLEVBQUUsTUFBa0IsRUFBRSxNQUFjO0lBQ2xELE9BQU87UUFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLGNBQWM7UUFDM0IsSUFBSTtRQUNKLE1BQU07UUFDTixNQUFNO1FBQ04sb0JBQW9CLEVBQUUsSUFBSTtRQUMxQixHQUFHLE1BQU07UUFDVCxHQUFHLG1CQUFtQjtLQUN2QixDQUFDO0FBQ0osQ0FBQztBQVFELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFVO0lBQzlDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN4QixPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7S0FDdkQ7SUFDRCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7U2VjdXJpdHlDb250ZXh0fSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlJztcbmltcG9ydCAqIGFzIGkxOG4gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaTE4bi9pMThuX2FzdCc7XG5pbXBvcnQgKiBhcyBvIGZyb20gJy4uLy4uLy4uLy4uLy4uL291dHB1dC9vdXRwdXRfYXN0JztcbmltcG9ydCB7UGFyc2VTb3VyY2VTcGFufSBmcm9tICcuLi8uLi8uLi8uLi8uLi9wYXJzZV91dGlsJztcbmltcG9ydCB7UjNEZWZlckJsb2NrTWV0YWRhdGF9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3JlbmRlcjMvdmlldy9hcGknO1xuaW1wb3J0IHtCaW5kaW5nS2luZCwgRGVmZXJUcmlnZ2VyS2luZCwgSTE4bkNvbnRleHRLaW5kLCBJMThuUGFyYW1WYWx1ZUZsYWdzLCBOYW1lc3BhY2UsIE9wS2luZCwgVGVtcGxhdGVLaW5kfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQge1Nsb3RIYW5kbGV9IGZyb20gJy4uL2hhbmRsZSc7XG5pbXBvcnQge09wLCBPcExpc3QsIFhyZWZJZH0gZnJvbSAnLi4vb3BlcmF0aW9ucyc7XG5pbXBvcnQge0NvbnN1bWVzU2xvdE9wVHJhaXQsIFRSQUlUX0NPTlNVTUVTX1NMT1R9IGZyb20gJy4uL3RyYWl0cyc7XG5cbmltcG9ydCB7TGlzdEVuZE9wLCBORVdfT1AsIFN0YXRlbWVudE9wLCBWYXJpYWJsZU9wfSBmcm9tICcuL3NoYXJlZCc7XG5cbmltcG9ydCB0eXBlIHtVcGRhdGVPcH0gZnJvbSAnLi91cGRhdGUnO1xuXG4vKipcbiAqIEFuIG9wZXJhdGlvbiB1c2FibGUgb24gdGhlIGNyZWF0aW9uIHNpZGUgb2YgdGhlIElSLlxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVPcCA9IExpc3RFbmRPcDxDcmVhdGVPcD58U3RhdGVtZW50T3A8Q3JlYXRlT3A+fEVsZW1lbnRPcHxFbGVtZW50U3RhcnRPcHxcbiAgICBFbGVtZW50RW5kT3B8Q29udGFpbmVyT3B8Q29udGFpbmVyU3RhcnRPcHxDb250YWluZXJFbmRPcHxUZW1wbGF0ZU9wfEVuYWJsZUJpbmRpbmdzT3B8XG4gICAgRGlzYWJsZUJpbmRpbmdzT3B8VGV4dE9wfExpc3RlbmVyT3B8UGlwZU9wfFZhcmlhYmxlT3A8Q3JlYXRlT3A+fE5hbWVzcGFjZU9wfFByb2plY3Rpb25EZWZPcHxcbiAgICBQcm9qZWN0aW9uT3B8RXh0cmFjdGVkQXR0cmlidXRlT3B8RGVmZXJPcHxEZWZlck9uT3B8UmVwZWF0ZXJDcmVhdGVPcHxJMThuTWVzc2FnZU9wfEkxOG5PcHxcbiAgICBJMThuU3RhcnRPcHxJMThuRW5kT3B8SWN1U3RhcnRPcHxJY3VFbmRPcHxJMThuQ29udGV4dE9wfEkxOG5BdHRyaWJ1dGVzT3A7XG5cbi8qKlxuICogQW4gb3BlcmF0aW9uIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gb2YgYW4gZWxlbWVudCBvciBjb250YWluZXIuXG4gKi9cbmV4cG9ydCB0eXBlIEVsZW1lbnRPckNvbnRhaW5lck9wcyA9XG4gICAgRWxlbWVudE9wfEVsZW1lbnRTdGFydE9wfENvbnRhaW5lck9wfENvbnRhaW5lclN0YXJ0T3B8VGVtcGxhdGVPcHxSZXBlYXRlckNyZWF0ZU9wO1xuXG4vKipcbiAqIFRoZSBzZXQgb2YgT3BLaW5kcyB0aGF0IHJlcHJlc2VudCB0aGUgY3JlYXRpb24gb2YgYW4gZWxlbWVudCBvciBjb250YWluZXJcbiAqL1xuY29uc3QgZWxlbWVudENvbnRhaW5lck9wS2luZHMgPSBuZXcgU2V0KFtcbiAgT3BLaW5kLkVsZW1lbnQsIE9wS2luZC5FbGVtZW50U3RhcnQsIE9wS2luZC5Db250YWluZXIsIE9wS2luZC5Db250YWluZXJTdGFydCwgT3BLaW5kLlRlbXBsYXRlLFxuICBPcEtpbmQuUmVwZWF0ZXJDcmVhdGVcbl0pO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBvcGVyYXRpb24gcmVwcmVzZW50cyB0aGUgY3JlYXRpb24gb2YgYW4gZWxlbWVudCBvciBjb250YWluZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnRPckNvbnRhaW5lck9wKG9wOiBDcmVhdGVPcCk6IG9wIGlzIEVsZW1lbnRPckNvbnRhaW5lck9wcyB7XG4gIHJldHVybiBlbGVtZW50Q29udGFpbmVyT3BLaW5kcy5oYXMob3Aua2luZCk7XG59XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBsb2NhbCByZWZlcmVuY2Ugb24gYW4gZWxlbWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbFJlZiB7XG4gIC8qKlxuICAgKiBVc2VyLWRlZmluZWQgbmFtZSBvZiB0aGUgbG9jYWwgcmVmIHZhcmlhYmxlLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUYXJnZXQgb2YgdGhlIGxvY2FsIHJlZmVyZW5jZSB2YXJpYWJsZSAob2Z0ZW4gYCcnYCkuXG4gICAqL1xuICB0YXJnZXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXNlIGludGVyZmFjZSBmb3IgYEVsZW1lbnRgLCBgRWxlbWVudFN0YXJ0YCwgYW5kIGBUZW1wbGF0ZWAgb3BlcmF0aW9ucywgY29udGFpbmluZyBjb21tb24gZmllbGRzXG4gKiB1c2VkIHRvIHJlcHJlc2VudCB0aGVpciBlbGVtZW50LWxpa2UgbmF0dXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRPckNvbnRhaW5lck9wQmFzZSBleHRlbmRzIE9wPENyZWF0ZU9wPiwgQ29uc3VtZXNTbG90T3BUcmFpdCB7XG4gIGtpbmQ6IEVsZW1lbnRPckNvbnRhaW5lck9wc1sna2luZCddO1xuXG4gIC8qKlxuICAgKiBgWHJlZklkYCBhbGxvY2F0ZWQgZm9yIHRoaXMgZWxlbWVudC5cbiAgICpcbiAgICogVGhpcyBJRCBpcyB1c2VkIHRvIHJlZmVyZW5jZSB0aGlzIGVsZW1lbnQgZnJvbSBvdGhlciBJUiBzdHJ1Y3R1cmVzLlxuICAgKi9cbiAgeHJlZjogWHJlZklkO1xuXG4gIC8qKlxuICAgKiBBdHRyaWJ1dGVzIG9mIHZhcmlvdXMga2luZHMgb24gdGhpcyBlbGVtZW50LiBSZXByZXNlbnRlZCBhcyBhIGBDb25zdEluZGV4YCBwb2ludGVyIGludG8gdGhlXG4gICAqIHNoYXJlZCBgY29uc3RzYCBhcnJheSBvZiB0aGUgY29tcG9uZW50IGNvbXBpbGF0aW9uLlxuICAgKi9cbiAgYXR0cmlidXRlczogQ29uc3RJbmRleHxudWxsO1xuXG4gIC8qKlxuICAgKiBMb2NhbCByZWZlcmVuY2VzIHRvIHRoaXMgZWxlbWVudC5cbiAgICpcbiAgICogQmVmb3JlIGxvY2FsIHJlZiBwcm9jZXNzaW5nLCB0aGlzIGlzIGFuIGFycmF5IG9mIGBMb2NhbFJlZmAgZGVjbGFyYXRpb25zLlxuICAgKlxuICAgKiBBZnRlciBwcm9jZXNzaW5nLCBpdCdzIGEgYENvbnN0SW5kZXhgIHBvaW50ZXIgaW50byB0aGUgc2hhcmVkIGBjb25zdHNgIGFycmF5IG9mIHRoZSBjb21wb25lbnRcbiAgICogY29tcGlsYXRpb24uXG4gICAqL1xuICBsb2NhbFJlZnM6IExvY2FsUmVmW118Q29uc3RJbmRleHxudWxsO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgY29udGFpbmVyIGlzIG1hcmtlZCBgbmdOb25CaW5kYWJsZWAsIHdoaWNoIGRpc2FibGVkIEFuZ3VsYXIgYmluZGluZyBmb3IgaXRzZWxmIGFuZFxuICAgKiBhbGwgZGVzY2VuZGFudHMuXG4gICAqL1xuICBub25CaW5kYWJsZTogYm9vbGVhbjtcblxuICBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudE9wQmFzZSBleHRlbmRzIEVsZW1lbnRPckNvbnRhaW5lck9wQmFzZSB7XG4gIGtpbmQ6IE9wS2luZC5FbGVtZW50fE9wS2luZC5FbGVtZW50U3RhcnR8T3BLaW5kLlRlbXBsYXRlfE9wS2luZC5SZXBlYXRlckNyZWF0ZTtcblxuICAvKipcbiAgICogVGhlIEhUTUwgdGFnIG5hbWUgZm9yIHRoaXMgZWxlbWVudC5cbiAgICovXG4gIHRhZzogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2Ugb2YgdGhpcyBlbGVtZW50LCB3aGljaCBjb250cm9scyB0aGUgcHJlY2VkaW5nIG5hbWVzcGFjZSBpbnN0cnVjdGlvbi5cbiAgICovXG4gIG5hbWVzcGFjZTogTmFtZXNwYWNlO1xufVxuXG4vKipcbiAqIExvZ2ljYWwgb3BlcmF0aW9uIHJlcHJlc2VudGluZyB0aGUgc3RhcnQgb2YgYW4gZWxlbWVudCBpbiB0aGUgY3JlYXRpb24gSVIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudFN0YXJ0T3AgZXh0ZW5kcyBFbGVtZW50T3BCYXNlIHtcbiAga2luZDogT3BLaW5kLkVsZW1lbnRTdGFydDtcblxuICAvKipcbiAgICogVGhlIGkxOG4gcGxhY2Vob2xkZXIgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbGVtZW50LlxuICAgKi9cbiAgaTE4blBsYWNlaG9sZGVyPzogaTE4bi5UYWdQbGFjZWhvbGRlcjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gYEVsZW1lbnRTdGFydE9wYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRTdGFydE9wKFxuICAgIHRhZzogc3RyaW5nLCB4cmVmOiBYcmVmSWQsIG5hbWVzcGFjZTogTmFtZXNwYWNlLCBpMThuUGxhY2Vob2xkZXI6IGkxOG4uVGFnUGxhY2Vob2xkZXJ8dW5kZWZpbmVkLFxuICAgIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbik6IEVsZW1lbnRTdGFydE9wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBPcEtpbmQuRWxlbWVudFN0YXJ0LFxuICAgIHhyZWYsXG4gICAgdGFnLFxuICAgIGhhbmRsZTogbmV3IFNsb3RIYW5kbGUoKSxcbiAgICBhdHRyaWJ1dGVzOiBudWxsLFxuICAgIGxvY2FsUmVmczogW10sXG4gICAgbm9uQmluZGFibGU6IGZhbHNlLFxuICAgIG5hbWVzcGFjZSxcbiAgICBpMThuUGxhY2Vob2xkZXIsXG4gICAgc291cmNlU3BhbixcbiAgICAuLi5UUkFJVF9DT05TVU1FU19TTE9ULFxuICAgIC4uLk5FV19PUCxcbiAgfTtcbn1cblxuLyoqXG4gKiBMb2dpY2FsIG9wZXJhdGlvbiByZXByZXNlbnRpbmcgYW4gZWxlbWVudCB3aXRoIG5vIGNoaWxkcmVuIGluIHRoZSBjcmVhdGlvbiBJUi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50T3AgZXh0ZW5kcyBFbGVtZW50T3BCYXNlIHtcbiAga2luZDogT3BLaW5kLkVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpMThuIHBsYWNlaG9sZGVyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZWxlbWVudC5cbiAgICovXG4gIGkxOG5QbGFjZWhvbGRlcj86IGkxOG4uVGFnUGxhY2Vob2xkZXI7XG59XG5cbi8qKlxuICogTG9naWNhbCBvcGVyYXRpb24gcmVwcmVzZW50aW5nIGFuIGVtYmVkZGVkIHZpZXcgZGVjbGFyYXRpb24gaW4gdGhlIGNyZWF0aW9uIElSLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlT3AgZXh0ZW5kcyBFbGVtZW50T3BCYXNlIHtcbiAga2luZDogT3BLaW5kLlRlbXBsYXRlO1xuXG4gIHRlbXBsYXRlS2luZDogVGVtcGxhdGVLaW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGRlY2xhcmF0aW9uIHNsb3RzIHVzZWQgYnkgdGhpcyB0ZW1wbGF0ZSwgb3IgYG51bGxgIGlmIHNsb3RzIGhhdmUgbm90IHlldCBiZWVuXG4gICAqIGFzc2lnbmVkLlxuICAgKi9cbiAgZGVjbHM6IG51bWJlcnxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGJpbmRpbmcgdmFyaWFibGUgc2xvdHMgdXNlZCBieSB0aGlzIHRlbXBsYXRlLCBvciBgbnVsbGAgaWYgYmluZGluZyB2YXJpYWJsZXMgaGF2ZVxuICAgKiBub3QgeWV0IGJlZW4gY291bnRlZC5cbiAgICovXG4gIHZhcnM6IG51bWJlcnxudWxsO1xuXG4gIC8qKlxuICAgKiBTdWZmaXggdG8gYWRkIHRvIHRoZSBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgdGVtcGxhdGUgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbk5hbWVTdWZmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGkxOG4gcGxhY2Vob2xkZXIgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyB0ZW1wbGF0ZS5cbiAgICovXG4gIGkxOG5QbGFjZWhvbGRlcj86IGkxOG4uVGFnUGxhY2Vob2xkZXJ8aTE4bi5CbG9ja1BsYWNlaG9sZGVyO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGBUZW1wbGF0ZU9wYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRlbXBsYXRlT3AoXG4gICAgeHJlZjogWHJlZklkLCB0ZW1wbGF0ZUtpbmQ6IFRlbXBsYXRlS2luZCwgdGFnOiBzdHJpbmd8bnVsbCwgZnVuY3Rpb25OYW1lU3VmZml4OiBzdHJpbmcsXG4gICAgbmFtZXNwYWNlOiBOYW1lc3BhY2UsIGkxOG5QbGFjZWhvbGRlcjogaTE4bi5UYWdQbGFjZWhvbGRlcnxpMThuLkJsb2NrUGxhY2Vob2xkZXJ8dW5kZWZpbmVkLFxuICAgIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbik6IFRlbXBsYXRlT3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IE9wS2luZC5UZW1wbGF0ZSxcbiAgICB4cmVmLFxuICAgIHRlbXBsYXRlS2luZCxcbiAgICBhdHRyaWJ1dGVzOiBudWxsLFxuICAgIHRhZyxcbiAgICBoYW5kbGU6IG5ldyBTbG90SGFuZGxlKCksXG4gICAgZnVuY3Rpb25OYW1lU3VmZml4LFxuICAgIGRlY2xzOiBudWxsLFxuICAgIHZhcnM6IG51bGwsXG4gICAgbG9jYWxSZWZzOiBbXSxcbiAgICBub25CaW5kYWJsZTogZmFsc2UsXG4gICAgbmFtZXNwYWNlLFxuICAgIGkxOG5QbGFjZWhvbGRlcixcbiAgICBzb3VyY2VTcGFuLFxuICAgIC4uLlRSQUlUX0NPTlNVTUVTX1NMT1QsXG4gICAgLi4uTkVXX09QLFxuICB9O1xufVxuXG4vKipcbiAqIEFuIG9wIHRoYXQgY3JlYXRlcyBhIHJlcGVhdGVyIChlLmcuIGEgZm9yIGxvb3ApLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGVhdGVyQ3JlYXRlT3AgZXh0ZW5kcyBFbGVtZW50T3BCYXNlIHtcbiAga2luZDogT3BLaW5kLlJlcGVhdGVyQ3JlYXRlO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGRlY2xhcmF0aW9uIHNsb3RzIHVzZWQgYnkgdGhpcyByZXBlYXRlcidzIHRlbXBsYXRlLCBvciBgbnVsbGAgaWYgc2xvdHMgaGF2ZSBub3RcbiAgICogeWV0IGJlZW4gYXNzaWduZWQuXG4gICAqL1xuICBkZWNsczogbnVtYmVyfG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgYmluZGluZyB2YXJpYWJsZSBzbG90cyB1c2VkIGJ5IHRoaXMgcmVwZWF0ZXIncywgb3IgYG51bGxgIGlmIGJpbmRpbmcgdmFyaWFibGVzXG4gICAqIGhhdmUgbm90IHlldCBiZWVuIGNvdW50ZWQuXG4gICAqL1xuICB2YXJzOiBudW1iZXJ8bnVsbDtcblxuICAvKipcbiAgICogVGhlIFhyZWYgb2YgdGhlIGVtcHR5IHZpZXcgZnVuY3Rpb24uIChGb3IgdGhlIHByaW1hcnkgdmlldyBmdW5jdGlvbiwgdXNlIHRoZSBgeHJlZmAgcHJvcGVydHkpLlxuICAgKi9cbiAgZW1wdHlWaWV3OiBYcmVmSWR8bnVsbDtcblxuICAvKipcbiAgICogVGhlIHRyYWNrIGV4cHJlc3Npb24gdG8gdXNlIHdoaWxlIGl0ZXJhdGluZy5cbiAgICovXG4gIHRyYWNrOiBvLkV4cHJlc3Npb247XG5cbiAgLyoqXG4gICAqIGBudWxsYCBpbml0aWFsbHksIHRoZW4gYW4gYG8uRXhwcmVzc2lvbmAuIE1pZ2h0IGJlIGEgdHJhY2sgZXhwcmVzc2lvbiwgb3IgbWlnaHQgYmUgYSByZWZlcmVuY2VcbiAgICogaW50byB0aGUgY29uc3RhbnQgcG9vbC5cbiAgICovXG4gIHRyYWNrQnlGbjogby5FeHByZXNzaW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIENvbnRleHQgdmFyaWFibGVzIGF2YWlhbGFibGUgaW4gdGhpcyBibG9jay5cbiAgICovXG4gIHZhck5hbWVzOiBSZXBlYXRlclZhck5hbWVzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSByZXBlYXRlciB0cmFjayBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICovXG4gIHVzZXNDb21wb25lbnRJbnN0YW5jZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3VmZml4IHRvIGFkZCB0byB0aGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb25OYW1lU3VmZml4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpMThuIHBsYWNlaG9sZGVyIGZvciB0aGUgcmVwZWF0ZWQgaXRlbSB0ZW1wbGF0ZS5cbiAgICovXG4gIGkxOG5QbGFjZWhvbGRlcjogaTE4bi5CbG9ja1BsYWNlaG9sZGVyfHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGkxOG4gcGxhY2Vob2xkZXIgZm9yIHRoZSBlbXB0eSB0ZW1wbGF0ZS5cbiAgICovXG4gIGVtcHR5STE4blBsYWNlaG9sZGVyOiBpMThuLkJsb2NrUGxhY2Vob2xkZXJ8dW5kZWZpbmVkO1xuXG4gIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbjtcbn1cblxuLy8gVE9ETzogYWRkIHNvdXJjZSBzcGFucz9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwZWF0ZXJWYXJOYW1lcyB7XG4gICRpbmRleDogc3RyaW5nO1xuICAkY291bnQ6IHN0cmluZztcbiAgJGZpcnN0OiBzdHJpbmc7XG4gICRsYXN0OiBzdHJpbmc7XG4gICRldmVuOiBzdHJpbmc7XG4gICRvZGQ6IHN0cmluZztcbiAgJGltcGxpY2l0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXBlYXRlckNyZWF0ZU9wKFxuICAgIHByaW1hcnlWaWV3OiBYcmVmSWQsIGVtcHR5VmlldzogWHJlZklkfG51bGwsIHRhZzogc3RyaW5nfG51bGwsIHRyYWNrOiBvLkV4cHJlc3Npb24sXG4gICAgdmFyTmFtZXM6IFJlcGVhdGVyVmFyTmFtZXMsIGkxOG5QbGFjZWhvbGRlcjogaTE4bi5CbG9ja1BsYWNlaG9sZGVyfHVuZGVmaW5lZCxcbiAgICBlbXB0eUkxOG5QbGFjZWhvbGRlcjogaTE4bi5CbG9ja1BsYWNlaG9sZGVyfHVuZGVmaW5lZCxcbiAgICBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW4pOiBSZXBlYXRlckNyZWF0ZU9wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBPcEtpbmQuUmVwZWF0ZXJDcmVhdGUsXG4gICAgYXR0cmlidXRlczogbnVsbCxcbiAgICB4cmVmOiBwcmltYXJ5VmlldyxcbiAgICBoYW5kbGU6IG5ldyBTbG90SGFuZGxlKCksXG4gICAgZW1wdHlWaWV3LFxuICAgIHRyYWNrLFxuICAgIHRyYWNrQnlGbjogbnVsbCxcbiAgICB0YWcsXG4gICAgZnVuY3Rpb25OYW1lU3VmZml4OiAnRm9yJyxcbiAgICBuYW1lc3BhY2U6IE5hbWVzcGFjZS5IVE1MLFxuICAgIG5vbkJpbmRhYmxlOiBmYWxzZSxcbiAgICBsb2NhbFJlZnM6IFtdLFxuICAgIGRlY2xzOiBudWxsLFxuICAgIHZhcnM6IG51bGwsXG4gICAgdmFyTmFtZXMsXG4gICAgdXNlc0NvbXBvbmVudEluc3RhbmNlOiBmYWxzZSxcbiAgICBpMThuUGxhY2Vob2xkZXIsXG4gICAgZW1wdHlJMThuUGxhY2Vob2xkZXIsXG4gICAgc291cmNlU3BhbixcbiAgICAuLi5UUkFJVF9DT05TVU1FU19TTE9ULFxuICAgIC4uLk5FV19PUCxcbiAgICBudW1TbG90c1VzZWQ6IGVtcHR5VmlldyA9PT0gbnVsbCA/IDIgOiAzLFxuICB9O1xufVxuXG4vKipcbiAqIExvZ2ljYWwgb3BlcmF0aW9uIHJlcHJlc2VudGluZyB0aGUgZW5kIG9mIGFuIGVsZW1lbnQgc3RydWN0dXJlIGluIHRoZSBjcmVhdGlvbiBJUi5cbiAqXG4gKiBQYWlycyB3aXRoIGFuIGBFbGVtZW50U3RhcnRgIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50RW5kT3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4ge1xuICBraW5kOiBPcEtpbmQuRWxlbWVudEVuZDtcblxuICAvKipcbiAgICogVGhlIGBYcmVmSWRgIG9mIHRoZSBlbGVtZW50IGRlY2xhcmVkIHZpYSBgRWxlbWVudFN0YXJ0YC5cbiAgICovXG4gIHhyZWY6IFhyZWZJZDtcblxuICBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW58bnVsbDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gYEVsZW1lbnRFbmRPcGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbGVtZW50RW5kT3AoeHJlZjogWHJlZklkLCBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW58bnVsbCk6IEVsZW1lbnRFbmRPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLkVsZW1lbnRFbmQsXG4gICAgeHJlZixcbiAgICBzb3VyY2VTcGFuLFxuICAgIC4uLk5FV19PUCxcbiAgfTtcbn1cblxuLyoqXG4gKiBMb2dpY2FsIG9wZXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHN0YXJ0IG9mIGEgY29udGFpbmVyIGluIHRoZSBjcmVhdGlvbiBJUi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250YWluZXJTdGFydE9wIGV4dGVuZHMgRWxlbWVudE9yQ29udGFpbmVyT3BCYXNlIHtcbiAga2luZDogT3BLaW5kLkNvbnRhaW5lclN0YXJ0O1xufVxuXG4vKipcbiAqIExvZ2ljYWwgb3BlcmF0aW9uIHJlcHJlc2VudGluZyBhbiBlbXB0eSBjb250YWluZXIgaW4gdGhlIGNyZWF0aW9uIElSLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lck9wIGV4dGVuZHMgRWxlbWVudE9yQ29udGFpbmVyT3BCYXNlIHtcbiAga2luZDogT3BLaW5kLkNvbnRhaW5lcjtcbn1cblxuLyoqXG4gKiBMb2dpY2FsIG9wZXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIGVuZCBvZiBhIGNvbnRhaW5lciBzdHJ1Y3R1cmUgaW4gdGhlIGNyZWF0aW9uIElSLlxuICpcbiAqIFBhaXJzIHdpdGggYW4gYENvbnRhaW5lclN0YXJ0YCBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyRW5kT3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4ge1xuICBraW5kOiBPcEtpbmQuQ29udGFpbmVyRW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgYFhyZWZJZGAgb2YgdGhlIGVsZW1lbnQgZGVjbGFyZWQgdmlhIGBDb250YWluZXJTdGFydGAuXG4gICAqL1xuICB4cmVmOiBYcmVmSWQ7XG5cbiAgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFuO1xufVxuXG4vKipcbiAqIExvZ2ljYWwgb3BlcmF0aW9uIGNhdXNpbmcgYmluZGluZyB0byBiZSBkaXNhYmxlZCBpbiBkZXNjZW5kZW50cyBvZiBhIG5vbi1iaW5kYWJsZSBjb250YWluZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzYWJsZUJpbmRpbmdzT3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4ge1xuICBraW5kOiBPcEtpbmQuRGlzYWJsZUJpbmRpbmdzO1xuXG4gIC8qKlxuICAgKiBgWHJlZklkYCBvZiB0aGUgZWxlbWVudCB0aGF0IHdhcyBtYXJrZWQgbm9uLWJpbmRhYmxlLlxuICAgKi9cbiAgeHJlZjogWHJlZklkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlzYWJsZUJpbmRpbmdzT3AoeHJlZjogWHJlZklkKTogRGlzYWJsZUJpbmRpbmdzT3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IE9wS2luZC5EaXNhYmxlQmluZGluZ3MsXG4gICAgeHJlZixcbiAgICAuLi5ORVdfT1AsXG4gIH07XG59XG5cbi8qKlxuICogTG9naWNhbCBvcGVyYXRpb24gY2F1c2luZyBiaW5kaW5nIHRvIGJlIHJlLWVuYWJsZWQgYWZ0ZXIgdmlzaXRpbmcgZGVzY2VuZGFudHMgb2YgYVxuICogbm9uLWJpbmRhYmxlIGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmFibGVCaW5kaW5nc09wIGV4dGVuZHMgT3A8Q3JlYXRlT3A+IHtcbiAga2luZDogT3BLaW5kLkVuYWJsZUJpbmRpbmdzO1xuXG4gIC8qKlxuICAgKiBgWHJlZklkYCBvZiB0aGUgZWxlbWVudCB0aGF0IHdhcyBtYXJrZWQgbm9uLWJpbmRhYmxlLlxuICAgKi9cbiAgeHJlZjogWHJlZklkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW5hYmxlQmluZGluZ3NPcCh4cmVmOiBYcmVmSWQpOiBFbmFibGVCaW5kaW5nc09wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBPcEtpbmQuRW5hYmxlQmluZGluZ3MsXG4gICAgeHJlZixcbiAgICAuLi5ORVdfT1AsXG4gIH07XG59XG5cbi8qKlxuICogTG9naWNhbCBvcGVyYXRpb24gcmVwcmVzZW50aW5nIGEgdGV4dCBub2RlIGluIHRoZSBjcmVhdGlvbiBJUi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXh0T3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4sIENvbnN1bWVzU2xvdE9wVHJhaXQge1xuICBraW5kOiBPcEtpbmQuVGV4dDtcblxuICAvKipcbiAgICogYFhyZWZJZGAgdXNlZCB0byByZWZlcmVuY2UgdGhpcyB0ZXh0IG5vZGUgaW4gb3RoZXIgSVIgc3RydWN0dXJlcy5cbiAgICovXG4gIHhyZWY6IFhyZWZJZDtcblxuICAvKipcbiAgICogVGhlIHN0YXRpYyBpbml0aWFsIHZhbHVlIG9mIHRoZSB0ZXh0IG5vZGUuXG4gICAqL1xuICBpbml0aWFsVmFsdWU6IHN0cmluZztcblxuICBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW58bnVsbDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBgVGV4dE9wYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRleHRPcChcbiAgICB4cmVmOiBYcmVmSWQsIGluaXRpYWxWYWx1ZTogc3RyaW5nLCBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW58bnVsbCk6IFRleHRPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLlRleHQsXG4gICAgeHJlZixcbiAgICBoYW5kbGU6IG5ldyBTbG90SGFuZGxlKCksXG4gICAgaW5pdGlhbFZhbHVlLFxuICAgIHNvdXJjZVNwYW4sXG4gICAgLi4uVFJBSVRfQ09OU1VNRVNfU0xPVCxcbiAgICAuLi5ORVdfT1AsXG4gIH07XG59XG5cbi8qKlxuICogTG9naWNhbCBvcGVyYXRpb24gcmVwcmVzZW50aW5nIGFuIGV2ZW50IGxpc3RlbmVyIG9uIGFuIGVsZW1lbnQgaW4gdGhlIGNyZWF0aW9uIElSLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RlbmVyT3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4ge1xuICBraW5kOiBPcEtpbmQuTGlzdGVuZXI7XG5cbiAgdGFyZ2V0OiBYcmVmSWQ7XG4gIHRhcmdldFNsb3Q6IFNsb3RIYW5kbGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBsaXN0ZW5lciBpcyBmcm9tIGEgaG9zdCBiaW5kaW5nLlxuICAgKi9cbiAgaG9zdExpc3RlbmVyOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBldmVudCB3aGljaCBpcyBiZWluZyBsaXN0ZW5lZCB0by5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGFnIG5hbWUgb2YgdGhlIGVsZW1lbnQgb24gd2hpY2ggdGhpcyBsaXN0ZW5lciBpcyBwbGFjZWQuIE1pZ2h0IGJlIG51bGwsIGlmIHRoaXMgbGlzdGVuZXJcbiAgICogYmVsb25ncyB0byBhIGhvc3QgYmluZGluZy5cbiAgICovXG4gIHRhZzogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBgVXBkYXRlT3BgcyByZXByZXNlbnRpbmcgdGhlIGJvZHkgb2YgdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgKi9cbiAgaGFuZGxlck9wczogT3BMaXN0PFVwZGF0ZU9wPjtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgZnVuY3Rpb25cbiAgICovXG4gIGhhbmRsZXJGbk5hbWU6IHN0cmluZ3xudWxsO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgbGlzdGVuZXIgaXMga25vd24gdG8gY29uc3VtZSBgJGV2ZW50YCBpbiBpdHMgYm9keS5cbiAgICovXG4gIGNvbnN1bWVzRG9sbGFyRXZlbnQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGxpc3RlbmVyIGlzIGxpc3RlbmluZyBmb3IgYW4gYW5pbWF0aW9uIGV2ZW50LlxuICAgKi9cbiAgaXNBbmltYXRpb25MaXN0ZW5lcjogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGFuaW1hdGlvbiBwaGFzZSBvZiB0aGUgbGlzdGVuZXIuXG4gICAqL1xuICBhbmltYXRpb25QaGFzZTogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIFNvbWUgZXZlbnQgbGlzdGVuZXJzIGNhbiBoYXZlIGEgdGFyZ2V0LCBlLmcuIGluIGBkb2N1bWVudDpkcmFnb3ZlcmAuXG4gICAqL1xuICBldmVudFRhcmdldDogc3RyaW5nfG51bGw7XG5cbiAgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFuO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGBMaXN0ZW5lck9wYC4gSG9zdCBiaW5kaW5ncyByZXVzZSBhbGwgdGhlIGxpc3RlbmVyIGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJPcChcbiAgICB0YXJnZXQ6IFhyZWZJZCwgdGFyZ2V0U2xvdDogU2xvdEhhbmRsZSwgbmFtZTogc3RyaW5nLCB0YWc6IHN0cmluZ3xudWxsLFxuICAgIGhhbmRsZXJPcHM6IEFycmF5PFVwZGF0ZU9wPiwgYW5pbWF0aW9uUGhhc2U6IHN0cmluZ3xudWxsLCBldmVudFRhcmdldDogc3RyaW5nfG51bGwsXG4gICAgaG9zdExpc3RlbmVyOiBib29sZWFuLCBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW4pOiBMaXN0ZW5lck9wIHtcbiAgY29uc3QgaGFuZGxlckxpc3QgPSBuZXcgT3BMaXN0PFVwZGF0ZU9wPigpO1xuICBoYW5kbGVyTGlzdC5wdXNoKGhhbmRsZXJPcHMpO1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IE9wS2luZC5MaXN0ZW5lcixcbiAgICB0YXJnZXQsXG4gICAgdGFyZ2V0U2xvdCxcbiAgICB0YWcsXG4gICAgaG9zdExpc3RlbmVyLFxuICAgIG5hbWUsXG4gICAgaGFuZGxlck9wczogaGFuZGxlckxpc3QsXG4gICAgaGFuZGxlckZuTmFtZTogbnVsbCxcbiAgICBjb25zdW1lc0RvbGxhckV2ZW50OiBmYWxzZSxcbiAgICBpc0FuaW1hdGlvbkxpc3RlbmVyOiBhbmltYXRpb25QaGFzZSAhPT0gbnVsbCxcbiAgICBhbmltYXRpb25QaGFzZSxcbiAgICBldmVudFRhcmdldCxcbiAgICBzb3VyY2VTcGFuLFxuICAgIC4uLk5FV19PUCxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaXBlT3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4sIENvbnN1bWVzU2xvdE9wVHJhaXQge1xuICBraW5kOiBPcEtpbmQuUGlwZTtcbiAgeHJlZjogWHJlZklkO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQaXBlT3AoeHJlZjogWHJlZklkLCBzbG90OiBTbG90SGFuZGxlLCBuYW1lOiBzdHJpbmcpOiBQaXBlT3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IE9wS2luZC5QaXBlLFxuICAgIHhyZWYsXG4gICAgaGFuZGxlOiBzbG90LFxuICAgIG5hbWUsXG4gICAgLi4uTkVXX09QLFxuICAgIC4uLlRSQUlUX0NPTlNVTUVTX1NMT1QsXG4gIH07XG59XG5cbi8qKlxuICogQW4gb3AgY29ycmVzcG9uZGluZyB0byBhIG5hbWVzcGFjZSBpbnN0cnVjdGlvbiwgZm9yIHN3aXRjaGluZyBiZXR3ZWVuIEhUTUwsIFNWRywgYW5kIE1hdGhNTC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYW1lc3BhY2VPcCBleHRlbmRzIE9wPENyZWF0ZU9wPiB7XG4gIGtpbmQ6IE9wS2luZC5OYW1lc3BhY2U7XG4gIGFjdGl2ZTogTmFtZXNwYWNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTmFtZXNwYWNlT3AobmFtZXNwYWNlOiBOYW1lc3BhY2UpOiBOYW1lc3BhY2VPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLk5hbWVzcGFjZSxcbiAgICBhY3RpdmU6IG5hbWVzcGFjZSxcbiAgICAuLi5ORVdfT1AsXG4gIH07XG59XG5cbi8qKlxuICogQW4gb3AgdGhhdCBjcmVhdGVzIGEgY29udGVudCBwcm9qZWN0aW9uIHNsb3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdGlvbkRlZk9wIGV4dGVuZHMgT3A8Q3JlYXRlT3A+IHtcbiAga2luZDogT3BLaW5kLlByb2plY3Rpb25EZWY7XG5cbiAgLy8gVGhlIHBhcnNlZCBzZWxlY3RvciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBwcm9qZWN0aW9uIGRlZi5cbiAgZGVmOiBvLkV4cHJlc3Npb258bnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2plY3Rpb25EZWZPcChkZWY6IG8uRXhwcmVzc2lvbnxudWxsKTogUHJvamVjdGlvbkRlZk9wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBPcEtpbmQuUHJvamVjdGlvbkRlZixcbiAgICBkZWYsXG4gICAgLi4uTkVXX09QLFxuICB9O1xufVxuXG4vKipcbiAqIEFuIG9wIHRoYXQgY3JlYXRlcyBhIGNvbnRlbnQgcHJvamVjdGlvbiBzbG90LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2plY3Rpb25PcCBleHRlbmRzIE9wPENyZWF0ZU9wPiwgQ29uc3VtZXNTbG90T3BUcmFpdCB7XG4gIGtpbmQ6IE9wS2luZC5Qcm9qZWN0aW9uO1xuXG4gIHhyZWY6IFhyZWZJZDtcblxuICBwcm9qZWN0aW9uU2xvdEluZGV4OiBudW1iZXI7XG5cbiAgYXR0cmlidXRlczogc3RyaW5nW107XG5cbiAgbG9jYWxSZWZzOiBzdHJpbmdbXTtcblxuICBzZWxlY3Rvcjogc3RyaW5nO1xuXG4gIGkxOG5QbGFjZWhvbGRlcj86IGkxOG4uVGFnUGxhY2Vob2xkZXI7XG5cbiAgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvamVjdGlvbk9wKFxuICAgIHhyZWY6IFhyZWZJZCwgc2VsZWN0b3I6IHN0cmluZywgaTE4blBsYWNlaG9sZGVyOiBpMThuLlRhZ1BsYWNlaG9sZGVyfHVuZGVmaW5lZCxcbiAgICBhdHRyaWJ1dGVzOiBzdHJpbmdbXSwgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFuKTogUHJvamVjdGlvbk9wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBPcEtpbmQuUHJvamVjdGlvbixcbiAgICB4cmVmLFxuICAgIGhhbmRsZTogbmV3IFNsb3RIYW5kbGUoKSxcbiAgICBzZWxlY3RvcixcbiAgICBpMThuUGxhY2Vob2xkZXIsXG4gICAgcHJvamVjdGlvblNsb3RJbmRleDogMCxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIGxvY2FsUmVmczogW10sXG4gICAgc291cmNlU3BhbixcbiAgICAuLi5ORVdfT1AsXG4gICAgLi4uVFJBSVRfQ09OU1VNRVNfU0xPVCxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGF0dHJpYnV0ZSB0aGF0IGhhcyBiZWVuIGV4dHJhY3RlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBjb25zdHMgYXJyYXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0cmFjdGVkQXR0cmlidXRlT3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4ge1xuICBraW5kOiBPcEtpbmQuRXh0cmFjdGVkQXR0cmlidXRlO1xuXG4gIC8qKlxuICAgKiBUaGUgYFhyZWZJZGAgb2YgdGhlIHRlbXBsYXRlLWxpa2UgZWxlbWVudCB0aGUgZXh0cmFjdGVkIGF0dHJpYnV0ZSB3aWxsIGJlbG9uZyB0by5cbiAgICovXG4gIHRhcmdldDogWHJlZklkO1xuXG4gIC8qKlxuICAgKiAgVGhlIGtpbmQgb2YgYmluZGluZyByZXByZXNlbnRlZCBieSB0aGlzIGV4dHJhY3RlZCBhdHRyaWJ1dGUuXG4gICAqL1xuICBiaW5kaW5nS2luZDogQmluZGluZ0tpbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBleHRyYWN0ZWQgYXR0cmlidXRlLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgZXhwcmVzc2lvbiBvZiB0aGUgZXh0cmFjdGVkIGF0dHJpYnV0ZS5cbiAgICovXG4gIGV4cHJlc3Npb246IG8uRXhwcmVzc2lvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIGF0dHJpYnV0ZSBoYXMgYSBjb3JyZXNwb25kaW5nIGkxOG4gYXR0cmlidXRlIChlLmcuIGBpMThuLWZvbz1cIm06ZFwiYCksIHRoZW4gdGhpcyBpcyB0aGVcbiAgICogaTE4biBjb250ZXh0IGZvciBpdC5cbiAgICovXG4gIGkxOG5Db250ZXh0OiBYcmVmSWR8bnVsbDtcblxuICAvKipcbiAgICogVGhlIHNlY3VyaXR5IGNvbnRleHQgb2YgdGhlIGJpbmRpbmcuXG4gICAqL1xuICBzZWN1cml0eUNvbnRleHQ6IFNlY3VyaXR5Q29udGV4dHxTZWN1cml0eUNvbnRleHRbXTtcblxuICAvKipcbiAgICogVGhlIHRydXN0ZWQgdmFsdWUgZnVuY3Rpb24gZm9yIHRoaXMgcHJvcGVydHkuXG4gICAqL1xuICB0cnVzdGVkVmFsdWVGbjogby5FeHByZXNzaW9ufG51bGw7XG5cbiAgaTE4bk1lc3NhZ2U6IGkxOG4uTWVzc2FnZXxudWxsO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBgRXh0cmFjdGVkQXR0cmlidXRlT3BgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXh0cmFjdGVkQXR0cmlidXRlT3AoXG4gICAgdGFyZ2V0OiBYcmVmSWQsIGJpbmRpbmdLaW5kOiBCaW5kaW5nS2luZCwgbmFtZTogc3RyaW5nLCBleHByZXNzaW9uOiBvLkV4cHJlc3Npb258bnVsbCxcbiAgICBpMThuQ29udGV4dDogWHJlZklkfG51bGwsIGkxOG5NZXNzYWdlOiBpMThuLk1lc3NhZ2V8bnVsbCxcbiAgICBzZWN1cml0eUNvbnRleHQ6IFNlY3VyaXR5Q29udGV4dHxTZWN1cml0eUNvbnRleHRbXSk6IEV4dHJhY3RlZEF0dHJpYnV0ZU9wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBPcEtpbmQuRXh0cmFjdGVkQXR0cmlidXRlLFxuICAgIHRhcmdldCxcbiAgICBiaW5kaW5nS2luZCxcbiAgICBuYW1lLFxuICAgIGV4cHJlc3Npb24sXG4gICAgaTE4bkNvbnRleHQsXG4gICAgaTE4bk1lc3NhZ2UsXG4gICAgc2VjdXJpdHlDb250ZXh0LFxuICAgIHRydXN0ZWRWYWx1ZUZuOiBudWxsLFxuICAgIC4uLk5FV19PUCxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWZlck9wIGV4dGVuZHMgT3A8Q3JlYXRlT3A+LCBDb25zdW1lc1Nsb3RPcFRyYWl0IHtcbiAga2luZDogT3BLaW5kLkRlZmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgeHJlZiBvZiB0aGlzIGRlZmVyIG9wLlxuICAgKi9cbiAgeHJlZjogWHJlZklkO1xuXG4gIC8qKlxuICAgKiBUaGUgeHJlZiBvZiB0aGUgbWFpbiB2aWV3LlxuICAgKi9cbiAgbWFpblZpZXc6IFhyZWZJZDtcblxuICBtYWluU2xvdDogU2xvdEhhbmRsZTtcblxuICAvKipcbiAgICogU2Vjb25kYXJ5IGxvYWRpbmcgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVmZXIgb3AuXG4gICAqL1xuICBsb2FkaW5nVmlldzogWHJlZklkfG51bGw7XG5cbiAgbG9hZGluZ1Nsb3Q6IFNsb3RIYW5kbGV8bnVsbDtcblxuICAvKipcbiAgICogU2Vjb25kYXJ5IHBsYWNlaG9sZGVyIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlZmVyIG9wLlxuICAgKi9cbiAgcGxhY2Vob2xkZXJWaWV3OiBYcmVmSWR8bnVsbDtcblxuICBwbGFjZWhvbGRlclNsb3Q6IFNsb3RIYW5kbGV8bnVsbDtcblxuICAvKipcbiAgICogU2Vjb25kYXJ5IGVycm9yIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlZmVyIG9wLlxuICAgKi9cbiAgZXJyb3JWaWV3OiBYcmVmSWR8bnVsbDtcblxuICBlcnJvclNsb3Q6IFNsb3RIYW5kbGV8bnVsbDtcblxuICBwbGFjZWhvbGRlck1pbmltdW1UaW1lOiBudW1iZXJ8bnVsbDtcbiAgbG9hZGluZ01pbmltdW1UaW1lOiBudW1iZXJ8bnVsbDtcbiAgbG9hZGluZ0FmdGVyVGltZTogbnVtYmVyfG51bGw7XG5cbiAgcGxhY2Vob2xkZXJDb25maWc6IG8uRXhwcmVzc2lvbnxudWxsO1xuICBsb2FkaW5nQ29uZmlnOiBvLkV4cHJlc3Npb258bnVsbDtcblxuICAvKipcbiAgICogTWV0YWRhdGEgYWJvdXQgdGhpcyBkZWZlciBibG9jaywgcHJvdmlkZWQgYnkgdGhlIHBhcnNlci5cbiAgICovXG4gIG1ldGFkYXRhOiBSM0RlZmVyQmxvY2tNZXRhZGF0YTtcblxuICAvKipcbiAgICogQWZ0ZXIgcHJvY2Vzc2luZywgdGhlIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgZGVmZXIgZGVwcyB3aWxsIGJlIGV4dHJhY3RlZCB0byB0aGUgY29uc3RhbnRcbiAgICogcG9vbCwgYW5kIGEgcmVmZXJlbmNlIHRvIHRoYXQgZnVuY3Rpb24gd2lsbCBiZSBwb3B1bGF0ZWQgaGVyZS5cbiAgICovXG4gIHJlc29sdmVyRm46IG8uRXhwcmVzc2lvbnxudWxsO1xuXG4gIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmVyT3AoXG4gICAgeHJlZjogWHJlZklkLCBtYWluOiBYcmVmSWQsIG1haW5TbG90OiBTbG90SGFuZGxlLCBtZXRhZGF0YTogUjNEZWZlckJsb2NrTWV0YWRhdGEsXG4gICAgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFuKTogRGVmZXJPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLkRlZmVyLFxuICAgIHhyZWYsXG4gICAgaGFuZGxlOiBuZXcgU2xvdEhhbmRsZSgpLFxuICAgIG1haW5WaWV3OiBtYWluLFxuICAgIG1haW5TbG90LFxuICAgIGxvYWRpbmdWaWV3OiBudWxsLFxuICAgIGxvYWRpbmdTbG90OiBudWxsLFxuICAgIGxvYWRpbmdDb25maWc6IG51bGwsXG4gICAgbG9hZGluZ01pbmltdW1UaW1lOiBudWxsLFxuICAgIGxvYWRpbmdBZnRlclRpbWU6IG51bGwsXG4gICAgcGxhY2Vob2xkZXJWaWV3OiBudWxsLFxuICAgIHBsYWNlaG9sZGVyU2xvdDogbnVsbCxcbiAgICBwbGFjZWhvbGRlckNvbmZpZzogbnVsbCxcbiAgICBwbGFjZWhvbGRlck1pbmltdW1UaW1lOiBudWxsLFxuICAgIGVycm9yVmlldzogbnVsbCxcbiAgICBlcnJvclNsb3Q6IG51bGwsXG4gICAgbWV0YWRhdGEsXG4gICAgcmVzb2x2ZXJGbjogbnVsbCxcbiAgICBzb3VyY2VTcGFuLFxuICAgIC4uLk5FV19PUCxcbiAgICAuLi5UUkFJVF9DT05TVU1FU19TTE9ULFxuICAgIG51bVNsb3RzVXNlZDogMixcbiAgfTtcbn1cbmludGVyZmFjZSBEZWZlclRyaWdnZXJCYXNlIHtcbiAga2luZDogRGVmZXJUcmlnZ2VyS2luZDtcbn1cblxuaW50ZXJmYWNlIERlZmVyVHJpZ2dlcldpdGhUYXJnZXRCYXNlIGV4dGVuZHMgRGVmZXJUcmlnZ2VyQmFzZSB7XG4gIHRhcmdldE5hbWU6IHN0cmluZ3xudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgWHJlZiBvZiB0aGUgdGFyZ2V0ZWQgbmFtZS4gTWF5IGJlIGluIGEgZGlmZmVyZW50IHZpZXcuXG4gICAqL1xuICB0YXJnZXRYcmVmOiBYcmVmSWR8bnVsbDtcblxuICAvKipcbiAgICogVGhlIHNsb3QgaW5kZXggb2YgdGhlIG5hbWVkIHJlZmVyZW5jZSwgaW5zaWRlIHRoZSB2aWV3IHByb3ZpZGVkIGJlbG93LiBUaGlzIHNsb3QgbWF5IG5vdCBiZVxuICAgKiBpbnNpZGUgdGhlIGN1cnJlbnQgdmlldywgYW5kIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIGEgcmVzdWx0LlxuICAgKi9cbiAgdGFyZ2V0U2xvdDogU2xvdEhhbmRsZXxudWxsO1xuXG4gIHRhcmdldFZpZXc6IFhyZWZJZHxudWxsO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc3RlcHMgdG8gd2FsayB1cCBvciBkb3duIHRoZSB2aWV3IHRyZWUgdG8gZmluZCB0aGUgdGFyZ2V0IGxvY2FsUmVmLlxuICAgKi9cbiAgdGFyZ2V0U2xvdFZpZXdTdGVwczogbnVtYmVyfG51bGw7XG59XG5cbmludGVyZmFjZSBEZWZlcklkbGVUcmlnZ2VyIGV4dGVuZHMgRGVmZXJUcmlnZ2VyQmFzZSB7XG4gIGtpbmQ6IERlZmVyVHJpZ2dlcktpbmQuSWRsZTtcbn1cblxuaW50ZXJmYWNlIERlZmVySW1tZWRpYXRlVHJpZ2dlciBleHRlbmRzIERlZmVyVHJpZ2dlckJhc2Uge1xuICBraW5kOiBEZWZlclRyaWdnZXJLaW5kLkltbWVkaWF0ZTtcbn1cblxuaW50ZXJmYWNlIERlZmVySG92ZXJUcmlnZ2VyIGV4dGVuZHMgRGVmZXJUcmlnZ2VyV2l0aFRhcmdldEJhc2Uge1xuICBraW5kOiBEZWZlclRyaWdnZXJLaW5kLkhvdmVyO1xufVxuXG5pbnRlcmZhY2UgRGVmZXJUaW1lclRyaWdnZXIgZXh0ZW5kcyBEZWZlclRyaWdnZXJCYXNlIHtcbiAga2luZDogRGVmZXJUcmlnZ2VyS2luZC5UaW1lcjtcblxuICBkZWxheTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRGVmZXJJbnRlcmFjdGlvblRyaWdnZXIgZXh0ZW5kcyBEZWZlclRyaWdnZXJXaXRoVGFyZ2V0QmFzZSB7XG4gIGtpbmQ6IERlZmVyVHJpZ2dlcktpbmQuSW50ZXJhY3Rpb247XG59XG5cbmludGVyZmFjZSBEZWZlclZpZXdwb3J0VHJpZ2dlciBleHRlbmRzIERlZmVyVHJpZ2dlcldpdGhUYXJnZXRCYXNlIHtcbiAga2luZDogRGVmZXJUcmlnZ2VyS2luZC5WaWV3cG9ydDtcbn1cblxuLyoqXG4gKiBUaGUgdW5pb24gdHlwZSBvZiBhbGwgZGVmZXIgdHJpZ2dlciBpbnRlcmZhY2VzLlxuICovXG5leHBvcnQgdHlwZSBEZWZlclRyaWdnZXIgPSBEZWZlcklkbGVUcmlnZ2VyfERlZmVySW1tZWRpYXRlVHJpZ2dlcnxEZWZlclRpbWVyVHJpZ2dlcnxcbiAgICBEZWZlckhvdmVyVHJpZ2dlcnxEZWZlckludGVyYWN0aW9uVHJpZ2dlcnxEZWZlclZpZXdwb3J0VHJpZ2dlcjtcblxuZXhwb3J0IGludGVyZmFjZSBEZWZlck9uT3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4ge1xuICBraW5kOiBPcEtpbmQuRGVmZXJPbjtcblxuICBkZWZlcjogWHJlZklkO1xuXG4gIC8qKlxuICAgKiBUaGUgdHJpZ2dlciBmb3IgdGhpcyBkZWZlciBvcCAoZS5nLiBpZGxlLCBob3ZlciwgZXRjKS5cbiAgICovXG4gIHRyaWdnZXI6IERlZmVyVHJpZ2dlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbWl0IHRoZSBwcmVmZXRjaCB2ZXJzaW9uIG9mIHRoZSBpbnN0cnVjdGlvbi5cbiAgICovXG4gIHByZWZldGNoOiBib29sZWFuO1xuXG4gIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmVyT25PcChcbiAgICBkZWZlcjogWHJlZklkLCB0cmlnZ2VyOiBEZWZlclRyaWdnZXIsIHByZWZldGNoOiBib29sZWFuLFxuICAgIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbik6IERlZmVyT25PcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLkRlZmVyT24sXG4gICAgZGVmZXIsXG4gICAgdHJpZ2dlcixcbiAgICBwcmVmZXRjaCxcbiAgICBzb3VyY2VTcGFuLFxuICAgIC4uLk5FV19PUCxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIHZhbHVlIGluIGFuIGkxOG4gcGFyYW0gbWFwLiBFYWNoIHBsYWNlaG9sZGVyIGluIHRoZSBtYXAgbWF5IGhhdmUgbXVsdGlwbGUgb2ZcbiAqIHRoZXNlIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSTE4blBhcmFtVmFsdWUge1xuICAvKipcbiAgICogVGhlIHZhbHVlLiBUaGlzIGNhbiBiZSBlaXRoZXIgYSBzbG90IG51bWJlciwgc3BlY2lhbCBzdHJpbmcsIG9yIGNvbXBvdW5kLXZhbHVlIGNvbnNpc3Rpbmcgb2YgYW5cbiAgICogZWxlbWVudCBzbG90IG51bWJlciBhbmQgdGVtcGxhdGUgc2xvdCBudW1iZXIuXG4gICAqL1xuICB2YWx1ZTogc3RyaW5nfG51bWJlcnx7ZWxlbWVudDogbnVtYmVyLCB0ZW1wbGF0ZTogbnVtYmVyfTtcblxuICAvKipcbiAgICogVGhlIHN1Yi10ZW1wbGF0ZSBpbmRleCBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlLlxuICAgKi9cbiAgc3ViVGVtcGxhdGVJbmRleDogbnVtYmVyfG51bGw7XG5cbiAgLyoqXG4gICAqIEZsYWdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUuXG4gICAqL1xuICBmbGFnczogSTE4blBhcmFtVmFsdWVGbGFncztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGkxOG4gbWVzc2FnZSB0aGF0IGhhcyBiZWVuIGV4dHJhY3RlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBjb25zdHMgYXJyYXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSTE4bk1lc3NhZ2VPcCBleHRlbmRzIE9wPENyZWF0ZU9wPiB7XG4gIGtpbmQ6IE9wS2luZC5JMThuTWVzc2FnZTtcblxuICAvKipcbiAgICogQW4gaWQgdXNlZCB0byByZWZlcmVuY2UgdGhpcyBtZXNzYWdlLlxuICAgKi9cbiAgeHJlZjogWHJlZklkO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGV4dCBmcm9tIHdoaWNoIHRoaXMgbWVzc2FnZSB3YXMgZXh0cmFjdGVkXG4gICAqIFRPRE86IHJlbW92ZSB0aGlzLCBhbmQgYWRkIGFub3RoZXIgcHJvcGVydHkgaGVyZSBpbnN0ZWFkIHRvIG1hdGNoIEV4dHJhY3RlZEF0dHJpYnV0ZXNcbiAgICovXG4gIGkxOG5Db250ZXh0OiBYcmVmSWQ7XG5cbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBpMThuIG9wIHRoaXMgbWVzc2FnZSB3YXMgZXh0cmFjdGVkIGZyb20uXG4gICAqXG4gICAqIFRoaXMgbWlnaHQgYmUgbnVsbCwgd2hpY2ggbWVhbnMgdGhpcyBtZXNzYWdlIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBibG9jay4gVGhpcyBwcm9iYWJseVxuICAgKiBtZWFucyBpdCBpcyBhbiBpMThuIGF0dHJpYnV0ZSdzIG1lc3NhZ2UuXG4gICAqL1xuICBpMThuQmxvY2s6IFhyZWZJZHxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgaTE4biBtZXNzYWdlIHJlcHJlc2VudGVkIGJ5IHRoaXMgb3AuXG4gICAqL1xuICBtZXNzYWdlOiBpMThuLk1lc3NhZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBwbGFjZWhvbGRlciB1c2VkIGZvciB0aGlzIG1lc3NhZ2Ugd2hlbiBpdCBpcyByZWZlcmVuY2VkIGluIGFub3RoZXIgbWVzc2FnZS5cbiAgICogRm9yIGEgdG9wLWxldmVsIG1lc3NhZ2UgdGhhdCBpc24ndCByZWZlcmVuY2VkIGZyb20gYW5vdGhlciBtZXNzYWdlLCB0aGlzIHdpbGwgYmUgbnVsbC5cbiAgICovXG4gIG1lc3NhZ2VQbGFjZWhvbGRlcjogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBtZXNzYWdlIG5lZWRzIHBvc3QtcHJvY2Vzc2luZy5cbiAgICovXG4gIG5lZWRzUG9zdHByb2Nlc3Npbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbSBtYXAsIHdpdGggcGxhY2Vob2xkZXJzIHJlcHJlc2VudGVkIGFzIGFuIGBFeHByZXNzaW9uYC5cbiAgICovXG4gIHBhcmFtczogTWFwPHN0cmluZywgby5FeHByZXNzaW9uPjtcblxuICAvKipcbiAgICogVGhlIHBvc3QtcHJvY2Vzc2luZyBwYXJhbSBtYXAsIHdpdGggcGxhY2Vob2xkZXJzIHJlcHJlc2VudGVkIGFzIGFuIGBFeHByZXNzaW9uYC5cbiAgICovXG4gIHBvc3Rwcm9jZXNzaW5nUGFyYW1zOiBNYXA8c3RyaW5nLCBvLkV4cHJlc3Npb24+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2Ygc3ViLW1lc3NhZ2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgdGhpcyBtZXNzYWdlLlxuICAgKi9cbiAgc3ViTWVzc2FnZXM6IFhyZWZJZFtdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBgRXh0cmFjdGVkTWVzc2FnZU9wYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUkxOG5NZXNzYWdlT3AoXG4gICAgeHJlZjogWHJlZklkLCBpMThuQ29udGV4dDogWHJlZklkLCBpMThuQmxvY2s6IFhyZWZJZHxudWxsLCBtZXNzYWdlOiBpMThuLk1lc3NhZ2UsXG4gICAgbWVzc2FnZVBsYWNlaG9sZGVyOiBzdHJpbmd8bnVsbCwgcGFyYW1zOiBNYXA8c3RyaW5nLCBvLkV4cHJlc3Npb24+LFxuICAgIHBvc3Rwcm9jZXNzaW5nUGFyYW1zOiBNYXA8c3RyaW5nLCBvLkV4cHJlc3Npb24+LCBuZWVkc1Bvc3Rwcm9jZXNzaW5nOiBib29sZWFuKTogSTE4bk1lc3NhZ2VPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLkkxOG5NZXNzYWdlLFxuICAgIHhyZWYsXG4gICAgaTE4bkNvbnRleHQsXG4gICAgaTE4bkJsb2NrLFxuICAgIG1lc3NhZ2UsXG4gICAgbWVzc2FnZVBsYWNlaG9sZGVyLFxuICAgIHBhcmFtcyxcbiAgICBwb3N0cHJvY2Vzc2luZ1BhcmFtcyxcbiAgICBuZWVkc1Bvc3Rwcm9jZXNzaW5nLFxuICAgIHN1Yk1lc3NhZ2VzOiBbXSxcbiAgICAuLi5ORVdfT1AsXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSTE4bk9wQmFzZSBleHRlbmRzIE9wPENyZWF0ZU9wPiwgQ29uc3VtZXNTbG90T3BUcmFpdCB7XG4gIGtpbmQ6IE9wS2luZC5JMThuU3RhcnR8T3BLaW5kLkkxOG47XG5cbiAgLyoqXG4gICAqIGBYcmVmSWRgIGFsbG9jYXRlZCBmb3IgdGhpcyBpMThuIGJsb2NrLlxuICAgKi9cbiAgeHJlZjogWHJlZklkO1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBpMThuIGJsb2NrIHRoYXQgdGhpcyBvbmUgYmVsb25ncyB0by4gRm9yIGEgcm9vdCBpMThuIGJsb2NrLCB0aGlzIGlzXG4gICAqIHRoZSBzYW1lIGFzIHhyZWYuXG4gICAqL1xuICByb290OiBYcmVmSWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpMThuIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wLlxuICAgKi9cbiAgbWVzc2FnZTogaTE4bi5NZXNzYWdlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggaW4gdGhlIGNvbnN0cyBhcnJheSB3aGVyZSB0aGUgbWVzc2FnZSBpMThuIG1lc3NhZ2UgaXMgc3RvcmVkLlxuICAgKi9cbiAgbWVzc2FnZUluZGV4OiBDb25zdEluZGV4fG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGlzIHN1Yi1ibG9jayBpbiB0aGUgaTE4biBtZXNzYWdlLiBGb3IgYSByb290IGkxOG4gYmxvY2ssIHRoaXMgaXMgbnVsbC5cbiAgICovXG4gIHN1YlRlbXBsYXRlSW5kZXg6IG51bWJlcnxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgaTE4biBjb250ZXh0IGdlbmVyYXRlZCBmcm9tIHRoaXMgYmxvY2suIEluaXRpYWxseSBudWxsLCB1bnRpbCB0aGUgY29udGV4dCBpcyBjcmVhdGVkLlxuICAgKi9cbiAgY29udGV4dDogWHJlZklkfG51bGw7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBlbXB0eSBpMThuIGJsb2NrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEkxOG5PcCBleHRlbmRzIEkxOG5PcEJhc2Uge1xuICBraW5kOiBPcEtpbmQuSTE4bjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzdGFydCBvZiBhbiBpMThuIGJsb2NrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEkxOG5TdGFydE9wIGV4dGVuZHMgSTE4bk9wQmFzZSB7XG4gIGtpbmQ6IE9wS2luZC5JMThuU3RhcnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGBJMThuU3RhcnRPcGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJMThuU3RhcnRPcCh4cmVmOiBYcmVmSWQsIG1lc3NhZ2U6IGkxOG4uTWVzc2FnZSwgcm9vdD86IFhyZWZJZCk6IEkxOG5TdGFydE9wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBPcEtpbmQuSTE4blN0YXJ0LFxuICAgIHhyZWYsXG4gICAgaGFuZGxlOiBuZXcgU2xvdEhhbmRsZSgpLFxuICAgIHJvb3Q6IHJvb3QgPz8geHJlZixcbiAgICBtZXNzYWdlLFxuICAgIG1lc3NhZ2VJbmRleDogbnVsbCxcbiAgICBzdWJUZW1wbGF0ZUluZGV4OiBudWxsLFxuICAgIGNvbnRleHQ6IG51bGwsXG4gICAgLi4uTkVXX09QLFxuICAgIC4uLlRSQUlUX0NPTlNVTUVTX1NMT1QsXG4gIH07XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZW5kIG9mIGFuIGkxOG4gYmxvY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSTE4bkVuZE9wIGV4dGVuZHMgT3A8Q3JlYXRlT3A+IHtcbiAga2luZDogT3BLaW5kLkkxOG5FbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBgWHJlZklkYCBvZiB0aGUgYEkxOG5TdGFydE9wYCB0aGF0IGNyZWF0ZWQgdGhpcyBibG9jay5cbiAgICovXG4gIHhyZWY6IFhyZWZJZDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gYEkxOG5FbmRPcGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJMThuRW5kT3AoeHJlZjogWHJlZklkKTogSTE4bkVuZE9wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBPcEtpbmQuSTE4bkVuZCxcbiAgICB4cmVmLFxuICAgIC4uLk5FV19PUCxcbiAgfTtcbn1cblxuLyoqXG4gKiBBbiBvcCB0aGF0IHJlcHJlc2VudHMgdGhlIHN0YXJ0IG9mIGFuIElDVSBleHByZXNzaW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEljdVN0YXJ0T3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4ge1xuICBraW5kOiBPcEtpbmQuSWN1U3RhcnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgSUNVLlxuICAgKi9cbiAgeHJlZjogWHJlZklkO1xuXG4gIC8qKlxuICAgKiBUaGUgaTE4biBtZXNzYWdlIGZvciB0aGlzIElDVS5cbiAgICovXG4gIG1lc3NhZ2U6IGkxOG4uTWVzc2FnZTtcblxuICAvKipcbiAgICogUGxhY2Vob2xkZXIgdXNlZCB0byByZWZlcmVuY2UgdGhpcyBJQ1UgaW4gb3RoZXIgaTE4biBtZXNzYWdlcy5cbiAgICovXG4gIG1lc3NhZ2VQbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgaTE4biBjb250ZXh0IGZvciB0aGlzIG9wLiBJbml0aWFsbHkgbnVsbCwgdW50aWwgdGhlIGNvbnRleHQgaXMgY3JlYXRlZC5cbiAgICovXG4gIGNvbnRleHQ6IFhyZWZJZHxudWxsO1xuXG4gIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIElDVSBzdGFydCBvcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUljdVN0YXJ0T3AoXG4gICAgeHJlZjogWHJlZklkLCBtZXNzYWdlOiBpMThuLk1lc3NhZ2UsIG1lc3NhZ2VQbGFjZWhvbGRlcjogc3RyaW5nLFxuICAgIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbik6IEljdVN0YXJ0T3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IE9wS2luZC5JY3VTdGFydCxcbiAgICB4cmVmLFxuICAgIG1lc3NhZ2UsXG4gICAgbWVzc2FnZVBsYWNlaG9sZGVyLFxuICAgIGNvbnRleHQ6IG51bGwsXG4gICAgc291cmNlU3BhbixcbiAgICAuLi5ORVdfT1AsXG4gIH07XG59XG5cbi8qKlxuICogQW4gb3AgdGhhdCByZXByZXNlbnRzIHRoZSBlbmQgb2YgYW4gSUNVIGV4cHJlc3Npb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWN1RW5kT3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4ge1xuICBraW5kOiBPcEtpbmQuSWN1RW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgSWN1U3RhcnRPcC5cbiAgICovXG4gIHhyZWY6IFhyZWZJZDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIElDVSBlbmQgb3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJY3VFbmRPcCh4cmVmOiBYcmVmSWQpOiBJY3VFbmRPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLkljdUVuZCxcbiAgICB4cmVmLFxuICAgIC4uLk5FV19PUCxcbiAgfTtcbn1cblxuLyoqXG4gKiBBbiBpMThuIGNvbnRleHQgdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgdHJhbnNsYXRlZCBpMThuIG1lc3NhZ2UuIEEgc2VwYXJhdGUgY29udGV4dCBpcyBjcmVhdGVkXG4gKiBmb3IgdGhyZWUgZGlmZmVyZW50IHNjZW5hcmlvczpcbiAqXG4gKiAxLiBGb3IgZWFjaCB0b3AtbGV2ZWwgaTE4biBibG9jay5cbiAqIDIuIEZvciBlYWNoIElDVSByZWZlcmVuY2VkIGFzIGEgc3ViLW1lc3NhZ2UuIElDVXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBhcyBhIHN1Yi1tZXNzYWdlIHdpbGwgYmVcbiAqICAgIHVzZWQgdG8gZ2VuZXJhdGUgYSBzZXBhcmF0ZSBpMThuIG1lc3NhZ2UsIGJ1dCB3aWxsIG5vdCBiZSBleHRyYWN0ZWQgZGlyZWN0bHkgaW50byB0aGUgY29uc3RzXG4gKiAgICBhcnJheS4gSW5zdGVhZCB0aGV5IHdpbGwgYmUgcHVsbGVkIGluIGFzIHBhcnQgb2YgdGhlIGluaXRpYWxpemF0aW9uIHN0YXRlbWVudHMgZm9yIHRoZSBtZXNzYWdlXG4gKiAgICB0aGF0IHJlZmVyZW5jZXMgdGhlbS5cbiAqIDMuIEZvciBlYWNoIGkxOG4gYXR0cmlidXRlLlxuICpcbiAqIENoaWxkIGkxOG4gYmxvY2tzLCByZXN1bHRpbmcgZnJvbSB0aGUgdXNlIG9mIGFuIG5nLXRlbXBsYXRlIGluc2lkZSBvZiBhIHBhcmVudCBpMThuIGJsb2NrLCBkbyBub3RcbiAqIGdlbmVyYXRlIGEgc2VwYXJhdGUgY29udGV4dC4gSW5zdGVhZCB0aGVpciBjb250ZW50IGlzIGluY2x1ZGVkIGluIHRoZSB0cmFuc2xhdGVkIG1lc3NhZ2UgZm9yXG4gKiB0aGVpciByb290IGJsb2NrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEkxOG5Db250ZXh0T3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4ge1xuICBraW5kOiBPcEtpbmQuSTE4bkNvbnRleHQ7XG5cbiAgY29udGV4dEtpbmQ6IEkxOG5Db250ZXh0S2luZDtcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoaXMgY29udGV4dC5cbiAgICovXG4gIHhyZWY6IFhyZWZJZDtcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gdGhlIEkxOG5TdGFydE9wIG9yIEkxOG5PcCB0aGlzIGNvbnRleHQgYmVsb25ncyB0by5cbiAgICpcbiAgICogSXQgaXMgcG9zc2libGUgZm9yIG11bHRpcGxlIGNvbnRleHRzIHRvIGJlbG9uZyB0byB0aGUgc2FtZSBibG9jaywgc2luY2UgYm90aCB0aGUgYmxvY2sgYW5kIGFueVxuICAgKiBJQ1VzIGluc2lkZSB0aGUgYmxvY2sgd2lsbCBlYWNoIGdldCB0aGVpciBvd24gY29udGV4dC5cbiAgICpcbiAgICogVGhpcyBtaWdodCBiZSBgbnVsbGAsIGluIHdoaWNoIGNhc2UgdGhlIGNvbnRleHQgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbiBpMThuIGJsb2NrLiBUaGlzXG4gICAqIHByb2JhYmx5IG1lYW5zIHRoYXQgaXQgYmVsb25ncyB0byBhbiBpMThuIGF0dHJpYnV0ZS5cbiAgICovXG4gIGkxOG5CbG9jazogWHJlZklkfG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBpMThuIG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dC5cbiAgICovXG4gIG1lc3NhZ2U6IGkxOG4uTWVzc2FnZTtcblxuICAvKipcbiAgICogVGhlIHBhcmFtIG1hcCBmb3IgdGhpcyBjb250ZXh0LlxuICAgKi9cbiAgcGFyYW1zOiBNYXA8c3RyaW5nLCBJMThuUGFyYW1WYWx1ZVtdPjtcblxuICAvKipcbiAgICogVGhlIHBvc3QtcHJvY2Vzc2luZyBwYXJhbSBtYXAgZm9yIHRoaXMgY29udGV4dC5cbiAgICovXG4gIHBvc3Rwcm9jZXNzaW5nUGFyYW1zOiBNYXA8c3RyaW5nLCBJMThuUGFyYW1WYWx1ZVtdPjtcblxuICBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJMThuQ29udGV4dE9wKFxuICAgIGNvbnRleHRLaW5kOiBJMThuQ29udGV4dEtpbmQsIHhyZWY6IFhyZWZJZCwgaTE4bkJsb2NrOiBYcmVmSWR8bnVsbCwgbWVzc2FnZTogaTE4bi5NZXNzYWdlLFxuICAgIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3Bhbik6IEkxOG5Db250ZXh0T3Age1xuICBpZiAoaTE4bkJsb2NrID09PSBudWxsICYmIGNvbnRleHRLaW5kICE9PSBJMThuQ29udGV4dEtpbmQuQXR0cikge1xuICAgIHRocm93IG5ldyBFcnJvcignQXNzZXJ0aW9uRXJyb3I6IGkxOG5CbG9jayBtdXN0IGJlIHByb3ZpZGVkIGZvciBub24tYXR0cmlidXRlIGNvbnRleHRzLicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBPcEtpbmQuSTE4bkNvbnRleHQsXG4gICAgY29udGV4dEtpbmQsXG4gICAgeHJlZixcbiAgICBpMThuQmxvY2ssXG4gICAgbWVzc2FnZSxcbiAgICBzb3VyY2VTcGFuLFxuICAgIHBhcmFtczogbmV3IE1hcCgpLFxuICAgIHBvc3Rwcm9jZXNzaW5nUGFyYW1zOiBuZXcgTWFwKCksXG4gICAgLi4uTkVXX09QLFxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEkxOG5BdHRyaWJ1dGVzT3AgZXh0ZW5kcyBPcDxDcmVhdGVPcD4sIENvbnN1bWVzU2xvdE9wVHJhaXQge1xuICBraW5kOiBPcEtpbmQuSTE4bkF0dHJpYnV0ZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRhcmdldGVkIGJ5IHRoZXNlIGF0dHJpYnV0ZXMuXG4gICAqL1xuICB0YXJnZXQ6IFhyZWZJZDtcblxuICAvKipcbiAgICogSTE4bkF0dHJpYnV0ZXMgaW5zdHJ1Y3Rpb25zIGNvcnJlc3BvbmQgdG8gYSBjb25zdCBhcnJheSB3aXRoIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqL1xuICBpMThuQXR0cmlidXRlc0NvbmZpZzogQ29uc3RJbmRleHxudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSTE4bkF0dHJpYnV0ZXNPcChcbiAgICB4cmVmOiBYcmVmSWQsIGhhbmRsZTogU2xvdEhhbmRsZSwgdGFyZ2V0OiBYcmVmSWQpOiBJMThuQXR0cmlidXRlc09wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBPcEtpbmQuSTE4bkF0dHJpYnV0ZXMsXG4gICAgeHJlZixcbiAgICBoYW5kbGUsXG4gICAgdGFyZ2V0LFxuICAgIGkxOG5BdHRyaWJ1dGVzQ29uZmlnOiBudWxsLFxuICAgIC4uLk5FV19PUCxcbiAgICAuLi5UUkFJVF9DT05TVU1FU19TTE9ULFxuICB9O1xufVxuXG4vKipcbiAqIEFuIGluZGV4IGludG8gdGhlIGBjb25zdHNgIGFycmF5IHdoaWNoIGlzIHNoYXJlZCBhY3Jvc3MgdGhlIGNvbXBpbGF0aW9uIG9mIGFsbCB2aWV3cyBpbiBhXG4gKiBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCB0eXBlIENvbnN0SW5kZXggPSBudW1iZXIme19fYnJhbmQ6ICdDb25zdEluZGV4J307XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXRlcmFsT3JBcnJheUxpdGVyYWwodmFsdWU6IGFueSk6IG8uRXhwcmVzc2lvbiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBvLmxpdGVyYWxBcnIodmFsdWUubWFwKGxpdGVyYWxPckFycmF5TGl0ZXJhbCkpO1xuICB9XG4gIHJldHVybiBvLmxpdGVyYWwodmFsdWUsIG8uSU5GRVJSRURfVFlQRSk7XG59XG4iXX0=
@@ -8,15 +8,18 @@
8
8
  import { OpKind } from '../enums';
9
9
  import { TRAIT_CONSUMES_VARS } from '../traits';
10
10
  import { NEW_OP } from './shared';
11
- export function createHostPropertyOp(name, expression, isAnimationTrigger, sourceSpan) {
11
+ export function createHostPropertyOp(name, expression, isAnimationTrigger, i18nContext, securityContext, sourceSpan) {
12
12
  return {
13
13
  kind: OpKind.HostProperty,
14
14
  name,
15
15
  expression,
16
16
  isAnimationTrigger,
17
+ i18nContext,
18
+ securityContext,
19
+ sanitizer: null,
17
20
  sourceSpan,
18
21
  ...TRAIT_CONSUMES_VARS,
19
22
  ...NEW_OP,
20
23
  };
21
24
  }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy90ZW1wbGF0ZS9waXBlbGluZS9pci9zcmMvb3BzL2hvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBSUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVoQyxPQUFPLEVBQW9CLG1CQUFtQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWpFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFpQmhDLE1BQU0sVUFBVSxvQkFBb0IsQ0FDaEMsSUFBWSxFQUFFLFVBQXNDLEVBQUUsa0JBQTJCLEVBQ2pGLFVBQWdDO0lBQ2xDLE9BQU87UUFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLFlBQVk7UUFDekIsSUFBSTtRQUNKLFVBQVU7UUFDVixrQkFBa0I7UUFDbEIsVUFBVTtRQUNWLEdBQUcsbUJBQW1CO1FBQ3RCLEdBQUcsTUFBTTtLQUNWLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIG8gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL291dHB1dC9vdXRwdXRfYXN0JztcbmltcG9ydCB7UGFyc2VTb3VyY2VTcGFufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcGFyc2VfdXRpbCc7XG5pbXBvcnQge09wS2luZH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHtPcH0gZnJvbSAnLi4vb3BlcmF0aW9ucyc7XG5pbXBvcnQge0NvbnN1bWVzVmFyc1RyYWl0LCBUUkFJVF9DT05TVU1FU19WQVJTfSBmcm9tICcuLi90cmFpdHMnO1xuXG5pbXBvcnQge05FV19PUH0gZnJvbSAnLi9zaGFyZWQnO1xuXG5pbXBvcnQgdHlwZSB7SW50ZXJwb2xhdGlvbiwgVXBkYXRlT3B9IGZyb20gJy4vdXBkYXRlJztcblxuXG4vKipcbiAqIExvZ2ljYWwgb3BlcmF0aW9uIHJlcHJlc2VudGluZyBhIGhvc3QgYmluZGluZyB0byBhIHByb3BlcnR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RQcm9wZXJ0eU9wIGV4dGVuZHMgT3A8VXBkYXRlT3A+LCBDb25zdW1lc1ZhcnNUcmFpdCB7XG4gIGtpbmQ6IE9wS2luZC5Ib3N0UHJvcGVydHk7XG4gIG5hbWU6IHN0cmluZztcbiAgZXhwcmVzc2lvbjogby5FeHByZXNzaW9ufEludGVycG9sYXRpb247XG4gIGlzQW5pbWF0aW9uVHJpZ2dlcjogYm9vbGVhbjtcblxuICBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW58bnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhvc3RQcm9wZXJ0eU9wKFxuICAgIG5hbWU6IHN0cmluZywgZXhwcmVzc2lvbjogby5FeHByZXNzaW9ufEludGVycG9sYXRpb24sIGlzQW5pbWF0aW9uVHJpZ2dlcjogYm9vbGVhbixcbiAgICBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW58bnVsbCk6IEhvc3RQcm9wZXJ0eU9wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBPcEtpbmQuSG9zdFByb3BlcnR5LFxuICAgIG5hbWUsXG4gICAgZXhwcmVzc2lvbixcbiAgICBpc0FuaW1hdGlvblRyaWdnZXIsXG4gICAgc291cmNlU3BhbixcbiAgICAuLi5UUkFJVF9DT05TVU1FU19WQVJTLFxuICAgIC4uLk5FV19PUCxcbiAgfTtcbn1cbiJdfQ==
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy90ZW1wbGF0ZS9waXBlbGluZS9pci9zcmMvb3BzL2hvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBS0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVoQyxPQUFPLEVBQW9CLG1CQUFtQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWpFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUF1QmhDLE1BQU0sVUFBVSxvQkFBb0IsQ0FDaEMsSUFBWSxFQUFFLFVBQXNDLEVBQUUsa0JBQTJCLEVBQ2pGLFdBQXdCLEVBQUUsZUFBa0QsRUFDNUUsVUFBZ0M7SUFDbEMsT0FBTztRQUNMLElBQUksRUFBRSxNQUFNLENBQUMsWUFBWTtRQUN6QixJQUFJO1FBQ0osVUFBVTtRQUNWLGtCQUFrQjtRQUNsQixXQUFXO1FBQ1gsZUFBZTtRQUNmLFNBQVMsRUFBRSxJQUFJO1FBQ2YsVUFBVTtRQUNWLEdBQUcsbUJBQW1CO1FBQ3RCLEdBQUcsTUFBTTtLQUNWLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIG8gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL291dHB1dC9vdXRwdXRfYXN0JztcbmltcG9ydCB7UGFyc2VTb3VyY2VTcGFufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcGFyc2VfdXRpbCc7XG5pbXBvcnQge1NlY3VyaXR5Q29udGV4dH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQge09wS2luZH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHtPcCwgWHJlZklkfSBmcm9tICcuLi9vcGVyYXRpb25zJztcbmltcG9ydCB7Q29uc3VtZXNWYXJzVHJhaXQsIFRSQUlUX0NPTlNVTUVTX1ZBUlN9IGZyb20gJy4uL3RyYWl0cyc7XG5cbmltcG9ydCB7TkVXX09QfSBmcm9tICcuL3NoYXJlZCc7XG5cbmltcG9ydCB0eXBlIHtJbnRlcnBvbGF0aW9uLCBVcGRhdGVPcH0gZnJvbSAnLi91cGRhdGUnO1xuXG5cbi8qKlxuICogTG9naWNhbCBvcGVyYXRpb24gcmVwcmVzZW50aW5nIGEgaG9zdCBiaW5kaW5nIHRvIGEgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG9zdFByb3BlcnR5T3AgZXh0ZW5kcyBPcDxVcGRhdGVPcD4sIENvbnN1bWVzVmFyc1RyYWl0IHtcbiAga2luZDogT3BLaW5kLkhvc3RQcm9wZXJ0eTtcbiAgbmFtZTogc3RyaW5nO1xuICBleHByZXNzaW9uOiBvLkV4cHJlc3Npb258SW50ZXJwb2xhdGlvbjtcbiAgaXNBbmltYXRpb25UcmlnZ2VyOiBib29sZWFuO1xuXG4gIGkxOG5Db250ZXh0OiBYcmVmSWR8bnVsbDtcblxuICBzZWN1cml0eUNvbnRleHQ6IFNlY3VyaXR5Q29udGV4dHxTZWN1cml0eUNvbnRleHRbXTtcblxuICBzYW5pdGl6ZXI6IG8uRXhwcmVzc2lvbnxudWxsO1xuXG4gIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3BhbnxudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSG9zdFByb3BlcnR5T3AoXG4gICAgbmFtZTogc3RyaW5nLCBleHByZXNzaW9uOiBvLkV4cHJlc3Npb258SW50ZXJwb2xhdGlvbiwgaXNBbmltYXRpb25UcmlnZ2VyOiBib29sZWFuLFxuICAgIGkxOG5Db250ZXh0OiBYcmVmSWR8bnVsbCwgc2VjdXJpdHlDb250ZXh0OiBTZWN1cml0eUNvbnRleHR8U2VjdXJpdHlDb250ZXh0W10sXG4gICAgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFufG51bGwpOiBIb3N0UHJvcGVydHlPcCB7XG4gIHJldHVybiB7XG4gICAga2luZDogT3BLaW5kLkhvc3RQcm9wZXJ0eSxcbiAgICBuYW1lLFxuICAgIGV4cHJlc3Npb24sXG4gICAgaXNBbmltYXRpb25UcmlnZ2VyLFxuICAgIGkxOG5Db250ZXh0LFxuICAgIHNlY3VyaXR5Q29udGV4dCxcbiAgICBzYW5pdGl6ZXI6IG51bGwsXG4gICAgc291cmNlU3BhbixcbiAgICAuLi5UUkFJVF9DT05TVU1FU19WQVJTLFxuICAgIC4uLk5FV19PUCxcbiAgfTtcbn1cbiJdfQ==