@decaf-ts/for-angular 0.0.23 → 0.0.24

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 (35) hide show
  1. package/components/component-renderer/component-renderer.component.d.ts +3 -2
  2. package/components/crud-field/crud-field.component.d.ts +4 -2
  3. package/components/fieldset/fieldset.component.d.ts +10 -1
  4. package/components/for-angular-components.module.d.ts +3 -2
  5. package/components/index.d.ts +1 -0
  6. package/components/layout/layout.component.d.ts +1 -24
  7. package/components/model-renderer/model-renderer.component.d.ts +6 -1
  8. package/components/steped-form/steped-form.component.d.ts +243 -0
  9. package/engine/NgxBaseComponent.d.ts +2 -2
  10. package/engine/NgxCrudFormField.d.ts +1 -0
  11. package/engine/NgxFormService.d.ts +381 -48
  12. package/engine/NgxRenderingEngine.d.ts +4 -2
  13. package/engine/interfaces.d.ts +1 -1
  14. package/engine/types.d.ts +4 -3
  15. package/esm2022/components/component-renderer/component-renderer.component.mjs +10 -4
  16. package/esm2022/components/crud-field/crud-field.component.mjs +14 -3
  17. package/esm2022/components/crud-form/crud-form.component.mjs +3 -3
  18. package/esm2022/components/empty-state/empty-state.component.mjs +2 -2
  19. package/esm2022/components/fieldset/fieldset.component.mjs +5 -3
  20. package/esm2022/components/for-angular-components.module.mjs +10 -5
  21. package/esm2022/components/index.mjs +2 -1
  22. package/esm2022/components/layout/layout.component.mjs +4 -29
  23. package/esm2022/components/list/list.component.mjs +3 -3
  24. package/esm2022/components/model-renderer/model-renderer.component.mjs +10 -3
  25. package/esm2022/components/steped-form/steped-form.component.mjs +291 -0
  26. package/esm2022/engine/NgxBaseComponent.mjs +10 -4
  27. package/esm2022/engine/NgxCrudFormField.mjs +19 -17
  28. package/esm2022/engine/NgxFormService.mjs +438 -57
  29. package/esm2022/engine/NgxRenderingEngine.mjs +21 -10
  30. package/esm2022/engine/ValidatorFactory.mjs +4 -4
  31. package/esm2022/engine/interfaces.mjs +1 -1
  32. package/esm2022/engine/types.mjs +1 -1
  33. package/fesm2022/decaf-ts-for-angular.mjs +818 -136
  34. package/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
  35. package/package.json +1 -1
@@ -52,6 +52,8 @@ export class NgxRenderingEngine extends RenderingEngine {
52
52
  * @type {string | undefined}
53
53
  */
54
54
  static { this._operation = undefined; }
55
+ static { this._projectable = true; }
56
+ static { this._parentProps = undefined; }
55
57
  /**
56
58
  * @description Constructs a new NgxRenderingEngine instance
57
59
  * @summary Initializes a new instance of the Angular rendering engine by calling the parent
@@ -120,7 +122,6 @@ export class NgxRenderingEngine extends RenderingEngine {
120
122
  const hiddenOn = inputs?.hidden || [];
121
123
  if (hiddenOn.includes(operation))
122
124
  return { inputs, injector };
123
- // const hiddenOn = inputs?.hidden || [];
124
125
  const result = {
125
126
  component,
126
127
  inputs,
@@ -130,6 +131,8 @@ export class NgxRenderingEngine extends RenderingEngine {
130
131
  result.inputs['rendererId'] = fieldDef.rendererId;
131
132
  // process children
132
133
  if (fieldDef.children?.length) {
134
+ if (!NgxRenderingEngine._parentProps && inputs?.pages)
135
+ NgxRenderingEngine._parentProps = { pages: inputs?.pages };
133
136
  result.children = fieldDef.children.map((child) => {
134
137
  if (child?.children?.length) {
135
138
  child.children = child.children.filter(c => {
@@ -138,15 +141,18 @@ export class NgxRenderingEngine extends RenderingEngine {
138
141
  return c;
139
142
  });
140
143
  }
141
- // create a child form and add its controls as properties of child.props
142
- NgxFormService.addControlFromProps(registryFormId, child.props, inputs);
144
+ NgxFormService.addControlFromProps(registryFormId, child.props, { ...inputs, ...NgxRenderingEngine._parentProps || {} });
143
145
  return this.fromFieldDefinition(child, vcr, injector, tpl, registryFormId);
144
146
  });
145
147
  }
146
148
  // generating DOM
149
+ const projectable = NgxRenderingEngine._projectable;
147
150
  vcr.clear();
148
- const template = vcr.createEmbeddedView(tpl, injector).rootNodes;
149
- const componentInstance = NgxRenderingEngine.createComponent(component, { ...inputs, model: this._model }, componentMetadata, vcr, injector, template);
151
+ const template = !projectable ? [] : vcr.createEmbeddedView(tpl, injector).rootNodes;
152
+ const hasChildren = Object.values(possibleInputs).some(({ propName }) => propName === 'children');
153
+ const hasModel = Object.values(possibleInputs).some(({ propName }) => propName === 'children');
154
+ const componentInputs = Object.assign(inputs, (hasModel ? { model: this._model } : {}), (hasChildren ? { children: fieldDef?.['children'] || [] } : {}));
155
+ const componentInstance = NgxRenderingEngine.createComponent(component, componentInputs, componentMetadata, vcr, injector, template);
150
156
  result.instance = NgxRenderingEngine._instance = componentInstance.instance;
151
157
  return result;
152
158
  }
@@ -194,8 +200,11 @@ export class NgxRenderingEngine extends RenderingEngine {
194
200
  *
195
201
  * @return {Promise<void>} A promise that resolves when the instance is destroyed
196
202
  */
197
- static async destroy() {
203
+ static async destroy(formId) {
204
+ if (formId)
205
+ NgxFormService.removeRegistry(formId);
198
206
  NgxRenderingEngine._instance = undefined;
207
+ NgxRenderingEngine._parentProps = undefined;
199
208
  }
200
209
  /**
201
210
  * @description Renders a model into an Angular component output
@@ -227,18 +236,20 @@ export class NgxRenderingEngine extends RenderingEngine {
227
236
  * FromField-->>Render: AngularDynamicOutput
228
237
  * Render-->>Client: return AngularDynamicOutput
229
238
  */
230
- render(model, globalProps, vcr, injector, tpl) {
239
+ render(model, globalProps, vcr, injector, tpl, projectable = true) {
231
240
  let result;
232
241
  try {
233
242
  this._model = model;
243
+ NgxRenderingEngine._projectable = projectable;
234
244
  const formId = Date.now().toString(36).toUpperCase();
235
245
  const fieldDef = this.toFieldDefinition(model, globalProps);
236
246
  const props = fieldDef.props;
237
247
  if (!NgxRenderingEngine._operation)
238
248
  NgxRenderingEngine._operation = props?.['operation'] || undefined;
249
+ const formGroup = NgxFormService.createForm(formId, props);
239
250
  result = this.fromFieldDefinition(fieldDef, vcr, injector, tpl, formId);
240
- result.instance['formGroup'] = NgxFormService.getControlFromForm(formId);
241
- NgxFormService.removeRegistry(formId);
251
+ result.instance['formGroup'] = formGroup;
252
+ NgxRenderingEngine.destroy(formId);
242
253
  }
243
254
  catch (e) {
244
255
  throw new InternalError(`Failed to render Model ${model.constructor.name}: ${e}`);
@@ -362,4 +373,4 @@ export class NgxRenderingEngine extends RenderingEngine {
362
373
  });
363
374
  }
364
375
  }
365
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4UmVuZGVyaW5nRW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvTmd4UmVuZGVyaW5nRW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBS0wsb0JBQW9CLEdBSXJCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxlQUE2RDtJQTRCbkc7Ozs7Ozs7Ozs7O09BV0c7YUFDWSxlQUFVLEdBQXVCLFNBQVMsQ0FBQztJQWdCMUQ7Ozs7Ozs7O09BUUc7SUFDSDtRQUNFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrQ0c7SUFDSyxtQkFBbUIsQ0FDekIsUUFBaUQsRUFDakQsR0FBcUIsRUFDckIsUUFBa0IsRUFDbEIsR0FBeUIsRUFDekIsaUJBQXlCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFO1FBRTlELE1BQU0sR0FBRyxHQUFJLFFBQXFCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxXQUF1QyxDQUFDO1FBRTlELE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLGFBQWEsQ0FBQywwQkFBMEIsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUVELE1BQU0sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsaUJBQWlCLENBQUM7UUFDckQsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVyQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0RCxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxRQUFRO2dCQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixFQUFFO1lBQ2hELE9BQU8sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLFFBQVEsQ0FBQyxHQUFHLEtBQUssWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEcsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDO1FBRWhELE1BQU0sUUFBUSxHQUFHLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3RDLElBQUksUUFBcUIsQ0FBQyxRQUFRLENBQUMsU0FBbUIsQ0FBQztZQUNyRCxPQUFPLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBQyxDQUFDO1FBQzVCLHlDQUF5QztRQUN6QyxNQUFNLE1BQU0sR0FBeUI7WUFDbkMsU0FBUztZQUNULE1BQU07WUFDTixRQUFRO1NBQ1QsQ0FBQztRQUVGLElBQUksUUFBUSxDQUFDLFVBQVU7WUFDcEIsTUFBTSxDQUFDLE1BQWtDLENBQUMsWUFBWSxDQUFDLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUVqRixtQkFBbUI7UUFDbkIsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDaEQsSUFBRyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO29CQUMzQixLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUN6QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7d0JBQ3hDLElBQUcsQ0FBRSxRQUFxQixDQUFDLFFBQVEsQ0FBQyxTQUFtQixDQUFDOzRCQUN0RCxPQUFPLENBQUMsQ0FBQTtvQkFDWixDQUFDLENBQUMsQ0FBQTtnQkFDSixDQUFDO2dCQUNELHdFQUF3RTtnQkFDeEUsY0FBYyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN4RSxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDN0UsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsaUJBQWlCO1FBQ2pCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNaLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2pFLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQUMsZUFBZSxDQUMxRCxTQUFTLEVBQ1QsRUFBRSxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUNqQyxpQkFBaUIsRUFDakIsR0FBRyxFQUNILFFBQVEsRUFDUixRQUFRLENBQ1QsQ0FBQztRQUVGLE1BQU0sQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDLFFBQXlCLENBQUM7UUFFN0YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUdEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQXdCLEVBQUUsU0FBbUIsRUFBRSxFQUFFLFFBQWtDLEVBQUUsR0FBcUIsRUFBRSxRQUFrQixFQUFFLFdBQW1CLEVBQUU7UUFDMUssTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLFNBQTBCLEVBQUU7WUFDeEUsbUJBQW1CLEVBQUUsUUFBK0I7WUFDcEQsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDcEQsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILGFBQWEsQ0FBQyxLQUFZLEVBQUUsV0FBb0M7UUFDOUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDM0MsQ0FBQztJQUdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTZCRztJQUNNLE1BQU0sQ0FDYixLQUFRLEVBQ1IsV0FBb0MsRUFDcEMsR0FBcUIsRUFDckIsUUFBa0IsRUFDbEIsR0FBeUI7UUFFekIsSUFBSSxNQUE0QixDQUFDO1FBQ2pDLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztZQUM1RCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBaUIsQ0FBQztZQUN6QyxJQUFHLENBQUMsa0JBQWtCLENBQUMsVUFBVTtnQkFDL0Isa0JBQWtCLENBQUMsVUFBVSxHQUFHLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFNBQVMsQ0FBQztZQUNwRSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV2RSxNQUFPLENBQUMsUUFBc0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxjQUFjLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekYsY0FBYyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksYUFBYSxDQUNyQiwwQkFBMEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQ3pELENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDTSxLQUFLLENBQUMsVUFBVTtRQUN2QixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQ2xCLE9BQU87UUFDVCxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBWSxFQUFFLFdBQWlDO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQzdDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQzFCLE1BQU0sSUFBSSxhQUFhLENBQUMsc0NBQXNDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRztZQUN2QixXQUFXLEVBQUUsV0FBVztTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBaUI7UUFDakMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxhQUFhLENBQUMsaUNBQWlDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBVSxHQUFHLENBQUMsR0FBVztRQUM3QixPQUFPLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQ0c7SUFDSCxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQWdDLEVBQUUsTUFBZ0IsRUFBRSxRQUFrQztRQUNyRyxTQUFTLGVBQWUsQ0FBQyxTQUFnQyxFQUFFLEtBQWU7WUFDeEUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQy9CLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUs7b0JBQ3RDLE9BQU8sZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDM0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzlDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBMEIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUN6RixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksR0FBRyxLQUFLLE9BQU87b0JBQ2pCLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLGlDQUFpQztnQkFDakMseURBQXlEO2dCQUN6RCxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmllbGREZWZpbml0aW9uLCBSZW5kZXJpbmdFbmdpbmUgfSBmcm9tICdAZGVjYWYtdHMvdWktZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBbmd1bGFyRmllbGREZWZpbml0aW9uLCBLZXlWYWx1ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQW5ndWxhckR5bmFtaWNPdXRwdXQgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQW5ndWxhckVuZ2luZUtleXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWx9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50TWlycm9yLFxuICBDb21wb25lbnRSZWYsXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXG4gIEluamVjdG9yLFxuICByZWZsZWN0Q29tcG9uZW50VHlwZSxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4Rm9ybVNlcnZpY2UgfSBmcm9tICcuL05neEZvcm1TZXJ2aWNlJztcbmltcG9ydCB7IGlzRGV2ZWxvcG1lbnRNb2RlIH0gZnJvbSAnLi4vaGVscGVycyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFuZ3VsYXIgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJlbmRlcmluZ0VuZ2luZSB3aXRoIGVuaGFuY2VkIGZlYXR1cmVzXG4gKiBAc3VtbWFyeSBUaGlzIGNsYXNzIGV4dGVuZHMgdGhlIGJhc2UgUmVuZGVyaW5nRW5naW5lIHRvIHByb3ZpZGUgQW5ndWxhci1zcGVjaWZpYyByZW5kZXJpbmcgY2FwYWJpbGl0aWVzXG4gKiB3aXRoIGFkZGl0aW9uYWwgZmVhdHVyZXMgY29tcGFyZWQgdG8gTmd4UmVuZGVyaW5nRW5naW5lLiBJdCBoYW5kbGVzIHRoZSBjb252ZXJzaW9uIG9mIGZpZWxkIGRlZmluaXRpb25zXG4gKiB0byBBbmd1bGFyIGNvbXBvbmVudHMsIG1hbmFnZXMgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiwgYW5kIHByb3ZpZGVzIHV0aWxpdGllcyBmb3IgY29tcG9uZW50IGNyZWF0aW9uXG4gKiBhbmQgaW5wdXQgaGFuZGxpbmcuIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyBBbmd1bGFyJ3MgbmV3ZXIgY29tcG9uZW50IEFQSXMuXG4gKlxuICogQHRlbXBsYXRlIEFuZ3VsYXJGaWVsZERlZmluaXRpb24gLSBUeXBlIGZvciBBbmd1bGFyLXNwZWNpZmljIGZpZWxkIGRlZmluaXRpb25zXG4gKiBAdGVtcGxhdGUgQW5ndWxhckR5bmFtaWNPdXRwdXQgLSBUeXBlIGZvciBBbmd1bGFyLXNwZWNpZmljIGNvbXBvbmVudCBvdXRwdXRcbiAqXG4gKiBAY2xhc3MgTmd4UmVuZGVyaW5nRW5naW5lXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZW5naW5lID0gTmd4UmVuZGVyaW5nRW5naW5lLmdldCgpO1xuICogZW5naW5lLmluaXRpYWxpemUoKTtcbiAqIGNvbnN0IG91dHB1dCA9IGVuZ2luZS5yZW5kZXIobXlNb2RlbCwge30sIHZpZXdDb250YWluZXJSZWYsIGluamVjdG9yLCB0ZW1wbGF0ZVJlZik7XG4gKiBgYGBcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBFbmdpbmUgYXMgTmd4UmVuZGVyaW5nRW5naW5lXG4gKiAgIHBhcnRpY2lwYW50IENvbXBvbmVudHMgYXMgUmVnaXN0ZXJlZENvbXBvbmVudHNcbiAqXG4gKiAgIENsaWVudC0+PkVuZ2luZTogZ2V0KClcbiAqICAgQ2xpZW50LT4+RW5naW5lOiBpbml0aWFsaXplKClcbiAqICAgQ2xpZW50LT4+RW5naW5lOiByZW5kZXIobW9kZWwsIHByb3BzLCB2Y3IsIGluamVjdG9yLCB0cGwpXG4gKiAgIEVuZ2luZS0+PkVuZ2luZTogdG9GaWVsZERlZmluaXRpb24obW9kZWwsIHByb3BzKVxuICogICBFbmdpbmUtPj5FbmdpbmU6IGZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAqICAgRW5naW5lLT4+Q29tcG9uZW50czogY29tcG9uZW50cyhmaWVsZERlZi50YWcpXG4gKiAgIENvbXBvbmVudHMtLT4+RW5naW5lOiBjb21wb25lbnQgY29uc3RydWN0b3JcbiAqICAgRW5naW5lLT4+RW5naW5lOiBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50LCBpbnB1dHMsIG1ldGFkYXRhLCB2Y3IsIGluamVjdG9yLCB0ZW1wbGF0ZSlcbiAqICAgRW5naW5lLS0+PkNsaWVudDogcmV0dXJuIEFuZ3VsYXJEeW5hbWljT3V0cHV0XG4gKi9cbmV4cG9ydCBjbGFzcyBOZ3hSZW5kZXJpbmdFbmdpbmUgZXh0ZW5kcyBSZW5kZXJpbmdFbmdpbmU8QW5ndWxhckZpZWxkRGVmaW5pdGlvbiwgQW5ndWxhckR5bmFtaWNPdXRwdXQ+IHtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdHJ5IG9mIGNvbXBvbmVudHMgYXZhaWxhYmxlIGZvciByZW5kZXJpbmdcbiAgICogQHN1bW1hcnkgU3RhdGljIHJlZ2lzdHJ5IHRoYXQgc3RvcmVzIGFsbCByZWdpc3RlcmVkIGNvbXBvbmVudHMgaW5kZXhlZCBieSB0aGVpciBzZWxlY3RvciBuYW1lLlxuICAgKiBFYWNoIGNvbXBvbmVudCBlbnRyeSBjb250YWlucyBhIGNvbnN0cnVjdG9yIHJlZmVyZW5jZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGluc3RhbnRpYXRlXG4gICAqIHRoZSBjb21wb25lbnQgZHVyaW5nIHRoZSByZW5kZXJpbmcgcHJvY2Vzcy4gVGhpcyByZWdpc3RyeSBpcyBzaGFyZWQgYWNyb3NzIGFsbCBpbnN0YW5jZXNcbiAgICogb2YgdGhlIHJlbmRlcmluZyBlbmdpbmUgYW5kIGlzIHBvcHVsYXRlZCB0aHJvdWdoIHRoZSByZWdpc3RlckNvbXBvbmVudCBtZXRob2QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBzdGF0aWNcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIHsgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPHVua25vd24+IH0+fVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbXBvbmVudHM6IFJlY29yZDxzdHJpbmcsIHsgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPHVua25vd24+IH0+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VycmVudGx5IGFjdGl2ZSBtb2RlbCBiZWluZyByZW5kZXJlZFxuICAgKiBAc3VtbWFyeSBTdG9yZXMgYSByZWZlcmVuY2UgdG8gdGhlIG1vZGVsIGluc3RhbmNlIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZFxuICAgKiBieSB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gVGhpcyBwcm9wZXJ0eSBpcyBzZXQgZHVyaW5nIHRoZSByZW5kZXIgbWV0aG9kIGV4ZWN1dGlvblxuICAgKiBhbmQgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSByZW5kZXJpbmcgbGlmZWN5Y2xlIHRvIGFjY2VzcyBtb2RlbCBkYXRhIGFuZCBtZXRhZGF0YS5cbiAgICogVGhlIGRlZmluaXRlIGFzc2lnbm1lbnQgYXNzZXJ0aW9uICghKSBpcyB1c2VkIGJlY2F1c2UgdGhpcyBwcm9wZXJ0eSBpcyBhbHdheXNcbiAgICogaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSB3aXRoaW4gdGhlIHJlbmRlciBtZXRob2QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtNb2RlbH1cbiAgICovXG4gIHByaXZhdGUgX21vZGVsITogTW9kZWw7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IG9wZXJhdGlvbiBjb250ZXh0IGZvciBjb21wb25lbnQgdmlzaWJpbGl0eSBjb250cm9sXG4gICAqIEBzdW1tYXJ5IFN0YXRpYyBwcm9wZXJ0eSB0aGF0IHN0b3JlcyB0aGUgY3VycmVudCBvcGVyYXRpb24gYmVpbmcgcGVyZm9ybWVkLFxuICAgKiB3aGljaCBpcyB1c2VkIHRvIGRldGVybWluZSBjb21wb25lbnQgdmlzaWJpbGl0eSB0aHJvdWdoIHRoZSAnaGlkZGVuJyBwcm9wZXJ0eS5cbiAgICogQ29tcG9uZW50cyBjYW4gc3BlY2lmeSBvcGVyYXRpb25zIHdoZXJlIHRoZXkgc2hvdWxkIGJlIGhpZGRlbiwgYW5kIHRoaXMgcHJvcGVydHlcbiAgICogcHJvdmlkZXMgdGhlIGNvbnRleHQgZm9yIHRob3NlIHZpc2liaWxpdHkgY2hlY2tzLiBUaGUgdmFsdWUgaXMgdHlwaWNhbGx5IGV4dHJhY3RlZFxuICAgKiBmcm9tIHRoZSBnbG9iYWwgcHJvcGVydGllcyBkdXJpbmcgdGhlIHJlbmRlcmluZyBwcm9jZXNzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAc3RhdGljXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfb3BlcmF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgY29tcG9uZW50IGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IFN0YXRpYyBwcm9wZXJ0eSB0aGF0IG1haW50YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgbW9zdCByZWNlbnRseSBjcmVhdGVkXG4gICAqIGNvbXBvbmVudCBpbnN0YW5jZS4gVGhpcyBpcyB1c2VkIGludGVybmFsbHkgZm9yIGNvbXBvbmVudCBsaWZlY3ljbGUgbWFuYWdlbWVudFxuICAgKiBhbmQgY2FuIGJlIGNsZWFyZWQgdGhyb3VnaCB0aGUgZGVzdHJveSBtZXRob2QuIFRoZSByZWZlcmVuY2UgYWxsb3dzIGFjY2VzcyB0b1xuICAgKiB0aGUgYWN0aXZlIGNvbXBvbmVudCBpbnN0YW5jZSBmb3Igb3BlcmF0aW9ucyB0aGF0IG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGVcbiAgICogY3VycmVudGx5IHJlbmRlcmVkIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHN0YXRpY1xuICAgKiBAdHlwZSB7VHlwZTx1bmtub3duPiB8IHVuZGVmaW5lZH1cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVHlwZTx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnN0cnVjdHMgYSBuZXcgTmd4UmVuZGVyaW5nRW5naW5lIGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBbmd1bGFyIHJlbmRlcmluZyBlbmdpbmUgYnkgY2FsbGluZyB0aGUgcGFyZW50XG4gICAqIGNvbnN0cnVjdG9yIHdpdGggdGhlICdhbmd1bGFyJyBlbmdpbmUgdHlwZSBpZGVudGlmaWVyLiBUaGlzIGNvbnN0cnVjdG9yIHNldHMgdXAgdGhlIGJhc2VcbiAgICogcmVuZGVyaW5nIGVuZ2luZSBmdW5jdGlvbmFsaXR5IHdpdGggQW5ndWxhci1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhbmQgcHJlcGFyZXMgdGhlXG4gICAqIGluc3RhbmNlIGZvciBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFuZCByZW5kZXJpbmcgb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignYW5ndWxhcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIGZpZWxkIGRlZmluaXRpb24gdG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0XG4gICAqIEBzdW1tYXJ5IFRoaXMgcHJpdmF0ZSBtZXRob2QgdGFrZXMgYSBmaWVsZCBkZWZpbml0aW9uIGFuZCBjcmVhdGVzIHRoZSBjb3JyZXNwb25kaW5nIEFuZ3VsYXIgY29tcG9uZW50LlxuICAgKiBJdCBoYW5kbGVzIGNvbXBvbmVudCBpbnN0YW50aWF0aW9uLCBpbnB1dCBwcm9wZXJ0eSBtYXBwaW5nLCBhbmQgY2hpbGQgY29tcG9uZW50IHJlbmRlcmluZy5cbiAgICogVGhlIG1ldGhvZCB2YWxpZGF0ZXMgaW5wdXQgcHJvcGVydGllcyBhZ2FpbnN0IHRoZSBjb21wb25lbnQncyBtZXRhZGF0YSBhbmQgcHJvY2Vzc2VzXG4gICAqIGNoaWxkIGNvbXBvbmVudHMgcmVjdXJzaXZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7RmllbGREZWZpbml0aW9uPEFuZ3VsYXJGaWVsZERlZmluaXRpb24+fSBmaWVsZERlZiAtIFRoZSBmaWVsZCBkZWZpbml0aW9uIHRvIGNvbnZlcnRcbiAgICogQHBhcmFtIHtWaWV3Q29udGFpbmVyUmVmfSB2Y3IgLSBUaGUgdmlldyBjb250YWluZXIgcmVmZXJlbmNlIGZvciBjb21wb25lbnQgY3JlYXRpb25cbiAgICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3IgLSBUaGUgQW5ndWxhciBpbmplY3RvciBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAgICogQHBhcmFtIHtUZW1wbGF0ZVJlZjxhbnk+fSB0cGwgLSBUaGUgdGVtcGxhdGUgcmVmZXJlbmNlIGZvciBjb250ZW50IHByb2plY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJ5Rm9ybUlkIC0gRm9ybSBpZGVudGlmaWVyIGZvciB0aGUgY29tcG9uZW50IHJlbmRlcmVyXG4gICAqIEByZXR1cm4ge0FuZ3VsYXJEeW5hbWljT3V0cHV0fSBUaGUgQW5ndWxhciBjb21wb25lbnQgb3V0cHV0IHdpdGggY29tcG9uZW50IHJlZmVyZW5jZSBhbmQgaW5wdXRzXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IE1ldGhvZCBhcyBmcm9tRmllbGREZWZpbml0aW9uXG4gICAqICAgcGFydGljaXBhbnQgQ29tcG9uZW50cyBhcyBOZ3hSZW5kZXJpbmdFbmdpbmUuY29tcG9uZW50c1xuICAgKiAgIHBhcnRpY2lwYW50IEFuZ3VsYXIgYXMgQW5ndWxhciBDb3JlXG4gICAqICAgcGFydGljaXBhbnQgUHJvY2VzcyBhcyBwcm9jZXNzQ2hpbGRcbiAgICpcbiAgICogICBNZXRob2QtPj5Db21wb25lbnRzOiBjb21wb25lbnRzKGZpZWxkRGVmLnRhZylcbiAgICogICBDb21wb25lbnRzLS0+Pk1ldGhvZDogY29tcG9uZW50IGNvbnN0cnVjdG9yXG4gICAqICAgTWV0aG9kLT4+QW5ndWxhcjogcmVmbGVjdENvbXBvbmVudFR5cGUoY29tcG9uZW50KVxuICAgKiAgIEFuZ3VsYXItLT4+TWV0aG9kOiBjb21wb25lbnRNZXRhZGF0YVxuICAgKiAgIE1ldGhvZC0+Pk1ldGhvZDogVmFsaWRhdGUgaW5wdXQgcHJvcGVydGllc1xuICAgKiAgIE1ldGhvZC0+Pk1ldGhvZDogQ3JlYXRlIHJlc3VsdCBvYmplY3RcbiAgICogICBhbHQgSGFzIGNoaWxkcmVuXG4gICAqICAgICBNZXRob2QtPj5Qcm9jZXNzOiBQcm9jZXNzIGNoaWxkcmVuIHJlY3Vyc2l2ZWx5XG4gICAqICAgICBQcm9jZXNzLT4+TWV0aG9kOiBSZXR1cm4gcHJvY2Vzc2VkIGNoaWxkcmVuXG4gICAqICAgICBNZXRob2QtPj5Bbmd1bGFyOiBDcmVhdGUgZW1iZWRkZWQgdmlld1xuICAgKiAgICAgTWV0aG9kLT4+TWV0aG9kOiBDcmVhdGUgY29tcG9uZW50IGluc3RhbmNlXG4gICAqICAgZW5kXG4gICAqICAgTWV0aG9kLS0+PkNhbGxlcjogcmV0dXJuIEFuZ3VsYXJEeW5hbWljT3V0cHV0XG4gICAqL1xuICBwcml2YXRlIGZyb21GaWVsZERlZmluaXRpb24oXG4gICAgZmllbGREZWY6IEZpZWxkRGVmaW5pdGlvbjxBbmd1bGFyRmllbGREZWZpbml0aW9uPixcbiAgICB2Y3I6IFZpZXdDb250YWluZXJSZWYsXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHRwbDogVGVtcGxhdGVSZWY8dW5rbm93bj4sXG4gICAgcmVnaXN0cnlGb3JtSWQ6IHN0cmluZyA9IERhdGUubm93KCkudG9TdHJpbmcoMzYpLnRvVXBwZXJDYXNlKCksXG4gICk6IEFuZ3VsYXJEeW5hbWljT3V0cHV0IHtcbiAgICBjb25zdCBjbXAgPSAoZmllbGREZWYgYXMgS2V5VmFsdWUpPy5bJ2NvbXBvbmVudCddIHx8IE5neFJlbmRlcmluZ0VuZ2luZS5jb21wb25lbnRzKGZpZWxkRGVmLnRhZyk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gY21wLmNvbnN0cnVjdG9yIGFzIHVua25vd24gYXMgVHlwZTx1bmtub3duPjtcblxuICAgIGNvbnN0IGNvbXBvbmVudE1ldGFkYXRhID0gcmVmbGVjdENvbXBvbmVudFR5cGUoY29tcG9uZW50KTtcbiAgICBpZiAoIWNvbXBvbmVudE1ldGFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgTWV0YWRhdGEgZm9yIGNvbXBvbmVudCAke2ZpZWxkRGVmLnRhZ30gbm90IGZvdW5kLmApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgaW5wdXRzOiBwb3NzaWJsZUlucHV0cyB9ID0gY29tcG9uZW50TWV0YWRhdGE7XG4gICAgY29uc3QgaW5wdXRzID0geyAuLi5maWVsZERlZi5wcm9wcyB9O1xuXG4gICAgY29uc3QgdW5tYXBwZWRLZXlzID0gT2JqZWN0LmtleXMoaW5wdXRzKS5maWx0ZXIoaW5wdXQgPT4ge1xuICAgICAgY29uc3QgaXNNYXBwZWQgPSBwb3NzaWJsZUlucHV0cy5maW5kKCh7IHByb3BOYW1lIH0pID0+IHByb3BOYW1lID09PSBpbnB1dCk7XG4gICAgICBpZiAoIWlzTWFwcGVkKSBkZWxldGUgaW5wdXRzW2lucHV0XTtcbiAgICAgIHJldHVybiAhaXNNYXBwZWQ7XG4gICAgfSk7XG5cbiAgICBpZiAodW5tYXBwZWRLZXlzLmxlbmd0aCA+IDAgJiYgaXNEZXZlbG9wbWVudE1vZGUoKSlcbiAgICAgIGNvbnNvbGUud2FybihgVW5tYXBwZWQgaW5wdXQgcHJvcGVydGllcyBmb3IgY29tcG9uZW50ICR7ZmllbGREZWYudGFnfTogJHt1bm1hcHBlZEtleXMuam9pbignLCAnKX1gKTtcblxuICAgIGNvbnN0IG9wZXJhdGlvbiA9IE5neFJlbmRlcmluZ0VuZ2luZS5fb3BlcmF0aW9uO1xuXG4gICAgY29uc3QgaGlkZGVuT24gPSBpbnB1dHM/LmhpZGRlbiB8fCBbXTtcbiAgICBpZigoaGlkZGVuT24gYXMgc3RyaW5nW10pLmluY2x1ZGVzKG9wZXJhdGlvbiBhcyBzdHJpbmcpKVxuICAgICAgcmV0dXJuIHtpbnB1dHMsIGluamVjdG9yfTtcbiAgICAvLyBjb25zdCBoaWRkZW5PbiA9IGlucHV0cz8uaGlkZGVuIHx8IFtdO1xuICAgIGNvbnN0IHJlc3VsdDogQW5ndWxhckR5bmFtaWNPdXRwdXQgPSB7XG4gICAgICBjb21wb25lbnQsXG4gICAgICBpbnB1dHMsXG4gICAgICBpbmplY3RvcixcbiAgICB9O1xuXG4gICAgaWYgKGZpZWxkRGVmLnJlbmRlcmVySWQpXG4gICAgICAocmVzdWx0LmlucHV0cyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbJ3JlbmRlcmVySWQnXSA9IGZpZWxkRGVmLnJlbmRlcmVySWQ7XG5cbiAgICAvLyBwcm9jZXNzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkRGVmLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IGZpZWxkRGVmLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgaWYoY2hpbGQ/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjaGlsZC5jaGlsZHJlbiA9IGNoaWxkLmNoaWxkcmVuLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhpZGRlbk9uID0gYz8ucHJvcHM/LmhpZGRlbiB8fCBbXTtcbiAgICAgICAgICAgIGlmKCEoaGlkZGVuT24gYXMgc3RyaW5nW10pLmluY2x1ZGVzKG9wZXJhdGlvbiBhcyBzdHJpbmcpKVxuICAgICAgICAgICAgICByZXR1cm4gY1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgLy8gY3JlYXRlIGEgY2hpbGQgZm9ybSBhbmQgYWRkIGl0cyBjb250cm9scyBhcyBwcm9wZXJ0aWVzIG9mIGNoaWxkLnByb3BzXG4gICAgICAgIE5neEZvcm1TZXJ2aWNlLmFkZENvbnRyb2xGcm9tUHJvcHMocmVnaXN0cnlGb3JtSWQsIGNoaWxkLnByb3BzLCBpbnB1dHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tRmllbGREZWZpbml0aW9uKGNoaWxkLCB2Y3IsIGluamVjdG9yLCB0cGwsIHJlZ2lzdHJ5Rm9ybUlkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGdlbmVyYXRpbmcgRE9NXG4gICAgdmNyLmNsZWFyKCk7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB2Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KHRwbCwgaW5qZWN0b3IpLnJvb3ROb2RlcztcbiAgICBjb25zdCBjb21wb25lbnRJbnN0YW5jZSA9IE5neFJlbmRlcmluZ0VuZ2luZS5jcmVhdGVDb21wb25lbnQoXG4gICAgICBjb21wb25lbnQsXG4gICAgICB7IC4uLmlucHV0cywgbW9kZWw6IHRoaXMuX21vZGVsIH0sXG4gICAgICBjb21wb25lbnRNZXRhZGF0YSxcbiAgICAgIHZjcixcbiAgICAgIGluamVjdG9yLFxuICAgICAgdGVtcGxhdGUsXG4gICAgKTtcblxuICAgIHJlc3VsdC5pbnN0YW5jZSA9IE5neFJlbmRlcmluZ0VuZ2luZS5faW5zdGFuY2UgPSBjb21wb25lbnRJbnN0YW5jZS5pbnN0YW5jZSBhcyBUeXBlPHVua25vd24+O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGFuIEFuZ3VsYXIgY29tcG9uZW50IGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IFRoaXMgc3RhdGljIHV0aWxpdHkgbWV0aG9kIGNyZWF0ZXMgYW4gQW5ndWxhciBjb21wb25lbnQgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkXG4gICAqIGlucHV0cyBhbmQgdGVtcGxhdGUuIEl0IHVzZXMgQW5ndWxhcidzIGNvbXBvbmVudCBjcmVhdGlvbiBBUEkgdG8gaW5zdGFudGlhdGUgdGhlIGNvbXBvbmVudFxuICAgKiBhbmQgdGhlbiBzZXRzIHRoZSBpbnB1dCBwcm9wZXJ0aWVzIHVzaW5nIHRoZSBwcm92aWRlZCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtUeXBlPHVua25vd24+fSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHR5cGUgdG8gY3JlYXRlXG4gICAqIEBwYXJhbSB7S2V5VmFsdWV9IFtpbnB1dHM9e31dIC0gVGhlIGlucHV0IHByb3BlcnRpZXMgdG8gc2V0IG9uIHRoZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtDb21wb25lbnRNaXJyb3I8dW5rbm93bj59IG1ldGFkYXRhIC0gVGhlIGNvbXBvbmVudCBtZXRhZGF0YSBmb3IgaW5wdXQgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0ge1ZpZXdDb250YWluZXJSZWZ9IHZjciAtIFRoZSB2aWV3IGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICAgKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvciAtIFRoZSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICAgKiBAcGFyYW0ge05vZGVbXX0gW3RlbXBsYXRlPVtdXSAtIFRoZSB0ZW1wbGF0ZSBub2RlcyB0byBwcm9qZWN0IGludG8gdGhlIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHtDb21wb25lbnRSZWY8dW5rbm93bj59IFRoZSBjcmVhdGVkIGNvbXBvbmVudCByZWZlcmVuY2VcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50OiBUeXBlPHVua25vd24+LCBpbnB1dHM6IEtleVZhbHVlID0ge30sIG1ldGFkYXRhOiBDb21wb25lbnRNaXJyb3I8dW5rbm93bj4sIHZjcjogVmlld0NvbnRhaW5lclJlZiwgaW5qZWN0b3I6IEluamVjdG9yLCB0ZW1wbGF0ZTogTm9kZVtdID0gW10pOiBDb21wb25lbnRSZWY8dW5rbm93bj4ge1xuICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlID0gdmNyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQgYXMgVHlwZTx1bmtub3duPiwge1xuICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogaW5qZWN0b3IgYXMgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgIHByb2plY3RhYmxlTm9kZXM6IFt0ZW1wbGF0ZV0sXG4gICAgfSk7XG4gICAgdGhpcy5zZXRJbnB1dHMoY29tcG9uZW50SW5zdGFuY2UsIGlucHV0cywgbWV0YWRhdGEpO1xuICAgIHJldHVybiBjb21wb25lbnRJbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXh0cmFjdHMgZGVjb3JhdG9yIG1ldGFkYXRhIGZyb20gYSBtb2RlbFxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGZpZWxkIGRlZmluaXRpb24gZ2VuZXJhdGVkIGZyb20gYSBtb2RlbCdzXG4gICAqIGRlY29yYXRvcnMuIEl0J3MgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCB0aGUgdG9GaWVsZERlZmluaXRpb24gbWV0aG9kIHRoYXRcbiAgICogY29udmVydHMgYSBtb2RlbCB0byBhIGZpZWxkIGRlZmluaXRpb24gYmFzZWQgb24gaXRzIGRlY29yYXRvcnMgYW5kIHRoZSBwcm92aWRlZFxuICAgKiBnbG9iYWwgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gZXh0cmFjdCBkZWNvcmF0b3JzIGZyb21cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gZ2xvYmFsUHJvcHMgLSBHbG9iYWwgcHJvcGVydGllcyB0byBpbmNsdWRlIGluIHRoZSBmaWVsZCBkZWZpbml0aW9uXG4gICAqIEByZXR1cm4ge0ZpZWxkRGVmaW5pdGlvbjxBbmd1bGFyRmllbGREZWZpbml0aW9uPn0gVGhlIGZpZWxkIGRlZmluaXRpb24gZ2VuZXJhdGVkIGZyb20gdGhlIG1vZGVsXG4gICAqL1xuICBnZXREZWNvcmF0b3JzKG1vZGVsOiBNb2RlbCwgZ2xvYmFsUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRmllbGREZWZpbml0aW9uPEFuZ3VsYXJGaWVsZERlZmluaXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy50b0ZpZWxkRGVmaW5pdGlvbihtb2RlbCwgZ2xvYmFsUHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZXN0cm95cyB0aGUgY3VycmVudCBlbmdpbmUgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIGNsZWFycyB0aGUgY3VycmVudCBpbnN0YW5jZSByZWZlcmVuY2UsIGVmZmVjdGl2ZWx5XG4gICAqIGRlc3Ryb3lpbmcgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gVGhpcyBjYW4gYmUgdXNlZFxuICAgKiB0byByZXNldCB0aGUgZW5naW5lIHN0YXRlIG9yIHRvIHByZXBhcmUgZm9yIGEgbmV3IGluc3RhbmNlIGNyZWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBpbnN0YW5jZSBpcyBkZXN0cm95ZWRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBkZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIE5neFJlbmRlcmluZ0VuZ2luZS5faW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVuZGVycyBhIG1vZGVsIGludG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0XG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHRha2VzIGEgbW9kZWwgYW5kIGNvbnZlcnRzIGl0IHRvIGFuIEFuZ3VsYXIgY29tcG9uZW50IG91dHB1dC5cbiAgICogSXQgZmlyc3Qgc3RvcmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBtb2RlbCwgdGhlbiBjb252ZXJ0cyBpdCB0byBhIGZpZWxkIGRlZmluaXRpb25cbiAgICogdXNpbmcgdGhlIGJhc2UgUmVuZGVyaW5nRW5naW5lJ3MgdG9GaWVsZERlZmluaXRpb24gbWV0aG9kLCBhbmQgZmluYWxseSBjb252ZXJ0c1xuICAgKiB0aGF0IGZpZWxkIGRlZmluaXRpb24gdG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0IHVzaW5nIGZyb21GaWVsZERlZmluaXRpb24uXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCB0byByZW5kZXJcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gZ2xvYmFsUHJvcHMgLSBHbG9iYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtWaWV3Q29udGFpbmVyUmVmfSB2Y3IgLSBUaGUgdmlldyBjb250YWluZXIgcmVmZXJlbmNlIGZvciBjb21wb25lbnQgY3JlYXRpb25cbiAgICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3IgLSBUaGUgQW5ndWxhciBpbmplY3RvciBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAgICogQHBhcmFtIHtUZW1wbGF0ZVJlZjxhbnk+fSB0cGwgLSBUaGUgdGVtcGxhdGUgcmVmZXJlbmNlIGZvciBjb250ZW50IHByb2plY3Rpb25cbiAgICogQHJldHVybiB7QW5ndWxhckR5bmFtaWNPdXRwdXR9IFRoZSBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXQgd2l0aCBjb21wb25lbnQgcmVmZXJlbmNlIGFuZCBpbnB1dHNcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2xpZW50IGFzIENsaWVudCBDb2RlXG4gICAqICAgcGFydGljaXBhbnQgUmVuZGVyIGFzIHJlbmRlciBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBUb0ZpZWxkIGFzIHRvRmllbGREZWZpbml0aW9uXG4gICAqICAgcGFydGljaXBhbnQgRnJvbUZpZWxkIGFzIGZyb21GaWVsZERlZmluaXRpb25cbiAgICpcbiAgICogICBDbGllbnQtPj5SZW5kZXI6IHJlbmRlcihtb2RlbCwgZ2xvYmFsUHJvcHMsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAgICogICBSZW5kZXItPj5SZW5kZXI6IFN0b3JlIG1vZGVsIHJlZmVyZW5jZVxuICAgKiAgIFJlbmRlci0+PlRvRmllbGQ6IHRvRmllbGREZWZpbml0aW9uKG1vZGVsLCBnbG9iYWxQcm9wcylcbiAgICogICBUb0ZpZWxkLS0+PlJlbmRlcjogZmllbGREZWZcbiAgICogICBSZW5kZXItPj5Gcm9tRmllbGQ6IGZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAgICogICBGcm9tRmllbGQtLT4+UmVuZGVyOiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKiAgIFJlbmRlci0tPj5DbGllbnQ6IHJldHVybiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKi9cbiAgb3ZlcnJpZGUgcmVuZGVyPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgbW9kZWw6IE0sXG4gICAgZ2xvYmFsUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgdHBsOiBUZW1wbGF0ZVJlZjx1bmtub3duPixcbiAgKTogQW5ndWxhckR5bmFtaWNPdXRwdXQge1xuICAgIGxldCByZXN1bHQ6IEFuZ3VsYXJEeW5hbWljT3V0cHV0O1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgICAgY29uc3QgZm9ybUlkID0gRGF0ZS5ub3coKS50b1N0cmluZygzNikudG9VcHBlckNhc2UoKTtcbiAgICAgIGNvbnN0IGZpZWxkRGVmID0gdGhpcy50b0ZpZWxkRGVmaW5pdGlvbihtb2RlbCwgZ2xvYmFsUHJvcHMpO1xuICAgICAgY29uc3QgcHJvcHMgPSBmaWVsZERlZi5wcm9wcyBhcyBLZXlWYWx1ZTtcbiAgICAgIGlmKCFOZ3hSZW5kZXJpbmdFbmdpbmUuX29wZXJhdGlvbilcbiAgICAgICAgTmd4UmVuZGVyaW5nRW5naW5lLl9vcGVyYXRpb24gPSBwcm9wcz8uWydvcGVyYXRpb24nXSB8fCB1bmRlZmluZWQ7XG4gICAgICByZXN1bHQgPSB0aGlzLmZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbCwgZm9ybUlkKTtcblxuICAgICAgKHJlc3VsdCEuaW5zdGFuY2UhIGFzIEtleVZhbHVlKVsnZm9ybUdyb3VwJ10gPSBOZ3hGb3JtU2VydmljZS5nZXRDb250cm9sRnJvbUZvcm0oZm9ybUlkKTtcbiAgICAgIE5neEZvcm1TZXJ2aWNlLnJlbW92ZVJlZ2lzdHJ5KGZvcm1JZCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gcmVuZGVyIE1vZGVsICR7bW9kZWwuY29uc3RydWN0b3IubmFtZX06ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gSXQgY2hlY2tzIGlmIHRoZSBlbmdpbmUgaXMgYWxyZWFkeSBpbml0aWFsaXplZFxuICAgKiBhbmQgc2V0cyB0aGUgaW5pdGlhbGl6ZWQgZmxhZyB0byB0cnVlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBlbmdpbmUgaXMgdXNlZFxuICAgKiB0byBlbnN1cmUgaXQncyBwcm9wZXJseSBzZXQgdXAgZm9yIHJlbmRlcmluZyBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKVxuICAgICAgcmV0dXJuO1xuICAgIC8vIFZhbGlkYXRhYmxlQnlUeXBlW11cbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0ZXJzIGEgY29tcG9uZW50IHdpdGggdGhlIHJlbmRlcmluZyBlbmdpbmVcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIHJlZ2lzdGVycyBhIGNvbXBvbmVudCBjb25zdHJ1Y3RvciB3aXRoIHRoZSByZW5kZXJpbmcgZW5naW5lXG4gICAqIHVuZGVyIGEgc3BlY2lmaWMgbmFtZS4gSXQgaW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudHMgcmVnaXN0cnkgaWYgbmVlZGVkIGFuZCB0aHJvd3NcbiAgICogYW4gZXJyb3IgaWYgYSBjb21wb25lbnQgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHVuZGVyIHRoZSBzYW1lIG5hbWUgdG8gcHJldmVudFxuICAgKiBhY2NpZGVudGFsIG92ZXJyaWRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSB0byByZWdpc3RlciB0aGUgY29tcG9uZW50IHVuZGVyXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8dW5rbm93bj59IGNvbnN0cnVjdG9yIC0gVGhlIGNvbXBvbmVudCBjb25zdHJ1Y3RvclxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyQ29tcG9uZW50KG5hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9jb21wb25lbnRzKSB0aGlzLl9jb21wb25lbnRzID0ge307XG4gICAgaWYgKG5hbWUgaW4gdGhpcy5fY29tcG9uZW50cylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBDb21wb25lbnQgYWxyZWFkeSByZWdpc3RlcmVkIHVuZGVyICR7bmFtZX1gKTtcbiAgICB0aGlzLl9jb21wb25lbnRzW25hbWVdID0ge1xuICAgICAgY29uc3RydWN0b3I6IGNvbnN0cnVjdG9yLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyByZWdpc3RlcmVkIGNvbXBvbmVudHMgZnJvbSB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgcmV0cmlldmVzIGVpdGhlciBhbGwgcmVnaXN0ZXJlZCBjb21wb25lbnRzIG9yIGEgc3BlY2lmaWMgY29tcG9uZW50XG4gICAqIGJ5IGl0cyBzZWxlY3Rvci4gV2hlbiBjYWxsZWQgd2l0aG91dCBhIHNlbGVjdG9yLCBpdCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCByZWdpc3RlcmVkXG4gICAqIGNvbXBvbmVudHMuIFdoZW4gY2FsbGVkIHdpdGggYSBzZWxlY3RvciwgaXQgcmV0dXJucyB0aGUgc3BlY2lmaWMgY29tcG9uZW50IGlmIGZvdW5kLFxuICAgKiBvciB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGNvbXBvbmVudCBpcyBub3QgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcl0gLSBPcHRpb25hbCBzZWxlY3RvciB0byByZXRyaWV2ZSBhIHNwZWNpZmljIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHtPYmplY3R8QXJyYXl9IEVpdGhlciBhIHNwZWNpZmljIGNvbXBvbmVudCBvciBhbiBhcnJheSBvZiBhbGwgY29tcG9uZW50c1xuICAgKi9cbiAgc3RhdGljIGNvbXBvbmVudHMoc2VsZWN0b3I/OiBzdHJpbmcpOiBvYmplY3QgfCBzdHJpbmdbXSB7XG4gICAgaWYgKCFzZWxlY3RvcikgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fY29tcG9uZW50cyk7XG4gICAgaWYgKCEoc2VsZWN0b3IgaW4gdGhpcy5fY29tcG9uZW50cykpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgTm8gQ29tcG9uZW50IHJlZ2lzdGVyZWQgdW5kZXIgJHtzZWxlY3Rvcn1gKTtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50c1tzZWxlY3Rvcl07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIGtleSBmb3IgcmVmbGVjdGlvbiBtZXRhZGF0YVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgZ2VuZXJhdGVzIGEga2V5IGZvciByZWZsZWN0aW9uIG1ldGFkYXRhIGJ5IHByZWZpeGluZyB0aGUgaW5wdXQga2V5XG4gICAqIHdpdGggdGhlIEFuZ3VsYXIgZW5naW5lJ3MgcmVmbGVjdGlvbiBwcmVmaXguIFRoaXMgaXMgdXNlZCBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZ1xuICAgKiBtZXRhZGF0YSBpbiBhIG5hbWVzcGFjZWQgd2F5IHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGJhc2Uga2V5IHRvIHByZWZpeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBwcmVmaXhlZCBrZXkgZm9yIHJlZmxlY3Rpb24gbWV0YWRhdGFcbiAgICovXG4gIHN0YXRpYyBvdmVycmlkZSBrZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtBbmd1bGFyRW5naW5lS2V5cy5SRUZMRUNUfSR7a2V5fWA7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgaW5wdXQgcHJvcGVydGllcyBvbiBhIGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyB1dGlsaXR5IG1ldGhvZCBzZXRzIGlucHV0IHByb3BlcnRpZXMgb24gYSBjb21wb25lbnQgaW5zdGFuY2VcbiAgICogYmFzZWQgb24gdGhlIHByb3ZpZGVkIGlucHV0cyBvYmplY3QgYW5kIGNvbXBvbmVudCBtZXRhZGF0YS4gSXQgaGFuZGxlcyBib3RoIHNpbXBsZVxuICAgKiB2YWx1ZXMgYW5kIG5lc3RlZCBvYmplY3RzLCByZWN1cnNpdmVseSBwcm9jZXNzaW5nIG9iamVjdCBwcm9wZXJ0aWVzLiBUaGUgbWV0aG9kXG4gICAqIHZhbGlkYXRlcyBlYWNoIGlucHV0IGFnYWluc3QgdGhlIGNvbXBvbmVudCdzIG1ldGFkYXRhIHRvIGVuc3VyZSBvbmx5IHZhbGlkIGlucHV0c1xuICAgKiBhcmUgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBvbmVudFJlZjx1bmtub3duPn0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCByZWZlcmVuY2UgdG8gc2V0IGlucHV0cyBvblxuICAgKiBAcGFyYW0ge0tleVZhbHVlfSBpbnB1dHMgLSBUaGUgaW5wdXQgcHJvcGVydGllcyB0byBzZXRcbiAgICogQHBhcmFtIHtDb21wb25lbnRNaXJyb3I8dW5rbm93bj59IG1ldGFkYXRhIC0gVGhlIGNvbXBvbmVudCBtZXRhZGF0YSBmb3IgaW5wdXQgdmFsaWRhdGlvblxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBTZXRJbnB1dHMgYXMgc2V0SW5wdXRzXG4gICAqICAgcGFydGljaXBhbnQgUGFyc2UgYXMgcGFyc2VJbnB1dFZhbHVlXG4gICAqICAgcGFydGljaXBhbnQgQ29tcG9uZW50IGFzIENvbXBvbmVudFJlZlxuICAgKlxuICAgKiAgIENhbGxlci0+PlNldElucHV0czogc2V0SW5wdXRzKGNvbXBvbmVudCwgaW5wdXRzLCBtZXRhZGF0YSlcbiAgICogICBTZXRJbnB1dHMtPj5TZXRJbnB1dHM6IEl0ZXJhdGUgdGhyb3VnaCBpbnB1dHNcbiAgICogICBsb29wIEZvciBlYWNoIGlucHV0XG4gICAqICAgICBTZXRJbnB1dHMtPj5TZXRJbnB1dHM6IENoZWNrIGlmIGlucHV0IGV4aXN0cyBpbiBtZXRhZGF0YVxuICAgKiAgICAgYWx0IElucHV0IGlzICdwcm9wcydcbiAgICogICAgICAgU2V0SW5wdXRzLT4+UGFyc2U6IHBhcnNlSW5wdXRWYWx1ZShjb21wb25lbnQsIHZhbHVlKVxuICAgKiAgICAgICBQYXJzZS0+PlBhcnNlOiBSZWN1cnNpdmVseSBwcm9jZXNzIG5lc3RlZCBvYmplY3RzXG4gICAqICAgICAgIFBhcnNlLT4+Q29tcG9uZW50OiBzZXRJbnB1dChrZXksIHZhbHVlKVxuICAgKiAgICAgZWxzZSBJbnB1dCBpcyB2YWxpZFxuICAgKiAgICAgICBTZXRJbnB1dHMtPj5Db21wb25lbnQ6IHNldElucHV0KGtleSwgdmFsdWUpXG4gICAqICAgICBlbmRcbiAgICogICBlbmRcbiAgICovXG4gIHN0YXRpYyBzZXRJbnB1dHMoY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4sIGlucHV0czogS2V5VmFsdWUsIG1ldGFkYXRhOiBDb21wb25lbnRNaXJyb3I8dW5rbm93bj4pOiB2b2lkIHtcbiAgICBmdW5jdGlvbiBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4sIGlucHV0OiBLZXlWYWx1ZSkge1xuICAgICAgT2JqZWN0LmtleXMoaW5wdXQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dFtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhIXZhbHVlKVxuICAgICAgICAgIHJldHVybiBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50LCB2YWx1ZSk7XG4gICAgICAgIGNvbXBvbmVudC5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9iamVjdC5lbnRyaWVzKGlucHV0cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBwcm9wID0gbWV0YWRhdGEuaW5wdXRzLmZpbmQoKGl0ZW06IHsgcHJvcE5hbWU6IHN0cmluZyB9KSA9PiBpdGVtLnByb3BOYW1lID09PSBrZXkpO1xuICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3Byb3BzJylcbiAgICAgICAgICBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50LCB2YWx1ZSk7XG4gICAgICAgIC8vIGlmKGtleSA9PT0gJ2xvY2FsZScgJiYgIXZhbHVlKVxuICAgICAgICAvLyAgIHZhbHVlID0gZ2V0TG9jYWxlRnJvbUNsYXNzTmFtZSh0aGlzLl9jb21wb25lbnROYW1lKTtcbiAgICAgICAgY29tcG9uZW50LnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4UmVuZGVyaW5nRW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvTmd4UmVuZGVyaW5nRW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBS0wsb0JBQW9CLEdBSXJCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxlQUE2RDtJQTRCbkc7Ozs7Ozs7Ozs7O09BV0c7YUFDWSxlQUFVLEdBQXVCLFNBQVMsQ0FBQzthQWlCM0MsaUJBQVksR0FBWSxJQUFJLENBQUE7YUFHNUIsaUJBQVksR0FBeUIsU0FBUyxDQUFDO0lBRzlEOzs7Ozs7OztPQVFHO0lBQ0g7UUFDRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0NHO0lBQ0ssbUJBQW1CLENBQ3pCLFFBQWlELEVBQ2pELEdBQXFCLEVBQ3JCLFFBQWtCLEVBQ2xCLEdBQXlCLEVBQ3pCLGlCQUF5QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRTtRQUU5RCxNQUFNLEdBQUcsR0FBSSxRQUFxQixFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksa0JBQWtCLENBQUMsVUFBVSxDQUFD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LElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQy9CLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUs7b0JBQ3RDLE9BQU8sZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDM0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzlDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBMEIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUN6RixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksR0FBRyxLQUFLLE9BQU87b0JBQ2pCLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLGlDQUFpQztnQkFDakMseURBQXlEO2dCQUN6RCxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmllbGREZWZpbml0aW9uLCBSZW5kZXJpbmdFbmdpbmUgfSBmcm9tICdAZGVjYWYtdHMvdWktZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBbmd1bGFyRmllbGREZWZpbml0aW9uLCBLZXlWYWx1ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQW5ndWxhckR5bmFtaWNPdXRwdXQgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQW5ndWxhckVuZ2luZUtleXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tICdAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb24nO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciB9IGZyb20gJ0BkZWNhZi10cy9kYi1kZWNvcmF0b3JzJztcbmltcG9ydCB7XG4gIENvbXBvbmVudE1pcnJvcixcbiAgQ29tcG9uZW50UmVmLFxuICBFbnZpcm9ubWVudEluamVjdG9yLFxuICBJbmplY3RvcixcbiAgcmVmbGVjdENvbXBvbmVudFR5cGUsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi9OZ3hGb3JtU2VydmljZSc7XG5pbXBvcnQgeyBpc0RldmVsb3BtZW50TW9kZSB9IGZyb20gJy4uL2hlbHBlcnMnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBbmd1bGFyIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSZW5kZXJpbmdFbmdpbmUgd2l0aCBlbmhhbmNlZCBmZWF0dXJlc1xuICogQHN1bW1hcnkgVGhpcyBjbGFzcyBleHRlbmRzIHRoZSBiYXNlIFJlbmRlcmluZ0VuZ2luZSB0byBwcm92aWRlIEFuZ3VsYXItc3BlY2lmaWMgcmVuZGVyaW5nIGNhcGFiaWxpdGllc1xuICogd2l0aCBhZGRpdGlvbmFsIGZlYXR1cmVzIGNvbXBhcmVkIHRvIE5neFJlbmRlcmluZ0VuZ2luZS4gSXQgaGFuZGxlcyB0aGUgY29udmVyc2lvbiBvZiBmaWVsZCBkZWZpbml0aW9uc1xuICogdG8gQW5ndWxhciBjb21wb25lbnRzLCBtYW5hZ2VzIGNvbXBvbmVudCByZWdpc3RyYXRpb24sIGFuZCBwcm92aWRlcyB1dGlsaXRpZXMgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICogYW5kIGlucHV0IGhhbmRsaW5nLiBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgQW5ndWxhcidzIG5ld2VyIGNvbXBvbmVudCBBUElzLlxuICpcbiAqIEB0ZW1wbGF0ZSBBbmd1bGFyRmllbGREZWZpbml0aW9uIC0gVHlwZSBmb3IgQW5ndWxhci1zcGVjaWZpYyBmaWVsZCBkZWZpbml0aW9uc1xuICogQHRlbXBsYXRlIEFuZ3VsYXJEeW5hbWljT3V0cHV0IC0gVHlwZSBmb3IgQW5ndWxhci1zcGVjaWZpYyBjb21wb25lbnQgb3V0cHV0XG4gKlxuICogQGNsYXNzIE5neFJlbmRlcmluZ0VuZ2luZVxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGVuZ2luZSA9IE5neFJlbmRlcmluZ0VuZ2luZS5nZXQoKTtcbiAqIGVuZ2luZS5pbml0aWFsaXplKCk7XG4gKiBjb25zdCBvdXRwdXQgPSBlbmdpbmUucmVuZGVyKG15TW9kZWwsIHt9LCB2aWV3Q29udGFpbmVyUmVmLCBpbmplY3RvciwgdGVtcGxhdGVSZWYpO1xuICogYGBgXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgRW5naW5lIGFzIE5neFJlbmRlcmluZ0VuZ2luZVxuICogICBwYXJ0aWNpcGFudCBDb21wb25lbnRzIGFzIFJlZ2lzdGVyZWRDb21wb25lbnRzXG4gKlxuICogICBDbGllbnQtPj5FbmdpbmU6IGdldCgpXG4gKiAgIENsaWVudC0+PkVuZ2luZTogaW5pdGlhbGl6ZSgpXG4gKiAgIENsaWVudC0+PkVuZ2luZTogcmVuZGVyKG1vZGVsLCBwcm9wcywgdmNyLCBpbmplY3RvciwgdHBsKVxuICogICBFbmdpbmUtPj5FbmdpbmU6IHRvRmllbGREZWZpbml0aW9uKG1vZGVsLCBwcm9wcylcbiAqICAgRW5naW5lLT4+RW5naW5lOiBmcm9tRmllbGREZWZpbml0aW9uKGZpZWxkRGVmLCB2Y3IsIGluamVjdG9yLCB0cGwpXG4gKiAgIEVuZ2luZS0+PkNvbXBvbmVudHM6IGNvbXBvbmVudHMoZmllbGREZWYudGFnKVxuICogICBDb21wb25lbnRzLS0+PkVuZ2luZTogY29tcG9uZW50IGNvbnN0cnVjdG9yXG4gKiAgIEVuZ2luZS0+PkVuZ2luZTogY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwgaW5wdXRzLCBtZXRhZGF0YSwgdmNyLCBpbmplY3RvciwgdGVtcGxhdGUpXG4gKiAgIEVuZ2luZS0tPj5DbGllbnQ6IHJldHVybiBBbmd1bGFyRHluYW1pY091dHB1dFxuICovXG5leHBvcnQgY2xhc3MgTmd4UmVuZGVyaW5nRW5naW5lIGV4dGVuZHMgUmVuZGVyaW5nRW5naW5lPEFuZ3VsYXJGaWVsZERlZmluaXRpb24sIEFuZ3VsYXJEeW5hbWljT3V0cHV0PiB7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RyeSBvZiBjb21wb25lbnRzIGF2YWlsYWJsZSBmb3IgcmVuZGVyaW5nXG4gICAqIEBzdW1tYXJ5IFN0YXRpYyByZWdpc3RyeSB0aGF0IHN0b3JlcyBhbGwgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluZGV4ZWQgYnkgdGhlaXIgc2VsZWN0b3IgbmFtZS5cbiAgICogRWFjaCBjb21wb25lbnQgZW50cnkgY29udGFpbnMgYSBjb25zdHJ1Y3RvciByZWZlcmVuY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBpbnN0YW50aWF0ZVxuICAgKiB0aGUgY29tcG9uZW50IGR1cmluZyB0aGUgcmVuZGVyaW5nIHByb2Nlc3MuIFRoaXMgcmVnaXN0cnkgaXMgc2hhcmVkIGFjcm9zcyBhbGwgaW5zdGFuY2VzXG4gICAqIG9mIHRoZSByZW5kZXJpbmcgZW5naW5lIGFuZCBpcyBwb3B1bGF0ZWQgdGhyb3VnaCB0aGUgcmVnaXN0ZXJDb21wb25lbnQgbWV0aG9kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAc3RhdGljXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB7IGNvbnN0cnVjdG9yOiBDb25zdHJ1Y3Rvcjx1bmtub3duPiB9Pn1cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9jb21wb25lbnRzOiBSZWNvcmQ8c3RyaW5nLCB7IGNvbnN0cnVjdG9yOiBDb25zdHJ1Y3Rvcjx1bmtub3duPiB9PjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnRseSBhY3RpdmUgbW9kZWwgYmVpbmcgcmVuZGVyZWRcbiAgICogQHN1bW1hcnkgU3RvcmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBtb2RlbCBpbnN0YW5jZSB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWRcbiAgICogYnkgdGhlIHJlbmRlcmluZyBlbmdpbmUuIFRoaXMgcHJvcGVydHkgaXMgc2V0IGR1cmluZyB0aGUgcmVuZGVyIG1ldGhvZCBleGVjdXRpb25cbiAgICogYW5kIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgcmVuZGVyaW5nIGxpZmVjeWNsZSB0byBhY2Nlc3MgbW9kZWwgZGF0YSBhbmQgbWV0YWRhdGEuXG4gICAqIFRoZSBkZWZpbml0ZSBhc3NpZ25tZW50IGFzc2VydGlvbiAoISkgaXMgdXNlZCBiZWNhdXNlIHRoaXMgcHJvcGVydHkgaXMgYWx3YXlzXG4gICAqIGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugd2l0aGluIHRoZSByZW5kZXIgbWV0aG9kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7TW9kZWx9XG4gICAqL1xuICBwcml2YXRlIF9tb2RlbCE6IE1vZGVsO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VycmVudCBvcGVyYXRpb24gY29udGV4dCBmb3IgY29tcG9uZW50IHZpc2liaWxpdHkgY29udHJvbFxuICAgKiBAc3VtbWFyeSBTdGF0aWMgcHJvcGVydHkgdGhhdCBzdG9yZXMgdGhlIGN1cnJlbnQgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZCxcbiAgICogd2hpY2ggaXMgdXNlZCB0byBkZXRlcm1pbmUgY29tcG9uZW50IHZpc2liaWxpdHkgdGhyb3VnaCB0aGUgJ2hpZGRlbicgcHJvcGVydHkuXG4gICAqIENvbXBvbmVudHMgY2FuIHNwZWNpZnkgb3BlcmF0aW9ucyB3aGVyZSB0aGV5IHNob3VsZCBiZSBoaWRkZW4sIGFuZCB0aGlzIHByb3BlcnR5XG4gICAqIHByb3ZpZGVzIHRoZSBjb250ZXh0IGZvciB0aG9zZSB2aXNpYmlsaXR5IGNoZWNrcy4gVGhlIHZhbHVlIGlzIHR5cGljYWxseSBleHRyYWN0ZWRcbiAgICogZnJvbSB0aGUgZ2xvYmFsIHByb3BlcnRpZXMgZHVyaW5nIHRoZSByZW5kZXJpbmcgcHJvY2Vzcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHN0YXRpY1xuICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX29wZXJhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBTdGF0aWMgcHJvcGVydHkgdGhhdCBtYWludGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIG1vc3QgcmVjZW50bHkgY3JlYXRlZFxuICAgKiBjb21wb25lbnQgaW5zdGFuY2UuIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGZvciBjb21wb25lbnQgbGlmZWN5Y2xlIG1hbmFnZW1lbnRcbiAgICogYW5kIGNhbiBiZSBjbGVhcmVkIHRocm91Z2ggdGhlIGRlc3Ryb3kgbWV0aG9kLiBUaGUgcmVmZXJlbmNlIGFsbG93cyBhY2Nlc3MgdG9cbiAgICogdGhlIGFjdGl2ZSBjb21wb25lbnQgaW5zdGFuY2UgZm9yIG9wZXJhdGlvbnMgdGhhdCBuZWVkIHRvIGludGVyYWN0IHdpdGggdGhlXG4gICAqIGN1cnJlbnRseSByZW5kZXJlZCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBzdGF0aWNcbiAgICogQHR5cGUge1R5cGU8dW5rbm93bj4gfCB1bmRlZmluZWR9XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFR5cGU8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cblxuICBwcml2YXRlIHN0YXRpYyBfcHJvamVjdGFibGU6IGJvb2xlYW4gPSB0cnVlXG5cblxuICBwcml2YXRlIHN0YXRpYyBfcGFyZW50UHJvcHM6IEtleVZhbHVlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb25zdHJ1Y3RzIGEgbmV3IE5neFJlbmRlcmluZ0VuZ2luZSBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQW5ndWxhciByZW5kZXJpbmcgZW5naW5lIGJ5IGNhbGxpbmcgdGhlIHBhcmVudFxuICAgKiBjb25zdHJ1Y3RvciB3aXRoIHRoZSAnYW5ndWxhcicgZW5naW5lIHR5cGUgaWRlbnRpZmllci4gVGhpcyBjb25zdHJ1Y3RvciBzZXRzIHVwIHRoZSBiYXNlXG4gICAqIHJlbmRlcmluZyBlbmdpbmUgZnVuY3Rpb25hbGl0eSB3aXRoIEFuZ3VsYXItc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYW5kIHByZXBhcmVzIHRoZVxuICAgKiBpbnN0YW5jZSBmb3IgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhbmQgcmVuZGVyaW5nIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2FuZ3VsYXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBmaWVsZCBkZWZpbml0aW9uIHRvIGFuIEFuZ3VsYXIgY29tcG9uZW50IG91dHB1dFxuICAgKiBAc3VtbWFyeSBUaGlzIHByaXZhdGUgbWV0aG9kIHRha2VzIGEgZmllbGQgZGVmaW5pdGlvbiBhbmQgY3JlYXRlcyB0aGUgY29ycmVzcG9uZGluZyBBbmd1bGFyIGNvbXBvbmVudC5cbiAgICogSXQgaGFuZGxlcyBjb21wb25lbnQgaW5zdGFudGlhdGlvbiwgaW5wdXQgcHJvcGVydHkgbWFwcGluZywgYW5kIGNoaWxkIGNvbXBvbmVudCByZW5kZXJpbmcuXG4gICAqIFRoZSBtZXRob2QgdmFsaWRhdGVzIGlucHV0IHByb3BlcnRpZXMgYWdhaW5zdCB0aGUgY29tcG9uZW50J3MgbWV0YWRhdGEgYW5kIHByb2Nlc3Nlc1xuICAgKiBjaGlsZCBjb21wb25lbnRzIHJlY3Vyc2l2ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0ge0ZpZWxkRGVmaW5pdGlvbjxBbmd1bGFyRmllbGREZWZpbml0aW9uPn0gZmllbGREZWYgLSBUaGUgZmllbGQgZGVmaW5pdGlvbiB0byBjb252ZXJ0XG4gICAqIEBwYXJhbSB7Vmlld0NvbnRhaW5lclJlZn0gdmNyIC0gVGhlIHZpZXcgY29udGFpbmVyIHJlZmVyZW5jZSBmb3IgY29tcG9uZW50IGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yIC0gVGhlIEFuZ3VsYXIgaW5qZWN0b3IgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG4gICAqIEBwYXJhbSB7VGVtcGxhdGVSZWY8YW55Pn0gdHBsIC0gVGhlIHRlbXBsYXRlIHJlZmVyZW5jZSBmb3IgY29udGVudCBwcm9qZWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyeUZvcm1JZCAtIEZvcm0gaWRlbnRpZmllciBmb3IgdGhlIGNvbXBvbmVudCByZW5kZXJlclxuICAgKiBAcmV0dXJuIHtBbmd1bGFyRHluYW1pY091dHB1dH0gVGhlIEFuZ3VsYXIgY29tcG9uZW50IG91dHB1dCB3aXRoIGNvbXBvbmVudCByZWZlcmVuY2UgYW5kIGlucHV0c1xuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBNZXRob2QgYXMgZnJvbUZpZWxkRGVmaW5pdGlvblxuICAgKiAgIHBhcnRpY2lwYW50IENvbXBvbmVudHMgYXMgTmd4UmVuZGVyaW5nRW5naW5lLmNvbXBvbmVudHNcbiAgICogICBwYXJ0aWNpcGFudCBBbmd1bGFyIGFzIEFuZ3VsYXIgQ29yZVxuICAgKiAgIHBhcnRpY2lwYW50IFByb2Nlc3MgYXMgcHJvY2Vzc0NoaWxkXG4gICAqXG4gICAqICAgTWV0aG9kLT4+Q29tcG9uZW50czogY29tcG9uZW50cyhmaWVsZERlZi50YWcpXG4gICAqICAgQ29tcG9uZW50cy0tPj5NZXRob2Q6IGNvbXBvbmVudCBjb25zdHJ1Y3RvclxuICAgKiAgIE1ldGhvZC0+PkFuZ3VsYXI6IHJlZmxlY3RDb21wb25lbnRUeXBlKGNvbXBvbmVudClcbiAgICogICBBbmd1bGFyLS0+Pk1ldGhvZDogY29tcG9uZW50TWV0YWRhdGFcbiAgICogICBNZXRob2QtPj5NZXRob2Q6IFZhbGlkYXRlIGlucHV0IHByb3BlcnRpZXNcbiAgICogICBNZXRob2QtPj5NZXRob2Q6IENyZWF0ZSByZXN1bHQgb2JqZWN0XG4gICAqICAgYWx0IEhhcyBjaGlsZHJlblxuICAgKiAgICAgTWV0aG9kLT4+UHJvY2VzczogUHJvY2VzcyBjaGlsZHJlbiByZWN1cnNpdmVseVxuICAgKiAgICAgUHJvY2Vzcy0+Pk1ldGhvZDogUmV0dXJuIHByb2Nlc3NlZCBjaGlsZHJlblxuICAgKiAgICAgTWV0aG9kLT4+QW5ndWxhcjogQ3JlYXRlIGVtYmVkZGVkIHZpZXdcbiAgICogICAgIE1ldGhvZC0+Pk1ldGhvZDogQ3JlYXRlIGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKiAgIGVuZFxuICAgKiAgIE1ldGhvZC0tPj5DYWxsZXI6IHJldHVybiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKi9cbiAgcHJpdmF0ZSBmcm9tRmllbGREZWZpbml0aW9uKFxuICAgIGZpZWxkRGVmOiBGaWVsZERlZmluaXRpb248QW5ndWxhckZpZWxkRGVmaW5pdGlvbj4sXG4gICAgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICB0cGw6IFRlbXBsYXRlUmVmPHVua25vd24+LFxuICAgIHJlZ2lzdHJ5Rm9ybUlkOiBzdHJpbmcgPSBEYXRlLm5vdygpLnRvU3RyaW5nKDM2KS50b1VwcGVyQ2FzZSgpLFxuICApOiBBbmd1bGFyRHluYW1pY091dHB1dCB7XG4gICAgY29uc3QgY21wID0gKGZpZWxkRGVmIGFzIEtleVZhbHVlKT8uWydjb21wb25lbnQnXSB8fCBOZ3hSZW5kZXJpbmdFbmdpbmUuY29tcG9uZW50cyhmaWVsZERlZi50YWcpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IGNtcC5jb25zdHJ1Y3RvciBhcyB1bmtub3duIGFzIFR5cGU8dW5rbm93bj47XG5cbiAgICBjb25zdCBjb21wb25lbnRNZXRhZGF0YSA9IHJlZmxlY3RDb21wb25lbnRUeXBlKGNvbXBvbmVudCk7XG4gICAgaWYgKCFjb21wb25lbnRNZXRhZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYE1ldGFkYXRhIGZvciBjb21wb25lbnQgJHtmaWVsZERlZi50YWd9IG5vdCBmb3VuZC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGlucHV0czogcG9zc2libGVJbnB1dHMgfSA9IGNvbXBvbmVudE1ldGFkYXRhO1xuICAgIGNvbnN0IGlucHV0cyA9IHsgLi4uZmllbGREZWYucHJvcHMgfTtcblxuICAgIGNvbnN0IHVubWFwcGVkS2V5cyA9IE9iamVjdC5rZXlzKGlucHV0cykuZmlsdGVyKGlucHV0ID0+IHtcbiAgICAgIGNvbnN0IGlzTWFwcGVkID0gcG9zc2libGVJbnB1dHMuZmluZCgoeyBwcm9wTmFtZSB9KSA9PiBwcm9wTmFtZSA9PT0gaW5wdXQpO1xuICAgICAgaWYgKCFpc01hcHBlZCkgZGVsZXRlIGlucHV0c1tpbnB1dF07XG4gICAgICByZXR1cm4gIWlzTWFwcGVkO1xuICAgIH0pO1xuXG4gICAgaWYgKHVubWFwcGVkS2V5cy5sZW5ndGggPiAwICYmIGlzRGV2ZWxvcG1lbnRNb2RlKCkpXG4gICAgICBjb25zb2xlLndhcm4oYFVubWFwcGVkIGlucHV0IHByb3BlcnRpZXMgZm9yIGNvbXBvbmVudCAke2ZpZWxkRGVmLnRhZ306ICR7dW5tYXBwZWRLZXlzLmpvaW4oJywgJyl9YCk7XG5cbiAgICBjb25zdCBvcGVyYXRpb24gPSBOZ3hSZW5kZXJpbmdFbmdpbmUuX29wZXJhdGlvbjtcblxuICAgIGNvbnN0IGhpZGRlbk9uID0gaW5wdXRzPy5oaWRkZW4gfHwgW107XG4gICAgaWYoKGhpZGRlbk9uIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyhvcGVyYXRpb24gYXMgc3RyaW5nKSlcbiAgICAgIHJldHVybiB7aW5wdXRzLCBpbmplY3Rvcn07XG5cbiAgICBjb25zdCByZXN1bHQ6IEFuZ3VsYXJEeW5hbWljT3V0cHV0ID0ge1xuICAgICAgY29tcG9uZW50LFxuICAgICAgaW5wdXRzLFxuICAgICAgaW5qZWN0b3IsXG4gICAgfTtcblxuICAgIGlmIChmaWVsZERlZi5yZW5kZXJlcklkKVxuICAgICAgKHJlc3VsdC5pbnB1dHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pWydyZW5kZXJlcklkJ10gPSBmaWVsZERlZi5yZW5kZXJlcklkO1xuXG4gICAgLy8gcHJvY2VzcyBjaGlsZHJlblxuICAgIGlmIChmaWVsZERlZi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICBpZighTmd4UmVuZGVyaW5nRW5naW5lLl9wYXJlbnRQcm9wcyAmJiBpbnB1dHM/LnBhZ2VzKVxuICAgICAgICBOZ3hSZW5kZXJpbmdFbmdpbmUuX3BhcmVudFByb3BzID0ge3BhZ2VzOiBpbnB1dHM/LnBhZ2VzfTtcbiAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IGZpZWxkRGVmLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgaWYoY2hpbGQ/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjaGlsZC5jaGlsZHJlbiA9IGNoaWxkLmNoaWxkcmVuLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhpZGRlbk9uID0gYz8ucHJvcHM/LmhpZGRlbiB8fCBbXTtcbiAgICAgICAgICAgIGlmKCEoaGlkZGVuT24gYXMgc3RyaW5nW10pLmluY2x1ZGVzKG9wZXJhdGlvbiBhcyBzdHJpbmcpKVxuICAgICAgICAgICAgICByZXR1cm4gY1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgTmd4Rm9ybVNlcnZpY2UuYWRkQ29udHJvbEZyb21Qcm9wcyhyZWdpc3RyeUZvcm1JZCwgY2hpbGQucHJvcHMsIHsuLi5pbnB1dHMsIC4uLk5neFJlbmRlcmluZ0VuZ2luZS5fcGFyZW50UHJvcHMgfHwge319KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUZpZWxkRGVmaW5pdGlvbihjaGlsZCwgdmNyLCBpbmplY3RvciwgdHBsLCByZWdpc3RyeUZvcm1JZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBnZW5lcmF0aW5nIERPTVxuICAgIGNvbnN0IHByb2plY3RhYmxlID0gTmd4UmVuZGVyaW5nRW5naW5lLl9wcm9qZWN0YWJsZTtcbiAgICB2Y3IuY2xlYXIoKTtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9ICFwcm9qZWN0YWJsZSA/IFtdIDogdmNyLmNyZWF0ZUVtYmVkZGVkVmlldyh0cGwsIGluamVjdG9yKS5yb290Tm9kZXM7XG4gICAgY29uc3QgaGFzQ2hpbGRyZW4gPSBPYmplY3QudmFsdWVzKHBvc3NpYmxlSW5wdXRzKS5zb21lKCh7cHJvcE5hbWV9KSA9PiBwcm9wTmFtZSA9PT0gJ2NoaWxkcmVuJyk7XG4gICAgY29uc3QgaGFzTW9kZWwgPSBPYmplY3QudmFsdWVzKHBvc3NpYmxlSW5wdXRzKS5zb21lKCh7cHJvcE5hbWV9KSA9PiBwcm9wTmFtZSA9PT0gJ2NoaWxkcmVuJyk7XG4gICAgY29uc3QgY29tcG9uZW50SW5wdXRzID0gIE9iamVjdC5hc3NpZ24oaW5wdXRzLFxuICAgICAgICAoIGhhc01vZGVsID8geyBtb2RlbDogdGhpcy5fbW9kZWwgfSA6IHsgfSksXG4gICAgICAgICggaGFzQ2hpbGRyZW4gPyB7IGNoaWxkcmVuOiBmaWVsZERlZj8uWydjaGlsZHJlbiddIHx8IFtdIH0gOiB7fSkpO1xuICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlID0gTmd4UmVuZGVyaW5nRW5naW5lLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudElucHV0cyxcbiAgICAgIGNvbXBvbmVudE1ldGFkYXRhLFxuICAgICAgdmNyLFxuICAgICAgaW5qZWN0b3IsXG4gICAgICB0ZW1wbGF0ZSxcbiAgICApO1xuICAgIHJlc3VsdC5pbnN0YW5jZSA9IE5neFJlbmRlcmluZ0VuZ2luZS5faW5zdGFuY2UgPSBjb21wb25lbnRJbnN0YW5jZS5pbnN0YW5jZSBhcyBUeXBlPHVua25vd24+O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBBbmd1bGFyIGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyB1dGlsaXR5IG1ldGhvZCBjcmVhdGVzIGFuIEFuZ3VsYXIgY29tcG9uZW50IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZFxuICAgKiBpbnB1dHMgYW5kIHRlbXBsYXRlLiBJdCB1c2VzIEFuZ3VsYXIncyBjb21wb25lbnQgY3JlYXRpb24gQVBJIHRvIGluc3RhbnRpYXRlIHRoZSBjb21wb25lbnRcbiAgICogYW5kIHRoZW4gc2V0cyB0aGUgaW5wdXQgcHJvcGVydGllcyB1c2luZyB0aGUgcHJvdmlkZWQgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7VHlwZTx1bmtub3duPn0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0eXBlIHRvIGNyZWF0ZVxuICAgKiBAcGFyYW0ge0tleVZhbHVlfSBbaW5wdXRzPXt9XSAtIFRoZSBpbnB1dCBwcm9wZXJ0aWVzIHRvIHNldCBvbiB0aGUgY29tcG9uZW50XG4gICAqIEBwYXJhbSB7Q29tcG9uZW50TWlycm9yPHVua25vd24+fSBtZXRhZGF0YSAtIFRoZSBjb21wb25lbnQgbWV0YWRhdGEgZm9yIGlucHV0IHZhbGlkYXRpb25cbiAgICogQHBhcmFtIHtWaWV3Q29udGFpbmVyUmVmfSB2Y3IgLSBUaGUgdmlldyBjb250YWluZXIgcmVmZXJlbmNlIGZvciBjb21wb25lbnQgY3JlYXRpb25cbiAgICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3IgLSBUaGUgQW5ndWxhciBpbmplY3RvciBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAgICogQHBhcmFtIHtOb2RlW119IFt0ZW1wbGF0ZT1bXV0gLSBUaGUgdGVtcGxhdGUgbm9kZXMgdG8gcHJvamVjdCBpbnRvIHRoZSBjb21wb25lbnRcbiAgICogQHJldHVybiB7Q29tcG9uZW50UmVmPHVua25vd24+fSBUaGUgY3JlYXRlZCBjb21wb25lbnQgcmVmZXJlbmNlXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudDogVHlwZTx1bmtub3duPiwgaW5wdXRzOiBLZXlWYWx1ZSA9IHt9LCBtZXRhZGF0YTogQ29tcG9uZW50TWlycm9yPHVua25vd24+LCB2Y3I6IFZpZXdDb250YWluZXJSZWYsIGluamVjdG9yOiBJbmplY3RvciwgdGVtcGxhdGU6IE5vZGVbXSA9IFtdKTogQ29tcG9uZW50UmVmPHVua25vd24+IHtcbiAgICBjb25zdCBjb21wb25lbnRJbnN0YW5jZSA9IHZjci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50IGFzIFR5cGU8dW5rbm93bj4sIHtcbiAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IGluamVjdG9yIGFzIEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICBwcm9qZWN0YWJsZU5vZGVzOiBbdGVtcGxhdGVdLFxuICAgIH0pO1xuICAgIHRoaXMuc2V0SW5wdXRzKGNvbXBvbmVudEluc3RhbmNlLCBpbnB1dHMsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gY29tcG9uZW50SW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV4dHJhY3RzIGRlY29yYXRvciBtZXRhZGF0YSBmcm9tIGEgbW9kZWxcbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBmaWVsZCBkZWZpbml0aW9uIGdlbmVyYXRlZCBmcm9tIGEgbW9kZWwnc1xuICAgKiBkZWNvcmF0b3JzLiBJdCdzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgdGhlIHRvRmllbGREZWZpbml0aW9uIG1ldGhvZCB0aGF0XG4gICAqIGNvbnZlcnRzIGEgbW9kZWwgdG8gYSBmaWVsZCBkZWZpbml0aW9uIGJhc2VkIG9uIGl0cyBkZWNvcmF0b3JzIGFuZCB0aGUgcHJvdmlkZWRcbiAgICogZ2xvYmFsIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7TW9kZWx9IG1vZGVsIC0gVGhlIG1vZGVsIHRvIGV4dHJhY3QgZGVjb3JhdG9ycyBmcm9tXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59IGdsb2JhbFByb3BzIC0gR2xvYmFsIHByb3BlcnRpZXMgdG8gaW5jbHVkZSBpbiB0aGUgZmllbGQgZGVmaW5pdGlvblxuICAgKiBAcmV0dXJuIHtGaWVsZERlZmluaXRpb248QW5ndWxhckZpZWxkRGVmaW5pdGlvbj59IFRoZSBmaWVsZCBkZWZpbml0aW9uIGdlbmVyYXRlZCBmcm9tIHRoZSBtb2RlbFxuICAgKi9cbiAgZ2V0RGVjb3JhdG9ycyhtb2RlbDogTW9kZWwsIGdsb2JhbFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEZpZWxkRGVmaW5pdGlvbjxBbmd1bGFyRmllbGREZWZpbml0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMudG9GaWVsZERlZmluaXRpb24obW9kZWwsIGdsb2JhbFByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGVzdHJveXMgdGhlIGN1cnJlbnQgZW5naW5lIGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IFRoaXMgc3RhdGljIG1ldGhvZCBjbGVhcnMgdGhlIGN1cnJlbnQgaW5zdGFuY2UgcmVmZXJlbmNlLCBlZmZlY3RpdmVseVxuICAgKiBkZXN0cm95aW5nIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHJlbmRlcmluZyBlbmdpbmUuIFRoaXMgY2FuIGJlIHVzZWRcbiAgICogdG8gcmVzZXQgdGhlIGVuZ2luZSBzdGF0ZSBvciB0byBwcmVwYXJlIGZvciBhIG5ldyBpbnN0YW5jZSBjcmVhdGlvbi5cbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgaW5zdGFuY2UgaXMgZGVzdHJveWVkXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZGVzdHJveShmb3JtSWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZihmb3JtSWQpXG4gICAgICBOZ3hGb3JtU2VydmljZS5yZW1vdmVSZWdpc3RyeShmb3JtSWQpO1xuICAgIE5neFJlbmRlcmluZ0VuZ2luZS5faW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gICAgTmd4UmVuZGVyaW5nRW5naW5lLl9wYXJlbnRQcm9wcyA9IHVuZGVmaW5lZDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZW5kZXJzIGEgbW9kZWwgaW50byBhbiBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXRcbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgdGFrZXMgYSBtb2RlbCBhbmQgY29udmVydHMgaXQgdG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0LlxuICAgKiBJdCBmaXJzdCBzdG9yZXMgYSByZWZlcmVuY2UgdG8gdGhlIG1vZGVsLCB0aGVuIGNvbnZlcnRzIGl0IHRvIGEgZmllbGQgZGVmaW5pdGlvblxuICAgKiB1c2luZyB0aGUgYmFzZSBSZW5kZXJpbmdFbmdpbmUncyB0b0ZpZWxkRGVmaW5pdGlvbiBtZXRob2QsIGFuZCBmaW5hbGx5IGNvbnZlcnRzXG4gICAqIHRoYXQgZmllbGQgZGVmaW5pdGlvbiB0byBhbiBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXQgdXNpbmcgZnJvbUZpZWxkRGVmaW5pdGlvbi5cbiAgICpcbiAgICogQHRlbXBsYXRlIE0gLSBUeXBlIGV4dGVuZGluZyBNb2RlbFxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIHRvIHJlbmRlclxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBnbG9iYWxQcm9wcyAtIEdsb2JhbCBwcm9wZXJ0aWVzIHRvIHBhc3MgdG8gdGhlIGNvbXBvbmVudFxuICAgKiBAcGFyYW0ge1ZpZXdDb250YWluZXJSZWZ9IHZjciAtIFRoZSB2aWV3IGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICAgKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvciAtIFRoZSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICAgKiBAcGFyYW0ge1RlbXBsYXRlUmVmPGFueT59IHRwbCAtIFRoZSB0ZW1wbGF0ZSByZWZlcmVuY2UgZm9yIGNvbnRlbnQgcHJvamVjdGlvblxuICAgKiBAcmV0dXJuIHtBbmd1bGFyRHluYW1pY091dHB1dH0gVGhlIEFuZ3VsYXIgY29tcG9uZW50IG91dHB1dCB3aXRoIGNvbXBvbmVudCByZWZlcmVuY2UgYW5kIGlucHV0c1xuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDbGllbnQgYXMgQ2xpZW50IENvZGVcbiAgICogICBwYXJ0aWNpcGFudCBSZW5kZXIgYXMgcmVuZGVyIG1ldGhvZFxuICAgKiAgIHBhcnRpY2lwYW50IFRvRmllbGQgYXMgdG9GaWVsZERlZmluaXRpb25cbiAgICogICBwYXJ0aWNpcGFudCBGcm9tRmllbGQgYXMgZnJvbUZpZWxkRGVmaW5pdGlvblxuICAgKlxuICAgKiAgIENsaWVudC0+PlJlbmRlcjogcmVuZGVyKG1vZGVsLCBnbG9iYWxQcm9wcywgdmNyLCBpbmplY3RvciwgdHBsKVxuICAgKiAgIFJlbmRlci0+PlJlbmRlcjogU3RvcmUgbW9kZWwgcmVmZXJlbmNlXG4gICAqICAgUmVuZGVyLT4+VG9GaWVsZDogdG9GaWVsZERlZmluaXRpb24obW9kZWwsIGdsb2JhbFByb3BzKVxuICAgKiAgIFRvRmllbGQtLT4+UmVuZGVyOiBmaWVsZERlZlxuICAgKiAgIFJlbmRlci0+PkZyb21GaWVsZDogZnJvbUZpZWxkRGVmaW5pdGlvbihmaWVsZERlZiwgdmNyLCBpbmplY3RvciwgdHBsKVxuICAgKiAgIEZyb21GaWVsZC0tPj5SZW5kZXI6IEFuZ3VsYXJEeW5hbWljT3V0cHV0XG4gICAqICAgUmVuZGVyLS0+PkNsaWVudDogcmV0dXJuIEFuZ3VsYXJEeW5hbWljT3V0cHV0XG4gICAqL1xuICBvdmVycmlkZSByZW5kZXI8TSBleHRlbmRzIE1vZGVsPihcbiAgICBtb2RlbDogTSxcbiAgICBnbG9iYWxQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICB0cGw6IFRlbXBsYXRlUmVmPHVua25vd24+LFxuICAgIHByb2plY3RhYmxlOiBib29sZWFuID0gdHJ1ZSxcbiAgKTogQW5ndWxhckR5bmFtaWNPdXRwdXQge1xuICAgIGxldCByZXN1bHQ6IEFuZ3VsYXJEeW5hbWljT3V0cHV0O1xuICAgIHRyeSB7XG5cbiAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgICBOZ3hSZW5kZXJpbmdFbmdpbmUuX3Byb2plY3RhYmxlID0gcHJvamVjdGFibGU7XG5cbiAgICAgIGNvbnN0IGZvcm1JZCA9IERhdGUubm93KCkudG9TdHJpbmcoMzYpLnRvVXBwZXJDYXNlKCk7XG4gICAgICBjb25zdCBmaWVsZERlZiA9IHRoaXMudG9GaWVsZERlZmluaXRpb24obW9kZWwsIGdsb2JhbFByb3BzKTtcbiAgICAgIGNvbnN0IHByb3BzID0gZmllbGREZWYucHJvcHMgYXMgS2V5VmFsdWU7XG4gICAgICBpZighTmd4UmVuZGVyaW5nRW5naW5lLl9vcGVyYXRpb24pXG4gICAgICAgIE5neFJlbmRlcmluZ0VuZ2luZS5fb3BlcmF0aW9uID0gcHJvcHM/Llsnb3BlcmF0aW9uJ10gfHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZm9ybUdyb3VwICA9IE5neEZvcm1TZXJ2aWNlLmNyZWF0ZUZvcm0oZm9ybUlkLCBwcm9wcyk7XG4gICAgICByZXN1bHQgPSB0aGlzLmZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbCwgZm9ybUlkKTtcblxuICAgICAgKHJlc3VsdCEuaW5zdGFuY2UhIGFzIEtleVZhbHVlKVsnZm9ybUdyb3VwJ10gPSBmb3JtR3JvdXA7XG4gICAgICBOZ3hSZW5kZXJpbmdFbmdpbmUuZGVzdHJveShmb3JtSWQpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIHJlbmRlciBNb2RlbCAke21vZGVsLmNvbnN0cnVjdG9yLm5hbWV9OiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIHJlbmRlcmluZyBlbmdpbmVcbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIHJlbmRlcmluZyBlbmdpbmUuIEl0IGNoZWNrcyBpZiB0aGUgZW5naW5lIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWRcbiAgICogYW5kIHNldHMgdGhlIGluaXRpYWxpemVkIGZsYWcgdG8gdHJ1ZS4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJlZm9yZSB0aGUgZW5naW5lIGlzIHVzZWRcbiAgICogdG8gZW5zdXJlIGl0J3MgcHJvcGVybHkgc2V0IHVwIGZvciByZW5kZXJpbmcgb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZVxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZClcbiAgICAgIHJldHVybjtcbiAgICAvLyBWYWxpZGF0YWJsZUJ5VHlwZVtdXG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdGVycyBhIGNvbXBvbmVudCB3aXRoIHRoZSByZW5kZXJpbmcgZW5naW5lXG4gICAqIEBzdW1tYXJ5IFRoaXMgc3RhdGljIG1ldGhvZCByZWdpc3RlcnMgYSBjb21wb25lbnQgY29uc3RydWN0b3Igd2l0aCB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiB1bmRlciBhIHNwZWNpZmljIG5hbWUuIEl0IGluaXRpYWxpemVzIHRoZSBjb21wb25lbnRzIHJlZ2lzdHJ5IGlmIG5lZWRlZCBhbmQgdGhyb3dzXG4gICAqIGFuIGVycm9yIGlmIGEgY29tcG9uZW50IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCB1bmRlciB0aGUgc2FtZSBuYW1lIHRvIHByZXZlbnRcbiAgICogYWNjaWRlbnRhbCBvdmVycmlkZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgdG8gcmVnaXN0ZXIgdGhlIGNvbXBvbmVudCB1bmRlclxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yPHVua25vd24+fSBjb25zdHJ1Y3RvciAtIFRoZSBjb21wb25lbnQgY29uc3RydWN0b3JcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyByZWdpc3RlckNvbXBvbmVudChuYW1lOiBzdHJpbmcsIGNvbnN0cnVjdG9yOiBDb25zdHJ1Y3Rvcjx1bmtub3duPik6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY29tcG9uZW50cykgdGhpcy5fY29tcG9uZW50cyA9IHt9O1xuICAgIGlmIChuYW1lIGluIHRoaXMuX2NvbXBvbmVudHMpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgQ29tcG9uZW50IGFscmVhZHkgcmVnaXN0ZXJlZCB1bmRlciAke25hbWV9YCk7XG4gICAgdGhpcy5fY29tcG9uZW50c1tuYW1lXSA9IHtcbiAgICAgIGNvbnN0cnVjdG9yOiBjb25zdHJ1Y3RvcixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGZyb20gdGhlIHJlbmRlcmluZyBlbmdpbmVcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIHJldHJpZXZlcyBlaXRoZXIgYWxsIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBvciBhIHNwZWNpZmljIGNvbXBvbmVudFxuICAgKiBieSBpdHMgc2VsZWN0b3IuIFdoZW4gY2FsbGVkIHdpdGhvdXQgYSBzZWxlY3RvciwgaXQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgcmVnaXN0ZXJlZFxuICAgKiBjb21wb25lbnRzLiBXaGVuIGNhbGxlZCB3aXRoIGEgc2VsZWN0b3IsIGl0IHJldHVybnMgdGhlIHNwZWNpZmljIGNvbXBvbmVudCBpZiBmb3VuZCxcbiAgICogb3IgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBjb21wb25lbnQgaXMgbm90IHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3JdIC0gT3B0aW9uYWwgc2VsZWN0b3IgdG8gcmV0cmlldmUgYSBzcGVjaWZpYyBjb21wb25lbnRcbiAgICogQHJldHVybiB7T2JqZWN0fEFycmF5fSBFaXRoZXIgYSBzcGVjaWZpYyBjb21wb25lbnQgb3IgYW4gYXJyYXkgb2YgYWxsIGNvbXBvbmVudHNcbiAgICovXG4gIHN0YXRpYyBjb21wb25lbnRzKHNlbGVjdG9yPzogc3RyaW5nKTogb2JqZWN0IHwgc3RyaW5nW10ge1xuICAgIGlmICghc2VsZWN0b3IpIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2NvbXBvbmVudHMpO1xuICAgIGlmICghKHNlbGVjdG9yIGluIHRoaXMuX2NvbXBvbmVudHMpKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYE5vIENvbXBvbmVudCByZWdpc3RlcmVkIHVuZGVyICR7c2VsZWN0b3J9YCk7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudHNbc2VsZWN0b3JdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBrZXkgZm9yIHJlZmxlY3Rpb24gbWV0YWRhdGFcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIGdlbmVyYXRlcyBhIGtleSBmb3IgcmVmbGVjdGlvbiBtZXRhZGF0YSBieSBwcmVmaXhpbmcgdGhlIGlucHV0IGtleVxuICAgKiB3aXRoIHRoZSBBbmd1bGFyIGVuZ2luZSdzIHJlZmxlY3Rpb24gcHJlZml4LiBUaGlzIGlzIHVzZWQgZm9yIHN0b3JpbmcgYW5kIHJldHJpZXZpbmdcbiAgICogbWV0YWRhdGEgaW4gYSBuYW1lc3BhY2VkIHdheSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBtZXRhZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBiYXNlIGtleSB0byBwcmVmaXhcbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgcHJlZml4ZWQga2V5IGZvciByZWZsZWN0aW9uIG1ldGFkYXRhXG4gICAqL1xuICBzdGF0aWMgb3ZlcnJpZGUga2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7QW5ndWxhckVuZ2luZUtleXMuUkVGTEVDVH0ke2tleX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIGlucHV0IHByb3BlcnRpZXMgb24gYSBjb21wb25lbnQgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgdXRpbGl0eSBtZXRob2Qgc2V0cyBpbnB1dCBwcm9wZXJ0aWVzIG9uIGEgY29tcG9uZW50IGluc3RhbmNlXG4gICAqIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnB1dHMgb2JqZWN0IGFuZCBjb21wb25lbnQgbWV0YWRhdGEuIEl0IGhhbmRsZXMgYm90aCBzaW1wbGVcbiAgICogdmFsdWVzIGFuZCBuZXN0ZWQgb2JqZWN0cywgcmVjdXJzaXZlbHkgcHJvY2Vzc2luZyBvYmplY3QgcHJvcGVydGllcy4gVGhlIG1ldGhvZFxuICAgKiB2YWxpZGF0ZXMgZWFjaCBpbnB1dCBhZ2FpbnN0IHRoZSBjb21wb25lbnQncyBtZXRhZGF0YSB0byBlbnN1cmUgb25seSB2YWxpZCBpbnB1dHNcbiAgICogYXJlIHNldC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21wb25lbnRSZWY8dW5rbm93bj59IGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgcmVmZXJlbmNlIHRvIHNldCBpbnB1dHMgb25cbiAgICogQHBhcmFtIHtLZXlWYWx1ZX0gaW5wdXRzIC0gVGhlIGlucHV0IHByb3BlcnRpZXMgdG8gc2V0XG4gICAqIEBwYXJhbSB7Q29tcG9uZW50TWlycm9yPHVua25vd24+fSBtZXRhZGF0YSAtIFRoZSBjb21wb25lbnQgbWV0YWRhdGEgZm9yIGlucHV0IHZhbGlkYXRpb25cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgU2V0SW5wdXRzIGFzIHNldElucHV0c1xuICAgKiAgIHBhcnRpY2lwYW50IFBhcnNlIGFzIHBhcnNlSW5wdXRWYWx1ZVxuICAgKiAgIHBhcnRpY2lwYW50IENvbXBvbmVudCBhcyBDb21wb25lbnRSZWZcbiAgICpcbiAgICogICBDYWxsZXItPj5TZXRJbnB1dHM6IHNldElucHV0cyhjb21wb25lbnQsIGlucHV0cywgbWV0YWRhdGEpXG4gICAqICAgU2V0SW5wdXRzLT4+U2V0SW5wdXRzOiBJdGVyYXRlIHRocm91Z2ggaW5wdXRzXG4gICAqICAgbG9vcCBGb3IgZWFjaCBpbnB1dFxuICAgKiAgICAgU2V0SW5wdXRzLT4+U2V0SW5wdXRzOiBDaGVjayBpZiBpbnB1dCBleGlzdHMgaW4gbWV0YWRhdGFcbiAgICogICAgIGFsdCBJbnB1dCBpcyAncHJvcHMnXG4gICAqICAgICAgIFNldElucHV0cy0+PlBhcnNlOiBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50LCB2YWx1ZSlcbiAgICogICAgICAgUGFyc2UtPj5QYXJzZTogUmVjdXJzaXZlbHkgcHJvY2VzcyBuZXN0ZWQgb2JqZWN0c1xuICAgKiAgICAgICBQYXJzZS0+PkNvbXBvbmVudDogc2V0SW5wdXQoa2V5LCB2YWx1ZSlcbiAgICogICAgIGVsc2UgSW5wdXQgaXMgdmFsaWRcbiAgICogICAgICAgU2V0SW5wdXRzLT4+Q29tcG9uZW50OiBzZXRJbnB1dChrZXksIHZhbHVlKVxuICAgKiAgICAgZW5kXG4gICAqICAgZW5kXG4gICAqL1xuICBzdGF0aWMgc2V0SW5wdXRzKGNvbXBvbmVudDogQ29tcG9uZW50UmVmPHVua25vd24+LCBpbnB1dHM6IEtleVZhbHVlLCBtZXRhZGF0YTogQ29tcG9uZW50TWlycm9yPHVua25vd24+KTogdm9pZCB7XG4gICAgZnVuY3Rpb24gcGFyc2VJbnB1dFZhbHVlKGNvbXBvbmVudDogQ29tcG9uZW50UmVmPHVua25vd24+LCBpbnB1dDogS2V5VmFsdWUpIHtcbiAgICAgIE9iamVjdC5rZXlzKGlucHV0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXRba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgISF2YWx1ZSlcbiAgICAgICAgICByZXR1cm4gcGFyc2VJbnB1dFZhbHVlKGNvbXBvbmVudCwgdmFsdWUpO1xuICAgICAgICBjb21wb25lbnQuc2V0SW5wdXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBPYmplY3QuZW50cmllcyhpbnB1dHMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgY29uc3QgcHJvcCA9IG1ldGFkYXRhLmlucHV0cy5maW5kKChpdGVtOiB7IHByb3BOYW1lOiBzdHJpbmcgfSkgPT4gaXRlbS5wcm9wTmFtZSA9PT0ga2V5KTtcbiAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdwcm9wcycpXG4gICAgICAgICAgcGFyc2VJbnB1dFZhbHVlKGNvbXBvbmVudCwgdmFsdWUpO1xuICAgICAgICAvLyBpZihrZXkgPT09ICdsb2NhbGUnICYmICF2YWx1ZSlcbiAgICAgICAgLy8gICB2YWx1ZSA9IGdldExvY2FsZUZyb21DbGFzc05hbWUodGhpcy5fY29tcG9uZW50TmFtZSk7XG4gICAgICAgIGNvbXBvbmVudC5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,6 +1,6 @@
1
1
  import { FormControl, FormGroup } from '@angular/forms';
2
2
  import { ComparisonValidationKeys, DEFAULT_PATTERNS, PathProxyEngine, Validation, ValidationKeys, } from '@decaf-ts/decorator-validation';
3
- import { HTML5InputTypes, parseValueByType } from '@decaf-ts/ui-decorators';
3
+ import { parseValueByType } from '@decaf-ts/ui-decorators';
4
4
  import { AngularEngineKeys } from './constants';
5
5
  import { NgxRenderingEngine } from './NgxRenderingEngine';
6
6
  /**
@@ -38,12 +38,12 @@ export class ValidatorFactory {
38
38
  if (!Validation.keys().includes(key))
39
39
  throw new Error('Unsupported custom validation');
40
40
  const validatorFn = (control) => {
41
- const { name, type } = fieldProps;
41
+ const { type } = fieldProps;
42
42
  const { validatorKey, props } = resolveValidatorKeyProps(key, fieldProps[key], type);
43
43
  const validator = Validation.get(validatorKey);
44
44
  // parseValueByType does not support undefined values
45
45
  const value = typeof control.value !== 'undefined'
46
- ? parseValueByType(type, type === HTML5InputTypes.CHECKBOX ? name : control.value, fieldProps)
46
+ ? parseValueByType(type, control.value, fieldProps)
47
47
  : undefined;
48
48
  // Create a proxy to enable access to parent and child values
49
49
  let proxy = ValidatorFactory.createProxy({});
@@ -103,4 +103,4 @@ export class ValidatorFactory {
103
103
  });
104
104
  }
105
105
  }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsaWRhdG9yRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL1ZhbGlkYXRvckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsZ0JBQWdCLEVBRWhCLGVBQWUsRUFDZixVQUFVLEVBQ1YsY0FBYyxHQUVmLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFtQixlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFLMUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBYyxFQUFFLElBQVksRUFHekUsRUFBRTtJQUNGLE1BQU0saUJBQWlCLEdBQTRCO1FBQ2pELENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxpQkFBaUI7UUFDdEUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztRQUM5QyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHO0tBQzNDLENBQUM7SUFDRixNQUFNLFdBQVcsR0FBRyxHQUFHLEtBQUssY0FBYyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDOUMsTUFBTSxLQUFLLEdBQTRCO1FBQ3JDLDhFQUE4RTtRQUM5RSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksWUFBWSxLQUFLLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztRQUMzSSxpRUFBaUU7UUFDakUsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7S0FDM0UsQ0FBQztJQUVGLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBR0YsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDLFVBQTJCLEVBQUUsR0FBVztRQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBRW5ELE1BQU0sV0FBVyxHQUFnQixDQUFDLE9BQXdCLEVBQTJCLEVBQUU7WUFDckYsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUM7WUFDbEMsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQTRCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5RyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBYyxDQUFDO1lBRTVELHFEQUFxRDtZQUNyRCxNQUFNLEtBQUssR0FBRyxPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQUssV0FBVztnQkFDaEQsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztnQkFDOUYsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUVkLDZEQUE2RDtZQUM3RCxJQUFJLEtBQUssR0FBdUIsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEVBQXFCLENBQUMsQ0FBQztZQUNwRixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBOEIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JGLE1BQU0sTUFBTSxHQUFjLE9BQU8sWUFBWSxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUUsT0FBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbkgsS0FBSyxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQXVCLENBQUM7WUFDckUsQ0FBQztZQUVELElBQUksSUFBd0IsQ0FBQztZQUM3QixJQUFJLENBQUM7Z0JBQ0gsSUFBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7b0JBQ3pDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2pDLElBQUksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksR0FBRyxHQUFHLEdBQUcsa0NBQWtDLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFO1lBQ3pDLEtBQUssRUFBRSxHQUFHLEdBQUcsV0FBVztTQUN6QixDQUFDLENBQUM7UUFFSCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBd0I7UUFDekMsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNyQyxRQUFRLENBQUMsTUFBdUIsRUFBRSxJQUFZO2dCQUM1QyxJQUFJLE1BQU0sWUFBWSxXQUFXO29CQUMvQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBRXRCLElBQUksTUFBTSxZQUFZLFNBQVMsRUFBRSxDQUFDO29CQUNoQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN0QyxPQUFPLE9BQU8sWUFBWSxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDbEUsQ0FBQztnQkFFRCw4QkFBOEI7Z0JBQzlCLG9DQUFvQztnQkFDcEMsd0JBQXdCO2dCQUN4QixFQUFFO2dCQUNGLG9DQUFvQztnQkFDcEMsMENBQTBDO2dCQUMxQyxxRUFBcUU7Z0JBQ3JFLElBQUk7Z0JBRUosT0FBUSxNQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsQ0FBQztZQUNELFNBQVMsRUFBRSxVQUFTLE1BQXVCO2dCQUN6QyxPQUFPLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxlQUFlLEVBQUUsSUFBSTtZQUNyQixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQ29tcGFyaXNvblZhbGlkYXRpb25LZXlzLFxuICBERUZBVUxUX1BBVFRFUk5TLFxuICBQYXRoUHJveHksXG4gIFBhdGhQcm94eUVuZ2luZSxcbiAgVmFsaWRhdGlvbixcbiAgVmFsaWRhdGlvbktleXMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uJztcbmltcG9ydCB7IEZpZWxkUHJvcGVydGllcywgSFRNTDVJbnB1dFR5cGVzLCBwYXJzZVZhbHVlQnlUeXBlIH0gZnJvbSAnQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgQW5ndWxhckVuZ2luZUtleXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgTmd4UmVuZGVyaW5nRW5naW5lIH0gZnJvbSAnLi9OZ3hSZW5kZXJpbmdFbmdpbmUnO1xuXG5cbnR5cGUgQ29tcGFyaXNvblZhbGlkYXRpb25LZXkgPSB0eXBlb2YgQ29tcGFyaXNvblZhbGlkYXRpb25LZXlzW2tleW9mIHR5cGVvZiBDb21wYXJpc29uVmFsaWRhdGlvbktleXNdO1xuXG4vKipcbiAqXG4gKiBSZXNvbHZlcyB0aGUgY29ycmVjdCB2YWxpZGF0b3Iga2V5IGFuZCBpdHMgYXNzb2NpYXRlZCBwcm9wZXJ0aWVzIGJhc2VkIG9uIHRoZSBpbnB1dCBrZXkgYW5kIHR5cGUuXG4gKlxuICogV2hlbiB0aGUgdmFsaWRhdGlvbiBrZXkgaXMgVFlQRSwgaXQncyBuZWNlc3NhcnkgdG8gcmVzb2x2ZSB0aGUgYWN0dWFsIHZhbGlkYXRvciBiYXNlZCBvbiB0aGVcbiAqIGZpZWxkJ3MgdHlwZSAoZS5nLiwgJ3Bhc3N3b3JkJywgJ2VtYWlsJywgJ3VybCcpIGluc3RlYWQgb2YgdXNpbmcgdGhlIGdlbmVyaWMgZ2V0VmFsaWRhdG9yKFwidHlwZVwiKSBsb2dpYy5cbiAqIFRoaXMgYWxsb3dzIGRpcmVjdGx5IGludm9raW5nIHNwZWNpZmljIHZhbGlkYXRvcnMgbGlrZSBnZXRWYWxpZGF0b3IoJ3Bhc3N3b3JkJyksIGVuc3VyaW5nIHRoZSBjb3JyZWN0XG4gKiBiZWhhdmlvciBmb3IgdHlwZS1iYXNlZCB2YWxpZGF0aW9uLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUgdmFsaWRhdGlvbiBrZXkgKGUuZy4sICd0eXBlJywgJ3JlcXVpcmVkJywgZXRjLikuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdGhhdCBuZWVkcyBiZSBwcm92aWRlZCB0byB0aGUgdmFsaWRhdG9yLlxuICogQHBhcmFtIHR5cGUgLSBUaGUgZmllbGQncyBkZWNsYXJlZCB0eXBlLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlc29sdmVkIHZhbGlkYXRvciBrZXkgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHByb3BzLlxuICovXG5jb25zdCByZXNvbHZlVmFsaWRhdG9yS2V5UHJvcHMgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCB0eXBlOiBzdHJpbmcpOiB7XG4gIHZhbGlkYXRvcktleTogc3RyaW5nO1xuICBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59ID0+IHtcbiAgY29uc3QgcGF0dGVyblZhbGlkYXRvcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIFtWYWxpZGF0aW9uS2V5cy5QQVNTV09SRF06IERFRkFVTFRfUEFUVEVSTlMuUEFTU1dPUkQuQ0hBUjhfT05FX09GX0VBQ0gsXG4gICAgW1ZhbGlkYXRpb25LZXlzLkVNQUlMXTogREVGQVVMVF9QQVRURVJOUy5FTUFJTCxcbiAgICBbVmFsaWRhdGlvbktleXMuVVJMXTogREVGQVVMVF9QQVRURVJOUy5VUkwsXG4gIH07XG4gIGNvbnN0IGlzVHlwZUJhc2VkID0ga2V5ID09PSBWYWxpZGF0aW9uS2V5cy5UWVBFICYmIE9iamVjdC5rZXlzKHBhdHRlcm5WYWxpZGF0b3JzKS5pbmNsdWRlcyh0eXBlKTtcbiAgY29uc3QgdmFsaWRhdG9yS2V5ID0gaXNUeXBlQmFzZWQgPyB0eXBlIDoga2V5O1xuICBjb25zdCBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgLy8gW3ZhbGlkYXRvcktleV06ICghaXNUeXBlQmFzZWQgJiYga2V5ID09PSAndHlwZScpID8gcGFyc2VUeXBlKHR5cGUpIDogdmFsdWUsXG4gICAgW3ZhbGlkYXRvcktleV06ICghaXNUeXBlQmFzZWQgJiYgdmFsaWRhdG9yS2V5ID09PSBWYWxpZGF0aW9uS2V5cy5UWVBFKSA/IE5neFJlbmRlcmluZ0VuZ2luZS5nZXQoKS50cmFuc2xhdGUodmFsdWUgYXMgc3RyaW5nLCBmYWxzZSkgOiB2YWx1ZSxcbiAgICAvLyBFbWFpbCwgUGFzc3dvcmQsIGFuZCBVUkwgYXJlIHZhbGlkYXRlZCB1c2luZyB0aGUgXCJwYXR0ZXJuXCIga2V5XG4gICAgLi4uKGlzVHlwZUJhc2VkICYmIHsgW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dIDogcGF0dGVyblZhbGlkYXRvcnNbdHlwZV0gfSksXG4gIH07XG5cbiAgcmV0dXJuIHsgdmFsaWRhdG9yS2V5LCBwcm9wcyB9O1xufTtcblxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yRmFjdG9yeSB7XG4gIHN0YXRpYyBzcGF3bihmaWVsZFByb3BzOiBGaWVsZFByb3BlcnRpZXMsIGtleTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIGlmICghVmFsaWRhdGlvbi5rZXlzKCkuaW5jbHVkZXMoa2V5KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY3VzdG9tIHZhbGlkYXRpb24nKTtcblxuICAgIGNvbnN0IHZhbGlkYXRvckZuOiBWYWxpZGF0b3JGbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB7IG5hbWUsIHR5cGUgfSA9IGZpZWxkUHJvcHM7XG4gICAgICBjb25zdCB7IHZhbGlkYXRvcktleSwgcHJvcHMgfSA9IHJlc29sdmVWYWxpZGF0b3JLZXlQcm9wcyhrZXksIGZpZWxkUHJvcHNba2V5IGFzIGtleW9mIEZpZWxkUHJvcGVydGllc10sIHR5cGUpO1xuICAgICAgY29uc3QgdmFsaWRhdG9yID0gVmFsaWRhdGlvbi5nZXQodmFsaWRhdG9yS2V5KSBhcyBWYWxpZGF0b3I7XG5cbiAgICAgIC8vIHBhcnNlVmFsdWVCeVR5cGUgZG9lcyBub3Qgc3VwcG9ydCB1bmRlZmluZWQgdmFsdWVzXG4gICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBjb250cm9sLnZhbHVlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/IHBhcnNlVmFsdWVCeVR5cGUodHlwZSwgdHlwZSA9PT0gSFRNTDVJbnB1dFR5cGVzLkNIRUNLQk9YID8gbmFtZSA6IGNvbnRyb2wudmFsdWUsIGZpZWxkUHJvcHMpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAvLyBDcmVhdGUgYSBwcm94eSB0byBlbmFibGUgYWNjZXNzIHRvIHBhcmVudCBhbmQgY2hpbGQgdmFsdWVzXG4gICAgICBsZXQgcHJveHk6IFBhdGhQcm94eTx1bmtub3duPiA9IFZhbGlkYXRvckZhY3RvcnkuY3JlYXRlUHJveHkoe30gYXMgQWJzdHJhY3RDb250cm9sKTtcbiAgICAgIGlmIChPYmplY3QudmFsdWVzKENvbXBhcmlzb25WYWxpZGF0aW9uS2V5cykuaW5jbHVkZXMoa2V5IGFzIENvbXBhcmlzb25WYWxpZGF0aW9uS2V5KSkge1xuICAgICAgICBjb25zdCBwYXJlbnQ6IEZvcm1Hcm91cCA9IGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgPyBjb250cm9sIDogKGNvbnRyb2wgYXMgS2V5VmFsdWUpW0FuZ3VsYXJFbmdpbmVLZXlzLlBBUkVOVF07XG4gICAgICAgIHByb3h5ID0gVmFsaWRhdG9yRmFjdG9yeS5jcmVhdGVQcm94eShwYXJlbnQpIGFzIFBhdGhQcm94eTx1bmtub3duPjtcbiAgICAgIH1cblxuICAgICAgbGV0IGVycnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmKCFwcm9wc1sndHlwZXMnXSAmJiAhcHJvcHNbJ2N1c3RvbVR5cGVzJ10pXG4gICAgICAgICAgcHJvcHNbJ3R5cGVzJ10gPSBwcm9wc1sndHlwZSddO1xuICAgICAgICBlcnJzID0gdmFsaWRhdG9yLmhhc0Vycm9ycyh2YWx1ZSwgcHJvcHMsIHByb3h5KTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgZXJycyA9IGAke2tleX0gdmFsaWRhdG9yIGZhaWxlZCB0byB2YWxpZGF0ZTogJHtlfWA7XG4gICAgICAgIGNvbnNvbGUud2FybihlcnJzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVycnMgPyB7IFt2YWxpZGF0b3JLZXldOiB0cnVlIH0gOiBudWxsO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsaWRhdG9yRm4sICduYW1lJywge1xuICAgICAgdmFsdWU6IGAke2tleX1WYWxpZGF0b3JgLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRvckZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBwcm94eSB3cmFwcGVyIGZvciBhbiBBbmd1bGFyIEFic3RyYWN0Q29udHJvbCB0byBhc3Npc3Qgd2l0aCBjdXN0b20gdmFsaWRhdGlvbiBsb2dpYy5cbiAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBzdHJ1Y3R1cmVkIHByb3h5IG9iamVjdCB0aGF0IHNpbXVsYXRlcyBhIGhpZXJhcmNoaWNhbCB0cmVlIG9mIGZvcm0gdmFsdWVzLlxuICAgKiBFbmFibGVzIFZhbGlkYXRvcnMgaGFuZGxpbmcgbWV0aG9kIHRvIGFjY2VzcyBwYXJlbnQgYW5kIGNoaWxkIHByb3BlcnRpZXMgdXNpbmcgY29uc2lzdGVudCBkb3Qtbm90YXRpb24gaW4gQW5ndWxhciBmb3Jtcy5cbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdENvbnRyb2x9IGNvbnRyb2wgLSBUaGUgY29udHJvbCB0byB3cmFwIGluIGEgcHJveHkuXG4gICAqIEByZXR1cm5zIHtQYXRoUHJveHk8dW5rbm93bj59IEEgcHJveHkgb2JqZWN0IGV4cG9zaW5nIGZvcm0gdmFsdWVzIGFuZCBlbmFibGluZyByZWN1cnNpdmUgcGFyZW50IGFjY2Vzcy5cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVQcm94eShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBQYXRoUHJveHk8dW5rbm93bj4ge1xuICAgIHJldHVybiBQYXRoUHJveHlFbmdpbmUuY3JlYXRlKGNvbnRyb2wsIHtcbiAgICAgIGdldFZhbHVlKHRhcmdldDogQWJzdHJhY3RDb250cm9sLCBwcm9wOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKVxuICAgICAgICAgIHJldHVybiB0YXJnZXQudmFsdWU7XG5cbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0YXJnZXQuY29udHJvbHNbcHJvcF07XG4gICAgICAgICAgcmV0dXJuIGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCA/IGNvbnRyb2wudmFsdWUgOiBjb250cm9sO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29uc3QgdmFsdWUgPSB0YXJnZXRbcHJvcF07XG4gICAgICAgIC8vIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Db250cm9sKVxuICAgICAgICAvLyAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gaWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICAgIC8vICAgY29uc3QgY29udHJvbCA9IHZhbHVlLmNvbnRyb2xzW3Byb3BdO1xuICAgICAgICAvLyAgIHJldHVybiBjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgPyBjb250cm9sLnZhbHVlIDogY29udHJvbDtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHJldHVybiAodGFyZ2V0IGFzIEtleVZhbHVlKT8uW3Byb3BdO1xuICAgICAgfSxcbiAgICAgIGdldFBhcmVudDogZnVuY3Rpb24odGFyZ2V0OiBBYnN0cmFjdENvbnRyb2wpICB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ/LlsnX3BhcmVudCddO1xuICAgICAgfSxcbiAgICAgIGlnbm9yZVVuZGVmaW5lZDogdHJ1ZSxcbiAgICAgIGlnbm9yZU51bGw6IHRydWUsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsaWRhdG9yRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL1ZhbGlkYXRvckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsZ0JBQWdCLEVBRWhCLGVBQWUsRUFDZixVQUFVLEVBQ1YsY0FBYyxHQUVmLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFtQixnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVoRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUsxRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFjLEVBQUUsSUFBWSxFQUd6RSxFQUFFO0lBQ0YsTUFBTSxpQkFBaUIsR0FBNEI7UUFDakQsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGlCQUFpQjtRQUN0RSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO1FBQzlDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLEdBQUc7S0FDM0MsQ0FBQztJQUNGLE1BQU0sV0FBVyxHQUFHLEdBQUcsS0FBSyxjQUFjLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakcsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUM5QyxN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LEVBQUUsR0FBRyxHQUFHLFdBQVc7U0FDekIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQXdCO1FBQ3pDLE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDckMsUUFBUSxDQUFDLE1BQXVCLEVBQUUsSUFBWTtnQkFDNUMsSUFBSSxNQUFNLFlBQVksV0FBVztvQkFDL0IsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUV0QixJQUFJLE1BQU0sWUFBWSxTQUFTLEVBQUUsQ0FBQztvQkFDaEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEMsT0FBTyxPQUFPLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xFLENBQUM7Z0JBRUQsOEJBQThCO2dCQUM5QixvQ0FBb0M7Z0JBQ3BDLHdCQUF3QjtnQkFDeEIsRUFBRTtnQkFDRixvQ0FBb0M7Z0JBQ3BDLDBDQUEwQztnQkFDMUMscUVBQXFFO2dCQUNyRSxJQUFJO2dCQUVKLE9BQVEsTUFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFDRCxTQUFTLEVBQUUsVUFBUyxNQUF1QjtnQkFDekMsT0FBTyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBQ0QsZUFBZSxFQUFFLElBQUk7WUFDckIsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIENvbXBhcmlzb25WYWxpZGF0aW9uS2V5cyxcbiAgREVGQVVMVF9QQVRURVJOUyxcbiAgUGF0aFByb3h5LFxuICBQYXRoUHJveHlFbmdpbmUsXG4gIFZhbGlkYXRpb24sXG4gIFZhbGlkYXRpb25LZXlzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBGaWVsZFByb3BlcnRpZXMsIHBhcnNlVmFsdWVCeVR5cGUgfSBmcm9tICdAZGVjYWYtdHMvdWktZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBbmd1bGFyRW5naW5lS2V5cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBOZ3hSZW5kZXJpbmdFbmdpbmUgfSBmcm9tICcuL05neFJlbmRlcmluZ0VuZ2luZSc7XG5cblxudHlwZSBDb21wYXJpc29uVmFsaWRhdGlvbktleSA9IHR5cGVvZiBDb21wYXJpc29uVmFsaWRhdGlvbktleXNba2V5b2YgdHlwZW9mIENvbXBhcmlzb25WYWxpZGF0aW9uS2V5c107XG5cbi8qKlxuICpcbiAqIFJlc29sdmVzIHRoZSBjb3JyZWN0IHZhbGlkYXRvciBrZXkgYW5kIGl0cyBhc3NvY2lhdGVkIHByb3BlcnRpZXMgYmFzZWQgb24gdGhlIGlucHV0IGtleSBhbmQgdHlwZS5cbiAqXG4gKiBXaGVuIHRoZSB2YWxpZGF0aW9uIGtleSBpcyBUWVBFLCBpdCdzIG5lY2Vzc2FyeSB0byByZXNvbHZlIHRoZSBhY3R1YWwgdmFsaWRhdG9yIGJhc2VkIG9uIHRoZVxuICogZmllbGQncyB0eXBlIChlLmcuLCAncGFzc3dvcmQnLCAnZW1haWwnLCAndXJsJykgaW5zdGVhZCBvZiB1c2luZyB0aGUgZ2VuZXJpYyBnZXRWYWxpZGF0b3IoXCJ0eXBlXCIpIGxvZ2ljLlxuICogVGhpcyBhbGxvd3MgZGlyZWN0bHkgaW52b2tpbmcgc3BlY2lmaWMgdmFsaWRhdG9ycyBsaWtlIGdldFZhbGlkYXRvcigncGFzc3dvcmQnKSwgZW5zdXJpbmcgdGhlIGNvcnJlY3RcbiAqIGJlaGF2aW9yIGZvciB0eXBlLWJhc2VkIHZhbGlkYXRpb24uXG4gKlxuICogQHBhcmFtIGtleSAtIFRoZSB2YWxpZGF0aW9uIGtleSAoZS5nLiwgJ3R5cGUnLCAncmVxdWlyZWQnLCBldGMuKS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0aGF0IG5lZWRzIGJlIHByb3ZpZGVkIHRvIHRoZSB2YWxpZGF0b3IuXG4gKiBAcGFyYW0gdHlwZSAtIFRoZSBmaWVsZCdzIGRlY2xhcmVkIHR5cGUuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzb2x2ZWQgdmFsaWRhdG9yIGtleSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgcHJvcHMuXG4gKi9cbmNvbnN0IHJlc29sdmVWYWxpZGF0b3JLZXlQcm9wcyA9IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHR5cGU6IHN0cmluZyk6IHtcbiAgdmFsaWRhdG9yS2V5OiBzdHJpbmc7XG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn0gPT4ge1xuICBjb25zdCBwYXR0ZXJuVmFsaWRhdG9yczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgW1ZhbGlkYXRpb25LZXlzLlBBU1NXT1JEXTogREVGQVVMVF9QQVRURVJOUy5QQVNTV09SRC5DSEFSOF9PTkVfT0ZfRUFDSCxcbiAgICBbVmFsaWRhdGlvbktleXMuRU1BSUxdOiBERUZBVUxUX1BBVFRFUk5TLkVNQUlMLFxuICAgIFtWYWxpZGF0aW9uS2V5cy5VUkxdOiBERUZBVUxUX1BBVFRFUk5TLlVSTCxcbiAgfTtcbiAgY29uc3QgaXNUeXBlQmFzZWQgPSBrZXkgPT09IFZhbGlkYXRpb25LZXlzLlRZUEUgJiYgT2JqZWN0LmtleXMocGF0dGVyblZhbGlkYXRvcnMpLmluY2x1ZGVzKHR5cGUpO1xuICBjb25zdCB2YWxpZGF0b3JLZXkgPSBpc1R5cGVCYXNlZCA/IHR5cGUgOiBrZXk7XG4gIGNvbnN0IHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAvLyBbdmFsaWRhdG9yS2V5XTogKCFpc1R5cGVCYXNlZCAmJiBrZXkgPT09ICd0eXBlJykgPyBwYXJzZVR5cGUodHlwZSkgOiB2YWx1ZSxcbiAgICBbdmFsaWRhdG9yS2V5XTogKCFpc1R5cGVCYXNlZCAmJiB2YWxpZGF0b3JLZXkgPT09IFZhbGlkYXRpb25LZXlzLlRZUEUpID8gTmd4UmVuZGVyaW5nRW5naW5lLmdldCgpLnRyYW5zbGF0ZSh2YWx1ZSBhcyBzdHJpbmcsIGZhbHNlKSA6IHZhbHVlLFxuICAgIC8vIEVtYWlsLCBQYXNzd29yZCwgYW5kIFVSTCBhcmUgdmFsaWRhdGVkIHVzaW5nIHRoZSBcInBhdHRlcm5cIiBrZXlcbiAgICAuLi4oaXNUeXBlQmFzZWQgJiYgeyBbVmFsaWRhdGlvbktleXMuUEFUVEVSTl0gOiBwYXR0ZXJuVmFsaWRhdG9yc1t0eXBlXSB9KSxcbiAgfTtcblxuICByZXR1cm4geyB2YWxpZGF0b3JLZXksIHByb3BzIH07XG59O1xuXG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0b3JGYWN0b3J5IHtcbiAgc3RhdGljIHNwYXduKGZpZWxkUHJvcHM6IEZpZWxkUHJvcGVydGllcywga2V5OiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgaWYgKCFWYWxpZGF0aW9uLmtleXMoKS5pbmNsdWRlcyhrZXkpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjdXN0b20gdmFsaWRhdGlvbicpO1xuXG4gICAgY29uc3QgdmFsaWRhdG9yRm46IFZhbGlkYXRvckZuID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHsgdHlwZSB9ID0gZmllbGRQcm9wcztcbiAgICAgIGNvbnN0IHsgdmFsaWRhdG9yS2V5LCBwcm9wcyB9ID0gcmVzb2x2ZVZhbGlkYXRvcktleVByb3BzKGtleSwgZmllbGRQcm9wc1trZXkgYXMga2V5b2YgRmllbGRQcm9wZXJ0aWVzXSwgdHlwZSk7XG4gICAgICBjb25zdCB2YWxpZGF0b3IgPSBWYWxpZGF0aW9uLmdldCh2YWxpZGF0b3JLZXkpIGFzIFZhbGlkYXRvcjtcblxuICAgICAgLy8gcGFyc2VWYWx1ZUJ5VHlwZSBkb2VzIG5vdCBzdXBwb3J0IHVuZGVmaW5lZCB2YWx1ZXNcbiAgICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIGNvbnRyb2wudmFsdWUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gcGFyc2VWYWx1ZUJ5VHlwZSh0eXBlLCBjb250cm9sLnZhbHVlLCBmaWVsZFByb3BzKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8gQ3JlYXRlIGEgcHJveHkgdG8gZW5hYmxlIGFjY2VzcyB0byBwYXJlbnQgYW5kIGNoaWxkIHZhbHVlc1xuICAgICAgbGV0IHByb3h5OiBQYXRoUHJveHk8dW5rbm93bj4gPSBWYWxpZGF0b3JGYWN0b3J5LmNyZWF0ZVByb3h5KHt9IGFzIEFic3RyYWN0Q29udHJvbCk7XG4gICAgICBpZiAoT2JqZWN0LnZhbHVlcyhDb21wYXJpc29uVmFsaWRhdGlvbktleXMpLmluY2x1ZGVzKGtleSBhcyBDb21wYXJpc29uVmFsaWRhdGlvbktleSkpIHtcbiAgICAgICAgY29uc3QgcGFyZW50OiBGb3JtR3JvdXAgPSBjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwID8gY29udHJvbCA6IChjb250cm9sIGFzIEtleVZhbHVlKVtBbmd1bGFyRW5naW5lS2V5cy5QQVJFTlRdO1xuICAgICAgICBwcm94eSA9IFZhbGlkYXRvckZhY3RvcnkuY3JlYXRlUHJveHkocGFyZW50KSBhcyBQYXRoUHJveHk8dW5rbm93bj47XG4gICAgICB9XG5cbiAgICAgIGxldCBlcnJzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZighcHJvcHNbJ3R5cGVzJ10gJiYgIXByb3BzWydjdXN0b21UeXBlcyddKVxuICAgICAgICAgIHByb3BzWyd0eXBlcyddID0gcHJvcHNbJ3R5cGUnXTtcbiAgICAgICAgZXJycyA9IHZhbGlkYXRvci5oYXNFcnJvcnModmFsdWUsIHByb3BzLCBwcm94eSk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIGVycnMgPSBgJHtrZXl9IHZhbGlkYXRvciBmYWlsZWQgdG8gdmFsaWRhdGU6ICR7ZX1gO1xuICAgICAgICBjb25zb2xlLndhcm4oZXJycyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlcnJzID8geyBbdmFsaWRhdG9yS2V5XTogdHJ1ZSB9IDogbnVsbDtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRvckZuLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBgJHtrZXl9VmFsaWRhdG9yYCxcbiAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0b3JGbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgcHJveHkgd3JhcHBlciBmb3IgYW4gQW5ndWxhciBBYnN0cmFjdENvbnRyb2wgdG8gYXNzaXN0IHdpdGggY3VzdG9tIHZhbGlkYXRpb24gbG9naWMuXG4gICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgc3RydWN0dXJlZCBwcm94eSBvYmplY3QgdGhhdCBzaW11bGF0ZXMgYSBoaWVyYXJjaGljYWwgdHJlZSBvZiBmb3JtIHZhbHVlcy5cbiAgICogRW5hYmxlcyBWYWxpZGF0b3JzIGhhbmRsaW5nIG1ldGhvZCB0byBhY2Nlc3MgcGFyZW50IGFuZCBjaGlsZCBwcm9wZXJ0aWVzIHVzaW5nIGNvbnNpc3RlbnQgZG90LW5vdGF0aW9uIGluIEFuZ3VsYXIgZm9ybXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RDb250cm9sfSBjb250cm9sIC0gVGhlIGNvbnRyb2wgdG8gd3JhcCBpbiBhIHByb3h5LlxuICAgKiBAcmV0dXJucyB7UGF0aFByb3h5PHVua25vd24+fSBBIHByb3h5IG9iamVjdCBleHBvc2luZyBmb3JtIHZhbHVlcyBhbmQgZW5hYmxpbmcgcmVjdXJzaXZlIHBhcmVudCBhY2Nlc3MuXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUHJveHkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogUGF0aFByb3h5PHVua25vd24+IHtcbiAgICByZXR1cm4gUGF0aFByb3h5RW5naW5lLmNyZWF0ZShjb250cm9sLCB7XG4gICAgICBnZXRWYWx1ZSh0YXJnZXQ6IEFic3RyYWN0Q29udHJvbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biB7XG4gICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBGb3JtQ29udHJvbClcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGFyZ2V0LmNvbnRyb2xzW3Byb3BdO1xuICAgICAgICAgIHJldHVybiBjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgPyBjb250cm9sLnZhbHVlIDogY29udHJvbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbnN0IHZhbHVlID0gdGFyZ2V0W3Byb3BdO1xuICAgICAgICAvLyBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQ29udHJvbClcbiAgICAgICAgLy8gICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICAvLyAgIGNvbnN0IGNvbnRyb2wgPSB2YWx1ZS5jb250cm9sc1twcm9wXTtcbiAgICAgICAgLy8gICByZXR1cm4gY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sID8gY29udHJvbC52YWx1ZSA6IGNvbnRyb2w7XG4gICAgICAgIC8vIH1cblxuICAgICAgICByZXR1cm4gKHRhcmdldCBhcyBLZXlWYWx1ZSk/Lltwcm9wXTtcbiAgICAgIH0sXG4gICAgICBnZXRQYXJlbnQ6IGZ1bmN0aW9uKHRhcmdldDogQWJzdHJhY3RDb250cm9sKSAge1xuICAgICAgICByZXR1cm4gdGFyZ2V0Py5bJ19wYXJlbnQnXTtcbiAgICAgIH0sXG4gICAgICBpZ25vcmVVbmRlZmluZWQ6IHRydWUsXG4gICAgICBpZ25vcmVOdWxsOiB0cnVlLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
1
  ;
2
2
  ;
3
3
  export {};
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUZDLENBQUM7QUFjRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRWxlbWVudFJlZiwgRW52aXJvbm1lbnRJbmplY3RvciwgSW5qZWN0b3IsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9yZGVyRGlyZWN0aW9uIH0gZnJvbSAnQGRlY2FmLXRzL2NvcmUnO1xuaW1wb3J0IHsgQW5ndWxhckZpZWxkRGVmaW5pdGlvbiwgRmllbGRVcGRhdGVNb2RlLCBLZXlWYWx1ZSwgU3RyaW5nT3JCb29sZWFuIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBGaWVsZFByb3BlcnRpZXMgfSBmcm9tICdAZGVjYWYtdHMvdWktZGVjb3JhdG9ycyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEludGVyZmFjZSBmb3IgY29tcG9uZW50cyB0aGF0IGhvbGQgYW4gRWxlbWVudFJlZlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGNvbXBvbmVudCBob2xkZXIgaW50ZXJmYWNlIHRoYXQgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIERPTSBlbGVtZW50IHRocm91Z2ggRWxlbWVudFJlZlxuICogQGludGVyZmFjZSBJQ29tcG9uZW50SG9sZGVyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb21wb25lbnRIb2xkZXIge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50J3MgRE9NIGVsZW1lbnRcbiAgICogQHByb3BlcnR5IHtFbGVtZW50UmVmfSBjb21wb25lbnQgLSBUaGUgRWxlbWVudFJlZiBpbnN0YW5jZSBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBuYXRpdmUgRE9NIGVsZW1lbnRcbiAgICovXG4gIGNvbXBvbmVudDogRWxlbWVudFJlZjtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBmb3JtIGNvbXBvbmVudHMgdGhhdCBob2xkIGJvdGggYW4gRWxlbWVudFJlZiBhbmQgYSBGb3JtR3JvdXBcbiAqIEBzdW1tYXJ5IEV4dGVuZHMgSUNvbXBvbmVudEhvbGRlciB0byBpbmNsdWRlIGEgRm9ybUdyb3VwIGZvciBmb3JtIGhhbmRsaW5nIGNhcGFiaWxpdGllc1xuICogQGludGVyZmFjZSBJRm9ybUVsZW1lbnRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1FbGVtZW50IGV4dGVuZHMgSUNvbXBvbmVudEhvbGRlciB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIEFuZ3VsYXIgRm9ybUdyb3VwIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZvcm0gZWxlbWVudFxuICAgKiBAcHJvcGVydHkge0Zvcm1Hcm91cHx1bmRlZmluZWR9IGZvcm1Hcm91cCAtIFRoZSBmb3JtIGdyb3VwIGluc3RhbmNlIGZvciBtYW5hZ2luZyBmb3JtIGNvbnRyb2xzIGFuZCB2YWxpZGF0aW9uXG4gICAqL1xuICBmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcbn1cblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIGZpZWxkc2V0IGl0ZW0gcmVwcmVzZW50YXRpb24gaW4gdGhlIFVJLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIGZvciBpdGVtcyBkaXNwbGF5ZWQgaW4gdGhlIHJlb3JkZXJhYmxlIGxpc3Qgd2l0aGluIHRoZSBmaWVsZHNldC5cbiAqIEVhY2ggaXRlbSByZXByZXNlbnRzIGEgdmFsdWUgYWRkZWQgdG8gdGhlIGZpZWxkc2V0IHdpdGggZGlzcGxheSBwcm9wZXJ0aWVzIGZvciB0aGUgVUkuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaWVsZFNldEl0ZW0ge1xuICAvKiogQGRlc2NyaXB0aW9uIFNlcXVlbnRpYWwgaW5kZXggbnVtYmVyIGZvciBvcmRlcmluZyBpdGVtcyBpbiB0aGUgbGlzdCAqL1xuICBpbmRleDogbnVtYmVyO1xuICAvKiogQGRlc2NyaXB0aW9uIFByaW1hcnkgZGlzcGxheSB0ZXh0IGZvciB0aGUgaXRlbSAqL1xuICB0aXRsZTogc3RyaW5nO1xuICAvKiogQGRlc2NyaXB0aW9uIE9wdGlvbmFsIHNlY29uZGFyeSB0ZXh0IHByb3ZpZGluZyBhZGRpdGlvbmFsIGl0ZW0gZGV0YWlscyAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBmaWVsZHNldCB2YWxpZGF0aW9uIGV2ZW50IGRhdGEuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdmFsaWRhdGlvbiBldmVudHMgZW1pdHRlZCB3aGVuIGZvcm0gdmFsaWRhdGlvbiBvY2N1cnMuXG4gKiBVc2VkIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gZm9ybSBjb21wb25lbnRzIGFuZCB0aGUgZmllbGRzZXQgY29udGFpbmVyLlxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRmllbGRTZXRWYWxpZGF0aW9uRXZlbnQge1xuICAvKiogQGRlc2NyaXB0aW9uIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGUgdmFsaWRhdGVkIGZvcm0gY29udHJvbHMgKi9cbiAgZm9ybUdyb3VwOiAgRm9ybUFycmF5IHwgRm9ybUdyb3VwO1xuICAvKiogQGRlc2NyaXB0aW9uIFRoZSBjdXJyZW50IGZvcm0gdmFsdWUgYmVpbmcgdmFsaWRhdGVkICovXG4gIHZhbHVlOiB1bmtub3duO1xuICAvKiogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdGhlIGZvcm0gdmFsaWRhdGlvbiBwYXNzZWQgb3IgZmFpbGVkICovXG4gIGlzVmFsaWQ6IGJvb2xlYW47XG59XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBpbmRpdmlkdWFsIGZpbHRlciBxdWVyeSBpdGVtc1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIG9mIGEgc2luZ2xlIGZpbHRlciBjcml0ZXJpb24gaW4gYSBmaWx0ZXIgcXVlcnkuXG4gKiBFYWNoIGl0ZW0gcmVwcmVzZW50cyBvbmUgY29uZGl0aW9uIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGRhdGEsIGNvbnNpc3Rpbmcgb2ZcbiAqIGFuIGluZGV4IChmaWVsZCBuYW1lKSwgYSBjb25kaXRpb24gKGNvbXBhcmlzb24gb3BlcmF0b3IpLCBhbmQgYSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAaW50ZXJmYWNlIElGaWx0ZXJRdWVyeUl0ZW1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaW5kZXhdIC0gT3B0aW9uYWwgZmllbGQgbmFtZSBvciBpbmRleCB0byBmaWx0ZXIgb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29uZGl0aW9uXSAtIE9wdGlvbmFsIGNvbXBhcmlzb24gY29uZGl0aW9uIChlLmcuLCAnRXF1YWwnLCAnQ29udGFpbnMnLCAnR3JlYXRlciBUaGFuJylcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdmFsdWVdIC0gT3B0aW9uYWwgdmFsdWUgdG8gY29tcGFyZSB0aGUgZmllbGQgYWdhaW5zdFxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRmlsdGVyUXVlcnlJdGVtIHtcbiAgaW5kZXg/OiBzdHJpbmcsXG4gIGNvbmRpdGlvbj86IHN0cmluZyxcbiAgdmFsdWU/OiBzdHJpbmdcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEludGVyZmFjZSBmb3Igc29ydGluZyBjb25maWd1cmF0aW9uIG9iamVjdHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBmb3Igc3BlY2lmeWluZyBzb3J0IGNyaXRlcmlhIGluY2x1ZGluZyB0aGUgZmllbGRcbiAqIHRvIHNvcnQgYnkgYW5kIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNvcnQgKGFzY2VuZGluZyBvciBkZXNjZW5kaW5nKS5cbiAqIEBpbnRlcmZhY2UgSVNvcnRPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSBmaWVsZCBuYW1lIG9yIHByb3BlcnR5IHRvIHNvcnQgYnlcbiAqIEBwcm9wZXJ0eSB7T3JkZXJEaXJlY3Rpb259IGRpcmVjdGlvbiAtIFRoZSBzb3J0IGRpcmVjdGlvbiAoQVNDIG9yIERTQylcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNvcnRPYmplY3Qge1xuICB2YWx1ZTogc3RyaW5nLFxuICBkaXJlY3Rpb246IE9yZGVyRGlyZWN0aW9uXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIGNvbXBsZXRlIGZpbHRlciBxdWVyeSBjb25maWd1cmF0aW9uXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBjb21wbGV0ZSBzdHJ1Y3R1cmUgZm9yIGZpbHRlciBhbmQgc29ydCBvcGVyYXRpb25zLlxuICogQ29tYmluZXMgbXVsdGlwbGUgZmlsdGVyIGNyaXRlcmlhIHdpdGggc29ydGluZyBjb25maWd1cmF0aW9uIHRvIHByb3ZpZGVcbiAqIGNvbXByZWhlbnNpdmUgZGF0YSBmaWx0ZXJpbmcgYW5kIG9yZGVyaW5nIGNhcGFiaWxpdGllcy5cbiAqIEBpbnRlcmZhY2UgSUZpbHRlclF1ZXJ5XG4gKiBAcHJvcGVydHkge0lGaWx0ZXJRdWVyeUl0ZW1bXSB8IHVuZGVmaW5lZH0gcXVlcnkgLSBBcnJheSBvZiBmaWx0ZXIgY3JpdGVyaWEgb3IgdW5kZWZpbmVkIGZvciBubyBmaWx0ZXJpbmdcbiAqIEBwcm9wZXJ0eSB7SVNvcnRPYmplY3R9IHNvcnQgLSBTb3J0aW5nIGNvbmZpZ3VyYXRpb24gc3BlY2lmeWluZyBmaWVsZCBhbmQgZGlyZWN0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaWx0ZXJRdWVyeSB7XG4gIHF1ZXJ5OiBJRmlsdGVyUXVlcnlJdGVtW10gfCB1bmRlZmluZWQsXG4gIHNvcnQ6IElTb3J0T2JqZWN0XG59XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50IGlucHV0IHByb3BlcnRpZXNcbiAqIEBzdW1tYXJ5IEV4dGVuZHMgRmllbGRQcm9wZXJ0aWVzIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHNwZWNpZmljIHRvIEFuZ3VsYXIgY29tcG9uZW50cy5cbiAqIEluY2x1ZGVzIHVwZGF0ZSBtb2RlIGZvciBmb3JtIGNvbnRyb2xzIGFuZCBvcHRpb25hbCBGb3JtR3JvdXAgYW5kIEZvcm1Db250cm9sIHJlZmVyZW5jZXMuXG4gKiBAaW50ZXJmYWNlIElDb21wb25lbnRJbnB1dFxuICogQHByb3BlcnR5IHtGaWVsZFVwZGF0ZU1vZGV9IFt1cGRhdGVNb2RlXSAtIFdoZW4gdGhlIGZpZWxkIHZhbHVlIHNob3VsZCBiZSB1cGRhdGVkXG4gKiBAcHJvcGVydHkge0Zvcm1Hcm91cH0gW2Zvcm1Hcm91cF0gLSBPcHRpb25hbCBGb3JtR3JvdXAgcmVmZXJlbmNlXG4gKiBAcHJvcGVydHkge0Zvcm1Db250cm9sfSBbZm9ybUNvbnRyb2xdIC0gT3B0aW9uYWwgRm9ybUNvbnRyb2wgcmVmZXJlbmNlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb21wb25lbnRJbnB1dCBleHRlbmRzIEZpZWxkUHJvcGVydGllcyB7XG4gIHVwZGF0ZU1vZGU/OiBGaWVsZFVwZGF0ZU1vZGU7XG4gIGZvcm1Hcm91cD86IEZvcm1Hcm91cDtcbiAgZm9ybUNvbnRyb2w/OiBGb3JtQ29udHJvbDtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBjb25maWd1cmF0aW9uIGZvciBkeW5hbWljYWxseSBjcmVhdGluZyBBbmd1bGFyIGNvbXBvbmVudHMuXG4gKiBDb250YWlucyB0aGUgY29tcG9uZW50IG5hbWUsIGlucHV0IHByb3BlcnRpZXMsIGluamVjdG9yLCBhbmQgb3B0aW9uYWwgY2hpbGQgY29tcG9uZW50cy5cbiAqIEBpbnRlcmZhY2UgSUNvbXBvbmVudENvbmZpZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbXBvbmVudCAtIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQgdG8gcmVuZGVyXG4gKiBAcHJvcGVydHkge0lDb21wb25lbnRJbnB1dH0gaW5wdXRzIC0gVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoZSBjb21wb25lbnRcbiAqIEBwcm9wZXJ0eSB7RW52aXJvbm1lbnRJbmplY3RvciB8IEluamVjdG9yfSBpbmplY3RvciAtIFRoZSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICogQHByb3BlcnR5IHtJQ29tcG9uZW50Q29uZmlnW119IFtjaGlsZHJlbl0gLSBPcHRpb25hbCBjaGlsZCBjb21wb25lbnQgY29uZmlndXJhdGlvbnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBvbmVudENvbmZpZyB7XG4gIGNvbXBvbmVudDogc3RyaW5nO1xuICBpbnB1dHM6IElDb21wb25lbnRJbnB1dDtcbiAgaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IgfCBJbmplY3RvcjtcbiAgY2hpbGRyZW4/OiBJQ29tcG9uZW50Q29uZmlnW107XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1ldGFkYXRhIHN0cnVjdHVyZSBmb3IgQW5ndWxhciBjb21wb25lbnRzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgbWV0YWRhdGEgZm9yIEFuZ3VsYXIgY29tcG9uZW50cywgaW5jbHVkaW5nXG4gKiBjaGFuZ2UgZGV0ZWN0aW9uIHN0cmF0ZWd5LCBzZWxlY3Rvciwgc3RhbmRhbG9uZSBzdGF0dXMsIGltcG9ydHMsIHRlbXBsYXRlLCBhbmQgc3R5bGVzLlxuICogVGhpcyBpcyB1c2VkIGZvciByZWZsZWN0aW9uIGFuZCBkeW5hbWljIGNvbXBvbmVudCBjcmVhdGlvbi5cbiAqIEBpbnRlcmZhY2UgQ29tcG9uZW50TWV0YWRhdGFcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjaGFuZ2VEZXRlY3Rpb24gLSBUaGUgY2hhbmdlIGRldGVjdGlvbiBzdHJhdGVneSBudW1iZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZWxlY3RvciAtIFRoZSBDU1Mgc2VsZWN0b3IgZm9yIHRoZSBjb21wb25lbnRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3RhbmRhbG9uZSAtIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBzdGFuZGFsb25lXG4gKiBAcHJvcGVydHkgaW1wb3J0cyAtIEFycmF5IG9mIGltcG9ydGVkIG1vZHVsZXMvY29tcG9uZW50c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlIC0gVGhlIEhUTUwgdGVtcGxhdGUgZm9yIHRoZSBjb21wb25lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHN0eWxlcyAtIEFycmF5IG9mIENTUyBzdHlsZXMgZm9yIHRoZSBjb21wb25lbnRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50TWV0YWRhdGEge1xuICBjaGFuZ2VEZXRlY3Rpb246IG51bWJlcjtcbiAgc2VsZWN0b3I6IHN0cmluZztcbiAgc3RhbmRhbG9uZTogYm9vbGVhbjtcbiAgaW1wb3J0czogKG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duKVtdO1xuICB0ZW1wbGF0ZTogc3RyaW5nO1xuICBzdHlsZXM6IHN0cmluZ1tdO1xufVxuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE91dHB1dCBzdHJ1Y3R1cmUgZnJvbSB0aGUgQW5ndWxhciByZW5kZXJpbmcgZW5naW5lXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG91dHB1dCBwcm9kdWNlZCBieSB0aGUgTmd4UmVuZGVyaW5nRW5naW5lXG4gKiB3aGVuIHJlbmRlcmluZyBhIGNvbXBvbmVudC4gQ29udGFpbnMgdGhlIGNvbXBvbmVudCB0eXBlLCBpbnB1dHMsIGluamVjdG9yLFxuICogY29udGVudCBub2RlcywgYW5kIGNoaWxkIGNvbXBvbmVudHMuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBbmd1bGFyRHluYW1pY091dHB1dFxuICogQHByb3BlcnR5IHtUeXBlPHVua25vd24+fSBjb21wb25lbnQgLSBUaGUgQW5ndWxhciBjb21wb25lbnQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZW5kZXJlcklkXSAtIE9wdGlvbmFsIHVuaXF1ZSBJRCBmb3IgdGhlIHJlbmRlcmVkIGNvbXBvbmVudFxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gW2lucHV0c10gLSBPcHRpb25hbCBpbnB1dCBwcm9wZXJ0aWVzIGZvciB0aGUgY29tcG9uZW50XG4gKiBAcHJvcGVydHkge0luamVjdG9yfSBbaW5qZWN0b3JdIC0gT3B0aW9uYWwgQW5ndWxhciBpbmplY3RvciBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAqIEBwcm9wZXJ0eSB7Tm9kZVtdW119IFtjb250ZW50XSAtIE9wdGlvbmFsIGNvbnRlbnQgbm9kZXMgZm9yIHByb2plY3Rpb25cbiAqIEBwcm9wZXJ0eSB7QW5ndWxhckR5bmFtaWNPdXRwdXRbXX0gW2NoaWxkcmVuXSAtIE9wdGlvbmFsIGNoaWxkIGNvbXBvbmVudHNcbiAqIEBwcm9wZXJ0eSB7VHlwZTx1bmtub3duPn0gW2luc3RhbmNlXSAtIE9wdGlvbmFsIGNvbXBvbmVudCBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtGb3JtR3JvdXB9IFtmb3JtR3JvdXBdIC0gT3B0aW9uYWwgY29tcG9uZW50IEZvcm1Hcm91cFxuICogQHByb3BlcnR5IHtGb3JtQ29udHJvbH0gW2Zvcm1Db250cm9sXSAtIE9wdGlvbmFsIGNvbXBvbmVudCBGb3JtQ29udHJvbFxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbmd1bGFyRHluYW1pY091dHB1dCB7XG4gIGNvbXBvbmVudD86IFR5cGU8dW5rbm93bj47XG4gIHJlbmRlcmVySWQ/OiBzdHJpbmc7XG4gIGlucHV0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpbmplY3Rvcj86IEluamVjdG9yO1xuICBjb250ZW50PzogTm9kZVtdW107XG4gIGNoaWxkcmVuPzogQW5ndWxhckR5bmFtaWNPdXRwdXRbXTtcbiAgaW5zdGFuY2U/OiBUeXBlPHVua25vd24+O1xuICBmb3JtR3JvdXA/OiBGb3JtR3JvdXA7XG4gIGZvcm1Db250cm9sPzogRm9ybUNvbnRyb2w7XG59XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzZSBvcHRpb24gdHlwZSBmb3IgaW5wdXQgY29tcG9uZW50c1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgY29tbW9uIHN0cnVjdHVyZSBmb3Igb3B0aW9ucyB1c2VkIGluIHNlbGVjdCwgcmFkaW8sIGFuZCBjaGVja2JveCBpbnB1dHMuXG4gKiBDb250YWlucyBwcm9wZXJ0aWVzIGZvciB0aGUgZGlzcGxheSB0ZXh0LCB2YWx1ZSwgZGlzYWJsZWQgc3RhdGUsIENTUyBjbGFzcywgYW5kIGljb24uXG4gKiBAaW50ZXJmYWNlIElucHV0T3B0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGV4dCAtIFRoZSBkaXNwbGF5IHRleHQgZm9yIHRoZSBvcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bWJlcn0gdmFsdWUgLSBUaGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcHRpb25cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nT3JCb29sZWFufSBbZGlzYWJsZWRdIC0gV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NsYXNzTmFtZV0gLSBDU1MgY2xhc3MgbmFtZSBmb3Igc3R5bGluZyB0aGUgb3B0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ljb25dIC0gSWNvbiB0byBkaXNwbGF5IHdpdGggdGhlIG9wdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnB1dE9wdGlvbiB7XG4gIHRleHQ6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgZGlzYWJsZWQ/OiBTdHJpbmdPckJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBsaXN0IGNvbXBvbmVudCByZWZyZXNoIGV2ZW50c1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIG9mIGEgcmVmcmVzaCBldmVudCBmb3IgbGlzdCBjb21wb25lbnRzLlxuICogQ29udGFpbnMgYW4gYXJyYXkgb2Yga2V5LXZhbHVlIHBhaXJzIHJlcHJlc2VudGluZyB0aGUgbmV3IGRhdGEgZm9yIHRoZSBsaXN0LlxuICogQGludGVyZmFjZSBJTGlzdENvbXBvbmVudFJlZnJlc2hFdmVudFxuICogQHByb3BlcnR5IHtLZXlWYWx1ZVtdfSBkYXRhIC0gQXJyYXkgb2Yga2V5LXZhbHVlIHBhaXJzIHJlcHJlc2VudGluZyB0aGUgbmV3IGRhdGFcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxpc3RDb21wb25lbnRSZWZyZXNoRXZlbnQge1xuICBkYXRhOiBLZXlWYWx1ZVtdO1xufVxuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZvcm0gc2VydmljZSBjb250cm9sIHN0cnVjdHVyZVxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIGZvciBhIGZvcm0gY29udHJvbCBtYW5hZ2VkIGJ5IHRoZSBmb3JtIHNlcnZpY2UuXG4gKiBDb250YWlucyB0aGUgRm9ybUdyb3VwIGNvbnRyb2wgYW5kIHRoZSBhc3NvY2lhdGVkIGZpZWxkIHByb3BlcnRpZXMgZm9yIHJlbmRlcmluZy5cbiAqIEBpbnRlcmZhY2UgRm9ybVNlcnZpY2VDb250cm9sXG4gKiBAcHJvcGVydHkge0Zvcm1Hcm91cH0gY29udHJvbCAtIFRoZSBBbmd1bGFyIEZvcm1Hcm91cCBmb3IgdGhlIGNvbnRyb2xcbiAqIEBwcm9wZXJ0eSB7QW5ndWxhckZpZWxkRGVmaW5pdGlvbn0gcHJvcHMgLSBUaGUgZmllbGQgcHJvcGVydGllcyBmb3IgcmVuZGVyaW5nIHRoZSBjb250cm9sXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1TZXJ2aWNlQ29udHJvbCB7XG4gIGNvbnRyb2w6IEZvcm1Hcm91cDtcbiAgcHJvcHM6IEFuZ3VsYXJGaWVsZERlZmluaXRpb247XG59XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBsaXN0IGl0ZW0gY3VzdG9tIGV2ZW50c1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIG9mIGN1c3RvbSBldmVudHMgdHJpZ2dlcmVkIGJ5IGxpc3QgaXRlbXMuXG4gKiBFeHRlbmRzIEJhc2VDdXN0b21FdmVudCB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgdGhlIGFjdGlvbiBhbmQgcHJpbWFyeSBrZXkuXG4gKiBAaW50ZXJmYWNlIExpc3RJdGVtQ3VzdG9tRXZlbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb24gLSBUaGUgYWN0aW9uIHBlcmZvcm1lZCBvbiB0aGUgbGlzdCBpdGVtXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BrXSAtIE9wdGlvbmFsIHByaW1hcnkga2V5IG9mIHRoZSBhZmZlY3RlZCBpdGVtXG4gKiBAcHJvcGVydHkge2FueX0gZGF0YSAtIFRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgKGluaGVyaXRlZCBmcm9tIEJhc2VDdXN0b21FdmVudClcbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IFt0YXJnZXRdIC0gVGhlIHRhcmdldCBlbGVtZW50IChpbmhlcml0ZWQgZnJvbSBCYXNlQ3VzdG9tRXZlbnQpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50IChpbmhlcml0ZWQgZnJvbSBCYXNlQ3VzdG9tRXZlbnQpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQgKGluaGVyaXRlZCBmcm9tIEJhc2VDdXN0b21FdmVudClcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEl0ZW1DdXN0b21FdmVudCBleHRlbmRzIEJhc2VDdXN0b21FdmVudCB7XG4gIGFjdGlvbjogc3RyaW5nO1xuICBwaz86IHN0cmluZztcbn1cblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlIGludGVyZmFjZSBmb3IgY3VzdG9tIGV2ZW50c1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgYmFzZSBzdHJ1Y3R1cmUgZm9yIGN1c3RvbSBldmVudHMgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICogQ29udGFpbnMgcHJvcGVydGllcyBmb3IgdGhlIGV2ZW50IGRhdGEsIHRhcmdldCBlbGVtZW50LCBuYW1lLCBhbmQgY29tcG9uZW50LlxuICogQGludGVyZmFjZSBCYXNlQ3VzdG9tRXZlbnRcbiAqIEBwcm9wZXJ0eSB7YW55fSBkYXRhIC0gVGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudFxuICogQHByb3BlcnR5IHtIVE1MRWxlbWVudH0gW3RhcmdldF0gLSBUaGUgdGFyZ2V0IGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUN1c3RvbUV2ZW50IHtcbiAgbmFtZTogc3RyaW5nO1xuICBjb21wb25lbnQ6IHN0cmluZztcbiAgZGF0YT86IHVua25vd247XG4gIHRhcmdldD86IEhUTUxFbGVtZW50O1xufVxuXG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24gKGkxOG4pIHJlc291cmNlIGZpbGUgcGF0aHMuXG4gKlxuICogQHByb3BlcnR5IHByZWZpeCAtIFRoZSBwcmVmaXggdG8gYmUgdXNlZCBmb3IgdGhlIHJlc291cmNlIGZpbGUgcGF0aC5cbiAqIEBwcm9wZXJ0eSBzdWZmaXggLSBUaGUgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIHRoZSByZXNvdXJjZSBmaWxlIHBhdGguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSTE4blJlc291cmNlQ29uZmlnIHsgcHJlZml4OiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nIH1cbiJdfQ==
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUZDLENBQUM7QUFjRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRWxlbWVudFJlZiwgRW52aXJvbm1lbnRJbmplY3RvciwgSW5qZWN0b3IsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9yZGVyRGlyZWN0aW9uIH0gZnJvbSAnQGRlY2FmLXRzL2NvcmUnO1xuaW1wb3J0IHsgQW5ndWxhckZpZWxkRGVmaW5pdGlvbiwgRmllbGRVcGRhdGVNb2RlLCBLZXlWYWx1ZSwgU3RyaW5nT3JCb29sZWFuIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBGaWVsZFByb3BlcnRpZXMgfSBmcm9tICdAZGVjYWYtdHMvdWktZGVjb3JhdG9ycyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEludGVyZmFjZSBmb3IgY29tcG9uZW50cyB0aGF0IGhvbGQgYW4gRWxlbWVudFJlZlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGNvbXBvbmVudCBob2xkZXIgaW50ZXJmYWNlIHRoYXQgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIERPTSBlbGVtZW50IHRocm91Z2ggRWxlbWVudFJlZlxuICogQGludGVyZmFjZSBJQ29tcG9uZW50SG9sZGVyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb21wb25lbnRIb2xkZXIge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50J3MgRE9NIGVsZW1lbnRcbiAgICogQHByb3BlcnR5IHtFbGVtZW50UmVmfSBjb21wb25lbnQgLSBUaGUgRWxlbWVudFJlZiBpbnN0YW5jZSBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBuYXRpdmUgRE9NIGVsZW1lbnRcbiAgICovXG4gIGNvbXBvbmVudDogRWxlbWVudFJlZjtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBmb3JtIGNvbXBvbmVudHMgdGhhdCBob2xkIGJvdGggYW4gRWxlbWVudFJlZiBhbmQgYSBGb3JtR3JvdXBcbiAqIEBzdW1tYXJ5IEV4dGVuZHMgSUNvbXBvbmVudEhvbGRlciB0byBpbmNsdWRlIGEgRm9ybUdyb3VwIGZvciBmb3JtIGhhbmRsaW5nIGNhcGFiaWxpdGllc1xuICogQGludGVyZmFjZSBJRm9ybUVsZW1lbnRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1FbGVtZW50IGV4dGVuZHMgSUNvbXBvbmVudEhvbGRlciB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIEFuZ3VsYXIgRm9ybUdyb3VwIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZvcm0gZWxlbWVudFxuICAgKiBAcHJvcGVydHkge0Zvcm1Hcm91cHx1bmRlZmluZWR9IGZvcm1Hcm91cCAtIFRoZSBmb3JtIGdyb3VwIGluc3RhbmNlIGZvciBtYW5hZ2luZyBmb3JtIGNvbnRyb2xzIGFuZCB2YWxpZGF0aW9uXG4gICAqL1xuICBmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcbn1cblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIGZpZWxkc2V0IGl0ZW0gcmVwcmVzZW50YXRpb24gaW4gdGhlIFVJLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIGZvciBpdGVtcyBkaXNwbGF5ZWQgaW4gdGhlIHJlb3JkZXJhYmxlIGxpc3Qgd2l0aGluIHRoZSBmaWVsZHNldC5cbiAqIEVhY2ggaXRlbSByZXByZXNlbnRzIGEgdmFsdWUgYWRkZWQgdG8gdGhlIGZpZWxkc2V0IHdpdGggZGlzcGxheSBwcm9wZXJ0aWVzIGZvciB0aGUgVUkuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaWVsZFNldEl0ZW0ge1xuICAvKiogQGRlc2NyaXB0aW9uIFNlcXVlbnRpYWwgaW5kZXggbnVtYmVyIGZvciBvcmRlcmluZyBpdGVtcyBpbiB0aGUgbGlzdCAqL1xuICBpbmRleDogbnVtYmVyO1xuICAvKiogQGRlc2NyaXB0aW9uIFByaW1hcnkgZGlzcGxheSB0ZXh0IGZvciB0aGUgaXRlbSAqL1xuICB0aXRsZTogc3RyaW5nO1xuICAvKiogQGRlc2NyaXB0aW9uIE9wdGlvbmFsIHNlY29uZGFyeSB0ZXh0IHByb3ZpZGluZyBhZGRpdGlvbmFsIGl0ZW0gZGV0YWlscyAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBmaWVsZHNldCB2YWxpZGF0aW9uIGV2ZW50IGRhdGEuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdmFsaWRhdGlvbiBldmVudHMgZW1pdHRlZCB3aGVuIGZvcm0gdmFsaWRhdGlvbiBvY2N1cnMuXG4gKiBVc2VkIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gZm9ybSBjb21wb25lbnRzIGFuZCB0aGUgZmllbGRzZXQgY29udGFpbmVyLlxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRmllbGRTZXRWYWxpZGF0aW9uRXZlbnQge1xuICAvKiogQGRlc2NyaXB0aW9uIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGUgdmFsaWRhdGVkIGZvcm0gY29udHJvbHMgKi9cbiAgZm9ybUdyb3VwOiAgRm9ybUFycmF5IHwgRm9ybUdyb3VwO1xuICAvKiogQGRlc2NyaXB0aW9uIFRoZSBjdXJyZW50IGZvcm0gdmFsdWUgYmVpbmcgdmFsaWRhdGVkICovXG4gIHZhbHVlOiB1bmtub3duO1xuICAvKiogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdGhlIGZvcm0gdmFsaWRhdGlvbiBwYXNzZWQgb3IgZmFpbGVkICovXG4gIGlzVmFsaWQ6IGJvb2xlYW47XG59XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBpbmRpdmlkdWFsIGZpbHRlciBxdWVyeSBpdGVtc1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIG9mIGEgc2luZ2xlIGZpbHRlciBjcml0ZXJpb24gaW4gYSBmaWx0ZXIgcXVlcnkuXG4gKiBFYWNoIGl0ZW0gcmVwcmVzZW50cyBvbmUgY29uZGl0aW9uIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGRhdGEsIGNvbnNpc3Rpbmcgb2ZcbiAqIGFuIGluZGV4IChmaWVsZCBuYW1lKSwgYSBjb25kaXRpb24gKGNvbXBhcmlzb24gb3BlcmF0b3IpLCBhbmQgYSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAaW50ZXJmYWNlIElGaWx0ZXJRdWVyeUl0ZW1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaW5kZXhdIC0gT3B0aW9uYWwgZmllbGQgbmFtZSBvciBpbmRleCB0byBmaWx0ZXIgb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29uZGl0aW9uXSAtIE9wdGlvbmFsIGNvbXBhcmlzb24gY29uZGl0aW9uIChlLmcuLCAnRXF1YWwnLCAnQ29udGFpbnMnLCAnR3JlYXRlciBUaGFuJylcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdmFsdWVdIC0gT3B0aW9uYWwgdmFsdWUgdG8gY29tcGFyZSB0aGUgZmllbGQgYWdhaW5zdFxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRmlsdGVyUXVlcnlJdGVtIHtcbiAgaW5kZXg/OiBzdHJpbmcsXG4gIGNvbmRpdGlvbj86IHN0cmluZyxcbiAgdmFsdWU/OiBzdHJpbmdcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEludGVyZmFjZSBmb3Igc29ydGluZyBjb25maWd1cmF0aW9uIG9iamVjdHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBmb3Igc3BlY2lmeWluZyBzb3J0IGNyaXRlcmlhIGluY2x1ZGluZyB0aGUgZmllbGRcbiAqIHRvIHNvcnQgYnkgYW5kIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNvcnQgKGFzY2VuZGluZyBvciBkZXNjZW5kaW5nKS5cbiAqIEBpbnRlcmZhY2UgSVNvcnRPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSBmaWVsZCBuYW1lIG9yIHByb3BlcnR5IHRvIHNvcnQgYnlcbiAqIEBwcm9wZXJ0eSB7T3JkZXJEaXJlY3Rpb259IGRpcmVjdGlvbiAtIFRoZSBzb3J0IGRpcmVjdGlvbiAoQVNDIG9yIERTQylcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNvcnRPYmplY3Qge1xuICB2YWx1ZTogc3RyaW5nLFxuICBkaXJlY3Rpb246IE9yZGVyRGlyZWN0aW9uXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIGNvbXBsZXRlIGZpbHRlciBxdWVyeSBjb25maWd1cmF0aW9uXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBjb21wbGV0ZSBzdHJ1Y3R1cmUgZm9yIGZpbHRlciBhbmQgc29ydCBvcGVyYXRpb25zLlxuICogQ29tYmluZXMgbXVsdGlwbGUgZmlsdGVyIGNyaXRlcmlhIHdpdGggc29ydGluZyBjb25maWd1cmF0aW9uIHRvIHByb3ZpZGVcbiAqIGNvbXByZWhlbnNpdmUgZGF0YSBmaWx0ZXJpbmcgYW5kIG9yZGVyaW5nIGNhcGFiaWxpdGllcy5cbiAqIEBpbnRlcmZhY2UgSUZpbHRlclF1ZXJ5XG4gKiBAcHJvcGVydHkge0lGaWx0ZXJRdWVyeUl0ZW1bXSB8IHVuZGVmaW5lZH0gcXVlcnkgLSBBcnJheSBvZiBmaWx0ZXIgY3JpdGVyaWEgb3IgdW5kZWZpbmVkIGZvciBubyBmaWx0ZXJpbmdcbiAqIEBwcm9wZXJ0eSB7SVNvcnRPYmplY3R9IHNvcnQgLSBTb3J0aW5nIGNvbmZpZ3VyYXRpb24gc3BlY2lmeWluZyBmaWVsZCBhbmQgZGlyZWN0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaWx0ZXJRdWVyeSB7XG4gIHF1ZXJ5OiBJRmlsdGVyUXVlcnlJdGVtW10gfCB1bmRlZmluZWQsXG4gIHNvcnQ6IElTb3J0T2JqZWN0XG59XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50IGlucHV0IHByb3BlcnRpZXNcbiAqIEBzdW1tYXJ5IEV4dGVuZHMgRmllbGRQcm9wZXJ0aWVzIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHNwZWNpZmljIHRvIEFuZ3VsYXIgY29tcG9uZW50cy5cbiAqIEluY2x1ZGVzIHVwZGF0ZSBtb2RlIGZvciBmb3JtIGNvbnRyb2xzIGFuZCBvcHRpb25hbCBGb3JtR3JvdXAgYW5kIEZvcm1Db250cm9sIHJlZmVyZW5jZXMuXG4gKiBAaW50ZXJmYWNlIElDb21wb25lbnRJbnB1dFxuICogQHByb3BlcnR5IHtGaWVsZFVwZGF0ZU1vZGV9IFt1cGRhdGVNb2RlXSAtIFdoZW4gdGhlIGZpZWxkIHZhbHVlIHNob3VsZCBiZSB1cGRhdGVkXG4gKiBAcHJvcGVydHkge0Zvcm1Hcm91cH0gW2Zvcm1Hcm91cF0gLSBPcHRpb25hbCBGb3JtR3JvdXAgcmVmZXJlbmNlXG4gKiBAcHJvcGVydHkge0Zvcm1Db250cm9sfSBbZm9ybUNvbnRyb2xdIC0gT3B0aW9uYWwgRm9ybUNvbnRyb2wgcmVmZXJlbmNlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb21wb25lbnRJbnB1dCBleHRlbmRzIEZpZWxkUHJvcGVydGllcyB7XG4gIHVwZGF0ZU1vZGU/OiBGaWVsZFVwZGF0ZU1vZGU7XG4gIGZvcm1Hcm91cD86IEZvcm1Hcm91cDtcbiAgZm9ybUNvbnRyb2w/OiBGb3JtQ29udHJvbDtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBjb25maWd1cmF0aW9uIGZvciBkeW5hbWljYWxseSBjcmVhdGluZyBBbmd1bGFyIGNvbXBvbmVudHMuXG4gKiBDb250YWlucyB0aGUgY29tcG9uZW50IG5hbWUsIGlucHV0IHByb3BlcnRpZXMsIGluamVjdG9yLCBhbmQgb3B0aW9uYWwgY2hpbGQgY29tcG9uZW50cy5cbiAqIEBpbnRlcmZhY2UgSUNvbXBvbmVudENvbmZpZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbXBvbmVudCAtIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQgdG8gcmVuZGVyXG4gKiBAcHJvcGVydHkge0lDb21wb25lbnRJbnB1dH0gaW5wdXRzIC0gVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoZSBjb21wb25lbnRcbiAqIEBwcm9wZXJ0eSB7RW52aXJvbm1lbnRJbmplY3RvciB8IEluamVjdG9yfSBpbmplY3RvciAtIFRoZSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICogQHByb3BlcnR5IHtJQ29tcG9uZW50Q29uZmlnW119IFtjaGlsZHJlbl0gLSBPcHRpb25hbCBjaGlsZCBjb21wb25lbnQgY29uZmlndXJhdGlvbnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBvbmVudENvbmZpZyB7XG4gIGNvbXBvbmVudDogc3RyaW5nO1xuICBpbnB1dHM6IElDb21wb25lbnRJbnB1dDtcbiAgaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IgfCBJbmplY3RvcjtcbiAgY2hpbGRyZW4/OiBJQ29tcG9uZW50Q29uZmlnW107XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1ldGFkYXRhIHN0cnVjdHVyZSBmb3IgQW5ndWxhciBjb21wb25lbnRzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgbWV0YWRhdGEgZm9yIEFuZ3VsYXIgY29tcG9uZW50cywgaW5jbHVkaW5nXG4gKiBjaGFuZ2UgZGV0ZWN0aW9uIHN0cmF0ZWd5LCBzZWxlY3Rvciwgc3RhbmRhbG9uZSBzdGF0dXMsIGltcG9ydHMsIHRlbXBsYXRlLCBhbmQgc3R5bGVzLlxuICogVGhpcyBpcyB1c2VkIGZvciByZWZsZWN0aW9uIGFuZCBkeW5hbWljIGNvbXBvbmVudCBjcmVhdGlvbi5cbiAqIEBpbnRlcmZhY2UgQ29tcG9uZW50TWV0YWRhdGFcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjaGFuZ2VEZXRlY3Rpb24gLSBUaGUgY2hhbmdlIGRldGVjdGlvbiBzdHJhdGVneSBudW1iZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZWxlY3RvciAtIFRoZSBDU1Mgc2VsZWN0b3IgZm9yIHRoZSBjb21wb25lbnRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3RhbmRhbG9uZSAtIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBzdGFuZGFsb25lXG4gKiBAcHJvcGVydHkgaW1wb3J0cyAtIEFycmF5IG9mIGltcG9ydGVkIG1vZHVsZXMvY29tcG9uZW50c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlIC0gVGhlIEhUTUwgdGVtcGxhdGUgZm9yIHRoZSBjb21wb25lbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHN0eWxlcyAtIEFycmF5IG9mIENTUyBzdHlsZXMgZm9yIHRoZSBjb21wb25lbnRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50TWV0YWRhdGEge1xuICBjaGFuZ2VEZXRlY3Rpb246IG51bWJlcjtcbiAgc2VsZWN0b3I6IHN0cmluZztcbiAgc3RhbmRhbG9uZTogYm9vbGVhbjtcbiAgaW1wb3J0czogKG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duKVtdO1xuICB0ZW1wbGF0ZTogc3RyaW5nO1xuICBzdHlsZXM6IHN0cmluZ1tdO1xufVxuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE91dHB1dCBzdHJ1Y3R1cmUgZnJvbSB0aGUgQW5ndWxhciByZW5kZXJpbmcgZW5naW5lXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG91dHB1dCBwcm9kdWNlZCBieSB0aGUgTmd4UmVuZGVyaW5nRW5naW5lXG4gKiB3aGVuIHJlbmRlcmluZyBhIGNvbXBvbmVudC4gQ29udGFpbnMgdGhlIGNvbXBvbmVudCB0eXBlLCBpbnB1dHMsIGluamVjdG9yLFxuICogY29udGVudCBub2RlcywgYW5kIGNoaWxkIGNvbXBvbmVudHMuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBbmd1bGFyRHluYW1pY091dHB1dFxuICogQHByb3BlcnR5IHtUeXBlPHVua25vd24+fSBjb21wb25lbnQgLSBUaGUgQW5ndWxhciBjb21wb25lbnQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZW5kZXJlcklkXSAtIE9wdGlvbmFsIHVuaXF1ZSBJRCBmb3IgdGhlIHJlbmRlcmVkIGNvbXBvbmVudFxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gW2lucHV0c10gLSBPcHRpb25hbCBpbnB1dCBwcm9wZXJ0aWVzIGZvciB0aGUgY29tcG9uZW50XG4gKiBAcHJvcGVydHkge0luamVjdG9yfSBbaW5qZWN0b3JdIC0gT3B0aW9uYWwgQW5ndWxhciBpbmplY3RvciBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAqIEBwcm9wZXJ0eSB7Tm9kZVtdW119IFtjb250ZW50XSAtIE9wdGlvbmFsIGNvbnRlbnQgbm9kZXMgZm9yIHByb2plY3Rpb25cbiAqIEBwcm9wZXJ0eSB7QW5ndWxhckR5bmFtaWNPdXRwdXRbXX0gW2NoaWxkcmVuXSAtIE9wdGlvbmFsIGNoaWxkIGNvbXBvbmVudHNcbiAqIEBwcm9wZXJ0eSB7VHlwZTx1bmtub3duPn0gW2luc3RhbmNlXSAtIE9wdGlvbmFsIGNvbXBvbmVudCBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtGb3JtR3JvdXB9IFtmb3JtR3JvdXBdIC0gT3B0aW9uYWwgY29tcG9uZW50IEZvcm1Hcm91cFxuICogQHByb3BlcnR5IHtGb3JtQ29udHJvbH0gW2Zvcm1Db250cm9sXSAtIE9wdGlvbmFsIGNvbXBvbmVudCBGb3JtQ29udHJvbFxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbmd1bGFyRHluYW1pY091dHB1dCB7XG4gIGNvbXBvbmVudD86IFR5cGU8dW5rbm93bj47XG4gIHJlbmRlcmVySWQ/OiBzdHJpbmc7XG4gIGlucHV0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpbmplY3Rvcj86IEluamVjdG9yO1xuICBjb250ZW50PzogTm9kZVtdW107XG4gIGNoaWxkcmVuPzogQW5ndWxhckR5bmFtaWNPdXRwdXRbXTtcbiAgaW5zdGFuY2U/OiBUeXBlPHVua25vd24+O1xuICBmb3JtR3JvdXA/OiBGb3JtR3JvdXA7XG4gIGZvcm1Db250cm9sPzogRm9ybUNvbnRyb2w7XG59XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzZSBvcHRpb24gdHlwZSBmb3IgaW5wdXQgY29tcG9uZW50c1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgY29tbW9uIHN0cnVjdHVyZSBmb3Igb3B0aW9ucyB1c2VkIGluIHNlbGVjdCwgcmFkaW8sIGFuZCBjaGVja2JveCBpbnB1dHMuXG4gKiBDb250YWlucyBwcm9wZXJ0aWVzIGZvciB0aGUgZGlzcGxheSB0ZXh0LCB2YWx1ZSwgZGlzYWJsZWQgc3RhdGUsIENTUyBjbGFzcywgYW5kIGljb24uXG4gKiBAaW50ZXJmYWNlIElucHV0T3B0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGV4dCAtIFRoZSBkaXNwbGF5IHRleHQgZm9yIHRoZSBvcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bWJlcn0gdmFsdWUgLSBUaGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcHRpb25cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nT3JCb29sZWFufSBbZGlzYWJsZWRdIC0gV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NsYXNzTmFtZV0gLSBDU1MgY2xhc3MgbmFtZSBmb3Igc3R5bGluZyB0aGUgb3B0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ljb25dIC0gSWNvbiB0byBkaXNwbGF5IHdpdGggdGhlIG9wdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnB1dE9wdGlvbiB7XG4gIHRleHQ6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgZGlzYWJsZWQ/OiBTdHJpbmdPckJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBsaXN0IGNvbXBvbmVudCByZWZyZXNoIGV2ZW50c1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIG9mIGEgcmVmcmVzaCBldmVudCBmb3IgbGlzdCBjb21wb25lbnRzLlxuICogQ29udGFpbnMgYW4gYXJyYXkgb2Yga2V5LXZhbHVlIHBhaXJzIHJlcHJlc2VudGluZyB0aGUgbmV3IGRhdGEgZm9yIHRoZSBsaXN0LlxuICogQGludGVyZmFjZSBJTGlzdENvbXBvbmVudFJlZnJlc2hFdmVudFxuICogQHByb3BlcnR5IHtLZXlWYWx1ZVtdfSBkYXRhIC0gQXJyYXkgb2Yga2V5LXZhbHVlIHBhaXJzIHJlcHJlc2VudGluZyB0aGUgbmV3IGRhdGFcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxpc3RDb21wb25lbnRSZWZyZXNoRXZlbnQge1xuICBkYXRhOiBLZXlWYWx1ZVtdO1xufVxuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZvcm0gc2VydmljZSBjb250cm9sIHN0cnVjdHVyZVxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIGZvciBhIGZvcm0gY29udHJvbCBtYW5hZ2VkIGJ5IHRoZSBmb3JtIHNlcnZpY2UuXG4gKiBDb250YWlucyB0aGUgRm9ybUdyb3VwIGNvbnRyb2wgYW5kIHRoZSBhc3NvY2lhdGVkIGZpZWxkIHByb3BlcnRpZXMgZm9yIHJlbmRlcmluZy5cbiAqIEBpbnRlcmZhY2UgRm9ybVNlcnZpY2VDb250cm9sXG4gKiBAcHJvcGVydHkge0Zvcm1Hcm91cH0gY29udHJvbCAtIFRoZSBBbmd1bGFyIEZvcm1Hcm91cCBmb3IgdGhlIGNvbnRyb2xcbiAqIEBwcm9wZXJ0eSB7QW5ndWxhckZpZWxkRGVmaW5pdGlvbn0gcHJvcHMgLSBUaGUgZmllbGQgcHJvcGVydGllcyBmb3IgcmVuZGVyaW5nIHRoZSBjb250cm9sXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1TZXJ2aWNlQ29udHJvbCB7XG4gIGNvbnRyb2w6IEZvcm1Hcm91cDtcbiAgcHJvcHM6IEFuZ3VsYXJGaWVsZERlZmluaXRpb247XG59XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBsaXN0IGl0ZW0gY3VzdG9tIGV2ZW50c1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIG9mIGN1c3RvbSBldmVudHMgdHJpZ2dlcmVkIGJ5IGxpc3QgaXRlbXMuXG4gKiBFeHRlbmRzIEJhc2VDdXN0b21FdmVudCB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgdGhlIGFjdGlvbiBhbmQgcHJpbWFyeSBrZXkuXG4gKiBAaW50ZXJmYWNlIExpc3RJdGVtQ3VzdG9tRXZlbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb24gLSBUaGUgYWN0aW9uIHBlcmZvcm1lZCBvbiB0aGUgbGlzdCBpdGVtXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BrXSAtIE9wdGlvbmFsIHByaW1hcnkga2V5IG9mIHRoZSBhZmZlY3RlZCBpdGVtXG4gKiBAcHJvcGVydHkge2FueX0gZGF0YSAtIFRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgKGluaGVyaXRlZCBmcm9tIEJhc2VDdXN0b21FdmVudClcbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IFt0YXJnZXRdIC0gVGhlIHRhcmdldCBlbGVtZW50IChpbmhlcml0ZWQgZnJvbSBCYXNlQ3VzdG9tRXZlbnQpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50IChpbmhlcml0ZWQgZnJvbSBCYXNlQ3VzdG9tRXZlbnQpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQgKGluaGVyaXRlZCBmcm9tIEJhc2VDdXN0b21FdmVudClcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEl0ZW1DdXN0b21FdmVudCBleHRlbmRzIEJhc2VDdXN0b21FdmVudCB7XG4gIGFjdGlvbjogc3RyaW5nO1xuICBwaz86IHN0cmluZztcbn1cblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlIGludGVyZmFjZSBmb3IgY3VzdG9tIGV2ZW50c1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgYmFzZSBzdHJ1Y3R1cmUgZm9yIGN1c3RvbSBldmVudHMgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICogQ29udGFpbnMgcHJvcGVydGllcyBmb3IgdGhlIGV2ZW50IGRhdGEsIHRhcmdldCBlbGVtZW50LCBuYW1lLCBhbmQgY29tcG9uZW50LlxuICogQGludGVyZmFjZSBCYXNlQ3VzdG9tRXZlbnRcbiAqIEBwcm9wZXJ0eSB7YW55fSBkYXRhIC0gVGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudFxuICogQHByb3BlcnR5IHtIVE1MRWxlbWVudH0gW3RhcmdldF0gLSBUaGUgdGFyZ2V0IGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUN1c3RvbUV2ZW50IHtcbiAgbmFtZTogc3RyaW5nO1xuICBjb21wb25lbnQ/OiBzdHJpbmc7XG4gIGRhdGE/OiB1bmtub3duO1xuICB0YXJnZXQ/OiBIVE1MRWxlbWVudDtcbn1cblxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGludGVybmF0aW9uYWxpemF0aW9uIChpMThuKSByZXNvdXJjZSBmaWxlIHBhdGhzLlxuICpcbiAqIEBwcm9wZXJ0eSBwcmVmaXggLSBUaGUgcHJlZml4IHRvIGJlIHVzZWQgZm9yIHRoZSByZXNvdXJjZSBmaWxlIHBhdGguXG4gKiBAcHJvcGVydHkgc3VmZml4IC0gVGhlIHN1ZmZpeCB0byBiZSBhcHBlbmRlZCB0byB0aGUgcmVzb3VyY2UgZmlsZSBwYXRoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEkxOG5SZXNvdXJjZUNvbmZpZyB7IHByZWZpeDogc3RyaW5nLCBzdWZmaXg6IHN0cmluZyB9XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW9uQ2hlY2tib3gsIElvbklucHV0LCBJb25TZWxlY3QsIElvblRleHRhcmVhIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgVGV4dEZpZWxkVHlwZXMgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCYXNlQ3VzdG9tRXZlbnQsIEZvcm1TZXJ2aWNlQ29udHJvbCwgSW5wdXRPcHRpb24gfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQWRhcHRlciwgUmVwb3NpdG9yeSB9IGZyb20gJ0BkZWNhZi10cy9jb3JlJztcbmltcG9ydCB7IENvbnRleHQsIFJlcG9zaXRvcnlGbGFncyB9IGZyb20gJ0BkZWNhZi10cy9kYi1kZWNvcmF0b3JzJztcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5cblxuZXhwb3J0IHR5cGUgSGFuZGxlckxpa2UgPSBSZWNvcmQ8c3RyaW5nLCAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPj5cblxuZXhwb3J0IGludGVyZmFjZSBSYXdRdWVyeTxNIGV4dGVuZHMgTW9kZWw+IHtcbiAgc2VsZWN0OiB1bmRlZmluZWQgfCAoa2V5b2YgTSlbXTtcbiAgZnJvbTogQ29uc3RydWN0b3I8TT47XG4gIHdoZXJlOiAoZWw6IE0pID0+IGJvb2xlYW47XG4gIHNvcnQ/OiAoZWw6IE0sIGVsMjogTSkgPT4gbnVtYmVyO1xuICBsaW1pdD86IG51bWJlcjtcbiAgc2tpcD86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRGVjYWZSZXBvc2l0b3J5QWRhcHRlcjxcbiAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyA9IFJlcG9zaXRvcnlGbGFncyxcbiAgQyBleHRlbmRzIENvbnRleHQ8Rj4gPSBDb250ZXh0PEY+XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4+ID0gQWRhcHRlcjxhbnksIGFueSwgUmF3UXVlcnk8YW55PiwgRiwgQz47XG5cbmV4cG9ydCB0eXBlIERlY2FmUmVwb3NpdG9yeTxNIGV4dGVuZHMgTW9kZWw+ID0gUmVwb3NpdG9yeTxcbiAgTSxcbiAgUmF3UXVlcnk8TT4sXG4gIERlY2FmUmVwb3NpdG9yeUFkYXB0ZXI8UmVwb3NpdG9yeUZsYWdzLCBDb250ZXh0PFJlcG9zaXRvcnlGbGFncz4+LFxuICBSZXBvc2l0b3J5RmxhZ3MsXG4gIENvbnRleHQ8UmVwb3NpdG9yeUZsYWdzPlxuPjtcblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5lcmljIGtleS12YWx1ZSBwYWlyIHR5cGVcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYSBnZW5lcmljIG9iamVjdCB3aXRoIHN0cmluZyBrZXlzIGFuZCBhbnkgdHlwZSBvZiB2YWx1ZXMuXG4gKiBUaGlzIGlzIGNvbW1vbmx5IHVzZWQgZm9yIGR5bmFtaWMgZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHRoZSBwcm9wZXJ0aWVzIGFyZSBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lLlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIGFueT59IEtleVZhbHVlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgS2V5VmFsdWUgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5lcmljIGZ1bmN0aW9uIHR5cGVcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgb2YgYW55IHR5cGVcbiAqIGFuZCByZXR1cm5zIGFueSB0eXBlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZGVmaW5pbmcgZnVuY3Rpb24gcGFyYW1ldGVycyBvciB2YXJpYWJsZXNcbiAqIHdoZXJlIHRoZSBleGFjdCBmdW5jdGlvbiBzaWduYXR1cmUgaXMgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZS5cbiAqIEB0eXBlZGVmIEZ1bmN0aW9uTGlrZVxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEZ1bmN0aW9uTGlrZSA9ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFbGVtZW50IHNpemUgb3B0aW9ucyBmb3IgVUkgY29tcG9uZW50c1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgcG9zc2libGUgc2l6ZSB2YWx1ZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBVSSBlbGVtZW50cy5cbiAqIFRoZXNlIHNpemVzIGNvbnRyb2wgdGhlIGRpbWVuc2lvbnMgYW5kIGxheW91dCBiZWhhdmlvciBvZiBjb21wb25lbnRzLlxuICogQHR5cGVkZWYgeygnc21hbGwnfCdtZWRpdW0nfCdsYXJnZSd8J3hsYXJnZSd8JzJ4bGFyZ2UnfCdhdXRvJ3wnZXhwYW5kJ3wnYmxvY2snKX0gRWxlbWVudFNpemVzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBFbGVtZW50U2l6ZXMgPVxuICB8ICdzbWFsbCdcbiAgfCAnbWVkaXVtJ1xuICB8ICdsYXJnZSdcbiAgfCAneGxhcmdlJ1xuICB8ICcyeGxhcmdlJ1xuICB8ICdhdXRvJ1xuICB8ICdleHBhbmQnXG4gIHwgJ2Jsb2NrJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzaWMgcG9zaXRpb24gb3B0aW9ucyBmb3IgVUkgZWxlbWVudHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHBvc3NpYmxlIHBvc2l0aW9uIHZhbHVlcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIFVJIGVsZW1lbnRzLlxuICogVGhlc2UgcG9zaXRpb25zIGNvbnRyb2wgdGhlIGFsaWdubWVudCBhbmQgcGxhY2VtZW50IG9mIGNvbXBvbmVudHMuXG4gKiBAdHlwZWRlZiB7KCdsZWZ0J3wnY2VudGVyJ3wncmlnaHQnfCd0b3AnfCdib3R0b20nKX0gRWxlbWVudFBvc2l0aW9uc1xuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgRWxlbWVudFBvc2l0aW9ucyA9ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEV4dGVuZGVkIHBvc2l0aW9uIG9wdGlvbnMgZm9yIGZsZXggbGF5b3V0c1xuICogQHN1bW1hcnkgRXh0ZW5kcyB0aGUgYmFzaWMgRWxlbWVudFBvc2l0aW9ucyB3aXRoIGFkZGl0aW9uYWwgZmxleC1zcGVjaWZpYyBwb3NpdGlvbiB2YWx1ZXMuXG4gKiBUaGVzZSBwb3NpdGlvbnMgYXJlIHVzZWQgZm9yIGNvbnRyb2xsaW5nIGFsaWdubWVudCBhbmQgZGlzdHJpYnV0aW9uIGluIGZsZXggY29udGFpbmVycy5cbiAqIEB0eXBlZGVmIHsoRWxlbWVudFBvc2l0aW9uc3wnc3RyZXRjaCd8J21pZGRsZSd8J2Fyb3VuZCd8J2JldHdlZW4nKX0gRmxleFBvc2l0aW9uc1xuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgRmxleFBvc2l0aW9ucyA9XG4gIHwgRWxlbWVudFBvc2l0aW9uc1xuICB8ICdzdHJldGNoJ1xuICB8ICdtaWRkbGUnXG4gIHwgJ2Fyb3VuZCdcbiAgfCAnYmV0d2Vlbic7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFVwZGF0ZSBtb2RlIG9wdGlvbnMgZm9yIGZvcm0gZmllbGRzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHdoZW4gZm9ybSBmaWVsZCB2YWx1ZXMgc2hvdWxkIGJlIHVwZGF0ZWQgaW4gdGhlIG1vZGVsLlxuICogLSAnY2hhbmdlJzogVXBkYXRlIG9uIGV2ZXJ5IGNoYW5nZSBldmVudFxuICogLSAnYmx1cic6IFVwZGF0ZSB3aGVuIHRoZSBmaWVsZCBsb3NlcyBmb2N1c1xuICogLSAnc3VibWl0JzogVXBkYXRlIG9ubHkgd2hlbiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWRcbiAqIEB0eXBlZGVmIHsoJ2NoYW5nZSd8J2JsdXInfCdzdWJtaXQnKX0gRmllbGRVcGRhdGVNb2RlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBGaWVsZFVwZGF0ZU1vZGUgPSAnY2hhbmdlJyB8ICdibHVyJyB8ICdzdWJtaXQnO1xuXG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBtb2RlbHMgdGhhdCBjYW4gYmUgcmVuZGVyZWRcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGJhc2ljIHN0cnVjdHVyZSBmb3IgbW9kZWxzIHRoYXQgY2FuIGJlIHJlbmRlcmVkIGJ5IHRoZSBlbmdpbmUuXG4gKiBDb250YWlucyBhbiBvcHRpb25hbCByZW5kZXJlcklkIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgcmVuZGVyZWQgaW5zdGFuY2UuXG4gKiBAaW50ZXJmYWNlIFJlbmRlcmVkTW9kZWxcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmVuZGVyZXJJZF0gLSBPcHRpb25hbCB1bmlxdWUgSUQgZm9yIHRoZSByZW5kZXJlZCBtb2RlbCBpbnN0YW5jZVxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJlZE1vZGVsIHtcbiAgcmVuZGVyZXJJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUG9zc2libGUgaW5wdXQgdHlwZXMgZm9yIGZvcm0gZmllbGRzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBwb3NzaWJsZSBpbnB1dCB0eXBlcyB0aGF0IGNhbiBiZSB1c2VkIGluIGZvcm0gZmllbGRzLlxuICogSW5jbHVkZXMgc3RhbmRhcmQgSFRNTCBpbnB1dCB0eXBlcyBsaWtlIGNoZWNrYm94LCByYWRpbywgYW5kIHNlbGVjdCxcbiAqIGFzIHdlbGwgYXMgSW9uaWMncyBUZXh0RmllbGRUeXBlcyBhbmQgdGV4dGFyZWEuXG4gKiBAdHlwZWRlZiB7KCdjaGVja2JveCd8J3JhZGlvJ3wnc2VsZWN0J3xUZXh0RmllbGRUeXBlc3wndGV4dGFyZWEnKX0gUG9zc2libGVJbnB1dFR5cGVzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBQb3NzaWJsZUlucHV0VHlwZXMgPVxuICB8ICdjaGVja2JveCdcbiAgfCAncmFkaW8nXG4gIHwgJ3NlbGVjdCdcbiAgfCBUZXh0RmllbGRUeXBlc1xuICB8ICd0ZXh0YXJlYSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZpZWxkIGRlZmluaXRpb24gZm9yIEFuZ3VsYXIgY29tcG9uZW50c1xuICogQHN1bW1hcnkgQSBjb21wcmVoZW5zaXZlIHR5cGUgdGhhdCBjb21iaW5lcyBwcm9wZXJ0aWVzIGZyb20gdmFyaW91cyBJb25pYyBjb21wb25lbnRzXG4gKiB0byBkZWZpbmUgdGhlIHN0cnVjdHVyZSBvZiBhIGZpZWxkIGluIGFuIEFuZ3VsYXIgZm9ybS4gSXQgb21pdHMgY2VydGFpbiBwcm9wZXJ0aWVzXG4gKiBmcm9tIElvbklucHV0LCBwaWNrcyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGZyb20gSW9uU2VsZWN0LCBJb25UZXh0YXJlYSwgYW5kIElvbkNoZWNrYm94LFxuICogYW5kIGFkZHMgY3VzdG9tIHByb3BlcnRpZXMgbGlrZSB0eXBlIGFuZCBjbGFzc05hbWUuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBbmd1bGFyRmllbGREZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge1Bvc3NpYmxlSW5wdXRUeXBlc30gdHlwZSAtIFRoZSB0eXBlIG9mIGlucHV0IGZpZWxkXG4gKiBAcHJvcGVydHkge3N0cmluZ3xzdHJpbmdbXX0gY2xhc3NOYW1lIC0gQ1NTIGNsYXNzIG5hbWUocykgZm9yIHRoZSBmaWVsZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjYW5jZWxUZXh0XSAtIFRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uIChmcm9tIElvblNlbGVjdClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaW50ZXJmYWNlXSAtIEludGVyZmFjZSBzdHlsZSBmb3Igc2VsZWN0IChmcm9tIElvblNlbGVjdClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2VsZWN0ZWRUZXh0XSAtIFRleHQgZm9yIHNlbGVjdGVkIG9wdGlvbiAoZnJvbSBJb25TZWxlY3QpXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2ludGVyZmFjZU9wdGlvbnNdIC0gT3B0aW9ucyBmb3IgdGhlIGludGVyZmFjZSAoZnJvbSBJb25TZWxlY3QpXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Jvd3NdIC0gTnVtYmVyIG9mIHJvd3MgZm9yIHRleHRhcmVhIChmcm9tIElvblRleHRhcmVhKVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtjb2xzXSAtIE51bWJlciBvZiBjb2x1bW5zIGZvciB0ZXh0YXJlYSAoZnJvbSBJb25UZXh0YXJlYSlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYWxpZ25tZW50XSAtIEFsaWdubWVudCBvZiBjaGVja2JveCAoZnJvbSBJb25DaGVja2JveClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbanVzdGlmeV0gLSBKdXN0aWZpY2F0aW9uIG9mIGNoZWNrYm94IChmcm9tIElvbkNoZWNrYm94KVxuICogQHByb3BlcnR5IHtib29sZWFufSBbY2hlY2tlZF0gLSBXaGV0aGVyIGNoZWNrYm94IGlzIGNoZWNrZWQgKGZyb20gSW9uQ2hlY2tib3gpXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBBbmd1bGFyRmllbGREZWZpbml0aW9uID0gT21pdDxcbiAgSW9uSW5wdXQsXG4gIHwgJ2lvbklucHV0J1xuICB8ICdpb25Gb2N1cydcbiAgfCAnaW9uQ2hhbmdlJ1xuICB8ICdpb25CbHVyJ1xuICB8ICdnZXRJbnB1dEVsZW1lbnQnXG4gIHwgJ3NldEZvY3VzJ1xuICB8ICdsYWJlbCdcbiAgfCAnZWwnXG4gIHwgJ3onXG4gIHwgJ3R5cGUnXG4+ICZcbiAgUGljazxcbiAgICBJb25TZWxlY3QsXG4gICAgJ2NhbmNlbFRleHQnIHwgJ2ludGVyZmFjZScgfCAnc2VsZWN0ZWRUZXh0JyB8ICdpbnRlcmZhY2VPcHRpb25zJ1xuICA+ICZcbiAgUGljazxJb25UZXh0YXJlYSwgJ3Jvd3MnIHwgJ2NvbHMnPiAmXG4gIFBpY2s8SW9uQ2hlY2tib3gsICdhbGlnbm1lbnQnIHwgJ2p1c3RpZnknIHwgJ2NoZWNrZWQnPiAmIHtcbiAgdHlwZTogUG9zc2libGVJbnB1dFR5cGVzO1xuICBjbGFzc05hbWU6IHN0cmluZyB8IHN0cmluZ1tdO1xufSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTdHJpbmcgb3IgYm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiBhIGJvb2xlYW4gdmFsdWVcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYSB2YWx1ZSB0aGF0IGNhbiBiZSBlaXRoZXIgYSBib29sZWFuIG9yIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgYm9vbGVhbi5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBoYW5kbGluZyBhdHRyaWJ1dGUgdmFsdWVzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBhcyBlaXRoZXIgc3RyaW5ncyBvciBib29sZWFucy5cbiAqIEB0eXBlZGVmIHsoJ3RydWUnfCdmYWxzZSd8Ym9vbGVhbil9IFN0cmluZ09yQm9vbGVhblxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgU3RyaW5nT3JCb29sZWFuID0gJ3RydWUnIHwgJ2ZhbHNlJyB8IGJvb2xlYW47XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gT3B0aW9uIHR5cGUgZm9yIENSVUQgZmllbGQgaW5wdXRzXG4gKiBAc3VtbWFyeSBSZXByZXNlbnRzIGEgdW5pb24gdHlwZSB0aGF0IGNhbiBiZSBlaXRoZXIgYSBTZWxlY3RPcHRpb24gb3IgUmFkaW9PcHRpb24uXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGRlZmluaW5nIG9wdGlvbnMgaW4gZm9ybSBmaWVsZHMgdGhhdCBzdXBwb3J0IGJvdGggc2VsZWN0IGFuZCByYWRpbyBpbnB1dCB0eXBlcy5cbiAqIEB0eXBlZGVmIHsoU2VsZWN0T3B0aW9ufFJhZGlvT3B0aW9uKX0gQ3J1ZEZpZWxkT3B0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBDcnVkRmllbGRPcHRpb24gPSBTZWxlY3RPcHRpb24gfCBSYWRpb09wdGlvbjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gT3B0aW9uIHR5cGUgZm9yIHNlbGVjdCBpbnB1dHNcbiAqIEBzdW1tYXJ5IEV4dGVuZHMgdGhlIElucHV0T3B0aW9uIGludGVyZmFjZSB3aXRoIGEgc2VsZWN0ZWQgcHJvcGVydHkgdG8gaW5kaWNhdGVcbiAqIHdoZXRoZXIgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZCBieSBkZWZhdWx0LlxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0T3B0aW9uID0gSW5wdXRPcHRpb24gJiB7IHNlbGVjdGVkPzogYm9vbGVhbiB9O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBPcHRpb24gdHlwZSBmb3IgcmFkaW8gaW5wdXRzXG4gKiBAc3VtbWFyeSBFeHRlbmRzIHRoZSBJbnB1dE9wdGlvbiBpbnRlcmZhY2Ugd2l0aCBhIGNoZWNrZWQgcHJvcGVydHkgdG8gaW5kaWNhdGVcbiAqIHdoZXRoZXIgdGhlIG9wdGlvbiBpcyBjaGVja2VkIGJ5IGRlZmF1bHQuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBSYWRpb09wdGlvbiA9IElucHV0T3B0aW9uICYgeyBjaGVja2VkPzogYm9vbGVhbiB9O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBPcHRpb24gdHlwZSBmb3IgY2hlY2tib3ggaW5wdXRzXG4gKiBAc3VtbWFyeSBBbGlhcyBmb3IgUmFkaW9PcHRpb24sIGFzIGNoZWNrYm94IG9wdGlvbnMgaGF2ZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgcmFkaW8gb3B0aW9ucy5cbiAqIEB0eXBlZGVmIHtSYWRpb09wdGlvbn0gQ2hlY2tib3hPcHRpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIENoZWNrYm94T3B0aW9uID0gUmFkaW9PcHRpb247XG5cblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUYXJnZXQgb3B0aW9ucyBmb3IgSFRNTCBmb3Jtc1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgcG9zc2libGUgdGFyZ2V0IHZhbHVlcyBmb3IgSFRNTCBmb3JtcywgaW5jbHVkaW5nIHN0YW5kYXJkIHRhcmdldHNcbiAqIGxpa2UgJ19ibGFuaycsICdfc2VsZicsICdfcGFyZW50JywgYW5kICdfdG9wJywgYXMgd2VsbCBhcyBjdXN0b20gc3RyaW5nIHZhbHVlcy5cbiAqIEB0eXBlZGVmIHsoJ19ibGFuayd8J19zZWxmJ3wnX3BhcmVudCd8J190b3AnfHN0cmluZyl9IEhUTUxGb3JtVGFyZ2V0XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBIVE1MRm9ybVRhcmdldCA9ICdfYmxhbmsnIHwgJ19zZWxmJyB8ICdfcGFyZW50JyB8ICdfdG9wJyB8IHN0cmluZztcblxuLy8gZXhwb3J0IGludGVyZmFjZSBJTGlzdEl0ZW1Qcm9wIHtcbi8vICAgcmVuZGVyPzogc3RyaW5nIHwgYm9vbGVhbjtcbi8vICAgdHJhbnNsYXRlUHJvcHM/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbi8vICAgYnV0dG9uPzogU3RyaW5nT3JCb29sZWFuO1xuLy8gICBpY29uPzogc3RyaW5nO1xuLy8gICBpY29uU2xvdD86ICdzdGFydCcgfCAnZW5kJztcbi8vICAgdGl0bGU/OiBzdHJpbmc7XG4vLyAgIGRlc2NyaXRwaW9uPzogc3RyaW5nO1xuLy8gICBpbmZvPzogc3RyaW5nO1xuLy8gICBzdWJpbmZvPzogc3RyaW5nO1xuLy8gfVxuXG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHlwZSBmb3IgZm9ybSBzZXJ2aWNlIGNvbnRyb2xzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgZm9ybSBjb250cm9scyBtYW5hZ2VkIGJ5IHRoZSBmb3JtIHNlcnZpY2UuXG4gKiBJdCdzIGEgbmVzdGVkIHJlY29yZCB3aGVyZSB0aGUgb3V0ZXIga2V5IGlzIHRoZSBmb3JtIGdyb3VwIG5hbWUsIHRoZSBpbm5lciBrZXlcbiAqIGlzIHRoZSBjb250cm9sIG5hbWUsIGFuZCB0aGUgdmFsdWUgY29udGFpbnMgdGhlIGZvcm0gZ3JvdXAgYW5kIGZpZWxkIHByb3BlcnRpZXMuXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgeyBjb250cm9sOiBGb3JtR3JvdXA7IHByb3BzOiBBbmd1bGFyRmllbGREZWZpbml0aW9uIH0+Pn0gRm9ybVNlcnZpY2VDb250cm9sc1xuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVNlcnZpY2VDb250cm9scyA9IFJlY29yZDxcbiAgc3RyaW5nLFxuICBSZWNvcmQ8c3RyaW5nLCBGb3JtU2VydmljZUNvbnRyb2w+XG4+O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZW5kZXJlciBjdXN0b20gZXZlbnQgdHlwZVxuICogQHN1bW1hcnkgQ29tYmluZXMgQmFzZUN1c3RvbUV2ZW50IHdpdGggS2V5VmFsdWUgcHJvcGVydGllcyB0byBjcmVhdGUgYSBmbGV4aWJsZVxuICogY3VzdG9tIGV2ZW50IHR5cGUgZm9yIHJlbmRlcmVyIGNvbXBvbmVudHMuIFRoaXMgYWxsb3dzIGV2ZW50cyB0byBjYXJyeSBib3RoXG4gKiBzdGFuZGFyZCBldmVudCBwcm9wZXJ0aWVzIGFuZCBhZGRpdGlvbmFsIGN1c3RvbSBkYXRhLlxuICogQHR5cGVkZWYgUmVuZGVyZXJDdXN0b21FdmVudFxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgUmVuZGVyZXJDdXN0b21FdmVudCA9IEJhc2VDdXN0b21FdmVudCAmIEtleVZhbHVlO1xuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENSVUQgZm9ybSBldmVudCB0eXBlXG4gKiBAc3VtbWFyeSBFeHRlbmRzIEJhc2VDdXN0b21FdmVudCB0byBpbmNsdWRlIG9wdGlvbmFsIGhhbmRsZXJzIGZvciBDUlVEIGZvcm0gb3BlcmF0aW9ucy5cbiAqIFRoaXMgZXZlbnQgdHlwZSBpcyB1c2VkIGZvciBmb3JtLXJlbGF0ZWQgYWN0aW9ucyBsaWtlIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQgZGVsZXRlIG9wZXJhdGlvbnMuXG4gKiBAdHlwZWRlZiBDcnVkRm9ybUV2ZW50XG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGFueT59IFtoYW5kbGVyc10gLSBPcHRpb25hbCBoYW5kbGVycyBmb3IgZm9ybSBvcGVyYXRpb25zXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBDcnVkRm9ybUV2ZW50ID0gQmFzZUN1c3RvbUV2ZW50ICYge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBoYW5kbGVycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZvcm0gcGFyZW50IGdyb3VwIHR1cGxlXG4gKiBAc3VtbWFyeSBSZXByZXNlbnRzIGEgdHVwbGUgY29udGFpbmluZyBhIEZvcm1Hcm91cCBhbmQgaXRzIGFzc29jaWF0ZWQgc3RyaW5nIGlkZW50aWZpZXIuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIG1hbmFnaW5nIGhpZXJhcmNoaWNhbCBmb3JtIHN0cnVjdHVyZXMgYW5kIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXBzLlxuICogQHR5cGVkZWYge1tGb3JtR3JvdXAsIHN0cmluZ119IEZvcm1QYXJlbnRHcm91cFxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVBhcmVudEdyb3VwID0gW0Zvcm1Hcm91cCwgIHN0cmluZ107XG5cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW9uQ2hlY2tib3gsIElvbklucHV0LCBJb25TZWxlY3QsIElvblRleHRhcmVhIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgVGV4dEZpZWxkVHlwZXMgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhc2VDdXN0b21FdmVudCwgRm9ybVNlcnZpY2VDb250cm9sLCBJbnB1dE9wdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBZGFwdGVyLCBSZXBvc2l0b3J5IH0gZnJvbSAnQGRlY2FmLXRzL2NvcmUnO1xuaW1wb3J0IHsgQ29udGV4dCwgUmVwb3NpdG9yeUZsYWdzIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSAnQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uJztcblxuXG5leHBvcnQgdHlwZSBIYW5kbGVyTGlrZSA9IFJlY29yZDxzdHJpbmcsICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+PlxuXG5leHBvcnQgaW50ZXJmYWNlIFJhd1F1ZXJ5PE0gZXh0ZW5kcyBNb2RlbD4ge1xuICBzZWxlY3Q6IHVuZGVmaW5lZCB8IChrZXlvZiBNKVtdO1xuICBmcm9tOiBDb25zdHJ1Y3RvcjxNPjtcbiAgd2hlcmU6IChlbDogTSkgPT4gYm9vbGVhbjtcbiAgc29ydD86IChlbDogTSwgZWwyOiBNKSA9PiBudW1iZXI7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBza2lwPzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBEZWNhZlJlcG9zaXRvcnlBZGFwdGVyPFxuICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzID0gUmVwb3NpdG9yeUZsYWdzLFxuICBDIGV4dGVuZHMgQ29udGV4dDxGPiA9IENvbnRleHQ8Rj5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbj4gPSBBZGFwdGVyPGFueSwgYW55LCBSYXdRdWVyeTxhbnk+LCBGLCBDPjtcblxuZXhwb3J0IHR5cGUgRGVjYWZSZXBvc2l0b3J5PE0gZXh0ZW5kcyBNb2RlbD4gPSBSZXBvc2l0b3J5PFxuICBNLFxuICBSYXdRdWVyeTxNPixcbiAgRGVjYWZSZXBvc2l0b3J5QWRhcHRlcjxSZXBvc2l0b3J5RmxhZ3MsIENvbnRleHQ8UmVwb3NpdG9yeUZsYWdzPj4sXG4gIFJlcG9zaXRvcnlGbGFncyxcbiAgQ29udGV4dDxSZXBvc2l0b3J5RmxhZ3M+XG4+O1xuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdlbmVyaWMga2V5LXZhbHVlIHBhaXIgdHlwZVxuICogQHN1bW1hcnkgUmVwcmVzZW50cyBhIGdlbmVyaWMgb2JqZWN0IHdpdGggc3RyaW5nIGtleXMgYW5kIGFueSB0eXBlIG9mIHZhbHVlcy5cbiAqIFRoaXMgaXMgY29tbW9ubHkgdXNlZCBmb3IgZHluYW1pYyBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdGhlIHByb3BlcnRpZXMgYXJlIG5vdCBrbm93biBhdCBjb21waWxlIHRpbWUuXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgYW55Pn0gS2V5VmFsdWVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBLZXlWYWx1ZSA9IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdlbmVyaWMgZnVuY3Rpb24gdHlwZVxuICogQHN1bW1hcnkgUmVwcmVzZW50cyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBvZiBhbnkgdHlwZVxuICogYW5kIHJldHVybnMgYW55IHR5cGUuIFRoaXMgaXMgdXNlZnVsIGZvciBkZWZpbmluZyBmdW5jdGlvbiBwYXJhbWV0ZXJzIG9yIHZhcmlhYmxlc1xuICogd2hlcmUgdGhlIGV4YWN0IGZ1bmN0aW9uIHNpZ25hdHVyZSBpcyBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lLlxuICogQHR5cGVkZWYgRnVuY3Rpb25MaWtlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgRnVuY3Rpb25MaWtlID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVsZW1lbnQgc2l6ZSBvcHRpb25zIGZvciBVSSBjb21wb25lbnRzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBwb3NzaWJsZSBzaXplIHZhbHVlcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIFVJIGVsZW1lbnRzLlxuICogVGhlc2Ugc2l6ZXMgY29udHJvbCB0aGUgZGltZW5zaW9ucyBhbmQgbGF5b3V0IGJlaGF2aW9yIG9mIGNvbXBvbmVudHMuXG4gKiBAdHlwZWRlZiB7KCdzbWFsbCd8J21lZGl1bSd8J2xhcmdlJ3wneGxhcmdlJ3wnMnhsYXJnZSd8J2F1dG8nfCdleHBhbmQnfCdibG9jaycpfSBFbGVtZW50U2l6ZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIEVsZW1lbnRTaXplcyA9XG4gIHwgJ3NtYWxsJ1xuICB8ICdtZWRpdW0nXG4gIHwgJ2xhcmdlJ1xuICB8ICd4bGFyZ2UnXG4gIHwgJzJ4bGFyZ2UnXG4gIHwgJ2F1dG8nXG4gIHwgJ2V4cGFuZCdcbiAgfCAnYmxvY2snO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNpYyBwb3NpdGlvbiBvcHRpb25zIGZvciBVSSBlbGVtZW50c1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgcG9zc2libGUgcG9zaXRpb24gdmFsdWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gVUkgZWxlbWVudHMuXG4gKiBUaGVzZSBwb3NpdGlvbnMgY29udHJvbCB0aGUgYWxpZ25tZW50IGFuZCBwbGFjZW1lbnQgb2YgY29tcG9uZW50cy5cbiAqIEB0eXBlZGVmIHsoJ2xlZnQnfCdjZW50ZXInfCdyaWdodCd8J3RvcCd8J2JvdHRvbScpfSBFbGVtZW50UG9zaXRpb25zXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBFbGVtZW50UG9zaXRpb25zID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnIHwgJ3RvcCcgfCAnYm90dG9tJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRXh0ZW5kZWQgcG9zaXRpb24gb3B0aW9ucyBmb3IgZmxleCBsYXlvdXRzXG4gKiBAc3VtbWFyeSBFeHRlbmRzIHRoZSBiYXNpYyBFbGVtZW50UG9zaXRpb25zIHdpdGggYWRkaXRpb25hbCBmbGV4LXNwZWNpZmljIHBvc2l0aW9uIHZhbHVlcy5cbiAqIFRoZXNlIHBvc2l0aW9ucyBhcmUgdXNlZCBmb3IgY29udHJvbGxpbmcgYWxpZ25tZW50IGFuZCBkaXN0cmlidXRpb24gaW4gZmxleCBjb250YWluZXJzLlxuICogQHR5cGVkZWYgeyhFbGVtZW50UG9zaXRpb25zfCdzdHJldGNoJ3wnbWlkZGxlJ3wnYXJvdW5kJ3wnYmV0d2VlbicpfSBGbGV4UG9zaXRpb25zXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBGbGV4UG9zaXRpb25zID1cbiAgfCBFbGVtZW50UG9zaXRpb25zXG4gIHwgJ3N0cmV0Y2gnXG4gIHwgJ21pZGRsZSdcbiAgfCAnYXJvdW5kJ1xuICB8ICdiZXR3ZWVuJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVXBkYXRlIG1vZGUgb3B0aW9ucyBmb3IgZm9ybSBmaWVsZHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgd2hlbiBmb3JtIGZpZWxkIHZhbHVlcyBzaG91bGQgYmUgdXBkYXRlZCBpbiB0aGUgbW9kZWwuXG4gKiAtICdjaGFuZ2UnOiBVcGRhdGUgb24gZXZlcnkgY2hhbmdlIGV2ZW50XG4gKiAtICdibHVyJzogVXBkYXRlIHdoZW4gdGhlIGZpZWxkIGxvc2VzIGZvY3VzXG4gKiAtICdzdWJtaXQnOiBVcGRhdGUgb25seSB3aGVuIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZFxuICogQHR5cGVkZWYgeygnY2hhbmdlJ3wnYmx1cid8J3N1Ym1pdCcpfSBGaWVsZFVwZGF0ZU1vZGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIEZpZWxkVXBkYXRlTW9kZSA9ICdjaGFuZ2UnIHwgJ2JsdXInIHwgJ3N1Ym1pdCc7XG5cblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIG1vZGVscyB0aGF0IGNhbiBiZSByZW5kZXJlZFxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgYmFzaWMgc3RydWN0dXJlIGZvciBtb2RlbHMgdGhhdCBjYW4gYmUgcmVuZGVyZWQgYnkgdGhlIGVuZ2luZS5cbiAqIENvbnRhaW5zIGFuIG9wdGlvbmFsIHJlbmRlcmVySWQgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSByZW5kZXJlZCBpbnN0YW5jZS5cbiAqIEBpbnRlcmZhY2UgUmVuZGVyZWRNb2RlbFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZW5kZXJlcklkXSAtIE9wdGlvbmFsIHVuaXF1ZSBJRCBmb3IgdGhlIHJlbmRlcmVkIG1vZGVsIGluc3RhbmNlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlcmVkTW9kZWwge1xuICByZW5kZXJlcklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQb3NzaWJsZSBpbnB1dCB0eXBlcyBmb3IgZm9ybSBmaWVsZHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHBvc3NpYmxlIGlucHV0IHR5cGVzIHRoYXQgY2FuIGJlIHVzZWQgaW4gZm9ybSBmaWVsZHMuXG4gKiBJbmNsdWRlcyBzdGFuZGFyZCBIVE1MIGlucHV0IHR5cGVzIGxpa2UgY2hlY2tib3gsIHJhZGlvLCBhbmQgc2VsZWN0LFxuICogYXMgd2VsbCBhcyBJb25pYydzIFRleHRGaWVsZFR5cGVzIGFuZCB0ZXh0YXJlYS5cbiAqIEB0eXBlZGVmIHsoJ2NoZWNrYm94J3wncmFkaW8nfCdzZWxlY3QnfFRleHRGaWVsZFR5cGVzfCd0ZXh0YXJlYScpfSBQb3NzaWJsZUlucHV0VHlwZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIFBvc3NpYmxlSW5wdXRUeXBlcyA9XG4gIHwgJ2NoZWNrYm94J1xuICB8ICdyYWRpbydcbiAgfCAnc2VsZWN0J1xuICB8IFRleHRGaWVsZFR5cGVzXG4gIHwgJ3RleHRhcmVhJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRmllbGQgZGVmaW5pdGlvbiBmb3IgQW5ndWxhciBjb21wb25lbnRzXG4gKiBAc3VtbWFyeSBBIGNvbXByZWhlbnNpdmUgdHlwZSB0aGF0IGNvbWJpbmVzIHByb3BlcnRpZXMgZnJvbSB2YXJpb3VzIElvbmljIGNvbXBvbmVudHNcbiAqIHRvIGRlZmluZSB0aGUgc3RydWN0dXJlIG9mIGEgZmllbGQgaW4gYW4gQW5ndWxhciBmb3JtLiBJdCBvbWl0cyBjZXJ0YWluIHByb3BlcnRpZXNcbiAqIGZyb20gSW9uSW5wdXQsIHBpY2tzIHNwZWNpZmljIHByb3BlcnRpZXMgZnJvbSBJb25TZWxlY3QsIElvblRleHRhcmVhLCBhbmQgSW9uQ2hlY2tib3gsXG4gKiBhbmQgYWRkcyBjdXN0b20gcHJvcGVydGllcyBsaWtlIHR5cGUgYW5kIGNsYXNzTmFtZS5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFuZ3VsYXJGaWVsZERlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7UG9zc2libGVJbnB1dFR5cGVzfSB0eXBlIC0gVGhlIHR5cGUgb2YgaW5wdXQgZmllbGRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHN0cmluZ1tdfSBjbGFzc05hbWUgLSBDU1MgY2xhc3MgbmFtZShzKSBmb3IgdGhlIGZpZWxkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NhbmNlbFRleHRdIC0gVGV4dCBmb3IgdGhlIGNhbmNlbCBidXR0b24gKGZyb20gSW9uU2VsZWN0KVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpbnRlcmZhY2VdIC0gSW50ZXJmYWNlIHN0eWxlIGZvciBzZWxlY3QgKGZyb20gSW9uU2VsZWN0KVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZWxlY3RlZFRleHRdIC0gVGV4dCBmb3Igc2VsZWN0ZWQgb3B0aW9uIChmcm9tIElvblNlbGVjdClcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbaW50ZXJmYWNlT3B0aW9uc10gLSBPcHRpb25zIGZvciB0aGUgaW50ZXJmYWNlIChmcm9tIElvblNlbGVjdClcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcm93c10gLSBOdW1iZXIgb2Ygcm93cyBmb3IgdGV4dGFyZWEgKGZyb20gSW9uVGV4dGFyZWEpXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2NvbHNdIC0gTnVtYmVyIG9mIGNvbHVtbnMgZm9yIHRleHRhcmVhIChmcm9tIElvblRleHRhcmVhKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFthbGlnbm1lbnRdIC0gQWxpZ25tZW50IG9mIGNoZWNrYm94IChmcm9tIElvbkNoZWNrYm94KVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtqdXN0aWZ5XSAtIEp1c3RpZmljYXRpb24gb2YgY2hlY2tib3ggKGZyb20gSW9uQ2hlY2tib3gpXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjaGVja2VkXSAtIFdoZXRoZXIgY2hlY2tib3ggaXMgY2hlY2tlZCAoZnJvbSBJb25DaGVja2JveClcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIEFuZ3VsYXJGaWVsZERlZmluaXRpb24gPSBPbWl0PFxuICBJb25JbnB1dCxcbiAgfCAnaW9uSW5wdXQnXG4gIHwgJ2lvbkZvY3VzJ1xuICB8ICdpb25DaGFuZ2UnXG4gIHwgJ2lvbkJsdXInXG4gIHwgJ2dldElucHV0RWxlbWVudCdcbiAgfCAnc2V0Rm9jdXMnXG4gIHwgJ2xhYmVsJ1xuICB8ICdlbCdcbiAgfCAneidcbiAgfCAndHlwZSdcbj4gJlxuICBQaWNrPFxuICAgIElvblNlbGVjdCxcbiAgICAnY2FuY2VsVGV4dCcgfCAnaW50ZXJmYWNlJyB8ICdzZWxlY3RlZFRleHQnIHwgJ2ludGVyZmFjZU9wdGlvbnMnXG4gID4gJlxuICBQaWNrPElvblRleHRhcmVhLCAncm93cycgfCAnY29scyc+ICZcbiAgUGljazxJb25DaGVja2JveCwgJ2FsaWdubWVudCcgfCAnanVzdGlmeScgfCAnY2hlY2tlZCc+ICYge1xuICB0eXBlOiBQb3NzaWJsZUlucHV0VHlwZXM7XG4gIGNsYXNzTmFtZTogc3RyaW5nIHwgc3RyaW5nW107XG59ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFN0cmluZyBvciBib29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIGEgYm9vbGVhbiB2YWx1ZVxuICogQHN1bW1hcnkgUmVwcmVzZW50cyBhIHZhbHVlIHRoYXQgY2FuIGJlIGVpdGhlciBhIGJvb2xlYW4gb3IgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBib29sZWFuLlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIGhhbmRsaW5nIGF0dHJpYnV0ZSB2YWx1ZXMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGFzIGVpdGhlciBzdHJpbmdzIG9yIGJvb2xlYW5zLlxuICogQHR5cGVkZWYgeygndHJ1ZSd8J2ZhbHNlJ3xib29sZWFuKX0gU3RyaW5nT3JCb29sZWFuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBTdHJpbmdPckJvb2xlYW4gPSAndHJ1ZScgfCAnZmFsc2UnIHwgYm9vbGVhbjtcblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBPcHRpb24gdHlwZSBmb3IgQ1JVRCBmaWVsZCBpbnB1dHNcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYSB1bmlvbiB0eXBlIHRoYXQgY2FuIGJlIGVpdGhlciBhIFNlbGVjdE9wdGlvbiBvciBSYWRpb09wdGlvbi5cbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmaW5pbmcgb3B0aW9ucyBpbiBmb3JtIGZpZWxkcyB0aGF0IHN1cHBvcnQgYm90aCBzZWxlY3QgYW5kIHJhZGlvIGlucHV0IHR5cGVzLlxuICogQHR5cGVkZWYgeyhTZWxlY3RPcHRpb258UmFkaW9PcHRpb24pfSBDcnVkRmllbGRPcHRpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIENydWRGaWVsZE9wdGlvbiA9IFNlbGVjdE9wdGlvbiB8IFJhZGlvT3B0aW9uO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBPcHRpb24gdHlwZSBmb3Igc2VsZWN0IGlucHV0c1xuICogQHN1bW1hcnkgRXh0ZW5kcyB0aGUgSW5wdXRPcHRpb24gaW50ZXJmYWNlIHdpdGggYSBzZWxlY3RlZCBwcm9wZXJ0eSB0byBpbmRpY2F0ZVxuICogd2hldGhlciB0aGUgb3B0aW9uIGlzIHNlbGVjdGVkIGJ5IGRlZmF1bHQuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBTZWxlY3RPcHRpb24gPSBJbnB1dE9wdGlvbiAmIHsgc2VsZWN0ZWQ/OiBib29sZWFuIH07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE9wdGlvbiB0eXBlIGZvciByYWRpbyBpbnB1dHNcbiAqIEBzdW1tYXJ5IEV4dGVuZHMgdGhlIElucHV0T3B0aW9uIGludGVyZmFjZSB3aXRoIGEgY2hlY2tlZCBwcm9wZXJ0eSB0byBpbmRpY2F0ZVxuICogd2hldGhlciB0aGUgb3B0aW9uIGlzIGNoZWNrZWQgYnkgZGVmYXVsdC5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIFJhZGlvT3B0aW9uID0gSW5wdXRPcHRpb24gJiB7IGNoZWNrZWQ/OiBib29sZWFuIH07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE9wdGlvbiB0eXBlIGZvciBjaGVja2JveCBpbnB1dHNcbiAqIEBzdW1tYXJ5IEFsaWFzIGZvciBSYWRpb09wdGlvbiwgYXMgY2hlY2tib3ggb3B0aW9ucyBoYXZlIHRoZSBzYW1lIHN0cnVjdHVyZSBhcyByYWRpbyBvcHRpb25zLlxuICogQHR5cGVkZWYge1JhZGlvT3B0aW9ufSBDaGVja2JveE9wdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgQ2hlY2tib3hPcHRpb24gPSBSYWRpb09wdGlvbjtcblxuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRhcmdldCBvcHRpb25zIGZvciBIVE1MIGZvcm1zXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBwb3NzaWJsZSB0YXJnZXQgdmFsdWVzIGZvciBIVE1MIGZvcm1zLCBpbmNsdWRpbmcgc3RhbmRhcmQgdGFyZ2V0c1xuICogbGlrZSAnX2JsYW5rJywgJ19zZWxmJywgJ19wYXJlbnQnLCBhbmQgJ190b3AnLCBhcyB3ZWxsIGFzIGN1c3RvbSBzdHJpbmcgdmFsdWVzLlxuICogQHR5cGVkZWYgeygnX2JsYW5rJ3wnX3NlbGYnfCdfcGFyZW50J3wnX3RvcCd8c3RyaW5nKX0gSFRNTEZvcm1UYXJnZXRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIEhUTUxGb3JtVGFyZ2V0ID0gJ19ibGFuaycgfCAnX3NlbGYnIHwgJ19wYXJlbnQnIHwgJ190b3AnIHwgc3RyaW5nO1xuXG4vLyBleHBvcnQgaW50ZXJmYWNlIElMaXN0SXRlbVByb3Age1xuLy8gICByZW5kZXI/OiBzdHJpbmcgfCBib29sZWFuO1xuLy8gICB0cmFuc2xhdGVQcm9wcz86IHN0cmluZyB8IHN0cmluZ1tdO1xuLy8gICBidXR0b24/OiBTdHJpbmdPckJvb2xlYW47XG4vLyAgIGljb24/OiBzdHJpbmc7XG4vLyAgIGljb25TbG90PzogJ3N0YXJ0JyB8ICdlbmQnO1xuLy8gICB0aXRsZT86IHN0cmluZztcbi8vICAgZGVzY3JpdHBpb24/OiBzdHJpbmc7XG4vLyAgIGluZm8/OiBzdHJpbmc7XG4vLyAgIHN1YmluZm8/OiBzdHJpbmc7XG4vLyB9XG5cblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUeXBlIGZvciBmb3JtIHNlcnZpY2UgY29udHJvbHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBvZiBmb3JtIGNvbnRyb2xzIG1hbmFnZWQgYnkgdGhlIGZvcm0gc2VydmljZS5cbiAqIEl0J3MgYSBuZXN0ZWQgcmVjb3JkIHdoZXJlIHRoZSBvdXRlciBrZXkgaXMgdGhlIGZvcm0gZ3JvdXAgbmFtZSwgdGhlIGlubmVyIGtleVxuICogaXMgdGhlIGNvbnRyb2wgbmFtZSwgYW5kIHRoZSB2YWx1ZSBjb250YWlucyB0aGUgZm9ybSBncm91cCBhbmQgZmllbGQgcHJvcGVydGllcy5cbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB7IGNvbnRyb2w6IEZvcm1Hcm91cDsgcHJvcHM6IEFuZ3VsYXJGaWVsZERlZmluaXRpb24gfT4+fSBGb3JtU2VydmljZUNvbnRyb2xzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBGb3JtU2VydmljZUNvbnRyb2xzID0gUmVjb3JkPFxuICBzdHJpbmcsXG4gIFJlY29yZDxzdHJpbmcsIEZvcm1TZXJ2aWNlQ29udHJvbD5cbj47XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlbmRlcmVyIGN1c3RvbSBldmVudCB0eXBlXG4gKiBAc3VtbWFyeSBDb21iaW5lcyBCYXNlQ3VzdG9tRXZlbnQgd2l0aCBLZXlWYWx1ZSBwcm9wZXJ0aWVzIHRvIGNyZWF0ZSBhIGZsZXhpYmxlXG4gKiBjdXN0b20gZXZlbnQgdHlwZSBmb3IgcmVuZGVyZXIgY29tcG9uZW50cy4gVGhpcyBhbGxvd3MgZXZlbnRzIHRvIGNhcnJ5IGJvdGhcbiAqIHN0YW5kYXJkIGV2ZW50IHByb3BlcnRpZXMgYW5kIGFkZGl0aW9uYWwgY3VzdG9tIGRhdGEuXG4gKiBAdHlwZWRlZiBSZW5kZXJlckN1c3RvbUV2ZW50XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBSZW5kZXJlckN1c3RvbUV2ZW50ID0gQmFzZUN1c3RvbUV2ZW50ICYgS2V5VmFsdWU7XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ1JVRCBmb3JtIGV2ZW50IHR5cGVcbiAqIEBzdW1tYXJ5IEV4dGVuZHMgQmFzZUN1c3RvbUV2ZW50IHRvIGluY2x1ZGUgb3B0aW9uYWwgaGFuZGxlcnMgZm9yIENSVUQgZm9ybSBvcGVyYXRpb25zLlxuICogVGhpcyBldmVudCB0eXBlIGlzIHVzZWQgZm9yIGZvcm0tcmVsYXRlZCBhY3Rpb25zIGxpa2UgY3JlYXRlLCByZWFkLCB1cGRhdGUsIGFuZCBkZWxldGUgb3BlcmF0aW9ucy5cbiAqIEB0eXBlZGVmIENydWRGb3JtRXZlbnRcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW2hhbmRsZXJzXSAtIE9wdGlvbmFsIGhhbmRsZXJzIGZvciBmb3JtIG9wZXJhdGlvbnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIENydWRGb3JtRXZlbnQgPSBCYXNlQ3VzdG9tRXZlbnQgJiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGhhbmRsZXJzPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn07XG5cblxuZXhwb3J0IHR5cGUgRm9ybVBhcmVudCA9IEZvcm1Hcm91cCB8IEZvcm1BcnJheTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRm9ybSBwYXJlbnQgZ3JvdXAgdHVwbGVcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYSB0dXBsZSBjb250YWluaW5nIGEgRm9ybUdyb3VwIGFuZCBpdHMgYXNzb2NpYXRlZCBzdHJpbmcgaWRlbnRpZmllci5cbiAqIFRoaXMgaXMgdXNlZCBmb3IgbWFuYWdpbmcgaGllcmFyY2hpY2FsIGZvcm0gc3RydWN0dXJlcyBhbmQgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMuXG4gKiBAdHlwZWRlZiB7W0Zvcm1QYXJlbnQsIHN0cmluZ119IEZvcm1QYXJlbnRHcm91cFxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVBhcmVudEdyb3VwID0gW0Zvcm1QYXJlbnQsICBzdHJpbmddO1xuXG4iXX0=