@c8y/ngx-components 1018.0.116 → 1018.0.125
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/context-dashboard/context-dashboard.model.d.ts +5 -0
- package/core/dashboard/dashboard.model.d.ts +5 -0
- package/ecosystem/application-plugins/plugin-list.component.d.ts +1 -1
- package/esm2020/context-dashboard/context-dashboard.component.mjs +3 -3
- package/esm2020/context-dashboard/context-dashboard.model.mjs +1 -1
- package/esm2020/context-dashboard/dashboard-detail.component.mjs +1 -1
- package/esm2020/core/common/group.service.mjs +2 -11
- package/esm2020/core/dashboard/dashboard.model.mjs +1 -1
- package/esm2020/core/dashboard/widgets-dashboard.component.mjs +5 -4
- package/esm2020/core/realtime/measurement-realtime.service.mjs +4 -2
- package/esm2020/device-profile/device-profile.component.mjs +4 -2
- package/esm2020/ecosystem/application-plugins/plugin-list.component.mjs +15 -7
- package/esm2020/widgets/implementations/kpi/kpi-widget-view/kpi-widget-view.component.mjs +2 -2
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs +2 -2
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-device-profile.mjs +3 -1
- package/fesm2015/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs +14 -8
- package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem.mjs +14 -8
- package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-widgets-implementations-kpi.mjs +1 -1
- package/fesm2015/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +29 -32
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs +2 -2
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-device-profile.mjs +3 -1
- package/fesm2020/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs +14 -6
- package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem.mjs +14 -6
- package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-widgets-implementations-kpi.mjs +1 -1
- package/fesm2020/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +29 -32
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/widgets/implementations/kpi/kpi-widget-view/kpi-widget-view.component.d.ts +2 -2
|
@@ -224,7 +224,9 @@ export class DeviceProfileComponent {
|
|
|
224
224
|
return this.queriesUtil.addOrFilter({ deviceType: this.deviceProfile.c8y_Filter.type }, { __not: { __has: `deviceType` } });
|
|
225
225
|
}
|
|
226
226
|
else {
|
|
227
|
-
return this.queriesUtil.addOrFilter({ 'c8y_Filter.type': this.deviceProfile.c8y_Filter.type }, {
|
|
227
|
+
return this.queriesUtil.addOrFilter({ 'c8y_Filter.type': this.deviceProfile.c8y_Filter.type }, {
|
|
228
|
+
__or: [{ 'c8y_Filter.type': '' }, { __not: { __has: `c8y_Filter.type` } }]
|
|
229
|
+
});
|
|
228
230
|
}
|
|
229
231
|
}
|
|
230
232
|
return {};
|
|
@@ -246,4 +248,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
246
248
|
}
|
|
247
249
|
], template: "<c8y-title>{{ profileName }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n label=\"{{ 'Management' | translate }}\"\n icon=\"c8y-management\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-profile'\"\n [label]=\"'Device profiles' | translate\"\n [path]=\"'device-profiles'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item label=\"{{ profileName }}\" icon=\"c8y-device-profile\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<div *ngIf=\"deviceProfile\" class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <div class=\"card card--fullpage\" *ngIf=\"deviceProfile\">\n <div class=\"card-block bg-level-1 flex-no-shrink p-t-24 p-b-24 overflow-visible\">\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i class=\"c8y-icon-duocolor icon-48 c8y-icon c8y-icon-device-profile\"></i>\n <p>\n <small class=\"label label-info\">{{ 'Device profile' | translate }}</small>\n </p>\n </div>\n <div class=\"flex-grow col-10\">\n <div class=\"row\">\n <div class=\"col-md-4\">\n <form #editNameForm=\"ngForm\">\n <c8y-form-group>\n <label class=\"control-label\" translate>Name</label>\n <div class=\"input-group input-group-editable\">\n <input\n type=\"text\"\n class=\"form-control\"\n [(ngModel)]=\"deviceProfile.name\"\n name=\"name\"\n placeholder=\"{{ 'e.g. My device profile' | translate }}\"\n size=\"{{ deviceProfile.name?.length || 1 }}\"\n required\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Save' | translate }}\"\n (click)=\"\n updateDeviceProfile({ name: deviceProfile.name });\n editNameForm.form.markAsPristine()\n \"\n [disabled]=\"editNameForm.form.invalid\"\n c8yProductExperience\n inherit\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.SAVE }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </form>\n </div>\n <div class=\"col-md-4\">\n <form #editTypeForm=\"ngForm\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Device type' | translate }}\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"\n (DEVICE_TYPE_POPOVER | translate) +\n (isDeviceProfileEmpty\n ? ' ' + (DEVICE_TYPE_DISABLED_POPOVER | translate)\n : '')\n \"\n triggers=\"focus\"\n container=\"body\"\n placement=\"right\"\n ></button>\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n type=\"text\"\n class=\"form-control\"\n [(ngModel)]=\"deviceProfile.c8y_Filter.type\"\n name=\"type\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n size=\"{{ deviceProfile.c8y_Filter.type?.length || 14 }}\"\n [disabled]=\"isDeviceProfileEmpty\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Save' | translate }}\"\n (click)=\"\n updateDeviceProfile({\n c8y_Filter: { type: deviceProfile.c8y_Filter.type }\n });\n editTypeForm.form.markAsPristine()\n \"\n [disabled]=\"isDeviceProfileEmpty\"\n c8yProductExperience\n inherit\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.SAVE }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-header separator-top-bottom bg-content sticky-top\">\n <div class=\"card-icon\">\n <i [c8yIcon]=\"'c8y-firmware'\" class=\"c8y-icon-duocolor\"></i>\n </div>\n <div class=\"card-title\" translate>Firmware</div>\n </div>\n <div class=\"card-block p-t-0\" *ngIf=\"deviceProfile.c8y_DeviceProfile.firmware\">\n <c8y-list-group>\n <c8y-li>\n <c8y-li-icon>\n <i [c8yIcon]=\"'c8y-firmware'\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-50 m-l-4\">\n <div class=\"col-6\">\n <span\n class=\"text-truncate\"\n title=\"{{ deviceProfile.c8y_DeviceProfile.firmware.name }}\"\n >\n {{ deviceProfile.c8y_DeviceProfile.firmware.name }}\n </span>\n </div>\n <div class=\"col-5 d-flex a-i-center\">\n <span\n class=\"text-truncate\"\n title=\"{{ deviceProfile.c8y_DeviceProfile.firmware.version }}\"\n >\n <span class=\"text-label-small m-r-4\" translate>Version</span>\n {{ deviceProfile.c8y_DeviceProfile.firmware.version }}\n </span>\n <button\n class=\"btn btn-danger btn-xs visible-xs m-l-auto m-r-8 m-t-8\"\n type=\"button\"\n title=\"{{ 'Remove`firmware`' | translate }}\"\n (click)=\"removeFirmware()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.FIRMWARE\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove`firmware`' | translate }}\n </button>\n </div>\n <div class=\"m-l-auto p-r-8 hidden-xs\">\n <button\n class=\"btn btn-dot showOnHover text-danger\"\n type=\"button\"\n [attr.aria-label]=\"'Remove`firmware`' | translate\"\n tooltip=\"{{ 'Remove`firmware`' | translate }}\"\n [delay]=\"500\"\n placement=\"right\"\n (click)=\"removeFirmware()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.FIRMWARE\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n <div class=\"card-block p-t-16\" *ngIf=\"!deviceProfile.c8y_DeviceProfile.firmware\">\n <c8y-ui-empty-state\n icon=\"c8y-firmware\"\n [horizontal]=\"true\"\n [title]=\"'No firmware defined.' | translate\"\n class=\"p-t-16 d-block\"\n ></c8y-ui-empty-state>\n </div>\n <div class=\"card-footer p-t-0\" *ngIf=\"!deviceProfile.c8y_DeviceProfile.firmware\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add firmware' | translate }}\"\n (click)=\"addFirmware()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.ADD,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.FIRMWARE\n }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add firmware' | translate }}\n </button>\n </div>\n\n <div class=\"card-header separator-top-bottom sticky-top bg-component\">\n <div class=\"card-icon\">\n <i [c8yIcon]=\"'c8y-tools'\" class=\"c8y-icon-duocolor\"></i>\n </div>\n <div class=\"card-title\" translate>Software</div>\n </div>\n <div class=\"card-block p-t-0\" *ngIf=\"deviceProfile.c8y_DeviceProfile.software?.length > 0\">\n <c8y-list-group>\n <c8y-li *ngFor=\"let software of deviceProfile.c8y_DeviceProfile.software\">\n <c8y-li-icon>\n <i [c8yIcon]=\"'c8y-tools'\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-50 m-l-4\">\n <div class=\"col-6\">\n <span class=\"text-truncate-wrap\" title=\"{{ software.name }}\">\n {{ software.name }}\n </span>\n </div>\n <div class=\"col-5 d-flex a-i-center\">\n <span class=\"text-truncate-wrap\" title=\"{{ software.version }}\">\n <span class=\"text-label-small m-r-8\" translate>Version</span>\n {{ software.version }}\n </span>\n <button\n class=\"btn btn-danger btn-xs visible-xs m-l-auto m-r-8 m-t-8\"\n type=\"button\"\n title=\"{{ 'Remove`software`' | translate }}\"\n ((click)=\"removeItem(software, 'software')\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.SOFTWARE\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove`software`' | translate }}\n </button>\n </div>\n <div class=\"m-l-auto p-r-8 hidden-xs\">\n <button\n class=\"btn btn-dot showOnHover text-danger\"\n type=\"button\"\n [attr.aria-label]=\"'Remove`software`' | translate\"\n tooltip=\"{{ 'Remove`software`' | translate }}\"\n [delay]=\"500\"\n placement=\"right\"\n (click)=\"removeItem(software, 'software')\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.SOFTWARE\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n <div\n class=\"card-block p-t-16\"\n *ngIf=\"deviceProfile.c8y_DeviceProfile.software?.length === 0\"\n >\n <c8y-ui-empty-state\n icon=\"c8y-tools\"\n [horizontal]=\"true\"\n [title]=\"'No software defined.' | translate\"\n ></c8y-ui-empty-state>\n </div>\n <div class=\"card-footer p-t-0\">\n <button\n class=\"btn btn-default m-b-0\"\n type=\"button\"\n title=\"{{ 'Add software' | translate }}\"\n (click)=\"addSoftware()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.ADD,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.SOFTWARE\n }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add software' | translate }}\n </button>\n </div>\n\n <div class=\"card-header separator-top-bottom bg-component sticky-top\">\n <div class=\"card-icon\">\n <i [c8yIcon]=\"'gears'\" class=\"c8y-icon-duocolor\"></i>\n </div>\n <div class=\"card-title\" translate>Configuration</div>\n </div>\n <div\n class=\"card-block p-t-0\"\n *ngIf=\"deviceProfile.c8y_DeviceProfile.configuration?.length > 0\"\n >\n <c8y-list-group>\n <c8y-li *ngFor=\"let configuration of deviceProfile.c8y_DeviceProfile.configuration\">\n <c8y-li-icon>\n <i [c8yIcon]=\"'gears'\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-50\">\n <div class=\"col-6\">\n <span class=\"text-truncate\" title=\"{{ configuration.name }}\">\n {{ configuration.name }}\n </span>\n </div>\n <div class=\"col-5 d-flex a-i-center\">\n <span class=\"label label-info\">{{ configuration.type }}</span>\n <button\n class=\"btn btn-danger btn-xs visible-xs m-l-auto m-r-8 m-t-8\"\n type=\"button\"\n title=\"{{ 'Remove`configuration`' | translate }}\"\n (click)=\"removeItem(configuration, 'configuration')\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.CONFGIURATION\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n {{ 'Remove`configuration`' | translate }}\n </button>\n </div>\n <div class=\"m-l-auto p-r-8 hidden-xs\">\n <button\n class=\"btn btn-dot showOnHover text-danger\"\n type=\"button\"\n [attr.aria-label]=\"'Remove`configuration`' | translate\"\n tooltip=\"{{ 'Remove`configuration`' | translate }}\"\n (click)=\"removeItem(configuration, 'configuration')\"\n [delay]=\"500\"\n placement=\"top\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.REMOVE,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.CONFGIURATION\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n <div\n class=\"card-block p-t-16\"\n *ngIf=\"deviceProfile.c8y_DeviceProfile.configuration?.length === 0\"\n >\n <c8y-ui-empty-state\n icon=\"gears\"\n [horizontal]=\"true\"\n [title]=\"'No configuration defined.' | translate\"\n ></c8y-ui-empty-state>\n </div>\n <div class=\"card-footer p-t-0\">\n <div class=\"p-t-8\">\n <button\n title=\"{{ 'Add configuration' | translate }}\"\n type=\"button\"\n class=\"btn btn-default m-b-0\"\n (click)=\"addConfiguration()\"\n c8yProductExperience\n inherit\n [actionData]=\"{\n action: PRODUCT_EXPERIENCE.ACTIONS.ADD,\n fragment: PRODUCT_EXPERIENCE.FRAGMENTS.CONFGIURATION\n }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add configuration' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
248
250
|
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.AlertService }, { type: i3.InventoryService }, { type: i4.BsModalService }, { type: i5.RepositoryService }]; } });
|
|
249
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLXByb2ZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2aWNlLXByb2ZpbGUvZGV2aWNlLXByb2ZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2aWNlLXByb2ZpbGUvZGV2aWNlLXByb2ZpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBa0IsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFDTCxZQUFZLEVBQ1osT0FBTyxFQUNQLGtCQUFrQixFQUdsQiwrQkFBK0IsRUFDaEMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBRUwsOEJBQThCLEVBQzlCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2YsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBS0wsa0JBQWtCLEVBQ25CLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7Ozs7O0FBWTNGLE1BQU0sT0FBTyxzQkFBc0I7SUFrQmpDLFlBQ1UsS0FBcUIsRUFDckIsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLE9B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QUNaLENBQUM7O21IQXRSVSxzQkFBc0I7dUdBQXRCLHNCQUFzQiw2Q0FQdEI7UUFDVDtZQUNFLE9BQU8sRUFBRSwrQkFBK0I7WUFDeEMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztTQUN0RDtLQUNGLDBCQ3RDSCw2MmhCQWtaQTsyRkQxV2Esc0JBQXNCO2tCQVZsQyxTQUFTOytCQUNFLG9CQUFvQixhQUVuQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsK0JBQStCOzRCQUN4QyxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQzt5QkFDdEQ7cUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UsIFF1ZXJpZXNVdGlsIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBNb2RhbFNlbGVjdGlvbk1vZGUsXG4gIFByb2R1Y3RFeHBlcmllbmNlRXZlbnQsXG4gIFByb2R1Y3RFeHBlcmllbmNlRXZlbnRTb3VyY2UsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9FVkVOVF9TT1VSQ0Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBGaWx0ZXJDcml0ZXJpYSxcbiAgUmVwb3NpdG9yeVNlbGVjdE1vZGFsQ29tcG9uZW50LFxuICBSZXBvc2l0b3J5U2VydmljZSxcbiAgUmVwb3NpdG9yeVR5cGVcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9yZXBvc2l0b3J5L3NoYXJlZCc7XG5pbXBvcnQgeyBhc3NpZ24sIGNvbmNhdCwgaGFzLCBpc0VtcHR5LCBpc0VxdWFsLCB1bmlxV2l0aCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGV2aWNlUHJvZmlsZSxcbiAgRGV2aWNlUHJvZmlsZUNvbmZpZ3VyYXRpb24sXG4gIERldmljZVByb2ZpbGVGaXJtd2FyZSxcbiAgRGV2aWNlUHJvZmlsZVNvZnR3YXJlLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0Vcbn0gZnJvbSAnLi9kZXZpY2UtcHJvZmlsZS5tb2RlbCc7XG5pbXBvcnQgeyBTZWxlY3RDb25maWd1cmF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL3NlbGVjdC1jb25maWd1cmF0aW9uLW1vZGFsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kZXZpY2UtcHJvZmlsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXZpY2UtcHJvZmlsZS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFBST0RVQ1RfRVhQRVJJRU5DRV9FVkVOVF9TT1VSQ0UsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEZXZpY2VQcm9maWxlQ29tcG9uZW50KVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEZXZpY2VQcm9maWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBQcm9kdWN0RXhwZXJpZW5jZUV2ZW50U291cmNlIHtcbiAgREVWSUNFX1RZUEVfUE9QT1ZFUiA9IGdldHRleHQoXG4gICAgJ1RoZSBkZXZpY2UgcHJvZmlsZSB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgYXNzaWdubWVudHMgb24gZGV2aWNlcyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuIE90aGVyd2lzZSwgaXQgd2lsbCBiZSBhdmFpbGFibGUgZm9yIGFsbCBkZXZpY2UgdHlwZXMuJ1xuICApO1xuICBERVZJQ0VfVFlQRV9ESVNBQkxFRF9QT1BPVkVSID0gZ2V0dGV4dChcbiAgICAnRGV2aWNlIHR5cGUgY2Fubm90IGJlIGNoYW5nZWQgb24gcHJvZmlsZXMgd2l0aCBhbHJlYWR5IGRlZmluZWQgZmlybXdhcmUsIHNvZnR3YXJlIG9yIGNvbmZpZ3VyYXRpb24gc2luY2UgdGhleSBtYXkgbm90IGJlIGFwcGxpY2FibGUgdG8gZGV2aWNlcyBvZiB0aGUgbmV3IGRldmljZSB0eXBlLidcbiAgKTtcbiAgUFJPRFVDVF9FWFBFUklFTkNFID0gUFJPRFVDVF9FWFBFUklFTkNFO1xuICBkZXZpY2VQcm9maWxlOiBEZXZpY2VQcm9maWxlO1xuICBwcm9maWxlTmFtZTogc3RyaW5nO1xuICBwcm9kdWN0RXhwZXJpZW5jZUV2ZW50OiBQcm9kdWN0RXhwZXJpZW5jZUV2ZW50ID0ge1xuICAgIGV2ZW50TmFtZTogUFJPRFVDVF9FWFBFUklFTkNFLkVWRU5UUy5SRVBPU0lUT1JZLFxuICAgIGRhdGE6IHtcbiAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkNPTVBPTkVOVFMuREVWSUNFX1BST0ZJTEVcbiAgICB9XG4gIH07XG4gIHByaXZhdGUgcXVlcmllc1V0aWw6IFF1ZXJpZXNVdGlsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbDogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXBvc2l0b3J5U2VydmljZTogUmVwb3NpdG9yeVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5xdWVyaWVzVXRpbCA9IG5ldyBRdWVyaWVzVXRpbCgpO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgcHJvZmlsZUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJyk7XG4gICAgdGhpcy5kZXZpY2VQcm9maWxlID0gKGF3YWl0IHRoaXMuZ2V0RGV2aWNlUHJvZmlsZShwcm9maWxlSWQpKSBhcyBEZXZpY2VQcm9maWxlO1xuICAgIGlmICh0aGlzLmRldmljZVByb2ZpbGUpIHtcbiAgICAgIHRoaXMucHJvZmlsZU5hbWUgPSB0aGlzLmRldmljZVByb2ZpbGUubmFtZTtcbiAgICAgIGlmICghdGhpcy5kZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLnNvZnR3YXJlKSB7XG4gICAgICAgIHRoaXMuZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5zb2Z0d2FyZSA9IFtdO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuY29uZmlndXJhdGlvbikge1xuICAgICAgICB0aGlzLmRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuY29uZmlndXJhdGlvbiA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZEZpcm13YXJlKCkge1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZTogUGFydGlhbDxSZXBvc2l0b3J5U2VsZWN0TW9kYWxDb21wb25lbnQ+ICYge1xuICAgICAgcmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnNGbiQ6IChtb2RhbDogYW55KSA9PiBPYnNlcnZhYmxlPElNYW5hZ2VkT2JqZWN0W10+O1xuICAgIH0gPSB7XG4gICAgICBkZXZpY2VUeXBlUXVlcnk6IHRoaXMuZ2V0RGV2aWNlVHlwZVF1ZXJ5KFJlcG9zaXRvcnlUeXBlLkZJUk1XQVJFKSxcbiAgICAgIHJlcG9zaXRvcnlUeXBlOiBSZXBvc2l0b3J5VHlwZS5GSVJNV0FSRSxcbiAgICAgIHJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zRm4kOiBtb2RhbERpYWxvZyA9PlxuICAgICAgICB0aGlzLmdldFJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zJChcbiAgICAgICAgICBtb2RhbERpYWxvZy5jb250ZW50LnNlYXJjaFRlcm0sXG4gICAgICAgICAgUmVwb3NpdG9yeVR5cGUuRklSTVdBUkVcbiAgICAgICAgKSxcbiAgICAgIGljb246ICdjOHktZmlybXdhcmUnLFxuICAgICAgdGl0bGU6IGdldHRleHQoJ1NlbGVjdCBmaXJtd2FyZScpLFxuICAgICAgbW9kZTogTW9kYWxTZWxlY3Rpb25Nb2RlLlNJTkdMRSxcbiAgICAgIHByb2R1Y3RFeHBlcmllbmNlRXZlbnQ6IHRoaXMucHJvZHVjdEV4cGVyaWVuY2VFdmVudFxuICAgIH07XG4gICAgY29uc3QgbW9kYWwgPSB0aGlzLmJzTW9kYWwuc2hvdyhSZXBvc2l0b3J5U2VsZWN0TW9kYWxDb21wb25lbnQsIHtcbiAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICBhcmlhTGFiZWxsZWRCeTogJ21vZGFsLXRpdGxlJyxcbiAgICAgIGluaXRpYWxTdGF0ZVxuICAgIH0pO1xuXG4gICAgaWYgKGluaXRpYWxTdGF0ZS5yZXBvc2l0b3J5RW50cmllc1dpdGhWZXJzaW9uc0ZuJCkge1xuICAgICAgbW9kYWwuY29udGVudC5yZXBvc2l0b3J5RW50cmllc1dpdGhWZXJzaW9ucyQgPVxuICAgICAgICBpbml0aWFsU3RhdGUucmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnNGbiQobW9kYWwpO1xuICAgIH1cblxuICAgIG1vZGFsLmNvbnRlbnQubG9hZC5uZXh0KCk7XG4gICAgbW9kYWwuY29udGVudC5yZXN1bHRFbWl0dGVyLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGZpcm13YXJlTGlzdCA9PiB7XG4gICAgICBjb25zdCBbZmlybXdhcmVdID0gZmlybXdhcmVMaXN0O1xuICAgICAgaWYgKCFmaXJtd2FyZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkZXZpY2VQcm9maWxlUGFydGlhbDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7XG4gICAgICAgIGM4eV9EZXZpY2VQcm9maWxlOiB0aGlzLmRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUgfHwge31cbiAgICAgIH07XG4gICAgICBhc3NpZ24oZGV2aWNlUHJvZmlsZVBhcnRpYWwuYzh5X0RldmljZVByb2ZpbGUsIHtcbiAgICAgICAgZmlybXdhcmU6IHtcbiAgICAgICAgICBuYW1lOiBmaXJtd2FyZS5uYW1lLFxuICAgICAgICAgIHZlcnNpb246IGZpcm13YXJlLnZlcnNpb24sXG4gICAgICAgICAgdXJsOiBmaXJtd2FyZS51cmwsXG4gICAgICAgICAgaXNQYXRjaDogZmlybXdhcmUuaXNQYXRjaCxcbiAgICAgICAgICBwYXRjaERlcGVuZGVuY3k6IGZpcm13YXJlLnBhdGNoRGVwZW5kZW5jeVxuICAgICAgICB9IGFzIERldmljZVByb2ZpbGVGaXJtd2FyZVxuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZURldmljZVByb2ZpbGUoZGV2aWNlUHJvZmlsZVBhcnRpYWwpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0UmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnMkKFxuICAgIHNlYXJjaFRlcm0kOiBCZWhhdmlvclN1YmplY3Q8RmlsdGVyQ3JpdGVyaWE+LFxuICAgIHJlcG9UeXBlOiBSZXBvc2l0b3J5VHlwZVxuICApIHtcbiAgICByZXR1cm4gc2VhcmNoVGVybSQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBzd2l0Y2hNYXAoc2VhcmNoVGVybSA9PlxuICAgICAgICB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLmxpc3RSZXBvc2l0b3J5RW50cmllcyhyZXBvVHlwZSwge1xuICAgICAgICAgIHF1ZXJ5OiB0aGlzLmdldERldmljZVR5cGVRdWVyeShyZXBvVHlwZSksXG4gICAgICAgICAgcGFydGlhbE5hbWU6IHNlYXJjaFRlcm0ubmFtZSxcbiAgICAgICAgICBwYXJhbXM6IHsgcGFnZVNpemU6IDEwMCB9LFxuICAgICAgICAgIHNraXBMZWdhY3k6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSxcbiAgICAgIG1hcChtb3MgPT4gdGhpcy5nZXRBbmRBc3NpZ25SZXBvc2l0b3J5QmluYXJpZXMobW9zKSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICBnZXRBbmRBc3NpZ25SZXBvc2l0b3J5QmluYXJpZXMobW9zOiBJTWFuYWdlZE9iamVjdFtdKSB7XG4gICAgbW9zLmZvckVhY2gobW8gPT4ge1xuICAgICAgbW8udmVyc2lvbnMgPSB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLmxpc3RCYXNlVmVyc2lvbnMobW8pO1xuICAgIH0pO1xuICAgIHJldHVybiBtb3M7XG4gIH1cblxuICBhZGRDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5ic01vZGFsLnNob3coU2VsZWN0Q29uZmlndXJhdGlvbk1vZGFsQ29tcG9uZW50LCB7XG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgcHJvZHVjdEV4cGVyaWVuY2VFdmVudDogdGhpcy5wcm9kdWN0RXhwZXJpZW5jZUV2ZW50XG4gICAgICB9XG4gICAgfSk7XG4gICAgbW9kYWwuY29udGVudC5kZXZpY2VUeXBlUXVlcnkgPSB0aGlzLmdldERldmljZVR5cGVRdWVyeShSZXBvc2l0b3J5VHlwZS5DT05GSUdVUkFUSU9OKTtcbiAgICBtb2RhbC5jb250ZW50LnNlbGVjdGVkID0gdGhpcy5kZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLmNvbmZpZ3VyYXRpb247XG4gICAgbW9kYWwuY29udGVudC5sb2FkLm5leHQoKTtcbiAgICBtb2RhbC5jb250ZW50LnJlc3VsdEVtaXR0ZXIucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoc2VsZWN0ZWRDb25maWd1cmF0aW9ucyA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZE1hcHBlZDogRGV2aWNlUHJvZmlsZUNvbmZpZ3VyYXRpb25bXSA9IHNlbGVjdGVkQ29uZmlndXJhdGlvbnMubWFwKFxuICAgICAgICBzZWxlY3RlZEl0ZW0gPT4ge1xuICAgICAgICAgIHJldHVybiBhc3NpZ24oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHVybDogc2VsZWN0ZWRJdGVtLnVybCxcbiAgICAgICAgICAgICAgbmFtZTogc2VsZWN0ZWRJdGVtLm5hbWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW0uY29uZmlndXJhdGlvblR5cGUgPyB7IHR5cGU6IHNlbGVjdGVkSXRlbS5jb25maWd1cmF0aW9uVHlwZSB9IDoge31cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgY29uc3QgbWVyZ2VkOiBEZXZpY2VQcm9maWxlQ29uZmlndXJhdGlvbiA9IGNvbmNhdChcbiAgICAgICAgc2VsZWN0ZWRNYXBwZWQsXG4gICAgICAgIHRoaXMuZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5jb25maWd1cmF0aW9uIHx8IFtdXG4gICAgICApO1xuICAgICAgY29uc3QgY29uZmlndXJhdGlvbjogRGV2aWNlUHJvZmlsZUNvbmZpZ3VyYXRpb24gPSB1bmlxV2l0aChtZXJnZWQsIChhcnJWYWwsIG90aFZhbCkgPT4ge1xuICAgICAgICByZXR1cm4gYXJyVmFsLnR5cGUgJiYgb3RoVmFsLnR5cGUgJiYgYXJyVmFsLnR5cGUgPT09IG90aFZhbC50eXBlO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXZpY2VQcm9maWxlUGFydGlhbDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7XG4gICAgICAgIGM4eV9EZXZpY2VQcm9maWxlOiB0aGlzLmRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUgfHwge31cbiAgICAgIH07XG4gICAgICBhc3NpZ24oZGV2aWNlUHJvZmlsZVBhcnRpYWwuYzh5X0RldmljZVByb2ZpbGUsIHsgY29uZmlndXJhdGlvbiB9KTtcbiAgICAgIHRoaXMudXBkYXRlRGV2aWNlUHJvZmlsZShkZXZpY2VQcm9maWxlUGFydGlhbCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRTb2Z0d2FyZSgpIHtcbiAgICBjb25zdCBpbml0aWFsU3RhdGU6IFBhcnRpYWw8UmVwb3NpdG9yeVNlbGVjdE1vZGFsQ29tcG9uZW50PiAmIHtcbiAgICAgIHJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zRm4kOiAobW9kYWw6IGFueSkgPT4gT2JzZXJ2YWJsZTxJTWFuYWdlZE9iamVjdFtdPjtcbiAgICB9ID0ge1xuICAgICAgZGV2aWNlVHlwZVF1ZXJ5OiB0aGlzLmdldERldmljZVR5cGVRdWVyeShSZXBvc2l0b3J5VHlwZS5TT0ZUV0FSRSksXG4gICAgICByZXBvc2l0b3J5VHlwZTogUmVwb3NpdG9yeVR5cGUuU09GVFdBUkUsXG4gICAgICByZXBvc2l0b3J5RW50cmllc1dpdGhWZXJzaW9uc0ZuJDogbW9kYWxEaWFsb2cgPT5cbiAgICAgICAgdGhpcy5nZXRSZXBvc2l0b3J5RW50cmllc1dpdGhWZXJzaW9ucyQoXG4gICAgICAgICAgbW9kYWxEaWFsb2cuY29udGVudC5zZWFyY2hUZXJtLFxuICAgICAgICAgIFJlcG9zaXRvcnlUeXBlLlNPRlRXQVJFXG4gICAgICAgICksXG4gICAgICBzZWxlY3RlZDogdGhpcy5kZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLnNvZnR3YXJlLFxuICAgICAgaWNvbjogJ2M4eS10b29scycsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnU2VsZWN0IHNvZnR3YXJlJyksXG4gICAgICBtb2RlOiBNb2RhbFNlbGVjdGlvbk1vZGUuTVVMVEksXG4gICAgICBwcm9kdWN0RXhwZXJpZW5jZUV2ZW50OiB0aGlzLnByb2R1Y3RFeHBlcmllbmNlRXZlbnRcbiAgICB9O1xuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5ic01vZGFsLnNob3coUmVwb3NpdG9yeVNlbGVjdE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICBpbml0aWFsU3RhdGVcbiAgICB9KTtcblxuICAgIGlmIChpbml0aWFsU3RhdGUucmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnNGbiQpIHtcbiAgICAgIG1vZGFsLmNvbnRlbnQucmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnMkID1cbiAgICAgICAgaW5pdGlhbFN0YXRlLnJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zRm4kKG1vZGFsKTtcbiAgICB9XG5cbiAgICBtb2RhbC5jb250ZW50LmxvYWQubmV4dCgpO1xuICAgIG1vZGFsLmNvbnRlbnQucmVzdWx0RW1pdHRlci5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzZWxlY3RlZFNvZnR3YXJlID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkTWFwcGVkOiBEZXZpY2VQcm9maWxlU29mdHdhcmVbXSA9IHNlbGVjdGVkU29mdHdhcmUubWFwKHNlbGVjdGVkSXRlbSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogc2VsZWN0ZWRJdGVtLm5hbWUsXG4gICAgICAgICAgdmVyc2lvbjogc2VsZWN0ZWRJdGVtLnZlcnNpb24sXG4gICAgICAgICAgdXJsOiBzZWxlY3RlZEl0ZW0udXJsLFxuICAgICAgICAgIGFjdGlvbjogJ2luc3RhbGwnXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG1lcmdlZDogRGV2aWNlUHJvZmlsZVNvZnR3YXJlID0gY29uY2F0KFxuICAgICAgICBzZWxlY3RlZE1hcHBlZCxcbiAgICAgICAgdGhpcy5kZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLnNvZnR3YXJlIHx8IFtdXG4gICAgICApO1xuICAgICAgY29uc3Qgc29mdHdhcmU6IERldmljZVByb2ZpbGVTb2Z0d2FyZSA9IHVuaXFXaXRoKG1lcmdlZCwgKGFyclZhbCwgb3RoVmFsKSA9PiB7XG4gICAgICAgIHJldHVybiBhcnJWYWwubmFtZSAmJiBvdGhWYWwubmFtZSAmJiBhcnJWYWwubmFtZSA9PT0gb3RoVmFsLm5hbWU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRldmljZVByb2ZpbGVQYXJ0aWFsOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiA9IHtcbiAgICAgICAgYzh5X0RldmljZVByb2ZpbGU6IHRoaXMuZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZSB8fCB7fVxuICAgICAgfTtcbiAgICAgIGFzc2lnbihkZXZpY2VQcm9maWxlUGFydGlhbC5jOHlfRGV2aWNlUHJvZmlsZSwgeyBzb2Z0d2FyZSB9KTtcbiAgICAgIHRoaXMudXBkYXRlRGV2aWNlUHJvZmlsZShkZXZpY2VQcm9maWxlUGFydGlhbCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaXNEZXZpY2VQcm9maWxlRW1wdHkoKSB7XG4gICAgY29uc3QgaXNTb2Z0d2FyZSA9XG4gICAgICB0aGlzLmRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuc29mdHdhcmUgJiZcbiAgICAgIHRoaXMuZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5zb2Z0d2FyZS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGlzRmlybXdhcmUgPSBCb29sZWFuKHRoaXMuZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5maXJtd2FyZSk7XG4gICAgY29uc3QgaXNDb25maWd1cmF0aW9uID1cbiAgICAgIHRoaXMuZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5jb25maWd1cmF0aW9uICYmXG4gICAgICB0aGlzLmRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuY29uZmlndXJhdGlvbi5sZW5ndGggPiAwO1xuICAgIHJldHVybiBpc1NvZnR3YXJlIHx8IGlzRmlybXdhcmUgfHwgaXNDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcmVtb3ZlSXRlbShyZW1vdmVkSXRlbSwgY2F0ZWdvcnkpIHtcbiAgICBjb25zdCBkZXZpY2VQcm9maWxlUGFydGlhbDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7XG4gICAgICBjOHlfRGV2aWNlUHJvZmlsZTogdGhpcy5kZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlXG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IGRldmljZVByb2ZpbGVQYXJ0aWFsLmM4eV9EZXZpY2VQcm9maWxlW2NhdGVnb3J5XS5maWx0ZXIoXG4gICAgICBpdGVtID0+ICFpc0VxdWFsKHJlbW92ZWRJdGVtLCBpdGVtKVxuICAgICk7XG4gICAgZGV2aWNlUHJvZmlsZVBhcnRpYWwuYzh5X0RldmljZVByb2ZpbGVbY2F0ZWdvcnldID0gZmlsdGVyZWQ7XG4gICAgdGhpcy51cGRhdGVEZXZpY2VQcm9maWxlKGRldmljZVByb2ZpbGVQYXJ0aWFsKTtcbiAgfVxuXG4gIHJlbW92ZUZpcm13YXJlKCkge1xuICAgIGRlbGV0ZSB0aGlzLmRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuZmlybXdhcmU7XG4gICAgdGhpcy51cGRhdGVEZXZpY2VQcm9maWxlKHsgYzh5X0RldmljZVByb2ZpbGU6IHRoaXMuZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZSB9KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURldmljZVByb2ZpbGUocGFydGlhbERldmljZVByb2ZpbGUpIHtcbiAgICBpZiAocGFydGlhbERldmljZVByb2ZpbGUuYzh5X0ZpbHRlciAmJiBwYXJ0aWFsRGV2aWNlUHJvZmlsZS5jOHlfRmlsdGVyLnR5cGUgPT09ICcnKSB7XG4gICAgICBkZWxldGUgcGFydGlhbERldmljZVByb2ZpbGUuYzh5X0ZpbHRlci50eXBlO1xuICAgIH1cbiAgICBPYmplY3QuYXNzaWduKHBhcnRpYWxEZXZpY2VQcm9maWxlLCB7IGlkOiB0aGlzLmRldmljZVByb2ZpbGUuaWQgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLnVwZGF0ZShwYXJ0aWFsRGV2aWNlUHJvZmlsZSk7XG4gICAgICB0aGlzLmRldmljZVByb2ZpbGUgPSBkYXRhIGFzIERldmljZVByb2ZpbGU7XG4gICAgICB0aGlzLnByb2ZpbGVOYW1lID0gdGhpcy5kZXZpY2VQcm9maWxlLm5hbWU7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0RldmljZSBwcm9maWxlIGNoYW5nZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldERldmljZVByb2ZpbGUocHJvZmlsZUlkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRldGFpbChwcm9maWxlSWQpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGV2aWNlVHlwZVF1ZXJ5KHJlcG9zaXRvcnlUeXBlKSB7XG4gICAgaWYgKFxuICAgICAgaGFzKHRoaXMuZGV2aWNlUHJvZmlsZSwgJ2M4eV9GaWx0ZXIudHlwZScpICYmXG4gICAgICAhaXNFbXB0eSh0aGlzLmRldmljZVByb2ZpbGUuYzh5X0ZpbHRlci50eXBlKVxuICAgICkge1xuICAgICAgaWYgKHJlcG9zaXRvcnlUeXBlID09PSBSZXBvc2l0b3J5VHlwZS5DT05GSUdVUkFUSU9OKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJpZXNVdGlsLmFkZE9yRmlsdGVyKFxuICAgICAgICAgIHsgZGV2aWNlVHlwZTogdGhpcy5kZXZpY2VQcm9maWxlLmM4eV9GaWx0ZXIudHlwZSB9LFxuICAgICAgICAgIHsgX19ub3Q6IHsgX19oYXM6IGBkZXZpY2VUeXBlYCB9IH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJpZXNVdGlsLmFkZE9yRmlsdGVyKFxuICAgICAgICAgIHsgJ2M4eV9GaWx0ZXIudHlwZSc6IHRoaXMuZGV2aWNlUHJvZmlsZS5jOHlfRmlsdGVyLnR5cGUgfSxcbiAgICAgICAgICB7IF9fbm90OiB7IF9faGFzOiBgYzh5X0ZpbHRlci50eXBlYCB9IH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPnt7IHByb2ZpbGVOYW1lIH19PC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBsYWJlbD1cInt7ICdNYW5hZ2VtZW50JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgaWNvbj1cImM4eS1tYW5hZ2VtZW50XCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LWRldmljZS1wcm9maWxlJ1wiXG4gICAgW2xhYmVsXT1cIidEZXZpY2UgcHJvZmlsZXMnIHwgdHJhbnNsYXRlXCJcbiAgICBbcGF0aF09XCInZGV2aWNlLXByb2ZpbGVzJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtIGxhYmVsPVwie3sgcHJvZmlsZU5hbWUgfX1cIiBpY29uPVwiYzh5LWRldmljZS1wcm9maWxlXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGRpdiAqbmdJZj1cImRldmljZVByb2ZpbGVcIiBjbGFzcz1cInJvd1wiPlxuICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIGNvbC1sZy1tYXhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLS1mdWxscGFnZVwiICpuZ0lmPVwiZGV2aWNlUHJvZmlsZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgYmctbGV2ZWwtMSBmbGV4LW5vLXNocmluayBwLXQtMjQgcC1iLTI0IG92ZXJmbG93LXZpc2libGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtZmxleC03MFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJjOHktaWNvbi1kdW9jb2xvciBpY29uLTQ4IGM4eS1pY29uIGM4eS1pY29uLWRldmljZS1wcm9maWxlXCI+PC9pPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm9cIj57eyAnRGV2aWNlIHByb2ZpbGUnIHwgdHJhbnNsYXRlIH19PC9zbWFsbD5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93IGNvbC0xMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSAjZWRpdE5hbWVGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiB0cmFuc2xhdGU+TmFtZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1lZGl0YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkZXZpY2VQcm9maWxlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLiBNeSBkZXZpY2UgcHJvZmlsZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInt7IGRldmljZVByb2ZpbGUubmFtZT8ubGVuZ3RoIHx8IDEgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZURldmljZVByb2ZpbGUoeyBuYW1lOiBkZXZpY2VQcm9maWxlLm5hbWUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdE5hbWVGb3JtLmZvcm0ubWFya0FzUHJpc3RpbmUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZWRpdE5hbWVGb3JtLmZvcm0uaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwieyBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BQ1RJT05TLlNBVkUgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSAjZWRpdFR5cGVGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAnRGV2aWNlIHR5cGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwb3BvdmVyXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoREVWSUNFX1RZUEVfUE9QT1ZFUiB8IHRyYW5zbGF0ZSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoaXNEZXZpY2VQcm9maWxlRW1wdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcgJyArIChERVZJQ0VfVFlQRV9ESVNBQkxFRF9QT1BPVkVSIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJycpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1lZGl0YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkZXZpY2VQcm9maWxlLmM4eV9GaWx0ZXIudHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuJyB8IHRyYW5zbGF0ZSB9fSBjOHlfTGludXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInt7IGRldmljZVByb2ZpbGUuYzh5X0ZpbHRlci50eXBlPy5sZW5ndGggfHwgMTQgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGV2aWNlUHJvZmlsZUVtcHR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZURldmljZVByb2ZpbGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzh5X0ZpbHRlcjogeyB0eXBlOiBkZXZpY2VQcm9maWxlLmM4eV9GaWx0ZXIudHlwZSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdFR5cGVGb3JtLmZvcm0ubWFya0FzUHJpc3RpbmUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEZXZpY2VQcm9maWxlRW1wdHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cInsgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQUNUSU9OUy5TQVZFIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImlubmVyLXNjcm9sbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgc2VwYXJhdG9yLXRvcC1ib3R0b20gYmctY29udGVudCBzdGlja3ktdG9wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiPlxuICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2M4eS1maXJtd2FyZSdcIiBjbGFzcz1cImM4eS1pY29uLWR1b2NvbG9yXCI+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCIgdHJhbnNsYXRlPkZpcm13YXJlPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBwLXQtMFwiICpuZ0lmPVwiZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5maXJtd2FyZVwiPlxuICAgICAgICAgIDxjOHktbGlzdC1ncm91cD5cbiAgICAgICAgICAgIDxjOHktbGk+XG4gICAgICAgICAgICAgIDxjOHktbGktaWNvbj5cbiAgICAgICAgICAgICAgICA8aSBbYzh5SWNvbl09XCInYzh5LWZpcm13YXJlJ1wiPjwvaT5cbiAgICAgICAgICAgICAgPC9jOHktbGktaWNvbj5cbiAgICAgICAgICAgICAgPGM4eS1saS1ib2R5IGNsYXNzPVwiY29udGVudC1mbGV4LTUwIG0tbC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IGRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuZmlybXdhcmUubmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuZmlybXdhcmUubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSBkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBkZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLmZpcm13YXJlLnZlcnNpb24gfX1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1yLTRcIiB0cmFuc2xhdGU+VmVyc2lvbjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge3sgZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5maXJtd2FyZS52ZXJzaW9uIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLXhzIHZpc2libGUteHMgbS1sLWF1dG8gbS1yLTggbS10LThcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVtb3ZlYGZpcm13YXJlYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmlybXdhcmUoKVwiXG4gICAgICAgICAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFDVElPTlMuUkVNT1ZFLFxuICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuRlJBR01FTlRTLkZJUk1XQVJFXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibWludXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyAnUmVtb3ZlYGZpcm13YXJlYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWwtYXV0byBwLXItOCBoaWRkZW4teHNcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBzaG93T25Ib3ZlciB0ZXh0LWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmVgZmlybXdhcmVgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnUmVtb3ZlYGZpcm13YXJlYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmlybXdhcmUoKVwiXG4gICAgICAgICAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFDVElPTlMuUkVNT1ZFLFxuICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuRlJBR01FTlRTLkZJUk1XQVJFXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibWludXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvYzh5LWxpLWJvZHk+XG4gICAgICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgICA8L2M4eS1saXN0LWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgcC10LTE2XCIgKm5nSWY9XCIhZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5maXJtd2FyZVwiPlxuICAgICAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgICAgIGljb249XCJjOHktZmlybXdhcmVcIlxuICAgICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ05vIGZpcm13YXJlIGRlZmluZWQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBjbGFzcz1cInAtdC0xNiBkLWJsb2NrXCJcbiAgICAgICAgICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgcC10LTBcIiAqbmdJZj1cIiFkZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLmZpcm13YXJlXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdBZGQgZmlybXdhcmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZGRGaXJtd2FyZSgpXCJcbiAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFDVElPTlMuQURELFxuICAgICAgICAgICAgICBmcmFnbWVudDogUFJPRFVDVF9FWFBFUklFTkNFLkZSQUdNRU5UUy5GSVJNV0FSRVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAge3sgJ0FkZCBmaXJtd2FyZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvci10b3AtYm90dG9tIHN0aWNreS10b3AgYmctY29tcG9uZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiPlxuICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2M4eS10b29scydcIiBjbGFzcz1cImM4eS1pY29uLWR1b2NvbG9yXCI+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCIgdHJhbnNsYXRlPlNvZnR3YXJlPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBwLXQtMFwiICpuZ0lmPVwiZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5zb2Z0d2FyZT8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxjOHktbGlzdC1ncm91cD5cbiAgICAgICAgICAgIDxjOHktbGkgKm5nRm9yPVwibGV0IHNvZnR3YXJlIG9mIGRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuc29mdHdhcmVcIj5cbiAgICAgICAgICAgICAgPGM4eS1saS1pY29uPlxuICAgICAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidjOHktdG9vbHMnXCI+PC9pPlxuICAgICAgICAgICAgICA8L2M4eS1saS1pY29uPlxuICAgICAgICAgICAgICA8Yzh5LWxpLWJvZHkgY2xhc3M9XCJjb250ZW50LWZsZXgtNTAgbS1sLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZS13cmFwXCIgdGl0bGU9XCJ7eyBzb2Z0d2FyZS5uYW1lIH19XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNvZnR3YXJlLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgZC1mbGV4IGEtaS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZS13cmFwXCIgdGl0bGU9XCJ7eyBzb2Z0d2FyZS52ZXJzaW9uIH19XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLXItOFwiIHRyYW5zbGF0ZT5WZXJzaW9uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB7eyBzb2Z0d2FyZS52ZXJzaW9uIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLXhzIHZpc2libGUteHMgbS1sLWF1dG8gbS1yLTggbS10LThcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVtb3ZlYHNvZnR3YXJlYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAoKGNsaWNrKT1cInJlbW92ZUl0ZW0oc29mdHdhcmUsICdzb2Z0d2FyZScpXCJcbiAgICAgICAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFxuICAgICAgICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQUNUSU9OUy5SRU1PVkUsXG4gICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5GUkFHTUVOVFMuU09GVFdBUkVcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJtaW51cy1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdSZW1vdmVgc29mdHdhcmVgJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tbC1hdXRvIHAtci04IGhpZGRlbi14c1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IHNob3dPbkhvdmVyIHRleHQtZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlbW92ZWBzb2Z0d2FyZWAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cInt7ICdSZW1vdmVgc29mdHdhcmVgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVJdGVtKHNvZnR3YXJlLCAnc29mdHdhcmUnKVwiXG4gICAgICAgICAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFDVElPTlMuUkVNT1ZFLFxuICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuRlJBR01FTlRTLlNPRlRXQVJFXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibWludXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvYzh5LWxpLWJvZHk+XG4gICAgICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgICA8L2M4eS1saXN0LWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2FyZC1ibG9jayBwLXQtMTZcIlxuICAgICAgICAgICpuZ0lmPVwiZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5zb2Z0d2FyZT8ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgICAgIGljb249XCJjOHktdG9vbHNcIlxuICAgICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ05vIHNvZnR3YXJlIGRlZmluZWQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIHAtdC0wXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgbS1iLTBcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdBZGQgc29mdHdhcmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZGRTb2Z0d2FyZSgpXCJcbiAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFDVElPTlMuQURELFxuICAgICAgICAgICAgICBmcmFnbWVudDogUFJPRFVDVF9FWFBFUklFTkNFLkZSQUdNRU5UUy5TT0ZUV0FSRVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAge3sgJ0FkZCBzb2Z0d2FyZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvci10b3AtYm90dG9tIGJnLWNvbXBvbmVudCBzdGlja3ktdG9wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiPlxuICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2dlYXJzJ1wiIGNsYXNzPVwiYzh5LWljb24tZHVvY29sb3JcIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIiB0cmFuc2xhdGU+Q29uZmlndXJhdGlvbjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2FyZC1ibG9jayBwLXQtMFwiXG4gICAgICAgICAgKm5nSWY9XCJkZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLmNvbmZpZ3VyYXRpb24/Lmxlbmd0aCA+IDBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1saXN0LWdyb3VwPlxuICAgICAgICAgICAgPGM4eS1saSAqbmdGb3I9XCJsZXQgY29uZmlndXJhdGlvbiBvZiBkZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLmNvbmZpZ3VyYXRpb25cIj5cbiAgICAgICAgICAgICAgPGM4eS1saS1pY29uPlxuICAgICAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidnZWFycydcIj48L2k+XG4gICAgICAgICAgICAgIDwvYzh5LWxpLWljb24+XG4gICAgICAgICAgICAgIDxjOHktbGktYm9keSBjbGFzcz1cImNvbnRlbnQtZmxleC01MFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCIgdGl0bGU9XCJ7eyBjb25maWd1cmF0aW9uLm5hbWUgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgY29uZmlndXJhdGlvbi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IGQtZmxleCBhLWktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm9cIj57eyBjb25maWd1cmF0aW9uLnR5cGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLXhzIHZpc2libGUteHMgbS1sLWF1dG8gbS1yLTggbS10LThcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVtb3ZlYGNvbmZpZ3VyYXRpb25gJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVJdGVtKGNvbmZpZ3VyYXRpb24sICdjb25maWd1cmF0aW9uJylcIlxuICAgICAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BQ1RJT05TLlJFTU9WRSxcbiAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudDogUFJPRFVDVF9FWFBFUklFTkNFLkZSQUdNRU5UUy5DT05GR0lVUkFUSU9OXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibWludXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyAnUmVtb3ZlYGNvbmZpZ3VyYXRpb25gJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tbC1hdXRvIHAtci04IGhpZGRlbi14c1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IHNob3dPbkhvdmVyIHRleHQtZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlbW92ZWBjb25maWd1cmF0aW9uYCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwPVwie3sgJ1JlbW92ZWBjb25maWd1cmF0aW9uYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlSXRlbShjb25maWd1cmF0aW9uLCAnY29uZmlndXJhdGlvbicpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFDVElPTlMuUkVNT1ZFLFxuICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuRlJBR01FTlRTLkNPTkZHSVVSQVRJT05cbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJtaW51cy1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9jOHktbGktYm9keT5cbiAgICAgICAgICAgIDwvYzh5LWxpPlxuICAgICAgICAgIDwvYzh5LWxpc3QtZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjYXJkLWJsb2NrIHAtdC0xNlwiXG4gICAgICAgICAgKm5nSWY9XCJkZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLmNvbmZpZ3VyYXRpb24/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICBpY29uPVwiZ2VhcnNcIlxuICAgICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ05vIGNvbmZpZ3VyYXRpb24gZGVmaW5lZC4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgcC10LTBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC10LThcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQWRkIGNvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG0tYi0wXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZENvbmZpZ3VyYXRpb24oKVwiXG4gICAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFDVElPTlMuQURELFxuICAgICAgICAgICAgICAgIGZyYWdtZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuRlJBR01FTlRTLkNPTkZHSVVSQVRJT05cbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAge3sgJ0FkZCBjb25maWd1cmF0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLXByb2ZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2aWNlLXByb2ZpbGUvZGV2aWNlLXByb2ZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2aWNlLXByb2ZpbGUvZGV2aWNlLXByb2ZpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBa0IsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFDTCxZQUFZLEVBQ1osT0FBTyxFQUNQLGtCQUFrQixFQUdsQiwrQkFBK0IsRUFDaEMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBRUwsOEJBQThCLEVBQzlCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2YsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBS0wsa0JBQWtCLEVBQ25CLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7Ozs7O0FBWTNGLE1BQU0sT0FBTyxzQkFBc0I7SUFrQmpDLFlBQ1UsS0FBcUIsRUFDckIsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLE9B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LEVBQUUsRUFBRSxDQUFDO2lCQUMzRSxDQUNGLENBQUM7YUFDSDtTQUNGO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOzttSEF4UlUsc0JBQXNCO3VHQUF0QixzQkFBc0IsNkNBUHRCO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsK0JBQStCO1lBQ3hDLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUM7U0FDdEQ7S0FDRiwwQkN0Q0gsNjJoQkFrWkE7MkZEMVdhLHNCQUFzQjtrQkFWbEMsU0FBUzsrQkFDRSxvQkFBb0IsYUFFbkI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLCtCQUErQjs0QkFDeEMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUM7eUJBQ3REO3FCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlLCBRdWVyaWVzVXRpbCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgTW9kYWxTZWxlY3Rpb25Nb2RlLFxuICBQcm9kdWN0RXhwZXJpZW5jZUV2ZW50LFxuICBQcm9kdWN0RXhwZXJpZW5jZUV2ZW50U291cmNlLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0VfRVZFTlRfU09VUkNFXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgRmlsdGVyQ3JpdGVyaWEsXG4gIFJlcG9zaXRvcnlTZWxlY3RNb2RhbENvbXBvbmVudCxcbiAgUmVwb3NpdG9yeVNlcnZpY2UsXG4gIFJlcG9zaXRvcnlUeXBlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvcmVwb3NpdG9yeS9zaGFyZWQnO1xuaW1wb3J0IHsgYXNzaWduLCBjb25jYXQsIGhhcywgaXNFbXB0eSwgaXNFcXVhbCwgdW5pcVdpdGggfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIERldmljZVByb2ZpbGUsXG4gIERldmljZVByb2ZpbGVDb25maWd1cmF0aW9uLFxuICBEZXZpY2VQcm9maWxlRmlybXdhcmUsXG4gIERldmljZVByb2ZpbGVTb2Z0d2FyZSxcbiAgUFJPRFVDVF9FWFBFUklFTkNFXG59IGZyb20gJy4vZGV2aWNlLXByb2ZpbGUubW9kZWwnO1xuaW1wb3J0IHsgU2VsZWN0Q29uZmlndXJhdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9zZWxlY3QtY29uZmlndXJhdGlvbi1tb2RhbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGV2aWNlLXByb2ZpbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGV2aWNlLXByb2ZpbGUuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBQUk9EVUNUX0VYUEVSSUVOQ0VfRVZFTlRfU09VUkNFLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGV2aWNlUHJvZmlsZUNvbXBvbmVudClcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGV2aWNlUHJvZmlsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgUHJvZHVjdEV4cGVyaWVuY2VFdmVudFNvdXJjZSB7XG4gIERFVklDRV9UWVBFX1BPUE9WRVIgPSBnZXR0ZXh0KFxuICAgICdUaGUgZGV2aWNlIHByb2ZpbGUgd2lsbCBiZSBhdmFpbGFibGUgZm9yIGFzc2lnbm1lbnRzIG9uIGRldmljZXMgb2YgdGhlIHNwZWNpZmllZCB0eXBlLiBPdGhlcndpc2UsIGl0IHdpbGwgYmUgYXZhaWxhYmxlIGZvciBhbGwgZGV2aWNlIHR5cGVzLidcbiAgKTtcbiAgREVWSUNFX1RZUEVfRElTQUJMRURfUE9QT1ZFUiA9IGdldHRleHQoXG4gICAgJ0RldmljZSB0eXBlIGNhbm5vdCBiZSBjaGFuZ2VkIG9uIHByb2ZpbGVzIHdpdGggYWxyZWFkeSBkZWZpbmVkIGZpcm13YXJlLCBzb2Z0d2FyZSBvciBjb25maWd1cmF0aW9uIHNpbmNlIHRoZXkgbWF5IG5vdCBiZSBhcHBsaWNhYmxlIHRvIGRldmljZXMgb2YgdGhlIG5ldyBkZXZpY2UgdHlwZS4nXG4gICk7XG4gIFBST0RVQ1RfRVhQRVJJRU5DRSA9IFBST0RVQ1RfRVhQRVJJRU5DRTtcbiAgZGV2aWNlUHJvZmlsZTogRGV2aWNlUHJvZmlsZTtcbiAgcHJvZmlsZU5hbWU6IHN0cmluZztcbiAgcHJvZHVjdEV4cGVyaWVuY2VFdmVudDogUHJvZHVjdEV4cGVyaWVuY2VFdmVudCA9IHtcbiAgICBldmVudE5hbWU6IFBST0RVQ1RfRVhQRVJJRU5DRS5FVkVOVFMuUkVQT1NJVE9SWSxcbiAgICBkYXRhOiB7XG4gICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5DT01QT05FTlRTLkRFVklDRV9QUk9GSUxFXG4gICAgfVxuICB9O1xuICBwcml2YXRlIHF1ZXJpZXNVdGlsOiBRdWVyaWVzVXRpbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGJzTW9kYWw6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVwb3NpdG9yeVNlcnZpY2U6IFJlcG9zaXRvcnlTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMucXVlcmllc1V0aWwgPSBuZXcgUXVlcmllc1V0aWwoKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHByb2ZpbGVJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpO1xuICAgIHRoaXMuZGV2aWNlUHJvZmlsZSA9IChhd2FpdCB0aGlzLmdldERldmljZVByb2ZpbGUocHJvZmlsZUlkKSkgYXMgRGV2aWNlUHJvZmlsZTtcbiAgICBpZiAodGhpcy5kZXZpY2VQcm9maWxlKSB7XG4gICAgICB0aGlzLnByb2ZpbGVOYW1lID0gdGhpcy5kZXZpY2VQcm9maWxlLm5hbWU7XG4gICAgICBpZiAoIXRoaXMuZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5zb2Z0d2FyZSkge1xuICAgICAgICB0aGlzLmRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuc29mdHdhcmUgPSBbXTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5kZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLmNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgdGhpcy5kZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLmNvbmZpZ3VyYXRpb24gPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRGaXJtd2FyZSgpIHtcbiAgICBjb25zdCBpbml0aWFsU3RhdGU6IFBhcnRpYWw8UmVwb3NpdG9yeVNlbGVjdE1vZGFsQ29tcG9uZW50PiAmIHtcbiAgICAgIHJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zRm4kOiAobW9kYWw6IGFueSkgPT4gT2JzZXJ2YWJsZTxJTWFuYWdlZE9iamVjdFtdPjtcbiAgICB9ID0ge1xuICAgICAgZGV2aWNlVHlwZVF1ZXJ5OiB0aGlzLmdldERldmljZVR5cGVRdWVyeShSZXBvc2l0b3J5VHlwZS5GSVJNV0FSRSksXG4gICAgICByZXBvc2l0b3J5VHlwZTogUmVwb3NpdG9yeVR5cGUuRklSTVdBUkUsXG4gICAgICByZXBvc2l0b3J5RW50cmllc1dpdGhWZXJzaW9uc0ZuJDogbW9kYWxEaWFsb2cgPT5cbiAgICAgICAgdGhpcy5nZXRSZXBvc2l0b3J5RW50cmllc1dpdGhWZXJzaW9ucyQoXG4gICAgICAgICAgbW9kYWxEaWFsb2cuY29udGVudC5zZWFyY2hUZXJtLFxuICAgICAgICAgIFJlcG9zaXRvcnlUeXBlLkZJUk1XQVJFXG4gICAgICAgICksXG4gICAgICBpY29uOiAnYzh5LWZpcm13YXJlJyxcbiAgICAgIHRpdGxlOiBnZXR0ZXh0KCdTZWxlY3QgZmlybXdhcmUnKSxcbiAgICAgIG1vZGU6IE1vZGFsU2VsZWN0aW9uTW9kZS5TSU5HTEUsXG4gICAgICBwcm9kdWN0RXhwZXJpZW5jZUV2ZW50OiB0aGlzLnByb2R1Y3RFeHBlcmllbmNlRXZlbnRcbiAgICB9O1xuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5ic01vZGFsLnNob3coUmVwb3NpdG9yeVNlbGVjdE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICBpbml0aWFsU3RhdGVcbiAgICB9KTtcblxuICAgIGlmIChpbml0aWFsU3RhdGUucmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnNGbiQpIHtcbiAgICAgIG1vZGFsLmNvbnRlbnQucmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnMkID1cbiAgICAgICAgaW5pdGlhbFN0YXRlLnJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zRm4kKG1vZGFsKTtcbiAgICB9XG5cbiAgICBtb2RhbC5jb250ZW50LmxvYWQubmV4dCgpO1xuICAgIG1vZGFsLmNvbnRlbnQucmVzdWx0RW1pdHRlci5waXBlKHRha2UoMSkpLnN1YnNjcmliZShmaXJtd2FyZUxpc3QgPT4ge1xuICAgICAgY29uc3QgW2Zpcm13YXJlXSA9IGZpcm13YXJlTGlzdDtcbiAgICAgIGlmICghZmlybXdhcmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGV2aWNlUHJvZmlsZVBhcnRpYWw6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+ID0ge1xuICAgICAgICBjOHlfRGV2aWNlUHJvZmlsZTogdGhpcy5kZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlIHx8IHt9XG4gICAgICB9O1xuICAgICAgYXNzaWduKGRldmljZVByb2ZpbGVQYXJ0aWFsLmM4eV9EZXZpY2VQcm9maWxlLCB7XG4gICAgICAgIGZpcm13YXJlOiB7XG4gICAgICAgICAgbmFtZTogZmlybXdhcmUubmFtZSxcbiAgICAgICAgICB2ZXJzaW9uOiBmaXJtd2FyZS52ZXJzaW9uLFxuICAgICAgICAgIHVybDogZmlybXdhcmUudXJsLFxuICAgICAgICAgIGlzUGF0Y2g6IGZpcm13YXJlLmlzUGF0Y2gsXG4gICAgICAgICAgcGF0Y2hEZXBlbmRlbmN5OiBmaXJtd2FyZS5wYXRjaERlcGVuZGVuY3lcbiAgICAgICAgfSBhcyBEZXZpY2VQcm9maWxlRmlybXdhcmVcbiAgICAgIH0pO1xuICAgICAgdGhpcy51cGRhdGVEZXZpY2VQcm9maWxlKGRldmljZVByb2ZpbGVQYXJ0aWFsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zJChcbiAgICBzZWFyY2hUZXJtJDogQmVoYXZpb3JTdWJqZWN0PEZpbHRlckNyaXRlcmlhPixcbiAgICByZXBvVHlwZTogUmVwb3NpdG9yeVR5cGVcbiAgKSB7XG4gICAgcmV0dXJuIHNlYXJjaFRlcm0kLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKHNlYXJjaFRlcm0gPT5cbiAgICAgICAgdGhpcy5yZXBvc2l0b3J5U2VydmljZS5saXN0UmVwb3NpdG9yeUVudHJpZXMocmVwb1R5cGUsIHtcbiAgICAgICAgICBxdWVyeTogdGhpcy5nZXREZXZpY2VUeXBlUXVlcnkocmVwb1R5cGUpLFxuICAgICAgICAgIHBhcnRpYWxOYW1lOiBzZWFyY2hUZXJtLm5hbWUsXG4gICAgICAgICAgcGFyYW1zOiB7IHBhZ2VTaXplOiAxMDAgfSxcbiAgICAgICAgICBza2lwTGVnYWN5OiB0cnVlXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gZGF0YSksXG4gICAgICBtYXAobW9zID0+IHRoaXMuZ2V0QW5kQXNzaWduUmVwb3NpdG9yeUJpbmFyaWVzKG1vcykpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QW5kQXNzaWduUmVwb3NpdG9yeUJpbmFyaWVzKG1vczogSU1hbmFnZWRPYmplY3RbXSkge1xuICAgIG1vcy5mb3JFYWNoKG1vID0+IHtcbiAgICAgIG1vLnZlcnNpb25zID0gdGhpcy5yZXBvc2l0b3J5U2VydmljZS5saXN0QmFzZVZlcnNpb25zKG1vKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbW9zO1xuICB9XG5cbiAgYWRkQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBtb2RhbCA9IHRoaXMuYnNNb2RhbC5zaG93KFNlbGVjdENvbmZpZ3VyYXRpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgIHByb2R1Y3RFeHBlcmllbmNlRXZlbnQ6IHRoaXMucHJvZHVjdEV4cGVyaWVuY2VFdmVudFxuICAgICAgfVxuICAgIH0pO1xuICAgIG1vZGFsLmNvbnRlbnQuZGV2aWNlVHlwZVF1ZXJ5ID0gdGhpcy5nZXREZXZpY2VUeXBlUXVlcnkoUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTik7XG4gICAgbW9kYWwuY29udGVudC5zZWxlY3RlZCA9IHRoaXMuZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5jb25maWd1cmF0aW9uO1xuICAgIG1vZGFsLmNvbnRlbnQubG9hZC5uZXh0KCk7XG4gICAgbW9kYWwuY29udGVudC5yZXN1bHRFbWl0dGVyLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHNlbGVjdGVkQ29uZmlndXJhdGlvbnMgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRNYXBwZWQ6IERldmljZVByb2ZpbGVDb25maWd1cmF0aW9uW10gPSBzZWxlY3RlZENvbmZpZ3VyYXRpb25zLm1hcChcbiAgICAgICAgc2VsZWN0ZWRJdGVtID0+IHtcbiAgICAgICAgICByZXR1cm4gYXNzaWduKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB1cmw6IHNlbGVjdGVkSXRlbS51cmwsXG4gICAgICAgICAgICAgIG5hbWU6IHNlbGVjdGVkSXRlbS5uYW1lXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLmNvbmZpZ3VyYXRpb25UeXBlID8geyB0eXBlOiBzZWxlY3RlZEl0ZW0uY29uZmlndXJhdGlvblR5cGUgfSA6IHt9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1lcmdlZDogRGV2aWNlUHJvZmlsZUNvbmZpZ3VyYXRpb24gPSBjb25jYXQoXG4gICAgICAgIHNlbGVjdGVkTWFwcGVkLFxuICAgICAgICB0aGlzLmRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuY29uZmlndXJhdGlvbiB8fCBbXVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb246IERldmljZVByb2ZpbGVDb25maWd1cmF0aW9uID0gdW5pcVdpdGgobWVyZ2VkLCAoYXJyVmFsLCBvdGhWYWwpID0+IHtcbiAgICAgICAgcmV0dXJuIGFyclZhbC50eXBlICYmIG90aFZhbC50eXBlICYmIGFyclZhbC50eXBlID09PSBvdGhWYWwudHlwZTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGV2aWNlUHJvZmlsZVBhcnRpYWw6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+ID0ge1xuICAgICAgICBjOHlfRGV2aWNlUHJvZmlsZTogdGhpcy5kZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlIHx8IHt9XG4gICAgICB9O1xuICAgICAgYXNzaWduKGRldmljZVByb2ZpbGVQYXJ0aWFsLmM4eV9EZXZpY2VQcm9maWxlLCB7IGNvbmZpZ3VyYXRpb24gfSk7XG4gICAgICB0aGlzLnVwZGF0ZURldmljZVByb2ZpbGUoZGV2aWNlUHJvZmlsZVBhcnRpYWwpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkU29mdHdhcmUoKSB7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlOiBQYXJ0aWFsPFJlcG9zaXRvcnlTZWxlY3RNb2RhbENvbXBvbmVudD4gJiB7XG4gICAgICByZXBvc2l0b3J5RW50cmllc1dpdGhWZXJzaW9uc0ZuJDogKG1vZGFsOiBhbnkpID0+IE9ic2VydmFibGU8SU1hbmFnZWRPYmplY3RbXT47XG4gICAgfSA9IHtcbiAgICAgIGRldmljZVR5cGVRdWVyeTogdGhpcy5nZXREZXZpY2VUeXBlUXVlcnkoUmVwb3NpdG9yeVR5cGUuU09GVFdBUkUpLFxuICAgICAgcmVwb3NpdG9yeVR5cGU6IFJlcG9zaXRvcnlUeXBlLlNPRlRXQVJFLFxuICAgICAgcmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnNGbiQ6IG1vZGFsRGlhbG9nID0+XG4gICAgICAgIHRoaXMuZ2V0UmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnMkKFxuICAgICAgICAgIG1vZGFsRGlhbG9nLmNvbnRlbnQuc2VhcmNoVGVybSxcbiAgICAgICAgICBSZXBvc2l0b3J5VHlwZS5TT0ZUV0FSRVxuICAgICAgICApLFxuICAgICAgc2VsZWN0ZWQ6IHRoaXMuZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5zb2Z0d2FyZSxcbiAgICAgIGljb246ICdjOHktdG9vbHMnLFxuICAgICAgdGl0bGU6IGdldHRleHQoJ1NlbGVjdCBzb2Z0d2FyZScpLFxuICAgICAgbW9kZTogTW9kYWxTZWxlY3Rpb25Nb2RlLk1VTFRJLFxuICAgICAgcHJvZHVjdEV4cGVyaWVuY2VFdmVudDogdGhpcy5wcm9kdWN0RXhwZXJpZW5jZUV2ZW50XG4gICAgfTtcbiAgICBjb25zdCBtb2RhbCA9IHRoaXMuYnNNb2RhbC5zaG93KFJlcG9zaXRvcnlTZWxlY3RNb2RhbENvbXBvbmVudCwge1xuICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgaW5pdGlhbFN0YXRlXG4gICAgfSk7XG5cbiAgICBpZiAoaW5pdGlhbFN0YXRlLnJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zRm4kKSB7XG4gICAgICBtb2RhbC5jb250ZW50LnJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zJCA9XG4gICAgICAgIGluaXRpYWxTdGF0ZS5yZXBvc2l0b3J5RW50cmllc1dpdGhWZXJzaW9uc0ZuJChtb2RhbCk7XG4gICAgfVxuXG4gICAgbW9kYWwuY29udGVudC5sb2FkLm5leHQoKTtcbiAgICBtb2RhbC5jb250ZW50LnJlc3VsdEVtaXR0ZXIucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoc2VsZWN0ZWRTb2Z0d2FyZSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZE1hcHBlZDogRGV2aWNlUHJvZmlsZVNvZnR3YXJlW10gPSBzZWxlY3RlZFNvZnR3YXJlLm1hcChzZWxlY3RlZEl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IHNlbGVjdGVkSXRlbS5uYW1lLFxuICAgICAgICAgIHZlcnNpb246IHNlbGVjdGVkSXRlbS52ZXJzaW9uLFxuICAgICAgICAgIHVybDogc2VsZWN0ZWRJdGVtLnVybCxcbiAgICAgICAgICBhY3Rpb246ICdpbnN0YWxsJ1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBjb25zdCBtZXJnZWQ6IERldmljZVByb2ZpbGVTb2Z0d2FyZSA9IGNvbmNhdChcbiAgICAgICAgc2VsZWN0ZWRNYXBwZWQsXG4gICAgICAgIHRoaXMuZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5zb2Z0d2FyZSB8fCBbXVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNvZnR3YXJlOiBEZXZpY2VQcm9maWxlU29mdHdhcmUgPSB1bmlxV2l0aChtZXJnZWQsIChhcnJWYWwsIG90aFZhbCkgPT4ge1xuICAgICAgICByZXR1cm4gYXJyVmFsLm5hbWUgJiYgb3RoVmFsLm5hbWUgJiYgYXJyVmFsLm5hbWUgPT09IG90aFZhbC5uYW1lO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXZpY2VQcm9maWxlUGFydGlhbDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7XG4gICAgICAgIGM4eV9EZXZpY2VQcm9maWxlOiB0aGlzLmRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUgfHwge31cbiAgICAgIH07XG4gICAgICBhc3NpZ24oZGV2aWNlUHJvZmlsZVBhcnRpYWwuYzh5X0RldmljZVByb2ZpbGUsIHsgc29mdHdhcmUgfSk7XG4gICAgICB0aGlzLnVwZGF0ZURldmljZVByb2ZpbGUoZGV2aWNlUHJvZmlsZVBhcnRpYWwpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGlzRGV2aWNlUHJvZmlsZUVtcHR5KCkge1xuICAgIGNvbnN0IGlzU29mdHdhcmUgPVxuICAgICAgdGhpcy5kZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLnNvZnR3YXJlICYmXG4gICAgICB0aGlzLmRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuc29mdHdhcmUubGVuZ3RoID4gMDtcbiAgICBjb25zdCBpc0Zpcm13YXJlID0gQm9vbGVhbih0aGlzLmRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuZmlybXdhcmUpO1xuICAgIGNvbnN0IGlzQ29uZmlndXJhdGlvbiA9XG4gICAgICB0aGlzLmRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuY29uZmlndXJhdGlvbiAmJlxuICAgICAgdGhpcy5kZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLmNvbmZpZ3VyYXRpb24ubGVuZ3RoID4gMDtcbiAgICByZXR1cm4gaXNTb2Z0d2FyZSB8fCBpc0Zpcm13YXJlIHx8IGlzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHJlbW92ZUl0ZW0ocmVtb3ZlZEl0ZW0sIGNhdGVnb3J5KSB7XG4gICAgY29uc3QgZGV2aWNlUHJvZmlsZVBhcnRpYWw6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+ID0ge1xuICAgICAgYzh5X0RldmljZVByb2ZpbGU6IHRoaXMuZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZVxuICAgIH07XG4gICAgY29uc3QgZmlsdGVyZWQgPSBkZXZpY2VQcm9maWxlUGFydGlhbC5jOHlfRGV2aWNlUHJvZmlsZVtjYXRlZ29yeV0uZmlsdGVyKFxuICAgICAgaXRlbSA9PiAhaXNFcXVhbChyZW1vdmVkSXRlbSwgaXRlbSlcbiAgICApO1xuICAgIGRldmljZVByb2ZpbGVQYXJ0aWFsLmM4eV9EZXZpY2VQcm9maWxlW2NhdGVnb3J5XSA9IGZpbHRlcmVkO1xuICAgIHRoaXMudXBkYXRlRGV2aWNlUHJvZmlsZShkZXZpY2VQcm9maWxlUGFydGlhbCk7XG4gIH1cblxuICByZW1vdmVGaXJtd2FyZSgpIHtcbiAgICBkZWxldGUgdGhpcy5kZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLmZpcm13YXJlO1xuICAgIHRoaXMudXBkYXRlRGV2aWNlUHJvZmlsZSh7IGM4eV9EZXZpY2VQcm9maWxlOiB0aGlzLmRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUgfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEZXZpY2VQcm9maWxlKHBhcnRpYWxEZXZpY2VQcm9maWxlKSB7XG4gICAgaWYgKHBhcnRpYWxEZXZpY2VQcm9maWxlLmM4eV9GaWx0ZXIgJiYgcGFydGlhbERldmljZVByb2ZpbGUuYzh5X0ZpbHRlci50eXBlID09PSAnJykge1xuICAgICAgZGVsZXRlIHBhcnRpYWxEZXZpY2VQcm9maWxlLmM4eV9GaWx0ZXIudHlwZTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihwYXJ0aWFsRGV2aWNlUHJvZmlsZSwgeyBpZDogdGhpcy5kZXZpY2VQcm9maWxlLmlkIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS51cGRhdGUocGFydGlhbERldmljZVByb2ZpbGUpO1xuICAgICAgdGhpcy5kZXZpY2VQcm9maWxlID0gZGF0YSBhcyBEZXZpY2VQcm9maWxlO1xuICAgICAgdGhpcy5wcm9maWxlTmFtZSA9IHRoaXMuZGV2aWNlUHJvZmlsZS5uYW1lO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdEZXZpY2UgcHJvZmlsZSBjaGFuZ2VkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXREZXZpY2VQcm9maWxlKHByb2ZpbGVJZCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwocHJvZmlsZUlkKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldERldmljZVR5cGVRdWVyeShyZXBvc2l0b3J5VHlwZSkge1xuICAgIGlmIChcbiAgICAgIGhhcyh0aGlzLmRldmljZVByb2ZpbGUsICdjOHlfRmlsdGVyLnR5cGUnKSAmJlxuICAgICAgIWlzRW1wdHkodGhpcy5kZXZpY2VQcm9maWxlLmM4eV9GaWx0ZXIudHlwZSlcbiAgICApIHtcbiAgICAgIGlmIChyZXBvc2l0b3J5VHlwZSA9PT0gUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTikge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyaWVzVXRpbC5hZGRPckZpbHRlcihcbiAgICAgICAgICB7IGRldmljZVR5cGU6IHRoaXMuZGV2aWNlUHJvZmlsZS5jOHlfRmlsdGVyLnR5cGUgfSxcbiAgICAgICAgICB7IF9fbm90OiB7IF9faGFzOiBgZGV2aWNlVHlwZWAgfSB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyaWVzVXRpbC5hZGRPckZpbHRlcihcbiAgICAgICAgICB7ICdjOHlfRmlsdGVyLnR5cGUnOiB0aGlzLmRldmljZVByb2ZpbGUuYzh5X0ZpbHRlci50eXBlIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgX19vcjogW3sgJ2M4eV9GaWx0ZXIudHlwZSc6ICcnIH0sIHsgX19ub3Q6IHsgX19oYXM6IGBjOHlfRmlsdGVyLnR5cGVgIH0gfV1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT57eyBwcm9maWxlTmFtZSB9fTwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgbGFiZWw9XCJ7eyAnTWFuYWdlbWVudCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIGljb249XCJjOHktbWFuYWdlbWVudFwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ2M4eS1kZXZpY2UtcHJvZmlsZSdcIlxuICAgIFtsYWJlbF09XCInRGV2aWNlIHByb2ZpbGVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJ2RldmljZS1wcm9maWxlcydcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBsYWJlbD1cInt7IHByb2ZpbGVOYW1lIH19XCIgaWNvbj1cImM4eS1kZXZpY2UtcHJvZmlsZVwiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxkaXYgKm5nSWY9XCJkZXZpY2VQcm9maWxlXCIgY2xhc3M9XCJyb3dcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBjb2wtbGctbWF4XCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC0tZnVsbHBhZ2VcIiAqbmdJZj1cImRldmljZVByb2ZpbGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIGJnLWxldmVsLTEgZmxleC1uby1zaHJpbmsgcC10LTI0IHAtYi0yNCBvdmVyZmxvdy12aXNpYmxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWZsZXgtNzBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiYzh5LWljb24tZHVvY29sb3IgaWNvbi00OCBjOHktaWNvbiBjOHktaWNvbi1kZXZpY2UtcHJvZmlsZVwiPjwvaT5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+e3sgJ0RldmljZSBwcm9maWxlJyB8IHRyYW5zbGF0ZSB9fTwvc21hbGw+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3JvdyBjb2wtMTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgICAgPGZvcm0gI2VkaXROYW1lRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCIgdHJhbnNsYXRlPk5hbWU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtZWRpdGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGV2aWNlUHJvZmlsZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gTXkgZGV2aWNlIHByb2ZpbGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ7eyBkZXZpY2VQcm9maWxlLm5hbWU/Lmxlbmd0aCB8fCAxIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVEZXZpY2VQcm9maWxlKHsgbmFtZTogZGV2aWNlUHJvZmlsZS5uYW1lIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXROYW1lRm9ybS5mb3JtLm1hcmtBc1ByaXN0aW5lKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImVkaXROYW1lRm9ybS5mb3JtLmludmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cInsgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQUNUSU9OUy5TQVZFIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgICAgPGZvcm0gI2VkaXRUeXBlRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ0RldmljZSB0eXBlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKERFVklDRV9UWVBFX1BPUE9WRVIgfCB0cmFuc2xhdGUpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzRGV2aWNlUHJvZmlsZUVtcHR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnICcgKyAoREVWSUNFX1RZUEVfRElTQUJMRURfUE9QT1ZFUiB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtZWRpdGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGV2aWNlUHJvZmlsZS5jOHlfRmlsdGVyLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLicgfCB0cmFuc2xhdGUgfX0gYzh5X0xpbnV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ7eyBkZXZpY2VQcm9maWxlLmM4eV9GaWx0ZXIudHlwZT8ubGVuZ3RoIHx8IDE0IH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0RldmljZVByb2ZpbGVFbXB0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVEZXZpY2VQcm9maWxlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM4eV9GaWx0ZXI6IHsgdHlwZTogZGV2aWNlUHJvZmlsZS5jOHlfRmlsdGVyLnR5cGUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRUeXBlRm9ybS5mb3JtLm1hcmtBc1ByaXN0aW5lKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGV2aWNlUHJvZmlsZUVtcHR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7IGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFDVElPTlMuU0FWRSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvci10b3AtYm90dG9tIGJnLWNvbnRlbnQgc3RpY2t5LXRvcFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWljb25cIj5cbiAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidjOHktZmlybXdhcmUnXCIgY2xhc3M9XCJjOHktaWNvbi1kdW9jb2xvclwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZVwiIHRyYW5zbGF0ZT5GaXJtd2FyZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgcC10LTBcIiAqbmdJZj1cImRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuZmlybXdhcmVcIj5cbiAgICAgICAgICA8Yzh5LWxpc3QtZ3JvdXA+XG4gICAgICAgICAgICA8Yzh5LWxpPlxuICAgICAgICAgICAgICA8Yzh5LWxpLWljb24+XG4gICAgICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2M4eS1maXJtd2FyZSdcIj48L2k+XG4gICAgICAgICAgICAgIDwvYzh5LWxpLWljb24+XG4gICAgICAgICAgICAgIDxjOHktbGktYm9keSBjbGFzcz1cImNvbnRlbnQtZmxleC01MCBtLWwtNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBkZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLmZpcm13YXJlLm5hbWUgfX1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBkZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLmZpcm13YXJlLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgZC1mbGV4IGEtaS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5maXJtd2FyZS52ZXJzaW9uIH19XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tci00XCIgdHJhbnNsYXRlPlZlcnNpb248L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHt7IGRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuZmlybXdhcmUudmVyc2lvbiB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIGJ0bi14cyB2aXNpYmxlLXhzIG0tbC1hdXRvIG0tci04IG0tdC04XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1JlbW92ZWBmaXJtd2FyZWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZpcm13YXJlKClcIlxuICAgICAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BQ1RJT05TLlJFTU9WRSxcbiAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudDogUFJPRFVDVF9FWFBFUklFTkNFLkZSQUdNRU5UUy5GSVJNV0FSRVxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cIm1pbnVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgJ1JlbW92ZWBmaXJtd2FyZWAnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1sLWF1dG8gcC1yLTggaGlkZGVuLXhzXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3Qgc2hvd09uSG92ZXIgdGV4dC1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVtb3ZlYGZpcm13YXJlYCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwPVwie3sgJ1JlbW92ZWBmaXJtd2FyZWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZpcm13YXJlKClcIlxuICAgICAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BQ1RJT05TLlJFTU9WRSxcbiAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudDogUFJPRFVDVF9FWFBFUklFTkNFLkZSQUdNRU5UUy5GSVJNV0FSRVxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cIm1pbnVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2M4eS1saS1ib2R5PlxuICAgICAgICAgICAgPC9jOHktbGk+XG4gICAgICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHAtdC0xNlwiICpuZ0lmPVwiIWRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuZmlybXdhcmVcIj5cbiAgICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICBpY29uPVwiYzh5LWZpcm13YXJlXCJcbiAgICAgICAgICAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidObyBmaXJtd2FyZSBkZWZpbmVkLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJwLXQtMTYgZC1ibG9ja1wiXG4gICAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIHAtdC0wXCIgKm5nSWY9XCIhZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5maXJtd2FyZVwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQWRkIGZpcm13YXJlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkRmlybXdhcmUoKVwiXG4gICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgaW5oZXJpdFxuICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BQ1RJT05TLkFERCxcbiAgICAgICAgICAgICAgZnJhZ21lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5GUkFHTUVOVFMuRklSTVdBUkVcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgIHt7ICdBZGQgZmlybXdhcmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBzZXBhcmF0b3ItdG9wLWJvdHRvbSBzdGlja3ktdG9wIGJnLWNvbXBvbmVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWljb25cIj5cbiAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidjOHktdG9vbHMnXCIgY2xhc3M9XCJjOHktaWNvbi1kdW9jb2xvclwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZVwiIHRyYW5zbGF0ZT5Tb2Z0d2FyZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgcC10LTBcIiAqbmdJZj1cImRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuc29mdHdhcmU/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8Yzh5LWxpc3QtZ3JvdXA+XG4gICAgICAgICAgICA8Yzh5LWxpICpuZ0Zvcj1cImxldCBzb2Z0d2FyZSBvZiBkZXZpY2VQcm9maWxlLmM4eV9EZXZpY2VQcm9maWxlLnNvZnR3YXJlXCI+XG4gICAgICAgICAgICAgIDxjOHktbGktaWNvbj5cbiAgICAgICAgICAgICAgICA8aSBbYzh5SWNvbl09XCInYzh5LXRvb2xzJ1wiPjwvaT5cbiAgICAgICAgICAgICAgPC9jOHktbGktaWNvbj5cbiAgICAgICAgICAgICAgPGM4eS1saS1ib2R5IGNsYXNzPVwiY29udGVudC1mbGV4LTUwIG0tbC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGUtd3JhcFwiIHRpdGxlPVwie3sgc29mdHdhcmUubmFtZSB9fVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBzb2Z0d2FyZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IGQtZmxleCBhLWktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGUtd3JhcFwiIHRpdGxlPVwie3sgc29mdHdhcmUudmVyc2lvbiB9fVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1yLThcIiB0cmFuc2xhdGU+VmVyc2lvbjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge3sgc29mdHdhcmUudmVyc2lvbiB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIGJ0bi14cyB2aXNpYmxlLXhzIG0tbC1hdXRvIG0tci04IG0tdC04XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1JlbW92ZWBzb2Z0d2FyZWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgKChjbGljayk9XCJyZW1vdmVJdGVtKHNvZnR3YXJlLCAnc29mdHdhcmUnKVwiXG4gICAgICAgICAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFDVElPTlMuUkVNT1ZFLFxuICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuRlJBR01FTlRTLlNPRlRXQVJFXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibWludXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyAnUmVtb3ZlYHNvZnR3YXJlYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWwtYXV0byBwLXItOCBoaWRkZW4teHNcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBzaG93T25Ib3ZlciB0ZXh0LWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmVgc29mdHdhcmVgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnUmVtb3ZlYHNvZnR3YXJlYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlSXRlbShzb2Z0d2FyZSwgJ3NvZnR3YXJlJylcIlxuICAgICAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BQ1RJT05TLlJFTU9WRSxcbiAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudDogUFJPRFVDVF9FWFBFUklFTkNFLkZSQUdNRU5UUy5TT0ZUV0FSRVxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cIm1pbnVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2M4eS1saS1ib2R5PlxuICAgICAgICAgICAgPC9jOHktbGk+XG4gICAgICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNhcmQtYmxvY2sgcC10LTE2XCJcbiAgICAgICAgICAqbmdJZj1cImRldmljZVByb2ZpbGUuYzh5X0RldmljZVByb2ZpbGUuc29mdHdhcmU/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICBpY29uPVwiYzh5LXRvb2xzXCJcbiAgICAgICAgICAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidObyBzb2Z0d2FyZSBkZWZpbmVkLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBwLXQtMFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG0tYi0wXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQWRkIHNvZnR3YXJlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkU29mdHdhcmUoKVwiXG4gICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgaW5oZXJpdFxuICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BQ1RJT05TLkFERCxcbiAgICAgICAgICAgICAgZnJhZ21lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5GUkFHTUVOVFMuU09GVFdBUkVcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgIHt7ICdBZGQgc29mdHdhcmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBzZXBhcmF0b3ItdG9wLWJvdHRvbSBiZy1jb21wb25lbnQgc3RpY2t5LXRvcFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWljb25cIj5cbiAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidnZWFycydcIiBjbGFzcz1cImM4eS1pY29uLWR1b2NvbG9yXCI+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCIgdHJhbnNsYXRlPkNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNhcmQtYmxvY2sgcC10LTBcIlxuICAgICAgICAgICpuZ0lmPVwiZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5jb25maWd1cmF0aW9uPy5sZW5ndGggPiAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktbGlzdC1ncm91cD5cbiAgICAgICAgICAgIDxjOHktbGkgKm5nRm9yPVwibGV0IGNvbmZpZ3VyYXRpb24gb2YgZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5jb25maWd1cmF0aW9uXCI+XG4gICAgICAgICAgICAgIDxjOHktbGktaWNvbj5cbiAgICAgICAgICAgICAgICA8aSBbYzh5SWNvbl09XCInZ2VhcnMnXCI+PC9pPlxuICAgICAgICAgICAgICA8L2M4eS1saS1pY29uPlxuICAgICAgICAgICAgICA8Yzh5LWxpLWJvZHkgY2xhc3M9XCJjb250ZW50LWZsZXgtNTBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiIHRpdGxlPVwie3sgY29uZmlndXJhdGlvbi5uYW1lIH19XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbmZpZ3VyYXRpb24ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSBkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+e3sgY29uZmlndXJhdGlvbi50eXBlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIGJ0bi14cyB2aXNpYmxlLXhzIG0tbC1hdXRvIG0tci04IG0tdC04XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1JlbW92ZWBjb25maWd1cmF0aW9uYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlSXRlbShjb25maWd1cmF0aW9uLCAnY29uZmlndXJhdGlvbicpXCJcbiAgICAgICAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFxuICAgICAgICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQUNUSU9OUy5SRU1PVkUsXG4gICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5GUkFHTUVOVFMuQ09ORkdJVVJBVElPTlxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cIm1pbnVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgJ1JlbW92ZWBjb25maWd1cmF0aW9uYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWwtYXV0byBwLXItOCBoaWRkZW4teHNcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBzaG93T25Ib3ZlciB0ZXh0LWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmVgY29uZmlndXJhdGlvbmAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cInt7ICdSZW1vdmVgY29uZmlndXJhdGlvbmAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUl0ZW0oY29uZmlndXJhdGlvbiwgJ2NvbmZpZ3VyYXRpb24nKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BQ1RJT05TLlJFTU9WRSxcbiAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudDogUFJPRFVDVF9FWFBFUklFTkNFLkZSQUdNRU5UUy5DT05GR0lVUkFUSU9OXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibWludXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvYzh5LWxpLWJvZHk+XG4gICAgICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgICA8L2M4eS1saXN0LWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2FyZC1ibG9jayBwLXQtMTZcIlxuICAgICAgICAgICpuZ0lmPVwiZGV2aWNlUHJvZmlsZS5jOHlfRGV2aWNlUHJvZmlsZS5jb25maWd1cmF0aW9uPy5sZW5ndGggPT09IDBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICAgICAgaWNvbj1cImdlYXJzXCJcbiAgICAgICAgICAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidObyBjb25maWd1cmF0aW9uIGRlZmluZWQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIHAtdC0wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtdC04XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FkZCBjb25maWd1cmF0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBtLWItMFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGRDb25maWd1cmF0aW9uKClcIlxuICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgICAgICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BQ1RJT05TLkFERCxcbiAgICAgICAgICAgICAgICBmcmFnbWVudDogUFJPRFVDVF9FWFBFUklFTkNFLkZSQUdNRU5UUy5DT05GR0lVUkFUSU9OXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgIHt7ICdBZGQgY29uZmlndXJhdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -114,7 +114,7 @@ export class PluginListComponent {
|
|
|
114
114
|
if (updateType === 'install') {
|
|
115
115
|
this.appsDisabled.clear();
|
|
116
116
|
for (const app of apps) {
|
|
117
|
-
if (
|
|
117
|
+
if (this.isPluginInstalledInApp(plugin, app)) {
|
|
118
118
|
this.appsDisabled.add(app.id);
|
|
119
119
|
}
|
|
120
120
|
}
|
|
@@ -122,7 +122,7 @@ export class PluginListComponent {
|
|
|
122
122
|
if (updateType === 'uninstall') {
|
|
123
123
|
const installedApps = [];
|
|
124
124
|
for (const app of apps) {
|
|
125
|
-
if (
|
|
125
|
+
if (this.isPluginInstalledInApp(plugin, app)) {
|
|
126
126
|
installedApps.push(app);
|
|
127
127
|
}
|
|
128
128
|
}
|
|
@@ -130,11 +130,18 @@ export class PluginListComponent {
|
|
|
130
130
|
}
|
|
131
131
|
return apps;
|
|
132
132
|
}
|
|
133
|
-
|
|
133
|
+
isPluginInstalledInApp(plugin, app) {
|
|
134
134
|
const appRemotes = this.pluginsService.getMFRemotes(app) || {};
|
|
135
|
-
|
|
135
|
+
for (const [remoteName, modules] of Object.entries(appRemotes)) {
|
|
136
|
+
const pluginFromThisPackageIsInstalled = this.getPluginContextPathWithoutVersion(remoteName) === plugin.contextPath;
|
|
137
|
+
const specificPluginModuleIsInstalled = modules.some(module => module === plugin.module);
|
|
138
|
+
if (pluginFromThisPackageIsInstalled && specificPluginModuleIsInstalled) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return false;
|
|
136
143
|
}
|
|
137
|
-
|
|
144
|
+
getPluginContextPathWithoutVersion(remote) {
|
|
138
145
|
return remote.split('@')[0];
|
|
139
146
|
}
|
|
140
147
|
async handleRemotesUpdate(application, plugin, updateType) {
|
|
@@ -179,7 +186,8 @@ export class PluginListComponent {
|
|
|
179
186
|
ariaDescribedby: 'modal-body',
|
|
180
187
|
ariaLabelledBy: 'modal-title',
|
|
181
188
|
initialState,
|
|
182
|
-
ignoreBackdropClick: true
|
|
189
|
+
ignoreBackdropClick: true,
|
|
190
|
+
keyboard: false
|
|
183
191
|
}).content.result;
|
|
184
192
|
}
|
|
185
193
|
catch (er) {
|
|
@@ -205,4 +213,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
205
213
|
}], selectedItems: [{
|
|
206
214
|
type: Output
|
|
207
215
|
}] } });
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXBsdWdpbnMvcGx1Z2luLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXBsdWdpbnMvcGx1Z2luLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQTRCLGVBQWUsRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDdEYsT0FBTyxFQUNMLFlBQVksRUFFWixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7Ozs7QUFPL0YsTUFBTSxPQUFPLG1CQUFtQjtJQWlCOUIsWUFDVSxnQkFBa0MsRUFDbEMsY0FBOEIsRUFDOUIsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLGdCQUFrQztRQUxsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIs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LFVBQVUsQ0FDdEIsWUFHQztRQUVELElBQUk7WUFDRixPQUFPLE1BQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLEVBQUU7Z0JBQzNELEtBQUssRUFBRSxVQUFVO2dCQUNqQixlQUFlLEVBQUUsWUFBWTtnQkFDN0IsY0FBYyxFQUFFLGFBQWE7Z0JBQzdCLFlBQVk7Z0JBQ1osbUJBQW1CLEVBQUUsSUFBSTthQUMxQixDQUFDLENBQUMsT0FDSixDQUFDLE1BQU0sQ0FBQztTQUNWO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPO1NBQ1I7SUFDSCxDQUFDOztnSEFyTlUsbUJBQW1CO29HQUFuQixtQkFBbUIsZ1BDcEJoQyx1d0RBOENBOzJGRDFCYSxtQkFBbUI7a0JBSi9CLFNBQVM7K0JBQ0UsaUJBQWlCOzBQQU1sQixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFJRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucywgQXBwbGljYXRpb25UeXBlLCBJQXBwbGljYXRpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIEFwcGxpY2F0aW9uUGx1Z2luLFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBQbHVnaW5zU2VydmljZSxcbiAgZ2V0dGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEVjb3N5c3RlbVNlcnZpY2UsIFBST0RVQ1RfRVhQRVJJRU5DRSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBzVG9VcGRhdGVSZW1vdGVzU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9hcHBzLXRvLXVwZGF0ZS1yZW1vdGVzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXBkYXRlVHlwZSB9IGZyb20gJy4vYXBwcy10by11cGRhdGUtcmVtb3Rlcy1zZWxlY3QubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktcGx1Z2luLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGx1Z2luLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFBsdWdpbkxpc3RDb21wb25lbnQge1xuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcblxuICBASW5wdXQoKSBwbHVnaW5zJDogT2JzZXJ2YWJsZTxBcHBsaWNhdGlvblBsdWdpbltdPjtcbiAgQElucHV0KCkgZW1wdHlMaXN0VGV4dCA9ICcnO1xuICBASW5wdXQoKSBzZWxlY3RhYmxlOiBib29sZWFuO1xuICAvKipcbiAgICogU2hvd3MgdGhlIGluc3RhbGwgYnV0dG9uIGZvciBlYWNoIHBsdWdpbiBzZXBhcmF0ZWx5LiBDdXJyZW50bHkgdXNlZCBpbiBwYWNrYWdlLWRldGFpbHMgdmlldy5cbiAgICovXG4gIEBJbnB1dCgpIGluc3RhbGxhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBhY2thZ2U6IElBcHBsaWNhdGlvbjtcbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXM6IEV2ZW50RW1pdHRlcjxBcHBsaWNhdGlvblBsdWdpbltdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcmVtb3RlUGx1Z2lucyQ6IEJlaGF2aW9yU3ViamVjdDxBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7XG4gIHNlbGVjdGVkUGx1Z2luczogeyBba2V5OiBzdHJpbmddOiBBcHBsaWNhdGlvblBsdWdpbiB9ID0ge307XG4gIHVwZGF0aW5nUGx1Z2luSWQ6IFJlY29yZDxVcGRhdGVUeXBlLCBzdHJpbmc+ID0geyBpbnN0YWxsOiAnJywgdW5pbnN0YWxsOiAnJyB9O1xuICBhcHBzRGlzYWJsZWQ6IFNldDxJQXBwbGljYXRpb25bJ2lkJ10+ID0gbmV3IFNldDxJQXBwbGljYXRpb25bJ2lkJ10+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlY29zeXN0ZW1TZXJ2aWNlOiBFY29zeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1NlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgdXBkYXRlU2VsZWN0ZWRJdGVtcyhzZWxlY3RlZDogYm9vbGVhbiwgcGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbikge1xuICAgIHRoaXMuc2VsZWN0ZWRQbHVnaW5zW3BsdWdpbi5pZF0gPSBzZWxlY3RlZCA/IHBsdWdpbiA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBvbmx5SW5zdGFsbGVkUGx1Z2lucyA9IE9iamVjdC52YWx1ZXModGhpcy5zZWxlY3RlZFBsdWdpbnMpLmZpbHRlcihCb29sZWFuKTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdChvbmx5SW5zdGFsbGVkUGx1Z2lucyk7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsUGx1Z2luKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4pIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZUFwcFJlbW90ZXMocGx1Z2luLCAnaW5zdGFsbCcpO1xuICB9XG5cbiAgYXN5bmMgdW5pbnN0YWxsUGx1Z2luKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4pIHtcbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLlBBQ0tBR0VfUExVR0lOUywge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuUExVR0lOX0xJU1QsXG4gICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQUNUSU9OUy5JTlNUQUxMX1BMVUdJTixcbiAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVBcHBSZW1vdGVzKHBsdWdpbiwgJ3VuaW5zdGFsbCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVBcHBSZW1vdGVzKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sIHVwZGF0ZVR5cGU6IFVwZGF0ZVR5cGUpIHtcbiAgICB0aGlzLnVwZGF0aW5nUGx1Z2luSWRbdXBkYXRlVHlwZV0gPSBwbHVnaW4/LmlkO1xuICAgIGxldCBpbml0aWFsU3RhdGU6IFBpY2s8XG4gICAgICBBcHBzVG9VcGRhdGVSZW1vdGVzU2VsZWN0Q29tcG9uZW50LFxuICAgICAgJ2FwcHMnIHwgJ3VwZGF0ZVR5cGUnIHwgJ3BsdWdpbk5hbWUnIHwgJ2FwcHNEaXNhYmxlZCdcbiAgICA+O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcHBzID0gYXdhaXQgdGhpcy5nZXRBcHBzRm9yVXBkYXRlKHBsdWdpbiwgdXBkYXRlVHlwZSk7XG4gICAgICBpbml0aWFsU3RhdGUgPSB7XG4gICAgICAgIGFwcHMsXG4gICAgICAgIHVwZGF0ZVR5cGUsXG4gICAgICAgIHBsdWdpbk5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgICBhcHBzRGlzYWJsZWQ6IHRoaXMuYXBwc0Rpc2FibGVkXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICB0aGlzLnVwZGF0aW5nUGx1Z2luSWRbdXBkYXRlVHlwZV0gPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgc2VsZWN0ZWRBcHBzOiBJQXBwbGljYXRpb25bXTtcbiAgICB0cnkge1xuICAgICAgc2VsZWN0ZWRBcHBzID0gYXdhaXQgdGhpcy5zZWxlY3RBcHBzKGluaXRpYWxTdGF0ZSk7XG4gICAgICBpZiAoIXNlbGVjdGVkQXBwcykge1xuICAgICAgICB0aGlzLnVwZGF0aW5nUGx1Z2luSWRbdXBkYXRlVHlwZV0gPSAnJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gdW5yZWFjaGVkXG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVR5cGUgPT09ICdpbnN0YWxsJykge1xuICAgICAgY29uc3QgbGljZW5zZXNWZXJpZmllZEJ5VXNlciA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS52ZXJpZnlMaWNlbnNlcyhbcGx1Z2luXSk7XG4gICAgICBpZiAoIWxpY2Vuc2VzVmVyaWZpZWRCeVVzZXIpIHtcbiAgICAgICAgdGhpcy51cGRhdGluZ1BsdWdpbklkW3VwZGF0ZVR5cGVdID0gJyc7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGFwcCBvZiBzZWxlY3RlZEFwcHMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlUmVtb3Rlc1VwZGF0ZShhcHAsIHBsdWdpbiwgdXBkYXRlVHlwZSk7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NUZXh0ID1cbiAgICAgICAgICB1cGRhdGVUeXBlID09PSAnaW5zdGFsbCdcbiAgICAgICAgICAgID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnUGx1Z2luIGluc3RhbGxlZCB0byBhcHAgXCJ7eyBhcHBOYW1lIH19XCIuJyksIHtcbiAgICAgICAgICAgICAgICBhcHBOYW1lOiBhcHAubmFtZVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICBnZXR0ZXh0KCdQbHVnaW4gdW5pbnN0YWxsZWQgZnJvbSBhcHAgXCJ7eyBhcHBOYW1lIH19XCIuJyksXG4gICAgICAgICAgICAgICAgeyBhcHBOYW1lOiBhcHAubmFtZSB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3Moc3VjY2Vzc1RleHQpO1xuICAgICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLlBBQ0tBR0VfUExVR0lOUywge1xuICAgICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLlBMVUdJTl9MSVNULFxuICAgICAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlBMVUdJTl9JTlNUQUxMRUQsXG4gICAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5QQUNLQUdFX1BMVUdJTlMsIHtcbiAgICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5QTFVHSU5fTElTVCxcbiAgICAgICAgICByZXN1bHQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuUkVTVUxUUy5TRVJWRVJfRkFJTFVSRSxcbiAgICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTlxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGluZ1BsdWdpbklkW3VwZGF0ZVR5cGVdID0gJyc7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFwcHNGb3JVcGRhdGUocGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbiwgdXBkYXRlVHlwZTogVXBkYXRlVHlwZSkge1xuICAgIGxldCBhcHBzID0gKGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRXZWJBcHBsaWNhdGlvbnMoKSkuZmlsdGVyKFxuICAgICAgYXBwID0+IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc093bmVyKGFwcCkgJiYgYXBwLnR5cGUgIT09IEFwcGxpY2F0aW9uVHlwZS5FWFRFUk5BTFxuICAgICk7XG5cbiAgICBpZiAodXBkYXRlVHlwZSA9PT0gJ2luc3RhbGwnKSB7XG4gICAgICB0aGlzLmFwcHNEaXNhYmxlZC5jbGVhcigpO1xuICAgICAgZm9yIChjb25zdCBhcHAgb2YgYXBwcykge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5pc1BsdWdpbkluc3RhbGxlZEluQXBwKHBsdWdpbiwgYXBwKSkge1xuICAgICAgICAgIHRoaXMuYXBwc0Rpc2FibGVkLmFkZChhcHAuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVR5cGUgPT09ICd1bmluc3RhbGwnKSB7XG4gICAgICBjb25zdCBpbnN0YWxsZWRBcHBzOiBJQXBwbGljYXRpb25bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBhcHAgb2YgYXBwcykge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5pc1BsdWdpbkluc3RhbGxlZEluQXBwKHBsdWdpbiwgYXBwKSkge1xuICAgICAgICAgIGluc3RhbGxlZEFwcHMucHVzaChhcHApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhcHBzID0gaW5zdGFsbGVkQXBwcztcbiAgICB9XG4gICAgcmV0dXJuIGFwcHM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGlzUGx1Z2luSW5zdGFsbGVkSW5BcHAoXG4gICAgcGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbixcbiAgICBhcHA6IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBhcHBSZW1vdGVzID0gdGhpcy5wbHVnaW5zU2VydmljZS5nZXRNRlJlbW90ZXMoYXBwKSB8fCB7fTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoYXBwUmVtb3Rlcykuc29tZShcbiAgICAgIHJlbW90ZSA9PiB0aGlzLmdldEluc3RhbGxlZFBsdWdpbkNvbnRleHRQYXRoV2l0aG91dFZlcnNpb24ocmVtb3RlKSA9PT0gcGx1Z2luLmNvbnRleHRQYXRoXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5zdGFsbGVkUGx1Z2luQ29udGV4dFBhdGhXaXRob3V0VmVyc2lvbihyZW1vdGU6IHN0cmluZykge1xuICAgIHJldHVybiByZW1vdGUuc3BsaXQoJ0AnKVswXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlUmVtb3Rlc1VwZGF0ZShcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uLFxuICAgIHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sXG4gICAgdXBkYXRlVHlwZTogVXBkYXRlVHlwZVxuICApIHtcbiAgICB0cnkge1xuICAgICAgLy8gV2hlbiByZW1vdGVzIG9iamVjdCBpcyBub3Qgc2V0IGluIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBvZiBhbiBhcHBsaWNhdGlvbi5cbiAgICAgIC8vIEZhbGxiYWNrIHRvIHNldEluaXRpYWxSZW1vdGVzIGlzIHRyaWdnZXJlZC5cbiAgICAgIGxldCB1cGRhdGVkUmVtb3RlcyA9IGF3YWl0ICh1cGRhdGVUeXBlID09PSAnaW5zdGFsbCdcbiAgICAgICAgPyB0aGlzLnBsdWdpbnNTZXJ2aWNlLmFkZFJlbW90ZXMoYXBwbGljYXRpb24sIHBsdWdpbilcbiAgICAgICAgOiB0aGlzLnBsdWdpbnNTZXJ2aWNlLnJlbW92ZVJlbW90ZXMoYXBwbGljYXRpb24sIHRoaXMuZ2V0QWxsUGx1Z2luc1RvUmVtb3ZlKHBsdWdpbikpKTtcbiAgICAgIGlmICghdXBkYXRlZFJlbW90ZXMpIHtcbiAgICAgICAgLy8gVE9ETyBkaXNjdXNzIGlmIHdlIG5lZWQgdG8gaGFuZGxlIGl0IGxpa2UgdGhhdC5cbiAgICAgICAgLy8gUmlnaHQgbm93IHJlbW90ZXMgZnJvbSB0aGUgY3VtdWxvY2l0eS5qc29uIGFyZSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiByZW1vdGVzIG9iamVjdCBpcyBtaXNzaW5nIGluIHRoZSBjb25maWd1cmF0aW9uLlxuICAgICAgICB1cGRhdGVkUmVtb3RlcyA9IGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2Uuc2V0SW5pdGlhbFJlbW90ZXMoYXBwbGljYXRpb24pO1xuICAgICAgICAvLyBGcmVzaCBhcHBsaWNhdGlvbiBNTyBpcyBuZWVkZWQsIGFmdGVyIGluaXRpYWwgc3RhdGUgd2FzIHNldC5cbiAgICAgICAgY29uc3QgYXBwID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uLmlkKTtcbiAgICAgICAgdXBkYXRlZFJlbW90ZXMgPSBhd2FpdCB0aGlzLnBsdWdpbnNTZXJ2aWNlLmFkZFJlbW90ZXMoYXBwLCBwbHVnaW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZW1pdFJlbW90ZXModXBkYXRlZFJlbW90ZXMpO1xuICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICBpZiAoZXIpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcik7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFsbFBsdWdpbnNUb1JlbW92ZShwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luKTogQXBwbGljYXRpb25QbHVnaW5bXSB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZS5hcHBsaWNhdGlvblZlcnNpb25zLm1hcChhdiA9PiAoe1xuICAgICAgaWQ6IGAke3BsdWdpbi5jb250ZXh0UGF0aH1AJHthdi52ZXJzaW9ufS8ke3BsdWdpbi5tb2R1bGV9YCxcbiAgICAgIG1vZHVsZTogcGx1Z2luLm1vZHVsZSxcbiAgICAgIHBhdGg6IHBsdWdpbi5wYXRoXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVtb3RlcyhyZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMpOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMge1xuICAgIHRoaXMucmVtb3RlUGx1Z2lucyQubmV4dChyZW1vdGVzKTtcbiAgICByZXR1cm4geyAuLi50aGlzLnJlbW90ZVBsdWdpbnMkLnZhbHVlIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbGVjdEFwcHMoXG4gICAgaW5pdGlhbFN0YXRlOiBQaWNrPFxuICAgICAgQXBwc1RvVXBkYXRlUmVtb3Rlc1NlbGVjdENvbXBvbmVudCxcbiAgICAgICdhcHBzJyB8ICd1cGRhdGVUeXBlJyB8ICdwbHVnaW5OYW1lJyB8ICdhcHBzRGlzYWJsZWQnXG4gICAgPlxuICApOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCAoXG4gICAgICAgIHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhBcHBzVG9VcGRhdGVSZW1vdGVzU2VsZWN0Q29tcG9uZW50LCB7XG4gICAgICAgICAgY2xhc3M6ICdtb2RhbC1zbScsXG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnbW9kYWwtYm9keScsXG4gICAgICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWVcbiAgICAgICAgfSkuY29udGVudCBhcyBBcHBzVG9VcGRhdGVSZW1vdGVzU2VsZWN0Q29tcG9uZW50XG4gICAgICApLnJlc3VsdDtcbiAgICB9IGNhdGNoIChlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuIiwiPGM4eS1saXN0LWdyb3VwIGNsYXNzPVwiYmctaW5oZXJpdFwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHBsdWdpbnMkIHwgYXN5bmMpPy5sZW5ndGggIT09IDA7IGVsc2UgZW1wdHlMaXN0XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGx1Z2luIG9mIHBsdWdpbnMkIHwgYXN5bmNcIj5cbiAgICAgIDxjOHktbGkgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogcGx1Z2luLmluc3RhbGxlZCB9XCIgY2xhc3M9XCJiZy1pbmhlcml0XCI+XG4gICAgICAgIDxjOHktcGx1Z2luLWxpc3QtaXRlbVxuICAgICAgICAgIChpc0l0ZW1TZWxlY3RlZCk9XCJ1cGRhdGVTZWxlY3RlZEl0ZW1zKCRldmVudCwgcGx1Z2luKVwiXG4gICAgICAgICAgW3BsdWdpbl09XCJwbHVnaW5cIlxuICAgICAgICAgIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4XCJcbiAgICAgICAgPjwvYzh5LXBsdWdpbi1saXN0LWl0ZW0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLWwtNDAgbS10LTRcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImluc3RhbGxhYmxlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ1bmluc3RhbGxQbHVnaW4ocGx1Z2luKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IHBsdWdpbi5pZCA9PT0gdXBkYXRpbmdQbHVnaW5JZC51bmluc3RhbGwgfVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidXBkYXRpbmdQbHVnaW5JZC51bmluc3RhbGwgJiYgcGx1Z2luLmlkICE9PSB1cGRhdGluZ1BsdWdpbklkLnVuaW5zdGFsbFwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIGJ0bi1zbSBtLWwtNFwiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdVbmluc3RhbGwgcGx1Z2luJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICBVbmluc3RhbGwgcGx1Z2luXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJpbnN0YWxsYWJsZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaW5zdGFsbFBsdWdpbihwbHVnaW4pXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1wZW5kaW5nJzogcGx1Z2luLmlkID09PSB1cGRhdGluZ1BsdWdpbklkLmluc3RhbGwgfVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidXBkYXRpbmdQbHVnaW5JZC5pbnN0YWxsICYmIHBsdWdpbi5pZCAhPT0gdXBkYXRpbmdQbHVnaW5JZC5pbnN0YWxsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBtLWwtOFwiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdJbnN0YWxsIHBsdWdpbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgSW5zdGFsbCBwbHVnaW5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2M4eS1saT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2M4eS1saXN0LWdyb3VwPlxuPG5nLXRlbXBsYXRlICNlbXB0eUxpc3Q+XG4gIDxkaXYgY2xhc3M9XCJjOHktZW1wdHktc3RhdGUgdGV4dC1sZWZ0XCIgKm5nSWY9XCJlbXB0eUxpc3RUZXh0XCI+XG4gICAgPGgxIGM4eUljb249XCJwbHVnaW5cIj48L2gxPlxuICAgIDxwPlxuICAgICAge3sgZW1wdHlMaXN0VGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvcD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXBsdWdpbnMvcGx1Z2luLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXBsdWdpbnMvcGx1Z2luLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQTRCLGVBQWUsRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDdEYsT0FBTyxFQUNMLFlBQVksRUFFWixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7Ozs7QUFPL0YsTUFBTSxPQUFPLG1CQUFtQjtJQWlCOUIsWUFDVSxnQkFBa0MsRUFDbEMsY0FBOEIsRUFDOUIsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLGdCQUFrQztRQUxsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIs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O1NBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVPLFdBQVcsQ0FBQyxPQUFpQztRQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFTyxLQUFLLENBQUMsVUFBVSxDQUN0QixZQUdDO1FBRUQsSUFBSTtZQUNGLE9BQU8sTUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRTtnQkFDM0QsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLGVBQWUsRUFBRSxZQUFZO2dCQUM3QixjQUFjLEVBQUUsYUFBYTtnQkFDN0IsWUFBWTtnQkFDWixtQkFBbUIsRUFBRSxJQUFJO2dCQUN6QixRQUFRLEVBQUUsS0FBSzthQUNoQixDQUFDLENBQUMsT0FDSixDQUFDLE1BQU0sQ0FBQztTQUNWO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPO1NBQ1I7SUFDSCxDQUFDOztnSEExTlUsbUJBQW1CO29HQUFuQixtQkFBbUIsZ1BDcEJoQyx1d0RBOENBOzJGRDFCYSxtQkFBbUI7a0JBSi9CLFNBQVM7K0JBQ0UsaUJBQWlCOzBQQU1sQixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFJRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucywgQXBwbGljYXRpb25UeXBlLCBJQXBwbGljYXRpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIEFwcGxpY2F0aW9uUGx1Z2luLFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBQbHVnaW5zU2VydmljZSxcbiAgZ2V0dGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEVjb3N5c3RlbVNlcnZpY2UsIFBST0RVQ1RfRVhQRVJJRU5DRSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBzVG9VcGRhdGVSZW1vdGVzU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9hcHBzLXRvLXVwZGF0ZS1yZW1vdGVzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXBkYXRlVHlwZSB9IGZyb20gJy4vYXBwcy10by11cGRhdGUtcmVtb3Rlcy1zZWxlY3QubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktcGx1Z2luLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGx1Z2luLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFBsdWdpbkxpc3RDb21wb25lbnQge1xuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcblxuICBASW5wdXQoKSBwbHVnaW5zJDogT2JzZXJ2YWJsZTxBcHBsaWNhdGlvblBsdWdpbltdPjtcbiAgQElucHV0KCkgZW1wdHlMaXN0VGV4dCA9ICcnO1xuICBASW5wdXQoKSBzZWxlY3RhYmxlOiBib29sZWFuO1xuICAvKipcbiAgICogU2hvd3MgdGhlIGluc3RhbGwgYnV0dG9uIGZvciBlYWNoIHBsdWdpbiBzZXBhcmF0ZWx5LiBDdXJyZW50bHkgdXNlZCBpbiBwYWNrYWdlLWRldGFpbHMgdmlldy5cbiAgICovXG4gIEBJbnB1dCgpIGluc3RhbGxhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBhY2thZ2U6IElBcHBsaWNhdGlvbjtcbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXM6IEV2ZW50RW1pdHRlcjxBcHBsaWNhdGlvblBsdWdpbltdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcmVtb3RlUGx1Z2lucyQ6IEJlaGF2aW9yU3ViamVjdDxBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7XG4gIHNlbGVjdGVkUGx1Z2luczogeyBba2V5OiBzdHJpbmddOiBBcHBsaWNhdGlvblBsdWdpbiB9ID0ge307XG4gIHVwZGF0aW5nUGx1Z2luSWQ6IFJlY29yZDxVcGRhdGVUeXBlLCBzdHJpbmc+ID0geyBpbnN0YWxsOiAnJywgdW5pbnN0YWxsOiAnJyB9O1xuICBhcHBzRGlzYWJsZWQ6IFNldDxJQXBwbGljYXRpb25bJ2lkJ10+ID0gbmV3IFNldDxJQXBwbGljYXRpb25bJ2lkJ10+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlY29zeXN0ZW1TZXJ2aWNlOiBFY29zeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1NlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgdXBkYXRlU2VsZWN0ZWRJdGVtcyhzZWxlY3RlZDogYm9vbGVhbiwgcGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbikge1xuICAgIHRoaXMuc2VsZWN0ZWRQbHVnaW5zW3BsdWdpbi5pZF0gPSBzZWxlY3RlZCA/IHBsdWdpbiA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBvbmx5SW5zdGFsbGVkUGx1Z2lucyA9IE9iamVjdC52YWx1ZXModGhpcy5zZWxlY3RlZFBsdWdpbnMpLmZpbHRlcihCb29sZWFuKTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdChvbmx5SW5zdGFsbGVkUGx1Z2lucyk7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsUGx1Z2luKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4pIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZUFwcFJlbW90ZXMocGx1Z2luLCAnaW5zdGFsbCcpO1xuICB9XG5cbiAgYXN5bmMgdW5pbnN0YWxsUGx1Z2luKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4pIHtcbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLlBBQ0tBR0VfUExVR0lOUywge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuUExVR0lOX0xJU1QsXG4gICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQUNUSU9OUy5JTlNUQUxMX1BMVUdJTixcbiAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVBcHBSZW1vdGVzKHBsdWdpbiwgJ3VuaW5zdGFsbCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVBcHBSZW1vdGVzKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sIHVwZGF0ZVR5cGU6IFVwZGF0ZVR5cGUpIHtcbiAgICB0aGlzLnVwZGF0aW5nUGx1Z2luSWRbdXBkYXRlVHlwZV0gPSBwbHVnaW4/LmlkO1xuICAgIGxldCBpbml0aWFsU3RhdGU6IFBpY2s8XG4gICAgICBBcHBzVG9VcGRhdGVSZW1vdGVzU2VsZWN0Q29tcG9uZW50LFxuICAgICAgJ2FwcHMnIHwgJ3VwZGF0ZVR5cGUnIHwgJ3BsdWdpbk5hbWUnIHwgJ2FwcHNEaXNhYmxlZCdcbiAgICA+O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcHBzID0gYXdhaXQgdGhpcy5nZXRBcHBzRm9yVXBkYXRlKHBsdWdpbiwgdXBkYXRlVHlwZSk7XG4gICAgICBpbml0aWFsU3RhdGUgPSB7XG4gICAgICAgIGFwcHMsXG4gICAgICAgIHVwZGF0ZVR5cGUsXG4gICAgICAgIHBsdWdpbk5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgICBhcHBzRGlzYWJsZWQ6IHRoaXMuYXBwc0Rpc2FibGVkXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICB0aGlzLnVwZGF0aW5nUGx1Z2luSWRbdXBkYXRlVHlwZV0gPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgc2VsZWN0ZWRBcHBzOiBJQXBwbGljYXRpb25bXTtcbiAgICB0cnkge1xuICAgICAgc2VsZWN0ZWRBcHBzID0gYXdhaXQgdGhpcy5zZWxlY3RBcHBzKGluaXRpYWxTdGF0ZSk7XG4gICAgICBpZiAoIXNlbGVjdGVkQXBwcykge1xuICAgICAgICB0aGlzLnVwZGF0aW5nUGx1Z2luSWRbdXBkYXRlVHlwZV0gPSAnJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gdW5yZWFjaGVkXG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVR5cGUgPT09ICdpbnN0YWxsJykge1xuICAgICAgY29uc3QgbGljZW5zZXNWZXJpZmllZEJ5VXNlciA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS52ZXJpZnlMaWNlbnNlcyhbcGx1Z2luXSk7XG4gICAgICBpZiAoIWxpY2Vuc2VzVmVyaWZpZWRCeVVzZXIpIHtcbiAgICAgICAgdGhpcy51cGRhdGluZ1BsdWdpbklkW3VwZGF0ZVR5cGVdID0gJyc7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGFwcCBvZiBzZWxlY3RlZEFwcHMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlUmVtb3Rlc1VwZGF0ZShhcHAsIHBsdWdpbiwgdXBkYXRlVHlwZSk7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NUZXh0ID1cbiAgICAgICAgICB1cGRhdGVUeXBlID09PSAnaW5zdGFsbCdcbiAgICAgICAgICAgID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnUGx1Z2luIGluc3RhbGxlZCB0byBhcHAgXCJ7eyBhcHBOYW1lIH19XCIuJyksIHtcbiAgICAgICAgICAgICAgICBhcHBOYW1lOiBhcHAubmFtZVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICBnZXR0ZXh0KCdQbHVnaW4gdW5pbnN0YWxsZWQgZnJvbSBhcHAgXCJ7eyBhcHBOYW1lIH19XCIuJyksXG4gICAgICAgICAgICAgICAgeyBhcHBOYW1lOiBhcHAubmFtZSB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3Moc3VjY2Vzc1RleHQpO1xuICAgICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLlBBQ0tBR0VfUExVR0lOUywge1xuICAgICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLlBMVUdJTl9MSVNULFxuICAgICAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlBMVUdJTl9JTlNUQUxMRUQsXG4gICAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5QQUNLQUdFX1BMVUdJTlMsIHtcbiAgICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5QTFVHSU5fTElTVCxcbiAgICAgICAgICByZXN1bHQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuUkVTVUxUUy5TRVJWRVJfRkFJTFVSRSxcbiAgICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTlxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGluZ1BsdWdpbklkW3VwZGF0ZVR5cGVdID0gJyc7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFwcHNGb3JVcGRhdGUocGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbiwgdXBkYXRlVHlwZTogVXBkYXRlVHlwZSkge1xuICAgIGxldCBhcHBzID0gKGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRXZWJBcHBsaWNhdGlvbnMoKSkuZmlsdGVyKFxuICAgICAgYXBwID0+IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc093bmVyKGFwcCkgJiYgYXBwLnR5cGUgIT09IEFwcGxpY2F0aW9uVHlwZS5FWFRFUk5BTFxuICAgICk7XG5cbiAgICBpZiAodXBkYXRlVHlwZSA9PT0gJ2luc3RhbGwnKSB7XG4gICAgICB0aGlzLmFwcHNEaXNhYmxlZC5jbGVhcigpO1xuICAgICAgZm9yIChjb25zdCBhcHAgb2YgYXBwcykge1xuICAgICAgICBpZiAodGhpcy5pc1BsdWdpbkluc3RhbGxlZEluQXBwKHBsdWdpbiwgYXBwKSkge1xuICAgICAgICAgIHRoaXMuYXBwc0Rpc2FibGVkLmFkZChhcHAuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVR5cGUgPT09ICd1bmluc3RhbGwnKSB7XG4gICAgICBjb25zdCBpbnN0YWxsZWRBcHBzOiBJQXBwbGljYXRpb25bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBhcHAgb2YgYXBwcykge1xuICAgICAgICBpZiAodGhpcy5pc1BsdWdpbkluc3RhbGxlZEluQXBwKHBsdWdpbiwgYXBwKSkge1xuICAgICAgICAgIGluc3RhbGxlZEFwcHMucHVzaChhcHApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhcHBzID0gaW5zdGFsbGVkQXBwcztcbiAgICB9XG4gICAgcmV0dXJuIGFwcHM7XG4gIH1cblxuICBwcml2YXRlIGlzUGx1Z2luSW5zdGFsbGVkSW5BcHAocGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbiwgYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBhcHBSZW1vdGVzID0gdGhpcy5wbHVnaW5zU2VydmljZS5nZXRNRlJlbW90ZXMoYXBwKSB8fCB7fTtcblxuICAgIGZvciAoY29uc3QgW3JlbW90ZU5hbWUsIG1vZHVsZXNdIG9mIE9iamVjdC5lbnRyaWVzKGFwcFJlbW90ZXMpKSB7XG4gICAgICBjb25zdCBwbHVnaW5Gcm9tVGhpc1BhY2thZ2VJc0luc3RhbGxlZCA9XG4gICAgICAgIHRoaXMuZ2V0UGx1Z2luQ29udGV4dFBhdGhXaXRob3V0VmVyc2lvbihyZW1vdGVOYW1lKSA9PT0gcGx1Z2luLmNvbnRleHRQYXRoO1xuICAgICAgY29uc3Qgc3BlY2lmaWNQbHVnaW5Nb2R1bGVJc0luc3RhbGxlZCA9IG1vZHVsZXMuc29tZShtb2R1bGUgPT4gbW9kdWxlID09PSBwbHVnaW4ubW9kdWxlKTtcbiAgICAgIGlmIChwbHVnaW5Gcm9tVGhpc1BhY2thZ2VJc0luc3RhbGxlZCAmJiBzcGVjaWZpY1BsdWdpbk1vZHVsZUlzSW5zdGFsbGVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldFBsdWdpbkNvbnRleHRQYXRoV2l0aG91dFZlcnNpb24ocmVtb3RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcmVtb3RlLnNwbGl0KCdAJylbMF07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVJlbW90ZXNVcGRhdGUoXG4gICAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbixcbiAgICBwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luLFxuICAgIHVwZGF0ZVR5cGU6IFVwZGF0ZVR5cGVcbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFdoZW4gcmVtb3RlcyBvYmplY3QgaXMgbm90IHNldCBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Qgb2YgYW4gYXBwbGljYXRpb24uXG4gICAgICAvLyBGYWxsYmFjayB0byBzZXRJbml0aWFsUmVtb3RlcyBpcyB0cmlnZ2VyZWQuXG4gICAgICBsZXQgdXBkYXRlZFJlbW90ZXMgPSBhd2FpdCAodXBkYXRlVHlwZSA9PT0gJ2luc3RhbGwnXG4gICAgICAgID8gdGhpcy5wbHVnaW5zU2VydmljZS5hZGRSZW1vdGVzKGFwcGxpY2F0aW9uLCBwbHVnaW4pXG4gICAgICAgIDogdGhpcy5wbHVnaW5zU2VydmljZS5yZW1vdmVSZW1vdGVzKGFwcGxpY2F0aW9uLCB0aGlzLmdldEFsbFBsdWdpbnNUb1JlbW92ZShwbHVnaW4pKSk7XG4gICAgICBpZiAoIXVwZGF0ZWRSZW1vdGVzKSB7XG4gICAgICAgIC8vIFRPRE8gZGlzY3VzcyBpZiB3ZSBuZWVkIHRvIGhhbmRsZSBpdCBsaWtlIHRoYXQuXG4gICAgICAgIC8vIFJpZ2h0IG5vdyByZW1vdGVzIGZyb20gdGhlIGN1bXVsb2NpdHkuanNvbiBhcmUgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gcmVtb3RlcyBvYmplY3QgaXMgbWlzc2luZyBpbiB0aGUgY29uZmlndXJhdGlvbi5cbiAgICAgICAgdXBkYXRlZFJlbW90ZXMgPSBhd2FpdCB0aGlzLnBsdWdpbnNTZXJ2aWNlLnNldEluaXRpYWxSZW1vdGVzKGFwcGxpY2F0aW9uKTtcbiAgICAgICAgLy8gRnJlc2ggYXBwbGljYXRpb24gTU8gaXMgbmVlZGVkLCBhZnRlciBpbml0aWFsIHN0YXRlIHdhcyBzZXQuXG4gICAgICAgIGNvbnN0IGFwcCA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRBcHBsaWNhdGlvbihhcHBsaWNhdGlvbi5pZCk7XG4gICAgICAgIHVwZGF0ZWRSZW1vdGVzID0gYXdhaXQgdGhpcy5wbHVnaW5zU2VydmljZS5hZGRSZW1vdGVzKGFwcCwgcGx1Z2luKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmVtaXRSZW1vdGVzKHVwZGF0ZWRSZW1vdGVzKTtcbiAgICB9IGNhdGNoIChlcikge1xuICAgICAgaWYgKGVyKSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXIpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXI7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbGxQbHVnaW5zVG9SZW1vdmUocGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbik6IEFwcGxpY2F0aW9uUGx1Z2luW10ge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2UuYXBwbGljYXRpb25WZXJzaW9ucy5tYXAoYXYgPT4gKHtcbiAgICAgIGlkOiBgJHtwbHVnaW4uY29udGV4dFBhdGh9QCR7YXYudmVyc2lvbn0vJHtwbHVnaW4ubW9kdWxlfWAsXG4gICAgICBtb2R1bGU6IHBsdWdpbi5tb2R1bGUsXG4gICAgICBwYXRoOiBwbHVnaW4ucGF0aFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFJlbW90ZXMocmVtb3RlczogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICB0aGlzLnJlbW90ZVBsdWdpbnMkLm5leHQocmVtb3Rlcyk7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5yZW1vdGVQbHVnaW5zJC52YWx1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZWxlY3RBcHBzKFxuICAgIGluaXRpYWxTdGF0ZTogUGljazxcbiAgICAgIEFwcHNUb1VwZGF0ZVJlbW90ZXNTZWxlY3RDb21wb25lbnQsXG4gICAgICAnYXBwcycgfCAndXBkYXRlVHlwZScgfCAncGx1Z2luTmFtZScgfCAnYXBwc0Rpc2FibGVkJ1xuICAgID5cbiAgKTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgKFxuICAgICAgICB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coQXBwc1RvVXBkYXRlUmVtb3Rlc1NlbGVjdENvbXBvbmVudCwge1xuICAgICAgICAgIGNsYXNzOiAnbW9kYWwtc20nLFxuICAgICAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgICAgIGtleWJvYXJkOiBmYWxzZVxuICAgICAgICB9KS5jb250ZW50IGFzIEFwcHNUb1VwZGF0ZVJlbW90ZXNTZWxlY3RDb21wb25lbnRcbiAgICAgICkucmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG4iLCI8Yzh5LWxpc3QtZ3JvdXAgY2xhc3M9XCJiZy1pbmhlcml0XCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIocGx1Z2lucyQgfCBhc3luYyk/Lmxlbmd0aCAhPT0gMDsgZWxzZSBlbXB0eUxpc3RcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwbHVnaW4gb2YgcGx1Z2lucyQgfCBhc3luY1wiPlxuICAgICAgPGM4eS1saSBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBwbHVnaW4uaW5zdGFsbGVkIH1cIiBjbGFzcz1cImJnLWluaGVyaXRcIj5cbiAgICAgICAgPGM4eS1wbHVnaW4tbGlzdC1pdGVtXG4gICAgICAgICAgKGlzSXRlbVNlbGVjdGVkKT1cInVwZGF0ZVNlbGVjdGVkSXRlbXMoJGV2ZW50LCBwbHVnaW4pXCJcbiAgICAgICAgICBbcGx1Z2luXT1cInBsdWdpblwiXG4gICAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXhcIlxuICAgICAgICA+PC9jOHktcGx1Z2luLWxpc3QtaXRlbT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtbC00MCBtLXQtNFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiaW5zdGFsbGFibGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInVuaW5zdGFsbFBsdWdpbihwbHVnaW4pXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1wZW5kaW5nJzogcGx1Z2luLmlkID09PSB1cGRhdGluZ1BsdWdpbklkLnVuaW5zdGFsbCB9XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1cGRhdGluZ1BsdWdpbklkLnVuaW5zdGFsbCAmJiBwbHVnaW4uaWQgIT09IHVwZGF0aW5nUGx1Z2luSWQudW5pbnN0YWxsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLXNtIG0tbC00XCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ1VuaW5zdGFsbCBwbHVnaW4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIFVuaW5zdGFsbCBwbHVnaW5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImluc3RhbGxhYmxlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJpbnN0YWxsUGx1Z2luKHBsdWdpbilcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBwbHVnaW4uaWQgPT09IHVwZGF0aW5nUGx1Z2luSWQuaW5zdGFsbCB9XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1cGRhdGluZ1BsdWdpbklkLmluc3RhbGwgJiYgcGx1Z2luLmlkICE9PSB1cGRhdGluZ1BsdWdpbklkLmluc3RhbGxcIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIG0tbC04XCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0luc3RhbGwgcGx1Z2luJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICBJbnN0YWxsIHBsdWdpblxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYzh5LWxpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvYzh5LWxpc3QtZ3JvdXA+XG48bmctdGVtcGxhdGUgI2VtcHR5TGlzdD5cbiAgPGRpdiBjbGFzcz1cImM4eS1lbXB0eS1zdGF0ZSB0ZXh0LWxlZnRcIiAqbmdJZj1cImVtcHR5TGlzdFRleHRcIj5cbiAgICA8aDEgYzh5SWNvbj1cInBsdWdpblwiPjwvaDE+XG4gICAgPHA+XG4gICAgICB7eyBlbXB0eUxpc3RUZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -34,7 +34,7 @@ export class KpiWidgetViewComponent {
|
|
|
34
34
|
this.assignContextFromContextDashboard(datapoint);
|
|
35
35
|
const latestMeasurement$ = this.getLatestMeasurement$(datapoint);
|
|
36
36
|
const lastTwoValues$ = this.getLastTwoValuesOfObservable$(latestMeasurement$);
|
|
37
|
-
const previousValue$ = lastTwoValues$.pipe(map(
|
|
37
|
+
const previousValue$ = lastTwoValues$.pipe(map(([previousVal]) => previousVal), startWith(undefined));
|
|
38
38
|
const unit$ = latestMeasurement$.pipe(map(latestMeasurementValue => datapoint.unit || latestMeasurementValue.unit || ''), startWith(''), distinctUntilChanged());
|
|
39
39
|
return combineLatest([
|
|
40
40
|
latestMeasurement$,
|
|
@@ -131,4 +131,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
131
131
|
}] }]; }, propDecorators: { config: [{
|
|
132
132
|
type: Input
|
|
133
133
|
}] } });
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3BpLXdpZGdldC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2twaS9rcGktd2lkZ2V0LXZpZXcva3BpLXdpZGdldC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2twaS9rcGktd2lkZ2V0LXZpZXcva3BpLXdpZGdldC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7OztBQVNsRixJQUFLLFVBSUo7QUFKRCxXQUFLLFVBQVU7SUFDYixvQ0FBc0IsQ0FBQTtJQUN0QixzQ0FBd0IsQ0FBQTtJQUN4QiwwQkFBWSxDQUFBO0FBQ2QsQ0FBQyxFQUpJLFVBQVUsS0FBVixVQUFVLFFBSWQ7QUFPRCxNQUFNLE9BQU8sc0JBQXNCO0lBYWpDLFlBQ1UsbUJBQStDLEVBQ25DLFNBQW9DO1FBRGhELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBNEI7UUFDbkMsY0FBUyxHQUFULFNBQVMsQ0FBMkI7UUFkakQsV0FBTSxHQUFvQixFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUN0RCxXQUFNLEdBTUQsS0FBSyxDQUFDO1FBRVgsOERB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QXFCLGFBRXBCLENBQUMsMEJBQTBCLENBQUM7OzBCQWlCcEMsUUFBUTs0Q0FkRixNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgS1BJRGV0YWlscyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50LXNlbGVjdG9yJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE5FVkVSLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHBhaXJ3aXNlLCBzdGFydFdpdGgsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbnRleHREYXNoYm9hcmRDb21wb25lbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2NvbnRleHQtZGFzaGJvYXJkJztcbmltcG9ydCB7IEtwaVdpZGdldENvbmZpZyB9IGZyb20gJy4uL2twaS13aWRnZXQubW9kZWwnO1xuXG5pbnRlcmZhY2UgTWVhc3VyZW1lbnRWYWx1ZSB7XG4gIHVuaXQ/OiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGRhdGU6IHN0cmluZztcbn1cblxuZW51bSBDb2xvckNsYXNzIHtcbiAgZGFuZ2VyID0gJ3RleHQtZGFuZ2VyJyxcbiAgd2FybmluZyA9ICd0ZXh0LXdhcm5pbmcnLFxuICB1bmtub3duID0gJydcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWtwaS13aWRnZXQtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9rcGktd2lkZ2V0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgS3BpV2lkZ2V0Vmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbmZpZzogS3BpV2lkZ2V0Q29uZmlnID0geyBkYXRhcG9pbnRzOiBbXSB9O1xuICBzdGF0ZSQ6IE9ic2VydmFibGU8e1xuICAgIGxhdGVzdE1lYXN1cmVtZW50OiBNZWFzdXJlbWVudFZhbHVlO1xuICAgIHByZXZpb3VzVmFsdWU6IE1lYXN1cmVtZW50VmFsdWU7XG4gICAgdHJlbmQ6IHN0cmluZztcbiAgICB1bml0OiBzdHJpbmc7XG4gICAgY29sb3JDbGFzczogQ29sb3JDbGFzcztcbiAgfT4gPSBORVZFUjtcblxuICAvLyB1c2VkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBsb2FkaW5nIHN0YXRlIGFuZCBlbXB0eSBzdGF0ZVxuICBub0RhdGFJbml0aWFsbHlJbkRCID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtZWFzdXJlbWVudFJlYWx0aW1lOiBNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZENvbXBvbmVudFxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgZGF0YXBvaW50cyA9IHRoaXMuY29uZmlnLmRhdGFwb2ludHMgfHwgW107XG4gICAgY29uc3QgZGF0YXBvaW50OiBLUElEZXRhaWxzID0gZGF0YXBvaW50cy5maW5kKHRtcCA9PiB0bXAuX19hY3RpdmUpO1xuICAgIGlmICghZGF0YXBvaW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSQgPSB0aGlzLnNldHVwT2JzZXJ2YWJsZShkYXRhcG9pbnQpO1xuICB9XG5cbiAgc2V0dXBPYnNlcnZhYmxlKGRhdGFwb2ludDogS1BJRGV0YWlscyk6IE9ic2VydmFibGU8e1xuICAgIGxhdGVzdE1lYXN1cmVtZW50OiBNZWFzdXJlbWVudFZhbHVlO1xuICAgIHByZXZpb3VzVmFsdWU6IGFueTtcbiAgICB0cmVuZDogc3RyaW5nO1xuICAgIHVuaXQ6IHN0cmluZztcbiAgICBjb2xvckNsYXNzOiBDb2xvckNsYXNzO1xuICB9PiB7XG4gICAgdGhpcy5hc3NpZ25Db250ZXh0RnJvbUNvbnRleHREYXNoYm9hcmQoZGF0YXBvaW50KTtcbiAgICBjb25zdCBsYXRlc3RNZWFzdXJlbWVudCQgPSB0aGlzLmdldExhdGVzdE1lYXN1cmVtZW50JChkYXRhcG9pbnQpO1xuICAgIGNvbnN0IGxhc3RUd29WYWx1ZXMkID0gdGhpcy5nZXRMYXN0VHdvVmFsdWVzT2ZPYnNlcnZhYmxlJChsYXRlc3RNZWFzdXJlbWVudCQpO1xuXG4gICAgY29uc3QgcHJldmlvdXNWYWx1ZSQgPSBsYXN0VHdvVmFsdWVzJC5waXBlKFxuICAgICAgbWFwKHJlcyA9PiByZXNbMF0pLFxuICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCBhcyBhbnkpXG4gICAgKTtcblxuICAgIGNvbnN0IHVuaXQkID0gbGF0ZXN0TWVhc3VyZW1lbnQkLnBpcGUoXG4gICAgICBtYXAobGF0ZXN0TWVhc3VyZW1lbnRWYWx1ZSA9PiBkYXRhcG9pbnQudW5pdCB8fCBsYXRlc3RNZWFzdXJlbWVudFZhbHVlLnVuaXQgfHwgJycpLFxuICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgbGF0ZXN0TWVhc3VyZW1lbnQkLFxuICAgICAgcHJldmlvdXNWYWx1ZSQsXG4gICAgICB0aGlzLmdldFRyZW5kT2ZMYXRlc3RNZWFzdXJlbWVudHMkKGxhc3RUd29WYWx1ZXMkKSxcbiAgICAgIHVuaXQkLFxuICAgICAgdGhpcy5nZXRDb2xvckNsYXNzJChsYXRlc3RNZWFzdXJlbWVudCQsIGRhdGFwb2ludClcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbbGF0ZXN0TWVhc3VyZW1lbnQsIHByZXZpb3VzVmFsdWUsIHRyZW5kLCB1bml0LCBjb2xvckNsYXNzXSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhdGVzdE1lYXN1cmVtZW50LFxuICAgICAgICAgIHByZXZpb3VzVmFsdWUsXG4gICAgICAgICAgdHJlbmQsXG4gICAgICAgICAgdW5pdCxcbiAgICAgICAgICBjb2xvckNsYXNzXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldExhdGVzdE1lYXN1cmVtZW50JChkYXRhcG9pbnQ6IEtQSURldGFpbHMpOiBPYnNlcnZhYmxlPE1lYXN1cmVtZW50VmFsdWU+IHtcbiAgICByZXR1cm4gdGhpcy5tZWFzdXJlbWVudFJlYWx0aW1lXG4gICAgICAubGF0ZXN0VmFsdWVPZlNwZWNpZmljTWVhc3VyZW1lbnQkKFxuICAgICAgICBkYXRhcG9pbnQuZnJhZ21lbnQsXG4gICAgICAgIGRhdGFwb2ludC5zZXJpZXMsXG4gICAgICAgIGRhdGFwb2ludC5fX3RhcmdldCxcbiAgICAgICAgLy8gd2Ugb25seSBuZWVkIHRoZSBsYXN0IHR3byB2YWx1ZXMgaW4gY2FzZSB3ZSB3YW50IHRvIHNob3cgYSB0cmVuZFxuICAgICAgICB0aGlzLmNvbmZpZy5zaG93VHJlbmQgPyAyIDogMSxcbiAgICAgICAgLy8gbnVsbCB3aWxsIGJlIGVtaXR0ZWQgaW4gY2FzZSBubyBtZWFzdXJlbWVudCB3YXMgZm91bmQgaW5pdGlhbGx5XG4gICAgICAgIHRydWVcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAobWVhc3VyZW1lbnQgPT4ge1xuICAgICAgICAgIGlmICghbWVhc3VyZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubm9EYXRhSW5pdGlhbGx5SW5EQiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyKG1lYXN1cmVtZW50ID0+ICEhbWVhc3VyZW1lbnQpLFxuICAgICAgICBtYXAobWVhc3VyZW1lbnQgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1bml0OiBtZWFzdXJlbWVudFtkYXRhcG9pbnQuZnJhZ21lbnRdW2RhdGFwb2ludC5zZXJpZXNdLnVuaXQsXG4gICAgICAgICAgICB2YWx1ZTogbWVhc3VyZW1lbnRbZGF0YXBvaW50LmZyYWdtZW50XVtkYXRhcG9pbnQuc2VyaWVzXS52YWx1ZSxcbiAgICAgICAgICAgIGRhdGU6IG1lYXN1cmVtZW50LnRpbWUgYXMgc3RyaW5nXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbG9yQ2xhc3MkKFxuICAgIG1lYXN1cmVtZW50QW5kRGF0YXBvaW50Q29tYmluYXRpb24kOiBPYnNlcnZhYmxlPE1lYXN1cmVtZW50VmFsdWU+LFxuICAgIGRhdGFwb2ludDogS1BJRGV0YWlsc1xuICApOiBPYnNlcnZhYmxlPENvbG9yQ2xhc3M+IHtcbiAgICByZXR1cm4gbWVhc3VyZW1lbnRBbmREYXRhcG9pbnRDb21iaW5hdGlvbiQucGlwZShcbiAgICAgIG1hcChsYXRlc3RNZWFzdXJlbWVudFZhbHVlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5SYW5nZU9mKGRhdGFwb2ludCwgbGF0ZXN0TWVhc3VyZW1lbnRWYWx1ZS52YWx1ZSwgJ3JlZFJhbmdlTWluJywgJ3JlZFJhbmdlTWF4JykpIHtcbiAgICAgICAgICByZXR1cm4gQ29sb3JDbGFzcy5kYW5nZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5pblJhbmdlT2YoXG4gICAgICAgICAgICBkYXRhcG9pbnQsXG4gICAgICAgICAgICBsYXRlc3RNZWFzdXJlbWVudFZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgJ3llbGxvd1JhbmdlTWluJyxcbiAgICAgICAgICAgICd5ZWxsb3dSYW5nZU1heCdcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBDb2xvckNsYXNzLndhcm5pbmc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQ29sb3JDbGFzcy51bmtub3duO1xuICAgICAgfSksXG4gICAgICBzdGFydFdpdGgoQ29sb3JDbGFzcy51bmtub3duKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXN0VHdvVmFsdWVzT2ZPYnNlcnZhYmxlJDxUPihpbnB1dCQ6IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiBpbnB1dCQucGlwZShwYWlyd2lzZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VHJlbmRPZkxhdGVzdE1lYXN1cmVtZW50cyQobGF0ZXN0TWVhc3VyZW1lbnQkOiBPYnNlcnZhYmxlPE1lYXN1cmVtZW50VmFsdWVbXT4pIHtcbiAgICByZXR1cm4gbGF0ZXN0TWVhc3VyZW1lbnQkLnBpcGUoXG4gICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHJlc1swXS52YWx1ZTtcbiAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHJlc1sxXS52YWx1ZTtcbiAgICAgICAgICBpZiAob2xkVmFsdWUgPCBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICc0NWRlZyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvbGRWYWx1ZSA+IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gJzEzNWRlZyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnOTBkZWcnO1xuICAgICAgfSksXG4gICAgICBzdGFydFdpdGgoJzkwZGVnJyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5SYW5nZU9mKFxuICAgIGRhdGFwb2ludDogS1BJRGV0YWlscyxcbiAgICBtZWFzdXJlbWVudFZhbHVlOiBudW1iZXIsXG4gICAgbWluQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgbWF4QXR0cmlidXRlOiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIGRhdGFwb2ludFttaW5BdHRyaWJ1dGVdID09PSAnbnVtYmVyJyAmJlxuICAgICAgdHlwZW9mIGRhdGFwb2ludFttYXhBdHRyaWJ1dGVdID09PSAnbnVtYmVyJ1xuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBtZWFzdXJlbWVudFZhbHVlID49IGRhdGFwb2ludFttaW5BdHRyaWJ1dGVdICYmXG4gICAgICAgIG1lYXN1cmVtZW50VmFsdWUgPCBkYXRhcG9pbnRbbWF4QXR0cmlidXRlXVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzc2lnbkNvbnRleHRGcm9tQ29udGV4dERhc2hib2FyZChkYXRhcG9pbnQ6IEtQSURldGFpbHMpIHtcbiAgICBpZiAoIXRoaXMuZGFzaGJvYXJkPy5pc0RldmljZVR5cGVEYXNoYm9hcmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZGFzaGJvYXJkPy5jb250ZXh0O1xuICAgIGlmIChjb250ZXh0Py5pZCkge1xuICAgICAgY29uc3QgeyBuYW1lLCBpZCB9ID0gY29udGV4dDtcbiAgICAgIGRhdGFwb2ludC5fX3RhcmdldCA9IHsgbmFtZSwgaWQgfTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJrcGktd2lkZ2V0X19jb250YWluZXIgZC1mbGV4IGQtY29sIGZpdC1oIGZpdC13IGEtaS1jZW50ZXIgai1jLWNlbnRlclwiXG4gICpuZ0lmPVwic3RhdGUkIHwgYXN5bmMgYXMgbGFzdFN0YXRlOyBlbHNlIG5vTWVhc3VyZW1lbnRGb3VuZFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBqLWMtY2VudGVyIGZpdC13XCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtLXItMTYgZmxleC1uby1zaHJpbmsgdGV4dC1tdXRlZFwiXG4gICAgICBbbmdDbGFzc109XCJsYXN0U3RhdGUuY29sb3JDbGFzc1wiXG4gICAgICAqbmdJZj1cImNvbmZpZy5pY29uICYmIGNvbmZpZy5zaG93SWNvblwiXG4gICAgPlxuICAgICAgPGkgY2xhc3M9XCJpY29uLTMyXCIgW2M4eUljb25dPVwiY29uZmlnLmljb25cIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwidGV4dC10cnVuY2F0ZSB0ZXh0LW1lZGl1bVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImxhc3RTdGF0ZS5jb2xvckNsYXNzXCJcbiAgICAgICAgW25nU3R5bGVdPVwieyAnZm9udC1zaXplJzogKGNvbmZpZy5mb250U2l6ZSB8fCAnMzYnKSArICdweCcgfVwiXG4gICAgICAgIHRpdGxlPVwie3tcbiAgICAgICAgICBsYXN0U3RhdGUuY29sb3JDbGFzcyA9PT0gJ3RleHQtZGFuZ2VyJ1xuICAgICAgICAgICAgPyAoJ1dpdGhpbiByZWQgcmFuZ2U6JyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgIDogbGFzdFN0YXRlLmNvbG9yQ2xhc3MgPT09ICd0ZXh0LXdhcm5pbmcnXG4gICAgICAgICAgICA/ICgnV2l0aGluIHllbGxvdyByYW5nZTonIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fSB7e1xuICAgICAgICAgIGxhc3RTdGF0ZS5sYXRlc3RNZWFzdXJlbWVudC52YWx1ZVxuICAgICAgICAgICAgfCBudW1iZXJcbiAgICAgICAgICAgICAgOiAnMS4nICtcbiAgICAgICAgICAgICAgICAgIChjb25maWcubnVtYmVyT2ZEZWNpbWFsUGxhY2VzIHx8ICcwJykgK1xuICAgICAgICAgICAgICAgICAgJy0nICtcbiAgICAgICAgICAgICAgICAgIChjb25maWcubnVtYmVyT2ZEZWNpbWFsUGxhY2VzIHx8ICcwJylcbiAgICAgICAgfX0ge3sgbGFzdFN0YXRlLnVuaXQgfHwgJycgfX1cIlxuICAgICAgPlxuICAgICAgICB7e1xuICAgICAgICAgIGxhc3RTdGF0ZS5sYXRlc3RNZWFzdXJlbWVudC52YWx1ZVxuICAgICAgICAgICAgfCBudW1iZXJcbiAgICAgICAgICAgICAgOiAnMS4nICtcbiAgICAgICAgICAgICAgICAgIChjb25maWcubnVtYmVyT2ZEZWNpbWFsUGxhY2VzIHx8ICcwJykgK1xuICAgICAgICAgICAgICAgICAgJy0nICtcbiAgICAgICAgICAgICAgICAgIChjb25maWcubnVtYmVyT2ZEZWNpbWFsUGxhY2VzIHx8ICcwJylcbiAgICAgICAgfX1cbiAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1yZWd1bGFyXCI+e3sgbGFzdFN0YXRlLnVuaXQgfHwgJycgfX08L3NtYWxsPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZG90IGRvdC1pbmZvIGRvdC0zMCBtLWwtMTYgZmxleC1uby1zaHJpbmtcIlxuICAgICAgKm5nSWY9XCJjb25maWc/LnNob3dUcmVuZCAmJiBsYXN0U3RhdGUucHJldmlvdXNWYWx1ZSBhcyBwcmV2aW91c1ZhbHVlXCJcbiAgICA+XG4gICAgICA8aVxuICAgICAgICBjbGFzcz1cImljb24tMjBcIlxuICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgKCdQcmV2aW91cyB2YWx1ZScgfCB0cmFuc2xhdGUpICtcbiAgICAgICAgICAnOiAnICtcbiAgICAgICAgICAocHJldmlvdXNWYWx1ZS52YWx1ZVxuICAgICAgICAgICAgfCBudW1iZXJcbiAgICAgICAgICAgICAgOiAnMS4nICtcbiAgICAgICAgICAgICAgICAgIChjb25maWcubnVtYmVyT2ZEZWNpbWFsUGxhY2VzIHx8ICcwJykgK1xuICAgICAgICAgICAgICAgICAgJy0nICtcbiAgICAgICAgICAgICAgICAgIChjb25maWcubnVtYmVyT2ZEZWNpbWFsUGxhY2VzIHx8ICcwJykpICtcbiAgICAgICAgICAnICgnICtcbiAgICAgICAgICAocHJldmlvdXNWYWx1ZS5kYXRlIHwgZGF0ZTogJ21lZGl1bScpICtcbiAgICAgICAgICAnKSdcbiAgICAgICAgXCJcbiAgICAgICAgYzh5SWNvbj1cImFycm93LWRvdHRlZC11cFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgdHJhbnNmb3JtOiAncm90YXRlKCcgKyBsYXN0U3RhdGUudHJlbmQgKyAnKScgfVwiXG4gICAgICA+PC9pPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBqLWMtY2VudGVyXCI+XG4gICAgPHAgKm5nSWY9XCJjb25maWc/LnNob3dUaW1lc3RhbXBcIiBjbGFzcz1cImljb24tZmxleCB0ZXh0LWNlbnRlciB0ZXh0LW11dGVkIHNtYWxsXCI+XG4gICAgICA8aSBjOHlJY29uPVwiY2FsZW5kYXJcIj48L2k+XG4gICAgICB7eyBsYXN0U3RhdGUubGF0ZXN0TWVhc3VyZW1lbnQuZGF0ZSB8IGRhdGU6ICdtZWRpdW0nIH19XG4gICAgPC9wPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI25vTWVhc3VyZW1lbnRGb3VuZD5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmaXQtaCBmaXQtdyBqLWMtY2VudGVyIGEtaS1jZW50ZXJcIj5cbiAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAqbmdJZj1cIm5vRGF0YUluaXRpYWxseUluREJcIlxuICAgICAgY2xhc3M9XCJmaXQtd1wiXG4gICAgICBbaWNvbl09XCInbGluZS1jaGFydCdcIlxuICAgICAgW3RpdGxlXT1cIidObyBtZWFzdXJlbWVudCB0byBkaXNwbGF5LicgfCB0cmFuc2xhdGVcIlxuICAgICAgW3N1YnRpdGxlXT1cIidXYWl0aW5nIGZvciBtZWFzdXJlbWVudHMgdG8gYmUgY3JlYXRlZC4nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICA8Yzh5LWxvYWRpbmcgKm5nSWY9XCIhbm9EYXRhSW5pdGlhbGx5SW5EQlwiPjwvYzh5LWxvYWRpbmc+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3BpLXdpZGdldC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2twaS9rcGktd2lkZ2V0LXZpZXcva3BpLXdpZGdldC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2twaS9rcGktd2lkZ2V0LXZpZXcva3BpLXdpZGdldC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7OztBQVNsRixJQUFLLFVBSUo7QUFKRCxXQUFLLFVBQVU7SUFDYixvQ0FBc0IsQ0FBQTtJQUN0QixzQ0FBd0IsQ0FBQTtJQUN4QiwwQkFBWSxDQUFBO0FBQ2QsQ0FBQyxFQUpJLFVBQVUsS0FBVixVQUFVLFFBSWQ7QUFPRCxNQUFNLE9BQU8sc0JBQXNCO0lBYWpDLFlBQ1UsbUJBQStDLEVBQ25DLFNBQW9DO1FBRGhELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBNEI7UUFDbkMsY0FBUyxHQUFULFNBQVMsQ0FBMkI7UUFkakQsV0FBTSxHQUFvQixFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUN0RCxXQUFNLEdBTUQsS0FBSyxDQUFDO1FBRVgsOERB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QXFCLGFBRXBCLENBQUMsMEJBQTBCLENBQUM7OzBCQWlCcEMsUUFBUTs0Q0FkRixNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgS1BJRGV0YWlscyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50LXNlbGVjdG9yJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE5FVkVSLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHBhaXJ3aXNlLCBzdGFydFdpdGgsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbnRleHREYXNoYm9hcmRDb21wb25lbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2NvbnRleHQtZGFzaGJvYXJkJztcbmltcG9ydCB7IEtwaVdpZGdldENvbmZpZyB9IGZyb20gJy4uL2twaS13aWRnZXQubW9kZWwnO1xuXG5pbnRlcmZhY2UgTWVhc3VyZW1lbnRWYWx1ZSB7XG4gIHVuaXQ/OiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGRhdGU6IHN0cmluZztcbn1cblxuZW51bSBDb2xvckNsYXNzIHtcbiAgZGFuZ2VyID0gJ3RleHQtZGFuZ2VyJyxcbiAgd2FybmluZyA9ICd0ZXh0LXdhcm5pbmcnLFxuICB1bmtub3duID0gJydcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWtwaS13aWRnZXQtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9rcGktd2lkZ2V0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgS3BpV2lkZ2V0Vmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbmZpZzogS3BpV2lkZ2V0Q29uZmlnID0geyBkYXRhcG9pbnRzOiBbXSB9O1xuICBzdGF0ZSQ6IE9ic2VydmFibGU8e1xuICAgIGxhdGVzdE1lYXN1cmVtZW50OiBNZWFzdXJlbWVudFZhbHVlO1xuICAgIHByZXZpb3VzVmFsdWU6IE1lYXN1cmVtZW50VmFsdWUgfCB1bmRlZmluZWQ7XG4gICAgdHJlbmQ6IHN0cmluZztcbiAgICB1bml0OiBzdHJpbmc7XG4gICAgY29sb3JDbGFzczogQ29sb3JDbGFzcztcbiAgfT4gPSBORVZFUjtcblxuICAvLyB1c2VkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBsb2FkaW5nIHN0YXRlIGFuZCBlbXB0eSBzdGF0ZVxuICBub0RhdGFJbml0aWFsbHlJbkRCID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtZWFzdXJlbWVudFJlYWx0aW1lOiBNZWFzdXJlbWVudFJlYWx0aW1lU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZENvbXBvbmVudFxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgZGF0YXBvaW50cyA9IHRoaXMuY29uZmlnLmRhdGFwb2ludHMgfHwgW107XG4gICAgY29uc3QgZGF0YXBvaW50OiBLUElEZXRhaWxzID0gZGF0YXBvaW50cy5maW5kKHRtcCA9PiB0bXAuX19hY3RpdmUpO1xuICAgIGlmICghZGF0YXBvaW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSQgPSB0aGlzLnNldHVwT2JzZXJ2YWJsZShkYXRhcG9pbnQpO1xuICB9XG5cbiAgc2V0dXBPYnNlcnZhYmxlKGRhdGFwb2ludDogS1BJRGV0YWlscyk6IE9ic2VydmFibGU8e1xuICAgIGxhdGVzdE1lYXN1cmVtZW50OiBNZWFzdXJlbWVudFZhbHVlO1xuICAgIHByZXZpb3VzVmFsdWU6IE1lYXN1cmVtZW50VmFsdWUgfCB1bmRlZmluZWQ7XG4gICAgdHJlbmQ6IHN0cmluZztcbiAgICB1bml0OiBzdHJpbmc7XG4gICAgY29sb3JDbGFzczogQ29sb3JDbGFzcztcbiAgfT4ge1xuICAgIHRoaXMuYXNzaWduQ29udGV4dEZyb21Db250ZXh0RGFzaGJvYXJkKGRhdGFwb2ludCk7XG4gICAgY29uc3QgbGF0ZXN0TWVhc3VyZW1lbnQkID0gdGhpcy5nZXRMYXRlc3RNZWFzdXJlbWVudCQoZGF0YXBvaW50KTtcbiAgICBjb25zdCBsYXN0VHdvVmFsdWVzJCA9IHRoaXMuZ2V0TGFzdFR3b1ZhbHVlc09mT2JzZXJ2YWJsZSQobGF0ZXN0TWVhc3VyZW1lbnQkKTtcblxuICAgIGNvbnN0IHByZXZpb3VzVmFsdWUkID0gbGFzdFR3b1ZhbHVlcyQucGlwZShcbiAgICAgIG1hcCgoW3ByZXZpb3VzVmFsXSkgPT4gcHJldmlvdXNWYWwpLFxuICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCBhcyBNZWFzdXJlbWVudFZhbHVlIHwgdW5kZWZpbmVkKVxuICAgICk7XG5cbiAgICBjb25zdCB1bml0JCA9IGxhdGVzdE1lYXN1cmVtZW50JC5waXBlKFxuICAgICAgbWFwKGxhdGVzdE1lYXN1cmVtZW50VmFsdWUgPT4gZGF0YXBvaW50LnVuaXQgfHwgbGF0ZXN0TWVhc3VyZW1lbnRWYWx1ZS51bml0IHx8ICcnKSxcbiAgICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgKTtcblxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIGxhdGVzdE1lYXN1cmVtZW50JCxcbiAgICAgIHByZXZpb3VzVmFsdWUkLFxuICAgICAgdGhpcy5nZXRUcmVuZE9mTGF0ZXN0TWVhc3VyZW1lbnRzJChsYXN0VHdvVmFsdWVzJCksXG4gICAgICB1bml0JCxcbiAgICAgIHRoaXMuZ2V0Q29sb3JDbGFzcyQobGF0ZXN0TWVhc3VyZW1lbnQkLCBkYXRhcG9pbnQpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2xhdGVzdE1lYXN1cmVtZW50LCBwcmV2aW91c1ZhbHVlLCB0cmVuZCwgdW5pdCwgY29sb3JDbGFzc10pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYXRlc3RNZWFzdXJlbWVudCxcbiAgICAgICAgICBwcmV2aW91c1ZhbHVlLFxuICAgICAgICAgIHRyZW5kLFxuICAgICAgICAgIHVuaXQsXG4gICAgICAgICAgY29sb3JDbGFzc1xuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXRlc3RNZWFzdXJlbWVudCQoZGF0YXBvaW50OiBLUElEZXRhaWxzKTogT2JzZXJ2YWJsZTxNZWFzdXJlbWVudFZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMubWVhc3VyZW1lbnRSZWFsdGltZVxuICAgICAgLmxhdGVzdFZhbHVlT2ZTcGVjaWZpY01lYXN1cmVtZW50JChcbiAgICAgICAgZGF0YXBvaW50LmZyYWdtZW50LFxuICAgICAgICBkYXRhcG9pbnQuc2VyaWVzLFxuICAgICAgICBkYXRhcG9pbnQuX190YXJnZXQsXG4gICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0aGUgbGFzdCB0d28gdmFsdWVzIGluIGNhc2Ugd2Ugd2FudCB0byBzaG93IGEgdHJlbmRcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd1RyZW5kID8gMiA6IDEsXG4gICAgICAgIC8vIG51bGwgd2lsbCBiZSBlbWl0dGVkIGluIGNhc2Ugbm8gbWVhc3VyZW1lbnQgd2FzIGZvdW5kIGluaXRpYWxseVxuICAgICAgICB0cnVlXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKG1lYXN1cmVtZW50ID0+IHtcbiAgICAgICAgICBpZiAoIW1lYXN1cmVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLm5vRGF0YUluaXRpYWxseUluREIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGZpbHRlcihtZWFzdXJlbWVudCA9PiAhIW1lYXN1cmVtZW50KSxcbiAgICAgICAgbWFwKG1lYXN1cmVtZW50ID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdW5pdDogbWVhc3VyZW1lbnRbZGF0YXBvaW50LmZyYWdtZW50XVtkYXRhcG9pbnQuc2VyaWVzXS51bml0LFxuICAgICAgICAgICAgdmFsdWU6IG1lYXN1cmVtZW50W2RhdGFwb2ludC5mcmFnbWVudF1bZGF0YXBvaW50LnNlcmllc10udmFsdWUsXG4gICAgICAgICAgICBkYXRlOiBtZWFzdXJlbWVudC50aW1lIGFzIHN0cmluZ1xuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2xvckNsYXNzJChcbiAgICBtZWFzdXJlbWVudEFuZERhdGFwb2ludENvbWJpbmF0aW9uJDogT2JzZXJ2YWJsZTxNZWFzdXJlbWVudFZhbHVlPixcbiAgICBkYXRhcG9pbnQ6IEtQSURldGFpbHNcbiAgKTogT2JzZXJ2YWJsZTxDb2xvckNsYXNzPiB7XG4gICAgcmV0dXJuIG1lYXN1cmVtZW50QW5kRGF0YXBvaW50Q29tYmluYXRpb24kLnBpcGUoXG4gICAgICBtYXAobGF0ZXN0TWVhc3VyZW1lbnRWYWx1ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmluUmFuZ2VPZihkYXRhcG9pbnQsIGxhdGVzdE1lYXN1cmVtZW50VmFsdWUudmFsdWUsICdyZWRSYW5nZU1pbicsICdyZWRSYW5nZU1heCcpKSB7XG4gICAgICAgICAgcmV0dXJuIENvbG9yQ2xhc3MuZGFuZ2VyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuaW5SYW5nZU9mKFxuICAgICAgICAgICAgZGF0YXBvaW50LFxuICAgICAgICAgICAgbGF0ZXN0TWVhc3VyZW1lbnRWYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICd5ZWxsb3dSYW5nZU1pbicsXG4gICAgICAgICAgICAneWVsbG93UmFuZ2VNYXgnXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gQ29sb3JDbGFzcy53YXJuaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIENvbG9yQ2xhc3MudW5rbm93bjtcbiAgICAgIH0pLFxuICAgICAgc3RhcnRXaXRoKENvbG9yQ2xhc3MudW5rbm93biksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGFzdFR3b1ZhbHVlc09mT2JzZXJ2YWJsZSQ8VD4oaW5wdXQkOiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICByZXR1cm4gaW5wdXQkLnBpcGUocGFpcndpc2UoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFRyZW5kT2ZMYXRlc3RNZWFzdXJlbWVudHMkKGxhdGVzdE1lYXN1cmVtZW50JDogT2JzZXJ2YWJsZTxNZWFzdXJlbWVudFZhbHVlW10+KSB7XG4gICAgcmV0dXJuIGxhdGVzdE1lYXN1cmVtZW50JC5waXBlKFxuICAgICAgbWFwKHJlcyA9PiB7XG4gICAgICAgIGlmIChyZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSByZXNbMF0udmFsdWU7XG4gICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSByZXNbMV0udmFsdWU7XG4gICAgICAgICAgaWYgKG9sZFZhbHVlIDwgbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiAnNDVkZWcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2xkVmFsdWUgPiBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICcxMzVkZWcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzkwZGVnJztcbiAgICAgIH0pLFxuICAgICAgc3RhcnRXaXRoKCc5MGRlZycpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluUmFuZ2VPZihcbiAgICBkYXRhcG9pbnQ6IEtQSURldGFpbHMsXG4gICAgbWVhc3VyZW1lbnRWYWx1ZTogbnVtYmVyLFxuICAgIG1pbkF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIG1heEF0dHJpYnV0ZTogc3RyaW5nXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBkYXRhcG9pbnRbbWluQXR0cmlidXRlXSA9PT0gJ251bWJlcicgJiZcbiAgICAgIHR5cGVvZiBkYXRhcG9pbnRbbWF4QXR0cmlidXRlXSA9PT0gJ251bWJlcidcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgbWVhc3VyZW1lbnRWYWx1ZSA+PSBkYXRhcG9pbnRbbWluQXR0cmlidXRlXSAmJlxuICAgICAgICBtZWFzdXJlbWVudFZhbHVlIDwgZGF0YXBvaW50W21heEF0dHJpYnV0ZV1cbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25Db250ZXh0RnJvbUNvbnRleHREYXNoYm9hcmQoZGF0YXBvaW50OiBLUElEZXRhaWxzKSB7XG4gICAgaWYgKCF0aGlzLmRhc2hib2FyZD8uaXNEZXZpY2VUeXBlRGFzaGJvYXJkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmRhc2hib2FyZD8uY29udGV4dDtcbiAgICBpZiAoY29udGV4dD8uaWQpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgaWQgfSA9IGNvbnRleHQ7XG4gICAgICBkYXRhcG9pbnQuX190YXJnZXQgPSB7IG5hbWUsIGlkIH07XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwia3BpLXdpZGdldF9fY29udGFpbmVyIGQtZmxleCBkLWNvbCBmaXQtaCBmaXQtdyBhLWktY2VudGVyIGotYy1jZW50ZXJcIlxuICAqbmdJZj1cInN0YXRlJCB8IGFzeW5jIGFzIGxhc3RTdGF0ZTsgZWxzZSBub01lYXN1cmVtZW50Rm91bmRcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgai1jLWNlbnRlciBmaXQtd1wiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibS1yLTE2IGZsZXgtbm8tc2hyaW5rIHRleHQtbXV0ZWRcIlxuICAgICAgW25nQ2xhc3NdPVwibGFzdFN0YXRlLmNvbG9yQ2xhc3NcIlxuICAgICAgKm5nSWY9XCJjb25maWcuaWNvbiAmJiBjb25maWcuc2hvd0ljb25cIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiaWNvbi0zMlwiIFtjOHlJY29uXT1cImNvbmZpZy5pY29uXCI+PC9pPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGUgdGV4dC1tZWRpdW1cIlxuICAgICAgICBbbmdDbGFzc109XCJsYXN0U3RhdGUuY29sb3JDbGFzc1wiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgJ2ZvbnQtc2l6ZSc6IChjb25maWcuZm9udFNpemUgfHwgJzM2JykgKyAncHgnIH1cIlxuICAgICAgICB0aXRsZT1cInt7XG4gICAgICAgICAgbGFzdFN0YXRlLmNvbG9yQ2xhc3MgPT09ICd0ZXh0LWRhbmdlcidcbiAgICAgICAgICAgID8gKCdXaXRoaW4gcmVkIHJhbmdlOicgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICA6IGxhc3RTdGF0ZS5jb2xvckNsYXNzID09PSAndGV4dC13YXJuaW5nJ1xuICAgICAgICAgICAgPyAoJ1dpdGhpbiB5ZWxsb3cgcmFuZ2U6JyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX0ge3tcbiAgICAgICAgICBsYXN0U3RhdGUubGF0ZXN0TWVhc3VyZW1lbnQudmFsdWVcbiAgICAgICAgICAgIHwgbnVtYmVyXG4gICAgICAgICAgICAgIDogJzEuJyArXG4gICAgICAgICAgICAgICAgICAoY29uZmlnLm51bWJlck9mRGVjaW1hbFBsYWNlcyB8fCAnMCcpICtcbiAgICAgICAgICAgICAgICAgICctJyArXG4gICAgICAgICAgICAgICAgICAoY29uZmlnLm51bWJlck9mRGVjaW1hbFBsYWNlcyB8fCAnMCcpXG4gICAgICAgIH19IHt7IGxhc3RTdGF0ZS51bml0IHx8ICcnIH19XCJcbiAgICAgID5cbiAgICAgICAge3tcbiAgICAgICAgICBsYXN0U3RhdGUubGF0ZXN0TWVhc3VyZW1lbnQudmFsdWVcbiAgICAgICAgICAgIHwgbnVtYmVyXG4gICAgICAgICAgICAgIDogJzEuJyArXG4gICAgICAgICAgICAgICAgICAoY29uZmlnLm51bWJlck9mRGVjaW1hbFBsYWNlcyB8fCAnMCcpICtcbiAgICAgICAgICAgICAgICAgICctJyArXG4gICAgICAgICAgICAgICAgICAoY29uZmlnLm51bWJlck9mRGVjaW1hbFBsYWNlcyB8fCAnMCcpXG4gICAgICAgIH19XG4gICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtcmVndWxhclwiPnt7IGxhc3RTdGF0ZS51bml0IHx8ICcnIH19PC9zbWFsbD5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImRvdCBkb3QtaW5mbyBkb3QtMzAgbS1sLTE2IGZsZXgtbm8tc2hyaW5rXCJcbiAgICAgICpuZ0lmPVwiY29uZmlnPy5zaG93VHJlbmQgJiYgbGFzdFN0YXRlLnByZXZpb3VzVmFsdWUgYXMgcHJldmlvdXNWYWx1ZVwiXG4gICAgPlxuICAgICAgPGlcbiAgICAgICAgY2xhc3M9XCJpY29uLTIwXCJcbiAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICgnUHJldmlvdXMgdmFsdWUnIHwgdHJhbnNsYXRlKSArXG4gICAgICAgICAgJzogJyArXG4gICAgICAgICAgKHByZXZpb3VzVmFsdWUudmFsdWVcbiAgICAgICAgICAgIHwgbnVtYmVyXG4gICAgICAgICAgICAgIDogJzEuJyArXG4gICAgICAgICAgICAgICAgICAoY29uZmlnLm51bWJlck9mRGVjaW1hbFBsYWNlcyB8fCAnMCcpICtcbiAgICAgICAgICAgICAgICAgICctJyArXG4gICAgICAgICAgICAgICAgICAoY29uZmlnLm51bWJlck9mRGVjaW1hbFBsYWNlcyB8fCAnMCcpKSArXG4gICAgICAgICAgJyAoJyArXG4gICAgICAgICAgKHByZXZpb3VzVmFsdWUuZGF0ZSB8IGRhdGU6ICdtZWRpdW0nKSArXG4gICAgICAgICAgJyknXG4gICAgICAgIFwiXG4gICAgICAgIGM4eUljb249XCJhcnJvdy1kb3R0ZWQtdXBcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7IHRyYW5zZm9ybTogJ3JvdGF0ZSgnICsgbGFzdFN0YXRlLnRyZW5kICsgJyknIH1cIlxuICAgICAgPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggai1jLWNlbnRlclwiPlxuICAgIDxwICpuZ0lmPVwiY29uZmlnPy5zaG93VGltZXN0YW1wXCIgY2xhc3M9XCJpY29uLWZsZXggdGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBzbWFsbFwiPlxuICAgICAgPGkgYzh5SWNvbj1cImNhbGVuZGFyXCI+PC9pPlxuICAgICAge3sgbGFzdFN0YXRlLmxhdGVzdE1lYXN1cmVtZW50LmRhdGUgfCBkYXRlOiAnbWVkaXVtJyB9fVxuICAgIDwvcD5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNub01lYXN1cmVtZW50Rm91bmQ+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZml0LWggZml0LXcgai1jLWNlbnRlciBhLWktY2VudGVyXCI+XG4gICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgKm5nSWY9XCJub0RhdGFJbml0aWFsbHlJbkRCXCJcbiAgICAgIGNsYXNzPVwiZml0LXdcIlxuICAgICAgW2ljb25dPVwiJ2xpbmUtY2hhcnQnXCJcbiAgICAgIFt0aXRsZV09XCInTm8gbWVhc3VyZW1lbnQgdG8gZGlzcGxheS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtzdWJ0aXRsZV09XCInV2FpdGluZyBmb3IgbWVhc3VyZW1lbnRzIHRvIGJlIGNyZWF0ZWQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgPGM4eS1sb2FkaW5nICpuZ0lmPVwiIW5vRGF0YUluaXRpYWxseUluREJcIj48L2M4eS1sb2FkaW5nPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|