raise-common-lib 0.0.213 → 0.0.215
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/README.md +57 -57
- package/bundles/raise-common-lib.umd.js +122 -31
- package/bundles/raise-common-lib.umd.js.map +1 -1
- package/bundles/raise-common-lib.umd.min.js +1 -1
- package/bundles/raise-common-lib.umd.min.js.map +1 -1
- package/esm2015/lib/dashboard/bar-charts/bar-charts.component.js +2 -2
- package/esm2015/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.js +3 -3
- package/esm2015/lib/dashboard/dialog-group/download/index.component.js +3 -3
- package/esm2015/lib/dashboard/dialog-group/empty-icon-prompt/empty-icon-prompt.component.js +3 -3
- package/esm2015/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.js +2 -2
- package/esm2015/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.js +2 -2
- package/esm2015/lib/dashboard/gadget-group/gadget-table/gadget-table.component.js +2 -2
- package/esm2015/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.js +3 -3
- package/esm2015/lib/dashboard/pane-group-new.component.js +1 -1
- package/esm2015/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.js +2 -2
- package/esm2015/lib/dashboard/sidebar-iconlist/field-format/field-format.component.js +3 -3
- package/esm2015/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.js +3 -3
- package/esm2015/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.js +4 -4
- package/esm2015/lib/dialog/new-action-notification/new-action-notification.component.js +1 -1
- package/esm2015/lib/float-box/index.component.js +97 -6
- package/esm2015/lib/form/drawer-form/drawer-form.component.js +1 -1
- package/esm2015/lib/form/richtexteditor/index.component.js +1 -1
- package/esm2015/lib/layout/drawer/index.component.js +1 -1
- package/esm2015/lib/layout/page-tab/index.component.js +1 -1
- package/esm5/lib/dashboard/bar-charts/bar-charts.component.js +2 -2
- package/esm5/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.js +3 -3
- package/esm5/lib/dashboard/dialog-group/download/index.component.js +3 -3
- package/esm5/lib/dashboard/dialog-group/empty-icon-prompt/empty-icon-prompt.component.js +3 -3
- package/esm5/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.js +2 -2
- package/esm5/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.js +2 -2
- package/esm5/lib/dashboard/gadget-group/gadget-table/gadget-table.component.js +2 -2
- package/esm5/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.js +3 -3
- package/esm5/lib/dashboard/pane-group-new.component.js +1 -1
- package/esm5/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.js +2 -2
- package/esm5/lib/dashboard/sidebar-iconlist/field-format/field-format.component.js +3 -3
- package/esm5/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.js +3 -3
- package/esm5/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.js +4 -4
- package/esm5/lib/dialog/new-action-notification/new-action-notification.component.js +1 -1
- package/esm5/lib/float-box/index.component.js +97 -6
- package/esm5/lib/form/drawer-form/drawer-form.component.js +1 -1
- package/esm5/lib/form/richtexteditor/index.component.js +1 -1
- package/esm5/lib/layout/drawer/index.component.js +1 -1
- package/esm5/lib/layout/page-tab/index.component.js +1 -1
- package/fesm2015/raise-common-lib.js +122 -31
- package/fesm2015/raise-common-lib.js.map +1 -1
- package/fesm5/raise-common-lib.js +122 -31
- package/fesm5/raise-common-lib.js.map +1 -1
- package/lib/float-box/index.component.d.ts +1 -0
- package/package.json +1 -1
- package/raise-common-lib.metadata.json +1 -1
- package/src/assets/img/arrow_right.svg +4 -4
- package/src/assets/img/calendar-disabled.svg +6 -6
- package/src/assets/img/calendar.svg +6 -6
- package/src/assets/img/calendar_arrow_left.svg +3 -3
- package/src/assets/img/calendar_arrow_right.svg +3 -3
- package/src/assets/img/checked-vector.svg +3 -3
- package/src/assets/img/dialog-close.svg +4 -4
- package/src/assets/img/dialog-grow.svg +6 -6
- package/src/assets/img/dialog-shrink.svg +6 -6
- package/src/assets/img/plus.svg +4 -4
- package/src/assets/img/search.svg +4 -4
- package/src/assets/img/shrink-icon.svg +6 -6
- package/src/assets/img/time-disabled.svg +4 -4
- package/src/assets/img/time.svg +4 -4
- package/src/assets/img/toolbar-action-addFolder.svg +17 -17
- package/src/assets/img/toolbar-action-calculator.svg +11 -11
- package/src/assets/img/toolbar-action-collapse.svg +7 -7
- package/src/assets/img/toolbar-action-combine.svg +4 -4
- package/src/assets/img/toolbar-action-edit.svg +4 -4
- package/src/assets/img/toolbar-action-expand.svg +7 -7
- package/src/assets/img/toolbar-action-folderMove.svg +8 -8
- package/src/assets/img/toolbar-action-lock.svg +6 -6
- package/src/assets/img/toolbar-action-preview.svg +7 -7
- package/src/assets/img/toolbar-action-publish.svg +5 -5
- package/src/assets/img/toolbar-action-reminders.svg +10 -10
- package/src/assets/img/toolbar-action-rename.svg +7 -7
- package/src/assets/img/toolbar-action-saveSequence.svg +5 -5
- package/src/assets/img/toolbar-action-send-file.svg +5 -5
- package/src/assets/img/toolbar-action-settle.svg +7 -7
- package/src/assets/img/toolbar-action-share.svg +5 -5
- package/src/assets/img/toolbar-action-submitForApproval.svg +4 -4
- package/src/assets/img/toolbar-action-sync.svg +4 -4
- package/src/assets/img/toolbar-action-template.svg +6 -6
- package/src/assets/img/toolbar-action-workflow.svg +9 -9
|
@@ -4728,7 +4728,7 @@ var GadgetPivotComponent = /** @class */ (function () {
|
|
|
4728
4728
|
};
|
|
4729
4729
|
GadgetPivotComponent.decorators = [
|
|
4730
4730
|
{ type: Component, args: [{
|
|
4731
|
-
selector: "
|
|
4731
|
+
selector: "rs-gadget-pivot",
|
|
4732
4732
|
template: "<div class=\"control-section\" style=\"overflow: hidden; height: 100%\">\r\n\t<ejs-pivotview\r\n\t\twidth=\"100%\"\r\n\t\theight=\"100%\"\r\n\t\tstyle=\"display: block\"\r\n\t\t[dataSourceSettings]=\"dataSourceSettings\"\r\n\t\t#pivotview\r\n\t\t(dataBound)=\"dataBound($event)\"\r\n\t\tenableValueSorting=\"true\"\r\n\t\tallowConditionalFormatting=\"true\"\r\n\t\t[allowDeferLayoutUpdate]=\"true\"\r\n\t\t[gridSettings]=\"gridSettings\"\r\n\t\tallowExcelExport=\"true\"\r\n\t\tallowGrouping=\"true\"\r\n\t\t[zoomSettings]=\"zoomSettings\"\r\n\t\tenableVirtualization=\"true\"\r\n\t\t(enginePopulated)=\"afterEnginePopulate($event)\"\r\n\t\t(aggregateCellInfo)=\"aggregateCellInfo($event)\"\r\n\t\t(cellClick)=\"cellClick($event)\"\r\n\t\tallowDrillThrough=\"true\"\r\n\t\t(actionFailure)=\"actionFailure($event)\"\r\n\t\t(actionComplete)=\"actionComplete($event)\"\r\n\t\t(actionBegin)=\"actionBegin($event)\"\r\n\t\t(fieldListRefreshed)=\"fieldListRefreshed($event)\"\r\n\t\t(drillThrough)=\"drillThrough($event)\"\r\n\t\t[showTooltip]=\"false\"\r\n\t\t(queryCellInfo)=\"customiseCell($event)\"\r\n\t\t(beforeExport)=\"beforeExport($event)\"\r\n\t>\r\n\t</ejs-pivotview>\r\n\r\n\t<div class=\"pivotfieldlist-control\">\r\n\t\t<ejs-pivotfieldlist\r\n\t\t\t[id]=\"portlet.newId\"\r\n\t\t\t#pivotfieldlist\r\n\t\t\t[allowDeferLayoutUpdate]=\"true\"\r\n\t\t\trenderMode=\"Popup\"\r\n\t\t\t(enginePopulated)=\"afterPopulate($event)\"\r\n\t\t\t(memberEditorOpen)=\"onMemberEditorOpen($event)\"\r\n\t\t\t(enginePopulating)=\"enginePopulating($event)\"\r\n\t\t\t(aggregateCellInfo)=\"aggregateCellInfo($event)\"\r\n\t\t\t(fieldDrop)=\"onFieldDrop($event)\"\r\n\t\t\t(actionComplete)=\"actionComplete($event)\"\r\n\t\t\t(actionBegin)=\"actionBegin($event)\"\r\n\t\t\t(calculatedFieldCreate)=\"calculatedFieldCreate($event)\"\r\n\t\t\t(load)=\"onLoad()\"\r\n\t\t\t(created)=\"created($event)\"\r\n\t\t\t(dataBound)='ondataBound()'\r\n\t\t>\r\n\t\t</ejs-pivotfieldlist>\r\n\t</div>\r\n\r\n\t<div class=\"full-box-mask\" *ngIf=\"pageLoading\">\r\n\t\t<mat-spinner\r\n\t\t\tstyle=\"z-index: 999\"\r\n\t\t\tmode=\"indeterminate\"\r\n\t\t\t[diameter]=\"24\"\r\n\t\t></mat-spinner>\r\n\t</div>\r\n</div>\r\n",
|
|
4733
4733
|
providers: [
|
|
4734
4734
|
ToolbarService,
|
|
@@ -4937,4 +4937,4 @@ if (false) {
|
|
|
4937
4937
|
*/
|
|
4938
4938
|
GadgetPivotComponent.prototype.pbf;
|
|
4939
4939
|
}
|
|
4940
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3JhaXNlLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvZGFzaGJvYXJkL2dhZGdldC1ncm91cC9nYWRnZXQtcGl2b3QvZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ04saUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUNULHVCQUF1QixFQUN2QixNQUFNLEVBQ04sUUFBUSxHQUNSLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFTix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBR2xCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUV0QixrQkFBa0IsRUFHbEIsb0JBQW9CLEVBSXBCLG1CQUFtQixHQUduQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFDTixJQUFJLEVBQ0osWUFBWSxFQUNaLE9BQU8sR0FDUCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFDTixNQUFNLEVBQ04sY0FBYyxFQUNkLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sSUFBSSxPQUFPLEVBQ2pCLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sR0FDTixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix1QkFBdUIsR0FDdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FB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Z0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7O0lBNjdIL0MsMkJBQUM7Q0FBQSxBQTE5SEQsSUEwOUhDO1NBMzhIWSxvQkFBb0I7OztJQUNoQyx1Q0FBaUI7O0lBQ2pCLHlDQUFtQjs7SUFDbkIsd0NBQWtCOzs7OztJQUNsQiwwQ0FBK0I7Ozs7O0lBQy9CLHNDQUFlOztJQUNmLGtEQUF3Qzs7SUFDeEMsNENBQWtDOzs7OztJQUNsQyw2Q0FBMkI7Ozs7O0lBQzNCLDhDQUE0Qjs7Ozs7SUFDNUIsOENBQXVCOztJQUN2QiwyQ0FBbUI7Ozs7O0lBQ25CLHdDQUNxQzs7SUFDckMsNENBQzZDOzs7OztJQUM3QywwQ0FBc0M7Ozs7O0lBQ3RDLDJDQUF5Qjs7Ozs7SUFDekIseUNBQXVCOzs7OztJQUN2QixvQ0FBOEI7Ozs7O0lBQzlCLDRDQUE0Qjs7Ozs7SUFDNUIsNkNBQTJDOzs7OztJQUMzQyw0Q0FBcUI7Ozs7O0lBRXJCLHNDQUErQjs7Ozs7SUFDL0IsOENBQXNDOztJQUN0QywrQ0FFRTs7Ozs7SUFDRiwyQ0FBeUI7Ozs7O0lBQ3pCLDRDQUEwQjs7Ozs7SUFDMUIsNkNBU0U7O0lBQ0YsNENBRUU7O0lBQ0YsbURBTUU7Ozs7O0lBQ0YsMkNBQXlCOzs7OztJQUN6QixzREFBMkM7Ozs7O0lBQzNDLHVEQUE0Qzs7Ozs7SUFDNUMsOENBR0U7Ozs7O0lBQ0YsNkNBQTJCOzs7OztJQUMzQiw2Q0FBMkI7O0lBQzNCLDhDQUFzQjs7SUFDdEIsMENBQW1DOztJQUNuQywyQ0FBd0I7Ozs7O0lBQ3hCLGdEQUE4Qjs7SUFDOUIsMkNBQW1COztJQXUvQ25CLDhDQUFvQjs7Ozs7SUFwL0NuQix1REFBd0Q7Ozs7O0lBQ3hELGdEQUEwQzs7Ozs7SUFDMUMsbUNBQThCOzs7OztJQUM5QixtQ0FBK0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cdENoYW5nZURldGVjdG9yUmVmLFxyXG5cdENvbXBvbmVudCxcclxuXHRJbnB1dCxcclxuXHRPbkluaXQsXHJcblx0Vmlld0NoaWxkLFxyXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG5cdEluamVjdCxcclxuXHRPcHRpb25hbCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtcclxuXHRJRGF0YU9wdGlvbnMsXHJcblx0UGl2b3RGaWVsZExpc3RDb21wb25lbnQsXHJcblx0UGl2b3RWaWV3Q29tcG9uZW50LFxyXG5cdEVuZ2luZVBvcHVsYXRlZEV2ZW50QXJncyxcclxuXHRJRGF0YVNldCxcclxuXHRUb29sYmFyU2VydmljZSxcclxuXHRGaWVsZExpc3RTZXJ2aWNlLFxyXG5cdE51bWJlckZvcm1hdHRpbmdTZXJ2aWNlLFxyXG5cdENhbGN1bGF0ZWRGaWVsZFNlcnZpY2UsXHJcblx0Q2FsY3VsYXRlZEZpZWxkQ3JlYXRlRXZlbnRBcmdzLFxyXG5cdEdyb3VwaW5nQmFyU2VydmljZSxcclxuXHRGaWVsZERyb3BFdmVudEFyZ3MsXHJcblx0SVNvcnQsXHJcblx0VmlydHVhbFNjcm9sbFNlcnZpY2UsXHJcblx0SVBpdm90VmFsdWVzLFxyXG5cdElQYWdlU2V0dGluZ3MsXHJcblx0RHJpbGxUaHJvdWdoRXZlbnRBcmdzLFxyXG5cdERyaWxsVGhyb3VnaFNlcnZpY2UsXHJcblx0UGl2b3RBY3Rpb25GYWlsdXJlRXZlbnRBcmdzLFxyXG5cdFF1ZXJ5Q2VsbEluZm9FdmVudEFyZ3MsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXBpdm90dmlld1wiO1xyXG5pbXBvcnQge1xyXG5cdEwxMG4sXHJcblx0ZW5hYmxlUmlwcGxlLFxyXG5cdEJyb3dzZXIsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1iYXNlXCI7XHJcbmltcG9ydCB7IEdyaWRTZXR0aW5ncyB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItcGl2b3R2aWV3L3NyYy9waXZvdHZpZXcvbW9kZWwvZ3JpZHNldHRpbmdzXCI7XHJcbmltcG9ydCB7XHJcblx0c29ydEJ5LFxyXG5cdGRpZmZlcmVuY2VXaXRoLFxyXG5cdHN0YXJ0c1dpdGgsXHJcblx0Y2xvbmVEZWVwLFxyXG5cdHVuaXFCeSxcclxuXHRmaWx0ZXIgYXMgX2ZpbHRlcixcclxuXHRtYXhCeSxcclxuXHRtaW5CeSxcclxuXHRzdW1CeSxcclxuXHRtZWFuQnksXHJcbn0gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgeyBEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2Rhc2hib2FyZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcblx0QUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0QUxMX0FHR1JFR0FURV9UWVBFUyxcclxuXHREYXNoYm9hcmRQb3JsZXRzU2VydmljZSxcclxufSBmcm9tIFwiLi4vLi4vZGFzaGJvYXJkUG9ybGV0cy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE1hc2tlZFRleHRCb3ggfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWlucHV0cy9zcmMvbWFza2VkdGV4dGJveC9tYXNrZWR0ZXh0Ym94XCI7XHJcbmltcG9ydCB7IERhdGFNYW5hZ2VyIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1kYXRhL3NyYy9tYW5hZ2VyXCI7XHJcbmltcG9ydCB7IFByZWRpY2F0ZSwgUXVlcnkgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWRhdGEvc3JjL3F1ZXJ5XCI7XHJcbmltcG9ydCB7IERhdGFVdGlsIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1kYXRhXCI7XHJcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQgeyBQQkZfVE9LRU4gfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZS9JbmplY3Rpb25Ub2tlblwiO1xyXG5cclxuZW5hYmxlUmlwcGxlKGZhbHNlKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiBcImt0LWdhZGdldC1waXZvdFwiLFxyXG5cdHRlbXBsYXRlVXJsOiBcIi4vZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5odG1sXCIsXHJcblx0c3R5bGVVcmxzOiBbXCIuL2dhZGdldC1waXZvdC5jb21wb25lbnQuc2Nzc1wiXSxcclxuXHRwcm92aWRlcnM6IFtcclxuXHRcdFRvb2xiYXJTZXJ2aWNlLFxyXG5cdFx0RmllbGRMaXN0U2VydmljZSxcclxuXHRcdE51bWJlckZvcm1hdHRpbmdTZXJ2aWNlLFxyXG5cdFx0Q2FsY3VsYXRlZEZpZWxkU2VydmljZSxcclxuXHRcdEdyb3VwaW5nQmFyU2VydmljZSxcclxuXHRcdFZpcnR1YWxTY3JvbGxTZXJ2aWNlLFxyXG5cdFx0RHJpbGxUaHJvdWdoU2VydmljZSxcclxuXHRdLFxyXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2FkZ2V0UGl2b3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdEBJbnB1dCgpIHBvcnRsZXQ7XHJcblx0QElucHV0KCkgZGFzaGJvYXJkO1xyXG5cdEBJbnB1dCgpIHBvcnRsZXRzO1xyXG5cdHByaXZhdGUgUGl2b3RfRGF0YTogSURhdGFTZXRbXTtcclxuXHRwcml2YXRlIGNvbmZpZztcclxuXHRwdWJsaWMgZGF0YVNvdXJjZVNldHRpbmdzOiBJRGF0YU9wdGlvbnM7XHJcblx0cHVibGljIGdyaWRTZXR0aW5nczogR3JpZFNldHRpbmdzO1xyXG5cdHByaXZhdGUgZXhjbHVkZUZpZWxkcyA9IFtdO1xyXG5cdHByaXZhdGUgZmlsdGVyU2V0dGluZ3MgPSBbXTtcclxuXHRwcml2YXRlIGRhdGVQaXBlRm9ybWF0O1xyXG5cdHB1YmxpYyB0cmFuc2xhdGlvbjtcclxuXHRAVmlld0NoaWxkKFwicGl2b3R2aWV3XCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG5cdHByaXZhdGUgcGl2b3RPYmo6IFBpdm90Vmlld0NvbXBvbmVudDtcclxuXHRAVmlld0NoaWxkKFwicGl2b3RmaWVsZGxpc3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcblx0cHVibGljIGZpZWxkbGlzdE9iajogUGl2b3RGaWVsZExpc3RDb21wb25lbnQ7XHJcblx0cHJpdmF0ZSBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcclxuXHRwcml2YXRlIGdyYW5kVG90YWxzID0ge307XHJcblx0cHJpdmF0ZSBzdWJUb3RhbHMgPSB7fTtcclxuXHRwcml2YXRlIGZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwcml2YXRlIHByZXZpb3VzU29ydDogSVNvcnQ7XHJcblx0cHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cdHByaXZhdGUgYWxsRGF0YVZhbHVlO1xyXG5cdC8vIHByaXZhdGUgY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3M7XHJcblx0cHJpdmF0ZSBpc0luaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdHByaXZhdGUgcGl2b3RTZWFyY2hCb3g6IE1hc2tlZFRleHRCb3g7XHJcblx0cHVibGljIHRvb2x0aXBTZXR0aW5ncyA9IHtcclxuXHRcdGVuYWJsZTogZmFsc2UsXHJcblx0fTtcclxuXHRwcml2YXRlIGNvbHVtblRleHRzID0gW107XHJcblx0cHJpdmF0ZSBjb25maWdGaWVsZHMgPSBbXTtcclxuXHRwcml2YXRlIHF1YXJ0ZXJGb3JtYXQgPSBbXHJcblx0XHR7IHZhbHVlOiBcIjAzLzIwMjFcIiwgZm9ybWF0OiBcIk1NL3l5eXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCIwMy8yMVwiLCBmb3JtYXQ6IFwiTU0vZGRcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCIzLzIwMjFcIiwgZm9ybWF0OiBcIk0veXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIjMvMjFcIiwgZm9ybWF0OiBcIk0veXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCJNYXJjaCAyMDIxXCIsIGZvcm1hdDogXCJNTU1NIHl5eXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCJNYXIsIDIwMjFcIiwgZm9ybWF0OiBcIk1NTSwgeXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIk1hcmNoLCAyMDIxXCIsIGZvcm1hdDogXCJNTU1NLCB5eXl5XCIgfSxcclxuXHRcdHsgdmFsdWU6IFwiMjAyMVwiLCBmb3JtYXQ6IFwieXl5eVwiIH0sXHJcblx0XTtcclxuXHR6b29tU2V0dGluZ3MgPSB7XHJcblx0XHRlbmFibGU6IGZhbHNlLFxyXG5cdH07XHJcblx0aXRlbURhdGFUeXBlU29ydEFyciA9IFtcclxuXHRcdFwiQXNzZXRzXCIsXHJcblx0XHRcIkxpYWJpbGl0aWVzXCIsXHJcblx0XHRcIkVxdWl0eVwiLFxyXG5cdFx0XCJQJkxcIixcclxuXHRcdFwiQ2FzaGZsb3dcIixcclxuXHRdO1xyXG5cdHByaXZhdGUgZm9ybWF0RGF0ZXMgPSBbXTtcclxuXHRwcml2YXRlIGN1c3RvbUNhbGN1bGF0ZWRGaWVsZHM6IGFueVtdID0gW107IC8vIOiHquWumuS5ieiuoeeul+WIl1xyXG5cdHByaXZhdGUgYWxsb3dlZENhbGN1bGF0ZWRGaWVsZHM6IGFueVtdID0gW107IC8vIOWFgeiuuOiHquWumuS5ieeul+azleeahOWtl+autVxyXG5cdHByaXZhdGUgemVyb0Zvcm1hdERhdGEgPSB7XHJcblx0XHRlbXB0eUxpc3Q6IFtdLFxyXG5cdFx0aGdMaXN0OiBbXSxcclxuXHR9O1xyXG5cdHByaXZhdGUgbWlsbGlvbkZpZWxkcyA9IFtdO1xyXG5cdHByaXZhdGUgdGVtcFN1YnRvdGFscyA9IFtdO1xyXG5cdHB1YmxpYyBvcmRlckJ5Q29sdW1uczsgLy8gRWc6IFwiRHVlRGF0ZSwgU2VxdWVuY2VcIlxyXG5cdHB1YmxpYyBpc0FwcGx5SVJSOiBib29sZWFuID0gZmFsc2U7XHJcblx0cHVibGljIGNhbGNJUlJEYXRhOiBhbnk7XHJcblx0cHJpdmF0ZSBwZXJjZW50TnVtRmllbGRzID0gW107XHJcblx0cHVibGljIHBhZ2VMb2FkaW5nO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2U6IERhc2hib2FyZFBvcmxldHNTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBEYXNoYm9hcmRTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdFx0QE9wdGlvbmFsKCkgQEluamVjdChQQkZfVE9LRU4pIHByaXZhdGUgcGJmOiBhbnksXHJcblxyXG5cdCkge31cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHR0aGlzLmdldEluZm8oKTtcclxuXHRcdEwxMG4ubG9hZCh7XHJcblx0XHRcdFwiZW4tVVNcIjoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR6aDoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRcInpoLUhhbnQtSEtcIjoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRqYToge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRrbzoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRmcjoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmdldERhdGEoKTtcclxuXHR9XHJcblxyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0Y2hhbmdlUGl2b3QoKS5zdWJzY3JpYmUoKHVwZGF0ZWQpID0+IHtcclxuXHRcdFx0XHRpZiAodXBkYXRlZCA9PT0gdGhpcy5wb3J0bGV0Lm5ld0lkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmdldERhdGEoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0U3RhcnRSZWZyZXNoKCkuc3Vic2NyaWJlKChkYXNoYm9hcmRJZCkgPT4ge1xyXG5cdFx0XHRcdGlmIChkYXNoYm9hcmRJZCA9PT0gdGhpcy5kYXNoYm9hcmQuaWQpIHtcclxuXHRcdFx0XHRcdHRoaXMucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldFVwZGF0ZWQoKS5zdWJzY3JpYmUoKG5ld0lkKSA9PiB7XHJcblx0XHRcdFx0aWYgKG5ld0lkID09PSB0aGlzLnBvcnRsZXQubmV3SWQgfHwgbmV3SWQgPT09IHRoaXMucG9ydGxldC5pZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5nZXREYXRhKCk7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRSZWZyZXNoR2FkZ2V0KCkuc3Vic2NyaWJlKChlKSA9PiB7XHJcblx0XHRcdFx0aWYgKCFlKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGlkID0gZVtcIm5ld0lkXCJdO1xyXG5cdFx0XHRcdGlmIChpZCA9PT0gdGhpcy5wb3J0bGV0Lm5ld0lkIHx8IGlkID09PSB0aGlzLnBvcnRsZXQuaWQpIHtcclxuXHRcdFx0XHRcdHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRUYWJsZUZvcm1hdCgpLnN1YnNjcmliZSgodXBkYXRlZCkgPT4ge1xyXG5cdFx0XHRcdGlmICh1cGRhdGVkID09PSB0aGlzLnBvcnRsZXQubmV3SWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2VcclxuXHRcdFx0XHQuY2xlYXJGaWVsZExpc3RPYnNlcnZhYmxlKClcclxuXHRcdFx0XHQuc3Vic2NyaWJlKCh1cGRhdGVkKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAodXBkYXRlZCA9PT0gdGhpcy5wb3J0bGV0Lm5ld0lkKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmRhdGFTb3VyY2UgPSBbXTtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLnVwZGF0ZURhdGFTb3VyY2UoKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyB0aXRsZSBjaGFuZ2VcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlUG9ydGxldFRpdGxlKCkuc3Vic2NyaWJlKCh1cGRhdGVkKSA9PiB7XHJcblx0XHRcdFx0aWYgKHVwZGF0ZWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuY29uZmlnID0gSlNPTi5wYXJzZSh0aGlzLnBvcnRsZXQuY29uZmlnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcblx0fVxyXG5cclxuXHRvbk1lbWJlckVkaXRvck9wZW4oYXJnczogYW55KTogdm9pZCB7XHJcblx0XHQvLyDkvaDlj6/ku6XlnKjov5nph4zmoLnmja7pnIDopoHkv67mlLlhcmdz5p2l6Ieq5a6a5LmJ6L+H5ruk56qX5Y+j55qE6KGM5Li6XHJcblx0XHQvLyAxMTI0NyDkuJPpl6jkuLppdGVtIGRhdGEgdHlwZeiAjOiuvue9rlxyXG5cdFx0aWYgKGFyZ3MuZmllbGROYW1lID09PSBcIkFjY291bnRUeXBlQ29kZVwiKSB7XHJcblx0XHRcdGxldCByZXMgPSBuZXcgQXJyYXkoNSkuZmlsbChudWxsKTtcclxuXHRcdFx0Y29uc3QgZmllbGRNZW1iZXJzID0gWy4uLmFyZ3MuZmllbGRNZW1iZXJzXTtcclxuXHJcblx0XHRcdGZvciAobGV0IGkgPSBmaWVsZE1lbWJlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuXHRcdFx0XHRsZXQgaW5kZXggPSAtMTtcclxuXHRcdFx0XHRjb25zdCBpdGVtID0gdGhpcy5pdGVtRGF0YVR5cGVTb3J0QXJyLmZpbmQoKG5hbWUsIGluZCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGZpZWxkTWVtYmVyc1tpXS5hY3R1YWxUZXh0ID09PSBuYW1lKSB7XHJcblx0XHRcdFx0XHRcdGluZGV4ID0gaW5kO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIGZpZWxkTWVtYmVyc1tpXS5hY3R1YWxUZXh0ID09PSBuYW1lO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdGlmICghaXRlbSkge1xyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGZpbGxJdGVtID0gZmllbGRNZW1iZXJzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHRyZXNbaW5kZXhdID0gZmlsbEl0ZW1bMF07XHJcblx0XHRcdH1cclxuXHRcdFx0cmVzID0gcmVzLmZpbHRlcigoaXRlbSkgPT4gaXRlbSkgfHwgW107XHJcblx0XHRcdGFyZ3MuZmllbGRNZW1iZXJzID0gWy4uLnJlcywgLi4uZmllbGRNZW1iZXJzXTtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5lLW1lbWJlci1lZGl0b3ItZGlhbG9nXCIpO1xyXG5cdFx0XHRcdGlmIChlbGUpIHtcclxuXHRcdFx0XHRcdGVsZS5xdWVyeVNlbGVjdG9yKFwiLmUtZmlsdGVyLXNvcnRcIikuc2V0QXR0cmlidXRlKFxyXG5cdFx0XHRcdFx0XHRcInN0eWxlXCIsXHJcblx0XHRcdFx0XHRcdFwiZGlzcGxheTogbm9uZVwiXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldEdyaWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuZ3JpZFNldHRpbmdzID0ge1xyXG5cdFx0XHRjb2x1bW5XaWR0aDogMTQwLFxyXG5cdFx0XHRyb3dIZWlnaHQ6IDQwLFxyXG5cdFx0XHRhbGxvd1NlbGVjdGlvbjogdHJ1ZSxcclxuXHRcdFx0c2VsZWN0aW9uU2V0dGluZ3M6IHtcclxuXHRcdFx0XHRtb2RlOiBcIkNlbGxcIixcclxuXHRcdFx0XHR0eXBlOiBcIk11bHRpcGxlXCIsXHJcblx0XHRcdFx0Y2VsbFNlbGVjdGlvbk1vZGU6IFwiQm94XCIsXHJcblx0XHRcdH0sXHJcblx0XHRcdGNvbHVtblJlbmRlcjogdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSgoYXJncykgPT4ge1xyXG5cdFx0XHRcdHRoaXMuc2V0Q29sdW1uc1JlbmRlcihhcmdzKTtcclxuXHRcdFx0fSkgYXMgYW55LFxyXG5cdFx0XHQvLyDljYfnuqflkI4g6buY6K6k5Lya5pyJ5a+85Ye65qC35byP6KaG55uW77yM6ZyA6KaB5omL5Yqo6K6+572u5a+85Ye65qCH6aKY5qC35byPXHJcblx0XHRcdGV4Y2VsSGVhZGVyUXVlcnlDZWxsSW5mbzogdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSgoYXJnczogYW55KSA9PiB7XHJcblx0XHRcdFx0Ly8gYXJncy5zdHlsZeaYr+S4qkV4Y2VsU3R5bGXnsbvlnotcclxuXHRcdFx0XHRhcmdzLnN0eWxlID0ge1xyXG5cdFx0XHRcdFx0Ym9sZDogdHJ1ZSwgLy8g5a2X5L2T5Yqg57KXXHJcblx0XHRcdFx0XHR2QWxpZ246IFwiQ2VudGVyXCIsXHJcblx0XHRcdFx0XHR3cmFwVGV4dDogZmFsc2UsIC8vIOS4jeaNouihjFxyXG5cdFx0XHRcdFx0aW5kZW50OiAwLFxyXG5cdFx0XHRcdFx0Ym9yZGVyczogbnVsbCwgLy8g5LiN6ZyA6KaBYm9yZGVyXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSkgYXMgYW55LFxyXG5cdFx0XHQvLyDljYfnuqflkI4g6buY6K6k5Lya5pyJ5a+85Ye65qC35byP6KaG55uW77yM6ZyA6KaB5omL5Yqo6K6+572u5a+85Ye65YaF5a655qC35byPXHJcblx0XHRcdGV4Y2VsUXVlcnlDZWxsSW5mbzogdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSgoYXJnczogYW55KSA9PiB7XHJcblx0XHRcdFx0Ly8gI2Y0ODZjZmZmIOi/memHjOi+k+WHuueahOaYr1JHQkEg6aKc6Imy5qC85byP77yMIHhsc3jph4zkuI3pnIDopoHpgI/mmI7luqYs5Y675o6J5bC+6YOoZmZcclxuXHRcdFx0XHRpZiAoYXJncy5zdHlsZSAmJiBhcmdzLnN0eWxlLmJhY2tDb2xvcikge1xyXG5cdFx0XHRcdFx0YXJncy5zdHlsZS5iYWNrQ29sb3IgPSBhcmdzLnN0eWxlLmJhY2tDb2xvci5zdWJzdHJpbmcoMCwgNyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGxldCBfc3R5bGU6IGFueSA9IHtcclxuXHRcdFx0XHRcdGJvbGQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0d3JhcFRleHQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0Ym9yZGVyczogbnVsbCxcclxuXHRcdFx0XHRcdGZvbnRDb2xvcjogYXJncy5zdHlsZS5mb250Q29sb3IsXHJcblx0XHRcdFx0XHRiYWNrQ29sb3I6IGFyZ3Muc3R5bGUuYmFja0NvbG9yLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0bGV0IGNvbEluZGV4ID0gYXJncy5jZWxsLmNvbEluZGV4O1xyXG5cdFx0XHRcdGxldCByb3dJbmRleCA9IGFyZ3MuY2VsbC5yb3dJbmRleDtcclxuXHRcdFx0XHRpZiAodGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzKSB7XHJcblx0XHRcdFx0XHQvLyBHcmFuZFRvdGFs5LiN6ZyA6KaB6aKc6ImyXHJcblx0XHRcdFx0XHRpZiAoYXJncy5kYXRhLmxlbmd0aCA9PT0gcm93SW5kZXggKyAxKSB7XHJcblx0XHRcdFx0XHRcdGRlbGV0ZSBfc3R5bGUuZm9udENvbG9yO1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgX3N0eWxlLmJhY2tDb2xvcjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFyZ3MuZGF0YVtyb3dJbmRleF1bY29sSW5kZXhdLmZvcm1hdHRlZFRleHQgPT0gXCJcIikge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGFyZ3Muc3R5bGUgPSBPYmplY3QuYXNzaWduKGFyZ3Muc3R5bGUsIF9zdHlsZSk7XHJcblx0XHRcdFx0aWYgKGFyZ3MudmFsdWUgPT09IFwiXCIgJiYgYXJncy5zdHlsZS5udW1iZXJGb3JtYXQpIHtcclxuXHRcdFx0XHRcdGFyZ3Muc3R5bGUubnVtYmVyRm9ybWF0ID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHRoaXMuZm9ybWF0RGF0ZXMgJiYgdGhpcy5mb3JtYXREYXRlcy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGxldCBkYXRlRmllbGRzID0gdGhpcy5mb3JtYXREYXRlcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBlbC5uYW1lO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdChhcmdzIGFzIGFueSkudmFsdWUgJiZcclxuXHRcdFx0XHRcdFx0KChhcmdzIGFzIGFueSkuY2VsbC5jb2xJbmRleCA9PT0gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZGF0ZUZpZWxkcy5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS5jZWxsLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBkYXRlRmllbGRzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLmNlbGwuYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdCAgKSlcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHQvL0N1c3RvbWl6ZSB0aGUgUm93IGhlYWRlcnMvQ29sdW1uIGhlYWRlcnMgYmFzZWQgb24geW91ciBuZWVkc1xyXG5cdFx0XHRcdFx0XHRsZXQgaGVhZGVycztcclxuXHRcdFx0XHRcdFx0aWYgKChhcmdzIGFzIGFueSkuY2VsbC5jb2xJbmRleCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSAoYXJncyBhcyBhbnkpLmNlbGwuYWN0dWFsVGV4dDtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBoZWFkZXJzID0gcGl2b3RWYWx1ZXNba11bal0uZm9ybWF0dGVkVGV4dDtcclxuXHRcdFx0XHRcdFx0XHRoZWFkZXJzID0gKGFyZ3MgYXMgYW55KS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoaGVhZGVycykge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBkYXRlID0gbmV3IERhdGUoaGVhZGVycyk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGxldCBxdWFydGVyID0gTWF0aC5mbG9vcihkYXRlLmdldE1vbnRoKCkgLyAzKSArIDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGxldCBmb3JtYXQ7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZm9ybWF0RGF0ZXMubWFwKChlbCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKChhcmdzIGFzIGFueSkuY2VsbC5jb2xJbmRleCA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS5jZWxsLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBlbC5mb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwubmFtZSA9PSAoYXJncyBhcyBhbnkpLmNlbGwuYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gZWwuZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdChhcmdzIGFzIGFueSkudmFsdWUgPSB0aGlzLmdldFF1YXJ0ZXJWYWx1ZShcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdCxcclxuXHRcdFx0XHRcdFx0XHRcdGRhdGUsXHJcblx0XHRcdFx0XHRcdFx0XHRxdWFydGVyXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSkgYXMgYW55LFxyXG5cdFx0fSBhcyBHcmlkU2V0dGluZ3M7XHJcblx0fVxyXG5cclxuXHRiZWZvcmVFeHBvcnQoZXhwb3J0RGF0YSkge1xyXG5cdFx0aWYgKGV4cG9ydERhdGEpIHtcclxuXHRcdFx0Y29uc3Qga2V5TWFwID0ge307XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzLmZvcm1hdFNldHRpbmdzLmZvckVhY2goKGRhdGEpID0+IHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRkYXRhLmZvcm1hdCA9PT0gXCIjLCMjIywsLjA7KCMsIyMjLCwuMClcIiB8fFxyXG5cdFx0XHRcdFx0ZGF0YS5mb3JtYXQgPT09IFwiIywjIyMsLDsoIywjIyMsLClcIiB8fFxyXG5cdFx0XHRcdFx0ZGF0YS5mb3JtYXQgPT09IFwiIywjIyMsLC4wMDsoIywjIyMsLC4wMClcIlxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0a2V5TWFwW2RhdGEubmFtZV0gPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRleHBvcnREYXRhLmRhdGFDb2xsZWN0aW9ucyAmJlxyXG5cdFx0XHRcdGV4cG9ydERhdGEuZGF0YUNvbGxlY3Rpb25zLmxlbmd0aFxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRleHBvcnREYXRhLmRhdGFDb2xsZWN0aW9uc1swXS5mb3JFYWNoKChyb3cpID0+IHtcclxuXHRcdFx0XHRcdHJvdy5mb3JFYWNoKChjZWxsKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChrZXlNYXBbY2VsbC5hY3R1YWxUZXh0XSkge1xyXG5cdFx0XHRcdFx0XHRcdGNlbGwudmFsdWUgPSBjZWxsLmFjdHVhbFZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0dHlwZW9mIGNlbGwudmFsdWUgPT09IFwib2JqZWN0XCIgJiZcclxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgY2VsbC5mb3JtYXR0ZWRUZXh0ID09PSBcInN0cmluZ1wiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGNlbGwudmFsdWUgPSBjZWxsLmZvcm1hdHRlZFRleHQ7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGdldERhdGEoKSB7XHJcblx0XHR0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcblx0XHRsZXQgY29sdW1ucyA9IFtdO1xyXG5cdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0bGV0IGZvcm1hdFNldHRpbmdzID0gW107XHJcblx0XHRsZXQgcm93cyA9IFtdO1xyXG5cdFx0bGV0IGZpZWxkTWFwcGluZyA9IFtdO1xyXG5cdFx0Ly8g5riF56m6Z3JhbmRUb3RhbHPlkoxzdWJUb3RhbHNcclxuXHRcdHRoaXMuZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuc3ViVG90YWxzID0ge307XHJcblx0XHR0aGlzLmNvbmZpZyA9IEpTT04ucGFyc2UodGhpcy5wb3J0bGV0LmNvbmZpZyk7XHJcblx0XHR0aGlzLnNldEdyaWRTZXR0aW5ncygpO1xyXG5cdFx0aWYgKHRoaXMuY29uZmlnLmZpZWxkcykge1xyXG5cdFx0XHRpZiAodGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5hbGxGaWVsZHNPYmpbdGhpcy5wb3J0bGV0LmlkXSkge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnRmllbGRzID1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2Uuc2V0Q29uZmlnRmllbGRzKFxyXG5cdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmFsbEZpZWxkc09ialtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBvcnRsZXQuaWRcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0dGhpcy5jb25maWcuZmllbGRzXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnRmllbGRzID0gWy4uLnRoaXMuY29uZmlnLmZpZWxkc107XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLlBpdm90X0RhdGEgPSB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldFJlc3VsdEJ5RGF0YVRhYmxlKFxyXG5cdFx0XHR0aGlzLnBvcnRsZXQsXHJcblx0XHRcdGZhbHNlLFxyXG5cdFx0XHRmYWxzZSxcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmQuaWRcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5vcmRlckJ5Q29sdW1ucyA9IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0T3JkZXJCeUNvbHVtbnNOZXcoXHJcblx0XHRcdHRoaXMucG9ydGxldC5maWd1cmVDb2RlLFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLlBpdm90X0RhdGEgPSBEYXRhVXRpbC5wYXJzZS5wYXJzZUpzb24odGhpcy5QaXZvdF9EYXRhKTtcclxuXHRcdGlmICh0aGlzLlBpdm90X0RhdGEgJiYgdGhpcy5QaXZvdF9EYXRhLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Ly8g56e76Zmk5YiX5ZCN5ZKM5pWw5o2ua2V55LiN5Yy56YWN55qE6aG5XHJcblx0XHRcdHRoaXMuZ2V0ZXhjbHVkZUZpZWxkcyh0aGlzLmNvbmZpZ0ZpZWxkcywgdGhpcy5QaXZvdF9EYXRhWzBdKTtcclxuXHRcdFx0aWYgKCF0aGlzLmFsbG93ZWRDYWxjdWxhdGVkRmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRcdHRoaXMuYWxsb3dlZENhbGN1bGF0ZWRGaWVsZHMgPSBPYmplY3Qua2V5cyh0aGlzLlBpdm90X0RhdGFbMF0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGl0ZW0gb2YgdGhpcy5jb25maWdGaWVsZHMpIHtcclxuXHRcdFx0XHQvLyDlrZfmrrXliIbnu4QgaHR0cHM6Ly9lajIuc3luY2Z1c2lvbi5jb20vYW5ndWxhci9kb2N1bWVudGF0aW9uL3Bpdm90dmlldy9maWVsZC1saXN0P3NlYXJjaD1maWVsZE1hcHBpbmcjZ3JvdXAtZmllbGRzLXVuZGVyLWRlc2lyZWQtZm9sZGVyLW5hbWVcclxuXHRcdFx0XHRmaWVsZE1hcHBpbmcucHVzaCh7XHJcblx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRjYXB0aW9uOiBpdGVtLmFkZHRpb25OYW1lXHJcblx0XHRcdFx0XHRcdD8gYCR7aXRlbS5sYW5nVmFsdWV9ICR7aXRlbS5hZGR0aW9uTmFtZX1gXHJcblx0XHRcdFx0XHRcdDogaXRlbS5sYW5nVmFsdWVcclxuXHRcdFx0XHRcdFx0PyBpdGVtLmxhbmdWYWx1ZVxyXG5cdFx0XHRcdFx0XHQ6IHRoaXMudHJhbnNsYXRpb25baXRlbS5sYW5nQ29kZV0gfHwgaXRlbS5sYW5nQ29kZSxcclxuXHJcblx0XHRcdFx0XHRkYXRhVHlwZTogaXRlbS5kYXRhVHlwZSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuY29uZmlnRmllbGRzKSB7XHJcblx0XHRcdHRoaXMucGVyY2VudE51bUZpZWxkcyA9IFtdO1xyXG5cdFx0XHR0aGlzLmZvcm1hdERhdGVzID0gW107XHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuaGdMaXN0ID0gW107XHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuZW1wdHlMaXN0ID0gW107XHJcblx0XHRcdHRoaXMubWlsbGlvbkZpZWxkcyA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbmZpZ0ZpZWxkcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0Ly8gU01QMi0yNDg2ICYgcGVyY2VudE51beeahGZvcm1hdOmXrumimFxyXG5cdFx0XHRcdGlmIChlbC5kYXRhVHlwZSA9PSBcInBlcmNlbnROdW1cIikge1xyXG5cdFx0XHRcdFx0dGhpcy5wZXJjZW50TnVtRmllbGRzLnB1c2goZWwuY29sTmFtZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQgJiZcclxuXHRcdFx0XHRcdFsyLCA1LCA4LCAxMSwgMTQsIDE3XS5pbmNsdWRlcyhlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXQpXHJcblx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5oZ0xpc3QucHVzaChlbC5jb2xOYW1lKTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkICYmXHJcblx0XHRcdFx0XHRbMywgNiwgOSwgMTIsIDE1LCAxOF0uaW5jbHVkZXMoZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0KVxyXG5cdFx0XHRcdClcclxuXHRcdFx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuZW1wdHlMaXN0LnB1c2goZWwuY29sTmFtZSk7XHJcblx0XHRcdFx0Ly8gIHBpdm90VGFibGVmb3JtYXRQZXJjZW50IOeZvuWIhuavlOS5n+aciTEwLDExLDEyIOS9huaYr+Wug+aYr+aYvuekujAuMDB455qE5qC85byP77yM5omA5Lul5b6X5o6S6ZmkXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZWwuZGF0YVR5cGUgIT09IFwicGVyY2VudFwiICYmXHJcblx0XHRcdFx0XHRlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkICYmXHJcblx0XHRcdFx0XHRbMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOF0uaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHRcdClcclxuXHRcdFx0XHRcdHRoaXMubWlsbGlvbkZpZWxkcy5wdXNoKGVsLmNvbE5hbWUpO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmRhdGFUeXBlID09PSBcIm51bWJlclwiICYmXHJcblx0XHRcdFx0XHQoIWVsLmZvcm1hdCB8fFxyXG5cdFx0XHRcdFx0XHQoZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCFlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCkpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHQvL1NNUDItMzAyNiBhbmQgU01QMi0zMDU5XHJcblx0XHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0XHRlbC5jb2xOYW1lICE9PSBcIlBvcnRJbnZTdGtcIiAmJlxyXG5cdFx0XHRcdFx0XHRcdGVsLmNvbE5hbWUgIT09IFwiUG9ydEZkSW52U3RrXCJcclxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuZHBcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiBcIiMjMC4jIyMjIyMjMFwiLFxyXG5cdFx0XHRcdFx0XHR1c2VHcm91cGluZzogdHJ1ZSxcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0KGVsLmRhdGFUeXBlID09PSBcInBlcmNlbnRcIiB8fFxyXG5cdFx0XHRcdFx0XHRlbC5kYXRhVHlwZSA9PT0gXCJwZXJjZW50TnVtXCIpICYmXHJcblx0XHRcdFx0XHQoIWVsLmZvcm1hdCB8fFxyXG5cdFx0XHRcdFx0XHQoZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCFlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCkpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtYXQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRlbC5kcFxyXG5cdFx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmRhdGFUeXBlID09PSBcIm11bHRpcGxlXCIgJiZcclxuXHRcdFx0XHRcdCghZWwuZm9ybWF0IHx8XHJcblx0XHRcdFx0XHRcdChlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0IWVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkKSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm1hdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRNdWx0aXBsZShcclxuXHRcdFx0XHRcdFx0XHRlbC5kcFxyXG5cdFx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChlbC5kYXRhVHlwZSA9PT0gXCJkYXRldGltZVwiIHx8IGVsLmRhdGFUeXBlID09PSBcImRhdGVcIikge1xyXG5cdFx0XHRcdFx0bGV0IGZvcm1hdCA9IFwiXCI7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGVsLmZvcm1hdFswXS5kYXRlVHlwZSA9PSBcIlF1YXJ0ZXJcIikge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmb3JtYXRfID0gZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0SW5mbyA9IHRoaXMucXVhcnRlckZvcm1hdC5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHQocXVyKSA9PiBxdXIudmFsdWUgPT0gZm9ybWF0X1xyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGZvcm1hdEluZm8ubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBmb3JtYXRJbmZvWzBdLmZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogZWwuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0OiBmb3JtYXRfLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcImRhdGVcIixcclxuXHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmZvcm1hdERhdGVzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGVsLmZvcm1hdFswXS5kYXRlVHlwZSA9PSBcIkRhdGVcIikge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmcm9tSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuaW5kZXhPZihcIihcIik7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHRvSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuaW5kZXhPZihcIilcIik7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdF8gPVxyXG5cdFx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5zbGljZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZnJvbUlkeCArIDEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRvSWR4XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoZm9ybWF0Xykge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkREL01NL1lZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC9NTS95eXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkREL01NL1lZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiZGQvTU0veXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0vREQvWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NL2RkL3l5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0vREQvWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJNTS9kZC95eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJZWVlZLU1NLUREXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwieXl5eS1NTS1kZFwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJZWS1NTS1ERFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcInl5LU1NLWRkXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkRELU1NLVlZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC1NTS15eXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkRELU1NLVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiZGQtTU0teXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0tREQtWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NLWRkLXl5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0tREQtWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJNTS1kZC15eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTU0gREQsIFlZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJNTU0gZGQsIHl5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQtTU1NLVlZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC1NTU0teXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCFmb3JtYXQpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogdGhpcy5kYXRlUGlwZUZvcm1hdCxcclxuXHRcdFx0XHRcdFx0XHR0eXBlOiBcImRhdGVcIixcclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0bmFtZTogZWwuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXQ6IGZvcm1hdCxcclxuXHRcdFx0XHRcdFx0XHR0eXBlOiBcImRhdGVcIixcclxuXHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdC8vY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgZm9ybWF0IHB1c2ggdG8gZm9ybWF0U2V0dGluZ3NcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgJiZcclxuXHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MubGVuZ3RoID4gMFxyXG5cdFx0KSB7XHJcblx0XHRcdHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRpZiAoZWwuZm9ybWF0U3RyaW5nICE9PSBcIlwiKSB7XHJcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gZm9ybWF0U2V0dGluZ3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuXHRcdFx0XHRcdFx0aWYgKGZvcm1hdFNldHRpbmdzW2ldLm5hbWUgPT09IGVsLm5hbWUpIHtcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5zcGxpY2UoaSwgMSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBlbC5uYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtYXQ6IGVsLmZvcm1hdFN0cmluZyxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRsZXQgc2VyaWVzID0gdGhpcy5jb25maWcueWF4aXMuc2VyaWVzO1xyXG5cdFx0aWYgKHNlcmllcykge1xyXG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIHNlcmllcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogaXRlbS5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0Y2FwdGlvbjogdGhpcy5nZXRDYXB0aW9uQnlOYW1lKGl0ZW0uY29sTmFtZSkgfHwgaXRlbS50aXRsZSxcclxuXHRcdFx0XHRcdHR5cGU6IGl0ZW0uY2FsTWV0aG9kLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0dmFsdWVzLnB1c2godmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRsZXQgZ3JvdXBzID0gdGhpcy5jb25maWcueGF4aXMuZ3JvdXBzO1xyXG5cdFx0aWYgKGdyb3Vwcykge1xyXG5cdFx0XHRmb3IgKGxldCBnaXRlbSBvZiBncm91cHMpIHtcclxuXHRcdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gZ2l0ZW0ubmFtZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKGZpZWxkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdGdpdGVtLnNob3dTdWJUb3RhbHMgPSBmaWVsZFswXS5zaG93U3ViVG90YWxzO1xyXG5cdFx0XHRcdFx0Z2l0ZW0uY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHR0aGlzLnRyYW5zbGF0aW9uW2ZpZWxkWzBdLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uIHx8XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyb3dzLnB1c2goZ2l0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5jb25maWcuY29sdW1uR3JvdXAgJiYgdGhpcy5jb25maWcuY29sdW1uR3JvdXAubGVuZ3RoKSB7XHJcblx0XHRcdGZvciAobGV0IGl0ZW0gb2YgdGhpcy5jb25maWcuY29sdW1uR3JvdXApIHtcclxuXHRcdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gaXRlbS5uYW1lXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0aXRlbS5zaG93U3ViVG90YWxzID0gZmllbGRbMF0uc2hvd1N1YlRvdGFscztcclxuXHRcdFx0XHRcdGl0ZW0uY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHR0aGlzLnRyYW5zbGF0aW9uW2ZpZWxkWzBdLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nQ29kZSB8fFxyXG5cdFx0XHRcdFx0XHRpdGVtLmNhcHRpb247XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbHVtbnMucHVzaChpdGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0bGV0IGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MgPSBbXTtcclxuXHRcdHRoaXMuY29uZmlnRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblx0XHRcdGlmIChmaWVsZC5mb3JtYXQgJiYgZmllbGQuZm9ybWF0Lmxlbmd0aCkge1xyXG5cdFx0XHRcdGlmIChmaWVsZC5mb3JtYXRbMF0uZm9udFNldHRpbmdDaGVja2VkKSB7XHJcblx0XHRcdFx0XHRsZXQgY29uZGl0aW9uYWxGb3JtYXRPYmogPSB7XHJcblx0XHRcdFx0XHRcdGFwcGx5R3JhbmRUb3RhbHM6IHRydWUsXHJcblx0XHRcdFx0XHRcdG1lYXN1cmU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdHZhbHVlMTogbnVsbCxcclxuXHRcdFx0XHRcdFx0dmFsdWUyOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25zOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRzdHlsZToge1xyXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRjb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRmb250RmFtaWx5OiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGZvbnRTaXplOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGxldCBuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmogPSB7XHJcblx0XHRcdFx0XHRcdGFwcGx5R3JhbmRUb3RhbHM6IHRydWUsXHJcblx0XHRcdFx0XHRcdG1lYXN1cmU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdHZhbHVlMTogbnVsbCxcclxuXHRcdFx0XHRcdFx0dmFsdWUyOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25zOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRzdHlsZToge1xyXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRjb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRmb250RmFtaWx5OiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGZvbnRTaXplOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdC8vIGZvbnQgc2V0dGluZyBzdGFydFxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLm1lYXN1cmUgPVxyXG5cdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGaWVsZDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLm1lYXN1cmUgPVxyXG5cdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGaWVsZDtcclxuXHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkICYmXHJcblx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5jb21wYXJlU2VsZWN0XHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRDb21wYXJlQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMjtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTI7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0sXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdFNldHRpbmdzLnB1c2gobmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MudW5zaGlmdChjb25kaXRpb25hbEZvcm1hdE9iaik7XHJcblx0XHRcdFx0XHQvLyBmb250IHNldHRpbmcgZW5kXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGxldCBmb3JtYXRTZXR0aW5nc09iaiA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IFwiXCIsXHJcblx0XHRcdFx0XHRmb3JtYXQ6IFwiXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQpIHtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLm5hbWUgPSBmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGaWVsZDtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHN3aXRjaCAoZmllbGQuZm9ybWF0WzBdLmRhdGFUeXBlKSB7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJpbnRlZ2VyXCI6XHJcblx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0ID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdEludGVnZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSBcInBlcmNlbnROdW1cIjpcclxuXHRcdFx0XHRcdFx0Y2FzZSBcInBlcmNlbnRcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwibXVsdGlwbGVcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0TXVsdGlwbGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSBcImRhdGVcIjpcclxuXHRcdFx0XHRcdFx0Y2FzZSBcImRhdGV0aW1lXCI6XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdCA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGZpZWxkLmZvcm1hdCAmJiBmaWVsZC5mb3JtYXQubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0WzBdLmRhdGVUeXBlID09IFwiUXVhcnRlclwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZmllbGQuZm9ybWF0WzBdLmRhdGVUeXBlID09IFwiRGF0ZVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBmcm9tSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5LmluZGV4T2YoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIihcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCB0b0lkeCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5pbmRleE9mKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuc2xpY2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmcm9tSWR4ICsgMSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvSWR4XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKGZvcm1hdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmogPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IGZpZWxkLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBmaWVsZC5kYXRhVHlwZSA9IFwic3RyaW5nXCI7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9IHRoaXMuZGF0ZVBpcGVGb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09ialtcInR5cGVcIl0gPSBcImRhdGVcIjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5kYXRhVHlwZSAhPT0gXCJzdHJpbmdcIiAmJlxyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0XHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5wdXNoKGZvcm1hdFNldHRpbmdzT2JqKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzID0gdGhpcy5jb25maWcuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1xyXG5cdFx0XHQ/IHRoaXMuY29uZmlnLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNcclxuXHRcdFx0OiBbXTtcclxuXHJcblx0XHQvLyBTTVAyLTQ1ODIgQUdJQyAtIERhc2hib2FyZCBpdGVtIHNlcXVlbmNlXHJcblx0XHRsZXQgaXNFeGlzdFNlcSA9IGZhbHNlO1xyXG5cdFx0bGV0IHNvcnRTZXR0aW5ncyA9IHRoaXMuY29uZmlnLnNvcnRTZXR0aW5ncyB8fCBbXTtcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5QaXZvdF9EYXRhICYmXHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YVswXSAmJlxyXG5cdFx0XHR0aGlzLlBpdm90X0RhdGFbMF0uU2VxICE9PSBudWxsXHJcblx0XHQpIHtcclxuXHRcdFx0Ly8g5Y+W5raITmFtZeeahOm7mOiupOaOkuW6j++8jOagueaNrlNlceadpeaOkuW6j1xyXG5cdFx0XHRzb3J0U2V0dGluZ3MucHVzaCh7IG5hbWU6IFwiTmFtZVwiLCBvcmRlcjogXCJOb25lXCIgfSk7XHJcblx0XHRcdGlzRXhpc3RTZXEgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGZpbHRlclNldHRpbmdzID0gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5jaGVja0ZpbHRlclNldHRpbmdzKFxyXG5cdFx0XHR0aGlzLmNvbmZpZyxcclxuXHRcdFx0dGhpcy5jb25maWdGaWVsZHMsXHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YVxyXG5cdFx0KTtcclxuXHRcdGxldCBuYW1lRmlsdGVyID0gZmlsdGVyU2V0dGluZ3MuZmluZCgoeCkgPT4geC5uYW1lID09PSBcIk5hbWVcIik7XHJcblx0XHQvLyDlrZjlnKggTmFtZeeahGZpbHRlcuaXtu+8jOS8muaMieeFp+m7mOiupOaOkuW6j++8jOmcgOimgeWvuU5hbWXov5vooYxTZXHmjpLluo/lpITnkIZcclxuXHRcdGlmIChpc0V4aXN0U2VxICYmIG5hbWVGaWx0ZXIgJiYgcm93cy5zb21lKCh4KSA9PiB4Lm5hbWUgPT09IFwiTmFtZVwiKSkge1xyXG5cdFx0XHRsZXQgaXRlbXMgPSBuYW1lRmlsdGVyLml0ZW1zOyAvLyDmi7/liLDlvZPliY3mjpLluo/vvIzpu5jorqRBLVpcclxuXHRcdFx0bGV0IHNlcUFyciA9IFtdO1xyXG5cdFx0XHRpdGVtcy5mb3JFYWNoKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0bGV0IG9iaiA9IHRoaXMuUGl2b3RfRGF0YS5maW5kKCh4KSA9PiB4Lk5hbWUgPT09IG5hbWUpO1xyXG5cdFx0XHRcdGxldCBpdGVtOiBhbnkgPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBuYW1lLFxyXG5cdFx0XHRcdFx0c2VxOiBvYmouU2VxLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0c2VxQXJyLnB1c2goaXRlbSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRzZXFBcnIuc29ydCgoYSwgYikgPT4gYS5zZXEgLSBiLnNlcSk7XHJcblx0XHRcdG5hbWVGaWx0ZXIuaXRlbXMgPSBzZXFBcnIubWFwKCh4KSA9PiB4Lm5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGFsbEZpZWxkcyA9XHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuYWxsRmllbGRzT2JqW3RoaXMucG9ydGxldC5pZF07XHJcblx0XHRpZiAoYWxsRmllbGRzKSB7XHJcblx0XHRcdHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW0gPSBhbGxGaWVsZHMuZmluZChcclxuXHRcdFx0XHRcdChmaWVsZCkgPT4gZmllbGQuY29sTmFtZSA9PT0gdmFsdWUubmFtZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKGl0ZW0pIHtcclxuXHRcdFx0XHRcdHZhbHVlLmNhcHRpb24gPVxyXG5cdFx0XHRcdFx0XHQoaXRlbS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRpdGVtLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHRpdGVtLmZvcm1hdFswXS5kaXNwbGF5TmFtZSkgfHxcclxuXHRcdFx0XHRcdFx0aXRlbS5sYW5nVmFsdWUgfHxcclxuXHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGlvbltpdGVtLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0XHRpdGVtLmxhbmdDb2RlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRsZXQgaGFzSXRlbURhdGFUeXBlID0gZmFsc2U7XHJcblx0XHRpZiAodGhpcy5QaXZvdF9EYXRhKSB7XHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YS5tYXAoKGRhdGEpID0+IHtcclxuXHRcdFx0XHRpZiAoZGF0YVtcIkFjY291bnRUeXBlQ29kZVwiXSkge1xyXG5cdFx0XHRcdFx0aGFzSXRlbURhdGFUeXBlID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cm93cy5mb3JFYWNoKChyb3cpID0+IHtcclxuXHRcdFx0XHRcdGlmIChkYXRhW3Jvdy5uYW1lXSA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0XHRkYXRhW3Jvdy5uYW1lXSA9IFwibnVsbFwiO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdGlmIChoYXNJdGVtRGF0YVR5cGUpIHtcclxuXHRcdFx0c29ydFNldHRpbmdzLnB1c2goe1xyXG5cdFx0XHRcdG5hbWU6IFwiQWNjb3VudFR5cGVDb2RlXCIsXHJcblx0XHRcdFx0b3JkZXI6IFwiQXNjZW5kaW5nXCIsXHJcblx0XHRcdFx0bWVtYmVyc09yZGVyOiBbLi4udGhpcy5pdGVtRGF0YVR5cGVTb3J0QXJyXSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLmNvbmZpZy5maWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT4ge1xyXG5cdFx0XHRmaWx0ZXIuY2FwdGlvbiA9XHJcblx0XHRcdFx0dGhpcy5nZXRDYXB0aW9uQnlOYW1lKGZpbHRlci5uYW1lKSB8fCBmaWx0ZXIuY2FwdGlvbjtcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5kYXRhU291cmNlU2V0dGluZ3MgPSB7XHJcblx0XHRcdGRhdGFTb3VyY2U6IHRoaXMuUGl2b3RfRGF0YSB8fCBbXSxcclxuXHRcdFx0cm93czogcm93cyB8fCBbXSxcclxuXHRcdFx0Y29sdW1uczogY29sdW1ucyB8fCBbXSxcclxuXHRcdFx0dmFsdWVzOiB2YWx1ZXMgfHwgW10sXHJcblx0XHRcdGZpbHRlcnM6IHRoaXMuY29uZmlnLmZpbHRlcnMsXHJcblx0XHRcdGZpbHRlclNldHRpbmdzOiBmaWx0ZXJTZXR0aW5ncyxcclxuXHRcdFx0ZXhjbHVkZUZpZWxkczogdGhpcy5leGNsdWRlRmllbGRzLFxyXG5cdFx0XHRmb3JtYXRTZXR0aW5nczogZm9ybWF0U2V0dGluZ3MsXHJcblx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3M6IGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MsXHJcblx0XHRcdC8vIOeUqOS6juaUtui1t+WxleW8gOaMh+WumuWxgue6pywg6L+Z546p5oSP5Y+q6IO95bGV5byA56ys5LiA5bGCLFxyXG5cdFx0XHQvLyDlv4Xpobvorr7lrppleHBhbmRBbGwg5Li6ZmFsc2XvvIjpu5jorqTmmK9mYWxzZe+8ie+8jCDov5nmoLflrZDmiY3og73lrp7njrDlj6rlsZXlvIDkuKTlsYJcclxuXHRcdFx0Ly8gZHJpbGxlZE1lbWJlcnMsXHJcblx0XHRcdGV4cGFuZEFsbDogdHJ1ZSxcclxuXHRcdFx0ZW5hYmxlU29ydGluZzogdHJ1ZSxcclxuXHRcdFx0ZmllbGRNYXBwaW5nOiBmaWVsZE1hcHBpbmcsXHJcblx0XHRcdGNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzOiB0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncyxcclxuXHRcdFx0c29ydFNldHRpbmdzOiBzb3J0U2V0dGluZ3MsXHJcblx0XHRcdC8vIGdyb3VwU2V0dGluZ3M6IHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3MsXHJcblx0XHRcdHZhbHVlU29ydFNldHRpbmdzOiB0aGlzLmNvbmZpZy52YWx1ZVNvcnRTZXR0aW5ncyxcclxuXHRcdFx0c2hvd0dyYW5kVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdHNob3dSb3dHcmFuZFRvdGFsczogdGhpcy5jb25maWcuc2hvd1Jvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRzaG93Q29sdW1uR3JhbmRUb3RhbHM6IHRoaXMuY29uZmlnLnNob3dDb2x1bW5HcmFuZFRvdGFscyxcclxuXHRcdFx0c2hvd1N1YlRvdGFsczogdGhpcy5jb25maWcuc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0c2hvd1Jvd1N1YlRvdGFsczogdGhpcy5jb25maWcuc2hvd1Jvd1N1YlRvdGFscyxcclxuXHRcdFx0c2hvd0NvbHVtblN1YlRvdGFsczogdGhpcy5jb25maWcuc2hvd0NvbHVtblN1YlRvdGFscyxcclxuXHRcdH07XHJcblx0XHRjb25zb2xlLmxvZyhcInRoaXMuZGF0YVNvdXJjZVNldHRpbmdzXCIsIHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzKTtcclxuXHJcblx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHR9XHJcblxyXG5cdGdldENhcHRpb25CeU5hbWUobmFtZVN0cmluZykge1xyXG5cdFx0aWYgKCFuYW1lU3RyaW5nKSByZXR1cm4gXCJcIjtcclxuXHRcdGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmluZCgoZWwpID0+IGVsLmNvbE5hbWUgPT09IG5hbWVTdHJpbmcpO1xyXG5cclxuXHRcdHJldHVybiBmaWVsZFxyXG5cdFx0XHQ/IGZpZWxkLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0dGhpcy50cmFuc2xhdGlvbltmaWVsZCAmJiBmaWVsZC5sYW5nQ29kZV0gfHxcclxuXHRcdFx0XHRcdGZpZWxkLmxhbmdDb2RlXHJcblx0XHRcdDogXCJcIjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhZnRlclBvcHVsYXRlKGFyZ3M6IEVuZ2luZVBvcHVsYXRlZEV2ZW50QXJncyk6IHZvaWQge1xyXG5cdFx0dGhpcy50ZW1wU3VidG90YWxzID0gW107XHJcblx0XHR0aGlzLmdyYW5kVG90YWxzID0ge307XHJcblx0XHR0aGlzLnN1YlRvdGFscyA9IHt9O1xyXG5cdFx0bGV0IHRlbXBzaG93QXJyYXkgPSBbXTtcclxuXHRcdHRoaXMuY29uZmlnLnlheGlzLnNlcmllcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRpdGVtLmhhc093blByb3BlcnR5KFwic2hvd1N1YlRvdGFsc1wiKSAmJlxyXG5cdFx0XHRcdGl0ZW0uaGFzT3duUHJvcGVydHkoXCJzaG93R3JhbmRUb3RhbHNcIilcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0dGVtcHNob3dBcnJheS5wdXNoKHtcclxuXHRcdFx0XHRcdG5hbWU6IGl0ZW0uY29sTmFtZSxcclxuXHRcdFx0XHRcdGNhbE1ldGhvZDogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0XHRzaG93U3ViVG90YWxzOiBpdGVtLnNob3dTdWJUb3RhbHMsXHJcblx0XHRcdFx0XHRzaG93R3JhbmRUb3RhbHM6IGl0ZW0uc2hvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChpdGVtLmhhc093blByb3BlcnR5KFwic2hvd0dyYW5kVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHR0ZW1wc2hvd0FycmF5LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGNhbE1ldGhvZDogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0XHRcdHNob3dHcmFuZFRvdGFsczogaXRlbS5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoXCJzaG93U3ViVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHR0ZW1wc2hvd0FycmF5LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGNhbE1ldGhvZDogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0XHRcdHNob3dTdWJUb3RhbHM6IGl0ZW0uc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqICYmIHRoaXMucGl2b3RPYmopIHtcclxuXHRcdFx0dGhpcy5jb25maWcuY29sdW1uR3JvdXAgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcueGF4aXMuZ3JvdXBzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLnlheGlzLnNlcmllcyA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5maWx0ZXJzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmZpbHRlclNldHRpbmdzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzID0gW107XHJcblx0XHRcdGxldCBncm91cFNldHRpbmdzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiZ3JvdXBTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBjb2x1bW5zID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiY29sdW1uc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCByb3dzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwicm93c1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBmaWx0ZXJzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiZmlsdGVyc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBmaWx0ZXJTZXR0aW5ncyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcImZpbHRlclNldHRpbmdzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IHZhbHVlcyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcInZhbHVlc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBzb3J0U2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJzb3J0U2V0dGluZ3NcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRsZXQgY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJjYWxjdWxhdGVkRmllbGRTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChncm91cFNldHRpbmdzLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRcdGZvciAobGV0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0bmFtZTogY29sdW1uLm5hbWUsXHJcblx0XHRcdFx0XHRcdGNhcHRpb246XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRDYXB0aW9uQnlOYW1lKGNvbHVtbi5uYW1lKSB8fFxyXG5cdFx0XHRcdFx0XHRcdGNvbHVtbi5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vSWYgdGhlcmUgaXMgYSBncm91cCwgZmlyc3QgZmlsdGVyIHRoZSBjb2x1bW5zIG9mIHRoZSBncm91cCBmaWVsZCwgYW5kIHRoZW4gb25seSBzYXZlIHRoZSBsYXN0IG9uZVxyXG5cdFx0XHRcdGZvciAobGV0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdFx0XHRpZiAoIXN0YXJ0c1dpdGgoY29sdW1uLm5hbWUsIGdyb3VwU2V0dGluZ3NbMF0ubmFtZSArIFwiX1wiKSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lOiBjb2x1bW4ubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRjYXB0aW9uOlxyXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uLm5hbWUgPT09IGdyb3VwU2V0dGluZ3NbMF0ubmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IFwiXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmdldENhcHRpb25CeU5hbWUoY29sdW1uLm5hbWUpIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgY29sdW1uLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKGxldCByb3cgb2Ygcm93cykge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLnhheGlzLmdyb3Vwcy5wdXNoKHtcclxuXHRcdFx0XHRcdG5hbWU6IHJvdy5uYW1lLFxyXG5cdFx0XHRcdFx0Y2FwdGlvbjogdGhpcy5nZXRDYXB0aW9uQnlOYW1lKHJvdy5uYW1lKSB8fCByb3cuY2FwdGlvbixcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKGxldCBmaWx0ZXIgb2YgZmlsdGVycykge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmZpbHRlcnMucHVzaCh7XHJcblx0XHRcdFx0XHRuYW1lOiBmaWx0ZXIubmFtZSxcclxuXHRcdFx0XHRcdGNhcHRpb246XHJcblx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FwdGlvbkJ5TmFtZShmaWx0ZXIubmFtZSkgfHwgZmlsdGVyLmNhcHRpb24sXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuZmlsdGVyU2V0dGluZ3MgJiYgdGhpcy5maWx0ZXJTZXR0aW5ncy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0YXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3MgPSB0aGlzLmZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmZpbHRlclNldHRpbmdzID0gdGhpcy5maWx0ZXJTZXR0aW5ncztcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5maWx0ZXJTZXR0aW5ncztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy5maWx0ZXJTZXR0aW5ncyA9IGZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xyXG5cdFx0XHRcdGxldCBzZXJpZXNEYXRhO1xyXG5cdFx0XHRcdGxldCB0ZW1wU2hvd09iajtcclxuXHRcdFx0XHRsZXQgZmlsdGVyVGVtcHNob3dBcnJheSA9IFtdO1xyXG5cdFx0XHRcdGlmICh0ZW1wc2hvd0FycmF5Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0ZmlsdGVyVGVtcHNob3dBcnJheSA9IHRlbXBzaG93QXJyYXkuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHQoaXRlbSkgPT5cclxuXHRcdFx0XHRcdFx0XHRpdGVtLm5hbWUgPT09IHZhbHVlLm5hbWUgJiZcclxuXHRcdFx0XHRcdFx0XHRpdGVtLmNhbE1ldGhvZCA9PT0gdmFsdWUudHlwZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGlmIChmaWx0ZXJUZW1wc2hvd0FycmF5Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHR0ZW1wU2hvd09iaiA9IGZpbHRlclRlbXBzaG93QXJyYXlbMF07XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHR0ZW1wU2hvd09iai5oYXNPd25Qcm9wZXJ0eShcInNob3dTdWJUb3RhbHNcIikgJiZcclxuXHRcdFx0XHRcdFx0XHR0ZW1wU2hvd09iai5oYXNPd25Qcm9wZXJ0eShcInNob3dHcmFuZFRvdGFsc1wiKVxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRzZXJpZXNEYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29sTmFtZTogdmFsdWUubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNhbE1ldGhvZDogdmFsdWUudHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB2YWx1ZS5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2hvd1N1YlRvdGFsczogdGVtcFNob3dPYmouc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdFx0XHRcdHNob3dHcmFuZFRvdGFsczogdGVtcFNob3dPYmouc2hvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRlbXBTaG93T2JqLmhhc093blByb3BlcnR5KFwic2hvd0dyYW5kVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzZXJpZXNEYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xOYW1lOiB2YWx1ZS5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYWxNZXRob2Q6IHZhbHVlLnR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB2YWx1ZS5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93R3JhbmRUb3RhbHM6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGVtcFNob3dPYmouc2hvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRlbXBTaG93T2JqLmhhc093blByb3BlcnR5KFwic2hvd1N1YlRvdGFsc1wiKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0c2VyaWVzRGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sTmFtZTogdmFsdWUubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiB2YWx1ZS50eXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdmFsdWUuY2FwdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd1N1YlRvdGFsczogdGVtcFNob3dPYmouc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICghc2VyaWVzRGF0YSkge1xyXG5cdFx0XHRcdFx0c2VyaWVzRGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0Y29sTmFtZTogdmFsdWUubmFtZSxcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHZhbHVlLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdGNhbE1ldGhvZDogdmFsdWUudHlwZSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuY29uZmlnLnlheGlzLnNlcmllcy5wdXNoKHNlcmllc0RhdGEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGNhbGN1bGF0ZSBvZiBjYWxjdWxhdGVkRmllbGRTZXR0aW5ncykge1xyXG5cdFx0XHRcdGNvbnN0IGNhbGN1bGF0ZURhdGEgPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBjYWxjdWxhdGUubmFtZSxcclxuXHRcdFx0XHRcdGZvcm11bGE6IGNhbGN1bGF0ZS5mb3JtdWxhLFxyXG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOlxyXG5cdFx0XHRcdFx0XHRjYWxjdWxhdGUuZm9ybWF0U3RyaW5nID09PSBcIlwiXHJcblx0XHRcdFx0XHRcdFx0PyBcIk4yXCJcclxuXHRcdFx0XHRcdFx0XHQ6IGNhbGN1bGF0ZS5mb3JtYXRTdHJpbmcsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncy5wdXNoKGNhbGN1bGF0ZURhdGEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuY29uZmlnLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMgPSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHM7XHJcblx0XHRcdHRoaXMuY29uZmlnLnNvcnRTZXR0aW5ncyA9IHNvcnRTZXR0aW5ncztcclxuXHRcdFx0dGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncyA9IGdyb3VwU2V0dGluZ3M7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLnVwZGF0ZVZpZXcodGhpcy5waXZvdE9iaik7XHJcblx0XHR9XHJcblx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0Ly9yZW1vdmUgdGhlIHNvcnRcclxuXHRcdGlmICh0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3MubGVuZ3RoID4gMCkge1xyXG5cdFx0XHR0aGlzLnByZXZpb3VzU29ydCA9IHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mbztcclxuXHRcdFx0KHRoaXMuZmllbGRsaXN0T2JqIGFzIGFueSkubGFzdFNvcnRJbmZvID0gW107XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYWZ0ZXJFbmdpbmVQb3B1bGF0ZShhcmdzOiBhbnkpIHtcclxuXHRcdGlmICghQnJvd3Nlci5pc0RldmljZSAmJiB0aGlzLmZpZWxkbGlzdE9iaiAmJiB0aGlzLnBpdm90T2JqKSB7XHJcblx0XHRcdHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iaixcclxuXHRcdFx0XHRcImdyb3VwU2V0dGluZ3NcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmopIHRoaXMuZmllbGRsaXN0T2JqLnVwZGF0ZSh0aGlzLnBpdm90T2JqKTtcclxuXHRcdFx0dGhpcy5waXZvdE9iai5ncmlkLnF1ZXJ5Q2VsbEluZm8gPSB0aGlzLnF1ZXJ5Q2VsbC5iaW5kKHRoaXMpO1xyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmdyaWQuaGVhZGVyQ2VsbEluZm8gPSB0aGlzLmhlYWRlckNlbGwuYmluZCh0aGlzKTtcclxuXHRcdFx0Ly8gU01QMi0zOTI5IHJvbGxiYWNrXHJcblx0XHRcdC8vIGlmICghdGhpcy5pc0FwcGx5SVJSKVxyXG5cdFx0XHQvLyBcdHRoaXMuZ2V0Q2FsY3VsYXRpb25SZXN1bHRCeURhc2hib2FyZERhdGFUYWJsZUlkKCk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5QaXZvdF9EYXRhICYmIHRoaXMuUGl2b3RfRGF0YS5sZW5ndGgpIHtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5lbmdpbmVQb3B1bGF0ZWQoYXJncyk7XHJcblx0XHRcdH0sIDE1MDApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKG9iaiwga2V5KSB7XHJcblx0XHRsZXQgcHJvcCA9IG51bGw7XHJcblx0XHRpZiAob2JqICYmIG9iai5kYXRhU291cmNlU2V0dGluZ3MpIHtcclxuXHRcdFx0cHJvcCA9IG9iai5kYXRhU291cmNlU2V0dGluZ3Nba2V5XTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwcm9wKSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiICYmXHJcblx0XHRcdFx0cHJvcC5sZW5ndGggPiAwXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHByb3AgPSBwcm9wLm1hcCgoaXRlbSkgPT4gaXRlbS5wcm9wZXJ0aWVzIHx8IGl0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcHJvcDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBlbmdpbmVQb3B1bGF0aW5nKGFyZ3MpIHtcclxuXHRcdHRoaXMuZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuc3ViVG90YWxzID0ge307XHJcblx0XHR0aGlzLmFsbERhdGFWYWx1ZSA9IFtdO1xyXG5cdFx0Ly8gaWYgKGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5ncy5sZW5ndGgpIHtcclxuXHRcdC8vIFx0Zm9yIChcclxuXHRcdC8vIFx0XHRsZXQgaSA9IDA7XHJcblx0XHQvLyBcdFx0aSA8IGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5ncy5sZW5ndGg7XHJcblx0XHQvLyBcdFx0aSsrXHJcblx0XHQvLyBcdCkge1xyXG5cdFx0Ly8gXHRcdGlmIChcclxuXHRcdC8vIFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mbyAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvLm5hbWUgPT09XHJcblx0XHQvLyBcdFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5nc1tpXS5uYW1lICYmXHJcblx0XHQvLyBcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5sYXN0U29ydEluZm8ub3JkZXIgPT09IFwiQXNjZW5kaW5nXCIgJiZcclxuXHRcdC8vIFx0XHRcdCEoXHJcblx0XHQvLyBcdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mby5uYW1lID09PVxyXG5cdFx0Ly8gXHRcdFx0XHRcdHRoaXMucHJldmlvdXNTb3J0Lm5hbWUgJiZcclxuXHRcdC8vIFx0XHRcdFx0dGhpcy5wcmV2aW91c1NvcnQub3JkZXIgPT09IFwiTm9uZVwiXHJcblx0XHQvLyBcdFx0XHQpXHJcblx0XHQvLyBcdFx0KSB7XHJcblx0XHQvLyBcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3NbaV0ub3JkZXIgPSBcIk5vbmVcIjtcclxuXHRcdC8vIFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5wcmV2aW91c1NvcnQgJiZcclxuXHRcdC8vIFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mbyAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvLm5hbWUgPT09XHJcblx0XHQvLyBcdFx0XHRcdHRoaXMucHJldmlvdXNTb3J0Lm5hbWUgJiZcclxuXHRcdC8vIFx0XHRcdHRoaXMucHJldmlvdXNTb3J0Lm9yZGVyID09PSBcIkFzY2VuZGluZ1wiXHJcblx0XHQvLyBcdFx0KSB7XHJcblx0XHQvLyBcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3NbaV0ub3JkZXIgPSBcIkFzY2VuZGluZ1wiO1xyXG5cdFx0Ly8gXHRcdH1cclxuXHRcdC8vIFx0fVxyXG5cdFx0Ly8gfVxyXG5cdH1cclxuXHJcblx0cHVibGljIGNlbGxDbGljayhhcmdzKSB7XHJcblx0XHRpZiAoYXJncy5jdXJyZW50Q2VsbC5jbGFzc0xpc3QuY29udGFpbnMoXCJlLWhlYWRlcmNlbGxcIikpIHtcclxuXHRcdFx0dGhpcy5mbGFnID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdC8vIOa4hemZpOaOkuW6j1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5zb3J0T3JkZXIgJiZcclxuXHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVTb3J0U2V0dGluZ3MuaGVhZGVyVGV4dCAmJlxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5zb3J0T3JkZXIgPT09XHJcblx0XHRcdFx0XCJEZXNjZW5kaW5nXCIgJiZcclxuXHRcdFx0YXJncy5kYXRhLnZhbHVlU29ydCAmJlxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5oZWFkZXJUZXh0ID09PVxyXG5cdFx0XHRcdGFyZ3MuZGF0YS52YWx1ZVNvcnQubGV2ZWxOYW1lXHJcblx0XHQpIHtcclxuXHRcdFx0dGhpcy5waXZvdE9iai5zZXRQcm9wZXJ0aWVzKFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGRhdGFTb3VyY2VTZXR0aW5nczoge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZVNvcnRTZXR0aW5nczoge1xyXG5cdFx0XHRcdFx0XHRcdHNvcnRPcmRlcjogXCJEZXNjZW5kaW5nXCIsXHJcblx0XHRcdFx0XHRcdFx0aGVhZGVyVGV4dDogXCJcIixcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR0cnVlXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdHRoaXMuZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy52YWx1ZVNvcnRTZXR0aW5ncyA9IHt9O1xyXG5cdFx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBxdWVyeUNlbGwoYXJnczogYW55KTogdm9pZCB7XHJcblx0XHQodGhpcy5waXZvdE9iai5yZW5kZXJNb2R1bGUgYXMgYW55KS5yb3dDZWxsQm91bmRFdmVudChhcmdzKTtcclxuXHRcdGxldCByb3dJbmRleCA9IE51bWJlcihhcmdzLmNlbGwuZ2V0QXR0cmlidXRlKFwiaW5kZXhcIikpO1xyXG5cdFx0Ly8g5paw54mI5pysMjYueOS4rSBhcmlhLWNvbGluZGV4IOS8muavlOaXp+eJiOacrHYyMC54IOWkmjFcclxuXHRcdGxldCBjb2xJbmRleCA9IHBhcnNlSW50KGFyZ3MuY2VsbC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWNvbGluZGV4XCIpKSAtIDE7XHJcblx0XHRpZiAoXHJcblx0XHRcdCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb25kaXRpb25hbEZvcm1hdFNldHRpbmdzLmxlbmd0aFxyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChhcmdzLmRhdGEgJiYgYXJncy5kYXRhWzBdLmZvcm1hdHRlZFRleHQgPT09IFwiR3JhbmQgVG90YWxcIikge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwiZ3JhbmQtY2xhc3NcIik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXHJcblx0XHRcdFx0XHRyb3dJbmRleCAlIDIgPyBcIm9kZC1jbGFzc1wiIDogXCJldmVuLWNsYXNzXCJcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsZXQgbWVhc3VyZUFyciA9XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncy5tYXAoXHJcblx0XHRcdFx0XHQob2JqKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBvYmoubWVhc3VyZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0bWVhc3VyZUFyci5pbmNsdWRlcyhhcmdzLmRhdGFbY29sSW5kZXhdLmFjdHVhbFRleHQpICYmXHJcblx0XHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XS5zdHlsZVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuc3R5bGUuY3NzVGV4dCArPSBgYmFja2dyb3VuZC1jb2xvcjogJHthcmdzLmRhdGFbY29sSW5kZXhdLnN0eWxlLmJhY2tncm91bmRDb2xvcn0gIWltcG9ydGFudGA7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGFyZ3MuZGF0YSAmJiBhcmdzLmRhdGFbMF0uZm9ybWF0dGVkVGV4dCA9PT0gXCJHcmFuZCBUb3RhbFwiKVxyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwiZS1jdXN0b21jbGFzc1wiKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoYXJncy5kYXRhICYmIGFyZ3MuZGF0YVswXS5mb3JtYXR0ZWRUZXh0ID09PSBcIkdyYW5kIFRvdGFsXCIpIHtcclxuXHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJncmFuZC1jbGFzc1wiKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmIChyb3dJbmRleCAlIDIpIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcIm9kZC1jbGFzc1wiKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcImV2ZW4tY2xhc3NcIik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvL2dldCBzb3J0aW5nIGRhdGFcclxuXHRcdGlmICh0aGlzLmZsYWcpIHtcclxuXHRcdFx0dGhpcy5mbGFnID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuY29uZmlnLnZhbHVlU29ydFNldHRpbmdzID1cclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5nc1tcclxuXHRcdFx0XHRcdFwicHJvcGVydGllc1wiXHJcblx0XHRcdFx0XTtcclxuXHRcdFx0dGhpcy5wb3J0bGV0LmNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKTtcclxuXHRcdH1cclxuXHRcdC8vY3VzdG9taXplIHRoZSBoZWFkZXIgdGV4dFxyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3MubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRhcmdzLmRhdGEgJiZcclxuXHRcdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdICYmXHJcblx0XHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XS5heGlzID09PSBcInJvd1wiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5xdWVyeVNlbGVjdG9yKFwiLmUtY2VsbHZhbHVlXCIpLmlubmVyVGV4dCA9XHJcblx0XHRcdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLmZvcm1hdHRlZFRleHQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBTTVAyLTI5MTIgc3VidG90YWzlrZfkvZPliqDnspdcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGggJiZcclxuXHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XSAmJlxyXG5cdFx0XHRhcmdzLmRhdGFbMF0ubGV2ZWwgIT09XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGggLSAxICYmXHJcblx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0ucm93SGVhZGVycyAhPT0gXCJcIiAmJlxyXG5cdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLmF4aXMgPT0gXCJ2YWx1ZVwiXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJlLWN1c3RvbWNsYXNzXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBoZWFkZXJDZWxsKGFyZ3M6IGFueSk6IHZvaWQge1xyXG5cdFx0KHRoaXMucGl2b3RPYmoucmVuZGVyTW9kdWxlIGFzIGFueSkuY29sdW1uQ2VsbEJvdW5kRXZlbnQoYXJncyk7XHJcblx0XHRpZiAodGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0bGV0IG5vZGUgPSBhcmdzLm5vZGUucXVlcnlTZWxlY3RvcihcclxuXHRcdFx0XHRcIi5lLWhlYWRlcmNlbGxkaXYgLmUtaGVhZGVydGV4dFwiXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChub2RlKSBub2RlLmlubmVyVGV4dCA9IGFyZ3MuY2VsbC5jb2x1bW4uaGVhZGVyVGV4dDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGFyZ3MuY2VsbC5jb2x1bW4udGV4dEFsaWduO1xyXG5cdFx0YXJncy5jZWxsLmNvbHVtbi5oZWFkZXJUZXh0QWxpZ24gPSB0ZXh0QWxpZ247XHJcblx0XHRhcmdzLm5vZGUuc3R5bGUudGV4dEFsaWduID0gdGV4dEFsaWduID09PSBcIlJpZ2h0XCIgPyBcInJpZ2h0XCIgOiBcImxlZnRcIjsgLy8gQWxpZ24gcmlnaHQgZm9yIG51bWVyaWMgY29sdW1uc1xyXG5cdFx0aWYgKHRleHRBbGlnbiA9PT0gXCJSaWdodFwiKSB7XHJcblx0XHRcdGFyZ3Mubm9kZS5jbGFzc0xpc3QuYWRkKFwiaGVhZGVyLWFsaWduLXJpZ2h0XCIpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZGF0YUJvdW5kKGUpIHtcclxuXHRcdGlmICh0aGlzLmlzSW5pdCkge1xyXG5cdFx0XHR0aGlzLmlzSW5pdCA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5ncmFuZFRvdGFscyA9IHt9O1xyXG5cdFx0dGhpcy5zdWJUb3RhbHMgPSB7fTtcclxuXHRcdGlmICh0aGlzLnBpdm90T2JqLmdyaWQpIHtcclxuXHRcdFx0dGhpcy5waXZvdE9iai5ncmlkLnJlc2l6ZVN0b3AgPSB0aGlzLnJlc2l6ZVN0b3AuYmluZCh0aGlzKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLnBpdm90T2JqKSB7XHJcblx0XHRcdHZhciBpbmRleCA9IFtdO1xyXG5cdFx0XHQvLyBHZXQgdGhlIGVtcHR5IHJvdyBoZWFkZXJzIGhlcmUuXHJcblx0XHRcdHZhciBlbXB0eVJvd0hlYWRlcjogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuXHRcdFx0XHQndGRbYXJpYS1sYWJlbD1cIiBjb2x1bW4gaGVhZGVyIFwiXSdcclxuXHRcdFx0KTtcclxuXHRcdFx0Zm9yICh2YXIgZWxlIG9mIGVtcHR5Um93SGVhZGVyKSB7XHJcblx0XHRcdFx0aWYgKGVsZSkge1xyXG5cdFx0XHRcdFx0aW5kZXgucHVzaChlbGUuZ2V0QXR0cmlidXRlKFwiaW5kZXhcIikpO1xyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGFsbCB0aGUgZW1wdHkgcm93IGhlYWRlcnMgaGVyZS5cclxuXHRcdFx0XHRcdGVsZS5jbG9zZXN0KFwidHJcIikucmVtb3ZlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaW5kZXgubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHQvLyBHZXQgdGhlIGVtcHR5IHZhbHVlcyBoZXJlLlxyXG5cdFx0XHRcdHZhciBlbXB0eVZhbHVlcyA9IHRoaXMucGl2b3RPYmouZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG5cdFx0XHRcdFx0YHRkW2luZGV4PVwiJHtpbmRleFtpXX1cIl1gXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoZW1wdHlWYWx1ZXNbMF0pIHtcclxuXHRcdFx0XHRcdC8vIFJlbW92ZSBhbGwgdGhlIGVtcHR5IHZhbHVlIHJvd3MgaGVyZS5cclxuXHRcdFx0XHRcdGVtcHR5VmFsdWVzWzBdLmNsb3Nlc3QoXCJ0clwiKS5yZW1vdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmogJiZcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoucGl2b3RCdXR0b25Nb2R1bGUgJiZcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoucGl2b3RCdXR0b25Nb2R1bGUubWVudU9wdGlvblxyXG5cdFx0KSB7XHJcblx0XHRcdChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5waXZvdEJ1dHRvbk1vZHVsZS5tZW51T3B0aW9uIGFzIGFueVxyXG5cdFx0XHQpLnN0cmluZ0FnZ3JlZ2F0ZVR5cGVzID0gW1xyXG5cdFx0XHRcdFwiQ291bnRcIixcclxuXHRcdFx0XHRcIkRpc3RpbmN0Q291bnRcIixcclxuXHRcdFx0XHRcIkZpcnN0XCIsXHJcblx0XHRcdFx0XCJMYXN0XCIsXHJcblx0XHRcdF07XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMucGl2b3RPYmoucGl2b3RCdXR0b25Nb2R1bGUgJiZcclxuXHRcdFx0dGhpcy5waXZvdE9iai5waXZvdEJ1dHRvbk1vZHVsZS5tZW51T3B0aW9uXHJcblx0XHQpIHtcclxuXHRcdFx0KFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmoucGl2b3RCdXR0b25Nb2R1bGUubWVudU9wdGlvbiBhcyBhbnlcclxuXHRcdFx0KS5zdHJpbmdBZ2dyZWdhdGVUeXBlcyA9IFtcclxuXHRcdFx0XHRcIkNvdW50XCIsXHJcblx0XHRcdFx0XCJEaXN0aW5jdENvdW50XCIsXHJcblx0XHRcdFx0XCJGaXJzdFwiLFxyXG5cdFx0XHRcdFwiTGFzdFwiLFxyXG5cdFx0XHRdO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGFsbFN1bW1hcnlUeXBlID0gQUxMX0FHR1JFR0FURV9UWVBFUyBhcyBhbnk7XHJcblx0XHR0aGlzLnBpdm90T2JqLmdldEFsbFN1bW1hcnlUeXBlID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRyZXR1cm4gYWxsU3VtbWFyeVR5cGU7XHJcblx0XHR9O1xyXG5cdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqKSB7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmFnZ3JlZ2F0ZVR5cGVzID0gYWxsU3VtbWFyeVR5cGU7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmdldEFsbFN1bW1hcnlUeXBlID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdHJldHVybiBhbGxTdW1tYXJ5VHlwZTtcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0VmFsdWVJdGVtRGF0YSgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRWYWx1ZUl0ZW1EYXRhKCkge1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdGNvbnN0IGZpZWxkRG9tID0gdGhpcy5maWVsZGxpc3RPYmouZmllbGRMaXN0U3Bpbm5lckVsZW1lbnQ7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlcy5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XHJcblx0XHRcdFx0aWYgKHZhbHVlLnR5cGUgIT09IFwiRmlyc3RcIiAmJiB2YWx1ZS50eXBlICE9PSBcIkxhc3RcIikge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCB2YWx1ZXNEb20gPSBmaWVsZERvbS5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdFx0YC5lLXZhbHVlcyAuJHt2YWx1ZS5uYW1lfSAuZS1wdnQtYnRuLWNvbnRlbnRgXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHR2YWx1ZXNEb20uaW5uZXJIVE1MICE9PSBgJHt2YWx1ZS50eXBlfSBvZiAke3ZhbHVlLmNhcHRpb259YFxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0dmFsdWVzRG9tLmlubmVySFRNTCA9IGAke3ZhbHVlLnR5cGV9IG9mICR7dmFsdWUuY2FwdGlvbn1gO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2FsY3VsYXRlZENlbGxTZXRzKGFyZ3MsIGN1ckZpZWxkcykge1xyXG5cdFx0bGV0IG1hdGNoRmllbGRzID0gY3VyRmllbGRzW1wibWF0Y2hGaWVsZHNcIl07XHJcblx0XHRsZXQgZm9ybXVsYSA9IGN1ckZpZWxkc1tcImZvcm11bGFcIl07XHJcblx0XHRsZXQgdmFsdWUgPSAwO1xyXG5cdFx0bGV0IHJvd3MgPSB0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzO1xyXG5cdFx0bGV0IGludmFsaWRUeXBlcyA9IFtcInN0cmluZ1wiLCBcIm52YXJjaGFyXCIsIFwiZGF0ZVwiLCBcImRhdGV0aW1lXCJdO1xyXG5cdFx0bGV0IGlzSW52YWxpZCA9IG1hdGNoRmllbGRzLnNvbWUoKGYpID0+XHJcblx0XHRcdGludmFsaWRUeXBlcy5pbmNsdWRlcyhcclxuXHRcdFx0XHR0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoKGVsKSA9PiBlbC5jb2xOYW1lID09PSBmLm1hdGNoV29yZClbMF1bXHJcblx0XHRcdFx0XHRcImRhdGFUeXBlXCJcclxuXHRcdFx0XHRdXHJcblx0XHRcdClcclxuXHRcdCk7XHJcblx0XHRsZXQgY3VycmVudHJvd0NlbGxUeXBlID0gYXJncy5yb3dDZWxsVHlwZTtcclxuXHRcdGlmIChpc0ludmFsaWQpIHJldHVybiBcIi1cIjtcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9PT0gXCJzdWJUb3RhbFwiIHx8XHJcblx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHQpIHtcclxuXHRcdFx0bGV0IGNoaWxkSGVhZGVycyA9IFtdO1xyXG5cdFx0XHRsZXQgc3VtID0gMDtcclxuXHRcdFx0bGV0IGNsb25lQ2VsbFNldHMgPSBjbG9uZURlZXAoYXJncy5jZWxsU2V0cyk7XHJcblx0XHRcdGxldCBncm91cE5hbWVBcnJheXMgPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgaW5kZXggPSBhcmdzLnJvdy5sZXZlbDsgaW5kZXggPCByb3dzLmxlbmd0aDsgaW5kZXgrKykge1xyXG5cdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5wdXNoKHJvd3NbaW5kZXhdLm5hbWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2xvbmVDZWxsU2V0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0XHRsZXQgaGVhZGVyID0gZ3JvdXBOYW1lQXJyYXlzXHJcblx0XHRcdFx0XHQubWFwKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGNsb25lQ2VsbFNldHNbaV1bbmFtZV0pO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gY2xvbmVDZWxsU2V0c1tpXVtuYW1lXTtcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQuam9pbihcIi1cIik7XHJcblx0XHRcdFx0aWYgKCEoY2hpbGRIZWFkZXJzIGFzIGFueSkuaW5jbHVkZXMoaGVhZGVyKSkge1xyXG5cdFx0XHRcdFx0Y2hpbGRIZWFkZXJzLnB1c2goaGVhZGVyKTtcclxuXHRcdFx0XHRcdGxldCBmaWx0ZXJPYmo6IGFueSA9IHt9O1xyXG5cdFx0XHRcdFx0Z3JvdXBOYW1lQXJyYXlzLm1hcChcclxuXHRcdFx0XHRcdFx0KG5hbWUsIGkpID0+IChmaWx0ZXJPYmpbbmFtZV0gPSB2YWx1ZXNbaV0pXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YXJncy5jZWxsU2V0cyA9IF9maWx0ZXIoY2xvbmVDZWxsU2V0cywgZmlsdGVyT2JqKTtcclxuXHRcdFx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPSBcInZhbHVlXCI7XHJcblx0XHRcdFx0XHRzdW0gKz0gdGhpcy5jYWxjdWxhdGVkVmFsdWVzKGFyZ3MsIG1hdGNoRmllbGRzLCBmb3JtdWxhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9IGN1cnJlbnRyb3dDZWxsVHlwZTtcclxuXHJcblx0XHRcdC8vIOaaguWtmOW9k+WJjVN1YlRvdGFs77yMIOeUqOS6juaUtue8qeaXtuivu+WPllxyXG5cdFx0XHRsZXQgcHJlZml4SGVhZGVyID0gdGhpcy5nZXRDYWxjSGVhZGVyKGFyZ3MsIGZvcm11bGEpO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVRlbXBTdWJ0b3RhbHMocHJlZml4SGVhZGVyLCBzdW0pO1xyXG5cdFx0XHRyZXR1cm4gc3VtO1xyXG5cdFx0fSBlbHNlIGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcInZhbHVlXCIpIHtcclxuXHRcdFx0aWYgKGFyZ3Mucm93Lmhhc0NoaWxkKSB7XHJcblx0XHRcdFx0Ly8gY29sbGFwc2Ug6K+75Y+WU3ViVG90YWxcclxuXHRcdFx0XHRsZXQgaGVhZGVyID0gdGhpcy5nZXRDYWxjSGVhZGVyKGFyZ3MsIGZvcm11bGEpO1xyXG5cdFx0XHRcdGxldCBpbmRleCA9IHRoaXMudGVtcFN1YnRvdGFscy5maW5kSW5kZXgoXHJcblx0XHRcdFx0XHQoaXRlbSkgPT4gaXRlbS5yb3dOYW1lID09PSBoZWFkZXJcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChpbmRleCA+IC0xKSB7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IHRoaXMudGVtcFN1YnRvdGFsc1tpbmRleF0ucm93VmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIGV4cGFuZFxyXG5cdFx0XHRcdHZhbHVlID0gdGhpcy5jYWxjdWxhdGVkVmFsdWVzKGFyZ3MsIG1hdGNoRmllbGRzLCBmb3JtdWxhKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHZhbHVlO1xyXG5cdH1cclxuXHJcblx0YWN0aW9uRmFpbHVyZShhcmdzOiBQaXZvdEFjdGlvbkZhaWx1cmVFdmVudEFyZ3MpOiB2b2lkIHtcclxuXHRcdGlmIChhcmdzLmFjdGlvbk5hbWUgPT0gXCJEcmlsbCBkb3duXCIgfHwgYXJncy5hY3Rpb25OYW1lID09IFwiRHJpbGwgdXBcIikge1xyXG5cdFx0XHQvLyBUcmlnZ2VycyB3aGVuIHRoZSBjdXJyZW50IFVJIGFjdGlvbiBmYWlscyB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIHJlc3VsdC5cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q2FsY0hlYWRlcihhcmdzLCBmb3JtdWxhPykge1xyXG5cdFx0bGV0IGhlYWRlciA9IFwiXCI7XHJcblx0XHRsZXQgcm93cyA9IHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3M7XHJcblx0XHRsZXQgZ3JvdXBOYW1lQXJyYXlzID0gW107XHJcblx0XHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJncy5yb3cubGV2ZWw7IGluZGV4KyspIHtcclxuXHRcdFx0Z3JvdXBOYW1lQXJyYXlzLnB1c2gocm93c1tpbmRleF0ubmFtZSk7XHJcblx0XHR9XHJcblx0XHRoZWFkZXIgPSBncm91cE5hbWVBcnJheXMubGVuZ3RoXHJcblx0XHRcdD8gZ3JvdXBOYW1lQXJyYXlzXHJcblx0XHRcdFx0XHQubWFwKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBhcmdzLmNlbGxTZXRzWzBdW25hbWVdO1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdC5qb2luKFwiLVwiKSArXHJcblx0XHRcdCAgXCItXCIgK1xyXG5cdFx0XHQgIGFyZ3Mucm93LmFjdHVhbFRleHRcclxuXHRcdFx0OiBhcmdzLnJvdy5hY3R1YWxUZXh0O1xyXG5cdFx0aWYgKGZvcm11bGEpIGhlYWRlciArPSBcIl9fX1wiICsgZm9ybXVsYTtcclxuXHRcdHJldHVybiBoZWFkZXI7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHVwZGF0ZVRlbXBTdWJ0b3RhbHMocm93TmFtZSwgcm93VmFsdWUpIHtcclxuXHRcdGxldCBpbmRleCA9IHRoaXMudGVtcFN1YnRvdGFscy5maW5kSW5kZXgoXHJcblx0XHRcdChpdGVtKSA9PiBpdGVtLnJvd05hbWUgPT09IHJvd05hbWVcclxuXHRcdCk7XHJcblx0XHRsZXQgdGVtcDogYW55ID0ge307XHJcblx0XHR0ZW1wLnJvd05hbWUgPSByb3dOYW1lO1xyXG5cdFx0dGVtcC5yb3dWYWx1ZSA9IHJvd1ZhbHVlO1xyXG5cdFx0aWYgKGluZGV4ID4gLTEpIHtcclxuXHRcdFx0dGhpcy50ZW1wU3VidG90YWxzLnNwbGljZShpbmRleCwgMSwgdGVtcCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnRlbXBTdWJ0b3RhbHMucHVzaCh0ZW1wKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2FsY3VsYXRlZFZhbHVlcyhhcmdzLCBtYXRjaEZpZWxkcywgZm9ybXVsYSkge1xyXG5cdFx0aWYgKG1hdGNoRmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRsZXQgY2FsY3VsZWRNYXRjaEZpZWxkcyA9IG1hdGNoRmllbGRzLm1hcCgoZikgPT4ge1xyXG5cdFx0XHRcdHN3aXRjaCAoZi5tYXRjaE1ldGhvZCkge1xyXG5cdFx0XHRcdFx0Y2FzZSBcIkZpcnN0XCI6XHJcblx0XHRcdFx0XHRjYXNlIFwiTGFzdFwiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlZEZpc3RMYXN0KFxyXG5cdFx0XHRcdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0XHRcdFx0Zi5tYXRjaE1ldGhvZCxcclxuXHRcdFx0XHRcdFx0XHRmLm1hdGNoV29yZFxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgXCJNYXhcIjpcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPSBtYXhCeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdClbZi5tYXRjaFdvcmRdO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgXCJNaW5cIjpcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPSBtaW5CeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdClbZi5tYXRjaFdvcmRdO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgXCJTdW1cIjpcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPSBzdW1CeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdC8vIFNNUDItNDA5NCBVbmljb3JuIC0gTDMgQWRqdXN0ZWQgTkFWIHZhbHVlIGlzc3Vlc1xyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgJiYgZi5yZXBsYWNlVmFsdWUudG9GaXhlZCgxMCk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBcIkF2Z1wiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IG1lYW5CeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBmO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0bGV0IHJlc3VsdEZvcm11bGEgPSBmb3JtdWxhO1xyXG5cdFx0XHRpZiAoY2FsY3VsZWRNYXRjaEZpZWxkcy5sZW5ndGgpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNhbGN1bGVkTWF0Y2hGaWVsZHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdHJlc3VsdEZvcm11bGEgPSByZXN1bHRGb3JtdWxhLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdGNhbGN1bGVkTWF0Y2hGaWVsZHNbaV0ubWF0Y2hTdHIsXHJcblx0XHRcdFx0XHRcdFwiKFwiICsgY2FsY3VsZWRNYXRjaEZpZWxkc1tpXS5yZXBsYWNlVmFsdWUgKyBcIilcIlxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRsZXQgcmVzdWx0ID0gbmV3IEZ1bmN0aW9uKFxyXG5cdFx0XHRcdFx0XCJyZXR1cm4gXCIgKyByZXN1bHRGb3JtdWxhLnJlcGxhY2UoL1teLTw+PzooKVxcZC8qKy5dL2csIFwiXCIpXHJcblx0XHRcdFx0KSgpO1xyXG5cdFx0XHRcdGlmIChpc05hTihyZXN1bHQpIHx8ICFpc0Zpbml0ZShyZXN1bHQpKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0cmV0dXJuIE5hTjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG5cclxuXHR0b3RhbEZvcm1hdHRlZCA9IHt9O1xyXG5cdHB1YmxpYyBhZ2dyZWdhdGVDZWxsSW5mbyhhcmdzKSB7XHJcblx0XHRsZXQgYXNPZkRhdGUgPSB0aGlzLnBiZi50aW1lKHRoaXMuZGFzaGJvYXJkLmFzT2ZEYXRlKTtcclxuXHRcdC8vIGlmIGNhbGN1bGF0ZWQgZmllbGRcclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT0gXCJDYWxjdWxhdGVkRmllbGRcIikge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChhcmdzLmZpZWxkTmFtZSA9PSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNbaV0ubmFtZSkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IHRoaXMuY2FsY3VsYXRlZENlbGxTZXRzKFxyXG5cdFx0XHRcdFx0XHRhcmdzLFxyXG5cdFx0XHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNbaV1cclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHRbXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVJUlJcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUkJlZm9yZUNhcnJpZWRcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUklSUkRhdGVcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUk1URFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSUVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVJUlJZVERcIixcclxuXHRcdFx0XS5pbmNsdWRlcyhhcmdzLmFnZ3JlZ2F0ZVR5cGUpXHJcblx0XHQpIHtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCI9PT09PT09PT09PT09PT09PT09PT09PT09PVwiKTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJhcmdzOlwiLCBhcmdzKTtcclxuXHRcdFx0bGV0IHZhbHVlRmllbGQ7XHJcblx0XHRcdGxldCBkYXRlRmllbGQ7XHJcblx0XHRcdGxldCBzdGFydERhdGU7XHJcblx0XHRcdGxldCBlbmREYXRlO1xyXG5cdFx0XHRzd2l0Y2ggKGFyZ3MuYWdncmVnYXRlVHlwZSkge1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJcIjpcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJNVERcIjpcclxuXHRcdFx0XHRcdHN0YXJ0RGF0ZSA9IG1vbWVudChhc09mRGF0ZSlcclxuXHRcdFx0XHRcdFx0LnN0YXJ0T2YoXCJtb250aFwiKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdGVuZERhdGUgPSBtb21lbnQoYXNPZkRhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSUVREXCI6XHJcblx0XHRcdFx0XHRzdGFydERhdGUgPSBtb21lbnQoYXNPZkRhdGUpXHJcblx0XHRcdFx0XHRcdC5zdGFydE9mKFwicXVhcnRlclwiKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdGVuZERhdGUgPSBtb21lbnQoYXNPZkRhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSWVREXCI6XHJcblx0XHRcdFx0XHRzdGFydERhdGUgPSBtb21lbnQoYXNPZkRhdGUpXHJcblx0XHRcdFx0XHRcdC5zdGFydE9mKFwieWVhclwiKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdGVuZERhdGUgPSBtb21lbnQoYXNPZkRhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSSVJSRGF0ZVwiOlxyXG5cdFx0XHRcdFx0dmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVcIjtcclxuXHRcdFx0XHRcdGRhdGVGaWVsZCA9IFwiQ2FsY3VsYXRlSVJSRGF0ZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZUlSUkJlZm9yZUNhcnJpZWRcIjpcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlQmVmb3JlQ2FycnlcIjtcclxuXHRcdFx0XHRcdGRhdGVGaWVsZCA9IFwiSVJSRGF0ZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCBOQVZBZGogPSAwO1xyXG5cdFx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRcdGxldCBiZWZvcmVTdGFydE5BVkFkaiA9IDA7IC8vIOWtmOWCqOS4iuS4gOS4qumYtuauteeahE5BVkFkauaAu+WSjFxyXG5cdFx0XHRsZXQgYmVmb3JlU3RhcnRWYWx1ZXMgPSBbXTsgLy8g5a2Y5YKo5LiK5LiA5Liq6Zi25q6155qE57Sv6K6h6ZuG5ZCIICjlj6rmmK/kuLrkuobmiZPljbDvvIzmsqHmnInlrp7pmYXnlKjpgJQpXHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdGFtb3VudDogYXJncy5jZWxsU2V0c1tpXVtcIklSUkFtb3VudFwiXSxcclxuXHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSA9PT1cclxuXHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdC8vIFNNUDItMTY5MjBcclxuXHRcdFx0XHQvLyBJZiBJUlIgRGF0ZSA+IERhc2hib2FyZCByZXBvcnQgZGF0ZSA9IFRha2VzIGFzIG9mIGRhc2hib2FyZCByZXBvcnQgZGF0ZVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVJUlJJUlJEYXRlXCIgJiZcclxuXHRcdFx0XHRcdGFzT2ZEYXRlIDwgdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRkYXRhLmRhdGUgPSBhc09mRGF0ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0TkFWQWRqICs9IGFyZ3MuY2VsbFNldHNbaV1bdmFsdWVGaWVsZF07XHJcblx0XHRcdFx0Ly8gU01QMi0xNzIxOSBNVEQgUVREIFlURCBJUlJcclxuXHRcdFx0XHRpZiAoc3RhcnREYXRlICYmIGVuZERhdGUpIHtcclxuXHRcdFx0XHRcdGlmIChtb21lbnQoZGF0YS5kYXRlKS5pc0JlZm9yZShzdGFydERhdGUpKSB7XHJcblx0XHRcdFx0XHRcdGRhdGFbdmFsdWVGaWVsZF0gPSBhcmdzLmNlbGxTZXRzW2ldW3ZhbHVlRmllbGRdO1xyXG5cdFx0XHRcdFx0XHRiZWZvcmVTdGFydFZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0XHRiZWZvcmVTdGFydE5BVkFkaiArPSBkYXRhW3ZhbHVlRmllbGRdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhbW9tZW50KGRhdGEuZGF0ZSkuaXNCZXR3ZWVuKFxyXG5cdFx0XHRcdFx0XHRcdHN0YXJ0RGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRlbmREYXRlLFxyXG5cdFx0XHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRcdFx0XCJbXVwiXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoTkFWQWRqID4gMC4wMDAxIHx8IE5BVkFkaiA8IC0wLjAwMDEpIHtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh7XHJcblx0XHRcdFx0XHRhbW91bnQ6IE5BVkFkaixcclxuXHRcdFx0XHRcdGRhdGU6IGFzT2ZEYXRlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlcyA9IHNvcnRCeSh2YWx1ZXMsIFwiZGF0ZVwiKTtcclxuXHRcdFx0Ly8g5aaC5p6c5pivTVRELFFURCxZVEQg5YiZ6ZyA6KaB5oqK5b2T5YmN6Zi25q615Lul5YmN55qE5omA5pyJ5pWw5o2u6L+b6KGM5rGH5oC777yM5Yqg5YWl6K6h566XXHJcblx0XHRcdGlmIChzdGFydERhdGUgJiYgZW5kRGF0ZSkge1xyXG5cdFx0XHRcdHZhbHVlcy51bnNoaWZ0KHtcclxuXHRcdFx0XHRcdGFtb3VudDogLWJlZm9yZVN0YXJ0TkFWQWRqLCAvLyDlvIDlp4vnmoTmlbDmja7pnIDopoHlj5blj41cclxuXHRcdFx0XHRcdGRhdGU6IHRoaXMucGJmLnRpbWUoc3RhcnREYXRlKSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcImJlZm9yZVN0YXJ0VmFsdWVzOlwiLCBiZWZvcmVTdGFydFZhbHVlcyk7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwidmFsdWVzOlwiLCB2YWx1ZXMpO1xyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRsZXQgZ3Vlc3MgPSAwLjE7XHJcblx0XHRcdFx0Y29uc3Qgc3VtQW1vdW50ID0gdmFsdWVzXHJcblx0XHRcdFx0XHQubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudClcclxuXHRcdFx0XHRcdC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwKTtcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50IDwgMCkge1xyXG5cdFx0XHRcdFx0Z3Vlc3MgPSAtMC4xO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvL1NNUDItMjI0OSBmaXhlZCB0aGUgYmlnIGlyciBpc3N1ZVxyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPT09IDApIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSAwO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUl0ZW1zID0gdmFsdWVzLnNsaWNlKDAsIHZhbHVlcy5sZW5ndGggLSAxKTtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudCk7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmRhdGUpO1xyXG5cdFx0XHRcdFx0Y29uc3QgbGFzdEl0ZW0gPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0Y29uc3QgbmF2QWRqdXN0ID0gbGFzdEl0ZW0uYW1vdW50O1xyXG5cdFx0XHRcdFx0Y29uc3QgbGF0ZXN0RGF0ZSA9IGxhc3RJdGVtLmRhdGU7XHJcblx0XHRcdFx0XHRsZXQgaXJyID1cclxuXHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5FeGNlbEZvcm11bGFzLl9DYWxjdWxhdGVYaXJyKFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRkYXRlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRuYXZBZGp1c3QsXHJcblx0XHRcdFx0XHRcdFx0bGF0ZXN0RGF0ZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGlyciA9PT0gbnVsbCA/IFwiXCIgOiBpcnI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiYXJncy52YWx1ZTpcIiwgYXJncy52YWx1ZSk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZSAmJlxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV1cclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV07XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRmaWVsZC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmRwXHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHQ6IFwiUDJcIixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gIFNNUDItMTY1MjAgVFdSIOaciC/lraMv5bm0ICYmIFNNUDItMTY2ODMgVkFSXHJcblx0XHRpZiAoXHJcblx0XHRcdFtcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVRXUk1URFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVFdSUVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVUV1JZVERcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUk1URF85OVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSUVREXzk5XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJZVERfOTlcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUk1URF85NVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSUVREXzk1XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJZVERfOTVcIixcclxuXHRcdFx0XS5pbmNsdWRlcyhhcmdzLmFnZ3JlZ2F0ZVR5cGUpXHJcblx0XHQpIHtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCI9PT09PT09PT09PT09PT09PT09PT09PT09PVwiKTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJhcmdzOlwiLCBhcmdzKTtcclxuXHRcdFx0bGV0IHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdGxldCBkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0bGV0IHRpbWVSYW5nZTtcclxuXHRcdFx0c3dpdGNoIChhcmdzLmFnZ3JlZ2F0ZVR5cGUpIHtcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVFdSTVREXCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUk1URF85OVwiOlxyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVWQVJNVERfOTVcIjpcclxuXHRcdFx0XHRcdHRpbWVSYW5nZSA9IFwibW9udGhcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVUV1JRVERcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSUVREXzk5XCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUlFURF85NVwiOlxyXG5cdFx0XHRcdFx0dGltZVJhbmdlID0gXCJxdWFydGVyXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVFdSWVREXCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUllURF85OVwiOlxyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVWQVJZVERfOTVcIjpcclxuXHRcdFx0XHRcdHRpbWVSYW5nZSA9IFwieWVhclwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCB2YWx1ZXMgPSBbXTsgLy8g6L+Z5Liq6Zi25q6155qE57Sv6K6h6ZuG5ZCIXHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFt2YWx1ZUZpZWxkXTogYXJncy5jZWxsU2V0c1tpXVt2YWx1ZUZpZWxkXSxcclxuXHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSA9PT1cclxuXHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyDlpoLmnpxhc09mRGF0ZeS4jeaYryDmnKzmnIgv5a2j5bqmL+W5tCDnmoTmnIDlkI7kuIDlpKnvvIzpg73mmK/miKroh7Mg5LiK5Liq5pyIL+Wto+W6pi/lubQg55qE5pyA5ZCO5LiA5aSp55qE5pWw5o2u5Y676K6h566XXHJcblx0XHRcdGxldCBfYXNPZkRhdGUgPSBtb21lbnQoYXNPZkRhdGUpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcIl9hc09mRGF0ZTpcIiwgX2FzT2ZEYXRlKTtcclxuXHRcdFx0bGV0IGlzRW5kT2ZQZXJpb2QgPSAodW5pdCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiAoXHJcblx0XHRcdFx0XHRfYXNPZkRhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSA9PT1cclxuXHRcdFx0XHRcdF9hc09mRGF0ZS5lbmRPZih1bml0KS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fTtcclxuXHRcdFx0bGV0IGVuZERhdGUgPSBpc0VuZE9mUGVyaW9kKHRpbWVSYW5nZSlcclxuXHRcdFx0XHQ/IG1vbWVudChhc09mRGF0ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKVxyXG5cdFx0XHRcdDogbW9tZW50KGFzT2ZEYXRlKVxyXG5cdFx0XHRcdFx0XHQuc3VidHJhY3QoMSwgdGltZVJhbmdlKVxyXG5cdFx0XHRcdFx0XHQuZW5kT2YodGltZVJhbmdlKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiZW5kRGF0ZTpcIiwgZW5kRGF0ZSk7XHJcblx0XHRcdHZhbHVlcyA9IHZhbHVlcy5maWx0ZXIoKGl0ZW0pID0+XHJcblx0XHRcdFx0bW9tZW50KGl0ZW0uZGF0ZSkuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcclxuXHRcdFx0KTtcclxuXHRcdFx0dmFsdWVzID0gc29ydEJ5KHZhbHVlcywgXCJkYXRlXCIpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcInZhbHVlczpcIiwgdmFsdWVzKTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGxldCByZXN1bHQgPSB0aGlzLmdldFRpbWVSYW5nZXMoXHJcblx0XHRcdFx0XHR2YWx1ZXMsXHJcblx0XHRcdFx0XHRlbmREYXRlLFxyXG5cdFx0XHRcdFx0dGltZVJhbmdlLFxyXG5cdFx0XHRcdFx0XCJkYXRlXCJcclxuXHRcdFx0XHQpOyAvLyDlkITkuKrpmLbmrrXnmoTmlbDmja5cclxuXHRcdFx0XHRsZXQgcmVzdWx0VG90YWwgPSB7fTsgLy8g5ZCE5Liq6Zi25q615oC75ZKMXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wIGluIHJlc3VsdCkge1xyXG5cdFx0XHRcdFx0cmVzdWx0VG90YWxbcHJvcF0gPSByZXN1bHRbcHJvcF0ucmVkdWNlKChhY2MsIGN1cikgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gYWNjICsgKGN1clt2YWx1ZUZpZWxkXSB8fCAwKTtcclxuXHRcdFx0XHRcdH0sIDApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcInJlc3VsdDpcIiwgcmVzdWx0KTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcInJlc3VsdFRvdGFsOlwiLCByZXN1bHRUb3RhbCk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGN1bXVsYXRpdmVTdW0gPSB7fTsgLy8g5ZCE5Liq6Zi25q6157Sv6K6h5ZKMXHJcblx0XHRcdFx0bGV0IHN1bSA9IDA7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzdWx0VG90YWwpKSB7XHJcblx0XHRcdFx0XHRzdW0gKz0gcmVzdWx0VG90YWxba2V5XTtcclxuXHRcdFx0XHRcdGN1bXVsYXRpdmVTdW1bYCR7a2V5fWBdID0gc3VtO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcImN1bXVsYXRpdmVTdW06XCIsIGN1bXVsYXRpdmVTdW0pO1xyXG5cclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY3VtdWxhdGl2ZVN1bSk7XHJcblx0XHRcdFx0bGV0IHR3ckxpc3QgPSBbXTtcclxuXHRcdFx0XHQvLyDpgY3ljobmr4/kuKTkuKrpmLbmrrUg6K6h566XVFdSXHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3Qga2V5MSA9IGtleXNbaV07XHJcblx0XHRcdFx0XHRjb25zdCBrZXkyID0ga2V5c1tpICsgMV07XHJcblxyXG5cdFx0XHRcdFx0Ly8g6K6h566X5Lik5Liq6Zi25q615LmL6Ze055qE6YCS5aKe6YePLCDlh7rmlbDkuI3og73kuLowXHJcblx0XHRcdFx0XHRpZiAoY3VtdWxhdGl2ZVN1bVtrZXkxXSAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGluY3JlbWVudCA9XHJcblx0XHRcdFx0XHRcdFx0Y3VtdWxhdGl2ZVN1bVtrZXkyXSAtIGN1bXVsYXRpdmVTdW1ba2V5MV07XHJcblx0XHRcdFx0XHRcdGxldCB0d3IgPSBpbmNyZW1lbnQgLyBjdW11bGF0aXZlU3VtW2tleTFdO1xyXG5cdFx0XHRcdFx0XHR0d3JMaXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdGRhdGU6IGtleTIsXHJcblx0XHRcdFx0XHRcdFx0dHdyOiB0d3IsXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyDorqHnrpdBdmVyYWdlIFRXUlxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwidHdyTGlzdDpcIiwgdHdyTGlzdCk7XHJcblx0XHRcdFx0bGV0IGF2ZXJhZ2VUV1IgPSB0aGlzLmNhbGN1bGF0ZUdyb3d0aFJhdGUoXHJcblx0XHRcdFx0XHR0d3JMaXN0Lm1hcCgoeCkgPT4geC50d3IpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcIuiuoeeul0F2ZXJhZ2UgVFdSOlwiLCBhdmVyYWdlVFdSKTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRbXHJcblx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVFdSTVREXCIsXHJcblx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVFdSUVREXCIsXHJcblx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVFdSWVREXCIsXHJcblx0XHRcdFx0XHRdLmluY2x1ZGVzKGFyZ3MuYWdncmVnYXRlVHlwZSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdC8vIFNNUDItMTY1MjAgVFdSIOaciC/lraMv5bm0XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0aXNOYU4oYXZlcmFnZVRXUikgfHwgYXZlcmFnZVRXUiA9PSBudWxsXHJcblx0XHRcdFx0XHRcdFx0PyBcIlwiXHJcblx0XHRcdFx0XHRcdFx0OiBOdW1iZXIoYXZlcmFnZVRXUik7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmIChpc05hTihhdmVyYWdlVFdSKSB8fCBhdmVyYWdlVFdSID09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvLyBTTVAyLTE2NjgzIFZBUiDljLrliIY5OSXlkow5NSVcclxuXHRcdFx0XHRcdFx0bGV0IFpTY29yZSA9IFtcclxuXHRcdFx0XHRcdFx0XHRcIkNhbGN1bGF0ZVZBUk1URF85OVwiLFxyXG5cdFx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVkFSUVREXzk5XCIsXHJcblx0XHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVWQVJZVERfOTlcIixcclxuXHRcdFx0XHRcdFx0XS5pbmNsdWRlcyhhcmdzLmFnZ3JlZ2F0ZVR5cGUpXHJcblx0XHRcdFx0XHRcdFx0PyAyLjMzXHJcblx0XHRcdFx0XHRcdFx0OiAxLjY1O1xyXG5cdFx0XHRcdFx0XHRpZiAodHdyTGlzdC5sZW5ndGggPCAyKSB7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IFNEID0gdGhpcy5jYWxjdWxhdGVTdGFuZGFyZERldmlhdGlvbihcclxuXHRcdFx0XHRcdFx0XHRcdHR3ckxpc3QubWFwKCh4KSA9PiB4LnR3cilcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiY2FsY3VsYXRlU3RhbmRhcmREZXZpYXRpb246XCIsIFNEKTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgVkFSID0gYXZlcmFnZVRXUiAtIFNEICogWlNjb3JlO1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBOdW1iZXIoVkFSKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcImFyZ3MudmFsdWU6XCIsIGFyZ3MudmFsdWUpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdO1xyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBhcmdzLmZpZWxkTmFtZSxcclxuXHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZmllbGRbMF0uZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBcIlAyXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vU01QMi0yNzAxXHJcblx0XHRpZiAoYXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZUlSUkFjdHVhbEF1ZGl0ZWRcIikge1xyXG5cdFx0XHRsZXQgTkFWQWRqID0gMDtcclxuXHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0ZWwuY29sTmFtZSA9PT1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0QWdncmVnYXRlVHlwZShcclxuXHRcdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdC8vU01QMi0yNzEzIG9ubHkganVkZ2UgZm9yIHRoaXMgZGF0YU1hcnQoR3Jvc3NOZXQpXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSA9PT0gXCJHcm9zc05ldFwiIHx8XHJcblx0XHRcdFx0dGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUgPT09XHJcblx0XHRcdFx0XHRcIkNvbWJpbmVkSW52ZXN0bWVudEZ1bmROQ29tcGFueUNhc2hmbG93XCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSkgPT09XHJcblx0XHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJncy5jZWxsU2V0c1tpXVtcIkFjdHVhbEF1ZGl0ZWROQVZcIl07XHJcblx0XHRcdFx0XHRpZiAoZGF0YS5hbW91bnQgIT0gMCkge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaChkYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9maWx0ZXIgdGhlIGRhdGEgYnkgdGhlIERhdGFUeXBlKEFjdHVhbCBSZXBvcnRlZCBBdWRpdGVkKVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRsZXQgYXJnc2RhdGEgPSBhcmdzLmNlbGxTZXRzLmZpbHRlcihcclxuXHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0ZWwuRGF0YVR5cGUgPT09IFwiQUNUVUFMX0FVRElURURcIiB8fFxyXG5cdFx0XHRcdFx0XHRlbC5EYXRhVHlwZSA9PT0gXCJSRVBPUlRFRFwiXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3NkYXRhLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3NkYXRhW2ldW1wiSVJSQW1vdW50XCJdLFxyXG5cdFx0XHRcdFx0XHRkYXRlOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJnc2RhdGFbaV1bXCJJUlJEYXRlXCJdKSA9PT1cclxuXHRcdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGFzT2ZEYXRlXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJnc2RhdGFbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJnc2RhdGFbaV1bXCJJUlJBZGpWYWx1ZVwiXTtcclxuXHRcdFx0XHRcdGlmIChkYXRhLmFtb3VudCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoTkFWQWRqID4gMC4wMDAxIHx8IE5BVkFkaiA8IC0wLjAwMDEpIHtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh7XHJcblx0XHRcdFx0XHRhbW91bnQ6IE5BVkFkaixcclxuXHRcdFx0XHRcdGRhdGU6IGFzT2ZEYXRlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlcyA9IHNvcnRCeSh2YWx1ZXMsIFwiZGF0ZVwiKTtcclxuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0bGV0IGd1ZXNzID0gMC4xO1xyXG5cdFx0XHRcdGNvbnN0IHN1bUFtb3VudCA9IHZhbHVlc1xyXG5cdFx0XHRcdFx0Lm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpXHJcblx0XHRcdFx0XHQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMCk7XHJcblx0XHRcdFx0aWYgKHN1bUFtb3VudCA8IDApIHtcclxuXHRcdFx0XHRcdGd1ZXNzID0gLTAuMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly9TTVAyLTIyNDkgZml4ZWQgdGhlIGJpZyBpcnIgaXNzdWVcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50ID09PSAwKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVJdGVtcyA9IHZhbHVlcy5zbGljZSgwLCB2YWx1ZXMubGVuZ3RoIC0gMSk7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRlKTtcclxuXHRcdFx0XHRcdGNvbnN0IGxhc3RJdGVtID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdGNvbnN0IG5hdkFkanVzdCA9IGxhc3RJdGVtLmFtb3VudDtcclxuXHRcdFx0XHRcdGNvbnN0IGxhdGVzdERhdGUgPSBsYXN0SXRlbS5kYXRlO1xyXG5cdFx0XHRcdFx0bGV0IGlyciA9XHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuRXhjZWxGb3JtdWxhcy5fQ2FsY3VsYXRlWGlycihcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0ZGF0ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0bmF2QWRqdXN0LFxyXG5cdFx0XHRcdFx0XHRcdGxhdGVzdERhdGVcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBpcnIgPT09IG51bGwgPyAwIDogaXJyO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdO1xyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBhcmdzLmZpZWxkTmFtZSxcclxuXHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZmllbGRbMF0uZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBcIlAyXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly9TTVAyLTM0MTFcclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlSVJSUmVwb3J0ZWRcIikge1xyXG5cdFx0XHRsZXQgTkFWQWRqID0gMDtcclxuXHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0ZWwuY29sTmFtZSA9PT1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0QWdncmVnYXRlVHlwZShcclxuXHRcdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSA9PT0gXCJHcm9zc05ldFwiIHx8XHJcblx0XHRcdFx0dGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUgPT09XHJcblx0XHRcdFx0XHRcIkNvbWJpbmVkSW52ZXN0bWVudEZ1bmROQ29tcGFueUNhc2hmbG93XCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSkgPT09XHJcblx0XHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJncy5jZWxsU2V0c1tpXVtcIlJlcG9ydGVkTkFWXCJdO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0YW1vdW50OiBhcmdzLmNlbGxTZXRzW2ldW1wiSVJSQW1vdW50XCJdLFxyXG5cdFx0XHRcdFx0XHRkYXRlOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtcIklSUkRhdGVcIl0pID09PVxyXG5cdFx0XHRcdFx0XHRcdFwiSW52YWxpZCBkYXRlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0TkFWQWRqICs9IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBZGpWYWx1ZVwiXTtcclxuXHRcdFx0XHRcdGlmIChkYXRhLmFtb3VudCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoTkFWQWRqID4gMC4wMDAxIHx8IE5BVkFkaiA8IC0wLjAwMDEpIHtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh7XHJcblx0XHRcdFx0XHRhbW91bnQ6IE5BVkFkaixcclxuXHRcdFx0XHRcdGRhdGU6IGFzT2ZEYXRlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlcyA9IHNvcnRCeSh2YWx1ZXMsIFwiZGF0ZVwiKTtcclxuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0bGV0IGd1ZXNzID0gMC4xO1xyXG5cdFx0XHRcdGNvbnN0IHN1bUFtb3VudCA9IHZhbHVlc1xyXG5cdFx0XHRcdFx0Lm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpXHJcblx0XHRcdFx0XHQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMCk7XHJcblx0XHRcdFx0aWYgKHN1bUFtb3VudCA8IDApIHtcclxuXHRcdFx0XHRcdGd1ZXNzID0gLTAuMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly9TTVAyLTIyNDkgZml4ZWQgdGhlIGJpZyBpcnIgaXNzdWVcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50ID09PSAwKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVJdGVtcyA9IHZhbHVlcy5zbGljZSgwLCB2YWx1ZXMubGVuZ3RoIC0gMSk7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRlKTtcclxuXHRcdFx0XHRcdGNvbnN0IGxhc3RJdGVtID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdGNvbnN0IG5hdkFkanVzdCA9IGxhc3RJdGVtLmFtb3VudDtcclxuXHRcdFx0XHRcdGNvbnN0IGxhdGVzdERhdGUgPSBsYXN0SXRlbS5kYXRlO1xyXG5cdFx0XHRcdFx0bGV0IGlyciA9XHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuRXhjZWxGb3JtdWxhcy5fQ2FsY3VsYXRlWGlycihcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0ZGF0ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0bmF2QWRqdXN0LFxyXG5cdFx0XHRcdFx0XHRcdGxhdGVzdERhdGVcclxuXHRcdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXJyID09PSBudWxsID8gMCA6IGlycjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IDA7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlICYmXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXTtcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogYXJncy5maWVsZE5hbWUsXHJcblx0XHRcdFx0XHRmb3JtYXQ6XHJcblx0XHRcdFx0XHRcdGZpZWxkLmxlbmd0aCA+IDBcclxuXHRcdFx0XHRcdFx0XHQ/IGZpZWxkWzBdLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0WzBdLmZvcm1hdENoZWNrZWRcclxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZHBcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdDogXCJQMlwiLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZU11bHRpcGxlXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZVBJQ1wiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVEUElcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlVFZQSVwiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVSVlBJXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZU1BY3R1YWxBdWRpdGVkXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZU1SZXBvcnRlZFwiXHJcblx0XHQpIHtcclxuXHRcdFx0bGV0IHRvdGFsTnVtZXJhdG9yID0gMDtcclxuXHRcdFx0bGV0IHRvdGFsRGVub21pbmF0b3IgPSAwO1xyXG5cdFx0XHRsZXQgbnVtZXJhdG9yTmFtZTtcclxuXHRcdFx0bGV0IGRlbm9taW5hdG9yTmFtZTtcclxuXHRcdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdGVsLmNvbE5hbWUgPT09XHJcblx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZVR5cGUoXHJcblx0XHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGNvbnN0IGZvcm11bGFBcnJheSA9IGZpZWxkWzBdLmZvcm11bGEuc3BsaXQoXCIvXCIpO1xyXG5cdFx0XHRcdG51bWVyYXRvck5hbWUgPSBmb3JtdWxhQXJyYXlbMF07XHJcblx0XHRcdFx0ZGVub21pbmF0b3JOYW1lID0gZm9ybXVsYUFycmF5WzFdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdHRvdGFsTnVtZXJhdG9yICs9IGFyZ3MuY2VsbFNldHNbal1bbnVtZXJhdG9yTmFtZV07XHJcblx0XHRcdFx0dG90YWxEZW5vbWluYXRvciArPSBhcmdzLmNlbGxTZXRzW2pdW2Rlbm9taW5hdG9yTmFtZV07XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRvdGFsRGVub21pbmF0b3IgIT09IDApIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gdG90YWxOdW1lcmF0b3IgLyB0b3RhbERlbm9taW5hdG9yO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlICYmXHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW1xyXG5cdFx0XHRcdFx0XHRhcmdzLmZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtYXQ6XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdE11bHRpcGxlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0TXVsdGlwbGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogXCIjIyMwLjAwJ3gnXCIsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiRmlyc3RcIiB8fCBhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiTGFzdFwiKSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSB0aGlzLmNhbGN1bGF0ZWRGaXN0TGFzdChcclxuXHRcdFx0XHRhcmdzLFxyXG5cdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSxcclxuXHRcdFx0XHRhcmdzLmZpZWxkTmFtZVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNvdW50XCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkRpc3RpbmN0Q291bnRcIlxyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChhcmdzLnZhbHVlKSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUudG9GaXhlZCgyKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0IWFyZ3MudmFsdWUgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gMCAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBmYWxzZSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBcImZhbHNlXCJcclxuXHRcdCkge1xyXG5cdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHR9XHJcblx0XHQvLyDmlrDlu7pwaXZvdCB0YWJsZSwg6L+Y5rKh5pyJ6K6+572ucm93LCDpgInkuoZjb2x1bW7kuYvlkI5ncmFuZHRvdGFs5Lya5pyJ5YC8XHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiICYmXHJcblx0XHRcdCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzLmxlbmd0aFxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0Ly9TTVAyLTI4ODlcclxuXHRcdGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcInN1YlRvdGFsXCIpIHtcclxuXHRcdFx0Y29uc3QgdmFsdWVGaWVsZF9kYXRhID0gdGhpcy5jb25maWcueWF4aXMuc2VyaWVzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGFyZ3MuZmllbGROYW1lXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGFbMF0uc2hvd1N1YlRvdGFscyA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHRcdFx0YXJncy5za2lwRm9ybWF0dGluZyA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIpIHtcclxuXHRcdFx0Y29uc3QgdmFsdWVGaWVsZF9kYXRhID0gdGhpcy5jb25maWcueWF4aXMuc2VyaWVzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGFyZ3MuZmllbGROYW1lXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGFbMF0uc2hvd0dyYW5kVG90YWxzID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIFNNUDItMzQxNiBzdGFydFxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnplcm9Gb3JtYXREYXRhLmhnTGlzdC5pbmNsdWRlcyhhcmdzLmZpZWxkTmFtZSkgJiZcclxuXHRcdFx0YXJncy52YWx1ZSA9PT0gMFxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSBcIi1cIjtcclxuXHRcdFx0YXJncy5za2lwRm9ybWF0dGluZyA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuZW1wdHlMaXN0LmluY2x1ZGVzKGFyZ3MuZmllbGROYW1lKSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlID09PSAwXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdGFyZ3Muc2tpcEZvcm1hdHRpbmcgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLm1pbGxpb25GaWVsZHMuaW5jbHVkZXMoYXJncy5maWVsZE5hbWUpICYmXHJcblx0XHRcdCFpc05hTihOdW1iZXIoYXJncy52YWx1ZSkpICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IDAgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gXCJcIiAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBudWxsXHJcblx0XHQpIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCIgJiZcclxuXHRcdFx0XHRhcmdzLnJvd0NlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGlmICghdGhpcy50b3RhbEZvcm1hdHRlZFthcmdzLmZpZWxkTmFtZV0pIHtcclxuXHRcdFx0XHRcdHRoaXMudG90YWxGb3JtYXR0ZWRbYXJncy5maWVsZE5hbWVdID0gdHJ1ZTtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLnZhbHVlIC8gMTAwMDAwMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUgLyAxMDAwMDAwO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU01QMi0yNDg2ICYgcGVyY2VudE51beeahGZvcm1hdOmXrumimFxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnBlcmNlbnROdW1GaWVsZHMubGVuZ3RoICYmXHJcblx0XHRcdHRoaXMucGVyY2VudE51bUZpZWxkcy5pbmNsdWRlcyhhcmdzLmZpZWxkTmFtZSkgJiZcclxuXHRcdFx0IWlzTmFOKE51bWJlcihhcmdzLnZhbHVlKSkgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gMCAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBcIlwiICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IG51bGxcclxuXHRcdCkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5jb2x1bW5DZWxsVHlwZSA9PSBcImdyYW5kVG90YWxcIiAmJlxyXG5cdFx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnRvdGFsRm9ybWF0dGVkW2FyZ3MuZmllbGROYW1lXSkge1xyXG5cdFx0XHRcdFx0dGhpcy50b3RhbEZvcm1hdHRlZFthcmdzLmZpZWxkTmFtZV0gPSB0cnVlO1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUgLyAxMDA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLnZhbHVlIC8gMTAwO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiICYmXHJcblx0XHRcdCFpc05hTihOdW1iZXIoYXJncy52YWx1ZSkpICYmXHJcblx0XHRcdCF0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdLmZvcm1hdFxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSBOdW1iZXIoYXJncy52YWx1ZSkudG9GaXhlZCgyKTtcclxuXHRcdH1cclxuXHRcdC8vIFNNUDItMzQxNiBlbmRcclxuXHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYWxjdWxhdGVkRmlzdExhc3QoYXJncywgYWdncmVnYXRlVHlwZSwgZmllbGROYW1lKSB7XHJcblx0XHRpZiAoIWFyZ3Mucm93LmFjdHVhbFRleHQpIGFyZ3Mucm93LmFjdHVhbFRleHQgPSBhcmdzLnJvdy5mb3JtYXR0ZWRUZXh0O1xyXG5cdFx0aWYgKCFhcmdzLmNvbHVtbi5hY3R1YWxUZXh0KVxyXG5cdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ID0gYXJncy5jb2x1bW4uZm9ybWF0dGVkVGV4dDtcclxuXHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBmaWVsZE5hbWVcclxuXHRcdClbMF07XHJcblx0XHRpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJ2YWx1ZVwiICYmICFhcmdzLnJvdy5oYXNDaGlsZCkge1xyXG5cdFx0XHRpZiAoYXJncy5jZWxsU2V0c1swXSkge1xyXG5cdFx0XHRcdGlmIChhZ2dyZWdhdGVUeXBlID09PSBcIkZpcnN0XCIpIHtcclxuXHRcdFx0XHRcdGZvciAoXHJcblx0XHRcdFx0XHRcdGxldCBmaXJzdEluZGV4ID0gMDtcclxuXHRcdFx0XHRcdFx0Zmlyc3RJbmRleCA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRmaXJzdEluZGV4KytcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT1cclxuXHRcdFx0XHRcdFx0XHRcdDEgJiZcclxuXHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwic3RyaW5nXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnZhcmNoYXJcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoXHJcblx0XHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlW2FyZ3Mucm93LnJvd0luZGV4XTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IG9iaiA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5pc0dyYW5kU3VtXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVswXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob2JqKSBhcmdzLnZhbHVlID0gb2JqLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBudWxsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy5jZWxsU2V0c1tmaXJzdEluZGV4XVtmaWVsZE5hbWVdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm51bWJlclwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJtdWx0aXBsZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnROdW1cIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoYXJncy52YWx1ZSAhPSBudWxsKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5wYmYudGltZShhcmdzLnZhbHVlKSA+IFwiMTkwMC0wMS0wMVwiKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhcmdzLnZhbHVlKSBicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0ZVR5cGUgPT09IFwiTGFzdFwiKSB7XHJcblx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRsZXQgbGFzdEluZGV4ID0gYXJncy5jZWxsU2V0cy5sZW5ndGggLSAxO1xyXG5cdFx0XHRcdFx0XHRsYXN0SW5kZXggPj0gMDtcclxuXHRcdFx0XHRcdFx0bGFzdEluZGV4LS1cclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT1cclxuXHRcdFx0XHRcdFx0XHRcdDEgJiZcclxuXHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwic3RyaW5nXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnZhcmNoYXJcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoXHJcblx0XHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlW2FyZ3Mucm93LnJvd0luZGV4XTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IG9iaiA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5pc0dyYW5kU3VtXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVswXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob2JqKSBhcmdzLnZhbHVlID0gb2JqLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBudWxsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy5jZWxsU2V0c1tsYXN0SW5kZXhdW2ZpZWxkTmFtZV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm51bWJlclwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJtdWx0aXBsZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnROdW1cIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoYXJncy52YWx1ZSAhPSBudWxsKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5wYmYudGltZShhcmdzLnZhbHVlKSA+IFwiMTkwMC0wMS0wMVwiKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhcmdzLnZhbHVlKSBicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnVtYmVyXCIgfHxcclxuXHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibXVsdGlwbGVcIiB8fFxyXG5cdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwicGVyY2VudE51bVwiXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0aWYgKCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdCFOdW1iZXIodGhpcy5ncmFuZFRvdGFsc1tmaWVsZE5hbWVdKSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0aXNOYU4oTnVtYmVyKHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXSkpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV0gPSAwO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAoYXJncy5hZ2dyZWdhdGVUeXBlICE9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV0gKz0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PSAxXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFwicm93XCIgKyBhcmdzLnJvdy5hY3R1YWxUZXh0ICsgZmllbGROYW1lIOihqOekuihjZWxsOiBhcmdzLnJvd0NlbGxUeXBlID09PSBcInZhbHVlXCIgJiYgYXJncy5jb2x1bW5DZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIpXHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0IU51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICsgYXJncy5yb3cuYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHQpIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRpc05hTihcclxuXHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArIGFyZ3Mucm93LmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF0gPSAwO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArIGFyZ3Mucm93LmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRdICs9IE51bWJlcihhcmdzLnZhbHVlKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gXCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWUg6KGo56S6KGNlbGw6IGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiICYmIGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT09IFwidmFsdWVcIilcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHQhTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0KSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0aXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRdID0gMDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XSArPSBOdW1iZXIoYXJncy52YWx1ZSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJzdWJUb3RhbFwiIHx8IGFyZ3Mucm93Lmhhc0NoaWxkKSB7XHJcblx0XHRcdGNvbnN0IGRhdGFUeXBlID0gZmllbGQuZGF0YVR5cGU7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRkYXRhVHlwZSA9PT0gXCJzdHJpbmdcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09PSBcIm52YXJjaGFyXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRsZXQgdmFsdWUgPSAwO1xyXG5cdFx0XHRcdGxldCBjaGlsZEhlYWRlcnMgPSBbXTtcclxuXHRcdFx0XHRpZiAoYWdncmVnYXRlVHlwZSA9PT0gXCJGaXJzdFwiKSB7XHJcblx0XHRcdFx0XHRsZXQgZ3JvdXBOYW1lQXJyYXlzID0gW107XHJcblx0XHRcdFx0XHRsZXQgcm93cyA9IHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3M7XHJcblx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRsZXQgaW5kZXggPSBhcmdzLnJvdy5sZXZlbDtcclxuXHRcdFx0XHRcdFx0aW5kZXggPCByb3dzLmxlbmd0aDtcclxuXHRcdFx0XHRcdFx0aW5kZXgrK1xyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5wdXNoKHJvd3NbaW5kZXhdLm5hbWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0bGV0IGhlYWRlciA9IGdyb3VwTmFtZUFycmF5c1xyXG5cdFx0XHRcdFx0XHRcdC5tYXAoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGFyZ3MuY2VsbFNldHNbaV1bbmFtZV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFyZ3MuY2VsbFNldHNbaV1bbmFtZV07XHJcblx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHQuam9pbihcIi1cIik7XHJcblx0XHRcdFx0XHRcdGlmICghKGNoaWxkSGVhZGVycyBhcyBhbnkpLmluY2x1ZGVzKGhlYWRlcikpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZmlsdGVyT2JqOiBhbnkgPSB7fTtcclxuXHRcdFx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMubWFwKFxyXG5cdFx0XHRcdFx0XHRcdFx0KG5hbWUsIHgpID0+IChmaWx0ZXJPYmpbbmFtZV0gPSB2YWx1ZXNbeF0pXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgX0NlbGxTZXRzID0gX2ZpbHRlcihhcmdzLmNlbGxTZXRzLCBmaWx0ZXJPYmopO1xyXG5cdFx0XHRcdFx0XHRcdGNoaWxkSGVhZGVycy5wdXNoKGhlYWRlcik7XHJcblx0XHRcdFx0XHRcdFx0dmFsdWUgKz0gTnVtYmVyKF9DZWxsU2V0c1swXVtmaWVsZE5hbWVdKSB8fCAwO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChhZ2dyZWdhdGVUeXBlID09PSBcIkxhc3RcIikge1xyXG5cdFx0XHRcdFx0bGV0IGdyb3VwTmFtZUFycmF5cyA9IFtdO1xyXG5cdFx0XHRcdFx0bGV0IHJvd3MgPSB0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzO1xyXG5cdFx0XHRcdFx0Zm9yIChcclxuXHRcdFx0XHRcdFx0bGV0IGluZGV4ID0gYXJncy5yb3cubGV2ZWw7XHJcblx0XHRcdFx0XHRcdGluZGV4IDwgcm93cy5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdGluZGV4KytcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMucHVzaChyb3dzW2luZGV4XS5uYW1lKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSBhcmdzLmNlbGxTZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcblx0XHRcdFx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0bGV0IGhlYWRlciA9IGdyb3VwTmFtZUFycmF5c1xyXG5cdFx0XHRcdFx0XHRcdC5tYXAoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGFyZ3MuY2VsbFNldHNbaV1bbmFtZV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFyZ3MuY2VsbFNldHNbaV1bbmFtZV07XHJcblx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHQuam9pbihcIi1cIik7XHJcblx0XHRcdFx0XHRcdGlmICghKGNoaWxkSGVhZGVycyBhcyBhbnkpLmluY2x1ZGVzKGhlYWRlcikpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZmlsdGVyT2JqOiBhbnkgPSB7fTtcclxuXHRcdFx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMubWFwKFxyXG5cdFx0XHRcdFx0XHRcdFx0KG5hbWUsIHgpID0+IChmaWx0ZXJPYmpbbmFtZV0gPSB2YWx1ZXNbeF0pXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgX0NlbGxTZXRzID0gX2ZpbHRlcihhcmdzLmNlbGxTZXRzLCBmaWx0ZXJPYmopO1xyXG5cdFx0XHRcdFx0XHRcdGNoaWxkSGVhZGVycy5wdXNoKGhlYWRlcik7XHJcblx0XHRcdFx0XHRcdFx0dmFsdWUgKz1cclxuXHRcdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0X0NlbGxTZXRzW19DZWxsU2V0cy5sZW5ndGggLSAxXVtmaWVsZE5hbWVdXHJcblx0XHRcdFx0XHRcdFx0XHQpIHx8IDA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICE9PSBcIkdyYW5kIFRvdGFsXCIpXHJcblx0XHRcdFx0XHR0aGlzLmNvbHVtblRleHRzLnB1c2goYXJncy5jb2x1bW4uYWN0dWFsVGV4dCk7XHJcblxyXG5cdFx0XHRcdGlmICghdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0IU51bWJlcih0aGlzLnN1YlRvdGFsc1tmaWVsZE5hbWVdKSB8fFxyXG5cdFx0XHRcdFx0XHRpc05hTihOdW1iZXIodGhpcy5zdWJUb3RhbHNbZmllbGROYW1lXSkpXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbZmllbGROYW1lXSA9IDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tmaWVsZE5hbWVdICs9IE51bWJlcih2YWx1ZSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoID09IDFcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0IU51bWJlcihcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHQpIHx8XHJcblx0XHRcdFx0XHRcdGlzTmFOKFxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdF0gPSAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRdICs9IE51bWJlcih2YWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIC0tLT4gYWxsRGF0YVZhbHVl5Lit6L+Z5Liq5Y2V5YWD5qC855qE5YC85LiN5q2j56GuXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0YXJncy5jb2x1bW5DZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIgJiZcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoID09IDFcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmFsbERhdGFWYWx1ZSAmJiB0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICsgXCJHcmFuZCBUb3RhbFwiICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY29sdW1uVGV4dHMgPSB1bmlxQnkodGhpcy5jb2x1bW5UZXh0cywgKGVsKSA9PiBlbCk7XHJcblx0XHRcdFx0XHRcdGxldCB2YWwgPSAwO1xyXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uVGV4dHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBlbGVtZW50ID0gdGhpcy5jb2x1bW5UZXh0c1tpXTtcclxuXHRcdFx0XHRcdFx0XHR2YWwgKz1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICsgZWxlbWVudCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdmFsO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiKSB7XHJcblx0XHRcdGNvbnN0IGRhdGFUeXBlID0gZmllbGQuZGF0YVR5cGU7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcInN0cmluZ1wiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT0gXCJudmFyY2hhclwiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcImRhdGV0aW1lXCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuYWxsRGF0YVZhbHVlICYmIHRoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRcdGlmIChyb3dPYmpzKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianNBcnIgPSBKU09OLnBhcnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0SlNPTi5zdHJpbmdpZnkocm93T2JqcylcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBvYmpBcnIgPSByb3dPYmpzQXJyLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuYWN0dWFsVGV4dCA9PSBmaWVsZE5hbWUgJiYgZWwuaXNHcmFuZFN1bVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKG9iakFyciAmJiBvYmpBcnIubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gb2JqQXJyW29iakFyci5sZW5ndGggLSAxXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXModGhpcy5ncmFuZFRvdGFscykuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSB0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmIChhcmdzLmNvbHVtbkNlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIikge1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5hbGxEYXRhVmFsdWUgJiYgdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzQXJyID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0SlNPTi5zdHJpbmdpZnkocm93T2JqcylcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgb2JqQXJyID0gcm93T2Jqc0Fyci5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmlzR3JhbmRTdW1cclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAob2JqQXJyICYmIG9iakFyci5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b2JqQXJyW29iakFyci5sZW5ndGggLSAxXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKHRoaXMuZ3JhbmRUb3RhbHMpLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmFsbERhdGFWYWx1ZSAmJiB0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZVt0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0bGV0IG9iakFyciA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5pc0dyYW5kU3VtICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsLmNvbHVtbkhlYWRlcnMgPT0gYXJncy5jb2x1bW4uYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKG9iakFyciAmJiBvYmpBcnIubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gb2JqQXJyW29iakFyci5sZW5ndGggLSAxXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXModGhpcy5ncmFuZFRvdGFscykuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHRoaXMuZm9ybWF0VmFsKGFyZ3MsIGZpZWxkTmFtZSk7XHJcblx0XHRyZXR1cm4gYXJncy52YWx1ZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZm9ybWF0VmFsKGFyZ3MsIGZpZWxkTmFtZSkge1xyXG5cdFx0dGhpcy5jb25maWdGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHRcdFx0aWYgKGZpZWxkLmNvbE5hbWUgPT0gZmllbGROYW1lKSB7XHJcblx0XHRcdFx0c3dpdGNoIChmaWVsZC5kYXRhVHlwZSkge1xyXG5cdFx0XHRcdFx0Y2FzZSBcImRhdGVcIjpcclxuXHRcdFx0XHRcdGNhc2UgXCJkYXRldGltZVwiOlxyXG5cdFx0XHRcdFx0XHRpZiAoYXJncy52YWx1ZSkgYXJncy52YWx1ZSA9IG5ldyBEYXRlKGFyZ3MudmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldGV4Y2x1ZGVGaWVsZHMoZmllbGRzLCBkYXRhKSB7XHJcblx0XHRsZXQgbmFtZWFycmF5ID0gW107XHJcblx0XHRsZXQgYXJyYXkgPSBbXTtcclxuXHRcdGZvciAobGV0IHByb3AgaW4gZGF0YSkge1xyXG5cdFx0XHRhcnJheS5wdXNoKHByb3ApO1xyXG5cdFx0fVxyXG5cdFx0Zm9yIChsZXQgaXRlbSBvZiBmaWVsZHMpIHtcclxuXHRcdFx0bmFtZWFycmF5LnB1c2goaXRlbS5jb2xOYW1lKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuZXhjbHVkZUZpZWxkcyA9IGRpZmZlcmVuY2VXaXRoKGFycmF5LCBuYW1lYXJyYXkpO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLmV4Y2x1ZGVGaWVsZHMubGVuZ3RoICYmXHJcblx0XHRcdHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3MgJiZcclxuXHRcdFx0dGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncy5sZW5ndGhcclxuXHRcdCkge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXhjbHVkZUZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IGVsID0gdGhpcy5leGNsdWRlRmllbGRzW2ldO1xyXG5cdFx0XHRcdGlmIChzdGFydHNXaXRoKGVsLCB0aGlzLmNvbmZpZy5ncm91cFNldHRpbmdzWzBdLm5hbWUgKyBcIl9cIikpIHtcclxuXHRcdFx0XHRcdHRoaXMuZXhjbHVkZUZpZWxkcy5zcGxpY2UoaSwgMSk7XHJcblx0XHRcdFx0XHRpLS07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEluZm8oKSB7XHJcblx0XHR0aGlzLmRhdGVQaXBlRm9ybWF0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJkYXRlUGlwZVwiKTtcclxuXHRcdHRoaXMudHJhbnNsYXRpb24gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidHJhbnNsYXRpb25cIikpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIG9uRmllbGREcm9wKGFyZ3M6IEZpZWxkRHJvcEV2ZW50QXJncykge1xyXG5cdFx0dGhpcy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzID0gWy4uLmFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlc107XHJcblx0XHQvL2NoYW5nZSB0aGUgY2FsY3VhbHRlRmllbGQgbWV0aG9kIHVzZSB0aGUgY29ycmVzcG9uZGluZyBjYWxjdWxhdGVcclxuXHRcdGNvbnN0IGNhbGN1YWx0ZUZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGFyZ3MuZmllbGROYW1lICYmIGVsLmlzQ2FsY3VsYXRlZEZpZWxkXHJcblx0XHQpO1xyXG5cdFx0aWYgKGNhbGN1YWx0ZUZpZWxkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0YXJncy5kcm9wRmllbGQudHlwZSA9XHJcblx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRDYWxjdWxhdGVNZXRob2QoXHJcblx0XHRcdFx0XHRjYWxjdWFsdGVGaWVsZFswXS5jb2xOYW1lXHJcblx0XHRcdFx0KSBhcyBhbnk7XHJcblx0XHRcdGFyZ3MuZHJvcEZpZWxkLmNhcHRpb24gPSBhcmdzLmRyb3BGaWVsZC5jYXB0aW9uXHJcblx0XHRcdFx0LnJlcGxhY2UoXCJDYWxjdWxhdGVcIiwgXCJcIilcclxuXHRcdFx0XHQudHJpbSgpO1xyXG5cdFx0fVxyXG5cdFx0Zm9yIChcclxuXHRcdFx0bGV0IGkgPSAwO1xyXG5cdFx0XHRpIDwgYXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3MubGVuZ3RoO1xyXG5cdFx0XHRpKytcclxuXHRcdCkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3NbaV0ubmFtZSA9PT1cclxuXHRcdFx0XHRcdGFyZ3MuZmllbGROYW1lICYmXHJcblx0XHRcdFx0YXJncy5kcm9wQXhpcyA9PT0gXCJcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5ncy5zcGxpY2UoaSwgMSk7XHJcblx0XHRcdFx0dGhpcy5maWx0ZXJTZXR0aW5ncyA9IGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLmZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDYWxjdWxhdGVkIGZpZWxk5LqL5Lu277ya5Yib5bu6XHJcblx0cHVibGljIGNhbGN1bGF0ZWRGaWVsZENyZWF0ZShhcmdzOiBDYWxjdWxhdGVkRmllbGRDcmVhdGVFdmVudEFyZ3MpIHtcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5jYWxjdWxhdGVkRmllbGQubmFtZSAhPT0gXCJcIiAmJlxyXG5cdFx0XHRhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lLnRyaW0oKSAhPT0gXCJcIlxyXG5cdFx0KSB7XHJcblx0XHRcdGxldCBpbmRleCA9XHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLmZpbmRJbmRleChcclxuXHRcdFx0XHRcdChlbCkgPT4gZWwubmFtZSA9PT0gYXJncy5jYWxjdWxhdGVkRmllbGQubmFtZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGlmIChpbmRleCAhPT0gLTEpIHtcclxuXHRcdFx0XHRpZiAoYXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybWF0U3RyaW5nID09PSBcIlwiKSB7XHJcblx0XHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3NbXHJcblx0XHRcdFx0XHRcdGluZGV4XHJcblx0XHRcdFx0XHRdLmZvcm1hdFN0cmluZyA9IFwiTjJcIjtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzW1xyXG5cdFx0XHRcdFx0XHRpbmRleFxyXG5cdFx0XHRcdFx0XS5mb3JtYXRTdHJpbmcgPSBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtYXRTdHJpbmc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtYXRTdHJpbmcgPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm1hdFN0cmluZyA9IFwiTjJcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8g56e76Zmk6YeN5aSNXHJcblx0XHRcdGxldCBmSW5kZXggPSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMuZmluZEluZGV4KFxyXG5cdFx0XHRcdChmKSA9PiBmLm5hbWUgPT09IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLm5hbWVcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKGZJbmRleCA+IC0xKSB7XHJcblx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLnNwbGljZShmSW5kZXgsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIOWMuemFjei/kOeul+espiBGaXJzdCB8fCBMYXN0XHJcblx0XHRcdGxldCBmb3JtdWxhU3RyID0gYXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybXVsYTtcclxuXHRcdFx0bGV0IHJlZzEgPSAvXCJGaXJzdFxcKCguKz8pXFwpXCIvZztcclxuXHRcdFx0bGV0IHJlZzIgPSAvXCJMYXN0XFwoKC4rPylcXClcIi9nO1xyXG5cdFx0XHRpZiAocmVnMS50ZXN0KGZvcm11bGFTdHIpIHx8IHJlZzIudGVzdChmb3JtdWxhU3RyKSkge1xyXG5cdFx0XHRcdC8vIOWIpOaWreaYr+WQpuWtmOWcqEZpcnN0IHx8IExhc3Qg6KGo6L6+5byPXHJcblx0XHRcdFx0bGV0IG1hdGNoRmlyc3RGaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIkZpcnN0XFwoKC4rPylcXClcIi9nKSxcclxuXHRcdFx0XHRcdChtKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hTdHI6IG1bMF0sXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hXb3JkOiBtWzFdLFxyXG5cdFx0XHRcdFx0XHRcdHJlcGxhY2VWYWx1ZTogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRtYXRjaE1ldGhvZDogXCJGaXJzdFwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoTGFzdEZpZWxkcyA9IEFycmF5LmZyb20oXHJcblx0XHRcdFx0XHRmb3JtdWxhU3RyW1wibWF0Y2hBbGxcIl0oL1wiTGFzdFxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiTGFzdFwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoTWF4RmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJNYXhcXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIk1heFwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoTWluRmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJNaW5cXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIk1pblwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoU3VtRmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJTdW1cXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIlN1bVwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoQXZnRmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJBdmdcXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIkF2Z1wiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0bWF0Y2hGaXJzdEZpZWxkcy5ldmVyeSgoeCkgPT5cclxuXHRcdFx0XHRcdFx0dGhpcy5hbGxvd2VkQ2FsY3VsYXRlZEZpZWxkcy5pbmNsdWRlcyh4Lm1hdGNoV29yZClcclxuXHRcdFx0XHRcdCkgJiZcclxuXHRcdFx0XHRcdG1hdGNoTGFzdEZpZWxkcy5ldmVyeSgoeCkgPT5cclxuXHRcdFx0XHRcdFx0dGhpcy5hbGxvd2VkQ2FsY3VsYXRlZEZpZWxkcy5pbmNsdWRlcyh4Lm1hdGNoV29yZClcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdC8vIOWIpOaWrUZpcnN05ZKMTGFzdOihqOi+vuW8j+WGheeahOWtl+auteaYr+WQpuWQiOazlVxyXG5cdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtdWxhOiBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtdWxhLFxyXG5cdFx0XHRcdFx0XHRtYXRjaEZpZWxkczogW1xyXG5cdFx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaEZpcnN0RmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoTGFzdEZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaE1heEZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaE1pbkZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaFN1bUZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaEF2Z0ZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0Z3JhbmRUb3RhbDogMCxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0bGV0IGZpZWxkTmFtZSA9IChcclxuXHRcdFx0XHRcdFx0Zm9ybXVsYVN0ci5zcGxpdChcIkZpcnN0KFwiKVsxXSB8fFxyXG5cdFx0XHRcdFx0XHRmb3JtdWxhU3RyLnNwbGl0KFwiTGFzdChcIilbMV1cclxuXHRcdFx0XHRcdCkuc3BsaXQoXCIpXCIpWzBdO1xyXG5cdFx0XHRcdFx0YXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybXVsYSA9XHJcblx0XHRcdFx0XHRcdFwiJ1xcXCJcIiArIFwiU3VtKFwiICsgZmllbGROYW1lICsgJylcIj0nICsgZm9ybXVsYVN0ciArIFwiJ1wiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ2FsY3VsYXRlZCBmaWVsZOS6i+S7tu+8muWujOaIkFxyXG5cdHB1YmxpYyBhY3Rpb25Db21wbGV0ZShhcmdzKSB7XHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3MuYWN0aW9uTmFtZSA9PT0gXCJGaWVsZCBhZ2dyZWdhdGVkXCIgfHxcclxuXHRcdFx0YXJncy5hY3Rpb25OYW1lID09PSBcIkZpZWxkIGxpc3QgY2xvc2VkXCJcclxuXHRcdCkge1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZXMgPSBbXHJcblx0XHRcdFx0Li4uYXJncy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzLFxyXG5cdFx0XHRdO1xyXG5cdFx0XHR0aGlzLnNldFZhbHVlSXRlbURhdGEoKTtcclxuXHRcdH1cclxuXHRcdGlmIChhcmdzLmFjdGlvbk5hbWUgPT0gXCJGaWVsZCByZW1vdmVkXCIpIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGFyZ3MuZmllbGRJbmZvICYmXHJcblx0XHRcdFx0YXJncy5maWVsZEluZm8uZmllbGRJdGVtICYmXHJcblx0XHRcdFx0YXJncy5maWVsZEluZm8uZmllbGRJdGVtLnR5cGUgPT0gXCJDYWxjdWxhdGVkRmllbGRcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRsZXQgZmllbGQgPSBhcmdzLmZpZWxkSW5mby5maWVsZE5hbWU7XHJcblx0XHRcdFx0Ly8gUmVtb3ZlIHRoZSBkZWxldGVkIGNhbGN1bGF0ZWQgZmllbGQgZnJvbSBhbiBzdG9yZWQgYXJyYXkuXHJcblx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzID1cclxuXHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5maWx0ZXIoZnVuY3Rpb24gKG9iaikge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gb2JqLm5hbWUgIT09IGZpZWxkO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIENhbGN1bGF0ZWQgZmllbGTkuovku7bvvJrlvIDlp4tcclxuXHRwdWJsaWMgYWN0aW9uQmVnaW4oYXJncykge1xyXG5cdFx0aWYgKGFyZ3MuYWN0aW9uTmFtZSA9PT0gXCJFZGl0IGNhbGN1bGF0ZWQgZmllbGRcIikge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lICYmXHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5maWVsZExpc3RbXHJcblx0XHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lXHJcblx0XHRcdFx0XHRdXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5maWVsZExpc3RbXHJcblx0XHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lXHJcblx0XHRcdFx0XHRdLmZvcm11bGEgPSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNbaV0uZm9ybXVsYTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmVzaXplU3RvcChhcmdzKSB7XHJcblx0XHRpZiAodGhpcy5jb25maWcuY29sdW1uc1dpZHRoKSB7XHJcblx0XHRcdGNvbnN0IGhlYWRlcl9maWVsZCA9IHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aC5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PiBlbC5oZWFkZXJUZXh0ID09PSBhcmdzLmNvbHVtbi5oZWFkZXJUZXh0XHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChoZWFkZXJfZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGhlYWRlcl9maWVsZFswXS53aWR0aCA9IHBhcnNlSW50KGFyZ3MuY29sdW1uLndpZHRoKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGgucHVzaCh7XHJcblx0XHRcdFx0XHRoZWFkZXJUZXh0OiBhcmdzLmNvbHVtbi5oZWFkZXJUZXh0LFxyXG5cdFx0XHRcdFx0d2lkdGg6IHBhcnNlSW50KGFyZ3MuY29sdW1uLndpZHRoKSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5jb25maWcuY29sdW1uc1dpZHRoID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aC5wdXNoKHtcclxuXHRcdFx0XHRoZWFkZXJUZXh0OiBhcmdzLmNvbHVtbi5oZWFkZXJUZXh0LFxyXG5cdFx0XHRcdHdpZHRoOiBwYXJzZUludChhcmdzLmNvbHVtbi53aWR0aCksXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgcG9ydGxldCA9IHRoaXMucG9ydGxldDtcclxuXHRcdHBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLnBvcnRsZXRzLmZpbmRJbmRleCgoeCkgPT4geC5uZXdJZCA9PT0gcG9ydGxldC5uZXdJZCk7XHJcblx0XHRpZiAoaW5kZXggPiAtMSkgdGhpcy5wb3J0bGV0c1tpbmRleF0gPSBwb3J0bGV0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRDb2x1bW5zUmVuZGVyKGFyZ3MpIHtcclxuXHRcdGlmIChhcmdzLnN0YWNrZWRDb2x1bW5zKSB7XHJcblx0XHRcdGFyZ3Muc3RhY2tlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0Y29sLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0KGNvbC5mb3JtYXQuaW5kZXhPZihcIk5cIikgIT09IC0xIHx8XHJcblx0XHRcdFx0XHRcdGNvbC5mb3JtYXQgPT09IFwicGVyY2VudFwiIHx8XHJcblx0XHRcdFx0XHRcdGNvbC5mb3JtYXQuaW5kZXhPZihcIlBcIikgIT09IC0xKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Y29sLnRleHRBbGlnbiA9IFwiUmlnaHRcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGgpIHtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoYXJncyBhcyBhbnkpLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRhcmdzLmNvbHVtbnNbaV0uaGVhZGVyVGV4dCA9PT0gXCJcIiB8fFxyXG5cdFx0XHRcdFx0IWFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0XHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5fcm93ID0gdGhpcy5jb25maWcuY29sdW1uc1dpZHRoLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0KGVsKSA9PiBlbC5oZWFkZXJUZXh0ID09PSBhcmdzLmNvbHVtbnNbaV0uaGVhZGVyVGV4dFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGlmIChjb2x1bW5fcm93Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0YXJncy5jb2x1bW5zW2ldLndpZHRoID0gY29sdW1uX3Jvd1swXS53aWR0aDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgaGVhZGVyVGV4dCA9IGFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0XHJcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpXHJcblx0XHRcdFx0XHRcdC5zcGxpdChcIi5cIik7XHJcblx0XHRcdFx0XHRpZiAoaGVhZGVyVGV4dCAmJiBoZWFkZXJUZXh0Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb25maWcuY29sdW1uc1dpZHRoLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRlbC5oZWFkZXJUZXh0XHJcblx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdC50b0xvd2VyQ2FzZSgpID09PVxyXG5cdFx0XHRcdFx0XHRcdFx0aGVhZGVyVGV4dFtoZWFkZXJUZXh0Lmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKClcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0aWYgKGNvbHVtbi5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS5jb2x1bW5zW2ldLndpZHRoID0gY29sdW1uWzBdLndpZHRoO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGRhdGUgZm9ybWF0IGFib3V0IHF1YXJ0ZXJseVxyXG5cdFx0XHRcdGxldCBwaXZvdFZhbHVlczogYW55ID0gdGhpcy5waXZvdE9iai5waXZvdFZhbHVlcztcclxuXHRcdFx0XHRpZiAodGhpcy5mb3JtYXREYXRlcyAmJiB0aGlzLmZvcm1hdERhdGVzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0bGV0IGRhdGVGaWVsZHMgPSB0aGlzLmZvcm1hdERhdGVzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGVsLm5hbWU7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdGZvciAobGV0IGsgPSAxOyBrIDwgcGl2b3RWYWx1ZXMubGVuZ3RoOyBrKyspIHtcclxuXHRcdFx0XHRcdFx0Zm9yIChcclxuXHRcdFx0XHRcdFx0XHRsZXQgaiA9IDA7XHJcblx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba10gIT0gbnVsbCAmJiBqIDwgcGl2b3RWYWx1ZXNba10ubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRcdGorK1xyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRwaXZvdFZhbHVlc1trXVtqXSAhPSBudWxsICYmXHJcblx0XHRcdFx0XHRcdFx0XHQoaiA9PSAwXHJcblx0XHRcdFx0XHRcdFx0XHRcdD8gZGF0ZUZpZWxkcy5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IGRhdGVGaWVsZHMuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwaXZvdFZhbHVlc1trXVtqXS5hY3R1YWxUZXh0XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKSlcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vQ3VzdG9taXplIHRoZSBSb3cgaGVhZGVycy9Db2x1bW4gaGVhZGVycyBiYXNlZCBvbiB5b3VyIG5lZWRzXHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgaGVhZGVycztcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChqID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSBwaXZvdFZhbHVlc1trXVtqXS5hY3R1YWxUZXh0O1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaGVhZGVycyA9IHBpdm90VmFsdWVzW2tdW2pdLmZvcm1hdHRlZFRleHQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSBwaXZvdFZhbHVlc1trXVtqXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChoZWFkZXJzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBkYXRlID0gbmV3IERhdGUoaGVhZGVycyk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcXVhcnRlciA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0TWF0aC5mbG9vcihkYXRlLmdldE1vbnRoKCkgLyAzKSArIDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0O1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mb3JtYXREYXRlcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGogPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IGVsLmZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLmFjdHVhbFRleHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gZWwuZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLmZvcm1hdHRlZFRleHQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0UXVhcnRlclZhbHVlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1YXJ0ZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBpZih0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgb25Mb2FkKCk6IHZvaWQge1xyXG5cdFx0Ly8gU01QMi0xNTY1MSDlvIDlkK/omZrmi5/mu5rliqjlubZzb3J05YiX5ZCO77yM5p2l5Zue5rua5Yqo5Lya5a+86Ie05pWw5o2u56m655m9XHJcblx0XHQvLyDlrpjmlrnpk77mjqUgaHR0cHM6Ly9lajIuc3luY2Z1c2lvbi5jb20vYW5ndWxhci9kb2N1bWVudGF0aW9uL3Bpdm90dmlldy92aXJ0dWFsLXNjcm9sbGluZyN2aXJ0dWFsLXNjcm9sbGluZy1mb3Itc3RhdGljLWZpZWxkLWxpc3RcclxuXHRcdC8vIERlbW/pk77mjqUgaHR0cHM6Ly9zdGFja2JsaXR6LmNvbS9lZGl0L2dpdGh1Yi03Z2drMnUtNHJremIzP2ZpbGU9c3JjJTJGYXBwLmNvbXBvbmVudC50c1xyXG5cdFx0KHRoaXMuZmllbGRsaXN0T2JqIGFzIFBpdm90RmllbGRMaXN0Q29tcG9uZW50KS5waXZvdEdyaWRNb2R1bGUgPSB0aGlzXHJcblx0XHRcdC5waXZvdE9iaiBhcyBQaXZvdFZpZXdDb21wb25lbnQ7XHJcblx0fVxyXG5cclxuXHRvbmRhdGFCb3VuZCgpe1xyXG5cdFx0aWYgKEJyb3dzZXIuaXNEZXZpY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5waXZvdE9iai5lbGVtZW50LnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLnBpdm90T2JqLmFsbG93Q2FsY3VsYXRlZEZpZWxkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5waXZvdE9iai5zaG93RmllbGRMaXN0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGVuZ2luZVBvcHVsYXRlZChhcmdzKSB7XHJcblx0XHRsZXQgY2xvbmVkVmFsdWVzOiBJUGl2b3RWYWx1ZXM7XHJcblx0XHRsZXQgY3VycmVudFBpdm90VmFsdWVzOiBhbnkgPSB0aGlzLmdldENsb25lZFBpdm90VmFsdWVzKFxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5waXZvdFZhbHVlc1xyXG5cdFx0KTtcclxuXHRcdGxldCBwYWdlU2V0dGluZ3M6IElQYWdlU2V0dGluZ3MgPVxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5wYWdlU2V0dGluZ3M7XHJcblxyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmdlbmVyYXRlR3JpZERhdGEpIHtcclxuXHRcdFx0Ly8g5rKh5rOV5aSN546wIGh0dHBzOi8vcmFpc2VscC5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9TTVAyLTE3MjQg5aSE55CG55qE6L+Z5Liq6Zeu6aKY5oOF5Ya1LCDnm7TmjqXms6jph4rmjolcclxuXHRcdFx0Ly8g5LiL6Z2i6L+Z5q615Luj56CB5Lya5b2x5ZONIGh0dHBzOi8vcmFpc2VscC5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9TTVAyLTEyMTM5XHJcblx0XHRcdC8vIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmdlbmVyYXRlR3JpZERhdGEoXHJcblx0XHRcdC8vIFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MsXHJcblx0XHRcdC8vIFx0dHJ1ZVxyXG5cdFx0XHQvLyApO1xyXG5cdFx0XHRjbG9uZWRWYWx1ZXMgPSB0aGlzLmdldENsb25lZFBpdm90VmFsdWVzKFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBpdm90VmFsdWVzXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5waXZvdFZhbHVlcyA9IGN1cnJlbnRQaXZvdFZhbHVlcztcclxuXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBhZ2VTZXR0aW5ncyA9IHBhZ2VTZXR0aW5ncztcclxuXHJcblx0XHRcdC8vIEhlcmUgXCJjbG9uZWRWYWx1ZXNcIiBjb250YWlucyB0aGUgd2hvbGUgcGl2b3QgdmFsdWVzLlxyXG5cdFx0XHR0aGlzLmFsbERhdGFWYWx1ZSA9IGNsb25lZFZhbHVlcztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q2xvbmVkUGl2b3RWYWx1ZXMocGl2b3RWYWx1ZXM6IElQaXZvdFZhbHVlcyk6IElQaXZvdFZhbHVlcyB7XHJcblx0XHRsZXQgY2xvbmVkU2V0czogSVBpdm90VmFsdWVzID0gW107XHJcblx0XHRpZiAocGl2b3RWYWx1ZXMgJiYgcGl2b3RWYWx1ZXMubGVuZ3RoKSB7XHJcblx0XHRcdGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBwaXZvdFZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChwaXZvdFZhbHVlc1tpXSkge1xyXG5cdFx0XHRcdFx0Y2xvbmVkU2V0c1tpXSA9IFtdO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IHBpdm90VmFsdWVzW2ldLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdGlmIChwaXZvdFZhbHVlc1tpXVtqXSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlICovXHJcblx0XHRcdFx0XHRcdFx0Y2xvbmVkU2V0c1tpXVtqXSA9IHRoaXMuZ2V0Q2xvbmVkUGl2b3RWYWx1ZU9iaihcclxuXHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2ldW2pdIGFzIHsgW2tleTogc3RyaW5nXTogT2JqZWN0IH1cclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNsb25lZFNldHM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldENsb25lZFBpdm90VmFsdWVPYmooZGF0YTogeyBba2V5OiBzdHJpbmddOiBPYmplY3QgfSk6IHtcclxuXHRcdFtrZXk6IHN0cmluZ106IE9iamVjdDtcclxuXHR9IHtcclxuXHRcdGxldCBrZXlQb3M6IG51bWJlciA9IDA7XHJcblx0XHRsZXQgZnJhbWVkU2V0OiBhbnkgPSB7fTtcclxuXHRcdGlmICghKGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdW5kZWZpbmVkKSkge1xyXG5cdFx0XHRsZXQgZmllbGRzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGRhdGEpO1xyXG5cdFx0XHR3aGlsZSAoa2V5UG9zIDwgZmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRcdGZyYW1lZFNldFtmaWVsZHNba2V5UG9zXV0gPSBkYXRhW2ZpZWxkc1trZXlQb3NdXTtcclxuXHRcdFx0XHRrZXlQb3MrKztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0ZnJhbWVkU2V0ID0gZGF0YTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmcmFtZWRTZXQ7XHJcblx0fVxyXG5cclxuXHQvLyNyZWdpb24gRmlsdGVyaW5nIHRoZSBUcmVlTm9kZXNcclxuXHRwcml2YXRlIHNlYXJjaE5vZGVzKGFyZ3MpIHtcclxuXHRcdGxldCBfdGV4dCA9IGFyZ3MubWFza2VkVmFsdWU7XHJcblx0XHRsZXQgcHJlZGljYXRzID0gW10sXHJcblx0XHRcdF9hcnJheSA9IFtdLFxyXG5cdFx0XHRfZmlsdGVyID0gW107XHJcblx0XHRpZiAoX3RleHQgPT0gXCJcIikge1xyXG5cdFx0XHR0aGlzLmNoYW5nZURhdGFTb3VyY2UoXHJcblx0XHRcdFx0KCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueSkuZ2V0VHJlZURhdGEoKVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGV0IHByZWRpY2F0ZSA9IG5ldyBQcmVkaWNhdGUoXCJjYXB0aW9uXCIsIFwiY29udGFpbnNcIiwgX3RleHQsIHRydWUpO1xyXG5cdFx0XHRsZXQgZmlsdGVyZWRMaXN0ID0gbmV3IERhdGFNYW5hZ2VyKFxyXG5cdFx0XHRcdCgodGhpcyBhcyBhbnkpLmZpZWxkbGlzdE9iai50cmVlVmlld01vZHVsZSBhcyBhbnkpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0KS5leGVjdXRlTG9jYWwobmV3IFF1ZXJ5KCkud2hlcmUocHJlZGljYXRlKSk7XHJcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgZmlsdGVyZWRMaXN0Lmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0X2ZpbHRlci5wdXNoKGZpbHRlcmVkTGlzdFtqXVtcImlkXCJdKTtcclxuXHRcdFx0XHRsZXQgZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVySXRlbXMoXHJcblx0XHRcdFx0XHRmaWx0ZXJlZExpc3Rbal0sXHJcblx0XHRcdFx0XHQoXHJcblx0XHRcdFx0XHRcdCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueVxyXG5cdFx0XHRcdFx0KS5nZXRUcmVlRGF0YSgpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0X2FycmF5LmluZGV4T2YoZmlsdGVyc1tpXSkgPT0gLTEgJiZcclxuXHRcdFx0XHRcdFx0ZmlsdGVyc1tpXSAhPSBudWxsXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0X2FycmF5LnB1c2goZmlsdGVyc1tpXSk7XHJcblx0XHRcdFx0XHRcdHByZWRpY2F0cy5wdXNoKFxyXG5cdFx0XHRcdFx0XHRcdG5ldyBQcmVkaWNhdGUoXCJpZFwiLCBcImVxdWFsXCIsIGZpbHRlcnNbaV0sIGZhbHNlKVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAocHJlZGljYXRzLmxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VEYXRhU291cmNlKFtdKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRsZXQgcXVlcnkgPSBuZXcgUXVlcnkoKS53aGVyZShQcmVkaWNhdGUub3IocHJlZGljYXRzKSk7XHJcblx0XHRcdFx0bGV0IG5ld0xpc3QgPSBuZXcgRGF0YU1hbmFnZXIoXHJcblx0XHRcdFx0XHQoXHJcblx0XHRcdFx0XHRcdCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueVxyXG5cdFx0XHRcdFx0KS5nZXRUcmVlRGF0YSgpXHJcblx0XHRcdFx0KS5leGVjdXRlTG9jYWwocXVlcnkpO1xyXG5cdFx0XHRcdHRoaXMuY2hhbmdlRGF0YVNvdXJjZShuZXdMaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly9GaW5kIHRoZSBQYXJlbnQgTm9kZXMgZm9yIGNvcnJlc3BvbmRpbmcgY2hpbGRzXHJcblx0cHVibGljIGdldEZpbHRlckl0ZW1zKGZMaXN0LCBsaXN0KSB7XHJcblx0XHRsZXQgbm9kZXMgPSBbXTtcclxuXHRcdG5vZGVzLnB1c2goZkxpc3RbXCJpZFwiXSk7XHJcblx0XHRsZXQgcXVlcnkyID0gbmV3IFF1ZXJ5KCkud2hlcmUoXCJpZFwiLCBcImVxdWFsXCIsIGZMaXN0W1wicGlkXCJdLCBmYWxzZSk7XHJcblx0XHRsZXQgZkxpc3QxID0gbmV3IERhdGFNYW5hZ2VyKGxpc3QpLmV4ZWN1dGVMb2NhbChxdWVyeTIpO1xyXG5cdFx0aWYgKGZMaXN0MS5sZW5ndGggIT0gMCkge1xyXG5cdFx0XHRsZXQgcE5vZGUgPSB0aGlzLmdldEZpbHRlckl0ZW1zKGZMaXN0MVswXSwgbGlzdCk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcE5vZGUubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRpZiAobm9kZXMuaW5kZXhPZihwTm9kZVtpXSkgPT0gLTEgJiYgcE5vZGVbaV0gIT0gbnVsbClcclxuXHRcdFx0XHRcdG5vZGVzLnB1c2gocE5vZGVbaV0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBub2RlcztcclxuXHRcdH1cclxuXHRcdHJldHVybiBub2RlcztcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBjcmVhdGVkKGFyZ3M6IGFueSkge1xyXG5cdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqICYmICF0aGlzLmZpZWxkbGlzdE9iai5lbmdpbmVNb2R1bGUuZmllbGRzKSB7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmVuZ2luZU1vZHVsZS5maWVsZHMgPSBbXTtcclxuXHRcdH1cclxuXHRcdGxldCBzZWFyY2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcblx0XHRzZWFyY2guaWQgPSBcInBpdm90U2VhcmNoQm94XCIgKyB0aGlzLmZpZWxkbGlzdE9iai5lbGVtZW50LmlkO1xyXG5cdFx0bGV0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuXHRcdFx0XCIjXCIgKyB0aGlzLmZpZWxkbGlzdE9iai5lbGVtZW50LmlkICsgXCJfQ29udGFpbmVyIC5lLWZpZWxkLXRhYmxlXCJcclxuXHRcdCk7XHJcblx0XHRpZiAoZWwpIGVsLnByZXBlbmQoc2VhcmNoKTtcclxuXHRcdHRoaXMucGl2b3RTZWFyY2hCb3ggPSBuZXcgTWFza2VkVGV4dEJveCh7XHJcblx0XHRcdHBsYWNlaG9sZGVyOiB0aGlzLnRyYW5zbGF0aW9uLlNFQVJDSCB8fCBcIi5TRUFSQ0hcIixcclxuXHRcdFx0Y3NzQ2xhc3M6IFwicGl2b3Qtc2VhcmNoXCIsXHJcblx0XHRcdGNoYW5nZTogdGhpcy5zZWFyY2hOb2Rlcy5iaW5kKHRoaXMpLFxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLnBpdm90U2VhcmNoQm94LmFwcGVuZFRvKFxyXG5cdFx0XHRcIiNwaXZvdFNlYXJjaEJveFwiICsgdGhpcy5maWVsZGxpc3RPYmouZWxlbWVudC5pZFxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyBORVcgRGFzaGJvYXJkIOeCueWHu1wiYXBwbHlcIuaXtu+8jOivt+axguaWsOaVsOaNrlxyXG5cdFx0bGV0IGFwcGx5QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQgKyBcIl9EZWZlclVwZGF0ZUJ1dHRvbjFcIlxyXG5cdFx0KTtcclxuXHJcblx0XHRhcHBseUJ0biAmJlxyXG5cdFx0XHRhcHBseUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0RGF0YUJ5UG9ydGxldHNOZXcoXHJcblx0XHRcdFx0XHRbdGhpcy5wb3J0bGV0XSxcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHR0aGlzLlBpdm90X0RhdGEgPVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0UmVzdWx0QnlEYXRhVGFibGUoXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBvcnRsZXQsXHJcblx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmQuaWRcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5kYXRhU291cmNlID1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLlBpdm90X0RhdGE7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5QaXZvdF9EYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGdyb3VwcyA9IHRoaXMuY29uZmlnLnhheGlzLmdyb3VwcztcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93cyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChncm91cHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGdpdGVtIG9mIGdyb3Vwcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGdpdGVtLm5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGZpZWxkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRnaXRlbS5zaG93U3ViVG90YWxzID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLnNob3dTdWJUb3RhbHM7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Z2l0ZW0uY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nVmFsdWUgfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudHJhbnNsYXRpb25bXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nQ29kZSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2l0ZW0uY2FwdGlvbjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyb3dzLnB1c2goZ2l0ZW0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLlBpdm90X0RhdGEubWFwKChkYXRhKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRyb3dzLmZvckVhY2goKHJvdykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZGF0YVtyb3cubmFtZV0gPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhW3Jvdy5uYW1lXSA9IFwibnVsbFwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkLFxyXG5cdFx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0XHJcblx0XHQvLyDngrnlh7tcImNhbmNlbFwi5pe277yM5oGi5aSN5Y6f5aeL5pWw5o2uXHJcblx0XHRsZXQgY2FuY2VsQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQgKyBcIl9EZWZlclVwZGF0ZUJ1dHRvbjJcIlxyXG5cdFx0KTtcclxuXHJcblx0XHRjYW5jZWxCdG4gJiZcclxuXHRcdFx0Y2FuY2VsQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuZGF0YVNvdXJjZSA9XHJcblx0XHRcdFx0XHRbLi4udGhpcy5QaXZvdF9EYXRhXTtcclxuXHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0XHRcdHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdFx0fSk7XHRcdFxyXG5cdH1cclxuXHJcblx0cHVibGljIGZpZWxkTGlzdFJlZnJlc2hlZChhcmdzKSB7XHJcblx0XHRpZiAodGhpcy5waXZvdFNlYXJjaEJveCkge1xyXG5cdFx0XHR0aGlzLnBpdm90U2VhcmNoQm94LnZhbHVlID0gXCJcIjtcclxuXHRcdFx0dGhpcy5jaGFuZ2VEYXRhU291cmNlKFxyXG5cdFx0XHRcdCh0aGlzLmZpZWxkbGlzdE9iai50cmVlVmlld01vZHVsZSBhcyBhbnkpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2hhbmdlRGF0YVNvdXJjZShkYXRhKSB7XHJcblx0XHRsZXQgZmllbGRUYWJsZSA9ICh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlLmZpZWxkVGFibGU7XHJcblx0XHRpZiAoZmllbGRUYWJsZSkge1xyXG5cdFx0XHRmaWVsZFRhYmxlLmZpZWxkcyA9IHtcclxuXHRcdFx0XHRkYXRhU291cmNlOiBkYXRhLFxyXG5cdFx0XHRcdGlkOiBcImlkXCIsXHJcblx0XHRcdFx0dGV4dDogXCJjYXB0aW9uXCIsXHJcblx0XHRcdFx0aXNDaGVja2VkOiBcImlzU2VsZWN0ZWRcIixcclxuXHRcdFx0XHRwYXJlbnRJRDogXCJwaWRcIixcclxuXHRcdFx0XHRpY29uQ3NzOiBcInNwcml0ZUNzc0NsYXNzXCIsXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvL1NNUDItMjk1NyBmaXggdGhlIGRhdGUgaXNzdWUgb24gdGhlIHJhdyBkYXRhXHJcblx0cHVibGljIGRyaWxsVGhyb3VnaChhcmdzOiBEcmlsbFRocm91Z2hFdmVudEFyZ3MpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5ncmlkQ29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBkYXRhID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gYXJncy5ncmlkQ29sdW1uc1tpXS5maWVsZFxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRkYXRhWzBdLmRhdGFUeXBlID09PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0ZGF0YVswXS5kYXRhVHlwZSA9PT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRhcmdzLmdyaWRDb2x1bW5zW2ldLnR5cGUgPSBcImRhdGVcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0Ly8jZW5kcmVnaW9uXHJcblxyXG5cdHByaXZhdGUgc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChvYmosIGRhdGEsIGNvZGUpIHtcclxuXHRcdGlmIChjb2RlID09PSAtMSkge1xyXG5cdFx0XHRvYmouc3R5bGUuY29sb3IgPSBkYXRhLm5lZ2FGb250Q29sb3I7XHJcblx0XHRcdG9iai5zdHlsZS5mb250RmFtaWx5ID0gZGF0YS5uZWdhRm9udEZhbWlseVZhbHVlO1xyXG5cdFx0XHRvYmouc3R5bGUuZm9udFNpemUgPSBkYXRhLm5lZ2FGb250U2l6ZVZhbHVlO1xyXG5cdFx0XHRvYmouc3R5bGUuYmFja2dyb3VuZENvbG9yID0gZGF0YS5uZWdhQmFja2dyb3VuZENvbG9yO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0b2JqLnN0eWxlLmNvbG9yID0gZGF0YS5mb250Q29sb3I7XHJcblx0XHRcdG9iai5zdHlsZS5mb250RmFtaWx5ID0gZGF0YS5mb250RmFtaWx5VmFsdWU7XHJcblx0XHRcdG9iai5zdHlsZS5mb250U2l6ZSA9IGRhdGEuZm9udFNpemVWYWx1ZTtcclxuXHRcdFx0b2JqLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGRhdGEuYmFja2dyb3VuZENvbG9yO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRDb21wYXJlQ29uZGl0aW9uYWwoXHJcblx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdGRhdGFcclxuXHQpIHtcclxuXHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUxKSA9PSAwKSB7XHJcblx0XHRcdHN3aXRjaCAoZGF0YS5jb21wYXJlU2VsZWN0KSB7XHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuXCI6IC8vIOWwj+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJMZXNzVGhhbk9yRXF1YWxUb1wiOiAvLyDlsI/kuo7nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5cIjogLy8g5aSn5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuT3JFcXVhbFRvXCI6IC8vIOWkp+S6juetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkdyZWF0ZXJUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEVxdWFsc1wiOiAvLyDkuI3nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQmV0d2VlblwiOiAvLyB2YWx1ZTE8PSB2YWwgPD12YWx1ZTJcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSA9PT0gMSkge1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5jb21wYXJlVmFsdWUyXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEJldHdlZW5cIjogLy8gdmFsID49IHZhbHVlMiwgdmFsIDw9IHZhbHVlMVxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTEpID09PSAxKSB7XHJcblx0XHRcdHN3aXRjaCAoZGF0YS5jb21wYXJlU2VsZWN0KSB7XHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuXCI6IC8vIOWwj+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJMZXNzVGhhbk9yRXF1YWxUb1wiOiAvLyDlsI/kuo7nrYnkuo5cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBOdW1iZXIoZGF0YS5jb21wYXJlVmFsdWUxKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJMZXNzVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuXCI6IC8vIOWkp+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhbk9yRXF1YWxUb1wiOiAvLyDlpKfkuo7nrYnkuo5cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IE51bWJlcihkYXRhLmNvbXBhcmVWYWx1ZTEpO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiRXF1YWxzXCI6IC8vIOetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJFcXVhbHNcIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90RXF1YWxzXCI6IC8vIOS4jeetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihkYXRhLmNvbXBhcmVWYWx1ZTEpO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0Ly8gcHVzaOi/m+aVsOe7hFxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0Ly8gcHVzaOi/m+aVsOe7hFxyXG5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkJldHdlZW5cIjogLy8gdmFsdWUxPD0gdmFsIDw9dmFsdWUyXHJcblx0XHRcdFx0XHRpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMikgPT09IDEpIHtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5jb21wYXJlVmFsdWUyXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEJldHdlZW5cIjogLy8gdmFsID49IHZhbHVlMiwgdmFsIDw9IHZhbHVlMVxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0Ly8gcHVzaOi/m+aVsOe7hFxyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMSkgPT09IC0xKSB7XHJcblx0XHRcdHN3aXRjaCAoZGF0YS5jb21wYXJlU2VsZWN0KSB7XHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuXCI6IC8vIOWwj+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJMZXNzVGhhbk9yRXF1YWxUb1wiOiAvLyDlsI/kuo7nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IGRhdGEuY29tcGFyZVNlbGVjdDtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhblwiOiAvLyDlpKfkuo5cclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5PckVxdWFsVG9cIjogLy8g5aSn5LqO562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5PckVxdWFsVG9cIjtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkVxdWFsc1wiOiAvLyDnrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiRXF1YWxzXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEVxdWFsc1wiOiAvLyDkuI3nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTm90RXF1YWxzXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQmV0d2VlblwiOiAvLyB2YWx1ZTE8PSB2YWwgPD12YWx1ZTJcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSkge1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMjtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUyO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJOb3RCZXR3ZWVuXCI6IC8vIHZhbCA+PSB2YWx1ZTIsIHZhbCA8PSB2YWx1ZTFcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSkge1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTI7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkdyZWF0ZXJUaGFuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBkYXRhLmNvbXBhcmVWYWx1ZTI7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJOb3RCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldFF1YXJ0ZXJWYWx1ZShmb3JtYXQsIGRhdGUsIHF1YXJ0ZXIpIHtcclxuXHRcdGxldCB5ZWFyOiBhbnk7XHJcblx0XHRzd2l0Y2ggKGZvcm1hdCkge1xyXG5cdFx0XHRjYXNlIFwiUTEgMjAyMVwiOlxyXG5cdFx0XHRcdHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcblx0XHRcdFx0cmV0dXJuIFwiUVwiICsgcXVhcnRlciArIFwiIFwiICsgeWVhcjtcclxuXHRcdFx0Y2FzZSBcIlExIDIxXCI6XHJcblx0XHRcdFx0eWVhciA9IChkYXRlIGFzIGFueSkuZ2V0WWVhcigpIC0gMTAwO1xyXG5cdFx0XHRcdHJldHVybiBcIlFcIiArIHF1YXJ0ZXIgKyBcIiBcIiArIHllYXI7XHJcblx0XHRcdGNhc2UgXCIyMDIxIFExXCI6XHJcblx0XHRcdFx0eWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuXHRcdFx0XHRyZXR1cm4geWVhciArIFwiIFwiICsgXCJRXCIgKyBxdWFydGVyO1xyXG5cdFx0XHRjYXNlIFwiMjEgUTFcIjpcclxuXHRcdFx0XHR5ZWFyID0gKGRhdGUgYXMgYW55KS5nZXRZZWFyKCkgLSAxMDA7XHJcblx0XHRcdFx0cmV0dXJuIHllYXIgKyBcIiBcIiArIFwiUVwiICsgcXVhcnRlcjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGN1c3RvbWlzZUNlbGwoYXJnczogUXVlcnlDZWxsSW5mb0V2ZW50QXJncykge1xyXG5cdFx0aWYgKGFyZ3MuY29sdW1uLnR5cGUgPT09IFwiZGF0ZVwiIHx8IGFyZ3MuY29sdW1uLnR5cGUgPT09IFwiZGF0ZVRpbWVcIikge1xyXG5cdFx0XHRjb25zdCB7IGZpZWxkIH0gPSBhcmdzLmNvbHVtbjtcclxuXHRcdFx0aWYgKCFhcmdzLmRhdGFbZmllbGRdKSB7XHJcblx0XHRcdFx0YXJncy5jb2x1bW4udHlwZSA9IFwic3RyaW5nXCI7XHJcblx0XHRcdFx0YXJncy5jb2x1bW4uZm9ybWF0ID0gXCJcIjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHRpbWVBcnJheSDmlbDnu4Tlr7nosaEgW3tcImRhdGVcIjpcIjIwMjEtMDEtMDFcIn0se1wiZGF0ZVwiOlwiMjAyMS0wMi0wMVwifV1cclxuXHQgKiBAcGFyYW0gZW5kRGF0ZSDmiKroh7Pml7bpl7RcclxuXHQgKiBAcGFyYW0gaW50ZXJ2YWwg5pe26Ze06Ze06ZqUIHllYXIgLyBxdWFydGVyIC8gbW9udGhcclxuXHQgKiBAcGFyYW0gdGltZUtleSDml7bpl7TlrZfmrrXlkI0gZGF0ZVxyXG5cdCAqIEByZXR1cm5zIOWIkuWIhuWQjueahOaXtumXtOWIhue7hOWvueixoVxyXG5cdCAqL1xyXG5cdGdldFRpbWVSYW5nZXModGltZUFycmF5LCBlbmREYXRlLCBpbnRlcnZhbCwgdGltZUtleSkge1xyXG5cdFx0Ly8g5bCG5pe26Ze05a2X56ym5Liy6L2s5o2i5Li6IG1vbWVudCDlr7nosaFcclxuXHRcdGNvbnN0IGRhdGVzID0gdGltZUFycmF5Lm1hcCgoaXRlbSkgPT4gbW9tZW50KGl0ZW1bdGltZUtleSB8fCBcImRhdGVcIl0pKTtcclxuXHJcblx0XHQvLyDliIbpmpTnrKZcclxuXHRcdGNvbnN0IGRlbGltaXRlciA9IFwiLVwiO1xyXG5cclxuXHRcdC8vIOaJvuWIsOacgOWwj+aXtumXtOWSjOacgOWkp+aXtumXtFxyXG5cdFx0Y29uc3QgbWluRGF0ZSA9IG1vbWVudC5taW4oZGF0ZXMpO1xyXG5cdFx0Y29uc3QgbWF4RGF0ZSA9IG1vbWVudChlbmREYXRlKTtcclxuXHJcblx0XHQvLyDliJ3lp4vljJbnu5Pmnpzlr7nosaFcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdC8vIOagueaNruWFpeWPgui/m+ihjOWIkuWIhlxyXG5cdFx0aWYgKGludGVydmFsID09PSBcInllYXJcIikge1xyXG5cdFx0XHRjb25zdCBzdGFydFllYXIgPSBtaW5EYXRlLnllYXIoKTtcclxuXHRcdFx0Y29uc3QgZW5kWWVhciA9IG1heERhdGUueWVhcigpO1xyXG5cclxuXHRcdFx0Zm9yIChsZXQgeWVhciA9IHN0YXJ0WWVhcjsgeWVhciA8PSBlbmRZZWFyOyB5ZWFyKyspIHtcclxuXHRcdFx0XHRyZXN1bHRbeWVhcl0gPSBbXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZGF0ZXMuZm9yRWFjaCgoZGF0ZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCB5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0cmVzdWx0W3llYXJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIGlmIChpbnRlcnZhbCA9PT0gXCJxdWFydGVyXCIpIHtcclxuXHRcdFx0Ly8g5a2Y5YKo5a2j5bqm5a2X56ym5LiyXHJcblx0XHRcdGNvbnN0IHF1YXJ0ZXJzID0gW107XHJcblxyXG5cdFx0XHQvLyDpgJDkuIDpgY3ljobmr4/kuKrlraPluqZcclxuXHRcdFx0Zm9yIChcclxuXHRcdFx0XHRsZXQgY3VycmVudERhdGUgPSBtaW5EYXRlLmNsb25lKCk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuaXNTYW1lT3JCZWZvcmUobWF4RGF0ZSk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuYWRkKDMsIFwibW9udGhzXCIpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0Y29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoY3VycmVudERhdGUubW9udGgoKSArIDEpIC8gMyk7IC8vIOiuoeeul+Wto+W6plxyXG5cdFx0XHRcdHF1YXJ0ZXJzLnB1c2goYCR7eWVhcn0ke2RlbGltaXRlcn1RJHtxdWFydGVyfWApOyAvLyDmoLzlvI/ljJblubbmt7vliqDliLDmlbDnu4RcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8g6L6T5Ye65omA5pyJ5a2j5bqmXHJcblx0XHRcdHF1YXJ0ZXJzLmZvckVhY2goKHF1YXJ0ZXIsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0W3F1YXJ0ZXJdID0gW107XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0ZGF0ZXMuZm9yRWFjaCgoZGF0ZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCB5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0Y29uc3QgcXVhcnRlciA9IGRhdGUucXVhcnRlcigpOyAvLyDojrflj5blraPluqZcclxuXHRcdFx0XHRpZiAocXVhcnRlciA9PT0gMSlcclxuXHRcdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgXCJRMVwiXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHRcdGVsc2UgaWYgKHF1YXJ0ZXIgPT09IDIpXHJcblx0XHRcdFx0XHRyZXN1bHRbeWVhciArIGRlbGltaXRlciArIFwiUTJcIl0ucHVzaCh0aW1lQXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0XHRlbHNlIGlmIChxdWFydGVyID09PSAzKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3llYXIgKyBkZWxpbWl0ZXIgKyBcIlEzXCJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdFx0ZWxzZSBpZiAocXVhcnRlciA9PT0gNClcclxuXHRcdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgXCJRNFwiXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0gZWxzZSBpZiAoaW50ZXJ2YWwgPT09IFwibW9udGhcIikge1xyXG5cdFx0XHQvLyDlrZjlgqjmnIjku73lrZfnrKbkuLJcclxuXHRcdFx0Y29uc3QgbW9udGhzID0gW107XHJcblxyXG5cdFx0XHQvLyDpgJDkuIDpgY3ljobmr4/kuKrmnIhcclxuXHRcdFx0Zm9yIChcclxuXHRcdFx0XHRsZXQgY3VycmVudERhdGUgPSBtaW5EYXRlLmNsb25lKCk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuaXNTYW1lT3JCZWZvcmUobWF4RGF0ZSk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuYWRkKDEsIFwibW9udGhzXCIpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdG1vbnRocy5wdXNoKGN1cnJlbnREYXRlLmZvcm1hdChgWVlZWSR7ZGVsaW1pdGVyfU1NYCkpOyAvLyDmoLzlvI/ljJblubbmt7vliqDliLDmlbDnu4RcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8g6L6T5Ye65omA5pyJ5pyI5Lu9XHJcblx0XHRcdG1vbnRocy5mb3JFYWNoKChtb250aCwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRbbW9udGhdID0gW107XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0ZGF0ZXMuZm9yRWFjaCgoZGF0ZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCB5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0Y29uc3QgbW9udGggPSAoZGF0ZS5tb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIik7IC8vIDAtMTFcclxuXHRcdFx0XHRyZXN1bHRbeWVhciArIGRlbGltaXRlciArIG1vbnRoXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICog6K6h566X5Yeg5L2V566X5pWw5bmz5pa55pu0XHJcblx0ICogQHBhcmFtIHZhbHVlcyDmlbDnu4QgWzAsIDAsIDAuMjU3NV1cclxuXHQgKiBAcmV0dXJuc1xyXG5cdCAqL1xyXG5cdGNhbGN1bGF0ZUdyb3d0aFJhdGUodmFsdWVzKSB7XHJcblx0XHRjb25zdCBwcm9kdWN0ID0gdmFsdWVzLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyAqICgxICsgdmFsKSwgMSk7XHJcblx0XHRpZiAocHJvZHVjdCA+PSAwKSB7XHJcblx0XHRcdHJldHVybiBNYXRoLnBvdyhwcm9kdWN0LCAxIC8gdmFsdWVzLmxlbmd0aCkgLSAxO1xyXG5cdFx0fSBlbHNlIGlmIChwcm9kdWN0IDwgMCkge1xyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCAlIDIgPT0gMCkge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLm50aHJvb3QocHJvZHVjdCwgdmFsdWVzLmxlbmd0aCkgLSAxO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdG50aHJvb3QoeCwgbikge1xyXG5cdFx0bGV0IG5nID0gbiAlIDI7XHJcblx0XHRpZiAobmcgPT0gMSB8fCB4IDwgMCkgeCA9IC14O1xyXG5cdFx0dmFyIHIgPSBNYXRoLnBvdyh4LCAxIC8gbik7XHJcblx0XHRuID0gTWF0aC5wb3cociwgbik7XHJcblxyXG5cdFx0aWYgKE1hdGguYWJzKHggLSBuKSA8IDEgJiYgeCA+IDAgPT09IG4gPiAwKSByZXR1cm4gbmcgPyAtciA6IHI7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiDmoIflh4blgY/lt65cclxuXHQgKiBAcGFyYW0gdmFsdWVzIOaVsOe7hCBbMCwgMCwgLTAuNDc3NV1cclxuXHQgKiBAcmV0dXJucyAwLjI3NTY4NDc1MzUzODA0NjNcclxuXHQgKi9cclxuXHRjYWxjdWxhdGVTdGFuZGFyZERldmlhdGlvbih2YWx1ZXMpIHtcclxuXHRcdGNvbnN0IG4gPSB2YWx1ZXMubGVuZ3RoO1xyXG5cclxuXHRcdC8vIOajgOafpeaVsOaNrueCueaVsOmHj1xyXG5cdFx0aWYgKG4gPCAyKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIuiHs+WwkemcgOimgeS4pOS4quaVsOaNrueCueadpeiuoeeul+agt+acrOagh+WHhuWBj+W3rlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyDorqHnrpflnYflgLxcclxuXHRcdGNvbnN0IG1lYW4gPSB2YWx1ZXMucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICsgdmFsLCAwKSAvIG47XHJcblxyXG5cdFx0Ly8g6K6h566X5pa55beuXHJcblx0XHRjb25zdCB2YXJpYW5jZSA9XHJcblx0XHRcdHZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyBNYXRoLnBvdyh2YWwgLSBtZWFuLCAyKSwgMCkgL1xyXG5cdFx0XHQobiAtIDEpO1xyXG5cclxuXHRcdC8vIOi/lOWbnuagh+WHhuWBj+W3rlxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCh2YXJpYW5jZSk7XHJcblx0fVxyXG59XHJcbiJdfQ==
|
|
4940
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3JhaXNlLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvZGFzaGJvYXJkL2dhZGdldC1ncm91cC9nYWRnZXQtcGl2b3QvZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ04saUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUNULHVCQUF1QixFQUN2QixNQUFNLEVBQ04sUUFBUSxHQUNSLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFTix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBR2xCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUV0QixrQkFBa0IsRUFHbEIsb0JBQW9CLEVBSXBCLG1CQUFtQixHQUduQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFDTixJQUFJLEVBQ0osWUFBWSxFQUNaLE9BQU8sR0FDUCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFDTixNQUFNLEVBQ04sY0FBYyxFQUNkLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sSUFBSSxPQUFPLEVBQ2pCLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sR0FDTixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix1QkFBdUIsR0FDdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FB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Z0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7O0lBNjdIL0MsMkJBQUM7Q0FBQSxBQTE5SEQsSUEwOUhDO1NBMzhIWSxvQkFBb0I7OztJQUNoQyx1Q0FBaUI7O0lBQ2pCLHlDQUFtQjs7SUFDbkIsd0NBQWtCOzs7OztJQUNsQiwwQ0FBK0I7Ozs7O0lBQy9CLHNDQUFlOztJQUNmLGtEQUF3Qzs7SUFDeEMsNENBQWtDOzs7OztJQUNsQyw2Q0FBMkI7Ozs7O0lBQzNCLDhDQUE0Qjs7Ozs7SUFDNUIsOENBQXVCOztJQUN2QiwyQ0FBbUI7Ozs7O0lBQ25CLHdDQUNxQzs7SUFDckMsNENBQzZDOzs7OztJQUM3QywwQ0FBc0M7Ozs7O0lBQ3RDLDJDQUF5Qjs7Ozs7SUFDekIseUNBQXVCOzs7OztJQUN2QixvQ0FBOEI7Ozs7O0lBQzlCLDRDQUE0Qjs7Ozs7SUFDNUIsNkNBQTJDOzs7OztJQUMzQyw0Q0FBcUI7Ozs7O0lBRXJCLHNDQUErQjs7Ozs7SUFDL0IsOENBQXNDOztJQUN0QywrQ0FFRTs7Ozs7SUFDRiwyQ0FBeUI7Ozs7O0lBQ3pCLDRDQUEwQjs7Ozs7SUFDMUIsNkNBU0U7O0lBQ0YsNENBRUU7O0lBQ0YsbURBTUU7Ozs7O0lBQ0YsMkNBQXlCOzs7OztJQUN6QixzREFBMkM7Ozs7O0lBQzNDLHVEQUE0Qzs7Ozs7SUFDNUMsOENBR0U7Ozs7O0lBQ0YsNkNBQTJCOzs7OztJQUMzQiw2Q0FBMkI7O0lBQzNCLDhDQUFzQjs7SUFDdEIsMENBQW1DOztJQUNuQywyQ0FBd0I7Ozs7O0lBQ3hCLGdEQUE4Qjs7SUFDOUIsMkNBQW1COztJQXUvQ25CLDhDQUFvQjs7Ozs7SUFwL0NuQix1REFBd0Q7Ozs7O0lBQ3hELGdEQUEwQzs7Ozs7SUFDMUMsbUNBQThCOzs7OztJQUM5QixtQ0FBK0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cdENoYW5nZURldGVjdG9yUmVmLFxyXG5cdENvbXBvbmVudCxcclxuXHRJbnB1dCxcclxuXHRPbkluaXQsXHJcblx0Vmlld0NoaWxkLFxyXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG5cdEluamVjdCxcclxuXHRPcHRpb25hbCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtcclxuXHRJRGF0YU9wdGlvbnMsXHJcblx0UGl2b3RGaWVsZExpc3RDb21wb25lbnQsXHJcblx0UGl2b3RWaWV3Q29tcG9uZW50LFxyXG5cdEVuZ2luZVBvcHVsYXRlZEV2ZW50QXJncyxcclxuXHRJRGF0YVNldCxcclxuXHRUb29sYmFyU2VydmljZSxcclxuXHRGaWVsZExpc3RTZXJ2aWNlLFxyXG5cdE51bWJlckZvcm1hdHRpbmdTZXJ2aWNlLFxyXG5cdENhbGN1bGF0ZWRGaWVsZFNlcnZpY2UsXHJcblx0Q2FsY3VsYXRlZEZpZWxkQ3JlYXRlRXZlbnRBcmdzLFxyXG5cdEdyb3VwaW5nQmFyU2VydmljZSxcclxuXHRGaWVsZERyb3BFdmVudEFyZ3MsXHJcblx0SVNvcnQsXHJcblx0VmlydHVhbFNjcm9sbFNlcnZpY2UsXHJcblx0SVBpdm90VmFsdWVzLFxyXG5cdElQYWdlU2V0dGluZ3MsXHJcblx0RHJpbGxUaHJvdWdoRXZlbnRBcmdzLFxyXG5cdERyaWxsVGhyb3VnaFNlcnZpY2UsXHJcblx0UGl2b3RBY3Rpb25GYWlsdXJlRXZlbnRBcmdzLFxyXG5cdFF1ZXJ5Q2VsbEluZm9FdmVudEFyZ3MsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXBpdm90dmlld1wiO1xyXG5pbXBvcnQge1xyXG5cdEwxMG4sXHJcblx0ZW5hYmxlUmlwcGxlLFxyXG5cdEJyb3dzZXIsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1iYXNlXCI7XHJcbmltcG9ydCB7IEdyaWRTZXR0aW5ncyB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItcGl2b3R2aWV3L3NyYy9waXZvdHZpZXcvbW9kZWwvZ3JpZHNldHRpbmdzXCI7XHJcbmltcG9ydCB7XHJcblx0c29ydEJ5LFxyXG5cdGRpZmZlcmVuY2VXaXRoLFxyXG5cdHN0YXJ0c1dpdGgsXHJcblx0Y2xvbmVEZWVwLFxyXG5cdHVuaXFCeSxcclxuXHRmaWx0ZXIgYXMgX2ZpbHRlcixcclxuXHRtYXhCeSxcclxuXHRtaW5CeSxcclxuXHRzdW1CeSxcclxuXHRtZWFuQnksXHJcbn0gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgeyBEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2Rhc2hib2FyZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcblx0QUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0QUxMX0FHR1JFR0FURV9UWVBFUyxcclxuXHREYXNoYm9hcmRQb3JsZXRzU2VydmljZSxcclxufSBmcm9tIFwiLi4vLi4vZGFzaGJvYXJkUG9ybGV0cy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE1hc2tlZFRleHRCb3ggfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWlucHV0cy9zcmMvbWFza2VkdGV4dGJveC9tYXNrZWR0ZXh0Ym94XCI7XHJcbmltcG9ydCB7IERhdGFNYW5hZ2VyIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1kYXRhL3NyYy9tYW5hZ2VyXCI7XHJcbmltcG9ydCB7IFByZWRpY2F0ZSwgUXVlcnkgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWRhdGEvc3JjL3F1ZXJ5XCI7XHJcbmltcG9ydCB7IERhdGFVdGlsIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1kYXRhXCI7XHJcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQgeyBQQkZfVE9LRU4gfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZS9JbmplY3Rpb25Ub2tlblwiO1xyXG5cclxuZW5hYmxlUmlwcGxlKGZhbHNlKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiBcInJzLWdhZGdldC1waXZvdFwiLFxyXG5cdHRlbXBsYXRlVXJsOiBcIi4vZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5odG1sXCIsXHJcblx0c3R5bGVVcmxzOiBbXCIuL2dhZGdldC1waXZvdC5jb21wb25lbnQuc2Nzc1wiXSxcclxuXHRwcm92aWRlcnM6IFtcclxuXHRcdFRvb2xiYXJTZXJ2aWNlLFxyXG5cdFx0RmllbGRMaXN0U2VydmljZSxcclxuXHRcdE51bWJlckZvcm1hdHRpbmdTZXJ2aWNlLFxyXG5cdFx0Q2FsY3VsYXRlZEZpZWxkU2VydmljZSxcclxuXHRcdEdyb3VwaW5nQmFyU2VydmljZSxcclxuXHRcdFZpcnR1YWxTY3JvbGxTZXJ2aWNlLFxyXG5cdFx0RHJpbGxUaHJvdWdoU2VydmljZSxcclxuXHRdLFxyXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2FkZ2V0UGl2b3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdEBJbnB1dCgpIHBvcnRsZXQ7XHJcblx0QElucHV0KCkgZGFzaGJvYXJkO1xyXG5cdEBJbnB1dCgpIHBvcnRsZXRzO1xyXG5cdHByaXZhdGUgUGl2b3RfRGF0YTogSURhdGFTZXRbXTtcclxuXHRwcml2YXRlIGNvbmZpZztcclxuXHRwdWJsaWMgZGF0YVNvdXJjZVNldHRpbmdzOiBJRGF0YU9wdGlvbnM7XHJcblx0cHVibGljIGdyaWRTZXR0aW5nczogR3JpZFNldHRpbmdzO1xyXG5cdHByaXZhdGUgZXhjbHVkZUZpZWxkcyA9IFtdO1xyXG5cdHByaXZhdGUgZmlsdGVyU2V0dGluZ3MgPSBbXTtcclxuXHRwcml2YXRlIGRhdGVQaXBlRm9ybWF0O1xyXG5cdHB1YmxpYyB0cmFuc2xhdGlvbjtcclxuXHRAVmlld0NoaWxkKFwicGl2b3R2aWV3XCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG5cdHByaXZhdGUgcGl2b3RPYmo6IFBpdm90Vmlld0NvbXBvbmVudDtcclxuXHRAVmlld0NoaWxkKFwicGl2b3RmaWVsZGxpc3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcblx0cHVibGljIGZpZWxkbGlzdE9iajogUGl2b3RGaWVsZExpc3RDb21wb25lbnQ7XHJcblx0cHJpdmF0ZSBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcclxuXHRwcml2YXRlIGdyYW5kVG90YWxzID0ge307XHJcblx0cHJpdmF0ZSBzdWJUb3RhbHMgPSB7fTtcclxuXHRwcml2YXRlIGZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwcml2YXRlIHByZXZpb3VzU29ydDogSVNvcnQ7XHJcblx0cHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cdHByaXZhdGUgYWxsRGF0YVZhbHVlO1xyXG5cdC8vIHByaXZhdGUgY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3M7XHJcblx0cHJpdmF0ZSBpc0luaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdHByaXZhdGUgcGl2b3RTZWFyY2hCb3g6IE1hc2tlZFRleHRCb3g7XHJcblx0cHVibGljIHRvb2x0aXBTZXR0aW5ncyA9IHtcclxuXHRcdGVuYWJsZTogZmFsc2UsXHJcblx0fTtcclxuXHRwcml2YXRlIGNvbHVtblRleHRzID0gW107XHJcblx0cHJpdmF0ZSBjb25maWdGaWVsZHMgPSBbXTtcclxuXHRwcml2YXRlIHF1YXJ0ZXJGb3JtYXQgPSBbXHJcblx0XHR7IHZhbHVlOiBcIjAzLzIwMjFcIiwgZm9ybWF0OiBcIk1NL3l5eXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCIwMy8yMVwiLCBmb3JtYXQ6IFwiTU0vZGRcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCIzLzIwMjFcIiwgZm9ybWF0OiBcIk0veXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIjMvMjFcIiwgZm9ybWF0OiBcIk0veXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCJNYXJjaCAyMDIxXCIsIGZvcm1hdDogXCJNTU1NIHl5eXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCJNYXIsIDIwMjFcIiwgZm9ybWF0OiBcIk1NTSwgeXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIk1hcmNoLCAyMDIxXCIsIGZvcm1hdDogXCJNTU1NLCB5eXl5XCIgfSxcclxuXHRcdHsgdmFsdWU6IFwiMjAyMVwiLCBmb3JtYXQ6IFwieXl5eVwiIH0sXHJcblx0XTtcclxuXHR6b29tU2V0dGluZ3MgPSB7XHJcblx0XHRlbmFibGU6IGZhbHNlLFxyXG5cdH07XHJcblx0aXRlbURhdGFUeXBlU29ydEFyciA9IFtcclxuXHRcdFwiQXNzZXRzXCIsXHJcblx0XHRcIkxpYWJpbGl0aWVzXCIsXHJcblx0XHRcIkVxdWl0eVwiLFxyXG5cdFx0XCJQJkxcIixcclxuXHRcdFwiQ2FzaGZsb3dcIixcclxuXHRdO1xyXG5cdHByaXZhdGUgZm9ybWF0RGF0ZXMgPSBbXTtcclxuXHRwcml2YXRlIGN1c3RvbUNhbGN1bGF0ZWRGaWVsZHM6IGFueVtdID0gW107IC8vIOiHquWumuS5ieiuoeeul+WIl1xyXG5cdHByaXZhdGUgYWxsb3dlZENhbGN1bGF0ZWRGaWVsZHM6IGFueVtdID0gW107IC8vIOWFgeiuuOiHquWumuS5ieeul+azleeahOWtl+autVxyXG5cdHByaXZhdGUgemVyb0Zvcm1hdERhdGEgPSB7XHJcblx0XHRlbXB0eUxpc3Q6IFtdLFxyXG5cdFx0aGdMaXN0OiBbXSxcclxuXHR9O1xyXG5cdHByaXZhdGUgbWlsbGlvbkZpZWxkcyA9IFtdO1xyXG5cdHByaXZhdGUgdGVtcFN1YnRvdGFscyA9IFtdO1xyXG5cdHB1YmxpYyBvcmRlckJ5Q29sdW1uczsgLy8gRWc6IFwiRHVlRGF0ZSwgU2VxdWVuY2VcIlxyXG5cdHB1YmxpYyBpc0FwcGx5SVJSOiBib29sZWFuID0gZmFsc2U7XHJcblx0cHVibGljIGNhbGNJUlJEYXRhOiBhbnk7XHJcblx0cHJpdmF0ZSBwZXJjZW50TnVtRmllbGRzID0gW107XHJcblx0cHVibGljIHBhZ2VMb2FkaW5nO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2U6IERhc2hib2FyZFBvcmxldHNTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBEYXNoYm9hcmRTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdFx0QE9wdGlvbmFsKCkgQEluamVjdChQQkZfVE9LRU4pIHByaXZhdGUgcGJmOiBhbnksXHJcblxyXG5cdCkge31cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHR0aGlzLmdldEluZm8oKTtcclxuXHRcdEwxMG4ubG9hZCh7XHJcblx0XHRcdFwiZW4tVVNcIjoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR6aDoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRcInpoLUhhbnQtSEtcIjoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRqYToge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRrbzoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRmcjoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmdldERhdGEoKTtcclxuXHR9XHJcblxyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0Y2hhbmdlUGl2b3QoKS5zdWJzY3JpYmUoKHVwZGF0ZWQpID0+IHtcclxuXHRcdFx0XHRpZiAodXBkYXRlZCA9PT0gdGhpcy5wb3J0bGV0Lm5ld0lkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmdldERhdGEoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0U3RhcnRSZWZyZXNoKCkuc3Vic2NyaWJlKChkYXNoYm9hcmRJZCkgPT4ge1xyXG5cdFx0XHRcdGlmIChkYXNoYm9hcmRJZCA9PT0gdGhpcy5kYXNoYm9hcmQuaWQpIHtcclxuXHRcdFx0XHRcdHRoaXMucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldFVwZGF0ZWQoKS5zdWJzY3JpYmUoKG5ld0lkKSA9PiB7XHJcblx0XHRcdFx0aWYgKG5ld0lkID09PSB0aGlzLnBvcnRsZXQubmV3SWQgfHwgbmV3SWQgPT09IHRoaXMucG9ydGxldC5pZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5nZXREYXRhKCk7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRSZWZyZXNoR2FkZ2V0KCkuc3Vic2NyaWJlKChlKSA9PiB7XHJcblx0XHRcdFx0aWYgKCFlKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGlkID0gZVtcIm5ld0lkXCJdO1xyXG5cdFx0XHRcdGlmIChpZCA9PT0gdGhpcy5wb3J0bGV0Lm5ld0lkIHx8IGlkID09PSB0aGlzLnBvcnRsZXQuaWQpIHtcclxuXHRcdFx0XHRcdHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRUYWJsZUZvcm1hdCgpLnN1YnNjcmliZSgodXBkYXRlZCkgPT4ge1xyXG5cdFx0XHRcdGlmICh1cGRhdGVkID09PSB0aGlzLnBvcnRsZXQubmV3SWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2VcclxuXHRcdFx0XHQuY2xlYXJGaWVsZExpc3RPYnNlcnZhYmxlKClcclxuXHRcdFx0XHQuc3Vic2NyaWJlKCh1cGRhdGVkKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAodXBkYXRlZCA9PT0gdGhpcy5wb3J0bGV0Lm5ld0lkKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmRhdGFTb3VyY2UgPSBbXTtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLnVwZGF0ZURhdGFTb3VyY2UoKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyB0aXRsZSBjaGFuZ2VcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlUG9ydGxldFRpdGxlKCkuc3Vic2NyaWJlKCh1cGRhdGVkKSA9PiB7XHJcblx0XHRcdFx0aWYgKHVwZGF0ZWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuY29uZmlnID0gSlNPTi5wYXJzZSh0aGlzLnBvcnRsZXQuY29uZmlnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcblx0fVxyXG5cclxuXHRvbk1lbWJlckVkaXRvck9wZW4oYXJnczogYW55KTogdm9pZCB7XHJcblx0XHQvLyDkvaDlj6/ku6XlnKjov5nph4zmoLnmja7pnIDopoHkv67mlLlhcmdz5p2l6Ieq5a6a5LmJ6L+H5ruk56qX5Y+j55qE6KGM5Li6XHJcblx0XHQvLyAxMTI0NyDkuJPpl6jkuLppdGVtIGRhdGEgdHlwZeiAjOiuvue9rlxyXG5cdFx0aWYgKGFyZ3MuZmllbGROYW1lID09PSBcIkFjY291bnRUeXBlQ29kZVwiKSB7XHJcblx0XHRcdGxldCByZXMgPSBuZXcgQXJyYXkoNSkuZmlsbChudWxsKTtcclxuXHRcdFx0Y29uc3QgZmllbGRNZW1iZXJzID0gWy4uLmFyZ3MuZmllbGRNZW1iZXJzXTtcclxuXHJcblx0XHRcdGZvciAobGV0IGkgPSBmaWVsZE1lbWJlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuXHRcdFx0XHRsZXQgaW5kZXggPSAtMTtcclxuXHRcdFx0XHRjb25zdCBpdGVtID0gdGhpcy5pdGVtRGF0YVR5cGVTb3J0QXJyLmZpbmQoKG5hbWUsIGluZCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGZpZWxkTWVtYmVyc1tpXS5hY3R1YWxUZXh0ID09PSBuYW1lKSB7XHJcblx0XHRcdFx0XHRcdGluZGV4ID0gaW5kO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIGZpZWxkTWVtYmVyc1tpXS5hY3R1YWxUZXh0ID09PSBuYW1lO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdGlmICghaXRlbSkge1xyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGZpbGxJdGVtID0gZmllbGRNZW1iZXJzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHRyZXNbaW5kZXhdID0gZmlsbEl0ZW1bMF07XHJcblx0XHRcdH1cclxuXHRcdFx0cmVzID0gcmVzLmZpbHRlcigoaXRlbSkgPT4gaXRlbSkgfHwgW107XHJcblx0XHRcdGFyZ3MuZmllbGRNZW1iZXJzID0gWy4uLnJlcywgLi4uZmllbGRNZW1iZXJzXTtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5lLW1lbWJlci1lZGl0b3ItZGlhbG9nXCIpO1xyXG5cdFx0XHRcdGlmIChlbGUpIHtcclxuXHRcdFx0XHRcdGVsZS5xdWVyeVNlbGVjdG9yKFwiLmUtZmlsdGVyLXNvcnRcIikuc2V0QXR0cmlidXRlKFxyXG5cdFx0XHRcdFx0XHRcInN0eWxlXCIsXHJcblx0XHRcdFx0XHRcdFwiZGlzcGxheTogbm9uZVwiXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldEdyaWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuZ3JpZFNldHRpbmdzID0ge1xyXG5cdFx0XHRjb2x1bW5XaWR0aDogMTQwLFxyXG5cdFx0XHRyb3dIZWlnaHQ6IDQwLFxyXG5cdFx0XHRhbGxvd1NlbGVjdGlvbjogdHJ1ZSxcclxuXHRcdFx0c2VsZWN0aW9uU2V0dGluZ3M6IHtcclxuXHRcdFx0XHRtb2RlOiBcIkNlbGxcIixcclxuXHRcdFx0XHR0eXBlOiBcIk11bHRpcGxlXCIsXHJcblx0XHRcdFx0Y2VsbFNlbGVjdGlvbk1vZGU6IFwiQm94XCIsXHJcblx0XHRcdH0sXHJcblx0XHRcdGNvbHVtblJlbmRlcjogdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSgoYXJncykgPT4ge1xyXG5cdFx0XHRcdHRoaXMuc2V0Q29sdW1uc1JlbmRlcihhcmdzKTtcclxuXHRcdFx0fSkgYXMgYW55LFxyXG5cdFx0XHQvLyDljYfnuqflkI4g6buY6K6k5Lya5pyJ5a+85Ye65qC35byP6KaG55uW77yM6ZyA6KaB5omL5Yqo6K6+572u5a+85Ye65qCH6aKY5qC35byPXHJcblx0XHRcdGV4Y2VsSGVhZGVyUXVlcnlDZWxsSW5mbzogdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSgoYXJnczogYW55KSA9PiB7XHJcblx0XHRcdFx0Ly8gYXJncy5zdHlsZeaYr+S4qkV4Y2VsU3R5bGXnsbvlnotcclxuXHRcdFx0XHRhcmdzLnN0eWxlID0ge1xyXG5cdFx0XHRcdFx0Ym9sZDogdHJ1ZSwgLy8g5a2X5L2T5Yqg57KXXHJcblx0XHRcdFx0XHR2QWxpZ246IFwiQ2VudGVyXCIsXHJcblx0XHRcdFx0XHR3cmFwVGV4dDogZmFsc2UsIC8vIOS4jeaNouihjFxyXG5cdFx0XHRcdFx0aW5kZW50OiAwLFxyXG5cdFx0XHRcdFx0Ym9yZGVyczogbnVsbCwgLy8g5LiN6ZyA6KaBYm9yZGVyXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSkgYXMgYW55LFxyXG5cdFx0XHQvLyDljYfnuqflkI4g6buY6K6k5Lya5pyJ5a+85Ye65qC35byP6KaG55uW77yM6ZyA6KaB5omL5Yqo6K6+572u5a+85Ye65YaF5a655qC35byPXHJcblx0XHRcdGV4Y2VsUXVlcnlDZWxsSW5mbzogdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSgoYXJnczogYW55KSA9PiB7XHJcblx0XHRcdFx0Ly8gI2Y0ODZjZmZmIOi/memHjOi+k+WHuueahOaYr1JHQkEg6aKc6Imy5qC85byP77yMIHhsc3jph4zkuI3pnIDopoHpgI/mmI7luqYs5Y675o6J5bC+6YOoZmZcclxuXHRcdFx0XHRpZiAoYXJncy5zdHlsZSAmJiBhcmdzLnN0eWxlLmJhY2tDb2xvcikge1xyXG5cdFx0XHRcdFx0YXJncy5zdHlsZS5iYWNrQ29sb3IgPSBhcmdzLnN0eWxlLmJhY2tDb2xvci5zdWJzdHJpbmcoMCwgNyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGxldCBfc3R5bGU6IGFueSA9IHtcclxuXHRcdFx0XHRcdGJvbGQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0d3JhcFRleHQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0Ym9yZGVyczogbnVsbCxcclxuXHRcdFx0XHRcdGZvbnRDb2xvcjogYXJncy5zdHlsZS5mb250Q29sb3IsXHJcblx0XHRcdFx0XHRiYWNrQ29sb3I6IGFyZ3Muc3R5bGUuYmFja0NvbG9yLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0bGV0IGNvbEluZGV4ID0gYXJncy5jZWxsLmNvbEluZGV4O1xyXG5cdFx0XHRcdGxldCByb3dJbmRleCA9IGFyZ3MuY2VsbC5yb3dJbmRleDtcclxuXHRcdFx0XHRpZiAodGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzKSB7XHJcblx0XHRcdFx0XHQvLyBHcmFuZFRvdGFs5LiN6ZyA6KaB6aKc6ImyXHJcblx0XHRcdFx0XHRpZiAoYXJncy5kYXRhLmxlbmd0aCA9PT0gcm93SW5kZXggKyAxKSB7XHJcblx0XHRcdFx0XHRcdGRlbGV0ZSBfc3R5bGUuZm9udENvbG9yO1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgX3N0eWxlLmJhY2tDb2xvcjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFyZ3MuZGF0YVtyb3dJbmRleF1bY29sSW5kZXhdLmZvcm1hdHRlZFRleHQgPT0gXCJcIikge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGFyZ3Muc3R5bGUgPSBPYmplY3QuYXNzaWduKGFyZ3Muc3R5bGUsIF9zdHlsZSk7XHJcblx0XHRcdFx0aWYgKGFyZ3MudmFsdWUgPT09IFwiXCIgJiYgYXJncy5zdHlsZS5udW1iZXJGb3JtYXQpIHtcclxuXHRcdFx0XHRcdGFyZ3Muc3R5bGUubnVtYmVyRm9ybWF0ID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHRoaXMuZm9ybWF0RGF0ZXMgJiYgdGhpcy5mb3JtYXREYXRlcy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGxldCBkYXRlRmllbGRzID0gdGhpcy5mb3JtYXREYXRlcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBlbC5uYW1lO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdChhcmdzIGFzIGFueSkudmFsdWUgJiZcclxuXHRcdFx0XHRcdFx0KChhcmdzIGFzIGFueSkuY2VsbC5jb2xJbmRleCA9PT0gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZGF0ZUZpZWxkcy5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS5jZWxsLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBkYXRlRmllbGRzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLmNlbGwuYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdCAgKSlcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHQvL0N1c3RvbWl6ZSB0aGUgUm93IGhlYWRlcnMvQ29sdW1uIGhlYWRlcnMgYmFzZWQgb24geW91ciBuZWVkc1xyXG5cdFx0XHRcdFx0XHRsZXQgaGVhZGVycztcclxuXHRcdFx0XHRcdFx0aWYgKChhcmdzIGFzIGFueSkuY2VsbC5jb2xJbmRleCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSAoYXJncyBhcyBhbnkpLmNlbGwuYWN0dWFsVGV4dDtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBoZWFkZXJzID0gcGl2b3RWYWx1ZXNba11bal0uZm9ybWF0dGVkVGV4dDtcclxuXHRcdFx0XHRcdFx0XHRoZWFkZXJzID0gKGFyZ3MgYXMgYW55KS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoaGVhZGVycykge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBkYXRlID0gbmV3IERhdGUoaGVhZGVycyk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGxldCBxdWFydGVyID0gTWF0aC5mbG9vcihkYXRlLmdldE1vbnRoKCkgLyAzKSArIDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGxldCBmb3JtYXQ7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZm9ybWF0RGF0ZXMubWFwKChlbCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKChhcmdzIGFzIGFueSkuY2VsbC5jb2xJbmRleCA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS5jZWxsLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBlbC5mb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwubmFtZSA9PSAoYXJncyBhcyBhbnkpLmNlbGwuYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gZWwuZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdChhcmdzIGFzIGFueSkudmFsdWUgPSB0aGlzLmdldFF1YXJ0ZXJWYWx1ZShcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdCxcclxuXHRcdFx0XHRcdFx0XHRcdGRhdGUsXHJcblx0XHRcdFx0XHRcdFx0XHRxdWFydGVyXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSkgYXMgYW55LFxyXG5cdFx0fSBhcyBHcmlkU2V0dGluZ3M7XHJcblx0fVxyXG5cclxuXHRiZWZvcmVFeHBvcnQoZXhwb3J0RGF0YSkge1xyXG5cdFx0aWYgKGV4cG9ydERhdGEpIHtcclxuXHRcdFx0Y29uc3Qga2V5TWFwID0ge307XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzLmZvcm1hdFNldHRpbmdzLmZvckVhY2goKGRhdGEpID0+IHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRkYXRhLmZvcm1hdCA9PT0gXCIjLCMjIywsLjA7KCMsIyMjLCwuMClcIiB8fFxyXG5cdFx0XHRcdFx0ZGF0YS5mb3JtYXQgPT09IFwiIywjIyMsLDsoIywjIyMsLClcIiB8fFxyXG5cdFx0XHRcdFx0ZGF0YS5mb3JtYXQgPT09IFwiIywjIyMsLC4wMDsoIywjIyMsLC4wMClcIlxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0a2V5TWFwW2RhdGEubmFtZV0gPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRleHBvcnREYXRhLmRhdGFDb2xsZWN0aW9ucyAmJlxyXG5cdFx0XHRcdGV4cG9ydERhdGEuZGF0YUNvbGxlY3Rpb25zLmxlbmd0aFxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRleHBvcnREYXRhLmRhdGFDb2xsZWN0aW9uc1swXS5mb3JFYWNoKChyb3cpID0+IHtcclxuXHRcdFx0XHRcdHJvdy5mb3JFYWNoKChjZWxsKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChrZXlNYXBbY2VsbC5hY3R1YWxUZXh0XSkge1xyXG5cdFx0XHRcdFx0XHRcdGNlbGwudmFsdWUgPSBjZWxsLmFjdHVhbFZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0dHlwZW9mIGNlbGwudmFsdWUgPT09IFwib2JqZWN0XCIgJiZcclxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgY2VsbC5mb3JtYXR0ZWRUZXh0ID09PSBcInN0cmluZ1wiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGNlbGwudmFsdWUgPSBjZWxsLmZvcm1hdHRlZFRleHQ7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGdldERhdGEoKSB7XHJcblx0XHR0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcblx0XHRsZXQgY29sdW1ucyA9IFtdO1xyXG5cdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0bGV0IGZvcm1hdFNldHRpbmdzID0gW107XHJcblx0XHRsZXQgcm93cyA9IFtdO1xyXG5cdFx0bGV0IGZpZWxkTWFwcGluZyA9IFtdO1xyXG5cdFx0Ly8g5riF56m6Z3JhbmRUb3RhbHPlkoxzdWJUb3RhbHNcclxuXHRcdHRoaXMuZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuc3ViVG90YWxzID0ge307XHJcblx0XHR0aGlzLmNvbmZpZyA9IEpTT04ucGFyc2UodGhpcy5wb3J0bGV0LmNvbmZpZyk7XHJcblx0XHR0aGlzLnNldEdyaWRTZXR0aW5ncygpO1xyXG5cdFx0aWYgKHRoaXMuY29uZmlnLmZpZWxkcykge1xyXG5cdFx0XHRpZiAodGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5hbGxGaWVsZHNPYmpbdGhpcy5wb3J0bGV0LmlkXSkge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnRmllbGRzID1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2Uuc2V0Q29uZmlnRmllbGRzKFxyXG5cdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmFsbEZpZWxkc09ialtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBvcnRsZXQuaWRcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0dGhpcy5jb25maWcuZmllbGRzXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnRmllbGRzID0gWy4uLnRoaXMuY29uZmlnLmZpZWxkc107XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLlBpdm90X0RhdGEgPSB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldFJlc3VsdEJ5RGF0YVRhYmxlKFxyXG5cdFx0XHR0aGlzLnBvcnRsZXQsXHJcblx0XHRcdGZhbHNlLFxyXG5cdFx0XHRmYWxzZSxcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmQuaWRcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5vcmRlckJ5Q29sdW1ucyA9IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0T3JkZXJCeUNvbHVtbnNOZXcoXHJcblx0XHRcdHRoaXMucG9ydGxldC5maWd1cmVDb2RlLFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLlBpdm90X0RhdGEgPSBEYXRhVXRpbC5wYXJzZS5wYXJzZUpzb24odGhpcy5QaXZvdF9EYXRhKTtcclxuXHRcdGlmICh0aGlzLlBpdm90X0RhdGEgJiYgdGhpcy5QaXZvdF9EYXRhLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Ly8g56e76Zmk5YiX5ZCN5ZKM5pWw5o2ua2V55LiN5Yy56YWN55qE6aG5XHJcblx0XHRcdHRoaXMuZ2V0ZXhjbHVkZUZpZWxkcyh0aGlzLmNvbmZpZ0ZpZWxkcywgdGhpcy5QaXZvdF9EYXRhWzBdKTtcclxuXHRcdFx0aWYgKCF0aGlzLmFsbG93ZWRDYWxjdWxhdGVkRmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRcdHRoaXMuYWxsb3dlZENhbGN1bGF0ZWRGaWVsZHMgPSBPYmplY3Qua2V5cyh0aGlzLlBpdm90X0RhdGFbMF0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGl0ZW0gb2YgdGhpcy5jb25maWdGaWVsZHMpIHtcclxuXHRcdFx0XHQvLyDlrZfmrrXliIbnu4QgaHR0cHM6Ly9lajIuc3luY2Z1c2lvbi5jb20vYW5ndWxhci9kb2N1bWVudGF0aW9uL3Bpdm90dmlldy9maWVsZC1saXN0P3NlYXJjaD1maWVsZE1hcHBpbmcjZ3JvdXAtZmllbGRzLXVuZGVyLWRlc2lyZWQtZm9sZGVyLW5hbWVcclxuXHRcdFx0XHRmaWVsZE1hcHBpbmcucHVzaCh7XHJcblx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRjYXB0aW9uOiBpdGVtLmFkZHRpb25OYW1lXHJcblx0XHRcdFx0XHRcdD8gYCR7aXRlbS5sYW5nVmFsdWV9ICR7aXRlbS5hZGR0aW9uTmFtZX1gXHJcblx0XHRcdFx0XHRcdDogaXRlbS5sYW5nVmFsdWVcclxuXHRcdFx0XHRcdFx0PyBpdGVtLmxhbmdWYWx1ZVxyXG5cdFx0XHRcdFx0XHQ6IHRoaXMudHJhbnNsYXRpb25baXRlbS5sYW5nQ29kZV0gfHwgaXRlbS5sYW5nQ29kZSxcclxuXHJcblx0XHRcdFx0XHRkYXRhVHlwZTogaXRlbS5kYXRhVHlwZSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuY29uZmlnRmllbGRzKSB7XHJcblx0XHRcdHRoaXMucGVyY2VudE51bUZpZWxkcyA9IFtdO1xyXG5cdFx0XHR0aGlzLmZvcm1hdERhdGVzID0gW107XHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuaGdMaXN0ID0gW107XHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuZW1wdHlMaXN0ID0gW107XHJcblx0XHRcdHRoaXMubWlsbGlvbkZpZWxkcyA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbmZpZ0ZpZWxkcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0Ly8gU01QMi0yNDg2ICYgcGVyY2VudE51beeahGZvcm1hdOmXrumimFxyXG5cdFx0XHRcdGlmIChlbC5kYXRhVHlwZSA9PSBcInBlcmNlbnROdW1cIikge1xyXG5cdFx0XHRcdFx0dGhpcy5wZXJjZW50TnVtRmllbGRzLnB1c2goZWwuY29sTmFtZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQgJiZcclxuXHRcdFx0XHRcdFsyLCA1LCA4LCAxMSwgMTQsIDE3XS5pbmNsdWRlcyhlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXQpXHJcblx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5oZ0xpc3QucHVzaChlbC5jb2xOYW1lKTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkICYmXHJcblx0XHRcdFx0XHRbMywgNiwgOSwgMTIsIDE1LCAxOF0uaW5jbHVkZXMoZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0KVxyXG5cdFx0XHRcdClcclxuXHRcdFx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuZW1wdHlMaXN0LnB1c2goZWwuY29sTmFtZSk7XHJcblx0XHRcdFx0Ly8gIHBpdm90VGFibGVmb3JtYXRQZXJjZW50IOeZvuWIhuavlOS5n+aciTEwLDExLDEyIOS9huaYr+Wug+aYr+aYvuekujAuMDB455qE5qC85byP77yM5omA5Lul5b6X5o6S6ZmkXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZWwuZGF0YVR5cGUgIT09IFwicGVyY2VudFwiICYmXHJcblx0XHRcdFx0XHRlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkICYmXHJcblx0XHRcdFx0XHRbMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOF0uaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHRcdClcclxuXHRcdFx0XHRcdHRoaXMubWlsbGlvbkZpZWxkcy5wdXNoKGVsLmNvbE5hbWUpO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmRhdGFUeXBlID09PSBcIm51bWJlclwiICYmXHJcblx0XHRcdFx0XHQoIWVsLmZvcm1hdCB8fFxyXG5cdFx0XHRcdFx0XHQoZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCFlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCkpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHQvL1NNUDItMzAyNiBhbmQgU01QMi0zMDU5XHJcblx0XHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0XHRlbC5jb2xOYW1lICE9PSBcIlBvcnRJbnZTdGtcIiAmJlxyXG5cdFx0XHRcdFx0XHRcdGVsLmNvbE5hbWUgIT09IFwiUG9ydEZkSW52U3RrXCJcclxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuZHBcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiBcIiMjMC4jIyMjIyMjMFwiLFxyXG5cdFx0XHRcdFx0XHR1c2VHcm91cGluZzogdHJ1ZSxcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0KGVsLmRhdGFUeXBlID09PSBcInBlcmNlbnRcIiB8fFxyXG5cdFx0XHRcdFx0XHRlbC5kYXRhVHlwZSA9PT0gXCJwZXJjZW50TnVtXCIpICYmXHJcblx0XHRcdFx0XHQoIWVsLmZvcm1hdCB8fFxyXG5cdFx0XHRcdFx0XHQoZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCFlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCkpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtYXQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRlbC5kcFxyXG5cdFx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmRhdGFUeXBlID09PSBcIm11bHRpcGxlXCIgJiZcclxuXHRcdFx0XHRcdCghZWwuZm9ybWF0IHx8XHJcblx0XHRcdFx0XHRcdChlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0IWVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkKSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm1hdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRNdWx0aXBsZShcclxuXHRcdFx0XHRcdFx0XHRlbC5kcFxyXG5cdFx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChlbC5kYXRhVHlwZSA9PT0gXCJkYXRldGltZVwiIHx8IGVsLmRhdGFUeXBlID09PSBcImRhdGVcIikge1xyXG5cdFx0XHRcdFx0bGV0IGZvcm1hdCA9IFwiXCI7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGVsLmZvcm1hdFswXS5kYXRlVHlwZSA9PSBcIlF1YXJ0ZXJcIikge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmb3JtYXRfID0gZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0SW5mbyA9IHRoaXMucXVhcnRlckZvcm1hdC5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHQocXVyKSA9PiBxdXIudmFsdWUgPT0gZm9ybWF0X1xyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGZvcm1hdEluZm8ubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBmb3JtYXRJbmZvWzBdLmZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogZWwuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0OiBmb3JtYXRfLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcImRhdGVcIixcclxuXHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmZvcm1hdERhdGVzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGVsLmZvcm1hdFswXS5kYXRlVHlwZSA9PSBcIkRhdGVcIikge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmcm9tSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuaW5kZXhPZihcIihcIik7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHRvSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuaW5kZXhPZihcIilcIik7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdF8gPVxyXG5cdFx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5zbGljZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZnJvbUlkeCArIDEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRvSWR4XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoZm9ybWF0Xykge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkREL01NL1lZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC9NTS95eXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkREL01NL1lZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiZGQvTU0veXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0vREQvWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NL2RkL3l5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0vREQvWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJNTS9kZC95eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJZWVlZLU1NLUREXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwieXl5eS1NTS1kZFwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJZWS1NTS1ERFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcInl5LU1NLWRkXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkRELU1NLVlZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC1NTS15eXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkRELU1NLVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiZGQtTU0teXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0tREQtWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NLWRkLXl5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0tREQtWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJNTS1kZC15eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTU0gREQsIFlZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJNTU0gZGQsIHl5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQtTU1NLVlZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC1NTU0teXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCFmb3JtYXQpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogdGhpcy5kYXRlUGlwZUZvcm1hdCxcclxuXHRcdFx0XHRcdFx0XHR0eXBlOiBcImRhdGVcIixcclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0bmFtZTogZWwuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXQ6IGZvcm1hdCxcclxuXHRcdFx0XHRcdFx0XHR0eXBlOiBcImRhdGVcIixcclxuXHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdC8vY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgZm9ybWF0IHB1c2ggdG8gZm9ybWF0U2V0dGluZ3NcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgJiZcclxuXHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MubGVuZ3RoID4gMFxyXG5cdFx0KSB7XHJcblx0XHRcdHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRpZiAoZWwuZm9ybWF0U3RyaW5nICE9PSBcIlwiKSB7XHJcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gZm9ybWF0U2V0dGluZ3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuXHRcdFx0XHRcdFx0aWYgKGZvcm1hdFNldHRpbmdzW2ldLm5hbWUgPT09IGVsLm5hbWUpIHtcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5zcGxpY2UoaSwgMSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBlbC5uYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtYXQ6IGVsLmZvcm1hdFN0cmluZyxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRsZXQgc2VyaWVzID0gdGhpcy5jb25maWcueWF4aXMuc2VyaWVzO1xyXG5cdFx0aWYgKHNlcmllcykge1xyXG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIHNlcmllcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogaXRlbS5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0Y2FwdGlvbjogdGhpcy5nZXRDYXB0aW9uQnlOYW1lKGl0ZW0uY29sTmFtZSkgfHwgaXRlbS50aXRsZSxcclxuXHRcdFx0XHRcdHR5cGU6IGl0ZW0uY2FsTWV0aG9kLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0dmFsdWVzLnB1c2godmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRsZXQgZ3JvdXBzID0gdGhpcy5jb25maWcueGF4aXMuZ3JvdXBzO1xyXG5cdFx0aWYgKGdyb3Vwcykge1xyXG5cdFx0XHRmb3IgKGxldCBnaXRlbSBvZiBncm91cHMpIHtcclxuXHRcdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gZ2l0ZW0ubmFtZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKGZpZWxkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdGdpdGVtLnNob3dTdWJUb3RhbHMgPSBmaWVsZFswXS5zaG93U3ViVG90YWxzO1xyXG5cdFx0XHRcdFx0Z2l0ZW0uY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHR0aGlzLnRyYW5zbGF0aW9uW2ZpZWxkWzBdLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uIHx8XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyb3dzLnB1c2goZ2l0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5jb25maWcuY29sdW1uR3JvdXAgJiYgdGhpcy5jb25maWcuY29sdW1uR3JvdXAubGVuZ3RoKSB7XHJcblx0XHRcdGZvciAobGV0IGl0ZW0gb2YgdGhpcy5jb25maWcuY29sdW1uR3JvdXApIHtcclxuXHRcdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gaXRlbS5uYW1lXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0aXRlbS5zaG93U3ViVG90YWxzID0gZmllbGRbMF0uc2hvd1N1YlRvdGFscztcclxuXHRcdFx0XHRcdGl0ZW0uY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHR0aGlzLnRyYW5zbGF0aW9uW2ZpZWxkWzBdLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nQ29kZSB8fFxyXG5cdFx0XHRcdFx0XHRpdGVtLmNhcHRpb247XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbHVtbnMucHVzaChpdGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0bGV0IGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MgPSBbXTtcclxuXHRcdHRoaXMuY29uZmlnRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblx0XHRcdGlmIChmaWVsZC5mb3JtYXQgJiYgZmllbGQuZm9ybWF0Lmxlbmd0aCkge1xyXG5cdFx0XHRcdGlmIChmaWVsZC5mb3JtYXRbMF0uZm9udFNldHRpbmdDaGVja2VkKSB7XHJcblx0XHRcdFx0XHRsZXQgY29uZGl0aW9uYWxGb3JtYXRPYmogPSB7XHJcblx0XHRcdFx0XHRcdGFwcGx5R3JhbmRUb3RhbHM6IHRydWUsXHJcblx0XHRcdFx0XHRcdG1lYXN1cmU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdHZhbHVlMTogbnVsbCxcclxuXHRcdFx0XHRcdFx0dmFsdWUyOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25zOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRzdHlsZToge1xyXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRjb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRmb250RmFtaWx5OiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGZvbnRTaXplOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGxldCBuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmogPSB7XHJcblx0XHRcdFx0XHRcdGFwcGx5R3JhbmRUb3RhbHM6IHRydWUsXHJcblx0XHRcdFx0XHRcdG1lYXN1cmU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdHZhbHVlMTogbnVsbCxcclxuXHRcdFx0XHRcdFx0dmFsdWUyOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25zOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRzdHlsZToge1xyXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRjb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRmb250RmFtaWx5OiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGZvbnRTaXplOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdC8vIGZvbnQgc2V0dGluZyBzdGFydFxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLm1lYXN1cmUgPVxyXG5cdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGaWVsZDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLm1lYXN1cmUgPVxyXG5cdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGaWVsZDtcclxuXHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkICYmXHJcblx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5jb21wYXJlU2VsZWN0XHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRDb21wYXJlQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMjtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTI7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0sXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdFNldHRpbmdzLnB1c2gobmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MudW5zaGlmdChjb25kaXRpb25hbEZvcm1hdE9iaik7XHJcblx0XHRcdFx0XHQvLyBmb250IHNldHRpbmcgZW5kXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGxldCBmb3JtYXRTZXR0aW5nc09iaiA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IFwiXCIsXHJcblx0XHRcdFx0XHRmb3JtYXQ6IFwiXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQpIHtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLm5hbWUgPSBmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGaWVsZDtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHN3aXRjaCAoZmllbGQuZm9ybWF0WzBdLmRhdGFUeXBlKSB7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJpbnRlZ2VyXCI6XHJcblx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0ID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdEludGVnZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSBcInBlcmNlbnROdW1cIjpcclxuXHRcdFx0XHRcdFx0Y2FzZSBcInBlcmNlbnRcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwibXVsdGlwbGVcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0TXVsdGlwbGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSBcImRhdGVcIjpcclxuXHRcdFx0XHRcdFx0Y2FzZSBcImRhdGV0aW1lXCI6XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdCA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGZpZWxkLmZvcm1hdCAmJiBmaWVsZC5mb3JtYXQubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0WzBdLmRhdGVUeXBlID09IFwiUXVhcnRlclwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZmllbGQuZm9ybWF0WzBdLmRhdGVUeXBlID09IFwiRGF0ZVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBmcm9tSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5LmluZGV4T2YoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIihcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCB0b0lkeCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5pbmRleE9mKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuc2xpY2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmcm9tSWR4ICsgMSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvSWR4XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKGZvcm1hdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmogPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IGZpZWxkLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBmaWVsZC5kYXRhVHlwZSA9IFwic3RyaW5nXCI7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9IHRoaXMuZGF0ZVBpcGVGb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09ialtcInR5cGVcIl0gPSBcImRhdGVcIjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5kYXRhVHlwZSAhPT0gXCJzdHJpbmdcIiAmJlxyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0XHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5wdXNoKGZvcm1hdFNldHRpbmdzT2JqKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzID0gdGhpcy5jb25maWcuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1xyXG5cdFx0XHQ/IHRoaXMuY29uZmlnLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNcclxuXHRcdFx0OiBbXTtcclxuXHJcblx0XHQvLyBTTVAyLTQ1ODIgQUdJQyAtIERhc2hib2FyZCBpdGVtIHNlcXVlbmNlXHJcblx0XHRsZXQgaXNFeGlzdFNlcSA9IGZhbHNlO1xyXG5cdFx0bGV0IHNvcnRTZXR0aW5ncyA9IHRoaXMuY29uZmlnLnNvcnRTZXR0aW5ncyB8fCBbXTtcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5QaXZvdF9EYXRhICYmXHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YVswXSAmJlxyXG5cdFx0XHR0aGlzLlBpdm90X0RhdGFbMF0uU2VxICE9PSBudWxsXHJcblx0XHQpIHtcclxuXHRcdFx0Ly8g5Y+W5raITmFtZeeahOm7mOiupOaOkuW6j++8jOagueaNrlNlceadpeaOkuW6j1xyXG5cdFx0XHRzb3J0U2V0dGluZ3MucHVzaCh7IG5hbWU6IFwiTmFtZVwiLCBvcmRlcjogXCJOb25lXCIgfSk7XHJcblx0XHRcdGlzRXhpc3RTZXEgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGZpbHRlclNldHRpbmdzID0gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5jaGVja0ZpbHRlclNldHRpbmdzKFxyXG5cdFx0XHR0aGlzLmNvbmZpZyxcclxuXHRcdFx0dGhpcy5jb25maWdGaWVsZHMsXHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YVxyXG5cdFx0KTtcclxuXHRcdGxldCBuYW1lRmlsdGVyID0gZmlsdGVyU2V0dGluZ3MuZmluZCgoeCkgPT4geC5uYW1lID09PSBcIk5hbWVcIik7XHJcblx0XHQvLyDlrZjlnKggTmFtZeeahGZpbHRlcuaXtu+8jOS8muaMieeFp+m7mOiupOaOkuW6j++8jOmcgOimgeWvuU5hbWXov5vooYxTZXHmjpLluo/lpITnkIZcclxuXHRcdGlmIChpc0V4aXN0U2VxICYmIG5hbWVGaWx0ZXIgJiYgcm93cy5zb21lKCh4KSA9PiB4Lm5hbWUgPT09IFwiTmFtZVwiKSkge1xyXG5cdFx0XHRsZXQgaXRlbXMgPSBuYW1lRmlsdGVyLml0ZW1zOyAvLyDmi7/liLDlvZPliY3mjpLluo/vvIzpu5jorqRBLVpcclxuXHRcdFx0bGV0IHNlcUFyciA9IFtdO1xyXG5cdFx0XHRpdGVtcy5mb3JFYWNoKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0bGV0IG9iaiA9IHRoaXMuUGl2b3RfRGF0YS5maW5kKCh4KSA9PiB4Lk5hbWUgPT09IG5hbWUpO1xyXG5cdFx0XHRcdGxldCBpdGVtOiBhbnkgPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBuYW1lLFxyXG5cdFx0XHRcdFx0c2VxOiBvYmouU2VxLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0c2VxQXJyLnB1c2goaXRlbSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRzZXFBcnIuc29ydCgoYSwgYikgPT4gYS5zZXEgLSBiLnNlcSk7XHJcblx0XHRcdG5hbWVGaWx0ZXIuaXRlbXMgPSBzZXFBcnIubWFwKCh4KSA9PiB4Lm5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGFsbEZpZWxkcyA9XHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuYWxsRmllbGRzT2JqW3RoaXMucG9ydGxldC5pZF07XHJcblx0XHRpZiAoYWxsRmllbGRzKSB7XHJcblx0XHRcdHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW0gPSBhbGxGaWVsZHMuZmluZChcclxuXHRcdFx0XHRcdChmaWVsZCkgPT4gZmllbGQuY29sTmFtZSA9PT0gdmFsdWUubmFtZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKGl0ZW0pIHtcclxuXHRcdFx0XHRcdHZhbHVlLmNhcHRpb24gPVxyXG5cdFx0XHRcdFx0XHQoaXRlbS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRpdGVtLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHRpdGVtLmZvcm1hdFswXS5kaXNwbGF5TmFtZSkgfHxcclxuXHRcdFx0XHRcdFx0aXRlbS5sYW5nVmFsdWUgfHxcclxuXHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGlvbltpdGVtLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0XHRpdGVtLmxhbmdDb2RlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRsZXQgaGFzSXRlbURhdGFUeXBlID0gZmFsc2U7XHJcblx0XHRpZiAodGhpcy5QaXZvdF9EYXRhKSB7XHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YS5tYXAoKGRhdGEpID0+IHtcclxuXHRcdFx0XHRpZiAoZGF0YVtcIkFjY291bnRUeXBlQ29kZVwiXSkge1xyXG5cdFx0XHRcdFx0aGFzSXRlbURhdGFUeXBlID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cm93cy5mb3JFYWNoKChyb3cpID0+IHtcclxuXHRcdFx0XHRcdGlmIChkYXRhW3Jvdy5uYW1lXSA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0XHRkYXRhW3Jvdy5uYW1lXSA9IFwibnVsbFwiO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdGlmIChoYXNJdGVtRGF0YVR5cGUpIHtcclxuXHRcdFx0c29ydFNldHRpbmdzLnB1c2goe1xyXG5cdFx0XHRcdG5hbWU6IFwiQWNjb3VudFR5cGVDb2RlXCIsXHJcblx0XHRcdFx0b3JkZXI6IFwiQXNjZW5kaW5nXCIsXHJcblx0XHRcdFx0bWVtYmVyc09yZGVyOiBbLi4udGhpcy5pdGVtRGF0YVR5cGVTb3J0QXJyXSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLmNvbmZpZy5maWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT4ge1xyXG5cdFx0XHRmaWx0ZXIuY2FwdGlvbiA9XHJcblx0XHRcdFx0dGhpcy5nZXRDYXB0aW9uQnlOYW1lKGZpbHRlci5uYW1lKSB8fCBmaWx0ZXIuY2FwdGlvbjtcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5kYXRhU291cmNlU2V0dGluZ3MgPSB7XHJcblx0XHRcdGRhdGFTb3VyY2U6IHRoaXMuUGl2b3RfRGF0YSB8fCBbXSxcclxuXHRcdFx0cm93czogcm93cyB8fCBbXSxcclxuXHRcdFx0Y29sdW1uczogY29sdW1ucyB8fCBbXSxcclxuXHRcdFx0dmFsdWVzOiB2YWx1ZXMgfHwgW10sXHJcblx0XHRcdGZpbHRlcnM6IHRoaXMuY29uZmlnLmZpbHRlcnMsXHJcblx0XHRcdGZpbHRlclNldHRpbmdzOiBmaWx0ZXJTZXR0aW5ncyxcclxuXHRcdFx0ZXhjbHVkZUZpZWxkczogdGhpcy5leGNsdWRlRmllbGRzLFxyXG5cdFx0XHRmb3JtYXRTZXR0aW5nczogZm9ybWF0U2V0dGluZ3MsXHJcblx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3M6IGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MsXHJcblx0XHRcdC8vIOeUqOS6juaUtui1t+WxleW8gOaMh+WumuWxgue6pywg6L+Z546p5oSP5Y+q6IO95bGV5byA56ys5LiA5bGCLFxyXG5cdFx0XHQvLyDlv4Xpobvorr7lrppleHBhbmRBbGwg5Li6ZmFsc2XvvIjpu5jorqTmmK9mYWxzZe+8ie+8jCDov5nmoLflrZDmiY3og73lrp7njrDlj6rlsZXlvIDkuKTlsYJcclxuXHRcdFx0Ly8gZHJpbGxlZE1lbWJlcnMsXHJcblx0XHRcdGV4cGFuZEFsbDogdHJ1ZSxcclxuXHRcdFx0ZW5hYmxlU29ydGluZzogdHJ1ZSxcclxuXHRcdFx0ZmllbGRNYXBwaW5nOiBmaWVsZE1hcHBpbmcsXHJcblx0XHRcdGNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzOiB0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncyxcclxuXHRcdFx0c29ydFNldHRpbmdzOiBzb3J0U2V0dGluZ3MsXHJcblx0XHRcdC8vIGdyb3VwU2V0dGluZ3M6IHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3MsXHJcblx0XHRcdHZhbHVlU29ydFNldHRpbmdzOiB0aGlzLmNvbmZpZy52YWx1ZVNvcnRTZXR0aW5ncyxcclxuXHRcdFx0c2hvd0dyYW5kVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdHNob3dSb3dHcmFuZFRvdGFsczogdGhpcy5jb25maWcuc2hvd1Jvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRzaG93Q29sdW1uR3JhbmRUb3RhbHM6IHRoaXMuY29uZmlnLnNob3dDb2x1bW5HcmFuZFRvdGFscyxcclxuXHRcdFx0c2hvd1N1YlRvdGFsczogdGhpcy5jb25maWcuc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0c2hvd1Jvd1N1YlRvdGFsczogdGhpcy5jb25maWcuc2hvd1Jvd1N1YlRvdGFscyxcclxuXHRcdFx0c2hvd0NvbHVtblN1YlRvdGFsczogdGhpcy5jb25maWcuc2hvd0NvbHVtblN1YlRvdGFscyxcclxuXHRcdH07XHJcblx0XHRjb25zb2xlLmxvZyhcInRoaXMuZGF0YVNvdXJjZVNldHRpbmdzXCIsIHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzKTtcclxuXHJcblx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHR9XHJcblxyXG5cdGdldENhcHRpb25CeU5hbWUobmFtZVN0cmluZykge1xyXG5cdFx0aWYgKCFuYW1lU3RyaW5nKSByZXR1cm4gXCJcIjtcclxuXHRcdGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmluZCgoZWwpID0+IGVsLmNvbE5hbWUgPT09IG5hbWVTdHJpbmcpO1xyXG5cclxuXHRcdHJldHVybiBmaWVsZFxyXG5cdFx0XHQ/IGZpZWxkLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0dGhpcy50cmFuc2xhdGlvbltmaWVsZCAmJiBmaWVsZC5sYW5nQ29kZV0gfHxcclxuXHRcdFx0XHRcdGZpZWxkLmxhbmdDb2RlXHJcblx0XHRcdDogXCJcIjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhZnRlclBvcHVsYXRlKGFyZ3M6IEVuZ2luZVBvcHVsYXRlZEV2ZW50QXJncyk6IHZvaWQge1xyXG5cdFx0dGhpcy50ZW1wU3VidG90YWxzID0gW107XHJcblx0XHR0aGlzLmdyYW5kVG90YWxzID0ge307XHJcblx0XHR0aGlzLnN1YlRvdGFscyA9IHt9O1xyXG5cdFx0bGV0IHRlbXBzaG93QXJyYXkgPSBbXTtcclxuXHRcdHRoaXMuY29uZmlnLnlheGlzLnNlcmllcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRpdGVtLmhhc093blByb3BlcnR5KFwic2hvd1N1YlRvdGFsc1wiKSAmJlxyXG5cdFx0XHRcdGl0ZW0uaGFzT3duUHJvcGVydHkoXCJzaG93R3JhbmRUb3RhbHNcIilcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0dGVtcHNob3dBcnJheS5wdXNoKHtcclxuXHRcdFx0XHRcdG5hbWU6IGl0ZW0uY29sTmFtZSxcclxuXHRcdFx0XHRcdGNhbE1ldGhvZDogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0XHRzaG93U3ViVG90YWxzOiBpdGVtLnNob3dTdWJUb3RhbHMsXHJcblx0XHRcdFx0XHRzaG93R3JhbmRUb3RhbHM6IGl0ZW0uc2hvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChpdGVtLmhhc093blByb3BlcnR5KFwic2hvd0dyYW5kVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHR0ZW1wc2hvd0FycmF5LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGNhbE1ldGhvZDogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0XHRcdHNob3dHcmFuZFRvdGFsczogaXRlbS5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoXCJzaG93U3ViVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHR0ZW1wc2hvd0FycmF5LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGNhbE1ldGhvZDogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0XHRcdHNob3dTdWJUb3RhbHM6IGl0ZW0uc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqICYmIHRoaXMucGl2b3RPYmopIHtcclxuXHRcdFx0dGhpcy5jb25maWcuY29sdW1uR3JvdXAgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcueGF4aXMuZ3JvdXBzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLnlheGlzLnNlcmllcyA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5maWx0ZXJzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmZpbHRlclNldHRpbmdzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzID0gW107XHJcblx0XHRcdGxldCBncm91cFNldHRpbmdzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiZ3JvdXBTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBjb2x1bW5zID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiY29sdW1uc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCByb3dzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwicm93c1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBmaWx0ZXJzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiZmlsdGVyc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBmaWx0ZXJTZXR0aW5ncyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcImZpbHRlclNldHRpbmdzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IHZhbHVlcyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcInZhbHVlc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBzb3J0U2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJzb3J0U2V0dGluZ3NcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRsZXQgY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJjYWxjdWxhdGVkRmllbGRTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChncm91cFNldHRpbmdzLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRcdGZvciAobGV0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0bmFtZTogY29sdW1uLm5hbWUsXHJcblx0XHRcdFx0XHRcdGNhcHRpb246XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRDYXB0aW9uQnlOYW1lKGNvbHVtbi5uYW1lKSB8fFxyXG5cdFx0XHRcdFx0XHRcdGNvbHVtbi5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vSWYgdGhlcmUgaXMgYSBncm91cCwgZmlyc3QgZmlsdGVyIHRoZSBjb2x1bW5zIG9mIHRoZSBncm91cCBmaWVsZCwgYW5kIHRoZW4gb25seSBzYXZlIHRoZSBsYXN0IG9uZVxyXG5cdFx0XHRcdGZvciAobGV0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdFx0XHRpZiAoIXN0YXJ0c1dpdGgoY29sdW1uLm5hbWUsIGdyb3VwU2V0dGluZ3NbMF0ubmFtZSArIFwiX1wiKSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lOiBjb2x1bW4ubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRjYXB0aW9uOlxyXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uLm5hbWUgPT09IGdyb3VwU2V0dGluZ3NbMF0ubmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IFwiXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmdldENhcHRpb25CeU5hbWUoY29sdW1uLm5hbWUpIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgY29sdW1uLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKGxldCByb3cgb2Ygcm93cykge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLnhheGlzLmdyb3Vwcy5wdXNoKHtcclxuXHRcdFx0XHRcdG5hbWU6IHJvdy5uYW1lLFxyXG5cdFx0XHRcdFx0Y2FwdGlvbjogdGhpcy5nZXRDYXB0aW9uQnlOYW1lKHJvdy5uYW1lKSB8fCByb3cuY2FwdGlvbixcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKGxldCBmaWx0ZXIgb2YgZmlsdGVycykge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmZpbHRlcnMucHVzaCh7XHJcblx0XHRcdFx0XHRuYW1lOiBmaWx0ZXIubmFtZSxcclxuXHRcdFx0XHRcdGNhcHRpb246XHJcblx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FwdGlvbkJ5TmFtZShmaWx0ZXIubmFtZSkgfHwgZmlsdGVyLmNhcHRpb24sXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuZmlsdGVyU2V0dGluZ3MgJiYgdGhpcy5maWx0ZXJTZXR0aW5ncy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0YXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3MgPSB0aGlzLmZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmZpbHRlclNldHRpbmdzID0gdGhpcy5maWx0ZXJTZXR0aW5ncztcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5maWx0ZXJTZXR0aW5ncztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy5maWx0ZXJTZXR0aW5ncyA9IGZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xyXG5cdFx0XHRcdGxldCBzZXJpZXNEYXRhO1xyXG5cdFx0XHRcdGxldCB0ZW1wU2hvd09iajtcclxuXHRcdFx0XHRsZXQgZmlsdGVyVGVtcHNob3dBcnJheSA9IFtdO1xyXG5cdFx0XHRcdGlmICh0ZW1wc2hvd0FycmF5Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0ZmlsdGVyVGVtcHNob3dBcnJheSA9IHRlbXBzaG93QXJyYXkuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHQoaXRlbSkgPT5cclxuXHRcdFx0XHRcdFx0XHRpdGVtLm5hbWUgPT09IHZhbHVlLm5hbWUgJiZcclxuXHRcdFx0XHRcdFx0XHRpdGVtLmNhbE1ldGhvZCA9PT0gdmFsdWUudHlwZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGlmIChmaWx0ZXJUZW1wc2hvd0FycmF5Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHR0ZW1wU2hvd09iaiA9IGZpbHRlclRlbXBzaG93QXJyYXlbMF07XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHR0ZW1wU2hvd09iai5oYXNPd25Qcm9wZXJ0eShcInNob3dTdWJUb3RhbHNcIikgJiZcclxuXHRcdFx0XHRcdFx0XHR0ZW1wU2hvd09iai5oYXNPd25Qcm9wZXJ0eShcInNob3dHcmFuZFRvdGFsc1wiKVxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRzZXJpZXNEYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29sTmFtZTogdmFsdWUubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNhbE1ldGhvZDogdmFsdWUudHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB2YWx1ZS5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2hvd1N1YlRvdGFsczogdGVtcFNob3dPYmouc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdFx0XHRcdHNob3dHcmFuZFRvdGFsczogdGVtcFNob3dPYmouc2hvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRlbXBTaG93T2JqLmhhc093blByb3BlcnR5KFwic2hvd0dyYW5kVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzZXJpZXNEYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xOYW1lOiB2YWx1ZS5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYWxNZXRob2Q6IHZhbHVlLnR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB2YWx1ZS5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93R3JhbmRUb3RhbHM6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGVtcFNob3dPYmouc2hvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRlbXBTaG93T2JqLmhhc093blByb3BlcnR5KFwic2hvd1N1YlRvdGFsc1wiKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0c2VyaWVzRGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sTmFtZTogdmFsdWUubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiB2YWx1ZS50eXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdmFsdWUuY2FwdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd1N1YlRvdGFsczogdGVtcFNob3dPYmouc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICghc2VyaWVzRGF0YSkge1xyXG5cdFx0XHRcdFx0c2VyaWVzRGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0Y29sTmFtZTogdmFsdWUubmFtZSxcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHZhbHVlLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdGNhbE1ldGhvZDogdmFsdWUudHlwZSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuY29uZmlnLnlheGlzLnNlcmllcy5wdXNoKHNlcmllc0RhdGEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGNhbGN1bGF0ZSBvZiBjYWxjdWxhdGVkRmllbGRTZXR0aW5ncykge1xyXG5cdFx0XHRcdGNvbnN0IGNhbGN1bGF0ZURhdGEgPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBjYWxjdWxhdGUubmFtZSxcclxuXHRcdFx0XHRcdGZvcm11bGE6IGNhbGN1bGF0ZS5mb3JtdWxhLFxyXG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOlxyXG5cdFx0XHRcdFx0XHRjYWxjdWxhdGUuZm9ybWF0U3RyaW5nID09PSBcIlwiXHJcblx0XHRcdFx0XHRcdFx0PyBcIk4yXCJcclxuXHRcdFx0XHRcdFx0XHQ6IGNhbGN1bGF0ZS5mb3JtYXRTdHJpbmcsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncy5wdXNoKGNhbGN1bGF0ZURhdGEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuY29uZmlnLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMgPSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHM7XHJcblx0XHRcdHRoaXMuY29uZmlnLnNvcnRTZXR0aW5ncyA9IHNvcnRTZXR0aW5ncztcclxuXHRcdFx0dGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncyA9IGdyb3VwU2V0dGluZ3M7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLnVwZGF0ZVZpZXcodGhpcy5waXZvdE9iaik7XHJcblx0XHR9XHJcblx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0Ly9yZW1vdmUgdGhlIHNvcnRcclxuXHRcdGlmICh0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3MubGVuZ3RoID4gMCkge1xyXG5cdFx0XHR0aGlzLnByZXZpb3VzU29ydCA9IHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mbztcclxuXHRcdFx0KHRoaXMuZmllbGRsaXN0T2JqIGFzIGFueSkubGFzdFNvcnRJbmZvID0gW107XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYWZ0ZXJFbmdpbmVQb3B1bGF0ZShhcmdzOiBhbnkpIHtcclxuXHRcdGlmICghQnJvd3Nlci5pc0RldmljZSAmJiB0aGlzLmZpZWxkbGlzdE9iaiAmJiB0aGlzLnBpdm90T2JqKSB7XHJcblx0XHRcdHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iaixcclxuXHRcdFx0XHRcImdyb3VwU2V0dGluZ3NcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmopIHRoaXMuZmllbGRsaXN0T2JqLnVwZGF0ZSh0aGlzLnBpdm90T2JqKTtcclxuXHRcdFx0dGhpcy5waXZvdE9iai5ncmlkLnF1ZXJ5Q2VsbEluZm8gPSB0aGlzLnF1ZXJ5Q2VsbC5iaW5kKHRoaXMpO1xyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmdyaWQuaGVhZGVyQ2VsbEluZm8gPSB0aGlzLmhlYWRlckNlbGwuYmluZCh0aGlzKTtcclxuXHRcdFx0Ly8gU01QMi0zOTI5IHJvbGxiYWNrXHJcblx0XHRcdC8vIGlmICghdGhpcy5pc0FwcGx5SVJSKVxyXG5cdFx0XHQvLyBcdHRoaXMuZ2V0Q2FsY3VsYXRpb25SZXN1bHRCeURhc2hib2FyZERhdGFUYWJsZUlkKCk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5QaXZvdF9EYXRhICYmIHRoaXMuUGl2b3RfRGF0YS5sZW5ndGgpIHtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5lbmdpbmVQb3B1bGF0ZWQoYXJncyk7XHJcblx0XHRcdH0sIDE1MDApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKG9iaiwga2V5KSB7XHJcblx0XHRsZXQgcHJvcCA9IG51bGw7XHJcblx0XHRpZiAob2JqICYmIG9iai5kYXRhU291cmNlU2V0dGluZ3MpIHtcclxuXHRcdFx0cHJvcCA9IG9iai5kYXRhU291cmNlU2V0dGluZ3Nba2V5XTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwcm9wKSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiICYmXHJcblx0XHRcdFx0cHJvcC5sZW5ndGggPiAwXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHByb3AgPSBwcm9wLm1hcCgoaXRlbSkgPT4gaXRlbS5wcm9wZXJ0aWVzIHx8IGl0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcHJvcDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBlbmdpbmVQb3B1bGF0aW5nKGFyZ3MpIHtcclxuXHRcdHRoaXMuZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuc3ViVG90YWxzID0ge307XHJcblx0XHR0aGlzLmFsbERhdGFWYWx1ZSA9IFtdO1xyXG5cdFx0Ly8gaWYgKGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5ncy5sZW5ndGgpIHtcclxuXHRcdC8vIFx0Zm9yIChcclxuXHRcdC8vIFx0XHRsZXQgaSA9IDA7XHJcblx0XHQvLyBcdFx0aSA8IGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5ncy5sZW5ndGg7XHJcblx0XHQvLyBcdFx0aSsrXHJcblx0XHQvLyBcdCkge1xyXG5cdFx0Ly8gXHRcdGlmIChcclxuXHRcdC8vIFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mbyAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvLm5hbWUgPT09XHJcblx0XHQvLyBcdFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5nc1tpXS5uYW1lICYmXHJcblx0XHQvLyBcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5sYXN0U29ydEluZm8ub3JkZXIgPT09IFwiQXNjZW5kaW5nXCIgJiZcclxuXHRcdC8vIFx0XHRcdCEoXHJcblx0XHQvLyBcdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mby5uYW1lID09PVxyXG5cdFx0Ly8gXHRcdFx0XHRcdHRoaXMucHJldmlvdXNTb3J0Lm5hbWUgJiZcclxuXHRcdC8vIFx0XHRcdFx0dGhpcy5wcmV2aW91c1NvcnQub3JkZXIgPT09IFwiTm9uZVwiXHJcblx0XHQvLyBcdFx0XHQpXHJcblx0XHQvLyBcdFx0KSB7XHJcblx0XHQvLyBcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3NbaV0ub3JkZXIgPSBcIk5vbmVcIjtcclxuXHRcdC8vIFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5wcmV2aW91c1NvcnQgJiZcclxuXHRcdC8vIFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mbyAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvLm5hbWUgPT09XHJcblx0XHQvLyBcdFx0XHRcdHRoaXMucHJldmlvdXNTb3J0Lm5hbWUgJiZcclxuXHRcdC8vIFx0XHRcdHRoaXMucHJldmlvdXNTb3J0Lm9yZGVyID09PSBcIkFzY2VuZGluZ1wiXHJcblx0XHQvLyBcdFx0KSB7XHJcblx0XHQvLyBcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3NbaV0ub3JkZXIgPSBcIkFzY2VuZGluZ1wiO1xyXG5cdFx0Ly8gXHRcdH1cclxuXHRcdC8vIFx0fVxyXG5cdFx0Ly8gfVxyXG5cdH1cclxuXHJcblx0cHVibGljIGNlbGxDbGljayhhcmdzKSB7XHJcblx0XHRpZiAoYXJncy5jdXJyZW50Q2VsbC5jbGFzc0xpc3QuY29udGFpbnMoXCJlLWhlYWRlcmNlbGxcIikpIHtcclxuXHRcdFx0dGhpcy5mbGFnID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdC8vIOa4hemZpOaOkuW6j1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5zb3J0T3JkZXIgJiZcclxuXHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVTb3J0U2V0dGluZ3MuaGVhZGVyVGV4dCAmJlxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5zb3J0T3JkZXIgPT09XHJcblx0XHRcdFx0XCJEZXNjZW5kaW5nXCIgJiZcclxuXHRcdFx0YXJncy5kYXRhLnZhbHVlU29ydCAmJlxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5oZWFkZXJUZXh0ID09PVxyXG5cdFx0XHRcdGFyZ3MuZGF0YS52YWx1ZVNvcnQubGV2ZWxOYW1lXHJcblx0XHQpIHtcclxuXHRcdFx0dGhpcy5waXZvdE9iai5zZXRQcm9wZXJ0aWVzKFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGRhdGFTb3VyY2VTZXR0aW5nczoge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZVNvcnRTZXR0aW5nczoge1xyXG5cdFx0XHRcdFx0XHRcdHNvcnRPcmRlcjogXCJEZXNjZW5kaW5nXCIsXHJcblx0XHRcdFx0XHRcdFx0aGVhZGVyVGV4dDogXCJcIixcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR0cnVlXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdHRoaXMuZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy52YWx1ZVNvcnRTZXR0aW5ncyA9IHt9O1xyXG5cdFx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBxdWVyeUNlbGwoYXJnczogYW55KTogdm9pZCB7XHJcblx0XHQodGhpcy5waXZvdE9iai5yZW5kZXJNb2R1bGUgYXMgYW55KS5yb3dDZWxsQm91bmRFdmVudChhcmdzKTtcclxuXHRcdGxldCByb3dJbmRleCA9IE51bWJlcihhcmdzLmNlbGwuZ2V0QXR0cmlidXRlKFwiaW5kZXhcIikpO1xyXG5cdFx0Ly8g5paw54mI5pysMjYueOS4rSBhcmlhLWNvbGluZGV4IOS8muavlOaXp+eJiOacrHYyMC54IOWkmjFcclxuXHRcdGxldCBjb2xJbmRleCA9IHBhcnNlSW50KGFyZ3MuY2VsbC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWNvbGluZGV4XCIpKSAtIDE7XHJcblx0XHRpZiAoXHJcblx0XHRcdCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb25kaXRpb25hbEZvcm1hdFNldHRpbmdzLmxlbmd0aFxyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChhcmdzLmRhdGEgJiYgYXJncy5kYXRhWzBdLmZvcm1hdHRlZFRleHQgPT09IFwiR3JhbmQgVG90YWxcIikge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwiZ3JhbmQtY2xhc3NcIik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXHJcblx0XHRcdFx0XHRyb3dJbmRleCAlIDIgPyBcIm9kZC1jbGFzc1wiIDogXCJldmVuLWNsYXNzXCJcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsZXQgbWVhc3VyZUFyciA9XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncy5tYXAoXHJcblx0XHRcdFx0XHQob2JqKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBvYmoubWVhc3VyZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0bWVhc3VyZUFyci5pbmNsdWRlcyhhcmdzLmRhdGFbY29sSW5kZXhdLmFjdHVhbFRleHQpICYmXHJcblx0XHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XS5zdHlsZVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuc3R5bGUuY3NzVGV4dCArPSBgYmFja2dyb3VuZC1jb2xvcjogJHthcmdzLmRhdGFbY29sSW5kZXhdLnN0eWxlLmJhY2tncm91bmRDb2xvcn0gIWltcG9ydGFudGA7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGFyZ3MuZGF0YSAmJiBhcmdzLmRhdGFbMF0uZm9ybWF0dGVkVGV4dCA9PT0gXCJHcmFuZCBUb3RhbFwiKVxyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwiZS1jdXN0b21jbGFzc1wiKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoYXJncy5kYXRhICYmIGFyZ3MuZGF0YVswXS5mb3JtYXR0ZWRUZXh0ID09PSBcIkdyYW5kIFRvdGFsXCIpIHtcclxuXHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJncmFuZC1jbGFzc1wiKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmIChyb3dJbmRleCAlIDIpIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcIm9kZC1jbGFzc1wiKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcImV2ZW4tY2xhc3NcIik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvL2dldCBzb3J0aW5nIGRhdGFcclxuXHRcdGlmICh0aGlzLmZsYWcpIHtcclxuXHRcdFx0dGhpcy5mbGFnID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuY29uZmlnLnZhbHVlU29ydFNldHRpbmdzID1cclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5nc1tcclxuXHRcdFx0XHRcdFwicHJvcGVydGllc1wiXHJcblx0XHRcdFx0XTtcclxuXHRcdFx0dGhpcy5wb3J0bGV0LmNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKTtcclxuXHRcdH1cclxuXHRcdC8vY3VzdG9taXplIHRoZSBoZWFkZXIgdGV4dFxyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3MubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRhcmdzLmRhdGEgJiZcclxuXHRcdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdICYmXHJcblx0XHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XS5heGlzID09PSBcInJvd1wiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5xdWVyeVNlbGVjdG9yKFwiLmUtY2VsbHZhbHVlXCIpLmlubmVyVGV4dCA9XHJcblx0XHRcdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLmZvcm1hdHRlZFRleHQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBTTVAyLTI5MTIgc3VidG90YWzlrZfkvZPliqDnspdcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGggJiZcclxuXHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XSAmJlxyXG5cdFx0XHRhcmdzLmRhdGFbMF0ubGV2ZWwgIT09XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGggLSAxICYmXHJcblx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0ucm93SGVhZGVycyAhPT0gXCJcIiAmJlxyXG5cdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLmF4aXMgPT0gXCJ2YWx1ZVwiXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJlLWN1c3RvbWNsYXNzXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBoZWFkZXJDZWxsKGFyZ3M6IGFueSk6IHZvaWQge1xyXG5cdFx0KHRoaXMucGl2b3RPYmoucmVuZGVyTW9kdWxlIGFzIGFueSkuY29sdW1uQ2VsbEJvdW5kRXZlbnQoYXJncyk7XHJcblx0XHRpZiAodGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0bGV0IG5vZGUgPSBhcmdzLm5vZGUucXVlcnlTZWxlY3RvcihcclxuXHRcdFx0XHRcIi5lLWhlYWRlcmNlbGxkaXYgLmUtaGVhZGVydGV4dFwiXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChub2RlKSBub2RlLmlubmVyVGV4dCA9IGFyZ3MuY2VsbC5jb2x1bW4uaGVhZGVyVGV4dDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGFyZ3MuY2VsbC5jb2x1bW4udGV4dEFsaWduO1xyXG5cdFx0YXJncy5jZWxsLmNvbHVtbi5oZWFkZXJUZXh0QWxpZ24gPSB0ZXh0QWxpZ247XHJcblx0XHRhcmdzLm5vZGUuc3R5bGUudGV4dEFsaWduID0gdGV4dEFsaWduID09PSBcIlJpZ2h0XCIgPyBcInJpZ2h0XCIgOiBcImxlZnRcIjsgLy8gQWxpZ24gcmlnaHQgZm9yIG51bWVyaWMgY29sdW1uc1xyXG5cdFx0aWYgKHRleHRBbGlnbiA9PT0gXCJSaWdodFwiKSB7XHJcblx0XHRcdGFyZ3Mubm9kZS5jbGFzc0xpc3QuYWRkKFwiaGVhZGVyLWFsaWduLXJpZ2h0XCIpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZGF0YUJvdW5kKGUpIHtcclxuXHRcdGlmICh0aGlzLmlzSW5pdCkge1xyXG5cdFx0XHR0aGlzLmlzSW5pdCA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5ncmFuZFRvdGFscyA9IHt9O1xyXG5cdFx0dGhpcy5zdWJUb3RhbHMgPSB7fTtcclxuXHRcdGlmICh0aGlzLnBpdm90T2JqLmdyaWQpIHtcclxuXHRcdFx0dGhpcy5waXZvdE9iai5ncmlkLnJlc2l6ZVN0b3AgPSB0aGlzLnJlc2l6ZVN0b3AuYmluZCh0aGlzKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLnBpdm90T2JqKSB7XHJcblx0XHRcdHZhciBpbmRleCA9IFtdO1xyXG5cdFx0XHQvLyBHZXQgdGhlIGVtcHR5IHJvdyBoZWFkZXJzIGhlcmUuXHJcblx0XHRcdHZhciBlbXB0eVJvd0hlYWRlcjogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuXHRcdFx0XHQndGRbYXJpYS1sYWJlbD1cIiBjb2x1bW4gaGVhZGVyIFwiXSdcclxuXHRcdFx0KTtcclxuXHRcdFx0Zm9yICh2YXIgZWxlIG9mIGVtcHR5Um93SGVhZGVyKSB7XHJcblx0XHRcdFx0aWYgKGVsZSkge1xyXG5cdFx0XHRcdFx0aW5kZXgucHVzaChlbGUuZ2V0QXR0cmlidXRlKFwiaW5kZXhcIikpO1xyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGFsbCB0aGUgZW1wdHkgcm93IGhlYWRlcnMgaGVyZS5cclxuXHRcdFx0XHRcdGVsZS5jbG9zZXN0KFwidHJcIikucmVtb3ZlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaW5kZXgubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHQvLyBHZXQgdGhlIGVtcHR5IHZhbHVlcyBoZXJlLlxyXG5cdFx0XHRcdHZhciBlbXB0eVZhbHVlcyA9IHRoaXMucGl2b3RPYmouZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG5cdFx0XHRcdFx0YHRkW2luZGV4PVwiJHtpbmRleFtpXX1cIl1gXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoZW1wdHlWYWx1ZXNbMF0pIHtcclxuXHRcdFx0XHRcdC8vIFJlbW92ZSBhbGwgdGhlIGVtcHR5IHZhbHVlIHJvd3MgaGVyZS5cclxuXHRcdFx0XHRcdGVtcHR5VmFsdWVzWzBdLmNsb3Nlc3QoXCJ0clwiKS5yZW1vdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmogJiZcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoucGl2b3RCdXR0b25Nb2R1bGUgJiZcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoucGl2b3RCdXR0b25Nb2R1bGUubWVudU9wdGlvblxyXG5cdFx0KSB7XHJcblx0XHRcdChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5waXZvdEJ1dHRvbk1vZHVsZS5tZW51T3B0aW9uIGFzIGFueVxyXG5cdFx0XHQpLnN0cmluZ0FnZ3JlZ2F0ZVR5cGVzID0gW1xyXG5cdFx0XHRcdFwiQ291bnRcIixcclxuXHRcdFx0XHRcIkRpc3RpbmN0Q291bnRcIixcclxuXHRcdFx0XHRcIkZpcnN0XCIsXHJcblx0XHRcdFx0XCJMYXN0XCIsXHJcblx0XHRcdF07XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMucGl2b3RPYmoucGl2b3RCdXR0b25Nb2R1bGUgJiZcclxuXHRcdFx0dGhpcy5waXZvdE9iai5waXZvdEJ1dHRvbk1vZHVsZS5tZW51T3B0aW9uXHJcblx0XHQpIHtcclxuXHRcdFx0KFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmoucGl2b3RCdXR0b25Nb2R1bGUubWVudU9wdGlvbiBhcyBhbnlcclxuXHRcdFx0KS5zdHJpbmdBZ2dyZWdhdGVUeXBlcyA9IFtcclxuXHRcdFx0XHRcIkNvdW50XCIsXHJcblx0XHRcdFx0XCJEaXN0aW5jdENvdW50XCIsXHJcblx0XHRcdFx0XCJGaXJzdFwiLFxyXG5cdFx0XHRcdFwiTGFzdFwiLFxyXG5cdFx0XHRdO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGFsbFN1bW1hcnlUeXBlID0gQUxMX0FHR1JFR0FURV9UWVBFUyBhcyBhbnk7XHJcblx0XHR0aGlzLnBpdm90T2JqLmdldEFsbFN1bW1hcnlUeXBlID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRyZXR1cm4gYWxsU3VtbWFyeVR5cGU7XHJcblx0XHR9O1xyXG5cdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqKSB7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmFnZ3JlZ2F0ZVR5cGVzID0gYWxsU3VtbWFyeVR5cGU7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmdldEFsbFN1bW1hcnlUeXBlID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdHJldHVybiBhbGxTdW1tYXJ5VHlwZTtcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0VmFsdWVJdGVtRGF0YSgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRWYWx1ZUl0ZW1EYXRhKCkge1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdGNvbnN0IGZpZWxkRG9tID0gdGhpcy5maWVsZGxpc3RPYmouZmllbGRMaXN0U3Bpbm5lckVsZW1lbnQ7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlcy5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XHJcblx0XHRcdFx0aWYgKHZhbHVlLnR5cGUgIT09IFwiRmlyc3RcIiAmJiB2YWx1ZS50eXBlICE9PSBcIkxhc3RcIikge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCB2YWx1ZXNEb20gPSBmaWVsZERvbS5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdFx0YC5lLXZhbHVlcyAuJHt2YWx1ZS5uYW1lfSAuZS1wdnQtYnRuLWNvbnRlbnRgXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHR2YWx1ZXNEb20uaW5uZXJIVE1MICE9PSBgJHt2YWx1ZS50eXBlfSBvZiAke3ZhbHVlLmNhcHRpb259YFxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0dmFsdWVzRG9tLmlubmVySFRNTCA9IGAke3ZhbHVlLnR5cGV9IG9mICR7dmFsdWUuY2FwdGlvbn1gO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2FsY3VsYXRlZENlbGxTZXRzKGFyZ3MsIGN1ckZpZWxkcykge1xyXG5cdFx0bGV0IG1hdGNoRmllbGRzID0gY3VyRmllbGRzW1wibWF0Y2hGaWVsZHNcIl07XHJcblx0XHRsZXQgZm9ybXVsYSA9IGN1ckZpZWxkc1tcImZvcm11bGFcIl07XHJcblx0XHRsZXQgdmFsdWUgPSAwO1xyXG5cdFx0bGV0IHJvd3MgPSB0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzO1xyXG5cdFx0bGV0IGludmFsaWRUeXBlcyA9IFtcInN0cmluZ1wiLCBcIm52YXJjaGFyXCIsIFwiZGF0ZVwiLCBcImRhdGV0aW1lXCJdO1xyXG5cdFx0bGV0IGlzSW52YWxpZCA9IG1hdGNoRmllbGRzLnNvbWUoKGYpID0+XHJcblx0XHRcdGludmFsaWRUeXBlcy5pbmNsdWRlcyhcclxuXHRcdFx0XHR0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoKGVsKSA9PiBlbC5jb2xOYW1lID09PSBmLm1hdGNoV29yZClbMF1bXHJcblx0XHRcdFx0XHRcImRhdGFUeXBlXCJcclxuXHRcdFx0XHRdXHJcblx0XHRcdClcclxuXHRcdCk7XHJcblx0XHRsZXQgY3VycmVudHJvd0NlbGxUeXBlID0gYXJncy5yb3dDZWxsVHlwZTtcclxuXHRcdGlmIChpc0ludmFsaWQpIHJldHVybiBcIi1cIjtcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9PT0gXCJzdWJUb3RhbFwiIHx8XHJcblx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHQpIHtcclxuXHRcdFx0bGV0IGNoaWxkSGVhZGVycyA9IFtdO1xyXG5cdFx0XHRsZXQgc3VtID0gMDtcclxuXHRcdFx0bGV0IGNsb25lQ2VsbFNldHMgPSBjbG9uZURlZXAoYXJncy5jZWxsU2V0cyk7XHJcblx0XHRcdGxldCBncm91cE5hbWVBcnJheXMgPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgaW5kZXggPSBhcmdzLnJvdy5sZXZlbDsgaW5kZXggPCByb3dzLmxlbmd0aDsgaW5kZXgrKykge1xyXG5cdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5wdXNoKHJvd3NbaW5kZXhdLm5hbWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2xvbmVDZWxsU2V0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0XHRsZXQgaGVhZGVyID0gZ3JvdXBOYW1lQXJyYXlzXHJcblx0XHRcdFx0XHQubWFwKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGNsb25lQ2VsbFNldHNbaV1bbmFtZV0pO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gY2xvbmVDZWxsU2V0c1tpXVtuYW1lXTtcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQuam9pbihcIi1cIik7XHJcblx0XHRcdFx0aWYgKCEoY2hpbGRIZWFkZXJzIGFzIGFueSkuaW5jbHVkZXMoaGVhZGVyKSkge1xyXG5cdFx0XHRcdFx0Y2hpbGRIZWFkZXJzLnB1c2goaGVhZGVyKTtcclxuXHRcdFx0XHRcdGxldCBmaWx0ZXJPYmo6IGFueSA9IHt9O1xyXG5cdFx0XHRcdFx0Z3JvdXBOYW1lQXJyYXlzLm1hcChcclxuXHRcdFx0XHRcdFx0KG5hbWUsIGkpID0+IChmaWx0ZXJPYmpbbmFtZV0gPSB2YWx1ZXNbaV0pXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YXJncy5jZWxsU2V0cyA9IF9maWx0ZXIoY2xvbmVDZWxsU2V0cywgZmlsdGVyT2JqKTtcclxuXHRcdFx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPSBcInZhbHVlXCI7XHJcblx0XHRcdFx0XHRzdW0gKz0gdGhpcy5jYWxjdWxhdGVkVmFsdWVzKGFyZ3MsIG1hdGNoRmllbGRzLCBmb3JtdWxhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9IGN1cnJlbnRyb3dDZWxsVHlwZTtcclxuXHJcblx0XHRcdC8vIOaaguWtmOW9k+WJjVN1YlRvdGFs77yMIOeUqOS6juaUtue8qeaXtuivu+WPllxyXG5cdFx0XHRsZXQgcHJlZml4SGVhZGVyID0gdGhpcy5nZXRDYWxjSGVhZGVyKGFyZ3MsIGZvcm11bGEpO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVRlbXBTdWJ0b3RhbHMocHJlZml4SGVhZGVyLCBzdW0pO1xyXG5cdFx0XHRyZXR1cm4gc3VtO1xyXG5cdFx0fSBlbHNlIGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcInZhbHVlXCIpIHtcclxuXHRcdFx0aWYgKGFyZ3Mucm93Lmhhc0NoaWxkKSB7XHJcblx0XHRcdFx0Ly8gY29sbGFwc2Ug6K+75Y+WU3ViVG90YWxcclxuXHRcdFx0XHRsZXQgaGVhZGVyID0gdGhpcy5nZXRDYWxjSGVhZGVyKGFyZ3MsIGZvcm11bGEpO1xyXG5cdFx0XHRcdGxldCBpbmRleCA9IHRoaXMudGVtcFN1YnRvdGFscy5maW5kSW5kZXgoXHJcblx0XHRcdFx0XHQoaXRlbSkgPT4gaXRlbS5yb3dOYW1lID09PSBoZWFkZXJcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChpbmRleCA+IC0xKSB7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IHRoaXMudGVtcFN1YnRvdGFsc1tpbmRleF0ucm93VmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIGV4cGFuZFxyXG5cdFx0XHRcdHZhbHVlID0gdGhpcy5jYWxjdWxhdGVkVmFsdWVzKGFyZ3MsIG1hdGNoRmllbGRzLCBmb3JtdWxhKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHZhbHVlO1xyXG5cdH1cclxuXHJcblx0YWN0aW9uRmFpbHVyZShhcmdzOiBQaXZvdEFjdGlvbkZhaWx1cmVFdmVudEFyZ3MpOiB2b2lkIHtcclxuXHRcdGlmIChhcmdzLmFjdGlvbk5hbWUgPT0gXCJEcmlsbCBkb3duXCIgfHwgYXJncy5hY3Rpb25OYW1lID09IFwiRHJpbGwgdXBcIikge1xyXG5cdFx0XHQvLyBUcmlnZ2VycyB3aGVuIHRoZSBjdXJyZW50IFVJIGFjdGlvbiBmYWlscyB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIHJlc3VsdC5cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q2FsY0hlYWRlcihhcmdzLCBmb3JtdWxhPykge1xyXG5cdFx0bGV0IGhlYWRlciA9IFwiXCI7XHJcblx0XHRsZXQgcm93cyA9IHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3M7XHJcblx0XHRsZXQgZ3JvdXBOYW1lQXJyYXlzID0gW107XHJcblx0XHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJncy5yb3cubGV2ZWw7IGluZGV4KyspIHtcclxuXHRcdFx0Z3JvdXBOYW1lQXJyYXlzLnB1c2gocm93c1tpbmRleF0ubmFtZSk7XHJcblx0XHR9XHJcblx0XHRoZWFkZXIgPSBncm91cE5hbWVBcnJheXMubGVuZ3RoXHJcblx0XHRcdD8gZ3JvdXBOYW1lQXJyYXlzXHJcblx0XHRcdFx0XHQubWFwKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBhcmdzLmNlbGxTZXRzWzBdW25hbWVdO1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdC5qb2luKFwiLVwiKSArXHJcblx0XHRcdCAgXCItXCIgK1xyXG5cdFx0XHQgIGFyZ3Mucm93LmFjdHVhbFRleHRcclxuXHRcdFx0OiBhcmdzLnJvdy5hY3R1YWxUZXh0O1xyXG5cdFx0aWYgKGZvcm11bGEpIGhlYWRlciArPSBcIl9fX1wiICsgZm9ybXVsYTtcclxuXHRcdHJldHVybiBoZWFkZXI7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHVwZGF0ZVRlbXBTdWJ0b3RhbHMocm93TmFtZSwgcm93VmFsdWUpIHtcclxuXHRcdGxldCBpbmRleCA9IHRoaXMudGVtcFN1YnRvdGFscy5maW5kSW5kZXgoXHJcblx0XHRcdChpdGVtKSA9PiBpdGVtLnJvd05hbWUgPT09IHJvd05hbWVcclxuXHRcdCk7XHJcblx0XHRsZXQgdGVtcDogYW55ID0ge307XHJcblx0XHR0ZW1wLnJvd05hbWUgPSByb3dOYW1lO1xyXG5cdFx0dGVtcC5yb3dWYWx1ZSA9IHJvd1ZhbHVlO1xyXG5cdFx0aWYgKGluZGV4ID4gLTEpIHtcclxuXHRcdFx0dGhpcy50ZW1wU3VidG90YWxzLnNwbGljZShpbmRleCwgMSwgdGVtcCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnRlbXBTdWJ0b3RhbHMucHVzaCh0ZW1wKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2FsY3VsYXRlZFZhbHVlcyhhcmdzLCBtYXRjaEZpZWxkcywgZm9ybXVsYSkge1xyXG5cdFx0aWYgKG1hdGNoRmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRsZXQgY2FsY3VsZWRNYXRjaEZpZWxkcyA9IG1hdGNoRmllbGRzLm1hcCgoZikgPT4ge1xyXG5cdFx0XHRcdHN3aXRjaCAoZi5tYXRjaE1ldGhvZCkge1xyXG5cdFx0XHRcdFx0Y2FzZSBcIkZpcnN0XCI6XHJcblx0XHRcdFx0XHRjYXNlIFwiTGFzdFwiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlZEZpc3RMYXN0KFxyXG5cdFx0XHRcdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0XHRcdFx0Zi5tYXRjaE1ldGhvZCxcclxuXHRcdFx0XHRcdFx0XHRmLm1hdGNoV29yZFxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgXCJNYXhcIjpcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPSBtYXhCeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdClbZi5tYXRjaFdvcmRdO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgXCJNaW5cIjpcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPSBtaW5CeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdClbZi5tYXRjaFdvcmRdO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgXCJTdW1cIjpcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPSBzdW1CeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdC8vIFNNUDItNDA5NCBVbmljb3JuIC0gTDMgQWRqdXN0ZWQgTkFWIHZhbHVlIGlzc3Vlc1xyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgJiYgZi5yZXBsYWNlVmFsdWUudG9GaXhlZCgxMCk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBcIkF2Z1wiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IG1lYW5CeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBmO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0bGV0IHJlc3VsdEZvcm11bGEgPSBmb3JtdWxhO1xyXG5cdFx0XHRpZiAoY2FsY3VsZWRNYXRjaEZpZWxkcy5sZW5ndGgpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNhbGN1bGVkTWF0Y2hGaWVsZHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdHJlc3VsdEZvcm11bGEgPSByZXN1bHRGb3JtdWxhLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdGNhbGN1bGVkTWF0Y2hGaWVsZHNbaV0ubWF0Y2hTdHIsXHJcblx0XHRcdFx0XHRcdFwiKFwiICsgY2FsY3VsZWRNYXRjaEZpZWxkc1tpXS5yZXBsYWNlVmFsdWUgKyBcIilcIlxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRsZXQgcmVzdWx0ID0gbmV3IEZ1bmN0aW9uKFxyXG5cdFx0XHRcdFx0XCJyZXR1cm4gXCIgKyByZXN1bHRGb3JtdWxhLnJlcGxhY2UoL1teLTw+PzooKVxcZC8qKy5dL2csIFwiXCIpXHJcblx0XHRcdFx0KSgpO1xyXG5cdFx0XHRcdGlmIChpc05hTihyZXN1bHQpIHx8ICFpc0Zpbml0ZShyZXN1bHQpKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0cmV0dXJuIE5hTjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG5cclxuXHR0b3RhbEZvcm1hdHRlZCA9IHt9O1xyXG5cdHB1YmxpYyBhZ2dyZWdhdGVDZWxsSW5mbyhhcmdzKSB7XHJcblx0XHRsZXQgYXNPZkRhdGUgPSB0aGlzLnBiZi50aW1lKHRoaXMuZGFzaGJvYXJkLmFzT2ZEYXRlKTtcclxuXHRcdC8vIGlmIGNhbGN1bGF0ZWQgZmllbGRcclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT0gXCJDYWxjdWxhdGVkRmllbGRcIikge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChhcmdzLmZpZWxkTmFtZSA9PSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNbaV0ubmFtZSkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IHRoaXMuY2FsY3VsYXRlZENlbGxTZXRzKFxyXG5cdFx0XHRcdFx0XHRhcmdzLFxyXG5cdFx0XHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNbaV1cclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHRbXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVJUlJcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUkJlZm9yZUNhcnJpZWRcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUklSUkRhdGVcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUk1URFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSUVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVJUlJZVERcIixcclxuXHRcdFx0XS5pbmNsdWRlcyhhcmdzLmFnZ3JlZ2F0ZVR5cGUpXHJcblx0XHQpIHtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCI9PT09PT09PT09PT09PT09PT09PT09PT09PVwiKTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJhcmdzOlwiLCBhcmdzKTtcclxuXHRcdFx0bGV0IHZhbHVlRmllbGQ7XHJcblx0XHRcdGxldCBkYXRlRmllbGQ7XHJcblx0XHRcdGxldCBzdGFydERhdGU7XHJcblx0XHRcdGxldCBlbmREYXRlO1xyXG5cdFx0XHRzd2l0Y2ggKGFyZ3MuYWdncmVnYXRlVHlwZSkge1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJcIjpcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJNVERcIjpcclxuXHRcdFx0XHRcdHN0YXJ0RGF0ZSA9IG1vbWVudChhc09mRGF0ZSlcclxuXHRcdFx0XHRcdFx0LnN0YXJ0T2YoXCJtb250aFwiKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdGVuZERhdGUgPSBtb21lbnQoYXNPZkRhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSUVREXCI6XHJcblx0XHRcdFx0XHRzdGFydERhdGUgPSBtb21lbnQoYXNPZkRhdGUpXHJcblx0XHRcdFx0XHRcdC5zdGFydE9mKFwicXVhcnRlclwiKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdGVuZERhdGUgPSBtb21lbnQoYXNPZkRhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSWVREXCI6XHJcblx0XHRcdFx0XHRzdGFydERhdGUgPSBtb21lbnQoYXNPZkRhdGUpXHJcblx0XHRcdFx0XHRcdC5zdGFydE9mKFwieWVhclwiKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdGVuZERhdGUgPSBtb21lbnQoYXNPZkRhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSSVJSRGF0ZVwiOlxyXG5cdFx0XHRcdFx0dmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVcIjtcclxuXHRcdFx0XHRcdGRhdGVGaWVsZCA9IFwiQ2FsY3VsYXRlSVJSRGF0ZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZUlSUkJlZm9yZUNhcnJpZWRcIjpcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlQmVmb3JlQ2FycnlcIjtcclxuXHRcdFx0XHRcdGRhdGVGaWVsZCA9IFwiSVJSRGF0ZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCBOQVZBZGogPSAwO1xyXG5cdFx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRcdGxldCBiZWZvcmVTdGFydE5BVkFkaiA9IDA7IC8vIOWtmOWCqOS4iuS4gOS4qumYtuauteeahE5BVkFkauaAu+WSjFxyXG5cdFx0XHRsZXQgYmVmb3JlU3RhcnRWYWx1ZXMgPSBbXTsgLy8g5a2Y5YKo5LiK5LiA5Liq6Zi25q6155qE57Sv6K6h6ZuG5ZCIICjlj6rmmK/kuLrkuobmiZPljbDvvIzmsqHmnInlrp7pmYXnlKjpgJQpXHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdGFtb3VudDogYXJncy5jZWxsU2V0c1tpXVtcIklSUkFtb3VudFwiXSxcclxuXHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSA9PT1cclxuXHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdC8vIFNNUDItMTY5MjBcclxuXHRcdFx0XHQvLyBJZiBJUlIgRGF0ZSA+IERhc2hib2FyZCByZXBvcnQgZGF0ZSA9IFRha2VzIGFzIG9mIGRhc2hib2FyZCByZXBvcnQgZGF0ZVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVJUlJJUlJEYXRlXCIgJiZcclxuXHRcdFx0XHRcdGFzT2ZEYXRlIDwgdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRkYXRhLmRhdGUgPSBhc09mRGF0ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0TkFWQWRqICs9IGFyZ3MuY2VsbFNldHNbaV1bdmFsdWVGaWVsZF07XHJcblx0XHRcdFx0Ly8gU01QMi0xNzIxOSBNVEQgUVREIFlURCBJUlJcclxuXHRcdFx0XHRpZiAoc3RhcnREYXRlICYmIGVuZERhdGUpIHtcclxuXHRcdFx0XHRcdGlmIChtb21lbnQoZGF0YS5kYXRlKS5pc0JlZm9yZShzdGFydERhdGUpKSB7XHJcblx0XHRcdFx0XHRcdGRhdGFbdmFsdWVGaWVsZF0gPSBhcmdzLmNlbGxTZXRzW2ldW3ZhbHVlRmllbGRdO1xyXG5cdFx0XHRcdFx0XHRiZWZvcmVTdGFydFZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0XHRiZWZvcmVTdGFydE5BVkFkaiArPSBkYXRhW3ZhbHVlRmllbGRdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhbW9tZW50KGRhdGEuZGF0ZSkuaXNCZXR3ZWVuKFxyXG5cdFx0XHRcdFx0XHRcdHN0YXJ0RGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRlbmREYXRlLFxyXG5cdFx0XHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRcdFx0XCJbXVwiXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoTkFWQWRqID4gMC4wMDAxIHx8IE5BVkFkaiA8IC0wLjAwMDEpIHtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh7XHJcblx0XHRcdFx0XHRhbW91bnQ6IE5BVkFkaixcclxuXHRcdFx0XHRcdGRhdGU6IGFzT2ZEYXRlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlcyA9IHNvcnRCeSh2YWx1ZXMsIFwiZGF0ZVwiKTtcclxuXHRcdFx0Ly8g5aaC5p6c5pivTVRELFFURCxZVEQg5YiZ6ZyA6KaB5oqK5b2T5YmN6Zi25q615Lul5YmN55qE5omA5pyJ5pWw5o2u6L+b6KGM5rGH5oC777yM5Yqg5YWl6K6h566XXHJcblx0XHRcdGlmIChzdGFydERhdGUgJiYgZW5kRGF0ZSkge1xyXG5cdFx0XHRcdHZhbHVlcy51bnNoaWZ0KHtcclxuXHRcdFx0XHRcdGFtb3VudDogLWJlZm9yZVN0YXJ0TkFWQWRqLCAvLyDlvIDlp4vnmoTmlbDmja7pnIDopoHlj5blj41cclxuXHRcdFx0XHRcdGRhdGU6IHRoaXMucGJmLnRpbWUoc3RhcnREYXRlKSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcImJlZm9yZVN0YXJ0VmFsdWVzOlwiLCBiZWZvcmVTdGFydFZhbHVlcyk7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwidmFsdWVzOlwiLCB2YWx1ZXMpO1xyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRsZXQgZ3Vlc3MgPSAwLjE7XHJcblx0XHRcdFx0Y29uc3Qgc3VtQW1vdW50ID0gdmFsdWVzXHJcblx0XHRcdFx0XHQubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudClcclxuXHRcdFx0XHRcdC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwKTtcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50IDwgMCkge1xyXG5cdFx0XHRcdFx0Z3Vlc3MgPSAtMC4xO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvL1NNUDItMjI0OSBmaXhlZCB0aGUgYmlnIGlyciBpc3N1ZVxyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPT09IDApIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSAwO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUl0ZW1zID0gdmFsdWVzLnNsaWNlKDAsIHZhbHVlcy5sZW5ndGggLSAxKTtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudCk7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmRhdGUpO1xyXG5cdFx0XHRcdFx0Y29uc3QgbGFzdEl0ZW0gPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0Y29uc3QgbmF2QWRqdXN0ID0gbGFzdEl0ZW0uYW1vdW50O1xyXG5cdFx0XHRcdFx0Y29uc3QgbGF0ZXN0RGF0ZSA9IGxhc3RJdGVtLmRhdGU7XHJcblx0XHRcdFx0XHRsZXQgaXJyID1cclxuXHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5FeGNlbEZvcm11bGFzLl9DYWxjdWxhdGVYaXJyKFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRkYXRlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRuYXZBZGp1c3QsXHJcblx0XHRcdFx0XHRcdFx0bGF0ZXN0RGF0ZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGlyciA9PT0gbnVsbCA/IFwiXCIgOiBpcnI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiYXJncy52YWx1ZTpcIiwgYXJncy52YWx1ZSk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZSAmJlxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV1cclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV07XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRmaWVsZC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmRwXHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHQ6IFwiUDJcIixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gIFNNUDItMTY1MjAgVFdSIOaciC/lraMv5bm0ICYmIFNNUDItMTY2ODMgVkFSXHJcblx0XHRpZiAoXHJcblx0XHRcdFtcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVRXUk1URFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVFdSUVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVUV1JZVERcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUk1URF85OVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSUVREXzk5XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJZVERfOTlcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUk1URF85NVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSUVREXzk1XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJZVERfOTVcIixcclxuXHRcdFx0XS5pbmNsdWRlcyhhcmdzLmFnZ3JlZ2F0ZVR5cGUpXHJcblx0XHQpIHtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCI9PT09PT09PT09PT09PT09PT09PT09PT09PVwiKTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJhcmdzOlwiLCBhcmdzKTtcclxuXHRcdFx0bGV0IHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdGxldCBkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0bGV0IHRpbWVSYW5nZTtcclxuXHRcdFx0c3dpdGNoIChhcmdzLmFnZ3JlZ2F0ZVR5cGUpIHtcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVFdSTVREXCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUk1URF85OVwiOlxyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVWQVJNVERfOTVcIjpcclxuXHRcdFx0XHRcdHRpbWVSYW5nZSA9IFwibW9udGhcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVUV1JRVERcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSUVREXzk5XCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUlFURF85NVwiOlxyXG5cdFx0XHRcdFx0dGltZVJhbmdlID0gXCJxdWFydGVyXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVFdSWVREXCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUllURF85OVwiOlxyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVWQVJZVERfOTVcIjpcclxuXHRcdFx0XHRcdHRpbWVSYW5nZSA9IFwieWVhclwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCB2YWx1ZXMgPSBbXTsgLy8g6L+Z5Liq6Zi25q6155qE57Sv6K6h6ZuG5ZCIXHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFt2YWx1ZUZpZWxkXTogYXJncy5jZWxsU2V0c1tpXVt2YWx1ZUZpZWxkXSxcclxuXHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSA9PT1cclxuXHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyDlpoLmnpxhc09mRGF0ZeS4jeaYryDmnKzmnIgv5a2j5bqmL+W5tCDnmoTmnIDlkI7kuIDlpKnvvIzpg73mmK/miKroh7Mg5LiK5Liq5pyIL+Wto+W6pi/lubQg55qE5pyA5ZCO5LiA5aSp55qE5pWw5o2u5Y676K6h566XXHJcblx0XHRcdGxldCBfYXNPZkRhdGUgPSBtb21lbnQoYXNPZkRhdGUpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcIl9hc09mRGF0ZTpcIiwgX2FzT2ZEYXRlKTtcclxuXHRcdFx0bGV0IGlzRW5kT2ZQZXJpb2QgPSAodW5pdCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiAoXHJcblx0XHRcdFx0XHRfYXNPZkRhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSA9PT1cclxuXHRcdFx0XHRcdF9hc09mRGF0ZS5lbmRPZih1bml0KS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fTtcclxuXHRcdFx0bGV0IGVuZERhdGUgPSBpc0VuZE9mUGVyaW9kKHRpbWVSYW5nZSlcclxuXHRcdFx0XHQ/IG1vbWVudChhc09mRGF0ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKVxyXG5cdFx0XHRcdDogbW9tZW50KGFzT2ZEYXRlKVxyXG5cdFx0XHRcdFx0XHQuc3VidHJhY3QoMSwgdGltZVJhbmdlKVxyXG5cdFx0XHRcdFx0XHQuZW5kT2YodGltZVJhbmdlKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiZW5kRGF0ZTpcIiwgZW5kRGF0ZSk7XHJcblx0XHRcdHZhbHVlcyA9IHZhbHVlcy5maWx0ZXIoKGl0ZW0pID0+XHJcblx0XHRcdFx0bW9tZW50KGl0ZW0uZGF0ZSkuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcclxuXHRcdFx0KTtcclxuXHRcdFx0dmFsdWVzID0gc29ydEJ5KHZhbHVlcywgXCJkYXRlXCIpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcInZhbHVlczpcIiwgdmFsdWVzKTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGxldCByZXN1bHQgPSB0aGlzLmdldFRpbWVSYW5nZXMoXHJcblx0XHRcdFx0XHR2YWx1ZXMsXHJcblx0XHRcdFx0XHRlbmREYXRlLFxyXG5cdFx0XHRcdFx0dGltZVJhbmdlLFxyXG5cdFx0XHRcdFx0XCJkYXRlXCJcclxuXHRcdFx0XHQpOyAvLyDlkITkuKrpmLbmrrXnmoTmlbDmja5cclxuXHRcdFx0XHRsZXQgcmVzdWx0VG90YWwgPSB7fTsgLy8g5ZCE5Liq6Zi25q615oC75ZKMXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wIGluIHJlc3VsdCkge1xyXG5cdFx0XHRcdFx0cmVzdWx0VG90YWxbcHJvcF0gPSByZXN1bHRbcHJvcF0ucmVkdWNlKChhY2MsIGN1cikgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gYWNjICsgKGN1clt2YWx1ZUZpZWxkXSB8fCAwKTtcclxuXHRcdFx0XHRcdH0sIDApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcInJlc3VsdDpcIiwgcmVzdWx0KTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcInJlc3VsdFRvdGFsOlwiLCByZXN1bHRUb3RhbCk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGN1bXVsYXRpdmVTdW0gPSB7fTsgLy8g5ZCE5Liq6Zi25q6157Sv6K6h5ZKMXHJcblx0XHRcdFx0bGV0IHN1bSA9IDA7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzdWx0VG90YWwpKSB7XHJcblx0XHRcdFx0XHRzdW0gKz0gcmVzdWx0VG90YWxba2V5XTtcclxuXHRcdFx0XHRcdGN1bXVsYXRpdmVTdW1bYCR7a2V5fWBdID0gc3VtO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcImN1bXVsYXRpdmVTdW06XCIsIGN1bXVsYXRpdmVTdW0pO1xyXG5cclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY3VtdWxhdGl2ZVN1bSk7XHJcblx0XHRcdFx0bGV0IHR3ckxpc3QgPSBbXTtcclxuXHRcdFx0XHQvLyDpgY3ljobmr4/kuKTkuKrpmLbmrrUg6K6h566XVFdSXHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3Qga2V5MSA9IGtleXNbaV07XHJcblx0XHRcdFx0XHRjb25zdCBrZXkyID0ga2V5c1tpICsgMV07XHJcblxyXG5cdFx0XHRcdFx0Ly8g6K6h566X5Lik5Liq6Zi25q615LmL6Ze055qE6YCS5aKe6YePLCDlh7rmlbDkuI3og73kuLowXHJcblx0XHRcdFx0XHRpZiAoY3VtdWxhdGl2ZVN1bVtrZXkxXSAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGluY3JlbWVudCA9XHJcblx0XHRcdFx0XHRcdFx0Y3VtdWxhdGl2ZVN1bVtrZXkyXSAtIGN1bXVsYXRpdmVTdW1ba2V5MV07XHJcblx0XHRcdFx0XHRcdGxldCB0d3IgPSBpbmNyZW1lbnQgLyBjdW11bGF0aXZlU3VtW2tleTFdO1xyXG5cdFx0XHRcdFx0XHR0d3JMaXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdGRhdGU6IGtleTIsXHJcblx0XHRcdFx0XHRcdFx0dHdyOiB0d3IsXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyDorqHnrpdBdmVyYWdlIFRXUlxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwidHdyTGlzdDpcIiwgdHdyTGlzdCk7XHJcblx0XHRcdFx0bGV0IGF2ZXJhZ2VUV1IgPSB0aGlzLmNhbGN1bGF0ZUdyb3d0aFJhdGUoXHJcblx0XHRcdFx0XHR0d3JMaXN0Lm1hcCgoeCkgPT4geC50d3IpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcIuiuoeeul0F2ZXJhZ2UgVFdSOlwiLCBhdmVyYWdlVFdSKTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRbXHJcblx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVFdSTVREXCIsXHJcblx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVFdSUVREXCIsXHJcblx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVFdSWVREXCIsXHJcblx0XHRcdFx0XHRdLmluY2x1ZGVzKGFyZ3MuYWdncmVnYXRlVHlwZSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdC8vIFNNUDItMTY1MjAgVFdSIOaciC/lraMv5bm0XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0aXNOYU4oYXZlcmFnZVRXUikgfHwgYXZlcmFnZVRXUiA9PSBudWxsXHJcblx0XHRcdFx0XHRcdFx0PyBcIlwiXHJcblx0XHRcdFx0XHRcdFx0OiBOdW1iZXIoYXZlcmFnZVRXUik7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmIChpc05hTihhdmVyYWdlVFdSKSB8fCBhdmVyYWdlVFdSID09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvLyBTTVAyLTE2NjgzIFZBUiDljLrliIY5OSXlkow5NSVcclxuXHRcdFx0XHRcdFx0bGV0IFpTY29yZSA9IFtcclxuXHRcdFx0XHRcdFx0XHRcIkNhbGN1bGF0ZVZBUk1URF85OVwiLFxyXG5cdFx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVkFSUVREXzk5XCIsXHJcblx0XHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVWQVJZVERfOTlcIixcclxuXHRcdFx0XHRcdFx0XS5pbmNsdWRlcyhhcmdzLmFnZ3JlZ2F0ZVR5cGUpXHJcblx0XHRcdFx0XHRcdFx0PyAyLjMzXHJcblx0XHRcdFx0XHRcdFx0OiAxLjY1O1xyXG5cdFx0XHRcdFx0XHRpZiAodHdyTGlzdC5sZW5ndGggPCAyKSB7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IFNEID0gdGhpcy5jYWxjdWxhdGVTdGFuZGFyZERldmlhdGlvbihcclxuXHRcdFx0XHRcdFx0XHRcdHR3ckxpc3QubWFwKCh4KSA9PiB4LnR3cilcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiY2FsY3VsYXRlU3RhbmRhcmREZXZpYXRpb246XCIsIFNEKTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgVkFSID0gYXZlcmFnZVRXUiAtIFNEICogWlNjb3JlO1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBOdW1iZXIoVkFSKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcImFyZ3MudmFsdWU6XCIsIGFyZ3MudmFsdWUpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdO1xyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBhcmdzLmZpZWxkTmFtZSxcclxuXHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZmllbGRbMF0uZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBcIlAyXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vU01QMi0yNzAxXHJcblx0XHRpZiAoYXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZUlSUkFjdHVhbEF1ZGl0ZWRcIikge1xyXG5cdFx0XHRsZXQgTkFWQWRqID0gMDtcclxuXHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0ZWwuY29sTmFtZSA9PT1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0QWdncmVnYXRlVHlwZShcclxuXHRcdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdC8vU01QMi0yNzEzIG9ubHkganVkZ2UgZm9yIHRoaXMgZGF0YU1hcnQoR3Jvc3NOZXQpXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSA9PT0gXCJHcm9zc05ldFwiIHx8XHJcblx0XHRcdFx0dGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUgPT09XHJcblx0XHRcdFx0XHRcIkNvbWJpbmVkSW52ZXN0bWVudEZ1bmROQ29tcGFueUNhc2hmbG93XCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSkgPT09XHJcblx0XHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJncy5jZWxsU2V0c1tpXVtcIkFjdHVhbEF1ZGl0ZWROQVZcIl07XHJcblx0XHRcdFx0XHRpZiAoZGF0YS5hbW91bnQgIT0gMCkge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaChkYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9maWx0ZXIgdGhlIGRhdGEgYnkgdGhlIERhdGFUeXBlKEFjdHVhbCBSZXBvcnRlZCBBdWRpdGVkKVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRsZXQgYXJnc2RhdGEgPSBhcmdzLmNlbGxTZXRzLmZpbHRlcihcclxuXHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0ZWwuRGF0YVR5cGUgPT09IFwiQUNUVUFMX0FVRElURURcIiB8fFxyXG5cdFx0XHRcdFx0XHRlbC5EYXRhVHlwZSA9PT0gXCJSRVBPUlRFRFwiXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3NkYXRhLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3NkYXRhW2ldW1wiSVJSQW1vdW50XCJdLFxyXG5cdFx0XHRcdFx0XHRkYXRlOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJnc2RhdGFbaV1bXCJJUlJEYXRlXCJdKSA9PT1cclxuXHRcdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGFzT2ZEYXRlXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJnc2RhdGFbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJnc2RhdGFbaV1bXCJJUlJBZGpWYWx1ZVwiXTtcclxuXHRcdFx0XHRcdGlmIChkYXRhLmFtb3VudCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoTkFWQWRqID4gMC4wMDAxIHx8IE5BVkFkaiA8IC0wLjAwMDEpIHtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh7XHJcblx0XHRcdFx0XHRhbW91bnQ6IE5BVkFkaixcclxuXHRcdFx0XHRcdGRhdGU6IGFzT2ZEYXRlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlcyA9IHNvcnRCeSh2YWx1ZXMsIFwiZGF0ZVwiKTtcclxuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0bGV0IGd1ZXNzID0gMC4xO1xyXG5cdFx0XHRcdGNvbnN0IHN1bUFtb3VudCA9IHZhbHVlc1xyXG5cdFx0XHRcdFx0Lm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpXHJcblx0XHRcdFx0XHQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMCk7XHJcblx0XHRcdFx0aWYgKHN1bUFtb3VudCA8IDApIHtcclxuXHRcdFx0XHRcdGd1ZXNzID0gLTAuMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly9TTVAyLTIyNDkgZml4ZWQgdGhlIGJpZyBpcnIgaXNzdWVcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50ID09PSAwKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVJdGVtcyA9IHZhbHVlcy5zbGljZSgwLCB2YWx1ZXMubGVuZ3RoIC0gMSk7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRlKTtcclxuXHRcdFx0XHRcdGNvbnN0IGxhc3RJdGVtID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdGNvbnN0IG5hdkFkanVzdCA9IGxhc3RJdGVtLmFtb3VudDtcclxuXHRcdFx0XHRcdGNvbnN0IGxhdGVzdERhdGUgPSBsYXN0SXRlbS5kYXRlO1xyXG5cdFx0XHRcdFx0bGV0IGlyciA9XHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuRXhjZWxGb3JtdWxhcy5fQ2FsY3VsYXRlWGlycihcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0ZGF0ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0bmF2QWRqdXN0LFxyXG5cdFx0XHRcdFx0XHRcdGxhdGVzdERhdGVcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBpcnIgPT09IG51bGwgPyAwIDogaXJyO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdO1xyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBhcmdzLmZpZWxkTmFtZSxcclxuXHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZmllbGRbMF0uZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBcIlAyXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly9TTVAyLTM0MTFcclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlSVJSUmVwb3J0ZWRcIikge1xyXG5cdFx0XHRsZXQgTkFWQWRqID0gMDtcclxuXHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0ZWwuY29sTmFtZSA9PT1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0QWdncmVnYXRlVHlwZShcclxuXHRcdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSA9PT0gXCJHcm9zc05ldFwiIHx8XHJcblx0XHRcdFx0dGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUgPT09XHJcblx0XHRcdFx0XHRcIkNvbWJpbmVkSW52ZXN0bWVudEZ1bmROQ29tcGFueUNhc2hmbG93XCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSkgPT09XHJcblx0XHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJncy5jZWxsU2V0c1tpXVtcIlJlcG9ydGVkTkFWXCJdO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0YW1vdW50OiBhcmdzLmNlbGxTZXRzW2ldW1wiSVJSQW1vdW50XCJdLFxyXG5cdFx0XHRcdFx0XHRkYXRlOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtcIklSUkRhdGVcIl0pID09PVxyXG5cdFx0XHRcdFx0XHRcdFwiSW52YWxpZCBkYXRlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0TkFWQWRqICs9IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBZGpWYWx1ZVwiXTtcclxuXHRcdFx0XHRcdGlmIChkYXRhLmFtb3VudCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoTkFWQWRqID4gMC4wMDAxIHx8IE5BVkFkaiA8IC0wLjAwMDEpIHtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh7XHJcblx0XHRcdFx0XHRhbW91bnQ6IE5BVkFkaixcclxuXHRcdFx0XHRcdGRhdGU6IGFzT2ZEYXRlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlcyA9IHNvcnRCeSh2YWx1ZXMsIFwiZGF0ZVwiKTtcclxuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0bGV0IGd1ZXNzID0gMC4xO1xyXG5cdFx0XHRcdGNvbnN0IHN1bUFtb3VudCA9IHZhbHVlc1xyXG5cdFx0XHRcdFx0Lm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpXHJcblx0XHRcdFx0XHQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMCk7XHJcblx0XHRcdFx0aWYgKHN1bUFtb3VudCA8IDApIHtcclxuXHRcdFx0XHRcdGd1ZXNzID0gLTAuMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly9TTVAyLTIyNDkgZml4ZWQgdGhlIGJpZyBpcnIgaXNzdWVcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50ID09PSAwKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVJdGVtcyA9IHZhbHVlcy5zbGljZSgwLCB2YWx1ZXMubGVuZ3RoIC0gMSk7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRlKTtcclxuXHRcdFx0XHRcdGNvbnN0IGxhc3RJdGVtID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdGNvbnN0IG5hdkFkanVzdCA9IGxhc3RJdGVtLmFtb3VudDtcclxuXHRcdFx0XHRcdGNvbnN0IGxhdGVzdERhdGUgPSBsYXN0SXRlbS5kYXRlO1xyXG5cdFx0XHRcdFx0bGV0IGlyciA9XHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuRXhjZWxGb3JtdWxhcy5fQ2FsY3VsYXRlWGlycihcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0ZGF0ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0bmF2QWRqdXN0LFxyXG5cdFx0XHRcdFx0XHRcdGxhdGVzdERhdGVcclxuXHRcdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXJyID09PSBudWxsID8gMCA6IGlycjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IDA7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlICYmXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXTtcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogYXJncy5maWVsZE5hbWUsXHJcblx0XHRcdFx0XHRmb3JtYXQ6XHJcblx0XHRcdFx0XHRcdGZpZWxkLmxlbmd0aCA+IDBcclxuXHRcdFx0XHRcdFx0XHQ/IGZpZWxkWzBdLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0WzBdLmZvcm1hdENoZWNrZWRcclxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZHBcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdDogXCJQMlwiLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZU11bHRpcGxlXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZVBJQ1wiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVEUElcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlVFZQSVwiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVSVlBJXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZU1BY3R1YWxBdWRpdGVkXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZU1SZXBvcnRlZFwiXHJcblx0XHQpIHtcclxuXHRcdFx0bGV0IHRvdGFsTnVtZXJhdG9yID0gMDtcclxuXHRcdFx0bGV0IHRvdGFsRGVub21pbmF0b3IgPSAwO1xyXG5cdFx0XHRsZXQgbnVtZXJhdG9yTmFtZTtcclxuXHRcdFx0bGV0IGRlbm9taW5hdG9yTmFtZTtcclxuXHRcdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdGVsLmNvbE5hbWUgPT09XHJcblx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZVR5cGUoXHJcblx0XHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGNvbnN0IGZvcm11bGFBcnJheSA9IGZpZWxkWzBdLmZvcm11bGEuc3BsaXQoXCIvXCIpO1xyXG5cdFx0XHRcdG51bWVyYXRvck5hbWUgPSBmb3JtdWxhQXJyYXlbMF07XHJcblx0XHRcdFx0ZGVub21pbmF0b3JOYW1lID0gZm9ybXVsYUFycmF5WzFdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdHRvdGFsTnVtZXJhdG9yICs9IGFyZ3MuY2VsbFNldHNbal1bbnVtZXJhdG9yTmFtZV07XHJcblx0XHRcdFx0dG90YWxEZW5vbWluYXRvciArPSBhcmdzLmNlbGxTZXRzW2pdW2Rlbm9taW5hdG9yTmFtZV07XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRvdGFsRGVub21pbmF0b3IgIT09IDApIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gdG90YWxOdW1lcmF0b3IgLyB0b3RhbERlbm9taW5hdG9yO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlICYmXHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW1xyXG5cdFx0XHRcdFx0XHRhcmdzLmZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtYXQ6XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdE11bHRpcGxlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0TXVsdGlwbGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogXCIjIyMwLjAwJ3gnXCIsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiRmlyc3RcIiB8fCBhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiTGFzdFwiKSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSB0aGlzLmNhbGN1bGF0ZWRGaXN0TGFzdChcclxuXHRcdFx0XHRhcmdzLFxyXG5cdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSxcclxuXHRcdFx0XHRhcmdzLmZpZWxkTmFtZVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNvdW50XCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkRpc3RpbmN0Q291bnRcIlxyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChhcmdzLnZhbHVlKSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUudG9GaXhlZCgyKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0IWFyZ3MudmFsdWUgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gMCAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBmYWxzZSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBcImZhbHNlXCJcclxuXHRcdCkge1xyXG5cdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHR9XHJcblx0XHQvLyDmlrDlu7pwaXZvdCB0YWJsZSwg6L+Y5rKh5pyJ6K6+572ucm93LCDpgInkuoZjb2x1bW7kuYvlkI5ncmFuZHRvdGFs5Lya5pyJ5YC8XHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiICYmXHJcblx0XHRcdCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzLmxlbmd0aFxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0Ly9TTVAyLTI4ODlcclxuXHRcdGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcInN1YlRvdGFsXCIpIHtcclxuXHRcdFx0Y29uc3QgdmFsdWVGaWVsZF9kYXRhID0gdGhpcy5jb25maWcueWF4aXMuc2VyaWVzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGFyZ3MuZmllbGROYW1lXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGFbMF0uc2hvd1N1YlRvdGFscyA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHRcdFx0YXJncy5za2lwRm9ybWF0dGluZyA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIpIHtcclxuXHRcdFx0Y29uc3QgdmFsdWVGaWVsZF9kYXRhID0gdGhpcy5jb25maWcueWF4aXMuc2VyaWVzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGFyZ3MuZmllbGROYW1lXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGFbMF0uc2hvd0dyYW5kVG90YWxzID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIFNNUDItMzQxNiBzdGFydFxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnplcm9Gb3JtYXREYXRhLmhnTGlzdC5pbmNsdWRlcyhhcmdzLmZpZWxkTmFtZSkgJiZcclxuXHRcdFx0YXJncy52YWx1ZSA9PT0gMFxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSBcIi1cIjtcclxuXHRcdFx0YXJncy5za2lwRm9ybWF0dGluZyA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuZW1wdHlMaXN0LmluY2x1ZGVzKGFyZ3MuZmllbGROYW1lKSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlID09PSAwXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdGFyZ3Muc2tpcEZvcm1hdHRpbmcgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLm1pbGxpb25GaWVsZHMuaW5jbHVkZXMoYXJncy5maWVsZE5hbWUpICYmXHJcblx0XHRcdCFpc05hTihOdW1iZXIoYXJncy52YWx1ZSkpICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IDAgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gXCJcIiAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBudWxsXHJcblx0XHQpIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCIgJiZcclxuXHRcdFx0XHRhcmdzLnJvd0NlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGlmICghdGhpcy50b3RhbEZvcm1hdHRlZFthcmdzLmZpZWxkTmFtZV0pIHtcclxuXHRcdFx0XHRcdHRoaXMudG90YWxGb3JtYXR0ZWRbYXJncy5maWVsZE5hbWVdID0gdHJ1ZTtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLnZhbHVlIC8gMTAwMDAwMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUgLyAxMDAwMDAwO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU01QMi0yNDg2ICYgcGVyY2VudE51beeahGZvcm1hdOmXrumimFxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnBlcmNlbnROdW1GaWVsZHMubGVuZ3RoICYmXHJcblx0XHRcdHRoaXMucGVyY2VudE51bUZpZWxkcy5pbmNsdWRlcyhhcmdzLmZpZWxkTmFtZSkgJiZcclxuXHRcdFx0IWlzTmFOKE51bWJlcihhcmdzLnZhbHVlKSkgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gMCAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBcIlwiICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IG51bGxcclxuXHRcdCkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5jb2x1bW5DZWxsVHlwZSA9PSBcImdyYW5kVG90YWxcIiAmJlxyXG5cdFx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnRvdGFsRm9ybWF0dGVkW2FyZ3MuZmllbGROYW1lXSkge1xyXG5cdFx0XHRcdFx0dGhpcy50b3RhbEZvcm1hdHRlZFthcmdzLmZpZWxkTmFtZV0gPSB0cnVlO1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUgLyAxMDA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLnZhbHVlIC8gMTAwO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiICYmXHJcblx0XHRcdCFpc05hTihOdW1iZXIoYXJncy52YWx1ZSkpICYmXHJcblx0XHRcdCF0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdLmZvcm1hdFxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSBOdW1iZXIoYXJncy52YWx1ZSkudG9GaXhlZCgyKTtcclxuXHRcdH1cclxuXHRcdC8vIFNNUDItMzQxNiBlbmRcclxuXHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYWxjdWxhdGVkRmlzdExhc3QoYXJncywgYWdncmVnYXRlVHlwZSwgZmllbGROYW1lKSB7XHJcblx0XHRpZiAoIWFyZ3Mucm93LmFjdHVhbFRleHQpIGFyZ3Mucm93LmFjdHVhbFRleHQgPSBhcmdzLnJvdy5mb3JtYXR0ZWRUZXh0O1xyXG5cdFx0aWYgKCFhcmdzLmNvbHVtbi5hY3R1YWxUZXh0KVxyXG5cdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ID0gYXJncy5jb2x1bW4uZm9ybWF0dGVkVGV4dDtcclxuXHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBmaWVsZE5hbWVcclxuXHRcdClbMF07XHJcblx0XHRpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJ2YWx1ZVwiICYmICFhcmdzLnJvdy5oYXNDaGlsZCkge1xyXG5cdFx0XHRpZiAoYXJncy5jZWxsU2V0c1swXSkge1xyXG5cdFx0XHRcdGlmIChhZ2dyZWdhdGVUeXBlID09PSBcIkZpcnN0XCIpIHtcclxuXHRcdFx0XHRcdGZvciAoXHJcblx0XHRcdFx0XHRcdGxldCBmaXJzdEluZGV4ID0gMDtcclxuXHRcdFx0XHRcdFx0Zmlyc3RJbmRleCA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRmaXJzdEluZGV4KytcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT1cclxuXHRcdFx0XHRcdFx0XHRcdDEgJiZcclxuXHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwic3RyaW5nXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnZhcmNoYXJcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoXHJcblx0XHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlW2FyZ3Mucm93LnJvd0luZGV4XTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IG9iaiA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5pc0dyYW5kU3VtXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVswXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob2JqKSBhcmdzLnZhbHVlID0gb2JqLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBudWxsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy5jZWxsU2V0c1tmaXJzdEluZGV4XVtmaWVsZE5hbWVdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm51bWJlclwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJtdWx0aXBsZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnROdW1cIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoYXJncy52YWx1ZSAhPSBudWxsKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5wYmYudGltZShhcmdzLnZhbHVlKSA+IFwiMTkwMC0wMS0wMVwiKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhcmdzLnZhbHVlKSBicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0ZVR5cGUgPT09IFwiTGFzdFwiKSB7XHJcblx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRsZXQgbGFzdEluZGV4ID0gYXJncy5jZWxsU2V0cy5sZW5ndGggLSAxO1xyXG5cdFx0XHRcdFx0XHRsYXN0SW5kZXggPj0gMDtcclxuXHRcdFx0XHRcdFx0bGFzdEluZGV4LS1cclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT1cclxuXHRcdFx0XHRcdFx0XHRcdDEgJiZcclxuXHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwic3RyaW5nXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnZhcmNoYXJcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoXHJcblx0XHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlW2FyZ3Mucm93LnJvd0luZGV4XTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IG9iaiA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5pc0dyYW5kU3VtXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVswXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob2JqKSBhcmdzLnZhbHVlID0gb2JqLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBudWxsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy5jZWxsU2V0c1tsYXN0SW5kZXhdW2ZpZWxkTmFtZV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm51bWJlclwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJtdWx0aXBsZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnROdW1cIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoYXJncy52YWx1ZSAhPSBudWxsKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5wYmYudGltZShhcmdzLnZhbHVlKSA+IFwiMTkwMC0wMS0wMVwiKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhcmdzLnZhbHVlKSBicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnVtYmVyXCIgfHxcclxuXHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibXVsdGlwbGVcIiB8fFxyXG5cdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwicGVyY2VudE51bVwiXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0aWYgKCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdCFOdW1iZXIodGhpcy5ncmFuZFRvdGFsc1tmaWVsZE5hbWVdKSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0aXNOYU4oTnVtYmVyKHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXSkpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV0gPSAwO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAoYXJncy5hZ2dyZWdhdGVUeXBlICE9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV0gKz0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PSAxXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFwicm93XCIgKyBhcmdzLnJvdy5hY3R1YWxUZXh0ICsgZmllbGROYW1lIOihqOekuihjZWxsOiBhcmdzLnJvd0NlbGxUeXBlID09PSBcInZhbHVlXCIgJiYgYXJncy5jb2x1bW5DZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIpXHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0IU51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICsgYXJncy5yb3cuYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHQpIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRpc05hTihcclxuXHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArIGFyZ3Mucm93LmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF0gPSAwO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArIGFyZ3Mucm93LmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRdICs9IE51bWJlcihhcmdzLnZhbHVlKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gXCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWUg6KGo56S6KGNlbGw6IGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiICYmIGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT09IFwidmFsdWVcIilcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHQhTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0KSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0aXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRdID0gMDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XSArPSBOdW1iZXIoYXJncy52YWx1ZSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJzdWJUb3RhbFwiIHx8IGFyZ3Mucm93Lmhhc0NoaWxkKSB7XHJcblx0XHRcdGNvbnN0IGRhdGFUeXBlID0gZmllbGQuZGF0YVR5cGU7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRkYXRhVHlwZSA9PT0gXCJzdHJpbmdcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09PSBcIm52YXJjaGFyXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRsZXQgdmFsdWUgPSAwO1xyXG5cdFx0XHRcdGxldCBjaGlsZEhlYWRlcnMgPSBbXTtcclxuXHRcdFx0XHRpZiAoYWdncmVnYXRlVHlwZSA9PT0gXCJGaXJzdFwiKSB7XHJcblx0XHRcdFx0XHRsZXQgZ3JvdXBOYW1lQXJyYXlzID0gW107XHJcblx0XHRcdFx0XHRsZXQgcm93cyA9IHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3M7XHJcblx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRsZXQgaW5kZXggPSBhcmdzLnJvdy5sZXZlbDtcclxuXHRcdFx0XHRcdFx0aW5kZXggPCByb3dzLmxlbmd0aDtcclxuXHRcdFx0XHRcdFx0aW5kZXgrK1xyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5wdXNoKHJvd3NbaW5kZXhdLm5hbWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0bGV0IGhlYWRlciA9IGdyb3VwTmFtZUFycmF5c1xyXG5cdFx0XHRcdFx0XHRcdC5tYXAoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGFyZ3MuY2VsbFNldHNbaV1bbmFtZV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFyZ3MuY2VsbFNldHNbaV1bbmFtZV07XHJcblx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHQuam9pbihcIi1cIik7XHJcblx0XHRcdFx0XHRcdGlmICghKGNoaWxkSGVhZGVycyBhcyBhbnkpLmluY2x1ZGVzKGhlYWRlcikpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZmlsdGVyT2JqOiBhbnkgPSB7fTtcclxuXHRcdFx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMubWFwKFxyXG5cdFx0XHRcdFx0XHRcdFx0KG5hbWUsIHgpID0+IChmaWx0ZXJPYmpbbmFtZV0gPSB2YWx1ZXNbeF0pXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgX0NlbGxTZXRzID0gX2ZpbHRlcihhcmdzLmNlbGxTZXRzLCBmaWx0ZXJPYmopO1xyXG5cdFx0XHRcdFx0XHRcdGNoaWxkSGVhZGVycy5wdXNoKGhlYWRlcik7XHJcblx0XHRcdFx0XHRcdFx0dmFsdWUgKz0gTnVtYmVyKF9DZWxsU2V0c1swXVtmaWVsZE5hbWVdKSB8fCAwO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChhZ2dyZWdhdGVUeXBlID09PSBcIkxhc3RcIikge1xyXG5cdFx0XHRcdFx0bGV0IGdyb3VwTmFtZUFycmF5cyA9IFtdO1xyXG5cdFx0XHRcdFx0bGV0IHJvd3MgPSB0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzO1xyXG5cdFx0XHRcdFx0Zm9yIChcclxuXHRcdFx0XHRcdFx0bGV0IGluZGV4ID0gYXJncy5yb3cubGV2ZWw7XHJcblx0XHRcdFx0XHRcdGluZGV4IDwgcm93cy5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdGluZGV4KytcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMucHVzaChyb3dzW2luZGV4XS5uYW1lKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSBhcmdzLmNlbGxTZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcblx0XHRcdFx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0bGV0IGhlYWRlciA9IGdyb3VwTmFtZUFycmF5c1xyXG5cdFx0XHRcdFx0XHRcdC5tYXAoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGFyZ3MuY2VsbFNldHNbaV1bbmFtZV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFyZ3MuY2VsbFNldHNbaV1bbmFtZV07XHJcblx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHQuam9pbihcIi1cIik7XHJcblx0XHRcdFx0XHRcdGlmICghKGNoaWxkSGVhZGVycyBhcyBhbnkpLmluY2x1ZGVzKGhlYWRlcikpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZmlsdGVyT2JqOiBhbnkgPSB7fTtcclxuXHRcdFx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMubWFwKFxyXG5cdFx0XHRcdFx0XHRcdFx0KG5hbWUsIHgpID0+IChmaWx0ZXJPYmpbbmFtZV0gPSB2YWx1ZXNbeF0pXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgX0NlbGxTZXRzID0gX2ZpbHRlcihhcmdzLmNlbGxTZXRzLCBmaWx0ZXJPYmopO1xyXG5cdFx0XHRcdFx0XHRcdGNoaWxkSGVhZGVycy5wdXNoKGhlYWRlcik7XHJcblx0XHRcdFx0XHRcdFx0dmFsdWUgKz1cclxuXHRcdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0X0NlbGxTZXRzW19DZWxsU2V0cy5sZW5ndGggLSAxXVtmaWVsZE5hbWVdXHJcblx0XHRcdFx0XHRcdFx0XHQpIHx8IDA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICE9PSBcIkdyYW5kIFRvdGFsXCIpXHJcblx0XHRcdFx0XHR0aGlzLmNvbHVtblRleHRzLnB1c2goYXJncy5jb2x1bW4uYWN0dWFsVGV4dCk7XHJcblxyXG5cdFx0XHRcdGlmICghdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0IU51bWJlcih0aGlzLnN1YlRvdGFsc1tmaWVsZE5hbWVdKSB8fFxyXG5cdFx0XHRcdFx0XHRpc05hTihOdW1iZXIodGhpcy5zdWJUb3RhbHNbZmllbGROYW1lXSkpXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbZmllbGROYW1lXSA9IDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tmaWVsZE5hbWVdICs9IE51bWJlcih2YWx1ZSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoID09IDFcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0IU51bWJlcihcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHQpIHx8XHJcblx0XHRcdFx0XHRcdGlzTmFOKFxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdF0gPSAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRdICs9IE51bWJlcih2YWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIC0tLT4gYWxsRGF0YVZhbHVl5Lit6L+Z5Liq5Y2V5YWD5qC855qE5YC85LiN5q2j56GuXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0YXJncy5jb2x1bW5DZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIgJiZcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoID09IDFcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmFsbERhdGFWYWx1ZSAmJiB0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICsgXCJHcmFuZCBUb3RhbFwiICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY29sdW1uVGV4dHMgPSB1bmlxQnkodGhpcy5jb2x1bW5UZXh0cywgKGVsKSA9PiBlbCk7XHJcblx0XHRcdFx0XHRcdGxldCB2YWwgPSAwO1xyXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uVGV4dHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBlbGVtZW50ID0gdGhpcy5jb2x1bW5UZXh0c1tpXTtcclxuXHRcdFx0XHRcdFx0XHR2YWwgKz1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICsgZWxlbWVudCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdmFsO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiKSB7XHJcblx0XHRcdGNvbnN0IGRhdGFUeXBlID0gZmllbGQuZGF0YVR5cGU7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcInN0cmluZ1wiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT0gXCJudmFyY2hhclwiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcImRhdGV0aW1lXCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuYWxsRGF0YVZhbHVlICYmIHRoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRcdGlmIChyb3dPYmpzKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianNBcnIgPSBKU09OLnBhcnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0SlNPTi5zdHJpbmdpZnkocm93T2JqcylcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBvYmpBcnIgPSByb3dPYmpzQXJyLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuYWN0dWFsVGV4dCA9PSBmaWVsZE5hbWUgJiYgZWwuaXNHcmFuZFN1bVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKG9iakFyciAmJiBvYmpBcnIubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gb2JqQXJyW29iakFyci5sZW5ndGggLSAxXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXModGhpcy5ncmFuZFRvdGFscykuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSB0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmIChhcmdzLmNvbHVtbkNlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIikge1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5hbGxEYXRhVmFsdWUgJiYgdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzQXJyID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0SlNPTi5zdHJpbmdpZnkocm93T2JqcylcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgb2JqQXJyID0gcm93T2Jqc0Fyci5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmlzR3JhbmRTdW1cclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAob2JqQXJyICYmIG9iakFyci5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b2JqQXJyW29iakFyci5sZW5ndGggLSAxXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKHRoaXMuZ3JhbmRUb3RhbHMpLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmFsbERhdGFWYWx1ZSAmJiB0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZVt0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0bGV0IG9iakFyciA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5pc0dyYW5kU3VtICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsLmNvbHVtbkhlYWRlcnMgPT0gYXJncy5jb2x1bW4uYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKG9iakFyciAmJiBvYmpBcnIubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gb2JqQXJyW29iakFyci5sZW5ndGggLSAxXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXModGhpcy5ncmFuZFRvdGFscykuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHRoaXMuZm9ybWF0VmFsKGFyZ3MsIGZpZWxkTmFtZSk7XHJcblx0XHRyZXR1cm4gYXJncy52YWx1ZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZm9ybWF0VmFsKGFyZ3MsIGZpZWxkTmFtZSkge1xyXG5cdFx0dGhpcy5jb25maWdGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHRcdFx0aWYgKGZpZWxkLmNvbE5hbWUgPT0gZmllbGROYW1lKSB7XHJcblx0XHRcdFx0c3dpdGNoIChmaWVsZC5kYXRhVHlwZSkge1xyXG5cdFx0XHRcdFx0Y2FzZSBcImRhdGVcIjpcclxuXHRcdFx0XHRcdGNhc2UgXCJkYXRldGltZVwiOlxyXG5cdFx0XHRcdFx0XHRpZiAoYXJncy52YWx1ZSkgYXJncy52YWx1ZSA9IG5ldyBEYXRlKGFyZ3MudmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldGV4Y2x1ZGVGaWVsZHMoZmllbGRzLCBkYXRhKSB7XHJcblx0XHRsZXQgbmFtZWFycmF5ID0gW107XHJcblx0XHRsZXQgYXJyYXkgPSBbXTtcclxuXHRcdGZvciAobGV0IHByb3AgaW4gZGF0YSkge1xyXG5cdFx0XHRhcnJheS5wdXNoKHByb3ApO1xyXG5cdFx0fVxyXG5cdFx0Zm9yIChsZXQgaXRlbSBvZiBmaWVsZHMpIHtcclxuXHRcdFx0bmFtZWFycmF5LnB1c2goaXRlbS5jb2xOYW1lKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuZXhjbHVkZUZpZWxkcyA9IGRpZmZlcmVuY2VXaXRoKGFycmF5LCBuYW1lYXJyYXkpO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLmV4Y2x1ZGVGaWVsZHMubGVuZ3RoICYmXHJcblx0XHRcdHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3MgJiZcclxuXHRcdFx0dGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncy5sZW5ndGhcclxuXHRcdCkge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXhjbHVkZUZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IGVsID0gdGhpcy5leGNsdWRlRmllbGRzW2ldO1xyXG5cdFx0XHRcdGlmIChzdGFydHNXaXRoKGVsLCB0aGlzLmNvbmZpZy5ncm91cFNldHRpbmdzWzBdLm5hbWUgKyBcIl9cIikpIHtcclxuXHRcdFx0XHRcdHRoaXMuZXhjbHVkZUZpZWxkcy5zcGxpY2UoaSwgMSk7XHJcblx0XHRcdFx0XHRpLS07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEluZm8oKSB7XHJcblx0XHR0aGlzLmRhdGVQaXBlRm9ybWF0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJkYXRlUGlwZVwiKTtcclxuXHRcdHRoaXMudHJhbnNsYXRpb24gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidHJhbnNsYXRpb25cIikpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIG9uRmllbGREcm9wKGFyZ3M6IEZpZWxkRHJvcEV2ZW50QXJncykge1xyXG5cdFx0dGhpcy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzID0gWy4uLmFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlc107XHJcblx0XHQvL2NoYW5nZSB0aGUgY2FsY3VhbHRlRmllbGQgbWV0aG9kIHVzZSB0aGUgY29ycmVzcG9uZGluZyBjYWxjdWxhdGVcclxuXHRcdGNvbnN0IGNhbGN1YWx0ZUZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGFyZ3MuZmllbGROYW1lICYmIGVsLmlzQ2FsY3VsYXRlZEZpZWxkXHJcblx0XHQpO1xyXG5cdFx0aWYgKGNhbGN1YWx0ZUZpZWxkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0YXJncy5kcm9wRmllbGQudHlwZSA9XHJcblx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRDYWxjdWxhdGVNZXRob2QoXHJcblx0XHRcdFx0XHRjYWxjdWFsdGVGaWVsZFswXS5jb2xOYW1lXHJcblx0XHRcdFx0KSBhcyBhbnk7XHJcblx0XHRcdGFyZ3MuZHJvcEZpZWxkLmNhcHRpb24gPSBhcmdzLmRyb3BGaWVsZC5jYXB0aW9uXHJcblx0XHRcdFx0LnJlcGxhY2UoXCJDYWxjdWxhdGVcIiwgXCJcIilcclxuXHRcdFx0XHQudHJpbSgpO1xyXG5cdFx0fVxyXG5cdFx0Zm9yIChcclxuXHRcdFx0bGV0IGkgPSAwO1xyXG5cdFx0XHRpIDwgYXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3MubGVuZ3RoO1xyXG5cdFx0XHRpKytcclxuXHRcdCkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3NbaV0ubmFtZSA9PT1cclxuXHRcdFx0XHRcdGFyZ3MuZmllbGROYW1lICYmXHJcblx0XHRcdFx0YXJncy5kcm9wQXhpcyA9PT0gXCJcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5ncy5zcGxpY2UoaSwgMSk7XHJcblx0XHRcdFx0dGhpcy5maWx0ZXJTZXR0aW5ncyA9IGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLmZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDYWxjdWxhdGVkIGZpZWxk5LqL5Lu277ya5Yib5bu6XHJcblx0cHVibGljIGNhbGN1bGF0ZWRGaWVsZENyZWF0ZShhcmdzOiBDYWxjdWxhdGVkRmllbGRDcmVhdGVFdmVudEFyZ3MpIHtcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5jYWxjdWxhdGVkRmllbGQubmFtZSAhPT0gXCJcIiAmJlxyXG5cdFx0XHRhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lLnRyaW0oKSAhPT0gXCJcIlxyXG5cdFx0KSB7XHJcblx0XHRcdGxldCBpbmRleCA9XHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLmZpbmRJbmRleChcclxuXHRcdFx0XHRcdChlbCkgPT4gZWwubmFtZSA9PT0gYXJncy5jYWxjdWxhdGVkRmllbGQubmFtZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGlmIChpbmRleCAhPT0gLTEpIHtcclxuXHRcdFx0XHRpZiAoYXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybWF0U3RyaW5nID09PSBcIlwiKSB7XHJcblx0XHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3NbXHJcblx0XHRcdFx0XHRcdGluZGV4XHJcblx0XHRcdFx0XHRdLmZvcm1hdFN0cmluZyA9IFwiTjJcIjtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzW1xyXG5cdFx0XHRcdFx0XHRpbmRleFxyXG5cdFx0XHRcdFx0XS5mb3JtYXRTdHJpbmcgPSBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtYXRTdHJpbmc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtYXRTdHJpbmcgPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm1hdFN0cmluZyA9IFwiTjJcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8g56e76Zmk6YeN5aSNXHJcblx0XHRcdGxldCBmSW5kZXggPSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMuZmluZEluZGV4KFxyXG5cdFx0XHRcdChmKSA9PiBmLm5hbWUgPT09IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLm5hbWVcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKGZJbmRleCA+IC0xKSB7XHJcblx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLnNwbGljZShmSW5kZXgsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIOWMuemFjei/kOeul+espiBGaXJzdCB8fCBMYXN0XHJcblx0XHRcdGxldCBmb3JtdWxhU3RyID0gYXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybXVsYTtcclxuXHRcdFx0bGV0IHJlZzEgPSAvXCJGaXJzdFxcKCguKz8pXFwpXCIvZztcclxuXHRcdFx0bGV0IHJlZzIgPSAvXCJMYXN0XFwoKC4rPylcXClcIi9nO1xyXG5cdFx0XHRpZiAocmVnMS50ZXN0KGZvcm11bGFTdHIpIHx8IHJlZzIudGVzdChmb3JtdWxhU3RyKSkge1xyXG5cdFx0XHRcdC8vIOWIpOaWreaYr+WQpuWtmOWcqEZpcnN0IHx8IExhc3Qg6KGo6L6+5byPXHJcblx0XHRcdFx0bGV0IG1hdGNoRmlyc3RGaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIkZpcnN0XFwoKC4rPylcXClcIi9nKSxcclxuXHRcdFx0XHRcdChtKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hTdHI6IG1bMF0sXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hXb3JkOiBtWzFdLFxyXG5cdFx0XHRcdFx0XHRcdHJlcGxhY2VWYWx1ZTogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRtYXRjaE1ldGhvZDogXCJGaXJzdFwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoTGFzdEZpZWxkcyA9IEFycmF5LmZyb20oXHJcblx0XHRcdFx0XHRmb3JtdWxhU3RyW1wibWF0Y2hBbGxcIl0oL1wiTGFzdFxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiTGFzdFwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoTWF4RmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJNYXhcXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIk1heFwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoTWluRmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJNaW5cXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIk1pblwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoU3VtRmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJTdW1cXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIlN1bVwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoQXZnRmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJBdmdcXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIkF2Z1wiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0bWF0Y2hGaXJzdEZpZWxkcy5ldmVyeSgoeCkgPT5cclxuXHRcdFx0XHRcdFx0dGhpcy5hbGxvd2VkQ2FsY3VsYXRlZEZpZWxkcy5pbmNsdWRlcyh4Lm1hdGNoV29yZClcclxuXHRcdFx0XHRcdCkgJiZcclxuXHRcdFx0XHRcdG1hdGNoTGFzdEZpZWxkcy5ldmVyeSgoeCkgPT5cclxuXHRcdFx0XHRcdFx0dGhpcy5hbGxvd2VkQ2FsY3VsYXRlZEZpZWxkcy5pbmNsdWRlcyh4Lm1hdGNoV29yZClcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdC8vIOWIpOaWrUZpcnN05ZKMTGFzdOihqOi+vuW8j+WGheeahOWtl+auteaYr+WQpuWQiOazlVxyXG5cdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtdWxhOiBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtdWxhLFxyXG5cdFx0XHRcdFx0XHRtYXRjaEZpZWxkczogW1xyXG5cdFx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaEZpcnN0RmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoTGFzdEZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaE1heEZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaE1pbkZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaFN1bUZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaEF2Z0ZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0Z3JhbmRUb3RhbDogMCxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0bGV0IGZpZWxkTmFtZSA9IChcclxuXHRcdFx0XHRcdFx0Zm9ybXVsYVN0ci5zcGxpdChcIkZpcnN0KFwiKVsxXSB8fFxyXG5cdFx0XHRcdFx0XHRmb3JtdWxhU3RyLnNwbGl0KFwiTGFzdChcIilbMV1cclxuXHRcdFx0XHRcdCkuc3BsaXQoXCIpXCIpWzBdO1xyXG5cdFx0XHRcdFx0YXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybXVsYSA9XHJcblx0XHRcdFx0XHRcdFwiJ1xcXCJcIiArIFwiU3VtKFwiICsgZmllbGROYW1lICsgJylcIj0nICsgZm9ybXVsYVN0ciArIFwiJ1wiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ2FsY3VsYXRlZCBmaWVsZOS6i+S7tu+8muWujOaIkFxyXG5cdHB1YmxpYyBhY3Rpb25Db21wbGV0ZShhcmdzKSB7XHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3MuYWN0aW9uTmFtZSA9PT0gXCJGaWVsZCBhZ2dyZWdhdGVkXCIgfHxcclxuXHRcdFx0YXJncy5hY3Rpb25OYW1lID09PSBcIkZpZWxkIGxpc3QgY2xvc2VkXCJcclxuXHRcdCkge1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZXMgPSBbXHJcblx0XHRcdFx0Li4uYXJncy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzLFxyXG5cdFx0XHRdO1xyXG5cdFx0XHR0aGlzLnNldFZhbHVlSXRlbURhdGEoKTtcclxuXHRcdH1cclxuXHRcdGlmIChhcmdzLmFjdGlvbk5hbWUgPT0gXCJGaWVsZCByZW1vdmVkXCIpIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGFyZ3MuZmllbGRJbmZvICYmXHJcblx0XHRcdFx0YXJncy5maWVsZEluZm8uZmllbGRJdGVtICYmXHJcblx0XHRcdFx0YXJncy5maWVsZEluZm8uZmllbGRJdGVtLnR5cGUgPT0gXCJDYWxjdWxhdGVkRmllbGRcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRsZXQgZmllbGQgPSBhcmdzLmZpZWxkSW5mby5maWVsZE5hbWU7XHJcblx0XHRcdFx0Ly8gUmVtb3ZlIHRoZSBkZWxldGVkIGNhbGN1bGF0ZWQgZmllbGQgZnJvbSBhbiBzdG9yZWQgYXJyYXkuXHJcblx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzID1cclxuXHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5maWx0ZXIoZnVuY3Rpb24gKG9iaikge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gb2JqLm5hbWUgIT09IGZpZWxkO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIENhbGN1bGF0ZWQgZmllbGTkuovku7bvvJrlvIDlp4tcclxuXHRwdWJsaWMgYWN0aW9uQmVnaW4oYXJncykge1xyXG5cdFx0aWYgKGFyZ3MuYWN0aW9uTmFtZSA9PT0gXCJFZGl0IGNhbGN1bGF0ZWQgZmllbGRcIikge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lICYmXHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5maWVsZExpc3RbXHJcblx0XHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lXHJcblx0XHRcdFx0XHRdXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5maWVsZExpc3RbXHJcblx0XHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lXHJcblx0XHRcdFx0XHRdLmZvcm11bGEgPSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNbaV0uZm9ybXVsYTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmVzaXplU3RvcChhcmdzKSB7XHJcblx0XHRpZiAodGhpcy5jb25maWcuY29sdW1uc1dpZHRoKSB7XHJcblx0XHRcdGNvbnN0IGhlYWRlcl9maWVsZCA9IHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aC5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PiBlbC5oZWFkZXJUZXh0ID09PSBhcmdzLmNvbHVtbi5oZWFkZXJUZXh0XHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChoZWFkZXJfZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGhlYWRlcl9maWVsZFswXS53aWR0aCA9IHBhcnNlSW50KGFyZ3MuY29sdW1uLndpZHRoKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGgucHVzaCh7XHJcblx0XHRcdFx0XHRoZWFkZXJUZXh0OiBhcmdzLmNvbHVtbi5oZWFkZXJUZXh0LFxyXG5cdFx0XHRcdFx0d2lkdGg6IHBhcnNlSW50KGFyZ3MuY29sdW1uLndpZHRoKSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5jb25maWcuY29sdW1uc1dpZHRoID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aC5wdXNoKHtcclxuXHRcdFx0XHRoZWFkZXJUZXh0OiBhcmdzLmNvbHVtbi5oZWFkZXJUZXh0LFxyXG5cdFx0XHRcdHdpZHRoOiBwYXJzZUludChhcmdzLmNvbHVtbi53aWR0aCksXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgcG9ydGxldCA9IHRoaXMucG9ydGxldDtcclxuXHRcdHBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLnBvcnRsZXRzLmZpbmRJbmRleCgoeCkgPT4geC5uZXdJZCA9PT0gcG9ydGxldC5uZXdJZCk7XHJcblx0XHRpZiAoaW5kZXggPiAtMSkgdGhpcy5wb3J0bGV0c1tpbmRleF0gPSBwb3J0bGV0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRDb2x1bW5zUmVuZGVyKGFyZ3MpIHtcclxuXHRcdGlmIChhcmdzLnN0YWNrZWRDb2x1bW5zKSB7XHJcblx0XHRcdGFyZ3Muc3RhY2tlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0Y29sLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0KGNvbC5mb3JtYXQuaW5kZXhPZihcIk5cIikgIT09IC0xIHx8XHJcblx0XHRcdFx0XHRcdGNvbC5mb3JtYXQgPT09IFwicGVyY2VudFwiIHx8XHJcblx0XHRcdFx0XHRcdGNvbC5mb3JtYXQuaW5kZXhPZihcIlBcIikgIT09IC0xKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Y29sLnRleHRBbGlnbiA9IFwiUmlnaHRcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGgpIHtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoYXJncyBhcyBhbnkpLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRhcmdzLmNvbHVtbnNbaV0uaGVhZGVyVGV4dCA9PT0gXCJcIiB8fFxyXG5cdFx0XHRcdFx0IWFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0XHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5fcm93ID0gdGhpcy5jb25maWcuY29sdW1uc1dpZHRoLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0KGVsKSA9PiBlbC5oZWFkZXJUZXh0ID09PSBhcmdzLmNvbHVtbnNbaV0uaGVhZGVyVGV4dFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGlmIChjb2x1bW5fcm93Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0YXJncy5jb2x1bW5zW2ldLndpZHRoID0gY29sdW1uX3Jvd1swXS53aWR0aDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgaGVhZGVyVGV4dCA9IGFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0XHJcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpXHJcblx0XHRcdFx0XHRcdC5zcGxpdChcIi5cIik7XHJcblx0XHRcdFx0XHRpZiAoaGVhZGVyVGV4dCAmJiBoZWFkZXJUZXh0Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb25maWcuY29sdW1uc1dpZHRoLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRlbC5oZWFkZXJUZXh0XHJcblx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdC50b0xvd2VyQ2FzZSgpID09PVxyXG5cdFx0XHRcdFx0XHRcdFx0aGVhZGVyVGV4dFtoZWFkZXJUZXh0Lmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKClcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0aWYgKGNvbHVtbi5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS5jb2x1bW5zW2ldLndpZHRoID0gY29sdW1uWzBdLndpZHRoO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGRhdGUgZm9ybWF0IGFib3V0IHF1YXJ0ZXJseVxyXG5cdFx0XHRcdGxldCBwaXZvdFZhbHVlczogYW55ID0gdGhpcy5waXZvdE9iai5waXZvdFZhbHVlcztcclxuXHRcdFx0XHRpZiAodGhpcy5mb3JtYXREYXRlcyAmJiB0aGlzLmZvcm1hdERhdGVzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0bGV0IGRhdGVGaWVsZHMgPSB0aGlzLmZvcm1hdERhdGVzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGVsLm5hbWU7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdGZvciAobGV0IGsgPSAxOyBrIDwgcGl2b3RWYWx1ZXMubGVuZ3RoOyBrKyspIHtcclxuXHRcdFx0XHRcdFx0Zm9yIChcclxuXHRcdFx0XHRcdFx0XHRsZXQgaiA9IDA7XHJcblx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba10gIT0gbnVsbCAmJiBqIDwgcGl2b3RWYWx1ZXNba10ubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRcdGorK1xyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRwaXZvdFZhbHVlc1trXVtqXSAhPSBudWxsICYmXHJcblx0XHRcdFx0XHRcdFx0XHQoaiA9PSAwXHJcblx0XHRcdFx0XHRcdFx0XHRcdD8gZGF0ZUZpZWxkcy5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IGRhdGVGaWVsZHMuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwaXZvdFZhbHVlc1trXVtqXS5hY3R1YWxUZXh0XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKSlcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vQ3VzdG9taXplIHRoZSBSb3cgaGVhZGVycy9Db2x1bW4gaGVhZGVycyBiYXNlZCBvbiB5b3VyIG5lZWRzXHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgaGVhZGVycztcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChqID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSBwaXZvdFZhbHVlc1trXVtqXS5hY3R1YWxUZXh0O1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaGVhZGVycyA9IHBpdm90VmFsdWVzW2tdW2pdLmZvcm1hdHRlZFRleHQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSBwaXZvdFZhbHVlc1trXVtqXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChoZWFkZXJzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBkYXRlID0gbmV3IERhdGUoaGVhZGVycyk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcXVhcnRlciA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0TWF0aC5mbG9vcihkYXRlLmdldE1vbnRoKCkgLyAzKSArIDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0O1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mb3JtYXREYXRlcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGogPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IGVsLmZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLmFjdHVhbFRleHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gZWwuZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLmZvcm1hdHRlZFRleHQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0UXVhcnRlclZhbHVlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1YXJ0ZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBpZih0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgb25Mb2FkKCk6IHZvaWQge1xyXG5cdFx0Ly8gU01QMi0xNTY1MSDlvIDlkK/omZrmi5/mu5rliqjlubZzb3J05YiX5ZCO77yM5p2l5Zue5rua5Yqo5Lya5a+86Ie05pWw5o2u56m655m9XHJcblx0XHQvLyDlrpjmlrnpk77mjqUgaHR0cHM6Ly9lajIuc3luY2Z1c2lvbi5jb20vYW5ndWxhci9kb2N1bWVudGF0aW9uL3Bpdm90dmlldy92aXJ0dWFsLXNjcm9sbGluZyN2aXJ0dWFsLXNjcm9sbGluZy1mb3Itc3RhdGljLWZpZWxkLWxpc3RcclxuXHRcdC8vIERlbW/pk77mjqUgaHR0cHM6Ly9zdGFja2JsaXR6LmNvbS9lZGl0L2dpdGh1Yi03Z2drMnUtNHJremIzP2ZpbGU9c3JjJTJGYXBwLmNvbXBvbmVudC50c1xyXG5cdFx0KHRoaXMuZmllbGRsaXN0T2JqIGFzIFBpdm90RmllbGRMaXN0Q29tcG9uZW50KS5waXZvdEdyaWRNb2R1bGUgPSB0aGlzXHJcblx0XHRcdC5waXZvdE9iaiBhcyBQaXZvdFZpZXdDb21wb25lbnQ7XHJcblx0fVxyXG5cclxuXHRvbmRhdGFCb3VuZCgpe1xyXG5cdFx0aWYgKEJyb3dzZXIuaXNEZXZpY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5waXZvdE9iai5lbGVtZW50LnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLnBpdm90T2JqLmFsbG93Q2FsY3VsYXRlZEZpZWxkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5waXZvdE9iai5zaG93RmllbGRMaXN0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGVuZ2luZVBvcHVsYXRlZChhcmdzKSB7XHJcblx0XHRsZXQgY2xvbmVkVmFsdWVzOiBJUGl2b3RWYWx1ZXM7XHJcblx0XHRsZXQgY3VycmVudFBpdm90VmFsdWVzOiBhbnkgPSB0aGlzLmdldENsb25lZFBpdm90VmFsdWVzKFxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5waXZvdFZhbHVlc1xyXG5cdFx0KTtcclxuXHRcdGxldCBwYWdlU2V0dGluZ3M6IElQYWdlU2V0dGluZ3MgPVxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5wYWdlU2V0dGluZ3M7XHJcblxyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmdlbmVyYXRlR3JpZERhdGEpIHtcclxuXHRcdFx0Ly8g5rKh5rOV5aSN546wIGh0dHBzOi8vcmFpc2VscC5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9TTVAyLTE3MjQg5aSE55CG55qE6L+Z5Liq6Zeu6aKY5oOF5Ya1LCDnm7TmjqXms6jph4rmjolcclxuXHRcdFx0Ly8g5LiL6Z2i6L+Z5q615Luj56CB5Lya5b2x5ZONIGh0dHBzOi8vcmFpc2VscC5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9TTVAyLTEyMTM5XHJcblx0XHRcdC8vIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmdlbmVyYXRlR3JpZERhdGEoXHJcblx0XHRcdC8vIFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MsXHJcblx0XHRcdC8vIFx0dHJ1ZVxyXG5cdFx0XHQvLyApO1xyXG5cdFx0XHRjbG9uZWRWYWx1ZXMgPSB0aGlzLmdldENsb25lZFBpdm90VmFsdWVzKFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBpdm90VmFsdWVzXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5waXZvdFZhbHVlcyA9IGN1cnJlbnRQaXZvdFZhbHVlcztcclxuXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBhZ2VTZXR0aW5ncyA9IHBhZ2VTZXR0aW5ncztcclxuXHJcblx0XHRcdC8vIEhlcmUgXCJjbG9uZWRWYWx1ZXNcIiBjb250YWlucyB0aGUgd2hvbGUgcGl2b3QgdmFsdWVzLlxyXG5cdFx0XHR0aGlzLmFsbERhdGFWYWx1ZSA9IGNsb25lZFZhbHVlcztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q2xvbmVkUGl2b3RWYWx1ZXMocGl2b3RWYWx1ZXM6IElQaXZvdFZhbHVlcyk6IElQaXZvdFZhbHVlcyB7XHJcblx0XHRsZXQgY2xvbmVkU2V0czogSVBpdm90VmFsdWVzID0gW107XHJcblx0XHRpZiAocGl2b3RWYWx1ZXMgJiYgcGl2b3RWYWx1ZXMubGVuZ3RoKSB7XHJcblx0XHRcdGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBwaXZvdFZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChwaXZvdFZhbHVlc1tpXSkge1xyXG5cdFx0XHRcdFx0Y2xvbmVkU2V0c1tpXSA9IFtdO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IHBpdm90VmFsdWVzW2ldLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdGlmIChwaXZvdFZhbHVlc1tpXVtqXSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlICovXHJcblx0XHRcdFx0XHRcdFx0Y2xvbmVkU2V0c1tpXVtqXSA9IHRoaXMuZ2V0Q2xvbmVkUGl2b3RWYWx1ZU9iaihcclxuXHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2ldW2pdIGFzIHsgW2tleTogc3RyaW5nXTogT2JqZWN0IH1cclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNsb25lZFNldHM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldENsb25lZFBpdm90VmFsdWVPYmooZGF0YTogeyBba2V5OiBzdHJpbmddOiBPYmplY3QgfSk6IHtcclxuXHRcdFtrZXk6IHN0cmluZ106IE9iamVjdDtcclxuXHR9IHtcclxuXHRcdGxldCBrZXlQb3M6IG51bWJlciA9IDA7XHJcblx0XHRsZXQgZnJhbWVkU2V0OiBhbnkgPSB7fTtcclxuXHRcdGlmICghKGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdW5kZWZpbmVkKSkge1xyXG5cdFx0XHRsZXQgZmllbGRzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGRhdGEpO1xyXG5cdFx0XHR3aGlsZSAoa2V5UG9zIDwgZmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRcdGZyYW1lZFNldFtmaWVsZHNba2V5UG9zXV0gPSBkYXRhW2ZpZWxkc1trZXlQb3NdXTtcclxuXHRcdFx0XHRrZXlQb3MrKztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0ZnJhbWVkU2V0ID0gZGF0YTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmcmFtZWRTZXQ7XHJcblx0fVxyXG5cclxuXHQvLyNyZWdpb24gRmlsdGVyaW5nIHRoZSBUcmVlTm9kZXNcclxuXHRwcml2YXRlIHNlYXJjaE5vZGVzKGFyZ3MpIHtcclxuXHRcdGxldCBfdGV4dCA9IGFyZ3MubWFza2VkVmFsdWU7XHJcblx0XHRsZXQgcHJlZGljYXRzID0gW10sXHJcblx0XHRcdF9hcnJheSA9IFtdLFxyXG5cdFx0XHRfZmlsdGVyID0gW107XHJcblx0XHRpZiAoX3RleHQgPT0gXCJcIikge1xyXG5cdFx0XHR0aGlzLmNoYW5nZURhdGFTb3VyY2UoXHJcblx0XHRcdFx0KCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueSkuZ2V0VHJlZURhdGEoKVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGV0IHByZWRpY2F0ZSA9IG5ldyBQcmVkaWNhdGUoXCJjYXB0aW9uXCIsIFwiY29udGFpbnNcIiwgX3RleHQsIHRydWUpO1xyXG5cdFx0XHRsZXQgZmlsdGVyZWRMaXN0ID0gbmV3IERhdGFNYW5hZ2VyKFxyXG5cdFx0XHRcdCgodGhpcyBhcyBhbnkpLmZpZWxkbGlzdE9iai50cmVlVmlld01vZHVsZSBhcyBhbnkpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0KS5leGVjdXRlTG9jYWwobmV3IFF1ZXJ5KCkud2hlcmUocHJlZGljYXRlKSk7XHJcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgZmlsdGVyZWRMaXN0Lmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0X2ZpbHRlci5wdXNoKGZpbHRlcmVkTGlzdFtqXVtcImlkXCJdKTtcclxuXHRcdFx0XHRsZXQgZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVySXRlbXMoXHJcblx0XHRcdFx0XHRmaWx0ZXJlZExpc3Rbal0sXHJcblx0XHRcdFx0XHQoXHJcblx0XHRcdFx0XHRcdCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueVxyXG5cdFx0XHRcdFx0KS5nZXRUcmVlRGF0YSgpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0X2FycmF5LmluZGV4T2YoZmlsdGVyc1tpXSkgPT0gLTEgJiZcclxuXHRcdFx0XHRcdFx0ZmlsdGVyc1tpXSAhPSBudWxsXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0X2FycmF5LnB1c2goZmlsdGVyc1tpXSk7XHJcblx0XHRcdFx0XHRcdHByZWRpY2F0cy5wdXNoKFxyXG5cdFx0XHRcdFx0XHRcdG5ldyBQcmVkaWNhdGUoXCJpZFwiLCBcImVxdWFsXCIsIGZpbHRlcnNbaV0sIGZhbHNlKVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAocHJlZGljYXRzLmxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VEYXRhU291cmNlKFtdKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRsZXQgcXVlcnkgPSBuZXcgUXVlcnkoKS53aGVyZShQcmVkaWNhdGUub3IocHJlZGljYXRzKSk7XHJcblx0XHRcdFx0bGV0IG5ld0xpc3QgPSBuZXcgRGF0YU1hbmFnZXIoXHJcblx0XHRcdFx0XHQoXHJcblx0XHRcdFx0XHRcdCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueVxyXG5cdFx0XHRcdFx0KS5nZXRUcmVlRGF0YSgpXHJcblx0XHRcdFx0KS5leGVjdXRlTG9jYWwocXVlcnkpO1xyXG5cdFx0XHRcdHRoaXMuY2hhbmdlRGF0YVNvdXJjZShuZXdMaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly9GaW5kIHRoZSBQYXJlbnQgTm9kZXMgZm9yIGNvcnJlc3BvbmRpbmcgY2hpbGRzXHJcblx0cHVibGljIGdldEZpbHRlckl0ZW1zKGZMaXN0LCBsaXN0KSB7XHJcblx0XHRsZXQgbm9kZXMgPSBbXTtcclxuXHRcdG5vZGVzLnB1c2goZkxpc3RbXCJpZFwiXSk7XHJcblx0XHRsZXQgcXVlcnkyID0gbmV3IFF1ZXJ5KCkud2hlcmUoXCJpZFwiLCBcImVxdWFsXCIsIGZMaXN0W1wicGlkXCJdLCBmYWxzZSk7XHJcblx0XHRsZXQgZkxpc3QxID0gbmV3IERhdGFNYW5hZ2VyKGxpc3QpLmV4ZWN1dGVMb2NhbChxdWVyeTIpO1xyXG5cdFx0aWYgKGZMaXN0MS5sZW5ndGggIT0gMCkge1xyXG5cdFx0XHRsZXQgcE5vZGUgPSB0aGlzLmdldEZpbHRlckl0ZW1zKGZMaXN0MVswXSwgbGlzdCk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcE5vZGUubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRpZiAobm9kZXMuaW5kZXhPZihwTm9kZVtpXSkgPT0gLTEgJiYgcE5vZGVbaV0gIT0gbnVsbClcclxuXHRcdFx0XHRcdG5vZGVzLnB1c2gocE5vZGVbaV0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBub2RlcztcclxuXHRcdH1cclxuXHRcdHJldHVybiBub2RlcztcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBjcmVhdGVkKGFyZ3M6IGFueSkge1xyXG5cdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqICYmICF0aGlzLmZpZWxkbGlzdE9iai5lbmdpbmVNb2R1bGUuZmllbGRzKSB7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmVuZ2luZU1vZHVsZS5maWVsZHMgPSBbXTtcclxuXHRcdH1cclxuXHRcdGxldCBzZWFyY2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcblx0XHRzZWFyY2guaWQgPSBcInBpdm90U2VhcmNoQm94XCIgKyB0aGlzLmZpZWxkbGlzdE9iai5lbGVtZW50LmlkO1xyXG5cdFx0bGV0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuXHRcdFx0XCIjXCIgKyB0aGlzLmZpZWxkbGlzdE9iai5lbGVtZW50LmlkICsgXCJfQ29udGFpbmVyIC5lLWZpZWxkLXRhYmxlXCJcclxuXHRcdCk7XHJcblx0XHRpZiAoZWwpIGVsLnByZXBlbmQoc2VhcmNoKTtcclxuXHRcdHRoaXMucGl2b3RTZWFyY2hCb3ggPSBuZXcgTWFza2VkVGV4dEJveCh7XHJcblx0XHRcdHBsYWNlaG9sZGVyOiB0aGlzLnRyYW5zbGF0aW9uLlNFQVJDSCB8fCBcIi5TRUFSQ0hcIixcclxuXHRcdFx0Y3NzQ2xhc3M6IFwicGl2b3Qtc2VhcmNoXCIsXHJcblx0XHRcdGNoYW5nZTogdGhpcy5zZWFyY2hOb2Rlcy5iaW5kKHRoaXMpLFxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLnBpdm90U2VhcmNoQm94LmFwcGVuZFRvKFxyXG5cdFx0XHRcIiNwaXZvdFNlYXJjaEJveFwiICsgdGhpcy5maWVsZGxpc3RPYmouZWxlbWVudC5pZFxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyBORVcgRGFzaGJvYXJkIOeCueWHu1wiYXBwbHlcIuaXtu+8jOivt+axguaWsOaVsOaNrlxyXG5cdFx0bGV0IGFwcGx5QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQgKyBcIl9EZWZlclVwZGF0ZUJ1dHRvbjFcIlxyXG5cdFx0KTtcclxuXHJcblx0XHRhcHBseUJ0biAmJlxyXG5cdFx0XHRhcHBseUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0RGF0YUJ5UG9ydGxldHNOZXcoXHJcblx0XHRcdFx0XHRbdGhpcy5wb3J0bGV0XSxcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHR0aGlzLlBpdm90X0RhdGEgPVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0UmVzdWx0QnlEYXRhVGFibGUoXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBvcnRsZXQsXHJcblx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmQuaWRcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5kYXRhU291cmNlID1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLlBpdm90X0RhdGE7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5QaXZvdF9EYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGdyb3VwcyA9IHRoaXMuY29uZmlnLnhheGlzLmdyb3VwcztcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93cyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChncm91cHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGdpdGVtIG9mIGdyb3Vwcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGdpdGVtLm5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGZpZWxkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRnaXRlbS5zaG93U3ViVG90YWxzID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLnNob3dTdWJUb3RhbHM7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Z2l0ZW0uY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nVmFsdWUgfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudHJhbnNsYXRpb25bXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nQ29kZSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2l0ZW0uY2FwdGlvbjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyb3dzLnB1c2goZ2l0ZW0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLlBpdm90X0RhdGEubWFwKChkYXRhKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRyb3dzLmZvckVhY2goKHJvdykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZGF0YVtyb3cubmFtZV0gPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhW3Jvdy5uYW1lXSA9IFwibnVsbFwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkLFxyXG5cdFx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0XHJcblx0XHQvLyDngrnlh7tcImNhbmNlbFwi5pe277yM5oGi5aSN5Y6f5aeL5pWw5o2uXHJcblx0XHRsZXQgY2FuY2VsQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQgKyBcIl9EZWZlclVwZGF0ZUJ1dHRvbjJcIlxyXG5cdFx0KTtcclxuXHJcblx0XHRjYW5jZWxCdG4gJiZcclxuXHRcdFx0Y2FuY2VsQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuZGF0YVNvdXJjZSA9XHJcblx0XHRcdFx0XHRbLi4udGhpcy5QaXZvdF9EYXRhXTtcclxuXHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0XHRcdHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdFx0fSk7XHRcdFxyXG5cdH1cclxuXHJcblx0cHVibGljIGZpZWxkTGlzdFJlZnJlc2hlZChhcmdzKSB7XHJcblx0XHRpZiAodGhpcy5waXZvdFNlYXJjaEJveCkge1xyXG5cdFx0XHR0aGlzLnBpdm90U2VhcmNoQm94LnZhbHVlID0gXCJcIjtcclxuXHRcdFx0dGhpcy5jaGFuZ2VEYXRhU291cmNlKFxyXG5cdFx0XHRcdCh0aGlzLmZpZWxkbGlzdE9iai50cmVlVmlld01vZHVsZSBhcyBhbnkpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2hhbmdlRGF0YVNvdXJjZShkYXRhKSB7XHJcblx0XHRsZXQgZmllbGRUYWJsZSA9ICh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlLmZpZWxkVGFibGU7XHJcblx0XHRpZiAoZmllbGRUYWJsZSkge1xyXG5cdFx0XHRmaWVsZFRhYmxlLmZpZWxkcyA9IHtcclxuXHRcdFx0XHRkYXRhU291cmNlOiBkYXRhLFxyXG5cdFx0XHRcdGlkOiBcImlkXCIsXHJcblx0XHRcdFx0dGV4dDogXCJjYXB0aW9uXCIsXHJcblx0XHRcdFx0aXNDaGVja2VkOiBcImlzU2VsZWN0ZWRcIixcclxuXHRcdFx0XHRwYXJlbnRJRDogXCJwaWRcIixcclxuXHRcdFx0XHRpY29uQ3NzOiBcInNwcml0ZUNzc0NsYXNzXCIsXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvL1NNUDItMjk1NyBmaXggdGhlIGRhdGUgaXNzdWUgb24gdGhlIHJhdyBkYXRhXHJcblx0cHVibGljIGRyaWxsVGhyb3VnaChhcmdzOiBEcmlsbFRocm91Z2hFdmVudEFyZ3MpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5ncmlkQ29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBkYXRhID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gYXJncy5ncmlkQ29sdW1uc1tpXS5maWVsZFxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRkYXRhWzBdLmRhdGFUeXBlID09PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0ZGF0YVswXS5kYXRhVHlwZSA9PT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRhcmdzLmdyaWRDb2x1bW5zW2ldLnR5cGUgPSBcImRhdGVcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0Ly8jZW5kcmVnaW9uXHJcblxyXG5cdHByaXZhdGUgc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChvYmosIGRhdGEsIGNvZGUpIHtcclxuXHRcdGlmIChjb2RlID09PSAtMSkge1xyXG5cdFx0XHRvYmouc3R5bGUuY29sb3IgPSBkYXRhLm5lZ2FGb250Q29sb3I7XHJcblx0XHRcdG9iai5zdHlsZS5mb250RmFtaWx5ID0gZGF0YS5uZWdhRm9udEZhbWlseVZhbHVlO1xyXG5cdFx0XHRvYmouc3R5bGUuZm9udFNpemUgPSBkYXRhLm5lZ2FGb250U2l6ZVZhbHVlO1xyXG5cdFx0XHRvYmouc3R5bGUuYmFja2dyb3VuZENvbG9yID0gZGF0YS5uZWdhQmFja2dyb3VuZENvbG9yO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0b2JqLnN0eWxlLmNvbG9yID0gZGF0YS5mb250Q29sb3I7XHJcblx0XHRcdG9iai5zdHlsZS5mb250RmFtaWx5ID0gZGF0YS5mb250RmFtaWx5VmFsdWU7XHJcblx0XHRcdG9iai5zdHlsZS5mb250U2l6ZSA9IGRhdGEuZm9udFNpemVWYWx1ZTtcclxuXHRcdFx0b2JqLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGRhdGEuYmFja2dyb3VuZENvbG9yO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRDb21wYXJlQ29uZGl0aW9uYWwoXHJcblx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdGRhdGFcclxuXHQpIHtcclxuXHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUxKSA9PSAwKSB7XHJcblx0XHRcdHN3aXRjaCAoZGF0YS5jb21wYXJlU2VsZWN0KSB7XHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuXCI6IC8vIOWwj+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJMZXNzVGhhbk9yRXF1YWxUb1wiOiAvLyDlsI/kuo7nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5cIjogLy8g5aSn5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuT3JFcXVhbFRvXCI6IC8vIOWkp+S6juetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkdyZWF0ZXJUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEVxdWFsc1wiOiAvLyDkuI3nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQmV0d2VlblwiOiAvLyB2YWx1ZTE8PSB2YWwgPD12YWx1ZTJcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSA9PT0gMSkge1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5jb21wYXJlVmFsdWUyXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEJldHdlZW5cIjogLy8gdmFsID49IHZhbHVlMiwgdmFsIDw9IHZhbHVlMVxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTEpID09PSAxKSB7XHJcblx0XHRcdHN3aXRjaCAoZGF0YS5jb21wYXJlU2VsZWN0KSB7XHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuXCI6IC8vIOWwj+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJMZXNzVGhhbk9yRXF1YWxUb1wiOiAvLyDlsI/kuo7nrYnkuo5cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBOdW1iZXIoZGF0YS5jb21wYXJlVmFsdWUxKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJMZXNzVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuXCI6IC8vIOWkp+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhbk9yRXF1YWxUb1wiOiAvLyDlpKfkuo7nrYnkuo5cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IE51bWJlcihkYXRhLmNvbXBhcmVWYWx1ZTEpO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiRXF1YWxzXCI6IC8vIOetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJFcXVhbHNcIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90RXF1YWxzXCI6IC8vIOS4jeetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihkYXRhLmNvbXBhcmVWYWx1ZTEpO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0Ly8gcHVzaOi/m+aVsOe7hFxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0Ly8gcHVzaOi/m+aVsOe7hFxyXG5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkJldHdlZW5cIjogLy8gdmFsdWUxPD0gdmFsIDw9dmFsdWUyXHJcblx0XHRcdFx0XHRpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMikgPT09IDEpIHtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5jb21wYXJlVmFsdWUyXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEJldHdlZW5cIjogLy8gdmFsID49IHZhbHVlMiwgdmFsIDw9IHZhbHVlMVxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0Ly8gcHVzaOi/m+aVsOe7hFxyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMSkgPT09IC0xKSB7XHJcblx0XHRcdHN3aXRjaCAoZGF0YS5jb21wYXJlU2VsZWN0KSB7XHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuXCI6IC8vIOWwj+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJMZXNzVGhhbk9yRXF1YWxUb1wiOiAvLyDlsI/kuo7nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IGRhdGEuY29tcGFyZVNlbGVjdDtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhblwiOiAvLyDlpKfkuo5cclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5PckVxdWFsVG9cIjogLy8g5aSn5LqO562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5PckVxdWFsVG9cIjtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkVxdWFsc1wiOiAvLyDnrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiRXF1YWxzXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEVxdWFsc1wiOiAvLyDkuI3nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTm90RXF1YWxzXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQmV0d2VlblwiOiAvLyB2YWx1ZTE8PSB2YWwgPD12YWx1ZTJcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSkge1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMjtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUyO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJOb3RCZXR3ZWVuXCI6IC8vIHZhbCA+PSB2YWx1ZTIsIHZhbCA8PSB2YWx1ZTFcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSkge1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTI7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkdyZWF0ZXJUaGFuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBkYXRhLmNvbXBhcmVWYWx1ZTI7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJOb3RCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldFF1YXJ0ZXJWYWx1ZShmb3JtYXQsIGRhdGUsIHF1YXJ0ZXIpIHtcclxuXHRcdGxldCB5ZWFyOiBhbnk7XHJcblx0XHRzd2l0Y2ggKGZvcm1hdCkge1xyXG5cdFx0XHRjYXNlIFwiUTEgMjAyMVwiOlxyXG5cdFx0XHRcdHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcblx0XHRcdFx0cmV0dXJuIFwiUVwiICsgcXVhcnRlciArIFwiIFwiICsgeWVhcjtcclxuXHRcdFx0Y2FzZSBcIlExIDIxXCI6XHJcblx0XHRcdFx0eWVhciA9IChkYXRlIGFzIGFueSkuZ2V0WWVhcigpIC0gMTAwO1xyXG5cdFx0XHRcdHJldHVybiBcIlFcIiArIHF1YXJ0ZXIgKyBcIiBcIiArIHllYXI7XHJcblx0XHRcdGNhc2UgXCIyMDIxIFExXCI6XHJcblx0XHRcdFx0eWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuXHRcdFx0XHRyZXR1cm4geWVhciArIFwiIFwiICsgXCJRXCIgKyBxdWFydGVyO1xyXG5cdFx0XHRjYXNlIFwiMjEgUTFcIjpcclxuXHRcdFx0XHR5ZWFyID0gKGRhdGUgYXMgYW55KS5nZXRZZWFyKCkgLSAxMDA7XHJcblx0XHRcdFx0cmV0dXJuIHllYXIgKyBcIiBcIiArIFwiUVwiICsgcXVhcnRlcjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGN1c3RvbWlzZUNlbGwoYXJnczogUXVlcnlDZWxsSW5mb0V2ZW50QXJncykge1xyXG5cdFx0aWYgKGFyZ3MuY29sdW1uLnR5cGUgPT09IFwiZGF0ZVwiIHx8IGFyZ3MuY29sdW1uLnR5cGUgPT09IFwiZGF0ZVRpbWVcIikge1xyXG5cdFx0XHRjb25zdCB7IGZpZWxkIH0gPSBhcmdzLmNvbHVtbjtcclxuXHRcdFx0aWYgKCFhcmdzLmRhdGFbZmllbGRdKSB7XHJcblx0XHRcdFx0YXJncy5jb2x1bW4udHlwZSA9IFwic3RyaW5nXCI7XHJcblx0XHRcdFx0YXJncy5jb2x1bW4uZm9ybWF0ID0gXCJcIjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHRpbWVBcnJheSDmlbDnu4Tlr7nosaEgW3tcImRhdGVcIjpcIjIwMjEtMDEtMDFcIn0se1wiZGF0ZVwiOlwiMjAyMS0wMi0wMVwifV1cclxuXHQgKiBAcGFyYW0gZW5kRGF0ZSDmiKroh7Pml7bpl7RcclxuXHQgKiBAcGFyYW0gaW50ZXJ2YWwg5pe26Ze06Ze06ZqUIHllYXIgLyBxdWFydGVyIC8gbW9udGhcclxuXHQgKiBAcGFyYW0gdGltZUtleSDml7bpl7TlrZfmrrXlkI0gZGF0ZVxyXG5cdCAqIEByZXR1cm5zIOWIkuWIhuWQjueahOaXtumXtOWIhue7hOWvueixoVxyXG5cdCAqL1xyXG5cdGdldFRpbWVSYW5nZXModGltZUFycmF5LCBlbmREYXRlLCBpbnRlcnZhbCwgdGltZUtleSkge1xyXG5cdFx0Ly8g5bCG5pe26Ze05a2X56ym5Liy6L2s5o2i5Li6IG1vbWVudCDlr7nosaFcclxuXHRcdGNvbnN0IGRhdGVzID0gdGltZUFycmF5Lm1hcCgoaXRlbSkgPT4gbW9tZW50KGl0ZW1bdGltZUtleSB8fCBcImRhdGVcIl0pKTtcclxuXHJcblx0XHQvLyDliIbpmpTnrKZcclxuXHRcdGNvbnN0IGRlbGltaXRlciA9IFwiLVwiO1xyXG5cclxuXHRcdC8vIOaJvuWIsOacgOWwj+aXtumXtOWSjOacgOWkp+aXtumXtFxyXG5cdFx0Y29uc3QgbWluRGF0ZSA9IG1vbWVudC5taW4oZGF0ZXMpO1xyXG5cdFx0Y29uc3QgbWF4RGF0ZSA9IG1vbWVudChlbmREYXRlKTtcclxuXHJcblx0XHQvLyDliJ3lp4vljJbnu5Pmnpzlr7nosaFcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdC8vIOagueaNruWFpeWPgui/m+ihjOWIkuWIhlxyXG5cdFx0aWYgKGludGVydmFsID09PSBcInllYXJcIikge1xyXG5cdFx0XHRjb25zdCBzdGFydFllYXIgPSBtaW5EYXRlLnllYXIoKTtcclxuXHRcdFx0Y29uc3QgZW5kWWVhciA9IG1heERhdGUueWVhcigpO1xyXG5cclxuXHRcdFx0Zm9yIChsZXQgeWVhciA9IHN0YXJ0WWVhcjsgeWVhciA8PSBlbmRZZWFyOyB5ZWFyKyspIHtcclxuXHRcdFx0XHRyZXN1bHRbeWVhcl0gPSBbXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZGF0ZXMuZm9yRWFjaCgoZGF0ZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCB5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0cmVzdWx0W3llYXJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIGlmIChpbnRlcnZhbCA9PT0gXCJxdWFydGVyXCIpIHtcclxuXHRcdFx0Ly8g5a2Y5YKo5a2j5bqm5a2X56ym5LiyXHJcblx0XHRcdGNvbnN0IHF1YXJ0ZXJzID0gW107XHJcblxyXG5cdFx0XHQvLyDpgJDkuIDpgY3ljobmr4/kuKrlraPluqZcclxuXHRcdFx0Zm9yIChcclxuXHRcdFx0XHRsZXQgY3VycmVudERhdGUgPSBtaW5EYXRlLmNsb25lKCk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuaXNTYW1lT3JCZWZvcmUobWF4RGF0ZSk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuYWRkKDMsIFwibW9udGhzXCIpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0Y29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoY3VycmVudERhdGUubW9udGgoKSArIDEpIC8gMyk7IC8vIOiuoeeul+Wto+W6plxyXG5cdFx0XHRcdHF1YXJ0ZXJzLnB1c2goYCR7eWVhcn0ke2RlbGltaXRlcn1RJHtxdWFydGVyfWApOyAvLyDmoLzlvI/ljJblubbmt7vliqDliLDmlbDnu4RcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8g6L6T5Ye65omA5pyJ5a2j5bqmXHJcblx0XHRcdHF1YXJ0ZXJzLmZvckVhY2goKHF1YXJ0ZXIsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0W3F1YXJ0ZXJdID0gW107XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0ZGF0ZXMuZm9yRWFjaCgoZGF0ZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCB5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0Y29uc3QgcXVhcnRlciA9IGRhdGUucXVhcnRlcigpOyAvLyDojrflj5blraPluqZcclxuXHRcdFx0XHRpZiAocXVhcnRlciA9PT0gMSlcclxuXHRcdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgXCJRMVwiXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHRcdGVsc2UgaWYgKHF1YXJ0ZXIgPT09IDIpXHJcblx0XHRcdFx0XHRyZXN1bHRbeWVhciArIGRlbGltaXRlciArIFwiUTJcIl0ucHVzaCh0aW1lQXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0XHRlbHNlIGlmIChxdWFydGVyID09PSAzKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3llYXIgKyBkZWxpbWl0ZXIgKyBcIlEzXCJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdFx0ZWxzZSBpZiAocXVhcnRlciA9PT0gNClcclxuXHRcdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgXCJRNFwiXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0gZWxzZSBpZiAoaW50ZXJ2YWwgPT09IFwibW9udGhcIikge1xyXG5cdFx0XHQvLyDlrZjlgqjmnIjku73lrZfnrKbkuLJcclxuXHRcdFx0Y29uc3QgbW9udGhzID0gW107XHJcblxyXG5cdFx0XHQvLyDpgJDkuIDpgY3ljobmr4/kuKrmnIhcclxuXHRcdFx0Zm9yIChcclxuXHRcdFx0XHRsZXQgY3VycmVudERhdGUgPSBtaW5EYXRlLmNsb25lKCk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuaXNTYW1lT3JCZWZvcmUobWF4RGF0ZSk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuYWRkKDEsIFwibW9udGhzXCIpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdG1vbnRocy5wdXNoKGN1cnJlbnREYXRlLmZvcm1hdChgWVlZWSR7ZGVsaW1pdGVyfU1NYCkpOyAvLyDmoLzlvI/ljJblubbmt7vliqDliLDmlbDnu4RcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8g6L6T5Ye65omA5pyJ5pyI5Lu9XHJcblx0XHRcdG1vbnRocy5mb3JFYWNoKChtb250aCwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRbbW9udGhdID0gW107XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0ZGF0ZXMuZm9yRWFjaCgoZGF0ZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCB5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0Y29uc3QgbW9udGggPSAoZGF0ZS5tb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIik7IC8vIDAtMTFcclxuXHRcdFx0XHRyZXN1bHRbeWVhciArIGRlbGltaXRlciArIG1vbnRoXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICog6K6h566X5Yeg5L2V566X5pWw5bmz5pa55pu0XHJcblx0ICogQHBhcmFtIHZhbHVlcyDmlbDnu4QgWzAsIDAsIDAuMjU3NV1cclxuXHQgKiBAcmV0dXJuc1xyXG5cdCAqL1xyXG5cdGNhbGN1bGF0ZUdyb3d0aFJhdGUodmFsdWVzKSB7XHJcblx0XHRjb25zdCBwcm9kdWN0ID0gdmFsdWVzLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyAqICgxICsgdmFsKSwgMSk7XHJcblx0XHRpZiAocHJvZHVjdCA+PSAwKSB7XHJcblx0XHRcdHJldHVybiBNYXRoLnBvdyhwcm9kdWN0LCAxIC8gdmFsdWVzLmxlbmd0aCkgLSAxO1xyXG5cdFx0fSBlbHNlIGlmIChwcm9kdWN0IDwgMCkge1xyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCAlIDIgPT0gMCkge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLm50aHJvb3QocHJvZHVjdCwgdmFsdWVzLmxlbmd0aCkgLSAxO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdG50aHJvb3QoeCwgbikge1xyXG5cdFx0bGV0IG5nID0gbiAlIDI7XHJcblx0XHRpZiAobmcgPT0gMSB8fCB4IDwgMCkgeCA9IC14O1xyXG5cdFx0dmFyIHIgPSBNYXRoLnBvdyh4LCAxIC8gbik7XHJcblx0XHRuID0gTWF0aC5wb3cociwgbik7XHJcblxyXG5cdFx0aWYgKE1hdGguYWJzKHggLSBuKSA8IDEgJiYgeCA+IDAgPT09IG4gPiAwKSByZXR1cm4gbmcgPyAtciA6IHI7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiDmoIflh4blgY/lt65cclxuXHQgKiBAcGFyYW0gdmFsdWVzIOaVsOe7hCBbMCwgMCwgLTAuNDc3NV1cclxuXHQgKiBAcmV0dXJucyAwLjI3NTY4NDc1MzUzODA0NjNcclxuXHQgKi9cclxuXHRjYWxjdWxhdGVTdGFuZGFyZERldmlhdGlvbih2YWx1ZXMpIHtcclxuXHRcdGNvbnN0IG4gPSB2YWx1ZXMubGVuZ3RoO1xyXG5cclxuXHRcdC8vIOajgOafpeaVsOaNrueCueaVsOmHj1xyXG5cdFx0aWYgKG4gPCAyKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIuiHs+WwkemcgOimgeS4pOS4quaVsOaNrueCueadpeiuoeeul+agt+acrOagh+WHhuWBj+W3rlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyDorqHnrpflnYflgLxcclxuXHRcdGNvbnN0IG1lYW4gPSB2YWx1ZXMucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICsgdmFsLCAwKSAvIG47XHJcblxyXG5cdFx0Ly8g6K6h566X5pa55beuXHJcblx0XHRjb25zdCB2YXJpYW5jZSA9XHJcblx0XHRcdHZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyBNYXRoLnBvdyh2YWwgLSBtZWFuLCAyKSwgMCkgL1xyXG5cdFx0XHQobiAtIDEpO1xyXG5cclxuXHRcdC8vIOi/lOWbnuagh+WHhuWBj+W3rlxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCh2YXJpYW5jZSk7XHJcblx0fVxyXG59XHJcbiJdfQ==
|