@1money/component-ui 0.0.98 → 0.0.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/components/Table/core/useTableSetup.d.ts +7 -1
- package/es/components/Table/core/useTableSetup.js +5 -3
- package/es/components/VirtualList/VirtualList.js +27 -13
- package/es/index.css +1 -1
- package/lib/components/Table/core/useTableSetup.d.ts +7 -1
- package/lib/components/Table/core/useTableSetup.js +5 -3
- package/lib/components/VirtualList/VirtualList.js +27 -13
- package/lib/index.css +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type HTMLAttributes, type Key, type ReactNode } from 'react';
|
|
1
|
+
import { type HTMLAttributes, type Key, type ReactNode, type UIEventHandler } from 'react';
|
|
2
2
|
import type { TableComponents, TableDirection, TableGetComponentProps, TableLayout, TableProps, TableRecord, TableRowClassName } from '../interface';
|
|
3
3
|
import type { ColumnsType as InternalColumnsType, ExpandableConfig } from '../internal/kernel/interface';
|
|
4
4
|
/** Kernel props that flow identically through `Table` and `VirtualTable`. */
|
|
@@ -16,6 +16,12 @@ export interface ForwardedKernelProps<T extends TableRecord> {
|
|
|
16
16
|
direction?: TableDirection;
|
|
17
17
|
rowHoverable?: boolean;
|
|
18
18
|
sticky?: TableProps<T>['sticky'];
|
|
19
|
+
/**
|
|
20
|
+
* Fires on the kernel's real scroll container (`Table`'s `.../-body` div,
|
|
21
|
+
* `VirtualTable`'s virtual-list holder) — not the outer wrapper div, which
|
|
22
|
+
* never scrolls. Useful for scroll-position-driven UI like infinite load.
|
|
23
|
+
*/
|
|
24
|
+
onScroll?: UIEventHandler<HTMLDivElement>;
|
|
19
25
|
}
|
|
20
26
|
export interface TableSetupResult<T extends TableRecord> {
|
|
21
27
|
prefixCls: string;
|
|
@@ -70,7 +70,8 @@ var useTableSetup = exports.useTableSetup = function useTableSetup(props) {
|
|
|
70
70
|
components = props.components,
|
|
71
71
|
direction = props.direction,
|
|
72
72
|
rowHoverable = props.rowHoverable,
|
|
73
|
-
|
|
73
|
+
onScroll = props.onScroll,
|
|
74
|
+
rest = __rest(props, ["className", "prefixCls", "variant", "columns", "dataSource", "rowKey", "empty", "bordered", "scroll", "sticky", "pagination", "rowSelection", "loading", "onChange", "childrenColumnName", "indentSize", "expandable", "onRow", "rowClassName", "summary", "footer", "showHeader", "tableLayout", "components", "direction", "rowHoverable", "onScroll"]);
|
|
74
75
|
// Pulled out of `rest` so it doesn't land on the wrapper div; each entry point
|
|
75
76
|
// forwards its own `scroll` to the kernel (see ForwardedKernelProps note).
|
|
76
77
|
void _scroll;
|
|
@@ -211,9 +212,10 @@ var useTableSetup = exports.useTableSetup = function useTableSetup(props) {
|
|
|
211
212
|
components: components,
|
|
212
213
|
direction: direction,
|
|
213
214
|
rowHoverable: rowHoverable,
|
|
214
|
-
sticky: sticky
|
|
215
|
+
sticky: sticky,
|
|
216
|
+
onScroll: onScroll
|
|
215
217
|
},
|
|
216
218
|
paginationNode: paginationNode
|
|
217
219
|
};
|
|
218
220
|
};
|
|
219
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZVNldHVwLmpzIiwiY29tcG9uZW50cy9UYWJsZS9zcmMvY29tcG9uZW50cy9UYWJsZS9jb3JlL3VzZVRhYmxlU2V0dXAudHN4Il0sIm5hbWVzIjpbIl9qc3hSdW50aW1lIiwicmVxdWlyZSIsIl9yZWFjdCIsIl91c2VNZW1vaXplZEZuIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jbGFzc25hbWVzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfUGFnaW5hdGlvbiIsIl9TcGlubmVyIiwiX0V4cGFuZGVkUm93Q29udGFpbmVyIiwiX0VtcHR5U3RhdGUiLCJfY29uc3RhbnRzIiwiX3VzZVRhYmxlRGF0YVBpcGVsaW5lIiwiX3VzZVRhYmxlU2VsZWN0aW9uIiwiX3VzZVRhYmxlRXhwYW5kIiwiX3VzZVRhYmxlQ29sdW1ucyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9fcmVzdCIsInMiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlVGFibGVTZXR1cCIsImV4cG9ydHMiLCJwcm9wcyIsIl9hIiwiX2IiLCJfYyIsIl9wcm9wcyRjbGFzc05hbWUiLCJjbGFzc05hbWUiLCJfcHJvcHMkcHJlZml4Q2xzIiwicHJlZml4Q2xzIiwiVEFCTEVfREVGQVVMVF9QUkVGSVgiLCJfcHJvcHMkdmFyaWFudCIsInZhcmlhbnQiLCJUQUJMRV9ERUZBVUxUX1ZBUklBTlQiLCJjb2x1bW5zIiwiZGF0YVNvdXJjZSIsInJvd0tleSIsImVtcHR5IiwiYm9yZGVyZWQiLCJfc2Nyb2xsIiwic2Nyb2xsIiwic3RpY2t5IiwicGFnaW5hdGlvbiIsInJvd1NlbGVjdGlvbiIsIl9wcm9wcyRsb2FkaW5nIiwibG9hZGluZyIsIm9uQ2hhbmdlIiwiY2hpbGRyZW5Db2x1bW5OYW1lIiwiaW5kZW50U2l6ZSIsImV4cGFuZGFibGUiLCJvblJvdyIsInJvd0NsYXNzTmFtZSIsInN1bW1hcnkiLCJmb290ZXIiLCJzaG93SGVhZGVyIiwidGFibGVMYXlvdXQiLCJjb21wb25lbnRzIiwiZGlyZWN0aW9uIiwicm93SG92ZXJhYmxlIiwicmVzdCIsImNscyIsImNsYXNzbmFtZXMiLCJUQUJMRV9CTE9DSyIsImxvYWRpbmdDb25maWciLCJzcGlubmluZyIsImlzTG9hZGluZyIsImxvYWRpbmdJbmRpY2F0b3IiLCJpbmRpY2F0b3IiLCJfanN4IiwiU3Bpbm5lciIsInR5cGUiLCJ0aXRsZSIsImdldFJvd0tleSIsInVzZU1lbW9pemVkRm4iLCJyZWNvcmQiLCJpbmRleCIsInBpcGVsaW5lIiwidXNlVGFibGVEYXRhUGlwZWxpbmUiLCJzZWxlY3Rpb24iLCJ1c2VUYWJsZVNlbGVjdGlvbiIsImN1cnJlbnREYXRhU291cmNlIiwiZXhwYW5kIiwidXNlVGFibGVFeHBhbmQiLCJyZW5kZXJlZENvbHVtbnMiLCJ1c2VUYWJsZUNvbHVtbnMiLCJtZXJnZWRFeHBhbmRlZFJvd0tleXMiLCJ0cmlnZ2VyRXhwYW5kIiwibWVyZ2VkU2VsZWN0ZWRSb3dLZXlzIiwiY2hlY2tib3hQcm9wc01hcCIsImlzQWxsU2VsZWN0ZWQiLCJpc0luZGV0ZXJtaW5hdGUiLCJ0cmlnZ2VyU2VsZWN0aW9uIiwidHJpZ2dlclNlbGVjdEFsbCIsInNvcnRlciIsInNldFNvcnRlciIsImZpbHRlcnMiLCJzZXRGaWx0ZXJzIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiZXhwYW5kZWRSb3dSZW5kZXIiLCJ1bmRlZmluZWQiLCJjb25zb2xlIiwid2FybiIsIndyYXBwZWRFeHBhbmRlZFJvd1JlbmRlciIsImluZGVudCIsImV4cGFuZGVkIiwicm93RXhwYW5kYWJsZSIsIkV4cGFuZGVkUm93Q29udGFpbmVyIiwiY2hpbGRyZW4iLCJrZXJuZWxPbkV4cGFuZCIsInJlY29yZEtleSIsIm9uS2VybmVsRXhwYW5kIiwibWVyZ2VkRXhwYW5kYWJsZSIsInVzZU1lbW8iLCJhc3NpZ24iLCJleHBhbmRlZFJvd0tleXMiLCJzaG93RXhwYW5kQ29sdW1uIiwib25FeHBhbmQiLCJyZXNvbHZlZFBhZ2luYXRpb24iLCJjdXJyZW50IiwicGFnZVNpemUiLCJwYWdpbmF0aW9uTm9kZSIsImNvbmNhdCIsIlBhZ2luYXRpb24iLCJ0b3RhbCIsIm5leHRQYWdlIiwibmV4dFBhZ2VTaXplIiwic2V0UGFnaW5hdGlvbiIsImN1cnJlbnRQYWdpbmF0aW9uIiwid3JhcHBlckNsYXNzTmFtZSIsImpvaW5DbHMiLCJ0YWJsZUNsYXNzTmFtZSIsImVtcHR5VGV4dCIsIlRhYmxlRW1wdHlTdGF0ZSIsIndyYXBwZXJIdG1sUHJvcHMiLCJmb3J3YXJkZWRLZXJuZWxQcm9wcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFXQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7QUNYQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxjQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFDLHVCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBTSxXQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxRQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxxQkFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsV0FBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsVUFBQSxHQUFBVixPQUFBO0FBS0EsSUFBQVcscUJBQUEsR0FBQVgsT0FBQTtBQUNBLElBQUFZLGtCQUFBLEdBQUFaLE9BQUE7QUFDQSxJQUFBYSxlQUFBLEdBQUFiLE9BQUE7QUFDQSxJQUFBYyxnQkFBQSxHQUFBZCxPQUFBO0FBQW9E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QUNmSCxpQkFBaUIsRUFBRUosUUFBUSxDQUFDSSxpQkFBaUI7SUFDN0NpQyxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtJQUNoQm9CLFNBQVMsRUFBVEEsU0FBUztJQUNURSxnQkFBZ0IsRUFBRTVFLElBQUk7SUFDdEI2RSxvQkFBb0IsRUFBRTtNQUNwQnBHLE1BQU0sRUFBRUEsTUFBdUM7TUFDL0NXLGtCQUFrQixFQUFsQkEsa0JBQWtCO01BQ2xCQyxVQUFVLEVBQVZBLFVBQVU7TUFDVkUsS0FBSyxFQUFMQSxLQUFLO01BQ0xDLFlBQVksRUFBWkEsWUFBWTtNQUNaQyxPQUFPLEVBQVBBLE9BQU87TUFDUEMsTUFBTSxFQUFOQSxNQUFNO01BQ05DLFVBQVUsRUFBVkEsVUFBVTtNQUNWQyxXQUFXLEVBQVhBLFdBQVc7TUFDWEMsVUFBVSxFQUFWQSxVQUFVO01BQ1ZDLFNBQVMsRUFBVEEsU0FBUztNQUNUQyxZQUFZLEVBQVpBLFlBQVk7TUFDWmpCLE1BQU0sRUFBTkE7SURySUUsQ0NzSUg7SUFDRGlGLGNBQWMsRUFBZEE7RURySUEsQ0NzSUQ7QUFDSCxDQUFDIiwiZmlsZSI6ImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZVNldHVwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTWVtb2l6ZWRGbiBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZU1lbW9pemVkRm4nO1xuaW1wb3J0IGNsYXNzbmFtZXMsIHsgam9pbkNscyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJy4uLy4uL1BhZ2luYXRpb24nO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4uLy4uL1NwaW5uZXInO1xuaW1wb3J0IHsgRXhwYW5kZWRSb3dDb250YWluZXIgfSBmcm9tICcuLi9yZW5kZXJlcnMvRXhwYW5kZWRSb3dDb250YWluZXInO1xuaW1wb3J0IHsgVGFibGVFbXB0eVN0YXRlIH0gZnJvbSAnLi4vcmVuZGVyZXJzL0VtcHR5U3RhdGUnO1xuaW1wb3J0IHsgVEFCTEVfQkxPQ0ssIFRBQkxFX0RFRkFVTFRfUFJFRklYLCBUQUJMRV9ERUZBVUxUX1ZBUklBTlQsIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHVzZVRhYmxlRGF0YVBpcGVsaW5lIH0gZnJvbSAnLi91c2VUYWJsZURhdGFQaXBlbGluZSc7XG5pbXBvcnQgeyB1c2VUYWJsZVNlbGVjdGlvbiB9IGZyb20gJy4vdXNlVGFibGVTZWxlY3Rpb24nO1xuaW1wb3J0IHsgdXNlVGFibGVFeHBhbmQgfSBmcm9tICcuL3VzZVRhYmxlRXhwYW5kJztcbmltcG9ydCB7IHVzZVRhYmxlQ29sdW1ucyB9IGZyb20gJy4vdXNlVGFibGVDb2x1bW5zJztcbi8qKlxuICogQ2VudHJhbGlzZXMgdGhlIHdpcmluZyBzaGFyZWQgYnkgYFRhYmxlYCBhbmQgYFZpcnR1YWxUYWJsZWA6XG4gKiAgLSBkZXN0cnVjdHVyZSBwcm9wc1xuICogIC0gcmVzb2x2ZSByb3cga2V5XG4gKiAgLSBydW4gcGlwZWxpbmUgLyBzZWxlY3Rpb24gLyBleHBhbmQgLyBjb2x1bW4gdHJhbnNmb3Jtc1xuICogIC0gYnVpbGQga2VybmVsLXJlYWR5IHByb3BzXG4gKiAgLSBzcGxpdCBvZmYgcGFzcy10aHJvdWdoIEhUTUwgYXR0cmlidXRlcyBzbyB0aGV5IGNhbiBsYW5kIG9uIHRoZSBvdXRlciB3cmFwcGVyXG4gKiAgICBkaXYgKGluc3RlYWQgb2YgYmVpbmcgc3ByZWFkIHVudHlwZWQgaW50byB0aGUga2VybmVsIHZpYSBgcmVzdCBhcyBvYmplY3RgKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZVRhYmxlU2V0dXAgPSAocHJvcHMpID0+IHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICBjb25zdCB7IGNsYXNzTmFtZSA9ICcnLCBwcmVmaXhDbHMgPSBUQUJMRV9ERUZBVUxUX1BSRUZJWCwgdmFyaWFudCA9IFRBQkxFX0RFRkFVTFRfVkFSSUFOVCwgY29sdW1ucywgZGF0YVNvdXJjZSwgcm93S2V5LCBlbXB0eSwgYm9yZGVyZWQsIHNjcm9sbDogX3Njcm9sbCwgc3RpY2t5LCBwYWdpbmF0aW9uLCByb3dTZWxlY3Rpb24sIGxvYWRpbmcgPSBmYWxzZSwgb25DaGFuZ2UsIGNoaWxkcmVuQ29sdW1uTmFtZSwgaW5kZW50U2l6ZSwgZXhwYW5kYWJsZSwgb25Sb3csIHJvd0NsYXNzTmFtZSwgc3VtbWFyeSwgZm9vdGVyLCBzaG93SGVhZGVyLCB0YWJsZUxheW91dCwgY29tcG9uZW50cywgZGlyZWN0aW9uLCByb3dIb3ZlcmFibGUgfSA9IHByb3BzLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJjbGFzc05hbWVcIiwgXCJwcmVmaXhDbHNcIiwgXCJ2YXJpYW50XCIsIFwiY29sdW1uc1wiLCBcImRhdGFTb3VyY2VcIiwgXCJyb3dLZXlcIiwgXCJlbXB0eVwiLCBcImJvcmRlcmVkXCIsIFwic2Nyb2xsXCIsIFwic3RpY2t5XCIsIFwicGFnaW5hdGlvblwiLCBcInJvd1NlbGVjdGlvblwiLCBcImxvYWRpbmdcIiwgXCJvbkNoYW5nZVwiLCBcImNoaWxkcmVuQ29sdW1uTmFtZVwiLCBcImluZGVudFNpemVcIiwgXCJleHBhbmRhYmxlXCIsIFwib25Sb3dcIiwgXCJyb3dDbGFzc05hbWVcIiwgXCJzdW1tYXJ5XCIsIFwiZm9vdGVyXCIsIFwic2hvd0hlYWRlclwiLCBcInRhYmxlTGF5b3V0XCIsIFwiY29tcG9uZW50c1wiLCBcImRpcmVjdGlvblwiLCBcInJvd0hvdmVyYWJsZVwiXSk7XG4gICAgLy8gUHVsbGVkIG91dCBvZiBgcmVzdGAgc28gaXQgZG9lc24ndCBsYW5kIG9uIHRoZSB3cmFwcGVyIGRpdjsgZWFjaCBlbnRyeSBwb2ludFxuICAgIC8vIGZvcndhcmRzIGl0cyBvd24gYHNjcm9sbGAgdG8gdGhlIGtlcm5lbCAoc2VlIEZvcndhcmRlZEtlcm5lbFByb3BzIG5vdGUpLlxuICAgIHZvaWQgX3Njcm9sbDtcbiAgICBjb25zdCBjbHMgPSBjbGFzc25hbWVzKFRBQkxFX0JMT0NLKTtcbiAgICAvLyBgbG9hZGluZ2AgYWNjZXB0cyBhIGJvb2xlYW4gb3IgYW4gb2JqZWN0IG92ZXJyaWRlLiBUaGUgb2JqZWN0IGZvcm0gZGVmYXVsdHNcbiAgICAvLyBgc3Bpbm5pbmdgIHRvIHRydWUgKHBhc3NpbmcgYSBjb25maWcgaW1wbGllcyBpbnRlbnQgdG8gc2hvdyB0aGUgb3ZlcmxheSkgYW5kXG4gICAgLy8gZmFsbHMgYmFjayB0byB0aGUgYnJhbmQgU3Bpbm5lciB3aGVuIG5vIGN1c3RvbSBgaW5kaWNhdG9yYCBpcyBzdXBwbGllZC5cbiAgICBjb25zdCBsb2FkaW5nQ29uZmlnID0gdHlwZW9mIGxvYWRpbmcgPT09ICdib29sZWFuJyA/IHsgc3Bpbm5pbmc6IGxvYWRpbmcgfSA6IGxvYWRpbmc7XG4gICAgY29uc3QgaXNMb2FkaW5nID0gKF9hID0gbG9hZGluZ0NvbmZpZy5zcGlubmluZykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZTtcbiAgICBjb25zdCBsb2FkaW5nSW5kaWNhdG9yID0gKF9iID0gbG9hZGluZ0NvbmZpZy5pbmRpY2F0b3IpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IF9qc3goU3Bpbm5lciwgeyB0eXBlOiBcImJyYW5kXCIsIHRpdGxlOiBcIkxvYWRpbmdcIiB9KTtcbiAgICBjb25zdCBnZXRSb3dLZXkgPSB1c2VNZW1vaXplZEZuKChyZWNvcmQsIGluZGV4KSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByb3dLZXkgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gcm93S2V5KHJlY29yZClcbiAgICAgICAgICAgIDogKF9hID0gcmVjb3JkW3Jvd0tleSAhPT0gbnVsbCAmJiByb3dLZXkgIT09IHZvaWQgMCA/IHJvd0tleSA6ICdrZXknXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogaW5kZXg7XG4gICAgfSk7XG4gICAgY29uc3QgcGlwZWxpbmUgPSB1c2VUYWJsZURhdGFQaXBlbGluZSh7IGNvbHVtbnMsIGRhdGFTb3VyY2UsIHBhZ2luYXRpb24sIG9uQ2hhbmdlIH0pO1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHVzZVRhYmxlU2VsZWN0aW9uKHtcbiAgICAgICAgcm93U2VsZWN0aW9uLFxuICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICBjdXJyZW50RGF0YVNvdXJjZTogcGlwZWxpbmUuY3VycmVudERhdGFTb3VyY2UsXG4gICAgICAgIGdldFJvd0tleSxcbiAgICB9KTtcbiAgICBjb25zdCBleHBhbmQgPSB1c2VUYWJsZUV4cGFuZCh7IGV4cGFuZGFibGUsIGRhdGFTb3VyY2UsIGdldFJvd0tleSB9KTtcbiAgICBjb25zdCByZW5kZXJlZENvbHVtbnMgPSB1c2VUYWJsZUNvbHVtbnMoe1xuICAgICAgICBjb2x1bW5zLFxuICAgICAgICB2YXJpYW50LFxuICAgICAgICBleHBhbmRhYmxlLFxuICAgICAgICBtZXJnZWRFeHBhbmRlZFJvd0tleXM6IGV4cGFuZC5tZXJnZWRFeHBhbmRlZFJvd0tleXMsXG4gICAgICAgIHRyaWdnZXJFeHBhbmQ6IGV4cGFuZC50cmlnZ2VyRXhwYW5kLFxuICAgICAgICByb3dTZWxlY3Rpb24sXG4gICAgICAgIG1lcmdlZFNlbGVjdGVkUm93S2V5czogc2VsZWN0aW9uLm1lcmdlZFNlbGVjdGVkUm93S2V5cyxcbiAgICAgICAgY2hlY2tib3hQcm9wc01hcDogc2VsZWN0aW9uLmNoZWNrYm94UHJvcHNNYXAsXG4gICAgICAgIGlzQWxsU2VsZWN0ZWQ6IHNlbGVjdGlvbi5pc0FsbFNlbGVjdGVkLFxuICAgICAgICBpc0luZGV0ZXJtaW5hdGU6IHNlbGVjdGlvbi5pc0luZGV0ZXJtaW5hdGUsXG4gICAgICAgIHRyaWdnZXJTZWxlY3Rpb246IHNlbGVjdGlvbi50cmlnZ2VyU2VsZWN0aW9uLFxuICAgICAgICB0cmlnZ2VyU2VsZWN0QWxsOiBzZWxlY3Rpb24udHJpZ2dlclNlbGVjdEFsbCxcbiAgICAgICAgc29ydGVyOiBwaXBlbGluZS5zb3J0ZXIsXG4gICAgICAgIHNldFNvcnRlcjogcGlwZWxpbmUuc2V0U29ydGVyLFxuICAgICAgICBmaWx0ZXJzOiBwaXBlbGluZS5maWx0ZXJzLFxuICAgICAgICBzZXRGaWx0ZXJzOiBwaXBlbGluZS5zZXRGaWx0ZXJzLFxuICAgICAgICBnZXRSb3dLZXksXG4gICAgfSk7XG4gICAgLy8gRGV2LW9ubHkgd2FybmluZzogbWl4aW5nIHJvdy1leHBhbnNpb24gd2l0aCB0cmVlLWRhdGEgKGNoaWxkcmVuQ29sdW1uTmFtZSlcbiAgICAvLyBwcm9kdWNlcyB0d28gY2hldnJvbnMgcGVyIHJvdyAodGhlIGxlZnRtb3N0IF9fZXhwYW5kX18gY29sdW1uIGZyb20gdGhlIHdyYXBwZXJcbiAgICAvLyBwbHVzIHRoZSBrZXJuZWwncyBwZXItaW5kZW50IG5lc3QgZXhwYW5kKS4gcmMtdGFibGUgaGFzIHRoZSBzYW1lIGdhcDtcbiAgICAvLyBwaWNrIG9uZSBtb2RlIGF0IGEgdGltZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICgoX2MgPSBwcm9jZXNzLmVudikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLk5PREVfRU5WKSAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICgoZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLmV4cGFuZGVkUm93UmVuZGVyKSAmJiBjaGlsZHJlbkNvbHVtbk5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbY29tcG9uZW50cy11aSBUYWJsZV0gQ29tYmluaW5nIGBleHBhbmRhYmxlLmV4cGFuZGVkUm93UmVuZGVyYCB3aXRoIGBjaGlsZHJlbkNvbHVtbk5hbWVgIGlzIG5vdCBzdXBwb3J0ZWQg4oCUIHRoZSBsZWZ0bW9zdCBleHBhbmQgY29sdW1uIHdpbGwgcmVuZGVyIGFsb25nc2lkZSB0aGUgbmVzdGVkIHRyZWUgZXhwYW5kZXIuIFVzZSBvbmUgbW9kZSBhdCBhIHRpbWUuJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgd3JhcHBlZEV4cGFuZGVkUm93UmVuZGVyID0gdXNlTWVtb2l6ZWRGbigocmVjb3JkLCBpbmRleCwgaW5kZW50LCBleHBhbmRlZCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIC8vIEhvbm9yIGByb3dFeHBhbmRhYmxlYDogZXZlbiBpZiBhIG5vbi1leHBhbmRhYmxlIHJvdydzIGtleSBzbmVha3MgaW50b1xuICAgICAgICAvLyBgZXhwYW5kZWRSb3dLZXlzYCwgcmVmdXNlIHRvIHJlbmRlciBpdHMgZXhwYW5zaW9uIGNvbnRlbnQuXG4gICAgICAgIGlmICgoZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLnJvd0V4cGFuZGFibGUpICYmICFleHBhbmRhYmxlLnJvd0V4cGFuZGFibGUocmVjb3JkKSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gKF9qc3goRXhwYW5kZWRSb3dDb250YWluZXIsIHsgY2hpbGRyZW46IChfYSA9IGV4cGFuZGFibGUgPT09IG51bGwgfHwgZXhwYW5kYWJsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXhwYW5kYWJsZS5leHBhbmRlZFJvd1JlbmRlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoZXhwYW5kYWJsZSwgcmVjb3JkLCBpbmRleCwgaW5kZW50LCBleHBhbmRlZCkgfSkpO1xuICAgIH0pO1xuICAgIC8vIFdpcmUga2VybmVsJ3Mgb25FeHBhbmQgKHRyaWdnZXJlZCBieSBleHBhbmRSb3dCeUNsaWNrKSB0byBvdXIgc3RhdGUuXG4gICAgY29uc3Qga2VybmVsT25FeHBhbmQgPSB1c2VNZW1vaXplZEZuKChleHBhbmRlZCwgcmVjb3JkKSA9PiB7XG4gICAgICAgIC8vIFRoZSBrZXJuZWwgcGFzc2VzIGEgcmVjb3JkIGZyb20gYGN1cnJlbnREYXRhU291cmNlYCAocG9zdCBzb3J0L2ZpbHRlci9wYWdpbmF0ZSkuXG4gICAgICAgIC8vIExvb2tpbmcgaXQgdXAgYWdhaW5zdCB0aGUgcmF3IGBkYXRhU291cmNlYCByZXR1cm5zIC0xIHdoZW4gdGhlIGNvbnN1bWVyXG4gICAgICAgIC8vIHJlY3JlYXRlcyB0aGUgYXJyYXkgZWFjaCByZW5kZXIsIG9yIGEgcG9zaXRpb25hbGx5IHdyb25nIGluZGV4IGFmdGVyIHNvcnQuXG4gICAgICAgIC8vIFVzZSBgY3VycmVudERhdGFTb3VyY2VgIHNvIHRoZSBpbmRleCBtYXRjaGVzIHdoYXQgdGhlIGtlcm5lbCBhY3R1YWxseSBzZWVzLlxuICAgICAgICBjb25zdCByZWNvcmRLZXkgPSBnZXRSb3dLZXkocmVjb3JkLCBwaXBlbGluZS5jdXJyZW50RGF0YVNvdXJjZS5pbmRleE9mKHJlY29yZCkpO1xuICAgICAgICBleHBhbmQub25LZXJuZWxFeHBhbmQoZXhwYW5kZWQsIHJlY29yZCwgcmVjb3JkS2V5KTtcbiAgICB9KTtcbiAgICBjb25zdCBtZXJnZWRFeHBhbmRhYmxlID0gdXNlTWVtbygoKSA9PiBleHBhbmRhYmxlXG4gICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBleHBhbmRhYmxlKSwgeyBleHBhbmRlZFJvd0tleXM6IGV4cGFuZC5tZXJnZWRFeHBhbmRlZFJvd0tleXMsIGV4cGFuZGVkUm93UmVuZGVyOiBleHBhbmRhYmxlLmV4cGFuZGVkUm93UmVuZGVyXG4gICAgICAgICAgICAgICAgPyB3cmFwcGVkRXhwYW5kZWRSb3dSZW5kZXJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCwgc2hvd0V4cGFuZENvbHVtbjogZmFsc2UsIG9uRXhwYW5kOiBrZXJuZWxPbkV4cGFuZCB9KVxuICAgICAgICA6IHVuZGVmaW5lZCwgW2V4cGFuZGFibGUsIGV4cGFuZC5tZXJnZWRFeHBhbmRlZFJvd0tleXMsIHdyYXBwZWRFeHBhbmRlZFJvd1JlbmRlciwga2VybmVsT25FeHBhbmRdKTtcbiAgICBjb25zdCByZXNvbHZlZFBhZ2luYXRpb24gPSBwaXBlbGluZS5wYWdpbmF0aW9uID09PSBmYWxzZVxuICAgICAgICA/IHsgY3VycmVudDogMSwgcGFnZVNpemU6IDEwIH1cbiAgICAgICAgOiBwaXBlbGluZS5wYWdpbmF0aW9uO1xuICAgIGNvbnN0IHBhZ2luYXRpb25Ob2RlID0gcGFnaW5hdGlvbiAhPT0gZmFsc2UgPyAoX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogYCR7cHJlZml4Q2xzfS1wYWdpbmF0aW9uYCwgY2hpbGRyZW46IF9qc3goUGFnaW5hdGlvbiwgeyB0b3RhbDogcGlwZWxpbmUudG90YWwsIHBhZ2VTaXplOiByZXNvbHZlZFBhZ2luYXRpb24ucGFnZVNpemUsIGN1cnJlbnQ6IHJlc29sdmVkUGFnaW5hdGlvbi5jdXJyZW50LCBvbkNoYW5nZTogKG5leHRQYWdlLCBuZXh0UGFnZVNpemUpID0+IHBpcGVsaW5lLnNldFBhZ2luYXRpb24oKGN1cnJlbnRQYWdpbmF0aW9uKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50UGFnaW5hdGlvbiksIHsgY3VycmVudDogbmV4dFBhZ2UsIHBhZ2VTaXplOiBuZXh0UGFnZVNpemUgfSkpKSB9KSB9KSkgOiBudWxsO1xuICAgIGNvbnN0IHdyYXBwZXJDbGFzc05hbWUgPSBqb2luQ2xzKGAke3ByZWZpeENsc30td3JhcHBlcmAsIGlzTG9hZGluZyAmJiBgJHtwcmVmaXhDbHN9LXdyYXBwZXItLWxvYWRpbmdgLCBib3JkZXJlZCAmJiBgJHtwcmVmaXhDbHN9LXdyYXBwZXItLWJvcmRlcmVkYCk7XG4gICAgY29uc3QgdGFibGVDbGFzc05hbWUgPSBqb2luQ2xzKGNscygpLCBjbHModmFyaWFudCksIHJvd0hvdmVyYWJsZSA9PT0gZmFsc2UgJiYgY2xzKCduby1ob3ZlcicpLCBjbGFzc05hbWUpO1xuICAgIGNvbnN0IGVtcHR5VGV4dCA9IGlzTG9hZGluZyAmJiAhZGF0YVNvdXJjZS5sZW5ndGggPyBfanN4KFwic3BhblwiLCB7fSkgOiBfanN4KFRhYmxlRW1wdHlTdGF0ZSwgeyBlbXB0eTogZW1wdHkgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJlZml4Q2xzLFxuICAgICAgICB3cmFwcGVyQ2xhc3NOYW1lLFxuICAgICAgICB0YWJsZUNsYXNzTmFtZSxcbiAgICAgICAgbG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICBsb2FkaW5nSW5kaWNhdG9yLFxuICAgICAgICByZW5kZXJlZENvbHVtbnMsXG4gICAgICAgIGN1cnJlbnREYXRhU291cmNlOiBwaXBlbGluZS5jdXJyZW50RGF0YVNvdXJjZSxcbiAgICAgICAgbWVyZ2VkRXhwYW5kYWJsZSxcbiAgICAgICAgZW1wdHlUZXh0LFxuICAgICAgICB3cmFwcGVySHRtbFByb3BzOiByZXN0LFxuICAgICAgICBmb3J3YXJkZWRLZXJuZWxQcm9wczoge1xuICAgICAgICAgICAgcm93S2V5OiByb3dLZXksXG4gICAgICAgICAgICBjaGlsZHJlbkNvbHVtbk5hbWUsXG4gICAgICAgICAgICBpbmRlbnRTaXplLFxuICAgICAgICAgICAgb25Sb3csXG4gICAgICAgICAgICByb3dDbGFzc05hbWUsXG4gICAgICAgICAgICBzdW1tYXJ5LFxuICAgICAgICAgICAgZm9vdGVyLFxuICAgICAgICAgICAgc2hvd0hlYWRlcixcbiAgICAgICAgICAgIHRhYmxlTGF5b3V0LFxuICAgICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgICAgIHJvd0hvdmVyYWJsZSxcbiAgICAgICAgICAgIHN0aWNreSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFnaW5hdGlvbk5vZGUsXG4gICAgfTtcbn07IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|
|
221
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZVNldHVwLmpzIiwiY29tcG9uZW50cy9UYWJsZS9zcmMvY29tcG9uZW50cy9UYWJsZS9jb3JlL3VzZVRhYmxlU2V0dXAudHN4Il0sIm5hbWVzIjpbIl9qc3hSdW50aW1lIiwicmVxdWlyZSIsIl9yZWFjdCIsIl91c2VNZW1vaXplZEZuIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jbGFzc25hbWVzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfUGFnaW5hdGlvbiIsIl9TcGlubmVyIiwiX0V4cGFuZGVkUm93Q29udGFpbmVyIiwiX0VtcHR5U3RhdGUiLCJfY29uc3RhbnRzIiwiX3VzZVRhYmxlRGF0YVBpcGVsaW5lIiwiX3VzZVRhYmxlU2VsZWN0aW9uIiwiX3VzZVRhYmxlRXhwYW5kIiwiX3VzZVRhYmxlQ29sdW1ucyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9fcmVzdCIsInMiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlVGFibGVTZXR1cCIsImV4cG9ydHMiLCJwcm9wcyIsIl9hIiwiX2IiLCJfYyIsIl9wcm9wcyRjbGFzc05hbWUiLCJjbGFzc05hbWUiLCJfcHJvcHMkcHJlZml4Q2xzIiwicHJlZml4Q2xzIiwiVEFCTEVfREVGQVVMVF9QUkVGSVgiLCJfcHJvcHMkdmFyaWFudCIsInZhcmlhbnQiLCJUQUJMRV9ERUZBVUxUX1ZBUklBTlQiLCJjb2x1bW5zIiwiZGF0YVNvdXJjZSIsInJvd0tleSIsImVtcHR5IiwiYm9yZGVyZWQiLCJfc2Nyb2xsIiwic2Nyb2xsIiwic3RpY2t5IiwicGFnaW5hdGlvbiIsInJvd1NlbGVjdGlvbiIsIl9wcm9wcyRsb2FkaW5nIiwibG9hZGluZyIsIm9uQ2hhbmdlIiwiY2hpbGRyZW5Db2x1bW5OYW1lIiwiaW5kZW50U2l6ZSIsImV4cGFuZGFibGUiLCJvblJvdyIsInJvd0NsYXNzTmFtZSIsInN1bW1hcnkiLCJmb290ZXIiLCJzaG93SGVhZGVyIiwidGFibGVMYXlvdXQiLCJjb21wb25lbnRzIiwiZGlyZWN0aW9uIiwicm93SG92ZXJhYmxlIiwib25TY3JvbGwiLCJyZXN0IiwiY2xzIiwiY2xhc3NuYW1lcyIsIlRBQkxFX0JMT0NLIiwibG9hZGluZ0NvbmZpZyIsInNwaW5uaW5nIiwiaXNMb2FkaW5nIiwibG9hZGluZ0luZGljYXRvciIsImluZGljYXRvciIsIl9qc3giLCJTcGlubmVyIiwidHlwZSIsInRpdGxlIiwiZ2V0Um93S2V5IiwidXNlTWVtb2l6ZWRGbiIsInJlY29yZCIsImluZGV4IiwicGlwZWxpbmUiLCJ1c2VUYWJsZURhdGFQaXBlbGluZSIsInNlbGVjdGlvbiIsInVzZVRhYmxlU2VsZWN0aW9uIiwiY3VycmVudERhdGFTb3VyY2UiLCJleHBhbmQiLCJ1c2VUYWJsZUV4cGFuZCIsInJlbmRlcmVkQ29sdW1ucyIsInVzZVRhYmxlQ29sdW1ucyIsIm1lcmdlZEV4cGFuZGVkUm93S2V5cyIsInRyaWdnZXJFeHBhbmQiLCJtZXJnZWRTZWxlY3RlZFJvd0tleXMiLCJjaGVja2JveFByb3BzTWFwIiwiaXNBbGxTZWxlY3RlZCIsImlzSW5kZXRlcm1pbmF0ZSIsInRyaWdnZXJTZWxlY3Rpb24iLCJ0cmlnZ2VyU2VsZWN0QWxsIiwic29ydGVyIiwic2V0U29ydGVyIiwiZmlsdGVycyIsInNldEZpbHRlcnMiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJleHBhbmRlZFJvd1JlbmRlciIsInVuZGVmaW5lZCIsImNvbnNvbGUiLCJ3YXJuIiwid3JhcHBlZEV4cGFuZGVkUm93UmVuZGVyIiwiaW5kZW50IiwiZXhwYW5kZWQiLCJyb3dFeHBhbmRhYmxlIiwiRXhwYW5kZWRSb3dDb250YWluZXIiLCJjaGlsZHJlbiIsImtlcm5lbE9uRXhwYW5kIiwicmVjb3JkS2V5Iiwib25LZXJuZWxFeHBhbmQiLCJtZXJnZWRFeHBhbmRhYmxlIiwidXNlTWVtbyIsImFzc2lnbiIsImV4cGFuZGVkUm93S2V5cyIsInNob3dFeHBhbmRDb2x1bW4iLCJvbkV4cGFuZCIsInJlc29sdmVkUGFnaW5hdGlvbiIsImN1cnJlbnQiLCJwYWdlU2l6ZSIsInBhZ2luYXRpb25Ob2RlIiwiY29uY2F0IiwiUGFnaW5hdGlvbiIsInRvdGFsIiwibmV4dFBhZ2UiLCJuZXh0UGFnZVNpemUiLCJzZXRQYWdpbmF0aW9uIiwiY3VycmVudFBhZ2luYXRpb24iLCJ3cmFwcGVyQ2xhc3NOYW1lIiwiam9pbkNscyIsInRhYmxlQ2xhc3NOYW1lIiwiZW1wdHlUZXh0IiwiVGFibGVFbXB0eVN0YXRlIiwid3JhcHBlckh0bWxQcm9wcyIsImZvcndhcmRlZEtlcm5lbFByb3BzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVdBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQ1hBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUMsdUJBQUEsQ0FBQUwsT0FBQTtBQUNBLElBQUFNLFdBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLHFCQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxXQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxVQUFBLEdBQUFWLE9BQUE7QUFLQSxJQUFBVyxxQkFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksa0JBQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLGVBQUEsR0FBQWIsT0FBQTtBQUNBLElBQUFjLGdCQUFBLEdBQUFkLE9BQUE7QUFBb0QsU0FBQWUseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFYLHdCQUFBVyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLGNBQUFSLENBQUEsRUFBQUcsQ0FBQSxJQUFBQSxDQUFBLENBQUFlLEdBQUEsQ0FBQWxCLENBQUEsRUFBQVEsQ0FBQSxHQUFBQSxDQUFBO0FEZnBELElBQUlXLE1BQU0sR0FBSSxVQUFRLFNBQUtBLE1BQU0sSUFBSyxVQUFVQyxDQUFDLEVBQUVwQixDQUFDLEVBQUU7RUFDbEQsSUFBSUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNWLEtBQUssSUFBSWtCLENBQUMsSUFBSUQsQ0FBQyxFQUFFLElBQUlULE1BQU0sQ0FBQ1csU0FBUyxDQUFDUCxjQUFjLENBQUNDLElBQUksQ0FBQ0ksQ0FBQyxFQUFFQyxDQUFDLENBQUMsSUFBSXJCLENBQUMsQ0FBQ3VCLE9BQU8sQ0FBQ0YsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUMvRWxCLENBQUMsQ0FBQ2tCLENBQUMsQ0FBQyxHQUFHRCxDQUFDLENBQUNDLENBQUMsQ0FBQztFQUNmLElBQUlELENBQUMsSUFBSSxJQUFJLElBQUksT0FBT1QsTUFBTSxDQUFDYSxxQkFBcUIsS0FBSyxVQUFVLEVBQy9ELEtBQUssSUFBSVAsQ0FBQyxHQUFHLENBQUMsRUFBRUksQ0FBQyxHQUFHVixNQUFNLENBQUNhLHFCQUFxQixDQUFDSixDQUFDLENBQUMsRUFBRUgsQ0FBQyxHQUFHSSxDQUFDLENBQUNJLE1BQU0sRUFBRVIsQ0FBQyxFQUFFLEVBQUU7SUFDcEUsSUFBSWpCLENBQUMsQ0FBQ3VCLE9BQU8sQ0FBQ0YsQ0FBQyxDQUFDSixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSU4sTUFBTSxDQUFDVyxTQUFTLENBQUNJLG9CQUFvQixDQUFDVixJQUFJLENBQUNJLENBQUMsRUFBRUMsQ0FBQyxDQUFDSixDQUFDLENBQUMsQ0FBQyxFQUMxRWQsQ0FBQyxDQUFDa0IsQ0FBQyxDQUFDSixDQUFDLENBQUMsQ0FBQyxHQUFHRyxDQUFDLENBQUNDLENBQUMsQ0FBQ0osQ0FBQyxDQUFDLENBQUM7RUFDekI7RUFDSixPQUFPZCxDQUFDO0FBQ1osQ0FBQztBQ21FRDtBRHBEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDc0RPLElBQU13QixhQUFhLEdBQUFDLE9BQUEsQ0FBQUQsYUFBQSxHQUFHLFNBQWhCQSxhQUFhQSxDQUN4QkUsS0FBb0IsRUFDRztFRHREckIsSUFBSUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUU7RUN1RGhCLElBQUFDLGdCQUFBLEdBNkJJSixLQUFLLENBNUJQSyxTQUFTO0lBQVRBLFNBQVMsR0FBQUQsZ0JBQUEsY0FBRyxFQUFFLEdBQUFBLGdCQUFBO0lBQUFFLGdCQUFBLEdBNEJaTixLQUFLLENBM0JQTyxTQUFTO0lBQVRBLFNBQVMsR0FBQUQsZ0JBQUEsY0FBR0UsK0JBQW9CLEdBQUFGLGdCQUFBO0lBQUFHLGNBQUEsR0EyQjlCVCxLQUFLLENBMUJQVSxPQUFPO0lBQVBBLE9BQU8sR0FBQUQsY0FBQSxjQUFHRSxnQ0FBcUIsR0FBQUYsY0FBQTtJQUMvQkcsT0FBTyxHQXlCTFosS0FBSyxDQXpCUFksT0FBTztJQUNQQyxVQUFVLEdBd0JSYixLQUFLLENBeEJQYSxVQUFVO0lBQ1ZDLE1BQU0sR0F1QkpkLEtBQUssQ0F2QlBjLE1BQU07SUFDTkMsS0FBSyxHQXNCSGYsS0FBSyxDQXRCUGUsS0FBSztJQUNMQyxRQUFRLEdBcUJOaEIsS0FBSyxDQXJCUGdCLFFBQVE7SUFDQUMsT0FBTyxHQW9CYmpCLEtBQUssQ0FwQlBrQixNQUFNO0lBQ05DLE1BQU0sR0FtQkpuQixLQUFLLENBbkJQbUIsTUFBTTtJQUNOQyxVQUFVLEdBa0JScEIsS0FBSyxDQWxCUG9CLFVBQVU7SUFDVkMsWUFBWSxHQWlCVnJCLEtBQUssQ0FqQlBxQixZQUFZO0lBQUFDLGNBQUEsR0FpQlZ0QixLQUFLLENBaEJQdUIsT0FBTztJQUFQQSxPQUFPLEdBQUFELGNBQUEsY0FBRyxLQUFLLEdBQUFBLGNBQUE7SUFDZkUsUUFBUSxHQWVOeEIsS0FBSyxDQWZQd0IsUUFBUTtJQUNSQyxrQkFBa0IsR0FjaEJ6QixLQUFLLENBZFB5QixrQkFBa0I7SUFDbEJDLFVBQVUsR0FhUjFCLEtBQUssQ0FiUDBCLFVBQVU7SUFDVkMsVUFBVSxHQVlSM0IsS0FBSyxDQVpQMkIsVUFBVTtJQUNWQyxLQUFLLEdBV0g1QixLQUFLLENBWFA0QixLQUFLO0lBQ0xDLFlBQVksR0FVVjdCLEtBQUssQ0FWUDZCLFlBQVk7SUFDWkMsT0FBTyxHQVNMOUIsS0FBSyxDQVRQOEIsT0FBTztJQUNQQyxNQUFNLEdBUUovQixLQUFLLENBUlArQixNQUFNO0lBQ05DLFVBQVUsR0FPUmhDLEtBQUssQ0FQUGdDLFVBQVU7SUFDVkMsV0FBVyxHQU1UakMsS0FBSyxDQU5QaUMsV0FBVztJQUNYQyxVQUFVLEdBS1JsQyxLQUFLLENBTFBrQyxVQUFVO0lBQ1ZDLFNBQVMsR0FJUG5DLEtBQUssQ0FKUG1DLFNBQVM7SUFDVEMsWUFBWSxHQUdWcEMsS0FBSyxDQUhQb0MsWUFBWTtJQUNaQyxRQUFRLEdBRU5yQyxLQUFLLENBRlBxQyxRQUFRO0lBQ0xDLElBQUksR0FBQWhELE1BQUEsQ0FDTFUsS0FBSyxFQTdCSCxDQUFBLFdBQUEsRUFBQSxXQUFBLEVBQUEsU0FBQSxFQUFBLFNBQUEsRUFBQSxZQUFBLEVBQUEsUUFBQSxFQUFBLE9BQUEsRUFBQSxVQUFBLEVBQUEsUUFBQSxFQUFBLFFBQUEsRUFBQSxZQUFBLEVBQUEsY0FBQSxFQUFBLFNBQUEsRUFBQSxVQUFBLEVBQUEsb0JBQUEsRUFBQSxZQUFBLEVBQUEsWUFBQSxFQUFBLE9BQUEsRUFBQSxjQUFBLEVBQUEsU0FBQSxFQUFBLFFBQUEsRUFBQSxZQUFBLEVBQUEsYUFBQSxFQUFBLFlBQUEsRUFBQSxXQUFBLEVBQUEsY0FBQSxFQUFBLFVBQUEsQ0E2QkwsQ0FBUTtFQUNUO0VBQ0E7RUFDQSxLQUFLaUIsT0FBTztFQUVaLElBQU1zQixHQUFHLEdBQUcsSUFBQUMsc0JBQVUsRUFBQ0Msc0JBQVcsQ0FBQztFQUVuQztFQUNBO0VBQ0E7RUFDQSxJQUFNQyxhQUFhLEdBQ2pCLE9BQU9uQixPQUFPLEtBQUssU0FBUyxHQUFHO0lBQUVvQixRQUFRLEVBQUVwQjtFQUFPLENBQUUsR0FBR0EsT0FBTztFQUNoRSxJQUFNcUIsU0FBUyxHQUFHLENBQUEzQyxFQUFBLEdBQUF5QyxhQUFhLENBQUNDLFFBQVEsTUFBQSxJQUFBLElBQUExQyxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsR0FBSSxJQUFJO0VBQ2hELElBQU00QyxnQkFBZ0IsR0FDcEIsQ0FBQTNDLEVBQUEsR0FBQXdDLGFBQWEsQ0FBQ0ksU0FBUyxNQUFBLElBQUEsSUFBQTVDLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUFJLElBQUE2QyxlQUFBLEVBQUNDLGdCQUFPLEVBQUE7SUFBQ0MsSUFBSSxFQUFDLE9BQU87SUFBQ0MsS0FBSyxFQUFDO0VBQVMsQ0FBQSxDQUFHO0VBRXJFLElBQU1DLFNBQVMsR0FBRyxJQUFBQyx5QkFBYSxFQUM3QixVQUFDQyxNQUFTLEVBQUVDLEtBQWEsRUFBUztJRHhGOUIsSUFBSXJELEVBQUU7SUN5RlIsT0FBQSxPQUFPYSxNQUFNLEtBQUssVUFBVSxHQUN4QkEsTUFBTSxDQUFDdUMsTUFBTSxDQUFDLEdBQ2QsQ0FBQXBELEVBQUEsR0FBQ29ELE1BQU0sQ0FBQ3ZDLE1BQU0sS0FBQSxJQUFBLElBQU5BLE1BQU0sS0FBQSxLQUFBLENBQUEsR0FBTkEsTUFBTSxHQUFJLEtBQUssQ0FBUyxNQUFBLElBQUEsSUFBQWIsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLEdBQUlxRCxLQUFLO0VEdkYvQyxDQ3VGK0MsQ0FDaEQ7RUFFRCxJQUFNQyxRQUFRLEdBQUcsSUFBQUMsMENBQW9CLEVBQUM7SUFBRTVDLE9BQU8sRUFBUEEsT0FBTztJQUFFQyxVQUFVLEVBQVZBLFVBQVU7SUFBRU8sVUFBVSxFQUFWQSxVQUFVO0lBQUVJLFFBQVEsRUFBUkE7RUFBUSxDQUFFLENBQUM7RUFDcEYsSUFBTWlDLFNBQVMsR0FBRyxJQUFBQyxvQ0FBaUIsRUFBQztJQUNsQ3JDLFlBQVksRUFBWkEsWUFBWTtJQUNaUixVQUFVLEVBQVZBLFVBQVU7SUFDVjhDLGlCQUFpQixFQUFFSixRQUFRLENBQUNJLGlCQUFpQjtJQUM3Q1IsU0FBUyxFQUFUQTtFRHhGQSxDQ3lGRCxDQUFDO0VBQ0YsSUFBTVMsTUFBTSxHQUFHLElBQUFDLDhCQUFjLEVBQUM7SUFBRWxDLFVBQVUsRUFBVkEsVUFBVTtJQUFFZCxVQUFVLEVBQVZBLFVBQVU7SUFBRXNDLFNBQVMsRUFBVEE7RUFBUyxDQUFFLENBQUM7RUFFcEUsSUFBTVcsZUFBZSxHQUFHLElBQUFDLGdDQUFlLEVBQUk7SUFDekNuRCxPQUFPLEVBQVBBLE9BQU87SUFDUEYsT0FBTyxFQUFQQSxPQUFPO0lBQ1BpQixVQUFVLEVBQVZBLFVBQVU7SUFDVnFDLHFCQUFxQixFQUFFSixNQUFNLENBQUNJLHFCQUFxQjtJQUNuREMsYUFBYSxFQUFFTCxNQUFNLENBQUNLLGFBQWE7SUFDbkM1QyxZQUFZLEVBQVpBLFlBQVk7SUFDWjZDLHFCQUFxQixFQUFFVCxTQUFTLENBQUNTLHFCQUFxQjtJQUN0REMsZ0JBQWdCLEVBQUVWLFNBQVMsQ0FBQ1UsZ0JBQWdCO0lBQzVDQyxhQUFhLEVBQUVYLFNBQVMsQ0FBQ1csYUFBYTtJQUN0Q0MsZUFBZSxFQUFFWixTQUFTLENBQUNZLGVBQWU7SUFDMUNDLGdCQUFnQixFQUFFYixTQUFTLENBQUNhLGdCQUFnQjtJQUM1Q0MsZ0JBQWdCLEVBQUVkLFNBQVMsQ0FBQ2MsZ0JBQWdCO0lBQzVDQyxNQUFNLEVBQUVqQixRQUFRLENBQUNpQixNQUFNO0lBQ3ZCQyxTQUFTLEVBQUVsQixRQUFRLENBQUNrQixTQUFTO0lBQzdCQyxPQUFPLEVBQUVuQixRQUFRLENBQUNtQixPQUFPO0lBQ3pCQyxVQUFVLEVBQUVwQixRQUFRLENBQUNvQixVQUFVO0lBQy9CeEIsU0FBUyxFQUFUQTtFRHpGQSxDQzBGRCxDQUFDO0VBRUY7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQUksT0FBT3lCLE9BQU8sS0FBSyxXQUFXLElBQUksQ0FBQSxDQUFBekUsRUFBQSxHQUFBeUUsT0FBTyxDQUFDQyxHQUFHLE1BQUEsSUFBQSxJQUFBMUUsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUUyRSxRQUFRLE1BQUssWUFBWSxFQUFFO0lBQzVFLElBQUksQ0FBQW5ELFVBQVUsS0FBQSxJQUFBLElBQVZBLFVBQVUsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBVkEsVUFBVSxDQUFFb0QsaUJBQWlCLEtBQUl0RCxrQkFBa0IsS0FBS3VELFNBQVMsRUFBRTtNQUNyRUMsT0FBTyxDQUFDQyxJQUFJLENBQ1YsZ05BQWdOLENBQ2pOO0lBQ0g7RUFDRjtFQUVBLElBQU1DLHdCQUF3QixHQUFHLElBQUEvQix5QkFBYSxFQUM1QyxVQUFDQyxNQUFTLEVBQUVDLEtBQWEsRUFBRThCLE1BQWMsRUFBRUMsUUFBaUIsRUFBSTtJRDlGNUQsSUFBSXBGLEVBQUU7SUMrRlI7SUFDQTtJQUNBLElBQUksQ0FBQTBCLFVBQVUsS0FBQSxJQUFBLElBQVZBLFVBQVUsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBVkEsVUFBVSxDQUFFMkQsYUFBYSxLQUFJLENBQUMzRCxVQUFVLENBQUMyRCxhQUFhLENBQUNqQyxNQUFNLENBQUMsRUFBRSxPQUFPLElBQUk7SUFDL0UsT0FDRSxJQUFBTixlQUFBLEVBQUN3QywwQ0FBb0IsRUFBQTtNQUFBQyxRQUFBLEVBQ2xCLENBQUF2RixFQUFBLEdBQUEwQixVQUFVLEtBQUEsSUFBQSxJQUFWQSxVQUFVLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQVZBLFVBQVUsQ0FBRW9ELGlCQUFpQixNQUFBLElBQUEsSUFBQTlFLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFBZCxJQUFBLENBQUF3QyxVQUFBLEVBQUcwQixNQUFNLEVBQUVDLEtBQUssRUFBRThCLE1BQU0sRUFBRUMsUUFBUTtJQUFDLENBQUEsQ0FDNUM7RUFFM0IsQ0FBQyxDQUNGO0VBRUQ7RUFDQSxJQUFNSSxjQUFjLEdBQUcsSUFBQXJDLHlCQUFhLEVBQUMsVUFBQ2lDLFFBQWlCLEVBQUVoQyxNQUFTLEVBQUk7SUFDcEU7SUFDQTtJQUNBO0lBQ0E7SUFDQSxJQUFNcUMsU0FBUyxHQUFHdkMsU0FBUyxDQUFDRSxNQUFNLEVBQUVFLFFBQVEsQ0FBQ0ksaUJBQWlCLENBQUNqRSxPQUFPLENBQUMyRCxNQUFNLENBQUMsQ0FBQztJQUMvRU8sTUFBTSxDQUFDK0IsY0FBYyxDQUFDTixRQUFRLEVBQUVoQyxNQUFNLEVBQUVxQyxTQUFTLENBQUM7RUFDcEQsQ0FBQyxDQUFDO0VBRUYsSUFBTUUsZ0JBQWdCLEdBQW9DLElBQUFDLGNBQU8sRUFDL0Q7SUFBQSxPQUNFbEUsVUFBVSxHQUNMN0MsTUFBQSxDQUFBZ0gsTUFBQSxDQUFBaEgsTUFBQSxDQUFBZ0gsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUNJbkUsVUFBVSxDQUFBLEVBQUE7TUFDYm9FLGVBQWUsRUFBRW5DLE1BQU0sQ0FBQ0kscUJBQXFCO01BQzdDZSxpQkFBaUIsRUFBRXBELFVBQVUsQ0FBQ29ELGlCQUFpQixHQUMzQ0ksd0JBQXdCLEdBQ3hCSCxTQUFTO01BQ2JnQixnQkFBZ0IsRUFBRSxLQUFLO01BQ3ZCQyxRQUFRLEVBQUVSO0lBQWMsQ0FBQSxDQUNELEdBQ3pCVCxTQUFTO0VBQUEsR0FDZixDQUFDckQsVUFBVSxFQUFFaUMsTUFBTSxDQUFDSSxxQkFBcUIsRUFBRW1CLHdCQUF3QixFQUFFTSxjQUFjLENBQUMsQ0FDckY7RUFFRCxJQUFNUyxrQkFBa0IsR0FBRzNDLFFBQVEsQ0FBQ25DLFVBQVUsS0FBSyxLQUFLLEdBQ3BEO0lBQUUrRSxPQUFPLEVBQUUsQ0FBQztJQUFFQyxRQUFRLEVBQUU7RUFBRSxDQUFFLEdBQzVCN0MsUUFBUSxDQUFDbkMsVUFBVTtFQUV2QixJQUFNaUYsY0FBYyxHQUFjakYsVUFBVSxLQUFLLEtBQUssR0FDcEQsSUFBQTJCLGVBQUEsRUFBQSxLQUFBLEVBQUE7SUFBSzFDLFNBQVMsS0FBQWlHLE1BQUEsQ0FBSy9GLFNBQVMsZ0JBQWE7SUFBQWlGLFFBQUEsRUFDdkMsSUFBQXpDLGVBQUEsRUFBQ3dELHNCQUFVLEVBQUE7TUFDVEMsS0FBSyxFQUFFakQsUUFBUSxDQUFDaUQsS0FBSztNQUNyQkosUUFBUSxFQUFFRixrQkFBa0IsQ0FBQ0UsUUFBUTtNQUNyQ0QsT0FBTyxFQUFFRCxrQkFBa0IsQ0FBQ0MsT0FBTztNQUNuQzNFLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHaUYsUUFBUSxFQUFFQyxZQUFZO1FBQUEsT0FDL0JuRCxRQUFRLENBQUNvRCxhQUFhLENBQUMsVUFBQ0MsaUJBQWlCO1VBQUEsT0FBSzlILE1BQUEsQ0FBQWdILE1BQUEsQ0FBQWhILE1BQUEsQ0FBQWdILE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFDekNjLGlCQUFpQixDQUFBLEVBQUE7WUFDcEJULE9BQU8sRUFBRU0sUUFBUTtZQUNqQkwsUUFBUSxFQUFFTTtVQUFZLENBQUEsQ0FBQTtRQUFBLENBQ3RCLENBQUM7TUFBQTtJQUFBLENBQUE7RUFFTCxDQUFBLENBQ0UsR0FDSixJQUFJO0VBRVIsSUFBTUcsZ0JBQWdCLEdBQUcsSUFBQUMsbUJBQU8sS0FBQVIsTUFBQSxDQUMzQi9GLFNBQVMsZUFDWnFDLFNBQVMsT0FBQTBELE1BQUEsQ0FBTy9GLFNBQVMsc0JBQW1CLEVBQzVDUyxRQUFRLE9BQUFzRixNQUFBLENBQU8vRixTQUFTLHVCQUFvQixDQUM3QztFQUVELElBQU13RyxjQUFjLEdBQUcsSUFBQUQsbUJBQU8sRUFDNUJ2RSxHQUFHLENBQUEsQ0FBRSxFQUNMQSxHQUFHLENBQUM3QixPQUFPLENBQUMsRUFDWjBCLFlBQVksS0FBSyxLQUFLLElBQUlHLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFDekNsQyxTQUFTLENBQ1Y7RUFFRCxJQUFNMkcsU0FBUyxHQUNicEUsU0FBUyxJQUFJLENBQUMvQixVQUFVLENBQUNqQixNQUFNLEdBQUcsSUFBQW1ELGVBQUEsRUFBQSxNQUFBLEVBQUEsQ0FBQSxDQUFBLENBQVEsR0FBRyxJQUFBQSxlQUFBLEVBQUNrRSwyQkFBZSxFQUFBO0lBQUNsRyxLQUFLLEVBQUVBO0VBQUssQ0FBQSxDQUFJO0VBRWhGLE9BQU87SUFDTFIsU0FBUyxFQUFUQSxTQUFTO0lBQ1RzRyxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtJQUNoQkUsY0FBYyxFQUFkQSxjQUFjO0lBQ2R4RixPQUFPLEVBQUVxQixTQUFTO0lBQ2xCQyxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtJQUNoQmlCLGVBQWUsRUFBZkEsZUFBZTtJQUNmSCxpQkFBaUIsRUFBRUosUUFBUSxDQUFDSSxpQkFBaUI7SUFDN0NpQyxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtJQUNoQm9CLFNBQVMsRUFBVEEsU0FBUztJQUNURSxnQkFBZ0IsRUFBRTVFLElBQUk7SUFDdEI2RSxvQkFBb0IsRUFBRTtNQUNwQnJHLE1BQU0sRUFBRUEsTUFBdUM7TUFDL0NXLGtCQUFrQixFQUFsQkEsa0JBQWtCO01BQ2xCQyxVQUFVLEVBQVZBLFVBQVU7TUFDVkUsS0FBSyxFQUFMQSxLQUFLO01BQ0xDLFlBQVksRUFBWkEsWUFBWTtNQUNaQyxPQUFPLEVBQVBBLE9BQU87TUFDUEMsTUFBTSxFQUFOQSxNQUFNO01BQ05DLFVBQVUsRUFBVkEsVUFBVTtNQUNWQyxXQUFXLEVBQVhBLFdBQVc7TUFDWEMsVUFBVSxFQUFWQSxVQUFVO01BQ1ZDLFNBQVMsRUFBVEEsU0FBUztNQUNUQyxZQUFZLEVBQVpBLFlBQVk7TUFDWmpCLE1BQU0sRUFBTkEsTUFBTTtNQUNOa0IsUUFBUSxFQUFSQTtJRDVJRSxDQzZJSDtJQUNEZ0UsY0FBYyxFQUFkQTtFRDVJQSxDQzZJRDtBQUNILENBQUMiLCJmaWxlIjoiY29tcG9uZW50cy9UYWJsZS9jb3JlL3VzZVRhYmxlU2V0dXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgY2xhc3NuYW1lcywgeyBqb2luQ2xzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnLi4vLi4vUGFnaW5hdGlvbic7XG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnLi4vLi4vU3Bpbm5lcic7XG5pbXBvcnQgeyBFeHBhbmRlZFJvd0NvbnRhaW5lciB9IGZyb20gJy4uL3JlbmRlcmVycy9FeHBhbmRlZFJvd0NvbnRhaW5lcic7XG5pbXBvcnQgeyBUYWJsZUVtcHR5U3RhdGUgfSBmcm9tICcuLi9yZW5kZXJlcnMvRW1wdHlTdGF0ZSc7XG5pbXBvcnQgeyBUQUJMRV9CTE9DSywgVEFCTEVfREVGQVVMVF9QUkVGSVgsIFRBQkxFX0RFRkFVTFRfVkFSSUFOVCwgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdXNlVGFibGVEYXRhUGlwZWxpbmUgfSBmcm9tICcuL3VzZVRhYmxlRGF0YVBpcGVsaW5lJztcbmltcG9ydCB7IHVzZVRhYmxlU2VsZWN0aW9uIH0gZnJvbSAnLi91c2VUYWJsZVNlbGVjdGlvbic7XG5pbXBvcnQgeyB1c2VUYWJsZUV4cGFuZCB9IGZyb20gJy4vdXNlVGFibGVFeHBhbmQnO1xuaW1wb3J0IHsgdXNlVGFibGVDb2x1bW5zIH0gZnJvbSAnLi91c2VUYWJsZUNvbHVtbnMnO1xuLyoqXG4gKiBDZW50cmFsaXNlcyB0aGUgd2lyaW5nIHNoYXJlZCBieSBgVGFibGVgIGFuZCBgVmlydHVhbFRhYmxlYDpcbiAqICAtIGRlc3RydWN0dXJlIHByb3BzXG4gKiAgLSByZXNvbHZlIHJvdyBrZXlcbiAqICAtIHJ1biBwaXBlbGluZSAvIHNlbGVjdGlvbiAvIGV4cGFuZCAvIGNvbHVtbiB0cmFuc2Zvcm1zXG4gKiAgLSBidWlsZCBrZXJuZWwtcmVhZHkgcHJvcHNcbiAqICAtIHNwbGl0IG9mZiBwYXNzLXRocm91Z2ggSFRNTCBhdHRyaWJ1dGVzIHNvIHRoZXkgY2FuIGxhbmQgb24gdGhlIG91dGVyIHdyYXBwZXJcbiAqICAgIGRpdiAoaW5zdGVhZCBvZiBiZWluZyBzcHJlYWQgdW50eXBlZCBpbnRvIHRoZSBrZXJuZWwgdmlhIGByZXN0IGFzIG9iamVjdGApLlxuICovXG5leHBvcnQgY29uc3QgdXNlVGFibGVTZXR1cCA9IChwcm9wcykgPT4ge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lID0gJycsIHByZWZpeENscyA9IFRBQkxFX0RFRkFVTFRfUFJFRklYLCB2YXJpYW50ID0gVEFCTEVfREVGQVVMVF9WQVJJQU5ULCBjb2x1bW5zLCBkYXRhU291cmNlLCByb3dLZXksIGVtcHR5LCBib3JkZXJlZCwgc2Nyb2xsOiBfc2Nyb2xsLCBzdGlja3ksIHBhZ2luYXRpb24sIHJvd1NlbGVjdGlvbiwgbG9hZGluZyA9IGZhbHNlLCBvbkNoYW5nZSwgY2hpbGRyZW5Db2x1bW5OYW1lLCBpbmRlbnRTaXplLCBleHBhbmRhYmxlLCBvblJvdywgcm93Q2xhc3NOYW1lLCBzdW1tYXJ5LCBmb290ZXIsIHNob3dIZWFkZXIsIHRhYmxlTGF5b3V0LCBjb21wb25lbnRzLCBkaXJlY3Rpb24sIHJvd0hvdmVyYWJsZSwgb25TY3JvbGwgfSA9IHByb3BzLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJjbGFzc05hbWVcIiwgXCJwcmVmaXhDbHNcIiwgXCJ2YXJpYW50XCIsIFwiY29sdW1uc1wiLCBcImRhdGFTb3VyY2VcIiwgXCJyb3dLZXlcIiwgXCJlbXB0eVwiLCBcImJvcmRlcmVkXCIsIFwic2Nyb2xsXCIsIFwic3RpY2t5XCIsIFwicGFnaW5hdGlvblwiLCBcInJvd1NlbGVjdGlvblwiLCBcImxvYWRpbmdcIiwgXCJvbkNoYW5nZVwiLCBcImNoaWxkcmVuQ29sdW1uTmFtZVwiLCBcImluZGVudFNpemVcIiwgXCJleHBhbmRhYmxlXCIsIFwib25Sb3dcIiwgXCJyb3dDbGFzc05hbWVcIiwgXCJzdW1tYXJ5XCIsIFwiZm9vdGVyXCIsIFwic2hvd0hlYWRlclwiLCBcInRhYmxlTGF5b3V0XCIsIFwiY29tcG9uZW50c1wiLCBcImRpcmVjdGlvblwiLCBcInJvd0hvdmVyYWJsZVwiLCBcIm9uU2Nyb2xsXCJdKTtcbiAgICAvLyBQdWxsZWQgb3V0IG9mIGByZXN0YCBzbyBpdCBkb2Vzbid0IGxhbmQgb24gdGhlIHdyYXBwZXIgZGl2OyBlYWNoIGVudHJ5IHBvaW50XG4gICAgLy8gZm9yd2FyZHMgaXRzIG93biBgc2Nyb2xsYCB0byB0aGUga2VybmVsIChzZWUgRm9yd2FyZGVkS2VybmVsUHJvcHMgbm90ZSkuXG4gICAgdm9pZCBfc2Nyb2xsO1xuICAgIGNvbnN0IGNscyA9IGNsYXNzbmFtZXMoVEFCTEVfQkxPQ0spO1xuICAgIC8vIGBsb2FkaW5nYCBhY2NlcHRzIGEgYm9vbGVhbiBvciBhbiBvYmplY3Qgb3ZlcnJpZGUuIFRoZSBvYmplY3QgZm9ybSBkZWZhdWx0c1xuICAgIC8vIGBzcGlubmluZ2AgdG8gdHJ1ZSAocGFzc2luZyBhIGNvbmZpZyBpbXBsaWVzIGludGVudCB0byBzaG93IHRoZSBvdmVybGF5KSBhbmRcbiAgICAvLyBmYWxscyBiYWNrIHRvIHRoZSBicmFuZCBTcGlubmVyIHdoZW4gbm8gY3VzdG9tIGBpbmRpY2F0b3JgIGlzIHN1cHBsaWVkLlxuICAgIGNvbnN0IGxvYWRpbmdDb25maWcgPSB0eXBlb2YgbG9hZGluZyA9PT0gJ2Jvb2xlYW4nID8geyBzcGlubmluZzogbG9hZGluZyB9IDogbG9hZGluZztcbiAgICBjb25zdCBpc0xvYWRpbmcgPSAoX2EgPSBsb2FkaW5nQ29uZmlnLnNwaW5uaW5nKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0cnVlO1xuICAgIGNvbnN0IGxvYWRpbmdJbmRpY2F0b3IgPSAoX2IgPSBsb2FkaW5nQ29uZmlnLmluZGljYXRvcikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogX2pzeChTcGlubmVyLCB7IHR5cGU6IFwiYnJhbmRcIiwgdGl0bGU6IFwiTG9hZGluZ1wiIH0pO1xuICAgIGNvbnN0IGdldFJvd0tleSA9IHVzZU1lbW9pemVkRm4oKHJlY29yZCwgaW5kZXgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHJvd0tleSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyByb3dLZXkocmVjb3JkKVxuICAgICAgICAgICAgOiAoX2EgPSByZWNvcmRbcm93S2V5ICE9PSBudWxsICYmIHJvd0tleSAhPT0gdm9pZCAwID8gcm93S2V5IDogJ2tleSddKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBpbmRleDtcbiAgICB9KTtcbiAgICBjb25zdCBwaXBlbGluZSA9IHVzZVRhYmxlRGF0YVBpcGVsaW5lKHsgY29sdW1ucywgZGF0YVNvdXJjZSwgcGFnaW5hdGlvbiwgb25DaGFuZ2UgfSk7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdXNlVGFibGVTZWxlY3Rpb24oe1xuICAgICAgICByb3dTZWxlY3Rpb24sXG4gICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgIGN1cnJlbnREYXRhU291cmNlOiBwaXBlbGluZS5jdXJyZW50RGF0YVNvdXJjZSxcbiAgICAgICAgZ2V0Um93S2V5LFxuICAgIH0pO1xuICAgIGNvbnN0IGV4cGFuZCA9IHVzZVRhYmxlRXhwYW5kKHsgZXhwYW5kYWJsZSwgZGF0YVNvdXJjZSwgZ2V0Um93S2V5IH0pO1xuICAgIGNvbnN0IHJlbmRlcmVkQ29sdW1ucyA9IHVzZVRhYmxlQ29sdW1ucyh7XG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIHZhcmlhbnQsXG4gICAgICAgIGV4cGFuZGFibGUsXG4gICAgICAgIG1lcmdlZEV4cGFuZGVkUm93S2V5czogZXhwYW5kLm1lcmdlZEV4cGFuZGVkUm93S2V5cyxcbiAgICAgICAgdHJpZ2dlckV4cGFuZDogZXhwYW5kLnRyaWdnZXJFeHBhbmQsXG4gICAgICAgIHJvd1NlbGVjdGlvbixcbiAgICAgICAgbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzOiBzZWxlY3Rpb24ubWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLFxuICAgICAgICBjaGVja2JveFByb3BzTWFwOiBzZWxlY3Rpb24uY2hlY2tib3hQcm9wc01hcCxcbiAgICAgICAgaXNBbGxTZWxlY3RlZDogc2VsZWN0aW9uLmlzQWxsU2VsZWN0ZWQsXG4gICAgICAgIGlzSW5kZXRlcm1pbmF0ZTogc2VsZWN0aW9uLmlzSW5kZXRlcm1pbmF0ZSxcbiAgICAgICAgdHJpZ2dlclNlbGVjdGlvbjogc2VsZWN0aW9uLnRyaWdnZXJTZWxlY3Rpb24sXG4gICAgICAgIHRyaWdnZXJTZWxlY3RBbGw6IHNlbGVjdGlvbi50cmlnZ2VyU2VsZWN0QWxsLFxuICAgICAgICBzb3J0ZXI6IHBpcGVsaW5lLnNvcnRlcixcbiAgICAgICAgc2V0U29ydGVyOiBwaXBlbGluZS5zZXRTb3J0ZXIsXG4gICAgICAgIGZpbHRlcnM6IHBpcGVsaW5lLmZpbHRlcnMsXG4gICAgICAgIHNldEZpbHRlcnM6IHBpcGVsaW5lLnNldEZpbHRlcnMsXG4gICAgICAgIGdldFJvd0tleSxcbiAgICB9KTtcbiAgICAvLyBEZXYtb25seSB3YXJuaW5nOiBtaXhpbmcgcm93LWV4cGFuc2lvbiB3aXRoIHRyZWUtZGF0YSAoY2hpbGRyZW5Db2x1bW5OYW1lKVxuICAgIC8vIHByb2R1Y2VzIHR3byBjaGV2cm9ucyBwZXIgcm93ICh0aGUgbGVmdG1vc3QgX19leHBhbmRfXyBjb2x1bW4gZnJvbSB0aGUgd3JhcHBlclxuICAgIC8vIHBsdXMgdGhlIGtlcm5lbCdzIHBlci1pbmRlbnQgbmVzdCBleHBhbmQpLiByYy10YWJsZSBoYXMgdGhlIHNhbWUgZ2FwO1xuICAgIC8vIHBpY2sgb25lIG1vZGUgYXQgYSB0aW1lLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgKChfYyA9IHByb2Nlc3MuZW52KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuTk9ERV9FTlYpICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKChleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUuZXhwYW5kZWRSb3dSZW5kZXIpICYmIGNoaWxkcmVuQ29sdW1uTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tjb21wb25lbnRzLXVpIFRhYmxlXSBDb21iaW5pbmcgYGV4cGFuZGFibGUuZXhwYW5kZWRSb3dSZW5kZXJgIHdpdGggYGNoaWxkcmVuQ29sdW1uTmFtZWAgaXMgbm90IHN1cHBvcnRlZCDigJQgdGhlIGxlZnRtb3N0IGV4cGFuZCBjb2x1bW4gd2lsbCByZW5kZXIgYWxvbmdzaWRlIHRoZSBuZXN0ZWQgdHJlZSBleHBhbmRlci4gVXNlIG9uZSBtb2RlIGF0IGEgdGltZS4nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB3cmFwcGVkRXhwYW5kZWRSb3dSZW5kZXIgPSB1c2VNZW1vaXplZEZuKChyZWNvcmQsIGluZGV4LCBpbmRlbnQsIGV4cGFuZGVkKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgLy8gSG9ub3IgYHJvd0V4cGFuZGFibGVgOiBldmVuIGlmIGEgbm9uLWV4cGFuZGFibGUgcm93J3Mga2V5IHNuZWFrcyBpbnRvXG4gICAgICAgIC8vIGBleHBhbmRlZFJvd0tleXNgLCByZWZ1c2UgdG8gcmVuZGVyIGl0cyBleHBhbnNpb24gY29udGVudC5cbiAgICAgICAgaWYgKChleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUucm93RXhwYW5kYWJsZSkgJiYgIWV4cGFuZGFibGUucm93RXhwYW5kYWJsZShyZWNvcmQpKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiAoX2pzeChFeHBhbmRlZFJvd0NvbnRhaW5lciwgeyBjaGlsZHJlbjogKF9hID0gZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLmV4cGFuZGVkUm93UmVuZGVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChleHBhbmRhYmxlLCByZWNvcmQsIGluZGV4LCBpbmRlbnQsIGV4cGFuZGVkKSB9KSk7XG4gICAgfSk7XG4gICAgLy8gV2lyZSBrZXJuZWwncyBvbkV4cGFuZCAodHJpZ2dlcmVkIGJ5IGV4cGFuZFJvd0J5Q2xpY2spIHRvIG91ciBzdGF0ZS5cbiAgICBjb25zdCBrZXJuZWxPbkV4cGFuZCA9IHVzZU1lbW9pemVkRm4oKGV4cGFuZGVkLCByZWNvcmQpID0+IHtcbiAgICAgICAgLy8gVGhlIGtlcm5lbCBwYXNzZXMgYSByZWNvcmQgZnJvbSBgY3VycmVudERhdGFTb3VyY2VgIChwb3N0IHNvcnQvZmlsdGVyL3BhZ2luYXRlKS5cbiAgICAgICAgLy8gTG9va2luZyBpdCB1cCBhZ2FpbnN0IHRoZSByYXcgYGRhdGFTb3VyY2VgIHJldHVybnMgLTEgd2hlbiB0aGUgY29uc3VtZXJcbiAgICAgICAgLy8gcmVjcmVhdGVzIHRoZSBhcnJheSBlYWNoIHJlbmRlciwgb3IgYSBwb3NpdGlvbmFsbHkgd3JvbmcgaW5kZXggYWZ0ZXIgc29ydC5cbiAgICAgICAgLy8gVXNlIGBjdXJyZW50RGF0YVNvdXJjZWAgc28gdGhlIGluZGV4IG1hdGNoZXMgd2hhdCB0aGUga2VybmVsIGFjdHVhbGx5IHNlZXMuXG4gICAgICAgIGNvbnN0IHJlY29yZEtleSA9IGdldFJvd0tleShyZWNvcmQsIHBpcGVsaW5lLmN1cnJlbnREYXRhU291cmNlLmluZGV4T2YocmVjb3JkKSk7XG4gICAgICAgIGV4cGFuZC5vbktlcm5lbEV4cGFuZChleHBhbmRlZCwgcmVjb3JkLCByZWNvcmRLZXkpO1xuICAgIH0pO1xuICAgIGNvbnN0IG1lcmdlZEV4cGFuZGFibGUgPSB1c2VNZW1vKCgpID0+IGV4cGFuZGFibGVcbiAgICAgICAgPyBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGV4cGFuZGFibGUpLCB7IGV4cGFuZGVkUm93S2V5czogZXhwYW5kLm1lcmdlZEV4cGFuZGVkUm93S2V5cywgZXhwYW5kZWRSb3dSZW5kZXI6IGV4cGFuZGFibGUuZXhwYW5kZWRSb3dSZW5kZXJcbiAgICAgICAgICAgICAgICA/IHdyYXBwZWRFeHBhbmRlZFJvd1JlbmRlclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLCBzaG93RXhwYW5kQ29sdW1uOiBmYWxzZSwgb25FeHBhbmQ6IGtlcm5lbE9uRXhwYW5kIH0pXG4gICAgICAgIDogdW5kZWZpbmVkLCBbZXhwYW5kYWJsZSwgZXhwYW5kLm1lcmdlZEV4cGFuZGVkUm93S2V5cywgd3JhcHBlZEV4cGFuZGVkUm93UmVuZGVyLCBrZXJuZWxPbkV4cGFuZF0pO1xuICAgIGNvbnN0IHJlc29sdmVkUGFnaW5hdGlvbiA9IHBpcGVsaW5lLnBhZ2luYXRpb24gPT09IGZhbHNlXG4gICAgICAgID8geyBjdXJyZW50OiAxLCBwYWdlU2l6ZTogMTAgfVxuICAgICAgICA6IHBpcGVsaW5lLnBhZ2luYXRpb247XG4gICAgY29uc3QgcGFnaW5hdGlvbk5vZGUgPSBwYWdpbmF0aW9uICE9PSBmYWxzZSA/IChfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBgJHtwcmVmaXhDbHN9LXBhZ2luYXRpb25gLCBjaGlsZHJlbjogX2pzeChQYWdpbmF0aW9uLCB7IHRvdGFsOiBwaXBlbGluZS50b3RhbCwgcGFnZVNpemU6IHJlc29sdmVkUGFnaW5hdGlvbi5wYWdlU2l6ZSwgY3VycmVudDogcmVzb2x2ZWRQYWdpbmF0aW9uLmN1cnJlbnQsIG9uQ2hhbmdlOiAobmV4dFBhZ2UsIG5leHRQYWdlU2l6ZSkgPT4gcGlwZWxpbmUuc2V0UGFnaW5hdGlvbigoY3VycmVudFBhZ2luYXRpb24pID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnRQYWdpbmF0aW9uKSwgeyBjdXJyZW50OiBuZXh0UGFnZSwgcGFnZVNpemU6IG5leHRQYWdlU2l6ZSB9KSkpIH0pIH0pKSA6IG51bGw7XG4gICAgY29uc3Qgd3JhcHBlckNsYXNzTmFtZSA9IGpvaW5DbHMoYCR7cHJlZml4Q2xzfS13cmFwcGVyYCwgaXNMb2FkaW5nICYmIGAke3ByZWZpeENsc30td3JhcHBlci0tbG9hZGluZ2AsIGJvcmRlcmVkICYmIGAke3ByZWZpeENsc30td3JhcHBlci0tYm9yZGVyZWRgKTtcbiAgICBjb25zdCB0YWJsZUNsYXNzTmFtZSA9IGpvaW5DbHMoY2xzKCksIGNscyh2YXJpYW50KSwgcm93SG92ZXJhYmxlID09PSBmYWxzZSAmJiBjbHMoJ25vLWhvdmVyJyksIGNsYXNzTmFtZSk7XG4gICAgY29uc3QgZW1wdHlUZXh0ID0gaXNMb2FkaW5nICYmICFkYXRhU291cmNlLmxlbmd0aCA/IF9qc3goXCJzcGFuXCIsIHt9KSA6IF9qc3goVGFibGVFbXB0eVN0YXRlLCB7IGVtcHR5OiBlbXB0eSB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcmVmaXhDbHMsXG4gICAgICAgIHdyYXBwZXJDbGFzc05hbWUsXG4gICAgICAgIHRhYmxlQ2xhc3NOYW1lLFxuICAgICAgICBsb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgIGxvYWRpbmdJbmRpY2F0b3IsXG4gICAgICAgIHJlbmRlcmVkQ29sdW1ucyxcbiAgICAgICAgY3VycmVudERhdGFTb3VyY2U6IHBpcGVsaW5lLmN1cnJlbnREYXRhU291cmNlLFxuICAgICAgICBtZXJnZWRFeHBhbmRhYmxlLFxuICAgICAgICBlbXB0eVRleHQsXG4gICAgICAgIHdyYXBwZXJIdG1sUHJvcHM6IHJlc3QsXG4gICAgICAgIGZvcndhcmRlZEtlcm5lbFByb3BzOiB7XG4gICAgICAgICAgICByb3dLZXk6IHJvd0tleSxcbiAgICAgICAgICAgIGNoaWxkcmVuQ29sdW1uTmFtZSxcbiAgICAgICAgICAgIGluZGVudFNpemUsXG4gICAgICAgICAgICBvblJvdyxcbiAgICAgICAgICAgIHJvd0NsYXNzTmFtZSxcbiAgICAgICAgICAgIHN1bW1hcnksXG4gICAgICAgICAgICBmb290ZXIsXG4gICAgICAgICAgICBzaG93SGVhZGVyLFxuICAgICAgICAgICAgdGFibGVMYXlvdXQsXG4gICAgICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgcm93SG92ZXJhYmxlLFxuICAgICAgICAgICAgc3RpY2t5LFxuICAgICAgICAgICAgb25TY3JvbGwsXG4gICAgICAgIH0sXG4gICAgICAgIHBhZ2luYXRpb25Ob2RlLFxuICAgIH07XG59OyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|
|
@@ -114,6 +114,10 @@ function RawList(props, ref) {
|
|
|
114
114
|
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
115
115
|
scrollMoving = _useState6[0],
|
|
116
116
|
setScrollMoving = _useState6[1];
|
|
117
|
+
// Mirrors `offsetTop` synchronously so `syncScrollTop` can read the latest
|
|
118
|
+
// value immediately (a state updater can't safely have side effects — see
|
|
119
|
+
// the `onScroll` call below).
|
|
120
|
+
var offsetTopRef = (0, _react.useRef)(0);
|
|
117
121
|
var onScrollbarStartMove = function onScrollbarStartMove() {
|
|
118
122
|
setScrollMoving(true);
|
|
119
123
|
};
|
|
@@ -124,18 +128,28 @@ function RawList(props, ref) {
|
|
|
124
128
|
getKey: getKey
|
|
125
129
|
};
|
|
126
130
|
// ================================ Scroll ================================
|
|
131
|
+
// Wheel scroll, scrollbar drag, and touch move (see `onWheelDelta` /
|
|
132
|
+
// `useScrollDrag` / `useMobileTouchMove` below) all funnel through here —
|
|
133
|
+
// it's the single place a virtual-mode scroll position change happens.
|
|
134
|
+
//
|
|
135
|
+
// In virtual mode the holder is `overflow-y: hidden` (scrolling is faked via
|
|
136
|
+
// this offset, not native browser scroll), so setting `scrollTop`
|
|
137
|
+
// programmatically does not reliably dispatch a native `scroll` DOM event.
|
|
138
|
+
// `onFallbackScroll` below (bound to the holder's native `onScroll`) only
|
|
139
|
+
// fires in non-virtual mode. Call `onScroll` directly here — with the same
|
|
140
|
+
// event shape a native scroll would carry — so it fires for real user
|
|
141
|
+
// scrolling in virtual mode too.
|
|
127
142
|
function syncScrollTop(newTop) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
value = newTop;
|
|
134
|
-
}
|
|
135
|
-
var alignedTop = keepInRange(value);
|
|
143
|
+
var value = typeof newTop === 'function' ? newTop(offsetTopRef.current) : newTop;
|
|
144
|
+
var alignedTop = keepInRange(value);
|
|
145
|
+
offsetTopRef.current = alignedTop;
|
|
146
|
+
setOffsetTop(alignedTop);
|
|
147
|
+
if (componentRef.current) {
|
|
136
148
|
componentRef.current.scrollTop = alignedTop;
|
|
137
|
-
|
|
138
|
-
|
|
149
|
+
onScroll === null || onScroll === void 0 ? void 0 : onScroll({
|
|
150
|
+
currentTarget: componentRef.current
|
|
151
|
+
});
|
|
152
|
+
}
|
|
139
153
|
}
|
|
140
154
|
// ================================ Legacy ================================
|
|
141
155
|
// Put ref here since the range is generate by follow
|
|
@@ -309,10 +323,10 @@ function RawList(props, ref) {
|
|
|
309
323
|
function onFallbackScroll(e) {
|
|
310
324
|
var newScrollTop = e.currentTarget.scrollTop;
|
|
311
325
|
if (newScrollTop !== offsetTop) {
|
|
326
|
+
// `syncScrollTop` calls `onScroll` itself — don't also fire it here, or
|
|
327
|
+
// fallback (non-virtual) mode would notify the consumer twice per event.
|
|
312
328
|
syncScrollTop(newScrollTop);
|
|
313
329
|
}
|
|
314
|
-
// Trigger origin onScroll
|
|
315
|
-
onScroll === null || onScroll === void 0 ? void 0 : onScroll(e);
|
|
316
330
|
triggerScroll();
|
|
317
331
|
}
|
|
318
332
|
var keepInHorizontalRange = function keepInHorizontalRange(nextOffsetLeft) {
|
|
@@ -538,4 +552,4 @@ var VirtualListBase = /*#__PURE__*/React.forwardRef(RawList);
|
|
|
538
552
|
VirtualListBase.displayName = _constants.VIRTUAL_LIST_COMPONENT_NAME;
|
|
539
553
|
var VirtualList = /*#__PURE__*/React.memo(VirtualListBase);
|
|
540
554
|
var _default = exports["default"] = VirtualList;
|
|
541
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVmlydHVhbExpc3QvVmlydHVhbExpc3QuanMiLCJjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL1ZpcnR1YWxMaXN0L1ZpcnR1YWxMaXN0LnRzeCJdLCJuYW1lcyI6WyJfanN4UnVudGltZSIsInJlcXVpcmUiLCJfY2xzeDIiLCJfUmVzaXplT2JzZXJ2ZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3VzZUxheW91dEVmZmVjdCIsIl91c2VFdmVudENhbGxiYWNrIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJSZWFjdCIsIl9yZWFjdERvbSIsIl9GaWxsZXIiLCJfdXNlQ2hpbGRyZW4iLCJfdXNlRGlmZkl0ZW0zIiwiX3VzZUZyYW1lV2hlZWwzIiwiX3VzZUdldFNpemUiLCJfdXNlSGVpZ2h0czMiLCJfdXNlTW9iaWxlVG91Y2hNb3ZlIiwiX3VzZU9yaWdpblNjcm9sbCIsIl91c2VTY3JvbGxEcmFnIiwiX3VzZVNjcm9sbFRvIiwiX1Njcm9sbEJhciIsIl9zY3JvbGxiYXJVdGlsIiwiX2NvbnN0YW50cyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfX3Jlc3QiLCJzIiwicCIsInByb3RvdHlwZSIsImluZGV4T2YiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIkVNUFRZX0RBVEEiLCJTY3JvbGxTdHlsZSIsIm92ZXJmbG93WSIsIm92ZXJmbG93QW5jaG9yIiwiUmF3TGlzdCIsInByb3BzIiwicmVmIiwiX3Byb3BzJHByZWZpeENscyIsInByZWZpeENscyIsIlZJUlRVQUxfTElTVF9QUkVGSVhDTFMiLCJjbGFzc05hbWUiLCJoZWlnaHQiLCJpdGVtSGVpZ2h0IiwiX3Byb3BzJGZ1bGxIZWlnaHQiLCJmdWxsSGVpZ2h0Iiwic3R5bGUiLCJkYXRhIiwiY2hpbGRyZW4iLCJpdGVtS2V5IiwidmlydHVhbCIsImRpcmVjdGlvbiIsInNjcm9sbFdpZHRoIiwiX3Byb3BzJGNvbXBvbmVudCIsImNvbXBvbmVudCIsIkNvbXBvbmVudCIsIm9uU2Nyb2xsIiwib25WaXJ0dWFsU2Nyb2xsIiwib25WaXNpYmxlQ2hhbmdlIiwiaW5uZXJQcm9wcyIsImV4dHJhUmVuZGVyIiwic3R5bGVzIiwiX3Byb3BzJHNob3dTY3JvbGxCYXIiLCJzaG93U2Nyb2xsQmFyIiwicmVzdFByb3BzIiwiZ2V0S2V5IiwidXNlQ2FsbGJhY2siLCJpdGVtIiwiX3VzZUhlaWdodHMiLCJ1c2VIZWlnaHRzIiwidW5kZWZpbmVkIiwiX3VzZUhlaWdodHMyIiwiX3NsaWNlZFRvQXJyYXkyIiwic2V0SW5zdGFuY2VSZWYiLCJjb2xsZWN0SGVpZ2h0IiwiaGVpZ2h0cyIsImhlaWdodFVwZGF0ZWRNYXJrIiwidXNlVmlydHVhbCIsImNvbnRhaW5lckhlaWdodCIsInVzZU1lbW8iLCJ2YWx1ZXMiLCJtYXBzIiwicmVkdWNlIiwidG90YWwiLCJjdXJyIiwiaWQiLCJpblZpcnR1YWwiLCJNYXRoIiwibWF4IiwiaXNSVEwiLCJtZXJnZWRDbGFzc05hbWUiLCJjbHN4IiwiX2RlZmluZVByb3BlcnR5MiIsImNvbmNhdCIsIm1lcmdlZERhdGEiLCJjb21wb25lbnRSZWYiLCJ1c2VSZWYiLCJmaWxsZXJJbm5lclJlZiIsImNvbnRhaW5lclJlZiIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIm9mZnNldFRvcCIsInNldE9mZnNldFRvcCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwib2Zmc2V0TGVmdCIsInNldE9mZnNldExlZnQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNjcm9sbE1vdmluZyIsInNldFNjcm9sbE1vdmluZyIsIm9uU2Nyb2xsYmFyU3RhcnRNb3ZlIiwib25TY3JvbGxiYXJTdG9wTW92ZSIsInNoYXJlZENvbmZpZyIsInN5bmNTY3JvbGxUb3AiLCJuZXdUb3AiLCJvcmlnaW4iLCJ2YWx1ZSIsImFsaWduZWRUb3AiLCJrZWVwSW5SYW5nZSIsImN1cnJlbnQiLCJzY3JvbGxUb3AiLCJyYW5nZVJlZiIsInN0YXJ0IiwiZW5kIiwiZGlmZkl0ZW1SZWYiLCJfdXNlRGlmZkl0ZW0iLCJ1c2VEaWZmSXRlbSIsIl91c2VEaWZmSXRlbTIiLCJkaWZmSXRlbSIsIl9SZWFjdCR1c2VNZW1vIiwiX2EiLCJzY3JvbGxIZWlnaHQiLCJvZmZzZXQiLCJvZmZzZXRIZWlnaHQiLCJpdGVtVG9wIiwic3RhcnRJbmRleCIsInN0YXJ0T2Zmc2V0IiwiZW5kSW5kZXgiLCJkYXRhTGVuIiwia2V5IiwiY2FjaGVIZWlnaHQiLCJjdXJyZW50SXRlbUJvdHRvbSIsImNlaWwiLCJtaW4iLCJmaWxsZXJPZmZzZXQiLCJ1c2VMYXlvdXRFZmZlY3QiLCJjaGFuZ2VkUmVjb3JkIiwiZ2V0UmVjb3JkIiwic2l6ZSIsInJlY29yZEtleSIsIkFycmF5IiwiZnJvbSIsImtleXMiLCJwcmV2Q2FjaGVIZWlnaHQiLCJzdGFydEl0ZW0iLCJzdGFydEluZGV4S2V5IiwicmVhbFN0YXJ0SGVpZ2h0IiwiZGlmZkhlaWdodCIsIm9yaSIsInJlc2V0UmVjb3JkIiwiX1JlYWN0JHVzZVN0YXRlIiwid2lkdGgiLCJfUmVhY3QkdXNlU3RhdGUyIiwic2V0U2l6ZSIsIm9uSG9sZGVyUmVzaXplIiwic2l6ZUluZm8iLCJvZmZzZXRXaWR0aCIsInZlcnRpY2FsU2Nyb2xsQmFyUmVmIiwiaG9yaXpvbnRhbFNjcm9sbEJhclJlZiIsImhvcml6b250YWxTY3JvbGxCYXJTcGluU2l6ZSIsImdldFNwaW5TaXplIiwidmVydGljYWxTY3JvbGxCYXJTcGluU2l6ZSIsIm1heFNjcm9sbEhlaWdodCIsIm1heFNjcm9sbEhlaWdodFJlZiIsIm5ld1Njcm9sbFRvcCIsIk51bWJlciIsImlzTmFOIiwiaXNTY3JvbGxBdFRvcCIsImlzU2Nyb2xsQXRCb3R0b20iLCJpc1Njcm9sbEF0TGVmdCIsImlzU2Nyb2xsQXRSaWdodCIsIm9yaWdpblNjcm9sbCIsInVzZU9yaWdpblNjcm9sbCIsImdldFZpcnR1YWxTY3JvbGxJbmZvIiwieCIsInkiLCJsYXN0VmlydHVhbFNjcm9sbEluZm9SZWYiLCJ0cmlnZ2VyU2Nyb2xsIiwidXNlRXZlbnRDYWxsYmFjayIsInBhcmFtcyIsIm5leHRJbmZvIiwiYXNzaWduIiwib25TY3JvbGxCYXIiLCJuZXdTY3JvbGxPZmZzZXQiLCJob3Jpem9udGFsIiwibmV3T2Zmc2V0IiwiZmx1c2hTeW5jIiwib25GYWxsYmFja1Njcm9sbCIsImN1cnJlbnRUYXJnZXQiLCJrZWVwSW5Ib3Jpem9udGFsUmFuZ2UiLCJuZXh0T2Zmc2V0TGVmdCIsInRtcE9mZnNldExlZnQiLCJvbldoZWVsRGVsdGEiLCJvZmZzZXRYWSIsImZyb21Ib3Jpem9udGFsIiwibGVmdCIsInRvcCIsIl91c2VGcmFtZVdoZWVsIiwidXNlRnJhbWVXaGVlbCIsIl91c2VGcmFtZVdoZWVsMiIsIm9uUmF3V2hlZWwiLCJvbkZpcmVGb3hTY3JvbGwiLCJ1c2VNb2JpbGVUb3VjaE1vdmUiLCJpc0hvcml6b250YWwiLCJkZWx0YSIsInNtb290aE9mZnNldCIsImV2ZW50IiwiX3ZpcnR1YWxIYW5kbGVkIiwicHJldmVudERlZmF1bHQiLCJkZWx0YVgiLCJkZWx0YVkiLCJ1c2VTY3JvbGxEcmFnIiwib25Nb3pNb3VzZVBpeGVsU2Nyb2xsIiwic2Nyb2xsaW5nVXBBdFRvcCIsImRldGFpbCIsInNjcm9sbGluZ0Rvd25BdEJvdHRvbSIsImNvbXBvbmVudEVsZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJwYXNzaXZlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm5ld09mZnNldExlZnQiLCJkZWxheUhpZGVTY3JvbGxCYXIiLCJfYiIsImRlbGF5SGlkZGVuIiwic2Nyb2xsVG8iLCJ1c2VTY3JvbGxUbyIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJuYXRpdmVFbGVtZW50IiwiZ2V0U2Nyb2xsSW5mbyIsImNvbmZpZyIsImlzUG9zU2Nyb2xsIiwiYXJnIiwiX3R5cGVvZjIiLCJyZW5kZXJMaXN0Iiwic2xpY2UiLCJnZXRTaXplIiwidXNlR2V0U2l6ZSIsImV4dHJhQ29udGVudCIsIm9mZnNldFgiLCJvZmZzZXRZIiwicnRsIiwibGlzdENoaWxkcmVuIiwidXNlQ2hpbGRyZW4iLCJjb21wb25lbnRTdHlsZSIsIm92ZXJmbG93WCIsInBvaW50ZXJFdmVudHMiLCJjb250YWluZXJQcm9wcyIsImRpciIsIl9qc3hzIiwicG9zaXRpb24iLCJfanN4IiwiUmVzaXplT2JzZXJ2ZXIiLCJvblJlc2l6ZSIsIm9uTW91c2VFbnRlciIsIkZpbGxlciIsIm9uSW5uZXJSZXNpemUiLCJleHRyYSIsIlNjcm9sbEJhciIsInNjcm9sbE9mZnNldCIsInNjcm9sbFJhbmdlIiwib25TdGFydE1vdmUiLCJvblN0b3BNb3ZlIiwic3BpblNpemUiLCJjb250YWluZXJTaXplIiwidmVydGljYWxTY3JvbGxCYXIiLCJ0aHVtYlN0eWxlIiwidmVydGljYWxTY3JvbGxCYXJUaHVtYiIsImhvcml6b250YWxTY3JvbGxCYXIiLCJob3Jpem9udGFsU2Nyb2xsQmFyVGh1bWIiLCJWaXJ0dWFsTGlzdEJhc2UiLCJmb3J3YXJkUmVmIiwiZGlzcGxheU5hbWUiLCJWSVJUVUFMX0xJU1RfQ09NUE9ORU5UX05BTUUiLCJWaXJ0dWFsTGlzdCIsIm1lbW8iLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVdBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQ1hBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGVBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUVBLElBQUFJLGdCQUFBLEdBQUFELHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSyxpQkFBQSxHQUFBRixzQkFB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UCxPQUFPLENBQUM7QUFFMUVzUCxlQUFlLENBQUNFLFdBQVcsR0FBR0Msc0NBQTJCO0FBRXpELElBQU1DLFdBQVcsZ0JBQUd6UyxLQUFLLENBQUMwUyxJQUFJLENBQUNMLGVBQWUsQ0FFdkI7QUFBQyxJQUFBTSxRQUFBLEdBQUFDLE9BQUEsY0FFVEgsV0FBVyIsImZpbGUiOiJjb21wb25lbnRzL1ZpcnR1YWxMaXN0L1ZpcnR1YWxMaXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4JztcbmltcG9ydCBSZXNpemVPYnNlcnZlciBmcm9tICcuLi9SZXNpemVPYnNlcnZlcic7XG5pbXBvcnQgdXNlTGF5b3V0RWZmZWN0IGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTGF5b3V0RWZmZWN0JztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZmx1c2hTeW5jIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBGaWxsZXIgZnJvbSAnLi9GaWxsZXInO1xuaW1wb3J0IHVzZUNoaWxkcmVuIGZyb20gJy4vaG9va3MvdXNlQ2hpbGRyZW4nO1xuaW1wb3J0IHVzZURpZmZJdGVtIGZyb20gJy4vaG9va3MvdXNlRGlmZkl0ZW0nO1xuaW1wb3J0IHVzZUZyYW1lV2hlZWwgZnJvbSAnLi9ob29rcy91c2VGcmFtZVdoZWVsJztcbmltcG9ydCB7IHVzZUdldFNpemUgfSBmcm9tICcuL2hvb2tzL3VzZUdldFNpemUnO1xuaW1wb3J0IHVzZUhlaWdodHMgZnJvbSAnLi9ob29rcy91c2VIZWlnaHRzJztcbmltcG9ydCB1c2VNb2JpbGVUb3VjaE1vdmUgZnJvbSAnLi9ob29rcy91c2VNb2JpbGVUb3VjaE1vdmUnO1xuaW1wb3J0IHVzZU9yaWdpblNjcm9sbCBmcm9tICcuL2hvb2tzL3VzZU9yaWdpblNjcm9sbCc7XG5pbXBvcnQgdXNlU2Nyb2xsRHJhZyBmcm9tICcuL2hvb2tzL3VzZVNjcm9sbERyYWcnO1xuaW1wb3J0IHVzZVNjcm9sbFRvIGZyb20gJy4vaG9va3MvdXNlU2Nyb2xsVG8nO1xuaW1wb3J0IFNjcm9sbEJhciBmcm9tICcuL1Njcm9sbEJhcic7XG5pbXBvcnQgeyBnZXRTcGluU2l6ZSB9IGZyb20gJy4vdXRpbHMvc2Nyb2xsYmFyVXRpbCc7XG5pbXBvcnQgeyBWSVJUVUFMX0xJU1RfQ09NUE9ORU5UX05BTUUsIFZJUlRVQUxfTElTVF9QUkVGSVhDTFMsIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0ICcuL3N0eWxlJztcbmNvbnN0IEVNUFRZX0RBVEEgPSBbXTtcbmNvbnN0IFNjcm9sbFN0eWxlID0ge1xuICAgIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgIG92ZXJmbG93QW5jaG9yOiAnbm9uZScsXG59O1xuZXhwb3J0IGZ1bmN0aW9uIFJhd0xpc3QocHJvcHMsIHJlZikge1xuICAgIGNvbnN0IHsgcHJlZml4Q2xzID0gVklSVFVBTF9MSVNUX1BSRUZJWENMUywgY2xhc3NOYW1lLCBoZWlnaHQsIGl0ZW1IZWlnaHQsIGZ1bGxIZWlnaHQgPSB0cnVlLCBzdHlsZSwgZGF0YSwgY2hpbGRyZW4sIGl0ZW1LZXksIHZpcnR1YWwsIGRpcmVjdGlvbiwgc2Nyb2xsV2lkdGgsIGNvbXBvbmVudDogQ29tcG9uZW50ID0gJ2RpdicsIG9uU2Nyb2xsLCBvblZpcnR1YWxTY3JvbGwsIG9uVmlzaWJsZUNoYW5nZSwgaW5uZXJQcm9wcywgZXh0cmFSZW5kZXIsIHN0eWxlcywgc2hvd1Njcm9sbEJhciA9ICdvcHRpb25hbCcgfSA9IHByb3BzLCByZXN0UHJvcHMgPSBfX3Jlc3QocHJvcHMsIFtcInByZWZpeENsc1wiLCBcImNsYXNzTmFtZVwiLCBcImhlaWdodFwiLCBcIml0ZW1IZWlnaHRcIiwgXCJmdWxsSGVpZ2h0XCIsIFwic3R5bGVcIiwgXCJkYXRhXCIsIFwiY2hpbGRyZW5cIiwgXCJpdGVtS2V5XCIsIFwidmlydHVhbFwiLCBcImRpcmVjdGlvblwiLCBcInNjcm9sbFdpZHRoXCIsIFwiY29tcG9uZW50XCIsIFwib25TY3JvbGxcIiwgXCJvblZpcnR1YWxTY3JvbGxcIiwgXCJvblZpc2libGVDaGFuZ2VcIiwgXCJpbm5lclByb3BzXCIsIFwiZXh0cmFSZW5kZXJcIiwgXCJzdHlsZXNcIiwgXCJzaG93U2Nyb2xsQmFyXCJdKTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEl0ZW0gS2V5ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBnZXRLZXkgPSBSZWFjdC51c2VDYWxsYmFjaygoaXRlbSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1LZXkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtS2V5KGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZW1baXRlbUtleV07XG4gICAgfSwgW2l0ZW1LZXldKTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBIZWlnaHQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBbc2V0SW5zdGFuY2VSZWYsIGNvbGxlY3RIZWlnaHQsIGhlaWdodHMsIGhlaWdodFVwZGF0ZWRNYXJrXSA9IHVzZUhlaWdodHMoZ2V0S2V5LCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IE1JU0MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgdXNlVmlydHVhbCA9ICEhKHZpcnR1YWwgIT09IGZhbHNlICYmIGhlaWdodCAmJiBpdGVtSGVpZ2h0KTtcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSBSZWFjdC51c2VNZW1vKCgpID0+IE9iamVjdC52YWx1ZXMoaGVpZ2h0cy5tYXBzKS5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiB0b3RhbCArIGN1cnIsIDApLCBbaGVpZ2h0cy5pZF0pO1xuICAgIGNvbnN0IGluVmlydHVhbCA9IHVzZVZpcnR1YWwgJiZcbiAgICAgICAgZGF0YSAmJlxuICAgICAgICAoTWF0aC5tYXgoaXRlbUhlaWdodCAqIGRhdGEubGVuZ3RoLCBjb250YWluZXJIZWlnaHQpID4gaGVpZ2h0IHx8ICEhc2Nyb2xsV2lkdGgpO1xuICAgIGNvbnN0IGlzUlRMID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICBjb25zdCBtZXJnZWRDbGFzc05hbWUgPSBjbHN4KHByZWZpeENscywgeyBbYCR7cHJlZml4Q2xzfS1ydGxgXTogaXNSVEwgfSwgY2xhc3NOYW1lKTtcbiAgICBjb25zdCBtZXJnZWREYXRhID0gZGF0YSB8fCBFTVBUWV9EQVRBO1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBmaWxsZXJJbm5lclJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJdGVtIEtleSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgW29mZnNldFRvcCwgc2V0T2Zmc2V0VG9wXSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtvZmZzZXRMZWZ0LCBzZXRPZmZzZXRMZWZ0XSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtzY3JvbGxNb3ZpbmcsIHNldFNjcm9sbE1vdmluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3Qgb25TY3JvbGxiYXJTdGFydE1vdmUgPSAoKSA9PiB7XG4gICAgICAgIHNldFNjcm9sbE1vdmluZyh0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU2Nyb2xsYmFyU3RvcE1vdmUgPSAoKSA9PiB7XG4gICAgICAgIHNldFNjcm9sbE1vdmluZyhmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCBzaGFyZWRDb25maWcgPSB7XG4gICAgICAgIGdldEtleSxcbiAgICB9O1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFNjcm9sbCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGZ1bmN0aW9uIHN5bmNTY3JvbGxUb3AobmV3VG9wKSB7XG4gICAgICAgIHNldE9mZnNldFRvcCgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG5ld1RvcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3VG9wKG9yaWdpbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ld1RvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFsaWduZWRUb3AgPSBrZWVwSW5SYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICBjb21wb25lbnRSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBhbGlnbmVkVG9wO1xuICAgICAgICAgICAgcmV0dXJuIGFsaWduZWRUb3A7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBMZWdhY3kgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBQdXQgcmVmIGhlcmUgc2luY2UgdGhlIHJhbmdlIGlzIGdlbmVyYXRlIGJ5IGZvbGxvd1xuICAgIGNvbnN0IHJhbmdlUmVmID0gdXNlUmVmKHsgc3RhcnQ6IDAsIGVuZDogbWVyZ2VkRGF0YS5sZW5ndGggfSk7XG4gICAgY29uc3QgZGlmZkl0ZW1SZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgW2RpZmZJdGVtXSA9IHVzZURpZmZJdGVtKG1lcmdlZERhdGEsIGdldEtleSk7XG4gICAgZGlmZkl0ZW1SZWYuY3VycmVudCA9IGRpZmZJdGVtO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IFZpc2libGUgQ2FsY3VsYXRpb24gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IHsgc2Nyb2xsSGVpZ2h0LCBzdGFydCwgZW5kLCBvZmZzZXQ6IGZpbGxlck9mZnNldCwgfSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdXNlVmlydHVhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxIZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzdGFydDogMCxcbiAgICAgICAgICAgICAgICBlbmQ6IG1lcmdlZERhdGEubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWx3YXlzIHVzZSB2aXJ0dWFsIHNjcm9sbCBiYXIgaW4gYXZvaWQgc2hha2luZ1xuICAgICAgICBpZiAoIWluVmlydHVhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxIZWlnaHQ6ICgoX2EgPSBmaWxsZXJJbm5lclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub2Zmc2V0SGVpZ2h0KSB8fCAwLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgICAgICAgIGVuZDogbWVyZ2VkRGF0YS5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgIG9mZnNldDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXRlbVRvcCA9IDA7XG4gICAgICAgIGxldCBzdGFydEluZGV4O1xuICAgICAgICBsZXQgc3RhcnRPZmZzZXQ7XG4gICAgICAgIGxldCBlbmRJbmRleDtcbiAgICAgICAgY29uc3QgZGF0YUxlbiA9IG1lcmdlZERhdGEubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFMZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IG1lcmdlZERhdGFbaV07XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBjYWNoZUhlaWdodCA9IGhlaWdodHMuZ2V0KGtleSk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SXRlbUJvdHRvbSA9IGl0ZW1Ub3AgKyAoY2FjaGVIZWlnaHQgPT09IHVuZGVmaW5lZCA/IGl0ZW1IZWlnaHQgOiBjYWNoZUhlaWdodCk7XG4gICAgICAgICAgICAvLyBDaGVjayBpdGVtIHRvcCBpbiB0aGUgcmFuZ2VcbiAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUJvdHRvbSA+PSBvZmZzZXRUb3AgJiYgc3RhcnRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBpdGVtVG9wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hlY2sgaXRlbSBib3R0b20gaW4gdGhlIHJhbmdlLiBXZSB3aWxsIHJlbmRlciBhZGRpdGlvbmFsIG9uZSBpdGVtIGZvciBtb3Rpb24gdXNhZ2VcbiAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUJvdHRvbSA+IG9mZnNldFRvcCArIGhlaWdodCAmJiBlbmRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZW5kSW5kZXggPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbVRvcCA9IGN1cnJlbnRJdGVtQm90dG9tO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdoZW4gc2Nyb2xsVG9wIGF0IHRoZSBlbmQgYnV0IGRhdGEgY3V0IHRvIHNtYWxsIGNvdW50IHdpbGwgcmVhY2ggdGhpc1xuICAgICAgICBpZiAoc3RhcnRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gMDtcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIGVuZEluZGV4ID0gTWF0aC5jZWlsKGhlaWdodCAvIGl0ZW1IZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IG1lcmdlZERhdGEubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBHaXZlIGNhY2hlIHRvIGltcHJvdmUgc2Nyb2xsIGV4cGVyaWVuY2VcbiAgICAgICAgZW5kSW5kZXggPSBNYXRoLm1pbihlbmRJbmRleCArIDEsIG1lcmdlZERhdGEubGVuZ3RoIC0gMSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY3JvbGxIZWlnaHQ6IGl0ZW1Ub3AsXG4gICAgICAgICAgICBzdGFydDogc3RhcnRJbmRleCxcbiAgICAgICAgICAgIGVuZDogZW5kSW5kZXgsXG4gICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0T2Zmc2V0LFxuICAgICAgICB9O1xuICAgIH0sIFtpblZpcnR1YWwsIHVzZVZpcnR1YWwsIG9mZnNldFRvcCwgbWVyZ2VkRGF0YSwgaGVpZ2h0VXBkYXRlZE1hcmssIGhlaWdodF0pO1xuICAgIHJhbmdlUmVmLmN1cnJlbnQuc3RhcnQgPSBzdGFydDtcbiAgICByYW5nZVJlZi5jdXJyZW50LmVuZCA9IGVuZDtcbiAgICAvLyBXaGVuIHNjcm9sbCB1cCwgZmlyc3QgdmlzaWJsZSBpdGVtIGdldCByZWFsIGhlaWdodCBtYXkgbm90IHNhbWUgYXMgYGl0ZW1IZWlnaHRgLFxuICAgIC8vIFdoaWNoIHdpbGwgbWFrZSBzY3JvbGwganVtcC5cbiAgICAvLyBMZXQncyBzeW5jIHNjcm9sbCB0b3AgdG8gYXZvaWQganVtcFxuICAgIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRSZWNvcmQgPSBoZWlnaHRzLmdldFJlY29yZCgpO1xuICAgICAgICBpZiAoY2hhbmdlZFJlY29yZC5zaXplID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmRLZXkgPSBBcnJheS5mcm9tKGNoYW5nZWRSZWNvcmQua2V5cygpKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZDYWNoZUhlaWdodCA9IGNoYW5nZWRSZWNvcmQuZ2V0KHJlY29yZEtleSk7XG4gICAgICAgICAgICAvLyBRdWljayBzd2l0Y2ggZGF0YSBtYXkgY2F1c2UgYHN0YXJ0YCBub3QgaW4gYG1lcmdlZERhdGFgIGFueW1vcmVcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SXRlbSA9IG1lcmdlZERhdGFbc3RhcnRdO1xuICAgICAgICAgICAgaWYgKHN0YXJ0SXRlbSAmJiBwcmV2Q2FjaGVIZWlnaHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXhLZXkgPSBnZXRLZXkoc3RhcnRJdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRJbmRleEtleSA9PT0gcmVjb3JkS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWxTdGFydEhlaWdodCA9IGhlaWdodHMuZ2V0KHJlY29yZEtleSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmZIZWlnaHQgPSByZWFsU3RhcnRIZWlnaHQgLSBpdGVtSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBzeW5jU2Nyb2xsVG9wKChvcmkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmkgKyBkaWZmSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaGVpZ2h0cy5yZXNldFJlY29yZCgpO1xuICAgIH0sIFtzY3JvbGxIZWlnaHRdKTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU2l6ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBbc2l6ZSwgc2V0U2l6ZV0gPSBSZWFjdC51c2VTdGF0ZSh7IHdpZHRoOiAwLCBoZWlnaHQ6IGhlaWdodCAhPT0gbnVsbCAmJiBoZWlnaHQgIT09IHZvaWQgMCA/IGhlaWdodCA6IDAgfSk7XG4gICAgY29uc3Qgb25Ib2xkZXJSZXNpemUgPSAoc2l6ZUluZm8pID0+IHtcbiAgICAgICAgc2V0U2l6ZSh7XG4gICAgICAgICAgICB3aWR0aDogc2l6ZUluZm8ub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHNpemVJbmZvLm9mZnNldEhlaWdodCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBIYWNrIG9uIHNjcm9sbGJhciB0byBlbmFibGUgZmxhc2ggY2FsbFxuICAgIGNvbnN0IHZlcnRpY2FsU2Nyb2xsQmFyUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGhvcml6b250YWxTY3JvbGxCYXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbEJhclNwaW5TaXplID0gUmVhY3QudXNlTWVtbygoKSA9PiBnZXRTcGluU2l6ZShzaXplLndpZHRoLCBzY3JvbGxXaWR0aCksIFtzaXplLndpZHRoLCBzY3JvbGxXaWR0aF0pO1xuICAgIGNvbnN0IHZlcnRpY2FsU2Nyb2xsQmFyU3BpblNpemUgPSBSZWFjdC51c2VNZW1vKCgpID0+IGdldFNwaW5TaXplKHNpemUuaGVpZ2h0LCBzY3JvbGxIZWlnaHQpLCBbc2l6ZS5oZWlnaHQsIHNjcm9sbEhlaWdodF0pO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSW4gUmFuZ2UgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IG1heFNjcm9sbEhlaWdodCA9IHNjcm9sbEhlaWdodCAtIGhlaWdodDtcbiAgICBjb25zdCBtYXhTY3JvbGxIZWlnaHRSZWYgPSB1c2VSZWYobWF4U2Nyb2xsSGVpZ2h0KTtcbiAgICBtYXhTY3JvbGxIZWlnaHRSZWYuY3VycmVudCA9IG1heFNjcm9sbEhlaWdodDtcbiAgICBmdW5jdGlvbiBrZWVwSW5SYW5nZShuZXdTY3JvbGxUb3ApIHtcbiAgICAgICAgbGV0IG5ld1RvcCA9IG5ld1Njcm9sbFRvcDtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obWF4U2Nyb2xsSGVpZ2h0UmVmLmN1cnJlbnQpKSB7XG4gICAgICAgICAgICBuZXdUb3AgPSBNYXRoLm1pbihuZXdUb3AsIG1heFNjcm9sbEhlaWdodFJlZi5jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBuZXdUb3AgPSBNYXRoLm1heChuZXdUb3AsIDApO1xuICAgICAgICByZXR1cm4gbmV3VG9wO1xuICAgIH1cbiAgICBjb25zdCBpc1Njcm9sbEF0VG9wID0gb2Zmc2V0VG9wIDw9IDA7XG4gICAgY29uc3QgaXNTY3JvbGxBdEJvdHRvbSA9IG9mZnNldFRvcCA+PSBtYXhTY3JvbGxIZWlnaHQ7XG4gICAgY29uc3QgaXNTY3JvbGxBdExlZnQgPSBvZmZzZXRMZWZ0IDw9IDA7XG4gICAgY29uc3QgaXNTY3JvbGxBdFJpZ2h0ID0gISFzY3JvbGxXaWR0aCAmJiBvZmZzZXRMZWZ0ID49IHNjcm9sbFdpZHRoIC0gc2l6ZS53aWR0aDtcbiAgICBjb25zdCBvcmlnaW5TY3JvbGwgPSB1c2VPcmlnaW5TY3JvbGwoaXNTY3JvbGxBdFRvcCwgaXNTY3JvbGxBdEJvdHRvbSwgaXNTY3JvbGxBdExlZnQsIGlzU2Nyb2xsQXRSaWdodCk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU2Nyb2xsID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgZ2V0VmlydHVhbFNjcm9sbEluZm8gPSAoKSA9PiAoe1xuICAgICAgICB4OiBpc1JUTCA/IC1vZmZzZXRMZWZ0IDogb2Zmc2V0TGVmdCxcbiAgICAgICAgeTogb2Zmc2V0VG9wLFxuICAgIH0pO1xuICAgIGNvbnN0IGxhc3RWaXJ0dWFsU2Nyb2xsSW5mb1JlZiA9IHVzZVJlZihnZXRWaXJ0dWFsU2Nyb2xsSW5mbygpKTtcbiAgICBjb25zdCB0cmlnZ2VyU2Nyb2xsID0gdXNlRXZlbnRDYWxsYmFjaygocGFyYW1zKSA9PiB7XG4gICAgICAgIGlmIChvblZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRJbmZvID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBnZXRWaXJ0dWFsU2Nyb2xsSW5mbygpKSwgcGFyYW1zKTtcbiAgICAgICAgICAgIC8vIFRyaWdnZXIgd2hlbiBvZmZzZXQgY2hhbmdlZFxuICAgICAgICAgICAgaWYgKGxhc3RWaXJ0dWFsU2Nyb2xsSW5mb1JlZi5jdXJyZW50LnggIT09IG5leHRJbmZvLnggfHxcbiAgICAgICAgICAgICAgICBsYXN0VmlydHVhbFNjcm9sbEluZm9SZWYuY3VycmVudC55ICE9PSBuZXh0SW5mby55KSB7XG4gICAgICAgICAgICAgICAgb25WaXJ0dWFsU2Nyb2xsKG5leHRJbmZvKTtcbiAgICAgICAgICAgICAgICBsYXN0VmlydHVhbFNjcm9sbEluZm9SZWYuY3VycmVudCA9IG5leHRJbmZvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gb25TY3JvbGxCYXIobmV3U2Nyb2xsT2Zmc2V0LCBob3Jpem9udGFsKSB7XG4gICAgICAgIGNvbnN0IG5ld09mZnNldCA9IG5ld1Njcm9sbE9mZnNldDtcbiAgICAgICAgaWYgKGhvcml6b250YWwpIHtcbiAgICAgICAgICAgIGZsdXNoU3luYygoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0T2Zmc2V0TGVmdChuZXdPZmZzZXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0cmlnZ2VyU2Nyb2xsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzeW5jU2Nyb2xsVG9wKG5ld09mZnNldCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gV2hlbiBkYXRhIHNpemUgcmVkdWNlLiBJdCBtYXkgdHJpZ2dlciBuYXRpdmUgc2Nyb2xsIGV2ZW50IGJhY2sgdG8gZml0IHNjcm9sbCBwb3NpdGlvblxuICAgIGZ1bmN0aW9uIG9uRmFsbGJhY2tTY3JvbGwoZSkge1xuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcDogbmV3U2Nyb2xsVG9wIH0gPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIGlmIChuZXdTY3JvbGxUb3AgIT09IG9mZnNldFRvcCkge1xuICAgICAgICAgICAgc3luY1Njcm9sbFRvcChuZXdTY3JvbGxUb3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyaWdnZXIgb3JpZ2luIG9uU2Nyb2xsXG4gICAgICAgIG9uU2Nyb2xsID09PSBudWxsIHx8IG9uU2Nyb2xsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblNjcm9sbChlKTtcbiAgICAgICAgdHJpZ2dlclNjcm9sbCgpO1xuICAgIH1cbiAgICBjb25zdCBrZWVwSW5Ib3Jpem9udGFsUmFuZ2UgPSAobmV4dE9mZnNldExlZnQpID0+IHtcbiAgICAgICAgbGV0IHRtcE9mZnNldExlZnQgPSBuZXh0T2Zmc2V0TGVmdDtcbiAgICAgICAgY29uc3QgbWF4ID0gc2Nyb2xsV2lkdGggPyBzY3JvbGxXaWR0aCAtIHNpemUud2lkdGggOiAwO1xuICAgICAgICB0bXBPZmZzZXRMZWZ0ID0gTWF0aC5tYXgodG1wT2Zmc2V0TGVmdCwgMCk7XG4gICAgICAgIHRtcE9mZnNldExlZnQgPSBNYXRoLm1pbih0bXBPZmZzZXRMZWZ0LCBtYXgpO1xuICAgICAgICByZXR1cm4gdG1wT2Zmc2V0TGVmdDtcbiAgICB9O1xuICAgIGNvbnN0IG9uV2hlZWxEZWx0YSA9IHVzZUV2ZW50Q2FsbGJhY2soKG9mZnNldFhZLCBmcm9tSG9yaXpvbnRhbCkgPT4ge1xuICAgICAgICBpZiAoZnJvbUhvcml6b250YWwpIHtcbiAgICAgICAgICAgIGZsdXNoU3luYygoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0T2Zmc2V0TGVmdCgobGVmdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0T2Zmc2V0TGVmdCA9IGxlZnQgKyAoaXNSVEwgPyAtb2Zmc2V0WFkgOiBvZmZzZXRYWSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZWVwSW5Ib3Jpem9udGFsUmFuZ2UobmV4dE9mZnNldExlZnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0cmlnZ2VyU2Nyb2xsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzeW5jU2Nyb2xsVG9wKCh0b3ApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdUb3AgPSB0b3AgKyBvZmZzZXRYWTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3VG9wO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBTaW5jZSB0aGlzIGFkZGVkIGluIGdsb2JhbCxzaG91bGQgdXNlIHJlZiB0byBrZWVwIHVwZGF0ZVxuICAgIGNvbnN0IFtvblJhd1doZWVsLCBvbkZpcmVGb3hTY3JvbGxdID0gdXNlRnJhbWVXaGVlbCh1c2VWaXJ0dWFsLCBpc1Njcm9sbEF0VG9wLCBpc1Njcm9sbEF0Qm90dG9tLCBpc1Njcm9sbEF0TGVmdCwgaXNTY3JvbGxBdFJpZ2h0LCAhIXNjcm9sbFdpZHRoLCBvbldoZWVsRGVsdGEpO1xuICAgIC8vIE1vYmlsZSB0b3VjaCBtb3ZlXG4gICAgdXNlTW9iaWxlVG91Y2hNb3ZlKHVzZVZpcnR1YWwsIGNvbXBvbmVudFJlZiwgKGlzSG9yaXpvbnRhbCwgZGVsdGEsIHNtb290aE9mZnNldCwgZSkgPT4ge1xuICAgICAgICBjb25zdCBldmVudCA9IGU7XG4gICAgICAgIGlmIChvcmlnaW5TY3JvbGwoaXNIb3Jpem9udGFsLCBkZWx0YSwgc21vb3RoT2Zmc2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpeCBuZXN0IExpc3QgdHJpZ2dlciBUb3VjaE1vdmUgZXZlbnRcbiAgICAgICAgaWYgKCFldmVudCB8fCAhZXZlbnQuX3ZpcnR1YWxIYW5kbGVkKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBldmVudC5fdmlydHVhbEhhbmRsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25SYXdXaGVlbCh7XG4gICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQoKSB7IH0sXG4gICAgICAgICAgICAgICAgZGVsdGFYOiBpc0hvcml6b250YWwgPyBkZWx0YSA6IDAsXG4gICAgICAgICAgICAgICAgZGVsdGFZOiBpc0hvcml6b250YWwgPyAwIDogZGVsdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICAvLyBNb3VzZURvd24gZHJhZyBmb3Igc2Nyb2xsXG4gICAgdXNlU2Nyb2xsRHJhZyhpblZpcnR1YWwsIGNvbXBvbmVudFJlZiwgKG9mZnNldCkgPT4ge1xuICAgICAgICBzeW5jU2Nyb2xsVG9wKCh0b3ApID0+IHRvcCArIG9mZnNldCk7XG4gICAgfSk7XG4gICAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgLy8gRmlyZWZveCBvbmx5XG4gICAgICAgIGZ1bmN0aW9uIG9uTW96TW91c2VQaXhlbFNjcm9sbChlKSB7XG4gICAgICAgICAgICAvLyBzY3JvbGxpbmcgYXQgdG9wL2JvdHRvbSBsaW1pdFxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsaW5nVXBBdFRvcCA9IGlzU2Nyb2xsQXRUb3AgJiYgZS5kZXRhaWwgPCAwO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsaW5nRG93bkF0Qm90dG9tID0gaXNTY3JvbGxBdEJvdHRvbSAmJiBlLmRldGFpbCA+IDA7XG4gICAgICAgICAgICBpZiAodXNlVmlydHVhbCAmJiAhc2Nyb2xsaW5nVXBBdFRvcCAmJiAhc2Nyb2xsaW5nRG93bkF0Qm90dG9tKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEVsZSA9IGNvbXBvbmVudFJlZi5jdXJyZW50O1xuICAgICAgICBjb21wb25lbnRFbGUuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvblJhd1doZWVsLCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICAgICAgICBjb21wb25lbnRFbGUuYWRkRXZlbnRMaXN0ZW5lcignRE9NTW91c2VTY3JvbGwnLCBvbkZpcmVGb3hTY3JvbGwsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgY29tcG9uZW50RWxlLmFkZEV2ZW50TGlzdGVuZXIoJ01vek1vdXNlUGl4ZWxTY3JvbGwnLCBvbk1vek1vdXNlUGl4ZWxTY3JvbGwsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb21wb25lbnRFbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvblJhd1doZWVsKTtcbiAgICAgICAgICAgIGNvbXBvbmVudEVsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdET01Nb3VzZVNjcm9sbCcsIG9uRmlyZUZveFNjcm9sbCk7XG4gICAgICAgICAgICBjb21wb25lbnRFbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignTW96TW91c2VQaXhlbFNjcm9sbCcsIG9uTW96TW91c2VQaXhlbFNjcm9sbCk7XG4gICAgICAgIH07XG4gICAgfSwgW3VzZVZpcnR1YWwsIGlzU2Nyb2xsQXRUb3AsIGlzU2Nyb2xsQXRCb3R0b21dKTtcbiAgICAvLyBTeW5jIHNjcm9sbCBsZWZ0XG4gICAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHNjcm9sbFdpZHRoKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdPZmZzZXRMZWZ0ID0ga2VlcEluSG9yaXpvbnRhbFJhbmdlKG9mZnNldExlZnQpO1xuICAgICAgICAgICAgc2V0T2Zmc2V0TGVmdChuZXdPZmZzZXRMZWZ0KTtcbiAgICAgICAgICAgIHRyaWdnZXJTY3JvbGwoeyB4OiBuZXdPZmZzZXRMZWZ0IH0pO1xuICAgICAgICB9XG4gICAgfSwgW3NpemUud2lkdGgsIHNjcm9sbFdpZHRoXSk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFJlZiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgZGVsYXlIaWRlU2Nyb2xsQmFyID0gKCkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2EgPSB2ZXJ0aWNhbFNjcm9sbEJhclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVsYXlIaWRkZW4oKTtcbiAgICAgICAgKF9iID0gaG9yaXpvbnRhbFNjcm9sbEJhclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGVsYXlIaWRkZW4oKTtcbiAgICB9O1xuICAgIGNvbnN0IHNjcm9sbFRvID0gdXNlU2Nyb2xsVG8oY29tcG9uZW50UmVmLCBtZXJnZWREYXRhLCBoZWlnaHRzLCBpdGVtSGVpZ2h0LCBnZXRLZXksICgpID0+IGNvbGxlY3RIZWlnaHQodHJ1ZSksIHN5bmNTY3JvbGxUb3AsIGRlbGF5SGlkZVNjcm9sbEJhcik7XG4gICAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgICAgIG5hdGl2ZUVsZW1lbnQ6IGNvbnRhaW5lclJlZi5jdXJyZW50LFxuICAgICAgICBnZXRTY3JvbGxJbmZvOiBnZXRWaXJ0dWFsU2Nyb2xsSW5mbyxcbiAgICAgICAgc2Nyb2xsVG86IChjb25maWcpID0+IHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGlzUG9zU2Nyb2xsKGFyZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmcgJiYgdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgKCdsZWZ0JyBpbiBhcmcgfHwgJ3RvcCcgaW4gYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1Bvc1Njcm9sbChjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgLy8gU2Nyb2xsIFhcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmxlZnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRPZmZzZXRMZWZ0KGtlZXBJbkhvcml6b250YWxSYW5nZShjb25maWcubGVmdCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTY3JvbGwgWVxuICAgICAgICAgICAgICAgIHNjcm9sbFRvKGNvbmZpZy50b3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2Nyb2xsVG8oY29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KSk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRWZmZWN0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLyoqIFdlIG5lZWQgdG9sZCBvdXRzaWRlIHRoYXQgc29tZSBsaXN0IG5vdCByZW5kZXJlZCAqL1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChvblZpc2libGVDaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckxpc3QgPSBtZXJnZWREYXRhLnNsaWNlKHN0YXJ0LCBlbmQgKyAxKTtcbiAgICAgICAgICAgIG9uVmlzaWJsZUNoYW5nZShyZW5kZXJMaXN0LCBtZXJnZWREYXRhKTtcbiAgICAgICAgfVxuICAgIH0sIFtzdGFydCwgZW5kLCBtZXJnZWREYXRhXSk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRXh0cmEgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgZ2V0U2l6ZSA9IHVzZUdldFNpemUobWVyZ2VkRGF0YSwgZ2V0S2V5LCBoZWlnaHRzLCBpdGVtSGVpZ2h0KTtcbiAgICBjb25zdCBleHRyYUNvbnRlbnQgPSBleHRyYVJlbmRlciA9PT0gbnVsbCB8fCBleHRyYVJlbmRlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXh0cmFSZW5kZXIoe1xuICAgICAgICBzdGFydCxcbiAgICAgICAgZW5kLFxuICAgICAgICB2aXJ0dWFsOiBpblZpcnR1YWwsXG4gICAgICAgIG9mZnNldFg6IG9mZnNldExlZnQsXG4gICAgICAgIG9mZnNldFk6IGZpbGxlck9mZnNldCxcbiAgICAgICAgcnRsOiBpc1JUTCxcbiAgICAgICAgZ2V0U2l6ZSxcbiAgICB9KTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBsaXN0Q2hpbGRyZW4gPSB1c2VDaGlsZHJlbihtZXJnZWREYXRhLCBzdGFydCwgZW5kLCBzY3JvbGxXaWR0aCwgb2Zmc2V0TGVmdCwgc2V0SW5zdGFuY2VSZWYsIGNoaWxkcmVuLCBzaGFyZWRDb25maWcpO1xuICAgIGxldCBjb21wb25lbnRTdHlsZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaGVpZ2h0KSB7XG4gICAgICAgIGNvbXBvbmVudFN0eWxlID0gT2JqZWN0LmFzc2lnbih7IFtmdWxsSGVpZ2h0ID8gJ2hlaWdodCcgOiAnbWF4SGVpZ2h0J106IGhlaWdodCB9LCBTY3JvbGxTdHlsZSk7XG4gICAgICAgIGlmICh1c2VWaXJ0dWFsKSB7XG4gICAgICAgICAgICBjb21wb25lbnRTdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIGlmIChzY3JvbGxXaWR0aCkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFN0eWxlLm92ZXJmbG93WCA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNjcm9sbE1vdmluZykge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVyUHJvcHMgPSB7fTtcbiAgICBpZiAoaXNSVEwpIHtcbiAgICAgICAgY29udGFpbmVyUHJvcHMuZGlyID0gJ3J0bCc7XG4gICAgfVxuICAgIHJldHVybiAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHJlZjogY29udGFpbmVyUmVmLCBzdHlsZTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdHlsZSksIHsgcG9zaXRpb246ICdyZWxhdGl2ZScgfSksIGNsYXNzTmFtZTogbWVyZ2VkQ2xhc3NOYW1lIH0sIGNvbnRhaW5lclByb3BzLCByZXN0UHJvcHMsIHsgY2hpbGRyZW46IFtfanN4KFJlc2l6ZU9ic2VydmVyLCB7IG9uUmVzaXplOiBvbkhvbGRlclJlc2l6ZSwgY2hpbGRyZW46IF9qc3goQ29tcG9uZW50LCB7IGNsYXNzTmFtZTogYCR7cHJlZml4Q2xzfS1ob2xkZXJgLCBzdHlsZTogY29tcG9uZW50U3R5bGUsIHJlZjogY29tcG9uZW50UmVmLCBvblNjcm9sbDogb25GYWxsYmFja1Njcm9sbCwgb25Nb3VzZUVudGVyOiBkZWxheUhpZGVTY3JvbGxCYXIsIGNoaWxkcmVuOiBfanN4KEZpbGxlciwgeyBwcmVmaXhDbHM6IHByZWZpeENscywgaGVpZ2h0OiBzY3JvbGxIZWlnaHQsIG9mZnNldFg6IG9mZnNldExlZnQsIG9mZnNldFk6IGZpbGxlck9mZnNldCwgc2Nyb2xsV2lkdGg6IHNjcm9sbFdpZHRoLCBvbklubmVyUmVzaXplOiBjb2xsZWN0SGVpZ2h0LCByZWY6IGZpbGxlcklubmVyUmVmLCBpbm5lclByb3BzOiBpbm5lclByb3BzLCBydGw6IGlzUlRMLCBleHRyYTogZXh0cmFDb250ZW50LCBjaGlsZHJlbjogbGlzdENoaWxkcmVuIH0pIH0pIH0pLCBpblZpcnR1YWwgJiYgc2Nyb2xsSGVpZ2h0ID4gaGVpZ2h0ICYmIChfanN4KFNjcm9sbEJhciwgeyByZWY6IHZlcnRpY2FsU2Nyb2xsQmFyUmVmLCBwcmVmaXhDbHM6IHByZWZpeENscywgc2Nyb2xsT2Zmc2V0OiBvZmZzZXRUb3AsIHNjcm9sbFJhbmdlOiBzY3JvbGxIZWlnaHQsIHJ0bDogaXNSVEwsIG9uU2Nyb2xsOiBvblNjcm9sbEJhciwgb25TdGFydE1vdmU6IG9uU2Nyb2xsYmFyU3RhcnRNb3ZlLCBvblN0b3BNb3ZlOiBvblNjcm9sbGJhclN0b3BNb3ZlLCBzcGluU2l6ZTogdmVydGljYWxTY3JvbGxCYXJTcGluU2l6ZSwgY29udGFpbmVyU2l6ZTogc2l6ZS5oZWlnaHQsIHN0eWxlOiBzdHlsZXMgPT09IG51bGwgfHwgc3R5bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdHlsZXMudmVydGljYWxTY3JvbGxCYXIsIHRodW1iU3R5bGU6IHN0eWxlcyA9PT0gbnVsbCB8fCBzdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlcy52ZXJ0aWNhbFNjcm9sbEJhclRodW1iLCBzaG93U2Nyb2xsQmFyOiBzaG93U2Nyb2xsQmFyIH0pKSwgaW5WaXJ0dWFsICYmIHNjcm9sbFdpZHRoID4gc2l6ZS53aWR0aCAmJiAoX2pzeChTY3JvbGxCYXIsIHsgcmVmOiBob3Jpem9udGFsU2Nyb2xsQmFyUmVmLCBwcmVmaXhDbHM6IHByZWZpeENscywgc2Nyb2xsT2Zmc2V0OiBvZmZzZXRMZWZ0LCBzY3JvbGxSYW5nZTogc2Nyb2xsV2lkdGgsIHJ0bDogaXNSVEwsIG9uU2Nyb2xsOiBvblNjcm9sbEJhciwgb25TdGFydE1vdmU6IG9uU2Nyb2xsYmFyU3RhcnRNb3ZlLCBvblN0b3BNb3ZlOiBvblNjcm9sbGJhclN0b3BNb3ZlLCBzcGluU2l6ZTogaG9yaXpvbnRhbFNjcm9sbEJhclNwaW5TaXplLCBjb250YWluZXJTaXplOiBzaXplLndpZHRoLCBob3Jpem9udGFsOiB0cnVlLCBzdHlsZTogc3R5bGVzID09PSBudWxsIHx8IHN0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGVzLmhvcml6b250YWxTY3JvbGxCYXIsIHRodW1iU3R5bGU6IHN0eWxlcyA9PT0gbnVsbCB8fCBzdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlcy5ob3Jpem9udGFsU2Nyb2xsQmFyVGh1bWIsIHNob3dTY3JvbGxCYXI6IHNob3dTY3JvbGxCYXIgfSkpXSB9KSkpO1xufVxuY29uc3QgVmlydHVhbExpc3RCYXNlID0gUmVhY3QuZm9yd2FyZFJlZihSYXdMaXN0KTtcblZpcnR1YWxMaXN0QmFzZS5kaXNwbGF5TmFtZSA9IFZJUlRVQUxfTElTVF9DT01QT05FTlRfTkFNRTtcbmNvbnN0IFZpcnR1YWxMaXN0ID0gUmVhY3QubWVtbyhWaXJ0dWFsTGlzdEJhc2UpO1xuZXhwb3J0IGRlZmF1bHQgVmlydHVhbExpc3Q7IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|
|
555
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVmlydHVhbExpc3QvVmlydHVhbExpc3QuanMiLCJjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL1ZpcnR1YWxMaXN0L1ZpcnR1YWxMaXN0LnRzeCJdLCJuYW1lcyI6WyJfanN4UnVudGltZSIsInJlcXVpcmUiLCJfY2xzeDIiLCJfUmVzaXplT2JzZXJ2ZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3VzZUxheW91dEVmZmVjdCIsIl91c2VFdmVudENhbGxiYWNrIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJSZWFjdCIsIl9yZWFjdERvbSIsIl9GaWxsZXIiLCJfdXNlQ2hpbGRyZW4iLCJfdXNlRGlmZkl0ZW0zIiwiX3VzZUZyYW1lV2hlZWwzIiwiX3VzZUdldFNpemUiLCJfdXNlSGVpZ2h0czMiLCJfdXNlTW9iaWxlVG91Y2hNb3ZlIiwiX3VzZU9yaWdpblNjcm9sbCIsIl91c2VTY3JvbGxEcmFnIiwiX3VzZVNjcm9sbFRvIiwiX1Njcm9sbEJhciIsIl9zY3JvbGxiYXJVdGlsIiwiX2NvbnN0YW50cyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfX3Jlc3QiLCJzIiwicCIsInByb3RvdHlwZSIsImluZGV4T2YiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIkVNUFRZX0RBVEEiLCJTY3JvbGxTdHlsZSIsIm92ZXJmbG93WSIsIm92ZXJmbG93QW5jaG9yIiwiUmF3TGlzdCIsInByb3BzIiwicmVmIiwiX3Byb3BzJHByZWZpeENscyIsInByZWZpeENscyIsIlZJUlRVQUxfTElTVF9QUkVGSVhDTFMiLCJjbGFzc05hbWUiLCJoZWlnaHQiLCJpdGVtSGVpZ2h0IiwiX3Byb3BzJGZ1bGxIZWlnaHQiLCJmdWxsSGVpZ2h0Iiwic3R5bGUiLCJkYXRhIiwiY2hpbGRyZW4iLCJpdGVtS2V5IiwidmlydHVhbCIsImRpcmVjdGlvbiIsInNjcm9sbFdpZHRoIiwiX3Byb3BzJGNvbXBvbmVudCIsImNvbXBvbmVudCIsIkNvbXBvbmVudCIsIm9uU2Nyb2xsIiwib25WaXJ0dWFsU2Nyb2xsIiwib25WaXNpYmxlQ2hhbmdlIiwiaW5uZXJQcm9wcyIsImV4dHJhUmVuZGVyIiwic3R5bGVzIiwiX3Byb3BzJHNob3dTY3JvbGxCYXIiLCJzaG93U2Nyb2xsQmFyIiwicmVzdFByb3BzIiwiZ2V0S2V5IiwidXNlQ2FsbGJhY2siLCJpdGVtIiwiX3VzZUhlaWdodHMiLCJ1c2VIZWlnaHRzIiwidW5kZWZpbmVkIiwiX3VzZUhlaWdodHMyIiwiX3NsaWNlZFRvQXJyYXkyIiwic2V0SW5zdGFuY2VSZWYiLCJjb2xsZWN0SGVpZ2h0IiwiaGVpZ2h0cyIsImhlaWdodFVwZGF0ZWRNYXJrIiwidXNlVmlydHVhbCIsImNvbnRhaW5lckhlaWdodCIsInVzZU1lbW8iLCJ2YWx1ZXMiLCJtYXBzIiwicmVkdWNlIiwidG90YWwiLCJjdXJyIiwiaWQiLCJpblZpcnR1YWwiLCJNYXRoIiwibWF4IiwiaXNSVEwiLCJtZXJnZWRDbGFzc05hbWUiLCJjbHN4IiwiX2RlZmluZVByb3BlcnR5MiIsImNvbmNhdCIsIm1lcmdlZERhdGEiLCJjb21wb25lbnRSZWYiLCJ1c2VSZWYiLCJmaWxsZXJJbm5lclJlZiIsImNvbnRhaW5lclJlZiIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIm9mZnNldFRvcCIsInNldE9mZnNldFRvcCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwib2Zmc2V0TGVmdCIsInNldE9mZnNldExlZnQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNjcm9sbE1vdmluZyIsInNldFNjcm9sbE1vdmluZyIsIm9mZnNldFRvcFJlZiIsIm9uU2Nyb2xsYmFyU3RhcnRNb3ZlIiwib25TY3JvbGxiYXJTdG9wTW92ZSIsInNoYXJlZENvbmZpZyIsInN5bmNTY3JvbGxUb3AiLCJuZXdUb3AiLCJ2YWx1ZSIsImN1cnJlbnQiLCJhbGlnbmVkVG9wIiwia2VlcEluUmFuZ2UiLCJzY3JvbGxUb3AiLCJjdXJyZW50VGFyZ2V0IiwicmFuZ2VSZWYiLCJzdGFydCIsImVuZCIsImRpZmZJdGVtUmVmIiwiX3VzZURpZmZJdGVtIiwidXNlRGlmZkl0ZW0iLCJfdXNlRGlmZkl0ZW0yIiwiZGlmZkl0ZW0iLCJfUmVhY3QkdXNlTWVtbyIsIl9hIiwic2Nyb2xsSGVpZ2h0Iiwib2Zmc2V0Iiwib2Zmc2V0SGVpZ2h0IiwiaXRlbVRvcCIsInN0YXJ0SW5kZXgiLCJzdGFydE9mZnNldCIsImVuZEluZGV4IiwiZGF0YUxlbiIsImtleSIsImNhY2hlSGVpZ2h0IiwiY3VycmVudEl0ZW1Cb3R0b20iLCJjZWlsIiwibWluIiwiZmlsbGVyT2Zmc2V0IiwidXNlTGF5b3V0RWZmZWN0IiwiY2hhbmdlZFJlY29yZCIsImdldFJlY29yZCIsInNpemUiLCJyZWNvcmRLZXkiLCJBcnJheSIsImZyb20iLCJrZXlzIiwicHJldkNhY2hlSGVpZ2h0Iiwic3RhcnRJdGVtIiwic3RhcnRJbmRleEtleSIsInJlYWxTdGFydEhlaWdodCIsImRpZmZIZWlnaHQiLCJvcmkiLCJyZXNldFJlY29yZCIsIl9SZWFjdCR1c2VTdGF0ZSIsIndpZHRoIiwiX1JlYWN0JHVzZVN0YXRlMiIsInNldFNpemUiLCJvbkhvbGRlclJlc2l6ZSIsInNpemVJbmZvIiwib2Zmc2V0V2lkdGgiLCJ2ZXJ0aWNhbFNjcm9sbEJhclJlZiIsImhvcml6b250YWxTY3JvbGxCYXJSZWYiLCJob3Jpem9udGFsU2Nyb2xsQmFyU3BpblNpemUiLCJnZXRTcGluU2l6ZSIsInZlcnRpY2FsU2Nyb2xsQmFyU3BpblNpemUiLCJtYXhTY3JvbGxIZWlnaHQiLCJtYXhTY3JvbGxIZWlnaHRSZWYiLCJuZXdTY3JvbGxUb3AiLCJOdW1iZXIiLCJpc05hTiIsImlzU2Nyb2xsQXRUb3AiLCJpc1Njcm9sbEF0Qm90dG9tIiwiaXNTY3JvbGxBdExlZnQiLCJpc1Njcm9sbEF0UmlnaHQiLCJvcmlnaW5TY3JvbGwiLCJ1c2VPcmlnaW5TY3JvbGwiLCJnZXRWaXJ0dWFsU2Nyb2xsSW5mbyIsIngiLCJ5IiwibGFzdFZpcnR1YWxTY3JvbGxJbmZvUmVmIiwidHJpZ2dlclNjcm9sbCIsInVzZUV2ZW50Q2FsbGJhY2siLCJwYXJhbXMiLCJuZXh0SW5mbyIsImFzc2lnbiIsIm9uU2Nyb2xsQmFyIiwibmV3U2Nyb2xsT2Zmc2V0IiwiaG9yaXpvbnRhbCIsIm5ld09mZnNldCIsImZsdXNoU3luYyIsIm9uRmFsbGJhY2tTY3JvbGwiLCJrZWVwSW5Ib3Jpem9udGFsUmFuZ2UiLCJuZXh0T2Zmc2V0TGVmdCIsInRtcE9mZnNldExlZnQiLCJvbldoZWVsRGVsdGEiLCJvZmZzZXRYWSIsImZyb21Ib3Jpem9udGFsIiwibGVmdCIsInRvcCIsIl91c2VGcmFtZVdoZWVsIiwidXNlRnJhbWVXaGVlbCIsIl91c2VGcmFtZVdoZWVsMiIsIm9uUmF3V2hlZWwiLCJvbkZpcmVGb3hTY3JvbGwiLCJ1c2VNb2JpbGVUb3VjaE1vdmUiLCJpc0hvcml6b250YWwiLCJkZWx0YSIsInNtb290aE9mZnNldCIsImV2ZW50IiwiX3ZpcnR1YWxIYW5kbGVkIiwicHJldmVudERlZmF1bHQiLCJkZWx0YVgiLCJkZWx0YVkiLCJ1c2VTY3JvbGxEcmFnIiwib25Nb3pNb3VzZVBpeGVsU2Nyb2xsIiwic2Nyb2xsaW5nVXBBdFRvcCIsImRldGFpbCIsInNjcm9sbGluZ0Rvd25BdEJvdHRvbSIsImNvbXBvbmVudEVsZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJwYXNzaXZlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm5ld09mZnNldExlZnQiLCJkZWxheUhpZGVTY3JvbGxCYXIiLCJfYiIsImRlbGF5SGlkZGVuIiwic2Nyb2xsVG8iLCJ1c2VTY3JvbGxUbyIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJuYXRpdmVFbGVtZW50IiwiZ2V0U2Nyb2xsSW5mbyIsImNvbmZpZyIsImlzUG9zU2Nyb2xsIiwiYXJnIiwiX3R5cGVvZjIiLCJyZW5kZXJMaXN0Iiwic2xpY2UiLCJnZXRTaXplIiwidXNlR2V0U2l6ZSIsImV4dHJhQ29udGVudCIsIm9mZnNldFgiLCJvZmZzZXRZIiwicnRsIiwibGlzdENoaWxkcmVuIiwidXNlQ2hpbGRyZW4iLCJjb21wb25lbnRTdHlsZSIsIm92ZXJmbG93WCIsInBvaW50ZXJFdmVudHMiLCJjb250YWluZXJQcm9wcyIsImRpciIsIl9qc3hzIiwicG9zaXRpb24iLCJfanN4IiwiUmVzaXplT2JzZXJ2ZXIiLCJvblJlc2l6ZSIsIm9uTW91c2VFbnRlciIsIkZpbGxlciIsIm9uSW5uZXJSZXNpemUiLCJleHRyYSIsIlNjcm9sbEJhciIsInNjcm9sbE9mZnNldCIsInNjcm9sbFJhbmdlIiwib25TdGFydE1vdmUiLCJvblN0b3BNb3ZlIiwic3BpblNpemUiLCJjb250YWluZXJTaXplIiwidmVydGljYWxTY3JvbGxCYXIiLCJ0aHVtYlN0eWxlIiwidmVydGljYWxTY3JvbGxCYXJUaHVtYiIsImhvcml6b250YWxTY3JvbGxCYXIiLCJob3Jpem9udGFsU2Nyb2xsQmFyVGh1bWIiLCJWaXJ0dWFsTGlzdEJhc2UiLCJmb3J3YXJkUmVmIiwiZGlzcGxheU5hbWUiLCJWSVJUVUFMX0xJU1RfQ09NUE9ORU5UX05BTUUiLCJWaXJ0dWFsTGlzdCIsIm1lbW8iLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVdBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQ1hBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGVBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUVBLElBQUFJLGdCQUFBLEdBQUFELHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSyxpQkFBQSxHQUFB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QSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBTkEsTUFBTSxDQUFFMk4sd0JBQXdCO01BQzVDek4sYUFBYSxFQUFFQTtJQUFhLENBQUEsQ0FFL0I7RUFBQSxDQUFBLENBQUEsQ0FDRztBQUVWO0FBRUEsSUFBTTBOLGVBQWUsZ0JBQUdyUyxLQUFLLENBQUNzUyxVQUFVLENBQTBCdlAsT0FBTyxDQUFDO0FBRTFFc1AsZUFBZSxDQUFDRSxXQUFXLEdBQUdDLHNDQUEyQjtBQUV6RCxJQUFNQyxXQUFXLGdCQUFHelMsS0FBSyxDQUFDMFMsSUFBSSxDQUFDTCxlQUFlLENBRXZCO0FBQUMsSUFBQU0sUUFBQSxHQUFBQyxPQUFBLGNBRVRILFdBQVciLCJmaWxlIjoiY29tcG9uZW50cy9WaXJ0dWFsTGlzdC9WaXJ0dWFsTGlzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBjbHN4IH0gZnJvbSAnY2xzeCc7XG5pbXBvcnQgUmVzaXplT2JzZXJ2ZXIgZnJvbSAnLi4vUmVzaXplT2JzZXJ2ZXInO1xuaW1wb3J0IHVzZUxheW91dEVmZmVjdCBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUxheW91dEVmZmVjdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZsdXNoU3luYyB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgRmlsbGVyIGZyb20gJy4vRmlsbGVyJztcbmltcG9ydCB1c2VDaGlsZHJlbiBmcm9tICcuL2hvb2tzL3VzZUNoaWxkcmVuJztcbmltcG9ydCB1c2VEaWZmSXRlbSBmcm9tICcuL2hvb2tzL3VzZURpZmZJdGVtJztcbmltcG9ydCB1c2VGcmFtZVdoZWVsIGZyb20gJy4vaG9va3MvdXNlRnJhbWVXaGVlbCc7XG5pbXBvcnQgeyB1c2VHZXRTaXplIH0gZnJvbSAnLi9ob29rcy91c2VHZXRTaXplJztcbmltcG9ydCB1c2VIZWlnaHRzIGZyb20gJy4vaG9va3MvdXNlSGVpZ2h0cyc7XG5pbXBvcnQgdXNlTW9iaWxlVG91Y2hNb3ZlIGZyb20gJy4vaG9va3MvdXNlTW9iaWxlVG91Y2hNb3ZlJztcbmltcG9ydCB1c2VPcmlnaW5TY3JvbGwgZnJvbSAnLi9ob29rcy91c2VPcmlnaW5TY3JvbGwnO1xuaW1wb3J0IHVzZVNjcm9sbERyYWcgZnJvbSAnLi9ob29rcy91c2VTY3JvbGxEcmFnJztcbmltcG9ydCB1c2VTY3JvbGxUbyBmcm9tICcuL2hvb2tzL3VzZVNjcm9sbFRvJztcbmltcG9ydCBTY3JvbGxCYXIgZnJvbSAnLi9TY3JvbGxCYXInO1xuaW1wb3J0IHsgZ2V0U3BpblNpemUgfSBmcm9tICcuL3V0aWxzL3Njcm9sbGJhclV0aWwnO1xuaW1wb3J0IHsgVklSVFVBTF9MSVNUX0NPTVBPTkVOVF9OQU1FLCBWSVJUVUFMX0xJU1RfUFJFRklYQ0xTLCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCAnLi9zdHlsZSc7XG5jb25zdCBFTVBUWV9EQVRBID0gW107XG5jb25zdCBTY3JvbGxTdHlsZSA9IHtcbiAgICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgICBvdmVyZmxvd0FuY2hvcjogJ25vbmUnLFxufTtcbmV4cG9ydCBmdW5jdGlvbiBSYXdMaXN0KHByb3BzLCByZWYpIHtcbiAgICBjb25zdCB7IHByZWZpeENscyA9IFZJUlRVQUxfTElTVF9QUkVGSVhDTFMsIGNsYXNzTmFtZSwgaGVpZ2h0LCBpdGVtSGVpZ2h0LCBmdWxsSGVpZ2h0ID0gdHJ1ZSwgc3R5bGUsIGRhdGEsIGNoaWxkcmVuLCBpdGVtS2V5LCB2aXJ0dWFsLCBkaXJlY3Rpb24sIHNjcm9sbFdpZHRoLCBjb21wb25lbnQ6IENvbXBvbmVudCA9ICdkaXYnLCBvblNjcm9sbCwgb25WaXJ0dWFsU2Nyb2xsLCBvblZpc2libGVDaGFuZ2UsIGlubmVyUHJvcHMsIGV4dHJhUmVuZGVyLCBzdHlsZXMsIHNob3dTY3JvbGxCYXIgPSAnb3B0aW9uYWwnIH0gPSBwcm9wcywgcmVzdFByb3BzID0gX19yZXN0KHByb3BzLCBbXCJwcmVmaXhDbHNcIiwgXCJjbGFzc05hbWVcIiwgXCJoZWlnaHRcIiwgXCJpdGVtSGVpZ2h0XCIsIFwiZnVsbEhlaWdodFwiLCBcInN0eWxlXCIsIFwiZGF0YVwiLCBcImNoaWxkcmVuXCIsIFwiaXRlbUtleVwiLCBcInZpcnR1YWxcIiwgXCJkaXJlY3Rpb25cIiwgXCJzY3JvbGxXaWR0aFwiLCBcImNvbXBvbmVudFwiLCBcIm9uU2Nyb2xsXCIsIFwib25WaXJ0dWFsU2Nyb2xsXCIsIFwib25WaXNpYmxlQ2hhbmdlXCIsIFwiaW5uZXJQcm9wc1wiLCBcImV4dHJhUmVuZGVyXCIsIFwic3R5bGVzXCIsIFwic2hvd1Njcm9sbEJhclwiXSk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJdGVtIEtleSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgZ2V0S2V5ID0gUmVhY3QudXNlQ2FsbGJhY2soKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtS2V5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbUtleShpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpdGVtW2l0ZW1LZXldO1xuICAgIH0sIFtpdGVtS2V5XSk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSGVpZ2h0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgW3NldEluc3RhbmNlUmVmLCBjb2xsZWN0SGVpZ2h0LCBoZWlnaHRzLCBoZWlnaHRVcGRhdGVkTWFya10gPSB1c2VIZWlnaHRzKGdldEtleSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBNSVNDID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IHVzZVZpcnR1YWwgPSAhISh2aXJ0dWFsICE9PSBmYWxzZSAmJiBoZWlnaHQgJiYgaXRlbUhlaWdodCk7XG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gUmVhY3QudXNlTWVtbygoKSA9PiBPYmplY3QudmFsdWVzKGhlaWdodHMubWFwcykucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gdG90YWwgKyBjdXJyLCAwKSwgW2hlaWdodHMuaWRdKTtcbiAgICBjb25zdCBpblZpcnR1YWwgPSB1c2VWaXJ0dWFsICYmXG4gICAgICAgIGRhdGEgJiZcbiAgICAgICAgKE1hdGgubWF4KGl0ZW1IZWlnaHQgKiBkYXRhLmxlbmd0aCwgY29udGFpbmVySGVpZ2h0KSA+IGhlaWdodCB8fCAhIXNjcm9sbFdpZHRoKTtcbiAgICBjb25zdCBpc1JUTCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgY29uc3QgbWVyZ2VkQ2xhc3NOYW1lID0gY2xzeChwcmVmaXhDbHMsIHsgW2Ake3ByZWZpeENsc30tcnRsYF06IGlzUlRMIH0sIGNsYXNzTmFtZSk7XG4gICAgY29uc3QgbWVyZ2VkRGF0YSA9IGRhdGEgfHwgRU1QVFlfREFUQTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgZmlsbGVySW5uZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSXRlbSBLZXkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IFtvZmZzZXRUb3AsIHNldE9mZnNldFRvcF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbb2Zmc2V0TGVmdCwgc2V0T2Zmc2V0TGVmdF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbc2Nyb2xsTW92aW5nLCBzZXRTY3JvbGxNb3ZpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIC8vIE1pcnJvcnMgYG9mZnNldFRvcGAgc3luY2hyb25vdXNseSBzbyBgc3luY1Njcm9sbFRvcGAgY2FuIHJlYWQgdGhlIGxhdGVzdFxuICAgIC8vIHZhbHVlIGltbWVkaWF0ZWx5IChhIHN0YXRlIHVwZGF0ZXIgY2FuJ3Qgc2FmZWx5IGhhdmUgc2lkZSBlZmZlY3RzIOKAlCBzZWVcbiAgICAvLyB0aGUgYG9uU2Nyb2xsYCBjYWxsIGJlbG93KS5cbiAgICBjb25zdCBvZmZzZXRUb3BSZWYgPSB1c2VSZWYoMCk7XG4gICAgY29uc3Qgb25TY3JvbGxiYXJTdGFydE1vdmUgPSAoKSA9PiB7XG4gICAgICAgIHNldFNjcm9sbE1vdmluZyh0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU2Nyb2xsYmFyU3RvcE1vdmUgPSAoKSA9PiB7XG4gICAgICAgIHNldFNjcm9sbE1vdmluZyhmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCBzaGFyZWRDb25maWcgPSB7XG4gICAgICAgIGdldEtleSxcbiAgICB9O1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFNjcm9sbCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFdoZWVsIHNjcm9sbCwgc2Nyb2xsYmFyIGRyYWcsIGFuZCB0b3VjaCBtb3ZlIChzZWUgYG9uV2hlZWxEZWx0YWAgL1xuICAgIC8vIGB1c2VTY3JvbGxEcmFnYCAvIGB1c2VNb2JpbGVUb3VjaE1vdmVgIGJlbG93KSBhbGwgZnVubmVsIHRocm91Z2ggaGVyZSDigJRcbiAgICAvLyBpdCdzIHRoZSBzaW5nbGUgcGxhY2UgYSB2aXJ0dWFsLW1vZGUgc2Nyb2xsIHBvc2l0aW9uIGNoYW5nZSBoYXBwZW5zLlxuICAgIC8vXG4gICAgLy8gSW4gdmlydHVhbCBtb2RlIHRoZSBob2xkZXIgaXMgYG92ZXJmbG93LXk6IGhpZGRlbmAgKHNjcm9sbGluZyBpcyBmYWtlZCB2aWFcbiAgICAvLyB0aGlzIG9mZnNldCwgbm90IG5hdGl2ZSBicm93c2VyIHNjcm9sbCksIHNvIHNldHRpbmcgYHNjcm9sbFRvcGBcbiAgICAvLyBwcm9ncmFtbWF0aWNhbGx5IGRvZXMgbm90IHJlbGlhYmx5IGRpc3BhdGNoIGEgbmF0aXZlIGBzY3JvbGxgIERPTSBldmVudC5cbiAgICAvLyBgb25GYWxsYmFja1Njcm9sbGAgYmVsb3cgKGJvdW5kIHRvIHRoZSBob2xkZXIncyBuYXRpdmUgYG9uU2Nyb2xsYCkgb25seVxuICAgIC8vIGZpcmVzIGluIG5vbi12aXJ0dWFsIG1vZGUuIENhbGwgYG9uU2Nyb2xsYCBkaXJlY3RseSBoZXJlIOKAlCB3aXRoIHRoZSBzYW1lXG4gICAgLy8gZXZlbnQgc2hhcGUgYSBuYXRpdmUgc2Nyb2xsIHdvdWxkIGNhcnJ5IOKAlCBzbyBpdCBmaXJlcyBmb3IgcmVhbCB1c2VyXG4gICAgLy8gc2Nyb2xsaW5nIGluIHZpcnR1YWwgbW9kZSB0b28uXG4gICAgZnVuY3Rpb24gc3luY1Njcm9sbFRvcChuZXdUb3ApIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgbmV3VG9wID09PSAnZnVuY3Rpb24nID8gbmV3VG9wKG9mZnNldFRvcFJlZi5jdXJyZW50KSA6IG5ld1RvcDtcbiAgICAgICAgY29uc3QgYWxpZ25lZFRvcCA9IGtlZXBJblJhbmdlKHZhbHVlKTtcbiAgICAgICAgb2Zmc2V0VG9wUmVmLmN1cnJlbnQgPSBhbGlnbmVkVG9wO1xuICAgICAgICBzZXRPZmZzZXRUb3AoYWxpZ25lZFRvcCk7XG4gICAgICAgIGlmIChjb21wb25lbnRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgY29tcG9uZW50UmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gYWxpZ25lZFRvcDtcbiAgICAgICAgICAgIG9uU2Nyb2xsID09PSBudWxsIHx8IG9uU2Nyb2xsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblNjcm9sbCh7IGN1cnJlbnRUYXJnZXQ6IGNvbXBvbmVudFJlZi5jdXJyZW50IH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IExlZ2FjeSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFB1dCByZWYgaGVyZSBzaW5jZSB0aGUgcmFuZ2UgaXMgZ2VuZXJhdGUgYnkgZm9sbG93XG4gICAgY29uc3QgcmFuZ2VSZWYgPSB1c2VSZWYoeyBzdGFydDogMCwgZW5kOiBtZXJnZWREYXRhLmxlbmd0aCB9KTtcbiAgICBjb25zdCBkaWZmSXRlbVJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBbZGlmZkl0ZW1dID0gdXNlRGlmZkl0ZW0obWVyZ2VkRGF0YSwgZ2V0S2V5KTtcbiAgICBkaWZmSXRlbVJlZi5jdXJyZW50ID0gZGlmZkl0ZW07XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gVmlzaWJsZSBDYWxjdWxhdGlvbiA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgeyBzY3JvbGxIZWlnaHQsIHN0YXJ0LCBlbmQsIG9mZnNldDogZmlsbGVyT2Zmc2V0LCB9ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF1c2VWaXJ0dWFsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNjcm9sbEhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgICAgICAgIGVuZDogbWVyZ2VkRGF0YS5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgIG9mZnNldDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbHdheXMgdXNlIHZpcnR1YWwgc2Nyb2xsIGJhciBpbiBhdm9pZCBzaGFraW5nXG4gICAgICAgIGlmICghaW5WaXJ0dWFsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNjcm9sbEhlaWdodDogKChfYSA9IGZpbGxlcklubmVyUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vZmZzZXRIZWlnaHQpIHx8IDAsXG4gICAgICAgICAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgICAgICAgICAgZW5kOiBtZXJnZWREYXRhLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCBpdGVtVG9wID0gMDtcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXg7XG4gICAgICAgIGxldCBzdGFydE9mZnNldDtcbiAgICAgICAgbGV0IGVuZEluZGV4O1xuICAgICAgICBjb25zdCBkYXRhTGVuID0gbWVyZ2VkRGF0YS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gbWVyZ2VkRGF0YVtpXTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGdldEtleShpdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlSGVpZ2h0ID0gaGVpZ2h0cy5nZXQoa2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtQm90dG9tID0gaXRlbVRvcCArIChjYWNoZUhlaWdodCA9PT0gdW5kZWZpbmVkID8gaXRlbUhlaWdodCA6IGNhY2hlSGVpZ2h0KTtcbiAgICAgICAgICAgIC8vIENoZWNrIGl0ZW0gdG9wIGluIHRoZSByYW5nZVxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtQm90dG9tID49IG9mZnNldFRvcCAmJiBzdGFydEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBzdGFydE9mZnNldCA9IGl0ZW1Ub3A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBpdGVtIGJvdHRvbSBpbiB0aGUgcmFuZ2UuIFdlIHdpbGwgcmVuZGVyIGFkZGl0aW9uYWwgb25lIGl0ZW0gZm9yIG1vdGlvbiB1c2FnZVxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtQm90dG9tID4gb2Zmc2V0VG9wICsgaGVpZ2h0ICYmIGVuZEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtVG9wID0gY3VycmVudEl0ZW1Cb3R0b207XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2hlbiBzY3JvbGxUb3AgYXQgdGhlIGVuZCBidXQgZGF0YSBjdXQgdG8gc21hbGwgY291bnQgd2lsbCByZWFjaCB0aGlzXG4gICAgICAgIGlmIChzdGFydEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAwO1xuICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSAwO1xuICAgICAgICAgICAgZW5kSW5kZXggPSBNYXRoLmNlaWwoaGVpZ2h0IC8gaXRlbUhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuZEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVuZEluZGV4ID0gbWVyZ2VkRGF0YS5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIC8vIEdpdmUgY2FjaGUgdG8gaW1wcm92ZSBzY3JvbGwgZXhwZXJpZW5jZVxuICAgICAgICBlbmRJbmRleCA9IE1hdGgubWluKGVuZEluZGV4ICsgMSwgbWVyZ2VkRGF0YS5sZW5ndGggLSAxKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjcm9sbEhlaWdodDogaXRlbVRvcCxcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgZW5kOiBlbmRJbmRleCxcbiAgICAgICAgICAgIG9mZnNldDogc3RhcnRPZmZzZXQsXG4gICAgICAgIH07XG4gICAgfSwgW2luVmlydHVhbCwgdXNlVmlydHVhbCwgb2Zmc2V0VG9wLCBtZXJnZWREYXRhLCBoZWlnaHRVcGRhdGVkTWFyaywgaGVpZ2h0XSk7XG4gICAgcmFuZ2VSZWYuY3VycmVudC5zdGFydCA9IHN0YXJ0O1xuICAgIHJhbmdlUmVmLmN1cnJlbnQuZW5kID0gZW5kO1xuICAgIC8vIFdoZW4gc2Nyb2xsIHVwLCBmaXJzdCB2aXNpYmxlIGl0ZW0gZ2V0IHJlYWwgaGVpZ2h0IG1heSBub3Qgc2FtZSBhcyBgaXRlbUhlaWdodGAsXG4gICAgLy8gV2hpY2ggd2lsbCBtYWtlIHNjcm9sbCBqdW1wLlxuICAgIC8vIExldCdzIHN5bmMgc2Nyb2xsIHRvcCB0byBhdm9pZCBqdW1wXG4gICAgUmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlZFJlY29yZCA9IGhlaWdodHMuZ2V0UmVjb3JkKCk7XG4gICAgICAgIGlmIChjaGFuZ2VkUmVjb3JkLnNpemUgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZEtleSA9IEFycmF5LmZyb20oY2hhbmdlZFJlY29yZC5rZXlzKCkpWzBdO1xuICAgICAgICAgICAgY29uc3QgcHJldkNhY2hlSGVpZ2h0ID0gY2hhbmdlZFJlY29yZC5nZXQocmVjb3JkS2V5KTtcbiAgICAgICAgICAgIC8vIFF1aWNrIHN3aXRjaCBkYXRhIG1heSBjYXVzZSBgc3RhcnRgIG5vdCBpbiBgbWVyZ2VkRGF0YWAgYW55bW9yZVxuICAgICAgICAgICAgY29uc3Qgc3RhcnRJdGVtID0gbWVyZ2VkRGF0YVtzdGFydF07XG4gICAgICAgICAgICBpZiAoc3RhcnRJdGVtICYmIHByZXZDYWNoZUhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRJbmRleEtleSA9IGdldEtleShzdGFydEl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydEluZGV4S2V5ID09PSByZWNvcmRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhbFN0YXJ0SGVpZ2h0ID0gaGVpZ2h0cy5nZXQocmVjb3JkS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZkhlaWdodCA9IHJlYWxTdGFydEhlaWdodCAtIGl0ZW1IZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIHN5bmNTY3JvbGxUb3AoKG9yaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaSArIGRpZmZIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoZWlnaHRzLnJlc2V0UmVjb3JkKCk7XG4gICAgfSwgW3Njcm9sbEhlaWdodF0pO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTaXplID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IFtzaXplLCBzZXRTaXplXSA9IFJlYWN0LnVzZVN0YXRlKHsgd2lkdGg6IDAsIGhlaWdodDogaGVpZ2h0ICE9PSBudWxsICYmIGhlaWdodCAhPT0gdm9pZCAwID8gaGVpZ2h0IDogMCB9KTtcbiAgICBjb25zdCBvbkhvbGRlclJlc2l6ZSA9IChzaXplSW5mbykgPT4ge1xuICAgICAgICBzZXRTaXplKHtcbiAgICAgICAgICAgIHdpZHRoOiBzaXplSW5mby5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogc2l6ZUluZm8ub2Zmc2V0SGVpZ2h0LFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIEhhY2sgb24gc2Nyb2xsYmFyIHRvIGVuYWJsZSBmbGFzaCBjYWxsXG4gICAgY29uc3QgdmVydGljYWxTY3JvbGxCYXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbEJhclJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsQmFyU3BpblNpemUgPSBSZWFjdC51c2VNZW1vKCgpID0+IGdldFNwaW5TaXplKHNpemUud2lkdGgsIHNjcm9sbFdpZHRoKSwgW3NpemUud2lkdGgsIHNjcm9sbFdpZHRoXSk7XG4gICAgY29uc3QgdmVydGljYWxTY3JvbGxCYXJTcGluU2l6ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gZ2V0U3BpblNpemUoc2l6ZS5oZWlnaHQsIHNjcm9sbEhlaWdodCksIFtzaXplLmhlaWdodCwgc2Nyb2xsSGVpZ2h0XSk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJbiBSYW5nZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgbWF4U2Nyb2xsSGVpZ2h0ID0gc2Nyb2xsSGVpZ2h0IC0gaGVpZ2h0O1xuICAgIGNvbnN0IG1heFNjcm9sbEhlaWdodFJlZiA9IHVzZVJlZihtYXhTY3JvbGxIZWlnaHQpO1xuICAgIG1heFNjcm9sbEhlaWdodFJlZi5jdXJyZW50ID0gbWF4U2Nyb2xsSGVpZ2h0O1xuICAgIGZ1bmN0aW9uIGtlZXBJblJhbmdlKG5ld1Njcm9sbFRvcCkge1xuICAgICAgICBsZXQgbmV3VG9wID0gbmV3U2Nyb2xsVG9wO1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTihtYXhTY3JvbGxIZWlnaHRSZWYuY3VycmVudCkpIHtcbiAgICAgICAgICAgIG5ld1RvcCA9IE1hdGgubWluKG5ld1RvcCwgbWF4U2Nyb2xsSGVpZ2h0UmVmLmN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1RvcCA9IE1hdGgubWF4KG5ld1RvcCwgMCk7XG4gICAgICAgIHJldHVybiBuZXdUb3A7XG4gICAgfVxuICAgIGNvbnN0IGlzU2Nyb2xsQXRUb3AgPSBvZmZzZXRUb3AgPD0gMDtcbiAgICBjb25zdCBpc1Njcm9sbEF0Qm90dG9tID0gb2Zmc2V0VG9wID49IG1heFNjcm9sbEhlaWdodDtcbiAgICBjb25zdCBpc1Njcm9sbEF0TGVmdCA9IG9mZnNldExlZnQgPD0gMDtcbiAgICBjb25zdCBpc1Njcm9sbEF0UmlnaHQgPSAhIXNjcm9sbFdpZHRoICYmIG9mZnNldExlZnQgPj0gc2Nyb2xsV2lkdGggLSBzaXplLndpZHRoO1xuICAgIGNvbnN0IG9yaWdpblNjcm9sbCA9IHVzZU9yaWdpblNjcm9sbChpc1Njcm9sbEF0VG9wLCBpc1Njcm9sbEF0Qm90dG9tLCBpc1Njcm9sbEF0TGVmdCwgaXNTY3JvbGxBdFJpZ2h0KTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTY3JvbGwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBnZXRWaXJ0dWFsU2Nyb2xsSW5mbyA9ICgpID0+ICh7XG4gICAgICAgIHg6IGlzUlRMID8gLW9mZnNldExlZnQgOiBvZmZzZXRMZWZ0LFxuICAgICAgICB5OiBvZmZzZXRUb3AsXG4gICAgfSk7XG4gICAgY29uc3QgbGFzdFZpcnR1YWxTY3JvbGxJbmZvUmVmID0gdXNlUmVmKGdldFZpcnR1YWxTY3JvbGxJbmZvKCkpO1xuICAgIGNvbnN0IHRyaWdnZXJTY3JvbGwgPSB1c2VFdmVudENhbGxiYWNrKChwYXJhbXMpID0+IHtcbiAgICAgICAgaWYgKG9uVmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgY29uc3QgbmV4dEluZm8gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGdldFZpcnR1YWxTY3JvbGxJbmZvKCkpLCBwYXJhbXMpO1xuICAgICAgICAgICAgLy8gVHJpZ2dlciB3aGVuIG9mZnNldCBjaGFuZ2VkXG4gICAgICAgICAgICBpZiAobGFzdFZpcnR1YWxTY3JvbGxJbmZvUmVmLmN1cnJlbnQueCAhPT0gbmV4dEluZm8ueCB8fFxuICAgICAgICAgICAgICAgIGxhc3RWaXJ0dWFsU2Nyb2xsSW5mb1JlZi5jdXJyZW50LnkgIT09IG5leHRJbmZvLnkpIHtcbiAgICAgICAgICAgICAgICBvblZpcnR1YWxTY3JvbGwobmV4dEluZm8pO1xuICAgICAgICAgICAgICAgIGxhc3RWaXJ0dWFsU2Nyb2xsSW5mb1JlZi5jdXJyZW50ID0gbmV4dEluZm87XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBmdW5jdGlvbiBvblNjcm9sbEJhcihuZXdTY3JvbGxPZmZzZXQsIGhvcml6b250YWwpIHtcbiAgICAgICAgY29uc3QgbmV3T2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0O1xuICAgICAgICBpZiAoaG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgZmx1c2hTeW5jKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRPZmZzZXRMZWZ0KG5ld09mZnNldCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRyaWdnZXJTY3JvbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN5bmNTY3JvbGxUb3AobmV3T2Zmc2V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBXaGVuIGRhdGEgc2l6ZSByZWR1Y2UuIEl0IG1heSB0cmlnZ2VyIG5hdGl2ZSBzY3JvbGwgZXZlbnQgYmFjayB0byBmaXQgc2Nyb2xsIHBvc2l0aW9uXG4gICAgZnVuY3Rpb24gb25GYWxsYmFja1Njcm9sbChlKSB7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wOiBuZXdTY3JvbGxUb3AgfSA9IGUuY3VycmVudFRhcmdldDtcbiAgICAgICAgaWYgKG5ld1Njcm9sbFRvcCAhPT0gb2Zmc2V0VG9wKSB7XG4gICAgICAgICAgICAvLyBgc3luY1Njcm9sbFRvcGAgY2FsbHMgYG9uU2Nyb2xsYCBpdHNlbGYg4oCUIGRvbid0IGFsc28gZmlyZSBpdCBoZXJlLCBvclxuICAgICAgICAgICAgLy8gZmFsbGJhY2sgKG5vbi12aXJ0dWFsKSBtb2RlIHdvdWxkIG5vdGlmeSB0aGUgY29uc3VtZXIgdHdpY2UgcGVyIGV2ZW50LlxuICAgICAgICAgICAgc3luY1Njcm9sbFRvcChuZXdTY3JvbGxUb3ApO1xuICAgICAgICB9XG4gICAgICAgIHRyaWdnZXJTY3JvbGwoKTtcbiAgICB9XG4gICAgY29uc3Qga2VlcEluSG9yaXpvbnRhbFJhbmdlID0gKG5leHRPZmZzZXRMZWZ0KSA9PiB7XG4gICAgICAgIGxldCB0bXBPZmZzZXRMZWZ0ID0gbmV4dE9mZnNldExlZnQ7XG4gICAgICAgIGNvbnN0IG1heCA9IHNjcm9sbFdpZHRoID8gc2Nyb2xsV2lkdGggLSBzaXplLndpZHRoIDogMDtcbiAgICAgICAgdG1wT2Zmc2V0TGVmdCA9IE1hdGgubWF4KHRtcE9mZnNldExlZnQsIDApO1xuICAgICAgICB0bXBPZmZzZXRMZWZ0ID0gTWF0aC5taW4odG1wT2Zmc2V0TGVmdCwgbWF4KTtcbiAgICAgICAgcmV0dXJuIHRtcE9mZnNldExlZnQ7XG4gICAgfTtcbiAgICBjb25zdCBvbldoZWVsRGVsdGEgPSB1c2VFdmVudENhbGxiYWNrKChvZmZzZXRYWSwgZnJvbUhvcml6b250YWwpID0+IHtcbiAgICAgICAgaWYgKGZyb21Ib3Jpem9udGFsKSB7XG4gICAgICAgICAgICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldE9mZnNldExlZnQoKGxlZnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dE9mZnNldExlZnQgPSBsZWZ0ICsgKGlzUlRMID8gLW9mZnNldFhZIDogb2Zmc2V0WFkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2VlcEluSG9yaXpvbnRhbFJhbmdlKG5leHRPZmZzZXRMZWZ0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdHJpZ2dlclNjcm9sbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3luY1Njcm9sbFRvcCgodG9wKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VG9wID0gdG9wICsgb2Zmc2V0WFk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1RvcDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gU2luY2UgdGhpcyBhZGRlZCBpbiBnbG9iYWwsc2hvdWxkIHVzZSByZWYgdG8ga2VlcCB1cGRhdGVcbiAgICBjb25zdCBbb25SYXdXaGVlbCwgb25GaXJlRm94U2Nyb2xsXSA9IHVzZUZyYW1lV2hlZWwodXNlVmlydHVhbCwgaXNTY3JvbGxBdFRvcCwgaXNTY3JvbGxBdEJvdHRvbSwgaXNTY3JvbGxBdExlZnQsIGlzU2Nyb2xsQXRSaWdodCwgISFzY3JvbGxXaWR0aCwgb25XaGVlbERlbHRhKTtcbiAgICAvLyBNb2JpbGUgdG91Y2ggbW92ZVxuICAgIHVzZU1vYmlsZVRvdWNoTW92ZSh1c2VWaXJ0dWFsLCBjb21wb25lbnRSZWYsIChpc0hvcml6b250YWwsIGRlbHRhLCBzbW9vdGhPZmZzZXQsIGUpID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBlO1xuICAgICAgICBpZiAob3JpZ2luU2Nyb2xsKGlzSG9yaXpvbnRhbCwgZGVsdGEsIHNtb290aE9mZnNldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaXggbmVzdCBMaXN0IHRyaWdnZXIgVG91Y2hNb3ZlIGV2ZW50XG4gICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50Ll92aXJ0dWFsSGFuZGxlZCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQuX3ZpcnR1YWxIYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uUmF3V2hlZWwoe1xuICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0KCkgeyB9LFxuICAgICAgICAgICAgICAgIGRlbHRhWDogaXNIb3Jpem9udGFsID8gZGVsdGEgOiAwLFxuICAgICAgICAgICAgICAgIGRlbHRhWTogaXNIb3Jpem9udGFsID8gMCA6IGRlbHRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgLy8gTW91c2VEb3duIGRyYWcgZm9yIHNjcm9sbFxuICAgIHVzZVNjcm9sbERyYWcoaW5WaXJ0dWFsLCBjb21wb25lbnRSZWYsIChvZmZzZXQpID0+IHtcbiAgICAgICAgc3luY1Njcm9sbFRvcCgodG9wKSA9PiB0b3AgKyBvZmZzZXQpO1xuICAgIH0pO1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIC8vIEZpcmVmb3ggb25seVxuICAgICAgICBmdW5jdGlvbiBvbk1vek1vdXNlUGl4ZWxTY3JvbGwoZSkge1xuICAgICAgICAgICAgLy8gc2Nyb2xsaW5nIGF0IHRvcC9ib3R0b20gbGltaXRcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGluZ1VwQXRUb3AgPSBpc1Njcm9sbEF0VG9wICYmIGUuZGV0YWlsIDwgMDtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGluZ0Rvd25BdEJvdHRvbSA9IGlzU2Nyb2xsQXRCb3R0b20gJiYgZS5kZXRhaWwgPiAwO1xuICAgICAgICAgICAgaWYgKHVzZVZpcnR1YWwgJiYgIXNjcm9sbGluZ1VwQXRUb3AgJiYgIXNjcm9sbGluZ0Rvd25BdEJvdHRvbSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRFbGUgPSBjb21wb25lbnRSZWYuY3VycmVudDtcbiAgICAgICAgY29tcG9uZW50RWxlLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25SYXdXaGVlbCwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICAgICAgY29tcG9uZW50RWxlLmFkZEV2ZW50TGlzdGVuZXIoJ0RPTU1vdXNlU2Nyb2xsJywgb25GaXJlRm94U2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICAgIGNvbXBvbmVudEVsZS5hZGRFdmVudExpc3RlbmVyKCdNb3pNb3VzZVBpeGVsU2Nyb2xsJywgb25Nb3pNb3VzZVBpeGVsU2Nyb2xsLCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29tcG9uZW50RWxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25SYXdXaGVlbCk7XG4gICAgICAgICAgICBjb21wb25lbnRFbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NTW91c2VTY3JvbGwnLCBvbkZpcmVGb3hTY3JvbGwpO1xuICAgICAgICAgICAgY29tcG9uZW50RWxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ01vek1vdXNlUGl4ZWxTY3JvbGwnLCBvbk1vek1vdXNlUGl4ZWxTY3JvbGwpO1xuICAgICAgICB9O1xuICAgIH0sIFt1c2VWaXJ0dWFsLCBpc1Njcm9sbEF0VG9wLCBpc1Njcm9sbEF0Qm90dG9tXSk7XG4gICAgLy8gU3luYyBzY3JvbGwgbGVmdFxuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxXaWR0aCkge1xuICAgICAgICAgICAgY29uc3QgbmV3T2Zmc2V0TGVmdCA9IGtlZXBJbkhvcml6b250YWxSYW5nZShvZmZzZXRMZWZ0KTtcbiAgICAgICAgICAgIHNldE9mZnNldExlZnQobmV3T2Zmc2V0TGVmdCk7XG4gICAgICAgICAgICB0cmlnZ2VyU2Nyb2xsKHsgeDogbmV3T2Zmc2V0TGVmdCB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtzaXplLndpZHRoLCBzY3JvbGxXaWR0aF0pO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZWYgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGRlbGF5SGlkZVNjcm9sbEJhciA9ICgpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9hID0gdmVydGljYWxTY3JvbGxCYXJSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlbGF5SGlkZGVuKCk7XG4gICAgICAgIChfYiA9IGhvcml6b250YWxTY3JvbGxCYXJSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmRlbGF5SGlkZGVuKCk7XG4gICAgfTtcbiAgICBjb25zdCBzY3JvbGxUbyA9IHVzZVNjcm9sbFRvKGNvbXBvbmVudFJlZiwgbWVyZ2VkRGF0YSwgaGVpZ2h0cywgaXRlbUhlaWdodCwgZ2V0S2V5LCAoKSA9PiBjb2xsZWN0SGVpZ2h0KHRydWUpLCBzeW5jU2Nyb2xsVG9wLCBkZWxheUhpZGVTY3JvbGxCYXIpO1xuICAgIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgICBuYXRpdmVFbGVtZW50OiBjb250YWluZXJSZWYuY3VycmVudCxcbiAgICAgICAgZ2V0U2Nyb2xsSW5mbzogZ2V0VmlydHVhbFNjcm9sbEluZm8sXG4gICAgICAgIHNjcm9sbFRvOiAoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICBmdW5jdGlvbiBpc1Bvc1Njcm9sbChhcmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnICYmIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmICgnbGVmdCcgaW4gYXJnIHx8ICd0b3AnIGluIGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNQb3NTY3JvbGwoY29uZmlnKSkge1xuICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBYXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5sZWZ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0T2Zmc2V0TGVmdChrZWVwSW5Ib3Jpem9udGFsUmFuZ2UoY29uZmlnLmxlZnQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU2Nyb2xsIFlcbiAgICAgICAgICAgICAgICBzY3JvbGxUbyhjb25maWcudG9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjcm9sbFRvKGNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSkpO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEVmZmVjdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8qKiBXZSBuZWVkIHRvbGQgb3V0c2lkZSB0aGF0IHNvbWUgbGlzdCBub3QgcmVuZGVyZWQgKi9cbiAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAob25WaXNpYmxlQ2hhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJMaXN0ID0gbWVyZ2VkRGF0YS5zbGljZShzdGFydCwgZW5kICsgMSk7XG4gICAgICAgICAgICBvblZpc2libGVDaGFuZ2UocmVuZGVyTGlzdCwgbWVyZ2VkRGF0YSk7XG4gICAgICAgIH1cbiAgICB9LCBbc3RhcnQsIGVuZCwgbWVyZ2VkRGF0YV0pO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEV4dHJhID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGdldFNpemUgPSB1c2VHZXRTaXplKG1lcmdlZERhdGEsIGdldEtleSwgaGVpZ2h0cywgaXRlbUhlaWdodCk7XG4gICAgY29uc3QgZXh0cmFDb250ZW50ID0gZXh0cmFSZW5kZXIgPT09IG51bGwgfHwgZXh0cmFSZW5kZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4dHJhUmVuZGVyKHtcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGVuZCxcbiAgICAgICAgdmlydHVhbDogaW5WaXJ0dWFsLFxuICAgICAgICBvZmZzZXRYOiBvZmZzZXRMZWZ0LFxuICAgICAgICBvZmZzZXRZOiBmaWxsZXJPZmZzZXQsXG4gICAgICAgIHJ0bDogaXNSVEwsXG4gICAgICAgIGdldFNpemUsXG4gICAgfSk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVuZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgbGlzdENoaWxkcmVuID0gdXNlQ2hpbGRyZW4obWVyZ2VkRGF0YSwgc3RhcnQsIGVuZCwgc2Nyb2xsV2lkdGgsIG9mZnNldExlZnQsIHNldEluc3RhbmNlUmVmLCBjaGlsZHJlbiwgc2hhcmVkQ29uZmlnKTtcbiAgICBsZXQgY29tcG9uZW50U3R5bGUgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGhlaWdodCkge1xuICAgICAgICBjb21wb25lbnRTdHlsZSA9IE9iamVjdC5hc3NpZ24oeyBbZnVsbEhlaWdodCA/ICdoZWlnaHQnIDogJ21heEhlaWdodCddOiBoZWlnaHQgfSwgU2Nyb2xsU3R5bGUpO1xuICAgICAgICBpZiAodXNlVmlydHVhbCkge1xuICAgICAgICAgICAgY29tcG9uZW50U3R5bGUub3ZlcmZsb3dZID0gJ2hpZGRlbic7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRTdHlsZS5vdmVyZmxvd1ggPSAnaGlkZGVuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzY3JvbGxNb3ZpbmcpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRTdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lclByb3BzID0ge307XG4gICAgaWYgKGlzUlRMKSB7XG4gICAgICAgIGNvbnRhaW5lclByb3BzLmRpciA9ICdydGwnO1xuICAgIH1cbiAgICByZXR1cm4gKF9qc3hzKFwiZGl2XCIsIE9iamVjdC5hc3NpZ24oeyByZWY6IGNvbnRhaW5lclJlZiwgc3R5bGU6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgc3R5bGUpLCB7IHBvc2l0aW9uOiAncmVsYXRpdmUnIH0pLCBjbGFzc05hbWU6IG1lcmdlZENsYXNzTmFtZSB9LCBjb250YWluZXJQcm9wcywgcmVzdFByb3BzLCB7IGNoaWxkcmVuOiBbX2pzeChSZXNpemVPYnNlcnZlciwgeyBvblJlc2l6ZTogb25Ib2xkZXJSZXNpemUsIGNoaWxkcmVuOiBfanN4KENvbXBvbmVudCwgeyBjbGFzc05hbWU6IGAke3ByZWZpeENsc30taG9sZGVyYCwgc3R5bGU6IGNvbXBvbmVudFN0eWxlLCByZWY6IGNvbXBvbmVudFJlZiwgb25TY3JvbGw6IG9uRmFsbGJhY2tTY3JvbGwsIG9uTW91c2VFbnRlcjogZGVsYXlIaWRlU2Nyb2xsQmFyLCBjaGlsZHJlbjogX2pzeChGaWxsZXIsIHsgcHJlZml4Q2xzOiBwcmVmaXhDbHMsIGhlaWdodDogc2Nyb2xsSGVpZ2h0LCBvZmZzZXRYOiBvZmZzZXRMZWZ0LCBvZmZzZXRZOiBmaWxsZXJPZmZzZXQsIHNjcm9sbFdpZHRoOiBzY3JvbGxXaWR0aCwgb25Jbm5lclJlc2l6ZTogY29sbGVjdEhlaWdodCwgcmVmOiBmaWxsZXJJbm5lclJlZiwgaW5uZXJQcm9wczogaW5uZXJQcm9wcywgcnRsOiBpc1JUTCwgZXh0cmE6IGV4dHJhQ29udGVudCwgY2hpbGRyZW46IGxpc3RDaGlsZHJlbiB9KSB9KSB9KSwgaW5WaXJ0dWFsICYmIHNjcm9sbEhlaWdodCA+IGhlaWdodCAmJiAoX2pzeChTY3JvbGxCYXIsIHsgcmVmOiB2ZXJ0aWNhbFNjcm9sbEJhclJlZiwgcHJlZml4Q2xzOiBwcmVmaXhDbHMsIHNjcm9sbE9mZnNldDogb2Zmc2V0VG9wLCBzY3JvbGxSYW5nZTogc2Nyb2xsSGVpZ2h0LCBydGw6IGlzUlRMLCBvblNjcm9sbDogb25TY3JvbGxCYXIsIG9uU3RhcnRNb3ZlOiBvblNjcm9sbGJhclN0YXJ0TW92ZSwgb25TdG9wTW92ZTogb25TY3JvbGxiYXJTdG9wTW92ZSwgc3BpblNpemU6IHZlcnRpY2FsU2Nyb2xsQmFyU3BpblNpemUsIGNvbnRhaW5lclNpemU6IHNpemUuaGVpZ2h0LCBzdHlsZTogc3R5bGVzID09PSBudWxsIHx8IHN0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGVzLnZlcnRpY2FsU2Nyb2xsQmFyLCB0aHVtYlN0eWxlOiBzdHlsZXMgPT09IG51bGwgfHwgc3R5bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdHlsZXMudmVydGljYWxTY3JvbGxCYXJUaHVtYiwgc2hvd1Njcm9sbEJhcjogc2hvd1Njcm9sbEJhciB9KSksIGluVmlydHVhbCAmJiBzY3JvbGxXaWR0aCA+IHNpemUud2lkdGggJiYgKF9qc3goU2Nyb2xsQmFyLCB7IHJlZjogaG9yaXpvbnRhbFNjcm9sbEJhclJlZiwgcHJlZml4Q2xzOiBwcmVmaXhDbHMsIHNjcm9sbE9mZnNldDogb2Zmc2V0TGVmdCwgc2Nyb2xsUmFuZ2U6IHNjcm9sbFdpZHRoLCBydGw6IGlzUlRMLCBvblNjcm9sbDogb25TY3JvbGxCYXIsIG9uU3RhcnRNb3ZlOiBvblNjcm9sbGJhclN0YXJ0TW92ZSwgb25TdG9wTW92ZTogb25TY3JvbGxiYXJTdG9wTW92ZSwgc3BpblNpemU6IGhvcml6b250YWxTY3JvbGxCYXJTcGluU2l6ZSwgY29udGFpbmVyU2l6ZTogc2l6ZS53aWR0aCwgaG9yaXpvbnRhbDogdHJ1ZSwgc3R5bGU6IHN0eWxlcyA9PT0gbnVsbCB8fCBzdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlcy5ob3Jpem9udGFsU2Nyb2xsQmFyLCB0aHVtYlN0eWxlOiBzdHlsZXMgPT09IG51bGwgfHwgc3R5bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdHlsZXMuaG9yaXpvbnRhbFNjcm9sbEJhclRodW1iLCBzaG93U2Nyb2xsQmFyOiBzaG93U2Nyb2xsQmFyIH0pKV0gfSkpKTtcbn1cbmNvbnN0IFZpcnR1YWxMaXN0QmFzZSA9IFJlYWN0LmZvcndhcmRSZWYoUmF3TGlzdCk7XG5WaXJ0dWFsTGlzdEJhc2UuZGlzcGxheU5hbWUgPSBWSVJUVUFMX0xJU1RfQ09NUE9ORU5UX05BTUU7XG5jb25zdCBWaXJ0dWFsTGlzdCA9IFJlYWN0Lm1lbW8oVmlydHVhbExpc3RCYXNlKTtcbmV4cG9ydCBkZWZhdWx0IFZpcnR1YWxMaXN0OyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|