slate-angular 16.1.0-next.1 → 16.1.0-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/components/children/children-outlet.component.d.ts +9 -0
  2. package/components/editable/editable.component.d.ts +1 -1
  3. package/components/string/default-string.component.d.ts +1 -1
  4. package/esm2022/components/block-card/block-card.component.mjs +2 -2
  5. package/esm2022/components/children/children-outlet.component.mjs +22 -0
  6. package/esm2022/components/children/children.component.mjs +2 -4
  7. package/esm2022/components/editable/editable.component.mjs +24 -10
  8. package/esm2022/components/leaf/token.mjs +1 -1
  9. package/esm2022/components/string/default-string.component.mjs +1 -1
  10. package/esm2022/components/string/string.component.mjs +1 -1
  11. package/esm2022/components/text/token.mjs +1 -1
  12. package/esm2022/module.mjs +7 -16
  13. package/esm2022/plugins/angular-editor.mjs +28 -7
  14. package/esm2022/plugins/with-angular.mjs +4 -4
  15. package/esm2022/public-api.mjs +3 -2
  16. package/esm2022/utils/constants.mjs +2 -0
  17. package/esm2022/utils/index.mjs +2 -1
  18. package/esm2022/utils/throttle.mjs +1 -1
  19. package/esm2022/view/base.mjs +39 -22
  20. package/esm2022/view/container.mjs +1 -1
  21. package/esm2022/view/context-change.mjs +13 -0
  22. package/esm2022/view/context.mjs +1 -1
  23. package/esm2022/view/render/leaves-render.mjs +8 -6
  24. package/esm2022/view/render/list-render.mjs +14 -12
  25. package/esm2022/view/render/utils.mjs +20 -7
  26. package/fesm2022/slate-angular.mjs +180 -78
  27. package/fesm2022/slate-angular.mjs.map +1 -1
  28. package/module.d.ts +2 -1
  29. package/package.json +7 -7
  30. package/plugins/angular-editor.d.ts +1 -1
  31. package/public-api.d.ts +2 -1
  32. package/utils/constants.d.ts +1 -0
  33. package/utils/index.d.ts +1 -0
  34. package/view/base.d.ts +9 -7
  35. package/view/{before-context-change.d.ts → context-change.d.ts} +4 -0
  36. package/view/context.d.ts +1 -3
  37. package/view/render/leaves-render.d.ts +2 -1
  38. package/view/render/list-render.d.ts +4 -3
  39. package/view/render/utils.d.ts +2 -2
  40. package/esm2022/view/before-context-change.mjs +0 -7
@@ -1,3 +1,3 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const SLATE_DEFAULT_LEAF_COMPONENT_TOKEN = new InjectionToken('slate-default-leaf-token');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy9sZWFmL3Rva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0MsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsSUFBSSxjQUFjLENBQW1DLDBCQUEwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzL3ZpZXcnO1xuaW1wb3J0IHsgQmFzZUxlYWZDb21wb25lbnQgfSBmcm9tICcuLi8uLi92aWV3L2Jhc2UnO1xuXG5leHBvcnQgY29uc3QgU0xBVEVfREVGQVVMVF9MRUFGX0NPTVBPTkVOVF9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDb21wb25lbnRUeXBlPEJhc2VMZWFmQ29tcG9uZW50Pj4oJ3NsYXRlLWRlZmF1bHQtbGVhZi10b2tlbicpOyJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy9sZWFmL3Rva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0MsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsSUFBSSxjQUFjLENBQW1DLDBCQUEwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzL3ZpZXcnO1xuaW1wb3J0IHsgQmFzZUxlYWZDb21wb25lbnQgfSBmcm9tICcuLi8uLi92aWV3L2Jhc2UnO1xuXG5leHBvcnQgY29uc3QgU0xBVEVfREVGQVVMVF9MRUFGX0NPTVBPTkVOVF9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDb21wb25lbnRUeXBlPEJhc2VMZWFmQ29tcG9uZW50Pj4oJ3NsYXRlLWRlZmF1bHQtbGVhZi10b2tlbicpO1xuIl19
@@ -77,4 +77,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
77
77
  standalone: true
78
78
  }]
79
79
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1zdHJpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvc3RyaW5nL2RlZmF1bHQtc3RyaW5nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLHVCQUF1QixFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUUxRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBVWhELE1BQU0sT0FBTyxrQkFDVCxTQUFRLGFBQWlDO0lBTXpDLFlBQW1CLFVBQTJCLEVBQVMsR0FBc0I7UUFDekUsS0FBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQURSLGVBQVUsR0FBVixVQUFVLENBQWlCO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFFN0UsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQXlCO1FBQ3pDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssc0JBQXNCLEVBQUU7Z0JBQzlDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO2lCQUN4QztxQkFBTTtvQkFDSCxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO2lCQUN6QjthQUNKO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQ2hDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxzQkFBc0IsRUFBRTtvQkFDdkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2lCQUMxQjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUMxQjthQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssc0JBQXNCLEVBQUU7WUFDckQsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7U0FDeEM7SUFDTCxDQUFDO0lBRUQsNkJBQTZCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsNkJBQTZCO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDdEIsOEJBQThCO1FBQzlCLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsZUFBZTtRQUNYLHFHQUFxRztRQUNyRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ3REO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDOzhHQXpFUSxrQkFBa0I7a0dBQWxCLGtCQUFrQiwyR0FKakIsRUFBRTs7MkZBSUgsa0JBQWtCO2tCQU45QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTbGF0ZVN0cmluZ0NvbnRleHQgfSBmcm9tICcuLi8uLi92aWV3L2NvbnRleHQnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ZpZXcvYmFzZSc7XG5pbXBvcnQgeyBCZWZvcmVDb250ZXh0Q2hhbmdlIH0gZnJvbSAnLi4vLi4vdmlldy9iZWZvcmUtY29udGV4dC1jaGFuZ2UnO1xuaW1wb3J0IHsgRE9NRWxlbWVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2RvbSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc3BhbltzbGF0ZURlZmF1bHRTdHJpbmddJyxcbiAgICB0ZW1wbGF0ZTogJycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBTbGF0ZURlZmF1bHRTdHJpbmdcbiAgICBleHRlbmRzIEJhc2VDb21wb25lbnQ8U2xhdGVTdHJpbmdDb250ZXh0PlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBCZWZvcmVDb250ZXh0Q2hhbmdlPFNsYXRlU3RyaW5nQ29udGV4dD5cbntcbiAgICB0ZXh0Tm9kZT86IFRleHQ7XG4gICAgYnJOb2RlPzogRE9NRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmPGFueT4sIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGNkcik7XG4gICAgfVxuXG4gICAgYmVmb3JlQ29udGV4dENoYW5nZSh2YWx1ZTogU2xhdGVTdHJpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQudHlwZSA9PT0gJ2xpbmVCcmVha0VtcHR5U3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpbmVCcmVha0VtcHR5U3RyaW5nRE9NKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0Tm9kZT8ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJOb2RlPy5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT09ICdsaW5lQnJlYWtFbXB0eVN0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTdHJpbmdET00oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNvbnRleHRDaGFuZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlU3RyaW5nRE9NKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb250ZXh0LnR5cGUgPT09ICdsaW5lQnJlYWtFbXB0eVN0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlTGluZUJyZWFrRW1wdHlTdHJpbmdET00oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZUxpbmVCcmVha0VtcHR5U3RyaW5nRE9NKCkge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXNsYXRlLXplcm8td2lkdGgnLCAnbicpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXNsYXRlLWxlbmd0aCcsIGAke3RoaXMuY29udGV4dC5lbGVtZW50U3RyaW5nTGVuZ3RofWApO1xuICAgICAgICB0aGlzLnRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYFxcdUZFRkZgKTtcbiAgICAgICAgdGhpcy5ick5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYXBwZW5kKHRoaXMudGV4dE5vZGUsIHRoaXMuYnJOb2RlKTtcbiAgICB9XG5cbiAgICByZW1vdmVMaW5lQnJlYWtFbXB0eVN0cmluZ0RPTSgpIHtcbiAgICAgICAgdGhpcy5ick5vZGU/LnJlbW92ZSgpO1xuICAgICAgICAvLyByZW1vdmUgemVybyB3aWR0aCBjaGFyYWN0ZXJcbiAgICAgICAgY29uc3QgemVyb1dpZHRoQ2hhcmFjdGVySW5kZXggPSB0aGlzLnRleHROb2RlPy50ZXh0Q29udGVudC5pbmRleE9mKGBcXHVGRUZGYCk7XG4gICAgICAgIHRoaXMudGV4dE5vZGU/LmRlbGV0ZURhdGEoemVyb1dpZHRoQ2hhcmFjdGVySW5kZXgsIDEpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXNsYXRlLXplcm8td2lkdGgnKTtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1zbGF0ZS1sZW5ndGgnKTtcbiAgICB9XG5cbiAgICBjcmVhdGVTdHJpbmdET00oKSB7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtc3RyaW5nJywgJ3RydWUnKTtcbiAgICAgICAgdGhpcy51cGRhdGVTdHJpbmdET00oKTtcbiAgICB9XG5cbiAgICB1cGRhdGVTdHJpbmdET00oKSB7XG4gICAgICAgIC8vIEF2b2lkIGJyZWFraW5nIHNvbWUgYnJvd3NlciBkZWZhdWx0IGJlaGF2aW9ycywgc3VjaCBhcyBzcGVsbENoZWNrLCBhbmRyb2lkIGNvbXBvc2l0aW9uIGlucHV0IHN0YXRlXG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQgIT09IHRoaXMuY29udGV4dC50ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmNvbnRleHQudGV4dDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZVN0cmluZ0RPTSgpIHtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1zbGF0ZS1zdHJpbmcnKTtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50ID0gJyc7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2VkaXRhYmxlLXRleHQnLCAnJyk7XG4gICAgfVxufVxuIl19
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1zdHJpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvc3RyaW5nL2RlZmF1bHQtc3RyaW5nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLHVCQUF1QixFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUUxRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBVWhELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFpQztJQUlyRSxZQUNXLFVBQTJCLEVBQzNCLEdBQXNCO1FBRTdCLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFIaEIsZUFBVSxHQUFWLFVBQVUsQ0FBaUI7UUFDM0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFHakMsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQXlCO1FBQ3pDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssc0JBQXNCLEVBQUU7Z0JBQzlDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO2lCQUN4QztxQkFBTTtvQkFDSCxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO2lCQUN6QjthQUNKO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQ2hDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxzQkFBc0IsRUFBRTtvQkFDdkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2lCQUMxQjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUMxQjthQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssc0JBQXNCLEVBQUU7WUFDckQsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7U0FDeEM7SUFDTCxDQUFDO0lBRUQsNkJBQTZCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsNkJBQTZCO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDdEIsOEJBQThCO1FBQzlCLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsZUFBZTtRQUNYLHFHQUFxRztRQUNyRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ3REO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDOzhHQXpFUSxrQkFBa0I7a0dBQWxCLGtCQUFrQiwyR0FKakIsRUFBRTs7MkZBSUgsa0JBQWtCO2tCQU45QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTbGF0ZVN0cmluZ0NvbnRleHQgfSBmcm9tICcuLi8uLi92aWV3L2NvbnRleHQnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ZpZXcvYmFzZSc7XG5pbXBvcnQgeyBCZWZvcmVDb250ZXh0Q2hhbmdlIH0gZnJvbSAnLi4vLi4vdmlldy9jb250ZXh0LWNoYW5nZSc7XG5pbXBvcnQgeyBET01FbGVtZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzcGFuW3NsYXRlRGVmYXVsdFN0cmluZ10nLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFNsYXRlRGVmYXVsdFN0cmluZyBleHRlbmRzIEJhc2VDb21wb25lbnQ8U2xhdGVTdHJpbmdDb250ZXh0PiBpbXBsZW1lbnRzIE9uSW5pdCwgQmVmb3JlQ29udGV4dENoYW5nZTxTbGF0ZVN0cmluZ0NvbnRleHQ+IHtcbiAgICB0ZXh0Tm9kZT86IFRleHQ7XG4gICAgYnJOb2RlPzogRE9NRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZjxhbnk+LFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge1xuICAgICAgICBzdXBlcihlbGVtZW50UmVmLCBjZHIpO1xuICAgIH1cblxuICAgIGJlZm9yZUNvbnRleHRDaGFuZ2UodmFsdWU6IFNsYXRlU3RyaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnR5cGUgPT09ICdsaW5lQnJlYWtFbXB0eVN0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVMaW5lQnJlYWtFbXB0eVN0cmluZ0RPTSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dE5vZGU/LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyTm9kZT8ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50eXBlID09PSAnbGluZUJyZWFrRW1wdHlTdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlU3RyaW5nRE9NKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Db250ZXh0Q2hhbmdlKCkge1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVN0cmluZ0RPTSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29udGV4dC50eXBlID09PSAnbGluZUJyZWFrRW1wdHlTdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUxpbmVCcmVha0VtcHR5U3RyaW5nRE9NKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVMaW5lQnJlYWtFbXB0eVN0cmluZ0RPTSgpIHtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1zbGF0ZS16ZXJvLXdpZHRoJywgJ24nKTtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1zbGF0ZS1sZW5ndGgnLCBgJHt0aGlzLmNvbnRleHQuZWxlbWVudFN0cmluZ0xlbmd0aH1gKTtcbiAgICAgICAgdGhpcy50ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGBcXHVGRUZGYCk7XG4gICAgICAgIHRoaXMuYnJOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKTtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmFwcGVuZCh0aGlzLnRleHROb2RlLCB0aGlzLmJyTm9kZSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTGluZUJyZWFrRW1wdHlTdHJpbmdET00oKSB7XG4gICAgICAgIHRoaXMuYnJOb2RlPy5yZW1vdmUoKTtcbiAgICAgICAgLy8gcmVtb3ZlIHplcm8gd2lkdGggY2hhcmFjdGVyXG4gICAgICAgIGNvbnN0IHplcm9XaWR0aENoYXJhY3RlckluZGV4ID0gdGhpcy50ZXh0Tm9kZT8udGV4dENvbnRlbnQuaW5kZXhPZihgXFx1RkVGRmApO1xuICAgICAgICB0aGlzLnRleHROb2RlPy5kZWxldGVEYXRhKHplcm9XaWR0aENoYXJhY3RlckluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1zbGF0ZS16ZXJvLXdpZHRoJyk7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtbGVuZ3RoJyk7XG4gICAgfVxuXG4gICAgY3JlYXRlU3RyaW5nRE9NKCkge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXNsYXRlLXN0cmluZycsICd0cnVlJyk7XG4gICAgICAgIHRoaXMudXBkYXRlU3RyaW5nRE9NKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlU3RyaW5nRE9NKCkge1xuICAgICAgICAvLyBBdm9pZCBicmVha2luZyBzb21lIGJyb3dzZXIgZGVmYXVsdCBiZWhhdmlvcnMsIHN1Y2ggYXMgc3BlbGxDaGVjaywgYW5kcm9pZCBjb21wb3NpdGlvbiBpbnB1dCBzdGF0ZVxuICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50ICE9PSB0aGlzLmNvbnRleHQudGV4dCkge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5jb250ZXh0LnRleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVTdHJpbmdET00oKSB7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtc3RyaW5nJyk7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCA9ICcnO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdlZGl0YWJsZS10ZXh0JywgJycpO1xuICAgIH1cbn1cbiJdfQ==
@@ -105,4 +105,4 @@ export const isEmpty = (editor, element) => {
105
105
  const [first] = children;
106
106
  return children.length === 0 || (children.length === 1 && Text.isText(first) && first.text === '' && !editor.isVoid(element));
107
107
  };
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9jb21wb25lbnRzL3N0cmluZy9zdHJpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLHVCQUF1QixFQUEwRCxNQUFNLGVBQWUsQ0FBQztBQUMxSSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFRaEUsTUFBTSxPQUFPLFdBQVksU0FBUSxpQkFBcUM7SUFHbEUsWUFBb0IsVUFBMkIsRUFBWSxnQkFBa0M7UUFDekYsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFEUixlQUFVLEdBQVYsVUFBVSxDQUFpQjtRQUFZLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFFN0YsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLDJFQUEyRTtJQUMzRSxrQ0FBa0M7SUFDbEMsc0JBQXNCO1FBQ2xCLE9BQU8sQ0FDSCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRTtZQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxR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RSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUN6QixPQUFPLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNsSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPbkNoYW5nZXMsIEVsZW1lbnRSZWYsIFZpZXdDb250YWluZXJSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vZGUsIFRleHQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBWaWV3Q29udGFpbmVySXRlbSB9IGZyb20gJy4uLy4uL3ZpZXcvY29udGFpbmVyLWl0ZW0nO1xuaW1wb3J0IHsgU2xhdGVMZWFmQ29udGV4dCwgU2xhdGVTdHJpbmdDb250ZXh0IH0gZnJvbSAnLi4vLi4vdmlldy9jb250ZXh0JztcbmltcG9ydCB7IFNsYXRlRGVmYXVsdFN0cmluZyB9IGZyb20gJy4vZGVmYXVsdC1zdHJpbmcuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzcGFuW3NsYXRlU3RyaW5nXScsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgU2xhdGVTdHJpbmcgZXh0ZW5kcyBWaWV3Q29udGFpbmVySXRlbTxTbGF0ZVN0cmluZ0NvbnRleHQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICAgIEBJbnB1dCgpIGNvbnRleHQ6IFNsYXRlTGVhZkNvbnRleHQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8YW55PiwgcHJvdGVjdGVkIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgICAgc3VwZXIodmlld0NvbnRhaW5lclJlZik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3JlYXRlVmlldygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZSgpO1xuICAgIH1cblxuICAgIC8vIENPTVBBVDogSWYgdGhpcyBpcyB0aGUgbGFzdCB0ZXh0IG5vZGUgaW4gYW4gZW1wdHkgYmxvY2ssIHJlbmRlciBhIHplcm8tXG4gICAgLy8gd2lkdGggc3BhY2UgdGhhdCB3aWxsIGNvbnZlcnQgaW50byBhIGxpbmUgYnJlYWsgd2hlbiBjb3B5aW5nIGFuZCBwYXN0aW5nXG4gICAgLy8gdG8gc3VwcG9ydCBleHBlY3RlZCBwbGFpbiB0ZXh0LlxuICAgIGlzTGluZUJyZWFrRW1wdHlTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQubGVhZi50ZXh0ID09PSAnJyAmJlxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnBhcmVudC5jaGlsZHJlblt0aGlzLmNvbnRleHQucGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDFdID09PSB0aGlzLmNvbnRleHQudGV4dCAmJlxuICAgICAgICAgICAgIXRoaXMudmlld0NvbnRleHQuZWRpdG9yLmlzSW5saW5lKHRoaXMuY29udGV4dC5wYXJlbnQpICYmXG4gICAgICAgICAgICAvLyBbbGlzdC1yZW5kZXJdIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogcmVkdWNlIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gdGhlIGBFZGl0b3Iuc3RyaW5nKGVkaXRvciwgcGF0aClgIG1ldGhvZFxuICAgICAgICAgICAgaXNFbXB0eSh0aGlzLnZpZXdDb250ZXh0LmVkaXRvciwgdGhpcy5jb250ZXh0LnBhcmVudClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDT01QQVQ6IElmIHRoZSB0ZXh0IGlzIGVtcHR5LCBpdCdzIGJlY2F1c2UgaXQncyBvbiB0aGUgZWRnZSBvZiBhbiBpbmxpbmVcbiAgICAvLyBub2RlLCBzbyB3ZSByZW5kZXIgYSB6ZXJvLXdpZHRoIHNwYWNlIHNvIHRoYXQgdGhlIHNlbGVjdGlvbiBjYW4gYmVcbiAgICAvLyBpbnNlcnRlZCBuZXh0IHRvIGl0IHN0aWxsLlxuICAgIGlzRW1wdHlUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmxlYWYudGV4dCA9PT0gJyc7XG4gICAgfVxuXG4gICAgLy8gQ09NUEFUOiBCcm93c2VycyB3aWxsIGNvbGxhcHNlIHRyYWlsaW5nIG5ldyBsaW5lcyBhdCB0aGUgZW5kIG9mIGJsb2NrcyxcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIGFkZCBhbiBleHRyYSB0cmFpbGluZyBuZXcgbGluZXMgdG8gcHJldmVudCB0aGF0LlxuICAgIGlzQ29tcGF0aWJsZVN0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5pc0xhc3QgJiYgdGhpcy5jb250ZXh0LmxlYWYudGV4dC5zbGljZSgtMSkgPT09ICdcXG4nO1xuICAgIH1cblxuICAgIC8vIENPTVBBVDogUmVuZGVyIHRleHQgaW5zaWRlIHZvaWQgbm9kZXMgd2l0aCBhIHplcm8td2lkdGggc3BhY2UuXG4gICAgLy8gU28gdGhlIG5vZGUgY2FuIGNvbnRhaW4gc2VsZWN0aW9uIGJ1dCB0aGUgdGV4dCBpcyBub3QgdmlzaWJsZS5cbiAgICBpc1ZvaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0LmVkaXRvci5pc1ZvaWQodGhpcy5jb250ZXh0LnBhcmVudCk7XG4gICAgfVxuXG4gICAgZ2V0Vmlld1R5cGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVm9pZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dC50ZW1wbGF0ZUNvbXBvbmVudC52b2lkU3RyaW5nVGVtcGxhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0xpbmVCcmVha0VtcHR5U3RyaW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBTbGF0ZURlZmF1bHRTdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0VtcHR5VGV4dCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dC50ZW1wbGF0ZUNvbXBvbmVudC5lbXB0eVRleHRUZW1wbGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzQ29tcGF0aWJsZVN0cmluZygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dC50ZW1wbGF0ZUNvbXBvbmVudC5jb21wYXRpYmxlU3RyaW5nVGVtcGxhdGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU2xhdGVEZWZhdWx0U3RyaW5nO1xuICAgIH1cblxuICAgIGdldFR5cGUoKTogU2xhdGVTdHJpbmdDb250ZXh0Wyd0eXBlJ10ge1xuICAgICAgICBpZiAodGhpcy5pc0xpbmVCcmVha0VtcHR5U3RyaW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbGluZUJyZWFrRW1wdHlTdHJpbmcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0KCk6IFNsYXRlU3RyaW5nQ29udGV4dCB7XG4gICAgICAgIGNvbnN0IHN0cmluZ1R5cGUgPSB0aGlzLmdldFR5cGUoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMuY29udGV4dC5sZWFmLnRleHQsXG4gICAgICAgICAgICBlbGVtZW50U3RyaW5nTGVuZ3RoOiBOb2RlLnN0cmluZyh0aGlzLmNvbnRleHQucGFyZW50KS5sZW5ndGgsXG4gICAgICAgICAgICB0eXBlOiBzdHJpbmdUeXBlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbWVtb2l6ZWRDb250ZXh0KHByZXY6IFNsYXRlU3RyaW5nQ29udGV4dCwgbmV4dDogU2xhdGVTdHJpbmdDb250ZXh0KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogVE9ETzogcmVtb3ZlIHdoZW4gYnVtcCBzbGF0ZVxuICogY29weSBmcm9tIHNsYXRlXG4gKiBAcGFyYW0gZWRpdG9yXG4gKiBAcGFyYW0gZWxlbWVudFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRW1wdHkgPSAoZWRpdG9yLCBlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gZWxlbWVudDtcbiAgICBjb25zdCBbZmlyc3RdID0gY2hpbGRyZW47XG4gICAgcmV0dXJuIGNoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCAoY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIFRleHQuaXNUZXh0KGZpcnN0KSAmJiBmaXJzdC50ZXh0ID09PSAnJyAmJiAhZWRpdG9yLmlzVm9pZChlbGVtZW50KSk7XG59O1xuIl19
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9jb21wb25lbnRzL3N0cmluZy9zdHJpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLHVCQUF1QixFQUEwRCxNQUFNLGVBQWUsQ0FBQztBQUMxSSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFRaEUsTUFBTSxPQUFPLFdBQVksU0FBUSxpQkFBcUM7SUFHbEUsWUFDWSxVQUEyQixFQUN6QixnQkFBa0M7UUFFNUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFIaEIsZUFBVSxHQUFWLFVBQVUsQ0FBaUI7UUFDekIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUdoRCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLGtDQUFrQztJQUNsQyxzQkFBc0I7UUFDbEIsT0FBTyxDQUNILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFO1lBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFD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QUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQ3pCLE9BQU8sUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2xJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE9uQ2hhbmdlcywgRWxlbWVudFJlZiwgVmlld0NvbnRhaW5lclJlZiwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9kZSwgVGV4dCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IFZpZXdDb250YWluZXJJdGVtIH0gZnJvbSAnLi4vLi4vdmlldy9jb250YWluZXItaXRlbSc7XG5pbXBvcnQgeyBTbGF0ZUxlYWZDb250ZXh0LCBTbGF0ZVN0cmluZ0NvbnRleHQgfSBmcm9tICcuLi8uLi92aWV3L2NvbnRleHQnO1xuaW1wb3J0IHsgU2xhdGVEZWZhdWx0U3RyaW5nIH0gZnJvbSAnLi9kZWZhdWx0LXN0cmluZy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NwYW5bc2xhdGVTdHJpbmddJyxcbiAgICB0ZW1wbGF0ZTogJycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBTbGF0ZVN0cmluZyBleHRlbmRzIFZpZXdDb250YWluZXJJdGVtPFNsYXRlU3RyaW5nQ29udGV4dD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQElucHV0KCkgY29udGV4dDogU2xhdGVMZWFmQ29udGV4dDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8YW55PixcbiAgICAgICAgcHJvdGVjdGVkIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWZcbiAgICApIHtcbiAgICAgICAgc3VwZXIodmlld0NvbnRhaW5lclJlZik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3JlYXRlVmlldygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZSgpO1xuICAgIH1cblxuICAgIC8vIENPTVBBVDogSWYgdGhpcyBpcyB0aGUgbGFzdCB0ZXh0IG5vZGUgaW4gYW4gZW1wdHkgYmxvY2ssIHJlbmRlciBhIHplcm8tXG4gICAgLy8gd2lkdGggc3BhY2UgdGhhdCB3aWxsIGNvbnZlcnQgaW50byBhIGxpbmUgYnJlYWsgd2hlbiBjb3B5aW5nIGFuZCBwYXN0aW5nXG4gICAgLy8gdG8gc3VwcG9ydCBleHBlY3RlZCBwbGFpbiB0ZXh0LlxuICAgIGlzTGluZUJyZWFrRW1wdHlTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQubGVhZi50ZXh0ID09PSAnJyAmJlxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnBhcmVudC5jaGlsZHJlblt0aGlzLmNvbnRleHQucGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDFdID09PSB0aGlzLmNvbnRleHQudGV4dCAmJlxuICAgICAgICAgICAgIXRoaXMudmlld0NvbnRleHQuZWRpdG9yLmlzSW5saW5lKHRoaXMuY29udGV4dC5wYXJlbnQpICYmXG4gICAgICAgICAgICAvLyBbbGlzdC1yZW5kZXJdIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogcmVkdWNlIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gdGhlIGBFZGl0b3Iuc3RyaW5nKGVkaXRvciwgcGF0aClgIG1ldGhvZFxuICAgICAgICAgICAgaXNFbXB0eSh0aGlzLnZpZXdDb250ZXh0LmVkaXRvciwgdGhpcy5jb250ZXh0LnBhcmVudClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDT01QQVQ6IElmIHRoZSB0ZXh0IGlzIGVtcHR5LCBpdCdzIGJlY2F1c2UgaXQncyBvbiB0aGUgZWRnZSBvZiBhbiBpbmxpbmVcbiAgICAvLyBub2RlLCBzbyB3ZSByZW5kZXIgYSB6ZXJvLXdpZHRoIHNwYWNlIHNvIHRoYXQgdGhlIHNlbGVjdGlvbiBjYW4gYmVcbiAgICAvLyBpbnNlcnRlZCBuZXh0IHRvIGl0IHN0aWxsLlxuICAgIGlzRW1wdHlUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmxlYWYudGV4dCA9PT0gJyc7XG4gICAgfVxuXG4gICAgLy8gQ09NUEFUOiBCcm93c2VycyB3aWxsIGNvbGxhcHNlIHRyYWlsaW5nIG5ldyBsaW5lcyBhdCB0aGUgZW5kIG9mIGJsb2NrcyxcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIGFkZCBhbiBleHRyYSB0cmFpbGluZyBuZXcgbGluZXMgdG8gcHJldmVudCB0aGF0LlxuICAgIGlzQ29tcGF0aWJsZVN0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5pc0xhc3QgJiYgdGhpcy5jb250ZXh0LmxlYWYudGV4dC5zbGljZSgtMSkgPT09ICdcXG4nO1xuICAgIH1cblxuICAgIC8vIENPTVBBVDogUmVuZGVyIHRleHQgaW5zaWRlIHZvaWQgbm9kZXMgd2l0aCBhIHplcm8td2lkdGggc3BhY2UuXG4gICAgLy8gU28gdGhlIG5vZGUgY2FuIGNvbnRhaW4gc2VsZWN0aW9uIGJ1dCB0aGUgdGV4dCBpcyBub3QgdmlzaWJsZS5cbiAgICBpc1ZvaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0LmVkaXRvci5pc1ZvaWQodGhpcy5jb250ZXh0LnBhcmVudCk7XG4gICAgfVxuXG4gICAgZ2V0Vmlld1R5cGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVm9pZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dC50ZW1wbGF0ZUNvbXBvbmVudC52b2lkU3RyaW5nVGVtcGxhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0xpbmVCcmVha0VtcHR5U3RyaW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBTbGF0ZURlZmF1bHRTdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0VtcHR5VGV4dCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dC50ZW1wbGF0ZUNvbXBvbmVudC5lbXB0eVRleHRUZW1wbGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzQ29tcGF0aWJsZVN0cmluZygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dC50ZW1wbGF0ZUNvbXBvbmVudC5jb21wYXRpYmxlU3RyaW5nVGVtcGxhdGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU2xhdGVEZWZhdWx0U3RyaW5nO1xuICAgIH1cblxuICAgIGdldFR5cGUoKTogU2xhdGVTdHJpbmdDb250ZXh0Wyd0eXBlJ10ge1xuICAgICAgICBpZiAodGhpcy5pc0xpbmVCcmVha0VtcHR5U3RyaW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbGluZUJyZWFrRW1wdHlTdHJpbmcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0KCk6IFNsYXRlU3RyaW5nQ29udGV4dCB7XG4gICAgICAgIGNvbnN0IHN0cmluZ1R5cGUgPSB0aGlzLmdldFR5cGUoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMuY29udGV4dC5sZWFmLnRleHQsXG4gICAgICAgICAgICBlbGVtZW50U3RyaW5nTGVuZ3RoOiBOb2RlLnN0cmluZyh0aGlzLmNvbnRleHQucGFyZW50KS5sZW5ndGgsXG4gICAgICAgICAgICB0eXBlOiBzdHJpbmdUeXBlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbWVtb2l6ZWRDb250ZXh0KHByZXY6IFNsYXRlU3RyaW5nQ29udGV4dCwgbmV4dDogU2xhdGVTdHJpbmdDb250ZXh0KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogVE9ETzogcmVtb3ZlIHdoZW4gYnVtcCBzbGF0ZVxuICogY29weSBmcm9tIHNsYXRlXG4gKiBAcGFyYW0gZWRpdG9yXG4gKiBAcGFyYW0gZWxlbWVudFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRW1wdHkgPSAoZWRpdG9yLCBlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gZWxlbWVudDtcbiAgICBjb25zdCBbZmlyc3RdID0gY2hpbGRyZW47XG4gICAgcmV0dXJuIGNoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCAoY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIFRleHQuaXNUZXh0KGZpcnN0KSAmJiBmaXJzdC50ZXh0ID09PSAnJyAmJiAhZWRpdG9yLmlzVm9pZChlbGVtZW50KSk7XG59O1xuIl19
@@ -1,4 +1,4 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const SLATE_DEFAULT_TEXT_COMPONENT_TOKEN = new InjectionToken('slate-default-text-token');
3
3
  export const SLATE_DEFAULT_VOID_TEXT_COMPONENT_TOKEN = new InjectionToken('slate-default-void-text-token');
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy90ZXh0L3Rva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0MsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsSUFBSSxjQUFjLENBQW1DLDBCQUEwQixDQUFDLENBQUM7QUFFbkksTUFBTSxDQUFDLE1BQU0sdUNBQXVDLEdBQUcsSUFBSSxjQUFjLENBQ3JFLCtCQUErQixDQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcy92aWV3JztcbmltcG9ydCB7IEJhc2VUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdmlldy9iYXNlJztcblxuZXhwb3J0IGNvbnN0IFNMQVRFX0RFRkFVTFRfVEVYVF9DT01QT05FTlRfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29tcG9uZW50VHlwZTxCYXNlVGV4dENvbXBvbmVudD4+KCdzbGF0ZS1kZWZhdWx0LXRleHQtdG9rZW4nKTtcblxuZXhwb3J0IGNvbnN0IFNMQVRFX0RFRkFVTFRfVk9JRF9URVhUX0NPTVBPTkVOVF9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDb21wb25lbnRUeXBlPEJhc2VUZXh0Q29tcG9uZW50Pj4oXG4gICAgJ3NsYXRlLWRlZmF1bHQtdm9pZC10ZXh0LXRva2VuJ1xuKTsiXX0=
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy90ZXh0L3Rva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0MsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsSUFBSSxjQUFjLENBQW1DLDBCQUEwQixDQUFDLENBQUM7QUFFbkksTUFBTSxDQUFDLE1BQU0sdUNBQXVDLEdBQUcsSUFBSSxjQUFjLENBQ3JFLCtCQUErQixDQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcy92aWV3JztcbmltcG9ydCB7IEJhc2VUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdmlldy9iYXNlJztcblxuZXhwb3J0IGNvbnN0IFNMQVRFX0RFRkFVTFRfVEVYVF9DT01QT05FTlRfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29tcG9uZW50VHlwZTxCYXNlVGV4dENvbXBvbmVudD4+KCdzbGF0ZS1kZWZhdWx0LXRleHQtdG9rZW4nKTtcblxuZXhwb3J0IGNvbnN0IFNMQVRFX0RFRkFVTFRfVk9JRF9URVhUX0NPTVBPTkVOVF9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDb21wb25lbnRUeXBlPEJhc2VUZXh0Q29tcG9uZW50Pj4oXG4gICAgJ3NsYXRlLWRlZmF1bHQtdm9pZC10ZXh0LXRva2VuJ1xuKTtcbiJdfQ==
@@ -8,6 +8,7 @@ import { SlateDefaultElement } from './components/element/default-element.compon
8
8
  import { SlateString } from './components/string/string.component';
9
9
  import { SlateStringTemplate } from './components/string/template.component';
10
10
  import { SlateChildren } from './components/children/children.component';
11
+ import { SlateChildrenOutlet } from './components/children/children-outlet.component';
11
12
  import { SlateBlockCard } from './components/block-card/block-card.component';
12
13
  import { SlateDefaultLeaf } from './components/leaf/default-leaf.component';
13
14
  import { SlateLeaves } from './components/leaves/leaves.component';
@@ -28,12 +29,8 @@ export class SlateModule {
28
29
  SlateBlockCard,
29
30
  SlateLeaves,
30
31
  SlateDefaultLeaf,
31
- SlateDefaultString], exports: [SlateEditable,
32
- SlateChildren,
33
- SlateElement,
34
- SlateLeaves,
35
- SlateString,
36
- SlateDefaultString] }); }
32
+ SlateDefaultString,
33
+ SlateChildrenOutlet], exports: [SlateEditable, SlateChildren, SlateChildrenOutlet, SlateElement, SlateLeaves, SlateString, SlateDefaultString] }); }
37
34
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SlateModule, providers: [
38
35
  {
39
36
  provide: SLATE_DEFAULT_ELEMENT_COMPONENT_TOKEN,
@@ -57,16 +54,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
57
54
  SlateBlockCard,
58
55
  SlateLeaves,
59
56
  SlateDefaultLeaf,
60
- SlateDefaultString
61
- ],
62
- exports: [
63
- SlateEditable,
64
- SlateChildren,
65
- SlateElement,
66
- SlateLeaves,
67
- SlateString,
68
- SlateDefaultString
57
+ SlateDefaultString,
58
+ SlateChildrenOutlet
69
59
  ],
60
+ exports: [SlateEditable, SlateChildren, SlateChildrenOutlet, SlateElement, SlateLeaves, SlateString, SlateDefaultString],
70
61
  providers: [
71
62
  {
72
63
  provide: SLATE_DEFAULT_ELEMENT_COMPONENT_TOKEN,
@@ -75,4 +66,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
75
66
  ]
76
67
  }]
77
68
  }] });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcGFja2FnZXMvc3JjL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDN0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7O0FBaUNsRixNQUFNLE9BQU8sV0FBVzs4R0FBWCxXQUFXOytHQUFYLFdBQVcsWUE3QmhCLFlBQVk7WUFDWixhQUFhO1lBQ2IsbUJBQW1CO1lBQ25CLFlBQVk7WUFDWixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsYUFBYTtZQUNiLGNBQWM7WUFDZCxXQUFXO1lBQ1gsZ0JBQWdCO1lBQ2hCLGtCQUFrQixhQUdsQixhQUFhO1lBQ2IsYUFBYTtZQUNiLFlBQVk7WUFDWixXQUFXO1lBQ1gsV0FBVztZQUNYLGtCQUFrQjsrR0FTYixXQUFXLGFBUFQ7WUFDUDtnQkFDSSxPQUFPLEVBQUUscUNBQXFDO2dCQUM5QyxRQUFRLEVBQUUsbUJBQW1CO2FBQ2hDO1NBQ0osWUEzQkcsWUFBWTs7MkZBNkJQLFdBQVc7a0JBL0J2QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsZ0JBQWdCO3dCQUNoQixrQkFBa0I7cUJBQ3JCO29CQUNELE9BQU8sRUFBRTt3QkFDTCxhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixXQUFXO3dCQUNYLFdBQVc7d0JBQ1gsa0JBQWtCO3FCQUNyQjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLHFDQUFxQzs0QkFDOUMsUUFBUSxFQUFFLG1CQUFtQjt5QkFDaEM7cUJBQ0o7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3J3YXJkUmVmLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNsYXRlRWRpdGFibGUgfSBmcm9tICcuL2NvbXBvbmVudHMvZWRpdGFibGUvZWRpdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlRGVmYXVsdFRleHQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGV4dC9kZWZhdWx0LXRleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlVm9pZFRleHQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGV4dC92b2lkLXRleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlRWxlbWVudCB9IGZyb20gJy4vY29tcG9uZW50cy9lbGVtZW50L2VsZW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlRGVmYXVsdEVsZW1lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZWxlbWVudC9kZWZhdWx0LWVsZW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlU3RyaW5nIH0gZnJvbSAnLi9jb21wb25lbnRzL3N0cmluZy9zdHJpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlU3RyaW5nVGVtcGxhdGUgfSBmcm9tICcuL2NvbXBvbmVudHMvc3RyaW5nL3RlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbGF0ZUNoaWxkcmVuIH0gZnJvbSAnLi9jb21wb25lbnRzL2NoaWxkcmVuL2NoaWxkcmVuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbGF0ZUJsb2NrQ2FyZCB9IGZyb20gJy4vY29tcG9uZW50cy9ibG9jay1jYXJkL2Jsb2NrLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlRGVmYXVsdExlYWYgfSBmcm9tICcuL2NvbXBvbmVudHMvbGVhZi9kZWZhdWx0LWxlYWYuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlTGVhdmVzIH0gZnJvbSAnLi9jb21wb25lbnRzL2xlYXZlcy9sZWF2ZXMuY29tcG9uZW50JztcbmltcG9ydCB7IFNMQVRFX0RFRkFVTFRfRUxFTUVOVF9DT01QT05FTlRfVE9LRU4gfSBmcm9tICcuL2NvbXBvbmVudHMvZWxlbWVudC9kZWZhdWx0LWVsZW1lbnQuY29tcG9uZW50LnRva2VuJztcbmltcG9ydCB7IFNsYXRlRGVmYXVsdFN0cmluZyB9IGZyb20gJy4vY29tcG9uZW50cy9zdHJpbmcvZGVmYXVsdC1zdHJpbmcuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgU2xhdGVFZGl0YWJsZSxcbiAgICAgICAgU2xhdGVEZWZhdWx0RWxlbWVudCxcbiAgICAgICAgU2xhdGVFbGVtZW50LFxuICAgICAgICBTbGF0ZVZvaWRUZXh0LFxuICAgICAgICBTbGF0ZURlZmF1bHRUZXh0LFxuICAgICAgICBTbGF0ZVN0cmluZyxcbiAgICAgICAgU2xhdGVTdHJpbmdUZW1wbGF0ZSxcbiAgICAgICAgU2xhdGVDaGlsZHJlbixcbiAgICAgICAgU2xhdGVCbG9ja0NhcmQsXG4gICAgICAgIFNsYXRlTGVhdmVzLFxuICAgICAgICBTbGF0ZURlZmF1bHRMZWFmLFxuICAgICAgICBTbGF0ZURlZmF1bHRTdHJpbmdcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgU2xhdGVFZGl0YWJsZSxcbiAgICAgICAgU2xhdGVDaGlsZHJlbixcbiAgICAgICAgU2xhdGVFbGVtZW50LFxuICAgICAgICBTbGF0ZUxlYXZlcyxcbiAgICAgICAgU2xhdGVTdHJpbmcsXG4gICAgICAgIFNsYXRlRGVmYXVsdFN0cmluZ1xuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFNMQVRFX0RFRkFVTFRfRUxFTUVOVF9DT01QT05FTlRfVE9LRU4sXG4gICAgICAgICAgICB1c2VWYWx1ZTogU2xhdGVEZWZhdWx0RWxlbWVudFxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBTbGF0ZU1vZHVsZSB7fVxuIl19
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcGFja2FnZXMvc3JjL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDN0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7O0FBMkJsRixNQUFNLE9BQU8sV0FBVzs4R0FBWCxXQUFXOytHQUFYLFdBQVcsWUF2QmhCLFlBQVk7WUFDWixhQUFhO1lBQ2IsbUJBQW1CO1lBQ25CLFlBQVk7WUFDWixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsYUFBYTtZQUNiLGNBQWM7WUFDZCxXQUFXO1lBQ1gsZ0JBQWdCO1lBQ2hCLGtCQUFrQjtZQUNsQixtQkFBbUIsYUFFYixhQUFhLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGtCQUFrQjsrR0FROUcsV0FBVyxhQVBUO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLHFDQUFxQztnQkFDOUMsUUFBUSxFQUFFLG1CQUFtQjthQUNoQztTQUNKLFlBckJHLFlBQVk7OzJGQXVCUCxXQUFXO2tCQXpCdkIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixhQUFhO3dCQUNiLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxXQUFXO3dCQUNYLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixtQkFBbUI7cUJBQ3RCO29CQUNELE9BQU8sRUFBRSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLENBQUM7b0JBQ3hILFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUscUNBQXFDOzRCQUM5QyxRQUFRLEVBQUUsbUJBQW1CO3lCQUNoQztxQkFDSjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcndhcmRSZWYsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2xhdGVFZGl0YWJsZSB9IGZyb20gJy4vY29tcG9uZW50cy9lZGl0YWJsZS9lZGl0YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2xhdGVEZWZhdWx0VGV4dCB9IGZyb20gJy4vY29tcG9uZW50cy90ZXh0L2RlZmF1bHQtdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2xhdGVWb2lkVGV4dCB9IGZyb20gJy4vY29tcG9uZW50cy90ZXh0L3ZvaWQtdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2xhdGVFbGVtZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2VsZW1lbnQvZWxlbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2xhdGVEZWZhdWx0RWxlbWVudCB9IGZyb20gJy4vY29tcG9uZW50cy9lbGVtZW50L2RlZmF1bHQtZWxlbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2xhdGVTdHJpbmcgfSBmcm9tICcuL2NvbXBvbmVudHMvc3RyaW5nL3N0cmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2xhdGVTdHJpbmdUZW1wbGF0ZSB9IGZyb20gJy4vY29tcG9uZW50cy9zdHJpbmcvdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlQ2hpbGRyZW4gfSBmcm9tICcuL2NvbXBvbmVudHMvY2hpbGRyZW4vY2hpbGRyZW4uY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlQ2hpbGRyZW5PdXRsZXQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hpbGRyZW4vY2hpbGRyZW4tb3V0bGV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbGF0ZUJsb2NrQ2FyZCB9IGZyb20gJy4vY29tcG9uZW50cy9ibG9jay1jYXJkL2Jsb2NrLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlRGVmYXVsdExlYWYgfSBmcm9tICcuL2NvbXBvbmVudHMvbGVhZi9kZWZhdWx0LWxlYWYuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlTGVhdmVzIH0gZnJvbSAnLi9jb21wb25lbnRzL2xlYXZlcy9sZWF2ZXMuY29tcG9uZW50JztcbmltcG9ydCB7IFNMQVRFX0RFRkFVTFRfRUxFTUVOVF9DT01QT05FTlRfVE9LRU4gfSBmcm9tICcuL2NvbXBvbmVudHMvZWxlbWVudC9kZWZhdWx0LWVsZW1lbnQuY29tcG9uZW50LnRva2VuJztcbmltcG9ydCB7IFNsYXRlRGVmYXVsdFN0cmluZyB9IGZyb20gJy4vY29tcG9uZW50cy9zdHJpbmcvZGVmYXVsdC1zdHJpbmcuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgU2xhdGVFZGl0YWJsZSxcbiAgICAgICAgU2xhdGVEZWZhdWx0RWxlbWVudCxcbiAgICAgICAgU2xhdGVFbGVtZW50LFxuICAgICAgICBTbGF0ZVZvaWRUZXh0LFxuICAgICAgICBTbGF0ZURlZmF1bHRUZXh0LFxuICAgICAgICBTbGF0ZVN0cmluZyxcbiAgICAgICAgU2xhdGVTdHJpbmdUZW1wbGF0ZSxcbiAgICAgICAgU2xhdGVDaGlsZHJlbixcbiAgICAgICAgU2xhdGVCbG9ja0NhcmQsXG4gICAgICAgIFNsYXRlTGVhdmVzLFxuICAgICAgICBTbGF0ZURlZmF1bHRMZWFmLFxuICAgICAgICBTbGF0ZURlZmF1bHRTdHJpbmcsXG4gICAgICAgIFNsYXRlQ2hpbGRyZW5PdXRsZXRcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtTbGF0ZUVkaXRhYmxlLCBTbGF0ZUNoaWxkcmVuLCBTbGF0ZUNoaWxkcmVuT3V0bGV0LCBTbGF0ZUVsZW1lbnQsIFNsYXRlTGVhdmVzLCBTbGF0ZVN0cmluZywgU2xhdGVEZWZhdWx0U3RyaW5nXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogU0xBVEVfREVGQVVMVF9FTEVNRU5UX0NPTVBPTkVOVF9UT0tFTixcbiAgICAgICAgICAgIHVzZVZhbHVlOiBTbGF0ZURlZmF1bHRFbGVtZW50XG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFNsYXRlTW9kdWxlIHt9XG4iXX0=
@@ -116,7 +116,7 @@ export const AngularEditor = {
116
116
  const [start, end] = Range.edges(selection);
117
117
  const endBlock = Editor.above(editor, {
118
118
  at: end,
119
- match: node => Editor.isBlock(editor, node)
119
+ match: node => Element.isElement(node) && Editor.isBlock(editor, node)
120
120
  });
121
121
  return Editor.isStart(editor, end, endBlock[1]);
122
122
  },
@@ -338,7 +338,7 @@ export const AngularEditor = {
338
338
  // If the drop target is inside a void node, move it into either the
339
339
  // next or previous node, depending on which side the `x` and `y`
340
340
  // coordinates are closest to.
341
- if (Editor.isVoid(editor, node)) {
341
+ if (Element.isElement(node) && Editor.isVoid(editor, node)) {
342
342
  const rect = target.getBoundingClientRect();
343
343
  const isPrev = editor.isInline(node) ? x - rect.left < rect.left + rect.width - x : y - rect.top < rect.top + rect.height - y;
344
344
  const edge = Editor.point(editor, path, {
@@ -452,9 +452,10 @@ export const AngularEditor = {
452
452
  else if (voidNode) {
453
453
  // For void nodes, the element with the offset key will be a cousin, not an
454
454
  // ancestor, so find it by going down from the nearest void parent.
455
- leafNode = voidNode.querySelector('[data-slate-leaf]');
456
- parentNode = voidNode.querySelector('[data-slate-length="0"]');
457
- textNode = leafNode.closest('[data-slate-node="text"]');
455
+ const spacer = voidNode.querySelector('[data-slate-spacer="true"]');
456
+ leafNode = spacer.firstElementChild;
457
+ parentNode = leafNode.firstElementChild;
458
+ textNode = spacer;
458
459
  domNode = leafNode;
459
460
  offset = domNode.textContent.length;
460
461
  }
@@ -515,9 +516,29 @@ export const AngularEditor = {
515
516
  if (anchorNode == null || focusNode == null || anchorOffset == null || focusOffset == null) {
516
517
  throw new Error(`Cannot resolve a Slate range from DOM range: ${domRange}`);
517
518
  }
519
+ // COMPAT: Triple-clicking a word in chrome will sometimes place the focus
520
+ // inside a `contenteditable="false"` DOM node following the word, which
521
+ // will cause `toSlatePoint` to throw an error. (2023/03/07)
522
+ if ('getAttribute' in focusNode &&
523
+ focusNode.getAttribute('contenteditable') === 'false' &&
524
+ focusNode.getAttribute('data-slate-void') !== 'true') {
525
+ focusNode = anchorNode;
526
+ focusOffset = anchorNode.textContent?.length || 0;
527
+ }
518
528
  const anchor = AngularEditor.toSlatePoint(editor, [anchorNode, anchorOffset]);
519
529
  const focus = isCollapsed ? anchor : AngularEditor.toSlatePoint(editor, [focusNode, focusOffset]);
520
- return { anchor, focus };
530
+ let range = { anchor: anchor, focus: focus };
531
+ // if the selection is a hanging range that ends in a void
532
+ // and the DOM focus is an Element
533
+ // (meaning that the selection ends before the element)
534
+ // unhang the range to avoid mistakenly including the void
535
+ if (Range.isExpanded(range) &&
536
+ Range.isForward(range) &&
537
+ isDOMElement(focusNode) &&
538
+ Editor.void(editor, { at: range.focus, mode: 'highest' })) {
539
+ range = Editor.unhangRange(editor, range, { voids: true });
540
+ }
541
+ return range;
521
542
  },
522
543
  isLeafBlock(editor, node) {
523
544
  return Element.isElement(node) && !editor.isInline(node) && Editor.hasInlines(editor, node);
@@ -570,4 +591,4 @@ export const AngularEditor = {
570
591
  return Editor.hasPath(editor, anchor.path) && Editor.hasPath(editor, focus.path);
571
592
  }
572
593
  };
573
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1lZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9hbmd1bGFyLWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFRLElBQUksRUFBUyxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBYyxNQUFNLE9BQU8sQ0FBQztBQUMxRixPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixVQUFVLEVBQ1YsV0FBVyxFQUNYLGFBQWEsRUFDYixjQUFjLEVBQ2QsZUFBZSxFQUNmLFdBQVcsRUFDWCxnQkFBZ0IsRUFDbkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBT0gsYUFBYSxFQUNiLFlBQVksRUFDWixjQUFjLEVBQ2QsaUJBQWlCLEVBQ3BCLE1BQU0sY0FBYyxDQUFDO0FBSXRCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkMsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFDSCwyQkFBMkIsRUFDM0IsNEJBQTRCLEVBQzVCLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUMxQixNQUFNLHFCQUFxQixDQUFDO0FBcUI3QixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUc7SUFDekI7O09BRUc7SUFFSCxTQUFTLENBQUMsTUFBcUI7UUFDM0IsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7U0FDM0U7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ0Q7O09BRUc7SUFFSCxPQUFPLENBQUMsTUFBcUIsRUFBRSxJQUFVO1FBQ3JDLElBQUks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QUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtQkFBbUIsQ0FDZixNQUFxQixFQUNyQixJQUFVLEVBQ1YsT0FFQztRQUVELE1BQU0sTUFBTSxHQUFHO1lBQ1gsSUFBSTtZQUNKLE1BQU0sRUFBRSxPQUFPLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtTQUNwRyxDQUFDO1FBQ0YsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBcUIsRUFBRSxLQUFZO1FBQ3hDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkaXRvciwgTm9kZSwgUGF0aCwgUG9pbnQsIFJhbmdlLCBUcmFuc2Zvcm1zLCBFbGVtZW50LCBCYXNlRWRpdG9yIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHtcbiAgICBFRElUT1JfVE9fRUxFTUVOVCxcbiAgICBFTEVNRU5UX1RPX05PREUsXG4gICAgSVNfRk9DVVNFRCxcbiAgICBJU19SRUFET05MWSxcbiAgICBOT0RFX1RPX0lOREVYLFxuICAgIE5PREVfVE9fUEFSRU5ULFxuICAgIE5PREVfVE9fRUxFTUVOVCxcbiAgICBOT0RFX1RPX0tFWSxcbiAgICBFRElUT1JfVE9fV0lORE9XXG59IGZyb20gJy4uL3V0aWxzL3dlYWstbWFwcyc7XG5pbXBvcnQge1xuICAgIERPTUVsZW1lbnQsXG4gICAgRE9NTm9kZSxcbiAgICBET01Qb2ludCxcbiAgICBET01SYW5nZSxcbiAgICBET01TZWxlY3Rpb24sXG4gICAgRE9NU3RhdGljUmFuZ2UsXG4gICAgaGFzU2hhZG93Um9vdCxcbiAgICBpc0RPTUVsZW1lbnQsXG4gICAgaXNET01TZWxlY3Rpb24sXG4gICAgbm9ybWFsaXplRE9NUG9pbnRcbn0gZnJvbSAnLi4vdXRpbHMvZG9tJztcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlRW50cnkgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBTbGF0ZUVycm9yIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3InO1xuaW1wb3J0IHsgS2V5IH0gZnJvbSAnLi4vdXRpbHMva2V5JztcbmltcG9ydCB7IElTX0NIUk9NRSwgSVNfRklSRUZPWCB9IGZyb20gJy4uL3V0aWxzL2Vudmlyb25tZW50JztcbmltcG9ydCB7XG4gICAgRkFLRV9MRUZUX0JMT0NLX0NBUkRfT0ZGU0VULFxuICAgIEZBS0VfUklHSFRfQkxPQ0tfQ0FSRF9PRkZTRVQsXG4gICAgZ2V0Q2FyZFRhcmdldEF0dHJpYnV0ZSxcbiAgICBpc0NhcmRDZW50ZXJCeVRhcmdldEF0dHIsXG4gICAgaXNDYXJkTGVmdEJ5VGFyZ2V0QXR0cixcbiAgICBpc0NhcmRSaWdodEJ5VGFyZ2V0QXR0clxufSBmcm9tICcuLi91dGlscy9ibG9jay1jYXJkJztcbmltcG9ydCB7IFNhZmVBbnkgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogQW4gQW5ndWxhciBhbmQgRE9NLXNwZWNpZmljIHZlcnNpb24gb2YgdGhlIGBFZGl0b3JgIGludGVyZmFjZS5cbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIEFuZ3VsYXJFZGl0b3IgZXh0ZW5kcyBCYXNlRWRpdG9yIHtcbiAgICBpbnNlcnREYXRhOiAoZGF0YTogRGF0YVRyYW5zZmVyKSA9PiB2b2lkO1xuICAgIGluc2VydEZyYWdtZW50RGF0YTogKGRhdGE6IERhdGFUcmFuc2ZlcikgPT4gYm9vbGVhbjtcbiAgICBpbnNlcnRUZXh0RGF0YTogKGRhdGE6IERhdGFUcmFuc2ZlcikgPT4gYm9vbGVhbjtcbiAgICBzZXRGcmFnbWVudERhdGE6IChkYXRhOiBEYXRhVHJhbnNmZXIsIG9yaWdpbkV2ZW50PzogJ2RyYWcnIHwgJ2NvcHknIHwgJ2N1dCcpID0+IHZvaWQ7XG4gICAgZGVsZXRlQ3V0RGF0YTogKCkgPT4gdm9pZDtcbiAgICBvbktleWRvd246IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZDtcbiAgICBvbkNsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gICAgaW5qZWN0b3I6IEluamVjdG9yO1xuICAgIGlzQmxvY2tDYXJkOiAobm9kZTogTm9kZSkgPT4gYm9vbGVhbjtcbiAgICBvbkVycm9yOiAoZXJyb3JEYXRhOiBTbGF0ZUVycm9yKSA9PiB2b2lkO1xuICAgIGhhc1JhbmdlOiAoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCByYW5nZTogUmFuZ2UpID0+IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBBbmd1bGFyRWRpdG9yID0ge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgaG9zdCB3aW5kb3cgb2YgdGhlIGN1cnJlbnQgZWRpdG9yLlxuICAgICAqL1xuXG4gICAgZ2V0V2luZG93KGVkaXRvcjogQW5ndWxhckVkaXRvcik6IFdpbmRvdyB7XG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IEVESVRPUl9UT19XSU5ET1cuZ2V0KGVkaXRvcik7XG4gICAgICAgIGlmICghd2luZG93KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIGEgaG9zdCB3aW5kb3cgZWxlbWVudCBmb3IgdGhpcyBlZGl0b3InKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2luZG93O1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogRmluZCBhIGtleSBmb3IgYSBTbGF0ZSBub2RlLlxuICAgICAqL1xuXG4gICAgZmluZEtleShlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIG5vZGU6IE5vZGUpOiBLZXkge1xuICAgICAgICBsZXQga2V5ID0gTk9ERV9UT19LRVkuZ2V0KG5vZGUpO1xuXG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICBrZXkgPSBuZXcgS2V5KCk7XG4gICAgICAgICAgICBOT0RFX1RPX0tFWS5zZXQobm9kZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGhhbmRsZSBlZGl0b3IgZXJyb3IuXG4gICAgICovXG5cbiAgICBvbkVycm9yKGVycm9yRGF0YTogU2xhdGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3JEYXRhLm5hdGl2ZUVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvckRhdGEubmF0aXZlRXJyb3I7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRmluZCB0aGUgcGF0aCBvZiBTbGF0ZSBub2RlLlxuICAgICAqL1xuXG4gICAgZmluZFBhdGgoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBub2RlOiBOb2RlKTogUGF0aCB7XG4gICAgICAgIGNvbnN0IHBhdGg6IFBhdGggPSBbXTtcbiAgICAgICAgbGV0IGNoaWxkID0gbm9kZTtcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gTk9ERV9UT19QQVJFTlQuZ2V0KGNoaWxkKTtcblxuICAgICAgICAgICAgaWYgKHBhcmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKEVkaXRvci5pc0VkaXRvcihjaGlsZCkgJiYgY2hpbGQgPT09IGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGkgPSBOT0RFX1RPX0lOREVYLmdldChjaGlsZCk7XG5cbiAgICAgICAgICAgIGlmIChpID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGF0aC51bnNoaWZ0KGkpO1xuICAgICAgICAgICAgY2hpbGQgPSBwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCB0aGUgcGF0aCBmb3IgU2xhdGUgbm9kZTogJHtKU09OLnN0cmluZ2lmeShub2RlKX1gKTtcbiAgICB9LFxuXG4gICAgaXNOb2RlSW5FZGl0b3IoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjaGlsZCA9IG5vZGU7XG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IE5PREVfVE9fUEFSRU5ULmdldChjaGlsZCk7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChFZGl0b3IuaXNFZGl0b3IoY2hpbGQpICYmIGNoaWxkID09PSBlZGl0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpID0gTk9ERV9UT19JTkRFWC5nZXQoY2hpbGQpO1xuXG4gICAgICAgICAgICBpZiAoaSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkID0gcGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGaW5kIHRoZSBET00gbm9kZSB0aGF0IGltcGxlbWVudHMgRG9jdW1lbnRPclNoYWRvd1Jvb3QgZm9yIHRoZSBlZGl0b3IuXG4gICAgICovXG5cbiAgICBmaW5kRG9jdW1lbnRPclNoYWRvd1Jvb3QoZWRpdG9yOiBBbmd1bGFyRWRpdG9yKTogRG9jdW1lbnQgfCBTaGFkb3dSb290IHtcbiAgICAgICAgY29uc3QgZWwgPSBBbmd1bGFyRWRpdG9yLnRvRE9NTm9kZShlZGl0b3IsIGVkaXRvcik7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBlbC5nZXRSb290Tm9kZSgpO1xuICAgICAgICBpZiAoKHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkgJiYgKHJvb3QgYXMgRG9jdW1lbnQpLmdldFNlbGVjdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gcm9vdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbC5vd25lckRvY3VtZW50O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgZWRpdG9yIGlzIGZvY3VzZWQuXG4gICAgICovXG5cbiAgICBpc0ZvY3VzZWQoZWRpdG9yOiBBbmd1bGFyRWRpdG9yKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIUlTX0ZPQ1VTRUQuZ2V0KGVkaXRvcik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSBlZGl0b3IgaXMgaW4gcmVhZC1vbmx5IG1vZGUuXG4gICAgICovXG5cbiAgICBpc1JlYWRvbmx5KGVkaXRvcjogQW5ndWxhckVkaXRvcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISFJU19SRUFET05MWS5nZXQoZWRpdG9yKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGVkaXRvciBpcyBoYW5naW5nIHJpZ2h0LlxuICAgICAqL1xuICAgIGlzQmxvY2tIYW5naW5nUmlnaHQoZWRpdG9yOiBBbmd1bGFyRWRpdG9yKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBlZGl0b3I7XG4gICAgICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFJhbmdlLmlzQ29sbGFwc2VkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSBSYW5nZS5lZGdlcyhzZWxlY3Rpb24pO1xuICAgICAgICBjb25zdCBlbmRCbG9jayA9IEVkaXRvci5hYm92ZShlZGl0b3IsIHtcbiAgICAgICAgICAgIGF0OiBlbmQsXG4gICAgICAgICAgICBtYXRjaDogbm9kZSA9PiBFZGl0b3IuaXNCbG9jayhlZGl0b3IsIG5vZGUpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gRWRpdG9yLmlzU3RhcnQoZWRpdG9yLCBlbmQsIGVuZEJsb2NrWzFdKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmx1ciB0aGUgZWRpdG9yLlxuICAgICAqL1xuXG4gICAgYmx1cihlZGl0b3I6IEFuZ3VsYXJFZGl0b3IpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWwgPSBBbmd1bGFyRWRpdG9yLnRvRE9NTm9kZShlZGl0b3IsIGVkaXRvcik7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBBbmd1bGFyRWRpdG9yLmZpbmREb2N1bWVudE9yU2hhZG93Um9vdChlZGl0b3IpO1xuICAgICAgICBJU19GT0NVU0VELnNldChlZGl0b3IsIGZhbHNlKTtcblxuICAgICAgICBpZiAocm9vdC5hY3RpdmVFbGVtZW50ID09PSBlbCkge1xuICAgICAgICAgICAgZWwuYmx1cigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEZvY3VzIHRoZSBlZGl0b3IuXG4gICAgICovXG5cbiAgICBmb2N1cyhlZGl0b3I6IEFuZ3VsYXJFZGl0b3IpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWwgPSBBbmd1bGFyRWRpdG9yLnRvRE9NTm9kZShlZGl0b3IsIGVkaXRvcik7XG4gICAgICAgIElTX0ZPQ1VTRUQuc2V0KGVkaXRvciwgdHJ1ZSk7XG5cbiAgICAgICAgY29uc3Qgd2luZG93ID0gQW5ndWxhckVkaXRvci5nZXRXaW5kb3coZWRpdG9yKTtcbiAgICAgICAgaWYgKHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBlbCkge1xuICAgICAgICAgICAgZWwuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERlc2VsZWN0IHRoZSBlZGl0b3IuXG4gICAgICovXG5cbiAgICBkZXNlbGVjdChlZGl0b3I6IEFuZ3VsYXJFZGl0b3IpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcbiAgICAgICAgY29uc3Qgcm9vdCA9IEFuZ3VsYXJFZGl0b3IuZmluZERvY3VtZW50T3JTaGFkb3dSb290KGVkaXRvcik7XG4gICAgICAgIGNvbnN0IGRvbVNlbGVjdGlvbiA9IChyb290IGFzIERvY3VtZW50KS5nZXRTZWxlY3Rpb24oKTtcblxuICAgICAgICBpZiAoZG9tU2VsZWN0aW9uICYmIGRvbVNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgICAgICAgZG9tU2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5kZXNlbGVjdChlZGl0b3IpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGEgRE9NIG5vZGUgaXMgd2l0aGluIHRoZSBlZGl0b3IuXG4gICAgICovXG5cbiAgICBoYXNET01Ob2RlKGVkaXRvcjogQW5ndWxhckVkaXRvciwgdGFyZ2V0OiBET01Ob2RlLCBvcHRpb25zOiB7IGVkaXRhYmxlPzogYm9vbGVhbiB9ID0ge30pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyBlZGl0YWJsZSA9IGZhbHNlIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBlZGl0b3JFbCA9IEFuZ3VsYXJFZGl0b3IudG9ET01Ob2RlKGVkaXRvciwgZWRpdG9yKTtcbiAgICAgICAgbGV0IHRhcmdldEVsO1xuXG4gICAgICAgIC8vIENPTVBBVDogSW4gRmlyZWZveCwgcmVhZGluZyBgdGFyZ2V0Lm5vZGVUeXBlYCB3aWxsIHRocm93IGFuIGVycm9yIGlmXG4gICAgICAgIC8vIHRhcmdldCBpcyBvcmlnaW5hdGluZyBmcm9tIGFuIGludGVybmFsIFwicmVzdHJpY3RlZFwiIGVsZW1lbnQgKGUuZy4gYVxuICAgICAgICAvLyBzdGVwcGVyIGFycm93IG9uIGEgbnVtYmVyIGlucHV0KS4gKDIwMTgvMDUvMDQpXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9pYW5zdG9ybXRheWxvci9zbGF0ZS9pc3N1ZXMvMTgxOVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGFyZ2V0RWwgPSAoaXNET01FbGVtZW50KHRhcmdldCkgPyB0YXJnZXQgOiB0YXJnZXQucGFyZW50RWxlbWVudCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnUGVybWlzc2lvbiBkZW5pZWQgdG8gYWNjZXNzIHByb3BlcnR5IFwibm9kZVR5cGVcIicpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0YXJnZXRFbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRhcmdldEVsLmNsb3Nlc3QoYFtkYXRhLXNsYXRlLWVkaXRvcl1gKSA9PT0gZWRpdG9yRWwgJiZcbiAgICAgICAgICAgICghZWRpdGFibGUgfHwgdGFyZ2V0RWwuaXNDb250ZW50RWRpdGFibGUgfHwgISF0YXJnZXRFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtemVyby13aWR0aCcpKVxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnQgZGF0YSBmcm9tIGEgYERhdGFUcmFuc2ZlcmAgaW50byB0aGUgZWRpdG9yLlxuICAgICAqL1xuXG4gICAgaW5zZXJ0RGF0YShlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIGRhdGE6IERhdGFUcmFuc2Zlcik6IHZvaWQge1xuICAgICAgICBlZGl0b3IuaW5zZXJ0RGF0YShkYXRhKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0IGZyYWdtZW50IGRhdGEgZnJvbSBhIGBEYXRhVHJhbnNmZXJgIGludG8gdGhlIGVkaXRvci5cbiAgICAgKi9cblxuICAgIGluc2VydEZyYWdtZW50RGF0YShlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIGRhdGE6IERhdGFUcmFuc2Zlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZWRpdG9yLmluc2VydEZyYWdtZW50RGF0YShkYXRhKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0IHRleHQgZGF0YSBmcm9tIGEgYERhdGFUcmFuc2ZlcmAgaW50byB0aGUgZWRpdG9yLlxuICAgICAqL1xuXG4gICAgaW5zZXJ0VGV4dERhdGEoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBkYXRhOiBEYXRhVHJhbnNmZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGVkaXRvci5pbnNlcnRUZXh0RGF0YShkYXRhKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogb25LZXlkb3duIGhvb2suXG4gICAgICovXG4gICAgb25LZXlkb3duKGVkaXRvcjogQW5ndWxhckVkaXRvciwgZGF0YTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBlZGl0b3Iub25LZXlkb3duKGRhdGEpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBvbkNsaWNrIGhvb2suXG4gICAgICovXG4gICAgb25DbGljayhlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIGRhdGE6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZWRpdG9yLm9uQ2xpY2soZGF0YSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgZGF0YSBmcm9tIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZnJhZ21lbnQgb24gYSBgRGF0YVRyYW5zZmVyYC5cbiAgICAgKi9cblxuICAgIHNldEZyYWdtZW50RGF0YShlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIGRhdGE6IERhdGFUcmFuc2Zlciwgb3JpZ2luRXZlbnQ/OiAnZHJhZycgfCAnY29weScgfCAnY3V0Jyk6IHZvaWQge1xuICAgICAgICBlZGl0b3Iuc2V0RnJhZ21lbnREYXRhKGRhdGEsIG9yaWdpbkV2ZW50KTtcbiAgICB9LFxuXG4gICAgZGVsZXRlQ3V0RGF0YShlZGl0b3I6IEFuZ3VsYXJFZGl0b3IpOiB2b2lkIHtcbiAgICAgICAgZWRpdG9yLmRlbGV0ZUN1dERhdGEoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRmluZCB0aGUgbmF0aXZlIERPTSBlbGVtZW50IGZyb20gYSBTbGF0ZSBub2RlLlxuICAgICAqL1xuXG4gICAgdG9ET01Ob2RlKGVkaXRvcjogQW5ndWxhckVkaXRvciwgbm9kZTogTm9kZSk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZG9tTm9kZSA9IEVkaXRvci5pc0VkaXRvcihub2RlKSA/IEVESVRPUl9UT19FTEVNRU5ULmdldChlZGl0b3IpIDogTk9ERV9UT19FTEVNRU5ULmdldChub2RlKTtcblxuICAgICAgICBpZiAoIWRvbU5vZGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgYSBET00gbm9kZSBmcm9tIFNsYXRlIG5vZGU6ICR7SlNPTi5zdHJpbmdpZnkobm9kZSl9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZG9tTm9kZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRmluZCBhIG5hdGl2ZSBET00gc2VsZWN0aW9uIHBvaW50IGZyb20gYSBTbGF0ZSBwb2ludC5cbiAgICAgKi9cblxuICAgIHRvRE9NUG9pbnQoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBwb2ludDogUG9pbnQpOiBET01Qb2ludCB7XG4gICAgICAgIGNvbnN0IFtub2RlXSA9IEVkaXRvci5ub2RlKGVkaXRvciwgcG9pbnQucGF0aCk7XG4gICAgICAgIGNvbnN0IGVsID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUoZWRpdG9yLCBub2RlKTtcbiAgICAgICAgbGV0IGRvbVBvaW50OiBET01Qb2ludCB8IHVuZGVmaW5lZDtcblxuICAgICAgICAvLyBibG9jayBjYXJkXG4gICAgICAgIGNvbnN0IGNhcmRUYXJnZXRBdHRyID0gZ2V0Q2FyZFRhcmdldEF0dHJpYnV0ZShlbCk7XG4gICAgICAgIGlmIChjYXJkVGFyZ2V0QXR0cikge1xuICAgICAgICAgICAgaWYgKHBvaW50Lm9mZnNldCA9PT0gRkFLRV9MRUZUX0JMT0NLX0NBUkRfT0ZGU0VUKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yTm9kZSA9IEFuZ3VsYXJFZGl0b3IuZ2V0Q2FyZEN1cnNvck5vZGUoZWRpdG9yLCBub2RlLCB7IGRpcmVjdGlvbjogJ2xlZnQnIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBbY3Vyc29yTm9kZSwgMV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvck5vZGUgPSBBbmd1bGFyRWRpdG9yLmdldENhcmRDdXJzb3JOb2RlKGVkaXRvciwgbm9kZSwgeyBkaXJlY3Rpb246ICdyaWdodCcgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjdXJzb3JOb2RlLCAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHdlJ3JlIGluc2lkZSBhIHZvaWQgbm9kZSwgZm9yY2UgdGhlIG9mZnNldCB0byAwLCBvdGhlcndpc2UgdGhlIHplcm9cbiAgICAgICAgLy8gd2lkdGggc3BhY2luZyBjaGFyYWN0ZXIgd2lsbCByZXN1bHQgaW4gYW4gaW5jb3JyZWN0IG9mZnNldCBvZiAxXG4gICAgICAgIGlmIChFZGl0b3Iudm9pZChlZGl0b3IsIHsgYXQ6IHBvaW50IH0pKSB7XG4gICAgICAgICAgICBwb2ludCA9IHsgcGF0aDogcG9pbnQucGF0aCwgb2Zmc2V0OiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3IgZWFjaCBsZWFmLCB3ZSBuZWVkIHRvIGlzb2xhdGUgaXRzIGNvbnRlbnQsIHdoaWNoIG1lYW5zIGZpbHRlcmluZ1xuICAgICAgICAvLyB0byBpdHMgZGlyZWN0IHRleHQgYW5kIHplcm8td2lkdGggc3BhbnMuIChXZSBoYXZlIHRvIGZpbHRlciBvdXQgYW55XG4gICAgICAgIC8vIG90aGVyIHNpYmxpbmdzIHRoYXQgbWF5IGhhdmUgYmVlbiByZW5kZXJlZCBhbG9uZ3NpZGUgdGhlbS4pXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gYFtkYXRhLXNsYXRlLXN0cmluZ10sIFtkYXRhLXNsYXRlLXplcm8td2lkdGhdYDtcbiAgICAgICAgY29uc3QgdGV4dHMgPSBBcnJheS5mcm9tKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKTtcbiAgICAgICAgbGV0IHN0YXJ0ID0gMDtcblxuICAgICAgICBmb3IgKGNvbnN0IHRleHQgb2YgdGV4dHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvbU5vZGUgPSB0ZXh0LmNoaWxkTm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmIChkb21Ob2RlID09IG51bGwgfHwgZG9tTm9kZS50ZXh0Q29udGVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBkb21Ob2RlLnRleHRDb250ZW50O1xuICAgICAgICAgICAgY29uc3QgYXR0ciA9IHRleHQuZ2V0QXR0cmlidXRlKCdkYXRhLXNsYXRlLWxlbmd0aCcpO1xuICAgICAgICAgICAgY29uc3QgdHJ1ZUxlbmd0aCA9IGF0dHIgPT0gbnVsbCA/IGxlbmd0aCA6IHBhcnNlSW50KGF0dHIsIDEwKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdHJ1ZUxlbmd0aDtcblxuICAgICAgICAgICAgaWYgKHBvaW50Lm9mZnNldCA8PSBlbmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLm1pbihsZW5ndGgsIE1hdGgubWF4KDAsIHBvaW50Lm9mZnNldCAtIHN0YXJ0KSk7XG4gICAgICAgICAgICAgICAgZG9tUG9pbnQgPSBbZG9tTm9kZSwgb2Zmc2V0XTtcbiAgICAgICAgICAgICAgICAvLyBmaXhlZCBjdXJzb3IgcG9zaXRpb24gYWZ0ZXIgemVybyB3aWR0aCBjaGFyXG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA9PT0gMCAmJiBsZW5ndGggPT09IDEgJiYgZG9tTm9kZS50ZXh0Q29udGVudCA9PT0gJ1xcdUZFRkYnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbVBvaW50ID0gW2RvbU5vZGUsIG9mZnNldCArIDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhcnQgPSBlbmQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRvbVBvaW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIGEgRE9NIHBvaW50IGZyb20gU2xhdGUgcG9pbnQ6ICR7SlNPTi5zdHJpbmdpZnkocG9pbnQpfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRvbVBvaW50O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgbmF0aXZlIERPTSByYW5nZSBmcm9tIGEgU2xhdGUgYHJhbmdlYC5cbiAgICAgKi9cblxuICAgIHRvRE9NUmFuZ2UoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCByYW5nZTogUmFuZ2UpOiBET01SYW5nZSB7XG4gICAgICAgIGNvbnN0IHsgYW5jaG9yLCBmb2N1cyB9ID0gcmFuZ2U7XG4gICAgICAgIGNvbnN0IGlzQmFja3dhcmQgPSBSYW5nZS5pc0JhY2t3YXJkKHJhbmdlKTtcbiAgICAgICAgY29uc3QgZG9tQW5jaG9yID0gQW5ndWxhckVkaXRvci50b0RPTVBvaW50KGVkaXRvciwgYW5jaG9yKTtcbiAgICAgICAgY29uc3QgZG9tRm9jdXMgPSBSYW5nZS5pc0NvbGxhcHNlZChyYW5nZSkgPyBkb21BbmNob3IgOiBBbmd1bGFyRWRpdG9yLnRvRE9NUG9pbnQoZWRpdG9yLCBmb2N1cyk7XG5cbiAgICAgICAgY29uc3Qgd2luZG93ID0gQW5ndWxhckVkaXRvci5nZXRXaW5kb3coZWRpdG9yKTtcbiAgICAgICAgY29uc3QgZG9tUmFuZ2UgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgW3N0YXJ0Tm9kZSwgc3RhcnRPZmZzZXRdID0gaXNCYWNrd2FyZCA/IGRvbUZvY3VzIDogZG9tQW5jaG9yO1xuICAgICAgICBjb25zdCBbZW5kTm9kZSwgZW5kT2Zmc2V0XSA9IGlzQmFja3dhcmQgPyBkb21BbmNob3IgOiBkb21Gb2N1cztcblxuICAgICAgICAvLyBBIHNsYXRlIFBvaW50IGF0IHplcm8td2lkdGggTGVhZiBhbHdheXMgaGFzIGFuIG9mZnNldCBvZiAwIGJ1dCBhIG5hdGl2ZSBET00gc2VsZWN0aW9uIGF0XG4gICAgICAgIC8vIHplcm8td2lkdGggbm9kZSBoYXMgYW4gb2Zmc2V0IG9mIDEgc28gd2UgaGF2ZSB0byBjaGVjayBpZiB3ZSBhcmUgaW4gYSB6ZXJvLXdpZHRoIG5vZGUgYW5kXG4gICAgICAgIC8vIGFkanVzdCB0aGUgb2Zmc2V0IGFjY29yZGluZ2x5LlxuICAgICAgICBjb25zdCBzdGFydEVsID0gKGlzRE9NRWxlbWVudChzdGFydE5vZGUpID8gc3RhcnROb2RlIDogc3RhcnROb2RlLnBhcmVudEVsZW1lbnQpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBpc1N0YXJ0QXRaZXJvV2lkdGggPSAhIXN0YXJ0RWwuZ2V0QXR0cmlidXRlKCdkYXRhLXNsYXRlLXplcm8td2lkdGgnKTtcbiAgICAgICAgY29uc3QgZW5kRWwgPSAoaXNET01FbGVtZW50KGVuZE5vZGUpID8gZW5kTm9kZSA6IGVuZE5vZGUucGFyZW50RWxlbWVudCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGlzRW5kQXRaZXJvV2lkdGggPSAhIWVuZEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zbGF0ZS16ZXJvLXdpZHRoJyk7XG5cbiAgICAgICAgZG9tUmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBpc1N0YXJ0QXRaZXJvV2lkdGggPyAxIDogc3RhcnRPZmZzZXQpO1xuICAgICAgICBkb21SYW5nZS5zZXRFbmQoZW5kTm9kZSwgaXNFbmRBdFplcm9XaWR0aCA/IDEgOiBlbmRPZmZzZXQpO1xuICAgICAgICByZXR1cm4gZG9tUmFuZ2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSBTbGF0ZSBub2RlIGZyb20gYSBuYXRpdmUgRE9NIGBlbGVtZW50YC5cbiAgICAgKi9cblxuICAgIHRvU2xhdGVOb2RlKGVkaXRvcjogQW5ndWxhckVkaXRvciwgZG9tTm9kZTogRE9NTm9kZSk6IE5vZGUge1xuICAgICAgICBsZXQgZG9tRWwgPSBpc0RPTUVsZW1lbnQoZG9tTm9kZSkgPyBkb21Ob2RlIDogZG9tTm9kZS5wYXJlbnRFbGVtZW50O1xuXG4gICAgICAgIGlmIChkb21FbCAmJiAhZG9tRWwuaGFzQXR0cmlidXRlKCdkYXRhLXNsYXRlLW5vZGUnKSkge1xuICAgICAgICAgICAgZG9tRWwgPSBkb21FbC5jbG9zZXN0KGBbZGF0YS1zbGF0ZS1ub2RlXWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZSA9IGRvbUVsID8gRUxFTUVOVF9UT19OT0RFLmdldChkb21FbCBhcyBIVE1MRWxlbWVudCkgOiBudWxsO1xuXG4gICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBhIFNsYXRlIG5vZGUgZnJvbSBET00gbm9kZTogJHtkb21FbH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHRhcmdldCByYW5nZSBmcm9tIGEgRE9NIGBldmVudGAuXG4gICAgICovXG5cbiAgICBmaW5kRXZlbnRSYW5nZShlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIGV2ZW50OiBhbnkpOiBSYW5nZSB7XG4gICAgICAgIGlmICgnbmF0aXZlRXZlbnQnIGluIGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudCA9IGV2ZW50Lm5hdGl2ZUV2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQgfSA9IGV2ZW50O1xuXG4gICAgICAgIGlmICh4ID09IG51bGwgfHwgeSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIGEgU2xhdGUgcmFuZ2UgZnJvbSBhIERPTSBldmVudDogJHtldmVudH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vZGUgPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVOb2RlKGVkaXRvciwgZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBub2RlKTtcblxuICAgICAgICAvLyBJZiB0aGUgZHJvcCB0YXJnZXQgaXMgaW5zaWRlIGEgdm9pZCBub2RlLCBtb3ZlIGl0IGludG8gZWl0aGVyIHRoZVxuICAgICAgICAvLyBuZXh0IG9yIHByZXZpb3VzIG5vZGUsIGRlcGVuZGluZyBvbiB3aGljaCBzaWRlIHRoZSBgeGAgYW5kIGB5YFxuICAgICAgICAvLyBjb29yZGluYXRlcyBhcmUgY2xvc2VzdCB0by5cbiAgICAgICAgaWYgKEVkaXRvci5pc1ZvaWQoZWRpdG9yLCBub2RlKSkge1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGlzUHJldiA9IGVkaXRvci5pc0lubGluZShub2RlKSA/IHggLSByZWN0LmxlZnQgPCByZWN0LmxlZnQgKyByZWN0LndpZHRoIC0geCA6IHkgLSByZWN0LnRvcCA8IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLSB5O1xuXG4gICAgICAgICAgICBjb25zdCBlZGdlID0gRWRpdG9yLnBvaW50KGVkaXRvciwgcGF0aCwge1xuICAgICAgICAgICAgICAgIGVkZ2U6IGlzUHJldiA/ICdzdGFydCcgOiAnZW5kJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IGlzUHJldiA/IEVkaXRvci5iZWZvcmUoZWRpdG9yLCBlZGdlKSA6IEVkaXRvci5hZnRlcihlZGl0b3IsIGVkZ2UpO1xuXG4gICAgICAgICAgICBpZiAocG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRWRpdG9yLnJhbmdlKGVkaXRvciwgcG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRWxzZSByZXNvbHZlIGEgcmFuZ2UgZnJvbSB0aGUgY2FyZXQgcG9zaXRpb24gd2hlcmUgdGhlIGRyb3Agb2NjdXJlZC5cbiAgICAgICAgbGV0IGRvbVJhbmdlOiBET01SYW5nZTtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gQW5ndWxhckVkaXRvci5nZXRXaW5kb3coZWRpdG9yKTtcbiAgICAgICAgY29uc3QgeyBkb2N1bWVudCB9ID0gd2luZG93O1xuXG4gICAgICAgIC8vIENPTVBBVDogSW4gRmlyZWZveCwgYGNhcmV0UmFuZ2VGcm9tUG9pbnRgIGRvZXNuJ3QgZXhpc3QuICgyMDE2LzA3LzI1KVxuICAgICAgICBpZiAoZG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludCkge1xuICAgICAgICAgICAgZG9tUmFuZ2UgPSBkb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50KHgsIHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSAoZG9jdW1lbnQgYXMgU2FmZUFueSkuY2FyZXRQb3NpdGlvbkZyb21Qb2ludCh4LCB5KTtcblxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgZG9tUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgICAgICAgIGRvbVJhbmdlLnNldFN0YXJ0KHBvc2l0aW9uLm9mZnNldE5vZGUsIHBvc2l0aW9uLm9mZnNldCk7XG4gICAgICAgICAgICAgICAgZG9tUmFuZ2Uuc2V0RW5kKHBvc2l0aW9uLm9mZnNldE5vZGUsIHBvc2l0aW9uLm9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRvbVJhbmdlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIGEgU2xhdGUgcmFuZ2UgZnJvbSBhIERPTSBldmVudDogJHtldmVudH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc29sdmUgYSBTbGF0ZSByYW5nZSBmcm9tIHRoZSBET00gcmFuZ2UuXG4gICAgICAgIGNvbnN0IHJhbmdlID0gQW5ndWxhckVkaXRvci50b1NsYXRlUmFuZ2UoZWRpdG9yLCBkb21SYW5nZSk7XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICB9LFxuXG4gICAgaXNMZWFmSW5FZGl0b3IoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBsZWFmTm9kZTogRE9NRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGxlYWZOb2RlLmNsb3Nlc3QoJ1tkYXRhLXNsYXRlLW5vZGU9XCJ0ZXh0XCJdJykhO1xuICAgICAgICBjb25zdCBub2RlID0gQW5ndWxhckVkaXRvci50b1NsYXRlTm9kZShlZGl0b3IsIHRleHROb2RlKTtcbiAgICAgICAgcmV0dXJuIEFuZ3VsYXJFZGl0b3IuaXNOb2RlSW5FZGl0b3IoZWRpdG9yLCBub2RlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRmluZCBhIFNsYXRlIHBvaW50IGZyb20gYSBET00gc2VsZWN0aW9uJ3MgYGRvbU5vZGVgIGFuZCBgZG9tT2Zmc2V0YC5cbiAgICAgKi9cblxuICAgIHRvU2xhdGVQb2ludChlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIGRvbVBvaW50OiBET01Qb2ludCk6IFBvaW50IHtcbiAgICAgICAgY29uc3QgW2RvbU5vZGVdID0gZG9tUG9pbnQ7XG4gICAgICAgIGNvbnN0IFtuZWFyZXN0Tm9kZSwgbmVhcmVzdE9mZnNldF0gPSBub3JtYWxpemVET01Qb2ludChkb21Qb2ludCk7XG4gICAgICAgIGxldCBwYXJlbnROb2RlID0gbmVhcmVzdE5vZGUucGFyZW50Tm9kZSBhcyBET01FbGVtZW50O1xuICAgICAgICBsZXQgdGV4dE5vZGU6IERPTUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG5cbiAgICAgICAgLy8gYmxvY2sgY2FyZFxuICAgICAgICBjb25zdCBjYXJkVGFyZ2V0QXR0ciA9IGdldENhcmRUYXJnZXRBdHRyaWJ1dGUoZG9tTm9kZSk7XG4gICAgICAgIGlmIChjYXJkVGFyZ2V0QXR0cikge1xuICAgICAgICAgICAgY29uc3QgZG9tU2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgY29uc3QgaXNCYWNrd2FyZCA9IGVkaXRvci5zZWxlY3Rpb24gJiYgUmFuZ2UuaXNCYWNrd2FyZChlZGl0b3Iuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrQ2FyZEVudHJ5ID0gQW5ndWxhckVkaXRvci50b1NsYXRlQ2FyZEVudHJ5KGVkaXRvciwgZG9tTm9kZSkgfHwgQW5ndWxhckVkaXRvci50b1NsYXRlQ2FyZEVudHJ5KGVkaXRvciwgbmVhcmVzdE5vZGUpO1xuICAgICAgICAgICAgY29uc3QgWywgYmxvY2tQYXRoXSA9IGJsb2NrQ2FyZEVudHJ5O1xuICAgICAgICAgICAgaWYgKGRvbVNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgIGlmIChpc0NhcmRMZWZ0QnlUYXJnZXRBdHRyKGNhcmRUYXJnZXRBdHRyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBwYXRoOiBibG9ja1BhdGgsIG9mZnNldDogLTEgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBwYXRoOiBibG9ja1BhdGgsIG9mZnNldDogLTIgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmb3J3YXJkXG4gICAgICAgICAgICAvLyBhbmQgdG8gdGhlIGVuZCBvZiBwcmV2aW91cyBub2RlXG4gICAgICAgICAgICBpZiAoaXNDYXJkTGVmdEJ5VGFyZ2V0QXR0cihjYXJkVGFyZ2V0QXR0cikgJiYgIWlzQmFja3dhcmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRQYXRoID0gYmxvY2tQYXRoW2Jsb2NrUGF0aC5sZW5ndGggLSAxXSA8PSAwID8gYmxvY2tQYXRoIDogUGF0aC5wcmV2aW91cyhibG9ja1BhdGgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBFZGl0b3IuZW5kKGVkaXRvciwgZW5kUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0byB0aGUgb2YgY3VycmVudCBub2RlXG4gICAgICAgICAgICBpZiAoKGlzQ2FyZENlbnRlckJ5VGFyZ2V0QXR0cihjYXJkVGFyZ2V0QXR0cikgfHwgaXNDYXJkUmlnaHRCeVRhcmdldEF0dHIoY2FyZFRhcmdldEF0dHIpKSAmJiAhaXNCYWNrd2FyZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBFZGl0b3IuZW5kKGVkaXRvciwgYmxvY2tQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkXG4gICAgICAgICAgICAvLyBhbmQgdG8gdGhlIHN0YXJ0IG9mIG5leHQgbm9kZVxuICAgICAgICAgICAgaWYgKGlzQ2FyZFJpZ2h0QnlUYXJnZXRBdHRyKGNhcmRUYXJnZXRBdHRyKSAmJiBpc0JhY2t3YXJkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEVkaXRvci5zdGFydChlZGl0b3IsIFBhdGgubmV4dChibG9ja1BhdGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFuZCB0byB0aGUgc3RhcnQgb2YgY3VycmVudCBub2RlXG4gICAgICAgICAgICBpZiAoKGlzQ2FyZENlbnRlckJ5VGFyZ2V0QXR0cihjYXJkVGFyZ2V0QXR0cikgfHwgaXNDYXJkTGVmdEJ5VGFyZ2V0QXR0cihjYXJkVGFyZ2V0QXR0cikpICYmIGlzQmFja3dhcmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRWRpdG9yLnN0YXJ0KGVkaXRvciwgYmxvY2tQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBjb25zdCB2b2lkTm9kZSA9IHBhcmVudE5vZGUuY2xvc2VzdCgnW2RhdGEtc2xhdGUtdm9pZD1cInRydWVcIl0nKTtcbiAgICAgICAgICAgIGxldCBsZWFmTm9kZSA9IHBhcmVudE5vZGUuY2xvc2VzdCgnW2RhdGEtc2xhdGUtbGVhZl0nKTtcbiAgICAgICAgICAgIGxldCBkb21Ob2RlOiBET01FbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBob3cgZmFyIGludG8gdGhlIHRleHQgbm9kZSB0aGUgYG5lYXJlc3ROb2RlYCBpcywgc28gdGhhdCB3ZVxuICAgICAgICAgICAgLy8gY2FuIGRldGVybWluZSB3aGF0IHRoZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIHRleHQgbm9kZSBpcy5cbiAgICAgICAgICAgIGlmIChsZWFmTm9kZSAmJiBBbmd1bGFyRWRpdG9yLmlzTGVhZkluRWRpdG9yKGVkaXRvciwgbGVhZk5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGV4dE5vZGUgPSBsZWFmTm9kZS5jbG9zZXN0KCdbZGF0YS1zbGF0ZS1ub2RlPVwidGV4dFwiXScpITtcbiAgICAgICAgICAgICAgICBjb25zdCB3aW5kb3cgPSBBbmd1bGFyRWRpdG9yLmdldFdpbmRvdyhlZGl0b3IpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGV4dE5vZGUsIDApO1xuICAgICAgICAgICAgICAgIHJhbmdlLnNldEVuZChuZWFyZXN0Tm9kZSwgbmVhcmVzdE9mZnNldCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSByYW5nZS5jbG9uZUNvbnRlbnRzKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZhbHMgPSBbXG4gICAgICAgICAgICAgICAgICAgIC4uLkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGNvbnRlbnRzLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXNsYXRlLXplcm8td2lkdGhdJykpLFxuICAgICAgICAgICAgICAgICAgICAuLi5BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjb250ZW50cy5xdWVyeVNlbGVjdG9yQWxsKCdbY29udGVudGVkaXRhYmxlPWZhbHNlXScpKVxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICByZW1vdmFscy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZWwhLnBhcmVudE5vZGUhLnJlbW92ZUNoaWxkKGVsKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIENPTVBBVDogRWRnZSBoYXMgYSBidWcgd2hlcmUgUmFuZ2UucHJvdG90eXBlLnRvU3RyaW5nKCkgd2lsbFxuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgXFxuIGludG8gXFxyXFxuLiBUaGUgYnVnIGNhdXNlcyBhIGxvb3Agd2hlbiBzbGF0ZS1yZWFjdFxuICAgICAgICAgICAgICAgIC8vIGF0dGVtcHRzIHRvIHJlcG9zaXRpb24gaXRzIGN1cnNvciB0byBtYXRjaCB0aGUgbmF0aXZlIHBvc2l0aW9uLiBVc2VcbiAgICAgICAgICAgICAgICAvLyB0ZXh0Q29udGVudC5sZW5ndGggaW5zdGVhZC5cbiAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL2lzc3Vlcy8xMDI5MTExNi9cbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBjb250ZW50cy50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGRvbU5vZGUgPSB0ZXh0Tm9kZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodm9pZE5vZGUpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3Igdm9pZCBub2RlcywgdGhlIGVsZW1lbnQgd2l0aCB0aGUgb2Zmc2V0IGtleSB3aWxsIGJlIGEgY291c2luLCBub3QgYW5cbiAgICAgICAgICAgICAgICAvLyBhbmNlc3Rvciwgc28gZmluZCBpdCBieSBnb2luZyBkb3duIGZyb20gdGhlIG5lYXJlc3Qgdm9pZCBwYXJlbnQuXG5cbiAgICAgICAgICAgICAgICBsZWFmTm9kZSA9IHZvaWROb2RlLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXNsYXRlLWxlYWZdJykhO1xuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSB2b2lkTm9kZS5xdWVyeVNlbGVjdG9yKCdbZGF0YS1zbGF0ZS1sZW5ndGg9XCIwXCJdJyk7XG4gICAgICAgICAgICAgICAgdGV4dE5vZGUgPSBsZWFmTm9kZS5jbG9zZXN0KCdbZGF0YS1zbGF0ZS1ub2RlPVwidGV4dFwiXScpITtcbiAgICAgICAgICAgICAgICBkb21Ob2RlID0gbGVhZk5vZGU7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gZG9tTm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDT01QQVQ6IElmIHRoZSBwYXJlbnQgbm9kZSBpcyBhIFNsYXRlIHplcm8td2lkdGggc3BhY2UsIGVkaXRvciBpc1xuICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgdGV4dCBub2RlIHNob3VsZCBoYXZlIG5vIGNoYXJhY3RlcnMuIEhvd2V2ZXIsIGR1cmluZyBJTUVcbiAgICAgICAgICAgIC8vIGNvbXBvc2l0aW9uIHRoZSBBU0NJSSBjaGFyYWN0ZXJzIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoZSB6ZXJvLXdpZHRoXG4gICAgICAgICAgICAvLyBzcGFjZSwgc28gc3VidHJhY3QgMSBmcm9tIHRoZSBvZmZzZXQgdG8gYWNjb3VudCBmb3IgdGhlIHplcm8td2lkdGhcbiAgICAgICAgICAgIC8vIHNwYWNlIGNoYXJhY3Rlci5cbiAgICAgICAgICAgIGlmIChkb21Ob2RlICYmIG9mZnNldCA9PT0gZG9tTm9kZS50ZXh0Q29udGVudCEubGVuZ3RoICYmIHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtemVyby13aWR0aCcpKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0LS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRleHROb2RlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIGEgU2xhdGUgcG9pbnQgZnJvbSBET00gcG9pbnQ6ICR7ZG9tUG9pbnR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDT01QQVQ6IElmIHNvbWVvbmUgaXMgY2xpY2tpbmcgZnJvbSBvbmUgU2xhdGUgZWRpdG9yIGludG8gYW5vdGhlcixcbiAgICAgICAgLy8gdGhlIHNlbGVjdCBldmVudCBmaXJlcyB0d2ljZSwgb25jZSBmb3IgdGhlIG9sZCBlZGl0b3IncyBgZWxlbWVudGBcbiAgICAgICAgLy8gZmlyc3QsIGFuZCB0aGVuIGFmdGVyd2FyZHMgZm9yIHRoZSBjb3JyZWN0IGBlbGVtZW50YC4gKDIwMTcvMDMvMDMpXG4gICAgICAgIGNvbnN0IHNsYXRlTm9kZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZU5vZGUoZWRpdG9yLCB0ZXh0Tm9kZSEpO1xuICAgICAgICBjb25zdCBwYXRoID0gQW5ndWxhckVkaXRvci5maW5kUGF0aChlZGl0b3IsIHNsYXRlTm9kZSk7XG4gICAgICAgIHJldHVybiB7IHBhdGgsIG9mZnNldCB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgU2xhdGUgcmFuZ2UgZnJvbSBhIERPTSByYW5nZSBvciBzZWxlY3Rpb24uXG4gICAgICovXG5cbiAgICB0b1NsYXRlUmFuZ2UoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBkb21SYW5nZTogRE9NUmFuZ2UgfCBET01TdGF0aWNSYW5nZSB8IERPTVNlbGVjdGlvbik6IFJhbmdlIHtcbiAgICAgICAgY29uc3QgZWwgPSBpc0RPTVNlbGVjdGlvbihkb21SYW5nZSkgPyBkb21SYW5nZS5hbmNob3JOb2RlIDogZG9tUmFuZ2Uuc3RhcnRDb250YWluZXI7XG4gICAgICAgIGxldCBhbmNob3JOb2RlO1xuICAgICAgICBsZXQgYW5jaG9yT2Zmc2V0O1xuICAgICAgICBsZXQgZm9jdXNOb2RlO1xuICAgICAgICBsZXQgZm9jdXNPZmZzZXQ7XG4gICAgICAgIGxldCBpc0NvbGxhcHNlZDtcblxuICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgIGlmIChpc0RPTVNlbGVjdGlvbihkb21SYW5nZSkpIHtcbiAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gZG9tUmFuZ2UuYW5jaG9yTm9kZTtcbiAgICAgICAgICAgICAgICBhbmNob3JPZmZzZXQgPSBkb21SYW5nZS5hbmNob3JPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZm9jdXNOb2RlID0gZG9tUmFuZ2UuZm9jdXNOb2RlO1xuICAgICAgICAgICAgICAgIGZvY3VzT2Zmc2V0ID0gZG9tUmFuZ2UuZm9jdXNPZmZzZXQ7XG4gICAgICAgICAgICAgICAgLy8gQ09NUEFUOiBUaGVyZSdzIGEgYnVnIGluIGNocm9tZSB0aGF0IGFsd2F5cyByZXR1cm5zIGB0cnVlYCBmb3JcbiAgICAgICAgICAgICAgICAvLyBgaXNDb2xsYXBzZWRgIGZvciBhIFNlbGVjdGlvbiB0aGF0IGNvbWVzIGZyb20gYSBTaGFkb3dSb290LlxuICAgICAgICAgICAgICAgIC8vICgyMDIwLzA4LzA4KVxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0NzUyM1xuICAgICAgICAgICAgICAgIGlmIChJU19DSFJPTUUgJiYgaGFzU2hhZG93Um9vdCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzQ29sbGFwc2VkID0gZG9tUmFuZ2UuYW5jaG9yTm9kZSA9PT0gZG9tUmFuZ2UuZm9jdXNOb2RlICYmIGRvbVJhbmdlLmFuY2hvck9mZnNldCA9PT0gZG9tUmFuZ2UuZm9jdXNPZmZzZXQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaXNDb2xsYXBzZWQgPSBkb21SYW5nZS5pc0NvbGxhcHNlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBkb21SYW5nZS5zdGFydENvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICBhbmNob3JPZmZzZXQgPSBkb21SYW5nZS5zdGFydE9mZnNldDtcbiAgICAgICAgICAgICAgICBmb2N1c05vZGUgPSBkb21SYW5nZS5lbmRDb250YWluZXI7XG4gICAgICAgICAgICAgICAgZm9jdXNPZmZzZXQgPSBkb21SYW5nZS5lbmRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgaXNDb2xsYXBzZWQgPSBkb21SYW5nZS5jb2xsYXBzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYW5jaG9yTm9kZSA9PSBudWxsIHx8IGZvY3VzTm9kZSA9PSBudWxsIHx8IGFuY2hvck9mZnNldCA9PSBudWxsIHx8IGZvY3VzT2Zmc2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgYSBTbGF0ZSByYW5nZSBmcm9tIERPTSByYW5nZTogJHtkb21SYW5nZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFuY2hvciA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZVBvaW50KGVkaXRvciwgW2FuY2hvck5vZGUsIGFuY2hvck9mZnNldF0pO1xuICAgICAgICBjb25zdCBmb2N1cyA9IGlzQ29sbGFwc2VkID8gYW5jaG9yIDogQW5ndWxhckVkaXRvci50b1NsYXRlUG9pbnQoZWRpdG9yLCBbZm9jdXNOb2RlLCBmb2N1c09mZnNldF0pO1xuXG4gICAgICAgIHJldHVybiB7IGFuY2hvciwgZm9jdXMgfTtcbiAgICB9LFxuXG4gICAgaXNMZWFmQmxvY2soZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBFbGVtZW50LmlzRWxlbWVudChub2RlKSAmJiAhZWRpdG9yLmlzSW5saW5lKG5vZGUpICYmIEVkaXRvci5oYXNJbmxpbmVzKGVkaXRvciwgbm9kZSk7XG4gICAgfSxcblxuICAgIGlzQmxvY2tDYXJkTGVmdEN1cnNvcihlZGl0b3I6IEFuZ3VsYXJFZGl0b3IpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLm9mZnNldCA9PT0gRkFLRV9MRUZUX0JMT0NLX0NBUkRfT0ZGU0VUICYmIGVkaXRvci5zZWxlY3Rpb24uZm9jdXMub2Zmc2V0ID09PSBGQUtFX0xFRlRfQkxPQ0tfQ0FSRF9PRkZTRVRcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgaXNCbG9ja0NhcmRSaWdodEN1cnNvcihlZGl0b3I6IEFuZ3VsYXJFZGl0b3IpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLm9mZnNldCA9PT0gRkFLRV9SSUdIVF9CTE9DS19DQVJEX09GRlNFVCAmJlxuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5mb2N1cy5vZmZzZXQgPT09IEZBS0VfUklHSFRfQkxPQ0tfQ0FSRF9PRkZTRVRcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgZ2V0Q2FyZEN1cnNvck5vZGUoXG4gICAgICAgIGVkaXRvcjogQW5ndWxhckVkaXRvcixcbiAgICAgICAgYmxvY2tDYXJkTm9kZTogTm9kZSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnIHwgJ2NlbnRlcic7XG4gICAgICAgIH1cbiAgICApIHtcbiAgICAgICAgY29uc3QgYmxvY2tDYXJkRWxlbWVudCA9IEFuZ3VsYXJFZGl0b3IudG9ET01Ob2RlKGVkaXRvciwgYmxvY2tDYXJkTm9kZSk7XG4gICAgICAgIGNvbnN0IGNhcmRDZW50ZXIgPSBibG9ja0NhcmRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRpcmVjdGlvbiA9PT0gJ2xlZnQnID8gY2FyZENlbnRlci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmZpcnN0Q2hpbGQgOiBjYXJkQ2VudGVyLm5leHRFbGVtZW50U2libGluZy5maXJzdENoaWxkO1xuICAgIH0sXG5cbiAgICB0b1NsYXRlQ2FyZEVudHJ5KGVkaXRvcjogQW5ndWxhckVkaXRvciwgbm9kZTogRE9NTm9kZSk6IE5vZGVFbnRyeSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBub2RlLnBhcmVudEVsZW1lbnQuY2xvc2VzdCgnLnNsYXRlLWJsb2NrLWNhcmQnKT8ucXVlcnlTZWxlY3RvcignW2NhcmQtdGFyZ2V0PVwiY2FyZC1jZW50ZXJcIl0nKS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgY29uc3Qgc2xhdGVOb2RlID0gQW5ndWxhckVkaXRvci50b1NsYXRlTm9kZShlZGl0b3IsIGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBwYXRoID0gQW5ndWxhckVkaXRvci5maW5kUGF0aChlZGl0b3IsIHNsYXRlTm9kZSk7XG4gICAgICAgIHJldHVybiBbc2xhdGVOb2RlLCBwYXRoXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogbW92ZSBuYXRpdmUgc2VsZWN0aW9uIHRvIGNhcmQtbGVmdCBvciBjYXJkLXJpZ2h0XG4gICAgICogQHBhcmFtIGVkaXRvclxuICAgICAqIEBwYXJhbSBibG9ja0NhcmROb2RlXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICBtb3ZlQmxvY2tDYXJkKFxuICAgICAgICBlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsXG4gICAgICAgIGJsb2NrQ2FyZE5vZGU6IE5vZGUsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JztcbiAgICAgICAgfVxuICAgICkge1xuICAgICAgICBjb25zdCBjdXJzb3JOb2RlID0gQW5ndWxhckVkaXRvci5nZXRDYXJkQ3Vyc29yTm9kZShlZGl0b3IsIGJsb2NrQ2FyZE5vZGUsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB3aW5kb3cgPSBBbmd1bGFyRWRpdG9yLmdldFdpbmRvdyhlZGl0b3IpO1xuICAgICAgICBjb25zdCBkb21TZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGRvbVNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KGN1cnNvck5vZGUsIDEsIGN1cnNvck5vZGUsIDEpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBtb3ZlIHNsYXRlIHNlbGVjdGlvbiB0byBjYXJkLWxlZnQgb3IgY2FyZC1yaWdodFxuICAgICAqIEBwYXJhbSBlZGl0b3JcbiAgICAgKiBAcGFyYW0gcGF0aFxuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICovXG4gICAgbW92ZUJsb2NrQ2FyZEN1cnNvcihcbiAgICAgICAgZWRpdG9yOiBBbmd1bGFyRWRpdG9yLFxuICAgICAgICBwYXRoOiBQYXRoLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCc7XG4gICAgICAgIH1cbiAgICApIHtcbiAgICAgICAgY29uc3QgY3Vyc29yID0ge1xuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIG9mZnNldDogb3B0aW9ucy5kaXJlY3Rpb24gPT09ICdsZWZ0JyA/IEZBS0VfTEVGVF9CTE9DS19DQVJEX09GRlNFVCA6IEZBS0VfUklHSFRfQkxPQ0tfQ0FSRF9PRkZTRVRcbiAgICAgICAgfTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCB7IGFuY2hvcjogY3Vyc29yLCBmb2N1czogY3Vyc29yIH0pO1xuICAgIH0sXG5cbiAgICBoYXNSYW5nZShlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIHJhbmdlOiBSYW5nZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7IGFuY2hvciwgZm9jdXMgfSA9IHJhbmdlO1xuICAgICAgICByZXR1cm4gRWRpdG9yLmhhc1BhdGgoZWRpdG9yLCBhbmNob3IucGF0aCkgJiYgRWRpdG9yLmhhc1BhdGgoZWRpdG9yLCBmb2N1cy5wYXRoKTtcbiAgICB9XG59O1xuIl19
594
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1lZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9hbmd1bGFyLWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFRLElBQUksRUFBUyxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBYyxNQUFNLE9BQU8sQ0FBQztBQUMxRixPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixVQUFVLEVBQ1YsV0FBVyxFQUNYLGFBQWEsRUFDYixjQUFjLEVBQ2QsZUFBZSxFQUNmLFdBQVcsRUFDWCxnQkFBZ0IsRUFDbkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBT0gsYUFBYSxFQUNiLFlBQVksRUFDWixjQUFjLEVBQ2QsaUJBQWlCLEVBQ3BCLE1BQU0sY0FBYyxDQUFDO0FBSXRCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkMsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFDSCwyQkFBMkIsRUFDM0IsNEJBQTRCLEVBQzVCLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUMxQixNQUFNLHFCQUFxQixDQUFDO0FBcUI3QixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUc7SUFDekI7O09BRUc7SUFFSCxTQUFTLENBQUMsTUFBcUI7UUFDM0IsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7U0FDM0U7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ0Q7O09BRUc7SUFFSCxPQUFPLENBQUMsTUFBcUIsRUFBRSxJQUFVO1FBQ3JDLElBQUks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QUMsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyw0QkFBNEI7U0FDcEcsQ0FBQztRQUNGLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQXFCLEVBQUUsS0FBWTtRQUN4QyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNoQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckYsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFZGl0b3IsIE5vZGUsIFBhdGgsIFBvaW50LCBSYW5nZSwgVHJhbnNmb3JtcywgRWxlbWVudCwgQmFzZUVkaXRvciB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7XG4gICAgRURJVE9SX1RPX0VMRU1FTlQsXG4gICAgRUxFTUVOVF9UT19OT0RFLFxuICAgIElTX0ZPQ1VTRUQsXG4gICAgSVNfUkVBRE9OTFksXG4gICAgTk9ERV9UT19JTkRFWCxcbiAgICBOT0RFX1RPX1BBUkVOVCxcbiAgICBOT0RFX1RPX0VMRU1FTlQsXG4gICAgTk9ERV9UT19LRVksXG4gICAgRURJVE9SX1RPX1dJTkRPV1xufSBmcm9tICcuLi91dGlscy93ZWFrLW1hcHMnO1xuaW1wb3J0IHtcbiAgICBET01FbGVtZW50LFxuICAgIERPTU5vZGUsXG4gICAgRE9NUG9pbnQsXG4gICAgRE9NUmFuZ2UsXG4gICAgRE9NU2VsZWN0aW9uLFxuICAgIERPTVN0YXRpY1JhbmdlLFxuICAgIGhhc1NoYWRvd1Jvb3QsXG4gICAgaXNET01FbGVtZW50LFxuICAgIGlzRE9NU2VsZWN0aW9uLFxuICAgIG5vcm1hbGl6ZURPTVBvaW50XG59IGZyb20gJy4uL3V0aWxzL2RvbSc7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9kZUVudHJ5IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgU2xhdGVFcnJvciB9IGZyb20gJy4uL3R5cGVzL2Vycm9yJztcbmltcG9ydCB7IEtleSB9IGZyb20gJy4uL3V0aWxzL2tleSc7XG5pbXBvcnQgeyBJU19DSFJPTUUsIElTX0ZJUkVGT1ggfSBmcm9tICcuLi91dGlscy9lbnZpcm9ubWVudCc7XG5pbXBvcnQge1xuICAgIEZBS0VfTEVGVF9CTE9DS19DQVJEX09GRlNFVCxcbiAgICBGQUtFX1JJR0hUX0JMT0NLX0NBUkRfT0ZGU0VULFxuICAgIGdldENhcmRUYXJnZXRBdHRyaWJ1dGUsXG4gICAgaXNDYXJkQ2VudGVyQnlUYXJnZXRBdHRyLFxuICAgIGlzQ2FyZExlZnRCeVRhcmdldEF0dHIsXG4gICAgaXNDYXJkUmlnaHRCeVRhcmdldEF0dHJcbn0gZnJvbSAnLi4vdXRpbHMvYmxvY2stY2FyZCc7XG5pbXBvcnQgeyBTYWZlQW55IH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIEFuIEFuZ3VsYXIgYW5kIERPTS1zcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBgRWRpdG9yYCBpbnRlcmZhY2UuXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBBbmd1bGFyRWRpdG9yIGV4dGVuZHMgQmFzZUVkaXRvciB7XG4gICAgaW5zZXJ0RGF0YTogKGRhdGE6IERhdGFUcmFuc2ZlcikgPT4gdm9pZDtcbiAgICBpbnNlcnRGcmFnbWVudERhdGE6IChkYXRhOiBEYXRhVHJhbnNmZXIpID0+IGJvb2xlYW47XG4gICAgaW5zZXJ0VGV4dERhdGE6IChkYXRhOiBEYXRhVHJhbnNmZXIpID0+IGJvb2xlYW47XG4gICAgc2V0RnJhZ21lbnREYXRhOiAoZGF0YTogRGF0YVRyYW5zZmVyLCBvcmlnaW5FdmVudD86ICdkcmFnJyB8ICdjb3B5JyB8ICdjdXQnKSA9PiB2b2lkO1xuICAgIGRlbGV0ZUN1dERhdGE6ICgpID0+IHZvaWQ7XG4gICAgb25LZXlkb3duOiAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQ7XG4gICAgb25DbGljazogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIGluamVjdG9yOiBJbmplY3RvcjtcbiAgICBpc0Jsb2NrQ2FyZDogKG5vZGU6IE5vZGUpID0+IGJvb2xlYW47XG4gICAgb25FcnJvcjogKGVycm9yRGF0YTogU2xhdGVFcnJvcikgPT4gdm9pZDtcbiAgICBoYXNSYW5nZTogKGVkaXRvcjogQW5ndWxhckVkaXRvciwgcmFuZ2U6IFJhbmdlKSA9PiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQW5ndWxhckVkaXRvciA9IHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGhvc3Qgd2luZG93IG9mIHRoZSBjdXJyZW50IGVkaXRvci5cbiAgICAgKi9cblxuICAgIGdldFdpbmRvdyhlZGl0b3I6IEFuZ3VsYXJFZGl0b3IpOiBXaW5kb3cge1xuICAgICAgICBjb25zdCB3aW5kb3cgPSBFRElUT1JfVE9fV0lORE9XLmdldChlZGl0b3IpO1xuICAgICAgICBpZiAoIXdpbmRvdykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBhIGhvc3Qgd2luZG93IGVsZW1lbnQgZm9yIHRoaXMgZWRpdG9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEZpbmQgYSBrZXkgZm9yIGEgU2xhdGUgbm9kZS5cbiAgICAgKi9cblxuICAgIGZpbmRLZXkoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBub2RlOiBOb2RlKTogS2V5IHtcbiAgICAgICAgbGV0IGtleSA9IE5PREVfVE9fS0VZLmdldChub2RlKTtcblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAga2V5ID0gbmV3IEtleSgpO1xuICAgICAgICAgICAgTk9ERV9UT19LRVkuc2V0KG5vZGUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBoYW5kbGUgZWRpdG9yIGVycm9yLlxuICAgICAqL1xuXG4gICAgb25FcnJvcihlcnJvckRhdGE6IFNsYXRlRXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yRGF0YS5uYXRpdmVFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3JEYXRhLm5hdGl2ZUVycm9yO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIHBhdGggb2YgU2xhdGUgbm9kZS5cbiAgICAgKi9cblxuICAgIGZpbmRQYXRoKGVkaXRvcjogQW5ndWxhckVkaXRvciwgbm9kZTogTm9kZSk6IFBhdGgge1xuICAgICAgICBjb25zdCBwYXRoOiBQYXRoID0gW107XG4gICAgICAgIGxldCBjaGlsZCA9IG5vZGU7XG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IE5PREVfVE9fUEFSRU5ULmdldChjaGlsZCk7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChFZGl0b3IuaXNFZGl0b3IoY2hpbGQpICYmIGNoaWxkID09PSBlZGl0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpID0gTk9ERV9UT19JTkRFWC5nZXQoY2hpbGQpO1xuXG4gICAgICAgICAgICBpZiAoaSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhdGgudW5zaGlmdChpKTtcbiAgICAgICAgICAgIGNoaWxkID0gcGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgdGhlIHBhdGggZm9yIFNsYXRlIG5vZGU6ICR7SlNPTi5zdHJpbmdpZnkobm9kZSl9YCk7XG4gICAgfSxcblxuICAgIGlzTm9kZUluRWRpdG9yKGVkaXRvcjogQW5ndWxhckVkaXRvciwgbm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY2hpbGQgPSBub2RlO1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBOT0RFX1RPX1BBUkVOVC5nZXQoY2hpbGQpO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoRWRpdG9yLmlzRWRpdG9yKGNoaWxkKSAmJiBjaGlsZCA9PT0gZWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaSA9IE5PREVfVE9fSU5ERVguZ2V0KGNoaWxkKTtcblxuICAgICAgICAgICAgaWYgKGkgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZCA9IHBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRmluZCB0aGUgRE9NIG5vZGUgdGhhdCBpbXBsZW1lbnRzIERvY3VtZW50T3JTaGFkb3dSb290IGZvciB0aGUgZWRpdG9yLlxuICAgICAqL1xuXG4gICAgZmluZERvY3VtZW50T3JTaGFkb3dSb290KGVkaXRvcjogQW5ndWxhckVkaXRvcik6IERvY3VtZW50IHwgU2hhZG93Um9vdCB7XG4gICAgICAgIGNvbnN0IGVsID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUoZWRpdG9yLCBlZGl0b3IpO1xuICAgICAgICBjb25zdCByb290ID0gZWwuZ2V0Um9vdE5vZGUoKTtcbiAgICAgICAgaWYgKChyb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpICYmIChyb290IGFzIERvY3VtZW50KS5nZXRTZWxlY3Rpb24gIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWwub3duZXJEb2N1bWVudDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGVkaXRvciBpcyBmb2N1c2VkLlxuICAgICAqL1xuXG4gICAgaXNGb2N1c2VkKGVkaXRvcjogQW5ndWxhckVkaXRvcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISFJU19GT0NVU0VELmdldChlZGl0b3IpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgZWRpdG9yIGlzIGluIHJlYWQtb25seSBtb2RlLlxuICAgICAqL1xuXG4gICAgaXNSZWFkb25seShlZGl0b3I6IEFuZ3VsYXJFZGl0b3IpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhSVNfUkVBRE9OTFkuZ2V0KGVkaXRvcik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSBlZGl0b3IgaXMgaGFuZ2luZyByaWdodC5cbiAgICAgKi9cbiAgICBpc0Jsb2NrSGFuZ2luZ1JpZ2h0KGVkaXRvcjogQW5ndWxhckVkaXRvcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuICAgICAgICBpZiAoIXNlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChSYW5nZS5pc0NvbGxhcHNlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gUmFuZ2UuZWRnZXMoc2VsZWN0aW9uKTtcbiAgICAgICAgY29uc3QgZW5kQmxvY2sgPSBFZGl0b3IuYWJvdmUoZWRpdG9yLCB7XG4gICAgICAgICAgICBhdDogZW5kLFxuICAgICAgICAgICAgbWF0Y2g6IG5vZGUgPT4gRWxlbWVudC5pc0VsZW1lbnQobm9kZSkgJiYgRWRpdG9yLmlzQmxvY2soZWRpdG9yLCBub2RlKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEVkaXRvci5pc1N0YXJ0KGVkaXRvciwgZW5kLCBlbmRCbG9ja1sxXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEJsdXIgdGhlIGVkaXRvci5cbiAgICAgKi9cblxuICAgIGJsdXIoZWRpdG9yOiBBbmd1bGFyRWRpdG9yKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUoZWRpdG9yLCBlZGl0b3IpO1xuICAgICAgICBjb25zdCByb290ID0gQW5ndWxhckVkaXRvci5maW5kRG9jdW1lbnRPclNoYWRvd1Jvb3QoZWRpdG9yKTtcbiAgICAgICAgSVNfRk9DVVNFRC5zZXQoZWRpdG9yLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHJvb3QuYWN0aXZlRWxlbWVudCA9PT0gZWwpIHtcbiAgICAgICAgICAgIGVsLmJsdXIoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGb2N1cyB0aGUgZWRpdG9yLlxuICAgICAqL1xuXG4gICAgZm9jdXMoZWRpdG9yOiBBbmd1bGFyRWRpdG9yKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUoZWRpdG9yLCBlZGl0b3IpO1xuICAgICAgICBJU19GT0NVU0VELnNldChlZGl0b3IsIHRydWUpO1xuXG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IEFuZ3VsYXJFZGl0b3IuZ2V0V2luZG93KGVkaXRvcik7XG4gICAgICAgIGlmICh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWwpIHtcbiAgICAgICAgICAgIGVsLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZXNlbGVjdCB0aGUgZWRpdG9yLlxuICAgICAqL1xuXG4gICAgZGVzZWxlY3QoZWRpdG9yOiBBbmd1bGFyRWRpdG9yKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBlZGl0b3I7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBBbmd1bGFyRWRpdG9yLmZpbmREb2N1bWVudE9yU2hhZG93Um9vdChlZGl0b3IpO1xuICAgICAgICBjb25zdCBkb21TZWxlY3Rpb24gPSAocm9vdCBhcyBEb2N1bWVudCkuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICAgICAgaWYgKGRvbVNlbGVjdGlvbiAmJiBkb21TZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcbiAgICAgICAgICAgIGRvbVNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuZGVzZWxlY3QoZWRpdG9yKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhIERPTSBub2RlIGlzIHdpdGhpbiB0aGUgZWRpdG9yLlxuICAgICAqL1xuXG4gICAgaGFzRE9NTm9kZShlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIHRhcmdldDogRE9NTm9kZSwgb3B0aW9uczogeyBlZGl0YWJsZT86IGJvb2xlYW4gfSA9IHt9KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgZWRpdGFibGUgPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgZWRpdG9yRWwgPSBBbmd1bGFyRWRpdG9yLnRvRE9NTm9kZShlZGl0b3IsIGVkaXRvcik7XG4gICAgICAgIGxldCB0YXJnZXRFbDtcblxuICAgICAgICAvLyBDT01QQVQ6IEluIEZpcmVmb3gsIHJlYWRpbmcgYHRhcmdldC5ub2RlVHlwZWAgd2lsbCB0aHJvdyBhbiBlcnJvciBpZlxuICAgICAgICAvLyB0YXJnZXQgaXMgb3JpZ2luYXRpbmcgZnJvbSBhbiBpbnRlcm5hbCBcInJlc3RyaWN0ZWRcIiBlbGVtZW50IChlLmcuIGFcbiAgICAgICAgLy8gc3RlcHBlciBhcnJvdyBvbiBhIG51bWJlciBpbnB1dCkuICgyMDE4LzA1LzA0KVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaWFuc3Rvcm10YXlsb3Ivc2xhdGUvaXNzdWVzLzE4MTlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRhcmdldEVsID0gKGlzRE9NRWxlbWVudCh0YXJnZXQpID8gdGFyZ2V0IDogdGFyZ2V0LnBhcmVudEVsZW1lbnQpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmICghZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1Blcm1pc3Npb24gZGVuaWVkIHRvIGFjY2VzcyBwcm9wZXJ0eSBcIm5vZGVUeXBlXCInKSkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGFyZ2V0RWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0YXJnZXRFbC5jbG9zZXN0KGBbZGF0YS1zbGF0ZS1lZGl0b3JdYCkgPT09IGVkaXRvckVsICYmXG4gICAgICAgICAgICAoIWVkaXRhYmxlIHx8IHRhcmdldEVsLmlzQ29udGVudEVkaXRhYmxlIHx8ICEhdGFyZ2V0RWwuZ2V0QXR0cmlidXRlKCdkYXRhLXNsYXRlLXplcm8td2lkdGgnKSlcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0IGRhdGEgZnJvbSBhIGBEYXRhVHJhbnNmZXJgIGludG8gdGhlIGVkaXRvci5cbiAgICAgKi9cblxuICAgIGluc2VydERhdGEoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBkYXRhOiBEYXRhVHJhbnNmZXIpOiB2b2lkIHtcbiAgICAgICAgZWRpdG9yLmluc2VydERhdGEoZGF0YSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEluc2VydCBmcmFnbWVudCBkYXRhIGZyb20gYSBgRGF0YVRyYW5zZmVyYCBpbnRvIHRoZSBlZGl0b3IuXG4gICAgICovXG5cbiAgICBpbnNlcnRGcmFnbWVudERhdGEoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBkYXRhOiBEYXRhVHJhbnNmZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGVkaXRvci5pbnNlcnRGcmFnbWVudERhdGEoZGF0YSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEluc2VydCB0ZXh0IGRhdGEgZnJvbSBhIGBEYXRhVHJhbnNmZXJgIGludG8gdGhlIGVkaXRvci5cbiAgICAgKi9cblxuICAgIGluc2VydFRleHREYXRhKGVkaXRvcjogQW5ndWxhckVkaXRvciwgZGF0YTogRGF0YVRyYW5zZmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBlZGl0b3IuaW5zZXJ0VGV4dERhdGEoZGF0YSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIG9uS2V5ZG93biBob29rLlxuICAgICAqL1xuICAgIG9uS2V5ZG93bihlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIGRhdGE6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZWRpdG9yLm9uS2V5ZG93bihkYXRhKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogb25DbGljayBob29rLlxuICAgICAqL1xuICAgIG9uQ2xpY2soZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBkYXRhOiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGVkaXRvci5vbkNsaWNrKGRhdGEpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGRhdGEgZnJvbSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGZyYWdtZW50IG9uIGEgYERhdGFUcmFuc2ZlcmAuXG4gICAgICovXG5cbiAgICBzZXRGcmFnbWVudERhdGEoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBkYXRhOiBEYXRhVHJhbnNmZXIsIG9yaWdpbkV2ZW50PzogJ2RyYWcnIHwgJ2NvcHknIHwgJ2N1dCcpOiB2b2lkIHtcbiAgICAgICAgZWRpdG9yLnNldEZyYWdtZW50RGF0YShkYXRhLCBvcmlnaW5FdmVudCk7XG4gICAgfSxcblxuICAgIGRlbGV0ZUN1dERhdGEoZWRpdG9yOiBBbmd1bGFyRWRpdG9yKTogdm9pZCB7XG4gICAgICAgIGVkaXRvci5kZWxldGVDdXREYXRhKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIG5hdGl2ZSBET00gZWxlbWVudCBmcm9tIGEgU2xhdGUgbm9kZS5cbiAgICAgKi9cblxuICAgIHRvRE9NTm9kZShlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIG5vZGU6IE5vZGUpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGRvbU5vZGUgPSBFZGl0b3IuaXNFZGl0b3Iobm9kZSkgPyBFRElUT1JfVE9fRUxFTUVOVC5nZXQoZWRpdG9yKSA6IE5PREVfVE9fRUxFTUVOVC5nZXQobm9kZSk7XG5cbiAgICAgICAgaWYgKCFkb21Ob2RlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIGEgRE9NIG5vZGUgZnJvbSBTbGF0ZSBub2RlOiAke0pTT04uc3RyaW5naWZ5KG5vZGUpfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRvbU5vZGU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSBuYXRpdmUgRE9NIHNlbGVjdGlvbiBwb2ludCBmcm9tIGEgU2xhdGUgcG9pbnQuXG4gICAgICovXG5cbiAgICB0b0RPTVBvaW50KGVkaXRvcjogQW5ndWxhckVkaXRvciwgcG9pbnQ6IFBvaW50KTogRE9NUG9pbnQge1xuICAgICAgICBjb25zdCBbbm9kZV0gPSBFZGl0b3Iubm9kZShlZGl0b3IsIHBvaW50LnBhdGgpO1xuICAgICAgICBjb25zdCBlbCA9IEFuZ3VsYXJFZGl0b3IudG9ET01Ob2RlKGVkaXRvciwgbm9kZSk7XG4gICAgICAgIGxldCBkb21Qb2ludDogRE9NUG9pbnQgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gYmxvY2sgY2FyZFxuICAgICAgICBjb25zdCBjYXJkVGFyZ2V0QXR0ciA9IGdldENhcmRUYXJnZXRBdHRyaWJ1dGUoZWwpO1xuICAgICAgICBpZiAoY2FyZFRhcmdldEF0dHIpIHtcbiAgICAgICAgICAgIGlmIChwb2ludC5vZmZzZXQgPT09IEZBS0VfTEVGVF9CTE9DS19DQVJEX09GRlNFVCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvck5vZGUgPSBBbmd1bGFyRWRpdG9yLmdldENhcmRDdXJzb3JOb2RlKGVkaXRvciwgbm9kZSwgeyBkaXJlY3Rpb246ICdsZWZ0JyB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2N1cnNvck5vZGUsIDFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3JOb2RlID0gQW5ndWxhckVkaXRvci5nZXRDYXJkQ3Vyc29yTm9kZShlZGl0b3IsIG5vZGUsIHsgZGlyZWN0aW9uOiAncmlnaHQnIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBbY3Vyc29yTm9kZSwgMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSdyZSBpbnNpZGUgYSB2b2lkIG5vZGUsIGZvcmNlIHRoZSBvZmZzZXQgdG8gMCwgb3RoZXJ3aXNlIHRoZSB6ZXJvXG4gICAgICAgIC8vIHdpZHRoIHNwYWNpbmcgY2hhcmFjdGVyIHdpbGwgcmVzdWx0IGluIGFuIGluY29ycmVjdCBvZmZzZXQgb2YgMVxuICAgICAgICBpZiAoRWRpdG9yLnZvaWQoZWRpdG9yLCB7IGF0OiBwb2ludCB9KSkge1xuICAgICAgICAgICAgcG9pbnQgPSB7IHBhdGg6IHBvaW50LnBhdGgsIG9mZnNldDogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIGVhY2ggbGVhZiwgd2UgbmVlZCB0byBpc29sYXRlIGl0cyBjb250ZW50LCB3aGljaCBtZWFucyBmaWx0ZXJpbmdcbiAgICAgICAgLy8gdG8gaXRzIGRpcmVjdCB0ZXh0IGFuZCB6ZXJvLXdpZHRoIHNwYW5zLiAoV2UgaGF2ZSB0byBmaWx0ZXIgb3V0IGFueVxuICAgICAgICAvLyBvdGhlciBzaWJsaW5ncyB0aGF0IG1heSBoYXZlIGJlZW4gcmVuZGVyZWQgYWxvbmdzaWRlIHRoZW0uKVxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IGBbZGF0YS1zbGF0ZS1zdHJpbmddLCBbZGF0YS1zbGF0ZS16ZXJvLXdpZHRoXWA7XG4gICAgICAgIGNvbnN0IHRleHRzID0gQXJyYXkuZnJvbShlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7XG4gICAgICAgIGxldCBzdGFydCA9IDA7XG5cbiAgICAgICAgZm9yIChjb25zdCB0ZXh0IG9mIHRleHRzKSB7XG4gICAgICAgICAgICBjb25zdCBkb21Ob2RlID0gdGV4dC5jaGlsZE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgICAgICBpZiAoZG9tTm9kZSA9PSBudWxsIHx8IGRvbU5vZGUudGV4dENvbnRlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7IGxlbmd0aCB9ID0gZG9tTm9kZS50ZXh0Q29udGVudDtcbiAgICAgICAgICAgIGNvbnN0IGF0dHIgPSB0ZXh0LmdldEF0dHJpYnV0ZSgnZGF0YS1zbGF0ZS1sZW5ndGgnKTtcbiAgICAgICAgICAgIGNvbnN0IHRydWVMZW5ndGggPSBhdHRyID09IG51bGwgPyBsZW5ndGggOiBwYXJzZUludChhdHRyLCAxMCk7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSBzdGFydCArIHRydWVMZW5ndGg7XG5cbiAgICAgICAgICAgIGlmIChwb2ludC5vZmZzZXQgPD0gZW5kKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5taW4obGVuZ3RoLCBNYXRoLm1heCgwLCBwb2ludC5vZmZzZXQgLSBzdGFydCkpO1xuICAgICAgICAgICAgICAgIGRvbVBvaW50ID0gW2RvbU5vZGUsIG9mZnNldF07XG4gICAgICAgICAgICAgICAgLy8gZml4ZWQgY3Vyc29yIHBvc2l0aW9uIGFmdGVyIHplcm8gd2lkdGggY2hhclxuICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPT09IDAgJiYgbGVuZ3RoID09PSAxICYmIGRvbU5vZGUudGV4dENvbnRlbnQgPT09ICdcXHVGRUZGJykge1xuICAgICAgICAgICAgICAgICAgICBkb21Qb2ludCA9IFtkb21Ob2RlLCBvZmZzZXQgKyAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXJ0ID0gZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkb21Qb2ludCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBhIERPTSBwb2ludCBmcm9tIFNsYXRlIHBvaW50OiAke0pTT04uc3RyaW5naWZ5KHBvaW50KX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkb21Qb2ludDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRmluZCBhIG5hdGl2ZSBET00gcmFuZ2UgZnJvbSBhIFNsYXRlIGByYW5nZWAuXG4gICAgICovXG5cbiAgICB0b0RPTVJhbmdlKGVkaXRvcjogQW5ndWxhckVkaXRvciwgcmFuZ2U6IFJhbmdlKTogRE9NUmFuZ2Uge1xuICAgICAgICBjb25zdCB7IGFuY2hvciwgZm9jdXMgfSA9IHJhbmdlO1xuICAgICAgICBjb25zdCBpc0JhY2t3YXJkID0gUmFuZ2UuaXNCYWNrd2FyZChyYW5nZSk7XG4gICAgICAgIGNvbnN0IGRvbUFuY2hvciA9IEFuZ3VsYXJFZGl0b3IudG9ET01Qb2ludChlZGl0b3IsIGFuY2hvcik7XG4gICAgICAgIGNvbnN0IGRvbUZvY3VzID0gUmFuZ2UuaXNDb2xsYXBzZWQocmFuZ2UpID8gZG9tQW5jaG9yIDogQW5ndWxhckVkaXRvci50b0RPTVBvaW50KGVkaXRvciwgZm9jdXMpO1xuXG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IEFuZ3VsYXJFZGl0b3IuZ2V0V2luZG93KGVkaXRvcik7XG4gICAgICAgIGNvbnN0IGRvbVJhbmdlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIGNvbnN0IFtzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0XSA9IGlzQmFja3dhcmQgPyBkb21Gb2N1cyA6IGRvbUFuY2hvcjtcbiAgICAgICAgY29uc3QgW2VuZE5vZGUsIGVuZE9mZnNldF0gPSBpc0JhY2t3YXJkID8gZG9tQW5jaG9yIDogZG9tRm9jdXM7XG5cbiAgICAgICAgLy8gQSBzbGF0ZSBQb2ludCBhdCB6ZXJvLXdpZHRoIExlYWYgYWx3YXlzIGhhcyBhbiBvZmZzZXQgb2YgMCBidXQgYSBuYXRpdmUgRE9NIHNlbGVjdGlvbiBhdFxuICAgICAgICAvLyB6ZXJvLXdpZHRoIG5vZGUgaGFzIGFuIG9mZnNldCBvZiAxIHNvIHdlIGhhdmUgdG8gY2hlY2sgaWYgd2UgYXJlIGluIGEgemVyby13aWR0aCBub2RlIGFuZFxuICAgICAgICAvLyBhZGp1c3QgdGhlIG9mZnNldCBhY2NvcmRpbmdseS5cbiAgICAgICAgY29uc3Qgc3RhcnRFbCA9IChpc0RPTUVsZW1lbnQoc3RhcnROb2RlKSA/IHN0YXJ0Tm9kZSA6IHN0YXJ0Tm9kZS5wYXJlbnRFbGVtZW50KSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgaXNTdGFydEF0WmVyb1dpZHRoID0gISFzdGFydEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zbGF0ZS16ZXJvLXdpZHRoJyk7XG4gICAgICAgIGNvbnN0IGVuZEVsID0gKGlzRE9NRWxlbWVudChlbmROb2RlKSA/IGVuZE5vZGUgOiBlbmROb2RlLnBhcmVudEVsZW1lbnQpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBpc0VuZEF0WmVyb1dpZHRoID0gISFlbmRFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtemVyby13aWR0aCcpO1xuXG4gICAgICAgIGRvbVJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgaXNTdGFydEF0WmVyb1dpZHRoID8gMSA6IHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgZG9tUmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGlzRW5kQXRaZXJvV2lkdGggPyAxIDogZW5kT2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIGRvbVJhbmdlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgU2xhdGUgbm9kZSBmcm9tIGEgbmF0aXZlIERPTSBgZWxlbWVudGAuXG4gICAgICovXG5cbiAgICB0b1NsYXRlTm9kZShlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIGRvbU5vZGU6IERPTU5vZGUpOiBOb2RlIHtcbiAgICAgICAgbGV0IGRvbUVsID0gaXNET01FbGVtZW50KGRvbU5vZGUpID8gZG9tTm9kZSA6IGRvbU5vZGUucGFyZW50RWxlbWVudDtcblxuICAgICAgICBpZiAoZG9tRWwgJiYgIWRvbUVsLmhhc0F0dHJpYnV0ZSgnZGF0YS1zbGF0ZS1ub2RlJykpIHtcbiAgICAgICAgICAgIGRvbUVsID0gZG9tRWwuY2xvc2VzdChgW2RhdGEtc2xhdGUtbm9kZV1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb21FbCA/IEVMRU1FTlRfVE9fTk9ERS5nZXQoZG9tRWwgYXMgSFRNTEVsZW1lbnQpIDogbnVsbDtcblxuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgYSBTbGF0ZSBub2RlIGZyb20gRE9NIG5vZGU6ICR7ZG9tRWx9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB0YXJnZXQgcmFuZ2UgZnJvbSBhIERPTSBgZXZlbnRgLlxuICAgICAqL1xuXG4gICAgZmluZEV2ZW50UmFuZ2UoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBldmVudDogYW55KTogUmFuZ2Uge1xuICAgICAgICBpZiAoJ25hdGl2ZUV2ZW50JyBpbiBldmVudCkge1xuICAgICAgICAgICAgZXZlbnQgPSBldmVudC5uYXRpdmVFdmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSwgdGFyZ2V0IH0gPSBldmVudDtcblxuICAgICAgICBpZiAoeCA9PSBudWxsIHx8IHkgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBhIFNsYXRlIHJhbmdlIGZyb20gYSBET00gZXZlbnQ6ICR7ZXZlbnR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub2RlID0gQW5ndWxhckVkaXRvci50b1NsYXRlTm9kZShlZGl0b3IsIGV2ZW50LnRhcmdldCk7XG4gICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgbm9kZSk7XG5cbiAgICAgICAgLy8gSWYgdGhlIGRyb3AgdGFyZ2V0IGlzIGluc2lkZSBhIHZvaWQgbm9kZSwgbW92ZSBpdCBpbnRvIGVpdGhlciB0aGVcbiAgICAgICAgLy8gbmV4dCBvciBwcmV2aW91cyBub2RlLCBkZXBlbmRpbmcgb24gd2hpY2ggc2lkZSB0aGUgYHhgIGFuZCBgeWBcbiAgICAgICAgLy8gY29vcmRpbmF0ZXMgYXJlIGNsb3Nlc3QgdG8uXG4gICAgICAgIGlmIChFbGVtZW50LmlzRWxlbWVudChub2RlKSAmJiBFZGl0b3IuaXNWb2lkKGVkaXRvciwgbm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCBpc1ByZXYgPSBlZGl0b3IuaXNJbmxpbmUobm9kZSkgPyB4IC0gcmVjdC5sZWZ0IDwgcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAtIHggOiB5IC0gcmVjdC50b3AgPCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC0geTtcblxuICAgICAgICAgICAgY29uc3QgZWRnZSA9IEVkaXRvci5wb2ludChlZGl0b3IsIHBhdGgsIHtcbiAgICAgICAgICAgICAgICBlZGdlOiBpc1ByZXYgPyAnc3RhcnQnIDogJ2VuZCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBpc1ByZXYgPyBFZGl0b3IuYmVmb3JlKGVkaXRvciwgZWRnZSkgOiBFZGl0b3IuYWZ0ZXIoZWRpdG9yLCBlZGdlKTtcblxuICAgICAgICAgICAgaWYgKHBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEVkaXRvci5yYW5nZShlZGl0b3IsIHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVsc2UgcmVzb2x2ZSBhIHJhbmdlIGZyb20gdGhlIGNhcmV0IHBvc2l0aW9uIHdoZXJlIHRoZSBkcm9wIG9jY3VyZWQuXG4gICAgICAgIGxldCBkb21SYW5nZTogRE9NUmFuZ2U7XG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IEFuZ3VsYXJFZGl0b3IuZ2V0V2luZG93KGVkaXRvcik7XG4gICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgfSA9IHdpbmRvdztcblxuICAgICAgICAvLyBDT01QQVQ6IEluIEZpcmVmb3gsIGBjYXJldFJhbmdlRnJvbVBvaW50YCBkb2Vzbid0IGV4aXN0LiAoMjAxNi8wNy8yNSlcbiAgICAgICAgaWYgKGRvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQpIHtcbiAgICAgICAgICAgIGRvbVJhbmdlID0gZG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludCh4LCB5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gKGRvY3VtZW50IGFzIFNhZmVBbnkpLmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQoeCwgeSk7XG5cbiAgICAgICAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIGRvbVJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgICAgICAgICBkb21SYW5nZS5zZXRTdGFydChwb3NpdGlvbi5vZmZzZXROb2RlLCBwb3NpdGlvbi5vZmZzZXQpO1xuICAgICAgICAgICAgICAgIGRvbVJhbmdlLnNldEVuZChwb3NpdGlvbi5vZmZzZXROb2RlLCBwb3NpdGlvbi5vZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkb21SYW5nZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBhIFNsYXRlIHJhbmdlIGZyb20gYSBET00gZXZlbnQ6ICR7ZXZlbnR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNvbHZlIGEgU2xhdGUgcmFuZ2UgZnJvbSB0aGUgRE9NIHJhbmdlLlxuICAgICAgICBjb25zdCByYW5nZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZVJhbmdlKGVkaXRvciwgZG9tUmFuZ2UpO1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfSxcblxuICAgIGlzTGVhZkluRWRpdG9yKGVkaXRvcjogQW5ndWxhckVkaXRvciwgbGVhZk5vZGU6IERPTUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBsZWFmTm9kZS5jbG9zZXN0KCdbZGF0YS1zbGF0ZS1ub2RlPVwidGV4dFwiXScpITtcbiAgICAgICAgY29uc3Qgbm9kZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZU5vZGUoZWRpdG9yLCB0ZXh0Tm9kZSk7XG4gICAgICAgIHJldHVybiBBbmd1bGFyRWRpdG9yLmlzTm9kZUluRWRpdG9yKGVkaXRvciwgbm9kZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSBTbGF0ZSBwb2ludCBmcm9tIGEgRE9NIHNlbGVjdGlvbidzIGBkb21Ob2RlYCBhbmQgYGRvbU9mZnNldGAuXG4gICAgICovXG5cbiAgICB0b1NsYXRlUG9pbnQoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBkb21Qb2ludDogRE9NUG9pbnQpOiBQb2ludCB7XG4gICAgICAgIGNvbnN0IFtkb21Ob2RlXSA9IGRvbVBvaW50O1xuICAgICAgICBjb25zdCBbbmVhcmVzdE5vZGUsIG5lYXJlc3RPZmZzZXRdID0gbm9ybWFsaXplRE9NUG9pbnQoZG9tUG9pbnQpO1xuICAgICAgICBsZXQgcGFyZW50Tm9kZSA9IG5lYXJlc3ROb2RlLnBhcmVudE5vZGUgYXMgRE9NRWxlbWVudDtcbiAgICAgICAgbGV0IHRleHROb2RlOiBET01FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuXG4gICAgICAgIC8vIGJsb2NrIGNhcmRcbiAgICAgICAgY29uc3QgY2FyZFRhcmdldEF0dHIgPSBnZXRDYXJkVGFyZ2V0QXR0cmlidXRlKGRvbU5vZGUpO1xuICAgICAgICBpZiAoY2FyZFRhcmdldEF0dHIpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvbVNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IGlzQmFja3dhcmQgPSBlZGl0b3Iuc2VsZWN0aW9uICYmIFJhbmdlLmlzQmFja3dhcmQoZWRpdG9yLnNlbGVjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBibG9ja0NhcmRFbnRyeSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZUNhcmRFbnRyeShlZGl0b3IsIGRvbU5vZGUpIHx8IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZUNhcmRFbnRyeShlZGl0b3IsIG5lYXJlc3ROb2RlKTtcbiAgICAgICAgICAgIGNvbnN0IFssIGJsb2NrUGF0aF0gPSBibG9ja0NhcmRFbnRyeTtcbiAgICAgICAgICAgIGlmIChkb21TZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNDYXJkTGVmdEJ5VGFyZ2V0QXR0cihjYXJkVGFyZ2V0QXR0cikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcGF0aDogYmxvY2tQYXRoLCBvZmZzZXQ6IC0xIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcGF0aDogYmxvY2tQYXRoLCBvZmZzZXQ6IC0yIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZm9yd2FyZFxuICAgICAgICAgICAgLy8gYW5kIHRvIHRoZSBlbmQgb2YgcHJldmlvdXMgbm9kZVxuICAgICAgICAgICAgaWYgKGlzQ2FyZExlZnRCeVRhcmdldEF0dHIoY2FyZFRhcmdldEF0dHIpICYmICFpc0JhY2t3YXJkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kUGF0aCA9IGJsb2NrUGF0aFtibG9ja1BhdGgubGVuZ3RoIC0gMV0gPD0gMCA/IGJsb2NrUGF0aCA6IFBhdGgucHJldmlvdXMoYmxvY2tQYXRoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gRWRpdG9yLmVuZChlZGl0b3IsIGVuZFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdG8gdGhlIG9mIGN1cnJlbnQgbm9kZVxuICAgICAgICAgICAgaWYgKChpc0NhcmRDZW50ZXJCeVRhcmdldEF0dHIoY2FyZFRhcmdldEF0dHIpIHx8IGlzQ2FyZFJpZ2h0QnlUYXJnZXRBdHRyKGNhcmRUYXJnZXRBdHRyKSkgJiYgIWlzQmFja3dhcmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRWRpdG9yLmVuZChlZGl0b3IsIGJsb2NrUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBiYWNrd2FyZFxuICAgICAgICAgICAgLy8gYW5kIHRvIHRoZSBzdGFydCBvZiBuZXh0IG5vZGVcbiAgICAgICAgICAgIGlmIChpc0NhcmRSaWdodEJ5VGFyZ2V0QXR0cihjYXJkVGFyZ2V0QXR0cikgJiYgaXNCYWNrd2FyZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBQYXRoLm5leHQoYmxvY2tQYXRoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhbmQgdG8gdGhlIHN0YXJ0IG9mIGN1cnJlbnQgbm9kZVxuICAgICAgICAgICAgaWYgKChpc0NhcmRDZW50ZXJCeVRhcmdldEF0dHIoY2FyZFRhcmdldEF0dHIpIHx8IGlzQ2FyZExlZnRCeVRhcmdldEF0dHIoY2FyZFRhcmdldEF0dHIpKSAmJiBpc0JhY2t3YXJkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEVkaXRvci5zdGFydChlZGl0b3IsIGJsb2NrUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgY29uc3Qgdm9pZE5vZGUgPSBwYXJlbnROb2RlLmNsb3Nlc3QoJ1tkYXRhLXNsYXRlLXZvaWQ9XCJ0cnVlXCJdJyk7XG4gICAgICAgICAgICBsZXQgbGVhZk5vZGUgPSBwYXJlbnROb2RlLmNsb3Nlc3QoJ1tkYXRhLXNsYXRlLWxlYWZdJyk7XG4gICAgICAgICAgICBsZXQgZG9tTm9kZTogRE9NRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgaG93IGZhciBpbnRvIHRoZSB0ZXh0IG5vZGUgdGhlIGBuZWFyZXN0Tm9kZWAgaXMsIHNvIHRoYXQgd2VcbiAgICAgICAgICAgIC8vIGNhbiBkZXRlcm1pbmUgd2hhdCB0aGUgb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSB0ZXh0IG5vZGUgaXMuXG4gICAgICAgICAgICBpZiAobGVhZk5vZGUgJiYgQW5ndWxhckVkaXRvci5pc0xlYWZJbkVkaXRvcihlZGl0b3IsIGxlYWZOb2RlKSkge1xuICAgICAgICAgICAgICAgIHRleHROb2RlID0gbGVhZk5vZGUuY2xvc2VzdCgnW2RhdGEtc2xhdGUtbm9kZT1cInRleHRcIl0nKSE7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2luZG93ID0gQW5ndWxhckVkaXRvci5nZXRXaW5kb3coZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KHRleHROb2RlLCAwKTtcbiAgICAgICAgICAgICAgICByYW5nZS5zZXRFbmQobmVhcmVzdE5vZGUsIG5lYXJlc3RPZmZzZXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gcmFuZ2UuY2xvbmVDb250ZW50cygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92YWxzID0gW1xuICAgICAgICAgICAgICAgICAgICAuLi5BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjb250ZW50cy5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zbGF0ZS16ZXJvLXdpZHRoXScpKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoY29udGVudHMucXVlcnlTZWxlY3RvckFsbCgnW2NvbnRlbnRlZGl0YWJsZT1mYWxzZV0nKSlcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgcmVtb3ZhbHMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVsIS5wYXJlbnROb2RlIS5yZW1vdmVDaGlsZChlbCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBDT01QQVQ6IEVkZ2UgaGFzIGEgYnVnIHdoZXJlIFJhbmdlLnByb3RvdHlwZS50b1N0cmluZygpIHdpbGxcbiAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IFxcbiBpbnRvIFxcclxcbi4gVGhlIGJ1ZyBjYXVzZXMgYSBsb29wIHdoZW4gc2xhdGUtcmVhY3RcbiAgICAgICAgICAgICAgICAvLyBhdHRlbXB0cyB0byByZXBvc2l0aW9uIGl0cyBjdXJzb3IgdG8gbWF0Y2ggdGhlIG5hdGl2ZSBwb3NpdGlvbi4gVXNlXG4gICAgICAgICAgICAgICAgLy8gdGV4dENvbnRlbnQubGVuZ3RoIGluc3RlYWQuXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9lbi11cy9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvMTAyOTExMTYvXG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gY29udGVudHMudGV4dENvbnRlbnQhLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBkb21Ob2RlID0gdGV4dE5vZGU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZvaWROb2RlKSB7XG4gICAgICAgICAgICAgICAgLy8gRm9yIHZvaWQgbm9kZXMsIHRoZSBlbGVtZW50IHdpdGggdGhlIG9mZnNldCBrZXkgd2lsbCBiZSBhIGNvdXNpbiwgbm90IGFuXG4gICAgICAgICAgICAgICAgLy8gYW5jZXN0b3IsIHNvIGZpbmQgaXQgYnkgZ29pbmcgZG93biBmcm9tIHRoZSBuZWFyZXN0IHZvaWQgcGFyZW50LlxuICAgICAgICAgICAgICAgIGNvbnN0IHNwYWNlciA9IHZvaWROb2RlLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXNsYXRlLXNwYWNlcj1cInRydWVcIl0nKSE7XG4gICAgICAgICAgICAgICAgbGVhZk5vZGUgPSBzcGFjZXIuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IGxlYWZOb2RlLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICAgICAgICAgIHRleHROb2RlID0gc3BhY2VyO1xuICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBsZWFmTm9kZTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBkb21Ob2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENPTVBBVDogSWYgdGhlIHBhcmVudCBub2RlIGlzIGEgU2xhdGUgemVyby13aWR0aCBzcGFjZSwgZWRpdG9yIGlzXG4gICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSB0ZXh0IG5vZGUgc2hvdWxkIGhhdmUgbm8gY2hhcmFjdGVycy4gSG93ZXZlciwgZHVyaW5nIElNRVxuICAgICAgICAgICAgLy8gY29tcG9zaXRpb24gdGhlIEFTQ0lJIGNoYXJhY3RlcnMgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIHplcm8td2lkdGhcbiAgICAgICAgICAgIC8vIHNwYWNlLCBzbyBzdWJ0cmFjdCAxIGZyb20gdGhlIG9mZnNldCB0byBhY2NvdW50IGZvciB0aGUgemVyby13aWR0aFxuICAgICAgICAgICAgLy8gc3BhY2UgY2hhcmFjdGVyLlxuICAgICAgICAgICAgaWYgKGRvbU5vZGUgJiYgb2Zmc2V0ID09PSBkb21Ob2RlLnRleHRDb250ZW50IS5sZW5ndGggJiYgcGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLmhhc0F0dHJpYnV0ZSgnZGF0YS1zbGF0ZS16ZXJvLXdpZHRoJykpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGV4dE5vZGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgYSBTbGF0ZSBwb2ludCBmcm9tIERPTSBwb2ludDogJHtkb21Qb2ludH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENPTVBBVDogSWYgc29tZW9uZSBpcyBjbGlja2luZyBmcm9tIG9uZSBTbGF0ZSBlZGl0b3IgaW50byBhbm90aGVyLFxuICAgICAgICAvLyB0aGUgc2VsZWN0IGV2ZW50IGZpcmVzIHR3aWNlLCBvbmNlIGZvciB0aGUgb2xkIGVkaXRvcidzIGBlbGVtZW50YFxuICAgICAgICAvLyBmaXJzdCwgYW5kIHRoZW4gYWZ0ZXJ3YXJkcyBmb3IgdGhlIGNvcnJlY3QgYGVsZW1lbnRgLiAoMjAxNy8wMy8wMylcbiAgICAgICAgY29uc3Qgc2xhdGVOb2RlID0gQW5ndWxhckVkaXRvci50b1NsYXRlTm9kZShlZGl0b3IsIHRleHROb2RlISk7XG4gICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgc2xhdGVOb2RlKTtcbiAgICAgICAgcmV0dXJuIHsgcGF0aCwgb2Zmc2V0IH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSBTbGF0ZSByYW5nZSBmcm9tIGEgRE9NIHJhbmdlIG9yIHNlbGVjdGlvbi5cbiAgICAgKi9cblxuICAgIHRvU2xhdGVSYW5nZShlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIGRvbVJhbmdlOiBET01SYW5nZSB8IERPTVN0YXRpY1JhbmdlIHwgRE9NU2VsZWN0aW9uKTogUmFuZ2Uge1xuICAgICAgICBjb25zdCBlbCA9IGlzRE9NU2VsZWN0aW9uKGRvbVJhbmdlKSA/IGRvbVJhbmdlLmFuY2hvck5vZGUgOiBkb21SYW5nZS5zdGFydENvbnRhaW5lcjtcbiAgICAgICAgbGV0IGFuY2hvck5vZGU7XG4gICAgICAgIGxldCBhbmNob3JPZmZzZXQ7XG4gICAgICAgIGxldCBmb2N1c05vZGU7XG4gICAgICAgIGxldCBmb2N1c09mZnNldDtcbiAgICAgICAgbGV0IGlzQ29sbGFwc2VkO1xuXG4gICAgICAgIGlmIChlbCkge1xuICAgICAgICAgICAgaWYgKGlzRE9NU2VsZWN0aW9uKGRvbVJhbmdlKSkge1xuICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBkb21SYW5nZS5hbmNob3JOb2RlO1xuICAgICAgICAgICAgICAgIGFuY2hvck9mZnNldCA9IGRvbVJhbmdlLmFuY2hvck9mZnNldDtcbiAgICAgICAgICAgICAgICBmb2N1c05vZGUgPSBkb21SYW5nZS5mb2N1c05vZGU7XG4gICAgICAgICAgICAgICAgZm9jdXNPZmZzZXQgPSBkb21SYW5nZS5mb2N1c09mZnNldDtcbiAgICAgICAgICAgICAgICAvLyBDT01QQVQ6IFRoZXJlJ3MgYSBidWcgaW4gY2hyb21lIHRoYXQgYWx3YXlzIHJldHVybnMgYHRydWVgIGZvclxuICAgICAgICAgICAgICAgIC8vIGBpc0NvbGxhcHNlZGAgZm9yIGEgU2VsZWN0aW9uIHRoYXQgY29tZXMgZnJvbSBhIFNoYWRvd1Jvb3QuXG4gICAgICAgICAgICAgICAgLy8gKDIwMjAvMDgvMDgpXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ3NTIzXG4gICAgICAgICAgICAgICAgaWYgKElTX0NIUk9NRSAmJiBoYXNTaGFkb3dSb290KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNDb2xsYXBzZWQgPSBkb21SYW5nZS5hbmNob3JOb2RlID09PSBkb21SYW5nZS5mb2N1c05vZGUgJiYgZG9tUmFuZ2UuYW5jaG9yT2Zmc2V0ID09PSBkb21SYW5nZS5mb2N1c09mZnNldDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpc0NvbGxhcHNlZCA9IGRvbVJhbmdlLmlzQ29sbGFwc2VkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IGRvbVJhbmdlLnN0YXJ0Q29udGFpbmVyO1xuICAgICAgICAgICAgICAgIGFuY2hvck9mZnNldCA9IGRvbVJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgICAgIGZvY3VzTm9kZSA9IGRvbVJhbmdlLmVuZENvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICBmb2N1c09mZnNldCA9IGRvbVJhbmdlLmVuZE9mZnNldDtcbiAgICAgICAgICAgICAgICBpc0NvbGxhcHNlZCA9IGRvbVJhbmdlLmNvbGxhcHNlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbmNob3JOb2RlID09IG51bGwgfHwgZm9jdXNOb2RlID09IG51bGwgfHwgYW5jaG9yT2Zmc2V0ID09IG51bGwgfHwgZm9jdXNPZmZzZXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBhIFNsYXRlIHJhbmdlIGZyb20gRE9NIHJhbmdlOiAke2RvbVJhbmdlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ09NUEFUOiBUcmlwbGUtY2xpY2tpbmcgYSB3b3JkIGluIGNocm9tZSB3aWxsIHNvbWV0aW1lcyBwbGFjZSB0aGUgZm9jdXNcbiAgICAgICAgLy8gaW5zaWRlIGEgYGNvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJgIERPTSBub2RlIGZvbGxvd2luZyB0aGUgd29yZCwgd2hpY2hcbiAgICAgICAgLy8gd2lsbCBjYXVzZSBgdG9TbGF0ZVBvaW50YCB0byB0aHJvdyBhbiBlcnJvci4gKDIwMjMvMDMvMDcpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICdnZXRBdHRyaWJ1dGUnIGluIGZvY3VzTm9kZSAmJlxuICAgICAgICAgICAgKGZvY3VzTm9kZSBhcyBIVE1MRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSA9PT0gJ2ZhbHNlJyAmJlxuICAgICAgICAgICAgKGZvY3VzTm9kZSBhcyBIVE1MRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkYXRhLXNsYXRlLXZvaWQnKSAhPT0gJ3RydWUnXG4gICAgICAgICkge1xuICAgICAgICAgICAgZm9jdXNOb2RlID0gYW5jaG9yTm9kZTtcbiAgICAgICAgICAgIGZvY3VzT2Zmc2V0ID0gYW5jaG9yTm9kZS50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbmNob3IgPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVQb2ludChlZGl0b3IsIFthbmNob3JOb2RlLCBhbmNob3JPZmZzZXRdKTtcbiAgICAgICAgY29uc3QgZm9jdXMgPSBpc0NvbGxhcHNlZCA/IGFuY2hvciA6IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZVBvaW50KGVkaXRvciwgW2ZvY3VzTm9kZSwgZm9jdXNPZmZzZXRdKTtcblxuICAgICAgICBsZXQgcmFuZ2U6IFJhbmdlID0geyBhbmNob3I6IGFuY2hvciBhcyBQb2ludCwgZm9jdXM6IGZvY3VzIGFzIFBvaW50IH07XG4gICAgICAgIC8vIGlmIHRoZSBzZWxlY3Rpb24gaXMgYSBoYW5naW5nIHJhbmdlIHRoYXQgZW5kcyBpbiBhIHZvaWRcbiAgICAgICAgLy8gYW5kIHRoZSBET00gZm9jdXMgaXMgYW4gRWxlbWVudFxuICAgICAgICAvLyAobWVhbmluZyB0aGF0IHRoZSBzZWxlY3Rpb24gZW5kcyBiZWZvcmUgdGhlIGVsZW1lbnQpXG4gICAgICAgIC8vIHVuaGFuZyB0aGUgcmFuZ2UgdG8gYXZvaWQgbWlzdGFrZW5seSBpbmNsdWRpbmcgdGhlIHZvaWRcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgUmFuZ2UuaXNFeHBhbmRlZChyYW5nZSkgJiZcbiAgICAgICAgICAgIFJhbmdlLmlzRm9yd2FyZChyYW5nZSkgJiZcbiAgICAgICAgICAgIGlzRE9NRWxlbWVudChmb2N1c05vZGUpICYmXG4gICAgICAgICAgICBFZGl0b3Iudm9pZChlZGl0b3IsIHsgYXQ6IHJhbmdlLmZvY3VzLCBtb2RlOiAnaGlnaGVzdCcgfSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByYW5nZSA9IEVkaXRvci51bmhhbmdSYW5nZShlZGl0b3IsIHJhbmdlLCB7IHZvaWRzOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH0sXG5cbiAgICBpc0xlYWZCbG9jayhlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnQuaXNFbGVtZW50KG5vZGUpICYmICFlZGl0b3IuaXNJbmxpbmUobm9kZSkgJiYgRWRpdG9yLmhhc0lubGluZXMoZWRpdG9yLCBub2RlKTtcbiAgICB9LFxuXG4gICAgaXNCbG9ja0NhcmRMZWZ0Q3Vyc29yKGVkaXRvcjogQW5ndWxhckVkaXRvcikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5hbmNob3Iub2Zmc2V0ID09PSBGQUtFX0xFRlRfQkxPQ0tfQ0FSRF9PRkZTRVQgJiYgZWRpdG9yLnNlbGVjdGlvbi5mb2N1cy5vZmZzZXQgPT09IEZBS0VfTEVGVF9CTE9DS19DQVJEX09GRlNFVFxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICBpc0Jsb2NrQ2FyZFJpZ2h0Q3Vyc29yKGVkaXRvcjogQW5ndWxhckVkaXRvcikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5hbmNob3Iub2Zmc2V0ID09PSBGQUtFX1JJR0hUX0JMT0NLX0NBUkRfT0ZGU0VUICYmXG4gICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLmZvY3VzLm9mZnNldCA9PT0gRkFLRV9SSUdIVF9CTE9DS19DQVJEX09GRlNFVFxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICBnZXRDYXJkQ3Vyc29yTm9kZShcbiAgICAgICAgZWRpdG9yOiBBbmd1bGFyRWRpdG9yLFxuICAgICAgICBibG9ja0NhcmROb2RlOiBOb2RlLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCcgfCAnY2VudGVyJztcbiAgICAgICAgfVxuICAgICkge1xuICAgICAgICBjb25zdCBibG9ja0NhcmRFbGVtZW50ID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUoZWRpdG9yLCBibG9ja0NhcmROb2RlKTtcbiAgICAgICAgY29uc3QgY2FyZENlbnRlciA9IGJsb2NrQ2FyZEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZGlyZWN0aW9uID09PSAnbGVmdCcgPyBjYXJkQ2VudGVyLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuZmlyc3RDaGlsZCA6IGNhcmRDZW50ZXIubmV4dEVsZW1lbnRTaWJsaW5nLmZpcnN0Q2hpbGQ7XG4gICAgfSxcblxuICAgIHRvU2xhdGVDYXJkRW50cnkoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBub2RlOiBET01Ob2RlKTogTm9kZUVudHJ5IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG5vZGUucGFyZW50RWxlbWVudC5jbG9zZXN0KCcuc2xhdGUtYmxvY2stY2FyZCcpPy5xdWVyeVNlbGVjdG9yKCdbY2FyZC10YXJnZXQ9XCJjYXJkLWNlbnRlclwiXScpLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICBjb25zdCBzbGF0ZU5vZGUgPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVOb2RlKGVkaXRvciwgZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgc2xhdGVOb2RlKTtcbiAgICAgICAgcmV0dXJuIFtzbGF0ZU5vZGUsIHBhdGhdO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBtb3ZlIG5hdGl2ZSBzZWxlY3Rpb24gdG8gY2FyZC1sZWZ0IG9yIGNhcmQtcmlnaHRcbiAgICAgKiBAcGFyYW0gZWRpdG9yXG4gICAgICogQHBhcmFtIGJsb2NrQ2FyZE5vZGVcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqL1xuICAgIG1vdmVCbG9ja0NhcmQoXG4gICAgICAgIGVkaXRvcjogQW5ndWxhckVkaXRvcixcbiAgICAgICAgYmxvY2tDYXJkTm9kZTogTm9kZSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnO1xuICAgICAgICB9XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGN1cnNvck5vZGUgPSBBbmd1bGFyRWRpdG9yLmdldENhcmRDdXJzb3JOb2RlKGVkaXRvciwgYmxvY2tDYXJkTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IEFuZ3VsYXJFZGl0b3IuZ2V0V2luZG93KGVkaXRvcik7XG4gICAgICAgIGNvbnN0IGRvbVNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgZG9tU2VsZWN0aW9uLnNldEJhc2VBbmRFeHRlbnQoY3Vyc29yTm9kZSwgMSwgY3Vyc29yTm9kZSwgMSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIG1vdmUgc2xhdGUgc2VsZWN0aW9uIHRvIGNhcmQtbGVmdCBvciBjYXJkLXJpZ2h0XG4gICAgICogQHBhcmFtIGVkaXRvclxuICAgICAqIEBwYXJhbSBwYXRoXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICBtb3ZlQmxvY2tDYXJkQ3Vyc29yKFxuICAgICAgICBlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsXG4gICAgICAgIHBhdGg6IFBhdGgsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JztcbiAgICAgICAgfVxuICAgICkge1xuICAgICAgICBjb25zdCBjdXJzb3IgPSB7XG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgb2Zmc2V0OiBvcHRpb25zLmRpcmVjdGlvbiA9PT0gJ2xlZnQnID8gRkFLRV9MRUZUX0JMT0NLX0NBUkRfT0ZGU0VUIDogRkFLRV9SSUdIVF9CTE9DS19DQVJEX09GRlNFVFxuICAgICAgICB9O1xuICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIHsgYW5jaG9yOiBjdXJzb3IsIGZvY3VzOiBjdXJzb3IgfSk7XG4gICAgfSxcblxuICAgIGhhc1JhbmdlKGVkaXRvcjogQW5ndWxhckVkaXRvciwgcmFuZ2U6IFJhbmdlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgYW5jaG9yLCBmb2N1cyB9ID0gcmFuZ2U7XG4gICAgICAgIHJldHVybiBFZGl0b3IuaGFzUGF0aChlZGl0b3IsIGFuY2hvci5wYXRoKSAmJiBFZGl0b3IuaGFzUGF0aChlZGl0b3IsIGZvY3VzLnBhdGgpO1xuICAgIH1cbn07XG4iXX0=