@myrmidon/cadmus-part-codicology-decorations 2.0.6 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/cod-decoration-element/cod-decoration-element.component.mjs +3 -3
- package/fesm2015/myrmidon-cadmus-part-codicology-decorations.mjs +2 -3
- package/fesm2015/myrmidon-cadmus-part-codicology-decorations.mjs.map +1 -1
- package/fesm2020/myrmidon-cadmus-part-codicology-decorations.mjs +2 -3
- package/fesm2020/myrmidon-cadmus-part-codicology-decorations.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -430,10 +430,10 @@ export class CodDecorationElementComponent {
|
|
|
430
430
|
}
|
|
431
431
|
}
|
|
432
432
|
CodDecorationElementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: CodDecorationElementComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
433
|
-
CodDecorationElementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: CodDecorationElementComponent, selector: "cadmus-cod-decoration-element", inputs: { element: "element", parentKeys: "parentKeys", decElemTypeEntries: "decElemTypeEntries", decTypeHiddenEntries: "decTypeHiddenEntries", decElemFlagEntries: "decElemFlagEntries", decElemColorEntries: "decElemColorEntries", decElemGildingEntries: "decElemGildingEntries", decElemTechEntries: "decElemTechEntries", decElemPosEntries: "decElemPosEntries", decElemToolEntries: "decElemToolEntries", decElemTypolEntries: "decElemTypolEntries", imgTypeEntries: "imgTypeEntries" }, outputs: { elementChange: "elementChange", editorClose: "editorClose" }, viewQueries: [{ propertyName: "dscEditor", first: true, predicate: ["dsceditor"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"type-head\">\r\n {{ type.value | flatLookup : decElemTypeEntries : \"id\" : \"value\" }}\r\n </div>\r\n <mat-tab-group (selectedIndexChange)=\"onTabIndexChanged($event)\">\r\n <!-- GENERAL -->\r\n <mat-tab label=\"general\">\r\n <!-- type (bound) -->\r\n <mat-form-field\r\n *ngIf=\"decElemTypeEntries?.length\"\r\n style=\"width: 14em\"\r\n appearance=\"outline\"\r\n >\r\n <mat-label>type</mat-label>\r\n <mat-select [formControl]=\"type\">\r\n <mat-option *ngFor=\"let e of decElemTypeEntries\" [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"$any(type).errors?.required && (type.dirty || type.touched)\"\r\n >type required</mat-error\r\n >\r\n </mat-form-field>\r\n \r\n <!-- instanceCount -->\r\n <mat-form-field style=\"width: 6em\">\r\n <mat-label>count</mat-label>\r\n <input matInput [formControl]=\"instanceCount\" type=\"number\" min=\"0\" />\r\n </mat-form-field>\r\n\r\n <!-- ranges -->\r\n <cadmus-cod-location\r\n label=\"ranges\"\r\n [required]=\"true\"\r\n [location]=\"initialRanges || null\"\r\n (locationChange)=\"onLocationChange($event)\"\r\n ></cadmus-cod-location>\r\n\r\n <!-- flags -->\r\n <fieldset *ngIf=\"availFlags?.length\">\r\n <legend>features</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availFlags\"\r\n [selectedIds]=\"initialFlags\"\r\n (selectedIdsChange)=\"onFlagsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <br />\r\n <div>\r\n <!-- key -->\r\n <mat-form-field>\r\n <mat-label>key</mat-label>\r\n <input matInput [formControl]=\"key\" />\r\n <mat-error\r\n *ngIf=\"$any(key).errors?.pattern && (key.dirty || key.touched)\"\r\n >invalid key</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(key).errors?.maxLength && (key.dirty || key.touched)\"\r\n >key too long</mat-error\r\n >\r\n </mat-form-field>\r\n \r\n <!-- parentKey -->\r\n <mat-form-field *ngIf=\"parentKeys?.length\">\r\n <mat-label>parent key</mat-label>\r\n <mat-select [formControl]=\"parentKey\">\r\n <mat-option [value]=\"null\">(none)</mat-option>\r\n <mat-option *ngFor=\"let k of parentKeys\" [value]=\"k\">{{\r\n k\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-tab>\r\n\r\n <!-- TYPOLOGIES -->\r\n <mat-tab label=\"typologies\">\r\n <div style=\"display: flex; gap: 8px\">\r\n <!-- lineHeight -->\r\n <mat-form-field\r\n style=\"flex: 0 0 auto; width: 4em\"\r\n [hidden]=\"hidden?.lineHeight\"\r\n >\r\n <mat-label>ln.h</mat-label>\r\n <input matInput type=\"number\" min=\"0\" [formControl]=\"lineHeight\" />\r\n </mat-form-field>\r\n <!-- textRelation -->\r\n <mat-form-field\r\n [hidden]=\"hidden?.textRelation\"\r\n style=\"display: 1 0 auto\"\r\n >\r\n <mat-label>text relation</mat-label>\r\n <input matInput [formControl]=\"textRelation\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(textRelation).errors?.maxLength &&\r\n (textRelation.dirty || textRelation.touched)\r\n \"\r\n >text relation too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n <!-- typologies -->\r\n <fieldset [hidden]=\"!availTypologies?.length || hidden?.typologies\">\r\n <legend>typologies</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availTypologies\"\r\n [selectedIds]=\"initialTypologies\"\r\n (selectedIdsChange)=\"onTypologiesChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- subject -->\r\n <div [hidden]=\"hidden?.subject\">\r\n <mat-form-field>\r\n <mat-label>subject</mat-label>\r\n <input matInput [formControl]=\"subject\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(subject).errors?.maxLength &&\r\n (subject.dirty || subject.touched)\r\n \"\r\n >subject too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- colors -->\r\n <fieldset [hidden]=\"!availColors.length || hidden?.colors\">\r\n <legend>colors</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availColors\"\r\n [selectedIds]=\"initialColors\"\r\n (selectedIdsChange)=\"onColorsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- gildings -->\r\n <fieldset\r\n [hidden]=\"\r\n (!availGildings.length && !elemGildingFree) || hidden?.gildings\r\n \"\r\n >\r\n <legend>gildings</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availGildings\"\r\n [allowUserFlags]=\"elemGildingFree || false\"\r\n [selectedIds]=\"initialGildings\"\r\n (selectedIdsChange)=\"onGildingsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- techniques -->\r\n <fieldset\r\n [hidden]=\"\r\n (!availTechniques.length && !elemTechniqueFree) || hidden?.techniques\r\n \"\r\n >\r\n <legend>techniques</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availTechniques\"\r\n [allowUserFlags]=\"elemTechniqueFree || false\"\r\n [selectedIds]=\"initialTechniques\"\r\n (selectedIdsChange)=\"onTechniquesChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- tools -->\r\n <fieldset\r\n [hidden]=\"(!availTools.length && !elemToolFree) || hidden?.tools\"\r\n >\r\n <legend>tools</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availTools\"\r\n [allowUserFlags]=\"elemToolFree || false\"\r\n [selectedIds]=\"initialTools\"\r\n (selectedIdsChange)=\"onToolsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- positions -->\r\n <fieldset\r\n [hidden]=\"\r\n (!availPositions.length && !elemPositionFree) || hidden?.positions\r\n \"\r\n >\r\n <legend>positions</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availPositions\"\r\n [allowUserFlags]=\"elemPositionFree || false\"\r\n [selectedIds]=\"initialPositions\"\r\n (selectedIdsChange)=\"onPositionsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n </mat-tab>\r\n\r\n <!-- DESCRIPTION -->\r\n <mat-tab label=\"description\">\r\n <div>\r\n <ngx-monaco-editor\r\n #dsceditor\r\n [options]=\"editorOptions\"\r\n [formControl]=\"description\"\r\n ></ngx-monaco-editor>\r\n <mat-error\r\n *ngIf=\"\r\n $any(description).errors?.maxLength &&\r\n (description.touched || description.dirty)\r\n \"\r\n >description too long</mat-error\r\n >\r\n </div>\r\n <div>\r\n <!-- images -->\r\n <cadmus-cod-images\r\n [typeEntries]=\"imgTypeEntries\"\r\n [images]=\"initialImages\"\r\n (imagesChange)=\"onImagesChange($event)\"\r\n ></cadmus-cod-images>\r\n </div>\r\n <div>\r\n <!-- note -->\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <textarea rows=\"2\" matInput [formControl]=\"note\"></textarea>\r\n <mat-error\r\n *ngIf=\"$any(note).errors?.maxLength && (note.dirty || note.touched)\"\r\n >note too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- buttons -->\r\n <div class=\"toolbar-row\">\r\n <button\r\n type=\"button\"\r\n color=\"warn\"\r\n mat-icon-button\r\n matTooltip=\"Discard element changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Accept element changes\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon>check_circle</mat-icon> element\r\n </button>\r\n <span style=\"margin-left: 8px\">element</span>\r\n </div>\r\n</form>\r\n", styles: [".long-text{width:90%;max-width:600px}.type-head{font-size:90%;border:1px solid silver;border-radius:6px;padding:4px;background-color:#fafafa;text-align:center}fieldset{border:1px solid silver;border-radius:6px;padding:6px 12px}[hidden]{display:none!important}.toolbar-row{display:flex;align-items:center;flex-wrap:wrap}.toolbar-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i9.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i9.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i11.EditorComponent, selector: "ngx-monaco-editor", inputs: ["options", "model"] }, { kind: "component", type: i12.FlagsPickerComponent, selector: "cadmus-ui-flags-picker", inputs: ["selectedIds", "flags", "numbering", "toolbar", "allowUserFlags"], outputs: ["selectedIdsChange", "flagsChange"] }, { kind: "component", type: i13.CodLocationComponent, selector: "cadmus-cod-location", inputs: ["label", "required", "single", "location"], outputs: ["locationChange"] }, { kind: "component", type: i14.CodImagesComponent, selector: "cadmus-cod-images", inputs: ["images", "typeEntries"], outputs: ["imagesChange"] }, { kind: "pipe", type: i15.FlatLookupPipe, name: "flatLookup" }] });
|
|
433
|
+
CodDecorationElementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: CodDecorationElementComponent, selector: "cadmus-cod-decoration-element", inputs: { element: "element", parentKeys: "parentKeys", decElemTypeEntries: "decElemTypeEntries", decTypeHiddenEntries: "decTypeHiddenEntries", decElemFlagEntries: "decElemFlagEntries", decElemColorEntries: "decElemColorEntries", decElemGildingEntries: "decElemGildingEntries", decElemTechEntries: "decElemTechEntries", decElemPosEntries: "decElemPosEntries", decElemToolEntries: "decElemToolEntries", decElemTypolEntries: "decElemTypolEntries", imgTypeEntries: "imgTypeEntries" }, outputs: { elementChange: "elementChange", editorClose: "editorClose" }, viewQueries: [{ propertyName: "dscEditor", first: true, predicate: ["dsceditor"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"type-head\">\r\n {{ type.value | flatLookup : decElemTypeEntries : \"id\" : \"value\" }}\r\n </div>\r\n <mat-tab-group (selectedIndexChange)=\"onTabIndexChanged($event)\">\r\n <!-- GENERAL -->\r\n <mat-tab label=\"general\">\r\n <!-- type (bound) -->\r\n <mat-form-field\r\n *ngIf=\"decElemTypeEntries?.length\"\r\n style=\"width: 14em\"\r\n appearance=\"outline\"\r\n >\r\n <mat-label>type</mat-label>\r\n <mat-select [formControl]=\"type\">\r\n <mat-option *ngFor=\"let e of decElemTypeEntries\" [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"$any(type).errors?.required && (type.dirty || type.touched)\"\r\n >type required</mat-error\r\n >\r\n </mat-form-field>\r\n \r\n <!-- instanceCount -->\r\n <mat-form-field style=\"width: 6em\">\r\n <mat-label>count</mat-label>\r\n <input matInput [formControl]=\"instanceCount\" type=\"number\" min=\"0\" />\r\n </mat-form-field>\r\n\r\n <!-- ranges -->\r\n <cadmus-cod-location\r\n label=\"ranges\"\r\n [required]=\"true\"\r\n [location]=\"initialRanges || null\"\r\n (locationChange)=\"onLocationChange($event)\"\r\n ></cadmus-cod-location>\r\n\r\n <!-- flags -->\r\n <fieldset *ngIf=\"availFlags?.length\">\r\n <legend>features</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availFlags\"\r\n [selectedIds]=\"initialFlags\"\r\n (selectedIdsChange)=\"onFlagsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <br />\r\n <div>\r\n <!-- key -->\r\n <mat-form-field>\r\n <mat-label>key</mat-label>\r\n <input matInput [formControl]=\"key\" />\r\n <mat-error\r\n *ngIf=\"$any(key).errors?.pattern && (key.dirty || key.touched)\"\r\n >invalid key</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(key).errors?.maxLength && (key.dirty || key.touched)\"\r\n >key too long</mat-error\r\n >\r\n </mat-form-field>\r\n \r\n <!-- parentKey -->\r\n <mat-form-field *ngIf=\"parentKeys?.length\">\r\n <mat-label>parent key</mat-label>\r\n <mat-select [formControl]=\"parentKey\">\r\n <mat-option [value]=\"null\">(none)</mat-option>\r\n <mat-option *ngFor=\"let k of parentKeys\" [value]=\"k\">{{\r\n k\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-tab>\r\n\r\n <!-- TYPOLOGIES -->\r\n <mat-tab label=\"typologies\">\r\n <div style=\"display: flex; gap: 8px\">\r\n <!-- lineHeight -->\r\n <mat-form-field\r\n style=\"flex: 0 0 auto; width: 4em\"\r\n [hidden]=\"hidden?.lineHeight\"\r\n >\r\n <mat-label>ln.h</mat-label>\r\n <input matInput type=\"number\" min=\"0\" [formControl]=\"lineHeight\" />\r\n </mat-form-field>\r\n <!-- textRelation -->\r\n <mat-form-field\r\n [hidden]=\"hidden?.textRelation\"\r\n style=\"display: 1 0 auto\"\r\n >\r\n <mat-label>text relation</mat-label>\r\n <input matInput [formControl]=\"textRelation\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(textRelation).errors?.maxLength &&\r\n (textRelation.dirty || textRelation.touched)\r\n \"\r\n >text relation too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n <!-- typologies -->\r\n <fieldset [hidden]=\"!availTypologies.length || hidden?.typologies\">\r\n <legend>typologies</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availTypologies\"\r\n [selectedIds]=\"initialTypologies\"\r\n (selectedIdsChange)=\"onTypologiesChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- subject -->\r\n <div [hidden]=\"hidden?.subject\">\r\n <mat-form-field>\r\n <mat-label>subject</mat-label>\r\n <input matInput [formControl]=\"subject\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(subject).errors?.maxLength &&\r\n (subject.dirty || subject.touched)\r\n \"\r\n >subject too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- colors -->\r\n <fieldset [hidden]=\"!availColors.length || hidden?.colors\">\r\n <legend>colors</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availColors\"\r\n [selectedIds]=\"initialColors\"\r\n (selectedIdsChange)=\"onColorsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- gildings -->\r\n <fieldset\r\n [hidden]=\"\r\n (!availGildings.length && !elemGildingFree) || hidden?.gildings\r\n \"\r\n >\r\n <legend>gildings</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availGildings\"\r\n [allowUserFlags]=\"elemGildingFree || false\"\r\n [selectedIds]=\"initialGildings\"\r\n (selectedIdsChange)=\"onGildingsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- techniques -->\r\n <fieldset\r\n [hidden]=\"\r\n (!availTechniques.length && !elemTechniqueFree) || hidden?.techniques\r\n \"\r\n >\r\n <legend>techniques</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availTechniques\"\r\n [allowUserFlags]=\"elemTechniqueFree || false\"\r\n [selectedIds]=\"initialTechniques\"\r\n (selectedIdsChange)=\"onTechniquesChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- tools -->\r\n <fieldset\r\n [hidden]=\"(!availTools.length && !elemToolFree) || hidden?.tools\"\r\n >\r\n <legend>tools</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availTools\"\r\n [allowUserFlags]=\"elemToolFree || false\"\r\n [selectedIds]=\"initialTools\"\r\n (selectedIdsChange)=\"onToolsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- positions -->\r\n <fieldset\r\n [hidden]=\"\r\n (!availPositions.length && !elemPositionFree) || hidden?.positions\r\n \"\r\n >\r\n <legend>positions</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availPositions\"\r\n [allowUserFlags]=\"elemPositionFree || false\"\r\n [selectedIds]=\"initialPositions\"\r\n (selectedIdsChange)=\"onPositionsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n </mat-tab>\r\n\r\n <!-- DESCRIPTION -->\r\n <mat-tab label=\"description\">\r\n <div>\r\n <ngx-monaco-editor\r\n #dsceditor\r\n [options]=\"editorOptions\"\r\n [formControl]=\"description\"\r\n ></ngx-monaco-editor>\r\n <mat-error\r\n *ngIf=\"\r\n $any(description).errors?.maxLength &&\r\n (description.touched || description.dirty)\r\n \"\r\n >description too long</mat-error\r\n >\r\n </div>\r\n <div>\r\n <!-- images -->\r\n <cadmus-cod-images\r\n [typeEntries]=\"imgTypeEntries\"\r\n [images]=\"initialImages\"\r\n (imagesChange)=\"onImagesChange($event)\"\r\n ></cadmus-cod-images>\r\n </div>\r\n <div>\r\n <!-- note -->\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <textarea rows=\"2\" matInput [formControl]=\"note\"></textarea>\r\n <mat-error\r\n *ngIf=\"$any(note).errors?.maxLength && (note.dirty || note.touched)\"\r\n >note too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- buttons -->\r\n <div class=\"toolbar-row\">\r\n <button\r\n type=\"button\"\r\n color=\"warn\"\r\n mat-icon-button\r\n matTooltip=\"Discard element changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Accept element changes\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon>check_circle</mat-icon> element\r\n </button>\r\n <span style=\"margin-left: 8px\">element</span>\r\n </div>\r\n</form>\r\n", styles: [".long-text{width:90%;max-width:600px}.type-head{font-size:90%;border:1px solid silver;border-radius:6px;padding:4px;background-color:#fafafa;text-align:center}fieldset{border:1px solid silver;border-radius:6px;padding:6px 12px}[hidden]{display:none!important}.toolbar-row{display:flex;align-items:center;flex-wrap:wrap}.toolbar-row *{flex:0 0 auto}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i9.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i9.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i11.EditorComponent, selector: "ngx-monaco-editor", inputs: ["options", "model"] }, { kind: "component", type: i12.FlagsPickerComponent, selector: "cadmus-ui-flags-picker", inputs: ["selectedIds", "flags", "numbering", "toolbar", "allowUserFlags"], outputs: ["selectedIdsChange", "flagsChange"] }, { kind: "component", type: i13.CodLocationComponent, selector: "cadmus-cod-location", inputs: ["label", "required", "single", "location"], outputs: ["locationChange"] }, { kind: "component", type: i14.CodImagesComponent, selector: "cadmus-cod-images", inputs: ["images", "typeEntries"], outputs: ["imagesChange"] }, { kind: "pipe", type: i15.FlatLookupPipe, name: "flatLookup" }] });
|
|
434
434
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: CodDecorationElementComponent, decorators: [{
|
|
435
435
|
type: Component,
|
|
436
|
-
args: [{ selector: 'cadmus-cod-decoration-element', template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"type-head\">\r\n {{ type.value | flatLookup : decElemTypeEntries : \"id\" : \"value\" }}\r\n </div>\r\n <mat-tab-group (selectedIndexChange)=\"onTabIndexChanged($event)\">\r\n <!-- GENERAL -->\r\n <mat-tab label=\"general\">\r\n <!-- type (bound) -->\r\n <mat-form-field\r\n *ngIf=\"decElemTypeEntries?.length\"\r\n style=\"width: 14em\"\r\n appearance=\"outline\"\r\n >\r\n <mat-label>type</mat-label>\r\n <mat-select [formControl]=\"type\">\r\n <mat-option *ngFor=\"let e of decElemTypeEntries\" [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"$any(type).errors?.required && (type.dirty || type.touched)\"\r\n >type required</mat-error\r\n >\r\n </mat-form-field>\r\n \r\n <!-- instanceCount -->\r\n <mat-form-field style=\"width: 6em\">\r\n <mat-label>count</mat-label>\r\n <input matInput [formControl]=\"instanceCount\" type=\"number\" min=\"0\" />\r\n </mat-form-field>\r\n\r\n <!-- ranges -->\r\n <cadmus-cod-location\r\n label=\"ranges\"\r\n [required]=\"true\"\r\n [location]=\"initialRanges || null\"\r\n (locationChange)=\"onLocationChange($event)\"\r\n ></cadmus-cod-location>\r\n\r\n <!-- flags -->\r\n <fieldset *ngIf=\"availFlags?.length\">\r\n <legend>features</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availFlags\"\r\n [selectedIds]=\"initialFlags\"\r\n (selectedIdsChange)=\"onFlagsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <br />\r\n <div>\r\n <!-- key -->\r\n <mat-form-field>\r\n <mat-label>key</mat-label>\r\n <input matInput [formControl]=\"key\" />\r\n <mat-error\r\n *ngIf=\"$any(key).errors?.pattern && (key.dirty || key.touched)\"\r\n >invalid key</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(key).errors?.maxLength && (key.dirty || key.touched)\"\r\n >key too long</mat-error\r\n >\r\n </mat-form-field>\r\n \r\n <!-- parentKey -->\r\n <mat-form-field *ngIf=\"parentKeys?.length\">\r\n <mat-label>parent key</mat-label>\r\n <mat-select [formControl]=\"parentKey\">\r\n <mat-option [value]=\"null\">(none)</mat-option>\r\n <mat-option *ngFor=\"let k of parentKeys\" [value]=\"k\">{{\r\n k\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-tab>\r\n\r\n <!-- TYPOLOGIES -->\r\n <mat-tab label=\"typologies\">\r\n <div style=\"display: flex; gap: 8px\">\r\n <!-- lineHeight -->\r\n <mat-form-field\r\n style=\"flex: 0 0 auto; width: 4em\"\r\n [hidden]=\"hidden?.lineHeight\"\r\n >\r\n <mat-label>ln.h</mat-label>\r\n <input matInput type=\"number\" min=\"0\" [formControl]=\"lineHeight\" />\r\n </mat-form-field>\r\n <!-- textRelation -->\r\n <mat-form-field\r\n [hidden]=\"hidden?.textRelation\"\r\n style=\"display: 1 0 auto\"\r\n >\r\n <mat-label>text relation</mat-label>\r\n <input matInput [formControl]=\"textRelation\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(textRelation).errors?.maxLength &&\r\n (textRelation.dirty || textRelation.touched)\r\n \"\r\n >text relation too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n <!-- typologies -->\r\n <fieldset [hidden]=\"!availTypologies
|
|
436
|
+
args: [{ selector: 'cadmus-cod-decoration-element', template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"type-head\">\r\n {{ type.value | flatLookup : decElemTypeEntries : \"id\" : \"value\" }}\r\n </div>\r\n <mat-tab-group (selectedIndexChange)=\"onTabIndexChanged($event)\">\r\n <!-- GENERAL -->\r\n <mat-tab label=\"general\">\r\n <!-- type (bound) -->\r\n <mat-form-field\r\n *ngIf=\"decElemTypeEntries?.length\"\r\n style=\"width: 14em\"\r\n appearance=\"outline\"\r\n >\r\n <mat-label>type</mat-label>\r\n <mat-select [formControl]=\"type\">\r\n <mat-option *ngFor=\"let e of decElemTypeEntries\" [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"$any(type).errors?.required && (type.dirty || type.touched)\"\r\n >type required</mat-error\r\n >\r\n </mat-form-field>\r\n \r\n <!-- instanceCount -->\r\n <mat-form-field style=\"width: 6em\">\r\n <mat-label>count</mat-label>\r\n <input matInput [formControl]=\"instanceCount\" type=\"number\" min=\"0\" />\r\n </mat-form-field>\r\n\r\n <!-- ranges -->\r\n <cadmus-cod-location\r\n label=\"ranges\"\r\n [required]=\"true\"\r\n [location]=\"initialRanges || null\"\r\n (locationChange)=\"onLocationChange($event)\"\r\n ></cadmus-cod-location>\r\n\r\n <!-- flags -->\r\n <fieldset *ngIf=\"availFlags?.length\">\r\n <legend>features</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availFlags\"\r\n [selectedIds]=\"initialFlags\"\r\n (selectedIdsChange)=\"onFlagsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <br />\r\n <div>\r\n <!-- key -->\r\n <mat-form-field>\r\n <mat-label>key</mat-label>\r\n <input matInput [formControl]=\"key\" />\r\n <mat-error\r\n *ngIf=\"$any(key).errors?.pattern && (key.dirty || key.touched)\"\r\n >invalid key</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(key).errors?.maxLength && (key.dirty || key.touched)\"\r\n >key too long</mat-error\r\n >\r\n </mat-form-field>\r\n \r\n <!-- parentKey -->\r\n <mat-form-field *ngIf=\"parentKeys?.length\">\r\n <mat-label>parent key</mat-label>\r\n <mat-select [formControl]=\"parentKey\">\r\n <mat-option [value]=\"null\">(none)</mat-option>\r\n <mat-option *ngFor=\"let k of parentKeys\" [value]=\"k\">{{\r\n k\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-tab>\r\n\r\n <!-- TYPOLOGIES -->\r\n <mat-tab label=\"typologies\">\r\n <div style=\"display: flex; gap: 8px\">\r\n <!-- lineHeight -->\r\n <mat-form-field\r\n style=\"flex: 0 0 auto; width: 4em\"\r\n [hidden]=\"hidden?.lineHeight\"\r\n >\r\n <mat-label>ln.h</mat-label>\r\n <input matInput type=\"number\" min=\"0\" [formControl]=\"lineHeight\" />\r\n </mat-form-field>\r\n <!-- textRelation -->\r\n <mat-form-field\r\n [hidden]=\"hidden?.textRelation\"\r\n style=\"display: 1 0 auto\"\r\n >\r\n <mat-label>text relation</mat-label>\r\n <input matInput [formControl]=\"textRelation\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(textRelation).errors?.maxLength &&\r\n (textRelation.dirty || textRelation.touched)\r\n \"\r\n >text relation too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n <!-- typologies -->\r\n <fieldset [hidden]=\"!availTypologies.length || hidden?.typologies\">\r\n <legend>typologies</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availTypologies\"\r\n [selectedIds]=\"initialTypologies\"\r\n (selectedIdsChange)=\"onTypologiesChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- subject -->\r\n <div [hidden]=\"hidden?.subject\">\r\n <mat-form-field>\r\n <mat-label>subject</mat-label>\r\n <input matInput [formControl]=\"subject\" />\r\n <mat-error\r\n *ngIf=\"\r\n $any(subject).errors?.maxLength &&\r\n (subject.dirty || subject.touched)\r\n \"\r\n >subject too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- colors -->\r\n <fieldset [hidden]=\"!availColors.length || hidden?.colors\">\r\n <legend>colors</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availColors\"\r\n [selectedIds]=\"initialColors\"\r\n (selectedIdsChange)=\"onColorsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- gildings -->\r\n <fieldset\r\n [hidden]=\"\r\n (!availGildings.length && !elemGildingFree) || hidden?.gildings\r\n \"\r\n >\r\n <legend>gildings</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availGildings\"\r\n [allowUserFlags]=\"elemGildingFree || false\"\r\n [selectedIds]=\"initialGildings\"\r\n (selectedIdsChange)=\"onGildingsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- techniques -->\r\n <fieldset\r\n [hidden]=\"\r\n (!availTechniques.length && !elemTechniqueFree) || hidden?.techniques\r\n \"\r\n >\r\n <legend>techniques</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availTechniques\"\r\n [allowUserFlags]=\"elemTechniqueFree || false\"\r\n [selectedIds]=\"initialTechniques\"\r\n (selectedIdsChange)=\"onTechniquesChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- tools -->\r\n <fieldset\r\n [hidden]=\"(!availTools.length && !elemToolFree) || hidden?.tools\"\r\n >\r\n <legend>tools</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availTools\"\r\n [allowUserFlags]=\"elemToolFree || false\"\r\n [selectedIds]=\"initialTools\"\r\n (selectedIdsChange)=\"onToolsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n\r\n <!-- positions -->\r\n <fieldset\r\n [hidden]=\"\r\n (!availPositions.length && !elemPositionFree) || hidden?.positions\r\n \"\r\n >\r\n <legend>positions</legend>\r\n <cadmus-ui-flags-picker\r\n [flags]=\"availPositions\"\r\n [allowUserFlags]=\"elemPositionFree || false\"\r\n [selectedIds]=\"initialPositions\"\r\n (selectedIdsChange)=\"onPositionsChange($event)\"\r\n ></cadmus-ui-flags-picker>\r\n </fieldset>\r\n </mat-tab>\r\n\r\n <!-- DESCRIPTION -->\r\n <mat-tab label=\"description\">\r\n <div>\r\n <ngx-monaco-editor\r\n #dsceditor\r\n [options]=\"editorOptions\"\r\n [formControl]=\"description\"\r\n ></ngx-monaco-editor>\r\n <mat-error\r\n *ngIf=\"\r\n $any(description).errors?.maxLength &&\r\n (description.touched || description.dirty)\r\n \"\r\n >description too long</mat-error\r\n >\r\n </div>\r\n <div>\r\n <!-- images -->\r\n <cadmus-cod-images\r\n [typeEntries]=\"imgTypeEntries\"\r\n [images]=\"initialImages\"\r\n (imagesChange)=\"onImagesChange($event)\"\r\n ></cadmus-cod-images>\r\n </div>\r\n <div>\r\n <!-- note -->\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <textarea rows=\"2\" matInput [formControl]=\"note\"></textarea>\r\n <mat-error\r\n *ngIf=\"$any(note).errors?.maxLength && (note.dirty || note.touched)\"\r\n >note too long</mat-error\r\n >\r\n </mat-form-field>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- buttons -->\r\n <div class=\"toolbar-row\">\r\n <button\r\n type=\"button\"\r\n color=\"warn\"\r\n mat-icon-button\r\n matTooltip=\"Discard element changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n color=\"primary\"\r\n mat-icon-button\r\n matTooltip=\"Accept element changes\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon>check_circle</mat-icon> element\r\n </button>\r\n <span style=\"margin-left: 8px\">element</span>\r\n </div>\r\n</form>\r\n", styles: [".long-text{width:90%;max-width:600px}.type-head{font-size:90%;border:1px solid silver;border-radius:6px;padding:4px;background-color:#fafafa;text-align:center}fieldset{border:1px solid silver;border-radius:6px;padding:6px 12px}[hidden]{display:none!important}.toolbar-row{display:flex;align-items:center;flex-wrap:wrap}.toolbar-row *{flex:0 0 auto}\n"] }]
|
|
437
437
|
}], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { dscEditor: [{
|
|
438
438
|
type: ViewChild,
|
|
439
439
|
args: ['dsceditor', { static: false }]
|
|
@@ -466,4 +466,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
466
466
|
}], imgTypeEntries: [{
|
|
467
467
|
type: Input
|
|
468
468
|
}] } });
|
|
469
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLWRlY29yYXRpb24tZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJtaWRvbi9jYWRtdXMtcGFydC1jb2RpY29sb2d5LWRlY29yYXRpb25zL3NyYy9saWIvY29kLWRlY29yYXRpb24tZWxlbWVudC9jb2QtZGVjb3JhdGlvbi1lbGVtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2NhZG11cy1wYXJ0LWNvZGljb2xvZ3ktZGVjb3JhdGlvbnMvc3JjL2xpYi9jb2QtZGVjb3JhdGlvbi1lbGVtZW50L2NvZC1kZWNvcmF0aW9uLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlMLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBS3hCLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOEIxRCxNQUFNLE9BQU8sNkJBQTZCO0lBZ014QyxZQUFZLFdBQXdCO1FBbkw3QixrQkFBYSxHQUFHO1lBQ3JCLEtBQUssRUFBRSxVQUFVO1lBQ2pCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsMERBQTBEO1lBQzFELGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUM7UUE4S0EsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUM5RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEs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UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7MEhBaGxCVSw2QkFBNkI7OEdBQTdCLDZCQUE2Qix3dEJDaEQxQyxvdlJBb1FBOzJGRHBOYSw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0UsK0JBQStCO2tHQWdCRSxTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBVTlCLE9BQU87c0JBRGpCLEtBQUs7Z0JBVUMsVUFBVTtzQkFEaEIsS0FBSztnQkFJQyxhQUFhO3NCQURuQixNQUFNO2dCQUdBLFdBQVc7c0JBRGpCLE1BQU07Z0JBaURBLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFJQyxvQkFBb0I7c0JBRDFCLEtBQUs7Z0JBS0ssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQVlLLG1CQUFtQjtzQkFEN0IsS0FBSztnQkFZSyxxQkFBcUI7c0JBRC9CLEtBQUs7Z0JBWUssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQWVLLGlCQUFpQjtzQkFEM0IsS0FBSztnQkFZSyxrQkFBa0I7c0JBRDVCLEtBQUs7Z0JBWUssbUJBQW1CO3NCQUQ3QixLQUFLO2dCQVlDLGNBQWM7c0JBRHBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgRm9ybUJ1aWxkZXIsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb2RMb2NhdGlvblJhbmdlIH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1jb2QtbG9jYXRpb24nO1xyXG5pbXBvcnQgeyBDb2RJbWFnZSB9IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtY29kaWNvbG9neS11aSc7XHJcbmltcG9ydCB7IFRoZXNhdXJ1c0VudHJ5IH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1jb3JlJztcclxuaW1wb3J0IHsgRmxhZyB9IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtdWktZmxhZ3MtcGlja2VyJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgQ29kRGVjb3JhdGlvbkVsZW1lbnQgfSBmcm9tICcuLi9jb2QtZGVjb3JhdGlvbnMtcGFydCc7XHJcblxyXG4vKipcclxuICogTGlzdCBvZiBoaWRkZW4gZmllbGRzIGluIGRlY29yYXRpb24gZWxlbWVudCBjb21wb25lbnQuXHJcbiAqIFRoaXMgaXMgc2V0IGJ5IGV4YW1pbmluZyB0aGUgdmFsdWVzIG9mIHRoZSB0aGVzYXVydXNcclxuICogbmFtZWQgXCJjb2QtZGVjb3JhdGlvbi10eXBlLWhpZGRlblwiIGhhdmluZyBhcyBrZXkgdGhlXHJcbiAqIGVsZW1lbnQgdHlwZSBJRCAoZS5nLiBcInBhZy1pbmNcIiksIGFuZCBhcyB2YWx1ZSBhIHNwYWNlXHJcbiAqIGRlbGltaXRlZCBsaXN0IG9mIGZpZWxkIG5hbWVzLiBFYWNoIG9mIHRoZXNlIGZpZWxkIG5hbWVzXHJcbiAqIGNvcnJlc3BvbmRzIHRvIGEgcHJvcGVydHkgb2YgdGhpcyBvYmplY3QuXHJcbiAqL1xyXG5pbnRlcmZhY2UgSGlkZGVuRGVjRWxlbUZpZWxkcyB7XHJcbiAgZmxhZ3M/OiBib29sZWFuO1xyXG4gIHR5cG9sb2dpZXM/OiBib29sZWFuO1xyXG4gIHN1YmplY3Q/OiBib29sZWFuO1xyXG4gIGNvbG9ycz86IGJvb2xlYW47XHJcbiAgZ2lsZGluZ3M/OiBib29sZWFuO1xyXG4gIHRlY2huaXF1ZXM/OiBib29sZWFuO1xyXG4gIHRvb2xzPzogYm9vbGVhbjtcclxuICBwb3NpdGlvbnM/OiBib29sZWFuO1xyXG4gIGxpbmVIZWlnaHQ/OiBib29sZWFuO1xyXG4gIHRleHRSZWxhdGlvbj86IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2FkbXVzLWNvZC1kZWNvcmF0aW9uLWVsZW1lbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2QtZGVjb3JhdGlvbi1lbGVtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb2QtZGVjb3JhdGlvbi1lbGVtZW50LmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvZERlY29yYXRpb25FbGVtZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcml2YXRlIF9lbGVtZW50OiBDb2REZWNvcmF0aW9uRWxlbWVudCB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9lbGVtRmxhZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfZWxlbUNvbG9yRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9lbGVtR2lsZGluZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfZWxlbVRlY2hFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2VsZW1Qb3NFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2VsZW1Ub29sRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9lbGVtVHlwb2xFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX3VwZGF0aW5nRm9ybT86IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfYWRqdXN0aW5nVUk/OiBib29sZWFuO1xyXG5cclxuICBAVmlld0NoaWxkKCdkc2NlZGl0b3InLCB7IHN0YXRpYzogZmFsc2UgfSkgZHNjRWRpdG9yOiBhbnk7XHJcbiAgcHVibGljIGVkaXRvck9wdGlvbnMgPSB7XHJcbiAgICB0aGVtZTogJ3ZzLWxpZ2h0JyxcclxuICAgIGxhbmd1YWdlOiAnbWFya2Rvd24nLFxyXG4gICAgd29yZFdyYXA6ICdvbicsXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXR1bGFyZW4vbmd4LW1vbmFjby1lZGl0b3IvaXNzdWVzLzE5XHJcbiAgICBhdXRvbWF0aWNMYXlvdXQ6IHRydWUsXHJcbiAgfTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGVsZW1lbnQoKTogQ29kRGVjb3JhdGlvbkVsZW1lbnQgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZWxlbWVudCh2YWx1ZTogQ29kRGVjb3JhdGlvbkVsZW1lbnQgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2VsZW1lbnQgPSB2YWx1ZTtcclxuICAgIHRoaXMudXBkYXRlRm9ybSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBwYXJlbnRLZXlzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGVsZW1lbnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxDb2REZWNvcmF0aW9uRWxlbWVudD47XHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGVkaXRvckNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PjtcclxuXHJcbiAgLy8gZ2VuZXJhbFxyXG4gIHB1YmxpYyBrZXk6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyBwYXJlbnRLZXk6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyB0eXBlOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgZmxhZ3M6IEZvcm1Db250cm9sPHN0cmluZ1tdPjtcclxuICBwdWJsaWMgcmFuZ2VzOiBGb3JtQ29udHJvbDxDb2RMb2NhdGlvblJhbmdlW10+O1xyXG4gIHB1YmxpYyBpbnN0YW5jZUNvdW50OiBGb3JtQ29udHJvbDxudW1iZXI+O1xyXG4gIC8vIHR5cG9sb2dpZXNcclxuICBwdWJsaWMgdHlwb2xvZ2llczogRm9ybUNvbnRyb2w8c3RyaW5nW10+O1xyXG4gIHB1YmxpYyBzdWJqZWN0OiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgY29sb3JzOiBGb3JtQ29udHJvbDxzdHJpbmdbXT47XHJcbiAgcHVibGljIGdpbGRpbmdzOiBGb3JtQ29udHJvbDxzdHJpbmdbXT47XHJcbiAgcHVibGljIHRlY2huaXF1ZXM6IEZvcm1Db250cm9sPHN0cmluZ1tdPjtcclxuICBwdWJsaWMgdG9vbHM6IEZvcm1Db250cm9sPHN0cmluZ1tdPjtcclxuICBwdWJsaWMgcG9zaXRpb25zOiBGb3JtQ29udHJvbDxzdHJpbmdbXT47XHJcbiAgcHVibGljIGxpbmVIZWlnaHQ6IEZvcm1Db250cm9sPG51bWJlcj47XHJcbiAgcHVibGljIHRleHRSZWxhdGlvbjogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgLy8gZGVzY3JpcHRpb25cclxuICBwdWJsaWMgZGVzY3JpcHRpb246IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyBpbWFnZXM6IEZvcm1Db250cm9sPENvZEltYWdlW10+O1xyXG4gIHB1YmxpYyBub3RlOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBwdWJsaWMgaW5pdGlhbFJhbmdlczogQ29kTG9jYXRpb25SYW5nZVtdO1xyXG4gIHB1YmxpYyBpbml0aWFsSW1hZ2VzOiBDb2RJbWFnZVtdO1xyXG4gIC8vIGZsYWdzXHJcbiAgcHVibGljIGluaXRpYWxGbGFnczogc3RyaW5nW107XHJcbiAgcHVibGljIGluaXRpYWxUeXBvbG9naWVzOiBzdHJpbmdbXTtcclxuICBwdWJsaWMgaW5pdGlhbENvbG9yczogc3RyaW5nW107XHJcbiAgcHVibGljIGluaXRpYWxHaWxkaW5nczogc3RyaW5nW107XHJcbiAgcHVibGljIGluaXRpYWxUZWNobmlxdWVzOiBzdHJpbmdbXTtcclxuICBwdWJsaWMgaW5pdGlhbFRvb2xzOiBzdHJpbmdbXTtcclxuICBwdWJsaWMgaW5pdGlhbFBvc2l0aW9uczogc3RyaW5nW107XHJcblxyXG4gIHB1YmxpYyBhdmFpbEZsYWdzOiBGbGFnW107XHJcbiAgcHVibGljIGF2YWlsVHlwb2xvZ2llczogRmxhZ1tdO1xyXG4gIHB1YmxpYyBhdmFpbENvbG9yczogRmxhZ1tdO1xyXG4gIHB1YmxpYyBhdmFpbEdpbGRpbmdzOiBGbGFnW107XHJcbiAgcHVibGljIGF2YWlsVGVjaG5pcXVlczogRmxhZ1tdO1xyXG4gIHB1YmxpYyBhdmFpbFRvb2xzOiBGbGFnW107XHJcbiAgcHVibGljIGF2YWlsUG9zaXRpb25zOiBGbGFnW107XHJcblxyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtdHlwZXMgKHJlcXVpcmVkKS4gQWxsIHRoZSBvdGhlciB0aGVzYXVyaVxyXG4gIC8vIChleGNlcHQgZGVjVHlwZUhpZGRlbkVudHJpZXMpIGhhdmUgdGhlaXIgZW50cmllcyBmaWx0ZXJlZFxyXG4gIC8vIGJ5IHRoZSB2YWx1ZSBzZWxlY3RlZCBmcm9tIHRoaXMgdGhlc2F1cnVzLlxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRlY0VsZW1UeXBlRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBjb2QtZGVjb3JhdGlvbi10eXBlLWhpZGRlblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRlY1R5cGVIaWRkZW5FbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvLyBjb2QtZGVjb3JhdGlvbi1lbGVtZW50LWZsYWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGRlY0VsZW1GbGFnRW50cmllcygpOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9lbGVtRmxhZ0VudHJpZXM7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZGVjRWxlbUZsYWdFbnRyaWVzKHZhbHVlOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9lbGVtRmxhZ0VudHJpZXMgPSB2YWx1ZTtcclxuICAgIHRoaXMuZWxlbUZsYWdFbnRyaWVzID0gdGhpcy5nZXRGaWx0ZXJlZEVudHJpZXModmFsdWUsIHRoaXMudHlwZT8udmFsdWUpO1xyXG4gICAgdGhpcy5hdmFpbEZsYWdzID0gdGhpcy5nZXRBdmFpbGFibGVGbGFncyh0aGlzLmVsZW1GbGFnRW50cmllcyk7XHJcbiAgfVxyXG5cclxuICAvLyBjb2QtZGVjb3JhdGlvbi1lbGVtZW50LWNvbG9yc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBkZWNFbGVtQ29sb3JFbnRyaWVzKCk6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1Db2xvckVudHJpZXM7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZGVjRWxlbUNvbG9yRW50cmllcyh2YWx1ZTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fZWxlbUNvbG9yRW50cmllcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5lbGVtQ29sb3JFbnRyaWVzID0gdGhpcy5nZXRGaWx0ZXJlZEVudHJpZXModmFsdWUsIHRoaXMudHlwZT8udmFsdWUpO1xyXG4gICAgdGhpcy5hdmFpbENvbG9ycyA9IHRoaXMuZ2V0QXZhaWxhYmxlRmxhZ3ModGhpcy5lbGVtQ29sb3JFbnRyaWVzKTtcclxuICB9XHJcblxyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtZ2lsZGluZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgZGVjRWxlbUdpbGRpbmdFbnRyaWVzKCk6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1HaWxkaW5nRW50cmllcztcclxuICB9XHJcbiAgcHVibGljIHNldCBkZWNFbGVtR2lsZGluZ0VudHJpZXModmFsdWU6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2VsZW1HaWxkaW5nRW50cmllcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5lbGVtR2lsZGluZ0VudHJpZXMgPSB0aGlzLmdldEZpbHRlcmVkRW50cmllcyh2YWx1ZSwgdGhpcy50eXBlPy52YWx1ZSk7XHJcbiAgICB0aGlzLmF2YWlsR2lsZGluZ3MgPSB0aGlzLmdldEF2YWlsYWJsZUZsYWdzKHRoaXMuZWxlbUdpbGRpbmdFbnRyaWVzKTtcclxuICB9XHJcblxyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtdGVjaG5pcXVlc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBkZWNFbGVtVGVjaEVudHJpZXMoKTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWxlbVRlY2hFbnRyaWVzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGRlY0VsZW1UZWNoRW50cmllcyh2YWx1ZTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fZWxlbVRlY2hFbnRyaWVzID0gdmFsdWU7XHJcbiAgICB0aGlzLmVsZW1UZWNobmlxdWVFbnRyaWVzID0gdGhpcy5nZXRGaWx0ZXJlZEVudHJpZXMoXHJcbiAgICAgIHZhbHVlLFxyXG4gICAgICB0aGlzLnR5cGU/LnZhbHVlXHJcbiAgICApO1xyXG4gICAgdGhpcy5hdmFpbFRlY2huaXF1ZXMgPSB0aGlzLmdldEF2YWlsYWJsZUZsYWdzKHRoaXMuZWxlbVRlY2huaXF1ZUVudHJpZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gY29kLWRlY29yYXRpb24tZWxlbWVudC1wb3NpdGlvbnNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgZGVjRWxlbVBvc0VudHJpZXMoKTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWxlbVBvc0VudHJpZXM7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZGVjRWxlbVBvc0VudHJpZXModmFsdWU6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2VsZW1Qb3NFbnRyaWVzID0gdmFsdWU7XHJcbiAgICB0aGlzLmVsZW1Qb3NpdGlvbkVudHJpZXMgPSB0aGlzLmdldEZpbHRlcmVkRW50cmllcyh2YWx1ZSwgdGhpcy50eXBlPy52YWx1ZSk7XHJcbiAgICB0aGlzLmF2YWlsUG9zaXRpb25zID0gdGhpcy5nZXRBdmFpbGFibGVGbGFncyh0aGlzLmVsZW1Qb3NpdGlvbkVudHJpZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gY29kLWRlY29yYXRpb24tZWxlbWVudC10b29sc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBkZWNFbGVtVG9vbEVudHJpZXMoKTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWxlbVRvb2xFbnRyaWVzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGRlY0VsZW1Ub29sRW50cmllcyh2YWx1ZTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fZWxlbVRvb2xFbnRyaWVzID0gdmFsdWU7XHJcbiAgICB0aGlzLmVsZW1Ub29sRW50cmllcyA9IHRoaXMuZ2V0RmlsdGVyZWRFbnRyaWVzKHZhbHVlLCB0aGlzLnR5cGU/LnZhbHVlKTtcclxuICAgIHRoaXMuYXZhaWxUb29scyA9IHRoaXMuZ2V0QXZhaWxhYmxlRmxhZ3ModGhpcy5lbGVtVG9vbEVudHJpZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gY29kLWRlY29yYXRpb24tZWxlbWVudC10eXBvbG9naWVzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGRlY0VsZW1UeXBvbEVudHJpZXMoKTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWxlbVR5cG9sRW50cmllcztcclxuICB9XHJcbiAgcHVibGljIHNldCBkZWNFbGVtVHlwb2xFbnRyaWVzKHZhbHVlOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9lbGVtVHlwb2xFbnRyaWVzID0gdmFsdWU7XHJcbiAgICB0aGlzLmVsZW1UeXBvbEVudHJpZXMgPSB0aGlzLmdldEZpbHRlcmVkRW50cmllcyh2YWx1ZSwgdGhpcy50eXBlPy52YWx1ZSk7XHJcbiAgICB0aGlzLmF2YWlsVHlwb2xvZ2llcyA9IHRoaXMuZ2V0QXZhaWxhYmxlRmxhZ3ModGhpcy5lbGVtVHlwb2xFbnRyaWVzKTtcclxuICB9XHJcblxyXG4gIC8vIGNvZC1pbWFnZS10eXBlc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGltZ1R5cGVFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvLyB0aGUgZmlsdGVyZWQgZW50cmllczpcclxuICBwdWJsaWMgZWxlbUZsYWdFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBlbGVtQ29sb3JFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBlbGVtR2lsZGluZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIGVsZW1UZWNobmlxdWVFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBlbGVtUG9zaXRpb25FbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBlbGVtVG9vbEVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIGVsZW1UeXBvbEVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyBlbGVtR2lsZGluZ0ZyZWU/OiBib29sZWFuO1xyXG4gIHB1YmxpYyBlbGVtVGVjaG5pcXVlRnJlZT86IGJvb2xlYW47XHJcbiAgcHVibGljIGVsZW1Qb3NpdGlvbkZyZWU/OiBib29sZWFuO1xyXG4gIHB1YmxpYyBlbGVtVG9vbEZyZWU/OiBib29sZWFuO1xyXG5cclxuICAvLyB0aGlzIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBmb3IgZWFjaCBjb250cm9sXHJcbiAgLy8gdG8gYmUgaGlkZGVuLCBoYXZpbmcgdGhlIHNhbWUgbmFtZSBvZiB0aGUgY29udHJvbFxyXG4gIC8vIGFuZCB2YWx1ZT10cnVlLlxyXG4gIHB1YmxpYyBoaWRkZW4/OiBIaWRkZW5EZWNFbGVtRmllbGRzO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHRoaXMuZWxlbWVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29kRGVjb3JhdGlvbkVsZW1lbnQ+KCk7XHJcbiAgICB0aGlzLmVkaXRvckNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgdGhpcy5pbml0aWFsUmFuZ2VzID0gW107XHJcbiAgICB0aGlzLmluaXRpYWxJbWFnZXMgPSBbXTtcclxuICAgIC8vIGZsYWdzXHJcbiAgICB0aGlzLmluaXRpYWxGbGFncyA9IFtdO1xyXG4gICAgdGhpcy5pbml0aWFsVHlwb2xvZ2llcyA9IFtdO1xyXG4gICAgdGhpcy5pbml0aWFsQ29sb3JzID0gW107XHJcbiAgICB0aGlzLmluaXRpYWxHaWxkaW5ncyA9IFtdO1xyXG4gICAgdGhpcy5pbml0aWFsVGVjaG5pcXVlcyA9IFtdO1xyXG4gICAgdGhpcy5pbml0aWFsVG9vbHMgPSBbXTtcclxuICAgIHRoaXMuaW5pdGlhbFBvc2l0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5hdmFpbEZsYWdzID0gW107XHJcbiAgICB0aGlzLmF2YWlsVHlwb2xvZ2llcyA9IFtdO1xyXG4gICAgdGhpcy5hdmFpbENvbG9ycyA9IFtdO1xyXG4gICAgdGhpcy5hdmFpbEdpbGRpbmdzID0gW107XHJcbiAgICB0aGlzLmF2YWlsVGVjaG5pcXVlcyA9IFtdO1xyXG4gICAgdGhpcy5hdmFpbFRvb2xzID0gW107XHJcbiAgICB0aGlzLmF2YWlsUG9zaXRpb25zID0gW107XHJcblxyXG4gICAgLy8gZm9ybVxyXG4gICAgdGhpcy5rZXkgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFtcclxuICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWy1hLXpBLVowLTlfXSskJyksXHJcbiAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKSxcclxuICAgIF0pO1xyXG4gICAgdGhpcy5wYXJlbnRLZXkgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFtcclxuICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWy1hLXpBLVowLTlfXSskJyksXHJcbiAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKSxcclxuICAgIF0pO1xyXG4gICAgdGhpcy50eXBlID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBbXHJcbiAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKSxcclxuICAgIF0pO1xyXG4gICAgdGhpcy5mbGFncyA9IGZvcm1CdWlsZGVyLmNvbnRyb2woW10sIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLnJhbmdlcyA9IGZvcm1CdWlsZGVyLmNvbnRyb2woW10sIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLmluc3RhbmNlQ291bnQgPSBmb3JtQnVpbGRlci5jb250cm9sKDAsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLnR5cG9sb2dpZXMgPSBmb3JtQnVpbGRlci5jb250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5zdWJqZWN0ID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDApKTtcclxuICAgIHRoaXMuY29sb3JzID0gZm9ybUJ1aWxkZXIuY29udHJvbChbXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICAgIHRoaXMuZ2lsZGluZ3MgPSBmb3JtQnVpbGRlci5jb250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy50ZWNobmlxdWVzID0gZm9ybUJ1aWxkZXIuY29udHJvbChbXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICAgIHRoaXMudG9vbHMgPSBmb3JtQnVpbGRlci5jb250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBmb3JtQnVpbGRlci5jb250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5saW5lSGVpZ2h0ID0gZm9ybUJ1aWxkZXIuY29udHJvbCgwLCB7XHJcbiAgICAgIHZhbGlkYXRvcnM6IFZhbGlkYXRvcnMubWluKDApLFxyXG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy50ZXh0UmVsYXRpb24gPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCkpO1xyXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwMCkpO1xyXG4gICAgdGhpcy5pbWFnZXMgPSBmb3JtQnVpbGRlci5jb250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5ub3RlID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLm1heExlbmd0aCg1MDApKTtcclxuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAga2V5OiB0aGlzLmtleSxcclxuICAgICAgcGFyZW50S2V5OiB0aGlzLnBhcmVudEtleSxcclxuICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICBmbGFnczogdGhpcy5mbGFncyxcclxuICAgICAgaW5zdGFuY2VDb3VudDogdGhpcy5pbnN0YW5jZUNvdW50LFxyXG4gICAgICByYW5nZXM6IHRoaXMucmFuZ2VzLFxyXG4gICAgICB0eXBvbG9naWVzOiB0aGlzLnR5cG9sb2dpZXMsXHJcbiAgICAgIHN1YmplY3Q6IHRoaXMuc3ViamVjdCxcclxuICAgICAgY29sb3JzOiB0aGlzLmNvbG9ycyxcclxuICAgICAgZ2lsZGluZ3M6IHRoaXMuZ2lsZGluZ3MsXHJcbiAgICAgIHRlY2huaXF1ZXM6IHRoaXMudGVjaG5pcXVlcyxcclxuICAgICAgdG9vbHM6IHRoaXMudG9vbHMsXHJcbiAgICAgIHBvc2l0aW9uczogdGhpcy5wb3NpdGlvbnMsXHJcbiAgICAgIGxpbmVIZWlnaHQ6IHRoaXMubGluZUhlaWdodCxcclxuICAgICAgdGV4dFJlbGF0aW9uOiB0aGlzLnRleHRSZWxhdGlvbixcclxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXHJcbiAgICAgIGltYWdlczogdGhpcy5pbWFnZXMsXHJcbiAgICAgIG5vdGU6IHRoaXMubm90ZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBzcGVjaWZpZWQgdGhlc2F1cnVzIGVudHJpZXMgcmVwcmVzZW50IGEgZnJlZSBzZXQuXHJcbiAgICogVGhpcyBoYXBwZW5zIHdoZW4gd2UganVzdCBoYXZlIGEgc2luZ2xlIGVudHJ5IHdpdGggYSBzaW5nbGUgZG90XHJcbiAgICogZm9sbG93ZWQgYnkgXCItXCIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZW50cmllcyBUaGUgdGhlc2F1cnVzIGVudHJpZXMgdG8gdGVzdC5cclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBlbnRyaWVzIHJlcHJlc2VudCBhIGZyZWUgc2V0LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgaXNGcmVlU2V0KGVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuICAgIGlmIChlbnRyaWVzPy5sZW5ndGggIT09IDEpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdG9rZW5zID0gZW50cmllc1swXS5pZC5zcGxpdCgnLicpO1xyXG4gICAgcmV0dXJuIHRva2Vucy5sZW5ndGggPT09IDIgJiYgdG9rZW5zWzFdID09PSAnLSc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpbHRlcmVkRW50cmllcyhcclxuICAgIGVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQgfCBudWxsLFxyXG4gICAgcHJlZml4OiBzdHJpbmcgfCBudWxsXHJcbiAgKTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXByZWZpeCB8fCAhZW50cmllcz8uc29tZSgoZSkgPT4gZS5pZC5pbmRleE9mKCcuJykgPiAtMSkpIHtcclxuICAgICAgcmV0dXJuIGVudHJpZXMgfHwgdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcCA9IHByZWZpeCArICcuJztcclxuICAgIHJldHVybiBlbnRyaWVzLmZpbHRlcigoZSkgPT4gZS5pZC5zdGFydHNXaXRoKHApKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QXZhaWxhYmxlRmxhZ3MoZW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCk6IEZsYWdbXSB7XHJcbiAgICByZXR1cm4gZW50cmllcz8ubGVuZ3RoXHJcbiAgICAgID8gZW50cmllc1xyXG4gICAgICAgICAgLmZpbHRlcigoZSkgPT4gZS52YWx1ZT8ubGVuZ3RoKVxyXG4gICAgICAgICAgLm1hcCgoZSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGlkOiBlLmlkLFxyXG4gICAgICAgICAgICAgIGxhYmVsOiBlLnZhbHVlLFxyXG4gICAgICAgICAgICB9IGFzIEZsYWc7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICA6IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmlsaXR5KCk6IHZvaWQge1xyXG4gICAgY29uc3QgaGlkZGVuOiBhbnkgPSB7fTtcclxuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5kZWNUeXBlSGlkZGVuRW50cmllcz8uZmluZChcclxuICAgICAgKGUpID0+IGUuaWQgPT09IHRoaXMudHlwZS52YWx1ZVxyXG4gICAgKTtcclxuICAgIGlmIChlbnRyeSkge1xyXG4gICAgICBjb25zdCBuYW1lcyA9IGVudHJ5LnZhbHVlLnNwbGl0KCcgJykuZmlsdGVyKChzKSA9PiBzKTtcclxuICAgICAgbmFtZXMuZm9yRWFjaCgobikgPT4ge1xyXG4gICAgICAgIGhpZGRlbltuXSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oaWRkZW4gPSBoaWRkZW47XHJcbiAgICBjb25zb2xlLmxvZygnaGlkZGVuOiAnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5oaWRkZW4pKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRhYkluZGV4Q2hhbmdlZCgwKTtcclxuXHJcbiAgICB0aGlzLmFkanVzdFVJKCk7XHJcblxyXG4gICAgdGhpcy50eXBlLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBkZWJvdW5jZVRpbWUoMzAwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl91cGRhdGluZ0Zvcm0pIHtcclxuICAgICAgICAgIHRoaXMuYWRqdXN0VUkoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGp1c3RVSSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9hZGp1c3RpbmdVSSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9hZGp1c3RpbmdVSSA9IHRydWU7XHJcbiAgICBjb25zb2xlLmxvZygnYWRqdXN0VUkgZW50ZXInKTtcclxuICAgIC8vIHJlc2V0IHR5cGUtZGVwZW5kZW50IHZhbHVlc1xyXG4gICAgdGhpcy5mbGFncy5yZXNldCgpO1xyXG4gICAgdGhpcy50eXBvbG9naWVzLnJlc2V0KCk7XHJcbiAgICB0aGlzLnN1YmplY3QucmVzZXQoKTtcclxuICAgIHRoaXMuaW5pdGlhbENvbG9ycyA9IFtdO1xyXG4gICAgdGhpcy5pbml0aWFsR2lsZGluZ3MgPSBbXTtcclxuICAgIHRoaXMuaW5pdGlhbFRlY2huaXF1ZXMgPSBbXTtcclxuICAgIHRoaXMuaW5pdGlhbFRvb2xzID0gW107XHJcbiAgICB0aGlzLmluaXRpYWxQb3NpdGlvbnMgPSBbXTtcclxuICAgIHRoaXMubGluZUhlaWdodC5yZXNldCgpO1xyXG4gICAgdGhpcy50ZXh0UmVsYXRpb24ucmVzZXQoKTtcclxuXHJcbiAgICAvLyBmaWx0ZXIgZW50cmllcyBmb3IgbXVsdGlwbGUtc2VsZWN0aW9uc1xyXG4gICAgdGhpcy5lbGVtRmxhZ0VudHJpZXMgPSB0aGlzLmdldEZpbHRlcmVkRW50cmllcyhcclxuICAgICAgdGhpcy5fZWxlbUZsYWdFbnRyaWVzLFxyXG4gICAgICB0aGlzLnR5cGU/LnZhbHVlXHJcbiAgICApO1xyXG4gICAgdGhpcy5hdmFpbEZsYWdzID0gdGhpcy5nZXRBdmFpbGFibGVGbGFncyh0aGlzLmVsZW1GbGFnRW50cmllcyk7XHJcblxyXG4gICAgdGhpcy5lbGVtQ29sb3JFbnRyaWVzID0gdGhpcy5nZXRGaWx0ZXJlZEVudHJpZXMoXHJcbiAgICAgIHRoaXMuX2VsZW1Db2xvckVudHJpZXMsXHJcbiAgICAgIHRoaXMudHlwZT8udmFsdWVcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWlsQ29sb3JzID0gdGhpcy5nZXRBdmFpbGFibGVGbGFncyh0aGlzLmVsZW1Db2xvckVudHJpZXMpO1xyXG5cclxuICAgIC8vIGZpbHRlciBlbnRyaWVzIGFuZCBzZXQgZnJlZSBmb3Igc2luZ2xlLXNlbGVjdGlvbnNcclxuICAgIHRoaXMuZWxlbUdpbGRpbmdFbnRyaWVzID0gdGhpcy5nZXRGaWx0ZXJlZEVudHJpZXMoXHJcbiAgICAgIHRoaXMuX2VsZW1HaWxkaW5nRW50cmllcyxcclxuICAgICAgdGhpcy50eXBlPy52YWx1ZVxyXG4gICAgKTtcclxuICAgIHRoaXMuYXZhaWxHaWxkaW5ncyA9IHRoaXMuZ2V0QXZhaWxhYmxlRmxhZ3ModGhpcy5lbGVtR2lsZGluZ0VudHJpZXMpO1xyXG4gICAgdGhpcy5lbGVtR2lsZGluZ0ZyZWUgPSB0aGlzLmlzRnJlZVNldCh0aGlzLmVsZW1HaWxkaW5nRW50cmllcyk7XHJcblxyXG4gICAgdGhpcy5lbGVtVGVjaG5pcXVlRW50cmllcyA9IHRoaXMuZ2V0RmlsdGVyZWRFbnRyaWVzKFxyXG4gICAgICB0aGlzLl9lbGVtVGVjaEVudHJpZXMsXHJcbiAgICAgIHRoaXMudHlwZT8udmFsdWVcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWlsVGVjaG5pcXVlcyA9IHRoaXMuZ2V0QXZhaWxhYmxlRmxhZ3ModGhpcy5lbGVtVGVjaG5pcXVlRW50cmllcyk7XHJcbiAgICB0aGlzLmVsZW1UZWNobmlxdWVGcmVlID0gdGhpcy5pc0ZyZWVTZXQodGhpcy5lbGVtVGVjaG5pcXVlRW50cmllcyk7XHJcblxyXG4gICAgdGhpcy5lbGVtUG9zaXRpb25FbnRyaWVzID0gdGhpcy5nZXRGaWx0ZXJlZEVudHJpZXMoXHJcbiAgICAgIHRoaXMuX2VsZW1Qb3NFbnRyaWVzLFxyXG4gICAgICB0aGlzLnR5cGU/LnZhbHVlXHJcbiAgICApO1xyXG4gICAgdGhpcy5hdmFpbFBvc2l0aW9ucyA9IHRoaXMuZ2V0QXZhaWxhYmxlRmxhZ3ModGhpcy5lbGVtUG9zaXRpb25FbnRyaWVzKTtcclxuICAgIHRoaXMuZWxlbVBvc2l0aW9uRnJlZSA9IHRoaXMuaXNGcmVlU2V0KHRoaXMuZWxlbVBvc2l0aW9uRW50cmllcyk7XHJcblxyXG4gICAgdGhpcy5lbGVtVG9vbEVudHJpZXMgPSB0aGlzLmdldEZpbHRlcmVkRW50cmllcyhcclxuICAgICAgdGhpcy5fZWxlbVRvb2xFbnRyaWVzLFxyXG4gICAgICB0aGlzLnR5cGU/LnZhbHVlXHJcbiAgICApO1xyXG4gICAgdGhpcy5hdmFpbFRvb2xzID0gdGhpcy5nZXRBdmFpbGFibGVGbGFncyh0aGlzLmVsZW1Ub29sRW50cmllcyk7XHJcbiAgICB0aGlzLmVsZW1Ub29sRnJlZSA9IHRoaXMuaXNGcmVlU2V0KHRoaXMuZWxlbVRvb2xFbnRyaWVzKTtcclxuXHJcbiAgICB0aGlzLmVsZW1UeXBvbEVudHJpZXMgPSB0aGlzLmdldEZpbHRlcmVkRW50cmllcyhcclxuICAgICAgdGhpcy5fZWxlbVR5cG9sRW50cmllcyxcclxuICAgICAgdGhpcy50eXBlPy52YWx1ZVxyXG4gICAgKTtcclxuICAgIHRoaXMuYXZhaWxUeXBvbG9naWVzID0gdGhpcy5nZXRBdmFpbGFibGVGbGFncyh0aGlzLmVsZW1UeXBvbEVudHJpZXMpO1xyXG5cclxuICAgIC8vIHZpc2liaWxpdHlcclxuICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eSgpO1xyXG4gICAgdGhpcy5fYWRqdXN0aW5nVUkgPSBmYWxzZTtcclxuICAgIGNvbnNvbGUubG9nKCdhZGp1c3RVSSBleGl0Jyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25UYWJJbmRleENoYW5nZWQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgLy8gSEFDS1xyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F0dWxhcmVuL25neC1tb25hY28tZWRpdG9yL2lzc3Vlcy8xOVxyXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzc0MTI5NTAvbmd4LW1vbmFjby1lZGl0b3ItdW5hYmxlLXRvLXNldC1sYXlvdXQtc2l6ZS13aGVuLWNvbnRhaW5lci1jaGFuZ2VzLXVzaW5nLXRhYlxyXG4gICAgaWYgKGluZGV4ID09PSAyKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZHNjRWRpdG9yPy5fZWRpdG9yPy5sYXlvdXQoKTtcclxuICAgICAgfSwgMTUwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybShlbGVtZW50OiBDb2REZWNvcmF0aW9uRWxlbWVudCB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdXBkYXRpbmdGb3JtID0gdHJ1ZTtcclxuICAgIGNvbnNvbGUubG9nKCd1cGRhdGVGb3JtIGVudGVyJyk7XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMuX3VwZGF0aW5nRm9ybSA9IGZhbHNlO1xyXG4gICAgICBjb25zb2xlLmxvZygndXBkYXRlRm9ybSBleGl0Jyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGdlbmVyYWxcclxuICAgIHRoaXMudHlwZS5zZXRWYWx1ZShlbGVtZW50LnR5cGUpO1xyXG4gICAgLy8gbGV0IHRoZSBVSSBhZGp1c3QgaXRzZWxmIGJlZm9yZSBzZXR0aW5nIHR5cGUtZGVwZW5kZW50IGNvbnRyb2xzXHJcbiAgICB0aGlzLmFkanVzdFVJKCk7XHJcblxyXG4gICAgLy8gc2V0IG90aGVyIGNvbnRyb2xzXHJcbiAgICAvLyBIQUNLXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5rZXkuc2V0VmFsdWUoZWxlbWVudC5rZXkgfHwgbnVsbCk7XHJcbiAgICAgIHRoaXMucGFyZW50S2V5LnNldFZhbHVlKGVsZW1lbnQucGFyZW50S2V5IHx8IG51bGwpO1xyXG4gICAgICB0aGlzLmluaXRpYWxSYW5nZXMgPSBlbGVtZW50LnJhbmdlcztcclxuICAgICAgdGhpcy5pbml0aWFsRmxhZ3MgPSBlbGVtZW50LmZsYWdzO1xyXG4gICAgICB0aGlzLmluc3RhbmNlQ291bnQuc2V0VmFsdWUoZWxlbWVudC5pbnN0YW5jZUNvdW50IHx8IDApO1xyXG4gICAgICAvLyB0eXBvbG9naWVzXHJcbiAgICAgIHRoaXMuc3ViamVjdC5zZXRWYWx1ZShlbGVtZW50LnN1YmplY3QgfHwgbnVsbCk7XHJcblxyXG4gICAgICB0aGlzLmNvbG9ycy5zZXRWYWx1ZShlbGVtZW50LmNvbG9ycyB8fCBbXSk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9ycyA9IHRoaXMuY29sb3JzLnZhbHVlO1xyXG5cclxuICAgICAgdGhpcy50eXBvbG9naWVzLnNldFZhbHVlKGVsZW1lbnQudHlwb2xvZ2llcyB8fCBbXSk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbFR5cG9sb2dpZXMgPSB0aGlzLnR5cG9sb2dpZXMudmFsdWU7XHJcblxyXG4gICAgICB0aGlzLmdpbGRpbmdzLnNldFZhbHVlKGVsZW1lbnQuZ2lsZGluZ3MgfHwgW10pO1xyXG4gICAgICB0aGlzLmluaXRpYWxHaWxkaW5ncyA9IHRoaXMuZ2lsZGluZ3MudmFsdWU7XHJcblxyXG4gICAgICB0aGlzLnRlY2huaXF1ZXMuc2V0VmFsdWUoZWxlbWVudC50ZWNobmlxdWVzIHx8IFtdKTtcclxuICAgICAgdGhpcy5pbml0aWFsVGVjaG5pcXVlcyA9IHRoaXMudGVjaG5pcXVlcy52YWx1ZTtcclxuXHJcbiAgICAgIHRoaXMudG9vbHMuc2V0VmFsdWUoZWxlbWVudC50b29scyB8fCBbXSk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbFRvb2xzID0gdGhpcy50b29scy52YWx1ZTtcclxuXHJcbiAgICAgIHRoaXMucG9zaXRpb25zLnNldFZhbHVlKGVsZW1lbnQucG9zaXRpb25zIHx8IFtdKTtcclxuICAgICAgdGhpcy5pbml0aWFsUG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnMudmFsdWU7XHJcblxyXG4gICAgICB0aGlzLmxpbmVIZWlnaHQuc2V0VmFsdWUoZWxlbWVudC5saW5lSGVpZ2h0IHx8IDApO1xyXG4gICAgICB0aGlzLnRleHRSZWxhdGlvbi5zZXRWYWx1ZShlbGVtZW50LnRleHRSZWxhdGlvbiB8fCBudWxsKTtcclxuICAgICAgLy8gZGVzY3JpcHRpb25cclxuICAgICAgdGhpcy5kZXNjcmlwdGlvbi5zZXRWYWx1ZShlbGVtZW50LmRlc2NyaXB0aW9uIHx8IG51bGwpO1xyXG4gICAgICB0aGlzLmluaXRpYWxJbWFnZXMgPSBlbGVtZW50LmltYWdlcyB8fCBbXTtcclxuICAgICAgdGhpcy5ub3RlLnNldFZhbHVlKGVsZW1lbnQubm90ZSB8fCBudWxsKTtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICB0aGlzLl91cGRhdGluZ0Zvcm0gPSBmYWxzZTtcclxuICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZUZvcm0gdG0gZXhpdCcpO1xyXG4gICAgfSwgMCk7XHJcbiAgICBjb25zb2xlLmxvZygndXBkYXRlRm9ybSBleGl0Jyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEVsZW1lbnQoKTogQ29kRGVjb3JhdGlvbkVsZW1lbnQge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAga2V5OiB0aGlzLmtleS52YWx1ZT8udHJpbSgpLFxyXG4gICAgICBwYXJlbnRLZXk6IHRoaXMucGFyZW50S2V5LnZhbHVlPy50cmltKCksXHJcbiAgICAgIHR5cGU6IHRoaXMudHlwZS52YWx1ZT8udHJpbSgpIHx8ICcnLFxyXG4gICAgICBmbGFnczogdGhpcy5mbGFncy52YWx1ZSB8fCBbXSxcclxuICAgICAgcmFuZ2VzOiB0aGlzLnJhbmdlcy52YWx1ZSB8fCBbXSxcclxuICAgICAgaW5zdGFuY2VDb3VudDogdGhpcy5pbnN0YW5jZUNvdW50LnZhbHVlIHx8IDAsXHJcbiAgICAgIHR5cG9sb2dpZXM6IHRoaXMudHlwb2xvZ2llcy52YWx1ZT8ubGVuZ3RoXHJcbiAgICAgICAgPyB0aGlzLnR5cG9sb2dpZXMudmFsdWVcclxuICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgc3ViamVjdDogdGhpcy5zdWJqZWN0LnZhbHVlPy50cmltKCksXHJcbiAgICAgIGNvbG9yczogdGhpcy5jb2xvcnMudmFsdWU/Lmxlbmd0aCA/IHRoaXMuY29sb3JzLnZhbHVlIDogdW5kZWZpbmVkLFxyXG4gICAgICBnaWxkaW5nczogdGhpcy5naWxkaW5ncy52YWx1ZT8ubGVuZ3RoID8gdGhpcy5naWxkaW5ncy52YWx1ZSA6IHVuZGVmaW5lZCxcclxuICAgICAgdGVjaG5pcXVlczogdGhpcy50ZWNobmlxdWVzLnZhbHVlPy5sZW5ndGhcclxuICAgICAgICA/IHRoaXMudGVjaG5pcXVlcy52YWx1ZVxyXG4gICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICB0b29sczogdGhpcy50b29scy52YWx1ZT8ubGVuZ3RoID8gdGhpcy50b29scy52YWx1ZSA6IHVuZGVmaW5lZCxcclxuICAgICAgcG9zaXRpb25zOiB0aGlzLnBvc2l0aW9ucy52YWx1ZT8ubGVuZ3RoXHJcbiAgICAgICAgPyB0aGlzLnBvc2l0aW9ucy52YWx1ZVxyXG4gICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICBsaW5lSGVpZ2h0OiB0aGlzLmxpbmVIZWlnaHQudmFsdWUsXHJcbiAgICAgIHRleHRSZWxhdGlvbjogdGhpcy50ZXh0UmVsYXRpb24udmFsdWU/LnRyaW0oKSxcclxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24udmFsdWU/LnRyaW0oKSxcclxuICAgICAgaW1hZ2VzOiB0aGlzLmltYWdlcy52YWx1ZT8ubGVuZ3RoID8gdGhpcy5pbWFnZXMudmFsdWUgOiB1bmRlZmluZWQsXHJcbiAgICAgIG5vdGU6IHRoaXMubm90ZS52YWx1ZT8udHJpbSgpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkxvY2F0aW9uQ2hhbmdlKHJhbmdlczogQ29kTG9jYXRpb25SYW5nZVtdIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgdGhpcy5yYW5nZXMuc2V0VmFsdWUocmFuZ2VzIHx8IFtdKTtcclxuICAgIHRoaXMucmFuZ2VzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMucmFuZ2VzLm1hcmtBc0RpcnR5KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25JbWFnZXNDaGFuZ2UoaW1hZ2VzOiBDb2RJbWFnZVtdIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICB0aGlzLmltYWdlcy5zZXRWYWx1ZShpbWFnZXMgfHwgW10pO1xyXG4gICAgdGhpcy5pbWFnZXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5pbWFnZXMubWFya0FzRGlydHkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkZsYWdzQ2hhbmdlKGlkczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHRoaXMuZmxhZ3Muc2V0VmFsdWUoaWRzKTtcclxuICAgIHRoaXMuZmxhZ3MudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5mbGFncy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVHlwb2xvZ2llc0NoYW5nZShpZHM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdXBkYXRpbmdGb3JtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudHlwb2xvZ2llcy5zZXRWYWx1ZShpZHMpO1xyXG4gICAgdGhpcy50eXBvbG9naWVzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMudHlwb2xvZ2llcy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ29sb3JzQ2hhbmdlKGlkczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl91cGRhdGluZ0Zvcm0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb2xvcnMuc2V0VmFsdWUoaWRzKTtcclxuICAgIHRoaXMuY29sb3JzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29sb3JzLm1hcmtBc0RpcnR5KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25HaWxkaW5nc0NoYW5nZShpZHM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdXBkYXRpbmdGb3JtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZ2lsZGluZ3Muc2V0VmFsdWUoaWRzKTtcclxuICAgIHRoaXMuZ2lsZGluZ3MudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5naWxkaW5ncy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVGVjaG5pcXVlc0NoYW5nZShpZHM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdXBkYXRpbmdGb3JtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudGVjaG5pcXVlcy5zZXRWYWx1ZShpZHMpO1xyXG4gICAgdGhpcy50ZWNobmlxdWVzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMudGVjaG5pcXVlcy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVG9vbHNDaGFuZ2UoaWRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3VwZGF0aW5nRm9ybSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnRvb2xzLnNldFZhbHVlKGlkcyk7XHJcbiAgICB0aGlzLnRvb2xzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMudG9vbHMubWFya0FzRGlydHkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblBvc2l0aW9uc0NoYW5nZShpZHM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdXBkYXRpbmdGb3JtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucG9zaXRpb25zLnNldFZhbHVlKGlkcyk7XHJcbiAgICB0aGlzLnBvc2l0aW9ucy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLnBvc2l0aW9ucy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIHR5cGVJZFRvU3RyaW5nKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIC8vICAgY29uc3QgZW50cnkgPSB0aGlzLmRlY0VsZW1UeXBlRW50cmllcz8uZmluZCgoZSkgPT4gZS5pZCA9PT0gaWQpO1xyXG4gIC8vICAgcmV0dXJuIGVudHJ5ID8gZW50cnkudmFsdWUgOiBpZDtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRvckNsb3NlLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldEVsZW1lbnQoKTtcclxuICAgIHRoaXMuZWxlbWVudENoYW5nZS5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cInNhdmUoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0eXBlLWhlYWRcIj5cclxuICAgIHt7IHR5cGUudmFsdWUgfCBmbGF0TG9va3VwIDogZGVjRWxlbVR5cGVFbnRyaWVzIDogXCJpZFwiIDogXCJ2YWx1ZVwiIH19XHJcbiAgPC9kaXY+XHJcbiAgPG1hdC10YWItZ3JvdXAgKHNlbGVjdGVkSW5kZXhDaGFuZ2UpPVwib25UYWJJbmRleENoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgPCEtLSBHRU5FUkFMIC0tPlxyXG4gICAgPG1hdC10YWIgbGFiZWw9XCJnZW5lcmFsXCI+XHJcbiAgICAgIDwhLS0gdHlwZSAoYm91bmQpIC0tPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICAqbmdJZj1cImRlY0VsZW1UeXBlRW50cmllcz8ubGVuZ3RoXCJcclxuICAgICAgICBzdHlsZT1cIndpZHRoOiAxNGVtXCJcclxuICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWxhYmVsPnR5cGU8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwidHlwZVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGUgb2YgZGVjRWxlbVR5cGVFbnRyaWVzXCIgW3ZhbHVlXT1cImUuaWRcIj57e1xyXG4gICAgICAgICAgICBlLnZhbHVlXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgKm5nSWY9XCIkYW55KHR5cGUpLmVycm9ycz8ucmVxdWlyZWQgJiYgKHR5cGUuZGlydHkgfHwgdHlwZS50b3VjaGVkKVwiXHJcbiAgICAgICAgICA+dHlwZSByZXF1aXJlZDwvbWF0LWVycm9yXHJcbiAgICAgICAgPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAmbmJzcDtcclxuICAgICAgPCEtLSBpbnN0YW5jZUNvdW50IC0tPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDogNmVtXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5jb3VudDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwiaW5zdGFuY2VDb3VudFwiIHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCIgLz5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgIDwhLS0gcmFuZ2VzIC0tPlxyXG4gICAgICA8Y2FkbXVzLWNvZC1sb2NhdGlvblxyXG4gICAgICAgIGxhYmVsPVwicmFuZ2VzXCJcclxuICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgW2xvY2F0aW9uXT1cImluaXRpYWxSYW5nZXMgfHwgbnVsbFwiXHJcbiAgICAgICAgKGxvY2F0aW9uQ2hhbmdlKT1cIm9uTG9jYXRpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgID48L2NhZG11cy1jb2QtbG9jYXRpb24+XHJcblxyXG4gICAgICA8IS0tIGZsYWdzIC0tPlxyXG4gICAgICA8ZmllbGRzZXQgKm5nSWY9XCJhdmFpbEZsYWdzPy5sZW5ndGhcIj5cclxuICAgICAgICA8bGVnZW5kPmZlYXR1cmVzPC9sZWdlbmQ+XHJcbiAgICAgICAgPGNhZG11cy11aS1mbGFncy1waWNrZXJcclxuICAgICAgICAgIFtmbGFnc109XCJhdmFpbEZsYWdzXCJcclxuICAgICAgICAgIFtzZWxlY3RlZElkc109XCJpbml0aWFsRmxhZ3NcIlxyXG4gICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uRmxhZ3NDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvY2FkbXVzLXVpLWZsYWdzLXBpY2tlcj5cclxuICAgICAgPC9maWVsZHNldD5cclxuXHJcbiAgICAgIDxiciAvPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDwhLS0ga2V5IC0tPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+a2V5PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cImtleVwiIC8+XHJcbiAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICpuZ0lmPVwiJGFueShrZXkpLmVycm9ycz8ucGF0dGVybiAmJiAoa2V5LmRpcnR5IHx8IGtleS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgID5pbnZhbGlkIGtleTwvbWF0LWVycm9yXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICpuZ0lmPVwiJGFueShrZXkpLmVycm9ycz8ubWF4TGVuZ3RoICYmIChrZXkuZGlydHkgfHwga2V5LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgPmtleSB0b28gbG9uZzwvbWF0LWVycm9yXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAmbmJzcDtcclxuICAgICAgICA8IS0tIHBhcmVudEtleSAtLT5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJwYXJlbnRLZXlzPy5sZW5ndGhcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+cGFyZW50IGtleTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInBhcmVudEtleVwiPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwibnVsbFwiPihub25lKTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGsgb2YgcGFyZW50S2V5c1wiIFt2YWx1ZV09XCJrXCI+e3tcclxuICAgICAgICAgICAgICBrXHJcbiAgICAgICAgICAgIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtdGFiPlxyXG5cclxuICAgIDwhLS0gVFlQT0xPR0lFUyAtLT5cclxuICAgIDxtYXQtdGFiIGxhYmVsPVwidHlwb2xvZ2llc1wiPlxyXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiA4cHhcIj5cclxuICAgICAgICA8IS0tIGxpbmVIZWlnaHQgLS0+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgICBzdHlsZT1cImZsZXg6IDAgMCBhdXRvOyB3aWR0aDogNGVtXCJcclxuICAgICAgICAgIFtoaWRkZW5dPVwiaGlkZGVuPy5saW5lSGVpZ2h0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPmxuLmg8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMFwiIFtmb3JtQ29udHJvbF09XCJsaW5lSGVpZ2h0XCIgLz5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwhLS0gdGV4dFJlbGF0aW9uIC0tPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgICAgW2hpZGRlbl09XCJoaWRkZW4/LnRleHRSZWxhdGlvblwiXHJcbiAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IDEgMCBhdXRvXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnRleHQgcmVsYXRpb248L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwidGV4dFJlbGF0aW9uXCIgLz5cclxuICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAkYW55KHRleHRSZWxhdGlvbikuZXJyb3JzPy5tYXhMZW5ndGggJiZcclxuICAgICAgICAgICAgICAodGV4dFJlbGF0aW9uLmRpcnR5IHx8IHRleHRSZWxhdGlvbi50b3VjaGVkKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+dGV4dCByZWxhdGlvbiB0b28gbG9uZzwvbWF0LWVycm9yXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gdHlwb2xvZ2llcyAtLT5cclxuICAgICAgPGZpZWxkc2V0IFtoaWRkZW5dPVwiIWF2YWlsVHlwb2xvZ2llcz8ubGVuZ3RoIHx8IGhpZGRlbj8udHlwb2xvZ2llc1wiPlxyXG4gICAgICAgIDxsZWdlbmQ+dHlwb2xvZ2llczwvbGVnZW5kPlxyXG4gICAgICAgIDxjYWRtdXMtdWktZmxhZ3MtcGlja2VyXHJcbiAgICAgICAgICBbZmxhZ3NdPVwiYXZhaWxUeXBvbG9naWVzXCJcclxuICAgICAgICAgIFtzZWxlY3RlZElkc109XCJpbml0aWFsVHlwb2xvZ2llc1wiXHJcbiAgICAgICAgICAoc2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25UeXBvbG9naWVzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgID48L2NhZG11cy11aS1mbGFncy1waWNrZXI+XHJcbiAgICAgIDwvZmllbGRzZXQ+XHJcblxyXG4gICAgICA8IS0tIHN1YmplY3QgLS0+XHJcbiAgICAgIDxkaXYgW2hpZGRlbl09XCJoaWRkZW4/LnN1YmplY3RcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnN1YmplY3Q8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwic3ViamVjdFwiIC8+XHJcbiAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgJGFueShzdWJqZWN0KS5lcnJvcnM/Lm1heExlbmd0aCAmJlxyXG4gICAgICAgICAgICAgIChzdWJqZWN0LmRpcnR5IHx8IHN1YmplY3QudG91Y2hlZClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPnN1YmplY3QgdG9vIGxvbmc8L21hdC1lcnJvclxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBjb2xvcnMgLS0+XHJcbiAgICAgIDxmaWVsZHNldCBbaGlkZGVuXT1cIiFhdmFpbENvbG9ycy5sZW5ndGggfHwgaGlkZGVuPy5jb2xvcnNcIj5cclxuICAgICAgICA8bGVnZW5kPmNvbG9yczwvbGVnZW5kPlxyXG4gICAgICAgIDxjYWRtdXMtdWktZmxhZ3MtcGlja2VyXHJcbiAgICAgICAgICBbZmxhZ3NdPVwiYXZhaWxDb2xvcnNcIlxyXG4gICAgICAgICAgW3NlbGVjdGVkSWRzXT1cImluaXRpYWxDb2xvcnNcIlxyXG4gICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uQ29sb3JzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgID48L2NhZG11cy11aS1mbGFncy1waWNrZXI+XHJcbiAgICAgIDwvZmllbGRzZXQ+XHJcblxyXG4gICAgICA8IS0tIGdpbGRpbmdzIC0tPlxyXG4gICAgICA8ZmllbGRzZXRcclxuICAgICAgICBbaGlkZGVuXT1cIlxyXG4gICAgICAgICAgKCFhdmFpbEdpbGRpbmdzLmxlbmd0aCAmJiAhZWxlbUdpbGRpbmdGcmVlKSB8fCBoaWRkZW4/LmdpbGRpbmdzXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxsZWdlbmQ+Z2lsZGluZ3M8L2xlZ2VuZD5cclxuICAgICAgICA8Y2FkbXVzLXVpLWZsYWdzLXBpY2tlclxyXG4gICAgICAgICAgW2ZsYWdzXT1cImF2YWlsR2lsZGluZ3NcIlxyXG4gICAgICAgICAgW2FsbG93VXNlckZsYWdzXT1cImVsZW1HaWxkaW5nRnJlZSB8fCBmYWxzZVwiXHJcbiAgICAgICAgICBbc2VsZWN0ZWRJZHNdPVwiaW5pdGlhbEdpbGRpbmdzXCJcclxuICAgICAgICAgIChzZWxlY3RlZElkc0NoYW5nZSk9XCJvbkdpbGRpbmdzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgID48L2NhZG11cy11aS1mbGFncy1waWNrZXI+XHJcbiAgICAgIDwvZmllbGRzZXQ+XHJcblxyXG4gICAgICA8IS0tIHRlY2huaXF1ZXMgLS0+XHJcbiAgICAgIDxmaWVsZHNldFxyXG4gICAgICAgIFtoaWRkZW5dPVwiXHJcbiAgICAgICAgICAoIWF2YWlsVGVjaG5pcXVlcy5sZW5ndGggJiYgIWVsZW1UZWNobmlxdWVGcmVlKSB8fCBoaWRkZW4/LnRlY2huaXF1ZXNcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGxlZ2VuZD50ZWNobmlxdWVzPC9sZWdlbmQ+XHJcbiAgICAgICAgPGNhZG11cy11aS1mbGFncy1waWNrZXJcclxuICAgICAgICAgIFtmbGFnc109XCJhdmFpbFRlY2huaXF1ZXNcIlxyXG4gICAgICAgICAgW2FsbG93VXNlckZsYWdzXT1cImVsZW1UZWNobmlxdWVGcmVlIHx8IGZhbHNlXCJcclxuICAgICAgICAgIFtzZWxlY3RlZElkc109XCJpbml0aWFsVGVjaG5pcXVlc1wiXHJcbiAgICAgICAgICAoc2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25UZWNobmlxdWVzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgID48L2NhZG11cy11aS1mbGFncy1waWNrZXI+XHJcbiAgICAgIDwvZmllbGRzZXQ+XHJcblxyXG4gICAgICA8IS0tIHRvb2xzIC0tPlxyXG4gICAgICA8ZmllbGRzZXRcclxuICAgICAgICBbaGlkZGVuXT1cIighYXZhaWxUb29scy5sZW5ndGggJiYgIWVsZW1Ub29sRnJlZSkgfHwgaGlkZGVuPy50b29sc1wiXHJcbiAgICAgID5cclxuICAgICAgICA8bGVnZW5kPnRvb2xzPC9sZWdlbmQ+XHJcbiAgICAgICAgPGNhZG11cy11aS1mbGFncy1waWNrZXJcclxuICAgICAgICAgIFtmbGFnc109XCJhdmFpbFRvb2xzXCJcclxuICAgICAgICAgIFthbGxvd1VzZXJGbGFnc109XCJlbGVtVG9vbEZyZWUgfHwgZmFsc2VcIlxyXG4gICAgICAgICAgW3NlbGVjdGVkSWRzXT1cImluaXRpYWxUb29sc1wiXHJcbiAgICAgICAgICAoc2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25Ub29sc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICA+PC9jYWRtdXMtdWktZmxhZ3MtcGlja2VyPlxyXG4gICAgICA8L2ZpZWxkc2V0PlxyXG5cclxuICAgICAgPCEtLSBwb3NpdGlvbnMgLS0+XHJcbiAgICAgIDxmaWVsZHNldFxyXG4gICAgICAgIFtoaWRkZW5dPVwiXHJcbiAgICAgICAgICAoIWF2YWlsUG9zaXRpb25zLmxlbmd0aCAmJiAhZWxlbVBvc2l0aW9uRnJlZSkgfHwgaGlkZGVuPy5wb3NpdGlvbnNcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGxlZ2VuZD5wb3NpdGlvbnM8L2xlZ2VuZD5cclxuICAgICAgICA8Y2FkbXVzLXVpLWZsYWdzLXBpY2tlclxyXG4gICAgICAgICAgW2ZsYWdzXT1cImF2YWlsUG9zaXRpb25zXCJcclxuICAgICAgICAgIFthbGxvd1VzZXJGbGFnc109XCJlbGVtUG9zaXRpb25GcmVlIHx8IGZhbHNlXCJcclxuICAgICAgICAgIFtzZWxlY3RlZElkc109XCJpbml0aWFsUG9zaXRpb25zXCJcclxuICAgICAgICAgIChzZWxlY3RlZElkc0NoYW5nZSk9XCJvblBvc2l0aW9uc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICA+PC9jYWRtdXMtdWktZmxhZ3MtcGlja2VyPlxyXG4gICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgPC9tYXQtdGFiPlxyXG5cclxuICAgIDwhLS0gREVTQ1JJUFRJT04gLS0+XHJcbiAgICA8bWF0LXRhYiBsYWJlbD1cImRlc2NyaXB0aW9uXCI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPG5neC1tb25hY28tZWRpdG9yXHJcbiAgICAgICAgICAjZHNjZWRpdG9yXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJlZGl0b3JPcHRpb25zXCJcclxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgPjwvbmd4LW1vbmFjby1lZGl0b3I+XHJcbiAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgJGFueShkZXNjcmlwdGlvbikuZXJyb3JzPy5tYXhMZW5ndGggJiZcclxuICAgICAgICAgICAgKGRlc2NyaXB0aW9uLnRvdWNoZWQgfHwgZGVzY3JpcHRpb24uZGlydHkpXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgPmRlc2NyaXB0aW9uIHRvbyBsb25nPC9tYXQtZXJyb3JcclxuICAgICAgICA+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDwhLS0gaW1hZ2VzIC0tPlxyXG4gICAgICAgIDxjYWRtdXMtY29kLWltYWdlc1xyXG4gICAgICAgICAgW3R5cGVFbnRyaWVzXT1cImltZ1R5cGVFbnRyaWVzXCJcclxuICAgICAgICAgIFtpbWFnZXNdPVwiaW5pdGlhbEltYWdlc1wiXHJcbiAgICAgICAgICAoaW1hZ2VzQ2hhbmdlKT1cIm9uSW1hZ2VzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgID48L2NhZG11cy1jb2QtaW1hZ2VzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8IS0tIG5vdGUgLS0+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibG9uZy10ZXh0XCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPm5vdGU8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPVwiMlwiIG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJub3RlXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgKm5nSWY9XCIkYW55KG5vdGUpLmVycm9ycz8ubWF4TGVuZ3RoICYmIChub3RlLmRpcnR5IHx8IG5vdGUudG91Y2hlZClcIlxyXG4gICAgICAgICAgICA+bm90ZSB0b28gbG9uZzwvbWF0LWVycm9yXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10YWI+XHJcbiAgPC9tYXQtdGFiLWdyb3VwPlxyXG5cclxuICA8IS0tIGJ1dHRvbnMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cInRvb2xiYXItcm93XCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgbWF0VG9vbHRpcD1cIkRpc2NhcmQgZWxlbWVudCBjaGFuZ2VzXCJcclxuICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICB0eXBlPVwic3VibWl0XCJcclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIG1hdFRvb2x0aXA9XCJBY2NlcHQgZWxlbWVudCBjaGFuZ2VzXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZCB8fCBmb3JtLnByaXN0aW5lXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+IGVsZW1lbnRcclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogOHB4XCI+ZWxlbWVudDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPlxyXG4iXX0=
|
|
469
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLWRlY29yYXRpb24tZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJtaWRvbi9jYWRtdXMtcGFydC1jb2RpY29sb2d5LWRlY29yYXRpb25zL3NyYy9saWIvY29kLWRlY29yYXRpb24tZWxlbWVudC9jb2QtZGVjb3JhdGlvbi1lbGVtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2NhZG11cy1wYXJ0LWNvZGljb2xvZ3ktZGVjb3JhdGlvbnMvc3JjL2xpYi9jb2QtZGVjb3JhdGlvbi1lbGVtZW50L2NvZC1kZWNvcmF0aW9uLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlMLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBS3hCLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOEIxRCxNQUFNLE9BQU8sNkJBQTZCO0lBZ014QyxZQUFZLFdBQXdCO1FBbkw3QixrQkFBYSxHQUFHO1lBQ3JCLEtBQUssRUFBRSxVQUFVO1lBQ2pCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsMERBQTBEO1lBQzFELGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUM7UUE4S0EsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUM5RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEs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UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7MEhBaGxCVSw2QkFBNkI7OEdBQTdCLDZCQUE2Qix3dEJDaEQxQyxtdlJBb1FBOzJGRHBOYSw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0UsK0JBQStCO2tHQWdCRSxTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBVTlCLE9BQU87c0JBRGpCLEtBQUs7Z0JBVUMsVUFBVTtzQkFEaEIsS0FBSztnQkFJQyxhQUFhO3NCQURuQixNQUFNO2dCQUdBLFdBQVc7c0JBRGpCLE1BQU07Z0JBaURBLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFJQyxvQkFBb0I7c0JBRDFCLEtBQUs7Z0JBS0ssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQVlLLG1CQUFtQjtzQkFEN0IsS0FBSztnQkFZSyxxQkFBcUI7c0JBRC9CLEtBQUs7Z0JBWUssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQWVLLGlCQUFpQjtzQkFEM0IsS0FBSztnQkFZSyxrQkFBa0I7c0JBRDVCLEtBQUs7Z0JBWUssbUJBQW1CO3NCQUQ3QixLQUFLO2dCQVlDLGNBQWM7c0JBRHBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgRm9ybUJ1aWxkZXIsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb2RMb2NhdGlvblJhbmdlIH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1jb2QtbG9jYXRpb24nO1xyXG5pbXBvcnQgeyBDb2RJbWFnZSB9IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtY29kaWNvbG9neS11aSc7XHJcbmltcG9ydCB7IFRoZXNhdXJ1c0VudHJ5IH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1jb3JlJztcclxuaW1wb3J0IHsgRmxhZyB9IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtdWktZmxhZ3MtcGlja2VyJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgQ29kRGVjb3JhdGlvbkVsZW1lbnQgfSBmcm9tICcuLi9jb2QtZGVjb3JhdGlvbnMtcGFydCc7XHJcblxyXG4vKipcclxuICogTGlzdCBvZiBoaWRkZW4gZmllbGRzIGluIGRlY29yYXRpb24gZWxlbWVudCBjb21wb25lbnQuXHJcbiAqIFRoaXMgaXMgc2V0IGJ5IGV4YW1pbmluZyB0aGUgdmFsdWVzIG9mIHRoZSB0aGVzYXVydXNcclxuICogbmFtZWQgXCJjb2QtZGVjb3JhdGlvbi10eXBlLWhpZGRlblwiIGhhdmluZyBhcyBrZXkgdGhlXHJcbiAqIGVsZW1lbnQgdHlwZSBJRCAoZS5nLiBcInBhZy1pbmNcIiksIGFuZCBhcyB2YWx1ZSBhIHNwYWNlXHJcbiAqIGRlbGltaXRlZCBsaXN0IG9mIGZpZWxkIG5hbWVzLiBFYWNoIG9mIHRoZXNlIGZpZWxkIG5hbWVzXHJcbiAqIGNvcnJlc3BvbmRzIHRvIGEgcHJvcGVydHkgb2YgdGhpcyBvYmplY3QuXHJcbiAqL1xyXG5pbnRlcmZhY2UgSGlkZGVuRGVjRWxlbUZpZWxkcyB7XHJcbiAgZmxhZ3M/OiBib29sZWFuO1xyXG4gIHR5cG9sb2dpZXM/OiBib29sZWFuO1xyXG4gIHN1YmplY3Q/OiBib29sZWFuO1xyXG4gIGNvbG9ycz86IGJvb2xlYW47XHJcbiAgZ2lsZGluZ3M/OiBib29sZWFuO1xyXG4gIHRlY2huaXF1ZXM/OiBib29sZWFuO1xyXG4gIHRvb2xzPzogYm9vbGVhbjtcclxuICBwb3NpdGlvbnM/OiBib29sZWFuO1xyXG4gIGxpbmVIZWlnaHQ/OiBib29sZWFuO1xyXG4gIHRleHRSZWxhdGlvbj86IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2FkbXVzLWNvZC1kZWNvcmF0aW9uLWVsZW1lbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2QtZGVjb3JhdGlvbi1lbGVtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb2QtZGVjb3JhdGlvbi1lbGVtZW50LmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvZERlY29yYXRpb25FbGVtZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcml2YXRlIF9lbGVtZW50OiBDb2REZWNvcmF0aW9uRWxlbWVudCB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9lbGVtRmxhZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfZWxlbUNvbG9yRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9lbGVtR2lsZGluZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfZWxlbVRlY2hFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2VsZW1Qb3NFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2VsZW1Ub29sRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9lbGVtVHlwb2xFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX3VwZGF0aW5nRm9ybT86IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfYWRqdXN0aW5nVUk/OiBib29sZWFuO1xyXG5cclxuICBAVmlld0NoaWxkKCdkc2NlZGl0b3InLCB7IHN0YXRpYzogZmFsc2UgfSkgZHNjRWRpdG9yOiBhbnk7XHJcbiAgcHVibGljIGVkaXRvck9wdGlvbnMgPSB7XHJcbiAgICB0aGVtZTogJ3ZzLWxpZ2h0JyxcclxuICAgIGxhbmd1YWdlOiAnbWFya2Rvd24nLFxyXG4gICAgd29yZFdyYXA6ICdvbicsXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXR1bGFyZW4vbmd4LW1vbmFjby1lZGl0b3IvaXNzdWVzLzE5XHJcbiAgICBhdXRvbWF0aWNMYXlvdXQ6IHRydWUsXHJcbiAgfTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGVsZW1lbnQoKTogQ29kRGVjb3JhdGlvbkVsZW1lbnQgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZWxlbWVudCh2YWx1ZTogQ29kRGVjb3JhdGlvbkVsZW1lbnQgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2VsZW1lbnQgPSB2YWx1ZTtcclxuICAgIHRoaXMudXBkYXRlRm9ybSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBwYXJlbnRLZXlzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGVsZW1lbnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxDb2REZWNvcmF0aW9uRWxlbWVudD47XHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGVkaXRvckNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PjtcclxuXHJcbiAgLy8gZ2VuZXJhbFxyXG4gIHB1YmxpYyBrZXk6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyBwYXJlbnRLZXk6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyB0eXBlOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgZmxhZ3M6IEZvcm1Db250cm9sPHN0cmluZ1tdPjtcclxuICBwdWJsaWMgcmFuZ2VzOiBGb3JtQ29udHJvbDxDb2RMb2NhdGlvblJhbmdlW10+O1xyXG4gIHB1YmxpYyBpbnN0YW5jZUNvdW50OiBGb3JtQ29udHJvbDxudW1iZXI+O1xyXG4gIC8vIHR5cG9sb2dpZXNcclxuICBwdWJsaWMgdHlwb2xvZ2llczogRm9ybUNvbnRyb2w8c3RyaW5nW10+O1xyXG4gIHB1YmxpYyBzdWJqZWN0OiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgY29sb3JzOiBGb3JtQ29udHJvbDxzdHJpbmdbXT47XHJcbiAgcHVibGljIGdpbGRpbmdzOiBGb3JtQ29udHJvbDxzdHJpbmdbXT47XHJcbiAgcHVibGljIHRlY2huaXF1ZXM6IEZvcm1Db250cm9sPHN0cmluZ1tdPjtcclxuICBwdWJsaWMgdG9vbHM6IEZvcm1Db250cm9sPHN0cmluZ1tdPjtcclxuICBwdWJsaWMgcG9zaXRpb25zOiBGb3JtQ29udHJvbDxzdHJpbmdbXT47XHJcbiAgcHVibGljIGxpbmVIZWlnaHQ6IEZvcm1Db250cm9sPG51bWJlcj47XHJcbiAgcHVibGljIHRleHRSZWxhdGlvbjogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgLy8gZGVzY3JpcHRpb25cclxuICBwdWJsaWMgZGVzY3JpcHRpb246IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyBpbWFnZXM6IEZvcm1Db250cm9sPENvZEltYWdlW10+O1xyXG4gIHB1YmxpYyBub3RlOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBwdWJsaWMgaW5pdGlhbFJhbmdlczogQ29kTG9jYXRpb25SYW5nZVtdO1xyXG4gIHB1YmxpYyBpbml0aWFsSW1hZ2VzOiBDb2RJbWFnZVtdO1xyXG4gIC8vIGZsYWdzXHJcbiAgcHVibGljIGluaXRpYWxGbGFnczogc3RyaW5nW107XHJcbiAgcHVibGljIGluaXRpYWxUeXBvbG9naWVzOiBzdHJpbmdbXTtcclxuICBwdWJsaWMgaW5pdGlhbENvbG9yczogc3RyaW5nW107XHJcbiAgcHVibGljIGluaXRpYWxHaWxkaW5nczogc3RyaW5nW107XHJcbiAgcHVibGljIGluaXRpYWxUZWNobmlxdWVzOiBzdHJpbmdbXTtcclxuICBwdWJsaWMgaW5pdGlhbFRvb2xzOiBzdHJpbmdbXTtcclxuICBwdWJsaWMgaW5pdGlhbFBvc2l0aW9uczogc3RyaW5nW107XHJcblxyXG4gIHB1YmxpYyBhdmFpbEZsYWdzOiBGbGFnW107XHJcbiAgcHVibGljIGF2YWlsVHlwb2xvZ2llczogRmxhZ1tdO1xyXG4gIHB1YmxpYyBhdmFpbENvbG9yczogRmxhZ1tdO1xyXG4gIHB1YmxpYyBhdmFpbEdpbGRpbmdzOiBGbGFnW107XHJcbiAgcHVibGljIGF2YWlsVGVjaG5pcXVlczogRmxhZ1tdO1xyXG4gIHB1YmxpYyBhdmFpbFRvb2xzOiBGbGFnW107XHJcbiAgcHVibGljIGF2YWlsUG9zaXRpb25zOiBGbGFnW107XHJcblxyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtdHlwZXMgKHJlcXVpcmVkKS4gQWxsIHRoZSBvdGhlciB0aGVzYXVyaVxyXG4gIC8vIChleGNlcHQgZGVjVHlwZUhpZGRlbkVudHJpZXMpIGhhdmUgdGhlaXIgZW50cmllcyBmaWx0ZXJlZFxyXG4gIC8vIGJ5IHRoZSB2YWx1ZSBzZWxlY3RlZCBmcm9tIHRoaXMgdGhlc2F1cnVzLlxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRlY0VsZW1UeXBlRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuICAvLyBjb2QtZGVjb3JhdGlvbi10eXBlLWhpZGRlblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRlY1R5cGVIaWRkZW5FbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvLyBjb2QtZGVjb3JhdGlvbi1lbGVtZW50LWZsYWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGRlY0VsZW1GbGFnRW50cmllcygpOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9lbGVtRmxhZ0VudHJpZXM7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZGVjRWxlbUZsYWdFbnRyaWVzKHZhbHVlOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9lbGVtRmxhZ0VudHJpZXMgPSB2YWx1ZTtcclxuICAgIHRoaXMuZWxlbUZsYWdFbnRyaWVzID0gdGhpcy5nZXRGaWx0ZXJlZEVudHJpZXModmFsdWUsIHRoaXMudHlwZT8udmFsdWUpO1xyXG4gICAgdGhpcy5hdmFpbEZsYWdzID0gdGhpcy5nZXRBdmFpbGFibGVGbGFncyh0aGlzLmVsZW1GbGFnRW50cmllcyk7XHJcbiAgfVxyXG5cclxuICAvLyBjb2QtZGVjb3JhdGlvbi1lbGVtZW50LWNvbG9yc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBkZWNFbGVtQ29sb3JFbnRyaWVzKCk6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1Db2xvckVudHJpZXM7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZGVjRWxlbUNvbG9yRW50cmllcyh2YWx1ZTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fZWxlbUNvbG9yRW50cmllcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5lbGVtQ29sb3JFbnRyaWVzID0gdGhpcy5nZXRGaWx0ZXJlZEVudHJpZXModmFsdWUsIHRoaXMudHlwZT8udmFsdWUpO1xyXG4gICAgdGhpcy5hdmFpbENvbG9ycyA9IHRoaXMuZ2V0QXZhaWxhYmxlRmxhZ3ModGhpcy5lbGVtQ29sb3JFbnRyaWVzKTtcclxuICB9XHJcblxyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtZ2lsZGluZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgZGVjRWxlbUdpbGRpbmdFbnRyaWVzKCk6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1HaWxkaW5nRW50cmllcztcclxuICB9XHJcbiAgcHVibGljIHNldCBkZWNFbGVtR2lsZGluZ0VudHJpZXModmFsdWU6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2VsZW1HaWxkaW5nRW50cmllcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5lbGVtR2lsZGluZ0VudHJpZXMgPSB0aGlzLmdldEZpbHRlcmVkRW50cmllcyh2YWx1ZSwgdGhpcy50eXBlPy52YWx1ZSk7XHJcbiAgICB0aGlzLmF2YWlsR2lsZGluZ3MgPSB0aGlzLmdldEF2YWlsYWJsZUZsYWdzKHRoaXMuZWxlbUdpbGRpbmdFbnRyaWVzKTtcclxuICB9XHJcblxyXG4gIC8vIGNvZC1kZWNvcmF0aW9uLWVsZW1lbnQtdGVjaG5pcXVlc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBkZWNFbGVtVGVjaEVudHJpZXMoKTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWxlbVRlY2hFbnRyaWVzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGRlY0VsZW1UZWNoRW50cmllcyh2YWx1ZTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fZWxlbVRlY2hFbnRyaWVzID0gdmFsdWU7XHJcbiAgICB0aGlzLmVsZW1UZWNobmlxdWVFbnRyaWVzID0gdGhpcy5nZXRGaWx0ZXJlZEVudHJpZXMoXHJcbiAgICAgIHZhbHVlLFxyXG4gICAgICB0aGlzLnR5cGU/LnZhbHVlXHJcbiAgICApO1xyXG4gICAgdGhpcy5hdmFpbFRlY2huaXF1ZXMgPSB0aGlzLmdldEF2YWlsYWJsZUZsYWdzKHRoaXMuZWxlbVRlY2huaXF1ZUVudHJpZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gY29kLWRlY29yYXRpb24tZWxlbWVudC1wb3NpdGlvbnNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgZGVjRWxlbVBvc0VudHJpZXMoKTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWxlbVBvc0VudHJpZXM7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZGVjRWxlbVBvc0VudHJpZXModmFsdWU6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2VsZW1Qb3NFbnRyaWVzID0gdmFsdWU7XHJcbiAgICB0aGlzLmVsZW1Qb3NpdGlvbkVudHJpZXMgPSB0aGlzLmdldEZpbHRlcmVkRW50cmllcyh2YWx1ZSwgdGhpcy50eXBlPy52YWx1ZSk7XHJcbiAgICB0aGlzLmF2YWlsUG9zaXRpb25zID0gdGhpcy5nZXRBdmFpbGFibGVGbGFncyh0aGlzLmVsZW1Qb3NpdGlvbkVudHJpZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gY29kLWRlY29yYXRpb24tZWxlbWVudC10b29sc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBkZWNFbGVtVG9vbEVudHJpZXMoKTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWxlbVRvb2xFbnRyaWVzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGRlY0VsZW1Ub29sRW50cmllcyh2YWx1ZTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fZWxlbVRvb2xFbnRyaWVzID0gdmFsdWU7XHJcbiAgICB0aGlzLmVsZW1Ub29sRW50cmllcyA9IHRoaXMuZ2V0RmlsdGVyZWRFbnRyaWVzKHZhbHVlLCB0aGlzLnR5cGU/LnZhbHVlKTtcclxuICAgIHRoaXMuYXZhaWxUb29scyA9IHRoaXMuZ2V0QXZhaWxhYmxlRmxhZ3ModGhpcy5lbGVtVG9vbEVudHJpZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gY29kLWRlY29yYXRpb24tZWxlbWVudC10eXBvbG9naWVzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGRlY0VsZW1UeXBvbEVudHJpZXMoKTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWxlbVR5cG9sRW50cmllcztcclxuICB9XHJcbiAgcHVibGljIHNldCBkZWNFbGVtVHlwb2xFbnRyaWVzKHZhbHVlOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9lbGVtVHlwb2xFbnRyaWVzID0gdmFsdWU7XHJcbiAgICB0aGlzLmVsZW1UeXBvbEVudHJpZXMgPSB0aGlzLmdldEZpbHRlcmVkRW50cmllcyh2YWx1ZSwgdGhpcy50eXBlPy52YWx1ZSk7XHJcbiAgICB0aGlzLmF2YWlsVHlwb2xvZ2llcyA9IHRoaXMuZ2V0QXZhaWxhYmxlRmxhZ3ModGhpcy5lbGVtVHlwb2xFbnRyaWVzKTtcclxuICB9XHJcblxyXG4gIC8vIGNvZC1pbWFnZS10eXBlc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGltZ1R5cGVFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvLyB0aGUgZmlsdGVyZWQgZW50cmllczpcclxuICBwdWJsaWMgZWxlbUZsYWdFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBlbGVtQ29sb3JFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBlbGVtR2lsZGluZ0VudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIGVsZW1UZWNobmlxdWVFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBlbGVtUG9zaXRpb25FbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBlbGVtVG9vbEVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIGVsZW1UeXBvbEVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyBlbGVtR2lsZGluZ0ZyZWU/OiBib29sZWFuO1xyXG4gIHB1YmxpYyBlbGVtVGVjaG5pcXVlRnJlZT86IGJvb2xlYW47XHJcbiAgcHVibGljIGVsZW1Qb3NpdGlvbkZyZWU/OiBib29sZWFuO1xyXG4gIHB1YmxpYyBlbGVtVG9vbEZyZWU/OiBib29sZWFuO1xyXG5cclxuICAvLyB0aGlzIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBmb3IgZWFjaCBjb250cm9sXHJcbiAgLy8gdG8gYmUgaGlkZGVuLCBoYXZpbmcgdGhlIHNhbWUgbmFtZSBvZiB0aGUgY29udHJvbFxyXG4gIC8vIGFuZCB2YWx1ZT10cnVlLlxyXG4gIHB1YmxpYyBoaWRkZW4/OiBIaWRkZW5EZWNFbGVtRmllbGRzO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHRoaXMuZWxlbWVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29kRGVjb3JhdGlvbkVsZW1lbnQ+KCk7XHJcbiAgICB0aGlzLmVkaXRvckNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgdGhpcy5pbml0aWFsUmFuZ2VzID0gW107XHJcbiAgICB0aGlzLmluaXRpYWxJbWFnZXMgPSBbXTtcclxuICAgIC8vIGZsYWdzXHJcbiAgICB0aGlzLmluaXRpYWxGbGFncyA9IFtdO1xyXG4gICAgdGhpcy5pbml0aWFsVHlwb2xvZ2llcyA9IFtdO1xyXG4gICAgdGhpcy5pbml0aWFsQ29sb3JzID0gW107XHJcbiAgICB0aGlzLmluaXRpYWxHaWxkaW5ncyA9IFtdO1xyXG4gICAgdGhpcy5pbml0aWFsVGVjaG5pcXVlcyA9IFtdO1xyXG4gICAgdGhpcy5pbml0aWFsVG9vbHMgPSBbXTtcclxuICAgIHRoaXMuaW5pdGlhbFBvc2l0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5hdmFpbEZsYWdzID0gW107XHJcbiAgICB0aGlzLmF2YWlsVHlwb2xvZ2llcyA9IFtdO1xyXG4gICAgdGhpcy5hdmFpbENvbG9ycyA9IFtdO1xyXG4gICAgdGhpcy5hdmFpbEdpbGRpbmdzID0gW107XHJcbiAgICB0aGlzLmF2YWlsVGVjaG5pcXVlcyA9IFtdO1xyXG4gICAgdGhpcy5hdmFpbFRvb2xzID0gW107XHJcbiAgICB0aGlzLmF2YWlsUG9zaXRpb25zID0gW107XHJcblxyXG4gICAgLy8gZm9ybVxyXG4gICAgdGhpcy5rZXkgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFtcclxuICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWy1hLXpBLVowLTlfXSskJyksXHJcbiAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKSxcclxuICAgIF0pO1xyXG4gICAgdGhpcy5wYXJlbnRLZXkgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFtcclxuICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWy1hLXpBLVowLTlfXSskJyksXHJcbiAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKSxcclxuICAgIF0pO1xyXG4gICAgdGhpcy50eXBlID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBbXHJcbiAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKSxcclxuICAgIF0pO1xyXG4gICAgdGhpcy5mbGFncyA9IGZvcm1CdWlsZGVyLmNvbnRyb2woW10sIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLnJhbmdlcyA9IGZvcm1CdWlsZGVyLmNvbnRyb2woW10sIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLmluc3RhbmNlQ291bnQgPSBmb3JtQnVpbGRlci5jb250cm9sKDAsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLnR5cG9sb2dpZXMgPSBmb3JtQnVpbGRlci5jb250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5zdWJqZWN0ID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDApKTtcclxuICAgIHRoaXMuY29sb3JzID0gZm9ybUJ1aWxkZXIuY29udHJvbChbXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICAgIHRoaXMuZ2lsZGluZ3MgPSBmb3JtQnVpbGRlci5jb250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy50ZWNobmlxdWVzID0gZm9ybUJ1aWxkZXIuY29udHJvbChbXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICAgIHRoaXMudG9vbHMgPSBmb3JtQnVpbGRlci5jb250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBmb3JtQnVpbGRlci5jb250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5saW5lSGVpZ2h0ID0gZm9ybUJ1aWxkZXIuY29udHJvbCgwLCB7XHJcbiAgICAgIHZhbGlkYXRvcnM6IFZhbGlkYXRvcnMubWluKDApLFxyXG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy50ZXh0UmVsYXRpb24gPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCkpO1xyXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwMCkpO1xyXG4gICAgdGhpcy5pbWFnZXMgPSBmb3JtQnVpbGRlci5jb250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5ub3RlID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLm1heExlbmd0aCg1MDApKTtcclxuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAga2V5OiB0aGlzLmtleSxcclxuICAgICAgcGFyZW50S2V5OiB0aGlzLnBhcmVudEtleSxcclxuICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICBmbGFnczogdGhpcy5mbGFncyxcclxuICAgICAgaW5zdGFuY2VDb3VudDogdGhpcy5pbnN0YW5jZUNvdW50LFxyXG4gICAgICByYW5nZXM6IHRoaXMucmFuZ2VzLFxyXG4gICAgICB0eXBvbG9naWVzOiB0aGlzLnR5cG9sb2dpZXMsXHJcbiAgICAgIHN1YmplY3Q6IHRoaXMuc3ViamVjdCxcclxuICAgICAgY29sb3JzOiB0aGlzLmNvbG9ycyxcclxuICAgICAgZ2lsZGluZ3M6IHRoaXMuZ2lsZGluZ3MsXHJcbiAgICAgIHRlY2huaXF1ZXM6IHRoaXMudGVjaG5pcXVlcyxcclxuICAgICAgdG9vbHM6IHRoaXMudG9vbHMsXHJcbiAgICAgIHBvc2l0aW9uczogdGhpcy5wb3NpdGlvbnMsXHJcbiAgICAgIGxpbmVIZWlnaHQ6IHRoaXMubGluZUhlaWdodCxcclxuICAgICAgdGV4dFJlbGF0aW9uOiB0aGlzLnRleHRSZWxhdGlvbixcclxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXHJcbiAgICAgIGltYWdlczogdGhpcy5pbWFnZXMsXHJcbiAgICAgIG5vdGU6IHRoaXMubm90ZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBzcGVjaWZpZWQgdGhlc2F1cnVzIGVudHJpZXMgcmVwcmVzZW50IGEgZnJlZSBzZXQuXHJcbiAgICogVGhpcyBoYXBwZW5zIHdoZW4gd2UganVzdCBoYXZlIGEgc2luZ2xlIGVudHJ5IHdpdGggYSBzaW5nbGUgZG90XHJcbiAgICogZm9sbG93ZWQgYnkgXCItXCIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZW50cmllcyBUaGUgdGhlc2F1cnVzIGVudHJpZXMgdG8gdGVzdC5cclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBlbnRyaWVzIHJlcHJlc2VudCBhIGZyZWUgc2V0LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgaXNGcmVlU2V0KGVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuICAgIGlmIChlbnRyaWVzPy5sZW5ndGggIT09IDEpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdG9rZW5zID0gZW50cmllc1swXS5pZC5zcGxpdCgnLicpO1xyXG4gICAgcmV0dXJuIHRva2Vucy5sZW5ndGggPT09IDIgJiYgdG9rZW5zWzFdID09PSAnLSc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpbHRlcmVkRW50cmllcyhcclxuICAgIGVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W10gfCB1bmRlZmluZWQgfCBudWxsLFxyXG4gICAgcHJlZml4OiBzdHJpbmcgfCBudWxsXHJcbiAgKTogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXByZWZpeCB8fCAhZW50cmllcz8uc29tZSgoZSkgPT4gZS5pZC5pbmRleE9mKCcuJykgPiAtMSkpIHtcclxuICAgICAgcmV0dXJuIGVudHJpZXMgfHwgdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcCA9IHByZWZpeCArICcuJztcclxuICAgIHJldHVybiBlbnRyaWVzLmZpbHRlcigoZSkgPT4gZS5pZC5zdGFydHNXaXRoKHApKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QXZhaWxhYmxlRmxhZ3MoZW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZCk6IEZsYWdbXSB7XHJcbiAgICByZXR1cm4gZW50cmllcz8ubGVuZ3RoXHJcbiAgICAgID8gZW50cmllc1xyXG4gICAgICAgICAgLmZpbHRlcigoZSkgPT4gZS52YWx1ZT8ubGVuZ3RoKVxyXG4gICAgICAgICAgLm1hcCgoZSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGlkOiBlLmlkLFxyXG4gICAgICAgICAgICAgIGxhYmVsOiBlLnZhbHVlLFxyXG4gICAgICAgICAgICB9IGFzIEZsYWc7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICA6IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmlsaXR5KCk6IHZvaWQge1xyXG4gICAgY29uc3QgaGlkZGVuOiBhbnkgPSB7fTtcclxuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5kZWNUeXBlSGlkZGVuRW50cmllcz8uZmluZChcclxuICAgICAgKGUpID0+IGUuaWQgPT09IHRoaXMudHlwZS52YWx1ZVxyXG4gICAgKTtcclxuICAgIGlmIChlbnRyeSkge1xyXG4gICAgICBjb25zdCBuYW1lcyA9IGVudHJ5LnZhbHVlLnNwbGl0KCcgJykuZmlsdGVyKChzKSA9PiBzKTtcclxuICAgICAgbmFtZXMuZm9yRWFjaCgobikgPT4ge1xyXG4gICAgICAgIGhpZGRlbltuXSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oaWRkZW4gPSBoaWRkZW47XHJcbiAgICBjb25zb2xlLmxvZygnaGlkZGVuOiAnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5oaWRkZW4pKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRhYkluZGV4Q2hhbmdlZCgwKTtcclxuXHJcbiAgICB0aGlzLmFkanVzdFVJKCk7XHJcblxyXG4gICAgdGhpcy50eXBlLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBkZWJvdW5jZVRpbWUoMzAwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl91cGRhdGluZ0Zvcm0pIHtcclxuICAgICAgICAgIHRoaXMuYWRqdXN0VUkoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGp1c3RVSSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9hZGp1c3RpbmdVSSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9hZGp1c3RpbmdVSSA9IHRydWU7XHJcbiAgICBjb25zb2xlLmxvZygnYWRqdXN0VUkgZW50ZXInKTtcclxuICAgIC8vIHJlc2V0IHR5cGUtZGVwZW5kZW50IHZhbHVlc1xyXG4gICAgdGhpcy5mbGFncy5yZXNldCgpO1xyXG4gICAgdGhpcy50eXBvbG9naWVzLnJlc2V0KCk7XHJcbiAgICB0aGlzLnN1YmplY3QucmVzZXQoKTtcclxuICAgIHRoaXMuaW5pdGlhbENvbG9ycyA9IFtdO1xyXG4gICAgdGhpcy5pbml0aWFsR2lsZGluZ3MgPSBbXTtcclxuICAgIHRoaXMuaW5pdGlhbFRlY2huaXF1ZXMgPSBbXTtcclxuICAgIHRoaXMuaW5pdGlhbFRvb2xzID0gW107XHJcbiAgICB0aGlzLmluaXRpYWxQb3NpdGlvbnMgPSBbXTtcclxuICAgIHRoaXMubGluZUhlaWdodC5yZXNldCgpO1xyXG4gICAgdGhpcy50ZXh0UmVsYXRpb24ucmVzZXQoKTtcclxuXHJcbiAgICAvLyBmaWx0ZXIgZW50cmllcyBmb3IgbXVsdGlwbGUtc2VsZWN0aW9uc1xyXG4gICAgdGhpcy5lbGVtRmxhZ0VudHJpZXMgPSB0aGlzLmdldEZpbHRlcmVkRW50cmllcyhcclxuICAgICAgdGhpcy5fZWxlbUZsYWdFbnRyaWVzLFxyXG4gICAgICB0aGlzLnR5cGU/LnZhbHVlXHJcbiAgICApO1xyXG4gICAgdGhpcy5hdmFpbEZsYWdzID0gdGhpcy5nZXRBdmFpbGFibGVGbGFncyh0aGlzLmVsZW1GbGFnRW50cmllcyk7XHJcblxyXG4gICAgdGhpcy5lbGVtQ29sb3JFbnRyaWVzID0gdGhpcy5nZXRGaWx0ZXJlZEVudHJpZXMoXHJcbiAgICAgIHRoaXMuX2VsZW1Db2xvckVudHJpZXMsXHJcbiAgICAgIHRoaXMudHlwZT8udmFsdWVcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWlsQ29sb3JzID0gdGhpcy5nZXRBdmFpbGFibGVGbGFncyh0aGlzLmVsZW1Db2xvckVudHJpZXMpO1xyXG5cclxuICAgIC8vIGZpbHRlciBlbnRyaWVzIGFuZCBzZXQgZnJlZSBmb3Igc2luZ2xlLXNlbGVjdGlvbnNcclxuICAgIHRoaXMuZWxlbUdpbGRpbmdFbnRyaWVzID0gdGhpcy5nZXRGaWx0ZXJlZEVudHJpZXMoXHJcbiAgICAgIHRoaXMuX2VsZW1HaWxkaW5nRW50cmllcyxcclxuICAgICAgdGhpcy50eXBlPy52YWx1ZVxyXG4gICAgKTtcclxuICAgIHRoaXMuYXZhaWxHaWxkaW5ncyA9IHRoaXMuZ2V0QXZhaWxhYmxlRmxhZ3ModGhpcy5lbGVtR2lsZGluZ0VudHJpZXMpO1xyXG4gICAgdGhpcy5lbGVtR2lsZGluZ0ZyZWUgPSB0aGlzLmlzRnJlZVNldCh0aGlzLmVsZW1HaWxkaW5nRW50cmllcyk7XHJcblxyXG4gICAgdGhpcy5lbGVtVGVjaG5pcXVlRW50cmllcyA9IHRoaXMuZ2V0RmlsdGVyZWRFbnRyaWVzKFxyXG4gICAgICB0aGlzLl9lbGVtVGVjaEVudHJpZXMsXHJcbiAgICAgIHRoaXMudHlwZT8udmFsdWVcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWlsVGVjaG5pcXVlcyA9IHRoaXMuZ2V0QXZhaWxhYmxlRmxhZ3ModGhpcy5lbGVtVGVjaG5pcXVlRW50cmllcyk7XHJcbiAgICB0aGlzLmVsZW1UZWNobmlxdWVGcmVlID0gdGhpcy5pc0ZyZWVTZXQodGhpcy5lbGVtVGVjaG5pcXVlRW50cmllcyk7XHJcblxyXG4gICAgdGhpcy5lbGVtUG9zaXRpb25FbnRyaWVzID0gdGhpcy5nZXRGaWx0ZXJlZEVudHJpZXMoXHJcbiAgICAgIHRoaXMuX2VsZW1Qb3NFbnRyaWVzLFxyXG4gICAgICB0aGlzLnR5cGU/LnZhbHVlXHJcbiAgICApO1xyXG4gICAgdGhpcy5hdmFpbFBvc2l0aW9ucyA9IHRoaXMuZ2V0QXZhaWxhYmxlRmxhZ3ModGhpcy5lbGVtUG9zaXRpb25FbnRyaWVzKTtcclxuICAgIHRoaXMuZWxlbVBvc2l0aW9uRnJlZSA9IHRoaXMuaXNGcmVlU2V0KHRoaXMuZWxlbVBvc2l0aW9uRW50cmllcyk7XHJcblxyXG4gICAgdGhpcy5lbGVtVG9vbEVudHJpZXMgPSB0aGlzLmdldEZpbHRlcmVkRW50cmllcyhcclxuICAgICAgdGhpcy5fZWxlbVRvb2xFbnRyaWVzLFxyXG4gICAgICB0aGlzLnR5cGU/LnZhbHVlXHJcbiAgICApO1xyXG4gICAgdGhpcy5hdmFpbFRvb2xzID0gdGhpcy5nZXRBdmFpbGFibGVGbGFncyh0aGlzLmVsZW1Ub29sRW50cmllcyk7XHJcbiAgICB0aGlzLmVsZW1Ub29sRnJlZSA9IHRoaXMuaXNGcmVlU2V0KHRoaXMuZWxlbVRvb2xFbnRyaWVzKTtcclxuXHJcbiAgICB0aGlzLmVsZW1UeXBvbEVudHJpZXMgPSB0aGlzLmdldEZpbHRlcmVkRW50cmllcyhcclxuICAgICAgdGhpcy5fZWxlbVR5cG9sRW50cmllcyxcclxuICAgICAgdGhpcy50eXBlPy52YWx1ZVxyXG4gICAgKTtcclxuICAgIHRoaXMuYXZhaWxUeXBvbG9naWVzID0gdGhpcy5nZXRBdmFpbGFibGVGbGFncyh0aGlzLmVsZW1UeXBvbEVudHJpZXMpO1xyXG5cclxuICAgIC8vIHZpc2liaWxpdHlcclxuICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eSgpO1xyXG4gICAgdGhpcy5fYWRqdXN0aW5nVUkgPSBmYWxzZTtcclxuICAgIGNvbnNvbGUubG9nKCdhZGp1c3RVSSBleGl0Jyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25UYWJJbmRleENoYW5nZWQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgLy8gSEFDS1xyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F0dWxhcmVuL25neC1tb25hY28tZWRpdG9yL2lzc3Vlcy8xOVxyXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzc0MTI5NTAvbmd4LW1vbmFjby1lZGl0b3ItdW5hYmxlLXRvLXNldC1sYXlvdXQtc2l6ZS13aGVuLWNvbnRhaW5lci1jaGFuZ2VzLXVzaW5nLXRhYlxyXG4gICAgaWYgKGluZGV4ID09PSAyKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZHNjRWRpdG9yPy5fZWRpdG9yPy5sYXlvdXQoKTtcclxuICAgICAgfSwgMTUwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybShlbGVtZW50OiBDb2REZWNvcmF0aW9uRWxlbWVudCB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdXBkYXRpbmdGb3JtID0gdHJ1ZTtcclxuICAgIGNvbnNvbGUubG9nKCd1cGRhdGVGb3JtIGVudGVyJyk7XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMuX3VwZGF0aW5nRm9ybSA9IGZhbHNlO1xyXG4gICAgICBjb25zb2xlLmxvZygndXBkYXRlRm9ybSBleGl0Jyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGdlbmVyYWxcclxuICAgIHRoaXMudHlwZS5zZXRWYWx1ZShlbGVtZW50LnR5cGUpO1xyXG4gICAgLy8gbGV0IHRoZSBVSSBhZGp1c3QgaXRzZWxmIGJlZm9yZSBzZXR0aW5nIHR5cGUtZGVwZW5kZW50IGNvbnRyb2xzXHJcbiAgICB0aGlzLmFkanVzdFVJKCk7XHJcblxyXG4gICAgLy8gc2V0IG90aGVyIGNvbnRyb2xzXHJcbiAgICAvLyBIQUNLXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5rZXkuc2V0VmFsdWUoZWxlbWVudC5rZXkgfHwgbnVsbCk7XHJcbiAgICAgIHRoaXMucGFyZW50S2V5LnNldFZhbHVlKGVsZW1lbnQucGFyZW50S2V5IHx8IG51bGwpO1xyXG4gICAgICB0aGlzLmluaXRpYWxSYW5nZXMgPSBlbGVtZW50LnJhbmdlcztcclxuICAgICAgdGhpcy5pbml0aWFsRmxhZ3MgPSBlbGVtZW50LmZsYWdzO1xyXG4gICAgICB0aGlzLmluc3RhbmNlQ291bnQuc2V0VmFsdWUoZWxlbWVudC5pbnN0YW5jZUNvdW50IHx8IDApO1xyXG4gICAgICAvLyB0eXBvbG9naWVzXHJcbiAgICAgIHRoaXMuc3ViamVjdC5zZXRWYWx1ZShlbGVtZW50LnN1YmplY3QgfHwgbnVsbCk7XHJcblxyXG4gICAgICB0aGlzLmNvbG9ycy5zZXRWYWx1ZShlbGVtZW50LmNvbG9ycyB8fCBbXSk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9ycyA9IHRoaXMuY29sb3JzLnZhbHVlO1xyXG5cclxuICAgICAgdGhpcy50eXBvbG9naWVzLnNldFZhbHVlKGVsZW1lbnQudHlwb2xvZ2llcyB8fCBbXSk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbFR5cG9sb2dpZXMgPSB0aGlzLnR5cG9sb2dpZXMudmFsdWU7XHJcblxyXG4gICAgICB0aGlzLmdpbGRpbmdzLnNldFZhbHVlKGVsZW1lbnQuZ2lsZGluZ3MgfHwgW10pO1xyXG4gICAgICB0aGlzLmluaXRpYWxHaWxkaW5ncyA9IHRoaXMuZ2lsZGluZ3MudmFsdWU7XHJcblxyXG4gICAgICB0aGlzLnRlY2huaXF1ZXMuc2V0VmFsdWUoZWxlbWVudC50ZWNobmlxdWVzIHx8IFtdKTtcclxuICAgICAgdGhpcy5pbml0aWFsVGVjaG5pcXVlcyA9IHRoaXMudGVjaG5pcXVlcy52YWx1ZTtcclxuXHJcbiAgICAgIHRoaXMudG9vbHMuc2V0VmFsdWUoZWxlbWVudC50b29scyB8fCBbXSk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbFRvb2xzID0gdGhpcy50b29scy52YWx1ZTtcclxuXHJcbiAgICAgIHRoaXMucG9zaXRpb25zLnNldFZhbHVlKGVsZW1lbnQucG9zaXRpb25zIHx8IFtdKTtcclxuICAgICAgdGhpcy5pbml0aWFsUG9zaXRpb25zID0gdGhpcy5wb3NpdGlvbnMudmFsdWU7XHJcblxyXG4gICAgICB0aGlzLmxpbmVIZWlnaHQuc2V0VmFsdWUoZWxlbWVudC5saW5lSGVpZ2h0IHx8IDApO1xyXG4gICAgICB0aGlzLnRleHRSZWxhdGlvbi5zZXRWYWx1ZShlbGVtZW50LnRleHRSZWxhdGlvbiB8fCBudWxsKTtcclxuICAgICAgLy8gZGVzY3JpcHRpb25cclxuICAgICAgdGhpcy5kZXNjcmlwdGlvbi5zZXRWYWx1ZShlbGVtZW50LmRlc2NyaXB0aW9uIHx8IG51bGwpO1xyXG4gICAgICB0aGlzLmluaXRpYWxJbWFnZXMgPSBlbGVtZW50LmltYWdlcyB8fCBbXTtcclxuICAgICAgdGhpcy5ub3RlLnNldFZhbHVlKGVsZW1lbnQubm90ZSB8fCBudWxsKTtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICB0aGlzLl91cGRhdGluZ0Zvcm0gPSBmYWxzZTtcclxuICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZUZvcm0gdG0gZXhpdCcpO1xyXG4gICAgfSwgMCk7XHJcbiAgICBjb25zb2xlLmxvZygndXBkYXRlRm9ybSBleGl0Jyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEVsZW1lbnQoKTogQ29kRGVjb3JhdGlvbkVsZW1lbnQge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAga2V5OiB0aGlzLmtleS52YWx1ZT8udHJpbSgpLFxyXG4gICAgICBwYXJlbnRLZXk6IHRoaXMucGFyZW50S2V5LnZhbHVlPy50cmltKCksXHJcbiAgICAgIHR5cGU6IHRoaXMudHlwZS52YWx1ZT8udHJpbSgpIHx8ICcnLFxyXG4gICAgICBmbGFnczogdGhpcy5mbGFncy52YWx1ZSB8fCBbXSxcclxuICAgICAgcmFuZ2VzOiB0aGlzLnJhbmdlcy52YWx1ZSB8fCBbXSxcclxuICAgICAgaW5zdGFuY2VDb3VudDogdGhpcy5pbnN0YW5jZUNvdW50LnZhbHVlIHx8IDAsXHJcbiAgICAgIHR5cG9sb2dpZXM6IHRoaXMudHlwb2xvZ2llcy52YWx1ZT8ubGVuZ3RoXHJcbiAgICAgICAgPyB0aGlzLnR5cG9sb2dpZXMudmFsdWVcclxuICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgc3ViamVjdDogdGhpcy5zdWJqZWN0LnZhbHVlPy50cmltKCksXHJcbiAgICAgIGNvbG9yczogdGhpcy5jb2xvcnMudmFsdWU/Lmxlbmd0aCA/IHRoaXMuY29sb3JzLnZhbHVlIDogdW5kZWZpbmVkLFxyXG4gICAgICBnaWxkaW5nczogdGhpcy5naWxkaW5ncy52YWx1ZT8ubGVuZ3RoID8gdGhpcy5naWxkaW5ncy52YWx1ZSA6IHVuZGVmaW5lZCxcclxuICAgICAgdGVjaG5pcXVlczogdGhpcy50ZWNobmlxdWVzLnZhbHVlPy5sZW5ndGhcclxuICAgICAgICA/IHRoaXMudGVjaG5pcXVlcy52YWx1ZVxyXG4gICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICB0b29sczogdGhpcy50b29scy52YWx1ZT8ubGVuZ3RoID8gdGhpcy50b29scy52YWx1ZSA6IHVuZGVmaW5lZCxcclxuICAgICAgcG9zaXRpb25zOiB0aGlzLnBvc2l0aW9ucy52YWx1ZT8ubGVuZ3RoXHJcbiAgICAgICAgPyB0aGlzLnBvc2l0aW9ucy52YWx1ZVxyXG4gICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICBsaW5lSGVpZ2h0OiB0aGlzLmxpbmVIZWlnaHQudmFsdWUsXHJcbiAgICAgIHRleHRSZWxhdGlvbjogdGhpcy50ZXh0UmVsYXRpb24udmFsdWU/LnRyaW0oKSxcclxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24udmFsdWU/LnRyaW0oKSxcclxuICAgICAgaW1hZ2VzOiB0aGlzLmltYWdlcy52YWx1ZT8ubGVuZ3RoID8gdGhpcy5pbWFnZXMudmFsdWUgOiB1bmRlZmluZWQsXHJcbiAgICAgIG5vdGU6IHRoaXMubm90ZS52YWx1ZT8udHJpbSgpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkxvY2F0aW9uQ2hhbmdlKHJhbmdlczogQ29kTG9jYXRpb25SYW5nZVtdIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgdGhpcy5yYW5nZXMuc2V0VmFsdWUocmFuZ2VzIHx8IFtdKTtcclxuICAgIHRoaXMucmFuZ2VzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMucmFuZ2VzLm1hcmtBc0RpcnR5KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25JbWFnZXNDaGFuZ2UoaW1hZ2VzOiBDb2RJbWFnZVtdIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICB0aGlzLmltYWdlcy5zZXRWYWx1ZShpbWFnZXMgfHwgW10pO1xyXG4gICAgdGhpcy5pbWFnZXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5pbWFnZXMubWFya0FzRGlydHkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkZsYWdzQ2hhbmdlKGlkczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHRoaXMuZmxhZ3Muc2V0VmFsdWUoaWRzKTtcclxuICAgIHRoaXMuZmxhZ3MudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5mbGFncy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVHlwb2xvZ2llc0NoYW5nZShpZHM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdXBkYXRpbmdGb3JtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudHlwb2xvZ2llcy5zZXRWYWx1ZShpZHMpO1xyXG4gICAgdGhpcy50eXBvbG9naWVzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMudHlwb2xvZ2llcy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ29sb3JzQ2hhbmdlKGlkczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl91cGRhdGluZ0Zvcm0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb2xvcnMuc2V0VmFsdWUoaWRzKTtcclxuICAgIHRoaXMuY29sb3JzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29sb3JzLm1hcmtBc0RpcnR5KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25HaWxkaW5nc0NoYW5nZShpZHM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdXBkYXRpbmdGb3JtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZ2lsZGluZ3Muc2V0VmFsdWUoaWRzKTtcclxuICAgIHRoaXMuZ2lsZGluZ3MudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5naWxkaW5ncy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVGVjaG5pcXVlc0NoYW5nZShpZHM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdXBkYXRpbmdGb3JtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudGVjaG5pcXVlcy5zZXRWYWx1ZShpZHMpO1xyXG4gICAgdGhpcy50ZWNobmlxdWVzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMudGVjaG5pcXVlcy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVG9vbHNDaGFuZ2UoaWRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3VwZGF0aW5nRm9ybSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnRvb2xzLnNldFZhbHVlKGlkcyk7XHJcbiAgICB0aGlzLnRvb2xzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMudG9vbHMubWFya0FzRGlydHkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblBvc2l0aW9uc0NoYW5nZShpZHM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdXBkYXRpbmdGb3JtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucG9zaXRpb25zLnNldFZhbHVlKGlkcyk7XHJcbiAgICB0aGlzLnBvc2l0aW9ucy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLnBvc2l0aW9ucy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIHR5cGVJZFRvU3RyaW5nKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIC8vICAgY29uc3QgZW50cnkgPSB0aGlzLmRlY0VsZW1UeXBlRW50cmllcz8uZmluZCgoZSkgPT4gZS5pZCA9PT0gaWQpO1xyXG4gIC8vICAgcmV0dXJuIGVudHJ5ID8gZW50cnkudmFsdWUgOiBpZDtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRvckNsb3NlLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldEVsZW1lbnQoKTtcclxuICAgIHRoaXMuZWxlbWVudENoYW5nZS5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cInNhdmUoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0eXBlLWhlYWRcIj5cclxuICAgIHt7IHR5cGUudmFsdWUgfCBmbGF0TG9va3VwIDogZGVjRWxlbVR5cGVFbnRyaWVzIDogXCJpZFwiIDogXCJ2YWx1ZVwiIH19XHJcbiAgPC9kaXY+XHJcbiAgPG1hdC10YWItZ3JvdXAgKHNlbGVjdGVkSW5kZXhDaGFuZ2UpPVwib25UYWJJbmRleENoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgPCEtLSBHRU5FUkFMIC0tPlxyXG4gICAgPG1hdC10YWIgbGFiZWw9XCJnZW5lcmFsXCI+XHJcbiAgICAgIDwhLS0gdHlwZSAoYm91bmQpIC0tPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICAqbmdJZj1cImRlY0VsZW1UeXBlRW50cmllcz8ubGVuZ3RoXCJcclxuICAgICAgICBzdHlsZT1cIndpZHRoOiAxNGVtXCJcclxuICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWxhYmVsPnR5cGU8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwidHlwZVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGUgb2YgZGVjRWxlbVR5cGVFbnRyaWVzXCIgW3ZhbHVlXT1cImUuaWRcIj57e1xyXG4gICAgICAgICAgICBlLnZhbHVlXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgKm5nSWY9XCIkYW55KHR5cGUpLmVycm9ycz8ucmVxdWlyZWQgJiYgKHR5cGUuZGlydHkgfHwgdHlwZS50b3VjaGVkKVwiXHJcbiAgICAgICAgICA+dHlwZSByZXF1aXJlZDwvbWF0LWVycm9yXHJcbiAgICAgICAgPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAmbmJzcDtcclxuICAgICAgPCEtLSBpbnN0YW5jZUNvdW50IC0tPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDogNmVtXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5jb3VudDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwiaW5zdGFuY2VDb3VudFwiIHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCIgLz5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgIDwhLS0gcmFuZ2VzIC0tPlxyXG4gICAgICA8Y2FkbXVzLWNvZC1sb2NhdGlvblxyXG4gICAgICAgIGxhYmVsPVwicmFuZ2VzXCJcclxuICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgW2xvY2F0aW9uXT1cImluaXRpYWxSYW5nZXMgfHwgbnVsbFwiXHJcbiAgICAgICAgKGxvY2F0aW9uQ2hhbmdlKT1cIm9uTG9jYXRpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgID48L2NhZG11cy1jb2QtbG9jYXRpb24+XHJcblxyXG4gICAgICA8IS0tIGZsYWdzIC0tPlxyXG4gICAgICA8ZmllbGRzZXQgKm5nSWY9XCJhdmFpbEZsYWdzPy5sZW5ndGhcIj5cclxuICAgICAgICA8bGVnZW5kPmZlYXR1cmVzPC9sZWdlbmQ+XHJcbiAgICAgICAgPGNhZG11cy11aS1mbGFncy1waWNrZXJcclxuICAgICAgICAgIFtmbGFnc109XCJhdmFpbEZsYWdzXCJcclxuICAgICAgICAgIFtzZWxlY3RlZElkc109XCJpbml0aWFsRmxhZ3NcIlxyXG4gICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uRmxhZ3NDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvY2FkbXVzLXVpLWZsYWdzLXBpY2tlcj5cclxuICAgICAgPC9maWVsZHNldD5cclxuXHJcbiAgICAgIDxiciAvPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDwhLS0ga2V5IC0tPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+a2V5PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cImtleVwiIC8+XHJcbiAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICpuZ0lmPVwiJGFueShrZXkpLmVycm9ycz8ucGF0dGVybiAmJiAoa2V5LmRpcnR5IHx8IGtleS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgID5pbnZhbGlkIGtleTwvbWF0LWVycm9yXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICpuZ0lmPVwiJGFueShrZXkpLmVycm9ycz8ubWF4TGVuZ3RoICYmIChrZXkuZGlydHkgfHwga2V5LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgPmtleSB0b28gbG9uZzwvbWF0LWVycm9yXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAmbmJzcDtcclxuICAgICAgICA8IS0tIHBhcmVudEtleSAtLT5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJwYXJlbnRLZXlzPy5sZW5ndGhcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+cGFyZW50IGtleTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInBhcmVudEtleVwiPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwibnVsbFwiPihub25lKTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGsgb2YgcGFyZW50S2V5c1wiIFt2YWx1ZV09XCJrXCI+e3tcclxuICAgICAgICAgICAgICBrXHJcbiAgICAgICAgICAgIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtdGFiPlxyXG5cclxuICAgIDwhLS0gVFlQT0xPR0lFUyAtLT5cclxuICAgIDxtYXQtdGFiIGxhYmVsPVwidHlwb2xvZ2llc1wiPlxyXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiA4cHhcIj5cclxuICAgICAgICA8IS0tIGxpbmVIZWlnaHQgLS0+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgICBzdHlsZT1cImZsZXg6IDAgMCBhdXRvOyB3aWR0aDogNGVtXCJcclxuICAgICAgICAgIFtoaWRkZW5dPVwiaGlkZGVuPy5saW5lSGVpZ2h0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPmxuLmg8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMFwiIFtmb3JtQ29udHJvbF09XCJsaW5lSGVpZ2h0XCIgLz5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwhLS0gdGV4dFJlbGF0aW9uIC0tPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgICAgW2hpZGRlbl09XCJoaWRkZW4/LnRleHRSZWxhdGlvblwiXHJcbiAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IDEgMCBhdXRvXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnRleHQgcmVsYXRpb248L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwidGV4dFJlbGF0aW9uXCIgLz5cclxuICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAkYW55KHRleHRSZWxhdGlvbikuZXJyb3JzPy5tYXhMZW5ndGggJiZcclxuICAgICAgICAgICAgICAodGV4dFJlbGF0aW9uLmRpcnR5IHx8IHRleHRSZWxhdGlvbi50b3VjaGVkKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+dGV4dCByZWxhdGlvbiB0b28gbG9uZzwvbWF0LWVycm9yXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gdHlwb2xvZ2llcyAtLT5cclxuICAgICAgPGZpZWxkc2V0IFtoaWRkZW5dPVwiIWF2YWlsVHlwb2xvZ2llcy5sZW5ndGggfHwgaGlkZGVuPy50eXBvbG9naWVzXCI+XHJcbiAgICAgICAgPGxlZ2VuZD50eXBvbG9naWVzPC9sZWdlbmQ+XHJcbiAgICAgICAgPGNhZG11cy11aS1mbGFncy1waWNrZXJcclxuICAgICAgICAgIFtmbGFnc109XCJhdmFpbFR5cG9sb2dpZXNcIlxyXG4gICAgICAgICAgW3NlbGVjdGVkSWRzXT1cImluaXRpYWxUeXBvbG9naWVzXCJcclxuICAgICAgICAgIChzZWxlY3RlZElkc0NoYW5nZSk9XCJvblR5cG9sb2dpZXNDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvY2FkbXVzLXVpLWZsYWdzLXBpY2tlcj5cclxuICAgICAgPC9maWVsZHNldD5cclxuXHJcbiAgICAgIDwhLS0gc3ViamVjdCAtLT5cclxuICAgICAgPGRpdiBbaGlkZGVuXT1cImhpZGRlbj8uc3ViamVjdFwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+c3ViamVjdDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJzdWJqZWN0XCIgLz5cclxuICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAkYW55KHN1YmplY3QpLmVycm9ycz8ubWF4TGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgKHN1YmplY3QuZGlydHkgfHwgc3ViamVjdC50b3VjaGVkKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+c3ViamVjdCB0b28gbG9uZzwvbWF0LWVycm9yXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIGNvbG9ycyAtLT5cclxuICAgICAgPGZpZWxkc2V0IFtoaWRkZW5dPVwiIWF2YWlsQ29sb3JzLmxlbmd0aCB8fCBoaWRkZW4/LmNvbG9yc1wiPlxyXG4gICAgICAgIDxsZWdlbmQ+Y29sb3JzPC9sZWdlbmQ+XHJcbiAgICAgICAgPGNhZG11cy11aS1mbGFncy1waWNrZXJcclxuICAgICAgICAgIFtmbGFnc109XCJhdmFpbENvbG9yc1wiXHJcbiAgICAgICAgICBbc2VsZWN0ZWRJZHNdPVwiaW5pdGlhbENvbG9yc1wiXHJcbiAgICAgICAgICAoc2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25Db2xvcnNDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvY2FkbXVzLXVpLWZsYWdzLXBpY2tlcj5cclxuICAgICAgPC9maWVsZHNldD5cclxuXHJcbiAgICAgIDwhLS0gZ2lsZGluZ3MgLS0+XHJcbiAgICAgIDxmaWVsZHNldFxyXG4gICAgICAgIFtoaWRkZW5dPVwiXHJcbiAgICAgICAgICAoIWF2YWlsR2lsZGluZ3MubGVuZ3RoICYmICFlbGVtR2lsZGluZ0ZyZWUpIHx8IGhpZGRlbj8uZ2lsZGluZ3NcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGxlZ2VuZD5naWxkaW5nczwvbGVnZW5kPlxyXG4gICAgICAgIDxjYWRtdXMtdWktZmxhZ3MtcGlja2VyXHJcbiAgICAgICAgICBbZmxhZ3NdPVwiYXZhaWxHaWxkaW5nc1wiXHJcbiAgICAgICAgICBbYWxsb3dVc2VyRmxhZ3NdPVwiZWxlbUdpbGRpbmdGcmVlIHx8IGZhbHNlXCJcclxuICAgICAgICAgIFtzZWxlY3RlZElkc109XCJpbml0aWFsR2lsZGluZ3NcIlxyXG4gICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uR2lsZGluZ3NDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvY2FkbXVzLXVpLWZsYWdzLXBpY2tlcj5cclxuICAgICAgPC9maWVsZHNldD5cclxuXHJcbiAgICAgIDwhLS0gdGVjaG5pcXVlcyAtLT5cclxuICAgICAgPGZpZWxkc2V0XHJcbiAgICAgICAgW2hpZGRlbl09XCJcclxuICAgICAgICAgICghYXZhaWxUZWNobmlxdWVzLmxlbmd0aCAmJiAhZWxlbVRlY2huaXF1ZUZyZWUpIHx8IGhpZGRlbj8udGVjaG5pcXVlc1xyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bGVnZW5kPnRlY2huaXF1ZXM8L2xlZ2VuZD5cclxuICAgICAgICA8Y2FkbXVzLXVpLWZsYWdzLXBpY2tlclxyXG4gICAgICAgICAgW2ZsYWdzXT1cImF2YWlsVGVjaG5pcXVlc1wiXHJcbiAgICAgICAgICBbYWxsb3dVc2VyRmxhZ3NdPVwiZWxlbVRlY2huaXF1ZUZyZWUgfHwgZmFsc2VcIlxyXG4gICAgICAgICAgW3NlbGVjdGVkSWRzXT1cImluaXRpYWxUZWNobmlxdWVzXCJcclxuICAgICAgICAgIChzZWxlY3RlZElkc0NoYW5nZSk9XCJvblRlY2huaXF1ZXNDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvY2FkbXVzLXVpLWZsYWdzLXBpY2tlcj5cclxuICAgICAgPC9maWVsZHNldD5cclxuXHJcbiAgICAgIDwhLS0gdG9vbHMgLS0+XHJcbiAgICAgIDxmaWVsZHNldFxyXG4gICAgICAgIFtoaWRkZW5dPVwiKCFhdmFpbFRvb2xzLmxlbmd0aCAmJiAhZWxlbVRvb2xGcmVlKSB8fCBoaWRkZW4/LnRvb2xzXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxsZWdlbmQ+dG9vbHM8L2xlZ2VuZD5cclxuICAgICAgICA8Y2FkbXVzLXVpLWZsYWdzLXBpY2tlclxyXG4gICAgICAgICAgW2ZsYWdzXT1cImF2YWlsVG9vbHNcIlxyXG4gICAgICAgICAgW2FsbG93VXNlckZsYWdzXT1cImVsZW1Ub29sRnJlZSB8fCBmYWxzZVwiXHJcbiAgICAgICAgICBbc2VsZWN0ZWRJZHNdPVwiaW5pdGlhbFRvb2xzXCJcclxuICAgICAgICAgIChzZWxlY3RlZElkc0NoYW5nZSk9XCJvblRvb2xzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgID48L2NhZG11cy11aS1mbGFncy1waWNrZXI+XHJcbiAgICAgIDwvZmllbGRzZXQ+XHJcblxyXG4gICAgICA8IS0tIHBvc2l0aW9ucyAtLT5cclxuICAgICAgPGZpZWxkc2V0XHJcbiAgICAgICAgW2hpZGRlbl09XCJcclxuICAgICAgICAgICghYXZhaWxQb3NpdGlvbnMubGVuZ3RoICYmICFlbGVtUG9zaXRpb25GcmVlKSB8fCBoaWRkZW4/LnBvc2l0aW9uc1xyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bGVnZW5kPnBvc2l0aW9uczwvbGVnZW5kPlxyXG4gICAgICAgIDxjYWRtdXMtdWktZmxhZ3MtcGlja2VyXHJcbiAgICAgICAgICBbZmxhZ3NdPVwiYXZhaWxQb3NpdGlvbnNcIlxyXG4gICAgICAgICAgW2FsbG93VXNlckZsYWdzXT1cImVsZW1Qb3NpdGlvbkZyZWUgfHwgZmFsc2VcIlxyXG4gICAgICAgICAgW3NlbGVjdGVkSWRzXT1cImluaXRpYWxQb3NpdGlvbnNcIlxyXG4gICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uUG9zaXRpb25zQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgID48L2NhZG11cy11aS1mbGFncy1waWNrZXI+XHJcbiAgICAgIDwvZmllbGRzZXQ+XHJcbiAgICA8L21hdC10YWI+XHJcblxyXG4gICAgPCEtLSBERVNDUklQVElPTiAtLT5cclxuICAgIDxtYXQtdGFiIGxhYmVsPVwiZGVzY3JpcHRpb25cIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8bmd4LW1vbmFjby1lZGl0b3JcclxuICAgICAgICAgICNkc2NlZGl0b3JcclxuICAgICAgICAgIFtvcHRpb25zXT1cImVkaXRvck9wdGlvbnNcIlxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImRlc2NyaXB0aW9uXCJcclxuICAgICAgICA+PC9uZ3gtbW9uYWNvLWVkaXRvcj5cclxuICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAkYW55KGRlc2NyaXB0aW9uKS5lcnJvcnM/Lm1heExlbmd0aCAmJlxyXG4gICAgICAgICAgICAoZGVzY3JpcHRpb24udG91Y2hlZCB8fCBkZXNjcmlwdGlvbi5kaXJ0eSlcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+ZGVzY3JpcHRpb24gdG9vIGxvbmc8L21hdC1lcnJvclxyXG4gICAgICAgID5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPCEtLSBpbWFnZXMgLS0+XHJcbiAgICAgICAgPGNhZG11cy1jb2QtaW1hZ2VzXHJcbiAgICAgICAgICBbdHlwZUVudHJpZXNdPVwiaW1nVHlwZUVudHJpZXNcIlxyXG4gICAgICAgICAgW2ltYWdlc109XCJpbml0aWFsSW1hZ2VzXCJcclxuICAgICAgICAgIChpbWFnZXNDaGFuZ2UpPVwib25JbWFnZXNDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvY2FkbXVzLWNvZC1pbWFnZXM+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDwhLS0gbm90ZSAtLT5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJsb25nLXRleHRcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+bm90ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCIyXCIgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cIm5vdGVcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAqbmdJZj1cIiRhbnkobm90ZSkuZXJyb3JzPy5tYXhMZW5ndGggJiYgKG5vdGUuZGlydHkgfHwgbm90ZS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgID5ub3RlIHRvbyBsb25nPC9tYXQtZXJyb3JcclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXRhYj5cclxuICA8L21hdC10YWItZ3JvdXA+XHJcblxyXG4gIDwhLS0gYnV0dG9ucyAtLT5cclxuICA8ZGl2IGNsYXNzPVwidG9vbGJhci1yb3dcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBtYXRUb29sdGlwPVwiRGlzY2FyZCBlbGVtZW50IGNoYW5nZXNcIlxyXG4gICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgbWF0VG9vbHRpcD1cIkFjY2VwdCBlbGVtZW50IGNoYW5nZXNcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkIHx8IGZvcm0ucHJpc3RpbmVcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj4gZWxlbWVudFxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA4cHhcIj5lbGVtZW50PC9zcGFuPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==
|