UNPKG

ngx-extended-pdf-viewer

Version:

Embedding PDF files in your Angular application. Highly configurable viewer including the toolbar, sidebar, and all the features you're used to.

155 lines 13 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { NgxExtendedPdfViewerComponent } from './ngx-extended-pdf-viewer.component'; import { NgxExtendedPdfViewerService } from './ngx-extended-pdf-viewer.service'; /** * @param {?} cmd * @param {?} keycode * @return {?} */ function isKeyIgnored(cmd, keycode) { if (keycode === 16 || keycode === 17 || keycode === 18 || keycode === 224) { // ignore solitary SHIFT, ALT, CMD, and CTRL because they only make sense as two-key-combinations return true; } // cmd is a bit-array: // 1 == CTRL // 2 == ALT // 4 == SHIFT // 8 == META /** @type {?} */ const options = ((/** @type {?} */ (window))).PDFViewerApplicationOptions; /** @type {?} */ const ignoreKeyboard = options.get('ignoreKeyboard'); if (!!ignoreKeyboard) { return true; } /** @type {?} */ const ignoreKeys = options.get('ignoreKeys'); if (!!ignoreKeys && ignoreKeys.length > 0) { if (isKeyInList(ignoreKeys, cmd, keycode)) { return true; } } /** @type {?} */ const acceptKeys = options.get('acceptKeys'); if (!!acceptKeys && acceptKeys.length > 0) { return !isKeyInList(acceptKeys, cmd, keycode); } return false; } /** * @param {?} settings * @param {?} cmd * @param {?} keycode * @return {?} */ function isKeyInList(settings, cmd, keycode) { return settings.some((/** * @param {?} keyDef * @return {?} */ keyDef => isKey(keyDef, cmd, keycode))); } /** * @param {?} keyDef * @param {?} cmd * @param {?} keycode * @return {?} */ function isKey(keyDef, cmd, keycode) { /** @type {?} */ let cmdDef = 0; /** @type {?} */ let key = 0; keyDef = keyDef.toLowerCase(); // tslint:disable: no-bitwise if (keyDef.includes('ctrl+')) { cmdDef |= 1; keyDef = keyDef.replace('ctrl+', ''); } if (keyDef.includes('cmd+')) { cmdDef |= 8; keyDef = keyDef.replace('cmd+', ''); } if (keyDef.includes('alt+')) { cmdDef |= 2; keyDef = keyDef.replace('alt+', ''); } if (keyDef.includes('shift+')) { cmdDef |= 4; keyDef = keyDef.replace('shift+', ''); } if (keyDef.includes('meta+')) { cmdDef |= 8; keyDef = keyDef.replace('meta+', ''); } if (keyDef === 'up') { key = 38; } else if (keyDef === 'down') { key = 40; } else if (keyDef === '+' || keyDef === '"+"') { key = 171; } else if (keyDef === '-' || keyDef === '"-"') { key = 173; } else if (keyDef === 'esc') { key = 27; } else if (keyDef === 'enter') { key = 13; } else if (keyDef === 'space') { key = 32; } else if (keyDef === 'f4') { key = 115; } else if (keyDef === 'backspace') { key = 8; } else if (keyDef === 'home') { key = 36; } else if (keyDef === 'end') { key = 35; } else if (keyDef === 'left') { key = 37; } else if (keyDef === 'right') { key = 39; } else if (keyDef === 'pagedown') { key = 34; } else if (keyDef === 'pageup') { key = 33; } else { key = keyDef.toUpperCase().charCodeAt(0); } return key === keycode && cmd === cmdDef; } ((/** @type {?} */ (window))).isKeyIgnored = isKeyIgnored; export class NgxExtendedPdfViewerModule { constructor() { } } NgxExtendedPdfViewerModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule], declarations: [NgxExtendedPdfViewerComponent], providers: [NgxExtendedPdfViewerService], exports: [NgxExtendedPdfViewerComponent] },] } ]; /** @nocollapse */ NgxExtendedPdfViewerModule.ctorParameters = () => []; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWV4dGVuZGVkLXBkZi12aWV3ZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWV4dGVuZGVkLXBkZi12aWV3ZXIvIiwic291cmNlcyI6WyJsaWIvbmd4LWV4dGVuZGVkLXBkZi12aWV3ZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7O0FBRWhGLFNBQVMsWUFBWSxDQUFDLEdBQVcsRUFBRSxPQUFlO0lBQ2hELElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxPQUFPLEtBQUssRUFBRSxJQUFJLE9BQU8sS0FBSyxFQUFFLElBQUksT0FBTyxLQUFLLEdBQUcsRUFBRTtRQUN6RSxpR0FBaUc7UUFDakcsT0FBTyxJQUFJLENBQUM7S0FDYjs7Ozs7OztVQU1LLE9BQU8sR0FBRyxDQUFDLG1CQUFBLE1BQU0sRUFBTyxDQUFDLENBQUMsMkJBQTJCOztVQUNyRCxjQUFjLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztJQUNwRCxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUU7UUFDcEIsT0FBTyxJQUFJLENBQUM7S0FDYjs7VUFFSyxVQUFVLEdBQWtCLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO0lBQzNELElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN6QyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ3pDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7S0FDRjs7VUFFSyxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7SUFDNUMsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3pDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztLQUMvQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQzs7Ozs7OztBQUVELFNBQVMsV0FBVyxDQUFDLFFBQXVCLEVBQUUsR0FBVyxFQUFFLE9BQWU7SUFDeEUsT0FBTyxRQUFRLENBQUMsSUFBSTs7OztJQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUMsQ0FBQztBQUM5RCxDQUFDOzs7Ozs7O0FBRUQsU0FBUyxLQUFLLENBQUMsTUFBYyxFQUFFLEdBQVcsRUFBRSxPQUFlOztRQUNyRCxNQUFNLEdBQUcsQ0FBQzs7UUFDVixHQUFHLEdBQUcsQ0FBQztJQUNYLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsNkJBQTZCO0lBQzdCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUM1QixNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ1osTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ3RDO0lBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzNCLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDWixNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDckM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDM0IsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNaLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNyQztJQUNELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUM3QixNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ1osTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZDO0lBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzVCLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDWixNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDdEM7SUFFRCxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7UUFDbkIsR0FBRyxHQUFHLEVBQUUsQ0FBQztLQUNWO1NBQU0sSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFO1FBQzVCLEdBQUcsR0FBRyxFQUFFLENBQUM7S0FDVjtTQUFNLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFO1FBQzdDLEdBQUcsR0FBRyxHQUFHLENBQUM7S0FDWDtTQUFNLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFO1FBQzdDLEdBQUcsR0FBRyxHQUFHLENBQUM7S0FDWDtTQUFNLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTtRQUMzQixHQUFHLEdBQUcsRUFBRSxDQUFDO0tBQ1Y7U0FBTSxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7UUFDN0IsR0FBRyxHQUFHLEVBQUUsQ0FBQztLQUNWO1NBQU0sSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFO1FBQzdCLEdBQUcsR0FBRyxFQUFFLENBQUM7S0FDVjtTQUFNLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtRQUMxQixHQUFHLEdBQUcsR0FBRyxDQUFDO0tBQ1g7U0FBTSxJQUFJLE1BQU0sS0FBSyxXQUFXLEVBQUU7UUFDakMsR0FBRyxHQUFHLENBQUMsQ0FBQztLQUNUO1NBQU0sSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFO1FBQzVCLEdBQUcsR0FBRyxFQUFFLENBQUM7S0FDVjtTQUFNLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTtRQUMzQixHQUFHLEdBQUcsRUFBRSxDQUFDO0tBQ1Y7U0FBTSxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUU7UUFDNUIsR0FBRyxHQUFHLEVBQUUsQ0FBQztLQUNWO1NBQU0sSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFO1FBQzdCLEdBQUcsR0FBRyxFQUFFLENBQUM7S0FDVjtTQUFNLElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRTtRQUNoQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0tBQ1Y7U0FBTSxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDOUIsR0FBRyxHQUFHLEVBQUUsQ0FBQztLQUNWO1NBQU07UUFDTCxHQUFHLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMxQztJQUNELE9BQU8sR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEtBQUssTUFBTSxDQUFDO0FBQzNDLENBQUM7QUFFRCxDQUFDLG1CQUFBLE1BQU0sRUFBTyxDQUFDLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQVE1QyxNQUFNLE9BQU8sMEJBQTBCO0lBQ3JDLGdCQUFlLENBQUM7OztZQVBqQixRQUFRLFNBQUM7Z0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2dCQUN2QixZQUFZLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztnQkFDN0MsU0FBUyxFQUFFLENBQUMsMkJBQTJCLENBQUM7Z0JBQ3hDLE9BQU8sRUFBRSxDQUFDLDZCQUE2QixDQUFDO2FBQ3pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ3hFeHRlbmRlZFBkZlZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4vbmd4LWV4dGVuZGVkLXBkZi12aWV3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE5neEV4dGVuZGVkUGRmVmlld2VyU2VydmljZSB9IGZyb20gJy4vbmd4LWV4dGVuZGVkLXBkZi12aWV3ZXIuc2VydmljZSc7XG5cbmZ1bmN0aW9uIGlzS2V5SWdub3JlZChjbWQ6IG51bWJlciwga2V5Y29kZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGlmIChrZXljb2RlID09PSAxNiB8fCBrZXljb2RlID09PSAxNyB8fCBrZXljb2RlID09PSAxOCB8fCBrZXljb2RlID09PSAyMjQpIHtcbiAgICAvLyBpZ25vcmUgc29saXRhcnkgU0hJRlQsIEFMVCwgQ01ELCBhbmQgQ1RSTCBiZWNhdXNlIHRoZXkgb25seSBtYWtlIHNlbnNlIGFzIHR3by1rZXktY29tYmluYXRpb25zXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gY21kIGlzIGEgYml0LWFycmF5OlxuICAvLyAxID09IENUUkxcbiAgLy8gMiA9PSBBTFRcbiAgLy8gNCA9PSBTSElGVFxuICAvLyA4ID09IE1FVEFcbiAgY29uc3Qgb3B0aW9ucyA9ICh3aW5kb3cgYXMgYW55KS5QREZWaWV3ZXJBcHBsaWNhdGlvbk9wdGlvbnM7XG4gIGNvbnN0IGlnbm9yZUtleWJvYXJkID0gb3B0aW9ucy5nZXQoJ2lnbm9yZUtleWJvYXJkJyk7XG4gIGlmICghIWlnbm9yZUtleWJvYXJkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBpZ25vcmVLZXlzOiBBcnJheTxzdHJpbmc+ID0gb3B0aW9ucy5nZXQoJ2lnbm9yZUtleXMnKTtcbiAgaWYgKCEhaWdub3JlS2V5cyAmJiBpZ25vcmVLZXlzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoaXNLZXlJbkxpc3QoaWdub3JlS2V5cywgY21kLCBrZXljb2RlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYWNjZXB0S2V5cyA9IG9wdGlvbnMuZ2V0KCdhY2NlcHRLZXlzJyk7XG4gIGlmICghIWFjY2VwdEtleXMgJiYgYWNjZXB0S2V5cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuICFpc0tleUluTGlzdChhY2NlcHRLZXlzLCBjbWQsIGtleWNvZGUpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0tleUluTGlzdChzZXR0aW5nczogQXJyYXk8c3RyaW5nPiwgY21kOiBudW1iZXIsIGtleWNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gc2V0dGluZ3Muc29tZShrZXlEZWYgPT4gaXNLZXkoa2V5RGVmLCBjbWQsIGtleWNvZGUpKTtcbn1cblxuZnVuY3Rpb24gaXNLZXkoa2V5RGVmOiBzdHJpbmcsIGNtZDogbnVtYmVyLCBrZXljb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgbGV0IGNtZERlZiA9IDA7XG4gIGxldCBrZXkgPSAwO1xuICBrZXlEZWYgPSBrZXlEZWYudG9Mb3dlckNhc2UoKTtcbiAgLy8gdHNsaW50OmRpc2FibGU6IG5vLWJpdHdpc2VcbiAgaWYgKGtleURlZi5pbmNsdWRlcygnY3RybCsnKSkge1xuICAgIGNtZERlZiB8PSAxO1xuICAgIGtleURlZiA9IGtleURlZi5yZXBsYWNlKCdjdHJsKycsICcnKTtcbiAgfVxuICBpZiAoa2V5RGVmLmluY2x1ZGVzKCdjbWQrJykpIHtcbiAgICBjbWREZWYgfD0gODtcbiAgICBrZXlEZWYgPSBrZXlEZWYucmVwbGFjZSgnY21kKycsICcnKTtcbiAgfVxuICBpZiAoa2V5RGVmLmluY2x1ZGVzKCdhbHQrJykpIHtcbiAgICBjbWREZWYgfD0gMjtcbiAgICBrZXlEZWYgPSBrZXlEZWYucmVwbGFjZSgnYWx0KycsICcnKTtcbiAgfVxuICBpZiAoa2V5RGVmLmluY2x1ZGVzKCdzaGlmdCsnKSkge1xuICAgIGNtZERlZiB8PSA0O1xuICAgIGtleURlZiA9IGtleURlZi5yZXBsYWNlKCdzaGlmdCsnLCAnJyk7XG4gIH1cbiAgaWYgKGtleURlZi5pbmNsdWRlcygnbWV0YSsnKSkge1xuICAgIGNtZERlZiB8PSA4O1xuICAgIGtleURlZiA9IGtleURlZi5yZXBsYWNlKCdtZXRhKycsICcnKTtcbiAgfVxuXG4gIGlmIChrZXlEZWYgPT09ICd1cCcpIHtcbiAgICBrZXkgPSAzODtcbiAgfSBlbHNlIGlmIChrZXlEZWYgPT09ICdkb3duJykge1xuICAgIGtleSA9IDQwO1xuICB9IGVsc2UgaWYgKGtleURlZiA9PT0gJysnIHx8IGtleURlZiA9PT0gJ1wiK1wiJykge1xuICAgIGtleSA9IDE3MTtcbiAgfSBlbHNlIGlmIChrZXlEZWYgPT09ICctJyB8fCBrZXlEZWYgPT09ICdcIi1cIicpIHtcbiAgICBrZXkgPSAxNzM7XG4gIH0gZWxzZSBpZiAoa2V5RGVmID09PSAnZXNjJykge1xuICAgIGtleSA9IDI3O1xuICB9IGVsc2UgaWYgKGtleURlZiA9PT0gJ2VudGVyJykge1xuICAgIGtleSA9IDEzO1xuICB9IGVsc2UgaWYgKGtleURlZiA9PT0gJ3NwYWNlJykge1xuICAgIGtleSA9IDMyO1xuICB9IGVsc2UgaWYgKGtleURlZiA9PT0gJ2Y0Jykge1xuICAgIGtleSA9IDExNTtcbiAgfSBlbHNlIGlmIChrZXlEZWYgPT09ICdiYWNrc3BhY2UnKSB7XG4gICAga2V5ID0gODtcbiAgfSBlbHNlIGlmIChrZXlEZWYgPT09ICdob21lJykge1xuICAgIGtleSA9IDM2O1xuICB9IGVsc2UgaWYgKGtleURlZiA9PT0gJ2VuZCcpIHtcbiAgICBrZXkgPSAzNTtcbiAgfSBlbHNlIGlmIChrZXlEZWYgPT09ICdsZWZ0Jykge1xuICAgIGtleSA9IDM3O1xuICB9IGVsc2UgaWYgKGtleURlZiA9PT0gJ3JpZ2h0Jykge1xuICAgIGtleSA9IDM5O1xuICB9IGVsc2UgaWYgKGtleURlZiA9PT0gJ3BhZ2Vkb3duJykge1xuICAgIGtleSA9IDM0O1xuICB9IGVsc2UgaWYgKGtleURlZiA9PT0gJ3BhZ2V1cCcpIHtcbiAgICBrZXkgPSAzMztcbiAgfSBlbHNlIHtcbiAgICBrZXkgPSBrZXlEZWYudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApO1xuICB9XG4gIHJldHVybiBrZXkgPT09IGtleWNvZGUgJiYgY21kID09PSBjbWREZWY7XG59XG5cbih3aW5kb3cgYXMgYW55KS5pc0tleUlnbm9yZWQgPSBpc0tleUlnbm9yZWQ7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBkZWNsYXJhdGlvbnM6IFtOZ3hFeHRlbmRlZFBkZlZpZXdlckNvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW05neEV4dGVuZGVkUGRmVmlld2VyU2VydmljZV0sXG4gIGV4cG9ydHM6IFtOZ3hFeHRlbmRlZFBkZlZpZXdlckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4RXh0ZW5kZWRQZGZWaWV3ZXJNb2R1bGUge1xuICBjb25zdHJ1Y3RvcigpIHt9XG59XG4iXX0=