@byuhbll/components 4.1.0 → 4.1.1

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.
@@ -96,7 +96,7 @@ export class HbllHeaderComponent {
96
96
  }
97
97
  }
98
98
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HbllHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
99
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: HbllHeaderComponent, isStandalone: true, selector: "lib-hbll-header", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: false, isRequired: false, transformFunction: null }, mainsitebaseurl: { classPropertyName: "mainsitebaseurl", publicName: "mainsitebaseurl", isSignal: false, isRequired: false, transformFunction: null }, showImpersonateButton: { classPropertyName: "showImpersonateButton", publicName: "showImpersonateButton", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openImpersonationModal: "openImpersonationModal", login: "login", logout: "logout" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "accountInfoEl", first: true, predicate: ["accountInfo"], descendants: true, isSignal: true }, { propertyName: "hoursEl", first: true, predicate: ["hours"], descendants: true, isSignal: true }, { propertyName: "header", first: true, predicate: ["header"], descendants: true }], ngImport: i0, template: "<header\n role=\"banner\"\n class=\"hbll-header-wrapper\"\n #header\n [ngClass]=\"{ 'hbll-header-desktop': !isScreenSmall() }\"\n>\n <a [href]=\"mainsitebaseurl\">\n <h1>\n <img\n src=\"https://media.lib.byu.edu/web-assets/images/2.0.0/byu-hbll-logo-full.svg\"\n alt=\"BYU Library Logo\"\n />\n </h1>\n </a>\n <button (click)=\"focusMainContent()\" class=\"skip-link\">Skip to main content</button>\n <div id=\"libraryInfo\" class=\"hbll-header-wrapper\">\n @if (!isScreenSmall()) {\n <div #hours id=\"mainLibraryHours\" data-testid=\"desktopHours\">\n <button\n (click)=\"showLibraryHours = !showLibraryHours\"\n class=\"hbll-header-wrapper\"\n data-testid=\"hoursBtn\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </button>\n @if (!isScreenSmall() && showLibraryHours) {\n <div\n @libHbllFadeInOut\n id=\"libraryHoursDropdown\"\n data-testid=\"libraryHoursDropdown\"\n >\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Regular Hours</h2>\n <div class=\"hbll-header-detail\">\n <h3 class=\"hbll-header-item\">Monday - Friday</h3>\n <h3 class=\"hbll-header-item\">Saturday</h3>\n <h3 class=\"hbll-header-item\">Sunday</h3>\n </div>\n <div class=\"hbll-header-hours\">\n <div class=\"hbll-header-item\">7 a.m - midnight**</div>\n <div class=\"hbll-header-item\">8 a.m - midnight**</div>\n <div class=\"hbll-header-item\">Closed*</div>\n </div>\n <div class=\"hbll-header-hours-note\">\n ** Starting September 2nd, regular closing time will be 11:45 p.m.\n </div>\n <div class=\"hbll-header-hours-note\">\n * Family history ONLY 4 p.m. - 8 p.m\n <ul>\n <li><span>No checkouts after 11:45 p.m.</span></li>\n <li>\n <span>All services closed 10:45 to noon on Tuesdays</span>\n </li>\n </ul>\n </div>\n </section>\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Upcoming Exceptions</h2>\n @if (hoursExceptions$ | async; as exceptions) {\n <div class=\"hbll-header-detail\" data-testid=\"exceptionsDetail\">\n @for (exception of exceptions; track exception.date) {\n <h3 class=\"hbll-header-item\">\n {{ exception.date | date: 'MMM. d, YYYY' }}\n </h3>\n } @empty {\n No upcoming exceptions\n }\n </div>\n <div class=\"hbll-header-hours\" data-testid=\"exceptionsHours\">\n @for (exception of exceptions; track exception.date) {\n <div class=\"hbll-header-item\"\n [attr.title]=\"exception.exception_title\"\n [attr.aria-label]=\"exception.exception_title\">\n {{ exception.exception_title | truncate:32:'...' }}\n </div>\n }\n </div>\n } @else {\n <div class=\"lib-spinner\" data-testid=\"exceptionsSpinner\"></div>\n }\n </section>\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Library Cafe</h2>\n <div class=\"hbll-header-detail\">\n <h3 class=\"hbll-header-item\">Bagel Bubble</h3>\n <h3 class=\"hbll-header-item\">Provecho</h3>\n </div>\n <div class=\"hbll-header-hours\">\n <div class=\"hbll-header-item\">7 a.m - 11 p.m.</div>\n <div class=\"hbll-header-item\">10:30 a.m - 2 p.m.</div>\n </div>\n </section>\n <a [href]=\"mainsitebaseurl + '/about/hours'\"\n >See all hours\n <span class=\"material-symbols-outlined\"> chevron_right </span></a\n >\n </div>\n }\n </div>\n }\n <div id=\"accountInfo\" #accountInfo>\n <button\n (click)=\"isLoggedIn ? (showAccountDropdown = !showAccountDropdown) : login.emit()\"\n class=\"hbll-header-wrapper\"\n id=\"accountBtn\"\n data-testid=\"accountBtn\"\n >\n <span class=\"material-symbols-outlined hbll-header-left-icon\"> person </span>\n @if (!isScreenSmall()) {\n <span class=\"hbll-header-name\" data-testid=\"name\">{{\n isLoggedIn ? '&nbsp;' + name : 'Login'\n }}</span>\n }\n @if (isLoggedIn) {\n <span class=\"material-symbols-outlined\" data-testid=\"loginDropdown\">\n arrow_drop_down\n </span>\n }\n </button>\n @if (isLoggedIn && showAccountDropdown) {\n <div @libHbllFadeInOut id=\"accountDropdown\" data-testid=\"accountDropdown\">\n <a [href]=\"mainsitebaseurl + '/account'\">My Account</a>\n <a [href]=\"mainsitebaseurl + '/account'\">My Items</a>\n <a [href]=\"mainsitebaseurl + '/account/request'\">Request an item</a>\n <a [href]=\"mainsitebaseurl + '/account/saved'\">Saved</a>\n <a [href]=\"mainsitebaseurl + '/account/course'\">Courses</a>\n <a [href]=\"mainsitebaseurl + '/account/rooms'\">Rooms</a>\n <a [href]=\"mainsitebaseurl + '/account/preferences'\">Preferences</a>\n @if (showImpersonateButton()) {\n <button\n (click)=\"openImpersonationModal.emit(); showAccountDropdown = false\"\n class=\"hbll-header-impersonate-btn\"\n >\n Impersonate\n </button>\n }\n <button (click)=\"logout.emit()\" data-testid=\"logout\">Logout</button>\n </div>\n }\n </div>\n @if (isScreenSmall()) {\n <div id=\"mobileNav\">\n <button\n class=\"hbll-header-wrapper\"\n data-testid=\"mobileNavBtn\"\n (click)=\"openSidebarNav()\"\n >\n <span class=\"material-symbols-outlined hbll-header-icon\"> menu </span>\n </button>\n @if (showNavBar) {\n <div\n id=\"navWrapper\"\n data-testid=\"mobileNav\"\n [@libHbllSlideInOutRightLeft]=\"{\n value: '',\n params: { xOffset: '400px' },\n }\"\n >\n <button\n id=\"closeMobileNavBtn\"\n class=\"hbll-header-wrapper\"\n data-testid=\"closeMobileNavBtn\"\n (click)=\"closeSidebarNav()\"\n >\n <span class=\"material-symbols-outlined hbll-header-icon\"> close </span>\n </button>\n <lib-nav-bar\n [mainSiteBaseUrl]=\"mainsitebaseurl\"\n [height]=\"mobileSidebarHeight\"\n />\n </div>\n <div\n @libHbllFadeInOut\n (click)=\"showNavBar = false\"\n class=\"hbll-nav-backdrop\"\n data-testid=\"mobileNavBackdrop\"\n ></div>\n }\n </div>\n }\n </div>\n</header>\n\n@if (!isScreenSmall()) {\n <div id=\"mainNav\">\n <lib-nav-bar [mainSiteBaseUrl]=\"mainsitebaseurl\" />\n </div>\n}\n@if (isScreenSmall()) {\n <a\n id=\"mobileLibraryHours\"\n [href]=\"mainsitebaseurl + '/about/hours'\"\n class=\"hbll-header-wrapper\"\n data-testid=\"mobileHours\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </a>\n}\n\n<ng-template #hoursTextBlock>\n @if (libraryHours()) {\n <span class=\"material-symbols-outlined hbll-header-left-icon\"> schedule </span>\n {{\n libraryHours()?.is_closed\n ? 'CLOSED'\n : \"Today's hours: \" +\n (libraryHours()!.date | libraryHours: libraryHours()!.open_time) +\n ' - ' +\n (libraryHours()!.date | libraryHours: libraryHours()!.close_time)\n }}\n }\n</ng-template>\n", styles: [".lib-spinner{border:.3em solid #dfe9f7;border-top:.3em solid #4070b0;border-radius:100%;width:30px;height:30px;animation:loadingSpinnerAnimate 1s ease infinite;position:relative}@keyframes loadingSpinnerAnimate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}*{box-sizing:border-box;text-decoration:none;font-size:1em}*:not(.material-symbols-outlined){font-family:inherit}.hbll-header-wrapper{display:flex;align-items:center;font-size:1em}.skip-link{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden}.skip-link:focus{position:static;width:auto;height:auto;overflow:visible;margin-left:1rem;background:#fff;color:#00285b;font-size:1.5rem;font-weight:580;padding:.5rem 1rem;z-index:1000;text-decoration:none;border:.1875rem solid #0050b7;border-radius:.25rem;cursor:pointer}.skip-link:hover{color:#00285b;background-color:#e3edf8;border:.1875rem solid #e3edf8}.hbll-nav-backdrop{background-color:#000;opacity:.3;height:100vh;width:100vw;left:0;top:0;transform:translate(-100vw);position:absolute;z-index:-1}#mobileLibraryHours{color:#141414;background-color:#e6e6e6;font-size:1em;min-height:2em}#mobileLibraryHours.hbll-header-wrapper{width:100%;justify-content:center;padding:.2em}.hbll-header-icon,.hbll-header-left-icon{font-size:1.2em}.hbll-header-left-icon{margin-right:.2em}header{background-color:#002e5d;display:flex;align-items:center}header a h1{font-size:100%;margin:0;height:1.8em}header a h1 img{height:100%;padding:0 0 0 .6em}header #libraryInfo{margin-left:auto;color:#fff}header #libraryInfo a,header #libraryInfo button{transition:color .2s ease-in-out;color:#fffc}header #libraryInfo a:hover,header #libraryInfo button:hover{color:#fff}header #libraryInfo #accountInfo button,header #libraryInfo #mobileNav button{padding:.8em .6em}header #libraryInfo #accountBtn .name{margin-left:.4em}header #libraryInfo #mobileNav{position:relative;z-index:11}header #libraryInfo #mobileNav #navWrapper{color:#fff;position:absolute;top:0;right:0}header #libraryInfo #mobileNav #navWrapper #closeMobileNavBtn{background-color:#0047ba;margin-left:auto;padding-left:.9em}header #libraryInfo :last-child button{padding-right:1em!important}header #libraryInfo .hbll-header-icon,header #libraryInfo .hbll-header-left-icon{font-size:1.6em}header #libraryInfo #accountInfo{position:relative}header #libraryInfo #accountInfo #accountDropdown{font-size:1em;text-wrap:nowrap;position:absolute;background-color:#002e5d;top:100%;right:-32px;z-index:11;background-color:#233753}header #libraryInfo #accountInfo #accountDropdown .hbll-header-impersonate-btn{color:#ca7ad1cc}header #libraryInfo #accountInfo #accountDropdown .hbll-header-impersonate-btn:hover{color:#ca7ad1}header #libraryInfo #accountInfo #accountDropdown a,header #libraryInfo #accountInfo #accountDropdown button{display:block;width:100%;text-align:left;padding:.4em 1.2em;font-size:1.1em}header #libraryInfo #accountInfo #accountDropdown a:first-child,header #libraryInfo #accountInfo #accountDropdown button:first-child{margin-bottom:.4em;padding-top:.6em;padding-bottom:.6em;border-bottom:1px solid rgba(255,255,255,.3)}header #libraryInfo #accountInfo #accountDropdown a:last-child,header #libraryInfo #accountInfo #accountDropdown button:last-child{margin-top:.4em;border-top:1px solid rgba(255,255,255,.3);padding-top:.6em;padding-bottom:.6em}header #libraryInfo #accountInfo #accountDropdown:before{content:\"\";width:0;height:0;border-style:solid;border-width:0 .6em .6em .6em;border-color:transparent transparent hsl(214,41%,23%) transparent;position:absolute;bottom:100%;right:50%;transform:translate(50%);z-index:inherit}header.hbll-header-desktop{padding:0 2em}header.hbll-header-desktop #libraryInfo #mainLibraryHours{position:relative;margin-right:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown{z-index:12;background-color:#fff;border-radius:4px;border:1px solid #d2d2d2;position:absolute;color:#000;padding:2em;top:100%;max-width:400%;right:50%;transform:translate(50%);margin-top:.6em;margin-right:2rem}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section{display:grid;grid-template-columns:repeat(4,7.5em);grid-template-rows:1fr;grid-column-gap:0px;grid-row-gap:0px;margin-bottom:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section h2{margin:0}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours-note{grid-column:2/-1;font-size:.8em;margin-top:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours-note ul{list-style-type:disc;list-style-position:inside;margin-left:.8em;padding:0}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours-note ul li span{position:relative}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-header{font-weight:600;font-size:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail,header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours{margin-top:.2em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail .hbll-header-item+.hbll-header-item,header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours .hbll-header-item+.hbll-header-item{margin-top:.3em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail h3,header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours h3{margin:0;font-size:inherit}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail{font-weight:600;white-space:nowrap}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours{white-space:nowrap}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a{color:#4070b0;display:flex;align-items:center;float:right}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a:hover{color:#6892ca}header.hbll-header-desktop #libraryInfo #accountInfo #accountDropdown{right:auto;left:50%;transform:translate(-50%)}button{background-color:transparent;border:none;cursor:pointer;font-family:inherit;font-size:inherit;color:inherit;padding:0}\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: LibraryHoursPipe, name: "libraryHours" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: NavBarComponent, selector: "lib-nav-bar", inputs: ["mainSiteBaseUrl", "height"] }, { kind: "pipe", type: TruncatePipe, name: "truncate" }], animations: [libHbllSlideInOutRightLeft, libHbllFadeInOut] }); }
99
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: HbllHeaderComponent, isStandalone: true, selector: "lib-hbll-header", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: false, isRequired: false, transformFunction: null }, mainsitebaseurl: { classPropertyName: "mainsitebaseurl", publicName: "mainsitebaseurl", isSignal: false, isRequired: false, transformFunction: null }, showImpersonateButton: { classPropertyName: "showImpersonateButton", publicName: "showImpersonateButton", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openImpersonationModal: "openImpersonationModal", login: "login", logout: "logout" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "accountInfoEl", first: true, predicate: ["accountInfo"], descendants: true, isSignal: true }, { propertyName: "hoursEl", first: true, predicate: ["hours"], descendants: true, isSignal: true }, { propertyName: "header", first: true, predicate: ["header"], descendants: true }], ngImport: i0, template: "<header\n role=\"banner\"\n class=\"hbll-header-wrapper\"\n #header\n [ngClass]=\"{ 'hbll-header-desktop': !isScreenSmall() }\"\n>\n <a [href]=\"mainsitebaseurl\">\n <h1>\n <img\n src=\"https://media.lib.byu.edu/web-assets/images/2.0.0/byu-hbll-logo-full.svg\"\n alt=\"BYU Library Logo\"\n />\n </h1>\n </a>\n <button (click)=\"focusMainContent()\" class=\"skip-link\">Skip to main content</button>\n <div id=\"libraryInfo\" class=\"hbll-header-wrapper\">\n @if (!isScreenSmall()) {\n <div #hours id=\"mainLibraryHours\" data-testid=\"desktopHours\">\n <button\n (click)=\"showLibraryHours = !showLibraryHours\"\n class=\"hbll-header-wrapper\"\n data-testid=\"hoursBtn\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </button>\n @if (!isScreenSmall() && showLibraryHours) {\n <div\n @libHbllFadeInOut\n id=\"libraryHoursDropdown\"\n data-testid=\"libraryHoursDropdown\"\n >\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Regular Hours</h2>\n <div class=\"hbll-header-detail\">\n <h3 class=\"hbll-header-item\">Monday - Friday</h3>\n <h3 class=\"hbll-header-item\">Saturday</h3>\n <h3 class=\"hbll-header-item\">Sunday</h3>\n </div>\n <div class=\"hbll-header-hours\">\n <div class=\"hbll-header-item\">7:00 a.m. - 11:45 p.m.</div>\n <div class=\"hbll-header-item\">8:00 a.m. - 11:45 p.m.</div>\n <div class=\"hbll-header-item\">Closed*</div>\n </div>\n <div class=\"hbll-header-hours-note\">\n * Family history ONLY 4:00 p.m. - 8:00 p.m\n <ul>\n <li><span>No checkouts after 11:45 p.m.</span></li>\n <li>\n <span>All services closed 10:45 to noon on Tuesdays</span>\n </li>\n </ul>\n </div>\n </section>\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Upcoming Exceptions</h2>\n @if (hoursExceptions$ | async; as exceptions) {\n <div class=\"hbll-header-detail\" data-testid=\"exceptionsDetail\">\n @for (exception of exceptions; track exception.date) {\n <h3 class=\"hbll-header-item\">\n {{ exception.date | date: 'MMM. d, YYYY' }}\n </h3>\n } @empty {\n No upcoming exceptions\n }\n </div>\n <div class=\"hbll-header-hours\" data-testid=\"exceptionsHours\">\n @for (exception of exceptions; track exception.date) {\n <div class=\"hbll-header-item\"\n [attr.title]=\"exception.exception_title\"\n [attr.aria-label]=\"exception.exception_title\">\n {{ exception.exception_title | truncate:32:'...' }}\n </div>\n }\n </div>\n } @else {\n <div class=\"lib-spinner\" data-testid=\"exceptionsSpinner\"></div>\n }\n </section>\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Library Cafe</h2>\n <div class=\"hbll-header-detail\">\n <h3 class=\"hbll-header-item\">Bagel Bubble</h3>\n <h3 class=\"hbll-header-item\">Provecho</h3>\n </div>\n <div class=\"hbll-header-hours\">\n <div class=\"hbll-header-item\">7:00 a.m. - 11:00 p.m.</div>\n <div class=\"hbll-header-item\">10:30 a.m. - 2:00 p.m.</div>\n </div>\n </section>\n <a [href]=\"mainsitebaseurl + '/about/hours'\"\n >See all hours\n <span class=\"material-symbols-outlined\"> chevron_right </span></a\n >\n </div>\n }\n </div>\n }\n <div id=\"accountInfo\" #accountInfo>\n <button\n (click)=\"isLoggedIn ? (showAccountDropdown = !showAccountDropdown) : login.emit()\"\n class=\"hbll-header-wrapper\"\n id=\"accountBtn\"\n data-testid=\"accountBtn\"\n >\n <span class=\"material-symbols-outlined hbll-header-left-icon\"> person </span>\n @if (!isScreenSmall()) {\n <span class=\"hbll-header-name\" data-testid=\"name\">{{\n isLoggedIn ? '&nbsp;' + name : 'Login'\n }}</span>\n }\n @if (isLoggedIn) {\n <span class=\"material-symbols-outlined\" data-testid=\"loginDropdown\">\n arrow_drop_down\n </span>\n }\n </button>\n @if (isLoggedIn && showAccountDropdown) {\n <div @libHbllFadeInOut id=\"accountDropdown\" data-testid=\"accountDropdown\">\n <a [href]=\"mainsitebaseurl + '/account'\">My Account</a>\n <a [href]=\"mainsitebaseurl + '/account'\">My Items</a>\n <a [href]=\"mainsitebaseurl + '/account/request'\">Request an item</a>\n <a [href]=\"mainsitebaseurl + '/account/saved'\">Saved</a>\n <a [href]=\"mainsitebaseurl + '/account/course'\">Courses</a>\n <a [href]=\"mainsitebaseurl + '/account/rooms'\">Rooms</a>\n <a [href]=\"mainsitebaseurl + '/account/preferences'\">Preferences</a>\n @if (showImpersonateButton()) {\n <button\n (click)=\"openImpersonationModal.emit(); showAccountDropdown = false\"\n class=\"hbll-header-impersonate-btn\"\n >\n Impersonate\n </button>\n }\n <button (click)=\"logout.emit()\" data-testid=\"logout\">Logout</button>\n </div>\n }\n </div>\n @if (isScreenSmall()) {\n <div id=\"mobileNav\">\n <button\n class=\"hbll-header-wrapper\"\n data-testid=\"mobileNavBtn\"\n (click)=\"openSidebarNav()\"\n >\n <span class=\"material-symbols-outlined hbll-header-icon\"> menu </span>\n </button>\n @if (showNavBar) {\n <div\n id=\"navWrapper\"\n data-testid=\"mobileNav\"\n [@libHbllSlideInOutRightLeft]=\"{\n value: '',\n params: { xOffset: '400px' },\n }\"\n >\n <button\n id=\"closeMobileNavBtn\"\n class=\"hbll-header-wrapper\"\n data-testid=\"closeMobileNavBtn\"\n (click)=\"closeSidebarNav()\"\n >\n <span class=\"material-symbols-outlined hbll-header-icon\"> close </span>\n </button>\n <lib-nav-bar\n [mainSiteBaseUrl]=\"mainsitebaseurl\"\n [height]=\"mobileSidebarHeight\"\n />\n </div>\n <div\n @libHbllFadeInOut\n (click)=\"showNavBar = false\"\n class=\"hbll-nav-backdrop\"\n data-testid=\"mobileNavBackdrop\"\n ></div>\n }\n </div>\n }\n </div>\n</header>\n\n@if (!isScreenSmall()) {\n <div id=\"mainNav\">\n <lib-nav-bar [mainSiteBaseUrl]=\"mainsitebaseurl\" />\n </div>\n}\n@if (isScreenSmall()) {\n <a\n id=\"mobileLibraryHours\"\n [href]=\"mainsitebaseurl + '/about/hours'\"\n class=\"hbll-header-wrapper\"\n data-testid=\"mobileHours\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </a>\n}\n\n<ng-template #hoursTextBlock>\n @if (libraryHours()) {\n <span class=\"material-symbols-outlined hbll-header-left-icon\"> schedule </span>\n {{\n libraryHours()?.is_closed\n ? 'CLOSED'\n : \"Today's hours: \" +\n (libraryHours()!.date | libraryHours: libraryHours()!.open_time) +\n ' - ' +\n (libraryHours()!.date | libraryHours: libraryHours()!.close_time)\n }}\n }\n</ng-template>\n", styles: [".lib-spinner{border:.3em solid #dfe9f7;border-top:.3em solid #4070b0;border-radius:100%;width:30px;height:30px;animation:loadingSpinnerAnimate 1s ease infinite;position:relative}@keyframes loadingSpinnerAnimate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}*{box-sizing:border-box;text-decoration:none;font-size:1em}*:not(.material-symbols-outlined){font-family:inherit}.hbll-header-wrapper{display:flex;align-items:center;font-size:1em}.skip-link{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden}.skip-link:focus{position:static;width:auto;height:auto;overflow:visible;margin-left:1rem;background:#fff;color:#00285b;font-size:1.5rem;font-weight:580;padding:.5rem 1rem;z-index:1000;text-decoration:none;border:.1875rem solid #0050b7;border-radius:.25rem;cursor:pointer}.skip-link:hover{color:#00285b;background-color:#e3edf8;border:.1875rem solid #e3edf8}.hbll-nav-backdrop{background-color:#000;opacity:.3;height:100vh;width:100vw;left:0;top:0;transform:translate(-100vw);position:absolute;z-index:-1}#mobileLibraryHours{color:#141414;background-color:#e6e6e6;font-size:1em;min-height:2em}#mobileLibraryHours.hbll-header-wrapper{width:100%;justify-content:center;padding:.2em}.hbll-header-icon,.hbll-header-left-icon{font-size:1.2em}.hbll-header-left-icon{margin-right:.2em}header{background-color:#002e5d;display:flex;align-items:center}header a h1{font-size:100%;margin:0;height:1.8em}header a h1 img{height:100%;padding:0 0 0 .6em}header #libraryInfo{margin-left:auto;color:#fff}header #libraryInfo a,header #libraryInfo button{transition:color .2s ease-in-out;color:#fffc}header #libraryInfo a:hover,header #libraryInfo button:hover{color:#fff}header #libraryInfo #accountInfo button,header #libraryInfo #mobileNav button{padding:.8em .6em}header #libraryInfo #accountBtn .name{margin-left:.4em}header #libraryInfo #mobileNav{position:relative;z-index:11}header #libraryInfo #mobileNav #navWrapper{color:#fff;position:absolute;top:0;right:0}header #libraryInfo #mobileNav #navWrapper #closeMobileNavBtn{background-color:#0047ba;margin-left:auto;padding-left:.9em}header #libraryInfo :last-child button{padding-right:1em!important}header #libraryInfo .hbll-header-icon,header #libraryInfo .hbll-header-left-icon{font-size:1.6em}header #libraryInfo #accountInfo{position:relative}header #libraryInfo #accountInfo #accountDropdown{font-size:1em;text-wrap:nowrap;position:absolute;background-color:#002e5d;top:100%;right:-32px;z-index:11;background-color:#233753}header #libraryInfo #accountInfo #accountDropdown .hbll-header-impersonate-btn{color:#ca7ad1cc}header #libraryInfo #accountInfo #accountDropdown .hbll-header-impersonate-btn:hover{color:#ca7ad1}header #libraryInfo #accountInfo #accountDropdown a,header #libraryInfo #accountInfo #accountDropdown button{display:block;width:100%;text-align:left;padding:.4em 1.2em;font-size:1.1em}header #libraryInfo #accountInfo #accountDropdown a:first-child,header #libraryInfo #accountInfo #accountDropdown button:first-child{margin-bottom:.4em;padding-top:.6em;padding-bottom:.6em;border-bottom:1px solid rgba(255,255,255,.3)}header #libraryInfo #accountInfo #accountDropdown a:last-child,header #libraryInfo #accountInfo #accountDropdown button:last-child{margin-top:.4em;border-top:1px solid rgba(255,255,255,.3);padding-top:.6em;padding-bottom:.6em}header #libraryInfo #accountInfo #accountDropdown:before{content:\"\";width:0;height:0;border-style:solid;border-width:0 .6em .6em .6em;border-color:transparent transparent hsl(214,41%,23%) transparent;position:absolute;bottom:100%;right:50%;transform:translate(50%);z-index:inherit}header.hbll-header-desktop{padding:0 2em}header.hbll-header-desktop #libraryInfo #mainLibraryHours{position:relative;margin-right:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown{z-index:12;background-color:#fff;border-radius:4px;border:1px solid #d2d2d2;position:absolute;color:#000;padding:2em;top:100%;max-width:400%;right:50%;transform:translate(50%);margin-top:.6em;margin-right:2rem}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section{display:grid;grid-template-columns:repeat(4,7.5em);grid-template-rows:1fr;grid-column-gap:0px;grid-row-gap:0px;margin-bottom:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section h2{margin:0}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours-note{grid-column:2/-1;font-size:.8em;margin-top:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours-note ul{list-style-type:disc;list-style-position:inside;margin-left:.8em;padding:0}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours-note ul li span{position:relative}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-header{font-weight:600;font-size:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail,header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours{margin-top:.2em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail .hbll-header-item+.hbll-header-item,header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours .hbll-header-item+.hbll-header-item{margin-top:.3em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail h3,header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours h3{margin:0;font-size:inherit}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail{font-weight:600;white-space:nowrap}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours{white-space:nowrap}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a{color:#4070b0;display:flex;align-items:center;float:right}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a:hover{color:#6892ca}header.hbll-header-desktop #libraryInfo #accountInfo #accountDropdown{right:auto;left:50%;transform:translate(-50%)}button{background-color:transparent;border:none;cursor:pointer;font-family:inherit;font-size:inherit;color:inherit;padding:0}\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: LibraryHoursPipe, name: "libraryHours" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: NavBarComponent, selector: "lib-nav-bar", inputs: ["mainSiteBaseUrl", "height"] }, { kind: "pipe", type: TruncatePipe, name: "truncate" }], animations: [libHbllSlideInOutRightLeft, libHbllFadeInOut] }); }
100
100
  }
101
101
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HbllHeaderComponent, decorators: [{
102
102
  type: Component,
@@ -108,7 +108,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
108
108
  NavBarComponent,
109
109
  ExpandCollapseComponent,
110
110
  TruncatePipe,
111
- ], animations: [libHbllSlideInOutRightLeft, libHbllFadeInOut], template: "<header\n role=\"banner\"\n class=\"hbll-header-wrapper\"\n #header\n [ngClass]=\"{ 'hbll-header-desktop': !isScreenSmall() }\"\n>\n <a [href]=\"mainsitebaseurl\">\n <h1>\n <img\n src=\"https://media.lib.byu.edu/web-assets/images/2.0.0/byu-hbll-logo-full.svg\"\n alt=\"BYU Library Logo\"\n />\n </h1>\n </a>\n <button (click)=\"focusMainContent()\" class=\"skip-link\">Skip to main content</button>\n <div id=\"libraryInfo\" class=\"hbll-header-wrapper\">\n @if (!isScreenSmall()) {\n <div #hours id=\"mainLibraryHours\" data-testid=\"desktopHours\">\n <button\n (click)=\"showLibraryHours = !showLibraryHours\"\n class=\"hbll-header-wrapper\"\n data-testid=\"hoursBtn\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </button>\n @if (!isScreenSmall() && showLibraryHours) {\n <div\n @libHbllFadeInOut\n id=\"libraryHoursDropdown\"\n data-testid=\"libraryHoursDropdown\"\n >\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Regular Hours</h2>\n <div class=\"hbll-header-detail\">\n <h3 class=\"hbll-header-item\">Monday - Friday</h3>\n <h3 class=\"hbll-header-item\">Saturday</h3>\n <h3 class=\"hbll-header-item\">Sunday</h3>\n </div>\n <div class=\"hbll-header-hours\">\n <div class=\"hbll-header-item\">7 a.m - midnight**</div>\n <div class=\"hbll-header-item\">8 a.m - midnight**</div>\n <div class=\"hbll-header-item\">Closed*</div>\n </div>\n <div class=\"hbll-header-hours-note\">\n ** Starting September 2nd, regular closing time will be 11:45 p.m.\n </div>\n <div class=\"hbll-header-hours-note\">\n * Family history ONLY 4 p.m. - 8 p.m\n <ul>\n <li><span>No checkouts after 11:45 p.m.</span></li>\n <li>\n <span>All services closed 10:45 to noon on Tuesdays</span>\n </li>\n </ul>\n </div>\n </section>\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Upcoming Exceptions</h2>\n @if (hoursExceptions$ | async; as exceptions) {\n <div class=\"hbll-header-detail\" data-testid=\"exceptionsDetail\">\n @for (exception of exceptions; track exception.date) {\n <h3 class=\"hbll-header-item\">\n {{ exception.date | date: 'MMM. d, YYYY' }}\n </h3>\n } @empty {\n No upcoming exceptions\n }\n </div>\n <div class=\"hbll-header-hours\" data-testid=\"exceptionsHours\">\n @for (exception of exceptions; track exception.date) {\n <div class=\"hbll-header-item\"\n [attr.title]=\"exception.exception_title\"\n [attr.aria-label]=\"exception.exception_title\">\n {{ exception.exception_title | truncate:32:'...' }}\n </div>\n }\n </div>\n } @else {\n <div class=\"lib-spinner\" data-testid=\"exceptionsSpinner\"></div>\n }\n </section>\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Library Cafe</h2>\n <div class=\"hbll-header-detail\">\n <h3 class=\"hbll-header-item\">Bagel Bubble</h3>\n <h3 class=\"hbll-header-item\">Provecho</h3>\n </div>\n <div class=\"hbll-header-hours\">\n <div class=\"hbll-header-item\">7 a.m - 11 p.m.</div>\n <div class=\"hbll-header-item\">10:30 a.m - 2 p.m.</div>\n </div>\n </section>\n <a [href]=\"mainsitebaseurl + '/about/hours'\"\n >See all hours\n <span class=\"material-symbols-outlined\"> chevron_right </span></a\n >\n </div>\n }\n </div>\n }\n <div id=\"accountInfo\" #accountInfo>\n <button\n (click)=\"isLoggedIn ? (showAccountDropdown = !showAccountDropdown) : login.emit()\"\n class=\"hbll-header-wrapper\"\n id=\"accountBtn\"\n data-testid=\"accountBtn\"\n >\n <span class=\"material-symbols-outlined hbll-header-left-icon\"> person </span>\n @if (!isScreenSmall()) {\n <span class=\"hbll-header-name\" data-testid=\"name\">{{\n isLoggedIn ? '&nbsp;' + name : 'Login'\n }}</span>\n }\n @if (isLoggedIn) {\n <span class=\"material-symbols-outlined\" data-testid=\"loginDropdown\">\n arrow_drop_down\n </span>\n }\n </button>\n @if (isLoggedIn && showAccountDropdown) {\n <div @libHbllFadeInOut id=\"accountDropdown\" data-testid=\"accountDropdown\">\n <a [href]=\"mainsitebaseurl + '/account'\">My Account</a>\n <a [href]=\"mainsitebaseurl + '/account'\">My Items</a>\n <a [href]=\"mainsitebaseurl + '/account/request'\">Request an item</a>\n <a [href]=\"mainsitebaseurl + '/account/saved'\">Saved</a>\n <a [href]=\"mainsitebaseurl + '/account/course'\">Courses</a>\n <a [href]=\"mainsitebaseurl + '/account/rooms'\">Rooms</a>\n <a [href]=\"mainsitebaseurl + '/account/preferences'\">Preferences</a>\n @if (showImpersonateButton()) {\n <button\n (click)=\"openImpersonationModal.emit(); showAccountDropdown = false\"\n class=\"hbll-header-impersonate-btn\"\n >\n Impersonate\n </button>\n }\n <button (click)=\"logout.emit()\" data-testid=\"logout\">Logout</button>\n </div>\n }\n </div>\n @if (isScreenSmall()) {\n <div id=\"mobileNav\">\n <button\n class=\"hbll-header-wrapper\"\n data-testid=\"mobileNavBtn\"\n (click)=\"openSidebarNav()\"\n >\n <span class=\"material-symbols-outlined hbll-header-icon\"> menu </span>\n </button>\n @if (showNavBar) {\n <div\n id=\"navWrapper\"\n data-testid=\"mobileNav\"\n [@libHbllSlideInOutRightLeft]=\"{\n value: '',\n params: { xOffset: '400px' },\n }\"\n >\n <button\n id=\"closeMobileNavBtn\"\n class=\"hbll-header-wrapper\"\n data-testid=\"closeMobileNavBtn\"\n (click)=\"closeSidebarNav()\"\n >\n <span class=\"material-symbols-outlined hbll-header-icon\"> close </span>\n </button>\n <lib-nav-bar\n [mainSiteBaseUrl]=\"mainsitebaseurl\"\n [height]=\"mobileSidebarHeight\"\n />\n </div>\n <div\n @libHbllFadeInOut\n (click)=\"showNavBar = false\"\n class=\"hbll-nav-backdrop\"\n data-testid=\"mobileNavBackdrop\"\n ></div>\n }\n </div>\n }\n </div>\n</header>\n\n@if (!isScreenSmall()) {\n <div id=\"mainNav\">\n <lib-nav-bar [mainSiteBaseUrl]=\"mainsitebaseurl\" />\n </div>\n}\n@if (isScreenSmall()) {\n <a\n id=\"mobileLibraryHours\"\n [href]=\"mainsitebaseurl + '/about/hours'\"\n class=\"hbll-header-wrapper\"\n data-testid=\"mobileHours\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </a>\n}\n\n<ng-template #hoursTextBlock>\n @if (libraryHours()) {\n <span class=\"material-symbols-outlined hbll-header-left-icon\"> schedule </span>\n {{\n libraryHours()?.is_closed\n ? 'CLOSED'\n : \"Today's hours: \" +\n (libraryHours()!.date | libraryHours: libraryHours()!.open_time) +\n ' - ' +\n (libraryHours()!.date | libraryHours: libraryHours()!.close_time)\n }}\n }\n</ng-template>\n", styles: [".lib-spinner{border:.3em solid #dfe9f7;border-top:.3em solid #4070b0;border-radius:100%;width:30px;height:30px;animation:loadingSpinnerAnimate 1s ease infinite;position:relative}@keyframes loadingSpinnerAnimate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}*{box-sizing:border-box;text-decoration:none;font-size:1em}*:not(.material-symbols-outlined){font-family:inherit}.hbll-header-wrapper{display:flex;align-items:center;font-size:1em}.skip-link{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden}.skip-link:focus{position:static;width:auto;height:auto;overflow:visible;margin-left:1rem;background:#fff;color:#00285b;font-size:1.5rem;font-weight:580;padding:.5rem 1rem;z-index:1000;text-decoration:none;border:.1875rem solid #0050b7;border-radius:.25rem;cursor:pointer}.skip-link:hover{color:#00285b;background-color:#e3edf8;border:.1875rem solid #e3edf8}.hbll-nav-backdrop{background-color:#000;opacity:.3;height:100vh;width:100vw;left:0;top:0;transform:translate(-100vw);position:absolute;z-index:-1}#mobileLibraryHours{color:#141414;background-color:#e6e6e6;font-size:1em;min-height:2em}#mobileLibraryHours.hbll-header-wrapper{width:100%;justify-content:center;padding:.2em}.hbll-header-icon,.hbll-header-left-icon{font-size:1.2em}.hbll-header-left-icon{margin-right:.2em}header{background-color:#002e5d;display:flex;align-items:center}header a h1{font-size:100%;margin:0;height:1.8em}header a h1 img{height:100%;padding:0 0 0 .6em}header #libraryInfo{margin-left:auto;color:#fff}header #libraryInfo a,header #libraryInfo button{transition:color .2s ease-in-out;color:#fffc}header #libraryInfo a:hover,header #libraryInfo button:hover{color:#fff}header #libraryInfo #accountInfo button,header #libraryInfo #mobileNav button{padding:.8em .6em}header #libraryInfo #accountBtn .name{margin-left:.4em}header #libraryInfo #mobileNav{position:relative;z-index:11}header #libraryInfo #mobileNav #navWrapper{color:#fff;position:absolute;top:0;right:0}header #libraryInfo #mobileNav #navWrapper #closeMobileNavBtn{background-color:#0047ba;margin-left:auto;padding-left:.9em}header #libraryInfo :last-child button{padding-right:1em!important}header #libraryInfo .hbll-header-icon,header #libraryInfo .hbll-header-left-icon{font-size:1.6em}header #libraryInfo #accountInfo{position:relative}header #libraryInfo #accountInfo #accountDropdown{font-size:1em;text-wrap:nowrap;position:absolute;background-color:#002e5d;top:100%;right:-32px;z-index:11;background-color:#233753}header #libraryInfo #accountInfo #accountDropdown .hbll-header-impersonate-btn{color:#ca7ad1cc}header #libraryInfo #accountInfo #accountDropdown .hbll-header-impersonate-btn:hover{color:#ca7ad1}header #libraryInfo #accountInfo #accountDropdown a,header #libraryInfo #accountInfo #accountDropdown button{display:block;width:100%;text-align:left;padding:.4em 1.2em;font-size:1.1em}header #libraryInfo #accountInfo #accountDropdown a:first-child,header #libraryInfo #accountInfo #accountDropdown button:first-child{margin-bottom:.4em;padding-top:.6em;padding-bottom:.6em;border-bottom:1px solid rgba(255,255,255,.3)}header #libraryInfo #accountInfo #accountDropdown a:last-child,header #libraryInfo #accountInfo #accountDropdown button:last-child{margin-top:.4em;border-top:1px solid rgba(255,255,255,.3);padding-top:.6em;padding-bottom:.6em}header #libraryInfo #accountInfo #accountDropdown:before{content:\"\";width:0;height:0;border-style:solid;border-width:0 .6em .6em .6em;border-color:transparent transparent hsl(214,41%,23%) transparent;position:absolute;bottom:100%;right:50%;transform:translate(50%);z-index:inherit}header.hbll-header-desktop{padding:0 2em}header.hbll-header-desktop #libraryInfo #mainLibraryHours{position:relative;margin-right:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown{z-index:12;background-color:#fff;border-radius:4px;border:1px solid #d2d2d2;position:absolute;color:#000;padding:2em;top:100%;max-width:400%;right:50%;transform:translate(50%);margin-top:.6em;margin-right:2rem}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section{display:grid;grid-template-columns:repeat(4,7.5em);grid-template-rows:1fr;grid-column-gap:0px;grid-row-gap:0px;margin-bottom:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section h2{margin:0}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours-note{grid-column:2/-1;font-size:.8em;margin-top:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours-note ul{list-style-type:disc;list-style-position:inside;margin-left:.8em;padding:0}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours-note ul li span{position:relative}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-header{font-weight:600;font-size:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail,header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours{margin-top:.2em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail .hbll-header-item+.hbll-header-item,header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours .hbll-header-item+.hbll-header-item{margin-top:.3em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail h3,header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours h3{margin:0;font-size:inherit}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail{font-weight:600;white-space:nowrap}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours{white-space:nowrap}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a{color:#4070b0;display:flex;align-items:center;float:right}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a:hover{color:#6892ca}header.hbll-header-desktop #libraryInfo #accountInfo #accountDropdown{right:auto;left:50%;transform:translate(-50%)}button{background-color:transparent;border:none;cursor:pointer;font-family:inherit;font-size:inherit;color:inherit;padding:0}\n"] }]
111
+ ], animations: [libHbllSlideInOutRightLeft, libHbllFadeInOut], template: "<header\n role=\"banner\"\n class=\"hbll-header-wrapper\"\n #header\n [ngClass]=\"{ 'hbll-header-desktop': !isScreenSmall() }\"\n>\n <a [href]=\"mainsitebaseurl\">\n <h1>\n <img\n src=\"https://media.lib.byu.edu/web-assets/images/2.0.0/byu-hbll-logo-full.svg\"\n alt=\"BYU Library Logo\"\n />\n </h1>\n </a>\n <button (click)=\"focusMainContent()\" class=\"skip-link\">Skip to main content</button>\n <div id=\"libraryInfo\" class=\"hbll-header-wrapper\">\n @if (!isScreenSmall()) {\n <div #hours id=\"mainLibraryHours\" data-testid=\"desktopHours\">\n <button\n (click)=\"showLibraryHours = !showLibraryHours\"\n class=\"hbll-header-wrapper\"\n data-testid=\"hoursBtn\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </button>\n @if (!isScreenSmall() && showLibraryHours) {\n <div\n @libHbllFadeInOut\n id=\"libraryHoursDropdown\"\n data-testid=\"libraryHoursDropdown\"\n >\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Regular Hours</h2>\n <div class=\"hbll-header-detail\">\n <h3 class=\"hbll-header-item\">Monday - Friday</h3>\n <h3 class=\"hbll-header-item\">Saturday</h3>\n <h3 class=\"hbll-header-item\">Sunday</h3>\n </div>\n <div class=\"hbll-header-hours\">\n <div class=\"hbll-header-item\">7:00 a.m. - 11:45 p.m.</div>\n <div class=\"hbll-header-item\">8:00 a.m. - 11:45 p.m.</div>\n <div class=\"hbll-header-item\">Closed*</div>\n </div>\n <div class=\"hbll-header-hours-note\">\n * Family history ONLY 4:00 p.m. - 8:00 p.m\n <ul>\n <li><span>No checkouts after 11:45 p.m.</span></li>\n <li>\n <span>All services closed 10:45 to noon on Tuesdays</span>\n </li>\n </ul>\n </div>\n </section>\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Upcoming Exceptions</h2>\n @if (hoursExceptions$ | async; as exceptions) {\n <div class=\"hbll-header-detail\" data-testid=\"exceptionsDetail\">\n @for (exception of exceptions; track exception.date) {\n <h3 class=\"hbll-header-item\">\n {{ exception.date | date: 'MMM. d, YYYY' }}\n </h3>\n } @empty {\n No upcoming exceptions\n }\n </div>\n <div class=\"hbll-header-hours\" data-testid=\"exceptionsHours\">\n @for (exception of exceptions; track exception.date) {\n <div class=\"hbll-header-item\"\n [attr.title]=\"exception.exception_title\"\n [attr.aria-label]=\"exception.exception_title\">\n {{ exception.exception_title | truncate:32:'...' }}\n </div>\n }\n </div>\n } @else {\n <div class=\"lib-spinner\" data-testid=\"exceptionsSpinner\"></div>\n }\n </section>\n <section class=\"hbll-header-section\">\n <h2 class=\"hbll-header-header\">Library Cafe</h2>\n <div class=\"hbll-header-detail\">\n <h3 class=\"hbll-header-item\">Bagel Bubble</h3>\n <h3 class=\"hbll-header-item\">Provecho</h3>\n </div>\n <div class=\"hbll-header-hours\">\n <div class=\"hbll-header-item\">7:00 a.m. - 11:00 p.m.</div>\n <div class=\"hbll-header-item\">10:30 a.m. - 2:00 p.m.</div>\n </div>\n </section>\n <a [href]=\"mainsitebaseurl + '/about/hours'\"\n >See all hours\n <span class=\"material-symbols-outlined\"> chevron_right </span></a\n >\n </div>\n }\n </div>\n }\n <div id=\"accountInfo\" #accountInfo>\n <button\n (click)=\"isLoggedIn ? (showAccountDropdown = !showAccountDropdown) : login.emit()\"\n class=\"hbll-header-wrapper\"\n id=\"accountBtn\"\n data-testid=\"accountBtn\"\n >\n <span class=\"material-symbols-outlined hbll-header-left-icon\"> person </span>\n @if (!isScreenSmall()) {\n <span class=\"hbll-header-name\" data-testid=\"name\">{{\n isLoggedIn ? '&nbsp;' + name : 'Login'\n }}</span>\n }\n @if (isLoggedIn) {\n <span class=\"material-symbols-outlined\" data-testid=\"loginDropdown\">\n arrow_drop_down\n </span>\n }\n </button>\n @if (isLoggedIn && showAccountDropdown) {\n <div @libHbllFadeInOut id=\"accountDropdown\" data-testid=\"accountDropdown\">\n <a [href]=\"mainsitebaseurl + '/account'\">My Account</a>\n <a [href]=\"mainsitebaseurl + '/account'\">My Items</a>\n <a [href]=\"mainsitebaseurl + '/account/request'\">Request an item</a>\n <a [href]=\"mainsitebaseurl + '/account/saved'\">Saved</a>\n <a [href]=\"mainsitebaseurl + '/account/course'\">Courses</a>\n <a [href]=\"mainsitebaseurl + '/account/rooms'\">Rooms</a>\n <a [href]=\"mainsitebaseurl + '/account/preferences'\">Preferences</a>\n @if (showImpersonateButton()) {\n <button\n (click)=\"openImpersonationModal.emit(); showAccountDropdown = false\"\n class=\"hbll-header-impersonate-btn\"\n >\n Impersonate\n </button>\n }\n <button (click)=\"logout.emit()\" data-testid=\"logout\">Logout</button>\n </div>\n }\n </div>\n @if (isScreenSmall()) {\n <div id=\"mobileNav\">\n <button\n class=\"hbll-header-wrapper\"\n data-testid=\"mobileNavBtn\"\n (click)=\"openSidebarNav()\"\n >\n <span class=\"material-symbols-outlined hbll-header-icon\"> menu </span>\n </button>\n @if (showNavBar) {\n <div\n id=\"navWrapper\"\n data-testid=\"mobileNav\"\n [@libHbllSlideInOutRightLeft]=\"{\n value: '',\n params: { xOffset: '400px' },\n }\"\n >\n <button\n id=\"closeMobileNavBtn\"\n class=\"hbll-header-wrapper\"\n data-testid=\"closeMobileNavBtn\"\n (click)=\"closeSidebarNav()\"\n >\n <span class=\"material-symbols-outlined hbll-header-icon\"> close </span>\n </button>\n <lib-nav-bar\n [mainSiteBaseUrl]=\"mainsitebaseurl\"\n [height]=\"mobileSidebarHeight\"\n />\n </div>\n <div\n @libHbllFadeInOut\n (click)=\"showNavBar = false\"\n class=\"hbll-nav-backdrop\"\n data-testid=\"mobileNavBackdrop\"\n ></div>\n }\n </div>\n }\n </div>\n</header>\n\n@if (!isScreenSmall()) {\n <div id=\"mainNav\">\n <lib-nav-bar [mainSiteBaseUrl]=\"mainsitebaseurl\" />\n </div>\n}\n@if (isScreenSmall()) {\n <a\n id=\"mobileLibraryHours\"\n [href]=\"mainsitebaseurl + '/about/hours'\"\n class=\"hbll-header-wrapper\"\n data-testid=\"mobileHours\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </a>\n}\n\n<ng-template #hoursTextBlock>\n @if (libraryHours()) {\n <span class=\"material-symbols-outlined hbll-header-left-icon\"> schedule </span>\n {{\n libraryHours()?.is_closed\n ? 'CLOSED'\n : \"Today's hours: \" +\n (libraryHours()!.date | libraryHours: libraryHours()!.open_time) +\n ' - ' +\n (libraryHours()!.date | libraryHours: libraryHours()!.close_time)\n }}\n }\n</ng-template>\n", styles: [".lib-spinner{border:.3em solid #dfe9f7;border-top:.3em solid #4070b0;border-radius:100%;width:30px;height:30px;animation:loadingSpinnerAnimate 1s ease infinite;position:relative}@keyframes loadingSpinnerAnimate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}*{box-sizing:border-box;text-decoration:none;font-size:1em}*:not(.material-symbols-outlined){font-family:inherit}.hbll-header-wrapper{display:flex;align-items:center;font-size:1em}.skip-link{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden}.skip-link:focus{position:static;width:auto;height:auto;overflow:visible;margin-left:1rem;background:#fff;color:#00285b;font-size:1.5rem;font-weight:580;padding:.5rem 1rem;z-index:1000;text-decoration:none;border:.1875rem solid #0050b7;border-radius:.25rem;cursor:pointer}.skip-link:hover{color:#00285b;background-color:#e3edf8;border:.1875rem solid #e3edf8}.hbll-nav-backdrop{background-color:#000;opacity:.3;height:100vh;width:100vw;left:0;top:0;transform:translate(-100vw);position:absolute;z-index:-1}#mobileLibraryHours{color:#141414;background-color:#e6e6e6;font-size:1em;min-height:2em}#mobileLibraryHours.hbll-header-wrapper{width:100%;justify-content:center;padding:.2em}.hbll-header-icon,.hbll-header-left-icon{font-size:1.2em}.hbll-header-left-icon{margin-right:.2em}header{background-color:#002e5d;display:flex;align-items:center}header a h1{font-size:100%;margin:0;height:1.8em}header a h1 img{height:100%;padding:0 0 0 .6em}header #libraryInfo{margin-left:auto;color:#fff}header #libraryInfo a,header #libraryInfo button{transition:color .2s ease-in-out;color:#fffc}header #libraryInfo a:hover,header #libraryInfo button:hover{color:#fff}header #libraryInfo #accountInfo button,header #libraryInfo #mobileNav button{padding:.8em .6em}header #libraryInfo #accountBtn .name{margin-left:.4em}header #libraryInfo #mobileNav{position:relative;z-index:11}header #libraryInfo #mobileNav #navWrapper{color:#fff;position:absolute;top:0;right:0}header #libraryInfo #mobileNav #navWrapper #closeMobileNavBtn{background-color:#0047ba;margin-left:auto;padding-left:.9em}header #libraryInfo :last-child button{padding-right:1em!important}header #libraryInfo .hbll-header-icon,header #libraryInfo .hbll-header-left-icon{font-size:1.6em}header #libraryInfo #accountInfo{position:relative}header #libraryInfo #accountInfo #accountDropdown{font-size:1em;text-wrap:nowrap;position:absolute;background-color:#002e5d;top:100%;right:-32px;z-index:11;background-color:#233753}header #libraryInfo #accountInfo #accountDropdown .hbll-header-impersonate-btn{color:#ca7ad1cc}header #libraryInfo #accountInfo #accountDropdown .hbll-header-impersonate-btn:hover{color:#ca7ad1}header #libraryInfo #accountInfo #accountDropdown a,header #libraryInfo #accountInfo #accountDropdown button{display:block;width:100%;text-align:left;padding:.4em 1.2em;font-size:1.1em}header #libraryInfo #accountInfo #accountDropdown a:first-child,header #libraryInfo #accountInfo #accountDropdown button:first-child{margin-bottom:.4em;padding-top:.6em;padding-bottom:.6em;border-bottom:1px solid rgba(255,255,255,.3)}header #libraryInfo #accountInfo #accountDropdown a:last-child,header #libraryInfo #accountInfo #accountDropdown button:last-child{margin-top:.4em;border-top:1px solid rgba(255,255,255,.3);padding-top:.6em;padding-bottom:.6em}header #libraryInfo #accountInfo #accountDropdown:before{content:\"\";width:0;height:0;border-style:solid;border-width:0 .6em .6em .6em;border-color:transparent transparent hsl(214,41%,23%) transparent;position:absolute;bottom:100%;right:50%;transform:translate(50%);z-index:inherit}header.hbll-header-desktop{padding:0 2em}header.hbll-header-desktop #libraryInfo #mainLibraryHours{position:relative;margin-right:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown{z-index:12;background-color:#fff;border-radius:4px;border:1px solid #d2d2d2;position:absolute;color:#000;padding:2em;top:100%;max-width:400%;right:50%;transform:translate(50%);margin-top:.6em;margin-right:2rem}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section{display:grid;grid-template-columns:repeat(4,7.5em);grid-template-rows:1fr;grid-column-gap:0px;grid-row-gap:0px;margin-bottom:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section h2{margin:0}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours-note{grid-column:2/-1;font-size:.8em;margin-top:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours-note ul{list-style-type:disc;list-style-position:inside;margin-left:.8em;padding:0}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours-note ul li span{position:relative}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-header{font-weight:600;font-size:1em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail,header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours{margin-top:.2em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail .hbll-header-item+.hbll-header-item,header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours .hbll-header-item+.hbll-header-item{margin-top:.3em}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail h3,header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours h3{margin:0;font-size:inherit}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-detail{font-weight:600;white-space:nowrap}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .hbll-header-section .hbll-header-hours{white-space:nowrap}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a{color:#4070b0;display:flex;align-items:center;float:right}header.hbll-header-desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a:hover{color:#6892ca}header.hbll-header-desktop #libraryInfo #accountInfo #accountDropdown{right:auto;left:50%;transform:translate(-50%)}button{background-color:transparent;border:none;cursor:pointer;font-family:inherit;font-size:inherit;color:inherit;padding:0}\n"] }]
112
112
  }], propDecorators: { header: [{
113
113
  type: ViewChild,
114
114
  args: ['header']
@@ -126,4 +126,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
126
126
  type: HostListener,
127
127
  args: ['window:resize', ['$event']]
128
128
  }] } });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGJsbC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2hibGwtaGVhZGVyL2hibGwtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oYmxsLWhlYWRlci9oYmxsLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FB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QkFDSSxpQkFBaUIsY0FDZixJQUFJLFdBQ1A7d0JBQ0wsUUFBUTt3QkFDUixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixlQUFlO3dCQUNmLHVCQUF1Qjt3QkFDdkIsWUFBWTtxQkFDZixjQUdXLENBQUMsMEJBQTBCLEVBQUUsZ0JBQWdCLENBQUM7OEJBU3JDLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFJVixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFHSSxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkEwREMsUUFBUTtzQkFEZixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgRGF0ZVBpcGUsIERPQ1VNRU5ULCBMb3dlckNhc2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NoaWxkLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2QmFyQ29tcG9uZW50IH0gZnJvbSAnLi9uYXYtYmFyL25hdi1iYXIuY29tcG9uZW50JztcbmltcG9ydCB7IGxpYkhibGxGYWRlSW5PdXQsIGxpYkhibGxTbGlkZUluT3V0UmlnaHRMZWZ0IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9hbmltYXRpb25zJztcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgaXNTY3JlZW5TbWFsbFNpZ25hbCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IExpYnJhcnlIb3Vyc1BpcGUgfSBmcm9tICcuL3BpcGVzL2xpYnJhcnktaG91cnMucGlwZSc7XG5pbXBvcnQgeyBtYXAsIG9mLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFeHBhbmRDb2xsYXBzZUNvbXBvbmVudCB9IGZyb20gJy4uL2V4cGFuZC1jb2xsYXBzZS9leHBhbmQtY29sbGFwc2UuY29tcG9uZW50JztcbmltcG9ydCB7IExpYnJhcnlIb3VycyB9IGZyb20gJy4vbW9kZWxzL2xpYnJhcnktaG91cnMnO1xuaW1wb3J0IHsgVHJ1bmNhdGVQaXBlIH0gZnJvbSAnLi9waXBlcy90cnVuY2F0ZS5waXBlJztcblxuZXhwb3J0IGNvbnN0IExJQlJBUllfSE9VUlNfQVBJX1VSTCA9ICdodHRwczovL2FwcHMubGliLmJ5dS5lZHUvbGlicmFyeWhvdXJzL2FwaS9ob3Vycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWhibGwtaGVhZGVyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRGF0ZVBpcGUsXG4gICAgICAgIExvd2VyQ2FzZVBpcGUsXG4gICAgICAgIExpYnJhcnlIb3Vyc1BpcGUsXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTmF2QmFyQ29tcG9uZW50LFxuICAgICAgICBFeHBhbmRDb2xsYXBzZUNvbXBvbmVudCxcbiAgICAgICAgVHJ1bmNhdGVQaXBlLFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hibGwtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vaGJsbC1oZWFkZXIuY29tcG9uZW50LnNjc3MnLFxuICAgIGFuaW1hdGlvbnM6IFtsaWJIYmxsU2xpZGVJbk91dFJpZ2h0TGVmdCwgbGliSGJsbEZhZGVJbk91dF0sXG59KVxuZXhwb3J0IGNsYXNzIEhibGxIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHIyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gICAgLy8gVE9ETzogZG9lcyB0aGlzIGluY3JlYXNlIGJ1bmRsZSBzaXplIG1vcmUgdGhhbiBpdCdzIHdvcnRoPyB2cyBmZXRjaD9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBibyA9IGluamVjdChCcmVha3BvaW50T2JzZXJ2ZXIpO1xuICAgIHByaXZhdGUgZG9jID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlcicpIGhlYWRlciE6IEVsZW1lbnRSZWY7XG5cbiAgICAvLyAtLS0gQVBJIC0tLVxuICAgIC8vIFRPRE86IENvbnZlcnQgdGhlc2UgdG8gc2lnbmFsIGlucHV0czogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvNTc3NTVcbiAgICBASW5wdXQoKSBuYW1lID0gJyc7XG4gICAgQElucHV0KCkgbWFpbnNpdGViYXNldXJsID0gJ2h0dHBzOi8vbGliLmJ5dS5lZHUnO1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBzaW5nYWwgaW5wdXQgY3VycmVudGx5IGJlY2F1c2UgaXQgd29uJ3QgYmUgdXNlZCBieSBhbnkgb3RoZXIgYXBwbGljYXRpb25zIHRoYW4gQW5ndWxhciBvbmVzLlxuICAgIHNob3dJbXBlcnNvbmF0ZUJ1dHRvbiA9IGlucHV0KGZhbHNlKTtcbiAgICBAT3V0cHV0KCkgb3BlbkltcGVyc29uYXRpb25Nb2RhbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgbG9naW4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIGxvZ291dCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvLyAtLS0tLS0tLS0tLVxuICAgIHByaXZhdGUgZm9ybWF0RGF0ZUZvckhvdXJzID0gKGRhdGU6IERhdGUpID0+XG4gICAgICAgIGAke2RhdGUuZ2V0RnVsbFllYXIoKX0tJHtTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKX0tJHtTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICBwcml2YXRlIGFjY291bnRJbmZvRWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2FjY291bnRJbmZvJyk7XG4gICAgcHJpdmF0ZSBob3Vyc0VsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdob3VycycpO1xuXG4gICAgcHJvdGVjdGVkIGdldCBpc0xvZ2dlZEluKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgLy8gSG91cnNcbiAgICBwcm90ZWN0ZWQgbGlicmFyeUhvdXJzID0gdG9TaWduYWwodGhpcy5odHRwLmdldDxMaWJyYXJ5SG91cnM+KExJQlJBUllfSE9VUlNfQVBJX1VSTCkpO1xuICAgIHByb3RlY3RlZCBob3Vyc0V4Y2VwdGlvbnMkID0gb2YobnVsbCkucGlwZShcbiAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEdldCBleGNlcHRpb25zIGZyb20gdG9kYXkgdG8gdHdvIG1vbnRocyBvdXRcbiAgICAgICAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5mb3JtYXREYXRlRm9ySG91cnModG9kYXkpO1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBuZXdEYXRlLnNldE1vbnRoKHRvZGF5LmdldE1vbnRoKCkgKyAyKTtcbiAgICAgICAgICAgIGNvbnN0IHN0b3AgPSB0aGlzLmZvcm1hdERhdGVGb3JIb3VycyhuZXdEYXRlKTtcbiAgICAgICAgICAgIHJldHVybiBbc3RhcnQsIHN0b3BdO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKChbc3RhcnQsIHN0b3BdOiBzdHJpbmdbXSkgPT5cbiAgICAgICAgICAgIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgIC5nZXQ8TGlicmFyeUhvdXJzW10+KGAke0xJQlJBUllfSE9VUlNfQVBJX1VSTH0/c3RhcnQ9JHtzdGFydH0mc3RvcD0ke3N0b3B9YClcbiAgICAgICAgICAgICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzLmZpbHRlcigoZGF5KSA9PiBkYXkuaGFzX2V4Y2VwdGlvbikuc2xpY2UoMCwgNSkpKSxcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSksXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCBzaG93QWNjb3VudERyb3Bkb3duID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIHNob3dMaWJyYXJ5SG91cnMgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgbW9iaWxlU2lkZWJhckhlaWdodCA9IDA7XG4gICAgcHJvdGVjdGVkIHNob3dOYXZCYXIgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgaXNTY3JlZW5TbWFsbCA9IGlzU2NyZWVuU21hbGxTaWduYWwodGhpcy5ibyk7XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucjIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hY2NvdW50SW5mb0VsKCk/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpKVxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0FjY291bnREcm9wZG93biA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmhvdXJzRWwoKT8ubmF0aXZlRWxlbWVudC5jb250YWlucyhlLnRhcmdldCkpIHRoaXMuc2hvd0xpYnJhcnlIb3VycyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXRNb2JpbGVTaWRlYmFySGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9wZW5TaWRlYmFyTmF2ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dOYXZCYXIgPSB0cnVlO1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgIHRoaXMucjIuc2V0U3R5bGUodGhpcy5kb2MuYm9keSwgJ292ZXJmbG93JywgJ2hpZGRlbicpO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgY2xvc2VTaWRlYmFyTmF2ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dOYXZCYXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yMi5yZW1vdmVTdHlsZSh0aGlzLmRvYy5ib2R5LCAnb3ZlcmZsb3cnKTtcbiAgICB9O1xuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gICAgcHJpdmF0ZSBvblJlc2l6ZSgpIHtcbiAgICAgICAgdGhpcy5zZXRNb2JpbGVTaWRlYmFySGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRNb2JpbGVTaWRlYmFySGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSB0aGlzLmhlYWRlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcblxuICAgICAgICAvLyBUT0RPOiByZW1vdmUgYmFubmVyIGNvZGUgYWZ0ZXIgYmFubmVyIGlzIHJlbW92ZWQgZnJvbSBiZXRhXG4gICAgICAgIGNvbnN0IGJhbm5lckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYmV0YS1uYXZpZ2F0aW9uLWJhbm5lcicpO1xuICAgICAgICBjb25zdCBiYW5uZXJIZWlnaHQgPSBiYW5uZXJFbGVtZW50ID8gYmFubmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgfHwgMCA6IDA7XG5cbiAgICAgICAgdGhpcy5tb2JpbGVTaWRlYmFySGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gaGVhZGVySGVpZ2h0IC0gYmFubmVySGVpZ2h0O1xuICAgIH07XG5cbiAgICBmb2N1c01haW5Db250ZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtYWluQ29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYWluLWNvbnRlbnQnKSBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBpZiAobWFpbkNvbnRlbnQpIHtcbiAgICAgICAgICAgIG1haW5Db250ZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtYWluQ29udGVudEFyaWEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICdbYXJpYS1sYWJlbD1cIk1haW4gY29udGVudCBhcmVhXCJdJyxcbiAgICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmIChtYWluQ29udGVudEFyaWEpIHtcbiAgICAgICAgICAgICAgICBtYWluQ29udGVudEFyaWEuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxoZWFkZXJcbiAgICByb2xlPVwiYmFubmVyXCJcbiAgICBjbGFzcz1cImhibGwtaGVhZGVyLXdyYXBwZXJcIlxuICAgICNoZWFkZXJcbiAgICBbbmdDbGFzc109XCJ7ICdoYmxsLWhlYWRlci1kZXNrdG9wJzogIWlzU2NyZWVuU21hbGwoKSB9XCJcbj5cbiAgICA8YSBbaHJlZl09XCJtYWluc2l0ZWJhc2V1cmxcIj5cbiAgICAgICAgPGgxPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vbWVkaWEubGliLmJ5dS5lZHUvd2ViLWFzc2V0cy9pbWFnZXMvMi4wLjAvYnl1LWhibGwtbG9nby1mdWxsLnN2Z1wiXG4gICAgICAgICAgICAgICAgYWx0PVwiQllVIExpYnJhcnkgTG9nb1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2gxPlxuICAgIDwvYT5cbiAgICA8YnV0dG9uIChjbGljayk9XCJmb2N1c01haW5Db250ZW50KClcIiBjbGFzcz1cInNraXAtbGlua1wiPlNraXAgdG8gbWFpbiBjb250ZW50PC9idXR0b24+XG4gICAgPGRpdiBpZD1cImxpYnJhcnlJbmZvXCIgY2xhc3M9XCJoYmxsLWhlYWRlci13cmFwcGVyXCI+XG4gICAgICAgIEBpZiAoIWlzU2NyZWVuU21hbGwoKSkge1xuICAgICAgICAgICAgPGRpdiAjaG91cnMgaWQ9XCJtYWluTGlicmFyeUhvdXJzXCIgZGF0YS10ZXN0aWQ9XCJkZXNrdG9wSG91cnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93TGlicmFyeUhvdXJzID0gIXNob3dMaWJyYXJ5SG91cnNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhibGwtaGVhZGVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImhvdXJzQnRuXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJob3Vyc1RleHRCbG9ja1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIEBpZiAoIWlzU2NyZWVuU21hbGwoKSAmJiBzaG93TGlicmFyeUhvdXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIEBsaWJIYmxsRmFkZUluT3V0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImxpYnJhcnlIb3Vyc0Ryb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibGlicmFyeUhvdXJzRHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImhibGwtaGVhZGVyLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJoYmxsLWhlYWRlci1oZWFkZXJcIj5SZWd1bGFyIEhvdXJzPC9oMj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGJsbC1oZWFkZXItZGV0YWlsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImhibGwtaGVhZGVyLWl0ZW1cIj5Nb25kYXkgLSBGcmlkYXk8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJoYmxsLWhlYWRlci1pdGVtXCI+U2F0dXJkYXk8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJoYmxsLWhlYWRlci1pdGVtXCI+U3VuZGF5PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGJsbC1oZWFkZXItaG91cnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhibGwtaGVhZGVyLWl0ZW1cIj43IGEubSAtIG1pZG5pZ2h0Kio8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhibGwtaGVhZGVyLWl0ZW1cIj44IGEubSAtIG1pZG5pZ2h0Kio8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhibGwtaGVhZGVyLWl0ZW1cIj5DbG9zZWQqPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhibGwtaGVhZGVyLWhvdXJzLW5vdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiogU3RhcnRpbmcgU2VwdGVtYmVyIDJuZCwgcmVndWxhciBjbG9zaW5nIHRpbWUgd2lsbCBiZSAxMTo0NSBwLm0uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhibGwtaGVhZGVyLWhvdXJzLW5vdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBGYW1pbHkgaGlzdG9yeSBPTkxZIDQgcC5tLiAtIDggcC5tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3Bhbj5ObyBjaGVja291dHMgYWZ0ZXIgMTE6NDUgcC5tLjwvc3Bhbj48L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFsbCBzZXJ2aWNlcyBjbG9zZWQgMTA6NDUgdG8gbm9vbiBvbiBUdWVzZGF5czwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImhibGwtaGVhZGVyLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJoYmxsLWhlYWRlci1oZWFkZXJcIj5VcGNvbWluZyBFeGNlcHRpb25zPC9oMj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGhvdXJzRXhjZXB0aW9ucyQgfCBhc3luYzsgYXMgZXhjZXB0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGJsbC1oZWFkZXItZGV0YWlsXCIgZGF0YS10ZXN0aWQ9XCJleGNlcHRpb25zRGV0YWlsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChleGNlcHRpb24gb2YgZXhjZXB0aW9uczsgdHJhY2sgZXhjZXB0aW9uLmRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJoYmxsLWhlYWRlci1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGV4Y2VwdGlvbi5kYXRlIHwgZGF0ZTogJ01NTS4gZCwgWVlZWScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZW1wdHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHVwY29taW5nIGV4Y2VwdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoYmxsLWhlYWRlci1ob3Vyc1wiIGRhdGEtdGVzdGlkPVwiZXhjZXB0aW9uc0hvdXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChleGNlcHRpb24gb2YgZXhjZXB0aW9uczsgdHJhY2sgZXhjZXB0aW9uLmRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGJsbC1oZWFkZXItaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImV4Y2VwdGlvbi5leGNlcHRpb25fdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImV4Y2VwdGlvbi5leGNlcHRpb25fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBleGNlcHRpb24uZXhjZXB0aW9uX3RpdGxlIHwgdHJ1bmNhdGU6MzI6Jy4uLicgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWItc3Bpbm5lclwiIGRhdGEtdGVzdGlkPVwiZXhjZXB0aW9uc1NwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImhibGwtaGVhZGVyLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJoYmxsLWhlYWRlci1oZWFkZXJcIj5MaWJyYXJ5IENhZmU8L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoYmxsLWhlYWRlci1kZXRhaWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiaGJsbC1oZWFkZXItaXRlbVwiPkJhZ2VsIEJ1YmJsZTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImhibGwtaGVhZGVyLWl0ZW1cIj5Qcm92ZWNobzwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhibGwtaGVhZGVyLWhvdXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoYmxsLWhlYWRlci1pdGVtXCI+NyBhLm0gLSAxMSBwLm0uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoYmxsLWhlYWRlci1pdGVtXCI+MTA6MzAgYS5tIC0gMiBwLm0uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJtYWluc2l0ZWJhc2V1cmwgKyAnL2Fib3V0L2hvdXJzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlNlZSBhbGwgaG91cnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2hldnJvbl9yaWdodCA8L3NwYW4+PC9hXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgaWQ9XCJhY2NvdW50SW5mb1wiICNhY2NvdW50SW5mbz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXNMb2dnZWRJbiA/IChzaG93QWNjb3VudERyb3Bkb3duID0gIXNob3dBY2NvdW50RHJvcGRvd24pIDogbG9naW4uZW1pdCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhibGwtaGVhZGVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgIGlkPVwiYWNjb3VudEJ0blwiXG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJhY2NvdW50QnRuXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaGJsbC1oZWFkZXItbGVmdC1pY29uXCI+IHBlcnNvbiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgQGlmICghaXNTY3JlZW5TbWFsbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGJsbC1oZWFkZXItbmFtZVwiIGRhdGEtdGVzdGlkPVwibmFtZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xvZ2dlZEluID8gJyZuYnNwOycgKyBuYW1lIDogJ0xvZ2luJ1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChpc0xvZ2dlZEluKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIGRhdGEtdGVzdGlkPVwibG9naW5Ecm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dfZHJvcF9kb3duXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIEBpZiAoaXNMb2dnZWRJbiAmJiBzaG93QWNjb3VudERyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBAbGliSGJsbEZhZGVJbk91dCBpZD1cImFjY291bnREcm9wZG93blwiIGRhdGEtdGVzdGlkPVwiYWNjb3VudERyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cIm1haW5zaXRlYmFzZXVybCArICcvYWNjb3VudCdcIj5NeSBBY2NvdW50PC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJtYWluc2l0ZWJhc2V1cmwgKyAnL2FjY291bnQnXCI+TXkgSXRlbXM8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cIm1haW5zaXRlYmFzZXVybCArICcvYWNjb3VudC9yZXF1ZXN0J1wiPlJlcXVlc3QgYW4gaXRlbTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwibWFpbnNpdGViYXNldXJsICsgJy9hY2NvdW50L3NhdmVkJ1wiPlNhdmVkPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJtYWluc2l0ZWJhc2V1cmwgKyAnL2FjY291bnQvY291cnNlJ1wiPkNvdXJzZXM8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cIm1haW5zaXRlYmFzZXVybCArICcvYWNjb3VudC9yb29tcydcIj5Sb29tczwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwibWFpbnNpdGViYXNldXJsICsgJy9hY2NvdW50L3ByZWZlcmVuY2VzJ1wiPlByZWZlcmVuY2VzPC9hPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dJbXBlcnNvbmF0ZUJ1dHRvbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5JbXBlcnNvbmF0aW9uTW9kYWwuZW1pdCgpOyBzaG93QWNjb3VudERyb3Bkb3duID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGJsbC1oZWFkZXItaW1wZXJzb25hdGUtYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbXBlcnNvbmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9nb3V0LmVtaXQoKVwiIGRhdGEtdGVzdGlkPVwibG9nb3V0XCI+TG9nb3V0PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKGlzU2NyZWVuU21hbGwoKSkge1xuICAgICAgICAgICAgPGRpdiBpZD1cIm1vYmlsZU5hdlwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoYmxsLWhlYWRlci13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2JpbGVOYXZCdG5cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNpZGViYXJOYXYoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaGJsbC1oZWFkZXItaWNvblwiPiBtZW51IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dOYXZCYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJuYXZXcmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9iaWxlTmF2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtAbGliSGJsbFNsaWRlSW5PdXRSaWdodExlZnRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgeE9mZnNldDogJzQwMHB4JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNsb3NlTW9iaWxlTmF2QnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhibGwtaGVhZGVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY2xvc2VNb2JpbGVOYXZCdG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZVNpZGViYXJOYXYoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGhibGwtaGVhZGVyLWljb25cIj4gY2xvc2UgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLW5hdi1iYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWFpblNpdGVCYXNlVXJsXT1cIm1haW5zaXRlYmFzZXVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCJtb2JpbGVTaWRlYmFySGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBAbGliSGJsbEZhZGVJbk91dFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dOYXZCYXIgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhibGwtbmF2LWJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9iaWxlTmF2QmFja2Ryb3BcIlxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvaGVhZGVyPlxuXG5AaWYgKCFpc1NjcmVlblNtYWxsKCkpIHtcbiAgICA8ZGl2IGlkPVwibWFpbk5hdlwiPlxuICAgICAgICA8bGliLW5hdi1iYXIgW21haW5TaXRlQmFzZVVybF09XCJtYWluc2l0ZWJhc2V1cmxcIiAvPlxuICAgIDwvZGl2PlxufVxuQGlmIChpc1NjcmVlblNtYWxsKCkpIHtcbiAgICA8YVxuICAgICAgICBpZD1cIm1vYmlsZUxpYnJhcnlIb3Vyc1wiXG4gICAgICAgIFtocmVmXT1cIm1haW5zaXRlYmFzZXVybCArICcvYWJvdXQvaG91cnMnXCJcbiAgICAgICAgY2xhc3M9XCJoYmxsLWhlYWRlci13cmFwcGVyXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2JpbGVIb3Vyc1wiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaG91cnNUZXh0QmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2E+XG59XG5cbjxuZy10ZW1wbGF0ZSAjaG91cnNUZXh0QmxvY2s+XG4gICAgQGlmIChsaWJyYXJ5SG91cnMoKSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaGJsbC1oZWFkZXItbGVmdC1pY29uXCI+IHNjaGVkdWxlIDwvc3Bhbj5cbiAgICAgICAge3tcbiAgICAgICAgICAgIGxpYnJhcnlIb3VycygpPy5pc19jbG9zZWRcbiAgICAgICAgICAgICAgICA/ICdDTE9TRUQnXG4gICAgICAgICAgICAgICAgOiBcIlRvZGF5J3MgaG91cnM6IFwiICtcbiAgICAgICAgICAgICAgICAgIChsaWJyYXJ5SG91cnMoKSEuZGF0ZSB8IGxpYnJhcnlIb3VyczogbGlicmFyeUhvdXJzKCkhLm9wZW5fdGltZSkgK1xuICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgKGxpYnJhcnlIb3VycygpIS5kYXRlIHwgbGlicmFyeUhvdXJzOiBsaWJyYXJ5SG91cnMoKSEuY2xvc2VfdGltZSlcbiAgICAgICAgfX1cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuIl19
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGJsbC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2hibGwtaGVhZGVyL2hibGwtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oYmxsLWhlYWRlci9oYmxsLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FB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QkFDSSxpQkFBaUIsY0FDZixJQUFJLFdBQ1A7d0JBQ0wsUUFBUTt3QkFDUixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixlQUFlO3dCQUNmLHVCQUF1Qjt3QkFDdkIsWUFBWTtxQkFDZixjQUdXLENBQUMsMEJBQTBCLEVBQUUsZ0JBQWdCLENBQUM7OEJBU3JDLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFJVixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFHSSxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkEwREMsUUFBUTtzQkFEZixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgRGF0ZVBpcGUsIERPQ1VNRU5ULCBMb3dlckNhc2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NoaWxkLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2QmFyQ29tcG9uZW50IH0gZnJvbSAnLi9uYXYtYmFyL25hdi1iYXIuY29tcG9uZW50JztcbmltcG9ydCB7IGxpYkhibGxGYWRlSW5PdXQsIGxpYkhibGxTbGlkZUluT3V0UmlnaHRMZWZ0IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9hbmltYXRpb25zJztcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgaXNTY3JlZW5TbWFsbFNpZ25hbCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IExpYnJhcnlIb3Vyc1BpcGUgfSBmcm9tICcuL3BpcGVzL2xpYnJhcnktaG91cnMucGlwZSc7XG5pbXBvcnQgeyBtYXAsIG9mLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFeHBhbmRDb2xsYXBzZUNvbXBvbmVudCB9IGZyb20gJy4uL2V4cGFuZC1jb2xsYXBzZS9leHBhbmQtY29sbGFwc2UuY29tcG9uZW50JztcbmltcG9ydCB7IExpYnJhcnlIb3VycyB9IGZyb20gJy4vbW9kZWxzL2xpYnJhcnktaG91cnMnO1xuaW1wb3J0IHsgVHJ1bmNhdGVQaXBlIH0gZnJvbSAnLi9waXBlcy90cnVuY2F0ZS5waXBlJztcblxuZXhwb3J0IGNvbnN0IExJQlJBUllfSE9VUlNfQVBJX1VSTCA9ICdodHRwczovL2FwcHMubGliLmJ5dS5lZHUvbGlicmFyeWhvdXJzL2FwaS9ob3Vycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWhibGwtaGVhZGVyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRGF0ZVBpcGUsXG4gICAgICAgIExvd2VyQ2FzZVBpcGUsXG4gICAgICAgIExpYnJhcnlIb3Vyc1BpcGUsXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTmF2QmFyQ29tcG9uZW50LFxuICAgICAgICBFeHBhbmRDb2xsYXBzZUNvbXBvbmVudCxcbiAgICAgICAgVHJ1bmNhdGVQaXBlLFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hibGwtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vaGJsbC1oZWFkZXIuY29tcG9uZW50LnNjc3MnLFxuICAgIGFuaW1hdGlvbnM6IFtsaWJIYmxsU2xpZGVJbk91dFJpZ2h0TGVmdCwgbGliSGJsbEZhZGVJbk91dF0sXG59KVxuZXhwb3J0IGNsYXNzIEhibGxIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHIyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gICAgLy8gVE9ETzogZG9lcyB0aGlzIGluY3JlYXNlIGJ1bmRsZSBzaXplIG1vcmUgdGhhbiBpdCdzIHdvcnRoPyB2cyBmZXRjaD9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBibyA9IGluamVjdChCcmVha3BvaW50T2JzZXJ2ZXIpO1xuICAgIHByaXZhdGUgZG9jID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlcicpIGhlYWRlciE6IEVsZW1lbnRSZWY7XG5cbiAgICAvLyAtLS0gQVBJIC0tLVxuICAgIC8vIFRPRE86IENvbnZlcnQgdGhlc2UgdG8gc2lnbmFsIGlucHV0czogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvNTc3NTVcbiAgICBASW5wdXQoKSBuYW1lID0gJyc7XG4gICAgQElucHV0KCkgbWFpbnNpdGViYXNldXJsID0gJ2h0dHBzOi8vbGliLmJ5dS5lZHUnO1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBzaW5nYWwgaW5wdXQgY3VycmVudGx5IGJlY2F1c2UgaXQgd29uJ3QgYmUgdXNlZCBieSBhbnkgb3RoZXIgYXBwbGljYXRpb25zIHRoYW4gQW5ndWxhciBvbmVzLlxuICAgIHNob3dJbXBlcnNvbmF0ZUJ1dHRvbiA9IGlucHV0KGZhbHNlKTtcbiAgICBAT3V0cHV0KCkgb3BlbkltcGVyc29uYXRpb25Nb2RhbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgbG9naW4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIGxvZ291dCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvLyAtLS0tLS0tLS0tLVxuICAgIHByaXZhdGUgZm9ybWF0RGF0ZUZvckhvdXJzID0gKGRhdGU6IERhdGUpID0+XG4gICAgICAgIGAke2RhdGUuZ2V0RnVsbFllYXIoKX0tJHtTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKX0tJHtTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICBwcml2YXRlIGFjY291bnRJbmZvRWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2FjY291bnRJbmZvJyk7XG4gICAgcHJpdmF0ZSBob3Vyc0VsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdob3VycycpO1xuXG4gICAgcHJvdGVjdGVkIGdldCBpc0xvZ2dlZEluKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgLy8gSG91cnNcbiAgICBwcm90ZWN0ZWQgbGlicmFyeUhvdXJzID0gdG9TaWduYWwodGhpcy5odHRwLmdldDxMaWJyYXJ5SG91cnM+KExJQlJBUllfSE9VUlNfQVBJX1VSTCkpO1xuICAgIHByb3RlY3RlZCBob3Vyc0V4Y2VwdGlvbnMkID0gb2YobnVsbCkucGlwZShcbiAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEdldCBleGNlcHRpb25zIGZyb20gdG9kYXkgdG8gdHdvIG1vbnRocyBvdXRcbiAgICAgICAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5mb3JtYXREYXRlRm9ySG91cnModG9kYXkpO1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBuZXdEYXRlLnNldE1vbnRoKHRvZGF5LmdldE1vbnRoKCkgKyAyKTtcbiAgICAgICAgICAgIGNvbnN0IHN0b3AgPSB0aGlzLmZvcm1hdERhdGVGb3JIb3VycyhuZXdEYXRlKTtcbiAgICAgICAgICAgIHJldHVybiBbc3RhcnQsIHN0b3BdO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKChbc3RhcnQsIHN0b3BdOiBzdHJpbmdbXSkgPT5cbiAgICAgICAgICAgIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgIC5nZXQ8TGlicmFyeUhvdXJzW10+KGAke0xJQlJBUllfSE9VUlNfQVBJX1VSTH0/c3RhcnQ9JHtzdGFydH0mc3RvcD0ke3N0b3B9YClcbiAgICAgICAgICAgICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzLmZpbHRlcigoZGF5KSA9PiBkYXkuaGFzX2V4Y2VwdGlvbikuc2xpY2UoMCwgNSkpKSxcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSksXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCBzaG93QWNjb3VudERyb3Bkb3duID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIHNob3dMaWJyYXJ5SG91cnMgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgbW9iaWxlU2lkZWJhckhlaWdodCA9IDA7XG4gICAgcHJvdGVjdGVkIHNob3dOYXZCYXIgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgaXNTY3JlZW5TbWFsbCA9IGlzU2NyZWVuU21hbGxTaWduYWwodGhpcy5ibyk7XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucjIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hY2NvdW50SW5mb0VsKCk/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpKVxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0FjY291bnREcm9wZG93biA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmhvdXJzRWwoKT8ubmF0aXZlRWxlbWVudC5jb250YWlucyhlLnRhcmdldCkpIHRoaXMuc2hvd0xpYnJhcnlIb3VycyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXRNb2JpbGVTaWRlYmFySGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9wZW5TaWRlYmFyTmF2ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dOYXZCYXIgPSB0cnVlO1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgIHRoaXMucjIuc2V0U3R5bGUodGhpcy5kb2MuYm9keSwgJ292ZXJmbG93JywgJ2hpZGRlbicpO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgY2xvc2VTaWRlYmFyTmF2ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dOYXZCYXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yMi5yZW1vdmVTdHlsZSh0aGlzLmRvYy5ib2R5LCAnb3ZlcmZsb3cnKTtcbiAgICB9O1xuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gICAgcHJpdmF0ZSBvblJlc2l6ZSgpIHtcbiAgICAgICAgdGhpcy5zZXRNb2JpbGVTaWRlYmFySGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRNb2JpbGVTaWRlYmFySGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSB0aGlzLmhlYWRlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcblxuICAgICAgICAvLyBUT0RPOiByZW1vdmUgYmFubmVyIGNvZGUgYWZ0ZXIgYmFubmVyIGlzIHJlbW92ZWQgZnJvbSBiZXRhXG4gICAgICAgIGNvbnN0IGJhbm5lckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYmV0YS1uYXZpZ2F0aW9uLWJhbm5lcicpO1xuICAgICAgICBjb25zdCBiYW5uZXJIZWlnaHQgPSBiYW5uZXJFbGVtZW50ID8gYmFubmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgfHwgMCA6IDA7XG5cbiAgICAgICAgdGhpcy5tb2JpbGVTaWRlYmFySGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gaGVhZGVySGVpZ2h0IC0gYmFubmVySGVpZ2h0O1xuICAgIH07XG5cbiAgICBmb2N1c01haW5Db250ZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtYWluQ29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYWluLWNvbnRlbnQnKSBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBpZiAobWFpbkNvbnRlbnQpIHtcbiAgICAgICAgICAgIG1haW5Db250ZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtYWluQ29udGVudEFyaWEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICdbYXJpYS1sYWJlbD1cIk1haW4gY29udGVudCBhcmVhXCJdJyxcbiAgICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmIChtYWluQ29udGVudEFyaWEpIHtcbiAgICAgICAgICAgICAgICBtYWluQ29udGVudEFyaWEuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxoZWFkZXJcbiAgICByb2xlPVwiYmFubmVyXCJcbiAgICBjbGFzcz1cImhibGwtaGVhZGVyLXdyYXBwZXJcIlxuICAgICNoZWFkZXJcbiAgICBbbmdDbGFzc109XCJ7ICdoYmxsLWhlYWRlci1kZXNrdG9wJzogIWlzU2NyZWVuU21hbGwoKSB9XCJcbj5cbiAgICA8YSBbaHJlZl09XCJtYWluc2l0ZWJhc2V1cmxcIj5cbiAgICAgICAgPGgxPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vbWVkaWEubGliLmJ5dS5lZHUvd2ViLWFzc2V0cy9pbWFnZXMvMi4wLjAvYnl1LWhibGwtbG9nby1mdWxsLnN2Z1wiXG4gICAgICAgICAgICAgICAgYWx0PVwiQllVIExpYnJhcnkgTG9nb1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2gxPlxuICAgIDwvYT5cbiAgICA8YnV0dG9uIChjbGljayk9XCJmb2N1c01haW5Db250ZW50KClcIiBjbGFzcz1cInNraXAtbGlua1wiPlNraXAgdG8gbWFpbiBjb250ZW50PC9idXR0b24+XG4gICAgPGRpdiBpZD1cImxpYnJhcnlJbmZvXCIgY2xhc3M9XCJoYmxsLWhlYWRlci13cmFwcGVyXCI+XG4gICAgICAgIEBpZiAoIWlzU2NyZWVuU21hbGwoKSkge1xuICAgICAgICAgICAgPGRpdiAjaG91cnMgaWQ9XCJtYWluTGlicmFyeUhvdXJzXCIgZGF0YS10ZXN0aWQ9XCJkZXNrdG9wSG91cnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93TGlicmFyeUhvdXJzID0gIXNob3dMaWJyYXJ5SG91cnNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhibGwtaGVhZGVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImhvdXJzQnRuXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJob3Vyc1RleHRCbG9ja1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIEBpZiAoIWlzU2NyZWVuU21hbGwoKSAmJiBzaG93TGlicmFyeUhvdXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIEBsaWJIYmxsRmFkZUluT3V0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImxpYnJhcnlIb3Vyc0Ryb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibGlicmFyeUhvdXJzRHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImhibGwtaGVhZGVyLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJoYmxsLWhlYWRlci1oZWFkZXJcIj5SZWd1bGFyIEhvdXJzPC9oMj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGJsbC1oZWFkZXItZGV0YWlsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImhibGwtaGVhZGVyLWl0ZW1cIj5Nb25kYXkgLSBGcmlkYXk8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJoYmxsLWhlYWRlci1pdGVtXCI+U2F0dXJkYXk8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJoYmxsLWhlYWRlci1pdGVtXCI+U3VuZGF5PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGJsbC1oZWFkZXItaG91cnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhibGwtaGVhZGVyLWl0ZW1cIj43OjAwIGEubS4gLSAxMTo0NSBwLm0uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoYmxsLWhlYWRlci1pdGVtXCI+ODowMCBhLm0uIC0gMTE6NDUgcC5tLjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGJsbC1oZWFkZXItaXRlbVwiPkNsb3NlZCo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGJsbC1oZWFkZXItaG91cnMtbm90ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEZhbWlseSBoaXN0b3J5IE9OTFkgNDowMCBwLm0uIC0gODowMCBwLm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuPk5vIGNoZWNrb3V0cyBhZnRlciAxMTo0NSBwLm0uPC9zcGFuPjwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QWxsIHNlcnZpY2VzIGNsb3NlZCAxMDo0NSB0byBub29uIG9uIFR1ZXNkYXlzPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiaGJsbC1oZWFkZXItc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImhibGwtaGVhZGVyLWhlYWRlclwiPlVwY29taW5nIEV4Y2VwdGlvbnM8L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaG91cnNFeGNlcHRpb25zJCB8IGFzeW5jOyBhcyBleGNlcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoYmxsLWhlYWRlci1kZXRhaWxcIiBkYXRhLXRlc3RpZD1cImV4Y2VwdGlvbnNEZXRhaWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGV4Y2VwdGlvbiBvZiBleGNlcHRpb25zOyB0cmFjayBleGNlcHRpb24uZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImhibGwtaGVhZGVyLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZXhjZXB0aW9uLmRhdGUgfCBkYXRlOiAnTU1NLiBkLCBZWVlZJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbXB0eSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gdXBjb21pbmcgZXhjZXB0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhibGwtaGVhZGVyLWhvdXJzXCIgZGF0YS10ZXN0aWQ9XCJleGNlcHRpb25zSG91cnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGV4Y2VwdGlvbiBvZiBleGNlcHRpb25zOyB0cmFjayBleGNlcHRpb24uZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoYmxsLWhlYWRlci1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiZXhjZXB0aW9uLmV4Y2VwdGlvbl90aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZXhjZXB0aW9uLmV4Y2VwdGlvbl90aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGV4Y2VwdGlvbi5leGNlcHRpb25fdGl0bGUgfCB0cnVuY2F0ZTozMjonLi4uJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYi1zcGlubmVyXCIgZGF0YS10ZXN0aWQ9XCJleGNlcHRpb25zU3Bpbm5lclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiaGJsbC1oZWFkZXItc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImhibGwtaGVhZGVyLWhlYWRlclwiPkxpYnJhcnkgQ2FmZTwvaDI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhibGwtaGVhZGVyLWRldGFpbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJoYmxsLWhlYWRlci1pdGVtXCI+QmFnZWwgQnViYmxlPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiaGJsbC1oZWFkZXItaXRlbVwiPlByb3ZlY2hvPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGJsbC1oZWFkZXItaG91cnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhibGwtaGVhZGVyLWl0ZW1cIj43OjAwIGEubS4gLSAxMTowMCBwLm0uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoYmxsLWhlYWRlci1pdGVtXCI+MTA6MzAgYS5tLiAtIDI6MDAgcC5tLjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwibWFpbnNpdGViYXNldXJsICsgJy9hYm91dC9ob3VycydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5TZWUgYWxsIGhvdXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNoZXZyb25fcmlnaHQgPC9zcGFuPjwvYVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGlkPVwiYWNjb3VudEluZm9cIiAjYWNjb3VudEluZm8+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzTG9nZ2VkSW4gPyAoc2hvd0FjY291bnREcm9wZG93biA9ICFzaG93QWNjb3VudERyb3Bkb3duKSA6IGxvZ2luLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoYmxsLWhlYWRlci13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICBpZD1cImFjY291bnRCdG5cIlxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiYWNjb3VudEJ0blwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGhibGwtaGVhZGVyLWxlZnQtaWNvblwiPiBwZXJzb24gPC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoIWlzU2NyZWVuU21hbGwoKSkge1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhibGwtaGVhZGVyLW5hbWVcIiBkYXRhLXRlc3RpZD1cIm5hbWVcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2dnZWRJbiA/ICcmbmJzcDsnICsgbmFtZSA6ICdMb2dpbidcbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoaXNMb2dnZWRJbikge1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBkYXRhLXRlc3RpZD1cImxvZ2luRHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFycm93X2Ryb3BfZG93blxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICBAaWYgKGlzTG9nZ2VkSW4gJiYgc2hvd0FjY291bnREcm9wZG93bikge1xuICAgICAgICAgICAgICAgIDxkaXYgQGxpYkhibGxGYWRlSW5PdXQgaWQ9XCJhY2NvdW50RHJvcGRvd25cIiBkYXRhLXRlc3RpZD1cImFjY291bnREcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJtYWluc2l0ZWJhc2V1cmwgKyAnL2FjY291bnQnXCI+TXkgQWNjb3VudDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwibWFpbnNpdGViYXNldXJsICsgJy9hY2NvdW50J1wiPk15IEl0ZW1zPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJtYWluc2l0ZWJhc2V1cmwgKyAnL2FjY291bnQvcmVxdWVzdCdcIj5SZXF1ZXN0IGFuIGl0ZW08L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cIm1haW5zaXRlYmFzZXVybCArICcvYWNjb3VudC9zYXZlZCdcIj5TYXZlZDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwibWFpbnNpdGViYXNldXJsICsgJy9hY2NvdW50L2NvdXJzZSdcIj5Db3Vyc2VzPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJtYWluc2l0ZWJhc2V1cmwgKyAnL2FjY291bnQvcm9vbXMnXCI+Um9vbXM8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cIm1haW5zaXRlYmFzZXVybCArICcvYWNjb3VudC9wcmVmZXJlbmNlcydcIj5QcmVmZXJlbmNlczwvYT5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93SW1wZXJzb25hdGVCdXR0b24oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW1wZXJzb25hdGlvbk1vZGFsLmVtaXQoKTsgc2hvd0FjY291bnREcm9wZG93biA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhibGwtaGVhZGVyLWltcGVyc29uYXRlLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wZXJzb25hdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvZ291dC5lbWl0KClcIiBkYXRhLXRlc3RpZD1cImxvZ291dFwiPkxvZ291dDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChpc1NjcmVlblNtYWxsKCkpIHtcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJtb2JpbGVOYXZcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGJsbC1oZWFkZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9iaWxlTmF2QnRuXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5TaWRlYmFyTmF2KClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGhibGwtaGVhZGVyLWljb25cIj4gbWVudSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgQGlmIChzaG93TmF2QmFyKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibmF2V3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vYmlsZU5hdlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbQGxpYkhibGxTbGlkZUluT3V0UmlnaHRMZWZ0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IHhPZmZzZXQ6ICc0MDBweCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjbG9zZU1vYmlsZU5hdkJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoYmxsLWhlYWRlci13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImNsb3NlTW9iaWxlTmF2QnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VTaWRlYmFyTmF2KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBoYmxsLWhlYWRlci1pY29uXCI+IGNsb3NlIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1uYXYtYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21haW5TaXRlQmFzZVVybF09XCJtYWluc2l0ZWJhc2V1cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwibW9iaWxlU2lkZWJhckhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgQGxpYkhibGxGYWRlSW5PdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93TmF2QmFyID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoYmxsLW5hdi1iYWNrZHJvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vYmlsZU5hdkJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9kaXY+XG48L2hlYWRlcj5cblxuQGlmICghaXNTY3JlZW5TbWFsbCgpKSB7XG4gICAgPGRpdiBpZD1cIm1haW5OYXZcIj5cbiAgICAgICAgPGxpYi1uYXYtYmFyIFttYWluU2l0ZUJhc2VVcmxdPVwibWFpbnNpdGViYXNldXJsXCIgLz5cbiAgICA8L2Rpdj5cbn1cbkBpZiAoaXNTY3JlZW5TbWFsbCgpKSB7XG4gICAgPGFcbiAgICAgICAgaWQ9XCJtb2JpbGVMaWJyYXJ5SG91cnNcIlxuICAgICAgICBbaHJlZl09XCJtYWluc2l0ZWJhc2V1cmwgKyAnL2Fib3V0L2hvdXJzJ1wiXG4gICAgICAgIGNsYXNzPVwiaGJsbC1oZWFkZXItd3JhcHBlclwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwibW9iaWxlSG91cnNcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhvdXJzVGV4dEJsb2NrXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9hPlxufVxuXG48bmctdGVtcGxhdGUgI2hvdXJzVGV4dEJsb2NrPlxuICAgIEBpZiAobGlicmFyeUhvdXJzKCkpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGhibGwtaGVhZGVyLWxlZnQtaWNvblwiPiBzY2hlZHVsZSA8L3NwYW4+XG4gICAgICAgIHt7XG4gICAgICAgICAgICBsaWJyYXJ5SG91cnMoKT8uaXNfY2xvc2VkXG4gICAgICAgICAgICAgICAgPyAnQ0xPU0VEJ1xuICAgICAgICAgICAgICAgIDogXCJUb2RheSdzIGhvdXJzOiBcIiArXG4gICAgICAgICAgICAgICAgICAobGlicmFyeUhvdXJzKCkhLmRhdGUgfCBsaWJyYXJ5SG91cnM6IGxpYnJhcnlIb3VycygpIS5vcGVuX3RpbWUpICtcbiAgICAgICAgICAgICAgICAgICcgLSAnICtcbiAgICAgICAgICAgICAgICAgIChsaWJyYXJ5SG91cnMoKSEuZGF0ZSB8IGxpYnJhcnlIb3VyczogbGlicmFyeUhvdXJzKCkhLmNsb3NlX3RpbWUpXG4gICAgICAgIH19XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -5,16 +5,16 @@ export class LibraryHoursPipe {
5
5
  transform(date, time) {
6
6
  let newTime = null;
7
7
  try {
8
- newTime = new DatePipe('en-US').transform(new Date(date + 'T' + time), 'ha');
8
+ newTime = new DatePipe('en-US').transform(new Date(date + 'T' + time), 'h:mm a');
9
9
  }
10
10
  catch (e) {
11
11
  return newTime;
12
12
  }
13
- if (newTime === '12AM')
13
+ if (newTime === '12:00 AM')
14
14
  newTime = 'Midnight';
15
15
  else if (newTime) {
16
- newTime = newTime.replace('AM', ' a.m.');
17
- newTime = newTime.replace('PM', ' p.m.');
16
+ newTime = newTime.replace('AM', 'a.m.');
17
+ newTime = newTime.replace('PM', 'p.m.');
18
18
  }
19
19
  return newTime;
20
20
  }
@@ -28,4 +28,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
28
28
  standalone: true,
29
29
  }]
30
30
  }] });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS1ob3Vycy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2hibGwtaGVhZGVyL3BpcGVzL2xpYnJhcnktaG91cnMucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBTXBELE1BQU0sT0FBTyxnQkFBZ0I7SUFDekIsU0FBUyxDQUFDLElBQVksRUFBRSxJQUFZO1FBQ2hDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUM7WUFDRCxPQUFPLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDVCxPQUFPLE9BQU8sQ0FBQztRQUNuQixDQUFDO1FBQ0QsSUFBSSxPQUFPLEtBQUssTUFBTTtZQUFFLE9BQU8sR0FBRyxVQUFVLENBQUM7YUFDeEMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNmLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6QyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7OEdBZFEsZ0JBQWdCOzRHQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBSjVCLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdsaWJyYXJ5SG91cnMnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIExpYnJhcnlIb3Vyc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0oZGF0ZTogc3RyaW5nLCB0aW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgbGV0IG5ld1RpbWUgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3VGltZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKS50cmFuc2Zvcm0obmV3IERhdGUoZGF0ZSArICdUJyArIHRpbWUpLCAnaGEnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ld1RpbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1RpbWUgPT09ICcxMkFNJykgbmV3VGltZSA9ICdNaWRuaWdodCc7XG4gICAgICAgIGVsc2UgaWYgKG5ld1RpbWUpIHtcbiAgICAgICAgICAgIG5ld1RpbWUgPSBuZXdUaW1lLnJlcGxhY2UoJ0FNJywgJyBhLm0uJyk7XG4gICAgICAgICAgICBuZXdUaW1lID0gbmV3VGltZS5yZXBsYWNlKCdQTScsICcgcC5tLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdUaW1lO1xuICAgIH1cbn1cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS1ob3Vycy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2hibGwtaGVhZGVyL3BpcGVzL2xpYnJhcnktaG91cnMucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBTXBELE1BQU0sT0FBTyxnQkFBZ0I7SUFDekIsU0FBUyxDQUFDLElBQVksRUFBRSxJQUFZO1FBQ2hDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUM7WUFDRCxPQUFPLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckYsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDVCxPQUFPLE9BQU8sQ0FBQztRQUNuQixDQUFDO1FBQ0QsSUFBSSxPQUFPLEtBQUssVUFBVTtZQUFFLE9BQU8sR0FBRyxVQUFVLENBQUM7YUFDNUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNmLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN4QyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7OEdBZFEsZ0JBQWdCOzRHQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBSjVCLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdsaWJyYXJ5SG91cnMnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIExpYnJhcnlIb3Vyc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0oZGF0ZTogc3RyaW5nLCB0aW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgbGV0IG5ld1RpbWUgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3VGltZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKS50cmFuc2Zvcm0obmV3IERhdGUoZGF0ZSArICdUJyArIHRpbWUpLCAnaDptbSBhJyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXdUaW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdUaW1lID09PSAnMTI6MDAgQU0nKSBuZXdUaW1lID0gJ01pZG5pZ2h0JztcbiAgICAgICAgZWxzZSBpZiAobmV3VGltZSkge1xuICAgICAgICAgICAgbmV3VGltZSA9IG5ld1RpbWUucmVwbGFjZSgnQU0nLCAnYS5tLicpO1xuICAgICAgICAgICAgbmV3VGltZSA9IG5ld1RpbWUucmVwbGFjZSgnUE0nLCAncC5tLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdUaW1lO1xuICAgIH1cbn1cbiJdfQ==