@elderbyte/ngx-starter 15.3.5 → 15.4.0

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 (37) hide show
  1. package/esm2020/lib/common/data/data-context/data-context-active-page.mjs +2 -2
  2. package/esm2020/lib/common/data/data-context/data-context-base.mjs +46 -27
  3. package/esm2020/lib/common/data/data-context/data-context-builder.mjs +9 -8
  4. package/esm2020/lib/common/data/data-context/data-context-continuable-paged.mjs +7 -8
  5. package/esm2020/lib/common/data/data-context/data-context-continuable-token.mjs +2 -2
  6. package/esm2020/lib/common/data/data-context/data-context-life-cycle-binding.mjs +4 -2
  7. package/esm2020/lib/common/data/data-context/data-context-source-event-binding.mjs +46 -0
  8. package/esm2020/lib/common/data/data-context/data-context.mjs +1 -1
  9. package/esm2020/lib/common/data/data-context/indexed-entities.mjs +143 -0
  10. package/esm2020/lib/common/data/data-context/public_api.mjs +3 -2
  11. package/esm2020/lib/common/data/datasource/data-source-base.mjs +38 -0
  12. package/esm2020/lib/common/data/datasource/data-source-change-event.mjs +24 -0
  13. package/esm2020/lib/common/data/datasource/data-source.mjs +1 -1
  14. package/esm2020/lib/common/data/datasource/local/local-list-data-source.mjs +11 -19
  15. package/esm2020/lib/common/data/datasource/local/local-paged-data-source.mjs +8 -8
  16. package/esm2020/lib/common/data/datasource/public_api.mjs +3 -1
  17. package/esm2020/lib/common/data/datasource/rest/rest-client.mjs +23 -38
  18. package/fesm2015/elderbyte-ngx-starter.mjs +408 -179
  19. package/fesm2015/elderbyte-ngx-starter.mjs.map +1 -1
  20. package/fesm2020/elderbyte-ngx-starter.mjs +407 -179
  21. package/fesm2020/elderbyte-ngx-starter.mjs.map +1 -1
  22. package/lib/common/data/data-context/data-context-base.d.ts +12 -3
  23. package/lib/common/data/data-context/data-context-builder.d.ts +2 -1
  24. package/lib/common/data/data-context/data-context-source-event-binding.d.ts +31 -0
  25. package/lib/common/data/data-context/data-context.d.ts +14 -2
  26. package/lib/common/data/data-context/indexed-entities.d.ts +72 -0
  27. package/lib/common/data/data-context/public_api.d.ts +2 -1
  28. package/lib/common/data/datasource/data-source-base.d.ts +38 -0
  29. package/lib/common/data/datasource/data-source-change-event.d.ts +13 -0
  30. package/lib/common/data/datasource/data-source.d.ts +2 -1
  31. package/lib/common/data/datasource/local/local-list-data-source.d.ts +3 -7
  32. package/lib/common/data/datasource/local/local-paged-data-source.d.ts +5 -3
  33. package/lib/common/data/datasource/public_api.d.ts +2 -0
  34. package/lib/common/data/datasource/rest/rest-client.d.ts +10 -18
  35. package/package.json +1 -1
  36. package/esm2020/lib/common/data/data-context/data-context-source-auto-reloader.mjs +0 -12
  37. package/lib/common/data/data-context/data-context-source-auto-reloader.d.ts +0 -8
@@ -98,7 +98,7 @@ export class DataContextActivePage extends DataContextBase {
98
98
  subject.next(success);
99
99
  this.onIdle();
100
100
  }, err => {
101
- this.setData([]);
101
+ this.clearData();
102
102
  this.actlogger.error('Failed to query data', err);
103
103
  subject.error(err);
104
104
  this.onError(err);
@@ -127,4 +127,4 @@ export class DataContextActivePage extends DataContextBase {
127
127
  super.onFiltersChanged(filters);
128
128
  }
129
129
  }
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1jb250ZXh0LWFjdGl2ZS1wYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tbW9uL2RhdGEvZGF0YS1jb250ZXh0L2RhdGEtY29udGV4dC1hY3RpdmUtcGFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFPLFFBQVEsRUFBRSxXQUFXLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFcEQsT0FBTyxFQUFTLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBQyxlQUFlLEVBQWMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUtyQyxNQUFNLE9BQU8scUJBQXlCLFNBQVEsZUFBa0I7SUF3QjlEOzs7O2dGQUk0RTtJQUc1RSxZQUNFLFVBQStCLEVBQy9CLFFBQWdCLEVBQ2hCLE9BQTJCLEVBQzNCLFVBQWdDLEVBQ2hDLFNBQThDO1FBRTlDLEtBQUssQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQXBDcEQ7Ozs7b0ZBSTRFO1FBRTNELGNBQVMsR0FBVyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUErQmxGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxXQUFXLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUU1RSxJQUFXLFVBQVU7UUFDbkIsT0FBNEIsS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBVyxJQUFJ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QyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEIsQ0FBQyxFQUFFLEdBQUcsRUFBRTtZQUNOLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUVQLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFNUU7O09BRUc7SUFDTyxjQUFjLENBQUMsS0FBYTtRQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ08sZ0JBQWdCLENBQUMsT0FBaUI7UUFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixLQUFLLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEYXRhQ29udGV4dEJhc2V9IGZyb20gJy4vZGF0YS1jb250ZXh0LWJhc2UnO1xuaW1wb3J0IHtQYWdlLCBQYWdlYWJsZSwgUGFnZVJlcXVlc3R9IGZyb20gJy4uL3BhZ2UnO1xuaW1wb3J0IHtGaWx0ZXJ9IGZyb20gJy4uL2ZpbHRlcnMvZmlsdGVyJztcbmltcG9ydCB7TG9nZ2VyLCBMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Zmlyc3R9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SURhdGFDb250ZXh0QWN0aXZlUGFnZX0gZnJvbSAnLi9kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtTb3J0fSBmcm9tICcuLi9zb3J0JztcbmltcG9ydCB7SVBhZ2VkRGF0YVNvdXJjZX0gZnJvbSAnLi4vZGF0YXNvdXJjZS9kYXRhLXNvdXJjZSc7XG5cbmV4cG9ydCBjbGFzcyBEYXRhQ29udGV4dEFjdGl2ZVBhZ2U8VD4gZXh0ZW5kcyBEYXRhQ29udGV4dEJhc2U8VD4gaW1wbGVtZW50cyBJRGF0YUNvbnRleHRBY3RpdmVQYWdlPFQ+IHtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IGFjdGxvZ2dlcjogTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlOiBCZWhhdmlvclN1YmplY3Q8UGFnZVJlcXVlc3Q+O1xuXG4gIC8qKlxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIGV2ZW50IHdoZW4gdGhlIGFjdGl2ZSBwYWdlIGhhcyBjaGFuZ2VkLlxuICAgKiBUaGlzIHdpbGwgdHJpZ2dlciBhIHBhZ2UgcmVsb2FkLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWN0aXZlUGFnZUNoYW5nZWRTdWI6IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogU3Vic2NyaXB0aW9uIG9mIGFuIGFjdHVhbCBwYWdlIGxvYWQgaHR0cCByZXF1ZXN0LlxuICAgKiBJZiB0aGlzIGlzIGNsb3NlZCwgaXQgd2lsbCBjYW5jZWwgdGhlIGh0dHAgcmVxdWVzdC5cbiAgICovXG4gIHByaXZhdGUgX2FjdGl2ZVBhZ2VMb2FkOiBTdWJzY3JpcHRpb247XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBkYXRhU291cmNlOiBJUGFnZWREYXRhU291cmNlPFQ+LFxuICAgIHBhZ2VTaXplOiBudW1iZXIsXG4gICAgaW5kZXhGbjogKChpdGVtOiBUKSA9PiBhbnkpLFxuICAgIGxvY2FsQXBwbHk6ICgoZGF0YTogVFtdKSA9PiBUW10pLFxuICAgIGxvY2FsU29ydDogKChkYXRhOiBUW10sIHNvcnRzOiBTb3J0W10pID0+IFRbXSlcbiAgKSB7XG4gICAgc3VwZXIoZGF0YVNvdXJjZSwgaW5kZXhGbiwgbG9jYWxBcHBseSwgbG9jYWxTb3J0KTtcbiAgICB0aGlzLl9wYWdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdlUmVxdWVzdD4obmV3IFBhZ2VSZXF1ZXN0KDAsIHBhZ2VTaXplKSk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKTogSVBhZ2VkRGF0YVNvdXJjZTxUPiB7XG4gICAgcmV0dXJuIDxJUGFnZWREYXRhU291cmNlPFQ+PnN1cGVyLmRhdGFTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhZ2UoKTogT2JzZXJ2YWJsZTxQYWdlUmVxdWVzdD4ge1xuICAgIHJldHVybiB0aGlzLl9wYWdlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBwYWdlU25hcHNob3QoKTogUGFnZVJlcXVlc3Qge1xuICAgIHJldHVybiB0aGlzLl9wYWdlLmdldFZhbHVlKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogU2V0IHRoZSBjdXJyZW50IHBhZ2UgaW5kZXggYW5kIHJlbG9hZC5cbiAgICogQHBhcmFtIHBhZ2VJbmRleFxuICAgKi9cbiAgcHVibGljIHNldEFjdGl2ZUluZGV4KHBhZ2VJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRBY3RpdmVQYWdlKG5ldyBQYWdlUmVxdWVzdChwYWdlSW5kZXgsIHRoaXMucGFnZVNuYXBzaG90LnNpemUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjdXJyZW50IHBhZ2UgaW5kZXggLyBzaXplIGFuZCByZWxvYWQuXG4gICAqL1xuICBwdWJsaWMgc2V0QWN0aXZlUGFnZShyZXF1ZXN0OiBQYWdlUmVxdWVzdCkge1xuXG4gICAgdGhpcy5hY3Rsb2dnZXIudHJhY2UoJ1NldHRpbmcgcGFnZSB0byAnLCByZXF1ZXN0KTtcblxuICAgIGlmICghcmVxdWVzdCkgeyB0aHJvdyBuZXcgRXJyb3IoJ1NldHRpbmcgcGFnZSBQYWdlUmVxdWVzdCBtdXN0IG5vdCBiZSBudWxsIScpOyB9XG5cbiAgICBsZXQgaGFzQ2hhbmdlID0gZmFsc2U7XG5cbiAgICBjb25zdCBwYWdlID0gdGhpcy5wYWdlU25hcHNob3Q7XG5cbiAgICBpZiAocGFnZS5pbmRleCAhPT0gcmVxdWVzdC5pbmRleCkge1xuICAgICAgaGFzQ2hhbmdlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHBhZ2Uuc2l6ZSAhPT0gcmVxdWVzdC5zaXplKSB7XG4gICAgICBoYXNDaGFuZ2UgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChoYXNDaGFuZ2UpIHtcbiAgICAgIHRoaXMuX3BhZ2UubmV4dChyZXF1ZXN0KTtcbiAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIHN1cGVyLmNsb3NlKCk7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZVBhZ2VDaGFuZ2VkU3ViKSB7XG4gICAgICB0aGlzLl9hY3RpdmVQYWdlQ2hhbmdlZFN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByb3RlY3RlZCBjbGVhckFsbCgpOiB2b2lkIHtcbiAgICBzdXBlci5jbGVhckFsbCgpO1xuICAgIHRoaXMuc2V0QWN0aXZlSW5kZXgoMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVsb2FkSW50ZXJuYWwoKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIGlmICh0aGlzLl9hY3RpdmVQYWdlTG9hZCkge1xuICAgICAgLy8gQ2FuY2VsIHByZXZpb3VzIHBlbmRpbmcgcmVxdWVzdFxuICAgICAgdGhpcy5fYWN0aXZlUGFnZUxvYWQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gICAgdGhpcy5vbkxvYWRpbmcoKTtcbiAgICBjb25zdCBwYWdlID0gdGhpcy5wYWdlU25hcHNob3Q7XG4gICAgY29uc3QgcGFnZVJlcXVlc3QgPSBuZXcgUGFnZWFibGUocGFnZS5pbmRleCwgcGFnZS5zaXplLCB0aGlzLnNvcnQuc29ydHNTbmFwc2hvdCk7XG5cblxuICAgIHRoaXMuX2FjdGl2ZVBhZ2VMb2FkID0gdGhpcy5kYXRhU291cmNlLmZpbmRBbGxQYWdlZChwYWdlUmVxdWVzdCwgdGhpcy5maWx0ZXIuZmlsdGVyc1NuYXBzaG90KVxuICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIHN1Y2Nlc3MgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0VG90YWwoc3VjY2Vzcy50b3RhbEVsZW1lbnRzKTtcbiAgICAgICAgICB0aGlzLnNldERhdGEoc3VjY2Vzcy5jb250ZW50KTtcbiAgICAgICAgICBzdWJqZWN0Lm5leHQoc3VjY2Vzcyk7XG4gICAgICAgICAgdGhpcy5vbklkbGUoKTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICB0aGlzLnNldERhdGEoW10pO1xuICAgICAgICAgIHRoaXMuYWN0bG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcXVlcnkgZGF0YScsIGVycik7XG4gICAgICAgICAgc3ViamVjdC5lcnJvcihlcnIpO1xuICAgICAgICAgIHRoaXMub25FcnJvcihlcnIpO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbklkbGUoKTtcbiAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gc3ViamVjdC5waXBlKGZpcnN0KCkpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEV2ZW50IGhhbmRsZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIHRoZSBzb3J0cyBwcm9wZXJ0eSBoYXMgY2hhbmdlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvblNvcnRzQ2hhbmdlZChzb3J0czogU29ydFtdKTogdm9pZCB7XG4gICAgdGhpcy5zZXRBY3RpdmVJbmRleCgwKTtcbiAgICBzdXBlci5vblNvcnRzQ2hhbmdlZChzb3J0cyk7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gdGhlIGZpbHRlcnNTbmFwc2hvdCBwcm9wZXJ0eSBoYXMgY2hhbmdlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvbkZpbHRlcnNDaGFuZ2VkKGZpbHRlcnM6IEZpbHRlcltdKTogdm9pZCB7XG4gICAgdGhpcy5zZXRBY3RpdmVJbmRleCgwKTtcbiAgICBzdXBlci5vbkZpbHRlcnNDaGFuZ2VkKGZpbHRlcnMpO1xuICB9XG59XG5cbiJdfQ==
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1jb250ZXh0LWFjdGl2ZS1wYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tbW9uL2RhdGEvZGF0YS1jb250ZXh0L2RhdGEtY29udGV4dC1hY3RpdmUtcGFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFPLFFBQVEsRUFBRSxXQUFXLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFcEQsT0FBTyxFQUFTLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBQyxlQUFlLEVBQWMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUtyQyxNQUFNLE9BQU8scUJBQXlCLFNBQVEsZUFBa0I7SUF3QjlEOzs7O2dGQUk0RTtJQUc1RSxZQUNFLFVBQStCLEVBQy9CLFFBQWdCLEVBQ2hCLE9BQTJCLEVBQzNCLFVBQWdDLEVBQ2hDLFNBQThDO1FBRTlDLEtBQUssQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQXBDcEQ7Ozs7b0ZBSTRFO1FBRTNELGNBQVMsR0FBVyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUErQmxGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxXQUFXLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUU1RSxJQUFXLFVBQVU7UUFDbkIsT0FBNEIsS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBVyxJQUFJ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QUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQixDQUFDLEVBQUUsR0FBRyxFQUFFO1lBQ04sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRVAsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUU1RTs7T0FFRztJQUNPLGNBQWMsQ0FBQyxLQUFhO1FBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxnQkFBZ0IsQ0FBQyxPQUFpQjtRQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RhdGFDb250ZXh0QmFzZX0gZnJvbSAnLi9kYXRhLWNvbnRleHQtYmFzZSc7XG5pbXBvcnQge1BhZ2UsIFBhZ2VhYmxlLCBQYWdlUmVxdWVzdH0gZnJvbSAnLi4vcGFnZSc7XG5pbXBvcnQge0ZpbHRlcn0gZnJvbSAnLi4vZmlsdGVycy9maWx0ZXInO1xuaW1wb3J0IHtMb2dnZXIsIExvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaXJzdH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtJRGF0YUNvbnRleHRBY3RpdmVQYWdlfSBmcm9tICcuL2RhdGEtY29udGV4dCc7XG5pbXBvcnQge1NvcnR9IGZyb20gJy4uL3NvcnQnO1xuaW1wb3J0IHtJUGFnZWREYXRhU291cmNlfSBmcm9tICcuLi9kYXRhc291cmNlL2RhdGEtc291cmNlJztcblxuZXhwb3J0IGNsYXNzIERhdGFDb250ZXh0QWN0aXZlUGFnZTxUPiBleHRlbmRzIERhdGFDb250ZXh0QmFzZTxUPiBpbXBsZW1lbnRzIElEYXRhQ29udGV4dEFjdGl2ZVBhZ2U8VD4ge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0bG9nZ2VyOiBMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2U6IEJlaGF2aW9yU3ViamVjdDxQYWdlUmVxdWVzdD47XG5cbiAgLyoqXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgZXZlbnQgd2hlbiB0aGUgYWN0aXZlIHBhZ2UgaGFzIGNoYW5nZWQuXG4gICAqIFRoaXMgd2lsbCB0cmlnZ2VyIGEgcGFnZSByZWxvYWQuXG4gICAqL1xuICBwcml2YXRlIF9hY3RpdmVQYWdlQ2hhbmdlZFN1YjogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBTdWJzY3JpcHRpb24gb2YgYW4gYWN0dWFsIHBhZ2UgbG9hZCBodHRwIHJlcXVlc3QuXG4gICAqIElmIHRoaXMgaXMgY2xvc2VkLCBpdCB3aWxsIGNhbmNlbCB0aGUgaHR0cCByZXF1ZXN0LlxuICAgKi9cbiAgcHJpdmF0ZSBfYWN0aXZlUGFnZUxvYWQ6IFN1YnNjcmlwdGlvbjtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGRhdGFTb3VyY2U6IElQYWdlZERhdGFTb3VyY2U8VD4sXG4gICAgcGFnZVNpemU6IG51bWJlcixcbiAgICBpbmRleEZuOiAoKGl0ZW06IFQpID0+IGFueSksXG4gICAgbG9jYWxBcHBseTogKChkYXRhOiBUW10pID0+IFRbXSksXG4gICAgbG9jYWxTb3J0OiAoKGRhdGE6IFRbXSwgc29ydHM6IFNvcnRbXSkgPT4gVFtdKVxuICApIHtcbiAgICBzdXBlcihkYXRhU291cmNlLCBpbmRleEZuLCBsb2NhbEFwcGx5LCBsb2NhbFNvcnQpO1xuICAgIHRoaXMuX3BhZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhZ2VSZXF1ZXN0PihuZXcgUGFnZVJlcXVlc3QoMCwgcGFnZVNpemUpKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBnZXQgZGF0YVNvdXJjZSgpOiBJUGFnZWREYXRhU291cmNlPFQ+IHtcbiAgICByZXR1cm4gPElQYWdlZERhdGFTb3VyY2U8VD4+c3VwZXIuZGF0YVNvdXJjZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFnZSgpOiBPYnNlcnZhYmxlPFBhZ2VSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2UuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhZ2VTbmFwc2hvdCgpOiBQYWdlUmVxdWVzdCB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2UuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1cnJlbnQgcGFnZSBpbmRleCBhbmQgcmVsb2FkLlxuICAgKiBAcGFyYW0gcGFnZUluZGV4XG4gICAqL1xuICBwdWJsaWMgc2V0QWN0aXZlSW5kZXgocGFnZUluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnNldEFjdGl2ZVBhZ2UobmV3IFBhZ2VSZXF1ZXN0KHBhZ2VJbmRleCwgdGhpcy5wYWdlU25hcHNob3Quc2l6ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGN1cnJlbnQgcGFnZSBpbmRleCAvIHNpemUgYW5kIHJlbG9hZC5cbiAgICovXG4gIHB1YmxpYyBzZXRBY3RpdmVQYWdlKHJlcXVlc3Q6IFBhZ2VSZXF1ZXN0KSB7XG5cbiAgICB0aGlzLmFjdGxvZ2dlci50cmFjZSgnU2V0dGluZyBwYWdlIHRvICcsIHJlcXVlc3QpO1xuXG4gICAgaWYgKCFyZXF1ZXN0KSB7IHRocm93IG5ldyBFcnJvcignU2V0dGluZyBwYWdlIFBhZ2VSZXF1ZXN0IG11c3Qgbm90IGJlIG51bGwhJyk7IH1cblxuICAgIGxldCBoYXNDaGFuZ2UgPSBmYWxzZTtcblxuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VTbmFwc2hvdDtcblxuICAgIGlmIChwYWdlLmluZGV4ICE9PSByZXF1ZXN0LmluZGV4KSB7XG4gICAgICBoYXNDaGFuZ2UgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAocGFnZS5zaXplICE9PSByZXF1ZXN0LnNpemUpIHtcbiAgICAgIGhhc0NoYW5nZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGhhc0NoYW5nZSkge1xuICAgICAgdGhpcy5fcGFnZS5uZXh0KHJlcXVlc3QpO1xuICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgc3VwZXIuY2xvc2UoKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlUGFnZUNoYW5nZWRTdWIpIHtcbiAgICAgIHRoaXMuX2FjdGl2ZVBhZ2VDaGFuZ2VkU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJvdGVjdGVkIGNsZWFyQWxsKCk6IHZvaWQge1xuICAgIHN1cGVyLmNsZWFyQWxsKCk7XG4gICAgdGhpcy5zZXRBY3RpdmVJbmRleCgwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWxvYWRJbnRlcm5hbCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgaWYgKHRoaXMuX2FjdGl2ZVBhZ2VMb2FkKSB7XG4gICAgICAvLyBDYW5jZWwgcHJldmlvdXMgcGVuZGluZyByZXF1ZXN0XG4gICAgICB0aGlzLl9hY3RpdmVQYWdlTG9hZC51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgICB0aGlzLm9uTG9hZGluZygpO1xuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VTbmFwc2hvdDtcbiAgICBjb25zdCBwYWdlUmVxdWVzdCA9IG5ldyBQYWdlYWJsZShwYWdlLmluZGV4LCBwYWdlLnNpemUsIHRoaXMuc29ydC5zb3J0c1NuYXBzaG90KTtcblxuXG4gICAgdGhpcy5fYWN0aXZlUGFnZUxvYWQgPSB0aGlzLmRhdGFTb3VyY2UuZmluZEFsbFBhZ2VkKHBhZ2VSZXF1ZXN0LCB0aGlzLmZpbHRlci5maWx0ZXJzU25hcHNob3QpXG4gICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgc3VjY2VzcyA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRUb3RhbChzdWNjZXNzLnRvdGFsRWxlbWVudHMpO1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShzdWNjZXNzLmNvbnRlbnQpO1xuICAgICAgICAgIHN1YmplY3QubmV4dChzdWNjZXNzKTtcbiAgICAgICAgICB0aGlzLm9uSWRsZSgpO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKCk7XG4gICAgICAgICAgdGhpcy5hY3Rsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBxdWVyeSBkYXRhJywgZXJyKTtcbiAgICAgICAgICBzdWJqZWN0LmVycm9yKGVycik7XG4gICAgICAgICAgdGhpcy5vbkVycm9yKGVycik7XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICB0aGlzLm9uSWRsZSgpO1xuICAgICAgICB9KTtcblxuICAgIHJldHVybiBzdWJqZWN0LnBpcGUoZmlyc3QoKSk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRXZlbnQgaGFuZGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogT2NjdXJzIHdoZW4gdGhlIHNvcnRzIHByb3BlcnR5IGhhcyBjaGFuZ2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIG9uU29ydHNDaGFuZ2VkKHNvcnRzOiBTb3J0W10pOiB2b2lkIHtcbiAgICB0aGlzLnNldEFjdGl2ZUluZGV4KDApO1xuICAgIHN1cGVyLm9uU29ydHNDaGFuZ2VkKHNvcnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgZmlsdGVyc1NuYXBzaG90IHByb3BlcnR5IGhhcyBjaGFuZ2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIG9uRmlsdGVyc0NoYW5nZWQoZmlsdGVyczogRmlsdGVyW10pOiB2b2lkIHtcbiAgICB0aGlzLnNldEFjdGl2ZUluZGV4KDApO1xuICAgIHN1cGVyLm9uRmlsdGVyc0NoYW5nZWQoZmlsdGVycyk7XG4gIH1cbn1cblxuIl19
@@ -6,6 +6,7 @@ import { FilterContext } from '../filters/filter-context';
6
6
  import { DataContextSnapshot } from './data-context';
7
7
  import { catchError, debounceTime, filter, map, takeUntil } from 'rxjs/operators';
8
8
  import { SortContext } from '../sort-context';
9
+ import { IndexedEntities } from './indexed-entities';
9
10
  export class DataContextBase extends DataSource {
10
11
  /***************************************************************************
11
12
  * *
@@ -25,15 +26,15 @@ export class DataContextBase extends DataSource {
25
26
  this.baselog = LoggerFactory.getLogger('DataContextBase');
26
27
  this._filter = new FilterContext();
27
28
  this._sort = new SortContext();
28
- this._data = new BehaviorSubject([]);
29
29
  this._total = new BehaviorSubject(undefined);
30
30
  this._status = new BehaviorSubject(DataContextStatus.idle());
31
31
  this._started = new BehaviorSubject(false);
32
32
  this._closed = new BehaviorSubject(false);
33
- this._primaryIndex = new Map();
33
+ this._customIndex = new Map();
34
34
  this._reloadQueue = new Subject();
35
35
  this.unsubscribe$ = new Subject();
36
36
  this._dataSource = dataSource;
37
+ this._data = new IndexedEntities(e => dataSource.getId(e), _localSort);
37
38
  this._loading = this._status.pipe(map(status => status.loading));
38
39
  this._filter.filters.pipe(filter(() => this.started), takeUntil(this.unsubscribe$)).subscribe(filters => this.onFiltersChanged(filters));
39
40
  this._sort.sorts.pipe(filter(() => this.started), takeUntil(this.unsubscribe$)).subscribe(sorts => this.onSortsChanged(sorts));
@@ -84,10 +85,10 @@ export class DataContextBase extends DataSource {
84
85
  return this.statusSnapshot?.loading;
85
86
  }
86
87
  get data() {
87
- return this._data.asObservable();
88
+ return this._data.entities$;
88
89
  }
89
90
  get dataSnapshot() {
90
- return this._data.getValue();
91
+ return this._data.entitiesSnapshot;
91
92
  }
92
93
  get status() {
93
94
  return this._status;
@@ -130,13 +131,17 @@ export class DataContextBase extends DataSource {
130
131
  return this.reloadNow();
131
132
  }
132
133
  reload() {
134
+ this.baselog.debug('Requesting a reload of the DataContext from the DataSource.');
133
135
  this._reloadQueue.next();
134
136
  }
135
137
  findByIndex(key) {
136
138
  if (!this._indexFn) {
137
139
  throw new Error('findByIndex requires you to pass a index function!');
138
140
  }
139
- return this._primaryIndex.get(key);
141
+ return this._customIndex.get(key);
142
+ }
143
+ findById(id) {
144
+ return this._data.getById(id);
140
145
  }
141
146
  /**
142
147
  * Closes this DataContext and cleans up all used resources.
@@ -146,15 +151,17 @@ export class DataContextBase extends DataSource {
146
151
  this.unsubscribe$.next();
147
152
  this.unsubscribe$.complete();
148
153
  this._closed.next(true);
149
- this._data.complete();
154
+ this._data.destroy();
150
155
  this._total.complete();
151
156
  this._status.complete();
152
157
  this.clearAll();
153
158
  this.baselog.debug('DataContext has been closed and resources cleaned up!');
154
159
  }
155
160
  refresh() {
156
- const current = this._data.getValue();
157
- this._data.next(current);
161
+ this._data.notify();
162
+ }
163
+ update(entities) {
164
+ this._data.updateSome(entities);
158
165
  }
159
166
  /***************************************************************************
160
167
  * *
@@ -165,14 +172,20 @@ export class DataContextBase extends DataSource {
165
172
  return this.reloadInternal(); // TODO This should actually return the real (http) request
166
173
  }
167
174
  /**
168
- * Append the given rows to to existing ones.
175
+ * Append the given rows to the existing ones.
169
176
  */
170
177
  appendData(additionalData) {
171
- // We had previous chunks so append to current data.
172
- const newData = [...this.dataSnapshot];
173
- newData.push(...additionalData);
178
+ additionalData = this.localApply(additionalData);
179
+ this.indexAll(additionalData);
180
+ this._data.append(additionalData);
181
+ }
182
+ /**
183
+ * Insert the given rows at the given location.
184
+ */
185
+ insertData(additionalData, offset) {
186
+ additionalData = this.localApply(additionalData);
174
187
  this.indexAll(additionalData);
175
- this.setData(newData, true);
188
+ this._data.insert(additionalData, offset);
176
189
  }
177
190
  /**
178
191
  * Replaces the existing data with the new set.
@@ -180,19 +193,22 @@ export class DataContextBase extends DataSource {
180
193
  * @param alreadyIndexed The rows will be indexed unless they already have been.
181
194
  */
182
195
  setData(newData, alreadyIndexed = false) {
183
- if (this._localApply) {
184
- newData = this._localApply(newData);
185
- }
186
- if (this._localSort) {
187
- newData = this._localSort(newData, this._sort.sortsSnapshot);
188
- }
196
+ newData = this.localApply(newData);
189
197
  if (!alreadyIndexed) {
198
+ this.clearIndex();
190
199
  this.indexAll(newData);
191
200
  }
192
- const current = this.dataSnapshot;
193
- if (!(current.length === 0 && newData.length === 0)) {
194
- this.baselog.debug('Data has changed: ' + newData.length);
195
- this._data.next(newData);
201
+ this._data.replaceAll(newData);
202
+ }
203
+ clearData() {
204
+ this.setData([]);
205
+ }
206
+ localApply(data) {
207
+ if (this._localApply) {
208
+ return this._localApply(data);
209
+ }
210
+ else {
211
+ return data;
196
212
  }
197
213
  }
198
214
  setTotal(total) {
@@ -206,7 +222,7 @@ export class DataContextBase extends DataSource {
206
222
  this.clearIndex();
207
223
  if (!silent) {
208
224
  this.setTotal(0);
209
- this.setData([]);
225
+ this.clearData();
210
226
  }
211
227
  this.onIdle();
212
228
  }
@@ -220,7 +236,7 @@ export class DataContextBase extends DataSource {
220
236
  indexItem(item) {
221
237
  const key = this.getItemKey(item);
222
238
  if (key) {
223
- this._primaryIndex.set(key, item);
239
+ this._customIndex.set(key, item);
224
240
  }
225
241
  }
226
242
  /**
@@ -237,6 +253,9 @@ export class DataContextBase extends DataSource {
237
253
  }
238
254
  return null;
239
255
  }
256
+ getItemId(item) {
257
+ return this.dataSource.getId(item);
258
+ }
240
259
  /***************************************************************************
241
260
  * *
242
261
  * Event handler *
@@ -277,7 +296,7 @@ export class DataContextBase extends DataSource {
277
296
  * *
278
297
  **************************************************************************/
279
298
  clearIndex() {
280
- this._primaryIndex.clear();
299
+ this._customIndex.clear();
281
300
  }
282
301
  }
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1jb250ZXh0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21tb24vZGF0YS9kYXRhLWNvbnRleHQvZGF0YS1jb250ZXh0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFTLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRzNELE9BQU8sRUFBbUIsVUFBVSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxLQUFLLEVBQWtCLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFDLG1CQUFtQixFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFHNUMsTUFBTSxPQUFnQixlQUFtQixTQUFRLFVBQWE7SUE4QjVEOzs7O2dGQUk0RTtJQUU1RSxZQUNFLFVBQTBCLEVBQ2xCLFFBQTRCLEVBQzVCLFdBQWlDLEVBQ2pDLFVBQStDO1FBRXZELEtBQUssRUFBRSxDQUFDO1FBSkEsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQXNCO1FBQ2pDLGVBQVUsR0FBVixVQUFVLENBQXFDO1FBdEN6RDs7OztvRkFJNEU7UUFFM0QsWUFBTyxHQUFXLGFBQWEsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUk3RCxZQUFPLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUM5QixVQUFLLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUkxQixVQUFLLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7UUFDckMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUM1RCxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQW9CLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFFM0UsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQy9DLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUU5QyxrQkFBYSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFFbEMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRWpDLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQWdCcEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFFOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDL0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUM5QixDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN2QixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUMxQixTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUM3QixDQUFDLFNBQVMsQ0FDVCxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FDMUMsQ0FBQztRQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDbkIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFDMUIsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FDN0IsQ0FBQyxTQUFTLENBQ1QsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUNwQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3BCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQzFCLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFDaEIsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDNUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwQywyRkFBMkY7SUFDN0YsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUVyRSxPQUFPLENBQUMsZ0JBQWtDO1FBQy9DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRU0sVUFBVSxDQUFDLGdCQUFrQztRQUNsRCw0Q0FBNEM7SUFDOUMsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUU1RSxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLG1CQUFtQixDQUM1QixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxlQUFlLEVBQ3BCLElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxjQUFjLENBQ3BCLENBQUM7SUFDSixDQUFDO0lBR0QsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELElBQWMsT0FBTztRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQWMsT0FBTyxDQUFDLE9BQWdCO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFckUsS0FBSyxDQUFDLEtBQWMsRUFBRSxPQUFrQjtRQUU3QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1NBQ3pGO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUVyQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVwRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUVwQixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVNLFdBQVcsQ0FBQyxHQUFRO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQUU7UUFDOUYsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLO1FBRVYsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFTSxPQUFPO1FBQ1osTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRWxFLFNBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQywyREFBMkQ7SUFDM0YsQ0FBQztJQUVEOztPQUVHO0lBQ08sVUFBVSxDQUFDLGNBQW1CO1FBQ3RDLG9EQUFvRDtRQUNwRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sT0FBTyxDQUFDLE9BQVksRUFBRSxjQUFjLEdBQUcsS0FBSztRQUVwRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDckM7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDOUQ7UUFFRCxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDeEI7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRWxDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVTLFFBQVEsQ0FBQyxLQUF5QjtRQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7OztPQUdHO0lBQ08sUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLO1FBQy9CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2xCO1FBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFUyxXQUFXO1FBQ25CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDTyxTQUFTLENBQUMsSUFBTztRQUN6QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ08sUUFBUSxDQUFDLEtBQVU7UUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBRVMsVUFBVSxDQUFDLElBQU87UUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUU1RTs7T0FFRztJQUNPLGNBQWMsQ0FBQyxLQUFhO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNmO2FBQU07WUFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxnQkFBZ0IsQ0FBQyxPQUFpQjtRQUMxQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVTLE9BQU8sQ0FBQyxHQUFRO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVTLE1BQU07UUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVTLFNBQVM7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFUyxRQUFRLENBQUMsTUFBeUI7UUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQWlCRDs7OztnRkFJNEU7SUFFcEUsVUFBVTtRQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TG9nZ2VyLCBMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0ZpbHRlcn0gZnJvbSAnLi4vZmlsdGVycy9maWx0ZXInO1xuaW1wb3J0IHtTb3J0fSBmcm9tICcuLi9zb3J0JztcbmltcG9ydCB7Q29sbGVjdGlvblZpZXdlciwgRGF0YVNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7RGF0YUNvbnRleHRTdGF0dXN9IGZyb20gJy4vZGF0YS1jb250ZXh0LXN0YXR1cyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgRU1QVFksIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7RmlsdGVyQ29udGV4dH0gZnJvbSAnLi4vZmlsdGVycy9maWx0ZXItY29udGV4dCc7XG5pbXBvcnQge0RhdGFDb250ZXh0U25hcHNob3QsIElEYXRhQ29udGV4dH0gZnJvbSAnLi9kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7U29ydENvbnRleHR9IGZyb20gJy4uL3NvcnQtY29udGV4dCc7XG5pbXBvcnQge0lEYXRhU291cmNlfSBmcm9tICcuLi9kYXRhc291cmNlL2RhdGEtc291cmNlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFDb250ZXh0QmFzZTxUPiBleHRlbmRzIERhdGFTb3VyY2U8VD4gaW1wbGVtZW50cyBJRGF0YUNvbnRleHQ8VD4ge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZWxvZzogTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0RhdGFDb250ZXh0QmFzZScpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFTb3VyY2U6IElEYXRhU291cmNlPFQ+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbHRlciA9IG5ldyBGaWx0ZXJDb250ZXh0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NvcnQgPSBuZXcgU29ydENvbnRleHQoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9sb2FkaW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b3RhbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0dXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFDb250ZXh0U3RhdHVzPihEYXRhQ29udGV4dFN0YXR1cy5pZGxlKCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2xvc2VkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcHJpbWFyeUluZGV4ID0gbmV3IE1hcDxhbnksIFQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcmVsb2FkUXVldWUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBkYXRhU291cmNlOiBJRGF0YVNvdXJjZTxUPixcbiAgICBwcml2YXRlIF9pbmRleEZuOiAoKGl0ZW06IFQpID0+IGFueSksXG4gICAgcHJpdmF0ZSBfbG9jYWxBcHBseTogKChkYXRhOiBUW10pID0+IFRbXSksXG4gICAgcHJpdmF0ZSBfbG9jYWxTb3J0OiAoKGRhdGE6IFRbXSwgc29ydHM6IFNvcnRbXSkgPT4gVFtdKSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xuXG4gICAgdGhpcy5fbG9hZGluZyA9IHRoaXMuX3N0YXR1cy5waXBlKFxuICAgICAgbWFwKHN0YXR1cyA9PiBzdGF0dXMubG9hZGluZylcbiAgICApO1xuXG4gICAgdGhpcy5fZmlsdGVyLmZpbHRlcnMucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnN0YXJ0ZWQpLFxuICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKVxuICAgICkuc3Vic2NyaWJlKFxuICAgICAgZmlsdGVycyA9PiB0aGlzLm9uRmlsdGVyc0NoYW5nZWQoZmlsdGVycylcbiAgICApO1xuXG4gICAgdGhpcy5fc29ydC5zb3J0cy5waXBlKFxuICAgICAgZmlsdGVyKCgpID0+IHRoaXMuc3RhcnRlZCksXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpXG4gICAgKS5zdWJzY3JpYmUoXG4gICAgICBzb3J0cyA9PiB0aGlzLm9uU29ydHNDaGFuZ2VkKHNvcnRzKVxuICAgICk7XG5cbiAgICB0aGlzLl9yZWxvYWRRdWV1ZS5waXBlKFxuICAgICAgZmlsdGVyKCgpID0+IHRoaXMuc3RhcnRlZCksXG4gICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHsgIC8vIERvbnQgZGllIG9uIGVycm9yc1xuICAgICAgICB0aGlzLmJhc2Vsb2cuZXJyb3IoJ1JlbG9hZCBxdWV1ZSBkZXRlY3RlZCBlcnJvciwgYmFkIScsIGVycik7XG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgIH0pXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWxvYWROb3coKSk7XG4gICAgLy8gTWF5YmUgc2tpcE1hcCB0aGUgcmVhbCByZXF1ZXN0cyBmb3IgYXV0byBhYm9ydCBwZW5kaW5nIChleGNlcHQgZm9yIGNvbnRpbnVhdGlvbiAvIHBhZ2VkKVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgTWF0ZXJpYWwgREMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIGNvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiB2b2lkIHtcbiAgICAvLyB0aGlzLmNsb3NlKCk7IENsb3Npbmcgd2lsbCBkZXN0cm95IHRoZSBEQ1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIGdldCBkYXRhU291cmNlKCk6IElEYXRhU291cmNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc25hcHNob3QoKTogRGF0YUNvbnRleHRTbmFwc2hvdDxUPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhQ29udGV4dFNuYXBzaG90KFxuICAgICAgdGhpcy5kYXRhU25hcHNob3QsXG4gICAgICB0aGlzLmlzRW1wdHksXG4gICAgICB0aGlzLmxvYWRpbmdTbmFwc2hvdCxcbiAgICAgIHRoaXMudG90YWxTbmFwc2hvdCxcbiAgICAgIHRoaXMuc3RhdHVzU25hcHNob3RcbiAgICApO1xuICB9XG5cblxuICBwdWJsaWMgZ2V0IHRvdGFsKCk6IE9ic2VydmFibGU8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCB0b3RhbFNuYXBzaG90KCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNvcnQoKTogU29ydENvbnRleHQge1xuICAgIHJldHVybiB0aGlzLl9zb3J0O1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXIoKTogRmlsdGVyQ29udGV4dCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9hZGluZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9hZGluZ1NuYXBzaG90KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1c1NuYXBzaG90Py5sb2FkaW5nO1xuICB9XG5cbiAgcHVibGljIGdldCBkYXRhKCk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGFTbmFwc2hvdCgpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0YXR1cygpOiBPYnNlcnZhYmxlPERhdGFDb250ZXh0U3RhdHVzPiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdHVzU25hcHNob3QoKTogRGF0YUNvbnRleHRTdGF0dXMge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXMuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU25hcHNob3QubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1N0YXJ0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNTdGFydGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRlZC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNDbG9zZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nsb3NlZC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBzdGFydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdGFydGVkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0IHN0YXJ0ZWQoc3RhcnRlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX3N0YXJ0ZWQubmV4dChzdGFydGVkKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBzdGFydChzb3J0cz86IFNvcnRbXSwgZmlsdGVycz86IEZpbHRlcltdKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIGlmICh0aGlzLmlzQ2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc3RhcnRpbmcgYSBjbG9zZWQgRGF0YUNvbnRleHQgaXMgbm90IHBvc3NpYmxlIScpOyAvLyBTZWUgdW5zdWJzY3JpYmUkXG4gICAgfVxuXG4gICAgdGhpcy5iYXNlbG9nLmRlYnVnKCdTdGFydGluZyBmcmVzaCBkYXRhQ29udGV4dCAuLi4nKTtcblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5fc29ydC5yZXBsYWNlU29ydHMoc29ydHMgfHwgdGhpcy5zb3J0LnNvcnRzU25hcHNob3QpO1xuICAgIHRoaXMuX2ZpbHRlci5yZXBsYWNlRmlsdGVycyhmaWx0ZXJzIHx8IHRoaXMuZmlsdGVyLmZpbHRlcnNTbmFwc2hvdCk7XG5cbiAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucmVsb2FkTm93KCk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlbG9hZFF1ZXVlLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQnlJbmRleChrZXk6IGFueSk6IFQgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5faW5kZXhGbikgeyB0aHJvdyBuZXcgRXJyb3IoJ2ZpbmRCeUluZGV4IHJlcXVpcmVzIHlvdSB0byBwYXNzIGEgaW5kZXggZnVuY3Rpb24hJyk7IH1cbiAgICByZXR1cm4gdGhpcy5fcHJpbWFyeUluZGV4LmdldChrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGlzIERhdGFDb250ZXh0IGFuZCBjbGVhbnMgdXAgYWxsIHVzZWQgcmVzb3VyY2VzLlxuICAgKi9cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fY2xvc2VkLm5leHQodHJ1ZSk7XG5cbiAgICB0aGlzLl9kYXRhLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fdG90YWwuY29tcGxldGUoKTtcbiAgICB0aGlzLl9zdGF0dXMuY29tcGxldGUoKTtcblxuICAgIHRoaXMuY2xlYXJBbGwoKTtcbiAgICB0aGlzLmJhc2Vsb2cuZGVidWcoJ0RhdGFDb250ZXh0IGhhcyBiZWVuIGNsb3NlZCBhbmQgcmVzb3VyY2VzIGNsZWFuZWQgdXAhJyk7XG4gIH1cblxuICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5fZGF0YS5nZXRWYWx1ZSgpO1xuICAgIHRoaXMuX2RhdGEubmV4dChjdXJyZW50KTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm90ZWN0ZWQgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByb3RlY3RlZCByZWxvYWROb3coKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yZWxvYWRJbnRlcm5hbCgpOyAvLyBUT0RPIFRoaXMgc2hvdWxkIGFjdHVhbGx5IHJldHVybiB0aGUgcmVhbCAoaHR0cCkgcmVxdWVzdFxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZCB0aGUgZ2l2ZW4gcm93cyB0byB0byBleGlzdGluZyBvbmVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFwcGVuZERhdGEoYWRkaXRpb25hbERhdGE6IFRbXSk6IHZvaWQge1xuICAgIC8vIFdlIGhhZCBwcmV2aW91cyBjaHVua3Mgc28gYXBwZW5kIHRvIGN1cnJlbnQgZGF0YS5cbiAgICBjb25zdCBuZXdEYXRhID0gWy4uLnRoaXMuZGF0YVNuYXBzaG90XTtcbiAgICBuZXdEYXRhLnB1c2goLi4uYWRkaXRpb25hbERhdGEpO1xuICAgIHRoaXMuaW5kZXhBbGwoYWRkaXRpb25hbERhdGEpO1xuICAgIHRoaXMuc2V0RGF0YShuZXdEYXRhLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgZXhpc3RpbmcgZGF0YSB3aXRoIHRoZSBuZXcgc2V0LlxuICAgKiBAcGFyYW0gbmV3RGF0YSBUaGUgbmV3IGRhdGEgc2V0LlxuICAgKiBAcGFyYW0gYWxyZWFkeUluZGV4ZWQgVGhlIHJvd3Mgd2lsbCBiZSBpbmRleGVkIHVubGVzcyB0aGV5IGFscmVhZHkgaGF2ZSBiZWVuLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldERhdGEobmV3RGF0YTogVFtdLCBhbHJlYWR5SW5kZXhlZCA9IGZhbHNlKTogdm9pZCB7XG5cbiAgICBpZiAodGhpcy5fbG9jYWxBcHBseSkge1xuICAgICAgbmV3RGF0YSA9IHRoaXMuX2xvY2FsQXBwbHkobmV3RGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xvY2FsU29ydCkge1xuICAgICAgbmV3RGF0YSA9IHRoaXMuX2xvY2FsU29ydChuZXdEYXRhLCB0aGlzLl9zb3J0LnNvcnRzU25hcHNob3QpO1xuICAgIH1cblxuICAgIGlmICghYWxyZWFkeUluZGV4ZWQpIHtcbiAgICAgIHRoaXMuaW5kZXhBbGwobmV3RGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZGF0YVNuYXBzaG90O1xuXG4gICAgaWYgKCEoY3VycmVudC5sZW5ndGggPT09IDAgJiYgbmV3RGF0YS5sZW5ndGggPT09IDApKSB7XG4gICAgICB0aGlzLmJhc2Vsb2cuZGVidWcoJ0RhdGEgaGFzIGNoYW5nZWQ6ICcgKyBuZXdEYXRhLmxlbmd0aCk7XG4gICAgICB0aGlzLl9kYXRhLm5leHQobmV3RGF0YSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNldFRvdGFsKHRvdGFsOiBudW1iZXIgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLl90b3RhbC5uZXh0KHRvdGFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGN1cnJlbnQgZGF0YS1jb250ZXh0IGNhY2hlZCBkYXRhLlxuICAgKiBTdGF0ZSBzdWNoIGFzIGN1cnJlbnQgc29ydGluZyBhbmQgZmlsdGVyc1NuYXBzaG90IGFyZSBrZXB0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGNsZWFyQWxsKHNpbGVudCA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckluZGV4KCk7XG5cbiAgICBpZiAoIXNpbGVudCkge1xuICAgICAgdGhpcy5zZXRUb3RhbCgwKTtcbiAgICAgIHRoaXMuc2V0RGF0YShbXSk7XG4gICAgfVxuXG4gICAgdGhpcy5vbklkbGUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVJbmRleCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFySW5kZXgoKTtcbiAgICB0aGlzLmluZGV4QWxsKHRoaXMuZGF0YVNuYXBzaG90KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRleGVzIHRoZSBnaXZlbiBpdGVtIGJ5IGtleSBpZiB0aGVyZSBpcyBhbiBpbmRleCBmdW5jdGlvbiBkZWZpbmVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGluZGV4SXRlbShpdGVtOiBUKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRJdGVtS2V5KGl0ZW0pO1xuICAgIGlmIChrZXkpIHtcbiAgICAgIHRoaXMuX3ByaW1hcnlJbmRleC5zZXQoa2V5LCBpdGVtKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5kZXhlcyBhbGwgdGhlIGdpdmVuIGl0ZW1zIGJ5IGtleSBpZiB0aGVyZSBpcyBhbiBpbmRleCBmdW5jdGlvbiBkZWZpbmVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGluZGV4QWxsKGl0ZW1zOiBUW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faW5kZXhGbikge1xuICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMuaW5kZXhJdGVtKGl0ZW0pKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SXRlbUtleShpdGVtOiBUKTogYW55ICB7XG4gICAgaWYgKHRoaXMuX2luZGV4Rm4pIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbmRleEZuKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBFdmVudCBoYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgc29ydCBoYXMgY2hhbmdlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvblNvcnRzQ2hhbmdlZChzb3J0czogU29ydFtdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9sb2NhbFNvcnQpIHtcbiAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0RGF0YSh0aGlzLmRhdGFTbmFwc2hvdCwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIHRoZSBmaWx0ZXIgaGFzIGNoYW5nZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgb25GaWx0ZXJzQ2hhbmdlZChmaWx0ZXJzOiBGaWx0ZXJbXSk6IHZvaWQge1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25FcnJvcihlcnI6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25TdGF0dXMoRGF0YUNvbnRleHRTdGF0dXMuZXJyb3IoZXJyKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25JZGxlKCk6IHZvaWQge1xuICAgIHRoaXMub25TdGF0dXMoRGF0YUNvbnRleHRTdGF0dXMuaWRsZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkxvYWRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5vblN0YXR1cyhEYXRhQ29udGV4dFN0YXR1cy5sb2FkaW5nKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uU3RhdHVzKHN0YXR1czogRGF0YUNvbnRleHRTdGF0dXMpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0dXMubmV4dChzdGF0dXMpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEFic3RyYWN0IG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIFN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgYW5kXG4gICAqIHJlbG9hZCB0aGUgY3VycmVudGx5IGhlbGQgZGF0YS5cbiAgICogSWYgcG9zc2libGUsIHRoZSBjdXJyZW50IHZpZXcgc3RhdGUgc2hvdWxkIGJlIGtlcHQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSByZWxvYWQgam9iLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlbG9hZEludGVybmFsKCk6IE9ic2VydmFibGU8YW55PjtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIGNsZWFySW5kZXgoKTogdm9pZCB7XG4gICAgdGhpcy5fcHJpbWFyeUluZGV4LmNsZWFyKCk7XG4gIH1cbn1cbiJdfQ==
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1jb250ZXh0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21tb24vZGF0YS9kYXRhLWNvbnRleHQvZGF0YS1jb250ZXh0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFTLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRzNELE9BQU8sRUFBbUIsVUFBVSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxLQUFLLEVBQWtCLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFDLG1CQUFtQixFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFNUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE1BQU0sT0FBZ0IsZUFBOEIsU0FBUSxVQUFhO0lBOEJ2RTs7OztnRkFJNEU7SUFFNUUsWUFDRSxVQUEwQixFQUNsQixRQUE0QixFQUM1QixXQUFpQyxFQUNqQyxVQUErQztRQUV2RCxLQUFLLEVBQUUsQ0FBQztRQUpBLGFBQVEsR0FBUixRQUFRLENBQW9CO1FBQzVCLGdCQUFXLEdBQVgsV0FBVyxDQUFzQjtRQUNqQyxlQUFVLEdBQVYsVUFBVSxDQUFxQztRQXRDekQ7Ozs7b0ZBSTRFO1FBRTNELFlBQU8sR0FBVyxhQUFhLENB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QUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNmO2FBQU07WUFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxnQkFBZ0IsQ0FBQyxPQUFpQjtRQUMxQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVTLE9BQU8sQ0FBQyxHQUFRO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVTLE1BQU07UUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVTLFNBQVM7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFUyxRQUFRLENBQUMsTUFBeUI7UUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQWlCRDs7OztnRkFJNEU7SUFFcEUsVUFBVTtRQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TG9nZ2VyLCBMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0ZpbHRlcn0gZnJvbSAnLi4vZmlsdGVycy9maWx0ZXInO1xuaW1wb3J0IHtTb3J0fSBmcm9tICcuLi9zb3J0JztcbmltcG9ydCB7Q29sbGVjdGlvblZpZXdlciwgRGF0YVNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7RGF0YUNvbnRleHRTdGF0dXN9IGZyb20gJy4vZGF0YS1jb250ZXh0LXN0YXR1cyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgRU1QVFksIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7RmlsdGVyQ29udGV4dH0gZnJvbSAnLi4vZmlsdGVycy9maWx0ZXItY29udGV4dCc7XG5pbXBvcnQge0RhdGFDb250ZXh0U25hcHNob3QsIElEYXRhQ29udGV4dH0gZnJvbSAnLi9kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7U29ydENvbnRleHR9IGZyb20gJy4uL3NvcnQtY29udGV4dCc7XG5pbXBvcnQge0lEYXRhU291cmNlfSBmcm9tICcuLi9kYXRhc291cmNlL2RhdGEtc291cmNlJztcbmltcG9ydCB7SW5kZXhlZEVudGl0aWVzfSBmcm9tICcuL2luZGV4ZWQtZW50aXRpZXMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0YUNvbnRleHRCYXNlPFQsIFRJZCA9IGFueT4gZXh0ZW5kcyBEYXRhU291cmNlPFQ+IGltcGxlbWVudHMgSURhdGFDb250ZXh0PFQ+IHtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IGJhc2Vsb2c6IExvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEYXRhQ29udGV4dEJhc2UnKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhU291cmNlOiBJRGF0YVNvdXJjZTxUPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9maWx0ZXIgPSBuZXcgRmlsdGVyQ29udGV4dCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zb3J0ID0gbmV3IFNvcnRDb250ZXh0KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbG9hZGluZzogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhOiBJbmRleGVkRW50aXRpZXM8VCwgVElkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG90YWwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdHVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhQ29udGV4dFN0YXR1cz4oRGF0YUNvbnRleHRTdGF0dXMuaWRsZSgpKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Nsb3NlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1c3RvbUluZGV4ID0gbmV3IE1hcDxhbnksIFQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcmVsb2FkUXVldWUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBkYXRhU291cmNlOiBJRGF0YVNvdXJjZTxUPixcbiAgICBwcml2YXRlIF9pbmRleEZuOiAoKGl0ZW06IFQpID0+IGFueSksXG4gICAgcHJpdmF0ZSBfbG9jYWxBcHBseTogKChkYXRhOiBUW10pID0+IFRbXSksXG4gICAgcHJpdmF0ZSBfbG9jYWxTb3J0OiAoKGRhdGE6IFRbXSwgc29ydHM6IFNvcnRbXSkgPT4gVFtdKSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xuICAgIHRoaXMuX2RhdGEgPSBuZXcgSW5kZXhlZEVudGl0aWVzKGUgPT4gZGF0YVNvdXJjZS5nZXRJZChlKSwgX2xvY2FsU29ydCk7XG5cbiAgICB0aGlzLl9sb2FkaW5nID0gdGhpcy5fc3RhdHVzLnBpcGUoXG4gICAgICBtYXAoc3RhdHVzID0+IHN0YXR1cy5sb2FkaW5nKVxuICAgICk7XG5cbiAgICB0aGlzLl9maWx0ZXIuZmlsdGVycy5waXBlKFxuICAgICAgZmlsdGVyKCgpID0+IHRoaXMuc3RhcnRlZCksXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpXG4gICAgKS5zdWJzY3JpYmUoXG4gICAgICBmaWx0ZXJzID0+IHRoaXMub25GaWx0ZXJzQ2hhbmdlZChmaWx0ZXJzKVxuICAgICk7XG5cbiAgICB0aGlzLl9zb3J0LnNvcnRzLnBpcGUoXG4gICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5zdGFydGVkKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJClcbiAgICApLnN1YnNjcmliZShcbiAgICAgIHNvcnRzID0+IHRoaXMub25Tb3J0c0NoYW5nZWQoc29ydHMpXG4gICAgKTtcblxuICAgIHRoaXMuX3JlbG9hZFF1ZXVlLnBpcGUoXG4gICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5zdGFydGVkKSxcbiAgICAgIGRlYm91bmNlVGltZSg1MCksXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgY2F0Y2hFcnJvcihlcnIgPT4geyAgLy8gRG9udCBkaWUgb24gZXJyb3JzXG4gICAgICAgIHRoaXMuYmFzZWxvZy5lcnJvcignUmVsb2FkIHF1ZXVlIGRldGVjdGVkIGVycm9yLCBiYWQhJywgZXJyKTtcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgfSlcbiAgICApLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlbG9hZE5vdygpKTtcbiAgICAvLyBNYXliZSBza2lwTWFwIHRoZSByZWFsIHJlcXVlc3RzIGZvciBhdXRvIGFib3J0IHBlbmRpbmcgKGV4Y2VwdCBmb3IgY29udGludWF0aW9uIC8gcGFnZWQpXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSBNYXRlcmlhbCBEQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgcHVibGljIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xuICAgIC8vIHRoaXMuY2xvc2UoKTsgQ2xvc2luZyB3aWxsIGRlc3Ryb3kgdGhlIERDXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKTogSURhdGFTb3VyY2U8VD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICB9XG5cbiAgcHVibGljIGdldCBzbmFwc2hvdCgpOiBEYXRhQ29udGV4dFNuYXBzaG90PFQ+IHtcbiAgICByZXR1cm4gbmV3IERhdGFDb250ZXh0U25hcHNob3QoXG4gICAgICB0aGlzLmRhdGFTbmFwc2hvdCxcbiAgICAgIHRoaXMuaXNFbXB0eSxcbiAgICAgIHRoaXMubG9hZGluZ1NuYXBzaG90LFxuICAgICAgdGhpcy50b3RhbFNuYXBzaG90LFxuICAgICAgdGhpcy5zdGF0dXNTbmFwc2hvdFxuICAgICk7XG4gIH1cblxuXG4gIHB1YmxpYyBnZXQgdG90YWwoKTogT2JzZXJ2YWJsZTxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fdG90YWwuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRvdGFsU25hcHNob3QoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdG90YWwuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc29ydCgpOiBTb3J0Q29udGV4dCB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlcigpOiBGaWx0ZXJDb250ZXh0IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyO1xuICB9XG5cbiAgcHVibGljIGdldCBsb2FkaW5nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICB9XG5cbiAgcHVibGljIGdldCBsb2FkaW5nU25hcHNob3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzU25hcHNob3Q/LmxvYWRpbmc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGEoKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5lbnRpdGllcyQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGFTbmFwc2hvdCgpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLmVudGl0aWVzU25hcHNob3Q7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0YXR1cygpOiBPYnNlcnZhYmxlPERhdGFDb250ZXh0U3RhdHVzPiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdHVzU25hcHNob3QoKTogRGF0YUNvbnRleHRTdGF0dXMge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXMuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU25hcHNob3QubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1N0YXJ0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNTdGFydGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRlZC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNDbG9zZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nsb3NlZC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBzdGFydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdGFydGVkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0IHN0YXJ0ZWQoc3RhcnRlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX3N0YXJ0ZWQubmV4dChzdGFydGVkKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBzdGFydChzb3J0cz86IFNvcnRbXSwgZmlsdGVycz86IEZpbHRlcltdKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIGlmICh0aGlzLmlzQ2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc3RhcnRpbmcgYSBjbG9zZWQgRGF0YUNvbnRleHQgaXMgbm90IHBvc3NpYmxlIScpOyAvLyBTZWUgdW5zdWJzY3JpYmUkXG4gICAgfVxuXG4gICAgdGhpcy5iYXNlbG9nLmRlYnVnKCdTdGFydGluZyBmcmVzaCBkYXRhQ29udGV4dCAuLi4nKTtcblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5fc29ydC5yZXBsYWNlU29ydHMoc29ydHMgfHwgdGhpcy5zb3J0LnNvcnRzU25hcHNob3QpO1xuICAgIHRoaXMuX2ZpbHRlci5yZXBsYWNlRmlsdGVycyhmaWx0ZXJzIHx8IHRoaXMuZmlsdGVyLmZpbHRlcnNTbmFwc2hvdCk7XG5cbiAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucmVsb2FkTm93KCk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuYmFzZWxvZy5kZWJ1ZygnUmVxdWVzdGluZyBhIHJlbG9hZCBvZiB0aGUgRGF0YUNvbnRleHQgZnJvbSB0aGUgRGF0YVNvdXJjZS4nKVxuICAgIHRoaXMuX3JlbG9hZFF1ZXVlLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQnlJbmRleChrZXk6IGFueSk6IFQgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5faW5kZXhGbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaW5kQnlJbmRleCByZXF1aXJlcyB5b3UgdG8gcGFzcyBhIGluZGV4IGZ1bmN0aW9uIScpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY3VzdG9tSW5kZXguZ2V0KGtleSk7XG4gIH1cblxuICBwdWJsaWMgZmluZEJ5SWQoaWQ6IGFueSk6IFQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLmdldEJ5SWQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGlzIERhdGFDb250ZXh0IGFuZCBjbGVhbnMgdXAgYWxsIHVzZWQgcmVzb3VyY2VzLlxuICAgKi9cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fY2xvc2VkLm5leHQodHJ1ZSk7XG5cbiAgICB0aGlzLl9kYXRhLmRlc3Ryb3koKTtcbiAgICB0aGlzLl90b3RhbC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3N0YXR1cy5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5jbGVhckFsbCgpO1xuICAgIHRoaXMuYmFzZWxvZy5kZWJ1ZygnRGF0YUNvbnRleHQgaGFzIGJlZW4gY2xvc2VkIGFuZCByZXNvdXJjZXMgY2xlYW5lZCB1cCEnKTtcbiAgfVxuXG4gIHB1YmxpYyByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMuX2RhdGEubm90aWZ5KCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlKGVudGl0aWVzOiBUW10pOiB2b2lkIHtcbiAgICB0aGlzLl9kYXRhLnVwZGF0ZVNvbWUoZW50aXRpZXMpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3RlY3RlZCBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJvdGVjdGVkIHJlbG9hZE5vdygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJlbG9hZEludGVybmFsKCk7IC8vIFRPRE8gVGhpcyBzaG91bGQgYWN0dWFsbHkgcmV0dXJuIHRoZSByZWFsIChodHRwKSByZXF1ZXN0XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kIHRoZSBnaXZlbiByb3dzIHRvIHRoZSBleGlzdGluZyBvbmVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFwcGVuZERhdGEoYWRkaXRpb25hbERhdGE6IFRbXSk6IHZvaWQge1xuICAgIGFkZGl0aW9uYWxEYXRhID0gdGhpcy5sb2NhbEFwcGx5KGFkZGl0aW9uYWxEYXRhKTtcbiAgICB0aGlzLmluZGV4QWxsKGFkZGl0aW9uYWxEYXRhKTtcbiAgICB0aGlzLl9kYXRhLmFwcGVuZChhZGRpdGlvbmFsRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogSW5zZXJ0IHRoZSBnaXZlbiByb3dzIGF0IHRoZSBnaXZlbiBsb2NhdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBpbnNlcnREYXRhKGFkZGl0aW9uYWxEYXRhOiBUW10sIG9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgYWRkaXRpb25hbERhdGEgPSB0aGlzLmxvY2FsQXBwbHkoYWRkaXRpb25hbERhdGEpO1xuICAgIHRoaXMuaW5kZXhBbGwoYWRkaXRpb25hbERhdGEpO1xuICAgIHRoaXMuX2RhdGEuaW5zZXJ0KGFkZGl0aW9uYWxEYXRhLCBvZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBleGlzdGluZyBkYXRhIHdpdGggdGhlIG5ldyBzZXQuXG4gICAqIEBwYXJhbSBuZXdEYXRhIFRoZSBuZXcgZGF0YSBzZXQuXG4gICAqIEBwYXJhbSBhbHJlYWR5SW5kZXhlZCBUaGUgcm93cyB3aWxsIGJlIGluZGV4ZWQgdW5sZXNzIHRoZXkgYWxyZWFkeSBoYXZlIGJlZW4uXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0RGF0YShuZXdEYXRhOiBUW10sIGFscmVhZHlJbmRleGVkID0gZmFsc2UpOiB2b2lkIHtcbiAgICBuZXdEYXRhID0gdGhpcy5sb2NhbEFwcGx5KG5ld0RhdGEpO1xuICAgIGlmICghYWxyZWFkeUluZGV4ZWQpIHtcbiAgICAgIHRoaXMuY2xlYXJJbmRleCgpO1xuICAgICAgdGhpcy5pbmRleEFsbChuZXdEYXRhKTtcbiAgICB9XG4gICAgdGhpcy5fZGF0YS5yZXBsYWNlQWxsKG5ld0RhdGEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFyRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLnNldERhdGEoW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2NhbEFwcGx5KGRhdGE6IFRbXSk6IFRbXSB7XG4gICAgaWYgKHRoaXMuX2xvY2FsQXBwbHkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sb2NhbEFwcGx5KGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0VG90YWwodG90YWw6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuX3RvdGFsLm5leHQodG90YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgY3VycmVudCBkYXRhLWNvbnRleHQgY2FjaGVkIGRhdGEuXG4gICAqIFN0YXRlIHN1Y2ggYXMgY3VycmVudCBzb3J0aW5nIGFuZCBmaWx0ZXJzU25hcHNob3QgYXJlIGtlcHQuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2xlYXJBbGwoc2lsZW50ID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFySW5kZXgoKTtcblxuICAgIGlmICghc2lsZW50KSB7XG4gICAgICB0aGlzLnNldFRvdGFsKDApO1xuICAgICAgdGhpcy5jbGVhckRhdGEoKTtcbiAgICB9XG5cbiAgICB0aGlzLm9uSWRsZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUluZGV4KCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJJbmRleCgpO1xuICAgIHRoaXMuaW5kZXhBbGwodGhpcy5kYXRhU25hcHNob3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGV4ZXMgdGhlIGdpdmVuIGl0ZW0gYnkga2V5IGlmIHRoZXJlIGlzIGFuIGluZGV4IGZ1bmN0aW9uIGRlZmluZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgaW5kZXhJdGVtKGl0ZW06IFQpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEl0ZW1LZXkoaXRlbSk7XG4gICAgaWYgKGtleSkge1xuICAgICAgdGhpcy5fY3VzdG9tSW5kZXguc2V0KGtleSwgaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluZGV4ZXMgYWxsIHRoZSBnaXZlbiBpdGVtcyBieSBrZXkgaWYgdGhlcmUgaXMgYW4gaW5kZXggZnVuY3Rpb24gZGVmaW5lZC5cbiAgICovXG4gIHByb3RlY3RlZCBpbmRleEFsbChpdGVtczogVFtdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2luZGV4Rm4pIHtcbiAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB0aGlzLmluZGV4SXRlbShpdGVtKSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldEl0ZW1LZXkoaXRlbTogVCk6IGFueSB7XG4gICAgaWYgKHRoaXMuX2luZGV4Rm4pIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbmRleEZuKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJdGVtSWQoaXRlbTogVCk6IFRJZCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5nZXRJZChpdGVtKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBFdmVudCBoYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBPY2N1cnMgd2hlbiB0aGUgc29ydCBoYXMgY2hhbmdlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvblNvcnRzQ2hhbmdlZChzb3J0czogU29ydFtdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9sb2NhbFNvcnQpIHtcbiAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0RGF0YSh0aGlzLmRhdGFTbmFwc2hvdCwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VycyB3aGVuIHRoZSBmaWx0ZXIgaGFzIGNoYW5nZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgb25GaWx0ZXJzQ2hhbmdlZChmaWx0ZXJzOiBGaWx0ZXJbXSk6IHZvaWQge1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25FcnJvcihlcnI6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25TdGF0dXMoRGF0YUNvbnRleHRTdGF0dXMuZXJyb3IoZXJyKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25JZGxlKCk6IHZvaWQge1xuICAgIHRoaXMub25TdGF0dXMoRGF0YUNvbnRleHRTdGF0dXMuaWRsZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkxvYWRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5vblN0YXR1cyhEYXRhQ29udGV4dFN0YXR1cy5sb2FkaW5nKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uU3RhdHVzKHN0YXR1czogRGF0YUNvbnRleHRTdGF0dXMpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0dXMubmV4dChzdGF0dXMpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEFic3RyYWN0IG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIFN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgYW5kXG4gICAqIHJlbG9hZCB0aGUgY3VycmVudGx5IGhlbGQgZGF0YS5cbiAgICogSWYgcG9zc2libGUsIHRoZSBjdXJyZW50IHZpZXcgc3RhdGUgc2hvdWxkIGJlIGtlcHQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSByZWxvYWQgam9iLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlbG9hZEludGVybmFsKCk6IE9ic2VydmFibGU8YW55PjtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIGNsZWFySW5kZXgoKTogdm9pZCB7XG4gICAgdGhpcy5fY3VzdG9tSW5kZXguY2xlYXIoKTtcbiAgfVxufVxuIl19
@@ -3,7 +3,7 @@ import { LoggerFactory } from '@elderbyte/ts-logger';
3
3
  import { DataContextSimple } from './data-context-simple';
4
4
  import { DataContextActivePage } from './data-context-active-page';
5
5
  import { DataContextContinuableToken } from './data-context-continuable-token';
6
- import { DataContextSourceAutoReloader } from './data-context-source-auto-reloader';
6
+ import { DataContextSourceEventBinding } from './data-context-source-event-binding';
7
7
  import { LocalPagedDataSource } from '../datasource/local/local-paged-data-source';
8
8
  import { LocalListDataSource } from '../datasource/local/local-list-data-source';
9
9
  import { SortUtil } from '../../utils/sort-util';
@@ -136,12 +136,15 @@ export class DataContextBuilder {
136
136
  * *
137
137
  **************************************************************************/
138
138
  buildLocal(items, idProperty) {
139
- return this.build(LocalListDataSource.from(items, idProperty, this._localSort, FilterUtil.filterData));
139
+ return this.build(this.localListSource(items, idProperty));
140
140
  }
141
- buildLocalActivePaged(data, idProperty) {
141
+ buildLocalActivePaged(items, idProperty) {
142
142
  this._skipLocalSort = true;
143
143
  this.activePaged();
144
- return this.build(LocalPagedDataSource.from(data, idProperty, this._localSort, FilterUtil.filterData));
144
+ return this.build(LocalPagedDataSource.of(this.localListSource(items, idProperty)));
145
+ }
146
+ localListSource(items, idProperty) {
147
+ return LocalListDataSource.from(items, idProperty, this._localSort, FilterUtil.filterData);
145
148
  }
146
149
  /***************************************************************************
147
150
  * *
@@ -230,9 +233,7 @@ export class DataContextBuilder {
230
233
  return new DataContextActivePage(pageSource, this._pageSize, this._indexFn, this._localApply, this._skipLocalSort ? null : this._localSort);
231
234
  }
232
235
  setupDataContextAutoReload(dc, dataSource) {
233
- if (this._reloadOnLocalChanges) {
234
- const binding = new DataContextSourceAutoReloader(dc, dataSource);
235
- }
236
+ const binding = new DataContextSourceEventBinding(dc, dataSource, this._reloadOnLocalChanges);
236
237
  return dc;
237
238
  }
238
239
  setupDataContextAutoStart(dc, autoStartSpec) {
@@ -243,4 +244,4 @@ export class DataContextBuilder {
243
244
  return dc;
244
245
  }
245
246
  }
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1jb250ZXh0LWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21tb24vZGF0YS9kYXRhLWNvbnRleHQvZGF0YS1jb250ZXh0LWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDN0UsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRWpFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRTdFLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQy9FLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBS0wsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDbEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUMsYUFBYSxFQUFFLHNCQUFzQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDbEYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRW5EOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQWlDN0I7Ozs7Z0ZBSTRFO0lBRTVFO1FBckNBOzs7O29GQUk0RTtR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c0NvbnRlbnQiOlsiaW1wb3J0IHtEYXRhQ29udGV4dENvbnRpbnVhYmxlUGFnZWR9IGZyb20gJy4vZGF0YS1jb250ZXh0LWNvbnRpbnVhYmxlLXBhZ2VkJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtEYXRhQ29udGV4dFNpbXBsZX0gZnJvbSAnLi9kYXRhLWNvbnRleHQtc2ltcGxlJztcbmltcG9ydCB7RGF0YUNvbnRleHRBY3RpdmVQYWdlfSBmcm9tICcuL2RhdGEtY29udGV4dC1hY3RpdmUtcGFnZSc7XG5pbXBvcnQge1NvcnR9IGZyb20gJy4uL3NvcnQnO1xuaW1wb3J0IHtEYXRhQ29udGV4dENvbnRpbnVhYmxlVG9rZW59IGZyb20gJy4vZGF0YS1jb250ZXh0LWNvbnRpbnVhYmxlLXRva2VuJztcbmltcG9ydCB7SURhdGFDb250ZXh0LCBJRGF0YUNvbnRleHRBY3RpdmVQYWdlLCBJRGF0YUNvbnRleHRDb250aW51YWJsZX0gZnJvbSAnLi9kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtEYXRhQ29udGV4dFNvdXJjZUF1dG9SZWxvYWRlcn0gZnJvbSAnLi9kYXRhLWNvbnRleHQtc291cmNlLWF1dG8tcmVsb2FkZXInO1xuaW1wb3J0IHtMb2NhbFBhZ2VkRGF0YVNvdXJjZX0gZnJvbSAnLi4vZGF0YXNvdXJjZS9sb2NhbC9sb2NhbC1wYWdlZC1kYXRhLXNvdXJjZSc7XG5pbXBvcnQge0xvY2FsTGlzdERhdGFTb3VyY2V9IGZyb20gJy4uL2RhdGFzb3VyY2UvbG9jYWwvbG9jYWwtbGlzdC1kYXRhLXNvdXJjZSc7XG5pbXBvcnQge1NvcnRVdGlsfSBmcm9tICcuLi8uLi91dGlscy9zb3J0LXV0aWwnO1xuaW1wb3J0IHtcbiAgSUNvbnRpbnVhYmxlRGF0YVNvdXJjZSxcbiAgSURhdGFTb3VyY2UsXG4gIElMaXN0RGF0YVNvdXJjZSxcbiAgSVBhZ2VkRGF0YVNvdXJjZSxcbiAgaXNDb250aW51YWJsZURhdGFTb3VyY2UsXG4gIGlzTGlzdERhdGFTb3VyY2UsXG4gIGlzUGFnZWREYXRhU291cmNlXG59IGZyb20gJy4uL2RhdGFzb3VyY2UvZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtEZWxlZ2F0ZURhdGFTb3VyY2V9IGZyb20gJy4uL2RhdGFzb3VyY2UvZmV0Y2hlci9kZWxlZ2F0ZS1kYXRhLXNvdXJjZSc7XG5pbXBvcnQge0F1dG9TdGFydFNwZWMsIERhdGFDb250ZXh0QXV0b1N0YXJ0ZXJ9IGZyb20gJy4vZGF0YS1jb250ZXh0LWF1dG8tc3RhcnRlcic7XG5pbXBvcnQge0ZpbHRlclV0aWx9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbHRlci11dGlsJztcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBidWlsZCBhIElEYXRhQ29udGV4dDxUPi5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFDb250ZXh0QnVpbGRlcjxUPiB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIHByaXZhdGUgX2luZGV4Rm4/OiAoKGl0ZW06IFQpID0+IGFueSk7XG4gIHByaXZhdGUgX2xvY2FsQXBwbHk/OiAoKGRhdGE6IFRbXSkgPT4gVFtdKTtcbiAgcHJpdmF0ZSBfbG9jYWxTb3J0PzogKChkYXRhOiBUW10sIHNvcnRzOiBTb3J0W10pID0+IFRbXSk7XG4gIHByaXZhdGUgX3NraXBMb2NhbFNvcnQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcGFnZVNpemUgPSA1MDtcbiAgcHJpdmF0ZSBfcmVsb2FkT25Mb2NhbENoYW5nZXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYWN0aXZlUGFnZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYXV0b1N0YXJ0U3BlYz86IEF1dG9TdGFydFNwZWM7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFN0YXRpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgRGF0YUNvbnRleHRCdWlsZGVyLlxuICAgKiBAcmV0dXJucyBBIG5ldyBEYXRhQ29udGV4dEJ1aWxkZXIgZm9yIHRoZSBnaXZlbiBkYXRhIHR5cGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHN0YXJ0PFQ+KCk6IERhdGFDb250ZXh0QnVpbGRlcjxUPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhQ29udGV4dEJ1aWxkZXI8VD4oKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGluZGV4IGZ1bmN0aW9uIHdoZXJlIGVhY2ggZWxlbWVudCB3aWxsIGJlIGluZGV4ZWQgYnkuXG4gICAqIElmIHlvdSBoYXZlIGNvbmZpZ3VyZWQgdGhpcywgeW91IGNhbiB1c2UgdGhlIGZpbmRCeUluZGV4KGtleSkgb24gdGhlIGRhdGEtY29udGV4dC5cbiAgICovXG4gIHB1YmxpYyBpbmRleEJ5KGluZGV4Rm4/OiAoKGl0ZW06IFQpID0+IGFueSkpOiB0aGlzIHtcbiAgICB0aGlzLl9pbmRleEZuID0gaW5kZXhGbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVzaXJlZCBzaXplIG9mIGEgcGFnZS9jaHVuayB3aGVuIGxvYWRpbmcgZGF0YS5cbiAgICogTm90ZSB0aGF0IGNvbnRpbnVhYmxlIGFwaXMgbWlnaHQganVzdCB0YWtlIHRoaXMgYXMgYSB3aXNoIG9yIGV2ZW4gY29tcGxldGVseSBpZ25vcmUgdGhpcyBwYXJhbS5cbiAgICovXG4gIHB1YmxpYyBwYWdlU2l6ZShzaXplOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl9wYWdlU2l6ZSA9IHNpemU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU29ydCB0aGUgZGF0YSBjb250ZXh0IGxvY2FsbHkuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIG1pZ2h0IGJlIGEgY29zdGx5IG9wZXJhdGlvbiB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBlbGVtZW50cyBwcmVzZW50LlxuICAgKiBQcmVmZXIgc2VydmVyIHNpZGUgc29ydGluZyBpZiBwb3NzaWJsZS5cbiAgICovXG4gIHB1YmxpYyBsb2NhbFNvcnQobG9jYWxTb3J0PzogKGRhdGE6IFRbXSwgc29ydHM6IFNvcnRbXSkgPT4gVFtdKTogdGhpcyB7XG4gICAgdGhpcy5fbG9jYWxTb3J0ID0gbG9jYWxTb3J0ID8gbG9jYWxTb3J0IDogU29ydFV0aWwuc29ydERhdGE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIGFjdGl2ZSBwYWdpbmcgKGluIGNvbnRyYXN0IHRvIHRoZSBpbmZpbml0ZSBsb2FkKSBpbiB0aGUgZGF0YSBjb250ZXh0LlxuICAgKiBPbmx5IHN1cHBvcnRlZCBpZiB0aGUgdW5kZXJseWluZyBkYXRhc291cmNlIHN1cHBvcnRzIHBhZ2luYXRpb24uXG4gICAqL1xuICBwdWJsaWMgYWN0aXZlUGFnZWQoKTogdGhpcyB7XG4gICAgdGhpcy5fYWN0aXZlUGFnZWQgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciBlYWNoIGVsZW1lbnQgd2hpY2ggaXMgYWRkZWQgdG8gdGhlIGRhdGFjb250ZXh0LCBhcHBseSB0aGUgZ2l2ZW4gZnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgbG9jYWxBcHBseShsb2NhbEFwcGx5OiAoKGRhdGE6IFRbXSkgPT4gVFtdKSk6IHRoaXMge1xuICAgIHRoaXMuX2xvY2FsQXBwbHkgPSBsb2NhbEFwcGx5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIGEgbG9jYWwgY2hhbmdlIGV2ZW50LCBhdXRvbWF0aWNhbGx5IHJlbG9hZCBkYXRhIGluIHRoZSBkYXRhLWNvbnRleHQuXG4gICAqIFRoaXMgbWVhbnMgd2hlbmV2ZXIgdGhlcmUgd2FzIGFuIG1vZGlmeSBvcGVyYXRpb24gb24gdGhlIHJlc3QgY2xpZW50LFxuICAgKiBzdWNoIGFzIFVwZGF0ZSwgRGVsZXRlIG9yIENyZWF0ZSwgdGhlIGRhdGEgd2lsbCBiZSByZWxvYWRlZC5cbiAgICovXG4gIHB1YmxpYyByZWxvYWRPbkxvY2FsQ2hhbmdlcygpOiB0aGlzIHtcbiAgICB0aGlzLl9yZWxvYWRPbkxvY2FsQ2hhbmdlcyA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYXV0b1N0YXJ0QXNhcChzb3J0PzogU29ydFtdKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYXV0b1N0YXJ0T24oXG4gICAgICBBdXRvU3RhcnRTcGVjLmFzYXAoc29ydClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGF1dG9TdGFydE9uRmlsdGVycyhmaWx0ZXJzOiBBcnJheTxzdHJpbmdbXT4sIHNvcnQ/OiBTb3J0W10pOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hdXRvU3RhcnRPbihcbiAgICAgIEF1dG9TdGFydFNwZWMucmVxdWlyZUZpbHRlcnMoZmlsdGVycywgc29ydClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGF1dG9TdGFydE9uRmlsdGVyc0FsbChmaWx0ZXJzOiBzdHJpbmdbXSwgc29ydD86IFNvcnRbXSk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmF1dG9TdGFydE9uKFxuICAgICAgQXV0b1N0YXJ0U3BlYy5yZXF1aXJlRmlsdGVyc0FsbChmaWx0ZXJzLCBzb3J0KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXV0b1N0YXJ0T25GaWx0ZXJzQW55KGZpbHRlcnM6IHN0cmluZ1tdLCBzb3J0PzogU29ydFtdKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYXV0b1N0YXJ0T24oXG4gICAgICBBdXRvU3RhcnRTcGVjLnJlcXVpcmVGaWx0ZXJzQW55KGZpbHRlcnMsIHNvcnQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhdXRvU3RhcnRPbihzcGVjOiBBdXRvU3RhcnRTcGVjKTogdGhpcyB7XG4gICAgdGhpcy5fYXV0b1N0YXJ0U3BlYyA9IHNwZWM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRGF0YVNvdXJjZSBCdWlsZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogQnVpbGQgYSBuZXcgRGF0YUNvbnRleHQgZnJvbSB0aGUgZ2l2ZW4gRGF0YVNvdXJjZS5cbiAgICpcbiAgICogQ29tbW9uIERhdGFTb3VyY2VzIGFyZSBSZXN0Q2xpZW50LCBMb2NhbExpc3REYXRhU291cmNlIGFuZCBEZWxlZ2F0ZURhdGFTb3VyY2UuXG4gICAqXG4gICAqIEBwYXJhbSBkc1xuICAgKi9cbiAgcHVibGljIGJ1aWxkKGRzOiBJRGF0YVNvdXJjZTxUPik6IElEYXRhQ29udGV4dDxUPiB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRGcm9tU291cmNlKGRzKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBMb2NhbCBEYXRhIEJ1aWxkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBidWlsZExvY2FsKGl0ZW1zOiBUW10sIGlkUHJvcGVydHk/OiBzdHJpbmcpOiBJRGF0YUNvbnRleHQ8VD4ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkKFxuICAgICAgTG9jYWxMaXN0RGF0YVNvdXJjZS5mcm9tKGl0ZW1zLCBpZFByb3BlcnR5LCB0aGlzLl9sb2NhbFNvcnQsIEZpbHRlclV0aWwuZmlsdGVyRGF0YSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGJ1aWxkTG9jYWxBY3RpdmVQYWdlZChcbiAgICBkYXRhOiBUW10sXG4gICAgaWRQcm9wZXJ0eT86IHN0cmluZ1xuICApOiBJRGF0YUNvbnRleHRBY3RpdmVQYWdlPFQ+IHtcbiAgICB0aGlzLl9za2lwTG9jYWxTb3J0ID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2ZVBhZ2VkKCk7XG4gICAgcmV0dXJuIDxJRGF0YUNvbnRleHRBY3RpdmVQYWdlPFQ+PnRoaXMuYnVpbGQoXG4gICAgICBMb2NhbFBhZ2VkRGF0YVNvdXJjZS5mcm9tKGRhdGEsIGlkUHJvcGVydHksIHRoaXMuX2xvY2FsU29ydCwgRmlsdGVyVXRpbC5maWx0ZXJEYXRhKVxuICAgICk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRW1wdHkgRGF0YSBCdWlsZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgYnVpbGRFbXB0eSgpOiBJRGF0YUNvbnRleHQ8VD4ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkKFxuICAgICAgRGVsZWdhdGVEYXRhU291cmNlLmVtcHR5TGlzdEZldGNoZXIoKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRFbXB0eUNvbnRpbnVhYmxlKCk6IElEYXRhQ29udGV4dENvbnRpbnVhYmxlPFQ+IHtcbiAgICByZXR1cm4gPElEYXRhQ29udGV4dENvbnRpbnVhYmxlPFQ+PnRoaXMuYnVpbGQoXG4gICAgICBEZWxlZ2F0ZURhdGFTb3VyY2UuZW1wdHlDb250aW51YWJsZUZldGNoZXIoKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRFbXB0eUFjdGl2ZVBhZ2VkKCk6IElEYXRhQ29udGV4dEFjdGl2ZVBhZ2U8VD4ge1xuICAgIHJldHVybiA8SURhdGFDb250ZXh0QWN0aXZlUGFnZTxUPj50aGlzXG4gICAgICAuYWN0aXZlUGFnZWQoKVxuICAgICAgLmJ1aWxkKFxuICAgICAgICBEZWxlZ2F0ZURhdGFTb3VyY2UuZW1wdHlQYWdlRmV0Y2hlcigpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBMZWdhY3kgQ2xpZW50IEJ1aWxkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBTd2l0Y2ggdG8gYnVpbGQoZGF0YVNvdXJjZSlcbiAgICovXG4gIHB1YmxpYyBidWlsZENsaWVudChcbiAgICBkYXRhU291cmNlOiBJTGlzdERhdGFTb3VyY2U8VD5cbiAgKTogSURhdGFDb250ZXh0PFQ+IHtcbiAgICByZXR1cm4gdGhpcy5idWlsZChkYXRhU291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBTd2l0Y2ggdG8gYnVpbGQoZGF0YVNvdXJjZSlcbiAgICovXG4gIHB1YmxpYyBidWlsZFBhZ2VkQ2xpZW50KFxuICAgIGRhdGFTb3VyY2U6IElQYWdlZERhdGFTb3VyY2U8VD5cbiAgKTogSURhdGFDb250ZXh0Q29udGludWFibGU8VD4ge1xuICAgIHJldHVybiA8SURhdGFDb250ZXh0Q29udGludWFibGU8VD4+dGhpcy5idWlsZChkYXRhU291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBTd2l0Y2ggdG8gYnVpbGQoZGF0YVNvdXJjZSlcbiAgICovXG4gIHB1YmxpYyBidWlsZENvbnRpbnVhdGlvblRva2VuQ2xpZW50KFxuICAgIGRhdGFTb3VyY2U6IElDb250aW51YWJsZURhdGFTb3VyY2U8VD5cbiAgKTogSURhdGFDb250ZXh0Q29udGludWFibGU8VD4ge1xuICAgIHJldHVybiA8SURhdGFDb250ZXh0Q29udGludWFibGU8VD4+dGhpcy5idWlsZChkYXRhU291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBTd2l0Y2ggdG8gLmFjdGl2ZVBhZ2VkKCkuYnVpbGQoZGF0YVNvdXJjZSlcbiAgICovXG4gIHB1YmxpYyBidWlsZEFjdGl2ZVBhZ2VkQ2xpZW50KFxuICAgIGRhdGFTb3VyY2U6IElQYWdlZERhdGFTb3VyY2U8VD5cbiAgKTogSURhdGFDb250ZXh0QWN0aXZlUGFnZTxUPiB7XG4gICAgcmV0dXJuIDxJRGF0YUNvbnRleHRBY3RpdmVQYWdlPFQ+PnRoaXMuYWN0aXZlUGFnZWQoKS5idWlsZChkYXRhU291cmNlKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgYnVpbGRGcm9tU291cmNlKGRzOiBJRGF0YVNvdXJjZTxUPik6IElEYXRhQ29udGV4dDxUPiB7XG5cbiAgICBsZXQgZGF0YUNvbnRleHQ6IElEYXRhQ29udGV4dDxUPjtcblxuICAgIGlmIChpc0xpc3REYXRhU291cmNlKGRzKSkge1xuICAgICAgZGF0YUNvbnRleHQgPSB0aGlzLmZyb21MaXN0U291cmNlKGRzKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFnZWREYXRhU291cmNlKGRzKSkge1xuICAgICAgaWYgKHRoaXMuX2FjdGl2ZVBhZ2VkKSB7XG4gICAgICAgIGRhdGFDb250ZXh0ID0gdGhpcy5mcm9tQWN0aXZlUGFnZVNvdXJjZShkcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhQ29udGV4dCA9IHRoaXMuZnJvbVBhZ2VTb3VyY2UoZHMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNDb250aW51YWJsZURhdGFTb3VyY2UoZHMpKSB7XG4gICAgICBkYXRhQ29udGV4dCA9IHRoaXMuZnJvbUNvbnRpbnVhdGlvblNvdXJjZShkcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgSURhdGFTb3VyY2UgdHlwZTogJyArIHR5cGVvZiAoZHMpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYXV0b1N0YXJ0U3BlYykge1xuICAgICAgdGhpcy5zZXR1cERhdGFDb250ZXh0QXV0b1N0YXJ0KGRhdGFDb250ZXh0LCB0aGlzLl9hdXRvU3RhcnRTcGVjKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXR1cERhdGFDb250ZXh0QXV0b1JlbG9hZChkYXRhQ29udGV4dCwgZHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBmcm9tTGlzdFNvdXJjZShsaXN0U291cmNlOiBJTGlzdERhdGFTb3VyY2U8VD4pOiBJRGF0YUNvbnRleHQ8VD4ge1xuICAgIHJldHVybiBuZXcgRGF0YUNvbnRleHRTaW1wbGU8VD4oXG4gICAgICBsaXN0U291cmNlLFxuICAgICAgdGhpcy5faW5kZXhGbixcbiAgICAgIHRoaXMuX2xvY2FsQXBwbHksXG4gICAgICB0aGlzLl9sb2NhbFNvcnRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmcm9tUGFnZVNvdXJjZShwYWdlU291cmNlOiBJUGFnZWREYXRhU291cmNlPFQ+KTogSURhdGFDb250ZXh0Q29udGludWFibGU8VD4ge1xuICAgIHJldHVybiBuZXcgRGF0YUNvbnRleHRDb250aW51YWJsZVBhZ2VkPFQ+KFxuICAgICAgcGFnZVNvdXJjZSxcbiAgICAgIHRoaXMuX3BhZ2VTaXplLFxuICAgICAgdGhpcy5faW5kZXhGbixcbiAgICAgIHRoaXMuX2xvY2FsQXBwbHksXG4gICAgICB0aGlzLl9sb2NhbFNvcnRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmcm9tQ29udGludWF0aW9uU291cmNlKGNvbnRpbnVhdGlvblNvdXJjZTogSUNvbnRpbnVhYmxlRGF0YVNvdXJjZTxUPik6IElEYXRhQ29udGV4dENvbnRpbnVhYmxlPFQ+IHtcbiAgICByZXR1cm4gbmV3IERhdGFDb250ZXh0Q29udGludWFibGVUb2tlbjxUPihcbiAgICAgIGNvbnRpbnVhdGlvblNvdXJjZSxcbiAgICAgIHRoaXMuX3BhZ2VTaXplLFxuICAgICAgdGhpcy5faW5kZXhGbixcbiAgICAgIHRoaXMuX2xvY2FsQXBwbHksXG4gICAgICB0aGlzLl9sb2NhbFNvcnRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmcm9tQWN0aXZlUGFnZVNvdXJjZShwYWdlU291cmNlOiBJUGFnZWREYXRhU291cmNlPFQ+KTogSURhdGFDb250ZXh0QWN0aXZlUGFnZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhQ29udGV4dEFjdGl2ZVBhZ2U8VD4oXG4gICAgICBwYWdlU291cmNlLFxuICAgICAgdGhpcy5fcGFnZVNpemUsXG4gICAgICB0aGlzLl9pbmRleEZuLFxuICAgICAgdGhpcy5fbG9jYWxBcHBseSxcbiAgICAgIHRoaXMuX3NraXBMb2NhbFNvcnQgPyBudWxsIDogdGhpcy5fbG9jYWxTb3J0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBEYXRhQ29udGV4dEF1dG9SZWxvYWQ8REMgZXh0ZW5kcyBJRGF0YUNvbnRleHQ8VD4+KGRjOiBEQywgZGF0YVNvdXJjZTogSURhdGFTb3VyY2U8YW55Pik6IERDIHtcbiAgICBpZiAodGhpcy5fcmVsb2FkT25Mb2NhbENoYW5nZXMpIHtcbiAgICAgIGNvbnN0IGJpbmRpbmcgPSBuZXcgRGF0YUNvbnRleHRTb3VyY2VBdXRvUmVsb2FkZXIoZGMsIGRhdGFTb3VyY2UpO1xuICAgIH1cbiAgICByZXR1cm4gZGM7XG4gIH1cblxuICBwcml2YXRlIHNldHVwRGF0YUNvbnRleHRBdXRvU3RhcnQ8REMgZXh0ZW5kcyBJRGF0YUNvbnRleHQ8VD4+KGRjOiBEQywgYXV0b1N0YXJ0U3BlYzogQXV0b1N0YXJ0U3BlYyk6IERDIHtcbiAgICBpZiAodGhpcy5fYXV0b1N0YXJ0U3BlYykge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1NldHRpbmcgdXAgZGF0YSBjb250ZXh0IGF1dG8gc3RhcnQgd2l0aCBzcGVjOicsIHRoaXMuX2F1dG9TdGFydFNwZWMpO1xuICAgICAgY29uc3QgYmluZGluZyA9IG5ldyBEYXRhQ29udGV4dEF1dG9TdGFydGVyKGRjLCBhdXRvU3RhcnRTcGVjKTtcbiAgICB9XG4gICAgcmV0dXJuIGRjO1xuICB9XG5cbn1cbiJdfQ==
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1jb250ZXh0LWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21tb24vZGF0YS9kYXRhLWNvbnRleHQvZGF0YS1jb250ZXh0LWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDN0UsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRWpFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRTdFLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQy9FLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBS0wsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDbEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUMsYUFBYSxFQUFFLHNCQUFzQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDbEYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRW5EOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQWlDN0I7Ozs7Z0ZBSTRFO0lBRTVFO1FBckNBOzs7O29GQUk0RTtR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RUFBRSxhQUFhLENBQUMsQ0FBQztTQUMvRDtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEYXRhQ29udGV4dENvbnRpbnVhYmxlUGFnZWR9IGZyb20gJy4vZGF0YS1jb250ZXh0LWNvbnRpbnVhYmxlLXBhZ2VkJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtEYXRhQ29udGV4dFNpbXBsZX0gZnJvbSAnLi9kYXRhLWNvbnRleHQtc2ltcGxlJztcbmltcG9ydCB7RGF0YUNvbnRleHRBY3RpdmVQYWdlfSBmcm9tICcuL2RhdGEtY29udGV4dC1hY3RpdmUtcGFnZSc7XG5pbXBvcnQge1NvcnR9IGZyb20gJy4uL3NvcnQnO1xuaW1wb3J0IHtEYXRhQ29udGV4dENvbnRpbnVhYmxlVG9rZW59IGZyb20gJy4vZGF0YS1jb250ZXh0LWNvbnRpbnVhYmxlLXRva2VuJztcbmltcG9ydCB7SURhdGFDb250ZXh0LCBJRGF0YUNvbnRleHRBY3RpdmVQYWdlLCBJRGF0YUNvbnRleHRDb250aW51YWJsZX0gZnJvbSAnLi9kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtEYXRhQ29udGV4dFNvdXJjZUV2ZW50QmluZGluZ30gZnJvbSAnLi9kYXRhLWNvbnRleHQtc291cmNlLWV2ZW50LWJpbmRpbmcnO1xuaW1wb3J0IHtMb2NhbFBhZ2VkRGF0YVNvdXJjZX0gZnJvbSAnLi4vZGF0YXNvdXJjZS9sb2NhbC9sb2NhbC1wYWdlZC1kYXRhLXNvdXJjZSc7XG5pbXBvcnQge0xvY2FsTGlzdERhdGFTb3VyY2V9IGZyb20gJy4uL2RhdGFzb3VyY2UvbG9jYWwvbG9jYWwtbGlzdC1kYXRhLXNvdXJjZSc7XG5pbXBvcnQge1NvcnRVdGlsfSBmcm9tICcuLi8uLi91dGlscy9zb3J0LXV0aWwnO1xuaW1wb3J0IHtcbiAgSUNvbnRpbnVhYmxlRGF0YVNvdXJjZSxcbiAgSURhdGFTb3VyY2UsXG4gIElMaXN0RGF0YVNvdXJjZSxcbiAgSVBhZ2VkRGF0YVNvdXJjZSxcbiAgaXNDb250aW51YWJsZURhdGFTb3VyY2UsXG4gIGlzTGlzdERhdGFTb3VyY2UsXG4gIGlzUGFnZWREYXRhU291cmNlXG59IGZyb20gJy4uL2RhdGFzb3VyY2UvZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtEZWxlZ2F0ZURhdGFTb3VyY2V9IGZyb20gJy4uL2RhdGFzb3VyY2UvZmV0Y2hlci9kZWxlZ2F0ZS1kYXRhLXNvdXJjZSc7XG5pbXBvcnQge0F1dG9TdGFydFNwZWMsIERhdGFDb250ZXh0QXV0b1N0YXJ0ZXJ9IGZyb20gJy4vZGF0YS1jb250ZXh0LWF1dG8tc3RhcnRlcic7XG5pbXBvcnQge0ZpbHRlclV0aWx9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbHRlci11dGlsJztcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBidWlsZCBhIElEYXRhQ29udGV4dDxUPi5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFDb250ZXh0QnVpbGRlcjxUPiB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIHByaXZhdGUgX2luZGV4Rm4/OiAoKGl0ZW06IFQpID0+IGFueSk7XG4gIHByaXZhdGUgX2xvY2FsQXBwbHk/OiAoKGRhdGE6IFRbXSkgPT4gVFtdKTtcbiAgcHJpdmF0ZSBfbG9jYWxTb3J0PzogKChkYXRhOiBUW10sIHNvcnRzOiBTb3J0W10pID0+IFRbXSk7XG4gIHByaXZhdGUgX3NraXBMb2NhbFNvcnQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcGFnZVNpemUgPSA1MDtcbiAgcHJpdmF0ZSBfcmVsb2FkT25Mb2NhbENoYW5nZXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYWN0aXZlUGFnZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYXV0b1N0YXJ0U3BlYz86IEF1dG9TdGFydFNwZWM7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFN0YXRpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgRGF0YUNvbnRleHRCdWlsZGVyLlxuICAgKiBAcmV0dXJucyBBIG5ldyBEYXRhQ29udGV4dEJ1aWxkZXIgZm9yIHRoZSBnaXZlbiBkYXRhIHR5cGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHN0YXJ0PFQ+KCk6IERhdGFDb250ZXh0QnVpbGRlcjxUPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhQ29udGV4dEJ1aWxkZXI8VD4oKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGluZGV4IGZ1bmN0aW9uIHdoZXJlIGVhY2ggZWxlbWVudCB3aWxsIGJlIGluZGV4ZWQgYnkuXG4gICAqIElmIHlvdSBoYXZlIGNvbmZpZ3VyZWQgdGhpcywgeW91IGNhbiB1c2UgdGhlIGZpbmRCeUluZGV4KGtleSkgb24gdGhlIGRhdGEtY29udGV4dC5cbiAgICovXG4gIHB1YmxpYyBpbmRleEJ5KGluZGV4Rm4/OiAoKGl0ZW06IFQpID0+IGFueSkpOiB0aGlzIHtcbiAgICB0aGlzLl9pbmRleEZuID0gaW5kZXhGbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVzaXJlZCBzaXplIG9mIGEgcGFnZS9jaHVuayB3aGVuIGxvYWRpbmcgZGF0YS5cbiAgICogTm90ZSB0aGF0IGNvbnRpbnVhYmxlIGFwaXMgbWlnaHQganVzdCB0YWtlIHRoaXMgYXMgYSB3aXNoIG9yIGV2ZW4gY29tcGxldGVseSBpZ25vcmUgdGhpcyBwYXJhbS5cbiAgICovXG4gIHB1YmxpYyBwYWdlU2l6ZShzaXplOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl9wYWdlU2l6ZSA9IHNpemU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU29ydCB0aGUgZGF0YSBjb250ZXh0IGxvY2FsbHkuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIG1pZ2h0IGJlIGEgY29zdGx5IG9wZXJhdGlvbiB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBlbGVtZW50cyBwcmVzZW50LlxuICAgKiBQcmVmZXIgc2VydmVyIHNpZGUgc29ydGluZyBpZiBwb3NzaWJsZS5cbiAgICovXG4gIHB1YmxpYyBsb2NhbFNvcnQobG9jYWxTb3J0PzogKGRhdGE6IFRbXSwgc29ydHM6IFNvcnRbXSkgPT4gVFtdKTogdGhpcyB7XG4gICAgdGhpcy5fbG9jYWxTb3J0ID0gbG9jYWxTb3J0ID8gbG9jYWxTb3J0IDogU29ydFV0aWwuc29ydERhdGE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIGFjdGl2ZSBwYWdpbmcgKGluIGNvbnRyYXN0IHRvIHRoZSBpbmZpbml0ZSBsb2FkKSBpbiB0aGUgZGF0YSBjb250ZXh0LlxuICAgKiBPbmx5IHN1cHBvcnRlZCBpZiB0aGUgdW5kZXJseWluZyBkYXRhc291cmNlIHN1cHBvcnRzIHBhZ2luYXRpb24uXG4gICAqL1xuICBwdWJsaWMgYWN0aXZlUGFnZWQoKTogdGhpcyB7XG4gICAgdGhpcy5fYWN0aXZlUGFnZWQgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciBlYWNoIGVsZW1lbnQgd2hpY2ggaXMgYWRkZWQgdG8gdGhlIGRhdGFjb250ZXh0LCBhcHBseSB0aGUgZ2l2ZW4gZnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgbG9jYWxBcHBseShsb2NhbEFwcGx5OiAoKGRhdGE6IFRbXSkgPT4gVFtdKSk6IHRoaXMge1xuICAgIHRoaXMuX2xvY2FsQXBwbHkgPSBsb2NhbEFwcGx5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIGEgbG9jYWwgY2hhbmdlIGV2ZW50LCBhdXRvbWF0aWNhbGx5IHJlbG9hZCBkYXRhIGluIHRoZSBkYXRhLWNvbnRleHQuXG4gICAqIFRoaXMgbWVhbnMgd2hlbmV2ZXIgdGhlcmUgd2FzIGFuIG1vZGlmeSBvcGVyYXRpb24gb24gdGhlIHJlc3QgY2xpZW50LFxuICAgKiBzdWNoIGFzIFVwZGF0ZSwgRGVsZXRlIG9yIENyZWF0ZSwgdGhlIGRhdGEgd2lsbCBiZSByZWxvYWRlZC5cbiAgICovXG4gIHB1YmxpYyByZWxvYWRPbkxvY2FsQ2hhbmdlcygpOiB0aGlzIHtcbiAgICB0aGlzLl9yZWxvYWRPbkxvY2FsQ2hhbmdlcyA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYXV0b1N0YXJ0QXNhcChzb3J0PzogU29ydFtdKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYXV0b1N0YXJ0T24oXG4gICAgICBBdXRvU3RhcnRTcGVjLmFzYXAoc29ydClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGF1dG9TdGFydE9uRmlsdGVycyhmaWx0ZXJzOiBBcnJheTxzdHJpbmdbXT4sIHNvcnQ/OiBTb3J0W10pOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hdXRvU3RhcnRPbihcbiAgICAgIEF1dG9TdGFydFNwZWMucmVxdWlyZUZpbHRlcnMoZmlsdGVycywgc29ydClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGF1dG9TdGFydE9uRmlsdGVyc0FsbChmaWx0ZXJzOiBzdHJpbmdbXSwgc29ydD86IFNvcnRbXSk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmF1dG9TdGFydE9uKFxuICAgICAgQXV0b1N0YXJ0U3BlYy5yZXF1aXJlRmlsdGVyc0FsbChmaWx0ZXJzLCBzb3J0KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXV0b1N0YXJ0T25GaWx0ZXJzQW55KGZpbHRlcnM6IHN0cmluZ1tdLCBzb3J0PzogU29ydFtdKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYXV0b1N0YXJ0T24oXG4gICAgICBBdXRvU3RhcnRTcGVjLnJlcXVpcmVGaWx0ZXJzQW55KGZpbHRlcnMsIHNvcnQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhdXRvU3RhcnRPbihzcGVjOiBBdXRvU3RhcnRTcGVjKTogdGhpcyB7XG4gICAgdGhpcy5fYXV0b1N0YXJ0U3BlYyA9IHNwZWM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRGF0YVNvdXJjZSBCdWlsZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogQnVpbGQgYSBuZXcgRGF0YUNvbnRleHQgZnJvbSB0aGUgZ2l2ZW4gRGF0YVNvdXJjZS5cbiAgICpcbiAgICogQ29tbW9uIERhdGFTb3VyY2VzIGFyZSBSZXN0Q2xpZW50LCBMb2NhbExpc3REYXRhU291cmNlIGFuZCBEZWxlZ2F0ZURhdGFTb3VyY2UuXG4gICAqXG4gICAqIEBwYXJhbSBkc1xuICAgKi9cbiAgcHVibGljIGJ1aWxkKGRzOiBJRGF0YVNvdXJjZTxUPik6IElEYXRhQ29udGV4dDxUPiB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRGcm9tU291cmNlKGRzKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBMb2NhbCBEYXRhIEJ1aWxkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBidWlsZExvY2FsKGl0ZW1zOiBUW10sIGlkUHJvcGVydHk/OiBzdHJpbmcpOiBJRGF0YUNvbnRleHQ8VD4ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkKFxuICAgICAgdGhpcy5sb2NhbExpc3RTb3VyY2UoaXRlbXMsIGlkUHJvcGVydHkpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZExvY2FsQWN0aXZlUGFnZWQoXG4gICAgaXRlbXM6IFRbXSxcbiAgICBpZFByb3BlcnR5Pzogc3RyaW5nXG4gICk6IElEYXRhQ29udGV4dEFjdGl2ZVBhZ2U8VD4ge1xuICAgIHRoaXMuX3NraXBMb2NhbFNvcnQgPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZlUGFnZWQoKTtcbiAgICByZXR1cm4gPElEYXRhQ29udGV4dEFjdGl2ZVBhZ2U8VD4+dGhpcy5idWlsZChcbiAgICAgIExvY2FsUGFnZWREYXRhU291cmNlLm9mKFxuICAgICAgICB0aGlzLmxvY2FsTGlzdFNvdXJjZShpdGVtcywgaWRQcm9wZXJ0eSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2NhbExpc3RTb3VyY2UoaXRlbXM6IFRbXSwgaWRQcm9wZXJ0eT86IHN0cmluZyk6IExvY2FsTGlzdERhdGFTb3VyY2U8VD4ge1xuICAgIHJldHVybiBMb2NhbExpc3REYXRhU291cmNlLmZyb20oaXRlbXMsIGlkUHJvcGVydHksIHRoaXMuX2xvY2FsU29ydCwgRmlsdGVyVXRpbC5maWx0ZXJEYXRhKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBFbXB0eSBEYXRhIEJ1aWxkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBidWlsZEVtcHR5KCk6IElEYXRhQ29udGV4dDxUPiB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGQoXG4gICAgICBEZWxlZ2F0ZURhdGFTb3VyY2UuZW1wdHlMaXN0RmV0Y2hlcigpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZEVtcHR5Q29udGludWFibGUoKTogSURhdGFDb250ZXh0Q29udGludWFibGU8VD4ge1xuICAgIHJldHVybiA8SURhdGFDb250ZXh0Q29udGludWFibGU8VD4+dGhpcy5idWlsZChcbiAgICAgIERlbGVnYXRlRGF0YVNvdXJjZS5lbXB0eUNvbnRpbnVhYmxlRmV0Y2hlcigpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZEVtcHR5QWN0aXZlUGFnZWQoKTogSURhdGFDb250ZXh0QWN0aXZlUGFnZTxUPiB7XG4gICAgcmV0dXJuIDxJRGF0YUNvbnRleHRBY3RpdmVQYWdlPFQ+PnRoaXNcbiAgICAgIC5hY3RpdmVQYWdlZCgpXG4gICAgICAuYnVpbGQoXG4gICAgICAgIERlbGVnYXRlRGF0YVNvdXJjZS5lbXB0eVBhZ2VGZXRjaGVyKCksXG4gICAgICApO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExlZ2FjeSBDbGllbnQgQnVpbGRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFN3aXRjaCB0byBidWlsZChkYXRhU291cmNlKVxuICAgKi9cbiAgcHVibGljIGJ1aWxkQ2xpZW50KFxuICAgIGRhdGFTb3VyY2U6IElMaXN0RGF0YVNvdXJjZTxUPlxuICApOiBJRGF0YUNvbnRleHQ8VD4ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkKGRhdGFTb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFN3aXRjaCB0byBidWlsZChkYXRhU291cmNlKVxuICAgKi9cbiAgcHVibGljIGJ1aWxkUGFnZWRDbGllbnQoXG4gICAgZGF0YVNvdXJjZTogSVBhZ2VkRGF0YVNvdXJjZTxUPlxuICApOiBJRGF0YUNvbnRleHRDb250aW51YWJsZTxUPiB7XG4gICAgcmV0dXJuIDxJRGF0YUNvbnRleHRDb250aW51YWJsZTxUPj50aGlzLmJ1aWxkKGRhdGFTb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFN3aXRjaCB0byBidWlsZChkYXRhU291cmNlKVxuICAgKi9cbiAgcHVibGljIGJ1aWxkQ29udGludWF0aW9uVG9rZW5DbGllbnQoXG4gICAgZGF0YVNvdXJjZTogSUNvbnRpbnVhYmxlRGF0YVNvdXJjZTxUPlxuICApOiBJRGF0YUNvbnRleHRDb250aW51YWJsZTxUPiB7XG4gICAgcmV0dXJuIDxJRGF0YUNvbnRleHRDb250aW51YWJsZTxUPj50aGlzLmJ1aWxkKGRhdGFTb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFN3aXRjaCB0byAuYWN0aXZlUGFnZWQoKS5idWlsZChkYXRhU291cmNlKVxuICAgKi9cbiAgcHVibGljIGJ1aWxkQWN0aXZlUGFnZWRDbGllbnQoXG4gICAgZGF0YVNvdXJjZTogSVBhZ2VkRGF0YVNvdXJjZTxUPlxuICApOiBJRGF0YUNvbnRleHRBY3RpdmVQYWdlPFQ+IHtcbiAgICByZXR1cm4gPElEYXRhQ29udGV4dEFjdGl2ZVBhZ2U8VD4+dGhpcy5hY3RpdmVQYWdlZCgpLmJ1aWxkKGRhdGFTb3VyY2UpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBidWlsZEZyb21Tb3VyY2UoZHM6IElEYXRhU291cmNlPFQ+KTogSURhdGFDb250ZXh0PFQ+IHtcblxuICAgIGxldCBkYXRhQ29udGV4dDogSURhdGFDb250ZXh0PFQ+O1xuXG4gICAgaWYgKGlzTGlzdERhdGFTb3VyY2UoZHMpKSB7XG4gICAgICBkYXRhQ29udGV4dCA9IHRoaXMuZnJvbUxpc3RTb3VyY2UoZHMpO1xuICAgIH0gZWxzZSBpZiAoaXNQYWdlZERhdGFTb3VyY2UoZHMpKSB7XG4gICAgICBpZiAodGhpcy5fYWN0aXZlUGFnZWQpIHtcbiAgICAgICAgZGF0YUNvbnRleHQgPSB0aGlzLmZyb21BY3RpdmVQYWdlU291cmNlKGRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGFDb250ZXh0ID0gdGhpcy5mcm9tUGFnZVNvdXJjZShkcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0NvbnRpbnVhYmxlRGF0YVNvdXJjZShkcykpIHtcbiAgICAgIGRhdGFDb250ZXh0ID0gdGhpcy5mcm9tQ29udGludWF0aW9uU291cmNlKGRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBJRGF0YVNvdXJjZSB0eXBlOiAnICsgdHlwZW9mIChkcykpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9hdXRvU3RhcnRTcGVjKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YUNvbnRleHRBdXRvU3RhcnQoZGF0YUNvbnRleHQsIHRoaXMuX2F1dG9TdGFydFNwZWMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNldHVwRGF0YUNvbnRleHRBdXRvUmVsb2FkKGRhdGFDb250ZXh0LCBkcyk7XG4gIH1cblxuICBwcml2YXRlIGZyb21MaXN0U291cmNlKGxpc3RTb3VyY2U6IElMaXN0RGF0YVNvdXJjZTxUPik6IElEYXRhQ29udGV4dDxUPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhQ29udGV4dFNpbXBsZTxUPihcbiAgICAgIGxpc3RTb3VyY2UsXG4gICAgICB0aGlzLl9pbmRleEZuLFxuICAgICAgdGhpcy5fbG9jYWxBcHBseSxcbiAgICAgIHRoaXMuX2xvY2FsU29ydFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZyb21QYWdlU291cmNlKHBhZ2VTb3VyY2U6IElQYWdlZERhdGFTb3VyY2U8VD4pOiBJRGF0YUNvbnRleHRDb250aW51YWJsZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhQ29udGV4dENvbnRpbnVhYmxlUGFnZWQ8VD4oXG4gICAgICBwYWdlU291cmNlLFxuICAgICAgdGhpcy5fcGFnZVNpemUsXG4gICAgICB0aGlzLl9pbmRleEZuLFxuICAgICAgdGhpcy5fbG9jYWxBcHBseSxcbiAgICAgIHRoaXMuX2xvY2FsU29ydFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZyb21Db250aW51YXRpb25Tb3VyY2UoY29udGludWF0aW9uU291cmNlOiBJQ29udGludWFibGVEYXRhU291cmNlPFQ+KTogSURhdGFDb250ZXh0Q29udGludWFibGU8VD4ge1xuICAgIHJldHVybiBuZXcgRGF0YUNvbnRleHRDb250aW51YWJsZVRva2VuPFQ+KFxuICAgICAgY29udGludWF0aW9uU291cmNlLFxuICAgICAgdGhpcy5fcGFnZVNpemUsXG4gICAgICB0aGlzLl9pbmRleEZuLFxuICAgICAgdGhpcy5fbG9jYWxBcHBseSxcbiAgICAgIHRoaXMuX2xvY2FsU29ydFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZyb21BY3RpdmVQYWdlU291cmNlKHBhZ2VTb3VyY2U6IElQYWdlZERhdGFTb3VyY2U8VD4pOiBJRGF0YUNvbnRleHRBY3RpdmVQYWdlPFQ+IHtcbiAgICByZXR1cm4gbmV3IERhdGFDb250ZXh0QWN0aXZlUGFnZTxUPihcbiAgICAgIHBhZ2VTb3VyY2UsXG4gICAgICB0aGlzLl9wYWdlU2l6ZSxcbiAgICAgIHRoaXMuX2luZGV4Rm4sXG4gICAgICB0aGlzLl9sb2NhbEFwcGx5LFxuICAgICAgdGhpcy5fc2tpcExvY2FsU29ydCA/IG51bGwgOiB0aGlzLl9sb2NhbFNvcnRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cERhdGFDb250ZXh0QXV0b1JlbG9hZDxEQyBleHRlbmRzIElEYXRhQ29udGV4dDxUPj4oZGM6IERDLCBkYXRhU291cmNlOiBJRGF0YVNvdXJjZTxhbnk+KTogREMge1xuICAgIGNvbnN0IGJpbmRpbmcgPSBuZXcgRGF0YUNvbnRleHRTb3VyY2VFdmVudEJpbmRpbmcoXG4gICAgICBkYyxcbiAgICAgIGRhdGFTb3VyY2UsXG4gICAgICB0aGlzLl9yZWxvYWRPbkxvY2FsQ2hhbmdlc1xuICAgICk7XG4gICAgcmV0dXJuIGRjO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cERhdGFDb250ZXh0QXV0b1N0YXJ0PERDIGV4dGVuZHMgSURhdGFDb250ZXh0PFQ+PihkYzogREMsIGF1dG9TdGFydFNwZWM6IEF1dG9TdGFydFNwZWMpOiBEQyB7XG4gICAgaWYgKHRoaXMuX2F1dG9TdGFydFNwZWMpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTZXR0aW5nIHVwIGRhdGEgY29udGV4dCBhdXRvIHN0YXJ0IHdpdGggc3BlYzonLCB0aGlzLl9hdXRvU3RhcnRTcGVjKTtcbiAgICAgIGNvbnN0IGJpbmRpbmcgPSBuZXcgRGF0YUNvbnRleHRBdXRvU3RhcnRlcihkYywgYXV0b1N0YXJ0U3BlYyk7XG4gICAgfVxuICAgIHJldHVybiBkYztcbiAgfVxuXG59XG4iXX0=