@fundamental-ngx/cdk 0.41.1-rc.9 → 0.42.0-rc.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 (29) hide show
  1. package/esm2020/utils/async-strategy/function-strategy.class.mjs +12 -0
  2. package/esm2020/utils/async-strategy/index.mjs +7 -0
  3. package/esm2020/utils/async-strategy/observable-strategy.class.mjs +13 -0
  4. package/esm2020/utils/async-strategy/promise-strategy.class.mjs +12 -0
  5. package/esm2020/utils/async-strategy/select-strategy.class.mjs +23 -0
  6. package/esm2020/utils/async-strategy/subscription-strategy.interface.mjs +2 -0
  7. package/esm2020/utils/async-strategy/value-strategy.class.mjs +10 -0
  8. package/esm2020/utils/drag-and-drop/dnd-item/dnd-item.directive.mjs +22 -6
  9. package/esm2020/utils/drag-and-drop/dnd-list/dnd-list.directive.mjs +101 -42
  10. package/esm2020/utils/drag-and-drop/dnd.interfaces.mjs +1 -1
  11. package/esm2020/utils/index.mjs +2 -1
  12. package/fesm2015/fundamental-ngx-cdk-utils.mjs +195 -55
  13. package/fesm2015/fundamental-ngx-cdk-utils.mjs.map +1 -1
  14. package/fesm2020/fundamental-ngx-cdk-utils.mjs +182 -45
  15. package/fesm2020/fundamental-ngx-cdk-utils.mjs.map +1 -1
  16. package/fundamental-ngx-cdk-v0.42.0-rc.0.tgz +0 -0
  17. package/package.json +2 -2
  18. package/utils/async-strategy/function-strategy.class.d.ts +8 -0
  19. package/utils/async-strategy/index.d.ts +6 -0
  20. package/utils/async-strategy/observable-strategy.class.d.ts +9 -0
  21. package/utils/async-strategy/promise-strategy.class.d.ts +8 -0
  22. package/utils/async-strategy/select-strategy.class.d.ts +8 -0
  23. package/utils/async-strategy/subscription-strategy.interface.d.ts +10 -0
  24. package/utils/async-strategy/value-strategy.class.d.ts +8 -0
  25. package/utils/drag-and-drop/dnd-item/dnd-item.directive.d.ts +16 -7
  26. package/utils/drag-and-drop/dnd-list/dnd-list.directive.d.ts +36 -15
  27. package/utils/drag-and-drop/dnd.interfaces.d.ts +10 -7
  28. package/utils/index.d.ts +1 -0
  29. package/fundamental-ngx-cdk-v0.41.1-rc.9.tgz +0 -0
@@ -0,0 +1,12 @@
1
+ import { isFunction } from '../typecheck';
2
+ /**
3
+ * @description Executes function and passes returned value into callback function.
4
+ */
5
+ export class FunctionStrategy {
6
+ /** @hidden */
7
+ createSubscription(fn, updateLatestValue) {
8
+ const result = isFunction(fn) ? fn() : fn;
9
+ return Promise.resolve(result).then(updateLatestValue);
10
+ }
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tc3RyYXRlZ3kuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL3V0aWxzL2FzeW5jLXN0cmF0ZWd5L2Z1bmN0aW9uLXN0cmF0ZWd5LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHMUM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ3pCLGNBQWM7SUFDZCxrQkFBa0IsQ0FBQyxFQUFXLEVBQUUsaUJBQWdDO1FBQzVELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFRLEVBQVMsQ0FBQztRQUN4RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0QsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVjaGVjayc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25TdHJhdGVneSB9IGZyb20gJy4vc3Vic2NyaXB0aW9uLXN0cmF0ZWd5LmludGVyZmFjZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGZ1bmN0aW9uIGFuZCBwYXNzZXMgcmV0dXJuZWQgdmFsdWUgaW50byBjYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uU3RyYXRlZ3k8VD4gaW1wbGVtZW50cyBTdWJzY3JpcHRpb25TdHJhdGVneTxUPiB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjcmVhdGVTdWJzY3JpcHRpb24oZm46ICgpID0+IFQsIHVwZGF0ZUxhdGVzdFZhbHVlOiAodjogVCkgPT4gYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRnVuY3Rpb24oZm4pID8gZm4oKSA6ICgoPGFueT5mbikgYXMgVCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKHVwZGF0ZUxhdGVzdFZhbHVlKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ export * from './function-strategy.class';
2
+ export * from './observable-strategy.class';
3
+ export * from './promise-strategy.class';
4
+ export * from './select-strategy.class';
5
+ export * from './value-strategy.class';
6
+ export * from './subscription-strategy.interface';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL3V0aWxzL2FzeW5jLXN0cmF0ZWd5L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbi1zdHJhdGVneS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL29ic2VydmFibGUtc3RyYXRlZ3kuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9taXNlLXN0cmF0ZWd5LmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VsZWN0LXN0cmF0ZWd5LmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vdmFsdWUtc3RyYXRlZ3kuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpcHRpb24tc3RyYXRlZ3kuaW50ZXJmYWNlJztcbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import { firstValueFrom } from 'rxjs';
2
+ /**
3
+ * @description Converts observable into Promise and passes returned value into callback function.
4
+ */
5
+ export class ObservableStrategy {
6
+ /** @hidden */
7
+ createSubscription(async, updateLatestValue) {
8
+ return firstValueFrom(async).then(updateLatestValue, (e) => {
9
+ console.error(e);
10
+ });
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZS1zdHJhdGVneS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvdXRpbHMvYXN5bmMtc3RyYXRlZ3kvb2JzZXJ2YWJsZS1zdHJhdGVneS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR2xEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQUMzQixjQUFjO0lBQ2Qsa0JBQWtCLENBQUMsS0FBb0IsRUFBRSxpQkFBc0I7UUFDM0QsT0FBTyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25TdHJhdGVneSB9IGZyb20gJy4vc3Vic2NyaXB0aW9uLXN0cmF0ZWd5LmludGVyZmFjZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIG9ic2VydmFibGUgaW50byBQcm9taXNlIGFuZCBwYXNzZXMgcmV0dXJuZWQgdmFsdWUgaW50byBjYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIE9ic2VydmFibGVTdHJhdGVneTxUPiBpbXBsZW1lbnRzIFN1YnNjcmlwdGlvblN0cmF0ZWd5PFQ+IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNyZWF0ZVN1YnNjcmlwdGlvbihhc3luYzogT2JzZXJ2YWJsZTxUPiwgdXBkYXRlTGF0ZXN0VmFsdWU6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20oYXN5bmMpLnRoZW4odXBkYXRlTGF0ZXN0VmFsdWUsIChlKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @description awaits for promise to resolve it's value and passes returned value into callback function.
3
+ */
4
+ export class PromiseStrategy {
5
+ /** @hidden */
6
+ createSubscription(async, updateLatestValue) {
7
+ return async.then(updateLatestValue, (e) => {
8
+ console.error(e);
9
+ });
10
+ }
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbWlzZS1zdHJhdGVneS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvdXRpbHMvYXN5bmMtc3RyYXRlZ3kvcHJvbWlzZS1zdHJhdGVneS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQ3hCLGNBQWM7SUFDZCxrQkFBa0IsQ0FBQyxLQUFpQixFQUFFLGlCQUFnQztRQUNsRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3Vic2NyaXB0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3N1YnNjcmlwdGlvbi1zdHJhdGVneS5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBhd2FpdHMgZm9yIHByb21pc2UgdG8gcmVzb2x2ZSBpdCdzIHZhbHVlIGFuZCBwYXNzZXMgcmV0dXJuZWQgdmFsdWUgaW50byBjYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFByb21pc2VTdHJhdGVneTxUPiBpbXBsZW1lbnRzIFN1YnNjcmlwdGlvblN0cmF0ZWd5PFQ+IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNyZWF0ZVN1YnNjcmlwdGlvbihhc3luYzogUHJvbWlzZTxUPiwgdXBkYXRlTGF0ZXN0VmFsdWU6ICh2OiBUKSA9PiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIGFzeW5jLnRoZW4odXBkYXRlTGF0ZXN0VmFsdWUsIChlKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,23 @@
1
+ import { isFunction, isPromise, isSubscribable } from '../typecheck';
2
+ import { FunctionStrategy } from './function-strategy.class';
3
+ import { ObservableStrategy } from './observable-strategy.class';
4
+ import { PromiseStrategy } from './promise-strategy.class';
5
+ import { ValueStrategy } from './value-strategy.class';
6
+ /**
7
+ * @description Selects appropriate strategy on how to resolve function value
8
+ * @param obj object to get value from
9
+ * @returns appropriate strategy to retrieve value from the object
10
+ */
11
+ export function selectStrategy(obj) {
12
+ if (isPromise(obj)) {
13
+ return new PromiseStrategy();
14
+ }
15
+ if (isSubscribable(obj)) {
16
+ return new ObservableStrategy();
17
+ }
18
+ if (isFunction(obj)) {
19
+ return new FunctionStrategy();
20
+ }
21
+ return new ValueStrategy();
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXN0cmF0ZWd5LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi91dGlscy9hc3luYy1zdHJhdGVneS9zZWxlY3Qtc3RyYXRlZ3kuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQVUsR0FBa0Q7SUFDdEYsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxJQUFJLGVBQWUsRUFBSyxDQUFDO0tBQ25DO0lBRUQsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDckIsT0FBTyxJQUFJLGtCQUFrQixFQUFLLENBQUM7S0FDdEM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNqQixPQUFPLElBQUksZ0JBQWdCLEVBQUssQ0FBQztLQUNwQztJQUVELE9BQU8sSUFBSSxhQUFhLEVBQUssQ0FBQztBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBpc1N1YnNjcmliYWJsZSB9IGZyb20gJy4uL3R5cGVjaGVjayc7XG5cbmltcG9ydCB7IEZ1bmN0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL2Z1bmN0aW9uLXN0cmF0ZWd5LmNsYXNzJztcbmltcG9ydCB7IE9ic2VydmFibGVTdHJhdGVneSB9IGZyb20gJy4vb2JzZXJ2YWJsZS1zdHJhdGVneS5jbGFzcyc7XG5pbXBvcnQgeyBQcm9taXNlU3RyYXRlZ3kgfSBmcm9tICcuL3Byb21pc2Utc3RyYXRlZ3kuY2xhc3MnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3N1YnNjcmlwdGlvbi1zdHJhdGVneS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVmFsdWVTdHJhdGVneSB9IGZyb20gJy4vdmFsdWUtc3RyYXRlZ3kuY2xhc3MnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTZWxlY3RzIGFwcHJvcHJpYXRlIHN0cmF0ZWd5IG9uIGhvdyB0byByZXNvbHZlIGZ1bmN0aW9uIHZhbHVlXG4gKiBAcGFyYW0gb2JqIG9iamVjdCB0byBnZXQgdmFsdWUgZnJvbVxuICogQHJldHVybnMgYXBwcm9wcmlhdGUgc3RyYXRlZ3kgdG8gcmV0cmlldmUgdmFsdWUgZnJvbSB0aGUgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RTdHJhdGVneTxUID0gYW55PihvYmo6IE9ic2VydmFibGU8VD4gfCBQcm9taXNlPFQ+IHwgKCgpID0+IHZvaWQpIHwgVCk6IFN1YnNjcmlwdGlvblN0cmF0ZWd5PFQ+IHtcbiAgICBpZiAoaXNQcm9taXNlKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlU3RyYXRlZ3k8VD4oKTtcbiAgICB9XG5cbiAgICBpZiAoaXNTdWJzY3JpYmFibGUob2JqKSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGVTdHJhdGVneTxUPigpO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvblN0cmF0ZWd5PFQ+KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBWYWx1ZVN0cmF0ZWd5PFQ+KCk7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXN0cmF0ZWd5LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvdXRpbHMvYXN5bmMtc3RyYXRlZ3kvc3Vic2NyaXB0aW9uLXN0cmF0ZWd5LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmlwdGlvblN0cmF0ZWd5PFQgPSBhbnk+IHtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXdhaXRzIG9iamVjdCB0byByZXNvbHZlIGl0J3MgdmFsdWUgYW5kIHBhc3NlcyBpdCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIG9iaiBPYmplY3QgdG8gYmUgYXdhaXRlZC5cbiAgICAgKiBAcGFyYW0gdXBkYXRlTGF0ZXN0VmFsdWUgQ2FsbGJhY2sgZnVuY3Rpb24gd2hlcmUgYXdhaXRlZCB2YWx1ZSB3aWxsIGJlIHBhc3NlZC5cbiAgICAgKiBhcyBhbiBhcmd1bWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVN1YnNjcmlwdGlvbihcbiAgICAgICAgb2JqOiBPYnNlcnZhYmxlPFQ+IHwgUHJvbWlzZTxUPiB8ICgoKSA9PiB2b2lkKSB8IFQsXG4gICAgICAgIHVwZGF0ZUxhdGVzdFZhbHVlOiAodmFsdWU6IFQpID0+IHZvaWRcbiAgICApOiBQcm9taXNlPHZvaWQ+O1xufVxuIl19
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @description Passes value object into callback function.
3
+ */
4
+ export class ValueStrategy {
5
+ /** @hidden */
6
+ createSubscription(value, updateLatestValue) {
7
+ return Promise.resolve(value).then(updateLatestValue);
8
+ }
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtc3RyYXRlZ3kuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL3V0aWxzL2FzeW5jLXN0cmF0ZWd5L3ZhbHVlLXN0cmF0ZWd5LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFDdEIsY0FBYztJQUNkLGtCQUFrQixDQUFDLEtBQVEsRUFBRSxpQkFBZ0M7UUFDekQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YnNjcmlwdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9zdWJzY3JpcHRpb24tc3RyYXRlZ3kuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFzc2VzIHZhbHVlIG9iamVjdCBpbnRvIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgVmFsdWVTdHJhdGVneTxUPiBpbXBsZW1lbnRzIFN1YnNjcmlwdGlvblN0cmF0ZWd5PFQ+IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNyZWF0ZVN1YnNjcmlwdGlvbih2YWx1ZTogVCwgdXBkYXRlTGF0ZXN0VmFsdWU6ICh2OiBUKSA9PiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbih1cGRhdGVMYXRlc3RWYWx1ZSk7XG4gICAgfVxufVxuIl19
@@ -1,4 +1,4 @@
1
- import { Directive, ElementRef, EventEmitter, forwardRef, HostBinding, Input, Output } from '@angular/core';
1
+ import { Directive, ElementRef, EventEmitter, forwardRef, HostBinding, Input, Output, Renderer2 } from '@angular/core';
2
2
  import { DragDrop } from '@angular/cdk/drag-drop';
3
3
  import { Subscription } from 'rxjs';
4
4
  import { delay } from 'rxjs/operators';
@@ -12,9 +12,10 @@ export class DndItemDirective {
12
12
  this.changeCDKDragState();
13
13
  }
14
14
  /** @hidden */
15
- constructor(elementRef, _dragDrop) {
15
+ constructor(elementRef, _dragDrop, _renderer) {
16
16
  this.elementRef = elementRef;
17
17
  this._dragDrop = _dragDrop;
18
+ this._renderer = _renderer;
18
19
  /**
19
20
  * Whether to apply "fd-dnd-item" class.
20
21
  * @default true
@@ -158,6 +159,18 @@ export class DndItemDirective {
158
159
  this._dragRef.disabled = !(this._draggable && this.listDraggable);
159
160
  }
160
161
  }
162
+ /**
163
+ * Sets the disabled state of the dnd item.
164
+ * @param state
165
+ */
166
+ setDisabledState(state) {
167
+ if (state) {
168
+ this._renderer.addClass(this.elementRef.nativeElement, 'fd-dnd-item--disabled');
169
+ }
170
+ else {
171
+ this._renderer.removeClass(this.elementRef.nativeElement, 'fd-dnd-item--disabled');
172
+ }
173
+ }
161
174
  /** @hidden */
162
175
  createPlaceholder() {
163
176
  const placeholder = this.elementRef.nativeElement.cloneNode(true);
@@ -225,15 +238,18 @@ export class DndItemDirective {
225
238
  }));
226
239
  }
227
240
  }
228
- DndItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: DndItemDirective, deps: [{ token: i0.ElementRef }, { token: i1.DragDrop }], target: i0.ɵɵFactoryTarget.Directive });
229
- DndItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.8", type: DndItemDirective, selector: "[fdkDndItem], [fd-dnd-item]", inputs: { applyDragItemClass: "applyDragItemClass", containerSelector: "containerSelector", stickInPlace: "stickInPlace", draggable: "draggable", classWhenElementDragged: "classWhenElementDragged" }, outputs: { moved: "moved", released: "released", started: "started" }, host: { properties: { "class.fd-dnd-item": "this.applyDragItemClass" } }, providers: [DragDrop, { provide: DND_ITEM, useExisting: forwardRef(() => DndItemDirective) }], ngImport: i0 });
241
+ DndItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: DndItemDirective, deps: [{ token: i0.ElementRef }, { token: i1.DragDrop }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
242
+ DndItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.8", type: DndItemDirective, selector: "[fdkDndItem], [fd-dnd-item]", inputs: { item: ["fdkDndItem", "item"], applyDragItemClass: "applyDragItemClass", containerSelector: "containerSelector", stickInPlace: "stickInPlace", draggable: "draggable", classWhenElementDragged: "classWhenElementDragged" }, outputs: { moved: "moved", released: "released", started: "started" }, host: { properties: { "class.fd-dnd-item": "this.applyDragItemClass" } }, providers: [DragDrop, { provide: DND_ITEM, useExisting: forwardRef(() => DndItemDirective) }], ngImport: i0 });
230
243
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: DndItemDirective, decorators: [{
231
244
  type: Directive,
232
245
  args: [{
233
246
  selector: '[fdkDndItem], [fd-dnd-item]',
234
247
  providers: [DragDrop, { provide: DND_ITEM, useExisting: forwardRef(() => DndItemDirective) }]
235
248
  }]
236
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.DragDrop }]; }, propDecorators: { applyDragItemClass: [{
249
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.DragDrop }, { type: i0.Renderer2 }]; }, propDecorators: { item: [{
250
+ type: Input,
251
+ args: ['fdkDndItem']
252
+ }], applyDragItemClass: [{
237
253
  type: Input
238
254
  }, {
239
255
  type: HostBinding,
@@ -253,4 +269,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
253
269
  }], classWhenElementDragged: [{
254
270
  type: Input
255
271
  }] } });
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWl0ZW0uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi91dGlscy9kcmFnLWFuZC1kcm9wL2RuZC1pdGVtL2RuZC1pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQVcsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7QUFNckMsTUFBTSxPQUFPLGdCQUFnQjtJQWdDekIsc0NBQXNDO0lBQ3RDLElBQ0ksU0FBUyxDQUFDLFNBQWtCO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUE2QkQsY0FBYztJQUNkLFlBQW1CLFVBQXNCLEVBQVUsU0FBbUI7UUFBbkQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFsRXRFOzs7V0FHRztRQUdILHVCQUFrQixHQUFHLElBQUksQ0FBQztRQU0xQixvREFBb0Q7UUFFM0MsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBRXJELGdEQUFnRDtRQUV2QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU3Qyw2REFBNkQ7UUFFcEQsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFNUM7OztXQUdHO1FBRUgsaUJB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RUFBRSw2QkFBNkI7b0JBQ3ZDLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxDQUFDO2lCQUNoRzt3SEFRRyxrQkFBa0I7c0JBRmpCLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsbUJBQW1CO2dCQUtoQyxpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS0csS0FBSztzQkFEYixNQUFNO2dCQUtFLFFBQVE7c0JBRGhCLE1BQU07Z0JBS0UsT0FBTztzQkFEZixNQUFNO2dCQVFQLFlBQVk7c0JBRFgsS0FBSztnQkFLRixTQUFTO3NCQURaLEtBQUs7Z0JBUU4sdUJBQXVCO3NCQUR0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEcmFnRHJvcCwgRHJhZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgRG5kSXRlbSwgRWxlbWVudENob3JkLCBFbGVtZW50UG9zaXRpb24sIExpbmtQb3NpdGlvbiB9IGZyb20gJy4uL2RuZC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBETkRfSVRFTSB9IGZyb20gJy4uL3Rva2Vucyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2Zka0RuZEl0ZW1dLCBbZmQtZG5kLWl0ZW1dJyxcbiAgICBwcm92aWRlcnM6IFtEcmFnRHJvcCwgeyBwcm92aWRlOiBETkRfSVRFTSwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRG5kSXRlbURpcmVjdGl2ZSkgfV1cbn0pXG5leHBvcnQgY2xhc3MgRG5kSXRlbURpcmVjdGl2ZSBpbXBsZW1lbnRzIERuZEl0ZW0sIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBhcHBseSBcImZkLWRuZC1pdGVtXCIgY2xhc3MuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1kbmQtaXRlbScpXG4gICAgYXBwbHlEcmFnSXRlbUNsYXNzID0gdHJ1ZTtcblxuICAgIC8qKiBDb250YWluZXIgc2VsZWN0b3IgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbnRhaW5lclNlbGVjdG9yPzogc3RyaW5nO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biB3aGVuIHRoZSBlbGVtZW50IGlzIG1vdmVkIGJ5IDFweCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxFbGVtZW50UG9zaXRpb24+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIHdoZW4gdGhlIGVsZW1lbnQgaXMgcmVsZWFzZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByZWxlYXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gd2hlbiB0aGUgZWxlbWVudCBpcyBzdGFydGVkIHRvIGJlIGRyYWdnZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzdGFydGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogIERlZmluZXMgaWYgdGhlIGl0ZW0gaXMgcHJldmVudGVkIGZyb20gYmVpbmcgbW92ZWQgYnkgb3RoZXIgZWxlbWVudHMuXG4gICAgICogU28gbm90aGluZyBjYW4gYmUgcGxhY2VkIGp1c3QgYmVmb3JlIGFuZCBqdXN0IGFmdGVyIGl0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGlja0luUGxhY2UgPSBmYWxzZTtcblxuICAgIC8qKiBEZWZpbmVzIGlmIGVsZW1lbnQgaXMgZHJhZ2dhYmxlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZHJhZ2dhYmxlKGRyYWdnYWJsZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kcmFnZ2FibGUgPSBkcmFnZ2FibGU7XG4gICAgICAgIHRoaXMuY2hhbmdlQ0RLRHJhZ1N0YXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIENsYXNzIGFkZGVkIHRvIGVsZW1lbnQsIHdoZW4gaXQncyBkcmFnZ2VkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3NXaGVuRWxlbWVudERyYWdnZWQgPSAnZmQtZG5kLW9uLWRyYWcnO1xuXG4gICAgLyoqIERlZmluZXMgaWYgZXZlcnkgZWxlbWVudCBpbiBsaXN0IGlzIGRyYWdnYWJsZSAqL1xuICAgIGxpc3REcmFnZ2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBEcmFnIHJlZmVyZW5jZSwgb2JqZWN0IGNyZWF0ZWQgZnJvbSBETkQgQ0RLIFNlcnZpY2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kcmFnUmVmOiBEcmFnUmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnZ2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wbGFjZWhvbGRlckVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGluZUVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVwbGFjZUluZGljYXRvcjogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBfZHJhZ0Ryb3A6IERyYWdEcm9wKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXRFbGVtZW50Q29vcmRpbmF0ZXMoaXNCZWZvcmU6IGJvb2xlYW4pOiBFbGVtZW50Q2hvcmQge1xuICAgICAgICAvKiogVGFrZXMgZGlzdGFuY2UgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHdpbmRvdyBwYWdlICovXG4gICAgICAgIGNvbnN0IHJlY3Q6IERPTVJlY3QgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBwb3NpdGlvbjogTGlua1Bvc2l0aW9uID0gaXNCZWZvcmUgPyAnYmVmb3JlJyA6ICdhZnRlcic7XG5cbiAgICAgICAgLyoqIFZlcnRpY2FsbHkgZGlzdGFuY2UgaXMgY291bnRlZCBieSBkaXN0YW5jZSBmcm9tIHRvcCBvZiB0aGUgc2lkZSArIGhhbGYgb2YgdGhlIGVsZW1lbnQgaGVpZ2h0ICovXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiByZWN0LmxlZnQsXG4gICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgIHk6IHJlY3QudG9wLFxuICAgICAgICAgICAgc3RpY2tUb1Bvc2l0aW9uOiB0aGlzLnN0aWNrSW5QbGFjZSxcbiAgICAgICAgICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRDREtEcmFnKCk7XG4gICAgICAgIHRoaXMuX2xpc3RlbkVsZW1lbnRFdmVudHMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2RyYWdSZWYuZGlzcG9zZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25DZGtNb3ZlKHBvc2l0aW9uOiBFbGVtZW50UG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3ZlZC5lbWl0KHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2RrRHJhZ1JlbGVhc2VkKCk6IHZvaWQge1xuICAgICAgICAvKiogUmVtb3ZlIGNsYXNzIHdoaWNoIGlzIGFkZGVkLCB3aGVuIGVsZW1lbnQgaXMgZHJhZ2dlZCAqL1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuY2xhc3NXaGVuRWxlbWVudERyYWdnZWQpO1xuICAgICAgICB0aGlzLnJlbGVhc2VkLmVtaXQoKTtcblxuICAgICAgICAvKiogUmVzZXRzIHRoZSBwb3NpdGlvbiBvZiBlbGVtZW50LiAqL1xuICAgICAgICB0aGlzLl9kcmFnUmVmLnJlc2V0KCk7XG5cbiAgICAgICAgLyoqIFJlbW92ZXMgcGxhY2Vob2xkZXIgZWxlbWVudCAqL1xuICAgICAgICB0aGlzLnJlbW92ZVBsYWNlaG9sZGVyKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNka0RyYWdTdGFydCgpOiB2b2lkIHtcbiAgICAgICAgLyoqIEFkZHMgY2xhc3MgKi9cbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzV2hlbkVsZW1lbnREcmFnZ2VkKTtcblxuICAgICAgICBpZiAoIXRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVQbGFjZWhvbGRlcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhcnRlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZW1vdmVQbGFjZWhvbGRlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCAmJiB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgLy8gSUUxMSB3b3JrYXJvdW5kXG4gICAgICAgICAgICB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVtb3ZlTGluZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2xpbmVFbGVtZW50ICYmIHRoaXMuX2xpbmVFbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIC8vIElFMTEgd29ya2Fyb3VuZFxuICAgICAgICAgICAgdGhpcy5fbGluZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9saW5lRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLl9saW5lRWxlbWVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlbW92ZVJlcGxhY2VJbmRpY2F0b3IoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9yZXBsYWNlSW5kaWNhdG9yICYmIHRoaXMuX3JlcGxhY2VJbmRpY2F0b3IucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgLy8gSUUxMSB3b3JrYXJvdW5kXG4gICAgICAgICAgICB0aGlzLl9yZXBsYWNlSW5kaWNhdG9yLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fcmVwbGFjZUluZGljYXRvcik7XG4gICAgICAgICAgICB0aGlzLl9yZXBsYWNlSW5kaWNhdG9yID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY3JlYXRlUmVwbGFjZUluZGljYXRvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVwbGFjZUluZGljYXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAgICAgICB0aGlzLl9yZXBsYWNlSW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoJ2ZkLXJlcGxhY2UtaW5kaWNhdG9yJyk7XG5cbiAgICAgICAgbGV0IGNvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAodGhpcy5jb250YWluZXJTZWxlY3Rvcikge1xuICAgICAgICAgICAgY29uc3QgbmV3Q29udGFpbmVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmNvbnRhaW5lclNlbGVjdG9yKTtcbiAgICAgICAgICAgIGlmIChuZXdDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIgPSBuZXdDb250YWluZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcmVwbGFjZUluZGljYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjcmVhdGVMaW5lKHBvc2l0aW9uOiBMaW5rUG9zaXRpb24sIGdyaWRNb2RlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIC8qKiBDcmVhdGluZyBvZiBsaW5lIGVsZW1lbnQgKi9cbiAgICAgICAgdGhpcy5fbGluZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5fbGluZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZHJvcC1hcmVhX19saW5lJyk7XG5cbiAgICAgICAgaWYgKGdyaWRNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLl9saW5lRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkcm9wLWFyZWFfX2xpbmUtLXZlcnRpY2FsJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9saW5lRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkcm9wLWFyZWFfX2xpbmUtLWhvcml6b250YWwnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPT09ICdhZnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpbmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2FmdGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAnYmVmb3JlJykge1xuICAgICAgICAgICAgdGhpcy5fbGluZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYmVmb3JlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvKiogUHV0dGluZyBlbGVtZW50IHRvIHRoZSBjb250YWluZXIgKi9cbiAgICAgICAgbGV0IGNvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAodGhpcy5jb250YWluZXJTZWxlY3Rvcikge1xuICAgICAgICAgICAgY29uc3QgbmV3Q29udGFpbmVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmNvbnRhaW5lclNlbGVjdG9yKTtcbiAgICAgICAgICAgIGlmIChuZXdDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIgPSBuZXdDb250YWluZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fbGluZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2hhbmdlQ0RLRHJhZ1N0YXRlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZHJhZ1JlZikge1xuICAgICAgICAgICAgdGhpcy5fZHJhZ1JlZi5kaXNhYmxlZCA9ICEodGhpcy5fZHJhZ2dhYmxlICYmIHRoaXMubGlzdERyYWdnYWJsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgY3JlYXRlUGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICAvKiogQ2xvbmluZyBjb250YWluZXIgZWxlbWVudCAqL1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQgPSBwbGFjZWhvbGRlcjtcblxuICAgICAgICBwbGFjZWhvbGRlci5jbGFzc0xpc3QuYWRkKCdmZC1kbmQtcGxhY2Vob2xkZXInKTtcbiAgICAgICAgdGhpcy5fc2V0UGxhY2Vob2xkZXJTdHlsZXMoKTtcblxuICAgICAgICAvKiogSW5jbHVkaW5nIGVsZW1lbnQgdG8gdGhlIGNvbnRhaW5lclxuICAgICAgICAgKiAgSUUxMSBlcXVpdmFsZW50IHRvIGB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5hZnRlcihjbG9uZSk7YFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fcGxhY2VBZnRlcih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgcGxhY2Vob2xkZXIpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0UGxhY2Vob2xkZXJTdHlsZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuX2dldE9mZnNldFRvUGFyZW50KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICBpZiAoIW9mZnNldCB8fCAhdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQuc3R5bGUudG9wID0gb2Zmc2V0LnkgKyAncHgnO1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQuc3R5bGUubGVmdCA9IG9mZnNldC54ICsgJ3B4JztcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LnN0eWxlLnpJbmRleCA9ICcwJztcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAnMC4zJztcblxuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCArICdweCc7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKyAncHgnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0T2Zmc2V0VG9QYXJlbnQoZWxlbWVudDogRWxlbWVudCk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmICghcGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50VG9wID0gcGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICAgIGNvbnN0IHBhcmVudExlZnQgPSBwYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IE1hdGguYWJzKGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHBhcmVudExlZnQpLFxuICAgICAgICAgICAgeTogTWF0aC5hYnMoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBwYXJlbnRUb3ApXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRDREtEcmFnKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kcmFnUmVmID0gdGhpcy5fZHJhZ0Ryb3AuY3JlYXRlRHJhZyh0aGlzLmVsZW1lbnRSZWYpO1xuICAgICAgICB0aGlzLl9kcmFnUmVmLmRpc2FibGVkID0gIXRoaXMuX2RyYWdnYWJsZTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5fZHJhZ1JlZi5tb3ZlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB0aGlzLm9uQ2RrTW92ZShldmVudC5wb2ludGVyUG9zaXRpb24pKSk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHRoaXMuX2RyYWdSZWYucmVsZWFzZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25DZGtEcmFnUmVsZWFzZWQoKSkpO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZCh0aGlzLl9kcmFnUmVmLnN0YXJ0ZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25DZGtEcmFnU3RhcnQoKSkpO1xuICAgIH1cblxuICAgIC8qKiBJRTExIGVxdWl2YWxlbnQgb2YgTm9kZS5hZnRlcigpIE1ldGhvZCAqL1xuICAgIHByaXZhdGUgX3BsYWNlQWZ0ZXIoZWxlbWVudDogRWxlbWVudCwgY2xvbmVOb2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0ZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgIGRvY0ZyYWcuYXBwZW5kQ2hpbGQoY2xvbmVOb2RlKTtcbiAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoZG9jRnJhZywgZWxlbWVudC5uZXh0U2libGluZyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5FbGVtZW50RXZlbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMucmVsZWFzZWRcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgLy8gcG9zdHBvbmUgYmx1clxuICAgICAgICAgICAgICAgICAgICBkZWxheSgwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyU2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWl0ZW0uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi91dGlscy9kcmFnLWFuZC1kcm9wL2RuZC1pdGVtL2RuZC1pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFXLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7O0FBT3JDLE1BQU0sT0FBTyxnQkFBZ0I7SUFtQ3pCLHNDQUFzQztJQUN0QyxJQUNJLFNBQVMsQ0FBQyxTQUFrQjtRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBNkJELGNBQWM7SUFDZCxZQUNvQixVQUFzQixFQUNyQixTQUFtQixFQUNuQixTQUFvQjtRQUZyQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQXJFekM7OztXQUdHO1FBR0gsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBTTFCLG9EQUFvRDtRQUUzQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFckQsZ0RBQWdEO1FBRXZDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTdDLDZEQUE2RDtRQUVwRCxZ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QUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNwRDtZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUNULENBQUM7SUFDTixDQUFDOzs2R0FuVFEsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsNmFBRmQsQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDOzJGQUVwRixnQkFBZ0I7a0JBSjVCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7aUJBQ2hHO2dKQUlHLElBQUk7c0JBREgsS0FBSzt1QkFBQyxZQUFZO2dCQVFuQixrQkFBa0I7c0JBRmpCLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsbUJBQW1CO2dCQUtoQyxpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS0csS0FBSztzQkFEYixNQUFNO2dCQUtFLFFBQVE7c0JBRGhCLE1BQU07Z0JBS0UsT0FBTztzQkFEZixNQUFNO2dCQVFQLFlBQVk7c0JBRFgsS0FBSztnQkFLRixTQUFTO3NCQURaLEtBQUs7Z0JBUU4sdUJBQXVCO3NCQUR0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHJhZ0Ryb3AsIERyYWdSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IERuZEl0ZW0sIEVsZW1lbnRDaG9yZCwgRWxlbWVudFBvc2l0aW9uLCBMaW5rUG9zaXRpb24gfSBmcm9tICcuLi9kbmQuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRE5EX0lURU0gfSBmcm9tICcuLi90b2tlbnMnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvbnVsbGFibGUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tmZGtEbmRJdGVtXSwgW2ZkLWRuZC1pdGVtXScsXG4gICAgcHJvdmlkZXJzOiBbRHJhZ0Ryb3AsIHsgcHJvdmlkZTogRE5EX0lURU0sIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERuZEl0ZW1EaXJlY3RpdmUpIH1dXG59KVxuZXhwb3J0IGNsYXNzIERuZEl0ZW1EaXJlY3RpdmU8VCA9IGFueT4gaW1wbGVtZW50cyBEbmRJdGVtLCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBJdGVtIHJlZmVyZW5jZS4gVXNlZCBmb3IgY2FzZXMgd2hlbiBgW2l0ZW1zXWAgYXJyYXkgb2YgZG5kIGxpc3QgaXMgZGlmZmVyZW50IHRoYW4gYGRuZEl0ZW1zYCBjb250ZW50IGNoaWxkcmVuLiAqL1xuICAgIEBJbnB1dCgnZmRrRG5kSXRlbScpXG4gICAgaXRlbTogTnVsbGFibGU8VD47XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBhcHBseSBcImZkLWRuZC1pdGVtXCIgY2xhc3MuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1kbmQtaXRlbScpXG4gICAgYXBwbHlEcmFnSXRlbUNsYXNzID0gdHJ1ZTtcblxuICAgIC8qKiBDb250YWluZXIgc2VsZWN0b3IgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbnRhaW5lclNlbGVjdG9yPzogc3RyaW5nO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biB3aGVuIHRoZSBlbGVtZW50IGlzIG1vdmVkIGJ5IDFweCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxFbGVtZW50UG9zaXRpb24+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIHdoZW4gdGhlIGVsZW1lbnQgaXMgcmVsZWFzZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByZWxlYXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gd2hlbiB0aGUgZWxlbWVudCBpcyBzdGFydGVkIHRvIGJlIGRyYWdnZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzdGFydGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogIERlZmluZXMgaWYgdGhlIGl0ZW0gaXMgcHJldmVudGVkIGZyb20gYmVpbmcgbW92ZWQgYnkgb3RoZXIgZWxlbWVudHMuXG4gICAgICogU28gbm90aGluZyBjYW4gYmUgcGxhY2VkIGp1c3QgYmVmb3JlIGFuZCBqdXN0IGFmdGVyIGl0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGlja0luUGxhY2UgPSBmYWxzZTtcblxuICAgIC8qKiBEZWZpbmVzIGlmIGVsZW1lbnQgaXMgZHJhZ2dhYmxlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZHJhZ2dhYmxlKGRyYWdnYWJsZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kcmFnZ2FibGUgPSBkcmFnZ2FibGU7XG4gICAgICAgIHRoaXMuY2hhbmdlQ0RLRHJhZ1N0YXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIENsYXNzIGFkZGVkIHRvIGVsZW1lbnQsIHdoZW4gaXQncyBkcmFnZ2VkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3NXaGVuRWxlbWVudERyYWdnZWQgPSAnZmQtZG5kLW9uLWRyYWcnO1xuXG4gICAgLyoqIERlZmluZXMgaWYgZXZlcnkgZWxlbWVudCBpbiBsaXN0IGlzIGRyYWdnYWJsZSAqL1xuICAgIGxpc3REcmFnZ2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBEcmFnIHJlZmVyZW5jZSwgb2JqZWN0IGNyZWF0ZWQgZnJvbSBETkQgQ0RLIFNlcnZpY2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kcmFnUmVmOiBEcmFnUmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnZ2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wbGFjZWhvbGRlckVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGluZUVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVwbGFjZUluZGljYXRvcjogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2RyYWdEcm9wOiBEcmFnRHJvcCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyZXI6IFJlbmRlcmVyMlxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0RWxlbWVudENvb3JkaW5hdGVzKGlzQmVmb3JlOiBib29sZWFuKTogRWxlbWVudENob3JkIHtcbiAgICAgICAgLyoqIFRha2VzIGRpc3RhbmNlIGZyb20gdGhlIGJlZ2lubmluZyBvZiB3aW5kb3cgcGFnZSAqL1xuICAgICAgICBjb25zdCByZWN0OiBET01SZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb246IExpbmtQb3NpdGlvbiA9IGlzQmVmb3JlID8gJ2JlZm9yZScgOiAnYWZ0ZXInO1xuXG4gICAgICAgIC8qKiBWZXJ0aWNhbGx5IGRpc3RhbmNlIGlzIGNvdW50ZWQgYnkgZGlzdGFuY2UgZnJvbSB0b3Agb2YgdGhlIHNpZGUgKyBoYWxmIG9mIHRoZSBlbGVtZW50IGhlaWdodCAqL1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogcmVjdC5sZWZ0LFxuICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICB5OiByZWN0LnRvcCxcbiAgICAgICAgICAgIHN0aWNrVG9Qb3NpdGlvbjogdGhpcy5zdGlja0luUGxhY2UsXG4gICAgICAgICAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0Q0RLRHJhZygpO1xuICAgICAgICB0aGlzLl9saXN0ZW5FbGVtZW50RXZlbnRzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9kcmFnUmVmLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2RrTW92ZShwb3NpdGlvbjogRWxlbWVudFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW92ZWQuZW1pdChwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNka0RyYWdSZWxlYXNlZCgpOiB2b2lkIHtcbiAgICAgICAgLyoqIFJlbW92ZSBjbGFzcyB3aGljaCBpcyBhZGRlZCwgd2hlbiBlbGVtZW50IGlzIGRyYWdnZWQgKi9cbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmNsYXNzV2hlbkVsZW1lbnREcmFnZ2VkKTtcbiAgICAgICAgdGhpcy5yZWxlYXNlZC5lbWl0KCk7XG5cbiAgICAgICAgLyoqIFJlc2V0cyB0aGUgcG9zaXRpb24gb2YgZWxlbWVudC4gKi9cbiAgICAgICAgdGhpcy5fZHJhZ1JlZi5yZXNldCgpO1xuXG4gICAgICAgIC8qKiBSZW1vdmVzIHBsYWNlaG9sZGVyIGVsZW1lbnQgKi9cbiAgICAgICAgdGhpcy5yZW1vdmVQbGFjZWhvbGRlcigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25DZGtEcmFnU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIC8qKiBBZGRzIGNsYXNzICovXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc1doZW5FbGVtZW50RHJhZ2dlZCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUGxhY2Vob2xkZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXJ0ZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVtb3ZlUGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQgJiYgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIC8vIElFMTEgd29ya2Fyb3VuZFxuICAgICAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlbW92ZUxpbmUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9saW5lRWxlbWVudCAmJiB0aGlzLl9saW5lRWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAvLyBJRTExIHdvcmthcm91bmRcbiAgICAgICAgICAgIHRoaXMuX2xpbmVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fbGluZUVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5fbGluZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZW1vdmVSZXBsYWNlSW5kaWNhdG9yKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fcmVwbGFjZUluZGljYXRvciAmJiB0aGlzLl9yZXBsYWNlSW5kaWNhdG9yLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIC8vIElFMTEgd29ya2Fyb3VuZFxuICAgICAgICAgICAgdGhpcy5fcmVwbGFjZUluZGljYXRvci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3JlcGxhY2VJbmRpY2F0b3IpO1xuICAgICAgICAgICAgdGhpcy5fcmVwbGFjZUluZGljYXRvciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNyZWF0ZVJlcGxhY2VJbmRpY2F0b3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlcGxhY2VJbmRpY2F0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICAgICAgdGhpcy5fcmVwbGFjZUluZGljYXRvci5jbGFzc0xpc3QuYWRkKCdmZC1yZXBsYWNlLWluZGljYXRvcicpO1xuXG4gICAgICAgIGxldCBjb250YWluZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyU2VsZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb250YWluZXJTZWxlY3Rvcik7XG4gICAgICAgICAgICBpZiAobmV3Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyID0gbmV3Q29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3JlcGxhY2VJbmRpY2F0b3IpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY3JlYXRlTGluZShwb3NpdGlvbjogTGlua1Bvc2l0aW9uLCBncmlkTW9kZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICAvKiogQ3JlYXRpbmcgb2YgbGluZSBlbGVtZW50ICovXG4gICAgICAgIHRoaXMuX2xpbmVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuX2xpbmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Ryb3AtYXJlYV9fbGluZScpO1xuXG4gICAgICAgIGlmIChncmlkTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5fbGluZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZHJvcC1hcmVhX19saW5lLS12ZXJ0aWNhbCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGluZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZHJvcC1hcmVhX19saW5lLS1ob3Jpem9udGFsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAnYWZ0ZXInKSB7XG4gICAgICAgICAgICB0aGlzLl9saW5lRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdhZnRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2JlZm9yZScpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpbmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2JlZm9yZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIFB1dHRpbmcgZWxlbWVudCB0byB0aGUgY29udGFpbmVyICovXG4gICAgICAgIGxldCBjb250YWluZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyU2VsZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb250YWluZXJTZWxlY3Rvcik7XG4gICAgICAgICAgICBpZiAobmV3Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyID0gbmV3Q29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2xpbmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNoYW5nZUNES0RyYWdTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RyYWdSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuX2RyYWdSZWYuZGlzYWJsZWQgPSAhKHRoaXMuX2RyYWdnYWJsZSAmJiB0aGlzLmxpc3REcmFnZ2FibGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGRuZCBpdGVtLlxuICAgICAqIEBwYXJhbSBzdGF0ZVxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2ZkLWRuZC1pdGVtLS1kaXNhYmxlZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmZC1kbmQtaXRlbS0tZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBjcmVhdGVQbGFjZWhvbGRlcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIC8qKiBDbG9uaW5nIGNvbnRhaW5lciBlbGVtZW50ICovXG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudCA9IHBsYWNlaG9sZGVyO1xuXG4gICAgICAgIHBsYWNlaG9sZGVyLmNsYXNzTGlzdC5hZGQoJ2ZkLWRuZC1wbGFjZWhvbGRlcicpO1xuICAgICAgICB0aGlzLl9zZXRQbGFjZWhvbGRlclN0eWxlcygpO1xuXG4gICAgICAgIC8qKiBJbmNsdWRpbmcgZWxlbWVudCB0byB0aGUgY29udGFpbmVyXG4gICAgICAgICAqICBJRTExIGVxdWl2YWxlbnQgdG8gYHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmFmdGVyKGNsb25lKTtgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9wbGFjZUFmdGVyKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBwbGFjZWhvbGRlcik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRQbGFjZWhvbGRlclN0eWxlcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5fZ2V0T2Zmc2V0VG9QYXJlbnQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIGlmICghb2Zmc2V0IHx8ICF0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudC5zdHlsZS50b3AgPSBvZmZzZXQueSArICdweCc7XG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudC5zdHlsZS5sZWZ0ID0gb2Zmc2V0LnggKyAncHgnO1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQuc3R5bGUuekluZGV4ID0gJzAnO1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlckVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICcwLjMnO1xuXG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyRWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICsgJ3B4JztcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCArICdweCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRPZmZzZXRUb1BhcmVudChlbGVtZW50OiBFbGVtZW50KTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRUb3AgPSBwYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgICAgY29uc3QgcGFyZW50TGVmdCA9IHBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogTWF0aC5hYnMoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gcGFyZW50TGVmdCksXG4gICAgICAgICAgICB5OiBNYXRoLmFicyhlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHBhcmVudFRvcClcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldENES0RyYWcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RyYWdSZWYgPSB0aGlzLl9kcmFnRHJvcC5jcmVhdGVEcmFnKHRoaXMuZWxlbWVudFJlZik7XG4gICAgICAgIHRoaXMuX2RyYWdSZWYuZGlzYWJsZWQgPSAhdGhpcy5fZHJhZ2dhYmxlO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZCh0aGlzLl9kcmFnUmVmLm1vdmVkLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMub25DZGtNb3ZlKGV2ZW50LnBvaW50ZXJQb3NpdGlvbikpKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5fZHJhZ1JlZi5yZWxlYXNlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkNka0RyYWdSZWxlYXNlZCgpKSk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHRoaXMuX2RyYWdSZWYuc3RhcnRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkNka0RyYWdTdGFydCgpKSk7XG4gICAgfVxuXG4gICAgLyoqIElFMTEgZXF1aXZhbGVudCBvZiBOb2RlLmFmdGVyKCkgTWV0aG9kICovXG4gICAgcHJpdmF0ZSBfcGxhY2VBZnRlcihlbGVtZW50OiBFbGVtZW50LCBjbG9uZU5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgZG9jRnJhZy5hcHBlbmRDaGlsZChjbG9uZU5vZGUpO1xuICAgICAgICBlbGVtZW50LnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZShkb2NGcmFnLCBlbGVtZW50Lm5leHRTaWJsaW5nKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlbkVsZW1lbnRFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5yZWxlYXNlZFxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAvLyBwb3N0cG9uZSBibHVyXG4gICAgICAgICAgICAgICAgICAgIGRlbGF5KDApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250YWluZXJTZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0uYmx1cigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==