valtech-components 2.0.712 → 2.0.714
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/esm2022/lib/components/organisms/cards-carousel/cards-carousel.component.mjs +63 -16
- package/esm2022/lib/components/organisms/cards-carousel/types.mjs +1 -1
- package/esm2022/lib/components/templates/simple/simple.component.mjs +7 -9
- package/esm2022/lib/services/auth/auth.service.mjs +33 -17
- package/esm2022/lib/services/content/content-types/blog.mjs +275 -0
- package/esm2022/lib/services/content/content-types/documentation.mjs +303 -0
- package/esm2022/lib/services/content/content-types/news.mjs +277 -0
- package/esm2022/lib/services/content/index.mjs +51 -0
- package/esm2022/lib/services/content/transformer.mjs +265 -0
- package/esm2022/lib/services/content/types.mjs +41 -0
- package/esm2022/lib/services/firebase/firestore-collection.mjs +4 -5
- package/esm2022/lib/services/firebase/firestore.service.mjs +23 -9
- package/esm2022/lib/services/firebase/notifications.service.mjs +23 -18
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +2 -14
- package/fesm2022/valtech-components.mjs +9559 -10275
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/bottom-nav/bottom-nav.component.d.ts +1 -1
- package/lib/components/organisms/cards-carousel/cards-carousel.component.d.ts +12 -6
- package/lib/components/organisms/cards-carousel/types.d.ts +32 -3
- package/lib/services/content/content-types/blog.d.ts +148 -0
- package/lib/services/content/content-types/documentation.d.ts +183 -0
- package/lib/services/content/content-types/news.d.ts +162 -0
- package/lib/services/content/index.d.ts +49 -0
- package/lib/services/content/transformer.d.ts +96 -0
- package/lib/services/content/types.d.ts +220 -0
- package/lib/services/firebase/firestore-collection.d.ts +2 -2
- package/lib/services/firebase/firestore.service.d.ts +5 -0
- package/lib/services/firebase/notifications.service.d.ts +3 -2
- package/lib/version.d.ts +1 -1
- package/package.json +5 -5
- package/public-api.d.ts +1 -11
- package/esm2022/lib/components/molecules/participant-card/participant-card.component.mjs +0 -514
- package/esm2022/lib/components/molecules/participant-card/types.mjs +0 -21
- package/esm2022/lib/components/molecules/raffle-status-card/raffle-status-card.component.mjs +0 -476
- package/esm2022/lib/components/molecules/raffle-status-card/types.mjs +0 -23
- package/esm2022/lib/components/molecules/recap-card/recap-card.component.mjs +0 -78
- package/esm2022/lib/components/molecules/recap-card/types.mjs +0 -2
- package/esm2022/lib/components/molecules/ticket-grid/ticket-grid.component.mjs +0 -489
- package/esm2022/lib/components/molecules/ticket-grid/types.mjs +0 -11
- package/esm2022/lib/components/molecules/winner-display/types.mjs +0 -9
- package/esm2022/lib/components/molecules/winner-display/winner-display.component.mjs +0 -359
- package/esm2022/lib/components/templates/layout/layout.component.mjs +0 -19
- package/lib/components/molecules/participant-card/participant-card.component.d.ts +0 -34
- package/lib/components/molecules/participant-card/types.d.ts +0 -132
- package/lib/components/molecules/raffle-status-card/raffle-status-card.component.d.ts +0 -21
- package/lib/components/molecules/raffle-status-card/types.d.ts +0 -108
- package/lib/components/molecules/recap-card/recap-card.component.d.ts +0 -36
- package/lib/components/molecules/recap-card/types.d.ts +0 -30
- package/lib/components/molecules/ticket-grid/ticket-grid.component.d.ts +0 -40
- package/lib/components/molecules/ticket-grid/types.d.ts +0 -122
- package/lib/components/molecules/winner-display/types.d.ts +0 -103
- package/lib/components/molecules/winner-display/winner-display.component.d.ts +0 -36
- package/lib/components/templates/layout/layout.component.d.ts +0 -5
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content Types System
|
|
3
|
+
*
|
|
4
|
+
* This module provides a content abstraction layer that transforms
|
|
5
|
+
* structured content documents (blog posts, documentation, news articles)
|
|
6
|
+
* into ArticleMetadata for rendering with val-article component.
|
|
7
|
+
*/
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// TYPE GUARDS
|
|
10
|
+
// =============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* Type guard to check if a block is a heading
|
|
13
|
+
*/
|
|
14
|
+
export function isHeadingBlock(block) {
|
|
15
|
+
return block.type === 'heading';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Type guard to check if a block is a paragraph
|
|
19
|
+
*/
|
|
20
|
+
export function isParagraphBlock(block) {
|
|
21
|
+
return block.type === 'paragraph';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Type guard to check if a block is a code block
|
|
25
|
+
*/
|
|
26
|
+
export function isCodeBlock(block) {
|
|
27
|
+
return block.type === 'code';
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Type guard to check if a block is a list
|
|
31
|
+
*/
|
|
32
|
+
export function isListBlock(block) {
|
|
33
|
+
return block.type === 'list';
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Type guard to check if a block is a callout
|
|
37
|
+
*/
|
|
38
|
+
export function isCalloutBlock(block) {
|
|
39
|
+
return block.type === 'callout';
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2NvbnRlbnQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBd09ILGdGQUFnRjtBQUNoRixjQUFjO0FBQ2QsZ0ZBQWdGO0FBRWhGOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFtQjtJQUNoRCxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFtQjtJQUNsRCxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBbUI7SUFDN0MsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztBQUMvQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQW1CO0lBQzdDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUM7QUFDL0IsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFtQjtJQUNoRCxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRlbnQgVHlwZXMgU3lzdGVtXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjb250ZW50IGFic3RyYWN0aW9uIGxheWVyIHRoYXQgdHJhbnNmb3Jtc1xuICogc3RydWN0dXJlZCBjb250ZW50IGRvY3VtZW50cyAoYmxvZyBwb3N0cywgZG9jdW1lbnRhdGlvbiwgbmV3cyBhcnRpY2xlcylcbiAqIGludG8gQXJ0aWNsZU1ldGFkYXRhIGZvciByZW5kZXJpbmcgd2l0aCB2YWwtYXJ0aWNsZSBjb21wb25lbnQuXG4gKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEFVVEhPUiAmIE1FVEFcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQXV0aG9yIGluZm9ybWF0aW9uIGZvciBjb250ZW50IGRvY3VtZW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRBdXRob3Ige1xuICAvKiogQXV0aG9yJ3MgZGlzcGxheSBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFVSTCB0byBhdXRob3IncyBhdmF0YXIgaW1hZ2UgKi9cbiAgYXZhdGFyPzogc3RyaW5nO1xuICAvKiogQXV0aG9yJ3Mgcm9sZSBvciB0aXRsZSAqL1xuICByb2xlPzogc3RyaW5nO1xuICAvKiogTGluayB0byBhdXRob3IncyBwcm9maWxlICovXG4gIHByb2ZpbGVVcmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29tbW9uIG1ldGFkYXRhIGZvciBhbGwgY29udGVudCBkb2N1bWVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250ZW50TWV0YSB7XG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIFVSTC1mcmllbmRseSBzbHVnICovXG4gIHNsdWc/OiBzdHJpbmc7XG4gIC8qKiBDcmVhdGlvbiBkYXRlICovXG4gIGNyZWF0ZWRBdD86IERhdGUgfCBzdHJpbmc7XG4gIC8qKiBMYXN0IHVwZGF0ZSBkYXRlICovXG4gIHVwZGF0ZWRBdD86IERhdGUgfCBzdHJpbmc7XG4gIC8qKiBQdWJsaWNhdGlvbiBkYXRlICovXG4gIHB1Ymxpc2hlZEF0PzogRGF0ZSB8IHN0cmluZztcbiAgLyoqIENvbnRlbnQgYXV0aG9yICovXG4gIGF1dGhvcj86IENvbnRlbnRBdXRob3I7XG4gIC8qKiBUYWdzIGZvciBjYXRlZ29yaXphdGlvbiAqL1xuICB0YWdzPzogc3RyaW5nW107XG4gIC8qKiBQcmltYXJ5IGNhdGVnb3J5ICovXG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICAvKiogQ29udGVudCBsb2NhbGUgKGUuZy4sICdlcycsICdlbicpICovXG4gIGxvY2FsZT86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTlRFTlQgQkxPQ0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEhlYWRpbmcgYmxvY2sgLSByZW5kZXJzIGFzIHRpdGxlIG9yIHN1YnRpdGxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGluZ0Jsb2NrIHtcbiAgdHlwZTogJ2hlYWRpbmcnO1xuICAvKiogSGVhZGluZyBsZXZlbDogMSA9IHRpdGxlLCAyLTMgPSBzdWJ0aXRsZSAqL1xuICBsZXZlbDogMSB8IDIgfCAzO1xuICAvKiogSGVhZGluZyB0ZXh0ICovXG4gIHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhZ3JhcGggYmxvY2sgLSByZW5kZXJzIGFzIHRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhZ3JhcGhCbG9jayB7XG4gIHR5cGU6ICdwYXJhZ3JhcGgnO1xuICAvKiogUGFyYWdyYXBoIHRleHQgY29udGVudCAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBBcHBseSBlbXBoYXNpcyBzdHlsaW5nICovXG4gIGVtcGhhc2lzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBRdW90ZSBibG9jayAtIHJlbmRlcnMgYXMgYmxvY2txdW90ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RlQmxvY2sge1xuICB0eXBlOiAncXVvdGUnO1xuICAvKiogUXVvdGUgdGV4dCAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBRdW90ZSBhdXRob3IgbmFtZSAqL1xuICBhdXRob3I/OiBzdHJpbmc7XG4gIC8qKiBRdW90ZSBzb3VyY2UgKi9cbiAgc291cmNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvZGUgYmxvY2sgLSByZW5kZXJzIGFzIHN5bnRheC1oaWdobGlnaHRlZCBjb2RlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJsb2NrIHtcbiAgdHlwZTogJ2NvZGUnO1xuICAvKiogQ29kZSBjb250ZW50ICovXG4gIGNvZGU6IHN0cmluZztcbiAgLyoqIFByb2dyYW1taW5nIGxhbmd1YWdlIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nICovXG4gIGxhbmd1YWdlPzogc3RyaW5nO1xuICAvKiogQ29kZSBibG9jayB0aXRsZS9maWxlbmFtZSAqL1xuICB0aXRsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBMaXN0IGJsb2NrIC0gcmVuZGVycyBhcyBvcmRlcmVkLCB1bm9yZGVyZWQsIG9yIGNoZWNrbGlzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RCbG9jayB7XG4gIHR5cGU6ICdsaXN0JztcbiAgLyoqIExpc3QgaXRlbXMgKHNpbXBsZSBzdHJpbmdzKSAqL1xuICBpdGVtczogc3RyaW5nW107XG4gIC8qKiBSZW5kZXIgYXMgbnVtYmVyZWQgbGlzdCAqL1xuICBvcmRlcmVkPzogYm9vbGVhbjtcbiAgLyoqIFJlbmRlciBhcyBjaGVja2xpc3Qgd2l0aCBjaGVja21hcmtzICovXG4gIGNoZWNrbGlzdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW1hZ2UgYmxvY2sgLSByZW5kZXJzIGFzIGltYWdlIHdpdGggb3B0aW9uYWwgY2FwdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlQmxvY2sge1xuICB0eXBlOiAnaW1hZ2UnO1xuICAvKiogSW1hZ2Ugc291cmNlIFVSTCAqL1xuICBzcmM6IHN0cmluZztcbiAgLyoqIEFsdCB0ZXh0IGZvciBhY2Nlc3NpYmlsaXR5ICovXG4gIGFsdDogc3RyaW5nO1xuICAvKiogSW1hZ2UgY2FwdGlvbiAqL1xuICBjYXB0aW9uPzogc3RyaW5nO1xuICAvKiogSW1hZ2UgYWxpZ25tZW50ICovXG4gIGFsaWdubWVudD86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0Jztcbn1cblxuLyoqXG4gKiBDYWxsb3V0IGJsb2NrIC0gcmVuZGVycyBhcyBoaWdobGlnaHRlZCBub3RlL3dhcm5pbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWxsb3V0QmxvY2sge1xuICB0eXBlOiAnY2FsbG91dCc7XG4gIC8qKiBDYWxsb3V0IHRleHQgY29udGVudCAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBDYWxsb3V0IHZhcmlhbnQgZGV0ZXJtaW5lcyBzdHlsaW5nICovXG4gIHZhcmlhbnQ6ICdpbmZvJyB8ICd3YXJuaW5nJyB8ICdzdWNjZXNzJyB8ICdlcnJvcic7XG4gIC8qKiBPcHRpb25hbCB0aXRsZS9wcmVmaXggKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGl2aWRlciBibG9jayAtIHJlbmRlcnMgYXMgc2VwYXJhdG9yIGxpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXZpZGVyQmxvY2sge1xuICB0eXBlOiAnZGl2aWRlcic7XG4gIC8qKiBEaXZpZGVyIHN0eWxlICovXG4gIHN0eWxlPzogJ2xpbmUnIHwgJ2RvdHMnIHwgJ3NwYWNlJztcbn1cblxuLyoqXG4gKiBCdXR0b24gYmxvY2sgLSByZW5kZXJzIGFzIGNhbGwtdG8tYWN0aW9uIGJ1dHRvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1dHRvbkJsb2NrIHtcbiAgdHlwZTogJ2J1dHRvbic7XG4gIC8qKiBCdXR0b24gdGV4dCAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBMaW5rIFVSTCAoZm9yIG5hdmlnYXRpb24pICovXG4gIGhyZWY/OiBzdHJpbmc7XG4gIC8qKiBBY3Rpb24gaWRlbnRpZmllciAoZm9yIGV2ZW50IGhhbmRsaW5nKSAqL1xuICBhY3Rpb24/OiBzdHJpbmc7XG4gIC8qKiBCdXR0b24gY29sb3IgKi9cbiAgY29sb3I/OiAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdzdWNjZXNzJyB8ICd3YXJuaW5nJyB8ICdkYW5nZXInO1xuICAvKiogQnV0dG9uIGFsaWdubWVudCAqL1xuICBhbGlnbm1lbnQ/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG59XG5cbi8qKlxuICogQ29tbWFuZCBibG9jayAtIHJlbmRlcnMgYXMgdGVybWluYWwvQ0xJIGNvbW1hbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kQmxvY2sge1xuICB0eXBlOiAnY29tbWFuZCc7XG4gIC8qKiBDb21tYW5kIHRvIGRpc3BsYXkgKi9cbiAgY29tbWFuZDogc3RyaW5nO1xuICAvKiogU2hvdyBjb3B5IGJ1dHRvbiAqL1xuICBjb3B5YWJsZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVW5pb24gdHlwZSBvZiBhbGwgY29udGVudCBibG9ja3NcbiAqL1xuZXhwb3J0IHR5cGUgQ29udGVudEJsb2NrID1cbiAgfCBIZWFkaW5nQmxvY2tcbiAgfCBQYXJhZ3JhcGhCbG9ja1xuICB8IFF1b3RlQmxvY2tcbiAgfCBDb2RlQmxvY2tcbiAgfCBMaXN0QmxvY2tcbiAgfCBJbWFnZUJsb2NrXG4gIHwgQ2FsbG91dEJsb2NrXG4gIHwgRGl2aWRlckJsb2NrXG4gIHwgQnV0dG9uQmxvY2tcbiAgfCBDb21tYW5kQmxvY2s7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT05URU5UIERPQ1VNRU5UXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgY29udGVudCByZW5kZXJpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250ZW50Q29uZmlnIHtcbiAgLyoqIEFydGljbGUgdGhlbWUgKi9cbiAgdGhlbWU/OiAnbGlnaHQnIHwgJ2RhcmsnIHwgJ2F1dG8nO1xuICAvKiogTWF4aW11bSB3aWR0aCBvZiB0aGUgY29udGVudCBjb250YWluZXIgKi9cbiAgbWF4V2lkdGg/OiBzdHJpbmc7XG4gIC8qKiBTaG93IG1ldGFkYXRhIChhdXRob3IsIGRhdGUsIGV0Yy4pICovXG4gIHNob3dNZXRhPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgdGFibGUgb2YgY29udGVudHMgKi9cbiAgc2hvd1RhYmxlT2ZDb250ZW50cz86IGJvb2xlYW47XG4gIC8qKiBDZW50ZXIgdGhlIGNvbnRlbnQgY29udGFpbmVyICovXG4gIGNlbnRlcmVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBCYXNlIGludGVyZmFjZSBmb3IgYWxsIGNvbnRlbnQgZG9jdW1lbnRzLlxuICogR2VuZXJpYyB0eXBlIFQgcmVwcmVzZW50cyB0aGUgZG9jdW1lbnQgdHlwZSBkaXNjcmltaW5hdG9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbnRlcmZhY2UgQmxvZ1Bvc3QgZXh0ZW5kcyBDb250ZW50RG9jdW1lbnQ8J2Jsb2cnPiB7XG4gKiAgIHRpdGxlOiBzdHJpbmc7XG4gKiAgIGV4Y2VycHQ6IHN0cmluZztcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnREb2N1bWVudDxUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG4gIC8qKiBEb2N1bWVudCB0eXBlIGRpc2NyaW1pbmF0b3IgKi9cbiAgdHlwZTogVDtcbiAgLyoqIERvY3VtZW50IG1ldGFkYXRhICovXG4gIG1ldGE6IENvbnRlbnRNZXRhO1xuICAvKiogQXJyYXkgb2YgY29udGVudCBibG9ja3MgKi9cbiAgY29udGVudDogQ29udGVudEJsb2NrW107XG4gIC8qKiBSZW5kZXJpbmcgY29uZmlndXJhdGlvbiAqL1xuICBjb25maWc/OiBDb250ZW50Q29uZmlnO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRSBHVUFSRFNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIGJsb2NrIGlzIGEgaGVhZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNIZWFkaW5nQmxvY2soYmxvY2s6IENvbnRlbnRCbG9jayk6IGJsb2NrIGlzIEhlYWRpbmdCbG9jayB7XG4gIHJldHVybiBibG9jay50eXBlID09PSAnaGVhZGluZyc7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIGJsb2NrIGlzIGEgcGFyYWdyYXBoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhcmFncmFwaEJsb2NrKGJsb2NrOiBDb250ZW50QmxvY2spOiBibG9jayBpcyBQYXJhZ3JhcGhCbG9jayB7XG4gIHJldHVybiBibG9jay50eXBlID09PSAncGFyYWdyYXBoJztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgYmxvY2sgaXMgYSBjb2RlIGJsb2NrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvZGVCbG9jayhibG9jazogQ29udGVudEJsb2NrKTogYmxvY2sgaXMgQ29kZUJsb2NrIHtcbiAgcmV0dXJuIGJsb2NrLnR5cGUgPT09ICdjb2RlJztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgYmxvY2sgaXMgYSBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xpc3RCbG9jayhibG9jazogQ29udGVudEJsb2NrKTogYmxvY2sgaXMgTGlzdEJsb2NrIHtcbiAgcmV0dXJuIGJsb2NrLnR5cGUgPT09ICdsaXN0Jztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgYmxvY2sgaXMgYSBjYWxsb3V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbGxvdXRCbG9jayhibG9jazogQ29udGVudEJsb2NrKTogYmxvY2sgaXMgQ2FsbG91dEJsb2NrIHtcbiAgcmV0dXJuIGJsb2NrLnR5cGUgPT09ICdjYWxsb3V0Jztcbn1cbiJdfQ==
|
|
@@ -108,13 +108,12 @@ export class TypedCollection {
|
|
|
108
108
|
return results[0] ?? null;
|
|
109
109
|
}
|
|
110
110
|
/**
|
|
111
|
-
* Cuenta los documentos que coinciden con la query.
|
|
112
|
-
*
|
|
111
|
+
* Cuenta los documentos que coinciden con la query (server-side aggregation).
|
|
112
|
+
* No descarga documentos — usa getCountFromServer() de Firestore.
|
|
113
113
|
*/
|
|
114
114
|
async count(options) {
|
|
115
115
|
const queryOptions = this.applyDefaultFilters(options);
|
|
116
|
-
|
|
117
|
-
return results.length;
|
|
116
|
+
return this.firestore.countDocs(this.collectionPath, queryOptions);
|
|
118
117
|
}
|
|
119
118
|
/**
|
|
120
119
|
* Obtiene todos los documentos (one-time fetch sin listener).
|
|
@@ -291,4 +290,4 @@ export class TypedCollection {
|
|
|
291
290
|
return this.collectionPath;
|
|
292
291
|
}
|
|
293
292
|
}
|
|
294
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0b3JlLWNvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmVzdG9yZS1jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBb0MzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxZQUFvQixTQUEyQjtRQUEzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtJQUFHLENBQUM7SUFFbkQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUNKLGNBQXNCLEVBQ3RCLE9BQTJCO1FBRTNCLE9BQU8sSUFBSSxlQUFlLENBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekUsQ0FBQzsrR0FmVSwwQkFBMEI7bUhBQTFCLDBCQUEwQixjQURiLE1BQU07OzRGQUNuQiwwQkFBMEI7a0JBRHRDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQW1CbEM7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUcxQixZQUNVLFNBQTJCLEVBQzNCLGNBQXNCLEVBQzlCLFVBQTZCLEVBQUU7UUFGdkIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFHOUIsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLEdBQUcsT0FBTztTQUNYLENBQUM7SUFDSixDQUFDO0lBRUQsOEVBQThFO0lBQzlFLG9CQUFvQjtJQUNwQiw4RUFBOEU7SUFFOUU7O09BRUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQVU7UUFDdEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBc0I7UUFDakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQXFCO1FBQy9CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUF5QztRQUN0RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFxQyxDQUFDO1FBQzNGLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQXNCO1FBQ25DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUM1QyxHQUFHLE9BQU87WUFDVixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUMsQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNuRixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBc0I7UUFDaEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNuRixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBc0I7UUFDckMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsMkJBQTJCO0lBQzNCLDhFQUE4RTtJQUU5RTs7T0FFRztJQUNILEtBQUssQ0FBQyxFQUFVO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxPQUFzQjtRQUM3QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLE9BQXFCO1FBQzlCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsOEVBQThFO0lBQzlFLFlBQVk7SUFDWiw4RUFBOEU7SUFFOUU7O09BRUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQStDO1FBQzFELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQVUsRUFBRSxJQUFtQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBVSxFQUFFLElBQTBDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBVTtRQUNyQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRTtnQkFDMUQsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO2FBQ0csQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFhLEVBQUUsSUFBMEM7UUFDekUsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRTdCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxDQUFDLHdCQUF3QjtRQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksV0FBVyxFQUFFLENBQUM7WUFDakQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pDLEtBQUssTUFBTSxFQUFFLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ3ZCLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQStCLENBQUMsQ0FBQztnQkFDaEYsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBYTtRQUM3QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFN0IsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNqRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUM7WUFDNUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDakMsS0FBSyxNQUFNLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDdkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBVTtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUU7WUFDMUQsU0FBUyxFQUFFLElBQUk7U0FDUyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxrQkFBa0I7SUFDbEIsOEVBQThFO0lBRTlFOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxhQUFhLENBQ1gsUUFBZ0IsRUFDaEIsaUJBQXlCO1FBRXpCLE1BQU0sT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSxRQUFRLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUUxRSxPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBSSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQzlELE1BQU0sRUFBRSxDQUFDLE9BQXNCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFJLE9BQU8sRUFBRSxPQUFPLENBQUM7WUFDL0UsS0FBSyxFQUFFLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBSSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2hFLFFBQVEsRUFBRSxDQUFDLE9BQXNCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUksT0FBTyxFQUFFLE9BQU8sQ0FBQztZQUMzRixNQUFNLEVBQUUsQ0FBQyxJQUErQyxFQUFFLEVBQUUsQ0FDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUksT0FBTyxFQUFFLElBQUksQ0FBQztZQUN6QyxNQUFNLEVBQUUsQ0FBQyxFQUFVLEVBQUUsSUFBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUksT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7WUFDeEYsTUFBTSxFQUFFLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1NBQzlELENBQUM7SUFDSixDQUFDO0lBRUQsOEVBQThFO0lBQzlFLG1CQUFtQjtJQUNuQiw4RUFBOEU7SUFFOUU7O09BRUc7SUFDSyxtQkFBbUIsQ0FBQyxPQUFzQjtRQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM3QixPQUFPLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUVELDhDQUE4QztRQUM5QyxNQUFNLFdBQVcsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFakYsT0FBTztZQUNMLEdBQUcsT0FBTztZQUNWLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQztTQUNoRCxDQUFDO0lBQ0osQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxhQUFhO0lBQ2IsOEVBQThFO0lBRTlFOztPQUVHO0lBQ0gsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGaXJlc3RvcmUgQ29sbGVjdGlvbiBGYWN0b3J5XG4gKlxuICogUGF0csOzbiBmYWN0b3J5IHBhcmEgY3JlYXIgaW5zdGFuY2lhcyBkZSBjb2xlY2Npw7NuIHRpcGFkYXMuXG4gKiBSZWVtcGxhemEgbGEgY2xhc2UgYWJzdHJhY3RhIHBhcmEgZXZpdGFyIHByb2JsZW1hcyBjb24gaW5qZWN0KCkgZW4gY2xhc2VzIG5vLWluamVjdGFibGUuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGaXJlc3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi9maXJlc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBGaXJlc3RvcmVEb2N1bWVudCwgUGFnaW5hdGVkUmVzdWx0LCBRdWVyeU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBPcGNpb25lcyBkZSBjb25maWd1cmFjacOzbiBwYXJhIHVuYSBjb2xlY2Npw7NuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFNpIHRydWUsIHVzYSBzb2Z0IGRlbGV0ZSAobWFyY2EgZGVsZXRlZEF0IGVuIGx1Z2FyIGRlIGVsaW1pbmFyKS5cbiAgICogRGVmYXVsdDogZmFsc2VcbiAgICovXG4gIHNvZnREZWxldGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTaSB0cnVlLCBtYW5lamEgYXV0b23DoXRpY2FtZW50ZSBjcmVhdGVkQXQvdXBkYXRlZEF0LlxuICAgKiBEZWZhdWx0OiB0cnVlXG4gICAqL1xuICB0aW1lc3RhbXBzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZWZlcmVuY2lhIGEgdW5hIHN1Yi1jb2xlY2Npw7NuIHRpcGFkYS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJDb2xsZWN0aW9uUmVmPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4ge1xuICBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPFQgfCBudWxsPjtcbiAgZ2V0QWxsKG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBQcm9taXNlPFRbXT47XG4gIHdhdGNoKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQgfCBudWxsPjtcbiAgd2F0Y2hBbGwob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8VFtdPjtcbiAgY3JlYXRlKGRhdGE6IE9taXQ8VCwgJ2lkJyB8ICdjcmVhdGVkQXQnIHwgJ3VwZGF0ZWRBdCc+KTogUHJvbWlzZTxUPjtcbiAgdXBkYXRlKGlkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8VD4pOiBQcm9taXNlPHZvaWQ+O1xuICBkZWxldGUoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogRmFjdG9yeSBwYXJhIGNyZWFyIGluc3RhbmNpYXMgZGUgY29sZWNjacOzbiB0aXBhZGFzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuICogZXhwb3J0IGNsYXNzIFVzZXJzU2VydmljZSB7XG4gKiAgIHByaXZhdGUgdXNlcnMgPSBpbmplY3QoRmlyZXN0b3JlQ29sbGVjdGlvbkZhY3RvcnkpLmNyZWF0ZTxVc2VyPigndXNlcnMnKTtcbiAqXG4gKiAgIGdldEFsbCA9ICgpID0+IHRoaXMudXNlcnMuZ2V0QWxsKCk7XG4gKiAgIGdldEJ5SWQgPSAoaWQ6IHN0cmluZykgPT4gdGhpcy51c2Vycy5nZXRCeUlkKGlkKTtcbiAqICAgY3JlYXRlID0gKGRhdGE6IE9taXQ8VXNlciwgJ2lkJz4pID0+IHRoaXMudXNlcnMuY3JlYXRlKGRhdGEpO1xuICpcbiAqICAgLy8gTcOpdG9kb3MgcGVyc29uYWxpemFkb3NcbiAqICAgYXN5bmMgZ2V0QWN0aXZlVXNlcnMoKTogUHJvbWlzZTxVc2VyW10+IHtcbiAqICAgICByZXR1cm4gdGhpcy51c2Vycy5xdWVyeSh7XG4gKiAgICAgICB3aGVyZTogW3sgZmllbGQ6ICdhY3RpdmUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHRydWUgfV1cbiAqICAgICB9KTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRmlyZXN0b3JlQ29sbGVjdGlvbkZhY3Rvcnkge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZpcmVzdG9yZTogRmlyZXN0b3JlU2VydmljZSkge31cblxuICAvKipcbiAgICogQ3JlYSB1bmEgaW5zdGFuY2lhIGRlIGNvbGVjY2nDs24gdGlwYWRhLlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs24gZW4gRmlyZXN0b3JlXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3BjaW9uZXMgZGUgY29uZmlndXJhY2nDs25cbiAgICogQHJldHVybnMgSW5zdGFuY2lhIGRlIFR5cGVkQ29sbGVjdGlvblxuICAgKi9cbiAgY3JlYXRlPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQ29sbGVjdGlvbk9wdGlvbnNcbiAgKTogVHlwZWRDb2xsZWN0aW9uPFQ+IHtcbiAgICByZXR1cm4gbmV3IFR5cGVkQ29sbGVjdGlvbjxUPih0aGlzLmZpcmVzdG9yZSwgY29sbGVjdGlvblBhdGgsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICogQ29sZWNjacOzbiB0aXBhZGEgY29uIG3DqXRvZG9zIENSVUQuXG4gKlxuICogTk8gdXNhIGluamVjdCgpIC0gcmVjaWJlIEZpcmVzdG9yZVNlcnZpY2UgcG9yIGNvbnN0cnVjdG9yLlxuICogRXN0byBldml0YSBlbCBlcnJvciBORzAyMDMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUeXBlZENvbGxlY3Rpb248VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmaXJlc3RvcmU6IEZpcmVzdG9yZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zID0ge31cbiAgKSB7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgc29mdERlbGV0ZTogZmFsc2UsXG4gICAgICB0aW1lc3RhbXBzOiB0cnVlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExFQ1RVUkFTIE9ORS1USU1FXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHVuIGRvY3VtZW50byBwb3IgSUQuXG4gICAqL1xuICBhc3luYyBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLmdldERvYzxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSB0b2RvcyBsb3MgZG9jdW1lbnRvcyBkZSBsYSBjb2xlY2Npw7NuLlxuICAgKi9cbiAgYXN5bmMgZ2V0QWxsKG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IHF1ZXJ5T3B0aW9ucyA9IHRoaXMuYXBwbHlEZWZhdWx0RmlsdGVycyhvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuZ2V0RG9jczxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBxdWVyeU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVqZWN1dGEgdW5hIHF1ZXJ5IHBlcnNvbmFsaXphZGEuXG4gICAqL1xuICBhc3luYyBxdWVyeShvcHRpb25zOiBRdWVyeU9wdGlvbnMpOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IHF1ZXJ5T3B0aW9ucyA9IHRoaXMuYXBwbHlEZWZhdWx0RmlsdGVycyhvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuZ2V0RG9jczxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBxdWVyeU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZG9jdW1lbnRvcyBjb24gcGFnaW5hY2nDs24uXG4gICAqL1xuICBhc3luYyBwYWdpbmF0ZShvcHRpb25zOiBRdWVyeU9wdGlvbnMgJiB7IGxpbWl0OiBudW1iZXIgfSk6IFByb21pc2U8UGFnaW5hdGVkUmVzdWx0PFQ+PiB7XG4gICAgY29uc3QgcXVlcnlPcHRpb25zID0gdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzKG9wdGlvbnMpIGFzIFF1ZXJ5T3B0aW9ucyAmIHsgbGltaXQ6IG51bWJlciB9O1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5nZXRQYWdpbmF0ZWQ8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgcXVlcnlPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIHByaW1lciBkb2N1bWVudG8gcXVlIGNvaW5jaWRhIGNvbiBsYSBxdWVyeS5cbiAgICovXG4gIGFzeW5jIGdldEZpcnN0KG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gICAgY29uc3QgcXVlcnlPcHRpb25zID0gdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBsaW1pdDogMSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5maXJlc3RvcmUuZ2V0RG9jczxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBxdWVyeU9wdGlvbnMpO1xuICAgIHJldHVybiByZXN1bHRzWzBdID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ3VlbnRhIGxvcyBkb2N1bWVudG9zIHF1ZSBjb2luY2lkZW4gY29uIGxhIHF1ZXJ5LlxuICAgKiBOb3RhOiBFc3RvIGNhcmdhIHRvZG9zIGxvcyBkb2N1bWVudG9zLCB1c2FyIGNvbiBjdWlkYWRvIGVuIGNvbGVjY2lvbmVzIGdyYW5kZXMuXG4gICAqL1xuICBhc3luYyBjb3VudChvcHRpb25zPzogUXVlcnlPcHRpb25zKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBxdWVyeU9wdGlvbnMgPSB0aGlzLmFwcGx5RGVmYXVsdEZpbHRlcnMob3B0aW9ucyk7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZmlyZXN0b3JlLmdldERvY3M8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgcXVlcnlPcHRpb25zKTtcbiAgICByZXR1cm4gcmVzdWx0cy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSB0b2RvcyBsb3MgZG9jdW1lbnRvcyAob25lLXRpbWUgZmV0Y2ggc2luIGxpc3RlbmVyKS5cbiAgICogQSBkaWZlcmVuY2lhIGRlIHdhdGNoQWxsKCksIG5vIG1hbnRpZW5lIHN1YnNjcmlwY2lvbmVzIGFjdGl2YXMuXG4gICAqL1xuICBhc3luYyBnZXRBbGxPbmNlKG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IHF1ZXJ5T3B0aW9ucyA9IHRoaXMuYXBwbHlEZWZhdWx0RmlsdGVycyhvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuZ2V0RG9jczxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBxdWVyeU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuIGRvY3VtZW50byBleGlzdGUuXG4gICAqL1xuICBhc3luYyBleGlzdHMoaWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5leGlzdHModGhpcy5jb2xsZWN0aW9uUGF0aCwgaWQpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNVQlNDUklQQ0lPTkVTIFJFQUwtVElNRVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogU3VzY3JpYmUgYSBjYW1iaW9zIGRlIHVuIGRvY3VtZW50by5cbiAgICovXG4gIHdhdGNoKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLmRvY0NoYW5nZXM8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGEgY2FtYmlvcyBkZSBsYSBjb2xlY2Npw7NuLlxuICAgKi9cbiAgd2F0Y2hBbGwob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgY29uc3QgcXVlcnlPcHRpb25zID0gdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5jb2xsZWN0aW9uQ2hhbmdlczxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBxdWVyeU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGEgdW5hIHF1ZXJ5IHBlcnNvbmFsaXphZGEuXG4gICAqL1xuICB3YXRjaFF1ZXJ5KG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgY29uc3QgcXVlcnlPcHRpb25zID0gdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5jb2xsZWN0aW9uQ2hhbmdlczxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBxdWVyeU9wdGlvbnMpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVTQ1JJVFVSQVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ3JlYSB1biBudWV2byBkb2N1bWVudG8gY29uIElEIGF1dG8tZ2VuZXJhZG8uXG4gICAqL1xuICBhc3luYyBjcmVhdGUoZGF0YTogT21pdDxULCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAndXBkYXRlZEF0Jz4pOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuYWRkRG9jPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWEgdW4gZG9jdW1lbnRvIGNvbiBJRCBlc3BlY8OtZmljby5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVdpdGhJZChpZDogc3RyaW5nLCBkYXRhOiBPbWl0PFQsICdpZCc+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLnNldERvYzxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBpZCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsaXphIGNhbXBvcyBkZSB1biBkb2N1bWVudG8uXG4gICAqL1xuICBhc3luYyB1cGRhdGUoaWQ6IHN0cmluZywgZGF0YTogUGFydGlhbDxPbWl0PFQsICdpZCcgfCAnY3JlYXRlZEF0Jz4+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLnVwZGF0ZURvYzxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBpZCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSB1biBkb2N1bWVudG8uXG4gICAqIFNpIHNvZnREZWxldGUgZXN0w6EgaGFiaWxpdGFkbywgbWFyY2EgY29tbyBlbGltaW5hZG8gZW4gbHVnYXIgZGUgYm9ycmFyLlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNvZnREZWxldGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS51cGRhdGVEb2M8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgaWQsIHtcbiAgICAgICAgZGVsZXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgfSBhcyB1bmtub3duIGFzIFBhcnRpYWw8VD4pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuZGVsZXRlRG9jKHRoaXMuY29sbGVjdGlvblBhdGgsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgbcO6bHRpcGxlcyBkb2N1bWVudG9zIGVuIHVuYSBzb2xhIG9wZXJhY2nDs24gYXTDs21pY2EuXG4gICAqL1xuICBhc3luYyBiYXRjaFVwZGF0ZShpZHM6IHN0cmluZ1tdLCBkYXRhOiBQYXJ0aWFsPE9taXQ8VCwgJ2lkJyB8ICdjcmVhdGVkQXQnPj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgQkFUQ0hfTElNSVQgPSA1MDA7IC8vIEZpcmVzdG9yZSBiYXRjaCBsaW1pdFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSArPSBCQVRDSF9MSU1JVCkge1xuICAgICAgY29uc3QgY2h1bmsgPSBpZHMuc2xpY2UoaSwgaSArIEJBVENIX0xJTUlUKTtcbiAgICAgIGF3YWl0IHRoaXMuZmlyZXN0b3JlLmJhdGNoKGJhdGNoID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBjaHVuaykge1xuICAgICAgICAgIGJhdGNoLnVwZGF0ZShgJHt0aGlzLmNvbGxlY3Rpb25QYXRofS8ke2lkfWAsIGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSBtw7psdGlwbGVzIGRvY3VtZW50b3MgZW4gdW5hIHNvbGEgb3BlcmFjacOzbiBhdMOzbWljYS5cbiAgICovXG4gIGFzeW5jIGJhdGNoRGVsZXRlKGlkczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgQkFUQ0hfTElNSVQgPSA1MDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpICs9IEJBVENIX0xJTUlUKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGlkcy5zbGljZShpLCBpICsgQkFUQ0hfTElNSVQpO1xuICAgICAgYXdhaXQgdGhpcy5maXJlc3RvcmUuYmF0Y2goYmF0Y2ggPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGNodW5rKSB7XG4gICAgICAgICAgYmF0Y2guZGVsZXRlKGAke3RoaXMuY29sbGVjdGlvblBhdGh9LyR7aWR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0YXVyYSB1biBkb2N1bWVudG8gc29mdC1kZWxldGVkLlxuICAgKi9cbiAgYXN5bmMgcmVzdG9yZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc29mdERlbGV0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb2Z0IGRlbGV0ZSBubyBlc3TDoSBoYWJpbGl0YWRvIHBhcmEgZXN0YSBjb2xlY2Npw7NuJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS51cGRhdGVEb2M8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgaWQsIHtcbiAgICAgIGRlbGV0ZWRBdDogbnVsbCxcbiAgICB9IGFzIHVua25vd24gYXMgUGFydGlhbDxUPik7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU1VCLUNPTEVDQ0lPTkVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHVuYSByZWZlcmVuY2lhIGEgdW5hIHN1Yi1jb2xlY2Npw7NuLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIEVuIFVzZXJzU2VydmljZVxuICAgKiBnZXRVc2VyRG9jdW1lbnRzKHVzZXJJZDogc3RyaW5nKSB7XG4gICAqICAgcmV0dXJuIHRoaXMudXNlcnMuc3ViY29sbGVjdGlvbjxEb2N1bWVudD4odXNlcklkLCAnZG9jdW1lbnRzJyk7XG4gICAqIH1cbiAgICpcbiAgICogLy8gVXNvXG4gICAqIGNvbnN0IGRvY3MgPSBhd2FpdCB1c2Vycy5nZXRVc2VyRG9jdW1lbnRzKCd1c2VyMTIzJykuZ2V0QWxsKCk7XG4gICAqIGBgYFxuICAgKi9cbiAgc3ViY29sbGVjdGlvbjxTIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIHBhcmVudElkOiBzdHJpbmcsXG4gICAgc3ViY29sbGVjdGlvbk5hbWU6IHN0cmluZ1xuICApOiBTdWJDb2xsZWN0aW9uUmVmPFM+IHtcbiAgICBjb25zdCBzdWJQYXRoID0gYCR7dGhpcy5jb2xsZWN0aW9uUGF0aH0vJHtwYXJlbnRJZH0vJHtzdWJjb2xsZWN0aW9uTmFtZX1gO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdldEJ5SWQ6IChpZDogc3RyaW5nKSA9PiB0aGlzLmZpcmVzdG9yZS5nZXREb2M8Uz4oc3ViUGF0aCwgaWQpLFxuICAgICAgZ2V0QWxsOiAob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucykgPT4gdGhpcy5maXJlc3RvcmUuZ2V0RG9jczxTPihzdWJQYXRoLCBvcHRpb25zKSxcbiAgICAgIHdhdGNoOiAoaWQ6IHN0cmluZykgPT4gdGhpcy5maXJlc3RvcmUuZG9jQ2hhbmdlczxTPihzdWJQYXRoLCBpZCksXG4gICAgICB3YXRjaEFsbDogKG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpID0+IHRoaXMuZmlyZXN0b3JlLmNvbGxlY3Rpb25DaGFuZ2VzPFM+KHN1YlBhdGgsIG9wdGlvbnMpLFxuICAgICAgY3JlYXRlOiAoZGF0YTogT21pdDxTLCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAndXBkYXRlZEF0Jz4pID0+XG4gICAgICAgIHRoaXMuZmlyZXN0b3JlLmFkZERvYzxTPihzdWJQYXRoLCBkYXRhKSxcbiAgICAgIHVwZGF0ZTogKGlkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8Uz4pID0+IHRoaXMuZmlyZXN0b3JlLnVwZGF0ZURvYzxTPihzdWJQYXRoLCBpZCwgZGF0YSksXG4gICAgICBkZWxldGU6IChpZDogc3RyaW5nKSA9PiB0aGlzLmZpcmVzdG9yZS5kZWxldGVEb2Moc3ViUGF0aCwgaWQpLFxuICAgIH07XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTcOJVE9ET1MgUFJJVkFET1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwbGljYSBmaWx0cm9zIHBvciBkZWZlY3RvIGEgbGFzIHF1ZXJpZXMuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5RGVmYXVsdEZpbHRlcnMob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFF1ZXJ5T3B0aW9ucyB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc29mdERlbGV0ZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMgPz8ge307XG4gICAgfVxuXG4gICAgLy8gRXhjbHVpciBkb2N1bWVudG9zIHNvZnQtZGVsZXRlZCBwb3IgZGVmZWN0b1xuICAgIGNvbnN0IHdoZXJlQ2xhdXNlID0geyBmaWVsZDogJ2RlbGV0ZWRBdCcsIG9wZXJhdG9yOiAnPT0nIGFzIGNvbnN0LCB2YWx1ZTogbnVsbCB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB3aGVyZTogWy4uLihvcHRpb25zPy53aGVyZSA/PyBbXSksIHdoZXJlQ2xhdXNlXSxcbiAgICB9O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVUSUxJREFERVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdlbmVyYSB1biBudWV2byBJRCBzaW4gY3JlYXIgZWwgZG9jdW1lbnRvLlxuICAgKi9cbiAgZ2VuZXJhdGVJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5nZW5lcmF0ZUlkKHRoaXMuY29sbGVjdGlvblBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbGEgcnV0YSBkZSBsYSBjb2xlY2Npw7NuLlxuICAgKi9cbiAgZ2V0UGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25QYXRoO1xuICB9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIEZpcmVzdG9yZUNvbGxlY3Rpb25GYWN0b3J5LmNyZWF0ZSgpIGluc3RlYWQuXG4gKiBUeXBlIGFsaWFzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IHR5cGUgRmlyZXN0b3JlQ29sbGVjdGlvbjxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+ID0gVHlwZWRDb2xsZWN0aW9uPFQ+O1xuIl19
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0b3JlLWNvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmVzdG9yZS1jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBb0MzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxZQUFvQixTQUEyQjtRQUEzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtJQUFHLENBQUM7SUFFbkQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUNKLGNBQXNCLEVBQ3RCLE9BQTJCO1FBRTNCLE9BQU8sSUFBSSxlQUFlLENBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekUsQ0FBQzsrR0FmVSwwQkFBMEI7bUhBQTFCLDBCQUEwQixjQURiLE1BQU07OzRGQUNuQiwwQkFBMEI7a0JBRHRDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQW1CbEM7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUcxQixZQUNVLFNBQTJCLEVBQzNCLGNBQXNCLEVBQzlCLFVBQTZCLEVBQUU7UUFGdkIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFHOUIsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLEdBQUcsT0FBTztTQUNYLENBQUM7SUFDSixDQUFDO0lBRUQsOEVBQThFO0lBQzlFLG9CQUFvQjtJQUNwQiw4RUFBOEU7SUFFOUU7O09BRUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQVU7UUFDdEIsT0FBTyxJQUFJLENBQUMs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QUVHO0lBQ0gsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpcmVzdG9yZSBDb2xsZWN0aW9uIEZhY3RvcnlcbiAqXG4gKiBQYXRyw7NuIGZhY3RvcnkgcGFyYSBjcmVhciBpbnN0YW5jaWFzIGRlIGNvbGVjY2nDs24gdGlwYWRhcy5cbiAqIFJlZW1wbGF6YSBsYSBjbGFzZSBhYnN0cmFjdGEgcGFyYSBldml0YXIgcHJvYmxlbWFzIGNvbiBpbmplY3QoKSBlbiBjbGFzZXMgbm8taW5qZWN0YWJsZS5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZpcmVzdG9yZVNlcnZpY2UgfSBmcm9tICcuL2ZpcmVzdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpcmVzdG9yZURvY3VtZW50LCBQYWdpbmF0ZWRSZXN1bHQsIFF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIE9wY2lvbmVzIGRlIGNvbmZpZ3VyYWNpw7NuIHBhcmEgdW5hIGNvbGVjY2nDs24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogU2kgdHJ1ZSwgdXNhIHNvZnQgZGVsZXRlIChtYXJjYSBkZWxldGVkQXQgZW4gbHVnYXIgZGUgZWxpbWluYXIpLlxuICAgKiBEZWZhdWx0OiBmYWxzZVxuICAgKi9cbiAgc29mdERlbGV0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNpIHRydWUsIG1hbmVqYSBhdXRvbcOhdGljYW1lbnRlIGNyZWF0ZWRBdC91cGRhdGVkQXQuXG4gICAqIERlZmF1bHQ6IHRydWVcbiAgICovXG4gIHRpbWVzdGFtcHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlZmVyZW5jaWEgYSB1bmEgc3ViLWNvbGVjY2nDs24gdGlwYWRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1YkNvbGxlY3Rpb25SZWY8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PiB7XG4gIGdldEJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+O1xuICBnZXRBbGwob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8VFtdPjtcbiAgd2F0Y2goaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8VCB8IG51bGw+O1xuICB3YXRjaEFsbChvcHRpb25zPzogUXVlcnlPcHRpb25zKTogT2JzZXJ2YWJsZTxUW10+O1xuICBjcmVhdGUoZGF0YTogT21pdDxULCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAndXBkYXRlZEF0Jz4pOiBQcm9taXNlPFQ+O1xuICB1cGRhdGUoaWQ6IHN0cmluZywgZGF0YTogUGFydGlhbDxUPik6IFByb21pc2U8dm9pZD47XG4gIGRlbGV0ZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBGYWN0b3J5IHBhcmEgY3JlYXIgaW5zdGFuY2lhcyBkZSBjb2xlY2Npw7NuIHRpcGFkYXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG4gKiBleHBvcnQgY2xhc3MgVXNlcnNTZXJ2aWNlIHtcbiAqICAgcHJpdmF0ZSB1c2VycyA9IGluamVjdChGaXJlc3RvcmVDb2xsZWN0aW9uRmFjdG9yeSkuY3JlYXRlPFVzZXI+KCd1c2VycycpO1xuICpcbiAqICAgZ2V0QWxsID0gKCkgPT4gdGhpcy51c2Vycy5nZXRBbGwoKTtcbiAqICAgZ2V0QnlJZCA9IChpZDogc3RyaW5nKSA9PiB0aGlzLnVzZXJzLmdldEJ5SWQoaWQpO1xuICogICBjcmVhdGUgPSAoZGF0YTogT21pdDxVc2VyLCAnaWQnPikgPT4gdGhpcy51c2Vycy5jcmVhdGUoZGF0YSk7XG4gKlxuICogICAvLyBNw6l0b2RvcyBwZXJzb25hbGl6YWRvc1xuICogICBhc3luYyBnZXRBY3RpdmVVc2VycygpOiBQcm9taXNlPFVzZXJbXT4ge1xuICogICAgIHJldHVybiB0aGlzLnVzZXJzLnF1ZXJ5KHtcbiAqICAgICAgIHdoZXJlOiBbeyBmaWVsZDogJ2FjdGl2ZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogdHJ1ZSB9XVxuICogICAgIH0pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBGaXJlc3RvcmVDb2xsZWN0aW9uRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmlyZXN0b3JlOiBGaXJlc3RvcmVTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhIHVuYSBpbnN0YW5jaWEgZGUgY29sZWNjacOzbiB0aXBhZGEuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzbiBlbiBGaXJlc3RvcmVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcGNpb25lcyBkZSBjb25maWd1cmFjacOzblxuICAgKiBAcmV0dXJucyBJbnN0YW5jaWEgZGUgVHlwZWRDb2xsZWN0aW9uXG4gICAqL1xuICBjcmVhdGU8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBDb2xsZWN0aW9uT3B0aW9uc1xuICApOiBUeXBlZENvbGxlY3Rpb248VD4ge1xuICAgIHJldHVybiBuZXcgVHlwZWRDb2xsZWN0aW9uPFQ+KHRoaXMuZmlyZXN0b3JlLCBjb2xsZWN0aW9uUGF0aCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb2xlY2Npw7NuIHRpcGFkYSBjb24gbcOpdG9kb3MgQ1JVRC5cbiAqXG4gKiBOTyB1c2EgaW5qZWN0KCkgLSByZWNpYmUgRmlyZXN0b3JlU2VydmljZSBwb3IgY29uc3RydWN0b3IuXG4gKiBFc3RvIGV2aXRhIGVsIGVycm9yIE5HMDIwMy5cbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVkQ29sbGVjdGlvbjxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZpcmVzdG9yZTogRmlyZXN0b3JlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnMgPSB7fVxuICApIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICBzb2Z0RGVsZXRlOiBmYWxzZSxcbiAgICAgIHRpbWVzdGFtcHM6IHRydWUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVDVFVSQVMgT05FLVRJTUVcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9idGllbmUgdW4gZG9jdW1lbnRvIHBvciBJRC5cbiAgICovXG4gIGFzeW5jIGdldEJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuZ2V0RG9jPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHRvZG9zIGxvcyBkb2N1bWVudG9zIGRlIGxhIGNvbGVjY2nDs24uXG4gICAqL1xuICBhc3luYyBnZXRBbGwob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8VFtdPiB7XG4gICAgY29uc3QgcXVlcnlPcHRpb25zID0gdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5nZXREb2NzPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIHF1ZXJ5T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRWplY3V0YSB1bmEgcXVlcnkgcGVyc29uYWxpemFkYS5cbiAgICovXG4gIGFzeW5jIHF1ZXJ5KG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8VFtdPiB7XG4gICAgY29uc3QgcXVlcnlPcHRpb25zID0gdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5nZXREb2NzPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIHF1ZXJ5T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBkb2N1bWVudG9zIGNvbiBwYWdpbmFjacOzbi5cbiAgICovXG4gIGFzeW5jIHBhZ2luYXRlKG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyAmIHsgbGltaXQ6IG51bWJlciB9KTogUHJvbWlzZTxQYWdpbmF0ZWRSZXN1bHQ8VD4+IHtcbiAgICBjb25zdCBxdWVyeU9wdGlvbnMgPSB0aGlzLmFwcGx5RGVmYXVsdEZpbHRlcnMob3B0aW9ucykgYXMgUXVlcnlPcHRpb25zICYgeyBsaW1pdDogbnVtYmVyIH07XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLmdldFBhZ2luYXRlZDxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBxdWVyeU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgcHJpbWVyIGRvY3VtZW50byBxdWUgY29pbmNpZGEgY29uIGxhIHF1ZXJ5LlxuICAgKi9cbiAgYXN5bmMgZ2V0Rmlyc3Qob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICBjb25zdCBxdWVyeU9wdGlvbnMgPSB0aGlzLmFwcGx5RGVmYXVsdEZpbHRlcnMoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGxpbWl0OiAxLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmZpcmVzdG9yZS5nZXREb2NzPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIHF1ZXJ5T3B0aW9ucyk7XG4gICAgcmV0dXJuIHJlc3VsdHNbMF0gPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdWVudGEgbG9zIGRvY3VtZW50b3MgcXVlIGNvaW5jaWRlbiBjb24gbGEgcXVlcnkgKHNlcnZlci1zaWRlIGFnZ3JlZ2F0aW9uKS5cbiAgICogTm8gZGVzY2FyZ2EgZG9jdW1lbnRvcyDigJQgdXNhIGdldENvdW50RnJvbVNlcnZlcigpIGRlIEZpcmVzdG9yZS5cbiAgICovXG4gIGFzeW5jIGNvdW50KG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHF1ZXJ5T3B0aW9ucyA9IHRoaXMuYXBwbHlEZWZhdWx0RmlsdGVycyhvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuY291bnREb2NzKHRoaXMuY29sbGVjdGlvblBhdGgsIHF1ZXJ5T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSB0b2RvcyBsb3MgZG9jdW1lbnRvcyAob25lLXRpbWUgZmV0Y2ggc2luIGxpc3RlbmVyKS5cbiAgICogQSBkaWZlcmVuY2lhIGRlIHdhdGNoQWxsKCksIG5vIG1hbnRpZW5lIHN1YnNjcmlwY2lvbmVzIGFjdGl2YXMuXG4gICAqL1xuICBhc3luYyBnZXRBbGxPbmNlKG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IHF1ZXJ5T3B0aW9ucyA9IHRoaXMuYXBwbHlEZWZhdWx0RmlsdGVycyhvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuZ2V0RG9jczxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBxdWVyeU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuIGRvY3VtZW50byBleGlzdGUuXG4gICAqL1xuICBhc3luYyBleGlzdHMoaWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5leGlzdHModGhpcy5jb2xsZWN0aW9uUGF0aCwgaWQpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNVQlNDUklQQ0lPTkVTIFJFQUwtVElNRVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogU3VzY3JpYmUgYSBjYW1iaW9zIGRlIHVuIGRvY3VtZW50by5cbiAgICovXG4gIHdhdGNoKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLmRvY0NoYW5nZXM8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGEgY2FtYmlvcyBkZSBsYSBjb2xlY2Npw7NuLlxuICAgKi9cbiAgd2F0Y2hBbGwob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgY29uc3QgcXVlcnlPcHRpb25zID0gdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5jb2xsZWN0aW9uQ2hhbmdlczxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBxdWVyeU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGEgdW5hIHF1ZXJ5IHBlcnNvbmFsaXphZGEuXG4gICAqL1xuICB3YXRjaFF1ZXJ5KG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgY29uc3QgcXVlcnlPcHRpb25zID0gdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5jb2xsZWN0aW9uQ2hhbmdlczxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBxdWVyeU9wdGlvbnMpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVTQ1JJVFVSQVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ3JlYSB1biBudWV2byBkb2N1bWVudG8gY29uIElEIGF1dG8tZ2VuZXJhZG8uXG4gICAqL1xuICBhc3luYyBjcmVhdGUoZGF0YTogT21pdDxULCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAndXBkYXRlZEF0Jz4pOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuYWRkRG9jPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWEgdW4gZG9jdW1lbnRvIGNvbiBJRCBlc3BlY8OtZmljby5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVdpdGhJZChpZDogc3RyaW5nLCBkYXRhOiBPbWl0PFQsICdpZCc+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLnNldERvYzxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBpZCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsaXphIGNhbXBvcyBkZSB1biBkb2N1bWVudG8uXG4gICAqL1xuICBhc3luYyB1cGRhdGUoaWQ6IHN0cmluZywgZGF0YTogUGFydGlhbDxPbWl0PFQsICdpZCcgfCAnY3JlYXRlZEF0Jz4+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLnVwZGF0ZURvYzxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBpZCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSB1biBkb2N1bWVudG8uXG4gICAqIFNpIHNvZnREZWxldGUgZXN0w6EgaGFiaWxpdGFkbywgbWFyY2EgY29tbyBlbGltaW5hZG8gZW4gbHVnYXIgZGUgYm9ycmFyLlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNvZnREZWxldGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS51cGRhdGVEb2M8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgaWQsIHtcbiAgICAgICAgZGVsZXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgfSBhcyB1bmtub3duIGFzIFBhcnRpYWw8VD4pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuZGVsZXRlRG9jKHRoaXMuY29sbGVjdGlvblBhdGgsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgbcO6bHRpcGxlcyBkb2N1bWVudG9zIGVuIHVuYSBzb2xhIG9wZXJhY2nDs24gYXTDs21pY2EuXG4gICAqL1xuICBhc3luYyBiYXRjaFVwZGF0ZShpZHM6IHN0cmluZ1tdLCBkYXRhOiBQYXJ0aWFsPE9taXQ8VCwgJ2lkJyB8ICdjcmVhdGVkQXQnPj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgQkFUQ0hfTElNSVQgPSA1MDA7IC8vIEZpcmVzdG9yZSBiYXRjaCBsaW1pdFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSArPSBCQVRDSF9MSU1JVCkge1xuICAgICAgY29uc3QgY2h1bmsgPSBpZHMuc2xpY2UoaSwgaSArIEJBVENIX0xJTUlUKTtcbiAgICAgIGF3YWl0IHRoaXMuZmlyZXN0b3JlLmJhdGNoKGJhdGNoID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBjaHVuaykge1xuICAgICAgICAgIGJhdGNoLnVwZGF0ZShgJHt0aGlzLmNvbGxlY3Rpb25QYXRofS8ke2lkfWAsIGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSBtw7psdGlwbGVzIGRvY3VtZW50b3MgZW4gdW5hIHNvbGEgb3BlcmFjacOzbiBhdMOzbWljYS5cbiAgICovXG4gIGFzeW5jIGJhdGNoRGVsZXRlKGlkczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgQkFUQ0hfTElNSVQgPSA1MDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpICs9IEJBVENIX0xJTUlUKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGlkcy5zbGljZShpLCBpICsgQkFUQ0hfTElNSVQpO1xuICAgICAgYXdhaXQgdGhpcy5maXJlc3RvcmUuYmF0Y2goYmF0Y2ggPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGNodW5rKSB7XG4gICAgICAgICAgYmF0Y2guZGVsZXRlKGAke3RoaXMuY29sbGVjdGlvblBhdGh9LyR7aWR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0YXVyYSB1biBkb2N1bWVudG8gc29mdC1kZWxldGVkLlxuICAgKi9cbiAgYXN5bmMgcmVzdG9yZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc29mdERlbGV0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb2Z0IGRlbGV0ZSBubyBlc3TDoSBoYWJpbGl0YWRvIHBhcmEgZXN0YSBjb2xlY2Npw7NuJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS51cGRhdGVEb2M8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgaWQsIHtcbiAgICAgIGRlbGV0ZWRBdDogbnVsbCxcbiAgICB9IGFzIHVua25vd24gYXMgUGFydGlhbDxUPik7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU1VCLUNPTEVDQ0lPTkVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHVuYSByZWZlcmVuY2lhIGEgdW5hIHN1Yi1jb2xlY2Npw7NuLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIEVuIFVzZXJzU2VydmljZVxuICAgKiBnZXRVc2VyRG9jdW1lbnRzKHVzZXJJZDogc3RyaW5nKSB7XG4gICAqICAgcmV0dXJuIHRoaXMudXNlcnMuc3ViY29sbGVjdGlvbjxEb2N1bWVudD4odXNlcklkLCAnZG9jdW1lbnRzJyk7XG4gICAqIH1cbiAgICpcbiAgICogLy8gVXNvXG4gICAqIGNvbnN0IGRvY3MgPSBhd2FpdCB1c2Vycy5nZXRVc2VyRG9jdW1lbnRzKCd1c2VyMTIzJykuZ2V0QWxsKCk7XG4gICAqIGBgYFxuICAgKi9cbiAgc3ViY29sbGVjdGlvbjxTIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIHBhcmVudElkOiBzdHJpbmcsXG4gICAgc3ViY29sbGVjdGlvbk5hbWU6IHN0cmluZ1xuICApOiBTdWJDb2xsZWN0aW9uUmVmPFM+IHtcbiAgICBjb25zdCBzdWJQYXRoID0gYCR7dGhpcy5jb2xsZWN0aW9uUGF0aH0vJHtwYXJlbnRJZH0vJHtzdWJjb2xsZWN0aW9uTmFtZX1gO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdldEJ5SWQ6IChpZDogc3RyaW5nKSA9PiB0aGlzLmZpcmVzdG9yZS5nZXREb2M8Uz4oc3ViUGF0aCwgaWQpLFxuICAgICAgZ2V0QWxsOiAob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucykgPT4gdGhpcy5maXJlc3RvcmUuZ2V0RG9jczxTPihzdWJQYXRoLCBvcHRpb25zKSxcbiAgICAgIHdhdGNoOiAoaWQ6IHN0cmluZykgPT4gdGhpcy5maXJlc3RvcmUuZG9jQ2hhbmdlczxTPihzdWJQYXRoLCBpZCksXG4gICAgICB3YXRjaEFsbDogKG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpID0+IHRoaXMuZmlyZXN0b3JlLmNvbGxlY3Rpb25DaGFuZ2VzPFM+KHN1YlBhdGgsIG9wdGlvbnMpLFxuICAgICAgY3JlYXRlOiAoZGF0YTogT21pdDxTLCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAndXBkYXRlZEF0Jz4pID0+XG4gICAgICAgIHRoaXMuZmlyZXN0b3JlLmFkZERvYzxTPihzdWJQYXRoLCBkYXRhKSxcbiAgICAgIHVwZGF0ZTogKGlkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8Uz4pID0+IHRoaXMuZmlyZXN0b3JlLnVwZGF0ZURvYzxTPihzdWJQYXRoLCBpZCwgZGF0YSksXG4gICAgICBkZWxldGU6IChpZDogc3RyaW5nKSA9PiB0aGlzLmZpcmVzdG9yZS5kZWxldGVEb2Moc3ViUGF0aCwgaWQpLFxuICAgIH07XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTcOJVE9ET1MgUFJJVkFET1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwbGljYSBmaWx0cm9zIHBvciBkZWZlY3RvIGEgbGFzIHF1ZXJpZXMuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5RGVmYXVsdEZpbHRlcnMob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFF1ZXJ5T3B0aW9ucyB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc29mdERlbGV0ZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMgPz8ge307XG4gICAgfVxuXG4gICAgLy8gRXhjbHVpciBkb2N1bWVudG9zIHNvZnQtZGVsZXRlZCBwb3IgZGVmZWN0b1xuICAgIGNvbnN0IHdoZXJlQ2xhdXNlID0geyBmaWVsZDogJ2RlbGV0ZWRBdCcsIG9wZXJhdG9yOiAnPT0nIGFzIGNvbnN0LCB2YWx1ZTogbnVsbCB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB3aGVyZTogWy4uLihvcHRpb25zPy53aGVyZSA/PyBbXSksIHdoZXJlQ2xhdXNlXSxcbiAgICB9O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVUSUxJREFERVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdlbmVyYSB1biBudWV2byBJRCBzaW4gY3JlYXIgZWwgZG9jdW1lbnRvLlxuICAgKi9cbiAgZ2VuZXJhdGVJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5nZW5lcmF0ZUlkKHRoaXMuY29sbGVjdGlvblBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbGEgcnV0YSBkZSBsYSBjb2xlY2Npw7NuLlxuICAgKi9cbiAgZ2V0UGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25QYXRoO1xuICB9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIEZpcmVzdG9yZUNvbGxlY3Rpb25GYWN0b3J5LmNyZWF0ZSgpIGluc3RlYWQuXG4gKiBUeXBlIGFsaWFzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IHR5cGUgRmlyZXN0b3JlQ29sbGVjdGlvbjxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+ID0gVHlwZWRDb2xsZWN0aW9uPFQ+O1xuIl19
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Soporta lecturas one-time, subscripciones real-time, paginación y queries complejas.
|
|
6
6
|
*/
|
|
7
7
|
import { inject, Injectable } from '@angular/core';
|
|
8
|
-
import { addDoc, collection, collectionData, deleteDoc, doc, docData, getDoc, getDocs, limit, orderBy, query, serverTimestamp, setDoc, startAfter, startAt, endBefore, endAt, Timestamp, updateDoc, where, writeBatch, increment, arrayUnion, arrayRemove, } from '@angular/fire/firestore';
|
|
8
|
+
import { addDoc, collection, collectionData, deleteDoc, doc, docData, getCountFromServer, getDoc, getDocs, limit, orderBy, query, serverTimestamp, setDoc, startAfter, startAt, endBefore, endAt, Timestamp, updateDoc, where, writeBatch, increment, arrayUnion, arrayRemove, } from '@angular/fire/firestore';
|
|
9
9
|
import { map } from 'rxjs';
|
|
10
10
|
import { VALTECH_FIREBASE_CONFIG } from './config';
|
|
11
11
|
import { buildPath } from './utils/path-builder';
|
|
@@ -110,7 +110,19 @@ export class FirestoreService {
|
|
|
110
110
|
const constraints = this.buildQueryConstraints(options);
|
|
111
111
|
const q = query(collectionRef, ...constraints);
|
|
112
112
|
const snapshot = await getDocs(q);
|
|
113
|
-
return snapshot.docs.map(
|
|
113
|
+
return snapshot.docs.map(doc => this.mapDocument(doc));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Cuenta documentos usando aggregation query del servidor.
|
|
117
|
+
* No descarga los documentos — mucho más eficiente para conteos y badges.
|
|
118
|
+
*/
|
|
119
|
+
async countDocs(collectionPath, options) {
|
|
120
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
121
|
+
const collectionRef = collection(this.firestore, prefixedPath);
|
|
122
|
+
const constraints = this.buildQueryConstraints(options);
|
|
123
|
+
const q = query(collectionRef, ...constraints);
|
|
124
|
+
const snapshot = await getCountFromServer(q);
|
|
125
|
+
return snapshot.data().count;
|
|
114
126
|
}
|
|
115
127
|
/**
|
|
116
128
|
* Obtiene documentos con paginación basada en cursores.
|
|
@@ -150,7 +162,7 @@ export class FirestoreService {
|
|
|
150
162
|
const resultDocs = hasMore ? docs.slice(0, -1) : docs;
|
|
151
163
|
const lastDoc = resultDocs.length > 0 ? resultDocs[resultDocs.length - 1] : null;
|
|
152
164
|
return {
|
|
153
|
-
data: resultDocs.map(
|
|
165
|
+
data: resultDocs.map(doc => this.mapDocument(doc)),
|
|
154
166
|
hasMore,
|
|
155
167
|
lastDoc,
|
|
156
168
|
};
|
|
@@ -192,7 +204,7 @@ export class FirestoreService {
|
|
|
192
204
|
docChanges(collectionPath, docId) {
|
|
193
205
|
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
194
206
|
const docRef = doc(this.firestore, prefixedPath, docId);
|
|
195
|
-
return docData(docRef, { idField: 'id' }).pipe(map(
|
|
207
|
+
return docData(docRef, { idField: 'id' }).pipe(map(data => {
|
|
196
208
|
if (!data)
|
|
197
209
|
return null;
|
|
198
210
|
return this.convertTimestamps(data);
|
|
@@ -218,7 +230,7 @@ export class FirestoreService {
|
|
|
218
230
|
const collectionRef = collection(this.firestore, prefixedPath);
|
|
219
231
|
const constraints = this.buildQueryConstraints(options);
|
|
220
232
|
const q = query(collectionRef, ...constraints);
|
|
221
|
-
return collectionData(q, { idField: 'id' }).pipe(map(
|
|
233
|
+
return collectionData(q, { idField: 'id' }).pipe(map(docs => docs.map(doc => this.convertTimestamps(doc))));
|
|
222
234
|
}
|
|
223
235
|
// ===========================================================================
|
|
224
236
|
// ESCRITURA
|
|
@@ -250,9 +262,11 @@ export class FirestoreService {
|
|
|
250
262
|
updatedAt: timestamp,
|
|
251
263
|
};
|
|
252
264
|
const docRef = await addDoc(collectionRef, docData);
|
|
253
|
-
//
|
|
254
|
-
|
|
255
|
-
|
|
265
|
+
// Retornar optimísticamente sin segundo round-trip.
|
|
266
|
+
// serverTimestamp() resuelve en el servidor; usamos Date.now() localmente
|
|
267
|
+
// para evitar un getDoc() extra. El valor real llega en la próxima lectura.
|
|
268
|
+
const now = new Date();
|
|
269
|
+
return { id: docRef.id, ...data, createdAt: now, updatedAt: now };
|
|
256
270
|
}
|
|
257
271
|
/**
|
|
258
272
|
* Crea o sobrescribe un documento con ID específico.
|
|
@@ -533,4 +547,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
533
547
|
type: Injectable,
|
|
534
548
|
args: [{ providedIn: 'root' }]
|
|
535
549
|
}], ctorParameters: () => [{ type: i1.Firestore }] });
|
|
536
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0b3JlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmVzdG9yZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUNkLFNBQVMsRUFDVCxHQUFHLEVBQ0gsT0FBTyxFQUtQLE1BQU0sRUFDTixPQUFPLEVBQ1AsS0FBSyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBRUwsZUFBZSxFQUNmLE1BQU0sRUFDTixVQUFVLEVBQ1YsT0FBTyxFQUNQLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxHQUVaLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFFakQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQUczQixZQUFvQixTQUFvQjtRQUFwQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBRmhDLFdBQU0sR0FBRyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUxQixDQUFDO0lBRTVDOzs7OztPQUtHO0lBQ0ssb0JBQW9CLENBQUMsY0FBc0I7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSztZ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SyxDQUFDLCtCQUErQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFHLENBQUM7UUFDOUIsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7K0dBdmpCVSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQURILE1BQU07OzRGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGaXJlc3RvcmUgU2VydmljZVxuICpcbiAqIFNlcnZpY2lvIGdlbsOpcmljbyBwYXJhIG9wZXJhY2lvbmVzIENSVUQgZW4gRmlyZXN0b3JlLlxuICogU29wb3J0YSBsZWN0dXJhcyBvbmUtdGltZSwgc3Vic2NyaXBjaW9uZXMgcmVhbC10aW1lLCBwYWdpbmFjacOzbiB5IHF1ZXJpZXMgY29tcGxlamFzLlxuICovXG5cbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgYWRkRG9jLFxuICBjb2xsZWN0aW9uLFxuICBjb2xsZWN0aW9uRGF0YSxcbiAgZGVsZXRlRG9jLFxuICBkb2MsXG4gIGRvY0RhdGEsXG4gIERvY3VtZW50RGF0YSxcbiAgRG9jdW1lbnRSZWZlcmVuY2UsXG4gIERvY3VtZW50U25hcHNob3QsXG4gIEZpcmVzdG9yZSxcbiAgZ2V0RG9jLFxuICBnZXREb2NzLFxuICBsaW1pdCxcbiAgb3JkZXJCeSxcbiAgcXVlcnksXG4gIFF1ZXJ5Q29uc3RyYWludCxcbiAgc2VydmVyVGltZXN0YW1wLFxuICBzZXREb2MsXG4gIHN0YXJ0QWZ0ZXIsXG4gIHN0YXJ0QXQsXG4gIGVuZEJlZm9yZSxcbiAgZW5kQXQsXG4gIFRpbWVzdGFtcCxcbiAgdXBkYXRlRG9jLFxuICB3aGVyZSxcbiAgd3JpdGVCYXRjaCxcbiAgaW5jcmVtZW50LFxuICBhcnJheVVuaW9uLFxuICBhcnJheVJlbW92ZSxcbiAgRmllbGRWYWx1ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9maXJlc3RvcmUnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFZBTFRFQ0hfRklSRUJBU0VfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgRmlyZXN0b3JlRG9jdW1lbnQsIFBhZ2luYXRlZFJlc3VsdCwgUXVlcnlPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBidWlsZFBhdGggfSBmcm9tICcuL3V0aWxzL3BhdGgtYnVpbGRlcic7XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBvcGVyYWNpb25lcyBDUlVEIGVuIEZpcmVzdG9yZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIFVzZXIgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudCB7XG4gKiAgIG5hbWU6IHN0cmluZztcbiAqICAgZW1haWw6IHN0cmluZztcbiAqICAgcm9sZTogJ2FkbWluJyB8ICd1c2VyJztcbiAqIH1cbiAqXG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIFVzZXJzQ29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBmaXJlc3RvcmUgPSBpbmplY3QoRmlyZXN0b3JlU2VydmljZSk7XG4gKlxuICogICAvLyBMZWN0dXJhIG9uZS10aW1lXG4gKiAgIGFzeW5jIGxvYWRVc2VyKGlkOiBzdHJpbmcpIHtcbiAqICAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5maXJlc3RvcmUuZ2V0RG9jPFVzZXI+KCd1c2VycycsIGlkKTtcbiAqICAgfVxuICpcbiAqICAgLy8gU3Vic2NyaXBjacOzbiByZWFsLXRpbWVcbiAqICAgdXNlcnMkID0gdGhpcy5maXJlc3RvcmUuY29sbGVjdGlvbkNoYW5nZXM8VXNlcj4oJ3VzZXJzJywge1xuICogICAgIHdoZXJlOiBbeyBmaWVsZDogJ3JvbGUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6ICdhZG1pbicgfV0sXG4gKiAgICAgb3JkZXJCeTogW3sgZmllbGQ6ICduYW1lJywgZGlyZWN0aW9uOiAnYXNjJyB9XVxuICogICB9KTtcbiAqXG4gKiAgIC8vIENyZWFyIGRvY3VtZW50b1xuICogICBhc3luYyBjcmVhdGVVc2VyKGRhdGE6IE9taXQ8VXNlciwgJ2lkJz4pIHtcbiAqICAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5maXJlc3RvcmUuYWRkRG9jPFVzZXI+KCd1c2VycycsIGRhdGEpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBGaXJlc3RvcmVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb25maWcgPSBpbmplY3QoVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmaXJlc3RvcmU6IEZpcmVzdG9yZSkge31cblxuICAvKipcbiAgICogUHJlZmlqYSBlbCBwYXRoIGRlIGNvbGVjY2nDs24gY29uIGVsIGFwcElkIHNpIGVzdMOhIGNvbmZpZ3VyYWRvLlxuICAgKiBTaSBubyBoYXkgYXBwSWQsIHJldG9ybmEgZWwgcGF0aCBzaW4gbW9kaWZpY2FyIChiYWNrd2FyZCBjb21wYXRpYmxlKS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jb25maWc/LmFwcElkKSByZXR1cm4gY29sbGVjdGlvblBhdGg7XG4gICAgcmV0dXJuIGBhcHBzLyR7dGhpcy5jb25maWcuYXBwSWR9LyR7Y29sbGVjdGlvblBhdGh9YDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRUNUVVJBUyBPTkUtVElNRSAoUHJvbWlzZSlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9idGllbmUgdW4gZG9jdW1lbnRvIHBvciBJRCAobGVjdHVyYSDDum5pY2EpLlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs25cbiAgICogQHBhcmFtIGRvY0lkIC0gSUQgZGVsIGRvY3VtZW50b1xuICAgKiBAcmV0dXJucyBEb2N1bWVudG8gbyBudWxsIHNpIG5vIGV4aXN0ZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHVzZXIgPSBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLmdldERvYzxVc2VyPigndXNlcnMnLCAnYWJjMTIzJyk7XG4gICAqIGlmICh1c2VyKSB7XG4gICAqICAgY29uc29sZS5sb2codXNlci5uYW1lKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldERvYzxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgZG9jSWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IGdldERvYyhkb2NSZWYpO1xuXG4gICAgaWYgKCFzbmFwc2hvdC5leGlzdHMoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWFwRG9jdW1lbnQ8VD4oc25hcHNob3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbcO6bHRpcGxlcyBkb2N1bWVudG9zIGNvbiBvcGNpb25lcyBkZSBxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3BjaW9uZXMgZGUgcXVlcnkgKHdoZXJlLCBvcmRlckJ5LCBsaW1pdClcbiAgICogQHJldHVybnMgQXJyYXkgZGUgZG9jdW1lbnRvc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFRvZG9zIGxvcyB1c3VhcmlvcyBhY3Rpdm9zIG9yZGVuYWRvcyBwb3Igbm9tYnJlXG4gICAqIGNvbnN0IHVzZXJzID0gYXdhaXQgZmlyZXN0b3JlU2VydmljZS5nZXREb2NzPFVzZXI+KCd1c2VycycsIHtcbiAgICogICB3aGVyZTogW3sgZmllbGQ6ICdhY3RpdmUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHRydWUgfV0sXG4gICAqICAgb3JkZXJCeTogW3sgZmllbGQ6ICduYW1lJywgZGlyZWN0aW9uOiAnYXNjJyB9XSxcbiAgICogICBsaW1pdDogNTBcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0RG9jczxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFF1ZXJ5T3B0aW9uc1xuICApOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgpO1xuICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gdGhpcy5idWlsZFF1ZXJ5Q29uc3RyYWludHMob3B0aW9ucyk7XG4gICAgY29uc3QgcSA9IHF1ZXJ5KGNvbGxlY3Rpb25SZWYsIC4uLmNvbnN0cmFpbnRzKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IGdldERvY3MocSk7XG5cbiAgICByZXR1cm4gc25hcHNob3QuZG9jcy5tYXAoKGRvYykgPT4gdGhpcy5tYXBEb2N1bWVudDxUPihkb2MpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGRvY3VtZW50b3MgY29uIHBhZ2luYWNpw7NuIGJhc2FkYSBlbiBjdXJzb3Jlcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3BjaW9uZXMgZGUgcXVlcnkgKGRlYmUgaW5jbHVpciBsaW1pdClcbiAgICogQHJldHVybnMgUmVzdWx0YWRvIHBhZ2luYWRvIGNvbiBjdXJzb3IgcGFyYSBsYSBzaWd1aWVudGUgcMOhZ2luYVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFByaW1lcmEgcMOhZ2luYVxuICAgKiBjb25zdCBwYWdlMSA9IGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UuZ2V0UGFnaW5hdGVkPFVzZXI+KCd1c2VycycsIHtcbiAgICogICBvcmRlckJ5OiBbeyBmaWVsZDogJ2NyZWF0ZWRBdCcsIGRpcmVjdGlvbjogJ2Rlc2MnIH1dLFxuICAgKiAgIGxpbWl0OiAxMFxuICAgKiB9KTtcbiAgICpcbiAgICogLy8gU2lndWllbnRlIHDDoWdpbmFcbiAgICogaWYgKHBhZ2UxLmhhc01vcmUpIHtcbiAgICogICBjb25zdCBwYWdlMiA9IGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UuZ2V0UGFnaW5hdGVkPFVzZXI+KCd1c2VycycsIHtcbiAgICogICAgIG9yZGVyQnk6IFt7IGZpZWxkOiAnY3JlYXRlZEF0JywgZGlyZWN0aW9uOiAnZGVzYycgfV0sXG4gICAqICAgICBsaW1pdDogMTAsXG4gICAqICAgICBzdGFydEFmdGVyOiBwYWdlMS5sYXN0RG9jXG4gICAqICAgfSk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBnZXRQYWdpbmF0ZWQ8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyAmIHsgbGltaXQ6IG51bWJlciB9XG4gICk6IFByb21pc2U8UGFnaW5hdGVkUmVzdWx0PFQ+PiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgY29sbGVjdGlvblJlZiA9IGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCk7XG4gICAgY29uc3QgY29uc3RyYWludHMgPSB0aGlzLmJ1aWxkUXVlcnlDb25zdHJhaW50cyhvcHRpb25zKTtcblxuICAgIC8vIFBlZGlyIHVubyBtw6FzIHBhcmEgc2FiZXIgc2kgaGF5IG3DoXMgcMOhZ2luYXNcbiAgICBjb25zdCBxID0gcXVlcnkoY29sbGVjdGlvblJlZiwgLi4uY29uc3RyYWludHMsIGxpbWl0KG9wdGlvbnMubGltaXQgKyAxKSk7XG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBnZXREb2NzKHEpO1xuXG4gICAgY29uc3QgZG9jcyA9IHNuYXBzaG90LmRvY3M7XG4gICAgY29uc3QgaGFzTW9yZSA9IGRvY3MubGVuZ3RoID4gb3B0aW9ucy5saW1pdDtcblxuICAgIC8vIFNpIGhheSBtw6FzLCByZW1vdmVyIGVsIGRvY3VtZW50byBleHRyYVxuICAgIGNvbnN0IHJlc3VsdERvY3MgPSBoYXNNb3JlID8gZG9jcy5zbGljZSgwLCAtMSkgOiBkb2NzO1xuICAgIGNvbnN0IGxhc3REb2MgPSByZXN1bHREb2NzLmxlbmd0aCA+IDAgPyByZXN1bHREb2NzW3Jlc3VsdERvY3MubGVuZ3RoIC0gMV0gOiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IHJlc3VsdERvY3MubWFwKChkb2MpID0+IHRoaXMubWFwRG9jdW1lbnQ8VD4oZG9jKSksXG4gICAgICBoYXNNb3JlLFxuICAgICAgbGFzdERvYyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuIGRvY3VtZW50byBleGlzdGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqIEByZXR1cm5zIHRydWUgc2kgZWwgZG9jdW1lbnRvIGV4aXN0ZVxuICAgKi9cbiAgYXN5bmMgZXhpc3RzKGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsIGRvY0lkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgZ2V0RG9jKGRvY1JlZik7XG4gICAgcmV0dXJuIHNuYXBzaG90LmV4aXN0cygpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNVQlNDUklQQ0lPTkVTIFJFQUwtVElNRSAoT2JzZXJ2YWJsZSlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGEgY2FtYmlvcyBkZSB1biBkb2N1bWVudG8gKHJlYWwtdGltZSkuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIGN1YW5kbyBlbCBkb2N1bWVudG8gY2FtYmlhXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRW4gZWwgY29tcG9uZW50ZVxuICAgKiB1c2VyJCA9IHRoaXMuZmlyZXN0b3JlU2VydmljZS5kb2NDaGFuZ2VzPFVzZXI+KCd1c2VycycsIHRoaXMudXNlcklkKTtcbiAgICpcbiAgICogLy8gRW4gZWwgdGVtcGxhdGVcbiAgICogQGlmICh1c2VyJCB8IGFzeW5jOyBhcyB1c2VyKSB7XG4gICAqICAgPHA+e3sgdXNlci5uYW1lIH19PC9wPlxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZG9jQ2hhbmdlczxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgZG9jSWQ6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICByZXR1cm4gZG9jRGF0YShkb2NSZWYsIHsgaWRGaWVsZDogJ2lkJyB9KS5waXBlKFxuICAgICAgbWFwKChkYXRhKSA9PiB7XG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUaW1lc3RhbXBzKGRhdGEgYXMgRG9jdW1lbnREYXRhKSBhcyBUO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGEgY2FtYmlvcyBkZSB1bmEgY29sZWNjacOzbiAocmVhbC10aW1lKS5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3BjaW9uZXMgZGUgcXVlcnlcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgY3VhbmRvIGxhIGNvbGVjY2nDs24gY2FtYmlhXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gVXN1YXJpb3MgYWN0aXZvcyBlbiB0aWVtcG8gcmVhbFxuICAgKiBhY3RpdmVVc2VycyQgPSB0aGlzLmZpcmVzdG9yZVNlcnZpY2UuY29sbGVjdGlvbkNoYW5nZXM8VXNlcj4oJ3VzZXJzJywge1xuICAgKiAgIHdoZXJlOiBbeyBmaWVsZDogJ3N0YXR1cycsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogJ29ubGluZScgfV1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgY29sbGVjdGlvbkNoYW5nZXM8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBRdWVyeU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBjb2xsZWN0aW9uUmVmID0gY29sbGVjdGlvbih0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoKTtcbiAgICBjb25zdCBjb25zdHJhaW50cyA9IHRoaXMuYnVpbGRRdWVyeUNvbnN0cmFpbnRzKG9wdGlvbnMpO1xuICAgIGNvbnN0IHEgPSBxdWVyeShjb2xsZWN0aW9uUmVmLCAuLi5jb25zdHJhaW50cyk7XG5cbiAgICByZXR1cm4gY29sbGVjdGlvbkRhdGEocSwgeyBpZEZpZWxkOiAnaWQnIH0pLnBpcGUoXG4gICAgICBtYXAoKGRvY3MpID0+IGRvY3MubWFwKChkb2MpID0+IHRoaXMuY29udmVydFRpbWVzdGFtcHMoZG9jKSBhcyBUKSlcbiAgICApO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVTQ1JJVFVSQVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQWdyZWdhIHVuIGRvY3VtZW50byBjb24gSUQgYXV0by1nZW5lcmFkby5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgZGVsIGRvY3VtZW50byAoc2luIGlkLCBjcmVhdGVkQXQsIHVwZGF0ZWRBdClcbiAgICogQHJldHVybnMgRG9jdW1lbnRvIGNyZWFkbyBjb24gc3UgSURcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBuZXdVc2VyID0gYXdhaXQgZmlyZXN0b3JlU2VydmljZS5hZGREb2M8VXNlcj4oJ3VzZXJzJywge1xuICAgKiAgIG5hbWU6ICdKb2huIERvZScsXG4gICAqICAgZW1haWw6ICdqb2huQGV4YW1wbGUuY29tJyxcbiAgICogICByb2xlOiAndXNlcidcbiAgICogfSk7XG4gICAqIGNvbnNvbGUubG9nKCdDcmVhdGVkIHVzZXIgd2l0aCBJRDonLCBuZXdVc2VyLmlkKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBhZGREb2M8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIGRhdGE6IE9taXQ8VCwgJ2lkJyB8ICdjcmVhdGVkQXQnIHwgJ3VwZGF0ZWRBdCc+XG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgpO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IHNlcnZlclRpbWVzdGFtcCgpO1xuXG4gICAgY29uc3QgZG9jRGF0YSA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCxcbiAgICAgIHVwZGF0ZWRBdDogdGltZXN0YW1wLFxuICAgIH07XG5cbiAgICBjb25zdCBkb2NSZWYgPSBhd2FpdCBhZGREb2MoY29sbGVjdGlvblJlZiwgZG9jRGF0YSk7XG5cbiAgICAvLyBPYnRlbmVyIGVsIGRvY3VtZW50byBjcmVhZG8gcGFyYSByZXRvcm5hcmxvIGNvbiB0aW1lc3RhbXBzIHJlc3VlbHRvc1xuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgZ2V0RG9jKGRvY1JlZik7XG4gICAgcmV0dXJuIHRoaXMubWFwRG9jdW1lbnQ8VD4oc25hcHNob3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWEgbyBzb2JyZXNjcmliZSB1biBkb2N1bWVudG8gY29uIElEIGVzcGVjw61maWNvLlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs25cbiAgICogQHBhcmFtIGRvY0lkIC0gSUQgZGVsIGRvY3VtZW50b1xuICAgKiBAcGFyYW0gZGF0YSAtIERhdG9zIGRlbCBkb2N1bWVudG9cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcGNpb25lcyAobWVyZ2U6IHRydWUgcGFyYSBtZXJnZSBlbiBsdWdhciBkZSBzb2JyZXNjcmliaXIpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gU29icmVzY3JpYmlyIGNvbXBsZXRhbWVudGVcbiAgICogYXdhaXQgZmlyZXN0b3JlU2VydmljZS5zZXREb2M8VXNlcj4oJ3VzZXJzJywgJ3VzZXIxMjMnLCB1c2VyRGF0YSk7XG4gICAqXG4gICAqIC8vIE1lcmdlIGNvbiBkYXRvcyBleGlzdGVudGVzXG4gICAqIGF3YWl0IGZpcmVzdG9yZVNlcnZpY2Uuc2V0RG9jPFVzZXI+KCd1c2VycycsICd1c2VyMTIzJywgeyBuYW1lOiAnTmV3IE5hbWUnIH0sIHsgbWVyZ2U6IHRydWUgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgc2V0RG9jPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICBkb2NJZDogc3RyaW5nLFxuICAgIGRhdGE6IE9taXQ8VCwgJ2lkJz4sXG4gICAgb3B0aW9ucz86IHsgbWVyZ2U/OiBib29sZWFuIH1cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBzZXJ2ZXJUaW1lc3RhbXAoKTtcblxuICAgIGNvbnN0IGRvY0RhdGEgPSB7XG4gICAgICAuLi5kYXRhLFxuICAgICAgdXBkYXRlZEF0OiB0aW1lc3RhbXAsXG4gICAgICAuLi4ob3B0aW9ucz8ubWVyZ2UgPyB7fSA6IHsgY3JlYXRlZEF0OiB0aW1lc3RhbXAgfSksXG4gICAgfTtcblxuICAgIGF3YWl0IHNldERvYyhkb2NSZWYsIGRvY0RhdGEsIHsgbWVyZ2U6IG9wdGlvbnM/Lm1lcmdlID8/IGZhbHNlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdHVhbGl6YSBjYW1wb3MgZXNwZWPDrWZpY29zIGRlIHVuIGRvY3VtZW50by5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBkb2NJZCAtIElEIGRlbCBkb2N1bWVudG9cbiAgICogQHBhcmFtIGRhdGEgLSBDYW1wb3MgYSBhY3R1YWxpemFyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgZmlyZXN0b3JlU2VydmljZS51cGRhdGVEb2M8VXNlcj4oJ3VzZXJzJywgJ3VzZXIxMjMnLCB7XG4gICAqICAgbmFtZTogJ1VwZGF0ZWQgTmFtZScsXG4gICAqICAgbGFzdExvZ2luOiBuZXcgRGF0ZSgpXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHVwZGF0ZURvYzxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgZG9jSWQ6IHN0cmluZyxcbiAgICBkYXRhOiBQYXJ0aWFsPE9taXQ8VCwgJ2lkJyB8ICdjcmVhdGVkQXQnPj5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcblxuICAgIGF3YWl0IHVwZGF0ZURvYyhkb2NSZWYsIHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICB1cGRhdGVkQXQ6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVsaW1pbmEgdW4gZG9jdW1lbnRvLlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs25cbiAgICogQHBhcmFtIGRvY0lkIC0gSUQgZGVsIGRvY3VtZW50b1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UuZGVsZXRlRG9jKCd1c2VycycsICd1c2VyMTIzJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZGVsZXRlRG9jKGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsIGRvY0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgIGF3YWl0IGRlbGV0ZURvYyhkb2NSZWYpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE9QRVJBQ0lPTkVTIEVOIExPVEVcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEVqZWN1dGEgbcO6bHRpcGxlcyBvcGVyYWNpb25lcyBkZSBlc2NyaXR1cmEgZGUgZm9ybWEgYXTDs21pY2EuXG4gICAqXG4gICAqIEBwYXJhbSBvcGVyYXRpb25zIC0gRnVuY2nDs24gcXVlIHJlY2liZSBlbCBiYXRjaCB5IGFncmVnYSBvcGVyYWNpb25lc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UuYmF0Y2goKGJhdGNoKSA9PiB7XG4gICAqICAgYmF0Y2guc2V0KCd1c2Vycy91c2VyMScsIHsgbmFtZTogJ1VzZXIgMScgfSk7XG4gICAqICAgYmF0Y2gudXBkYXRlKCd1c2Vycy91c2VyMicsIHsgc3RhdHVzOiAnaW5hY3RpdmUnIH0pO1xuICAgKiAgIGJhdGNoLmRlbGV0ZSgndXNlcnMvdXNlcjMnKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgYmF0Y2goXG4gICAgb3BlcmF0aW9uczogKGJhdGNoOiB7XG4gICAgICBzZXQ6IDxUPihwYXRoOiBzdHJpbmcsIGRhdGE6IFQpID0+IHZvaWQ7XG4gICAgICB1cGRhdGU6IDxUPihwYXRoOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8VD4pID0+IHZvaWQ7XG4gICAgICBkZWxldGU6IChwYXRoOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgfSkgPT4gdm9pZFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBiYXRjaCA9IHdyaXRlQmF0Y2godGhpcy5maXJlc3RvcmUpO1xuXG4gICAgY29uc3QgYmF0Y2hBcGkgPSB7XG4gICAgICBzZXQ6IDxUPihwYXRoOiBzdHJpbmcsIGRhdGE6IFQpID0+IHtcbiAgICAgICAgY29uc3QgW2NvbGxlY3Rpb25QYXRoLCBkb2NJZF0gPSB0aGlzLnNwbGl0UGF0aChwYXRoKTtcbiAgICAgICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgICAgIGNvbnN0IGRvY1JlZiA9IGRvYyh0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoLCBkb2NJZCk7XG4gICAgICAgIGJhdGNoLnNldChkb2NSZWYsIHtcbiAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgIGNyZWF0ZWRBdDogc2VydmVyVGltZXN0YW1wKCksXG4gICAgICAgICAgdXBkYXRlZEF0OiBzZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgICAgfSBhcyBEb2N1bWVudERhdGEpO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZTogPFQ+KHBhdGg6IHN0cmluZywgZGF0YTogUGFydGlhbDxUPikgPT4ge1xuICAgICAgICBjb25zdCBbY29sbGVjdGlvblBhdGgsIGRvY0lkXSA9IHRoaXMuc3BsaXRQYXRoKHBhdGgpO1xuICAgICAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICAgICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICAgICAgYmF0Y2gudXBkYXRlKGRvY1JlZiwge1xuICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgdXBkYXRlZEF0OiBzZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgICAgfSBhcyBEb2N1bWVudERhdGEpO1xuICAgICAgfSxcbiAgICAgIGRlbGV0ZTogKHBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBbY29sbGVjdGlvblBhdGgsIGRvY0lkXSA9IHRoaXMuc3BsaXRQYXRoKHBhdGgpO1xuICAgICAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICAgICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICAgICAgYmF0Y2guZGVsZXRlKGRvY1JlZik7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBvcGVyYXRpb25zKGJhdGNoQXBpKTtcbiAgICBhd2FpdCBiYXRjaC5jb21taXQoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVVElMSURBREVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1eWUgdW5hIHJ1dGEgYSBwYXJ0aXIgZGUgdW4gdGVtcGxhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSAtIFRlbXBsYXRlIGNvbiBwbGFjZWhvbGRlcnMge3BhcmFtfVxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVmFsb3JlcyBwYXJhIGxvcyBwbGFjZWhvbGRlcnNcbiAgICogQHJldHVybnMgUnV0YSBjb25zdHJ1aWRhXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcGF0aCA9IGZpcmVzdG9yZVNlcnZpY2UuYnVpbGRQYXRoKCd1c2Vycy97dXNlcklkfS9kb2N1bWVudHMve2RvY0lkfScsIHtcbiAgICogICB1c2VySWQ6ICd1c2VyMTIzJyxcbiAgICogICBkb2NJZDogJ2RvYzQ1NidcbiAgICogfSk7XG4gICAqIC8vID0+ICd1c2Vycy91c2VyMTIzL2RvY3VtZW50cy9kb2M0NTYnXG4gICAqIGBgYFxuICAgKi9cbiAgYnVpbGRQYXRoKHRlbXBsYXRlOiBzdHJpbmcsIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGJ1aWxkUGF0aCh0ZW1wbGF0ZSwgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmEgdW4gSUQgw7puaWNvIHBhcmEgdW4gZG9jdW1lbnRvIChzaW4gY3JlYXJsbykuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcmV0dXJucyBJRCDDum5pY28gZ2VuZXJhZG8gcG9yIEZpcmVzdG9yZVxuICAgKi9cbiAgZ2VuZXJhdGVJZChjb2xsZWN0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBjb2xsZWN0aW9uUmVmID0gY29sbGVjdGlvbih0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoKTtcbiAgICByZXR1cm4gZG9jKGNvbGxlY3Rpb25SZWYpLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgdW4gdmFsb3IgZGUgdGltZXN0YW1wIGRlbCBzZXJ2aWRvci5cbiAgICogVXNhciBlbiBjYW1wb3MgZGUgZmVjaGEgcGFyYSBxdWUgRmlyZXN0b3JlIGFzaWduZSBlbCB0aW1lc3RhbXAuXG4gICAqL1xuICBzZXJ2ZXJUaW1lc3RhbXAoKTogRmllbGRWYWx1ZSB7XG4gICAgcmV0dXJuIHNlcnZlclRpbWVzdGFtcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgdW4gdmFsb3IgcGFyYSBhZ3JlZ2FyIGVsZW1lbnRvcyBhIHVuIGFycmF5LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UudXBkYXRlRG9jKCd1c2VycycsICd1c2VyMTIzJywge1xuICAgKiAgIHRhZ3M6IGZpcmVzdG9yZVNlcnZpY2UuYXJyYXlVbmlvbignbmV3LXRhZycpXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFycmF5VW5pb24oLi4uZWxlbWVudHM6IHVua25vd25bXSk6IEZpZWxkVmFsdWUge1xuICAgIHJldHVybiBhcnJheVVuaW9uKC4uLmVsZW1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRvcm5hIHVuIHZhbG9yIHBhcmEgcmVtb3ZlciBlbGVtZW50b3MgZGUgdW4gYXJyYXkuXG4gICAqL1xuICBhcnJheVJlbW92ZSguLi5lbGVtZW50czogdW5rbm93bltdKTogRmllbGRWYWx1ZSB7XG4gICAgcmV0dXJuIGFycmF5UmVtb3ZlKC4uLmVsZW1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRvcm5hIHVuIHZhbG9yIHBhcmEgaW5jcmVtZW50YXIgdW4gY2FtcG8gbnVtw6lyaWNvLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UudXBkYXRlRG9jKCd1c2VycycsICd1c2VyMTIzJywge1xuICAgKiAgIGxvZ2luQ291bnQ6IGZpcmVzdG9yZVNlcnZpY2UuaW5jcmVtZW50KDEpXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGluY3JlbWVudChuOiBudW1iZXIpOiBGaWVsZFZhbHVlIHtcbiAgICByZXR1cm4gaW5jcmVtZW50KG4pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE3DiVRPRE9TIFBSSVZBRE9TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1eWUgbG9zIFF1ZXJ5Q29uc3RyYWludHMgYSBwYXJ0aXIgZGUgUXVlcnlPcHRpb25zXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkUXVlcnlDb25zdHJhaW50cyhvcHRpb25zPzogUXVlcnlPcHRpb25zKTogUXVlcnlDb25zdHJhaW50W10ge1xuICAgIGNvbnN0IGNvbnN0cmFpbnRzOiBRdWVyeUNvbnN0cmFpbnRbXSA9IFtdO1xuXG4gICAgaWYgKCFvcHRpb25zKSByZXR1cm4gY29uc3RyYWludHM7XG5cbiAgICAvLyBXaGVyZSBjbGF1c2VzXG4gICAgaWYgKG9wdGlvbnMud2hlcmUpIHtcbiAgICAgIGZvciAoY29uc3QgY2xhdXNlIG9mIG9wdGlvbnMud2hlcmUpIHtcbiAgICAgICAgY29uc3RyYWludHMucHVzaCh3aGVyZShjbGF1c2UuZmllbGQsIGNsYXVzZS5vcGVyYXRvciwgY2xhdXNlLnZhbHVlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3JkZXJCeSBjbGF1c2VzXG4gICAgaWYgKG9wdGlvbnMub3JkZXJCeSkge1xuICAgICAgZm9yIChjb25zdCBjbGF1c2Ugb2Ygb3B0aW9ucy5vcmRlckJ5KSB7XG4gICAgICAgIGNvbnN0cmFpbnRzLnB1c2gob3JkZXJCeShjbGF1c2UuZmllbGQsIGNsYXVzZS5kaXJlY3Rpb24pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDdXJzb3JzIHBhcmEgcGFnaW5hY2nDs25cbiAgICBpZiAob3B0aW9ucy5zdGFydEFmdGVyKSB7XG4gICAgICBjb25zdHJhaW50cy5wdXNoKHN0YXJ0QWZ0ZXIob3B0aW9ucy5zdGFydEFmdGVyKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0YXJ0QXQpIHtcbiAgICAgIGNvbnN0cmFpbnRzLnB1c2goc3RhcnRBdChvcHRpb25zLnN0YXJ0QXQpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZW5kQmVmb3JlKSB7XG4gICAgICBjb25zdHJhaW50cy5wdXNoKGVuZEJlZm9yZShvcHRpb25zLmVuZEJlZm9yZSkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5lbmRBdCkge1xuICAgICAgY29uc3RyYWludHMucHVzaChlbmRBdChvcHRpb25zLmVuZEF0KSk7XG4gICAgfVxuXG4gICAgLy8gTGltaXQgKHNlIGFncmVnYSBhbCBmaW5hbClcbiAgICBpZiAob3B0aW9ucy5saW1pdCkge1xuICAgICAgY29uc3RyYWludHMucHVzaChsaW1pdChvcHRpb25zLmxpbWl0KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcGVhIHVuIERvY3VtZW50U25hcHNob3QgYSBudWVzdHJvIHRpcG9cbiAgICovXG4gIHByaXZhdGUgbWFwRG9jdW1lbnQ8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBzbmFwc2hvdDogRG9jdW1lbnRTbmFwc2hvdDxEb2N1bWVudERhdGE+XG4gICk6IFQge1xuICAgIGNvbnN0IGRhdGEgPSBzbmFwc2hvdC5kYXRhKCk7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvY3VtZW50byBubyB0aWVuZSBkYXRvcycpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogc25hcHNob3QuaWQsXG4gICAgICAuLi50aGlzLmNvbnZlcnRUaW1lc3RhbXBzKGRhdGEpLFxuICAgIH0gYXMgVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252aWVydGUgVGltZXN0YW1wcyBkZSBGaXJlc3RvcmUgYSBEYXRlIGRlIEphdmFTY3JpcHRcbiAgICovXG4gIHByaXZhdGUgY29udmVydFRpbWVzdGFtcHMoZGF0YTogRG9jdW1lbnREYXRhKTogRG9jdW1lbnREYXRhIHtcbiAgICBjb25zdCByZXN1bHQ6IERvY3VtZW50RGF0YSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRpbWVzdGFtcCkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlLnRvRGF0ZSgpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMuY29udmVydFRpbWVzdGFtcHModmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIERpdmlkZSB1bmEgcnV0YSBkZSBkb2N1bWVudG8gZW4gY29sZWNjacOzbiBlIElEXG4gICAqL1xuICBwcml2YXRlIHNwbGl0UGF0aChwYXRoOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICBpZiAoc2VnbWVudHMubGVuZ3RoIDwgMiB8fCBzZWdtZW50cy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJ1dGEgZGUgZG9jdW1lbnRvIGludsOhbGlkYTogJHtwYXRofWApO1xuICAgIH1cbiAgICBjb25zdCBkb2NJZCA9IHNlZ21lbnRzLnBvcCgpITtcbiAgICBjb25zdCBjb2xsZWN0aW9uUGF0aCA9IHNlZ21lbnRzLmpvaW4oJy8nKTtcbiAgICByZXR1cm4gW2NvbGxlY3Rpb25QYXRoLCBkb2NJZF07XG4gIH1cbn1cbiJdfQ==
|
|
550
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0b3JlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmVzdG9yZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUNkLFNBQVMsRUFDVCxHQUFHLEVBQ0gsT0FBTyxFQUtQLGtCQUFrQixFQUNsQixNQUFNLEVBQ04sT0FBTyxFQUNQLEtBQUssRUFDTCxPQUFPLEVBQ1AsS0FBSyxFQUVMLGVBQWUsRUFDZixNQUFNLEVBQ04sVUFBVSxFQUNWLE9BQU8sRUFDUCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsR0FFWixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0IsWUFBb0IsU0FBb0I7UUFBcEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUZoQyxXQUFNLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFMUIsQ0FBQztJQUU1Qzs7Ozs7T0FLRztJQUNLLG9CQUFvQixDQUFDLGNBQXNCO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUs7WUFBRSxPQUFPLGNBQWMsQ0FBQztRQUMvQyxPQUFPLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksY0FBYyxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSw4QkFBOEI7SUFDOUIsOEVBQThFO0lBRTlFOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FDVixjQUFzQixFQUN0QixLQUFhO1FBRWIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4RCxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV0QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFJLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7OztPQWdCRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQ1gsY0FBc0IsRUFDdEIsT0FBc0I7UUFFdEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQy9ELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDL0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEMsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxjQUFzQixFQUFFLE9BQXNCO1FBQzVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sUUFBUSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bd0JHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FDaEIsY0FBc0IsRUFDdEIsT0FBeUM7UUFFekMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQy9ELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4RCw4Q0FBOEM7UUFDOUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxHQUFHLFdBQVcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWxDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRTVDLHlDQUF5QztRQUN6QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN0RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVqRixPQUFPO1lBQ0wsSUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELE9BQU87WUFDUCxPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQXNCLEVBQUUsS0FBYTtRQUNoRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hELE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsd0NBQXdDO0lBQ3hDLDhFQUE4RTtJQUU5RTs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSCxVQUFVLENBQ1IsY0FBc0IsRUFDdEIsS0FBYTtRQUViLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM1QyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVCxJQUFJLENBQUMsSUFBSTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFvQixDQUFNLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILGlCQUFpQixDQUNmLGNBQXNCLEVBQ3RCLE9BQXNCO1FBRXRCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBRS9DLE9BQU8sY0FBYyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDOUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQU0sQ0FBQyxDQUFDLENBQy9ELENBQUM7SUFDSixDQUFDO0lBRUQsOEVBQThFO0lBQzlFLFlBQVk7SUFDWiw4RUFBOEU7SUFFOUU7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUNWLGNBQXNCLEVBQ3RCLElBQStDO1FBRS9DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvRCxNQUFNLFNBQVMsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUVwQyxNQUFNLE9BQU8sR0FBRztZQUNkLEdBQUcsSUFBSTtZQUNQLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFcEQsb0RBQW9EO1FBQ3BELDBFQUEwRTtRQUMxRSw0RUFBNEU7UUFDNUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFPLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FDVixjQUFzQixFQUN0QixLQUFhLEVBQ2IsSUFBbUIsRUFDbkIsT0FBNkI7UUFFN0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUVwQyxNQUFNLE9BQU8sR0FBRztZQUNkLEdBQUcsSUFBSTtZQUNQLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO1NBQ3BELENBQUM7UUFFRixNQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUNiLGNBQXNCLEVBQ3RCLEtBQWEsRUFDYixJQUEwQztRQUUxQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhELE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUN0QixHQUFHLElBQUk7WUFDUCxTQUFTLEVBQUUsZUFBZSxFQUFFO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxjQUFzQixFQUFFLEtBQWE7UUFDbkQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsOEVBQThFO0lBQzlFLHNCQUFzQjtJQUN0Qiw4RUFBOEU7SUFFOUU7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILEtBQUssQ0FBQyxLQUFLLENBQ1QsVUFJVTtRQUVWLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFekMsTUFBTSxRQUFRLEdBQUc7WUFDZixHQUFHLEVBQUUsQ0FBSSxJQUFZLEVBQUUsSUFBTyxFQUFFLEVBQUU7Z0JBQ2hDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3hELEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFO29CQUNoQixHQUFHLElBQUk7b0JBQ1AsU0FBUyxFQUFFLGVBQWUsRUFBRTtvQkFDNUIsU0FBUyxFQUFFLGVBQWUsRUFBRTtpQkFDYixDQUFDLENBQUM7WUFDckIsQ0FBQztZQUNELE1BQU0sRUFBRSxDQUFJLElBQVksRUFBRSxJQUFnQixFQUFFLEVBQUU7Z0JBQzVDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3hELEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO29CQUNuQixHQUFHLElBQUk7b0JBQ1AsU0FBUyxFQUFFLGVBQWUsRUFBRTtpQkFDYixDQUFDLENBQUM7WUFDckIsQ0FBQztZQUNELE1BQU0sRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO2dCQUN2QixNQUFNLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN4RCxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7U0FDRixDQUFDO1FBRUYsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsYUFBYTtJQUNiLDhFQUE4RTtJQUU5RTs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSCxTQUFTLENBQUMsUUFBZ0IsRUFBRSxNQUE4QjtRQUN4RCxPQUFPLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLGNBQXNCO1FBQy9CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvRCxPQUFPLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWU7UUFDYixPQUFPLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxVQUFVLENBQUMsR0FBRyxRQUFtQjtRQUMvQixPQUFPLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxHQUFHLFFBQW1CO1FBQ2hDLE9BQU8sV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILFNBQVMsQ0FBQyxDQUFTO1FBQ2pCLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsbUJBQW1CO0lBQ25CLDhFQUE4RTtJQUU5RTs7T0FFRztJQUNLLHFCQUFxQixDQUFDLE9BQXNCO1FBQ2xELE1BQU0sV0FBVyxHQUFzQixFQUFFLENBQUM7UUFFMUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLFdBQVcsQ0FBQztRQUVqQyxnQkFBZ0I7UUFDaEIsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25DLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN2RSxDQUFDO1FBQ0gsQ0FBQztRQUVELGtCQUFrQjtRQUNsQixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDckMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM1RCxDQUFDO1FBQ0gsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2QixXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQixXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsNkJBQTZCO1FBQzdCLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xCLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxXQUFXLENBQThCLFFBQXdDO1FBQ3ZGLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELE9BQU87WUFDTCxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDZixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7U0FDM0IsQ0FBQztJQUNULENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQixDQUFDLElBQWtCO1FBQzFDLE1BQU0sTUFBTSxHQUFpQixFQUFFLENBQUM7UUFFaEMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxJQUFJLEtBQUssWUFBWSxTQUFTLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQixDQUFDO2lCQUFNLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdkUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNLLFNBQVMsQ0FBQyxJQUFZO1FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFHLENBQUM7UUFDOUIsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7K0dBcGtCVSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQURILE1BQU07OzRGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGaXJlc3RvcmUgU2VydmljZVxuICpcbiAqIFNlcnZpY2lvIGdlbsOpcmljbyBwYXJhIG9wZXJhY2lvbmVzIENSVUQgZW4gRmlyZXN0b3JlLlxuICogU29wb3J0YSBsZWN0dXJhcyBvbmUtdGltZSwgc3Vic2NyaXBjaW9uZXMgcmVhbC10aW1lLCBwYWdpbmFjacOzbiB5IHF1ZXJpZXMgY29tcGxlamFzLlxuICovXG5cbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgYWRkRG9jLFxuICBjb2xsZWN0aW9uLFxuICBjb2xsZWN0aW9uRGF0YSxcbiAgZGVsZXRlRG9jLFxuICBkb2MsXG4gIGRvY0RhdGEsXG4gIERvY3VtZW50RGF0YSxcbiAgRG9jdW1lbnRSZWZlcmVuY2UsXG4gIERvY3VtZW50U25hcHNob3QsXG4gIEZpcmVzdG9yZSxcbiAgZ2V0Q291bnRGcm9tU2VydmVyLFxuICBnZXREb2MsXG4gIGdldERvY3MsXG4gIGxpbWl0LFxuICBvcmRlckJ5LFxuICBxdWVyeSxcbiAgUXVlcnlDb25zdHJhaW50LFxuICBzZXJ2ZXJUaW1lc3RhbXAsXG4gIHNldERvYyxcbiAgc3RhcnRBZnRlcixcbiAgc3RhcnRBdCxcbiAgZW5kQmVmb3JlLFxuICBlbmRBdCxcbiAgVGltZXN0YW1wLFxuICB1cGRhdGVEb2MsXG4gIHdoZXJlLFxuICB3cml0ZUJhdGNoLFxuICBpbmNyZW1lbnQsXG4gIGFycmF5VW5pb24sXG4gIGFycmF5UmVtb3ZlLFxuICBGaWVsZFZhbHVlLFxufSBmcm9tICdAYW5ndWxhci9maXJlL2ZpcmVzdG9yZSc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBGaXJlc3RvcmVEb2N1bWVudCwgUGFnaW5hdGVkUmVzdWx0LCBRdWVyeU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGJ1aWxkUGF0aCB9IGZyb20gJy4vdXRpbHMvcGF0aC1idWlsZGVyJztcblxuLyoqXG4gKiBTZXJ2aWNpbyBwYXJhIG9wZXJhY2lvbmVzIENSVUQgZW4gRmlyZXN0b3JlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbnRlcmZhY2UgVXNlciBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50IHtcbiAqICAgbmFtZTogc3RyaW5nO1xuICogICBlbWFpbDogc3RyaW5nO1xuICogICByb2xlOiAnYWRtaW4nIHwgJ3VzZXInO1xuICogfVxuICpcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgVXNlcnNDb21wb25lbnQge1xuICogICBwcml2YXRlIGZpcmVzdG9yZSA9IGluamVjdChGaXJlc3RvcmVTZXJ2aWNlKTtcbiAqXG4gKiAgIC8vIExlY3R1cmEgb25lLXRpbWVcbiAqICAgYXN5bmMgbG9hZFVzZXIoaWQ6IHN0cmluZykge1xuICogICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLmZpcmVzdG9yZS5nZXREb2M8VXNlcj4oJ3VzZXJzJywgaWQpO1xuICogICB9XG4gKlxuICogICAvLyBTdWJzY3JpcGNpw7NuIHJlYWwtdGltZVxuICogICB1c2VycyQgPSB0aGlzLmZpcmVzdG9yZS5jb2xsZWN0aW9uQ2hhbmdlczxVc2VyPigndXNlcnMnLCB7XG4gKiAgICAgd2hlcmU6IFt7IGZpZWxkOiAncm9sZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogJ2FkbWluJyB9XSxcbiAqICAgICBvcmRlckJ5OiBbeyBmaWVsZDogJ25hbWUnLCBkaXJlY3Rpb246ICdhc2MnIH1dXG4gKiAgIH0pO1xuICpcbiAqICAgLy8gQ3JlYXIgZG9jdW1lbnRvXG4gKiAgIGFzeW5jIGNyZWF0ZVVzZXIoZGF0YTogT21pdDxVc2VyLCAnaWQnPikge1xuICogICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLmZpcmVzdG9yZS5hZGREb2M8VXNlcj4oJ3VzZXJzJywgZGF0YSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEZpcmVzdG9yZVNlcnZpY2Uge1xuICBwcml2YXRlIGNvbmZpZyA9IGluamVjdChWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZpcmVzdG9yZTogRmlyZXN0b3JlKSB7fVxuXG4gIC8qKlxuICAgKiBQcmVmaWphIGVsIHBhdGggZGUgY29sZWNjacOzbiBjb24gZWwgYXBwSWQgc2kgZXN0w6EgY29uZmlndXJhZG8uXG4gICAqIFNpIG5vIGhheSBhcHBJZCwgcmV0b3JuYSBlbCBwYXRoIHNpbiBtb2RpZmljYXIgKGJhY2t3YXJkIGNvbXBhdGlibGUpLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZz8uYXBwSWQpIHJldHVybiBjb2xsZWN0aW9uUGF0aDtcbiAgICByZXR1cm4gYGFwcHMvJHt0aGlzLmNvbmZpZy5hcHBJZH0vJHtjb2xsZWN0aW9uUGF0aH1gO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExFQ1RVUkFTIE9ORS1USU1FIChQcm9taXNlKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2J0aWVuZSB1biBkb2N1bWVudG8gcG9yIElEIChsZWN0dXJhIMO6bmljYSkuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqIEByZXR1cm5zIERvY3VtZW50byBvIG51bGwgc2kgbm8gZXhpc3RlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdXNlciA9IGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UuZ2V0RG9jPFVzZXI+KCd1c2VycycsICdhYmMxMjMnKTtcbiAgICogaWYgKHVzZXIpIHtcbiAgICogICBjb25zb2xlLmxvZyh1c2VyLm5hbWUpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0RG9jPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICBkb2NJZDogc3RyaW5nXG4gICk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgZ2V0RG9jKGRvY1JlZik7XG5cbiAgICBpZiAoIXNuYXBzaG90LmV4aXN0cygpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tYXBEb2N1bWVudDxUPihzbmFwc2hvdCk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBtw7psdGlwbGVzIGRvY3VtZW50b3MgY29uIG9wY2lvbmVzIGRlIHF1ZXJ5LlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs25cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcGNpb25lcyBkZSBxdWVyeSAod2hlcmUsIG9yZGVyQnksIGxpbWl0KVxuICAgKiBAcmV0dXJucyBBcnJheSBkZSBkb2N1bWVudG9zXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gVG9kb3MgbG9zIHVzdWFyaW9zIGFjdGl2b3Mgb3JkZW5hZG9zIHBvciBub21icmVcbiAgICogY29uc3QgdXNlcnMgPSBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLmdldERvY3M8VXNlcj4oJ3VzZXJzJywge1xuICAgKiAgIHdoZXJlOiBbeyBmaWVsZDogJ2FjdGl2ZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogdHJ1ZSB9XSxcbiAgICogICBvcmRlckJ5OiBbeyBmaWVsZDogJ25hbWUnLCBkaXJlY3Rpb246ICdhc2MnIH1dLFxuICAgKiAgIGxpbWl0OiA1MFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBnZXREb2NzPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zPzogUXVlcnlPcHRpb25zXG4gICk6IFByb21pc2U8VFtdPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgY29sbGVjdGlvblJlZiA9IGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCk7XG4gICAgY29uc3QgY29uc3RyYWludHMgPSB0aGlzLmJ1aWxkUXVlcnlDb25zdHJhaW50cyhvcHRpb25zKTtcbiAgICBjb25zdCBxID0gcXVlcnkoY29sbGVjdGlvblJlZiwgLi4uY29uc3RyYWludHMpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgZ2V0RG9jcyhxKTtcblxuICAgIHJldHVybiBzbmFwc2hvdC5kb2NzLm1hcChkb2MgPT4gdGhpcy5tYXBEb2N1bWVudDxUPihkb2MpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdWVudGEgZG9jdW1lbnRvcyB1c2FuZG8gYWdncmVnYXRpb24gcXVlcnkgZGVsIHNlcnZpZG9yLlxuICAgKiBObyBkZXNjYXJnYSBsb3MgZG9jdW1lbnRvcyDigJQgbXVjaG8gbcOhcyBlZmljaWVudGUgcGFyYSBjb250ZW9zIHkgYmFkZ2VzLlxuICAgKi9cbiAgYXN5bmMgY291bnREb2NzKGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgpO1xuICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gdGhpcy5idWlsZFF1ZXJ5Q29uc3RyYWludHMob3B0aW9ucyk7XG4gICAgY29uc3QgcSA9IHF1ZXJ5KGNvbGxlY3Rpb25SZWYsIC4uLmNvbnN0cmFpbnRzKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IGdldENvdW50RnJvbVNlcnZlcihxKTtcbiAgICByZXR1cm4gc25hcHNob3QuZGF0YSgpLmNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZG9jdW1lbnRvcyBjb24gcGFnaW5hY2nDs24gYmFzYWRhIGVuIGN1cnNvcmVzLlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs25cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcGNpb25lcyBkZSBxdWVyeSAoZGViZSBpbmNsdWlyIGxpbWl0KVxuICAgKiBAcmV0dXJucyBSZXN1bHRhZG8gcGFnaW5hZG8gY29uIGN1cnNvciBwYXJhIGxhIHNpZ3VpZW50ZSBww6FnaW5hXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gUHJpbWVyYSBww6FnaW5hXG4gICAqIGNvbnN0IHBhZ2UxID0gYXdhaXQgZmlyZXN0b3JlU2VydmljZS5nZXRQYWdpbmF0ZWQ8VXNlcj4oJ3VzZXJzJywge1xuICAgKiAgIG9yZGVyQnk6IFt7IGZpZWxkOiAnY3JlYXRlZEF0JywgZGlyZWN0aW9uOiAnZGVzYycgfV0sXG4gICAqICAgbGltaXQ6IDEwXG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBTaWd1aWVudGUgcMOhZ2luYVxuICAgKiBpZiAocGFnZTEuaGFzTW9yZSkge1xuICAgKiAgIGNvbnN0IHBhZ2UyID0gYXdhaXQgZmlyZXN0b3JlU2VydmljZS5nZXRQYWdpbmF0ZWQ8VXNlcj4oJ3VzZXJzJywge1xuICAgKiAgICAgb3JkZXJCeTogW3sgZmllbGQ6ICdjcmVhdGVkQXQnLCBkaXJlY3Rpb246ICdkZXNjJyB9XSxcbiAgICogICAgIGxpbWl0OiAxMCxcbiAgICogICAgIHN0YXJ0QWZ0ZXI6IHBhZ2UxLmxhc3REb2NcbiAgICogICB9KTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldFBhZ2luYXRlZDxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogUXVlcnlPcHRpb25zICYgeyBsaW1pdDogbnVtYmVyIH1cbiAgKTogUHJvbWlzZTxQYWdpbmF0ZWRSZXN1bHQ8VD4+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBjb2xsZWN0aW9uUmVmID0gY29sbGVjdGlvbih0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoKTtcbiAgICBjb25zdCBjb25zdHJhaW50cyA9IHRoaXMuYnVpbGRRdWVyeUNvbnN0cmFpbnRzKG9wdGlvbnMpO1xuXG4gICAgLy8gUGVkaXIgdW5vIG3DoXMgcGFyYSBzYWJlciBzaSBoYXkgbcOhcyBww6FnaW5hc1xuICAgIGNvbnN0IHEgPSBxdWVyeShjb2xsZWN0aW9uUmVmLCAuLi5jb25zdHJhaW50cywgbGltaXQob3B0aW9ucy5saW1pdCArIDEpKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IGdldERvY3MocSk7XG5cbiAgICBjb25zdCBkb2NzID0gc25hcHNob3QuZG9jcztcbiAgICBjb25zdCBoYXNNb3JlID0gZG9jcy5sZW5ndGggPiBvcHRpb25zLmxpbWl0O1xuXG4gICAgLy8gU2kgaGF5IG3DoXMsIHJlbW92ZXIgZWwgZG9jdW1lbnRvIGV4dHJhXG4gICAgY29uc3QgcmVzdWx0RG9jcyA9IGhhc01vcmUgPyBkb2NzLnNsaWNlKDAsIC0xKSA6IGRvY3M7XG4gICAgY29uc3QgbGFzdERvYyA9IHJlc3VsdERvY3MubGVuZ3RoID4gMCA/IHJlc3VsdERvY3NbcmVzdWx0RG9jcy5sZW5ndGggLSAxXSA6IG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogcmVzdWx0RG9jcy5tYXAoZG9jID0+IHRoaXMubWFwRG9jdW1lbnQ8VD4oZG9jKSksXG4gICAgICBoYXNNb3JlLFxuICAgICAgbGFzdERvYyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuIGRvY3VtZW50byBleGlzdGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqIEByZXR1cm5zIHRydWUgc2kgZWwgZG9jdW1lbnRvIGV4aXN0ZVxuICAgKi9cbiAgYXN5bmMgZXhpc3RzKGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsIGRvY0lkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgZ2V0RG9jKGRvY1JlZik7XG4gICAgcmV0dXJuIHNuYXBzaG90LmV4aXN0cygpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNVQlNDUklQQ0lPTkVTIFJFQUwtVElNRSAoT2JzZXJ2YWJsZSlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGEgY2FtYmlvcyBkZSB1biBkb2N1bWVudG8gKHJlYWwtdGltZSkuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIGN1YW5kbyBlbCBkb2N1bWVudG8gY2FtYmlhXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRW4gZWwgY29tcG9uZW50ZVxuICAgKiB1c2VyJCA9IHRoaXMuZmlyZXN0b3JlU2VydmljZS5kb2NDaGFuZ2VzPFVzZXI+KCd1c2VycycsIHRoaXMudXNlcklkKTtcbiAgICpcbiAgICogLy8gRW4gZWwgdGVtcGxhdGVcbiAgICogQGlmICh1c2VyJCB8IGFzeW5jOyBhcyB1c2VyKSB7XG4gICAqICAgPHA+e3sgdXNlci5uYW1lIH19PC9wPlxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZG9jQ2hhbmdlczxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgZG9jSWQ6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICByZXR1cm4gZG9jRGF0YShkb2NSZWYsIHsgaWRGaWVsZDogJ2lkJyB9KS5waXBlKFxuICAgICAgbWFwKGRhdGEgPT4ge1xuICAgICAgICBpZiAoIWRhdGEpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0VGltZXN0YW1wcyhkYXRhIGFzIERvY3VtZW50RGF0YSkgYXMgVDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdXNjcmliZSBhIGNhbWJpb3MgZGUgdW5hIGNvbGVjY2nDs24gKHJlYWwtdGltZSkuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wY2lvbmVzIGRlIHF1ZXJ5XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIGN1YW5kbyBsYSBjb2xlY2Npw7NuIGNhbWJpYVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFVzdWFyaW9zIGFjdGl2b3MgZW4gdGllbXBvIHJlYWxcbiAgICogYWN0aXZlVXNlcnMkID0gdGhpcy5maXJlc3RvcmVTZXJ2aWNlLmNvbGxlY3Rpb25DaGFuZ2VzPFVzZXI+KCd1c2VycycsIHtcbiAgICogICB3aGVyZTogW3sgZmllbGQ6ICdzdGF0dXMnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6ICdvbmxpbmUnIH1dXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGNvbGxlY3Rpb25DaGFuZ2VzPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zPzogUXVlcnlPcHRpb25zXG4gICk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgY29sbGVjdGlvblJlZiA9IGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCk7XG4gICAgY29uc3QgY29uc3RyYWludHMgPSB0aGlzLmJ1aWxkUXVlcnlDb25zdHJhaW50cyhvcHRpb25zKTtcbiAgICBjb25zdCBxID0gcXVlcnkoY29sbGVjdGlvblJlZiwgLi4uY29uc3RyYWludHMpO1xuXG4gICAgcmV0dXJuIGNvbGxlY3Rpb25EYXRhKHEsIHsgaWRGaWVsZDogJ2lkJyB9KS5waXBlKFxuICAgICAgbWFwKGRvY3MgPT4gZG9jcy5tYXAoZG9jID0+IHRoaXMuY29udmVydFRpbWVzdGFtcHMoZG9jKSBhcyBUKSlcbiAgICApO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVTQ1JJVFVSQVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQWdyZWdhIHVuIGRvY3VtZW50byBjb24gSUQgYXV0by1nZW5lcmFkby5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgZGVsIGRvY3VtZW50byAoc2luIGlkLCBjcmVhdGVkQXQsIHVwZGF0ZWRBdClcbiAgICogQHJldHVybnMgRG9jdW1lbnRvIGNyZWFkbyBjb24gc3UgSURcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBuZXdVc2VyID0gYXdhaXQgZmlyZXN0b3JlU2VydmljZS5hZGREb2M8VXNlcj4oJ3VzZXJzJywge1xuICAgKiAgIG5hbWU6ICdKb2huIERvZScsXG4gICAqICAgZW1haWw6ICdqb2huQGV4YW1wbGUuY29tJyxcbiAgICogICByb2xlOiAndXNlcidcbiAgICogfSk7XG4gICAqIGNvbnNvbGUubG9nKCdDcmVhdGVkIHVzZXIgd2l0aCBJRDonLCBuZXdVc2VyLmlkKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBhZGREb2M8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIGRhdGE6IE9taXQ8VCwgJ2lkJyB8ICdjcmVhdGVkQXQnIHwgJ3VwZGF0ZWRBdCc+XG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgpO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IHNlcnZlclRpbWVzdGFtcCgpO1xuXG4gICAgY29uc3QgZG9jRGF0YSA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCxcbiAgICAgIHVwZGF0ZWRBdDogdGltZXN0YW1wLFxuICAgIH07XG5cbiAgICBjb25zdCBkb2NSZWYgPSBhd2FpdCBhZGREb2MoY29sbGVjdGlvblJlZiwgZG9jRGF0YSk7XG5cbiAgICAvLyBSZXRvcm5hciBvcHRpbcOtc3RpY2FtZW50ZSBzaW4gc2VndW5kbyByb3VuZC10cmlwLlxuICAgIC8vIHNlcnZlclRpbWVzdGFtcCgpIHJlc3VlbHZlIGVuIGVsIHNlcnZpZG9yOyB1c2Ftb3MgRGF0ZS5ub3coKSBsb2NhbG1lbnRlXG4gICAgLy8gcGFyYSBldml0YXIgdW4gZ2V0RG9jKCkgZXh0cmEuIEVsIHZhbG9yIHJlYWwgbGxlZ2EgZW4gbGEgcHLDs3hpbWEgbGVjdHVyYS5cbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiB7IGlkOiBkb2NSZWYuaWQsIC4uLmRhdGEsIGNyZWF0ZWRBdDogbm93LCB1cGRhdGVkQXQ6IG5vdyB9IGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYSBvIHNvYnJlc2NyaWJlIHVuIGRvY3VtZW50byBjb24gSUQgZXNwZWPDrWZpY28uXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgZGVsIGRvY3VtZW50b1xuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wY2lvbmVzIChtZXJnZTogdHJ1ZSBwYXJhIG1lcmdlIGVuIGx1Z2FyIGRlIHNvYnJlc2NyaWJpcilcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTb2JyZXNjcmliaXIgY29tcGxldGFtZW50ZVxuICAgKiBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLnNldERvYzxVc2VyPigndXNlcnMnLCAndXNlcjEyMycsIHVzZXJEYXRhKTtcbiAgICpcbiAgICogLy8gTWVyZ2UgY29uIGRhdG9zIGV4aXN0ZW50ZXNcbiAgICogYXdhaXQgZmlyZXN0b3JlU2VydmljZS5zZXREb2M8VXNlcj4oJ3VzZXJzJywgJ3VzZXIxMjMnLCB7IG5hbWU6ICdOZXcgTmFtZScgfSwgeyBtZXJnZTogdHJ1ZSB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBzZXREb2M8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIGRvY0lkOiBzdHJpbmcsXG4gICAgZGF0YTogT21pdDxULCAnaWQnPixcbiAgICBvcHRpb25zPzogeyBtZXJnZT86IGJvb2xlYW4gfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IHNlcnZlclRpbWVzdGFtcCgpO1xuXG4gICAgY29uc3QgZG9jRGF0YSA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCxcbiAgICAgIC4uLihvcHRpb25zPy5tZXJnZSA/IHt9IDogeyBjcmVhdGVkQXQ6IHRpbWVzdGFtcCB9KSxcbiAgICB9O1xuXG4gICAgYXdhaXQgc2V0RG9jKGRvY1JlZiwgZG9jRGF0YSwgeyBtZXJnZTogb3B0aW9ucz8ubWVyZ2UgPz8gZmFsc2UgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsaXphIGNhbXBvcyBlc3BlY8OtZmljb3MgZGUgdW4gZG9jdW1lbnRvLlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs25cbiAgICogQHBhcmFtIGRvY0lkIC0gSUQgZGVsIGRvY3VtZW50b1xuICAgKiBAcGFyYW0gZGF0YSAtIENhbXBvcyBhIGFjdHVhbGl6YXJcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLnVwZGF0ZURvYzxVc2VyPigndXNlcnMnLCAndXNlcjEyMycsIHtcbiAgICogICBuYW1lOiAnVXBkYXRlZCBOYW1lJyxcbiAgICogICBsYXN0TG9naW46IG5ldyBEYXRlKClcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlRG9jPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICBkb2NJZDogc3RyaW5nLFxuICAgIGRhdGE6IFBhcnRpYWw8T21pdDxULCAnaWQnIHwgJ2NyZWF0ZWRBdCc+PlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuXG4gICAgYXdhaXQgdXBkYXRlRG9jKGRvY1JlZiwge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIHVwZGF0ZWRBdDogc2VydmVyVGltZXN0YW1wKCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSB1biBkb2N1bWVudG8uXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgZmlyZXN0b3JlU2VydmljZS5kZWxldGVEb2MoJ3VzZXJzJywgJ3VzZXIxMjMnKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBkZWxldGVEb2MoY29sbGVjdGlvblBhdGg6IHN0cmluZywgZG9jSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGRvY1JlZiA9IGRvYyh0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoLCBkb2NJZCk7XG4gICAgYXdhaXQgZGVsZXRlRG9jKGRvY1JlZik7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gT1BFUkFDSU9ORVMgRU4gTE9URVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogRWplY3V0YSBtw7psdGlwbGVzIG9wZXJhY2lvbmVzIGRlIGVzY3JpdHVyYSBkZSBmb3JtYSBhdMOzbWljYS5cbiAgICpcbiAgICogQHBhcmFtIG9wZXJhdGlvbnMgLSBGdW5jacOzbiBxdWUgcmVjaWJlIGVsIGJhdGNoIHkgYWdyZWdhIG9wZXJhY2lvbmVzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgZmlyZXN0b3JlU2VydmljZS5iYXRjaCgoYmF0Y2gpID0+IHtcbiAgICogICBiYXRjaC5zZXQoJ3VzZXJzL3VzZXIxJywgeyBuYW1lOiAnVXNlciAxJyB9KTtcbiAgICogICBiYXRjaC51cGRhdGUoJ3VzZXJzL3VzZXIyJywgeyBzdGF0dXM6ICdpbmFjdGl2ZScgfSk7XG4gICAqICAgYmF0Y2guZGVsZXRlKCd1c2Vycy91c2VyMycpO1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBiYXRjaChcbiAgICBvcGVyYXRpb25zOiAoYmF0Y2g6IHtcbiAgICAgIHNldDogPFQ+KHBhdGg6IHN0cmluZywgZGF0YTogVCkgPT4gdm9pZDtcbiAgICAgIHVwZGF0ZTogPFQ+KHBhdGg6IHN0cmluZywgZGF0YTogUGFydGlhbDxUPikgPT4gdm9pZDtcbiAgICAgIGRlbGV0ZTogKHBhdGg6IHN0cmluZykgPT4gdm9pZDtcbiAgICB9KSA9PiB2b2lkXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJhdGNoID0gd3JpdGVCYXRjaCh0aGlzLmZpcmVzdG9yZSk7XG5cbiAgICBjb25zdCBiYXRjaEFwaSA9IHtcbiAgICAgIHNldDogPFQ+KHBhdGg6IHN0cmluZywgZGF0YTogVCkgPT4ge1xuICAgICAgICBjb25zdCBbY29sbGVjdGlvblBhdGgsIGRvY0lkXSA9IHRoaXMuc3BsaXRQYXRoKHBhdGgpO1xuICAgICAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICAgICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICAgICAgYmF0Y2guc2V0KGRvY1JlZiwge1xuICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgY3JlYXRlZEF0OiBzZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgICAgICB1cGRhdGVkQXQ6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgICAgICB9IGFzIERvY3VtZW50RGF0YSk7XG4gICAgICB9LFxuICAgICAgdXBkYXRlOiA8VD4ocGF0aDogc3RyaW5nLCBkYXRhOiBQYXJ0aWFsPFQ+KSA9PiB7XG4gICAgICAgIGNvbnN0IFtjb2xsZWN0aW9uUGF0aCwgZG9jSWRdID0gdGhpcy5zcGxpdFBhdGgocGF0aCk7XG4gICAgICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgICAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgICAgICBiYXRjaC51cGRhdGUoZG9jUmVmLCB7XG4gICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICB1cGRhdGVkQXQ6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgICAgICB9IGFzIERvY3VtZW50RGF0YSk7XG4gICAgICB9LFxuICAgICAgZGVsZXRlOiAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IFtjb2xsZWN0aW9uUGF0aCwgZG9jSWRdID0gdGhpcy5zcGxpdFBhdGgocGF0aCk7XG4gICAgICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgICAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgICAgICBiYXRjaC5kZWxldGUoZG9jUmVmKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIG9wZXJhdGlvbnMoYmF0Y2hBcGkpO1xuICAgIGF3YWl0IGJhdGNoLmNvbW1pdCgpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVUSUxJREFERVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIENvbnN0cnV5ZSB1bmEgcnV0YSBhIHBhcnRpciBkZSB1biB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHRlbXBsYXRlIC0gVGVtcGxhdGUgY29uIHBsYWNlaG9sZGVycyB7cGFyYW19XG4gICAqIEBwYXJhbSBwYXJhbXMgLSBWYWxvcmVzIHBhcmEgbG9zIHBsYWNlaG9sZGVyc1xuICAgKiBAcmV0dXJucyBSdXRhIGNvbnN0cnVpZGFcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBwYXRoID0gZmlyZXN0b3JlU2VydmljZS5idWlsZFBhdGgoJ3VzZXJzL3t1c2VySWR9L2RvY3VtZW50cy97ZG9jSWR9Jywge1xuICAgKiAgIHVzZXJJZDogJ3VzZXIxMjMnLFxuICAgKiAgIGRvY0lkOiAnZG9jNDU2J1xuICAgKiB9KTtcbiAgICogLy8gPT4gJ3VzZXJzL3VzZXIxMjMvZG9jdW1lbnRzL2RvYzQ1NidcbiAgICogYGBgXG4gICAqL1xuICBidWlsZFBhdGgodGVtcGxhdGU6IHN0cmluZywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYnVpbGRQYXRoKHRlbXBsYXRlLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYSB1biBJRCDDum5pY28gcGFyYSB1biBkb2N1bWVudG8gKHNpbiBjcmVhcmxvKS5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEByZXR1cm5zIElEIMO6bmljbyBnZW5lcmFkbyBwb3IgRmlyZXN0b3JlXG4gICAqL1xuICBnZW5lcmF0ZUlkKGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgpO1xuICAgIHJldHVybiBkb2MoY29sbGVjdGlvblJlZikuaWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSB1biB2YWxvciBkZSB0aW1lc3RhbXAgZGVsIHNlcnZpZG9yLlxuICAgKiBVc2FyIGVuIGNhbXBvcyBkZSBmZWNoYSBwYXJhIHF1ZSBGaXJlc3RvcmUgYXNpZ25lIGVsIHRpbWVzdGFtcC5cbiAgICovXG4gIHNlcnZlclRpbWVzdGFtcCgpOiBGaWVsZFZhbHVlIHtcbiAgICByZXR1cm4gc2VydmVyVGltZXN0YW1wKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSB1biB2YWxvciBwYXJhIGFncmVnYXIgZWxlbWVudG9zIGEgdW4gYXJyYXkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgZmlyZXN0b3JlU2VydmljZS51cGRhdGVEb2MoJ3VzZXJzJywgJ3VzZXIxMjMnLCB7XG4gICAqICAgdGFnczogZmlyZXN0b3JlU2VydmljZS5hcnJheVVuaW9uKCduZXctdGFnJylcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXJyYXlVbmlvbiguLi5lbGVtZW50czogdW5rbm93bltdKTogRmllbGRWYWx1ZSB7XG4gICAgcmV0dXJuIGFycmF5VW5pb24oLi4uZWxlbWVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgdW4gdmFsb3IgcGFyYSByZW1vdmVyIGVsZW1lbnRvcyBkZSB1biBhcnJheS5cbiAgICovXG4gIGFycmF5UmVtb3ZlKC4uLmVsZW1lbnRzOiB1bmtub3duW10pOiBGaWVsZFZhbHVlIHtcbiAgICByZXR1cm4gYXJyYXlSZW1vdmUoLi4uZWxlbWVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgdW4gdmFsb3IgcGFyYSBpbmNyZW1lbnRhciB1biBjYW1wbyBudW3DqXJpY28uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgZmlyZXN0b3JlU2VydmljZS51cGRhdGVEb2MoJ3VzZXJzJywgJ3VzZXIxMjMnLCB7XG4gICAqICAgbG9naW5Db3VudDogZmlyZXN0b3JlU2VydmljZS5pbmNyZW1lbnQoMSlcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgaW5jcmVtZW50KG46IG51bWJlcik6IEZpZWxkVmFsdWUge1xuICAgIHJldHVybiBpbmNyZW1lbnQobik7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTcOJVE9ET1MgUFJJVkFET1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIENvbnN0cnV5ZSBsb3MgUXVlcnlDb25zdHJhaW50cyBhIHBhcnRpciBkZSBRdWVyeU9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRRdWVyeUNvbnN0cmFpbnRzKG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBRdWVyeUNvbnN0cmFpbnRbXSB7XG4gICAgY29uc3QgY29uc3RyYWludHM6IFF1ZXJ5Q29uc3RyYWludFtdID0gW107XG5cbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBjb25zdHJhaW50cztcblxuICAgIC8vIFdoZXJlIGNsYXVzZXNcbiAgICBpZiAob3B0aW9ucy53aGVyZSkge1xuICAgICAgZm9yIChjb25zdCBjbGF1c2Ugb2Ygb3B0aW9ucy53aGVyZSkge1xuICAgICAgICBjb25zdHJhaW50cy5wdXNoKHdoZXJlKGNsYXVzZS5maWVsZCwgY2xhdXNlLm9wZXJhdG9yLCBjbGF1c2UudmFsdWUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPcmRlckJ5IGNsYXVzZXNcbiAgICBpZiAob3B0aW9ucy5vcmRlckJ5KSB7XG4gICAgICBmb3IgKGNvbnN0IGNsYXVzZSBvZiBvcHRpb25zLm9yZGVyQnkpIHtcbiAgICAgICAgY29uc3RyYWludHMucHVzaChvcmRlckJ5KGNsYXVzZS5maWVsZCwgY2xhdXNlLmRpcmVjdGlvbikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEN1cnNvcnMgcGFyYSBwYWdpbmFjacOzblxuICAgIGlmIChvcHRpb25zLnN0YXJ0QWZ0ZXIpIHtcbiAgICAgIGNvbnN0cmFpbnRzLnB1c2goc3RhcnRBZnRlcihvcHRpb25zLnN0YXJ0QWZ0ZXIpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc3RhcnRBdCkge1xuICAgICAgY29uc3RyYWludHMucHVzaChzdGFydEF0KG9wdGlvbnMuc3RhcnRBdCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5lbmRCZWZvcmUpIHtcbiAgICAgIGNvbnN0cmFpbnRzLnB1c2goZW5kQmVmb3JlKG9wdGlvbnMuZW5kQmVmb3JlKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVuZEF0KSB7XG4gICAgICBjb25zdHJhaW50cy5wdXNoKGVuZEF0KG9wdGlvbnMuZW5kQXQpKTtcbiAgICB9XG5cbiAgICAvLyBMaW1pdCAoc2UgYWdyZWdhIGFsIGZpbmFsKVxuICAgIGlmIChvcHRpb25zLmxpbWl0KSB7XG4gICAgICBjb25zdHJhaW50cy5wdXNoKGxpbWl0KG9wdGlvbnMubGltaXQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uc3RyYWludHM7XG4gIH1cblxuICAvKipcbiAgICogTWFwZWEgdW4gRG9jdW1lbnRTbmFwc2hvdCBhIG51ZXN0cm8gdGlwb1xuICAgKi9cbiAgcHJpdmF0ZSBtYXBEb2N1bWVudDxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KHNuYXBzaG90OiBEb2N1bWVudFNuYXBzaG90PERvY3VtZW50RGF0YT4pOiBUIHtcbiAgICBjb25zdCBkYXRhID0gc25hcHNob3QuZGF0YSgpO1xuICAgIGlmICghZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEb2N1bWVudG8gbm8gdGllbmUgZGF0b3MnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNuYXBzaG90LmlkLFxuICAgICAgLi4udGhpcy5jb252ZXJ0VGltZXN0YW1wcyhkYXRhKSxcbiAgICB9IGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmllcnRlIFRpbWVzdGFtcHMgZGUgRmlyZXN0b3JlIGEgRGF0ZSBkZSBKYXZhU2NyaXB0XG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRUaW1lc3RhbXBzKGRhdGE6IERvY3VtZW50RGF0YSk6IERvY3VtZW50RGF0YSB7XG4gICAgY29uc3QgcmVzdWx0OiBEb2N1bWVudERhdGEgPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUaW1lc3RhbXApIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZS50b0RhdGUoKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLmNvbnZlcnRUaW1lc3RhbXBzKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXZpZGUgdW5hIHJ1dGEgZGUgZG9jdW1lbnRvIGVuIGNvbGVjY2nDs24gZSBJRFxuICAgKi9cbiAgcHJpdmF0ZSBzcGxpdFBhdGgocGF0aDogc3RyaW5nKTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA8IDIgfHwgc2VnbWVudHMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSdXRhIGRlIGRvY3VtZW50byBpbnbDoWxpZGE6ICR7cGF0aH1gKTtcbiAgICB9XG4gICAgY29uc3QgZG9jSWQgPSBzZWdtZW50cy5wb3AoKSE7XG4gICAgY29uc3QgY29sbGVjdGlvblBhdGggPSBzZWdtZW50cy5qb2luKCcvJyk7XG4gICAgcmV0dXJuIFtjb2xsZWN0aW9uUGF0aCwgZG9jSWRdO1xuICB9XG59XG4iXX0=
|