@flogeez/angular-tiptap-editor 3.5.3 → 3.5.5
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.
- package/CHANGELOG.md +17 -0
- package/esm2022/lib/components/bubble-menus/color/ate-color-bubble-menu.component.mjs +12 -2
- package/esm2022/lib/components/bubble-menus/link/ate-link-bubble-menu.component.mjs +22 -2
- package/esm2022/lib/components/editor/angular-tiptap-editor.component.mjs +12 -4
- package/esm2022/lib/extensions/ate-link-shortcut.extension.mjs +50 -0
- package/esm2022/lib/utils/ate-equality.utils.mjs +14 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/flogeez-angular-tiptap-editor.mjs +103 -5
- package/fesm2022/flogeez-angular-tiptap-editor.mjs.map +1 -1
- package/lib/components/bubble-menus/color/ate-color-bubble-menu.component.d.ts +1 -0
- package/lib/components/bubble-menus/link/ate-link-bubble-menu.component.d.ts +1 -0
- package/lib/extensions/ate-link-shortcut.extension.d.ts +15 -0
- package/lib/utils/ate-equality.utils.d.ts +2 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -14,6 +14,7 @@ import { AteResizableImage } from "../../extensions/ate-resizable-image.extensio
|
|
|
14
14
|
import { AteIconRegistry } from "../../services/ate-icon-registry.service";
|
|
15
15
|
import { AteUploadProgress } from "../../extensions/ate-upload-progress.extension";
|
|
16
16
|
import { AtePastedImage } from "../../extensions/ate-pasted-image.extension";
|
|
17
|
+
import { AteLinkShortcut } from "../../extensions/ate-link-shortcut.extension";
|
|
17
18
|
import { AteTableExtension } from "../../extensions/ate-table.extension";
|
|
18
19
|
import { AteTocNodeOptions } from "../table-of-contents/ate-toc-node.component";
|
|
19
20
|
import { AteTiptapStateExtension } from "../../extensions/ate-tiptap-state.extension";
|
|
@@ -50,6 +51,7 @@ import { AteLinkClickBehavior } from "../../extensions/ate-link-click-behavior.e
|
|
|
50
51
|
import { AteBlockControlsExtension } from "../../extensions/ate-block-controls.extension";
|
|
51
52
|
import { ATE_DEFAULT_TOOLBAR_CONFIG, ATE_DEFAULT_BUBBLE_MENU_CONFIG, ATE_DEFAULT_IMAGE_BUBBLE_MENU_CONFIG, ATE_DEFAULT_IMAGE_UPLOAD_CONFIG, ATE_DEFAULT_TABLE_MENU_CONFIG, ATE_DEFAULT_CELL_MENU_CONFIG, ATE_DEFAULT_CONFIG, } from "../../config/ate-editor.config";
|
|
52
53
|
import { concat, defer, of, tap } from "rxjs";
|
|
54
|
+
import { shallowArrayEqual, shallowObjectEqual } from "../../utils/ate-equality.utils";
|
|
53
55
|
import * as i0 from "@angular/core";
|
|
54
56
|
import * as i1 from "../../directives/ate-noop-value-accessor.directive";
|
|
55
57
|
function transformBooleanInput(val) {
|
|
@@ -337,10 +339,12 @@ export class AngularTiptapEditorComponent {
|
|
|
337
339
|
this.finalShowWordCount = computed(() => this.showWordCount() ?? this.effectiveConfig().showWordCount ?? true);
|
|
338
340
|
this.finalLocale = computed(() => this.locale() ?? this.effectiveConfig().locale);
|
|
339
341
|
// Extensions & Options
|
|
340
|
-
this.finalTiptapExtensions = computed(() => this.tiptapExtensions() ?? this.effectiveConfig().tiptapExtensions ?? []);
|
|
341
|
-
this.finalTiptapOptions = computed(() => this.tiptapOptions() ?? this.effectiveConfig().tiptapOptions ?? {});
|
|
342
|
+
this.finalTiptapExtensions = computed(() => this.tiptapExtensions() ?? this.effectiveConfig().tiptapExtensions ?? [], { equal: shallowArrayEqual });
|
|
343
|
+
this.finalTiptapOptions = computed(() => this.tiptapOptions() ?? this.effectiveConfig().tiptapOptions ?? {}, { equal: shallowObjectEqual });
|
|
342
344
|
this.finalStateCalculators = computed(() => this.stateCalculators() ?? this.effectiveConfig().stateCalculators ?? []);
|
|
343
|
-
this.finalAngularNodesConfig = computed(() => this.effectiveConfig().angularNodes ?? []
|
|
345
|
+
this.finalAngularNodesConfig = computed(() => this.effectiveConfig().angularNodes ?? [], {
|
|
346
|
+
equal: shallowArrayEqual,
|
|
347
|
+
});
|
|
344
348
|
// Image Upload
|
|
345
349
|
this.finalImageUploadConfig = computed(() => {
|
|
346
350
|
const fromInput = this.imageUpload();
|
|
@@ -519,6 +523,10 @@ export class AngularTiptapEditorComponent {
|
|
|
519
523
|
types: ["heading", "paragraph", "resizableImage"],
|
|
520
524
|
}),
|
|
521
525
|
AteLinkClickBehavior,
|
|
526
|
+
AteLinkShortcut.configure({
|
|
527
|
+
canOpen: () => this.editorCommandsService.editorState().can.toggleLink,
|
|
528
|
+
open: editor => this.editorCommandsService.execute(editor, "toggleLink"),
|
|
529
|
+
}),
|
|
522
530
|
Highlight.configure({
|
|
523
531
|
multicolor: true,
|
|
524
532
|
HTMLAttributes: {
|
|
@@ -1130,4 +1138,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1130
1138
|
</div>
|
|
1131
1139
|
`, styles: [":host{--ate-primary: #2563eb;--ate-primary-hover: #153ca9;--ate-primary-contrast: #ffffff;--ate-primary-light: color-mix(in srgb, var(--ate-primary), transparent 90%);--ate-primary-lighter: color-mix(in srgb, var(--ate-primary), transparent 95%);--ate-primary-light-alpha: color-mix(in srgb, var(--ate-primary), transparent 85%);--ate-surface: #ffffff;--ate-surface-secondary: #f8f9fa;--ate-surface-tertiary: #f1f5f9;--ate-text: #2d3748;--ate-text-secondary: #64748b;--ate-text-muted: #a0aec0;--ate-border: #e2e8f0;--ate-highlight-bg: #fef08a;--ate-highlight-color: #854d0e;--ate-button-hover: #f1f5f9;--ate-button-active: #e2e8f0;--ate-selection-bg: var(--ate-primary-light-alpha);--ate-error-color: #c53030;--ate-error-bg: #fed7d7;--ate-error-border: #feb2b2;--ate-border-color: var(--ate-border);--ate-border-width: 2px;--ate-border-radius: 12px;--ate-sub-border-radius: 8px;--ate-focus-color: var(--ate-primary);--ate-background: var(--ate-surface);--ate-text-color: var(--ate-text, #2d3748);--ate-placeholder-color: var(--ate-text-muted, #a0aec0);--ate-list-marker-color: var(--ate-text-color);--ate-line-height: 1.6;--ate-content-padding-block: 16px;--ate-content-padding-inline: 16px;--ate-content-gutter: 0px;--ate-menu-bg: var(--ate-surface, #ffffff);--ate-menu-border-radius: var(--ate-border-radius, 12px);--ate-menu-border: var(--ate-border, #e2e8f0);--ate-menu-shadow: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--ate-menu-padding: 4px;--ate-menu-gap: 2px;--ate-toolbar-padding: var(--ate-menu-padding);--ate-toolbar-gap: var(--ate-menu-gap);--ate-toolbar-background: var(--ate-surface-secondary, #f8f9fa);--ate-toolbar-border-color: var(--ate-border, #e2e8f0);--ate-toolbar-button-color: var(--ate-text-secondary, #64748b);--ate-toolbar-button-hover-background: transparent;--ate-toolbar-button-active-background: color-mix( in srgb, var(--ate-primary, #2563eb), transparent 90% );--ate-toolbar-button-active-color: var(--ate-primary, #2563eb);--ate-counter-color: var(--ate-text-secondary, #64748b);--ate-counter-background: var(--ate-surface-secondary, #f8f9fa);--ate-counter-border-color: var(--ate-border, #e2e8f0);--ate-drag-background: #f0f8ff;--ate-drag-border-color: var(--ate-primary, #2563eb);--ate-blockquote-border-color: var(--ate-border, #e2e8f0);--ate-blockquote-background: var(--ate-surface-secondary, #f8f9fa);--ate-code-background: var(--ate-surface-secondary, #f8f9fa);--ate-code-color: var(--ate-text, #2d3748);--ate-code-border-color: var(--ate-border, #e2e8f0);--ate-code-block-background: #0f172a;--ate-code-block-color: #e2e8f0;--ate-code-block-border-color: var(--ate-border, #e2e8f0);--ate-image-border-radius: 16px;--ate-image-selected-color: var(--ate-primary, #2563eb);--ate-scrollbar-width: 10px;--ate-scrollbar-thumb: var(--ate-border, #e2e8f0);--ate-scrollbar-thumb-hover: var(--ate-text-muted, #a0aec0);--ate-scrollbar-track: transparent;--ate-table-border-color: var(--ate-border, #e2e8f0);--ate-table-header-background: var(--ate-surface-secondary, #f8f9fa);--ate-table-header-color: var(--ate-text, #2d3748);--ate-table-cell-background: var(--ate-surface, #ffffff);--ate-table-cell-selected-background: color-mix( in srgb, var(--ate-primary, #2563eb), transparent 90% );--ate-table-resize-handle-color: var(--ate-primary, #2563eb);--ate-table-row-hover-background: color-mix( in srgb, var(--ate-primary, #2563eb), transparent 95% );--ate-tooltip-bg: var(--ate-code-block-background, #0f172a);--ate-tooltip-color: var(--ate-code-block-color, #e2e8f0)}:host(.dark),:host([data-theme=\"dark\"]){--ate-primary: #3b82f6;--ate-primary-contrast: #ffffff;--ate-primary-light: color-mix(in srgb, var(--ate-primary), transparent 85%);--ate-primary-lighter: color-mix(in srgb, var(--ate-primary), transparent 92%);--ate-primary-light-alpha: color-mix(in srgb, var(--ate-primary), transparent 80%);--ate-surface: #020617;--ate-surface-secondary: #0f172a;--ate-surface-tertiary: #1e293b;--ate-text: #f8fafc;--ate-text-secondary: #94a3b8;--ate-text-muted: #64748b;--ate-border: #1e293b;--ate-highlight-bg: #854d0e;--ate-highlight-color: #fef08a;--ate-button-hover: #1e293b;--ate-button-active: #0f172a;--ate-menu-border: rgba(255, 255, 255, .1);--ate-menu-shadow: 0 20px 25px -5px rgba(0, 0, 0, .3), 0 10px 10px -5px rgba(0, 0, 0, .2);--ate-error-color: #f87171;--ate-error-bg: #450a0a;--ate-error-border: #7f1d1d;--ate-drag-background: var(--ate-surface-tertiary);--ate-drag-border-color: var(--ate-primary);--ate-blockquote-border-color: var(--ate-primary);--ate-toolbar-button-active-background: var(--ate-primary-light);--ate-toolbar-button-active-color: var(--ate-primary);--ate-button-hover: var(--ate-surface-tertiary);--ate-button-active: var(--ate-surface-secondary);--ate-scrollbar-thumb: var(--ate-surface-tertiary);--ate-scrollbar-thumb-hover: var(--ate-text-muted)}:host(.fill-container){display:block;height:100%}.ate-editor{border:var(--ate-border-width) solid var(--ate-border-color);border-radius:var(--ate-border-radius);background:var(--ate-background);overflow:visible;transition:border-color .2s ease;position:relative}:host(.floating-toolbar) .ate-editor{overflow:visible}:host(.fill-container) .ate-editor{display:flex;flex-direction:column;height:100%}:host(.fill-container) .ate-content-wrapper{flex:1;min-height:0}:host(.fill-container) .ate-content{flex:1;min-height:0;overflow-y:auto}.ate-editor:focus-within{border-color:var(--ate-focus-color)}.ate-content{min-height:var(--editor-min-height, 200px);height:var(--editor-height, auto);max-height:var(--editor-max-height, none);overflow-y:var(--editor-overflow, visible);outline:none;position:relative;scrollbar-width:thin;scrollbar-color:var(--ate-scrollbar-thumb) var(--ate-scrollbar-track)}:host(.is-disabled) .ate-content{cursor:not-allowed;opacity:.7;-webkit-user-select:none;user-select:none;pointer-events:none;background-color:var(--ate-surface-tertiary)}:host(.is-readonly) .ate-content{cursor:default;-webkit-user-select:text;user-select:text}:host(.is-readonly) .ate-content ::ng-deep .ate-link{cursor:pointer;pointer-events:auto}.ate-content::-webkit-scrollbar{width:var(--ate-scrollbar-width)}.ate-content-wrapper{position:relative;display:flex;flex-direction:column;min-height:0}.ate-content-wrapper .ate-content{flex:1}.ate-content::-webkit-scrollbar-track{background:var(--ate-scrollbar-track)}.ate-content::-webkit-scrollbar-thumb{background:var(--ate-scrollbar-thumb);border:3px solid transparent;background-clip:content-box;border-radius:10px}.ate-content::-webkit-scrollbar-thumb:hover{background:var(--ate-scrollbar-thumb-hover);background-clip:content-box}.ate-content.drag-over{background:var(--ate-drag-background);border:2px dashed var(--ate-drag-border-color)}.character-count{padding:6px 8px;font-size:12px;color:var(--ate-counter-color);text-align:right;border-top:1px solid var(--ate-counter-border-color);background:var(--ate-counter-background);transition:color .2s ease;border-bottom-left-radius:calc(var(--ate-border-radius) - var(--ate-border-width));border-bottom-right-radius:calc(var(--ate-border-radius) - var(--ate-border-width))}.character-count.limit-reached{color:var(--ate-error-color, #ef4444);font-weight:600}:host.ate-blocks-inside{--ate-content-gutter: 54px}@media (max-width: 768px){:host.ate-blocks-inside{--ate-content-gutter: 0px}ate-block-controls{display:none!important}}:host ::ng-deep .ProseMirror{padding-inline:calc(var(--ate-content-padding-inline) + var(--ate-content-gutter));padding-block:var(--ate-content-padding-block);outline:none;line-height:var(--ate-line-height);color:var(--ate-text-color);min-height:100%;word-wrap:break-word;overflow-wrap:break-word}:host ::ng-deep .ProseMirror ::selection{background-color:var(--ate-selection-bg);color:inherit}:host ::ng-deep .ProseMirror ::-moz-selection{background-color:var(--ate-selection-bg);color:inherit}:host ::ng-deep .ProseMirror h1{font-size:2em;font-weight:700;margin-top:0;margin-bottom:.5em}:host ::ng-deep .ProseMirror h2{font-size:1.5em;font-weight:700;margin-top:1em;margin-bottom:.5em}:host ::ng-deep .ProseMirror h3{font-size:1.25em;font-weight:700;margin-top:1em;margin-bottom:.5em}:host ::ng-deep .ProseMirror h4{font-size:1.1em;font-weight:700;margin-top:1em;margin-bottom:.5em}:host ::ng-deep .ProseMirror h5,:host ::ng-deep .ProseMirror h6{font-size:1em;font-weight:700;margin-top:1em;margin-bottom:.5em}:host ::ng-deep .ProseMirror p{margin:.5em 0}:host ::ng-deep .ProseMirror ul{list-style-type:disc;list-style-position:outside;padding-left:2em;margin:.5em 0}:host ::ng-deep .ProseMirror ol{list-style-type:decimal;list-style-position:outside;padding-left:2em;margin:.5em 0}:host ::ng-deep .ProseMirror ul ul{list-style-type:circle}:host ::ng-deep .ProseMirror ul ul ul{list-style-type:square}:host ::ng-deep .ProseMirror ol ol{list-style-type:lower-alpha}:host ::ng-deep .ProseMirror ol ol ol{list-style-type:lower-roman}:host ::ng-deep .ProseMirror li::marker{color:var(--ate-list-marker-color)}:host ::ng-deep .ProseMirror ul[data-type=taskList]{list-style-type:none}:host ::ng-deep .ProseMirror hr{border:none;border-top:1px solid var(--ate-border);margin:1.5em 0}:host ::ng-deep .ProseMirror blockquote{border-left:4px solid var(--ate-blockquote-border-color);margin:1em 0;background:var(--ate-blockquote-background);padding:.5em 1em;border-radius:0 4px 4px 0}:host ::ng-deep .ProseMirror code{background:var(--ate-code-background);color:var(--ate-code-color);border:1px solid var(--ate-code-border-color);padding:.15em .4em;border-radius:4px;font-family:JetBrains Mono,Fira Code,Monaco,Consolas,monospace;font-size:.85em;font-weight:500}:host ::ng-deep .ProseMirror pre{background:var(--ate-code-block-background);color:var(--ate-code-block-color);border:1px solid var(--ate-code-block-border-color);padding:1em;border-radius:var(--ate-border-radius);overflow-x:auto;margin:1em 0}:host ::ng-deep .ProseMirror pre code{background:none;color:inherit;border:none;padding:0}:host ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:var(--ate-placeholder-color);pointer-events:none;float:left;height:0}:host ::ng-deep .ProseMirror[contenteditable=false] img{cursor:pointer}:host ::ng-deep .ProseMirror[contenteditable=false] a{cursor:pointer}:host ::ng-deep .ProseMirror[contenteditable=false] img:hover{transform:none;box-shadow:0 2px 8px #0000001a}:host ::ng-deep .ProseMirror[contenteditable=false] img.ProseMirror-selectednode{outline:none}:host ::ng-deep .ProseMirror img{position:relative;display:inline-block;max-width:100%;height:auto;cursor:pointer;transition:all .2s ease;border:2px solid transparent;border-radius:var(--ate-image-border-radius)}:host ::ng-deep .ProseMirror img:hover{border-color:var(--ate-border-color);box-shadow:0 2px 4px #0000001a}:host ::ng-deep .ProseMirror img.ProseMirror-selectednode,:host ::ng-deep .resizable-image-container.selected img{border-color:var(--ate-image-selected-color);transition:all .2s ease}:host ::ng-deep .ProseMirror [data-text-align=center],:host ::ng-deep .ProseMirror [data-align=center]{text-align:center}:host ::ng-deep .ProseMirror [data-text-align=right],:host ::ng-deep .ProseMirror [data-align=right]{text-align:right}:host ::ng-deep .ProseMirror [data-text-align=left],:host ::ng-deep .ProseMirror [data-align=left]{text-align:left}:host ::ng-deep .resizable-image-wrapper{display:block;width:100%;margin:.5em 0}:host ::ng-deep .resizable-image-container{position:relative;display:inline-block;max-width:100%}:host ::ng-deep .resize-controls{position:absolute;inset:0;pointer-events:none;z-index:1000;opacity:0;transition:opacity .2s ease}::ng-deep .ate-slash-decoration{background:var( --ate-primary-light, color-mix(in srgb, var(--ate-primary, #2563eb), transparent 90%) );padding:4px 8px;border-radius:var(--ate-sub-border-radius, 8px)}::ng-deep .ate-slash-decoration.is-empty:after{content:attr(data-decoration-content);color:var(--ate-text-secondary);font-weight:400;opacity:.7}:host:not(.is-readonly):not(.is-disabled) ::ng-deep .resizable-image-container:hover .resize-controls,:host:not(.is-readonly):not(.is-disabled) ::ng-deep body.resizing .resize-controls{opacity:1}:host ::ng-deep .resize-handle{position:absolute;width:.35rem;height:2rem;background:var(--ate-primary);border:2px solid var(--ate-surface);border-radius:var(--ate-border-radius);pointer-events:all;cursor:pointer;z-index:1001;transition:all .15s ease;box-shadow:0 2px 6px #0003}:host ::ng-deep .resize-handle:hover{background:var(--ate-primary);box-shadow:0 3px 8px #0000004d}:host ::ng-deep .resize-handle:active{background:var(--ate-primary)}:host ::ng-deep .resize-handle-w:hover,:host ::ng-deep .resize-handle-e:hover{background:var(--ate-primary-hover)}:host ::ng-deep .resize-handle-w:active,:host ::ng-deep .resize-handle-e:active{transform:translateY(-50%) scale(.9);background:var(--ate-primary-hover)}:host ::ng-deep .resize-handle-w{top:50%;left:.35rem;transform:translateY(-50%);cursor:w-resize}:host ::ng-deep .resize-handle-e{top:50%;right:.35rem;transform:translateY(-50%);cursor:e-resize}:host ::ng-deep body.resizing{-webkit-user-select:none;user-select:none;cursor:crosshair}:host ::ng-deep body.resizing .ProseMirror{pointer-events:none}:host ::ng-deep body.resizing .ProseMirror .resizable-image-container{pointer-events:none}:host ::ng-deep .image-size-info{position:absolute;bottom:-20px;left:50%;transform:translate(-50%);background:#000c;color:#fff;padding:2px 6px;border-radius:3px;font-size:11px;white-space:nowrap;opacity:0;transition:opacity .2s ease}:host ::ng-deep .resizable-image-container:hover .image-size-info{opacity:1}:host ::ng-deep .ProseMirror table{border-collapse:separate;border-spacing:0;margin:0;table-layout:fixed;width:100%;border-radius:8px;overflow:hidden}:host ::ng-deep .ProseMirror table td,:host ::ng-deep .ProseMirror table th{border:none;border-right:1px solid var(--ate-table-border-color);border-bottom:1px solid var(--ate-table-border-color);box-sizing:border-box;min-width:1em;padding:8px 12px;position:relative;vertical-align:top;text-align:left}:host ::ng-deep .ProseMirror table td{background:var(--ate-table-cell-background)}:host ::ng-deep .ProseMirror table td:first-child,:host ::ng-deep .ProseMirror table th:first-child{border-left:1px solid var(--ate-table-border-color)}:host ::ng-deep .ProseMirror table tr:first-child td,:host ::ng-deep .ProseMirror table tr:first-child th{border-top:1px solid var(--ate-table-border-color)}:host ::ng-deep .ProseMirror table tr:first-child th:first-child{border-top-left-radius:8px}:host ::ng-deep .ProseMirror table tr:first-child th:last-child{border-top-right-radius:8px}:host ::ng-deep .ProseMirror table tr:last-child td:first-child{border-bottom-left-radius:8px}:host ::ng-deep .ProseMirror table tr:last-child td:last-child{border-bottom-right-radius:8px}:host ::ng-deep .ProseMirror table th{background:var(--ate-table-header-background);font-weight:600;color:var(--ate-table-header-color)}:host ::ng-deep .ProseMirror table .selectedCell:after{background:var(--ate-table-cell-selected-background);content:\"\";inset:0;pointer-events:none;position:absolute;z-index:2}:host ::ng-deep .ProseMirror table .column-resize-handle{position:absolute;right:-2px;top:0;bottom:0;width:4px;background-color:var(--ate-table-resize-handle-color);opacity:0;transition:opacity .2s ease}:host ::ng-deep .ProseMirror table:hover .column-resize-handle{opacity:1}:host ::ng-deep .ProseMirror table .column-resize-handle:hover{background-color:var(--ate-focus-color)}:host ::ng-deep .ProseMirror .tableWrapper{overflow-x:auto;margin:1em 0;border-radius:8px}:host ::ng-deep .ProseMirror .tableWrapper table{margin:0;border-radius:8px;min-width:600px;overflow:hidden}:host ::ng-deep .ProseMirror table p{margin:0}:host ::ng-deep .ProseMirror table tbody tr:hover td{background-color:var(--ate-table-row-hover-background)}\n"] }]
|
|
1132
1140
|
}], ctorParameters: () => [] });
|
|
1133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aXB0YXAtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvZWRpdG9yL2FuZ3VsYXItdGlwdGFwLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFFUixNQUFNLEVBQ04sVUFBVSxFQUNWLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBUXZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQXFELE1BQU0sY0FBYyxDQUFDO0FBQ3pGLE9BQU8sVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxXQUFXLE1BQU0sMkNBQTJDLENBQUM7QUFHcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbkYsT0FBTyxFQUFF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K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxrQkFDL0IsQ0FBQyw2QkFBNkIsQ0FBQyxRQUN6Qzt3QkFDSix3QkFBd0IsRUFBRSxzQkFBc0I7d0JBQ2hELDBCQUEwQixFQUFFLHdCQUF3Qjt3QkFDcEQscUJBQXFCLEVBQUUsdUNBQXVDO3dCQUM5RCxxQkFBcUIsRUFBRSxrQkFBa0I7d0JBQ3pDLDRCQUE0QixFQUFFLGtEQUFrRDt3QkFDaEYsMEJBQTBCLEVBQ3hCLDZGQUE2Rjt3QkFDL0Ysb0NBQW9DLEVBQUUsd0NBQXdDO3dCQUM5RSxrQ0FBa0MsRUFBRSx3Q0FBd0M7d0JBQzVFLG9DQUFvQyxFQUFFLHdDQUF3Qzt3QkFDOUUsY0FBYyxFQUFFLDJCQUEyQjt3QkFDM0MsMkJBQTJCLEVBQUUsbUNBQW1DO3dCQUNoRSw0QkFBNEIsRUFBRSxvQ0FBb0M7d0JBQ2xFLG1CQUFtQixFQUFFLGdCQUFnQjtxQkFDdEMsV0FDUTt3QkFDUCxtQkFBbUI7d0JBQ25CLHNCQUFzQjt3QkFDdEIsMkJBQTJCO3dCQUMzQiwyQkFBMkI7d0JBQzNCLDBCQUEwQjt3QkFDMUIseUJBQXlCO3dCQUN6QiwwQkFBMEI7d0JBQzFCLDJCQUEyQjt3QkFDM0Isc0JBQXNCO3dCQUN0Qix5QkFBeUI7cUJBQzFCLGFBQ1U7d0JBQ1Qsd0JBQXdCO3dCQUN4QixlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsY0FBYzt3QkFDZCxnQkFBZ0I7cUJBQ2pCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0lUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBPbkRlc3Ryb3ksXG4gIHZpZXdDaGlsZCxcbiAgZWZmZWN0LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBBZnRlclZpZXdJbml0LFxuICBpbmplY3QsXG4gIERlc3Ryb3lSZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICB1bnRyYWNrZWQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUJvb2xlYW5JbnB1dCh2YWw6IHVua25vd24pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGJvb2xlYW5BdHRyaWJ1dGUodmFsKTtcbn1cbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiO1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JPcHRpb25zLCBFeHRlbnNpb24sIE5vZGUsIE1hcmssIEpTT05Db250ZW50IH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IFN0YXJ0ZXJLaXQgZnJvbSBcIkB0aXB0YXAvc3RhcnRlci1raXRcIjtcbmltcG9ydCB7IFBsYWNlaG9sZGVyLCBDaGFyYWN0ZXJDb3VudCB9IGZyb20gXCJAdGlwdGFwL2V4dGVuc2lvbnNcIjtcbmltcG9ydCB7IFN1cGVyc2NyaXB0IH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLXN1cGVyc2NyaXB0XCI7XG5pbXBvcnQgeyBTdWJzY3JpcHQgfSBmcm9tIFwiQHRpcHRhcC9leHRlbnNpb24tc3Vic2NyaXB0XCI7XG5pbXBvcnQgeyBUZXh0QWxpZ24gfSBmcm9tIFwiQHRpcHRhcC9leHRlbnNpb24tdGV4dC1hbGlnblwiO1xuaW1wb3J0IHsgSGlnaGxpZ2h0IH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLWhpZ2hsaWdodFwiO1xuaW1wb3J0IHsgVGV4dFN0eWxlIH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLXRleHQtc3R5bGVcIjtcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLWNvbG9yXCI7XG5pbXBvcnQgT2ZmaWNlUGFzdGUgZnJvbSBcIkBpbnRldmF0aW9uL3RpcHRhcC1leHRlbnNpb24tb2ZmaWNlLXBhc3RlXCI7XG5pbXBvcnQgeyBOb2RlIGFzIFBNTm9kZSB9IGZyb20gXCJAdGlwdGFwL3BtL21vZGVsXCI7XG5cbmltcG9ydCB7IEF0ZVJlc2l6YWJsZUltYWdlIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvYXRlLXJlc2l6YWJsZS1pbWFnZS5leHRlbnNpb25cIjtcbmltcG9ydCB7IEF0ZUljb25SZWdpc3RyeSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtaWNvbi1yZWdpc3RyeS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBdGVVcGxvYWRQcm9ncmVzcyB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2F0ZS11cGxvYWQtcHJvZ3Jlc3MuZXh0ZW5zaW9uXCI7XG5pbXBvcnQgeyBBdGVQYXN0ZWRJbWFnZSB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2F0ZS1wYXN0ZWQtaW1hZ2UuZXh0ZW5zaW9uXCI7XG5pbXBvcnQgeyBBdGVUYWJsZUV4dGVuc2lvbiB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2F0ZS10YWJsZS5leHRlbnNpb25cIjtcbmltcG9ydCB7IEF0ZVRvY05vZGVPcHRpb25zIH0gZnJvbSBcIi4uL3RhYmxlLW9mLWNvbnRlbnRzL2F0ZS10b2Mtbm9kZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZVRpcHRhcFN0YXRlRXh0ZW5zaW9uIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvYXRlLXRpcHRhcC1zdGF0ZS5leHRlbnNpb25cIjtcbmltcG9ydCB7IEF0ZVRvb2xiYXJDb21wb25lbnQgfSBmcm9tIFwiLi4vdG9vbGJhci9hdGUtdG9vbGJhci5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZUJ1YmJsZU1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi4vYnViYmxlLW1lbnVzL3RleHQvYXRlLWJ1YmJsZS1tZW51LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQXRlSW1hZ2VCdWJibGVNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4uL2J1YmJsZS1tZW51cy9pbWFnZS9hdGUtaW1hZ2UtYnViYmxlLW1lbnUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBdGVUYWJsZUJ1YmJsZU1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi4vYnViYmxlLW1lbnVzL3RhYmxlL2F0ZS10YWJsZS1idWJibGUtbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZUNlbGxCdWJibGVNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4uL2J1YmJsZS1tZW51cy90YWJsZS9hdGUtY2VsbC1idWJibGUtbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZUxpbmtCdWJibGVNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4uL2J1YmJsZS1tZW51cy9saW5rL2F0ZS1saW5rLWJ1YmJsZS1tZW51LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQXRlQ29sb3JCdWJibGVNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4uL2J1YmJsZS1tZW51cy9jb2xvci9hdGUtY29sb3ItYnViYmxlLW1lbnUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBdGVTbGFzaENvbW1hbmRzQ29tcG9uZW50IH0gZnJvbSBcIi4uL3NsYXNoLWNvbW1hbmRzL2F0ZS1zbGFzaC1jb21tYW5kcy5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZUJsb2NrQ29udHJvbHNDb21wb25lbnQgfSBmcm9tIFwiLi9hdGUtYmxvY2stY29udHJvbHMuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBdGVDdXN0b21TbGFzaENvbW1hbmRzIH0gZnJvbSBcIi4uLy4uL21vZGVscy9hdGUtc2xhc2gtY29tbWFuZC5tb2RlbFwiO1xuaW1wb3J0IHsgQXRlRWRpdFRvZ2dsZUNvbXBvbmVudCB9IGZyb20gXCIuLi9lZGl0LXRvZ2dsZS9hdGUtZWRpdC10b2dnbGUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBdGVJbWFnZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXRlLWltYWdlLnNlcnZpY2VcIjtcbmltcG9ydCB7IEF0ZUkxOG5TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F0ZS1pMThuLnNlcnZpY2VcIjtcbmltcG9ydCB7IEF0ZUVkaXRvckNvbW1hbmRzU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtZWRpdG9yLWNvbW1hbmRzLnNlcnZpY2VcIjtcbmltcG9ydCB7IEF0ZUNvbG9yUGlja2VyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtY29sb3ItcGlja2VyLnNlcnZpY2VcIjtcbmltcG9ydCB7IEF0ZUxpbmtTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F0ZS1saW5rLnNlcnZpY2VcIjtcbmltcG9ydCB7IEF0ZUV4cG9ydFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXRlLWV4cG9ydC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBdGVFZGl0b3JSZWdpc3RyeSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtZWRpdG9yLXJlZ2lzdHJ5LnNlcnZpY2VcIjtcbmltcG9ydCB7IEF0ZU5vb3BWYWx1ZUFjY2Vzc29yRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvYXRlLW5vb3AtdmFsdWUtYWNjZXNzb3IuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBBdGVTdGF0ZUNhbGN1bGF0b3IgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2F0ZS1lZGl0b3Itc3RhdGUubW9kZWxcIjtcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtcbiAgZmlsdGVyU2xhc2hDb21tYW5kcyxcbiAgQXRlU2xhc2hDb21tYW5kc0NvbmZpZyxcbn0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hdGUtc2xhc2gtY29tbWFuZHMuY29uZmlnXCI7XG5pbXBvcnQgeyByZWdpc3RlckFuZ3VsYXJDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vbm9kZS12aWV3L2F0ZS1yZWdpc3Rlci1hbmd1bGFyLWNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUmVnaXN0ZXJBbmd1bGFyQ29tcG9uZW50T3B0aW9ucyB9IGZyb20gXCIuLi8uLi9ub2RlLXZpZXcvYXRlLW5vZGUtdmlldy5tb2RlbHNcIjtcbmltcG9ydCB7IEFURV9HTE9CQUxfQ09ORklHIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hdGUtZ2xvYmFsLWNvbmZpZy50b2tlblwiO1xuaW1wb3J0IHsgVHlwZSwgSW5qZWN0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQgeyBBdGVTZWxlY3Rpb25DYWxjdWxhdG9yIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLXNlbGVjdGlvbi5jYWxjdWxhdG9yXCI7XG5pbXBvcnQgeyBBdGVNYXJrc0NhbGN1bGF0b3IgfSBmcm9tIFwiLi4vLi4vZXh0ZW5zaW9ucy9jYWxjdWxhdG9ycy9hdGUtbWFya3MuY2FsY3VsYXRvclwiO1xuaW1wb3J0IHsgQXRlVGFibGVDYWxjdWxhdG9yIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLXRhYmxlLmNhbGN1bGF0b3JcIjtcbmltcG9ydCB7IEF0ZUltYWdlQ2FsY3VsYXRvciB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1pbWFnZS5jYWxjdWxhdG9yXCI7XG5pbXBvcnQgeyBBdGVTdHJ1Y3R1cmVDYWxjdWxhdG9yIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLXN0cnVjdHVyZS5jYWxjdWxhdG9yXCI7XG5pbXBvcnQgeyBBdGVEaXNjb3ZlcnlDYWxjdWxhdG9yIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLWRpc2NvdmVyeS5jYWxjdWxhdG9yXCI7XG5cbmltcG9ydCB7IEF0ZVRvb2xiYXJDb25maWcgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2F0ZS10b29sYmFyLm1vZGVsXCI7XG5pbXBvcnQge1xuICBBdGVCdWJibGVNZW51Q29uZmlnLFxuICBBdGVJbWFnZUJ1YmJsZU1lbnVDb25maWcsXG4gIEF0ZVRhYmxlQnViYmxlTWVudUNvbmZpZyxcbiAgQXRlQ2VsbEJ1YmJsZU1lbnVDb25maWcsXG59IGZyb20gXCIuLi8uLi9tb2RlbHMvYXRlLWJ1YmJsZS1tZW51Lm1vZGVsXCI7XG5pbXBvcnQge1xuICBBdGVFZGl0b3JDb25maWcsXG4gIEF0ZUFuZ3VsYXJOb2RlLFxuICBBdGVCbG9ja0NvbnRyb2xzTW9kZSxcbiAgQXRlQXV0b2ZvY3VzTW9kZSxcbn0gZnJvbSBcIi4uLy4uL21vZGVscy9hdGUtZWRpdG9yLWNvbmZpZy5tb2RlbFwiO1xuaW1wb3J0IHsgQXRlTGlua0NsaWNrQmVoYXZpb3IgfSBmcm9tIFwiLi4vLi4vZXh0ZW5zaW9ucy9hdGUtbGluay1jbGljay1iZWhhdmlvci5leHRlbnNpb25cIjtcbmltcG9ydCB7IEF0ZUJsb2NrQ29udHJvbHNFeHRlbnNpb24gfSBmcm9tIFwiLi4vLi4vZXh0ZW5zaW9ucy9hdGUtYmxvY2stY29udHJvbHMuZXh0ZW5zaW9uXCI7XG5pbXBvcnQge1xuICBBVEVfREVGQVVMVF9UT09MQkFSX0NPTkZJRyxcbiAgQVRFX0RFRkFVTFRfQlVCQkxFX01FTlVfQ09ORklHLFxuICBBVEVfREVGQVVMVF9JTUFHRV9CVUJCTEVfTUVOVV9DT05GSUcsXG4gIEFURV9ERUZBVUxUX0lNQUdFX1VQTE9BRF9DT05GSUcsXG4gIEFURV9ERUZBVUxUX1RBQkxFX01FTlVfQ09ORklHLFxuICBBVEVfREVGQVVMVF9DRUxMX01FTlVfQ09ORklHLFxuICBBVEVfREVGQVVMVF9DT05GSUcsXG59IGZyb20gXCIuLi8uLi9jb25maWcvYXRlLWVkaXRvci5jb25maWdcIjtcbmltcG9ydCB7IGNvbmNhdCwgZGVmZXIsIE9ic2VydmFibGUsIG9mLCB0YXAgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtcbiAgQXRlSW1hZ2VVcGxvYWRIYW5kbGVyLFxuICBBdGVJbWFnZVVwbG9hZE9wdGlvbnMsXG4gIEF0ZUltYWdlVXBsb2FkUmVzdWx0LFxuICBBdGVQYXN0ZWRJbWFnZVJlamVjdGlvbixcbn0gZnJvbSBcIi4uLy4uL21vZGVscy9hdGUtaW1hZ2UubW9kZWxcIjtcbmltcG9ydCB7IFN1cHBvcnRlZExvY2FsZSB9IGZyb20gXCIuLi8uLi9pMThuL2F0ZVRyYW5zbGF0aW9uc01vZGVsXCI7XG5cbi8vIFNsYXNoIGNvbW1hbmRzIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCBkeW5hbWljYWxseSB2aWEgc2xhc2hDb21tYW5kc0NvbmZpZ0NvbXB1dGVkXG5cbi8qKlxuICogVGhlIG1haW4gcmljaC10ZXh0IGVkaXRvciBjb21wb25lbnQgZm9yIEFuZ3VsYXIuXG4gKlxuICogUG93ZXJlZCBieSBUaXB0YXAgYW5kIGJ1aWx0IHdpdGggYSBuYXRpdmUgU2lnbmFsLWJhc2VkIGFyY2hpdGVjdHVyZSwgaXQgcHJvdmlkZXNcbiAqIGEgc2VhbWxlc3MsIGhpZ2gtcGVyZm9ybWFuY2UgZWRpdGluZyBleHBlcmllbmNlLiBTdXBwb3J0cyBhdXRvbWF0aWMgcmVnaXN0cmF0aW9uXG4gKiBvZiBBbmd1bGFyIGNvbXBvbmVudHMgYXMgaW50ZXJhY3RpdmUgbm9kZXMgKCdBbmd1bGFyIE5vZGVzJyksIGZ1bGwgUmVhY3RpdmUgRm9ybXNcbiAqIGludGVncmF0aW9uLCBhbmQgZXh0ZW5zaXZlIGN1c3RvbWl6YXRpb24gdmlhIHRoZSBBdGVFZGl0b3JDb25maWcuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhbmd1bGFyLXRpcHRhcC1lZGl0b3JcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3REaXJlY3RpdmVzOiBbQXRlTm9vcFZhbHVlQWNjZXNzb3JEaXJlY3RpdmVdLFxuICBob3N0OiB7XG4gICAgXCJbY2xhc3MuZmlsbC1jb250YWluZXJdXCI6IFwiZmluYWxGaWxsQ29udGFpbmVyKClcIixcbiAgICBcIltjbGFzcy5mbG9hdGluZy10b29sYmFyXVwiOiBcImZpbmFsRmxvYXRpbmdUb29sYmFyKClcIixcbiAgICBcIltjbGFzcy5pcy1yZWFkb25seV1cIjogXCIhZmluYWxFZGl0YWJsZSgpICYmICFtZXJnZWREaXNhYmxlZCgpXCIsXG4gICAgXCJbY2xhc3MuaXMtZGlzYWJsZWRdXCI6IFwibWVyZ2VkRGlzYWJsZWQoKVwiLFxuICAgIFwiW3N0eWxlLi0tYXRlLWJvcmRlci13aWR0aF1cIjogXCJmaW5hbFNlYW1sZXNzKCkgfHwgbWVyZ2VkRGlzYWJsZWQoKSA/ICcwJyA6IG51bGxcIixcbiAgICBcIltzdHlsZS4tLWF0ZS1iYWNrZ3JvdW5kXVwiOlxuICAgICAgXCJmaW5hbFNlYW1sZXNzKCkgPyAndHJhbnNwYXJlbnQnIDogKG1lcmdlZERpc2FibGVkKCkgPyAndmFyKC0tYXRlLXN1cmZhY2UtdGVydGlhcnkpJyA6IG51bGwpXCIsXG4gICAgXCJbc3R5bGUuLS1hdGUtdG9vbGJhci1ib3JkZXItY29sb3JdXCI6IFwiZmluYWxTZWFtbGVzcygpID8gJ3RyYW5zcGFyZW50JyA6IG51bGxcIixcbiAgICBcIltzdHlsZS4tLWF0ZS1jb3VudGVyLWJhY2tncm91bmRdXCI6IFwiZmluYWxTZWFtbGVzcygpID8gJ3RyYW5zcGFyZW50JyA6IG51bGxcIixcbiAgICBcIltzdHlsZS4tLWF0ZS1jb3VudGVyLWJvcmRlci1jb2xvcl1cIjogXCJmaW5hbFNlYW1sZXNzKCkgPyAndHJhbnNwYXJlbnQnIDogbnVsbFwiLFxuICAgIFwiW2NsYXNzLmRhcmtdXCI6IFwiY29uZmlnKCkudGhlbWUgPT09ICdkYXJrJ1wiLFxuICAgIFwiW2NsYXNzLmF0ZS1ibG9ja3MtaW5zaWRlXVwiOiBcImZpbmFsQmxvY2tDb250cm9scygpID09PSAnaW5zaWRlJ1wiLFxuICAgIFwiW2NsYXNzLmF0ZS1ibG9ja3Mtb3V0c2lkZV1cIjogXCJmaW5hbEJsb2NrQ29udHJvbHMoKSA9PT0gJ291dHNpZGUnXCIsXG4gICAgXCJbYXR0ci5kYXRhLXRoZW1lXVwiOiBcImNvbmZpZygpLnRoZW1lXCIsXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBBdGVUb29sYmFyQ29tcG9uZW50LFxuICAgIEF0ZUJ1YmJsZU1lbnVDb21wb25lbnQsXG4gICAgQXRlSW1hZ2VCdWJibGVNZW51Q29tcG9uZW50LFxuICAgIEF0ZVRhYmxlQnViYmxlTWVudUNvbXBvbmVudCxcbiAgICBBdGVDZWxsQnViYmxlTWVudUNvbXBvbmVudCxcbiAgICBBdGVTbGFzaENvbW1hbmRzQ29tcG9uZW50LFxuICAgIEF0ZUxpbmtCdWJibGVNZW51Q29tcG9uZW50LFxuICAgIEF0ZUNvbG9yQnViYmxlTWVudUNvbXBvbmVudCxcbiAgICBBdGVFZGl0VG9nZ2xlQ29tcG9uZW50LFxuICAgIEF0ZUJsb2NrQ29udHJvbHNDb21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIEF0ZUVkaXRvckNvbW1hbmRzU2VydmljZSxcbiAgICBBdGVJbWFnZVNlcnZpY2UsXG4gICAgQXRlQ29sb3JQaWNrZXJTZXJ2aWNlLFxuICAgIEF0ZUxpbmtTZXJ2aWNlLFxuICAgIEF0ZUV4cG9ydFNlcnZpY2UsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImF0ZS1lZGl0b3JcIj5cbiAgICAgIDwhLS0gVG9vbGJhciAtLT5cbiAgICAgIEBpZiAoZmluYWxFZGl0YWJsZSgpICYmICFtZXJnZWREaXNhYmxlZCgpICYmIGZpbmFsU2hvd1Rvb2xiYXIoKSAmJiBlZGl0b3IoKSkge1xuICAgICAgICA8YXRlLXRvb2xiYXJcbiAgICAgICAgICBbZWRpdG9yXT1cImVkaXRvcigpIVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJmaW5hbFRvb2xiYXJDb25maWcoKVwiXG4gICAgICAgICAgW2ltYWdlVXBsb2FkXT1cImZpbmFsSW1hZ2VVcGxvYWRDb25maWcoKVwiXG4gICAgICAgICAgW2Zsb2F0aW5nXT1cImZpbmFsRmxvYXRpbmdUb29sYmFyKClcIlxuICAgICAgICAgIChtb3VzZWVudGVyKT1cImhpZGVCdWJibGVNZW51cygpXCJcbiAgICAgICAgICAobW91c2VsZWF2ZSk9XCJzaG93QnViYmxlTWVudXMoKVwiIC8+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoZmluYWxTaG93RWRpdFRvZ2dsZSgpICYmICFtZXJnZWREaXNhYmxlZCgpKSB7XG4gICAgICAgIDxhdGUtZWRpdC10b2dnbGVcbiAgICAgICAgICBbZWRpdGFibGVdPVwiZmluYWxFZGl0YWJsZSgpXCJcbiAgICAgICAgICBbdHJhbnNsYXRpb25zXT1cImN1cnJlbnRUcmFuc2xhdGlvbnMoKVwiXG4gICAgICAgICAgKGVkaXRUb2dnbGUpPVwidG9nZ2xlRWRpdE1vZGUoJGV2ZW50KVwiIC8+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gRWRpdG9yIENvbnRlbnQgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICNlZGl0b3JFbGVtZW50XG4gICAgICAgIGNsYXNzPVwiYXRlLWNvbnRlbnRcIlxuICAgICAgICBbY2xhc3MuZHJhZy1vdmVyXT1cImlzRHJhZ092ZXIoKVwiXG4gICAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAgICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJvbkVkaXRvckNsaWNrKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkVkaXRvckNsaWNrKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJvbkVkaXRvckNsaWNrKCRldmVudClcIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICByb2xlPVwiYXBwbGljYXRpb25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImN1cnJlbnRUcmFuc2xhdGlvbnMoKS5lZGl0b3IucGxhY2Vob2xkZXJcIj48L2Rpdj5cblxuICAgICAgPCEtLSBCbG9jayBDb250cm9scyAoUGx1cyArIERyYWcpIC0tPlxuICAgICAgQGlmIChmaW5hbEVkaXRhYmxlKCkgJiYgIW1lcmdlZERpc2FibGVkKCkgJiYgZWRpdG9yKCkgJiYgZmluYWxCbG9ja0NvbnRyb2xzKCkgIT09IFwibm9uZVwiKSB7XG4gICAgICAgIDxhdGUtYmxvY2stY29udHJvbHNcbiAgICAgICAgICBbZWRpdG9yXT1cImVkaXRvcigpIVwiXG4gICAgICAgICAgW2hvdmVyZWREYXRhXT1cImhvdmVyZWRCbG9jaygpXCJcbiAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJlZGl0b3JGdWxseUluaXRpYWxpemVkKCkgPyAnYmxvY2snIDogJ25vbmUnXCI+PC9hdGUtYmxvY2stY29udHJvbHM+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gVGV4dCBCdWJibGUgTWVudSAtLT5cbiAgICAgIEBpZiAoZmluYWxFZGl0YWJsZSgpICYmIGZpbmFsU2hvd0J1YmJsZU1lbnUoKSAmJiBlZGl0b3IoKSkge1xuICAgICAgICA8YXRlLWJ1YmJsZS1tZW51XG4gICAgICAgICAgW2VkaXRvcl09XCJlZGl0b3IoKSFcIlxuICAgICAgICAgIFtjb25maWddPVwiZmluYWxCdWJibGVNZW51Q29uZmlnKClcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS1idWJibGUtbWVudT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBJbWFnZSBCdWJibGUgTWVudSAtLT5cbiAgICAgIEBpZiAoZmluYWxTaG93SW1hZ2VCdWJibGVNZW51KCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS1pbWFnZS1idWJibGUtbWVudVxuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbY29uZmlnXT1cImZpbmFsSW1hZ2VCdWJibGVNZW51Q29uZmlnKClcIlxuICAgICAgICAgIFtpbWFnZVVwbG9hZF09XCJmaW5hbEltYWdlVXBsb2FkQ29uZmlnKClcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS1pbWFnZS1idWJibGUtbWVudT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBMaW5rIEJ1YmJsZSBNZW51IC0tPlxuICAgICAgQGlmIChmaW5hbEVkaXRhYmxlKCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS1saW5rLWJ1YmJsZS1tZW51XG4gICAgICAgICAgW2VkaXRvcl09XCJlZGl0b3IoKSFcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS1saW5rLWJ1YmJsZS1tZW51PlxuICAgICAgfVxuXG4gICAgICA8IS0tIENvbG9yIEJ1YmJsZSBNZW51IC0tPlxuICAgICAgQGlmIChmaW5hbEVkaXRhYmxlKCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS1jb2xvci1idWJibGUtbWVudVxuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJlZGl0b3JGdWxseUluaXRpYWxpemVkKCkgPyAnYmxvY2snIDogJ25vbmUnXCI+PC9hdGUtY29sb3ItYnViYmxlLW1lbnU+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gU2xhc2ggQ29tbWFuZHMgLS0+XG4gICAgICBAaWYgKGZpbmFsRWRpdGFibGUoKSAmJiBmaW5hbEVuYWJsZVNsYXNoQ29tbWFuZHMoKSAmJiBlZGl0b3IoKSkge1xuICAgICAgICA8YXRlLXNsYXNoLWNvbW1hbmRzXG4gICAgICAgICAgW2VkaXRvcl09XCJlZGl0b3IoKSFcIlxuICAgICAgICAgIFtjb25maWddPVwiZmluYWxTbGFzaENvbW1hbmRzQ29uZmlnKClcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS1zbGFzaC1jb21tYW5kcz5cbiAgICAgIH1cblxuICAgICAgPCEtLSBUYWJsZSBNZW51IC0tPlxuICAgICAgQGlmIChmaW5hbEVkaXRhYmxlKCkgJiYgZmluYWxTaG93VGFibGVCdWJibGVNZW51KCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS10YWJsZS1idWJibGUtbWVudVxuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbY29uZmlnXT1cImZpbmFsVGFibGVCdWJibGVNZW51Q29uZmlnKClcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS10YWJsZS1idWJibGUtbWVudT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBDZWxsIE1lbnUgLS0+XG4gICAgICBAaWYgKGZpbmFsRWRpdGFibGUoKSAmJiBmaW5hbFNob3dDZWxsQnViYmxlTWVudSgpICYmIGVkaXRvcigpKSB7XG4gICAgICAgIDxhdGUtY2VsbC1idWJibGUtbWVudVxuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbY29uZmlnXT1cImZpbmFsQ2VsbEJ1YmJsZU1lbnVDb25maWcoKVwiXG4gICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiZWRpdG9yRnVsbHlJbml0aWFsaXplZCgpID8gJ2Jsb2NrJyA6ICdub25lJ1wiPjwvYXRlLWNlbGwtYnViYmxlLW1lbnU+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gQ291bnRlcnMgLS0+XG4gICAgICBAaWYgKFxuICAgICAgICBmaW5hbEVkaXRhYmxlKCkgJiZcbiAgICAgICAgIW1lcmdlZERpc2FibGVkKCkgJiZcbiAgICAgICAgZmluYWxTaG93Rm9vdGVyKCkgJiZcbiAgICAgICAgKGZpbmFsU2hvd0NoYXJhY3RlckNvdW50KCkgfHwgZmluYWxTaG93V29yZENvdW50KCkpXG4gICAgICApIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2hhcmFjdGVyLWNvdW50XCJcbiAgICAgICAgICBbY2xhc3MubGltaXQtcmVhY2hlZF09XCJmaW5hbE1heENoYXJhY3RlcnMoKSAmJiBjaGFyYWN0ZXJDb3VudCgpID49IGZpbmFsTWF4Q2hhcmFjdGVycygpIVwiPlxuICAgICAgICAgIEBpZiAoZmluYWxTaG93Q2hhcmFjdGVyQ291bnQoKSkge1xuICAgICAgICAgICAge3sgY2hhcmFjdGVyQ291bnQoKSB9fVxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgY2hhcmFjdGVyQ291bnQoKSA+IDFcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnRUcmFuc2xhdGlvbnMoKS5lZGl0b3IuY2hhcmFjdGVyUGx1cmFsXG4gICAgICAgICAgICAgICAgOiBjdXJyZW50VHJhbnNsYXRpb25zKCkuZWRpdG9yLmNoYXJhY3RlclxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIEBpZiAoZmluYWxNYXhDaGFyYWN0ZXJzKCkpIHtcbiAgICAgICAgICAgICAgLyB7eyBmaW5hbE1heENoYXJhY3RlcnMoKSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAoZmluYWxTaG93Q2hhcmFjdGVyQ291bnQoKSAmJiBmaW5hbFNob3dXb3JkQ291bnQoKSkge1xuICAgICAgICAgICAgLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAoZmluYWxTaG93V29yZENvdW50KCkpIHtcbiAgICAgICAgICAgIHt7IHdvcmRDb3VudCgpIH19XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICB3b3JkQ291bnQoKSA+IDFcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnRUcmFuc2xhdGlvbnMoKS5lZGl0b3Iud29yZFBsdXJhbFxuICAgICAgICAgICAgICAgIDogY3VycmVudFRyYW5zbGF0aW9ucygpLmVkaXRvci53b3JkXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG5cbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgQ1NTIEN1c3RvbSBQcm9wZXJ0aWVzIChWYXJpYWJsZXMpXG4gICAgICAgICBPdmVycmlkZSB0aGVzZSB0byBjdXN0b21pemUgdGhlIGVkaXRvclxuICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuICAgICAgOmhvc3Qge1xuICAgICAgICAvKiA9PT09PSBCQVNFIFRPS0VOUyA9PT09PSAqL1xuICAgICAgICAtLWF0ZS1wcmltYXJ5OiAjMjU2M2ViO1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWhvdmVyOiAjMTUzY2E5O1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWNvbnRyYXN0OiAjZmZmZmZmO1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWxpZ2h0OiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYXRlLXByaW1hcnkpLCB0cmFuc3BhcmVudCA5MCUpO1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWxpZ2h0ZXI6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hdGUtcHJpbWFyeSksIHRyYW5zcGFyZW50IDk1JSk7XG4gICAgICAgIC0tYXRlLXByaW1hcnktbGlnaHQtYWxwaGE6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hdGUtcHJpbWFyeSksIHRyYW5zcGFyZW50IDg1JSk7XG5cbiAgICAgICAgLS1hdGUtc3VyZmFjZTogI2ZmZmZmZjtcbiAgICAgICAgLS1hdGUtc3VyZmFjZS1zZWNvbmRhcnk6ICNmOGY5ZmE7XG4gICAgICAgIC0tYXRlLXN1cmZhY2UtdGVydGlhcnk6ICNmMWY1Zjk7XG5cbiAgICAgICAgLS1hdGUtdGV4dDogIzJkMzc0ODtcbiAgICAgICAgLS1hdGUtdGV4dC1zZWNvbmRhcnk6ICM2NDc0OGI7XG4gICAgICAgIC0tYXRlLXRleHQtbXV0ZWQ6ICNhMGFlYzA7XG5cbiAgICAgICAgLS1hdGUtYm9yZGVyOiAjZTJlOGYwO1xuXG4gICAgICAgIC0tYXRlLWhpZ2hsaWdodC1iZzogI2ZlZjA4YTtcbiAgICAgICAgLS1hdGUtaGlnaGxpZ2h0LWNvbG9yOiAjODU0ZDBlO1xuXG4gICAgICAgIC0tYXRlLWJ1dHRvbi1ob3ZlcjogI2YxZjVmOTtcbiAgICAgICAgLS1hdGUtYnV0dG9uLWFjdGl2ZTogI2UyZThmMDtcblxuICAgICAgICAtLWF0ZS1zZWxlY3Rpb24tYmc6IHZhcigtLWF0ZS1wcmltYXJ5LWxpZ2h0LWFscGhhKTtcblxuICAgICAgICAtLWF0ZS1lcnJvci1jb2xvcjogI2M1MzAzMDtcbiAgICAgICAgLS1hdGUtZXJyb3ItYmc6ICNmZWQ3ZDc7XG4gICAgICAgIC0tYXRlLWVycm9yLWJvcmRlcjogI2ZlYjJiMjtcblxuICAgICAgICAvKiA9PT09PSBDT01QT05FTlQgVE9LRU5TID09PT09ICovXG4gICAgICAgIC0tYXRlLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlcik7XG4gICAgICAgIC0tYXRlLWJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAtLWF0ZS1ib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgICAtLWF0ZS1zdWItYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICAtLWF0ZS1mb2N1cy1jb2xvcjogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICAtLWF0ZS1iYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc3VyZmFjZSk7XG5cbiAgICAgICAgLyogQ29udGVudCAqL1xuICAgICAgICAtLWF0ZS10ZXh0LWNvbG9yOiB2YXIoLS1hdGUtdGV4dCwgIzJkMzc0OCk7XG4gICAgICAgIC0tYXRlLXBsYWNlaG9sZGVyLWNvbG9yOiB2YXIoLS1hdGUtdGV4dC1tdXRlZCwgI2EwYWVjMCk7XG4gICAgICAgIC0tYXRlLWxpc3QtbWFya2VyLWNvbG9yOiB2YXIoLS1hdGUtdGV4dC1jb2xvcik7XG4gICAgICAgIC0tYXRlLWxpbmUtaGVpZ2h0OiAxLjY7XG4gICAgICAgIC0tYXRlLWNvbnRlbnQtcGFkZGluZy1ibG9jazogMTZweDtcbiAgICAgICAgLS1hdGUtY29udGVudC1wYWRkaW5nLWlubGluZTogMTZweDtcbiAgICAgICAgLS1hdGUtY29udGVudC1ndXR0ZXI6IDBweDtcblxuICAgICAgICAvKiA9PT09PSBNRU5VUyAoU2xhc2gvQnViYmxlKSA9PT09PSAqL1xuICAgICAgICAtLWF0ZS1tZW51LWJnOiB2YXIoLS1hdGUtc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICAgIC0tYXRlLW1lbnUtYm9yZGVyLXJhZGl1czogdmFyKC0tYXRlLWJvcmRlci1yYWRpdXMsIDEycHgpO1xuICAgICAgICAtLWF0ZS1tZW51LWJvcmRlcjogdmFyKC0tYXRlLWJvcmRlciwgI2UyZThmMCk7XG4gICAgICAgIC0tYXRlLW1lbnUtc2hhZG93OiAwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCA0cHggNnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgICAgLS1hdGUtbWVudS1wYWRkaW5nOiA0cHg7XG4gICAgICAgIC0tYXRlLW1lbnUtZ2FwOiAycHg7XG5cbiAgICAgICAgLyogVG9vbGJhciAqL1xuICAgICAgICAtLWF0ZS10b29sYmFyLXBhZGRpbmc6IHZhcigtLWF0ZS1tZW51LXBhZGRpbmcpO1xuICAgICAgICAtLWF0ZS10b29sYmFyLWdhcDogdmFyKC0tYXRlLW1lbnUtZ2FwKTtcbiAgICAgICAgLS1hdGUtdG9vbGJhci1iYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc3VyZmFjZS1zZWNvbmRhcnksICNmOGY5ZmEpO1xuICAgICAgICAtLWF0ZS10b29sYmFyLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlciwgI2UyZThmMCk7XG4gICAgICAgIC0tYXRlLXRvb2xiYXItYnV0dG9uLWNvbG9yOiB2YXIoLS1hdGUtdGV4dC1zZWNvbmRhcnksICM2NDc0OGIpO1xuICAgICAgICAtLWF0ZS10b29sYmFyLWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgLS1hdGUtdG9vbGJhci1idXR0b24tYWN0aXZlLWJhY2tncm91bmQ6IGNvbG9yLW1peChcbiAgICAgICAgICBpbiBzcmdiLFxuICAgICAgICAgIHZhcigtLWF0ZS1wcmltYXJ5LCAjMjU2M2ViKSxcbiAgICAgICAgICB0cmFuc3BhcmVudCA5MCVcbiAgICAgICAgKTtcbiAgICAgICAgLS1hdGUtdG9vbGJhci1idXR0b24tYWN0aXZlLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSwgIzI1NjNlYik7XG5cbiAgICAgICAgLyogQ291bnRlciAqL1xuICAgICAgICAtLWF0ZS1jb3VudGVyLWNvbG9yOiB2YXIoLS1hdGUtdGV4dC1zZWNvbmRhcnksICM2NDc0OGIpO1xuICAgICAgICAtLWF0ZS1jb3VudGVyLWJhY2tncm91bmQ6IHZhcigtLWF0ZS1zdXJmYWNlLXNlY29uZGFyeSwgI2Y4ZjlmYSk7XG4gICAgICAgIC0tYXRlLWNvdW50ZXItYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtYm9yZGVyLCAjZTJlOGYwKTtcblxuICAgICAgICAvKiBEcmFnICYgRHJvcCAqL1xuICAgICAgICAtLWF0ZS1kcmFnLWJhY2tncm91bmQ6ICNmMGY4ZmY7XG4gICAgICAgIC0tYXRlLWRyYWctYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSwgIzI1NjNlYik7XG5cbiAgICAgICAgLyogQmxvY2txdW90ZSAqL1xuICAgICAgICAtLWF0ZS1ibG9ja3F1b3RlLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlciwgI2UyZThmMCk7XG4gICAgICAgIC0tYXRlLWJsb2NrcXVvdGUtYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5LCAjZjhmOWZhKTtcblxuICAgICAgICAvKiBDb2RlICovXG4gICAgICAgIC0tYXRlLWNvZGUtYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5LCAjZjhmOWZhKTtcbiAgICAgICAgLS1hdGUtY29kZS1jb2xvcjogdmFyKC0tYXRlLXRleHQsICMyZDM3NDgpO1xuICAgICAgICAtLWF0ZS1jb2RlLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlciwgI2UyZThmMCk7XG5cbiAgICAgICAgLS1hdGUtY29kZS1ibG9jay1iYWNrZ3JvdW5kOiAjMGYxNzJhO1xuICAgICAgICAtLWF0ZS1jb2RlLWJsb2NrLWNvbG9yOiAjZTJlOGYwO1xuICAgICAgICAtLWF0ZS1jb2RlLWJsb2NrLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlciwgI2UyZThmMCk7XG5cbiAgICAgICAgLyogSW1hZ2VzICovXG4gICAgICAgIC0tYXRlLWltYWdlLWJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgICAgIC0tYXRlLWltYWdlLXNlbGVjdGVkLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSwgIzI1NjNlYik7XG5cbiAgICAgICAgLyogU2Nyb2xsYmFycyAqL1xuICAgICAgICAtLWF0ZS1zY3JvbGxiYXItd2lkdGg6IDEwcHg7XG4gICAgICAgIC0tYXRlLXNjcm9sbGJhci10aHVtYjogdmFyKC0tYXRlLWJvcmRlciwgI2UyZThmMCk7XG4gICAgICAgIC0tYXRlLXNjcm9sbGJhci10aHVtYi1ob3ZlcjogdmFyKC0tYXRlLXRleHQtbXV0ZWQsICNhMGFlYzApO1xuICAgICAgICAtLWF0ZS1zY3JvbGxiYXItdHJhY2s6IHRyYW5zcGFyZW50O1xuXG4gICAgICAgIC8qIFRhYmxlcyAqL1xuICAgICAgICAtLWF0ZS10YWJsZS1ib3JkZXItY29sb3I6IHZhcigtLWF0ZS1ib3JkZXIsICNlMmU4ZjApO1xuICAgICAgICAtLWF0ZS10YWJsZS1oZWFkZXItYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5LCAjZjhmOWZhKTtcbiAgICAgICAgLS1hdGUtdGFibGUtaGVhZGVyLWNvbG9yOiB2YXIoLS1hdGUtdGV4dCwgIzJkMzc0OCk7XG4gICAgICAgIC0tYXRlLXRhYmxlLWNlbGwtYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgICAtLWF0ZS10YWJsZS1jZWxsLXNlbGVjdGVkLWJhY2tncm91bmQ6IGNvbG9yLW1peChcbiAgICAgICAgICBpbiBzcmdiLFxuICAgICAgICAgIHZhcigtLWF0ZS1wcmltYXJ5LCAjMjU2M2ViKSxcbiAgICAgICAgICB0cmFuc3BhcmVudCA5MCVcbiAgICAgICAgKTtcbiAgICAgICAgLS1hdGUtdGFibGUtcmVzaXplLWhhbmRsZS1jb2xvcjogdmFyKC0tYXRlLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgICAtLWF0ZS10YWJsZS1yb3ctaG92ZXItYmFja2dyb3VuZDogY29sb3ItbWl4KFxuICAgICAgICAgIGluIHNyZ2IsXG4gICAgICAgICAgdmFyKC0tYXRlLXByaW1hcnksICMyNTYzZWIpLFxuICAgICAgICAgIHRyYW5zcGFyZW50IDk1JVxuICAgICAgICApO1xuXG4gICAgICAgIC8qIEZsb2F0aW5nIFVJICYgVG9vbHRpcHMgKi9cbiAgICAgICAgLS1hdGUtdG9vbHRpcC1iZzogdmFyKC0tYXRlLWNvZGUtYmxvY2stYmFja2dyb3VuZCwgIzBmMTcyYSk7XG4gICAgICAgIC0tYXRlLXRvb2x0aXAtY29sb3I6IHZhcigtLWF0ZS1jb2RlLWJsb2NrLWNvbG9yLCAjZTJlOGYwKTtcbiAgICAgIH1cblxuICAgICAgLyogTWFudWFsIGRhcmsgbW9kZSB3aXRoIGNsYXNzIG9yIGRhdGEgYXR0cmlidXRlICovXG4gICAgICA6aG9zdCguZGFyayksXG4gICAgICA6aG9zdChbZGF0YS10aGVtZT1cImRhcmtcIl0pIHtcbiAgICAgICAgLyogPT09PT0gREFSSyBCQVNFIFRPS0VOUyA9PT09PSAqL1xuICAgICAgICAtLWF0ZS1wcmltYXJ5OiAjM2I4MmY2O1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWNvbnRyYXN0OiAjZmZmZmZmO1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWxpZ2h0OiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYXRlLXByaW1hcnkpLCB0cmFuc3BhcmVudCA4NSUpO1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWxpZ2h0ZXI6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hdGUtcHJpbWFyeSksIHRyYW5zcGFyZW50IDkyJSk7XG4gICAgICAgIC0tYXRlLXByaW1hcnktbGlnaHQtYWxwaGE6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hdGUtcHJpbWFyeSksIHRyYW5zcGFyZW50IDgwJSk7XG5cbiAgICAgICAgLS1hdGUtc3VyZmFjZTogIzAyMDYxNztcbiAgICAgICAgLS1hdGUtc3VyZmFjZS1zZWNvbmRhcnk6ICMwZjE3MmE7XG4gICAgICAgIC0tYXRlLXN1cmZhY2UtdGVydGlhcnk6ICMxZTI5M2I7XG5cbiAgICAgICAgLS1hdGUtdGV4dDogI2Y4ZmFmYztcbiAgICAgICAgLS1hdGUtdGV4dC1zZWNvbmRhcnk6ICM5NGEzYjg7XG4gICAgICAgIC0tYXRlLXRleHQtbXV0ZWQ6ICM2NDc0OGI7XG5cbiAgICAgICAgLS1hdGUtYm9yZGVyOiAjMWUyOTNiO1xuXG4gICAgICAgIC0tYXRlLWhpZ2hsaWdodC1iZzogIzg1NGQwZTtcbiAgICAgICAgLS1hdGUtaGlnaGxpZ2h0LWNvbG9yOiAjZmVmMDhhO1xuXG4gICAgICAgIC0tYXRlLWJ1dHRvbi1ob3ZlcjogIzFlMjkzYjtcbiAgICAgICAgLS1hdGUtYnV0dG9uLWFjdGl2ZTogIzBmMTcyYTtcblxuICAgICAgICAvKiA9PT09PSBNRU5VUyAoU2xhc2gvQnViYmxlKSA9PT09PSAqL1xuICAgICAgICAtLWF0ZS1tZW51LWJvcmRlcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAgICAgICAtLWF0ZS1tZW51LXNoYWRvdzogMCAyMHB4IDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMyksIDAgMTBweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuXG4gICAgICAgIC0tYXRlLWVycm9yLWNvbG9yOiAjZjg3MTcxO1xuICAgICAgICAtLWF0ZS1lcnJvci1iZzogIzQ1MGEwYTtcbiAgICAgICAgLS1hdGUtZXJyb3ItYm9yZGVyOiAjN2YxZDFkO1xuXG4gICAgICAgIC8qID09PT09IERBUksgQ09NUE9ORU5UIE9WRVJSSURFUyA9PT09PSAqL1xuICAgICAgICAtLWF0ZS1kcmFnLWJhY2tncm91bmQ6IHZhcigtLWF0ZS1zdXJmYWNlLXRlcnRpYXJ5KTtcbiAgICAgICAgLS1hdGUtZHJhZy1ib3JkZXItY29sb3I6IHZhcigtLWF0ZS1wcmltYXJ5KTtcbiAgICAgICAgLS1hdGUtYmxvY2txdW90ZS1ib3JkZXItY29sb3I6IHZhcigtLWF0ZS1wcmltYXJ5KTtcbiAgICAgICAgLS1hdGUtdG9vbGJhci1idXR0b24tYWN0aXZlLWJhY2tncm91bmQ6IHZhcigtLWF0ZS1wcmltYXJ5LWxpZ2h0KTtcbiAgICAgICAgLS1hdGUtdG9vbGJhci1idXR0b24tYWN0aXZlLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG4gICAgICAgIC0tYXRlLWJ1dHRvbi1ob3ZlcjogdmFyKC0tYXRlLXN1cmZhY2UtdGVydGlhcnkpO1xuICAgICAgICAtLWF0ZS1idXR0b24tYWN0aXZlOiB2YXIoLS1hdGUtc3VyZmFjZS1zZWNvbmRhcnkpO1xuICAgICAgICAtLWF0ZS1zY3JvbGxiYXItdGh1bWI6IHZhcigtLWF0ZS1zdXJmYWNlLXRlcnRpYXJ5KTtcbiAgICAgICAgLS1hdGUtc2Nyb2xsYmFyLXRodW1iLWhvdmVyOiB2YXIoLS1hdGUtdGV4dC1tdXRlZCk7XG4gICAgICB9XG5cbiAgICAgIC8qIEhvc3Qgc3R5bGVzIHBvdXIgZmlsbENvbnRhaW5lciAqL1xuICAgICAgOmhvc3QoLmZpbGwtY29udGFpbmVyKSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC8qIE1haW4gZWRpdG9yIGNvbnRhaW5lciAqL1xuICAgICAgLmF0ZS1lZGl0b3Ige1xuICAgICAgICBib3JkZXI6IHZhcigtLWF0ZS1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWF0ZS1ib3JkZXItY29sb3IpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtYm9yZGVyLXJhZGl1cyk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1iYWNrZ3JvdW5kKTtcbiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzIGVhc2U7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cblxuICAgICAgLyogRmxvYXRpbmcgVG9vbGJhciBNb2RlICovXG4gICAgICA6aG9zdCguZmxvYXRpbmctdG9vbGJhcikgLmF0ZS1lZGl0b3Ige1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgIH1cblxuICAgICAgLyogRmlsbCBjb250YWluZXIgbW9kZSAtIGVkaXRvciBmaWxscyBpdHMgcGFyZW50ICovXG4gICAgICA6aG9zdCguZmlsbC1jb250YWluZXIpIC5hdGUtZWRpdG9yIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCguZmlsbC1jb250YWluZXIpIC5hdGUtY29udGVudC13cmFwcGVyIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoLmZpbGwtY29udGFpbmVyKSAuYXRlLWNvbnRlbnQge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgfVxuXG4gICAgICAuYXRlLWVkaXRvcjpmb2N1cy13aXRoaW4ge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWF0ZS1mb2N1cy1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIC8qIEVkaXRvciBjb250ZW50IGFyZWEgKi9cbiAgICAgIC5hdGUtY29udGVudCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWVkaXRvci1taW4taGVpZ2h0LCAyMDBweCk7XG4gICAgICAgIGhlaWdodDogdmFyKC0tZWRpdG9yLWhlaWdodCwgYXV0byk7XG4gICAgICAgIG1heC1oZWlnaHQ6IHZhcigtLWVkaXRvci1tYXgtaGVpZ2h0LCBub25lKTtcbiAgICAgICAgb3ZlcmZsb3cteTogdmFyKC0tZWRpdG9yLW92ZXJmbG93LCB2aXNpYmxlKTtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gICAgICAgIHNjcm9sbGJhci1jb2xvcjogdmFyKC0tYXRlLXNjcm9sbGJhci10aHVtYikgdmFyKC0tYXRlLXNjcm9sbGJhci10cmFjayk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KC5pcy1kaXNhYmxlZCkgLmF0ZS1jb250ZW50IHtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0ZS1zdXJmYWNlLXRlcnRpYXJ5KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoLmlzLXJlYWRvbmx5KSAuYXRlLWNvbnRlbnQge1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIHVzZXItc2VsZWN0OiB0ZXh0O1xuICAgICAgfVxuXG4gICAgICA6aG9zdCguaXMtcmVhZG9ubHkpIC5hdGUtY29udGVudCA6Om5nLWRlZXAgLmF0ZS1saW5rIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICAgIH1cblxuICAgICAgLmF0ZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICAgIHdpZHRoOiB2YXIoLS1hdGUtc2Nyb2xsYmFyLXdpZHRoKTtcbiAgICAgIH1cblxuICAgICAgLmF0ZS1jb250ZW50LXdyYXBwZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtY29udGVudC13cmFwcGVyIC5hdGUtY29udGVudCB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc2Nyb2xsYmFyLXRyYWNrKTtcbiAgICAgIH1cblxuICAgICAgLmF0ZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1zY3JvbGxiYXItdGh1bWIpO1xuICAgICAgICBib3JkZXI6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBjb250ZW50LWJveDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgIH1cblxuICAgICAgLmF0ZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1zY3JvbGxiYXItdGh1bWItaG92ZXIpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNsaXA6IGNvbnRlbnQtYm94O1xuICAgICAgfVxuXG4gICAgICAuYXRlLWNvbnRlbnQuZHJhZy1vdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLWRyYWctYmFja2dyb3VuZCk7XG4gICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1hdGUtZHJhZy1ib3JkZXItY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAvKiBDb21wdGV1ciBkZSBjYXJhY3TDqHJlcyAqL1xuICAgICAgLmNoYXJhY3Rlci1jb3VudCB7XG4gICAgICAgIHBhZGRpbmc6IDZweCA4cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWF0ZS1jb3VudGVyLWNvbG9yKTtcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1hdGUtY291bnRlci1ib3JkZXItY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtY291bnRlci1iYWNrZ3JvdW5kKTtcbiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycyBlYXNlO1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiBjYWxjKHZhcigtLWF0ZS1ib3JkZXItcmFkaXVzKSAtIHZhcigtLWF0ZS1ib3JkZXItd2lkdGgpKTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IGNhbGModmFyKC0tYXRlLWJvcmRlci1yYWRpdXMpIC0gdmFyKC0tYXRlLWJvcmRlci13aWR0aCkpO1xuICAgICAgfVxuXG4gICAgICAuY2hhcmFjdGVyLWNvdW50LmxpbWl0LXJlYWNoZWQge1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLWVycm9yLWNvbG9yLCAjZWY0NDQ0KTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QuYXRlLWJsb2Nrcy1pbnNpZGUge1xuICAgICAgICAtLWF0ZS1jb250ZW50LWd1dHRlcjogNTRweDtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAgIDpob3N0LmF0ZS1ibG9ja3MtaW5zaWRlIHtcbiAgICAgICAgICAtLWF0ZS1jb250ZW50LWd1dHRlcjogMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgYXRlLWJsb2NrLWNvbnRyb2xzIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogU3R5bGVzIFByb3NlTWlycm9yIGF2ZWMgOmhvc3QgOjpuZy1kZWVwICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHtcbiAgICAgICAgcGFkZGluZy1pbmxpbmU6IGNhbGModmFyKC0tYXRlLWNvbnRlbnQtcGFkZGluZy1pbmxpbmUpICsgdmFyKC0tYXRlLWNvbnRlbnQtZ3V0dGVyKSk7XG4gICAgICAgIHBhZGRpbmctYmxvY2s6IHZhcigtLWF0ZS1jb250ZW50LXBhZGRpbmctYmxvY2spO1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBsaW5lLWhlaWdodDogdmFyKC0tYXRlLWxpbmUtaGVpZ2h0KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWF0ZS10ZXh0LWNvbG9yKTtcbiAgICAgICAgbWluLWhlaWdodDogMTAwJTtcbiAgICAgICAgLyogUydhc3N1cmVyIHF1ZSBsZSBjb250ZW51IHMnw6l0ZW5kIGNvcnJlY3RlbWVudCBkYW5zIHVuIGNvbnRlbmV1ciBzY3JvbGxhYmxlICovXG4gICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciA6OnNlbGVjdGlvbiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0ZS1zZWxlY3Rpb24tYmcpO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciA6Oi1tb3otc2VsZWN0aW9uIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYXRlLXNlbGVjdGlvbi1iZyk7XG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgfVxuXG4gICAgICAvKiBUaXRyZXMgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgaDEge1xuICAgICAgICBmb250LXNpemU6IDJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGgyIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgaDMge1xuICAgICAgICBmb250LXNpemU6IDEuMjVlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgaDQge1xuICAgICAgICBmb250LXNpemU6IDEuMWVtO1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgbWFyZ2luLXRvcDogMWVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBoNSxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgaDYge1xuICAgICAgICBmb250LXNpemU6IDFlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgICB9XG5cbiAgICAgIC8qIFBhcmFncmFwaGVzIGV0IGxpc3RlcyAoTm9ybWFsaXNhdGlvbiBjb250cmUgbGVzIENTUyBSZXNldHMgZ2xvYmF1eCB0eXBlIFRhaWx3aW5kKSAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBwIHtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHVsIHtcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBkaXNjO1xuICAgICAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDJlbTtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIG9sIHtcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsO1xuICAgICAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDJlbTtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHVsIHVsIHtcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdWwgdWwgdWwge1xuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBvbCBvbCB7XG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbG93ZXItYWxwaGE7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3Igb2wgb2wgb2wge1xuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IGxvd2VyLXJvbWFuO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGxpOjptYXJrZXIge1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLWxpc3QtbWFya2VyLWNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB1bFtkYXRhLXR5cGU9XCJ0YXNrTGlzdFwiXSB7XG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBociB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWF0ZS1ib3JkZXIpO1xuICAgICAgICBtYXJnaW46IDEuNWVtIDA7XG4gICAgICB9XG5cbiAgICAgIC8qIENpdGF0aW9ucyAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBibG9ja3F1b3RlIHtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1hdGUtYmxvY2txdW90ZS1ib3JkZXItY29sb3IpO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgICAgICAgbWFyZ2luOiAxZW0gMDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLWJsb2NrcXVvdGUtYmFja2dyb3VuZCk7XG4gICAgICAgIHBhZGRpbmc6IDAuNWVtIDFlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMCA0cHggNHB4IDA7XG4gICAgICB9XG5cbiAgICAgIC8qIENvZGUgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgY29kZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1jb2RlLWJhY2tncm91bmQpO1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLWNvZGUtY29sb3IpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdGUtY29kZS1ib3JkZXItY29sb3IpO1xuICAgICAgICBwYWRkaW5nOiAwLjE1ZW0gMC40ZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiSmV0QnJhaW5zIE1vbm9cIiwgXCJGaXJhIENvZGVcIiwgXCJNb25hY29cIiwgXCJDb25zb2xhc1wiLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NWVtO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHByZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1jb2RlLWJsb2NrLWJhY2tncm91bmQpO1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLWNvZGUtYmxvY2stY29sb3IpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdGUtY29kZS1ibG9jay1ib3JkZXItY29sb3IpO1xuICAgICAgICBwYWRkaW5nOiAxZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWF0ZS1ib3JkZXItcmFkaXVzKTtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgbWFyZ2luOiAxZW0gMDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBwcmUgY29kZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG5cbiAgICAgIC8qIFBsYWNlaG9sZGVyICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHAuaXMtZWRpdG9yLWVtcHR5OmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiBhdHRyKGRhdGEtcGxhY2Vob2xkZXIpO1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLXBsYWNlaG9sZGVyLWNvbG9yKTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICB9XG5cbiAgICAgIC8qIE1vZGUgbGVjdHVyZSBzZXVsZSAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvcltjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiXSB7XG4gICAgICAgIC8qIEFsbG93IGludGVyYWN0aW9uIGluIHJlYWQtb25seSBtb2RlIChsaW5rcywgbm9kZSBzZWxlY3Rpb24pICovXG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3JbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0gaW1nIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdIGEge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3JbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0gaW1nOmhvdmVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdIGltZy5Qcm9zZU1pcnJvci1zZWxlY3RlZG5vZGUge1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgfVxuXG4gICAgICAvKiBTdHlsZXMgcG91ciBsZXMgaW1hZ2VzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGltZyB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYXRlLWltYWdlLWJvcmRlci1yYWRpdXMpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGltZzpob3ZlciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlci1jb2xvcik7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgaW1nLlByb3NlTWlycm9yLXNlbGVjdGVkbm9kZSxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXphYmxlLWltYWdlLWNvbnRhaW5lci5zZWxlY3RlZCBpbWcge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWF0ZS1pbWFnZS1zZWxlY3RlZC1jb2xvcik7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC8qIEFsaWdubWVudCBTdXBwb3J0IChQcm9zZU1pcnJvciAvIEFURSBXcmFwcGVyKSAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBbZGF0YS10ZXh0LWFsaWduPVwiY2VudGVyXCJdLFxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBbZGF0YS1hbGlnbj1cImNlbnRlclwiXSB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBbZGF0YS10ZXh0LWFsaWduPVwicmlnaHRcIl0sXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIFtkYXRhLWFsaWduPVwicmlnaHRcIl0ge1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBbZGF0YS10ZXh0LWFsaWduPVwibGVmdFwiXSxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgW2RhdGEtYWxpZ249XCJsZWZ0XCJdIHtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIH1cblxuICAgICAgLyogQ29udGVuZXVyIHBvdXIgbGVzIGltYWdlcyByZWRpbWVuc2lvbm5hYmxlcyAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5yZXNpemFibGUtaW1hZ2Utd3JhcHBlciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6YWJsZS1pbWFnZS1jb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAvKiBDb250ZW5ldXIgZGVzIGNvbnRyw7RsZXMgZGUgcmVkaW1lbnNpb25uZW1lbnQgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWNvbnRyb2xzIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB6LWluZGV4OiAxMDAwO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLyogU3R5bGVzIHBvdXIgbGUgU2xhc2hDb21tYW5kQ29tcG9uZW50ICovXG4gICAgICA6Om5nLWRlZXAgLmF0ZS1zbGFzaC1kZWNvcmF0aW9uIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKFxuICAgICAgICAgIC0tYXRlLXByaW1hcnktbGlnaHQsXG4gICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWF0ZS1wcmltYXJ5LCAjMjU2M2ViKSwgdHJhbnNwYXJlbnQgOTAlKVxuICAgICAgICApO1xuICAgICAgICBwYWRkaW5nOiA0cHggOHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtc3ViLWJvcmRlci1yYWRpdXMsIDhweCk7XG4gICAgICB9XG5cbiAgICAgIDo6bmctZGVlcCAuYXRlLXNsYXNoLWRlY29yYXRpb24uaXMtZW1wdHk6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogYXR0cihkYXRhLWRlY29yYXRpb24tY29udGVudCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtdGV4dC1zZWNvbmRhcnkpO1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICB9XG5cbiAgICAgIC8qIEFmZmljaGVyIGxlcyBwb2lnbsOpZXMgYXUgaG92ZXIgKG3Dqm1lIHNpIG5vbiBzw6lsZWN0aW9ubsOpKSAtIFVuaXF1ZW1lbnQgc2kgw6lkaXRhYmxlICovXG4gICAgICA6aG9zdDpub3QoLmlzLXJlYWRvbmx5KTpub3QoLmlzLWRpc2FibGVkKVxuICAgICAgICA6Om5nLWRlZXBcbiAgICAgICAgLnJlc2l6YWJsZS1pbWFnZS1jb250YWluZXI6aG92ZXJcbiAgICAgICAgLnJlc2l6ZS1jb250cm9scyxcbiAgICAgIDpob3N0Om5vdCguaXMtcmVhZG9ubHkpOm5vdCguaXMtZGlzYWJsZWQpIDo6bmctZGVlcCBib2R5LnJlc2l6aW5nIC5yZXNpemUtY29udHJvbHMge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICAvKiBQb2lnbsOpZXMgZGUgcmVkaW1lbnNpb25uZW1lbnQgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWhhbmRsZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IDAuMzVyZW07XG4gICAgICAgIGhlaWdodDogMnJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hdGUtc3VyZmFjZSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWF0ZS1ib3JkZXItcmFkaXVzKTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB6LWluZGV4OiAxMDAxO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5yZXNpemUtaGFuZGxlOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDNweCA4cHggcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGU6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgfVxuXG4gICAgICAvKiBQb2lnbsOpZXMgZGVzIGPDtHTDqXMgYXZlYyBzY2FsZSBzw6lwYXLDqSBwb3VyIGNlbnRyYWdlICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtdzpob3ZlcixcbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWhhbmRsZS1lOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnktaG92ZXIpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtdzphY3RpdmUsXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtZTphY3RpdmUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSkgc2NhbGUoMC45KTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnktaG92ZXIpO1xuICAgICAgfVxuXG4gICAgICAvKiBQb3NpdGlvbnMgc3DDqWNpZmlxdWVzIHBvdXIgY2hhcXVlIHBvaWduw6llICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtdyB7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBsZWZ0OiAwLjM1cmVtO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgIGN1cnNvcjogdy1yZXNpemU7XG4gICAgICB9XG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtZSB7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICByaWdodDogMC4zNXJlbTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICBjdXJzb3I6IGUtcmVzaXplO1xuICAgICAgfVxuXG4gICAgICAvKiBTdHlsZXMgcG91ciBsZSByZWRpbWVuc2lvbm5lbWVudCBlbiBjb3VycyAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIGJvZHkucmVzaXppbmcge1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgY3Vyc29yOiBjcm9zc2hhaXI7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCBib2R5LnJlc2l6aW5nIC5Qcm9zZU1pcnJvciB7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgYm9keS5yZXNpemluZyAuUHJvc2VNaXJyb3IgLnJlc2l6YWJsZS1pbWFnZS1jb250YWluZXIge1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLyogU3R5bGVzIHBvdXIgbGVzIGluZm9ybWF0aW9ucyBkZSB0YWlsbGUgZCdpbWFnZSAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5pbWFnZS1zaXplLWluZm8ge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogLTIwcHg7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgcGFkZGluZzogMnB4IDZweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6YWJsZS1pbWFnZS1jb250YWluZXI6aG92ZXIgLmltYWdlLXNpemUtaW5mbyB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG4gICAgICAvKiBTdHlsZXMgcG91ciBsZXMgdGFibGVzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHtcbiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0ZCxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgdGgge1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWF0ZS10YWJsZS1ib3JkZXItY29sb3IpO1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYXRlLXRhYmxlLWJvcmRlci1jb2xvcik7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIG1pbi13aWR0aDogMWVtO1xuICAgICAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRkIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXRhYmxlLWNlbGwtYmFja2dyb3VuZCk7XG4gICAgICB9XG5cbiAgICAgIC8qIEFqb3V0ZXIgbGVzIGJvcmR1cmVzIGV4dGVybmVzIG1hbnF1YW50ZXMgcG91ciBmb3JtZXIgbGEgYm9yZHVyZSBkdSB0YWJsZWF1ICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRkOmZpcnN0LWNoaWxkLFxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0aDpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tYXRlLXRhYmxlLWJvcmRlci1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgdHI6Zmlyc3QtY2hpbGQgdGQsXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRyOmZpcnN0LWNoaWxkIHRoIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWF0ZS10YWJsZS1ib3JkZXItY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAvKiBDb2lucyBhcnJvbmRpcyAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDhweDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDhweDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogOHB4O1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA4cHg7XG4gICAgICB9XG5cbiAgICAgIC8qIEVuLXTDqnRlcyBkZSB0YWJsZSAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0aCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS10YWJsZS1oZWFkZXItYmFja2dyb3VuZCk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtdGFibGUtaGVhZGVyLWNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgLyogQ2VsbHVsZXMgc8OpbGVjdGlvbm7DqWVzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIC5zZWxlY3RlZENlbGw6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtdGFibGUtY2VsbC1zZWxlY3RlZC1iYWNrZ3JvdW5kKTtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgfVxuXG4gICAgICAvKiBQb2lnbsOpZXMgZGUgcmVkaW1lbnNpb25uZW1lbnQgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgLmNvbHVtbi1yZXNpemUtaGFuZGxlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogLTJweDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIHdpZHRoOiA0cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0ZS10YWJsZS1yZXNpemUtaGFuZGxlLWNvbG9yKTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGU6aG92ZXIgLmNvbHVtbi1yZXNpemUtaGFuZGxlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSAuY29sdW1uLXJlc2l6ZS1oYW5kbGU6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hdGUtZm9jdXMtY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAvKiBDb250YWluZXIgYXZlYyBzY3JvbGwgaG9yaXpvbnRhbCAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciAudGFibGVXcmFwcGVyIHtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgbWFyZ2luOiAxZW0gMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIC50YWJsZVdyYXBwZXIgdGFibGUge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgbWluLXdpZHRoOiA2MDBweDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgLyogUGFyYWdyYXBoZXMgZGFucyBsZXMgdGFibGVzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIC8qIFN0eWxlcyBwb3VyIGxlcyBsaWduZXMgYXZlYyBob3ZlciAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0Ym9keSB0cjpob3ZlciB0ZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0ZS10YWJsZS1yb3ctaG92ZXItYmFja2dyb3VuZCk7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhclRpcHRhcEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBDb25maWd1cmF0aW9uIGdsb2JhbGUgZGUgbCfDqWRpdGV1ciAqL1xuICBjb25maWcgPSBpbnB1dDxBdGVFZGl0b3JDb25maWc+KHt9KTtcblxuICBjb250ZW50ID0gaW5wdXQ8c3RyaW5nPihcIlwiKTtcbiAgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGVkaXRhYmxlID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZCwgdW5rbm93bj4odW5kZWZpbmVkLCB7IHRyYW5zZm9ybTogdHJhbnNmb3JtQm9vbGVhbklucHV0IH0pO1xuICBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIHVua25vd24+KHVuZGVmaW5lZCwgeyB0cmFuc2Zvcm06IHRyYW5zZm9ybUJvb2xlYW5JbnB1dCB9KTtcbiAgbWluSGVpZ2h0ID0gaW5wdXQ8bnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBoZWlnaHQgPSBpbnB1dDxudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIG1heEhlaWdodCA9IGlucHV0PG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgZmlsbENvbnRhaW5lciA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIHVua25vd24+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQm9vbGVhbklucHV0LFxuICB9KTtcbiAgc2hvd1Rvb2xiYXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybUJvb2xlYW5JbnB1dCxcbiAgfSk7XG4gIHNob3dGb290ZXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHsgdHJhbnNmb3JtOiB0cmFuc2Zvcm1Cb29sZWFuSW5wdXQgfSk7XG4gIHNob3dDaGFyYWN0ZXJDb3VudCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIHVua25vd24+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQm9vbGVhbklucHV0LFxuICB9KTtcbiAgc2hvd1dvcmRDb3VudCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIHVua25vd24+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQm9vbGVhbklucHV0LFxuICB9KTtcbiAgbWF4Q2hhcmFjdGVycyA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgZW5hYmxlT2ZmaWNlUGFzdGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybUJvb2xlYW5JbnB1dCxcbiAgfSk7XG4gIGVuYWJsZVNsYXNoQ29tbWFuZHMgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybUJvb2xlYW5JbnB1dCxcbiAgfSk7XG4gIHNsYXNoQ29tbWFuZHMgPSBpbnB1dDxBdGVTbGFzaENvbW1hbmRzQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBjdXN0b21TbGFzaENvbW1hbmRzID0gaW5wdXQ8QXRlQ3VzdG9tU2xhc2hDb21tYW5kcyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgYmxvY2tDb250cm9scyA9IGlucHV0PEF0ZUJsb2NrQ29udHJvbHNNb2RlPigpO1xuICBsb2NhbGUgPSBpbnB1dDxTdXBwb3J0ZWRMb2NhbGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGF1dG9mb2N1cyA9IGlucHV0PEF0ZUF1dG9mb2N1c01vZGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIG1vZGUgPSBpbnB1dDxcImNsYXNzaWNcIiB8IFwic2VhbWxlc3NcIiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgc2VhbWxlc3MgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHsgdHJhbnNmb3JtOiB0cmFuc2Zvcm1Cb29sZWFuSW5wdXQgfSk7XG4gIGZsb2F0aW5nVG9vbGJhciA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIHVua25vd24+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQm9vbGVhbklucHV0LFxuICB9KTtcbiAgc2hvd0VkaXRUb2dnbGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybUJvb2xlYW5JbnB1dCxcbiAgfSk7XG4gIHNwZWxsY2hlY2sgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHsgdHJhbnNmb3JtOiB0cmFuc2Zvcm1Cb29sZWFuSW5wdXQgfSk7XG5cbiAgdGlwdGFwRXh0ZW5zaW9ucyA9IGlucHV0PChFeHRlbnNpb24gfCBOb2RlIHwgTWFyaylbXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgdGlwdGFwT3B0aW9ucyA9IGlucHV0PFBhcnRpYWw8RWRpdG9yT3B0aW9ucz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLy8gTm91dmVhdXggaW5wdXRzIHBvdXIgbGVzIGJ1YmJsZSBtZW51c1xuICBzaG93QnViYmxlTWVudSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIHVua25vd24+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQm9vbGVhbklucHV0LFxuICB9KTtcbiAgYnViYmxlTWVudSA9IGlucHV0PFBhcnRpYWw8QXRlQnViYmxlTWVudUNvbmZpZz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHNob3dJbWFnZUJ1YmJsZU1lbnUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybUJvb2xlYW5JbnB1dCxcbiAgfSk7XG4gIGltYWdlQnViYmxlTWVudSA9IGlucHV0PFBhcnRpYWw8QXRlSW1hZ2VCdWJibGVNZW51Q29uZmlnPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvLyBDb25maWd1cmF0aW9uIGRlIGxhIHRvb2xiYXJcbiAgdG9vbGJhciA9IGlucHV0PFBhcnRpYWw8QXRlVG9vbGJhckNvbmZpZz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLy8gQ29uZmlndXJhdGlvbiBkZXMgbWVudXMgZGUgdGFibGVcbiAgc2hvd1RhYmxlQnViYmxlTWVudSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIHVua25vd24+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQm9vbGVhbklucHV0LFxuICB9KTtcbiAgdGFibGVCdWJibGVNZW51ID0gaW5wdXQ8UGFydGlhbDxBdGVUYWJsZUJ1YmJsZU1lbnVDb25maWc+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBzaG93Q2VsbEJ1YmJsZU1lbnUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybUJvb2xlYW5JbnB1dCxcbiAgfSk7XG4gIGNlbGxCdWJibGVNZW51ID0gaW5wdXQ8UGFydGlhbDxBdGVDZWxsQnViYmxlTWVudUNvbmZpZz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9ubmFsIHN0YXRlIGNhbGN1bGF0b3JzIHRvIGV4dGVuZCB0aGUgcmVhY3RpdmUgZWRpdG9yIHN0YXRlLlxuICAgKi9cbiAgc3RhdGVDYWxjdWxhdG9ycyA9IGlucHV0PEF0ZVN0YXRlQ2FsY3VsYXRvcltdIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8vIE5vdXZlYXUgaW5wdXQgcG91ciBsYSBjb25maWd1cmF0aW9uIGRlIGwndXBsb2FkIGQnaW1hZ2VzXG4gIGltYWdlVXBsb2FkID0gaW5wdXQ8UGFydGlhbDxBdGVJbWFnZVVwbG9hZE9wdGlvbnM+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gaGFuZGxlciBmb3IgaW1hZ2UgdXBsb2Fkcy5cbiAgICogV2hlbiBwcm92aWRlZCwgaW1hZ2VzIHdpbGwgYmUgcHJvY2Vzc2VkIHRocm91Z2ggdGhpcyBoYW5kbGVyIGluc3RlYWQgb2YgYmVpbmcgY29udmVydGVkIHRvIGJhc2U2NC5cbiAgICogVGhpcyBhbGxvd3MgeW91IHRvIHVwbG9hZCBpbWFnZXMgdG8geW91ciBvd24gc2VydmVyL3N0b3JhZ2UgYW5kIHVzZSB0aGUgcmV0dXJuZWQgVVJMLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIG15VXBsb2FkSGFuZGxlcjogSW1hZ2VVcGxvYWRIYW5kbGVyID0gYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICogICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgKiAgIGZvcm1EYXRhLmFwcGVuZCgnaW1hZ2UnLCBjb250ZXh0LmZpbGUpO1xuICAgKiAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvdXBsb2FkJywgeyBtZXRob2Q6ICdQT1NUJywgYm9keTogZm9ybURhdGEgfSk7XG4gICAqICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICogICByZXR1cm4geyBzcmM6IGRhdGEuaW1hZ2VVcmwgfTtcbiAgICogfTtcbiAgICpcbiAgICogLy8gSW4gdGVtcGxhdGU6XG4gICAqIC8vIDxhbmd1bGFyLXRpcHRhcC1lZGl0b3IgW2ltYWdlVXBsb2FkSGFuZGxlcl09XCJteVVwbG9hZEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIGltYWdlVXBsb2FkSGFuZGxlciA9IGlucHV0PEF0ZUltYWdlVXBsb2FkSGFuZGxlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBlZGl0b3IgaW5zdGFuY2UgaW4gdGhlIHJlZ2lzdHJ5LlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhIHVuaXF1ZSBJRCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICovXG4gIGVkaXRvcklkID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8vIE5vdXZlYXV4IG91dHB1dHNcbiAgY29udGVudENoYW5nZSA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIGVkaXRvckNyZWF0ZWQgPSBvdXRwdXQ8RWRpdG9yPigpO1xuICBlZGl0b3JVcGRhdGUgPSBvdXRwdXQ8eyBlZGl0b3I6IEVkaXRvcjsgdHJhbnNhY3Rpb246IHVua25vd24gfT4oKTtcbiAgZWRpdG9yRm9jdXMgPSBvdXRwdXQ8eyBlZGl0b3I6IEVkaXRvcjsgZXZlbnQ6IEZvY3VzRXZlbnQgfT4oKTtcbiAgZWRpdG9yQmx1ciA9IG91dHB1dDx7IGVkaXRvcjogRWRpdG9yOyBldmVudDogRm9jdXNFdmVudCB9PigpO1xuICBlZGl0YWJsZUNoYW5nZSA9IG91dHB1dDxib29sZWFuPigpO1xuICBpbWFnZVVwbG9hZGVkID0gb3V0cHV0PEF0ZUltYWdlVXBsb2FkUmVzdWx0PigpO1xuICAvKiogRW1pdHRlZCB3aGVuIGFuIGltYWdlIGZyb20gcGFzdGVkIEhUTUwgaXMgZHJvcHBlZCAodW5yZWFjaGFibGUgc291cmNlIG9yIGZhaWxlZCB1cGxvYWQpICovXG4gIHBhc3RlZEltYWdlUmVqZWN0ZWQgPSBvdXRwdXQ8QXRlUGFzdGVkSW1hZ2VSZWplY3Rpb24+KCk7XG5cbiAgLy8gVmlld0NoaWxkIHdpdGggc2lnbmFsXG4gIGVkaXRvckVsZW1lbnQgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oXCJlZGl0b3JFbGVtZW50XCIpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFRvb2xiYXIgLyBCdWJibGUgTWVudSBDb29yZGluYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgaGlkZUJ1YmJsZU1lbnVzKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLnNldFRvb2xiYXJJbnRlcmFjdGluZyh0cnVlKTtcbiAgfVxuXG4gIHNob3dCdWJibGVNZW51cygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5zZXRUb29sYmFySW50ZXJhY3RpbmcoZmFsc2UpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZSBzaWduYWxzIGZvciBpbnRlcm5hbCBzdGF0ZVxuICBwcml2YXRlIF9lZGl0b3IgPSBzaWduYWw8RWRpdG9yIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgX2NoYXJhY3RlckNvdW50ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgX3dvcmRDb3VudCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIF9pc0RyYWdPdmVyID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBfZWRpdG9yRnVsbHlJbml0aWFsaXplZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgX2hvdmVyZWRCbG9jayA9IHNpZ25hbDx7IG5vZGU6IFBNTm9kZTsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IHBvczogbnVtYmVyIH0gfCBudWxsPihudWxsKTtcblxuICAvLyBBbnRpLWVjaG86IHRyYWNrIGxhc3QgZW1pdHRlZCBIVE1MIHRvIHByZXZlbnQgY3Vyc29yIHJlc2V0IG9uIHBhcmVudCBlY2hvXG4gIHByaXZhdGUgbGFzdEVtaXR0ZWRIdG1sOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvLyBSZWFkLW9ubHkgYWNjZXNzIHRvIHNpZ25hbHNcbiAgcmVhZG9ubHkgZWRpdG9yID0gdGhpcy5fZWRpdG9yLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgY2hhcmFjdGVyQ291bnQgPSB0aGlzLl9jaGFyYWN0ZXJDb3VudC5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IHdvcmRDb3VudCA9IHRoaXMuX3dvcmRDb3VudC5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IGlzRHJhZ092ZXIgPSB0aGlzLl9pc0RyYWdPdmVyLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgZWRpdG9yRnVsbHlJbml0aWFsaXplZCA9IHRoaXMuX2VkaXRvckZ1bGx5SW5pdGlhbGl6ZWQuYXNSZWFkb25seSgpO1xuICByZWFkb25seSBob3ZlcmVkQmxvY2sgPSB0aGlzLl9ob3ZlcmVkQmxvY2suYXNSZWFkb25seSgpO1xuXG4gIHByaXZhdGUgX2lzRm9ybUNvbnRyb2xEaXNhYmxlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlzRm9ybUNvbnRyb2xEaXNhYmxlZCA9IHRoaXMuX2lzRm9ybUNvbnRyb2xEaXNhYmxlZC5hc1JlYWRvbmx5KCk7XG5cbiAgLy8gQ29tYmluZWQgZGlzYWJsZWQgc3RhdGUgKElucHV0ICsgRm9ybUNvbnRyb2wpXG4gIHJlYWRvbmx5IG1lcmdlZERpc2FibGVkID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gKHRoaXMuZGlzYWJsZWQoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmRpc2FibGVkKSB8fCB0aGlzLmlzRm9ybUNvbnRyb2xEaXNhYmxlZCgpXG4gICk7XG5cbiAgLy8gQ29tcHV0ZWQgZm9yIGVkaXRvciBzdGF0ZXNcbiAgaXNFZGl0b3JSZWFkeSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZWRpdG9yKCkgIT09IG51bGwpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVOSUZJRUQgQ09ORklHVVJBVElPTiBDT01QVVRFRCBQUk9QRVJUSUVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gQXBwZWFyYW5jZSAmIEZ1bmRhbWVudGFsc1xuICByZWFkb25seSBmaW5hbFNlYW1sZXNzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0VmFsID0gdGhpcy5zZWFtbGVzcygpO1xuICAgIGlmIChpbnB1dFZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gaW5wdXRWYWw7XG4gICAgfVxuXG4gICAgY29uc3QgbW9kZVZhbCA9IHRoaXMubW9kZSgpO1xuICAgIGlmIChtb2RlVmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBtb2RlVmFsID09PSBcInNlYW1sZXNzXCI7XG4gICAgfVxuXG4gICAgY29uc3QgZnJvbUNvbmZpZyA9IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkubW9kZTtcbiAgICByZXR1cm4gZnJvbUNvbmZpZyA9PT0gXCJzZWFtbGVzc1wiO1xuICB9KTtcblxuICByZWFkb25seSBmaW5hbEVkaXRhYmxlID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5lZGl0YWJsZSgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuZWRpdGFibGUgPz8gdHJ1ZVxuICApO1xuICByZWFkb25seSBmaW5hbFBsYWNlaG9sZGVyID0gY29tcHV0ZWQoXG4gICAgKCkgPT5cbiAgICAgIHRoaXMucGxhY2Vob2xkZXIoKSA/P1xuICAgICAgdGhpcy5lZmZlY3RpdmVDb25maWcoKS5wbGFjZWhvbGRlciA/P1xuICAgICAgdGhpcy5jdXJyZW50VHJhbnNsYXRpb25zKCkuZWRpdG9yLnBsYWNlaG9sZGVyXG4gICk7XG4gIHJlYWRvbmx5IGZpbmFsRmlsbENvbnRhaW5lciA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuZmlsbENvbnRhaW5lcigpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuZmlsbENvbnRhaW5lclxuICApO1xuICByZWFkb25seSBmaW5hbFNob3dGb290ZXIgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNob3dGb290ZXIoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNob3dGb290ZXIgPz8gdHJ1ZVxuICApO1xuICByZWFkb25seSBmaW5hbFNob3dFZGl0VG9nZ2xlID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93RWRpdFRvZ2dsZSgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd0VkaXRUb2dnbGUgPz8gZmFsc2VcbiAgKTtcblxuICByZWFkb25seSBmaW5hbEhlaWdodCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBoID0gdGhpcy5oZWlnaHQoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmhlaWdodDtcbiAgICByZXR1cm4gdHlwZW9mIGggPT09IFwibnVtYmVyXCIgPyBgJHtofXB4YCA6IGg7XG4gIH0pO1xuICByZWFkb25seSBmaW5hbE1pbkhlaWdodCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtaCA9IHRoaXMubWluSGVpZ2h0KCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5taW5IZWlnaHQ7XG4gICAgcmV0dXJuIHR5cGVvZiBtaCA9PT0gXCJudW1iZXJcIiA/IGAke21ofXB4YCA6IG1oO1xuICB9KTtcbiAgcmVhZG9ubHkgZmluYWxNYXhIZWlnaHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWggPSB0aGlzLm1heEhlaWdodCgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkubWF4SGVpZ2h0O1xuICAgIHJldHVybiB0eXBlb2YgbWggPT09IFwibnVtYmVyXCIgPyBgJHttaH1weGAgOiBtaDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmluYWxTcGVsbGNoZWNrID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zcGVsbGNoZWNrKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5zcGVsbGNoZWNrID8/IHRydWVcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxFbmFibGVPZmZpY2VQYXN0ZSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuZW5hYmxlT2ZmaWNlUGFzdGUoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmVuYWJsZU9mZmljZVBhc3RlID8/IHRydWVcbiAgKTtcblxuICAvLyBGZWF0dXJlc1xuICByZWFkb25seSBmaW5hbFNob3dUb29sYmFyID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93VG9vbGJhcigpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd1Rvb2xiYXIgPz8gdHJ1ZVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsVG9vbGJhckNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBmcm9tSW5wdXQgPSB0aGlzLnRvb2xiYXIoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnID0gdGhpcy5lZmZlY3RpdmVDb25maWcoKS50b29sYmFyO1xuICAgIGNvbnN0IGJhc2UgPSBBVEVfREVGQVVMVF9UT09MQkFSX0NPTkZJRztcblxuICAgIGlmIChmcm9tSW5wdXQgJiYgT2JqZWN0LmtleXMoZnJvbUlucHV0KS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tSW5wdXQgfTtcbiAgICB9XG4gICAgaWYgKGZyb21Db25maWcpIHtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLmZyb21Db25maWcgfTtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbmFsRmxvYXRpbmdUb29sYmFyID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5mbG9hdGluZ1Rvb2xiYXIoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmZsb2F0aW5nVG9vbGJhciA/PyBmYWxzZVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsU2hvd0J1YmJsZU1lbnUgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNob3dCdWJibGVNZW51KCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5zaG93QnViYmxlTWVudSA/PyB0cnVlXG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxCdWJibGVNZW51Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZyb21JbnB1dCA9IHRoaXMuYnViYmxlTWVudSgpO1xuICAgIGNvbnN0IGZyb21Db25maWcgPSB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmJ1YmJsZU1lbnU7XG4gICAgY29uc3QgYmFzZSA9IEFURV9ERUZBVUxUX0JVQkJMRV9NRU5VX0NPTkZJRztcblxuICAgIGlmIChmcm9tSW5wdXQgJiYgT2JqZWN0LmtleXMoZnJvbUlucHV0KS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tSW5wdXQgfTtcbiAgICB9XG4gICAgaWYgKGZyb21Db25maWcpIHtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLmZyb21Db25maWcgfTtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbmFsU2hvd0ltYWdlQnViYmxlTWVudSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2hvd0ltYWdlQnViYmxlTWVudSgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd0ltYWdlQnViYmxlTWVudSA/PyB0cnVlXG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxJbWFnZUJ1YmJsZU1lbnVDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZnJvbUlucHV0ID0gdGhpcy5pbWFnZUJ1YmJsZU1lbnUoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnID0gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5pbWFnZUJ1YmJsZU1lbnU7XG4gICAgY29uc3QgYmFzZSA9IEFURV9ERUZBVUxUX0lNQUdFX0JVQkJMRV9NRU5VX0NPTkZJRztcblxuICAgIGlmIChmcm9tSW5wdXQgJiYgT2JqZWN0LmtleXMoZnJvbUlucHV0KS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tSW5wdXQgfTtcbiAgICB9XG4gICAgaWYgKGZyb21Db25maWcpIHtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLmZyb21Db25maWcgfTtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbmFsU2hvd1RhYmxlQnViYmxlTWVudSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2hvd1RhYmxlQnViYmxlTWVudSgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd1RhYmxlTWVudSA/PyB0cnVlXG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxUYWJsZUJ1YmJsZU1lbnVDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZnJvbUlucHV0ID0gdGhpcy50YWJsZUJ1YmJsZU1lbnUoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnID0gdGhpcy5lZmZlY3RpdmVDb25maWcoKS50YWJsZUJ1YmJsZU1lbnU7XG4gICAgY29uc3QgYmFzZSA9IEFURV9ERUZBVUxUX1RBQkxFX01FTlVfQ09ORklHO1xuXG4gICAgaWYgKGZyb21JbnB1dCAmJiBPYmplY3Qua2V5cyhmcm9tSW5wdXQpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLmZyb21JbnB1dCB9O1xuICAgIH1cbiAgICBpZiAoZnJvbUNvbmZpZykge1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgLi4uZnJvbUNvbmZpZyB9O1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmluYWxTaG93Q2VsbEJ1YmJsZU1lbnUgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNob3dDZWxsQnViYmxlTWVudSgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd0NlbGxNZW51ID8/IHRydWVcbiAgKTtcblxuICByZWFkb25seSBmaW5hbENlbGxCdWJibGVNZW51Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZyb21JbnB1dCA9IHRoaXMuY2VsbEJ1YmJsZU1lbnUoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnID0gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5jZWxsQnViYmxlTWVudTtcbiAgICBjb25zdCBiYXNlID0gQVRFX0RFRkFVTFRfQ0VMTF9NRU5VX0NPTkZJRztcblxuICAgIGlmIChmcm9tSW5wdXQgJiYgT2JqZWN0LmtleXMoZnJvbUlucHV0KS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tSW5wdXQgfTtcbiAgICB9XG4gICAgaWYgKGZyb21Db25maWcpIHtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLmZyb21Db25maWcgfTtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbmFsRW5hYmxlU2xhc2hDb21tYW5kcyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuZW5hYmxlU2xhc2hDb21tYW5kcygpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuZW5hYmxlU2xhc2hDb21tYW5kcyA/PyB0cnVlXG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxTbGFzaENvbW1hbmRzQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZyb21JbnB1dENvbXBvbmVudCA9IHRoaXMuY3VzdG9tU2xhc2hDb21tYW5kcygpO1xuICAgIGNvbnN0IGZyb21Db25maWdDb21wb25lbnQgPSB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmN1c3RvbVNsYXNoQ29tbWFuZHM7XG4gICAgY29uc3QgY3VzdG9tQ29uZmlnID0gZnJvbUlucHV0Q29tcG9uZW50ID8/IGZyb21Db25maWdDb21wb25lbnQ7XG5cbiAgICBpZiAoY3VzdG9tQ29uZmlnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQ29uZmlnO1xuICAgIH1cblxuICAgIGNvbnN0IGZyb21JbnB1dE9wdGlvbnMgPSB0aGlzLnNsYXNoQ29tbWFuZHMoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnT3B0aW9ucyA9IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2xhc2hDb21tYW5kcztcbiAgICBjb25zdCBiYXNlQ29uZmlnID1cbiAgICAgIGZyb21JbnB1dE9wdGlvbnMgJiYgT2JqZWN0LmtleXMoZnJvbUlucHV0T3B0aW9ucykubGVuZ3RoID4gMFxuICAgICAgICA/IGZyb21JbnB1dE9wdGlvbnNcbiAgICAgICAgOiBmcm9tQ29uZmlnT3B0aW9ucztcblxuICAgIHJldHVybiB7XG4gICAgICBjb21tYW5kczogZmlsdGVyU2xhc2hDb21tYW5kcyhcbiAgICAgICAgYmFzZUNvbmZpZyB8fCB7fSxcbiAgICAgICAgdGhpcy5pMThuU2VydmljZSxcbiAgICAgICAgdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UsXG4gICAgICAgIHRoaXMuZmluYWxJbWFnZVVwbG9hZENvbmZpZygpXG4gICAgICApLFxuICAgIH07XG4gIH0pO1xuXG4gIC8vIEJlaGF2aW9yXG4gIHJlYWRvbmx5IGZpbmFsQXV0b2ZvY3VzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdXRvZm9jdXMoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmF1dG9mb2N1cyk7XG4gIHJlYWRvbmx5IGZpbmFsTWF4Q2hhcmFjdGVycyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMubWF4Q2hhcmFjdGVycygpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkubWF4Q2hhcmFjdGVyc1xuICApO1xuICByZWFkb25seSBmaW5hbEJsb2NrQ29udHJvbHMgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmJsb2NrQ29udHJvbHMoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmJsb2NrQ29udHJvbHMgPz8gXCJub25lXCJcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxTaG93Q2hhcmFjdGVyQ291bnQgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNob3dDaGFyYWN0ZXJDb3VudCgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd0NoYXJhY3RlckNvdW50ID8/IHRydWVcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxTaG93V29yZENvdW50ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93V29yZENvdW50KCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5zaG93V29yZENvdW50ID8/IHRydWVcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxMb2NhbGUgPSBjb21wdXRlZChcbiAgICAoKSA9PiAodGhpcy5sb2NhbGUoKSBhcyBTdXBwb3J0ZWRMb2NhbGUpID8/ICh0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmxvY2FsZSBhcyBTdXBwb3J0ZWRMb2NhbGUpXG4gICk7XG5cbiAgLy8gRXh0ZW5zaW9ucyAmIE9wdGlvbnNcbiAgcmVhZG9ubHkgZmluYWxUaXB0YXBFeHRlbnNpb25zID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy50aXB0YXBFeHRlbnNpb25zKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS50aXB0YXBFeHRlbnNpb25zID8/IFtdXG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxUaXB0YXBPcHRpb25zID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy50aXB0YXBPcHRpb25zKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS50aXB0YXBPcHRpb25zID8/IHt9XG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxTdGF0ZUNhbGN1bGF0b3JzID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zdGF0ZUNhbGN1bGF0b3JzKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5zdGF0ZUNhbGN1bGF0b3JzID8/IFtdXG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxBbmd1bGFyTm9kZXNDb25maWcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmFuZ3VsYXJOb2RlcyA/PyBbXSk7XG5cbiAgLy8gSW1hZ2UgVXBsb2FkXG4gIHJlYWRvbmx5IGZpbmFsSW1hZ2VVcGxvYWRDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZnJvbUlucHV0ID0gdGhpcy5pbWFnZVVwbG9hZCgpO1xuICAgIGNvbnN0IGZyb21Db25maWcgPSB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmltYWdlVXBsb2FkO1xuICAgIGNvbnN0IGJhc2UgPSBBVEVfREVGQVVMVF9JTUFHRV9VUExPQURfQ09ORklHO1xuXG4gICAgY29uc3QgbWVyZ2VkID0ge1xuICAgICAgLi4uYmFzZSxcbiAgICAgIC4uLmZyb21Db25maWcsXG4gICAgICAuLi5mcm9tSW5wdXQsXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tZXJnZWQsXG4gICAgICBtYXhTaXplOiAobWVyZ2VkLm1heFNpemUgPz8gNSkgKiAxMDI0ICogMTAyNCwgLy8gQ29udmVydCBNQiB0byBieXRlcyBmb3IgaW50ZXJuYWwgc2VydmljZVxuICAgIH07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbmFsSW1hZ2VVcGxvYWRIYW5kbGVyID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5pbWFnZVVwbG9hZEhhbmRsZXIoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmltYWdlVXBsb2FkPy5oYW5kbGVyXG4gICk7XG5cbiAgLy8gQ29tcHV0ZWQgZm9yIGN1cnJlbnQgdHJhbnNsYXRpb25zIChhbGxvd3MgcGVyLWluc3RhbmNlIG92ZXJyaWRlIHZpYSBjb25maWcgb3IgaW5wdXQpXG4gIHJlYWRvbmx5IGN1cnJlbnRUcmFuc2xhdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbG9jYWxlT3ZlcnJpZGUgPSB0aGlzLmZpbmFsTG9jYWxlKCk7XG4gICAgaWYgKGxvY2FsZU92ZXJyaWRlKSB7XG4gICAgICBjb25zdCBhbGxUcmFuc2xhdGlvbnMgPSB0aGlzLmkxOG5TZXJ2aWNlLmFsbFRyYW5zbGF0aW9ucygpO1xuICAgICAgcmV0dXJuIGFsbFRyYW5zbGF0aW9uc1tsb2NhbGVPdmVycmlkZV0gfHwgdGhpcy5pMThuU2VydmljZS50cmFuc2xhdGlvbnMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaTE4blNlcnZpY2UudHJhbnNsYXRpb25zKCk7XG4gIH0pO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIC8vIE5nQ29udHJvbCBmb3IgbWFuYWdlbWVudCBvZiBGb3JtQ29udHJvbHNcbiAgcHJpdmF0ZSBuZ0NvbnRyb2wgPSBpbmplY3QoTmdDb250cm9sLCB7IHNlbGY6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHJlYWRvbmx5IGkxOG5TZXJ2aWNlID0gaW5qZWN0KEF0ZUkxOG5TZXJ2aWNlKTtcbiAgcmVhZG9ubHkgZWRpdG9yQ29tbWFuZHNTZXJ2aWNlID0gaW5qZWN0KEF0ZUVkaXRvckNvbW1hbmRzU2VydmljZSk7XG4gIC8vIEFjY2VzcyBlZGl0b3Igc3RhdGUgdmlhIHNlcnZpY2VcbiAgcmVhZG9ubHkgZWRpdG9yU3RhdGUgPSB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5lZGl0b3JTdGF0ZTtcblxuICBwcml2YXRlIGVkaXRvclJlZ2lzdHJ5ID0gaW5qZWN0KEF0ZUVkaXRvclJlZ2lzdHJ5KTtcbiAgcHJpdmF0ZSBpY29uUmVnaXN0cnkgPSBpbmplY3QoQXRlSWNvblJlZ2lzdHJ5KTtcbiAgcHJpdmF0ZSBfcmVnaXN0ZXJlZElkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSByZWdpc3RlcmVkSWQgPSB0aGlzLl9yZWdpc3RlcmVkSWQuYXNSZWFkb25seSgpO1xuXG4gIHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIGdsb2JhbENvbmZpZyA9IGluamVjdChBVEVfR0xPQkFMX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKipcbiAgICogRmluYWwgbWVyZ2VkIGNvbmZpZ3VyYXRpb24uXG4gICAqIFByaW9yaXR5OiBJbnB1dCBbY29uZmlnXSA+IEdsb2JhbCBjb25maWcgdmlhIHByb3ZpZGVBdGVFZGl0b3IoKVxuICAgKi9cbiAgcmVhZG9ubHkgZWZmZWN0aXZlQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZyb21JbnB1dCA9IHRoaXMuY29uZmlnKCk7XG4gICAgY29uc3QgZnJvbUdsb2JhbCA9IHRoaXMuZ2xvYmFsQ29uZmlnIHx8IHt9O1xuICAgIHJldHVybiB7IC4uLkFURV9ERUZBVUxUX0NPTkZJRywgLi4uZnJvbUdsb2JhbCwgLi4uZnJvbUlucHV0IH07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIEVmZmVjdCB0byB1cGRhdGUgZWRpdG9yIGNvbnRlbnQgKHdpdGggYW50aS1lY2hvKVxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudCgpOyAvLyBTb2xlIHJlYWN0aXZlIGRlcGVuZGVuY3lcblxuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgICAgICAgY29uc3QgaGFzRm9ybUNvbnRyb2wgPSAhISh0aGlzLm5nQ29udHJvbCBhcyB7IGNvbnRyb2w/OiB1bmtub3duIH0pPy5jb250cm9sO1xuXG4gICAgICAgICAgaWYgKCFlZGl0b3IgfHwgY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQW50aS3DqWNobyA6IG9uIGlnbm9yZSBjZSBxdSdvbiB2aWVudCBkJ8OpbWV0dHJlIG5vdXMtbcOqbWVzXG4gICAgICAgICAgaWYgKGNvbnRlbnQgPT09IHRoaXMubGFzdEVtaXR0ZWRIdG1sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRG91YmxlIHPDqWN1cml0w6kgOiBvbiB2w6lyaWZpZSBsZSBjb250ZW51IGFjdHVlbCBkZSBsJ8OpZGl0ZXVyXG4gICAgICAgICAgaWYgKGNvbnRlbnQgPT09IGVkaXRvci5nZXRIVE1MKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBEbyBub3Qgb3ZlcndyaXRlIGNvbnRlbnQgaWYgd2UgaGF2ZSBhIEZvcm1Db250cm9sIGFuZCBjb250ZW50IGlzIGVtcHR5XG4gICAgICAgICAgaWYgKGhhc0Zvcm1Db250cm9sICYmICFjb250ZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQoY29udGVudCwgeyBlbWl0VXBkYXRlOiBmYWxzZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8vIEVmZmVjdCB0byB1cGRhdGUgaGVpZ2h0IHByb3BlcnRpZXNcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IHRoaXMuZmluYWxNaW5IZWlnaHQoKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5maW5hbEhlaWdodCgpO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLmZpbmFsTWF4SGVpZ2h0KCk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVkaXRvckVsZW1lbnQoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAvLyBBdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZSBpZiBzY3JvbGwgaXMgbmVlZGVkXG4gICAgICAgIGNvbnN0IG5lZWRzU2Nyb2xsID0gaGVpZ2h0ICE9PSB1bmRlZmluZWQgfHwgbWF4SGVpZ2h0ICE9PSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwiLS1lZGl0b3ItbWluLWhlaWdodFwiLCBtaW5IZWlnaHQgPz8gXCJhdXRvXCIpO1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCItLWVkaXRvci1oZWlnaHRcIiwgaGVpZ2h0ID8/IFwiYXV0b1wiKTtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwiLS1lZGl0b3ItbWF4LWhlaWdodFwiLCBtYXhIZWlnaHQgPz8gXCJub25lXCIpO1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCItLWVkaXRvci1vdmVyZmxvd1wiLCBuZWVkc1Njcm9sbCA/IFwiYXV0b1wiIDogXCJ2aXNpYmxlXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8vIEVmZmVjdCB0byBtb25pdG9yIGVkaXRhYmlsaXR5IGNoYW5nZXNcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRFZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgICAgICAvLyBBbiBlZGl0b3IgaXMgXCJlZGl0YWJsZVwiIGlmIGl0J3Mgbm90IGRpc2FibGVkIGFuZCBlZGl0YWJsZSBtb2RlIGlzIE9OXG4gICAgICAgIGNvbnN0IGlzRWRpdGFibGUgPSB0aGlzLmZpbmFsRWRpdGFibGUoKSAmJiAhdGhpcy5tZXJnZWREaXNhYmxlZCgpO1xuICAgICAgICAvLyBBbiBlZGl0b3IgaXMgXCJyZWFkb25seVwiIGlmIGl0J3MgZXhwbGljaXRseSBub24tZWRpdGFibGUgYW5kIG5vdCBkaXNhYmxlZFxuICAgICAgICAvLyBjb25zdCBpc1JlYWRPbmx5ID0gIXRoaXMuZmluYWxFZGl0YWJsZSgpICYmICF0aGlzLm1lcmdlZERpc2FibGVkKCk7IC8vIFVudXNlZCB2YXJpYWJsZVxuXG4gICAgICAgIGlmIChjdXJyZW50RWRpdG9yKSB7XG4gICAgICAgICAgdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2Uuc2V0RWRpdGFibGUoY3VycmVudEVkaXRvciwgaXNFZGl0YWJsZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgLy8gRWZmZWN0IHRvIHN5bmNocm9uaXplIGltYWdlIHVwbG9hZCBoYW5kbGVyIHdpdGggdGhlIHNlcnZpY2VcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmZpbmFsSW1hZ2VVcGxvYWRIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLnVwbG9hZEhhbmRsZXIgPSBoYW5kbGVyIHx8IG51bGw7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8vIEVmZmVjdCB0byB1cGRhdGUgY2hhcmFjdGVyIGNvdW50IGxpbWl0IGR5bmFtaWNhbGx5XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgICAgICBjb25zdCBsaW1pdCA9IHRoaXMuZmluYWxNYXhDaGFyYWN0ZXJzKCk7XG5cbiAgICAgICAgaWYgKGVkaXRvciAmJiBlZGl0b3IuZXh0ZW5zaW9uTWFuYWdlcikge1xuICAgICAgICAgIGNvbnN0IGNoYXJhY3RlckNvdW50RXh0ZW5zaW9uID0gZWRpdG9yLmV4dGVuc2lvbk1hbmFnZXIuZXh0ZW5zaW9ucy5maW5kKFxuICAgICAgICAgICAgZXh0ID0+IGV4dC5uYW1lID09PSBcImNoYXJhY3RlckNvdW50XCJcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGNoYXJhY3RlckNvdW50RXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICBjaGFyYWN0ZXJDb3VudEV4dGVuc2lvbi5vcHRpb25zLmxpbWl0ID0gbGltaXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8vIEVmZmVjdCB0byByZS1pbml0aWFsaXplIGVkaXRvciB3aGVuIHRlY2huaWNhbCBjb25maWd1cmF0aW9uIGNoYW5nZXNcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIE1vbml0b3IgdGVjaG5pY2FsIGRlcGVuZGVuY2llc1xuICAgICAgICB0aGlzLmZpbmFsVGlwdGFwRXh0ZW5zaW9ucygpO1xuICAgICAgICB0aGlzLmZpbmFsVGlwdGFwT3B0aW9ucygpO1xuICAgICAgICB0aGlzLmZpbmFsQW5ndWxhck5vZGVzQ29uZmlnKCk7XG4gICAgICAgIHRoaXMuZmluYWxCbG9ja0NvbnRyb2xzKCk7XG5cbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAvLyBPbmx5IGlmIGFscmVhZHkgaW5pdGlhbGl6ZWQgKHBvc3QgQWZ0ZXJWaWV3SW5pdClcbiAgICAgICAgICBpZiAodGhpcy5lZGl0b3JGdWxseUluaXRpYWxpemVkKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRFZGl0b3IpIHtcbiAgICAgICAgICAgICAgY3VycmVudEVkaXRvci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgIHRoaXMuX2VkaXRvckZ1bGx5SW5pdGlhbGl6ZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgdGhpcy5pbml0RWRpdG9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2Uub25JbWFnZVVwbG9hZGVkID0gcmVzdWx0ID0+IHtcbiAgICAgIHRoaXMuaW1hZ2VVcGxvYWRlZC5lbWl0KHJlc3VsdCk7XG4gICAgfTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBMYSB2dWUgZXN0IGTDqWrDoCBjb21wbMOodGVtZW50IGluaXRpYWxpc8OpZSBkYW5zIG5nQWZ0ZXJWaWV3SW5pdFxuICAgIC8vIEluaXRpYWxpc2VyIGwnw6lkaXRldXJcbiAgICB0aGlzLmluaXRFZGl0b3IoKTtcblxuICAgIC8vIFMnYWJvbm5lciBhdXggY2hhbmdlbWVudHMgZHUgRm9ybUNvbnRyb2xcbiAgICB0aGlzLnNldHVwRm9ybUNvbnRyb2xTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNvbnN0IGN1cnJlbnRFZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmIChjdXJyZW50RWRpdG9yKSB7XG4gICAgICBjdXJyZW50RWRpdG9yLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5fZWRpdG9yRnVsbHlJbml0aWFsaXplZC5zZXQoZmFsc2UpO1xuXG4gICAgLy8gVW5yZWdpc3RlciBmcm9tIHRoZSBnbG9iYWwgcmVnaXN0cnlcbiAgICBjb25zdCBpZCA9IHRoaXMucmVnaXN0ZXJlZElkKCk7XG4gICAgaWYgKGlkKSB7XG4gICAgICB0aGlzLmVkaXRvclJlZ2lzdHJ5LnVucmVnaXN0ZXIoaWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdEVkaXRvcigpIHtcbiAgICBjb25zdCBleHRlbnNpb25zOiAoRXh0ZW5zaW9uIHwgTm9kZSB8IE1hcmspW10gPSBbXG4gICAgICBTdGFydGVyS2l0LmNvbmZpZ3VyZSh7XG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICBvcGVuT25DbGljazogZmFsc2UsXG4gICAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIGNsYXNzOiBcImF0ZS1saW5rXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgVGV4dFN0eWxlLFxuICAgICAgQ29sb3IuY29uZmlndXJlKHtcbiAgICAgICAgdHlwZXM6IFtcInRleHRTdHlsZVwiXSxcbiAgICAgIH0pLFxuICAgICAgUGxhY2Vob2xkZXIuY29uZmlndXJlKHtcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMuZmluYWxQbGFjZWhvbGRlcigpLFxuICAgICAgfSksXG4gICAgICBTdXBlcnNjcmlwdCxcbiAgICAgIFN1YnNjcmlwdCxcbiAgICAgIFRleHRBbGlnbi5jb25maWd1cmUoe1xuICAgICAgICB0eXBlczogW1wiaGVhZGluZ1wiLCBcInBhcmFncmFwaFwiLCBcInJlc2l6YWJsZUltYWdlXCJdLFxuICAgICAgfSksXG4gICAgICBBdGVMaW5rQ2xpY2tCZWhhdmlvcixcbiAgICAgIEhpZ2hsaWdodC5jb25maWd1cmUoe1xuICAgICAgICBtdWx0aWNvbG9yOiB0cnVlLFxuICAgICAgICBIVE1MQXR0cmlidXRlczoge1xuICAgICAgICAgIGNsYXNzOiBcImF0ZS1oaWdobGlnaHRcIixcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgQXRlUmVzaXphYmxlSW1hZ2UuY29uZmlndXJlKHtcbiAgICAgICAgaW5saW5lOiBmYWxzZSxcbiAgICAgICAgYWxsb3dCYXNlNjQ6IHRydWUsXG4gICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgY2xhc3M6IFwiYXRlLWltYWdlXCIsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIEF0ZVBhc3RlZEltYWdlLmNvbmZpZ3VyZSh7XG4gICAgICAgIHNob3VsZFJlaG9zdDogKCkgPT4gdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UuaGFzVXBsb2FkSGFuZGxlcixcbiAgICAgICAgcmVob3N0OiBmaWxlID0+IHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLnJlaG9zdEltYWdlKGZpbGUsIHRoaXMuZ2V0SW1hZ2VVcGxvYWRPcHRpb25zKCkpLFxuICAgICAgICBvblJlamVjdGVkOiByZWplY3Rpb24gPT4gdGhpcy5wYXN0ZWRJbWFnZVJlamVjdGVkLmVtaXQocmVqZWN0aW9uKSxcbiAgICAgIH0pLFxuICAgICAgQXRlVXBsb2FkUHJvZ3Jlc3MuY29uZmlndXJlKHtcbiAgICAgICAgaXNVcGxvYWRpbmc6ICgpID0+IHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLmlzVXBsb2FkaW5nKCksXG4gICAgICAgIHVwbG9hZFByb2dyZXNzOiAoKSA9PiB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS51cGxvYWRQcm9ncmVzcygpLFxuICAgICAgICB1cGxvYWRNZXNzYWdlOiAoKSA9PiB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS51cGxvYWRNZXNzYWdlKCksXG4gICAgICAgIGljb25IdG1sOiAoKSA9PiB0aGlzLmljb25SZWdpc3RyeS5odG1sKFwiaW1hZ2VVcGxvYWRcIiwgXCJzcGlubmluZ1wiKSxcbiAgICAgIH0pLFxuICAgICAgQXRlVGFibGVFeHRlbnNpb24sXG4gICAgICByZWdpc3RlckFuZ3VsYXJDb21wb25lbnQodGhpcy5pbmplY3RvciwgQXRlVG9jTm9kZU9wdGlvbnMpLFxuICAgICAgQXRlVGlwdGFwU3RhdGVFeHRlbnNpb24uY29uZmlndXJlKHtcbiAgICAgICAgb25VcGRhdGU6IHN0YXRlID0+IHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLnVwZGF0ZVN0YXRlKHN0YXRlKSxcbiAgICAgICAgY2FsY3VsYXRvcnM6IFtcbiAgICAgICAgICBBdGVTZWxlY3Rpb25DYWxjdWxhdG9yLFxuICAgICAgICAgIEF0ZU1hcmtzQ2FsY3VsYXRvcixcbiAgICAgICAgICBBdGVUYWJsZUNhbGN1bGF0b3IsXG4gICAgICAgICAgQXRlSW1hZ2VDYWxjdWxhdG9yLFxuICAgICAgICAgIEF0ZVN0cnVjdHVyZUNhbGN1bGF0b3IsXG4gICAgICAgICAgQXRlRGlzY292ZXJ5Q2FsY3VsYXRvcixcbiAgICAgICAgICAuLi50aGlzLmZpbmFsU3RhdGVDYWxjdWxhdG9ycygpLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIGlmICh0aGlzLmZpbmFsQmxvY2tDb250cm9scygpICE9PSBcIm5vbmVcIikge1xuICAgICAgZXh0ZW5zaW9ucy5wdXNoKFxuICAgICAgICBBdGVCbG9ja0NvbnRyb2xzRXh0ZW5zaW9uLmNvbmZpZ3VyZSh7XG4gICAgICAgICAgb25Ib3ZlcjogZGF0YSA9PiB0aGlzLl9ob3ZlcmVkQmxvY2suc2V0KGRhdGEpLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBam91dGVyIGwnZXh0ZW5zaW9uIE9mZmljZSBQYXN0ZSBzaSBhY3RpdsOpZVxuICAgIGlmICh0aGlzLmZpbmFsRW5hYmxlT2ZmaWNlUGFzdGUoKSkge1xuICAgICAgZXh0ZW5zaW9ucy5wdXNoKFxuICAgICAgICBPZmZpY2VQYXN0ZS5jb25maWd1cmUoe1xuICAgICAgICAgIC8vIENvbmZpZ3VyYXRpb24gcGFyIGTDqWZhdXQgcG91ciB1bmUgbWVpbGxldXJlIGNvbXBhdGliaWxpdMOpXG4gICAgICAgICAgdHJhbnNmb3JtUGFzdGVkSFRNTDogdHJ1ZSxcbiAgICAgICAgICB0cmFuc2Zvcm1QYXN0ZWRUZXh0OiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maW5hbFNob3dDaGFyYWN0ZXJDb3VudCgpIHx8IHRoaXMuZmluYWxTaG93V29yZENvdW50KCkpIHtcbiAgICAgIGV4dGVuc2lvbnMucHVzaChcbiAgICAgICAgQ2hhcmFjdGVyQ291bnQuY29uZmlndXJlKHtcbiAgICAgICAgICBsaW1pdDogdGhpcy5maW5hbE1heENoYXJhY3RlcnMoKSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXIgYXV0b21hdGljIG5vZGUgdmlld3MgZnJvbSBjb25maWdcbiAgICBjb25zdCBhdXRvTm9kZVZpZXdzID0gdGhpcy5maW5hbEFuZ3VsYXJOb2Rlc0NvbmZpZygpO1xuICAgIGF1dG9Ob2RlVmlld3MuZm9yRWFjaCgocmVnOiBBdGVBbmd1bGFyTm9kZSkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9XG4gICAgICAgIHR5cGVvZiByZWcgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8geyBjb21wb25lbnQ6IHJlZyBhcyBUeXBlPHVua25vd24+IH1cbiAgICAgICAgICA6IChyZWcgYXMgUmVnaXN0ZXJBbmd1bGFyQ29tcG9uZW50T3B0aW9uczx1bmtub3duPik7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IHJlZ2lzdGVyQW5ndWxhckNvbXBvbmVudCh0aGlzLmluamVjdG9yLCBvcHRpb25zKTtcbiAgICAgICAgZXh0ZW5zaW9ucy5wdXNoKGV4dGVuc2lvbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbQVRFXSBGYWlsZWQgdG8gYXV0by1yZWdpc3RlciBub2RlIHZpZXc6XCIsIGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQWxsb3cgYWRkaXRpb24gb2YgY3VzdG9tIGV4dGVuc2lvbnMsIGJ1dCBhdm9pZCBkdXBsaWNhdGVzIGJ5IGZpbHRlcmluZyBieSBuYW1lXG4gICAgY29uc3QgY3VzdG9tRXh0ZW5zaW9ucyA9IHRoaXMuZmluYWxUaXB0YXBFeHRlbnNpb25zKCk7XG4gICAgaWYgKGN1c3RvbUV4dGVuc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXhpc3RpbmdOYW1lcyA9IG5ldyBTZXQoXG4gICAgICAgIGV4dGVuc2lvbnNcbiAgICAgICAgICAubWFwKChleHQ6IEV4dGVuc2lvbiB8IE5vZGUgfCBNYXJrKSA9PiAoZXh0IGFzIHsgbmFtZT86IHN0cmluZyB9KT8ubmFtZSlcbiAgICAgICAgICAuZmlsdGVyKChuYW1lKTogbmFtZSBpcyBzdHJpbmcgPT4gISFuYW1lKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgdG9BZGQgPSBjdXN0b21FeHRlbnNpb25zLmZpbHRlcigoZXh0OiBFeHRlbnNpb24gfCBOb2RlIHwgTWFyaykgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gKGV4dCBhcyB7IG5hbWU/OiBzdHJpbmcgfSk/Lm5hbWU7XG4gICAgICAgIHJldHVybiAhbmFtZSB8fCAhZXhpc3RpbmdOYW1lcy5oYXMobmFtZSk7XG4gICAgICB9KTtcblxuICAgICAgZXh0ZW5zaW9ucy5wdXNoKC4uLnRvQWRkKTtcbiAgICB9XG5cbiAgICAvLyBBbHNvIGFsbG93IGFueSB0aXB0YXAgdXNlciBvcHRpb25zXG4gICAgY29uc3QgdXNlck9wdGlvbnMgPSB0aGlzLmZpbmFsVGlwdGFwT3B0aW9ucygpO1xuICAgIGNvbnN0IHVzZXJFZGl0b3JQcm9wcyA9IHVzZXJPcHRpb25zLmVkaXRvclByb3BzO1xuICAgIGNvbnN0IHVzZXJIYW5kbGVQYXN0ZSA9IHVzZXJFZGl0b3JQcm9wcz8uaGFuZGxlUGFzdGU7XG4gICAgY29uc3QgdXNlckhhbmRsZURPTVBhc3RlID0gdXNlckVkaXRvclByb3BzPy5oYW5kbGVET01FdmVudHM/LnBhc3RlO1xuXG4gICAgdHlwZSBFZGl0b3JIYW5kbGVQYXN0ZSA9IE5vbk51bGxhYmxlPE5vbk51bGxhYmxlPEVkaXRvck9wdGlvbnNbXCJlZGl0b3JQcm9wc1wiXT5bXCJoYW5kbGVQYXN0ZVwiXT47XG4gICAgdHlwZSBFZGl0b3JET01QYXN0ZUhhbmRsZXIgPSBOb25OdWxsYWJsZTxcbiAgICAgIE5vbk51bGxhYmxlPE5vbk51bGxhYmxlPEVkaXRvck9wdGlvbnNbXCJlZGl0b3JQcm9wc1wiXT5bXCJoYW5kbGVET01FdmVudHNcIl0+W1wicGFzdGVcIl1cbiAgICA+O1xuXG4gICAgY29uc3QgaGFuZGxlRE9NUGFzdGU6IEVkaXRvckRPTVBhc3RlSGFuZGxlciA9ICh2aWV3LCBldmVudCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgICBpZiAoXG4gICAgICAgIGN1cnJlbnRFZGl0b3IgJiZcbiAgICAgICAgdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UuaGFuZGxlSW1hZ2VQYXN0ZShcbiAgICAgICAgICBjdXJyZW50RWRpdG9yLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHRoaXMuZ2V0SW1hZ2VVcGxvYWRPcHRpb25zKClcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXVzZXJIYW5kbGVET01QYXN0ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZXJSZXN1bHQgPSB1c2VySGFuZGxlRE9NUGFzdGUodmlldywgZXZlbnQpO1xuICAgICAgcmV0dXJuIHVzZXJSZXN1bHQgPT09IHRydWU7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZVBhc3RlOiBFZGl0b3JIYW5kbGVQYXN0ZSA9ICh2aWV3LCBldmVudCwgc2xpY2UpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgICAgaWYgKFxuICAgICAgICBjdXJyZW50RWRpdG9yICYmXG4gICAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLmhhbmRsZUltYWdlUGFzdGUoXG4gICAgICAgICAgY3VycmVudEVkaXRvcixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICB0aGlzLmdldEltYWdlVXBsb2FkT3B0aW9ucygpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF1c2VySGFuZGxlUGFzdGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2VyUmVzdWx0ID0gdXNlckhhbmRsZVBhc3RlKHZpZXcsIGV2ZW50LCBzbGljZSk7XG4gICAgICByZXR1cm4gdXNlclJlc3VsdCA9PT0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgbmV3RWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi51c2VyT3B0aW9ucyxcbiAgICAgIGVsZW1lbnQ6IHRoaXMuZWRpdG9yRWxlbWVudCgpLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBleHRlbnNpb25zOiBleHRlbnNpb25zLFxuICAgICAgY29udGVudDogdGhpcy5jb250ZW50KCksXG4gICAgICBlZGl0YWJsZTogdGhpcy5maW5hbEVkaXRhYmxlKCkgJiYgIXRoaXMubWVyZ2VkRGlzYWJsZWQoKSxcbiAgICAgIGF1dG9mb2N1czogdGhpcy5maW5hbEF1dG9mb2N1cygpLFxuICAgICAgZWRpdG9yUHJvcHM6IHtcbiAgICAgICAgLi4udXNlckVkaXRvclByb3BzLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgLi4udXNlckVkaXRvclByb3BzPy5hdHRyaWJ1dGVzLFxuICAgICAgICAgIHNwZWxsY2hlY2s6IHRoaXMuZmluYWxTcGVsbGNoZWNrKCkudG9TdHJpbmcoKSxcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlRE9NRXZlbnRzOiB7XG4gICAgICAgICAgLi4udXNlckVkaXRvclByb3BzPy5oYW5kbGVET01FdmVudHMsXG4gICAgICAgICAgcGFzdGU6IGhhbmRsZURPTVBhc3RlLFxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVQYXN0ZSxcbiAgICAgIH0sXG4gICAgICBvblVwZGF0ZTogKHsgZWRpdG9yLCB0cmFuc2FjdGlvbiB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGh0bWwgPSBlZGl0b3IuZ2V0SFRNTCgpO1xuXG4gICAgICAgIC8vIEFudGktw6ljaG8gOiBtw6ltb3Jpc2VyIGNlIHF1J29uIMOpbWV0IHBvdXIgw6l2aXRlciBsYSBib3VjbGVcbiAgICAgICAgdGhpcy5sYXN0RW1pdHRlZEh0bWwgPSBodG1sO1xuXG4gICAgICAgIHRoaXMuY29udGVudENoYW5nZS5lbWl0KGh0bWwpO1xuICAgICAgICAvLyBNZXR0cmUgw6Agam91ciBsZSBGb3JtQ29udHJvbCBzaSBpbCBleGlzdGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sIGFzIHtcbiAgICAgICAgICAgICAgY29udHJvbD86IHsgc2V0VmFsdWU6ICh2YWx1ZTogc3RyaW5nLCBvcHRpb25zOiB7IGVtaXRFdmVudDogYm9vbGVhbiB9KSA9PiB2b2lkIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKT8uY29udHJvbFxuICAgICAgICApIHtcbiAgICAgICAgICAoXG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbCBhcyB7XG4gICAgICAgICAgICAgIGNvbnRyb2w6IHsgc2V0VmFsdWU6ICh2YWx1ZTogc3RyaW5nLCBvcHRpb25zOiB7IGVtaXRFdmVudDogYm9vbGVhbiB9KSA9PiB2b2lkIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKS5jb250cm9sLnNldFZhbHVlKGh0bWwsIHtcbiAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3JVcGRhdGUuZW1pdCh7IGVkaXRvciwgdHJhbnNhY3Rpb24gfSk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2hhcmFjdGVyQ291bnQoZWRpdG9yKTtcbiAgICAgIH0sXG4gICAgICBvbkNyZWF0ZTogKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgICAgdGhpcy5lZGl0b3JDcmVhdGVkLmVtaXQoZWRpdG9yKTtcbiAgICAgICAgdGhpcy51cGRhdGVDaGFyYWN0ZXJDb3VudChlZGl0b3IpO1xuXG4gICAgICAgIC8vIE1hcnF1ZXIgbCfDqWRpdGV1ciBjb21tZSBjb21wbMOodGVtZW50IGluaXRpYWxpc8OpIGFwcsOocyB1biBjb3VydCBkw6lsYWlcbiAgICAgICAgLy8gcG91ciBzJ2Fzc3VyZXIgcXVlIHRvdXMgbGVzIHBsdWdpbnMgZXQgZXh0ZW5zaW9ucyBzb250IHByw6p0c1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9lZGl0b3JGdWxseUluaXRpYWxpemVkLnNldCh0cnVlKTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICAgIH0sXG4gICAgICBvbkZvY3VzOiAoeyBlZGl0b3IsIGV2ZW50IH0pID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnJlZ2lzdGVyZWRJZCgpO1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICB0aGlzLmVkaXRvclJlZ2lzdHJ5LnNldEFjdGl2ZShpZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3JGb2N1cy5lbWl0KHsgZWRpdG9yLCBldmVudCB9KTtcbiAgICAgIH0sXG4gICAgICBvbkJsdXI6ICh7IGVkaXRvciwgZXZlbnQgfSkgPT4ge1xuICAgICAgICAvLyBNYXJxdWVyIGxlIEZvcm1Db250cm9sIGNvbW1lIHRvdWNow6kgc2kgaWwgZXhpc3RlXG4gICAgICAgIGlmICgodGhpcy5uZ0NvbnRyb2wgYXMgeyBjb250cm9sPzogeyBtYXJrQXNUb3VjaGVkOiAoKSA9PiB2b2lkIH0gfSk/LmNvbnRyb2wpIHtcbiAgICAgICAgICAodGhpcy5uZ0NvbnRyb2wgYXMgeyBjb250cm9sOiB7IG1hcmtBc1RvdWNoZWQ6ICgpID0+IHZvaWQgfSB9KS5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRvckJsdXIuZW1pdCh7IGVkaXRvciwgZXZlbnQgfSk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gU3RvY2tlciBsYSByw6lmw6lyZW5jZSBkZSBsJ8OpZGl0ZXVyIGltbcOpZGlhdGVtZW50XG4gICAgdGhpcy5fZWRpdG9yLnNldChuZXdFZGl0b3IpO1xuXG4gICAgLy8gUmVnaXN0ZXIgZWRpdG9yIGluIHRoZSBnbG9iYWwgcmVnaXN0cnlcbiAgICBjb25zdCByZWdpc3RlcmVkSWQgPSB0aGlzLmVkaXRvclJlZ2lzdHJ5LnJlZ2lzdGVyKFxuICAgICAgdGhpcy5lZGl0b3JJZCgpLFxuICAgICAgKCkgPT4gdGhpcy5lZGl0b3IoKSxcbiAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlXG4gICAgKTtcbiAgICB0aGlzLl9yZWdpc3RlcmVkSWQuc2V0KHJlZ2lzdGVyZWRJZCk7XG4gIH1cblxuICB0b2dnbGVFZGl0TW9kZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG5ld0VkaXRhYmxlID0gIXRoaXMuZmluYWxFZGl0YWJsZSgpO1xuICAgIHRoaXMuZWRpdGFibGVDaGFuZ2UuZW1pdChuZXdFZGl0YWJsZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNoYXJhY3RlckNvdW50KGVkaXRvcjogRWRpdG9yKSB7XG4gICAgaWYgKFxuICAgICAgKHRoaXMuZmluYWxTaG93Q2hhcmFjdGVyQ291bnQoKSB8fCB0aGlzLmZpbmFsU2hvd1dvcmRDb3VudCgpKSAmJlxuICAgICAgZWRpdG9yLnN0b3JhZ2VbXCJjaGFyYWN0ZXJDb3VudFwiXVxuICAgICkge1xuICAgICAgY29uc3Qgc3RvcmFnZSA9IGVkaXRvci5zdG9yYWdlW1wiY2hhcmFjdGVyQ291bnRcIl07XG4gICAgICB0aGlzLl9jaGFyYWN0ZXJDb3VudC5zZXQoc3RvcmFnZS5jaGFyYWN0ZXJzKCkpO1xuICAgICAgdGhpcy5fd29yZENvdW50LnNldChzdG9yYWdlLndvcmRzKCkpO1xuICAgIH1cbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5faXNEcmFnT3Zlci5zZXQodHJ1ZSk7XG4gIH1cblxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UuaGFuZGxlSW1hZ2VEcm9wKGVkaXRvciwgZXZlbnQsIHRoaXMuZ2V0SW1hZ2VVcGxvYWRPcHRpb25zKCkpO1xuICAgICAgdGhpcy5faXNEcmFnT3Zlci5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW1hZ2VVcGxvYWRPcHRpb25zKCk6IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5maW5hbEltYWdlVXBsb2FkQ29uZmlnKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHF1YWxpdHk6IGNvbmZpZy5xdWFsaXR5LFxuICAgICAgbWF4V2lkdGg6IGNvbmZpZy5tYXhXaWR0aCxcbiAgICAgIG1heEhlaWdodDogY29uZmlnLm1heEhlaWdodCxcbiAgICAgIG1heFNpemU6IGNvbmZpZy5tYXhTaXplLFxuICAgICAgYWxsb3dlZFR5cGVzOiBjb25maWcuYWxsb3dlZFR5cGVzLFxuICAgIH07XG4gIH1cblxuICAvLyBQdWJsaWMgbWV0aG9kc1xuICBnZXRIVE1MKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yKCk/LmdldEhUTUwoKSB8fCBcIlwiO1xuICB9XG5cbiAgZ2V0SlNPTigpOiBKU09OQ29udGVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yKCk/LmdldEpTT04oKTtcbiAgfVxuXG4gIGdldFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IoKT8uZ2V0VGV4dCgpIHx8IFwiXCI7XG4gIH1cblxuICBzZXRDb250ZW50KGNvbnRlbnQ6IHN0cmluZywgZW1pdFVwZGF0ZSA9IHRydWUpIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLnNldENvbnRlbnQoZWRpdG9yLCBjb250ZW50LCBlbWl0VXBkYXRlKTtcbiAgICB9XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLmZvY3VzKGVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgYmx1cigpIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLmJsdXIoZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbnRlbnQoKSB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5jbGVhckNvbnRlbnQoZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICAvLyBNw6l0aG9kZSBwdWJsaXF1ZSBwb3VyIG9idGVuaXIgbCfDqWRpdGV1clxuICBnZXRFZGl0b3IoKTogRWRpdG9yIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwRm9ybUNvbnRyb2xTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IChcbiAgICAgIHRoaXMubmdDb250cm9sIGFzIHtcbiAgICAgICAgY29udHJvbD86IHtcbiAgICAgICAgICB2YWx1ZTogc3RyaW5nO1xuICAgICAgICAgIHZhbHVlQ2hhbmdlczogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAgICAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgICAgIHN0YXR1c0NoYW5nZXM6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICApPy5jb250cm9sO1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICAvLyBTeW5jaHJvbml6ZSBmb3JtIGNvbnRyb2wgdmFsdWUgd2l0aCBlZGl0b3IgY29udGVudFxuICAgICAgY29uc3QgZm9ybVZhbHVlJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gY29uY2F0KFxuICAgICAgICBkZWZlcigoKSA9PiBvZihjb250cm9sLnZhbHVlKSksXG4gICAgICAgIGNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICApO1xuXG4gICAgICBmb3JtVmFsdWUkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICAgICAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICAvLyBTeW5jaHJvbml6ZSBmb3JtIGNvbnRyb2wgc3RhdHVzIHdpdGggZWRpdG9yIGRpc2FibGVkIHN0YXRlXG4gICAgICBjb25zdCBmb3JtU3RhdHVzJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gY29uY2F0KFxuICAgICAgICBkZWZlcigoKSA9PiBvZihjb250cm9sLnN0YXR1cykpLFxuICAgICAgICBjb250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgICk7XG5cbiAgICAgIGZvcm1TdGF0dXMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoc3RhdHVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2lzRm9ybUNvbnRyb2xEaXNhYmxlZC5zZXQoc3RhdHVzID09PSBcIkRJU0FCTEVEXCIpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBvbkVkaXRvckNsaWNrKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbiByZWFkLW9ubHkgbW9kZSwgaGFuZGxlIGNsZWFyaW5nIG9mIG5vZGUgc2VsZWN0aW9uXG4gICAgaWYgKCF0aGlzLmZpbmFsRWRpdGFibGUoKSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgY29uc3QgZWRpdG9yRWxlbWVudCA9IHRoaXMuZWRpdG9yRWxlbWVudCgpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKHRhcmdldCA9PT0gZWRpdG9yRWxlbWVudCB8fCB0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXRlLWNvbnRlbnRcIikpIHtcbiAgICAgICAgLy8gQ2xlYXIgc2VsZWN0aW9uIHRvIGhpZGUgYnViYmxlIG1lbnVzXG4gICAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRUZXh0U2VsZWN0aW9uKDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSBpZiBpbnRlcmFjdGlvbiBpcyBvbiB0aGUgY29udGFpbmVyIGVsZW1lbnQgYW5kIG5vdCBvbiB0aGUgY29udGVudFxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBlZGl0b3JFbGVtZW50ID0gdGhpcy5lZGl0b3JFbGVtZW50KCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAodGFyZ2V0ID09PSBlZGl0b3JFbGVtZW50IHx8IHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJhdGUtY29udGVudFwiKSkge1xuICAgICAgLy8gSW50ZXJhY3Rpb24gaW4gdGhlIGVtcHR5IHNwYWNlLCBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBlbmRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGRvYyB9ID0gZWRpdG9yLnN0YXRlO1xuICAgICAgICBjb25zdCBlbmRQb3MgPSBkb2MuY29udGVudC5zaXplO1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMuc2V0VGV4dFNlbGVjdGlvbihlbmRQb3MpO1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMuZm9jdXMoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1ldGhvZHMgZm9yIHRhYmxlIGVkaXQgYnV0dG9uIC0gUmVtb3ZlZCBhcyByZXBsYWNlZCBieSBidWJibGUgbWVudVxufVxuIl19
|
|
1141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aXB0YXAtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvZWRpdG9yL2FuZ3VsYXItdGlwdGFwLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFFUixNQUFNLEVBQ04sVUFBVSxFQUNWLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBUXZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQXFELE1BQU0sY0FBYyxDQUFDO0FBQ3pGLE9BQU8sVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxXQUFXLE1BQU0sMkNBQTJDLENBQUM7QUFHcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbkYsT0FBTyxFQUFF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Qjt3QkFDMUIseUJBQXlCO3dCQUN6QiwwQkFBMEI7d0JBQzFCLDJCQUEyQjt3QkFDM0Isc0JBQXNCO3dCQUN0Qix5QkFBeUI7cUJBQzFCLGFBQ1U7d0JBQ1Qsd0JBQXdCO3dCQUN4QixlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsY0FBYzt3QkFDZCxnQkFBZ0I7cUJBQ2pCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0lUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBPbkRlc3Ryb3ksXG4gIHZpZXdDaGlsZCxcbiAgZWZmZWN0LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBBZnRlclZpZXdJbml0LFxuICBpbmplY3QsXG4gIERlc3Ryb3lSZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICB1bnRyYWNrZWQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUJvb2xlYW5JbnB1dCh2YWw6IHVua25vd24pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGJvb2xlYW5BdHRyaWJ1dGUodmFsKTtcbn1cbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiO1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JPcHRpb25zLCBFeHRlbnNpb24sIE5vZGUsIE1hcmssIEpTT05Db250ZW50IH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IFN0YXJ0ZXJLaXQgZnJvbSBcIkB0aXB0YXAvc3RhcnRlci1raXRcIjtcbmltcG9ydCB7IFBsYWNlaG9sZGVyLCBDaGFyYWN0ZXJDb3VudCB9IGZyb20gXCJAdGlwdGFwL2V4dGVuc2lvbnNcIjtcbmltcG9ydCB7IFN1cGVyc2NyaXB0IH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLXN1cGVyc2NyaXB0XCI7XG5pbXBvcnQgeyBTdWJzY3JpcHQgfSBmcm9tIFwiQHRpcHRhcC9leHRlbnNpb24tc3Vic2NyaXB0XCI7XG5pbXBvcnQgeyBUZXh0QWxpZ24gfSBmcm9tIFwiQHRpcHRhcC9leHRlbnNpb24tdGV4dC1hbGlnblwiO1xuaW1wb3J0IHsgSGlnaGxpZ2h0IH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLWhpZ2hsaWdodFwiO1xuaW1wb3J0IHsgVGV4dFN0eWxlIH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLXRleHQtc3R5bGVcIjtcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLWNvbG9yXCI7XG5pbXBvcnQgT2ZmaWNlUGFzdGUgZnJvbSBcIkBpbnRldmF0aW9uL3RpcHRhcC1leHRlbnNpb24tb2ZmaWNlLXBhc3RlXCI7XG5pbXBvcnQgeyBOb2RlIGFzIFBNTm9kZSB9IGZyb20gXCJAdGlwdGFwL3BtL21vZGVsXCI7XG5cbmltcG9ydCB7IEF0ZVJlc2l6YWJsZUltYWdlIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvYXRlLXJlc2l6YWJsZS1pbWFnZS5leHRlbnNpb25cIjtcbmltcG9ydCB7IEF0ZUljb25SZWdpc3RyeSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtaWNvbi1yZWdpc3RyeS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBdGVVcGxvYWRQcm9ncmVzcyB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2F0ZS11cGxvYWQtcHJvZ3Jlc3MuZXh0ZW5zaW9uXCI7XG5pbXBvcnQgeyBBdGVQYXN0ZWRJbWFnZSB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2F0ZS1wYXN0ZWQtaW1hZ2UuZXh0ZW5zaW9uXCI7XG5pbXBvcnQgeyBBdGVMaW5rU2hvcnRjdXQgfSBmcm9tIFwiLi4vLi4vZXh0ZW5zaW9ucy9hdGUtbGluay1zaG9ydGN1dC5leHRlbnNpb25cIjtcbmltcG9ydCB7IEF0ZVRhYmxlRXh0ZW5zaW9uIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvYXRlLXRhYmxlLmV4dGVuc2lvblwiO1xuaW1wb3J0IHsgQXRlVG9jTm9kZU9wdGlvbnMgfSBmcm9tIFwiLi4vdGFibGUtb2YtY29udGVudHMvYXRlLXRvYy1ub2RlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQXRlVGlwdGFwU3RhdGVFeHRlbnNpb24gfSBmcm9tIFwiLi4vLi4vZXh0ZW5zaW9ucy9hdGUtdGlwdGFwLXN0YXRlLmV4dGVuc2lvblwiO1xuaW1wb3J0IHsgQXRlVG9vbGJhckNvbXBvbmVudCB9IGZyb20gXCIuLi90b29sYmFyL2F0ZS10b29sYmFyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQXRlQnViYmxlTWVudUNvbXBvbmVudCB9IGZyb20gXCIuLi9idWJibGUtbWVudXMvdGV4dC9hdGUtYnViYmxlLW1lbnUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBdGVJbWFnZUJ1YmJsZU1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi4vYnViYmxlLW1lbnVzL2ltYWdlL2F0ZS1pbWFnZS1idWJibGUtbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZVRhYmxlQnViYmxlTWVudUNvbXBvbmVudCB9IGZyb20gXCIuLi9idWJibGUtbWVudXMvdGFibGUvYXRlLXRhYmxlLWJ1YmJsZS1tZW51LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQXRlQ2VsbEJ1YmJsZU1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi4vYnViYmxlLW1lbnVzL3RhYmxlL2F0ZS1jZWxsLWJ1YmJsZS1tZW51LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQXRlTGlua0J1YmJsZU1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi4vYnViYmxlLW1lbnVzL2xpbmsvYXRlLWxpbmstYnViYmxlLW1lbnUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBdGVDb2xvckJ1YmJsZU1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi4vYnViYmxlLW1lbnVzL2NvbG9yL2F0ZS1jb2xvci1idWJibGUtbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZVNsYXNoQ29tbWFuZHNDb21wb25lbnQgfSBmcm9tIFwiLi4vc2xhc2gtY29tbWFuZHMvYXRlLXNsYXNoLWNvbW1hbmRzLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQXRlQmxvY2tDb250cm9sc0NvbXBvbmVudCB9IGZyb20gXCIuL2F0ZS1ibG9jay1jb250cm9scy5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZUN1c3RvbVNsYXNoQ29tbWFuZHMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2F0ZS1zbGFzaC1jb21tYW5kLm1vZGVsXCI7XG5pbXBvcnQgeyBBdGVFZGl0VG9nZ2xlQ29tcG9uZW50IH0gZnJvbSBcIi4uL2VkaXQtdG9nZ2xlL2F0ZS1lZGl0LXRvZ2dsZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZUltYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtaW1hZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlSTE4blNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXRlLWkxOG4uc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlRWRpdG9yQ29tbWFuZHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F0ZS1lZGl0b3ItY29tbWFuZHMuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlQ29sb3JQaWNrZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F0ZS1jb2xvci1waWNrZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlTGlua1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXRlLWxpbmsuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlRXhwb3J0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtZXhwb3J0LnNlcnZpY2VcIjtcbmltcG9ydCB7IEF0ZUVkaXRvclJlZ2lzdHJ5IH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F0ZS1lZGl0b3ItcmVnaXN0cnkuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlTm9vcFZhbHVlQWNjZXNzb3JEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9hdGUtbm9vcC12YWx1ZS1hY2Nlc3Nvci5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IEF0ZVN0YXRlQ2FsY3VsYXRvciB9IGZyb20gXCIuLi8uLi9tb2RlbHMvYXRlLWVkaXRvci1zdGF0ZS5tb2RlbFwiO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge1xuICBmaWx0ZXJTbGFzaENvbW1hbmRzLFxuICBBdGVTbGFzaENvbW1hbmRzQ29uZmlnLFxufSBmcm9tIFwiLi4vLi4vY29uZmlnL2F0ZS1zbGFzaC1jb21tYW5kcy5jb25maWdcIjtcbmltcG9ydCB7IHJlZ2lzdGVyQW5ndWxhckNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9ub2RlLXZpZXcvYXRlLXJlZ2lzdGVyLWFuZ3VsYXItY29tcG9uZW50XCI7XG5pbXBvcnQgeyBSZWdpc3RlckFuZ3VsYXJDb21wb25lbnRPcHRpb25zIH0gZnJvbSBcIi4uLy4uL25vZGUtdmlldy9hdGUtbm9kZS12aWV3Lm1vZGVsc1wiO1xuaW1wb3J0IHsgQVRFX0dMT0JBTF9DT05GSUcgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F0ZS1nbG9iYWwtY29uZmlnLnRva2VuXCI7XG5pbXBvcnQgeyBUeXBlLCBJbmplY3RvciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IEF0ZVNlbGVjdGlvbkNhbGN1bGF0b3IgfSBmcm9tIFwiLi4vLi4vZXh0ZW5zaW9ucy9jYWxjdWxhdG9ycy9hdGUtc2VsZWN0aW9uLmNhbGN1bGF0b3JcIjtcbmltcG9ydCB7IEF0ZU1hcmtzQ2FsY3VsYXRvciB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1tYXJrcy5jYWxjdWxhdG9yXCI7XG5pbXBvcnQgeyBBdGVUYWJsZUNhbGN1bGF0b3IgfSBmcm9tIFwiLi4vLi4vZXh0ZW5zaW9ucy9jYWxjdWxhdG9ycy9hdGUtdGFibGUuY2FsY3VsYXRvclwiO1xuaW1wb3J0IHsgQXRlSW1hZ2VDYWxjdWxhdG9yIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLWltYWdlLmNhbGN1bGF0b3JcIjtcbmltcG9ydCB7IEF0ZVN0cnVjdHVyZUNhbGN1bGF0b3IgfSBmcm9tIFwiLi4vLi4vZXh0ZW5zaW9ucy9jYWxjdWxhdG9ycy9hdGUtc3RydWN0dXJlLmNhbGN1bGF0b3JcIjtcbmltcG9ydCB7IEF0ZURpc2NvdmVyeUNhbGN1bGF0b3IgfSBmcm9tIFwiLi4vLi4vZXh0ZW5zaW9ucy9jYWxjdWxhdG9ycy9hdGUtZGlzY292ZXJ5LmNhbGN1bGF0b3JcIjtcblxuaW1wb3J0IHsgQXRlVG9vbGJhckNvbmZpZyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvYXRlLXRvb2xiYXIubW9kZWxcIjtcbmltcG9ydCB7XG4gIEF0ZUJ1YmJsZU1lbnVDb25maWcsXG4gIEF0ZUltYWdlQnViYmxlTWVudUNvbmZpZyxcbiAgQXRlVGFibGVCdWJibGVNZW51Q29uZmlnLFxuICBBdGVDZWxsQnViYmxlTWVudUNvbmZpZyxcbn0gZnJvbSBcIi4uLy4uL21vZGVscy9hdGUtYnViYmxlLW1lbnUubW9kZWxcIjtcbmltcG9ydCB7XG4gIEF0ZUVkaXRvckNvbmZpZyxcbiAgQXRlQW5ndWxhck5vZGUsXG4gIEF0ZUJsb2NrQ29udHJvbHNNb2RlLFxuICBBdGVBdXRvZm9jdXNNb2RlLFxufSBmcm9tIFwiLi4vLi4vbW9kZWxzL2F0ZS1lZGl0b3ItY29uZmlnLm1vZGVsXCI7XG5pbXBvcnQgeyBBdGVMaW5rQ2xpY2tCZWhhdmlvciB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2F0ZS1saW5rLWNsaWNrLWJlaGF2aW9yLmV4dGVuc2lvblwiO1xuaW1wb3J0IHsgQXRlQmxvY2tDb250cm9sc0V4dGVuc2lvbiB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2F0ZS1ibG9jay1jb250cm9scy5leHRlbnNpb25cIjtcbmltcG9ydCB7XG4gIEFURV9ERUZBVUxUX1RPT0xCQVJfQ09ORklHLFxuICBBVEVfREVGQVVMVF9CVUJCTEVfTUVOVV9DT05GSUcsXG4gIEFURV9ERUZBVUxUX0lNQUdFX0JVQkJMRV9NRU5VX0NPTkZJRyxcbiAgQVRFX0RFRkFVTFRfSU1BR0VfVVBMT0FEX0NPTkZJRyxcbiAgQVRFX0RFRkFVTFRfVEFCTEVfTUVOVV9DT05GSUcsXG4gIEFURV9ERUZBVUxUX0NFTExfTUVOVV9DT05GSUcsXG4gIEFURV9ERUZBVUxUX0NPTkZJRyxcbn0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hdGUtZWRpdG9yLmNvbmZpZ1wiO1xuaW1wb3J0IHsgY29uY2F0LCBkZWZlciwgT2JzZXJ2YWJsZSwgb2YsIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1xuICBBdGVJbWFnZVVwbG9hZEhhbmRsZXIsXG4gIEF0ZUltYWdlVXBsb2FkT3B0aW9ucyxcbiAgQXRlSW1hZ2VVcGxvYWRSZXN1bHQsXG4gIEF0ZVBhc3RlZEltYWdlUmVqZWN0aW9uLFxufSBmcm9tIFwiLi4vLi4vbW9kZWxzL2F0ZS1pbWFnZS5tb2RlbFwiO1xuaW1wb3J0IHsgU3VwcG9ydGVkTG9jYWxlIH0gZnJvbSBcIi4uLy4uL2kxOG4vYXRlVHJhbnNsYXRpb25zTW9kZWxcIjtcbmltcG9ydCB7IHNoYWxsb3dBcnJheUVxdWFsLCBzaGFsbG93T2JqZWN0RXF1YWwgfSBmcm9tIFwiLi4vLi4vdXRpbHMvYXRlLWVxdWFsaXR5LnV0aWxzXCI7XG5cbi8vIFNsYXNoIGNvbW1hbmRzIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCBkeW5hbWljYWxseSB2aWEgc2xhc2hDb21tYW5kc0NvbmZpZ0NvbXB1dGVkXG5cbi8qKlxuICogVGhlIG1haW4gcmljaC10ZXh0IGVkaXRvciBjb21wb25lbnQgZm9yIEFuZ3VsYXIuXG4gKlxuICogUG93ZXJlZCBieSBUaXB0YXAgYW5kIGJ1aWx0IHdpdGggYSBuYXRpdmUgU2lnbmFsLWJhc2VkIGFyY2hpdGVjdHVyZSwgaXQgcHJvdmlkZXNcbiAqIGEgc2VhbWxlc3MsIGhpZ2gtcGVyZm9ybWFuY2UgZWRpdGluZyBleHBlcmllbmNlLiBTdXBwb3J0cyBhdXRvbWF0aWMgcmVnaXN0cmF0aW9uXG4gKiBvZiBBbmd1bGFyIGNvbXBvbmVudHMgYXMgaW50ZXJhY3RpdmUgbm9kZXMgKCdBbmd1bGFyIE5vZGVzJyksIGZ1bGwgUmVhY3RpdmUgRm9ybXNcbiAqIGludGVncmF0aW9uLCBhbmQgZXh0ZW5zaXZlIGN1c3RvbWl6YXRpb24gdmlhIHRoZSBBdGVFZGl0b3JDb25maWcuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhbmd1bGFyLXRpcHRhcC1lZGl0b3JcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3REaXJlY3RpdmVzOiBbQXRlTm9vcFZhbHVlQWNjZXNzb3JEaXJlY3RpdmVdLFxuICBob3N0OiB7XG4gICAgXCJbY2xhc3MuZmlsbC1jb250YWluZXJdXCI6IFwiZmluYWxGaWxsQ29udGFpbmVyKClcIixcbiAgICBcIltjbGFzcy5mbG9hdGluZy10b29sYmFyXVwiOiBcImZpbmFsRmxvYXRpbmdUb29sYmFyKClcIixcbiAgICBcIltjbGFzcy5pcy1yZWFkb25seV1cIjogXCIhZmluYWxFZGl0YWJsZSgpICYmICFtZXJnZWREaXNhYmxlZCgpXCIsXG4gICAgXCJbY2xhc3MuaXMtZGlzYWJsZWRdXCI6IFwibWVyZ2VkRGlzYWJsZWQoKVwiLFxuICAgIFwiW3N0eWxlLi0tYXRlLWJvcmRlci13aWR0aF1cIjogXCJmaW5hbFNlYW1sZXNzKCkgfHwgbWVyZ2VkRGlzYWJsZWQoKSA/ICcwJyA6IG51bGxcIixcbiAgICBcIltzdHlsZS4tLWF0ZS1iYWNrZ3JvdW5kXVwiOlxuICAgICAgXCJmaW5hbFNlYW1sZXNzKCkgPyAndHJhbnNwYXJlbnQnIDogKG1lcmdlZERpc2FibGVkKCkgPyAndmFyKC0tYXRlLXN1cmZhY2UtdGVydGlhcnkpJyA6IG51bGwpXCIsXG4gICAgXCJbc3R5bGUuLS1hdGUtdG9vbGJhci1ib3JkZXItY29sb3JdXCI6IFwiZmluYWxTZWFtbGVzcygpID8gJ3RyYW5zcGFyZW50JyA6IG51bGxcIixcbiAgICBcIltzdHlsZS4tLWF0ZS1jb3VudGVyLWJhY2tncm91bmRdXCI6IFwiZmluYWxTZWFtbGVzcygpID8gJ3RyYW5zcGFyZW50JyA6IG51bGxcIixcbiAgICBcIltzdHlsZS4tLWF0ZS1jb3VudGVyLWJvcmRlci1jb2xvcl1cIjogXCJmaW5hbFNlYW1sZXNzKCkgPyAndHJhbnNwYXJlbnQnIDogbnVsbFwiLFxuICAgIFwiW2NsYXNzLmRhcmtdXCI6IFwiY29uZmlnKCkudGhlbWUgPT09ICdkYXJrJ1wiLFxuICAgIFwiW2NsYXNzLmF0ZS1ibG9ja3MtaW5zaWRlXVwiOiBcImZpbmFsQmxvY2tDb250cm9scygpID09PSAnaW5zaWRlJ1wiLFxuICAgIFwiW2NsYXNzLmF0ZS1ibG9ja3Mtb3V0c2lkZV1cIjogXCJmaW5hbEJsb2NrQ29udHJvbHMoKSA9PT0gJ291dHNpZGUnXCIsXG4gICAgXCJbYXR0ci5kYXRhLXRoZW1lXVwiOiBcImNvbmZpZygpLnRoZW1lXCIsXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBBdGVUb29sYmFyQ29tcG9uZW50LFxuICAgIEF0ZUJ1YmJsZU1lbnVDb21wb25lbnQsXG4gICAgQXRlSW1hZ2VCdWJibGVNZW51Q29tcG9uZW50LFxuICAgIEF0ZVRhYmxlQnViYmxlTWVudUNvbXBvbmVudCxcbiAgICBBdGVDZWxsQnViYmxlTWVudUNvbXBvbmVudCxcbiAgICBBdGVTbGFzaENvbW1hbmRzQ29tcG9uZW50LFxuICAgIEF0ZUxpbmtCdWJibGVNZW51Q29tcG9uZW50LFxuICAgIEF0ZUNvbG9yQnViYmxlTWVudUNvbXBvbmVudCxcbiAgICBBdGVFZGl0VG9nZ2xlQ29tcG9uZW50LFxuICAgIEF0ZUJsb2NrQ29udHJvbHNDb21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIEF0ZUVkaXRvckNvbW1hbmRzU2VydmljZSxcbiAgICBBdGVJbWFnZVNlcnZpY2UsXG4gICAgQXRlQ29sb3JQaWNrZXJTZXJ2aWNlLFxuICAgIEF0ZUxpbmtTZXJ2aWNlLFxuICAgIEF0ZUV4cG9ydFNlcnZpY2UsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImF0ZS1lZGl0b3JcIj5cbiAgICAgIDwhLS0gVG9vbGJhciAtLT5cbiAgICAgIEBpZiAoZmluYWxFZGl0YWJsZSgpICYmICFtZXJnZWREaXNhYmxlZCgpICYmIGZpbmFsU2hvd1Rvb2xiYXIoKSAmJiBlZGl0b3IoKSkge1xuICAgICAgICA8YXRlLXRvb2xiYXJcbiAgICAgICAgICBbZWRpdG9yXT1cImVkaXRvcigpIVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJmaW5hbFRvb2xiYXJDb25maWcoKVwiXG4gICAgICAgICAgW2ltYWdlVXBsb2FkXT1cImZpbmFsSW1hZ2VVcGxvYWRDb25maWcoKVwiXG4gICAgICAgICAgW2Zsb2F0aW5nXT1cImZpbmFsRmxvYXRpbmdUb29sYmFyKClcIlxuICAgICAgICAgIChtb3VzZWVudGVyKT1cImhpZGVCdWJibGVNZW51cygpXCJcbiAgICAgICAgICAobW91c2VsZWF2ZSk9XCJzaG93QnViYmxlTWVudXMoKVwiIC8+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoZmluYWxTaG93RWRpdFRvZ2dsZSgpICYmICFtZXJnZWREaXNhYmxlZCgpKSB7XG4gICAgICAgIDxhdGUtZWRpdC10b2dnbGVcbiAgICAgICAgICBbZWRpdGFibGVdPVwiZmluYWxFZGl0YWJsZSgpXCJcbiAgICAgICAgICBbdHJhbnNsYXRpb25zXT1cImN1cnJlbnRUcmFuc2xhdGlvbnMoKVwiXG4gICAgICAgICAgKGVkaXRUb2dnbGUpPVwidG9nZ2xlRWRpdE1vZGUoJGV2ZW50KVwiIC8+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gRWRpdG9yIENvbnRlbnQgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICNlZGl0b3JFbGVtZW50XG4gICAgICAgIGNsYXNzPVwiYXRlLWNvbnRlbnRcIlxuICAgICAgICBbY2xhc3MuZHJhZy1vdmVyXT1cImlzRHJhZ092ZXIoKVwiXG4gICAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAgICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJvbkVkaXRvckNsaWNrKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkVkaXRvckNsaWNrKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJvbkVkaXRvckNsaWNrKCRldmVudClcIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICByb2xlPVwiYXBwbGljYXRpb25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImN1cnJlbnRUcmFuc2xhdGlvbnMoKS5lZGl0b3IucGxhY2Vob2xkZXJcIj48L2Rpdj5cblxuICAgICAgPCEtLSBCbG9jayBDb250cm9scyAoUGx1cyArIERyYWcpIC0tPlxuICAgICAgQGlmIChmaW5hbEVkaXRhYmxlKCkgJiYgIW1lcmdlZERpc2FibGVkKCkgJiYgZWRpdG9yKCkgJiYgZmluYWxCbG9ja0NvbnRyb2xzKCkgIT09IFwibm9uZVwiKSB7XG4gICAgICAgIDxhdGUtYmxvY2stY29udHJvbHNcbiAgICAgICAgICBbZWRpdG9yXT1cImVkaXRvcigpIVwiXG4gICAgICAgICAgW2hvdmVyZWREYXRhXT1cImhvdmVyZWRCbG9jaygpXCJcbiAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJlZGl0b3JGdWxseUluaXRpYWxpemVkKCkgPyAnYmxvY2snIDogJ25vbmUnXCI+PC9hdGUtYmxvY2stY29udHJvbHM+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gVGV4dCBCdWJibGUgTWVudSAtLT5cbiAgICAgIEBpZiAoZmluYWxFZGl0YWJsZSgpICYmIGZpbmFsU2hvd0J1YmJsZU1lbnUoKSAmJiBlZGl0b3IoKSkge1xuICAgICAgICA8YXRlLWJ1YmJsZS1tZW51XG4gICAgICAgICAgW2VkaXRvcl09XCJlZGl0b3IoKSFcIlxuICAgICAgICAgIFtjb25maWddPVwiZmluYWxCdWJibGVNZW51Q29uZmlnKClcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS1idWJibGUtbWVudT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBJbWFnZSBCdWJibGUgTWVudSAtLT5cbiAgICAgIEBpZiAoZmluYWxTaG93SW1hZ2VCdWJibGVNZW51KCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS1pbWFnZS1idWJibGUtbWVudVxuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbY29uZmlnXT1cImZpbmFsSW1hZ2VCdWJibGVNZW51Q29uZmlnKClcIlxuICAgICAgICAgIFtpbWFnZVVwbG9hZF09XCJmaW5hbEltYWdlVXBsb2FkQ29uZmlnKClcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS1pbWFnZS1idWJibGUtbWVudT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBMaW5rIEJ1YmJsZSBNZW51IC0tPlxuICAgICAgQGlmIChmaW5hbEVkaXRhYmxlKCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS1saW5rLWJ1YmJsZS1tZW51XG4gICAgICAgICAgW2VkaXRvcl09XCJlZGl0b3IoKSFcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS1saW5rLWJ1YmJsZS1tZW51PlxuICAgICAgfVxuXG4gICAgICA8IS0tIENvbG9yIEJ1YmJsZSBNZW51IC0tPlxuICAgICAgQGlmIChmaW5hbEVkaXRhYmxlKCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS1jb2xvci1idWJibGUtbWVudVxuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJlZGl0b3JGdWxseUluaXRpYWxpemVkKCkgPyAnYmxvY2snIDogJ25vbmUnXCI+PC9hdGUtY29sb3ItYnViYmxlLW1lbnU+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gU2xhc2ggQ29tbWFuZHMgLS0+XG4gICAgICBAaWYgKGZpbmFsRWRpdGFibGUoKSAmJiBmaW5hbEVuYWJsZVNsYXNoQ29tbWFuZHMoKSAmJiBlZGl0b3IoKSkge1xuICAgICAgICA8YXRlLXNsYXNoLWNvbW1hbmRzXG4gICAgICAgICAgW2VkaXRvcl09XCJlZGl0b3IoKSFcIlxuICAgICAgICAgIFtjb25maWddPVwiZmluYWxTbGFzaENvbW1hbmRzQ29uZmlnKClcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS1zbGFzaC1jb21tYW5kcz5cbiAgICAgIH1cblxuICAgICAgPCEtLSBUYWJsZSBNZW51IC0tPlxuICAgICAgQGlmIChmaW5hbEVkaXRhYmxlKCkgJiYgZmluYWxTaG93VGFibGVCdWJibGVNZW51KCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS10YWJsZS1idWJibGUtbWVudVxuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbY29uZmlnXT1cImZpbmFsVGFibGVCdWJibGVNZW51Q29uZmlnKClcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS10YWJsZS1idWJibGUtbWVudT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBDZWxsIE1lbnUgLS0+XG4gICAgICBAaWYgKGZpbmFsRWRpdGFibGUoKSAmJiBmaW5hbFNob3dDZWxsQnViYmxlTWVudSgpICYmIGVkaXRvcigpKSB7XG4gICAgICAgIDxhdGUtY2VsbC1idWJibGUtbWVudVxuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbY29uZmlnXT1cImZpbmFsQ2VsbEJ1YmJsZU1lbnVDb25maWcoKVwiXG4gICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiZWRpdG9yRnVsbHlJbml0aWFsaXplZCgpID8gJ2Jsb2NrJyA6ICdub25lJ1wiPjwvYXRlLWNlbGwtYnViYmxlLW1lbnU+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gQ291bnRlcnMgLS0+XG4gICAgICBAaWYgKFxuICAgICAgICBmaW5hbEVkaXRhYmxlKCkgJiZcbiAgICAgICAgIW1lcmdlZERpc2FibGVkKCkgJiZcbiAgICAgICAgZmluYWxTaG93Rm9vdGVyKCkgJiZcbiAgICAgICAgKGZpbmFsU2hvd0NoYXJhY3RlckNvdW50KCkgfHwgZmluYWxTaG93V29yZENvdW50KCkpXG4gICAgICApIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2hhcmFjdGVyLWNvdW50XCJcbiAgICAgICAgICBbY2xhc3MubGltaXQtcmVhY2hlZF09XCJmaW5hbE1heENoYXJhY3RlcnMoKSAmJiBjaGFyYWN0ZXJDb3VudCgpID49IGZpbmFsTWF4Q2hhcmFjdGVycygpIVwiPlxuICAgICAgICAgIEBpZiAoZmluYWxTaG93Q2hhcmFjdGVyQ291bnQoKSkge1xuICAgICAgICAgICAge3sgY2hhcmFjdGVyQ291bnQoKSB9fVxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgY2hhcmFjdGVyQ291bnQoKSA+IDFcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnRUcmFuc2xhdGlvbnMoKS5lZGl0b3IuY2hhcmFjdGVyUGx1cmFsXG4gICAgICAgICAgICAgICAgOiBjdXJyZW50VHJhbnNsYXRpb25zKCkuZWRpdG9yLmNoYXJhY3RlclxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIEBpZiAoZmluYWxNYXhDaGFyYWN0ZXJzKCkpIHtcbiAgICAgICAgICAgICAgLyB7eyBmaW5hbE1heENoYXJhY3RlcnMoKSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAoZmluYWxTaG93Q2hhcmFjdGVyQ291bnQoKSAmJiBmaW5hbFNob3dXb3JkQ291bnQoKSkge1xuICAgICAgICAgICAgLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAoZmluYWxTaG93V29yZENvdW50KCkpIHtcbiAgICAgICAgICAgIHt7IHdvcmRDb3VudCgpIH19XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICB3b3JkQ291bnQoKSA+IDFcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnRUcmFuc2xhdGlvbnMoKS5lZGl0b3Iud29yZFBsdXJhbFxuICAgICAgICAgICAgICAgIDogY3VycmVudFRyYW5zbGF0aW9ucygpLmVkaXRvci53b3JkXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG5cbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgQ1NTIEN1c3RvbSBQcm9wZXJ0aWVzIChWYXJpYWJsZXMpXG4gICAgICAgICBPdmVycmlkZSB0aGVzZSB0byBjdXN0b21pemUgdGhlIGVkaXRvclxuICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuICAgICAgOmhvc3Qge1xuICAgICAgICAvKiA9PT09PSBCQVNFIFRPS0VOUyA9PT09PSAqL1xuICAgICAgICAtLWF0ZS1wcmltYXJ5OiAjMjU2M2ViO1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWhvdmVyOiAjMTUzY2E5O1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWNvbnRyYXN0OiAjZmZmZmZmO1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWxpZ2h0OiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYXRlLXByaW1hcnkpLCB0cmFuc3BhcmVudCA5MCUpO1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWxpZ2h0ZXI6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hdGUtcHJpbWFyeSksIHRyYW5zcGFyZW50IDk1JSk7XG4gICAgICAgIC0tYXRlLXByaW1hcnktbGlnaHQtYWxwaGE6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hdGUtcHJpbWFyeSksIHRyYW5zcGFyZW50IDg1JSk7XG5cbiAgICAgICAgLS1hdGUtc3VyZmFjZTogI2ZmZmZmZjtcbiAgICAgICAgLS1hdGUtc3VyZmFjZS1zZWNvbmRhcnk6ICNmOGY5ZmE7XG4gICAgICAgIC0tYXRlLXN1cmZhY2UtdGVydGlhcnk6ICNmMWY1Zjk7XG5cbiAgICAgICAgLS1hdGUtdGV4dDogIzJkMzc0ODtcbiAgICAgICAgLS1hdGUtdGV4dC1zZWNvbmRhcnk6ICM2NDc0OGI7XG4gICAgICAgIC0tYXRlLXRleHQtbXV0ZWQ6ICNhMGFlYzA7XG5cbiAgICAgICAgLS1hdGUtYm9yZGVyOiAjZTJlOGYwO1xuXG4gICAgICAgIC0tYXRlLWhpZ2hsaWdodC1iZzogI2ZlZjA4YTtcbiAgICAgICAgLS1hdGUtaGlnaGxpZ2h0LWNvbG9yOiAjODU0ZDBlO1xuXG4gICAgICAgIC0tYXRlLWJ1dHRvbi1ob3ZlcjogI2YxZjVmOTtcbiAgICAgICAgLS1hdGUtYnV0dG9uLWFjdGl2ZTogI2UyZThmMDtcblxuICAgICAgICAtLWF0ZS1zZWxlY3Rpb24tYmc6IHZhcigtLWF0ZS1wcmltYXJ5LWxpZ2h0LWFscGhhKTtcblxuICAgICAgICAtLWF0ZS1lcnJvci1jb2xvcjogI2M1MzAzMDtcbiAgICAgICAgLS1hdGUtZXJyb3ItYmc6ICNmZWQ3ZDc7XG4gICAgICAgIC0tYXRlLWVycm9yLWJvcmRlcjogI2ZlYjJiMjtcblxuICAgICAgICAvKiA9PT09PSBDT01QT05FTlQgVE9LRU5TID09PT09ICovXG4gICAgICAgIC0tYXRlLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlcik7XG4gICAgICAgIC0tYXRlLWJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAtLWF0ZS1ib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgICAtLWF0ZS1zdWItYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICAtLWF0ZS1mb2N1cy1jb2xvcjogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICAtLWF0ZS1iYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc3VyZmFjZSk7XG5cbiAgICAgICAgLyogQ29udGVudCAqL1xuICAgICAgICAtLWF0ZS10ZXh0LWNvbG9yOiB2YXIoLS1hdGUtdGV4dCwgIzJkMzc0OCk7XG4gICAgICAgIC0tYXRlLXBsYWNlaG9sZGVyLWNvbG9yOiB2YXIoLS1hdGUtdGV4dC1tdXRlZCwgI2EwYWVjMCk7XG4gICAgICAgIC0tYXRlLWxpc3QtbWFya2VyLWNvbG9yOiB2YXIoLS1hdGUtdGV4dC1jb2xvcik7XG4gICAgICAgIC0tYXRlLWxpbmUtaGVpZ2h0OiAxLjY7XG4gICAgICAgIC0tYXRlLWNvbnRlbnQtcGFkZGluZy1ibG9jazogMTZweDtcbiAgICAgICAgLS1hdGUtY29udGVudC1wYWRkaW5nLWlubGluZTogMTZweDtcbiAgICAgICAgLS1hdGUtY29udGVudC1ndXR0ZXI6IDBweDtcblxuICAgICAgICAvKiA9PT09PSBNRU5VUyAoU2xhc2gvQnViYmxlKSA9PT09PSAqL1xuICAgICAgICAtLWF0ZS1tZW51LWJnOiB2YXIoLS1hdGUtc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICAgIC0tYXRlLW1lbnUtYm9yZGVyLXJhZGl1czogdmFyKC0tYXRlLWJvcmRlci1yYWRpdXMsIDEycHgpO1xuICAgICAgICAtLWF0ZS1tZW51LWJvcmRlcjogdmFyKC0tYXRlLWJvcmRlciwgI2UyZThmMCk7XG4gICAgICAgIC0tYXRlLW1lbnUtc2hhZG93OiAwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCA0cHggNnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgICAgLS1hdGUtbWVudS1wYWRkaW5nOiA0cHg7XG4gICAgICAgIC0tYXRlLW1lbnUtZ2FwOiAycHg7XG5cbiAgICAgICAgLyogVG9vbGJhciAqL1xuICAgICAgICAtLWF0ZS10b29sYmFyLXBhZGRpbmc6IHZhcigtLWF0ZS1tZW51LXBhZGRpbmcpO1xuICAgICAgICAtLWF0ZS10b29sYmFyLWdhcDogdmFyKC0tYXRlLW1lbnUtZ2FwKTtcbiAgICAgICAgLS1hdGUtdG9vbGJhci1iYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc3VyZmFjZS1zZWNvbmRhcnksICNmOGY5ZmEpO1xuICAgICAgICAtLWF0ZS10b29sYmFyLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlciwgI2UyZThmMCk7XG4gICAgICAgIC0tYXRlLXRvb2xiYXItYnV0dG9uLWNvbG9yOiB2YXIoLS1hdGUtdGV4dC1zZWNvbmRhcnksICM2NDc0OGIpO1xuICAgICAgICAtLWF0ZS10b29sYmFyLWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgLS1hdGUtdG9vbGJhci1idXR0b24tYWN0aXZlLWJhY2tncm91bmQ6IGNvbG9yLW1peChcbiAgICAgICAgICBpbiBzcmdiLFxuICAgICAgICAgIHZhcigtLWF0ZS1wcmltYXJ5LCAjMjU2M2ViKSxcbiAgICAgICAgICB0cmFuc3BhcmVudCA5MCVcbiAgICAgICAgKTtcbiAgICAgICAgLS1hdGUtdG9vbGJhci1idXR0b24tYWN0aXZlLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSwgIzI1NjNlYik7XG5cbiAgICAgICAgLyogQ291bnRlciAqL1xuICAgICAgICAtLWF0ZS1jb3VudGVyLWNvbG9yOiB2YXIoLS1hdGUtdGV4dC1zZWNvbmRhcnksICM2NDc0OGIpO1xuICAgICAgICAtLWF0ZS1jb3VudGVyLWJhY2tncm91bmQ6IHZhcigtLWF0ZS1zdXJmYWNlLXNlY29uZGFyeSwgI2Y4ZjlmYSk7XG4gICAgICAgIC0tYXRlLWNvdW50ZXItYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtYm9yZGVyLCAjZTJlOGYwKTtcblxuICAgICAgICAvKiBEcmFnICYgRHJvcCAqL1xuICAgICAgICAtLWF0ZS1kcmFnLWJhY2tncm91bmQ6ICNmMGY4ZmY7XG4gICAgICAgIC0tYXRlLWRyYWctYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSwgIzI1NjNlYik7XG5cbiAgICAgICAgLyogQmxvY2txdW90ZSAqL1xuICAgICAgICAtLWF0ZS1ibG9ja3F1b3RlLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlciwgI2UyZThmMCk7XG4gICAgICAgIC0tYXRlLWJsb2NrcXVvdGUtYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5LCAjZjhmOWZhKTtcblxuICAgICAgICAvKiBDb2RlICovXG4gICAgICAgIC0tYXRlLWNvZGUtYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5LCAjZjhmOWZhKTtcbiAgICAgICAgLS1hdGUtY29kZS1jb2xvcjogdmFyKC0tYXRlLXRleHQsICMyZDM3NDgpO1xuICAgICAgICAtLWF0ZS1jb2RlLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlciwgI2UyZThmMCk7XG5cbiAgICAgICAgLS1hdGUtY29kZS1ibG9jay1iYWNrZ3JvdW5kOiAjMGYxNzJhO1xuICAgICAgICAtLWF0ZS1jb2RlLWJsb2NrLWNvbG9yOiAjZTJlOGYwO1xuICAgICAgICAtLWF0ZS1jb2RlLWJsb2NrLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlciwgI2UyZThmMCk7XG5cbiAgICAgICAgLyogSW1hZ2VzICovXG4gICAgICAgIC0tYXRlLWltYWdlLWJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgICAgIC0tYXRlLWltYWdlLXNlbGVjdGVkLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSwgIzI1NjNlYik7XG5cbiAgICAgICAgLyogU2Nyb2xsYmFycyAqL1xuICAgICAgICAtLWF0ZS1zY3JvbGxiYXItd2lkdGg6IDEwcHg7XG4gICAgICAgIC0tYXRlLXNjcm9sbGJhci10aHVtYjogdmFyKC0tYXRlLWJvcmRlciwgI2UyZThmMCk7XG4gICAgICAgIC0tYXRlLXNjcm9sbGJhci10aHVtYi1ob3ZlcjogdmFyKC0tYXRlLXRleHQtbXV0ZWQsICNhMGFlYzApO1xuICAgICAgICAtLWF0ZS1zY3JvbGxiYXItdHJhY2s6IHRyYW5zcGFyZW50O1xuXG4gICAgICAgIC8qIFRhYmxlcyAqL1xuICAgICAgICAtLWF0ZS10YWJsZS1ib3JkZXItY29sb3I6IHZhcigtLWF0ZS1ib3JkZXIsICNlMmU4ZjApO1xuICAgICAgICAtLWF0ZS10YWJsZS1oZWFkZXItYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5LCAjZjhmOWZhKTtcbiAgICAgICAgLS1hdGUtdGFibGUtaGVhZGVyLWNvbG9yOiB2YXIoLS1hdGUtdGV4dCwgIzJkMzc0OCk7XG4gICAgICAgIC0tYXRlLXRhYmxlLWNlbGwtYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgICAtLWF0ZS10YWJsZS1jZWxsLXNlbGVjdGVkLWJhY2tncm91bmQ6IGNvbG9yLW1peChcbiAgICAgICAgICBpbiBzcmdiLFxuICAgICAgICAgIHZhcigtLWF0ZS1wcmltYXJ5LCAjMjU2M2ViKSxcbiAgICAgICAgICB0cmFuc3BhcmVudCA5MCVcbiAgICAgICAgKTtcbiAgICAgICAgLS1hdGUtdGFibGUtcmVzaXplLWhhbmRsZS1jb2xvcjogdmFyKC0tYXRlLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgICAtLWF0ZS10YWJsZS1yb3ctaG92ZXItYmFja2dyb3VuZDogY29sb3ItbWl4KFxuICAgICAgICAgIGluIHNyZ2IsXG4gICAgICAgICAgdmFyKC0tYXRlLXByaW1hcnksICMyNTYzZWIpLFxuICAgICAgICAgIHRyYW5zcGFyZW50IDk1JVxuICAgICAgICApO1xuXG4gICAgICAgIC8qIEZsb2F0aW5nIFVJICYgVG9vbHRpcHMgKi9cbiAgICAgICAgLS1hdGUtdG9vbHRpcC1iZzogdmFyKC0tYXRlLWNvZGUtYmxvY2stYmFja2dyb3VuZCwgIzBmMTcyYSk7XG4gICAgICAgIC0tYXRlLXRvb2x0aXAtY29sb3I6IHZhcigtLWF0ZS1jb2RlLWJsb2NrLWNvbG9yLCAjZTJlOGYwKTtcbiAgICAgIH1cblxuICAgICAgLyogTWFudWFsIGRhcmsgbW9kZSB3aXRoIGNsYXNzIG9yIGRhdGEgYXR0cmlidXRlICovXG4gICAgICA6aG9zdCguZGFyayksXG4gICAgICA6aG9zdChbZGF0YS10aGVtZT1cImRhcmtcIl0pIHtcbiAgICAgICAgLyogPT09PT0gREFSSyBCQVNFIFRPS0VOUyA9PT09PSAqL1xuICAgICAgICAtLWF0ZS1wcmltYXJ5OiAjM2I4MmY2O1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWNvbnRyYXN0OiAjZmZmZmZmO1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWxpZ2h0OiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYXRlLXByaW1hcnkpLCB0cmFuc3BhcmVudCA4NSUpO1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWxpZ2h0ZXI6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hdGUtcHJpbWFyeSksIHRyYW5zcGFyZW50IDkyJSk7XG4gICAgICAgIC0tYXRlLXByaW1hcnktbGlnaHQtYWxwaGE6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hdGUtcHJpbWFyeSksIHRyYW5zcGFyZW50IDgwJSk7XG5cbiAgICAgICAgLS1hdGUtc3VyZmFjZTogIzAyMDYxNztcbiAgICAgICAgLS1hdGUtc3VyZmFjZS1zZWNvbmRhcnk6ICMwZjE3MmE7XG4gICAgICAgIC0tYXRlLXN1cmZhY2UtdGVydGlhcnk6ICMxZTI5M2I7XG5cbiAgICAgICAgLS1hdGUtdGV4dDogI2Y4ZmFmYztcbiAgICAgICAgLS1hdGUtdGV4dC1zZWNvbmRhcnk6ICM5NGEzYjg7XG4gICAgICAgIC0tYXRlLXRleHQtbXV0ZWQ6ICM2NDc0OGI7XG5cbiAgICAgICAgLS1hdGUtYm9yZGVyOiAjMWUyOTNiO1xuXG4gICAgICAgIC0tYXRlLWhpZ2hsaWdodC1iZzogIzg1NGQwZTtcbiAgICAgICAgLS1hdGUtaGlnaGxpZ2h0LWNvbG9yOiAjZmVmMDhhO1xuXG4gICAgICAgIC0tYXRlLWJ1dHRvbi1ob3ZlcjogIzFlMjkzYjtcbiAgICAgICAgLS1hdGUtYnV0dG9uLWFjdGl2ZTogIzBmMTcyYTtcblxuICAgICAgICAvKiA9PT09PSBNRU5VUyAoU2xhc2gvQnViYmxlKSA9PT09PSAqL1xuICAgICAgICAtLWF0ZS1tZW51LWJvcmRlcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAgICAgICAtLWF0ZS1tZW51LXNoYWRvdzogMCAyMHB4IDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMyksIDAgMTBweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuXG4gICAgICAgIC0tYXRlLWVycm9yLWNvbG9yOiAjZjg3MTcxO1xuICAgICAgICAtLWF0ZS1lcnJvci1iZzogIzQ1MGEwYTtcbiAgICAgICAgLS1hdGUtZXJyb3ItYm9yZGVyOiAjN2YxZDFkO1xuXG4gICAgICAgIC8qID09PT09IERBUksgQ09NUE9ORU5UIE9WRVJSSURFUyA9PT09PSAqL1xuICAgICAgICAtLWF0ZS1kcmFnLWJhY2tncm91bmQ6IHZhcigtLWF0ZS1zdXJmYWNlLXRlcnRpYXJ5KTtcbiAgICAgICAgLS1hdGUtZHJhZy1ib3JkZXItY29sb3I6IHZhcigtLWF0ZS1wcmltYXJ5KTtcbiAgICAgICAgLS1hdGUtYmxvY2txdW90ZS1ib3JkZXItY29sb3I6IHZhcigtLWF0ZS1wcmltYXJ5KTtcbiAgICAgICAgLS1hdGUtdG9vbGJhci1idXR0b24tYWN0aXZlLWJhY2tncm91bmQ6IHZhcigtLWF0ZS1wcmltYXJ5LWxpZ2h0KTtcbiAgICAgICAgLS1hdGUtdG9vbGJhci1idXR0b24tYWN0aXZlLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG4gICAgICAgIC0tYXRlLWJ1dHRvbi1ob3ZlcjogdmFyKC0tYXRlLXN1cmZhY2UtdGVydGlhcnkpO1xuICAgICAgICAtLWF0ZS1idXR0b24tYWN0aXZlOiB2YXIoLS1hdGUtc3VyZmFjZS1zZWNvbmRhcnkpO1xuICAgICAgICAtLWF0ZS1zY3JvbGxiYXItdGh1bWI6IHZhcigtLWF0ZS1zdXJmYWNlLXRlcnRpYXJ5KTtcbiAgICAgICAgLS1hdGUtc2Nyb2xsYmFyLXRodW1iLWhvdmVyOiB2YXIoLS1hdGUtdGV4dC1tdXRlZCk7XG4gICAgICB9XG5cbiAgICAgIC8qIEhvc3Qgc3R5bGVzIHBvdXIgZmlsbENvbnRhaW5lciAqL1xuICAgICAgOmhvc3QoLmZpbGwtY29udGFpbmVyKSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC8qIE1haW4gZWRpdG9yIGNvbnRhaW5lciAqL1xuICAgICAgLmF0ZS1lZGl0b3Ige1xuICAgICAgICBib3JkZXI6IHZhcigtLWF0ZS1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWF0ZS1ib3JkZXItY29sb3IpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtYm9yZGVyLXJhZGl1cyk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1iYWNrZ3JvdW5kKTtcbiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzIGVhc2U7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cblxuICAgICAgLyogRmxvYXRpbmcgVG9vbGJhciBNb2RlICovXG4gICAgICA6aG9zdCguZmxvYXRpbmctdG9vbGJhcikgLmF0ZS1lZGl0b3Ige1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgIH1cblxuICAgICAgLyogRmlsbCBjb250YWluZXIgbW9kZSAtIGVkaXRvciBmaWxscyBpdHMgcGFyZW50ICovXG4gICAgICA6aG9zdCguZmlsbC1jb250YWluZXIpIC5hdGUtZWRpdG9yIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCguZmlsbC1jb250YWluZXIpIC5hdGUtY29udGVudC13cmFwcGVyIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoLmZpbGwtY29udGFpbmVyKSAuYXRlLWNvbnRlbnQge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgfVxuXG4gICAgICAuYXRlLWVkaXRvcjpmb2N1cy13aXRoaW4ge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWF0ZS1mb2N1cy1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIC8qIEVkaXRvciBjb250ZW50IGFyZWEgKi9cbiAgICAgIC5hdGUtY29udGVudCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWVkaXRvci1taW4taGVpZ2h0LCAyMDBweCk7XG4gICAgICAgIGhlaWdodDogdmFyKC0tZWRpdG9yLWhlaWdodCwgYXV0byk7XG4gICAgICAgIG1heC1oZWlnaHQ6IHZhcigtLWVkaXRvci1tYXgtaGVpZ2h0LCBub25lKTtcbiAgICAgICAgb3ZlcmZsb3cteTogdmFyKC0tZWRpdG9yLW92ZXJmbG93LCB2aXNpYmxlKTtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gICAgICAgIHNjcm9sbGJhci1jb2xvcjogdmFyKC0tYXRlLXNjcm9sbGJhci10aHVtYikgdmFyKC0tYXRlLXNjcm9sbGJhci10cmFjayk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KC5pcy1kaXNhYmxlZCkgLmF0ZS1jb250ZW50IHtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0ZS1zdXJmYWNlLXRlcnRpYXJ5KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoLmlzLXJlYWRvbmx5KSAuYXRlLWNvbnRlbnQge1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIHVzZXItc2VsZWN0OiB0ZXh0O1xuICAgICAgfVxuXG4gICAgICA6aG9zdCguaXMtcmVhZG9ubHkpIC5hdGUtY29udGVudCA6Om5nLWRlZXAgLmF0ZS1saW5rIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICAgIH1cblxuICAgICAgLmF0ZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICAgIHdpZHRoOiB2YXIoLS1hdGUtc2Nyb2xsYmFyLXdpZHRoKTtcbiAgICAgIH1cblxuICAgICAgLmF0ZS1jb250ZW50LXdyYXBwZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtY29udGVudC13cmFwcGVyIC5hdGUtY29udGVudCB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc2Nyb2xsYmFyLXRyYWNrKTtcbiAgICAgIH1cblxuICAgICAgLmF0ZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1zY3JvbGxiYXItdGh1bWIpO1xuICAgICAgICBib3JkZXI6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBjb250ZW50LWJveDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgIH1cblxuICAgICAgLmF0ZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1zY3JvbGxiYXItdGh1bWItaG92ZXIpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNsaXA6IGNvbnRlbnQtYm94O1xuICAgICAgfVxuXG4gICAgICAuYXRlLWNvbnRlbnQuZHJhZy1vdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLWRyYWctYmFja2dyb3VuZCk7XG4gICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1hdGUtZHJhZy1ib3JkZXItY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAvKiBDb21wdGV1ciBkZSBjYXJhY3TDqHJlcyAqL1xuICAgICAgLmNoYXJhY3Rlci1jb3VudCB7XG4gICAgICAgIHBhZGRpbmc6IDZweCA4cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWF0ZS1jb3VudGVyLWNvbG9yKTtcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1hdGUtY291bnRlci1ib3JkZXItY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtY291bnRlci1iYWNrZ3JvdW5kKTtcbiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycyBlYXNlO1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiBjYWxjKHZhcigtLWF0ZS1ib3JkZXItcmFkaXVzKSAtIHZhcigtLWF0ZS1ib3JkZXItd2lkdGgpKTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IGNhbGModmFyKC0tYXRlLWJvcmRlci1yYWRpdXMpIC0gdmFyKC0tYXRlLWJvcmRlci13aWR0aCkpO1xuICAgICAgfVxuXG4gICAgICAuY2hhcmFjdGVyLWNvdW50LmxpbWl0LXJlYWNoZWQge1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLWVycm9yLWNvbG9yLCAjZWY0NDQ0KTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QuYXRlLWJsb2Nrcy1pbnNpZGUge1xuICAgICAgICAtLWF0ZS1jb250ZW50LWd1dHRlcjogNTRweDtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAgIDpob3N0LmF0ZS1ibG9ja3MtaW5zaWRlIHtcbiAgICAgICAgICAtLWF0ZS1jb250ZW50LWd1dHRlcjogMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgYXRlLWJsb2NrLWNvbnRyb2xzIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogU3R5bGVzIFByb3NlTWlycm9yIGF2ZWMgOmhvc3QgOjpuZy1kZWVwICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHtcbiAgICAgICAgcGFkZGluZy1pbmxpbmU6IGNhbGModmFyKC0tYXRlLWNvbnRlbnQtcGFkZGluZy1pbmxpbmUpICsgdmFyKC0tYXRlLWNvbnRlbnQtZ3V0dGVyKSk7XG4gICAgICAgIHBhZGRpbmctYmxvY2s6IHZhcigtLWF0ZS1jb250ZW50LXBhZGRpbmctYmxvY2spO1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBsaW5lLWhlaWdodDogdmFyKC0tYXRlLWxpbmUtaGVpZ2h0KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWF0ZS10ZXh0LWNvbG9yKTtcbiAgICAgICAgbWluLWhlaWdodDogMTAwJTtcbiAgICAgICAgLyogUydhc3N1cmVyIHF1ZSBsZSBjb250ZW51IHMnw6l0ZW5kIGNvcnJlY3RlbWVudCBkYW5zIHVuIGNvbnRlbmV1ciBzY3JvbGxhYmxlICovXG4gICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciA6OnNlbGVjdGlvbiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0ZS1zZWxlY3Rpb24tYmcpO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciA6Oi1tb3otc2VsZWN0aW9uIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYXRlLXNlbGVjdGlvbi1iZyk7XG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgfVxuXG4gICAgICAvKiBUaXRyZXMgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgaDEge1xuICAgICAgICBmb250LXNpemU6IDJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGgyIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgaDMge1xuICAgICAgICBmb250LXNpemU6IDEuMjVlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgaDQge1xuICAgICAgICBmb250LXNpemU6IDEuMWVtO1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgbWFyZ2luLXRvcDogMWVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBoNSxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgaDYge1xuICAgICAgICBmb250LXNpemU6IDFlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgICB9XG5cbiAgICAgIC8qIFBhcmFncmFwaGVzIGV0IGxpc3RlcyAoTm9ybWFsaXNhdGlvbiBjb250cmUgbGVzIENTUyBSZXNldHMgZ2xvYmF1eCB0eXBlIFRhaWx3aW5kKSAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBwIHtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHVsIHtcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBkaXNjO1xuICAgICAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDJlbTtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIG9sIHtcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsO1xuICAgICAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDJlbTtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHVsIHVsIHtcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdWwgdWwgdWwge1xuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBvbCBvbCB7XG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbG93ZXItYWxwaGE7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3Igb2wgb2wgb2wge1xuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IGxvd2VyLXJvbWFuO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGxpOjptYXJrZXIge1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLWxpc3QtbWFya2VyLWNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB1bFtkYXRhLXR5cGU9XCJ0YXNrTGlzdFwiXSB7XG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBociB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWF0ZS1ib3JkZXIpO1xuICAgICAgICBtYXJnaW46IDEuNWVtIDA7XG4gICAgICB9XG5cbiAgICAgIC8qIENpdGF0aW9ucyAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBibG9ja3F1b3RlIHtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1hdGUtYmxvY2txdW90ZS1ib3JkZXItY29sb3IpO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgICAgICAgbWFyZ2luOiAxZW0gMDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLWJsb2NrcXVvdGUtYmFja2dyb3VuZCk7XG4gICAgICAgIHBhZGRpbmc6IDAuNWVtIDFlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMCA0cHggNHB4IDA7XG4gICAgICB9XG5cbiAgICAgIC8qIENvZGUgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgY29kZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1jb2RlLWJhY2tncm91bmQpO1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLWNvZGUtY29sb3IpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdGUtY29kZS1ib3JkZXItY29sb3IpO1xuICAgICAgICBwYWRkaW5nOiAwLjE1ZW0gMC40ZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiSmV0QnJhaW5zIE1vbm9cIiwgXCJGaXJhIENvZGVcIiwgXCJNb25hY29cIiwgXCJDb25zb2xhc1wiLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NWVtO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHByZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1jb2RlLWJsb2NrLWJhY2tncm91bmQpO1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLWNvZGUtYmxvY2stY29sb3IpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdGUtY29kZS1ibG9jay1ib3JkZXItY29sb3IpO1xuICAgICAgICBwYWRkaW5nOiAxZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWF0ZS1ib3JkZXItcmFkaXVzKTtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgbWFyZ2luOiAxZW0gMDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBwcmUgY29kZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG5cbiAgICAgIC8qIFBsYWNlaG9sZGVyICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHAuaXMtZWRpdG9yLWVtcHR5OmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiBhdHRyKGRhdGEtcGxhY2Vob2xkZXIpO1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLXBsYWNlaG9sZGVyLWNvbG9yKTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICB9XG5cbiAgICAgIC8qIE1vZGUgbGVjdHVyZSBzZXVsZSAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvcltjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiXSB7XG4gICAgICAgIC8qIEFsbG93IGludGVyYWN0aW9uIGluIHJlYWQtb25seSBtb2RlIChsaW5rcywgbm9kZSBzZWxlY3Rpb24pICovXG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3JbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0gaW1nIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdIGEge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3JbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0gaW1nOmhvdmVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdIGltZy5Qcm9zZU1pcnJvci1zZWxlY3RlZG5vZGUge1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgfVxuXG4gICAgICAvKiBTdHlsZXMgcG91ciBsZXMgaW1hZ2VzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGltZyB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYXRlLWltYWdlLWJvcmRlci1yYWRpdXMpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGltZzpob3ZlciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlci1jb2xvcik7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgaW1nLlByb3NlTWlycm9yLXNlbGVjdGVkbm9kZSxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXphYmxlLWltYWdlLWNvbnRhaW5lci5zZWxlY3RlZCBpbWcge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWF0ZS1pbWFnZS1zZWxlY3RlZC1jb2xvcik7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC8qIEFsaWdubWVudCBTdXBwb3J0IChQcm9zZU1pcnJvciAvIEFURSBXcmFwcGVyKSAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBbZGF0YS10ZXh0LWFsaWduPVwiY2VudGVyXCJdLFxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBbZGF0YS1hbGlnbj1cImNlbnRlclwiXSB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBbZGF0YS10ZXh0LWFsaWduPVwicmlnaHRcIl0sXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIFtkYXRhLWFsaWduPVwicmlnaHRcIl0ge1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBbZGF0YS10ZXh0LWFsaWduPVwibGVmdFwiXSxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgW2RhdGEtYWxpZ249XCJsZWZ0XCJdIHtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIH1cblxuICAgICAgLyogQ29udGVuZXVyIHBvdXIgbGVzIGltYWdlcyByZWRpbWVuc2lvbm5hYmxlcyAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5yZXNpemFibGUtaW1hZ2Utd3JhcHBlciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6YWJsZS1pbWFnZS1jb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAvKiBDb250ZW5ldXIgZGVzIGNvbnRyw7RsZXMgZGUgcmVkaW1lbnNpb25uZW1lbnQgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWNvbnRyb2xzIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB6LWluZGV4OiAxMDAwO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLyogU3R5bGVzIHBvdXIgbGUgU2xhc2hDb21tYW5kQ29tcG9uZW50ICovXG4gICAgICA6Om5nLWRlZXAgLmF0ZS1zbGFzaC1kZWNvcmF0aW9uIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKFxuICAgICAgICAgIC0tYXRlLXByaW1hcnktbGlnaHQsXG4gICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWF0ZS1wcmltYXJ5LCAjMjU2M2ViKSwgdHJhbnNwYXJlbnQgOTAlKVxuICAgICAgICApO1xuICAgICAgICBwYWRkaW5nOiA0cHggOHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtc3ViLWJvcmRlci1yYWRpdXMsIDhweCk7XG4gICAgICB9XG5cbiAgICAgIDo6bmctZGVlcCAuYXRlLXNsYXNoLWRlY29yYXRpb24uaXMtZW1wdHk6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogYXR0cihkYXRhLWRlY29yYXRpb24tY29udGVudCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtdGV4dC1zZWNvbmRhcnkpO1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICB9XG5cbiAgICAgIC8qIEFmZmljaGVyIGxlcyBwb2lnbsOpZXMgYXUgaG92ZXIgKG3Dqm1lIHNpIG5vbiBzw6lsZWN0aW9ubsOpKSAtIFVuaXF1ZW1lbnQgc2kgw6lkaXRhYmxlICovXG4gICAgICA6aG9zdDpub3QoLmlzLXJlYWRvbmx5KTpub3QoLmlzLWRpc2FibGVkKVxuICAgICAgICA6Om5nLWRlZXBcbiAgICAgICAgLnJlc2l6YWJsZS1pbWFnZS1jb250YWluZXI6aG92ZXJcbiAgICAgICAgLnJlc2l6ZS1jb250cm9scyxcbiAgICAgIDpob3N0Om5vdCguaXMtcmVhZG9ubHkpOm5vdCguaXMtZGlzYWJsZWQpIDo6bmctZGVlcCBib2R5LnJlc2l6aW5nIC5yZXNpemUtY29udHJvbHMge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICAvKiBQb2lnbsOpZXMgZGUgcmVkaW1lbnNpb25uZW1lbnQgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWhhbmRsZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IDAuMzVyZW07XG4gICAgICAgIGhlaWdodDogMnJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hdGUtc3VyZmFjZSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWF0ZS1ib3JkZXItcmFkaXVzKTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB6LWluZGV4OiAxMDAxO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5yZXNpemUtaGFuZGxlOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDNweCA4cHggcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGU6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgfVxuXG4gICAgICAvKiBQb2lnbsOpZXMgZGVzIGPDtHTDqXMgYXZlYyBzY2FsZSBzw6lwYXLDqSBwb3VyIGNlbnRyYWdlICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtdzpob3ZlcixcbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWhhbmRsZS1lOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnktaG92ZXIpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtdzphY3RpdmUsXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtZTphY3RpdmUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSkgc2NhbGUoMC45KTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnktaG92ZXIpO1xuICAgICAgfVxuXG4gICAgICAvKiBQb3NpdGlvbnMgc3DDqWNpZmlxdWVzIHBvdXIgY2hhcXVlIHBvaWduw6llICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtdyB7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBsZWZ0OiAwLjM1cmVtO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgIGN1cnNvcjogdy1yZXNpemU7XG4gICAgICB9XG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtZSB7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICByaWdodDogMC4zNXJlbTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICBjdXJzb3I6IGUtcmVzaXplO1xuICAgICAgfVxuXG4gICAgICAvKiBTdHlsZXMgcG91ciBsZSByZWRpbWVuc2lvbm5lbWVudCBlbiBjb3VycyAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIGJvZHkucmVzaXppbmcge1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgY3Vyc29yOiBjcm9zc2hhaXI7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCBib2R5LnJlc2l6aW5nIC5Qcm9zZU1pcnJvciB7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgYm9keS5yZXNpemluZyAuUHJvc2VNaXJyb3IgLnJlc2l6YWJsZS1pbWFnZS1jb250YWluZXIge1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLyogU3R5bGVzIHBvdXIgbGVzIGluZm9ybWF0aW9ucyBkZSB0YWlsbGUgZCdpbWFnZSAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5pbWFnZS1zaXplLWluZm8ge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogLTIwcHg7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgcGFkZGluZzogMnB4IDZweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6YWJsZS1pbWFnZS1jb250YWluZXI6aG92ZXIgLmltYWdlLXNpemUtaW5mbyB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG4gICAgICAvKiBTdHlsZXMgcG91ciBsZXMgdGFibGVzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHtcbiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0ZCxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgdGgge1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWF0ZS10YWJsZS1ib3JkZXItY29sb3IpO1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYXRlLXRhYmxlLWJvcmRlci1jb2xvcik7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIG1pbi13aWR0aDogMWVtO1xuICAgICAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRkIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXRhYmxlLWNlbGwtYmFja2dyb3VuZCk7XG4gICAgICB9XG5cbiAgICAgIC8qIEFqb3V0ZXIgbGVzIGJvcmR1cmVzIGV4dGVybmVzIG1hbnF1YW50ZXMgcG91ciBmb3JtZXIgbGEgYm9yZHVyZSBkdSB0YWJsZWF1ICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRkOmZpcnN0LWNoaWxkLFxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0aDpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tYXRlLXRhYmxlLWJvcmRlci1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgdHI6Zmlyc3QtY2hpbGQgdGQsXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRyOmZpcnN0LWNoaWxkIHRoIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWF0ZS10YWJsZS1ib3JkZXItY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAvKiBDb2lucyBhcnJvbmRpcyAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDhweDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDhweDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogOHB4O1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA4cHg7XG4gICAgICB9XG5cbiAgICAgIC8qIEVuLXTDqnRlcyBkZSB0YWJsZSAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0aCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS10YWJsZS1oZWFkZXItYmFja2dyb3VuZCk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtdGFibGUtaGVhZGVyLWNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgLyogQ2VsbHVsZXMgc8OpbGVjdGlvbm7DqWVzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIC5zZWxlY3RlZENlbGw6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtdGFibGUtY2VsbC1zZWxlY3RlZC1iYWNrZ3JvdW5kKTtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgfVxuXG4gICAgICAvKiBQb2lnbsOpZXMgZGUgcmVkaW1lbnNpb25uZW1lbnQgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgLmNvbHVtbi1yZXNpemUtaGFuZGxlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogLTJweDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIHdpZHRoOiA0cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0ZS10YWJsZS1yZXNpemUtaGFuZGxlLWNvbG9yKTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGU6aG92ZXIgLmNvbHVtbi1yZXNpemUtaGFuZGxlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSAuY29sdW1uLXJlc2l6ZS1oYW5kbGU6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hdGUtZm9jdXMtY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAvKiBDb250YWluZXIgYXZlYyBzY3JvbGwgaG9yaXpvbnRhbCAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciAudGFibGVXcmFwcGVyIHtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgbWFyZ2luOiAxZW0gMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIC50YWJsZVdyYXBwZXIgdGFibGUge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgbWluLXdpZHRoOiA2MDBweDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgLyogUGFyYWdyYXBoZXMgZGFucyBsZXMgdGFibGVzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIC8qIFN0eWxlcyBwb3VyIGxlcyBsaWduZXMgYXZlYyBob3ZlciAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0Ym9keSB0cjpob3ZlciB0ZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0ZS10YWJsZS1yb3ctaG92ZXItYmFja2dyb3VuZCk7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhclRpcHRhcEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBDb25maWd1cmF0aW9uIGdsb2JhbGUgZGUgbCfDqWRpdGV1ciAqL1xuICBjb25maWcgPSBpbnB1dDxBdGVFZGl0b3JDb25maWc+KHt9KTtcblxuICBjb250ZW50ID0gaW5wdXQ8c3RyaW5nPihcIlwiKTtcbiAgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGVkaXRhYmxlID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZCwgdW5rbm93bj4odW5kZWZpbmVkLCB7IHRyYW5zZm9ybTogdHJhbnNmb3JtQm9vbGVhbklucHV0IH0pO1xuICBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIHVua25vd24+KHVuZGVmaW5lZCwgeyB0cmFuc2Zvcm06IHRyYW5zZm9ybUJvb2xlYW5JbnB1dCB9KTtcbiAgbWluSGVpZ2h0ID0gaW5wdXQ8bnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBoZWlnaHQgPSBpbnB1dDxudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIG1heEhlaWdodCA9IGlucHV0PG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgZmlsbENvbnRhaW5lciA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIHVua25vd24+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQm9vbGVhbklucHV0LFxuICB9KTtcbiAgc2hvd1Rvb2xiYXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybUJvb2xlYW5JbnB1dCxcbiAgfSk7XG4gIHNob3dGb290ZXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHsgdHJhbnNmb3JtOiB0cmFuc2Zvcm1Cb29sZWFuSW5wdXQgfSk7XG4gIHNob3dDaGFyYWN0ZXJDb3VudCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIHVua25vd24+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQm9vbGVhbklucHV0LFxuICB9KTtcbiAgc2hvd1dvcmRDb3VudCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIHVua25vd24+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQm9vbGVhbklucHV0LFxuICB9KTtcbiAgbWF4Q2hhcmFjdGVycyA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgZW5hYmxlT2ZmaWNlUGFzdGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybUJvb2xlYW5JbnB1dCxcbiAgfSk7XG4gIGVuYWJsZVNsYXNoQ29tbWFuZHMgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybUJvb2xlYW5JbnB1dCxcbiAgfSk7XG4gIHNsYXNoQ29tbWFuZHMgPSBpbnB1dDxBdGVTbGFzaENvbW1hbmRzQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBjdXN0b21TbGFzaENvbW1hbmRzID0gaW5wdXQ8QXRlQ3VzdG9tU2xhc2hDb21tYW5kcyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgYmxvY2tDb250cm9scyA9IGlucHV0PEF0ZUJsb2NrQ29udHJvbHNNb2RlPigpO1xuICBsb2NhbGUgPSBpbnB1dDxTdXBwb3J0ZWRMb2NhbGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGF1dG9mb2N1cyA9IGlucHV0PEF0ZUF1dG9mb2N1c01vZGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIG1vZGUgPSBpbnB1dDxcImNsYXNzaWNcIiB8IFwic2VhbWxlc3NcIiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgc2VhbWxlc3MgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHsgdHJhbnNmb3JtOiB0cmFuc2Zvcm1Cb29sZWFuSW5wdXQgfSk7XG4gIGZsb2F0aW5nVG9vbGJhciA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIHVua25vd24+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQm9vbGVhbklucHV0LFxuICB9KTtcbiAgc2hvd0VkaXRUb2dnbGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybUJvb2xlYW5JbnB1dCxcbiAgfSk7XG4gIHNwZWxsY2hlY2sgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHsgdHJhbnNmb3JtOiB0cmFuc2Zvcm1Cb29sZWFuSW5wdXQgfSk7XG5cbiAgdGlwdGFwRXh0ZW5zaW9ucyA9IGlucHV0PChFeHRlbnNpb24gfCBOb2RlIHwgTWFyaylbXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgdGlwdGFwT3B0aW9ucyA9IGlucHV0PFBhcnRpYWw8RWRpdG9yT3B0aW9ucz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLy8gTm91dmVhdXggaW5wdXRzIHBvdXIgbGVzIGJ1YmJsZSBtZW51c1xuICBzaG93QnViYmxlTWVudSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIHVua25vd24+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQm9vbGVhbklucHV0LFxuICB9KTtcbiAgYnViYmxlTWVudSA9IGlucHV0PFBhcnRpYWw8QXRlQnViYmxlTWVudUNvbmZpZz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHNob3dJbWFnZUJ1YmJsZU1lbnUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybUJvb2xlYW5JbnB1dCxcbiAgfSk7XG4gIGltYWdlQnViYmxlTWVudSA9IGlucHV0PFBhcnRpYWw8QXRlSW1hZ2VCdWJibGVNZW51Q29uZmlnPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvLyBDb25maWd1cmF0aW9uIGRlIGxhIHRvb2xiYXJcbiAgdG9vbGJhciA9IGlucHV0PFBhcnRpYWw8QXRlVG9vbGJhckNvbmZpZz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLy8gQ29uZmlndXJhdGlvbiBkZXMgbWVudXMgZGUgdGFibGVcbiAgc2hvd1RhYmxlQnViYmxlTWVudSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQsIHVua25vd24+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQm9vbGVhbklucHV0LFxuICB9KTtcbiAgdGFibGVCdWJibGVNZW51ID0gaW5wdXQ8UGFydGlhbDxBdGVUYWJsZUJ1YmJsZU1lbnVDb25maWc+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBzaG93Q2VsbEJ1YmJsZU1lbnUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCB1bmtub3duPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybUJvb2xlYW5JbnB1dCxcbiAgfSk7XG4gIGNlbGxCdWJibGVNZW51ID0gaW5wdXQ8UGFydGlhbDxBdGVDZWxsQnViYmxlTWVudUNvbmZpZz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9ubmFsIHN0YXRlIGNhbGN1bGF0b3JzIHRvIGV4dGVuZCB0aGUgcmVhY3RpdmUgZWRpdG9yIHN0YXRlLlxuICAgKi9cbiAgc3RhdGVDYWxjdWxhdG9ycyA9IGlucHV0PEF0ZVN0YXRlQ2FsY3VsYXRvcltdIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8vIE5vdXZlYXUgaW5wdXQgcG91ciBsYSBjb25maWd1cmF0aW9uIGRlIGwndXBsb2FkIGQnaW1hZ2VzXG4gIGltYWdlVXBsb2FkID0gaW5wdXQ8UGFydGlhbDxBdGVJbWFnZVVwbG9hZE9wdGlvbnM+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gaGFuZGxlciBmb3IgaW1hZ2UgdXBsb2Fkcy5cbiAgICogV2hlbiBwcm92aWRlZCwgaW1hZ2VzIHdpbGwgYmUgcHJvY2Vzc2VkIHRocm91Z2ggdGhpcyBoYW5kbGVyIGluc3RlYWQgb2YgYmVpbmcgY29udmVydGVkIHRvIGJhc2U2NC5cbiAgICogVGhpcyBhbGxvd3MgeW91IHRvIHVwbG9hZCBpbWFnZXMgdG8geW91ciBvd24gc2VydmVyL3N0b3JhZ2UgYW5kIHVzZSB0aGUgcmV0dXJuZWQgVVJMLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIG15VXBsb2FkSGFuZGxlcjogSW1hZ2VVcGxvYWRIYW5kbGVyID0gYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICogICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgKiAgIGZvcm1EYXRhLmFwcGVuZCgnaW1hZ2UnLCBjb250ZXh0LmZpbGUpO1xuICAgKiAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvdXBsb2FkJywgeyBtZXRob2Q6ICdQT1NUJywgYm9keTogZm9ybURhdGEgfSk7XG4gICAqICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICogICByZXR1cm4geyBzcmM6IGRhdGEuaW1hZ2VVcmwgfTtcbiAgICogfTtcbiAgICpcbiAgICogLy8gSW4gdGVtcGxhdGU6XG4gICAqIC8vIDxhbmd1bGFyLXRpcHRhcC1lZGl0b3IgW2ltYWdlVXBsb2FkSGFuZGxlcl09XCJteVVwbG9hZEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIGltYWdlVXBsb2FkSGFuZGxlciA9IGlucHV0PEF0ZUltYWdlVXBsb2FkSGFuZGxlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBlZGl0b3IgaW5zdGFuY2UgaW4gdGhlIHJlZ2lzdHJ5LlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhIHVuaXF1ZSBJRCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICovXG4gIGVkaXRvcklkID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8vIE5vdXZlYXV4IG91dHB1dHNcbiAgY29udGVudENoYW5nZSA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIGVkaXRvckNyZWF0ZWQgPSBvdXRwdXQ8RWRpdG9yPigpO1xuICBlZGl0b3JVcGRhdGUgPSBvdXRwdXQ8eyBlZGl0b3I6IEVkaXRvcjsgdHJhbnNhY3Rpb246IHVua25vd24gfT4oKTtcbiAgZWRpdG9yRm9jdXMgPSBvdXRwdXQ8eyBlZGl0b3I6IEVkaXRvcjsgZXZlbnQ6IEZvY3VzRXZlbnQgfT4oKTtcbiAgZWRpdG9yQmx1ciA9IG91dHB1dDx7IGVkaXRvcjogRWRpdG9yOyBldmVudDogRm9jdXNFdmVudCB9PigpO1xuICBlZGl0YWJsZUNoYW5nZSA9IG91dHB1dDxib29sZWFuPigpO1xuICBpbWFnZVVwbG9hZGVkID0gb3V0cHV0PEF0ZUltYWdlVXBsb2FkUmVzdWx0PigpO1xuICAvKiogRW1pdHRlZCB3aGVuIGFuIGltYWdlIGZyb20gcGFzdGVkIEhUTUwgaXMgZHJvcHBlZCAodW5yZWFjaGFibGUgc291cmNlIG9yIGZhaWxlZCB1cGxvYWQpICovXG4gIHBhc3RlZEltYWdlUmVqZWN0ZWQgPSBvdXRwdXQ8QXRlUGFzdGVkSW1hZ2VSZWplY3Rpb24+KCk7XG5cbiAgLy8gVmlld0NoaWxkIHdpdGggc2lnbmFsXG4gIGVkaXRvckVsZW1lbnQgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oXCJlZGl0b3JFbGVtZW50XCIpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFRvb2xiYXIgLyBCdWJibGUgTWVudSBDb29yZGluYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgaGlkZUJ1YmJsZU1lbnVzKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLnNldFRvb2xiYXJJbnRlcmFjdGluZyh0cnVlKTtcbiAgfVxuXG4gIHNob3dCdWJibGVNZW51cygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5zZXRUb29sYmFySW50ZXJhY3RpbmcoZmFsc2UpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZSBzaWduYWxzIGZvciBpbnRlcm5hbCBzdGF0ZVxuICBwcml2YXRlIF9lZGl0b3IgPSBzaWduYWw8RWRpdG9yIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgX2NoYXJhY3RlckNvdW50ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgX3dvcmRDb3VudCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIF9pc0RyYWdPdmVyID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBfZWRpdG9yRnVsbHlJbml0aWFsaXplZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgX2hvdmVyZWRCbG9jayA9IHNpZ25hbDx7IG5vZGU6IFBNTm9kZTsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IHBvczogbnVtYmVyIH0gfCBudWxsPihudWxsKTtcblxuICAvLyBBbnRpLWVjaG86IHRyYWNrIGxhc3QgZW1pdHRlZCBIVE1MIHRvIHByZXZlbnQgY3Vyc29yIHJlc2V0IG9uIHBhcmVudCBlY2hvXG4gIHByaXZhdGUgbGFzdEVtaXR0ZWRIdG1sOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvLyBSZWFkLW9ubHkgYWNjZXNzIHRvIHNpZ25hbHNcbiAgcmVhZG9ubHkgZWRpdG9yID0gdGhpcy5fZWRpdG9yLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgY2hhcmFjdGVyQ291bnQgPSB0aGlzLl9jaGFyYWN0ZXJDb3VudC5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IHdvcmRDb3VudCA9IHRoaXMuX3dvcmRDb3VudC5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IGlzRHJhZ092ZXIgPSB0aGlzLl9pc0RyYWdPdmVyLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgZWRpdG9yRnVsbHlJbml0aWFsaXplZCA9IHRoaXMuX2VkaXRvckZ1bGx5SW5pdGlhbGl6ZWQuYXNSZWFkb25seSgpO1xuICByZWFkb25seSBob3ZlcmVkQmxvY2sgPSB0aGlzLl9ob3ZlcmVkQmxvY2suYXNSZWFkb25seSgpO1xuXG4gIHByaXZhdGUgX2lzRm9ybUNvbnRyb2xEaXNhYmxlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlzRm9ybUNvbnRyb2xEaXNhYmxlZCA9IHRoaXMuX2lzRm9ybUNvbnRyb2xEaXNhYmxlZC5hc1JlYWRvbmx5KCk7XG5cbiAgLy8gQ29tYmluZWQgZGlzYWJsZWQgc3RhdGUgKElucHV0ICsgRm9ybUNvbnRyb2wpXG4gIHJlYWRvbmx5IG1lcmdlZERpc2FibGVkID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gKHRoaXMuZGlzYWJsZWQoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmRpc2FibGVkKSB8fCB0aGlzLmlzRm9ybUNvbnRyb2xEaXNhYmxlZCgpXG4gICk7XG5cbiAgLy8gQ29tcHV0ZWQgZm9yIGVkaXRvciBzdGF0ZXNcbiAgaXNFZGl0b3JSZWFkeSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZWRpdG9yKCkgIT09IG51bGwpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVOSUZJRUQgQ09ORklHVVJBVElPTiBDT01QVVRFRCBQUk9QRVJUSUVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gQXBwZWFyYW5jZSAmIEZ1bmRhbWVudGFsc1xuICByZWFkb25seSBmaW5hbFNlYW1sZXNzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0VmFsID0gdGhpcy5zZWFtbGVzcygpO1xuICAgIGlmIChpbnB1dFZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gaW5wdXRWYWw7XG4gICAgfVxuXG4gICAgY29uc3QgbW9kZVZhbCA9IHRoaXMubW9kZSgpO1xuICAgIGlmIChtb2RlVmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBtb2RlVmFsID09PSBcInNlYW1sZXNzXCI7XG4gICAgfVxuXG4gICAgY29uc3QgZnJvbUNvbmZpZyA9IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkubW9kZTtcbiAgICByZXR1cm4gZnJvbUNvbmZpZyA9PT0gXCJzZWFtbGVzc1wiO1xuICB9KTtcblxuICByZWFkb25seSBmaW5hbEVkaXRhYmxlID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5lZGl0YWJsZSgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuZWRpdGFibGUgPz8gdHJ1ZVxuICApO1xuICByZWFkb25seSBmaW5hbFBsYWNlaG9sZGVyID0gY29tcHV0ZWQoXG4gICAgKCkgPT5cbiAgICAgIHRoaXMucGxhY2Vob2xkZXIoKSA/P1xuICAgICAgdGhpcy5lZmZlY3RpdmVDb25maWcoKS5wbGFjZWhvbGRlciA/P1xuICAgICAgdGhpcy5jdXJyZW50VHJhbnNsYXRpb25zKCkuZWRpdG9yLnBsYWNlaG9sZGVyXG4gICk7XG4gIHJlYWRvbmx5IGZpbmFsRmlsbENvbnRhaW5lciA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuZmlsbENvbnRhaW5lcigpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuZmlsbENvbnRhaW5lclxuICApO1xuICByZWFkb25seSBmaW5hbFNob3dGb290ZXIgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNob3dGb290ZXIoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNob3dGb290ZXIgPz8gdHJ1ZVxuICApO1xuICByZWFkb25seSBmaW5hbFNob3dFZGl0VG9nZ2xlID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93RWRpdFRvZ2dsZSgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd0VkaXRUb2dnbGUgPz8gZmFsc2VcbiAgKTtcblxuICByZWFkb25seSBmaW5hbEhlaWdodCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBoID0gdGhpcy5oZWlnaHQoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmhlaWdodDtcbiAgICByZXR1cm4gdHlwZW9mIGggPT09IFwibnVtYmVyXCIgPyBgJHtofXB4YCA6IGg7XG4gIH0pO1xuICByZWFkb25seSBmaW5hbE1pbkhlaWdodCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtaCA9IHRoaXMubWluSGVpZ2h0KCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5taW5IZWlnaHQ7XG4gICAgcmV0dXJuIHR5cGVvZiBtaCA9PT0gXCJudW1iZXJcIiA/IGAke21ofXB4YCA6IG1oO1xuICB9KTtcbiAgcmVhZG9ubHkgZmluYWxNYXhIZWlnaHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWggPSB0aGlzLm1heEhlaWdodCgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkubWF4SGVpZ2h0O1xuICAgIHJldHVybiB0eXBlb2YgbWggPT09IFwibnVtYmVyXCIgPyBgJHttaH1weGAgOiBtaDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmluYWxTcGVsbGNoZWNrID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zcGVsbGNoZWNrKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5zcGVsbGNoZWNrID8/IHRydWVcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxFbmFibGVPZmZpY2VQYXN0ZSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuZW5hYmxlT2ZmaWNlUGFzdGUoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmVuYWJsZU9mZmljZVBhc3RlID8/IHRydWVcbiAgKTtcblxuICAvLyBGZWF0dXJlc1xuICByZWFkb25seSBmaW5hbFNob3dUb29sYmFyID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93VG9vbGJhcigpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd1Rvb2xiYXIgPz8gdHJ1ZVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsVG9vbGJhckNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBmcm9tSW5wdXQgPSB0aGlzLnRvb2xiYXIoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnID0gdGhpcy5lZmZlY3RpdmVDb25maWcoKS50b29sYmFyO1xuICAgIGNvbnN0IGJhc2UgPSBBVEVfREVGQVVMVF9UT09MQkFSX0NPTkZJRztcblxuICAgIGlmIChmcm9tSW5wdXQgJiYgT2JqZWN0LmtleXMoZnJvbUlucHV0KS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tSW5wdXQgfTtcbiAgICB9XG4gICAgaWYgKGZyb21Db25maWcpIHtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLmZyb21Db25maWcgfTtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbmFsRmxvYXRpbmdUb29sYmFyID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5mbG9hdGluZ1Rvb2xiYXIoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmZsb2F0aW5nVG9vbGJhciA/PyBmYWxzZVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsU2hvd0J1YmJsZU1lbnUgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNob3dCdWJibGVNZW51KCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5zaG93QnViYmxlTWVudSA/PyB0cnVlXG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxCdWJibGVNZW51Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZyb21JbnB1dCA9IHRoaXMuYnViYmxlTWVudSgpO1xuICAgIGNvbnN0IGZyb21Db25maWcgPSB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmJ1YmJsZU1lbnU7XG4gICAgY29uc3QgYmFzZSA9IEFURV9ERUZBVUxUX0JVQkJMRV9NRU5VX0NPTkZJRztcblxuICAgIGlmIChmcm9tSW5wdXQgJiYgT2JqZWN0LmtleXMoZnJvbUlucHV0KS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tSW5wdXQgfTtcbiAgICB9XG4gICAgaWYgKGZyb21Db25maWcpIHtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLmZyb21Db25maWcgfTtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbmFsU2hvd0ltYWdlQnViYmxlTWVudSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2hvd0ltYWdlQnViYmxlTWVudSgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd0ltYWdlQnViYmxlTWVudSA/PyB0cnVlXG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxJbWFnZUJ1YmJsZU1lbnVDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZnJvbUlucHV0ID0gdGhpcy5pbWFnZUJ1YmJsZU1lbnUoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnID0gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5pbWFnZUJ1YmJsZU1lbnU7XG4gICAgY29uc3QgYmFzZSA9IEFURV9ERUZBVUxUX0lNQUdFX0JVQkJMRV9NRU5VX0NPTkZJRztcblxuICAgIGlmIChmcm9tSW5wdXQgJiYgT2JqZWN0LmtleXMoZnJvbUlucHV0KS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tSW5wdXQgfTtcbiAgICB9XG4gICAgaWYgKGZyb21Db25maWcpIHtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLmZyb21Db25maWcgfTtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbmFsU2hvd1RhYmxlQnViYmxlTWVudSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2hvd1RhYmxlQnViYmxlTWVudSgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd1RhYmxlTWVudSA/PyB0cnVlXG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxUYWJsZUJ1YmJsZU1lbnVDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZnJvbUlucHV0ID0gdGhpcy50YWJsZUJ1YmJsZU1lbnUoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnID0gdGhpcy5lZmZlY3RpdmVDb25maWcoKS50YWJsZUJ1YmJsZU1lbnU7XG4gICAgY29uc3QgYmFzZSA9IEFURV9ERUZBVUxUX1RBQkxFX01FTlVfQ09ORklHO1xuXG4gICAgaWYgKGZyb21JbnB1dCAmJiBPYmplY3Qua2V5cyhmcm9tSW5wdXQpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLmZyb21JbnB1dCB9O1xuICAgIH1cbiAgICBpZiAoZnJvbUNvbmZpZykge1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgLi4uZnJvbUNvbmZpZyB9O1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmluYWxTaG93Q2VsbEJ1YmJsZU1lbnUgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNob3dDZWxsQnViYmxlTWVudSgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd0NlbGxNZW51ID8/IHRydWVcbiAgKTtcblxuICByZWFkb25seSBmaW5hbENlbGxCdWJibGVNZW51Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZyb21JbnB1dCA9IHRoaXMuY2VsbEJ1YmJsZU1lbnUoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnID0gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5jZWxsQnViYmxlTWVudTtcbiAgICBjb25zdCBiYXNlID0gQVRFX0RFRkFVTFRfQ0VMTF9NRU5VX0NPTkZJRztcblxuICAgIGlmIChmcm9tSW5wdXQgJiYgT2JqZWN0LmtleXMoZnJvbUlucHV0KS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tSW5wdXQgfTtcbiAgICB9XG4gICAgaWYgKGZyb21Db25maWcpIHtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLmZyb21Db25maWcgfTtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbmFsRW5hYmxlU2xhc2hDb21tYW5kcyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuZW5hYmxlU2xhc2hDb21tYW5kcygpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuZW5hYmxlU2xhc2hDb21tYW5kcyA/PyB0cnVlXG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxTbGFzaENvbW1hbmRzQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZyb21JbnB1dENvbXBvbmVudCA9IHRoaXMuY3VzdG9tU2xhc2hDb21tYW5kcygpO1xuICAgIGNvbnN0IGZyb21Db25maWdDb21wb25lbnQgPSB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmN1c3RvbVNsYXNoQ29tbWFuZHM7XG4gICAgY29uc3QgY3VzdG9tQ29uZmlnID0gZnJvbUlucHV0Q29tcG9uZW50ID8/IGZyb21Db25maWdDb21wb25lbnQ7XG5cbiAgICBpZiAoY3VzdG9tQ29uZmlnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQ29uZmlnO1xuICAgIH1cblxuICAgIGNvbnN0IGZyb21JbnB1dE9wdGlvbnMgPSB0aGlzLnNsYXNoQ29tbWFuZHMoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnT3B0aW9ucyA9IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2xhc2hDb21tYW5kcztcbiAgICBjb25zdCBiYXNlQ29uZmlnID1cbiAgICAgIGZyb21JbnB1dE9wdGlvbnMgJiYgT2JqZWN0LmtleXMoZnJvbUlucHV0T3B0aW9ucykubGVuZ3RoID4gMFxuICAgICAgICA/IGZyb21JbnB1dE9wdGlvbnNcbiAgICAgICAgOiBmcm9tQ29uZmlnT3B0aW9ucztcblxuICAgIHJldHVybiB7XG4gICAgICBjb21tYW5kczogZmlsdGVyU2xhc2hDb21tYW5kcyhcbiAgICAgICAgYmFzZUNvbmZpZyB8fCB7fSxcbiAgICAgICAgdGhpcy5pMThuU2VydmljZSxcbiAgICAgICAgdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UsXG4gICAgICAgIHRoaXMuZmluYWxJbWFnZVVwbG9hZENvbmZpZygpXG4gICAgICApLFxuICAgIH07XG4gIH0pO1xuXG4gIC8vIEJlaGF2aW9yXG4gIHJlYWRvbmx5IGZpbmFsQXV0b2ZvY3VzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdXRvZm9jdXMoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmF1dG9mb2N1cyk7XG4gIHJlYWRvbmx5IGZpbmFsTWF4Q2hhcmFjdGVycyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMubWF4Q2hhcmFjdGVycygpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkubWF4Q2hhcmFjdGVyc1xuICApO1xuICByZWFkb25seSBmaW5hbEJsb2NrQ29udHJvbHMgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmJsb2NrQ29udHJvbHMoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmJsb2NrQ29udHJvbHMgPz8gXCJub25lXCJcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxTaG93Q2hhcmFjdGVyQ291bnQgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNob3dDaGFyYWN0ZXJDb3VudCgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd0NoYXJhY3RlckNvdW50ID8/IHRydWVcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxTaG93V29yZENvdW50ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93V29yZENvdW50KCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5zaG93V29yZENvdW50ID8/IHRydWVcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxMb2NhbGUgPSBjb21wdXRlZChcbiAgICAoKSA9PiAodGhpcy5sb2NhbGUoKSBhcyBTdXBwb3J0ZWRMb2NhbGUpID8/ICh0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmxvY2FsZSBhcyBTdXBwb3J0ZWRMb2NhbGUpXG4gICk7XG5cbiAgLy8gRXh0ZW5zaW9ucyAmIE9wdGlvbnNcbiAgcmVhZG9ubHkgZmluYWxUaXB0YXBFeHRlbnNpb25zID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy50aXB0YXBFeHRlbnNpb25zKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS50aXB0YXBFeHRlbnNpb25zID8/IFtdLFxuICAgIHsgZXF1YWw6IHNoYWxsb3dBcnJheUVxdWFsIH1cbiAgKTtcblxuICByZWFkb25seSBmaW5hbFRpcHRhcE9wdGlvbnMgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnRpcHRhcE9wdGlvbnMoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnRpcHRhcE9wdGlvbnMgPz8ge30sXG4gICAgeyBlcXVhbDogc2hhbGxvd09iamVjdEVxdWFsIH1cbiAgKTtcblxuICByZWFkb25seSBmaW5hbFN0YXRlQ2FsY3VsYXRvcnMgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnN0YXRlQ2FsY3VsYXRvcnMoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnN0YXRlQ2FsY3VsYXRvcnMgPz8gW11cbiAgKTtcblxuICByZWFkb25seSBmaW5hbEFuZ3VsYXJOb2Rlc0NvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuYW5ndWxhck5vZGVzID8/IFtdLCB7XG4gICAgZXF1YWw6IHNoYWxsb3dBcnJheUVxdWFsLFxuICB9KTtcblxuICAvLyBJbWFnZSBVcGxvYWRcbiAgcmVhZG9ubHkgZmluYWxJbWFnZVVwbG9hZENvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBmcm9tSW5wdXQgPSB0aGlzLmltYWdlVXBsb2FkKCk7XG4gICAgY29uc3QgZnJvbUNvbmZpZyA9IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuaW1hZ2VVcGxvYWQ7XG4gICAgY29uc3QgYmFzZSA9IEFURV9ERUZBVUxUX0lNQUdFX1VQTE9BRF9DT05GSUc7XG5cbiAgICBjb25zdCBtZXJnZWQgPSB7XG4gICAgICAuLi5iYXNlLFxuICAgICAgLi4uZnJvbUNvbmZpZyxcbiAgICAgIC4uLmZyb21JbnB1dCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1lcmdlZCxcbiAgICAgIG1heFNpemU6IChtZXJnZWQubWF4U2l6ZSA/PyA1KSAqIDEwMjQgKiAxMDI0LCAvLyBDb252ZXJ0IE1CIHRvIGJ5dGVzIGZvciBpbnRlcm5hbCBzZXJ2aWNlXG4gICAgfTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmluYWxJbWFnZVVwbG9hZEhhbmRsZXIgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmltYWdlVXBsb2FkSGFuZGxlcigpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuaW1hZ2VVcGxvYWQ/LmhhbmRsZXJcbiAgKTtcblxuICAvLyBDb21wdXRlZCBmb3IgY3VycmVudCB0cmFuc2xhdGlvbnMgKGFsbG93cyBwZXItaW5zdGFuY2Ugb3ZlcnJpZGUgdmlhIGNvbmZpZyBvciBpbnB1dClcbiAgcmVhZG9ubHkgY3VycmVudFRyYW5zbGF0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBsb2NhbGVPdmVycmlkZSA9IHRoaXMuZmluYWxMb2NhbGUoKTtcbiAgICBpZiAobG9jYWxlT3ZlcnJpZGUpIHtcbiAgICAgIGNvbnN0IGFsbFRyYW5zbGF0aW9ucyA9IHRoaXMuaTE4blNlcnZpY2UuYWxsVHJhbnNsYXRpb25zKCk7XG4gICAgICByZXR1cm4gYWxsVHJhbnNsYXRpb25zW2xvY2FsZU92ZXJyaWRlXSB8fCB0aGlzLmkxOG5TZXJ2aWNlLnRyYW5zbGF0aW9ucygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pMThuU2VydmljZS50cmFuc2xhdGlvbnMoKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgLy8gTmdDb250cm9sIGZvciBtYW5hZ2VtZW50IG9mIEZvcm1Db250cm9sc1xuICBwcml2YXRlIG5nQ29udHJvbCA9IGluamVjdChOZ0NvbnRyb2wsIHsgc2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgcmVhZG9ubHkgaTE4blNlcnZpY2UgPSBpbmplY3QoQXRlSTE4blNlcnZpY2UpO1xuICByZWFkb25seSBlZGl0b3JDb21tYW5kc1NlcnZpY2UgPSBpbmplY3QoQXRlRWRpdG9yQ29tbWFuZHNTZXJ2aWNlKTtcbiAgLy8gQWNjZXNzIGVkaXRvciBzdGF0ZSB2aWEgc2VydmljZVxuICByZWFkb25seSBlZGl0b3JTdGF0ZSA9IHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLmVkaXRvclN0YXRlO1xuXG4gIHByaXZhdGUgZWRpdG9yUmVnaXN0cnkgPSBpbmplY3QoQXRlRWRpdG9yUmVnaXN0cnkpO1xuICBwcml2YXRlIGljb25SZWdpc3RyeSA9IGluamVjdChBdGVJY29uUmVnaXN0cnkpO1xuICBwcml2YXRlIF9yZWdpc3RlcmVkSWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHJlZ2lzdGVyZWRJZCA9IHRoaXMuX3JlZ2lzdGVyZWRJZC5hc1JlYWRvbmx5KCk7XG5cbiAgcHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgZ2xvYmFsQ29uZmlnID0gaW5qZWN0KEFURV9HTE9CQUxfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKlxuICAgKiBGaW5hbCBtZXJnZWQgY29uZmlndXJhdGlvbi5cbiAgICogUHJpb3JpdHk6IElucHV0IFtjb25maWddID4gR2xvYmFsIGNvbmZpZyB2aWEgcHJvdmlkZUF0ZUVkaXRvcigpXG4gICAqL1xuICByZWFkb25seSBlZmZlY3RpdmVDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZnJvbUlucHV0ID0gdGhpcy5jb25maWcoKTtcbiAgICBjb25zdCBmcm9tR2xvYmFsID0gdGhpcy5nbG9iYWxDb25maWcgfHwge307XG4gICAgcmV0dXJuIHsgLi4uQVRFX0RFRkFVTFRfQ09ORklHLCAuLi5mcm9tR2xvYmFsLCAuLi5mcm9tSW5wdXQgfTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gRWZmZWN0IHRvIHVwZGF0ZSBlZGl0b3IgY29udGVudCAod2l0aCBhbnRpLWVjaG8pXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50KCk7IC8vIFNvbGUgcmVhY3RpdmUgZGVwZW5kZW5jeVxuXG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICAgICAgICBjb25zdCBoYXNGb3JtQ29udHJvbCA9ICEhKHRoaXMubmdDb250cm9sIGFzIHsgY29udHJvbD86IHVua25vd24gfSk/LmNvbnRyb2w7XG5cbiAgICAgICAgICBpZiAoIWVkaXRvciB8fCBjb250ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBBbnRpLcOpY2hvIDogb24gaWdub3JlIGNlIHF1J29uIHZpZW50IGQnw6ltZXR0cmUgbm91cy1tw6ptZXNcbiAgICAgICAgICBpZiAoY29udGVudCA9PT0gdGhpcy5sYXN0RW1pdHRlZEh0bWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBEb3VibGUgc8OpY3VyaXTDqSA6IG9uIHbDqXJpZmllIGxlIGNvbnRlbnUgYWN0dWVsIGRlIGwnw6lkaXRldXJcbiAgICAgICAgICBpZiAoY29udGVudCA9PT0gZWRpdG9yLmdldEhUTUwoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERvIG5vdCBvdmVyd3JpdGUgY29udGVudCBpZiB3ZSBoYXZlIGEgRm9ybUNvbnRyb2wgYW5kIGNvbnRlbnQgaXMgZW1wdHlcbiAgICAgICAgICBpZiAoaGFzRm9ybUNvbnRyb2wgJiYgIWNvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuc2V0Q29udGVudChjb250ZW50LCB7IGVtaXRVcGRhdGU6IGZhbHNlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgLy8gRWZmZWN0IHRvIHVwZGF0ZSBoZWlnaHQgcHJvcGVydGllc1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgbWluSGVpZ2h0ID0gdGhpcy5maW5hbE1pbkhlaWdodCgpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmZpbmFsSGVpZ2h0KCk7XG4gICAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZmluYWxNYXhIZWlnaHQoKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWRpdG9yRWxlbWVudCgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIGlmIHNjcm9sbCBpcyBuZWVkZWRcbiAgICAgICAgY29uc3QgbmVlZHNTY3JvbGwgPSBoZWlnaHQgIT09IHVuZGVmaW5lZCB8fCBtYXhIZWlnaHQgIT09IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCItLWVkaXRvci1taW4taGVpZ2h0XCIsIG1pbkhlaWdodCA/PyBcImF1dG9cIik7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tZWRpdG9yLWhlaWdodFwiLCBoZWlnaHQgPz8gXCJhdXRvXCIpO1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCItLWVkaXRvci1tYXgtaGVpZ2h0XCIsIG1heEhlaWdodCA/PyBcIm5vbmVcIik7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tZWRpdG9yLW92ZXJmbG93XCIsIG5lZWRzU2Nyb2xsID8gXCJhdXRvXCIgOiBcInZpc2libGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgLy8gRWZmZWN0IHRvIG1vbml0b3IgZWRpdGFiaWxpdHkgY2hhbmdlc1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudEVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgICAgIC8vIEFuIGVkaXRvciBpcyBcImVkaXRhYmxlXCIgaWYgaXQncyBub3QgZGlzYWJsZWQgYW5kIGVkaXRhYmxlIG1vZGUgaXMgT05cbiAgICAgICAgY29uc3QgaXNFZGl0YWJsZSA9IHRoaXMuZmluYWxFZGl0YWJsZSgpICYmICF0aGlzLm1lcmdlZERpc2FibGVkKCk7XG4gICAgICAgIC8vIEFuIGVkaXRvciBpcyBcInJlYWRvbmx5XCIgaWYgaXQncyBleHBsaWNpdGx5IG5vbi1lZGl0YWJsZSBhbmQgbm90IGRpc2FibGVkXG4gICAgICAgIC8vIGNvbnN0IGlzUmVhZE9ubHkgPSAhdGhpcy5maW5hbEVkaXRhYmxlKCkgJiYgIXRoaXMubWVyZ2VkRGlzYWJsZWQoKTsgLy8gVW51c2VkIHZhcmlhYmxlXG5cbiAgICAgICAgaWYgKGN1cnJlbnRFZGl0b3IpIHtcbiAgICAgICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5zZXRFZGl0YWJsZShjdXJyZW50RWRpdG9yLCBpc0VkaXRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICAvLyBFZmZlY3QgdG8gc3luY2hyb25pemUgaW1hZ2UgdXBsb2FkIGhhbmRsZXIgd2l0aCB0aGUgc2VydmljZVxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuZmluYWxJbWFnZVVwbG9hZEhhbmRsZXIoKTtcbiAgICAgICAgdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UudXBsb2FkSGFuZGxlciA9IGhhbmRsZXIgfHwgbnVsbDtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgLy8gRWZmZWN0IHRvIHVwZGF0ZSBjaGFyYWN0ZXIgY291bnQgbGltaXQgZHluYW1pY2FsbHlcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gdGhpcy5maW5hbE1heENoYXJhY3RlcnMoKTtcblxuICAgICAgICBpZiAoZWRpdG9yICYmIGVkaXRvci5leHRlbnNpb25NYW5hZ2VyKSB7XG4gICAgICAgICAgY29uc3QgY2hhcmFjdGVyQ291bnRFeHRlbnNpb24gPSBlZGl0b3IuZXh0ZW5zaW9uTWFuYWdlci5leHRlbnNpb25zLmZpbmQoXG4gICAgICAgICAgICBleHQgPT4gZXh0Lm5hbWUgPT09IFwiY2hhcmFjdGVyQ291bnRcIlxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoY2hhcmFjdGVyQ291bnRFeHRlbnNpb24pIHtcbiAgICAgICAgICAgIGNoYXJhY3RlckNvdW50RXh0ZW5zaW9uLm9wdGlvbnMubGltaXQgPSBsaW1pdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgLy8gRWZmZWN0IHRvIHJlLWluaXRpYWxpemUgZWRpdG9yIHdoZW4gdGVjaG5pY2FsIGNvbmZpZ3VyYXRpb24gY2hhbmdlc1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy8gTW9uaXRvciB0ZWNobmljYWwgZGVwZW5kZW5jaWVzXG4gICAgICAgIHRoaXMuZmluYWxUaXB0YXBFeHRlbnNpb25zKCk7XG4gICAgICAgIHRoaXMuZmluYWxUaXB0YXBPcHRpb25zKCk7XG4gICAgICAgIHRoaXMuZmluYWxBbmd1bGFyTm9kZXNDb25maWcoKTtcbiAgICAgICAgdGhpcy5maW5hbEJsb2NrQ29udHJvbHMoKTtcblxuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIC8vIE9ubHkgaWYgYWxyZWFkeSBpbml0aWFsaXplZCAocG9zdCBBZnRlclZpZXdJbml0KVxuICAgICAgICAgIGlmICh0aGlzLmVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgICAgICAgICBpZiAoY3VycmVudEVkaXRvcikge1xuICAgICAgICAgICAgICBjdXJyZW50RWRpdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgdGhpcy5fZWRpdG9yRnVsbHlJbml0aWFsaXplZC5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICB0aGlzLmluaXRFZGl0b3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5vbkltYWdlVXBsb2FkZWQgPSByZXN1bHQgPT4ge1xuICAgICAgdGhpcy5pbWFnZVVwbG9hZGVkLmVtaXQocmVzdWx0KTtcbiAgICB9O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIExhIHZ1ZSBlc3QgZMOpasOgIGNvbXBsw6h0ZW1lbnQgaW5pdGlhbGlzw6llIGRhbnMgbmdBZnRlclZpZXdJbml0XG4gICAgLy8gSW5pdGlhbGlzZXIgbCfDqWRpdGV1clxuICAgIHRoaXMuaW5pdEVkaXRvcigpO1xuXG4gICAgLy8gUydhYm9ubmVyIGF1eCBjaGFuZ2VtZW50cyBkdSBGb3JtQ29udHJvbFxuICAgIHRoaXMuc2V0dXBGb3JtQ29udHJvbFN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgY29uc3QgY3VycmVudEVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgaWYgKGN1cnJlbnRFZGl0b3IpIHtcbiAgICAgIGN1cnJlbnRFZGl0b3IuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLl9lZGl0b3JGdWxseUluaXRpYWxpemVkLnNldChmYWxzZSk7XG5cbiAgICAvLyBVbnJlZ2lzdGVyIGZyb20gdGhlIGdsb2JhbCByZWdpc3RyeVxuICAgIGNvbnN0IGlkID0gdGhpcy5yZWdpc3RlcmVkSWQoKTtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yUmVnaXN0cnkudW5yZWdpc3RlcihpZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0RWRpdG9yKCkge1xuICAgIGNvbnN0IGV4dGVuc2lvbnM6IChFeHRlbnNpb24gfCBOb2RlIHwgTWFyaylbXSA9IFtcbiAgICAgIFN0YXJ0ZXJLaXQuY29uZmlndXJlKHtcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9wZW5PbkNsaWNrOiBmYWxzZSxcbiAgICAgICAgICBIVE1MQXR0cmlidXRlczoge1xuICAgICAgICAgICAgY2xhc3M6IFwiYXRlLWxpbmtcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBUZXh0U3R5bGUsXG4gICAgICBDb2xvci5jb25maWd1cmUoe1xuICAgICAgICB0eXBlczogW1widGV4dFN0eWxlXCJdLFxuICAgICAgfSksXG4gICAgICBQbGFjZWhvbGRlci5jb25maWd1cmUoe1xuICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5maW5hbFBsYWNlaG9sZGVyKCksXG4gICAgICB9KSxcbiAgICAgIFN1cGVyc2NyaXB0LFxuICAgICAgU3Vic2NyaXB0LFxuICAgICAgVGV4dEFsaWduLmNvbmZpZ3VyZSh7XG4gICAgICAgIHR5cGVzOiBbXCJoZWFkaW5nXCIsIFwicGFyYWdyYXBoXCIsIFwicmVzaXphYmxlSW1hZ2VcIl0sXG4gICAgICB9KSxcbiAgICAgIEF0ZUxpbmtDbGlja0JlaGF2aW9yLFxuICAgICAgQXRlTGlua1Nob3J0Y3V0LmNvbmZpZ3VyZSh7XG4gICAgICAgIGNhbk9wZW46ICgpID0+IHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLmVkaXRvclN0YXRlKCkuY2FuLnRvZ2dsZUxpbmssXG4gICAgICAgIG9wZW46IGVkaXRvciA9PiB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5leGVjdXRlKGVkaXRvciwgXCJ0b2dnbGVMaW5rXCIpLFxuICAgICAgfSksXG4gICAgICBIaWdobGlnaHQuY29uZmlndXJlKHtcbiAgICAgICAgbXVsdGljb2xvcjogdHJ1ZSxcbiAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBjbGFzczogXCJhdGUtaGlnaGxpZ2h0XCIsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIEF0ZVJlc2l6YWJsZUltYWdlLmNvbmZpZ3VyZSh7XG4gICAgICAgIGlubGluZTogZmFsc2UsXG4gICAgICAgIGFsbG93QmFzZTY0OiB0cnVlLFxuICAgICAgICBIVE1MQXR0cmlidXRlczoge1xuICAgICAgICAgIGNsYXNzOiBcImF0ZS1pbWFnZVwiLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBBdGVQYXN0ZWRJbWFnZS5jb25maWd1cmUoe1xuICAgICAgICBzaG91bGRSZWhvc3Q6ICgpID0+IHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLmhhc1VwbG9hZEhhbmRsZXIsXG4gICAgICAgIHJlaG9zdDogZmlsZSA9PiB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5yZWhvc3RJbWFnZShmaWxlLCB0aGlzLmdldEltYWdlVXBsb2FkT3B0aW9ucygpKSxcbiAgICAgICAgb25SZWplY3RlZDogcmVqZWN0aW9uID0+IHRoaXMucGFzdGVkSW1hZ2VSZWplY3RlZC5lbWl0KHJlamVjdGlvbiksXG4gICAgICB9KSxcbiAgICAgIEF0ZVVwbG9hZFByb2dyZXNzLmNvbmZpZ3VyZSh7XG4gICAgICAgIGlzVXBsb2FkaW5nOiAoKSA9PiB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5pc1VwbG9hZGluZygpLFxuICAgICAgICB1cGxvYWRQcm9ncmVzczogKCkgPT4gdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UudXBsb2FkUHJvZ3Jlc3MoKSxcbiAgICAgICAgdXBsb2FkTWVzc2FnZTogKCkgPT4gdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UudXBsb2FkTWVzc2FnZSgpLFxuICAgICAgICBpY29uSHRtbDogKCkgPT4gdGhpcy5pY29uUmVnaXN0cnkuaHRtbChcImltYWdlVXBsb2FkXCIsIFwic3Bpbm5pbmdcIiksXG4gICAgICB9KSxcbiAgICAgIEF0ZVRhYmxlRXh0ZW5zaW9uLFxuICAgICAgcmVnaXN0ZXJBbmd1bGFyQ29tcG9uZW50KHRoaXMuaW5qZWN0b3IsIEF0ZVRvY05vZGVPcHRpb25zKSxcbiAgICAgIEF0ZVRpcHRhcFN0YXRlRXh0ZW5zaW9uLmNvbmZpZ3VyZSh7XG4gICAgICAgIG9uVXBkYXRlOiBzdGF0ZSA9PiB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS51cGRhdGVTdGF0ZShzdGF0ZSksXG4gICAgICAgIGNhbGN1bGF0b3JzOiBbXG4gICAgICAgICAgQXRlU2VsZWN0aW9uQ2FsY3VsYXRvcixcbiAgICAgICAgICBBdGVNYXJrc0NhbGN1bGF0b3IsXG4gICAgICAgICAgQXRlVGFibGVDYWxjdWxhdG9yLFxuICAgICAgICAgIEF0ZUltYWdlQ2FsY3VsYXRvcixcbiAgICAgICAgICBBdGVTdHJ1Y3R1cmVDYWxjdWxhdG9yLFxuICAgICAgICAgIEF0ZURpc2NvdmVyeUNhbGN1bGF0b3IsXG4gICAgICAgICAgLi4udGhpcy5maW5hbFN0YXRlQ2FsY3VsYXRvcnMoKSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIF07XG5cbiAgICBpZiAodGhpcy5maW5hbEJsb2NrQ29udHJvbHMoKSAhPT0gXCJub25lXCIpIHtcbiAgICAgIGV4dGVuc2lvbnMucHVzaChcbiAgICAgICAgQXRlQmxvY2tDb250cm9sc0V4dGVuc2lvbi5jb25maWd1cmUoe1xuICAgICAgICAgIG9uSG92ZXI6IGRhdGEgPT4gdGhpcy5faG92ZXJlZEJsb2NrLnNldChkYXRhKSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQWpvdXRlciBsJ2V4dGVuc2lvbiBPZmZpY2UgUGFzdGUgc2kgYWN0aXbDqWVcbiAgICBpZiAodGhpcy5maW5hbEVuYWJsZU9mZmljZVBhc3RlKCkpIHtcbiAgICAgIGV4dGVuc2lvbnMucHVzaChcbiAgICAgICAgT2ZmaWNlUGFzdGUuY29uZmlndXJlKHtcbiAgICAgICAgICAvLyBDb25maWd1cmF0aW9uIHBhciBkw6lmYXV0IHBvdXIgdW5lIG1laWxsZXVyZSBjb21wYXRpYmlsaXTDqVxuICAgICAgICAgIHRyYW5zZm9ybVBhc3RlZEhUTUw6IHRydWUsXG4gICAgICAgICAgdHJhbnNmb3JtUGFzdGVkVGV4dDogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmluYWxTaG93Q2hhcmFjdGVyQ291bnQoKSB8fCB0aGlzLmZpbmFsU2hvd1dvcmRDb3VudCgpKSB7XG4gICAgICBleHRlbnNpb25zLnB1c2goXG4gICAgICAgIENoYXJhY3RlckNvdW50LmNvbmZpZ3VyZSh7XG4gICAgICAgICAgbGltaXQ6IHRoaXMuZmluYWxNYXhDaGFyYWN0ZXJzKCksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIGF1dG9tYXRpYyBub2RlIHZpZXdzIGZyb20gY29uZmlnXG4gICAgY29uc3QgYXV0b05vZGVWaWV3cyA9IHRoaXMuZmluYWxBbmd1bGFyTm9kZXNDb25maWcoKTtcbiAgICBhdXRvTm9kZVZpZXdzLmZvckVhY2goKHJlZzogQXRlQW5ndWxhck5vZGUpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPVxuICAgICAgICB0eXBlb2YgcmVnID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHsgY29tcG9uZW50OiByZWcgYXMgVHlwZTx1bmtub3duPiB9XG4gICAgICAgICAgOiAocmVnIGFzIFJlZ2lzdGVyQW5ndWxhckNvbXBvbmVudE9wdGlvbnM8dW5rbm93bj4pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBleHRlbnNpb24gPSByZWdpc3RlckFuZ3VsYXJDb21wb25lbnQodGhpcy5pbmplY3Rvciwgb3B0aW9ucyk7XG4gICAgICAgIGV4dGVuc2lvbnMucHVzaChleHRlbnNpb24pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW0FURV0gRmFpbGVkIHRvIGF1dG8tcmVnaXN0ZXIgbm9kZSB2aWV3OlwiLCBlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFsbG93IGFkZGl0aW9uIG9mIGN1c3RvbSBleHRlbnNpb25zLCBidXQgYXZvaWQgZHVwbGljYXRlcyBieSBmaWx0ZXJpbmcgYnkgbmFtZVxuICAgIGNvbnN0IGN1c3RvbUV4dGVuc2lvbnMgPSB0aGlzLmZpbmFsVGlwdGFwRXh0ZW5zaW9ucygpO1xuICAgIGlmIChjdXN0b21FeHRlbnNpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nTmFtZXMgPSBuZXcgU2V0KFxuICAgICAgICBleHRlbnNpb25zXG4gICAgICAgICAgLm1hcCgoZXh0OiBFeHRlbnNpb24gfCBOb2RlIHwgTWFyaykgPT4gKGV4dCBhcyB7IG5hbWU/OiBzdHJpbmcgfSk/Lm5hbWUpXG4gICAgICAgICAgLmZpbHRlcigobmFtZSk6IG5hbWUgaXMgc3RyaW5nID0+ICEhbmFtZSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRvQWRkID0gY3VzdG9tRXh0ZW5zaW9ucy5maWx0ZXIoKGV4dDogRXh0ZW5zaW9uIHwgTm9kZSB8IE1hcmspID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IChleHQgYXMgeyBuYW1lPzogc3RyaW5nIH0pPy5uYW1lO1xuICAgICAgICByZXR1cm4gIW5hbWUgfHwgIWV4aXN0aW5nTmFtZXMuaGFzKG5hbWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGV4dGVuc2lvbnMucHVzaCguLi50b0FkZCk7XG4gICAgfVxuXG4gICAgLy8gQWxzbyBhbGxvdyBhbnkgdGlwdGFwIHVzZXIgb3B0aW9uc1xuICAgIGNvbnN0IHVzZXJPcHRpb25zID0gdGhpcy5maW5hbFRpcHRhcE9wdGlvbnMoKTtcbiAgICBjb25zdCB1c2VyRWRpdG9yUHJvcHMgPSB1c2VyT3B0aW9ucy5lZGl0b3JQcm9wcztcbiAgICBjb25zdCB1c2VySGFuZGxlUGFzdGUgPSB1c2VyRWRpdG9yUHJvcHM/LmhhbmRsZVBhc3RlO1xuICAgIGNvbnN0IHVzZXJIYW5kbGVET01QYXN0ZSA9IHVzZXJFZGl0b3JQcm9wcz8uaGFuZGxlRE9NRXZlbnRzPy5wYXN0ZTtcblxuICAgIHR5cGUgRWRpdG9ySGFuZGxlUGFzdGUgPSBOb25OdWxsYWJsZTxOb25OdWxsYWJsZTxFZGl0b3JPcHRpb25zW1wiZWRpdG9yUHJvcHNcIl0+W1wiaGFuZGxlUGFzdGVcIl0+O1xuICAgIHR5cGUgRWRpdG9yRE9NUGFzdGVIYW5kbGVyID0gTm9uTnVsbGFibGU8XG4gICAgICBOb25OdWxsYWJsZTxOb25OdWxsYWJsZTxFZGl0b3JPcHRpb25zW1wiZWRpdG9yUHJvcHNcIl0+W1wiaGFuZGxlRE9NRXZlbnRzXCJdPltcInBhc3RlXCJdXG4gICAgPjtcblxuICAgIGNvbnN0IGhhbmRsZURPTVBhc3RlOiBFZGl0b3JET01QYXN0ZUhhbmRsZXIgPSAodmlldywgZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgICAgaWYgKFxuICAgICAgICBjdXJyZW50RWRpdG9yICYmXG4gICAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLmhhbmRsZUltYWdlUGFzdGUoXG4gICAgICAgICAgY3VycmVudEVkaXRvcixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICB0aGlzLmdldEltYWdlVXBsb2FkT3B0aW9ucygpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF1c2VySGFuZGxlRE9NUGFzdGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2VyUmVzdWx0ID0gdXNlckhhbmRsZURPTVBhc3RlKHZpZXcsIGV2ZW50KTtcbiAgICAgIHJldHVybiB1c2VyUmVzdWx0ID09PSB0cnVlO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVQYXN0ZTogRWRpdG9ySGFuZGxlUGFzdGUgPSAodmlldywgZXZlbnQsIHNsaWNlKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICAgIGlmIChcbiAgICAgICAgY3VycmVudEVkaXRvciAmJlxuICAgICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5oYW5kbGVJbWFnZVBhc3RlKFxuICAgICAgICAgIGN1cnJlbnRFZGl0b3IsXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgdGhpcy5nZXRJbWFnZVVwbG9hZE9wdGlvbnMoKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghdXNlckhhbmRsZVBhc3RlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNlclJlc3VsdCA9IHVzZXJIYW5kbGVQYXN0ZSh2aWV3LCBldmVudCwgc2xpY2UpO1xuICAgICAgcmV0dXJuIHVzZXJSZXN1bHQgPT09IHRydWU7XG4gICAgfTtcblxuICAgIGNvbnN0IG5ld0VkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgLi4udXNlck9wdGlvbnMsXG4gICAgICBlbGVtZW50OiB0aGlzLmVkaXRvckVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LFxuICAgICAgZXh0ZW5zaW9uczogZXh0ZW5zaW9ucyxcbiAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudCgpLFxuICAgICAgZWRpdGFibGU6IHRoaXMuZmluYWxFZGl0YWJsZSgpICYmICF0aGlzLm1lcmdlZERpc2FibGVkKCksXG4gICAgICBhdXRvZm9jdXM6IHRoaXMuZmluYWxBdXRvZm9jdXMoKSxcbiAgICAgIGVkaXRvclByb3BzOiB7XG4gICAgICAgIC4uLnVzZXJFZGl0b3JQcm9wcyxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIC4uLnVzZXJFZGl0b3JQcm9wcz8uYXR0cmlidXRlcyxcbiAgICAgICAgICBzcGVsbGNoZWNrOiB0aGlzLmZpbmFsU3BlbGxjaGVjaygpLnRvU3RyaW5nKCksXG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZURPTUV2ZW50czoge1xuICAgICAgICAgIC4uLnVzZXJFZGl0b3JQcm9wcz8uaGFuZGxlRE9NRXZlbnRzLFxuICAgICAgICAgIHBhc3RlOiBoYW5kbGVET01QYXN0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlUGFzdGUsXG4gICAgICB9LFxuICAgICAgb25VcGRhdGU6ICh7IGVkaXRvciwgdHJhbnNhY3Rpb24gfSkgPT4ge1xuICAgICAgICBjb25zdCBodG1sID0gZWRpdG9yLmdldEhUTUwoKTtcblxuICAgICAgICAvLyBBbnRpLcOpY2hvIDogbcOpbW9yaXNlciBjZSBxdSdvbiDDqW1ldCBwb3VyIMOpdml0ZXIgbGEgYm91Y2xlXG4gICAgICAgIHRoaXMubGFzdEVtaXR0ZWRIdG1sID0gaHRtbDtcblxuICAgICAgICB0aGlzLmNvbnRlbnRDaGFuZ2UuZW1pdChodG1sKTtcbiAgICAgICAgLy8gTWV0dHJlIMOgIGpvdXIgbGUgRm9ybUNvbnRyb2wgc2kgaWwgZXhpc3RlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoXG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbCBhcyB7XG4gICAgICAgICAgICAgIGNvbnRyb2w/OiB7IHNldFZhbHVlOiAodmFsdWU6IHN0cmluZywgb3B0aW9uczogeyBlbWl0RXZlbnQ6IGJvb2xlYW4gfSkgPT4gdm9pZCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk/LmNvbnRyb2xcbiAgICAgICAgKSB7XG4gICAgICAgICAgKFxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wgYXMge1xuICAgICAgICAgICAgICBjb250cm9sOiB7IHNldFZhbHVlOiAodmFsdWU6IHN0cmluZywgb3B0aW9uczogeyBlbWl0RXZlbnQ6IGJvb2xlYW4gfSkgPT4gdm9pZCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICkuY29udHJvbC5zZXRWYWx1ZShodG1sLCB7XG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdG9yVXBkYXRlLmVtaXQoeyBlZGl0b3IsIHRyYW5zYWN0aW9uIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUNoYXJhY3RlckNvdW50KGVkaXRvcik7XG4gICAgICB9LFxuICAgICAgb25DcmVhdGU6ICh7IGVkaXRvciB9KSA9PiB7XG4gICAgICAgIHRoaXMuZWRpdG9yQ3JlYXRlZC5lbWl0KGVkaXRvcik7XG4gICAgICAgIHRoaXMudXBkYXRlQ2hhcmFjdGVyQ291bnQoZWRpdG9yKTtcblxuICAgICAgICAvLyBNYXJxdWVyIGwnw6lkaXRldXIgY29tbWUgY29tcGzDqHRlbWVudCBpbml0aWFsaXPDqSBhcHLDqHMgdW4gY291cnQgZMOpbGFpXG4gICAgICAgIC8vIHBvdXIgcydhc3N1cmVyIHF1ZSB0b3VzIGxlcyBwbHVnaW5zIGV0IGV4dGVuc2lvbnMgc29udCBwcsOqdHNcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZWRpdG9yRnVsbHlJbml0aWFsaXplZC5zZXQodHJ1ZSk7XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICB9LFxuICAgICAgb25Gb2N1czogKHsgZWRpdG9yLCBldmVudCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5yZWdpc3RlcmVkSWQoKTtcbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgdGhpcy5lZGl0b3JSZWdpc3RyeS5zZXRBY3RpdmUoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdG9yRm9jdXMuZW1pdCh7IGVkaXRvciwgZXZlbnQgfSk7XG4gICAgICB9LFxuICAgICAgb25CbHVyOiAoeyBlZGl0b3IsIGV2ZW50IH0pID0+IHtcbiAgICAgICAgLy8gTWFycXVlciBsZSBGb3JtQ29udHJvbCBjb21tZSB0b3VjaMOpIHNpIGlsIGV4aXN0ZVxuICAgICAgICBpZiAoKHRoaXMubmdDb250cm9sIGFzIHsgY29udHJvbD86IHsgbWFya0FzVG91Y2hlZDogKCkgPT4gdm9pZCB9IH0pPy5jb250cm9sKSB7XG4gICAgICAgICAgKHRoaXMubmdDb250cm9sIGFzIHsgY29udHJvbDogeyBtYXJrQXNUb3VjaGVkOiAoKSA9PiB2b2lkIH0gfSkuY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3JCbHVyLmVtaXQoeyBlZGl0b3IsIGV2ZW50IH0pO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFN0b2NrZXIgbGEgcsOpZsOpcmVuY2UgZGUgbCfDqWRpdGV1ciBpbW3DqWRpYXRlbWVudFxuICAgIHRoaXMuX2VkaXRvci5zZXQobmV3RWRpdG9yKTtcblxuICAgIC8vIFJlZ2lzdGVyIGVkaXRvciBpbiB0aGUgZ2xvYmFsIHJlZ2lzdHJ5XG4gICAgY29uc3QgcmVnaXN0ZXJlZElkID0gdGhpcy5lZGl0b3JSZWdpc3RyeS5yZWdpc3RlcihcbiAgICAgIHRoaXMuZWRpdG9ySWQoKSxcbiAgICAgICgpID0+IHRoaXMuZWRpdG9yKCksXG4gICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZVxuICAgICk7XG4gICAgdGhpcy5fcmVnaXN0ZXJlZElkLnNldChyZWdpc3RlcmVkSWQpO1xuICB9XG5cbiAgdG9nZ2xlRWRpdE1vZGUoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBuZXdFZGl0YWJsZSA9ICF0aGlzLmZpbmFsRWRpdGFibGUoKTtcbiAgICB0aGlzLmVkaXRhYmxlQ2hhbmdlLmVtaXQobmV3RWRpdGFibGUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDaGFyYWN0ZXJDb3VudChlZGl0b3I6IEVkaXRvcikge1xuICAgIGlmIChcbiAgICAgICh0aGlzLmZpbmFsU2hvd0NoYXJhY3RlckNvdW50KCkgfHwgdGhpcy5maW5hbFNob3dXb3JkQ291bnQoKSkgJiZcbiAgICAgIGVkaXRvci5zdG9yYWdlW1wiY2hhcmFjdGVyQ291bnRcIl1cbiAgICApIHtcbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSBlZGl0b3Iuc3RvcmFnZVtcImNoYXJhY3RlckNvdW50XCJdO1xuICAgICAgdGhpcy5fY2hhcmFjdGVyQ291bnQuc2V0KHN0b3JhZ2UuY2hhcmFjdGVycygpKTtcbiAgICAgIHRoaXMuX3dvcmRDb3VudC5zZXQoc3RvcmFnZS53b3JkcygpKTtcbiAgICB9XG4gIH1cblxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuX2lzRHJhZ092ZXIuc2V0KHRydWUpO1xuICB9XG5cbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLmhhbmRsZUltYWdlRHJvcChlZGl0b3IsIGV2ZW50LCB0aGlzLmdldEltYWdlVXBsb2FkT3B0aW9ucygpKTtcbiAgICAgIHRoaXMuX2lzRHJhZ092ZXIuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEltYWdlVXBsb2FkT3B0aW9ucygpOiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZmluYWxJbWFnZVVwbG9hZENvbmZpZygpO1xuICAgIHJldHVybiB7XG4gICAgICBxdWFsaXR5OiBjb25maWcucXVhbGl0eSxcbiAgICAgIG1heFdpZHRoOiBjb25maWcubWF4V2lkdGgsXG4gICAgICBtYXhIZWlnaHQ6IGNvbmZpZy5tYXhIZWlnaHQsXG4gICAgICBtYXhTaXplOiBjb25maWcubWF4U2l6ZSxcbiAgICAgIGFsbG93ZWRUeXBlczogY29uZmlnLmFsbG93ZWRUeXBlcyxcbiAgICB9O1xuICB9XG5cbiAgLy8gUHVibGljIG1ldGhvZHNcbiAgZ2V0SFRNTCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvcigpPy5nZXRIVE1MKCkgfHwgXCJcIjtcbiAgfVxuXG4gIGdldEpTT04oKTogSlNPTkNvbnRlbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmVkaXRvcigpPy5nZXRKU09OKCk7XG4gIH1cblxuICBnZXRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yKCk/LmdldFRleHQoKSB8fCBcIlwiO1xuICB9XG5cbiAgc2V0Q29udGVudChjb250ZW50OiBzdHJpbmcsIGVtaXRVcGRhdGUgPSB0cnVlKSB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5zZXRDb250ZW50KGVkaXRvciwgY29udGVudCwgZW1pdFVwZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5mb2N1cyhlZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGJsdXIoKSB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5ibHVyKGVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJDb250ZW50KCkge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UuY2xlYXJDb250ZW50KGVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgLy8gTcOpdGhvZGUgcHVibGlxdWUgcG91ciBvYnRlbmlyIGwnw6lkaXRldXJcbiAgZ2V0RWRpdG9yKCk6IEVkaXRvciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmVkaXRvcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEZvcm1Db250cm9sU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSAoXG4gICAgICB0aGlzLm5nQ29udHJvbCBhcyB7XG4gICAgICAgIGNvbnRyb2w/OiB7XG4gICAgICAgICAgdmFsdWU6IHN0cmluZztcbiAgICAgICAgICB2YWx1ZUNoYW5nZXM6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICAgICAgICBzdGF0dXM6IHN0cmluZztcbiAgICAgICAgICBzdGF0dXNDaGFuZ2VzOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgKT8uY29udHJvbDtcbiAgICBpZiAoY29udHJvbCkge1xuICAgICAgLy8gU3luY2hyb25pemUgZm9ybSBjb250cm9sIHZhbHVlIHdpdGggZWRpdG9yIGNvbnRlbnRcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IGNvbmNhdChcbiAgICAgICAgZGVmZXIoKCkgPT4gb2YoY29udHJvbC52YWx1ZSkpLFxuICAgICAgICBjb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgKTtcblxuICAgICAgZm9ybVZhbHVlJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgICAgICAgICBpZiAoZWRpdG9yKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0Q29udGVudCh2YWx1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgICAgLy8gU3luY2hyb25pemUgZm9ybSBjb250cm9sIHN0YXR1cyB3aXRoIGVkaXRvciBkaXNhYmxlZCBzdGF0ZVxuICAgICAgY29uc3QgZm9ybVN0YXR1cyQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IGNvbmNhdChcbiAgICAgICAgZGVmZXIoKCkgPT4gb2YoY29udHJvbC5zdGF0dXMpKSxcbiAgICAgICAgY29udHJvbC5zdGF0dXNDaGFuZ2VzXG4gICAgICApO1xuXG4gICAgICBmb3JtU3RhdHVzJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKHN0YXR1czogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc0Zvcm1Db250cm9sRGlzYWJsZWQuc2V0KHN0YXR1cyA9PT0gXCJESVNBQkxFRFwiKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZilcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgb25FZGl0b3JDbGljayhldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW4gcmVhZC1vbmx5IG1vZGUsIGhhbmRsZSBjbGVhcmluZyBvZiBub2RlIHNlbGVjdGlvblxuICAgIGlmICghdGhpcy5maW5hbEVkaXRhYmxlKCkpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSB0aGlzLmVkaXRvckVsZW1lbnQoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmICh0YXJnZXQgPT09IGVkaXRvckVsZW1lbnQgfHwgdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImF0ZS1jb250ZW50XCIpKSB7XG4gICAgICAgIC8vIENsZWFyIHNlbGVjdGlvbiB0byBoaWRlIGJ1YmJsZSBtZW51c1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMuc2V0VGV4dFNlbGVjdGlvbigwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWZXJpZnkgaWYgaW50ZXJhY3Rpb24gaXMgb24gdGhlIGNvbnRhaW5lciBlbGVtZW50IGFuZCBub3Qgb24gdGhlIGNvbnRlbnRcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgZWRpdG9yRWxlbWVudCA9IHRoaXMuZWRpdG9yRWxlbWVudCgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKHRhcmdldCA9PT0gZWRpdG9yRWxlbWVudCB8fCB0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXRlLWNvbnRlbnRcIikpIHtcbiAgICAgIC8vIEludGVyYWN0aW9uIGluIHRoZSBlbXB0eSBzcGFjZSwgcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgZW5kXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgeyBkb2MgfSA9IGVkaXRvci5zdGF0ZTtcbiAgICAgICAgY29uc3QgZW5kUG9zID0gZG9jLmNvbnRlbnQuc2l6ZTtcbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnNldFRleHRTZWxlY3Rpb24oZW5kUG9zKTtcbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLmZvY3VzKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBNZXRob2RzIGZvciB0YWJsZSBlZGl0IGJ1dHRvbiAtIFJlbW92ZWQgYXMgcmVwbGFjZWQgYnkgYnViYmxlIG1lbnVcbn1cbiJdfQ==
|