@atlasauth/angular 0.14.0 → 0.15.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 +4 -0
- package/dist/esm2022/lib/components/attempt-flow.component.mjs +1 -5
- package/dist/esm2022/lib/components/flow-controller.mjs +8 -2
- package/dist/esm2022/lib/components/sign-up.component.mjs +57 -7
- package/dist/esm2022/lib/i18n.mjs +2 -1
- package/dist/esm2022/lib/version.mjs +2 -2
- package/dist/fesm2022/atlasauth-angular.mjs +64 -12
- package/dist/fesm2022/atlasauth-angular.mjs.map +1 -1
- package/dist/lib/components/sign-up.component.d.ts +6 -1
- package/dist/lib/version.d.ts +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -216,10 +216,6 @@ export class AttemptFlowComponent {
|
|
|
216
216
|
// `webauthn`: saved passkeys appear in this field's autofill while <atlas-sign-in> holds a conditional request.
|
|
217
217
|
return [{ kind: 'input', name: 'identifier', labelKey: 'signIn.identifierLabel', type: 'email', autocomplete: 'username webauthn' }];
|
|
218
218
|
case 'collect_first_factor': {
|
|
219
|
-
// A link proved an address on an existing account: no session, and the password signs in.
|
|
220
|
-
if (this.attempt?.object === 'sign_up_attempt' && !(this.attempt.supported_first_factors ?? []).includes('passkey')) {
|
|
221
|
-
return [released()];
|
|
222
|
-
}
|
|
223
219
|
if (this.preparedFactor === 'email_code') {
|
|
224
220
|
return [{ kind: 'input', name: 'code', labelKey: 'signIn.emailCodeLabel', type: 'text' }];
|
|
225
221
|
}
|
|
@@ -810,4 +806,4 @@ function msg(labelKey) {
|
|
|
810
806
|
function released() {
|
|
811
807
|
return { kind: 'released', name: '', labelKey: 'signIn.passwordHoldReleased', type: 'text' };
|
|
812
808
|
}
|
|
813
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZW1wdC1mbG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hdHRlbXB0LWZsb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLFFBQVEsR0FRVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxRQUFRLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBZ0JwQzs7Ozs7Ozs7O0dBU0c7QUFpUEgsTUFBTSxPQUFPLG9CQUFvQjtJQUNkLEtBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFckMsT0FBTyxHQUF1QixJQUFJLENBQUM7SUFDbkMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNiLE1BQU0sR0FBaUIsRUFBRSxDQUFDO0lBQ25DLDBGQUEwRjtJQUNqRixXQUFXLEdBQXdCLFNBQVMsQ0FBQztJQUM3QyxRQUFRLEdBQUcsY0FBYyxDQUFDO0lBQ25DOzs7O09BSUc7SUFDTSxPQUFPLEdBQTZCLElBQUksQ0FBQztJQUNsRDs7OztPQUlHO0lBQ00sWUFBWSxHQUFvQixJQUFJLENBQUM7SUFDOUMscUdBQXFHO0lBQzVGLGNBQWMsR0FBa0IsSUFBSSxD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QUFLO2dCQUNJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFNRSxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNJLGVBQWU7c0JBQXhCLE1BQU07Z0JBTUUsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQU1HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBRUcsY0FBYztzQkFBdkIsTUFBTTs7QUFzTlQsa0ZBQWtGO0FBQ2xGLFNBQVMsR0FBRyxDQUFDLFFBQWdCO0lBQzNCLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMvRCxDQUFDO0FBRUQsU0FBUyxRQUFRO0lBQ2YsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsNkJBQTZCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQy9GLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBhd2FpdGluZ1NpZ25VcExpbmssXG4gIGVucm9sbG1lbnRTdWJtaXRLZXksXG4gIGdyb3VwU2V0dXBLZXksXG4gIGxvY2FsaXplZEVycm9yTWVzc2FnZSxcbiAgbmV4dFN0ZXAsXG4gIHR5cGUgQXR0ZW1wdFZpZXcsXG4gIHR5cGUgQ2FwdGNoYUNvbnRyb2xsZXIsXG4gIHR5cGUgRmllbGRFcnJvcixcbiAgdHlwZSBGbG93U3RhdGUsXG4gIHR5cGUgTWZhRW5yb2xsbWVudENvbnRyb2xsZXIsXG4gIHR5cGUgTWZhRW5yb2xsbWVudFN0YXRlLFxuICB0eXBlIE1mYUVucm9sbG1lbnRTdHJhdGVneSxcbn0gZnJvbSAnQGF0bGFzYXV0aC9qcyc7XG5pbXBvcnQgeyBBdGxhc1NlcnZpY2UgfSBmcm9tICcuLi9hdGxhcy5zZXJ2aWNlJztcbmltcG9ydCB7IEF0bGFzQ2FwdGNoYVNsb3REaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2NhcHRjaGEtc2xvdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUG9saWN5QWNjZXB0U3RlcENvbXBvbmVudCB9IGZyb20gJy4vcG9saWN5LWhvc3QnO1xuaW1wb3J0IHsgY2xhc3NGb3IsIHR5cGUgRWxlbWVudEtleSB9IGZyb20gJy4uL2FwcGVhcmFuY2UnO1xuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSAnLi4vaTE4bic7XG5cbi8qKlxuICogT25lIHJlbmRlcmVkIHJvdyBvZiB0aGUgZmxvdy4gQSB1bmlmb3JtIHNoYXBlIChyYXRoZXIgdGhhbiBhIGRpc2NyaW1pbmF0ZWRcbiAqIHVuaW9uKSBzbyB0aGUgdGVtcGxhdGUgYWNjZXNzZXMgb25seSBmaWVsZHMgdGhhdCBhbHdheXMgZXhpc3Qg4oCUIG5vIHJlbGlhbmNlIG9uXG4gKiB0ZW1wbGF0ZSBjb250cm9sLWZsb3cgbmFycm93aW5nIG9mIGEgbG9vcCB2YXJpYWJsZSwgd2hpY2ggdmFyaWVzIGJ5IEFuZ3VsYXJcbiAqIG1pbm9yLiBGb3IgYSBgbWVzc2FnZWAgcm93LCBgbGFiZWxLZXlgIGNhcnJpZXMgdGhlIG1lc3NhZ2UncyBpMThuIGtleS5cbiAqL1xuaW50ZXJmYWNlIFN0ZXBGaWVsZCB7XG4gIGtpbmQ6ICdpbnB1dCcgfCAnbWVzc2FnZScgfCAnYWxlcnQnIHwgJ3JlbGVhc2VkJztcbiAgbmFtZTogc3RyaW5nO1xuICBsYWJlbEtleTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGF1dG9jb21wbGV0ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc2VydmVyLWRyaXZlbiBmbG93IHNoZWxsLCBzaGFyZWQgYnkgYDxhdGxhcy1zaWduLWluPmAgYW5kXG4gKiBgPGF0bGFzLXNpZ24tdXA+YC4gVGhlIEFuZ3VsYXIgcGVlciBvZiBSZWFjdCdzIGludGVybmFsIGBBdHRlbXB0Rmxvd2AuXG4gKlxuICogSXQgY29udGFpbnMgTk8gZGVjaXNpb24gYWJvdXQgd2hhdCBjb21lcyBuZXh0OiBpdCByZW5kZXJzIHdoYXRldmVyIGBzdGF0dXNgXG4gKiB0aGUgc2VydmVyIHJldHVybmVkLCBtYXBwZWQgdGhyb3VnaCBgbmV4dFN0ZXBgIGZyb20gYEBhdGxhc2F1dGgvanNgICh0aGUgc2FtZVxuICogZXhoYXVzdGl2ZSBtYXBwaW5nIHRoZSBSZWFjdCBTREsgdXNlcyksIHNvIGFkZGluZyBhIHN0ZXAgaXMgYSBzZXJ2ZXIgY2hhbmdlXG4gKiBhbmQgYW4gb3V0LW9mLWRhdGUgY2xpZW50IGRlZ3JhZGVzIHRvIGEgdmlzaWJsZSBcInBsZWFzZSB1cGRhdGVcIiBtZXNzYWdlIHJhdGhlclxuICogdGhhbiBhIGJsYW5rIHNjcmVlbi5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXRsYXMtYXR0ZW1wdC1mbG93JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtBdGxhc0NhcHRjaGFTbG90RGlyZWN0aXZlLCBQb2xpY3lBY2NlcHRTdGVwQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IFtjbGFzc109XCJjbHMoJ2NhcmQnLCAnYXRsYXMtY2FyZCcpXCI+XG4gICAgICA8aDEgW2NsYXNzXT1cImNscygnaGVhZGVyVGl0bGUnLCAnYXRsYXMtdGl0bGUnKVwiPnt7IHQodGl0bGVLZXkpIH19PC9oMT5cblxuICAgICAgQGZvciAoZXJyb3Igb2YgZm9ybUVycm9ycygpOyB0cmFjayBlcnJvci5jb2RlKSB7XG4gICAgICAgIDxwIFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZEVycm9yJywgJ2F0bGFzLWVycm9yJylcIiByb2xlPVwiYWxlcnRcIj57eyBlcnJvclRleHQoZXJyb3IpIH19PC9wPlxuICAgICAgfVxuXG4gICAgICA8Zm9ybSAoc3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIj5cbiAgICAgICAgQGlmIChjb2RlU2VudFRleHQoKTsgYXMgc2VudFRleHQpIHtcbiAgICAgICAgICA8cCBjbGFzcz1cImF0bGFzLXRleHRcIiBkYXRhLWF0bGFzLWNvZGUtc2VudD1cIlwiPnt7IHNlbnRUZXh0IH19PC9wPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAobGlua1NlbnRUZXh0KCk7IGFzIHNlbnRMaW5rKSB7XG4gICAgICAgICAgPHAgY2xhc3M9XCJhdGxhcy10ZXh0XCIgZGF0YS1hdGxhcy1saW5rLXNlbnQ9XCJcIj57eyBzZW50TGluayB9fTwvcD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGxpbmtPbmx5KCkpIHtcbiAgICAgICAgICA8IS0tIE5vdGhpbmcgdG8gdHlwZTogdGhlIGZsb3cgcG9sbHMgdW50aWwgdGhlIGVtYWlsZWQgbGluayBpcyBvcGVuZWQgKGFueXdoZXJlKS4gLS0+XG4gICAgICAgICAgPHAgY2xhc3M9XCJhdGxhcy10ZXh0XCIgZGF0YS1hdGxhcy1saW5rLXNlbnQ9XCJcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgIHt7IHQoJ3NpZ25VcC5saW5rU2VudFRvJywgeyBlbWFpbDogYXR0ZW1wdD8uaWRlbnRpZmllciA/PyAnJyB9KSB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBbY2xhc3NdPVwiY2xzKCdmb3JtQnV0dG9uU2Vjb25kYXJ5JywgJ2F0bGFzLWJ1dHRvbi1zZWNvbmRhcnknKVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGRhdGEtYXRsYXMtcmVzZW5kPVwiXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXN5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJyZXNlbmQuZW1pdCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0KCdzaWduSW4ucmVzZW5kTGluaycpIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChlbnJvbGxpbmcoKSAmJiBlbnJvbGxtZW50U3RhdGU7IGFzIGVucm9sKSB7XG4gICAgICAgICAgQGlmIChlbnJvbC5tZXRob2QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dFwiPnt7IHQoJ21mYS5lbnJvbGxDaG9vc2UnKSB9fTwvcD5cbiAgICAgICAgICAgIEBmb3IgKG0gb2YgZW5yb2wub3B0aW9uczsgdHJhY2sgbSkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblNlY29uZGFyeScsICdhdGxhcy1idXR0b24tc2Vjb25kYXJ5JylcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXRsYXMtbWZhLW1ldGhvZF09XCJtXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnVzeSB8fCBlbnJvbC5idXN5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hvb3NlTWV0aG9kKG0pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHQobSA9PT0gJ3RvdHAnID8gJ21mYS5lbnJvbGxUb3RwT3B0aW9uJyA6ICdtZmEuZW5yb2xsU21zT3B0aW9uJykgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBAZWxzZSBpZiAoZW5yb2wubWV0aG9kID09PSAndG90cCcpIHtcbiAgICAgICAgICAgIEBpZiAoZW5yb2wuZW5yb2xsbWVudDsgYXMgc2V0dXApIHtcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhdGxhcy10ZXh0XCI+e3sgdCgnbWZhLmVucm9sbFNjYW4nKSB9fTwvcD5cbiAgICAgICAgICAgICAgQGlmIChzZXR1cC5xckNvZGUpIHtcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXRsYXMtbWZhLXFyXCIgZGF0YS1hdGxhcz1cIm1mYS1xclwiIFtzcmNdPVwic2V0dXAucXJDb2RlXCIgW2FsdF09XCJ0KCdtZmEuZW5yb2xsUXJBbHQnKVwiIHdpZHRoPVwiMTgwXCIgaGVpZ2h0PVwiMTgwXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHNldHVwLnNlY3JldCkge1xuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dFwiIGRhdGEtYXRsYXM9XCJtZmEtc2V0dXAta2V5XCI+e3sgdCgnbWZhLmVucm9sbFNldHVwS2V5JykgfX06IDxjb2RlPnt7IHNldHVwS2V5KHNldHVwLnNlY3JldCkgfX08L2NvZGU+PC9wPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImF0bGFzLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnbWZhLmVucm9sbEZpcnN0Q29kZUxhYmVsJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZElucHV0JywgJ2F0bGFzLWlucHV0JylcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJjb2RlXCIgYXV0b2NvbXBsZXRlPVwib25lLXRpbWUtY29kZVwiIGlucHV0bW9kZT1cIm51bWVyaWNcIiBbdmFsdWVdPVwidmFsdWVzWydjb2RlJ10gPz8gJydcIiAoaW5wdXQpPVwic2V0VmFsdWUoJ2NvZGUnLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiIC8+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIEBpZiAoZW5yb2wudG90cENvZGVzID49IDIpIHtcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhdGxhcy1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnbWZhLmVucm9sbFNlY29uZENvZGVMYWJlbCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZElucHV0JywgJ2F0bGFzLWlucHV0JylcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJzZWNvbmRDb2RlXCIgYXV0b2NvbXBsZXRlPVwib25lLXRpbWUtY29kZVwiIGlucHV0bW9kZT1cIm51bWVyaWNcIiBbdmFsdWVdPVwidmFsdWVzWydzZWNvbmRDb2RlJ10gPz8gJydcIiAoaW5wdXQpPVwic2V0VmFsdWUoJ3NlY29uZENvZGUnLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPnt7IGVucm9sLmJ1c3kgPyB0KCdtZmEuZW5yb2xsUHJlcGFyaW5nJykgOiAnJyB9fTwvcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBpZiAoZW5yb2wuZW5yb2xsbWVudDsgYXMgdGV4dGVkKSB7XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dFwiIGRhdGEtYXRsYXM9XCJtZmEtY29kZS10ZXh0ZWRcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj57eyB0KCdtZmEuY29kZVRleHRlZFRvJywgeyBwaG9uZTogdGV4dGVkLnBob25lID8/ICcnIH0pIH19PC9wPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhdGxhcy1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ21mYS5jb2RlTGFiZWwnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgW2NsYXNzXT1cImNscygnZm9ybUZpZWxkSW5wdXQnLCAnYXRsYXMtaW5wdXQnKVwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNvZGVcIiBhdXRvY29tcGxldGU9XCJvbmUtdGltZS1jb2RlXCIgaW5wdXRtb2RlPVwibnVtZXJpY1wiIFt2YWx1ZV09XCJ2YWx1ZXNbJ2NvZGUnXSA/PyAnJ1wiIChpbnB1dCk9XCJzZXRWYWx1ZSgnY29kZScsICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCIgLz5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbHMoJ2Zvcm1CdXR0b25TZWNvbmRhcnknLCAnYXRsYXMtYnV0dG9uLXNlY29uZGFyeScpXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBkYXRhLWF0bGFzLXJlc2VuZD1cIlwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1c3kgfHwgZW5yb2wuYnVzeVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2VuZEVucm9sbG1lbnQoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB0KCdzaWduSW4ucmVzZW5kQ29kZScpIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImF0bGFzLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnbWZhLnBob25lTGFiZWwnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgW2NsYXNzXT1cImNscygnZm9ybUZpZWxkSW5wdXQnLCAnYXRsYXMtaW5wdXQnKVwiIHR5cGU9XCJ0ZWxcIiBuYW1lPVwicGhvbmVcIiBhdXRvY29tcGxldGU9XCJ0ZWxcIiBbdmFsdWVdPVwidmFsdWVzWydwaG9uZSddID8/ICcnXCIgKGlucHV0KT1cInNldFZhbHVlKCdwaG9uZScsICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCIgLz5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhdGxhcy10ZXh0XCI+e3sgdCgnbWZhLnBob25lSGludCcpIH19PC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBAZm9yIChlcnJvciBvZiBlbnJvbC5lcnJvcnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPHAgW2NsYXNzXT1cImNscygnZm9ybUZpZWxkRXJyb3InLCAnYXRsYXMtZXJyb3InKVwiIHJvbGU9XCJhbGVydFwiPnt7IGVycm9yLm1lc3NhZ2UgfX08L3A+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoZW5yb2wubWV0aG9kICE9PSBudWxsICYmIGVucm9sLm9wdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgQGZvciAob3RoZXIgb2Ygb3RoZXJNZXRob2RzKGVucm9sKTsgdHJhY2sgb3RoZXIpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbHMoJ2Zvcm1CdXR0b25TZWNvbmRhcnknLCAnYXRsYXMtYnV0dG9uLXNlY29uZGFyeScpXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF0bGFzLW1mYS1tZXRob2RdPVwib3RoZXJcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXN5IHx8IGVucm9sLmJ1c3lcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjaG9vc2VNZXRob2Qob3RoZXIpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHQob3RoZXIgPT09ICd0b3RwJyA/ICdtZmEuZW5yb2xsVG90cE9wdGlvbicgOiAnbWZhLmVucm9sbFNtc09wdGlvbicpIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChmIG9mIGZpZWxkcygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICBAaWYgKGYua2luZCA9PT0gJ2lucHV0Jykge1xuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYXRsYXMtZmllbGRcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdChmLmxhYmVsS2V5KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUZpZWxkSW5wdXQnLCAnYXRsYXMtaW5wdXQnKVwiXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiZi50eXBlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5uYW1lXT1cImYubmFtZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImYuYXV0b2NvbXBsZXRlID8/IG51bGxcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZXNbZi5uYW1lXSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cInNldFZhbHVlKGYubmFtZSwgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICBAZm9yIChlcnJvciBvZiBmaWVsZEVycm9yc0ZvcihmLm5hbWUpOyB0cmFjayBlcnJvci5jb2RlKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImNscygnZm9ybUZpZWxkRXJyb3InLCAnYXRsYXMtZXJyb3InKVwiPnt7IGVycm9yVGV4dChlcnJvcikgfX08L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgfSBAZWxzZSBpZiAoZi5raW5kID09PSAncmVsZWFzZWQnKSB7XG4gICAgICAgICAgICA8cCBjbGFzcz1cImF0bGFzLXRleHRcIiBkYXRhLWF0bGFzLXBhc3N3b3JkLXJlbGVhc2VkPVwiXCI+e3sgdChmLmxhYmVsS2V5KSB9fTwvcD5cbiAgICAgICAgICB9IEBlbHNlIGlmIChmLmtpbmQgPT09ICdhbGVydCcpIHtcbiAgICAgICAgICAgIDxwIFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZEVycm9yJywgJ2F0bGFzLWVycm9yJylcIiByb2xlPVwiYWxlcnRcIj57eyB0KGYubGFiZWxLZXkpIH19PC9wPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHA+e3sgdChmLmxhYmVsS2V5KSB9fTwvcD5cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGF3YWl0aW5nUG9saWNpZXMoKSkge1xuICAgICAgICAgIDwhLS0gQSByZXF1aXJlZCBwb2xpY3kgY2hhbmdlZDogc2Nyb2xsLW1vZGUgb25lcyBpbiB0aGVpciBkaWFsb2csIHRoZSByZXN0IGFzIGNoZWNrYm94ZXMuIC0tPlxuICAgICAgICAgIDxhdGxhcy1wb2xpY3ktYWNjZXB0LXN0ZXBcbiAgICAgICAgICAgIFthdHRlbXB0XT1cImF0dGVtcHRcIlxuICAgICAgICAgICAgW2J1c3ldPVwiYnVzeVwiXG4gICAgICAgICAgICAoc3VibWl0Rmxvdyk9XCJzdWJtaXRGbG93LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZGVjbGluZWQpPVwicG9saWN5RGVjbGluZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9hdGxhcy1wb2xpY3ktYWNjZXB0LXN0ZXA+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHNob3dDYXB0Y2hhKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXRsYXMtY2FwdGNoYVwiIGRhdGEtYXRsYXMtY2FwdGNoYT1cIlwiIFthdGxhc0NhcHRjaGFTbG90XT1cImNhcHRjaGFcIj48L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoc2hvd1N1Ym1pdCgpKSB7XG4gICAgICAgICAgPGJ1dHRvbiBbY2xhc3NdPVwiY2xzKCdmb3JtQnV0dG9uUHJpbWFyeScsICdhdGxhcy1idXR0b24nKVwiIFtkaXNhYmxlZF09XCJidXN5IHx8IChlbnJvbGxpbmcoKSAmJiAhIWVucm9sbG1lbnRTdGF0ZT8uYnVzeSlcIiB0eXBlPVwic3VibWl0XCI+XG4gICAgICAgICAgICB7eyB0KHN1Ym1pdEtleSgpKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChzaG93U21zU2Vjb25kRmFjdG9yKCkpIHtcbiAgICAgICAgICBAaWYgKHNtc1NlY29uZEZhY3RvclNlbnRUbygpOyBhcyBzZW50VG8pIHtcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dFwiIGRhdGEtYXRsYXM9XCJzbXMtc2Vjb25kLWZhY3Rvci1zZW50XCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICAgIHt7IHQoJ21mYS5jb2RlVGV4dGVkVG8nLCB7IHBob25lOiBzZW50VG8gfSkgfX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblNlY29uZGFyeScsICdhdGxhcy1idXR0b24tc2Vjb25kYXJ5JylcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgZGF0YS1hdGxhcz1cInNtcy1zZWNvbmQtZmFjdG9yXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1c3kgfHwgISF0ZXh0ZWRTZWNvbmRGYWN0b3I/LmJ1c3lcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic21zU2Vjb25kRmFjdG9yLmVtaXQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHRleHRlZFNlY29uZEZhY3Rvcj8uYnVzeSA/IHQoJ3NpZ25Jbi5zZW5kaW5nJykgOiB0KCdtZmEuc21zQ29kZU9wdGlvbicpIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIEBpZiAodGV4dGVkU2Vjb25kRmFjdG9yPy5lcnJvcjsgYXMgbWVzc2FnZSkge1xuICAgICAgICAgICAgICA8cCBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRFcnJvcicsICdhdGxhcy1lcnJvcicpXCIgcm9sZT1cImFsZXJ0XCI+e3sgbWVzc2FnZSB9fTwvcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHNob3dFbWFpbFNlY29uZEZhY3RvcigpKSB7XG4gICAgICAgICAgQGlmIChlbWFpbFNlY29uZEZhY3RvclNlbnRUbygpOyBhcyBzZW50VG8pIHtcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dFwiIGRhdGEtYXRsYXM9XCJlbWFpbC1zZWNvbmQtZmFjdG9yLXNlbnRcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgICAge3sgdCgnc2lnbkluLmNvZGVTZW50VG8nLCB7IGVtYWlsOiBzZW50VG8gfSkgfX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblNlY29uZGFyeScsICdhdGxhcy1idXR0b24tc2Vjb25kYXJ5JylcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgZGF0YS1hdGxhcz1cImVtYWlsLXNlY29uZC1mYWN0b3JcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnVzeSB8fCAhIWVtYWlsZWRTZWNvbmRGYWN0b3I/LmJ1c3lcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZW1haWxTZWNvbmRGYWN0b3IuZW1pdCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgZW1haWxlZFNlY29uZEZhY3Rvcj8uYnVzeSA/IHQoJ3NpZ25Jbi5zZW5kaW5nJykgOiB0KCdzaWduSW4uZW1haWxDb2RlT3B0aW9uJykgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgQGlmIChlbWFpbGVkU2Vjb25kRmFjdG9yPy5lcnJvcjsgYXMgbWVzc2FnZSkge1xuICAgICAgICAgICAgICA8cCBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRFcnJvcicsICdhdGxhcy1lcnJvcicpXCIgcm9sZT1cImFsZXJ0XCI+e3sgbWVzc2FnZSB9fTwvcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHNob3dFbWFpbENvZGVPcHRpb24oKSkge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIFtjbGFzc109XCJjbHMoJ2Zvcm1CdXR0b25TZWNvbmRhcnknLCAnYXRsYXMtYnV0dG9uLXNlY29uZGFyeScpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXN5XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1zdHJhdGVneV09XCJwcmVwYXJlZEZhY3RvciA9PT0gJ2VtYWlsX2NvZGUnID8gbnVsbCA6ICdlbWFpbF9jb2RlJ1wiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWF0bGFzLXJlc2VuZF09XCJwcmVwYXJlZEZhY3RvciA9PT0gJ2VtYWlsX2NvZGUnID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaG9vc2VGYWN0b3IuZW1pdCgnZW1haWxfY29kZScpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0KHByZXBhcmVkRmFjdG9yID09PSAnZW1haWxfY29kZScgPyAnc2lnbkluLnJlc2VuZENvZGUnIDogJ3NpZ25Jbi51c2VFbWFpbENvZGUnKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChob2xkUHJvb2YgPT09ICdlbWFpbF9saW5rJyAmJiBzdGVwKCkua2luZCA9PT0gJ2NvbGxlY3RfZmlyc3RfZmFjdG9yJykge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIFtjbGFzc109XCJjbHMoJ2Zvcm1CdXR0b25TZWNvbmRhcnknLCAnYXRsYXMtYnV0dG9uLXNlY29uZGFyeScpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXN5XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1zdHJhdGVneV09XCJwcmVwYXJlZEZhY3RvciA9PT0gJ2VtYWlsX2xpbmsnID8gbnVsbCA6ICdlbWFpbF9saW5rJ1wiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWF0bGFzLXJlc2VuZF09XCJwcmVwYXJlZEZhY3RvciA9PT0gJ2VtYWlsX2xpbmsnID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaG9vc2VGYWN0b3IuZW1pdCgnZW1haWxfbGluaycpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0KHByZXBhcmVkRmFjdG9yID09PSAnZW1haWxfbGluaycgPyAnc2lnbkluLnJlc2VuZExpbmsnIDogJ3NpZ25Jbi51c2VFbWFpbExpbmsnKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChwcmVwYXJlZEZhY3RvciAmJiBvZmZlcmVkKCkuaW5jbHVkZXMoJ3Bhc3N3b3JkJykpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBbY2xhc3NdPVwiY2xzKCdmb3JtQnV0dG9uU2Vjb25kYXJ5JywgJ2F0bGFzLWJ1dHRvbi1zZWNvbmRhcnknKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnVzeVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGRhdGEtc3RyYXRlZ3k9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwidXNlUGFzc3dvcmQuZW1pdCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0KCdzaWduSW4ucGFzc3dvcmRPcHRpb24nKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIEF0dGVtcHRGbG93Q29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhdGxhcyA9IGluamVjdChBdGxhc1NlcnZpY2UpO1xuXG4gIEBJbnB1dCgpIGF0dGVtcHQ6IEF0dGVtcHRWaWV3IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGJ1c3kgPSBmYWxzZTtcbiAgQElucHV0KCkgZXJyb3JzOiBGaWVsZEVycm9yW10gPSBbXTtcbiAgLyoqIGBGbG93U3RhdGUuc2Vzc2lvbktlcHRgOiB3aGV0aGVyIHRoaXMgYnJvd3NlciBrZXB0IHRoZSBzZXNzaW9uIHRoZSBzaWduLWluIGNyZWF0ZWQuICovXG4gIEBJbnB1dCgpIHNlc3Npb25LZXB0OiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBASW5wdXQoKSB0aXRsZUtleSA9ICdzaWduSW4udGl0bGUnO1xuICAvKipcbiAgICogVGhlIHNpZ24taW4gY2FwdGNoYSwgZHJhd24gYWJvdmUgdGhlIHN1Ym1pdCBidXR0b24gb24gdGhlIGlkZW50aWZpZXIgc3RlcFxuICAgKiAoYW4gYWx3YXlzLW9uIHNpZ24taW4gY2FwdGNoYSkgYW5kIG9uIHRoZSBjaGFsbGVuZ2Ugc3RlcCB0aGUgc2VydmVyIGRlbWFuZHNcbiAgICogd2l0aCBgbmVlZHNfY2FwdGNoYWAuIE51bGwgd2hlbiB0aGUgZmxvdyBkcmF3cyBub25lLlxuICAgKi9cbiAgQElucHV0KCkgY2FwdGNoYTogQ2FwdGNoYUNvbnRyb2xsZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqXG4gICAqIFRoZSBmaXJzdCBmYWN0b3JzIHRvIG9mZmVyIG9uIHRoZSBgbmVlZHNfZmlyc3RfZmFjdG9yYCBzdGVwIOKAlCBwYXNzXG4gICAqIGBBdGxhc0Zsb3dDb250cm9sbGVyLmZpcnN0RmFjdG9ycygpYCwgd2hpY2ggZHJvcHMgZW1haWwgY29kZSAvIGxpbmsgd2hpbGUgdGhlXG4gICAqIGFwcCBjYW5ub3QgZGVsaXZlciBlbWFpbC4gTnVsbCB1c2VzIHRoZSBzZXJ2ZXIncyBsaXN0IGFzLWlzLlxuICAgKi9cbiAgQElucHV0KCkgZmlyc3RGYWN0b3JzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuICAvKiogVGhlIGZpcnN0IGZhY3RvciBhbHJlYWR5IHNlbnQgKGBBdGxhc0Zsb3dDb250cm9sbGVyLnByZXBhcmVkRmFjdG9yKClgKTogaXRzIGNvZGUgaXMgY29sbGVjdGVkLiAqL1xuICBASW5wdXQoKSBwcmVwYXJlZEZhY3Rvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBgRmxvd1N0YXRlLnBhc3N3b3JkSG9sZGA6IHdoZXJlIHRoZSBwcm9vZiB3ZW50LCBhbmQgd2hldGhlciB0aGUgcGFzc3dvcmQgc2lnbnMgaW4gbm93LiAqL1xuICBASW5wdXQoKSBwYXNzd29yZEhvbGQ6IEZsb3dTdGF0ZVsncGFzc3dvcmRIb2xkJ10gPSBudWxsO1xuICAvKiogYEF0bGFzRmxvd0NvbnRyb2xsZXIuaG9sZFByb29mKClgOiB0aGUgZW1haWxlZCBwcm9vZiBhIHBhc3N3b3JkIGhvbGQgc3RpbGwgd2FpdHMgb24uICovXG4gIEBJbnB1dCgpIGhvbGRQcm9vZjogJ2VtYWlsX2NvZGUnIHwgJ2VtYWlsX2xpbmsnIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIEVtaXRzIHRoZSBjb2xsZWN0ZWQgZmllbGQgdmFsdWVzIHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkLiAqL1xuICBAT3V0cHV0KCkgc3VibWl0RmxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKTtcbiAgLyoqIEVtaXRzIHdoZW4gdGhlIHVzZXIgcGlja3MgYSBmaXJzdCBmYWN0b3IgdGhlIHNlcnZlciBtdXN0IHNlbmQgZmlyc3QgKGFuIGVtYWlsZWQgY29kZSkuICovXG4gIEBPdXRwdXQoKSBjaG9vc2VGYWN0b3IgPSBuZXcgRXZlbnRFbWl0dGVyPCdlbWFpbF9jb2RlJyB8ICdlbWFpbF9saW5rJz4oKTtcbiAgLyoqIEVtaXRzIG9uIFwiVXNlIHlvdXIgcGFzc3dvcmQgaW5zdGVhZFwiLCBmcm9tIGFuIGVtYWlsZWQgZmFjdG9yIGFscmVhZHkgc2VudC4gKi9cbiAgQE91dHB1dCgpIHVzZVBhc3N3b3JkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKipcbiAgICogT2ZmZXIgXCJFbWFpbCBtZSBhIGNvZGUgaW5zdGVhZFwiIGF0IHRoZSBzZWNvbmQgZmFjdG9yICh0aGUgaW5zdGFuY2Unc1xuICAgKiBgYWNjb3VudC5lbWFpbFNlY29uZEZhY3RvcmApOyBgZW1haWxTZWNvbmRGYWN0b3JgIGFza3MgZm9yIGl0IGFuZFxuICAgKiBgZW1haWxlZFNlY29uZEZhY3RvcmAgcmVwb3J0cyBob3cgaXQgd2VudC5cbiAgICovXG4gIEBJbnB1dCgpIG9mZmVyRW1haWxTZWNvbmRGYWN0b3IgPSBmYWxzZTtcbiAgLyoqIGBBdGxhc0Zsb3dDb250cm9sbGVyLmVtYWlsU2Vjb25kRmFjdG9yKClgOiBpbiBmbGlnaHQsIHdoZXJlIGl0IHdlbnQsIG9yIHdoeSBub3QuICovXG4gIEBJbnB1dCgpIGVtYWlsZWRTZWNvbmRGYWN0b3I6IHsgYnVzeT86IGJvb2xlYW47IHNlbnRUbz86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfSB8IG51bGwgPSBudWxsO1xuICBAT3V0cHV0KCkgZW1haWxTZWNvbmRGYWN0b3IgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKlxuICAgKiBPZmZlciBcIlRleHQgbWUgYSBjb2RlIGluc3RlYWRcIiBhdCB0aGUgc2Vjb25kIGZhY3RvciAod2hlcmUgdGhlIGFwcCBvZmZlcnNcbiAgICogdGV4dGVkIGNvZGVzLCBgQXRsYXNGbG93Q29udHJvbGxlci5tZmFDaG9pY2VzKCkuc21zYCk7IGBzbXNTZWNvbmRGYWN0b3JgXG4gICAqIGFza3MgZm9yIGl0IGFuZCBgdGV4dGVkU2Vjb25kRmFjdG9yYCByZXBvcnRzIGhvdyBpdCB3ZW50LlxuICAgKi9cbiAgQElucHV0KCkgb2ZmZXJTbXNTZWNvbmRGYWN0b3IgPSBmYWxzZTtcbiAgLyoqIGBBdGxhc0Zsb3dDb250cm9sbGVyLnNtc1NlY29uZEZhY3RvcigpYDogaW4gZmxpZ2h0LCB3aGVyZSBpdCB3ZW50LCBvciB3aHkgbm90LiAqL1xuICBASW5wdXQoKSB0ZXh0ZWRTZWNvbmRGYWN0b3I6IHsgYnVzeT86IGJvb2xlYW47IHNlbnRUbz86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfSB8IG51bGwgPSBudWxsO1xuICBAT3V0cHV0KCkgc21zU2Vjb25kRmFjdG9yID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKipcbiAgICogVGhlIE1GQSBlbnJvbG1lbnQgc3RlcCAoYEF0bGFzRmxvd0NvbnRyb2xsZXIuZW5yb2xsbWVudGAgYW5kXG4gICAqIGBlbnJvbGxtZW50U3RhdGUoKWApOiB0aGUgYXV0aGVudGljYXRvciBhcHAncyBRUiBjb2RlIGFuZCBzZXR1cCBrZXksIG9yIGFcbiAgICogdGV4dGVkIGNvZGUuIE51bGw6IHRoZSBzdGVwIGFza3MgZm9yIHR3byBhdXRoZW50aWNhdG9yIGNvZGVzIG9ubHkuXG4gICAqL1xuICBASW5wdXQoKSBlbnJvbGxtZW50OiBNZmFFbnJvbGxtZW50Q29udHJvbGxlciB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBlbnJvbGxtZW50U3RhdGU6IE1mYUVucm9sbG1lbnRTdGF0ZSB8IG51bGwgPSBudWxsO1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlJ3MgYGFjY291bnQuZW1haWxWZXJpZmljYXRpb25gLiBPbiBgbGlua2AgYSBzaWduLXVwJ3NcbiAgICogdmVyaWZpY2F0aW9uIHN0ZXAgaGFzIG5vdGhpbmcgdG8gdHlwZTogaXQgc2F5cyB0byBvcGVuIHRoZSBlbWFpbGVkIGxpbmtcbiAgICogd2hpbGUgdGhlIGZsb3cgcG9sbHMsIGFuZCBvZmZlcnMgYSByZXNlbmQgKGByZXNlbmRgKS5cbiAgICovXG4gIEBJbnB1dCgpIGVtYWlsVmVyaWZpY2F0aW9uOiBzdHJpbmcgPSAnY29kZSc7XG4gIEBPdXRwdXQoKSByZXNlbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBUaGUgdXNlciBkZWNsaW5lZCBhIHBvbGljeSB0aGUgc2lnbi1pbiB3YXMgd2FpdGluZyBvbiAoYG5lZWRzX3BvbGljeV9hY2NlcHRhbmNlYCk6IGNhbmNlbCB0aGUgYXR0ZW1wdC4gKi9cbiAgQE91dHB1dCgpIHBvbGljeURlY2xpbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgcHJvdGVjdGVkIHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIHByb3RlY3RlZCB0KGtleTogc3RyaW5nLCB2YXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZSh0aGlzLmF0bGFzLmxvY2FsaXphdGlvbiwga2V5LCB2YXJzKTtcbiAgfVxuXG4gIC8qKiBBIHNlcnZlciBlcnJvciBpbiB0aGUgYXBwJ3MgbGFuZ3VhZ2UgKGBlcnJvci48cmVhc29uPmAsIGVsc2UgdGhlIHNlcnZlcidzIG1lc3NhZ2UpLiAqL1xuICBwcm90ZWN0ZWQgZXJyb3JUZXh0KGVycm9yOiBGaWVsZEVycm9yKTogc3RyaW5nIHtcbiAgICAvLyBgZXJyb3JMb2NhbGl6YXRpb25gIGlzIHJlYWQgZGVmZW5zaXZlbHk6IGEgc3RhbmQtaW4gc2VydmljZSBtYXkgbGFjayBpdC5cbiAgICBjb25zdCBsYXllciA9ICh0aGlzLmF0bGFzIGFzIHsgZXJyb3JMb2NhbGl6YXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH0pLmVycm9yTG9jYWxpemF0aW9uO1xuICAgIHJldHVybiBsb2NhbGl6ZWRFcnJvck1lc3NhZ2UoZXJyb3IsIGxheWVyID8/IHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCB0aGlzLmF0bGFzLmxvY2FsaXphdGlvbik7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xzKGtleTogRWxlbWVudEtleSwgYmFzZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2xhc3NGb3Ioa2V5LCB0aGlzLmF0bGFzLmFwcGVhcmFuY2UsIGJhc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzID0geyAuLi50aGlzLnZhbHVlcywgW25hbWVdOiB2YWx1ZSB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uU3VibWl0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgLy8gRW5yb2xtZW50OiB0ZXh0IHRoZSBjb2RlIHRvIHRoZSB0eXBlZCBudW1iZXIsIG9yIGNvbmZpcm0gdGhlIGZhY3Rvci5cbiAgICBpZiAodGhpcy5lbnJvbGxpbmcoKSAmJiB0aGlzLmVucm9sbG1lbnQpIHtcbiAgICAgIHZvaWQgdGhpcy5lbnJvbGxtZW50LnN1Ym1pdCh0aGlzLnZhbHVlcykudGhlbigobmV4dCkgPT4ge1xuICAgICAgICBpZiAobmV4dCkgdGhpcy5zdWJtaXRGbG93LmVtaXQobmV4dCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gT25seSB3aGF0IGlzIG9uIHNjcmVlbjogYSBjb2RlIHR5cGVkIGVhcmxpZXIgbXVzdCBub3QgdHVybiBhIHBhc3N3b3JkIGludG8gYSBjb2RlIGF0dGVtcHQuXG4gICAgaWYgKHRoaXMuc3RlcCgpLmtpbmQgPT09ICdjb2xsZWN0X2ZpcnN0X2ZhY3RvcicpIHtcbiAgICAgIHRoaXMuc3VibWl0Rmxvdy5lbWl0KHRoaXMucHJlcGFyZWRGYWN0b3IgPT09ICdlbWFpbF9jb2RlJyA/IHsgY29kZTogdGhpcy52YWx1ZXNbJ2NvZGUnXSA/PyAnJyB9IDogeyBwYXNzd29yZDogdGhpcy52YWx1ZXNbJ3Bhc3N3b3JkJ10gPz8gJycgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3VibWl0Rmxvdy5lbWl0KHRoaXMudmFsdWVzKTtcbiAgfVxuXG4gIC8qKiBUaGUgc2hhcmVkIGVucm9sbWVudCBzdGVwIGlzIGRyYXduIChhIGNvbnRyb2xsZXIgd2FzIHBhc3NlZCBhbmQgdGhlIGZsb3cgaXMgZW5yb2xsaW5nKS4gKi9cbiAgcHJvdGVjdGVkIGVucm9sbGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwKCkua2luZCA9PT0gJ2Vucm9sbF9zZWNvbmRfZmFjdG9yJyAmJiAhIXRoaXMuZW5yb2xsbWVudCAmJiAhIXRoaXMuZW5yb2xsbWVudFN0YXRlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNob29zZU1ldGhvZChtZXRob2Q6IE1mYUVucm9sbG1lbnRTdHJhdGVneSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgdm9pZCB0aGlzLmVucm9sbG1lbnQ/LmNob29zZShtZXRob2QpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2VuZEVucm9sbG1lbnQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLmVucm9sbG1lbnQ/LnJlc2VuZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG90aGVyTWV0aG9kcyhzdGF0ZTogTWZhRW5yb2xsbWVudFN0YXRlKTogTWZhRW5yb2xsbWVudFN0cmF0ZWd5W10ge1xuICAgIHJldHVybiBzdGF0ZS5vcHRpb25zLmZpbHRlcigobSkgPT4gbSAhPT0gc3RhdGUubWV0aG9kKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXR1cEtleShzZWNyZXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdyb3VwU2V0dXBLZXkoc2VjcmV0KTtcbiAgfVxuXG4gIC8qKiBUaGUgc3VibWl0IGJ1dHRvbidzIGxhYmVsIGtleSAoZW5yb2xtZW50OiBcIlRleHQgbWUgYSBjb2RlXCIgYmVmb3JlIHRoZSBudW1iZXIgaXMgc2VudCkuICovXG4gIHByb3RlY3RlZCBzdWJtaXRLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuZW5yb2xsaW5nKCkgJiYgdGhpcy5lbnJvbGxtZW50U3RhdGUgJiYgZW5yb2xsbWVudFN1Ym1pdEtleSh0aGlzLmVucm9sbG1lbnRTdGF0ZSkpIHx8ICdzaWduSW4uc3VibWl0JztcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93U21zU2Vjb25kRmFjdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9mZmVyU21zU2Vjb25kRmFjdG9yICYmIHRoaXMuc3RlcCgpLmtpbmQgPT09ICdjb2xsZWN0X3NlY29uZF9mYWN0b3InO1xuICB9XG5cbiAgLyoqIFdoZXJlIHRoZSB0ZXh0ZWQgc2Vjb25kLWZhY3RvciBjb2RlIHdlbnQgKG1hc2tlZCksIG9uY2UgaXQgd2FzIHNlbnQuICovXG4gIHByb3RlY3RlZCBzbXNTZWNvbmRGYWN0b3JTZW50VG8oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3Qgc2VudCA9IHRoaXMudGV4dGVkU2Vjb25kRmFjdG9yPy5zZW50VG87XG4gICAgcmV0dXJuIHR5cGVvZiBzZW50ID09PSAnc3RyaW5nJyA/IHNlbnQgfHwgJyAnIDogbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBmb3JtRXJyb3JzKCk6IEZpZWxkRXJyb3JbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmZpbHRlcigoZXJyb3IpID0+ICFlcnJvci5wYXJhbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmllbGRFcnJvcnNGb3IobmFtZTogc3RyaW5nKTogRmllbGRFcnJvcltdIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcnMuZmlsdGVyKChlcnJvcikgPT4gZXJyb3IucGFyYW0gPT09IG5hbWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0ZXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXR0ZW1wdCA/IG5leHRTdGVwKHRoaXMuYXR0ZW1wdCkgOiAoeyBraW5kOiAnY29sbGVjdF9pZGVudGlmaWVyJyB9IGFzIGNvbnN0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93Q2FwdGNoYSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBraW5kID0gdGhpcy5zdGVwKCkua2luZDtcbiAgICByZXR1cm4gISF0aGlzLmNhcHRjaGEgJiYgKGtpbmQgPT09ICdjb2xsZWN0X2lkZW50aWZpZXInIHx8IGtpbmQgPT09ICdjb2xsZWN0X2NhcHRjaGEnKTtcbiAgfVxuXG4gIC8qKiBUaGUgZmlyc3QgZmFjdG9ycyBvbiBvZmZlciBhdCBhIGBuZWVkc19maXJzdF9mYWN0b3JgIHN0ZXAgKGVtcHR5IG9uIGFueSBvdGhlcikuICovXG4gIHByb3RlY3RlZCBvZmZlcmVkKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzdGVwID0gdGhpcy5zdGVwKCk7XG4gICAgaWYgKHN0ZXAua2luZCAhPT0gJ2NvbGxlY3RfZmlyc3RfZmFjdG9yJykgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLmZpcnN0RmFjdG9ycyA/PyBzdGVwLnN0cmF0ZWdpZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgbGlua09ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGF3YWl0aW5nU2lnblVwTGluayh0aGlzLmF0dGVtcHQsIHRoaXMuZW1haWxWZXJpZmljYXRpb24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNob3dFbWFpbFNlY29uZEZhY3RvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vZmZlckVtYWlsU2Vjb25kRmFjdG9yICYmIHRoaXMuc3RlcCgpLmtpbmQgPT09ICdjb2xsZWN0X3NlY29uZF9mYWN0b3InO1xuICB9XG5cbiAgLyoqIFdoZXJlIHRoZSBlbWFpbGVkIHNlY29uZC1mYWN0b3IgY29kZSB3ZW50IChtYXNrZWQpLCBvbmNlIGl0IHdhcyBzZW50LiAqL1xuICBwcm90ZWN0ZWQgZW1haWxTZWNvbmRGYWN0b3JTZW50VG8oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3Qgc2VudCA9IHRoaXMuZW1haWxlZFNlY29uZEZhY3Rvcj8uc2VudFRvO1xuICAgIHJldHVybiB0eXBlb2Ygc2VudCA9PT0gJ3N0cmluZycgPyBzZW50IHx8ICcgJyA6IG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd0VtYWlsQ29kZU9wdGlvbigpOiBib29sZWFuIHtcbiAgICAvLyBCZWZvcmUgdGhlIGNvZGUgaXMgc2VudDogdGhlIGNob2ljZSAob3IgdGhlIHJldHJ5IG9mIGEgZmFpbGVkIGF1dG9tYXRpY1xuICAgIC8vIHNlbmQpLiBBZnRlcjogXCJSZXNlbmQgY29kZVwiLlxuICAgIHJldHVybiB0aGlzLm9mZmVyZWQoKS5pbmNsdWRlcygnZW1haWxfY29kZScpO1xuICB9XG5cbiAgLyoqIFRoZSBcIndlIHNlbnQgYSBjb2RlIHRvIOKAplwiIGxpbmUgb24gdGhlIGNvZGUgc3RlcC4gKi9cbiAgcHJvdGVjdGVkIGNvZGVTZW50VGV4dCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5zdGVwKCkua2luZCAhPT0gJ2NvbGxlY3RfZmlyc3RfZmFjdG9yJyB8fCB0aGlzLnByZXBhcmVkRmFjdG9yICE9PSAnZW1haWxfY29kZScpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnQoJ3NpZ25Jbi5jb2RlU2VudFRvJywgeyBlbWFpbDogdGhpcy5wYXNzd29yZEhvbGQ/LmVtYWlsID8/IHRoaXMuYXR0ZW1wdD8uaWRlbnRpZmllciA/PyAnJyB9KTtcbiAgfVxuXG4gIC8qKiBUaGUgXCJ3ZSBzZW50IGEgbGluayB0byDigKZcIiBsaW5lLCBvbmNlIGEgbGluayB3YXMgc2VudC4gKi9cbiAgcHJvdGVjdGVkIGxpbmtTZW50VGV4dCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5zdGVwKCkua2luZCAhPT0gJ2NvbGxlY3RfZmlyc3RfZmFjdG9yJyB8fCB0aGlzLnByZXBhcmVkRmFjdG9yICE9PSAnZW1haWxfbGluaycpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnQoJ3NpZ25Jbi5saW5rU2VudFRvJywgeyBlbWFpbDogdGhpcy5wYXNzd29yZEhvbGQ/LmVtYWlsID8/IHRoaXMuYXR0ZW1wdD8uaWRlbnRpZmllciA/PyAnJyB9KTtcbiAgfVxuXG4gIC8qKiBUaGUgYXR0ZW1wdCBpcyBgbmVlZHNfcG9saWN5X2FjY2VwdGFuY2VgLiAqL1xuICBwcm90ZWN0ZWQgYXdhaXRpbmdQb2xpY2llcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwKCkua2luZCA9PT0gJ2FjY2VwdF9wb2xpY2llcyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1N1Ym1pdCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBraW5kID0gdGhpcy5zdGVwKCkua2luZDtcbiAgICAvLyBOb3RoaW5nIHRvIHN1Ym1pdCBvbiBhIGZpcnN0LWZhY3RvciBzdGVwIHRoYXQgb25seSBvZmZlcnMgYW4gZW1haWxlZCBjb2RlXG4gICAgLy8gdW50aWwgdGhhdCBjb2RlIGlzIHNlbnQuXG4gICAgaWYgKGtpbmQgPT09ICdjb2xsZWN0X2ZpcnN0X2ZhY3RvcicpIHJldHVybiB0aGlzLmZpZWxkcygpLnNvbWUoKGYpID0+IGYua2luZCA9PT0gJ2lucHV0Jyk7XG4gICAgaWYgKHRoaXMubGlua09ubHkoKSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIEVucm9sbWVudDogbm90aGluZyB0byBzdWJtaXQgd2hpbGUgY2hvb3NpbmcgYSBtZXRob2Qgb3IgZmV0Y2hpbmcgdGhlIHNldHVwLlxuICAgIGlmICh0aGlzLmVucm9sbGluZygpICYmIHRoaXMuZW5yb2xsbWVudFN0YXRlICYmICFlbnJvbGxtZW50U3VibWl0S2V5KHRoaXMuZW5yb2xsbWVudFN0YXRlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBraW5kICE9PSAnZG9uZScgJiYga2luZCAhPT0gJ2F3YWl0X29hdXRoJyAmJiBraW5kICE9PSAnYWNjZXB0X3BvbGljaWVzJztcbiAgfVxuXG4gIHByb3RlY3RlZCBmaWVsZHMoKTogU3RlcEZpZWxkW10ge1xuICAgIGNvbnN0IHN0ZXAgPSB0aGlzLnN0ZXAoKTtcbiAgICBzd2l0Y2ggKHN0ZXAua2luZCkge1xuICAgICAgY2FzZSAnY29sbGVjdF9pZGVudGlmaWVyJzpcbiAgICAgICAgLy8gYHdlYmF1dGhuYDogc2F2ZWQgcGFzc2tleXMgYXBwZWFyIGluIHRoaXMgZmllbGQncyBhdXRvZmlsbCB3aGlsZSA8YXRsYXMtc2lnbi1pbj4gaG9sZHMgYSBjb25kaXRpb25hbCByZXF1ZXN0LlxuICAgICAgICByZXR1cm4gW3sga2luZDogJ2lucHV0JywgbmFtZTogJ2lkZW50aWZpZXInLCBsYWJlbEtleTogJ3NpZ25Jbi5pZGVudGlmaWVyTGFiZWwnLCB0eXBlOiAnZW1haWwnLCBhdXRvY29tcGxldGU6ICd1c2VybmFtZSB3ZWJhdXRobicgfV07XG4gICAgICBjYXNlICdjb2xsZWN0X2ZpcnN0X2ZhY3Rvcic6IHtcbiAgICAgICAgLy8gQSBsaW5rIHByb3ZlZCBhbiBhZGRyZXNzIG9uIGFuIGV4aXN0aW5nIGFjY291bnQ6IG5vIHNlc3Npb24sIGFuZCB0aGUgcGFzc3dvcmQgc2lnbnMgaW4uXG4gICAgICAgIGlmICh0aGlzLmF0dGVtcHQ/Lm9iamVjdCA9PT0gJ3NpZ25fdXBfYXR0ZW1wdCcgJiYgISh0aGlzLmF0dGVtcHQuc3VwcG9ydGVkX2ZpcnN0X2ZhY3RvcnMgPz8gW10pLmluY2x1ZGVzKCdwYXNza2V5JykpIHtcbiAgICAgICAgICByZXR1cm4gW3JlbGVhc2VkKCldO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByZXBhcmVkRmFjdG9yID09PSAnZW1haWxfY29kZScpIHtcbiAgICAgICAgICByZXR1cm4gW3sga2luZDogJ2lucHV0JywgbmFtZTogJ2NvZGUnLCBsYWJlbEtleTogJ3NpZ25Jbi5lbWFpbENvZGVMYWJlbCcsIHR5cGU6ICd0ZXh0JyB9XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcmVwYXJlZEZhY3RvciA9PT0gJ2VtYWlsX2xpbmsnKSByZXR1cm4gW107XG4gICAgICAgIC8vIFRoZSBwYXNzd29yZCBmaWVsZCB1bmxlc3MgdGhlIG9ubHkgb2ZmZXIgaXMgYW4gZW1haWxlZCBjb2RlIChjaG9zZW5cbiAgICAgICAgLy8gd2l0aCB0aGUgYnV0dG9uIGJlbG93IHRoZSBmb3JtKS5cbiAgICAgICAgY29uc3Qgb2ZmZXJlZCA9IHRoaXMub2ZmZXJlZCgpO1xuICAgICAgICByZXR1cm4gb2ZmZXJlZC5pbmNsdWRlcygnZW1haWxfY29kZScpICYmICFvZmZlcmVkLmluY2x1ZGVzKCdwYXNzd29yZCcpXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAuLi4odGhpcy5wYXNzd29yZEhvbGQ/LnJlbGVhc2VkID8gW3JlbGVhc2VkKCldIDogW10pLFxuICAgICAgICAgICAgICB7IGtpbmQ6ICdpbnB1dCcsIG5hbWU6ICdwYXNzd29yZCcsIGxhYmVsS2V5OiAnc2lnbkluLnBhc3N3b3JkTGFiZWwnLCB0eXBlOiAncGFzc3dvcmQnIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sbGVjdF9zZWNvbmRfZmFjdG9yJzpcbiAgICAgICAgcmV0dXJuIFt7IGtpbmQ6ICdpbnB1dCcsIG5hbWU6ICdjb2RlJywgbGFiZWxLZXk6ICdtZmEuY29kZUxhYmVsJywgdHlwZTogJ3RleHQnIH1dO1xuICAgICAgY2FzZSAnZW5yb2xsX3NlY29uZF9mYWN0b3InOlxuICAgICAgICAvLyBUaGUgc2hhcmVkIGVucm9sbWVudCBzdGVwIGRyYXdzIGl0cyBvd24gZmllbGRzIChhYm92ZSkuXG4gICAgICAgIGlmICh0aGlzLmVucm9sbGluZygpKSByZXR1cm4gW107XG4gICAgICAgIC8vIFR3byBjb25zZWN1dGl2ZSBjb2RlcyAowqc1LjYpOiBhIHBob25lIHdpdGggYSBmYXN0IGNsb2NrIGZhaWxzIGhlcmVcbiAgICAgICAgLy8gcmF0aGVyIHRoYW4gb24gZXZlcnkgc2lnbi1pbiBhZnRlcndhcmRzLlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHsga2luZDogJ2lucHV0JywgbmFtZTogJ2NvZGUnLCBsYWJlbEtleTogJ21mYS5lbnJvbGxGaXJzdENvZGVMYWJlbCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICAgIHsga2luZDogJ2lucHV0JywgbmFtZTogJ3NlY29uZENvZGUnLCBsYWJlbEtleTogJ21mYS5lbnJvbGxTZWNvbmRDb2RlTGFiZWwnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2NvbGxlY3RfZW1haWxfY29kZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmxpbmtPbmx5KCkgPyBbXSA6IFt7IGtpbmQ6ICdpbnB1dCcsIG5hbWU6ICdjb2RlJywgbGFiZWxLZXk6ICdzaWduSW4uZW1haWxDb2RlTGFiZWwnLCB0eXBlOiAndGV4dCcgfV07XG4gICAgICBjYXNlICdjb2xsZWN0X25ld19wYXNzd29yZCc6XG4gICAgICAgIHJldHVybiBbeyBraW5kOiAnaW5wdXQnLCBuYW1lOiAncGFzc3dvcmQnLCBsYWJlbEtleTogJ3Jlc2V0Lm5ld1Bhc3N3b3JkTGFiZWwnLCB0eXBlOiAncGFzc3dvcmQnIH1dO1xuICAgICAgY2FzZSAnYWNjZXB0X3BvbGljaWVzJzpcbiAgICAgICAgLy8gRHJhd24gYnkgPGF0bGFzLXBvbGljeS1hY2NlcHQtc3RlcD4gYWJvdmUuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIGNhc2UgJ2NvbGxlY3RfY2FwdGNoYSc6XG4gICAgICAgIC8vIMKnNSB0aGUgc2VydmVyIHdpdGhoZWxkIHRoZSBhdHRlbXB0IHVudGlsIGEgY2FwdGNoYSBjbGVhcnMuIFNvbHZpbmcgdGhlXG4gICAgICAgIC8vIHdpZGdldCByZXN1Ym1pdHMgdGhlIGlkZW50aWZpZXIgb24gaXRzIG93bjsgdGhlIGJ1dHRvbiByZXRyaWVzLlxuICAgICAgICByZXR1cm4gW21zZygnY2FwdGNoYS5wcm9tcHQnKV07XG4gICAgICBjYXNlICdhd2FpdF9vYXV0aCc6XG4gICAgICAgIHJldHVybiBbbXNnKCdzaWduSW4ubWFnaWNMaW5rU2VudCcpXTtcbiAgICAgIGNhc2UgJ2RvbmUnOlxuICAgICAgICAvLyBTaWduZWQgaW4gb25seSB3aGVuIHRoaXMgYnJvd3NlciBob2xkcyB0aGUgc2Vzc2lvbjsgYSBibG9ja2VkIGNvb2tpZSBpcyBzYWlkXG4gICAgICAgIC8vIHBsYWlubHkuIFwiQ2hlY2sgdGhlIG90aGVyIHRhYlwiIGlzIGZvciBhIHNpZ24taW4gY29tcGxldGVkIG9uIGFub3RoZXIgZGV2aWNlLlxuICAgICAgICBpZiAodGhpcy5zZXNzaW9uS2VwdCA9PT0gdHJ1ZSkgcmV0dXJuIFttc2coJ3NpZ25Jbi5zaWduZWRJbicpXTtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbktlcHQgPT09IGZhbHNlKSByZXR1cm4gW3sga2luZDogJ2FsZXJ0JywgbmFtZTogJycsIGxhYmVsS2V5OiAnc2lnbkluLnNlc3Npb25Ob3RLZXB0JywgdHlwZTogJ3RleHQnIH1dO1xuICAgICAgICByZXR1cm4gW21zZygnc2lnbkluLmNoZWNrT3RoZXJUYWInKV07XG4gICAgICBjYXNlICdyZXN0YXJ0JzpcbiAgICAgICAgcmV0dXJuIFttc2coJ2Vycm9yLmdlbmVyaWMnKV07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBBIHN0YXR1cyB0aGlzIFNESyB2ZXJzaW9uIGRvZXMgbm90IGtub3cuIEFuIGhvbmVzdCBtZXNzYWdlIGJlYXRzIGFcbiAgICAgICAgLy8gYmxhbmsgbG9naW4gYm94IHRoZSB1c2VyIGNhbm5vdCBhY3Qgb24uXG4gICAgICAgIHJldHVybiBbbXNnKCdlcnJvci5nZW5lcmljJyldO1xuICAgIH1cbiAgfVxufVxuXG4vKiogQSByZWFkLW9ubHkgbWVzc2FnZSByb3c6IGBsYWJlbEtleWAgaG9sZHMgdGhlIGkxOG4ga2V5IG9mIHRoZSB0ZXh0IHRvIHNob3cuICovXG5mdW5jdGlvbiBtc2cobGFiZWxLZXk6IHN0cmluZyk6IFN0ZXBGaWVsZCB7XG4gIHJldHVybiB7IGtpbmQ6ICdtZXNzYWdlJywgbmFtZTogJycsIGxhYmVsS2V5LCB0eXBlOiAndGV4dCcgfTtcbn1cblxuZnVuY3Rpb24gcmVsZWFzZWQoKTogU3RlcEZpZWxkIHtcbiAgcmV0dXJuIHsga2luZDogJ3JlbGVhc2VkJywgbmFtZTogJycsIGxhYmVsS2V5OiAnc2lnbkluLnBhc3N3b3JkSG9sZFJlbGVhc2VkJywgdHlwZTogJ3RleHQnIH07XG59XG4iXX0=
|
|
809
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZW1wdC1mbG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hdHRlbXB0LWZsb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLFFBQVEsR0FRVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxRQUFRLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBZ0JwQzs7Ozs7Ozs7O0dBU0c7QUFpUEgsTUFBTSxPQUFPLG9CQUFvQjtJQUNkLEtBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFckMsT0FBTyxHQUF1QixJQUFJLENBQUM7SUFDbkMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNiLE1BQU0sR0FBaUIsRUFBRSxDQUFDO0lBQ25DLDBGQUEwRjtJQUNqRixXQUFXLEdBQXdCLFNBQVMsQ0FBQztJQUM3QyxRQUFRLEdBQUcsY0FBYyxDQUFDO0lBQ25DOzs7O09BSUc7SUFDTSxPQUFPLEdBQTZCLElBQUksQ0FBQztJQUNsRDs7OztPQUlHO0lBQ00sWUFBWSxHQUFvQixJQUFJLENBQUM7SUFDOUMscUdBQXFHO0lBQzVGLGNBQWMsR0FBa0IsSUFBSSxD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QWM7c0JBQXZCLE1BQU07O0FBa05ULGtGQUFrRjtBQUNsRixTQUFTLEdBQUcsQ0FBQyxRQUFnQjtJQUMzQixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDL0QsQ0FBQztBQUVELFNBQVMsUUFBUTtJQUNmLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLDZCQUE2QixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMvRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgYXdhaXRpbmdTaWduVXBMaW5rLFxuICBlbnJvbGxtZW50U3VibWl0S2V5LFxuICBncm91cFNldHVwS2V5LFxuICBsb2NhbGl6ZWRFcnJvck1lc3NhZ2UsXG4gIG5leHRTdGVwLFxuICB0eXBlIEF0dGVtcHRWaWV3LFxuICB0eXBlIENhcHRjaGFDb250cm9sbGVyLFxuICB0eXBlIEZpZWxkRXJyb3IsXG4gIHR5cGUgRmxvd1N0YXRlLFxuICB0eXBlIE1mYUVucm9sbG1lbnRDb250cm9sbGVyLFxuICB0eXBlIE1mYUVucm9sbG1lbnRTdGF0ZSxcbiAgdHlwZSBNZmFFbnJvbGxtZW50U3RyYXRlZ3ksXG59IGZyb20gJ0BhdGxhc2F1dGgvanMnO1xuaW1wb3J0IHsgQXRsYXNTZXJ2aWNlIH0gZnJvbSAnLi4vYXRsYXMuc2VydmljZSc7XG5pbXBvcnQgeyBBdGxhc0NhcHRjaGFTbG90RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jYXB0Y2hhLXNsb3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IFBvbGljeUFjY2VwdFN0ZXBDb21wb25lbnQgfSBmcm9tICcuL3BvbGljeS1ob3N0JztcbmltcG9ydCB7IGNsYXNzRm9yLCB0eXBlIEVsZW1lbnRLZXkgfSBmcm9tICcuLi9hcHBlYXJhbmNlJztcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gJy4uL2kxOG4nO1xuXG4vKipcbiAqIE9uZSByZW5kZXJlZCByb3cgb2YgdGhlIGZsb3cuIEEgdW5pZm9ybSBzaGFwZSAocmF0aGVyIHRoYW4gYSBkaXNjcmltaW5hdGVkXG4gKiB1bmlvbikgc28gdGhlIHRlbXBsYXRlIGFjY2Vzc2VzIG9ubHkgZmllbGRzIHRoYXQgYWx3YXlzIGV4aXN0IOKAlCBubyByZWxpYW5jZSBvblxuICogdGVtcGxhdGUgY29udHJvbC1mbG93IG5hcnJvd2luZyBvZiBhIGxvb3AgdmFyaWFibGUsIHdoaWNoIHZhcmllcyBieSBBbmd1bGFyXG4gKiBtaW5vci4gRm9yIGEgYG1lc3NhZ2VgIHJvdywgYGxhYmVsS2V5YCBjYXJyaWVzIHRoZSBtZXNzYWdlJ3MgaTE4biBrZXkuXG4gKi9cbmludGVyZmFjZSBTdGVwRmllbGQge1xuICBraW5kOiAnaW5wdXQnIHwgJ21lc3NhZ2UnIHwgJ2FsZXJ0JyB8ICdyZWxlYXNlZCc7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWxLZXk6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBhdXRvY29tcGxldGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHNlcnZlci1kcml2ZW4gZmxvdyBzaGVsbCwgc2hhcmVkIGJ5IGA8YXRsYXMtc2lnbi1pbj5gIGFuZFxuICogYDxhdGxhcy1zaWduLXVwPmAuIFRoZSBBbmd1bGFyIHBlZXIgb2YgUmVhY3QncyBpbnRlcm5hbCBgQXR0ZW1wdEZsb3dgLlxuICpcbiAqIEl0IGNvbnRhaW5zIE5PIGRlY2lzaW9uIGFib3V0IHdoYXQgY29tZXMgbmV4dDogaXQgcmVuZGVycyB3aGF0ZXZlciBgc3RhdHVzYFxuICogdGhlIHNlcnZlciByZXR1cm5lZCwgbWFwcGVkIHRocm91Z2ggYG5leHRTdGVwYCBmcm9tIGBAYXRsYXNhdXRoL2pzYCAodGhlIHNhbWVcbiAqIGV4aGF1c3RpdmUgbWFwcGluZyB0aGUgUmVhY3QgU0RLIHVzZXMpLCBzbyBhZGRpbmcgYSBzdGVwIGlzIGEgc2VydmVyIGNoYW5nZVxuICogYW5kIGFuIG91dC1vZi1kYXRlIGNsaWVudCBkZWdyYWRlcyB0byBhIHZpc2libGUgXCJwbGVhc2UgdXBkYXRlXCIgbWVzc2FnZSByYXRoZXJcbiAqIHRoYW4gYSBibGFuayBzY3JlZW4uXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F0bGFzLWF0dGVtcHQtZmxvdycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQXRsYXNDYXB0Y2hhU2xvdERpcmVjdGl2ZSwgUG9saWN5QWNjZXB0U3RlcENvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbY2xhc3NdPVwiY2xzKCdjYXJkJywgJ2F0bGFzLWNhcmQnKVwiPlxuICAgICAgPGgxIFtjbGFzc109XCJjbHMoJ2hlYWRlclRpdGxlJywgJ2F0bGFzLXRpdGxlJylcIj57eyB0KHRpdGxlS2V5KSB9fTwvaDE+XG5cbiAgICAgIEBmb3IgKGVycm9yIG9mIGZvcm1FcnJvcnMoKTsgdHJhY2sgZXJyb3IuY29kZSkge1xuICAgICAgICA8cCBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRFcnJvcicsICdhdGxhcy1lcnJvcicpXCIgcm9sZT1cImFsZXJ0XCI+e3sgZXJyb3JUZXh0KGVycm9yKSB9fTwvcD5cbiAgICAgIH1cblxuICAgICAgPGZvcm0gKHN1Ym1pdCk9XCJvblN1Ym1pdCgkZXZlbnQpXCI+XG4gICAgICAgIEBpZiAoY29kZVNlbnRUZXh0KCk7IGFzIHNlbnRUZXh0KSB7XG4gICAgICAgICAgPHAgY2xhc3M9XCJhdGxhcy10ZXh0XCIgZGF0YS1hdGxhcy1jb2RlLXNlbnQ9XCJcIj57eyBzZW50VGV4dCB9fTwvcD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGxpbmtTZW50VGV4dCgpOyBhcyBzZW50TGluaykge1xuICAgICAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dFwiIGRhdGEtYXRsYXMtbGluay1zZW50PVwiXCI+e3sgc2VudExpbmsgfX08L3A+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChsaW5rT25seSgpKSB7XG4gICAgICAgICAgPCEtLSBOb3RoaW5nIHRvIHR5cGU6IHRoZSBmbG93IHBvbGxzIHVudGlsIHRoZSBlbWFpbGVkIGxpbmsgaXMgb3BlbmVkIChhbnl3aGVyZSkuIC0tPlxuICAgICAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dFwiIGRhdGEtYXRsYXMtbGluay1zZW50PVwiXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICB7eyB0KCdzaWduVXAubGlua1NlbnRUbycsIHsgZW1haWw6IGF0dGVtcHQ/LmlkZW50aWZpZXIgPz8gJycgfSkgfX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblNlY29uZGFyeScsICdhdGxhcy1idXR0b24tc2Vjb25kYXJ5JylcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBkYXRhLWF0bGFzLXJlc2VuZD1cIlwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnVzeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwicmVzZW5kLmVtaXQoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdCgnc2lnbkluLnJlc2VuZExpbmsnKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoZW5yb2xsaW5nKCkgJiYgZW5yb2xsbWVudFN0YXRlOyBhcyBlbnJvbCkge1xuICAgICAgICAgIEBpZiAoZW5yb2wubWV0aG9kID09PSBudWxsKSB7XG4gICAgICAgICAgICA8cCBjbGFzcz1cImF0bGFzLXRleHRcIj57eyB0KCdtZmEuZW5yb2xsQ2hvb3NlJykgfX08L3A+XG4gICAgICAgICAgICBAZm9yIChtIG9mIGVucm9sLm9wdGlvbnM7IHRyYWNrIG0pIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbHMoJ2Zvcm1CdXR0b25TZWNvbmRhcnknLCAnYXRsYXMtYnV0dG9uLXNlY29uZGFyeScpXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF0bGFzLW1mYS1tZXRob2RdPVwibVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1c3kgfHwgZW5yb2wuYnVzeVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNob29zZU1ldGhvZChtKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB0KG0gPT09ICd0b3RwJyA/ICdtZmEuZW5yb2xsVG90cE9wdGlvbicgOiAnbWZhLmVucm9sbFNtc09wdGlvbicpIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gQGVsc2UgaWYgKGVucm9sLm1ldGhvZCA9PT0gJ3RvdHAnKSB7XG4gICAgICAgICAgICBAaWYgKGVucm9sLmVucm9sbG1lbnQ7IGFzIHNldHVwKSB7XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dFwiPnt7IHQoJ21mYS5lbnJvbGxTY2FuJykgfX08L3A+XG4gICAgICAgICAgICAgIEBpZiAoc2V0dXAucXJDb2RlKSB7XG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImF0bGFzLW1mYS1xclwiIGRhdGEtYXRsYXM9XCJtZmEtcXJcIiBbc3JjXT1cInNldHVwLnFyQ29kZVwiIFthbHRdPVwidCgnbWZhLmVucm9sbFFyQWx0JylcIiB3aWR0aD1cIjE4MFwiIGhlaWdodD1cIjE4MFwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChzZXR1cC5zZWNyZXQpIHtcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImF0bGFzLXRleHRcIiBkYXRhLWF0bGFzPVwibWZhLXNldHVwLWtleVwiPnt7IHQoJ21mYS5lbnJvbGxTZXR1cEtleScpIH19OiA8Y29kZT57eyBzZXR1cEtleShzZXR1cC5zZWNyZXQpIH19PC9jb2RlPjwvcD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhdGxhcy1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ21mYS5lbnJvbGxGaXJzdENvZGVMYWJlbCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRJbnB1dCcsICdhdGxhcy1pbnB1dCcpXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiY29kZVwiIGF1dG9jb21wbGV0ZT1cIm9uZS10aW1lLWNvZGVcIiBpbnB1dG1vZGU9XCJudW1lcmljXCIgW3ZhbHVlXT1cInZhbHVlc1snY29kZSddID8/ICcnXCIgKGlucHV0KT1cInNldFZhbHVlKCdjb2RlJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICBAaWYgKGVucm9sLnRvdHBDb2RlcyA+PSAyKSB7XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYXRsYXMtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ21mYS5lbnJvbGxTZWNvbmRDb2RlTGFiZWwnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRJbnB1dCcsICdhdGxhcy1pbnB1dCcpXCIgdHlwZT1cInRleHRcIiBuYW1lPVwic2Vjb25kQ29kZVwiIGF1dG9jb21wbGV0ZT1cIm9uZS10aW1lLWNvZGVcIiBpbnB1dG1vZGU9XCJudW1lcmljXCIgW3ZhbHVlXT1cInZhbHVlc1snc2Vjb25kQ29kZSddID8/ICcnXCIgKGlucHV0KT1cInNldFZhbHVlKCdzZWNvbmRDb2RlJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8cCBjbGFzcz1cImF0bGFzLXRleHRcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj57eyBlbnJvbC5idXN5ID8gdCgnbWZhLmVucm9sbFByZXBhcmluZycpIDogJycgfX08L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAaWYgKGVucm9sLmVucm9sbG1lbnQ7IGFzIHRleHRlZCkge1xuICAgICAgICAgICAgICA8cCBjbGFzcz1cImF0bGFzLXRleHRcIiBkYXRhLWF0bGFzPVwibWZhLWNvZGUtdGV4dGVkXCIgYXJpYS1saXZlPVwicG9saXRlXCI+e3sgdCgnbWZhLmNvZGVUZXh0ZWRUbycsIHsgcGhvbmU6IHRleHRlZC5waG9uZSA/PyAnJyB9KSB9fTwvcD5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYXRsYXMtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyB0KCdtZmEuY29kZUxhYmVsJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZElucHV0JywgJ2F0bGFzLWlucHV0JylcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJjb2RlXCIgYXV0b2NvbXBsZXRlPVwib25lLXRpbWUtY29kZVwiIGlucHV0bW9kZT1cIm51bWVyaWNcIiBbdmFsdWVdPVwidmFsdWVzWydjb2RlJ10gPz8gJydcIiAoaW5wdXQpPVwic2V0VmFsdWUoJ2NvZGUnLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiIC8+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2xzKCdmb3JtQnV0dG9uU2Vjb25kYXJ5JywgJ2F0bGFzLWJ1dHRvbi1zZWNvbmRhcnknKVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgZGF0YS1hdGxhcy1yZXNlbmQ9XCJcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXN5IHx8IGVucm9sLmJ1c3lcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNlbmRFbnJvbGxtZW50KClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdCgnc2lnbkluLnJlc2VuZENvZGUnKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhdGxhcy1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ21mYS5waG9uZUxhYmVsJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZElucHV0JywgJ2F0bGFzLWlucHV0JylcIiB0eXBlPVwidGVsXCIgbmFtZT1cInBob25lXCIgYXV0b2NvbXBsZXRlPVwidGVsXCIgW3ZhbHVlXT1cInZhbHVlc1sncGhvbmUnXSA/PyAnJ1wiIChpbnB1dCk9XCJzZXRWYWx1ZSgncGhvbmUnLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiIC8+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dFwiPnt7IHQoJ21mYS5waG9uZUhpbnQnKSB9fTwvcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQGZvciAoZXJyb3Igb2YgZW5yb2wuZXJyb3JzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxwIFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZEVycm9yJywgJ2F0bGFzLWVycm9yJylcIiByb2xlPVwiYWxlcnRcIj57eyBlcnJvci5tZXNzYWdlIH19PC9wPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGVucm9sLm1ldGhvZCAhPT0gbnVsbCAmJiBlbnJvbC5vcHRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIEBmb3IgKG90aGVyIG9mIG90aGVyTWV0aG9kcyhlbnJvbCk7IHRyYWNrIG90aGVyKSB7XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2xzKCdmb3JtQnV0dG9uU2Vjb25kYXJ5JywgJ2F0bGFzLWJ1dHRvbi1zZWNvbmRhcnknKVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdGxhcy1tZmEtbWV0aG9kXT1cIm90aGVyXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnVzeSB8fCBlbnJvbC5idXN5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hvb3NlTWV0aG9kKG90aGVyKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB0KG90aGVyID09PSAndG90cCcgPyAnbWZhLmVucm9sbFRvdHBPcHRpb24nIDogJ21mYS5lbnJvbGxTbXNPcHRpb24nKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAoZiBvZiBmaWVsZHMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgQGlmIChmLmtpbmQgPT09ICdpbnB1dCcpIHtcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImF0bGFzLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHQoZi5sYWJlbEtleSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZElucHV0JywgJ2F0bGFzLWlucHV0JylcIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cImYudHlwZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIubmFtZV09XCJmLm5hbWVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCJmLmF1dG9jb21wbGV0ZSA/PyBudWxsXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVzW2YubmFtZV0gPz8gJydcIlxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJzZXRWYWx1ZShmLm5hbWUsICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgQGZvciAoZXJyb3Igb2YgZmllbGRFcnJvcnNGb3IoZi5uYW1lKTsgdHJhY2sgZXJyb3IuY29kZSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZEVycm9yJywgJ2F0bGFzLWVycm9yJylcIj57eyBlcnJvclRleHQoZXJyb3IpIH19PC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIH0gQGVsc2UgaWYgKGYua2luZCA9PT0gJ3JlbGVhc2VkJykge1xuICAgICAgICAgICAgPHAgY2xhc3M9XCJhdGxhcy10ZXh0XCIgZGF0YS1hdGxhcy1wYXNzd29yZC1yZWxlYXNlZD1cIlwiPnt7IHQoZi5sYWJlbEtleSkgfX08L3A+XG4gICAgICAgICAgfSBAZWxzZSBpZiAoZi5raW5kID09PSAnYWxlcnQnKSB7XG4gICAgICAgICAgICA8cCBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRFcnJvcicsICdhdGxhcy1lcnJvcicpXCIgcm9sZT1cImFsZXJ0XCI+e3sgdChmLmxhYmVsS2V5KSB9fTwvcD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxwPnt7IHQoZi5sYWJlbEtleSkgfX08L3A+XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChhd2FpdGluZ1BvbGljaWVzKCkpIHtcbiAgICAgICAgICA8IS0tIEEgcmVxdWlyZWQgcG9saWN5IGNoYW5nZWQ6IHNjcm9sbC1tb2RlIG9uZXMgaW4gdGhlaXIgZGlhbG9nLCB0aGUgcmVzdCBhcyBjaGVja2JveGVzLiAtLT5cbiAgICAgICAgICA8YXRsYXMtcG9saWN5LWFjY2VwdC1zdGVwXG4gICAgICAgICAgICBbYXR0ZW1wdF09XCJhdHRlbXB0XCJcbiAgICAgICAgICAgIFtidXN5XT1cImJ1c3lcIlxuICAgICAgICAgICAgKHN1Ym1pdEZsb3cpPVwic3VibWl0Rmxvdy5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKGRlY2xpbmVkKT1cInBvbGljeURlY2xpbmVkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYXRsYXMtcG9saWN5LWFjY2VwdC1zdGVwPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChzaG93Q2FwdGNoYSgpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF0bGFzLWNhcHRjaGFcIiBkYXRhLWF0bGFzLWNhcHRjaGE9XCJcIiBbYXRsYXNDYXB0Y2hhU2xvdF09XCJjYXB0Y2hhXCI+PC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHNob3dTdWJtaXQoKSkge1xuICAgICAgICAgIDxidXR0b24gW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblByaW1hcnknLCAnYXRsYXMtYnV0dG9uJylcIiBbZGlzYWJsZWRdPVwiYnVzeSB8fCAoZW5yb2xsaW5nKCkgJiYgISFlbnJvbGxtZW50U3RhdGU/LmJ1c3kpXCIgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgICAge3sgdChzdWJtaXRLZXkoKSkgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoc2hvd1Ntc1NlY29uZEZhY3RvcigpKSB7XG4gICAgICAgICAgQGlmIChzbXNTZWNvbmRGYWN0b3JTZW50VG8oKTsgYXMgc2VudFRvKSB7XG4gICAgICAgICAgICA8cCBjbGFzcz1cImF0bGFzLXRleHRcIiBkYXRhLWF0bGFzPVwic21zLXNlY29uZC1mYWN0b3Itc2VudFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAgICB7eyB0KCdtZmEuY29kZVRleHRlZFRvJywgeyBwaG9uZTogc2VudFRvIH0pIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIFtjbGFzc109XCJjbHMoJ2Zvcm1CdXR0b25TZWNvbmRhcnknLCAnYXRsYXMtYnV0dG9uLXNlY29uZGFyeScpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGRhdGEtYXRsYXM9XCJzbXMtc2Vjb25kLWZhY3RvclwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXN5IHx8ICEhdGV4dGVkU2Vjb25kRmFjdG9yPy5idXN5XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNtc1NlY29uZEZhY3Rvci5lbWl0KClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyB0ZXh0ZWRTZWNvbmRGYWN0b3I/LmJ1c3kgPyB0KCdzaWduSW4uc2VuZGluZycpIDogdCgnbWZhLnNtc0NvZGVPcHRpb24nKSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICBAaWYgKHRleHRlZFNlY29uZEZhY3Rvcj8uZXJyb3I7IGFzIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgPHAgW2NsYXNzXT1cImNscygnZm9ybUZpZWxkRXJyb3InLCAnYXRsYXMtZXJyb3InKVwiIHJvbGU9XCJhbGVydFwiPnt7IG1lc3NhZ2UgfX08L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChzaG93RW1haWxTZWNvbmRGYWN0b3IoKSkge1xuICAgICAgICAgIEBpZiAoZW1haWxTZWNvbmRGYWN0b3JTZW50VG8oKTsgYXMgc2VudFRvKSB7XG4gICAgICAgICAgICA8cCBjbGFzcz1cImF0bGFzLXRleHRcIiBkYXRhLWF0bGFzPVwiZW1haWwtc2Vjb25kLWZhY3Rvci1zZW50XCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICAgIHt7IHQoJ3NpZ25Jbi5jb2RlU2VudFRvJywgeyBlbWFpbDogc2VudFRvIH0pIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIFtjbGFzc109XCJjbHMoJ2Zvcm1CdXR0b25TZWNvbmRhcnknLCAnYXRsYXMtYnV0dG9uLXNlY29uZGFyeScpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGRhdGEtYXRsYXM9XCJlbWFpbC1zZWNvbmQtZmFjdG9yXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1c3kgfHwgISFlbWFpbGVkU2Vjb25kRmFjdG9yPy5idXN5XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImVtYWlsU2Vjb25kRmFjdG9yLmVtaXQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGVtYWlsZWRTZWNvbmRGYWN0b3I/LmJ1c3kgPyB0KCdzaWduSW4uc2VuZGluZycpIDogdCgnc2lnbkluLmVtYWlsQ29kZU9wdGlvbicpIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIEBpZiAoZW1haWxlZFNlY29uZEZhY3Rvcj8uZXJyb3I7IGFzIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgPHAgW2NsYXNzXT1cImNscygnZm9ybUZpZWxkRXJyb3InLCAnYXRsYXMtZXJyb3InKVwiIHJvbGU9XCJhbGVydFwiPnt7IG1lc3NhZ2UgfX08L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChzaG93RW1haWxDb2RlT3B0aW9uKCkpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBbY2xhc3NdPVwiY2xzKCdmb3JtQnV0dG9uU2Vjb25kYXJ5JywgJ2F0bGFzLWJ1dHRvbi1zZWNvbmRhcnknKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnVzeVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtc3RyYXRlZ3ldPVwicHJlcGFyZWRGYWN0b3IgPT09ICdlbWFpbF9jb2RlJyA/IG51bGwgOiAnZW1haWxfY29kZSdcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1hdGxhcy1yZXNlbmRdPVwicHJlcGFyZWRGYWN0b3IgPT09ICdlbWFpbF9jb2RlJyA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hvb3NlRmFjdG9yLmVtaXQoJ2VtYWlsX2NvZGUnKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdChwcmVwYXJlZEZhY3RvciA9PT0gJ2VtYWlsX2NvZGUnID8gJ3NpZ25Jbi5yZXNlbmRDb2RlJyA6ICdzaWduSW4udXNlRW1haWxDb2RlJykgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoaG9sZFByb29mID09PSAnZW1haWxfbGluaycgJiYgc3RlcCgpLmtpbmQgPT09ICdjb2xsZWN0X2ZpcnN0X2ZhY3RvcicpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBbY2xhc3NdPVwiY2xzKCdmb3JtQnV0dG9uU2Vjb25kYXJ5JywgJ2F0bGFzLWJ1dHRvbi1zZWNvbmRhcnknKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnVzeVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtc3RyYXRlZ3ldPVwicHJlcGFyZWRGYWN0b3IgPT09ICdlbWFpbF9saW5rJyA/IG51bGwgOiAnZW1haWxfbGluaydcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1hdGxhcy1yZXNlbmRdPVwicHJlcGFyZWRGYWN0b3IgPT09ICdlbWFpbF9saW5rJyA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hvb3NlRmFjdG9yLmVtaXQoJ2VtYWlsX2xpbmsnKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdChwcmVwYXJlZEZhY3RvciA9PT0gJ2VtYWlsX2xpbmsnID8gJ3NpZ25Jbi5yZXNlbmRMaW5rJyA6ICdzaWduSW4udXNlRW1haWxMaW5rJykgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAocHJlcGFyZWRGYWN0b3IgJiYgb2ZmZXJlZCgpLmluY2x1ZGVzKCdwYXNzd29yZCcpKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblNlY29uZGFyeScsICdhdGxhcy1idXR0b24tc2Vjb25kYXJ5JylcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1c3lcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBkYXRhLXN0cmF0ZWd5PVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInVzZVBhc3N3b3JkLmVtaXQoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdCgnc2lnbkluLnBhc3N3b3JkT3B0aW9uJykgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBBdHRlbXB0Rmxvd0NvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXRsYXMgPSBpbmplY3QoQXRsYXNTZXJ2aWNlKTtcblxuICBASW5wdXQoKSBhdHRlbXB0OiBBdHRlbXB0VmlldyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBidXN5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVycm9yczogRmllbGRFcnJvcltdID0gW107XG4gIC8qKiBgRmxvd1N0YXRlLnNlc3Npb25LZXB0YDogd2hldGhlciB0aGlzIGJyb3dzZXIga2VwdCB0aGUgc2Vzc2lvbiB0aGUgc2lnbi1pbiBjcmVhdGVkLiAqL1xuICBASW5wdXQoKSBzZXNzaW9uS2VwdDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgdGl0bGVLZXkgPSAnc2lnbkluLnRpdGxlJztcbiAgLyoqXG4gICAqIFRoZSBzaWduLWluIGNhcHRjaGEsIGRyYXduIGFib3ZlIHRoZSBzdWJtaXQgYnV0dG9uIG9uIHRoZSBpZGVudGlmaWVyIHN0ZXBcbiAgICogKGFuIGFsd2F5cy1vbiBzaWduLWluIGNhcHRjaGEpIGFuZCBvbiB0aGUgY2hhbGxlbmdlIHN0ZXAgdGhlIHNlcnZlciBkZW1hbmRzXG4gICAqIHdpdGggYG5lZWRzX2NhcHRjaGFgLiBOdWxsIHdoZW4gdGhlIGZsb3cgZHJhd3Mgbm9uZS5cbiAgICovXG4gIEBJbnB1dCgpIGNhcHRjaGE6IENhcHRjaGFDb250cm9sbGVyIHwgbnVsbCA9IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgZmFjdG9ycyB0byBvZmZlciBvbiB0aGUgYG5lZWRzX2ZpcnN0X2ZhY3RvcmAgc3RlcCDigJQgcGFzc1xuICAgKiBgQXRsYXNGbG93Q29udHJvbGxlci5maXJzdEZhY3RvcnMoKWAsIHdoaWNoIGRyb3BzIGVtYWlsIGNvZGUgLyBsaW5rIHdoaWxlIHRoZVxuICAgKiBhcHAgY2Fubm90IGRlbGl2ZXIgZW1haWwuIE51bGwgdXNlcyB0aGUgc2VydmVyJ3MgbGlzdCBhcy1pcy5cbiAgICovXG4gIEBJbnB1dCgpIGZpcnN0RmFjdG9yczogc3RyaW5nW10gfCBudWxsID0gbnVsbDtcbiAgLyoqIFRoZSBmaXJzdCBmYWN0b3IgYWxyZWFkeSBzZW50IChgQXRsYXNGbG93Q29udHJvbGxlci5wcmVwYXJlZEZhY3RvcigpYCk6IGl0cyBjb2RlIGlzIGNvbGxlY3RlZC4gKi9cbiAgQElucHV0KCkgcHJlcGFyZWRGYWN0b3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAvKiogYEZsb3dTdGF0ZS5wYXNzd29yZEhvbGRgOiB3aGVyZSB0aGUgcHJvb2Ygd2VudCwgYW5kIHdoZXRoZXIgdGhlIHBhc3N3b3JkIHNpZ25zIGluIG5vdy4gKi9cbiAgQElucHV0KCkgcGFzc3dvcmRIb2xkOiBGbG93U3RhdGVbJ3Bhc3N3b3JkSG9sZCddID0gbnVsbDtcbiAgLyoqIGBBdGxhc0Zsb3dDb250cm9sbGVyLmhvbGRQcm9vZigpYDogdGhlIGVtYWlsZWQgcHJvb2YgYSBwYXNzd29yZCBob2xkIHN0aWxsIHdhaXRzIG9uLiAqL1xuICBASW5wdXQoKSBob2xkUHJvb2Y6ICdlbWFpbF9jb2RlJyB8ICdlbWFpbF9saW5rJyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBFbWl0cyB0aGUgY29sbGVjdGVkIGZpZWxkIHZhbHVlcyB3aGVuIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZC4gKi9cbiAgQE91dHB1dCgpIHN1Ym1pdEZsb3cgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KCk7XG4gIC8qKiBFbWl0cyB3aGVuIHRoZSB1c2VyIHBpY2tzIGEgZmlyc3QgZmFjdG9yIHRoZSBzZXJ2ZXIgbXVzdCBzZW5kIGZpcnN0IChhbiBlbWFpbGVkIGNvZGUpLiAqL1xuICBAT3V0cHV0KCkgY2hvb3NlRmFjdG9yID0gbmV3IEV2ZW50RW1pdHRlcjwnZW1haWxfY29kZScgfCAnZW1haWxfbGluayc+KCk7XG4gIC8qKiBFbWl0cyBvbiBcIlVzZSB5b3VyIHBhc3N3b3JkIGluc3RlYWRcIiwgZnJvbSBhbiBlbWFpbGVkIGZhY3RvciBhbHJlYWR5IHNlbnQuICovXG4gIEBPdXRwdXQoKSB1c2VQYXNzd29yZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIE9mZmVyIFwiRW1haWwgbWUgYSBjb2RlIGluc3RlYWRcIiBhdCB0aGUgc2Vjb25kIGZhY3RvciAodGhlIGluc3RhbmNlJ3NcbiAgICogYGFjY291bnQuZW1haWxTZWNvbmRGYWN0b3JgKTsgYGVtYWlsU2Vjb25kRmFjdG9yYCBhc2tzIGZvciBpdCBhbmRcbiAgICogYGVtYWlsZWRTZWNvbmRGYWN0b3JgIHJlcG9ydHMgaG93IGl0IHdlbnQuXG4gICAqL1xuICBASW5wdXQoKSBvZmZlckVtYWlsU2Vjb25kRmFjdG9yID0gZmFsc2U7XG4gIC8qKiBgQXRsYXNGbG93Q29udHJvbGxlci5lbWFpbFNlY29uZEZhY3RvcigpYDogaW4gZmxpZ2h0LCB3aGVyZSBpdCB3ZW50LCBvciB3aHkgbm90LiAqL1xuICBASW5wdXQoKSBlbWFpbGVkU2Vjb25kRmFjdG9yOiB7IGJ1c3k/OiBib29sZWFuOyBzZW50VG8/OiBzdHJpbmc7IGVycm9yPzogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcbiAgQE91dHB1dCgpIGVtYWlsU2Vjb25kRmFjdG9yID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKipcbiAgICogT2ZmZXIgXCJUZXh0IG1lIGEgY29kZSBpbnN0ZWFkXCIgYXQgdGhlIHNlY29uZCBmYWN0b3IgKHdoZXJlIHRoZSBhcHAgb2ZmZXJzXG4gICAqIHRleHRlZCBjb2RlcywgYEF0bGFzRmxvd0NvbnRyb2xsZXIubWZhQ2hvaWNlcygpLnNtc2ApOyBgc21zU2Vjb25kRmFjdG9yYFxuICAgKiBhc2tzIGZvciBpdCBhbmQgYHRleHRlZFNlY29uZEZhY3RvcmAgcmVwb3J0cyBob3cgaXQgd2VudC5cbiAgICovXG4gIEBJbnB1dCgpIG9mZmVyU21zU2Vjb25kRmFjdG9yID0gZmFsc2U7XG4gIC8qKiBgQXRsYXNGbG93Q29udHJvbGxlci5zbXNTZWNvbmRGYWN0b3IoKWA6IGluIGZsaWdodCwgd2hlcmUgaXQgd2VudCwgb3Igd2h5IG5vdC4gKi9cbiAgQElucHV0KCkgdGV4dGVkU2Vjb25kRmFjdG9yOiB7IGJ1c3k/OiBib29sZWFuOyBzZW50VG8/OiBzdHJpbmc7IGVycm9yPzogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcbiAgQE91dHB1dCgpIHNtc1NlY29uZEZhY3RvciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIFRoZSBNRkEgZW5yb2xtZW50IHN0ZXAgKGBBdGxhc0Zsb3dDb250cm9sbGVyLmVucm9sbG1lbnRgIGFuZFxuICAgKiBgZW5yb2xsbWVudFN0YXRlKClgKTogdGhlIGF1dGhlbnRpY2F0b3IgYXBwJ3MgUVIgY29kZSBhbmQgc2V0dXAga2V5LCBvciBhXG4gICAqIHRleHRlZCBjb2RlLiBOdWxsOiB0aGUgc3RlcCBhc2tzIGZvciB0d28gYXV0aGVudGljYXRvciBjb2RlcyBvbmx5LlxuICAgKi9cbiAgQElucHV0KCkgZW5yb2xsbWVudDogTWZhRW5yb2xsbWVudENvbnRyb2xsZXIgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgZW5yb2xsbWVudFN0YXRlOiBNZmFFbnJvbGxtZW50U3RhdGUgfCBudWxsID0gbnVsbDtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSdzIGBhY2NvdW50LmVtYWlsVmVyaWZpY2F0aW9uYC4gT24gYGxpbmtgIGEgc2lnbi11cCdzXG4gICAqIHZlcmlmaWNhdGlvbiBzdGVwIGhhcyBub3RoaW5nIHRvIHR5cGU6IGl0IHNheXMgdG8gb3BlbiB0aGUgZW1haWxlZCBsaW5rXG4gICAqIHdoaWxlIHRoZSBmbG93IHBvbGxzLCBhbmQgb2ZmZXJzIGEgcmVzZW5kIChgcmVzZW5kYCkuXG4gICAqL1xuICBASW5wdXQoKSBlbWFpbFZlcmlmaWNhdGlvbjogc3RyaW5nID0gJ2NvZGUnO1xuICBAT3V0cHV0KCkgcmVzZW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKiogVGhlIHVzZXIgZGVjbGluZWQgYSBwb2xpY3kgdGhlIHNpZ24taW4gd2FzIHdhaXRpbmcgb24gKGBuZWVkc19wb2xpY3lfYWNjZXB0YW5jZWApOiBjYW5jZWwgdGhlIGF0dGVtcHQuICovXG4gIEBPdXRwdXQoKSBwb2xpY3lEZWNsaW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIHByb3RlY3RlZCB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBwcm90ZWN0ZWQgdChrZXk6IHN0cmluZywgdmFycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0cmFuc2xhdGUodGhpcy5hdGxhcy5sb2NhbGl6YXRpb24sIGtleSwgdmFycyk7XG4gIH1cblxuICAvKiogQSBzZXJ2ZXIgZXJyb3IgaW4gdGhlIGFwcCdzIGxhbmd1YWdlIChgZXJyb3IuPHJlYXNvbj5gLCBlbHNlIHRoZSBzZXJ2ZXIncyBtZXNzYWdlKS4gKi9cbiAgcHJvdGVjdGVkIGVycm9yVGV4dChlcnJvcjogRmllbGRFcnJvcik6IHN0cmluZyB7XG4gICAgLy8gYGVycm9yTG9jYWxpemF0aW9uYCBpcyByZWFkIGRlZmVuc2l2ZWx5OiBhIHN0YW5kLWluIHNlcnZpY2UgbWF5IGxhY2sgaXQuXG4gICAgY29uc3QgbGF5ZXIgPSAodGhpcy5hdGxhcyBhcyB7IGVycm9yTG9jYWxpemF0aW9uPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9KS5lcnJvckxvY2FsaXphdGlvbjtcbiAgICByZXR1cm4gbG9jYWxpemVkRXJyb3JNZXNzYWdlKGVycm9yLCBsYXllciA/PyB0aGlzLmF0bGFzLmxvY2FsaXphdGlvbiwgdGhpcy5hdGxhcy5sb2NhbGl6YXRpb24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNscyhrZXk6IEVsZW1lbnRLZXksIGJhc2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNsYXNzRm9yKGtleSwgdGhpcy5hdGxhcy5hcHBlYXJhbmNlLCBiYXNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlcyA9IHsgLi4udGhpcy52YWx1ZXMsIFtuYW1lXTogdmFsdWUgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblN1Ym1pdChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vIEVucm9sbWVudDogdGV4dCB0aGUgY29kZSB0byB0aGUgdHlwZWQgbnVtYmVyLCBvciBjb25maXJtIHRoZSBmYWN0b3IuXG4gICAgaWYgKHRoaXMuZW5yb2xsaW5nKCkgJiYgdGhpcy5lbnJvbGxtZW50KSB7XG4gICAgICB2b2lkIHRoaXMuZW5yb2xsbWVudC5zdWJtaXQodGhpcy52YWx1ZXMpLnRoZW4oKG5leHQpID0+IHtcbiAgICAgICAgaWYgKG5leHQpIHRoaXMuc3VibWl0Rmxvdy5lbWl0KG5leHQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIE9ubHkgd2hhdCBpcyBvbiBzY3JlZW46IGEgY29kZSB0eXBlZCBlYXJsaWVyIG11c3Qgbm90IHR1cm4gYSBwYXNzd29yZCBpbnRvIGEgY29kZSBhdHRlbXB0LlxuICAgIGlmICh0aGlzLnN0ZXAoKS5raW5kID09PSAnY29sbGVjdF9maXJzdF9mYWN0b3InKSB7XG4gICAgICB0aGlzLnN1Ym1pdEZsb3cuZW1pdCh0aGlzLnByZXBhcmVkRmFjdG9yID09PSAnZW1haWxfY29kZScgPyB7IGNvZGU6IHRoaXMudmFsdWVzWydjb2RlJ10gPz8gJycgfSA6IHsgcGFzc3dvcmQ6IHRoaXMudmFsdWVzWydwYXNzd29yZCddID8/ICcnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN1Ym1pdEZsb3cuZW1pdCh0aGlzLnZhbHVlcyk7XG4gIH1cblxuICAvKiogVGhlIHNoYXJlZCBlbnJvbG1lbnQgc3RlcCBpcyBkcmF3biAoYSBjb250cm9sbGVyIHdhcyBwYXNzZWQgYW5kIHRoZSBmbG93IGlzIGVucm9sbGluZykuICovXG4gIHByb3RlY3RlZCBlbnJvbGxpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcCgpLmtpbmQgPT09ICdlbnJvbGxfc2Vjb25kX2ZhY3RvcicgJiYgISF0aGlzLmVucm9sbG1lbnQgJiYgISF0aGlzLmVucm9sbG1lbnRTdGF0ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaG9vc2VNZXRob2QobWV0aG9kOiBNZmFFbnJvbGxtZW50U3RyYXRlZ3kpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgIHZvaWQgdGhpcy5lbnJvbGxtZW50Py5jaG9vc2UobWV0aG9kKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNlbmRFbnJvbGxtZW50KCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5lbnJvbGxtZW50Py5yZXNlbmQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdGhlck1ldGhvZHMoc3RhdGU6IE1mYUVucm9sbG1lbnRTdGF0ZSk6IE1mYUVucm9sbG1lbnRTdHJhdGVneVtdIHtcbiAgICByZXR1cm4gc3RhdGUub3B0aW9ucy5maWx0ZXIoKG0pID0+IG0gIT09IHN0YXRlLm1ldGhvZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBLZXkoc2VjcmV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBncm91cFNldHVwS2V5KHNlY3JldCk7XG4gIH1cblxuICAvKiogVGhlIHN1Ym1pdCBidXR0b24ncyBsYWJlbCBrZXkgKGVucm9sbWVudDogXCJUZXh0IG1lIGEgY29kZVwiIGJlZm9yZSB0aGUgbnVtYmVyIGlzIHNlbnQpLiAqL1xuICBwcm90ZWN0ZWQgc3VibWl0S2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmVucm9sbGluZygpICYmIHRoaXMuZW5yb2xsbWVudFN0YXRlICYmIGVucm9sbG1lbnRTdWJtaXRLZXkodGhpcy5lbnJvbGxtZW50U3RhdGUpKSB8fCAnc2lnbkluLnN1Ym1pdCc7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1Ntc1NlY29uZEZhY3RvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vZmZlclNtc1NlY29uZEZhY3RvciAmJiB0aGlzLnN0ZXAoKS5raW5kID09PSAnY29sbGVjdF9zZWNvbmRfZmFjdG9yJztcbiAgfVxuXG4gIC8qKiBXaGVyZSB0aGUgdGV4dGVkIHNlY29uZC1mYWN0b3IgY29kZSB3ZW50IChtYXNrZWQpLCBvbmNlIGl0IHdhcyBzZW50LiAqL1xuICBwcm90ZWN0ZWQgc21zU2Vjb25kRmFjdG9yU2VudFRvKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHNlbnQgPSB0aGlzLnRleHRlZFNlY29uZEZhY3Rvcj8uc2VudFRvO1xuICAgIHJldHVybiB0eXBlb2Ygc2VudCA9PT0gJ3N0cmluZycgPyBzZW50IHx8ICcgJyA6IG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZm9ybUVycm9ycygpOiBGaWVsZEVycm9yW10ge1xuICAgIHJldHVybiB0aGlzLmVycm9ycy5maWx0ZXIoKGVycm9yKSA9PiAhZXJyb3IucGFyYW0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpZWxkRXJyb3JzRm9yKG5hbWU6IHN0cmluZyk6IEZpZWxkRXJyb3JbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmZpbHRlcigoZXJyb3IpID0+IGVycm9yLnBhcmFtID09PSBuYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGVwKCkge1xuICAgIHJldHVybiB0aGlzLmF0dGVtcHQgPyBuZXh0U3RlcCh0aGlzLmF0dGVtcHQpIDogKHsga2luZDogJ2NvbGxlY3RfaWRlbnRpZmllcicgfSBhcyBjb25zdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd0NhcHRjaGEoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2luZCA9IHRoaXMuc3RlcCgpLmtpbmQ7XG4gICAgcmV0dXJuICEhdGhpcy5jYXB0Y2hhICYmIChraW5kID09PSAnY29sbGVjdF9pZGVudGlmaWVyJyB8fCBraW5kID09PSAnY29sbGVjdF9jYXB0Y2hhJyk7XG4gIH1cblxuICAvKiogVGhlIGZpcnN0IGZhY3RvcnMgb24gb2ZmZXIgYXQgYSBgbmVlZHNfZmlyc3RfZmFjdG9yYCBzdGVwIChlbXB0eSBvbiBhbnkgb3RoZXIpLiAqL1xuICBwcm90ZWN0ZWQgb2ZmZXJlZCgpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuc3RlcCgpO1xuICAgIGlmIChzdGVwLmtpbmQgIT09ICdjb2xsZWN0X2ZpcnN0X2ZhY3RvcicpIHJldHVybiBbXTtcbiAgICByZXR1cm4gdGhpcy5maXJzdEZhY3RvcnMgPz8gc3RlcC5zdHJhdGVnaWVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGxpbmtPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhd2FpdGluZ1NpZ25VcExpbmsodGhpcy5hdHRlbXB0LCB0aGlzLmVtYWlsVmVyaWZpY2F0aW9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93RW1haWxTZWNvbmRGYWN0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub2ZmZXJFbWFpbFNlY29uZEZhY3RvciAmJiB0aGlzLnN0ZXAoKS5raW5kID09PSAnY29sbGVjdF9zZWNvbmRfZmFjdG9yJztcbiAgfVxuXG4gIC8qKiBXaGVyZSB0aGUgZW1haWxlZCBzZWNvbmQtZmFjdG9yIGNvZGUgd2VudCAobWFza2VkKSwgb25jZSBpdCB3YXMgc2VudC4gKi9cbiAgcHJvdGVjdGVkIGVtYWlsU2Vjb25kRmFjdG9yU2VudFRvKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHNlbnQgPSB0aGlzLmVtYWlsZWRTZWNvbmRGYWN0b3I/LnNlbnRUbztcbiAgICByZXR1cm4gdHlwZW9mIHNlbnQgPT09ICdzdHJpbmcnID8gc2VudCB8fCAnICcgOiBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNob3dFbWFpbENvZGVPcHRpb24oKTogYm9vbGVhbiB7XG4gICAgLy8gQmVmb3JlIHRoZSBjb2RlIGlzIHNlbnQ6IHRoZSBjaG9pY2UgKG9yIHRoZSByZXRyeSBvZiBhIGZhaWxlZCBhdXRvbWF0aWNcbiAgICAvLyBzZW5kKS4gQWZ0ZXI6IFwiUmVzZW5kIGNvZGVcIi5cbiAgICByZXR1cm4gdGhpcy5vZmZlcmVkKCkuaW5jbHVkZXMoJ2VtYWlsX2NvZGUnKTtcbiAgfVxuXG4gIC8qKiBUaGUgXCJ3ZSBzZW50IGEgY29kZSB0byDigKZcIiBsaW5lIG9uIHRoZSBjb2RlIHN0ZXAuICovXG4gIHByb3RlY3RlZCBjb2RlU2VudFRleHQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc3RlcCgpLmtpbmQgIT09ICdjb2xsZWN0X2ZpcnN0X2ZhY3RvcicgfHwgdGhpcy5wcmVwYXJlZEZhY3RvciAhPT0gJ2VtYWlsX2NvZGUnKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy50KCdzaWduSW4uY29kZVNlbnRUbycsIHsgZW1haWw6IHRoaXMucGFzc3dvcmRIb2xkPy5lbWFpbCA/PyB0aGlzLmF0dGVtcHQ/LmlkZW50aWZpZXIgPz8gJycgfSk7XG4gIH1cblxuICAvKiogVGhlIFwid2Ugc2VudCBhIGxpbmsgdG8g4oCmXCIgbGluZSwgb25jZSBhIGxpbmsgd2FzIHNlbnQuICovXG4gIHByb3RlY3RlZCBsaW5rU2VudFRleHQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc3RlcCgpLmtpbmQgIT09ICdjb2xsZWN0X2ZpcnN0X2ZhY3RvcicgfHwgdGhpcy5wcmVwYXJlZEZhY3RvciAhPT0gJ2VtYWlsX2xpbmsnKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy50KCdzaWduSW4ubGlua1NlbnRUbycsIHsgZW1haWw6IHRoaXMucGFzc3dvcmRIb2xkPy5lbWFpbCA/PyB0aGlzLmF0dGVtcHQ/LmlkZW50aWZpZXIgPz8gJycgfSk7XG4gIH1cblxuICAvKiogVGhlIGF0dGVtcHQgaXMgYG5lZWRzX3BvbGljeV9hY2NlcHRhbmNlYC4gKi9cbiAgcHJvdGVjdGVkIGF3YWl0aW5nUG9saWNpZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcCgpLmtpbmQgPT09ICdhY2NlcHRfcG9saWNpZXMnO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNob3dTdWJtaXQoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2luZCA9IHRoaXMuc3RlcCgpLmtpbmQ7XG4gICAgLy8gTm90aGluZyB0byBzdWJtaXQgb24gYSBmaXJzdC1mYWN0b3Igc3RlcCB0aGF0IG9ubHkgb2ZmZXJzIGFuIGVtYWlsZWQgY29kZVxuICAgIC8vIHVudGlsIHRoYXQgY29kZSBpcyBzZW50LlxuICAgIGlmIChraW5kID09PSAnY29sbGVjdF9maXJzdF9mYWN0b3InKSByZXR1cm4gdGhpcy5maWVsZHMoKS5zb21lKChmKSA9PiBmLmtpbmQgPT09ICdpbnB1dCcpO1xuICAgIGlmICh0aGlzLmxpbmtPbmx5KCkpIHJldHVybiBmYWxzZTtcbiAgICAvLyBFbnJvbG1lbnQ6IG5vdGhpbmcgdG8gc3VibWl0IHdoaWxlIGNob29zaW5nIGEgbWV0aG9kIG9yIGZldGNoaW5nIHRoZSBzZXR1cC5cbiAgICBpZiAodGhpcy5lbnJvbGxpbmcoKSAmJiB0aGlzLmVucm9sbG1lbnRTdGF0ZSAmJiAhZW5yb2xsbWVudFN1Ym1pdEtleSh0aGlzLmVucm9sbG1lbnRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4ga2luZCAhPT0gJ2RvbmUnICYmIGtpbmQgIT09ICdhd2FpdF9vYXV0aCcgJiYga2luZCAhPT0gJ2FjY2VwdF9wb2xpY2llcyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmllbGRzKCk6IFN0ZXBGaWVsZFtdIHtcbiAgICBjb25zdCBzdGVwID0gdGhpcy5zdGVwKCk7XG4gICAgc3dpdGNoIChzdGVwLmtpbmQpIHtcbiAgICAgIGNhc2UgJ2NvbGxlY3RfaWRlbnRpZmllcic6XG4gICAgICAgIC8vIGB3ZWJhdXRobmA6IHNhdmVkIHBhc3NrZXlzIGFwcGVhciBpbiB0aGlzIGZpZWxkJ3MgYXV0b2ZpbGwgd2hpbGUgPGF0bGFzLXNpZ24taW4+IGhvbGRzIGEgY29uZGl0aW9uYWwgcmVxdWVzdC5cbiAgICAgICAgcmV0dXJuIFt7IGtpbmQ6ICdpbnB1dCcsIG5hbWU6ICdpZGVudGlmaWVyJywgbGFiZWxLZXk6ICdzaWduSW4uaWRlbnRpZmllckxhYmVsJywgdHlwZTogJ2VtYWlsJywgYXV0b2NvbXBsZXRlOiAndXNlcm5hbWUgd2ViYXV0aG4nIH1dO1xuICAgICAgY2FzZSAnY29sbGVjdF9maXJzdF9mYWN0b3InOiB7XG4gICAgICAgIGlmICh0aGlzLnByZXBhcmVkRmFjdG9yID09PSAnZW1haWxfY29kZScpIHtcbiAgICAgICAgICByZXR1cm4gW3sga2luZDogJ2lucHV0JywgbmFtZTogJ2NvZGUnLCBsYWJlbEtleTogJ3NpZ25Jbi5lbWFpbENvZGVMYWJlbCcsIHR5cGU6ICd0ZXh0JyB9XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcmVwYXJlZEZhY3RvciA9PT0gJ2VtYWlsX2xpbmsnKSByZXR1cm4gW107XG4gICAgICAgIC8vIFRoZSBwYXNzd29yZCBmaWVsZCB1bmxlc3MgdGhlIG9ubHkgb2ZmZXIgaXMgYW4gZW1haWxlZCBjb2RlIChjaG9zZW5cbiAgICAgICAgLy8gd2l0aCB0aGUgYnV0dG9uIGJlbG93IHRoZSBmb3JtKS5cbiAgICAgICAgY29uc3Qgb2ZmZXJlZCA9IHRoaXMub2ZmZXJlZCgpO1xuICAgICAgICByZXR1cm4gb2ZmZXJlZC5pbmNsdWRlcygnZW1haWxfY29kZScpICYmICFvZmZlcmVkLmluY2x1ZGVzKCdwYXNzd29yZCcpXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAuLi4odGhpcy5wYXNzd29yZEhvbGQ/LnJlbGVhc2VkID8gW3JlbGVhc2VkKCldIDogW10pLFxuICAgICAgICAgICAgICB7IGtpbmQ6ICdpbnB1dCcsIG5hbWU6ICdwYXNzd29yZCcsIGxhYmVsS2V5OiAnc2lnbkluLnBhc3N3b3JkTGFiZWwnLCB0eXBlOiAncGFzc3dvcmQnIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sbGVjdF9zZWNvbmRfZmFjdG9yJzpcbiAgICAgICAgcmV0dXJuIFt7IGtpbmQ6ICdpbnB1dCcsIG5hbWU6ICdjb2RlJywgbGFiZWxLZXk6ICdtZmEuY29kZUxhYmVsJywgdHlwZTogJ3RleHQnIH1dO1xuICAgICAgY2FzZSAnZW5yb2xsX3NlY29uZF9mYWN0b3InOlxuICAgICAgICAvLyBUaGUgc2hhcmVkIGVucm9sbWVudCBzdGVwIGRyYXdzIGl0cyBvd24gZmllbGRzIChhYm92ZSkuXG4gICAgICAgIGlmICh0aGlzLmVucm9sbGluZygpKSByZXR1cm4gW107XG4gICAgICAgIC8vIFR3byBjb25zZWN1dGl2ZSBjb2RlcyAowqc1LjYpOiBhIHBob25lIHdpdGggYSBmYXN0IGNsb2NrIGZhaWxzIGhlcmVcbiAgICAgICAgLy8gcmF0aGVyIHRoYW4gb24gZXZlcnkgc2lnbi1pbiBhZnRlcndhcmRzLlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHsga2luZDogJ2lucHV0JywgbmFtZTogJ2NvZGUnLCBsYWJlbEtleTogJ21mYS5lbnJvbGxGaXJzdENvZGVMYWJlbCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICAgIHsga2luZDogJ2lucHV0JywgbmFtZTogJ3NlY29uZENvZGUnLCBsYWJlbEtleTogJ21mYS5lbnJvbGxTZWNvbmRDb2RlTGFiZWwnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2NvbGxlY3RfZW1haWxfY29kZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmxpbmtPbmx5KCkgPyBbXSA6IFt7IGtpbmQ6ICdpbnB1dCcsIG5hbWU6ICdjb2RlJywgbGFiZWxLZXk6ICdzaWduSW4uZW1haWxDb2RlTGFiZWwnLCB0eXBlOiAndGV4dCcgfV07XG4gICAgICBjYXNlICdjb2xsZWN0X25ld19wYXNzd29yZCc6XG4gICAgICAgIHJldHVybiBbeyBraW5kOiAnaW5wdXQnLCBuYW1lOiAncGFzc3dvcmQnLCBsYWJlbEtleTogJ3Jlc2V0Lm5ld1Bhc3N3b3JkTGFiZWwnLCB0eXBlOiAncGFzc3dvcmQnIH1dO1xuICAgICAgY2FzZSAnYWNjZXB0X3BvbGljaWVzJzpcbiAgICAgICAgLy8gRHJhd24gYnkgPGF0bGFzLXBvbGljeS1hY2NlcHQtc3RlcD4gYWJvdmUuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIGNhc2UgJ2NvbGxlY3RfY2FwdGNoYSc6XG4gICAgICAgIC8vIMKnNSB0aGUgc2VydmVyIHdpdGhoZWxkIHRoZSBhdHRlbXB0IHVudGlsIGEgY2FwdGNoYSBjbGVhcnMuIFNvbHZpbmcgdGhlXG4gICAgICAgIC8vIHdpZGdldCByZXN1Ym1pdHMgdGhlIGlkZW50aWZpZXIgb24gaXRzIG93bjsgdGhlIGJ1dHRvbiByZXRyaWVzLlxuICAgICAgICByZXR1cm4gW21zZygnY2FwdGNoYS5wcm9tcHQnKV07XG4gICAgICBjYXNlICdhd2FpdF9vYXV0aCc6XG4gICAgICAgIHJldHVybiBbbXNnKCdzaWduSW4ubWFnaWNMaW5rU2VudCcpXTtcbiAgICAgIGNhc2UgJ2RvbmUnOlxuICAgICAgICAvLyBTaWduZWQgaW4gb25seSB3aGVuIHRoaXMgYnJvd3NlciBob2xkcyB0aGUgc2Vzc2lvbjsgYSBibG9ja2VkIGNvb2tpZSBpcyBzYWlkXG4gICAgICAgIC8vIHBsYWlubHkuIFwiQ2hlY2sgdGhlIG90aGVyIHRhYlwiIGlzIGZvciBhIHNpZ24taW4gY29tcGxldGVkIG9uIGFub3RoZXIgZGV2aWNlLlxuICAgICAgICBpZiAodGhpcy5zZXNzaW9uS2VwdCA9PT0gdHJ1ZSkgcmV0dXJuIFttc2coJ3NpZ25Jbi5zaWduZWRJbicpXTtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbktlcHQgPT09IGZhbHNlKSByZXR1cm4gW3sga2luZDogJ2FsZXJ0JywgbmFtZTogJycsIGxhYmVsS2V5OiAnc2lnbkluLnNlc3Npb25Ob3RLZXB0JywgdHlwZTogJ3RleHQnIH1dO1xuICAgICAgICByZXR1cm4gW21zZygnc2lnbkluLmNoZWNrT3RoZXJUYWInKV07XG4gICAgICBjYXNlICdyZXN0YXJ0JzpcbiAgICAgICAgcmV0dXJuIFttc2coJ2Vycm9yLmdlbmVyaWMnKV07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBBIHN0YXR1cyB0aGlzIFNESyB2ZXJzaW9uIGRvZXMgbm90IGtub3cuIEFuIGhvbmVzdCBtZXNzYWdlIGJlYXRzIGFcbiAgICAgICAgLy8gYmxhbmsgbG9naW4gYm94IHRoZSB1c2VyIGNhbm5vdCBhY3Qgb24uXG4gICAgICAgIHJldHVybiBbbXNnKCdlcnJvci5nZW5lcmljJyldO1xuICAgIH1cbiAgfVxufVxuXG4vKiogQSByZWFkLW9ubHkgbWVzc2FnZSByb3c6IGBsYWJlbEtleWAgaG9sZHMgdGhlIGkxOG4ga2V5IG9mIHRoZSB0ZXh0IHRvIHNob3cuICovXG5mdW5jdGlvbiBtc2cobGFiZWxLZXk6IHN0cmluZyk6IFN0ZXBGaWVsZCB7XG4gIHJldHVybiB7IGtpbmQ6ICdtZXNzYWdlJywgbmFtZTogJycsIGxhYmVsS2V5LCB0eXBlOiAndGV4dCcgfTtcbn1cblxuZnVuY3Rpb24gcmVsZWFzZWQoKTogU3RlcEZpZWxkIHtcbiAgcmV0dXJuIHsga2luZDogJ3JlbGVhc2VkJywgbmFtZTogJycsIGxhYmVsS2V5OiAnc2lnbkluLnBhc3N3b3JkSG9sZFJlbGVhc2VkJywgdHlwZTogJ3RleHQnIH07XG59XG4iXX0=
|
|
@@ -374,7 +374,13 @@ export class AtlasFlowController {
|
|
|
374
374
|
async finish(next) {
|
|
375
375
|
// An enrolment's recovery codes are shown first; `saveRecoveryCodes` finishes.
|
|
376
376
|
if (pendingRecoveryCodes(next)) {
|
|
377
|
-
|
|
377
|
+
// The ticket dies in 60 seconds and saving the codes can take longer: redeem it now,
|
|
378
|
+
// and `saveRecoveryCodes` finishes. A refused exchange keeps the ticket, so the save reports it.
|
|
379
|
+
this.setState({ ...next, busy: true });
|
|
380
|
+
const res = next.ticket
|
|
381
|
+
? await this.client.post('/v1/client/tickets/exchange', { attempt_id: next.attempt.id, ticket: next.ticket })
|
|
382
|
+
: null;
|
|
383
|
+
this.setState({ ...next, busy: false, ticket: res?.ok ? null : next.ticket });
|
|
378
384
|
return;
|
|
379
385
|
}
|
|
380
386
|
if (next.attempt?.status === 'complete') {
|
|
@@ -449,4 +455,4 @@ export class AtlasFlowController {
|
|
|
449
455
|
this.signUpCaptcha.destroy();
|
|
450
456
|
}
|
|
451
457
|
}
|
|
452
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zsb3ctY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBRUwsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2Qiw2QkFBNkIsRUFDN0IsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQix3QkFBd0IsRUFDeEIsNEJBQTRCLEVBQzVCLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixXQUFXLEVBQ1gsUUFBUSxFQUNSLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsYUFBYSxFQUNiLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsMEJBQTBCLEVBQzFCLFlBQVksR0FRYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUzQzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQStEWDtJQUNBO0lBR0E7SUFFQTtJQXBFVixLQUFLLENBQTRCO0lBQzFDOzs7O09BSUc7SUFDTSxRQUFRLEdBQUcsTUFBTSxDQUEwQixJQUFJLENBQUMsQ0FBQztJQUMxRDs7O09BR0c7SUFDTSxVQUFVLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUNsRCx5RUFBeUU7SUFDaEUsT0FBTyxHQUFzQix1QkFBdUIsQ0FBQyxTQUFTLEVBQUU7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LENBQUMsNkJBQTZCLEVBQUU7b0JBQ2hFLFVBQVUsRUFBRyxJQUFJLENBQUMsT0FBMkIsQ0FBQyxFQUFFO29CQUNoRCxNQUFNO2lCQUNQLENBQUMsQ0FBQztnQkFDSCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxnR0FBZ0c7SUFDaEcsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXcml0YWJsZVNpZ25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGYXBpQ2xpZW50LFxuICBhZHZhbmNlV2l0aENhcHRjaGEsXG4gIGF0bGFzQ2FwdGNoYUxhYmVscyxcbiAgYXR0ZW1wdFBhc3N3b3JkSG9sZFByb29mLFxuICBwcmVwYXJlUGFzc3dvcmRIb2xkUHJvb2YsXG4gIGNyZWF0ZUNhcHRjaGFDb250cm9sbGVyLFxuICBjcmVhdGVQYXNza2V5U2lnbkluQ29udHJvbGxlcixcbiAgY3JlYXRlUGFzc2tleVNpZ25VcCxcbiAgY3JlYXRlU2lnblVwLFxuICBmaW5pc2hQYXNza2V5U2lnblVwLFxuICBmZXRjaEluc3RhbmNlU2V0dGluZ3MsXG4gIGZldGNoTGFzdFNpZ25Jbk1ldGhvZCxcbiAgc3RhcnRTaWduSW5XaXRoQXRsYXMsXG4gIGNyZWF0ZU1mYUVucm9sbG1lbnQsXG4gIGFja25vd2xlZGdlRXhpc3RpbmdBY2NvdW50LFxuICBhY2tub3dsZWRnZVJlY292ZXJ5Q29kZXMsXG4gIHBlbmRpbmdFeGlzdGluZ0FjY291bnROb3RpY2UsXG4gIHBlbmRpbmdSZWNvdmVyeUNvZGVzLFxuICBtZmFDaG9pY2VzRnJvbSxcbiAgcHJlcGFyZVNlY29uZEZhY3RvckNvZGUsXG4gIHJlc2VuZFNpZ25VcFZlcmlmaWNhdGlvbixcbiAgZmxvd05lZWRzQ2FwdGNoYSxcbiAgc2lnbkluQ2FwdGNoYU9wdGlvbnMsXG4gIGZsb3dGcm9tUGVuZGluZyxcbiAgaW5pdGlhbEZsb3csXG4gIG5leHRTdGVwLFxuICBvZmZlcmVkRmlyc3RGYWN0b3JzLFxuICBwb2xsQXR0ZW1wdCxcbiAgcHJlcGFyZUZhY3RvcixcbiAgcGxhbkZpcnN0RmFjdG9yLFxuICBzaG91bGRLZWVwUG9sbGluZyxcbiAgUG9saWN5QWNjZXB0YW5jZUNvbnRyb2xsZXIsXG4gIGxvYWRQb2xpY2llcyxcbiAgdHlwZSBDYXB0Y2hhQ29udHJvbGxlcixcbiAgdHlwZSBGbG93U3RhdGUsXG4gIHR5cGUgSW5zdGFuY2VTZXR0aW5ncyxcbiAgdHlwZSBNZmFDaG9pY2VzLFxuICB0eXBlIE1mYUVucm9sbG1lbnRDb250cm9sbGVyLFxuICB0eXBlIE1mYUVucm9sbG1lbnRTdGF0ZSxcbiAgdHlwZSBQYXNza2V5U2lnbkluQ29udHJvbGxlcixcbn0gZnJvbSAnQGF0bGFzYXV0aC9qcyc7XG5pbXBvcnQgeyBFTl9VUywgdHJhbnNsYXRlIH0gZnJvbSAnLi4vaTE4bic7XG5cbi8qKlxuICogVGhlIHNlcnZlci1kcml2ZW4gc2lnbi1pbiAvIHNpZ24tdXAgZW5naW5lLCBzaGFyZWQgYnkgYDxhdGxhcy1zaWduLWluPmAgYW5kXG4gKiBgPGF0bGFzLXNpZ24tdXA+YCDigJQgdGhlIEFuZ3VsYXIgY291bnRlcnBhcnQgb2YgUmVhY3QncyBgdXNlRmxvd2AgaG9vay5cbiAqXG4gKiBJdCBvd25zIG5vIGRlY2lzaW9uIGFib3V0IHdoYXQgY29tZXMgbmV4dDogZXZlcnkgc3RhdHVzIGNvbWVzIGJhY2sgZnJvbSB0aGVcbiAqIHNlcnZlciB2aWEgYGFkdmFuY2VgLCBhbmQgdGhpcyBjb250cm9sbGVyIG9ubHkgcG9zdHMgd2hhdGV2ZXIgdGhlIGN1cnJlbnQgc3RlcFxuICogbmVlZHMgYW5kIHJlLXJlbmRlcnMgdGhlIHJldHVybmVkIHN0YXR1cy4gU3RhdGUgbGl2ZXMgaW4gYSBzaWduYWwgc28gdGVtcGxhdGVzXG4gKiB1cGRhdGUgd2hldGhlciB0aGUgYXBwIHJ1bnMgem9uZWQgb3Igem9uZWxlc3MuXG4gKlxuICogYDxhdGxhcy1zaWduLXVwPmAgc3RhcnRzIHRoZSBhdHRlbXB0IHdpdGgge0BsaW5rIGNyZWF0ZX1cbiAqIChgUE9TVCAvdjEvY2xpZW50L3NpZ25fdXBzYCk7IHRoZSBlbWFpbGVkLWNvZGUgc3RlcCB0aGVuIHJ1bnMgdGhyb3VnaCB0aGUgc2FtZVxuICoge0BsaW5rIHN1Ym1pdH0uIEJvdGggZmxvd3MgZHJhdyB0aGUgaW5zdGFuY2UncyBjYXB0Y2hhIChmcm9tXG4gKiB7QGxpbmsgbG9hZFNldHRpbmdzfSkgd2hlbiBpdCBpcyByZXF1aXJlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEF0bGFzRmxvd0NvbnRyb2xsZXIge1xuICByZWFkb25seSBzdGF0ZTogV3JpdGFibGVTaWduYWw8Rmxvd1N0YXRlPjtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSdzIHB1YmxpYyBzaWduLWluIC8gc2lnbi11cCBzZXR0aW5ncyAoY2FwdGNoYSwgc2lnbi11cCBmaWVsZHMsXG4gICAqIGxlZ2FsIGNvbnNlbnQpIGZyb20gYEdFVCAvdjEvYXBwZWFyYW5jZWA7IG51bGwgdW50aWwge0BsaW5rIGxvYWRTZXR0aW5nc31cbiAgICogcmVzb2x2ZXMsIG9yIHdoZW4gdGhlIHNlcnZlciBjb3VsZCBub3QgYmUgcmVhY2hlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNldHRpbmdzID0gc2lnbmFsPEluc3RhbmNlU2V0dGluZ3MgfCBudWxsPihudWxsKTtcbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgdGhpcyBicm93c2VyIGxhc3Qgc2lnbmVkIGluIHdpdGggKGBwYXNzd29yZGAsIGBvYXV0aF9naXRodWJgLCDigKYpXG4gICAqIGZvciB0aGUgXCJMYXN0IHVzZWRcIiBoaW50OyBudWxsIHdoZW4gbm9uZSwgb3IgdGhlIGluc3RhbmNlIHR1cm5lZCBpdCBvZmYuXG4gICAqL1xuICByZWFkb25seSBsYXN0TWV0aG9kID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAvKiogVGhlIHNpZ24taW4gY2FwdGNoYSAoaWRlbnRpZmllciBzdGVwIC8gYG5lZWRzX2NhcHRjaGFgIGNoYWxsZW5nZSkuICovXG4gIHJlYWRvbmx5IGNhcHRjaGE6IENhcHRjaGFDb250cm9sbGVyID0gY3JlYXRlQ2FwdGNoYUNvbnRyb2xsZXIodW5kZWZpbmVkLCB7XG4gICAgLy8gVGhlIEF0bGFzIGNhcHRjaGEncyB3b3JkcyBmb2xsb3cgdGhlIGZvcm0ncyBjYXRhbG9nIChyZWFkIHdoZW4gZHJhd24pLlxuICAgIGF0bGFzTGFiZWxzOiAoKSA9PiBhdGxhc0NhcHRjaGFMYWJlbHModGhpcy50KSxcbiAgfSk7XG4gIC8qKiBUaGUgc2lnbi11cCBjYXB0Y2hhICh0aGUgY3JlYXRlLWFjY291bnQgc3RlcCkuICovXG4gIHJlYWRvbmx5IHNpZ25VcENhcHRjaGE6IENhcHRjaGFDb250cm9sbGVyID0gY3JlYXRlQ2FwdGNoYUNvbnRyb2xsZXIodW5kZWZpbmVkLCB7XG4gICAgYXRsYXNMYWJlbHM6ICgpID0+IGF0bGFzQ2FwdGNoYUxhYmVscyh0aGlzLnQpLFxuICB9KTtcbiAgLyoqIFdoZXRoZXIge0BsaW5rIGNhcHRjaGF9IGN1cnJlbnRseSBkcmF3cyBhIHdpZGdldCAoZm9yIHRlbXBsYXRlcykuICovXG4gIHJlYWRvbmx5IGNhcHRjaGFEcmF3biA9IHNpZ25hbChmYWxzZSk7XG4gIC8qKiBXaGV0aGVyIHtAbGluayBzaWduVXBDYXB0Y2hhfSBjdXJyZW50bHkgZHJhd3MgYSB3aWRnZXQgKGZvciB0ZW1wbGF0ZXMpLiAqL1xuICByZWFkb25seSBzaWduVXBDYXB0Y2hhRHJhd24gPSBzaWduYWwoZmFsc2UpO1xuICAvKipcbiAgICogVGhlIGZpcnN0IGZhY3RvciB0aGUgc2VydmVyIHdhcyBhc2tlZCB0byBzZW5kICh7QGxpbmsgcHJlcGFyZX0pIG9uIHRoZVxuICAgKiBjdXJyZW50IGBuZWVkc19maXJzdF9mYWN0b3JgIHN0ZXAg4oCUIHRoZSBmb3JtIHRoZW4gY29sbGVjdHMgaXRzIGNvZGUuIE51bGxcbiAgICogb3RoZXJ3aXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlcGFyZWRGYWN0b3IgPSBzaWduYWw8J2VtYWlsX2NvZGUnIHwgJ2VtYWlsX2xpbmsnIHwgbnVsbD4obnVsbCk7XG4gIC8qKlxuICAgKiBcIkVtYWlsIG1lIGEgY29kZSBpbnN0ZWFkXCIgYXQgdGhlIHNlY29uZCBmYWN0b3IgKHtAbGluayBzZW5kRW1haWxTZWNvbmRGYWN0b3J9KTpcbiAgICogaW4gZmxpZ2h0LCB3aGVyZSB0aGUgY29kZSB3ZW50LCBvciB3aHkgaXQgd2FzIG5vdCBzZW50LiBOdWxsIHVudGlsIGFza2VkLFxuICAgKiBhbmQgYWdhaW4gb25jZSB0aGUgZmxvdyBsZWF2ZXMgdGhhdCBzdGVwLlxuICAgKi9cbiAgcmVhZG9ubHkgZW1haWxTZWNvbmRGYWN0b3IgPSBzaWduYWw8eyBidXN5PzogYm9vbGVhbjsgc2VudFRvPzogc3RyaW5nOyBlcnJvcj86IHN0cmluZyB9IHwgbnVsbD4obnVsbCk7XG4gIC8qKiBcIlRleHQgbWUgYSBjb2RlIGluc3RlYWRcIiBhdCB0aGUgc2Vjb25kIGZhY3RvciAoe0BsaW5rIHNlbmRTbXNTZWNvbmRGYWN0b3J9KTogYXMge0BsaW5rIGVtYWlsU2Vjb25kRmFjdG9yfS4gKi9cbiAgcmVhZG9ubHkgc21zU2Vjb25kRmFjdG9yID0gc2lnbmFsPHsgYnVzeT86IGJvb2xlYW47IHNlbnRUbz86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfSB8IG51bGw+KG51bGwpO1xuICAvKipcbiAgICogVGhlIE1GQSBlbnJvbG1lbnQgc3RlcCAoYG5lZWRzX21mYV9lbnJvbGxtZW50YCk6IHRoZSBhdXRoZW50aWNhdG9yIGFwcCdzXG4gICAqIHNldHVwIChRUiBjb2RlLCBzZXR1cCBrZXkpIG9yIGEgdGV4dGVkIGNvZGUuIFN0YXJ0ZWQgYW5kIHJlc2V0IHdpdGggdGhlIGZsb3cuXG4gICAqL1xuICByZWFkb25seSBlbnJvbGxtZW50OiBNZmFFbnJvbGxtZW50Q29udHJvbGxlcjtcbiAgLyoqIHtAbGluayBlbnJvbGxtZW50fSdzIHN0YXRlLCBmb3IgdGVtcGxhdGVzLiAqL1xuICByZWFkb25seSBlbnJvbGxtZW50U3RhdGU6IFdyaXRhYmxlU2lnbmFsPE1mYUVucm9sbG1lbnRTdGF0ZT47XG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UncyBwb2xpY2llcyAodGVybXMsIHByaXZhY3ksIOKApikgZm9yIHRoZSBjcmVhdGUtYWNjb3VudCBmb3JtOlxuICAgKiB7QGxpbmsgY3JlYXRlfSBzZW5kcyB0aGVpciBhY2NlcHRhbmNlcyBhbmQgcmVsb2FkcyB0aGVtIGFmdGVyIGEgcmVmdXNhbC5cbiAgICovXG4gIHJlYWRvbmx5IHBvbGljaWVzID0gbmV3IFBvbGljeUFjY2VwdGFuY2VDb250cm9sbGVyKFtdKTtcbiAgLyoqXG4gICAqIFBhc3NrZXkgc2lnbi1pbiAodGhlIFwiU2lnbiBpbiB3aXRoIGEgcGFzc2tleVwiIGJ1dHRvbiBhbmQgcGFzc2tleSBhdXRvZmlsbCBvblxuICAgKiB0aGUgaWRlbnRpZmllciBmaWVsZCkuIFRoZSBvdXRjb21lIGdvZXMgdGhyb3VnaCB0aGUgc2FtZSBjb21wbGV0aW9uIGFzIGV2ZXJ5IHNpZ24taW4uXG4gICAqL1xuICByZWFkb25seSBwYXNza2V5OiBQYXNza2V5U2lnbkluQ29udHJvbGxlcjtcbiAgLyoqIFdoZXRoZXIgdGhpcyBicm93c2VyIGNhbiBydW4gV2ViQXV0aG47IGA8YXRsYXMtc2lnbi1pbj5gIHNldHMgaXQgYWZ0ZXIgaXQgaXMgY3JlYXRlZCBpbiBhIGJyb3dzZXIuICovXG4gIHJlYWRvbmx5IHBhc3NrZXlTdXBwb3J0ZWQgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHBvbGxUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaWRlbnRpZmllciA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50OiBGYXBpQ2xpZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVsb2FkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+LFxuICAgIHBlbmRpbmc6IHsgaWQ6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmcgfSB8IG51bGwsXG4gICAgLyoqIFJlc29sdmVzIHRoZSBjYXB0Y2hhIG1lc3NhZ2VzJyBjYXRhbG9nIGtleXMuIERlZmF1bHRzIHRvIGVuLVVTLiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdDogKGtleTogc3RyaW5nKSA9PiBzdHJpbmcgPSAoa2V5KSA9PiB0cmFuc2xhdGUoRU5fVVMsIGtleSksXG4gICAgLyoqIFdhaXQgZm9yIHtAbGluayBjb250aW51ZUFmdGVyRXhpc3RpbmdBY2NvdW50fSAoYDxhdGxhcy1zaWduLXVwPmAgZHJhd3MgdGhlIG5vdGljZSkuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBob2xkRXhpc3RpbmdBY2NvdW50Tm90aWNlID0gZmFsc2UsXG4gICkge1xuICAgIC8vIFNlZWRlZCBmcm9tIGEgcmVkaXJlY3QgdGhhdCBjYW1lIGJhY2sgbWlkLWZsb3cgKGUuZy4gT0F1dGggbmVlZGluZyBhIHNlY29uZFxuICAgIC8vIGZhY3Rvcikgc28gdGhlIHVzZXIgcmVzdW1lcyBhdCB0aGUgZGVtYW5kZWQgc3RlcCBpbnN0ZWFkIG9mIHN0YXJ0aW5nIG92ZXIuXG4gICAgdGhpcy5zdGF0ZSA9IHNpZ25hbDxGbG93U3RhdGU+KHBlbmRpbmcgPyBmbG93RnJvbVBlbmRpbmcocGVuZGluZykgOiBpbml0aWFsRmxvdyk7XG4gICAgdGhpcy5lbnJvbGxtZW50ID0gY3JlYXRlTWZhRW5yb2xsbWVudCh0aGlzLmNsaWVudCwgKCkgPT4gdGhpcy5tZmFDaG9pY2VzKCkpO1xuICAgIHRoaXMuZW5yb2xsbWVudFN0YXRlID0gc2lnbmFsPE1mYUVucm9sbG1lbnRTdGF0ZT4odGhpcy5lbnJvbGxtZW50LnN0YXRlKTtcbiAgICB0aGlzLmVucm9sbG1lbnQuc3Vic2NyaWJlKChuZXh0KSA9PiB0aGlzLmVucm9sbG1lbnRTdGF0ZS5zZXQobmV4dCkpO1xuICAgIHRoaXMucGFzc2tleSA9IGNyZWF0ZVBhc3NrZXlTaWduSW5Db250cm9sbGVyKHtcbiAgICAgIGNsaWVudDogdGhpcy5jbGllbnQsXG4gICAgICBvblN0YXJ0OiAoKSA9PiB0aGlzLnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgYnVzeTogdHJ1ZSwgZXJyb3JzOiBbXSB9KSksXG4gICAgICBvblJlc3VsdDogKG5leHQpID0+IHRoaXMuZmluaXNoKG5leHQpLFxuICAgICAgY2FwdGNoYTogKCkgPT4gdGhpcy5jYXB0Y2hhLFxuICAgICAgY2FuY2VsbGVkTWVzc2FnZTogKCkgPT4gdGhpcy50KCdzaWduSW4ucGFzc2tleUNhbmNlbGxlZCcpLFxuICAgIH0pO1xuICAgIHRoaXMuc3luY0NhcHRjaGEoKTtcbiAgICB0aGlzLnN5bmNFbnJvbGxtZW50KCk7XG4gIH1cblxuICAvKiogV2h5IFwiQ29udGludWUgd2l0aCBBdGxhc1wiIGNvdWxkIG5vdCBzdGFydCAodGhlIHNlcnZlcidzIG1lc3NhZ2UpOyBudWxsIG90aGVyd2lzZS4gKi9cbiAgcmVhZG9ubHkgc2lnbkluV2l0aEF0bGFzRXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqXG4gICAqIFwiQ29udGludWUgd2l0aCBBdGxhc1wiICh3aGVuIGBzZXR0aW5ncygpLnNpZ25JbldpdGhBdGxhc2AgaXMgc2V0KTogc3RhcnRzIHRoZVxuICAgKiBTU08gc2lnbi1pbiBhbmQgc2VuZHMgdGhlIGJyb3dzZXIgdG8gQXRsYXMuXG4gICAqL1xuICBhc3luYyBzaWduSW5XaXRoQXRsYXMoY29ubmVjdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICB0aGlzLnNpZ25JbldpdGhBdGxhc0Vycm9yLnNldChudWxsKTtcbiAgICBjb25zdCBzdGFydGVkID0gYXdhaXQgc3RhcnRTaWduSW5XaXRoQXRsYXModGhpcy5jbGllbnQsIGNvbm5lY3Rpb25JZCwgd2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIGlmICgndXJsJyBpbiBzdGFydGVkKSB3aW5kb3cubG9jYXRpb24uYXNzaWduKHN0YXJ0ZWQudXJsKTtcbiAgICBlbHNlIHRoaXMuc2lnbkluV2l0aEF0bGFzRXJyb3Iuc2V0KHN0YXJ0ZWQuZXJyb3IpO1xuICB9XG5cbiAgLyoqIFwiU2lnbiBpbiB3aXRoIGEgcGFzc2tleVwiIGlzIG9mZmVyZWQ6IHRoZSBmaXJzdCBzdGVwLCB0aGUgaW5zdGFuY2UgdHVybmVkIHBhc3NrZXkgc2lnbi1pbiBvbiwgYW5kIHRoZSBicm93c2VyIGNhbi4gKi9cbiAgcGFzc2tleU9mZmVyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGFzc2tleVN1cHBvcnRlZCgpICYmICF0aGlzLnN0YXRlKCkuYXR0ZW1wdCAmJiB0aGlzLnNldHRpbmdzKCk/LnBhc3NrZXlTaWduSW4gPT09IHRydWU7XG4gIH1cblxuICAvKiogV2hhdCB0aGUgYXBwIGxldHMgdGhlIE1GQSBzdGVwcyBvZmZlciAoZnJvbSB7QGxpbmsgc2V0dGluZ3N9KS4gKi9cbiAgbWZhQ2hvaWNlcygpOiBNZmFDaG9pY2VzIHtcbiAgICByZXR1cm4gbWZhQ2hvaWNlc0Zyb20odGhpcy5zZXR0aW5ncygpPy5hY2NvdW50KTtcbiAgfVxuXG4gIC8qKiBTdGFydCB0aGUgZW5yb2xtZW50IHN0ZXAgZm9yIGl0cyBhdHRlbXB0LCBvciByZXNldCBpdCBvbmNlIHRoZSBmbG93IGxlYXZlcy4gKi9cbiAgcHJpdmF0ZSBzeW5jRW5yb2xsbWVudCgpOiB2b2lkIHtcbiAgICBjb25zdCBhdHRlbXB0ID0gdGhpcy5zdGF0ZSgpLmF0dGVtcHQ7XG4gICAgaWYgKGF0dGVtcHQ/LnN0YXR1cyA9PT0gJ25lZWRzX21mYV9lbnJvbGxtZW50JyAmJiBhdHRlbXB0LmlkKSB0aGlzLmVucm9sbG1lbnQuc3RhcnQoYXR0ZW1wdC5pZCk7XG4gICAgZWxzZSB0aGlzLmVucm9sbG1lbnQucmVzZXQoKTtcbiAgfVxuXG4gIC8qKiBGZXRjaCB0aGUgaW5zdGFuY2UncyBwdWJsaWMgc2V0dGluZ3MgYW5kIGRyYXcgd2hhdGV2ZXIgY2FwdGNoYSB0aGV5IHJlcXVpcmUuICovXG4gIGFzeW5jIGxvYWRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBhd2FpdCBmZXRjaEluc3RhbmNlU2V0dGluZ3ModGhpcy5jbGllbnQpO1xuICAgIGlmIChsb2FkZWQpIHtcbiAgICAgIHRoaXMuc2V0dGluZ3Muc2V0KGxvYWRlZCk7XG4gICAgICB0aGlzLnN5bmNDYXB0Y2hhKCk7XG4gICAgICBpZiAobG9hZGVkLmFjY291bnQubGFzdFNpZ25Jbk1ldGhvZCkgdGhpcy5sYXN0TWV0aG9kLnNldChhd2FpdCBmZXRjaExhc3RTaWduSW5NZXRob2QodGhpcy5jbGllbnQpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZpcnN0IGZhY3RvcnMgdG8gb2ZmZXIgb24gYSBgbmVlZHNfZmlyc3RfZmFjdG9yYCBzdGVwOiB0aGUgc2VydmVyJ3MgbGlzdFxuICAgKiB3aXRob3V0IGVtYWlsIGNvZGUgLyBsaW5rIHdoaWxlIHRoZSBhcHAgY2Fubm90IGRlbGl2ZXIgZW1haWxcbiAgICogKGBzZXR0aW5ncy5lbWFpbERlbGl2ZXJ5LmF2YWlsYWJsZSA9PT0gZmFsc2VgKS4gRW1wdHkgb24gYW55IG90aGVyIHN0ZXAuXG4gICAqL1xuICBmaXJzdEZhY3RvcnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGF0dGVtcHQgPSB0aGlzLnN0YXRlKCkuYXR0ZW1wdDtcbiAgICBjb25zdCBzdGVwID0gYXR0ZW1wdCA/IG5leHRTdGVwKGF0dGVtcHQpIDogbnVsbDtcbiAgICBpZiAoc3RlcD8ua2luZCAhPT0gJ2NvbGxlY3RfZmlyc3RfZmFjdG9yJykgcmV0dXJuIFtdO1xuICAgIGNvbnN0IG9mZmVyZWQgPSBvZmZlcmVkRmlyc3RGYWN0b3JzKHN0ZXAuc3RyYXRlZ2llcywgdGhpcy5zZXR0aW5ncygpPy5lbWFpbERlbGl2ZXJ5KTtcbiAgICBjb25zdCBwcm9vZiA9IHRoaXMuaG9sZFByb29mKCk7XG4gICAgcmV0dXJuIHByb29mICYmICFvZmZlcmVkLmluY2x1ZGVzKHByb29mKSA/IFsuLi5vZmZlcmVkLCBwcm9vZl0gOiBvZmZlcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlbWFpbGVkIHByb29mIGEgcGFzc3dvcmQgaG9sZCBzdGlsbCB3YWl0cyBvbiAoYEZsb3dTdGF0ZS5wYXNzd29yZEhvbGRgKTogdGhlXG4gICAqIGNvZGUsIG9yIGEgbGluayB3aGVyZSB0aGUgaW5zdGFuY2UgdmVyaWZpZXMgYnkgbGluayBvbmx5LiBOdWxsIHdpdGggbm8gaG9sZCwgb25jZVxuICAgKiBwcm92ZW4sIG9yIHdoaWxlIHRoZSBhcHAgY2Fubm90IGRlbGl2ZXIgZW1haWwuXG4gICAqL1xuICBob2xkUHJvb2YoKTogJ2VtYWlsX2NvZGUnIHwgJ2VtYWlsX2xpbmsnIHwgbnVsbCB7XG4gICAgY29uc3QgaG9sZCA9IHRoaXMuc3RhdGUoKS5wYXNzd29yZEhvbGQ7XG4gICAgaWYgKCFob2xkIHx8IGhvbGQucmVsZWFzZWQgfHwgdGhpcy5zZXR0aW5ncygpPy5lbWFpbERlbGl2ZXJ5Py5hdmFpbGFibGUgPT09IGZhbHNlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncygpPy5hY2NvdW50Py5lbWFpbFZlcmlmaWNhdGlvbiA9PT0gJ2xpbmsnID8gJ2VtYWlsX2xpbmsnIDogJ2VtYWlsX2NvZGUnO1xuICB9XG5cbiAgLyoqIEJhY2sgZnJvbSB0aGUgZW1haWxlZCBmYWN0b3IgdG8gdGhlIHBhc3N3b3JkIGZpZWxkLiAqL1xuICB1c2VQYXNzd29yZCgpOiB2b2lkIHtcbiAgICB0aGlzLnByZXBhcmVkRmFjdG9yLnNldChudWxsKTtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgcHJlcGFyZWQ6IG51bGwsIHBvbGxTZWNyZXQ6IG51bGwsIGVycm9yczogW10gfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRydWUgd2hlbiBlbWFpbCArIHBhc3N3b3JkIHNpZ24tdXAgY2Fubm90IGNvbXBsZXRlIGJlY2F1c2UgdGhlIGFwcCBjYW5ub3RcbiAgICogc2VuZCB0aGUgdmVyaWZpY2F0aW9uIGVtYWlsIChgc2V0dGluZ3MuZW1haWxEZWxpdmVyeS5wYXNzd29yZFNpZ25VcCA9PT0gZmFsc2VgKTpcbiAgICogYDxhdGxhcy1zaWduLXVwPmAgc2hvd3MgdGhlIFwiY2FuJ3Qgc2VuZCBlbWFpbFwiIG5vdGljZSBpbnN0ZWFkIG9mIHRoZSBmb3JtLlxuICAgKi9cbiAgc2lnblVwRW1haWxVbmF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncygpPy5lbWFpbERlbGl2ZXJ5LnBhc3N3b3JkU2lnblVwID09PSBmYWxzZTtcbiAgfVxuXG4gIC8qKiBGYWxzZSB3aGVuIGEgcGFzc3dvcmQgcmVzZXQgZW1haWwgY2Fubm90IGJlIGRlbGl2ZXJlZCDigJQgaGlkZSBcIkZvcmdvdCBwYXNzd29yZD9cIi4gKi9cbiAgcGFzc3dvcmRSZXNldEF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncygpPy5lbWFpbERlbGl2ZXJ5LnBhc3N3b3JkUmVzZXQgIT09IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzayB0aGUgc2VydmVyIHRvIGVtYWlsIGEgc2lnbi1pbiBjb2RlIGZvciB0aGUgY3VycmVudCBgbmVlZHNfZmlyc3RfZmFjdG9yYFxuICAgKiBzdGVwIChgUE9TVCDigKYvcHJlcGFyZV9maXJzdF9mYWN0b3JgKTsgdGhlIGZvcm0gdGhlbiBjb2xsZWN0cyB0aGUgY29kZSwgd2hpY2hcbiAgICoge0BsaW5rIHN1Ym1pdH0gcG9zdHMgYXMgdGhlIGBlbWFpbF9jb2RlYCBzdHJhdGVneS4gV2hpbGUgYSBwYXNzd29yZCBob2xkIHdhaXRzXG4gICAqIG9uIGl0ICh7QGxpbmsgaG9sZFByb29mfSksIHRoaXMgZW1haWxzIHRoYXQgcHJvb2YgaW5zdGVhZC5cbiAgICovXG4gIGFzeW5jIHByZXBhcmUoc3RyYXRlZ3k6ICdlbWFpbF9jb2RlJyB8ICdlbWFpbF9saW5rJyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5maXJzdEZhY3RvcnMoKS5pbmNsdWRlcyhzdHJhdGVneSkpIHJldHVybjtcbiAgICBjb25zdCBwcm9vZiA9IHRoaXMuaG9sZFByb29mKCk7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpO1xuICAgIGNvbnN0IG5leHQgPVxuICAgICAgc3RyYXRlZ3kgPT09IHByb29mXG4gICAgICAgID8gYXdhaXQgcHJlcGFyZVBhc3N3b3JkSG9sZFByb29mKHRoaXMuY2xpZW50LCB0aGlzLnN0YXRlKCksIHByb29mKVxuICAgICAgICA6IGF3YWl0IHByZXBhcmVGYWN0b3IodGhpcy5jbGllbnQsIHRoaXMuc3RhdGUoKSwgc3RyYXRlZ3kpO1xuICAgIHRoaXMuc2V0U3RhdGUobmV4dCk7XG4gICAgaWYgKCFuZXh0LmVycm9ycy5sZW5ndGgpIHRoaXMucHJlcGFyZWRGYWN0b3Iuc2V0KHN0cmF0ZWd5KTtcbiAgICB0aGlzLnN5bmNQb2xsaW5nKCk7XG4gIH1cblxuICAvKiogS2VlcCBib3RoIGNhcHRjaGFzIGluIHN0ZXAgd2l0aCB0aGUgc2V0dGluZ3MgYW5kIHRoZSBmbG93J3MgY3VycmVudCBzdGVwLiAqL1xuICBwcml2YXRlIHN5bmNDYXB0Y2hhKCk6IHZvaWQge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zZXR0aW5ncygpO1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZSgpO1xuICAgIHRoaXMuY2FwdGNoYS5jb25maWd1cmUoXG4gICAgICBzaWduSW5DYXB0Y2hhT3B0aW9ucyhzZXR0aW5ncz8uY2FwdGNoYUZsb3dzLnNpZ25Jbiwgc3RhdGUsICgpID0+IHZvaWQgdGhpcy5zdWJtaXQoe30pKSxcbiAgICApO1xuICAgIGNvbnN0IHNpZ25VcEZsb3cgPSBzZXR0aW5ncz8uY2FwdGNoYUZsb3dzLnNpZ25VcDtcbiAgICB0aGlzLnNpZ25VcENhcHRjaGEuY29uZmlndXJlKHtcbiAgICAgIGZsb3c6IHNpZ25VcEZsb3csXG4gICAgICBhY3RpdmU6ICFzdGF0ZS5hdHRlbXB0ICYmIGZsb3dOZWVkc0NhcHRjaGEoc2lnblVwRmxvdyksXG4gICAgfSk7XG4gICAgdGhpcy5jYXB0Y2hhRHJhd24uc2V0KHRoaXMuY2FwdGNoYS5uZWVkZWQpO1xuICAgIHRoaXMuc2lnblVwQ2FwdGNoYURyYXduLnNldCh0aGlzLnNpZ25VcENhcHRjaGEubmVlZGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3RhdGUobmV4dDogRmxvd1N0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnN0YXRlKCk7XG4gICAgY29uc3QgcHJldmlvdXNJZCA9IHByZXZpb3VzLmF0dGVtcHQ/LmlkID8/IG51bGw7XG4gICAgdGhpcy5zdGF0ZS5zZXQobmV4dCk7XG4gICAgLy8gQSBwcm92ZW4gaG9sZCBnb2VzIGJhY2sgdG8gdGhlIHBhc3N3b3JkIGZpZWxkLlxuICAgIGlmIChuZXh0LnBhc3N3b3JkSG9sZD8ucmVsZWFzZWQgJiYgIXByZXZpb3VzLnBhc3N3b3JkSG9sZD8ucmVsZWFzZWQpIHRoaXMucHJlcGFyZWRGYWN0b3Iuc2V0KG51bGwpO1xuICAgIC8vIEEgcHJlcGFyZWQgZmFjdG9yIGJlbG9uZ3MgdG8gdGhlIGZpcnN0LWZhY3RvciBzdGVwIGl0IHdhcyBzZW50IGZvci5cbiAgICBpZiAobmV4dC5hdHRlbXB0Py5zdGF0dXMgIT09ICduZWVkc19maXJzdF9mYWN0b3InKSB0aGlzLnByZXBhcmVkRmFjdG9yLnNldChudWxsKTtcbiAgICAvLyBBbiBlbWFpbGVkIHNlY29uZC1mYWN0b3IgY29kZSBiZWxvbmdzIHRvIHRoZSBzZWNvbmQtZmFjdG9yIHN0ZXAgb2YgdGhpcyBhdHRlbXB0LlxuICAgIGlmIChuZXh0LmF0dGVtcHQ/LnN0YXR1cyAhPT0gJ25lZWRzX3NlY29uZF9mYWN0b3InIHx8IChuZXh0LmF0dGVtcHQ/LmlkID8/IG51bGwpICE9PSBwcmV2aW91c0lkKSB7XG4gICAgICB0aGlzLmVtYWlsU2Vjb25kRmFjdG9yLnNldChudWxsKTtcbiAgICAgIHRoaXMuc21zU2Vjb25kRmFjdG9yLnNldChudWxsKTtcbiAgICB9XG4gICAgdGhpcy5zeW5jQ2FwdGNoYSgpO1xuICAgIHRoaXMuc3luY0Vucm9sbG1lbnQoKTtcbiAgICB0aGlzLmF1dG9TZW5kKCk7XG4gIH1cblxuICBwcml2YXRlIGF1dG9TZW50Rm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgLyoqXG4gICAqIFdpdGggbm8gcGFzc3dvcmQgb24gb2ZmZXIsIGVtYWlsIHRoZSBjb2RlIGFzIHNvb24gYXMgdGhlIHNlcnZlciBhc2tzIGZvciBhXG4gICAqIGZpcnN0IGZhY3RvciDigJQgb25jZSBwZXIgYXR0ZW1wdCwgc28gYSBmYWlsZWQgc2VuZCB3YWl0cyBmb3IgdGhlIHVzZXIncyByZXRyeVxuICAgKiAodGhlIFwiRW1haWwgbWUgYSBjb2RlXCIgYnV0dG9uKSBpbnN0ZWFkIG9mIGxvb3BpbmcuXG4gICAqL1xuICBwcml2YXRlIGF1dG9TZW5kKCk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gdGhpcy5zdGF0ZSgpLmF0dGVtcHQ/LmlkID8/IG51bGw7XG4gICAgaWYgKCFpZCB8fCB0aGlzLmF1dG9TZW50Rm9yID09PSBpZCB8fCB0aGlzLnByZXBhcmVkRmFjdG9yKCkpIHJldHVybjtcbiAgICBpZiAocGxhbkZpcnN0RmFjdG9yKHRoaXMuZmlyc3RGYWN0b3JzKCkpLmF1dG9TZW5kICE9PSAnZW1haWxfY29kZScpIHJldHVybjtcbiAgICB0aGlzLmF1dG9TZW50Rm9yID0gaWQ7XG4gICAgdm9pZCB0aGlzLnByZXBhcmUoJ2VtYWlsX2NvZGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZHZhbmNlIHRoZSBmbG93IHdpdGggdGhlIHZhbHVlcyB0aGUgdXNlciB0eXBlZC4gT24gY29tcGxldGlvbiwgZXhjaGFuZ2UgdGhlXG4gICAqIG9uZS10aW1lIHRpY2tldCBmb3IgY29va2llcyBvdmVyIGEgc2FtZS1vcmlnaW4gcmVxdWVzdCAoRkFQSSBpcyBjcm9zcy1vcmlnaW5cbiAgICogYW5kIGNhbm5vdCBzZXQgdGhlIGNvb2tpZSBvbiBpdHMgb3duIHJlc3BvbnNlKSwgdGhlbiByZS1ib290IHNvIHRoZSByZXN0IG9mXG4gICAqIHRoZSBhcHAgc2VlcyBhIHNpZ25lZC1pbiB1c2VyLlxuICAgKi9cbiAgYXN5bmMgc3VibWl0KHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKTtcblxuICAgIC8vIEEgY29kZSB0aGF0IGxpZnRzIGEgcGFzc3dvcmQgaG9sZCBnb2VzIHRvIGl0cyBvd24gYXR0ZW1wdCwgbm90IHRoaXMgc2lnbi1pbi5cbiAgICBpZiAodGhpcy5wcmVwYXJlZEZhY3RvcigpID09PSAnZW1haWxfY29kZScgJiYgdGhpcy5ob2xkUHJvb2YoKSA9PT0gJ2VtYWlsX2NvZGUnKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKGF3YWl0IGF0dGVtcHRQYXNzd29yZEhvbGRQcm9vZih0aGlzLmNsaWVudCwgdGhpcy5zdGF0ZSgpLCB2YWx1ZXMuY29kZSA/PyAnJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvdXQgPSBhd2FpdCBhZHZhbmNlV2l0aENhcHRjaGEodGhpcy5jbGllbnQsIHRoaXMuc3RhdGUoKSwgdmFsdWVzLCB7XG4gICAgICBjYXB0Y2hhOiB0aGlzLmNhcHRjaGEsXG4gICAgICBpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICB0OiB0aGlzLnQsXG4gICAgfSk7XG4gICAgdGhpcy5pZGVudGlmaWVyID0gb3V0LmlkZW50aWZpZXI7XG4gICAgYXdhaXQgdGhpcy5maW5pc2gob3V0LnN0YXRlKTtcbiAgfVxuXG4gIC8qKiBMb2FkIHRoZSBzaWduLXVwJ3MgcG9saWNpZXMgaW50byB7QGxpbmsgcG9saWNpZXN9IChgPGF0bGFzLXNpZ24tdXA+YCBjYWxscyBpdCBvbiBpbml0KS4gKi9cbiAgYXN5bmMgbG9hZFBvbGljaWVzKGxvY2FsZT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucG9saWNpZXMuc2V0UG9saWNpZXMoYXdhaXQgbG9hZFBvbGljaWVzKHRoaXMuY2xpZW50LCB7IGxvY2FsZSB9KSk7XG4gIH1cblxuICAvKiogVGhlIHVzZXIgZGVjbGluZWQgYSBwb2xpY3kgYSBzaWduLWluIHdhcyB3YWl0aW5nIG9uOiBjYW5jZWwgdGhlIGF0dGVtcHQgYW5kIHNheSB3aHkuICovXG4gIGRlY2xpbmVQb2xpY3kodGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUuc2V0KHtcbiAgICAgIC4uLmluaXRpYWxGbG93LFxuICAgICAgZXJyb3JzOiBbeyBjb2RlOiAnUE9MSUNZX0RFQ0xJTkVEJywgbWVzc2FnZTogdGhpcy50KCdwb2xpY3kuZGVjbGluZWQnKS5yZXBsYWNlKCd7cG9saWN5fScsIHRpdGxlKSB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYWNjb3VudCAoYFBPU1QgL3YxL2NsaWVudC9zaWduX3Vwc2ApIGZyb20gYSBjcmVhdGUtYWNjb3VudCBmb3JtJ3NcbiAgICogdmFsdWVzIOKAlCBlbWFpbCwgcGFzc3dvcmQgYW5kIGFueSBjb25maWd1cmVkIHNpZ24tdXAgZmllbGRzIOKAlCBjYXJyeWluZyB0aGVcbiAgICogc2lnbi11cCBjYXB0Y2hhJ3MgdG9rZW4gd2hlbiB0aGUgaW5zdGFuY2UgcmVxdWlyZXMgb25lLiBUaGUgZW1haWxlZCBjb2RlIGlzXG4gICAqIHRoZW4gcG9zdGVkIHdpdGgge0BsaW5rIHN1Ym1pdH0uXG4gICAqL1xuICBhc3luYyBjcmVhdGUodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBjb25zZW50ID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKTtcbiAgICBjb25zdCBuZXh0ID0gYXdhaXQgY3JlYXRlU2lnblVwKHRoaXMuY2xpZW50LCB2YWx1ZXMsIHtcbiAgICAgIGNvbnNlbnQsXG4gICAgICBjYXB0Y2hhOiB0aGlzLnNpZ25VcENhcHRjaGEsXG4gICAgICB0OiB0aGlzLnQsXG4gICAgICBwb2xpY2llczogdGhpcy5wb2xpY2llcyxcbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLmZpbmlzaChuZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIkVtYWlsIG1lIGEgY29kZSBpbnN0ZWFkXCIgYXQgdGhlIHNlY29uZCBmYWN0b3IgKHRoZSBpbnN0YW5jZSdzXG4gICAqIGBhY2NvdW50LmVtYWlsU2Vjb25kRmFjdG9yYCk6IG1haWxzIGEgY29kZSB0byB0aGUgYWNjb3VudCdzIHZlcmlmaWVkIGVtYWlsO1xuICAgKiBpdCBpcyB0aGVuIHBvc3RlZCB3aXRoIHtAbGluayBzdWJtaXR9IGxpa2UgYW55IDJGQSBjb2RlLlxuICAgKi9cbiAgYXN5bmMgc2VuZEVtYWlsU2Vjb25kRmFjdG9yKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZFNlY29uZEZhY3RvckNvZGUoJ2VtYWlsX2NvZGUnLCB0aGlzLmVtYWlsU2Vjb25kRmFjdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlRleHQgbWUgYSBjb2RlIGluc3RlYWRcIiBhdCB0aGUgc2Vjb25kIGZhY3RvciAod2hlcmUgdGhlIGFwcCBvZmZlcnMgdGV4dGVkXG4gICAqIGNvZGVzLCB7QGxpbmsgbWZhQ2hvaWNlc31gKCkuc21zYCk6IHRleHRzIGEgY29kZSB0byB0aGUgYWNjb3VudCdzIGVucm9sbGVkXG4gICAqIHBob25lOyBpdCBpcyB0aGVuIHBvc3RlZCB3aXRoIHtAbGluayBzdWJtaXR9IGxpa2UgYW55IDJGQSBjb2RlLlxuICAgKi9cbiAgYXN5bmMgc2VuZFNtc1NlY29uZEZhY3RvcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNlbmRTZWNvbmRGYWN0b3JDb2RlKCdzbXMnLCB0aGlzLnNtc1NlY29uZEZhY3Rvcik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRTZWNvbmRGYWN0b3JDb2RlKFxuICAgIHN0cmF0ZWd5OiAnc21zJyB8ICdlbWFpbF9jb2RlJyxcbiAgICBvdXQ6IFdyaXRhYmxlU2lnbmFsPHsgYnVzeT86IGJvb2xlYW47IHNlbnRUbz86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfSB8IG51bGw+LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZCA9IHRoaXMuc3RhdGUoKS5hdHRlbXB0Py5pZDtcbiAgICBpZiAoIWlkKSByZXR1cm47XG4gICAgb3V0LnNldCh7IGJ1c3k6IHRydWUgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgc2VudFRvIH0gPSBhd2FpdCBwcmVwYXJlU2Vjb25kRmFjdG9yQ29kZSh0aGlzLmNsaWVudCwgaWQsIHN0cmF0ZWd5KTtcbiAgICAgIG91dC5zZXQoeyBzZW50VG8gfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG91dC5zZXQoeyBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiB0aGlzLnQoJ2Vycm9yLmdlbmVyaWMnKSB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVzZW5kIGEgc2lnbi11cCdzIGVtYWlsZWQgY29kZSAvIGxpbmsgKHRoZSBlYXJsaWVyIG9uZSBzdG9wcyB3b3JraW5nKS4gKi9cbiAgYXN5bmMgcmVzZW5kU2lnblVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKTtcbiAgICB0aGlzLnN0YXRlLnNldChhd2FpdCByZXNlbmRTaWduVXBWZXJpZmljYXRpb24odGhpcy5jbGllbnQsIHRoaXMuc3RhdGUoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgcGFzc2tleS1vbmx5IHNpZ24tdXAgKGBQT1NUIC92MS9jbGllbnQvc2lnbl91cHMvcGFzc2tleWApIGZyb20gdGhlXG4gICAqIGNyZWF0ZS1hY2NvdW50IGZvcm0ncyB2YWx1ZXMg4oCUIG5vIHBhc3N3b3JkLiBPZmZlcmVkIHdoZW4gdGhlIGluc3RhbmNlJ3NcbiAgICogYGFjY291bnQucGFzc2tleVNpZ25VcGAgaXMgc2V0LlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlV2l0aFBhc3NrZXkodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBjb25zZW50ID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKTtcbiAgICBhd2FpdCB0aGlzLmZpbmlzaChhd2FpdCBjcmVhdGVQYXNza2V5U2lnblVwKHRoaXMuY2xpZW50LCB2YWx1ZXMsIHsgY29uc2VudCwgY2FwdGNoYTogdGhpcy5zaWduVXBDYXB0Y2hhLCB0OiB0aGlzLnQsIHBvbGljaWVzOiB0aGlzLnBvbGljaWVzIH0pKTtcbiAgfVxuXG4gIC8qKiBUaGUgcGFzc2tleS1vbmx5IHNpZ24tdXAncyBsYXN0IHN0ZXA6IGNyZWF0ZSB0aGUgcGFzc2tleSwgYW5kIHdpdGggaXQgdGhlIGFjY291bnQuICovXG4gIGFzeW5jIGNyZWF0ZVBhc3NrZXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpO1xuICAgIGF3YWl0IHRoaXMuZmluaXNoKGF3YWl0IGZpbmlzaFBhc3NrZXlTaWduVXAodGhpcy5jbGllbnQsIHRoaXMuc3RhdGUoKSwgeyB0OiB0aGlzLnQgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZWNvdmVyeSBjb2RlcyBhbiBNRkEgZW5yb2xtZW50IGp1c3QgY29tcGxldGVkIHRoZSBzaWduLWluIHdpdGgsIHNob3duXG4gICAqIG9uY2UgYmVmb3JlIGl0IGZpbmlzaGVzICh7QGxpbmsgc2F2ZVJlY292ZXJ5Q29kZXN9KTsgbnVsbCBvdGhlcndpc2UuIFRoZXlcbiAgICogbGl2ZSBvbmx5IGluIHRoaXMgY29udHJvbGxlcidzIG1lbW9yeS5cbiAgICovXG4gIHJlY292ZXJ5Q29kZXMoKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICByZXR1cm4gcGVuZGluZ1JlY292ZXJ5Q29kZXModGhpcy5zdGF0ZSgpKTtcbiAgfVxuXG4gIC8qKiBcIkkndmUgc2F2ZWQgbXkgY29kZXNcIjogZm9yZ2V0IHRoZSByZWNvdmVyeSBjb2RlcyBhbmQgZmluaXNoIHRoZSBzaWduLWluLiAqL1xuICBhc3luYyBzYXZlUmVjb3ZlcnlDb2RlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmZpbmlzaChhY2tub3dsZWRnZVJlY292ZXJ5Q29kZXModGhpcy5zdGF0ZSgpKSk7XG4gIH1cblxuICAvKiogVGhlIGFkZHJlc3MgYmVsb25nZWQgdG8gYW4gZXhpc3RpbmcgYWNjb3VudDogdGhlIG5vdGljZSBpcyB1cCB1bnRpbCB7QGxpbmsgY29udGludWVBZnRlckV4aXN0aW5nQWNjb3VudH0uICovXG4gIGV4aXN0aW5nQWNjb3VudE5vdGljZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGVuZGluZ0V4aXN0aW5nQWNjb3VudE5vdGljZSh0aGlzLnN0YXRlKCkpO1xuICB9XG5cbiAgLyoqIFRoZSB1c2VyIHJlYWQgdGhlIG5vdGljZTogZmluaXNoIHRoZSBzaWduLXVwLiAqL1xuICBhc3luYyBjb250aW51ZUFmdGVyRXhpc3RpbmdBY2NvdW50KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZmluaXNoKGFja25vd2xlZGdlRXhpc3RpbmdBY2NvdW50KHRoaXMuc3RhdGUoKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5pc2gobmV4dDogRmxvd1N0YXRlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQW4gZW5yb2xtZW50J3MgcmVjb3ZlcnkgY29kZXMgYXJlIHNob3duIGZpcnN0OyBgc2F2ZVJlY292ZXJ5Q29kZXNgIGZpbmlzaGVzLlxuICAgIGlmIChwZW5kaW5nUmVjb3ZlcnlDb2RlcyhuZXh0KSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IC4uLm5leHQsIGJ1c3k6IGZhbHNlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmV4dC5hdHRlbXB0Py5zdGF0dXMgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgIC8vIFN0YXlzIGJ1c3kgdW50aWwgdGhpcyBicm93c2VyIGFjdHVhbGx5IGhvbGRzIHRoZSBzZXNzaW9uOiB0aGUgY29tcGxldGlvblxuICAgICAgLy8gYWxvbmUgc2F5cyBub3RoaW5nIGFib3V0IHdoZXRoZXIgdGhlIGNvb2tpZSB3YXMga2VwdC5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyAuLi5uZXh0LCBidXN5OiB0cnVlIH0pO1xuICAgICAgbGV0IGV4Y2hhbmdlZCA9IHRydWU7XG4gICAgICBpZiAobmV4dC50aWNrZXQpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdCgnL3YxL2NsaWVudC90aWNrZXRzL2V4Y2hhbmdlJywge1xuICAgICAgICAgIGF0dGVtcHRfaWQ6IChuZXh0LmF0dGVtcHQgYXMgeyBpZD86IHN0cmluZyB9KS5pZCxcbiAgICAgICAgICB0aWNrZXQ6IG5leHQudGlja2V0LFxuICAgICAgICB9KTtcbiAgICAgICAgZXhjaGFuZ2VkID0gcmVzLm9rO1xuICAgICAgfVxuICAgICAgaWYgKGV4Y2hhbmdlZCAmJiB0aGlzLmhvbGRFeGlzdGluZ0FjY291bnROb3RpY2UgJiYgcGVuZGluZ0V4aXN0aW5nQWNjb3VudE5vdGljZShuZXh0KSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgLi4ubmV4dCwgdGlja2V0OiBudWxsLCBidXN5OiBmYWxzZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qga2VwdCA9IGV4Y2hhbmdlZCAmJiAoYXdhaXQgdGhpcy5yZWxvYWQoKSk7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgLi4ubmV4dCwgYnVzeTogZmFsc2UsIHNlc3Npb25LZXB0OiBrZXB0IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKG5leHQpO1xuICAgICAgLy8gQSBtYWdpYy1saW5rIHN0ZXAgbWF5IG5vdyBiZSBwb2xsYWJsZSAoYSBsaW5rIG9wZW5lZCBvbiBhbm90aGVyIGRldmljZSkuXG4gICAgICB0aGlzLnN5bmNQb2xsaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFN0YXJ0L3N0b3AgdGhlIMKnNS4zIG1hZ2ljLWxpbmsgcG9sbCB0byBtYXRjaCB0aGUgY3VycmVudCBzdGF0ZS4gKi9cbiAgc3luY1BvbGxpbmcoKTogdm9pZCB7XG4gICAgaWYgKHNob3VsZEtlZXBQb2xsaW5nKHRoaXMuc3RhdGUoKSkpIHtcbiAgICAgIHRoaXMuc3RhcnRQb2xsaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcFBvbGxpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0UG9sbGluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wb2xsVGltZXIpIHJldHVybjtcbiAgICB0aGlzLnBvbGxUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdGF0ZTogbmV4dCwgdGlja2V0IH0gPSBhd2FpdCBwb2xsQXR0ZW1wdCh0aGlzLmNsaWVudCwgdGhpcy5zdGF0ZSgpKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShuZXh0KTtcbiAgICAgICAgLy8gZS5nLiBhIHBhc3NrZXkgc2lnbi11cCB3aG9zZSBlbWFpbCB3YXMganVzdCBwcm92ZW46IG9ubHkgdGhpcyB0YWIgY2FuIGdvIG9uLlxuICAgICAgICBpZiAoIXRpY2tldCAmJiAhc2hvdWxkS2VlcFBvbGxpbmcobmV4dCkpIHRoaXMuc3RvcFBvbGxpbmcoKTtcbiAgICAgICAgaWYgKCF0aWNrZXQgfHwgIW5leHQuYXR0ZW1wdCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIFRoZSB0aWNrZXQgaXMgZXhjaGFuZ2VkIGJ5IGEgbm9ybWFsIHJlcXVlc3QsIHNvIG5vIHNlc3Npb24gdG9rZW4gZXZlclxuICAgICAgICAvLyBhcHBlYXJzIGluIGEgVVJMLlxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0KCcvdjEvY2xpZW50L3RpY2tldHMvZXhjaGFuZ2UnLCB7XG4gICAgICAgICAgYXR0ZW1wdF9pZDogKG5leHQuYXR0ZW1wdCBhcyB7IGlkPzogc3RyaW5nIH0pLmlkLFxuICAgICAgICAgIHRpY2tldCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGtlcHQgPSByZXMub2sgJiYgKGF3YWl0IHRoaXMucmVsb2FkKCkpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgLi4udGhpcy5zdGF0ZSgpLCBzZXNzaW9uS2VwdDoga2VwdCB9KTtcbiAgICAgICAgdGhpcy5zdG9wUG9sbGluZygpO1xuICAgICAgfSkoKTtcbiAgICB9LCAyXzAwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BQb2xsaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBvbGxUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBvbGxUaW1lcik7XG4gICAgICB0aGlzLnBvbGxUaW1lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlbGVhc2UgdGhlIHBvbGwgdGltZXIgYW5kIHRoZSBjYXB0Y2hhIHdpZGdldHMg4oCUIGNhbGwgZnJvbSB0aGUgY29tcG9uZW50J3MgYG5nT25EZXN0cm95YC4gKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhc3NrZXkuc3RvcEF1dG9maWxsKCk7XG4gICAgdGhpcy5zdG9wUG9sbGluZygpO1xuICAgIHRoaXMuY2FwdGNoYS5kZXN0cm95KCk7XG4gICAgdGhpcy5zaWduVXBDYXB0Y2hhLmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
|
|
458
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zsb3ctY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBRUwsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2Qiw2QkFBNkIsRUFDN0IsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQix3QkFBd0IsRUFDeEIsNEJBQTRCLEVBQzVCLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixXQUFXLEVBQ1gsUUFBUSxFQUNSLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsYUFBYSxFQUNiLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsMEJBQTBCLEVBQzFCLFlBQVksR0FRYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUzQzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQStEWDtJQUNBO0lBR0E7SUFFQTtJQXBFVixLQUFLLENBQTRCO0lBQzFDOzs7O09BSUc7SUFDTSxRQUFRLEdBQUcsTUFBTSxDQUEwQixJQUFJLENBQUMsQ0FBQztJQUMxRDs7O09BR0c7SUFDTSxVQUFVLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUNsRCx5RUFBeUU7SUFDaEUsT0FBTyxHQUFzQix1QkFBdUIsQ0FBQyxTQUFTLEVBQUU7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QUFnRztJQUNoRyxPQUFPO1FBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdyaXRhYmxlU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEZhcGlDbGllbnQsXG4gIGFkdmFuY2VXaXRoQ2FwdGNoYSxcbiAgYXRsYXNDYXB0Y2hhTGFiZWxzLFxuICBhdHRlbXB0UGFzc3dvcmRIb2xkUHJvb2YsXG4gIHByZXBhcmVQYXNzd29yZEhvbGRQcm9vZixcbiAgY3JlYXRlQ2FwdGNoYUNvbnRyb2xsZXIsXG4gIGNyZWF0ZVBhc3NrZXlTaWduSW5Db250cm9sbGVyLFxuICBjcmVhdGVQYXNza2V5U2lnblVwLFxuICBjcmVhdGVTaWduVXAsXG4gIGZpbmlzaFBhc3NrZXlTaWduVXAsXG4gIGZldGNoSW5zdGFuY2VTZXR0aW5ncyxcbiAgZmV0Y2hMYXN0U2lnbkluTWV0aG9kLFxuICBzdGFydFNpZ25JbldpdGhBdGxhcyxcbiAgY3JlYXRlTWZhRW5yb2xsbWVudCxcbiAgYWNrbm93bGVkZ2VFeGlzdGluZ0FjY291bnQsXG4gIGFja25vd2xlZGdlUmVjb3ZlcnlDb2RlcyxcbiAgcGVuZGluZ0V4aXN0aW5nQWNjb3VudE5vdGljZSxcbiAgcGVuZGluZ1JlY292ZXJ5Q29kZXMsXG4gIG1mYUNob2ljZXNGcm9tLFxuICBwcmVwYXJlU2Vjb25kRmFjdG9yQ29kZSxcbiAgcmVzZW5kU2lnblVwVmVyaWZpY2F0aW9uLFxuICBmbG93TmVlZHNDYXB0Y2hhLFxuICBzaWduSW5DYXB0Y2hhT3B0aW9ucyxcbiAgZmxvd0Zyb21QZW5kaW5nLFxuICBpbml0aWFsRmxvdyxcbiAgbmV4dFN0ZXAsXG4gIG9mZmVyZWRGaXJzdEZhY3RvcnMsXG4gIHBvbGxBdHRlbXB0LFxuICBwcmVwYXJlRmFjdG9yLFxuICBwbGFuRmlyc3RGYWN0b3IsXG4gIHNob3VsZEtlZXBQb2xsaW5nLFxuICBQb2xpY3lBY2NlcHRhbmNlQ29udHJvbGxlcixcbiAgbG9hZFBvbGljaWVzLFxuICB0eXBlIENhcHRjaGFDb250cm9sbGVyLFxuICB0eXBlIEZsb3dTdGF0ZSxcbiAgdHlwZSBJbnN0YW5jZVNldHRpbmdzLFxuICB0eXBlIE1mYUNob2ljZXMsXG4gIHR5cGUgTWZhRW5yb2xsbWVudENvbnRyb2xsZXIsXG4gIHR5cGUgTWZhRW5yb2xsbWVudFN0YXRlLFxuICB0eXBlIFBhc3NrZXlTaWduSW5Db250cm9sbGVyLFxufSBmcm9tICdAYXRsYXNhdXRoL2pzJztcbmltcG9ydCB7IEVOX1VTLCB0cmFuc2xhdGUgfSBmcm9tICcuLi9pMThuJztcblxuLyoqXG4gKiBUaGUgc2VydmVyLWRyaXZlbiBzaWduLWluIC8gc2lnbi11cCBlbmdpbmUsIHNoYXJlZCBieSBgPGF0bGFzLXNpZ24taW4+YCBhbmRcbiAqIGA8YXRsYXMtc2lnbi11cD5gIOKAlCB0aGUgQW5ndWxhciBjb3VudGVycGFydCBvZiBSZWFjdCdzIGB1c2VGbG93YCBob29rLlxuICpcbiAqIEl0IG93bnMgbm8gZGVjaXNpb24gYWJvdXQgd2hhdCBjb21lcyBuZXh0OiBldmVyeSBzdGF0dXMgY29tZXMgYmFjayBmcm9tIHRoZVxuICogc2VydmVyIHZpYSBgYWR2YW5jZWAsIGFuZCB0aGlzIGNvbnRyb2xsZXIgb25seSBwb3N0cyB3aGF0ZXZlciB0aGUgY3VycmVudCBzdGVwXG4gKiBuZWVkcyBhbmQgcmUtcmVuZGVycyB0aGUgcmV0dXJuZWQgc3RhdHVzLiBTdGF0ZSBsaXZlcyBpbiBhIHNpZ25hbCBzbyB0ZW1wbGF0ZXNcbiAqIHVwZGF0ZSB3aGV0aGVyIHRoZSBhcHAgcnVucyB6b25lZCBvciB6b25lbGVzcy5cbiAqXG4gKiBgPGF0bGFzLXNpZ24tdXA+YCBzdGFydHMgdGhlIGF0dGVtcHQgd2l0aCB7QGxpbmsgY3JlYXRlfVxuICogKGBQT1NUIC92MS9jbGllbnQvc2lnbl91cHNgKTsgdGhlIGVtYWlsZWQtY29kZSBzdGVwIHRoZW4gcnVucyB0aHJvdWdoIHRoZSBzYW1lXG4gKiB7QGxpbmsgc3VibWl0fS4gQm90aCBmbG93cyBkcmF3IHRoZSBpbnN0YW5jZSdzIGNhcHRjaGEgKGZyb21cbiAqIHtAbGluayBsb2FkU2V0dGluZ3N9KSB3aGVuIGl0IGlzIHJlcXVpcmVkLlxuICovXG5leHBvcnQgY2xhc3MgQXRsYXNGbG93Q29udHJvbGxlciB7XG4gIHJlYWRvbmx5IHN0YXRlOiBXcml0YWJsZVNpZ25hbDxGbG93U3RhdGU+O1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlJ3MgcHVibGljIHNpZ24taW4gLyBzaWduLXVwIHNldHRpbmdzIChjYXB0Y2hhLCBzaWduLXVwIGZpZWxkcyxcbiAgICogbGVnYWwgY29uc2VudCkgZnJvbSBgR0VUIC92MS9hcHBlYXJhbmNlYDsgbnVsbCB1bnRpbCB7QGxpbmsgbG9hZFNldHRpbmdzfVxuICAgKiByZXNvbHZlcywgb3Igd2hlbiB0aGUgc2VydmVyIGNvdWxkIG5vdCBiZSByZWFjaGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ3MgPSBzaWduYWw8SW5zdGFuY2VTZXR0aW5ncyB8IG51bGw+KG51bGwpO1xuICAvKipcbiAgICogVGhlIG1ldGhvZCB0aGlzIGJyb3dzZXIgbGFzdCBzaWduZWQgaW4gd2l0aCAoYHBhc3N3b3JkYCwgYG9hdXRoX2dpdGh1YmAsIOKApilcbiAgICogZm9yIHRoZSBcIkxhc3QgdXNlZFwiIGhpbnQ7IG51bGwgd2hlbiBub25lLCBvciB0aGUgaW5zdGFuY2UgdHVybmVkIGl0IG9mZi5cbiAgICovXG4gIHJlYWRvbmx5IGxhc3RNZXRob2QgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIC8qKiBUaGUgc2lnbi1pbiBjYXB0Y2hhIChpZGVudGlmaWVyIHN0ZXAgLyBgbmVlZHNfY2FwdGNoYWAgY2hhbGxlbmdlKS4gKi9cbiAgcmVhZG9ubHkgY2FwdGNoYTogQ2FwdGNoYUNvbnRyb2xsZXIgPSBjcmVhdGVDYXB0Y2hhQ29udHJvbGxlcih1bmRlZmluZWQsIHtcbiAgICAvLyBUaGUgQXRsYXMgY2FwdGNoYSdzIHdvcmRzIGZvbGxvdyB0aGUgZm9ybSdzIGNhdGFsb2cgKHJlYWQgd2hlbiBkcmF3bikuXG4gICAgYXRsYXNMYWJlbHM6ICgpID0+IGF0bGFzQ2FwdGNoYUxhYmVscyh0aGlzLnQpLFxuICB9KTtcbiAgLyoqIFRoZSBzaWduLXVwIGNhcHRjaGEgKHRoZSBjcmVhdGUtYWNjb3VudCBzdGVwKS4gKi9cbiAgcmVhZG9ubHkgc2lnblVwQ2FwdGNoYTogQ2FwdGNoYUNvbnRyb2xsZXIgPSBjcmVhdGVDYXB0Y2hhQ29udHJvbGxlcih1bmRlZmluZWQsIHtcbiAgICBhdGxhc0xhYmVsczogKCkgPT4gYXRsYXNDYXB0Y2hhTGFiZWxzKHRoaXMudCksXG4gIH0pO1xuICAvKiogV2hldGhlciB7QGxpbmsgY2FwdGNoYX0gY3VycmVudGx5IGRyYXdzIGEgd2lkZ2V0IChmb3IgdGVtcGxhdGVzKS4gKi9cbiAgcmVhZG9ubHkgY2FwdGNoYURyYXduID0gc2lnbmFsKGZhbHNlKTtcbiAgLyoqIFdoZXRoZXIge0BsaW5rIHNpZ25VcENhcHRjaGF9IGN1cnJlbnRseSBkcmF3cyBhIHdpZGdldCAoZm9yIHRlbXBsYXRlcykuICovXG4gIHJlYWRvbmx5IHNpZ25VcENhcHRjaGFEcmF3biA9IHNpZ25hbChmYWxzZSk7XG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgZmFjdG9yIHRoZSBzZXJ2ZXIgd2FzIGFza2VkIHRvIHNlbmQgKHtAbGluayBwcmVwYXJlfSkgb24gdGhlXG4gICAqIGN1cnJlbnQgYG5lZWRzX2ZpcnN0X2ZhY3RvcmAgc3RlcCDigJQgdGhlIGZvcm0gdGhlbiBjb2xsZWN0cyBpdHMgY29kZS4gTnVsbFxuICAgKiBvdGhlcndpc2UuXG4gICAqL1xuICByZWFkb25seSBwcmVwYXJlZEZhY3RvciA9IHNpZ25hbDwnZW1haWxfY29kZScgfCAnZW1haWxfbGluaycgfCBudWxsPihudWxsKTtcbiAgLyoqXG4gICAqIFwiRW1haWwgbWUgYSBjb2RlIGluc3RlYWRcIiBhdCB0aGUgc2Vjb25kIGZhY3RvciAoe0BsaW5rIHNlbmRFbWFpbFNlY29uZEZhY3Rvcn0pOlxuICAgKiBpbiBmbGlnaHQsIHdoZXJlIHRoZSBjb2RlIHdlbnQsIG9yIHdoeSBpdCB3YXMgbm90IHNlbnQuIE51bGwgdW50aWwgYXNrZWQsXG4gICAqIGFuZCBhZ2FpbiBvbmNlIHRoZSBmbG93IGxlYXZlcyB0aGF0IHN0ZXAuXG4gICAqL1xuICByZWFkb25seSBlbWFpbFNlY29uZEZhY3RvciA9IHNpZ25hbDx7IGJ1c3k/OiBib29sZWFuOyBzZW50VG8/OiBzdHJpbmc7IGVycm9yPzogc3RyaW5nIH0gfCBudWxsPihudWxsKTtcbiAgLyoqIFwiVGV4dCBtZSBhIGNvZGUgaW5zdGVhZFwiIGF0IHRoZSBzZWNvbmQgZmFjdG9yICh7QGxpbmsgc2VuZFNtc1NlY29uZEZhY3Rvcn0pOiBhcyB7QGxpbmsgZW1haWxTZWNvbmRGYWN0b3J9LiAqL1xuICByZWFkb25seSBzbXNTZWNvbmRGYWN0b3IgPSBzaWduYWw8eyBidXN5PzogYm9vbGVhbjsgc2VudFRvPzogc3RyaW5nOyBlcnJvcj86IHN0cmluZyB9IHwgbnVsbD4obnVsbCk7XG4gIC8qKlxuICAgKiBUaGUgTUZBIGVucm9sbWVudCBzdGVwIChgbmVlZHNfbWZhX2Vucm9sbG1lbnRgKTogdGhlIGF1dGhlbnRpY2F0b3IgYXBwJ3NcbiAgICogc2V0dXAgKFFSIGNvZGUsIHNldHVwIGtleSkgb3IgYSB0ZXh0ZWQgY29kZS4gU3RhcnRlZCBhbmQgcmVzZXQgd2l0aCB0aGUgZmxvdy5cbiAgICovXG4gIHJlYWRvbmx5IGVucm9sbG1lbnQ6IE1mYUVucm9sbG1lbnRDb250cm9sbGVyO1xuICAvKioge0BsaW5rIGVucm9sbG1lbnR9J3Mgc3RhdGUsIGZvciB0ZW1wbGF0ZXMuICovXG4gIHJlYWRvbmx5IGVucm9sbG1lbnRTdGF0ZTogV3JpdGFibGVTaWduYWw8TWZhRW5yb2xsbWVudFN0YXRlPjtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSdzIHBvbGljaWVzICh0ZXJtcywgcHJpdmFjeSwg4oCmKSBmb3IgdGhlIGNyZWF0ZS1hY2NvdW50IGZvcm06XG4gICAqIHtAbGluayBjcmVhdGV9IHNlbmRzIHRoZWlyIGFjY2VwdGFuY2VzIGFuZCByZWxvYWRzIHRoZW0gYWZ0ZXIgYSByZWZ1c2FsLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWNpZXMgPSBuZXcgUG9saWN5QWNjZXB0YW5jZUNvbnRyb2xsZXIoW10pO1xuICAvKipcbiAgICogUGFzc2tleSBzaWduLWluICh0aGUgXCJTaWduIGluIHdpdGggYSBwYXNza2V5XCIgYnV0dG9uIGFuZCBwYXNza2V5IGF1dG9maWxsIG9uXG4gICAqIHRoZSBpZGVudGlmaWVyIGZpZWxkKS4gVGhlIG91dGNvbWUgZ29lcyB0aHJvdWdoIHRoZSBzYW1lIGNvbXBsZXRpb24gYXMgZXZlcnkgc2lnbi1pbi5cbiAgICovXG4gIHJlYWRvbmx5IHBhc3NrZXk6IFBhc3NrZXlTaWduSW5Db250cm9sbGVyO1xuICAvKiogV2hldGhlciB0aGlzIGJyb3dzZXIgY2FuIHJ1biBXZWJBdXRobjsgYDxhdGxhcy1zaWduLWluPmAgc2V0cyBpdCBhZnRlciBpdCBpcyBjcmVhdGVkIGluIGEgYnJvd3Nlci4gKi9cbiAgcmVhZG9ubHkgcGFzc2tleVN1cHBvcnRlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcG9sbFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpZGVudGlmaWVyID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjbGllbnQ6IEZhcGlDbGllbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWxvYWQ6ICgpID0+IFByb21pc2U8Ym9vbGVhbj4sXG4gICAgcGVuZGluZzogeyBpZDogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9IHwgbnVsbCxcbiAgICAvKiogUmVzb2x2ZXMgdGhlIGNhcHRjaGEgbWVzc2FnZXMnIGNhdGFsb2cga2V5cy4gRGVmYXVsdHMgdG8gZW4tVVMuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB0OiAoa2V5OiBzdHJpbmcpID0+IHN0cmluZyA9IChrZXkpID0+IHRyYW5zbGF0ZShFTl9VUywga2V5KSxcbiAgICAvKiogV2FpdCBmb3Ige0BsaW5rIGNvbnRpbnVlQWZ0ZXJFeGlzdGluZ0FjY291bnR9IChgPGF0bGFzLXNpZ24tdXA+YCBkcmF3cyB0aGUgbm90aWNlKS4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvbGRFeGlzdGluZ0FjY291bnROb3RpY2UgPSBmYWxzZSxcbiAgKSB7XG4gICAgLy8gU2VlZGVkIGZyb20gYSByZWRpcmVjdCB0aGF0IGNhbWUgYmFjayBtaWQtZmxvdyAoZS5nLiBPQXV0aCBuZWVkaW5nIGEgc2Vjb25kXG4gICAgLy8gZmFjdG9yKSBzbyB0aGUgdXNlciByZXN1bWVzIGF0IHRoZSBkZW1hbmRlZCBzdGVwIGluc3RlYWQgb2Ygc3RhcnRpbmcgb3Zlci5cbiAgICB0aGlzLnN0YXRlID0gc2lnbmFsPEZsb3dTdGF0ZT4ocGVuZGluZyA/IGZsb3dGcm9tUGVuZGluZyhwZW5kaW5nKSA6IGluaXRpYWxGbG93KTtcbiAgICB0aGlzLmVucm9sbG1lbnQgPSBjcmVhdGVNZmFFbnJvbGxtZW50KHRoaXMuY2xpZW50LCAoKSA9PiB0aGlzLm1mYUNob2ljZXMoKSk7XG4gICAgdGhpcy5lbnJvbGxtZW50U3RhdGUgPSBzaWduYWw8TWZhRW5yb2xsbWVudFN0YXRlPih0aGlzLmVucm9sbG1lbnQuc3RhdGUpO1xuICAgIHRoaXMuZW5yb2xsbWVudC5zdWJzY3JpYmUoKG5leHQpID0+IHRoaXMuZW5yb2xsbWVudFN0YXRlLnNldChuZXh0KSk7XG4gICAgdGhpcy5wYXNza2V5ID0gY3JlYXRlUGFzc2tleVNpZ25JbkNvbnRyb2xsZXIoe1xuICAgICAgY2xpZW50OiB0aGlzLmNsaWVudCxcbiAgICAgIG9uU3RhcnQ6ICgpID0+IHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKSxcbiAgICAgIG9uUmVzdWx0OiAobmV4dCkgPT4gdGhpcy5maW5pc2gobmV4dCksXG4gICAgICBjYXB0Y2hhOiAoKSA9PiB0aGlzLmNhcHRjaGEsXG4gICAgICBjYW5jZWxsZWRNZXNzYWdlOiAoKSA9PiB0aGlzLnQoJ3NpZ25Jbi5wYXNza2V5Q2FuY2VsbGVkJyksXG4gICAgfSk7XG4gICAgdGhpcy5zeW5jQ2FwdGNoYSgpO1xuICAgIHRoaXMuc3luY0Vucm9sbG1lbnQoKTtcbiAgfVxuXG4gIC8qKiBXaHkgXCJDb250aW51ZSB3aXRoIEF0bGFzXCIgY291bGQgbm90IHN0YXJ0ICh0aGUgc2VydmVyJ3MgbWVzc2FnZSk7IG51bGwgb3RoZXJ3aXNlLiAqL1xuICByZWFkb25seSBzaWduSW5XaXRoQXRsYXNFcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvKipcbiAgICogXCJDb250aW51ZSB3aXRoIEF0bGFzXCIgKHdoZW4gYHNldHRpbmdzKCkuc2lnbkluV2l0aEF0bGFzYCBpcyBzZXQpOiBzdGFydHMgdGhlXG4gICAqIFNTTyBzaWduLWluIGFuZCBzZW5kcyB0aGUgYnJvd3NlciB0byBBdGxhcy5cbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhBdGxhcyhjb25uZWN0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgIHRoaXMuc2lnbkluV2l0aEF0bGFzRXJyb3Iuc2V0KG51bGwpO1xuICAgIGNvbnN0IHN0YXJ0ZWQgPSBhd2FpdCBzdGFydFNpZ25JbldpdGhBdGxhcyh0aGlzLmNsaWVudCwgY29ubmVjdGlvbklkLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgaWYgKCd1cmwnIGluIHN0YXJ0ZWQpIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oc3RhcnRlZC51cmwpO1xuICAgIGVsc2UgdGhpcy5zaWduSW5XaXRoQXRsYXNFcnJvci5zZXQoc3RhcnRlZC5lcnJvcik7XG4gIH1cblxuICAvKiogXCJTaWduIGluIHdpdGggYSBwYXNza2V5XCIgaXMgb2ZmZXJlZDogdGhlIGZpcnN0IHN0ZXAsIHRoZSBpbnN0YW5jZSB0dXJuZWQgcGFzc2tleSBzaWduLWluIG9uLCBhbmQgdGhlIGJyb3dzZXIgY2FuLiAqL1xuICBwYXNza2V5T2ZmZXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYXNza2V5U3VwcG9ydGVkKCkgJiYgIXRoaXMuc3RhdGUoKS5hdHRlbXB0ICYmIHRoaXMuc2V0dGluZ3MoKT8ucGFzc2tleVNpZ25JbiA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBXaGF0IHRoZSBhcHAgbGV0cyB0aGUgTUZBIHN0ZXBzIG9mZmVyIChmcm9tIHtAbGluayBzZXR0aW5nc30pLiAqL1xuICBtZmFDaG9pY2VzKCk6IE1mYUNob2ljZXMge1xuICAgIHJldHVybiBtZmFDaG9pY2VzRnJvbSh0aGlzLnNldHRpbmdzKCk/LmFjY291bnQpO1xuICB9XG5cbiAgLyoqIFN0YXJ0IHRoZSBlbnJvbG1lbnQgc3RlcCBmb3IgaXRzIGF0dGVtcHQsIG9yIHJlc2V0IGl0IG9uY2UgdGhlIGZsb3cgbGVhdmVzLiAqL1xuICBwcml2YXRlIHN5bmNFbnJvbGxtZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGF0dGVtcHQgPSB0aGlzLnN0YXRlKCkuYXR0ZW1wdDtcbiAgICBpZiAoYXR0ZW1wdD8uc3RhdHVzID09PSAnbmVlZHNfbWZhX2Vucm9sbG1lbnQnICYmIGF0dGVtcHQuaWQpIHRoaXMuZW5yb2xsbWVudC5zdGFydChhdHRlbXB0LmlkKTtcbiAgICBlbHNlIHRoaXMuZW5yb2xsbWVudC5yZXNldCgpO1xuICB9XG5cbiAgLyoqIEZldGNoIHRoZSBpbnN0YW5jZSdzIHB1YmxpYyBzZXR0aW5ncyBhbmQgZHJhdyB3aGF0ZXZlciBjYXB0Y2hhIHRoZXkgcmVxdWlyZS4gKi9cbiAgYXN5bmMgbG9hZFNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGZldGNoSW5zdGFuY2VTZXR0aW5ncyh0aGlzLmNsaWVudCk7XG4gICAgaWYgKGxvYWRlZCkge1xuICAgICAgdGhpcy5zZXR0aW5ncy5zZXQobG9hZGVkKTtcbiAgICAgIHRoaXMuc3luY0NhcHRjaGEoKTtcbiAgICAgIGlmIChsb2FkZWQuYWNjb3VudC5sYXN0U2lnbkluTWV0aG9kKSB0aGlzLmxhc3RNZXRob2Quc2V0KGF3YWl0IGZldGNoTGFzdFNpZ25Jbk1ldGhvZCh0aGlzLmNsaWVudCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgZmFjdG9ycyB0byBvZmZlciBvbiBhIGBuZWVkc19maXJzdF9mYWN0b3JgIHN0ZXA6IHRoZSBzZXJ2ZXIncyBsaXN0XG4gICAqIHdpdGhvdXQgZW1haWwgY29kZSAvIGxpbmsgd2hpbGUgdGhlIGFwcCBjYW5ub3QgZGVsaXZlciBlbWFpbFxuICAgKiAoYHNldHRpbmdzLmVtYWlsRGVsaXZlcnkuYXZhaWxhYmxlID09PSBmYWxzZWApLiBFbXB0eSBvbiBhbnkgb3RoZXIgc3RlcC5cbiAgICovXG4gIGZpcnN0RmFjdG9ycygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgYXR0ZW1wdCA9IHRoaXMuc3RhdGUoKS5hdHRlbXB0O1xuICAgIGNvbnN0IHN0ZXAgPSBhdHRlbXB0ID8gbmV4dFN0ZXAoYXR0ZW1wdCkgOiBudWxsO1xuICAgIGlmIChzdGVwPy5raW5kICE9PSAnY29sbGVjdF9maXJzdF9mYWN0b3InKSByZXR1cm4gW107XG4gICAgY29uc3Qgb2ZmZXJlZCA9IG9mZmVyZWRGaXJzdEZhY3RvcnMoc3RlcC5zdHJhdGVnaWVzLCB0aGlzLnNldHRpbmdzKCk/LmVtYWlsRGVsaXZlcnkpO1xuICAgIGNvbnN0IHByb29mID0gdGhpcy5ob2xkUHJvb2YoKTtcbiAgICByZXR1cm4gcHJvb2YgJiYgIW9mZmVyZWQuaW5jbHVkZXMocHJvb2YpID8gWy4uLm9mZmVyZWQsIHByb29mXSA6IG9mZmVyZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGVtYWlsZWQgcHJvb2YgYSBwYXNzd29yZCBob2xkIHN0aWxsIHdhaXRzIG9uIChgRmxvd1N0YXRlLnBhc3N3b3JkSG9sZGApOiB0aGVcbiAgICogY29kZSwgb3IgYSBsaW5rIHdoZXJlIHRoZSBpbnN0YW5jZSB2ZXJpZmllcyBieSBsaW5rIG9ubHkuIE51bGwgd2l0aCBubyBob2xkLCBvbmNlXG4gICAqIHByb3Zlbiwgb3Igd2hpbGUgdGhlIGFwcCBjYW5ub3QgZGVsaXZlciBlbWFpbC5cbiAgICovXG4gIGhvbGRQcm9vZigpOiAnZW1haWxfY29kZScgfCAnZW1haWxfbGluaycgfCBudWxsIHtcbiAgICBjb25zdCBob2xkID0gdGhpcy5zdGF0ZSgpLnBhc3N3b3JkSG9sZDtcbiAgICBpZiAoIWhvbGQgfHwgaG9sZC5yZWxlYXNlZCB8fCB0aGlzLnNldHRpbmdzKCk/LmVtYWlsRGVsaXZlcnk/LmF2YWlsYWJsZSA9PT0gZmFsc2UpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzKCk/LmFjY291bnQ/LmVtYWlsVmVyaWZpY2F0aW9uID09PSAnbGluaycgPyAnZW1haWxfbGluaycgOiAnZW1haWxfY29kZSc7XG4gIH1cblxuICAvKiogQmFjayBmcm9tIHRoZSBlbWFpbGVkIGZhY3RvciB0byB0aGUgcGFzc3dvcmQgZmllbGQuICovXG4gIHVzZVBhc3N3b3JkKCk6IHZvaWQge1xuICAgIHRoaXMucHJlcGFyZWRGYWN0b3Iuc2V0KG51bGwpO1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBwcmVwYXJlZDogbnVsbCwgcG9sbFNlY3JldDogbnVsbCwgZXJyb3JzOiBbXSB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVHJ1ZSB3aGVuIGVtYWlsICsgcGFzc3dvcmQgc2lnbi11cCBjYW5ub3QgY29tcGxldGUgYmVjYXVzZSB0aGUgYXBwIGNhbm5vdFxuICAgKiBzZW5kIHRoZSB2ZXJpZmljYXRpb24gZW1haWwgKGBzZXR0aW5ncy5lbWFpbERlbGl2ZXJ5LnBhc3N3b3JkU2lnblVwID09PSBmYWxzZWApOlxuICAgKiBgPGF0bGFzLXNpZ24tdXA+YCBzaG93cyB0aGUgXCJjYW4ndCBzZW5kIGVtYWlsXCIgbm90aWNlIGluc3RlYWQgb2YgdGhlIGZvcm0uXG4gICAqL1xuICBzaWduVXBFbWFpbFVuYXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzKCk/LmVtYWlsRGVsaXZlcnkucGFzc3dvcmRTaWduVXAgPT09IGZhbHNlO1xuICB9XG5cbiAgLyoqIEZhbHNlIHdoZW4gYSBwYXNzd29yZCByZXNldCBlbWFpbCBjYW5ub3QgYmUgZGVsaXZlcmVkIOKAlCBoaWRlIFwiRm9yZ290IHBhc3N3b3JkP1wiLiAqL1xuICBwYXNzd29yZFJlc2V0QXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzKCk/LmVtYWlsRGVsaXZlcnkucGFzc3dvcmRSZXNldCAhPT0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQXNrIHRoZSBzZXJ2ZXIgdG8gZW1haWwgYSBzaWduLWluIGNvZGUgZm9yIHRoZSBjdXJyZW50IGBuZWVkc19maXJzdF9mYWN0b3JgXG4gICAqIHN0ZXAgKGBQT1NUIOKApi9wcmVwYXJlX2ZpcnN0X2ZhY3RvcmApOyB0aGUgZm9ybSB0aGVuIGNvbGxlY3RzIHRoZSBjb2RlLCB3aGljaFxuICAgKiB7QGxpbmsgc3VibWl0fSBwb3N0cyBhcyB0aGUgYGVtYWlsX2NvZGVgIHN0cmF0ZWd5LiBXaGlsZSBhIHBhc3N3b3JkIGhvbGQgd2FpdHNcbiAgICogb24gaXQgKHtAbGluayBob2xkUHJvb2Z9KSwgdGhpcyBlbWFpbHMgdGhhdCBwcm9vZiBpbnN0ZWFkLlxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZShzdHJhdGVneTogJ2VtYWlsX2NvZGUnIHwgJ2VtYWlsX2xpbmsnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmZpcnN0RmFjdG9ycygpLmluY2x1ZGVzKHN0cmF0ZWd5KSkgcmV0dXJuO1xuICAgIGNvbnN0IHByb29mID0gdGhpcy5ob2xkUHJvb2YoKTtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgYnVzeTogdHJ1ZSwgZXJyb3JzOiBbXSB9KSk7XG4gICAgY29uc3QgbmV4dCA9XG4gICAgICBzdHJhdGVneSA9PT0gcHJvb2ZcbiAgICAgICAgPyBhd2FpdCBwcmVwYXJlUGFzc3dvcmRIb2xkUHJvb2YodGhpcy5jbGllbnQsIHRoaXMuc3RhdGUoKSwgcHJvb2YpXG4gICAgICAgIDogYXdhaXQgcHJlcGFyZUZhY3Rvcih0aGlzLmNsaWVudCwgdGhpcy5zdGF0ZSgpLCBzdHJhdGVneSk7XG4gICAgdGhpcy5zZXRTdGF0ZShuZXh0KTtcbiAgICBpZiAoIW5leHQuZXJyb3JzLmxlbmd0aCkgdGhpcy5wcmVwYXJlZEZhY3Rvci5zZXQoc3RyYXRlZ3kpO1xuICAgIHRoaXMuc3luY1BvbGxpbmcoKTtcbiAgfVxuXG4gIC8qKiBLZWVwIGJvdGggY2FwdGNoYXMgaW4gc3RlcCB3aXRoIHRoZSBzZXR0aW5ncyBhbmQgdGhlIGZsb3cncyBjdXJyZW50IHN0ZXAuICovXG4gIHByaXZhdGUgc3luY0NhcHRjaGEoKTogdm9pZCB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzKCk7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlKCk7XG4gICAgdGhpcy5jYXB0Y2hhLmNvbmZpZ3VyZShcbiAgICAgIHNpZ25JbkNhcHRjaGFPcHRpb25zKHNldHRpbmdzPy5jYXB0Y2hhRmxvd3Muc2lnbkluLCBzdGF0ZSwgKCkgPT4gdm9pZCB0aGlzLnN1Ym1pdCh7fSkpLFxuICAgICk7XG4gICAgY29uc3Qgc2lnblVwRmxvdyA9IHNldHRpbmdzPy5jYXB0Y2hhRmxvd3Muc2lnblVwO1xuICAgIHRoaXMuc2lnblVwQ2FwdGNoYS5jb25maWd1cmUoe1xuICAgICAgZmxvdzogc2lnblVwRmxvdyxcbiAgICAgIGFjdGl2ZTogIXN0YXRlLmF0dGVtcHQgJiYgZmxvd05lZWRzQ2FwdGNoYShzaWduVXBGbG93KSxcbiAgICB9KTtcbiAgICB0aGlzLmNhcHRjaGFEcmF3bi5zZXQodGhpcy5jYXB0Y2hhLm5lZWRlZCk7XG4gICAgdGhpcy5zaWduVXBDYXB0Y2hhRHJhd24uc2V0KHRoaXMuc2lnblVwQ2FwdGNoYS5uZWVkZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdGF0ZShuZXh0OiBGbG93U3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMuc3RhdGUoKTtcbiAgICBjb25zdCBwcmV2aW91c0lkID0gcHJldmlvdXMuYXR0ZW1wdD8uaWQgPz8gbnVsbDtcbiAgICB0aGlzLnN0YXRlLnNldChuZXh0KTtcbiAgICAvLyBBIHByb3ZlbiBob2xkIGdvZXMgYmFjayB0byB0aGUgcGFzc3dvcmQgZmllbGQuXG4gICAgaWYgKG5leHQucGFzc3dvcmRIb2xkPy5yZWxlYXNlZCAmJiAhcHJldmlvdXMucGFzc3dvcmRIb2xkPy5yZWxlYXNlZCkgdGhpcy5wcmVwYXJlZEZhY3Rvci5zZXQobnVsbCk7XG4gICAgLy8gQSBwcmVwYXJlZCBmYWN0b3IgYmVsb25ncyB0byB0aGUgZmlyc3QtZmFjdG9yIHN0ZXAgaXQgd2FzIHNlbnQgZm9yLlxuICAgIGlmIChuZXh0LmF0dGVtcHQ/LnN0YXR1cyAhPT0gJ25lZWRzX2ZpcnN0X2ZhY3RvcicpIHRoaXMucHJlcGFyZWRGYWN0b3Iuc2V0KG51bGwpO1xuICAgIC8vIEFuIGVtYWlsZWQgc2Vjb25kLWZhY3RvciBjb2RlIGJlbG9uZ3MgdG8gdGhlIHNlY29uZC1mYWN0b3Igc3RlcCBvZiB0aGlzIGF0dGVtcHQuXG4gICAgaWYgKG5leHQuYXR0ZW1wdD8uc3RhdHVzICE9PSAnbmVlZHNfc2Vjb25kX2ZhY3RvcicgfHwgKG5leHQuYXR0ZW1wdD8uaWQgPz8gbnVsbCkgIT09IHByZXZpb3VzSWQpIHtcbiAgICAgIHRoaXMuZW1haWxTZWNvbmRGYWN0b3Iuc2V0KG51bGwpO1xuICAgICAgdGhpcy5zbXNTZWNvbmRGYWN0b3Iuc2V0KG51bGwpO1xuICAgIH1cbiAgICB0aGlzLnN5bmNDYXB0Y2hhKCk7XG4gICAgdGhpcy5zeW5jRW5yb2xsbWVudCgpO1xuICAgIHRoaXMuYXV0b1NlbmQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXV0b1NlbnRGb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAvKipcbiAgICogV2l0aCBubyBwYXNzd29yZCBvbiBvZmZlciwgZW1haWwgdGhlIGNvZGUgYXMgc29vbiBhcyB0aGUgc2VydmVyIGFza3MgZm9yIGFcbiAgICogZmlyc3QgZmFjdG9yIOKAlCBvbmNlIHBlciBhdHRlbXB0LCBzbyBhIGZhaWxlZCBzZW5kIHdhaXRzIGZvciB0aGUgdXNlcidzIHJldHJ5XG4gICAqICh0aGUgXCJFbWFpbCBtZSBhIGNvZGVcIiBidXR0b24pIGluc3RlYWQgb2YgbG9vcGluZy5cbiAgICovXG4gIHByaXZhdGUgYXV0b1NlbmQoKTogdm9pZCB7XG4gICAgY29uc3QgaWQgPSB0aGlzLnN0YXRlKCkuYXR0ZW1wdD8uaWQgPz8gbnVsbDtcbiAgICBpZiAoIWlkIHx8IHRoaXMuYXV0b1NlbnRGb3IgPT09IGlkIHx8IHRoaXMucHJlcGFyZWRGYWN0b3IoKSkgcmV0dXJuO1xuICAgIGlmIChwbGFuRmlyc3RGYWN0b3IodGhpcy5maXJzdEZhY3RvcnMoKSkuYXV0b1NlbmQgIT09ICdlbWFpbF9jb2RlJykgcmV0dXJuO1xuICAgIHRoaXMuYXV0b1NlbnRGb3IgPSBpZDtcbiAgICB2b2lkIHRoaXMucHJlcGFyZSgnZW1haWxfY29kZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkdmFuY2UgdGhlIGZsb3cgd2l0aCB0aGUgdmFsdWVzIHRoZSB1c2VyIHR5cGVkLiBPbiBjb21wbGV0aW9uLCBleGNoYW5nZSB0aGVcbiAgICogb25lLXRpbWUgdGlja2V0IGZvciBjb29raWVzIG92ZXIgYSBzYW1lLW9yaWdpbiByZXF1ZXN0IChGQVBJIGlzIGNyb3NzLW9yaWdpblxuICAgKiBhbmQgY2Fubm90IHNldCB0aGUgY29va2llIG9uIGl0cyBvd24gcmVzcG9uc2UpLCB0aGVuIHJlLWJvb3Qgc28gdGhlIHJlc3Qgb2ZcbiAgICogdGhlIGFwcCBzZWVzIGEgc2lnbmVkLWluIHVzZXIuXG4gICAqL1xuICBhc3luYyBzdWJtaXQodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpO1xuXG4gICAgLy8gQSBjb2RlIHRoYXQgbGlmdHMgYSBwYXNzd29yZCBob2xkIGdvZXMgdG8gaXRzIG93biBhdHRlbXB0LCBub3QgdGhpcyBzaWduLWluLlxuICAgIGlmICh0aGlzLnByZXBhcmVkRmFjdG9yKCkgPT09ICdlbWFpbF9jb2RlJyAmJiB0aGlzLmhvbGRQcm9vZigpID09PSAnZW1haWxfY29kZScpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoYXdhaXQgYXR0ZW1wdFBhc3N3b3JkSG9sZFByb29mKHRoaXMuY2xpZW50LCB0aGlzLnN0YXRlKCksIHZhbHVlcy5jb2RlID8/ICcnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG91dCA9IGF3YWl0IGFkdmFuY2VXaXRoQ2FwdGNoYSh0aGlzLmNsaWVudCwgdGhpcy5zdGF0ZSgpLCB2YWx1ZXMsIHtcbiAgICAgIGNhcHRjaGE6IHRoaXMuY2FwdGNoYSxcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIHQ6IHRoaXMudCxcbiAgICB9KTtcbiAgICB0aGlzLmlkZW50aWZpZXIgPSBvdXQuaWRlbnRpZmllcjtcbiAgICBhd2FpdCB0aGlzLmZpbmlzaChvdXQuc3RhdGUpO1xuICB9XG5cbiAgLyoqIExvYWQgdGhlIHNpZ24tdXAncyBwb2xpY2llcyBpbnRvIHtAbGluayBwb2xpY2llc30gKGA8YXRsYXMtc2lnbi11cD5gIGNhbGxzIGl0IG9uIGluaXQpLiAqL1xuICBhc3luYyBsb2FkUG9saWNpZXMobG9jYWxlPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wb2xpY2llcy5zZXRQb2xpY2llcyhhd2FpdCBsb2FkUG9saWNpZXModGhpcy5jbGllbnQsIHsgbG9jYWxlIH0pKTtcbiAgfVxuXG4gIC8qKiBUaGUgdXNlciBkZWNsaW5lZCBhIHBvbGljeSBhIHNpZ24taW4gd2FzIHdhaXRpbmcgb246IGNhbmNlbCB0aGUgYXR0ZW1wdCBhbmQgc2F5IHdoeS4gKi9cbiAgZGVjbGluZVBvbGljeSh0aXRsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZS5zZXQoe1xuICAgICAgLi4uaW5pdGlhbEZsb3csXG4gICAgICBlcnJvcnM6IFt7IGNvZGU6ICdQT0xJQ1lfREVDTElORUQnLCBtZXNzYWdlOiB0aGlzLnQoJ3BvbGljeS5kZWNsaW5lZCcpLnJlcGxhY2UoJ3twb2xpY3l9JywgdGl0bGUpIH1dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhY2NvdW50IChgUE9TVCAvdjEvY2xpZW50L3NpZ25fdXBzYCkgZnJvbSBhIGNyZWF0ZS1hY2NvdW50IGZvcm0nc1xuICAgKiB2YWx1ZXMg4oCUIGVtYWlsLCBwYXNzd29yZCBhbmQgYW55IGNvbmZpZ3VyZWQgc2lnbi11cCBmaWVsZHMg4oCUIGNhcnJ5aW5nIHRoZVxuICAgKiBzaWduLXVwIGNhcHRjaGEncyB0b2tlbiB3aGVuIHRoZSBpbnN0YW5jZSByZXF1aXJlcyBvbmUuIFRoZSBlbWFpbGVkIGNvZGUgaXNcbiAgICogdGhlbiBwb3N0ZWQgd2l0aCB7QGxpbmsgc3VibWl0fS5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZSh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGNvbnNlbnQgPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpO1xuICAgIGNvbnN0IG5leHQgPSBhd2FpdCBjcmVhdGVTaWduVXAodGhpcy5jbGllbnQsIHZhbHVlcywge1xuICAgICAgY29uc2VudCxcbiAgICAgIGNhcHRjaGE6IHRoaXMuc2lnblVwQ2FwdGNoYSxcbiAgICAgIHQ6IHRoaXMudCxcbiAgICAgIHBvbGljaWVzOiB0aGlzLnBvbGljaWVzLFxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMuZmluaXNoKG5leHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiRW1haWwgbWUgYSBjb2RlIGluc3RlYWRcIiBhdCB0aGUgc2Vjb25kIGZhY3RvciAodGhlIGluc3RhbmNlJ3NcbiAgICogYGFjY291bnQuZW1haWxTZWNvbmRGYWN0b3JgKTogbWFpbHMgYSBjb2RlIHRvIHRoZSBhY2NvdW50J3MgdmVyaWZpZWQgZW1haWw7XG4gICAqIGl0IGlzIHRoZW4gcG9zdGVkIHdpdGgge0BsaW5rIHN1Ym1pdH0gbGlrZSBhbnkgMkZBIGNvZGUuXG4gICAqL1xuICBhc3luYyBzZW5kRW1haWxTZWNvbmRGYWN0b3IoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZW5kU2Vjb25kRmFjdG9yQ29kZSgnZW1haWxfY29kZScsIHRoaXMuZW1haWxTZWNvbmRGYWN0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFwiVGV4dCBtZSBhIGNvZGUgaW5zdGVhZFwiIGF0IHRoZSBzZWNvbmQgZmFjdG9yICh3aGVyZSB0aGUgYXBwIG9mZmVycyB0ZXh0ZWRcbiAgICogY29kZXMsIHtAbGluayBtZmFDaG9pY2VzfWAoKS5zbXNgKTogdGV4dHMgYSBjb2RlIHRvIHRoZSBhY2NvdW50J3MgZW5yb2xsZWRcbiAgICogcGhvbmU7IGl0IGlzIHRoZW4gcG9zdGVkIHdpdGgge0BsaW5rIHN1Ym1pdH0gbGlrZSBhbnkgMkZBIGNvZGUuXG4gICAqL1xuICBhc3luYyBzZW5kU21zU2Vjb25kRmFjdG9yKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZFNlY29uZEZhY3RvckNvZGUoJ3NtcycsIHRoaXMuc21zU2Vjb25kRmFjdG9yKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZFNlY29uZEZhY3RvckNvZGUoXG4gICAgc3RyYXRlZ3k6ICdzbXMnIHwgJ2VtYWlsX2NvZGUnLFxuICAgIG91dDogV3JpdGFibGVTaWduYWw8eyBidXN5PzogYm9vbGVhbjsgc2VudFRvPzogc3RyaW5nOyBlcnJvcj86IHN0cmluZyB9IHwgbnVsbD4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5zdGF0ZSgpLmF0dGVtcHQ/LmlkO1xuICAgIGlmICghaWQpIHJldHVybjtcbiAgICBvdXQuc2V0KHsgYnVzeTogdHJ1ZSB9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBzZW50VG8gfSA9IGF3YWl0IHByZXBhcmVTZWNvbmRGYWN0b3JDb2RlKHRoaXMuY2xpZW50LCBpZCwgc3RyYXRlZ3kpO1xuICAgICAgb3V0LnNldCh7IHNlbnRUbyB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb3V0LnNldCh7IGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IHRoaXMudCgnZXJyb3IuZ2VuZXJpYycpIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXNlbmQgYSBzaWduLXVwJ3MgZW1haWxlZCBjb2RlIC8gbGluayAodGhlIGVhcmxpZXIgb25lIHN0b3BzIHdvcmtpbmcpLiAqL1xuICBhc3luYyByZXNlbmRTaWduVXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpO1xuICAgIHRoaXMuc3RhdGUuc2V0KGF3YWl0IHJlc2VuZFNpZ25VcFZlcmlmaWNhdGlvbih0aGlzLmNsaWVudCwgdGhpcy5zdGF0ZSgpKSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSBwYXNza2V5LW9ubHkgc2lnbi11cCAoYFBPU1QgL3YxL2NsaWVudC9zaWduX3Vwcy9wYXNza2V5YCkgZnJvbSB0aGVcbiAgICogY3JlYXRlLWFjY291bnQgZm9ybSdzIHZhbHVlcyDigJQgbm8gcGFzc3dvcmQuIE9mZmVyZWQgd2hlbiB0aGUgaW5zdGFuY2Unc1xuICAgKiBgYWNjb3VudC5wYXNza2V5U2lnblVwYCBpcyBzZXQuXG4gICAqL1xuICBhc3luYyBjcmVhdGVXaXRoUGFzc2tleSh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGNvbnNlbnQgPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpO1xuICAgIGF3YWl0IHRoaXMuZmluaXNoKGF3YWl0IGNyZWF0ZVBhc3NrZXlTaWduVXAodGhpcy5jbGllbnQsIHZhbHVlcywgeyBjb25zZW50LCBjYXB0Y2hhOiB0aGlzLnNpZ25VcENhcHRjaGEsIHQ6IHRoaXMudCwgcG9saWNpZXM6IHRoaXMucG9saWNpZXMgfSkpO1xuICB9XG5cbiAgLyoqIFRoZSBwYXNza2V5LW9ubHkgc2lnbi11cCdzIGxhc3Qgc3RlcDogY3JlYXRlIHRoZSBwYXNza2V5LCBhbmQgd2l0aCBpdCB0aGUgYWNjb3VudC4gKi9cbiAgYXN5bmMgY3JlYXRlUGFzc2tleSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgYnVzeTogdHJ1ZSwgZXJyb3JzOiBbXSB9KSk7XG4gICAgYXdhaXQgdGhpcy5maW5pc2goYXdhaXQgZmluaXNoUGFzc2tleVNpZ25VcCh0aGlzLmNsaWVudCwgdGhpcy5zdGF0ZSgpLCB7IHQ6IHRoaXMudCB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlY292ZXJ5IGNvZGVzIGFuIE1GQSBlbnJvbG1lbnQganVzdCBjb21wbGV0ZWQgdGhlIHNpZ24taW4gd2l0aCwgc2hvd25cbiAgICogb25jZSBiZWZvcmUgaXQgZmluaXNoZXMgKHtAbGluayBzYXZlUmVjb3ZlcnlDb2Rlc30pOyBudWxsIG90aGVyd2lzZS4gVGhleVxuICAgKiBsaXZlIG9ubHkgaW4gdGhpcyBjb250cm9sbGVyJ3MgbWVtb3J5LlxuICAgKi9cbiAgcmVjb3ZlcnlDb2RlcygpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgIHJldHVybiBwZW5kaW5nUmVjb3ZlcnlDb2Rlcyh0aGlzLnN0YXRlKCkpO1xuICB9XG5cbiAgLyoqIFwiSSd2ZSBzYXZlZCBteSBjb2Rlc1wiOiBmb3JnZXQgdGhlIHJlY292ZXJ5IGNvZGVzIGFuZCBmaW5pc2ggdGhlIHNpZ24taW4uICovXG4gIGFzeW5jIHNhdmVSZWNvdmVyeUNvZGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZmluaXNoKGFja25vd2xlZGdlUmVjb3ZlcnlDb2Rlcyh0aGlzLnN0YXRlKCkpKTtcbiAgfVxuXG4gIC8qKiBUaGUgYWRkcmVzcyBiZWxvbmdlZCB0byBhbiBleGlzdGluZyBhY2NvdW50OiB0aGUgbm90aWNlIGlzIHVwIHVudGlsIHtAbGluayBjb250aW51ZUFmdGVyRXhpc3RpbmdBY2NvdW50fS4gKi9cbiAgZXhpc3RpbmdBY2NvdW50Tm90aWNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwZW5kaW5nRXhpc3RpbmdBY2NvdW50Tm90aWNlKHRoaXMuc3RhdGUoKSk7XG4gIH1cblxuICAvKiogVGhlIHVzZXIgcmVhZCB0aGUgbm90aWNlOiBmaW5pc2ggdGhlIHNpZ24tdXAuICovXG4gIGFzeW5jIGNvbnRpbnVlQWZ0ZXJFeGlzdGluZ0FjY291bnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5maW5pc2goYWNrbm93bGVkZ2VFeGlzdGluZ0FjY291bnQodGhpcy5zdGF0ZSgpKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmlzaChuZXh0OiBGbG93U3RhdGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBbiBlbnJvbG1lbnQncyByZWNvdmVyeSBjb2RlcyBhcmUgc2hvd24gZmlyc3Q7IGBzYXZlUmVjb3ZlcnlDb2Rlc2AgZmluaXNoZXMuXG4gICAgaWYgKHBlbmRpbmdSZWNvdmVyeUNvZGVzKG5leHQpKSB7XG4gICAgICAvLyBUaGUgdGlja2V0IGRpZXMgaW4gNjAgc2Vjb25kcyBhbmQgc2F2aW5nIHRoZSBjb2RlcyBjYW4gdGFrZSBsb25nZXI6IHJlZGVlbSBpdCBub3csXG4gICAgICAvLyBhbmQgYHNhdmVSZWNvdmVyeUNvZGVzYCBmaW5pc2hlcy4gQSByZWZ1c2VkIGV4Y2hhbmdlIGtlZXBzIHRoZSB0aWNrZXQsIHNvIHRoZSBzYXZlIHJlcG9ydHMgaXQuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgLi4ubmV4dCwgYnVzeTogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IHJlcyA9IG5leHQudGlja2V0XG4gICAgICAgID8gYXdhaXQgdGhpcy5jbGllbnQucG9zdCgnL3YxL2NsaWVudC90aWNrZXRzL2V4Y2hhbmdlJywgeyBhdHRlbXB0X2lkOiAobmV4dC5hdHRlbXB0IGFzIHsgaWQ/OiBzdHJpbmcgfSkuaWQsIHRpY2tldDogbmV4dC50aWNrZXQgfSlcbiAgICAgICAgOiBudWxsO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IC4uLm5leHQsIGJ1c3k6IGZhbHNlLCB0aWNrZXQ6IHJlcz8ub2sgPyBudWxsIDogbmV4dC50aWNrZXQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuZXh0LmF0dGVtcHQ/LnN0YXR1cyA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgLy8gU3RheXMgYnVzeSB1bnRpbCB0aGlzIGJyb3dzZXIgYWN0dWFsbHkgaG9sZHMgdGhlIHNlc3Npb246IHRoZSBjb21wbGV0aW9uXG4gICAgICAvLyBhbG9uZSBzYXlzIG5vdGhpbmcgYWJvdXQgd2hldGhlciB0aGUgY29va2llIHdhcyBrZXB0LlxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IC4uLm5leHQsIGJ1c3k6IHRydWUgfSk7XG4gICAgICBsZXQgZXhjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIGlmIChuZXh0LnRpY2tldCkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0KCcvdjEvY2xpZW50L3RpY2tldHMvZXhjaGFuZ2UnLCB7XG4gICAgICAgICAgYXR0ZW1wdF9pZDogKG5leHQuYXR0ZW1wdCBhcyB7IGlkPzogc3RyaW5nIH0pLmlkLFxuICAgICAgICAgIHRpY2tldDogbmV4dC50aWNrZXQsXG4gICAgICAgIH0pO1xuICAgICAgICBleGNoYW5nZWQgPSByZXMub2s7XG4gICAgICB9XG4gICAgICBpZiAoZXhjaGFuZ2VkICYmIHRoaXMuaG9sZEV4aXN0aW5nQWNjb3VudE5vdGljZSAmJiBwZW5kaW5nRXhpc3RpbmdBY2NvdW50Tm90aWNlKG5leHQpKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyAuLi5uZXh0LCB0aWNrZXQ6IG51bGwsIGJ1c3k6IGZhbHNlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBrZXB0ID0gZXhjaGFuZ2VkICYmIChhd2FpdCB0aGlzLnJlbG9hZCgpKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyAuLi5uZXh0LCBidXN5OiBmYWxzZSwgc2Vzc2lvbktlcHQ6IGtlcHQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV4dCk7XG4gICAgICAvLyBBIG1hZ2ljLWxpbmsgc3RlcCBtYXkgbm93IGJlIHBvbGxhYmxlIChhIGxpbmsgb3BlbmVkIG9uIGFub3RoZXIgZGV2aWNlKS5cbiAgICAgIHRoaXMuc3luY1BvbGxpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKiogU3RhcnQvc3RvcCB0aGUgwqc1LjMgbWFnaWMtbGluayBwb2xsIHRvIG1hdGNoIHRoZSBjdXJyZW50IHN0YXRlLiAqL1xuICBzeW5jUG9sbGluZygpOiB2b2lkIHtcbiAgICBpZiAoc2hvdWxkS2VlcFBvbGxpbmcodGhpcy5zdGF0ZSgpKSkge1xuICAgICAgdGhpcy5zdGFydFBvbGxpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9wUG9sbGluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRQb2xsaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBvbGxUaW1lcikgcmV0dXJuO1xuICAgIHRoaXMucG9sbFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0YXRlOiBuZXh0LCB0aWNrZXQgfSA9IGF3YWl0IHBvbGxBdHRlbXB0KHRoaXMuY2xpZW50LCB0aGlzLnN0YXRlKCkpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKG5leHQpO1xuICAgICAgICAvLyBlLmcuIGEgcGFzc2tleSBzaWduLXVwIHdob3NlIGVtYWlsIHdhcyBqdXN0IHByb3Zlbjogb25seSB0aGlzIHRhYiBjYW4gZ28gb24uXG4gICAgICAgIGlmICghdGlja2V0ICYmICFzaG91bGRLZWVwUG9sbGluZyhuZXh0KSkgdGhpcy5zdG9wUG9sbGluZygpO1xuICAgICAgICBpZiAoIXRpY2tldCB8fCAhbmV4dC5hdHRlbXB0KSByZXR1cm47XG5cbiAgICAgICAgLy8gVGhlIHRpY2tldCBpcyBleGNoYW5nZWQgYnkgYSBub3JtYWwgcmVxdWVzdCwgc28gbm8gc2Vzc2lvbiB0b2tlbiBldmVyXG4gICAgICAgIC8vIGFwcGVhcnMgaW4gYSBVUkwuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3QoJy92MS9jbGllbnQvdGlja2V0cy9leGNoYW5nZScsIHtcbiAgICAgICAgICBhdHRlbXB0X2lkOiAobmV4dC5hdHRlbXB0IGFzIHsgaWQ/OiBzdHJpbmcgfSkuaWQsXG4gICAgICAgICAgdGlja2V0LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qga2VwdCA9IHJlcy5vayAmJiAoYXdhaXQgdGhpcy5yZWxvYWQoKSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyAuLi50aGlzLnN0YXRlKCksIHNlc3Npb25LZXB0OiBrZXB0IH0pO1xuICAgICAgICB0aGlzLnN0b3BQb2xsaW5nKCk7XG4gICAgICB9KSgpO1xuICAgIH0sIDJfMDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFBvbGxpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucG9sbFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucG9sbFRpbWVyKTtcbiAgICAgIHRoaXMucG9sbFRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogUmVsZWFzZSB0aGUgcG9sbCB0aW1lciBhbmQgdGhlIGNhcHRjaGEgd2lkZ2V0cyDigJQgY2FsbCBmcm9tIHRoZSBjb21wb25lbnQncyBgbmdPbkRlc3Ryb3lgLiAqL1xuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucGFzc2tleS5zdG9wQXV0b2ZpbGwoKTtcbiAgICB0aGlzLnN0b3BQb2xsaW5nKCk7XG4gICAgdGhpcy5jYXB0Y2hhLmRlc3Ryb3koKTtcbiAgICB0aGlzLnNpZ25VcENhcHRjaGEuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
|