@atlasauth/angular 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/dist/esm2022/lib/appearance.mjs +1 -1
- package/dist/esm2022/lib/atlas.service.mjs +39 -2
- package/dist/esm2022/lib/atlas.ui.mjs +3 -1
- package/dist/esm2022/lib/components/attempt-flow.component.mjs +384 -8
- package/dist/esm2022/lib/components/flow-controller.mjs +115 -2
- package/dist/esm2022/lib/components/impersonation-banner.component.mjs +75 -0
- package/dist/esm2022/lib/components/organization-audit-log.component.mjs +115 -0
- package/dist/esm2022/lib/components/organization-audit-log.mjs +40 -0
- package/dist/esm2022/lib/components/organization-profile.component.mjs +602 -27
- package/dist/esm2022/lib/components/recovery-codes.component.mjs +122 -0
- package/dist/esm2022/lib/components/sign-in.component.mjs +45 -4
- package/dist/esm2022/lib/components/sign-up-form.component.mjs +69 -6
- package/dist/esm2022/lib/components/sign-up.component.mjs +81 -7
- package/dist/esm2022/lib/i18n.mjs +58 -1
- package/dist/esm2022/lib/provide-atlas.mjs +3 -2
- package/dist/esm2022/lib/types.mjs +1 -1
- package/dist/esm2022/lib/version.mjs +2 -2
- package/dist/esm2022/public-api.mjs +4 -1
- package/dist/fesm2022/atlasauth-angular.mjs +1711 -46
- package/dist/fesm2022/atlasauth-angular.mjs.map +1 -1
- package/dist/lib/appearance.d.ts +1 -1
- package/dist/lib/atlas.service.d.ts +22 -1
- package/dist/lib/atlas.ui.d.ts +2 -1
- package/dist/lib/components/attempt-flow.component.d.ts +57 -2
- package/dist/lib/components/flow-controller.d.ts +64 -1
- package/dist/lib/components/impersonation-banner.component.d.ts +27 -0
- package/dist/lib/components/organization-audit-log.component.d.ts +34 -0
- package/dist/lib/components/organization-audit-log.d.ts +25 -0
- package/dist/lib/components/organization-profile.component.d.ts +55 -6
- package/dist/lib/components/recovery-codes.component.d.ts +26 -0
- package/dist/lib/components/sign-in.component.d.ts +2 -0
- package/dist/lib/components/sign-up-form.component.d.ts +11 -1
- package/dist/lib/components/sign-up.component.d.ts +13 -0
- package/dist/lib/provide-atlas.d.ts +2 -1
- package/dist/lib/types.d.ts +6 -0
- package/dist/lib/version.d.ts +1 -1
- package/dist/public-api.d.ts +4 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @atlasauth/angular changelog
|
|
2
2
|
|
|
3
|
+
## 0.9.0 — 2026-10-23
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `<atlas-organization-audit-log>` (in `ATLAS_UI`) and `AtlasService.organizationAuditLog()` (a signal-backed `AtlasOrganizationAuditLog`): the active organization's audit trail for its admins, paged, with labels as inputs. Renders nothing for a member who may not read it. Appearance `elements` gain `list` and `listItem`.
|
|
8
|
+
- **Recovery codes after enrolment.** Setting up a second factor at sign-in now shows the account's one-time recovery codes before the sign-in finishes, as the hosted page does: copy them, download them as a .txt file, then "I've saved my codes" continues. Before, the sign-in completed straight away and the codes were never shown. The codes are kept in memory only, never on the attempt or in storage. New strings (`mfa.recoveryCodesTitle`, `mfa.recoveryCodesHelp`, `mfa.recoveryCodesCopy`, `mfa.recoveryCodesCopied`, `mfa.recoveryCodesDownload`, `mfa.recoveryCodesSaved`) are in the catalog and in every `@atlasauth/localizations` bundle.
|
|
9
|
+
- **MFA enrolment at sign-in works end to end.** When the app requires a second factor and the account has none, `<SignIn>` now fetches the authenticator setup and shows its QR code and the setup key, then asks for the code (one or two, as the app requires). Before, the step asked for codes without ever showing the setup.
|
|
10
|
+
- **Text-message enrolment** where the app offers texted codes and can send them: the user picks "Use text messages", enters a phone number, and confirms with the texted code. When both methods are offered the user chooses, and can switch.
|
|
11
|
+
- **"Text me a code instead"** at the second-factor step where the app offers texted codes, beside the existing "Email me a code instead".
|
|
12
|
+
- The new strings are in the catalog (`mfa.enrollChoose`, `mfa.enrollTotpOption`, `mfa.enrollSmsOption`, `mfa.enrollScan`, `mfa.enrollQrAlt`, `mfa.enrollSetupKey`, `mfa.enrollPreparing`, `mfa.phoneLabel`, `mfa.phoneHint`, `mfa.sendCode`, `mfa.codeTextedTo`, `mfa.smsCodeOption`) and in every `@atlasauth/localizations` bundle.
|
|
13
|
+
- "Email me a code instead" at the second factor showed its catalog key (`signIn.emailCodeOption`) unless a language bundle was passed; the English string is now in the default catalog.
|
|
14
|
+
- Texted codes are offered only where the server says the app can text (`account.mfa` on `/v1/appearance`). A server that does not say gets the authenticator app only.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Built on `@atlasauth/js` 0.16.0.
|
|
19
|
+
|
|
3
20
|
## 0.8.0
|
|
4
21
|
|
|
5
22
|
### Changed
|
|
@@ -124,4 +124,4 @@ export function renderAppearance(appearance, instanceDesign, options = {}) {
|
|
|
124
124
|
warn: options.warn,
|
|
125
125
|
});
|
|
126
126
|
}
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZWFyYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYXBwZWFyYW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUNMLHNCQUFzQixHQUt2QixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBaUQvRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQTJCO0lBQ3BELFlBQVksRUFBRSxTQUFTO0lBQ3ZCLFNBQVMsRUFBRSxTQUFTO0lBQ3BCLGVBQWUsRUFBRSxTQUFTO0lBQzFCLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLFlBQVksRUFBRSxLQUFLO0lBQ25CLFVBQVUsRUFBRSxpRUFBaUU7SUFDN0UsV0FBVyxFQUFFLEtBQUs7Q0FDbkIsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHO0lBQ3BCLE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLElBQUksRUFBRTtRQUNKLEdBQUcsY0FBYztRQUNqQixTQUFTLEVBQUUsU0FBUztRQUNwQixlQUFlLEVBQUUsU0FBUztRQUMxQixXQUFXLEVBQUUsU0FBUztRQUN0QixZQUFZLEVBQUUsU0FBUztLQUN4QjtJQUNELFlBQVksRUFBRTtRQUNaLEdBQUcsY0FBYztRQUNqQixZQUFZLEVBQUUsU0FBUztRQUN2QixTQUFTLEVBQUUsU0FBUztRQUNwQixlQUFlLEVBQUUsU0FBUztRQUMxQixXQUFXLEVBQUUsU0FBUztRQUN0QixZQUFZLEVBQUUsS0FBSztRQUNuQixVQUFVLEVBQUUsd0NBQXdDO0tBQ3JEO0NBQ3dELENBQUM7QUFFNUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxVQUF1QjtJQUNuRCxNQUFNLElBQUksR0FBRyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDbkYsTUFBTSxTQUFTLEdBQUcsVUFBVSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFFOUMsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0lBQ2hELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDckQsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLFFBQVEsQ0FBQyxHQUF5QixDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBOEI7SUFDekQsTUFBTSxJQUFJLEdBQTJCLEVBQUUsQ0FBQztJQUN4QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2xELDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDakYsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQ3RCLE9BQW1CLEVBQ25CLFVBQWtDLEVBQ2xDLElBQVk7SUFFWixNQUFNLFFBQVEsR0FBRyxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakQsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDakQsQ0FBQztBQUVELG1GQUFtRjtBQUVuRjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxVQUF1QjtJQUNwRCxNQUFNLEdBQUcsR0FBaUIsRUFBRSxDQUFDO0lBQzdCLElBQUksVUFBVSxFQUFFLFNBQVMsSUFBSSxVQUFVLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxHQUFHLENBQUMsR0FBeUIsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNsRSxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsVUFBa0MsRUFDbEMsY0FBaUQsRUFDakQsVUFBdUQsRUFBRTtJQUV6RCxPQUFPLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUU7UUFDeEQsTUFBTSxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUM7UUFDbEMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtLQUNuQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDCpzEwLjMgdGhlbWluZy5cbiAqXG4gKiBcImFwcGVhcmFuY2UgcHJvcDogZGVzaWduIHRva2VucyAoY29sb3JzLCByYWRpdXMsIGZvbnQsIHNwYWNpbmcpICsgcGVyLWVsZW1lbnRcbiAqIGNsYXNzIG92ZXJyaWRlcyAoZWxlbWVudHM6IHsgZm9ybUJ1dHRvblByaW1hcnk6IFwi4oCmXCIgfSkuIE5vIGlmcmFtZSDigJQgY29tcG9uZW50c1xuICogcmVuZGVyIGluIHRoZSBob3N0IERPTSBzbyBUYWlsd2luZC9DU1MganVzdCB3b3Jrcy5cIlxuICpcbiAqIFJlbmRlcmluZyBpbiB0aGUgaG9zdCBET00gaXMgdGhlIGRlY2lzaW9uIGV2ZXJ5dGhpbmcgZWxzZSBmb2xsb3dzIGZyb20uIEFuXG4gKiBpZnJhbWUgd291bGQgaXNvbGF0ZSBzdHlsZXMgcGVyZmVjdGx5IGFuZCBiZSB1bnVzYWJsZTogaXQgY2Fubm90IGJlIHNpemVkIHRvXG4gKiBpdHMgY29udGVudCByZWxpYWJseSwgaXQgYnJlYWtzIHBhc3N3b3JkIG1hbmFnZXJzLCBpdCBicmVha3MgYXV0b2ZpbGwsIGFuZCBhXG4gKiBUYWlsd2luZCBjbGFzcyB0aGUgY3VzdG9tZXIgd3JpdGVzIGhhcyBubyBlZmZlY3QgaW5zaWRlIGl0LiBTaGFyaW5nIHRoZSBET01cbiAqIG1lYW5zIHRoZSBjdXN0b21lcidzIENTUyByZWFjaGVzIG91ciBtYXJrdXAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB0aGV5IHdhbnRcbiAqIGFuZCB3aGF0IG1ha2VzIGFuIG92ZXJyaWRlIHN5c3RlbSBuZWNlc3NhcnkgcmF0aGVyIHRoYW4gZGVjb3JhdGl2ZS5cbiAqXG4gKiBFbGVtZW50IGNsYXNzZXMgYXJlIEFQUEVOREVEIHRvIG91cnMsIG5ldmVyIHJlcGxhY2luZyB0aGVtLiBBIGN1c3RvbWVyIGFkZGluZ1xuICogYGNsYXNzTmFtZT1cInJvdW5kZWQteGxcImAgd2FudHMgYSByb3VuZGVyIGJ1dHRvbiwgbm90IGFuIHVuc3R5bGVkIG9uZSDigJQgYW5kXG4gKiByZXBsYWNlbWVudCBpcyBhIHN1cHBvcnQgYnVyZGVuIHdoZXJlIGV2ZXJ5IG92ZXJyaWRlIHN0YXJ0cyBieSByZWJ1aWxkaW5nIHRoZVxuICogY29tcG9uZW50J3MgYmFzZSBzdHlsZXMgZnJvbSBzY3JhdGNoLlxuICovXG5cbmltcG9ydCB7XG4gIHJlbmRlckRlc2lnbkFwcGVhcmFuY2UsXG4gIHR5cGUgQXBwZWFyYW5jZVJlbmRlcixcbiAgdHlwZSBEZXNpZ25BcHBlYXJhbmNlLFxuICB0eXBlIERlc2lnbldhcm4sXG4gIHR5cGUgSW5zdGFuY2VEZXNpZ24sXG59IGZyb20gJ0BhdGxhc2F1dGgvZGVzaWduL3J1bnRpbWUnO1xuXG5leHBvcnQgeyBpbnN0YW5jZURlc2lnbkZyb20gfSBmcm9tICdAYXRsYXNhdXRoL2Rlc2lnbi9ydW50aW1lJztcbmV4cG9ydCB0eXBlIHsgQXBwZWFyYW5jZVJlbmRlciwgQXRsYXNEZXNpZ24sIEluc3RhbmNlRGVzaWduLCBQcmVzZXRJZCB9IGZyb20gJ0BhdGxhc2F1dGgvZGVzaWduL3J1bnRpbWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlc2lnblRva2VucyB7XG4gIGNvbG9yUHJpbWFyeT86IHN0cmluZztcbiAgY29sb3JUZXh0Pzogc3RyaW5nO1xuICBjb2xvckJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIGNvbG9yRGFuZ2VyPzogc3RyaW5nO1xuICBjb2xvckJvcmRlcj86IHN0cmluZztcbiAgYm9yZGVyUmFkaXVzPzogc3RyaW5nO1xuICBmb250RmFtaWx5Pzogc3RyaW5nO1xuICBzcGFjaW5nVW5pdD86IHN0cmluZztcbn1cblxuLyoqIEV2ZXJ5IGVsZW1lbnQgYSBjdXN0b21lciBtYXkgdGFyZ2V0LiBOYW1lZCBmb3Igd2hhdCBpdCBJUywgbm90IHdoZXJlIGl0IHNpdHMuICovXG5leHBvcnQgdHlwZSBFbGVtZW50S2V5ID1cbiAgfCAncm9vdCdcbiAgfCAnY2FyZCdcbiAgfCAnaGVhZGVyVGl0bGUnXG4gIHwgJ2hlYWRlclN1YnRpdGxlJ1xuICB8ICdmb3JtRmllbGQnXG4gIHwgJ2Zvcm1GaWVsZExhYmVsJ1xuICB8ICdmb3JtRmllbGRJbnB1dCdcbiAgfCAnZm9ybUZpZWxkRXJyb3InXG4gIHwgJ2Zvcm1CdXR0b25QcmltYXJ5J1xuICB8ICdmb3JtQnV0dG9uU2Vjb25kYXJ5J1xuICB8ICdzb2NpYWxCdXR0b24nXG4gIHwgJ2RpdmlkZXJUZXh0J1xuICB8ICdmb290ZXJBY3Rpb24nXG4gIHwgJ2F2YXRhcidcbiAgfCAnbWVudSdcbiAgfCAnbWVudUl0ZW0nXG4gIHwgJ2JhZGdlJztcblxuZXhwb3J0IGludGVyZmFjZSBBcHBlYXJhbmNlIGV4dGVuZHMgRGVzaWduQXBwZWFyYW5jZSB7XG4gIC8qKiBBIHByZWJ1aWx0IHRva2VuIHRoZW1lIHRvIHN0YXJ0IGZyb20gKHByZS1kZXNpZ24tc3lzdGVtIHRoZW1lcykuICovXG4gIGJhc2VUaGVtZT86IGtleW9mIHR5cGVvZiBUSEVNRVM7XG4gIC8qKlxuICAgKiBMZWdhY3kgZGVzaWduIHRva2Vucy4gV2l0aG91dCBhIGRlc2lnbiB0aGV5IHNldCB0aGUgYC0tYXRsYXMtKmAgdmFyaWFibGVzXG4gICAqIGV4YWN0bHkgYXMgYmVmb3JlOyB3aXRoIG9uZSB0aGV5IG1hcCBvbnRvIGl0LlxuICAgKi9cbiAgdmFyaWFibGVzPzogRGVzaWduVG9rZW5zO1xuICBlbGVtZW50cz86IFBhcnRpYWw8UmVjb3JkPEVsZW1lbnRLZXksIHN0cmluZz4+O1xuICAvLyBGcm9tIERlc2lnbkFwcGVhcmFuY2U6XG4gIC8vICAgcHJlc2V0PzogUHJlc2V0SWQgICAgICAgICAgICBhIGRlc2lnbiBwcmVzZXQgKHJlcGxhY2VzIHRoZSBkYXNoYm9hcmQgZGVzaWduIGFzIHRoZSBiYXNlKVxuICAvLyAgIGRlc2lnbj86IEF0bGFzRGVzaWduICAgICAgICAgc3RydWN0dXJlZCBvdmVycmlkZXMsIGhpZ2hlc3QgcHJlY2VkZW5jZVxuICAvLyAgIGluc3RhbmNlRGVzaWduPzogYm9vbGVhbiAgICAgYXBwbHkgdGhlIGRhc2hib2FyZCBkZXNpZ24gYXV0b21hdGljYWxseSAoZGVmYXVsdCB0cnVlKVxufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9UT0tFTlM6IFJlcXVpcmVkPERlc2lnblRva2Vucz4gPSB7XG4gIGNvbG9yUHJpbWFyeTogJyM1YjViZDYnLFxuICBjb2xvclRleHQ6ICcjMWMxYzFmJyxcbiAgY29sb3JCYWNrZ3JvdW5kOiAnI2ZmZmZmZicsXG4gIGNvbG9yRGFuZ2VyOiAnI2Q2NDU0NScsXG4gIGNvbG9yQm9yZGVyOiAnI2U0ZTRlOScsXG4gIGJvcmRlclJhZGl1czogJzhweCcsXG4gIGZvbnRGYW1pbHk6ICd1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sIFwiU2Vnb2UgVUlcIiwgc2Fucy1zZXJpZicsXG4gIHNwYWNpbmdVbml0OiAnNHB4Jyxcbn07XG5cbi8qKlxuICogwqcxMC4zOiBcInByZWJ1aWx0IHRoZW1lcyBzaGlwcGVkIChkZWZhdWx0LCBkYXJrLCBuZW9icnV0YWxpc3QgYXMgYSBkZW1vIG9mIHRoZVxuICogb3ZlcnJpZGUgc3lzdGVtKVwiLiBOZW9icnV0YWxpc3QgZXhpc3RzIHRvIHByb3ZlIHRoZSB0b2tlbiBzZXQgaXMgZXhwcmVzc2l2ZVxuICogZW5vdWdoIGZvciBhIHRoZW1lIHRoYXQgbG9va3Mgbm90aGluZyBsaWtlIHRoZSBkZWZhdWx0IOKAlCBhIHRoZW1pbmcgc3lzdGVtXG4gKiB0aGF0IG9ubHkgcHJvZHVjZXMgdGFzdGVmdWwgdmFyaWF0aW9ucyBvZiBpdHNlbGYgaXMgbm90IGEgdGhlbWluZyBzeXN0ZW0uXG4gKi9cbmV4cG9ydCBjb25zdCBUSEVNRVMgPSB7XG4gIGRlZmF1bHQ6IERFRkFVTFRfVE9LRU5TLFxuICBkYXJrOiB7XG4gICAgLi4uREVGQVVMVF9UT0tFTlMsXG4gICAgY29sb3JUZXh0OiAnI2U2ZTllZicsXG4gICAgY29sb3JCYWNrZ3JvdW5kOiAnIzE0MTcxYycsXG4gICAgY29sb3JCb3JkZXI6ICcjMjQyOTMyJyxcbiAgICBjb2xvclByaW1hcnk6ICcjNmVhOGZlJyxcbiAgfSxcbiAgbmVvYnJ1dGFsaXN0OiB7XG4gICAgLi4uREVGQVVMVF9UT0tFTlMsXG4gICAgY29sb3JQcmltYXJ5OiAnI2ZmZTYwMCcsXG4gICAgY29sb3JUZXh0OiAnIzAwMDAwMCcsXG4gICAgY29sb3JCYWNrZ3JvdW5kOiAnI2ZmZmZmZicsXG4gICAgY29sb3JCb3JkZXI6ICcjMDAwMDAwJyxcbiAgICBib3JkZXJSYWRpdXM6ICcwcHgnLFxuICAgIGZvbnRGYW1pbHk6ICdcIkNvdXJpZXIgTmV3XCIsIHVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlJyxcbiAgfSxcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIFJlY29yZDxzdHJpbmcsIFJlcXVpcmVkPERlc2lnblRva2Vucz4+O1xuXG4vKipcbiAqIFJlc29sdmUgdG9rZW5zOiBkZWZhdWx0cywgdGhlbiB0aGUgYmFzZSB0aGVtZSwgdGhlbiBleHBsaWNpdCB2YXJpYWJsZXMuXG4gKlxuICogTGF0ZXIgd2lucywgYW5kIGB1bmRlZmluZWRgIG5ldmVyIG92ZXJ3cml0ZXMuIEEgY3VzdG9tZXIgc2V0dGluZyBvbmUgdmFyaWFibGVcbiAqIG9uIHRoZSBkYXJrIHRoZW1lIGV4cGVjdHMgdGhlIG90aGVyIGVsZXZlbiB0byBzdGF5IGRhcmssIG5vdCBzaWxlbnRseSByZXZlcnRcbiAqIHRvIHRoZSBsaWdodCBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVUb2tlbnMoYXBwZWFyYW5jZT86IEFwcGVhcmFuY2UpOiBSZXF1aXJlZDxEZXNpZ25Ub2tlbnM+IHtcbiAgY29uc3QgYmFzZSA9IGFwcGVhcmFuY2U/LmJhc2VUaGVtZSA/IFRIRU1FU1thcHBlYXJhbmNlLmJhc2VUaGVtZV0gOiBERUZBVUxUX1RPS0VOUztcbiAgY29uc3Qgb3ZlcnJpZGVzID0gYXBwZWFyYW5jZT8udmFyaWFibGVzID8/IHt9O1xuXG4gIGNvbnN0IHJlc29sdmVkID0geyAuLi5ERUZBVUxUX1RPS0VOUywgLi4uYmFzZSB9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvdmVycmlkZXMpKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHJlc29sdmVkW2tleSBhcyBrZXlvZiBEZXNpZ25Ub2tlbnNdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG4vKiogVG9rZW5zIGFzIENTUyBjdXN0b20gcHJvcGVydGllcywgZm9yIHRoZSBob3N0IERPTSB0byBpbmhlcml0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzc1ZhcmlhYmxlcyh0b2tlbnM6IFJlcXVpcmVkPERlc2lnblRva2Vucz4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0b2tlbnMpKSB7XG4gICAgLy8gY2FtZWxDYXNlIOKGkiAtLWF0bGFzLWtlYmFiLWNhc2UsIHdoaWNoIGlzIHdoYXQgYSBjdXN0b21lciB3cml0ZXMgaW4gQ1NTLlxuICAgIHZhcnNbYC0tYXRsYXMtJHtrZXkucmVwbGFjZSgvW0EtWl0vZywgKGMpID0+IGAtJHtjLnRvTG93ZXJDYXNlKCl9YCl9YF0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdmFycztcbn1cblxuLyoqXG4gKiBDb21iaW5lIG91ciBiYXNlIGNsYXNzIHdpdGggdGhlIGN1c3RvbWVyJ3Mgb3ZlcnJpZGUuXG4gKlxuICogQXBwZW5kZWQsIG5ldmVyIHJlcGxhY2VkIOKAlCBhIGN1c3RvbWVyIGFkZGluZyBgcm91bmRlZC14bGAgd2FudHMgYSByb3VuZGVyXG4gKiBidXR0b24sIG5vdCBhbiB1bnN0eWxlZCBvbmUuIFRoZWlycyBjb21lcyBsYXN0IHNvIGl0IHdpbnMgb24gZXF1YWxcbiAqIHNwZWNpZmljaXR5LCB3aGljaCBpcyB0aGUgYmVoYXZpb3VyIGFueW9uZSB3cml0aW5nIFRhaWx3aW5kIGV4cGVjdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc0ZvcihcbiAgZWxlbWVudDogRWxlbWVudEtleSxcbiAgYXBwZWFyYW5jZTogQXBwZWFyYW5jZSB8IHVuZGVmaW5lZCxcbiAgYmFzZTogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgb3ZlcnJpZGUgPSBhcHBlYXJhbmNlPy5lbGVtZW50cz8uW2VsZW1lbnRdO1xuICByZXR1cm4gb3ZlcnJpZGUgPyBgJHtiYXNlfSAke292ZXJyaWRlfWAgOiBiYXNlO1xufVxuXG4vLyAtLS0tIHRoZSBkZXNpZ24gc3lzdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFRoZSBsZWdhY3kgdG9rZW5zIHRoZSBkZXZlbG9wZXIgY2hvc2UgRVhQTElDSVRMWTogYSBub24tZGVmYXVsdCBgYmFzZVRoZW1lYFxuICogcGx1cyBgdmFyaWFibGVzYC4gT25seSB0aGVzZSBtYXAgb250byBhIGRlc2lnbiDigJQgdGhlIHRva2VuIGRlZmF1bHRzIG11c3Qgbm90XG4gKiBvdmVyd3JpdGUgdGhlIGRhc2hib2FyZCBkZXNpZ24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBsaWNpdFRva2VucyhhcHBlYXJhbmNlPzogQXBwZWFyYW5jZSk6IERlc2lnblRva2VucyB7XG4gIGNvbnN0IG91dDogRGVzaWduVG9rZW5zID0ge307XG4gIGlmIChhcHBlYXJhbmNlPy5iYXNlVGhlbWUgJiYgYXBwZWFyYW5jZS5iYXNlVGhlbWUgIT09ICdkZWZhdWx0Jykge1xuICAgIE9iamVjdC5hc3NpZ24ob3V0LCBUSEVNRVNbYXBwZWFyYW5jZS5iYXNlVGhlbWVdKTtcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhcHBlYXJhbmNlPy52YXJpYWJsZXMgPz8ge30pKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIG91dFtrZXkgYXMga2V5b2YgRGVzaWduVG9rZW5zXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogVHVybiBhbiBgYXBwZWFyYW5jZWAgKCsgdGhlIGluc3RhbmNlJ3MgZGFzaGJvYXJkIGRlc2lnbiBmcm9tIHRoZSBGcm9udGVuZFxuICogQVBJKSBpbnRvIHJvb3QgYXR0cmlidXRlcyBhbmQgYSBzdHlsZXNoZWV0IOKAlCB0aGUgc2FtZSBzZW1hbnRpY3MgYXNcbiAqIGBAYXRsYXNhdXRoL3JlYWN0YC4gUHJlY2VkZW5jZSwgbG93ZXN0IGZpcnN0OiBkYXNoYm9hcmQgZGVzaWduIDwgYHByZXNldGAgPFxuICogYHZhcmlhYmxlc2AgKGFuZCBhIG5vbi1kZWZhdWx0IGBiYXNlVGhlbWVgKSA8IGBkZXNpZ25gLiBXaXRob3V0IGEgZGFzaGJvYXJkXG4gKiBkZXNpZ24gYW5kIHdpdGhvdXQgYHByZXNldGAvYGRlc2lnbmAsIHRoZSBvdXRwdXQgaXMgZXhhY3RseSB0aGVcbiAqIHByZS1kZXNpZ24tc3lzdGVtIG9uZTogdGhlIHRva2VuIHZhcmlhYmxlcywgbm8gc3R5bGVzaGVldCwgbm8gYXR0cmlidXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckFwcGVhcmFuY2UoXG4gIGFwcGVhcmFuY2U6IEFwcGVhcmFuY2UgfCB1bmRlZmluZWQsXG4gIGluc3RhbmNlRGVzaWduOiBJbnN0YW5jZURlc2lnbiB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IHsgZnJvbnRlbmRBcGk/OiBzdHJpbmc7IHdhcm4/OiBEZXNpZ25XYXJuIH0gPSB7fSxcbik6IEFwcGVhcmFuY2VSZW5kZXIge1xuICByZXR1cm4gcmVuZGVyRGVzaWduQXBwZWFyYW5jZShhcHBlYXJhbmNlLCBpbnN0YW5jZURlc2lnbiwge1xuICAgIHRva2VuczogZXhwbGljaXRUb2tlbnMoYXBwZWFyYW5jZSksXG4gICAgbGVnYWN5U3R5bGU6ICgpID0+IGNzc1ZhcmlhYmxlcyhyZXNvbHZlVG9rZW5zKGFwcGVhcmFuY2UpKSxcbiAgICBmcm9udGVuZEFwaTogb3B0aW9ucy5mcm9udGVuZEFwaSxcbiAgICB3YXJuOiBvcHRpb25zLndhcm4sXG4gIH0pO1xufVxuIl19
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZWFyYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYXBwZWFyYW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUNMLHNCQUFzQixHQUt2QixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBbUQvRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQTJCO0lBQ3BELFlBQVksRUFBRSxTQUFTO0lBQ3ZCLFNBQVMsRUFBRSxTQUFTO0lBQ3BCLGVBQWUsRUFBRSxTQUFTO0lBQzFCLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLFlBQVksRUFBRSxLQUFLO0lBQ25CLFVBQVUsRUFBRSxpRUFBaUU7SUFDN0UsV0FBVyxFQUFFLEtBQUs7Q0FDbkIsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHO0lBQ3BCLE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLElBQUksRUFBRTtRQUNKLEdBQUcsY0FBYztRQUNqQixTQUFTLEVBQUUsU0FBUztRQUNwQixlQUFlLEVBQUUsU0FBUztRQUMxQixXQUFXLEVBQUUsU0FBUztRQUN0QixZQUFZLEVBQUUsU0FBUztLQUN4QjtJQUNELFlBQVksRUFBRTtRQUNaLEdBQUcsY0FBYztRQUNqQixZQUFZLEVBQUUsU0FBUztRQUN2QixTQUFTLEVBQUUsU0FBUztRQUNwQixlQUFlLEVBQUUsU0FBUztRQUMxQixXQUFXLEVBQUUsU0FBUztRQUN0QixZQUFZLEVBQUUsS0FBSztRQUNuQixVQUFVLEVBQUUsd0NBQXdDO0tBQ3JEO0NBQ3dELENBQUM7QUFFNUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxVQUF1QjtJQUNuRCxNQUFNLElBQUksR0FBRyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDbkYsTUFBTSxTQUFTLEdBQUcsVUFBVSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFFOUMsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0lBQ2hELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDckQsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLFFBQVEsQ0FBQyxHQUF5QixDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBOEI7SUFDekQsTUFBTSxJQUFJLEdBQTJCLEVBQUUsQ0FBQztJQUN4QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2xELDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDakYsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQ3RCLE9BQW1CLEVBQ25CLFVBQWtDLEVBQ2xDLElBQVk7SUFFWixNQUFNLFFBQVEsR0FBRyxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakQsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDakQsQ0FBQztBQUVELG1GQUFtRjtBQUVuRjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxVQUF1QjtJQUNwRCxNQUFNLEdBQUcsR0FBaUIsRUFBRSxDQUFDO0lBQzdCLElBQUksVUFBVSxFQUFFLFNBQVMsSUFBSSxVQUFVLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxHQUFHLENBQUMsR0FBeUIsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNsRSxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsVUFBa0MsRUFDbEMsY0FBaUQsRUFDakQsVUFBdUQsRUFBRTtJQUV6RCxPQUFPLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUU7UUFDeEQsTUFBTSxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUM7UUFDbEMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtLQUNuQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDCpzEwLjMgdGhlbWluZy5cbiAqXG4gKiBcImFwcGVhcmFuY2UgcHJvcDogZGVzaWduIHRva2VucyAoY29sb3JzLCByYWRpdXMsIGZvbnQsIHNwYWNpbmcpICsgcGVyLWVsZW1lbnRcbiAqIGNsYXNzIG92ZXJyaWRlcyAoZWxlbWVudHM6IHsgZm9ybUJ1dHRvblByaW1hcnk6IFwi4oCmXCIgfSkuIE5vIGlmcmFtZSDigJQgY29tcG9uZW50c1xuICogcmVuZGVyIGluIHRoZSBob3N0IERPTSBzbyBUYWlsd2luZC9DU1MganVzdCB3b3Jrcy5cIlxuICpcbiAqIFJlbmRlcmluZyBpbiB0aGUgaG9zdCBET00gaXMgdGhlIGRlY2lzaW9uIGV2ZXJ5dGhpbmcgZWxzZSBmb2xsb3dzIGZyb20uIEFuXG4gKiBpZnJhbWUgd291bGQgaXNvbGF0ZSBzdHlsZXMgcGVyZmVjdGx5IGFuZCBiZSB1bnVzYWJsZTogaXQgY2Fubm90IGJlIHNpemVkIHRvXG4gKiBpdHMgY29udGVudCByZWxpYWJseSwgaXQgYnJlYWtzIHBhc3N3b3JkIG1hbmFnZXJzLCBpdCBicmVha3MgYXV0b2ZpbGwsIGFuZCBhXG4gKiBUYWlsd2luZCBjbGFzcyB0aGUgY3VzdG9tZXIgd3JpdGVzIGhhcyBubyBlZmZlY3QgaW5zaWRlIGl0LiBTaGFyaW5nIHRoZSBET01cbiAqIG1lYW5zIHRoZSBjdXN0b21lcidzIENTUyByZWFjaGVzIG91ciBtYXJrdXAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB0aGV5IHdhbnRcbiAqIGFuZCB3aGF0IG1ha2VzIGFuIG92ZXJyaWRlIHN5c3RlbSBuZWNlc3NhcnkgcmF0aGVyIHRoYW4gZGVjb3JhdGl2ZS5cbiAqXG4gKiBFbGVtZW50IGNsYXNzZXMgYXJlIEFQUEVOREVEIHRvIG91cnMsIG5ldmVyIHJlcGxhY2luZyB0aGVtLiBBIGN1c3RvbWVyIGFkZGluZ1xuICogYGNsYXNzTmFtZT1cInJvdW5kZWQteGxcImAgd2FudHMgYSByb3VuZGVyIGJ1dHRvbiwgbm90IGFuIHVuc3R5bGVkIG9uZSDigJQgYW5kXG4gKiByZXBsYWNlbWVudCBpcyBhIHN1cHBvcnQgYnVyZGVuIHdoZXJlIGV2ZXJ5IG92ZXJyaWRlIHN0YXJ0cyBieSByZWJ1aWxkaW5nIHRoZVxuICogY29tcG9uZW50J3MgYmFzZSBzdHlsZXMgZnJvbSBzY3JhdGNoLlxuICovXG5cbmltcG9ydCB7XG4gIHJlbmRlckRlc2lnbkFwcGVhcmFuY2UsXG4gIHR5cGUgQXBwZWFyYW5jZVJlbmRlcixcbiAgdHlwZSBEZXNpZ25BcHBlYXJhbmNlLFxuICB0eXBlIERlc2lnbldhcm4sXG4gIHR5cGUgSW5zdGFuY2VEZXNpZ24sXG59IGZyb20gJ0BhdGxhc2F1dGgvZGVzaWduL3J1bnRpbWUnO1xuXG5leHBvcnQgeyBpbnN0YW5jZURlc2lnbkZyb20gfSBmcm9tICdAYXRsYXNhdXRoL2Rlc2lnbi9ydW50aW1lJztcbmV4cG9ydCB0eXBlIHsgQXBwZWFyYW5jZVJlbmRlciwgQXRsYXNEZXNpZ24sIEluc3RhbmNlRGVzaWduLCBQcmVzZXRJZCB9IGZyb20gJ0BhdGxhc2F1dGgvZGVzaWduL3J1bnRpbWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlc2lnblRva2VucyB7XG4gIGNvbG9yUHJpbWFyeT86IHN0cmluZztcbiAgY29sb3JUZXh0Pzogc3RyaW5nO1xuICBjb2xvckJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIGNvbG9yRGFuZ2VyPzogc3RyaW5nO1xuICBjb2xvckJvcmRlcj86IHN0cmluZztcbiAgYm9yZGVyUmFkaXVzPzogc3RyaW5nO1xuICBmb250RmFtaWx5Pzogc3RyaW5nO1xuICBzcGFjaW5nVW5pdD86IHN0cmluZztcbn1cblxuLyoqIEV2ZXJ5IGVsZW1lbnQgYSBjdXN0b21lciBtYXkgdGFyZ2V0LiBOYW1lZCBmb3Igd2hhdCBpdCBJUywgbm90IHdoZXJlIGl0IHNpdHMuICovXG5leHBvcnQgdHlwZSBFbGVtZW50S2V5ID1cbiAgfCAncm9vdCdcbiAgfCAnY2FyZCdcbiAgfCAnaGVhZGVyVGl0bGUnXG4gIHwgJ2hlYWRlclN1YnRpdGxlJ1xuICB8ICdmb3JtRmllbGQnXG4gIHwgJ2Zvcm1GaWVsZExhYmVsJ1xuICB8ICdmb3JtRmllbGRJbnB1dCdcbiAgfCAnZm9ybUZpZWxkRXJyb3InXG4gIHwgJ2Zvcm1CdXR0b25QcmltYXJ5J1xuICB8ICdmb3JtQnV0dG9uU2Vjb25kYXJ5J1xuICB8ICdzb2NpYWxCdXR0b24nXG4gIHwgJ2RpdmlkZXJUZXh0J1xuICB8ICdmb290ZXJBY3Rpb24nXG4gIHwgJ2F2YXRhcidcbiAgfCAnbWVudSdcbiAgfCAnbWVudUl0ZW0nXG4gIHwgJ2xpc3QnXG4gIHwgJ2xpc3RJdGVtJ1xuICB8ICdiYWRnZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwZWFyYW5jZSBleHRlbmRzIERlc2lnbkFwcGVhcmFuY2Uge1xuICAvKiogQSBwcmVidWlsdCB0b2tlbiB0aGVtZSB0byBzdGFydCBmcm9tIChwcmUtZGVzaWduLXN5c3RlbSB0aGVtZXMpLiAqL1xuICBiYXNlVGhlbWU/OiBrZXlvZiB0eXBlb2YgVEhFTUVTO1xuICAvKipcbiAgICogTGVnYWN5IGRlc2lnbiB0b2tlbnMuIFdpdGhvdXQgYSBkZXNpZ24gdGhleSBzZXQgdGhlIGAtLWF0bGFzLSpgIHZhcmlhYmxlc1xuICAgKiBleGFjdGx5IGFzIGJlZm9yZTsgd2l0aCBvbmUgdGhleSBtYXAgb250byBpdC5cbiAgICovXG4gIHZhcmlhYmxlcz86IERlc2lnblRva2VucztcbiAgZWxlbWVudHM/OiBQYXJ0aWFsPFJlY29yZDxFbGVtZW50S2V5LCBzdHJpbmc+PjtcbiAgLy8gRnJvbSBEZXNpZ25BcHBlYXJhbmNlOlxuICAvLyAgIHByZXNldD86IFByZXNldElkICAgICAgICAgICAgYSBkZXNpZ24gcHJlc2V0IChyZXBsYWNlcyB0aGUgZGFzaGJvYXJkIGRlc2lnbiBhcyB0aGUgYmFzZSlcbiAgLy8gICBkZXNpZ24/OiBBdGxhc0Rlc2lnbiAgICAgICAgIHN0cnVjdHVyZWQgb3ZlcnJpZGVzLCBoaWdoZXN0IHByZWNlZGVuY2VcbiAgLy8gICBpbnN0YW5jZURlc2lnbj86IGJvb2xlYW4gICAgIGFwcGx5IHRoZSBkYXNoYm9hcmQgZGVzaWduIGF1dG9tYXRpY2FsbHkgKGRlZmF1bHQgdHJ1ZSlcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVE9LRU5TOiBSZXF1aXJlZDxEZXNpZ25Ub2tlbnM+ID0ge1xuICBjb2xvclByaW1hcnk6ICcjNWI1YmQ2JyxcbiAgY29sb3JUZXh0OiAnIzFjMWMxZicsXG4gIGNvbG9yQmFja2dyb3VuZDogJyNmZmZmZmYnLFxuICBjb2xvckRhbmdlcjogJyNkNjQ1NDUnLFxuICBjb2xvckJvcmRlcjogJyNlNGU0ZTknLFxuICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICBmb250RmFtaWx5OiAndWktc2Fucy1zZXJpZiwgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBcIlNlZ29lIFVJXCIsIHNhbnMtc2VyaWYnLFxuICBzcGFjaW5nVW5pdDogJzRweCcsXG59O1xuXG4vKipcbiAqIMKnMTAuMzogXCJwcmVidWlsdCB0aGVtZXMgc2hpcHBlZCAoZGVmYXVsdCwgZGFyaywgbmVvYnJ1dGFsaXN0IGFzIGEgZGVtbyBvZiB0aGVcbiAqIG92ZXJyaWRlIHN5c3RlbSlcIi4gTmVvYnJ1dGFsaXN0IGV4aXN0cyB0byBwcm92ZSB0aGUgdG9rZW4gc2V0IGlzIGV4cHJlc3NpdmVcbiAqIGVub3VnaCBmb3IgYSB0aGVtZSB0aGF0IGxvb2tzIG5vdGhpbmcgbGlrZSB0aGUgZGVmYXVsdCDigJQgYSB0aGVtaW5nIHN5c3RlbVxuICogdGhhdCBvbmx5IHByb2R1Y2VzIHRhc3RlZnVsIHZhcmlhdGlvbnMgb2YgaXRzZWxmIGlzIG5vdCBhIHRoZW1pbmcgc3lzdGVtLlxuICovXG5leHBvcnQgY29uc3QgVEhFTUVTID0ge1xuICBkZWZhdWx0OiBERUZBVUxUX1RPS0VOUyxcbiAgZGFyazoge1xuICAgIC4uLkRFRkFVTFRfVE9LRU5TLFxuICAgIGNvbG9yVGV4dDogJyNlNmU5ZWYnLFxuICAgIGNvbG9yQmFja2dyb3VuZDogJyMxNDE3MWMnLFxuICAgIGNvbG9yQm9yZGVyOiAnIzI0MjkzMicsXG4gICAgY29sb3JQcmltYXJ5OiAnIzZlYThmZScsXG4gIH0sXG4gIG5lb2JydXRhbGlzdDoge1xuICAgIC4uLkRFRkFVTFRfVE9LRU5TLFxuICAgIGNvbG9yUHJpbWFyeTogJyNmZmU2MDAnLFxuICAgIGNvbG9yVGV4dDogJyMwMDAwMDAnLFxuICAgIGNvbG9yQmFja2dyb3VuZDogJyNmZmZmZmYnLFxuICAgIGNvbG9yQm9yZGVyOiAnIzAwMDAwMCcsXG4gICAgYm9yZGVyUmFkaXVzOiAnMHB4JyxcbiAgICBmb250RmFtaWx5OiAnXCJDb3VyaWVyIE5ld1wiLCB1aS1tb25vc3BhY2UsIG1vbm9zcGFjZScsXG4gIH0sXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBSZXF1aXJlZDxEZXNpZ25Ub2tlbnM+PjtcblxuLyoqXG4gKiBSZXNvbHZlIHRva2VuczogZGVmYXVsdHMsIHRoZW4gdGhlIGJhc2UgdGhlbWUsIHRoZW4gZXhwbGljaXQgdmFyaWFibGVzLlxuICpcbiAqIExhdGVyIHdpbnMsIGFuZCBgdW5kZWZpbmVkYCBuZXZlciBvdmVyd3JpdGVzLiBBIGN1c3RvbWVyIHNldHRpbmcgb25lIHZhcmlhYmxlXG4gKiBvbiB0aGUgZGFyayB0aGVtZSBleHBlY3RzIHRoZSBvdGhlciBlbGV2ZW4gdG8gc3RheSBkYXJrLCBub3Qgc2lsZW50bHkgcmV2ZXJ0XG4gKiB0byB0aGUgbGlnaHQgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVG9rZW5zKGFwcGVhcmFuY2U/OiBBcHBlYXJhbmNlKTogUmVxdWlyZWQ8RGVzaWduVG9rZW5zPiB7XG4gIGNvbnN0IGJhc2UgPSBhcHBlYXJhbmNlPy5iYXNlVGhlbWUgPyBUSEVNRVNbYXBwZWFyYW5jZS5iYXNlVGhlbWVdIDogREVGQVVMVF9UT0tFTlM7XG4gIGNvbnN0IG92ZXJyaWRlcyA9IGFwcGVhcmFuY2U/LnZhcmlhYmxlcyA/PyB7fTtcblxuICBjb25zdCByZXNvbHZlZCA9IHsgLi4uREVGQVVMVF9UT0tFTlMsIC4uLmJhc2UgfTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob3ZlcnJpZGVzKSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSByZXNvbHZlZFtrZXkgYXMga2V5b2YgRGVzaWduVG9rZW5zXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuLyoqIFRva2VucyBhcyBDU1MgY3VzdG9tIHByb3BlcnRpZXMsIGZvciB0aGUgaG9zdCBET00gdG8gaW5oZXJpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjc3NWYXJpYWJsZXModG9rZW5zOiBSZXF1aXJlZDxEZXNpZ25Ub2tlbnM+KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModG9rZW5zKSkge1xuICAgIC8vIGNhbWVsQ2FzZSDihpIgLS1hdGxhcy1rZWJhYi1jYXNlLCB3aGljaCBpcyB3aGF0IGEgY3VzdG9tZXIgd3JpdGVzIGluIENTUy5cbiAgICB2YXJzW2AtLWF0bGFzLSR7a2V5LnJlcGxhY2UoL1tBLVpdL2csIChjKSA9PiBgLSR7Yy50b0xvd2VyQ2FzZSgpfWApfWBdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhcnM7XG59XG5cbi8qKlxuICogQ29tYmluZSBvdXIgYmFzZSBjbGFzcyB3aXRoIHRoZSBjdXN0b21lcidzIG92ZXJyaWRlLlxuICpcbiAqIEFwcGVuZGVkLCBuZXZlciByZXBsYWNlZCDigJQgYSBjdXN0b21lciBhZGRpbmcgYHJvdW5kZWQteGxgIHdhbnRzIGEgcm91bmRlclxuICogYnV0dG9uLCBub3QgYW4gdW5zdHlsZWQgb25lLiBUaGVpcnMgY29tZXMgbGFzdCBzbyBpdCB3aW5zIG9uIGVxdWFsXG4gKiBzcGVjaWZpY2l0eSwgd2hpY2ggaXMgdGhlIGJlaGF2aW91ciBhbnlvbmUgd3JpdGluZyBUYWlsd2luZCBleHBlY3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NGb3IoXG4gIGVsZW1lbnQ6IEVsZW1lbnRLZXksXG4gIGFwcGVhcmFuY2U6IEFwcGVhcmFuY2UgfCB1bmRlZmluZWQsXG4gIGJhc2U6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG92ZXJyaWRlID0gYXBwZWFyYW5jZT8uZWxlbWVudHM/LltlbGVtZW50XTtcbiAgcmV0dXJuIG92ZXJyaWRlID8gYCR7YmFzZX0gJHtvdmVycmlkZX1gIDogYmFzZTtcbn1cblxuLy8gLS0tLSB0aGUgZGVzaWduIHN5c3RlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBUaGUgbGVnYWN5IHRva2VucyB0aGUgZGV2ZWxvcGVyIGNob3NlIEVYUExJQ0lUTFk6IGEgbm9uLWRlZmF1bHQgYGJhc2VUaGVtZWBcbiAqIHBsdXMgYHZhcmlhYmxlc2AuIE9ubHkgdGhlc2UgbWFwIG9udG8gYSBkZXNpZ24g4oCUIHRoZSB0b2tlbiBkZWZhdWx0cyBtdXN0IG5vdFxuICogb3ZlcndyaXRlIHRoZSBkYXNoYm9hcmQgZGVzaWduLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwbGljaXRUb2tlbnMoYXBwZWFyYW5jZT86IEFwcGVhcmFuY2UpOiBEZXNpZ25Ub2tlbnMge1xuICBjb25zdCBvdXQ6IERlc2lnblRva2VucyA9IHt9O1xuICBpZiAoYXBwZWFyYW5jZT8uYmFzZVRoZW1lICYmIGFwcGVhcmFuY2UuYmFzZVRoZW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICBPYmplY3QuYXNzaWduKG91dCwgVEhFTUVTW2FwcGVhcmFuY2UuYmFzZVRoZW1lXSk7XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXBwZWFyYW5jZT8udmFyaWFibGVzID8/IHt9KSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBvdXRba2V5IGFzIGtleW9mIERlc2lnblRva2Vuc10gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFR1cm4gYW4gYGFwcGVhcmFuY2VgICgrIHRoZSBpbnN0YW5jZSdzIGRhc2hib2FyZCBkZXNpZ24gZnJvbSB0aGUgRnJvbnRlbmRcbiAqIEFQSSkgaW50byByb290IGF0dHJpYnV0ZXMgYW5kIGEgc3R5bGVzaGVldCDigJQgdGhlIHNhbWUgc2VtYW50aWNzIGFzXG4gKiBgQGF0bGFzYXV0aC9yZWFjdGAuIFByZWNlZGVuY2UsIGxvd2VzdCBmaXJzdDogZGFzaGJvYXJkIGRlc2lnbiA8IGBwcmVzZXRgIDxcbiAqIGB2YXJpYWJsZXNgIChhbmQgYSBub24tZGVmYXVsdCBgYmFzZVRoZW1lYCkgPCBgZGVzaWduYC4gV2l0aG91dCBhIGRhc2hib2FyZFxuICogZGVzaWduIGFuZCB3aXRob3V0IGBwcmVzZXRgL2BkZXNpZ25gLCB0aGUgb3V0cHV0IGlzIGV4YWN0bHkgdGhlXG4gKiBwcmUtZGVzaWduLXN5c3RlbSBvbmU6IHRoZSB0b2tlbiB2YXJpYWJsZXMsIG5vIHN0eWxlc2hlZXQsIG5vIGF0dHJpYnV0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJBcHBlYXJhbmNlKFxuICBhcHBlYXJhbmNlOiBBcHBlYXJhbmNlIHwgdW5kZWZpbmVkLFxuICBpbnN0YW5jZURlc2lnbjogSW5zdGFuY2VEZXNpZ24gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiB7IGZyb250ZW5kQXBpPzogc3RyaW5nOyB3YXJuPzogRGVzaWduV2FybiB9ID0ge30sXG4pOiBBcHBlYXJhbmNlUmVuZGVyIHtcbiAgcmV0dXJuIHJlbmRlckRlc2lnbkFwcGVhcmFuY2UoYXBwZWFyYW5jZSwgaW5zdGFuY2VEZXNpZ24sIHtcbiAgICB0b2tlbnM6IGV4cGxpY2l0VG9rZW5zKGFwcGVhcmFuY2UpLFxuICAgIGxlZ2FjeVN0eWxlOiAoKSA9PiBjc3NWYXJpYWJsZXMocmVzb2x2ZVRva2VucyhhcHBlYXJhbmNlKSksXG4gICAgZnJvbnRlbmRBcGk6IG9wdGlvbnMuZnJvbnRlbmRBcGksXG4gICAgd2Fybjogb3B0aW9ucy53YXJuLFxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -3,7 +3,8 @@ import { isPlatformBrowser } from '@angular/common';
|
|
|
3
3
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { BehaviorSubject, Subject, combineLatest } from 'rxjs';
|
|
5
5
|
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
6
|
-
import {
|
|
6
|
+
import { AtlasOrganizationAuditLog } from './components/organization-audit-log';
|
|
7
|
+
import { FapiClient, SignOutGuard, catalogLocale, localizedErrorMessage, TokenCache, closeOAuthPopupAfterSignIn, completeOAuthPopupLanding, getProviderToken as fetchProviderToken, mapOAuthPopupPayload, msUntilRefresh, readExpiry, readRedirectResult, resolveFrontendApi, stripRedirectParams, SDK_HEADER, SignOutNotifier, getTemplateToken, reportSdkAdvisory, sdkHeaderValue, signOutReasonFromClient, configureReferralCapture, withDevBrowser, reauthenticate, } from '@atlasauth/js';
|
|
7
8
|
import { evaluate } from '@atlasauth/authz';
|
|
8
9
|
import { ATLAS_OPTIONS } from './atlas.config';
|
|
9
10
|
import { cssVariables, instanceDesignFrom, renderAppearance, resolveTokens, } from './appearance';
|
|
@@ -221,6 +222,23 @@ export class AtlasService {
|
|
|
221
222
|
return null;
|
|
222
223
|
}
|
|
223
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* The active organization's audit trail, for its admins: `state` is a signal
|
|
227
|
+
* of `{ entries, loading, forbidden, hasMore }`, one page at a time with
|
|
228
|
+
* `loadMore()`. `action` narrows it (exact, or a prefix ending in `.`). It
|
|
229
|
+
* follows the active organization; call `destroy()` when done. The peer of
|
|
230
|
+
* React's `useOrganizationAuditLog`.
|
|
231
|
+
*/
|
|
232
|
+
organizationAuditLog(options = {}) {
|
|
233
|
+
return new AtlasOrganizationAuditLog(this.createFapiClient(), this.organization$, options);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Re-authenticate the signed-in user with their password (a step-up), for an
|
|
237
|
+
* action the server answered with STEP_UP_REQUIRED. Rejects when refused.
|
|
238
|
+
*/
|
|
239
|
+
reauthenticate(password) {
|
|
240
|
+
return reauthenticate({ strategy: 'password', password }, { api: this.baseUrl, publishableKey: this.publishableKey, fetchImpl: this.doFetch, locale: this.requestLocale });
|
|
241
|
+
}
|
|
224
242
|
/** A fresh {@link FapiClient} for driving a sign-in/sign-up flow. */
|
|
225
243
|
createFapiClient() {
|
|
226
244
|
return new FapiClient({
|
|
@@ -288,6 +306,25 @@ export class AtlasService {
|
|
|
288
306
|
await this.reload();
|
|
289
307
|
return this.guard.settle(attempt, options);
|
|
290
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* End the active impersonation ("return to admin"): the impersonator's own
|
|
311
|
+
* session on this browser becomes active again with no sign-in
|
|
312
|
+
* (`resumed: true`); with none, another account signed in here is adopted,
|
|
313
|
+
* or this browser is signed out.
|
|
314
|
+
*/
|
|
315
|
+
async endImpersonation() {
|
|
316
|
+
const outcome = await this.guard.endImpersonation(this.cache.peek()?.sessionId ?? this._session.value?.id ?? null);
|
|
317
|
+
if (!outcome.ended)
|
|
318
|
+
return outcome;
|
|
319
|
+
if (!outcome.activeSessionId) {
|
|
320
|
+
this.clearLocalState('user');
|
|
321
|
+
return outcome;
|
|
322
|
+
}
|
|
323
|
+
if (outcome.jwt)
|
|
324
|
+
this.applyToken(outcome.jwt, outcome.activeSessionId);
|
|
325
|
+
await this.reload();
|
|
326
|
+
return outcome;
|
|
327
|
+
}
|
|
291
328
|
/**
|
|
292
329
|
* Switch the active organization (or `null` for the personal account). The
|
|
293
330
|
* new token carries the new org claims, so the app's permission checks update
|
|
@@ -490,4 +527,4 @@ function decodeClaims(jwt) {
|
|
|
490
527
|
return null;
|
|
491
528
|
}
|
|
492
529
|
}
|
|
493
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRsYXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYXRsYXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUVWLFdBQVcsRUFFWCxRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFDTCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGFBQWEsRUFDYixxQkFBcUIsRUFFckIsVUFBVSxFQUNWLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsZ0JBQWdCLElBQUksa0JBQWtCLEVBQ3RDLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBS25CLFVBQVUsRUFDVixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsdUJBQXVCLEVBSXZCLHdCQUF3QixFQUN4QixjQUFjLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBeUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGFBQWEsR0FJZCxNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBZ0Is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LEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQzt3R0ExZlUsWUFBWTs0R0FBWixZQUFZLGNBREMsTUFBTTs7NEZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQThmbEMsNkVBQTZFO0FBQzdFLFNBQVMsWUFBWSxDQUFDLEdBQVc7SUFDL0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3BDLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FDZixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUNyQyxDQUFDO0lBQ3JCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0YWJsZSxcbiAgT25EZXN0cm95LFxuICBQTEFURk9STV9JRCxcbiAgU2lnbmFsLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRmFwaUNsaWVudCxcbiAgU2lnbk91dEd1YXJkLFxuICBjYXRhbG9nTG9jYWxlLFxuICBsb2NhbGl6ZWRFcnJvck1lc3NhZ2UsXG4gIHR5cGUgRXJyb3JMaWtlLFxuICBUb2tlbkNhY2hlLFxuICBjbG9zZU9BdXRoUG9wdXBBZnRlclNpZ25JbixcbiAgY29tcGxldGVPQXV0aFBvcHVwTGFuZGluZyxcbiAgZ2V0UHJvdmlkZXJUb2tlbiBhcyBmZXRjaFByb3ZpZGVyVG9rZW4sXG4gIG1hcE9BdXRoUG9wdXBQYXlsb2FkLFxuICBtc1VudGlsUmVmcmVzaCxcbiAgcmVhZEV4cGlyeSxcbiAgcmVhZFJlZGlyZWN0UmVzdWx0LFxuICByZXNvbHZlRnJvbnRlbmRBcGksXG4gIHN0cmlwUmVkaXJlY3RQYXJhbXMsXG4gIHR5cGUgUHJvdmlkZXJUb2tlbixcbiAgdHlwZSBSZWRpcmVjdFJlc3VsdCxcbiAgdHlwZSBTaWduT3V0T3B0aW9ucyxcbiAgdHlwZSBTaWduT3V0UmVzdWx0LFxuICBTREtfSEVBREVSLFxuICBTaWduT3V0Tm90aWZpZXIsXG4gIGdldFRlbXBsYXRlVG9rZW4sXG4gIHJlcG9ydFNka0Fkdmlzb3J5LFxuICBzZGtIZWFkZXJWYWx1ZSxcbiAgc2lnbk91dFJlYXNvbkZyb21DbGllbnQsXG4gIHR5cGUgU2lnbk91dEV2ZW50LFxuICB0eXBlIFNpZ25PdXRMaXN0ZW5lcixcbiAgdHlwZSBTaWduT3V0UmVhc29uLFxuICBjb25maWd1cmVSZWZlcnJhbENhcHR1cmUsXG4gIHdpdGhEZXZCcm93c2VyLFxufSBmcm9tICdAYXRsYXNhdXRoL2pzJztcbmltcG9ydCB7IGV2YWx1YXRlLCB0eXBlIFByb3RlY3RDb25kaXRpb24gfSBmcm9tICdAYXRsYXNhdXRoL2F1dGh6JztcbmltcG9ydCB7IEFUTEFTX09QVElPTlMgfSBmcm9tICcuL2F0bGFzLmNvbmZpZyc7XG5pbXBvcnQge1xuICBjc3NWYXJpYWJsZXMsXG4gIGluc3RhbmNlRGVzaWduRnJvbSxcbiAgcmVuZGVyQXBwZWFyYW5jZSxcbiAgcmVzb2x2ZVRva2VucyxcbiAgdHlwZSBBcHBlYXJhbmNlLFxuICB0eXBlIEFwcGVhcmFuY2VSZW5kZXIsXG4gIHR5cGUgSW5zdGFuY2VEZXNpZ24sXG59IGZyb20gJy4vYXBwZWFyYW5jZSc7XG5pbXBvcnQgeyBFTl9VUywgd2l0aEZhbGxiYWNrLCB0eXBlIENhdGFsb2cgfSBmcm9tICcuL2kxOG4nO1xuaW1wb3J0IHR5cGUge1xuICBBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXAsXG4gIEF0bGFzU2Vzc2lvbixcbiAgQXRsYXNVc2VyLFxuICBBdXRoU3RhdHVzLFxuICBTZXNzaW9uQ2xhaW1zLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEFUTEFTX0FOR1VMQVJfU0RLIH0gZnJvbSAnLi92ZXJzaW9uJztcblxuLyoqXG4gKiBgQXRsYXNTZXJ2aWNlYCDigJQgdGhlIEFuZ3VsYXIgcGVlciBvZiBSZWFjdCdzIGA8QXRsYXNQcm92aWRlcj5gICsgaG9va3MuXG4gKlxuICogSXQgaG9sZHMgZXhhY3RseSBvbmUgdGhpbmcgdGhhdCBtYXR0ZXJzIGluIG1lbW9yeTogdGhlIHNob3J0LWxpdmVkIEpXVCwgaW4gYVxuICoge0BsaW5rIFRva2VuQ2FjaGV9LiBOb3QgbG9jYWxTdG9yYWdlLCBub3QgYSBjb29raWUgdGhpcyBjb2RlIHdyaXRlcyDigJQgdGhlXG4gKiByZWZyZXNoIHRva2VuIGlzIEh0dHBPbmx5IHNvIGJyb3dzZXIgc2NyaXB0IG5ldmVyIHRvdWNoZXMgaXQsIGFuZCB0aGUgSldUXG4gKiBsaXZlcyBvbmx5IGFzIGxvbmcgYXMgdGhlIHRhYi4gQW55dGhpbmcgcGVyc2lzdGVkIHdvdWxkIHN1cnZpdmUgdGhlIHRhYiBhbmRcbiAqIGJlY29tZSB0aGUgZmlyc3QgdGhpbmcgYW4gWFNTIHJlYWRzLlxuICpcbiAqIFJlYWN0aXZlIGF1dGggc3RhdGUgaXMgZXhwb3NlZCB0d28gd2F5cyBzbyBjYWxsZXJzIGNhbiBwaWNrIHRoZWlyIGlkaW9tOlxuICogIC0gUnhKUyBvYnNlcnZhYmxlcyAoYHVzZXIkYCwgYHNlc3Npb24kYCwgYGlzU2lnbmVkSW4kYCwg4oCmKSDigJQgdGhlIHByaW1hcnkgQVBJLFxuICogICAgdGhlIGFuYWxvZ3VlIG9mIHRoZSBSZWFjdCBob29rcycgcmV0dXJuIHZhbHVlcy5cbiAqICAtIEFuZ3VsYXIgc2lnbmFscyAoYHVzZXJgLCBgc2Vzc2lvbmAsIGBpc1NpZ25lZEluYCwg4oCmKSDigJQgdGhlIHNhbWUgdmFsdWVzIGFzXG4gKiAgICBgU2lnbmFsPFQ+YCwgZm9yIHRlbXBsYXRlcyBhbmQgYGNvbXB1dGVkKClgLlxuICpcbiAqIFRoZSBpbXBlcmF0aXZlIG1ldGhvZHMgKGBzaWduT3V0YCwgYGdldFRva2VuYCwgYGdldFByb3ZpZGVyVG9rZW5gLFxuICogYHNldEFjdGl2ZU9yZ2FuaXphdGlvbmAsIGByZWxvYWRgKSBtaXJyb3IgdGhlIGFjdGlvbnMgdGhlIGhvb2tzIHJldHVybi5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdGxhc1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnMgPSBpbmplY3QoQVRMQVNfT1BUSU9OUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNCcm93c2VyID0gaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwdWJsaXNoYWJsZUtleTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGRvRmV0Y2g6IHR5cGVvZiBmZXRjaDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gbmV3IFRva2VuQ2FjaGUoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmYXBpQ2xpZW50OiBGYXBpQ2xpZW50O1xuICBwcml2YXRlIHJlZnJlc2hUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogVGhlIHNlc3Npb25zIHRoaXMgYnJvd3NlciBzaWduZWQgb3V0IG9mICh0b21ic3RvbmVzIGluIGxvY2FsU3RvcmFnZSwgcGVyXG4gICAqIEZyb250ZW5kIEFQSSBvcmlnaW4pLCB0aGUgcmV2b2tlIGFuZCBpdHMgYmFja2dyb3VuZCByZS10cmllcy4gRXZlcnkgcmVsb2FkIC9cbiAgICogcmVmcmVzaCBhc2tzIGl0IGJlZm9yZSBhZG9wdGluZyBhIHNlc3Npb24sIHNvIGEgc2lnbi1vdXQgdGhlIHNlcnZlciBuZXZlclxuICAgKiBjb25maXJtZWQgaXMgbm90IHVuZG9uZSBieSB0aGUgc3RpbGwtdmFsaWQgcmVmcmVzaCBjb29raWUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGd1YXJkOiBTaWduT3V0R3VhcmQ7XG4gIHByaXZhdGUgc3RvcFdhdGNoaW5nU2lnbk91dDogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9nOiBDYXRhbG9nO1xuICAvKiogVGhlIGxhbmd1YWdlIGxheWVyIG9mIGBjYXRhbG9nYCAodGhlIGBsb2NhbGl6YXRpb25gIGJ1bmRsZSBhbG9uZTsgYEVOX1VTYCB3aGVuIG5vbmUpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yQ2F0YWxvZzogQ2F0YWxvZztcbiAgLyoqIFNlbnQgdG8gdGhlIEZyb250ZW5kIEFQSSBhcyBgQWNjZXB0LUxhbmd1YWdlYDogdGhlIGBsb2NhbGl6YXRpb25gIGJ1bmRsZSdzIGBsb2NhbGVgIHRhZy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0TG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEEgc2lnbi1pbiBhdHRlbXB0IGhhbmRlZCBiYWNrIGJ5IGFuIE9BdXRoIHJlZGlyZWN0IHRoYXQgc3RpbGwgbmVlZHMgYSBzZWNvbmRcbiAgICogZmFjdG9yIChubyBzZXNzaW9uIHdhcyBpc3N1ZWQpLiBOdWxsIGluIHRoZSBvcmRpbmFyeSBjYXNlOyB0aGUgYDxhdGxhcy1zaWduLWluPmBcbiAgICogZmxvdyBzZWVkcyBpdHNlbGYgZnJvbSB0aGlzIHNvIHRoZSB1c2VyIHJlc3VtZXMgYXQgdGhlIDJGQSBzdGVwLiBDYXB0dXJlZFxuICAgKiBvbmNlLCBzeW5jaHJvbm91c2x5LCBhdCBjb25zdHJ1Y3Rpb24g4oCUIGJlZm9yZSBhbnkgZmxvdyBjb21wb25lbnQgcmVhZHMgaXQuXG4gICAqL1xuICByZWFkb25seSBwZW5kaW5nQXR0ZW1wdDogeyBpZDogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9IHwgbnVsbDtcblxuICAvLyAtLS0gUmVhY3RpdmUgc3RhdGUgKHNvdXJjZSBvZiB0cnV0aCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdHVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdHVzPignbG9hZGluZycpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91c2VyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdGxhc1VzZXIgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXRsYXNTZXNzaW9uIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NsYWltcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2Vzc2lvbkNsYWltcyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZW1iZXJzaGlwcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwW10+KFtdKTtcbiAgLy8gQVRMLVMtMzAgc2lnbi1vdXQgZXZlbnRzLCBvbiBldmVyeSBwYXRoLlxuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWVyID0gbmV3IFNpZ25PdXROb3RpZmllcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zaWduT3V0ID0gbmV3IFN1YmplY3Q8U2lnbk91dEV2ZW50PigpO1xuICAvKipcbiAgICogRW1pdHMgb25jZSBlYWNoIHRpbWUgYSBzaWduZWQtaW4gdXNlciBiZWNvbWVzIHNpZ25lZCBvdXQ6IGByZWFzb25gIGlzXG4gICAqIGB1c2VyYCwgYG90aGVyX3RhYmAsIGBzZXNzaW9uX2V4cGlyZWRgLCBgcmV2b2tlZGAgKGVuZGVkIGVsc2V3aGVyZSwgc2VlbiBvblxuICAgKiB0aGUgbmV4dCB0b2tlbiByZWZyZXNoKSBvciBgdW5rbm93bmAuIFRoZSBwbGFjZSB0byByZXNldCBhbiBlbWJlZGRlZFxuICAgKiB0aGlyZCBwYXJ0eSAoYSBjaGF0IHdpZGdldCkuIEFsc28gZGlzcGF0Y2hlZCBhcyBgYXRsYXM6c2lnbm91dGAgb24gYHdpbmRvd2AuXG4gICAqL1xuICByZWFkb25seSBzaWduT3V0JDogT2JzZXJ2YWJsZTxTaWduT3V0RXZlbnQ+ID0gdGhpcy5fc2lnbk91dC5hc09ic2VydmFibGUoKTtcblxuICAvKiogVGhlIHRocmVlLXN0YXRlIGF1dGggbGlmZWN5Y2xlOiBgbG9hZGluZ2Ag4oaSIGBzaWduZWRfaW5gIHwgYHNpZ25lZF9vdXRgLiAqL1xuICByZWFkb25seSBzdGF0dXMkOiBPYnNlcnZhYmxlPEF1dGhTdGF0dXM+ID0gdGhpcy5fc3RhdHVzLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSB1c2VyJDogT2JzZXJ2YWJsZTxBdGxhc1VzZXIgfCBudWxsPiA9IHRoaXMuX3VzZXIuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IHNlc3Npb24kOiBPYnNlcnZhYmxlPEF0bGFzU2Vzc2lvbiB8IG51bGw+ID0gdGhpcy5fc2Vzc2lvbi5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgY2xhaW1zJDogT2JzZXJ2YWJsZTxTZXNzaW9uQ2xhaW1zIHwgbnVsbD4gPSB0aGlzLl9jbGFpbXMuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IG1lbWJlcnNoaXBzJDogT2JzZXJ2YWJsZTxBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXBbXT4gPVxuICAgIHRoaXMuX21lbWJlcnNoaXBzLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8qKlxuICAgKiBUcnVlIG9uY2UgdGhlIFNESyBoYXMgZmluaXNoZWQgaXRzIGZpcnN0IGJvb3QuIERpc3Rpbmd1aXNoaW5nIFwic3RpbGwgbG9hZGluZ1wiXG4gICAqIGZyb20gXCJzaWduZWQgb3V0XCIgaXMgd2hhdCBsZXRzIGEgdGVtcGxhdGUgYXZvaWQgdGhlIGZsYXNoIG9mIGEgc2lnbi1pbiBmb3JtXG4gICAqIG9uIGV2ZXJ5IHBhZ2UgbG9hZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzTG9hZGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc3RhdHVzJC5waXBlKFxuICAgIG1hcCgocykgPT4gcyAhPT0gJ2xvYWRpbmcnKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICApO1xuXG4gIHJlYWRvbmx5IGlzU2lnbmVkSW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zdGF0dXMkLnBpcGUoXG4gICAgbWFwKChzKSA9PiBzID09PSAnc2lnbmVkX2luJyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgKTtcblxuICAvKiogVGhlIGFjdGl2ZSBvcmdhbml6YXRpb24gbWVtYmVyc2hpcCwgZGVyaXZlZCBmcm9tIHRoZSB0b2tlbidzIGBvcmdfaWRgIGNsYWltLiAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb24kOiBPYnNlcnZhYmxlPEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcCB8IG51bGw+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5fbWVtYmVyc2hpcHMsXG4gICAgdGhpcy5fY2xhaW1zLFxuICBdKS5waXBlKFxuICAgIG1hcChcbiAgICAgIChbbWVtYmVyc2hpcHMsIGNsYWltc10pID0+XG4gICAgICAgIG1lbWJlcnNoaXBzLmZpbmQoKG0pID0+IG0ub3JnYW5pemF0aW9uLmlkID09PSBjbGFpbXM/Lm9yZ19pZCkgPz8gbnVsbCxcbiAgICApLFxuICApO1xuXG4gIC8vIC0tLSBTaWduYWwgbWlycm9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICByZWFkb25seSBzdGF0dXM6IFNpZ25hbDxBdXRoU3RhdHVzPiA9IHRvU2lnbmFsKHRoaXMuc3RhdHVzJCwgeyBpbml0aWFsVmFsdWU6ICdsb2FkaW5nJyB9KTtcbiAgcmVhZG9ubHkgdXNlcjogU2lnbmFsPEF0bGFzVXNlciB8IG51bGw+ID0gdG9TaWduYWwodGhpcy51c2VyJCwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG4gIHJlYWRvbmx5IHNlc3Npb246IFNpZ25hbDxBdGxhc1Nlc3Npb24gfCBudWxsPiA9IHRvU2lnbmFsKHRoaXMuc2Vzc2lvbiQsIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0pO1xuICByZWFkb25seSBjbGFpbXM6IFNpZ25hbDxTZXNzaW9uQ2xhaW1zIHwgbnVsbD4gPSB0b1NpZ25hbCh0aGlzLmNsYWltcyQsIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0pO1xuICByZWFkb25seSBtZW1iZXJzaGlwczogU2lnbmFsPEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcFtdPiA9IHRvU2lnbmFsKHRoaXMubWVtYmVyc2hpcHMkLCB7XG4gICAgaW5pdGlhbFZhbHVlOiBbXSBhcyBBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXBbXSxcbiAgfSk7XG4gIHJlYWRvbmx5IGlzTG9hZGVkOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXR1cygpICE9PSAnbG9hZGluZycpO1xuICByZWFkb25seSBpc1NpZ25lZEluOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXR1cygpID09PSAnc2lnbmVkX2luJyk7XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogU2lnbmFsPEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcCB8IG51bGw+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5jbGFpbXMoKT8ub3JnX2lkO1xuICAgIHJldHVybiB0aGlzLm1lbWJlcnNoaXBzKCkuZmluZCgobSkgPT4gbS5vcmdhbml6YXRpb24uaWQgPT09IG9yZ0lkKSA/PyBudWxsO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMucHVibGlzaGFibGVLZXkgPSBvcHRpb25zLnB1Ymxpc2hhYmxlS2V5O1xuICAgIC8vIFRocm93cyBhbiBgQXRsYXNDb25maWdFcnJvcmAgb24gYSBtaXNzaW5nL2ludmFsaWQgdmFsdWUgcmF0aGVyIHRoYW4gcXVpZXRseVxuICAgIC8vIHNlbmRpbmcgZXZlcnkgcmVxdWVzdCB0byBhIHJlbGF0aXZlIHBhdGggb24gdGhlIGFwcCdzIG9yaWdpbi5cbiAgICB0aGlzLmJhc2VVcmwgPSByZXNvbHZlRnJvbnRlbmRBcGkob3B0aW9ucy5mcm9udGVuZEFwaSwge1xuICAgICAgY29tcG9uZW50OiAncHJvdmlkZUF0bGFzKCkgLyBBdGxhc01vZHVsZS5mb3JSb290KCknLFxuICAgIH0pO1xuICAgIC8vIERldmVsb3BtZW50IGluc3RhbmNlcyBrZWVwIHRoZSBzZXNzaW9uIGluIGEgaGVhZGVyIHdoZXJlIHRoZSBicm93c2VyIGJsb2NrcyB0aGUgY29va2llLlxuICAgIHRoaXMuZG9GZXRjaCA9IHdpdGhEZXZCcm93c2VyKFxuICAgICAgb3B0aW9ucy5wdWJsaXNoYWJsZUtleSxcbiAgICAgIG9wdGlvbnMuZmV0Y2hJbXBsID8/ICgoLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgZmV0Y2g+KSA9PiBmZXRjaCguLi5hcmdzKSksXG4gICAgKTtcblxuICAgIHRoaXMuY2F0YWxvZyA9IG9wdGlvbnMubG9jYWxpemF0aW9uID8gd2l0aEZhbGxiYWNrKG9wdGlvbnMubG9jYWxpemF0aW9uKSA6IEVOX1VTO1xuICAgIHRoaXMuZXJyb3JDYXRhbG9nID0gb3B0aW9ucy5sb2NhbGl6YXRpb24gPz8gRU5fVVM7XG4gICAgdGhpcy5yZXF1ZXN0TG9jYWxlID0gY2F0YWxvZ0xvY2FsZShvcHRpb25zLmxvY2FsaXphdGlvbik7XG5cbiAgICAvLyBSZWZlcnJhbCBhdHRyaWJ1dGlvbjogYXBwLXdpZGUgb3B0aW9ucyBldmVyeSBGQVBJIGNsaWVudCBvbiB0aGUgcGFnZSBmYWxscyBiYWNrIHRvLlxuICAgIGNvbmZpZ3VyZVJlZmVycmFsQ2FwdHVyZSh7IHJlZmVycmFsOiBvcHRpb25zLnJlZmVycmFsLCByZWZlcnJhbENvbnNlbnQ6IG9wdGlvbnMucmVmZXJyYWxDb25zZW50IH0pO1xuICAgIHRoaXMuZmFwaUNsaWVudCA9IG5ldyBGYXBpQ2xpZW50KHtcbiAgICAgIHB1Ymxpc2hhYmxlS2V5OiB0aGlzLnB1Ymxpc2hhYmxlS2V5LFxuICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgZmV0Y2hJbXBsOiB0aGlzLmRvRmV0Y2gsXG4gICAgICBsb2NhbGU6IHRoaXMucmVxdWVzdExvY2FsZSxcbiAgICAgIHNkazogQVRMQVNfQU5HVUxBUl9TREssXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vdGlmaWVyLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMuX3NpZ25PdXQubmV4dChldmVudCkpO1xuICAgIGlmIChvcHRpb25zLm9uU2lnbk91dCkgdGhpcy5ub3RpZmllci5zdWJzY3JpYmUob3B0aW9ucy5vblNpZ25PdXQpO1xuXG4gICAgdGhpcy5ndWFyZCA9IG5ldyBTaWduT3V0R3VhcmQoe1xuICAgICAgcmVxdWVzdDogKHBhdGgsIGluaXQpID0+IHRoaXMuY2FsbChwYXRoLCBpbml0KSxcbiAgICAgIGZyb250ZW5kQXBpOiB0aGlzLmJhc2VVcmwsXG4gICAgfSk7XG5cbiAgICAvLyBDYXB0dXJlZCBzeW5jaHJvbm91c2x5IChub3QgaW4gYW4gYXN5bmMgaW5pdCkgc28gaXQgaXMgYXZhaWxhYmxlIGJlZm9yZSBhbnlcbiAgICAvLyBmbG93IGNvbXBvbmVudCByZWFkcyBpdDogYSBuZWVkc19zZWNvbmRfZmFjdG9yIHJlZGlyZWN0IGNhcnJpZXMgYSBzdGF0dXMgYnV0XG4gICAgLy8gbm8gdGlja2V0LCBhbmQgdGhhdCBpcyB3aGF0IHRoZSAyRkEgcmVzdW1lIHNlZWRzIGZyb20uXG4gICAgdGhpcy5wZW5kaW5nQXR0ZW1wdCA9IHRoaXMuaXNCcm93c2VyID8gdGhpcy5yZWFkUGVuZGluZ0F0dGVtcHQoKSA6IG51bGw7XG5cbiAgICAvLyBCb290IG9uY2UsIGJyb3dzZXIgb25seS4gT24gdGhlIHNlcnZlciB0aGVyZSBpcyBubyBjb29raWUgamFyIHRvIHJlYWQgYVxuICAgIC8vIHNlc3Npb24gZnJvbSwgc28gd2UgbGVhdmUgdGhlIHN0YXRlIGF0IGBsb2FkaW5nYCBhbmQgbGV0IGh5ZHJhdGlvbiBib290IGl0LlxuICAgIGlmICh0aGlzLmlzQnJvd3Nlcikge1xuICAgICAgLy8gQW5vdGhlciB0YWIgc2lnbmVkIG91dCBvZiBUSElTIHNlc3Npb24gKGl0cyB0b21ic3RvbmUgcmVhY2hlZCB0aGUgc2hhcmVkXG4gICAgICAvLyBzdG9yZSk6IGRyb3AgdGhlIHRva2VuIGFuZCByZS1jaGVjaywgd2hpY2ggdGhlbiByZWZ1c2VzIHRoZSBzZXNzaW9uLlxuICAgICAgdGhpcy5zdG9wV2F0Y2hpbmdTaWduT3V0ID0gdGhpcy5ndWFyZC53YXRjaChcbiAgICAgICAgKCkgPT4gdGhpcy5jYWNoZS5wZWVrKCk/LnNlc3Npb25JZCA/PyB0aGlzLl9zZXNzaW9uLnZhbHVlPy5pZCxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMubm90aWZpZXIuZXhwZWN0KCdvdGhlcl90YWInKTtcbiAgICAgICAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgICAgICAgdm9pZCB0aGlzLnJlbG9hZCgpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHZvaWQgdGhpcy5ib290KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wV2F0Y2hpbmdTaWduT3V0Py4oKTtcbiAgICB0aGlzLnN0b3BXYXRjaGluZ1NpZ25PdXQgPSBudWxsO1xuICAgIHRoaXMuZ3VhcmQuZGlzcG9zZSgpO1xuICAgIHRoaXMuY2xlYXJSZWZyZXNoVGltZXIoKTtcbiAgICB0aGlzLl9zdGF0dXMuY29tcGxldGUoKTtcbiAgICB0aGlzLl91c2VyLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc2Vzc2lvbi5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2NsYWltcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX21lbWJlcnNoaXBzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc2lnbk91dC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLy8gLS0tIENvbmZpZ3VyYXRpb24gYWNjZXNzb3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGdldCBhcHBlYXJhbmNlKCk6IEFwcGVhcmFuY2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXBwZWFyYW5jZTtcbiAgfVxuXG4gIGdldCBsb2NhbGl6YXRpb24oKTogQ2F0YWxvZyB7XG4gICAgcmV0dXJuIHRoaXMuY2F0YWxvZztcbiAgfVxuXG4gIGdldCBmcm9udGVuZEFwaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2VVcmw7XG4gIH1cblxuICAvKiogVGhlIGBBY2NlcHQtTGFuZ3VhZ2VgIHNlbnQgdG8gdGhlIEZyb250ZW5kIEFQSTogdGhlIGBsb2NhbGl6YXRpb25gIGJ1bmRsZSdzIGBsb2NhbGVgIHRhZywgaWYgYW55LiAqL1xuICBnZXQgbG9jYWxlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExvY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0byBzaG93IGZvciBhIHNlcnZlciBlcnJvciwgaW4gdGhlIGFwcCdzIGxhbmd1YWdlOiB0aGUgY2F0YWxvZydzXG4gICAqIGBlcnJvci48cmVhc29uPmAgKGxvb2tlZCB1cCBpbiB0aGUgYGxvY2FsaXphdGlvbmAgYnVuZGxlLCBvciBgRU5fVVNgIHdoZW5cbiAgICogbm9uZSBpcyBzZXQpLCBlbHNlIHRoZSBzZXJ2ZXIncyBtZXNzYWdlLCBlbHNlIGBlcnJvci5nZW5lcmljYC5cbiAgICovXG4gIGVycm9yVGV4dChlcnJvcjogRXJyb3JMaWtlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxvY2FsaXplZEVycm9yTWVzc2FnZShlcnJvciwgdGhpcy5lcnJvckNhdGFsb2csIHRoaXMuY2F0YWxvZyk7XG4gIH1cblxuICAvKiogVGhlIGNhdGFsb2cgc2VydmVyIGVycm9ycyBhcmUgbG9va2VkIHVwIGluIChzZWUge0BsaW5rIGVycm9yVGV4dH0pLiAqL1xuICBnZXQgZXJyb3JMb2NhbGl6YXRpb24oKTogQ2F0YWxvZyB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JDYXRhbG9nO1xuICB9XG5cbiAgLyoqIFRva2VucyBhcyBDU1MgY3VzdG9tIHByb3BlcnRpZXMsIGZvciBhIGhvc3QgZWxlbWVudCB0byBpbmhlcml0LiAqL1xuICBhcHBlYXJhbmNlVmFyaWFibGVzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiBjc3NWYXJpYWJsZXMocmVzb2x2ZVRva2Vucyh0aGlzLm9wdGlvbnMuYXBwZWFyYW5jZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxsIGFwcGVhcmFuY2UgcmVuZGVyIGZvciBhIHJvb3QgZWxlbWVudDogaW5saW5lIHZhcmlhYmxlcywgdGhlXG4gICAqIGBkYXRhLWF0bGFzLSpgIGF0dHJpYnV0ZXMgYW5kIHRoZSBkZXNpZ24gc3R5bGVzaGVldC4gUGFzcyB0aGUgZGFzaGJvYXJkXG4gICAqIGRlc2lnbiAoZnJvbSB7QGxpbmsgbG9hZEluc3RhbmNlRGVzaWdufSkgdG8gbGF5ZXIgY29kZSBvdmVycmlkZXMgb24gaXQg4oCUXG4gICAqIHRoZSBzYW1lIHNlbWFudGljcyBhcyBgQGF0bGFzYXV0aC9yZWFjdGAuXG4gICAqL1xuICBhcHBlYXJhbmNlUmVuZGVyKGluc3RhbmNlRGVzaWduPzogSW5zdGFuY2VEZXNpZ24gfCBudWxsKTogQXBwZWFyYW5jZVJlbmRlciB7XG4gICAgcmV0dXJuIHJlbmRlckFwcGVhcmFuY2UodGhpcy5vcHRpb25zLmFwcGVhcmFuY2UsIGluc3RhbmNlRGVzaWduID8/IG51bGwsIHtcbiAgICAgIGZyb250ZW5kQXBpOiB0aGlzLmJhc2VVcmwsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRlc2lnbiBjb25maWd1cmVkIGluIHRoZSBBdGxhcyBkYXNoYm9hcmQgKGBHRVQgL3YxL2FwcGVhcmFuY2VgKSwgb3IgbnVsbFxuICAgKiB3aGVuIHRoZXJlIGlzIG5vbmUsIGl0IGNhbm5vdCBiZSByZWFkLCBvciB0aGUgYXBwIG9wdGVkIG91dCB3aXRoXG4gICAqIGBhcHBlYXJhbmNlLmluc3RhbmNlRGVzaWduOiBmYWxzZWAuXG4gICAqL1xuICBhc3luYyBsb2FkSW5zdGFuY2VEZXNpZ24oKTogUHJvbWlzZTxJbnN0YW5jZURlc2lnbiB8IG51bGw+IHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmFwcGVhcmFuY2U/Lmluc3RhbmNlRGVzaWduID09PSBmYWxzZSkgcmV0dXJuIG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKCcvdjEvYXBwZWFyYW5jZScpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLm9rID8gaW5zdGFuY2VEZXNpZ25Gcm9tKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgOiBudWxsO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIEEgZnJlc2gge0BsaW5rIEZhcGlDbGllbnR9IGZvciBkcml2aW5nIGEgc2lnbi1pbi9zaWduLXVwIGZsb3cuICovXG4gIGNyZWF0ZUZhcGlDbGllbnQoKTogRmFwaUNsaWVudCB7XG4gICAgcmV0dXJuIG5ldyBGYXBpQ2xpZW50KHtcbiAgICAgIHB1Ymxpc2hhYmxlS2V5OiB0aGlzLnB1Ymxpc2hhYmxlS2V5LFxuICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgbG9jYWxlOiB0aGlzLnJlcXVlc3RMb2NhbGUsXG4gICAgICBzZGs6IEFUTEFTX0FOR1VMQVJfU0RLLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tIEltcGVyYXRpdmUgQVBJIChtaXJyb3JzIHRoZSBSZWFjdCBob29rcycgYWN0aW9ucykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBzZXNzaW9uJ3MgSldULCBhbHdheXMgZnJlc2g6IGlmIHRoZSBjYWNoZWQgdG9rZW4gaXMgd2l0aGluIDVzIG9mXG4gICAqIGV4cGlyeSBpdCBpcyByZWZyZXNoZWQgZmlyc3QgcmF0aGVyIHRoYW4gaGFuZGVkIG92ZXIuIE51bGwgd2hlbiBzaWduZWQgb3V0LlxuICAgKi9cbiAgLyoqIFRoZSBzZXNzaW9uIEpXVDsgd2l0aCBgeyB0ZW1wbGF0ZSB9YCBhIHNob3J0LWxpdmVkIG5hbWVkLXRlbXBsYXRlIHRva2VuIChlLmcuIGAnY2hhdGx5J2ApLiAqL1xuICBhc3luYyBnZXRUb2tlbihvcHRpb25zPzogeyB0ZW1wbGF0ZT86IHN0cmluZyB9KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKG9wdGlvbnM/LnRlbXBsYXRlKSB7XG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmNhY2hlLnBlZWsoKT8uc2Vzc2lvbklkID8/IHRoaXMuX3Nlc3Npb24udmFsdWU/LmlkID8/IG51bGw7XG4gICAgICByZXR1cm4gc2Vzc2lvbklkID8gKChhd2FpdCBnZXRUZW1wbGF0ZVRva2VuKHRoaXMuZmFwaUNsaWVudCwgc2Vzc2lvbklkLCBvcHRpb25zLnRlbXBsYXRlKSk/Lmp3dCA/PyBudWxsKSA6IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHVzYWJsZSA9IHRoaXMuY2FjaGUuZ2V0KDVfMDAwKTtcbiAgICBpZiAodXNhYmxlKSByZXR1cm4gdXNhYmxlLmp3dDtcblxuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmdldCg1XzAwMCk/Lmp3dCA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzaWduZWQtaW4gdXNlcidzIE9XTiBsaXZlIGFjY2VzcyB0b2tlbiBhdCBhIGNvbm5lY3RlZCBwcm92aWRlciAoR29vZ2xlLFxuICAgKiBHaXRIdWIsIOKApiksIHNvIHRoZSBhcHAgY2FuIGNhbGwgdGhhdCBwcm92aWRlcidzIEFQSSBmcm9tIHRoZSBicm93c2VyLiBOdWxsXG4gICAqIHdoZW4gdGhlcmUgaXMgbm8gdXNhYmxlIHRva2VuIOKAlCBubyBsaW5rZWQgYWNjb3VudCwgb3IgdGhlIHByb3ZpZGVyIGdyYW50ZWQgL1xuICAgKiBrZXB0IG5vbmUuIFRoZSBzZXJ2ZXIgcmVmcmVzaGVzIGEgc3RhbGUgdG9rZW4gb24gcmVhZDsgdGhlIHJlZnJlc2ggdG9rZW4gaXNcbiAgICogbmV2ZXIgZXhwb3NlZC5cbiAgICovXG4gIC8qKiBMaXN0ZW4gZm9yIHNpZ24tb3V0IG9uIGV2ZXJ5IHBhdGggKHNlZSB7QGxpbmsgc2lnbk91dCR9KTsgcmV0dXJucyB0aGUgdW5zdWJzY3JpYmUuICovXG4gIG9uU2lnbk91dChsaXN0ZW5lcjogU2lnbk91dExpc3RlbmVyKTogKCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZpZXIuc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxuXG4gIGdldFByb3ZpZGVyVG9rZW4ocHJvdmlkZXI6IHN0cmluZyk6IFByb21pc2U8UHJvdmlkZXJUb2tlbiB8IG51bGw+IHtcbiAgICByZXR1cm4gZmV0Y2hQcm92aWRlclRva2VuKHRoaXMuZmFwaUNsaWVudCwgcHJvdmlkZXIpO1xuICB9XG5cbiAgLyoqIEltcGVyYXRpdmUgYGhhcygpYCDigJQgdGhlIHNhbWUgZXZhbHVhdGlvbiBgKmF0bGFzUHJvdGVjdGAgcmVuZGVycyBvbi4gKi9cbiAgaGFzKGNvbmRpdGlvbjogUHJvdGVjdENvbmRpdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBldmFsdWF0ZSh0aGlzLl9jbGFpbXMudmFsdWUsIGNvbmRpdGlvbikuYWxsb3dlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2UgdGhlIGN1cnJlbnQgc2Vzc2lvbiBzZXJ2ZXItc2lkZSBhbmQgZHJvcCBhbGwgbG9jYWwgYXV0aCBzdGF0ZS5cbiAgICpcbiAgICogVGhlIHNlc3Npb24gaWQgaXMgcmVtZW1iZXJlZCBiZWZvcmUgdGhlIHJldm9rZSAoYSB0b21ic3RvbmUgc2hhcmVkIGJ5IGV2ZXJ5XG4gICAqIHRhYiksIHNvIGEgcmVsb2FkLCBhIHRva2VuIHJlZnJlc2gsIGEgc2libGluZyB0YWIgb3IgYSB0YWIgb3BlbmVkIGxhdGVyIG5ldmVyXG4gICAqIHJlLWFkb3B0cyBpdCDigJQgZXZlbiB3aGVuIHRoZSByZXZva2UgZmFpbGVkIChpdCBpcyByZXRyaWVkIG9uY2UsIHRoZW4gYWdhaW4gaW5cbiAgICogdGhlIGJhY2tncm91bmQpIGFuZCB0aGUgcmVmcmVzaCBjb29raWUgaXMgc3RpbGwgdmFsaWQuIFJlc29sdmVzXG4gICAqIGB7IHJldm9rZWQsIGFjdGl2ZVNlc3Npb25JZD8gfWA7IHdpdGggYHsgc3RyaWN0OiB0cnVlIH1gIGFuIHVuY29uZmlybWVkIHJldm9rZVxuICAgKiByZWplY3RzIHdpdGggYSBgU2lnbk91dEVycm9yYCBpbnN0ZWFkIChhZnRlciB0aGUgbG9jYWwgc2lnbi1vdXQpLiBBIHBhcmtlZFxuICAgKiBzZXNzaW9uIHRoZSBzZXJ2ZXIgcHJvbW90ZWQgb24gcmV2b2tlIGlzIGFkb3B0ZWQuIEZyb250LWNoYW5uZWwgbG9nb3V0IHJ1bnNcbiAgICogdW5sZXNzIGB7IGZyb250Y2hhbm5lbDogZmFsc2UgfWAuXG4gICAqL1xuICBhc3luYyBzaWduT3V0KG9wdGlvbnM6IFNpZ25PdXRPcHRpb25zID0ge30pOiBQcm9taXNlPFNpZ25PdXRSZXN1bHQ+IHtcbiAgICAvLyBXaXRoIG5vIGNhY2hlZCB0b2tlbiB0aGUgZ3VhcmQgZmluZHMgdGhlIGNvb2tpZSBzZXNzaW9uIGl0c2VsZlxuICAgIC8vIChHRVQgL3YxL2NsaWVudCksIHNvIGEgbWlzc2luZyBKV1QgbmV2ZXIgc2tpcHMgdGhlIHJldm9rZS5cbiAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmNhY2hlLnBlZWsoKT8uc2Vzc2lvbklkID8/IHRoaXMuX3Nlc3Npb24udmFsdWU/LmlkID8/IG51bGw7XG4gICAgdGhpcy5ub3RpZmllci5leHBlY3QoJ3VzZXInKTtcbiAgICBjb25zdCBhdHRlbXB0ID0gYXdhaXQgdGhpcy5ndWFyZC5yZXZva2Uoc2Vzc2lvbklkLCBvcHRpb25zKTtcbiAgICB0aGlzLmNsZWFyTG9jYWxTdGF0ZSgndXNlcicpO1xuICAgIGlmICh0aGlzLmd1YXJkLnByb21vdGVkKGF0dGVtcHQpKSBhd2FpdCB0aGlzLnJlbG9hZCgpO1xuICAgIHJldHVybiB0aGlzLmd1YXJkLnNldHRsZShhdHRlbXB0LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2l0Y2ggdGhlIGFjdGl2ZSBvcmdhbml6YXRpb24gKG9yIGBudWxsYCBmb3IgdGhlIHBlcnNvbmFsIGFjY291bnQpLiBUaGVcbiAgICogbmV3IHRva2VuIGNhcnJpZXMgdGhlIG5ldyBvcmcgY2xhaW1zLCBzbyB0aGUgYXBwJ3MgcGVybWlzc2lvbiBjaGVja3MgdXBkYXRlXG4gICAqIHdpdGhvdXQgYSByZS1sb2dpbi5cbiAgICovXG4gIGFzeW5jIHNldEFjdGl2ZU9yZ2FuaXphdGlvbihvcmdhbml6YXRpb25JZDogc3RyaW5nIHwgbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmNhY2hlLnBlZWsoKTtcbiAgICBpZiAoIWN1cnJlbnQpIHJldHVybjtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKGAvdjEvY2xpZW50L3Nlc3Npb25zLyR7Y3VycmVudC5zZXNzaW9uSWR9L3RvdWNoYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGl2ZV9vcmdhbml6YXRpb25faWQ6IG9yZ2FuaXphdGlvbklkIH0pLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHJldHVybjtcblxuICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IGp3dDogc3RyaW5nIH07XG4gICAgdGhpcy5hcHBseVRva2VuKGJvZHkuand0LCBjdXJyZW50LnNlc3Npb25JZCk7XG4gICAgYXdhaXQgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIC8qKiBSZS1yZWFkIGAvdjEvY2xpZW50YDogcmVmcmVzaCB1c2VyLCBzZXNzaW9uLCBtZW1iZXJzaGlwcyBhbmQgc3RhdHVzLiAqL1xuICAvKiogUmUtYm9vdCBmcm9tIHRoZSBGcm9udGVuZCBBUEkuIFJlc29sdmVzIHRydWUgd2hlbiBhIHNlc3Npb24gbm93IGV4aXN0cyBpbiB0aGlzIGJyb3dzZXIuICovXG4gIGFzeW5jIHJlbG9hZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGwoJy92MS9jbGllbnQnKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcignYm9vdCBmYWlsZWQnKTtcblxuICAgICAgY29uc3QgYm9keSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgICAgc2Vzc2lvbjogQXRsYXNTZXNzaW9uIHwgbnVsbDtcbiAgICAgICAgdXNlcjogQXRsYXNVc2VyIHwgbnVsbDtcbiAgICAgICAgand0Pzogc3RyaW5nO1xuICAgICAgICBvcmdhbml6YXRpb25fbWVtYmVyc2hpcHM/OiBBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXBbXTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEEgc2Vzc2lvbiB0aGlzIGJyb3dzZXIgc2lnbmVkIG91dCBvZiBpcyBuZXZlciByZS1hZG9wdGVkIGZyb20gdGhlXG4gICAgICAvLyByZWZyZXNoIGNvb2tpZTsgdGhlIGd1YXJkIHJlLXRyaWVzIGl0cyByZXZva2UgaW4gdGhlIGJhY2tncm91bmQuXG4gICAgICBpZiAoIWJvZHkuc2Vzc2lvbiB8fCAhYm9keS51c2VyIHx8IHRoaXMuZ3VhcmQucmVmdXNlKGJvZHkuc2Vzc2lvbi5pZCkpIHtcbiAgICAgICAgdGhpcy5jbGVhckxvY2FsU3RhdGUoYm9keS5zZXNzaW9uID8gJ290aGVyX3RhYicgOiBzaWduT3V0UmVhc29uRnJvbUNsaWVudChib2R5KSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm90aWZpZXIuY2xlYXIoKTtcblxuICAgICAgdGhpcy5fdXNlci5uZXh0KGJvZHkudXNlcik7XG4gICAgICB0aGlzLl9zZXNzaW9uLm5leHQoYm9keS5zZXNzaW9uKTtcbiAgICAgIHRoaXMuX21lbWJlcnNoaXBzLm5leHQoYm9keS5vcmdhbml6YXRpb25fbWVtYmVyc2hpcHMgPz8gW10pO1xuICAgICAgaWYgKGJvZHkuand0KSB0aGlzLmFwcGx5VG9rZW4oYm9keS5qd3QsIGJvZHkuc2Vzc2lvbi5pZCk7XG4gICAgICB0aGlzLl9zdGF0dXMubmV4dCgnc2lnbmVkX2luJyk7XG4gICAgICB0aGlzLnNjaGVkdWxlUmVmcmVzaCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBBIGZhaWxlZCBib290IGlzIE5PVCBzaWduZWQtb3V0LiBSZW5kZXJpbmcgYSBzaWduLWluIGZvcm0gYmVjYXVzZSB0aGVcbiAgICAgIC8vIG5ldHdvcmsgaGljY3VwZWQgdGhyb3dzIGF3YXkgYSBwZXJmZWN0bHkgZ29vZCBzZXNzaW9uIGFuZCBmb3JjZXMgYVxuICAgICAgLy8gbmVlZGxlc3MgcmUtYXV0aGVudGljYXRpb24uIE9ubHkgcHJvbW90ZSBsb2FkaW5nIOKGkiBzaWduZWRfb3V0LlxuICAgICAgaWYgKHRoaXMuX3N0YXR1cy52YWx1ZSA9PT0gJ2xvYWRpbmcnKSB0aGlzLl9zdGF0dXMubmV4dCgnc2lnbmVkX291dCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBJbnRlcm5hbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogwqc2LjMgc3RlcCAzOiBjb21wbGV0ZSBhIHJlZGlyZWN0LWJhc2VkIHNpZ24taW4sIHRoZW4gYm9vdC4gQW4gT0F1dGggb3JcbiAgICogaG9zdGVkLXBhZ2UgZmxvdyBsYW5kcyBiYWNrIHdpdGggYSBvbmUtdGltZSB0aWNrZXQgaW4gdGhlIFVSTDsgZXhjaGFuZ2UgaXRcbiAgICogZm9yIGNvb2tpZXMsIHNjcnViIHRoZSBVUkwgc28gYSByZWxvYWQgY2Fubm90IHJlcGxheSBpdCwgVEhFTiByZWFkIHRoZVxuICAgKiBzZXNzaW9uLiBBIHJlZGlyZWN0IGNhcnJ5aW5nIG9ubHkgYSBzdGF0dXMgKGEgc2Vjb25kIGZhY3RvciBpcyBzdGlsbCBvd2VkKVxuICAgKiBoYXMgbm8gdGlja2V0LCBzbyBub3RoaW5nIGlzIGV4Y2hhbmdlZCBhbmQgdGhlIGFwcCBib290cyBzaWduZWQtb3V0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBib290KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZyb21VcmwgPSByZWFkUmVkaXJlY3RSZXN1bHQod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgbGV0IHJlc3VsdDogUmVkaXJlY3RSZXN1bHQgfCBudWxsID0gZnJvbVVybDtcblxuICAgIC8vIMKnb2F1dGggcG9wdXAgbW9kZTogdGhpcyBwYWdlIG1heSBiZSB0aGUgbGFuZGluZyBvZiBhIHNpZ24taW4gcG9wdXAgd2hvc2VcbiAgICAvLyBvcGVuZXIgYSBDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeSBzZXZlcmVkIChgI2F0bGFzX3BvcHVwX3Jlc3VsdD3igKZgKS5cbiAgICAvLyBUaGUgcmVzdWx0IGlzIHJlbGF5ZWQgdG8gdGhlIG9wZW5lciwgd2hpY2ggcmVkZWVtcyB0aGUgdGlja2V0LCBhbmQgdGhpc1xuICAgIC8vIHdpbmRvdyBjbG9zZXMuIElmIG5vIG9wZW5lciB0YWtlcyBpdCAoaXRzIHRhYiBpcyBnb25lKSwgZmluaXNoIGhlcmUgbGlrZVxuICAgIC8vIGEgcmVkaXJlY3QuXG4gICAgY29uc3QgbGFuZGluZyA9IGF3YWl0IGNvbXBsZXRlT0F1dGhQb3B1cExhbmRpbmcoKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICBpZiAobGFuZGluZyAmJiAhbGFuZGluZy5kZWxpdmVyZWQpIHtcbiAgICAgIGNvbnN0IG91dGNvbWUgPSBtYXBPQXV0aFBvcHVwUGF5bG9hZChsYW5kaW5nLnBheWxvYWQpO1xuICAgICAgaWYgKG91dGNvbWU/LnRpY2tldCAmJiBvdXRjb21lLmF0dGVtcHRJZCkge1xuICAgICAgICByZXN1bHQgPSB7IGF0dGVtcHRJZDogb3V0Y29tZS5hdHRlbXB0SWQsIHRpY2tldDogb3V0Y29tZS50aWNrZXQgfTtcbiAgICAgIH0gZWxzZSBpZiAob3V0Y29tZT8uY29udGludWF0aW9uVXJsKSB7XG4gICAgICAgIC8vIEEgc2Vjb25kIGZhY3RvciAvIGNvbm5lY3Qgc3RlcCAvIHByb3ZpZGVyIGVycm9yOiB0aGUgcmVkaXJlY3QgZmxvdydzIHBhZ2UuXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKG91dGNvbWUuY29udGludWF0aW9uVXJsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBleGNoYW5nZWQgPSBmYWxzZTtcbiAgICBpZiAocmVzdWx0Py50aWNrZXQpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKCcvdjEvY2xpZW50L3RpY2tldHMvZXhjaGFuZ2UnLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGF0dGVtcHRfaWQ6IHJlc3VsdC5hdHRlbXB0SWQsIHRpY2tldDogcmVzdWx0LnRpY2tldCB9KSxcbiAgICAgIH0pLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICBleGNoYW5nZWQgPSAhIXJlc3BvbnNlPy5vaztcbiAgICB9XG4gICAgaWYgKGZyb21VcmwpIHtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgZG9jdW1lbnQudGl0bGUsIHN0cmlwUmVkaXJlY3RQYXJhbXMod2luZG93LmxvY2F0aW9uLmhyZWYpKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZWxvYWQoKTtcbiAgICAvLyBTaWduZWQgaW4gaW5zaWRlIHRoZSBBdGxhcyBwb3B1cCAodGhlIHJlZGlyZWN0IGZsb3cgcmFuIGluIGl0KTogaGFuZCBiYWNrXG4gICAgLy8gdG8gdGhlIHdhaXRpbmcgb3BlbmVyIGFuZCBjbG9zZS4gQSBuby1vcCBpbiBhbiBvcmRpbmFyeSB0YWIuXG4gICAgaWYgKGV4Y2hhbmdlZCkgdm9pZCBjbG9zZU9BdXRoUG9wdXBBZnRlclNpZ25JbigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkUGVuZGluZ0F0dGVtcHQoKTogeyBpZDogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9IHwgbnVsbCB7XG4gICAgY29uc3QgcmVzdWx0ID0gcmVhZFJlZGlyZWN0UmVzdWx0KHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIHJldHVybiByZXN1bHQ/LnN0YXR1cyAmJiAhcmVzdWx0LnRpY2tldFxuICAgICAgPyB7IGlkOiByZXN1bHQuYXR0ZW1wdElkLCBzdGF0dXM6IHJlc3VsdC5zdGF0dXMgfVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjYWxsKHBhdGg6IHN0cmluZywgaW5pdD86IFJlcXVlc3RJbml0KTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5kb0ZldGNoKGAke3RoaXMuYmFzZVVybH0ke3BhdGh9YCwge1xuICAgICAgLi4uaW5pdCxcbiAgICAgIC8vIENvb2tpZXMgY2FycnkgdGhlIHNlc3Npb247IGEgcmVxdWVzdCB3aXRob3V0IHRoaXMgaXMgaW5kaXN0aW5ndWlzaGFibGVcbiAgICAgIC8vIGZyb20gYmVpbmcgc2lnbmVkIG91dC5cbiAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICd4LXB1Ymxpc2hhYmxlLWtleSc6IHRoaXMucHVibGlzaGFibGVLZXksXG4gICAgICAgIC8vIE5hbWVzIHRoaXMgU0RLIHNvIHRoZSBGcm9udGVuZCBBUEkgY2FuIGZsYWcgYSB2ZXJzaW9uIHdpdGggYSBrbm93biBidWcuXG4gICAgICAgIFtTREtfSEVBREVSXTogc2RrSGVhZGVyVmFsdWUoQVRMQVNfQU5HVUxBUl9TREspLFxuICAgICAgICAuLi4oaW5pdD8uYm9keSA/IHsgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9IDoge30pLFxuICAgICAgICAuLi5pbml0Py5oZWFkZXJzLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXBvcnRTZGtBZHZpc29yeShyZXNwb25zZSwgQVRMQVNfQU5HVUxBUl9TREspO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlUb2tlbihqd3Q6IHN0cmluZywgc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBBbiBpbi1mbGlnaHQgcmVmcmVzaCBtdXN0IG5vdCByZXN1cnJlY3QgYSBzZXNzaW9uIHNpZ25lZCBvdXQgbWVhbndoaWxlLlxuICAgIGlmICh0aGlzLmd1YXJkLmlzU2lnbmVkT3V0KHNlc3Npb25JZCkpIHJldHVybjtcbiAgICBjb25zdCBleHBpcmVzQXQgPSByZWFkRXhwaXJ5KGp3dCk7XG4gICAgaWYgKCFleHBpcmVzQXQpIHJldHVybjtcblxuICAgIHRoaXMuY2FjaGUuc2V0KHsgand0LCBleHBpcmVzQXQsIHNlc3Npb25JZCB9KTtcbiAgICB0aGlzLl9jbGFpbXMubmV4dChkZWNvZGVDbGFpbXMoand0KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY2FjaGUucGVlaygpO1xuICAgIGlmICghY3VycmVudCkgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKGAvdjEvY2xpZW50L3Nlc3Npb25zLyR7Y3VycmVudC5zZXNzaW9uSWR9L3Rva2Vuc2AsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB9KTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcigncmVmcmVzaCBmYWlsZWQnKTtcblxuICAgICAgY29uc3QgYm9keSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHsgand0OiBzdHJpbmc7IHNlc3Npb25faWQ6IHN0cmluZyB9O1xuICAgICAgdGhpcy5hcHBseVRva2VuKGJvZHkuand0LCBib2R5LnNlc3Npb25faWQpO1xuICAgICAgdGhpcy5zY2hlZHVsZVJlZnJlc2goKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFRoZSBzZXNzaW9uIG1heSBnZW51aW5lbHkgYmUgZ29uZS4gUmUtYm9vdCByYXRoZXIgdGhhbiBndWVzcy5cbiAgICAgIGF3YWl0IHRoaXMucmVsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckxvY2FsU3RhdGUocmVhc29uPzogU2lnbk91dFJlYXNvbik6IHZvaWQge1xuICAgIC8vIEEgc2lnbmVkLWluIOKGkiBzaWduZWQtb3V0IHRyYW5zaXRpb24gdGVsbHMgdGhlIHNpZ24tb3V0IGxpc3RlbmVycyB3aHkuXG4gICAgY29uc3QgZW5kZWQgPVxuICAgICAgdGhpcy5fc3RhdHVzLnZhbHVlID09PSAnc2lnbmVkX2luJ1xuICAgICAgICA/ICh0aGlzLl9zZXNzaW9uLnZhbHVlPy5pZCA/PyB0aGlzLmNhY2hlLnBlZWsoKT8uc2Vzc2lvbklkID8/IG51bGwpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuY2xlYXJSZWZyZXNoVGltZXIoKTtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5fc3RhdHVzLm5leHQoJ3NpZ25lZF9vdXQnKTtcbiAgICB0aGlzLl91c2VyLm5leHQobnVsbCk7XG4gICAgdGhpcy5fc2Vzc2lvbi5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2NsYWltcy5uZXh0KG51bGwpO1xuICAgIHRoaXMuX21lbWJlcnNoaXBzLm5leHQoW10pO1xuICAgIGlmIChlbmRlZCAhPT0gdW5kZWZpbmVkKSB0aGlzLm5vdGlmaWVyLnNpZ25lZE91dChlbmRlZCwgcmVhc29uKTtcbiAgICBlbHNlIHRoaXMubm90aWZpZXIuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKiDCpzcuNDogcHJvYWN0aXZlLCBqaXR0ZXJlZCByZWZyZXNoIHNjaGVkdWxlZCBmcm9tIHRoZSB0b2tlbidzIG93biBleHBpcnkuICovXG4gIHByaXZhdGUgc2NoZWR1bGVSZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJSZWZyZXNoVGltZXIoKTtcbiAgICBpZiAodGhpcy5fc3RhdHVzLnZhbHVlICE9PSAnc2lnbmVkX2luJykgcmV0dXJuO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmNhY2hlLnBlZWsoKTtcbiAgICBpZiAoIXRva2VuKSByZXR1cm47XG5cbiAgICBjb25zdCBkZWxheSA9IG1zVW50aWxSZWZyZXNoKHsgdG9rZW4sIG5vdzogRGF0ZS5ub3coKSB9KTtcbiAgICB0aGlzLnJlZnJlc2hUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnJlZnJlc2goKSwgZGVsYXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclJlZnJlc2hUaW1lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWZyZXNoVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hUaW1lcik7XG4gICAgICB0aGlzLnJlZnJlc2hUaW1lciA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8qKiBEZWNvZGUgYSBKV1QgcGF5bG9hZCB3aXRob3V0IHZlcmlmeWluZyBpdCDigJQgYSBzY2hlZHVsaW5nL1VJIGhpbnQgb25seS4gKi9cbmZ1bmN0aW9uIGRlY29kZUNsYWltcyhqd3Q6IHN0cmluZyk6IFNlc3Npb25DbGFpbXMgfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSBqd3Quc3BsaXQoJy4nKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICBhdG9iKHBhcnRzWzFdIS5yZXBsYWNlKC8tL2csICcrJykucmVwbGFjZSgvXy9nLCAnLycpKSxcbiAgICApIGFzIFNlc3Npb25DbGFpbXM7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
|
|
530
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRsYXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYXRsYXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUVWLFdBQVcsRUFFWCxRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2hGLE9BQU8sRUFDTCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGFBQWEsRUFDYixxQkFBcUIsRUFFckIsVUFBVSxFQUNWLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsZ0JBQWdCLElBQUksa0JBQWtCLEVBQ3RDLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBT25CLFVBQVUsRUFDVixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsdUJBQXVCLEVBSXZCLHdCQUF3QixFQUN4QixjQUFjLEVBQ2QsY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQXlCLE1BQU0sa0JBQWtCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixhQUFhLEdB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QUFZLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQzt3R0FsaUJVLFlBQVk7NEdBQVosWUFBWSxjQURDLE1BQU07OzRGQUNuQixZQUFZO2tCQUR4QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7QUFzaUJsQyw2RUFBNkU7QUFDN0UsU0FBUyxZQUFZLENBQUMsR0FBVztJQUMvQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDcEMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQ3JDLENBQUM7SUFDckIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBPbkRlc3Ryb3ksXG4gIFBMQVRGT1JNX0lELFxuICBTaWduYWwsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdGxhc09yZ2FuaXphdGlvbkF1ZGl0TG9nIH0gZnJvbSAnLi9jb21wb25lbnRzL29yZ2FuaXphdGlvbi1hdWRpdC1sb2cnO1xuaW1wb3J0IHtcbiAgRmFwaUNsaWVudCxcbiAgU2lnbk91dEd1YXJkLFxuICBjYXRhbG9nTG9jYWxlLFxuICBsb2NhbGl6ZWRFcnJvck1lc3NhZ2UsXG4gIHR5cGUgRXJyb3JMaWtlLFxuICBUb2tlbkNhY2hlLFxuICBjbG9zZU9BdXRoUG9wdXBBZnRlclNpZ25JbixcbiAgY29tcGxldGVPQXV0aFBvcHVwTGFuZGluZyxcbiAgZ2V0UHJvdmlkZXJUb2tlbiBhcyBmZXRjaFByb3ZpZGVyVG9rZW4sXG4gIG1hcE9BdXRoUG9wdXBQYXlsb2FkLFxuICBtc1VudGlsUmVmcmVzaCxcbiAgcmVhZEV4cGlyeSxcbiAgcmVhZFJlZGlyZWN0UmVzdWx0LFxuICByZXNvbHZlRnJvbnRlbmRBcGksXG4gIHN0cmlwUmVkaXJlY3RQYXJhbXMsXG4gIHR5cGUgT3JnYW5pemF0aW9uQXVkaXRMb2dPcHRpb25zLFxuICB0eXBlIFByb3ZpZGVyVG9rZW4sXG4gIHR5cGUgUmVkaXJlY3RSZXN1bHQsXG4gIHR5cGUgU2lnbk91dE9wdGlvbnMsXG4gIHR5cGUgU2lnbk91dFJlc3VsdCxcbiAgdHlwZSBFbmRJbXBlcnNvbmF0aW9uUmVzdWx0LFxuICBTREtfSEVBREVSLFxuICBTaWduT3V0Tm90aWZpZXIsXG4gIGdldFRlbXBsYXRlVG9rZW4sXG4gIHJlcG9ydFNka0Fkdmlzb3J5LFxuICBzZGtIZWFkZXJWYWx1ZSxcbiAgc2lnbk91dFJlYXNvbkZyb21DbGllbnQsXG4gIHR5cGUgU2lnbk91dEV2ZW50LFxuICB0eXBlIFNpZ25PdXRMaXN0ZW5lcixcbiAgdHlwZSBTaWduT3V0UmVhc29uLFxuICBjb25maWd1cmVSZWZlcnJhbENhcHR1cmUsXG4gIHdpdGhEZXZCcm93c2VyLFxuICByZWF1dGhlbnRpY2F0ZSxcbn0gZnJvbSAnQGF0bGFzYXV0aC9qcyc7XG5pbXBvcnQgeyBldmFsdWF0ZSwgdHlwZSBQcm90ZWN0Q29uZGl0aW9uIH0gZnJvbSAnQGF0bGFzYXV0aC9hdXRoeic7XG5pbXBvcnQgeyBBVExBU19PUFRJT05TIH0gZnJvbSAnLi9hdGxhcy5jb25maWcnO1xuaW1wb3J0IHtcbiAgY3NzVmFyaWFibGVzLFxuICBpbnN0YW5jZURlc2lnbkZyb20sXG4gIHJlbmRlckFwcGVhcmFuY2UsXG4gIHJlc29sdmVUb2tlbnMsXG4gIHR5cGUgQXBwZWFyYW5jZSxcbiAgdHlwZSBBcHBlYXJhbmNlUmVuZGVyLFxuICB0eXBlIEluc3RhbmNlRGVzaWduLFxufSBmcm9tICcuL2FwcGVhcmFuY2UnO1xuaW1wb3J0IHsgRU5fVVMsIHdpdGhGYWxsYmFjaywgdHlwZSBDYXRhbG9nIH0gZnJvbSAnLi9pMThuJztcbmltcG9ydCB0eXBlIHtcbiAgQXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwLFxuICBBdGxhc1Nlc3Npb24sXG4gIEF0bGFzVXNlcixcbiAgQXV0aFN0YXR1cyxcbiAgU2Vzc2lvbkNsYWltcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBBVExBU19BTkdVTEFSX1NESyB9IGZyb20gJy4vdmVyc2lvbic7XG5cbi8qKlxuICogYEF0bGFzU2VydmljZWAg4oCUIHRoZSBBbmd1bGFyIHBlZXIgb2YgUmVhY3QncyBgPEF0bGFzUHJvdmlkZXI+YCArIGhvb2tzLlxuICpcbiAqIEl0IGhvbGRzIGV4YWN0bHkgb25lIHRoaW5nIHRoYXQgbWF0dGVycyBpbiBtZW1vcnk6IHRoZSBzaG9ydC1saXZlZCBKV1QsIGluIGFcbiAqIHtAbGluayBUb2tlbkNhY2hlfS4gTm90IGxvY2FsU3RvcmFnZSwgbm90IGEgY29va2llIHRoaXMgY29kZSB3cml0ZXMg4oCUIHRoZVxuICogcmVmcmVzaCB0b2tlbiBpcyBIdHRwT25seSBzbyBicm93c2VyIHNjcmlwdCBuZXZlciB0b3VjaGVzIGl0LCBhbmQgdGhlIEpXVFxuICogbGl2ZXMgb25seSBhcyBsb25nIGFzIHRoZSB0YWIuIEFueXRoaW5nIHBlcnNpc3RlZCB3b3VsZCBzdXJ2aXZlIHRoZSB0YWIgYW5kXG4gKiBiZWNvbWUgdGhlIGZpcnN0IHRoaW5nIGFuIFhTUyByZWFkcy5cbiAqXG4gKiBSZWFjdGl2ZSBhdXRoIHN0YXRlIGlzIGV4cG9zZWQgdHdvIHdheXMgc28gY2FsbGVycyBjYW4gcGljayB0aGVpciBpZGlvbTpcbiAqICAtIFJ4SlMgb2JzZXJ2YWJsZXMgKGB1c2VyJGAsIGBzZXNzaW9uJGAsIGBpc1NpZ25lZEluJGAsIOKApikg4oCUIHRoZSBwcmltYXJ5IEFQSSxcbiAqICAgIHRoZSBhbmFsb2d1ZSBvZiB0aGUgUmVhY3QgaG9va3MnIHJldHVybiB2YWx1ZXMuXG4gKiAgLSBBbmd1bGFyIHNpZ25hbHMgKGB1c2VyYCwgYHNlc3Npb25gLCBgaXNTaWduZWRJbmAsIOKApikg4oCUIHRoZSBzYW1lIHZhbHVlcyBhc1xuICogICAgYFNpZ25hbDxUPmAsIGZvciB0ZW1wbGF0ZXMgYW5kIGBjb21wdXRlZCgpYC5cbiAqXG4gKiBUaGUgaW1wZXJhdGl2ZSBtZXRob2RzIChgc2lnbk91dGAsIGBnZXRUb2tlbmAsIGBnZXRQcm92aWRlclRva2VuYCxcbiAqIGBzZXRBY3RpdmVPcmdhbml6YXRpb25gLCBgcmVsb2FkYCkgbWlycm9yIHRoZSBhY3Rpb25zIHRoZSBob29rcyByZXR1cm4uXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXRsYXNTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zID0gaW5qZWN0KEFUTEFTX09QVElPTlMpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHVibGlzaGFibGVLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBkb0ZldGNoOiB0eXBlb2YgZmV0Y2g7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZSA9IG5ldyBUb2tlbkNhY2hlKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmFwaUNsaWVudDogRmFwaUNsaWVudDtcbiAgcHJpdmF0ZSByZWZyZXNoVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXNzaW9ucyB0aGlzIGJyb3dzZXIgc2lnbmVkIG91dCBvZiAodG9tYnN0b25lcyBpbiBsb2NhbFN0b3JhZ2UsIHBlclxuICAgKiBGcm9udGVuZCBBUEkgb3JpZ2luKSwgdGhlIHJldm9rZSBhbmQgaXRzIGJhY2tncm91bmQgcmUtdHJpZXMuIEV2ZXJ5IHJlbG9hZCAvXG4gICAqIHJlZnJlc2ggYXNrcyBpdCBiZWZvcmUgYWRvcHRpbmcgYSBzZXNzaW9uLCBzbyBhIHNpZ24tb3V0IHRoZSBzZXJ2ZXIgbmV2ZXJcbiAgICogY29uZmlybWVkIGlzIG5vdCB1bmRvbmUgYnkgdGhlIHN0aWxsLXZhbGlkIHJlZnJlc2ggY29va2llLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBndWFyZDogU2lnbk91dEd1YXJkO1xuICBwcml2YXRlIHN0b3BXYXRjaGluZ1NpZ25PdXQ6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZzogQ2F0YWxvZztcbiAgLyoqIFRoZSBsYW5ndWFnZSBsYXllciBvZiBgY2F0YWxvZ2AgKHRoZSBgbG9jYWxpemF0aW9uYCBidW5kbGUgYWxvbmU7IGBFTl9VU2Agd2hlbiBub25lKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvckNhdGFsb2c6IENhdGFsb2c7XG4gIC8qKiBTZW50IHRvIHRoZSBGcm9udGVuZCBBUEkgYXMgYEFjY2VwdC1MYW5ndWFnZWA6IHRoZSBgbG9jYWxpemF0aW9uYCBidW5kbGUncyBgbG9jYWxlYCB0YWcuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdExvY2FsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIHNpZ24taW4gYXR0ZW1wdCBoYW5kZWQgYmFjayBieSBhbiBPQXV0aCByZWRpcmVjdCB0aGF0IHN0aWxsIG5lZWRzIGEgc2Vjb25kXG4gICAqIGZhY3RvciAobm8gc2Vzc2lvbiB3YXMgaXNzdWVkKS4gTnVsbCBpbiB0aGUgb3JkaW5hcnkgY2FzZTsgdGhlIGA8YXRsYXMtc2lnbi1pbj5gXG4gICAqIGZsb3cgc2VlZHMgaXRzZWxmIGZyb20gdGhpcyBzbyB0aGUgdXNlciByZXN1bWVzIGF0IHRoZSAyRkEgc3RlcC4gQ2FwdHVyZWRcbiAgICogb25jZSwgc3luY2hyb25vdXNseSwgYXQgY29uc3RydWN0aW9uIOKAlCBiZWZvcmUgYW55IGZsb3cgY29tcG9uZW50IHJlYWRzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGVuZGluZ0F0dGVtcHQ6IHsgaWQ6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmcgfSB8IG51bGw7XG5cbiAgLy8gLS0tIFJlYWN0aXZlIHN0YXRlIChzb3VyY2Ugb2YgdHJ1dGgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXR1cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFN0YXR1cz4oJ2xvYWRpbmcnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXNlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXRsYXNVc2VyIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF0bGFzU2Vzc2lvbiB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jbGFpbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlc3Npb25DbGFpbXMgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWVtYmVyc2hpcHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcFtdPihbXSk7XG4gIC8vIEFUTC1TLTMwIHNpZ24tb3V0IGV2ZW50cywgb24gZXZlcnkgcGF0aC5cbiAgcHJpdmF0ZSByZWFkb25seSBub3RpZmllciA9IG5ldyBTaWduT3V0Tm90aWZpZXIoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2lnbk91dCA9IG5ldyBTdWJqZWN0PFNpZ25PdXRFdmVudD4oKTtcbiAgLyoqXG4gICAqIEVtaXRzIG9uY2UgZWFjaCB0aW1lIGEgc2lnbmVkLWluIHVzZXIgYmVjb21lcyBzaWduZWQgb3V0OiBgcmVhc29uYCBpc1xuICAgKiBgdXNlcmAsIGBvdGhlcl90YWJgLCBgc2Vzc2lvbl9leHBpcmVkYCwgYHJldm9rZWRgIChlbmRlZCBlbHNld2hlcmUsIHNlZW4gb25cbiAgICogdGhlIG5leHQgdG9rZW4gcmVmcmVzaCkgb3IgYHVua25vd25gLiBUaGUgcGxhY2UgdG8gcmVzZXQgYW4gZW1iZWRkZWRcbiAgICogdGhpcmQgcGFydHkgKGEgY2hhdCB3aWRnZXQpLiBBbHNvIGRpc3BhdGNoZWQgYXMgYGF0bGFzOnNpZ25vdXRgIG9uIGB3aW5kb3dgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2lnbk91dCQ6IE9ic2VydmFibGU8U2lnbk91dEV2ZW50PiA9IHRoaXMuX3NpZ25PdXQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLyoqIFRoZSB0aHJlZS1zdGF0ZSBhdXRoIGxpZmVjeWNsZTogYGxvYWRpbmdgIOKGkiBgc2lnbmVkX2luYCB8IGBzaWduZWRfb3V0YC4gKi9cbiAgcmVhZG9ubHkgc3RhdHVzJDogT2JzZXJ2YWJsZTxBdXRoU3RhdHVzPiA9IHRoaXMuX3N0YXR1cy5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgdXNlciQ6IE9ic2VydmFibGU8QXRsYXNVc2VyIHwgbnVsbD4gPSB0aGlzLl91c2VyLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBzZXNzaW9uJDogT2JzZXJ2YWJsZTxBdGxhc1Nlc3Npb24gfCBudWxsPiA9IHRoaXMuX3Nlc3Npb24uYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IGNsYWltcyQ6IE9ic2VydmFibGU8U2Vzc2lvbkNsYWltcyB8IG51bGw+ID0gdGhpcy5fY2xhaW1zLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBtZW1iZXJzaGlwcyQ6IE9ic2VydmFibGU8QXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwW10+ID1cbiAgICB0aGlzLl9tZW1iZXJzaGlwcy5hc09ic2VydmFibGUoKTtcblxuICAvKipcbiAgICogVHJ1ZSBvbmNlIHRoZSBTREsgaGFzIGZpbmlzaGVkIGl0cyBmaXJzdCBib290LiBEaXN0aW5ndWlzaGluZyBcInN0aWxsIGxvYWRpbmdcIlxuICAgKiBmcm9tIFwic2lnbmVkIG91dFwiIGlzIHdoYXQgbGV0cyBhIHRlbXBsYXRlIGF2b2lkIHRoZSBmbGFzaCBvZiBhIHNpZ24taW4gZm9ybVxuICAgKiBvbiBldmVyeSBwYWdlIGxvYWQuXG4gICAqL1xuICByZWFkb25seSBpc0xvYWRlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnN0YXR1cyQucGlwZShcbiAgICBtYXAoKHMpID0+IHMgIT09ICdsb2FkaW5nJyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgKTtcblxuICByZWFkb25seSBpc1NpZ25lZEluJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc3RhdHVzJC5waXBlKFxuICAgIG1hcCgocykgPT4gcyA9PT0gJ3NpZ25lZF9pbicpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICk7XG5cbiAgLyoqIFRoZSBhY3RpdmUgb3JnYW5pemF0aW9uIG1lbWJlcnNoaXAsIGRlcml2ZWQgZnJvbSB0aGUgdG9rZW4ncyBgb3JnX2lkYCBjbGFpbS4gKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uJDogT2JzZXJ2YWJsZTxBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXAgfCBudWxsPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX21lbWJlcnNoaXBzLFxuICAgIHRoaXMuX2NsYWltcyxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW21lbWJlcnNoaXBzLCBjbGFpbXNdKSA9PlxuICAgICAgICBtZW1iZXJzaGlwcy5maW5kKChtKSA9PiBtLm9yZ2FuaXphdGlvbi5pZCA9PT0gY2xhaW1zPy5vcmdfaWQpID8/IG51bGwsXG4gICAgKSxcbiAgKTtcblxuICAvLyAtLS0gU2lnbmFsIG1pcnJvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcmVhZG9ubHkgc3RhdHVzOiBTaWduYWw8QXV0aFN0YXR1cz4gPSB0b1NpZ25hbCh0aGlzLnN0YXR1cyQsIHsgaW5pdGlhbFZhbHVlOiAnbG9hZGluZycgfSk7XG4gIHJlYWRvbmx5IHVzZXI6IFNpZ25hbDxBdGxhc1VzZXIgfCBudWxsPiA9IHRvU2lnbmFsKHRoaXMudXNlciQsIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0pO1xuICByZWFkb25seSBzZXNzaW9uOiBTaWduYWw8QXRsYXNTZXNzaW9uIHwgbnVsbD4gPSB0b1NpZ25hbCh0aGlzLnNlc3Npb24kLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcbiAgcmVhZG9ubHkgY2xhaW1zOiBTaWduYWw8U2Vzc2lvbkNsYWltcyB8IG51bGw+ID0gdG9TaWduYWwodGhpcy5jbGFpbXMkLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcbiAgcmVhZG9ubHkgbWVtYmVyc2hpcHM6IFNpZ25hbDxBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXBbXT4gPSB0b1NpZ25hbCh0aGlzLm1lbWJlcnNoaXBzJCwge1xuICAgIGluaXRpYWxWYWx1ZTogW10gYXMgQXRsYXNPcmdhbml6YXRpb25NZW1iZXJzaGlwW10sXG4gIH0pO1xuICByZWFkb25seSBpc0xvYWRlZDogU2lnbmFsPGJvb2xlYW4+ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0dXMoKSAhPT0gJ2xvYWRpbmcnKTtcbiAgcmVhZG9ubHkgaXNTaWduZWRJbjogU2lnbmFsPGJvb2xlYW4+ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0dXMoKSA9PT0gJ3NpZ25lZF9pbicpO1xuICByZWFkb25seSBvcmdhbml6YXRpb246IFNpZ25hbDxBdGxhc09yZ2FuaXphdGlvbk1lbWJlcnNoaXAgfCBudWxsPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuY2xhaW1zKCk/Lm9yZ19pZDtcbiAgICByZXR1cm4gdGhpcy5tZW1iZXJzaGlwcygpLmZpbmQoKG0pID0+IG0ub3JnYW5pemF0aW9uLmlkID09PSBvcmdJZCkgPz8gbnVsbDtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLnB1Ymxpc2hhYmxlS2V5ID0gb3B0aW9ucy5wdWJsaXNoYWJsZUtleTtcbiAgICAvLyBUaHJvd3MgYW4gYEF0bGFzQ29uZmlnRXJyb3JgIG9uIGEgbWlzc2luZy9pbnZhbGlkIHZhbHVlIHJhdGhlciB0aGFuIHF1aWV0bHlcbiAgICAvLyBzZW5kaW5nIGV2ZXJ5IHJlcXVlc3QgdG8gYSByZWxhdGl2ZSBwYXRoIG9uIHRoZSBhcHAncyBvcmlnaW4uXG4gICAgdGhpcy5iYXNlVXJsID0gcmVzb2x2ZUZyb250ZW5kQXBpKG9wdGlvbnMuZnJvbnRlbmRBcGksIHtcbiAgICAgIGNvbXBvbmVudDogJ3Byb3ZpZGVBdGxhcygpIC8gQXRsYXNNb2R1bGUuZm9yUm9vdCgpJyxcbiAgICB9KTtcbiAgICAvLyBEZXZlbG9wbWVudCBpbnN0YW5jZXMga2VlcCB0aGUgc2Vzc2lvbiBpbiBhIGhlYWRlciB3aGVyZSB0aGUgYnJvd3NlciBibG9ja3MgdGhlIGNvb2tpZS5cbiAgICB0aGlzLmRvRmV0Y2ggPSB3aXRoRGV2QnJvd3NlcihcbiAgICAgIG9wdGlvbnMucHVibGlzaGFibGVLZXksXG4gICAgICBvcHRpb25zLmZldGNoSW1wbCA/PyAoKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGZldGNoPikgPT4gZmV0Y2goLi4uYXJncykpLFxuICAgICk7XG5cbiAgICB0aGlzLmNhdGFsb2cgPSBvcHRpb25zLmxvY2FsaXphdGlvbiA/IHdpdGhGYWxsYmFjayhvcHRpb25zLmxvY2FsaXphdGlvbikgOiBFTl9VUztcbiAgICB0aGlzLmVycm9yQ2F0YWxvZyA9IG9wdGlvbnMubG9jYWxpemF0aW9uID8/IEVOX1VTO1xuICAgIHRoaXMucmVxdWVzdExvY2FsZSA9IGNhdGFsb2dMb2NhbGUob3B0aW9ucy5sb2NhbGl6YXRpb24pO1xuXG4gICAgLy8gUmVmZXJyYWwgYXR0cmlidXRpb246IGFwcC13aWRlIG9wdGlvbnMgZXZlcnkgRkFQSSBjbGllbnQgb24gdGhlIHBhZ2UgZmFsbHMgYmFjayB0by5cbiAgICBjb25maWd1cmVSZWZlcnJhbENhcHR1cmUoeyByZWZlcnJhbDogb3B0aW9ucy5yZWZlcnJhbCwgcmVmZXJyYWxDb25zZW50OiBvcHRpb25zLnJlZmVycmFsQ29uc2VudCB9KTtcbiAgICB0aGlzLmZhcGlDbGllbnQgPSBuZXcgRmFwaUNsaWVudCh7XG4gICAgICBwdWJsaXNoYWJsZUtleTogdGhpcy5wdWJsaXNoYWJsZUtleSxcbiAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgIGZldGNoSW1wbDogdGhpcy5kb0ZldGNoLFxuICAgICAgbG9jYWxlOiB0aGlzLnJlcXVlc3RMb2NhbGUsXG4gICAgICBzZGs6IEFUTEFTX0FOR1VMQVJfU0RLLFxuICAgIH0pO1xuXG4gICAgdGhpcy5ub3RpZmllci5zdWJzY3JpYmUoKGV2ZW50KSA9PiB0aGlzLl9zaWduT3V0Lm5leHQoZXZlbnQpKTtcbiAgICBpZiAob3B0aW9ucy5vblNpZ25PdXQpIHRoaXMubm90aWZpZXIuc3Vic2NyaWJlKG9wdGlvbnMub25TaWduT3V0KTtcblxuICAgIHRoaXMuZ3VhcmQgPSBuZXcgU2lnbk91dEd1YXJkKHtcbiAgICAgIHJlcXVlc3Q6IChwYXRoLCBpbml0KSA9PiB0aGlzLmNhbGwocGF0aCwgaW5pdCksXG4gICAgICBmcm9udGVuZEFwaTogdGhpcy5iYXNlVXJsLFxuICAgIH0pO1xuXG4gICAgLy8gQ2FwdHVyZWQgc3luY2hyb25vdXNseSAobm90IGluIGFuIGFzeW5jIGluaXQpIHNvIGl0IGlzIGF2YWlsYWJsZSBiZWZvcmUgYW55XG4gICAgLy8gZmxvdyBjb21wb25lbnQgcmVhZHMgaXQ6IGEgbmVlZHNfc2Vjb25kX2ZhY3RvciByZWRpcmVjdCBjYXJyaWVzIGEgc3RhdHVzIGJ1dFxuICAgIC8vIG5vIHRpY2tldCwgYW5kIHRoYXQgaXMgd2hhdCB0aGUgMkZBIHJlc3VtZSBzZWVkcyBmcm9tLlxuICAgIHRoaXMucGVuZGluZ0F0dGVtcHQgPSB0aGlzLmlzQnJvd3NlciA/IHRoaXMucmVhZFBlbmRpbmdBdHRlbXB0KCkgOiBudWxsO1xuXG4gICAgLy8gQm9vdCBvbmNlLCBicm93c2VyIG9ubHkuIE9uIHRoZSBzZXJ2ZXIgdGhlcmUgaXMgbm8gY29va2llIGphciB0byByZWFkIGFcbiAgICAvLyBzZXNzaW9uIGZyb20sIHNvIHdlIGxlYXZlIHRoZSBzdGF0ZSBhdCBgbG9hZGluZ2AgYW5kIGxldCBoeWRyYXRpb24gYm9vdCBpdC5cbiAgICBpZiAodGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgIC8vIEFub3RoZXIgdGFiIHNpZ25lZCBvdXQgb2YgVEhJUyBzZXNzaW9uIChpdHMgdG9tYnN0b25lIHJlYWNoZWQgdGhlIHNoYXJlZFxuICAgICAgLy8gc3RvcmUpOiBkcm9wIHRoZSB0b2tlbiBhbmQgcmUtY2hlY2ssIHdoaWNoIHRoZW4gcmVmdXNlcyB0aGUgc2Vzc2lvbi5cbiAgICAgIHRoaXMuc3RvcFdhdGNoaW5nU2lnbk91dCA9IHRoaXMuZ3VhcmQud2F0Y2goXG4gICAgICAgICgpID0+IHRoaXMuY2FjaGUucGVlaygpPy5zZXNzaW9uSWQgPz8gdGhpcy5fc2Vzc2lvbi52YWx1ZT8uaWQsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWVyLmV4cGVjdCgnb3RoZXJfdGFiJyk7XG4gICAgICAgICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgICAgICAgIHZvaWQgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICB2b2lkIHRoaXMuYm9vdCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFdhdGNoaW5nU2lnbk91dD8uKCk7XG4gICAgdGhpcy5zdG9wV2F0Y2hpbmdTaWduT3V0ID0gbnVsbDtcbiAgICB0aGlzLmd1YXJkLmRpc3Bvc2UoKTtcbiAgICB0aGlzLmNsZWFyUmVmcmVzaFRpbWVyKCk7XG4gICAgdGhpcy5fc3RhdHVzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fdXNlci5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3Nlc3Npb24uY29tcGxldGUoKTtcbiAgICB0aGlzLl9jbGFpbXMuY29tcGxldGUoKTtcbiAgICB0aGlzLl9tZW1iZXJzaGlwcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3NpZ25PdXQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8vIC0tLSBDb25maWd1cmF0aW9uIGFjY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBnZXQgYXBwZWFyYW5jZSgpOiBBcHBlYXJhbmNlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFwcGVhcmFuY2U7XG4gIH1cblxuICBnZXQgbG9jYWxpemF0aW9uKCk6IENhdGFsb2cge1xuICAgIHJldHVybiB0aGlzLmNhdGFsb2c7XG4gIH1cblxuICBnZXQgZnJvbnRlbmRBcGkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlVXJsO1xuICB9XG5cbiAgLyoqIFRoZSBgQWNjZXB0LUxhbmd1YWdlYCBzZW50IHRvIHRoZSBGcm9udGVuZCBBUEk6IHRoZSBgbG9jYWxpemF0aW9uYCBidW5kbGUncyBgbG9jYWxlYCB0YWcsIGlmIGFueS4gKi9cbiAgZ2V0IGxvY2FsZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMb2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gc2hvdyBmb3IgYSBzZXJ2ZXIgZXJyb3IsIGluIHRoZSBhcHAncyBsYW5ndWFnZTogdGhlIGNhdGFsb2cnc1xuICAgKiBgZXJyb3IuPHJlYXNvbj5gIChsb29rZWQgdXAgaW4gdGhlIGBsb2NhbGl6YXRpb25gIGJ1bmRsZSwgb3IgYEVOX1VTYCB3aGVuXG4gICAqIG5vbmUgaXMgc2V0KSwgZWxzZSB0aGUgc2VydmVyJ3MgbWVzc2FnZSwgZWxzZSBgZXJyb3IuZ2VuZXJpY2AuXG4gICAqL1xuICBlcnJvclRleHQoZXJyb3I6IEVycm9yTGlrZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIHJldHVybiBsb2NhbGl6ZWRFcnJvck1lc3NhZ2UoZXJyb3IsIHRoaXMuZXJyb3JDYXRhbG9nLCB0aGlzLmNhdGFsb2cpO1xuICB9XG5cbiAgLyoqIFRoZSBjYXRhbG9nIHNlcnZlciBlcnJvcnMgYXJlIGxvb2tlZCB1cCBpbiAoc2VlIHtAbGluayBlcnJvclRleHR9KS4gKi9cbiAgZ2V0IGVycm9yTG9jYWxpemF0aW9uKCk6IENhdGFsb2cge1xuICAgIHJldHVybiB0aGlzLmVycm9yQ2F0YWxvZztcbiAgfVxuXG4gIC8qKiBUb2tlbnMgYXMgQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzLCBmb3IgYSBob3N0IGVsZW1lbnQgdG8gaW5oZXJpdC4gKi9cbiAgYXBwZWFyYW5jZVZhcmlhYmxlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gY3NzVmFyaWFibGVzKHJlc29sdmVUb2tlbnModGhpcy5vcHRpb25zLmFwcGVhcmFuY2UpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZnVsbCBhcHBlYXJhbmNlIHJlbmRlciBmb3IgYSByb290IGVsZW1lbnQ6IGlubGluZSB2YXJpYWJsZXMsIHRoZVxuICAgKiBgZGF0YS1hdGxhcy0qYCBhdHRyaWJ1dGVzIGFuZCB0aGUgZGVzaWduIHN0eWxlc2hlZXQuIFBhc3MgdGhlIGRhc2hib2FyZFxuICAgKiBkZXNpZ24gKGZyb20ge0BsaW5rIGxvYWRJbnN0YW5jZURlc2lnbn0pIHRvIGxheWVyIGNvZGUgb3ZlcnJpZGVzIG9uIGl0IOKAlFxuICAgKiB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgYEBhdGxhc2F1dGgvcmVhY3RgLlxuICAgKi9cbiAgYXBwZWFyYW5jZVJlbmRlcihpbnN0YW5jZURlc2lnbj86IEluc3RhbmNlRGVzaWduIHwgbnVsbCk6IEFwcGVhcmFuY2VSZW5kZXIge1xuICAgIHJldHVybiByZW5kZXJBcHBlYXJhbmNlKHRoaXMub3B0aW9ucy5hcHBlYXJhbmNlLCBpbnN0YW5jZURlc2lnbiA/PyBudWxsLCB7XG4gICAgICBmcm9udGVuZEFwaTogdGhpcy5iYXNlVXJsLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNpZ24gY29uZmlndXJlZCBpbiB0aGUgQXRsYXMgZGFzaGJvYXJkIChgR0VUIC92MS9hcHBlYXJhbmNlYCksIG9yIG51bGxcbiAgICogd2hlbiB0aGVyZSBpcyBub25lLCBpdCBjYW5ub3QgYmUgcmVhZCwgb3IgdGhlIGFwcCBvcHRlZCBvdXQgd2l0aFxuICAgKiBgYXBwZWFyYW5jZS5pbnN0YW5jZURlc2lnbjogZmFsc2VgLlxuICAgKi9cbiAgYXN5bmMgbG9hZEluc3RhbmNlRGVzaWduKCk6IFByb21pc2U8SW5zdGFuY2VEZXNpZ24gfCBudWxsPiB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcHBlYXJhbmNlPy5pbnN0YW5jZURlc2lnbiA9PT0gZmFsc2UpIHJldHVybiBudWxsO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbCgnL3YxL2FwcGVhcmFuY2UnKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5vayA/IGluc3RhbmNlRGVzaWduRnJvbShhd2FpdCByZXNwb25zZS5qc29uKCkpIDogbnVsbDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYWN0aXZlIG9yZ2FuaXphdGlvbidzIGF1ZGl0IHRyYWlsLCBmb3IgaXRzIGFkbWluczogYHN0YXRlYCBpcyBhIHNpZ25hbFxuICAgKiBvZiBgeyBlbnRyaWVzLCBsb2FkaW5nLCBmb3JiaWRkZW4sIGhhc01vcmUgfWAsIG9uZSBwYWdlIGF0IGEgdGltZSB3aXRoXG4gICAqIGBsb2FkTW9yZSgpYC4gYGFjdGlvbmAgbmFycm93cyBpdCAoZXhhY3QsIG9yIGEgcHJlZml4IGVuZGluZyBpbiBgLmApLiBJdFxuICAgKiBmb2xsb3dzIHRoZSBhY3RpdmUgb3JnYW5pemF0aW9uOyBjYWxsIGBkZXN0cm95KClgIHdoZW4gZG9uZS4gVGhlIHBlZXIgb2ZcbiAgICogUmVhY3QncyBgdXNlT3JnYW5pemF0aW9uQXVkaXRMb2dgLlxuICAgKi9cbiAgb3JnYW5pemF0aW9uQXVkaXRMb2cob3B0aW9uczogT3JnYW5pemF0aW9uQXVkaXRMb2dPcHRpb25zID0ge30pOiBBdGxhc09yZ2FuaXphdGlvbkF1ZGl0TG9nIHtcbiAgICByZXR1cm4gbmV3IEF0bGFzT3JnYW5pemF0aW9uQXVkaXRMb2codGhpcy5jcmVhdGVGYXBpQ2xpZW50KCksIHRoaXMub3JnYW5pemF0aW9uJCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmUtYXV0aGVudGljYXRlIHRoZSBzaWduZWQtaW4gdXNlciB3aXRoIHRoZWlyIHBhc3N3b3JkIChhIHN0ZXAtdXApLCBmb3IgYW5cbiAgICogYWN0aW9uIHRoZSBzZXJ2ZXIgYW5zd2VyZWQgd2l0aCBTVEVQX1VQX1JFUVVJUkVELiBSZWplY3RzIHdoZW4gcmVmdXNlZC5cbiAgICovXG4gIHJlYXV0aGVudGljYXRlKHBhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gcmVhdXRoZW50aWNhdGUoXG4gICAgICB7IHN0cmF0ZWd5OiAncGFzc3dvcmQnLCBwYXNzd29yZCB9LFxuICAgICAgeyBhcGk6IHRoaXMuYmFzZVVybCwgcHVibGlzaGFibGVLZXk6IHRoaXMucHVibGlzaGFibGVLZXksIGZldGNoSW1wbDogdGhpcy5kb0ZldGNoLCBsb2NhbGU6IHRoaXMucmVxdWVzdExvY2FsZSB9LFxuICAgICk7XG4gIH1cblxuICAvKiogQSBmcmVzaCB7QGxpbmsgRmFwaUNsaWVudH0gZm9yIGRyaXZpbmcgYSBzaWduLWluL3NpZ24tdXAgZmxvdy4gKi9cbiAgY3JlYXRlRmFwaUNsaWVudCgpOiBGYXBpQ2xpZW50IHtcbiAgICByZXR1cm4gbmV3IEZhcGlDbGllbnQoe1xuICAgICAgcHVibGlzaGFibGVLZXk6IHRoaXMucHVibGlzaGFibGVLZXksXG4gICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICBsb2NhbGU6IHRoaXMucmVxdWVzdExvY2FsZSxcbiAgICAgIHNkazogQVRMQVNfQU5HVUxBUl9TREssXG4gICAgfSk7XG4gIH1cblxuICAvLyAtLS0gSW1wZXJhdGl2ZSBBUEkgKG1pcnJvcnMgdGhlIFJlYWN0IGhvb2tzJyBhY3Rpb25zKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHNlc3Npb24ncyBKV1QsIGFsd2F5cyBmcmVzaDogaWYgdGhlIGNhY2hlZCB0b2tlbiBpcyB3aXRoaW4gNXMgb2ZcbiAgICogZXhwaXJ5IGl0IGlzIHJlZnJlc2hlZCBmaXJzdCByYXRoZXIgdGhhbiBoYW5kZWQgb3Zlci4gTnVsbCB3aGVuIHNpZ25lZCBvdXQuXG4gICAqL1xuICAvKiogVGhlIHNlc3Npb24gSldUOyB3aXRoIGB7IHRlbXBsYXRlIH1gIGEgc2hvcnQtbGl2ZWQgbmFtZWQtdGVtcGxhdGUgdG9rZW4gKGUuZy4gYCdjaGF0bHknYCkuICovXG4gIGFzeW5jIGdldFRva2VuKG9wdGlvbnM/OiB7IHRlbXBsYXRlPzogc3RyaW5nIH0pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBpZiAob3B0aW9ucz8udGVtcGxhdGUpIHtcbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuY2FjaGUucGVlaygpPy5zZXNzaW9uSWQgPz8gdGhpcy5fc2Vzc2lvbi52YWx1ZT8uaWQgPz8gbnVsbDtcbiAgICAgIHJldHVybiBzZXNzaW9uSWQgPyAoKGF3YWl0IGdldFRlbXBsYXRlVG9rZW4odGhpcy5mYXBpQ2xpZW50LCBzZXNzaW9uSWQsIG9wdGlvbnMudGVtcGxhdGUpKT8uand0ID8/IG51bGwpIDogbnVsbDtcbiAgICB9XG4gICAgY29uc3QgdXNhYmxlID0gdGhpcy5jYWNoZS5nZXQoNV8wMDApO1xuICAgIGlmICh1c2FibGUpIHJldHVybiB1c2FibGUuand0O1xuXG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KDVfMDAwKT8uand0ID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNpZ25lZC1pbiB1c2VyJ3MgT1dOIGxpdmUgYWNjZXNzIHRva2VuIGF0IGEgY29ubmVjdGVkIHByb3ZpZGVyIChHb29nbGUsXG4gICAqIEdpdEh1Yiwg4oCmKSwgc28gdGhlIGFwcCBjYW4gY2FsbCB0aGF0IHByb3ZpZGVyJ3MgQVBJIGZyb20gdGhlIGJyb3dzZXIuIE51bGxcbiAgICogd2hlbiB0aGVyZSBpcyBubyB1c2FibGUgdG9rZW4g4oCUIG5vIGxpbmtlZCBhY2NvdW50LCBvciB0aGUgcHJvdmlkZXIgZ3JhbnRlZCAvXG4gICAqIGtlcHQgbm9uZS4gVGhlIHNlcnZlciByZWZyZXNoZXMgYSBzdGFsZSB0b2tlbiBvbiByZWFkOyB0aGUgcmVmcmVzaCB0b2tlbiBpc1xuICAgKiBuZXZlciBleHBvc2VkLlxuICAgKi9cbiAgLyoqIExpc3RlbiBmb3Igc2lnbi1vdXQgb24gZXZlcnkgcGF0aCAoc2VlIHtAbGluayBzaWduT3V0JH0pOyByZXR1cm5zIHRoZSB1bnN1YnNjcmliZS4gKi9cbiAgb25TaWduT3V0KGxpc3RlbmVyOiBTaWduT3V0TGlzdGVuZXIpOiAoKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZmllci5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG5cbiAgZ2V0UHJvdmlkZXJUb2tlbihwcm92aWRlcjogc3RyaW5nKTogUHJvbWlzZTxQcm92aWRlclRva2VuIHwgbnVsbD4ge1xuICAgIHJldHVybiBmZXRjaFByb3ZpZGVyVG9rZW4odGhpcy5mYXBpQ2xpZW50LCBwcm92aWRlcik7XG4gIH1cblxuICAvKiogSW1wZXJhdGl2ZSBgaGFzKClgIOKAlCB0aGUgc2FtZSBldmFsdWF0aW9uIGAqYXRsYXNQcm90ZWN0YCByZW5kZXJzIG9uLiAqL1xuICBoYXMoY29uZGl0aW9uOiBQcm90ZWN0Q29uZGl0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2YWx1YXRlKHRoaXMuX2NsYWltcy52YWx1ZSwgY29uZGl0aW9uKS5hbGxvd2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSB0aGUgY3VycmVudCBzZXNzaW9uIHNlcnZlci1zaWRlIGFuZCBkcm9wIGFsbCBsb2NhbCBhdXRoIHN0YXRlLlxuICAgKlxuICAgKiBUaGUgc2Vzc2lvbiBpZCBpcyByZW1lbWJlcmVkIGJlZm9yZSB0aGUgcmV2b2tlIChhIHRvbWJzdG9uZSBzaGFyZWQgYnkgZXZlcnlcbiAgICogdGFiKSwgc28gYSByZWxvYWQsIGEgdG9rZW4gcmVmcmVzaCwgYSBzaWJsaW5nIHRhYiBvciBhIHRhYiBvcGVuZWQgbGF0ZXIgbmV2ZXJcbiAgICogcmUtYWRvcHRzIGl0IOKAlCBldmVuIHdoZW4gdGhlIHJldm9rZSBmYWlsZWQgKGl0IGlzIHJldHJpZWQgb25jZSwgdGhlbiBhZ2FpbiBpblxuICAgKiB0aGUgYmFja2dyb3VuZCkgYW5kIHRoZSByZWZyZXNoIGNvb2tpZSBpcyBzdGlsbCB2YWxpZC4gUmVzb2x2ZXNcbiAgICogYHsgcmV2b2tlZCwgYWN0aXZlU2Vzc2lvbklkPyB9YDsgd2l0aCBgeyBzdHJpY3Q6IHRydWUgfWAgYW4gdW5jb25maXJtZWQgcmV2b2tlXG4gICAqIHJlamVjdHMgd2l0aCBhIGBTaWduT3V0RXJyb3JgIGluc3RlYWQgKGFmdGVyIHRoZSBsb2NhbCBzaWduLW91dCkuIEEgcGFya2VkXG4gICAqIHNlc3Npb24gdGhlIHNlcnZlciBwcm9tb3RlZCBvbiByZXZva2UgaXMgYWRvcHRlZC4gRnJvbnQtY2hhbm5lbCBsb2dvdXQgcnVuc1xuICAgKiB1bmxlc3MgYHsgZnJvbnRjaGFubmVsOiBmYWxzZSB9YC5cbiAgICovXG4gIGFzeW5jIHNpZ25PdXQob3B0aW9uczogU2lnbk91dE9wdGlvbnMgPSB7fSk6IFByb21pc2U8U2lnbk91dFJlc3VsdD4ge1xuICAgIC8vIFdpdGggbm8gY2FjaGVkIHRva2VuIHRoZSBndWFyZCBmaW5kcyB0aGUgY29va2llIHNlc3Npb24gaXRzZWxmXG4gICAgLy8gKEdFVCAvdjEvY2xpZW50KSwgc28gYSBtaXNzaW5nIEpXVCBuZXZlciBza2lwcyB0aGUgcmV2b2tlLlxuICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuY2FjaGUucGVlaygpPy5zZXNzaW9uSWQgPz8gdGhpcy5fc2Vzc2lvbi52YWx1ZT8uaWQgPz8gbnVsbDtcbiAgICB0aGlzLm5vdGlmaWVyLmV4cGVjdCgndXNlcicpO1xuICAgIGNvbnN0IGF0dGVtcHQgPSBhd2FpdCB0aGlzLmd1YXJkLnJldm9rZShzZXNzaW9uSWQsIG9wdGlvbnMpO1xuICAgIHRoaXMuY2xlYXJMb2NhbFN0YXRlKCd1c2VyJyk7XG4gICAgaWYgKHRoaXMuZ3VhcmQucHJvbW90ZWQoYXR0ZW1wdCkpIGF3YWl0IHRoaXMucmVsb2FkKCk7XG4gICAgcmV0dXJuIHRoaXMuZ3VhcmQuc2V0dGxlKGF0dGVtcHQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuZCB0aGUgYWN0aXZlIGltcGVyc29uYXRpb24gKFwicmV0dXJuIHRvIGFkbWluXCIpOiB0aGUgaW1wZXJzb25hdG9yJ3Mgb3duXG4gICAqIHNlc3Npb24gb24gdGhpcyBicm93c2VyIGJlY29tZXMgYWN0aXZlIGFnYWluIHdpdGggbm8gc2lnbi1pblxuICAgKiAoYHJlc3VtZWQ6IHRydWVgKTsgd2l0aCBub25lLCBhbm90aGVyIGFjY291bnQgc2lnbmVkIGluIGhlcmUgaXMgYWRvcHRlZCxcbiAgICogb3IgdGhpcyBicm93c2VyIGlzIHNpZ25lZCBvdXQuXG4gICAqL1xuICBhc3luYyBlbmRJbXBlcnNvbmF0aW9uKCk6IFByb21pc2U8RW5kSW1wZXJzb25hdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IG91dGNvbWUgPSBhd2FpdCB0aGlzLmd1YXJkLmVuZEltcGVyc29uYXRpb24odGhpcy5jYWNoZS5wZWVrKCk/LnNlc3Npb25JZCA/PyB0aGlzLl9zZXNzaW9uLnZhbHVlPy5pZCA/PyBudWxsKTtcbiAgICBpZiAoIW91dGNvbWUuZW5kZWQpIHJldHVybiBvdXRjb21lO1xuICAgIGlmICghb3V0Y29tZS5hY3RpdmVTZXNzaW9uSWQpIHtcbiAgICAgIHRoaXMuY2xlYXJMb2NhbFN0YXRlKCd1c2VyJyk7XG4gICAgICByZXR1cm4gb3V0Y29tZTtcbiAgICB9XG4gICAgaWYgKG91dGNvbWUuand0KSB0aGlzLmFwcGx5VG9rZW4ob3V0Y29tZS5qd3QsIG91dGNvbWUuYWN0aXZlU2Vzc2lvbklkKTtcbiAgICBhd2FpdCB0aGlzLnJlbG9hZCgpO1xuICAgIHJldHVybiBvdXRjb21lO1xuICB9XG5cbiAgLyoqXG4gICAqIFN3aXRjaCB0aGUgYWN0aXZlIG9yZ2FuaXphdGlvbiAob3IgYG51bGxgIGZvciB0aGUgcGVyc29uYWwgYWNjb3VudCkuIFRoZVxuICAgKiBuZXcgdG9rZW4gY2FycmllcyB0aGUgbmV3IG9yZyBjbGFpbXMsIHNvIHRoZSBhcHAncyBwZXJtaXNzaW9uIGNoZWNrcyB1cGRhdGVcbiAgICogd2l0aG91dCBhIHJlLWxvZ2luLlxuICAgKi9cbiAgYXN5bmMgc2V0QWN0aXZlT3JnYW5pemF0aW9uKG9yZ2FuaXphdGlvbklkOiBzdHJpbmcgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY2FjaGUucGVlaygpO1xuICAgIGlmICghY3VycmVudCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGwoYC92MS9jbGllbnQvc2Vzc2lvbnMvJHtjdXJyZW50LnNlc3Npb25JZH0vdG91Y2hgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aXZlX29yZ2FuaXphdGlvbl9pZDogb3JnYW5pemF0aW9uSWQgfSksXG4gICAgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykgcmV0dXJuO1xuXG4gICAgY29uc3QgYm9keSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHsgand0OiBzdHJpbmcgfTtcbiAgICB0aGlzLmFwcGx5VG9rZW4oYm9keS5qd3QsIGN1cnJlbnQuc2Vzc2lvbklkKTtcbiAgICBhd2FpdCB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgLyoqIFJlLXJlYWQgYC92MS9jbGllbnRgOiByZWZyZXNoIHVzZXIsIHNlc3Npb24sIG1lbWJlcnNoaXBzIGFuZCBzdGF0dXMuICovXG4gIC8qKiBSZS1ib290IGZyb20gdGhlIEZyb250ZW5kIEFQSS4gUmVzb2x2ZXMgdHJ1ZSB3aGVuIGEgc2Vzc2lvbiBub3cgZXhpc3RzIGluIHRoaXMgYnJvd3Nlci4gKi9cbiAgYXN5bmMgcmVsb2FkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbCgnL3YxL2NsaWVudCcpO1xuICAgICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKCdib290IGZhaWxlZCcpO1xuXG4gICAgICBjb25zdCBib2R5ID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMge1xuICAgICAgICBzZXNzaW9uOiBBdGxhc1Nlc3Npb24gfCBudWxsO1xuICAgICAgICB1c2VyOiBBdGxhc1VzZXIgfCBudWxsO1xuICAgICAgICBqd3Q/OiBzdHJpbmc7XG4gICAgICAgIG9yZ2FuaXphdGlvbl9tZW1iZXJzaGlwcz86IEF0bGFzT3JnYW5pemF0aW9uTWVtYmVyc2hpcFtdO1xuICAgICAgfTtcblxuICAgICAgLy8gQSBzZXNzaW9uIHRoaXMgYnJvd3NlciBzaWduZWQgb3V0IG9mIGlzIG5ldmVyIHJlLWFkb3B0ZWQgZnJvbSB0aGVcbiAgICAgIC8vIHJlZnJlc2ggY29va2llOyB0aGUgZ3VhcmQgcmUtdHJpZXMgaXRzIHJldm9rZSBpbiB0aGUgYmFja2dyb3VuZC5cbiAgICAgIGlmICghYm9keS5zZXNzaW9uIHx8ICFib2R5LnVzZXIgfHwgdGhpcy5ndWFyZC5yZWZ1c2UoYm9keS5zZXNzaW9uLmlkKSkge1xuICAgICAgICB0aGlzLmNsZWFyTG9jYWxTdGF0ZShib2R5LnNlc3Npb24gPyAnb3RoZXJfdGFiJyA6IHNpZ25PdXRSZWFzb25Gcm9tQ2xpZW50KGJvZHkpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5ub3RpZmllci5jbGVhcigpO1xuXG4gICAgICB0aGlzLl91c2VyLm5leHQoYm9keS51c2VyKTtcbiAgICAgIHRoaXMuX3Nlc3Npb24ubmV4dChib2R5LnNlc3Npb24pO1xuICAgICAgdGhpcy5fbWVtYmVyc2hpcHMubmV4dChib2R5Lm9yZ2FuaXphdGlvbl9tZW1iZXJzaGlwcyA/PyBbXSk7XG4gICAgICBpZiAoYm9keS5qd3QpIHRoaXMuYXBwbHlUb2tlbihib2R5Lmp3dCwgYm9keS5zZXNzaW9uLmlkKTtcbiAgICAgIHRoaXMuX3N0YXR1cy5uZXh0KCdzaWduZWRfaW4nKTtcbiAgICAgIHRoaXMuc2NoZWR1bGVSZWZyZXNoKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEEgZmFpbGVkIGJvb3QgaXMgTk9UIHNpZ25lZC1vdXQuIFJlbmRlcmluZyBhIHNpZ24taW4gZm9ybSBiZWNhdXNlIHRoZVxuICAgICAgLy8gbmV0d29yayBoaWNjdXBlZCB0aHJvd3MgYXdheSBhIHBlcmZlY3RseSBnb29kIHNlc3Npb24gYW5kIGZvcmNlcyBhXG4gICAgICAvLyBuZWVkbGVzcyByZS1hdXRoZW50aWNhdGlvbi4gT25seSBwcm9tb3RlIGxvYWRpbmcg4oaSIHNpZ25lZF9vdXQuXG4gICAgICBpZiAodGhpcy5fc3RhdHVzLnZhbHVlID09PSAnbG9hZGluZycpIHRoaXMuX3N0YXR1cy5uZXh0KCdzaWduZWRfb3V0Jyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIEludGVybmFscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiDCpzYuMyBzdGVwIDM6IGNvbXBsZXRlIGEgcmVkaXJlY3QtYmFzZWQgc2lnbi1pbiwgdGhlbiBib290LiBBbiBPQXV0aCBvclxuICAgKiBob3N0ZWQtcGFnZSBmbG93IGxhbmRzIGJhY2sgd2l0aCBhIG9uZS10aW1lIHRpY2tldCBpbiB0aGUgVVJMOyBleGNoYW5nZSBpdFxuICAgKiBmb3IgY29va2llcywgc2NydWIgdGhlIFVSTCBzbyBhIHJlbG9hZCBjYW5ub3QgcmVwbGF5IGl0LCBUSEVOIHJlYWQgdGhlXG4gICAqIHNlc3Npb24uIEEgcmVkaXJlY3QgY2Fycnlpbmcgb25seSBhIHN0YXR1cyAoYSBzZWNvbmQgZmFjdG9yIGlzIHN0aWxsIG93ZWQpXG4gICAqIGhhcyBubyB0aWNrZXQsIHNvIG5vdGhpbmcgaXMgZXhjaGFuZ2VkIGFuZCB0aGUgYXBwIGJvb3RzIHNpZ25lZC1vdXQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGJvb3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZnJvbVVybCA9IHJlYWRSZWRpcmVjdFJlc3VsdCh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICBsZXQgcmVzdWx0OiBSZWRpcmVjdFJlc3VsdCB8IG51bGwgPSBmcm9tVXJsO1xuXG4gICAgLy8gwqdvYXV0aCBwb3B1cCBtb2RlOiB0aGlzIHBhZ2UgbWF5IGJlIHRoZSBsYW5kaW5nIG9mIGEgc2lnbi1pbiBwb3B1cCB3aG9zZVxuICAgIC8vIG9wZW5lciBhIENyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5IHNldmVyZWQgKGAjYXRsYXNfcG9wdXBfcmVzdWx0PeKApmApLlxuICAgIC8vIFRoZSByZXN1bHQgaXMgcmVsYXllZCB0byB0aGUgb3BlbmVyLCB3aGljaCByZWRlZW1zIHRoZSB0aWNrZXQsIGFuZCB0aGlzXG4gICAgLy8gd2luZG93IGNsb3Nlcy4gSWYgbm8gb3BlbmVyIHRha2VzIGl0IChpdHMgdGFiIGlzIGdvbmUpLCBmaW5pc2ggaGVyZSBsaWtlXG4gICAgLy8gYSByZWRpcmVjdC5cbiAgICBjb25zdCBsYW5kaW5nID0gYXdhaXQgY29tcGxldGVPQXV0aFBvcHVwTGFuZGluZygpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgIGlmIChsYW5kaW5nICYmICFsYW5kaW5nLmRlbGl2ZXJlZCkge1xuICAgICAgY29uc3Qgb3V0Y29tZSA9IG1hcE9BdXRoUG9wdXBQYXlsb2FkKGxhbmRpbmcucGF5bG9hZCk7XG4gICAgICBpZiAob3V0Y29tZT8udGlja2V0ICYmIG91dGNvbWUuYXR0ZW1wdElkKSB7XG4gICAgICAgIHJlc3VsdCA9IHsgYXR0ZW1wdElkOiBvdXRjb21lLmF0dGVtcHRJZCwgdGlja2V0OiBvdXRjb21lLnRpY2tldCB9O1xuICAgICAgfSBlbHNlIGlmIChvdXRjb21lPy5jb250aW51YXRpb25VcmwpIHtcbiAgICAgICAgLy8gQSBzZWNvbmQgZmFjdG9yIC8gY29ubmVjdCBzdGVwIC8gcHJvdmlkZXIgZXJyb3I6IHRoZSByZWRpcmVjdCBmbG93J3MgcGFnZS5cbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2Uob3V0Y29tZS5jb250aW51YXRpb25VcmwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGV4Y2hhbmdlZCA9IGZhbHNlO1xuICAgIGlmIChyZXN1bHQ/LnRpY2tldCkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGwoJy92MS9jbGllbnQvdGlja2V0cy9leGNoYW5nZScsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYXR0ZW1wdF9pZDogcmVzdWx0LmF0dGVtcHRJZCwgdGlja2V0OiByZXN1bHQudGlja2V0IH0pLFxuICAgICAgfSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgIGV4Y2hhbmdlZCA9ICEhcmVzcG9uc2U/Lm9rO1xuICAgIH1cbiAgICBpZiAoZnJvbVVybCkge1xuICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCBkb2N1bWVudC50aXRsZSwgc3RyaXBSZWRpcmVjdFBhcmFtcyh3aW5kb3cubG9jYXRpb24uaHJlZikpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlbG9hZCgpO1xuICAgIC8vIFNpZ25lZCBpbiBpbnNpZGUgdGhlIEF0bGFzIHBvcHVwICh0aGUgcmVkaXJlY3QgZmxvdyByYW4gaW4gaXQpOiBoYW5kIGJhY2tcbiAgICAvLyB0byB0aGUgd2FpdGluZyBvcGVuZXIgYW5kIGNsb3NlLiBBIG5vLW9wIGluIGFuIG9yZGluYXJ5IHRhYi5cbiAgICBpZiAoZXhjaGFuZ2VkKSB2b2lkIGNsb3NlT0F1dGhQb3B1cEFmdGVyU2lnbkluKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRQZW5kaW5nQXR0ZW1wdCgpOiB7IGlkOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nIH0gfCBudWxsIHtcbiAgICBjb25zdCByZXN1bHQgPSByZWFkUmVkaXJlY3RSZXN1bHQod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgcmV0dXJuIHJlc3VsdD8uc3RhdHVzICYmICFyZXN1bHQudGlja2V0XG4gICAgICA/IHsgaWQ6IHJlc3VsdC5hdHRlbXB0SWQsIHN0YXR1czogcmVzdWx0LnN0YXR1cyB9XG4gICAgICA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNhbGwocGF0aDogc3RyaW5nLCBpbml0PzogUmVxdWVzdEluaXQpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRvRmV0Y2goYCR7dGhpcy5iYXNlVXJsfSR7cGF0aH1gLCB7XG4gICAgICAuLi5pbml0LFxuICAgICAgLy8gQ29va2llcyBjYXJyeSB0aGUgc2Vzc2lvbjsgYSByZXF1ZXN0IHdpdGhvdXQgdGhpcyBpcyBpbmRpc3Rpbmd1aXNoYWJsZVxuICAgICAgLy8gZnJvbSBiZWluZyBzaWduZWQgb3V0LlxuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ3gtcHVibGlzaGFibGUta2V5JzogdGhpcy5wdWJsaXNoYWJsZUtleSxcbiAgICAgICAgLy8gTmFtZXMgdGhpcyBTREsgc28gdGhlIEZyb250ZW5kIEFQSSBjYW4gZmxhZyBhIHZlcnNpb24gd2l0aCBhIGtub3duIGJ1Zy5cbiAgICAgICAgW1NES19IRUFERVJdOiBzZGtIZWFkZXJWYWx1ZShBVExBU19BTkdVTEFSX1NESyksXG4gICAgICAgIC4uLihpbml0Py5ib2R5ID8geyAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0gOiB7fSksXG4gICAgICAgIC4uLmluaXQ/LmhlYWRlcnMsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJlcG9ydFNka0Fkdmlzb3J5KHJlc3BvbnNlLCBBVExBU19BTkdVTEFSX1NESyk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVRva2VuKGp3dDogc3RyaW5nLCBzZXNzaW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEFuIGluLWZsaWdodCByZWZyZXNoIG11c3Qgbm90IHJlc3VycmVjdCBhIHNlc3Npb24gc2lnbmVkIG91dCBtZWFud2hpbGUuXG4gICAgaWYgKHRoaXMuZ3VhcmQuaXNTaWduZWRPdXQoc2Vzc2lvbklkKSkgcmV0dXJuO1xuICAgIGNvbnN0IGV4cGlyZXNBdCA9IHJlYWRFeHBpcnkoand0KTtcbiAgICBpZiAoIWV4cGlyZXNBdCkgcmV0dXJuO1xuXG4gICAgdGhpcy5jYWNoZS5zZXQoeyBqd3QsIGV4cGlyZXNBdCwgc2Vzc2lvbklkIH0pO1xuICAgIHRoaXMuX2NsYWltcy5uZXh0KGRlY29kZUNsYWltcyhqd3QpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jYWNoZS5wZWVrKCk7XG4gICAgaWYgKCFjdXJyZW50KSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGwoYC92MS9jbGllbnQvc2Vzc2lvbnMvJHtjdXJyZW50LnNlc3Npb25JZH0vdG9rZW5zYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIH0pO1xuICAgICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKCdyZWZyZXNoIGZhaWxlZCcpO1xuXG4gICAgICBjb25zdCBib2R5ID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgeyBqd3Q6IHN0cmluZzsgc2Vzc2lvbl9pZDogc3RyaW5nIH07XG4gICAgICB0aGlzLmFwcGx5VG9rZW4oYm9keS5qd3QsIGJvZHkuc2Vzc2lvbl9pZCk7XG4gICAgICB0aGlzLnNjaGVkdWxlUmVmcmVzaCgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gVGhlIHNlc3Npb24gbWF5IGdlbnVpbmVseSBiZSBnb25lLiBSZS1ib290IHJhdGhlciB0aGFuIGd1ZXNzLlxuICAgICAgYXdhaXQgdGhpcy5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyTG9jYWxTdGF0ZShyZWFzb24/OiBTaWduT3V0UmVhc29uKTogdm9pZCB7XG4gICAgLy8gQSBzaWduZWQtaW4g4oaSIHNpZ25lZC1vdXQgdHJhbnNpdGlvbiB0ZWxscyB0aGUgc2lnbi1vdXQgbGlzdGVuZXJzIHdoeS5cbiAgICBjb25zdCBlbmRlZCA9XG4gICAgICB0aGlzLl9zdGF0dXMudmFsdWUgPT09ICdzaWduZWRfaW4nXG4gICAgICAgID8gKHRoaXMuX3Nlc3Npb24udmFsdWU/LmlkID8/IHRoaXMuY2FjaGUucGVlaygpPy5zZXNzaW9uSWQgPz8gbnVsbClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5jbGVhclJlZnJlc2hUaW1lcigpO1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLl9zdGF0dXMubmV4dCgnc2lnbmVkX291dCcpO1xuICAgIHRoaXMuX3VzZXIubmV4dChudWxsKTtcbiAgICB0aGlzLl9zZXNzaW9uLm5leHQobnVsbCk7XG4gICAgdGhpcy5fY2xhaW1zLm5leHQobnVsbCk7XG4gICAgdGhpcy5fbWVtYmVyc2hpcHMubmV4dChbXSk7XG4gICAgaWYgKGVuZGVkICE9PSB1bmRlZmluZWQpIHRoaXMubm90aWZpZXIuc2lnbmVkT3V0KGVuZGVkLCByZWFzb24pO1xuICAgIGVsc2UgdGhpcy5ub3RpZmllci5jbGVhcigpO1xuICB9XG5cbiAgLyoqIMKnNy40OiBwcm9hY3RpdmUsIGppdHRlcmVkIHJlZnJlc2ggc2NoZWR1bGVkIGZyb20gdGhlIHRva2VuJ3Mgb3duIGV4cGlyeS4gKi9cbiAgcHJpdmF0ZSBzY2hlZHVsZVJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclJlZnJlc2hUaW1lcigpO1xuICAgIGlmICh0aGlzLl9zdGF0dXMudmFsdWUgIT09ICdzaWduZWRfaW4nKSByZXR1cm47XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuY2FjaGUucGVlaygpO1xuICAgIGlmICghdG9rZW4pIHJldHVybjtcblxuICAgIGNvbnN0IGRlbGF5ID0gbXNVbnRpbFJlZnJlc2goeyB0b2tlbiwgbm93OiBEYXRlLm5vdygpIH0pO1xuICAgIHRoaXMucmVmcmVzaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMucmVmcmVzaCgpLCBkZWxheSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyUmVmcmVzaFRpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlZnJlc2hUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVmcmVzaFRpbWVyKTtcbiAgICAgIHRoaXMucmVmcmVzaFRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuLyoqIERlY29kZSBhIEpXVCBwYXlsb2FkIHdpdGhvdXQgdmVyaWZ5aW5nIGl0IOKAlCBhIHNjaGVkdWxpbmcvVUkgaGludCBvbmx5LiAqL1xuZnVuY3Rpb24gZGVjb2RlQ2xhaW1zKGp3dDogc3RyaW5nKTogU2Vzc2lvbkNsYWltcyB8IG51bGwge1xuICBjb25zdCBwYXJ0cyA9IGp3dC5zcGxpdCgnLicpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShcbiAgICAgIGF0b2IocGFydHNbMV0hLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJykpLFxuICAgICkgYXMgU2Vzc2lvbkNsYWltcztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -10,6 +10,7 @@ import { UserButtonComponent } from './components/user-button.component';
|
|
|
10
10
|
import { OrganizationSwitcherComponent } from './components/organization-switcher.component';
|
|
11
11
|
import { UserProfileComponent } from './components/user-profile.component';
|
|
12
12
|
import { OrganizationProfileComponent } from './components/organization-profile.component';
|
|
13
|
+
import { OrganizationAuditLogComponent } from './components/organization-audit-log.component';
|
|
13
14
|
/**
|
|
14
15
|
* Every standalone directive and component the SDK ships. Import the array in a
|
|
15
16
|
* standalone component's `imports`, or rely on `AtlasModule` re-exporting it for
|
|
@@ -32,5 +33,6 @@ export const ATLAS_UI = [
|
|
|
32
33
|
OrganizationSwitcherComponent,
|
|
33
34
|
UserProfileComponent,
|
|
34
35
|
OrganizationProfileComponent,
|
|
36
|
+
OrganizationAuditLogComponent,
|
|
35
37
|
];
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRsYXMudWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2F0bGFzLnVpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDN0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDM0YsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFOUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUc7SUFDdEIsc0JBQXNCO0lBQ3RCLHVCQUF1QjtJQUN2QixxQkFBcUI7SUFDckIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsNkJBQTZCO0lBQzdCLG9CQUFvQjtJQUNwQiw0QkFBNEI7SUFDNUIsNkJBQTZCO0NBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdGxhc1NpZ25lZEluRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3NpZ25lZC1pbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQXRsYXNTaWduZWRPdXREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2lnbmVkLW91dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQXRsYXNMb2FkaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2xvYWRpbmcuZGlyZWN0aXZlJztcbmltcG9ydCB7IEF0bGFzTG9hZGVkRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2xvYWRlZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQXRsYXNQcm90ZWN0RGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3Byb3RlY3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IEF0bGFzUm9vdERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9hdGxhcy1yb290LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTaWduSW5Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2lnbi1pbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2lnblVwQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NpZ24tdXAuY29tcG9uZW50JztcbmltcG9ydCB7IFVzZXJCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdXNlci1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IE9yZ2FuaXphdGlvblN3aXRjaGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL29yZ2FuaXphdGlvbi1zd2l0Y2hlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXNlclByb2ZpbGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdXNlci1wcm9maWxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25Qcm9maWxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL29yZ2FuaXphdGlvbi1wcm9maWxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25BdWRpdExvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9vcmdhbml6YXRpb24tYXVkaXQtbG9nLmNvbXBvbmVudCc7XG5cbi8qKlxuICogRXZlcnkgc3RhbmRhbG9uZSBkaXJlY3RpdmUgYW5kIGNvbXBvbmVudCB0aGUgU0RLIHNoaXBzLiBJbXBvcnQgdGhlIGFycmF5IGluIGFcbiAqIHN0YW5kYWxvbmUgY29tcG9uZW50J3MgYGltcG9ydHNgLCBvciByZWx5IG9uIGBBdGxhc01vZHVsZWAgcmUtZXhwb3J0aW5nIGl0IGZvclxuICogTmdNb2R1bGUtYmFzZWQgYXBwczpcbiAqXG4gKiBgYGB0c1xuICogQENvbXBvbmVudCh7IHN0YW5kYWxvbmU6IHRydWUsIGltcG9ydHM6IFsuLi5BVExBU19VSV0sIHRlbXBsYXRlOiAn4oCmJyB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBBVExBU19VSSA9IFtcbiAgQXRsYXNTaWduZWRJbkRpcmVjdGl2ZSxcbiAgQXRsYXNTaWduZWRPdXREaXJlY3RpdmUsXG4gIEF0bGFzTG9hZGluZ0RpcmVjdGl2ZSxcbiAgQXRsYXNMb2FkZWREaXJlY3RpdmUsXG4gIEF0bGFzUHJvdGVjdERpcmVjdGl2ZSxcbiAgQXRsYXNSb290RGlyZWN0aXZlLFxuICBTaWduSW5Db21wb25lbnQsXG4gIFNpZ25VcENvbXBvbmVudCxcbiAgVXNlckJ1dHRvbkNvbXBvbmVudCxcbiAgT3JnYW5pemF0aW9uU3dpdGNoZXJDb21wb25lbnQsXG4gIFVzZXJQcm9maWxlQ29tcG9uZW50LFxuICBPcmdhbml6YXRpb25Qcm9maWxlQ29tcG9uZW50LFxuICBPcmdhbml6YXRpb25BdWRpdExvZ0NvbXBvbmVudCxcbl0gYXMgY29uc3Q7XG4iXX0=
|