{"version":3,"sources":["../../.yarn/cache/browser-pack-npm-6.1.0-67557e011b-9e5993d3ee.zip/node_modules/browser-pack/_prelude.js","../../.yarn/cache/he-npm-1.2.0-3b73a2ff07-3d4d6babcc.zip/node_modules/he/he.js","../../.yarn/cache/querystring-es3-npm-0.2.1-f4632f2760-691e8d6b8b.zip/node_modules/querystring-es3/decode.js","../../.yarn/cache/querystring-es3-npm-0.2.1-f4632f2760-691e8d6b8b.zip/node_modules/querystring-es3/encode.js","../../.yarn/cache/querystring-es3-npm-0.2.1-f4632f2760-691e8d6b8b.zip/node_modules/querystring-es3/index.js","../../.yarn/cache/underscore-npm-1.13.6-3ebe9d92fb-d5cedd14a9.zip/node_modules/underscore/underscore-umd.js","../common/lib/configuration/websiteIds.json","business-objects/GeneratedCollectionDetails.js","lib/getOptimizedCover-ts.js","lib/utility/isCanarySite.js","models/dao/MediaParameters.js","public/ecmascript/components/collection_campaign_page/CollectionDefinition.js","public/ecmascript/components/common/HashManager.js","public/ecmascript/components/common/modal.js","public/ecmascript/components/common/templates/modal.html.js","public/ecmascript/components/details_cover_image/main.js","public/ecmascript/components/details_cover_image/views/details_cover_image.js","public/ecmascript/components/details_related_titles/DetailsRelatedTitlesTemplate.html.js","public/ecmascript/components/details_related_titles/DetailsRelatedTitlesView.js","public/ecmascript/components/holdInformation/templates/HoldInformation.html.js","public/ecmascript/components/holdInformation/views/HoldInformation.js","public/ecmascript/components/holdInformation/views/HoldInformationModal.js","public/ecmascript/components/holdInformationV2/HoldInformationModalV2.js","public/ecmascript/components/holdInformationV2/HoldInformationV2.html.js","public/ecmascript/components/holdInformationV2/HoldInformationV2.js","public/ecmascript/components/media/ContextMenu.js","public/ecmascript/components/media/Cover.js","public/ecmascript/components/media/MediaInterface.js","public/ecmascript/components/media/ReadingHistoryButton.js","public/ecmascript/components/media/TitleActionButton.js","public/ecmascript/components/media/TitleCard.js","public/ecmascript/components/media/TitleCollectionView.js","public/ecmascript/components/media/TitleHeaderBar.js","public/ecmascript/components/media/WishListButton.js","public/ecmascript/components/media/models/Title.js","public/ecmascript/components/media/models/TitleCollection.js","public/ecmascript/components/media/templates/ContextMenu.html.js","public/ecmascript/components/media/templates/CopiesAvailable.html.js","public/ecmascript/components/media/templates/Cover.html.js","public/ecmascript/components/media/templates/NoCover.html.js","public/ecmascript/components/media/templates/ReadingHistoryButton.html.js","public/ecmascript/components/media/templates/StarViewTemplate.html.js","public/ecmascript/components/media/templates/TitleAuthor.html.js","public/ecmascript/components/media/templates/TitleCard.html.js","public/ecmascript/components/media/templates/TitleFormatBadge.html.js","public/ecmascript/components/media/templates/TitleName.html.js","public/ecmascript/components/media/templates/WishListButton.html.js","public/ecmascript/components/media/views/TitleInfo.js","public/ecmascript/components/media/views/TitleInfo/CopiesAvailable.js","public/ecmascript/components/media/views/TitleInfo/LuckyDayHolds.js","public/ecmascript/components/media/views/TitleInfo/StarRating.js","public/ecmascript/components/media/views/TitleInfo/StarView.js","public/ecmascript/components/media/views/TitleInfo/TitleAuthor.js","public/ecmascript/components/media/views/TitleInfo/TitleEdition.js","public/ecmascript/components/media/views/TitleInfo/TitleFormatBadge.js","public/ecmascript/components/media/views/TitleInfo/TitleName.js","public/ecmascript/components/media/views/TitleInfo/TitleSeries.js","public/ecmascript/components/not_compatible_format/not-compatible-format-view.html.js","public/ecmascript/components/not_compatible_format/not-compatible-format-view.js","public/ecmascript/components/premium_reviews/main.js","public/ecmascript/components/premium_reviews/models/premium_review.js","public/ecmascript/components/premium_reviews/templates/reviews.html.js","public/ecmascript/components/premium_reviews/views/premium_reviews.js","public/ecmascript/components/recent_issues_drawer/RecentIssuesDrawer.js","public/ecmascript/models/PatronTitleStatus.js","public/ecmascript/models/base.js","public/ecmascript/models/patron_media_items.js","public/ecmascript/pages/details_page.js","public/ecmascript/templates/loader.html.js","public/ecmascript/title-actions/TitleActions.js","public/ecmascript/title-actions/TitleState.js","public/ecmascript/util/keycodes.js","public/ecmascript/util/title-actions/processForwardedAction.js","public/ecmascript/views/base.js"],"names":[],"mappings":"AAAA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1/DA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACLA,IAAM,IAAI,QAAQ,YAAR,CAAV;;AAEA;AACA,OAAO,OAAP;AACI,0CAAc;AAAA;;AACV,aAAK,SAAL,GAA0B,EAA1B;AACA,aAAK,QAAL,GAA0B,EAA1B;AACA,aAAK,iBAAL,GAA0B,IAA1B,CAHU,CAGsB;AAChC,aAAK,cAAL,GAA0B,EAA1B,CAJU,CAIoB;AAC9B,aAAK,QAAL,GAA0B,EAA1B,CALU,CAKoB;AAC9B,aAAK,UAAL,GAA0B,EAA1B;;AAEA,aAAK,MAAL,GAA0B,EAA1B;AACA,aAAK,QAAL,GAA0B,S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","file":"details_page.bundle.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\\u20D2|\\u205F\\u200A|\\u219D\\u0338|\\u2202\\u0338|\\u2220\\u20D2|\\u2229\\uFE00|\\u222A\\uFE00|\\u223C\\u20D2|\\u223D\\u0331|\\u223E\\u0333|\\u2242\\u0338|\\u224B\\u0338|\\u224D\\u20D2|\\u224E\\u0338|\\u224F\\u0338|\\u2250\\u0338|\\u2261\\u20E5|\\u2264\\u20D2|\\u2265\\u20D2|\\u2266\\u0338|\\u2267\\u0338|\\u2268\\uFE00|\\u2269\\uFE00|\\u226A\\u0338|\\u226A\\u20D2|\\u226B\\u0338|\\u226B\\u20D2|\\u227F\\u0338|\\u2282\\u20D2|\\u2283\\u20D2|\\u228A\\uFE00|\\u228B\\uFE00|\\u228F\\u0338|\\u2290\\u0338|\\u2293\\uFE00|\\u2294\\uFE00|\\u22B4\\u20D2|\\u22B5\\u20D2|\\u22D8\\u0338|\\u22D9\\u0338|\\u22DA\\uFE00|\\u22DB\\uFE00|\\u22F5\\u0338|\\u22F9\\u0338|\\u2933\\u0338|\\u29CF\\u0338|\\u29D0\\u0338|\\u2A6D\\u0338|\\u2A70\\u0338|\\u2A7D\\u0338|\\u2A7E\\u0338|\\u2AA1\\u0338|\\u2AA2\\u0338|\\u2AAC\\uFE00|\\u2AAD\\uFE00|\\u2AAF\\u0338|\\u2AB0\\u0338|\\u2AC5\\u0338|\\u2AC6\\u0338|\\u2ACB\\uFE00|\\u2ACC\\uFE00|\\u2AFD\\u20E5|[\\xA0-\\u0113\\u0116-\\u0122\\u0124-\\u012B\\u012E-\\u014D\\u0150-\\u017E\\u0192\\u01B5\\u01F5\\u0237\\u02C6\\u02C7\\u02D8-\\u02DD\\u0311\\u0391-\\u03A1\\u03A3-\\u03A9\\u03B1-\\u03C9\\u03D1\\u03D2\\u03D5\\u03D6\\u03DC\\u03DD\\u03F0\\u03F1\\u03F5\\u03F6\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E\\u045F\\u2002-\\u2005\\u2007-\\u2010\\u2013-\\u2016\\u2018-\\u201A\\u201C-\\u201E\\u2020-\\u2022\\u2025\\u2026\\u2030-\\u2035\\u2039\\u203A\\u203E\\u2041\\u2043\\u2044\\u204F\\u2057\\u205F-\\u2063\\u20AC\\u20DB\\u20DC\\u2102\\u2105\\u210A-\\u2113\\u2115-\\u211E\\u2122\\u2124\\u2127-\\u2129\\u212C\\u212D\\u212F-\\u2131\\u2133-\\u2138\\u2145-\\u2148\\u2153-\\u215E\\u2190-\\u219B\\u219D-\\u21A7\\u21A9-\\u21AE\\u21B0-\\u21B3\\u21B5-\\u21B7\\u21BA-\\u21DB\\u21DD\\u21E4\\u21E5\\u21F5\\u21FD-\\u2205\\u2207-\\u2209\\u220B\\u220C\\u220F-\\u2214\\u2216-\\u2218\\u221A\\u221D-\\u2238\\u223A-\\u2257\\u2259\\u225A\\u225C\\u225F-\\u2262\\u2264-\\u228B\\u228D-\\u229B\\u229D-\\u22A5\\u22A7-\\u22B0\\u22B2-\\u22BB\\u22BD-\\u22DB\\u22DE-\\u22E3\\u22E6-\\u22F7\\u22F9-\\u22FE\\u2305\\u2306\\u2308-\\u2310\\u2312\\u2313\\u2315\\u2316\\u231C-\\u231F\\u2322\\u2323\\u232D\\u232E\\u2336\\u233D\\u233F\\u237C\\u23B0\\u23B1\\u23B4-\\u23B6\\u23DC-\\u23DF\\u23E2\\u23E7\\u2423\\u24C8\\u2500\\u2502\\u250C\\u2510\\u2514\\u2518\\u251C\\u2524\\u252C\\u2534\\u253C\\u2550-\\u256C\\u2580\\u2584\\u2588\\u2591-\\u2593\\u25A1\\u25AA\\u25AB\\u25AD\\u25AE\\u25B1\\u25B3-\\u25B5\\u25B8\\u25B9\\u25BD-\\u25BF\\u25C2\\u25C3\\u25CA\\u25CB\\u25EC\\u25EF\\u25F8-\\u25FC\\u2605\\u2606\\u260E\\u2640\\u2642\\u2660\\u2663\\u2665\\u2666\\u266A\\u266D-\\u266F\\u2713\\u2717\\u2720\\u2736\\u2758\\u2772\\u2773\\u27C8\\u27C9\\u27E6-\\u27ED\\u27F5-\\u27FA\\u27FC\\u27FF\\u2902-\\u2905\\u290C-\\u2913\\u2916\\u2919-\\u2920\\u2923-\\u292A\\u2933\\u2935-\\u2939\\u293C\\u293D\\u2945\\u2948-\\u294B\\u294E-\\u2976\\u2978\\u2979\\u297B-\\u297F\\u2985\\u2986\\u298B-\\u2996\\u299A\\u299C\\u299D\\u29A4-\\u29B7\\u29B9\\u29BB\\u29BC\\u29BE-\\u29C5\\u29C9\\u29CD-\\u29D0\\u29DC-\\u29DE\\u29E3-\\u29E5\\u29EB\\u29F4\\u29F6\\u2A00-\\u2A02\\u2A04\\u2A06\\u2A0C\\u2A0D\\u2A10-\\u2A17\\u2A22-\\u2A27\\u2A29\\u2A2A\\u2A2D-\\u2A31\\u2A33-\\u2A3C\\u2A3F\\u2A40\\u2A42-\\u2A4D\\u2A50\\u2A53-\\u2A58\\u2A5A-\\u2A5D\\u2A5F\\u2A66\\u2A6A\\u2A6D-\\u2A75\\u2A77-\\u2A9A\\u2A9D-\\u2AA2\\u2AA4-\\u2AB0\\u2AB3-\\u2AC8\\u2ACB\\u2ACC\\u2ACF-\\u2ADB\\u2AE4\\u2AE6-\\u2AE9\\u2AEB-\\u2AF3\\u2AFD\\uFB00-\\uFB04]|\\uD835[\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDD6B]/g;\n\tvar encodeMap = {'\\xAD':'shy','\\u200C':'zwnj','\\u200D':'zwj','\\u200E':'lrm','\\u2063':'ic','\\u2062':'it','\\u2061':'af','\\u200F':'rlm','\\u200B':'ZeroWidthSpace','\\u2060':'NoBreak','\\u0311':'DownBreve','\\u20DB':'tdot','\\u20DC':'DotDot','\\t':'Tab','\\n':'NewLine','\\u2008':'puncsp','\\u205F':'MediumSpace','\\u2009':'thinsp','\\u200A':'hairsp','\\u2004':'emsp13','\\u2002':'ensp','\\u2005':'emsp14','\\u2003':'emsp','\\u2007':'numsp','\\xA0':'nbsp','\\u205F\\u200A':'ThickSpace','\\u203E':'oline','_':'lowbar','\\u2010':'dash','\\u2013':'ndash','\\u2014':'mdash','\\u2015':'horbar',',':'comma',';':'semi','\\u204F':'bsemi',':':'colon','\\u2A74':'Colone','!':'excl','\\xA1':'iexcl','?':'quest','\\xBF':'iquest','.':'period','\\u2025':'nldr','\\u2026':'mldr','\\xB7':'middot','\\'':'apos','\\u2018':'lsquo','\\u2019':'rsquo','\\u201A':'sbquo','\\u2039':'lsaquo','\\u203A':'rsaquo','\"':'quot','\\u201C':'ldquo','\\u201D':'rdquo','\\u201E':'bdquo','\\xAB':'laquo','\\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\\u2308':'lceil','\\u2309':'rceil','\\u230A':'lfloor','\\u230B':'rfloor','\\u2985':'lopar','\\u2986':'ropar','\\u298B':'lbrke','\\u298C':'rbrke','\\u298D':'lbrkslu','\\u298E':'rbrksld','\\u298F':'lbrksld','\\u2990':'rbrkslu','\\u2991':'langd','\\u2992':'rangd','\\u2993':'lparlt','\\u2994':'rpargt','\\u2995':'gtlPar','\\u2996':'ltrPar','\\u27E6':'lobrk','\\u27E7':'robrk','\\u27E8':'lang','\\u27E9':'rang','\\u27EA':'Lang','\\u27EB':'Rang','\\u27EC':'loang','\\u27ED':'roang','\\u2772':'lbbrk','\\u2773':'rbbrk','\\u2016':'Vert','\\xA7':'sect','\\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\\u2030':'permil','\\u2031':'pertenk','\\u2020':'dagger','\\u2021':'Dagger','\\u2022':'bull','\\u2043':'hybull','\\u2032':'prime','\\u2033':'Prime','\\u2034':'tprime','\\u2057':'qprime','\\u2035':'bprime','\\u2041':'caret','`':'grave','\\xB4':'acute','\\u02DC':'tilde','^':'Hat','\\xAF':'macr','\\u02D8':'breve','\\u02D9':'dot','\\xA8':'die','\\u02DA':'ring','\\u02DD':'dblac','\\xB8':'cedil','\\u02DB':'ogon','\\u02C6':'circ','\\u02C7':'caron','\\xB0':'deg','\\xA9':'copy','\\xAE':'reg','\\u2117':'copysr','\\u2118':'wp','\\u211E':'rx','\\u2127':'mho','\\u2129':'iiota','\\u2190':'larr','\\u219A':'nlarr','\\u2192':'rarr','\\u219B':'nrarr','\\u2191':'uarr','\\u2193':'darr','\\u2194':'harr','\\u21AE':'nharr','\\u2195':'varr','\\u2196':'nwarr','\\u2197':'nearr','\\u2198':'searr','\\u2199':'swarr','\\u219D':'rarrw','\\u219D\\u0338':'nrarrw','\\u219E':'Larr','\\u219F':'Uarr','\\u21A0':'Rarr','\\u21A1':'Darr','\\u21A2':'larrtl','\\u21A3':'rarrtl','\\u21A4':'mapstoleft','\\u21A5':'mapstoup','\\u21A6':'map','\\u21A7':'mapstodown','\\u21A9':'larrhk','\\u21AA':'rarrhk','\\u21AB':'larrlp','\\u21AC':'rarrlp','\\u21AD':'harrw','\\u21B0':'lsh','\\u21B1':'rsh','\\u21B2':'ldsh','\\u21B3':'rdsh','\\u21B5':'crarr','\\u21B6':'cularr','\\u21B7':'curarr','\\u21BA':'olarr','\\u21BB':'orarr','\\u21BC':'lharu','\\u21BD':'lhard','\\u21BE':'uharr','\\u21BF':'uharl','\\u21C0':'rharu','\\u21C1':'rhard','\\u21C2':'dharr','\\u21C3':'dharl','\\u21C4':'rlarr','\\u21C5':'udarr','\\u21C6':'lrarr','\\u21C7':'llarr','\\u21C8':'uuarr','\\u21C9':'rrarr','\\u21CA':'ddarr','\\u21CB':'lrhar','\\u21CC':'rlhar','\\u21D0':'lArr','\\u21CD':'nlArr','\\u21D1':'uArr','\\u21D2':'rArr','\\u21CF':'nrArr','\\u21D3':'dArr','\\u21D4':'iff','\\u21CE':'nhArr','\\u21D5':'vArr','\\u21D6':'nwArr','\\u21D7':'neArr','\\u21D8':'seArr','\\u21D9':'swArr','\\u21DA':'lAarr','\\u21DB':'rAarr','\\u21DD':'zigrarr','\\u21E4':'larrb','\\u21E5':'rarrb','\\u21F5':'duarr','\\u21FD':'loarr','\\u21FE':'roarr','\\u21FF':'hoarr','\\u2200':'forall','\\u2201':'comp','\\u2202':'part','\\u2202\\u0338':'npart','\\u2203':'exist','\\u2204':'nexist','\\u2205':'empty','\\u2207':'Del','\\u2208':'in','\\u2209':'notin','\\u220B':'ni','\\u220C':'notni','\\u03F6':'bepsi','\\u220F':'prod','\\u2210':'coprod','\\u2211':'sum','+':'plus','\\xB1':'pm','\\xF7':'div','\\xD7':'times','<':'lt','\\u226E':'nlt','<\\u20D2':'nvlt','=':'equals','\\u2260':'ne','=\\u20E5':'bne','\\u2A75':'Equal','>':'gt','\\u226F':'ngt','>\\u20D2':'nvgt','\\xAC':'not','|':'vert','\\xA6':'brvbar','\\u2212':'minus','\\u2213':'mp','\\u2214':'plusdo','\\u2044':'frasl','\\u2216':'setmn','\\u2217':'lowast','\\u2218':'compfn','\\u221A':'Sqrt','\\u221D':'prop','\\u221E':'infin','\\u221F':'angrt','\\u2220':'ang','\\u2220\\u20D2':'nang','\\u2221':'angmsd','\\u2222':'angsph','\\u2223':'mid','\\u2224':'nmid','\\u2225':'par','\\u2226':'npar','\\u2227':'and','\\u2228':'or','\\u2229':'cap','\\u2229\\uFE00':'caps','\\u222A':'cup','\\u222A\\uFE00':'cups','\\u222B':'int','\\u222C':'Int','\\u222D':'tint','\\u2A0C':'qint','\\u222E':'oint','\\u222F':'Conint','\\u2230':'Cconint','\\u2231':'cwint','\\u2232':'cwconint','\\u2233':'awconint','\\u2234':'there4','\\u2235':'becaus','\\u2236':'ratio','\\u2237':'Colon','\\u2238':'minusd','\\u223A':'mDDot','\\u223B':'homtht','\\u223C':'sim','\\u2241':'nsim','\\u223C\\u20D2':'nvsim','\\u223D':'bsim','\\u223D\\u0331':'race','\\u223E':'ac','\\u223E\\u0333':'acE','\\u223F':'acd','\\u2240':'wr','\\u2242':'esim','\\u2242\\u0338':'nesim','\\u2243':'sime','\\u2244':'nsime','\\u2245':'cong','\\u2247':'ncong','\\u2246':'simne','\\u2248':'ap','\\u2249':'nap','\\u224A':'ape','\\u224B':'apid','\\u224B\\u0338':'napid','\\u224C':'bcong','\\u224D':'CupCap','\\u226D':'NotCupCap','\\u224D\\u20D2':'nvap','\\u224E':'bump','\\u224E\\u0338':'nbump','\\u224F':'bumpe','\\u224F\\u0338':'nbumpe','\\u2250':'doteq','\\u2250\\u0338':'nedot','\\u2251':'eDot','\\u2252':'efDot','\\u2253':'erDot','\\u2254':'colone','\\u2255':'ecolon','\\u2256':'ecir','\\u2257':'cire','\\u2259':'wedgeq','\\u225A':'veeeq','\\u225C':'trie','\\u225F':'equest','\\u2261':'equiv','\\u2262':'nequiv','\\u2261\\u20E5':'bnequiv','\\u2264':'le','\\u2270':'nle','\\u2264\\u20D2':'nvle','\\u2265':'ge','\\u2271':'nge','\\u2265\\u20D2':'nvge','\\u2266':'lE','\\u2266\\u0338':'nlE','\\u2267':'gE','\\u2267\\u0338':'ngE','\\u2268\\uFE00':'lvnE','\\u2268':'lnE','\\u2269':'gnE','\\u2269\\uFE00':'gvnE','\\u226A':'ll','\\u226A\\u0338':'nLtv','\\u226A\\u20D2':'nLt','\\u226B':'gg','\\u226B\\u0338':'nGtv','\\u226B\\u20D2':'nGt','\\u226C':'twixt','\\u2272':'lsim','\\u2274':'nlsim','\\u2273':'gsim','\\u2275':'ngsim','\\u2276':'lg','\\u2278':'ntlg','\\u2277':'gl','\\u2279':'ntgl','\\u227A':'pr','\\u2280':'npr','\\u227B':'sc','\\u2281':'nsc','\\u227C':'prcue','\\u22E0':'nprcue','\\u227D':'sccue','\\u22E1':'nsccue','\\u227E':'prsim','\\u227F':'scsim','\\u227F\\u0338':'NotSucceedsTilde','\\u2282':'sub','\\u2284':'nsub','\\u2282\\u20D2':'vnsub','\\u2283':'sup','\\u2285':'nsup','\\u2283\\u20D2':'vnsup','\\u2286':'sube','\\u2288':'nsube','\\u2287':'supe','\\u2289':'nsupe','\\u228A\\uFE00':'vsubne','\\u228A':'subne','\\u228B\\uFE00':'vsupne','\\u228B':'supne','\\u228D':'cupdot','\\u228E':'uplus','\\u228F':'sqsub','\\u228F\\u0338':'NotSquareSubset','\\u2290':'sqsup','\\u2290\\u0338':'NotSquareSuperset','\\u2291':'sqsube','\\u22E2':'nsqsube','\\u2292':'sqsupe','\\u22E3':'nsqsupe','\\u2293':'sqcap','\\u2293\\uFE00':'sqcaps','\\u2294':'sqcup','\\u2294\\uFE00':'sqcups','\\u2295':'oplus','\\u2296':'ominus','\\u2297':'otimes','\\u2298':'osol','\\u2299':'odot','\\u229A':'ocir','\\u229B':'oast','\\u229D':'odash','\\u229E':'plusb','\\u229F':'minusb','\\u22A0':'timesb','\\u22A1':'sdotb','\\u22A2':'vdash','\\u22AC':'nvdash','\\u22A3':'dashv','\\u22A4':'top','\\u22A5':'bot','\\u22A7':'models','\\u22A8':'vDash','\\u22AD':'nvDash','\\u22A9':'Vdash','\\u22AE':'nVdash','\\u22AA':'Vvdash','\\u22AB':'VDash','\\u22AF':'nVDash','\\u22B0':'prurel','\\u22B2':'vltri','\\u22EA':'nltri','\\u22B3':'vrtri','\\u22EB':'nrtri','\\u22B4':'ltrie','\\u22EC':'nltrie','\\u22B4\\u20D2':'nvltrie','\\u22B5':'rtrie','\\u22ED':'nrtrie','\\u22B5\\u20D2':'nvrtrie','\\u22B6':'origof','\\u22B7':'imof','\\u22B8':'mumap','\\u22B9':'hercon','\\u22BA':'intcal','\\u22BB':'veebar','\\u22BD':'barvee','\\u22BE':'angrtvb','\\u22BF':'lrtri','\\u22C0':'Wedge','\\u22C1':'Vee','\\u22C2':'xcap','\\u22C3':'xcup','\\u22C4':'diam','\\u22C5':'sdot','\\u22C6':'Star','\\u22C7':'divonx','\\u22C8':'bowtie','\\u22C9':'ltimes','\\u22CA':'rtimes','\\u22CB':'lthree','\\u22CC':'rthree','\\u22CD':'bsime','\\u22CE':'cuvee','\\u22CF':'cuwed','\\u22D0':'Sub','\\u22D1':'Sup','\\u22D2':'Cap','\\u22D3':'Cup','\\u22D4':'fork','\\u22D5':'epar','\\u22D6':'ltdot','\\u22D7':'gtdot','\\u22D8':'Ll','\\u22D8\\u0338':'nLl','\\u22D9':'Gg','\\u22D9\\u0338':'nGg','\\u22DA\\uFE00':'lesg','\\u22DA':'leg','\\u22DB':'gel','\\u22DB\\uFE00':'gesl','\\u22DE':'cuepr','\\u22DF':'cuesc','\\u22E6':'lnsim','\\u22E7':'gnsim','\\u22E8':'prnsim','\\u22E9':'scnsim','\\u22EE':'vellip','\\u22EF':'ctdot','\\u22F0':'utdot','\\u22F1':'dtdot','\\u22F2':'disin','\\u22F3':'isinsv','\\u22F4':'isins','\\u22F5':'isindot','\\u22F5\\u0338':'notindot','\\u22F6':'notinvc','\\u22F7':'notinvb','\\u22F9':'isinE','\\u22F9\\u0338':'notinE','\\u22FA':'nisd','\\u22FB':'xnis','\\u22FC':'nis','\\u22FD':'notnivc','\\u22FE':'notnivb','\\u2305':'barwed','\\u2306':'Barwed','\\u230C':'drcrop','\\u230D':'dlcrop','\\u230E':'urcrop','\\u230F':'ulcrop','\\u2310':'bnot','\\u2312':'profline','\\u2313':'profsurf','\\u2315':'telrec','\\u2316':'target','\\u231C':'ulcorn','\\u231D':'urcorn','\\u231E':'dlcorn','\\u231F':'drcorn','\\u2322':'frown','\\u2323':'smile','\\u232D':'cylcty','\\u232E':'profalar','\\u2336':'topbot','\\u233D':'ovbar','\\u233F':'solbar','\\u237C':'angzarr','\\u23B0':'lmoust','\\u23B1':'rmoust','\\u23B4':'tbrk','\\u23B5':'bbrk','\\u23B6':'bbrktbrk','\\u23DC':'OverParenthesis','\\u23DD':'UnderParenthesis','\\u23DE':'OverBrace','\\u23DF':'UnderBrace','\\u23E2':'trpezium','\\u23E7':'elinters','\\u2423':'blank','\\u2500':'boxh','\\u2502':'boxv','\\u250C':'boxdr','\\u2510':'boxdl','\\u2514':'boxur','\\u2518':'boxul','\\u251C':'boxvr','\\u2524':'boxvl','\\u252C':'boxhd','\\u2534':'boxhu','\\u253C':'boxvh','\\u2550':'boxH','\\u2551':'boxV','\\u2552':'boxdR','\\u2553':'boxDr','\\u2554':'boxDR','\\u2555':'boxdL','\\u2556':'boxDl','\\u2557':'boxDL','\\u2558':'boxuR','\\u2559':'boxUr','\\u255A':'boxUR','\\u255B':'boxuL','\\u255C':'boxUl','\\u255D':'boxUL','\\u255E':'boxvR','\\u255F':'boxVr','\\u2560':'boxVR','\\u2561':'boxvL','\\u2562':'boxVl','\\u2563':'boxVL','\\u2564':'boxHd','\\u2565':'boxhD','\\u2566':'boxHD','\\u2567':'boxHu','\\u2568':'boxhU','\\u2569':'boxHU','\\u256A':'boxvH','\\u256B':'boxVh','\\u256C':'boxVH','\\u2580':'uhblk','\\u2584':'lhblk','\\u2588':'block','\\u2591':'blk14','\\u2592':'blk12','\\u2593':'blk34','\\u25A1':'squ','\\u25AA':'squf','\\u25AB':'EmptyVerySmallSquare','\\u25AD':'rect','\\u25AE':'marker','\\u25B1':'fltns','\\u25B3':'xutri','\\u25B4':'utrif','\\u25B5':'utri','\\u25B8':'rtrif','\\u25B9':'rtri','\\u25BD':'xdtri','\\u25BE':'dtrif','\\u25BF':'dtri','\\u25C2':'ltrif','\\u25C3':'ltri','\\u25CA':'loz','\\u25CB':'cir','\\u25EC':'tridot','\\u25EF':'xcirc','\\u25F8':'ultri','\\u25F9':'urtri','\\u25FA':'lltri','\\u25FB':'EmptySmallSquare','\\u25FC':'FilledSmallSquare','\\u2605':'starf','\\u2606':'star','\\u260E':'phone','\\u2640':'female','\\u2642':'male','\\u2660':'spades','\\u2663':'clubs','\\u2665':'hearts','\\u2666':'diams','\\u266A':'sung','\\u2713':'check','\\u2717':'cross','\\u2720':'malt','\\u2736':'sext','\\u2758':'VerticalSeparator','\\u27C8':'bsolhsub','\\u27C9':'suphsol','\\u27F5':'xlarr','\\u27F6':'xrarr','\\u27F7':'xharr','\\u27F8':'xlArr','\\u27F9':'xrArr','\\u27FA':'xhArr','\\u27FC':'xmap','\\u27FF':'dzigrarr','\\u2902':'nvlArr','\\u2903':'nvrArr','\\u2904':'nvHarr','\\u2905':'Map','\\u290C':'lbarr','\\u290D':'rbarr','\\u290E':'lBarr','\\u290F':'rBarr','\\u2910':'RBarr','\\u2911':'DDotrahd','\\u2912':'UpArrowBar','\\u2913':'DownArrowBar','\\u2916':'Rarrtl','\\u2919':'latail','\\u291A':'ratail','\\u291B':'lAtail','\\u291C':'rAtail','\\u291D':'larrfs','\\u291E':'rarrfs','\\u291F':'larrbfs','\\u2920':'rarrbfs','\\u2923':'nwarhk','\\u2924':'nearhk','\\u2925':'searhk','\\u2926':'swarhk','\\u2927':'nwnear','\\u2928':'toea','\\u2929':'tosa','\\u292A':'swnwar','\\u2933':'rarrc','\\u2933\\u0338':'nrarrc','\\u2935':'cudarrr','\\u2936':'ldca','\\u2937':'rdca','\\u2938':'cudarrl','\\u2939':'larrpl','\\u293C':'curarrm','\\u293D':'cularrp','\\u2945':'rarrpl','\\u2948':'harrcir','\\u2949':'Uarrocir','\\u294A':'lurdshar','\\u294B':'ldrushar','\\u294E':'LeftRightVector','\\u294F':'RightUpDownVector','\\u2950':'DownLeftRightVector','\\u2951':'LeftUpDownVector','\\u2952':'LeftVectorBar','\\u2953':'RightVectorBar','\\u2954':'RightUpVectorBar','\\u2955':'RightDownVectorBar','\\u2956':'DownLeftVectorBar','\\u2957':'DownRightVectorBar','\\u2958':'LeftUpVectorBar','\\u2959':'LeftDownVectorBar','\\u295A':'LeftTeeVector','\\u295B':'RightTeeVector','\\u295C':'RightUpTeeVector','\\u295D':'RightDownTeeVector','\\u295E':'DownLeftTeeVector','\\u295F':'DownRightTeeVector','\\u2960':'LeftUpTeeVector','\\u2961':'LeftDownTeeVector','\\u2962':'lHar','\\u2963':'uHar','\\u2964':'rHar','\\u2965':'dHar','\\u2966':'luruhar','\\u2967':'ldrdhar','\\u2968':'ruluhar','\\u2969':'rdldhar','\\u296A':'lharul','\\u296B':'llhard','\\u296C':'rharul','\\u296D':'lrhard','\\u296E':'udhar','\\u296F':'duhar','\\u2970':'RoundImplies','\\u2971':'erarr','\\u2972':'simrarr','\\u2973':'larrsim','\\u2974':'rarrsim','\\u2975':'rarrap','\\u2976':'ltlarr','\\u2978':'gtrarr','\\u2979':'subrarr','\\u297B':'suplarr','\\u297C':'lfisht','\\u297D':'rfisht','\\u297E':'ufisht','\\u297F':'dfisht','\\u299A':'vzigzag','\\u299C':'vangrt','\\u299D':'angrtvbd','\\u29A4':'ange','\\u29A5':'range','\\u29A6':'dwangle','\\u29A7':'uwangle','\\u29A8':'angmsdaa','\\u29A9':'angmsdab','\\u29AA':'angmsdac','\\u29AB':'angmsdad','\\u29AC':'angmsdae','\\u29AD':'angmsdaf','\\u29AE':'angmsdag','\\u29AF':'angmsdah','\\u29B0':'bemptyv','\\u29B1':'demptyv','\\u29B2':'cemptyv','\\u29B3':'raemptyv','\\u29B4':'laemptyv','\\u29B5':'ohbar','\\u29B6':'omid','\\u29B7':'opar','\\u29B9':'operp','\\u29BB':'olcross','\\u29BC':'odsold','\\u29BE':'olcir','\\u29BF':'ofcir','\\u29C0':'olt','\\u29C1':'ogt','\\u29C2':'cirscir','\\u29C3':'cirE','\\u29C4':'solb','\\u29C5':'bsolb','\\u29C9':'boxbox','\\u29CD':'trisb','\\u29CE':'rtriltri','\\u29CF':'LeftTriangleBar','\\u29CF\\u0338':'NotLeftTriangleBar','\\u29D0':'RightTriangleBar','\\u29D0\\u0338':'NotRightTriangleBar','\\u29DC':'iinfin','\\u29DD':'infintie','\\u29DE':'nvinfin','\\u29E3':'eparsl','\\u29E4':'smeparsl','\\u29E5':'eqvparsl','\\u29EB':'lozf','\\u29F4':'RuleDelayed','\\u29F6':'dsol','\\u2A00':'xodot','\\u2A01':'xoplus','\\u2A02':'xotime','\\u2A04':'xuplus','\\u2A06':'xsqcup','\\u2A0D':'fpartint','\\u2A10':'cirfnint','\\u2A11':'awint','\\u2A12':'rppolint','\\u2A13':'scpolint','\\u2A14':'npolint','\\u2A15':'pointint','\\u2A16':'quatint','\\u2A17':'intlarhk','\\u2A22':'pluscir','\\u2A23':'plusacir','\\u2A24':'simplus','\\u2A25':'plusdu','\\u2A26':'plussim','\\u2A27':'plustwo','\\u2A29':'mcomma','\\u2A2A':'minusdu','\\u2A2D':'loplus','\\u2A2E':'roplus','\\u2A2F':'Cross','\\u2A30':'timesd','\\u2A31':'timesbar','\\u2A33':'smashp','\\u2A34':'lotimes','\\u2A35':'rotimes','\\u2A36':'otimesas','\\u2A37':'Otimes','\\u2A38':'odiv','\\u2A39':'triplus','\\u2A3A':'triminus','\\u2A3B':'tritime','\\u2A3C':'iprod','\\u2A3F':'amalg','\\u2A40':'capdot','\\u2A42':'ncup','\\u2A43':'ncap','\\u2A44':'capand','\\u2A45':'cupor','\\u2A46':'cupcap','\\u2A47':'capcup','\\u2A48':'cupbrcap','\\u2A49':'capbrcup','\\u2A4A':'cupcup','\\u2A4B':'capcap','\\u2A4C':'ccups','\\u2A4D':'ccaps','\\u2A50':'ccupssm','\\u2A53':'And','\\u2A54':'Or','\\u2A55':'andand','\\u2A56':'oror','\\u2A57':'orslope','\\u2A58':'andslope','\\u2A5A':'andv','\\u2A5B':'orv','\\u2A5C':'andd','\\u2A5D':'ord','\\u2A5F':'wedbar','\\u2A66':'sdote','\\u2A6A':'simdot','\\u2A6D':'congdot','\\u2A6D\\u0338':'ncongdot','\\u2A6E':'easter','\\u2A6F':'apacir','\\u2A70':'apE','\\u2A70\\u0338':'napE','\\u2A71':'eplus','\\u2A72':'pluse','\\u2A73':'Esim','\\u2A77':'eDDot','\\u2A78':'equivDD','\\u2A79':'ltcir','\\u2A7A':'gtcir','\\u2A7B':'ltquest','\\u2A7C':'gtquest','\\u2A7D':'les','\\u2A7D\\u0338':'nles','\\u2A7E':'ges','\\u2A7E\\u0338':'nges','\\u2A7F':'lesdot','\\u2A80':'gesdot','\\u2A81':'lesdoto','\\u2A82':'gesdoto','\\u2A83':'lesdotor','\\u2A84':'gesdotol','\\u2A85':'lap','\\u2A86':'gap','\\u2A87':'lne','\\u2A88':'gne','\\u2A89':'lnap','\\u2A8A':'gnap','\\u2A8B':'lEg','\\u2A8C':'gEl','\\u2A8D':'lsime','\\u2A8E':'gsime','\\u2A8F':'lsimg','\\u2A90':'gsiml','\\u2A91':'lgE','\\u2A92':'glE','\\u2A93':'lesges','\\u2A94':'gesles','\\u2A95':'els','\\u2A96':'egs','\\u2A97':'elsdot','\\u2A98':'egsdot','\\u2A99':'el','\\u2A9A':'eg','\\u2A9D':'siml','\\u2A9E':'simg','\\u2A9F':'simlE','\\u2AA0':'simgE','\\u2AA1':'LessLess','\\u2AA1\\u0338':'NotNestedLessLess','\\u2AA2':'GreaterGreater','\\u2AA2\\u0338':'NotNestedGreaterGreater','\\u2AA4':'glj','\\u2AA5':'gla','\\u2AA6':'ltcc','\\u2AA7':'gtcc','\\u2AA8':'lescc','\\u2AA9':'gescc','\\u2AAA':'smt','\\u2AAB':'lat','\\u2AAC':'smte','\\u2AAC\\uFE00':'smtes','\\u2AAD':'late','\\u2AAD\\uFE00':'lates','\\u2AAE':'bumpE','\\u2AAF':'pre','\\u2AAF\\u0338':'npre','\\u2AB0':'sce','\\u2AB0\\u0338':'nsce','\\u2AB3':'prE','\\u2AB4':'scE','\\u2AB5':'prnE','\\u2AB6':'scnE','\\u2AB7':'prap','\\u2AB8':'scap','\\u2AB9':'prnap','\\u2ABA':'scnap','\\u2ABB':'Pr','\\u2ABC':'Sc','\\u2ABD':'subdot','\\u2ABE':'supdot','\\u2ABF':'subplus','\\u2AC0':'supplus','\\u2AC1':'submult','\\u2AC2':'supmult','\\u2AC3':'subedot','\\u2AC4':'supedot','\\u2AC5':'subE','\\u2AC5\\u0338':'nsubE','\\u2AC6':'supE','\\u2AC6\\u0338':'nsupE','\\u2AC7':'subsim','\\u2AC8':'supsim','\\u2ACB\\uFE00':'vsubnE','\\u2ACB':'subnE','\\u2ACC\\uFE00':'vsupnE','\\u2ACC':'supnE','\\u2ACF':'csub','\\u2AD0':'csup','\\u2AD1':'csube','\\u2AD2':'csupe','\\u2AD3':'subsup','\\u2AD4':'supsub','\\u2AD5':'subsub','\\u2AD6':'supsup','\\u2AD7':'suphsub','\\u2AD8':'supdsub','\\u2AD9':'forkv','\\u2ADA':'topfork','\\u2ADB':'mlcp','\\u2AE4':'Dashv','\\u2AE6':'Vdashl','\\u2AE7':'Barv','\\u2AE8':'vBar','\\u2AE9':'vBarv','\\u2AEB':'Vbar','\\u2AEC':'Not','\\u2AED':'bNot','\\u2AEE':'rnmid','\\u2AEF':'cirmid','\\u2AF0':'midcir','\\u2AF1':'topcir','\\u2AF2':'nhpar','\\u2AF3':'parsim','\\u2AFD':'parsl','\\u2AFD\\u20E5':'nparsl','\\u266D':'flat','\\u266E':'natur','\\u266F':'sharp','\\xA4':'curren','\\xA2':'cent','$':'dollar','\\xA3':'pound','\\xA5':'yen','\\u20AC':'euro','\\xB9':'sup1','\\xBD':'half','\\u2153':'frac13','\\xBC':'frac14','\\u2155':'frac15','\\u2159':'frac16','\\u215B':'frac18','\\xB2':'sup2','\\u2154':'frac23','\\u2156':'frac25','\\xB3':'sup3','\\xBE':'frac34','\\u2157':'frac35','\\u215C':'frac38','\\u2158':'frac45','\\u215A':'frac56','\\u215D':'frac58','\\u215E':'frac78','\\uD835\\uDCB6':'ascr','\\uD835\\uDD52':'aopf','\\uD835\\uDD1E':'afr','\\uD835\\uDD38':'Aopf','\\uD835\\uDD04':'Afr','\\uD835\\uDC9C':'Ascr','\\xAA':'ordf','\\xE1':'aacute','\\xC1':'Aacute','\\xE0':'agrave','\\xC0':'Agrave','\\u0103':'abreve','\\u0102':'Abreve','\\xE2':'acirc','\\xC2':'Acirc','\\xE5':'aring','\\xC5':'angst','\\xE4':'auml','\\xC4':'Auml','\\xE3':'atilde','\\xC3':'Atilde','\\u0105':'aogon','\\u0104':'Aogon','\\u0101':'amacr','\\u0100':'Amacr','\\xE6':'aelig','\\xC6':'AElig','\\uD835\\uDCB7':'bscr','\\uD835\\uDD53':'bopf','\\uD835\\uDD1F':'bfr','\\uD835\\uDD39':'Bopf','\\u212C':'Bscr','\\uD835\\uDD05':'Bfr','\\uD835\\uDD20':'cfr','\\uD835\\uDCB8':'cscr','\\uD835\\uDD54':'copf','\\u212D':'Cfr','\\uD835\\uDC9E':'Cscr','\\u2102':'Copf','\\u0107':'cacute','\\u0106':'Cacute','\\u0109':'ccirc','\\u0108':'Ccirc','\\u010D':'ccaron','\\u010C':'Ccaron','\\u010B':'cdot','\\u010A':'Cdot','\\xE7':'ccedil','\\xC7':'Ccedil','\\u2105':'incare','\\uD835\\uDD21':'dfr','\\u2146':'dd','\\uD835\\uDD55':'dopf','\\uD835\\uDCB9':'dscr','\\uD835\\uDC9F':'Dscr','\\uD835\\uDD07':'Dfr','\\u2145':'DD','\\uD835\\uDD3B':'Dopf','\\u010F':'dcaron','\\u010E':'Dcaron','\\u0111':'dstrok','\\u0110':'Dstrok','\\xF0':'eth','\\xD0':'ETH','\\u2147':'ee','\\u212F':'escr','\\uD835\\uDD22':'efr','\\uD835\\uDD56':'eopf','\\u2130':'Escr','\\uD835\\uDD08':'Efr','\\uD835\\uDD3C':'Eopf','\\xE9':'eacute','\\xC9':'Eacute','\\xE8':'egrave','\\xC8':'Egrave','\\xEA':'ecirc','\\xCA':'Ecirc','\\u011B':'ecaron','\\u011A':'Ecaron','\\xEB':'euml','\\xCB':'Euml','\\u0117':'edot','\\u0116':'Edot','\\u0119':'eogon','\\u0118':'Eogon','\\u0113':'emacr','\\u0112':'Emacr','\\uD835\\uDD23':'ffr','\\uD835\\uDD57':'fopf','\\uD835\\uDCBB':'fscr','\\uD835\\uDD09':'Ffr','\\uD835\\uDD3D':'Fopf','\\u2131':'Fscr','\\uFB00':'fflig','\\uFB03':'ffilig','\\uFB04':'ffllig','\\uFB01':'filig','fj':'fjlig','\\uFB02':'fllig','\\u0192':'fnof','\\u210A':'gscr','\\uD835\\uDD58':'gopf','\\uD835\\uDD24':'gfr','\\uD835\\uDCA2':'Gscr','\\uD835\\uDD3E':'Gopf','\\uD835\\uDD0A':'Gfr','\\u01F5':'gacute','\\u011F':'gbreve','\\u011E':'Gbreve','\\u011D':'gcirc','\\u011C':'Gcirc','\\u0121':'gdot','\\u0120':'Gdot','\\u0122':'Gcedil','\\uD835\\uDD25':'hfr','\\u210E':'planckh','\\uD835\\uDCBD':'hscr','\\uD835\\uDD59':'hopf','\\u210B':'Hscr','\\u210C':'Hfr','\\u210D':'Hopf','\\u0125':'hcirc','\\u0124':'Hcirc','\\u210F':'hbar','\\u0127':'hstrok','\\u0126':'Hstrok','\\uD835\\uDD5A':'iopf','\\uD835\\uDD26':'ifr','\\uD835\\uDCBE':'iscr','\\u2148':'ii','\\uD835\\uDD40':'Iopf','\\u2110':'Iscr','\\u2111':'Im','\\xED':'iacute','\\xCD':'Iacute','\\xEC':'igrave','\\xCC':'Igrave','\\xEE':'icirc','\\xCE':'Icirc','\\xEF':'iuml','\\xCF':'Iuml','\\u0129':'itilde','\\u0128':'Itilde','\\u0130':'Idot','\\u012F':'iogon','\\u012E':'Iogon','\\u012B':'imacr','\\u012A':'Imacr','\\u0133':'ijlig','\\u0132':'IJlig','\\u0131':'imath','\\uD835\\uDCBF':'jscr','\\uD835\\uDD5B':'jopf','\\uD835\\uDD27':'jfr','\\uD835\\uDCA5':'Jscr','\\uD835\\uDD0D':'Jfr','\\uD835\\uDD41':'Jopf','\\u0135':'jcirc','\\u0134':'Jcirc','\\u0237':'jmath','\\uD835\\uDD5C':'kopf','\\uD835\\uDCC0':'kscr','\\uD835\\uDD28':'kfr','\\uD835\\uDCA6':'Kscr','\\uD835\\uDD42':'Kopf','\\uD835\\uDD0E':'Kfr','\\u0137':'kcedil','\\u0136':'Kcedil','\\uD835\\uDD29':'lfr','\\uD835\\uDCC1':'lscr','\\u2113':'ell','\\uD835\\uDD5D':'lopf','\\u2112':'Lscr','\\uD835\\uDD0F':'Lfr','\\uD835\\uDD43':'Lopf','\\u013A':'lacute','\\u0139':'Lacute','\\u013E':'lcaron','\\u013D':'Lcaron','\\u013C':'lcedil','\\u013B':'Lcedil','\\u0142':'lstrok','\\u0141':'Lstrok','\\u0140':'lmidot','\\u013F':'Lmidot','\\uD835\\uDD2A':'mfr','\\uD835\\uDD5E':'mopf','\\uD835\\uDCC2':'mscr','\\uD835\\uDD10':'Mfr','\\uD835\\uDD44':'Mopf','\\u2133':'Mscr','\\uD835\\uDD2B':'nfr','\\uD835\\uDD5F':'nopf','\\uD835\\uDCC3':'nscr','\\u2115':'Nopf','\\uD835\\uDCA9':'Nscr','\\uD835\\uDD11':'Nfr','\\u0144':'nacute','\\u0143':'Nacute','\\u0148':'ncaron','\\u0147':'Ncaron','\\xF1':'ntilde','\\xD1':'Ntilde','\\u0146':'ncedil','\\u0145':'Ncedil','\\u2116':'numero','\\u014B':'eng','\\u014A':'ENG','\\uD835\\uDD60':'oopf','\\uD835\\uDD2C':'ofr','\\u2134':'oscr','\\uD835\\uDCAA':'Oscr','\\uD835\\uDD12':'Ofr','\\uD835\\uDD46':'Oopf','\\xBA':'ordm','\\xF3':'oacute','\\xD3':'Oacute','\\xF2':'ograve','\\xD2':'Ograve','\\xF4':'ocirc','\\xD4':'Ocirc','\\xF6':'ouml','\\xD6':'Ouml','\\u0151':'odblac','\\u0150':'Odblac','\\xF5':'otilde','\\xD5':'Otilde','\\xF8':'oslash','\\xD8':'Oslash','\\u014D':'omacr','\\u014C':'Omacr','\\u0153':'oelig','\\u0152':'OElig','\\uD835\\uDD2D':'pfr','\\uD835\\uDCC5':'pscr','\\uD835\\uDD61':'popf','\\u2119':'Popf','\\uD835\\uDD13':'Pfr','\\uD835\\uDCAB':'Pscr','\\uD835\\uDD62':'qopf','\\uD835\\uDD2E':'qfr','\\uD835\\uDCC6':'qscr','\\uD835\\uDCAC':'Qscr','\\uD835\\uDD14':'Qfr','\\u211A':'Qopf','\\u0138':'kgreen','\\uD835\\uDD2F':'rfr','\\uD835\\uDD63':'ropf','\\uD835\\uDCC7':'rscr','\\u211B':'Rscr','\\u211C':'Re','\\u211D':'Ropf','\\u0155':'racute','\\u0154':'Racute','\\u0159':'rcaron','\\u0158':'Rcaron','\\u0157':'rcedil','\\u0156':'Rcedil','\\uD835\\uDD64':'sopf','\\uD835\\uDCC8':'sscr','\\uD835\\uDD30':'sfr','\\uD835\\uDD4A':'Sopf','\\uD835\\uDD16':'Sfr','\\uD835\\uDCAE':'Sscr','\\u24C8':'oS','\\u015B':'sacute','\\u015A':'Sacute','\\u015D':'scirc','\\u015C':'Scirc','\\u0161':'scaron','\\u0160':'Scaron','\\u015F':'scedil','\\u015E':'Scedil','\\xDF':'szlig','\\uD835\\uDD31':'tfr','\\uD835\\uDCC9':'tscr','\\uD835\\uDD65':'topf','\\uD835\\uDCAF':'Tscr','\\uD835\\uDD17':'Tfr','\\uD835\\uDD4B':'Topf','\\u0165':'tcaron','\\u0164':'Tcaron','\\u0163':'tcedil','\\u0162':'Tcedil','\\u2122':'trade','\\u0167':'tstrok','\\u0166':'Tstrok','\\uD835\\uDCCA':'uscr','\\uD835\\uDD66':'uopf','\\uD835\\uDD32':'ufr','\\uD835\\uDD4C':'Uopf','\\uD835\\uDD18':'Ufr','\\uD835\\uDCB0':'Uscr','\\xFA':'uacute','\\xDA':'Uacute','\\xF9':'ugrave','\\xD9':'Ugrave','\\u016D':'ubreve','\\u016C':'Ubreve','\\xFB':'ucirc','\\xDB':'Ucirc','\\u016F':'uring','\\u016E':'Uring','\\xFC':'uuml','\\xDC':'Uuml','\\u0171':'udblac','\\u0170':'Udblac','\\u0169':'utilde','\\u0168':'Utilde','\\u0173':'uogon','\\u0172':'Uogon','\\u016B':'umacr','\\u016A':'Umacr','\\uD835\\uDD33':'vfr','\\uD835\\uDD67':'vopf','\\uD835\\uDCCB':'vscr','\\uD835\\uDD19':'Vfr','\\uD835\\uDD4D':'Vopf','\\uD835\\uDCB1':'Vscr','\\uD835\\uDD68':'wopf','\\uD835\\uDCCC':'wscr','\\uD835\\uDD34':'wfr','\\uD835\\uDCB2':'Wscr','\\uD835\\uDD4E':'Wopf','\\uD835\\uDD1A':'Wfr','\\u0175':'wcirc','\\u0174':'Wcirc','\\uD835\\uDD35':'xfr','\\uD835\\uDCCD':'xscr','\\uD835\\uDD69':'xopf','\\uD835\\uDD4F':'Xopf','\\uD835\\uDD1B':'Xfr','\\uD835\\uDCB3':'Xscr','\\uD835\\uDD36':'yfr','\\uD835\\uDCCE':'yscr','\\uD835\\uDD6A':'yopf','\\uD835\\uDCB4':'Yscr','\\uD835\\uDD1C':'Yfr','\\uD835\\uDD50':'Yopf','\\xFD':'yacute','\\xDD':'Yacute','\\u0177':'ycirc','\\u0176':'Ycirc','\\xFF':'yuml','\\u0178':'Yuml','\\uD835\\uDCCF':'zscr','\\uD835\\uDD37':'zfr','\\uD835\\uDD6B':'zopf','\\u2128':'Zfr','\\u2124':'Zopf','\\uD835\\uDCB5':'Zscr','\\u017A':'zacute','\\u0179':'Zacute','\\u017E':'zcaron','\\u017D':'Zcaron','\\u017C':'zdot','\\u017B':'Zdot','\\u01B5':'imped','\\xFE':'thorn','\\xDE':'THORN','\\u0149':'napos','\\u03B1':'alpha','\\u0391':'Alpha','\\u03B2':'beta','\\u0392':'Beta','\\u03B3':'gamma','\\u0393':'Gamma','\\u03B4':'delta','\\u0394':'Delta','\\u03B5':'epsi','\\u03F5':'epsiv','\\u0395':'Epsilon','\\u03DD':'gammad','\\u03DC':'Gammad','\\u03B6':'zeta','\\u0396':'Zeta','\\u03B7':'eta','\\u0397':'Eta','\\u03B8':'theta','\\u03D1':'thetav','\\u0398':'Theta','\\u03B9':'iota','\\u0399':'Iota','\\u03BA':'kappa','\\u03F0':'kappav','\\u039A':'Kappa','\\u03BB':'lambda','\\u039B':'Lambda','\\u03BC':'mu','\\xB5':'micro','\\u039C':'Mu','\\u03BD':'nu','\\u039D':'Nu','\\u03BE':'xi','\\u039E':'Xi','\\u03BF':'omicron','\\u039F':'Omicron','\\u03C0':'pi','\\u03D6':'piv','\\u03A0':'Pi','\\u03C1':'rho','\\u03F1':'rhov','\\u03A1':'Rho','\\u03C3':'sigma','\\u03A3':'Sigma','\\u03C2':'sigmaf','\\u03C4':'tau','\\u03A4':'Tau','\\u03C5':'upsi','\\u03A5':'Upsilon','\\u03D2':'Upsi','\\u03C6':'phi','\\u03D5':'phiv','\\u03A6':'Phi','\\u03C7':'chi','\\u03A7':'Chi','\\u03C8':'psi','\\u03A8':'Psi','\\u03C9':'omega','\\u03A9':'ohm','\\u0430':'acy','\\u0410':'Acy','\\u0431':'bcy','\\u0411':'Bcy','\\u0432':'vcy','\\u0412':'Vcy','\\u0433':'gcy','\\u0413':'Gcy','\\u0453':'gjcy','\\u0403':'GJcy','\\u0434':'dcy','\\u0414':'Dcy','\\u0452':'djcy','\\u0402':'DJcy','\\u0435':'iecy','\\u0415':'IEcy','\\u0451':'iocy','\\u0401':'IOcy','\\u0454':'jukcy','\\u0404':'Jukcy','\\u0436':'zhcy','\\u0416':'ZHcy','\\u0437':'zcy','\\u0417':'Zcy','\\u0455':'dscy','\\u0405':'DScy','\\u0438':'icy','\\u0418':'Icy','\\u0456':'iukcy','\\u0406':'Iukcy','\\u0457':'yicy','\\u0407':'YIcy','\\u0439':'jcy','\\u0419':'Jcy','\\u0458':'jsercy','\\u0408':'Jsercy','\\u043A':'kcy','\\u041A':'Kcy','\\u045C':'kjcy','\\u040C':'KJcy','\\u043B':'lcy','\\u041B':'Lcy','\\u0459':'ljcy','\\u0409':'LJcy','\\u043C':'mcy','\\u041C':'Mcy','\\u043D':'ncy','\\u041D':'Ncy','\\u045A':'njcy','\\u040A':'NJcy','\\u043E':'ocy','\\u041E':'Ocy','\\u043F':'pcy','\\u041F':'Pcy','\\u0440':'rcy','\\u0420':'Rcy','\\u0441':'scy','\\u0421':'Scy','\\u0442':'tcy','\\u0422':'Tcy','\\u045B':'tshcy','\\u040B':'TSHcy','\\u0443':'ucy','\\u0423':'Ucy','\\u045E':'ubrcy','\\u040E':'Ubrcy','\\u0444':'fcy','\\u0424':'Fcy','\\u0445':'khcy','\\u0425':'KHcy','\\u0446':'tscy','\\u0426':'TScy','\\u0447':'chcy','\\u0427':'CHcy','\\u045F':'dzcy','\\u040F':'DZcy','\\u0448':'shcy','\\u0428':'SHcy','\\u0449':'shchcy','\\u0429':'SHCHcy','\\u044A':'hardcy','\\u042A':'HARDcy','\\u044B':'ycy','\\u042B':'Ycy','\\u044C':'softcy','\\u042C':'SOFTcy','\\u044D':'ecy','\\u042D':'Ecy','\\u044E':'yucy','\\u042E':'YUcy','\\u044F':'yacy','\\u042F':'YAcy','\\u2135':'aleph','\\u2136':'beth','\\u2137':'gimel','\\u2138':'daleth'};\n\n\tvar regexEscape = /[\"&'<>`]/g;\n\tvar escapeMap = {\n\t\t'\"': '"',\n\t\t'&': '&',\n\t\t'\\'': ''',\n\t\t'<': '<',\n\t\t// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the\n\t\t// following is not strictly necessary unless it’s part of a tag or an\n\t\t// unquoted attribute value. We’re only escaping it to support those\n\t\t// situations, and for XML support.\n\t\t'>': '>',\n\t\t// In Internet Explorer ≤ 8, the backtick character can be used\n\t\t// to break out of (un)quoted attribute values or HTML comments.\n\t\t// See http://html5sec.org/#102, http://html5sec.org/#108, and\n\t\t// http://html5sec.org/#133.\n\t\t'`': '`'\n\t};\n\n\tvar regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;\n\tvar regexInvalidRawCodePoint = /[\\0-\\x08\\x0B\\x0E-\\x1F\\x7F-\\x9F\\uFDD0-\\uFDEF\\uFFFE\\uFFFF]|[\\uD83F\\uD87F\\uD8BF\\uD8FF\\uD93F\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uDA7F\\uDABF\\uDAFF\\uDB3F\\uDB7F\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\tvar regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;\n\tvar decodeMap = {'aacute':'\\xE1','Aacute':'\\xC1','abreve':'\\u0103','Abreve':'\\u0102','ac':'\\u223E','acd':'\\u223F','acE':'\\u223E\\u0333','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','acy':'\\u0430','Acy':'\\u0410','aelig':'\\xE6','AElig':'\\xC6','af':'\\u2061','afr':'\\uD835\\uDD1E','Afr':'\\uD835\\uDD04','agrave':'\\xE0','Agrave':'\\xC0','alefsym':'\\u2135','aleph':'\\u2135','alpha':'\\u03B1','Alpha':'\\u0391','amacr':'\\u0101','Amacr':'\\u0100','amalg':'\\u2A3F','amp':'&','AMP':'&','and':'\\u2227','And':'\\u2A53','andand':'\\u2A55','andd':'\\u2A5C','andslope':'\\u2A58','andv':'\\u2A5A','ang':'\\u2220','ange':'\\u29A4','angle':'\\u2220','angmsd':'\\u2221','angmsdaa':'\\u29A8','angmsdab':'\\u29A9','angmsdac':'\\u29AA','angmsdad':'\\u29AB','angmsdae':'\\u29AC','angmsdaf':'\\u29AD','angmsdag':'\\u29AE','angmsdah':'\\u29AF','angrt':'\\u221F','angrtvb':'\\u22BE','angrtvbd':'\\u299D','angsph':'\\u2222','angst':'\\xC5','angzarr':'\\u237C','aogon':'\\u0105','Aogon':'\\u0104','aopf':'\\uD835\\uDD52','Aopf':'\\uD835\\uDD38','ap':'\\u2248','apacir':'\\u2A6F','ape':'\\u224A','apE':'\\u2A70','apid':'\\u224B','apos':'\\'','ApplyFunction':'\\u2061','approx':'\\u2248','approxeq':'\\u224A','aring':'\\xE5','Aring':'\\xC5','ascr':'\\uD835\\uDCB6','Ascr':'\\uD835\\uDC9C','Assign':'\\u2254','ast':'*','asymp':'\\u2248','asympeq':'\\u224D','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','awconint':'\\u2233','awint':'\\u2A11','backcong':'\\u224C','backepsilon':'\\u03F6','backprime':'\\u2035','backsim':'\\u223D','backsimeq':'\\u22CD','Backslash':'\\u2216','Barv':'\\u2AE7','barvee':'\\u22BD','barwed':'\\u2305','Barwed':'\\u2306','barwedge':'\\u2305','bbrk':'\\u23B5','bbrktbrk':'\\u23B6','bcong':'\\u224C','bcy':'\\u0431','Bcy':'\\u0411','bdquo':'\\u201E','becaus':'\\u2235','because':'\\u2235','Because':'\\u2235','bemptyv':'\\u29B0','bepsi':'\\u03F6','bernou':'\\u212C','Bernoullis':'\\u212C','beta':'\\u03B2','Beta':'\\u0392','beth':'\\u2136','between':'\\u226C','bfr':'\\uD835\\uDD1F','Bfr':'\\uD835\\uDD05','bigcap':'\\u22C2','bigcirc':'\\u25EF','bigcup':'\\u22C3','bigodot':'\\u2A00','bigoplus':'\\u2A01','bigotimes':'\\u2A02','bigsqcup':'\\u2A06','bigstar':'\\u2605','bigtriangledown':'\\u25BD','bigtriangleup':'\\u25B3','biguplus':'\\u2A04','bigvee':'\\u22C1','bigwedge':'\\u22C0','bkarow':'\\u290D','blacklozenge':'\\u29EB','blacksquare':'\\u25AA','blacktriangle':'\\u25B4','blacktriangledown':'\\u25BE','blacktriangleleft':'\\u25C2','blacktriangleright':'\\u25B8','blank':'\\u2423','blk12':'\\u2592','blk14':'\\u2591','blk34':'\\u2593','block':'\\u2588','bne':'=\\u20E5','bnequiv':'\\u2261\\u20E5','bnot':'\\u2310','bNot':'\\u2AED','bopf':'\\uD835\\uDD53','Bopf':'\\uD835\\uDD39','bot':'\\u22A5','bottom':'\\u22A5','bowtie':'\\u22C8','boxbox':'\\u29C9','boxdl':'\\u2510','boxdL':'\\u2555','boxDl':'\\u2556','boxDL':'\\u2557','boxdr':'\\u250C','boxdR':'\\u2552','boxDr':'\\u2553','boxDR':'\\u2554','boxh':'\\u2500','boxH':'\\u2550','boxhd':'\\u252C','boxhD':'\\u2565','boxHd':'\\u2564','boxHD':'\\u2566','boxhu':'\\u2534','boxhU':'\\u2568','boxHu':'\\u2567','boxHU':'\\u2569','boxminus':'\\u229F','boxplus':'\\u229E','boxtimes':'\\u22A0','boxul':'\\u2518','boxuL':'\\u255B','boxUl':'\\u255C','boxUL':'\\u255D','boxur':'\\u2514','boxuR':'\\u2558','boxUr':'\\u2559','boxUR':'\\u255A','boxv':'\\u2502','boxV':'\\u2551','boxvh':'\\u253C','boxvH':'\\u256A','boxVh':'\\u256B','boxVH':'\\u256C','boxvl':'\\u2524','boxvL':'\\u2561','boxVl':'\\u2562','boxVL':'\\u2563','boxvr':'\\u251C','boxvR':'\\u255E','boxVr':'\\u255F','boxVR':'\\u2560','bprime':'\\u2035','breve':'\\u02D8','Breve':'\\u02D8','brvbar':'\\xA6','bscr':'\\uD835\\uDCB7','Bscr':'\\u212C','bsemi':'\\u204F','bsim':'\\u223D','bsime':'\\u22CD','bsol':'\\\\','bsolb':'\\u29C5','bsolhsub':'\\u27C8','bull':'\\u2022','bullet':'\\u2022','bump':'\\u224E','bumpe':'\\u224F','bumpE':'\\u2AAE','bumpeq':'\\u224F','Bumpeq':'\\u224E','cacute':'\\u0107','Cacute':'\\u0106','cap':'\\u2229','Cap':'\\u22D2','capand':'\\u2A44','capbrcup':'\\u2A49','capcap':'\\u2A4B','capcup':'\\u2A47','capdot':'\\u2A40','CapitalDifferentialD':'\\u2145','caps':'\\u2229\\uFE00','caret':'\\u2041','caron':'\\u02C7','Cayleys':'\\u212D','ccaps':'\\u2A4D','ccaron':'\\u010D','Ccaron':'\\u010C','ccedil':'\\xE7','Ccedil':'\\xC7','ccirc':'\\u0109','Ccirc':'\\u0108','Cconint':'\\u2230','ccups':'\\u2A4C','ccupssm':'\\u2A50','cdot':'\\u010B','Cdot':'\\u010A','cedil':'\\xB8','Cedilla':'\\xB8','cemptyv':'\\u29B2','cent':'\\xA2','centerdot':'\\xB7','CenterDot':'\\xB7','cfr':'\\uD835\\uDD20','Cfr':'\\u212D','chcy':'\\u0447','CHcy':'\\u0427','check':'\\u2713','checkmark':'\\u2713','chi':'\\u03C7','Chi':'\\u03A7','cir':'\\u25CB','circ':'\\u02C6','circeq':'\\u2257','circlearrowleft':'\\u21BA','circlearrowright':'\\u21BB','circledast':'\\u229B','circledcirc':'\\u229A','circleddash':'\\u229D','CircleDot':'\\u2299','circledR':'\\xAE','circledS':'\\u24C8','CircleMinus':'\\u2296','CirclePlus':'\\u2295','CircleTimes':'\\u2297','cire':'\\u2257','cirE':'\\u29C3','cirfnint':'\\u2A10','cirmid':'\\u2AEF','cirscir':'\\u29C2','ClockwiseContourIntegral':'\\u2232','CloseCurlyDoubleQuote':'\\u201D','CloseCurlyQuote':'\\u2019','clubs':'\\u2663','clubsuit':'\\u2663','colon':':','Colon':'\\u2237','colone':'\\u2254','Colone':'\\u2A74','coloneq':'\\u2254','comma':',','commat':'@','comp':'\\u2201','compfn':'\\u2218','complement':'\\u2201','complexes':'\\u2102','cong':'\\u2245','congdot':'\\u2A6D','Congruent':'\\u2261','conint':'\\u222E','Conint':'\\u222F','ContourIntegral':'\\u222E','copf':'\\uD835\\uDD54','Copf':'\\u2102','coprod':'\\u2210','Coproduct':'\\u2210','copy':'\\xA9','COPY':'\\xA9','copysr':'\\u2117','CounterClockwiseContourIntegral':'\\u2233','crarr':'\\u21B5','cross':'\\u2717','Cross':'\\u2A2F','cscr':'\\uD835\\uDCB8','Cscr':'\\uD835\\uDC9E','csub':'\\u2ACF','csube':'\\u2AD1','csup':'\\u2AD0','csupe':'\\u2AD2','ctdot':'\\u22EF','cudarrl':'\\u2938','cudarrr':'\\u2935','cuepr':'\\u22DE','cuesc':'\\u22DF','cularr':'\\u21B6','cularrp':'\\u293D','cup':'\\u222A','Cup':'\\u22D3','cupbrcap':'\\u2A48','cupcap':'\\u2A46','CupCap':'\\u224D','cupcup':'\\u2A4A','cupdot':'\\u228D','cupor':'\\u2A45','cups':'\\u222A\\uFE00','curarr':'\\u21B7','curarrm':'\\u293C','curlyeqprec':'\\u22DE','curlyeqsucc':'\\u22DF','curlyvee':'\\u22CE','curlywedge':'\\u22CF','curren':'\\xA4','curvearrowleft':'\\u21B6','curvearrowright':'\\u21B7','cuvee':'\\u22CE','cuwed':'\\u22CF','cwconint':'\\u2232','cwint':'\\u2231','cylcty':'\\u232D','dagger':'\\u2020','Dagger':'\\u2021','daleth':'\\u2138','darr':'\\u2193','dArr':'\\u21D3','Darr':'\\u21A1','dash':'\\u2010','dashv':'\\u22A3','Dashv':'\\u2AE4','dbkarow':'\\u290F','dblac':'\\u02DD','dcaron':'\\u010F','Dcaron':'\\u010E','dcy':'\\u0434','Dcy':'\\u0414','dd':'\\u2146','DD':'\\u2145','ddagger':'\\u2021','ddarr':'\\u21CA','DDotrahd':'\\u2911','ddotseq':'\\u2A77','deg':'\\xB0','Del':'\\u2207','delta':'\\u03B4','Delta':'\\u0394','demptyv':'\\u29B1','dfisht':'\\u297F','dfr':'\\uD835\\uDD21','Dfr':'\\uD835\\uDD07','dHar':'\\u2965','dharl':'\\u21C3','dharr':'\\u21C2','DiacriticalAcute':'\\xB4','DiacriticalDot':'\\u02D9','DiacriticalDoubleAcute':'\\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\\u02DC','diam':'\\u22C4','diamond':'\\u22C4','Diamond':'\\u22C4','diamondsuit':'\\u2666','diams':'\\u2666','die':'\\xA8','DifferentialD':'\\u2146','digamma':'\\u03DD','disin':'\\u22F2','div':'\\xF7','divide':'\\xF7','divideontimes':'\\u22C7','divonx':'\\u22C7','djcy':'\\u0452','DJcy':'\\u0402','dlcorn':'\\u231E','dlcrop':'\\u230D','dollar':'$','dopf':'\\uD835\\uDD55','Dopf':'\\uD835\\uDD3B','dot':'\\u02D9','Dot':'\\xA8','DotDot':'\\u20DC','doteq':'\\u2250','doteqdot':'\\u2251','DotEqual':'\\u2250','dotminus':'\\u2238','dotplus':'\\u2214','dotsquare':'\\u22A1','doublebarwedge':'\\u2306','DoubleContourIntegral':'\\u222F','DoubleDot':'\\xA8','DoubleDownArrow':'\\u21D3','DoubleLeftArrow':'\\u21D0','DoubleLeftRightArrow':'\\u21D4','DoubleLeftTee':'\\u2AE4','DoubleLongLeftArrow':'\\u27F8','DoubleLongLeftRightArrow':'\\u27FA','DoubleLongRightArrow':'\\u27F9','DoubleRightArrow':'\\u21D2','DoubleRightTee':'\\u22A8','DoubleUpArrow':'\\u21D1','DoubleUpDownArrow':'\\u21D5','DoubleVerticalBar':'\\u2225','downarrow':'\\u2193','Downarrow':'\\u21D3','DownArrow':'\\u2193','DownArrowBar':'\\u2913','DownArrowUpArrow':'\\u21F5','DownBreve':'\\u0311','downdownarrows':'\\u21CA','downharpoonleft':'\\u21C3','downharpoonright':'\\u21C2','DownLeftRightVector':'\\u2950','DownLeftTeeVector':'\\u295E','DownLeftVector':'\\u21BD','DownLeftVectorBar':'\\u2956','DownRightTeeVector':'\\u295F','DownRightVector':'\\u21C1','DownRightVectorBar':'\\u2957','DownTee':'\\u22A4','DownTeeArrow':'\\u21A7','drbkarow':'\\u2910','drcorn':'\\u231F','drcrop':'\\u230C','dscr':'\\uD835\\uDCB9','Dscr':'\\uD835\\uDC9F','dscy':'\\u0455','DScy':'\\u0405','dsol':'\\u29F6','dstrok':'\\u0111','Dstrok':'\\u0110','dtdot':'\\u22F1','dtri':'\\u25BF','dtrif':'\\u25BE','duarr':'\\u21F5','duhar':'\\u296F','dwangle':'\\u29A6','dzcy':'\\u045F','DZcy':'\\u040F','dzigrarr':'\\u27FF','eacute':'\\xE9','Eacute':'\\xC9','easter':'\\u2A6E','ecaron':'\\u011B','Ecaron':'\\u011A','ecir':'\\u2256','ecirc':'\\xEA','Ecirc':'\\xCA','ecolon':'\\u2255','ecy':'\\u044D','Ecy':'\\u042D','eDDot':'\\u2A77','edot':'\\u0117','eDot':'\\u2251','Edot':'\\u0116','ee':'\\u2147','efDot':'\\u2252','efr':'\\uD835\\uDD22','Efr':'\\uD835\\uDD08','eg':'\\u2A9A','egrave':'\\xE8','Egrave':'\\xC8','egs':'\\u2A96','egsdot':'\\u2A98','el':'\\u2A99','Element':'\\u2208','elinters':'\\u23E7','ell':'\\u2113','els':'\\u2A95','elsdot':'\\u2A97','emacr':'\\u0113','Emacr':'\\u0112','empty':'\\u2205','emptyset':'\\u2205','EmptySmallSquare':'\\u25FB','emptyv':'\\u2205','EmptyVerySmallSquare':'\\u25AB','emsp':'\\u2003','emsp13':'\\u2004','emsp14':'\\u2005','eng':'\\u014B','ENG':'\\u014A','ensp':'\\u2002','eogon':'\\u0119','Eogon':'\\u0118','eopf':'\\uD835\\uDD56','Eopf':'\\uD835\\uDD3C','epar':'\\u22D5','eparsl':'\\u29E3','eplus':'\\u2A71','epsi':'\\u03B5','epsilon':'\\u03B5','Epsilon':'\\u0395','epsiv':'\\u03F5','eqcirc':'\\u2256','eqcolon':'\\u2255','eqsim':'\\u2242','eqslantgtr':'\\u2A96','eqslantless':'\\u2A95','Equal':'\\u2A75','equals':'=','EqualTilde':'\\u2242','equest':'\\u225F','Equilibrium':'\\u21CC','equiv':'\\u2261','equivDD':'\\u2A78','eqvparsl':'\\u29E5','erarr':'\\u2971','erDot':'\\u2253','escr':'\\u212F','Escr':'\\u2130','esdot':'\\u2250','esim':'\\u2242','Esim':'\\u2A73','eta':'\\u03B7','Eta':'\\u0397','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','euro':'\\u20AC','excl':'!','exist':'\\u2203','Exists':'\\u2203','expectation':'\\u2130','exponentiale':'\\u2147','ExponentialE':'\\u2147','fallingdotseq':'\\u2252','fcy':'\\u0444','Fcy':'\\u0424','female':'\\u2640','ffilig':'\\uFB03','fflig':'\\uFB00','ffllig':'\\uFB04','ffr':'\\uD835\\uDD23','Ffr':'\\uD835\\uDD09','filig':'\\uFB01','FilledSmallSquare':'\\u25FC','FilledVerySmallSquare':'\\u25AA','fjlig':'fj','flat':'\\u266D','fllig':'\\uFB02','fltns':'\\u25B1','fnof':'\\u0192','fopf':'\\uD835\\uDD57','Fopf':'\\uD835\\uDD3D','forall':'\\u2200','ForAll':'\\u2200','fork':'\\u22D4','forkv':'\\u2AD9','Fouriertrf':'\\u2131','fpartint':'\\u2A0D','frac12':'\\xBD','frac13':'\\u2153','frac14':'\\xBC','frac15':'\\u2155','frac16':'\\u2159','frac18':'\\u215B','frac23':'\\u2154','frac25':'\\u2156','frac34':'\\xBE','frac35':'\\u2157','frac38':'\\u215C','frac45':'\\u2158','frac56':'\\u215A','frac58':'\\u215D','frac78':'\\u215E','frasl':'\\u2044','frown':'\\u2322','fscr':'\\uD835\\uDCBB','Fscr':'\\u2131','gacute':'\\u01F5','gamma':'\\u03B3','Gamma':'\\u0393','gammad':'\\u03DD','Gammad':'\\u03DC','gap':'\\u2A86','gbreve':'\\u011F','Gbreve':'\\u011E','Gcedil':'\\u0122','gcirc':'\\u011D','Gcirc':'\\u011C','gcy':'\\u0433','Gcy':'\\u0413','gdot':'\\u0121','Gdot':'\\u0120','ge':'\\u2265','gE':'\\u2267','gel':'\\u22DB','gEl':'\\u2A8C','geq':'\\u2265','geqq':'\\u2267','geqslant':'\\u2A7E','ges':'\\u2A7E','gescc':'\\u2AA9','gesdot':'\\u2A80','gesdoto':'\\u2A82','gesdotol':'\\u2A84','gesl':'\\u22DB\\uFE00','gesles':'\\u2A94','gfr':'\\uD835\\uDD24','Gfr':'\\uD835\\uDD0A','gg':'\\u226B','Gg':'\\u22D9','ggg':'\\u22D9','gimel':'\\u2137','gjcy':'\\u0453','GJcy':'\\u0403','gl':'\\u2277','gla':'\\u2AA5','glE':'\\u2A92','glj':'\\u2AA4','gnap':'\\u2A8A','gnapprox':'\\u2A8A','gne':'\\u2A88','gnE':'\\u2269','gneq':'\\u2A88','gneqq':'\\u2269','gnsim':'\\u22E7','gopf':'\\uD835\\uDD58','Gopf':'\\uD835\\uDD3E','grave':'`','GreaterEqual':'\\u2265','GreaterEqualLess':'\\u22DB','GreaterFullEqual':'\\u2267','GreaterGreater':'\\u2AA2','GreaterLess':'\\u2277','GreaterSlantEqual':'\\u2A7E','GreaterTilde':'\\u2273','gscr':'\\u210A','Gscr':'\\uD835\\uDCA2','gsim':'\\u2273','gsime':'\\u2A8E','gsiml':'\\u2A90','gt':'>','Gt':'\\u226B','GT':'>','gtcc':'\\u2AA7','gtcir':'\\u2A7A','gtdot':'\\u22D7','gtlPar':'\\u2995','gtquest':'\\u2A7C','gtrapprox':'\\u2A86','gtrarr':'\\u2978','gtrdot':'\\u22D7','gtreqless':'\\u22DB','gtreqqless':'\\u2A8C','gtrless':'\\u2277','gtrsim':'\\u2273','gvertneqq':'\\u2269\\uFE00','gvnE':'\\u2269\\uFE00','Hacek':'\\u02C7','hairsp':'\\u200A','half':'\\xBD','hamilt':'\\u210B','hardcy':'\\u044A','HARDcy':'\\u042A','harr':'\\u2194','hArr':'\\u21D4','harrcir':'\\u2948','harrw':'\\u21AD','Hat':'^','hbar':'\\u210F','hcirc':'\\u0125','Hcirc':'\\u0124','hearts':'\\u2665','heartsuit':'\\u2665','hellip':'\\u2026','hercon':'\\u22B9','hfr':'\\uD835\\uDD25','Hfr':'\\u210C','HilbertSpace':'\\u210B','hksearow':'\\u2925','hkswarow':'\\u2926','hoarr':'\\u21FF','homtht':'\\u223B','hookleftarrow':'\\u21A9','hookrightarrow':'\\u21AA','hopf':'\\uD835\\uDD59','Hopf':'\\u210D','horbar':'\\u2015','HorizontalLine':'\\u2500','hscr':'\\uD835\\uDCBD','Hscr':'\\u210B','hslash':'\\u210F','hstrok':'\\u0127','Hstrok':'\\u0126','HumpDownHump':'\\u224E','HumpEqual':'\\u224F','hybull':'\\u2043','hyphen':'\\u2010','iacute':'\\xED','Iacute':'\\xCD','ic':'\\u2063','icirc':'\\xEE','Icirc':'\\xCE','icy':'\\u0438','Icy':'\\u0418','Idot':'\\u0130','iecy':'\\u0435','IEcy':'\\u0415','iexcl':'\\xA1','iff':'\\u21D4','ifr':'\\uD835\\uDD26','Ifr':'\\u2111','igrave':'\\xEC','Igrave':'\\xCC','ii':'\\u2148','iiiint':'\\u2A0C','iiint':'\\u222D','iinfin':'\\u29DC','iiota':'\\u2129','ijlig':'\\u0133','IJlig':'\\u0132','Im':'\\u2111','imacr':'\\u012B','Imacr':'\\u012A','image':'\\u2111','ImaginaryI':'\\u2148','imagline':'\\u2110','imagpart':'\\u2111','imath':'\\u0131','imof':'\\u22B7','imped':'\\u01B5','Implies':'\\u21D2','in':'\\u2208','incare':'\\u2105','infin':'\\u221E','infintie':'\\u29DD','inodot':'\\u0131','int':'\\u222B','Int':'\\u222C','intcal':'\\u22BA','integers':'\\u2124','Integral':'\\u222B','intercal':'\\u22BA','Intersection':'\\u22C2','intlarhk':'\\u2A17','intprod':'\\u2A3C','InvisibleComma':'\\u2063','InvisibleTimes':'\\u2062','iocy':'\\u0451','IOcy':'\\u0401','iogon':'\\u012F','Iogon':'\\u012E','iopf':'\\uD835\\uDD5A','Iopf':'\\uD835\\uDD40','iota':'\\u03B9','Iota':'\\u0399','iprod':'\\u2A3C','iquest':'\\xBF','iscr':'\\uD835\\uDCBE','Iscr':'\\u2110','isin':'\\u2208','isindot':'\\u22F5','isinE':'\\u22F9','isins':'\\u22F4','isinsv':'\\u22F3','isinv':'\\u2208','it':'\\u2062','itilde':'\\u0129','Itilde':'\\u0128','iukcy':'\\u0456','Iukcy':'\\u0406','iuml':'\\xEF','Iuml':'\\xCF','jcirc':'\\u0135','Jcirc':'\\u0134','jcy':'\\u0439','Jcy':'\\u0419','jfr':'\\uD835\\uDD27','Jfr':'\\uD835\\uDD0D','jmath':'\\u0237','jopf':'\\uD835\\uDD5B','Jopf':'\\uD835\\uDD41','jscr':'\\uD835\\uDCBF','Jscr':'\\uD835\\uDCA5','jsercy':'\\u0458','Jsercy':'\\u0408','jukcy':'\\u0454','Jukcy':'\\u0404','kappa':'\\u03BA','Kappa':'\\u039A','kappav':'\\u03F0','kcedil':'\\u0137','Kcedil':'\\u0136','kcy':'\\u043A','Kcy':'\\u041A','kfr':'\\uD835\\uDD28','Kfr':'\\uD835\\uDD0E','kgreen':'\\u0138','khcy':'\\u0445','KHcy':'\\u0425','kjcy':'\\u045C','KJcy':'\\u040C','kopf':'\\uD835\\uDD5C','Kopf':'\\uD835\\uDD42','kscr':'\\uD835\\uDCC0','Kscr':'\\uD835\\uDCA6','lAarr':'\\u21DA','lacute':'\\u013A','Lacute':'\\u0139','laemptyv':'\\u29B4','lagran':'\\u2112','lambda':'\\u03BB','Lambda':'\\u039B','lang':'\\u27E8','Lang':'\\u27EA','langd':'\\u2991','langle':'\\u27E8','lap':'\\u2A85','Laplacetrf':'\\u2112','laquo':'\\xAB','larr':'\\u2190','lArr':'\\u21D0','Larr':'\\u219E','larrb':'\\u21E4','larrbfs':'\\u291F','larrfs':'\\u291D','larrhk':'\\u21A9','larrlp':'\\u21AB','larrpl':'\\u2939','larrsim':'\\u2973','larrtl':'\\u21A2','lat':'\\u2AAB','latail':'\\u2919','lAtail':'\\u291B','late':'\\u2AAD','lates':'\\u2AAD\\uFE00','lbarr':'\\u290C','lBarr':'\\u290E','lbbrk':'\\u2772','lbrace':'{','lbrack':'[','lbrke':'\\u298B','lbrksld':'\\u298F','lbrkslu':'\\u298D','lcaron':'\\u013E','Lcaron':'\\u013D','lcedil':'\\u013C','Lcedil':'\\u013B','lceil':'\\u2308','lcub':'{','lcy':'\\u043B','Lcy':'\\u041B','ldca':'\\u2936','ldquo':'\\u201C','ldquor':'\\u201E','ldrdhar':'\\u2967','ldrushar':'\\u294B','ldsh':'\\u21B2','le':'\\u2264','lE':'\\u2266','LeftAngleBracket':'\\u27E8','leftarrow':'\\u2190','Leftarrow':'\\u21D0','LeftArrow':'\\u2190','LeftArrowBar':'\\u21E4','LeftArrowRightArrow':'\\u21C6','leftarrowtail':'\\u21A2','LeftCeiling':'\\u2308','LeftDoubleBracket':'\\u27E6','LeftDownTeeVector':'\\u2961','LeftDownVector':'\\u21C3','LeftDownVectorBar':'\\u2959','LeftFloor':'\\u230A','leftharpoondown':'\\u21BD','leftharpoonup':'\\u21BC','leftleftarrows':'\\u21C7','leftrightarrow':'\\u2194','Leftrightarrow':'\\u21D4','LeftRightArrow':'\\u2194','leftrightarrows':'\\u21C6','leftrightharpoons':'\\u21CB','leftrightsquigarrow':'\\u21AD','LeftRightVector':'\\u294E','LeftTee':'\\u22A3','LeftTeeArrow':'\\u21A4','LeftTeeVector':'\\u295A','leftthreetimes':'\\u22CB','LeftTriangle':'\\u22B2','LeftTriangleBar':'\\u29CF','LeftTriangleEqual':'\\u22B4','LeftUpDownVector':'\\u2951','LeftUpTeeVector':'\\u2960','LeftUpVector':'\\u21BF','LeftUpVectorBar':'\\u2958','LeftVector':'\\u21BC','LeftVectorBar':'\\u2952','leg':'\\u22DA','lEg':'\\u2A8B','leq':'\\u2264','leqq':'\\u2266','leqslant':'\\u2A7D','les':'\\u2A7D','lescc':'\\u2AA8','lesdot':'\\u2A7F','lesdoto':'\\u2A81','lesdotor':'\\u2A83','lesg':'\\u22DA\\uFE00','lesges':'\\u2A93','lessapprox':'\\u2A85','lessdot':'\\u22D6','lesseqgtr':'\\u22DA','lesseqqgtr':'\\u2A8B','LessEqualGreater':'\\u22DA','LessFullEqual':'\\u2266','LessGreater':'\\u2276','lessgtr':'\\u2276','LessLess':'\\u2AA1','lesssim':'\\u2272','LessSlantEqual':'\\u2A7D','LessTilde':'\\u2272','lfisht':'\\u297C','lfloor':'\\u230A','lfr':'\\uD835\\uDD29','Lfr':'\\uD835\\uDD0F','lg':'\\u2276','lgE':'\\u2A91','lHar':'\\u2962','lhard':'\\u21BD','lharu':'\\u21BC','lharul':'\\u296A','lhblk':'\\u2584','ljcy':'\\u0459','LJcy':'\\u0409','ll':'\\u226A','Ll':'\\u22D8','llarr':'\\u21C7','llcorner':'\\u231E','Lleftarrow':'\\u21DA','llhard':'\\u296B','lltri':'\\u25FA','lmidot':'\\u0140','Lmidot':'\\u013F','lmoust':'\\u23B0','lmoustache':'\\u23B0','lnap':'\\u2A89','lnapprox':'\\u2A89','lne':'\\u2A87','lnE':'\\u2268','lneq':'\\u2A87','lneqq':'\\u2268','lnsim':'\\u22E6','loang':'\\u27EC','loarr':'\\u21FD','lobrk':'\\u27E6','longleftarrow':'\\u27F5','Longleftarrow':'\\u27F8','LongLeftArrow':'\\u27F5','longleftrightarrow':'\\u27F7','Longleftrightarrow':'\\u27FA','LongLeftRightArrow':'\\u27F7','longmapsto':'\\u27FC','longrightarrow':'\\u27F6','Longrightarrow':'\\u27F9','LongRightArrow':'\\u27F6','looparrowleft':'\\u21AB','looparrowright':'\\u21AC','lopar':'\\u2985','lopf':'\\uD835\\uDD5D','Lopf':'\\uD835\\uDD43','loplus':'\\u2A2D','lotimes':'\\u2A34','lowast':'\\u2217','lowbar':'_','LowerLeftArrow':'\\u2199','LowerRightArrow':'\\u2198','loz':'\\u25CA','lozenge':'\\u25CA','lozf':'\\u29EB','lpar':'(','lparlt':'\\u2993','lrarr':'\\u21C6','lrcorner':'\\u231F','lrhar':'\\u21CB','lrhard':'\\u296D','lrm':'\\u200E','lrtri':'\\u22BF','lsaquo':'\\u2039','lscr':'\\uD835\\uDCC1','Lscr':'\\u2112','lsh':'\\u21B0','Lsh':'\\u21B0','lsim':'\\u2272','lsime':'\\u2A8D','lsimg':'\\u2A8F','lsqb':'[','lsquo':'\\u2018','lsquor':'\\u201A','lstrok':'\\u0142','Lstrok':'\\u0141','lt':'<','Lt':'\\u226A','LT':'<','ltcc':'\\u2AA6','ltcir':'\\u2A79','ltdot':'\\u22D6','lthree':'\\u22CB','ltimes':'\\u22C9','ltlarr':'\\u2976','ltquest':'\\u2A7B','ltri':'\\u25C3','ltrie':'\\u22B4','ltrif':'\\u25C2','ltrPar':'\\u2996','lurdshar':'\\u294A','luruhar':'\\u2966','lvertneqq':'\\u2268\\uFE00','lvnE':'\\u2268\\uFE00','macr':'\\xAF','male':'\\u2642','malt':'\\u2720','maltese':'\\u2720','map':'\\u21A6','Map':'\\u2905','mapsto':'\\u21A6','mapstodown':'\\u21A7','mapstoleft':'\\u21A4','mapstoup':'\\u21A5','marker':'\\u25AE','mcomma':'\\u2A29','mcy':'\\u043C','Mcy':'\\u041C','mdash':'\\u2014','mDDot':'\\u223A','measuredangle':'\\u2221','MediumSpace':'\\u205F','Mellintrf':'\\u2133','mfr':'\\uD835\\uDD2A','Mfr':'\\uD835\\uDD10','mho':'\\u2127','micro':'\\xB5','mid':'\\u2223','midast':'*','midcir':'\\u2AF0','middot':'\\xB7','minus':'\\u2212','minusb':'\\u229F','minusd':'\\u2238','minusdu':'\\u2A2A','MinusPlus':'\\u2213','mlcp':'\\u2ADB','mldr':'\\u2026','mnplus':'\\u2213','models':'\\u22A7','mopf':'\\uD835\\uDD5E','Mopf':'\\uD835\\uDD44','mp':'\\u2213','mscr':'\\uD835\\uDCC2','Mscr':'\\u2133','mstpos':'\\u223E','mu':'\\u03BC','Mu':'\\u039C','multimap':'\\u22B8','mumap':'\\u22B8','nabla':'\\u2207','nacute':'\\u0144','Nacute':'\\u0143','nang':'\\u2220\\u20D2','nap':'\\u2249','napE':'\\u2A70\\u0338','napid':'\\u224B\\u0338','napos':'\\u0149','napprox':'\\u2249','natur':'\\u266E','natural':'\\u266E','naturals':'\\u2115','nbsp':'\\xA0','nbump':'\\u224E\\u0338','nbumpe':'\\u224F\\u0338','ncap':'\\u2A43','ncaron':'\\u0148','Ncaron':'\\u0147','ncedil':'\\u0146','Ncedil':'\\u0145','ncong':'\\u2247','ncongdot':'\\u2A6D\\u0338','ncup':'\\u2A42','ncy':'\\u043D','Ncy':'\\u041D','ndash':'\\u2013','ne':'\\u2260','nearhk':'\\u2924','nearr':'\\u2197','neArr':'\\u21D7','nearrow':'\\u2197','nedot':'\\u2250\\u0338','NegativeMediumSpace':'\\u200B','NegativeThickSpace':'\\u200B','NegativeThinSpace':'\\u200B','NegativeVeryThinSpace':'\\u200B','nequiv':'\\u2262','nesear':'\\u2928','nesim':'\\u2242\\u0338','NestedGreaterGreater':'\\u226B','NestedLessLess':'\\u226A','NewLine':'\\n','nexist':'\\u2204','nexists':'\\u2204','nfr':'\\uD835\\uDD2B','Nfr':'\\uD835\\uDD11','nge':'\\u2271','ngE':'\\u2267\\u0338','ngeq':'\\u2271','ngeqq':'\\u2267\\u0338','ngeqslant':'\\u2A7E\\u0338','nges':'\\u2A7E\\u0338','nGg':'\\u22D9\\u0338','ngsim':'\\u2275','ngt':'\\u226F','nGt':'\\u226B\\u20D2','ngtr':'\\u226F','nGtv':'\\u226B\\u0338','nharr':'\\u21AE','nhArr':'\\u21CE','nhpar':'\\u2AF2','ni':'\\u220B','nis':'\\u22FC','nisd':'\\u22FA','niv':'\\u220B','njcy':'\\u045A','NJcy':'\\u040A','nlarr':'\\u219A','nlArr':'\\u21CD','nldr':'\\u2025','nle':'\\u2270','nlE':'\\u2266\\u0338','nleftarrow':'\\u219A','nLeftarrow':'\\u21CD','nleftrightarrow':'\\u21AE','nLeftrightarrow':'\\u21CE','nleq':'\\u2270','nleqq':'\\u2266\\u0338','nleqslant':'\\u2A7D\\u0338','nles':'\\u2A7D\\u0338','nless':'\\u226E','nLl':'\\u22D8\\u0338','nlsim':'\\u2274','nlt':'\\u226E','nLt':'\\u226A\\u20D2','nltri':'\\u22EA','nltrie':'\\u22EC','nLtv':'\\u226A\\u0338','nmid':'\\u2224','NoBreak':'\\u2060','NonBreakingSpace':'\\xA0','nopf':'\\uD835\\uDD5F','Nopf':'\\u2115','not':'\\xAC','Not':'\\u2AEC','NotCongruent':'\\u2262','NotCupCap':'\\u226D','NotDoubleVerticalBar':'\\u2226','NotElement':'\\u2209','NotEqual':'\\u2260','NotEqualTilde':'\\u2242\\u0338','NotExists':'\\u2204','NotGreater':'\\u226F','NotGreaterEqual':'\\u2271','NotGreaterFullEqual':'\\u2267\\u0338','NotGreaterGreater':'\\u226B\\u0338','NotGreaterLess':'\\u2279','NotGreaterSlantEqual':'\\u2A7E\\u0338','NotGreaterTilde':'\\u2275','NotHumpDownHump':'\\u224E\\u0338','NotHumpEqual':'\\u224F\\u0338','notin':'\\u2209','notindot':'\\u22F5\\u0338','notinE':'\\u22F9\\u0338','notinva':'\\u2209','notinvb':'\\u22F7','notinvc':'\\u22F6','NotLeftTriangle':'\\u22EA','NotLeftTriangleBar':'\\u29CF\\u0338','NotLeftTriangleEqual':'\\u22EC','NotLess':'\\u226E','NotLessEqual':'\\u2270','NotLessGreater':'\\u2278','NotLessLess':'\\u226A\\u0338','NotLessSlantEqual':'\\u2A7D\\u0338','NotLessTilde':'\\u2274','NotNestedGreaterGreater':'\\u2AA2\\u0338','NotNestedLessLess':'\\u2AA1\\u0338','notni':'\\u220C','notniva':'\\u220C','notnivb':'\\u22FE','notnivc':'\\u22FD','NotPrecedes':'\\u2280','NotPrecedesEqual':'\\u2AAF\\u0338','NotPrecedesSlantEqual':'\\u22E0','NotReverseElement':'\\u220C','NotRightTriangle':'\\u22EB','NotRightTriangleBar':'\\u29D0\\u0338','NotRightTriangleEqual':'\\u22ED','NotSquareSubset':'\\u228F\\u0338','NotSquareSubsetEqual':'\\u22E2','NotSquareSuperset':'\\u2290\\u0338','NotSquareSupersetEqual':'\\u22E3','NotSubset':'\\u2282\\u20D2','NotSubsetEqual':'\\u2288','NotSucceeds':'\\u2281','NotSucceedsEqual':'\\u2AB0\\u0338','NotSucceedsSlantEqual':'\\u22E1','NotSucceedsTilde':'\\u227F\\u0338','NotSuperset':'\\u2283\\u20D2','NotSupersetEqual':'\\u2289','NotTilde':'\\u2241','NotTildeEqual':'\\u2244','NotTildeFullEqual':'\\u2247','NotTildeTilde':'\\u2249','NotVerticalBar':'\\u2224','npar':'\\u2226','nparallel':'\\u2226','nparsl':'\\u2AFD\\u20E5','npart':'\\u2202\\u0338','npolint':'\\u2A14','npr':'\\u2280','nprcue':'\\u22E0','npre':'\\u2AAF\\u0338','nprec':'\\u2280','npreceq':'\\u2AAF\\u0338','nrarr':'\\u219B','nrArr':'\\u21CF','nrarrc':'\\u2933\\u0338','nrarrw':'\\u219D\\u0338','nrightarrow':'\\u219B','nRightarrow':'\\u21CF','nrtri':'\\u22EB','nrtrie':'\\u22ED','nsc':'\\u2281','nsccue':'\\u22E1','nsce':'\\u2AB0\\u0338','nscr':'\\uD835\\uDCC3','Nscr':'\\uD835\\uDCA9','nshortmid':'\\u2224','nshortparallel':'\\u2226','nsim':'\\u2241','nsime':'\\u2244','nsimeq':'\\u2244','nsmid':'\\u2224','nspar':'\\u2226','nsqsube':'\\u22E2','nsqsupe':'\\u22E3','nsub':'\\u2284','nsube':'\\u2288','nsubE':'\\u2AC5\\u0338','nsubset':'\\u2282\\u20D2','nsubseteq':'\\u2288','nsubseteqq':'\\u2AC5\\u0338','nsucc':'\\u2281','nsucceq':'\\u2AB0\\u0338','nsup':'\\u2285','nsupe':'\\u2289','nsupE':'\\u2AC6\\u0338','nsupset':'\\u2283\\u20D2','nsupseteq':'\\u2289','nsupseteqq':'\\u2AC6\\u0338','ntgl':'\\u2279','ntilde':'\\xF1','Ntilde':'\\xD1','ntlg':'\\u2278','ntriangleleft':'\\u22EA','ntrianglelefteq':'\\u22EC','ntriangleright':'\\u22EB','ntrianglerighteq':'\\u22ED','nu':'\\u03BD','Nu':'\\u039D','num':'#','numero':'\\u2116','numsp':'\\u2007','nvap':'\\u224D\\u20D2','nvdash':'\\u22AC','nvDash':'\\u22AD','nVdash':'\\u22AE','nVDash':'\\u22AF','nvge':'\\u2265\\u20D2','nvgt':'>\\u20D2','nvHarr':'\\u2904','nvinfin':'\\u29DE','nvlArr':'\\u2902','nvle':'\\u2264\\u20D2','nvlt':'<\\u20D2','nvltrie':'\\u22B4\\u20D2','nvrArr':'\\u2903','nvrtrie':'\\u22B5\\u20D2','nvsim':'\\u223C\\u20D2','nwarhk':'\\u2923','nwarr':'\\u2196','nwArr':'\\u21D6','nwarrow':'\\u2196','nwnear':'\\u2927','oacute':'\\xF3','Oacute':'\\xD3','oast':'\\u229B','ocir':'\\u229A','ocirc':'\\xF4','Ocirc':'\\xD4','ocy':'\\u043E','Ocy':'\\u041E','odash':'\\u229D','odblac':'\\u0151','Odblac':'\\u0150','odiv':'\\u2A38','odot':'\\u2299','odsold':'\\u29BC','oelig':'\\u0153','OElig':'\\u0152','ofcir':'\\u29BF','ofr':'\\uD835\\uDD2C','Ofr':'\\uD835\\uDD12','ogon':'\\u02DB','ograve':'\\xF2','Ograve':'\\xD2','ogt':'\\u29C1','ohbar':'\\u29B5','ohm':'\\u03A9','oint':'\\u222E','olarr':'\\u21BA','olcir':'\\u29BE','olcross':'\\u29BB','oline':'\\u203E','olt':'\\u29C0','omacr':'\\u014D','Omacr':'\\u014C','omega':'\\u03C9','Omega':'\\u03A9','omicron':'\\u03BF','Omicron':'\\u039F','omid':'\\u29B6','ominus':'\\u2296','oopf':'\\uD835\\uDD60','Oopf':'\\uD835\\uDD46','opar':'\\u29B7','OpenCurlyDoubleQuote':'\\u201C','OpenCurlyQuote':'\\u2018','operp':'\\u29B9','oplus':'\\u2295','or':'\\u2228','Or':'\\u2A54','orarr':'\\u21BB','ord':'\\u2A5D','order':'\\u2134','orderof':'\\u2134','ordf':'\\xAA','ordm':'\\xBA','origof':'\\u22B6','oror':'\\u2A56','orslope':'\\u2A57','orv':'\\u2A5B','oS':'\\u24C8','oscr':'\\u2134','Oscr':'\\uD835\\uDCAA','oslash':'\\xF8','Oslash':'\\xD8','osol':'\\u2298','otilde':'\\xF5','Otilde':'\\xD5','otimes':'\\u2297','Otimes':'\\u2A37','otimesas':'\\u2A36','ouml':'\\xF6','Ouml':'\\xD6','ovbar':'\\u233D','OverBar':'\\u203E','OverBrace':'\\u23DE','OverBracket':'\\u23B4','OverParenthesis':'\\u23DC','par':'\\u2225','para':'\\xB6','parallel':'\\u2225','parsim':'\\u2AF3','parsl':'\\u2AFD','part':'\\u2202','PartialD':'\\u2202','pcy':'\\u043F','Pcy':'\\u041F','percnt':'%','period':'.','permil':'\\u2030','perp':'\\u22A5','pertenk':'\\u2031','pfr':'\\uD835\\uDD2D','Pfr':'\\uD835\\uDD13','phi':'\\u03C6','Phi':'\\u03A6','phiv':'\\u03D5','phmmat':'\\u2133','phone':'\\u260E','pi':'\\u03C0','Pi':'\\u03A0','pitchfork':'\\u22D4','piv':'\\u03D6','planck':'\\u210F','planckh':'\\u210E','plankv':'\\u210F','plus':'+','plusacir':'\\u2A23','plusb':'\\u229E','pluscir':'\\u2A22','plusdo':'\\u2214','plusdu':'\\u2A25','pluse':'\\u2A72','PlusMinus':'\\xB1','plusmn':'\\xB1','plussim':'\\u2A26','plustwo':'\\u2A27','pm':'\\xB1','Poincareplane':'\\u210C','pointint':'\\u2A15','popf':'\\uD835\\uDD61','Popf':'\\u2119','pound':'\\xA3','pr':'\\u227A','Pr':'\\u2ABB','prap':'\\u2AB7','prcue':'\\u227C','pre':'\\u2AAF','prE':'\\u2AB3','prec':'\\u227A','precapprox':'\\u2AB7','preccurlyeq':'\\u227C','Precedes':'\\u227A','PrecedesEqual':'\\u2AAF','PrecedesSlantEqual':'\\u227C','PrecedesTilde':'\\u227E','preceq':'\\u2AAF','precnapprox':'\\u2AB9','precneqq':'\\u2AB5','precnsim':'\\u22E8','precsim':'\\u227E','prime':'\\u2032','Prime':'\\u2033','primes':'\\u2119','prnap':'\\u2AB9','prnE':'\\u2AB5','prnsim':'\\u22E8','prod':'\\u220F','Product':'\\u220F','profalar':'\\u232E','profline':'\\u2312','profsurf':'\\u2313','prop':'\\u221D','Proportion':'\\u2237','Proportional':'\\u221D','propto':'\\u221D','prsim':'\\u227E','prurel':'\\u22B0','pscr':'\\uD835\\uDCC5','Pscr':'\\uD835\\uDCAB','psi':'\\u03C8','Psi':'\\u03A8','puncsp':'\\u2008','qfr':'\\uD835\\uDD2E','Qfr':'\\uD835\\uDD14','qint':'\\u2A0C','qopf':'\\uD835\\uDD62','Qopf':'\\u211A','qprime':'\\u2057','qscr':'\\uD835\\uDCC6','Qscr':'\\uD835\\uDCAC','quaternions':'\\u210D','quatint':'\\u2A16','quest':'?','questeq':'\\u225F','quot':'\"','QUOT':'\"','rAarr':'\\u21DB','race':'\\u223D\\u0331','racute':'\\u0155','Racute':'\\u0154','radic':'\\u221A','raemptyv':'\\u29B3','rang':'\\u27E9','Rang':'\\u27EB','rangd':'\\u2992','range':'\\u29A5','rangle':'\\u27E9','raquo':'\\xBB','rarr':'\\u2192','rArr':'\\u21D2','Rarr':'\\u21A0','rarrap':'\\u2975','rarrb':'\\u21E5','rarrbfs':'\\u2920','rarrc':'\\u2933','rarrfs':'\\u291E','rarrhk':'\\u21AA','rarrlp':'\\u21AC','rarrpl':'\\u2945','rarrsim':'\\u2974','rarrtl':'\\u21A3','Rarrtl':'\\u2916','rarrw':'\\u219D','ratail':'\\u291A','rAtail':'\\u291C','ratio':'\\u2236','rationals':'\\u211A','rbarr':'\\u290D','rBarr':'\\u290F','RBarr':'\\u2910','rbbrk':'\\u2773','rbrace':'}','rbrack':']','rbrke':'\\u298C','rbrksld':'\\u298E','rbrkslu':'\\u2990','rcaron':'\\u0159','Rcaron':'\\u0158','rcedil':'\\u0157','Rcedil':'\\u0156','rceil':'\\u2309','rcub':'}','rcy':'\\u0440','Rcy':'\\u0420','rdca':'\\u2937','rdldhar':'\\u2969','rdquo':'\\u201D','rdquor':'\\u201D','rdsh':'\\u21B3','Re':'\\u211C','real':'\\u211C','realine':'\\u211B','realpart':'\\u211C','reals':'\\u211D','rect':'\\u25AD','reg':'\\xAE','REG':'\\xAE','ReverseElement':'\\u220B','ReverseEquilibrium':'\\u21CB','ReverseUpEquilibrium':'\\u296F','rfisht':'\\u297D','rfloor':'\\u230B','rfr':'\\uD835\\uDD2F','Rfr':'\\u211C','rHar':'\\u2964','rhard':'\\u21C1','rharu':'\\u21C0','rharul':'\\u296C','rho':'\\u03C1','Rho':'\\u03A1','rhov':'\\u03F1','RightAngleBracket':'\\u27E9','rightarrow':'\\u2192','Rightarrow':'\\u21D2','RightArrow':'\\u2192','RightArrowBar':'\\u21E5','RightArrowLeftArrow':'\\u21C4','rightarrowtail':'\\u21A3','RightCeiling':'\\u2309','RightDoubleBracket':'\\u27E7','RightDownTeeVector':'\\u295D','RightDownVector':'\\u21C2','RightDownVectorBar':'\\u2955','RightFloor':'\\u230B','rightharpoondown':'\\u21C1','rightharpoonup':'\\u21C0','rightleftarrows':'\\u21C4','rightleftharpoons':'\\u21CC','rightrightarrows':'\\u21C9','rightsquigarrow':'\\u219D','RightTee':'\\u22A2','RightTeeArrow':'\\u21A6','RightTeeVector':'\\u295B','rightthreetimes':'\\u22CC','RightTriangle':'\\u22B3','RightTriangleBar':'\\u29D0','RightTriangleEqual':'\\u22B5','RightUpDownVector':'\\u294F','RightUpTeeVector':'\\u295C','RightUpVector':'\\u21BE','RightUpVectorBar':'\\u2954','RightVector':'\\u21C0','RightVectorBar':'\\u2953','ring':'\\u02DA','risingdotseq':'\\u2253','rlarr':'\\u21C4','rlhar':'\\u21CC','rlm':'\\u200F','rmoust':'\\u23B1','rmoustache':'\\u23B1','rnmid':'\\u2AEE','roang':'\\u27ED','roarr':'\\u21FE','robrk':'\\u27E7','ropar':'\\u2986','ropf':'\\uD835\\uDD63','Ropf':'\\u211D','roplus':'\\u2A2E','rotimes':'\\u2A35','RoundImplies':'\\u2970','rpar':')','rpargt':'\\u2994','rppolint':'\\u2A12','rrarr':'\\u21C9','Rrightarrow':'\\u21DB','rsaquo':'\\u203A','rscr':'\\uD835\\uDCC7','Rscr':'\\u211B','rsh':'\\u21B1','Rsh':'\\u21B1','rsqb':']','rsquo':'\\u2019','rsquor':'\\u2019','rthree':'\\u22CC','rtimes':'\\u22CA','rtri':'\\u25B9','rtrie':'\\u22B5','rtrif':'\\u25B8','rtriltri':'\\u29CE','RuleDelayed':'\\u29F4','ruluhar':'\\u2968','rx':'\\u211E','sacute':'\\u015B','Sacute':'\\u015A','sbquo':'\\u201A','sc':'\\u227B','Sc':'\\u2ABC','scap':'\\u2AB8','scaron':'\\u0161','Scaron':'\\u0160','sccue':'\\u227D','sce':'\\u2AB0','scE':'\\u2AB4','scedil':'\\u015F','Scedil':'\\u015E','scirc':'\\u015D','Scirc':'\\u015C','scnap':'\\u2ABA','scnE':'\\u2AB6','scnsim':'\\u22E9','scpolint':'\\u2A13','scsim':'\\u227F','scy':'\\u0441','Scy':'\\u0421','sdot':'\\u22C5','sdotb':'\\u22A1','sdote':'\\u2A66','searhk':'\\u2925','searr':'\\u2198','seArr':'\\u21D8','searrow':'\\u2198','sect':'\\xA7','semi':';','seswar':'\\u2929','setminus':'\\u2216','setmn':'\\u2216','sext':'\\u2736','sfr':'\\uD835\\uDD30','Sfr':'\\uD835\\uDD16','sfrown':'\\u2322','sharp':'\\u266F','shchcy':'\\u0449','SHCHcy':'\\u0429','shcy':'\\u0448','SHcy':'\\u0428','ShortDownArrow':'\\u2193','ShortLeftArrow':'\\u2190','shortmid':'\\u2223','shortparallel':'\\u2225','ShortRightArrow':'\\u2192','ShortUpArrow':'\\u2191','shy':'\\xAD','sigma':'\\u03C3','Sigma':'\\u03A3','sigmaf':'\\u03C2','sigmav':'\\u03C2','sim':'\\u223C','simdot':'\\u2A6A','sime':'\\u2243','simeq':'\\u2243','simg':'\\u2A9E','simgE':'\\u2AA0','siml':'\\u2A9D','simlE':'\\u2A9F','simne':'\\u2246','simplus':'\\u2A24','simrarr':'\\u2972','slarr':'\\u2190','SmallCircle':'\\u2218','smallsetminus':'\\u2216','smashp':'\\u2A33','smeparsl':'\\u29E4','smid':'\\u2223','smile':'\\u2323','smt':'\\u2AAA','smte':'\\u2AAC','smtes':'\\u2AAC\\uFE00','softcy':'\\u044C','SOFTcy':'\\u042C','sol':'/','solb':'\\u29C4','solbar':'\\u233F','sopf':'\\uD835\\uDD64','Sopf':'\\uD835\\uDD4A','spades':'\\u2660','spadesuit':'\\u2660','spar':'\\u2225','sqcap':'\\u2293','sqcaps':'\\u2293\\uFE00','sqcup':'\\u2294','sqcups':'\\u2294\\uFE00','Sqrt':'\\u221A','sqsub':'\\u228F','sqsube':'\\u2291','sqsubset':'\\u228F','sqsubseteq':'\\u2291','sqsup':'\\u2290','sqsupe':'\\u2292','sqsupset':'\\u2290','sqsupseteq':'\\u2292','squ':'\\u25A1','square':'\\u25A1','Square':'\\u25A1','SquareIntersection':'\\u2293','SquareSubset':'\\u228F','SquareSubsetEqual':'\\u2291','SquareSuperset':'\\u2290','SquareSupersetEqual':'\\u2292','SquareUnion':'\\u2294','squarf':'\\u25AA','squf':'\\u25AA','srarr':'\\u2192','sscr':'\\uD835\\uDCC8','Sscr':'\\uD835\\uDCAE','ssetmn':'\\u2216','ssmile':'\\u2323','sstarf':'\\u22C6','star':'\\u2606','Star':'\\u22C6','starf':'\\u2605','straightepsilon':'\\u03F5','straightphi':'\\u03D5','strns':'\\xAF','sub':'\\u2282','Sub':'\\u22D0','subdot':'\\u2ABD','sube':'\\u2286','subE':'\\u2AC5','subedot':'\\u2AC3','submult':'\\u2AC1','subne':'\\u228A','subnE':'\\u2ACB','subplus':'\\u2ABF','subrarr':'\\u2979','subset':'\\u2282','Subset':'\\u22D0','subseteq':'\\u2286','subseteqq':'\\u2AC5','SubsetEqual':'\\u2286','subsetneq':'\\u228A','subsetneqq':'\\u2ACB','subsim':'\\u2AC7','subsub':'\\u2AD5','subsup':'\\u2AD3','succ':'\\u227B','succapprox':'\\u2AB8','succcurlyeq':'\\u227D','Succeeds':'\\u227B','SucceedsEqual':'\\u2AB0','SucceedsSlantEqual':'\\u227D','SucceedsTilde':'\\u227F','succeq':'\\u2AB0','succnapprox':'\\u2ABA','succneqq':'\\u2AB6','succnsim':'\\u22E9','succsim':'\\u227F','SuchThat':'\\u220B','sum':'\\u2211','Sum':'\\u2211','sung':'\\u266A','sup':'\\u2283','Sup':'\\u22D1','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','supdot':'\\u2ABE','supdsub':'\\u2AD8','supe':'\\u2287','supE':'\\u2AC6','supedot':'\\u2AC4','Superset':'\\u2283','SupersetEqual':'\\u2287','suphsol':'\\u27C9','suphsub':'\\u2AD7','suplarr':'\\u297B','supmult':'\\u2AC2','supne':'\\u228B','supnE':'\\u2ACC','supplus':'\\u2AC0','supset':'\\u2283','Supset':'\\u22D1','supseteq':'\\u2287','supseteqq':'\\u2AC6','supsetneq':'\\u228B','supsetneqq':'\\u2ACC','supsim':'\\u2AC8','supsub':'\\u2AD4','supsup':'\\u2AD6','swarhk':'\\u2926','swarr':'\\u2199','swArr':'\\u21D9','swarrow':'\\u2199','swnwar':'\\u292A','szlig':'\\xDF','Tab':'\\t','target':'\\u2316','tau':'\\u03C4','Tau':'\\u03A4','tbrk':'\\u23B4','tcaron':'\\u0165','Tcaron':'\\u0164','tcedil':'\\u0163','Tcedil':'\\u0162','tcy':'\\u0442','Tcy':'\\u0422','tdot':'\\u20DB','telrec':'\\u2315','tfr':'\\uD835\\uDD31','Tfr':'\\uD835\\uDD17','there4':'\\u2234','therefore':'\\u2234','Therefore':'\\u2234','theta':'\\u03B8','Theta':'\\u0398','thetasym':'\\u03D1','thetav':'\\u03D1','thickapprox':'\\u2248','thicksim':'\\u223C','ThickSpace':'\\u205F\\u200A','thinsp':'\\u2009','ThinSpace':'\\u2009','thkap':'\\u2248','thksim':'\\u223C','thorn':'\\xFE','THORN':'\\xDE','tilde':'\\u02DC','Tilde':'\\u223C','TildeEqual':'\\u2243','TildeFullEqual':'\\u2245','TildeTilde':'\\u2248','times':'\\xD7','timesb':'\\u22A0','timesbar':'\\u2A31','timesd':'\\u2A30','tint':'\\u222D','toea':'\\u2928','top':'\\u22A4','topbot':'\\u2336','topcir':'\\u2AF1','topf':'\\uD835\\uDD65','Topf':'\\uD835\\uDD4B','topfork':'\\u2ADA','tosa':'\\u2929','tprime':'\\u2034','trade':'\\u2122','TRADE':'\\u2122','triangle':'\\u25B5','triangledown':'\\u25BF','triangleleft':'\\u25C3','trianglelefteq':'\\u22B4','triangleq':'\\u225C','triangleright':'\\u25B9','trianglerighteq':'\\u22B5','tridot':'\\u25EC','trie':'\\u225C','triminus':'\\u2A3A','TripleDot':'\\u20DB','triplus':'\\u2A39','trisb':'\\u29CD','tritime':'\\u2A3B','trpezium':'\\u23E2','tscr':'\\uD835\\uDCC9','Tscr':'\\uD835\\uDCAF','tscy':'\\u0446','TScy':'\\u0426','tshcy':'\\u045B','TSHcy':'\\u040B','tstrok':'\\u0167','Tstrok':'\\u0166','twixt':'\\u226C','twoheadleftarrow':'\\u219E','twoheadrightarrow':'\\u21A0','uacute':'\\xFA','Uacute':'\\xDA','uarr':'\\u2191','uArr':'\\u21D1','Uarr':'\\u219F','Uarrocir':'\\u2949','ubrcy':'\\u045E','Ubrcy':'\\u040E','ubreve':'\\u016D','Ubreve':'\\u016C','ucirc':'\\xFB','Ucirc':'\\xDB','ucy':'\\u0443','Ucy':'\\u0423','udarr':'\\u21C5','udblac':'\\u0171','Udblac':'\\u0170','udhar':'\\u296E','ufisht':'\\u297E','ufr':'\\uD835\\uDD32','Ufr':'\\uD835\\uDD18','ugrave':'\\xF9','Ugrave':'\\xD9','uHar':'\\u2963','uharl':'\\u21BF','uharr':'\\u21BE','uhblk':'\\u2580','ulcorn':'\\u231C','ulcorner':'\\u231C','ulcrop':'\\u230F','ultri':'\\u25F8','umacr':'\\u016B','Umacr':'\\u016A','uml':'\\xA8','UnderBar':'_','UnderBrace':'\\u23DF','UnderBracket':'\\u23B5','UnderParenthesis':'\\u23DD','Union':'\\u22C3','UnionPlus':'\\u228E','uogon':'\\u0173','Uogon':'\\u0172','uopf':'\\uD835\\uDD66','Uopf':'\\uD835\\uDD4C','uparrow':'\\u2191','Uparrow':'\\u21D1','UpArrow':'\\u2191','UpArrowBar':'\\u2912','UpArrowDownArrow':'\\u21C5','updownarrow':'\\u2195','Updownarrow':'\\u21D5','UpDownArrow':'\\u2195','UpEquilibrium':'\\u296E','upharpoonleft':'\\u21BF','upharpoonright':'\\u21BE','uplus':'\\u228E','UpperLeftArrow':'\\u2196','UpperRightArrow':'\\u2197','upsi':'\\u03C5','Upsi':'\\u03D2','upsih':'\\u03D2','upsilon':'\\u03C5','Upsilon':'\\u03A5','UpTee':'\\u22A5','UpTeeArrow':'\\u21A5','upuparrows':'\\u21C8','urcorn':'\\u231D','urcorner':'\\u231D','urcrop':'\\u230E','uring':'\\u016F','Uring':'\\u016E','urtri':'\\u25F9','uscr':'\\uD835\\uDCCA','Uscr':'\\uD835\\uDCB0','utdot':'\\u22F0','utilde':'\\u0169','Utilde':'\\u0168','utri':'\\u25B5','utrif':'\\u25B4','uuarr':'\\u21C8','uuml':'\\xFC','Uuml':'\\xDC','uwangle':'\\u29A7','vangrt':'\\u299C','varepsilon':'\\u03F5','varkappa':'\\u03F0','varnothing':'\\u2205','varphi':'\\u03D5','varpi':'\\u03D6','varpropto':'\\u221D','varr':'\\u2195','vArr':'\\u21D5','varrho':'\\u03F1','varsigma':'\\u03C2','varsubsetneq':'\\u228A\\uFE00','varsubsetneqq':'\\u2ACB\\uFE00','varsupsetneq':'\\u228B\\uFE00','varsupsetneqq':'\\u2ACC\\uFE00','vartheta':'\\u03D1','vartriangleleft':'\\u22B2','vartriangleright':'\\u22B3','vBar':'\\u2AE8','Vbar':'\\u2AEB','vBarv':'\\u2AE9','vcy':'\\u0432','Vcy':'\\u0412','vdash':'\\u22A2','vDash':'\\u22A8','Vdash':'\\u22A9','VDash':'\\u22AB','Vdashl':'\\u2AE6','vee':'\\u2228','Vee':'\\u22C1','veebar':'\\u22BB','veeeq':'\\u225A','vellip':'\\u22EE','verbar':'|','Verbar':'\\u2016','vert':'|','Vert':'\\u2016','VerticalBar':'\\u2223','VerticalLine':'|','VerticalSeparator':'\\u2758','VerticalTilde':'\\u2240','VeryThinSpace':'\\u200A','vfr':'\\uD835\\uDD33','Vfr':'\\uD835\\uDD19','vltri':'\\u22B2','vnsub':'\\u2282\\u20D2','vnsup':'\\u2283\\u20D2','vopf':'\\uD835\\uDD67','Vopf':'\\uD835\\uDD4D','vprop':'\\u221D','vrtri':'\\u22B3','vscr':'\\uD835\\uDCCB','Vscr':'\\uD835\\uDCB1','vsubne':'\\u228A\\uFE00','vsubnE':'\\u2ACB\\uFE00','vsupne':'\\u228B\\uFE00','vsupnE':'\\u2ACC\\uFE00','Vvdash':'\\u22AA','vzigzag':'\\u299A','wcirc':'\\u0175','Wcirc':'\\u0174','wedbar':'\\u2A5F','wedge':'\\u2227','Wedge':'\\u22C0','wedgeq':'\\u2259','weierp':'\\u2118','wfr':'\\uD835\\uDD34','Wfr':'\\uD835\\uDD1A','wopf':'\\uD835\\uDD68','Wopf':'\\uD835\\uDD4E','wp':'\\u2118','wr':'\\u2240','wreath':'\\u2240','wscr':'\\uD835\\uDCCC','Wscr':'\\uD835\\uDCB2','xcap':'\\u22C2','xcirc':'\\u25EF','xcup':'\\u22C3','xdtri':'\\u25BD','xfr':'\\uD835\\uDD35','Xfr':'\\uD835\\uDD1B','xharr':'\\u27F7','xhArr':'\\u27FA','xi':'\\u03BE','Xi':'\\u039E','xlarr':'\\u27F5','xlArr':'\\u27F8','xmap':'\\u27FC','xnis':'\\u22FB','xodot':'\\u2A00','xopf':'\\uD835\\uDD69','Xopf':'\\uD835\\uDD4F','xoplus':'\\u2A01','xotime':'\\u2A02','xrarr':'\\u27F6','xrArr':'\\u27F9','xscr':'\\uD835\\uDCCD','Xscr':'\\uD835\\uDCB3','xsqcup':'\\u2A06','xuplus':'\\u2A04','xutri':'\\u25B3','xvee':'\\u22C1','xwedge':'\\u22C0','yacute':'\\xFD','Yacute':'\\xDD','yacy':'\\u044F','YAcy':'\\u042F','ycirc':'\\u0177','Ycirc':'\\u0176','ycy':'\\u044B','Ycy':'\\u042B','yen':'\\xA5','yfr':'\\uD835\\uDD36','Yfr':'\\uD835\\uDD1C','yicy':'\\u0457','YIcy':'\\u0407','yopf':'\\uD835\\uDD6A','Yopf':'\\uD835\\uDD50','yscr':'\\uD835\\uDCCE','Yscr':'\\uD835\\uDCB4','yucy':'\\u044E','YUcy':'\\u042E','yuml':'\\xFF','Yuml':'\\u0178','zacute':'\\u017A','Zacute':'\\u0179','zcaron':'\\u017E','Zcaron':'\\u017D','zcy':'\\u0437','Zcy':'\\u0417','zdot':'\\u017C','Zdot':'\\u017B','zeetrf':'\\u2128','ZeroWidthSpace':'\\u200B','zeta':'\\u03B6','Zeta':'\\u0396','zfr':'\\uD835\\uDD37','Zfr':'\\u2128','zhcy':'\\u0436','ZHcy':'\\u0416','zigrarr':'\\u21DD','zopf':'\\uD835\\uDD6B','Zopf':'\\u2124','zscr':'\\uD835\\uDCCF','Zscr':'\\uD835\\uDCB5','zwj':'\\u200D','zwnj':'\\u200C'};\n\tvar decodeMapLegacy = {'aacute':'\\xE1','Aacute':'\\xC1','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','aelig':'\\xE6','AElig':'\\xC6','agrave':'\\xE0','Agrave':'\\xC0','amp':'&','AMP':'&','aring':'\\xE5','Aring':'\\xC5','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','brvbar':'\\xA6','ccedil':'\\xE7','Ccedil':'\\xC7','cedil':'\\xB8','cent':'\\xA2','copy':'\\xA9','COPY':'\\xA9','curren':'\\xA4','deg':'\\xB0','divide':'\\xF7','eacute':'\\xE9','Eacute':'\\xC9','ecirc':'\\xEA','Ecirc':'\\xCA','egrave':'\\xE8','Egrave':'\\xC8','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','frac12':'\\xBD','frac14':'\\xBC','frac34':'\\xBE','gt':'>','GT':'>','iacute':'\\xED','Iacute':'\\xCD','icirc':'\\xEE','Icirc':'\\xCE','iexcl':'\\xA1','igrave':'\\xEC','Igrave':'\\xCC','iquest':'\\xBF','iuml':'\\xEF','Iuml':'\\xCF','laquo':'\\xAB','lt':'<','LT':'<','macr':'\\xAF','micro':'\\xB5','middot':'\\xB7','nbsp':'\\xA0','not':'\\xAC','ntilde':'\\xF1','Ntilde':'\\xD1','oacute':'\\xF3','Oacute':'\\xD3','ocirc':'\\xF4','Ocirc':'\\xD4','ograve':'\\xF2','Ograve':'\\xD2','ordf':'\\xAA','ordm':'\\xBA','oslash':'\\xF8','Oslash':'\\xD8','otilde':'\\xF5','Otilde':'\\xD5','ouml':'\\xF6','Ouml':'\\xD6','para':'\\xB6','plusmn':'\\xB1','pound':'\\xA3','quot':'\"','QUOT':'\"','raquo':'\\xBB','reg':'\\xAE','REG':'\\xAE','sect':'\\xA7','shy':'\\xAD','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','szlig':'\\xDF','thorn':'\\xFE','THORN':'\\xDE','times':'\\xD7','uacute':'\\xFA','Uacute':'\\xDA','ucirc':'\\xFB','Ucirc':'\\xDB','ugrave':'\\xF9','Ugrave':'\\xD9','uml':'\\xA8','uuml':'\\xFC','Uuml':'\\xDC','yacute':'\\xFD','Yacute':'\\xDD','yen':'\\xA5','yuml':'\\xFF'};\n\tvar decodeMapNumeric = {'0':'\\uFFFD','128':'\\u20AC','130':'\\u201A','131':'\\u0192','132':'\\u201E','133':'\\u2026','134':'\\u2020','135':'\\u2021','136':'\\u02C6','137':'\\u2030','138':'\\u0160','139':'\\u2039','140':'\\u0152','142':'\\u017D','145':'\\u2018','146':'\\u2019','147':'\\u201C','148':'\\u201D','149':'\\u2022','150':'\\u2013','151':'\\u2014','152':'\\u02DC','153':'\\u2122','154':'\\u0161','155':'\\u203A','156':'\\u0153','158':'\\u017E','159':'\\u0178'};\n\tvar invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\tvar object = {};\n\tvar hasOwnProperty = object.hasOwnProperty;\n\tvar has = function(object, propertyName) {\n\t\treturn hasOwnProperty.call(object, propertyName);\n\t};\n\n\tvar contains = function(array, value) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index < length) {\n\t\t\tif (array[index] == value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar merge = function(options, defaults) {\n\t\tif (!options) {\n\t\t\treturn defaults;\n\t\t}\n\t\tvar result = {};\n\t\tvar key;\n\t\tfor (key in defaults) {\n\t\t\t// A `hasOwnProperty` check is not needed here, since only recognized\n\t\t\t// option names are used anyway. Any others are ignored.\n\t\t\tresult[key] = has(options, key) ? options[key] : defaults[key];\n\t\t}\n\t\treturn result;\n\t};\n\n\t// Modified version of `ucs2encode`; see https://mths.be/punycode.\n\tvar codePointToSymbol = function(codePoint, strict) {\n\t\tvar output = '';\n\t\tif ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {\n\t\t\t// See issue #4:\n\t\t\t// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is\n\t\t\t// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD\n\t\t\t// REPLACEMENT CHARACTER.”\n\t\t\tif (strict) {\n\t\t\t\tparseError('character reference outside the permissible Unicode range');\n\t\t\t}\n\t\t\treturn '\\uFFFD';\n\t\t}\n\t\tif (has(decodeMapNumeric, codePoint)) {\n\t\t\tif (strict) {\n\t\t\t\tparseError('disallowed character reference');\n\t\t\t}\n\t\t\treturn decodeMapNumeric[codePoint];\n\t\t}\n\t\tif (strict && contains(invalidReferenceCodePoints, codePoint)) {\n\t\t\tparseError('disallowed character reference');\n\t\t}\n\t\tif (codePoint > 0xFFFF) {\n\t\t\tcodePoint -= 0x10000;\n\t\t\toutput += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);\n\t\t\tcodePoint = 0xDC00 | codePoint & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(codePoint);\n\t\treturn output;\n\t};\n\n\tvar hexEscape = function(codePoint) {\n\t\treturn '&#x' + codePoint.toString(16).toUpperCase() + ';';\n\t};\n\n\tvar decEscape = function(codePoint) {\n\t\treturn '&#' + codePoint + ';';\n\t};\n\n\tvar parseError = function(message) {\n\t\tthrow Error('Parse error: ' + message);\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar encode = function(string, options) {\n\t\toptions = merge(options, encode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidRawCodePoint.test(string)) {\n\t\t\tparseError('forbidden code point');\n\t\t}\n\t\tvar encodeEverything = options.encodeEverything;\n\t\tvar useNamedReferences = options.useNamedReferences;\n\t\tvar allowUnsafeSymbols = options.allowUnsafeSymbols;\n\t\tvar escapeCodePoint = options.decimal ? decEscape : hexEscape;\n\n\t\tvar escapeBmpSymbol = function(symbol) {\n\t\t\treturn escapeCodePoint(symbol.charCodeAt(0));\n\t\t};\n\n\t\tif (encodeEverything) {\n\t\t\t// Encode ASCII symbols.\n\t\t\tstring = string.replace(regexAsciiWhitelist, function(symbol) {\n\t\t\t\t// Use named references if requested & possible.\n\t\t\t\tif (useNamedReferences && has(encodeMap, symbol)) {\n\t\t\t\t\treturn '&' + encodeMap[symbol] + ';';\n\t\t\t\t}\n\t\t\t\treturn escapeBmpSymbol(symbol);\n\t\t\t});\n\t\t\t// Shorten a few escapes that represent two symbols, of which at least one\n\t\t\t// is within the ASCII range.\n\t\t\tif (useNamedReferences) {\n\t\t\t\tstring = string\n\t\t\t\t\t.replace(/>\\u20D2/g, '>⃒')\n\t\t\t\t\t.replace(/<\\u20D2/g, '<⃒')\n\t\t\t\t\t.replace(/fj/g, 'fj');\n\t\t\t}\n\t\t\t// Encode non-ASCII symbols.\n\t\t\tif (useNamedReferences) {\n\t\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Note: any remaining non-ASCII symbols are handled outside of the `if`.\n\t\t} else if (useNamedReferences) {\n\t\t\t// Apply named character references.\n\t\t\t// Encode `<>\"'&` using named character references.\n\t\t\tif (!allowUnsafeSymbols) {\n\t\t\t\tstring = string.replace(regexEscape, function(string) {\n\t\t\t\t\treturn '&' + encodeMap[string] + ';'; // no need to check `has()` here\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Shorten escapes that represent two symbols, of which at least one is\n\t\t\t// `<>\"'&`.\n\t\t\tstring = string\n\t\t\t\t.replace(/>\\u20D2/g, '>⃒')\n\t\t\t\t.replace(/<\\u20D2/g, '<⃒');\n\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t});\n\t\t} else if (!allowUnsafeSymbols) {\n\t\t\t// Encode `<>\"'&` using hexadecimal escapes, now that they’re not handled\n\t\t\t// using named character references.\n\t\t\tstring = string.replace(regexEscape, escapeBmpSymbol);\n\t\t}\n\t\treturn string\n\t\t\t// Encode astral symbols.\n\t\t\t.replace(regexAstralSymbols, function($0) {\n\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\tvar high = $0.charCodeAt(0);\n\t\t\t\tvar low = $0.charCodeAt(1);\n\t\t\t\tvar codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;\n\t\t\t\treturn escapeCodePoint(codePoint);\n\t\t\t})\n\t\t\t// Encode any remaining BMP symbols that are not printable ASCII symbols\n\t\t\t// using a hexadecimal escape.\n\t\t\t.replace(regexBmpWhitelist, escapeBmpSymbol);\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tencode.options = {\n\t\t'allowUnsafeSymbols': false,\n\t\t'encodeEverything': false,\n\t\t'strict': false,\n\t\t'useNamedReferences': false,\n\t\t'decimal' : false\n\t};\n\n\tvar decode = function(html, options) {\n\t\toptions = merge(options, decode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidEntity.test(html)) {\n\t\t\tparseError('malformed character reference');\n\t\t}\n\t\treturn html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {\n\t\t\tvar codePoint;\n\t\t\tvar semicolon;\n\t\t\tvar decDigits;\n\t\t\tvar hexDigits;\n\t\t\tvar reference;\n\t\t\tvar next;\n\n\t\t\tif ($1) {\n\t\t\t\treference = $1;\n\t\t\t\t// Note: there is no need to check `has(decodeMap, reference)`.\n\t\t\t\treturn decodeMap[reference];\n\t\t\t}\n\n\t\t\tif ($2) {\n\t\t\t\t// Decode named character references without trailing `;`, e.g. `&`.\n\t\t\t\t// This is only a parse error if it gets converted to `&`, or if it is\n\t\t\t\t// followed by `=` in an attribute context.\n\t\t\t\treference = $2;\n\t\t\t\tnext = $3;\n\t\t\t\tif (next && options.isAttributeValue) {\n\t\t\t\t\tif (strict && next == '=') {\n\t\t\t\t\t\tparseError('`&` did not start a character reference');\n\t\t\t\t\t}\n\t\t\t\t\treturn $0;\n\t\t\t\t} else {\n\t\t\t\t\tif (strict) {\n\t\t\t\t\t\tparseError(\n\t\t\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Note: there is no need to check `has(decodeMapLegacy, reference)`.\n\t\t\t\t\treturn decodeMapLegacy[reference] + (next || '');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($4) {\n\t\t\t\t// Decode decimal escapes, e.g. `𝌆`.\n\t\t\t\tdecDigits = $4;\n\t\t\t\tsemicolon = $5;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(decDigits, 10);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\tif ($6) {\n\t\t\t\t// Decode hexadecimal escapes, e.g. `𝌆`.\n\t\t\t\thexDigits = $6;\n\t\t\t\tsemicolon = $7;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(hexDigits, 16);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\t// If we’re still here, `if ($7)` is implied; it’s an ambiguous\n\t\t\t// ampersand for sure. https://mths.be/notes/ambiguous-ampersands\n\t\t\tif (strict) {\n\t\t\t\tparseError(\n\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn $0;\n\t\t});\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tdecode.options = {\n\t\t'isAttributeValue': false,\n\t\t'strict': false\n\t};\n\n\tvar escape = function(string) {\n\t\treturn string.replace(regexEscape, function($0) {\n\t\t\t// Note: there is no need to check `has(escapeMap, $0)` here.\n\t\t\treturn escapeMap[$0];\n\t\t});\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar he = {\n\t\t'version': '1.2.0',\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'escape': escape,\n\t\t'unescape': decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn he;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = he;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in he) {\n\t\t\t\thas(he, key) && (freeExports[key] = he[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.he = he;\n\t}\n\n}(this));\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('underscore', factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {\n var current = global._;\n var exports = global._ = factory();\n exports.noConflict = function () { global._ = current; return exports; };\n }()));\n}(this, (function () {\n // Underscore.js 1.13.6\n // https://underscorejs.org\n // (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors\n // Underscore may be freely distributed under the MIT license.\n\n // Current version.\n var VERSION = '1.13.6';\n\n // Establish the root object, `window` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global) ||\n Function('return this')() ||\n {};\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // Modern feature detection.\n var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n // All **ECMAScript 5+** native function implementations that we hope to use\n // are declared here.\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n // Create references to these builtin functions because we override them.\n var _isNaN = isNaN,\n _isFinite = isFinite;\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n // The largest integer that can be represented exactly.\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n }\n\n // Is a given variable an object?\n function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || (type === 'object' && !!obj);\n }\n\n // Is a given value equal to null?\n function isNull(obj) {\n return obj === null;\n }\n\n // Is a given variable undefined?\n function isUndefined(obj) {\n return obj === void 0;\n }\n\n // Is a given value a boolean?\n function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n }\n\n // Is a given value a DOM element?\n function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n }\n\n // Internal function for creating a `toString`-based type tester.\n function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n }\n\n var isString = tagTester('String');\n\n var isNumber = tagTester('Number');\n\n var isDate = tagTester('Date');\n\n var isRegExp = tagTester('RegExp');\n\n var isError = tagTester('Error');\n\n var isSymbol = tagTester('Symbol');\n\n var isArrayBuffer = tagTester('ArrayBuffer');\n\n var isFunction = tagTester('Function');\n\n // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n var isFunction$1 = isFunction;\n\n var hasObjectTag = tagTester('Object');\n\n // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n // In IE 11, the most common among them, this problem also applies to\n // `Map`, `WeakMap` and `Set`.\n var hasStringTagBug = (\n supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n\n var isDataView = tagTester('DataView');\n\n // In IE 10 - Edge 13, we need a different heuristic\n // to determine whether an object is a `DataView`.\n function ie10IsDataView(obj) {\n return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);\n }\n\n var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);\n\n // Is a given value an array?\n // Delegates to ECMA5's native `Array.isArray`.\n var isArray = nativeIsArray || tagTester('Array');\n\n // Internal function to check whether `key` is an own property name of `obj`.\n function has$1(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n }\n\n var isArguments = tagTester('Arguments');\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n (function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has$1(obj, 'callee');\n };\n }\n }());\n\n var isArguments$1 = isArguments;\n\n // Is a given object a finite number?\n function isFinite$1(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n }\n\n // Is the given value `NaN`?\n function isNaN$1(obj) {\n return isNumber(obj) && _isNaN(obj);\n }\n\n // Predicate-generating function. Often useful outside of Underscore.\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n // Common internal logic for `isArrayLike` and `isBufferLike`.\n function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n }\n\n // Internal helper to generate a function to obtain property `key` from `obj`.\n function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n }\n\n // Internal helper to obtain the `byteLength` property of an object.\n var getByteLength = shallowProperty('byteLength');\n\n // Internal helper to determine whether we should spend extensive checks against\n // `ArrayBuffer` et al.\n var isBufferLike = createSizePropertyCheck(getByteLength);\n\n // Is a given value a typed array?\n var typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\n function isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n }\n\n var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);\n\n // Internal helper to obtain the `length` property of an object.\n var getLength = shallowProperty('length');\n\n // Internal helper to create a simple lookup structure.\n // `collectNonEnumProps` used to depend on `_.contains`, but this led to\n // circular imports. `emulatedSet` is a one-off solution that only works for\n // arrays of strings.\n function emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key] === true; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n }\n\n // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n // be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n // needed.\n function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`.\n function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has$1(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments$1(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n }\n\n // Returns whether an object has a given set of `key:value` pairs.\n function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n }\n\n // If Underscore is called as a function, it returns a wrapped object that can\n // be used OO-style. This wrapper holds altered versions of all functions added\n // through `_.mixin`. Wrapped objects may be chained.\n function _$1(obj) {\n if (obj instanceof _$1) return obj;\n if (!(this instanceof _$1)) return new _$1(obj);\n this._wrapped = obj;\n }\n\n _$1.VERSION = VERSION;\n\n // Extracts the result from a wrapped and chained object.\n _$1.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxies for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;\n\n _$1.prototype.toString = function() {\n return String(this._wrapped);\n };\n\n // Internal function to wrap or shallow-copy an ArrayBuffer,\n // typed array or DataView to a new view, reusing the buffer.\n function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n }\n\n // We use this string twice, so give it a name for minification.\n var tagDataView = '[object DataView]';\n\n // Internal recursive comparison function for `_.isEqual`.\n function eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n }\n\n // Internal recursive comparison function for `_.isEqual`.\n function deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _$1) a = a._wrapped;\n if (b instanceof _$1) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {\n if (!isDataView$1(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray$1(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&\n isFunction$1(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n }\n\n // Perform a deep comparison to check if two objects are equal.\n function isEqual(a, b) {\n return eq(a, b);\n }\n\n // Retrieve all the enumerable property names of an object.\n function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n\n // Since the regular `Object.prototype.toString` type tests don't work for\n // some types in IE 11, we use a fingerprinting heuristic instead, based\n // on the methods. It's not great, but it's the best we got.\n // The fingerprint method lists are defined below.\n function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction$1(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);\n };\n }\n\n // In the interest of compact minification, we write\n // each string in the fingerprints only once.\n var forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n // `Map`, `WeakMap` and `Set` each have slightly different\n // combinations of the above sublists.\n var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n\n var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n\n var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n\n var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n\n var isWeakSet = tagTester('WeakSet');\n\n // Retrieve the values of an object's properties.\n function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n }\n\n // Convert an object into a list of `[key, value]` pairs.\n // The opposite of `_.object` with one argument.\n function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n }\n\n // Invert the keys and values of an object. The values must be serializable.\n function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n }\n\n // Return a sorted list of the function names available on the object.\n function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction$1(obj[key])) names.push(key);\n }\n return names.sort();\n }\n\n // An internal function for creating assigner functions.\n function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n }\n\n // Extend a given object with all the properties in passed-in object(s).\n var extend = createAssigner(allKeys);\n\n // Assigns a given object with all the own properties in the passed-in\n // object(s).\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n var extendOwn = createAssigner(keys);\n\n // Fill in a given object with default properties.\n var defaults = createAssigner(allKeys, true);\n\n // Create a naked function reference for surrogate-prototype-swapping.\n function ctor() {\n return function(){};\n }\n\n // An internal function for creating a new object that inherits from another.\n function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n }\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n }\n\n // Create a (shallow-cloned) duplicate of an object.\n function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n }\n\n // Invokes `interceptor` with the `obj` and then returns `obj`.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n }\n\n // Normalize a (deep) property `path` to array.\n // Like `_.iteratee`, this function can be customized.\n function toPath$1(path) {\n return isArray(path) ? path : [path];\n }\n _$1.toPath = toPath$1;\n\n // Internal wrapper for `_.toPath` to enable minification.\n // Similar to `cb` for `_.iteratee`.\n function toPath(path) {\n return _$1.toPath(path);\n }\n\n // Internal function to obtain a nested property in `obj` along `path`.\n function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n }\n\n // Get the value of the (deep) property on `path` from `object`.\n // If any property in `path` does not exist or if the value is\n // `undefined`, return `defaultValue` instead.\n // The `path` is normalized through `_.toPath`.\n function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n }\n\n // Shortcut function for checking if an object has a given property directly on\n // itself (in other words, not on a prototype). Unlike the internal `has`\n // function, this public version can also traverse nested properties.\n function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!has$1(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n }\n\n // Keep the identity function around for default iteratees.\n function identity(value) {\n return value;\n }\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n }\n\n // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indices.\n function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n }\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n }\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `_.identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction$1(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n }\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only `argCount` argument.\n function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n }\n _$1.iteratee = iteratee;\n\n // The function we call internally to generate a callback. It invokes\n // `_.iteratee` if overridden, otherwise `baseIteratee`.\n function cb(value, context, argCount) {\n if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n }\n\n // Returns the results of applying the `iteratee` to each element of `obj`.\n // In contrast to `_.map` it returns an object.\n function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n\n // Predicate-generating function. Often useful outside of Underscore.\n function noop(){}\n\n // Generates a function for a given object that returns a given property.\n function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n }\n\n // Run a function **n** times.\n function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n }\n\n // Return a random integer between `min` and `max` (inclusive).\n function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n }\n\n // A (possibly faster) way to get the current timestamp as an integer.\n var now = Date.now || function() {\n return new Date().getTime();\n };\n\n // Internal helper to generate functions for escaping and unescaping strings\n // to/from HTML interpolation.\n function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n }\n\n // Internal list of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n\n // Function for escaping strings to HTML interpolation.\n var _escape = createEscaper(escapeMap);\n\n // Internal list of HTML entities for unescaping.\n var unescapeMap = invert(escapeMap);\n\n // Function for unescaping strings from HTML interpolation.\n var _unescape = createEscaper(unescapeMap);\n\n // By default, Underscore uses ERB-style template delimiters. Change the\n // following template settings to use alternative delimiters.\n var templateSettings = _$1.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `_.templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n function escapeChar(match) {\n return '\\\\' + escapes[match];\n }\n\n // In order to prevent third-party code injection through\n // `_.templateSettings.variable`, we test it against the following regular\n // expression. It is intentionally a bit more liberal than just matching valid\n // identifiers, but still prevents possible loopholes through defaults or\n // destructuring assignment.\n var bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _$1.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n // Insure against third-party code injection. (CVE-2021-23358)\n if (!bareIdentifier.test(argument)) throw new Error(\n 'variable is not a bare identifier: ' + argument\n );\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _$1);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n }\n\n // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction$1(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction$1(prop) ? prop.call(obj) : prop;\n }\n return obj;\n }\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n }\n\n // Start chaining a wrapped Underscore object.\n function chain(obj) {\n var instance = _$1(obj);\n instance._chain = true;\n return instance;\n }\n\n // Internal function to execute `sourceFunc` bound to `context` with optional\n // `args`. Determines whether to execute a function as a constructor or as a\n // normal function.\n function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n }\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. `_` acts\n // as a placeholder by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n var partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n });\n\n partial.placeholder = _$1;\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally).\n var bind = restArguments(function(func, context, args) {\n if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n });\n\n // Internal helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object.\n // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var isArrayLike = createSizePropertyCheck(getLength);\n\n // Internal implementation of a recursive `flatten` function.\n function flatten$1(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten$1(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n }\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n var bindAll = restArguments(function(obj, keys) {\n keys = flatten$1(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n });\n\n // Memoize an expensive function by storing its results.\n function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n }\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n var delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n });\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n var defer = partial(delay, _$1, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n }\n\n // When a sequence of calls of the returned function ends, the argument\n // function is triggered. The end of a sequence is defined by the `wait`\n // parameter. If `immediate` is passed, the argument function will be\n // triggered at the beginning of the sequence instead of at the end.\n function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n // This check is needed because `func` can recursively invoke `debounced`.\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n }\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n function wrap(func, wrapper) {\n return partial(wrapper, func);\n }\n\n // Returns a negated version of the passed-in predicate.\n function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n }\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n }\n\n // Returns a function that will only be executed on and after the Nth call.\n function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n // Returns a function that will only be executed up to (but not including) the\n // Nth call.\n function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n }\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n var once = partial(before, 2);\n\n // Returns the first key on an object that passes a truth test.\n function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n }\n\n // Internal function to generate `_.findIndex` and `_.findLastIndex`.\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a truth test.\n var findIndex = createPredicateIndexFinder(1);\n\n // Returns the last index on an array-like that passes a truth test.\n var findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n }\n\n // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN$1);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n var indexOf = createIndexFinder(1, findIndex, sortedIndex);\n\n // Return the position of the last occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n var lastIndexOf = createIndexFinder(-1, findLastIndex);\n\n // Return the first value which passes a truth test.\n function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n }\n\n // Convenience version of a common use case of `_.find`: getting the first\n // object containing specific `key:value` pairs.\n function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n }\n\n // The cornerstone for collection functions, an `each`\n // implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n }\n\n // Return the results of applying the iteratee to each element.\n function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n\n // Internal helper to create a reducing function, iterating left or right.\n function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n var reduce = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n var reduceRight = createReduce(-1);\n\n // Return all the elements that pass a truth test.\n function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n }\n\n // Return all the elements for which a truth test fails.\n function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n }\n\n // Determine whether all of the elements pass a truth test.\n function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n }\n\n // Determine if at least one element in the object passes a truth test.\n function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n }\n\n // Determine if the array or object contains a given item (using `===`).\n function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n }\n\n // Invoke a method (with arguments) on every item in a collection.\n var invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction$1(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n });\n\n // Convenience version of a common use case of `_.map`: fetching a property.\n function pluck(obj, key) {\n return map(obj, property(key));\n }\n\n // Convenience version of a common use case of `_.filter`: selecting only\n // objects containing specific `key:value` pairs.\n function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n }\n\n // Return the maximum element (or element-based computation).\n function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n\n // Return the minimum element (or element-based computation).\n function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n\n // Safely create a real, live array from anything iterable.\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n }\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `_.map`.\n function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = toArray(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n }\n\n // Shuffle a collection.\n function shuffle(obj) {\n return sample(obj, Infinity);\n }\n\n // Sort the object's values by a criterion produced by an iteratee.\n function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n }\n\n // An internal function used for aggregate \"group by\" operations.\n function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n }\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n var groupBy = group(function(result, value, key) {\n if (has$1(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n // when you know that your index values will be unique.\n var indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n var countBy = group(function(result, value, key) {\n if (has$1(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Split a collection into two arrays: one whose elements all pass the given\n // truth test, and one whose elements all do not pass the truth test.\n var partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\n\n // Return the number of elements in a collection.\n function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n }\n\n // Internal `_.pick` helper function to determine whether `key` is an enumerable\n // property name of `obj`.\n function keyInObj(value, key, obj) {\n return key in obj;\n }\n\n // Return a copy of the object only containing the allowed properties.\n var pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction$1(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten$1(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n });\n\n // Return a copy of the object without the disallowed properties.\n var omit = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction$1(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten$1(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n });\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n }\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. The **guard** check allows it to work with `_.map`.\n function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n }\n\n // Returns everything but the first entry of the `array`. Especially useful on\n // the `arguments` object. Passing an **n** will return the rest N values in the\n // `array`.\n function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n }\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n }\n\n // Trim out all falsy values from an array.\n function compact(array) {\n return filter(array, Boolean);\n }\n\n // Flatten out an array, either recursively (by default), or up to `depth`.\n // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\n function flatten(array, depth) {\n return flatten$1(array, depth, false);\n }\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n var difference = restArguments(function(array, rest) {\n rest = flatten$1(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n });\n\n // Return a version of the array that does not contain the specified value(s).\n var without = restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n });\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the faster algorithm.\n function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n }\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n var union = restArguments(function(arrays) {\n return uniq(flatten$1(arrays, true, true));\n });\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n }\n\n // Complement of zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices.\n function unzip(array) {\n var length = (array && max(array, getLength).length) || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n }\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n var zip = restArguments(unzip);\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values. Passing by pairs is the reverse of `_.pairs`.\n function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n }\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](https://docs.python.org/library/functions.html#range).\n function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n }\n\n // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n }\n\n // Helper function to continue chaining intermediate results.\n function chainResult(instance, obj) {\n return instance._chain ? _$1(obj).chain() : obj;\n }\n\n // Add your own custom functions to the Underscore object.\n function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _$1[name] = obj[name];\n _$1.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_$1, args));\n };\n });\n return _$1;\n }\n\n // Add all mutator `Array` functions to the wrapper.\n each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _$1.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n });\n\n // Add all accessor `Array` functions to the wrapper.\n each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _$1.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n });\n\n // Named Exports\n\n var allExports = {\n __proto__: null,\n VERSION: VERSION,\n restArguments: restArguments,\n isObject: isObject,\n isNull: isNull,\n isUndefined: isUndefined,\n isBoolean: isBoolean,\n isElement: isElement,\n isString: isString,\n isNumber: isNumber,\n isDate: isDate,\n isRegExp: isRegExp,\n isError: isError,\n isSymbol: isSymbol,\n isArrayBuffer: isArrayBuffer,\n isDataView: isDataView$1,\n isArray: isArray,\n isFunction: isFunction$1,\n isArguments: isArguments$1,\n isFinite: isFinite$1,\n isNaN: isNaN$1,\n isTypedArray: isTypedArray$1,\n isEmpty: isEmpty,\n isMatch: isMatch,\n isEqual: isEqual,\n isMap: isMap,\n isWeakMap: isWeakMap,\n isSet: isSet,\n isWeakSet: isWeakSet,\n keys: keys,\n allKeys: allKeys,\n values: values,\n pairs: pairs,\n invert: invert,\n functions: functions,\n methods: functions,\n extend: extend,\n extendOwn: extendOwn,\n assign: extendOwn,\n defaults: defaults,\n create: create,\n clone: clone,\n tap: tap,\n get: get,\n has: has,\n mapObject: mapObject,\n identity: identity,\n constant: constant,\n noop: noop,\n toPath: toPath$1,\n property: property,\n propertyOf: propertyOf,\n matcher: matcher,\n matches: matcher,\n times: times,\n random: random,\n now: now,\n escape: _escape,\n unescape: _unescape,\n templateSettings: templateSettings,\n template: template,\n result: result,\n uniqueId: uniqueId,\n chain: chain,\n iteratee: iteratee,\n partial: partial,\n bind: bind,\n bindAll: bindAll,\n memoize: memoize,\n delay: delay,\n defer: defer,\n throttle: throttle,\n debounce: debounce,\n wrap: wrap,\n negate: negate,\n compose: compose,\n after: after,\n before: before,\n once: once,\n findKey: findKey,\n findIndex: findIndex,\n findLastIndex: findLastIndex,\n sortedIndex: sortedIndex,\n indexOf: indexOf,\n lastIndexOf: lastIndexOf,\n find: find,\n detect: find,\n findWhere: findWhere,\n each: each,\n forEach: each,\n map: map,\n collect: map,\n reduce: reduce,\n foldl: reduce,\n inject: reduce,\n reduceRight: reduceRight,\n foldr: reduceRight,\n filter: filter,\n select: filter,\n reject: reject,\n every: every,\n all: every,\n some: some,\n any: some,\n contains: contains,\n includes: contains,\n include: contains,\n invoke: invoke,\n pluck: pluck,\n where: where,\n max: max,\n min: min,\n shuffle: shuffle,\n sample: sample,\n sortBy: sortBy,\n groupBy: groupBy,\n indexBy: indexBy,\n countBy: countBy,\n partition: partition,\n toArray: toArray,\n size: size,\n pick: pick,\n omit: omit,\n first: first,\n head: first,\n take: first,\n initial: initial,\n last: last,\n rest: rest,\n tail: rest,\n drop: rest,\n compact: compact,\n flatten: flatten,\n without: without,\n uniq: uniq,\n unique: uniq,\n union: union,\n intersection: intersection,\n difference: difference,\n unzip: unzip,\n transpose: unzip,\n zip: zip,\n object: object,\n range: range,\n chunk: chunk,\n mixin: mixin,\n 'default': _$1\n };\n\n // Default Export\n\n // Add all of the Underscore functions to the wrapper object.\n var _ = mixin(allExports);\n // Legacy Node.js API.\n _._ = _;\n\n return _;\n\n})));\n//# sourceMappingURL=underscore-umd.js.map\n","module.exports={\n \"qaintegration\": 100501,\n \"finch\": 800004,\n \"sparrow\": 800005\n}\n","const _ = require('underscore');\n\n// ref: OverDrive.Thunder.Models.DataModels.GeneratedCollectionDetails\nmodule.exports = class GeneratedCollectionDetails {\n constructor() {\n this.mediaType = '';\n this.language = '';\n this.publisherEntityId = null; // int\n this.maturityLevels = []; // string\n this.subjects = []; // string\n this.bisacCodes = [];\n\n this.sortBy = '';\n this.maxItems = undefined; // int\n\n Object.assign(this, ...arguments);\n }\n\n // Translates GeneratedCollectionDetails model to parameters that align with the MediaParameters model for executing a \"search\"\n serializeForSearch() {\n let model = _.extend({}, this);\n\n // language is an array in MediaParameters\n model.language = _(_.flatten([model.language])).reject((val) => _.isEmpty(val));\n\n // maturityLevels is called maturityLevel\n model.maturityLevel = _(_.flatten([model.maturityLevels])).reject((val) => _.isEmpty(val));\n delete model.maturityLevels;\n\n // subjects is called subject\n model.subject = _(_.flatten([model.subjects])).reject((val) => _.isEmpty(val));\n delete model.subjects;\n\n if (window.featureManager.isEnabled('bisac-collection-filtering')) {\n model.bisacCode = _(_.flatten([model.bisacCodes])).reject((val) => _.isEmpty(val));\n }\n\n if (model.mediaTypes) {\n if (window.featureManager.isEnabled('media-types-collection-param')) {\n delete model.mediaType;\n } else{\n delete model.mediaTypes;\n }\n }\n\n if (model.mediaTypes) {\n model.mediaTypes = model.mediaTypes.join(',');\n } else if (window.featureManager.isEnabled('filter-out-ntc')) {\n model.mediaTypes = window.OverDrive.whitelistedMediaTypes;\n }\n\n delete model.bisacCodes; // we need to remove this property regardless because the correct query param is `bisacCode`. The mismatch between the thunder query params and the property names in the generated collection definitions is...fun.\n\n return model;\n }\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getOptimizedCovers = void 0;\nvar _ = __importStar(require(\"underscore\"));\nfunction getOptimizedCovers(covers, desiredSize) {\n // coversBySize is now an array of covers, from smallest to largest\n var coversBySize = _.sortBy(covers, 'width');\n // Start with the biggest cover\n // Copy object with Object.assign() so we dont damage reference\n var optimizedCover = Object.assign({}, _.last(coversBySize));\n if (optimizedCover && optimizedCover.href) {\n var legacyToOptimizedImageHostsMap = {\n 'https://img1.od-cdn.com/': 'https://ic.od-cdn.com/resize',\n 'https://images.overdrivechina.cn/': 'https://images.overdrivechina.cn/resize'\n };\n var hostMapKey = _.find(Object.keys(legacyToOptimizedImageHostsMap), function (legacy) { return optimizedCover.href.startsWith(legacy); });\n if (hostMapKey) {\n // look up the corresponding optimized root, e.g. https://img1.od-cdn.com/ -> https://ic.od-cdn.com/resize\n var optimizedImageHost = legacyToOptimizedImageHostsMap[hostMapKey];\n var optimizations = 'type=auto'; // format = auto -> use webp if the device supports it\n var path = '';\n if (typeof document === 'undefined') {\n // node.js usage should be fine with the URL api\n var url = new URL(optimizedCover.href);\n path = url.pathname;\n }\n else {\n // hack to get url pathname since IE doesn't support the URL api. I didn't want to add a polyfill\n var a = document.createElement('a');\n a.href = optimizedCover.href;\n path = a.pathname;\n if (!path.startsWith('/')) { // browsers are inconsistent about whether the pathname includes a leading slash, but the cachefly api requires exactly one on the url param\n path = \"/\".concat(path);\n }\n }\n var encodedSrcUrl = encodeURIComponent(path);\n var coverHrefWithoutSize = \"\".concat(optimizedImageHost, \"?\").concat(optimizations, \"&url=\").concat(encodedSrcUrl, \"&stripmeta=true\");\n optimizedCover.href = \"\".concat(coverHrefWithoutSize, \"&width=\").concat(desiredSize);\n optimizedCover.srcset = \"\".concat(coverHrefWithoutSize, \"&width=\").concat(Math.floor(desiredSize * 2), \" 2x, \") +\n \"\".concat(coverHrefWithoutSize, \"&width=\").concat(Math.floor(desiredSize * 1.5), \" 1.5x, \") +\n \"\".concat(coverHrefWithoutSize, \"&width=\").concat(desiredSize, \" 1x\");\n return optimizedCover;\n }\n }\n return _.find(coversBySize, function (cover) { return cover.width >= desiredSize; }) ||\n _.last(coversBySize); // finds the first cover that is big enough\n}\nexports.getOptimizedCovers = getOptimizedCovers;\n\n//# sourceMappingURL=getOptimizedCover-ts.js.map\n\n//# sourceMappingURL=getOptimizedCover-ts.js.map\n","const websiteIds = require('lightning-common/lib/configuration/websiteIds.json');\n\nmodule.exports = function isCanarySite(websiteId) {\n return (\n websiteId === websiteIds.qaintegration ||\n (websiteId >= 800000 && websiteId < 900000)\n );\n};\n","const _ = require('underscore');\n\n/**\n * Defines all the available input parameters for the media endpoint\n * @class MediaParameters\n * ref: https://thunder.api.test.overdrive.com/docs/ui/index#!/Media/V2Media_IndexMedia\n */\nmodule.exports = class MediaParameters {\n\n constructor() {\n this.query = '';\n this.mediaType = '';\n this.mediaTypes = '';\n this.title = '';\n this.series = '';\n this.publisherId = '';\n this.publisherEntityId = null;\n this.imprintId = '';\n this.identifier = '';\n this.creator = '';\n this.creatorId = null;\n this.addedDate = '';\n this.availableFirst = null;\n this.showOnlyAvailable = false;\n this.showOnlyPrerelease = false;\n this.showOnlyLuckyDayAvailable = false;\n this.hasAudioSynchronizedText = null;\n this.collectionId = 0;\n\n // All of the following arrays are string arrays\n this.format = [];\n this.subject = [];\n this.bisacCode = [];\n this.maturityLevel = [];\n this.language = [];\n this.atosLevel = [];\n this.lexileScore = [];\n this.interestLevel = [];\n this.gradeLevel = [];\n this.includedFacets = [];\n\n this.sortBy = 'relevance';\n this.show = 'owned';\n this.page = 1;\n this.perPage = 24;\n this.includeFacets = true;\n this.includeNoFormatTitles = false;\n this.filterCpcTitles = false;\n this.maxItems = 0;\n\n Object.assign(this, ...arguments);\n }\n\n applyRoomFiltersAndUserPrefs(roomFilters, userPreferences) {\n if (roomFilters) {\n // Note that the names don't match up so we can't just extend\n if (roomFilters.maturityLevels) {\n this.maturityLevel = roomFilters.maturityLevels;\n }\n if (roomFilters.subjects) {\n this.subject = roomFilters.subjects;\n }\n if (roomFilters.language) {\n this.language = roomFilters.language;\n }\n if (roomFilters.mediaType) {\n this.mediaType = roomFilters.mediaType;\n this.mediaTypes = roomFilters.mediaType;\n }\n }\n\n if (userPreferences) {\n // There may be more user prefs to apply besides audience-settings but this\n // was the immediate need. We can add more as they come up.\n if (userPreferences['audience-setting'] && this.maturityLevel.length === 0) {\n let audience = userPreferences['audience-setting'];\n let maturityLevels = [];\n _.each(_.keys(audience), function(key) {\n if (audience[key] && key !== 'all') {\n maturityLevels.push(key);\n }\n });\n if (maturityLevels.length > 0) {\n this.maturityLevel = maturityLevels;\n }\n }\n }\n }\n\n serialize() {\n let response = _.extend({}, this);\n\n // Remove all properties that do not have a value set\n Object.keys(response).forEach((key) => {\n !this._hasValue(response[key]) && delete response[key];\n });\n\n return response;\n }\n\n _hasValue(value) {\n return !((_(value).isObject() && _(value).isEmpty()) || !value) || value === false;\n }\n};\n","import MediaInterface from '../media/MediaInterface';\n\nimport GeneratedCollectionDetails from '../../../../business-objects/GeneratedCollectionDetails';\n\n// ref: Thunder.Models.ResponseModels.CollectionDefinition\nexport default class CollectionDefinition extends Backbone.Model {\n\n get idAttribute() { return 'id'; }\n\n get collectionOptions() {\n let options = {\n includeFacets: false,\n perPage: this.pageSize || 6,\n shuffle: this.shuffle || this.isLuckyDay\n };\n if (this.get('sortByAvailability') || this.get('availabilityOption') === 'available-first') {\n options.availableFirst = true;\n }\n if (this.get('showOnlyAvailable') || this.get('availabilityOption') === 'available-only') {\n options.showOnlyAvailable = true;\n }\n if (this.get('showOnlyPrerelease')) {\n options.showOnlyPrerelease = true;\n }\n if (this.useListOrder){\n options.sortBy = 'listorder';\n }\n\n return options;\n }\n\n defaults() {\n return {\n id : '0',\n name : '',\n description : '',\n availabilityOption : '',\n showOnlyAvailable : false,\n showOnlyPrerelease : false,\n sortByAvailability : false,\n curatedCollectionDetails : null,\n generatedCollectionDetails : null,\n lastModified : null,\n order : 0,\n\n // Computed property\n totalItems : 0\n };\n }\n\n get isLuckyDay(){\n return this.get('availabilityOption') === 'available-luckyday';\n }\n\n get isGenerated() {\n return !_(this.get('generatedCollectionDetails')).isEmpty();\n }\n\n get isCurated() {\n return !_(this.get('curatedCollectionDetails')).isEmpty();\n }\n\n get useListOrder(){\n return this.isCurated && this.get('curatedCollectionDetails').isOrdered;\n }\n\n /**\n * @prop {TitleCollection} collection\n * @memberof CollectionDefinition\n */\n constructor() {\n super(...arguments);\n\n this._mediaInterface = new MediaInterface();\n\n this.titleCollection = this._mediaInterface.items;\n\n this.listenTo(this.titleCollection, 'all', () => {\n this.set('totalItems', this.titleCollection.length);\n });\n }\n\n fetchCollectionTitles({ patronSettings, room}) {\n // Parse the current room's maturityLevels if there is a room, and a maturityLevels filter has been set\n let roomHasMaturityLevelFilter = !_.isEmpty(room && room.filters && room.filters.maturityLevels);\n\n let patronMaturityLevelPreferences = this._parsePatronAudienceSettings(patronSettings);\n\n if (this.isGenerated) {\n let genColDetails = this.get('generatedCollectionDetails');\n if (this.attributes.sortBy) {\n genColDetails.sortBy = this.attributes.sortBy;\n }\n if (!!this.get('showOnlyLuckyDayAvailable')){\n genColDetails.showOnlyLuckyDayAvailable = true;\n }\n let details = new GeneratedCollectionDetails(genColDetails);\n let params = details.serializeForSearch();\n\n if (!!patronSettings.showOnlyAvailable) {\n params.showOnlyAvailable = true;\n }\n\n // If we are in a room with maturity filters applied, the filters will be apart of the collection definition and we can simply query for the collection\n // User preferences should NOT override a room's maturity filter\n if (roomHasMaturityLevelFilter) {\n return this._mediaInterface.fetchCollectionByParameters(params, this.collectionOptions);\n }\n // Otherwise determine if the User's maturity filter settings cover the collection's maturityLevel settings\n else {\n let generatedCollectionOptions = Object.assign({}, this.collectionOptions);\n\n if (!_(patronMaturityLevelPreferences).isEmpty() && _(params.maturityLevel).isEmpty()) {\n Object.assign(generatedCollectionOptions, { maturityLevel: patronMaturityLevelPreferences });\n }\n\n // Fake an empty response if all the auto generated collection's filters are not covered by the user's maturity level settings\n return this._patronFiltersPermitCollection(params.maturityLevel, patronMaturityLevelPreferences)\n ? this._mediaInterface.fetchCollectionByParameters(params, generatedCollectionOptions)\n : this._mediaInterface.fetchEmptyResponse();\n }\n }\n // else if \"isCurated\"\n else {\n let curatedCollectionOptions = Object.assign({}, this.collectionOptions);\n\n if (!!patronSettings.showOnlyAvailable) {\n curatedCollectionOptions.showOnlyAvailable = true;\n }\n\n if (window.featureManager.isEnabled('sort-curated-list-carousels') && this.attributes.sortBy) {\n curatedCollectionOptions.sortBy = this.attributes.sortBy;\n }\n\n // If we are NOT in a room, apply a user's maturity settings if present to the collection request\n // The expectation is that if none of the content satisfies the user's filter its acceptable that no results are returned\n if (_(room).isEmpty()) {\n Object.assign(curatedCollectionOptions, { maturityLevel: patronMaturityLevelPreferences });\n }\n\n return this._mediaInterface.fetchCollectionById(this.id, curatedCollectionOptions);\n }\n }\n\n // Convert the patron audience settings model into an array of filter terms that MediaInterface understands, ex:\n // \"audience-setting\": {\n // \"all\" : false,\n // \"juvenile\" : false,\n // \"youngadult\" : true,\n // \"generalcontent\" : true,\n // \"adultonly\" : true\n // }\n // to: [\"youngadult\", \"generalcontent\", \"adultonly\"]\n /** @returns {string[]} */\n _parsePatronAudienceSettings(patronSettings) {\n let patronAudienceSetting = patronSettings && patronSettings['audience-setting'] || {};\n\n if (_(patronAudienceSetting).isEmpty() || patronAudienceSetting.all) {\n return [];\n }\n\n let audienceFilters = [];\n _(patronAudienceSetting).each((isApplied, key) => {\n if (isApplied && key !== \"all\") {\n audienceFilters.push(key);\n }\n });\n\n return audienceFilters;\n }\n\n _patronFiltersPermitCollection(collectionMaturityFilters = [], userMaturityFilters = []) {\n if (userMaturityFilters.length === 0) {\n return true;\n }\n\n const collectionLower = collectionMaturityFilters.map((filter) => filter.toLowerCase());\n const userLower = userMaturityFilters.map((filter) => filter.toLowerCase());\n\n return _(collectionLower).difference(userLower).length === 0;\n }\n}\n","import QueryString from 'querystring';\n\nexport default class HashManager {\n\n static parse() {\n let hashObject = QueryString.parse(location.hash.substr(1));\n\n _.keys(hashObject).forEach((key) => {\n hashObject[key] = _.flatten([hashObject[key] || []]);\n });\n\n return hashObject;\n }\n\n static update(object) {\n let newHash = QueryString.stringify(object);\n if (newHash !== '&'){\n location.hash = newHash;\n }\n }\n\n static get(key) {\n let response = this.parse();\n\n if (_.isString(key)) {\n return response[key];\n }\n\n return response;\n }\n\n static set(key, value) {\n let hash = this.parse();\n\n hash[key] = _.flatten([value]);\n\n this.update(hash);\n }\n\n static push(key, value) {\n let hash = this.parse();\n\n hash[key] = hash[key] || [];\n hash[key].push(value);\n\n this.update(hash);\n }\n\n static remove(key) {\n let hash = this.parse();\n\n hash[key] && delete hash[key];\n\n this.update(hash);\n }\n}\n","import keys from '../../util/keycodes';\nimport ModalTemplate from './templates/modal.html';\n\nclass Modal extends Backbone.View {\n get defaults() {\n // When the flag is enabled, closeOnEsc must always be FALSE\n // to ensure that the ESC key behavior defined in _bindEvents() executes properly.\n // Do not modify this value when calling a new modal.\n var closeModalOnEsc = window.featureManager.isEnabled(\n 'close-dropdowns-on-esc'\n )\n ? false\n : true;\n\n return {\n autoShow: true,\n autoRender: true,\n closeOnEsc: closeModalOnEsc,\n closeOnBlur: true,\n\n id: '',\n classes: ['small'],\n buttonAlign: 'right',\n title: 'Title',\n hiddenTitle: false,\n content: 'Some Content',\n submitText: html('ok'),\n cancelText: html('cancel'),\n attachToDocument: true,\n defaultButtonBehaviour: true,\n showCloseButton: true,\n };\n }\n\n initialize(options) {\n _.extend(this, this.defaults, options);\n\n this.tpl = ModalTemplate;\n this.setElement(this.tpl(this));\n\n if (this.id.length) {\n this.$el.attr('id', this.id);\n }\n\n this.$content = this.$el.find('.modal-container');\n\n this.$content.empty().append(this.content);\n\n this.$el.addClass(this.classes.join(' '));\n\n this.$title = this.$el.find('.modal-title');\n\n if (this.hiddenTitle) {\n this.$title.css('display', 'none');\n this.$title.attr('aria-hidden', 'true');\n }\n\n if (this.autoRender) {\n this._render();\n }\n\n this._bindEvents();\n }\n\n _render() {\n if (this.attachToDocument) {\n // For Foundation to work as expected we need to have the element attached to the DOM before calling .foundation('reveal', 'open')\n $('body').append(this.el);\n }\n\n if (this.autoShow) {\n this.show();\n }\n\n return this;\n }\n\n isSelectEvent = (e) =>\n (e.type === 'click' || e.which === 13 || e.which === 32) &&\n (e.preventDefault() || true);\n\n // We dont actually want to use the Foundation modal events since they get weird fast...\n // lets use our own so consumers dont have to know its foundation\n _bindEvents() {\n this.$el.on('click keydown', '.js-close', (e) => {\n this.isSelectEvent(e) && this.trigger('cancel', this);\n });\n\n if (this.defaultButtonBehaviour) {\n this.on('close cancel', () => {\n this.close();\n });\n }\n\n this.$el.on('keypress', '*', (e) => {\n if (e.which === keys.TAB) {\n this._keepFocus(e);\n }\n });\n\n if (window.featureManager.isEnabled('close-dropdowns-on-esc')) {\n // Prevent ESC from closing modal when \n \n`;\n","export default ({ text, href, label }) => `\n${text}\n`;\n","export default ({ geoIdcClass }) => `\n
\n
\n\n
\n\n
\n
\n\n
\n\n
\n
\n\n
\n
`;\n","export default ({typeId}) => `\n${typeId ? `\n ${window.html(typeId)}\n` : '' }\n`;\n","export default ({ titleId, title, href, ariaLabel }) => `

\n \n ${ title }\n \n

`;\n","export default ({ga, contrastClass, ariaLabel, iconClass, text, iconAnimationClasses}) => `\n`;\n","import ContextMenu from '../ContextMenu';\nimport TitleAuthor from './TitleInfo/TitleAuthor';\nimport TitleEdition from './TitleInfo/TitleEdition';\nimport TitleName from './TitleInfo/TitleName';\nimport TitleFormatBadge from './TitleInfo/TitleFormatBadge';\n\nexport default class TitleInfo extends Backbone.View {\n get className() {\n return 'title-info';\n }\n\n constructor() {\n super(...arguments);\n this._views = [];\n\n this.render();\n }\n\n _reset() {\n this._views.forEach((view) => view.remove());\n this._views = [];\n }\n\n remove() {\n this._reset();\n super.remove();\n }\n\n render() {\n this._reset();\n\n this._views.push(\n (this.titleName = new TitleName({ model: this.model }))\n );\n\n if (!window.featureManager.isEnabled('geo-idc')) {\n this._views.push(\n (this.contextMenu = new ContextMenu({ model: this.model }))\n );\n this.contextMenu.$el.addClass('text-right');\n }\n if (this.model.isMagazine) {\n this._views.push(\n (this.titleEdition = new TitleEdition({ model: this.model }))\n );\n } else if (!window.featureManager.isEnabled('geo-idc')) {\n this._views.push(\n (this.titleAuthor = new TitleAuthor({ model: this.model }))\n );\n }\n\n this._views.push(\n (this.titleFormatBadge = new TitleFormatBadge({\n typeId: this.model.get('type').id,\n }))\n );\n\n this.$el.empty();\n this.$el.append(...this._views.map((view) => view.$el));\n }\n}\n","import HoldInformationModal from '../../../holdInformation/views/HoldInformationModal';\nimport HoldInformationModalV2 from '../../../holdInformationV2/HoldInformationModalV2';\nimport HoldInformationV2 from '../../../holdInformationV2/HoldInformationV2';\n\nimport CopiesAvailableTemplate from '../../templates/CopiesAvailable.html';\n\nexport default class CopiesAvailable extends Backbone.View {\n constructor({withIcons}) {\n super(...arguments);\n this.title = this.model.toJSON();\n this.withIcons = withIcons;\n this.listenTo(this.model, 'change:titleState', this._maybeRender);\n this.render();\n }\n\n events() {\n return {\n 'click .js-holds-ratio-help-icon': '_renderModal'\n };\n }\n\n render() {\n this.$el.empty();\n if(this.model.allCopiesAreLuckyDay){\n return this;\n }\n\n if (this.title.titleState === 'unavailable') {\n this._renderNormal();\n return this;\n } else if (this.title.isPreReleaseTitle) {\n this._renderNormal();\n return this;\n }\n\n switch (this.title.availabilityType) {\n case 'normal':\n this._renderNormal();\n break;\n case 'always':\n this.$el.append(CopiesAvailableTemplate({\n withIcons: this.withIcons,\n availabilityText: window.text('cover.alwaysAvailable')\n }));\n break;\n case 'limited' && !this.title.isAvailable:\n this.$el.append(CopiesAvailableTemplate({\n withIcons: this.withIcons,\n availabilityText: window.text('cover.limitedAvailability')\n }));\n break;\n }\n\n return this;\n }\n\n _maybeRender() {\n if ((window.featureManager.isEnabled('betterPatronState') ? this.model.get('isOnHold') : this.model.get('titleState') === 'onHold')\n || (window.featureManager.isEnabled('betterPatronState') ? this.model.get('isBorrowed') : this.model.get('titleState') === 'borrowed')) {\n this.render();\n }\n\n if(this.model.allCopiesAreLuckyDay){\n this.render();\n }\n }\n\n _renderNormal() {\n let availabilityText, waitingText, helpButtonHTML;\n\n const notHeldClass = (window.featureManager.isEnabled('betterPatronState') ? this.model.get('isOnHold') : this.model.get('titleState') === 'onHold') ? '' : 'js-holds-ratio-not-held';\n\n if (this.title.type.id === 'periodicals' && this.title.availableCopies < 1 && !this.title.isAvailable) {\n availabilityText = window.html('cover.limitedAvailability');\n helpButtonHTML = `\n \n \n `;\n } else {\n \n let copyVariables = {\n availableCopies: window.featureManager.isEnabled('LuckyDay') ? this.title.availableCopies + this.title.luckyDayAvailableCopies : this.title.availableCopies,\n ownedCopies: window.featureManager.isEnabled('LuckyDay') ? this.title.ownedCopies + this.title.luckyDayOwnedCopies : this.title.ownedCopies\n };\n availabilityText = window.html('cover.copiesAvailable', copyVariables);\n\n if(this.model.allCopiesAreLuckyDay && this.title.titleState === 'unavailable'){\n availabilityText = window.html('cover.copiesAvailable', {availableCopies: 0, ownedCopies: this.title.luckyDayOwnedCopies});\n }\n \n if (!this.title.isAvailable && !this.model.hasAvailableLuckyDayCopies) {\n if(!this.model.allCopiesAreLuckyDay){\n if (window.featureManager.isEnabled('LHTNG-2863')){\n if(this.title.isOwned){\n waitingText = new HoldInformationV2({model: this.model, isVisitor: window.OverDrive.isVisitor}).waitTimeHtml;\n }\n }\n else if (!this.model.get('isFastlane')) {\n if (this.title.holdsRatio) {\n waitingText = window.html('cover.waitingPerCopy', {holdsRatio: this.title.holdsRatio});\n } else if (this.title.holdsCount === 0) {\n waitingText = window.html('cover.noHolds');\n }\n }\n }\n helpButtonHTML = window.featureManager.isEnabled('LHTNG-2863') && !this.title.isOwned\n ? ''\n : ` \n \n `;\n }\n }\n\n this.$el.append(CopiesAvailableTemplate({\n withIcons: this.withIcons,\n availabilityText,\n waitingText,\n helpButtonHTML\n }));\n }\n\n _renderModal() {\n if (window.featureManager.isEnabled('LHTNG-2863')){\n if ((window.featureManager.isEnabled('betterPatronState') ? this.model.get('isOnHold') : this.model.get('titleState') === 'onHold')) {\n window.ajax.getHold(this.model.get('id')).done((holdData) => { // should be confirming that this is on hold\n this.model.set({\n holdsRatio: holdData.holdsRatio,\n holdsCount: holdData.holdsCount,\n holdListPosition: holdData.holdListPosition\n });\n this.modal = new HoldInformationModalV2({model: this.model, el: this.el});\n });\n }\n else {\n this.modal = new HoldInformationModalV2({model: this.model, el: this.el, hideHoldsLink: true});\n }\n }\n else {\n const isFastlane = this.model.get('isFastlane');\n const titleState = this.model.get('titleState');\n if (!!isFastlane) {\n this.modal = new HoldInformationModal({model: this.model, type: 'basic', el: this.el});\n }\n else if ((window.featureManager.isEnabled('betterPatronState') ? this.model.get('isOnHold') : this.model.get('titleState') === 'onHold')) {\n window.ajax.getHold(this.model.get('id')).done((holdData) => { // should be confirming that this is on hold\n this.model.set({\n holdsRatio: holdData.holdsRatio,\n holdsCount: holdData.holdsCount,\n holdListPosition: holdData.holdListPosition\n });\n this.modal = new HoldInformationModal({model: this.model, type: 'successPosition', el: this.el});\n });\n }\n else {\n this.modal = new HoldInformationModal({model: this.model, type: 'ratio', el: this.el});\n }\n }\n }\n}\n","export default class LuckyDayHolds extends Backbone.View {\n constructor() {\n super(...arguments);\n this.listenTo(this.model, 'change:titleState', this._maybeRender);\n this.render();\n }\n\n render() {\n this.$el.empty();\n let template = `

${window.text('luckyDay.cantPlaceHold')}

`;\n this.$el.append(template);\n }\n\n _maybeRender() {\n if (this.model.get('titleState') === 'unavailable') {\n this.render();\n }else{\n this.$el.empty();\n }\n }\n}\n","import StarView from './StarView';\nconst { featureManager } = window;\n\nexport default class StarRating extends Backbone.View {\n events() {\n return {\n 'mouseleave': 'stopHoverRating'\n };\n }\n\n remove() {\n this._views.forEach((view) => view.remove());\n super.remove();\n }\n\n get isEnabled() {\n return !this.model.get('isPreReleaseTitle');\n }\n\n constructor() {\n super(...arguments);\n this._views = [];\n this.hoverRating = 0;\n this.$el.addClass('star-ratings-container StarRatings');\n\n this.rid = Math.random().toString(36).substring(7);\n\n // Update star rating when patron status is received\n this.listenTo(this.model, 'change:userStarRating', (model) => {\n this.update();\n });\n }\n\n render() {\n if(!this.isEnabled) {\n return this;\n }\n\n let globalRating = this.model.get('starRating') || 0;\n this.$el.attr('data-global-rating', this.model.get('starRating'));\n this.$el.attr('data-media-id', this.model.id);\n\n this._views.forEach((view) => view.remove());\n this._views.length = 0;\n\n let ctx = this;\n _.each([1, 2, 3, 4, 5, 0], (index) => {\n let viewData = {\n index: index,\n globalRating: globalRating,\n rid: this.rid\n };\n let starView = new StarView(viewData);\n \n if (!featureManager.isEnabled('sampleOnlyMode')){\n starView.on('rate', (starValue) => {\n ctx.handleRating(starValue);\n });\n starView.on('hover', (starValue) => {\n ctx.onHoverRating(starValue);\n });\n }\n \n this._views.push(starView);\n });\n\n this.$el.empty();\n this._views.forEach((view) => {\n view.render();\n this.$el.append(view.$el);\n });\n this.update();\n\n return this;\n }\n\n isHalfStar (globalRating) {\n return globalRating % 1 >= 0.25 && globalRating % 1 < 0.75; \n }\n\n update() {\n if (!this.isEnabled) {\n return this;\n }\n\n let isUserRating = (this.model.get('userStarRating') > 0 || this.hoverRating) > 0;\n this.$el.toggleClass('user-rating', isUserRating);\n let globalRating = this.model.get('starRating') || 0;\n\n _.each(this._views, (starView) => {\n\n if (isUserRating){\n starView.setFilled(starView.index <= (this.hoverRating || this.model.get('userStarRating')));\n } else if (starView.index < globalRating) {\n starView.setFilled(true);\n } else if (starView.index - 1 > globalRating) {\n starView.setFilled(false);\n } else {\n starView.setFilled(starView.index - 0.75 < globalRating, this.isHalfStar(globalRating));\n }\n starView.$el.children('.starRadio').prop('checked', starView.index === this.model.get('userStarRating'));\n });\n\n return this;\n }\n\n handleRating(starValue) {\n let currentRating = this.model.get('userStarRating');\n if (starValue === currentRating) {\n this.model.set('userStarRating', 0);\n this.stopHoverRating();\n }\n else {\n this.model.set('userStarRating', starValue);\n }\n this.model.trigger('title:action', { action: 'rating', model: this.model });\n }\n\n onHoverRating(starValue) {\n this.hoverRating = starValue;\n this.update();\n }\n\n stopHoverRating() {\n this.hoverRating = 0;\n this.update();\n }\n}\n","import StarRatingsTemplate from '../../templates/StarViewTemplate.html';\n\nexport default class StarView extends Backbone.View {\n template = StarRatingsTemplate;\n\n constructor({index, isFilled = false, globalRating, rid}) {\n super(...arguments);\n\n this.index = index;\n this.isFilled = isFilled;\n this.isHalfFilled = false;\n this.label = window.html('starRating.userRatedLabel', {currentRating: this.index});\n this.globalRating = globalRating;\n this.rid = rid;\n this.$el.addClass('star-container');\n }\n\n events() {\n return {\n 'change': 'onSelected',\n 'mouseover .icon-star': 'onHover',\n 'click .icon-star': 'onSelected',\n 'focusin .noRate' : 'pseudoFocus',\n 'focusout .noRate' : 'pseudoFocus'\n };\n }\n\n setFilled(isFilled, halfFilled = false) {\n if (halfFilled){\n this.$el.find('.icon-star').removeClass('filled');\n this.isFilled = false;\n\n this.isHalfFilled = isFilled;\n this.$el.find('.icon-star').toggleClass('halfFilled', isFilled);\n } else {\n this.$el.find('.icon-star').removeClass('halfFilled');\n this.isHalfFilled = false;\n \n this.isFilled = isFilled;\n this.$el.find('.icon-star').toggleClass('filled', isFilled);\n }\n }\n\n onSelected() {\n this.trigger('rate', this.index);\n return false;\n }\n\n onHover() {\n this.trigger('hover', this.index);\n }\n\n //Used for the 0th 'no rating' star. When focused, make the container appear to have focus\n pseudoFocus() {\n this.$el.parent().toggleClass('pseudoFocus');\n }\n\n render() {\n if (this.index > 0) {\n this.$el.empty().append(this.template(this));\n }\n else {\n let noRateTemplate =\n ``;\n this.$el.empty().append(noRateTemplate);\n }\n }\n}\n","const Backbone = window.Backbone;\nconst featureManager = window.featureManager;\n\nimport TitleAuthorTemplate from '../../templates/TitleAuthor.html';\n\nconst TitleAuthor = Backbone.View.extend({\n template: TitleAuthorTemplate,\n\n className: 'title-author',\n\n tagName: 'p',\n\n initialize() {\n if (this.model.get('type').id !== 'periodicals') {\n this.render();\n }\n },\n\n render() {\n let title = this.model.toJSON();\n\n if (\n title.firstCreatorName != null &&\n !_.isEmpty(title.firstCreatorName)\n ) {\n let creatorName = featureManager.isEnabled('fixHtmlTagsInCopy')\n ? title.firstCreatorName\n : _.escape(title.firstCreatorName);\n\n const viewData = {\n href: window.url(window.routes.searchByType, {\n type: 'creatorId',\n query: title.firstCreatorId,\n sortBy: 'newlyadded',\n }),\n label: window.text('cover.searchByAuthor', {\n author: creatorName,\n }),\n text: creatorName,\n };\n\n this.$el.html(\n window.text('byLine', { creator: this.template(viewData) })\n );\n } else {\n if (!featureManager.isEnabled('no-author-fix')) {\n this.$el.html(window.html('cover.noAuthorAvailable'));\n }\n }\n },\n});\n\nexport default TitleAuthor;\n","\nexport default class TitleEdition extends Backbone.View {\n constructor() {\n super(...arguments);\n this.render();\n }\n\n render() {\n let node = $(`
${this.model.get('edition')}
`);\n this.setElement(node);\n }\n}\n","import TitleFormatBadgeTemplate from '../../templates/TitleFormatBadge.html';\n\nconst TitleFormatBadge = Backbone.View.extend({\n initialize({typeId}) {\n this.typeId = typeId;\n this.render();\n },\n\n render() {\n this.setElement($(TitleFormatBadgeTemplate({typeId: this.typeId})));\n }\n});\n\nexport default TitleFormatBadge;\n","import TitleNameTemplate from '../../templates/TitleName.html';\n\nexport default class TitleName extends Backbone.View {\n constructor() {\n super(...arguments);\n\n this.template = TitleNameTemplate;\n this.render();\n }\n\n _assembleLabel() {\n let labelParts = [];\n\n labelParts.push(this.model.get('title'));\n\n if (!!this.model.get('firstCreatorName')) {\n labelParts.push(window.html('byLine', {creator: this.model.isMagazine ? this.model.get('publisher').name : this.model.get('firstCreatorName')}));\n }\n\n labelParts.push(this.model.availabilityText());\n\n labelParts.push(this.model.get('type').name);\n\n return labelParts.join(' ');\n }\n\n render() {\n const viewData = {\n titleId : this.model.id,\n href : this.model.titleDetailsUrl,\n ariaLabel : _.escape(this._assembleLabel()),\n title : this.model.get('title')\n };\n \n this.setElement($(this.template(viewData)));\n }\n}\n\n","const Backbone = window.Backbone;\nconst url = window.url;\nconst routes = window.routes;\nconst windowText = window.text;\nconst featureManager = window.featureManager;\n\nconst isCanarySite = require('../../../../../../lib/utility/isCanarySite');\n\nconst TitleSeries = Backbone.View.extend({\n initialize({ hideSubtitle }) {\n this.useEnhancedSeries =\n featureManager.isEnabled('enhancedSeries') &&\n typeof this.model.get('detailedSeries') !== 'undefined';\n this.hideSubtitle = hideSubtitle;\n\n this.listenTo(this.model, 'update', this.render);\n this.render();\n },\n\n render() {\n let searchParams = this.useEnhancedSeries\n ? {\n type: 'seriesId',\n query: this.model.get('detailedSeries').seriesId,\n sortBy: 'readingOrder',\n }\n : {\n type: 'series',\n query: this.model.get('series'),\n sortBy: 'newlyadded',\n };\n\n let subtitleContainsSeries =\n this.model.get('subtitle') &&\n this.model.get('subtitle').indexOf(this.model.get('series')) > -1;\n\n let seriesText = '';\n let rankText = '';\n\n if (this.useEnhancedSeries) {\n let detailedSeries = this.model.get('detailedSeries');\n\n const readingOrder = detailedSeries.readingOrder;\n if (readingOrder) {\n seriesText = isNaN(readingOrder)\n ? window.text('enhancedSeriesLinkText', { readingOrder })\n : window.text('enhancedSeriesLinkNumber', { readingOrder });\n }\n\n const rank = detailedSeries.rank;\n if (rank) {\n rankText = window.text('rankText', { rank });\n }\n } else {\n seriesText = subtitleContainsSeries\n ? this.model.get('subtitle')\n : this.model.get('series') || '';\n rankText = subtitleContainsSeries\n ? this.model.get('subtitle')\n : this.model.get('rank') || '';\n }\n\n if (this.model.get('type').id === 'magazine') {\n searchParams.mediaType = 'magazine';\n }\n\n let viewModel = {\n id: this.model.get('id'),\n title: this.model.get('title'),\n series: seriesText,\n rank: rankText,\n subtitle: this.model.get('subtitle') || '',\n searchUrl: url(routes.searchByType, searchParams),\n language: _.first(this.model.get('languages') || ['']),\n noCreators: _.isEmpty(this.model.get('creators')),\n };\n\n let $temp = $(document.createDocumentFragment());\n\n if (\n !this.hideSubtitle &&\n !subtitleContainsSeries &&\n !_.isEmpty(viewModel.subtitle)\n ) {\n let $subtitle = this._buildSubtitle(\n viewModel.subtitle,\n viewModel.language\n );\n $temp.append($subtitle);\n }\n\n if (!_.isEmpty(viewModel.series)) {\n if (\n this.model.isMagazine &&\n featureManager.isEnabled('magazine-rollup')\n ) {\n let $series = this._buildSeriesText(\n viewModel.noCreators,\n viewModel.series\n );\n $temp.append($series);\n } else {\n let $series = this._buildSeriesLink(\n viewModel.searchUrl,\n viewModel.noCreators,\n viewModel.series\n );\n $temp.append($series);\n }\n }\n\n if (\n !_.isEmpty(viewModel.rank) &&\n isCanarySite(window.OverDrive.tenant)\n ) {\n const $rank = this._buildRankText(\n viewModel.noCreators,\n viewModel.rank\n );\n $temp.append($rank);\n }\n\n this.$el.html($temp);\n },\n\n _buildRankText(noCreators, text) {\n return $('

', {\n class: `series ${(noCreators ? 'no-author' : '', text)}`,\n text,\n });\n },\n\n _buildSeriesText(noCreators, text) {\n let $elm = $('

', {\n class: `series ${(noCreators ? 'no-author' : '', text)}`,\n });\n return $elm;\n },\n\n _buildSeriesLink(searchUrl, noCreators, text) {\n let $elm = $('

', {\n class: `series ${noCreators ? 'no-author' : ''}`,\n });\n\n let $link = $('', {\n 'aria-label': windowText('cover.searchBySeries', { series: text }),\n class: this.useEnhancedSeries\n ? 'series-link-enhanced secondary-color'\n : 'series-link secondary-underline',\n href: searchUrl,\n title: text,\n text,\n });\n\n $elm.append($link);\n\n return $elm;\n },\n\n _buildSubtitle(subtitle, language) {\n if (featureManager.isEnabled('fixHtmlTagsInCopy')) {\n return $(`

${subtitle}

`);\n } else {\n return $('

', {\n class: 'subtitle',\n text: subtitle,\n lang: language,\n });\n }\n },\n});\n\nmodule.exports = TitleSeries;\n","const { html } = window;\n\nexport default () => `\n

\n
\n \n
\n
\n

${html(\"notCompatibleTitle.warningText\")}

\n
\n
\n`;","import template from './not-compatible-format-view.html';\nexport default class NotCompatibleFormat extends Backbone.View {\n constructor({model, el}) {\n super(...arguments);\n this.model = model;\n this.$el = $(el);\n\n this.render();\n }\n\n render() {\n this.$el.css(\"display\", \"block\");\n this.$el.append(template());\n\n this.$el.find(\".close-btn\").on(\"click\", () => {\n this.$el.css(\"display\", \"none\");\n this.$el.empty();\n });\n }\n}\n","import PremiumReviewsView from './views/premium_reviews';\nimport PremiumReviewModel from './models/premium_review';\n\nconst createComponent = ({el}) => {\n const model = new PremiumReviewModel();\n const view = new PremiumReviewsView({el, model}); // eslint-disable-line no-unused-vars\n};\n\nexport default createComponent;\n","import BaseModel from '../../../models/base';\n\nconst PremiumReviewModel = BaseModel.extend({\n urlRoot: ''\n});\n\nexport default PremiumReviewModel;\n","export default ({ reviews }) => `\n
    \n ${reviews && reviews.map((review, index) => `\n
  • \n
    \n

    ${review.source.match('alt( )*=\\\"(.*)\\\" border')[2]}

    \n \n
    \n
    \n
    ${review.source}
    \n
    ${review.content}
    \n
    \n
  • \n `).join('')\n }\n
`;\n","import BaseView from '../../../views/base';\nimport ReviewsContainerTemplate from '../templates/reviews.html';\nimport keys from '../../../util/keycodes';\n\nconst PremiumReviewsView = BaseView.extend({\n template: ReviewsContainerTemplate,\n events: {\n 'click .TitleDetails-reviewButton': 'toggleReview',\n 'tap .TitleDetails-reviewButton': 'toggleReview',\n 'keypress .TitleDetails-reviewButton': 'toggleReview',\n },\n initialize({ el, model }) {\n this.el = el;\n this.model = model;\n this.mediaId = _.keys(window.OverDrive.mediaItems)[0];\n this.renderReviews();\n },\n render(reviews) {\n this.$('.js-reviews-container').html(\n this.template({ reviews: reviews.items })\n );\n return this;\n },\n renderReviews() {\n this.model.urlRoot = window.url(window.routes.reviews, {\n mediaId: this.mediaId,\n });\n this.model.fetch().then((response) => {\n if (response) {\n this.$('.js-reviews-container').removeClass('u-hideMe');\n this.$('.js-reviews-container').attr('data-loaded', true);\n this.render(response);\n } else {\n this.$('.js-review-loader').addClass('u-hideMe');\n this.$('.js-reviews-container').attr('data-loaded', true);\n }\n });\n },\n toggleReview(e) {\n // Prevent foundation scrolling away from the review\n e.preventDefault();\n e.stopPropagation();\n if (!this.isSelectEvent(e)) {\n return;\n }\n const target = $(e.currentTarget);\n const targetContent = target.next('.TitleDetails-reviewContent');\n const targetArrow = target.find('.TitleDetails-panelArrow');\n if (target.attr('aria-expanded') === 'false') {\n this.$el\n .find('.TitleDetails-reviewContent')\n .not(targetContent)\n .addClass('u-hideMe');\n this.$el\n .find('.TitleDetails-panelArrow')\n .not(targetArrow)\n .removeClass('icon-up-arrow')\n .addClass('icon-down-arrow');\n this.$el\n .find('.TitleDetails-reviewButton')\n .not(target)\n .attr('aria-expanded', 'false');\n target.attr('aria-expanded', 'true');\n targetArrow\n .removeClass('icon-down-arrow')\n .addClass('icon-up-arrow');\n targetContent.removeClass('u-hideMe');\n } else {\n target.attr('aria-expanded', 'false');\n targetArrow\n .removeClass('icon-up-arrow')\n .addClass('icon-down-arrow');\n targetContent.addClass('u-hideMe');\n }\n },\n isSelectEvent(e) {\n if (\n e.type === 'click' ||\n e.which === keys.ENTER ||\n e.which === keys.SPACE\n ) {\n e.preventDefault();\n return true;\n }\n return false;\n },\n});\n\nexport default PremiumReviewsView;\n","const { text, url } = window;\nimport Title from '../media/models/Title';\n\nexport default class RecentIssuesDrawer extends Backbone.View{\n\n constructor({el, titleModel}) {\n super(...arguments);\n this.pageNum = 1;\n this.items = [];\n this.titleModel = titleModel;\n this.setElement(el);\n\n $('.load-button').click((e) => {\n e.stopPropagation();\n this.loadNextPage();\n });\n }\n\n loadNextPage() {\n this.pageNum = this.pageNum + 1;\n\n this.getRecentIssues().then((res) => {\n if (res && typeof res.body !== 'undefined') {\n res.body.items.forEach((item) => {\n var model = new Title(item);\n this.$el.append(`\n
  • \n \n \"${item.title}\" ${item.edition}\n \n
  • \n `);\n });\n\n $('.load-button').text(text('magazineBackIssues.loadMore'));\n\n if(res.body.links.next == null) {\n $('.load-button').remove();\n }\n }\n }).catch((error) => {\n window.Logger.log('error', 'Failed to show previous issues', {message: error.statusText || error});\n $('.load-button').text(text('magazineBackIssues.tryAgain'));\n });\n }\n\n getRecentIssues() {\n return new Promise((resolve, reject) =>\n $.ajax({\n method: 'GET',\n url: window.url(window.routes.rest.media.recentIssues, {id: this.titleModel.attributes.parentMagazineTitleId}),\n data: {\n pageNumber: this.pageNum\n },\n timeout: 10000\n })\n .done((response) => resolve(response))\n .fail((xhr, status, err) => reject(err)));\n }\n}\n","import Title from '../components/media/models/Title';\nimport TitleCollection from '../components/media/models/TitleCollection';\n\n// This is a replacement for PatronMediaItemsModel (ecmascript\\models\\patron_media_items.js)\n// We should gradually transition to using this as time permits and we can take the time to validate funtionality\nexport default class PatronTitleStatus extends Backbone.Model {\n get url() {\n return window.url(window.routes.mediaInfo);\n }\n\n fetchTitleStatus(titleCollection, statusTypes = null) {\n let titleArray = titleCollection.models || titleCollection || [];\n\n if (titleArray.length === 0) {\n return Promise.resolve();\n }\n\n let titleIds = _.map(_(titleArray).pluck('id'), Number);\n\n this.request = this.fetch({\n data: JSON.stringify({ titleIds, statusTypes }),\n type: 'POST',\n contentType: 'application/json',\n });\n\n return this.request;\n }\n\n /** @param {Title} title */\n updateTitleState(title) {\n title.updatePatronState(this.attributes);\n }\n\n get titleIds() {\n return _.union(\n this.get('onReadingHistory'),\n _.keys(this.get('starRatings')),\n this.get('onCheckouts'),\n this.get('onHolds'),\n this.get('onWishlist')\n );\n }\n\n /** @param {TitleCollection} titleCollection */\n updateTitleCollectionState(titleCollection) {\n // we provide an empty array for any status attributes that were not fetched\n // in order to avoid breaking anything downstream\n this.stubAttributes();\n this.titleIds.forEach((titleId) => {\n const model = titleCollection.findWhere({ id: titleId });\n\n if (model) {\n this.updateTitleState(model);\n }\n });\n }\n\n stubAttributes() {\n if (!this.get('onReadingHistory')) {\n this.set('onReadingHistory', []);\n }\n if (!this.get('starRatings')) {\n this.set('starRatings', []);\n }\n if (!this.get('onCheckouts')) {\n this.set('onCheckouts', []);\n }\n if (!this.get('onHolds')) {\n this.set('onHolds', []);\n }\n if (!this.get('onWishlist')) {\n this.set('onWishlist', []);\n }\n }\n}\n","// import when we move more to modules\nexport default window.Backbone.Model;\n","import BaseModel from '../models/base';\n\nconst PatronMediaItemsModel = BaseModel.extend({\n url() {\n return window.url(window.routes.mediaInfo);\n },\n\n initialize({titles}) {\n this.mediaItems = titles || window.OverDrive.titleCollection || {};\n this.itemsOnPage = _.map(_.pluck(this.mediaItems, 'id'), Number);\n },\n\n initialFetch() {\n return this.mediaItems.length\n ? this.fetch({\n data: JSON.stringify({titleIds: this.itemsOnPage}),\n type: 'POST', contentType: 'application/json',\n headers: {'csrf-token': $('#csrf').val() || OverDrive._csrf}})\n : Promise.resolve({});\n }\n});\n\nexport default PatronMediaItemsModel;\n","import createComponent from '../components/premium_reviews/main.js';\nimport createDetailsCoverImageComponent from '../components/details_cover_image/main.js';\nimport DetailsRelatedTitlesView from '../components/details_related_titles/DetailsRelatedTitlesView';\nimport HashManager from '../components/common/HashManager';\nimport PatronMediaItemsModel from '../models/patron_media_items';\nimport ProcessForwardedAction from '../util/title-actions/processForwardedAction';\nimport StarRating from '../components/media/views/TitleInfo/StarRating';\nimport TitleSeries from '../components/media/views/TitleInfo/TitleSeries';\nimport TitleActionButton from '../components/media/TitleActionButton';\nimport TitleActions from '../title-actions/TitleActions';\nimport Title from '../components/media/models/Title';\nimport WishListButton from '../components/media/WishListButton';\nimport ReadingHistoryButton from '../components/media/ReadingHistoryButton';\nimport CopiesAvailable from '../components/media/views/TitleInfo/CopiesAvailable';\nimport LuckyDayHolds from '../components/media/views/TitleInfo/LuckyDayHolds';\nimport CollectionDefinition from '../components/collection_campaign_page/CollectionDefinition';\nimport RecentIssuesDrawer from '../components/recent_issues_drawer/RecentIssuesDrawer';\nimport NotCompatibleFormat from '../components/not_compatible_format/not-compatible-format-view.js';\n\nconst fetchCollectionById = (collectionId) =>\n new Promise((resolve, reject) => {\n $.ajax({\n url: window.url(window.routes.rest.collections.getById, {\n id: collectionId,\n }),\n dataType: 'json',\n timeout: 10000,\n })\n .done((response) => resolve(new CollectionDefinition(response)))\n .fail((jqHXR, textStatus, errorThrown) => resolve()); // LHTNG-3018 Yes, we are hiding errors here, we dont care if a trash ID is passed\n });\n\nlet isUnsupportedTolinoFormat = (format) => {\n if (format === undefined) {\n return true;\n }\n let formatParts = format.split('-');\n return format.indexOf('ebook') > -1 && formatParts.length >= 2\n ? ['kobo', 'media', 'kindle'].includes(formatParts[1])\n : true;\n};\n\n$(() => {\n let collectionFetch = Promise.resolve();\n\n const { collectionId } = window.OverDrive;\n if (collectionId) {\n collectionFetch = fetchCollectionById(collectionId);\n }\n\n collectionFetch.then((collectionDefinition) => {\n let titles = window.OverDrive.titleCollection;\n\n const mediaModel = new Title(window.OverDrive.titleCollection);\n window.title = mediaModel;\n\n let streamingVideoFormats = _.find(\n mediaModel.get('formats'),\n (format) => format.id === 'video-streaming'\n );\n\n let isDRM = false;\n\n _.each(mediaModel.get('formats'), (format) => {\n if (\n _.find(\n format.rights,\n (right) => right.drmType.toLowerCase() === 'heavy'\n )\n ) {\n isDRM = true;\n }\n });\n\n if (streamingVideoFormats !== undefined && isDRM) {\n let isChromebook = !!window.navigator.userAgent.match(/CrOS/);\n let inApp = window.OverDrive.inApp;\n if (isChromebook && inApp) {\n if (toaster) {\n toaster.push(\n window.text('accountLoans.unsupportedFormatVideoHtml'),\n 'message'\n );\n }\n }\n }\n\n let stateUpdatePromise = Promise.resolve();\n\n // TODO: Determine if the patron email can be stored in a cookie or something\n if (\n window.OverDrive.isAuthenticated &&\n window.OverDrive.hasLinkedCards\n ) {\n const patronMedia = new PatronMediaItemsModel({\n titles: [mediaModel.attributes],\n });\n\n stateUpdatePromise = patronMedia\n .initialFetch()\n .then((patronData) => {\n _.each(_.flatten(_.values(patronData)), () => {\n if (mediaModel) {\n mediaModel.updatePatronState(patronData);\n }\n });\n });\n }\n\n stateUpdatePromise.then(() => {\n if (\n window.OverDrive.isAuthenticated &&\n window.OverDrive.hasLinkedCards &&\n HashManager.get('action')\n ) {\n let forwardedAction = new ProcessForwardedAction(\n titles,\n window.globalEvents,\n mediaModel\n );\n forwardedAction.executeAction();\n window.forwardAction = forwardedAction;\n }\n });\n\n let titleActions = new TitleActions({\n bus: window.globalEvents,\n context: {\n collectionDefinition,\n },\n });\n\n const titleActionButton = new TitleActionButton({\n model: mediaModel,\n el: '.TitleAction',\n type: 'button',\n });\n\n let hideExtraInfo =\n window.featureManager.isEnabled('magazine-rollup') &&\n mediaModel.isMagazine;\n\n if (\n !window.featureManager.isEnabled('sampleOnlyMode') &&\n !hideExtraInfo &&\n !window.featureManager.isEnabled('disableWishlist')\n ) {\n const wishListButton = new WishListButton({\n model: mediaModel,\n el: '.wishlist-container',\n type: 'with-text',\n contrast: 'alternate',\n }).render();\n }\n\n if (\n window.featureManager.isEnabled('sampleOnlyMode') &&\n window.featureManager.isEnabled('details-page-libby-button') &&\n window.featureManager.isEnabled('promoteLibby')\n ) {\n let libbyLink =\n 'https://www.overdrive.com/apps/libby?utm_origin=lightning&utm_page_genre=sample_mode&utm_list=get_libby&utm_medium=lightning_banner&utm_source=lightning&utm_campaign=sample_mode&utm_content=getlibby';\n if (\n window.OverDrive.deviceType &&\n window.OverDrive.deviceType.toLowerCase() === 'ios'\n ) {\n libbyLink =\n 'https://itunes.apple.com/us/app/libby-by-overdrive-labs/id1076402606?pt=211483&ct=lightning&mt=8&utm_medium=lightning_banner&utm_source=lightning&utm_campaign=sample_mode&utm_content=getlibby';\n } else if (\n window.OverDrive.deviceType &&\n window.OverDrive.deviceType.toLowerCase() === 'android'\n ) {\n libbyLink =\n 'https://play.google.com/store/apps/details?id=com.overdrive.mobile.android.libby&referrer=utm_source%3Dlightning&utm_medium=lightning_banner&utm_source=lightning&utm_campaign=sample_mode&utm_content=getlibby';\n }\n\n $('.GetLibby-buttonContainer').append(`\n 1\n ? 'multiple-magazines'\n : ''\n } GetLibbyLink TitleActionButton button radius is-button secondary\"\n target=\"_blank\"\n rel=\"noreferrer\"> ${window.text('getLibby')} `);\n }\n\n if (!hideExtraInfo) {\n let starRating = new StarRating({\n model: mediaModel,\n type: 'editable',\n }).render();\n\n if (\n !mediaModel.get('isPreReleaseTitle') &&\n window.featureManager.isEnabled('show-star-ratings')\n ) {\n $('.js-starRatingsContainer').append(starRating.$el);\n } else {\n $('.prerelease-date')\n .first()\n .html(\n window.text('accountHolds.prereleaseExpected', {\n date: mediaModel.get('estimatedReleaseDate'),\n })\n );\n }\n }\n\n const readingHistoryButton = new ReadingHistoryButton({\n model: mediaModel,\n el: '.ReadingHistoryButton-container',\n }).render();\n\n let series = new TitleSeries({\n model: mediaModel,\n el: '.TitleSeries',\n }).render();\n\n if (\n !window.featureManager.isEnabled('geo-idc') ||\n window.featureManager.isEnabled('content-holds')\n ) {\n let elForCopiesAvailable = '.js-copiesAvailableContainer';\n\n if (\n mediaModel.allCopiesAreLuckyDay &&\n mediaModel.get('titleState') === 'unavailable'\n ) {\n let copiesAvailableLuckyDay = new CopiesAvailable({\n model: mediaModel,\n el: '.js-copiesAvailableContainer-LuckyDay',\n withIcons: true,\n });\n\n let luckyDayHoldsBlob = new LuckyDayHolds({\n model: mediaModel,\n el: '.LuckyDayCantPlaceHoldContainer',\n });\n\n elForCopiesAvailable =\n '.js-copiesAvailableContainer.show-for-600-up';\n }\n\n let copiesAvailable = new CopiesAvailable({\n model: mediaModel,\n el: elForCopiesAvailable,\n withIcons: true,\n });\n }\n\n let formats = mediaModel.get('formats');\n let tolinoAcceptedFormats = formats.filter(\n (item) => !isUnsupportedTolinoFormat(item.id)\n );\n let hasAcceptedTolinoFormat = tolinoAcceptedFormats.length > 0;\n\n if (window.OverDrive.isTolinoDevice && !hasAcceptedTolinoFormat) {\n let notCompatibleFormat = new NotCompatibleFormat({\n model: mediaModel,\n el: '.toast-placeholder',\n });\n }\n\n if (mediaModel.get('awards')) {\n let sortedAwards = mediaModel\n .get('awards')\n .sort((a, b) =>\n a.description > b.description\n ? 1\n : a.description < b.description\n ? -1\n : 0\n );\n let awardLinks = '';\n sortedAwards.forEach((award) => {\n awardLinks += `
  • ${award.description}
  • `;\n });\n $('.TitleDetails-awardsList').append(awardLinks);\n }\n // Listen for media button action\n mediaModel.on('title:action', (data) => {\n titleActions.perform(data.action, data.model);\n });\n\n // TODO: Rename this for premium reviews\n const el = $('.container');\n createComponent({ el });\n\n const coverImage = $('.js-details-cover-image')[0];\n createDetailsCoverImageComponent({ el: coverImage });\n\n const relatedTitlesContainer = $('.js-relatedTitlesContainer');\n new DetailsRelatedTitlesView({\n el: relatedTitlesContainer,\n bus: window.globalEvents,\n titleModel: mediaModel,\n });\n\n window.OverDrive.gaEventLogger.pushEvent(\n { titleModel: mediaModel },\n 'detailsPage'\n );\n\n if (\n window.featureManager.isEnabled('magazine-rollup') &&\n mediaModel.isMagazine\n ) {\n new RecentIssuesDrawer({\n el: $('.issue-list'),\n titleModel: mediaModel,\n });\n }\n });\n});\n","const { html } = window;\n\nexport default () => `\n
    \n

    \n ${html('loading')}\n
    \n`;\n","export default class TitleActions {\n constructor({ bus, context }) {\n this.bus = bus;\n\n this.context = {\n room: undefined,\n collectionDefinition: undefined,\n };\n\n _.extend(this.context, context);\n }\n\n perform(action, titleModel) {\n if (typeof this[`_${action}`] === 'function') {\n this[`_${action}`](titleModel);\n }\n }\n\n _borrow(titleModel) {\n this.bus.trigger('title:borrow', titleModel, this.context);\n }\n\n _hold(titleModel) {\n this.bus.trigger('title:hold', titleModel, this.context);\n }\n\n _wish(titleModel) {\n this.bus.trigger('title:wishlist', titleModel, this.context);\n }\n\n _nook(titleModel) {\n this.bus.trigger('title:nook', titleModel, this.context);\n }\n\n _rating(titleModel) {\n this.bus.trigger('title:rating', titleModel, this.context);\n }\n\n _history(titleModel) {\n this.bus.trigger('title:history', titleModel, this.context);\n }\n\n _download(titleModel) {\n this.bus.trigger('title:download', titleModel, this.context);\n }\n\n _preview(titleModel) {\n this.bus.trigger('title:preview', titleModel, this.context);\n }\n\n _renew(titleModel) {\n this.bus.trigger('title:renew', titleModel, this.context);\n }\n\n _requestAgain(titleModel) {\n this.bus.trigger('title:requestAgain', titleModel, this.context);\n }\n\n setContextRoom(room) {\n if (_(room).isEmpty()) {\n delete this.context.room;\n } else {\n this.context.room = room;\n }\n\n return this;\n }\n\n setContextCollection(titleCollection) {\n if (_(titleCollection).isEmpty()) {\n delete this.context.titleCollection;\n } else {\n this.context.titleCollection = titleCollection;\n }\n\n return this;\n }\n}\n","class TitleState {\n static getState(media, patronItems) {\n const featureManager = window.featureManager;\n\n if (featureManager.isEnabled('sampleOnlyMode')) {\n return 'preview';\n }\n\n let mediaId = media.id;\n\n let isOnHold = patronItems && patronItems.onHolds.indexOf(mediaId) > -1;\n let isOnCheckouts =\n patronItems && patronItems.onCheckouts.indexOf(mediaId) > -1;\n let isAvailable =\n media.isAvailable ||\n (featureManager.isEnabled('LuckyDay') &&\n media.luckyDayAvailableCopies > 0);\n\n if (\n /account\\/loans/.test(window.location.href) &&\n media.isRenewable &&\n featureManager.isEnabled('content-holds')\n ) {\n if (isOnHold) {\n return 'requested';\n } else if (\n media.holdsCount <= 0 &&\n media.ownedCopies >= 0 &&\n !(\n featureManager.isEnabled('LuckyDay') &&\n media.isLuckyDayCheckout\n )\n ) {\n return 'renew';\n }\n return 'requestAgain';\n }\n\n if (isOnCheckouts) {\n return 'borrowed';\n }\n\n if (isOnHold && !isAvailable) {\n return 'onHold';\n }\n\n if (isAvailable) {\n if (media.type.id === 'periodicals') {\n return 'nook';\n }\n\n return 'borrow';\n }\n\n if (media.isHoldable && featureManager.isEnabled('content-holds')) {\n return 'hold';\n }\n\n return 'unavailable';\n }\n\n static isOnWishlist(media, patronItems) {\n return patronItems && patronItems.onWishlist.indexOf(media.id) > -1;\n }\n\n static isOnReadingHistory(media, patronItems) {\n return (\n patronItems && patronItems.onReadingHistory.indexOf(media.id) > -1\n );\n }\n\n static starRating(media, patronItems) {\n // Returns 0 if not rated\n return (\n (patronItems &&\n patronItems.starRatings &&\n patronItems.starRatings[media.id]) ||\n 0\n );\n }\n}\n\nexport default TitleState;\n","const keys = Object.freeze({\n TAB: 9,\n ENTER: 13,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n SPACE: 32,\n ESC: 27\n});\nexport default keys;\n","import HashManager from '../../components/common/HashManager';\nimport Title from '../../components/media/models/Title';\nimport TitleActions from '../../title-actions/TitleActions';\n\nexport default class ProcessForwardedAction {\n constructor(collection, bus, model) {\n let hash = HashManager.get('action')[0];\n this.actionArr = hash ? hash.split('~') : [];\n this.action = this.actionArr[0] || null;\n this.mediaId = this.actionArr[1] || null;\n this.rating = this.actionArr[2] || 0;\n this.model = model || null;\n this.collection = collection.models;\n this.bus = bus;\n }\n\n // Execute user forwarded action\n executeAction() {\n if (!this.action || !this.mediaId) {\n return;\n }\n\n if (\n !this.model ||\n (this.model && this.model.get('id') !== this.mediaId)\n ) {\n this.model = _.find(\n this.collection,\n (model) => model.id === this.mediaId\n );\n }\n\n let titleActions = new TitleActions({ bus: this.bus });\n\n if (this.model) {\n // Title model is on page\n HashManager.remove('action');\n this.model.set('userStarRating', this.rating);\n titleActions.perform(this.action, this.model);\n } else {\n // Title model is not on page, fetch async\n let title = new Title();\n let promise = new Promise((resolve, reject) => {\n title.getTitleAsync(this.mediaId, resolve, reject);\n });\n\n promise.then(() => {\n this.model && this.model.set('userStarRating', this.rating);\n titleActions.perform(this.action, title);\n HashManager.remove('action');\n });\n }\n }\n}\n","// import when we move more to modules\nconst Backbone = window.Backbone;\nimport LoaderTemplate from '../templates/loader.html';\n\nconst BaseView = Backbone.View.extend({\n close() {\n this.trigger('close');\n this.remove();\n this.unbind();\n this.stopListening();\n // Views should define this in their extend declaration\n this.onClose && this.onClose();\n return this;\n },\n\n getHtml({ templateData } = {}) {\n const globals = {\n html: window.html,\n text: window.text,\n };\n const data = templateData || this.getTemplateData();\n return this.template(_.extend({}, data, globals));\n },\n\n buildElement(options) {\n return this.$el.html(this.getHtml(options));\n },\n\n doRender(options) {\n this.buildElement(options);\n if (this.target && !this.attached) {\n this.beforeAttach && this.beforeAttach();\n this.attach();\n this.attached = true;\n }\n },\n\n attach() {\n if (!(this.$target instanceof Backbone.$)) {\n this.$target = Backbone.$(this.target);\n }\n this.$target.append(this.$el);\n },\n\n render(options) {\n this.clearLoader();\n\n if (this.beforeRender) {\n this.beforeRender();\n }\n this.doRender(options);\n if (this.afterRender) {\n this.afterRender();\n }\n return this;\n },\n\n getTemplateData() {\n return (this.model && this.model.toJSON()) || {};\n },\n\n renderLoader() {\n const elem = $(this.target).length ? $(this.target) : this.$el;\n elem.empty().append(LoaderTemplate({ html: window.html }));\n },\n\n clearLoader() {\n // Clear loader if it exists\n const $loader = $('.js-es6loader');\n if ($loader.length) {\n $loader.remove();\n }\n },\n});\n\nexport default BaseView;\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy55YXJuL2NhY2hlL2Jyb3dzZXItcGFjay1ucG0tNi4xLjAtNjc1NTdlMDExYi05ZTU5OTNkM2VlLnppcC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvaGUtbnBtLTEuMi4wLTNiNzNhMmZmMDctM2Q0ZDZiYWJjYy56aXAvbm9kZV9tb2R1bGVzL2hlL2hlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvcXVlcnlzdHJpbmctZXMzLW5wbS0wLjIuMS1mNDYzMmYyNzYwLTY5MWU4ZDZiOGIuemlwL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZGVjb2RlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvcXVlcnlzdHJpbmctZXMzLW5wbS0wLjIuMS1mNDYzMmYyNzYwLTY5MWU4ZDZiOGIuemlwL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZW5jb2RlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvcXVlcnlzdHJpbmctZXMzLW5wbS0wLjIuMS1mNDYzMmYyNzYwLTY5MWU4ZDZiOGIuemlwL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCIuLi8uLi8ueWFybi9jYWNoZS91bmRlcnNjb3JlLW5wbS0xLjEzLjYtM2ViZTlkOTJmYi1kNWNlZGQxNGE5LnppcC9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS91bmRlcnNjb3JlLXVtZC5qcyIsIi4uL2NvbW1vbi9saWIvY29uZmlndXJhdGlvbi93ZWJzaXRlSWRzLmpzb24iLCJidXNpbmVzcy1vYmplY3RzL0dlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzLmpzIiwibGliL2dldE9wdGltaXplZENvdmVyLXRzLmpzIiwibGliL3V0aWxpdHkvaXNDYW5hcnlTaXRlLmpzIiwibW9kZWxzL2Rhby9NZWRpYVBhcmFtZXRlcnMuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbGxlY3Rpb25fY2FtcGFpZ25fcGFnZS9Db2xsZWN0aW9uRGVmaW5pdGlvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvY29tbW9uL0hhc2hNYW5hZ2VyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9jb21tb24vbW9kYWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbW1vbi90ZW1wbGF0ZXMvbW9kYWwuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvZGV0YWlsc19jb3Zlcl9pbWFnZS9tYWluLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9kZXRhaWxzX2NvdmVyX2ltYWdlL3ZpZXdzL2RldGFpbHNfY292ZXJfaW1hZ2UuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2RldGFpbHNfcmVsYXRlZF90aXRsZXMvRGV0YWlsc1JlbGF0ZWRUaXRsZXNUZW1wbGF0ZS5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9kZXRhaWxzX3JlbGF0ZWRfdGl0bGVzL0RldGFpbHNSZWxhdGVkVGl0bGVzVmlldy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvaG9sZEluZm9ybWF0aW9uL3RlbXBsYXRlcy9Ib2xkSW5mb3JtYXRpb24uaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvaG9sZEluZm9ybWF0aW9uL3ZpZXdzL0hvbGRJbmZvcm1hdGlvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvaG9sZEluZm9ybWF0aW9uL3ZpZXdzL0hvbGRJbmZvcm1hdGlvbk1vZGFsLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9ob2xkSW5mb3JtYXRpb25WMi9Ib2xkSW5mb3JtYXRpb25Nb2RhbFYyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9ob2xkSW5mb3JtYXRpb25WMi9Ib2xkSW5mb3JtYXRpb25WMi5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9ob2xkSW5mb3JtYXRpb25WMi9Ib2xkSW5mb3JtYXRpb25WMi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvQ29udGV4dE1lbnUuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL0NvdmVyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS9NZWRpYUludGVyZmFjZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvUmVhZGluZ0hpc3RvcnlCdXR0b24uanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL1RpdGxlQWN0aW9uQnV0dG9uLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS9UaXRsZUNhcmQuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL1RpdGxlQ29sbGVjdGlvblZpZXcuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL1RpdGxlSGVhZGVyQmFyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS9XaXNoTGlzdEJ1dHRvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvbW9kZWxzL1RpdGxlLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS9tb2RlbHMvVGl0bGVDb2xsZWN0aW9uLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS90ZW1wbGF0ZXMvQ29udGV4dE1lbnUuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL0NvcGllc0F2YWlsYWJsZS5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS90ZW1wbGF0ZXMvQ292ZXIuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL05vQ292ZXIuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL1JlYWRpbmdIaXN0b3J5QnV0dG9uLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9TdGFyVmlld1RlbXBsYXRlLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9UaXRsZUF1dGhvci5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS90ZW1wbGF0ZXMvVGl0bGVDYXJkLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9UaXRsZUZvcm1hdEJhZGdlLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9UaXRsZU5hbWUuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL1dpc2hMaXN0QnV0dG9uLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvL0NvcGllc0F2YWlsYWJsZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvL0x1Y2t5RGF5SG9sZHMuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9TdGFyUmF0aW5nLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm8vU3RhclZpZXcuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9UaXRsZUF1dGhvci5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvL1RpdGxlRWRpdGlvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvL1RpdGxlRm9ybWF0QmFkZ2UuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9UaXRsZU5hbWUuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9UaXRsZVNlcmllcy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbm90X2NvbXBhdGlibGVfZm9ybWF0L25vdC1jb21wYXRpYmxlLWZvcm1hdC12aWV3Lmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL25vdF9jb21wYXRpYmxlX2Zvcm1hdC9ub3QtY29tcGF0aWJsZS1mb3JtYXQtdmlldy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvcHJlbWl1bV9yZXZpZXdzL21haW4uanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL3ByZW1pdW1fcmV2aWV3cy9tb2RlbHMvcHJlbWl1bV9yZXZpZXcuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL3ByZW1pdW1fcmV2aWV3cy90ZW1wbGF0ZXMvcmV2aWV3cy5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9wcmVtaXVtX3Jldmlld3Mvdmlld3MvcHJlbWl1bV9yZXZpZXdzLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9yZWNlbnRfaXNzdWVzX2RyYXdlci9SZWNlbnRJc3N1ZXNEcmF3ZXIuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9tb2RlbHMvUGF0cm9uVGl0bGVTdGF0dXMuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9tb2RlbHMvYmFzZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L21vZGVscy9wYXRyb25fbWVkaWFfaXRlbXMuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9wYWdlcy9kZXRhaWxzX3BhZ2UuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC90ZW1wbGF0ZXMvbG9hZGVyLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC90aXRsZS1hY3Rpb25zL1RpdGxlQWN0aW9ucy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L3RpdGxlLWFjdGlvbnMvVGl0bGVTdGF0ZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L3V0aWwva2V5Y29kZXMuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC91dGlsL3RpdGxlLWFjdGlvbnMvcHJvY2Vzc0ZvcndhcmRlZEFjdGlvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L3ZpZXdzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN6VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDSCxLQTVEaUM7QUE4RGxDLGVBOURrQyx5QkE4RHBCO0FBQ1Y7QUFDQSxZQUFNLFVBQVUsRUFBRSxlQUFGLENBQWhCO0FBQ0EsWUFBSSxRQUFRLE1BQVosRUFBb0I7QUFDaEIsb0JBQVEsTUFBUjtBQUNIO0FBQ0o7QUFwRWlDLENBQXJCLENBQWpCOztxQkF1RWUsUSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qISBodHRwczovL210aHMuYmUvaGUgdjEuMi4wIGJ5IEBtYXRoaWFzIHwgTUlUIGxpY2Vuc2UgKi9cbjsoZnVuY3Rpb24ocm9vdCkge1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHM7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuXG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHRtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cyAmJiBtb2R1bGU7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAsIGZyb20gTm9kZS5qcyBvciBCcm93c2VyaWZpZWQgY29kZSxcblx0Ly8gYW5kIHVzZSBpdCBhcyBgcm9vdGAuXG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0Ly8gQWxsIGFzdHJhbCBzeW1ib2xzLlxuXHR2YXIgcmVnZXhBc3RyYWxTeW1ib2xzID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZztcblx0Ly8gQWxsIEFTQ0lJIHN5bWJvbHMgKG5vdCBqdXN0IHByaW50YWJsZSBBU0NJSSkgZXhjZXB0IHRob3NlIGxpc3RlZCBpbiB0aGVcblx0Ly8gZmlyc3QgY29sdW1uIG9mIHRoZSBvdmVycmlkZXMgdGFibGUuXG5cdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3RhYmxlLWNoYXJyZWYtb3ZlcnJpZGVzXG5cdHZhciByZWdleEFzY2lpV2hpdGVsaXN0ID0gL1tcXHgwMS1cXHg3Rl0vZztcblx0Ly8gQWxsIEJNUCBzeW1ib2xzIHRoYXQgYXJlIG5vdCBBU0NJSSBuZXdsaW5lcywgcHJpbnRhYmxlIEFTQ0lJIHN5bWJvbHMsIG9yXG5cdC8vIGNvZGUgcG9pbnRzIGxpc3RlZCBpbiB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSBvdmVycmlkZXMgdGFibGUgb25cblx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjdGFibGUtY2hhcnJlZi1vdmVycmlkZXMuXG5cdHZhciByZWdleEJtcFdoaXRlbGlzdCA9IC9bXFx4MDEtXFx0XFx4MEJcXGZcXHgwRS1cXHgxRlxceDdGXFx4ODFcXHg4RFxceDhGXFx4OTBcXHg5RFxceEEwLVxcdUZGRkZdL2c7XG5cblx0dmFyIHJlZ2V4RW5jb2RlTm9uQXNjaWkgPSAvPFxcdTIwRDJ8PVxcdTIwRTV8PlxcdTIwRDJ8XFx1MjA1RlxcdTIwMEF8XFx1MjE5RFxcdTAzMzh8XFx1MjIwMlxcdTAzMzh8XFx1MjIyMFxcdTIwRDJ8XFx1MjIyOVxcdUZFMDB8XFx1MjIyQVxcdUZFMDB8XFx1MjIzQ1xcdTIwRDJ8XFx1MjIzRFxcdTAzMzF8XFx1MjIzRVxcdTAzMzN8XFx1MjI0MlxcdTAzMzh8XFx1MjI0QlxcdTAzMzh8XFx1MjI0RFxcdTIwRDJ8XFx1MjI0RVxcdTAzMzh8XFx1MjI0RlxcdTAzMzh8XFx1MjI1MFxcdTAzMzh8XFx1MjI2MVxcdTIwRTV8XFx1MjI2NFxcdTIwRDJ8XFx1MjI2NVxcdTIwRDJ8XFx1MjI2NlxcdTAzMzh8XFx1MjI2N1xcdTAzMzh8XFx1MjI2OFxcdUZFMDB8XFx1MjI2OVxcdUZFMDB8XFx1MjI2QVxcdTAzMzh8XFx1MjI2QVxcdTIwRDJ8XFx1MjI2QlxcdTAzMzh8XFx1MjI2QlxcdTIwRDJ8XFx1MjI3RlxcdTAzMzh8XFx1MjI4MlxcdTIwRDJ8XFx1MjI4M1xcdTIwRDJ8XFx1MjI4QVxcdUZFMDB8XFx1MjI4QlxcdUZFMDB8XFx1MjI4RlxcdTAzMzh8XFx1MjI5MFxcdTAzMzh8XFx1MjI5M1xcdUZFMDB8XFx1MjI5NFxcdUZFMDB8XFx1MjJCNFxcdTIwRDJ8XFx1MjJCNVxcdTIwRDJ8XFx1MjJEOFxcdTAzMzh8XFx1MjJEOVxcdTAzMzh8XFx1MjJEQVxcdUZFMDB8XFx1MjJEQlxcdUZFMDB8XFx1MjJGNVxcdTAzMzh8XFx1MjJGOVxcdTAzMzh8XFx1MjkzM1xcdTAzMzh8XFx1MjlDRlxcdTAzMzh8XFx1MjlEMFxcdTAzMzh8XFx1MkE2RFxcdTAzMzh8XFx1MkE3MFxcdTAzMzh8XFx1MkE3RFxcdTAzMzh8XFx1MkE3RVxcdTAzMzh8XFx1MkFBMVxcdTAzMzh8XFx1MkFBMlxcdTAzMzh8XFx1MkFBQ1xcdUZFMDB8XFx1MkFBRFxcdUZFMDB8XFx1MkFBRlxcdTAzMzh8XFx1MkFCMFxcdTAzMzh8XFx1MkFDNVxcdTAzMzh8XFx1MkFDNlxcdTAzMzh8XFx1MkFDQlxcdUZFMDB8XFx1MkFDQ1xcdUZFMDB8XFx1MkFGRFxcdTIwRTV8W1xceEEwLVxcdTAxMTNcXHUwMTE2LVxcdTAxMjJcXHUwMTI0LVxcdTAxMkJcXHUwMTJFLVxcdTAxNERcXHUwMTUwLVxcdTAxN0VcXHUwMTkyXFx1MDFCNVxcdTAxRjVcXHUwMjM3XFx1MDJDNlxcdTAyQzdcXHUwMkQ4LVxcdTAyRERcXHUwMzExXFx1MDM5MS1cXHUwM0ExXFx1MDNBMy1cXHUwM0E5XFx1MDNCMS1cXHUwM0M5XFx1MDNEMVxcdTAzRDJcXHUwM0Q1XFx1MDNENlxcdTAzRENcXHUwM0REXFx1MDNGMFxcdTAzRjFcXHUwM0Y1XFx1MDNGNlxcdTA0MDEtXFx1MDQwQ1xcdTA0MEUtXFx1MDQ0RlxcdTA0NTEtXFx1MDQ1Q1xcdTA0NUVcXHUwNDVGXFx1MjAwMi1cXHUyMDA1XFx1MjAwNy1cXHUyMDEwXFx1MjAxMy1cXHUyMDE2XFx1MjAxOC1cXHUyMDFBXFx1MjAxQy1cXHUyMDFFXFx1MjAyMC1cXHUyMDIyXFx1MjAyNVxcdTIwMjZcXHUyMDMwLVxcdTIwMzVcXHUyMDM5XFx1MjAzQVxcdTIwM0VcXHUyMDQxXFx1MjA0M1xcdTIwNDRcXHUyMDRGXFx1MjA1N1xcdTIwNUYtXFx1MjA2M1xcdTIwQUNcXHUyMERCXFx1MjBEQ1xcdTIxMDJcXHUyMTA1XFx1MjEwQS1cXHUyMTEzXFx1MjExNS1cXHUyMTFFXFx1MjEyMlxcdTIxMjRcXHUyMTI3LVxcdTIxMjlcXHUyMTJDXFx1MjEyRFxcdTIxMkYtXFx1MjEzMVxcdTIxMzMtXFx1MjEzOFxcdTIxNDUtXFx1MjE0OFxcdTIxNTMtXFx1MjE1RVxcdTIxOTAtXFx1MjE5QlxcdTIxOUQtXFx1MjFBN1xcdTIxQTktXFx1MjFBRVxcdTIxQjAtXFx1MjFCM1xcdTIxQjUtXFx1MjFCN1xcdTIxQkEtXFx1MjFEQlxcdTIxRERcXHUyMUU0XFx1MjFFNVxcdTIxRjVcXHUyMUZELVxcdTIyMDVcXHUyMjA3LVxcdTIyMDlcXHUyMjBCXFx1MjIwQ1xcdTIyMEYtXFx1MjIxNFxcdTIyMTYtXFx1MjIxOFxcdTIyMUFcXHUyMjFELVxcdTIyMzhcXHUyMjNBLVxcdTIyNTdcXHUyMjU5XFx1MjI1QVxcdTIyNUNcXHUyMjVGLVxcdTIyNjJcXHUyMjY0LVxcdTIyOEJcXHUyMjhELVxcdTIyOUJcXHUyMjlELVxcdTIyQTVcXHUyMkE3LVxcdTIyQjBcXHUyMkIyLVxcdTIyQkJcXHUyMkJELVxcdTIyREJcXHUyMkRFLVxcdTIyRTNcXHUyMkU2LVxcdTIyRjdcXHUyMkY5LVxcdTIyRkVcXHUyMzA1XFx1MjMwNlxcdTIzMDgtXFx1MjMxMFxcdTIzMTJcXHUyMzEzXFx1MjMxNVxcdTIzMTZcXHUyMzFDLVxcdTIzMUZcXHUyMzIyXFx1MjMyM1xcdTIzMkRcXHUyMzJFXFx1MjMzNlxcdTIzM0RcXHUyMzNGXFx1MjM3Q1xcdTIzQjBcXHUyM0IxXFx1MjNCNC1cXHUyM0I2XFx1MjNEQy1cXHUyM0RGXFx1MjNFMlxcdTIzRTdcXHUyNDIzXFx1MjRDOFxcdTI1MDBcXHUyNTAyXFx1MjUwQ1xcdTI1MTBcXHUyNTE0XFx1MjUxOFxcdTI1MUNcXHUyNTI0XFx1MjUyQ1xcdTI1MzRcXHUyNTNDXFx1MjU1MC1cXHUyNTZDXFx1MjU4MFxcdTI1ODRcXHUyNTg4XFx1MjU5MS1cXHUyNTkzXFx1MjVBMVxcdTI1QUFcXHUyNUFCXFx1MjVBRFxcdTI1QUVcXHUyNUIxXFx1MjVCMy1cXHUyNUI1XFx1MjVCOFxcdTI1QjlcXHUyNUJELVxcdTI1QkZcXHUyNUMyXFx1MjVDM1xcdTI1Q0FcXHUyNUNCXFx1MjVFQ1xcdTI1RUZcXHUyNUY4LVxcdTI1RkNcXHUyNjA1XFx1MjYwNlxcdTI2MEVcXHUyNjQwXFx1MjY0MlxcdTI2NjBcXHUyNjYzXFx1MjY2NVxcdTI2NjZcXHUyNjZBXFx1MjY2RC1cXHUyNjZGXFx1MjcxM1xcdTI3MTdcXHUyNzIwXFx1MjczNlxcdTI3NThcXHUyNzcyXFx1Mjc3M1xcdTI3QzhcXHUyN0M5XFx1MjdFNi1cXHUyN0VEXFx1MjdGNS1cXHUyN0ZBXFx1MjdGQ1xcdTI3RkZcXHUyOTAyLVxcdTI5MDVcXHUyOTBDLVxcdTI5MTNcXHUyOTE2XFx1MjkxOS1cXHUyOTIwXFx1MjkyMy1cXHUyOTJBXFx1MjkzM1xcdTI5MzUtXFx1MjkzOVxcdTI5M0NcXHUyOTNEXFx1Mjk0NVxcdTI5NDgtXFx1Mjk0QlxcdTI5NEUtXFx1Mjk3NlxcdTI5NzhcXHUyOTc5XFx1Mjk3Qi1cXHUyOTdGXFx1Mjk4NVxcdTI5ODZcXHUyOThCLVxcdTI5OTZcXHUyOTlBXFx1Mjk5Q1xcdTI5OURcXHUyOUE0LVxcdTI5QjdcXHUyOUI5XFx1MjlCQlxcdTI5QkNcXHUyOUJFLVxcdTI5QzVcXHUyOUM5XFx1MjlDRC1cXHUyOUQwXFx1MjlEQy1cXHUyOURFXFx1MjlFMy1cXHUyOUU1XFx1MjlFQlxcdTI5RjRcXHUyOUY2XFx1MkEwMC1cXHUyQTAyXFx1MkEwNFxcdTJBMDZcXHUyQTBDXFx1MkEwRFxcdTJBMTAtXFx1MkExN1xcdTJBMjItXFx1MkEyN1xcdTJBMjlcXHUyQTJBXFx1MkEyRC1cXHUyQTMxXFx1MkEzMy1cXHUyQTNDXFx1MkEzRlxcdTJBNDBcXHUyQTQyLVxcdTJBNERcXHUyQTUwXFx1MkE1My1cXHUyQTU4XFx1MkE1QS1cXHUyQTVEXFx1MkE1RlxcdTJBNjZcXHUyQTZBXFx1MkE2RC1cXHUyQTc1XFx1MkE3Ny1cXHUyQTlBXFx1MkE5RC1cXHUyQUEyXFx1MkFBNC1cXHUyQUIwXFx1MkFCMy1cXHUyQUM4XFx1MkFDQlxcdTJBQ0NcXHUyQUNGLVxcdTJBREJcXHUyQUU0XFx1MkFFNi1cXHUyQUU5XFx1MkFFQi1cXHUyQUYzXFx1MkFGRFxcdUZCMDAtXFx1RkIwNF18XFx1RDgzNVtcXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVEQ0NGXFx1REQwNFxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERDZCXS9nO1xuXHR2YXIgZW5jb2RlTWFwID0geydcXHhBRCc6J3NoeScsJ1xcdTIwMEMnOid6d25qJywnXFx1MjAwRCc6J3p3aicsJ1xcdTIwMEUnOidscm0nLCdcXHUyMDYzJzonaWMnLCdcXHUyMDYyJzonaXQnLCdcXHUyMDYxJzonYWYnLCdcXHUyMDBGJzoncmxtJywnXFx1MjAwQic6J1plcm9XaWR0aFNwYWNlJywnXFx1MjA2MCc6J05vQnJlYWsnLCdcXHUwMzExJzonRG93bkJyZXZlJywnXFx1MjBEQic6J3Rkb3QnLCdcXHUyMERDJzonRG90RG90JywnXFx0JzonVGFiJywnXFxuJzonTmV3TGluZScsJ1xcdTIwMDgnOidwdW5jc3AnLCdcXHUyMDVGJzonTWVkaXVtU3BhY2UnLCdcXHUyMDA5JzondGhpbnNwJywnXFx1MjAwQSc6J2hhaXJzcCcsJ1xcdTIwMDQnOidlbXNwMTMnLCdcXHUyMDAyJzonZW5zcCcsJ1xcdTIwMDUnOidlbXNwMTQnLCdcXHUyMDAzJzonZW1zcCcsJ1xcdTIwMDcnOidudW1zcCcsJ1xceEEwJzonbmJzcCcsJ1xcdTIwNUZcXHUyMDBBJzonVGhpY2tTcGFjZScsJ1xcdTIwM0UnOidvbGluZScsJ18nOidsb3diYXInLCdcXHUyMDEwJzonZGFzaCcsJ1xcdTIwMTMnOiduZGFzaCcsJ1xcdTIwMTQnOidtZGFzaCcsJ1xcdTIwMTUnOidob3JiYXInLCcsJzonY29tbWEnLCc7Jzonc2VtaScsJ1xcdTIwNEYnOidic2VtaScsJzonOidjb2xvbicsJ1xcdTJBNzQnOidDb2xvbmUnLCchJzonZXhjbCcsJ1xceEExJzonaWV4Y2wnLCc/JzoncXVlc3QnLCdcXHhCRic6J2lxdWVzdCcsJy4nOidwZXJpb2QnLCdcXHUyMDI1JzonbmxkcicsJ1xcdTIwMjYnOidtbGRyJywnXFx4QjcnOidtaWRkb3QnLCdcXCcnOidhcG9zJywnXFx1MjAxOCc6J2xzcXVvJywnXFx1MjAxOSc6J3JzcXVvJywnXFx1MjAxQSc6J3NicXVvJywnXFx1MjAzOSc6J2xzYXF1bycsJ1xcdTIwM0EnOidyc2FxdW8nLCdcIic6J3F1b3QnLCdcXHUyMDFDJzonbGRxdW8nLCdcXHUyMDFEJzoncmRxdW8nLCdcXHUyMDFFJzonYmRxdW8nLCdcXHhBQic6J2xhcXVvJywnXFx4QkInOidyYXF1bycsJygnOidscGFyJywnKSc6J3JwYXInLCdbJzonbHNxYicsJ10nOidyc3FiJywneyc6J2xjdWInLCd9JzoncmN1YicsJ1xcdTIzMDgnOidsY2VpbCcsJ1xcdTIzMDknOidyY2VpbCcsJ1xcdTIzMEEnOidsZmxvb3InLCdcXHUyMzBCJzoncmZsb29yJywnXFx1Mjk4NSc6J2xvcGFyJywnXFx1Mjk4Nic6J3JvcGFyJywnXFx1Mjk4Qic6J2xicmtlJywnXFx1Mjk4Qyc6J3JicmtlJywnXFx1Mjk4RCc6J2xicmtzbHUnLCdcXHUyOThFJzoncmJya3NsZCcsJ1xcdTI5OEYnOidsYnJrc2xkJywnXFx1Mjk5MCc6J3JicmtzbHUnLCdcXHUyOTkxJzonbGFuZ2QnLCdcXHUyOTkyJzoncmFuZ2QnLCdcXHUyOTkzJzonbHBhcmx0JywnXFx1Mjk5NCc6J3JwYXJndCcsJ1xcdTI5OTUnOidndGxQYXInLCdcXHUyOTk2JzonbHRyUGFyJywnXFx1MjdFNic6J2xvYnJrJywnXFx1MjdFNyc6J3JvYnJrJywnXFx1MjdFOCc6J2xhbmcnLCdcXHUyN0U5JzoncmFuZycsJ1xcdTI3RUEnOidMYW5nJywnXFx1MjdFQic6J1JhbmcnLCdcXHUyN0VDJzonbG9hbmcnLCdcXHUyN0VEJzoncm9hbmcnLCdcXHUyNzcyJzonbGJicmsnLCdcXHUyNzczJzoncmJicmsnLCdcXHUyMDE2JzonVmVydCcsJ1xceEE3Jzonc2VjdCcsJ1xceEI2JzoncGFyYScsJ0AnOidjb21tYXQnLCcqJzonYXN0JywnLyc6J3NvbCcsJ3VuZGVmaW5lZCc6bnVsbCwnJic6J2FtcCcsJyMnOidudW0nLCclJzoncGVyY250JywnXFx1MjAzMCc6J3Blcm1pbCcsJ1xcdTIwMzEnOidwZXJ0ZW5rJywnXFx1MjAyMCc6J2RhZ2dlcicsJ1xcdTIwMjEnOidEYWdnZXInLCdcXHUyMDIyJzonYnVsbCcsJ1xcdTIwNDMnOidoeWJ1bGwnLCdcXHUyMDMyJzoncHJpbWUnLCdcXHUyMDMzJzonUHJpbWUnLCdcXHUyMDM0JzondHByaW1lJywnXFx1MjA1Nyc6J3FwcmltZScsJ1xcdTIwMzUnOidicHJpbWUnLCdcXHUyMDQxJzonY2FyZXQnLCdgJzonZ3JhdmUnLCdcXHhCNCc6J2FjdXRlJywnXFx1MDJEQyc6J3RpbGRlJywnXic6J0hhdCcsJ1xceEFGJzonbWFjcicsJ1xcdTAyRDgnOidicmV2ZScsJ1xcdTAyRDknOidkb3QnLCdcXHhBOCc6J2RpZScsJ1xcdTAyREEnOidyaW5nJywnXFx1MDJERCc6J2RibGFjJywnXFx4QjgnOidjZWRpbCcsJ1xcdTAyREInOidvZ29uJywnXFx1MDJDNic6J2NpcmMnLCdcXHUwMkM3JzonY2Fyb24nLCdcXHhCMCc6J2RlZycsJ1xceEE5JzonY29weScsJ1xceEFFJzoncmVnJywnXFx1MjExNyc6J2NvcHlzcicsJ1xcdTIxMTgnOid3cCcsJ1xcdTIxMUUnOidyeCcsJ1xcdTIxMjcnOidtaG8nLCdcXHUyMTI5JzonaWlvdGEnLCdcXHUyMTkwJzonbGFycicsJ1xcdTIxOUEnOidubGFycicsJ1xcdTIxOTInOidyYXJyJywnXFx1MjE5Qic6J25yYXJyJywnXFx1MjE5MSc6J3VhcnInLCdcXHUyMTkzJzonZGFycicsJ1xcdTIxOTQnOidoYXJyJywnXFx1MjFBRSc6J25oYXJyJywnXFx1MjE5NSc6J3ZhcnInLCdcXHUyMTk2JzonbndhcnInLCdcXHUyMTk3JzonbmVhcnInLCdcXHUyMTk4Jzonc2VhcnInLCdcXHUyMTk5Jzonc3dhcnInLCdcXHUyMTlEJzoncmFycncnLCdcXHUyMTlEXFx1MDMzOCc6J25yYXJydycsJ1xcdTIxOUUnOidMYXJyJywnXFx1MjE5Ric6J1VhcnInLCdcXHUyMUEwJzonUmFycicsJ1xcdTIxQTEnOidEYXJyJywnXFx1MjFBMic6J2xhcnJ0bCcsJ1xcdTIxQTMnOidyYXJydGwnLCdcXHUyMUE0JzonbWFwc3RvbGVmdCcsJ1xcdTIxQTUnOidtYXBzdG91cCcsJ1xcdTIxQTYnOidtYXAnLCdcXHUyMUE3JzonbWFwc3RvZG93bicsJ1xcdTIxQTknOidsYXJyaGsnLCdcXHUyMUFBJzoncmFycmhrJywnXFx1MjFBQic6J2xhcnJscCcsJ1xcdTIxQUMnOidyYXJybHAnLCdcXHUyMUFEJzonaGFycncnLCdcXHUyMUIwJzonbHNoJywnXFx1MjFCMSc6J3JzaCcsJ1xcdTIxQjInOidsZHNoJywnXFx1MjFCMyc6J3Jkc2gnLCdcXHUyMUI1JzonY3JhcnInLCdcXHUyMUI2JzonY3VsYXJyJywnXFx1MjFCNyc6J2N1cmFycicsJ1xcdTIxQkEnOidvbGFycicsJ1xcdTIxQkInOidvcmFycicsJ1xcdTIxQkMnOidsaGFydScsJ1xcdTIxQkQnOidsaGFyZCcsJ1xcdTIxQkUnOid1aGFycicsJ1xcdTIxQkYnOid1aGFybCcsJ1xcdTIxQzAnOidyaGFydScsJ1xcdTIxQzEnOidyaGFyZCcsJ1xcdTIxQzInOidkaGFycicsJ1xcdTIxQzMnOidkaGFybCcsJ1xcdTIxQzQnOidybGFycicsJ1xcdTIxQzUnOid1ZGFycicsJ1xcdTIxQzYnOidscmFycicsJ1xcdTIxQzcnOidsbGFycicsJ1xcdTIxQzgnOid1dWFycicsJ1xcdTIxQzknOidycmFycicsJ1xcdTIxQ0EnOidkZGFycicsJ1xcdTIxQ0InOidscmhhcicsJ1xcdTIxQ0MnOidybGhhcicsJ1xcdTIxRDAnOidsQXJyJywnXFx1MjFDRCc6J25sQXJyJywnXFx1MjFEMSc6J3VBcnInLCdcXHUyMUQyJzonckFycicsJ1xcdTIxQ0YnOiduckFycicsJ1xcdTIxRDMnOidkQXJyJywnXFx1MjFENCc6J2lmZicsJ1xcdTIxQ0UnOiduaEFycicsJ1xcdTIxRDUnOid2QXJyJywnXFx1MjFENic6J253QXJyJywnXFx1MjFENyc6J25lQXJyJywnXFx1MjFEOCc6J3NlQXJyJywnXFx1MjFEOSc6J3N3QXJyJywnXFx1MjFEQSc6J2xBYXJyJywnXFx1MjFEQic6J3JBYXJyJywnXFx1MjFERCc6J3ppZ3JhcnInLCdcXHUyMUU0JzonbGFycmInLCdcXHUyMUU1JzoncmFycmInLCdcXHUyMUY1JzonZHVhcnInLCdcXHUyMUZEJzonbG9hcnInLCdcXHUyMUZFJzoncm9hcnInLCdcXHUyMUZGJzonaG9hcnInLCdcXHUyMjAwJzonZm9yYWxsJywnXFx1MjIwMSc6J2NvbXAnLCdcXHUyMjAyJzoncGFydCcsJ1xcdTIyMDJcXHUwMzM4JzonbnBhcnQnLCdcXHUyMjAzJzonZXhpc3QnLCdcXHUyMjA0JzonbmV4aXN0JywnXFx1MjIwNSc6J2VtcHR5JywnXFx1MjIwNyc6J0RlbCcsJ1xcdTIyMDgnOidpbicsJ1xcdTIyMDknOidub3RpbicsJ1xcdTIyMEInOiduaScsJ1xcdTIyMEMnOidub3RuaScsJ1xcdTAzRjYnOidiZXBzaScsJ1xcdTIyMEYnOidwcm9kJywnXFx1MjIxMCc6J2NvcHJvZCcsJ1xcdTIyMTEnOidzdW0nLCcrJzoncGx1cycsJ1xceEIxJzoncG0nLCdcXHhGNyc6J2RpdicsJ1xceEQ3JzondGltZXMnLCc8JzonbHQnLCdcXHUyMjZFJzonbmx0JywnPFxcdTIwRDInOidudmx0JywnPSc6J2VxdWFscycsJ1xcdTIyNjAnOiduZScsJz1cXHUyMEU1JzonYm5lJywnXFx1MkE3NSc6J0VxdWFsJywnPic6J2d0JywnXFx1MjI2Ric6J25ndCcsJz5cXHUyMEQyJzonbnZndCcsJ1xceEFDJzonbm90JywnfCc6J3ZlcnQnLCdcXHhBNic6J2JydmJhcicsJ1xcdTIyMTInOidtaW51cycsJ1xcdTIyMTMnOidtcCcsJ1xcdTIyMTQnOidwbHVzZG8nLCdcXHUyMDQ0JzonZnJhc2wnLCdcXHUyMjE2Jzonc2V0bW4nLCdcXHUyMjE3JzonbG93YXN0JywnXFx1MjIxOCc6J2NvbXBmbicsJ1xcdTIyMUEnOidTcXJ0JywnXFx1MjIxRCc6J3Byb3AnLCdcXHUyMjFFJzonaW5maW4nLCdcXHUyMjFGJzonYW5ncnQnLCdcXHUyMjIwJzonYW5nJywnXFx1MjIyMFxcdTIwRDInOiduYW5nJywnXFx1MjIyMSc6J2FuZ21zZCcsJ1xcdTIyMjInOidhbmdzcGgnLCdcXHUyMjIzJzonbWlkJywnXFx1MjIyNCc6J25taWQnLCdcXHUyMjI1JzoncGFyJywnXFx1MjIyNic6J25wYXInLCdcXHUyMjI3JzonYW5kJywnXFx1MjIyOCc6J29yJywnXFx1MjIyOSc6J2NhcCcsJ1xcdTIyMjlcXHVGRTAwJzonY2FwcycsJ1xcdTIyMkEnOidjdXAnLCdcXHUyMjJBXFx1RkUwMCc6J2N1cHMnLCdcXHUyMjJCJzonaW50JywnXFx1MjIyQyc6J0ludCcsJ1xcdTIyMkQnOid0aW50JywnXFx1MkEwQyc6J3FpbnQnLCdcXHUyMjJFJzonb2ludCcsJ1xcdTIyMkYnOidDb25pbnQnLCdcXHUyMjMwJzonQ2NvbmludCcsJ1xcdTIyMzEnOidjd2ludCcsJ1xcdTIyMzInOidjd2NvbmludCcsJ1xcdTIyMzMnOidhd2NvbmludCcsJ1xcdTIyMzQnOid0aGVyZTQnLCdcXHUyMjM1JzonYmVjYXVzJywnXFx1MjIzNic6J3JhdGlvJywnXFx1MjIzNyc6J0NvbG9uJywnXFx1MjIzOCc6J21pbnVzZCcsJ1xcdTIyM0EnOidtRERvdCcsJ1xcdTIyM0InOidob210aHQnLCdcXHUyMjNDJzonc2ltJywnXFx1MjI0MSc6J25zaW0nLCdcXHUyMjNDXFx1MjBEMic6J252c2ltJywnXFx1MjIzRCc6J2JzaW0nLCdcXHUyMjNEXFx1MDMzMSc6J3JhY2UnLCdcXHUyMjNFJzonYWMnLCdcXHUyMjNFXFx1MDMzMyc6J2FjRScsJ1xcdTIyM0YnOidhY2QnLCdcXHUyMjQwJzond3InLCdcXHUyMjQyJzonZXNpbScsJ1xcdTIyNDJcXHUwMzM4JzonbmVzaW0nLCdcXHUyMjQzJzonc2ltZScsJ1xcdTIyNDQnOiduc2ltZScsJ1xcdTIyNDUnOidjb25nJywnXFx1MjI0Nyc6J25jb25nJywnXFx1MjI0Nic6J3NpbW5lJywnXFx1MjI0OCc6J2FwJywnXFx1MjI0OSc6J25hcCcsJ1xcdTIyNEEnOidhcGUnLCdcXHUyMjRCJzonYXBpZCcsJ1xcdTIyNEJcXHUwMzM4JzonbmFwaWQnLCdcXHUyMjRDJzonYmNvbmcnLCdcXHUyMjREJzonQ3VwQ2FwJywnXFx1MjI2RCc6J05vdEN1cENhcCcsJ1xcdTIyNERcXHUyMEQyJzonbnZhcCcsJ1xcdTIyNEUnOididW1wJywnXFx1MjI0RVxcdTAzMzgnOiduYnVtcCcsJ1xcdTIyNEYnOididW1wZScsJ1xcdTIyNEZcXHUwMzM4JzonbmJ1bXBlJywnXFx1MjI1MCc6J2RvdGVxJywnXFx1MjI1MFxcdTAzMzgnOiduZWRvdCcsJ1xcdTIyNTEnOidlRG90JywnXFx1MjI1Mic6J2VmRG90JywnXFx1MjI1Myc6J2VyRG90JywnXFx1MjI1NCc6J2NvbG9uZScsJ1xcdTIyNTUnOidlY29sb24nLCdcXHUyMjU2JzonZWNpcicsJ1xcdTIyNTcnOidjaXJlJywnXFx1MjI1OSc6J3dlZGdlcScsJ1xcdTIyNUEnOid2ZWVlcScsJ1xcdTIyNUMnOid0cmllJywnXFx1MjI1Ric6J2VxdWVzdCcsJ1xcdTIyNjEnOidlcXVpdicsJ1xcdTIyNjInOiduZXF1aXYnLCdcXHUyMjYxXFx1MjBFNSc6J2JuZXF1aXYnLCdcXHUyMjY0JzonbGUnLCdcXHUyMjcwJzonbmxlJywnXFx1MjI2NFxcdTIwRDInOidudmxlJywnXFx1MjI2NSc6J2dlJywnXFx1MjI3MSc6J25nZScsJ1xcdTIyNjVcXHUyMEQyJzonbnZnZScsJ1xcdTIyNjYnOidsRScsJ1xcdTIyNjZcXHUwMzM4JzonbmxFJywnXFx1MjI2Nyc6J2dFJywnXFx1MjI2N1xcdTAzMzgnOiduZ0UnLCdcXHUyMjY4XFx1RkUwMCc6J2x2bkUnLCdcXHUyMjY4JzonbG5FJywnXFx1MjI2OSc6J2duRScsJ1xcdTIyNjlcXHVGRTAwJzonZ3ZuRScsJ1xcdTIyNkEnOidsbCcsJ1xcdTIyNkFcXHUwMzM4Jzonbkx0dicsJ1xcdTIyNkFcXHUyMEQyJzonbkx0JywnXFx1MjI2Qic6J2dnJywnXFx1MjI2QlxcdTAzMzgnOiduR3R2JywnXFx1MjI2QlxcdTIwRDInOiduR3QnLCdcXHUyMjZDJzondHdpeHQnLCdcXHUyMjcyJzonbHNpbScsJ1xcdTIyNzQnOidubHNpbScsJ1xcdTIyNzMnOidnc2ltJywnXFx1MjI3NSc6J25nc2ltJywnXFx1MjI3Nic6J2xnJywnXFx1MjI3OCc6J250bGcnLCdcXHUyMjc3JzonZ2wnLCdcXHUyMjc5JzonbnRnbCcsJ1xcdTIyN0EnOidwcicsJ1xcdTIyODAnOiducHInLCdcXHUyMjdCJzonc2MnLCdcXHUyMjgxJzonbnNjJywnXFx1MjI3Qyc6J3ByY3VlJywnXFx1MjJFMCc6J25wcmN1ZScsJ1xcdTIyN0QnOidzY2N1ZScsJ1xcdTIyRTEnOiduc2NjdWUnLCdcXHUyMjdFJzoncHJzaW0nLCdcXHUyMjdGJzonc2NzaW0nLCdcXHUyMjdGXFx1MDMzOCc6J05vdFN1Y2NlZWRzVGlsZGUnLCdcXHUyMjgyJzonc3ViJywnXFx1MjI4NCc6J25zdWInLCdcXHUyMjgyXFx1MjBEMic6J3Zuc3ViJywnXFx1MjI4Myc6J3N1cCcsJ1xcdTIyODUnOiduc3VwJywnXFx1MjI4M1xcdTIwRDInOid2bnN1cCcsJ1xcdTIyODYnOidzdWJlJywnXFx1MjI4OCc6J25zdWJlJywnXFx1MjI4Nyc6J3N1cGUnLCdcXHUyMjg5JzonbnN1cGUnLCdcXHUyMjhBXFx1RkUwMCc6J3ZzdWJuZScsJ1xcdTIyOEEnOidzdWJuZScsJ1xcdTIyOEJcXHVGRTAwJzondnN1cG5lJywnXFx1MjI4Qic6J3N1cG5lJywnXFx1MjI4RCc6J2N1cGRvdCcsJ1xcdTIyOEUnOid1cGx1cycsJ1xcdTIyOEYnOidzcXN1YicsJ1xcdTIyOEZcXHUwMzM4JzonTm90U3F1YXJlU3Vic2V0JywnXFx1MjI5MCc6J3Nxc3VwJywnXFx1MjI5MFxcdTAzMzgnOidOb3RTcXVhcmVTdXBlcnNldCcsJ1xcdTIyOTEnOidzcXN1YmUnLCdcXHUyMkUyJzonbnNxc3ViZScsJ1xcdTIyOTInOidzcXN1cGUnLCdcXHUyMkUzJzonbnNxc3VwZScsJ1xcdTIyOTMnOidzcWNhcCcsJ1xcdTIyOTNcXHVGRTAwJzonc3FjYXBzJywnXFx1MjI5NCc6J3NxY3VwJywnXFx1MjI5NFxcdUZFMDAnOidzcWN1cHMnLCdcXHUyMjk1Jzonb3BsdXMnLCdcXHUyMjk2Jzonb21pbnVzJywnXFx1MjI5Nyc6J290aW1lcycsJ1xcdTIyOTgnOidvc29sJywnXFx1MjI5OSc6J29kb3QnLCdcXHUyMjlBJzonb2NpcicsJ1xcdTIyOUInOidvYXN0JywnXFx1MjI5RCc6J29kYXNoJywnXFx1MjI5RSc6J3BsdXNiJywnXFx1MjI5Ric6J21pbnVzYicsJ1xcdTIyQTAnOid0aW1lc2InLCdcXHUyMkExJzonc2RvdGInLCdcXHUyMkEyJzondmRhc2gnLCdcXHUyMkFDJzonbnZkYXNoJywnXFx1MjJBMyc6J2Rhc2h2JywnXFx1MjJBNCc6J3RvcCcsJ1xcdTIyQTUnOidib3QnLCdcXHUyMkE3JzonbW9kZWxzJywnXFx1MjJBOCc6J3ZEYXNoJywnXFx1MjJBRCc6J252RGFzaCcsJ1xcdTIyQTknOidWZGFzaCcsJ1xcdTIyQUUnOiduVmRhc2gnLCdcXHUyMkFBJzonVnZkYXNoJywnXFx1MjJBQic6J1ZEYXNoJywnXFx1MjJBRic6J25WRGFzaCcsJ1xcdTIyQjAnOidwcnVyZWwnLCdcXHUyMkIyJzondmx0cmknLCdcXHUyMkVBJzonbmx0cmknLCdcXHUyMkIzJzondnJ0cmknLCdcXHUyMkVCJzonbnJ0cmknLCdcXHUyMkI0JzonbHRyaWUnLCdcXHUyMkVDJzonbmx0cmllJywnXFx1MjJCNFxcdTIwRDInOidudmx0cmllJywnXFx1MjJCNSc6J3J0cmllJywnXFx1MjJFRCc6J25ydHJpZScsJ1xcdTIyQjVcXHUyMEQyJzonbnZydHJpZScsJ1xcdTIyQjYnOidvcmlnb2YnLCdcXHUyMkI3JzonaW1vZicsJ1xcdTIyQjgnOidtdW1hcCcsJ1xcdTIyQjknOidoZXJjb24nLCdcXHUyMkJBJzonaW50Y2FsJywnXFx1MjJCQic6J3ZlZWJhcicsJ1xcdTIyQkQnOidiYXJ2ZWUnLCdcXHUyMkJFJzonYW5ncnR2YicsJ1xcdTIyQkYnOidscnRyaScsJ1xcdTIyQzAnOidXZWRnZScsJ1xcdTIyQzEnOidWZWUnLCdcXHUyMkMyJzoneGNhcCcsJ1xcdTIyQzMnOid4Y3VwJywnXFx1MjJDNCc6J2RpYW0nLCdcXHUyMkM1Jzonc2RvdCcsJ1xcdTIyQzYnOidTdGFyJywnXFx1MjJDNyc6J2Rpdm9ueCcsJ1xcdTIyQzgnOidib3d0aWUnLCdcXHUyMkM5JzonbHRpbWVzJywnXFx1MjJDQSc6J3J0aW1lcycsJ1xcdTIyQ0InOidsdGhyZWUnLCdcXHUyMkNDJzoncnRocmVlJywnXFx1MjJDRCc6J2JzaW1lJywnXFx1MjJDRSc6J2N1dmVlJywnXFx1MjJDRic6J2N1d2VkJywnXFx1MjJEMCc6J1N1YicsJ1xcdTIyRDEnOidTdXAnLCdcXHUyMkQyJzonQ2FwJywnXFx1MjJEMyc6J0N1cCcsJ1xcdTIyRDQnOidmb3JrJywnXFx1MjJENSc6J2VwYXInLCdcXHUyMkQ2JzonbHRkb3QnLCdcXHUyMkQ3JzonZ3Rkb3QnLCdcXHUyMkQ4JzonTGwnLCdcXHUyMkQ4XFx1MDMzOCc6J25MbCcsJ1xcdTIyRDknOidHZycsJ1xcdTIyRDlcXHUwMzM4JzonbkdnJywnXFx1MjJEQVxcdUZFMDAnOidsZXNnJywnXFx1MjJEQSc6J2xlZycsJ1xcdTIyREInOidnZWwnLCdcXHUyMkRCXFx1RkUwMCc6J2dlc2wnLCdcXHUyMkRFJzonY3VlcHInLCdcXHUyMkRGJzonY3Vlc2MnLCdcXHUyMkU2JzonbG5zaW0nLCdcXHUyMkU3JzonZ25zaW0nLCdcXHUyMkU4JzoncHJuc2ltJywnXFx1MjJFOSc6J3NjbnNpbScsJ1xcdTIyRUUnOid2ZWxsaXAnLCdcXHUyMkVGJzonY3Rkb3QnLCdcXHUyMkYwJzondXRkb3QnLCdcXHUyMkYxJzonZHRkb3QnLCdcXHUyMkYyJzonZGlzaW4nLCdcXHUyMkYzJzonaXNpbnN2JywnXFx1MjJGNCc6J2lzaW5zJywnXFx1MjJGNSc6J2lzaW5kb3QnLCdcXHUyMkY1XFx1MDMzOCc6J25vdGluZG90JywnXFx1MjJGNic6J25vdGludmMnLCdcXHUyMkY3Jzonbm90aW52YicsJ1xcdTIyRjknOidpc2luRScsJ1xcdTIyRjlcXHUwMzM4Jzonbm90aW5FJywnXFx1MjJGQSc6J25pc2QnLCdcXHUyMkZCJzoneG5pcycsJ1xcdTIyRkMnOiduaXMnLCdcXHUyMkZEJzonbm90bml2YycsJ1xcdTIyRkUnOidub3RuaXZiJywnXFx1MjMwNSc6J2JhcndlZCcsJ1xcdTIzMDYnOidCYXJ3ZWQnLCdcXHUyMzBDJzonZHJjcm9wJywnXFx1MjMwRCc6J2RsY3JvcCcsJ1xcdTIzMEUnOid1cmNyb3AnLCdcXHUyMzBGJzondWxjcm9wJywnXFx1MjMxMCc6J2Jub3QnLCdcXHUyMzEyJzoncHJvZmxpbmUnLCdcXHUyMzEzJzoncHJvZnN1cmYnLCdcXHUyMzE1JzondGVscmVjJywnXFx1MjMxNic6J3RhcmdldCcsJ1xcdTIzMUMnOid1bGNvcm4nLCdcXHUyMzFEJzondXJjb3JuJywnXFx1MjMxRSc6J2RsY29ybicsJ1xcdTIzMUYnOidkcmNvcm4nLCdcXHUyMzIyJzonZnJvd24nLCdcXHUyMzIzJzonc21pbGUnLCdcXHUyMzJEJzonY3lsY3R5JywnXFx1MjMyRSc6J3Byb2ZhbGFyJywnXFx1MjMzNic6J3RvcGJvdCcsJ1xcdTIzM0QnOidvdmJhcicsJ1xcdTIzM0YnOidzb2xiYXInLCdcXHUyMzdDJzonYW5nemFycicsJ1xcdTIzQjAnOidsbW91c3QnLCdcXHUyM0IxJzoncm1vdXN0JywnXFx1MjNCNCc6J3RicmsnLCdcXHUyM0I1JzonYmJyaycsJ1xcdTIzQjYnOidiYnJrdGJyaycsJ1xcdTIzREMnOidPdmVyUGFyZW50aGVzaXMnLCdcXHUyM0REJzonVW5kZXJQYXJlbnRoZXNpcycsJ1xcdTIzREUnOidPdmVyQnJhY2UnLCdcXHUyM0RGJzonVW5kZXJCcmFjZScsJ1xcdTIzRTInOid0cnBleml1bScsJ1xcdTIzRTcnOidlbGludGVycycsJ1xcdTI0MjMnOidibGFuaycsJ1xcdTI1MDAnOidib3hoJywnXFx1MjUwMic6J2JveHYnLCdcXHUyNTBDJzonYm94ZHInLCdcXHUyNTEwJzonYm94ZGwnLCdcXHUyNTE0JzonYm94dXInLCdcXHUyNTE4JzonYm94dWwnLCdcXHUyNTFDJzonYm94dnInLCdcXHUyNTI0JzonYm94dmwnLCdcXHUyNTJDJzonYm94aGQnLCdcXHUyNTM0JzonYm94aHUnLCdcXHUyNTNDJzonYm94dmgnLCdcXHUyNTUwJzonYm94SCcsJ1xcdTI1NTEnOidib3hWJywnXFx1MjU1Mic6J2JveGRSJywnXFx1MjU1Myc6J2JveERyJywnXFx1MjU1NCc6J2JveERSJywnXFx1MjU1NSc6J2JveGRMJywnXFx1MjU1Nic6J2JveERsJywnXFx1MjU1Nyc6J2JveERMJywnXFx1MjU1OCc6J2JveHVSJywnXFx1MjU1OSc6J2JveFVyJywnXFx1MjU1QSc6J2JveFVSJywnXFx1MjU1Qic6J2JveHVMJywnXFx1MjU1Qyc6J2JveFVsJywnXFx1MjU1RCc6J2JveFVMJywnXFx1MjU1RSc6J2JveHZSJywnXFx1MjU1Ric6J2JveFZyJywnXFx1MjU2MCc6J2JveFZSJywnXFx1MjU2MSc6J2JveHZMJywnXFx1MjU2Mic6J2JveFZsJywnXFx1MjU2Myc6J2JveFZMJywnXFx1MjU2NCc6J2JveEhkJywnXFx1MjU2NSc6J2JveGhEJywnXFx1MjU2Nic6J2JveEhEJywnXFx1MjU2Nyc6J2JveEh1JywnXFx1MjU2OCc6J2JveGhVJywnXFx1MjU2OSc6J2JveEhVJywnXFx1MjU2QSc6J2JveHZIJywnXFx1MjU2Qic6J2JveFZoJywnXFx1MjU2Qyc6J2JveFZIJywnXFx1MjU4MCc6J3VoYmxrJywnXFx1MjU4NCc6J2xoYmxrJywnXFx1MjU4OCc6J2Jsb2NrJywnXFx1MjU5MSc6J2JsazE0JywnXFx1MjU5Mic6J2JsazEyJywnXFx1MjU5Myc6J2JsazM0JywnXFx1MjVBMSc6J3NxdScsJ1xcdTI1QUEnOidzcXVmJywnXFx1MjVBQic6J0VtcHR5VmVyeVNtYWxsU3F1YXJlJywnXFx1MjVBRCc6J3JlY3QnLCdcXHUyNUFFJzonbWFya2VyJywnXFx1MjVCMSc6J2ZsdG5zJywnXFx1MjVCMyc6J3h1dHJpJywnXFx1MjVCNCc6J3V0cmlmJywnXFx1MjVCNSc6J3V0cmknLCdcXHUyNUI4JzoncnRyaWYnLCdcXHUyNUI5JzoncnRyaScsJ1xcdTI1QkQnOid4ZHRyaScsJ1xcdTI1QkUnOidkdHJpZicsJ1xcdTI1QkYnOidkdHJpJywnXFx1MjVDMic6J2x0cmlmJywnXFx1MjVDMyc6J2x0cmknLCdcXHUyNUNBJzonbG96JywnXFx1MjVDQic6J2NpcicsJ1xcdTI1RUMnOid0cmlkb3QnLCdcXHUyNUVGJzoneGNpcmMnLCdcXHUyNUY4JzondWx0cmknLCdcXHUyNUY5JzondXJ0cmknLCdcXHUyNUZBJzonbGx0cmknLCdcXHUyNUZCJzonRW1wdHlTbWFsbFNxdWFyZScsJ1xcdTI1RkMnOidGaWxsZWRTbWFsbFNxdWFyZScsJ1xcdTI2MDUnOidzdGFyZicsJ1xcdTI2MDYnOidzdGFyJywnXFx1MjYwRSc6J3Bob25lJywnXFx1MjY0MCc6J2ZlbWFsZScsJ1xcdTI2NDInOidtYWxlJywnXFx1MjY2MCc6J3NwYWRlcycsJ1xcdTI2NjMnOidjbHVicycsJ1xcdTI2NjUnOidoZWFydHMnLCdcXHUyNjY2JzonZGlhbXMnLCdcXHUyNjZBJzonc3VuZycsJ1xcdTI3MTMnOidjaGVjaycsJ1xcdTI3MTcnOidjcm9zcycsJ1xcdTI3MjAnOidtYWx0JywnXFx1MjczNic6J3NleHQnLCdcXHUyNzU4JzonVmVydGljYWxTZXBhcmF0b3InLCdcXHUyN0M4JzonYnNvbGhzdWInLCdcXHUyN0M5Jzonc3VwaHNvbCcsJ1xcdTI3RjUnOid4bGFycicsJ1xcdTI3RjYnOid4cmFycicsJ1xcdTI3RjcnOid4aGFycicsJ1xcdTI3RjgnOid4bEFycicsJ1xcdTI3RjknOid4ckFycicsJ1xcdTI3RkEnOid4aEFycicsJ1xcdTI3RkMnOid4bWFwJywnXFx1MjdGRic6J2R6aWdyYXJyJywnXFx1MjkwMic6J252bEFycicsJ1xcdTI5MDMnOidudnJBcnInLCdcXHUyOTA0JzonbnZIYXJyJywnXFx1MjkwNSc6J01hcCcsJ1xcdTI5MEMnOidsYmFycicsJ1xcdTI5MEQnOidyYmFycicsJ1xcdTI5MEUnOidsQmFycicsJ1xcdTI5MEYnOidyQmFycicsJ1xcdTI5MTAnOidSQmFycicsJ1xcdTI5MTEnOidERG90cmFoZCcsJ1xcdTI5MTInOidVcEFycm93QmFyJywnXFx1MjkxMyc6J0Rvd25BcnJvd0JhcicsJ1xcdTI5MTYnOidSYXJydGwnLCdcXHUyOTE5JzonbGF0YWlsJywnXFx1MjkxQSc6J3JhdGFpbCcsJ1xcdTI5MUInOidsQXRhaWwnLCdcXHUyOTFDJzonckF0YWlsJywnXFx1MjkxRCc6J2xhcnJmcycsJ1xcdTI5MUUnOidyYXJyZnMnLCdcXHUyOTFGJzonbGFycmJmcycsJ1xcdTI5MjAnOidyYXJyYmZzJywnXFx1MjkyMyc6J253YXJoaycsJ1xcdTI5MjQnOiduZWFyaGsnLCdcXHUyOTI1Jzonc2VhcmhrJywnXFx1MjkyNic6J3N3YXJoaycsJ1xcdTI5MjcnOidud25lYXInLCdcXHUyOTI4JzondG9lYScsJ1xcdTI5MjknOid0b3NhJywnXFx1MjkyQSc6J3N3bndhcicsJ1xcdTI5MzMnOidyYXJyYycsJ1xcdTI5MzNcXHUwMzM4JzonbnJhcnJjJywnXFx1MjkzNSc6J2N1ZGFycnInLCdcXHUyOTM2JzonbGRjYScsJ1xcdTI5MzcnOidyZGNhJywnXFx1MjkzOCc6J2N1ZGFycmwnLCdcXHUyOTM5JzonbGFycnBsJywnXFx1MjkzQyc6J2N1cmFycm0nLCdcXHUyOTNEJzonY3VsYXJycCcsJ1xcdTI5NDUnOidyYXJycGwnLCdcXHUyOTQ4JzonaGFycmNpcicsJ1xcdTI5NDknOidVYXJyb2NpcicsJ1xcdTI5NEEnOidsdXJkc2hhcicsJ1xcdTI5NEInOidsZHJ1c2hhcicsJ1xcdTI5NEUnOidMZWZ0UmlnaHRWZWN0b3InLCdcXHUyOTRGJzonUmlnaHRVcERvd25WZWN0b3InLCdcXHUyOTUwJzonRG93bkxlZnRSaWdodFZlY3RvcicsJ1xcdTI5NTEnOidMZWZ0VXBEb3duVmVjdG9yJywnXFx1Mjk1Mic6J0xlZnRWZWN0b3JCYXInLCdcXHUyOTUzJzonUmlnaHRWZWN0b3JCYXInLCdcXHUyOTU0JzonUmlnaHRVcFZlY3RvckJhcicsJ1xcdTI5NTUnOidSaWdodERvd25WZWN0b3JCYXInLCdcXHUyOTU2JzonRG93bkxlZnRWZWN0b3JCYXInLCdcXHUyOTU3JzonRG93blJpZ2h0VmVjdG9yQmFyJywnXFx1Mjk1OCc6J0xlZnRVcFZlY3RvckJhcicsJ1xcdTI5NTknOidMZWZ0RG93blZlY3RvckJhcicsJ1xcdTI5NUEnOidMZWZ0VGVlVmVjdG9yJywnXFx1Mjk1Qic6J1JpZ2h0VGVlVmVjdG9yJywnXFx1Mjk1Qyc6J1JpZ2h0VXBUZWVWZWN0b3InLCdcXHUyOTVEJzonUmlnaHREb3duVGVlVmVjdG9yJywnXFx1Mjk1RSc6J0Rvd25MZWZ0VGVlVmVjdG9yJywnXFx1Mjk1Ric6J0Rvd25SaWdodFRlZVZlY3RvcicsJ1xcdTI5NjAnOidMZWZ0VXBUZWVWZWN0b3InLCdcXHUyOTYxJzonTGVmdERvd25UZWVWZWN0b3InLCdcXHUyOTYyJzonbEhhcicsJ1xcdTI5NjMnOid1SGFyJywnXFx1Mjk2NCc6J3JIYXInLCdcXHUyOTY1JzonZEhhcicsJ1xcdTI5NjYnOidsdXJ1aGFyJywnXFx1Mjk2Nyc6J2xkcmRoYXInLCdcXHUyOTY4JzoncnVsdWhhcicsJ1xcdTI5NjknOidyZGxkaGFyJywnXFx1Mjk2QSc6J2xoYXJ1bCcsJ1xcdTI5NkInOidsbGhhcmQnLCdcXHUyOTZDJzoncmhhcnVsJywnXFx1Mjk2RCc6J2xyaGFyZCcsJ1xcdTI5NkUnOid1ZGhhcicsJ1xcdTI5NkYnOidkdWhhcicsJ1xcdTI5NzAnOidSb3VuZEltcGxpZXMnLCdcXHUyOTcxJzonZXJhcnInLCdcXHUyOTcyJzonc2ltcmFycicsJ1xcdTI5NzMnOidsYXJyc2ltJywnXFx1Mjk3NCc6J3JhcnJzaW0nLCdcXHUyOTc1JzoncmFycmFwJywnXFx1Mjk3Nic6J2x0bGFycicsJ1xcdTI5NzgnOidndHJhcnInLCdcXHUyOTc5Jzonc3VicmFycicsJ1xcdTI5N0InOidzdXBsYXJyJywnXFx1Mjk3Qyc6J2xmaXNodCcsJ1xcdTI5N0QnOidyZmlzaHQnLCdcXHUyOTdFJzondWZpc2h0JywnXFx1Mjk3Ric6J2RmaXNodCcsJ1xcdTI5OUEnOid2emlnemFnJywnXFx1Mjk5Qyc6J3ZhbmdydCcsJ1xcdTI5OUQnOidhbmdydHZiZCcsJ1xcdTI5QTQnOidhbmdlJywnXFx1MjlBNSc6J3JhbmdlJywnXFx1MjlBNic6J2R3YW5nbGUnLCdcXHUyOUE3JzondXdhbmdsZScsJ1xcdTI5QTgnOidhbmdtc2RhYScsJ1xcdTI5QTknOidhbmdtc2RhYicsJ1xcdTI5QUEnOidhbmdtc2RhYycsJ1xcdTI5QUInOidhbmdtc2RhZCcsJ1xcdTI5QUMnOidhbmdtc2RhZScsJ1xcdTI5QUQnOidhbmdtc2RhZicsJ1xcdTI5QUUnOidhbmdtc2RhZycsJ1xcdTI5QUYnOidhbmdtc2RhaCcsJ1xcdTI5QjAnOidiZW1wdHl2JywnXFx1MjlCMSc6J2RlbXB0eXYnLCdcXHUyOUIyJzonY2VtcHR5dicsJ1xcdTI5QjMnOidyYWVtcHR5dicsJ1xcdTI5QjQnOidsYWVtcHR5dicsJ1xcdTI5QjUnOidvaGJhcicsJ1xcdTI5QjYnOidvbWlkJywnXFx1MjlCNyc6J29wYXInLCdcXHUyOUI5Jzonb3BlcnAnLCdcXHUyOUJCJzonb2xjcm9zcycsJ1xcdTI5QkMnOidvZHNvbGQnLCdcXHUyOUJFJzonb2xjaXInLCdcXHUyOUJGJzonb2ZjaXInLCdcXHUyOUMwJzonb2x0JywnXFx1MjlDMSc6J29ndCcsJ1xcdTI5QzInOidjaXJzY2lyJywnXFx1MjlDMyc6J2NpckUnLCdcXHUyOUM0Jzonc29sYicsJ1xcdTI5QzUnOidic29sYicsJ1xcdTI5QzknOidib3hib3gnLCdcXHUyOUNEJzondHJpc2InLCdcXHUyOUNFJzoncnRyaWx0cmknLCdcXHUyOUNGJzonTGVmdFRyaWFuZ2xlQmFyJywnXFx1MjlDRlxcdTAzMzgnOidOb3RMZWZ0VHJpYW5nbGVCYXInLCdcXHUyOUQwJzonUmlnaHRUcmlhbmdsZUJhcicsJ1xcdTI5RDBcXHUwMzM4JzonTm90UmlnaHRUcmlhbmdsZUJhcicsJ1xcdTI5REMnOidpaW5maW4nLCdcXHUyOUREJzonaW5maW50aWUnLCdcXHUyOURFJzonbnZpbmZpbicsJ1xcdTI5RTMnOidlcGFyc2wnLCdcXHUyOUU0Jzonc21lcGFyc2wnLCdcXHUyOUU1JzonZXF2cGFyc2wnLCdcXHUyOUVCJzonbG96ZicsJ1xcdTI5RjQnOidSdWxlRGVsYXllZCcsJ1xcdTI5RjYnOidkc29sJywnXFx1MkEwMCc6J3hvZG90JywnXFx1MkEwMSc6J3hvcGx1cycsJ1xcdTJBMDInOid4b3RpbWUnLCdcXHUyQTA0JzoneHVwbHVzJywnXFx1MkEwNic6J3hzcWN1cCcsJ1xcdTJBMEQnOidmcGFydGludCcsJ1xcdTJBMTAnOidjaXJmbmludCcsJ1xcdTJBMTEnOidhd2ludCcsJ1xcdTJBMTInOidycHBvbGludCcsJ1xcdTJBMTMnOidzY3BvbGludCcsJ1xcdTJBMTQnOiducG9saW50JywnXFx1MkExNSc6J3BvaW50aW50JywnXFx1MkExNic6J3F1YXRpbnQnLCdcXHUyQTE3JzonaW50bGFyaGsnLCdcXHUyQTIyJzoncGx1c2NpcicsJ1xcdTJBMjMnOidwbHVzYWNpcicsJ1xcdTJBMjQnOidzaW1wbHVzJywnXFx1MkEyNSc6J3BsdXNkdScsJ1xcdTJBMjYnOidwbHVzc2ltJywnXFx1MkEyNyc6J3BsdXN0d28nLCdcXHUyQTI5JzonbWNvbW1hJywnXFx1MkEyQSc6J21pbnVzZHUnLCdcXHUyQTJEJzonbG9wbHVzJywnXFx1MkEyRSc6J3JvcGx1cycsJ1xcdTJBMkYnOidDcm9zcycsJ1xcdTJBMzAnOid0aW1lc2QnLCdcXHUyQTMxJzondGltZXNiYXInLCdcXHUyQTMzJzonc21hc2hwJywnXFx1MkEzNCc6J2xvdGltZXMnLCdcXHUyQTM1Jzoncm90aW1lcycsJ1xcdTJBMzYnOidvdGltZXNhcycsJ1xcdTJBMzcnOidPdGltZXMnLCdcXHUyQTM4Jzonb2RpdicsJ1xcdTJBMzknOid0cmlwbHVzJywnXFx1MkEzQSc6J3RyaW1pbnVzJywnXFx1MkEzQic6J3RyaXRpbWUnLCdcXHUyQTNDJzonaXByb2QnLCdcXHUyQTNGJzonYW1hbGcnLCdcXHUyQTQwJzonY2FwZG90JywnXFx1MkE0Mic6J25jdXAnLCdcXHUyQTQzJzonbmNhcCcsJ1xcdTJBNDQnOidjYXBhbmQnLCdcXHUyQTQ1JzonY3Vwb3InLCdcXHUyQTQ2JzonY3VwY2FwJywnXFx1MkE0Nyc6J2NhcGN1cCcsJ1xcdTJBNDgnOidjdXBicmNhcCcsJ1xcdTJBNDknOidjYXBicmN1cCcsJ1xcdTJBNEEnOidjdXBjdXAnLCdcXHUyQTRCJzonY2FwY2FwJywnXFx1MkE0Qyc6J2NjdXBzJywnXFx1MkE0RCc6J2NjYXBzJywnXFx1MkE1MCc6J2NjdXBzc20nLCdcXHUyQTUzJzonQW5kJywnXFx1MkE1NCc6J09yJywnXFx1MkE1NSc6J2FuZGFuZCcsJ1xcdTJBNTYnOidvcm9yJywnXFx1MkE1Nyc6J29yc2xvcGUnLCdcXHUyQTU4JzonYW5kc2xvcGUnLCdcXHUyQTVBJzonYW5kdicsJ1xcdTJBNUInOidvcnYnLCdcXHUyQTVDJzonYW5kZCcsJ1xcdTJBNUQnOidvcmQnLCdcXHUyQTVGJzond2VkYmFyJywnXFx1MkE2Nic6J3Nkb3RlJywnXFx1MkE2QSc6J3NpbWRvdCcsJ1xcdTJBNkQnOidjb25nZG90JywnXFx1MkE2RFxcdTAzMzgnOiduY29uZ2RvdCcsJ1xcdTJBNkUnOidlYXN0ZXInLCdcXHUyQTZGJzonYXBhY2lyJywnXFx1MkE3MCc6J2FwRScsJ1xcdTJBNzBcXHUwMzM4JzonbmFwRScsJ1xcdTJBNzEnOidlcGx1cycsJ1xcdTJBNzInOidwbHVzZScsJ1xcdTJBNzMnOidFc2ltJywnXFx1MkE3Nyc6J2VERG90JywnXFx1MkE3OCc6J2VxdWl2REQnLCdcXHUyQTc5JzonbHRjaXInLCdcXHUyQTdBJzonZ3RjaXInLCdcXHUyQTdCJzonbHRxdWVzdCcsJ1xcdTJBN0MnOidndHF1ZXN0JywnXFx1MkE3RCc6J2xlcycsJ1xcdTJBN0RcXHUwMzM4JzonbmxlcycsJ1xcdTJBN0UnOidnZXMnLCdcXHUyQTdFXFx1MDMzOCc6J25nZXMnLCdcXHUyQTdGJzonbGVzZG90JywnXFx1MkE4MCc6J2dlc2RvdCcsJ1xcdTJBODEnOidsZXNkb3RvJywnXFx1MkE4Mic6J2dlc2RvdG8nLCdcXHUyQTgzJzonbGVzZG90b3InLCdcXHUyQTg0JzonZ2VzZG90b2wnLCdcXHUyQTg1JzonbGFwJywnXFx1MkE4Nic6J2dhcCcsJ1xcdTJBODcnOidsbmUnLCdcXHUyQTg4JzonZ25lJywnXFx1MkE4OSc6J2xuYXAnLCdcXHUyQThBJzonZ25hcCcsJ1xcdTJBOEInOidsRWcnLCdcXHUyQThDJzonZ0VsJywnXFx1MkE4RCc6J2xzaW1lJywnXFx1MkE4RSc6J2dzaW1lJywnXFx1MkE4Ric6J2xzaW1nJywnXFx1MkE5MCc6J2dzaW1sJywnXFx1MkE5MSc6J2xnRScsJ1xcdTJBOTInOidnbEUnLCdcXHUyQTkzJzonbGVzZ2VzJywnXFx1MkE5NCc6J2dlc2xlcycsJ1xcdTJBOTUnOidlbHMnLCdcXHUyQTk2JzonZWdzJywnXFx1MkE5Nyc6J2Vsc2RvdCcsJ1xcdTJBOTgnOidlZ3Nkb3QnLCdcXHUyQTk5JzonZWwnLCdcXHUyQTlBJzonZWcnLCdcXHUyQTlEJzonc2ltbCcsJ1xcdTJBOUUnOidzaW1nJywnXFx1MkE5Ric6J3NpbWxFJywnXFx1MkFBMCc6J3NpbWdFJywnXFx1MkFBMSc6J0xlc3NMZXNzJywnXFx1MkFBMVxcdTAzMzgnOidOb3ROZXN0ZWRMZXNzTGVzcycsJ1xcdTJBQTInOidHcmVhdGVyR3JlYXRlcicsJ1xcdTJBQTJcXHUwMzM4JzonTm90TmVzdGVkR3JlYXRlckdyZWF0ZXInLCdcXHUyQUE0JzonZ2xqJywnXFx1MkFBNSc6J2dsYScsJ1xcdTJBQTYnOidsdGNjJywnXFx1MkFBNyc6J2d0Y2MnLCdcXHUyQUE4JzonbGVzY2MnLCdcXHUyQUE5JzonZ2VzY2MnLCdcXHUyQUFBJzonc210JywnXFx1MkFBQic6J2xhdCcsJ1xcdTJBQUMnOidzbXRlJywnXFx1MkFBQ1xcdUZFMDAnOidzbXRlcycsJ1xcdTJBQUQnOidsYXRlJywnXFx1MkFBRFxcdUZFMDAnOidsYXRlcycsJ1xcdTJBQUUnOididW1wRScsJ1xcdTJBQUYnOidwcmUnLCdcXHUyQUFGXFx1MDMzOCc6J25wcmUnLCdcXHUyQUIwJzonc2NlJywnXFx1MkFCMFxcdTAzMzgnOiduc2NlJywnXFx1MkFCMyc6J3ByRScsJ1xcdTJBQjQnOidzY0UnLCdcXHUyQUI1JzoncHJuRScsJ1xcdTJBQjYnOidzY25FJywnXFx1MkFCNyc6J3ByYXAnLCdcXHUyQUI4Jzonc2NhcCcsJ1xcdTJBQjknOidwcm5hcCcsJ1xcdTJBQkEnOidzY25hcCcsJ1xcdTJBQkInOidQcicsJ1xcdTJBQkMnOidTYycsJ1xcdTJBQkQnOidzdWJkb3QnLCdcXHUyQUJFJzonc3VwZG90JywnXFx1MkFCRic6J3N1YnBsdXMnLCdcXHUyQUMwJzonc3VwcGx1cycsJ1xcdTJBQzEnOidzdWJtdWx0JywnXFx1MkFDMic6J3N1cG11bHQnLCdcXHUyQUMzJzonc3ViZWRvdCcsJ1xcdTJBQzQnOidzdXBlZG90JywnXFx1MkFDNSc6J3N1YkUnLCdcXHUyQUM1XFx1MDMzOCc6J25zdWJFJywnXFx1MkFDNic6J3N1cEUnLCdcXHUyQUM2XFx1MDMzOCc6J25zdXBFJywnXFx1MkFDNyc6J3N1YnNpbScsJ1xcdTJBQzgnOidzdXBzaW0nLCdcXHUyQUNCXFx1RkUwMCc6J3ZzdWJuRScsJ1xcdTJBQ0InOidzdWJuRScsJ1xcdTJBQ0NcXHVGRTAwJzondnN1cG5FJywnXFx1MkFDQyc6J3N1cG5FJywnXFx1MkFDRic6J2NzdWInLCdcXHUyQUQwJzonY3N1cCcsJ1xcdTJBRDEnOidjc3ViZScsJ1xcdTJBRDInOidjc3VwZScsJ1xcdTJBRDMnOidzdWJzdXAnLCdcXHUyQUQ0Jzonc3Vwc3ViJywnXFx1MkFENSc6J3N1YnN1YicsJ1xcdTJBRDYnOidzdXBzdXAnLCdcXHUyQUQ3Jzonc3VwaHN1YicsJ1xcdTJBRDgnOidzdXBkc3ViJywnXFx1MkFEOSc6J2Zvcmt2JywnXFx1MkFEQSc6J3RvcGZvcmsnLCdcXHUyQURCJzonbWxjcCcsJ1xcdTJBRTQnOidEYXNodicsJ1xcdTJBRTYnOidWZGFzaGwnLCdcXHUyQUU3JzonQmFydicsJ1xcdTJBRTgnOid2QmFyJywnXFx1MkFFOSc6J3ZCYXJ2JywnXFx1MkFFQic6J1ZiYXInLCdcXHUyQUVDJzonTm90JywnXFx1MkFFRCc6J2JOb3QnLCdcXHUyQUVFJzoncm5taWQnLCdcXHUyQUVGJzonY2lybWlkJywnXFx1MkFGMCc6J21pZGNpcicsJ1xcdTJBRjEnOid0b3BjaXInLCdcXHUyQUYyJzonbmhwYXInLCdcXHUyQUYzJzoncGFyc2ltJywnXFx1MkFGRCc6J3BhcnNsJywnXFx1MkFGRFxcdTIwRTUnOiducGFyc2wnLCdcXHUyNjZEJzonZmxhdCcsJ1xcdTI2NkUnOiduYXR1cicsJ1xcdTI2NkYnOidzaGFycCcsJ1xceEE0JzonY3VycmVuJywnXFx4QTInOidjZW50JywnJCc6J2RvbGxhcicsJ1xceEEzJzoncG91bmQnLCdcXHhBNSc6J3llbicsJ1xcdTIwQUMnOidldXJvJywnXFx4QjknOidzdXAxJywnXFx4QkQnOidoYWxmJywnXFx1MjE1Myc6J2ZyYWMxMycsJ1xceEJDJzonZnJhYzE0JywnXFx1MjE1NSc6J2ZyYWMxNScsJ1xcdTIxNTknOidmcmFjMTYnLCdcXHUyMTVCJzonZnJhYzE4JywnXFx4QjInOidzdXAyJywnXFx1MjE1NCc6J2ZyYWMyMycsJ1xcdTIxNTYnOidmcmFjMjUnLCdcXHhCMyc6J3N1cDMnLCdcXHhCRSc6J2ZyYWMzNCcsJ1xcdTIxNTcnOidmcmFjMzUnLCdcXHUyMTVDJzonZnJhYzM4JywnXFx1MjE1OCc6J2ZyYWM0NScsJ1xcdTIxNUEnOidmcmFjNTYnLCdcXHUyMTVEJzonZnJhYzU4JywnXFx1MjE1RSc6J2ZyYWM3OCcsJ1xcdUQ4MzVcXHVEQ0I2JzonYXNjcicsJ1xcdUQ4MzVcXHVERDUyJzonYW9wZicsJ1xcdUQ4MzVcXHVERDFFJzonYWZyJywnXFx1RDgzNVxcdUREMzgnOidBb3BmJywnXFx1RDgzNVxcdUREMDQnOidBZnInLCdcXHVEODM1XFx1REM5Qyc6J0FzY3InLCdcXHhBQSc6J29yZGYnLCdcXHhFMSc6J2FhY3V0ZScsJ1xceEMxJzonQWFjdXRlJywnXFx4RTAnOidhZ3JhdmUnLCdcXHhDMCc6J0FncmF2ZScsJ1xcdTAxMDMnOidhYnJldmUnLCdcXHUwMTAyJzonQWJyZXZlJywnXFx4RTInOidhY2lyYycsJ1xceEMyJzonQWNpcmMnLCdcXHhFNSc6J2FyaW5nJywnXFx4QzUnOidhbmdzdCcsJ1xceEU0JzonYXVtbCcsJ1xceEM0JzonQXVtbCcsJ1xceEUzJzonYXRpbGRlJywnXFx4QzMnOidBdGlsZGUnLCdcXHUwMTA1JzonYW9nb24nLCdcXHUwMTA0JzonQW9nb24nLCdcXHUwMTAxJzonYW1hY3InLCdcXHUwMTAwJzonQW1hY3InLCdcXHhFNic6J2FlbGlnJywnXFx4QzYnOidBRWxpZycsJ1xcdUQ4MzVcXHVEQ0I3JzonYnNjcicsJ1xcdUQ4MzVcXHVERDUzJzonYm9wZicsJ1xcdUQ4MzVcXHVERDFGJzonYmZyJywnXFx1RDgzNVxcdUREMzknOidCb3BmJywnXFx1MjEyQyc6J0JzY3InLCdcXHVEODM1XFx1REQwNSc6J0JmcicsJ1xcdUQ4MzVcXHVERDIwJzonY2ZyJywnXFx1RDgzNVxcdURDQjgnOidjc2NyJywnXFx1RDgzNVxcdURENTQnOidjb3BmJywnXFx1MjEyRCc6J0NmcicsJ1xcdUQ4MzVcXHVEQzlFJzonQ3NjcicsJ1xcdTIxMDInOidDb3BmJywnXFx1MDEwNyc6J2NhY3V0ZScsJ1xcdTAxMDYnOidDYWN1dGUnLCdcXHUwMTA5JzonY2NpcmMnLCdcXHUwMTA4JzonQ2NpcmMnLCdcXHUwMTBEJzonY2Nhcm9uJywnXFx1MDEwQyc6J0NjYXJvbicsJ1xcdTAxMEInOidjZG90JywnXFx1MDEwQSc6J0Nkb3QnLCdcXHhFNyc6J2NjZWRpbCcsJ1xceEM3JzonQ2NlZGlsJywnXFx1MjEwNSc6J2luY2FyZScsJ1xcdUQ4MzVcXHVERDIxJzonZGZyJywnXFx1MjE0Nic6J2RkJywnXFx1RDgzNVxcdURENTUnOidkb3BmJywnXFx1RDgzNVxcdURDQjknOidkc2NyJywnXFx1RDgzNVxcdURDOUYnOidEc2NyJywnXFx1RDgzNVxcdUREMDcnOidEZnInLCdcXHUyMTQ1JzonREQnLCdcXHVEODM1XFx1REQzQic6J0RvcGYnLCdcXHUwMTBGJzonZGNhcm9uJywnXFx1MDEwRSc6J0RjYXJvbicsJ1xcdTAxMTEnOidkc3Ryb2snLCdcXHUwMTEwJzonRHN0cm9rJywnXFx4RjAnOidldGgnLCdcXHhEMCc6J0VUSCcsJ1xcdTIxNDcnOidlZScsJ1xcdTIxMkYnOidlc2NyJywnXFx1RDgzNVxcdUREMjInOidlZnInLCdcXHVEODM1XFx1REQ1Nic6J2VvcGYnLCdcXHUyMTMwJzonRXNjcicsJ1xcdUQ4MzVcXHVERDA4JzonRWZyJywnXFx1RDgzNVxcdUREM0MnOidFb3BmJywnXFx4RTknOidlYWN1dGUnLCdcXHhDOSc6J0VhY3V0ZScsJ1xceEU4JzonZWdyYXZlJywnXFx4QzgnOidFZ3JhdmUnLCdcXHhFQSc6J2VjaXJjJywnXFx4Q0EnOidFY2lyYycsJ1xcdTAxMUInOidlY2Fyb24nLCdcXHUwMTFBJzonRWNhcm9uJywnXFx4RUInOidldW1sJywnXFx4Q0InOidFdW1sJywnXFx1MDExNyc6J2Vkb3QnLCdcXHUwMTE2JzonRWRvdCcsJ1xcdTAxMTknOidlb2dvbicsJ1xcdTAxMTgnOidFb2dvbicsJ1xcdTAxMTMnOidlbWFjcicsJ1xcdTAxMTInOidFbWFjcicsJ1xcdUQ4MzVcXHVERDIzJzonZmZyJywnXFx1RDgzNVxcdURENTcnOidmb3BmJywnXFx1RDgzNVxcdURDQkInOidmc2NyJywnXFx1RDgzNVxcdUREMDknOidGZnInLCdcXHVEODM1XFx1REQzRCc6J0ZvcGYnLCdcXHUyMTMxJzonRnNjcicsJ1xcdUZCMDAnOidmZmxpZycsJ1xcdUZCMDMnOidmZmlsaWcnLCdcXHVGQjA0JzonZmZsbGlnJywnXFx1RkIwMSc6J2ZpbGlnJywnZmonOidmamxpZycsJ1xcdUZCMDInOidmbGxpZycsJ1xcdTAxOTInOidmbm9mJywnXFx1MjEwQSc6J2dzY3InLCdcXHVEODM1XFx1REQ1OCc6J2dvcGYnLCdcXHVEODM1XFx1REQyNCc6J2dmcicsJ1xcdUQ4MzVcXHVEQ0EyJzonR3NjcicsJ1xcdUQ4MzVcXHVERDNFJzonR29wZicsJ1xcdUQ4MzVcXHVERDBBJzonR2ZyJywnXFx1MDFGNSc6J2dhY3V0ZScsJ1xcdTAxMUYnOidnYnJldmUnLCdcXHUwMTFFJzonR2JyZXZlJywnXFx1MDExRCc6J2djaXJjJywnXFx1MDExQyc6J0djaXJjJywnXFx1MDEyMSc6J2dkb3QnLCdcXHUwMTIwJzonR2RvdCcsJ1xcdTAxMjInOidHY2VkaWwnLCdcXHVEODM1XFx1REQyNSc6J2hmcicsJ1xcdTIxMEUnOidwbGFuY2toJywnXFx1RDgzNVxcdURDQkQnOidoc2NyJywnXFx1RDgzNVxcdURENTknOidob3BmJywnXFx1MjEwQic6J0hzY3InLCdcXHUyMTBDJzonSGZyJywnXFx1MjEwRCc6J0hvcGYnLCdcXHUwMTI1JzonaGNpcmMnLCdcXHUwMTI0JzonSGNpcmMnLCdcXHUyMTBGJzonaGJhcicsJ1xcdTAxMjcnOidoc3Ryb2snLCdcXHUwMTI2JzonSHN0cm9rJywnXFx1RDgzNVxcdURENUEnOidpb3BmJywnXFx1RDgzNVxcdUREMjYnOidpZnInLCdcXHVEODM1XFx1RENCRSc6J2lzY3InLCdcXHUyMTQ4JzonaWknLCdcXHVEODM1XFx1REQ0MCc6J0lvcGYnLCdcXHUyMTEwJzonSXNjcicsJ1xcdTIxMTEnOidJbScsJ1xceEVEJzonaWFjdXRlJywnXFx4Q0QnOidJYWN1dGUnLCdcXHhFQyc6J2lncmF2ZScsJ1xceENDJzonSWdyYXZlJywnXFx4RUUnOidpY2lyYycsJ1xceENFJzonSWNpcmMnLCdcXHhFRic6J2l1bWwnLCdcXHhDRic6J0l1bWwnLCdcXHUwMTI5JzonaXRpbGRlJywnXFx1MDEyOCc6J0l0aWxkZScsJ1xcdTAxMzAnOidJZG90JywnXFx1MDEyRic6J2lvZ29uJywnXFx1MDEyRSc6J0lvZ29uJywnXFx1MDEyQic6J2ltYWNyJywnXFx1MDEyQSc6J0ltYWNyJywnXFx1MDEzMyc6J2lqbGlnJywnXFx1MDEzMic6J0lKbGlnJywnXFx1MDEzMSc6J2ltYXRoJywnXFx1RDgzNVxcdURDQkYnOidqc2NyJywnXFx1RDgzNVxcdURENUInOidqb3BmJywnXFx1RDgzNVxcdUREMjcnOidqZnInLCdcXHVEODM1XFx1RENBNSc6J0pzY3InLCdcXHVEODM1XFx1REQwRCc6J0pmcicsJ1xcdUQ4MzVcXHVERDQxJzonSm9wZicsJ1xcdTAxMzUnOidqY2lyYycsJ1xcdTAxMzQnOidKY2lyYycsJ1xcdTAyMzcnOidqbWF0aCcsJ1xcdUQ4MzVcXHVERDVDJzona29wZicsJ1xcdUQ4MzVcXHVEQ0MwJzona3NjcicsJ1xcdUQ4MzVcXHVERDI4Jzona2ZyJywnXFx1RDgzNVxcdURDQTYnOidLc2NyJywnXFx1RDgzNVxcdURENDInOidLb3BmJywnXFx1RDgzNVxcdUREMEUnOidLZnInLCdcXHUwMTM3Jzona2NlZGlsJywnXFx1MDEzNic6J0tjZWRpbCcsJ1xcdUQ4MzVcXHVERDI5JzonbGZyJywnXFx1RDgzNVxcdURDQzEnOidsc2NyJywnXFx1MjExMyc6J2VsbCcsJ1xcdUQ4MzVcXHVERDVEJzonbG9wZicsJ1xcdTIxMTInOidMc2NyJywnXFx1RDgzNVxcdUREMEYnOidMZnInLCdcXHVEODM1XFx1REQ0Myc6J0xvcGYnLCdcXHUwMTNBJzonbGFjdXRlJywnXFx1MDEzOSc6J0xhY3V0ZScsJ1xcdTAxM0UnOidsY2Fyb24nLCdcXHUwMTNEJzonTGNhcm9uJywnXFx1MDEzQyc6J2xjZWRpbCcsJ1xcdTAxM0InOidMY2VkaWwnLCdcXHUwMTQyJzonbHN0cm9rJywnXFx1MDE0MSc6J0xzdHJvaycsJ1xcdTAxNDAnOidsbWlkb3QnLCdcXHUwMTNGJzonTG1pZG90JywnXFx1RDgzNVxcdUREMkEnOidtZnInLCdcXHVEODM1XFx1REQ1RSc6J21vcGYnLCdcXHVEODM1XFx1RENDMic6J21zY3InLCdcXHVEODM1XFx1REQxMCc6J01mcicsJ1xcdUQ4MzVcXHVERDQ0JzonTW9wZicsJ1xcdTIxMzMnOidNc2NyJywnXFx1RDgzNVxcdUREMkInOiduZnInLCdcXHVEODM1XFx1REQ1Ric6J25vcGYnLCdcXHVEODM1XFx1RENDMyc6J25zY3InLCdcXHUyMTE1JzonTm9wZicsJ1xcdUQ4MzVcXHVEQ0E5JzonTnNjcicsJ1xcdUQ4MzVcXHVERDExJzonTmZyJywnXFx1MDE0NCc6J25hY3V0ZScsJ1xcdTAxNDMnOidOYWN1dGUnLCdcXHUwMTQ4JzonbmNhcm9uJywnXFx1MDE0Nyc6J05jYXJvbicsJ1xceEYxJzonbnRpbGRlJywnXFx4RDEnOidOdGlsZGUnLCdcXHUwMTQ2JzonbmNlZGlsJywnXFx1MDE0NSc6J05jZWRpbCcsJ1xcdTIxMTYnOidudW1lcm8nLCdcXHUwMTRCJzonZW5nJywnXFx1MDE0QSc6J0VORycsJ1xcdUQ4MzVcXHVERDYwJzonb29wZicsJ1xcdUQ4MzVcXHVERDJDJzonb2ZyJywnXFx1MjEzNCc6J29zY3InLCdcXHVEODM1XFx1RENBQSc6J09zY3InLCdcXHVEODM1XFx1REQxMic6J09mcicsJ1xcdUQ4MzVcXHVERDQ2JzonT29wZicsJ1xceEJBJzonb3JkbScsJ1xceEYzJzonb2FjdXRlJywnXFx4RDMnOidPYWN1dGUnLCdcXHhGMic6J29ncmF2ZScsJ1xceEQyJzonT2dyYXZlJywnXFx4RjQnOidvY2lyYycsJ1xceEQ0JzonT2NpcmMnLCdcXHhGNic6J291bWwnLCdcXHhENic6J091bWwnLCdcXHUwMTUxJzonb2RibGFjJywnXFx1MDE1MCc6J09kYmxhYycsJ1xceEY1Jzonb3RpbGRlJywnXFx4RDUnOidPdGlsZGUnLCdcXHhGOCc6J29zbGFzaCcsJ1xceEQ4JzonT3NsYXNoJywnXFx1MDE0RCc6J29tYWNyJywnXFx1MDE0Qyc6J09tYWNyJywnXFx1MDE1Myc6J29lbGlnJywnXFx1MDE1Mic6J09FbGlnJywnXFx1RDgzNVxcdUREMkQnOidwZnInLCdcXHVEODM1XFx1RENDNSc6J3BzY3InLCdcXHVEODM1XFx1REQ2MSc6J3BvcGYnLCdcXHUyMTE5JzonUG9wZicsJ1xcdUQ4MzVcXHVERDEzJzonUGZyJywnXFx1RDgzNVxcdURDQUInOidQc2NyJywnXFx1RDgzNVxcdURENjInOidxb3BmJywnXFx1RDgzNVxcdUREMkUnOidxZnInLCdcXHVEODM1XFx1RENDNic6J3FzY3InLCdcXHVEODM1XFx1RENBQyc6J1FzY3InLCdcXHVEODM1XFx1REQxNCc6J1FmcicsJ1xcdTIxMUEnOidRb3BmJywnXFx1MDEzOCc6J2tncmVlbicsJ1xcdUQ4MzVcXHVERDJGJzoncmZyJywnXFx1RDgzNVxcdURENjMnOidyb3BmJywnXFx1RDgzNVxcdURDQzcnOidyc2NyJywnXFx1MjExQic6J1JzY3InLCdcXHUyMTFDJzonUmUnLCdcXHUyMTFEJzonUm9wZicsJ1xcdTAxNTUnOidyYWN1dGUnLCdcXHUwMTU0JzonUmFjdXRlJywnXFx1MDE1OSc6J3JjYXJvbicsJ1xcdTAxNTgnOidSY2Fyb24nLCdcXHUwMTU3JzoncmNlZGlsJywnXFx1MDE1Nic6J1JjZWRpbCcsJ1xcdUQ4MzVcXHVERDY0Jzonc29wZicsJ1xcdUQ4MzVcXHVEQ0M4Jzonc3NjcicsJ1xcdUQ4MzVcXHVERDMwJzonc2ZyJywnXFx1RDgzNVxcdURENEEnOidTb3BmJywnXFx1RDgzNVxcdUREMTYnOidTZnInLCdcXHVEODM1XFx1RENBRSc6J1NzY3InLCdcXHUyNEM4Jzonb1MnLCdcXHUwMTVCJzonc2FjdXRlJywnXFx1MDE1QSc6J1NhY3V0ZScsJ1xcdTAxNUQnOidzY2lyYycsJ1xcdTAxNUMnOidTY2lyYycsJ1xcdTAxNjEnOidzY2Fyb24nLCdcXHUwMTYwJzonU2Nhcm9uJywnXFx1MDE1Ric6J3NjZWRpbCcsJ1xcdTAxNUUnOidTY2VkaWwnLCdcXHhERic6J3N6bGlnJywnXFx1RDgzNVxcdUREMzEnOid0ZnInLCdcXHVEODM1XFx1RENDOSc6J3RzY3InLCdcXHVEODM1XFx1REQ2NSc6J3RvcGYnLCdcXHVEODM1XFx1RENBRic6J1RzY3InLCdcXHVEODM1XFx1REQxNyc6J1RmcicsJ1xcdUQ4MzVcXHVERDRCJzonVG9wZicsJ1xcdTAxNjUnOid0Y2Fyb24nLCdcXHUwMTY0JzonVGNhcm9uJywnXFx1MDE2Myc6J3RjZWRpbCcsJ1xcdTAxNjInOidUY2VkaWwnLCdcXHUyMTIyJzondHJhZGUnLCdcXHUwMTY3JzondHN0cm9rJywnXFx1MDE2Nic6J1RzdHJvaycsJ1xcdUQ4MzVcXHVEQ0NBJzondXNjcicsJ1xcdUQ4MzVcXHVERDY2JzondW9wZicsJ1xcdUQ4MzVcXHVERDMyJzondWZyJywnXFx1RDgzNVxcdURENEMnOidVb3BmJywnXFx1RDgzNVxcdUREMTgnOidVZnInLCdcXHVEODM1XFx1RENCMCc6J1VzY3InLCdcXHhGQSc6J3VhY3V0ZScsJ1xceERBJzonVWFjdXRlJywnXFx4RjknOid1Z3JhdmUnLCdcXHhEOSc6J1VncmF2ZScsJ1xcdTAxNkQnOid1YnJldmUnLCdcXHUwMTZDJzonVWJyZXZlJywnXFx4RkInOid1Y2lyYycsJ1xceERCJzonVWNpcmMnLCdcXHUwMTZGJzondXJpbmcnLCdcXHUwMTZFJzonVXJpbmcnLCdcXHhGQyc6J3V1bWwnLCdcXHhEQyc6J1V1bWwnLCdcXHUwMTcxJzondWRibGFjJywnXFx1MDE3MCc6J1VkYmxhYycsJ1xcdTAxNjknOid1dGlsZGUnLCdcXHUwMTY4JzonVXRpbGRlJywnXFx1MDE3Myc6J3VvZ29uJywnXFx1MDE3Mic6J1VvZ29uJywnXFx1MDE2Qic6J3VtYWNyJywnXFx1MDE2QSc6J1VtYWNyJywnXFx1RDgzNVxcdUREMzMnOid2ZnInLCdcXHVEODM1XFx1REQ2Nyc6J3ZvcGYnLCdcXHVEODM1XFx1RENDQic6J3ZzY3InLCdcXHVEODM1XFx1REQxOSc6J1ZmcicsJ1xcdUQ4MzVcXHVERDREJzonVm9wZicsJ1xcdUQ4MzVcXHVEQ0IxJzonVnNjcicsJ1xcdUQ4MzVcXHVERDY4Jzond29wZicsJ1xcdUQ4MzVcXHVEQ0NDJzond3NjcicsJ1xcdUQ4MzVcXHVERDM0Jzond2ZyJywnXFx1RDgzNVxcdURDQjInOidXc2NyJywnXFx1RDgzNVxcdURENEUnOidXb3BmJywnXFx1RDgzNVxcdUREMUEnOidXZnInLCdcXHUwMTc1Jzond2NpcmMnLCdcXHUwMTc0JzonV2NpcmMnLCdcXHVEODM1XFx1REQzNSc6J3hmcicsJ1xcdUQ4MzVcXHVEQ0NEJzoneHNjcicsJ1xcdUQ4MzVcXHVERDY5JzoneG9wZicsJ1xcdUQ4MzVcXHVERDRGJzonWG9wZicsJ1xcdUQ4MzVcXHVERDFCJzonWGZyJywnXFx1RDgzNVxcdURDQjMnOidYc2NyJywnXFx1RDgzNVxcdUREMzYnOid5ZnInLCdcXHVEODM1XFx1RENDRSc6J3lzY3InLCdcXHVEODM1XFx1REQ2QSc6J3lvcGYnLCdcXHVEODM1XFx1RENCNCc6J1lzY3InLCdcXHVEODM1XFx1REQxQyc6J1lmcicsJ1xcdUQ4MzVcXHVERDUwJzonWW9wZicsJ1xceEZEJzoneWFjdXRlJywnXFx4REQnOidZYWN1dGUnLCdcXHUwMTc3JzoneWNpcmMnLCdcXHUwMTc2JzonWWNpcmMnLCdcXHhGRic6J3l1bWwnLCdcXHUwMTc4JzonWXVtbCcsJ1xcdUQ4MzVcXHVEQ0NGJzonenNjcicsJ1xcdUQ4MzVcXHVERDM3JzonemZyJywnXFx1RDgzNVxcdURENkInOid6b3BmJywnXFx1MjEyOCc6J1pmcicsJ1xcdTIxMjQnOidab3BmJywnXFx1RDgzNVxcdURDQjUnOidac2NyJywnXFx1MDE3QSc6J3phY3V0ZScsJ1xcdTAxNzknOidaYWN1dGUnLCdcXHUwMTdFJzonemNhcm9uJywnXFx1MDE3RCc6J1pjYXJvbicsJ1xcdTAxN0MnOid6ZG90JywnXFx1MDE3Qic6J1pkb3QnLCdcXHUwMUI1JzonaW1wZWQnLCdcXHhGRSc6J3Rob3JuJywnXFx4REUnOidUSE9STicsJ1xcdTAxNDknOiduYXBvcycsJ1xcdTAzQjEnOidhbHBoYScsJ1xcdTAzOTEnOidBbHBoYScsJ1xcdTAzQjInOidiZXRhJywnXFx1MDM5Mic6J0JldGEnLCdcXHUwM0IzJzonZ2FtbWEnLCdcXHUwMzkzJzonR2FtbWEnLCdcXHUwM0I0JzonZGVsdGEnLCdcXHUwMzk0JzonRGVsdGEnLCdcXHUwM0I1JzonZXBzaScsJ1xcdTAzRjUnOidlcHNpdicsJ1xcdTAzOTUnOidFcHNpbG9uJywnXFx1MDNERCc6J2dhbW1hZCcsJ1xcdTAzREMnOidHYW1tYWQnLCdcXHUwM0I2JzonemV0YScsJ1xcdTAzOTYnOidaZXRhJywnXFx1MDNCNyc6J2V0YScsJ1xcdTAzOTcnOidFdGEnLCdcXHUwM0I4JzondGhldGEnLCdcXHUwM0QxJzondGhldGF2JywnXFx1MDM5OCc6J1RoZXRhJywnXFx1MDNCOSc6J2lvdGEnLCdcXHUwMzk5JzonSW90YScsJ1xcdTAzQkEnOidrYXBwYScsJ1xcdTAzRjAnOidrYXBwYXYnLCdcXHUwMzlBJzonS2FwcGEnLCdcXHUwM0JCJzonbGFtYmRhJywnXFx1MDM5Qic6J0xhbWJkYScsJ1xcdTAzQkMnOidtdScsJ1xceEI1JzonbWljcm8nLCdcXHUwMzlDJzonTXUnLCdcXHUwM0JEJzonbnUnLCdcXHUwMzlEJzonTnUnLCdcXHUwM0JFJzoneGknLCdcXHUwMzlFJzonWGknLCdcXHUwM0JGJzonb21pY3JvbicsJ1xcdTAzOUYnOidPbWljcm9uJywnXFx1MDNDMCc6J3BpJywnXFx1MDNENic6J3BpdicsJ1xcdTAzQTAnOidQaScsJ1xcdTAzQzEnOidyaG8nLCdcXHUwM0YxJzoncmhvdicsJ1xcdTAzQTEnOidSaG8nLCdcXHUwM0MzJzonc2lnbWEnLCdcXHUwM0EzJzonU2lnbWEnLCdcXHUwM0MyJzonc2lnbWFmJywnXFx1MDNDNCc6J3RhdScsJ1xcdTAzQTQnOidUYXUnLCdcXHUwM0M1JzondXBzaScsJ1xcdTAzQTUnOidVcHNpbG9uJywnXFx1MDNEMic6J1Vwc2knLCdcXHUwM0M2JzoncGhpJywnXFx1MDNENSc6J3BoaXYnLCdcXHUwM0E2JzonUGhpJywnXFx1MDNDNyc6J2NoaScsJ1xcdTAzQTcnOidDaGknLCdcXHUwM0M4JzoncHNpJywnXFx1MDNBOCc6J1BzaScsJ1xcdTAzQzknOidvbWVnYScsJ1xcdTAzQTknOidvaG0nLCdcXHUwNDMwJzonYWN5JywnXFx1MDQxMCc6J0FjeScsJ1xcdTA0MzEnOidiY3knLCdcXHUwNDExJzonQmN5JywnXFx1MDQzMic6J3ZjeScsJ1xcdTA0MTInOidWY3knLCdcXHUwNDMzJzonZ2N5JywnXFx1MDQxMyc6J0djeScsJ1xcdTA0NTMnOidnamN5JywnXFx1MDQwMyc6J0dKY3knLCdcXHUwNDM0JzonZGN5JywnXFx1MDQxNCc6J0RjeScsJ1xcdTA0NTInOidkamN5JywnXFx1MDQwMic6J0RKY3knLCdcXHUwNDM1JzonaWVjeScsJ1xcdTA0MTUnOidJRWN5JywnXFx1MDQ1MSc6J2lvY3knLCdcXHUwNDAxJzonSU9jeScsJ1xcdTA0NTQnOidqdWtjeScsJ1xcdTA0MDQnOidKdWtjeScsJ1xcdTA0MzYnOid6aGN5JywnXFx1MDQxNic6J1pIY3knLCdcXHUwNDM3JzonemN5JywnXFx1MDQxNyc6J1pjeScsJ1xcdTA0NTUnOidkc2N5JywnXFx1MDQwNSc6J0RTY3knLCdcXHUwNDM4JzonaWN5JywnXFx1MDQxOCc6J0ljeScsJ1xcdTA0NTYnOidpdWtjeScsJ1xcdTA0MDYnOidJdWtjeScsJ1xcdTA0NTcnOid5aWN5JywnXFx1MDQwNyc6J1lJY3knLCdcXHUwNDM5JzonamN5JywnXFx1MDQxOSc6J0pjeScsJ1xcdTA0NTgnOidqc2VyY3knLCdcXHUwNDA4JzonSnNlcmN5JywnXFx1MDQzQSc6J2tjeScsJ1xcdTA0MUEnOidLY3knLCdcXHUwNDVDJzona2pjeScsJ1xcdTA0MEMnOidLSmN5JywnXFx1MDQzQic6J2xjeScsJ1xcdTA0MUInOidMY3knLCdcXHUwNDU5JzonbGpjeScsJ1xcdTA0MDknOidMSmN5JywnXFx1MDQzQyc6J21jeScsJ1xcdTA0MUMnOidNY3knLCdcXHUwNDNEJzonbmN5JywnXFx1MDQxRCc6J05jeScsJ1xcdTA0NUEnOiduamN5JywnXFx1MDQwQSc6J05KY3knLCdcXHUwNDNFJzonb2N5JywnXFx1MDQxRSc6J09jeScsJ1xcdTA0M0YnOidwY3knLCdcXHUwNDFGJzonUGN5JywnXFx1MDQ0MCc6J3JjeScsJ1xcdTA0MjAnOidSY3knLCdcXHUwNDQxJzonc2N5JywnXFx1MDQyMSc6J1NjeScsJ1xcdTA0NDInOid0Y3knLCdcXHUwNDIyJzonVGN5JywnXFx1MDQ1Qic6J3RzaGN5JywnXFx1MDQwQic6J1RTSGN5JywnXFx1MDQ0Myc6J3VjeScsJ1xcdTA0MjMnOidVY3knLCdcXHUwNDVFJzondWJyY3knLCdcXHUwNDBFJzonVWJyY3knLCdcXHUwNDQ0JzonZmN5JywnXFx1MDQyNCc6J0ZjeScsJ1xcdTA0NDUnOidraGN5JywnXFx1MDQyNSc6J0tIY3knLCdcXHUwNDQ2JzondHNjeScsJ1xcdTA0MjYnOidUU2N5JywnXFx1MDQ0Nyc6J2NoY3knLCdcXHUwNDI3JzonQ0hjeScsJ1xcdTA0NUYnOidkemN5JywnXFx1MDQwRic6J0RaY3knLCdcXHUwNDQ4Jzonc2hjeScsJ1xcdTA0MjgnOidTSGN5JywnXFx1MDQ0OSc6J3NoY2hjeScsJ1xcdTA0MjknOidTSENIY3knLCdcXHUwNDRBJzonaGFyZGN5JywnXFx1MDQyQSc6J0hBUkRjeScsJ1xcdTA0NEInOid5Y3knLCdcXHUwNDJCJzonWWN5JywnXFx1MDQ0Qyc6J3NvZnRjeScsJ1xcdTA0MkMnOidTT0ZUY3knLCdcXHUwNDREJzonZWN5JywnXFx1MDQyRCc6J0VjeScsJ1xcdTA0NEUnOid5dWN5JywnXFx1MDQyRSc6J1lVY3knLCdcXHUwNDRGJzoneWFjeScsJ1xcdTA0MkYnOidZQWN5JywnXFx1MjEzNSc6J2FsZXBoJywnXFx1MjEzNic6J2JldGgnLCdcXHUyMTM3JzonZ2ltZWwnLCdcXHUyMTM4JzonZGFsZXRoJ307XG5cblx0dmFyIHJlZ2V4RXNjYXBlID0gL1tcIiYnPD5gXS9nO1xuXHR2YXIgZXNjYXBlTWFwID0ge1xuXHRcdCdcIic6ICcmcXVvdDsnLFxuXHRcdCcmJzogJyZhbXA7Jyxcblx0XHQnXFwnJzogJyYjeDI3OycsXG5cdFx0JzwnOiAnJmx0OycsXG5cdFx0Ly8gU2VlIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kczogaW4gSFRNTCwgdGhlXG5cdFx0Ly8gZm9sbG93aW5nIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgdW5sZXNzIGl04oCZcyBwYXJ0IG9mIGEgdGFnIG9yIGFuXG5cdFx0Ly8gdW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLiBXZeKAmXJlIG9ubHkgZXNjYXBpbmcgaXQgdG8gc3VwcG9ydCB0aG9zZVxuXHRcdC8vIHNpdHVhdGlvbnMsIGFuZCBmb3IgWE1MIHN1cHBvcnQuXG5cdFx0Jz4nOiAnJmd0OycsXG5cdFx0Ly8gSW4gSW50ZXJuZXQgRXhwbG9yZXIg4omkIDgsIHRoZSBiYWNrdGljayBjaGFyYWN0ZXIgY2FuIGJlIHVzZWRcblx0XHQvLyB0byBicmVhayBvdXQgb2YgKHVuKXF1b3RlZCBhdHRyaWJ1dGUgdmFsdWVzIG9yIEhUTUwgY29tbWVudHMuXG5cdFx0Ly8gU2VlIGh0dHA6Ly9odG1sNXNlYy5vcmcvIzEwMiwgaHR0cDovL2h0bWw1c2VjLm9yZy8jMTA4LCBhbmRcblx0XHQvLyBodHRwOi8vaHRtbDVzZWMub3JnLyMxMzMuXG5cdFx0J2AnOiAnJiN4NjA7J1xuXHR9O1xuXG5cdHZhciByZWdleEludmFsaWRFbnRpdHkgPSAvJiMoPzpbeFhdW15hLWZBLUYwLTldfFteMC05eFhdKS87XG5cdHZhciByZWdleEludmFsaWRSYXdDb2RlUG9pbnQgPSAvW1xcMC1cXHgwOFxceDBCXFx4MEUtXFx4MUZcXHg3Ri1cXHg5RlxcdUZERDAtXFx1RkRFRlxcdUZGRkVcXHVGRkZGXXxbXFx1RDgzRlxcdUQ4N0ZcXHVEOEJGXFx1RDhGRlxcdUQ5M0ZcXHVEOTdGXFx1RDlCRlxcdUQ5RkZcXHVEQTNGXFx1REE3RlxcdURBQkZcXHVEQUZGXFx1REIzRlxcdURCN0ZcXHVEQkJGXFx1REJGRl1bXFx1REZGRVxcdURGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdLztcblx0dmFyIHJlZ2V4RGVjb2RlID0gLyYoQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbHxEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3d8Q2xvY2t3aXNlQ29udG91ckludGVncmFsfE5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyfE5vdFNxdWFyZVN1cGVyc2V0RXF1YWx8RGlhY3JpdGljYWxEb3VibGVBY3V0ZXxOb3RSaWdodFRyaWFuZ2xlRXF1YWx8Tm90U3VjY2VlZHNTbGFudEVxdWFsfE5vdFByZWNlZGVzU2xhbnRFcXVhbHxDbG9zZUN1cmx5RG91YmxlUXVvdGV8TmVnYXRpdmVWZXJ5VGhpblNwYWNlfERvdWJsZUNvbnRvdXJJbnRlZ3JhbHxGaWxsZWRWZXJ5U21hbGxTcXVhcmV8Q2FwaXRhbERpZmZlcmVudGlhbER8T3BlbkN1cmx5RG91YmxlUXVvdGV8RW1wdHlWZXJ5U21hbGxTcXVhcmV8TmVzdGVkR3JlYXRlckdyZWF0ZXJ8RG91YmxlTG9uZ1JpZ2h0QXJyb3d8Tm90TGVmdFRyaWFuZ2xlRXF1YWx8Tm90R3JlYXRlclNsYW50RXF1YWx8UmV2ZXJzZVVwRXF1aWxpYnJpdW18RG91YmxlTGVmdFJpZ2h0QXJyb3d8Tm90U3F1YXJlU3Vic2V0RXF1YWx8Tm90RG91YmxlVmVydGljYWxCYXJ8UmlnaHRBcnJvd0xlZnRBcnJvd3xOb3RHcmVhdGVyRnVsbEVxdWFsfE5vdFJpZ2h0VHJpYW5nbGVCYXJ8U3F1YXJlU3VwZXJzZXRFcXVhbHxEb3duTGVmdFJpZ2h0VmVjdG9yfERvdWJsZUxvbmdMZWZ0QXJyb3d8bGVmdHJpZ2h0c3F1aWdhcnJvd3xMZWZ0QXJyb3dSaWdodEFycm93fE5lZ2F0aXZlTWVkaXVtU3BhY2V8YmxhY2t0cmlhbmdsZXJpZ2h0fFJpZ2h0RG93blZlY3RvckJhcnxQcmVjZWRlc1NsYW50RXF1YWx8UmlnaHREb3VibGVCcmFja2V0fFN1Y2NlZWRzU2xhbnRFcXVhbHxOb3RMZWZ0VHJpYW5nbGVCYXJ8UmlnaHRUcmlhbmdsZUVxdWFsfFNxdWFyZUludGVyc2VjdGlvbnxSaWdodERvd25UZWVWZWN0b3J8UmV2ZXJzZUVxdWlsaWJyaXVtfE5lZ2F0aXZlVGhpY2tTcGFjZXxsb25nbGVmdHJpZ2h0YXJyb3d8TG9uZ2xlZnRyaWdodGFycm93fExvbmdMZWZ0UmlnaHRBcnJvd3xEb3duUmlnaHRUZWVWZWN0b3J8RG93blJpZ2h0VmVjdG9yQmFyfEdyZWF0ZXJTbGFudEVxdWFsfFNxdWFyZVN1YnNldEVxdWFsfExlZnREb3duVmVjdG9yQmFyfExlZnREb3VibGVCcmFja2V0fFZlcnRpY2FsU2VwYXJhdG9yfHJpZ2h0bGVmdGhhcnBvb25zfE5vdEdyZWF0ZXJHcmVhdGVyfE5vdFNxdWFyZVN1cGVyc2V0fGJsYWNrdHJpYW5nbGVsZWZ0fGJsYWNrdHJpYW5nbGVkb3dufE5lZ2F0aXZlVGhpblNwYWNlfExlZnREb3duVGVlVmVjdG9yfE5vdExlc3NTbGFudEVxdWFsfGxlZnRyaWdodGhhcnBvb25zfERvdWJsZVVwRG93bkFycm93fERvdWJsZVZlcnRpY2FsQmFyfExlZnRUcmlhbmdsZUVxdWFsfEZpbGxlZFNtYWxsU3F1YXJlfHR3b2hlYWRyaWdodGFycm93fE5vdE5lc3RlZExlc3NMZXNzfERvd25MZWZ0VGVlVmVjdG9yfERvd25MZWZ0VmVjdG9yQmFyfFJpZ2h0QW5nbGVCcmFja2V0fE5vdFRpbGRlRnVsbEVxdWFsfE5vdFJldmVyc2VFbGVtZW50fFJpZ2h0VXBEb3duVmVjdG9yfERpYWNyaXRpY2FsVGlsZGV8Tm90U3VjY2VlZHNUaWxkZXxjaXJjbGVhcnJvd3JpZ2h0fE5vdFByZWNlZGVzRXF1YWx8cmlnaHRoYXJwb29uZG93bnxEb3VibGVSaWdodEFycm93fE5vdFN1Y2NlZWRzRXF1YWx8Tm9uQnJlYWtpbmdTcGFjZXxOb3RSaWdodFRyaWFuZ2xlfExlc3NFcXVhbEdyZWF0ZXJ8UmlnaHRVcFRlZVZlY3RvcnxMZWZ0QW5nbGVCcmFja2V0fEdyZWF0ZXJGdWxsRXF1YWx8RG93bkFycm93VXBBcnJvd3xSaWdodFVwVmVjdG9yQmFyfHR3b2hlYWRsZWZ0YXJyb3d8R3JlYXRlckVxdWFsTGVzc3xkb3duaGFycG9vbnJpZ2h0fFJpZ2h0VHJpYW5nbGVCYXJ8bnRyaWFuZ2xlcmlnaHRlcXxOb3RTdXBlcnNldEVxdWFsfExlZnRVcERvd25WZWN0b3J8RGlhY3JpdGljYWxBY3V0ZXxyaWdodHJpZ2h0YXJyb3dzfHZhcnRyaWFuZ2xlcmlnaHR8VXBBcnJvd0Rvd25BcnJvd3xEaWFjcml0aWNhbEdyYXZlfFVuZGVyUGFyZW50aGVzaXN8RW1wdHlTbWFsbFNxdWFyZXxMZWZ0VXBWZWN0b3JCYXJ8bGVmdHJpZ2h0YXJyb3dzfERvd25SaWdodFZlY3Rvcnxkb3duaGFycG9vbmxlZnR8dHJpYW5nbGVyaWdodGVxfFNob3J0UmlnaHRBcnJvd3xPdmVyUGFyZW50aGVzaXN8RG91YmxlTGVmdEFycm93fERvdWJsZURvd25BcnJvd3xOb3RTcXVhcmVTdWJzZXR8YmlndHJpYW5nbGVkb3dufG50cmlhbmdsZWxlZnRlcXxVcHBlclJpZ2h0QXJyb3d8Y3VydmVhcnJvd3JpZ2h0fHZhcnRyaWFuZ2xlbGVmdHxOb3RMZWZ0VHJpYW5nbGV8bmxlZnRyaWdodGFycm93fExvd2VyUmlnaHRBcnJvd3xOb3RIdW1wRG93bkh1bXB8Tm90R3JlYXRlclRpbGRlfHJpZ2h0dGhyZWV0aW1lc3xMZWZ0VXBUZWVWZWN0b3J8Tm90R3JlYXRlckVxdWFsfHN0cmFpZ2h0ZXBzaWxvbnxMZWZ0VHJpYW5nbGVCYXJ8cmlnaHRzcXVpZ2Fycm93fENvbnRvdXJJbnRlZ3JhbHxyaWdodGxlZnRhcnJvd3N8Q2xvc2VDdXJseVF1b3RlfFJpZ2h0RG93blZlY3RvcnxMZWZ0UmlnaHRWZWN0b3J8bkxlZnRyaWdodGFycm93fGxlZnRoYXJwb29uZG93bnxjaXJjbGVhcnJvd2xlZnR8U3F1YXJlU3VwZXJzZXR8T3BlbkN1cmx5UXVvdGV8aG9va3JpZ2h0YXJyb3d8SG9yaXpvbnRhbExpbmV8RGlhY3JpdGljYWxEb3R8Tm90TGVzc0dyZWF0ZXJ8bnRyaWFuZ2xlcmlnaHR8RG91YmxlUmlnaHRUZWV8SW52aXNpYmxlQ29tbWF8SW52aXNpYmxlVGltZXN8TG93ZXJMZWZ0QXJyb3d8RG93bkxlZnRWZWN0b3J8Tm90U3Vic2V0RXF1YWx8Y3VydmVhcnJvd2xlZnR8dHJpYW5nbGVsZWZ0ZXF8Tm90VmVydGljYWxCYXJ8VGlsZGVGdWxsRXF1YWx8ZG93bmRvd25hcnJvd3N8Tm90R3JlYXRlckxlc3N8UmlnaHRUZWVWZWN0b3J8WmVyb1dpZHRoU3BhY2V8bG9vcGFycm93cmlnaHR8TG9uZ1JpZ2h0QXJyb3d8ZG91YmxlYmFyd2VkZ2V8U2hvcnRMZWZ0QXJyb3d8U2hvcnREb3duQXJyb3d8UmlnaHRWZWN0b3JCYXJ8R3JlYXRlckdyZWF0ZXJ8UmV2ZXJzZUVsZW1lbnR8cmlnaHRoYXJwb29udXB8TGVzc1NsYW50RXF1YWx8bGVmdHRocmVldGltZXN8dXBoYXJwb29ucmlnaHR8cmlnaHRhcnJvd3RhaWx8TGVmdERvd25WZWN0b3J8TG9uZ3JpZ2h0YXJyb3d8TmVzdGVkTGVzc0xlc3N8VXBwZXJMZWZ0QXJyb3d8bnNob3J0cGFyYWxsZWx8bGVmdGxlZnRhcnJvd3N8bGVmdHJpZ2h0YXJyb3d8TGVmdHJpZ2h0YXJyb3d8TGVmdFJpZ2h0QXJyb3d8bG9uZ3JpZ2h0YXJyb3d8dXBoYXJwb29ubGVmdHxSaWdodEFycm93QmFyfEFwcGx5RnVuY3Rpb258TGVmdFRlZVZlY3RvcnxsZWZ0YXJyb3d0YWlsfE5vdEVxdWFsVGlsZGV8dmFyc3Vic2V0bmVxcXx2YXJzdXBzZXRuZXFxfFJpZ2h0VGVlQXJyb3d8U3VjY2VlZHNFcXVhbHxTdWNjZWVkc1RpbGRlfExlZnRWZWN0b3JCYXJ8U3VwZXJzZXRFcXVhbHxob29rbGVmdGFycm93fERpZmZlcmVudGlhbER8VmVydGljYWxUaWxkZXxWZXJ5VGhpblNwYWNlfGJsYWNrdHJpYW5nbGV8YmlndHJpYW5nbGV1cHxMZXNzRnVsbEVxdWFsfGRpdmlkZW9udGltZXN8bGVmdGhhcnBvb251cHxVcEVxdWlsaWJyaXVtfG50cmlhbmdsZWxlZnR8UmlnaHRUcmlhbmdsZXxtZWFzdXJlZGFuZ2xlfHNob3J0cGFyYWxsZWx8bG9uZ2xlZnRhcnJvd3xMb25nbGVmdGFycm93fExvbmdMZWZ0QXJyb3d8RG91YmxlTGVmdFRlZXxQb2luY2FyZXBsYW5lfFByZWNlZGVzRXF1YWx8dHJpYW5nbGVyaWdodHxEb3VibGVVcEFycm93fFJpZ2h0VXBWZWN0b3J8ZmFsbGluZ2RvdHNlcXxsb29wYXJyb3dsZWZ0fFByZWNlZGVzVGlsZGV8Tm90VGlsZGVFcXVhbHxOb3RUaWxkZVRpbGRlfHNtYWxsc2V0bWludXN8UHJvcG9ydGlvbmFsfHRyaWFuZ2xlbGVmdHx0cmlhbmdsZWRvd258VW5kZXJCcmFja2V0fE5vdEh1bXBFcXVhbHxleHBvbmVudGlhbGV8RXhwb25lbnRpYWxFfE5vdExlc3NUaWxkZXxIaWxiZXJ0U3BhY2V8UmlnaHRDZWlsaW5nfGJsYWNrbG96ZW5nZXx2YXJzdXBzZXRuZXF8SHVtcERvd25IdW1wfEdyZWF0ZXJFcXVhbHxWZXJ0aWNhbExpbmV8TGVmdFRlZUFycm93fE5vdExlc3NFcXVhbHxEb3duVGVlQXJyb3d8TGVmdFRyaWFuZ2xlfHZhcnN1YnNldG5lcXxJbnRlcnNlY3Rpb258Tm90Q29uZ3J1ZW50fERvd25BcnJvd0JhcnxMZWZ0VXBWZWN0b3J8TGVmdEFycm93QmFyfHJpc2luZ2RvdHNlcXxHcmVhdGVyVGlsZGV8Um91bmRJbXBsaWVzfFNxdWFyZVN1YnNldHxTaG9ydFVwQXJyb3d8Tm90U3VwZXJzZXR8cXVhdGVybmlvbnN8cHJlY25hcHByb3h8YmFja2Vwc2lsb258cHJlY2N1cmx5ZXF8T3ZlckJyYWNrZXR8YmxhY2tzcXVhcmV8TWVkaXVtU3BhY2V8VmVydGljYWxCYXJ8Y2lyY2xlZGNpcmN8Y2lyY2xlZGRhc2h8Q2lyY2xlTWludXN8Q2lyY2xlVGltZXN8TGVzc0dyZWF0ZXJ8Y3VybHllcXByZWN8Y3VybHllcXN1Y2N8ZGlhbW9uZHN1aXR8VXBEb3duQXJyb3d8VXBkb3duYXJyb3d8UnVsZURlbGF5ZWR8UnJpZ2h0YXJyb3d8dXBkb3duYXJyb3d8UmlnaHRWZWN0b3J8blJpZ2h0YXJyb3d8bnJpZ2h0YXJyb3d8ZXFzbGFudGxlc3N8TGVmdENlaWxpbmd8RXF1aWxpYnJpdW18U21hbGxDaXJjbGV8ZXhwZWN0YXRpb258Tm90U3VjY2VlZHN8dGhpY2thcHByb3h8R3JlYXRlckxlc3N8U3F1YXJlVW5pb258Tm90UHJlY2VkZXN8Tm90TGVzc0xlc3N8c3RyYWlnaHRwaGl8c3VjY25hcHByb3h8c3VjY2N1cmx5ZXF8U3Vic2V0RXF1YWx8c3FzdXBzZXRlcXxQcm9wb3J0aW9ufExhcGxhY2V0cmZ8SW1hZ2luYXJ5SXxzdXBzZXRuZXFxfE5vdEdyZWF0ZXJ8Z3RyZXFxbGVzc3xOb3RFbGVtZW50fFRoaWNrU3BhY2V8VGlsZGVFcXVhbHxUaWxkZVRpbGRlfEZvdXJpZXJ0cmZ8cm1vdXN0YWNoZXxFcXVhbFRpbGRlfGVxc2xhbnRndHJ8VW5kZXJCcmFjZXxMZWZ0VmVjdG9yfFVwQXJyb3dCYXJ8bkxlZnRhcnJvd3xuc3Vic2V0ZXFxfHN1YnNldG5lcXF8bnN1cHNldGVxcXxubGVmdGFycm93fHN1Y2NhcHByb3h8bGVzc2FwcHJveHxVcFRlZUFycm93fHVwdXBhcnJvd3N8Y3VybHl3ZWRnZXxsZXNzZXFxZ3RyfHZhcmVwc2lsb258dmFybm90aGluZ3xSaWdodEZsb29yfGNvbXBsZW1lbnR8Q2lyY2xlUGx1c3xzcXN1YnNldGVxfExsZWZ0YXJyb3d8Y2lyY2xlZGFzdHxSaWdodEFycm93fFJpZ2h0YXJyb3d8cmlnaHRhcnJvd3xsbW91c3RhY2hlfEJlcm5vdWxsaXN8cHJlY2FwcHJveHxtYXBzdG9sZWZ0fG1hcHN0b2Rvd258bG9uZ21hcHN0b3xkb3RzcXVhcmV8ZG93bmFycm93fERvdWJsZURvdHxuc3Vic2V0ZXF8c3Vwc2V0bmVxfGxlZnRhcnJvd3xuc3Vwc2V0ZXF8c3Vic2V0bmVxfFRoaW5TcGFjZXxuZ2Vxc2xhbnR8c3Vic2V0ZXFxfEh1bXBFcXVhbHxOb3RTdWJzZXR8dHJpYW5nbGVxfE5vdEN1cENhcHxsZXNzZXFndHJ8aGVhcnRzdWl0fFRyaXBsZURvdHxMZWZ0YXJyb3d8Q29wcm9kdWN0fENvbmdydWVudHx2YXJwcm9wdG98Y29tcGxleGVzfGd2ZXJ0bmVxcXxMZWZ0QXJyb3d8TGVzc1RpbGRlfHN1cHNldGVxcXxNaW51c1BsdXN8Q2lyY2xlRG90fG5sZXFzbGFudHxOb3RFeGlzdHN8Z3RyZXFsZXNzfG5wYXJhbGxlbHxVbmlvblBsdXN8TGVmdEZsb29yfGNoZWNrbWFya3xDZW50ZXJEb3R8Y2VudGVyZG90fE1lbGxpbnRyZnxndHJhcHByb3h8Ymlnb3RpbWVzfE92ZXJCcmFjZXxzcGFkZXN1aXR8dGhlcmVmb3JlfHBpdGNoZm9ya3xyYXRpb25hbHN8UGx1c01pbnVzfEJhY2tzbGFzaHxUaGVyZWZvcmV8RG93bkJyZXZlfGJhY2tzaW1lcXxiYWNrcHJpbWV8RG93bkFycm93fG5zaG9ydG1pZHxEb3duYXJyb3d8bHZlcnRuZXFxfGVxdnBhcnNsfGltYWdsaW5lfGltYWdwYXJ0fGluZmludGllfGludGVnZXJzfEludGVncmFsfGludGVyY2FsfExlc3NMZXNzfFVhcnJvY2lyfGludGxhcmhrfHNxc3Vwc2V0fGFuZ21zZGFmfHNxc3Vic2V0fGxsY29ybmVyfHZhcnRoZXRhfGN1cGJyY2FwfGxuYXBwcm94fFN1cGVyc2V0fFN1Y2hUaGF0fHN1Y2Nuc2ltfHN1Y2NuZXFxfGFuZ21zZGFnfGJpZ3VwbHVzfGN1cmx5dmVlfHRycGV6aXVtfFN1Y2NlZWRzfE5vdFRpbGRlfGJpZ3dlZGdlfGFuZ21zZGFofGFuZ3J0dmJkfHRyaW1pbnVzfGN3Y29uaW50fGZwYXJ0aW50fGxyY29ybmVyfHNtZXBhcnNsfHN1YnNldGVxfHVyY29ybmVyfGx1cmRzaGFyfGxhZW1wdHl2fEREb3RyYWhkfGFwcHJveGVxfGxkcnVzaGFyfGF3Y29uaW50fG1hcHN0b3VwfGJhY2tjb25nfHNob3J0bWlkfHRyaWFuZ2xlfGdlcXNsYW50fGdlc2RvdG9sfHRpbWVzYmFyfGNpcmNsZWRSfGNpcmNsZWRTfHNldG1pbnVzfG11bHRpbWFwfG5hdHVyYWxzfHNjcG9saW50fG5jb25nZG90fFJpZ2h0VGVlfGJveG1pbnVzfGduYXBwcm94fGJveHRpbWVzfGFuZHNsb3BlfHRoaWNrc2ltfGFuZ21zZGFhfHZhcnNpZ21hfGNpcmZuaW50fHJ0cmlsdHJpfGFuZ21zZGFifHJwcG9saW50fGFuZ21zZGFjfGJhcndlZGdlfGRyYmthcm93fGNsdWJzdWl0fHRoZXRhc3ltfGJzb2xoc3VifGNhcGJyY3VwfGR6aWdyYXJyfGRvdGVxZG90fERvdEVxdWFsfGRvdG1pbnVzfFVuZGVyQmFyfE5vdEVxdWFsfHJlYWxwYXJ0fG90aW1lc2FzfHVsY29ybmVyfGhrc2Vhcm93fGhrc3dhcm93fHBhcmFsbGVsfFBhcnRpYWxEfGVsaW50ZXJzfGVtcHR5c2V0fHBsdXNhY2lyfGJicmt0YnJrfGFuZ21zZGFkfHBvaW50aW50fGJpZ29wbHVzfGFuZ21zZGFlfFByZWNlZGVzfGJpZ3NxY3VwfHZhcmthcHBhfG5vdGluZG90fHN1cHNldGVxfHByZWNuZXFxfHByZWNuc2ltfHByb2ZhbGFyfHByb2ZsaW5lfHByb2ZzdXJmfGxlcXNsYW50fGxlc2RvdG9yfHJhZW1wdHl2fHN1YnBsdXN8bm90bml2Ynxub3RuaXZjfHN1YnJhcnJ8emlncmFycnx2emlnemFnfHN1Ym11bHR8c3ViZWRvdHxFbGVtZW50fGJldHdlZW58Y2lyc2NpcnxsYXJyYmZzfGxhcnJzaW18bG90aW1lc3xsYnJrc2xkfGxicmtzbHV8bG96ZW5nZXxsZHJkaGFyfGRia2Fyb3d8YmlnY2lyY3xlcHNpbG9ufHNpbXJhcnJ8c2ltcGx1c3xsdHF1ZXN0fEVwc2lsb258bHVydWhhcnxndHF1ZXN0fG1hbHRlc2V8bnBvbGludHxlcWNvbG9ufG5wcmVjZXF8Ymlnb2RvdHxkZGFnZ2VyfGd0cmxlc3N8Ym5lcXVpdnxoYXJyY2lyfGRkb3RzZXF8ZXF1aXZERHxiYWNrc2ltfGRlbXB0eXZ8bnNxc3ViZXxuc3FzdXBlfFVwc2lsb258bnN1YnNldHx1cHNpbG9ufG1pbnVzZHV8bnN1Y2NlcXxzd2Fycm93fG5zdXBzZXR8Y29sb25lcXxzZWFycm93fGJveHBsdXN8bmFwcHJveHxuYXR1cmFsfGFzeW1wZXF8YWxlZnN5bXxjb25nZG90fG5lYXJyb3d8Ymlnc3RhcnxkaWFtb25kfHN1cHBsdXN8dHJpdGltZXxMZWZ0VGVlfG52aW5maW58dHJpcGx1c3xOZXdMaW5lfG52bHRyaWV8bnZydHJpZXxud2Fycm93fG5leGlzdHN8RGlhbW9uZHxydWx1aGFyfEltcGxpZXN8c3VwbXVsdHxhbmd6YXJyfHN1cGxhcnJ8c3VwaHN1YnxxdWVzdGVxfGJlY2F1c2V8ZGlnYW1tYXxCZWNhdXNlfG9sY3Jvc3N8YmVtcHR5dnxvbWljcm9ufE9taWNyb258cm90aW1lc3xOb0JyZWFrfGludHByb2R8YW5ncnR2YnxvcmRlcm9mfHV3YW5nbGV8c3VwaHNvbHxsZXNkb3RvfG9yc2xvcGV8RG93blRlZXxyZWFsaW5lfGN1ZGFycmx8cmRsZGhhcnxPdmVyQmFyfHN1cGVkb3R8bGVzc2RvdHxzdXBkc3VifHRvcGZvcmt8c3VjY3NpbXxyYnJrc2x1fHJicmtzbGR8cGVydGVua3xjdWRhcnJyfGlzaW5kb3R8cGxhbmNraHxsZXNzZ3RyfHBsdXNjaXJ8Z2VzZG90b3xwbHVzc2ltfHBsdXN0d298bGVzc3NpbXxjdWxhcnJwfHJhcnJzaW18Q2F5bGV5c3xub3RpbnZhfG5vdGludmJ8bm90aW52Y3xVcEFycm93fFVwYXJyb3d8dXBhcnJvd3xOb3RMZXNzfGR3YW5nbGV8cHJlY3NpbXxQcm9kdWN0fGN1cmFycm18Q2NvbmludHxkb3RwbHVzfHJhcnJiZnN8Y2N1cHNzbXxDZWRpbGxhfGNlbXB0eXZ8bm90bml2YXxxdWF0aW50fGZyYWMzNXxmcmFjMzh8ZnJhYzQ1fGZyYWM1NnxmcmFjNTh8ZnJhYzc4fHRyaWRvdHx4b3BsdXN8Z2FjdXRlfGdhbW1hZHxHYW1tYWR8bGZpc2h0fGxmbG9vcnxiaWdjdXB8c3FzdXBlfGdicmV2ZXxHYnJldmV8bGhhcnVsfHNxc3ViZXxzcWN1cHN8R2NlZGlsfGFwYWNpcnxsbGhhcmR8bG1pZG90fExtaWRvdHxsbW91c3R8YW5kYW5kfHNxY2Fwc3xhcHByb3h8QWJyZXZlfHNwYWRlc3xjaXJjZXF8dHByaW1lfGRpdmlkZXx0b3BjaXJ8QXNzaWdufHRvcGJvdHxnZXNkb3R8ZGl2b254fHh1cGx1c3x0aW1lc2R8Z2VzbGVzfGF0aWxkZXxzb2xiYXJ8U09GVGN5fGxvcGx1c3x0aW1lc2J8bG93YXN0fGxvd2JhcnxkbGNvcm58ZGxjcm9wfHNvZnRjeXxkb2xsYXJ8bHBhcmx0fHRoa3NpbXxscmhhcmR8QXRpbGRlfGxzYXF1b3xzbWFzaHB8YmlndmVlfHRoaW5zcHx3cmVhdGh8Ymthcm93fGxzcXVvcnxsc3Ryb2t8THN0cm9rfGx0aHJlZXxsdGltZXN8bHRsYXJyfERvdERvdHxzaW1kb3R8bHRyUGFyfHdlaWVycHx4c3FjdXB8YW5nbXNkfHNpZ21hdnxzaWdtYWZ8emVldHJmfFpjYXJvbnx6Y2Fyb258bWFwc3RvfHZzdXBuZXx0aGV0YXZ8Y2lybWlkfG1hcmtlcnxtY29tbWF8WmFjdXRlfHZzdWJuRXx0aGVyZTR8Z3RsUGFyfHZzdWJuZXxib3R0b218Z3RyYXJyfFNIQ0hjeXxzaGNoY3l8bWlkYXN0fG1pZGNpcnxtaWRkb3R8bWludXNifG1pbnVzZHxndHJkb3R8Ym93dGllfHNmcm93bnxtbnBsdXN8bW9kZWxzfGNvbG9uZXxzZXN3YXJ8Q29sb25lfG1zdHBvc3xzZWFyaGt8Z3Ryc2ltfG5hY3V0ZXxOYWN1dGV8Ym94Ym94fHRlbHJlY3xoYWlyc3B8VGNlZGlsfG5idW1wZXxzY25zaW18bmNhcm9ufE5jYXJvbnxuY2VkaWx8TmNlZGlsfGhhbWlsdHxTY2VkaWx8bmVhcmhrfGhhcmRjeXxIQVJEY3l8dGNlZGlsfFRjYXJvbnxjb21tYXR8bmVxdWl2fG5lc2Vhcnx0Y2Fyb258dGFyZ2V0fGhlYXJ0c3xuZXhpc3R8dmFycmhvfHNjZWRpbHxTY2Fyb258c2Nhcm9ufGhlbGxpcHxTYWN1dGV8c2FjdXRlfGhlcmNvbnxzd253YXJ8Y29tcGZufHJ0aW1lc3xydGhyZWV8cnNxdW9yfHJzYXF1b3x6YWN1dGV8d2VkZ2VxfGhvbXRodHxiYXJ2ZWV8YmFyd2VkfEJhcndlZHxycGFyZ3R8aG9yYmFyfGNvbmludHxzd2FyaGt8cm9wbHVzfG5sdHJpZXxoc2xhc2h8aHN0cm9rfEhzdHJva3xybW91c3R8Q29uaW50fGJwcmltZXxoeWJ1bGx8aHlwaGVufGlhY3V0ZXxJYWN1dGV8c3Vwc3VwfHN1cHN1YnxzdXBzaW18dmFycGhpfGNvcHJvZHxicnZiYXJ8YWdyYXZlfFN1cHNldHxzdXBzZXR8aWdyYXZlfElncmF2ZXxub3RpbkV8QWdyYXZlfGlpaWludHxpaW5maW58Y29weXNyfHdlZGJhcnxWZXJiYXJ8dmFuZ3J0fGJlY2F1c3xpbmNhcmV8dmVyYmFyfGlub2RvdHxidWxsZXR8ZHJjb3JufGludGNhbHxkcmNyb3B8Y3VsYXJyfHZlbGxpcHxVdGlsZGV8YnVtcGVxfGN1cGNhcHxkc3Ryb2t8RHN0cm9rfEN1cENhcHxjdXBjdXB8Y3VwZG90fGVhY3V0ZXxFYWN1dGV8c3VwZG90fGlxdWVzdHxlYXN0ZXJ8ZWNhcm9ufEVjYXJvbnxlY29sb258aXNpbnN2fHV0aWxkZXxpdGlsZGV8SXRpbGRlfGN1cmFycnxzdWNjZXF8QnVtcGVxfGNhY3V0ZXx1bGNyb3B8bnBhcnNsfENhY3V0ZXxucHJjdWV8ZWdyYXZlfEVncmF2ZXxucmFycmN8bnJhcnJ3fHN1YnN1cHxzdWJzdWJ8bnJ0cmllfGpzZXJjeXxuc2NjdWV8SnNlcmN5fGthcHBhdnxrY2VkaWx8S2NlZGlsfHN1YnNpbXx1bGNvcm58bnNpbWVxfGVnc2RvdHx2ZWViYXJ8a2dyZWVufGNhcGFuZHxlbHNkb3R8U3Vic2V0fHN1YnNldHxjdXJyZW58YWFjdXRlfGxhY3V0ZXxMYWN1dGV8ZW1wdHl2fG50aWxkZXxOdGlsZGV8bGFncmFufGxhbWJkYXxMYW1iZGF8Y2FwY2FwfFVncmF2ZXxsYW5nbGV8c3ViZG90fGVtc3AxM3xudW1lcm98ZW1zcDE0fG52ZGFzaHxudkRhc2h8blZkYXNofG5WRGFzaHx1Z3JhdmV8dWZpc2h0fG52SGFycnxsYXJyZnN8bnZsQXJyfGxhcnJoa3xsYXJybHB8bGFycnBsfG52ckFycnxVZGJsYWN8bndhcmhrfGxhcnJ0bHxud25lYXJ8b2FjdXRlfE9hY3V0ZXxsYXRhaWx8bEF0YWlsfHNzdGFyZnxsYnJhY2V8b2RibGFjfE9kYmxhY3xsYnJhY2t8dWRibGFjfG9kc29sZHxlcGFyc2x8bGNhcm9ufExjYXJvbnxvZ3JhdmV8T2dyYXZlfGxjZWRpbHxMY2VkaWx8QWFjdXRlfHNzbWlsZXxzc2V0bW58c3F1YXJmfGxkcXVvcnxjYXBjdXB8b21pbnVzfGN5bGN0eXxyaGFydWx8ZXFjaXJjfGRhZ2dlcnxyZmxvb3J8cmZpc2h0fERhZ2dlcnxkYWxldGh8ZXF1YWxzfG9yaWdvZnxjYXBkb3R8ZXF1ZXN0fGRjYXJvbnxEY2Fyb258cmRxdW9yfG9zbGFzaHxPc2xhc2h8b3RpbGRlfE90aWxkZXxvdGltZXN8T3RpbWVzfHVyY3JvcHxVYnJldmV8dWJyZXZlfFlhY3V0ZXxVYWN1dGV8dWFjdXRlfFJjZWRpbHxyY2VkaWx8dXJjb3JufHBhcnNpbXxSY2Fyb258VmRhc2hsfHJjYXJvbnxUc3Ryb2t8cGVyY250fHBlcmlvZHxwZXJtaWx8RXhpc3RzfHlhY3V0ZXxyYnJhY2t8cmJyYWNlfHBobW1hdHxjY2Fyb258Q2Nhcm9ufHBsYW5ja3xjY2VkaWx8cGxhbmt2fHRzdHJva3xmZW1hbGV8cGx1c2RvfHBsdXNkdXxmZmlsaWd8cGx1c21ufGZmbGxpZ3xDY2VkaWx8ckF0YWlsfGRmaXNodHxiZXJub3V8cmF0YWlsfFJhcnJ0bHxyYXJydGx8YW5nc3BofHJhcnJwbHxyYXJybHB8cmFycmhrfHh3ZWRnZXx4b3RpbWV8Zm9yYWxsfEZvckFsbHxWdmRhc2h8dnN1cG5FfHByZWNlcXxiaWdjYXB8ZnJhYzEyfGZyYWMxM3xmcmFjMTR8cHJpbWVzfHJhcnJmc3xwcm5zaW18ZnJhYzE1fFNxdWFyZXxmcmFjMTZ8c3F1YXJlfGxlc2RvdHxmcmFjMTh8ZnJhYzIzfHByb3B0b3xwcnVyZWx8cmFycmFwfHJhbmdsZXxwdW5jc3B8ZnJhYzI1fFJhY3V0ZXxxcHJpbWV8cmFjdXRlfGxlc2dlc3xmcmFjMzR8YWJyZXZlfEFFbGlnfGVxc2ltfHV0ZG90fHNldG1ufHVydHJpfEVxdWFsfFVyaW5nfHNlQXJyfHVyaW5nfHNlYXJyfGRhc2h2fERhc2h2fG11bWFwfG5hYmxhfGlvZ29ufElvZ29ufHNkb3RlfHNkb3RifHNjc2ltfG5hcGlkfG5hcG9zfGVxdWl2fG5hdHVyfEFjaXJjfGRibGFjfGVyYXJyfG5idW1wfGlwcm9kfGVyRG90fHVjaXJjfGF3aW50fGVzZG90fGFuZ3J0fG5jb25nfGlzaW5FfHNjbmFwfFNjaXJjfHNjaXJjfG5kYXNofGlzaW5zfFVicmN5fG5lYXJyfG5lQXJyfGlzaW52fG5lZG90fHVicmN5fGFjdXRlfFljaXJjfGl1a2N5fEl1a2N5fHh1dHJpfG5lc2ltfGNhcmV0fGpjaXJjfEpjaXJjfGNhcm9ufHR3aXh0fGRkYXJyfHNjY3VlfGV4aXN0fGptYXRofHNicXVvfG5nZXFxfGFuZ3N0fGNjYXBzfGxjZWlsfG5nc2ltfFVwVGVlfGRlbHRhfERlbHRhfHJ0cmlmfG5oYXJyfG5oQXJyfG5ocGFyfHJ0cmllfGp1a2N5fEp1a2N5fGthcHBhfHJzcXVvfEthcHBhfG5sYXJyfG5sQXJyfFRTSGN5fHJyYXJyfGFvZ29ufEFvZ29ufGZmbGlnfHhyYXJyfHRzaGN5fGNjaXJjfG5sZXFxfGZpbGlnfHVwc2lofG5sZXNzfGRoYXJsfG5sc2ltfGZqbGlnfHJvcGFyfG5sdHJpfGRoYXJyfHJvYnJrfHJvYXJyfGZsbGlnfGZsdG5zfHJvYW5nfHJubWlkfHN1Ym5FfHN1Ym5lfGxBYXJyfHRyaXNifENjaXJjfGFjaXJjfGNjdXBzfGJsYW5rfFZEYXNofGZvcmt2fFZkYXNofGxhbmdkfGNlZGlsfGJsazEyfGJsazE0fGxhcXVvfHN0cm5zfGRpYW1zfG5vdGlufHZEYXNofGxhcnJifGJsazM0fGJsb2NrfGRpc2lufHVwbHVzfHZkYXNofHZCYXJ2fGFlbGlnfHN0YXJmfFdlZGdlfGNoZWNrfHhyQXJyfGxhdGVzfGxiYXJyfGxCYXJyfG5vdG5pfGxiYnJrfGJjb25nfGZyYXNsfGxicmtlfGZyb3dufHZydHJpfHZwcm9wfHZuc3VwfGdhbW1hfEdhbW1hfHdlZGdlfHhvZG90fGJkcXVvfHNyYXJyfGRvdGVxfGxkcXVvfGJveGRsfGJveGRMfGdjaXJjfEdjaXJjfGJveERsfGJveERMfGJveGRyfGJveGRSfGJveERyfFRSQURFfHRyYWRlfHJsaGFyfGJveERSfHZuc3VifG5wYXJ0fHZsdHJpfHJsYXJyfGJveGhkfGJveGhEfG5wcmVjfGdlc2NjfG5yYXJyfG5yQXJyfGJveEhkfGJveEhEfGJveGh1fGJveGhVfG5ydHJpfGJveEh1fGNsdWJzfGJveEhVfHRpbWVzfGNvbG9ufENvbG9ufGdpbWVsfHhsQXJyfFRpbGRlfG5zaW1lfHRpbGRlfG5zbWlkfG5zcGFyfFRIT1JOfHRob3JufHhsYXJyfG5zdWJlfG5zdWJFfHRoa2FwfHhoQXJyfGNvbW1hfG5zdWNjfGJveHVsfGJveHVMfG5zdXBlfG5zdXBFfGduZXFxfGduc2ltfGJveFVsfGJveFVMfGdyYXZlfGJveHVyfGJveHVSfGJveFVyfGJveFVSfGxlc2NjfGFuZ2xlfGJlcHNpfGJveHZofHZhcnBpfGJveHZIfG51bXNwfFRoZXRhfGdzaW1lfGdzaW1sfHRoZXRhfGJveFZofGJveFZIfGJveHZsfGd0Y2lyfGd0ZG90fGJveHZMfGJveFZsfGJveFZMfGNyYXJyfGNyb3NzfENyb3NzfG52c2ltfGJveHZyfG53YXJyfG53QXJyfHNxc3VwfGR0ZG90fFVvZ29ufGxoYXJkfGxoYXJ1fGR0cmlmfG9jaXJjfE9jaXJjfGxoYmxrfGR1YXJyfG9kYXNofHNxc3VifEhhY2VrfHNxY3VwfGxsYXJyfGR1aGFyfG9lbGlnfE9FbGlnfG9mY2lyfGJveHZSfHVvZ29ufGxsdHJpfGJveFZyfGNzdWJlfHV1YXJyfG9oYmFyfGNzdXBlfGN0ZG90fG9sYXJyfG9sY2lyfGhhcnJ3fG9saW5lfHNxY2FwfG9tYWNyfE9tYWNyfG9tZWdhfE9tZWdhfGJveFZSfGFsZXBofGxuZXFxfGxuc2ltfGxvYW5nfGxvYXJyfHJoYXJ1fGxvYnJrfGhjaXJjfG9wZXJwfG9wbHVzfHJoYXJkfEhjaXJjfG9yYXJyfFVuaW9ufG9yZGVyfGVjaXJjfEVjaXJjfGN1ZXByfHN6bGlnfGN1ZXNjfGJyZXZlfHJlYWxzfGVERG90fEJyZXZlfGhvYXJyfGxvcGFyfHV0cmlmfHJkcXVvfFVtYWNyfHVtYWNyfGVmRG90fHN3QXJyfHVsdHJpfGFscGhhfHJjZWlsfG92YmFyfHN3YXJyfFdjaXJjfHdjaXJjfHNtdGVzfHNtaWxlfGJzZW1pfGxyYXJyfGFyaW5nfHBhcnNsfGxyaGFyfGJzaW1lfHVoYmxrfGxydHJpfGN1cG9yfEFyaW5nfHVoYXJyfHVoYXJsfHNsYXJyfHJicmtlfGJzb2xifGxzaW1lfHJiYnJrfFJCYXJyfGxzaW1nfHBob25lfHJCYXJyfHJiYXJyfGljaXJjfGxzcXVvfEljaXJjfGVtYWNyfEVtYWNyfHJhdGlvfHNpbW5lfHBsdXNifHNpbWxFfHNpbWdFfHNpbWVxfHBsdXNlfGx0Y2lyfGx0ZG90fGVtcHR5fHhoYXJyfHhkdHJpfGlleGNsfEFscGhhfGx0cmllfHJhcnJ3fHBvdW5kfGx0cmlmfHhjaXJjfGJ1bXBlfHByY3VlfGJ1bXBFfGFzeW1wfGFtYWNyfGN1dmVlfFNpZ21hfHNpZ21hfGlpaW50fHVkaGFyfGlpb3RhfGlqbGlnfElKbGlnfHN1cG5FfGltYWNyfEltYWNyfHByaW1lfFByaW1lfGltYWdlfHBybmFwfGVvZ29ufEVvZ29ufHJhcnJjfG1kYXNofG1ERG90fGN1d2VkfGltYXRofHN1cG5lfGltcGVkfEFtYWNyfHVkYXJyfHByc2ltfG1pY3JvfHJhcnJifGN3aW50fHJhcXVvfGluZmlufGVwbHVzfHJhbmdlfHJhbmdkfFVjaXJjfHJhZGljfG1pbnVzfGFtYWxnfHZlZWVxfHJBYXJyfGVwc2l2fHljaXJjfHF1ZXN0fHNoYXJwfHF1b3R8enduanxRc2NyfHJhY2V8cXNjcnxRb3BmfHFvcGZ8cWludHxyYW5nfFJhbmd8WnNjcnx6c2NyfFpvcGZ8em9wZnxyYXJyfHJBcnJ8UmFycnxQc2NyfHBzY3J8cHJvcHxwcm9kfHBybkV8cHJlY3xaSGN5fHpoY3l8cHJhcHxaZXRhfHpldGF8UG9wZnxwb3BmfFpkb3R8cGx1c3x6ZG90fFl1bWx8eXVtbHxwaGl2fFlVY3l8eXVjeXxZc2NyfHlzY3J8cGVycHxZb3BmfHlvcGZ8cGFydHxwYXJhfFlJY3l8T3VtbHxyY3VifHlpY3l8WUFjeXxyZGNhfG91bWx8b3NvbHxPc2NyfHJkc2h8eWFjeXxyZWFsfG9zY3J8eHZlZXxhbmRkfHJlY3R8YW5kdnxYc2NyfG9yb3J8b3JkbXxvcmRmfHhzY3J8YW5nZXxhb3BmfEFvcGZ8ckhhcnxYb3BmfG9wYXJ8T29wZnx4b3BmfHhuaXN8cmhvdnxvb3BmfG9taWR8eG1hcHxvaW50fGFwaWR8YXBvc3xvZ29ufGFzY3J8QXNjcnxvZG90fG9kaXZ8eGN1cHx4Y2FwfG9jaXJ8b2FzdHxudmx0fG52bGV8bnZndHxudmdlfG52YXB8V3Njcnx3c2NyfGF1bWx8bnRsZ3xudGdsfG5zdXB8bnN1Ynxuc2ltfE5zY3J8bnNjcnxuc2NlfFdvcGZ8cmluZ3xucHJlfHdvcGZ8bnBhcnxBdW1sfEJhcnZ8YmJya3xOb3BmfG5vcGZ8bm1pZHxuTHR2fGJldGF8cm9wZnxSb3BmfEJldGF8YmV0aHxubGVzfHJwYXJ8bmxlcXxibm90fGJOb3R8bmxkcnxOSmN5fHJzY3J8UnNjcnxWc2NyfHZzY3J8cnNxYnxuamN5fGJvcGZ8bmlzZHxCb3BmfHJ0cml8Vm9wZnxuR3R2fG5ndHJ8dm9wZnxib3hofGJveEh8Ym94dnxuZ2VzfG5nZXF8Ym94Vnxic2NyfHNjYXB8QnNjcnxic2ltfFZlcnR8dmVydHxic29sfGJ1bGx8YnVtcHxjYXBzfGNkb3R8bmN1cHxzY25FfG5jYXB8bmJzcHxuYXBFfENkb3R8Y2VudHxzZG90fFZiYXJ8bmFuZ3x2QmFyfGNoY3l8TXNjcnxtc2NyfHNlY3R8c2VtaXxDSGN5fE1vcGZ8bW9wZnxzZXh0fGNpcmN8Y2lyZXxtbGRyfG1sY3B8Y2lyRXxjb21wfHNoY3l8U0hjeXx2QXJyfHZhcnJ8Y29uZ3xjb3BmfENvcGZ8Y29weXxDT1BZfG1hbHR8bWFsZXxtYWNyfGx2bkV8Y3NjcnxsdHJpfHNpbWV8bHRjY3xzaW1nfENzY3J8c2ltbHxjc3VifFV1bWx8bHNxYnxsc2ltfHV1bWx8Y3N1cHxMc2NyfGxzY3J8dXRyaXxzbWlkfGxwYXJ8Y3Vwc3xzbXRlfGxvemZ8ZGFycnxMb3BmfFVzY3J8c29sYnxsb3BmfHNvcGZ8U29wZnxsbmVxfHVzY3J8c3BhcnxkQXJyfGxuYXB8RGFycnxkYXNofFNxcnR8TEpjeXxsamN5fGxIYXJ8ZEhhcnxVcHNpfHVwc2l8ZGlhbXxsZXNnfGRqY3l8REpjeXxsZXFxfGRvcGZ8RG9wZnxkc2NyfERzY3J8ZHNjeXxsZHNofGxkY2F8c3F1ZnxEU2N5fHNzY3J8U3Njcnxkc29sfGxjdWJ8bGF0ZXxzdGFyfFN0YXJ8VW9wZnxMYXJyfGxBcnJ8bGFycnx1b3BmfGR0cml8ZHpjeXxzdWJlfHN1YkV8TGFuZ3xsYW5nfEtzY3J8a3NjcnxLb3BmfGtvcGZ8S0pjeXxramN5fEtIY3l8a2hjeXxEWmN5fGVjaXJ8ZWRvdHxlRG90fEpzY3J8anNjcnxzdWNjfEpvcGZ8am9wZnxFZG90fHVIYXJ8ZW1zcHxlbnNwfEl1bWx8aXVtbHxlb3BmfGlzaW58SXNjcnxpc2NyfEVvcGZ8ZXBhcnxzdW5nfGVwc2l8ZXNjcnxzdXAxfHN1cDJ8c3VwM3xJb3RhfGlvdGF8c3VwZXxzdXBFfElvcGZ8aW9wZnxJT2N5fGlvY3l8RXNjcnxlc2ltfEVzaW18aW1vZnxVYXJyfFFVT1R8dUFycnx1YXJyfGV1bWx8SUVjeXxpZWN5fElkb3R8RXVtbHxldXJvfGV4Y2x8SHNjcnxoc2NyfEhvcGZ8aG9wZnxUU2N5fHRzY3l8VHNjcnxoYmFyfHRzY3J8ZmxhdHx0YnJrfGZub2Z8aEFycnxoYXJyfGhhbGZ8Zm9wZnxGb3BmfHRkb3R8Z3ZuRXxmb3JrfHRyaWV8Z3RjY3xmc2NyfEZzY3J8Z2RvdHxnc2ltfEdzY3J8Z3NjcnxHb3BmfGdvcGZ8Z25lcXxHZG90fHRvc2F8Z25hcHxUb3BmfHRvcGZ8Z2VxcXx0b2VhfEdKY3l8Z2pjeXx0aW50fGdlc2x8bWlkfFNmcnxnZ2d8dG9wfGdlc3xnbGF8Z2xFfGdsanxnZXF8Z25lfGdFbHxnZWx8Z25FfEdjeXxnY3l8Z2FwfFRmcnx0ZnJ8VGN5fHRjeXxIYXR8VGF1fEZmcnx0YXV8VGFifGhmcnxIZnJ8ZmZyfEZjeXxmY3l8aWN5fEljeXxpZmZ8RVRIfGV0aHxpZnJ8SWZyfEV0YXxldGF8aW50fEludHxTdXB8c3VwfHVjeXxVY3l8U3VtfHN1bXxqY3l8RU5HfHVmcnxVZnJ8ZW5nfEpjeXxqZnJ8ZWxzfGVsbHxlZ3N8RWZyfGVmcnxKZnJ8dW1sfGtjeXxLY3l8RWN5fGVjeXxrZnJ8S2ZyfGxhcHxTdWJ8c3VifGxhdHxsY3l8TGN5fGxlZ3xEb3R8ZG90fGxFZ3xsZXF8bGVzfHNxdXxkaXZ8ZGllfGxmcnxMZnJ8bGdFfERmcnxkZnJ8RGVsfGRlZ3xEY3l8ZGN5fGxuZXxsbkV8c29sfGxvenxzbXR8Q3VwfGxybXxjdXB8bHNofExzaHxzaW18c2h5fG1hcHxNYXB8bWN5fE1jeXxtZnJ8TWZyfG1ob3xnZnJ8R2ZyfHNmcnxjaXJ8Q2hpfGNoaXxuYXB8Q2ZyfHZjeXxWY3l8Y2ZyfFNjeXxzY3l8bmN5fE5jeXx2ZWV8VmVlfENhcHxjYXB8bmZyfHNjRXxzY2V8TmZyfG5nZXxuZ0V8bkdnfHZmcnxWZnJ8bmd0fGJvdHxuR3R8bmlzfG5pdnxSc2h8cnNofG5sZXxubEV8Ym5lfEJmcnxiZnJ8bkxsfG5sdHxuTHR8QmN5fGJjeXxub3R8Tm90fHJsbXx3ZnJ8V2ZyfG5wcnxuc2N8bnVtfG9jeXxhc3R8T2N5fG9mcnx4ZnJ8WGZyfE9mcnxvZ3R8b2htfGFwRXxvbHR8UmhvfGFwZXxyaG98UmZyfHJmcnxvcmR8UkVHfGFuZ3xyZWd8b3J2fEFuZHxhbmR8QU1QfFJjeXxhbXB8QWZyfHljeXxZY3l8eWVufHlmcnxZZnJ8cmN5fHBhcnxwY3l8UGN5fHBmcnxQZnJ8cGhpfFBoaXxhZnJ8QWN5fGFjeXx6Y3l8WmN5fHBpdnxhY0V8YWNkfHpmcnxaZnJ8cHJlfHByRXxwc2l8UHNpfHFmcnxRZnJ8endqfE9yfGdlfEdnfGd0fGdnfGVsfG9TfGx0fEx0fExUfFJlfGxnfGdsfGVnfG5lfEltfGl0fGxlfEREfHdwfHdyfG51fE51fGRkfGxFfFNjfHNjfHBpfFBpfGVlfGFmfGxsfExsfHJ4fGdFfHhpfHBtfFhpfGljfHByfFByfGlufG5pfG1wfG11fGFjfE11fG9yfGFwfEd0fEdUfGlpKTt8JihBYWN1dGV8QWdyYXZlfEF0aWxkZXxDY2VkaWx8RWFjdXRlfEVncmF2ZXxJYWN1dGV8SWdyYXZlfE50aWxkZXxPYWN1dGV8T2dyYXZlfE9zbGFzaHxPdGlsZGV8VWFjdXRlfFVncmF2ZXxZYWN1dGV8YWFjdXRlfGFncmF2ZXxhdGlsZGV8YnJ2YmFyfGNjZWRpbHxjdXJyZW58ZGl2aWRlfGVhY3V0ZXxlZ3JhdmV8ZnJhYzEyfGZyYWMxNHxmcmFjMzR8aWFjdXRlfGlncmF2ZXxpcXVlc3R8bWlkZG90fG50aWxkZXxvYWN1dGV8b2dyYXZlfG9zbGFzaHxvdGlsZGV8cGx1c21ufHVhY3V0ZXx1Z3JhdmV8eWFjdXRlfEFFbGlnfEFjaXJjfEFyaW5nfEVjaXJjfEljaXJjfE9jaXJjfFRIT1JOfFVjaXJjfGFjaXJjfGFjdXRlfGFlbGlnfGFyaW5nfGNlZGlsfGVjaXJjfGljaXJjfGlleGNsfGxhcXVvfG1pY3JvfG9jaXJjfHBvdW5kfHJhcXVvfHN6bGlnfHRob3JufHRpbWVzfHVjaXJjfEF1bWx8Q09QWXxFdW1sfEl1bWx8T3VtbHxRVU9UfFV1bWx8YXVtbHxjZW50fGNvcHl8ZXVtbHxpdW1sfG1hY3J8bmJzcHxvcmRmfG9yZG18b3VtbHxwYXJhfHF1b3R8c2VjdHxzdXAxfHN1cDJ8c3VwM3x1dW1sfHl1bWx8QU1QfEVUSHxSRUd8YW1wfGRlZ3xldGh8bm90fHJlZ3xzaHl8dW1sfHllbnxHVHxMVHxndHxsdCkoPyE7KShbPWEtekEtWjAtOV0/KXwmIyhbMC05XSspKDs/KXwmI1t4WF0oW2EtZkEtRjAtOV0rKSg7Pyl8JihbMC05YS16QS1aXSspL2c7XG5cdHZhciBkZWNvZGVNYXAgPSB7J2FhY3V0ZSc6J1xceEUxJywnQWFjdXRlJzonXFx4QzEnLCdhYnJldmUnOidcXHUwMTAzJywnQWJyZXZlJzonXFx1MDEwMicsJ2FjJzonXFx1MjIzRScsJ2FjZCc6J1xcdTIyM0YnLCdhY0UnOidcXHUyMjNFXFx1MDMzMycsJ2FjaXJjJzonXFx4RTInLCdBY2lyYyc6J1xceEMyJywnYWN1dGUnOidcXHhCNCcsJ2FjeSc6J1xcdTA0MzAnLCdBY3knOidcXHUwNDEwJywnYWVsaWcnOidcXHhFNicsJ0FFbGlnJzonXFx4QzYnLCdhZic6J1xcdTIwNjEnLCdhZnInOidcXHVEODM1XFx1REQxRScsJ0Fmcic6J1xcdUQ4MzVcXHVERDA0JywnYWdyYXZlJzonXFx4RTAnLCdBZ3JhdmUnOidcXHhDMCcsJ2FsZWZzeW0nOidcXHUyMTM1JywnYWxlcGgnOidcXHUyMTM1JywnYWxwaGEnOidcXHUwM0IxJywnQWxwaGEnOidcXHUwMzkxJywnYW1hY3InOidcXHUwMTAxJywnQW1hY3InOidcXHUwMTAwJywnYW1hbGcnOidcXHUyQTNGJywnYW1wJzonJicsJ0FNUCc6JyYnLCdhbmQnOidcXHUyMjI3JywnQW5kJzonXFx1MkE1MycsJ2FuZGFuZCc6J1xcdTJBNTUnLCdhbmRkJzonXFx1MkE1QycsJ2FuZHNsb3BlJzonXFx1MkE1OCcsJ2FuZHYnOidcXHUyQTVBJywnYW5nJzonXFx1MjIyMCcsJ2FuZ2UnOidcXHUyOUE0JywnYW5nbGUnOidcXHUyMjIwJywnYW5nbXNkJzonXFx1MjIyMScsJ2FuZ21zZGFhJzonXFx1MjlBOCcsJ2FuZ21zZGFiJzonXFx1MjlBOScsJ2FuZ21zZGFjJzonXFx1MjlBQScsJ2FuZ21zZGFkJzonXFx1MjlBQicsJ2FuZ21zZGFlJzonXFx1MjlBQycsJ2FuZ21zZGFmJzonXFx1MjlBRCcsJ2FuZ21zZGFnJzonXFx1MjlBRScsJ2FuZ21zZGFoJzonXFx1MjlBRicsJ2FuZ3J0JzonXFx1MjIxRicsJ2FuZ3J0dmInOidcXHUyMkJFJywnYW5ncnR2YmQnOidcXHUyOTlEJywnYW5nc3BoJzonXFx1MjIyMicsJ2FuZ3N0JzonXFx4QzUnLCdhbmd6YXJyJzonXFx1MjM3QycsJ2FvZ29uJzonXFx1MDEwNScsJ0FvZ29uJzonXFx1MDEwNCcsJ2FvcGYnOidcXHVEODM1XFx1REQ1MicsJ0FvcGYnOidcXHVEODM1XFx1REQzOCcsJ2FwJzonXFx1MjI0OCcsJ2FwYWNpcic6J1xcdTJBNkYnLCdhcGUnOidcXHUyMjRBJywnYXBFJzonXFx1MkE3MCcsJ2FwaWQnOidcXHUyMjRCJywnYXBvcyc6J1xcJycsJ0FwcGx5RnVuY3Rpb24nOidcXHUyMDYxJywnYXBwcm94JzonXFx1MjI0OCcsJ2FwcHJveGVxJzonXFx1MjI0QScsJ2FyaW5nJzonXFx4RTUnLCdBcmluZyc6J1xceEM1JywnYXNjcic6J1xcdUQ4MzVcXHVEQ0I2JywnQXNjcic6J1xcdUQ4MzVcXHVEQzlDJywnQXNzaWduJzonXFx1MjI1NCcsJ2FzdCc6JyonLCdhc3ltcCc6J1xcdTIyNDgnLCdhc3ltcGVxJzonXFx1MjI0RCcsJ2F0aWxkZSc6J1xceEUzJywnQXRpbGRlJzonXFx4QzMnLCdhdW1sJzonXFx4RTQnLCdBdW1sJzonXFx4QzQnLCdhd2NvbmludCc6J1xcdTIyMzMnLCdhd2ludCc6J1xcdTJBMTEnLCdiYWNrY29uZyc6J1xcdTIyNEMnLCdiYWNrZXBzaWxvbic6J1xcdTAzRjYnLCdiYWNrcHJpbWUnOidcXHUyMDM1JywnYmFja3NpbSc6J1xcdTIyM0QnLCdiYWNrc2ltZXEnOidcXHUyMkNEJywnQmFja3NsYXNoJzonXFx1MjIxNicsJ0JhcnYnOidcXHUyQUU3JywnYmFydmVlJzonXFx1MjJCRCcsJ2JhcndlZCc6J1xcdTIzMDUnLCdCYXJ3ZWQnOidcXHUyMzA2JywnYmFyd2VkZ2UnOidcXHUyMzA1JywnYmJyayc6J1xcdTIzQjUnLCdiYnJrdGJyayc6J1xcdTIzQjYnLCdiY29uZyc6J1xcdTIyNEMnLCdiY3knOidcXHUwNDMxJywnQmN5JzonXFx1MDQxMScsJ2JkcXVvJzonXFx1MjAxRScsJ2JlY2F1cyc6J1xcdTIyMzUnLCdiZWNhdXNlJzonXFx1MjIzNScsJ0JlY2F1c2UnOidcXHUyMjM1JywnYmVtcHR5dic6J1xcdTI5QjAnLCdiZXBzaSc6J1xcdTAzRjYnLCdiZXJub3UnOidcXHUyMTJDJywnQmVybm91bGxpcyc6J1xcdTIxMkMnLCdiZXRhJzonXFx1MDNCMicsJ0JldGEnOidcXHUwMzkyJywnYmV0aCc6J1xcdTIxMzYnLCdiZXR3ZWVuJzonXFx1MjI2QycsJ2Jmcic6J1xcdUQ4MzVcXHVERDFGJywnQmZyJzonXFx1RDgzNVxcdUREMDUnLCdiaWdjYXAnOidcXHUyMkMyJywnYmlnY2lyYyc6J1xcdTI1RUYnLCdiaWdjdXAnOidcXHUyMkMzJywnYmlnb2RvdCc6J1xcdTJBMDAnLCdiaWdvcGx1cyc6J1xcdTJBMDEnLCdiaWdvdGltZXMnOidcXHUyQTAyJywnYmlnc3FjdXAnOidcXHUyQTA2JywnYmlnc3Rhcic6J1xcdTI2MDUnLCdiaWd0cmlhbmdsZWRvd24nOidcXHUyNUJEJywnYmlndHJpYW5nbGV1cCc6J1xcdTI1QjMnLCdiaWd1cGx1cyc6J1xcdTJBMDQnLCdiaWd2ZWUnOidcXHUyMkMxJywnYmlnd2VkZ2UnOidcXHUyMkMwJywnYmthcm93JzonXFx1MjkwRCcsJ2JsYWNrbG96ZW5nZSc6J1xcdTI5RUInLCdibGFja3NxdWFyZSc6J1xcdTI1QUEnLCdibGFja3RyaWFuZ2xlJzonXFx1MjVCNCcsJ2JsYWNrdHJpYW5nbGVkb3duJzonXFx1MjVCRScsJ2JsYWNrdHJpYW5nbGVsZWZ0JzonXFx1MjVDMicsJ2JsYWNrdHJpYW5nbGVyaWdodCc6J1xcdTI1QjgnLCdibGFuayc6J1xcdTI0MjMnLCdibGsxMic6J1xcdTI1OTInLCdibGsxNCc6J1xcdTI1OTEnLCdibGszNCc6J1xcdTI1OTMnLCdibG9jayc6J1xcdTI1ODgnLCdibmUnOic9XFx1MjBFNScsJ2JuZXF1aXYnOidcXHUyMjYxXFx1MjBFNScsJ2Jub3QnOidcXHUyMzEwJywnYk5vdCc6J1xcdTJBRUQnLCdib3BmJzonXFx1RDgzNVxcdURENTMnLCdCb3BmJzonXFx1RDgzNVxcdUREMzknLCdib3QnOidcXHUyMkE1JywnYm90dG9tJzonXFx1MjJBNScsJ2Jvd3RpZSc6J1xcdTIyQzgnLCdib3hib3gnOidcXHUyOUM5JywnYm94ZGwnOidcXHUyNTEwJywnYm94ZEwnOidcXHUyNTU1JywnYm94RGwnOidcXHUyNTU2JywnYm94REwnOidcXHUyNTU3JywnYm94ZHInOidcXHUyNTBDJywnYm94ZFInOidcXHUyNTUyJywnYm94RHInOidcXHUyNTUzJywnYm94RFInOidcXHUyNTU0JywnYm94aCc6J1xcdTI1MDAnLCdib3hIJzonXFx1MjU1MCcsJ2JveGhkJzonXFx1MjUyQycsJ2JveGhEJzonXFx1MjU2NScsJ2JveEhkJzonXFx1MjU2NCcsJ2JveEhEJzonXFx1MjU2NicsJ2JveGh1JzonXFx1MjUzNCcsJ2JveGhVJzonXFx1MjU2OCcsJ2JveEh1JzonXFx1MjU2NycsJ2JveEhVJzonXFx1MjU2OScsJ2JveG1pbnVzJzonXFx1MjI5RicsJ2JveHBsdXMnOidcXHUyMjlFJywnYm94dGltZXMnOidcXHUyMkEwJywnYm94dWwnOidcXHUyNTE4JywnYm94dUwnOidcXHUyNTVCJywnYm94VWwnOidcXHUyNTVDJywnYm94VUwnOidcXHUyNTVEJywnYm94dXInOidcXHUyNTE0JywnYm94dVInOidcXHUyNTU4JywnYm94VXInOidcXHUyNTU5JywnYm94VVInOidcXHUyNTVBJywnYm94dic6J1xcdTI1MDInLCdib3hWJzonXFx1MjU1MScsJ2JveHZoJzonXFx1MjUzQycsJ2JveHZIJzonXFx1MjU2QScsJ2JveFZoJzonXFx1MjU2QicsJ2JveFZIJzonXFx1MjU2QycsJ2JveHZsJzonXFx1MjUyNCcsJ2JveHZMJzonXFx1MjU2MScsJ2JveFZsJzonXFx1MjU2MicsJ2JveFZMJzonXFx1MjU2MycsJ2JveHZyJzonXFx1MjUxQycsJ2JveHZSJzonXFx1MjU1RScsJ2JveFZyJzonXFx1MjU1RicsJ2JveFZSJzonXFx1MjU2MCcsJ2JwcmltZSc6J1xcdTIwMzUnLCdicmV2ZSc6J1xcdTAyRDgnLCdCcmV2ZSc6J1xcdTAyRDgnLCdicnZiYXInOidcXHhBNicsJ2JzY3InOidcXHVEODM1XFx1RENCNycsJ0JzY3InOidcXHUyMTJDJywnYnNlbWknOidcXHUyMDRGJywnYnNpbSc6J1xcdTIyM0QnLCdic2ltZSc6J1xcdTIyQ0QnLCdic29sJzonXFxcXCcsJ2Jzb2xiJzonXFx1MjlDNScsJ2Jzb2xoc3ViJzonXFx1MjdDOCcsJ2J1bGwnOidcXHUyMDIyJywnYnVsbGV0JzonXFx1MjAyMicsJ2J1bXAnOidcXHUyMjRFJywnYnVtcGUnOidcXHUyMjRGJywnYnVtcEUnOidcXHUyQUFFJywnYnVtcGVxJzonXFx1MjI0RicsJ0J1bXBlcSc6J1xcdTIyNEUnLCdjYWN1dGUnOidcXHUwMTA3JywnQ2FjdXRlJzonXFx1MDEwNicsJ2NhcCc6J1xcdTIyMjknLCdDYXAnOidcXHUyMkQyJywnY2FwYW5kJzonXFx1MkE0NCcsJ2NhcGJyY3VwJzonXFx1MkE0OScsJ2NhcGNhcCc6J1xcdTJBNEInLCdjYXBjdXAnOidcXHUyQTQ3JywnY2FwZG90JzonXFx1MkE0MCcsJ0NhcGl0YWxEaWZmZXJlbnRpYWxEJzonXFx1MjE0NScsJ2NhcHMnOidcXHUyMjI5XFx1RkUwMCcsJ2NhcmV0JzonXFx1MjA0MScsJ2Nhcm9uJzonXFx1MDJDNycsJ0NheWxleXMnOidcXHUyMTJEJywnY2NhcHMnOidcXHUyQTREJywnY2Nhcm9uJzonXFx1MDEwRCcsJ0NjYXJvbic6J1xcdTAxMEMnLCdjY2VkaWwnOidcXHhFNycsJ0NjZWRpbCc6J1xceEM3JywnY2NpcmMnOidcXHUwMTA5JywnQ2NpcmMnOidcXHUwMTA4JywnQ2NvbmludCc6J1xcdTIyMzAnLCdjY3Vwcyc6J1xcdTJBNEMnLCdjY3Vwc3NtJzonXFx1MkE1MCcsJ2Nkb3QnOidcXHUwMTBCJywnQ2RvdCc6J1xcdTAxMEEnLCdjZWRpbCc6J1xceEI4JywnQ2VkaWxsYSc6J1xceEI4JywnY2VtcHR5dic6J1xcdTI5QjInLCdjZW50JzonXFx4QTInLCdjZW50ZXJkb3QnOidcXHhCNycsJ0NlbnRlckRvdCc6J1xceEI3JywnY2ZyJzonXFx1RDgzNVxcdUREMjAnLCdDZnInOidcXHUyMTJEJywnY2hjeSc6J1xcdTA0NDcnLCdDSGN5JzonXFx1MDQyNycsJ2NoZWNrJzonXFx1MjcxMycsJ2NoZWNrbWFyayc6J1xcdTI3MTMnLCdjaGknOidcXHUwM0M3JywnQ2hpJzonXFx1MDNBNycsJ2Npcic6J1xcdTI1Q0InLCdjaXJjJzonXFx1MDJDNicsJ2NpcmNlcSc6J1xcdTIyNTcnLCdjaXJjbGVhcnJvd2xlZnQnOidcXHUyMUJBJywnY2lyY2xlYXJyb3dyaWdodCc6J1xcdTIxQkInLCdjaXJjbGVkYXN0JzonXFx1MjI5QicsJ2NpcmNsZWRjaXJjJzonXFx1MjI5QScsJ2NpcmNsZWRkYXNoJzonXFx1MjI5RCcsJ0NpcmNsZURvdCc6J1xcdTIyOTknLCdjaXJjbGVkUic6J1xceEFFJywnY2lyY2xlZFMnOidcXHUyNEM4JywnQ2lyY2xlTWludXMnOidcXHUyMjk2JywnQ2lyY2xlUGx1cyc6J1xcdTIyOTUnLCdDaXJjbGVUaW1lcyc6J1xcdTIyOTcnLCdjaXJlJzonXFx1MjI1NycsJ2NpckUnOidcXHUyOUMzJywnY2lyZm5pbnQnOidcXHUyQTEwJywnY2lybWlkJzonXFx1MkFFRicsJ2NpcnNjaXInOidcXHUyOUMyJywnQ2xvY2t3aXNlQ29udG91ckludGVncmFsJzonXFx1MjIzMicsJ0Nsb3NlQ3VybHlEb3VibGVRdW90ZSc6J1xcdTIwMUQnLCdDbG9zZUN1cmx5UXVvdGUnOidcXHUyMDE5JywnY2x1YnMnOidcXHUyNjYzJywnY2x1YnN1aXQnOidcXHUyNjYzJywnY29sb24nOic6JywnQ29sb24nOidcXHUyMjM3JywnY29sb25lJzonXFx1MjI1NCcsJ0NvbG9uZSc6J1xcdTJBNzQnLCdjb2xvbmVxJzonXFx1MjI1NCcsJ2NvbW1hJzonLCcsJ2NvbW1hdCc6J0AnLCdjb21wJzonXFx1MjIwMScsJ2NvbXBmbic6J1xcdTIyMTgnLCdjb21wbGVtZW50JzonXFx1MjIwMScsJ2NvbXBsZXhlcyc6J1xcdTIxMDInLCdjb25nJzonXFx1MjI0NScsJ2Nvbmdkb3QnOidcXHUyQTZEJywnQ29uZ3J1ZW50JzonXFx1MjI2MScsJ2NvbmludCc6J1xcdTIyMkUnLCdDb25pbnQnOidcXHUyMjJGJywnQ29udG91ckludGVncmFsJzonXFx1MjIyRScsJ2NvcGYnOidcXHVEODM1XFx1REQ1NCcsJ0NvcGYnOidcXHUyMTAyJywnY29wcm9kJzonXFx1MjIxMCcsJ0NvcHJvZHVjdCc6J1xcdTIyMTAnLCdjb3B5JzonXFx4QTknLCdDT1BZJzonXFx4QTknLCdjb3B5c3InOidcXHUyMTE3JywnQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbCc6J1xcdTIyMzMnLCdjcmFycic6J1xcdTIxQjUnLCdjcm9zcyc6J1xcdTI3MTcnLCdDcm9zcyc6J1xcdTJBMkYnLCdjc2NyJzonXFx1RDgzNVxcdURDQjgnLCdDc2NyJzonXFx1RDgzNVxcdURDOUUnLCdjc3ViJzonXFx1MkFDRicsJ2NzdWJlJzonXFx1MkFEMScsJ2NzdXAnOidcXHUyQUQwJywnY3N1cGUnOidcXHUyQUQyJywnY3Rkb3QnOidcXHUyMkVGJywnY3VkYXJybCc6J1xcdTI5MzgnLCdjdWRhcnJyJzonXFx1MjkzNScsJ2N1ZXByJzonXFx1MjJERScsJ2N1ZXNjJzonXFx1MjJERicsJ2N1bGFycic6J1xcdTIxQjYnLCdjdWxhcnJwJzonXFx1MjkzRCcsJ2N1cCc6J1xcdTIyMkEnLCdDdXAnOidcXHUyMkQzJywnY3VwYnJjYXAnOidcXHUyQTQ4JywnY3VwY2FwJzonXFx1MkE0NicsJ0N1cENhcCc6J1xcdTIyNEQnLCdjdXBjdXAnOidcXHUyQTRBJywnY3VwZG90JzonXFx1MjI4RCcsJ2N1cG9yJzonXFx1MkE0NScsJ2N1cHMnOidcXHUyMjJBXFx1RkUwMCcsJ2N1cmFycic6J1xcdTIxQjcnLCdjdXJhcnJtJzonXFx1MjkzQycsJ2N1cmx5ZXFwcmVjJzonXFx1MjJERScsJ2N1cmx5ZXFzdWNjJzonXFx1MjJERicsJ2N1cmx5dmVlJzonXFx1MjJDRScsJ2N1cmx5d2VkZ2UnOidcXHUyMkNGJywnY3VycmVuJzonXFx4QTQnLCdjdXJ2ZWFycm93bGVmdCc6J1xcdTIxQjYnLCdjdXJ2ZWFycm93cmlnaHQnOidcXHUyMUI3JywnY3V2ZWUnOidcXHUyMkNFJywnY3V3ZWQnOidcXHUyMkNGJywnY3djb25pbnQnOidcXHUyMjMyJywnY3dpbnQnOidcXHUyMjMxJywnY3lsY3R5JzonXFx1MjMyRCcsJ2RhZ2dlcic6J1xcdTIwMjAnLCdEYWdnZXInOidcXHUyMDIxJywnZGFsZXRoJzonXFx1MjEzOCcsJ2RhcnInOidcXHUyMTkzJywnZEFycic6J1xcdTIxRDMnLCdEYXJyJzonXFx1MjFBMScsJ2Rhc2gnOidcXHUyMDEwJywnZGFzaHYnOidcXHUyMkEzJywnRGFzaHYnOidcXHUyQUU0JywnZGJrYXJvdyc6J1xcdTI5MEYnLCdkYmxhYyc6J1xcdTAyREQnLCdkY2Fyb24nOidcXHUwMTBGJywnRGNhcm9uJzonXFx1MDEwRScsJ2RjeSc6J1xcdTA0MzQnLCdEY3knOidcXHUwNDE0JywnZGQnOidcXHUyMTQ2JywnREQnOidcXHUyMTQ1JywnZGRhZ2dlcic6J1xcdTIwMjEnLCdkZGFycic6J1xcdTIxQ0EnLCdERG90cmFoZCc6J1xcdTI5MTEnLCdkZG90c2VxJzonXFx1MkE3NycsJ2RlZyc6J1xceEIwJywnRGVsJzonXFx1MjIwNycsJ2RlbHRhJzonXFx1MDNCNCcsJ0RlbHRhJzonXFx1MDM5NCcsJ2RlbXB0eXYnOidcXHUyOUIxJywnZGZpc2h0JzonXFx1Mjk3RicsJ2Rmcic6J1xcdUQ4MzVcXHVERDIxJywnRGZyJzonXFx1RDgzNVxcdUREMDcnLCdkSGFyJzonXFx1Mjk2NScsJ2RoYXJsJzonXFx1MjFDMycsJ2RoYXJyJzonXFx1MjFDMicsJ0RpYWNyaXRpY2FsQWN1dGUnOidcXHhCNCcsJ0RpYWNyaXRpY2FsRG90JzonXFx1MDJEOScsJ0RpYWNyaXRpY2FsRG91YmxlQWN1dGUnOidcXHUwMkREJywnRGlhY3JpdGljYWxHcmF2ZSc6J2AnLCdEaWFjcml0aWNhbFRpbGRlJzonXFx1MDJEQycsJ2RpYW0nOidcXHUyMkM0JywnZGlhbW9uZCc6J1xcdTIyQzQnLCdEaWFtb25kJzonXFx1MjJDNCcsJ2RpYW1vbmRzdWl0JzonXFx1MjY2NicsJ2RpYW1zJzonXFx1MjY2NicsJ2RpZSc6J1xceEE4JywnRGlmZmVyZW50aWFsRCc6J1xcdTIxNDYnLCdkaWdhbW1hJzonXFx1MDNERCcsJ2Rpc2luJzonXFx1MjJGMicsJ2Rpdic6J1xceEY3JywnZGl2aWRlJzonXFx4RjcnLCdkaXZpZGVvbnRpbWVzJzonXFx1MjJDNycsJ2Rpdm9ueCc6J1xcdTIyQzcnLCdkamN5JzonXFx1MDQ1MicsJ0RKY3knOidcXHUwNDAyJywnZGxjb3JuJzonXFx1MjMxRScsJ2RsY3JvcCc6J1xcdTIzMEQnLCdkb2xsYXInOickJywnZG9wZic6J1xcdUQ4MzVcXHVERDU1JywnRG9wZic6J1xcdUQ4MzVcXHVERDNCJywnZG90JzonXFx1MDJEOScsJ0RvdCc6J1xceEE4JywnRG90RG90JzonXFx1MjBEQycsJ2RvdGVxJzonXFx1MjI1MCcsJ2RvdGVxZG90JzonXFx1MjI1MScsJ0RvdEVxdWFsJzonXFx1MjI1MCcsJ2RvdG1pbnVzJzonXFx1MjIzOCcsJ2RvdHBsdXMnOidcXHUyMjE0JywnZG90c3F1YXJlJzonXFx1MjJBMScsJ2RvdWJsZWJhcndlZGdlJzonXFx1MjMwNicsJ0RvdWJsZUNvbnRvdXJJbnRlZ3JhbCc6J1xcdTIyMkYnLCdEb3VibGVEb3QnOidcXHhBOCcsJ0RvdWJsZURvd25BcnJvdyc6J1xcdTIxRDMnLCdEb3VibGVMZWZ0QXJyb3cnOidcXHUyMUQwJywnRG91YmxlTGVmdFJpZ2h0QXJyb3cnOidcXHUyMUQ0JywnRG91YmxlTGVmdFRlZSc6J1xcdTJBRTQnLCdEb3VibGVMb25nTGVmdEFycm93JzonXFx1MjdGOCcsJ0RvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvdyc6J1xcdTI3RkEnLCdEb3VibGVMb25nUmlnaHRBcnJvdyc6J1xcdTI3RjknLCdEb3VibGVSaWdodEFycm93JzonXFx1MjFEMicsJ0RvdWJsZVJpZ2h0VGVlJzonXFx1MjJBOCcsJ0RvdWJsZVVwQXJyb3cnOidcXHUyMUQxJywnRG91YmxlVXBEb3duQXJyb3cnOidcXHUyMUQ1JywnRG91YmxlVmVydGljYWxCYXInOidcXHUyMjI1JywnZG93bmFycm93JzonXFx1MjE5MycsJ0Rvd25hcnJvdyc6J1xcdTIxRDMnLCdEb3duQXJyb3cnOidcXHUyMTkzJywnRG93bkFycm93QmFyJzonXFx1MjkxMycsJ0Rvd25BcnJvd1VwQXJyb3cnOidcXHUyMUY1JywnRG93bkJyZXZlJzonXFx1MDMxMScsJ2Rvd25kb3duYXJyb3dzJzonXFx1MjFDQScsJ2Rvd25oYXJwb29ubGVmdCc6J1xcdTIxQzMnLCdkb3duaGFycG9vbnJpZ2h0JzonXFx1MjFDMicsJ0Rvd25MZWZ0UmlnaHRWZWN0b3InOidcXHUyOTUwJywnRG93bkxlZnRUZWVWZWN0b3InOidcXHUyOTVFJywnRG93bkxlZnRWZWN0b3InOidcXHUyMUJEJywnRG93bkxlZnRWZWN0b3JCYXInOidcXHUyOTU2JywnRG93blJpZ2h0VGVlVmVjdG9yJzonXFx1Mjk1RicsJ0Rvd25SaWdodFZlY3Rvcic6J1xcdTIxQzEnLCdEb3duUmlnaHRWZWN0b3JCYXInOidcXHUyOTU3JywnRG93blRlZSc6J1xcdTIyQTQnLCdEb3duVGVlQXJyb3cnOidcXHUyMUE3JywnZHJia2Fyb3cnOidcXHUyOTEwJywnZHJjb3JuJzonXFx1MjMxRicsJ2RyY3JvcCc6J1xcdTIzMEMnLCdkc2NyJzonXFx1RDgzNVxcdURDQjknLCdEc2NyJzonXFx1RDgzNVxcdURDOUYnLCdkc2N5JzonXFx1MDQ1NScsJ0RTY3knOidcXHUwNDA1JywnZHNvbCc6J1xcdTI5RjYnLCdkc3Ryb2snOidcXHUwMTExJywnRHN0cm9rJzonXFx1MDExMCcsJ2R0ZG90JzonXFx1MjJGMScsJ2R0cmknOidcXHUyNUJGJywnZHRyaWYnOidcXHUyNUJFJywnZHVhcnInOidcXHUyMUY1JywnZHVoYXInOidcXHUyOTZGJywnZHdhbmdsZSc6J1xcdTI5QTYnLCdkemN5JzonXFx1MDQ1RicsJ0RaY3knOidcXHUwNDBGJywnZHppZ3JhcnInOidcXHUyN0ZGJywnZWFjdXRlJzonXFx4RTknLCdFYWN1dGUnOidcXHhDOScsJ2Vhc3Rlcic6J1xcdTJBNkUnLCdlY2Fyb24nOidcXHUwMTFCJywnRWNhcm9uJzonXFx1MDExQScsJ2VjaXInOidcXHUyMjU2JywnZWNpcmMnOidcXHhFQScsJ0VjaXJjJzonXFx4Q0EnLCdlY29sb24nOidcXHUyMjU1JywnZWN5JzonXFx1MDQ0RCcsJ0VjeSc6J1xcdTA0MkQnLCdlRERvdCc6J1xcdTJBNzcnLCdlZG90JzonXFx1MDExNycsJ2VEb3QnOidcXHUyMjUxJywnRWRvdCc6J1xcdTAxMTYnLCdlZSc6J1xcdTIxNDcnLCdlZkRvdCc6J1xcdTIyNTInLCdlZnInOidcXHVEODM1XFx1REQyMicsJ0Vmcic6J1xcdUQ4MzVcXHVERDA4JywnZWcnOidcXHUyQTlBJywnZWdyYXZlJzonXFx4RTgnLCdFZ3JhdmUnOidcXHhDOCcsJ2Vncyc6J1xcdTJBOTYnLCdlZ3Nkb3QnOidcXHUyQTk4JywnZWwnOidcXHUyQTk5JywnRWxlbWVudCc6J1xcdTIyMDgnLCdlbGludGVycyc6J1xcdTIzRTcnLCdlbGwnOidcXHUyMTEzJywnZWxzJzonXFx1MkE5NScsJ2Vsc2RvdCc6J1xcdTJBOTcnLCdlbWFjcic6J1xcdTAxMTMnLCdFbWFjcic6J1xcdTAxMTInLCdlbXB0eSc6J1xcdTIyMDUnLCdlbXB0eXNldCc6J1xcdTIyMDUnLCdFbXB0eVNtYWxsU3F1YXJlJzonXFx1MjVGQicsJ2VtcHR5dic6J1xcdTIyMDUnLCdFbXB0eVZlcnlTbWFsbFNxdWFyZSc6J1xcdTI1QUInLCdlbXNwJzonXFx1MjAwMycsJ2Vtc3AxMyc6J1xcdTIwMDQnLCdlbXNwMTQnOidcXHUyMDA1JywnZW5nJzonXFx1MDE0QicsJ0VORyc6J1xcdTAxNEEnLCdlbnNwJzonXFx1MjAwMicsJ2VvZ29uJzonXFx1MDExOScsJ0VvZ29uJzonXFx1MDExOCcsJ2VvcGYnOidcXHVEODM1XFx1REQ1NicsJ0VvcGYnOidcXHVEODM1XFx1REQzQycsJ2VwYXInOidcXHUyMkQ1JywnZXBhcnNsJzonXFx1MjlFMycsJ2VwbHVzJzonXFx1MkE3MScsJ2Vwc2knOidcXHUwM0I1JywnZXBzaWxvbic6J1xcdTAzQjUnLCdFcHNpbG9uJzonXFx1MDM5NScsJ2Vwc2l2JzonXFx1MDNGNScsJ2VxY2lyYyc6J1xcdTIyNTYnLCdlcWNvbG9uJzonXFx1MjI1NScsJ2Vxc2ltJzonXFx1MjI0MicsJ2Vxc2xhbnRndHInOidcXHUyQTk2JywnZXFzbGFudGxlc3MnOidcXHUyQTk1JywnRXF1YWwnOidcXHUyQTc1JywnZXF1YWxzJzonPScsJ0VxdWFsVGlsZGUnOidcXHUyMjQyJywnZXF1ZXN0JzonXFx1MjI1RicsJ0VxdWlsaWJyaXVtJzonXFx1MjFDQycsJ2VxdWl2JzonXFx1MjI2MScsJ2VxdWl2REQnOidcXHUyQTc4JywnZXF2cGFyc2wnOidcXHUyOUU1JywnZXJhcnInOidcXHUyOTcxJywnZXJEb3QnOidcXHUyMjUzJywnZXNjcic6J1xcdTIxMkYnLCdFc2NyJzonXFx1MjEzMCcsJ2VzZG90JzonXFx1MjI1MCcsJ2VzaW0nOidcXHUyMjQyJywnRXNpbSc6J1xcdTJBNzMnLCdldGEnOidcXHUwM0I3JywnRXRhJzonXFx1MDM5NycsJ2V0aCc6J1xceEYwJywnRVRIJzonXFx4RDAnLCdldW1sJzonXFx4RUInLCdFdW1sJzonXFx4Q0InLCdldXJvJzonXFx1MjBBQycsJ2V4Y2wnOichJywnZXhpc3QnOidcXHUyMjAzJywnRXhpc3RzJzonXFx1MjIwMycsJ2V4cGVjdGF0aW9uJzonXFx1MjEzMCcsJ2V4cG9uZW50aWFsZSc6J1xcdTIxNDcnLCdFeHBvbmVudGlhbEUnOidcXHUyMTQ3JywnZmFsbGluZ2RvdHNlcSc6J1xcdTIyNTInLCdmY3knOidcXHUwNDQ0JywnRmN5JzonXFx1MDQyNCcsJ2ZlbWFsZSc6J1xcdTI2NDAnLCdmZmlsaWcnOidcXHVGQjAzJywnZmZsaWcnOidcXHVGQjAwJywnZmZsbGlnJzonXFx1RkIwNCcsJ2Zmcic6J1xcdUQ4MzVcXHVERDIzJywnRmZyJzonXFx1RDgzNVxcdUREMDknLCdmaWxpZyc6J1xcdUZCMDEnLCdGaWxsZWRTbWFsbFNxdWFyZSc6J1xcdTI1RkMnLCdGaWxsZWRWZXJ5U21hbGxTcXVhcmUnOidcXHUyNUFBJywnZmpsaWcnOidmaicsJ2ZsYXQnOidcXHUyNjZEJywnZmxsaWcnOidcXHVGQjAyJywnZmx0bnMnOidcXHUyNUIxJywnZm5vZic6J1xcdTAxOTInLCdmb3BmJzonXFx1RDgzNVxcdURENTcnLCdGb3BmJzonXFx1RDgzNVxcdUREM0QnLCdmb3JhbGwnOidcXHUyMjAwJywnRm9yQWxsJzonXFx1MjIwMCcsJ2ZvcmsnOidcXHUyMkQ0JywnZm9ya3YnOidcXHUyQUQ5JywnRm91cmllcnRyZic6J1xcdTIxMzEnLCdmcGFydGludCc6J1xcdTJBMEQnLCdmcmFjMTInOidcXHhCRCcsJ2ZyYWMxMyc6J1xcdTIxNTMnLCdmcmFjMTQnOidcXHhCQycsJ2ZyYWMxNSc6J1xcdTIxNTUnLCdmcmFjMTYnOidcXHUyMTU5JywnZnJhYzE4JzonXFx1MjE1QicsJ2ZyYWMyMyc6J1xcdTIxNTQnLCdmcmFjMjUnOidcXHUyMTU2JywnZnJhYzM0JzonXFx4QkUnLCdmcmFjMzUnOidcXHUyMTU3JywnZnJhYzM4JzonXFx1MjE1QycsJ2ZyYWM0NSc6J1xcdTIxNTgnLCdmcmFjNTYnOidcXHUyMTVBJywnZnJhYzU4JzonXFx1MjE1RCcsJ2ZyYWM3OCc6J1xcdTIxNUUnLCdmcmFzbCc6J1xcdTIwNDQnLCdmcm93bic6J1xcdTIzMjInLCdmc2NyJzonXFx1RDgzNVxcdURDQkInLCdGc2NyJzonXFx1MjEzMScsJ2dhY3V0ZSc6J1xcdTAxRjUnLCdnYW1tYSc6J1xcdTAzQjMnLCdHYW1tYSc6J1xcdTAzOTMnLCdnYW1tYWQnOidcXHUwM0REJywnR2FtbWFkJzonXFx1MDNEQycsJ2dhcCc6J1xcdTJBODYnLCdnYnJldmUnOidcXHUwMTFGJywnR2JyZXZlJzonXFx1MDExRScsJ0djZWRpbCc6J1xcdTAxMjInLCdnY2lyYyc6J1xcdTAxMUQnLCdHY2lyYyc6J1xcdTAxMUMnLCdnY3knOidcXHUwNDMzJywnR2N5JzonXFx1MDQxMycsJ2dkb3QnOidcXHUwMTIxJywnR2RvdCc6J1xcdTAxMjAnLCdnZSc6J1xcdTIyNjUnLCdnRSc6J1xcdTIyNjcnLCdnZWwnOidcXHUyMkRCJywnZ0VsJzonXFx1MkE4QycsJ2dlcSc6J1xcdTIyNjUnLCdnZXFxJzonXFx1MjI2NycsJ2dlcXNsYW50JzonXFx1MkE3RScsJ2dlcyc6J1xcdTJBN0UnLCdnZXNjYyc6J1xcdTJBQTknLCdnZXNkb3QnOidcXHUyQTgwJywnZ2VzZG90byc6J1xcdTJBODInLCdnZXNkb3RvbCc6J1xcdTJBODQnLCdnZXNsJzonXFx1MjJEQlxcdUZFMDAnLCdnZXNsZXMnOidcXHUyQTk0JywnZ2ZyJzonXFx1RDgzNVxcdUREMjQnLCdHZnInOidcXHVEODM1XFx1REQwQScsJ2dnJzonXFx1MjI2QicsJ0dnJzonXFx1MjJEOScsJ2dnZyc6J1xcdTIyRDknLCdnaW1lbCc6J1xcdTIxMzcnLCdnamN5JzonXFx1MDQ1MycsJ0dKY3knOidcXHUwNDAzJywnZ2wnOidcXHUyMjc3JywnZ2xhJzonXFx1MkFBNScsJ2dsRSc6J1xcdTJBOTInLCdnbGonOidcXHUyQUE0JywnZ25hcCc6J1xcdTJBOEEnLCdnbmFwcHJveCc6J1xcdTJBOEEnLCdnbmUnOidcXHUyQTg4JywnZ25FJzonXFx1MjI2OScsJ2duZXEnOidcXHUyQTg4JywnZ25lcXEnOidcXHUyMjY5JywnZ25zaW0nOidcXHUyMkU3JywnZ29wZic6J1xcdUQ4MzVcXHVERDU4JywnR29wZic6J1xcdUQ4MzVcXHVERDNFJywnZ3JhdmUnOidgJywnR3JlYXRlckVxdWFsJzonXFx1MjI2NScsJ0dyZWF0ZXJFcXVhbExlc3MnOidcXHUyMkRCJywnR3JlYXRlckZ1bGxFcXVhbCc6J1xcdTIyNjcnLCdHcmVhdGVyR3JlYXRlcic6J1xcdTJBQTInLCdHcmVhdGVyTGVzcyc6J1xcdTIyNzcnLCdHcmVhdGVyU2xhbnRFcXVhbCc6J1xcdTJBN0UnLCdHcmVhdGVyVGlsZGUnOidcXHUyMjczJywnZ3Njcic6J1xcdTIxMEEnLCdHc2NyJzonXFx1RDgzNVxcdURDQTInLCdnc2ltJzonXFx1MjI3MycsJ2dzaW1lJzonXFx1MkE4RScsJ2dzaW1sJzonXFx1MkE5MCcsJ2d0JzonPicsJ0d0JzonXFx1MjI2QicsJ0dUJzonPicsJ2d0Y2MnOidcXHUyQUE3JywnZ3RjaXInOidcXHUyQTdBJywnZ3Rkb3QnOidcXHUyMkQ3JywnZ3RsUGFyJzonXFx1Mjk5NScsJ2d0cXVlc3QnOidcXHUyQTdDJywnZ3RyYXBwcm94JzonXFx1MkE4NicsJ2d0cmFycic6J1xcdTI5NzgnLCdndHJkb3QnOidcXHUyMkQ3JywnZ3RyZXFsZXNzJzonXFx1MjJEQicsJ2d0cmVxcWxlc3MnOidcXHUyQThDJywnZ3RybGVzcyc6J1xcdTIyNzcnLCdndHJzaW0nOidcXHUyMjczJywnZ3ZlcnRuZXFxJzonXFx1MjI2OVxcdUZFMDAnLCdndm5FJzonXFx1MjI2OVxcdUZFMDAnLCdIYWNlayc6J1xcdTAyQzcnLCdoYWlyc3AnOidcXHUyMDBBJywnaGFsZic6J1xceEJEJywnaGFtaWx0JzonXFx1MjEwQicsJ2hhcmRjeSc6J1xcdTA0NEEnLCdIQVJEY3knOidcXHUwNDJBJywnaGFycic6J1xcdTIxOTQnLCdoQXJyJzonXFx1MjFENCcsJ2hhcnJjaXInOidcXHUyOTQ4JywnaGFycncnOidcXHUyMUFEJywnSGF0JzonXicsJ2hiYXInOidcXHUyMTBGJywnaGNpcmMnOidcXHUwMTI1JywnSGNpcmMnOidcXHUwMTI0JywnaGVhcnRzJzonXFx1MjY2NScsJ2hlYXJ0c3VpdCc6J1xcdTI2NjUnLCdoZWxsaXAnOidcXHUyMDI2JywnaGVyY29uJzonXFx1MjJCOScsJ2hmcic6J1xcdUQ4MzVcXHVERDI1JywnSGZyJzonXFx1MjEwQycsJ0hpbGJlcnRTcGFjZSc6J1xcdTIxMEInLCdoa3NlYXJvdyc6J1xcdTI5MjUnLCdoa3N3YXJvdyc6J1xcdTI5MjYnLCdob2Fycic6J1xcdTIxRkYnLCdob210aHQnOidcXHUyMjNCJywnaG9va2xlZnRhcnJvdyc6J1xcdTIxQTknLCdob29rcmlnaHRhcnJvdyc6J1xcdTIxQUEnLCdob3BmJzonXFx1RDgzNVxcdURENTknLCdIb3BmJzonXFx1MjEwRCcsJ2hvcmJhcic6J1xcdTIwMTUnLCdIb3Jpem9udGFsTGluZSc6J1xcdTI1MDAnLCdoc2NyJzonXFx1RDgzNVxcdURDQkQnLCdIc2NyJzonXFx1MjEwQicsJ2hzbGFzaCc6J1xcdTIxMEYnLCdoc3Ryb2snOidcXHUwMTI3JywnSHN0cm9rJzonXFx1MDEyNicsJ0h1bXBEb3duSHVtcCc6J1xcdTIyNEUnLCdIdW1wRXF1YWwnOidcXHUyMjRGJywnaHlidWxsJzonXFx1MjA0MycsJ2h5cGhlbic6J1xcdTIwMTAnLCdpYWN1dGUnOidcXHhFRCcsJ0lhY3V0ZSc6J1xceENEJywnaWMnOidcXHUyMDYzJywnaWNpcmMnOidcXHhFRScsJ0ljaXJjJzonXFx4Q0UnLCdpY3knOidcXHUwNDM4JywnSWN5JzonXFx1MDQxOCcsJ0lkb3QnOidcXHUwMTMwJywnaWVjeSc6J1xcdTA0MzUnLCdJRWN5JzonXFx1MDQxNScsJ2lleGNsJzonXFx4QTEnLCdpZmYnOidcXHUyMUQ0JywnaWZyJzonXFx1RDgzNVxcdUREMjYnLCdJZnInOidcXHUyMTExJywnaWdyYXZlJzonXFx4RUMnLCdJZ3JhdmUnOidcXHhDQycsJ2lpJzonXFx1MjE0OCcsJ2lpaWludCc6J1xcdTJBMEMnLCdpaWludCc6J1xcdTIyMkQnLCdpaW5maW4nOidcXHUyOURDJywnaWlvdGEnOidcXHUyMTI5JywnaWpsaWcnOidcXHUwMTMzJywnSUpsaWcnOidcXHUwMTMyJywnSW0nOidcXHUyMTExJywnaW1hY3InOidcXHUwMTJCJywnSW1hY3InOidcXHUwMTJBJywnaW1hZ2UnOidcXHUyMTExJywnSW1hZ2luYXJ5SSc6J1xcdTIxNDgnLCdpbWFnbGluZSc6J1xcdTIxMTAnLCdpbWFncGFydCc6J1xcdTIxMTEnLCdpbWF0aCc6J1xcdTAxMzEnLCdpbW9mJzonXFx1MjJCNycsJ2ltcGVkJzonXFx1MDFCNScsJ0ltcGxpZXMnOidcXHUyMUQyJywnaW4nOidcXHUyMjA4JywnaW5jYXJlJzonXFx1MjEwNScsJ2luZmluJzonXFx1MjIxRScsJ2luZmludGllJzonXFx1MjlERCcsJ2lub2RvdCc6J1xcdTAxMzEnLCdpbnQnOidcXHUyMjJCJywnSW50JzonXFx1MjIyQycsJ2ludGNhbCc6J1xcdTIyQkEnLCdpbnRlZ2Vycyc6J1xcdTIxMjQnLCdJbnRlZ3JhbCc6J1xcdTIyMkInLCdpbnRlcmNhbCc6J1xcdTIyQkEnLCdJbnRlcnNlY3Rpb24nOidcXHUyMkMyJywnaW50bGFyaGsnOidcXHUyQTE3JywnaW50cHJvZCc6J1xcdTJBM0MnLCdJbnZpc2libGVDb21tYSc6J1xcdTIwNjMnLCdJbnZpc2libGVUaW1lcyc6J1xcdTIwNjInLCdpb2N5JzonXFx1MDQ1MScsJ0lPY3knOidcXHUwNDAxJywnaW9nb24nOidcXHUwMTJGJywnSW9nb24nOidcXHUwMTJFJywnaW9wZic6J1xcdUQ4MzVcXHVERDVBJywnSW9wZic6J1xcdUQ4MzVcXHVERDQwJywnaW90YSc6J1xcdTAzQjknLCdJb3RhJzonXFx1MDM5OScsJ2lwcm9kJzonXFx1MkEzQycsJ2lxdWVzdCc6J1xceEJGJywnaXNjcic6J1xcdUQ4MzVcXHVEQ0JFJywnSXNjcic6J1xcdTIxMTAnLCdpc2luJzonXFx1MjIwOCcsJ2lzaW5kb3QnOidcXHUyMkY1JywnaXNpbkUnOidcXHUyMkY5JywnaXNpbnMnOidcXHUyMkY0JywnaXNpbnN2JzonXFx1MjJGMycsJ2lzaW52JzonXFx1MjIwOCcsJ2l0JzonXFx1MjA2MicsJ2l0aWxkZSc6J1xcdTAxMjknLCdJdGlsZGUnOidcXHUwMTI4JywnaXVrY3knOidcXHUwNDU2JywnSXVrY3knOidcXHUwNDA2JywnaXVtbCc6J1xceEVGJywnSXVtbCc6J1xceENGJywnamNpcmMnOidcXHUwMTM1JywnSmNpcmMnOidcXHUwMTM0JywnamN5JzonXFx1MDQzOScsJ0pjeSc6J1xcdTA0MTknLCdqZnInOidcXHVEODM1XFx1REQyNycsJ0pmcic6J1xcdUQ4MzVcXHVERDBEJywnam1hdGgnOidcXHUwMjM3Jywnam9wZic6J1xcdUQ4MzVcXHVERDVCJywnSm9wZic6J1xcdUQ4MzVcXHVERDQxJywnanNjcic6J1xcdUQ4MzVcXHVEQ0JGJywnSnNjcic6J1xcdUQ4MzVcXHVEQ0E1JywnanNlcmN5JzonXFx1MDQ1OCcsJ0pzZXJjeSc6J1xcdTA0MDgnLCdqdWtjeSc6J1xcdTA0NTQnLCdKdWtjeSc6J1xcdTA0MDQnLCdrYXBwYSc6J1xcdTAzQkEnLCdLYXBwYSc6J1xcdTAzOUEnLCdrYXBwYXYnOidcXHUwM0YwJywna2NlZGlsJzonXFx1MDEzNycsJ0tjZWRpbCc6J1xcdTAxMzYnLCdrY3knOidcXHUwNDNBJywnS2N5JzonXFx1MDQxQScsJ2tmcic6J1xcdUQ4MzVcXHVERDI4JywnS2ZyJzonXFx1RDgzNVxcdUREMEUnLCdrZ3JlZW4nOidcXHUwMTM4Jywna2hjeSc6J1xcdTA0NDUnLCdLSGN5JzonXFx1MDQyNScsJ2tqY3knOidcXHUwNDVDJywnS0pjeSc6J1xcdTA0MEMnLCdrb3BmJzonXFx1RDgzNVxcdURENUMnLCdLb3BmJzonXFx1RDgzNVxcdURENDInLCdrc2NyJzonXFx1RDgzNVxcdURDQzAnLCdLc2NyJzonXFx1RDgzNVxcdURDQTYnLCdsQWFycic6J1xcdTIxREEnLCdsYWN1dGUnOidcXHUwMTNBJywnTGFjdXRlJzonXFx1MDEzOScsJ2xhZW1wdHl2JzonXFx1MjlCNCcsJ2xhZ3Jhbic6J1xcdTIxMTInLCdsYW1iZGEnOidcXHUwM0JCJywnTGFtYmRhJzonXFx1MDM5QicsJ2xhbmcnOidcXHUyN0U4JywnTGFuZyc6J1xcdTI3RUEnLCdsYW5nZCc6J1xcdTI5OTEnLCdsYW5nbGUnOidcXHUyN0U4JywnbGFwJzonXFx1MkE4NScsJ0xhcGxhY2V0cmYnOidcXHUyMTEyJywnbGFxdW8nOidcXHhBQicsJ2xhcnInOidcXHUyMTkwJywnbEFycic6J1xcdTIxRDAnLCdMYXJyJzonXFx1MjE5RScsJ2xhcnJiJzonXFx1MjFFNCcsJ2xhcnJiZnMnOidcXHUyOTFGJywnbGFycmZzJzonXFx1MjkxRCcsJ2xhcnJoayc6J1xcdTIxQTknLCdsYXJybHAnOidcXHUyMUFCJywnbGFycnBsJzonXFx1MjkzOScsJ2xhcnJzaW0nOidcXHUyOTczJywnbGFycnRsJzonXFx1MjFBMicsJ2xhdCc6J1xcdTJBQUInLCdsYXRhaWwnOidcXHUyOTE5JywnbEF0YWlsJzonXFx1MjkxQicsJ2xhdGUnOidcXHUyQUFEJywnbGF0ZXMnOidcXHUyQUFEXFx1RkUwMCcsJ2xiYXJyJzonXFx1MjkwQycsJ2xCYXJyJzonXFx1MjkwRScsJ2xiYnJrJzonXFx1Mjc3MicsJ2xicmFjZSc6J3snLCdsYnJhY2snOidbJywnbGJya2UnOidcXHUyOThCJywnbGJya3NsZCc6J1xcdTI5OEYnLCdsYnJrc2x1JzonXFx1Mjk4RCcsJ2xjYXJvbic6J1xcdTAxM0UnLCdMY2Fyb24nOidcXHUwMTNEJywnbGNlZGlsJzonXFx1MDEzQycsJ0xjZWRpbCc6J1xcdTAxM0InLCdsY2VpbCc6J1xcdTIzMDgnLCdsY3ViJzoneycsJ2xjeSc6J1xcdTA0M0InLCdMY3knOidcXHUwNDFCJywnbGRjYSc6J1xcdTI5MzYnLCdsZHF1byc6J1xcdTIwMUMnLCdsZHF1b3InOidcXHUyMDFFJywnbGRyZGhhcic6J1xcdTI5NjcnLCdsZHJ1c2hhcic6J1xcdTI5NEInLCdsZHNoJzonXFx1MjFCMicsJ2xlJzonXFx1MjI2NCcsJ2xFJzonXFx1MjI2NicsJ0xlZnRBbmdsZUJyYWNrZXQnOidcXHUyN0U4JywnbGVmdGFycm93JzonXFx1MjE5MCcsJ0xlZnRhcnJvdyc6J1xcdTIxRDAnLCdMZWZ0QXJyb3cnOidcXHUyMTkwJywnTGVmdEFycm93QmFyJzonXFx1MjFFNCcsJ0xlZnRBcnJvd1JpZ2h0QXJyb3cnOidcXHUyMUM2JywnbGVmdGFycm93dGFpbCc6J1xcdTIxQTInLCdMZWZ0Q2VpbGluZyc6J1xcdTIzMDgnLCdMZWZ0RG91YmxlQnJhY2tldCc6J1xcdTI3RTYnLCdMZWZ0RG93blRlZVZlY3Rvcic6J1xcdTI5NjEnLCdMZWZ0RG93blZlY3Rvcic6J1xcdTIxQzMnLCdMZWZ0RG93blZlY3RvckJhcic6J1xcdTI5NTknLCdMZWZ0Rmxvb3InOidcXHUyMzBBJywnbGVmdGhhcnBvb25kb3duJzonXFx1MjFCRCcsJ2xlZnRoYXJwb29udXAnOidcXHUyMUJDJywnbGVmdGxlZnRhcnJvd3MnOidcXHUyMUM3JywnbGVmdHJpZ2h0YXJyb3cnOidcXHUyMTk0JywnTGVmdHJpZ2h0YXJyb3cnOidcXHUyMUQ0JywnTGVmdFJpZ2h0QXJyb3cnOidcXHUyMTk0JywnbGVmdHJpZ2h0YXJyb3dzJzonXFx1MjFDNicsJ2xlZnRyaWdodGhhcnBvb25zJzonXFx1MjFDQicsJ2xlZnRyaWdodHNxdWlnYXJyb3cnOidcXHUyMUFEJywnTGVmdFJpZ2h0VmVjdG9yJzonXFx1Mjk0RScsJ0xlZnRUZWUnOidcXHUyMkEzJywnTGVmdFRlZUFycm93JzonXFx1MjFBNCcsJ0xlZnRUZWVWZWN0b3InOidcXHUyOTVBJywnbGVmdHRocmVldGltZXMnOidcXHUyMkNCJywnTGVmdFRyaWFuZ2xlJzonXFx1MjJCMicsJ0xlZnRUcmlhbmdsZUJhcic6J1xcdTI5Q0YnLCdMZWZ0VHJpYW5nbGVFcXVhbCc6J1xcdTIyQjQnLCdMZWZ0VXBEb3duVmVjdG9yJzonXFx1Mjk1MScsJ0xlZnRVcFRlZVZlY3Rvcic6J1xcdTI5NjAnLCdMZWZ0VXBWZWN0b3InOidcXHUyMUJGJywnTGVmdFVwVmVjdG9yQmFyJzonXFx1Mjk1OCcsJ0xlZnRWZWN0b3InOidcXHUyMUJDJywnTGVmdFZlY3RvckJhcic6J1xcdTI5NTInLCdsZWcnOidcXHUyMkRBJywnbEVnJzonXFx1MkE4QicsJ2xlcSc6J1xcdTIyNjQnLCdsZXFxJzonXFx1MjI2NicsJ2xlcXNsYW50JzonXFx1MkE3RCcsJ2xlcyc6J1xcdTJBN0QnLCdsZXNjYyc6J1xcdTJBQTgnLCdsZXNkb3QnOidcXHUyQTdGJywnbGVzZG90byc6J1xcdTJBODEnLCdsZXNkb3Rvcic6J1xcdTJBODMnLCdsZXNnJzonXFx1MjJEQVxcdUZFMDAnLCdsZXNnZXMnOidcXHUyQTkzJywnbGVzc2FwcHJveCc6J1xcdTJBODUnLCdsZXNzZG90JzonXFx1MjJENicsJ2xlc3NlcWd0cic6J1xcdTIyREEnLCdsZXNzZXFxZ3RyJzonXFx1MkE4QicsJ0xlc3NFcXVhbEdyZWF0ZXInOidcXHUyMkRBJywnTGVzc0Z1bGxFcXVhbCc6J1xcdTIyNjYnLCdMZXNzR3JlYXRlcic6J1xcdTIyNzYnLCdsZXNzZ3RyJzonXFx1MjI3NicsJ0xlc3NMZXNzJzonXFx1MkFBMScsJ2xlc3NzaW0nOidcXHUyMjcyJywnTGVzc1NsYW50RXF1YWwnOidcXHUyQTdEJywnTGVzc1RpbGRlJzonXFx1MjI3MicsJ2xmaXNodCc6J1xcdTI5N0MnLCdsZmxvb3InOidcXHUyMzBBJywnbGZyJzonXFx1RDgzNVxcdUREMjknLCdMZnInOidcXHVEODM1XFx1REQwRicsJ2xnJzonXFx1MjI3NicsJ2xnRSc6J1xcdTJBOTEnLCdsSGFyJzonXFx1Mjk2MicsJ2xoYXJkJzonXFx1MjFCRCcsJ2xoYXJ1JzonXFx1MjFCQycsJ2xoYXJ1bCc6J1xcdTI5NkEnLCdsaGJsayc6J1xcdTI1ODQnLCdsamN5JzonXFx1MDQ1OScsJ0xKY3knOidcXHUwNDA5JywnbGwnOidcXHUyMjZBJywnTGwnOidcXHUyMkQ4JywnbGxhcnInOidcXHUyMUM3JywnbGxjb3JuZXInOidcXHUyMzFFJywnTGxlZnRhcnJvdyc6J1xcdTIxREEnLCdsbGhhcmQnOidcXHUyOTZCJywnbGx0cmknOidcXHUyNUZBJywnbG1pZG90JzonXFx1MDE0MCcsJ0xtaWRvdCc6J1xcdTAxM0YnLCdsbW91c3QnOidcXHUyM0IwJywnbG1vdXN0YWNoZSc6J1xcdTIzQjAnLCdsbmFwJzonXFx1MkE4OScsJ2xuYXBwcm94JzonXFx1MkE4OScsJ2xuZSc6J1xcdTJBODcnLCdsbkUnOidcXHUyMjY4JywnbG5lcSc6J1xcdTJBODcnLCdsbmVxcSc6J1xcdTIyNjgnLCdsbnNpbSc6J1xcdTIyRTYnLCdsb2FuZyc6J1xcdTI3RUMnLCdsb2Fycic6J1xcdTIxRkQnLCdsb2Jyayc6J1xcdTI3RTYnLCdsb25nbGVmdGFycm93JzonXFx1MjdGNScsJ0xvbmdsZWZ0YXJyb3cnOidcXHUyN0Y4JywnTG9uZ0xlZnRBcnJvdyc6J1xcdTI3RjUnLCdsb25nbGVmdHJpZ2h0YXJyb3cnOidcXHUyN0Y3JywnTG9uZ2xlZnRyaWdodGFycm93JzonXFx1MjdGQScsJ0xvbmdMZWZ0UmlnaHRBcnJvdyc6J1xcdTI3RjcnLCdsb25nbWFwc3RvJzonXFx1MjdGQycsJ2xvbmdyaWdodGFycm93JzonXFx1MjdGNicsJ0xvbmdyaWdodGFycm93JzonXFx1MjdGOScsJ0xvbmdSaWdodEFycm93JzonXFx1MjdGNicsJ2xvb3BhcnJvd2xlZnQnOidcXHUyMUFCJywnbG9vcGFycm93cmlnaHQnOidcXHUyMUFDJywnbG9wYXInOidcXHUyOTg1JywnbG9wZic6J1xcdUQ4MzVcXHVERDVEJywnTG9wZic6J1xcdUQ4MzVcXHVERDQzJywnbG9wbHVzJzonXFx1MkEyRCcsJ2xvdGltZXMnOidcXHUyQTM0JywnbG93YXN0JzonXFx1MjIxNycsJ2xvd2Jhcic6J18nLCdMb3dlckxlZnRBcnJvdyc6J1xcdTIxOTknLCdMb3dlclJpZ2h0QXJyb3cnOidcXHUyMTk4JywnbG96JzonXFx1MjVDQScsJ2xvemVuZ2UnOidcXHUyNUNBJywnbG96Zic6J1xcdTI5RUInLCdscGFyJzonKCcsJ2xwYXJsdCc6J1xcdTI5OTMnLCdscmFycic6J1xcdTIxQzYnLCdscmNvcm5lcic6J1xcdTIzMUYnLCdscmhhcic6J1xcdTIxQ0InLCdscmhhcmQnOidcXHUyOTZEJywnbHJtJzonXFx1MjAwRScsJ2xydHJpJzonXFx1MjJCRicsJ2xzYXF1byc6J1xcdTIwMzknLCdsc2NyJzonXFx1RDgzNVxcdURDQzEnLCdMc2NyJzonXFx1MjExMicsJ2xzaCc6J1xcdTIxQjAnLCdMc2gnOidcXHUyMUIwJywnbHNpbSc6J1xcdTIyNzInLCdsc2ltZSc6J1xcdTJBOEQnLCdsc2ltZyc6J1xcdTJBOEYnLCdsc3FiJzonWycsJ2xzcXVvJzonXFx1MjAxOCcsJ2xzcXVvcic6J1xcdTIwMUEnLCdsc3Ryb2snOidcXHUwMTQyJywnTHN0cm9rJzonXFx1MDE0MScsJ2x0JzonPCcsJ0x0JzonXFx1MjI2QScsJ0xUJzonPCcsJ2x0Y2MnOidcXHUyQUE2JywnbHRjaXInOidcXHUyQTc5JywnbHRkb3QnOidcXHUyMkQ2JywnbHRocmVlJzonXFx1MjJDQicsJ2x0aW1lcyc6J1xcdTIyQzknLCdsdGxhcnInOidcXHUyOTc2JywnbHRxdWVzdCc6J1xcdTJBN0InLCdsdHJpJzonXFx1MjVDMycsJ2x0cmllJzonXFx1MjJCNCcsJ2x0cmlmJzonXFx1MjVDMicsJ2x0clBhcic6J1xcdTI5OTYnLCdsdXJkc2hhcic6J1xcdTI5NEEnLCdsdXJ1aGFyJzonXFx1Mjk2NicsJ2x2ZXJ0bmVxcSc6J1xcdTIyNjhcXHVGRTAwJywnbHZuRSc6J1xcdTIyNjhcXHVGRTAwJywnbWFjcic6J1xceEFGJywnbWFsZSc6J1xcdTI2NDInLCdtYWx0JzonXFx1MjcyMCcsJ21hbHRlc2UnOidcXHUyNzIwJywnbWFwJzonXFx1MjFBNicsJ01hcCc6J1xcdTI5MDUnLCdtYXBzdG8nOidcXHUyMUE2JywnbWFwc3RvZG93bic6J1xcdTIxQTcnLCdtYXBzdG9sZWZ0JzonXFx1MjFBNCcsJ21hcHN0b3VwJzonXFx1MjFBNScsJ21hcmtlcic6J1xcdTI1QUUnLCdtY29tbWEnOidcXHUyQTI5JywnbWN5JzonXFx1MDQzQycsJ01jeSc6J1xcdTA0MUMnLCdtZGFzaCc6J1xcdTIwMTQnLCdtRERvdCc6J1xcdTIyM0EnLCdtZWFzdXJlZGFuZ2xlJzonXFx1MjIyMScsJ01lZGl1bVNwYWNlJzonXFx1MjA1RicsJ01lbGxpbnRyZic6J1xcdTIxMzMnLCdtZnInOidcXHVEODM1XFx1REQyQScsJ01mcic6J1xcdUQ4MzVcXHVERDEwJywnbWhvJzonXFx1MjEyNycsJ21pY3JvJzonXFx4QjUnLCdtaWQnOidcXHUyMjIzJywnbWlkYXN0JzonKicsJ21pZGNpcic6J1xcdTJBRjAnLCdtaWRkb3QnOidcXHhCNycsJ21pbnVzJzonXFx1MjIxMicsJ21pbnVzYic6J1xcdTIyOUYnLCdtaW51c2QnOidcXHUyMjM4JywnbWludXNkdSc6J1xcdTJBMkEnLCdNaW51c1BsdXMnOidcXHUyMjEzJywnbWxjcCc6J1xcdTJBREInLCdtbGRyJzonXFx1MjAyNicsJ21ucGx1cyc6J1xcdTIyMTMnLCdtb2RlbHMnOidcXHUyMkE3JywnbW9wZic6J1xcdUQ4MzVcXHVERDVFJywnTW9wZic6J1xcdUQ4MzVcXHVERDQ0JywnbXAnOidcXHUyMjEzJywnbXNjcic6J1xcdUQ4MzVcXHVEQ0MyJywnTXNjcic6J1xcdTIxMzMnLCdtc3Rwb3MnOidcXHUyMjNFJywnbXUnOidcXHUwM0JDJywnTXUnOidcXHUwMzlDJywnbXVsdGltYXAnOidcXHUyMkI4JywnbXVtYXAnOidcXHUyMkI4JywnbmFibGEnOidcXHUyMjA3JywnbmFjdXRlJzonXFx1MDE0NCcsJ05hY3V0ZSc6J1xcdTAxNDMnLCduYW5nJzonXFx1MjIyMFxcdTIwRDInLCduYXAnOidcXHUyMjQ5JywnbmFwRSc6J1xcdTJBNzBcXHUwMzM4JywnbmFwaWQnOidcXHUyMjRCXFx1MDMzOCcsJ25hcG9zJzonXFx1MDE0OScsJ25hcHByb3gnOidcXHUyMjQ5JywnbmF0dXInOidcXHUyNjZFJywnbmF0dXJhbCc6J1xcdTI2NkUnLCduYXR1cmFscyc6J1xcdTIxMTUnLCduYnNwJzonXFx4QTAnLCduYnVtcCc6J1xcdTIyNEVcXHUwMzM4JywnbmJ1bXBlJzonXFx1MjI0RlxcdTAzMzgnLCduY2FwJzonXFx1MkE0MycsJ25jYXJvbic6J1xcdTAxNDgnLCdOY2Fyb24nOidcXHUwMTQ3JywnbmNlZGlsJzonXFx1MDE0NicsJ05jZWRpbCc6J1xcdTAxNDUnLCduY29uZyc6J1xcdTIyNDcnLCduY29uZ2RvdCc6J1xcdTJBNkRcXHUwMzM4JywnbmN1cCc6J1xcdTJBNDInLCduY3knOidcXHUwNDNEJywnTmN5JzonXFx1MDQxRCcsJ25kYXNoJzonXFx1MjAxMycsJ25lJzonXFx1MjI2MCcsJ25lYXJoayc6J1xcdTI5MjQnLCduZWFycic6J1xcdTIxOTcnLCduZUFycic6J1xcdTIxRDcnLCduZWFycm93JzonXFx1MjE5NycsJ25lZG90JzonXFx1MjI1MFxcdTAzMzgnLCdOZWdhdGl2ZU1lZGl1bVNwYWNlJzonXFx1MjAwQicsJ05lZ2F0aXZlVGhpY2tTcGFjZSc6J1xcdTIwMEInLCdOZWdhdGl2ZVRoaW5TcGFjZSc6J1xcdTIwMEInLCdOZWdhdGl2ZVZlcnlUaGluU3BhY2UnOidcXHUyMDBCJywnbmVxdWl2JzonXFx1MjI2MicsJ25lc2Vhcic6J1xcdTI5MjgnLCduZXNpbSc6J1xcdTIyNDJcXHUwMzM4JywnTmVzdGVkR3JlYXRlckdyZWF0ZXInOidcXHUyMjZCJywnTmVzdGVkTGVzc0xlc3MnOidcXHUyMjZBJywnTmV3TGluZSc6J1xcbicsJ25leGlzdCc6J1xcdTIyMDQnLCduZXhpc3RzJzonXFx1MjIwNCcsJ25mcic6J1xcdUQ4MzVcXHVERDJCJywnTmZyJzonXFx1RDgzNVxcdUREMTEnLCduZ2UnOidcXHUyMjcxJywnbmdFJzonXFx1MjI2N1xcdTAzMzgnLCduZ2VxJzonXFx1MjI3MScsJ25nZXFxJzonXFx1MjI2N1xcdTAzMzgnLCduZ2Vxc2xhbnQnOidcXHUyQTdFXFx1MDMzOCcsJ25nZXMnOidcXHUyQTdFXFx1MDMzOCcsJ25HZyc6J1xcdTIyRDlcXHUwMzM4JywnbmdzaW0nOidcXHUyMjc1Jywnbmd0JzonXFx1MjI2RicsJ25HdCc6J1xcdTIyNkJcXHUyMEQyJywnbmd0cic6J1xcdTIyNkYnLCduR3R2JzonXFx1MjI2QlxcdTAzMzgnLCduaGFycic6J1xcdTIxQUUnLCduaEFycic6J1xcdTIxQ0UnLCduaHBhcic6J1xcdTJBRjInLCduaSc6J1xcdTIyMEInLCduaXMnOidcXHUyMkZDJywnbmlzZCc6J1xcdTIyRkEnLCduaXYnOidcXHUyMjBCJywnbmpjeSc6J1xcdTA0NUEnLCdOSmN5JzonXFx1MDQwQScsJ25sYXJyJzonXFx1MjE5QScsJ25sQXJyJzonXFx1MjFDRCcsJ25sZHInOidcXHUyMDI1JywnbmxlJzonXFx1MjI3MCcsJ25sRSc6J1xcdTIyNjZcXHUwMzM4JywnbmxlZnRhcnJvdyc6J1xcdTIxOUEnLCduTGVmdGFycm93JzonXFx1MjFDRCcsJ25sZWZ0cmlnaHRhcnJvdyc6J1xcdTIxQUUnLCduTGVmdHJpZ2h0YXJyb3cnOidcXHUyMUNFJywnbmxlcSc6J1xcdTIyNzAnLCdubGVxcSc6J1xcdTIyNjZcXHUwMzM4JywnbmxlcXNsYW50JzonXFx1MkE3RFxcdTAzMzgnLCdubGVzJzonXFx1MkE3RFxcdTAzMzgnLCdubGVzcyc6J1xcdTIyNkUnLCduTGwnOidcXHUyMkQ4XFx1MDMzOCcsJ25sc2ltJzonXFx1MjI3NCcsJ25sdCc6J1xcdTIyNkUnLCduTHQnOidcXHUyMjZBXFx1MjBEMicsJ25sdHJpJzonXFx1MjJFQScsJ25sdHJpZSc6J1xcdTIyRUMnLCduTHR2JzonXFx1MjI2QVxcdTAzMzgnLCdubWlkJzonXFx1MjIyNCcsJ05vQnJlYWsnOidcXHUyMDYwJywnTm9uQnJlYWtpbmdTcGFjZSc6J1xceEEwJywnbm9wZic6J1xcdUQ4MzVcXHVERDVGJywnTm9wZic6J1xcdTIxMTUnLCdub3QnOidcXHhBQycsJ05vdCc6J1xcdTJBRUMnLCdOb3RDb25ncnVlbnQnOidcXHUyMjYyJywnTm90Q3VwQ2FwJzonXFx1MjI2RCcsJ05vdERvdWJsZVZlcnRpY2FsQmFyJzonXFx1MjIyNicsJ05vdEVsZW1lbnQnOidcXHUyMjA5JywnTm90RXF1YWwnOidcXHUyMjYwJywnTm90RXF1YWxUaWxkZSc6J1xcdTIyNDJcXHUwMzM4JywnTm90RXhpc3RzJzonXFx1MjIwNCcsJ05vdEdyZWF0ZXInOidcXHUyMjZGJywnTm90R3JlYXRlckVxdWFsJzonXFx1MjI3MScsJ05vdEdyZWF0ZXJGdWxsRXF1YWwnOidcXHUyMjY3XFx1MDMzOCcsJ05vdEdyZWF0ZXJHcmVhdGVyJzonXFx1MjI2QlxcdTAzMzgnLCdOb3RHcmVhdGVyTGVzcyc6J1xcdTIyNzknLCdOb3RHcmVhdGVyU2xhbnRFcXVhbCc6J1xcdTJBN0VcXHUwMzM4JywnTm90R3JlYXRlclRpbGRlJzonXFx1MjI3NScsJ05vdEh1bXBEb3duSHVtcCc6J1xcdTIyNEVcXHUwMzM4JywnTm90SHVtcEVxdWFsJzonXFx1MjI0RlxcdTAzMzgnLCdub3Rpbic6J1xcdTIyMDknLCdub3RpbmRvdCc6J1xcdTIyRjVcXHUwMzM4Jywnbm90aW5FJzonXFx1MjJGOVxcdTAzMzgnLCdub3RpbnZhJzonXFx1MjIwOScsJ25vdGludmInOidcXHUyMkY3Jywnbm90aW52Yyc6J1xcdTIyRjYnLCdOb3RMZWZ0VHJpYW5nbGUnOidcXHUyMkVBJywnTm90TGVmdFRyaWFuZ2xlQmFyJzonXFx1MjlDRlxcdTAzMzgnLCdOb3RMZWZ0VHJpYW5nbGVFcXVhbCc6J1xcdTIyRUMnLCdOb3RMZXNzJzonXFx1MjI2RScsJ05vdExlc3NFcXVhbCc6J1xcdTIyNzAnLCdOb3RMZXNzR3JlYXRlcic6J1xcdTIyNzgnLCdOb3RMZXNzTGVzcyc6J1xcdTIyNkFcXHUwMzM4JywnTm90TGVzc1NsYW50RXF1YWwnOidcXHUyQTdEXFx1MDMzOCcsJ05vdExlc3NUaWxkZSc6J1xcdTIyNzQnLCdOb3ROZXN0ZWRHcmVhdGVyR3JlYXRlcic6J1xcdTJBQTJcXHUwMzM4JywnTm90TmVzdGVkTGVzc0xlc3MnOidcXHUyQUExXFx1MDMzOCcsJ25vdG5pJzonXFx1MjIwQycsJ25vdG5pdmEnOidcXHUyMjBDJywnbm90bml2Yic6J1xcdTIyRkUnLCdub3RuaXZjJzonXFx1MjJGRCcsJ05vdFByZWNlZGVzJzonXFx1MjI4MCcsJ05vdFByZWNlZGVzRXF1YWwnOidcXHUyQUFGXFx1MDMzOCcsJ05vdFByZWNlZGVzU2xhbnRFcXVhbCc6J1xcdTIyRTAnLCdOb3RSZXZlcnNlRWxlbWVudCc6J1xcdTIyMEMnLCdOb3RSaWdodFRyaWFuZ2xlJzonXFx1MjJFQicsJ05vdFJpZ2h0VHJpYW5nbGVCYXInOidcXHUyOUQwXFx1MDMzOCcsJ05vdFJpZ2h0VHJpYW5nbGVFcXVhbCc6J1xcdTIyRUQnLCdOb3RTcXVhcmVTdWJzZXQnOidcXHUyMjhGXFx1MDMzOCcsJ05vdFNxdWFyZVN1YnNldEVxdWFsJzonXFx1MjJFMicsJ05vdFNxdWFyZVN1cGVyc2V0JzonXFx1MjI5MFxcdTAzMzgnLCdOb3RTcXVhcmVTdXBlcnNldEVxdWFsJzonXFx1MjJFMycsJ05vdFN1YnNldCc6J1xcdTIyODJcXHUyMEQyJywnTm90U3Vic2V0RXF1YWwnOidcXHUyMjg4JywnTm90U3VjY2VlZHMnOidcXHUyMjgxJywnTm90U3VjY2VlZHNFcXVhbCc6J1xcdTJBQjBcXHUwMzM4JywnTm90U3VjY2VlZHNTbGFudEVxdWFsJzonXFx1MjJFMScsJ05vdFN1Y2NlZWRzVGlsZGUnOidcXHUyMjdGXFx1MDMzOCcsJ05vdFN1cGVyc2V0JzonXFx1MjI4M1xcdTIwRDInLCdOb3RTdXBlcnNldEVxdWFsJzonXFx1MjI4OScsJ05vdFRpbGRlJzonXFx1MjI0MScsJ05vdFRpbGRlRXF1YWwnOidcXHUyMjQ0JywnTm90VGlsZGVGdWxsRXF1YWwnOidcXHUyMjQ3JywnTm90VGlsZGVUaWxkZSc6J1xcdTIyNDknLCdOb3RWZXJ0aWNhbEJhcic6J1xcdTIyMjQnLCducGFyJzonXFx1MjIyNicsJ25wYXJhbGxlbCc6J1xcdTIyMjYnLCducGFyc2wnOidcXHUyQUZEXFx1MjBFNScsJ25wYXJ0JzonXFx1MjIwMlxcdTAzMzgnLCducG9saW50JzonXFx1MkExNCcsJ25wcic6J1xcdTIyODAnLCducHJjdWUnOidcXHUyMkUwJywnbnByZSc6J1xcdTJBQUZcXHUwMzM4JywnbnByZWMnOidcXHUyMjgwJywnbnByZWNlcSc6J1xcdTJBQUZcXHUwMzM4JywnbnJhcnInOidcXHUyMTlCJywnbnJBcnInOidcXHUyMUNGJywnbnJhcnJjJzonXFx1MjkzM1xcdTAzMzgnLCducmFycncnOidcXHUyMTlEXFx1MDMzOCcsJ25yaWdodGFycm93JzonXFx1MjE5QicsJ25SaWdodGFycm93JzonXFx1MjFDRicsJ25ydHJpJzonXFx1MjJFQicsJ25ydHJpZSc6J1xcdTIyRUQnLCduc2MnOidcXHUyMjgxJywnbnNjY3VlJzonXFx1MjJFMScsJ25zY2UnOidcXHUyQUIwXFx1MDMzOCcsJ25zY3InOidcXHVEODM1XFx1RENDMycsJ05zY3InOidcXHVEODM1XFx1RENBOScsJ25zaG9ydG1pZCc6J1xcdTIyMjQnLCduc2hvcnRwYXJhbGxlbCc6J1xcdTIyMjYnLCduc2ltJzonXFx1MjI0MScsJ25zaW1lJzonXFx1MjI0NCcsJ25zaW1lcSc6J1xcdTIyNDQnLCduc21pZCc6J1xcdTIyMjQnLCduc3Bhcic6J1xcdTIyMjYnLCduc3FzdWJlJzonXFx1MjJFMicsJ25zcXN1cGUnOidcXHUyMkUzJywnbnN1Yic6J1xcdTIyODQnLCduc3ViZSc6J1xcdTIyODgnLCduc3ViRSc6J1xcdTJBQzVcXHUwMzM4JywnbnN1YnNldCc6J1xcdTIyODJcXHUyMEQyJywnbnN1YnNldGVxJzonXFx1MjI4OCcsJ25zdWJzZXRlcXEnOidcXHUyQUM1XFx1MDMzOCcsJ25zdWNjJzonXFx1MjI4MScsJ25zdWNjZXEnOidcXHUyQUIwXFx1MDMzOCcsJ25zdXAnOidcXHUyMjg1JywnbnN1cGUnOidcXHUyMjg5JywnbnN1cEUnOidcXHUyQUM2XFx1MDMzOCcsJ25zdXBzZXQnOidcXHUyMjgzXFx1MjBEMicsJ25zdXBzZXRlcSc6J1xcdTIyODknLCduc3Vwc2V0ZXFxJzonXFx1MkFDNlxcdTAzMzgnLCdudGdsJzonXFx1MjI3OScsJ250aWxkZSc6J1xceEYxJywnTnRpbGRlJzonXFx4RDEnLCdudGxnJzonXFx1MjI3OCcsJ250cmlhbmdsZWxlZnQnOidcXHUyMkVBJywnbnRyaWFuZ2xlbGVmdGVxJzonXFx1MjJFQycsJ250cmlhbmdsZXJpZ2h0JzonXFx1MjJFQicsJ250cmlhbmdsZXJpZ2h0ZXEnOidcXHUyMkVEJywnbnUnOidcXHUwM0JEJywnTnUnOidcXHUwMzlEJywnbnVtJzonIycsJ251bWVybyc6J1xcdTIxMTYnLCdudW1zcCc6J1xcdTIwMDcnLCdudmFwJzonXFx1MjI0RFxcdTIwRDInLCdudmRhc2gnOidcXHUyMkFDJywnbnZEYXNoJzonXFx1MjJBRCcsJ25WZGFzaCc6J1xcdTIyQUUnLCduVkRhc2gnOidcXHUyMkFGJywnbnZnZSc6J1xcdTIyNjVcXHUyMEQyJywnbnZndCc6Jz5cXHUyMEQyJywnbnZIYXJyJzonXFx1MjkwNCcsJ252aW5maW4nOidcXHUyOURFJywnbnZsQXJyJzonXFx1MjkwMicsJ252bGUnOidcXHUyMjY0XFx1MjBEMicsJ252bHQnOic8XFx1MjBEMicsJ252bHRyaWUnOidcXHUyMkI0XFx1MjBEMicsJ252ckFycic6J1xcdTI5MDMnLCdudnJ0cmllJzonXFx1MjJCNVxcdTIwRDInLCdudnNpbSc6J1xcdTIyM0NcXHUyMEQyJywnbndhcmhrJzonXFx1MjkyMycsJ253YXJyJzonXFx1MjE5NicsJ253QXJyJzonXFx1MjFENicsJ253YXJyb3cnOidcXHUyMTk2JywnbnduZWFyJzonXFx1MjkyNycsJ29hY3V0ZSc6J1xceEYzJywnT2FjdXRlJzonXFx4RDMnLCdvYXN0JzonXFx1MjI5QicsJ29jaXInOidcXHUyMjlBJywnb2NpcmMnOidcXHhGNCcsJ09jaXJjJzonXFx4RDQnLCdvY3knOidcXHUwNDNFJywnT2N5JzonXFx1MDQxRScsJ29kYXNoJzonXFx1MjI5RCcsJ29kYmxhYyc6J1xcdTAxNTEnLCdPZGJsYWMnOidcXHUwMTUwJywnb2Rpdic6J1xcdTJBMzgnLCdvZG90JzonXFx1MjI5OScsJ29kc29sZCc6J1xcdTI5QkMnLCdvZWxpZyc6J1xcdTAxNTMnLCdPRWxpZyc6J1xcdTAxNTInLCdvZmNpcic6J1xcdTI5QkYnLCdvZnInOidcXHVEODM1XFx1REQyQycsJ09mcic6J1xcdUQ4MzVcXHVERDEyJywnb2dvbic6J1xcdTAyREInLCdvZ3JhdmUnOidcXHhGMicsJ09ncmF2ZSc6J1xceEQyJywnb2d0JzonXFx1MjlDMScsJ29oYmFyJzonXFx1MjlCNScsJ29obSc6J1xcdTAzQTknLCdvaW50JzonXFx1MjIyRScsJ29sYXJyJzonXFx1MjFCQScsJ29sY2lyJzonXFx1MjlCRScsJ29sY3Jvc3MnOidcXHUyOUJCJywnb2xpbmUnOidcXHUyMDNFJywnb2x0JzonXFx1MjlDMCcsJ29tYWNyJzonXFx1MDE0RCcsJ09tYWNyJzonXFx1MDE0QycsJ29tZWdhJzonXFx1MDNDOScsJ09tZWdhJzonXFx1MDNBOScsJ29taWNyb24nOidcXHUwM0JGJywnT21pY3Jvbic6J1xcdTAzOUYnLCdvbWlkJzonXFx1MjlCNicsJ29taW51cyc6J1xcdTIyOTYnLCdvb3BmJzonXFx1RDgzNVxcdURENjAnLCdPb3BmJzonXFx1RDgzNVxcdURENDYnLCdvcGFyJzonXFx1MjlCNycsJ09wZW5DdXJseURvdWJsZVF1b3RlJzonXFx1MjAxQycsJ09wZW5DdXJseVF1b3RlJzonXFx1MjAxOCcsJ29wZXJwJzonXFx1MjlCOScsJ29wbHVzJzonXFx1MjI5NScsJ29yJzonXFx1MjIyOCcsJ09yJzonXFx1MkE1NCcsJ29yYXJyJzonXFx1MjFCQicsJ29yZCc6J1xcdTJBNUQnLCdvcmRlcic6J1xcdTIxMzQnLCdvcmRlcm9mJzonXFx1MjEzNCcsJ29yZGYnOidcXHhBQScsJ29yZG0nOidcXHhCQScsJ29yaWdvZic6J1xcdTIyQjYnLCdvcm9yJzonXFx1MkE1NicsJ29yc2xvcGUnOidcXHUyQTU3Jywnb3J2JzonXFx1MkE1QicsJ29TJzonXFx1MjRDOCcsJ29zY3InOidcXHUyMTM0JywnT3Njcic6J1xcdUQ4MzVcXHVEQ0FBJywnb3NsYXNoJzonXFx4RjgnLCdPc2xhc2gnOidcXHhEOCcsJ29zb2wnOidcXHUyMjk4Jywnb3RpbGRlJzonXFx4RjUnLCdPdGlsZGUnOidcXHhENScsJ290aW1lcyc6J1xcdTIyOTcnLCdPdGltZXMnOidcXHUyQTM3Jywnb3RpbWVzYXMnOidcXHUyQTM2Jywnb3VtbCc6J1xceEY2JywnT3VtbCc6J1xceEQ2Jywnb3ZiYXInOidcXHUyMzNEJywnT3ZlckJhcic6J1xcdTIwM0UnLCdPdmVyQnJhY2UnOidcXHUyM0RFJywnT3ZlckJyYWNrZXQnOidcXHUyM0I0JywnT3ZlclBhcmVudGhlc2lzJzonXFx1MjNEQycsJ3Bhcic6J1xcdTIyMjUnLCdwYXJhJzonXFx4QjYnLCdwYXJhbGxlbCc6J1xcdTIyMjUnLCdwYXJzaW0nOidcXHUyQUYzJywncGFyc2wnOidcXHUyQUZEJywncGFydCc6J1xcdTIyMDInLCdQYXJ0aWFsRCc6J1xcdTIyMDInLCdwY3knOidcXHUwNDNGJywnUGN5JzonXFx1MDQxRicsJ3BlcmNudCc6JyUnLCdwZXJpb2QnOicuJywncGVybWlsJzonXFx1MjAzMCcsJ3BlcnAnOidcXHUyMkE1JywncGVydGVuayc6J1xcdTIwMzEnLCdwZnInOidcXHVEODM1XFx1REQyRCcsJ1Bmcic6J1xcdUQ4MzVcXHVERDEzJywncGhpJzonXFx1MDNDNicsJ1BoaSc6J1xcdTAzQTYnLCdwaGl2JzonXFx1MDNENScsJ3BobW1hdCc6J1xcdTIxMzMnLCdwaG9uZSc6J1xcdTI2MEUnLCdwaSc6J1xcdTAzQzAnLCdQaSc6J1xcdTAzQTAnLCdwaXRjaGZvcmsnOidcXHUyMkQ0JywncGl2JzonXFx1MDNENicsJ3BsYW5jayc6J1xcdTIxMEYnLCdwbGFuY2toJzonXFx1MjEwRScsJ3BsYW5rdic6J1xcdTIxMEYnLCdwbHVzJzonKycsJ3BsdXNhY2lyJzonXFx1MkEyMycsJ3BsdXNiJzonXFx1MjI5RScsJ3BsdXNjaXInOidcXHUyQTIyJywncGx1c2RvJzonXFx1MjIxNCcsJ3BsdXNkdSc6J1xcdTJBMjUnLCdwbHVzZSc6J1xcdTJBNzInLCdQbHVzTWludXMnOidcXHhCMScsJ3BsdXNtbic6J1xceEIxJywncGx1c3NpbSc6J1xcdTJBMjYnLCdwbHVzdHdvJzonXFx1MkEyNycsJ3BtJzonXFx4QjEnLCdQb2luY2FyZXBsYW5lJzonXFx1MjEwQycsJ3BvaW50aW50JzonXFx1MkExNScsJ3BvcGYnOidcXHVEODM1XFx1REQ2MScsJ1BvcGYnOidcXHUyMTE5JywncG91bmQnOidcXHhBMycsJ3ByJzonXFx1MjI3QScsJ1ByJzonXFx1MkFCQicsJ3ByYXAnOidcXHUyQUI3JywncHJjdWUnOidcXHUyMjdDJywncHJlJzonXFx1MkFBRicsJ3ByRSc6J1xcdTJBQjMnLCdwcmVjJzonXFx1MjI3QScsJ3ByZWNhcHByb3gnOidcXHUyQUI3JywncHJlY2N1cmx5ZXEnOidcXHUyMjdDJywnUHJlY2VkZXMnOidcXHUyMjdBJywnUHJlY2VkZXNFcXVhbCc6J1xcdTJBQUYnLCdQcmVjZWRlc1NsYW50RXF1YWwnOidcXHUyMjdDJywnUHJlY2VkZXNUaWxkZSc6J1xcdTIyN0UnLCdwcmVjZXEnOidcXHUyQUFGJywncHJlY25hcHByb3gnOidcXHUyQUI5JywncHJlY25lcXEnOidcXHUyQUI1JywncHJlY25zaW0nOidcXHUyMkU4JywncHJlY3NpbSc6J1xcdTIyN0UnLCdwcmltZSc6J1xcdTIwMzInLCdQcmltZSc6J1xcdTIwMzMnLCdwcmltZXMnOidcXHUyMTE5JywncHJuYXAnOidcXHUyQUI5JywncHJuRSc6J1xcdTJBQjUnLCdwcm5zaW0nOidcXHUyMkU4JywncHJvZCc6J1xcdTIyMEYnLCdQcm9kdWN0JzonXFx1MjIwRicsJ3Byb2ZhbGFyJzonXFx1MjMyRScsJ3Byb2ZsaW5lJzonXFx1MjMxMicsJ3Byb2ZzdXJmJzonXFx1MjMxMycsJ3Byb3AnOidcXHUyMjFEJywnUHJvcG9ydGlvbic6J1xcdTIyMzcnLCdQcm9wb3J0aW9uYWwnOidcXHUyMjFEJywncHJvcHRvJzonXFx1MjIxRCcsJ3Byc2ltJzonXFx1MjI3RScsJ3BydXJlbCc6J1xcdTIyQjAnLCdwc2NyJzonXFx1RDgzNVxcdURDQzUnLCdQc2NyJzonXFx1RDgzNVxcdURDQUInLCdwc2knOidcXHUwM0M4JywnUHNpJzonXFx1MDNBOCcsJ3B1bmNzcCc6J1xcdTIwMDgnLCdxZnInOidcXHVEODM1XFx1REQyRScsJ1Fmcic6J1xcdUQ4MzVcXHVERDE0JywncWludCc6J1xcdTJBMEMnLCdxb3BmJzonXFx1RDgzNVxcdURENjInLCdRb3BmJzonXFx1MjExQScsJ3FwcmltZSc6J1xcdTIwNTcnLCdxc2NyJzonXFx1RDgzNVxcdURDQzYnLCdRc2NyJzonXFx1RDgzNVxcdURDQUMnLCdxdWF0ZXJuaW9ucyc6J1xcdTIxMEQnLCdxdWF0aW50JzonXFx1MkExNicsJ3F1ZXN0JzonPycsJ3F1ZXN0ZXEnOidcXHUyMjVGJywncXVvdCc6J1wiJywnUVVPVCc6J1wiJywnckFhcnInOidcXHUyMURCJywncmFjZSc6J1xcdTIyM0RcXHUwMzMxJywncmFjdXRlJzonXFx1MDE1NScsJ1JhY3V0ZSc6J1xcdTAxNTQnLCdyYWRpYyc6J1xcdTIyMUEnLCdyYWVtcHR5dic6J1xcdTI5QjMnLCdyYW5nJzonXFx1MjdFOScsJ1JhbmcnOidcXHUyN0VCJywncmFuZ2QnOidcXHUyOTkyJywncmFuZ2UnOidcXHUyOUE1JywncmFuZ2xlJzonXFx1MjdFOScsJ3JhcXVvJzonXFx4QkInLCdyYXJyJzonXFx1MjE5MicsJ3JBcnInOidcXHUyMUQyJywnUmFycic6J1xcdTIxQTAnLCdyYXJyYXAnOidcXHUyOTc1JywncmFycmInOidcXHUyMUU1JywncmFycmJmcyc6J1xcdTI5MjAnLCdyYXJyYyc6J1xcdTI5MzMnLCdyYXJyZnMnOidcXHUyOTFFJywncmFycmhrJzonXFx1MjFBQScsJ3JhcnJscCc6J1xcdTIxQUMnLCdyYXJycGwnOidcXHUyOTQ1JywncmFycnNpbSc6J1xcdTI5NzQnLCdyYXJydGwnOidcXHUyMUEzJywnUmFycnRsJzonXFx1MjkxNicsJ3JhcnJ3JzonXFx1MjE5RCcsJ3JhdGFpbCc6J1xcdTI5MUEnLCdyQXRhaWwnOidcXHUyOTFDJywncmF0aW8nOidcXHUyMjM2JywncmF0aW9uYWxzJzonXFx1MjExQScsJ3JiYXJyJzonXFx1MjkwRCcsJ3JCYXJyJzonXFx1MjkwRicsJ1JCYXJyJzonXFx1MjkxMCcsJ3JiYnJrJzonXFx1Mjc3MycsJ3JicmFjZSc6J30nLCdyYnJhY2snOiddJywncmJya2UnOidcXHUyOThDJywncmJya3NsZCc6J1xcdTI5OEUnLCdyYnJrc2x1JzonXFx1Mjk5MCcsJ3JjYXJvbic6J1xcdTAxNTknLCdSY2Fyb24nOidcXHUwMTU4JywncmNlZGlsJzonXFx1MDE1NycsJ1JjZWRpbCc6J1xcdTAxNTYnLCdyY2VpbCc6J1xcdTIzMDknLCdyY3ViJzonfScsJ3JjeSc6J1xcdTA0NDAnLCdSY3knOidcXHUwNDIwJywncmRjYSc6J1xcdTI5MzcnLCdyZGxkaGFyJzonXFx1Mjk2OScsJ3JkcXVvJzonXFx1MjAxRCcsJ3JkcXVvcic6J1xcdTIwMUQnLCdyZHNoJzonXFx1MjFCMycsJ1JlJzonXFx1MjExQycsJ3JlYWwnOidcXHUyMTFDJywncmVhbGluZSc6J1xcdTIxMUInLCdyZWFscGFydCc6J1xcdTIxMUMnLCdyZWFscyc6J1xcdTIxMUQnLCdyZWN0JzonXFx1MjVBRCcsJ3JlZyc6J1xceEFFJywnUkVHJzonXFx4QUUnLCdSZXZlcnNlRWxlbWVudCc6J1xcdTIyMEInLCdSZXZlcnNlRXF1aWxpYnJpdW0nOidcXHUyMUNCJywnUmV2ZXJzZVVwRXF1aWxpYnJpdW0nOidcXHUyOTZGJywncmZpc2h0JzonXFx1Mjk3RCcsJ3JmbG9vcic6J1xcdTIzMEInLCdyZnInOidcXHVEODM1XFx1REQyRicsJ1Jmcic6J1xcdTIxMUMnLCdySGFyJzonXFx1Mjk2NCcsJ3JoYXJkJzonXFx1MjFDMScsJ3JoYXJ1JzonXFx1MjFDMCcsJ3JoYXJ1bCc6J1xcdTI5NkMnLCdyaG8nOidcXHUwM0MxJywnUmhvJzonXFx1MDNBMScsJ3Job3YnOidcXHUwM0YxJywnUmlnaHRBbmdsZUJyYWNrZXQnOidcXHUyN0U5JywncmlnaHRhcnJvdyc6J1xcdTIxOTInLCdSaWdodGFycm93JzonXFx1MjFEMicsJ1JpZ2h0QXJyb3cnOidcXHUyMTkyJywnUmlnaHRBcnJvd0Jhcic6J1xcdTIxRTUnLCdSaWdodEFycm93TGVmdEFycm93JzonXFx1MjFDNCcsJ3JpZ2h0YXJyb3d0YWlsJzonXFx1MjFBMycsJ1JpZ2h0Q2VpbGluZyc6J1xcdTIzMDknLCdSaWdodERvdWJsZUJyYWNrZXQnOidcXHUyN0U3JywnUmlnaHREb3duVGVlVmVjdG9yJzonXFx1Mjk1RCcsJ1JpZ2h0RG93blZlY3Rvcic6J1xcdTIxQzInLCdSaWdodERvd25WZWN0b3JCYXInOidcXHUyOTU1JywnUmlnaHRGbG9vcic6J1xcdTIzMEInLCdyaWdodGhhcnBvb25kb3duJzonXFx1MjFDMScsJ3JpZ2h0aGFycG9vbnVwJzonXFx1MjFDMCcsJ3JpZ2h0bGVmdGFycm93cyc6J1xcdTIxQzQnLCdyaWdodGxlZnRoYXJwb29ucyc6J1xcdTIxQ0MnLCdyaWdodHJpZ2h0YXJyb3dzJzonXFx1MjFDOScsJ3JpZ2h0c3F1aWdhcnJvdyc6J1xcdTIxOUQnLCdSaWdodFRlZSc6J1xcdTIyQTInLCdSaWdodFRlZUFycm93JzonXFx1MjFBNicsJ1JpZ2h0VGVlVmVjdG9yJzonXFx1Mjk1QicsJ3JpZ2h0dGhyZWV0aW1lcyc6J1xcdTIyQ0MnLCdSaWdodFRyaWFuZ2xlJzonXFx1MjJCMycsJ1JpZ2h0VHJpYW5nbGVCYXInOidcXHUyOUQwJywnUmlnaHRUcmlhbmdsZUVxdWFsJzonXFx1MjJCNScsJ1JpZ2h0VXBEb3duVmVjdG9yJzonXFx1Mjk0RicsJ1JpZ2h0VXBUZWVWZWN0b3InOidcXHUyOTVDJywnUmlnaHRVcFZlY3Rvcic6J1xcdTIxQkUnLCdSaWdodFVwVmVjdG9yQmFyJzonXFx1Mjk1NCcsJ1JpZ2h0VmVjdG9yJzonXFx1MjFDMCcsJ1JpZ2h0VmVjdG9yQmFyJzonXFx1Mjk1MycsJ3JpbmcnOidcXHUwMkRBJywncmlzaW5nZG90c2VxJzonXFx1MjI1MycsJ3JsYXJyJzonXFx1MjFDNCcsJ3JsaGFyJzonXFx1MjFDQycsJ3JsbSc6J1xcdTIwMEYnLCdybW91c3QnOidcXHUyM0IxJywncm1vdXN0YWNoZSc6J1xcdTIzQjEnLCdybm1pZCc6J1xcdTJBRUUnLCdyb2FuZyc6J1xcdTI3RUQnLCdyb2Fycic6J1xcdTIxRkUnLCdyb2Jyayc6J1xcdTI3RTcnLCdyb3Bhcic6J1xcdTI5ODYnLCdyb3BmJzonXFx1RDgzNVxcdURENjMnLCdSb3BmJzonXFx1MjExRCcsJ3JvcGx1cyc6J1xcdTJBMkUnLCdyb3RpbWVzJzonXFx1MkEzNScsJ1JvdW5kSW1wbGllcyc6J1xcdTI5NzAnLCdycGFyJzonKScsJ3JwYXJndCc6J1xcdTI5OTQnLCdycHBvbGludCc6J1xcdTJBMTInLCdycmFycic6J1xcdTIxQzknLCdScmlnaHRhcnJvdyc6J1xcdTIxREInLCdyc2FxdW8nOidcXHUyMDNBJywncnNjcic6J1xcdUQ4MzVcXHVEQ0M3JywnUnNjcic6J1xcdTIxMUInLCdyc2gnOidcXHUyMUIxJywnUnNoJzonXFx1MjFCMScsJ3JzcWInOiddJywncnNxdW8nOidcXHUyMDE5JywncnNxdW9yJzonXFx1MjAxOScsJ3J0aHJlZSc6J1xcdTIyQ0MnLCdydGltZXMnOidcXHUyMkNBJywncnRyaSc6J1xcdTI1QjknLCdydHJpZSc6J1xcdTIyQjUnLCdydHJpZic6J1xcdTI1QjgnLCdydHJpbHRyaSc6J1xcdTI5Q0UnLCdSdWxlRGVsYXllZCc6J1xcdTI5RjQnLCdydWx1aGFyJzonXFx1Mjk2OCcsJ3J4JzonXFx1MjExRScsJ3NhY3V0ZSc6J1xcdTAxNUInLCdTYWN1dGUnOidcXHUwMTVBJywnc2JxdW8nOidcXHUyMDFBJywnc2MnOidcXHUyMjdCJywnU2MnOidcXHUyQUJDJywnc2NhcCc6J1xcdTJBQjgnLCdzY2Fyb24nOidcXHUwMTYxJywnU2Nhcm9uJzonXFx1MDE2MCcsJ3NjY3VlJzonXFx1MjI3RCcsJ3NjZSc6J1xcdTJBQjAnLCdzY0UnOidcXHUyQUI0Jywnc2NlZGlsJzonXFx1MDE1RicsJ1NjZWRpbCc6J1xcdTAxNUUnLCdzY2lyYyc6J1xcdTAxNUQnLCdTY2lyYyc6J1xcdTAxNUMnLCdzY25hcCc6J1xcdTJBQkEnLCdzY25FJzonXFx1MkFCNicsJ3NjbnNpbSc6J1xcdTIyRTknLCdzY3BvbGludCc6J1xcdTJBMTMnLCdzY3NpbSc6J1xcdTIyN0YnLCdzY3knOidcXHUwNDQxJywnU2N5JzonXFx1MDQyMScsJ3Nkb3QnOidcXHUyMkM1Jywnc2RvdGInOidcXHUyMkExJywnc2RvdGUnOidcXHUyQTY2Jywnc2VhcmhrJzonXFx1MjkyNScsJ3NlYXJyJzonXFx1MjE5OCcsJ3NlQXJyJzonXFx1MjFEOCcsJ3NlYXJyb3cnOidcXHUyMTk4Jywnc2VjdCc6J1xceEE3Jywnc2VtaSc6JzsnLCdzZXN3YXInOidcXHUyOTI5Jywnc2V0bWludXMnOidcXHUyMjE2Jywnc2V0bW4nOidcXHUyMjE2Jywnc2V4dCc6J1xcdTI3MzYnLCdzZnInOidcXHVEODM1XFx1REQzMCcsJ1Nmcic6J1xcdUQ4MzVcXHVERDE2Jywnc2Zyb3duJzonXFx1MjMyMicsJ3NoYXJwJzonXFx1MjY2RicsJ3NoY2hjeSc6J1xcdTA0NDknLCdTSENIY3knOidcXHUwNDI5Jywnc2hjeSc6J1xcdTA0NDgnLCdTSGN5JzonXFx1MDQyOCcsJ1Nob3J0RG93bkFycm93JzonXFx1MjE5MycsJ1Nob3J0TGVmdEFycm93JzonXFx1MjE5MCcsJ3Nob3J0bWlkJzonXFx1MjIyMycsJ3Nob3J0cGFyYWxsZWwnOidcXHUyMjI1JywnU2hvcnRSaWdodEFycm93JzonXFx1MjE5MicsJ1Nob3J0VXBBcnJvdyc6J1xcdTIxOTEnLCdzaHknOidcXHhBRCcsJ3NpZ21hJzonXFx1MDNDMycsJ1NpZ21hJzonXFx1MDNBMycsJ3NpZ21hZic6J1xcdTAzQzInLCdzaWdtYXYnOidcXHUwM0MyJywnc2ltJzonXFx1MjIzQycsJ3NpbWRvdCc6J1xcdTJBNkEnLCdzaW1lJzonXFx1MjI0MycsJ3NpbWVxJzonXFx1MjI0MycsJ3NpbWcnOidcXHUyQTlFJywnc2ltZ0UnOidcXHUyQUEwJywnc2ltbCc6J1xcdTJBOUQnLCdzaW1sRSc6J1xcdTJBOUYnLCdzaW1uZSc6J1xcdTIyNDYnLCdzaW1wbHVzJzonXFx1MkEyNCcsJ3NpbXJhcnInOidcXHUyOTcyJywnc2xhcnInOidcXHUyMTkwJywnU21hbGxDaXJjbGUnOidcXHUyMjE4Jywnc21hbGxzZXRtaW51cyc6J1xcdTIyMTYnLCdzbWFzaHAnOidcXHUyQTMzJywnc21lcGFyc2wnOidcXHUyOUU0Jywnc21pZCc6J1xcdTIyMjMnLCdzbWlsZSc6J1xcdTIzMjMnLCdzbXQnOidcXHUyQUFBJywnc210ZSc6J1xcdTJBQUMnLCdzbXRlcyc6J1xcdTJBQUNcXHVGRTAwJywnc29mdGN5JzonXFx1MDQ0QycsJ1NPRlRjeSc6J1xcdTA0MkMnLCdzb2wnOicvJywnc29sYic6J1xcdTI5QzQnLCdzb2xiYXInOidcXHUyMzNGJywnc29wZic6J1xcdUQ4MzVcXHVERDY0JywnU29wZic6J1xcdUQ4MzVcXHVERDRBJywnc3BhZGVzJzonXFx1MjY2MCcsJ3NwYWRlc3VpdCc6J1xcdTI2NjAnLCdzcGFyJzonXFx1MjIyNScsJ3NxY2FwJzonXFx1MjI5MycsJ3NxY2Fwcyc6J1xcdTIyOTNcXHVGRTAwJywnc3FjdXAnOidcXHUyMjk0Jywnc3FjdXBzJzonXFx1MjI5NFxcdUZFMDAnLCdTcXJ0JzonXFx1MjIxQScsJ3Nxc3ViJzonXFx1MjI4RicsJ3Nxc3ViZSc6J1xcdTIyOTEnLCdzcXN1YnNldCc6J1xcdTIyOEYnLCdzcXN1YnNldGVxJzonXFx1MjI5MScsJ3Nxc3VwJzonXFx1MjI5MCcsJ3Nxc3VwZSc6J1xcdTIyOTInLCdzcXN1cHNldCc6J1xcdTIyOTAnLCdzcXN1cHNldGVxJzonXFx1MjI5MicsJ3NxdSc6J1xcdTI1QTEnLCdzcXVhcmUnOidcXHUyNUExJywnU3F1YXJlJzonXFx1MjVBMScsJ1NxdWFyZUludGVyc2VjdGlvbic6J1xcdTIyOTMnLCdTcXVhcmVTdWJzZXQnOidcXHUyMjhGJywnU3F1YXJlU3Vic2V0RXF1YWwnOidcXHUyMjkxJywnU3F1YXJlU3VwZXJzZXQnOidcXHUyMjkwJywnU3F1YXJlU3VwZXJzZXRFcXVhbCc6J1xcdTIyOTInLCdTcXVhcmVVbmlvbic6J1xcdTIyOTQnLCdzcXVhcmYnOidcXHUyNUFBJywnc3F1Zic6J1xcdTI1QUEnLCdzcmFycic6J1xcdTIxOTInLCdzc2NyJzonXFx1RDgzNVxcdURDQzgnLCdTc2NyJzonXFx1RDgzNVxcdURDQUUnLCdzc2V0bW4nOidcXHUyMjE2Jywnc3NtaWxlJzonXFx1MjMyMycsJ3NzdGFyZic6J1xcdTIyQzYnLCdzdGFyJzonXFx1MjYwNicsJ1N0YXInOidcXHUyMkM2Jywnc3RhcmYnOidcXHUyNjA1Jywnc3RyYWlnaHRlcHNpbG9uJzonXFx1MDNGNScsJ3N0cmFpZ2h0cGhpJzonXFx1MDNENScsJ3N0cm5zJzonXFx4QUYnLCdzdWInOidcXHUyMjgyJywnU3ViJzonXFx1MjJEMCcsJ3N1YmRvdCc6J1xcdTJBQkQnLCdzdWJlJzonXFx1MjI4NicsJ3N1YkUnOidcXHUyQUM1Jywnc3ViZWRvdCc6J1xcdTJBQzMnLCdzdWJtdWx0JzonXFx1MkFDMScsJ3N1Ym5lJzonXFx1MjI4QScsJ3N1Ym5FJzonXFx1MkFDQicsJ3N1YnBsdXMnOidcXHUyQUJGJywnc3VicmFycic6J1xcdTI5NzknLCdzdWJzZXQnOidcXHUyMjgyJywnU3Vic2V0JzonXFx1MjJEMCcsJ3N1YnNldGVxJzonXFx1MjI4NicsJ3N1YnNldGVxcSc6J1xcdTJBQzUnLCdTdWJzZXRFcXVhbCc6J1xcdTIyODYnLCdzdWJzZXRuZXEnOidcXHUyMjhBJywnc3Vic2V0bmVxcSc6J1xcdTJBQ0InLCdzdWJzaW0nOidcXHUyQUM3Jywnc3Vic3ViJzonXFx1MkFENScsJ3N1YnN1cCc6J1xcdTJBRDMnLCdzdWNjJzonXFx1MjI3QicsJ3N1Y2NhcHByb3gnOidcXHUyQUI4Jywnc3VjY2N1cmx5ZXEnOidcXHUyMjdEJywnU3VjY2VlZHMnOidcXHUyMjdCJywnU3VjY2VlZHNFcXVhbCc6J1xcdTJBQjAnLCdTdWNjZWVkc1NsYW50RXF1YWwnOidcXHUyMjdEJywnU3VjY2VlZHNUaWxkZSc6J1xcdTIyN0YnLCdzdWNjZXEnOidcXHUyQUIwJywnc3VjY25hcHByb3gnOidcXHUyQUJBJywnc3VjY25lcXEnOidcXHUyQUI2Jywnc3VjY25zaW0nOidcXHUyMkU5Jywnc3VjY3NpbSc6J1xcdTIyN0YnLCdTdWNoVGhhdCc6J1xcdTIyMEInLCdzdW0nOidcXHUyMjExJywnU3VtJzonXFx1MjIxMScsJ3N1bmcnOidcXHUyNjZBJywnc3VwJzonXFx1MjI4MycsJ1N1cCc6J1xcdTIyRDEnLCdzdXAxJzonXFx4QjknLCdzdXAyJzonXFx4QjInLCdzdXAzJzonXFx4QjMnLCdzdXBkb3QnOidcXHUyQUJFJywnc3VwZHN1Yic6J1xcdTJBRDgnLCdzdXBlJzonXFx1MjI4NycsJ3N1cEUnOidcXHUyQUM2Jywnc3VwZWRvdCc6J1xcdTJBQzQnLCdTdXBlcnNldCc6J1xcdTIyODMnLCdTdXBlcnNldEVxdWFsJzonXFx1MjI4NycsJ3N1cGhzb2wnOidcXHUyN0M5Jywnc3VwaHN1Yic6J1xcdTJBRDcnLCdzdXBsYXJyJzonXFx1Mjk3QicsJ3N1cG11bHQnOidcXHUyQUMyJywnc3VwbmUnOidcXHUyMjhCJywnc3VwbkUnOidcXHUyQUNDJywnc3VwcGx1cyc6J1xcdTJBQzAnLCdzdXBzZXQnOidcXHUyMjgzJywnU3Vwc2V0JzonXFx1MjJEMScsJ3N1cHNldGVxJzonXFx1MjI4NycsJ3N1cHNldGVxcSc6J1xcdTJBQzYnLCdzdXBzZXRuZXEnOidcXHUyMjhCJywnc3Vwc2V0bmVxcSc6J1xcdTJBQ0MnLCdzdXBzaW0nOidcXHUyQUM4Jywnc3Vwc3ViJzonXFx1MkFENCcsJ3N1cHN1cCc6J1xcdTJBRDYnLCdzd2FyaGsnOidcXHUyOTI2Jywnc3dhcnInOidcXHUyMTk5Jywnc3dBcnInOidcXHUyMUQ5Jywnc3dhcnJvdyc6J1xcdTIxOTknLCdzd253YXInOidcXHUyOTJBJywnc3psaWcnOidcXHhERicsJ1RhYic6J1xcdCcsJ3RhcmdldCc6J1xcdTIzMTYnLCd0YXUnOidcXHUwM0M0JywnVGF1JzonXFx1MDNBNCcsJ3RicmsnOidcXHUyM0I0JywndGNhcm9uJzonXFx1MDE2NScsJ1RjYXJvbic6J1xcdTAxNjQnLCd0Y2VkaWwnOidcXHUwMTYzJywnVGNlZGlsJzonXFx1MDE2MicsJ3RjeSc6J1xcdTA0NDInLCdUY3knOidcXHUwNDIyJywndGRvdCc6J1xcdTIwREInLCd0ZWxyZWMnOidcXHUyMzE1JywndGZyJzonXFx1RDgzNVxcdUREMzEnLCdUZnInOidcXHVEODM1XFx1REQxNycsJ3RoZXJlNCc6J1xcdTIyMzQnLCd0aGVyZWZvcmUnOidcXHUyMjM0JywnVGhlcmVmb3JlJzonXFx1MjIzNCcsJ3RoZXRhJzonXFx1MDNCOCcsJ1RoZXRhJzonXFx1MDM5OCcsJ3RoZXRhc3ltJzonXFx1MDNEMScsJ3RoZXRhdic6J1xcdTAzRDEnLCd0aGlja2FwcHJveCc6J1xcdTIyNDgnLCd0aGlja3NpbSc6J1xcdTIyM0MnLCdUaGlja1NwYWNlJzonXFx1MjA1RlxcdTIwMEEnLCd0aGluc3AnOidcXHUyMDA5JywnVGhpblNwYWNlJzonXFx1MjAwOScsJ3Roa2FwJzonXFx1MjI0OCcsJ3Roa3NpbSc6J1xcdTIyM0MnLCd0aG9ybic6J1xceEZFJywnVEhPUk4nOidcXHhERScsJ3RpbGRlJzonXFx1MDJEQycsJ1RpbGRlJzonXFx1MjIzQycsJ1RpbGRlRXF1YWwnOidcXHUyMjQzJywnVGlsZGVGdWxsRXF1YWwnOidcXHUyMjQ1JywnVGlsZGVUaWxkZSc6J1xcdTIyNDgnLCd0aW1lcyc6J1xceEQ3JywndGltZXNiJzonXFx1MjJBMCcsJ3RpbWVzYmFyJzonXFx1MkEzMScsJ3RpbWVzZCc6J1xcdTJBMzAnLCd0aW50JzonXFx1MjIyRCcsJ3RvZWEnOidcXHUyOTI4JywndG9wJzonXFx1MjJBNCcsJ3RvcGJvdCc6J1xcdTIzMzYnLCd0b3BjaXInOidcXHUyQUYxJywndG9wZic6J1xcdUQ4MzVcXHVERDY1JywnVG9wZic6J1xcdUQ4MzVcXHVERDRCJywndG9wZm9yayc6J1xcdTJBREEnLCd0b3NhJzonXFx1MjkyOScsJ3RwcmltZSc6J1xcdTIwMzQnLCd0cmFkZSc6J1xcdTIxMjInLCdUUkFERSc6J1xcdTIxMjInLCd0cmlhbmdsZSc6J1xcdTI1QjUnLCd0cmlhbmdsZWRvd24nOidcXHUyNUJGJywndHJpYW5nbGVsZWZ0JzonXFx1MjVDMycsJ3RyaWFuZ2xlbGVmdGVxJzonXFx1MjJCNCcsJ3RyaWFuZ2xlcSc6J1xcdTIyNUMnLCd0cmlhbmdsZXJpZ2h0JzonXFx1MjVCOScsJ3RyaWFuZ2xlcmlnaHRlcSc6J1xcdTIyQjUnLCd0cmlkb3QnOidcXHUyNUVDJywndHJpZSc6J1xcdTIyNUMnLCd0cmltaW51cyc6J1xcdTJBM0EnLCdUcmlwbGVEb3QnOidcXHUyMERCJywndHJpcGx1cyc6J1xcdTJBMzknLCd0cmlzYic6J1xcdTI5Q0QnLCd0cml0aW1lJzonXFx1MkEzQicsJ3RycGV6aXVtJzonXFx1MjNFMicsJ3RzY3InOidcXHVEODM1XFx1RENDOScsJ1RzY3InOidcXHVEODM1XFx1RENBRicsJ3RzY3knOidcXHUwNDQ2JywnVFNjeSc6J1xcdTA0MjYnLCd0c2hjeSc6J1xcdTA0NUInLCdUU0hjeSc6J1xcdTA0MEInLCd0c3Ryb2snOidcXHUwMTY3JywnVHN0cm9rJzonXFx1MDE2NicsJ3R3aXh0JzonXFx1MjI2QycsJ3R3b2hlYWRsZWZ0YXJyb3cnOidcXHUyMTlFJywndHdvaGVhZHJpZ2h0YXJyb3cnOidcXHUyMUEwJywndWFjdXRlJzonXFx4RkEnLCdVYWN1dGUnOidcXHhEQScsJ3VhcnInOidcXHUyMTkxJywndUFycic6J1xcdTIxRDEnLCdVYXJyJzonXFx1MjE5RicsJ1VhcnJvY2lyJzonXFx1Mjk0OScsJ3VicmN5JzonXFx1MDQ1RScsJ1VicmN5JzonXFx1MDQwRScsJ3VicmV2ZSc6J1xcdTAxNkQnLCdVYnJldmUnOidcXHUwMTZDJywndWNpcmMnOidcXHhGQicsJ1VjaXJjJzonXFx4REInLCd1Y3knOidcXHUwNDQzJywnVWN5JzonXFx1MDQyMycsJ3VkYXJyJzonXFx1MjFDNScsJ3VkYmxhYyc6J1xcdTAxNzEnLCdVZGJsYWMnOidcXHUwMTcwJywndWRoYXInOidcXHUyOTZFJywndWZpc2h0JzonXFx1Mjk3RScsJ3Vmcic6J1xcdUQ4MzVcXHVERDMyJywnVWZyJzonXFx1RDgzNVxcdUREMTgnLCd1Z3JhdmUnOidcXHhGOScsJ1VncmF2ZSc6J1xceEQ5JywndUhhcic6J1xcdTI5NjMnLCd1aGFybCc6J1xcdTIxQkYnLCd1aGFycic6J1xcdTIxQkUnLCd1aGJsayc6J1xcdTI1ODAnLCd1bGNvcm4nOidcXHUyMzFDJywndWxjb3JuZXInOidcXHUyMzFDJywndWxjcm9wJzonXFx1MjMwRicsJ3VsdHJpJzonXFx1MjVGOCcsJ3VtYWNyJzonXFx1MDE2QicsJ1VtYWNyJzonXFx1MDE2QScsJ3VtbCc6J1xceEE4JywnVW5kZXJCYXInOidfJywnVW5kZXJCcmFjZSc6J1xcdTIzREYnLCdVbmRlckJyYWNrZXQnOidcXHUyM0I1JywnVW5kZXJQYXJlbnRoZXNpcyc6J1xcdTIzREQnLCdVbmlvbic6J1xcdTIyQzMnLCdVbmlvblBsdXMnOidcXHUyMjhFJywndW9nb24nOidcXHUwMTczJywnVW9nb24nOidcXHUwMTcyJywndW9wZic6J1xcdUQ4MzVcXHVERDY2JywnVW9wZic6J1xcdUQ4MzVcXHVERDRDJywndXBhcnJvdyc6J1xcdTIxOTEnLCdVcGFycm93JzonXFx1MjFEMScsJ1VwQXJyb3cnOidcXHUyMTkxJywnVXBBcnJvd0Jhcic6J1xcdTI5MTInLCdVcEFycm93RG93bkFycm93JzonXFx1MjFDNScsJ3VwZG93bmFycm93JzonXFx1MjE5NScsJ1VwZG93bmFycm93JzonXFx1MjFENScsJ1VwRG93bkFycm93JzonXFx1MjE5NScsJ1VwRXF1aWxpYnJpdW0nOidcXHUyOTZFJywndXBoYXJwb29ubGVmdCc6J1xcdTIxQkYnLCd1cGhhcnBvb25yaWdodCc6J1xcdTIxQkUnLCd1cGx1cyc6J1xcdTIyOEUnLCdVcHBlckxlZnRBcnJvdyc6J1xcdTIxOTYnLCdVcHBlclJpZ2h0QXJyb3cnOidcXHUyMTk3JywndXBzaSc6J1xcdTAzQzUnLCdVcHNpJzonXFx1MDNEMicsJ3Vwc2loJzonXFx1MDNEMicsJ3Vwc2lsb24nOidcXHUwM0M1JywnVXBzaWxvbic6J1xcdTAzQTUnLCdVcFRlZSc6J1xcdTIyQTUnLCdVcFRlZUFycm93JzonXFx1MjFBNScsJ3VwdXBhcnJvd3MnOidcXHUyMUM4JywndXJjb3JuJzonXFx1MjMxRCcsJ3VyY29ybmVyJzonXFx1MjMxRCcsJ3VyY3JvcCc6J1xcdTIzMEUnLCd1cmluZyc6J1xcdTAxNkYnLCdVcmluZyc6J1xcdTAxNkUnLCd1cnRyaSc6J1xcdTI1RjknLCd1c2NyJzonXFx1RDgzNVxcdURDQ0EnLCdVc2NyJzonXFx1RDgzNVxcdURDQjAnLCd1dGRvdCc6J1xcdTIyRjAnLCd1dGlsZGUnOidcXHUwMTY5JywnVXRpbGRlJzonXFx1MDE2OCcsJ3V0cmknOidcXHUyNUI1JywndXRyaWYnOidcXHUyNUI0JywndXVhcnInOidcXHUyMUM4JywndXVtbCc6J1xceEZDJywnVXVtbCc6J1xceERDJywndXdhbmdsZSc6J1xcdTI5QTcnLCd2YW5ncnQnOidcXHUyOTlDJywndmFyZXBzaWxvbic6J1xcdTAzRjUnLCd2YXJrYXBwYSc6J1xcdTAzRjAnLCd2YXJub3RoaW5nJzonXFx1MjIwNScsJ3ZhcnBoaSc6J1xcdTAzRDUnLCd2YXJwaSc6J1xcdTAzRDYnLCd2YXJwcm9wdG8nOidcXHUyMjFEJywndmFycic6J1xcdTIxOTUnLCd2QXJyJzonXFx1MjFENScsJ3ZhcnJobyc6J1xcdTAzRjEnLCd2YXJzaWdtYSc6J1xcdTAzQzInLCd2YXJzdWJzZXRuZXEnOidcXHUyMjhBXFx1RkUwMCcsJ3ZhcnN1YnNldG5lcXEnOidcXHUyQUNCXFx1RkUwMCcsJ3ZhcnN1cHNldG5lcSc6J1xcdTIyOEJcXHVGRTAwJywndmFyc3Vwc2V0bmVxcSc6J1xcdTJBQ0NcXHVGRTAwJywndmFydGhldGEnOidcXHUwM0QxJywndmFydHJpYW5nbGVsZWZ0JzonXFx1MjJCMicsJ3ZhcnRyaWFuZ2xlcmlnaHQnOidcXHUyMkIzJywndkJhcic6J1xcdTJBRTgnLCdWYmFyJzonXFx1MkFFQicsJ3ZCYXJ2JzonXFx1MkFFOScsJ3ZjeSc6J1xcdTA0MzInLCdWY3knOidcXHUwNDEyJywndmRhc2gnOidcXHUyMkEyJywndkRhc2gnOidcXHUyMkE4JywnVmRhc2gnOidcXHUyMkE5JywnVkRhc2gnOidcXHUyMkFCJywnVmRhc2hsJzonXFx1MkFFNicsJ3ZlZSc6J1xcdTIyMjgnLCdWZWUnOidcXHUyMkMxJywndmVlYmFyJzonXFx1MjJCQicsJ3ZlZWVxJzonXFx1MjI1QScsJ3ZlbGxpcCc6J1xcdTIyRUUnLCd2ZXJiYXInOid8JywnVmVyYmFyJzonXFx1MjAxNicsJ3ZlcnQnOid8JywnVmVydCc6J1xcdTIwMTYnLCdWZXJ0aWNhbEJhcic6J1xcdTIyMjMnLCdWZXJ0aWNhbExpbmUnOid8JywnVmVydGljYWxTZXBhcmF0b3InOidcXHUyNzU4JywnVmVydGljYWxUaWxkZSc6J1xcdTIyNDAnLCdWZXJ5VGhpblNwYWNlJzonXFx1MjAwQScsJ3Zmcic6J1xcdUQ4MzVcXHVERDMzJywnVmZyJzonXFx1RDgzNVxcdUREMTknLCd2bHRyaSc6J1xcdTIyQjInLCd2bnN1Yic6J1xcdTIyODJcXHUyMEQyJywndm5zdXAnOidcXHUyMjgzXFx1MjBEMicsJ3ZvcGYnOidcXHVEODM1XFx1REQ2NycsJ1ZvcGYnOidcXHVEODM1XFx1REQ0RCcsJ3Zwcm9wJzonXFx1MjIxRCcsJ3ZydHJpJzonXFx1MjJCMycsJ3ZzY3InOidcXHVEODM1XFx1RENDQicsJ1ZzY3InOidcXHVEODM1XFx1RENCMScsJ3ZzdWJuZSc6J1xcdTIyOEFcXHVGRTAwJywndnN1Ym5FJzonXFx1MkFDQlxcdUZFMDAnLCd2c3VwbmUnOidcXHUyMjhCXFx1RkUwMCcsJ3ZzdXBuRSc6J1xcdTJBQ0NcXHVGRTAwJywnVnZkYXNoJzonXFx1MjJBQScsJ3Z6aWd6YWcnOidcXHUyOTlBJywnd2NpcmMnOidcXHUwMTc1JywnV2NpcmMnOidcXHUwMTc0Jywnd2VkYmFyJzonXFx1MkE1RicsJ3dlZGdlJzonXFx1MjIyNycsJ1dlZGdlJzonXFx1MjJDMCcsJ3dlZGdlcSc6J1xcdTIyNTknLCd3ZWllcnAnOidcXHUyMTE4Jywnd2ZyJzonXFx1RDgzNVxcdUREMzQnLCdXZnInOidcXHVEODM1XFx1REQxQScsJ3dvcGYnOidcXHVEODM1XFx1REQ2OCcsJ1dvcGYnOidcXHVEODM1XFx1REQ0RScsJ3dwJzonXFx1MjExOCcsJ3dyJzonXFx1MjI0MCcsJ3dyZWF0aCc6J1xcdTIyNDAnLCd3c2NyJzonXFx1RDgzNVxcdURDQ0MnLCdXc2NyJzonXFx1RDgzNVxcdURDQjInLCd4Y2FwJzonXFx1MjJDMicsJ3hjaXJjJzonXFx1MjVFRicsJ3hjdXAnOidcXHUyMkMzJywneGR0cmknOidcXHUyNUJEJywneGZyJzonXFx1RDgzNVxcdUREMzUnLCdYZnInOidcXHVEODM1XFx1REQxQicsJ3hoYXJyJzonXFx1MjdGNycsJ3hoQXJyJzonXFx1MjdGQScsJ3hpJzonXFx1MDNCRScsJ1hpJzonXFx1MDM5RScsJ3hsYXJyJzonXFx1MjdGNScsJ3hsQXJyJzonXFx1MjdGOCcsJ3htYXAnOidcXHUyN0ZDJywneG5pcyc6J1xcdTIyRkInLCd4b2RvdCc6J1xcdTJBMDAnLCd4b3BmJzonXFx1RDgzNVxcdURENjknLCdYb3BmJzonXFx1RDgzNVxcdURENEYnLCd4b3BsdXMnOidcXHUyQTAxJywneG90aW1lJzonXFx1MkEwMicsJ3hyYXJyJzonXFx1MjdGNicsJ3hyQXJyJzonXFx1MjdGOScsJ3hzY3InOidcXHVEODM1XFx1RENDRCcsJ1hzY3InOidcXHVEODM1XFx1RENCMycsJ3hzcWN1cCc6J1xcdTJBMDYnLCd4dXBsdXMnOidcXHUyQTA0JywneHV0cmknOidcXHUyNUIzJywneHZlZSc6J1xcdTIyQzEnLCd4d2VkZ2UnOidcXHUyMkMwJywneWFjdXRlJzonXFx4RkQnLCdZYWN1dGUnOidcXHhERCcsJ3lhY3knOidcXHUwNDRGJywnWUFjeSc6J1xcdTA0MkYnLCd5Y2lyYyc6J1xcdTAxNzcnLCdZY2lyYyc6J1xcdTAxNzYnLCd5Y3knOidcXHUwNDRCJywnWWN5JzonXFx1MDQyQicsJ3llbic6J1xceEE1JywneWZyJzonXFx1RDgzNVxcdUREMzYnLCdZZnInOidcXHVEODM1XFx1REQxQycsJ3lpY3knOidcXHUwNDU3JywnWUljeSc6J1xcdTA0MDcnLCd5b3BmJzonXFx1RDgzNVxcdURENkEnLCdZb3BmJzonXFx1RDgzNVxcdURENTAnLCd5c2NyJzonXFx1RDgzNVxcdURDQ0UnLCdZc2NyJzonXFx1RDgzNVxcdURDQjQnLCd5dWN5JzonXFx1MDQ0RScsJ1lVY3knOidcXHUwNDJFJywneXVtbCc6J1xceEZGJywnWXVtbCc6J1xcdTAxNzgnLCd6YWN1dGUnOidcXHUwMTdBJywnWmFjdXRlJzonXFx1MDE3OScsJ3pjYXJvbic6J1xcdTAxN0UnLCdaY2Fyb24nOidcXHUwMTdEJywnemN5JzonXFx1MDQzNycsJ1pjeSc6J1xcdTA0MTcnLCd6ZG90JzonXFx1MDE3QycsJ1pkb3QnOidcXHUwMTdCJywnemVldHJmJzonXFx1MjEyOCcsJ1plcm9XaWR0aFNwYWNlJzonXFx1MjAwQicsJ3pldGEnOidcXHUwM0I2JywnWmV0YSc6J1xcdTAzOTYnLCd6ZnInOidcXHVEODM1XFx1REQzNycsJ1pmcic6J1xcdTIxMjgnLCd6aGN5JzonXFx1MDQzNicsJ1pIY3knOidcXHUwNDE2JywnemlncmFycic6J1xcdTIxREQnLCd6b3BmJzonXFx1RDgzNVxcdURENkInLCdab3BmJzonXFx1MjEyNCcsJ3pzY3InOidcXHVEODM1XFx1RENDRicsJ1pzY3InOidcXHVEODM1XFx1RENCNScsJ3p3aic6J1xcdTIwMEQnLCd6d25qJzonXFx1MjAwQyd9O1xuXHR2YXIgZGVjb2RlTWFwTGVnYWN5ID0geydhYWN1dGUnOidcXHhFMScsJ0FhY3V0ZSc6J1xceEMxJywnYWNpcmMnOidcXHhFMicsJ0FjaXJjJzonXFx4QzInLCdhY3V0ZSc6J1xceEI0JywnYWVsaWcnOidcXHhFNicsJ0FFbGlnJzonXFx4QzYnLCdhZ3JhdmUnOidcXHhFMCcsJ0FncmF2ZSc6J1xceEMwJywnYW1wJzonJicsJ0FNUCc6JyYnLCdhcmluZyc6J1xceEU1JywnQXJpbmcnOidcXHhDNScsJ2F0aWxkZSc6J1xceEUzJywnQXRpbGRlJzonXFx4QzMnLCdhdW1sJzonXFx4RTQnLCdBdW1sJzonXFx4QzQnLCdicnZiYXInOidcXHhBNicsJ2NjZWRpbCc6J1xceEU3JywnQ2NlZGlsJzonXFx4QzcnLCdjZWRpbCc6J1xceEI4JywnY2VudCc6J1xceEEyJywnY29weSc6J1xceEE5JywnQ09QWSc6J1xceEE5JywnY3VycmVuJzonXFx4QTQnLCdkZWcnOidcXHhCMCcsJ2RpdmlkZSc6J1xceEY3JywnZWFjdXRlJzonXFx4RTknLCdFYWN1dGUnOidcXHhDOScsJ2VjaXJjJzonXFx4RUEnLCdFY2lyYyc6J1xceENBJywnZWdyYXZlJzonXFx4RTgnLCdFZ3JhdmUnOidcXHhDOCcsJ2V0aCc6J1xceEYwJywnRVRIJzonXFx4RDAnLCdldW1sJzonXFx4RUInLCdFdW1sJzonXFx4Q0InLCdmcmFjMTInOidcXHhCRCcsJ2ZyYWMxNCc6J1xceEJDJywnZnJhYzM0JzonXFx4QkUnLCdndCc6Jz4nLCdHVCc6Jz4nLCdpYWN1dGUnOidcXHhFRCcsJ0lhY3V0ZSc6J1xceENEJywnaWNpcmMnOidcXHhFRScsJ0ljaXJjJzonXFx4Q0UnLCdpZXhjbCc6J1xceEExJywnaWdyYXZlJzonXFx4RUMnLCdJZ3JhdmUnOidcXHhDQycsJ2lxdWVzdCc6J1xceEJGJywnaXVtbCc6J1xceEVGJywnSXVtbCc6J1xceENGJywnbGFxdW8nOidcXHhBQicsJ2x0JzonPCcsJ0xUJzonPCcsJ21hY3InOidcXHhBRicsJ21pY3JvJzonXFx4QjUnLCdtaWRkb3QnOidcXHhCNycsJ25ic3AnOidcXHhBMCcsJ25vdCc6J1xceEFDJywnbnRpbGRlJzonXFx4RjEnLCdOdGlsZGUnOidcXHhEMScsJ29hY3V0ZSc6J1xceEYzJywnT2FjdXRlJzonXFx4RDMnLCdvY2lyYyc6J1xceEY0JywnT2NpcmMnOidcXHhENCcsJ29ncmF2ZSc6J1xceEYyJywnT2dyYXZlJzonXFx4RDInLCdvcmRmJzonXFx4QUEnLCdvcmRtJzonXFx4QkEnLCdvc2xhc2gnOidcXHhGOCcsJ09zbGFzaCc6J1xceEQ4Jywnb3RpbGRlJzonXFx4RjUnLCdPdGlsZGUnOidcXHhENScsJ291bWwnOidcXHhGNicsJ091bWwnOidcXHhENicsJ3BhcmEnOidcXHhCNicsJ3BsdXNtbic6J1xceEIxJywncG91bmQnOidcXHhBMycsJ3F1b3QnOidcIicsJ1FVT1QnOidcIicsJ3JhcXVvJzonXFx4QkInLCdyZWcnOidcXHhBRScsJ1JFRyc6J1xceEFFJywnc2VjdCc6J1xceEE3Jywnc2h5JzonXFx4QUQnLCdzdXAxJzonXFx4QjknLCdzdXAyJzonXFx4QjInLCdzdXAzJzonXFx4QjMnLCdzemxpZyc6J1xceERGJywndGhvcm4nOidcXHhGRScsJ1RIT1JOJzonXFx4REUnLCd0aW1lcyc6J1xceEQ3JywndWFjdXRlJzonXFx4RkEnLCdVYWN1dGUnOidcXHhEQScsJ3VjaXJjJzonXFx4RkInLCdVY2lyYyc6J1xceERCJywndWdyYXZlJzonXFx4RjknLCdVZ3JhdmUnOidcXHhEOScsJ3VtbCc6J1xceEE4JywndXVtbCc6J1xceEZDJywnVXVtbCc6J1xceERDJywneWFjdXRlJzonXFx4RkQnLCdZYWN1dGUnOidcXHhERCcsJ3llbic6J1xceEE1JywneXVtbCc6J1xceEZGJ307XG5cdHZhciBkZWNvZGVNYXBOdW1lcmljID0geycwJzonXFx1RkZGRCcsJzEyOCc6J1xcdTIwQUMnLCcxMzAnOidcXHUyMDFBJywnMTMxJzonXFx1MDE5MicsJzEzMic6J1xcdTIwMUUnLCcxMzMnOidcXHUyMDI2JywnMTM0JzonXFx1MjAyMCcsJzEzNSc6J1xcdTIwMjEnLCcxMzYnOidcXHUwMkM2JywnMTM3JzonXFx1MjAzMCcsJzEzOCc6J1xcdTAxNjAnLCcxMzknOidcXHUyMDM5JywnMTQwJzonXFx1MDE1MicsJzE0Mic6J1xcdTAxN0QnLCcxNDUnOidcXHUyMDE4JywnMTQ2JzonXFx1MjAxOScsJzE0Nyc6J1xcdTIwMUMnLCcxNDgnOidcXHUyMDFEJywnMTQ5JzonXFx1MjAyMicsJzE1MCc6J1xcdTIwMTMnLCcxNTEnOidcXHUyMDE0JywnMTUyJzonXFx1MDJEQycsJzE1Myc6J1xcdTIxMjInLCcxNTQnOidcXHUwMTYxJywnMTU1JzonXFx1MjAzQScsJzE1Nic6J1xcdTAxNTMnLCcxNTgnOidcXHUwMTdFJywnMTU5JzonXFx1MDE3OCd9O1xuXHR2YXIgaW52YWxpZFJlZmVyZW5jZUNvZGVQb2ludHMgPSBbMSwyLDMsNCw1LDYsNyw4LDExLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDY0OTc2LDY0OTc3LDY0OTc4LDY0OTc5LDY0OTgwLDY0OTgxLDY0OTgyLDY0OTgzLDY0OTg0LDY0OTg1LDY0OTg2LDY0OTg3LDY0OTg4LDY0OTg5LDY0OTkwLDY0OTkxLDY0OTkyLDY0OTkzLDY0OTk0LDY0OTk1LDY0OTk2LDY0OTk3LDY0OTk4LDY0OTk5LDY1MDAwLDY1MDAxLDY1MDAyLDY1MDAzLDY1MDA0LDY1MDA1LDY1MDA2LDY1MDA3LDY1NTM0LDY1NTM1LDEzMTA3MCwxMzEwNzEsMTk2NjA2LDE5NjYwNywyNjIxNDIsMjYyMTQzLDMyNzY3OCwzMjc2NzksMzkzMjE0LDM5MzIxNSw0NTg3NTAsNDU4NzUxLDUyNDI4Niw1MjQyODcsNTg5ODIyLDU4OTgyMyw2NTUzNTgsNjU1MzU5LDcyMDg5NCw3MjA4OTUsNzg2NDMwLDc4NjQzMSw4NTE5NjYsODUxOTY3LDkxNzUwMiw5MTc1MDMsOTgzMDM4LDk4MzAzOSwxMDQ4NTc0LDEwNDg1NzUsMTExNDExMCwxMTE0MTExXTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHR2YXIgc3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxuXHR2YXIgb2JqZWN0ID0ge307XG5cdHZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIGhhcyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHlOYW1lKSB7XG5cdFx0cmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eU5hbWUpO1xuXHR9O1xuXG5cdHZhciBjb250YWlucyA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkge1xuXHRcdHZhciBpbmRleCA9IC0xO1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0d2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcblx0XHRcdGlmIChhcnJheVtpbmRleF0gPT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHR2YXIgbWVyZ2UgPSBmdW5jdGlvbihvcHRpb25zLCBkZWZhdWx0cykge1xuXHRcdGlmICghb3B0aW9ucykge1xuXHRcdFx0cmV0dXJuIGRlZmF1bHRzO1xuXHRcdH1cblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0dmFyIGtleTtcblx0XHRmb3IgKGtleSBpbiBkZWZhdWx0cykge1xuXHRcdFx0Ly8gQSBgaGFzT3duUHJvcGVydHlgIGNoZWNrIGlzIG5vdCBuZWVkZWQgaGVyZSwgc2luY2Ugb25seSByZWNvZ25pemVkXG5cdFx0XHQvLyBvcHRpb24gbmFtZXMgYXJlIHVzZWQgYW55d2F5LiBBbnkgb3RoZXJzIGFyZSBpZ25vcmVkLlxuXHRcdFx0cmVzdWx0W2tleV0gPSBoYXMob3B0aW9ucywga2V5KSA/IG9wdGlvbnNba2V5XSA6IGRlZmF1bHRzW2tleV07XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG5cblx0Ly8gTW9kaWZpZWQgdmVyc2lvbiBvZiBgdWNzMmVuY29kZWA7IHNlZSBodHRwczovL210aHMuYmUvcHVueWNvZGUuXG5cdHZhciBjb2RlUG9pbnRUb1N5bWJvbCA9IGZ1bmN0aW9uKGNvZGVQb2ludCwgc3RyaWN0KSB7XG5cdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdGlmICgoY29kZVBvaW50ID49IDB4RDgwMCAmJiBjb2RlUG9pbnQgPD0gMHhERkZGKSB8fCBjb2RlUG9pbnQgPiAweDEwRkZGRikge1xuXHRcdFx0Ly8gU2VlIGlzc3VlICM0OlxuXHRcdFx0Ly8g4oCcT3RoZXJ3aXNlLCBpZiB0aGUgbnVtYmVyIGlzIGluIHRoZSByYW5nZSAweEQ4MDAgdG8gMHhERkZGIG9yIGlzXG5cdFx0XHQvLyBncmVhdGVyIHRoYW4gMHgxMEZGRkYsIHRoZW4gdGhpcyBpcyBhIHBhcnNlIGVycm9yLiBSZXR1cm4gYSBVK0ZGRkRcblx0XHRcdC8vIFJFUExBQ0VNRU5UIENIQVJBQ1RFUi7igJ1cblx0XHRcdGlmIChzdHJpY3QpIHtcblx0XHRcdFx0cGFyc2VFcnJvcignY2hhcmFjdGVyIHJlZmVyZW5jZSBvdXRzaWRlIHRoZSBwZXJtaXNzaWJsZSBVbmljb2RlIHJhbmdlJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gJ1xcdUZGRkQnO1xuXHRcdH1cblx0XHRpZiAoaGFzKGRlY29kZU1hcE51bWVyaWMsIGNvZGVQb2ludCkpIHtcblx0XHRcdGlmIChzdHJpY3QpIHtcblx0XHRcdFx0cGFyc2VFcnJvcignZGlzYWxsb3dlZCBjaGFyYWN0ZXIgcmVmZXJlbmNlJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGVjb2RlTWFwTnVtZXJpY1tjb2RlUG9pbnRdO1xuXHRcdH1cblx0XHRpZiAoc3RyaWN0ICYmIGNvbnRhaW5zKGludmFsaWRSZWZlcmVuY2VDb2RlUG9pbnRzLCBjb2RlUG9pbnQpKSB7XG5cdFx0XHRwYXJzZUVycm9yKCdkaXNhbGxvd2VkIGNoYXJhY3RlciByZWZlcmVuY2UnKTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuXHRcdFx0Y29kZVBvaW50IC09IDB4MTAwMDA7XG5cdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRjtcblx0XHR9XG5cdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZShjb2RlUG9pbnQpO1xuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH07XG5cblx0dmFyIGhleEVzY2FwZSA9IGZ1bmN0aW9uKGNvZGVQb2ludCkge1xuXHRcdHJldHVybiAnJiN4JyArIGNvZGVQb2ludC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArICc7Jztcblx0fTtcblxuXHR2YXIgZGVjRXNjYXBlID0gZnVuY3Rpb24oY29kZVBvaW50KSB7XG5cdFx0cmV0dXJuICcmIycgKyBjb2RlUG9pbnQgKyAnOyc7XG5cdH07XG5cblx0dmFyIHBhcnNlRXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG5cdFx0dGhyb3cgRXJyb3IoJ1BhcnNlIGVycm9yOiAnICsgbWVzc2FnZSk7XG5cdH07XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0dmFyIGVuY29kZSA9IGZ1bmN0aW9uKHN0cmluZywgb3B0aW9ucykge1xuXHRcdG9wdGlvbnMgPSBtZXJnZShvcHRpb25zLCBlbmNvZGUub3B0aW9ucyk7XG5cdFx0dmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0O1xuXHRcdGlmIChzdHJpY3QgJiYgcmVnZXhJbnZhbGlkUmF3Q29kZVBvaW50LnRlc3Qoc3RyaW5nKSkge1xuXHRcdFx0cGFyc2VFcnJvcignZm9yYmlkZGVuIGNvZGUgcG9pbnQnKTtcblx0XHR9XG5cdFx0dmFyIGVuY29kZUV2ZXJ5dGhpbmcgPSBvcHRpb25zLmVuY29kZUV2ZXJ5dGhpbmc7XG5cdFx0dmFyIHVzZU5hbWVkUmVmZXJlbmNlcyA9IG9wdGlvbnMudXNlTmFtZWRSZWZlcmVuY2VzO1xuXHRcdHZhciBhbGxvd1Vuc2FmZVN5bWJvbHMgPSBvcHRpb25zLmFsbG93VW5zYWZlU3ltYm9scztcblx0XHR2YXIgZXNjYXBlQ29kZVBvaW50ID0gb3B0aW9ucy5kZWNpbWFsID8gZGVjRXNjYXBlIDogaGV4RXNjYXBlO1xuXG5cdFx0dmFyIGVzY2FwZUJtcFN5bWJvbCA9IGZ1bmN0aW9uKHN5bWJvbCkge1xuXHRcdFx0cmV0dXJuIGVzY2FwZUNvZGVQb2ludChzeW1ib2wuY2hhckNvZGVBdCgwKSk7XG5cdFx0fTtcblxuXHRcdGlmIChlbmNvZGVFdmVyeXRoaW5nKSB7XG5cdFx0XHQvLyBFbmNvZGUgQVNDSUkgc3ltYm9scy5cblx0XHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4QXNjaWlXaGl0ZWxpc3QsIGZ1bmN0aW9uKHN5bWJvbCkge1xuXHRcdFx0XHQvLyBVc2UgbmFtZWQgcmVmZXJlbmNlcyBpZiByZXF1ZXN0ZWQgJiBwb3NzaWJsZS5cblx0XHRcdFx0aWYgKHVzZU5hbWVkUmVmZXJlbmNlcyAmJiBoYXMoZW5jb2RlTWFwLCBzeW1ib2wpKSB7XG5cdFx0XHRcdFx0cmV0dXJuICcmJyArIGVuY29kZU1hcFtzeW1ib2xdICsgJzsnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBlc2NhcGVCbXBTeW1ib2woc3ltYm9sKTtcblx0XHRcdH0pO1xuXHRcdFx0Ly8gU2hvcnRlbiBhIGZldyBlc2NhcGVzIHRoYXQgcmVwcmVzZW50IHR3byBzeW1ib2xzLCBvZiB3aGljaCBhdCBsZWFzdCBvbmVcblx0XHRcdC8vIGlzIHdpdGhpbiB0aGUgQVNDSUkgcmFuZ2UuXG5cdFx0XHRpZiAodXNlTmFtZWRSZWZlcmVuY2VzKSB7XG5cdFx0XHRcdHN0cmluZyA9IHN0cmluZ1xuXHRcdFx0XHRcdC5yZXBsYWNlKC8mZ3Q7XFx1MjBEMi9nLCAnJm52Z3Q7Jylcblx0XHRcdFx0XHQucmVwbGFjZSgvJmx0O1xcdTIwRDIvZywgJyZudmx0OycpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyYjeDY2OyYjeDZBOy9nLCAnJmZqbGlnOycpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRW5jb2RlIG5vbi1BU0NJSSBzeW1ib2xzLlxuXHRcdFx0aWYgKHVzZU5hbWVkUmVmZXJlbmNlcykge1xuXHRcdFx0XHQvLyBFbmNvZGUgbm9uLUFTQ0lJIHN5bWJvbHMgdGhhdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIG5hbWVkIHJlZmVyZW5jZS5cblx0XHRcdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhFbmNvZGVOb25Bc2NpaSwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRcdFx0Ly8gTm90ZTogdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBgaGFzKGVuY29kZU1hcCwgc3RyaW5nKWAgaGVyZS5cblx0XHRcdFx0XHRyZXR1cm4gJyYnICsgZW5jb2RlTWFwW3N0cmluZ10gKyAnOyc7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTm90ZTogYW55IHJlbWFpbmluZyBub24tQVNDSUkgc3ltYm9scyBhcmUgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBgaWZgLlxuXHRcdH0gZWxzZSBpZiAodXNlTmFtZWRSZWZlcmVuY2VzKSB7XG5cdFx0XHQvLyBBcHBseSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcy5cblx0XHRcdC8vIEVuY29kZSBgPD5cIicmYCB1c2luZyBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcy5cblx0XHRcdGlmICghYWxsb3dVbnNhZmVTeW1ib2xzKSB7XG5cdFx0XHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4RXNjYXBlLCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyYnICsgZW5jb2RlTWFwW3N0cmluZ10gKyAnOyc7IC8vIG5vIG5lZWQgdG8gY2hlY2sgYGhhcygpYCBoZXJlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gU2hvcnRlbiBlc2NhcGVzIHRoYXQgcmVwcmVzZW50IHR3byBzeW1ib2xzLCBvZiB3aGljaCBhdCBsZWFzdCBvbmUgaXNcblx0XHRcdC8vIGA8PlwiJyZgLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nXG5cdFx0XHRcdC5yZXBsYWNlKC8mZ3Q7XFx1MjBEMi9nLCAnJm52Z3Q7Jylcblx0XHRcdFx0LnJlcGxhY2UoLyZsdDtcXHUyMEQyL2csICcmbnZsdDsnKTtcblx0XHRcdC8vIEVuY29kZSBub24tQVNDSUkgc3ltYm9scyB0aGF0IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgbmFtZWQgcmVmZXJlbmNlLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhFbmNvZGVOb25Bc2NpaSwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRcdC8vIE5vdGU6IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgYGhhcyhlbmNvZGVNYXAsIHN0cmluZylgIGhlcmUuXG5cdFx0XHRcdHJldHVybiAnJicgKyBlbmNvZGVNYXBbc3RyaW5nXSArICc7Jztcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoIWFsbG93VW5zYWZlU3ltYm9scykge1xuXHRcdFx0Ly8gRW5jb2RlIGA8PlwiJyZgIHVzaW5nIGhleGFkZWNpbWFsIGVzY2FwZXMsIG5vdyB0aGF0IHRoZXnigJlyZSBub3QgaGFuZGxlZFxuXHRcdFx0Ly8gdXNpbmcgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMuXG5cdFx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleEVzY2FwZSwgZXNjYXBlQm1wU3ltYm9sKTtcblx0XHR9XG5cdFx0cmV0dXJuIHN0cmluZ1xuXHRcdFx0Ly8gRW5jb2RlIGFzdHJhbCBzeW1ib2xzLlxuXHRcdFx0LnJlcGxhY2UocmVnZXhBc3RyYWxTeW1ib2xzLCBmdW5jdGlvbigkMCkge1xuXHRcdFx0XHQvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcblx0XHRcdFx0dmFyIGhpZ2ggPSAkMC5jaGFyQ29kZUF0KDApO1xuXHRcdFx0XHR2YXIgbG93ID0gJDAuY2hhckNvZGVBdCgxKTtcblx0XHRcdFx0dmFyIGNvZGVQb2ludCA9IChoaWdoIC0gMHhEODAwKSAqIDB4NDAwICsgbG93IC0gMHhEQzAwICsgMHgxMDAwMDtcblx0XHRcdFx0cmV0dXJuIGVzY2FwZUNvZGVQb2ludChjb2RlUG9pbnQpO1xuXHRcdFx0fSlcblx0XHRcdC8vIEVuY29kZSBhbnkgcmVtYWluaW5nIEJNUCBzeW1ib2xzIHRoYXQgYXJlIG5vdCBwcmludGFibGUgQVNDSUkgc3ltYm9sc1xuXHRcdFx0Ly8gdXNpbmcgYSBoZXhhZGVjaW1hbCBlc2NhcGUuXG5cdFx0XHQucmVwbGFjZShyZWdleEJtcFdoaXRlbGlzdCwgZXNjYXBlQm1wU3ltYm9sKTtcblx0fTtcblx0Ly8gRXhwb3NlIGRlZmF1bHQgb3B0aW9ucyAoc28gdGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBnbG9iYWxseSkuXG5cdGVuY29kZS5vcHRpb25zID0ge1xuXHRcdCdhbGxvd1Vuc2FmZVN5bWJvbHMnOiBmYWxzZSxcblx0XHQnZW5jb2RlRXZlcnl0aGluZyc6IGZhbHNlLFxuXHRcdCdzdHJpY3QnOiBmYWxzZSxcblx0XHQndXNlTmFtZWRSZWZlcmVuY2VzJzogZmFsc2UsXG5cdFx0J2RlY2ltYWwnIDogZmFsc2Vcblx0fTtcblxuXHR2YXIgZGVjb2RlID0gZnVuY3Rpb24oaHRtbCwgb3B0aW9ucykge1xuXHRcdG9wdGlvbnMgPSBtZXJnZShvcHRpb25zLCBkZWNvZGUub3B0aW9ucyk7XG5cdFx0dmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0O1xuXHRcdGlmIChzdHJpY3QgJiYgcmVnZXhJbnZhbGlkRW50aXR5LnRlc3QoaHRtbCkpIHtcblx0XHRcdHBhcnNlRXJyb3IoJ21hbGZvcm1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlJyk7XG5cdFx0fVxuXHRcdHJldHVybiBodG1sLnJlcGxhY2UocmVnZXhEZWNvZGUsIGZ1bmN0aW9uKCQwLCAkMSwgJDIsICQzLCAkNCwgJDUsICQ2LCAkNywgJDgpIHtcblx0XHRcdHZhciBjb2RlUG9pbnQ7XG5cdFx0XHR2YXIgc2VtaWNvbG9uO1xuXHRcdFx0dmFyIGRlY0RpZ2l0cztcblx0XHRcdHZhciBoZXhEaWdpdHM7XG5cdFx0XHR2YXIgcmVmZXJlbmNlO1xuXHRcdFx0dmFyIG5leHQ7XG5cblx0XHRcdGlmICgkMSkge1xuXHRcdFx0XHRyZWZlcmVuY2UgPSAkMTtcblx0XHRcdFx0Ly8gTm90ZTogdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBgaGFzKGRlY29kZU1hcCwgcmVmZXJlbmNlKWAuXG5cdFx0XHRcdHJldHVybiBkZWNvZGVNYXBbcmVmZXJlbmNlXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCQyKSB7XG5cdFx0XHRcdC8vIERlY29kZSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcyB3aXRob3V0IHRyYWlsaW5nIGA7YCwgZS5nLiBgJmFtcGAuXG5cdFx0XHRcdC8vIFRoaXMgaXMgb25seSBhIHBhcnNlIGVycm9yIGlmIGl0IGdldHMgY29udmVydGVkIHRvIGAmYCwgb3IgaWYgaXQgaXNcblx0XHRcdFx0Ly8gZm9sbG93ZWQgYnkgYD1gIGluIGFuIGF0dHJpYnV0ZSBjb250ZXh0LlxuXHRcdFx0XHRyZWZlcmVuY2UgPSAkMjtcblx0XHRcdFx0bmV4dCA9ICQzO1xuXHRcdFx0XHRpZiAobmV4dCAmJiBvcHRpb25zLmlzQXR0cmlidXRlVmFsdWUpIHtcblx0XHRcdFx0XHRpZiAoc3RyaWN0ICYmIG5leHQgPT0gJz0nKSB7XG5cdFx0XHRcdFx0XHRwYXJzZUVycm9yKCdgJmAgZGlkIG5vdCBzdGFydCBhIGNoYXJhY3RlciByZWZlcmVuY2UnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuICQwO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChzdHJpY3QpIHtcblx0XHRcdFx0XHRcdHBhcnNlRXJyb3IoXG5cdFx0XHRcdFx0XHRcdCduYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlIHdhcyBub3QgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbidcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIE5vdGU6IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgYGhhcyhkZWNvZGVNYXBMZWdhY3ksIHJlZmVyZW5jZSlgLlxuXHRcdFx0XHRcdHJldHVybiBkZWNvZGVNYXBMZWdhY3lbcmVmZXJlbmNlXSArIChuZXh0IHx8ICcnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoJDQpIHtcblx0XHRcdFx0Ly8gRGVjb2RlIGRlY2ltYWwgZXNjYXBlcywgZS5nLiBgJiMxMTk1NTg7YC5cblx0XHRcdFx0ZGVjRGlnaXRzID0gJDQ7XG5cdFx0XHRcdHNlbWljb2xvbiA9ICQ1O1xuXHRcdFx0XHRpZiAoc3RyaWN0ICYmICFzZW1pY29sb24pIHtcblx0XHRcdFx0XHRwYXJzZUVycm9yKCdjaGFyYWN0ZXIgcmVmZXJlbmNlIHdhcyBub3QgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvZGVQb2ludCA9IHBhcnNlSW50KGRlY0RpZ2l0cywgMTApO1xuXHRcdFx0XHRyZXR1cm4gY29kZVBvaW50VG9TeW1ib2woY29kZVBvaW50LCBzdHJpY3QpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoJDYpIHtcblx0XHRcdFx0Ly8gRGVjb2RlIGhleGFkZWNpbWFsIGVzY2FwZXMsIGUuZy4gYCYjeDFEMzA2O2AuXG5cdFx0XHRcdGhleERpZ2l0cyA9ICQ2O1xuXHRcdFx0XHRzZW1pY29sb24gPSAkNztcblx0XHRcdFx0aWYgKHN0cmljdCAmJiAhc2VtaWNvbG9uKSB7XG5cdFx0XHRcdFx0cGFyc2VFcnJvcignY2hhcmFjdGVyIHJlZmVyZW5jZSB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb2RlUG9pbnQgPSBwYXJzZUludChoZXhEaWdpdHMsIDE2KTtcblx0XHRcdFx0cmV0dXJuIGNvZGVQb2ludFRvU3ltYm9sKGNvZGVQb2ludCwgc3RyaWN0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgd2XigJlyZSBzdGlsbCBoZXJlLCBgaWYgKCQ3KWAgaXMgaW1wbGllZDsgaXTigJlzIGFuIGFtYmlndW91c1xuXHRcdFx0Ly8gYW1wZXJzYW5kIGZvciBzdXJlLiBodHRwczovL210aHMuYmUvbm90ZXMvYW1iaWd1b3VzLWFtcGVyc2FuZHNcblx0XHRcdGlmIChzdHJpY3QpIHtcblx0XHRcdFx0cGFyc2VFcnJvcihcblx0XHRcdFx0XHQnbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZSB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24nXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gJDA7XG5cdFx0fSk7XG5cdH07XG5cdC8vIEV4cG9zZSBkZWZhdWx0IG9wdGlvbnMgKHNvIHRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gZ2xvYmFsbHkpLlxuXHRkZWNvZGUub3B0aW9ucyA9IHtcblx0XHQnaXNBdHRyaWJ1dGVWYWx1ZSc6IGZhbHNlLFxuXHRcdCdzdHJpY3QnOiBmYWxzZVxuXHR9O1xuXG5cdHZhciBlc2NhcGUgPSBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVnZXhFc2NhcGUsIGZ1bmN0aW9uKCQwKSB7XG5cdFx0XHQvLyBOb3RlOiB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGBoYXMoZXNjYXBlTWFwLCAkMClgIGhlcmUuXG5cdFx0XHRyZXR1cm4gZXNjYXBlTWFwWyQwXTtcblx0XHR9KTtcblx0fTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHR2YXIgaGUgPSB7XG5cdFx0J3ZlcnNpb24nOiAnMS4yLjAnLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZXNjYXBlJzogZXNjYXBlLFxuXHRcdCd1bmVzY2FwZSc6IGRlY29kZVxuXHR9O1xuXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGhlO1xuXHRcdH0pO1xuXHR9XHRlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiAhZnJlZUV4cG9ydHMubm9kZVR5cGUpIHtcblx0XHRpZiAoZnJlZU1vZHVsZSkgeyAvLyBpbiBOb2RlLmpzLCBpby5qcywgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBoZTtcblx0XHR9IGVsc2UgeyAvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIGhlKSB7XG5cdFx0XHRcdGhhcyhoZSwga2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IGhlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHsgLy8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxuXHRcdHJvb3QuaGUgPSBoZTtcblx0fVxuXG59KHRoaXMpKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8vIElmIG9iai5oYXNPd25Qcm9wZXJ0eSBoYXMgYmVlbiBvdmVycmlkZGVuLCB0aGVuIGNhbGxpbmdcbi8vIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSB3aWxsIGJyZWFrLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzE3MDdcbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocXMsIHNlcCwgZXEsIG9wdGlvbnMpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIHZhciBvYmogPSB7fTtcblxuICBpZiAodHlwZW9mIHFzICE9PSAnc3RyaW5nJyB8fCBxcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IC9cXCsvZztcbiAgcXMgPSBxcy5zcGxpdChzZXApO1xuXG4gIHZhciBtYXhLZXlzID0gMTAwMDtcbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4S2V5cyA9PT0gJ251bWJlcicpIHtcbiAgICBtYXhLZXlzID0gb3B0aW9ucy5tYXhLZXlzO1xuICB9XG5cbiAgdmFyIGxlbiA9IHFzLmxlbmd0aDtcbiAgLy8gbWF4S2V5cyA8PSAwIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIG5vdCBsaW1pdCBrZXlzIGNvdW50XG4gIGlmIChtYXhLZXlzID4gMCAmJiBsZW4gPiBtYXhLZXlzKSB7XG4gICAgbGVuID0gbWF4S2V5cztcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgeCA9IHFzW2ldLnJlcGxhY2UocmVnZXhwLCAnJTIwJyksXG4gICAgICAgIGlkeCA9IHguaW5kZXhPZihlcSksXG4gICAgICAgIGtzdHIsIHZzdHIsIGssIHY7XG5cbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIGtzdHIgPSB4LnN1YnN0cigwLCBpZHgpO1xuICAgICAgdnN0ciA9IHguc3Vic3RyKGlkeCArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrc3RyID0geDtcbiAgICAgIHZzdHIgPSAnJztcbiAgICB9XG5cbiAgICBrID0gZGVjb2RlVVJJQ29tcG9uZW50KGtzdHIpO1xuICAgIHYgPSBkZWNvZGVVUklDb21wb25lbnQodnN0cik7XG5cbiAgICBpZiAoIWhhc093blByb3BlcnR5KG9iaiwgaykpIHtcbiAgICAgIG9ialtrXSA9IHY7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KG9ialtrXSkpIHtcbiAgICAgIG9ialtrXS5wdXNoKHYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba10gPSBbb2JqW2tdLCB2XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh4cykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyaW5naWZ5UHJpbWl0aXZlID0gZnVuY3Rpb24odikge1xuICBzd2l0Y2ggKHR5cGVvZiB2KSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiB2O1xuXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gdiA/ICd0cnVlJyA6ICdmYWxzZSc7XG5cbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIGlzRmluaXRlKHYpID8gdiA6ICcnO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnJztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHNlcCwgZXEsIG5hbWUpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICBvYmogPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbWFwKG9iamVjdEtleXMob2JqKSwgZnVuY3Rpb24oaykge1xuICAgICAgdmFyIGtzID0gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShrKSkgKyBlcTtcbiAgICAgIGlmIChpc0FycmF5KG9ialtrXSkpIHtcbiAgICAgICAgcmV0dXJuIG1hcChvYmpba10sIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKHYpKTtcbiAgICAgICAgfSkuam9pbihzZXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmpba10pKTtcbiAgICAgIH1cbiAgICB9KS5qb2luKHNlcCk7XG5cbiAgfVxuXG4gIGlmICghbmFtZSkgcmV0dXJuICcnO1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShuYW1lKSkgKyBlcSArXG4gICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9iaikpO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh4cykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbmZ1bmN0aW9uIG1hcCAoeHMsIGYpIHtcbiAgaWYgKHhzLm1hcCkgcmV0dXJuIHhzLm1hcChmKTtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzLnB1c2goZih4c1tpXSwgaSkpO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgcmVzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5kZWNvZGUgPSBleHBvcnRzLnBhcnNlID0gcmVxdWlyZSgnLi9kZWNvZGUnKTtcbmV4cG9ydHMuZW5jb2RlID0gZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL2VuY29kZScpO1xuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoJ3VuZGVyc2NvcmUnLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBnbG9iYWwuXztcbiAgICB2YXIgZXhwb3J0cyA9IGdsb2JhbC5fID0gZmFjdG9yeSgpO1xuICAgIGV4cG9ydHMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsgZ2xvYmFsLl8gPSBjdXJyZW50OyByZXR1cm4gZXhwb3J0czsgfTtcbiAgfSgpKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7XG4gIC8vICAgICBVbmRlcnNjb3JlLmpzIDEuMTMuNlxuICAvLyAgICAgaHR0cHM6Ly91bmRlcnNjb3JlanMub3JnXG4gIC8vICAgICAoYykgMjAwOS0yMDIyIEplcmVteSBBc2hrZW5hcywgSnVsaWFuIEdvbmdncmlqcCwgYW5kIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICAvLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIHZhciBWRVJTSU9OID0gJzEuMTMuNic7XG5cbiAgLy8gRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgKGBzZWxmYCkgaW4gdGhlIGJyb3dzZXIsIGBnbG9iYWxgXG4gIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgdmFyIHJvb3QgPSAodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZi5zZWxmID09PSBzZWxmICYmIHNlbGYpIHx8XG4gICAgICAgICAgICAodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgICAgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKSB8fFxuICAgICAgICAgICAge307XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIFN5bWJvbFByb3RvID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wucHJvdG90eXBlIDogbnVsbDtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyIHB1c2ggPSBBcnJheVByb3RvLnB1c2gsXG4gICAgICBzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgICB0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBNb2Rlcm4gZmVhdHVyZSBkZXRlY3Rpb24uXG4gIHZhciBzdXBwb3J0c0FycmF5QnVmZmVyID0gdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyxcbiAgICAgIHN1cHBvcnRzRGF0YVZpZXcgPSB0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnO1xuXG4gIC8vIEFsbCAqKkVDTUFTY3JpcHQgNSsqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhciBuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIG5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cyxcbiAgICAgIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdC5jcmVhdGUsXG4gICAgICBuYXRpdmVJc1ZpZXcgPSBzdXBwb3J0c0FycmF5QnVmZmVyICYmIEFycmF5QnVmZmVyLmlzVmlldztcblxuICAvLyBDcmVhdGUgcmVmZXJlbmNlcyB0byB0aGVzZSBidWlsdGluIGZ1bmN0aW9ucyBiZWNhdXNlIHdlIG92ZXJyaWRlIHRoZW0uXG4gIHZhciBfaXNOYU4gPSBpc05hTixcbiAgICAgIF9pc0Zpbml0ZSA9IGlzRmluaXRlO1xuXG4gIC8vIEtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3QgYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuXG4gIHZhciBoYXNFbnVtQnVnID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoJ3RvU3RyaW5nJyk7XG4gIHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmluZycsXG4gICAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ2hhc093blByb3BlcnR5JywgJ3RvTG9jYWxlU3RyaW5nJ107XG5cbiAgLy8gVGhlIGxhcmdlc3QgaW50ZWdlciB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5LlxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcblxuICAvLyBTb21lIGZ1bmN0aW9ucyB0YWtlIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgb3IgYSBmZXcgZXhwZWN0ZWRcbiAgLy8gYXJndW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZW4gYSB2YXJpYWJsZSBudW1iZXIgb2YgdmFsdWVzIHRvIG9wZXJhdGVcbiAgLy8gb24uIFRoaXMgaGVscGVyIGFjY3VtdWxhdGVzIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIHBhc3QgdGhlIGZ1bmN0aW9u4oCZc1xuICAvLyBhcmd1bWVudCBsZW5ndGggKG9yIGFuIGV4cGxpY2l0IGBzdGFydEluZGV4YCksIGludG8gYW4gYXJyYXkgdGhhdCBiZWNvbWVzXG4gIC8vIHRoZSBsYXN0IGFyZ3VtZW50LiBTaW1pbGFyIHRvIEVTNuKAmXMgXCJyZXN0IHBhcmFtZXRlclwiLlxuICBmdW5jdGlvbiByZXN0QXJndW1lbnRzKGZ1bmMsIHN0YXJ0SW5kZXgpIHtcbiAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKSxcbiAgICAgICAgICByZXN0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpcywgcmVzdCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sIHJlc3QpO1xuICAgICAgfVxuICAgICAgdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICAgIH1cbiAgICAgIGFyZ3Nbc3RhcnRJbmRleF0gPSByZXN0O1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgYW4gb2JqZWN0P1xuICBmdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgKHR5cGUgPT09ICdvYmplY3QnICYmICEhb2JqKTtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgZnVuY3Rpb24gaXNOdWxsKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD9cbiAgZnVuY3Rpb24gaXNVbmRlZmluZWQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIGZ1bmN0aW9uIGlzQm9vbGVhbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0gZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIGZ1bmN0aW9uIGlzRWxlbWVudChvYmopIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMSk7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBgdG9TdHJpbmdgLWJhc2VkIHR5cGUgdGVzdGVyLlxuICBmdW5jdGlvbiB0YWdUZXN0ZXIobmFtZSkge1xuICAgIHZhciB0YWcgPSAnW29iamVjdCAnICsgbmFtZSArICddJztcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSB0YWc7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBpc1N0cmluZyA9IHRhZ1Rlc3RlcignU3RyaW5nJyk7XG5cbiAgdmFyIGlzTnVtYmVyID0gdGFnVGVzdGVyKCdOdW1iZXInKTtcblxuICB2YXIgaXNEYXRlID0gdGFnVGVzdGVyKCdEYXRlJyk7XG5cbiAgdmFyIGlzUmVnRXhwID0gdGFnVGVzdGVyKCdSZWdFeHAnKTtcblxuICB2YXIgaXNFcnJvciA9IHRhZ1Rlc3RlcignRXJyb3InKTtcblxuICB2YXIgaXNTeW1ib2wgPSB0YWdUZXN0ZXIoJ1N5bWJvbCcpO1xuXG4gIHZhciBpc0FycmF5QnVmZmVyID0gdGFnVGVzdGVyKCdBcnJheUJ1ZmZlcicpO1xuXG4gIHZhciBpc0Z1bmN0aW9uID0gdGFnVGVzdGVyKCdGdW5jdGlvbicpO1xuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSBgdHlwZW9mYCBidWdzIGluIG9sZFxuICAvLyB2OCwgSUUgMTEgKCMxNjIxKSwgU2FmYXJpIDggKCMxOTI5KSwgYW5kIFBoYW50b21KUyAoIzIyMzYpLlxuICB2YXIgbm9kZWxpc3QgPSByb290LmRvY3VtZW50ICYmIHJvb3QuZG9jdW1lbnQuY2hpbGROb2RlcztcbiAgaWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdvYmplY3QnICYmIHR5cGVvZiBub2RlbGlzdCAhPSAnZnVuY3Rpb24nKSB7XG4gICAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGlzRnVuY3Rpb24kMSA9IGlzRnVuY3Rpb247XG5cbiAgdmFyIGhhc09iamVjdFRhZyA9IHRhZ1Rlc3RlcignT2JqZWN0Jyk7XG5cbiAgLy8gSW4gSUUgMTAgLSBFZGdlIDEzLCBgRGF0YVZpZXdgIGhhcyBzdHJpbmcgdGFnIGAnW29iamVjdCBPYmplY3RdJ2AuXG4gIC8vIEluIElFIDExLCB0aGUgbW9zdCBjb21tb24gYW1vbmcgdGhlbSwgdGhpcyBwcm9ibGVtIGFsc28gYXBwbGllcyB0b1xuICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YC5cbiAgdmFyIGhhc1N0cmluZ1RhZ0J1ZyA9IChcbiAgICAgICAgc3VwcG9ydHNEYXRhVmlldyAmJiBoYXNPYmplY3RUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSkpXG4gICAgICApLFxuICAgICAgaXNJRTExID0gKHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnICYmIGhhc09iamVjdFRhZyhuZXcgTWFwKSk7XG5cbiAgdmFyIGlzRGF0YVZpZXcgPSB0YWdUZXN0ZXIoJ0RhdGFWaWV3Jyk7XG5cbiAgLy8gSW4gSUUgMTAgLSBFZGdlIDEzLCB3ZSBuZWVkIGEgZGlmZmVyZW50IGhldXJpc3RpY1xuICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBvYmplY3QgaXMgYSBgRGF0YVZpZXdgLlxuICBmdW5jdGlvbiBpZTEwSXNEYXRhVmlldyhvYmopIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaXNGdW5jdGlvbiQxKG9iai5nZXRJbnQ4KSAmJiBpc0FycmF5QnVmZmVyKG9iai5idWZmZXIpO1xuICB9XG5cbiAgdmFyIGlzRGF0YVZpZXckMSA9IChoYXNTdHJpbmdUYWdCdWcgPyBpZTEwSXNEYXRhVmlldyA6IGlzRGF0YVZpZXcpO1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBgQXJyYXkuaXNBcnJheWAuXG4gIHZhciBpc0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCB0YWdUZXN0ZXIoJ0FycmF5Jyk7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciBga2V5YCBpcyBhbiBvd24gcHJvcGVydHkgbmFtZSBvZiBgb2JqYC5cbiAgZnVuY3Rpb24gaGFzJDEob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH1cblxuICB2YXIgaXNBcmd1bWVudHMgPSB0YWdUZXN0ZXIoJ0FyZ3VtZW50cycpO1xuXG4gIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2YgdGhlIG1ldGhvZCBpbiBicm93c2VycyAoYWhlbSwgSUUgPCA5KSwgd2hlcmVcbiAgLy8gdGhlcmUgaXNuJ3QgYW55IGluc3BlY3RhYmxlIFwiQXJndW1lbnRzXCIgdHlwZS5cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGlmICghaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgICAgaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIGhhcyQxKG9iaiwgJ2NhbGxlZScpO1xuICAgICAgfTtcbiAgICB9XG4gIH0oKSk7XG5cbiAgdmFyIGlzQXJndW1lbnRzJDEgPSBpc0FyZ3VtZW50cztcblxuICAvLyBJcyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XG4gIGZ1bmN0aW9uIGlzRmluaXRlJDEob2JqKSB7XG4gICAgcmV0dXJuICFpc1N5bWJvbChvYmopICYmIF9pc0Zpbml0ZShvYmopICYmICFpc05hTihwYXJzZUZsb2F0KG9iaikpO1xuICB9XG5cbiAgLy8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gP1xuICBmdW5jdGlvbiBpc05hTiQxKG9iaikge1xuICAgIHJldHVybiBpc051bWJlcihvYmopICYmIF9pc05hTihvYmopO1xuICB9XG5cbiAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb24uIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIGZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH1cblxuICAvLyBDb21tb24gaW50ZXJuYWwgbG9naWMgZm9yIGBpc0FycmF5TGlrZWAgYW5kIGBpc0J1ZmZlckxpa2VgLlxuICBmdW5jdGlvbiBjcmVhdGVTaXplUHJvcGVydHlDaGVjayhnZXRTaXplUHJvcGVydHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbikge1xuICAgICAgdmFyIHNpemVQcm9wZXJ0eSA9IGdldFNpemVQcm9wZXJ0eShjb2xsZWN0aW9uKTtcbiAgICAgIHJldHVybiB0eXBlb2Ygc2l6ZVByb3BlcnR5ID09ICdudW1iZXInICYmIHNpemVQcm9wZXJ0eSA+PSAwICYmIHNpemVQcm9wZXJ0eSA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gICAgfVxuICB9XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gdG8gb2J0YWluIHByb3BlcnR5IGBrZXlgIGZyb20gYG9iamAuXG4gIGZ1bmN0aW9uIHNoYWxsb3dQcm9wZXJ0eShrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIG9idGFpbiB0aGUgYGJ5dGVMZW5ndGhgIHByb3BlcnR5IG9mIGFuIG9iamVjdC5cbiAgdmFyIGdldEJ5dGVMZW5ndGggPSBzaGFsbG93UHJvcGVydHkoJ2J5dGVMZW5ndGgnKTtcblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2Ugc2hvdWxkIHNwZW5kIGV4dGVuc2l2ZSBjaGVja3MgYWdhaW5zdFxuICAvLyBgQXJyYXlCdWZmZXJgIGV0IGFsLlxuICB2YXIgaXNCdWZmZXJMaWtlID0gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0Qnl0ZUxlbmd0aCk7XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIHR5cGVkIGFycmF5P1xuICB2YXIgdHlwZWRBcnJheVBhdHRlcm4gPSAvXFxbb2JqZWN0ICgoSXxVaSludCg4fDE2fDMyKXxGbG9hdCgzMnw2NCl8VWludDhDbGFtcGVkfEJpZyhJfFVpKW50NjQpQXJyYXlcXF0vO1xuICBmdW5jdGlvbiBpc1R5cGVkQXJyYXkob2JqKSB7XG4gICAgLy8gYEFycmF5QnVmZmVyLmlzVmlld2AgaXMgdGhlIG1vc3QgZnV0dXJlLXByb29mLCBzbyB1c2UgaXQgd2hlbiBhdmFpbGFibGUuXG4gICAgLy8gT3RoZXJ3aXNlLCBmYWxsIGJhY2sgb24gdGhlIGFib3ZlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICByZXR1cm4gbmF0aXZlSXNWaWV3ID8gKG5hdGl2ZUlzVmlldyhvYmopICYmICFpc0RhdGFWaWV3JDEob2JqKSkgOlxuICAgICAgICAgICAgICAgICAgaXNCdWZmZXJMaWtlKG9iaikgJiYgdHlwZWRBcnJheVBhdHRlcm4udGVzdCh0b1N0cmluZy5jYWxsKG9iaikpO1xuICB9XG5cbiAgdmFyIGlzVHlwZWRBcnJheSQxID0gc3VwcG9ydHNBcnJheUJ1ZmZlciA/IGlzVHlwZWRBcnJheSA6IGNvbnN0YW50KGZhbHNlKTtcblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gb2J0YWluIHRoZSBgbGVuZ3RoYCBwcm9wZXJ0eSBvZiBhbiBvYmplY3QuXG4gIHZhciBnZXRMZW5ndGggPSBzaGFsbG93UHJvcGVydHkoJ2xlbmd0aCcpO1xuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBjcmVhdGUgYSBzaW1wbGUgbG9va3VwIHN0cnVjdHVyZS5cbiAgLy8gYGNvbGxlY3ROb25FbnVtUHJvcHNgIHVzZWQgdG8gZGVwZW5kIG9uIGBfLmNvbnRhaW5zYCwgYnV0IHRoaXMgbGVkIHRvXG4gIC8vIGNpcmN1bGFyIGltcG9ydHMuIGBlbXVsYXRlZFNldGAgaXMgYSBvbmUtb2ZmIHNvbHV0aW9uIHRoYXQgb25seSB3b3JrcyBmb3JcbiAgLy8gYXJyYXlzIG9mIHN0cmluZ3MuXG4gIGZ1bmN0aW9uIGVtdWxhdGVkU2V0KGtleXMpIHtcbiAgICB2YXIgaGFzaCA9IHt9O1xuICAgIGZvciAodmFyIGwgPSBrZXlzLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyArK2kpIGhhc2hba2V5c1tpXV0gPSB0cnVlO1xuICAgIHJldHVybiB7XG4gICAgICBjb250YWluczogZnVuY3Rpb24oa2V5KSB7IHJldHVybiBoYXNoW2tleV0gPT09IHRydWU7IH0sXG4gICAgICBwdXNoOiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaGFzaFtrZXldID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGtleXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBJbnRlcm5hbCBoZWxwZXIuIENoZWNrcyBga2V5c2AgZm9yIHRoZSBwcmVzZW5jZSBvZiBrZXlzIGluIElFIDwgOSB0aGF0IHdvbid0XG4gIC8vIGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLiBFeHRlbmRzIGBrZXlzYCBpbiBwbGFjZSBpZlxuICAvLyBuZWVkZWQuXG4gIGZ1bmN0aW9uIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKSB7XG4gICAga2V5cyA9IGVtdWxhdGVkU2V0KGtleXMpO1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gKGlzRnVuY3Rpb24kMShjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJvdG90eXBlKSB8fCBPYmpQcm90bztcblxuICAgIC8vIENvbnN0cnVjdG9yIGlzIGEgc3BlY2lhbCBjYXNlLlxuICAgIHZhciBwcm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgICBpZiAoaGFzJDEob2JqLCBwcm9wKSAmJiAha2V5cy5jb250YWlucyhwcm9wKSkga2V5cy5wdXNoKHByb3ApO1xuXG4gICAgd2hpbGUgKG5vbkVudW1JZHgtLSkge1xuICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTtcbiAgICAgIGlmIChwcm9wIGluIG9iaiAmJiBvYmpbcHJvcF0gIT09IHByb3RvW3Byb3BdICYmICFrZXlzLmNvbnRhaW5zKHByb3ApKSB7XG4gICAgICAgIGtleXMucHVzaChwcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2AuXG4gIGZ1bmN0aW9uIGtleXMob2JqKSB7XG4gICAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoaGFzJDEob2JqLCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBmdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgLy8gU2tpcCB0aGUgbW9yZSBleHBlbnNpdmUgYHRvU3RyaW5nYC1iYXNlZCB0eXBlIGNoZWNrcyBpZiBgb2JqYCBoYXMgbm9cbiAgICAvLyBgLmxlbmd0aGAuXG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChvYmopO1xuICAgIGlmICh0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIChcbiAgICAgIGlzQXJyYXkob2JqKSB8fCBpc1N0cmluZyhvYmopIHx8IGlzQXJndW1lbnRzJDEob2JqKVxuICAgICkpIHJldHVybiBsZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIGdldExlbmd0aChrZXlzKG9iaikpID09PSAwO1xuICB9XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIGZ1bmN0aW9uIGlzTWF0Y2gob2JqZWN0LCBhdHRycykge1xuICAgIHZhciBfa2V5cyA9IGtleXMoYXR0cnMpLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gIWxlbmd0aDtcbiAgICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IF9rZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdCBjYW5cbiAgLy8gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMgb2YgYWxsIGZ1bmN0aW9ucyBhZGRlZFxuICAvLyB0aHJvdWdoIGBfLm1peGluYC4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuICBmdW5jdGlvbiBfJDEob2JqKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIF8kMSkgcmV0dXJuIG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXyQxKSkgcmV0dXJuIG5ldyBfJDEob2JqKTtcbiAgICB0aGlzLl93cmFwcGVkID0gb2JqO1xuICB9XG5cbiAgXyQxLlZFUlNJT04gPSBWRVJTSU9OO1xuXG4gIC8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0LlxuICBfJDEucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3hpZXMgZm9yIHNvbWUgbWV0aG9kcyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zXG4gIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uXG4gIF8kMS5wcm90b3R5cGUudmFsdWVPZiA9IF8kMS5wcm90b3R5cGUudG9KU09OID0gXyQxLnByb3RvdHlwZS52YWx1ZTtcblxuICBfJDEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLl93cmFwcGVkKTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byB3cmFwIG9yIHNoYWxsb3ctY29weSBhbiBBcnJheUJ1ZmZlcixcbiAgLy8gdHlwZWQgYXJyYXkgb3IgRGF0YVZpZXcgdG8gYSBuZXcgdmlldywgcmV1c2luZyB0aGUgYnVmZmVyLlxuICBmdW5jdGlvbiB0b0J1ZmZlclZpZXcoYnVmZmVyU291cmNlKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFxuICAgICAgYnVmZmVyU291cmNlLmJ1ZmZlciB8fCBidWZmZXJTb3VyY2UsXG4gICAgICBidWZmZXJTb3VyY2UuYnl0ZU9mZnNldCB8fCAwLFxuICAgICAgZ2V0Qnl0ZUxlbmd0aChidWZmZXJTb3VyY2UpXG4gICAgKTtcbiAgfVxuXG4gIC8vIFdlIHVzZSB0aGlzIHN0cmluZyB0d2ljZSwgc28gZ2l2ZSBpdCBhIG5hbWUgZm9yIG1pbmlmaWNhdGlvbi5cbiAgdmFyIHRhZ0RhdGFWaWV3ID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYF8uaXNFcXVhbGAuXG4gIGZ1bmN0aW9uIGVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAgIC8vIFNlZSB0aGUgW0hhcm1vbnkgYGVnYWxgIHByb3Bvc2FsXShodHRwczovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gICAgLy8gRXhoYXVzdCBwcmltaXRpdmUgY2hlY2tzXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgYTtcbiAgICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBfLmlzRXF1YWxgLlxuICBmdW5jdGlvbiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAgICBpZiAoYSBpbnN0YW5jZW9mIF8kMSkgYSA9IGEuX3dyYXBwZWQ7XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBfJDEpIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIFdvcmsgYXJvdW5kIGEgYnVnIGluIElFIDEwIC0gRWRnZSAxMy5cbiAgICBpZiAoaGFzU3RyaW5nVGFnQnVnICYmIGNsYXNzTmFtZSA9PSAnW29iamVjdCBPYmplY3RdJyAmJiBpc0RhdGFWaWV3JDEoYSkpIHtcbiAgICAgIGlmICghaXNEYXRhVmlldyQxKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgICBjbGFzc05hbWUgPSB0YWdEYXRhVmlldztcbiAgICB9XG4gICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgIC8vIFRoZXNlIHR5cGVzIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncyBmb3IgY29tcGFyaXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAnL2EvaScpXG4gICAgICBjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5nKFwiNVwiKWAuXG4gICAgICAgIHJldHVybiAnJyArIGEgPT09ICcnICsgYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOLlxuICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAgICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9yIG90aGVyIG51bWVyaWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDogK2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcbiAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAgIC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC5cbiAgICAgICAgcmV0dXJuICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgU3ltYm9sXSc6XG4gICAgICAgIHJldHVybiBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYSkgPT09IFN5bWJvbFByb3RvLnZhbHVlT2YuY2FsbChiKTtcbiAgICAgIGNhc2UgJ1tvYmplY3QgQXJyYXlCdWZmZXJdJzpcbiAgICAgIGNhc2UgdGFnRGF0YVZpZXc6XG4gICAgICAgIC8vIENvZXJjZSB0byB0eXBlZCBhcnJheSBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLlxuICAgICAgICByZXR1cm4gZGVlcEVxKHRvQnVmZmVyVmlldyhhKSwgdG9CdWZmZXJWaWV3KGIpLCBhU3RhY2ssIGJTdGFjayk7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cyAmJiBpc1R5cGVkQXJyYXkkMShhKSkge1xuICAgICAgICB2YXIgYnl0ZUxlbmd0aCA9IGdldEJ5dGVMZW5ndGgoYSk7XG4gICAgICAgIGlmIChieXRlTGVuZ3RoICE9PSBnZXRCeXRlTGVuZ3RoKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChhLmJ1ZmZlciA9PT0gYi5idWZmZXIgJiYgYS5ieXRlT2Zmc2V0ID09PSBiLmJ5dGVPZmZzZXQpIHJldHVybiB0cnVlO1xuICAgICAgICBhcmVBcnJheXMgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShpc0Z1bmN0aW9uJDEoYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Z1bmN0aW9uJDEoYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBfa2V5cyA9IGtleXMoYSksIGtleTtcbiAgICAgIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChrZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICAgIGtleSA9IF9rZXlzW2xlbmd0aF07XG4gICAgICAgIGlmICghKGhhcyQxKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgpO1xuICAgIGJTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBmdW5jdGlvbiBpc0VxdWFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXEoYSwgYik7XG4gIH1cblxuICAvLyBSZXRyaWV2ZSBhbGwgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0LlxuICBmdW5jdGlvbiBhbGxLZXlzKG9iaikge1xuICAgIGlmICghaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH1cblxuICAvLyBTaW5jZSB0aGUgcmVndWxhciBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgdHlwZSB0ZXN0cyBkb24ndCB3b3JrIGZvclxuICAvLyBzb21lIHR5cGVzIGluIElFIDExLCB3ZSB1c2UgYSBmaW5nZXJwcmludGluZyBoZXVyaXN0aWMgaW5zdGVhZCwgYmFzZWRcbiAgLy8gb24gdGhlIG1ldGhvZHMuIEl0J3Mgbm90IGdyZWF0LCBidXQgaXQncyB0aGUgYmVzdCB3ZSBnb3QuXG4gIC8vIFRoZSBmaW5nZXJwcmludCBtZXRob2QgbGlzdHMgYXJlIGRlZmluZWQgYmVsb3cuXG4gIGZ1bmN0aW9uIGllMTFmaW5nZXJwcmludChtZXRob2RzKSB7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChtZXRob2RzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIGBNYXBgLCBgV2Vha01hcGAgYW5kIGBTZXRgIGhhdmUgbm8gZW51bWVyYWJsZSBrZXlzLlxuICAgICAgdmFyIGtleXMgPSBhbGxLZXlzKG9iaik7XG4gICAgICBpZiAoZ2V0TGVuZ3RoKGtleXMpKSByZXR1cm4gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNGdW5jdGlvbiQxKG9ialttZXRob2RzW2ldXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHdlIGFyZSB0ZXN0aW5nIGFnYWluc3QgYFdlYWtNYXBgLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0XG4gICAgICAvLyBgb2JqYCBkb2Vzbid0IGhhdmUgYSBgZm9yRWFjaGAgbWV0aG9kIGluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoXG4gICAgICAvLyBpdCBmcm9tIGEgcmVndWxhciBgTWFwYC5cbiAgICAgIHJldHVybiBtZXRob2RzICE9PSB3ZWFrTWFwTWV0aG9kcyB8fCAhaXNGdW5jdGlvbiQxKG9ialtmb3JFYWNoTmFtZV0pO1xuICAgIH07XG4gIH1cblxuICAvLyBJbiB0aGUgaW50ZXJlc3Qgb2YgY29tcGFjdCBtaW5pZmljYXRpb24sIHdlIHdyaXRlXG4gIC8vIGVhY2ggc3RyaW5nIGluIHRoZSBmaW5nZXJwcmludHMgb25seSBvbmNlLlxuICB2YXIgZm9yRWFjaE5hbWUgPSAnZm9yRWFjaCcsXG4gICAgICBoYXNOYW1lID0gJ2hhcycsXG4gICAgICBjb21tb25Jbml0ID0gWydjbGVhcicsICdkZWxldGUnXSxcbiAgICAgIG1hcFRhaWwgPSBbJ2dldCcsIGhhc05hbWUsICdzZXQnXTtcblxuICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YCBlYWNoIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50XG4gIC8vIGNvbWJpbmF0aW9ucyBvZiB0aGUgYWJvdmUgc3VibGlzdHMuXG4gIHZhciBtYXBNZXRob2RzID0gY29tbW9uSW5pdC5jb25jYXQoZm9yRWFjaE5hbWUsIG1hcFRhaWwpLFxuICAgICAgd2Vha01hcE1ldGhvZHMgPSBjb21tb25Jbml0LmNvbmNhdChtYXBUYWlsKSxcbiAgICAgIHNldE1ldGhvZHMgPSBbJ2FkZCddLmNvbmNhdChjb21tb25Jbml0LCBmb3JFYWNoTmFtZSwgaGFzTmFtZSk7XG5cbiAgdmFyIGlzTWFwID0gaXNJRTExID8gaWUxMWZpbmdlcnByaW50KG1hcE1ldGhvZHMpIDogdGFnVGVzdGVyKCdNYXAnKTtcblxuICB2YXIgaXNXZWFrTWFwID0gaXNJRTExID8gaWUxMWZpbmdlcnByaW50KHdlYWtNYXBNZXRob2RzKSA6IHRhZ1Rlc3RlcignV2Vha01hcCcpO1xuXG4gIHZhciBpc1NldCA9IGlzSUUxMSA/IGllMTFmaW5nZXJwcmludChzZXRNZXRob2RzKSA6IHRhZ1Rlc3RlcignU2V0Jyk7XG5cbiAgdmFyIGlzV2Vha1NldCA9IHRhZ1Rlc3RlcignV2Vha1NldCcpO1xuXG4gIC8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5cbiAgZnVuY3Rpb24gdmFsdWVzKG9iaikge1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0gX2tleXMubGVuZ3RoO1xuICAgIHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtfa2V5c1tpXV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICAvLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbiAgLy8gVGhlIG9wcG9zaXRlIG9mIGBfLm9iamVjdGAgd2l0aCBvbmUgYXJndW1lbnQuXG4gIGZ1bmN0aW9uIHBhaXJzKG9iaikge1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0gX2tleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBbX2tleXNbaV0sIG9ialtfa2V5c1tpXV1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG4gIH1cblxuICAvLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG4gIGZ1bmN0aW9uIGludmVydChvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIF9rZXlzID0ga2V5cyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtfa2V5c1tpXV1dID0gX2tleXNbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXG4gIGZ1bmN0aW9uIGZ1bmN0aW9ucyhvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoaXNGdW5jdGlvbiQxKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xuICB9XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoa2V5c0Z1bmMsIGRlZmF1bHRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAoZGVmYXVsdHMpIG9iaiA9IE9iamVjdChvYmopO1xuICAgICAgaWYgKGxlbmd0aCA8IDIgfHwgb2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdLFxuICAgICAgICAgICAga2V5cyA9IGtleXNGdW5jKHNvdXJjZSksXG4gICAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKCFkZWZhdWx0cyB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gIH1cblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgdmFyIGV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVyKGFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW5cbiAgLy8gb2JqZWN0KHMpLlxuICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbiAgdmFyIGV4dGVuZE93biA9IGNyZWF0ZUFzc2lnbmVyKGtleXMpO1xuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG4gIHZhciBkZWZhdWx0cyA9IGNyZWF0ZUFzc2lnbmVyKGFsbEtleXMsIHRydWUpO1xuXG4gIC8vIENyZWF0ZSBhIG5ha2VkIGZ1bmN0aW9uIHJlZmVyZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy5cbiAgZnVuY3Rpb24gY3RvcigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKXt9O1xuICB9XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci5cbiAgZnVuY3Rpb24gYmFzZUNyZWF0ZShwcm90b3R5cGUpIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgdmFyIEN0b3IgPSBjdG9yKCk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBnaXZlbiBwcm90b3R5cGUgb2JqZWN0LlxuICAvLyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJlIHByb3ZpZGVkIHRoZW4gdGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuICAvLyBjcmVhdGVkIG9iamVjdC5cbiAgZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChwcm9wcykgZXh0ZW5kT3duKHJlc3VsdCwgcHJvcHMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIGZ1bmN0aW9uIGNsb25lKG9iaikge1xuICAgIGlmICghaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBleHRlbmQoe30sIG9iaik7XG4gIH1cblxuICAvLyBJbnZva2VzIGBpbnRlcmNlcHRvcmAgd2l0aCB0aGUgYG9iamAgYW5kIHRoZW4gcmV0dXJucyBgb2JqYC5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBmdW5jdGlvbiB0YXAob2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGludGVyY2VwdG9yKG9iaik7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBhIChkZWVwKSBwcm9wZXJ0eSBgcGF0aGAgdG8gYXJyYXkuXG4gIC8vIExpa2UgYF8uaXRlcmF0ZWVgLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjdXN0b21pemVkLlxuICBmdW5jdGlvbiB0b1BhdGgkMShwYXRoKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkocGF0aCkgPyBwYXRoIDogW3BhdGhdO1xuICB9XG4gIF8kMS50b1BhdGggPSB0b1BhdGgkMTtcblxuICAvLyBJbnRlcm5hbCB3cmFwcGVyIGZvciBgXy50b1BhdGhgIHRvIGVuYWJsZSBtaW5pZmljYXRpb24uXG4gIC8vIFNpbWlsYXIgdG8gYGNiYCBmb3IgYF8uaXRlcmF0ZWVgLlxuICBmdW5jdGlvbiB0b1BhdGgocGF0aCkge1xuICAgIHJldHVybiBfJDEudG9QYXRoKHBhdGgpO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gb2J0YWluIGEgbmVzdGVkIHByb3BlcnR5IGluIGBvYmpgIGFsb25nIGBwYXRoYC5cbiAgZnVuY3Rpb24gZGVlcEdldChvYmosIHBhdGgpIHtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgICAgb2JqID0gb2JqW3BhdGhbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoID8gb2JqIDogdm9pZCAwO1xuICB9XG5cbiAgLy8gR2V0IHRoZSB2YWx1ZSBvZiB0aGUgKGRlZXApIHByb3BlcnR5IG9uIGBwYXRoYCBmcm9tIGBvYmplY3RgLlxuICAvLyBJZiBhbnkgcHJvcGVydHkgaW4gYHBhdGhgIGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoZSB2YWx1ZSBpc1xuICAvLyBgdW5kZWZpbmVkYCwgcmV0dXJuIGBkZWZhdWx0VmFsdWVgIGluc3RlYWQuXG4gIC8vIFRoZSBgcGF0aGAgaXMgbm9ybWFsaXplZCB0aHJvdWdoIGBfLnRvUGF0aGAuXG4gIGZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciB2YWx1ZSA9IGRlZXBHZXQob2JqZWN0LCB0b1BhdGgocGF0aCkpO1xuICAgIHJldHVybiBpc1VuZGVmaW5lZCh2YWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiB2YWx1ZTtcbiAgfVxuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHkgb25cbiAgLy8gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS4gVW5saWtlIHRoZSBpbnRlcm5hbCBgaGFzYFxuICAvLyBmdW5jdGlvbiwgdGhpcyBwdWJsaWMgdmVyc2lvbiBjYW4gYWxzbyB0cmF2ZXJzZSBuZXN0ZWQgcHJvcGVydGllcy5cbiAgZnVuY3Rpb24gaGFzKG9iaiwgcGF0aCkge1xuICAgIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gICAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBwYXRoW2ldO1xuICAgICAgaWYgKCFoYXMkMShvYmosIGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gISFsZW5ndGg7XG4gIH1cblxuICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLlxuICBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZlxuICAvLyBga2V5OnZhbHVlYCBwYWlycy5cbiAgZnVuY3Rpb24gbWF0Y2hlcihhdHRycykge1xuICAgIGF0dHJzID0gZXh0ZW5kT3duKHt9LCBhdHRycyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIGlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIHBhc3NlZCBhbiBvYmplY3QsIHdpbGwgdHJhdmVyc2UgdGhhdCBvYmplY3TigJlzXG4gIC8vIHByb3BlcnRpZXMgZG93biB0aGUgZ2l2ZW4gYHBhdGhgLCBzcGVjaWZpZWQgYXMgYW4gYXJyYXkgb2Yga2V5cyBvciBpbmRpY2VzLlxuICBmdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gZGVlcEdldChvYmosIHBhdGgpO1xuICAgIH07XG4gIH1cblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50IChmb3IgY3VycmVudCBlbmdpbmVzKSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4gIC8vIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gb3B0aW1pemVDYihmdW5jLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAgIHN3aXRjaCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgLy8gVGhlIDItYXJndW1lbnQgY2FzZSBpcyBvbWl0dGVkIGJlY2F1c2Ugd2XigJlyZSBub3QgdXNpbmcgaXQuXG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGVhY2hcbiAgLy8gZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlciBgXy5pZGVudGl0eWAsXG4gIC8vIGFuIGFyYml0cmFyeSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29yLlxuICBmdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBpZGVudGl0eTtcbiAgICBpZiAoaXNGdW5jdGlvbiQxKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSkgcmV0dXJuIG1hdGNoZXIodmFsdWUpO1xuICAgIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICAvLyBFeHRlcm5hbCB3cmFwcGVyIGZvciBvdXIgY2FsbGJhY2sgZ2VuZXJhdG9yLiBVc2VycyBtYXkgY3VzdG9taXplXG4gIC8vIGBfLml0ZXJhdGVlYCBpZiB0aGV5IHdhbnQgYWRkaXRpb25hbCBwcmVkaWNhdGUvaXRlcmF0ZWUgc2hvcnRoYW5kIHN0eWxlcy5cbiAgLy8gVGhpcyBhYnN0cmFjdGlvbiBoaWRlcyB0aGUgaW50ZXJuYWwtb25seSBgYXJnQ291bnRgIGFyZ3VtZW50LlxuICBmdW5jdGlvbiBpdGVyYXRlZSh2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIEluZmluaXR5KTtcbiAgfVxuICBfJDEuaXRlcmF0ZWUgPSBpdGVyYXRlZTtcblxuICAvLyBUaGUgZnVuY3Rpb24gd2UgY2FsbCBpbnRlcm5hbGx5IHRvIGdlbmVyYXRlIGEgY2FsbGJhY2suIEl0IGludm9rZXNcbiAgLy8gYF8uaXRlcmF0ZWVgIGlmIG92ZXJyaWRkZW4sIG90aGVyd2lzZSBgYmFzZUl0ZXJhdGVlYC5cbiAgZnVuY3Rpb24gY2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKF8kMS5pdGVyYXRlZSAhPT0gaXRlcmF0ZWUpIHJldHVybiBfJDEuaXRlcmF0ZWUodmFsdWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGBpdGVyYXRlZWAgdG8gZWFjaCBlbGVtZW50IG9mIGBvYmpgLlxuICAvLyBJbiBjb250cmFzdCB0byBgXy5tYXBgIGl0IHJldHVybnMgYW4gb2JqZWN0LlxuICBmdW5jdGlvbiBtYXBPYmplY3Qob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gX2tleXMubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0ge307XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5c1tpbmRleF07XG4gICAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9uLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuICBmdW5jdGlvbiBub29wKCl7fVxuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgZnVuY3Rpb24gcHJvcGVydHlPZihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBub29wO1xuICAgIHJldHVybiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gZ2V0KG9iaiwgcGF0aCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioqIHRpbWVzLlxuICBmdW5jdGlvbiB0aW1lcyhuLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkpO1xuICAgIHJldHVybiBhY2N1bTtcbiAgfVxuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgIChpbmNsdXNpdmUpLlxuICBmdW5jdGlvbiByYW5kb20obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9XG5cbiAgLy8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBhbiBpbnRlZ2VyLlxuICB2YXIgbm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBnZW5lcmF0ZSBmdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3NcbiAgLy8gdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIGZ1bmN0aW9uIGNyZWF0ZUVzY2FwZXIobWFwKSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWQuXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsga2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgICB2YXIgdGVzdFJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UpO1xuICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNvdXJjZSwgJ2cnKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgICByZXR1cm4gdGVzdFJlZ2V4cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVyKSA6IHN0cmluZztcbiAgICB9O1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgbGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcblxuICAvLyBGdW5jdGlvbiBmb3IgZXNjYXBpbmcgc3RyaW5ncyB0byBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBfZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuXG4gIC8vIEludGVybmFsIGxpc3Qgb2YgSFRNTCBlbnRpdGllcyBmb3IgdW5lc2NhcGluZy5cbiAgdmFyIHVuZXNjYXBlTWFwID0gaW52ZXJ0KGVzY2FwZU1hcCk7XG5cbiAgLy8gRnVuY3Rpb24gZm9yIHVuZXNjYXBpbmcgc3RyaW5ncyBmcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIF91bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXApO1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycy4gQ2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIHZhciB0ZW1wbGF0ZVNldHRpbmdzID0gXyQxLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGU6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGU6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZTogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGBfLnRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbiAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFcbiAgLy8gc3RyaW5nIGxpdGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wiOiBcIidcIixcbiAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICAnXFxyJzogJ3InLFxuICAgICdcXG4nOiAnbicsXG4gICAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4gIHZhciBlc2NhcGVSZWdFeHAgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAyOHxcXHUyMDI5L2c7XG5cbiAgZnVuY3Rpb24gZXNjYXBlQ2hhcihtYXRjaCkge1xuICAgIHJldHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbiAgfVxuXG4gIC8vIEluIG9yZGVyIHRvIHByZXZlbnQgdGhpcmQtcGFydHkgY29kZSBpbmplY3Rpb24gdGhyb3VnaFxuICAvLyBgXy50ZW1wbGF0ZVNldHRpbmdzLnZhcmlhYmxlYCwgd2UgdGVzdCBpdCBhZ2FpbnN0IHRoZSBmb2xsb3dpbmcgcmVndWxhclxuICAvLyBleHByZXNzaW9uLiBJdCBpcyBpbnRlbnRpb25hbGx5IGEgYml0IG1vcmUgbGliZXJhbCB0aGFuIGp1c3QgbWF0Y2hpbmcgdmFsaWRcbiAgLy8gaWRlbnRpZmllcnMsIGJ1dCBzdGlsbCBwcmV2ZW50cyBwb3NzaWJsZSBsb29waG9sZXMgdGhyb3VnaCBkZWZhdWx0cyBvclxuICAvLyBkZXN0cnVjdHVyaW5nIGFzc2lnbm1lbnQuXG4gIHZhciBiYXJlSWRlbnRpZmllciA9IC9eXFxzKihcXHd8XFwkKStcXHMqJC87XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBmdW5jdGlvbiB0ZW1wbGF0ZSh0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdzID0gZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfJDEudGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChbXG4gICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlXG4gICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xuICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVSZWdFeHAsIGVzY2FwZUNoYXIpO1xuICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgIGlmIChlc2NhcGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUgKyBcIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IG9mZnNldC5cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcbiAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gICAgdmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGU7XG4gICAgaWYgKGFyZ3VtZW50KSB7XG4gICAgICAvLyBJbnN1cmUgYWdhaW5zdCB0aGlyZC1wYXJ0eSBjb2RlIGluamVjdGlvbi4gKENWRS0yMDIxLTIzMzU4KVxuICAgICAgaWYgKCFiYXJlSWRlbnRpZmllci50ZXN0KGFyZ3VtZW50KSkgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndmFyaWFibGUgaXMgbm90IGEgYmFyZSBpZGVudGlmaWVyOiAnICsgYXJndW1lbnRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgICBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xuICAgICAgYXJndW1lbnQgPSAnb2JqJztcbiAgICB9XG5cbiAgICBzb3VyY2UgPSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbixcIiArXG4gICAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XFxuXCIgK1xuICAgICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxuJztcblxuICAgIHZhciByZW5kZXI7XG4gICAgdHJ5IHtcbiAgICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihhcmd1bWVudCwgJ18nLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUuc291cmNlID0gc291cmNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyQxKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgLy8gVHJhdmVyc2VzIHRoZSBjaGlsZHJlbiBvZiBgb2JqYCBhbG9uZyBgcGF0aGAuIElmIGEgY2hpbGQgaXMgYSBmdW5jdGlvbiwgaXRcbiAgLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsXG4gIC8vIGNoaWxkLCBvciBgZmFsbGJhY2tgIGlmIGFueSBjaGlsZCBpcyB1bmRlZmluZWQuXG4gIGZ1bmN0aW9uIHJlc3VsdChvYmosIHBhdGgsIGZhbGxiYWNrKSB7XG4gICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgIHJldHVybiBpc0Z1bmN0aW9uJDEoZmFsbGJhY2spID8gZmFsbGJhY2suY2FsbChvYmopIDogZmFsbGJhY2s7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpbcGF0aFtpXV07XG4gICAgICBpZiAocHJvcCA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHByb3AgPSBmYWxsYmFjaztcbiAgICAgICAgaSA9IGxlbmd0aDsgLy8gRW5zdXJlIHdlIGRvbid0IGNvbnRpbnVlIGl0ZXJhdGluZy5cbiAgICAgIH1cbiAgICAgIG9iaiA9IGlzRnVuY3Rpb24kMShwcm9wKSA/IHByb3AuY2FsbChvYmopIDogcHJvcDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBmdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgICB2YXIgaWQgPSArK2lkQ291bnRlciArICcnO1xuICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkO1xuICB9XG5cbiAgLy8gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBmdW5jdGlvbiBjaGFpbihvYmopIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBfJDEob2JqKTtcbiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYHNvdXJjZUZ1bmNgIGJvdW5kIHRvIGBjb250ZXh0YCB3aXRoIG9wdGlvbmFsXG4gIC8vIGBhcmdzYC4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yIG9yIGFzIGFcbiAgLy8gbm9ybWFsIGZ1bmN0aW9uLlxuICBmdW5jdGlvbiBleGVjdXRlQm91bmQoc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29udGV4dCwgYXJncykge1xuICAgIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgdmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICBpZiAoaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuXG4gIC8vIFBhcnRpYWxseSBhcHBseSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBpdHNcbiAgLy8gYXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFtaWMgYHRoaXNgIGNvbnRleHQuIGBfYCBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vob2xkZXIgYnkgZGVmYXVsdCwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZVxuICAvLyBwcmUtZmlsbGVkLiBTZXQgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgZm9yIGEgY3VzdG9tIHBsYWNlaG9sZGVyIGFyZ3VtZW50LlxuICB2YXIgcGFydGlhbCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgYm91bmRBcmdzKSB7XG4gICAgdmFyIHBsYWNlaG9sZGVyID0gcGFydGlhbC5wbGFjZWhvbGRlcjtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IHBsYWNlaG9sZGVyID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgcGFydGlhbC5wbGFjZWhvbGRlciA9IF8kMTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSkuXG4gIHZhciBiaW5kID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdzKSB7XG4gICAgaWYgKCFpc0Z1bmN0aW9uJDEoZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICAgIHZhciBib3VuZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oY2FsbEFyZ3MpIHtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIGNvbnRleHQsIHRoaXMsIGFyZ3MuY29uY2F0KGNhbGxBcmdzKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9KTtcblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb25cbiAgLy8gc2hvdWxkIGJlIGl0ZXJhdGVkIGFzIGFuIGFycmF5IG9yIGFzIGFuIG9iamVjdC5cbiAgLy8gUmVsYXRlZDogaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoXG4gIC8vIEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG4gIHZhciBpc0FycmF5TGlrZSA9IGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrKGdldExlbmd0aCk7XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLlxuICBmdW5jdGlvbiBmbGF0dGVuJDEoaW5wdXQsIGRlcHRoLCBzdHJpY3QsIG91dHB1dCkge1xuICAgIG91dHB1dCA9IG91dHB1dCB8fCBbXTtcbiAgICBpZiAoIWRlcHRoICYmIGRlcHRoICE9PSAwKSB7XG4gICAgICBkZXB0aCA9IEluZmluaXR5O1xuICAgIH0gZWxzZSBpZiAoZGVwdGggPD0gMCkge1xuICAgICAgcmV0dXJuIG91dHB1dC5jb25jYXQoaW5wdXQpO1xuICAgIH1cbiAgICB2YXIgaWR4ID0gb3V0cHV0Lmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiYgKGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzJDEodmFsdWUpKSkge1xuICAgICAgICAvLyBGbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdC5cbiAgICAgICAgaWYgKGRlcHRoID4gMSkge1xuICAgICAgICAgIGZsYXR0ZW4kMSh2YWx1ZSwgZGVwdGggLSAxLCBzdHJpY3QsIG91dHB1dCk7XG4gICAgICAgICAgaWR4ID0gb3V0cHV0Lmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaiA8IGxlbikgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgdmFyIGJpbmRBbGwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIGtleXMgPSBmbGF0dGVuJDEoa2V5cywgZmFsc2UsIGZhbHNlKTtcbiAgICB2YXIgaW5kZXggPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAoaW5kZXggPCAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgb2JqW2tleV0gPSBiaW5kKG9ialtrZXldLCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9KTtcblxuICAvLyBNZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5nIGl0cyByZXN1bHRzLlxuICBmdW5jdGlvbiBtZW1vaXplKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIWhhcyQxKGNhY2hlLCBhZGRyZXNzKSkgY2FjaGVbYWRkcmVzc10gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gY2FjaGVbYWRkcmVzc107XG4gICAgfTtcbiAgICBtZW1vaXplLmNhY2hlID0ge307XG4gICAgcmV0dXJuIG1lbW9pemU7XG4gIH1cblxuICAvLyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAgdmFyIGRlbGF5ID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfSk7XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIHZhciBkZWZlciA9IHBhcnRpYWwoZGVsYXksIF8kMSwgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuICBmdW5jdGlvbiB0aHJvdHRsZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFyIHRpbWVvdXQsIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuXG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogbm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIHRocm90dGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIF9ub3cgPSBub3coKTtcbiAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBfbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAoX25vdyAtIHByZXZpb3VzKTtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzID0gX25vdztcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdGhyb3R0bGVkLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgcHJldmlvdXMgPSAwO1xuICAgICAgdGltZW91dCA9IGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRocm90dGxlZDtcbiAgfVxuXG4gIC8vIFdoZW4gYSBzZXF1ZW5jZSBvZiBjYWxscyBvZiB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gZW5kcywgdGhlIGFyZ3VtZW50XG4gIC8vIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gVGhlIGVuZCBvZiBhIHNlcXVlbmNlIGlzIGRlZmluZWQgYnkgdGhlIGB3YWl0YFxuICAvLyBwYXJhbWV0ZXIuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdGhlIGFyZ3VtZW50IGZ1bmN0aW9uIHdpbGwgYmVcbiAgLy8gdHJpZ2dlcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlcXVlbmNlIGluc3RlYWQgb2YgYXQgdGhlIGVuZC5cbiAgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgdmFyIHRpbWVvdXQsIHByZXZpb3VzLCBhcmdzLCByZXN1bHQsIGNvbnRleHQ7XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwYXNzZWQgPSBub3coKSAtIHByZXZpb3VzO1xuICAgICAgaWYgKHdhaXQgPiBwYXNzZWQpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBwYXNzZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCBiZWNhdXNlIGBmdW5jYCBjYW4gcmVjdXJzaXZlbHkgaW52b2tlIGBkZWJvdW5jZWRgLlxuICAgICAgICBpZiAoIXRpbWVvdXQpIGFyZ3MgPSBjb250ZXh0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGRlYm91bmNlZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oX2FyZ3MpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IF9hcmdzO1xuICAgICAgcHJldmlvdXMgPSBub3coKTtcbiAgICAgIGlmICghdGltZW91dCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICAgIGlmIChpbW1lZGlhdGUpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgZGVib3VuY2VkLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGltZW91dCA9IGFyZ3MgPSBjb250ZXh0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlYm91bmNlZDtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLFxuICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXG4gIGZ1bmN0aW9uIHdyYXAoZnVuYywgd3JhcHBlcikge1xuICAgIHJldHVybiBwYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5cbiAgZnVuY3Rpb24gbmVnYXRlKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qgb2YgZnVuY3Rpb25zLCBlYWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuXG4gIGZ1bmN0aW9uIGNvbXBvc2UoKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0YXJ0ID0gYXJncy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gc3RhcnQ7XG4gICAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG4gIGZ1bmN0aW9uIGFmdGVyKHRpbWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZVxuICAvLyBOdGggY2FsbC5cbiAgZnVuY3Rpb24gYmVmb3JlKHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIHZhciBvbmNlID0gcGFydGlhbChiZWZvcmUsIDIpO1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmplY3QgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuICBmdW5jdGlvbiBmaW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaiksIGtleTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IF9rZXlzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgLlxuICBmdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgdHJ1dGggdGVzdC5cbiAgdmFyIGZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEpO1xuXG4gIC8vIFJldHVybnMgdGhlIGxhc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG4gIHZhciBmaW5kTGFzdEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xuXG4gIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBmdW5jdGlvbiBzb3J0ZWRJbmRleChhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgYF8uaW5kZXhPZmAgYW5kIGBfLmxhc3RJbmRleE9mYCBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluZGV4RmluZGVyKGRpciwgcHJlZGljYXRlRmluZCwgc29ydGVkSW5kZXgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlkeCkge1xuICAgICAgdmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgaWYgKHR5cGVvZiBpZHggPT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRpciA+IDApIHtcbiAgICAgICAgICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ydGVkSW5kZXggJiYgaWR4ICYmIGxlbmd0aCkge1xuICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XG4gICAgICAgIHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICBpZHggPSBwcmVkaWNhdGVGaW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxlbmd0aCksIGlzTmFOJDEpO1xuICAgICAgICByZXR1cm4gaWR4ID49IDAgPyBpZHggKyBpIDogLTE7XG4gICAgICB9XG4gICAgICBmb3IgKGlkeCA9IGRpciA+IDAgPyBpIDogbGVuZ3RoIC0gMTsgaWR4ID49IDAgJiYgaWR4IDwgbGVuZ3RoOyBpZHggKz0gZGlyKSB7XG4gICAgICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXksXG4gIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4gIC8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxuICAvLyBmb3IgKippc1NvcnRlZCoqIHRvIHVzZSBiaW5hcnkgc2VhcmNoLlxuICB2YXIgaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIGZpbmRJbmRleCwgc29ydGVkSW5kZXgpO1xuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LlxuICB2YXIgbGFzdEluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgZmluZExhc3RJbmRleCk7XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuICBmdW5jdGlvbiBmaW5kKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIGtleUZpbmRlciA9IGlzQXJyYXlMaWtlKG9iaikgPyBmaW5kSW5kZXggOiBmaW5kS2V5O1xuICAgIHZhciBrZXkgPSBrZXlGaW5kZXIob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH1cblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBfLmZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdFxuICAvLyBvYmplY3QgY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgZnVuY3Rpb24gZmluZFdoZXJlKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gZmluZChvYmosIG1hdGNoZXIoYXR0cnMpKTtcbiAgfVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSBmb3IgY29sbGVjdGlvbiBmdW5jdGlvbnMsIGFuIGBlYWNoYFxuICAvLyBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBmdW5jdGlvbiBlYWNoKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBpLCBsZW5ndGg7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtfa2V5c1tpXV0sIF9rZXlzW2ldLCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIGZ1bmN0aW9uIG1hcChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoX2tleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBjcmVhdGUgYSByZWR1Y2luZyBmdW5jdGlvbiwgaXRlcmF0aW5nIGxlZnQgb3IgcmlnaHQuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgICAvLyBXcmFwIGNvZGUgdGhhdCByZWFzc2lnbnMgYXJndW1lbnQgdmFyaWFibGVzIGluIGEgc2VwYXJhdGUgZnVuY3Rpb24gdGhhblxuICAgIC8vIHRoZSBvbmUgdGhhdCBhY2Nlc3NlcyBgYXJndW1lbnRzLmxlbmd0aGAgdG8gYXZvaWQgYSBwZXJmIGhpdC4gKCMxOTkxKVxuICAgIHZhciByZWR1Y2VyID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgaW5pdGlhbCkge1xuICAgICAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIGlmICghaW5pdGlhbCkge1xuICAgICAgICBtZW1vID0gb2JqW19rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBkaXI7XG4gICAgICB9XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7XG4gICAgICByZXR1cm4gcmVkdWNlcihvYmosIG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpLCBtZW1vLCBpbml0aWFsKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYWthIGBpbmplY3RgLFxuICAvLyBvciBgZm9sZGxgLlxuICB2YXIgcmVkdWNlID0gY3JlYXRlUmVkdWNlKDEpO1xuXG4gIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxuICB2YXIgcmVkdWNlUmlnaHQgPSBjcmVhdGVSZWR1Y2UoLTEpO1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIGZ1bmN0aW9uIGZpbHRlcihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuICBmdW5jdGlvbiByZWplY3Qob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gZmlsdGVyKG9iaiwgbmVnYXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTtcbiAgfVxuXG4gIC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgcGFzcyBhIHRydXRoIHRlc3QuXG4gIGZ1bmN0aW9uIGV2ZXJ5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuICBmdW5jdGlvbiBzb21lKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxuICBmdW5jdGlvbiBjb250YWlucyhvYmosIGl0ZW0sIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IHZhbHVlcyhvYmopO1xuICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXggPSAwO1xuICAgIHJldHVybiBpbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG4gIHZhciBpbnZva2UgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwgcGF0aCwgYXJncykge1xuICAgIHZhciBjb250ZXh0UGF0aCwgZnVuYztcbiAgICBpZiAoaXNGdW5jdGlvbiQxKHBhdGgpKSB7XG4gICAgICBmdW5jID0gcGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICAgIGNvbnRleHRQYXRoID0gcGF0aC5zbGljZSgwLCAtMSk7XG4gICAgICBwYXRoID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gbWFwKG9iaiwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIG1ldGhvZCA9IGZ1bmM7XG4gICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICBpZiAoY29udGV4dFBhdGggJiYgY29udGV4dFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGV4dCA9IGRlZXBHZXQoY29udGV4dCwgY29udGV4dFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgICAgIG1ldGhvZCA9IGNvbnRleHRbcGF0aF07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWV0aG9kID09IG51bGwgPyBtZXRob2QgOiBtZXRob2QuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8ubWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS5cbiAgZnVuY3Rpb24gcGx1Y2sob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gbWFwKG9iaiwgcHJvcGVydHkoa2V5KSk7XG4gIH1cblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBfLmZpbHRlcmA6IHNlbGVjdGluZyBvbmx5XG4gIC8vIG9iamVjdHMgY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgZnVuY3Rpb24gd2hlcmUob2JqLCBhdHRycykge1xuICAgIHJldHVybiBmaWx0ZXIob2JqLCBtYXRjaGVyKGF0dHJzKSk7XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIGZ1bmN0aW9uIG1heChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgKHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IHZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIGVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IChjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUluZmluaXR5KSkge1xuICAgICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBmdW5jdGlvbiBtaW4ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCB8fCAodHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogdmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwgKGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSkge1xuICAgICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgdmFyIHJlU3RyU3ltYm9sID0gL1teXFx1ZDgwMC1cXHVkZmZmXXxbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdfFtcXHVkODAwLVxcdWRmZmZdL2c7XG4gIGZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoaXNBcnJheShvYmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopO1xuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAvLyBLZWVwIHN1cnJvZ2F0ZSBwYWlyIGNoYXJhY3RlcnMgdG9nZXRoZXIuXG4gICAgICByZXR1cm4gb2JqLm1hdGNoKHJlU3RyU3ltYm9sKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBtYXAob2JqLCBpZGVudGl0eSk7XG4gICAgcmV0dXJuIHZhbHVlcyhvYmopO1xuICB9XG5cbiAgLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1ZXMgZnJvbSBhIGNvbGxlY3Rpb24gdXNpbmcgdGhlIG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuICAvLyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLlxuICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIGZ1bmN0aW9uIHNhbXBsZShvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSB2YWx1ZXMob2JqKTtcbiAgICAgIHJldHVybiBvYmpbcmFuZG9tKG9iai5sZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHZhciBzYW1wbGUgPSB0b0FycmF5KG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChzYW1wbGUpO1xuICAgIG4gPSBNYXRoLm1heChNYXRoLm1pbihuLCBsZW5ndGgpLCAwKTtcbiAgICB2YXIgbGFzdCA9IGxlbmd0aCAtIDE7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG47IGluZGV4KyspIHtcbiAgICAgIHZhciByYW5kID0gcmFuZG9tKGluZGV4LCBsYXN0KTtcbiAgICAgIHZhciB0ZW1wID0gc2FtcGxlW2luZGV4XTtcbiAgICAgIHNhbXBsZVtpbmRleF0gPSBzYW1wbGVbcmFuZF07XG4gICAgICBzYW1wbGVbcmFuZF0gPSB0ZW1wO1xuICAgIH1cbiAgICByZXR1cm4gc2FtcGxlLnNsaWNlKDAsIG4pO1xuICB9XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24uXG4gIGZ1bmN0aW9uIHNodWZmbGUob2JqKSB7XG4gICAgcmV0dXJuIHNhbXBsZShvYmosIEluZmluaXR5KTtcbiAgfVxuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbiAgZnVuY3Rpb24gc29ydEJ5KG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBwbHVjayhtYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBsaXN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGluZGV4OiBpbmRleCsrLFxuICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGtleSwgbGlzdClcbiAgICAgIH07XG4gICAgfSkuc29ydChmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xuICAgICAgdmFyIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA8IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICAgIH0pLCAndmFsdWUnKTtcbiAgfVxuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9yIGFnZ3JlZ2F0ZSBcImdyb3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgZnVuY3Rpb24gZ3JvdXAoYmVoYXZpb3IsIHBhcnRpdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gcGFydGl0aW9uID8gW1tdLCBbXV0gOiB7fTtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBvYmopO1xuICAgICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH1cblxuICAvLyBHcm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlXG4gIC8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY3JpdGVyaW9uLlxuICB2YXIgZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChoYXMkMShyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldLnB1c2godmFsdWUpOyBlbHNlIHJlc3VsdFtrZXldID0gW3ZhbHVlXTtcbiAgfSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLCBzaW1pbGFyIHRvIGBfLmdyb3VwQnlgLCBidXQgZm9yXG4gIC8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1ZS5cbiAgdmFyIGluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgdmFyIGNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoaGFzJDEocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXldID0gMTtcbiAgfSk7XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBwYXNzIHRoZSBnaXZlblxuICAvLyB0cnV0aCB0ZXN0LCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3QgcGFzcyB0aGUgdHJ1dGggdGVzdC5cbiAgdmFyIHBhcnRpdGlvbiA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIHBhc3MpIHtcbiAgICByZXN1bHRbcGFzcyA/IDAgOiAxXS5wdXNoKHZhbHVlKTtcbiAgfSwgdHJ1ZSk7XG5cbiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSBjb2xsZWN0aW9uLlxuICBmdW5jdGlvbiBzaXplKG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iaikgPyBvYmoubGVuZ3RoIDoga2V5cyhvYmopLmxlbmd0aDtcbiAgfVxuXG4gIC8vIEludGVybmFsIGBfLnBpY2tgIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBga2V5YCBpcyBhbiBlbnVtZXJhYmxlXG4gIC8vIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuXG4gIGZ1bmN0aW9uIGtleUluT2JqKHZhbHVlLCBrZXksIG9iaikge1xuICAgIHJldHVybiBrZXkgaW4gb2JqO1xuICB9XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgYWxsb3dlZCBwcm9wZXJ0aWVzLlxuICB2YXIgcGljayA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9LCBpdGVyYXRlZSA9IGtleXNbMF07XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChpc0Z1bmN0aW9uJDEoaXRlcmF0ZWUpKSB7XG4gICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGtleXNbMV0pO1xuICAgICAga2V5cyA9IGFsbEtleXMob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBrZXlJbk9iajtcbiAgICAgIGtleXMgPSBmbGF0dGVuJDEoa2V5cywgZmFsc2UsIGZhbHNlKTtcbiAgICAgIG9iaiA9IE9iamVjdChvYmopO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgIGlmIChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgd2l0aG91dCB0aGUgZGlzYWxsb3dlZCBwcm9wZXJ0aWVzLlxuICB2YXIgb21pdCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gICAgdmFyIGl0ZXJhdGVlID0ga2V5c1swXSwgY29udGV4dDtcbiAgICBpZiAoaXNGdW5jdGlvbiQxKGl0ZXJhdGVlKSkge1xuICAgICAgaXRlcmF0ZWUgPSBuZWdhdGUoaXRlcmF0ZWUpO1xuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgY29udGV4dCA9IGtleXNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBtYXAoZmxhdHRlbiQxKGtleXMsIGZhbHNlLCBmYWxzZSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFjb250YWlucyhrZXlzLCBrZXkpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHBpY2sob2JqLCBpdGVyYXRlZSwgY29udGV4dCk7XG4gIH0pO1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhlIGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuICAvLyB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuICAvLyB0aGUgYXJyYXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLlxuICBmdW5jdGlvbiBpbml0aWFsKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pKSk7XG4gIH1cblxuICAvLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gVGhlICoqZ3VhcmQqKiBjaGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIGZ1bmN0aW9uIGZpcnN0KGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgfHwgZ3VhcmQgPyB2b2lkIDAgOiBbXTtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgcmV0dXJuIGluaXRpYWwoYXJyYXksIGFycmF5Lmxlbmd0aCAtIG4pO1xuICB9XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGBhcnJheWAuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4gIC8vIHRoZSBgYXJndW1lbnRzYCBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm4gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlXG4gIC8vIGBhcnJheWAuXG4gIGZ1bmN0aW9uIHJlc3QoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKTtcbiAgfVxuXG4gIC8vIEdldCB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBsYXN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgZnVuY3Rpb24gbGFzdChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCB8fCBhcnJheS5sZW5ndGggPCAxKSByZXR1cm4gbiA9PSBudWxsIHx8IGd1YXJkID8gdm9pZCAwIDogW107XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiByZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7XG4gIH1cblxuICAvLyBUcmltIG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXkuXG4gIGZ1bmN0aW9uIGNvbXBhY3QoYXJyYXkpIHtcbiAgICByZXR1cm4gZmlsdGVyKGFycmF5LCBCb29sZWFuKTtcbiAgfVxuXG4gIC8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZlbHkgKGJ5IGRlZmF1bHQpLCBvciB1cCB0byBgZGVwdGhgLlxuICAvLyBQYXNzaW5nIGB0cnVlYCBvciBgZmFsc2VgIGFzIGBkZXB0aGAgbWVhbnMgYDFgIG9yIGBJbmZpbml0eWAsIHJlc3BlY3RpdmVseS5cbiAgZnVuY3Rpb24gZmxhdHRlbihhcnJheSwgZGVwdGgpIHtcbiAgICByZXR1cm4gZmxhdHRlbiQxKGFycmF5LCBkZXB0aCwgZmFsc2UpO1xuICB9XG5cbiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuICAvLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuICB2YXIgZGlmZmVyZW5jZSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIHJlc3QpIHtcbiAgICByZXN0ID0gZmxhdHRlbiQxKHJlc3QsIHRydWUsIHRydWUpO1xuICAgIHJldHVybiBmaWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIHJldHVybiAhY29udGFpbnMocmVzdCwgdmFsdWUpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5cbiAgdmFyIHdpdGhvdXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5LCBvdGhlckFycmF5cykge1xuICAgIHJldHVybiBkaWZmZXJlbmNlKGFycmF5LCBvdGhlckFycmF5cyk7XG4gIH0pO1xuXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIHRoZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XG4gIC8vIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gVGhlIGZhc3RlciBhbGdvcml0aG0gd2lsbCBub3Qgd29yayB3aXRoIGFuIGl0ZXJhdGVlIGlmIHRoZSBpdGVyYXRlZVxuICAvLyBpcyBub3QgYSBvbmUtdG8tb25lIGZ1bmN0aW9uLCBzbyBwcm92aWRpbmcgYW4gaXRlcmF0ZWUgd2lsbCBkaXNhYmxlXG4gIC8vIHRoZSBmYXN0ZXIgYWxnb3JpdGhtLlxuICBmdW5jdGlvbiB1bmlxKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoIWlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCAmJiAhaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFjb250YWlucyhzZWVuLCBjb21wdXRlZCkpIHtcbiAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4gIC8vIHRoZSBwYXNzZWQtaW4gYXJyYXlzLlxuICB2YXIgdW5pb24gPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5cykge1xuICAgIHJldHVybiB1bmlxKGZsYXR0ZW4kMShhcnJheXMsIHRydWUsIHRydWUpKTtcbiAgfSk7XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBmdW5jdGlvbiBpbnRlcnNlY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgICBpZiAoY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICB2YXIgajtcbiAgICAgIGZvciAoaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFjb250YWlucyhhcmd1bWVudHNbal0sIGl0ZW0pKSBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIENvbXBsZW1lbnQgb2YgemlwLiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4gIC8vIGVhY2ggYXJyYXkncyBlbGVtZW50cyBvbiBzaGFyZWQgaW5kaWNlcy5cbiAgZnVuY3Rpb24gdW56aXAoYXJyYXkpIHtcbiAgICB2YXIgbGVuZ3RoID0gKGFycmF5ICYmIG1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGgpIHx8IDA7XG4gICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gcGx1Y2soYXJyYXksIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8gYW4gaW5kZXggZ28gdG9nZXRoZXIuXG4gIHZhciB6aXAgPSByZXN0QXJndW1lbnRzKHVuemlwKTtcblxuICAvLyBDb252ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gXG4gIC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuIFBhc3NpbmcgYnkgcGFpcnMgaXMgdGhlIHJldmVyc2Ugb2YgYF8ucGFpcnNgLlxuICBmdW5jdGlvbiBvYmplY3QobGlzdCwgdmFsdWVzKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgobGlzdCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICByZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgYW4gaW50ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZlxuICAvLyB0aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuICAvLyBbdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICBpZiAoc3RvcCA9PSBudWxsKSB7XG4gICAgICBzdG9wID0gc3RhcnQgfHwgMDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBzdGVwID0gc3RvcCA8IHN0YXJ0ID8gLTEgOiAxO1xuICAgIH1cblxuICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7XG4gICAgdmFyIHJhbmdlID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICAgIHJhbmdlW2lkeF0gPSBzdGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICAvLyBDaHVuayBhIHNpbmdsZSBhcnJheSBpbnRvIG11bHRpcGxlIGFycmF5cywgZWFjaCBjb250YWluaW5nIGBjb3VudGAgb3IgZmV3ZXJcbiAgLy8gaXRlbXMuXG4gIGZ1bmN0aW9uIGNodW5rKGFycmF5LCBjb3VudCkge1xuICAgIGlmIChjb3VudCA9PSBudWxsIHx8IGNvdW50IDwgMSkgcmV0dXJuIFtdO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgICAgcmVzdWx0LnB1c2goc2xpY2UuY2FsbChhcnJheSwgaSwgaSArPSBjb3VudCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRzLlxuICBmdW5jdGlvbiBjaGFpblJlc3VsdChpbnN0YW5jZSwgb2JqKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLl9jaGFpbiA/IF8kMShvYmopLmNoYWluKCkgOiBvYmo7XG4gIH1cblxuICAvLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIGZ1bmN0aW9uIG1peGluKG9iaikge1xuICAgIGVhY2goZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gXyQxW25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgXyQxLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IFt0aGlzLl93cmFwcGVkXTtcbiAgICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgZnVuYy5hcHBseShfJDEsIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIF8kMTtcbiAgfVxuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBgQXJyYXlgIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXyQxLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgICBpZiAob2JqICE9IG51bGwpIHtcbiAgICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKChuYW1lID09PSAnc2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmoubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZGVsZXRlIG9ialswXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNoYWluUmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFsbCBhY2Nlc3NvciBgQXJyYXlgIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgZWFjaChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfJDEucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIGlmIChvYmogIT0gbnVsbCkgb2JqID0gbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIE5hbWVkIEV4cG9ydHNcblxuICB2YXIgYWxsRXhwb3J0cyA9IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgVkVSU0lPTjogVkVSU0lPTixcbiAgICByZXN0QXJndW1lbnRzOiByZXN0QXJndW1lbnRzLFxuICAgIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgICBpc051bGw6IGlzTnVsbCxcbiAgICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gICAgaXNCb29sZWFuOiBpc0Jvb2xlYW4sXG4gICAgaXNFbGVtZW50OiBpc0VsZW1lbnQsXG4gICAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICAgIGlzTnVtYmVyOiBpc051bWJlcixcbiAgICBpc0RhdGU6IGlzRGF0ZSxcbiAgICBpc1JlZ0V4cDogaXNSZWdFeHAsXG4gICAgaXNFcnJvcjogaXNFcnJvcixcbiAgICBpc1N5bWJvbDogaXNTeW1ib2wsXG4gICAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgICBpc0RhdGFWaWV3OiBpc0RhdGFWaWV3JDEsXG4gICAgaXNBcnJheTogaXNBcnJheSxcbiAgICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uJDEsXG4gICAgaXNBcmd1bWVudHM6IGlzQXJndW1lbnRzJDEsXG4gICAgaXNGaW5pdGU6IGlzRmluaXRlJDEsXG4gICAgaXNOYU46IGlzTmFOJDEsXG4gICAgaXNUeXBlZEFycmF5OiBpc1R5cGVkQXJyYXkkMSxcbiAgICBpc0VtcHR5OiBpc0VtcHR5LFxuICAgIGlzTWF0Y2g6IGlzTWF0Y2gsXG4gICAgaXNFcXVhbDogaXNFcXVhbCxcbiAgICBpc01hcDogaXNNYXAsXG4gICAgaXNXZWFrTWFwOiBpc1dlYWtNYXAsXG4gICAgaXNTZXQ6IGlzU2V0LFxuICAgIGlzV2Vha1NldDogaXNXZWFrU2V0LFxuICAgIGtleXM6IGtleXMsXG4gICAgYWxsS2V5czogYWxsS2V5cyxcbiAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICBwYWlyczogcGFpcnMsXG4gICAgaW52ZXJ0OiBpbnZlcnQsXG4gICAgZnVuY3Rpb25zOiBmdW5jdGlvbnMsXG4gICAgbWV0aG9kczogZnVuY3Rpb25zLFxuICAgIGV4dGVuZDogZXh0ZW5kLFxuICAgIGV4dGVuZE93bjogZXh0ZW5kT3duLFxuICAgIGFzc2lnbjogZXh0ZW5kT3duLFxuICAgIGRlZmF1bHRzOiBkZWZhdWx0cyxcbiAgICBjcmVhdGU6IGNyZWF0ZSxcbiAgICBjbG9uZTogY2xvbmUsXG4gICAgdGFwOiB0YXAsXG4gICAgZ2V0OiBnZXQsXG4gICAgaGFzOiBoYXMsXG4gICAgbWFwT2JqZWN0OiBtYXBPYmplY3QsXG4gICAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICAgIGNvbnN0YW50OiBjb25zdGFudCxcbiAgICBub29wOiBub29wLFxuICAgIHRvUGF0aDogdG9QYXRoJDEsXG4gICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgIHByb3BlcnR5T2Y6IHByb3BlcnR5T2YsXG4gICAgbWF0Y2hlcjogbWF0Y2hlcixcbiAgICBtYXRjaGVzOiBtYXRjaGVyLFxuICAgIHRpbWVzOiB0aW1lcyxcbiAgICByYW5kb206IHJhbmRvbSxcbiAgICBub3c6IG5vdyxcbiAgICBlc2NhcGU6IF9lc2NhcGUsXG4gICAgdW5lc2NhcGU6IF91bmVzY2FwZSxcbiAgICB0ZW1wbGF0ZVNldHRpbmdzOiB0ZW1wbGF0ZVNldHRpbmdzLFxuICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcbiAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICB1bmlxdWVJZDogdW5pcXVlSWQsXG4gICAgY2hhaW46IGNoYWluLFxuICAgIGl0ZXJhdGVlOiBpdGVyYXRlZSxcbiAgICBwYXJ0aWFsOiBwYXJ0aWFsLFxuICAgIGJpbmQ6IGJpbmQsXG4gICAgYmluZEFsbDogYmluZEFsbCxcbiAgICBtZW1vaXplOiBtZW1vaXplLFxuICAgIGRlbGF5OiBkZWxheSxcbiAgICBkZWZlcjogZGVmZXIsXG4gICAgdGhyb3R0bGU6IHRocm90dGxlLFxuICAgIGRlYm91bmNlOiBkZWJvdW5jZSxcbiAgICB3cmFwOiB3cmFwLFxuICAgIG5lZ2F0ZTogbmVnYXRlLFxuICAgIGNvbXBvc2U6IGNvbXBvc2UsXG4gICAgYWZ0ZXI6IGFmdGVyLFxuICAgIGJlZm9yZTogYmVmb3JlLFxuICAgIG9uY2U6IG9uY2UsXG4gICAgZmluZEtleTogZmluZEtleSxcbiAgICBmaW5kSW5kZXg6IGZpbmRJbmRleCxcbiAgICBmaW5kTGFzdEluZGV4OiBmaW5kTGFzdEluZGV4LFxuICAgIHNvcnRlZEluZGV4OiBzb3J0ZWRJbmRleCxcbiAgICBpbmRleE9mOiBpbmRleE9mLFxuICAgIGxhc3RJbmRleE9mOiBsYXN0SW5kZXhPZixcbiAgICBmaW5kOiBmaW5kLFxuICAgIGRldGVjdDogZmluZCxcbiAgICBmaW5kV2hlcmU6IGZpbmRXaGVyZSxcbiAgICBlYWNoOiBlYWNoLFxuICAgIGZvckVhY2g6IGVhY2gsXG4gICAgbWFwOiBtYXAsXG4gICAgY29sbGVjdDogbWFwLFxuICAgIHJlZHVjZTogcmVkdWNlLFxuICAgIGZvbGRsOiByZWR1Y2UsXG4gICAgaW5qZWN0OiByZWR1Y2UsXG4gICAgcmVkdWNlUmlnaHQ6IHJlZHVjZVJpZ2h0LFxuICAgIGZvbGRyOiByZWR1Y2VSaWdodCxcbiAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICBzZWxlY3Q6IGZpbHRlcixcbiAgICByZWplY3Q6IHJlamVjdCxcbiAgICBldmVyeTogZXZlcnksXG4gICAgYWxsOiBldmVyeSxcbiAgICBzb21lOiBzb21lLFxuICAgIGFueTogc29tZSxcbiAgICBjb250YWluczogY29udGFpbnMsXG4gICAgaW5jbHVkZXM6IGNvbnRhaW5zLFxuICAgIGluY2x1ZGU6IGNvbnRhaW5zLFxuICAgIGludm9rZTogaW52b2tlLFxuICAgIHBsdWNrOiBwbHVjayxcbiAgICB3aGVyZTogd2hlcmUsXG4gICAgbWF4OiBtYXgsXG4gICAgbWluOiBtaW4sXG4gICAgc2h1ZmZsZTogc2h1ZmZsZSxcbiAgICBzYW1wbGU6IHNhbXBsZSxcbiAgICBzb3J0Qnk6IHNvcnRCeSxcbiAgICBncm91cEJ5OiBncm91cEJ5LFxuICAgIGluZGV4Qnk6IGluZGV4QnksXG4gICAgY291bnRCeTogY291bnRCeSxcbiAgICBwYXJ0aXRpb246IHBhcnRpdGlvbixcbiAgICB0b0FycmF5OiB0b0FycmF5LFxuICAgIHNpemU6IHNpemUsXG4gICAgcGljazogcGljayxcbiAgICBvbWl0OiBvbWl0LFxuICAgIGZpcnN0OiBmaXJzdCxcbiAgICBoZWFkOiBmaXJzdCxcbiAgICB0YWtlOiBmaXJzdCxcbiAgICBpbml0aWFsOiBpbml0aWFsLFxuICAgIGxhc3Q6IGxhc3QsXG4gICAgcmVzdDogcmVzdCxcbiAgICB0YWlsOiByZXN0LFxuICAgIGRyb3A6IHJlc3QsXG4gICAgY29tcGFjdDogY29tcGFjdCxcbiAgICBmbGF0dGVuOiBmbGF0dGVuLFxuICAgIHdpdGhvdXQ6IHdpdGhvdXQsXG4gICAgdW5pcTogdW5pcSxcbiAgICB1bmlxdWU6IHVuaXEsXG4gICAgdW5pb246IHVuaW9uLFxuICAgIGludGVyc2VjdGlvbjogaW50ZXJzZWN0aW9uLFxuICAgIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2UsXG4gICAgdW56aXA6IHVuemlwLFxuICAgIHRyYW5zcG9zZTogdW56aXAsXG4gICAgemlwOiB6aXAsXG4gICAgb2JqZWN0OiBvYmplY3QsXG4gICAgcmFuZ2U6IHJhbmdlLFxuICAgIGNodW5rOiBjaHVuayxcbiAgICBtaXhpbjogbWl4aW4sXG4gICAgJ2RlZmF1bHQnOiBfJDFcbiAgfTtcblxuICAvLyBEZWZhdWx0IEV4cG9ydFxuXG4gIC8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgdmFyIF8gPSBtaXhpbihhbGxFeHBvcnRzKTtcbiAgLy8gTGVnYWN5IE5vZGUuanMgQVBJLlxuICBfLl8gPSBfO1xuXG4gIHJldHVybiBfO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5kZXJzY29yZS11bWQuanMubWFwXG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gICAgXCJxYWludGVncmF0aW9uXCI6IDEwMDUwMSxcbiAgICBcImZpbmNoXCI6IDgwMDAwNCxcbiAgICBcInNwYXJyb3dcIjogODAwMDA1XG59XG4iLCJjb25zdCBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuXG4vLyByZWY6IE92ZXJEcml2ZS5UaHVuZGVyLk1vZGVscy5EYXRhTW9kZWxzLkdlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEdlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tZWRpYVR5cGUgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5sYW5ndWFnZSAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5wdWJsaXNoZXJFbnRpdHlJZCAgPSBudWxsOyAvLyBpbnRcbiAgICAgICAgdGhpcy5tYXR1cml0eUxldmVscyAgICAgPSBbXTsgLy8gc3RyaW5nXG4gICAgICAgIHRoaXMuc3ViamVjdHMgICAgICAgICAgID0gW107IC8vIHN0cmluZ1xuICAgICAgICB0aGlzLmJpc2FjQ29kZXMgICAgICAgICA9IFtdO1xuXG4gICAgICAgIHRoaXMuc29ydEJ5ICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMubWF4SXRlbXMgICAgICAgICAgID0gdW5kZWZpbmVkOyAvLyBpbnRcblxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIC4uLmFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gVHJhbnNsYXRlcyBHZW5lcmF0ZWRDb2xsZWN0aW9uRGV0YWlscyBtb2RlbCB0byBwYXJhbWV0ZXJzIHRoYXQgYWxpZ24gd2l0aCB0aGUgTWVkaWFQYXJhbWV0ZXJzIG1vZGVsIGZvciBleGVjdXRpbmcgYSBcInNlYXJjaFwiXG4gICAgc2VyaWFsaXplRm9yU2VhcmNoKCkge1xuICAgICAgICBsZXQgbW9kZWwgPSBfLmV4dGVuZCh7fSwgdGhpcyk7XG5cbiAgICAgICAgLy8gbGFuZ3VhZ2UgaXMgYW4gYXJyYXkgaW4gTWVkaWFQYXJhbWV0ZXJzXG4gICAgICAgIG1vZGVsLmxhbmd1YWdlID0gXyhfLmZsYXR0ZW4oW21vZGVsLmxhbmd1YWdlXSkpLnJlamVjdCgodmFsKSA9PiBfLmlzRW1wdHkodmFsKSk7XG5cbiAgICAgICAgLy8gbWF0dXJpdHlMZXZlbHMgaXMgY2FsbGVkIG1hdHVyaXR5TGV2ZWxcbiAgICAgICAgbW9kZWwubWF0dXJpdHlMZXZlbCA9IF8oXy5mbGF0dGVuKFttb2RlbC5tYXR1cml0eUxldmVsc10pKS5yZWplY3QoKHZhbCkgPT4gXy5pc0VtcHR5KHZhbCkpO1xuICAgICAgICBkZWxldGUgbW9kZWwubWF0dXJpdHlMZXZlbHM7XG5cbiAgICAgICAgLy8gc3ViamVjdHMgaXMgY2FsbGVkIHN1YmplY3RcbiAgICAgICAgbW9kZWwuc3ViamVjdCA9IF8oXy5mbGF0dGVuKFttb2RlbC5zdWJqZWN0c10pKS5yZWplY3QoKHZhbCkgPT4gXy5pc0VtcHR5KHZhbCkpO1xuICAgICAgICBkZWxldGUgbW9kZWwuc3ViamVjdHM7XG5cbiAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2Jpc2FjLWNvbGxlY3Rpb24tZmlsdGVyaW5nJykpIHtcbiAgICAgICAgICAgIG1vZGVsLmJpc2FjQ29kZSA9IF8oXy5mbGF0dGVuKFttb2RlbC5iaXNhY0NvZGVzXSkpLnJlamVjdCgodmFsKSA9PiBfLmlzRW1wdHkodmFsKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kZWwubWVkaWFUeXBlcykge1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ21lZGlhLXR5cGVzLWNvbGxlY3Rpb24tcGFyYW0nKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBtb2RlbC5tZWRpYVR5cGU7XG4gICAgICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG1vZGVsLm1lZGlhVHlwZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kZWwubWVkaWFUeXBlcykge1xuICAgICAgICAgICAgbW9kZWwubWVkaWFUeXBlcyA9ICBtb2RlbC5tZWRpYVR5cGVzLmpvaW4oJywnKTtcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdmaWx0ZXItb3V0LW50YycpKSB7XG4gICAgICAgICAgICBtb2RlbC5tZWRpYVR5cGVzID0gd2luZG93Lk92ZXJEcml2ZS53aGl0ZWxpc3RlZE1lZGlhVHlwZXM7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgbW9kZWwuYmlzYWNDb2RlczsgIC8vIHdlIG5lZWQgdG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgcmVnYXJkbGVzcyBiZWNhdXNlIHRoZSBjb3JyZWN0IHF1ZXJ5IHBhcmFtIGlzIGBiaXNhY0NvZGVgLiAgVGhlIG1pc21hdGNoIGJldHdlZW4gdGhlIHRodW5kZXIgcXVlcnkgcGFyYW1zIGFuZCB0aGUgcHJvcGVydHkgbmFtZXMgaW4gdGhlIGdlbmVyYXRlZCBjb2xsZWN0aW9uIGRlZmluaXRpb25zIGlzLi4uZnVuLlxuXG4gICAgICAgIHJldHVybiBtb2RlbDtcbiAgICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0T3B0aW1pemVkQ292ZXJzID0gdm9pZCAwO1xudmFyIF8gPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInVuZGVyc2NvcmVcIikpO1xuZnVuY3Rpb24gZ2V0T3B0aW1pemVkQ292ZXJzKGNvdmVycywgZGVzaXJlZFNpemUpIHtcbiAgICAvLyBjb3ZlcnNCeVNpemUgaXMgbm93IGFuIGFycmF5IG9mIGNvdmVycywgZnJvbSBzbWFsbGVzdCB0byBsYXJnZXN0XG4gICAgdmFyIGNvdmVyc0J5U2l6ZSA9IF8uc29ydEJ5KGNvdmVycywgJ3dpZHRoJyk7XG4gICAgLy8gU3RhcnQgd2l0aCB0aGUgYmlnZ2VzdCBjb3ZlclxuICAgIC8vIENvcHkgb2JqZWN0IHdpdGggT2JqZWN0LmFzc2lnbigpIHNvIHdlIGRvbnQgZGFtYWdlIHJlZmVyZW5jZVxuICAgIHZhciBvcHRpbWl6ZWRDb3ZlciA9IE9iamVjdC5hc3NpZ24oe30sIF8ubGFzdChjb3ZlcnNCeVNpemUpKTtcbiAgICBpZiAob3B0aW1pemVkQ292ZXIgJiYgb3B0aW1pemVkQ292ZXIuaHJlZikge1xuICAgICAgICB2YXIgbGVnYWN5VG9PcHRpbWl6ZWRJbWFnZUhvc3RzTWFwID0ge1xuICAgICAgICAgICAgJ2h0dHBzOi8vaW1nMS5vZC1jZG4uY29tLyc6ICdodHRwczovL2ljLm9kLWNkbi5jb20vcmVzaXplJyxcbiAgICAgICAgICAgICdodHRwczovL2ltYWdlcy5vdmVyZHJpdmVjaGluYS5jbi8nOiAnaHR0cHM6Ly9pbWFnZXMub3ZlcmRyaXZlY2hpbmEuY24vcmVzaXplJ1xuICAgICAgICB9O1xuICAgICAgICB2YXIgaG9zdE1hcEtleSA9IF8uZmluZChPYmplY3Qua2V5cyhsZWdhY3lUb09wdGltaXplZEltYWdlSG9zdHNNYXApLCBmdW5jdGlvbiAobGVnYWN5KSB7IHJldHVybiBvcHRpbWl6ZWRDb3Zlci5ocmVmLnN0YXJ0c1dpdGgobGVnYWN5KTsgfSk7XG4gICAgICAgIGlmIChob3N0TWFwS2V5KSB7XG4gICAgICAgICAgICAvLyBsb29rIHVwIHRoZSBjb3JyZXNwb25kaW5nIG9wdGltaXplZCByb290LCBlLmcuIGh0dHBzOi8vaW1nMS5vZC1jZG4uY29tLyAtPiBodHRwczovL2ljLm9kLWNkbi5jb20vcmVzaXplXG4gICAgICAgICAgICB2YXIgb3B0aW1pemVkSW1hZ2VIb3N0ID0gbGVnYWN5VG9PcHRpbWl6ZWRJbWFnZUhvc3RzTWFwW2hvc3RNYXBLZXldO1xuICAgICAgICAgICAgdmFyIG9wdGltaXphdGlvbnMgPSAndHlwZT1hdXRvJzsgLy8gZm9ybWF0ID0gYXV0byAtPiB1c2Ugd2VicCBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGl0XG4gICAgICAgICAgICB2YXIgcGF0aCA9ICcnO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAvLyBub2RlLmpzIHVzYWdlIHNob3VsZCBiZSBmaW5lIHdpdGggdGhlIFVSTCBhcGlcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gbmV3IFVSTChvcHRpbWl6ZWRDb3Zlci5ocmVmKTtcbiAgICAgICAgICAgICAgICBwYXRoID0gdXJsLnBhdGhuYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaGFjayB0byBnZXQgdXJsIHBhdGhuYW1lIHNpbmNlIElFIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgVVJMIGFwaS4gIEkgZGlkbid0IHdhbnQgdG8gYWRkIGEgcG9seWZpbGxcbiAgICAgICAgICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICBhLmhyZWYgPSBvcHRpbWl6ZWRDb3Zlci5ocmVmO1xuICAgICAgICAgICAgICAgIHBhdGggPSBhLnBhdGhuYW1lO1xuICAgICAgICAgICAgICAgIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykpIHsgLy8gYnJvd3NlcnMgYXJlIGluY29uc2lzdGVudCBhYm91dCB3aGV0aGVyIHRoZSBwYXRobmFtZSBpbmNsdWRlcyBhIGxlYWRpbmcgc2xhc2gsIGJ1dCB0aGUgY2FjaGVmbHkgYXBpIHJlcXVpcmVzIGV4YWN0bHkgb25lIG9uIHRoZSB1cmwgcGFyYW1cbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFwiL1wiLmNvbmNhdChwYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZW5jb2RlZFNyY1VybCA9IGVuY29kZVVSSUNvbXBvbmVudChwYXRoKTtcbiAgICAgICAgICAgIHZhciBjb3ZlckhyZWZXaXRob3V0U2l6ZSA9IFwiXCIuY29uY2F0KG9wdGltaXplZEltYWdlSG9zdCwgXCI/XCIpLmNvbmNhdChvcHRpbWl6YXRpb25zLCBcIiZ1cmw9XCIpLmNvbmNhdChlbmNvZGVkU3JjVXJsLCBcIiZzdHJpcG1ldGE9dHJ1ZVwiKTtcbiAgICAgICAgICAgIG9wdGltaXplZENvdmVyLmhyZWYgPSBcIlwiLmNvbmNhdChjb3ZlckhyZWZXaXRob3V0U2l6ZSwgXCImd2lkdGg9XCIpLmNvbmNhdChkZXNpcmVkU2l6ZSk7XG4gICAgICAgICAgICBvcHRpbWl6ZWRDb3Zlci5zcmNzZXQgPSBcIlwiLmNvbmNhdChjb3ZlckhyZWZXaXRob3V0U2l6ZSwgXCImd2lkdGg9XCIpLmNvbmNhdChNYXRoLmZsb29yKGRlc2lyZWRTaXplICogMiksIFwiIDJ4LCBcIikgK1xuICAgICAgICAgICAgICAgIFwiXCIuY29uY2F0KGNvdmVySHJlZldpdGhvdXRTaXplLCBcIiZ3aWR0aD1cIikuY29uY2F0KE1hdGguZmxvb3IoZGVzaXJlZFNpemUgKiAxLjUpLCBcIiAxLjV4LCBcIikgK1xuICAgICAgICAgICAgICAgIFwiXCIuY29uY2F0KGNvdmVySHJlZldpdGhvdXRTaXplLCBcIiZ3aWR0aD1cIikuY29uY2F0KGRlc2lyZWRTaXplLCBcIiAxeFwiKTtcbiAgICAgICAgICAgIHJldHVybiBvcHRpbWl6ZWRDb3ZlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXy5maW5kKGNvdmVyc0J5U2l6ZSwgZnVuY3Rpb24gKGNvdmVyKSB7IHJldHVybiBjb3Zlci53aWR0aCA+PSBkZXNpcmVkU2l6ZTsgfSkgfHxcbiAgICAgICAgXy5sYXN0KGNvdmVyc0J5U2l6ZSk7IC8vIGZpbmRzIHRoZSBmaXJzdCBjb3ZlciB0aGF0IGlzIGJpZyBlbm91Z2hcbn1cbmV4cG9ydHMuZ2V0T3B0aW1pemVkQ292ZXJzID0gZ2V0T3B0aW1pemVkQ292ZXJzO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRPcHRpbWl6ZWRDb3Zlci10cy5qcy5tYXBcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0T3B0aW1pemVkQ292ZXItdHMuanMubWFwXG4iLCJjb25zdCB3ZWJzaXRlSWRzID0gcmVxdWlyZSgnbGlnaHRuaW5nLWNvbW1vbi9saWIvY29uZmlndXJhdGlvbi93ZWJzaXRlSWRzLmpzb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmFyeVNpdGUod2Vic2l0ZUlkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgd2Vic2l0ZUlkID09PSB3ZWJzaXRlSWRzLnFhaW50ZWdyYXRpb24gfHxcbiAgICAgICAgKHdlYnNpdGVJZCA+PSA4MDAwMDAgJiYgd2Vic2l0ZUlkIDwgOTAwMDAwKVxuICAgICk7XG59O1xuIiwiY29uc3QgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcblxuLyoqXG4gKiBEZWZpbmVzIGFsbCB0aGUgYXZhaWxhYmxlIGlucHV0IHBhcmFtZXRlcnMgZm9yIHRoZSBtZWRpYSBlbmRwb2ludFxuICogQGNsYXNzIE1lZGlhUGFyYW1ldGVyc1xuICogcmVmOiBodHRwczovL3RodW5kZXIuYXBpLnRlc3Qub3ZlcmRyaXZlLmNvbS9kb2NzL3VpL2luZGV4IyEvTWVkaWEvVjJNZWRpYV9JbmRleE1lZGlhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgTWVkaWFQYXJhbWV0ZXJzIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnF1ZXJ5ICAgICAgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMubWVkaWFUeXBlICAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5tZWRpYVR5cGVzICAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLnRpdGxlICAgICAgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMuc2VyaWVzICAgICAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5wdWJsaXNoZXJJZCAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLnB1Ymxpc2hlckVudGl0eUlkICAgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbXByaW50SWQgICAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLmlkZW50aWZpZXIgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMuY3JlYXRvciAgICAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5jcmVhdG9ySWQgICAgICAgICAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuYWRkZWREYXRlICAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5hdmFpbGFibGVGaXJzdCAgICAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuc2hvd09ubHlBdmFpbGFibGUgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93T25seVByZXJlbGVhc2UgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dPbmx5THVja3lEYXlBdmFpbGFibGUgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzQXVkaW9TeW5jaHJvbml6ZWRUZXh0ICAgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb25JZCAgICAgICAgICAgICAgID0gMDtcblxuICAgICAgICAvLyBBbGwgb2YgdGhlIGZvbGxvd2luZyBhcnJheXMgYXJlIHN0cmluZyBhcnJheXNcbiAgICAgICAgdGhpcy5mb3JtYXQgICAgICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLnN1YmplY3QgICAgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMuYmlzYWNDb2RlICAgICAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5tYXR1cml0eUxldmVsICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmxhbmd1YWdlICAgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMuYXRvc0xldmVsICAgICAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5sZXhpbGVTY29yZSAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmludGVyZXN0TGV2ZWwgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMuZ3JhZGVMZXZlbCAgICAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5pbmNsdWRlZEZhY2V0cyAgICAgICAgICAgICA9IFtdO1xuXG4gICAgICAgIHRoaXMuc29ydEJ5ICAgICAgICAgICAgICAgICAgICAgPSAncmVsZXZhbmNlJztcbiAgICAgICAgdGhpcy5zaG93ICAgICAgICAgICAgICAgICAgICAgICA9ICdvd25lZCc7XG4gICAgICAgIHRoaXMucGFnZSAgICAgICAgICAgICAgICAgICAgICAgPSAxO1xuICAgICAgICB0aGlzLnBlclBhZ2UgICAgICAgICAgICAgICAgICAgID0gMjQ7XG4gICAgICAgIHRoaXMuaW5jbHVkZUZhY2V0cyAgICAgICAgICAgICAgPSB0cnVlO1xuICAgICAgICB0aGlzLmluY2x1ZGVOb0Zvcm1hdFRpdGxlcyAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsdGVyQ3BjVGl0bGVzICAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tYXhJdGVtcyAgICAgICAgICAgICAgICAgICA9IDA7XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCAuLi5hcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGFwcGx5Um9vbUZpbHRlcnNBbmRVc2VyUHJlZnMocm9vbUZpbHRlcnMsIHVzZXJQcmVmZXJlbmNlcykge1xuICAgICAgICBpZiAocm9vbUZpbHRlcnMpIHtcbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgbmFtZXMgZG9uJ3QgbWF0Y2ggdXAgc28gd2UgY2FuJ3QganVzdCBleHRlbmRcbiAgICAgICAgICAgIGlmIChyb29tRmlsdGVycy5tYXR1cml0eUxldmVscykge1xuICAgICAgICAgICAgICAgIHRoaXMubWF0dXJpdHlMZXZlbCA9IHJvb21GaWx0ZXJzLm1hdHVyaXR5TGV2ZWxzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvb21GaWx0ZXJzLnN1YmplY3RzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJqZWN0ID0gcm9vbUZpbHRlcnMuc3ViamVjdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm9vbUZpbHRlcnMubGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlID0gcm9vbUZpbHRlcnMubGFuZ3VhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm9vbUZpbHRlcnMubWVkaWFUeXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVR5cGUgPSByb29tRmlsdGVycy5tZWRpYVR5cGU7XG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVR5cGVzID0gcm9vbUZpbHRlcnMubWVkaWFUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVzZXJQcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgLy8gVGhlcmUgbWF5IGJlIG1vcmUgdXNlciBwcmVmcyB0byBhcHBseSBiZXNpZGVzIGF1ZGllbmNlLXNldHRpbmdzIGJ1dCB0aGlzXG4gICAgICAgICAgICAvLyB3YXMgdGhlIGltbWVkaWF0ZSBuZWVkLiAgV2UgY2FuIGFkZCBtb3JlIGFzIHRoZXkgY29tZSB1cC5cbiAgICAgICAgICAgIGlmICh1c2VyUHJlZmVyZW5jZXNbJ2F1ZGllbmNlLXNldHRpbmcnXSAmJiB0aGlzLm1hdHVyaXR5TGV2ZWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGF1ZGllbmNlID0gdXNlclByZWZlcmVuY2VzWydhdWRpZW5jZS1zZXR0aW5nJ107XG4gICAgICAgICAgICAgICAgbGV0IG1hdHVyaXR5TGV2ZWxzID0gW107XG4gICAgICAgICAgICAgICAgXy5lYWNoKF8ua2V5cyhhdWRpZW5jZSksIGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaWVuY2Vba2V5XSAmJiBrZXkgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXR1cml0eUxldmVscy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAobWF0dXJpdHlMZXZlbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdHVyaXR5TGV2ZWwgPSBtYXR1cml0eUxldmVscztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IF8uZXh0ZW5kKHt9LCB0aGlzKTtcblxuICAgICAgICAvLyBSZW1vdmUgYWxsIHByb3BlcnRpZXMgdGhhdCBkbyBub3QgaGF2ZSBhIHZhbHVlIHNldFxuICAgICAgICBPYmplY3Qua2V5cyhyZXNwb25zZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAhdGhpcy5faGFzVmFsdWUocmVzcG9uc2Vba2V5XSkgJiYgZGVsZXRlIHJlc3BvbnNlW2tleV07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBfaGFzVmFsdWUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICEoKF8odmFsdWUpLmlzT2JqZWN0KCkgJiYgXyh2YWx1ZSkuaXNFbXB0eSgpKSB8fCAhdmFsdWUpIHx8IHZhbHVlID09PSBmYWxzZTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IE1lZGlhSW50ZXJmYWNlIGZyb20gJy4uL21lZGlhL01lZGlhSW50ZXJmYWNlJztcblxuaW1wb3J0IEdlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzIGZyb20gJy4uLy4uLy4uLy4uL2J1c2luZXNzLW9iamVjdHMvR2VuZXJhdGVkQ29sbGVjdGlvbkRldGFpbHMnO1xuXG4vLyByZWY6IFRodW5kZXIuTW9kZWxzLlJlc3BvbnNlTW9kZWxzLkNvbGxlY3Rpb25EZWZpbml0aW9uXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uRGVmaW5pdGlvbiBleHRlbmRzIEJhY2tib25lLk1vZGVsIHtcblxuICAgIGdldCBpZEF0dHJpYnV0ZSgpIHsgcmV0dXJuICdpZCc7IH1cblxuICAgIGdldCBjb2xsZWN0aW9uT3B0aW9ucygpIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBpbmNsdWRlRmFjZXRzOiBmYWxzZSxcbiAgICAgICAgICAgIHBlclBhZ2U6ICAgICAgIHRoaXMucGFnZVNpemUgfHwgNixcbiAgICAgICAgICAgIHNodWZmbGU6ICAgICAgIHRoaXMuc2h1ZmZsZSB8fCB0aGlzLmlzTHVja3lEYXlcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KCdzb3J0QnlBdmFpbGFiaWxpdHknKSB8fCB0aGlzLmdldCgnYXZhaWxhYmlsaXR5T3B0aW9uJykgPT09ICdhdmFpbGFibGUtZmlyc3QnKSB7XG4gICAgICAgICAgICBvcHRpb25zLmF2YWlsYWJsZUZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5nZXQoJ3Nob3dPbmx5QXZhaWxhYmxlJykgfHwgdGhpcy5nZXQoJ2F2YWlsYWJpbGl0eU9wdGlvbicpID09PSAnYXZhaWxhYmxlLW9ubHknKSB7XG4gICAgICAgICAgICBvcHRpb25zLnNob3dPbmx5QXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5nZXQoJ3Nob3dPbmx5UHJlcmVsZWFzZScpKSB7XG4gICAgICAgICAgICBvcHRpb25zLnNob3dPbmx5UHJlcmVsZWFzZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudXNlTGlzdE9yZGVyKXtcbiAgICAgICAgICAgIG9wdGlvbnMuc29ydEJ5ID0gJ2xpc3RvcmRlcic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBkZWZhdWx0cygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcwJyxcbiAgICAgICAgICAgIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICBhdmFpbGFiaWxpdHlPcHRpb24gICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgIHNob3dPbmx5QXZhaWxhYmxlICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd09ubHlQcmVyZWxlYXNlICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBzb3J0QnlBdmFpbGFiaWxpdHkgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIGN1cmF0ZWRDb2xsZWN0aW9uRGV0YWlscyAgICA6IG51bGwsXG4gICAgICAgICAgICBnZW5lcmF0ZWRDb2xsZWN0aW9uRGV0YWlscyAgOiBudWxsLFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIG9yZGVyICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG5cbiAgICAgICAgICAgIC8vIENvbXB1dGVkIHByb3BlcnR5XG4gICAgICAgICAgICB0b3RhbEl0ZW1zICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGlzTHVja3lEYXkoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdhdmFpbGFiaWxpdHlPcHRpb24nKSA9PT0gJ2F2YWlsYWJsZS1sdWNreWRheSc7XG4gICAgfVxuXG4gICAgZ2V0IGlzR2VuZXJhdGVkKCkge1xuICAgICAgICByZXR1cm4gIV8odGhpcy5nZXQoJ2dlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzJykpLmlzRW1wdHkoKTtcbiAgICB9XG5cbiAgICBnZXQgaXNDdXJhdGVkKCkge1xuICAgICAgICByZXR1cm4gIV8odGhpcy5nZXQoJ2N1cmF0ZWRDb2xsZWN0aW9uRGV0YWlscycpKS5pc0VtcHR5KCk7XG4gICAgfVxuXG4gICAgZ2V0IHVzZUxpc3RPcmRlcigpe1xuICAgICAgICByZXR1cm4gdGhpcy5pc0N1cmF0ZWQgJiYgdGhpcy5nZXQoJ2N1cmF0ZWRDb2xsZWN0aW9uRGV0YWlscycpLmlzT3JkZXJlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcHJvcCB7VGl0bGVDb2xsZWN0aW9ufSBjb2xsZWN0aW9uXG4gICAgICogQG1lbWJlcm9mIENvbGxlY3Rpb25EZWZpbml0aW9uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy5fbWVkaWFJbnRlcmZhY2UgPSBuZXcgTWVkaWFJbnRlcmZhY2UoKTtcblxuICAgICAgICB0aGlzLnRpdGxlQ29sbGVjdGlvbiA9IHRoaXMuX21lZGlhSW50ZXJmYWNlLml0ZW1zO1xuXG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy50aXRsZUNvbGxlY3Rpb24sICdhbGwnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldCgndG90YWxJdGVtcycsIHRoaXMudGl0bGVDb2xsZWN0aW9uLmxlbmd0aCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZldGNoQ29sbGVjdGlvblRpdGxlcyh7IHBhdHJvblNldHRpbmdzLCByb29tfSkge1xuICAgICAgICAvLyBQYXJzZSB0aGUgY3VycmVudCByb29tJ3MgbWF0dXJpdHlMZXZlbHMgaWYgdGhlcmUgaXMgYSByb29tLCBhbmQgYSBtYXR1cml0eUxldmVscyBmaWx0ZXIgaGFzIGJlZW4gc2V0XG4gICAgICAgIGxldCByb29tSGFzTWF0dXJpdHlMZXZlbEZpbHRlciA9ICFfLmlzRW1wdHkocm9vbSAmJiByb29tLmZpbHRlcnMgJiYgcm9vbS5maWx0ZXJzLm1hdHVyaXR5TGV2ZWxzKTtcblxuICAgICAgICBsZXQgcGF0cm9uTWF0dXJpdHlMZXZlbFByZWZlcmVuY2VzID0gdGhpcy5fcGFyc2VQYXRyb25BdWRpZW5jZVNldHRpbmdzKHBhdHJvblNldHRpbmdzKTtcblxuICAgICAgICBpZiAodGhpcy5pc0dlbmVyYXRlZCkge1xuICAgICAgICAgICAgbGV0IGdlbkNvbERldGFpbHMgPSB0aGlzLmdldCgnZ2VuZXJhdGVkQ29sbGVjdGlvbkRldGFpbHMnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuc29ydEJ5KSB7XG4gICAgICAgICAgICAgICAgZ2VuQ29sRGV0YWlscy5zb3J0QnkgPSB0aGlzLmF0dHJpYnV0ZXMuc29ydEJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEhdGhpcy5nZXQoJ3Nob3dPbmx5THVja3lEYXlBdmFpbGFibGUnKSl7XG4gICAgICAgICAgICAgICAgZ2VuQ29sRGV0YWlscy5zaG93T25seUx1Y2t5RGF5QXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBkZXRhaWxzID0gbmV3IEdlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzKGdlbkNvbERldGFpbHMpO1xuICAgICAgICAgICAgbGV0IHBhcmFtcyAgPSBkZXRhaWxzLnNlcmlhbGl6ZUZvclNlYXJjaCgpO1xuXG4gICAgICAgICAgICBpZiAoISFwYXRyb25TZXR0aW5ncy5zaG93T25seUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5zaG93T25seUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBhIHJvb20gd2l0aCBtYXR1cml0eSBmaWx0ZXJzIGFwcGxpZWQsIHRoZSBmaWx0ZXJzIHdpbGwgYmUgYXBhcnQgb2YgdGhlIGNvbGxlY3Rpb24gZGVmaW5pdGlvbiBhbmQgd2UgY2FuIHNpbXBseSBxdWVyeSBmb3IgdGhlIGNvbGxlY3Rpb25cbiAgICAgICAgICAgIC8vIFVzZXIgcHJlZmVyZW5jZXMgc2hvdWxkIE5PVCBvdmVycmlkZSBhIHJvb20ncyBtYXR1cml0eSBmaWx0ZXJcbiAgICAgICAgICAgIGlmIChyb29tSGFzTWF0dXJpdHlMZXZlbEZpbHRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZWRpYUludGVyZmFjZS5mZXRjaENvbGxlY3Rpb25CeVBhcmFtZXRlcnMocGFyYW1zLCB0aGlzLmNvbGxlY3Rpb25PcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSBkZXRlcm1pbmUgaWYgdGhlIFVzZXIncyBtYXR1cml0eSBmaWx0ZXIgc2V0dGluZ3MgY292ZXIgdGhlIGNvbGxlY3Rpb24ncyBtYXR1cml0eUxldmVsIHNldHRpbmdzXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgZ2VuZXJhdGVkQ29sbGVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbGxlY3Rpb25PcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIGlmICghXyhwYXRyb25NYXR1cml0eUxldmVsUHJlZmVyZW5jZXMpLmlzRW1wdHkoKSAmJiBfKHBhcmFtcy5tYXR1cml0eUxldmVsKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihnZW5lcmF0ZWRDb2xsZWN0aW9uT3B0aW9ucywgeyBtYXR1cml0eUxldmVsOiBwYXRyb25NYXR1cml0eUxldmVsUHJlZmVyZW5jZXMgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gRmFrZSBhbiBlbXB0eSByZXNwb25zZSBpZiBhbGwgdGhlIGF1dG8gZ2VuZXJhdGVkIGNvbGxlY3Rpb24ncyBmaWx0ZXJzIGFyZSBub3QgY292ZXJlZCBieSB0aGUgdXNlcidzIG1hdHVyaXR5IGxldmVsIHNldHRpbmdzXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHJvbkZpbHRlcnNQZXJtaXRDb2xsZWN0aW9uKHBhcmFtcy5tYXR1cml0eUxldmVsLCBwYXRyb25NYXR1cml0eUxldmVsUHJlZmVyZW5jZXMpXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5fbWVkaWFJbnRlcmZhY2UuZmV0Y2hDb2xsZWN0aW9uQnlQYXJhbWV0ZXJzKHBhcmFtcywgZ2VuZXJhdGVkQ29sbGVjdGlvbk9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fbWVkaWFJbnRlcmZhY2UuZmV0Y2hFbXB0eVJlc3BvbnNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZSBpZiBcImlzQ3VyYXRlZFwiXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGN1cmF0ZWRDb2xsZWN0aW9uT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29sbGVjdGlvbk9wdGlvbnMpO1xuXG4gICAgICAgICAgICBpZiAoISFwYXRyb25TZXR0aW5ncy5zaG93T25seUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgIGN1cmF0ZWRDb2xsZWN0aW9uT3B0aW9ucy5zaG93T25seUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdzb3J0LWN1cmF0ZWQtbGlzdC1jYXJvdXNlbHMnKSAmJiB0aGlzLmF0dHJpYnV0ZXMuc29ydEJ5KSB7XG4gICAgICAgICAgICAgICAgY3VyYXRlZENvbGxlY3Rpb25PcHRpb25zLnNvcnRCeSA9IHRoaXMuYXR0cmlidXRlcy5zb3J0Qnk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBOT1QgaW4gYSByb29tLCBhcHBseSBhIHVzZXIncyBtYXR1cml0eSBzZXR0aW5ncyBpZiBwcmVzZW50IHRvIHRoZSBjb2xsZWN0aW9uIHJlcXVlc3RcbiAgICAgICAgICAgIC8vIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IGlmIG5vbmUgb2YgdGhlIGNvbnRlbnQgc2F0aXNmaWVzIHRoZSB1c2VyJ3MgZmlsdGVyIGl0cyBhY2NlcHRhYmxlIHRoYXQgbm8gcmVzdWx0cyBhcmUgcmV0dXJuZWRcbiAgICAgICAgICAgIGlmIChfKHJvb20pLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY3VyYXRlZENvbGxlY3Rpb25PcHRpb25zLCB7IG1hdHVyaXR5TGV2ZWw6IHBhdHJvbk1hdHVyaXR5TGV2ZWxQcmVmZXJlbmNlcyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lZGlhSW50ZXJmYWNlLmZldGNoQ29sbGVjdGlvbkJ5SWQodGhpcy5pZCwgY3VyYXRlZENvbGxlY3Rpb25PcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnZlcnQgdGhlIHBhdHJvbiBhdWRpZW5jZSBzZXR0aW5ncyBtb2RlbCBpbnRvIGFuIGFycmF5IG9mIGZpbHRlciB0ZXJtcyB0aGF0IE1lZGlhSW50ZXJmYWNlIHVuZGVyc3RhbmRzLCBleDpcbiAgICAvLyBcImF1ZGllbmNlLXNldHRpbmdcIjoge1xuICAgIC8vICAgICBcImFsbFwiICAgICAgICAgICAgOiBmYWxzZSxcbiAgICAvLyAgICAgXCJqdXZlbmlsZVwiICAgICAgIDogZmFsc2UsXG4gICAgLy8gICAgIFwieW91bmdhZHVsdFwiICAgICA6IHRydWUsXG4gICAgLy8gICAgIFwiZ2VuZXJhbGNvbnRlbnRcIiA6IHRydWUsXG4gICAgLy8gICAgIFwiYWR1bHRvbmx5XCIgICAgICA6IHRydWVcbiAgICAvLyB9XG4gICAgLy8gdG86IFtcInlvdW5nYWR1bHRcIiwgXCJnZW5lcmFsY29udGVudFwiLCBcImFkdWx0b25seVwiXVxuICAgIC8qKiBAcmV0dXJucyB7c3RyaW5nW119ICovXG4gICAgX3BhcnNlUGF0cm9uQXVkaWVuY2VTZXR0aW5ncyhwYXRyb25TZXR0aW5ncykge1xuICAgICAgICBsZXQgcGF0cm9uQXVkaWVuY2VTZXR0aW5nID0gcGF0cm9uU2V0dGluZ3MgJiYgcGF0cm9uU2V0dGluZ3NbJ2F1ZGllbmNlLXNldHRpbmcnXSB8fCB7fTtcblxuICAgICAgICBpZiAoXyhwYXRyb25BdWRpZW5jZVNldHRpbmcpLmlzRW1wdHkoKSB8fCBwYXRyb25BdWRpZW5jZVNldHRpbmcuYWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYXVkaWVuY2VGaWx0ZXJzID0gW107XG4gICAgICAgIF8ocGF0cm9uQXVkaWVuY2VTZXR0aW5nKS5lYWNoKChpc0FwcGxpZWQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzQXBwbGllZCAmJiBrZXkgIT09IFwiYWxsXCIpIHtcbiAgICAgICAgICAgICAgICBhdWRpZW5jZUZpbHRlcnMucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYXVkaWVuY2VGaWx0ZXJzO1xuICAgIH1cblxuICAgIF9wYXRyb25GaWx0ZXJzUGVybWl0Q29sbGVjdGlvbihjb2xsZWN0aW9uTWF0dXJpdHlGaWx0ZXJzID0gW10sIHVzZXJNYXR1cml0eUZpbHRlcnMgPSBbXSkge1xuICAgICAgICBpZiAodXNlck1hdHVyaXR5RmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sbGVjdGlvbkxvd2VyID0gY29sbGVjdGlvbk1hdHVyaXR5RmlsdGVycy5tYXAoKGZpbHRlcikgPT4gZmlsdGVyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBjb25zdCB1c2VyTG93ZXIgPSB1c2VyTWF0dXJpdHlGaWx0ZXJzLm1hcCgoZmlsdGVyKSA9PiBmaWx0ZXIudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgcmV0dXJuIF8oY29sbGVjdGlvbkxvd2VyKS5kaWZmZXJlbmNlKHVzZXJMb3dlcikubGVuZ3RoID09PSAwO1xuICAgIH1cbn1cbiIsImltcG9ydCBRdWVyeVN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhhc2hNYW5hZ2VyIHtcblxuICAgIHN0YXRpYyBwYXJzZSgpIHtcbiAgICAgICAgbGV0IGhhc2hPYmplY3QgPSBRdWVyeVN0cmluZy5wYXJzZShsb2NhdGlvbi5oYXNoLnN1YnN0cigxKSk7XG5cbiAgICAgICAgXy5rZXlzKGhhc2hPYmplY3QpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaGFzaE9iamVjdFtrZXldID0gXy5mbGF0dGVuKFtoYXNoT2JqZWN0W2tleV0gfHwgW11dKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGhhc2hPYmplY3Q7XG4gICAgfVxuXG4gICAgc3RhdGljIHVwZGF0ZShvYmplY3QpIHtcbiAgICAgICAgbGV0IG5ld0hhc2ggPSBRdWVyeVN0cmluZy5zdHJpbmdpZnkob2JqZWN0KTtcbiAgICAgICAgaWYgKG5ld0hhc2ggIT09ICcmJyl7XG4gICAgICAgICAgICBsb2NhdGlvbi5oYXNoID0gbmV3SGFzaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXQoa2V5KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IHRoaXMucGFyc2UoKTtcblxuICAgICAgICBpZiAoXy5pc1N0cmluZyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2Vba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBhcnNlKCk7XG5cbiAgICAgICAgaGFzaFtrZXldID0gXy5mbGF0dGVuKFt2YWx1ZV0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKGhhc2gpO1xuICAgIH1cblxuICAgIHN0YXRpYyBwdXNoKGtleSwgdmFsdWUpIHtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBhcnNlKCk7XG5cbiAgICAgICAgaGFzaFtrZXldID0gaGFzaFtrZXldIHx8IFtdO1xuICAgICAgICBoYXNoW2tleV0ucHVzaCh2YWx1ZSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGUoaGFzaCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbW92ZShrZXkpIHtcbiAgICAgICAgbGV0IGhhc2ggPSB0aGlzLnBhcnNlKCk7XG5cbiAgICAgICAgaGFzaFtrZXldICYmIGRlbGV0ZSBoYXNoW2tleV07XG5cbiAgICAgICAgdGhpcy51cGRhdGUoaGFzaCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IGtleXMgZnJvbSAnLi4vLi4vdXRpbC9rZXljb2Rlcyc7XG5pbXBvcnQgTW9kYWxUZW1wbGF0ZSBmcm9tICcuL3RlbXBsYXRlcy9tb2RhbC5odG1sJztcblxuY2xhc3MgTW9kYWwgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBnZXQgZGVmYXVsdHMoKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIGZsYWcgaXMgZW5hYmxlZCwgY2xvc2VPbkVzYyBtdXN0IGFsd2F5cyBiZSBGQUxTRVxuICAgICAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgRVNDIGtleSBiZWhhdmlvciBkZWZpbmVkIGluIF9iaW5kRXZlbnRzKCkgZXhlY3V0ZXMgcHJvcGVybHkuXG4gICAgICAgIC8vIERvIG5vdCBtb2RpZnkgdGhpcyB2YWx1ZSB3aGVuIGNhbGxpbmcgYSBuZXcgbW9kYWwuXG4gICAgICAgIHZhciBjbG9zZU1vZGFsT25Fc2MgPSB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKFxuICAgICAgICAgICAgJ2Nsb3NlLWRyb3Bkb3ducy1vbi1lc2MnXG4gICAgICAgIClcbiAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgIDogdHJ1ZTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXV0b1Nob3c6IHRydWUsXG4gICAgICAgICAgICBhdXRvUmVuZGVyOiB0cnVlLFxuICAgICAgICAgICAgY2xvc2VPbkVzYzogY2xvc2VNb2RhbE9uRXNjLFxuICAgICAgICAgICAgY2xvc2VPbkJsdXI6IHRydWUsXG5cbiAgICAgICAgICAgIGlkOiAnJyxcbiAgICAgICAgICAgIGNsYXNzZXM6IFsnc21hbGwnXSxcbiAgICAgICAgICAgIGJ1dHRvbkFsaWduOiAncmlnaHQnLFxuICAgICAgICAgICAgdGl0bGU6ICdUaXRsZScsXG4gICAgICAgICAgICBoaWRkZW5UaXRsZTogZmFsc2UsXG4gICAgICAgICAgICBjb250ZW50OiAnU29tZSBDb250ZW50JyxcbiAgICAgICAgICAgIHN1Ym1pdFRleHQ6IGh0bWwoJ29rJyksXG4gICAgICAgICAgICBjYW5jZWxUZXh0OiBodG1sKCdjYW5jZWwnKSxcbiAgICAgICAgICAgIGF0dGFjaFRvRG9jdW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBkZWZhdWx0QnV0dG9uQmVoYXZpb3VyOiB0cnVlLFxuICAgICAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGluaXRpYWxpemUob3B0aW9ucykge1xuICAgICAgICBfLmV4dGVuZCh0aGlzLCB0aGlzLmRlZmF1bHRzLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnRwbCA9IE1vZGFsVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuc2V0RWxlbWVudCh0aGlzLnRwbCh0aGlzKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaWQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLiRlbC5hdHRyKCdpZCcsIHRoaXMuaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kY29udGVudCA9IHRoaXMuJGVsLmZpbmQoJy5tb2RhbC1jb250YWluZXInKTtcblxuICAgICAgICB0aGlzLiRjb250ZW50LmVtcHR5KCkuYXBwZW5kKHRoaXMuY29udGVudCk7XG5cbiAgICAgICAgdGhpcy4kZWwuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmpvaW4oJyAnKSk7XG5cbiAgICAgICAgdGhpcy4kdGl0bGUgPSB0aGlzLiRlbC5maW5kKCcubW9kYWwtdGl0bGUnKTtcblxuICAgICAgICBpZiAodGhpcy5oaWRkZW5UaXRsZSkge1xuICAgICAgICAgICAgdGhpcy4kdGl0bGUuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgICAgIHRoaXMuJHRpdGxlLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmF1dG9SZW5kZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYmluZEV2ZW50cygpO1xuICAgIH1cblxuICAgIF9yZW5kZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmF0dGFjaFRvRG9jdW1lbnQpIHtcbiAgICAgICAgICAgIC8vIEZvciBGb3VuZGF0aW9uIHRvIHdvcmsgYXMgZXhwZWN0ZWQgd2UgbmVlZCB0byBoYXZlIHRoZSBlbGVtZW50IGF0dGFjaGVkIHRvIHRoZSBET00gYmVmb3JlIGNhbGxpbmcgLmZvdW5kYXRpb24oJ3JldmVhbCcsICdvcGVuJylcbiAgICAgICAgICAgICQoJ2JvZHknKS5hcHBlbmQodGhpcy5lbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hdXRvU2hvdykge1xuICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpc1NlbGVjdEV2ZW50ID0gKGUpID0+XG4gICAgICAgIChlLnR5cGUgPT09ICdjbGljaycgfHwgZS53aGljaCA9PT0gMTMgfHwgZS53aGljaCA9PT0gMzIpICYmXG4gICAgICAgIChlLnByZXZlbnREZWZhdWx0KCkgfHwgdHJ1ZSk7XG5cbiAgICAvLyBXZSBkb250IGFjdHVhbGx5IHdhbnQgdG8gdXNlIHRoZSBGb3VuZGF0aW9uIG1vZGFsIGV2ZW50cyBzaW5jZSB0aGV5IGdldCB3ZWlyZCBmYXN0Li4uXG4gICAgLy8gbGV0cyB1c2Ugb3VyIG93biBzbyBjb25zdW1lcnMgZG9udCBoYXZlIHRvIGtub3cgaXRzIGZvdW5kYXRpb25cbiAgICBfYmluZEV2ZW50cygpIHtcbiAgICAgICAgdGhpcy4kZWwub24oJ2NsaWNrIGtleWRvd24nLCAnLmpzLWNsb3NlJywgKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RFdmVudChlKSAmJiB0aGlzLnRyaWdnZXIoJ2NhbmNlbCcsIHRoaXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QnV0dG9uQmVoYXZpb3VyKSB7XG4gICAgICAgICAgICB0aGlzLm9uKCdjbG9zZSBjYW5jZWwnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRlbC5vbigna2V5cHJlc3MnLCAnKicsIChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZS53aGljaCA9PT0ga2V5cy5UQUIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9rZWVwRm9jdXMoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdjbG9zZS1kcm9wZG93bnMtb24tZXNjJykpIHtcbiAgICAgICAgICAgIC8vIFByZXZlbnQgRVNDIGZyb20gY2xvc2luZyBtb2RhbCB3aGVuIDxzZWxlY3Q+IGVsZW1lbnRzIGFyZSBvcGVuXG4gICAgICAgICAgICB0aGlzLiRlbC5vbignY2xpY2sga2V5ZG93biBrZXl1cCcsICdzZWxlY3QnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyZWN0RXZlbnRUeXBlID1cbiAgICAgICAgICAgICAgICAgICAgZS50eXBlID09PSAnY2xpY2snIHx8XG4gICAgICAgICAgICAgICAgICAgIGUud2hpY2ggPT09IGtleXMuRU5URVIgfHxcbiAgICAgICAgICAgICAgICAgICAgZS53aGljaCA9PT0ga2V5cy5FU0M7XG4gICAgICAgICAgICAgICAgaWYgKCFjb3JyZWN0RXZlbnRUeXBlKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0T3BlbiA9ICQodGhpcykuYXR0cignZGF0YS1vcGVuJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0T3BlbiA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignZGF0YS1vcGVuJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0T3BlbiA9PT0gJ2ZhbHNlJyB8fCBzZWxlY3RPcGVuID09IG51bGwpICYmXG4gICAgICAgICAgICAgICAgICAgIGUud2hpY2ggIT09IGtleXMuRVNDXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignZGF0YS1vcGVuJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy4kZWwub24oJ2JsdXInLCAnc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignZGF0YS1vcGVuJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gQ2xvc2UgbW9kYWxzIHdpdGggRVNDXG4gICAgICAgICAgICB0aGlzLiRlbC5vbigna2V5dXAnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBzZWxlY3RJc05vdE9wZW4gPVxuICAgICAgICAgICAgICAgICAgICAhJCgnc2VsZWN0JykuaXMoJzpmb2N1cycpIHx8XG4gICAgICAgICAgICAgICAgICAgICQoJzpmb2N1cycpLmF0dHIoJ2RhdGEtb3BlbicpICE9PSAndHJ1ZSc7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBlLndoaWNoID09PSBrZXlzLkVTQyAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RJc05vdE9wZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgJCgnLmYtb3Blbi1kcm9wZG93bicpLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NhbmNlbCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvdygpIHtcbiAgICAgICAgdGhpcy5fYmVmb3JlU2hvdygpO1xuICAgICAgICB0aGlzLiRlbC5mb3VuZGF0aW9uKCdyZXZlYWwnLCAnb3BlbicpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3Nob3cnLCB0aGlzKTtcblxuICAgICAgICB0aGlzLiRlbC5vbigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9rZWVwRm9jdXMoZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEV4ZWN1dGUgY29kZSBhZnRlciB0aGUgbW9kYWwgaXMgZGlzcGxheWVkXG4gICAgICAgIHRoaXMuJGVsLm9uKCdvcGVuZWQuZm5kdG4ucmV2ZWFsJywgKCkgPT4gdGhpcy5fYWZ0ZXJTaG93KCkpO1xuXG4gICAgICAgIC8vIFRyYXBzIGZvdW5kYXRpb24gYnVnIHRoYXQgY2xvc2VzIG1vZGFsIG9uIGRyb3Bkb3duIFwiY2xvc2VkXCIsIG5vdCBhbiBpc3N1ZSBpbiA1LjUuMytcbiAgICAgICAgdGhpcy4kZWwub2ZmKCdjbG9zZWQnKTtcblxuICAgICAgICAvLyBIYW5kbGUgZm91bmRhdGlvbiAgY2xvc2UgZXZlbnRzIGZyb20gRVNDIGFuZCBCRyBjbGlja3NcbiAgICAgICAgdGhpcy4kZWwub24oJ2Nsb3NlLmZuZHRuLnJldmVhbCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuJGVsLm9mZignY2xvc2UuZm5kdG4ucmV2ZWFsJyk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Nsb3NlJyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9iZWZvcmVTaG93KCkge1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSAkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIF9hZnRlclNob3coKSB7XG4gICAgICAgIHRoaXMuJGVsLmF0dHIoJ2FyaWEtaGlkZGVuJywgZmFsc2UpO1xuICAgICAgICAkKCcuY29udGFpbmVyJykuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICAkKCcucm93LmZvb3RlcicpLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgICAgJCgnLm5hdi1jb250YWluZXInKS5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG5cbiAgICAgICAgdGhpcy4kZWwuZmluZCgnOmZvY3VzYWJsZTp2aXNpYmxlJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICB0aGlzLl9zZXRTY3JvbGwoKTtcbiAgICB9XG5cbiAgICBfc2V0U2Nyb2xsKCkge1xuICAgICAgICBsZXQgb2Zmc2V0ID1cbiAgICAgICAgICAgIHdpbmRvdy5wYWdlWU9mZnNldCAtIHBhcnNlSW50KHRoaXMuJGVsLmNzcygndG9wJykuc2xpY2UoMCwgLTIpLCAxMCk7IC8vIHRoZSAndG9wJyBzdHlsaW5nIGlzIGJha2VkIGluIGJ5IGZvdW5kYXRpb25cbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lckhlaWdodCA8IHRoaXMuZWwub2Zmc2V0SGVpZ2h0IC0gb2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyBzY3JvbGwgdGFsbCBtb2RhbHMgaW50byB2aWV3IGFzIG11Y2ggYXMgZml0c1xuICAgICAgICAgICAgb2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgdGhpcy5lbC5vZmZzZXRIZWlnaHQgLSB3aW5kb3cuaW5uZXJIZWlnaHQgKyAxMCxcbiAgICAgICAgICAgICAgICAtNVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDY0MSkge1xuICAgICAgICAgICAgLy8gbW9iaWxlIHZpZXcgcGFkZGluZ1xuICAgICAgICAgICAgb2Zmc2V0IC09IDU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbC5zY3JvbGxJbnRvVmlldygpOyAvLyBzZXRzIHNjcm9sbCB0byB0b3Agb2YgbW9kYWxcbiAgICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIG9mZnNldCk7IC8vIGFkanVzdHMgc2Nyb2xsIGFjY29yZGluZyB0byBjYWxjdWxhdGVkIG9mZnNldFxuICAgIH1cblxuICAgIF9rZWVwRm9jdXMoZSkge1xuICAgICAgICBjb25zdCBhY3RpdmVFbGVtID0gJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZmlyc3RGb2N1c2FibGUgPSB0aGlzLiRlbC5maW5kKCc6Zm9jdXNhYmxlOnZpc2libGUnKS5maXJzdCgpO1xuICAgICAgICBjb25zdCBsYXN0Rm9jdXNhYmxlID0gdGhpcy4kZWwuZmluZCgnOmZvY3VzYWJsZTp2aXNpYmxlJykubGFzdCgpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFjdGl2ZUVsZW0uaXMoZmlyc3RGb2N1c2FibGUpICYmXG4gICAgICAgICAgICBlLndoaWNoID09PSBrZXlzLlRBQiAmJlxuICAgICAgICAgICAgZS5zaGlmdEtleVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGxhc3RGb2N1c2FibGUuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICQoYWN0aXZlRWxlbSkuaXMobGFzdEZvY3VzYWJsZSkgJiZcbiAgICAgICAgICAgIGUud2hpY2ggPT09IGtleXMuVEFCICYmXG4gICAgICAgICAgICAhZS5zaGlmdEtleVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGZpcnN0Rm9jdXNhYmxlLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoaWRlKCkge1xuICAgICAgICB0aGlzLiRlbC5mb3VuZGF0aW9uKCdyZXZlYWwnLCAnY2xvc2UnKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdoaWRlJywgdGhpcyk7XG4gICAgICAgICQoJy5jb250YWluZXInKS5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpO1xuICAgICAgICAkKCcucm93LmZvb3RlcicpLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XG4gICAgICAgICQoJy5uYXYtY29udGFpbmVyJykuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB0aGlzLnJlbW92ZSgpO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgTW9kYWwgfTtcbiIsImV4cG9ydCBkZWZhdWx0ICh7dGl0bGUsIGNsb3NlT25Fc2MsIGNsb3NlT25CbHVyLCBzaG93Q2xvc2VCdXR0b259KSA9PlxuYDxkaXZcbiAgICBjbGFzcz1cInJldmVhbC1tb2RhbFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICBhcmlhLWxhYmVsPVwiJHt0aXRsZX1cIlxuICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgIGRhdGEtcmV2ZWFsXG4gICAgZGF0YS1vcHRpb25zPVwiY2xvc2Vfb25fZXNjOiR7IGNsb3NlT25Fc2MgfTtjbG9zZV9vbl9iYWNrZ3JvdW5kX2NsaWNrOiR7IGNsb3NlT25CbHVyIH07XCJcbj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cIm1vZGFsLXRpdGxlIHByaW1hcnktY29sb3JcIj4keyB0aXRsZSB9PC9oMj5cbiAgICAgICAgJHtzaG93Q2xvc2VCdXR0b24gPyBgPGEgY2xhc3M9XCJjbG9zZS1yZXZlYWwtbW9kYWwganMtY2xvc2VcIiByb2xlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIiR7IHdpbmRvdy5odG1sKCdjbG9zZScpIH1cIiB0YWJpbmRleD1cIjBcIj4mIzIxNTs8L2E+YCA6ICcnfVxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRhaW5lclwiPjwvZGl2PlxuPC9kaXY+YDtcbiIsImltcG9ydCBEZXRhaWxzQ292ZXJJbWFnZVZpZXcgZnJvbSAnLi92aWV3cy9kZXRhaWxzX2NvdmVyX2ltYWdlJztcblxuY29uc3QgY3JlYXRlRGV0YWlsc0NvdmVySW1hZ2VDb21wb25lbnQgPSAoe2VsfSkgPT4ge1xuICAgIGNvbnN0IHZpZXcgPSBuZXcgRGV0YWlsc0NvdmVySW1hZ2VWaWV3KHtlbH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVEZXRhaWxzQ292ZXJJbWFnZUNvbXBvbmVudDtcbiIsImltcG9ydCBCYXNlVmlldyBmcm9tICcuLi8uLi8uLi92aWV3cy9iYXNlJztcblxuY29uc3QgRGV0YWlsc0NvdmVySW1hZ2VWaWV3ID0gQmFzZVZpZXcuZXh0ZW5kKHtcbiAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2s6ICdkaXNwbGF5Tm9TYW1wbGUnLFxuICAgICAgICB0YXA6ICdkaXNwbGF5Tm9TYW1wbGUnXG4gICAgfSxcbiAgICBpbml0aWFsaXplKHtlbH0pIHtcbiAgICAgICAgdGhpcy5lbCA9IGVsO1xuICAgIH0sXG4gICAgZGlzcGxheU5vU2FtcGxlKGUpIHtcbiAgICAgICAgLy8gRGVib3VuY2VcbiAgICAgICAgaWYgKCQoZS50YXJnZXQpLmhhc0NsYXNzKCdpcy1hbmltYXRpbmcnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCQoZS50YXJnZXQpLmhhc0NsYXNzKCdpcy1ub1NhbXBsZScpKSB7XG4gICAgICAgICAgICBjb25zdCBub1NhbXBsZUJhbm5lciA9ICQoJy5qcy1uby1zYW1wbGUtYmFubmVyJyk7XG4gICAgICAgICAgICAkKGUudGFyZ2V0KS5hZGRDbGFzcygnaXMtYW5pbWF0aW5nJyk7XG4gICAgICAgICAgICBub1NhbXBsZUJhbm5lci5yZW1vdmVDbGFzcygnZmFkZU91dCcpLmFkZENsYXNzKCdmYWRlSW4nKS5jc3MoJ3otaW5kZXgnLCAxKS5zaG93KCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAkKGUudGFyZ2V0KS5yZW1vdmVDbGFzcygnaXMtYW5pbWF0aW5nJyk7XG4gICAgICAgICAgICAgICAgbm9TYW1wbGVCYW5uZXIucmVtb3ZlQ2xhc3MoJ2ZhZGVJbicpLmFkZENsYXNzKCdmYWRlT3V0Jyk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJhbm5lciBibG9ja3MgcGFydCBvZiB0aGUgaW1hZ2UgY2xpY2sgYXJlYSwgcHV0IGl0IGJlaGluZCB0aGUgaW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgbm9TYW1wbGVCYW5uZXIuY3NzKCd6LWluZGV4JywgLTEpO1xuICAgICAgICAgICAgICAgIH0sIDc1MCk7IC8vIFRpbWUgaXMgc2xpZ2h0bHkgbG9uZ2VyIHRoYW4gZmFkZW91dCB0aW1lXG4gICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBEZXRhaWxzQ292ZXJJbWFnZVZpZXc7XG4iLCJjb25zdCB7IGh0bWwgfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgKHsgcm9vbVRoZW1lLCByZWxhdGVkVXJsIH0pID0+IGBcbjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGFyZ2UtMTIgY29sdW1uc1wiPlxuICAgICAgICA8aDIgY2xhc3M9XCJ0aXRsZVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwibW9yZVRpdGxlc0xpbmsgJHtyb29tVGhlbWV9XCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIiBocmVmPVwiJHtyZWxhdGVkVXJsfVwiPlxuICAgICAgICAgICAgICAgICR7aHRtbCgneW91TWF5QWxzb0xpa2UnKX1cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1vcmVUaXRsZXNBcnJvd0ljb24gaWNvbi1mb3J3YXJkLWFycm93IHNlY29uZGFyeS1jb2xvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxhIGhyZWY9XCIke3JlbGF0ZWRVcmx9XCIgcm9sZT1cImxpbmtcIiBhcmlhLWxhYmVsPVwiJHtodG1sKFxuICAgICAgICAgICAgICAgICdjYXJvdXNlbC5zZWVBbGxUaXRsZXMnLFxuICAgICAgICAgICAgICAgIHsgY29sbGVjdGlvbk5hbWU6IGh0bWwoJ3lvdU1heUFsc29MaWtlJykgfVxuICAgICAgICAgICAgKX1cIiBcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlZUFsbEJ1dHRvbiBidXR0b24gbm8tb3V0bGluZSByYWRpdXMgcmlnaHQgdS1hbGxDYXBzXCI+XG4gICAgICAgICAgICAgICAgJHtodG1sKCdzZWVBbGwnKX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9oMj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibGFyZ2UtMTIgY29sdW1uc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVDb250YWluZXJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYDtcbiIsImltcG9ydCBQYXRyb25UaXRsZVN0YXR1cyBmcm9tICcuLi8uLi9tb2RlbHMvUGF0cm9uVGl0bGVTdGF0dXMnO1xuXG5pbXBvcnQgVGl0bGVDYXJkIGZyb20gJy4uL21lZGlhL1RpdGxlQ2FyZCc7XG5pbXBvcnQgVGl0bGVDb2xsZWN0aW9uIGZyb20gJy4uL21lZGlhL21vZGVscy9UaXRsZUNvbGxlY3Rpb24nO1xuaW1wb3J0IFRpdGxlQ29sbGVjdGlvblZpZXcgZnJvbSAnLi4vbWVkaWEvVGl0bGVDb2xsZWN0aW9uVmlldyc7XG5cbmltcG9ydCBEZXRhaWxzUmVsYXRlZFRpdGxlc1RlbXBsYXRlIGZyb20gJy4vRGV0YWlsc1JlbGF0ZWRUaXRsZXNUZW1wbGF0ZS5odG1sJztcbmltcG9ydCBMb2FkZXJUZW1wbGF0ZSBmcm9tICcuLi8uLi90ZW1wbGF0ZXMvbG9hZGVyLmh0bWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZXRhaWxzUmVsYXRlZFRpdGxlc1ZpZXcgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICB0ZW1wbGF0ZSA9IERldGFpbHNSZWxhdGVkVGl0bGVzVGVtcGxhdGU7XG4gICAgbG9hZGVyVGVtcGxhdGUgPSBMb2FkZXJUZW1wbGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKHsgZWwsIGJ1cywgdGl0bGVNb2RlbCB9KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy50aXRsZU1vZGVsID0gdGl0bGVNb2RlbDtcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gbmV3IFRpdGxlQ29sbGVjdGlvbigpO1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb24udXJsID0gYCR7d2luZG93LnVybCh3aW5kb3cucm91dGVzLnJlc3QubWVkaWEucmVsYXRlZCwge1xuICAgICAgICAgICAgaWQ6IHRpdGxlTW9kZWwuaWQsXG4gICAgICAgIH0pfT9tYXg9NiZtYXR1cml0eUxldmVsPSR7XG4gICAgICAgICAgICB0aXRsZU1vZGVsLmF0dHJpYnV0ZXMucmF0aW5ncy5tYXR1cml0eUxldmVsLmlkXG4gICAgICAgIH1gO1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb24ucGFyc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uVGl0bGVzID0gcmVzcG9uc2UudGl0bGVzO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ29ubHktc2hvdy1vd25lZC1jb250ZW50JykgJiZcbiAgICAgICAgICAgICAgICByZXNwb25zZS50aXRsZXNcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25UaXRsZXMgPSByZXNwb25zZS50aXRsZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoeCkgPT4geC5pc093bmVkID09PSB0cnVlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfLnZhbHVlcyhjb2xsZWN0aW9uVGl0bGVzKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5idXMgPSBidXM7XG5cbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KGVsKTtcbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5odG1sKHRoaXMubG9hZGVyVGVtcGxhdGUoKSk7XG5cbiAgICAgICAgY29uc3Qgd2F5cG9pbnQgPSBuZXcgd2luZG93LldheXBvaW50Lkludmlldyh7XG4gICAgICAgICAgICBlbGVtZW50OiB0aGlzLiRlbCxcbiAgICAgICAgICAgIGVudGVyOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgd2F5cG9pbnQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1cGRhdGUoKSB7XG4gICAgICAgIHRoaXMuY29sbGVjdGlvblxuICAgICAgICAgICAgLmZldGNoKClcbiAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXyhyZXMudGl0bGVzKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWwucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgcGF0cm9uVGl0bGVTdGF0dXMgPSBuZXcgUGF0cm9uVGl0bGVTdGF0dXMoKTtcblxuICAgICAgICAgICAgICAgIHBhdHJvblRpdGxlU3RhdHVzLmZldGNoVGl0bGVTdGF0dXModGhpcy5jb2xsZWN0aW9uKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGF0cm9uVGl0bGVTdGF0dXMudXBkYXRlVGl0bGVDb2xsZWN0aW9uU3RhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZhaWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsLnJlbW92ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgY3VycmVudFJvb20gPSB3aW5kb3cuT3ZlckRyaXZlLmN1cnJlbnRSb29tO1xuICAgICAgICBsZXQgcmVuZGVyQ29udGV4dCA9IHtcbiAgICAgICAgICAgIHJlbGF0ZWRVcmw6IGAke3dpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYVJlbGF0ZWRJZCwge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnRpdGxlTW9kZWwuaWQsXG4gICAgICAgICAgICB9KX0/bWF0dXJpdHlMZXZlbD0ke1xuICAgICAgICAgICAgICAgIHRoaXMudGl0bGVNb2RlbC5hdHRyaWJ1dGVzLnJhdGluZ3MubWF0dXJpdHlMZXZlbC5pZFxuICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICByb29tVGhlbWU6IGN1cnJlbnRSb29tID8gYGlzLSR7Y3VycmVudFJvb20udGhlbWVOYW1lfWAgOiAnJyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5odG1sKHRoaXMudGVtcGxhdGUocmVuZGVyQ29udGV4dCkpO1xuXG4gICAgICAgIHRoaXMudGl0bGVDb2xsZWN0aW9uVmlldyA9IG5ldyBUaXRsZUNvbGxlY3Rpb25WaWV3KHtcbiAgICAgICAgICAgIGVsOiB0aGlzLiQoJy50aXRsZUNvbnRhaW5lcicpLFxuICAgICAgICAgICAgYnVzOiB0aGlzLmJ1cyxcbiAgICAgICAgICAgIFZpZXc6IFRpdGxlQ2FyZCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICBjbGFzczogJ3RpdGxlQ29udGFpbmVyIHNtYWxsLWJsb2NrLWdyaWQtMiBtZWRpdW0tYmxvY2stZ3JpZC0zIGxhcmdlLWJsb2NrLWdyaWQtNicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29sbGVjdGlvbjogdGhpcy5jb2xsZWN0aW9uLFxuICAgICAgICAgICAgY292ZXJXaWR0aHM6IHsgbW9iaWxlOiAyMTUsIHRhYmxldDogMjIwLCBkZXNrdG9wOiAyMjAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgKHsgZXhwaXJhdGlvbldhcm5pbmcsIGRlc2NyaXB0aW9uLCBkZXRhaWxzLCBub3RlIH0pID0+IGBcbiAgICAke2V4cGlyYXRpb25XYXJuaW5nLmxlbmd0aCA+IDAgPyBgPHAgY2xhc3M9J2V4cGlyYXRpb24td2FybmluZyc+JHtleHBpcmF0aW9uV2FybmluZ308L3A+YCA6ICcnfVxuICAgICR7ZGVzY3JpcHRpb24ubGVuZ3RoID4gMCA/IGA8cCBjbGFzcz0nZGVzY3JpcHRpb24nPiR7ZGVzY3JpcHRpb259PC9wPmAgOiAnJ31cbiAgICAke2RldGFpbHMubWFwKChkZXRhaWwpID0+IGA8cCBjbGFzcz0nZGV0YWlsJz4ke2RldGFpbH08L3A+YCkuam9pbignJyl9XG4gICAgJHtub3RlLmxlbmd0aCA+IDAgPyBgPHAgY2xhc3M9J25vdGUnPiR7bm90ZX08L3A+YCA6ICcnfVxuYDtcbiIsImltcG9ydCBIb2xkSW5mb3JtYXRpb25UZW1wbGF0ZSAgICAgICAgICAgICAgZnJvbSAnLi4vdGVtcGxhdGVzL0hvbGRJbmZvcm1hdGlvbi5odG1sJztcblxuY29uc3QgeyBodG1sLCB1cmwsIHJvdXRlcyB9ID0gd2luZG93O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIb2xkSW5mb3JtYXRpb24gZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBnZXQgZXhwaXJhdGlvbldhcm5pbmcoKSB7XG4gICAgICAgIGNvbnN0IGlzRXhwaXJlZENvbnRlbnQgPSB0aGlzLm1vZGVsLmdldCgnaXNPd25lZCcpICYmICF0aGlzLm1vZGVsLmdldCgnb3duZWRDb3BpZXMnKTtcbiAgICAgICAgaWYgKGlzRXhwaXJlZENvbnRlbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdzdWNjZXNzUG9zaXRpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2h0bWwoJ2hvbGRzUmF0aW9IZWxwTW9kYWwubm9Db3BpZXNPblBsYWNlSG9sZCcpfSA8YSBjbGFzcz0nSG9sZFN1Y2Nlc3NNb2RhbC1saW5rJyBocmVmPScke3VybChyb3V0ZXMuYWNjb3VudEhvbGRzKX0nPiR7aHRtbCgnaG9sZFN1Y2Nlc3NNb2RhbC5tYW5hZ2VIb2xkcycpfTwvYT5gO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdiZXR0ZXJQYXRyb25TdGF0ZScpID8gdGhpcy5tb2RlbC5nZXQoJ2lzT25Ib2xkJykgOiB0aGlzLm1vZGVsLmdldCgndGl0bGVTdGF0ZScpID09PSAnb25Ib2xkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sKCdob2xkc1JhdGlvSGVscE1vZGFsLm5vQ29waWVzVGV4dEhlbGQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBodG1sKCdob2xkc1JhdGlvSGVscE1vZGFsLm5vQ29waWVzVGV4dCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIGNvbnN0IGhvbGRzUmF0aW8gPSB0aGlzLm1vZGVsLmdldCgnaG9sZHNSYXRpbycpO1xuICAgICAgICBjb25zdCBob2xkTGlzdFBvc2l0aW9uID0gdGhpcy5tb2RlbC5nZXQoJ2hvbGRMaXN0UG9zaXRpb24nKSB8fCAwO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmdldCgnaXNQcmVSZWxlYXNlVGl0bGUnKSAmJiBob2xkTGlzdFBvc2l0aW9uID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbCgncHJlUmVsZWFzZU1vZGFsLmJvcnJvd1Vwb25SZWxlYXNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAncmF0aW8nOlxuICAgICAgICAgICAgICAgIGlmIChob2xkc1JhdGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBob2xkc1JhdGlvID49IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaHRtbCgnaG9sZHNSYXRpb0hlbHBNb2RhbC5saXN0UG9zaXRpb25IdG1sJywgeyBob2xkc1JhdGlvOiB0aGlzLm1vZGVsLmdldCgnaG9sZHNSYXRpbycpIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGh0bWwoJ2hvbGRzUmF0aW9IZWxwTW9kYWwubmV4dEF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICBjYXNlICdiYXNpY1Bvc2l0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ3N1Y2Nlc3NQb3NpdGlvbic6XG4gICAgICAgICAgICBjYXNlICdiYXNpYyc6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBkZXRhaWxzKCkge1xuICAgICAgICBjb25zdCBob2xkc0NvdW50ID0gdGhpcy5tb2RlbC5nZXQoJ2hvbGRzQ291bnQnKSB8fCAwO1xuICAgICAgICBjb25zdCBvd25lZENvcGllcyA9IHRoaXMubW9kZWwuZ2V0KCdvd25lZENvcGllcycpIHx8IDA7XG4gICAgICAgIGNvbnN0IGhvbGRMaXN0UG9zaXRpb24gPSB0aGlzLm1vZGVsLmdldCgnaG9sZExpc3RQb3NpdGlvbicpIHx8IDA7XG4gICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdiYXNpY1Bvc2l0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ3N1Y2Nlc3NQb3NpdGlvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCgnaG9sZHNSYXRpb0hlbHBNb2RhbC55b3VySG9sZHNQb3NpdGlvbkh0bWwnLCB7IGhvbGRMaXN0UG9zaXRpb24sIGhvbGRzQ291bnQgfSksXG4gICAgICAgICAgICAgICAgICAgIGh0bWwoJ2hvbGRzUmF0aW9IZWxwTW9kYWwubGlicmFyeUNvcGllcycsIHsgb3duZWRDb3BpZXMgfSlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgY2FzZSAncmF0aW8nOlxuICAgICAgICAgICAgY2FzZSAnYmFzaWMnOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBodG1sKCdob2xkc1JhdGlvSGVscE1vZGFsLnRvdGFsSG9sZHNIdG1sJywgeyBob2xkc0NvdW50IH0pLFxuICAgICAgICAgICAgICAgICAgICBodG1sKCdob2xkc1JhdGlvSGVscE1vZGFsLmxpYnJhcnlDb3BpZXMnLCB7IG93bmVkQ29waWVzIH0pXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBub3RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5nZXQoJ2lzRmFzdGxhbmUnKSA/IGh0bWwoJ2FkdmFudGFnZUZhc3RQYXNzSHRtbCcpIDogJyc7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoeyB0eXBlIH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5lbCA9IHRoaXMuZWwgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuZWwuY2xhc3NOYW1lID0gYCR7dGhpcy5lbC5jbGFzc05hbWV9IEhvbGRJbmZvcm1hdGlvbmA7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgJ2Jhc2ljJztcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBIb2xkSW5mb3JtYXRpb25UZW1wbGF0ZSh7XG4gICAgICAgICAgICBleHBpcmF0aW9uV2FybmluZzogdGhpcy5leHBpcmF0aW9uV2FybmluZyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgZGV0YWlsczogdGhpcy5kZXRhaWxzLFxuICAgICAgICAgICAgbm90ZTogdGhpcy5ub3RlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZCh2aWV3KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBNb2RhbCB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RhbCc7XG5pbXBvcnQgSG9sZEluZm9ybWF0aW9uIGZyb20gJy4vSG9sZEluZm9ybWF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9sZEluZm9ybWF0aW9uTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG4gICAgY29uc3RydWN0b3IoeyBtb2RlbCwgdHlwZSB9KSB7XG4gICAgICAgIGNvbnN0IGluZm9ybWF0aW9uID0gbmV3IEhvbGRJbmZvcm1hdGlvbih7IG1vZGVsLCB0eXBlIH0pLnJlbmRlcigpO1xuICAgICAgICBjb25zdCBtb2RhbENvbnRlbnRzID0ge1xuICAgICAgICAgICAgY2xhc3NlczogWydIb2xkSW5mb3JtYXRpb25Nb2RhbCddLFxuICAgICAgICAgICAgdGl0bGU6IHdpbmRvdy5odG1sKCdob2xkc1JhdGlvSGVscE1vZGFsLmhlYWRpbmcnKSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGluZm9ybWF0aW9uLmVsXG4gICAgICAgIH07XG4gICAgICAgIHN1cGVyKG1vZGFsQ29udGVudHMpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IE1vZGFsIH0gZnJvbSAnLi4vY29tbW9uL21vZGFsJztcbmltcG9ydCBIb2xkSW5mb3JtYXRpb25WMiBmcm9tICcuL0hvbGRJbmZvcm1hdGlvblYyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9sZEluZm9ybWF0aW9uTW9kYWxWMiBleHRlbmRzIE1vZGFsIHtcbiAgICBjb25zdHJ1Y3Rvcih7IG1vZGVsLCBoaWRlSG9sZHNMaW5rID0gZmFsc2V9KSB7XG4gICAgICAgIGNvbnN0IGluZm9ybWF0aW9uID0gbmV3IEhvbGRJbmZvcm1hdGlvblYyKHttb2RlbCwgaGlkZUhvbGRzTGluaywgaXNWaXNpdG9yOiB3aW5kb3cuT3ZlckRyaXZlLmlzVmlzaXRvcn0pLnJlbmRlcigpO1xuICAgICAgICBjb25zdCBtb2RhbENvbnRlbnRzID0ge1xuICAgICAgICAgICAgY2xhc3NlczogWydIb2xkSW5mb3JtYXRpb25Nb2RhbFYyJ10sXG4gICAgICAgICAgICB0aXRsZTogd2luZG93Lmh0bWwoJ2hvbGRzUmF0aW9IZWxwTW9kYWwuaGVhZGluZycpLFxuICAgICAgICAgICAgY29udGVudDogaW5mb3JtYXRpb24uZWxcbiAgICAgICAgfTtcbiAgICAgICAgc3VwZXIobW9kYWxDb250ZW50cyk7XG4gICAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgKHsgZGVzY3JpcHRpb24sIGRldGFpbHMsIG5vdGUgfSkgPT4gYFxuICAgICR7ZGVzY3JpcHRpb24gJiYgZGVzY3JpcHRpb24ubGVuZ3RoID4gMCA/IGA8cCBjbGFzcz0nZGVzY3JpcHRpb24nPiR7ZGVzY3JpcHRpb259PC9wPmAgOiAnJ31cbiAgICAke2RldGFpbHMgJiYgZGV0YWlscy5tYXAoKGRldGFpbCkgPT4gYDxwIGNsYXNzPSdkZXRhaWwnPjxzcGFuIGNsYXNzPSdob2xkSW5mb0xhYmVsJz4ke2RldGFpbC5sYWJlbH06IDwvc3Bhbj48c3Bhbj4ke2RldGFpbC52YWx1ZX08L3NwYW4+PC9wPmApLmpvaW4oJycpfVxuICAgICR7bm90ZSAmJiBub3RlLmxlbmd0aCA+IDAgPyBgPHAgY2xhc3M9J25vdGUnPiR7bm90ZX08L3A+YCA6ICcnfVxuYDtcbiIsImltcG9ydCBIb2xkSW5mb3JtYXRpb25UZW1wbGF0ZSBmcm9tICcuL0hvbGRJbmZvcm1hdGlvblYyLmh0bWwnO1xuY29uc3QgeyB0ZXh0IH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvbGRJbmZvcm1hdGlvblYyIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgY29uc3RydWN0b3IoeyBoaWRlSG9sZHNMaW5rID0gZmFsc2UsIGlzVmlzaXRvciA9IGZhbHNlIH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5lbCA9IHRoaXMuZWwgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuaGlkZUhvbGRzTGluayA9IGhpZGVIb2xkc0xpbms7XG4gICAgICAgIHRoaXMuaXNWaXNpdG9yID0gaXNWaXNpdG9yO1xuICAgICAgICB0aGlzLk1BWF9XQUlUX01PTlRIU19UT19TSE9XID0gNjtcbiAgICAgICAgdGhpcy5NQVhfV0FJVF9XRUVLU19UT19TSE9XID0gMjY7XG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZTp0aXRsZVN0YXRlJywgdGhpcy5yZW1vdmVXYWl0VGltZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB2aWV3ID0gSG9sZEluZm9ybWF0aW9uVGVtcGxhdGUoe1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmRldGFpbHMsXG4gICAgICAgICAgICBub3RlOiB0aGlzLm5vdGUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZCh2aWV3KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZW1vdmVXYWl0VGltZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGlkZVdhaXRUaW1lKSB7XG4gICAgICAgICAgICB0aGlzLiRlbC5oaWRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUHJlcmVsZWFzZVRpdGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5wcmVyZWxlYXNlTm9XYWl0VGltZScpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHBpcmVkVGl0bGUpIHtcbiAgICAgICAgICAgIGxldCB0aGVUZXh0ID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5nZXQoJ3RpdGxlU3RhdGUnKSA9PT0gJ29uSG9sZCcpIHtcbiAgICAgICAgICAgICAgICB0aGVUZXh0ID0gdGV4dCgnaG9sZHNSYXRpb0hlbHBNb2RhbC5ub0NvcGllc09uUGxhY2VIb2xkJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoZVRleHQgPSB0ZXh0KCdob2xkc1JhdGlvSGVscE1vZGFsLm5vQ29waWVzVGV4dCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGlkZUhvbGRzTGlua1xuICAgICAgICAgICAgICAgID8gdGhlVGV4dFxuICAgICAgICAgICAgICAgIDogYDxzcGFuPiR7dGhlVGV4dH08YSBjbGFzcz1cIm1hbmFnZUhvbGRzTGlua1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vcmVmZXJyZXJcIiBocmVmPVwiL2FjY291bnQvaG9sZHNcIj4ke3RleHQoXG4gICAgICAgICAgICAgICAgICAgICAgJ2hvbGRTdWNjZXNzTW9kYWwubWFuYWdlSG9sZHMnXG4gICAgICAgICAgICAgICAgICApfTwvYT48L3NwYW4+YDtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMubW9kZWwuYWxsQ29waWVzQXJlTHVja3lEYXkgJiZcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJykgPT09ICdvbkhvbGQnXG4gICAgICAgICkge1xuICAgICAgICAgICAgbGV0IGRldGFpbHNVcmwgPSB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMubWVkaWFJZCwge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsLmdldCgnaWQnKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IGRldGFpbHNMaW5rID0gYDxhIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcIiBocmVmPVwiJHtkZXRhaWxzVXJsfVwiPiR7dGV4dChcbiAgICAgICAgICAgICAgICAnbHVja3lEYXkuYWxsTHVja3lEYXlIb2xkc0luZm9MaW5rVGV4dCdcbiAgICAgICAgICAgICl9PC9hPmA7XG4gICAgICAgICAgICByZXR1cm4gdGV4dCgnbHVja3lEYXkuYWxsTHVja3lEYXlIb2xkc0luZm8nLCB7IGxpbms6IGRldGFpbHNMaW5rIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNGYXN0TGFuZVRpdGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5hZHZhbnRhZ2VDYXZlYXQnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVmlzaXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQoJ2V4cGVjdGVkV2FpdFRpbWUucmxhQ2F2ZWF0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGdldCBkZXRhaWxzKCkge1xuICAgICAgICBsZXQgZGV0YWlscyA9IFtdO1xuICAgICAgICBpZiAoIXRoaXMuc2hvd1dhaXRUaW1lVW5hdmFpbGFibGUgJiYgIXRoaXMuaGlkZVdhaXRUaW1lKSB7XG4gICAgICAgICAgICBkZXRhaWxzLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0ZXh0KCdleHBlY3RlZFdhaXRUaW1lLndhaXRUaW1lJyksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMud2FpdFRpbWVUZXh0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2RlbC5nZXQoJ2hvbGRMaXN0UG9zaXRpb24nKSkge1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5wbGFjZUluTGluZScpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLm1vZGVsLmdldCgnaG9sZExpc3RQb3NpdGlvbicpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb3duZWRDb3BpZXMgPSB0aGlzLm1vZGVsLmdldCgnb3duZWRDb3BpZXMnKSB8fCAwO1xuICAgICAgICBsZXQgdG90YWxIb2xkcyA9IHRoaXMubW9kZWwuZ2V0KCdob2xkc0NvdW50JykgfHwgMDtcblxuICAgICAgICBkZXRhaWxzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IHRleHQoJ2V4cGVjdGVkV2FpdFRpbWUubGlicmFyeUNvcGllcycpLFxuICAgICAgICAgICAgdmFsdWU6IG93bmVkQ29waWVzLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob3duZWRDb3BpZXMgPiAxKSB7XG4gICAgICAgICAgICBsZXQgaG9sZHNSYXRpbyA9XG4gICAgICAgICAgICAgICAgb3duZWRDb3BpZXMgJiYgdG90YWxIb2xkcyA/IHRvdGFsSG9sZHMgLyBvd25lZENvcGllcyA6IDA7XG4gICAgICAgICAgICBsZXQgcmF0aW9EaXNwbGF5VmFsdWUgPVxuICAgICAgICAgICAgICAgIGhvbGRzUmF0aW8gPiAwICYmIGhvbGRzUmF0aW8gPCAxXG4gICAgICAgICAgICAgICAgICAgID8gJzwgMSdcbiAgICAgICAgICAgICAgICAgICAgOiBNYXRoLnJvdW5kKGhvbGRzUmF0aW8pO1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5wZW9wbGVXYWl0aW5nVG90YWwnKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdG90YWxIb2xkcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5wb2VwbGVXYWl0aW5nUGVyQ29weScpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByYXRpb0Rpc3BsYXlWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5wZW9wbGVXYWl0aW5nJyksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRvdGFsSG9sZHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGV0YWlscztcbiAgICB9XG5cbiAgICBnZXQgd2FpdFRpbWVIdG1sKCkge1xuICAgICAgICB2YXIgaHRtbCA9ICcnO1xuICAgICAgICBpZiAoIXRoaXMuaGlkZVdhaXRUaW1lKSB7XG4gICAgICAgICAgICBodG1sID0gYDxzcGFuIGNsYXNzPSd3YWl0aW5nVGV4dCc+JHt3aW5kb3cudGV4dChcbiAgICAgICAgICAgICAgICAnZXhwZWN0ZWRXYWl0VGltZS53YWl0VGltZSdcbiAgICAgICAgICAgICl9OiAke3RoaXMud2FpdFRpbWVUZXh0fTwvc3Bhbj5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodG1sO1xuICAgIH1cblxuICAgIGdldCB3YWl0VGltZVRleHQoKSB7XG4gICAgICAgIGxldCB3YWl0VGltZVRleHQgPSAnJztcblxuICAgICAgICBpZiAoIXRoaXMuaGlkZVdhaXRUaW1lKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG93V2FpdFRpbWVVbmF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgIHdhaXRUaW1lVGV4dCA9IHRleHQoJ2V4cGVjdGVkV2FpdFRpbWUubm90QXZhaWxhYmxlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBlc3RpbWF0ZWRXYWl0RGF5cyA9IE51bWJlcihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5nZXQoJ2VzdGltYXRlZFdhaXREYXlzJylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChlc3RpbWF0ZWRXYWl0RGF5cyA8PSA3KSB7XG4gICAgICAgICAgICAgICAgICAgIHdhaXRUaW1lVGV4dCA9IHRleHQoJ2V4cGVjdGVkV2FpdFRpbWUuYXZhaWxhYmxlU29vbicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZFdhaXREYXlzIDxcbiAgICAgICAgICAgICAgICAgICAgNyAqIHRoaXMuTUFYX1dBSVRfV0VFS1NfVE9fU0hPV1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB3YWl0VGltZVRleHQgPSB0ZXh0KCdleHBlY3RlZFdhaXRUaW1lLmFib3V0WFdlZWtzJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2Vla3M6IE1hdGguY2VpbChlc3RpbWF0ZWRXYWl0RGF5cyAvIDcpLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbnRlbnRpb25hbGx5IG1heCBvdXQgYXQgXCJhdCBsZWFzdCA2IG1vbnRoc1wiXG4gICAgICAgICAgICAgICAgICAgIHdhaXRUaW1lVGV4dCA9IHRleHQoJ2V4cGVjdGVkV2FpdFRpbWUuYXRMZWFzdFlNb250aHMnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aHM6IE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguY2VpbChlc3RpbWF0ZWRXYWl0RGF5cyAvIDMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLk1BWF9XQUlUX01PTlRIU19UT19TSE9XXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2FpdFRpbWVUZXh0O1xuICAgIH1cblxuICAgIGdldCBzaG93V2FpdFRpbWVVbmF2YWlsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZ2V0KCdlc3RpbWF0ZWRXYWl0RGF5cycpID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZ2V0KCdlc3RpbWF0ZWRXYWl0RGF5cycpID09PSBudWxsIHx8XG4gICAgICAgICAgICB0aGlzLmlzUHJlcmVsZWFzZVRpdGxlIHx8XG4gICAgICAgICAgICB0aGlzLmlzVmlzaXRvciB8fFxuICAgICAgICAgICAgdGhpcy5pc0V4cGlyZWRUaXRsZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBoaWRlV2FpdFRpbWUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmlzRmFzdExhbmVUaXRsZSB8fFxuICAgICAgICAgICAgdGhpcy5tb2RlbC5nZXQoJ3RpdGxlU3RhdGUnKSA9PT0gJ29uSG9sZCcgfHxcbiAgICAgICAgICAgICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdiZXR0ZXJQYXRyb25TdGF0ZScpXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1vZGVsLmdldCgnaXNCb3Jyb3dlZCcpXG4gICAgICAgICAgICAgICAgOiB0aGlzLm1vZGVsLmdldCgndGl0bGVTdGF0ZScpID09PSAnYm9ycm93ZWQnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBpc0V4cGlyZWRUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2RvbnQtbWFyay1zdS1hcy1leHBpcmVkJylcbiAgICAgICAgICAgID8gdGhpcy5tb2RlbC5pc0V4cGlyZWRcbiAgICAgICAgICAgIDogdGhpcy5tb2RlbC5nZXQoJ2lzT3duZWQnKSAmJlxuICAgICAgICAgICAgICAgICAgIXRoaXMubW9kZWwuZ2V0KCdvd25lZENvcGllcycpICYmXG4gICAgICAgICAgICAgICAgICAhdGhpcy5tb2RlbC5hbGxDb3BpZXNBcmVMdWNreURheTtcbiAgICB9XG5cbiAgICBnZXQgaXNGYXN0TGFuZVRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5nZXQoJ2lzRmFzdGxhbmUnKTtcbiAgICB9XG5cbiAgICBnZXQgaXNQcmVyZWxlYXNlVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmdldCgnaXNQcmVSZWxlYXNlVGl0bGUnKTtcbiAgICB9XG5cbiAgICBnZXQgbm90ZSgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cbiIsImltcG9ydCBDb250ZXh0TWVudVRlbXBsYXRlIGZyb20gJy4vdGVtcGxhdGVzL0NvbnRleHRNZW51Lmh0bWwnO1xuY29uc3QgeyBmZWF0dXJlTWFuYWdlciwgdXJsLCByb3V0ZXMsIE92ZXJEcml2ZSwgdGV4dCwgaHRtbCB9ID0gd2luZG93O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0TWVudSBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIHRlbXBsYXRlID0gQ29udGV4dE1lbnVUZW1wbGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuXG4gICAgICAgIHRoaXMucmlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDcpO1xuXG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZTppc0luSGlzdG9yeScsICgpID0+IHRoaXMucmVuZGVyKCkpO1xuXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgZXZlbnRzKCkge1xuICAgICAgICBsZXQgZXZlbnRzID0ge1xuICAgICAgICAgICAgJ2NsaWNrIC5qcy1oaXN0b3J5QWN0aW9uJzogJ19oYW5kbGVDbGljaycsXG4gICAgICAgICAgICAna2V5ZG93biAuanMtaGlzdG9yeUFjdGlvbic6ICdfaGFuZGxlS2V5SGlzdG9yeScsXG4gICAgICAgICAgICAna2V5ZG93biAuanMtY29udGV4dC1idXR0b24nOiAndG9nZ2xlJyxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdjbGVhbnVwQ29udGV4dE1lbnVUb2dnbGUnKSkge1xuICAgICAgICAgICAgZXZlbnRzWydrZXl1cCAuanMtY29udGV4dC1kcm9wJ10gPSAnX2hhbmRsZUtleVVwQ29udGFpbmVyJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnRzO1xuICAgIH1cblxuICAgIF9oYW5kbGVLZXlVcENvbnRhaW5lcihlKSB7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3IC8qRVNDKi8pIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9oYW5kbGVDbGljaygpIHtcbiAgICAgICAgdGhpcy5tb2RlbC50cmlnZ2VyKCd0aXRsZTphY3Rpb24nLCB7XG4gICAgICAgICAgICBhY3Rpb246ICdoaXN0b3J5JyxcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfaGFuZGxlS2V5SGlzdG9yeShlKSB7XG4gICAgICAgIGlmICghd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnY2xlYW51cENvbnRleHRNZW51VG9nZ2xlJykpIHtcbiAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMyB8fCBlLmtleUNvZGUgPT09IDMyKSB7XG4gICAgICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnY2xlYW51cENvbnRleHRNZW51VG9nZ2xlJykpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5tb2RlbC50cmlnZ2VyKCd0aXRsZTphY3Rpb24nLCB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgbW9kZWw6IHRoaXMubW9kZWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB2aWV3TW9kZWwoKSB7XG4gICAgICAgIGxldCBzZXJpZXNTZWFyY2hVcmwgPSAnJztcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmlzTWFnYXppbmUgJiZcbiAgICAgICAgICAgICAgICBmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ21hZ2F6aW5lLXJvbGx1cCcpXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZW5oYW5jZWRTZXJpZXMnKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZ2V0KCdkZXRhaWxlZFNlcmllcycpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzZXJpZXNTZWFyY2hVcmwgPSB1cmwocm91dGVzLnNlYXJjaEJ5VHlwZSwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VyaWVzSWQnLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeTogdGhpcy5tb2RlbC5nZXQoJ2RldGFpbGVkU2VyaWVzJykuc2VyaWVzSWQsXG4gICAgICAgICAgICAgICAgICAgIHNvcnRCeTogJ3JlYWRpbmdPcmRlcicsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZWwuZ2V0KCdzZXJpZXMnKSkge1xuICAgICAgICAgICAgICAgIHNlcmllc1NlYXJjaFVybCA9IHVybChyb3V0ZXMuc2VhcmNoQnlUeXBlLCB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXJpZXMnLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeTogdGhpcy5tb2RlbC5nZXQoJ3NlcmllcycpLFxuICAgICAgICAgICAgICAgICAgICBzb3J0Qnk6ICduZXdseWFkZGVkJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoYXNNZWRpYURvRm9ybWF0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubW9kZWwuZ2V0KCdmb3JtYXRzJykuZm9yRWFjaCgoZm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0LmlkID09PSAnZWJvb2stbWVkaWEtZG8nKSB7XG4gICAgICAgICAgICAgICAgaGFzTWVkaWFEb0Zvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBtYXR1cml0eUxldmVsID0gdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLnJhdGluZ3MubWF0dXJpdHlMZXZlbC5pZDtcblxuICAgICAgICBjb25zdCByZWxhdGVkVGl0bGVzUGFnZVVybCA9IGAke3dpbmRvdy51cmwoXG4gICAgICAgICAgICB3aW5kb3cucm91dGVzLm1lZGlhUmVsYXRlZElkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsLmdldCgnaWQnKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgKX0ke21hdHVyaXR5TGV2ZWwgPyBgP21hdHVyaXR5TGV2ZWw9JHttYXR1cml0eUxldmVsfWAgOiAnJ31gO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc093bmVkOiB0aGlzLm1vZGVsLmdldCgnaXNPd25lZCcpLFxuICAgICAgICAgICAgcmVsYXRlZFRpdGxlc1BhZ2VVcmwsXG4gICAgICAgICAgICBpZDogdGhpcy5tb2RlbC5pZCxcbiAgICAgICAgICAgIHJpZDogdGhpcy5yaWQsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5tb2RlbC5nZXQoJ3RpdGxlJyksXG4gICAgICAgICAgICB0eXBlSWQ6IHRoaXMubW9kZWwuZ2V0KCd0eXBlJykuaWQsXG4gICAgICAgICAgICBzYW1wbGVIcmVmOiB0aGlzLm1vZGVsLmdldCgnc2FtcGxlJykuaHJlZiB8fCAnJyxcbiAgICAgICAgICAgIHNhbXBsZVRleHQ6IHRoaXMuX2dldFNhbXBsZVRleHQoKSxcbiAgICAgICAgICAgIGFsaWdubWVudDogJ2JvdHRvbScsXG4gICAgICAgICAgICBoaXN0b3J5QWN0aW9uTGFiZWw6IHRoaXMuX2dldEhpc3RvcnlBY3Rpb25MYWJlbCgpLFxuICAgICAgICAgICAgaGlzdG9yeUFjdGlvblRleHQ6IHRoaXMuX2dldEhpc3RvcnlBY3Rpb25UZXh0KCksXG4gICAgICAgICAgICBoaXN0b3J5RW5hYmxlZDpcbiAgICAgICAgICAgICAgICBPdmVyRHJpdmUuc2hvd0hpc3RvcnlGZWF0dXJlICYmXG4gICAgICAgICAgICAgICAgIXRoaXMubW9kZWwuZ2V0KCdpc1ByZVJlbGVhc2VUaXRsZScpLFxuICAgICAgICAgICAgZ2FIaXN0b3J5QWN0aW9uOiB0aGlzLm1vZGVsLmdldCgnaXNJbkhpc3RvcnknKVxuICAgICAgICAgICAgICAgID8gJ2hpc3RvcnktcmVtb3ZlJ1xuICAgICAgICAgICAgICAgIDogJ2hpc3RvcnktYWRkJyxcbiAgICAgICAgICAgIHNlcmllc1NlYXJjaFVybCxcbiAgICAgICAgICAgIGhhc01lZGlhRG9Gb3JtYXQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX2dldFNhbXBsZVRleHQoKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLm1vZGVsLmdldCgndHlwZScpLmlkO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnYXVkaW9ib29rJyB8fCB0eXBlID09PSAnbXVzaWMnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dCgnc2FtcGxlTGlzdGVuJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQoJ3NhbXBsZVdhdGNoJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dCgnc2FtcGxlUmVhZCcpO1xuICAgIH1cblxuICAgIF9nZXRIaXN0b3J5QWN0aW9uTGFiZWwoKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5tb2RlbC5nZXQoJ3RpdGxlJyk7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmdldCgnaXNJbkhpc3RvcnknKSkge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWwoJ3JlYWRpbmdIaXN0b3J5LnJlbW92ZVRpdGxlJywgeyB0aXRsZSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sKCdyZWFkaW5nSGlzdG9yeS5hZGRUaXRsZScsIHsgdGl0bGUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZ2V0SGlzdG9yeUFjdGlvblRleHQoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmdldCgnaXNJbkhpc3RvcnknKSkge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWwoJ3JlYWRpbmdIaXN0b3J5LnJlbW92ZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWwoJ3JlYWRpbmdIaXN0b3J5LmFkZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZCh0aGlzLnRlbXBsYXRlKHRoaXMudmlld01vZGVsKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaXNLZXlib2FyZFNlbGVjdEV2ZW50ID0gKGUpID0+XG4gICAgICAgIChlLndoaWNoID09PSAxMyB8fCBlLndoaWNoID09PSAzMikgJiYgKGUucHJldmVudERlZmF1bHQoKSB8fCB0cnVlKTtcblxuICAgIGNsb3NlKCkge1xuICAgICAgICB3aW5kb3cuRm91bmRhdGlvbi5saWJzLmRyb3Bkb3duLmNsb3NlKFxuICAgICAgICAgICAgdGhpcy4kZWwuZmluZCgnLmpzLWNvbnRleHQtZHJvcCcpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdG9nZ2xlKGUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNLZXlib2FyZFNlbGVjdEV2ZW50KGUpKSB7XG4gICAgICAgICAgICB3aW5kb3cuRm91bmRhdGlvbi5saWJzLmRyb3Bkb3duLnRvZ2dsZShcbiAgICAgICAgICAgICAgICB0aGlzLiRlbC5maW5kKCcuanMtY29udGV4dC1idXR0b24nKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCBDb3ZlclRlbXBsYXRlIGZyb20gJy4vdGVtcGxhdGVzL0NvdmVyLmh0bWwnO1xuaW1wb3J0IE5vQ292ZXJUZW1wbGF0ZSBmcm9tICcuL3RlbXBsYXRlcy9Ob0NvdmVyLmh0bWwnO1xuaW1wb3J0IHsgdG9TdGF0aWNVcmwgfSBmcm9tICcuLi8uLi8uLi8uLi9saWIvYXNzZXRNYXBwZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3ZlciBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGNvbnN0cnVjdG9yKHsgY292ZXJXaWR0aHMsIGlzSW5IZXJvLCBpc1RpdGxlSGlzdG9yeSA9IGZhbHNlIH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcblxuICAgICAgICB0aGlzLmNvdmVyV2lkdGhzID0gXy5leHRlbmQoXG4gICAgICAgICAgICB7IG1vYmlsZTogMTQ1LCB0YWJsZXQ6IDE2MCwgZGVza3RvcDogMTkwIH0sXG4gICAgICAgICAgICBjb3ZlcldpZHRoc1xuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzSW5IZXJvID0gaXNJbkhlcm87XG4gICAgICAgIHRoaXMuaXNUaXRsZUhpc3RvcnkgPSBpc1RpdGxlSGlzdG9yeTtcblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWwsICdjaGFuZ2UnLCB0aGlzLl9yZW5kZXIpO1xuICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgICQod2luZG93KS5vZmYoYHJlc2l6ZS4ke3RoaXMubW9kZWwuaWR9YCk7XG4gICAgfVxuXG4gICAgX3JlbmRlcigpIHtcbiAgICAgICAgY29uc3QgbWVkaWEgPSB0aGlzLm1vZGVsLnRvSlNPTigpO1xuICAgICAgICBjb25zdCBjb3ZlcldpZHRoID0gYm93c2VyLm1vYmlsZVxuICAgICAgICAgICAgPyB0aGlzLmNvdmVyV2lkdGhzLm1vYmlsZVxuICAgICAgICAgICAgOiBib3dzZXIudGFibGV0XG4gICAgICAgICAgICA/IHRoaXMuY292ZXJXaWR0aHMudGFibGV0XG4gICAgICAgICAgICA6IHRoaXMuY292ZXJXaWR0aHMuZGVza3RvcDtcbiAgICAgICAgY29uc3QgY292ZXIgPSB0aGlzLm1vZGVsLmdldENvdmVyKGNvdmVyV2lkdGgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmlzUGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIGxldCAkY292ZXIgPSBgPGRpdiBjbGFzcz1cIkNvdmVySW1hZ2VDb250YWluZXJcIj48L2Rpdj5gO1xuICAgICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQoJGNvdmVyKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb3ZlciAmJiBjb3Zlci5ocmVmKSB7XG4gICAgICAgICAgICBsZXQgJGNvdmVyID0gJChcbiAgICAgICAgICAgICAgICBDb3ZlclRlbXBsYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgbWVkaWEsXG4gICAgICAgICAgICAgICAgICAgIGNvdmVyQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAoY292ZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Zlci5wcmltYXJ5Q29sb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Zlci5wcmltYXJ5Q29sb3IuaGV4KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2luaGVyaXQnLFxuICAgICAgICAgICAgICAgICAgICBzcmM6IGNvdmVyICYmIGNvdmVyLmhyZWYsXG4gICAgICAgICAgICAgICAgICAgIGhyZWY6IHRoaXMubW9kZWwudGl0bGVEZXRhaWxzVXJsLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogd2luZG93LnRleHQoJ2NvdmVyLmNvdmVySW1hZ2VMYWJlbCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBtZWRpYS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0b3I6IG1lZGlhLmZpcnN0Q3JlYXRvck5hbWUsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBub1NhbXBsZUNsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWEuc2FtcGxlLmhyZWYgPT0gbnVsbCA/ICdpcy1ub1NhbXBsZScgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgc3Jjc2V0OiBjb3ZlciAmJiBjb3Zlci5zcmNzZXQsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIExIVE5HLTIxMDU6IEluIHRoZSBldmVudCB0aGF0IGFuIGltYWdlIGZhaWxzIHRvIGxvYWQsIHdpcGUgb3V0IHRoZSBocmVmJ3MgYW5kIHVwZGF0ZSB0aGUgbW9kZWwgdG8gdHJpZ2dlciBhIHJlbmRlcigpXG4gICAgICAgICAgICAkY292ZXIuZmluZCgnaW1nJykub24oJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpbWFnZXNSZW1vdmVkID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5tb2RlbC5hdHRyaWJ1dGVzLmNvdmVycylcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgXyhpbWFnZXNSZW1vdmVkKS5lYWNoKChpbWFnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgaW1hZ2UuaHJlZjtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0KHsgY292ZXJzOiBpbWFnZXNSZW1vdmVkIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKCRjb3Zlcik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1RpdGxlSGlzdG9yeSkge1xuICAgICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgYDxhIGhyZWY9XCIke3RoaXMubW9kZWwudGl0bGVEZXRhaWxzVXJsfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIGFsdD1cIiR7d2luZG93Lmh0bWwoJ2NvdmVySW1hZ2VGb3JUaXRsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBtZWRpYS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgfSl9XCIgY2xhc3M9XCJoaXN0b3J5LW5vQ292ZXJcIiBzcmM9XCIke3RvU3RhdGljVXJsKFxuICAgICAgICAgICAgICAgICAgICAnaW1nL25vLWNvdmVyX2VuX1VTLmpwZydcbiAgICAgICAgICAgICAgICApfVwiPlxuICAgICAgICAgICAgICAgIDwvYT5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGNyZWF0b3JUZXh0ID0gdGhpcy5tb2RlbC5pc01hZ2F6aW5lXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1vZGVsLmdldCgnZWRpdGlvbicpXG4gICAgICAgICAgICAgICAgOiB0aGlzLm1vZGVsLmdldCgnZmlyc3RDcmVhdG9yTmFtZScpO1xuICAgICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgTm9Db3ZlclRlbXBsYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgbWVkaWEsXG4gICAgICAgICAgICAgICAgICAgIGhyZWY6IHRoaXMubW9kZWwudGl0bGVEZXRhaWxzVXJsLFxuICAgICAgICAgICAgICAgICAgICBpc0luSGVybzogdGhpcy5pc0luSGVybyxcbiAgICAgICAgICAgICAgICAgICAgY292ZXJXaWR0aDogY292ZXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgY292ZXJIZWlnaHQ6IChjb3ZlcldpZHRoICogMjkzKSAvIDIyMCxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRvclRleHQ6IGNyZWF0b3JUZXh0LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgJCh3aW5kb3cpLm9uKFxuICAgICAgICAgICAgICAgIGByZXNpemUuJHt0aGlzLm1vZGVsLmlkfWAsXG4gICAgICAgICAgICAgICAgXy5iaW5kKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VPdmVyZmxvdyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgJy5Db3ZlckltYWdlQ29udGFpbmVyIC5ub0NvdmVyQXZhaWxhYmxlIC50aXRsZScsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZ2V0KCd0aXRsZScpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICQod2luZG93KS5vbihcbiAgICAgICAgICAgICAgICBgcmVzaXplLiR7dGhpcy5tb2RlbC5pZH1gLFxuICAgICAgICAgICAgICAgIF8uYmluZChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFuYWdlT3ZlcmZsb3csXG4gICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICcuQ292ZXJJbWFnZUNvbnRhaW5lciAubm9Db3ZlckF2YWlsYWJsZSAuYXV0aG9yJyxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRvclRleHRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgJCh3aW5kb3cpLm9uKFxuICAgICAgICAgICAgICAgIGByZXNpemUuJHt0aGlzLm1vZGVsLmlkfWAsXG4gICAgICAgICAgICAgICAgXy5iaW5kKHRoaXMuX3Jlc2l6ZUNsZWFySW1hZ2UsIHRoaXMpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyB0aW1lb3V0IGdpdmVzIGJyb3dzZXIgY2hhbmNlIHRvIGRyYXcgYW5kIHNldCBpbm5lckhUTUwgdmFsdWVzIHVzZWRcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hbmFnZU92ZXJmbG93KFxuICAgICAgICAgICAgICAgICAgICAnLkNvdmVySW1hZ2VDb250YWluZXIgLm5vQ292ZXJBdmFpbGFibGUgLnRpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5nZXQoJ3RpdGxlJylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX21hbmFnZU92ZXJmbG93KFxuICAgICAgICAgICAgICAgICAgICAnLkNvdmVySW1hZ2VDb250YWluZXIgLm5vQ292ZXJBdmFpbGFibGUgLmF1dGhvcicsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0b3JUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNpemVDbGVhckltYWdlKCk7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9yZXNpemVDbGVhckltYWdlKCkge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignaW1nJyk7XG4gICAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICAgICAgJChpbWFnZSkuaGVpZ2h0KCgkKGltYWdlKS5wYXJlbnQoKS53aWR0aCgpICogMjkzKSAvIDIyMCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX21hbmFnZU92ZXJmbG93KHNlbGVjdG9yLCByZXNldFRleHQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHJlc2V0VGV4dDtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rvci5pbmRleE9mKCcudGl0bGUnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoJChlbGVtZW50KS53aWR0aCgpIDwgMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdmb250LXNpemUnLCAnMTRweCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkud2lkdGgoKSA8IDEyNSAmJlxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPj0gMTAwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdmb250LXNpemUnLCAnMTZweCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkud2lkdGgoKSA8IDE1MCAmJlxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPj0gMTI1XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdmb250LXNpemUnLCAnMThweCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJChlbGVtZW50KS53aWR0aCgpID49IDE1MCkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzIwcHgnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmluZGV4T2YoJy5hdXRob3InKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoJChlbGVtZW50KS53aWR0aCgpIDwgMTEwKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdmb250LXNpemUnLCAnMTBweCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkud2lkdGgoKSA8IDEzNSAmJlxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPj0gMTEwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdmb250LXNpemUnLCAnMTJweCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkud2lkdGgoKSA8IDE2MCAmJlxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPj0gMTM1XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdmb250LXNpemUnLCAnMTRweCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJChlbGVtZW50KS53aWR0aCgpID49IDE2MCkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzE2cHgnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgPiAwICYmXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBlbGVtZW50LmNsaWVudEhlaWdodFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSBlbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYCR7dGV4dC5yZXBsYWNlKC9cXFcrJC9nLCAnJyl9Li4uYDsgLy8gcmVtb3ZlIHRyYWlsaW5nIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgYWRkIGVsbGlwc2lzXG4gICAgICAgICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgICAgICAgICB0ZXh0ICE9PSAnLi4uJyAmJlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNjcm9sbEhlaWdodCA+IGVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcVypcXHdcXFcqKFxcLnszfSkkL2csICckMScpOyAvLyByZW1vdmUgYSBub24tZWxsaXBzaXMgY2hhcmFjdGVyIGFuZCB1bndhbnRlZCBjaGFyYWN0ZXJzIGFyb3VuZCBpdM6pXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gdG9kbzogcHV0IGEgbWluIHdpZHRoIGFuIGhlaWdodCBvbiB0aGlzISBXZSBrbm93IHdoYXQgdGhlIGhlaWdodHMgYXJlIGZvciBwYXJ0aWN1bGFyIHNjcmVlbiB3aWR0aHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCBNZWRpYVBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2Rhby9NZWRpYVBhcmFtZXRlcnMnO1xuaW1wb3J0IFRpdGxlQ29sbGVjdGlvbiBmcm9tICcuL21vZGVscy9UaXRsZUNvbGxlY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYUludGVyZmFjZSB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgXy5leHRlbmQodGhpcywgQmFja2JvbmUuRXZlbnRzKTtcblxuICAgICAgICB0aGlzLml0ZW1zICAgICAgICAgID0gbmV3IFRpdGxlQ29sbGVjdGlvbigpO1xuICAgICAgICB0aGlzLmZhY2V0cyAgICAgICAgID0ge307XG4gICAgICAgIHRoaXMuc29ydE9wdGlvbnMgICAgPSBbXTtcbiAgICB9XG5cbiAgICBxdWlja1NlYXJjaCh0ZXJtLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mZXRjaChfLmV4dGVuZCh7fSwgeyBxdWVyeTogdGVybSB9LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgc2VhcmNoKHBhcmFtZXRlcnMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoKF8uZXh0ZW5kKHt9LCBwYXJhbWV0ZXJzLCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgZmV0Y2hDb2xsZWN0aW9uQnlJZChpZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2goXy5leHRlbmQoe30sIHsgY29sbGVjdGlvbklkOiBpZCB9LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgZmV0Y2hDb2xsZWN0aW9uQnlQYXJhbWV0ZXJzKGNvbGxlY3Rpb25GaWx0ZXJzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mZXRjaChfLmV4dGVuZCh7fSwgY29sbGVjdGlvbkZpbHRlcnMsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICAvKiogVXRpbGl0eSBmdW5jdGlvbiB0byBzaW11bGF0ZSBhIGRhdGEgY2FsbCwgYnV0IGRlbGliZXJhdGxleSByZXR1cm4gYW4gZW1wdHkgcmVzdWx0IHNldCAqL1xuICAgIGZldGNoRW1wdHlSZXNwb25zZSgpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jOnN0YXJ0JywgdGhpcywgeyBtZWRpYVBhcmFtZXRlcnM6IG51bGwgfSk7XG5cbiAgICAgICAgbGV0IGVtcHR5UmVzcG9uc2UgPSB7XG4gICAgICAgICAgICBpdGVtcyAgICAgICA6IFtdLFxuICAgICAgICAgICAgZmFjZXRzICAgICAgOiB7fSxcbiAgICAgICAgICAgIHNvcnRPcHRpb25zIDogW11cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9mZXRjaERvbmUoZW1wdHlSZXNwb25zZSwgJ3N5bnRoZXRpYycpO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlcignc3luYzplbmQnLCB0aGlzKTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVtcHR5UmVzcG9uc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7TWVkaWFQYXJhbWV0ZXJzfSBwYXJhbWV0ZXJzXG4gICAgICogQG1lbWJlcm9mIE1lZGlhSW50ZXJmYWNlXG4gICAgICovXG4gICAgX2ZldGNoKHBhcmFtZXRlcnMpIHtcblxuICAgICAgICBpZiAoIXBhcmFtZXRlcnMpe1xuICAgICAgICAgICAgcGFyYW1ldGVycyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgYSB0aXRsZSBpZCBpcyBzcGVjaWZpY2VkIHRoZW4gbm8gZmFjZXRzIHdpbGwgYmUgY2FsY3VsYXRlZCByZWdhcmRsZXNzIG9mIHRoZSBwYXJhbXMgc2VudC5cbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLmluY2x1ZGVkRmFjZXRzICYmICFwYXJhbWV0ZXJzLnRpdGxlSWQpe1xuICAgICAgICAgICAgcGFyYW1ldGVycy5pbmNsdWRlZEZhY2V0cyA9IHdpbmRvdy5PdmVyRHJpdmUuc3VwcG9ydGVkRmFjZXRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ0x1Y2t5RGF5JykgJiYgcGFyYW1ldGVycy5zaHVmZmxlKXtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRzID0gWydtb3N0cG9wdWxhcicsICdyZWxlYXNlZGF0ZScsICd0aXRsZScsICdhdXRob3InLCAnbmV3bHlhZGRlZCcsICdsb3djaXJjdWxhdGluZycsICdtb3N0cG9wdWxhci1zaXRlJ107XG4gICAgICAgICAgICBwYXJhbWV0ZXJzLnNvcnRCeSA9IHNvcnRzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHNvcnRzLmxlbmd0aCldO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1lZGlhUGFyYW1ldGVycyA9IG5ldyBNZWRpYVBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG5cbiAgICAgICAgaWYgKCEhd2luZG93Lk92ZXJEcml2ZS5zaG93T25seUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgbWVkaWFQYXJhbWV0ZXJzLnNob3dPbmx5QXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJpZ2dlcignc3luYzpzdGFydCcsIHRoaXMsIHsgbWVkaWFQYXJhbWV0ZXJzIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogd2luZG93LnVybCh3aW5kb3cucm91dGVzLnJlc3QubWVkaWEuaW5kZXgpLFxuICAgICAgICAgICAgICAgIG1ldGhvZCAgOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnLFxuICAgICAgICAgICAgICAgIGRhdGEgICAgOiBKU09OLnN0cmluZ2lmeShtZWRpYVBhcmFtZXRlcnMuc2VyaWFsaXplKCkpLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmRvbmUoKGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ0x1Y2t5RGF5JykgJiYgcGFyYW1ldGVycy5zaHVmZmxlKXtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5pdGVtcyA9IGRhdGEuaXRlbXMgJiYgXy5zaHVmZmxlKGRhdGEuaXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnb25seS1zaG93LW93bmVkLWNvbnRlbnQnKSAmJiBkYXRhLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuaXRlbXMgPSBkYXRhLml0ZW1zLmZpbHRlcigoeCkgPT4geC5pc093bmVkID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZmV0Y2hEb25lKGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3N5bmM6ZW5kJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmFpbCgoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmV0Y2hGYWlsKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bik7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jOmVuZCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIHJlamVjdChqcVhIUik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2ZldGNoRG9uZShkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuICAgICAgICB0aGlzLml0ZW1zLnJlc2V0KGRhdGEuaXRlbXMpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3N5bmM6c3VjY2VzcycsIHRoaXMsIHsgZGF0YSwgdGV4dFN0YXR1cywganFYSFIgfSk7XG4gICAgfVxuXG4gICAgX2ZldGNoRmFpbChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jOmZhaWwnLCB0aGlzLCB7IGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biB9KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhZGluZ0hpc3RvcnlCdXR0b25UZW1wbGF0ZSBmcm9tICcuL3RlbXBsYXRlcy9SZWFkaW5nSGlzdG9yeUJ1dHRvbi5odG1sJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZGluZ0hpc3RvcnlCdXR0b24gZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdlOmlzSW5IaXN0b3J5JywgdGhpcy5yZW5kZXIpO1xuICAgIH1cblxuICAgIGV2ZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHsgJ2NsaWNrJzogJ19oYW5kbGVDbGljaycgfTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbCB8fCB0aGlzLiRlbC5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICByZXR1cm47IC8vIHdlIGhhdmUgbm8gdGFyZ2V0IHRvIHJlbmRlciBhbnl0aGluZyBpbnRvXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hbmltYXRlKCk7XG4gICAgICAgIGlmICh3aW5kb3cuT3ZlckRyaXZlLnNob3dIaXN0b3J5RmVhdHVyZSAmJiAhdGhpcy5tb2RlbC5nZXQoJ2lzUHJlUmVsZWFzZVRpdGxlJykpIHtcbiAgICAgICAgICAgIC8vIHJldGFpbiBmb2N1cyBvbiByZXJlbmRlclxuICAgICAgICAgICAgY29uc3QgbmVlZHNSZWZvY3VzID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcuUmVhZGluZ0hpc3RvcnlCdXR0b24nKSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICAgICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTtcblxuICAgICAgICAgICAgY29uc3QgaXNJbkhpc3RvcnkgPSB0aGlzLm1vZGVsLmdldCgnaXNJbkhpc3RvcnknKTtcbiAgICAgICAgICAgIGxldCB2aWV3TW9kZWw7XG4gICAgICAgICAgICBpZiAoaXNJbkhpc3RvcnkpIHtcbiAgICAgICAgICAgICAgICB2aWV3TW9kZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1lZGlhSWQgICAgICAgOiB0aGlzLm1vZGVsLmdldCgnaWQnKSxcbiAgICAgICAgICAgICAgICAgICAgZ2FBY3Rpb24gICAgICA6ICdoaXN0b3J5LXJlbW92ZScsXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbCAgICAgOiB3aW5kb3cuaHRtbCgncmVhZGluZ0hpc3RvcnkucmVtb3ZlVGl0bGUnLCB7dGl0bGU6IHRoaXMubW9kZWwuZ2V0KCd0aXRsZScpfSksXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3NlcyAgOiAnc2Vjb25kYXJ5LWNvbG9yLWhvdmVyYWJsZSBpbi1oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAgICAgdGV4dCAgICAgICAgICA6IHdpbmRvdy5odG1sKCdyZWFkaW5nSGlzdG9yeS5yZW1vdmUnKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZpZXdNb2RlbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFJZCAgICAgICA6IHRoaXMubW9kZWwuZ2V0KCdpZCcpLFxuICAgICAgICAgICAgICAgICAgICBnYUFjdGlvbiAgICAgIDogJ2hpc3RvcnktYWRkJyxcbiAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsICAgICA6IHdpbmRvdy5odG1sKCdyZWFkaW5nSGlzdG9yeS5hZGRUaXRsZScsIHt0aXRsZTogdGhpcy5tb2RlbC5nZXQoJ3RpdGxlJyl9KSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzc2VzICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0ICAgICAgICAgIDogd2luZG93Lmh0bWwoJ3JlYWRpbmdIaXN0b3J5LmFkZCcpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbk5vZGUgPSAkKFJlYWRpbmdIaXN0b3J5QnV0dG9uVGVtcGxhdGUodmlld01vZGVsKSlbMF07XG5cbiAgICAgICAgICAgIHRoaXMuZWwuYXBwZW5kQ2hpbGQoYnV0dG9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChuZWVkc1JlZm9jdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJy5SZWFkaW5nSGlzdG9yeUJ1dHRvbicpLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfaGFuZGxlQ2xpY2soKSB7XG4gICAgICAgIHRoaXMubW9kZWwudHJpZ2dlcigndGl0bGU6YWN0aW9uJywgeyBhY3Rpb246ICdoaXN0b3J5JywgbW9kZWw6IHRoaXMubW9kZWwgfSk7XG4gICAgfVxuXG4gICAgX2FuaW1hdGUoKSB7XG4gICAgICAgIHRoaXMuJGVsLmZpbmQoJ2knKS5yZW1vdmVDbGFzcygnYW5pbWF0ZWQgYm91bmNlSW4gYm91bmNlT3V0JykuYWRkQ2xhc3MoJ2FuaW1hdGVkIGJvdW5jZU91dCcpO1xuICAgIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlQWN0aW9uQnV0dG9uIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgY29uc3RydWN0b3IoeyB0eXBlID0gJ2xpbmsnLCBhY3Rpb24sIHN0eWxlIH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcblxuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuXG4gICAgICAgIHRoaXMuaGFzQ3VzdG9tQWN0aW9uID0gZmFsc2U7XG4gICAgICAgIGlmICghIWFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgICAgICAgICB0aGlzLmhhc0N1c3RvbUFjdGlvbiA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG5cbiAgICAgICAgdGhpcy4kYnV0dG9uID0gJCgnPGEgLz4nKTtcblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWwsICdjaGFuZ2U6dGl0bGVTdGF0ZScsIHRoaXMucmVuZGVyKTtcblxuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZCh0aGlzLiRidXR0b24pO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIGdldCBpc0J1dHRvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2J1dHRvbic7XG4gICAgfVxuXG4gICAgZ2V0IGlzTGluaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2xpbmsnO1xuICAgIH1cblxuICAgIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLiRidXR0b24ub2ZmKCk7XG4gICAgICAgIHRoaXMuJGVsLm9mZigpO1xuXG4gICAgICAgIGNvbnN0IGJ1dHRvblByb3BzID0gdGhpcy5nZXRCdXR0b25Qcm9wcygpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gYnV0dG9uUHJvcHMuYXR0cmlidXRlcztcbiAgICAgICAgaWYgKF8oYXR0cmlidXRlcy5ocmVmKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMucm9sZSA9ICdidXR0b24nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXR0cmlidXRlcy5yb2xlID0gJ2xpbmsnO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kYnV0dG9uLmF0dHIoYXR0cmlidXRlcyk7XG4gICAgICAgIHRoaXMuJGJ1dHRvbi5odG1sKGJ1dHRvblByb3BzLmh0bWwpO1xuXG4gICAgICAgIC8vIEF0dGFjaCBldmVudCBoYW5kbGVycyBpZiBlaXRoZXIgaXMgdHJ1ZVxuICAgICAgICAvLyAtIEJ1dHRvbiBpcyBub3QgYSBsaW5rXG4gICAgICAgIC8vIC0gQ3VzdG9tIGFjdGlvbiBoYXMgYmVlbiBwcm92aWRlZFxuICAgICAgICBpZiAoYXR0cmlidXRlcy5yb2xlICE9PSAnbGluaycgfHwgdGhpcy5oYXNDdXN0b21BY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2F0dGFjaEV2ZW50SGFuZGxlcnModGhpcy4kYnV0dG9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdhaXRpbmcoaXNXYWl0aW5nID0gdHJ1ZSkge1xuICAgICAgICBpZiAoaXNXYWl0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLiRidXR0b25cbiAgICAgICAgICAgICAgICAub2ZmKCcudGl0bGVBY3Rpb25CdXR0b24nKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnd2FpdGluZycpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2Rpc2FibGVkJywgaXNXYWl0aW5nKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoJzxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiRidXR0b25cbiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3dhaXRpbmcnKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdkaXNhYmxlZCcsIGlzV2FpdGluZylcbiAgICAgICAgICAgICAgICAuZmluZCgnLnNwaW5uZXInKVxuICAgICAgICAgICAgICAgIC5yZW1vdmUoKTtcblxuICAgICAgICAgICAgdGhpcy5fYXR0YWNoRXZlbnRIYW5kbGVycyh0aGlzLiRidXR0b24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaXNTZWxlY3RFdmVudCA9IChlKSA9PlxuICAgICAgICAoZS50eXBlID09PSAnY2xpY2snIHx8IGUud2hpY2ggPT09IDEzIHx8IGUud2hpY2ggPT09IDMyKSAmJlxuICAgICAgICAoZS5wcmV2ZW50RGVmYXVsdCgpIHx8IHRydWUpO1xuXG4gICAgX2F0dGFjaEV2ZW50SGFuZGxlcnMoJGVsKSB7XG4gICAgICAgICRlbC5vZmYoJy50aXRsZUFjdGlvbkJ1dHRvbicpO1xuXG4gICAgICAgICRlbC5vbignY2xpY2sudGl0bGVBY3Rpb25CdXR0b24nLCAoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEV2ZW50KGUpICYmIHRoaXMuYWN0aW9uKGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgJGVsLm9uKCdrZXlkb3duLnRpdGxlQWN0aW9uQnV0dG9uJywgKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RFdmVudChlKSAmJiB0aGlzLmFjdGlvbihlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWN0aW9uKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RFdmVudChldmVudCkgJiYgdGhpcy5fdHJpZ2dlclRpdGxlQWN0aW9uKCk7XG4gICAgfVxuXG4gICAgX3RyaWdnZXJUaXRsZUFjdGlvbigpIHtcbiAgICAgICAgdGhpcy5tb2RlbC50cmlnZ2VyKCd0aXRsZTphY3Rpb24nLCB7XG4gICAgICAgICAgICBhY3Rpb246IHRoaXMuc3RhdGUsXG4gICAgICAgICAgICBtb2RlbDogdGhpcy5tb2RlbCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2dldEJvcnJvd0J1dHRvblRleHQoKSB7XG4gICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMudHlwZS5pZCA9PT0gJ2F1ZGlvYm9vaydcbiAgICAgICAgICAgICAgICA/IHdpbmRvdy5odG1sKCdsaXN0ZW4nKVxuICAgICAgICAgICAgICAgIDogd2luZG93Lmh0bWwoJ3JlYWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2luZG93Lmh0bWwoJ2JvcnJvdycpO1xuICAgIH1cblxuICAgIF9nZXRCb3Jyb3dCdXR0b25BcmlhTGFiZWwodGl0bGUpIHtcbiAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2dlby1pZGMnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuYXR0cmlidXRlcy50eXBlLmlkID09PSAnYXVkaW9ib29rJ1xuICAgICAgICAgICAgICAgID8gd2luZG93Lmh0bWwoJ2xpc3RlblRvVGl0bGUnLCB7IHRpdGxlIH0pXG4gICAgICAgICAgICAgICAgOiB3aW5kb3cuaHRtbCgncmVhZFRpdGxlJywgeyB0aXRsZSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2luZG93Lmh0bWwoJ2JvcnJvd1RpdGxlJywgeyB0aXRsZSB9KTtcbiAgICB9XG5cbiAgICBnZXRCdXR0b25Qcm9wcygpIHtcbiAgICAgICAgbGV0IGJ1dHRvbkF0dHJzID0ge1xuICAgICAgICAgICAgJ2RhdGEtbWVkaWEtaWQnOiB0aGlzLm1vZGVsLmlkLFxuICAgICAgICAgICAgJ2RhdGEtdHlwZSc6IHRoaXMubW9kZWwuYXR0cmlidXRlcy50eXBlLmlkLFxuICAgICAgICAgICAgJ2RhdGEtdHlwZS1uYW1lJzpcbiAgICAgICAgICAgICAgICAodGhpcy5tb2RlbC5hdHRyaWJ1dGVzLnR5cGUuaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lmh0bWwodGhpcy5tb2RlbC5hdHRyaWJ1dGVzLnR5cGUuaWQpKSB8fFxuICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgdGFiaW5kZXg6IDAsXG4gICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBodG1sID0gKHRoaXMuJGJ1dHRvbi5odG1sICYmIHRoaXMuJGJ1dHRvbi5odG1sKCkpIHx8ICcnO1xuXG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMubW9kZWwuYXR0cmlidXRlcy50aXRsZTtcblxuICAgICAgICBsZXQgY2xhc3NlcyA9IFsnVGl0bGVBY3Rpb25CdXR0b24nLCAndS1hbGxDYXBzJ107XG5cbiAgICAgICAgaWYgKHRoaXMuaXNCdXR0b24pIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCguLi5bJ2J1dHRvbicsICdyYWRpdXMnLCAnaXMtYnV0dG9uJywgJ3NlY29uZGFyeSddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlID09PSAnZmlsbCcpIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnZmlsbCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICd1bmF2YWlsYWJsZSc6XG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy11bmF2YWlsYWJsZSBqcy11bmF2YWlsYWJsZSBkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCd2aXNpYmxlLXVuYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+JHt3aW5kb3cuaHRtbCgnYXZhaWxhYmlsaXR5VW5hdmFpbGFibGUnKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vb2snOlxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtbm9vayBqcy1ub29rJyk7XG4gICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKCdzZW5kVG9Ob29rJyl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwcmV2aWV3JzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzZWNvbmRhcnktY29sb3InKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLXByZXZpZXcganMtcHJldmlldyBzZWNvbmRhcnknKTtcbiAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPiR7d2luZG93Lmh0bWwoJ2RlbW9Nb2RlLnByZXZpZXcnKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRyc1snYXJpYS1sYWJlbCddID0gd2luZG93Lmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICdkZW1vTW9kZS5wcmV2aWV3VGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICB7IHRpdGxlIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYm9ycm93JzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzZWNvbmRhcnktY29sb3InKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLWJvcnJvdyBqcy1ib3Jyb3cgc2Vjb25kYXJ5Jyk7XG4gICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj4ke3RoaXMuX2dldEJvcnJvd0J1dHRvblRleHQoKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRyc1snYXJpYS1sYWJlbCddID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0Qm9ycm93QnV0dG9uQXJpYUxhYmVsKHRpdGxlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JvcnJvd2VkJzpcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZ2VvLWlkYycpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtb3BlbkJvb2sgYmlnJyk7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+JHt3aW5kb3cuaHRtbCgnb3BlbkJvb2snKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuaHJlZiA9IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYURvd25sb2FkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IHRoaXMubW9kZWwuYXR0cmlidXRlcy5mb3JtYXRzWzBdLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFJZDogdGhpcy5tb2RlbC5pZCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzWydhcmlhLWxhYmVsJ10gPSB3aW5kb3cuaHRtbCgnb3BlbkJvb2tMYWJlbCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlTmFtZTogdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBidXR0b25BdHRycy50YXJnZXQgPSAnX2JsYW5rJztcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMucmVsID0gJ25vcmVmZXJyZXInO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtYm9ycm93ZWQganMtYm9ycm93ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKCdnb1RvTG9hbnMnKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuaHJlZiA9IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5hY2NvdW50TG9hbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvbGQnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGluaykge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NlY29uZGFyeS1jb2xvci1ob3ZlcicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtaG9sZCBqcy1ob2xkJyk7XG4gICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKCdwbGFjZUFIb2xkJyl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnNbJ2FyaWEtbGFiZWwnXSA9IHdpbmRvdy5odG1sKCdwbGFjZUFIb2xkT25UaXRsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvbkhvbGQnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgncHJpbWFyeScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtb25Ib2xkIGpzLW9uSG9sZCcpO1xuICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+JHt3aW5kb3cuaHRtbCgnZ29Ub0hvbGRzJyl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuaHJlZiA9IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5hY2NvdW50SG9sZHMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVuZXcnOlxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtcmVuZXcgcmVuZXdhbEJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcigoYykgPT4gYyAhPT0gJ3UtYWxsQ2FwcycpO1xuICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+PGkgY2xhc3M9XCJpY29uIGljb24tcmVuZXdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+JHt3aW5kb3cuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJ3JlbmV3YWwucmVuZXdUaXRsZScsXG4gICAgICAgICAgICAgICAgICAgIHsgdGl0bGU6ICcnIH1cbiAgICAgICAgICAgICAgICApfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVxdWVzdEFnYWluJzpcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLXJlcXVlc3RBZ2FpbiByZW5ld2FsQnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmlsdGVyKChjKSA9PiBjICE9PSAndS1hbGxDYXBzJyk7XG4gICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj48aSBjbGFzcz1cImljb24gaWNvbi1yZW5ld1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ke3dpbmRvdy5odG1sKFxuICAgICAgICAgICAgICAgICAgICAnYWNjb3VudExvYW5zLnJlcXVlc3RBZ2FpbidcbiAgICAgICAgICAgICAgICApfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVxdWVzdGVkJzpcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLXJlcXVlc3RlZCByZW5ld2FsQnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmlsdGVyKChjKSA9PiBjICE9PSAndS1hbGxDYXBzJyk7XG4gICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj48aSBjbGFzcz1cImljb24gaWNvbi1yZW5ld1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ke3dpbmRvdy5odG1sKFxuICAgICAgICAgICAgICAgICAgICAnYWNjb3VudExvYW5zLnJlcXVlc3RlZCdcbiAgICAgICAgICAgICAgICApfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVuZXdlZCc6XG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1yZW5ld2VkIHJlbmV3YWxCdXR0b24nKTtcbiAgICAgICAgICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5maWx0ZXIoKGMpID0+IGMgIT09ICd1LWFsbENhcHMnKTtcbiAgICAgICAgICAgICAgICBodG1sID0gYDxzcGFuPjxpIGNsYXNzPVwiaWNvbiBpY29uLXJlbmV3XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiR7d2luZG93Lmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICdhY2NvdW50TG9hbnMucmVuZXdlZCdcbiAgICAgICAgICAgICAgICApfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGlzdGVuTm93JzpcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLWxpc3Rlbk5vdycpO1xuICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+JHt3aW5kb3cuaHRtbCgnbGlzdGVuTm93Jyl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuaHJlZiA9IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYURvd25sb2FkLCB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2F1ZGlvYm9vay1vdmVyZHJpdmUnLFxuICAgICAgICAgICAgICAgICAgICBtZWRpYUlkOiB0aGlzLm1vZGVsLmlkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLnJlbCA9ICdub3JlZmVycmVyJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JlYWROb3cnOlxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtcmVhZE5vdycpO1xuICAgICAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4+JHt3aW5kb3cuaHRtbCgncmVhZE5vdycpfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLmhyZWYgPSB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMubWVkaWFEb3dubG9hZCwge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdlYm9vay1vdmVyZHJpdmUnLFxuICAgICAgICAgICAgICAgICAgICBtZWRpYUlkOiB0aGlzLm1vZGVsLmlkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLnJlbCA9ICdub3JlZmVycmVyJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FkZFRvQXBwJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzZWNvbmRhcnktY29sb3ItaG92ZXInKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLWFkZFRvQXBwJyk7XG4gICAgICAgICAgICAgICAgaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKCdhZGRUb0FwcCcpfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLmhyZWYgPSB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMubWVkaWFEb3dubG9hZCwge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IHRoaXMubW9kZWwuZ2V0KCdhZGRUb0FwcEZvcm1hdCcpLFxuICAgICAgICAgICAgICAgICAgICBtZWRpYUlkOiB0aGlzLm1vZGVsLmlkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2FpdGluZyc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkb3RTcGlubmVyID0gJCh3aW5kb3cucHJpbWFyeUFjdGlvbkxvYWRpbmdHaWYpO1xuICAgICAgICAgICAgICAgICAgICBkb3RTcGlubmVyLmNzcygnd2lkdGgnLCAnaW5oZXJpdCcpO1xuICAgICAgICAgICAgICAgICAgICBodG1sID0gZG90U3Bpbm5lcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCd3YWl0aW5nIHNlY29uZGFyeScpO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBodG1sID0gJzxzcGFuPndvcmtpbmc8L3NwYW4+PGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj4nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgYnV0dG9uQXR0cnMuY2xhc3MgPSBjbGFzc2VzLmpvaW4oJyAnKTtcblxuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzOiBidXR0b25BdHRycywgaHRtbCB9O1xuICAgIH1cbn1cbiIsImltcG9ydCBUaXRsZUNhcmRUZW1wbGF0ZSBmcm9tICcuL3RlbXBsYXRlcy9UaXRsZUNhcmQuaHRtbCc7XG5cbmltcG9ydCBUaXRsZUluZm8gZnJvbSAnLi92aWV3cy9UaXRsZUluZm8nO1xuaW1wb3J0IFRpdGxlQWN0aW9uQnV0dG9uIGZyb20gJy4vVGl0bGVBY3Rpb25CdXR0b24nO1xuaW1wb3J0IFdpc2hMaXN0QnV0dG9uIGZyb20gJy4vV2lzaExpc3RCdXR0b24nO1xuaW1wb3J0IFRpdGxlSGVhZGVyQmFyIGZyb20gJy4vVGl0bGVIZWFkZXJCYXInO1xuaW1wb3J0IENvdmVyIGZyb20gJy4vQ292ZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaXRsZUNhcmQgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBnZXQgY2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gJ3RpdGxlLWNvbnRhaW5lciB0aXRsZSc7XG4gICAgfVxuXG4gICAgdGVtcGxhdGUgPSBUaXRsZUNhcmRUZW1wbGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKHsgY292ZXJXaWR0aHMsIGlzSW5IZXJvID0gZmFsc2UgfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLl92aWV3cyA9IFtdO1xuXG4gICAgICAgIHRoaXMuY292ZXJXaWR0aHMgPSBjb3ZlcldpZHRocztcbiAgICAgICAgdGhpcy5pc0luSGVybyA9IGlzSW5IZXJvO1xuXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IG1vZGVsLCBjb3ZlcldpZHRocywgaXNJbkhlcm8gfSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTtcblxuICAgICAgICB0aGlzLl92aWV3cy5mb3JFYWNoKCh2aWV3KSA9PiB2aWV3LnJlbW92ZSgpKTtcbiAgICAgICAgdGhpcy5fdmlld3MgPSBbXTtcblxuICAgICAgICBjb25zdCAkdG1wID0gJChcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGUoe1xuICAgICAgICAgICAgICAgIGdlb0lkY0NsYXNzOiB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJylcbiAgICAgICAgICAgICAgICAgICAgPyAnZ2VvSWRjJ1xuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBUT0RPOiBUaGlzIHdpbGwgbm90IHdvcmsgIHdpdGggQ1NTIHRyYW5zaXRpb24gYW5pbWF0aW9uc1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5pc1BsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICB0aGlzLiRlbC5hZGRDbGFzcygncGxhY2Vob2xkZXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZ2VvLWlkYycpKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgICAgICh0aGlzLnRpdGxlSGVhZGVyQmFyID0gbmV3IFRpdGxlSGVhZGVyQmFyKHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIGVsOiAkdG1wLmZpbmQoJy5UaXRsZUhlYWRlckJhcicpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAodGhpcy5jb3ZlciA9IG5ldyBDb3Zlcih7XG4gICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgZWw6ICR0bXAuZmluZCgnLkNvdmVySW1hZ2UnKSxcbiAgICAgICAgICAgICAgICBjb3ZlcldpZHRocyxcbiAgICAgICAgICAgICAgICBpc0luSGVybyxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAodGhpcy50aXRsZUluZm8gPSBuZXcgVGl0bGVJbmZvKHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBlbDogJHRtcC5maW5kKCcuVGl0bGVJbmZvJyksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgKHRoaXMudGl0bGVBY3Rpb25CdXR0b24gPSBuZXcgVGl0bGVBY3Rpb25CdXR0b24oe1xuICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgIGVsOiAkdG1wLmZpbmQoJy5UaXRsZUFjdGlvbicpLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ3NhbXBsZU9ubHlNb2RlJykgJiZcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnbWFnYXppbmUtcm9sbHVwJykgJiZcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmlzTWFnYXppbmVcbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICF3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdkaXNhYmxlV2lzaGxpc3QnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAgICAgKHRoaXMud2lzaGxpc3RCdXR0b24gPSBuZXcgV2lzaExpc3RCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgZWw6ICR0bXAuZmluZCgnLlRpdGxlV2lzaGxpc3QnKSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ljb24tb25seScsXG4gICAgICAgICAgICAgICAgfSkucmVuZGVyKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kZWwuYXBwZW5kKCR0bXApO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodmlldykgPT4gdmlldy5yZW1vdmUoKSk7XG4gICAgICAgIHN1cGVyLnJlbW92ZSgpO1xuICAgIH1cbn1cbiIsImltcG9ydCBQcm9jZXNzRm9yd2FyZGVkQWN0aW9uIGZyb20gJy4uLy4uL3V0aWwvdGl0bGUtYWN0aW9ucy9wcm9jZXNzRm9yd2FyZGVkQWN0aW9uJztcbmltcG9ydCBIYXNoTWFuYWdlciBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbi9IYXNoTWFuYWdlcic7XG5cbmltcG9ydCBUaXRsZUNhcmQgZnJvbSAnLi9UaXRsZUNhcmQnO1xuaW1wb3J0IFRpdGxlQWN0aW9ucyBmcm9tICcuLi8uLi90aXRsZS1hY3Rpb25zL1RpdGxlQWN0aW9ucyc7XG5jb25zdCBoZSA9IHJlcXVpcmUoJ2hlJyk7XG4vLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGluZyBjb2RlIHBhc3NlcyBhIEJhY2tib25lLkNvbGxlY3Rpb24gd2l0aCBhIG1vZGVsIHR5cGUgb2YgVGl0bGVcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlQ29sbGVjdGlvblZpZXcgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBjb25zdHJ1Y3Rvcih7XG4gICAgICAgIGJ1cyxcbiAgICAgICAgcGF0cm9uTWVkaWFJdGVtc01vZGVsLFxuICAgICAgICBWaWV3LFxuICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICBjb3ZlcldpZHRocyxcbiAgICAgICAgaXNJbkhlcm8sXG4gICAgICAgIGNvbnRleHQsXG4gICAgfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuXG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG5cbiAgICAgICAgdGhpcy5idXMgPSBidXM7XG4gICAgICAgIHRoaXMuVmlldyA9IFZpZXcgfHwgVGl0bGVDYXJkO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBfLmV4dGVuZCh7fSwgYXR0cmlidXRlcyk7XG4gICAgICAgIHRoaXMuY292ZXJXaWR0aHMgPSBjb3ZlcldpZHRocztcbiAgICAgICAgdGhpcy5pc0luSGVybyA9IGlzSW5IZXJvO1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgICAgIHRoaXMudGl0bGVBY3Rpb25zID0gbmV3IFRpdGxlQWN0aW9ucyh7IGJ1czogdGhpcy5idXMsIGNvbnRleHQgfSk7XG5cbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLmNvbGxlY3Rpb24sICd0aXRsZTphY3Rpb24nLCB0aGlzLl9oYW5kbGVUaXRsZUFjdGlvbik7XG5cbiAgICAgICAgLy8gVE9ETzogPj4+IFJlbW92ZSB0aGlzIGNhbGwgYW5kIF91cGRhdGVNZWRpYVN0YXRlcygpIGxvZ2ljIGFuZCB1cGRhdGUgZGVwZW5kYW50IGNvbnN1bWVycyB0byB1c2UgUGF0cm9uVGl0bGVTdGF0dXNcbiAgICAgICAgLy8gRmV0Y2ggcGF0cm9uIGRhdGEgYW5kIHRyaWdnZXIgc3RhdGUgdXBkYXRlcy5cbiAgICAgICAgLy8gT25seSBmZXRjaCBwYXRyb24gZGF0YSBpZiBhdXRoZWQgYW5kIGhhcyBsaW5rZWQgY2FyZHMuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdHJvbk1lZGlhSXRlbXNNb2RlbCAmJlxuICAgICAgICAgICAgd2luZG93Lk92ZXJEcml2ZS5pc0F1dGhlbnRpY2F0ZWQgJiZcbiAgICAgICAgICAgIHdpbmRvdy5PdmVyRHJpdmUuaGFzTGlua2VkQ2FyZHNcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBwYXRyb25NZWRpYUl0ZW1zTW9kZWwuaW5pdGlhbEZldGNoKCkudGhlbigocGF0cm9uRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU1lZGlhU3RhdGVzKHBhdHJvbkRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgICBnZXQgdGFnTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuICd1bCc7XG4gICAgfVxuXG4gICAgX2hhbmRsZVRpdGxlQWN0aW9uKHsgYWN0aW9uLCBtb2RlbCB9KSB7XG4gICAgICAgIHRoaXMudGl0bGVBY3Rpb25zLnBlcmZvcm0oYWN0aW9uLCBtb2RlbCk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZU1lZGlhU3RhdGVzKHBhdHJvbkRhdGEpIHtcbiAgICAgICAgbGV0IGlkcyA9IFtdO1xuICAgICAgICBfKF8udmFsdWVzKHBhdHJvbkRhdGEpKS5lYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoXy5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgaWRzLnB1c2goLi4uaXRlbSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF8uaXNPYmplY3QoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBpZHMucHVzaCguLi5fLmtleXMoaXRlbSkubWFwKE51bWJlcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZHMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlkcyA9IF8udW5pcShpZHMpO1xuXG4gICAgICAgIGlkcy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmNvbGxlY3Rpb24uZ2V0KGlkKTtcblxuICAgICAgICAgICAgaWYgKG1vZGVsKSB7XG4gICAgICAgICAgICAgICAgbW9kZWwudXBkYXRlUGF0cm9uU3RhdGUocGF0cm9uRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3BlcmZvcm1Gb3J3YXJkZWRBY3Rpb24oKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX3ZpZXdzLmZvckVhY2goKHZpZXcpID0+IHZpZXcucmVtb3ZlKCkpO1xuICAgICAgICB0aGlzLl92aWV3cyA9IFtdO1xuXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbi5mb3JFYWNoKCh0aXRsZSkgPT4ge1xuICAgICAgICAgICAgdGl0bGUuc2V0KCd0aXRsZScsIGhlLmRlY29kZSh0aXRsZS5nZXQoJ3RpdGxlJykpKTtcblxuICAgICAgICAgICAgdGl0bGUuc2V0Q29udGV4dCh0aGlzLmNvbnRleHQpO1xuXG4gICAgICAgICAgICBsZXQgdmlldyA9IG5ldyB0aGlzLlZpZXcoe1xuICAgICAgICAgICAgICAgIG1vZGVsOiB0aXRsZSxcbiAgICAgICAgICAgICAgICBidXM6IHRoaXMuYnVzLFxuICAgICAgICAgICAgICAgIGNvdmVyV2lkdGhzOiB0aGlzLmNvdmVyV2lkdGhzLFxuICAgICAgICAgICAgICAgIGlzSW5IZXJvOiB0aGlzLmlzSW5IZXJvLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgICAgICAgJCgnPGxpIC8+Jywge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogJ2pzLXRpdGxlQ2FyZCBJdGVtJyxcbiAgICAgICAgICAgICAgICB9KS5hcHBlbmQodmlldy4kZWwpWzBdXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLl92aWV3cy5wdXNoKHZpZXcpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiRlbC5hdHRyKHRoaXMuYXR0cmlidXRlcyk7XG4gICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKGZyYWcpO1xuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodmlldykgPT4gdmlldy5yZW1vdmUoKSk7XG4gICAgICAgIHN1cGVyLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIF9wZXJmb3JtRm9yd2FyZGVkQWN0aW9uKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLmlzQXV0aGVudGljYXRlZCAmJlxuICAgICAgICAgICAgd2luZG93Lk92ZXJEcml2ZS5oYXNMaW5rZWRDYXJkcyAmJlxuICAgICAgICAgICAgSGFzaE1hbmFnZXIuZ2V0KCdhY3Rpb24nKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcndhcmRlZEFjdGlvbiA9IG5ldyBQcm9jZXNzRm9yd2FyZGVkQWN0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvcndhcmRlZEFjdGlvbi5leGVjdXRlQWN0aW9uKCk7XG4gICAgICAgICAgICB3aW5kb3cuZm9yd2FyZGVkQWN0aW9uID0gZm9yd2FyZGVkQWN0aW9uO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiY29uc3QgQmFja2JvbmUgPSB3aW5kb3cuQmFja2JvbmU7XG5cbmNvbnN0IFRpdGxlSGVhZGVyQmFyID0gQmFja2JvbmUuVmlldy5leHRlbmQoe1xuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZScsIHRoaXMucmVuZGVyKTtcblxuICAgICAgICB0aGlzLiR0aXRsZUhlYWRlckJhciA9ICQoJzxkaXYgLz4nKTtcblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0sXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLnJldHVyblN0YXRlKCk7XG5cbiAgICAgICAgdGhpcy4kdGl0bGVIZWFkZXJCYXIgPSAkKCc8ZGl2IC8+JywgYS5jb250YWluZXIpLmFwcGVuZChcbiAgICAgICAgICAgICQoJzxhIC8+JywgYS5saW5rKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLiRlbC5odG1sKHRoaXMuJHRpdGxlSGVhZGVyQmFyKTtcbiAgICAgICAgdGhpcy4kZWwuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICByZXR1cm5TdGF0ZSgpIHtcbiAgICAgICAgbGV0IGJhbm5lciA9IHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjoge1xuICAgICAgICAgICAgICAgIGNsYXNzZXM6IFsndGl0bGUtaGVhZGVyLWJhcicsICd1LWFsbENhcHMnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAgICAgICAgaHJlZjogdGhpcy5tb2RlbC50aXRsZURldGFpbHNVcmwsXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg6IC0xLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFjdGlvbiA9IHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJyk7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmFjdGlvbikge1xuICAgICAgICAgICAgY2FzZSAndW5hdmFpbGFibGUnOlxuICAgICAgICAgICAgICAgIGJhbm5lci5jb250YWluZXIuY2xhc3Nlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAnaXMtdW5hdmFpbGFibGUgdW5hdmFpbGFibGUtdGl0bGUnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBiYW5uZXIubGluay50ZXh0ID0gd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eVVuYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdub29rJzpcbiAgICAgICAgICAgICAgICBiYW5uZXIuY29udGFpbmVyLmNsYXNzZXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgJ2lzLW5vb2sgYXZhaWxhYmxlLXRpdGxlIHNlY29uZGFyeS1iYWNrZ3JvdW5kJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYmFubmVyLmxpbmsudGV4dCA9IHdpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlBdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JvcnJvdyc6XG4gICAgICAgICAgICAgICAgYmFubmVyLmNvbnRhaW5lci5jbGFzc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICdhdmFpbGFibGUtdGl0bGUgc2Vjb25kYXJ5LWJhY2tncm91bmQgaXMtYm9ycm93J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYmFubmVyLmxpbmsudGV4dCA9IHdpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlBdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JvcnJvd2VkJzpcbiAgICAgICAgICAgIGNhc2UgJ2FkZFRvQXBwJzpcbiAgICAgICAgICAgIGNhc2UgJ2xpc3Rlbk5vdyc6XG4gICAgICAgICAgICBjYXNlICdyZWFkTm93JzpcbiAgICAgICAgICAgICAgICBiYW5uZXIuY29udGFpbmVyLmNsYXNzZXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgJ2lzLWJvcnJvd2VkIGF2YWlsYWJsZS10aXRsZSBzZWNvbmRhcnktYmFja2dyb3VuZCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJhbm5lci5saW5rLnRleHQgPSB3aW5kb3cuaHRtbCgnYm9ycm93ZWQnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvbGQnOlxuICAgICAgICAgICAgICAgIGJhbm5lci5jb250YWluZXIuY2xhc3Nlcy5wdXNoKCdpcy1ob2xkIHVuYXZhaWxhYmxlLXRpdGxlJyk7XG4gICAgICAgICAgICAgICAgYmFubmVyLmxpbmsudGV4dCA9IHRoaXMubW9kZWwuZ2V0KCdpc1ByZVJlbGVhc2VUaXRsZScpXG4gICAgICAgICAgICAgICAgICAgID8gd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eUNvbWluZ1Nvb24nKVxuICAgICAgICAgICAgICAgICAgICA6IHdpbmRvdy50ZXh0KCdhdmFpbGFiaWxpdHlXYWl0TGlzdCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb25Ib2xkJzpcbiAgICAgICAgICAgICAgICBiYW5uZXIuY29udGFpbmVyLmNsYXNzZXMucHVzaCgnaXMtb25Ib2xkIHVuYXZhaWxhYmxlLXRpdGxlJyk7XG4gICAgICAgICAgICAgICAgYmFubmVyLmxpbmsudGV4dCA9IHdpbmRvdy5odG1sKCdvbkhvbGQnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dhaXRpbmcnOlxuICAgICAgICAgICAgICAgIGJhbm5lci5jb250YWluZXIuY2xhc3NlcyA9IHRoaXMuJHRpdGxlSGVhZGVyQmFyXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycpXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICAgIGJhbm5lci5saW5rLnRleHQgPSB0aGlzLiR0aXRsZUhlYWRlckJhci5maW5kKCdhOmZpcnN0JykudGV4dCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFubmVyLmNvbnRhaW5lci5jbGFzcyA9IGJhbm5lci5jb250YWluZXIuY2xhc3Nlcy5qb2luKCcgJyk7XG5cbiAgICAgICAgcmV0dXJuIGJhbm5lcjtcbiAgICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlSGVhZGVyQmFyO1xuIiwiaW1wb3J0IFdpc2hMaXN0QnV0dG9uVGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZXMvV2lzaExpc3RCdXR0b24uaHRtbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpc2hMaXN0QnV0dG9uIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgZ2V0IGNvbnRyYXN0Q2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyYXN0ID09PSAnZGVmYXVsdCcgPyAnJyA6ICdjb250cmFzdC1hbHRlcm5hdGUnO1xuICAgIH1cblxuICAgIGdldEFyaWFMYWJlbChpc1JlcmVuZGVyKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLnRpdGxlO1xuICAgICAgICBpZiAoaXNSZXJlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZ2V0KCd3aXNobGlzdFN0YXRlJykgPT09ICd3aXNobGlzdEFkZCdcbiAgICAgICAgICAgICAgICA/IHdpbmRvdy5odG1sKCd0aXRsZVJlbW92ZWRGcm9tV2lzaExpc3QnLCB7IHRpdGxlIH0pXG4gICAgICAgICAgICAgICAgOiB3aW5kb3cuaHRtbCgndGl0bGVBZGRlZFRvV2lzaExpc3QnLCB7IHRpdGxlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZ2V0KCd3aXNobGlzdFN0YXRlJykgPT09ICd3aXNobGlzdEFkZCdcbiAgICAgICAgICAgICAgICA/IHdpbmRvdy5odG1sKCdhZGRUaXRsZVRvV2lzaExpc3QnLCB7IHRpdGxlIH0pXG4gICAgICAgICAgICAgICAgOiB3aW5kb3cuaHRtbCgncmVtb3ZlVGl0bGVGcm9tV2lzaExpc3QnLCB7IHRpdGxlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGljb25DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZ2V0KCd3aXNobGlzdFN0YXRlJykgPT09ICd3aXNobGlzdEFkZCdcbiAgICAgICAgICAgID8gJ2ljb24td2lzaC1saXN0J1xuICAgICAgICAgICAgOiAnaWNvbi13aXNoLWxpc3QtYWRkZWQnO1xuICAgIH1cblxuICAgIGdldCB0ZXh0KCkge1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnaWNvbi1vbmx5Jykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmdldCgnd2lzaGxpc3RTdGF0ZScpID09PSAnd2lzaGxpc3RBZGQnXG4gICAgICAgICAgICA/IHdpbmRvdy5odG1sKCdhZGRUb1dpc2hMaXN0JylcbiAgICAgICAgICAgIDogd2luZG93Lmh0bWwoJ3JlbW92ZUZyb21XaXNoTGlzdCcpO1xuICAgIH1cblxuICAgIGdldCBnYSgpIHtcbiAgICAgICAgY29uc3QgaXNBZGQgPSB0aGlzLm1vZGVsLmdldCgnd2lzaGxpc3RTdGF0ZScpID09PSAnd2lzaGxpc3RBZGQnO1xuICAgICAgICBpZiAoaXNBZGQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWVkaWFJZDogdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLmlkLFxuICAgICAgICAgICAgICAgIGZvcm1hdFR5cGU6IHRoaXMubW9kZWwuYXR0cmlidXRlcy50eXBlLmlkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcih7IHR5cGUsIGNvbnRyYXN0IH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZSB8fCAnaWNvbi1vbmx5JztcbiAgICAgICAgdGhpcy5jb250cmFzdCA9IGNvbnRyYXN0IHx8ICdkZWZhdWx0JztcblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWwsICdjaGFuZ2U6d2lzaGxpc3RTdGF0ZScsIHRoaXMucmVuZGVyKTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZSB8fCAnaWNvbi1vbmx5JztcbiAgICB9XG5cbiAgICBldmVudHMoKSB7XG4gICAgICAgIHJldHVybiB7IGNsaWNrOiAnX2hhbmRsZUNsaWNrJyB9O1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsIHx8IHRoaXMuJGVsLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybjsgLy8gd2UgaGF2ZSBubyB0YXJnZXQgdG8gcmVuZGVyIGFueXRoaW5nIGludG9cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJldGFpbiBmb2N1cyBvbiByZXJlbmRlclxuICAgICAgICBjb25zdCBpc1JlcmVuZGVyID1cbiAgICAgICAgICAgIHRoaXMuZWwucXVlcnlTZWxlY3RvcignLldpc2hMaXN0QnV0dG9uJykgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTtcblxuICAgICAgICBjb25zdCBidXR0b25IdG1sID0gV2lzaExpc3RCdXR0b25UZW1wbGF0ZSh7XG4gICAgICAgICAgICBnYTogdGhpcy5nYSxcbiAgICAgICAgICAgIGNvbnRyYXN0Q2xhc3M6IHRoaXMuY29udHJhc3RDbGFzcyxcbiAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5nZXRBcmlhTGFiZWwoaXNSZXJlbmRlciksXG4gICAgICAgICAgICBpY29uQ2xhc3M6IHRoaXMuaWNvbkNsYXNzLFxuICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0LFxuICAgICAgICAgICAgaWNvbkFuaW1hdGlvbkNsYXNzZXM6IHdpbmRvdy5PdmVyRHJpdmUuaXNUb2xpbm9EZXZpY2VcbiAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgOiAnYW5pbWF0ZWQgYm91bmNlSW4nLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiRlbC5hcHBlbmQoYnV0dG9uSHRtbCk7XG5cbiAgICAgICAgaWYgKGlzUmVyZW5kZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZWwucXVlcnlTZWxlY3RvcignLldpc2hMaXN0QnV0dG9uJykuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9oYW5kbGVDbGljaygpIHtcbiAgICAgICAgdGhpcy5tb2RlbC50cmlnZ2VyKCd0aXRsZTphY3Rpb24nLCB7XG4gICAgICAgICAgICBhY3Rpb246ICd3aXNoJyxcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF3aW5kb3cuT3ZlckRyaXZlLmlzVG9saW5vRGV2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9hbmltYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYW5pbWF0ZSgpIHtcbiAgICAgICAgdGhpcy4kZWxcbiAgICAgICAgICAgIC5maW5kKCdpJylcbiAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnYW5pbWF0ZWQgYm91bmNlSW4gYm91bmNlT3V0JylcbiAgICAgICAgICAgIC5hZGRDbGFzcygnYW5pbWF0ZWQgYm91bmNlT3V0Jyk7XG4gICAgfVxufVxuIiwiaW1wb3J0IFRpdGxlU3RhdGUgZnJvbSAnLi4vLi4vLi4vdGl0bGUtYWN0aW9ucy9UaXRsZVN0YXRlJztcbmltcG9ydCBNZWRpYUludGVyZmFjZSBmcm9tICcuLi9NZWRpYUludGVyZmFjZSc7XG5pbXBvcnQgeyB0b1N0YXRpY1VybCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xpYi9hc3NldE1hcHBlcic7XG5pbXBvcnQgeyBnZXRPcHRpbWl6ZWRDb3ZlcnMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9saWIvZ2V0T3B0aW1pemVkQ292ZXItdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaXRsZSBleHRlbmRzIEJhY2tib25lLk1vZGVsIHtcbiAgICBnZXQgaWRBdHRyaWJ1dGUoKSB7XG4gICAgICAgIHJldHVybiAnaWQnO1xuICAgIH1cblxuICAgIGRlZmF1bHRzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IDAsXG4gICAgICAgICAgICBmaXJzdENyZWF0b3JOYW1lOiBudWxsLFxuICAgICAgICAgICAgdGl0bGU6ICdUaXRsZScsXG4gICAgICAgICAgICBmaXJzdENyZWF0b3JJZDogMCxcbiAgICAgICAgICAgIGZvcm1hdHM6IFtdLFxuICAgICAgICAgICAgaXNPd25lZDogZmFsc2UsXG4gICAgICAgICAgICBpc0hvbGRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzUHJlUmVsZWFzZVRpdGxlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXJSYXRpbmc6IDAuMCxcbiAgICAgICAgICAgIHVzZXJTdGFyUmF0aW5nOiAwLFxuICAgICAgICAgICAgc3RhclJhdGluZ0NvdW50OiAwLFxuICAgICAgICAgICAgaG9sZHNSYXRpbzogMCxcbiAgICAgICAgICAgIGhvbGRzQ291bnQ6IDAsXG4gICAgICAgICAgICBvd25lZENvcGllczogMCxcbiAgICAgICAgICAgIGF2YWlsYWJsZUNvcGllczogMCxcbiAgICAgICAgICAgIGx1Y2t5RGF5T3duZWRDb3BpZXM6IDAsXG4gICAgICAgICAgICBsdWNreURheUF2YWlsYWJsZUNvcGllczogMCxcbiAgICAgICAgICAgIGVzdGltYXRlZFJlbGVhc2VEYXRlOiAnJyxcbiAgICAgICAgICAgIGF2YWlsYWJpbGl0eVR5cGU6ICcnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgICAgc2FtcGxlOiB7fSwgLy8gU2FtcGxlXG4gICAgICAgICAgICBwdWJsaXNoZXI6IHt9LCAvLyBQdWJsaXNoZXJcbiAgICAgICAgICAgIHR5cGU6IHsgaWQ6ICdlYm9vaycgfSwgLy8gVHlwZVxuICAgICAgICAgICAgY292ZXJzOiB7fSwgLy8gQ292ZXJzXG4gICAgICAgICAgICBwYXJlbnRNYWdhemluZVRpdGxlSWQ6IDAsXG4gICAgICAgICAgICByYXRpbmdzOiB7XG4gICAgICAgICAgICAgICAgbWF0dXJpdHlMZXZlbDoge30sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gQ3VzdG9tIExpZ2h0bmluZyBQcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aXRsZVN0YXRlOiAnd2FpdGluZycsXG4gICAgICAgICAgICB3aXNobGlzdFN0YXRlOiAnd2lzaGxpc3RBZGQnLFxuICAgICAgICAgICAgaXNJbkhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAgICAgYWRkVG9BcHBGb3JtYXQ6IG51bGwsXG4gICAgICAgICAgICBpc09uSG9sZDogZmFsc2UsXG4gICAgICAgICAgICBpc1JlbGVhc2VkSG9sZDogZmFsc2UsXG4gICAgICAgICAgICBpc0JvcnJvd2VkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzTW9zdFJlY2VudE1hZ2F6aW5lOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXQgaXNQbGFjZWhvbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdwbGFjZWhvbGRlcicpO1xuICAgIH1cblxuICAgIHNldENvbnRleHQoY29udGV4dCkge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKG1vZGVsLCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIGxldCB7IHBhdHJvbkl0ZW1zIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIHN1cGVyKG1vZGVsLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnNldENvbnRleHQoY29udGV4dCk7XG5cbiAgICAgICAgdGhpcy5zZXQoXG4gICAgICAgICAgICBfLmV4dGVuZCh7fSwgbW9kZWwsIHsgdGl0bGVTdGF0ZTogdGhpcy5fZ2V0U3RhdGUocGF0cm9uSXRlbXMpIH0pXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGhpcy5pc1BsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmsod2luZG93Lmdsb2JhbEV2ZW50cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsaW5rKGJ1cykge1xuICAgICAgICAvLyBVbmxpbmsgdGhlIG9sZCBidXMgaWYgdGhlcmUgaXMgb25lXG4gICAgICAgIGlmICh0aGlzLmJ1cykge1xuICAgICAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKHRoaXMuYnVzLCAndGl0bGU6dXBkYXRlJyk7XG4gICAgICAgICAgICB0aGlzLmJ1cyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBdHRhY2ggbmV3IGJ1cyBpZiBwYXNzZWRcbiAgICAgICAgaWYgKGJ1cykge1xuICAgICAgICAgICAgdGhpcy5idXMgPSBidXM7XG4gICAgICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMuYnVzLCAndGl0bGU6dXBkYXRlJywgKHRpdGxlTW9kZWwpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseVVwZGF0ZXModGl0bGVNb2RlbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9hcHBseVVwZGF0ZXModGl0bGVNb2RlbCkge1xuICAgICAgICBpZiAodGl0bGVNb2RlbCAhPT0gdGhpcyAmJiB0aXRsZU1vZGVsLmlkID09PSB0aGlzLmlkKSB7XG4gICAgICAgICAgICBzdXBlci5zZXQodGl0bGVNb2RlbC5jaGFuZ2VkQXR0cmlidXRlcygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldCgpIHtcbiAgICAgICAgc3VwZXIuc2V0KC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuYnVzICYmIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOnVwZGF0ZScsIHRoaXMpO1xuICAgIH1cblxuICAgIC8vIEFuIGV4YW1wbGUgb2YgdGhpcyBjYW4gYmUgc2VlbiBpbiBDb2xsZWN0aW9uSGlnaHRsaWdodC5qczo2MSAod2hlcmUgVGl0bGVDb2xsZWN0aW9uVmlldyBnZXRzIG5ldydlZCB1cClcbiAgICBnZXQgY29udGV4dENvbGxlY3Rpb25JZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dCAmJiB0aGlzLmNvbnRleHQuY29sbGVjdGlvbkRlZmluaXRpb25cbiAgICAgICAgICAgID8gdGhpcy5jb250ZXh0LmNvbGxlY3Rpb25EZWZpbml0aW9uLmlkXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXQgdGl0bGVEZXRhaWxzVXJsKCkge1xuICAgICAgICAvLyBMSFRORy0zMDE4IFJlZmVyZW5jZSBvcHRpb25hbCBjb250ZXh0Q29sbGVjdGlvbklkIHZhbHVlIHdoZW4gY3JlYXRpbmcgYSB0aXRsZSBkZXRhaWxzIGxpbmtcbiAgICAgICAgbGV0IHByb3BzID0geyBpZDogdGhpcy5pZCB9O1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRleHRDb2xsZWN0aW9uSWQpIHtcbiAgICAgICAgICAgIHByb3BzLmNpZCA9IHRoaXMuY29udGV4dENvbGxlY3Rpb25JZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMubWVkaWFJZCwgcHJvcHMpO1xuICAgIH1cblxuICAgIGdldCBoYXNMdWNreURheUNvcGllcygpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ0x1Y2t5RGF5JykgJiZcbiAgICAgICAgICAgIHRoaXMuZ2V0KCdsdWNreURheU93bmVkQ29waWVzJykgPiAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IGFsbENvcGllc0FyZUx1Y2t5RGF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNMdWNreURheUNvcGllcyAmJiB0aGlzLmdldCgnb3duZWRDb3BpZXMnKSA9PT0gMDtcbiAgICB9XG5cbiAgICBnZXQgaXNMdWNreURheUNoZWNrb3V0KCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5oYXNBdmFpbGFibGVMdWNreURheUNvcGllcyAmJlxuICAgICAgICAgICAgdGhpcy5nZXQoJ2F2YWlsYWJsZUNvcGllcycpID09PSAwICYmXG4gICAgICAgICAgICAhdGhpcy5nZXQoJ2lzUmVsZWFzZWRIb2xkJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgY2FuUGxhY2VIb2xkKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5nZXQoJ2lzSG9sZGFibGUnKSAmJlxuICAgICAgICAgICAgIXRoaXMuZ2V0KCdpc09uSG9sZCcpICYmXG4gICAgICAgICAgICB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdjb250ZW50LWhvbGRzJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgaXNBdmFpbGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnaXNBdmFpbGFibGUnKSB8fCB0aGlzLmhhc0F2YWlsYWJsZUx1Y2t5RGF5Q29waWVzO1xuICAgIH1cblxuICAgIGdldCBoYXNBdmFpbGFibGVMdWNreURheUNvcGllcygpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuaGFzTHVja3lEYXlDb3BpZXMgJiYgdGhpcy5nZXQoJ2x1Y2t5RGF5QXZhaWxhYmxlQ29waWVzJykgPiAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IGlzRXhwaXJlZCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuZ2V0KCdpc093bmVkJykgJiZcbiAgICAgICAgICAgICh0aGlzLmlzRXhwaXJlZFN1VGl0bGUgfHwgdGhpcy5pc0V4cGlyZWROb25TdVRpdGxlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBpc0V4cGlyZWRTdVRpdGxlKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5nZXQoJ2F2YWlsYWJpbGl0eVR5cGUnKSA9PT0gJ2Fsd2F5cycgJiZcbiAgICAgICAgICAgICF0aGlzLmdldCgnaXNQcmVSZWxlYXNlVGl0bGUnKSAmJlxuICAgICAgICAgICAgIXRoaXMuZ2V0KCdpc0F2YWlsYWJsZScpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IGlzRXhwaXJlZE5vblN1VGl0bGUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmdldCgnYXZhaWxhYmlsaXR5VHlwZScpICE9PSAnYWx3YXlzJyAmJlxuICAgICAgICAgICAgIXRoaXMuZ2V0KCdvd25lZENvcGllcycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXBkYXRlUGF0cm9uU3RhdGUocGF0cm9uSXRlbXMsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnNldChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZVN0YXRlOiB0aGlzLl9nZXRTdGF0ZShwYXRyb25JdGVtcyksXG4gICAgICAgICAgICAgICAgd2lzaGxpc3RTdGF0ZTogVGl0bGVTdGF0ZS5pc09uV2lzaGxpc3QoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgcGF0cm9uSXRlbXNcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgID8gJ3dpc2hsaXN0UmVtb3ZlJ1xuICAgICAgICAgICAgICAgICAgICA6ICd3aXNobGlzdEFkZCcsXG4gICAgICAgICAgICAgICAgdXNlclN0YXJSYXRpbmc6IFRpdGxlU3RhdGUuc3RhclJhdGluZyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBwYXRyb25JdGVtc1xuICAgICAgICAgICAgICAgICksIC8vIDAgaWYgbm90IHJhdGVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICBjb25zdCByZWFkaW5nSGlzdG9yeVN0YXRlID0gVGl0bGVTdGF0ZS5pc09uUmVhZGluZ0hpc3RvcnkoXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBwYXRyb25JdGVtc1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldCgnaXNJbkhpc3RvcnknLCByZWFkaW5nSGlzdG9yeVN0YXRlLCBvcHRpb25zIHx8IHt9KTtcblxuICAgICAgICBjb25zdCB1c2VyU3RhclJhdGluZyA9IFRpdGxlU3RhdGUuc3RhclJhdGluZyhcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIHBhdHJvbkl0ZW1zXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0KCd1c2VyU3RhclJhdGluZycsIHVzZXJTdGFyUmF0aW5nLCBvcHRpb25zIHx8IHt9KTsgLy8gMCBpZiBub3QgcmF0ZWRcbiAgICB9XG5cbiAgICBnZXRDb3ZlcihkZXNpcmVkU2l6ZSkge1xuICAgICAgICBjb25zdCBjb3ZlcnMgPSBfLm1hcCh0aGlzLmdldCgnY292ZXJzJyksIChjb3ZlcikgPT4gY292ZXIpOyAvLyBtYXBzIHRvIGNvbGxlY3Rpb24gb2YgY292ZXJzXG4gICAgICAgIHJldHVybiBnZXRPcHRpbWl6ZWRDb3ZlcnMoY292ZXJzLCBkZXNpcmVkU2l6ZSk7XG4gICAgfVxuXG4gICAgZ2V0Q292ZXJTcmMoZGVzaXJlZFNpemUpIHtcbiAgICAgICAgY29uc3QgY292ZXIgPSB0aGlzLmdldENvdmVyKGRlc2lyZWRTaXplKTtcbiAgICAgICAgcmV0dXJuIChjb3ZlciAmJiBjb3Zlci5ocmVmKSB8fCB0b1N0YXRpY1VybCgnaW1nL25vLWNvdmVyX2VuX1VTLmpwZycpO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRBdmFpbGFiaWxpdHkoKSB7XG4gICAgICAgIHJldHVybiAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMubWVkaWFBdmFpbGFiaWxpdHlJZCwgeyBpZDogdGhpcy5pZCB9KSxcbiAgICAgICAgICAgIHR5cGU6ICdHRVQnLFxuICAgICAgICAgICAgdGltZW91dDogMCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0TWlzc2luZ0F0dHJpYnV0ZShhdHRyaWJ1dGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tZWRpYUludGVyZmFjZSkge1xuICAgICAgICAgICAgdGhpcy5fbWVkaWFJbnRlcmZhY2UgPSBuZXcgTWVkaWFJbnRlcmZhY2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fbWVkaWFJbnRlcmZhY2VcbiAgICAgICAgICAgIC5zZWFyY2goeyB0aXRsZUlkOiB0aGlzLmdldCgnaWQnKSB9KVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoYXR0cmlidXRlLCByZXNwb25zZVthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhdmFpbGFiaWxpdHlUZXh0KCkge1xuICAgICAgICBsZXQgYWN0aW9uID0gdGhpcy5nZXQoJ3RpdGxlU3RhdGUnKTtcbiAgICAgICAgbGV0IGF2YWlsYWJpbGl0eVRleHQgPSAnJztcblxuICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgICAgY2FzZSAndW5hdmFpbGFibGUnOlxuICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQgPSB3aW5kb3cuaHRtbCgnYXZhaWxhYmlsaXR5VW5hdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vb2snOlxuICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQgPSB3aW5kb3cuaHRtbCgnYXZhaWxhYmlsaXR5QXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3Jyb3cnIHx8ICdwcmV2aWV3JzpcbiAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0ID0gd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eUF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYm9ycm93ZWQnOlxuICAgICAgICAgICAgY2FzZSAnYWRkVG9BcHAnOlxuICAgICAgICAgICAgY2FzZSAnbGlzdGVuTm93JzpcbiAgICAgICAgICAgIGNhc2UgJ3JlYWROb3cnOlxuICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQgPSB3aW5kb3cuaHRtbCgnYm9ycm93ZWQnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvbGQnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldCgnaXNQcmVSZWxlYXNlVGl0bGUnKSkge1xuICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0ID0gd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eUNvbWluZ1Nvb24nKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCA9IHRoaXMuZ2V0KCdpc1ByZVJlbGVhc2VUaXRsZScpXG4gICAgICAgICAgICAgICAgICAgID8gd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eUNvbWluZ1Nvb24nKVxuICAgICAgICAgICAgICAgICAgICA6IHdpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlXYWl0TGlzdCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb25Ib2xkJzpcbiAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0ID0gd2luZG93Lmh0bWwoJ29uSG9sZCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2FpdGluZyc6XG4gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCA9IHdpbmRvdy5odG1sKCdsb2FkaW5nJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXZhaWxhYmlsaXR5VGV4dDtcbiAgICB9XG5cbiAgICBfZ2V0U3RhdGUocGF0cm9uSXRlbXMpIHtcbiAgICAgICAgdGhpcy5zZXRQYXRyb25TdGF0ZShwYXRyb25JdGVtcyk7XG4gICAgICAgIHJldHVybiBUaXRsZVN0YXRlLmdldFN0YXRlKHRoaXMuYXR0cmlidXRlcywgcGF0cm9uSXRlbXMpO1xuICAgIH1cblxuICAgIHNldFBhdHJvblN0YXRlKHBhdHJvbkl0ZW1zKSB7XG4gICAgICAgIHRoaXMuc2V0KHtcbiAgICAgICAgICAgIGlzT25Ib2xkOiBwYXRyb25JdGVtcyAmJiBwYXRyb25JdGVtcy5vbkhvbGRzLmluZGV4T2YodGhpcy5pZCkgPiAtMSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0KHtcbiAgICAgICAgICAgIGlzQm9ycm93ZWQ6XG4gICAgICAgICAgICAgICAgcGF0cm9uSXRlbXMgJiYgcGF0cm9uSXRlbXMub25DaGVja291dHMuaW5kZXhPZih0aGlzLmlkKSA+IC0xLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzYW5pdGl6ZWREZXNjKCkge1xuICAgICAgICBsZXQgZGVzYyA9IHRoaXMuZ2V0KCdkZXNjcmlwdGlvbicpLnJlcGxhY2UoXG4gICAgICAgICAgICAvKDxiclxccypbXFwvXT8+KXwoXFxyP1xcbnxcXHIpL2dpbSxcbiAgICAgICAgICAgICcgJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gJChgPGRpdj4ke2Rlc2N9PC9kaXY+YCkudGV4dCgpO1xuICAgIH1cblxuICAgIGdldFRpdGxlQXN5bmMobWVkaWFJZCwgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYUluZm9JZCwgeyBpZDogbWVkaWFJZCB9KSxcbiAgICAgICAgICAgIHR5cGU6ICdHRVQnLFxuICAgICAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgICAgICBzdWNjZXNzOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0KGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0KCd0aXRsZVN0YXRlJywgdGhpcy5fZ2V0U3RhdGUobnVsbCkpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXQgaXNNYWdhemluZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCd0eXBlJykuaWQgPT09ICdtYWdhemluZSc7XG4gICAgfVxufVxuIiwiXG5pbXBvcnQgVGl0bGUgZnJvbSAnLi9UaXRsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlQ29sbGVjdGlvbiBleHRlbmRzIEJhY2tib25lLkNvbGxlY3Rpb24ge1xuICAgIGdldCBtb2RlbCgpIHsgcmV0dXJuIFRpdGxlOyB9XG59XG5cbiIsImNvbnN0IHsgZmVhdHVyZU1hbmFnZXIsIGh0bWwsIHVybCwgcm91dGVzIH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0ICh7XG4gICAgaXNPd25lZCxcbiAgICByZWxhdGVkVGl0bGVzUGFnZVVybCxcbiAgICBpZCxcbiAgICByaWQsXG4gICAgdHlwZUlkLFxuICAgIHRpdGxlLFxuICAgIGFsaWdubWVudCxcbiAgICBzYW1wbGVIcmVmLFxuICAgIHNhbXBsZVRleHQsXG4gICAgaGlzdG9yeUFjdGlvbkxhYmVsLFxuICAgIGhpc3RvcnlBY3Rpb25UZXh0LFxuICAgIGhpc3RvcnlFbmFibGVkLFxuICAgIGdhSGlzdG9yeUFjdGlvbixcbiAgICBzZXJpZXNTZWFyY2hVcmwsXG4gICAgaGFzTWVkaWFEb0Zvcm1hdCxcbn0pID0+IGBcbjxkaXYgY2xhc3M9XCJDb250ZXh0TWVudVwiPlxuICAgIDxkaXYgdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJDb250ZXh0TWVudS1idXR0b24ganMtY29udGV4dC1idXR0b25cIiBkYXRhLW1lZGlhLWlkPVwiJHtpZH1cIlxuICAgICAgICAgZGF0YS10aXRsZT1cIiR7dGl0bGV9XCJcbiAgICAgICAgIGRhdGEtZHJvcGRvd249XCJjb250ZXh0LW1lbnUtJHtpZH0tJHtyaWR9XCJcbiAgICAgICAgIGRhdGEtb3B0aW9ucz1cImFsaWduOiR7YWxpZ25tZW50fVwiXG4gICAgICAgICBhcmlhLWNvbnRyb2xzPVwibW9yZS1hY3Rpb25zLWRyb3AtJHtpZH1cIlxuICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgIGFyaWEtbGFiZWw9XCIke2h0bWwoJ2NvdmVyLnRpdGxlSW5mbycsIHsgdGl0bGUgfSl9XCJcbiAgICAgICAgIHJvbGU9XCJidXR0b25cIj5cbiAgICAgICAgPGkgY2xhc3M9XCJpY29uIGljb24tbW9yZVwiIHRhYmluZGV4PVwiLTFcIj48L2k+XG4gICAgPC9kaXY+XG5cbiAgICA8dWwgaWQ9XCJjb250ZXh0LW1lbnUtJHtpZH0tJHtyaWR9XCIgY2xhc3M9XCJDb250ZXh0TWVudS1kcm9wIGpzLWNvbnRleHQtZHJvcCBmLWRyb3Bkb3duIHRleHQtbGVmdFwiIGRhdGEtZHJvcGRvd24tY29udGVudCBhcmlhLWhpZGRlbj1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJsaXN0XCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIj5cbiAgICAgICAgJHtcbiAgICAgICAgICAgICghd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnaGlkZS11bm93bmVkLXNhbXBsZXMnKSB8fFxuICAgICAgICAgICAgICAgIGlzT3duZWQpICYmXG4gICAgICAgICAgICBzYW1wbGVIcmVmICE9PSAnJ1xuICAgICAgICAgICAgICAgID8gYFxuICAgICAgICAgICAgPGxpIGNsYXNzPVwicmVhZC1zYW1wbGUgQ29udGV4dE1lbnUtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxhIGRhdGEtaHJlZj1cIiR7c2FtcGxlSHJlZn1cIiBkYXRhLW1lZGlhLWlkPVwiJHtpZH1cIiBkYXRhLXRpdGxlPVwiJHt0aXRsZX1cIlxuICAgICAgICAgICAgICAgIGRhdGEtb2YtZHJvcGRvd249XCJtb3JlLWFjdGlvbnMtZHJvcC0ke2lkfVwiIGRhdGEtdHlwZT1cIiR7dHlwZUlkfVwiIG1lZGlhLWRvLWZvcm1hdD1cIiR7aGFzTWVkaWFEb0Zvcm1hdH1cIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgYXJpYS1sYWJlbD1cIiR7aHRtbChcbiAgICAgICAgICAgICAgICAgICAgJ2NvdmVyLnNhbXBsZUxhYmVsJyxcbiAgICAgICAgICAgICAgICAgICAgeyBzYW1wbGU6IHNhbXBsZVRleHQsIHRpdGxlIH1cbiAgICAgICAgICAgICAgICApfVwiPlxuICAgICAgICAgICAgICAgICAgICAke3NhbXBsZVRleHR9XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9saT5gXG4gICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9XG4gICAgICAgIDxsaSBjbGFzcz1cIkNvbnRleHRNZW51LWl0ZW1cIj5cbiAgICAgICAgICAgIDxhIHRhYmluZGV4PVwiLTFcIiBocmVmPVwiJHt1cmwocm91dGVzLm1lZGlhSWQsIHtcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIH0pfVwiIGFyaWEtbGFiZWw9XCIke2h0bWwoJ3ZpZXdEZXRhaWxzQWJvdXRUaXRsZScsIHtcbiAgICB0aXRsZSxcbn0pfVwiPiR7aHRtbCgndmlld0RldGFpbHMnKX08L2E+XG4gICAgICAgIDwvbGk+XG4gICAgICAgICR7XG4gICAgICAgICAgICBzZXJpZXNTZWFyY2hVcmwgJiYgc2VyaWVzU2VhcmNoVXJsICE9PSAnJ1xuICAgICAgICAgICAgICAgID8gYFxuICAgICAgICAgICAgPGxpIGNsYXNzPVwiQ29udGV4dE1lbnUtaXRlbVwiPjxhIHRhYmluZGV4PVwiLTFcIiBocmVmPVwiJHtzZXJpZXNTZWFyY2hVcmx9XCI+JHtodG1sKFxuICAgICAgICAgICAgICAgICAgICAgICd2aWV3U2VyaWVzJ1xuICAgICAgICAgICAgICAgICAgKX08L2E+PC9saT5gXG4gICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9XG4gICAgICAgICR7XG4gICAgICAgICAgICBoaXN0b3J5RW5hYmxlZFxuICAgICAgICAgICAgICAgID8gYDxsaSBjbGFzcz1cIkNvbnRleHRNZW51LWl0ZW0ganMtaGlzdG9yeUFjdGlvblwiIGRhdGEtZ2EtYWN0aW9uPVwiJHtnYUhpc3RvcnlBY3Rpb259XCIgZGF0YS1tZWRpYS1pZD1cIiR7aWR9XCI+PGEgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiJHtoaXN0b3J5QWN0aW9uTGFiZWx9XCI+JHtoaXN0b3J5QWN0aW9uVGV4dH08L2E+PC9saT5gXG4gICAgICAgICAgICAgICAgOiBgYFxuICAgICAgICB9XG4gICAgICAgIDxsaSBjbGFzcz1cIkNvbnRleHRNZW51LWl0ZW1cIj48YSB0YWJpbmRleD1cIi0xXCIgaHJlZj1cIiR7cmVsYXRlZFRpdGxlc1BhZ2VVcmx9XCIgYXJpYS1sYWJlbD1cIiR7aHRtbChcbiAgICAndmlld1JlbGF0ZWRUb1RpdGxlJyxcbiAgICB7IHRpdGxlIH1cbil9XCI+JHtodG1sKCd5b3VNYXlBbHNvTGlrZScpfTwvYT48L2xpPlxuICAgIDwvdWw+XG48L2Rpdj5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHt3aXRoSWNvbnMsIGF2YWlsYWJpbGl0eVRleHQsIHdhaXRpbmdUZXh0LCBoZWxwQnV0dG9uSFRNTH0pID0+IGBcbjxkaXYgY2xhc3M9J0NvcGllc0F2YWlsYWJsZSc+XG4gICAgJHthdmFpbGFiaWxpdHlUZXh0ID8gYFxuICAgICAgICA8ZGl2IGNsYXNzPSdhdmFpbGFiaWxpdHknPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9J2F2YWlsYWJpbGl0eVRleHQnPlxuICAgICAgICAgICAgICAgICR7d2l0aEljb25zID8gJzxpIGNsYXNzPVwiaWNvbi1jb3BpZXNcIj48L2k+JyA6ICcnIH1cbiAgICAgICAgICAgICAgICAke2F2YWlsYWJpbGl0eVRleHR9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAkeyF3YWl0aW5nVGV4dCAmJiBoZWxwQnV0dG9uSFRNTCA/IGBcbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgJHtoZWxwQnV0dG9uSFRNTH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBgIDogJyd9XG4gICAgICAgIDwvZGl2PlxuICAgIGAgOiAnJ31cbiAgICAke3dhaXRpbmdUZXh0ID8gYFxuICAgICAgICA8ZGl2IGNsYXNzPSd3YWl0aW5nJz5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICR7d2l0aEljb25zID8gJzxpIGNsYXNzPVwiaWNvbi1ob2xkc1wiPjwvaT4nIDogJycgfVxuICAgICAgICAgICAgICAgICR7d2FpdGluZ1RleHR9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAke2hlbHBCdXR0b25IVE1MID8gYFxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAke2hlbHBCdXR0b25IVE1MfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIGAgOiAnJ31cbiAgICAgICAgPC9kaXY+XG4gICAgYCA6ICcnfVxuPC9kaXY+XG5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHsgbWVkaWEsIHNyYywgaHJlZiwgY292ZXJDb2xvciwgbm9TYW1wbGVDbGFzcywgc3Jjc2V0IH0pID0+IGBcbjxkaXYgY2xhc3M9XCJDb3ZlckltYWdlQ29udGFpbmVyXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAke2NvdmVyQ29sb3J9XCI+XG4gICAgPGEgaHJlZj1cIiR7aHJlZn1cIlxuICAgICAgICAgICBkYXRhLWhyZWYgICAgPVwiJHtocmVmfVwiXG4gICAgICAgICAgIGRhdGEtbWVkaWEtaWQ9XCIke21lZGlhLmlkfVwiXG4gICAgICAgICAgIGRhdGEtdGl0bGUgICA9XCIke21lZGlhLnRpdGxlfVwiXG4gICAgICAgICAgIGRhdGEtdHlwZSAgICA9XCIke21lZGlhLnR5cGUuaWR9XCI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzPVwibGFyZ2UtdGl0bGUganMtZGV0YWlscy1jb3Zlci1pbWFnZSAke25vU2FtcGxlQ2xhc3N9IFwiXG4gICAgICAgICAgICBzcmM9XCIke3NyY31cIlxuICAgICAgICAgICAgJHtzcmNzZXQgJiYgYHNyY3NldD1cIiR7c3Jjc2V0fVwiYH1cbiAgICAgICAgICAgIGFsdD1cIiR7bWVkaWEudGl0bGV9IC0gJHtodG1sKG1lZGlhLnR5cGUuaWQpfVwiXG4gICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICR7Y292ZXJDb2xvcn07IG1heC1oZWlnaHQ6IG5vbmUgIWltcG9ydGFudDtcIi8+XG4gICAgPC9hPlxuPC9kaXY+YDtcbiIsImltcG9ydCB7IHRvU3RhdGljVXJsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbGliL2Fzc2V0TWFwcGVyJztcblxuZXhwb3J0IGRlZmF1bHQgKHsgbWVkaWEsIGhyZWYsIGlzSW5IZXJvLCBjb3ZlcldpZHRoLCBjb3ZlckhlaWdodCwgY3JlYXRvclRleHQgfSkgPT4gYFxuPGRpdiBjbGFzcz1cIkNvdmVySW1hZ2VDb250YWluZXJcIj5cbjxhIGNsYXNzPVwiQ292ZXJJbWFnZUNvbnRhaW5lciBub0NvdmVyQXZhaWxhYmxlICR7IGlzSW5IZXJvID8gJ3NlY29uZGFyeS1iYWNrZ3JvdW5kJyA6ICdwcmltYXJ5LWJhY2tncm91bmQnIH1cIlxuICAgIGhyZWY9XCIkeyBocmVmIH1cIlxuICAgIGRhdGEtaHJlZiAgICA9XCIkeyBocmVmIH1cIlxuICAgIGRhdGEtbWVkaWEtaWQ9XCIkeyBtZWRpYS5pZCB9XCJcbiAgICBkYXRhLXRpdGxlICAgPVwiJHsgbWVkaWEudGl0bGUgfVwiXG4gICAgZGF0YS10eXBlICAgID1cIiR7IG1lZGlhLnR5cGUuaWQgfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUgJHsgaXNJbkhlcm8gPyAnc2Vjb25kYXJ5LWZvbnQtaGlnaGxpZ2h0LWJveCcgOiAncHJpbWFyeS1mb250IHByaW1hcnktZm9udC1oaWdobGlnaHQtYm94JyB9XCI+JHsgbWVkaWEudGl0bGUgfTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0aG9yICR7IGlzSW5IZXJvID8gJycgOiAncHJpbWFyeS1mb250JyB9XCI+JHsgY3JlYXRvclRleHQgfTwvZGl2PlxuXG4gICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzPVwibGFyZ2UtdGl0bGUganMtZGV0YWlscy1jb3Zlci1pbWFnZVwiXG4gICAgICAgICAgICBzcmM9XCIkeyB0b1N0YXRpY1VybCgnaW1nL2NsZWFyLmdpZicpIH1cIlxuICAgICAgICAgICAgYWx0PVwiJHsgbWVkaWEudGl0bGUgfSAtICR7IGh0bWwobWVkaWEudHlwZS5pZCkgfVwiXG4gICAgICAgICAgICAvPlxuXG48L2E+XG48L2Rpdj5cblxuYDtcbiIsImV4cG9ydCBkZWZhdWx0ICh7bWVkaWFJZCwgZ2FBY3Rpb24sIGFyaWFMYWJlbCwgc3R5bGVDbGFzc2VzLCB0ZXh0fSkgPT4gYFxuICAgIDxidXR0b24gY2xhc3M9J1JlYWRpbmdIaXN0b3J5QnV0dG9uICR7c3R5bGVDbGFzc2VzfScgZGF0YS1tZWRpYUlkPScke21lZGlhSWR9JyBkYXRhLWdhLWFjdGlvbj0nJHtnYUFjdGlvbn0nIGFyaWEtbGFiZWw9JyR7YXJpYUxhYmVsfSc+XG4gICAgICAgIDxpIGNsYXNzPSdpY29uLWhpc3RvcnkgYW5pbWF0ZWQgYm91bmNlSW4nIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgPHNwYW4gY2xhc3M9J1JlYWRpbmdIaXN0b3J5QnV0dG9uLXRleHQgdS1hbGxDYXBzJz4ke3RleHR9PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuYDtcbiIsImV4cG9ydCBkZWZhdWx0ICh7aW5kZXgsIGlzRmlsbGVkLCBpc0hhbGZGaWxsZWQsIGxhYmVsLCByaWR9KSA9PiBgXG4gICAgPGlucHV0IGlkPSdzdGFyJHtpbmRleH0tJHtyaWR9JyBjbGFzcz0nc3RhclJhZGlvJyB0eXBlPSdyYWRpbycgdmFsdWU9JyR7aW5kZXh9JyBhcmlhLWxhYmVsPScke2xhYmVsfScgbmFtZT0nJHtyaWR9Jy8+XG4gICAgPHNwYW4gZm9yPSdzdGFyJHtpbmRleH0tJHtyaWR9Jz48aSBkYXRhLWluZGV4PScke2luZGV4fScgY2xhc3M9J2ljb24gaWNvbi1zdGFyIGNvbnRyYXN0IFN0YXJSYXRpbmdzLXN0YXIgJHtpc0hhbGZGaWxsZWQgPyAnaGFsZkZpbGxlZCcgOiAnJ30gJHshIWlzRmlsbGVkID8gJ2ZpbGxlZCcgOiAnJ30nPjwvaT48L3NwYW4+XG5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHsgdGV4dCwgaHJlZiwgbGFiZWwgfSkgPT4gYFxuPGEgdGl0bGU9XCIke3RleHR9XCIgY2xhc3M9XCJzZWNvbmRhcnktdW5kZXJsaW5lXCIgaHJlZj1cIiR7aHJlZn1cIiBhcmlhLWxhYmVsPVwiJHtsYWJlbH1cIj4ke3RleHR9PC9hPlxuYDtcbiIsImV4cG9ydCBkZWZhdWx0ICh7IGdlb0lkY0NsYXNzIH0pID0+IGBcbjxkaXYgY2xhc3M9XCJ0aXRsZS1jb250ZW50cyBjYXJkIFRpdGxlQ2FyZCAke2dlb0lkY0NsYXNzfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJUaXRsZUhlYWRlckJhclwiPjwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIkNvdmVySW1hZ2VcIj48L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJJbmZvUGFuZWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlRpdGxlSW5mb1wiPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJUaXRsZUFjdGlvbiBpcy1ncmlkXCI+PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlRpdGxlV2lzaGxpc3QgaXMtZ3JpZFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyXCIgLz5cbjwvZGl2PmA7XG4iLCJleHBvcnQgZGVmYXVsdCAoe3R5cGVJZH0pID0+IGBcbiR7dHlwZUlkID8gYFxuICAgIDxzcGFuIGNsYXNzPVwidGl0bGUtZm9ybWF0LWJhZGdlIGNvbnRyYXN0IHUtYWxsQ2Fwc1wiPjxpIGNsYXNzPVwiaWNvbi0ke3R5cGVJZH1cIj48L2k+JHt3aW5kb3cuaHRtbCh0eXBlSWQpfTwvc3Bhbj5cbmAgOiAnJyB9XG5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHsgdGl0bGVJZCwgdGl0bGUsIGhyZWYsIGFyaWFMYWJlbCB9KSA9PiBgPGgzIHRpdGxlPVwiJHsgdGl0bGUgfVwiIGNsYXNzPVwidGl0bGUtbmFtZVwiIGRhdGEtbWVkaWEtaWQ9XCIkeyB0aXRsZUlkIH1cIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgPGEgdGFiaW5kZXg9XCIwXCIgaHJlZj1cIiR7IGhyZWYgfVwiIHJvbGU9XCJsaW5rXCIgYXJpYS1sYWJlbD1cIiR7IGFyaWFMYWJlbCB9XCI+XG4gICAgICAgICR7IHRpdGxlIH1cbiAgICA8L2E+XG48L2gzPmA7XG4iLCJleHBvcnQgZGVmYXVsdCAoe2dhLCBjb250cmFzdENsYXNzLCBhcmlhTGFiZWwsIGljb25DbGFzcywgdGV4dCwgaWNvbkFuaW1hdGlvbkNsYXNzZXN9KSA9PiBgXG48YnV0dG9uICR7Z2EgPyBgZGF0YS1nYS10cmFjaz1cIndpc2hsaXN0XCIgZGF0YS1nYS1tZWRpYUlEPVwiJHtnYS5tZWRpYUlkfVwiIGRhdGEtZ2EtdHlwZT0ke2dhLmZvcm1hdFR5cGV9YCA6ICcnfVxuY2xhc3M9XCJXaXNoTGlzdEJ1dHRvbiAke2NvbnRyYXN0Q2xhc3N9XCIgXG50eXBlPVwiYnV0dG9uXCIgXG5hcmlhLWxhYmVsPVwiJHthcmlhTGFiZWx9XCI+XG4gICAgPGkgY2xhc3M9XCIke2ljb25DbGFzc30gaWNvbiAke2ljb25BbmltYXRpb25DbGFzc2VzfVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAke3RleHQgPyBgPHNwYW4gY2xhc3M9XCJ1LWFsbENhcHMgV2lzaExpc3RCdXR0b24tdGV4dFwiPiR7dGV4dH08L3NwYW4+YCA6ICcnfVxuPC9idXR0b24+YDtcbiIsImltcG9ydCBDb250ZXh0TWVudSBmcm9tICcuLi9Db250ZXh0TWVudSc7XG5pbXBvcnQgVGl0bGVBdXRob3IgZnJvbSAnLi9UaXRsZUluZm8vVGl0bGVBdXRob3InO1xuaW1wb3J0IFRpdGxlRWRpdGlvbiBmcm9tICcuL1RpdGxlSW5mby9UaXRsZUVkaXRpb24nO1xuaW1wb3J0IFRpdGxlTmFtZSBmcm9tICcuL1RpdGxlSW5mby9UaXRsZU5hbWUnO1xuaW1wb3J0IFRpdGxlRm9ybWF0QmFkZ2UgZnJvbSAnLi9UaXRsZUluZm8vVGl0bGVGb3JtYXRCYWRnZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlSW5mbyBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiAndGl0bGUtaW5mbyc7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG5cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBfcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdzLmZvckVhY2goKHZpZXcpID0+IHZpZXcucmVtb3ZlKCkpO1xuICAgICAgICB0aGlzLl92aWV3cyA9IFtdO1xuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICAgICAgc3VwZXIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLl9yZXNldCgpO1xuXG4gICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAodGhpcy50aXRsZU5hbWUgPSBuZXcgVGl0bGVOYW1lKHsgbW9kZWw6IHRoaXMubW9kZWwgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCF3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJykpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAgICAgKHRoaXMuY29udGV4dE1lbnUgPSBuZXcgQ29udGV4dE1lbnUoeyBtb2RlbDogdGhpcy5tb2RlbCB9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51LiRlbC5hZGRDbGFzcygndGV4dC1yaWdodCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmlzTWFnYXppbmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAgICAgKHRoaXMudGl0bGVFZGl0aW9uID0gbmV3IFRpdGxlRWRpdGlvbih7IG1vZGVsOiB0aGlzLm1vZGVsIH0pKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICghd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZ2VvLWlkYycpKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgICAgICh0aGlzLnRpdGxlQXV0aG9yID0gbmV3IFRpdGxlQXV0aG9yKHsgbW9kZWw6IHRoaXMubW9kZWwgfSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICh0aGlzLnRpdGxlRm9ybWF0QmFkZ2UgPSBuZXcgVGl0bGVGb3JtYXRCYWRnZSh7XG4gICAgICAgICAgICAgICAgdHlwZUlkOiB0aGlzLm1vZGVsLmdldCgndHlwZScpLmlkLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTtcbiAgICAgICAgdGhpcy4kZWwuYXBwZW5kKC4uLnRoaXMuX3ZpZXdzLm1hcCgodmlldykgPT4gdmlldy4kZWwpKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgSG9sZEluZm9ybWF0aW9uTW9kYWwgZnJvbSAnLi4vLi4vLi4vaG9sZEluZm9ybWF0aW9uL3ZpZXdzL0hvbGRJbmZvcm1hdGlvbk1vZGFsJztcbmltcG9ydCBIb2xkSW5mb3JtYXRpb25Nb2RhbFYyIGZyb20gJy4uLy4uLy4uL2hvbGRJbmZvcm1hdGlvblYyL0hvbGRJbmZvcm1hdGlvbk1vZGFsVjInO1xuaW1wb3J0IEhvbGRJbmZvcm1hdGlvblYyIGZyb20gJy4uLy4uLy4uL2hvbGRJbmZvcm1hdGlvblYyL0hvbGRJbmZvcm1hdGlvblYyJztcblxuaW1wb3J0IENvcGllc0F2YWlsYWJsZVRlbXBsYXRlIGZyb20gJy4uLy4uL3RlbXBsYXRlcy9Db3BpZXNBdmFpbGFibGUuaHRtbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvcGllc0F2YWlsYWJsZSBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGNvbnN0cnVjdG9yKHt3aXRoSWNvbnN9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudGl0bGUgPSB0aGlzLm1vZGVsLnRvSlNPTigpO1xuICAgICAgICB0aGlzLndpdGhJY29ucyA9IHdpdGhJY29ucztcbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdlOnRpdGxlU3RhdGUnLCB0aGlzLl9tYXliZVJlbmRlcik7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgZXZlbnRzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2NsaWNrIC5qcy1ob2xkcy1yYXRpby1oZWxwLWljb24nOiAnX3JlbmRlck1vZGFsJ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTtcbiAgICAgICAgaWYodGhpcy5tb2RlbC5hbGxDb3BpZXNBcmVMdWNreURheSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRpdGxlLnRpdGxlU3RhdGUgPT09ICd1bmF2YWlsYWJsZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlck5vcm1hbCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50aXRsZS5pc1ByZVJlbGVhc2VUaXRsZSkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyTm9ybWFsKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodGhpcy50aXRsZS5hdmFpbGFiaWxpdHlUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdub3JtYWwnOlxuICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlck5vcm1hbCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWx3YXlzJzpcbiAgICAgICAgICAgICAgICB0aGlzLiRlbC5hcHBlbmQoQ29waWVzQXZhaWxhYmxlVGVtcGxhdGUoe1xuICAgICAgICAgICAgICAgICAgICB3aXRoSWNvbnM6IHRoaXMud2l0aEljb25zLFxuICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0OiB3aW5kb3cudGV4dCgnY292ZXIuYWx3YXlzQXZhaWxhYmxlJylcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsaW1pdGVkJyAmJiAhdGhpcy50aXRsZS5pc0F2YWlsYWJsZTpcbiAgICAgICAgICAgICAgICB0aGlzLiRlbC5hcHBlbmQoQ29waWVzQXZhaWxhYmxlVGVtcGxhdGUoe1xuICAgICAgICAgICAgICAgICAgICB3aXRoSWNvbnM6IHRoaXMud2l0aEljb25zLFxuICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0OiB3aW5kb3cudGV4dCgnY292ZXIubGltaXRlZEF2YWlsYWJpbGl0eScpXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX21heWJlUmVuZGVyKCkge1xuICAgICAgICBpZiAoKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2JldHRlclBhdHJvblN0YXRlJykgPyB0aGlzLm1vZGVsLmdldCgnaXNPbkhvbGQnKSA6IHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJykgPT09ICdvbkhvbGQnKVxuICAgICAgICAgICAgfHwgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2JldHRlclBhdHJvblN0YXRlJykgPyB0aGlzLm1vZGVsLmdldCgnaXNCb3Jyb3dlZCcpIDogdGhpcy5tb2RlbC5nZXQoJ3RpdGxlU3RhdGUnKSA9PT0gJ2JvcnJvd2VkJykpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLm1vZGVsLmFsbENvcGllc0FyZUx1Y2t5RGF5KXtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcmVuZGVyTm9ybWFsKCkge1xuICAgICAgICBsZXQgYXZhaWxhYmlsaXR5VGV4dCwgd2FpdGluZ1RleHQsIGhlbHBCdXR0b25IVE1MO1xuXG4gICAgICAgIGNvbnN0IG5vdEhlbGRDbGFzcyA9ICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdiZXR0ZXJQYXRyb25TdGF0ZScpID8gdGhpcy5tb2RlbC5nZXQoJ2lzT25Ib2xkJykgOiB0aGlzLm1vZGVsLmdldCgndGl0bGVTdGF0ZScpID09PSAnb25Ib2xkJykgPyAnJyA6ICdqcy1ob2xkcy1yYXRpby1ub3QtaGVsZCc7XG5cbiAgICAgICAgaWYgKHRoaXMudGl0bGUudHlwZS5pZCA9PT0gJ3BlcmlvZGljYWxzJyAmJiB0aGlzLnRpdGxlLmF2YWlsYWJsZUNvcGllcyA8IDEgJiYgIXRoaXMudGl0bGUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQgPSB3aW5kb3cuaHRtbCgnY292ZXIubGltaXRlZEF2YWlsYWJpbGl0eScpO1xuICAgICAgICAgICAgaGVscEJ1dHRvbkhUTUwgPSBgXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCIke3dpbmRvdy5odG1sKCdjb3Zlci53aHlMaW1pdGVkQXZhaWxhYmlsaXR5Jyl9XCJcbiAgICAgICAgICAgICAgICBkYXRhLXJldmVhbC1pZD1cImxpbWl0ZWQtcGVyaW9kaWNhbC1hdmFpbGFiaWxpdHlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVscC10aXAgc2Vjb25kYXJ5LWJhY2tncm91bmRcIj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICBgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgY29weVZhcmlhYmxlcyA9IHtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVDb3BpZXM6IHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ0x1Y2t5RGF5JykgPyB0aGlzLnRpdGxlLmF2YWlsYWJsZUNvcGllcyArIHRoaXMudGl0bGUubHVja3lEYXlBdmFpbGFibGVDb3BpZXMgOiB0aGlzLnRpdGxlLmF2YWlsYWJsZUNvcGllcyxcbiAgICAgICAgICAgICAgICBvd25lZENvcGllczogd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnTHVja3lEYXknKSA/IHRoaXMudGl0bGUub3duZWRDb3BpZXMgKyB0aGlzLnRpdGxlLmx1Y2t5RGF5T3duZWRDb3BpZXMgOiB0aGlzLnRpdGxlLm93bmVkQ29waWVzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCA9IHdpbmRvdy5odG1sKCdjb3Zlci5jb3BpZXNBdmFpbGFibGUnLCBjb3B5VmFyaWFibGVzKTtcblxuICAgICAgICAgICAgaWYodGhpcy5tb2RlbC5hbGxDb3BpZXNBcmVMdWNreURheSAmJiB0aGlzLnRpdGxlLnRpdGxlU3RhdGUgPT09ICd1bmF2YWlsYWJsZScpe1xuICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQgPSB3aW5kb3cuaHRtbCgnY292ZXIuY29waWVzQXZhaWxhYmxlJywge2F2YWlsYWJsZUNvcGllczogMCwgb3duZWRDb3BpZXM6IHRoaXMudGl0bGUubHVja3lEYXlPd25lZENvcGllc30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXRoaXMudGl0bGUuaXNBdmFpbGFibGUgJiYgIXRoaXMubW9kZWwuaGFzQXZhaWxhYmxlTHVja3lEYXlDb3BpZXMpIHtcbiAgICAgICAgICAgICAgICBpZighdGhpcy5tb2RlbC5hbGxDb3BpZXNBcmVMdWNreURheSl7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMSFRORy0yODYzJykpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy50aXRsZS5pc093bmVkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0aW5nVGV4dCA9IG5ldyBIb2xkSW5mb3JtYXRpb25WMih7bW9kZWw6IHRoaXMubW9kZWwsIGlzVmlzaXRvcjogd2luZG93Lk92ZXJEcml2ZS5pc1Zpc2l0b3J9KS53YWl0VGltZUh0bWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMubW9kZWwuZ2V0KCdpc0Zhc3RsYW5lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpdGxlLmhvbGRzUmF0aW8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0aW5nVGV4dCA9IHdpbmRvdy5odG1sKCdjb3Zlci53YWl0aW5nUGVyQ29weScsIHtob2xkc1JhdGlvOiB0aGlzLnRpdGxlLmhvbGRzUmF0aW99KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50aXRsZS5ob2xkc0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGluZ1RleHQgPSB3aW5kb3cuaHRtbCgnY292ZXIubm9Ib2xkcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhlbHBCdXR0b25IVE1MID0gd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnTEhUTkctMjg2MycpICYmICF0aGlzLnRpdGxlLmlzT3duZWRcbiAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgOiBgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tZWRpYS1pZD1cIiR7dGhpcy50aXRsZS5pZH1cIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiJHt3aW5kb3cuaHRtbCgnY292ZXIuaG9sZHNSYXRpb0V4cGxhbmF0aW9uJyl9XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoZWxwLXRpcCBzZWNvbmRhcnktYmFja2dyb3VuZCBqcy1ob2xkcy1yYXRpby1oZWxwLWljb24gJHtub3RIZWxkQ2xhc3N9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kZWwuYXBwZW5kKENvcGllc0F2YWlsYWJsZVRlbXBsYXRlKHtcbiAgICAgICAgICAgIHdpdGhJY29uczogdGhpcy53aXRoSWNvbnMsXG4gICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0LFxuICAgICAgICAgICAgd2FpdGluZ1RleHQsXG4gICAgICAgICAgICBoZWxwQnV0dG9uSFRNTFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgX3JlbmRlck1vZGFsKCkge1xuICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnTEhUTkctMjg2MycpKXtcbiAgICAgICAgICAgIGlmICgod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnYmV0dGVyUGF0cm9uU3RhdGUnKSA/IHRoaXMubW9kZWwuZ2V0KCdpc09uSG9sZCcpIDogdGhpcy5tb2RlbC5nZXQoJ3RpdGxlU3RhdGUnKSA9PT0gJ29uSG9sZCcpKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmFqYXguZ2V0SG9sZCh0aGlzLm1vZGVsLmdldCgnaWQnKSkuZG9uZSgoaG9sZERhdGEpID0+IHsgLy8gc2hvdWxkIGJlIGNvbmZpcm1pbmcgdGhhdCB0aGlzIGlzIG9uIGhvbGRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaG9sZHNSYXRpbzogaG9sZERhdGEuaG9sZHNSYXRpbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRzQ291bnQ6IGhvbGREYXRhLmhvbGRzQ291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBob2xkTGlzdFBvc2l0aW9uOiBob2xkRGF0YS5ob2xkTGlzdFBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGFsID0gbmV3ICBIb2xkSW5mb3JtYXRpb25Nb2RhbFYyKHttb2RlbDogdGhpcy5tb2RlbCwgZWw6IHRoaXMuZWx9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWwgPSBuZXcgSG9sZEluZm9ybWF0aW9uTW9kYWxWMih7bW9kZWw6IHRoaXMubW9kZWwsIGVsOiB0aGlzLmVsLCBoaWRlSG9sZHNMaW5rOiB0cnVlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpc0Zhc3RsYW5lID0gdGhpcy5tb2RlbC5nZXQoJ2lzRmFzdGxhbmUnKTtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlU3RhdGUgPSB0aGlzLm1vZGVsLmdldCgndGl0bGVTdGF0ZScpO1xuICAgICAgICAgICAgaWYgKCEhaXNGYXN0bGFuZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWwgPSBuZXcgSG9sZEluZm9ybWF0aW9uTW9kYWwoe21vZGVsOiB0aGlzLm1vZGVsLCB0eXBlOiAnYmFzaWMnLCBlbDogdGhpcy5lbH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2JldHRlclBhdHJvblN0YXRlJykgPyB0aGlzLm1vZGVsLmdldCgnaXNPbkhvbGQnKSA6IHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJykgPT09ICdvbkhvbGQnKSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5hamF4LmdldEhvbGQodGhpcy5tb2RlbC5nZXQoJ2lkJykpLmRvbmUoKGhvbGREYXRhKSA9PiB7IC8vIHNob3VsZCBiZSBjb25maXJtaW5nIHRoYXQgdGhpcyBpcyBvbiBob2xkXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRzUmF0aW86IGhvbGREYXRhLmhvbGRzUmF0aW8sXG4gICAgICAgICAgICAgICAgICAgICAgICBob2xkc0NvdW50OiBob2xkRGF0YS5ob2xkc0NvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgaG9sZExpc3RQb3NpdGlvbjogaG9sZERhdGEuaG9sZExpc3RQb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RhbCA9IG5ldyBIb2xkSW5mb3JtYXRpb25Nb2RhbCh7bW9kZWw6IHRoaXMubW9kZWwsIHR5cGU6ICdzdWNjZXNzUG9zaXRpb24nLCBlbDogdGhpcy5lbH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RhbCA9IG5ldyBIb2xkSW5mb3JtYXRpb25Nb2RhbCh7bW9kZWw6IHRoaXMubW9kZWwsIHR5cGU6ICdyYXRpbycsIGVsOiB0aGlzLmVsfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBMdWNreURheUhvbGRzIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZTp0aXRsZVN0YXRlJywgdGhpcy5fbWF5YmVSZW5kZXIpO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0gYDxkaXYgY2xhc3M9XCJMdWNreURheUNhbnRQbGFjZUhvbGRcIj48cD48aT4ke3dpbmRvdy50ZXh0KCdsdWNreURheS5jYW50UGxhY2VIb2xkJyl9PC9pPjwvcD48L2Rpdj5gO1xuICAgICAgICB0aGlzLiRlbC5hcHBlbmQodGVtcGxhdGUpO1xuICAgIH1cblxuICAgIF9tYXliZVJlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJykgPT09ICd1bmF2YWlsYWJsZScpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCBTdGFyVmlldyBmcm9tICcuL1N0YXJWaWV3JztcbmNvbnN0IHsgZmVhdHVyZU1hbmFnZXIgfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhclJhdGluZyBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGV2ZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdtb3VzZWxlYXZlJzogJ3N0b3BIb3ZlclJhdGluZydcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdzLmZvckVhY2goKHZpZXcpID0+IHZpZXcucmVtb3ZlKCkpO1xuICAgICAgICBzdXBlci5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBnZXQgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubW9kZWwuZ2V0KCdpc1ByZVJlbGVhc2VUaXRsZScpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLl92aWV3cyA9IFtdO1xuICAgICAgICB0aGlzLmhvdmVyUmF0aW5nID0gMDtcbiAgICAgICAgdGhpcy4kZWwuYWRkQ2xhc3MoJ3N0YXItcmF0aW5ncy1jb250YWluZXIgU3RhclJhdGluZ3MnKTtcblxuICAgICAgICB0aGlzLnJpZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KTtcblxuICAgICAgICAvLyBVcGRhdGUgc3RhciByYXRpbmcgd2hlbiBwYXRyb24gc3RhdHVzIGlzIHJlY2VpdmVkXG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZTp1c2VyU3RhclJhdGluZycsIChtb2RlbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBpZighdGhpcy5pc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGdsb2JhbFJhdGluZyA9IHRoaXMubW9kZWwuZ2V0KCdzdGFyUmF0aW5nJykgfHwgMDtcbiAgICAgICAgdGhpcy4kZWwuYXR0cignZGF0YS1nbG9iYWwtcmF0aW5nJywgdGhpcy5tb2RlbC5nZXQoJ3N0YXJSYXRpbmcnKSk7XG4gICAgICAgIHRoaXMuJGVsLmF0dHIoJ2RhdGEtbWVkaWEtaWQnLCB0aGlzLm1vZGVsLmlkKTtcblxuICAgICAgICB0aGlzLl92aWV3cy5mb3JFYWNoKCh2aWV3KSA9PiB2aWV3LnJlbW92ZSgpKTtcbiAgICAgICAgdGhpcy5fdmlld3MubGVuZ3RoID0gMDtcblxuICAgICAgICBsZXQgY3R4ID0gdGhpcztcbiAgICAgICAgXy5lYWNoKFsxLCAyLCAzLCA0LCA1LCAwXSwgKGluZGV4KSA9PiB7XG4gICAgICAgICAgICBsZXQgdmlld0RhdGEgPSB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIGdsb2JhbFJhdGluZzogZ2xvYmFsUmF0aW5nLFxuICAgICAgICAgICAgICAgIHJpZDogdGhpcy5yaWRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsZXQgc3RhclZpZXcgPSBuZXcgU3RhclZpZXcodmlld0RhdGEpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIWZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnc2FtcGxlT25seU1vZGUnKSl7XG4gICAgICAgICAgICAgICAgc3RhclZpZXcub24oJ3JhdGUnLCAoc3RhclZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5oYW5kbGVSYXRpbmcoc3RhclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGFyVmlldy5vbignaG92ZXInLCAoc3RhclZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5vbkhvdmVyUmF0aW5nKHN0YXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goc3RhclZpZXcpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpO1xuICAgICAgICB0aGlzLl92aWV3cy5mb3JFYWNoKCh2aWV3KSA9PiB7XG4gICAgICAgICAgICB2aWV3LnJlbmRlcigpO1xuICAgICAgICAgICAgdGhpcy4kZWwuYXBwZW5kKHZpZXcuJGVsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaXNIYWxmU3RhciAoZ2xvYmFsUmF0aW5nKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWxSYXRpbmcgJSAxID49IDAuMjUgJiYgZ2xvYmFsUmF0aW5nICUgMSA8IDAuNzU7IFxuICAgIH1cblxuICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaXNVc2VyUmF0aW5nID0gKHRoaXMubW9kZWwuZ2V0KCd1c2VyU3RhclJhdGluZycpID4gMCB8fCB0aGlzLmhvdmVyUmF0aW5nKSA+IDA7XG4gICAgICAgIHRoaXMuJGVsLnRvZ2dsZUNsYXNzKCd1c2VyLXJhdGluZycsIGlzVXNlclJhdGluZyk7XG4gICAgICAgIGxldCBnbG9iYWxSYXRpbmcgPSB0aGlzLm1vZGVsLmdldCgnc3RhclJhdGluZycpIHx8IDA7XG5cbiAgICAgICAgXy5lYWNoKHRoaXMuX3ZpZXdzLCAoc3RhclZpZXcpID0+IHtcblxuICAgICAgICAgICAgaWYgKGlzVXNlclJhdGluZyl7XG4gICAgICAgICAgICAgICAgc3RhclZpZXcuc2V0RmlsbGVkKHN0YXJWaWV3LmluZGV4IDw9ICh0aGlzLmhvdmVyUmF0aW5nIHx8IHRoaXMubW9kZWwuZ2V0KCd1c2VyU3RhclJhdGluZycpKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJWaWV3LmluZGV4IDwgZ2xvYmFsUmF0aW5nKSB7XG4gICAgICAgICAgICAgICAgc3RhclZpZXcuc2V0RmlsbGVkKHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFyVmlldy5pbmRleCAtIDEgPiBnbG9iYWxSYXRpbmcpIHtcbiAgICAgICAgICAgICAgICBzdGFyVmlldy5zZXRGaWxsZWQoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFyVmlldy5zZXRGaWxsZWQoc3RhclZpZXcuaW5kZXggLSAwLjc1IDwgZ2xvYmFsUmF0aW5nLCB0aGlzLmlzSGFsZlN0YXIoZ2xvYmFsUmF0aW5nKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFyVmlldy4kZWwuY2hpbGRyZW4oJy5zdGFyUmFkaW8nKS5wcm9wKCdjaGVja2VkJywgc3RhclZpZXcuaW5kZXggPT09IHRoaXMubW9kZWwuZ2V0KCd1c2VyU3RhclJhdGluZycpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaGFuZGxlUmF0aW5nKHN0YXJWYWx1ZSkge1xuICAgICAgICBsZXQgY3VycmVudFJhdGluZyA9IHRoaXMubW9kZWwuZ2V0KCd1c2VyU3RhclJhdGluZycpO1xuICAgICAgICBpZiAoc3RhclZhbHVlID09PSBjdXJyZW50UmF0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNldCgndXNlclN0YXJSYXRpbmcnLCAwKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcEhvdmVyUmF0aW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNldCgndXNlclN0YXJSYXRpbmcnLCBzdGFyVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9kZWwudHJpZ2dlcigndGl0bGU6YWN0aW9uJywgeyBhY3Rpb246ICdyYXRpbmcnLCBtb2RlbDogdGhpcy5tb2RlbCB9KTtcbiAgICB9XG5cbiAgICBvbkhvdmVyUmF0aW5nKHN0YXJWYWx1ZSkge1xuICAgICAgICB0aGlzLmhvdmVyUmF0aW5nID0gc3RhclZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHN0b3BIb3ZlclJhdGluZygpIHtcbiAgICAgICAgdGhpcy5ob3ZlclJhdGluZyA9IDA7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IFN0YXJSYXRpbmdzVGVtcGxhdGUgZnJvbSAnLi4vLi4vdGVtcGxhdGVzL1N0YXJWaWV3VGVtcGxhdGUuaHRtbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXJWaWV3IGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgdGVtcGxhdGUgPSBTdGFyUmF0aW5nc1RlbXBsYXRlO1xuXG4gICAgY29uc3RydWN0b3Ioe2luZGV4LCBpc0ZpbGxlZCA9IGZhbHNlLCBnbG9iYWxSYXRpbmcsIHJpZH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcblxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuaXNGaWxsZWQgPSBpc0ZpbGxlZDtcbiAgICAgICAgdGhpcy5pc0hhbGZGaWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sYWJlbCA9IHdpbmRvdy5odG1sKCdzdGFyUmF0aW5nLnVzZXJSYXRlZExhYmVsJywge2N1cnJlbnRSYXRpbmc6IHRoaXMuaW5kZXh9KTtcbiAgICAgICAgdGhpcy5nbG9iYWxSYXRpbmcgPSBnbG9iYWxSYXRpbmc7XG4gICAgICAgIHRoaXMucmlkID0gcmlkO1xuICAgICAgICB0aGlzLiRlbC5hZGRDbGFzcygnc3Rhci1jb250YWluZXInKTtcbiAgICB9XG5cbiAgICBldmVudHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnY2hhbmdlJzogJ29uU2VsZWN0ZWQnLFxuICAgICAgICAgICAgJ21vdXNlb3ZlciAuaWNvbi1zdGFyJzogJ29uSG92ZXInLFxuICAgICAgICAgICAgJ2NsaWNrIC5pY29uLXN0YXInOiAnb25TZWxlY3RlZCcsXG4gICAgICAgICAgICAnZm9jdXNpbiAubm9SYXRlJyA6ICdwc2V1ZG9Gb2N1cycsXG4gICAgICAgICAgICAnZm9jdXNvdXQgLm5vUmF0ZScgOiAncHNldWRvRm9jdXMnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc2V0RmlsbGVkKGlzRmlsbGVkLCBoYWxmRmlsbGVkID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGhhbGZGaWxsZWQpe1xuICAgICAgICAgICAgdGhpcy4kZWwuZmluZCgnLmljb24tc3RhcicpLnJlbW92ZUNsYXNzKCdmaWxsZWQnKTtcbiAgICAgICAgICAgIHRoaXMuaXNGaWxsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy5pc0hhbGZGaWxsZWQgPSBpc0ZpbGxlZDtcbiAgICAgICAgICAgIHRoaXMuJGVsLmZpbmQoJy5pY29uLXN0YXInKS50b2dnbGVDbGFzcygnaGFsZkZpbGxlZCcsIGlzRmlsbGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuJGVsLmZpbmQoJy5pY29uLXN0YXInKS5yZW1vdmVDbGFzcygnaGFsZkZpbGxlZCcpO1xuICAgICAgICAgICAgdGhpcy5pc0hhbGZGaWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5pc0ZpbGxlZCA9IGlzRmlsbGVkO1xuICAgICAgICAgICAgdGhpcy4kZWwuZmluZCgnLmljb24tc3RhcicpLnRvZ2dsZUNsYXNzKCdmaWxsZWQnLCBpc0ZpbGxlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlbGVjdGVkKCkge1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3JhdGUnLCB0aGlzLmluZGV4KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG9uSG92ZXIoKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcignaG92ZXInLCB0aGlzLmluZGV4KTtcbiAgICB9XG5cbiAgICAvL1VzZWQgZm9yIHRoZSAwdGggJ25vIHJhdGluZycgc3Rhci4gV2hlbiBmb2N1c2VkLCBtYWtlIHRoZSBjb250YWluZXIgYXBwZWFyIHRvIGhhdmUgZm9jdXNcbiAgICBwc2V1ZG9Gb2N1cygpIHtcbiAgICAgICAgdGhpcy4kZWwucGFyZW50KCkudG9nZ2xlQ2xhc3MoJ3BzZXVkb0ZvY3VzJyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBpZiAodGhpcy5pbmRleCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKHRoaXMudGVtcGxhdGUodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vUmF0ZVRlbXBsYXRlID1cbiAgICAgICAgICAgICAgICBgPGlucHV0IGlkPSdub1JhdGUtJHt0aGlzLnJpZH0nIGNsYXNzPSdzdGFyUmFkaW8gbm9SYXRlJyB0eXBlPSdyYWRpbycgdmFsdWU9JzAnIG5hbWU9JyR7dGhpcy5yaWR9JyBhcmlhLWxhYmVsPScke3dpbmRvdy5odG1sKCdzdGFyUmF0aW5nLnJhdGVkTGFiZWwnLCB7cmF0aW5nOiB0aGlzLmdsb2JhbFJhdGluZ30pfScvPmA7XG4gICAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZChub1JhdGVUZW1wbGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJjb25zdCBCYWNrYm9uZSA9IHdpbmRvdy5CYWNrYm9uZTtcbmNvbnN0IGZlYXR1cmVNYW5hZ2VyID0gd2luZG93LmZlYXR1cmVNYW5hZ2VyO1xuXG5pbXBvcnQgVGl0bGVBdXRob3JUZW1wbGF0ZSBmcm9tICcuLi8uLi90ZW1wbGF0ZXMvVGl0bGVBdXRob3IuaHRtbCc7XG5cbmNvbnN0IFRpdGxlQXV0aG9yID0gQmFja2JvbmUuVmlldy5leHRlbmQoe1xuICAgIHRlbXBsYXRlOiBUaXRsZUF1dGhvclRlbXBsYXRlLFxuXG4gICAgY2xhc3NOYW1lOiAndGl0bGUtYXV0aG9yJyxcblxuICAgIHRhZ05hbWU6ICdwJyxcblxuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmdldCgndHlwZScpLmlkICE9PSAncGVyaW9kaWNhbHMnKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5tb2RlbC50b0pTT04oKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aXRsZS5maXJzdENyZWF0b3JOYW1lICE9IG51bGwgJiZcbiAgICAgICAgICAgICFfLmlzRW1wdHkodGl0bGUuZmlyc3RDcmVhdG9yTmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgY3JlYXRvck5hbWUgPSBmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2ZpeEh0bWxUYWdzSW5Db3B5JylcbiAgICAgICAgICAgICAgICA/IHRpdGxlLmZpcnN0Q3JlYXRvck5hbWVcbiAgICAgICAgICAgICAgICA6IF8uZXNjYXBlKHRpdGxlLmZpcnN0Q3JlYXRvck5hbWUpO1xuXG4gICAgICAgICAgICBjb25zdCB2aWV3RGF0YSA9IHtcbiAgICAgICAgICAgICAgICBocmVmOiB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMuc2VhcmNoQnlUeXBlLCB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjcmVhdG9ySWQnLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeTogdGl0bGUuZmlyc3RDcmVhdG9ySWQsXG4gICAgICAgICAgICAgICAgICAgIHNvcnRCeTogJ25ld2x5YWRkZWQnLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB3aW5kb3cudGV4dCgnY292ZXIuc2VhcmNoQnlBdXRob3InLCB7XG4gICAgICAgICAgICAgICAgICAgIGF1dGhvcjogY3JlYXRvck5hbWUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGV4dDogY3JlYXRvck5hbWUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLiRlbC5odG1sKFxuICAgICAgICAgICAgICAgIHdpbmRvdy50ZXh0KCdieUxpbmUnLCB7IGNyZWF0b3I6IHRoaXMudGVtcGxhdGUodmlld0RhdGEpIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ25vLWF1dGhvci1maXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsLmh0bWwod2luZG93Lmh0bWwoJ2NvdmVyLm5vQXV0aG9yQXZhaWxhYmxlJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBUaXRsZUF1dGhvcjtcbiIsIlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVFZGl0aW9uIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgbm9kZSA9ICQoYDxkaXYgY2xhc3M9XCJ0aXRsZS1lZGl0aW9uXCI+JHt0aGlzLm1vZGVsLmdldCgnZWRpdGlvbicpfTwvZGl2PmApO1xuICAgICAgICB0aGlzLnNldEVsZW1lbnQobm9kZSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IFRpdGxlRm9ybWF0QmFkZ2VUZW1wbGF0ZSBmcm9tICcuLi8uLi90ZW1wbGF0ZXMvVGl0bGVGb3JtYXRCYWRnZS5odG1sJztcblxuY29uc3QgVGl0bGVGb3JtYXRCYWRnZSA9IEJhY2tib25lLlZpZXcuZXh0ZW5kKHtcbiAgICBpbml0aWFsaXplKHt0eXBlSWR9KSB7XG4gICAgICAgIHRoaXMudHlwZUlkID0gdHlwZUlkO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0sXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuc2V0RWxlbWVudCgkKFRpdGxlRm9ybWF0QmFkZ2VUZW1wbGF0ZSh7dHlwZUlkOiB0aGlzLnR5cGVJZH0pKSk7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlRm9ybWF0QmFkZ2U7XG4iLCJpbXBvcnQgVGl0bGVOYW1lVGVtcGxhdGUgZnJvbSAnLi4vLi4vdGVtcGxhdGVzL1RpdGxlTmFtZS5odG1sJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVOYW1lIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IFRpdGxlTmFtZVRlbXBsYXRlO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIF9hc3NlbWJsZUxhYmVsKCkge1xuICAgICAgICBsZXQgbGFiZWxQYXJ0cyA9IFtdO1xuXG4gICAgICAgIGxhYmVsUGFydHMucHVzaCh0aGlzLm1vZGVsLmdldCgndGl0bGUnKSk7XG5cbiAgICAgICAgaWYgKCEhdGhpcy5tb2RlbC5nZXQoJ2ZpcnN0Q3JlYXRvck5hbWUnKSkge1xuICAgICAgICAgICAgbGFiZWxQYXJ0cy5wdXNoKHdpbmRvdy5odG1sKCdieUxpbmUnLCB7Y3JlYXRvcjogdGhpcy5tb2RlbC5pc01hZ2F6aW5lID8gdGhpcy5tb2RlbC5nZXQoJ3B1Ymxpc2hlcicpLm5hbWUgOiB0aGlzLm1vZGVsLmdldCgnZmlyc3RDcmVhdG9yTmFtZScpfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFiZWxQYXJ0cy5wdXNoKHRoaXMubW9kZWwuYXZhaWxhYmlsaXR5VGV4dCgpKTtcblxuICAgICAgICBsYWJlbFBhcnRzLnB1c2godGhpcy5tb2RlbC5nZXQoJ3R5cGUnKS5uYW1lKTtcblxuICAgICAgICByZXR1cm4gbGFiZWxQYXJ0cy5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB2aWV3RGF0YSA9IHtcbiAgICAgICAgICAgIHRpdGxlSWQgICA6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgICAgICBocmVmICAgICAgOiB0aGlzLm1vZGVsLnRpdGxlRGV0YWlsc1VybCxcbiAgICAgICAgICAgIGFyaWFMYWJlbCA6IF8uZXNjYXBlKHRoaXMuX2Fzc2VtYmxlTGFiZWwoKSksXG4gICAgICAgICAgICB0aXRsZSAgICAgOiB0aGlzLm1vZGVsLmdldCgndGl0bGUnKVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KCQodGhpcy50ZW1wbGF0ZSh2aWV3RGF0YSkpKTtcbiAgICB9XG59XG5cbiIsImNvbnN0IEJhY2tib25lID0gd2luZG93LkJhY2tib25lO1xuY29uc3QgdXJsID0gd2luZG93LnVybDtcbmNvbnN0IHJvdXRlcyA9IHdpbmRvdy5yb3V0ZXM7XG5jb25zdCB3aW5kb3dUZXh0ID0gd2luZG93LnRleHQ7XG5jb25zdCBmZWF0dXJlTWFuYWdlciA9IHdpbmRvdy5mZWF0dXJlTWFuYWdlcjtcblxuY29uc3QgaXNDYW5hcnlTaXRlID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vLi4vLi4vbGliL3V0aWxpdHkvaXNDYW5hcnlTaXRlJyk7XG5cbmNvbnN0IFRpdGxlU2VyaWVzID0gQmFja2JvbmUuVmlldy5leHRlbmQoe1xuICAgIGluaXRpYWxpemUoeyBoaWRlU3VidGl0bGUgfSkge1xuICAgICAgICB0aGlzLnVzZUVuaGFuY2VkU2VyaWVzID1cbiAgICAgICAgICAgIGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZW5oYW5jZWRTZXJpZXMnKSAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMubW9kZWwuZ2V0KCdkZXRhaWxlZFNlcmllcycpICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgdGhpcy5oaWRlU3VidGl0bGUgPSBoaWRlU3VidGl0bGU7XG5cbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAndXBkYXRlJywgdGhpcy5yZW5kZXIpO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0sXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCBzZWFyY2hQYXJhbXMgPSB0aGlzLnVzZUVuaGFuY2VkU2VyaWVzXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXJpZXNJZCcsXG4gICAgICAgICAgICAgICAgICBxdWVyeTogdGhpcy5tb2RlbC5nZXQoJ2RldGFpbGVkU2VyaWVzJykuc2VyaWVzSWQsXG4gICAgICAgICAgICAgICAgICBzb3J0Qnk6ICdyZWFkaW5nT3JkZXInLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXJpZXMnLFxuICAgICAgICAgICAgICAgICAgcXVlcnk6IHRoaXMubW9kZWwuZ2V0KCdzZXJpZXMnKSxcbiAgICAgICAgICAgICAgICAgIHNvcnRCeTogJ25ld2x5YWRkZWQnLFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgIGxldCBzdWJ0aXRsZUNvbnRhaW5zU2VyaWVzID1cbiAgICAgICAgICAgIHRoaXMubW9kZWwuZ2V0KCdzdWJ0aXRsZScpICYmXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmdldCgnc3VidGl0bGUnKS5pbmRleE9mKHRoaXMubW9kZWwuZ2V0KCdzZXJpZXMnKSkgPiAtMTtcblxuICAgICAgICBsZXQgc2VyaWVzVGV4dCA9ICcnO1xuICAgICAgICBsZXQgcmFua1RleHQgPSAnJztcblxuICAgICAgICBpZiAodGhpcy51c2VFbmhhbmNlZFNlcmllcykge1xuICAgICAgICAgICAgbGV0IGRldGFpbGVkU2VyaWVzID0gdGhpcy5tb2RlbC5nZXQoJ2RldGFpbGVkU2VyaWVzJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlYWRpbmdPcmRlciA9IGRldGFpbGVkU2VyaWVzLnJlYWRpbmdPcmRlcjtcbiAgICAgICAgICAgIGlmIChyZWFkaW5nT3JkZXIpIHtcbiAgICAgICAgICAgICAgICBzZXJpZXNUZXh0ID0gaXNOYU4ocmVhZGluZ09yZGVyKVxuICAgICAgICAgICAgICAgICAgICA/IHdpbmRvdy50ZXh0KCdlbmhhbmNlZFNlcmllc0xpbmtUZXh0JywgeyByZWFkaW5nT3JkZXIgfSlcbiAgICAgICAgICAgICAgICAgICAgOiB3aW5kb3cudGV4dCgnZW5oYW5jZWRTZXJpZXNMaW5rTnVtYmVyJywgeyByZWFkaW5nT3JkZXIgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJhbmsgPSBkZXRhaWxlZFNlcmllcy5yYW5rO1xuICAgICAgICAgICAgaWYgKHJhbmspIHtcbiAgICAgICAgICAgICAgICByYW5rVGV4dCA9IHdpbmRvdy50ZXh0KCdyYW5rVGV4dCcsIHsgcmFuayB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlcmllc1RleHQgPSBzdWJ0aXRsZUNvbnRhaW5zU2VyaWVzXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1vZGVsLmdldCgnc3VidGl0bGUnKVxuICAgICAgICAgICAgICAgIDogdGhpcy5tb2RlbC5nZXQoJ3NlcmllcycpIHx8ICcnO1xuICAgICAgICAgICAgcmFua1RleHQgPSBzdWJ0aXRsZUNvbnRhaW5zU2VyaWVzXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1vZGVsLmdldCgnc3VidGl0bGUnKVxuICAgICAgICAgICAgICAgIDogdGhpcy5tb2RlbC5nZXQoJ3JhbmsnKSB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmdldCgndHlwZScpLmlkID09PSAnbWFnYXppbmUnKSB7XG4gICAgICAgICAgICBzZWFyY2hQYXJhbXMubWVkaWFUeXBlID0gJ21hZ2F6aW5lJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB2aWV3TW9kZWwgPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5tb2RlbC5nZXQoJ2lkJyksXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5tb2RlbC5nZXQoJ3RpdGxlJyksXG4gICAgICAgICAgICBzZXJpZXM6IHNlcmllc1RleHQsXG4gICAgICAgICAgICByYW5rOiByYW5rVGV4dCxcbiAgICAgICAgICAgIHN1YnRpdGxlOiB0aGlzLm1vZGVsLmdldCgnc3VidGl0bGUnKSB8fCAnJyxcbiAgICAgICAgICAgIHNlYXJjaFVybDogdXJsKHJvdXRlcy5zZWFyY2hCeVR5cGUsIHNlYXJjaFBhcmFtcyksXG4gICAgICAgICAgICBsYW5ndWFnZTogXy5maXJzdCh0aGlzLm1vZGVsLmdldCgnbGFuZ3VhZ2VzJykgfHwgWycnXSksXG4gICAgICAgICAgICBub0NyZWF0b3JzOiBfLmlzRW1wdHkodGhpcy5tb2RlbC5nZXQoJ2NyZWF0b3JzJykpLFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCAkdGVtcCA9ICQoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5oaWRlU3VidGl0bGUgJiZcbiAgICAgICAgICAgICFzdWJ0aXRsZUNvbnRhaW5zU2VyaWVzICYmXG4gICAgICAgICAgICAhXy5pc0VtcHR5KHZpZXdNb2RlbC5zdWJ0aXRsZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgJHN1YnRpdGxlID0gdGhpcy5fYnVpbGRTdWJ0aXRsZShcbiAgICAgICAgICAgICAgICB2aWV3TW9kZWwuc3VidGl0bGUsXG4gICAgICAgICAgICAgICAgdmlld01vZGVsLmxhbmd1YWdlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgJHRlbXAuYXBwZW5kKCRzdWJ0aXRsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8uaXNFbXB0eSh2aWV3TW9kZWwuc2VyaWVzKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuaXNNYWdhemluZSAmJlxuICAgICAgICAgICAgICAgIGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnbWFnYXppbmUtcm9sbHVwJylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxldCAkc2VyaWVzID0gdGhpcy5fYnVpbGRTZXJpZXNUZXh0KFxuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZWwubm9DcmVhdG9ycyxcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGVsLnNlcmllc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgJHRlbXAuYXBwZW5kKCRzZXJpZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgJHNlcmllcyA9IHRoaXMuX2J1aWxkU2VyaWVzTGluayhcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGVsLnNlYXJjaFVybCxcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGVsLm5vQ3JlYXRvcnMsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlbC5zZXJpZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICR0ZW1wLmFwcGVuZCgkc2VyaWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFfLmlzRW1wdHkodmlld01vZGVsLnJhbmspICYmXG4gICAgICAgICAgICBpc0NhbmFyeVNpdGUod2luZG93Lk92ZXJEcml2ZS50ZW5hbnQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgJHJhbmsgPSB0aGlzLl9idWlsZFJhbmtUZXh0KFxuICAgICAgICAgICAgICAgIHZpZXdNb2RlbC5ub0NyZWF0b3JzLFxuICAgICAgICAgICAgICAgIHZpZXdNb2RlbC5yYW5rXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgJHRlbXAuYXBwZW5kKCRyYW5rKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJGVsLmh0bWwoJHRlbXApO1xuICAgIH0sXG5cbiAgICBfYnVpbGRSYW5rVGV4dChub0NyZWF0b3JzLCB0ZXh0KSB7XG4gICAgICAgIHJldHVybiAkKCc8cCAvPicsIHtcbiAgICAgICAgICAgIGNsYXNzOiBgc2VyaWVzICR7KG5vQ3JlYXRvcnMgPyAnbm8tYXV0aG9yJyA6ICcnLCB0ZXh0KX1gLFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9idWlsZFNlcmllc1RleHQobm9DcmVhdG9ycywgdGV4dCkge1xuICAgICAgICBsZXQgJGVsbSA9ICQoJzxwIC8+Jywge1xuICAgICAgICAgICAgY2xhc3M6IGBzZXJpZXMgJHsobm9DcmVhdG9ycyA/ICduby1hdXRob3InIDogJycsIHRleHQpfWAsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gJGVsbTtcbiAgICB9LFxuXG4gICAgX2J1aWxkU2VyaWVzTGluayhzZWFyY2hVcmwsIG5vQ3JlYXRvcnMsIHRleHQpIHtcbiAgICAgICAgbGV0ICRlbG0gPSAkKCc8cCAvPicsIHtcbiAgICAgICAgICAgIGNsYXNzOiBgc2VyaWVzICR7bm9DcmVhdG9ycyA/ICduby1hdXRob3InIDogJyd9YCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0ICRsaW5rID0gJCgnPGEgLz4nLCB7XG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6IHdpbmRvd1RleHQoJ2NvdmVyLnNlYXJjaEJ5U2VyaWVzJywgeyBzZXJpZXM6IHRleHQgfSksXG4gICAgICAgICAgICBjbGFzczogdGhpcy51c2VFbmhhbmNlZFNlcmllc1xuICAgICAgICAgICAgICAgID8gJ3Nlcmllcy1saW5rLWVuaGFuY2VkIHNlY29uZGFyeS1jb2xvcidcbiAgICAgICAgICAgICAgICA6ICdzZXJpZXMtbGluayBzZWNvbmRhcnktdW5kZXJsaW5lJyxcbiAgICAgICAgICAgIGhyZWY6IHNlYXJjaFVybCxcbiAgICAgICAgICAgIHRpdGxlOiB0ZXh0LFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGVsbS5hcHBlbmQoJGxpbmspO1xuXG4gICAgICAgIHJldHVybiAkZWxtO1xuICAgIH0sXG5cbiAgICBfYnVpbGRTdWJ0aXRsZShzdWJ0aXRsZSwgbGFuZ3VhZ2UpIHtcbiAgICAgICAgaWYgKGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZml4SHRtbFRhZ3NJbkNvcHknKSkge1xuICAgICAgICAgICAgcmV0dXJuICQoYDxwIGNsYXNzPVwic3VidGl0bGVcIiBsYW5nPVwiJHtsYW5ndWFnZX1cIj4ke3N1YnRpdGxlfTwvcD5gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAkKCc8cCAvPicsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogJ3N1YnRpdGxlJyxcbiAgICAgICAgICAgICAgICB0ZXh0OiBzdWJ0aXRsZSxcbiAgICAgICAgICAgICAgICBsYW5nOiBsYW5ndWFnZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpdGxlU2VyaWVzO1xuIiwiY29uc3QgeyBodG1sIH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IGBcbjxkaXYgY2xhc3M9XCJOb3RDb21wYXRpYmxlRm9ybWF0XCI+XG4gICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNsb3NlLWJ0blwiPsOXPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIndhcm5pbmctdGV4dFwiPlxuICAgICAgICA8cD4ke2h0bWwoXCJub3RDb21wYXRpYmxlVGl0bGUud2FybmluZ1RleHRcIil9PC9wPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5gOyIsImltcG9ydCB0ZW1wbGF0ZSBmcm9tICcuL25vdC1jb21wYXRpYmxlLWZvcm1hdC12aWV3Lmh0bWwnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm90Q29tcGF0aWJsZUZvcm1hdCBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGNvbnN0cnVjdG9yKHttb2RlbCwgZWx9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy4kZWwgPSAkKGVsKTtcblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy4kZWwuY3NzKFwiZGlzcGxheVwiLCBcImJsb2NrXCIpO1xuICAgICAgICB0aGlzLiRlbC5hcHBlbmQodGVtcGxhdGUoKSk7XG5cbiAgICAgICAgdGhpcy4kZWwuZmluZChcIi5jbG9zZS1idG5cIikub24oXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiRlbC5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcbiAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsImltcG9ydCBQcmVtaXVtUmV2aWV3c1ZpZXcgZnJvbSAnLi92aWV3cy9wcmVtaXVtX3Jldmlld3MnO1xuaW1wb3J0IFByZW1pdW1SZXZpZXdNb2RlbCBmcm9tICcuL21vZGVscy9wcmVtaXVtX3Jldmlldyc7XG5cbmNvbnN0IGNyZWF0ZUNvbXBvbmVudCA9ICh7ZWx9KSA9PiB7XG4gICAgY29uc3QgbW9kZWwgPSBuZXcgUHJlbWl1bVJldmlld01vZGVsKCk7XG4gICAgY29uc3QgdmlldyA9IG5ldyBQcmVtaXVtUmV2aWV3c1ZpZXcoe2VsLCBtb2RlbH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDb21wb25lbnQ7XG4iLCJpbXBvcnQgQmFzZU1vZGVsIGZyb20gJy4uLy4uLy4uL21vZGVscy9iYXNlJztcblxuY29uc3QgUHJlbWl1bVJldmlld01vZGVsID0gQmFzZU1vZGVsLmV4dGVuZCh7XG4gICAgdXJsUm9vdDogJydcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBQcmVtaXVtUmV2aWV3TW9kZWw7XG4iLCJleHBvcnQgZGVmYXVsdCAoeyByZXZpZXdzIH0pID0+IGBcbjx1bCBjbGFzcz1cIlRpdGxlRGV0YWlscy1saXN0XCI+XG4gICAgJHtyZXZpZXdzICYmIHJldmlld3MubWFwKChyZXZpZXcsIGluZGV4KSA9PiBgXG4gICAgPGxpPlxuICAgICAgICA8ZGl2IHRhYmluZGV4PVwiMFwiIHJvbGU9XCJidXR0b25cIiBpZD1cInJldmlldy1idXR0b24tJHtpbmRleH1cIiBjbGFzcz1cIlRpdGxlRGV0YWlscy1yZXZpZXdCdXR0b24gVGl0bGVEZXRhaWxzLUxpbmtcIiBhcmlhLWNvbnRyb2xzPVwicmV2aWV3LWNvbnRlbnQtJHtpbmRleH1cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgIDxoMyBjbGFzcz1cIlRpdGxlRGV0YWlscy1yZXZpZXdIZWFkaW5nXCI+JHtyZXZpZXcuc291cmNlLm1hdGNoKCdhbHQoICkqPVxcXCIoLiopXFxcIiBib3JkZXInKVsyXX08L2gzPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uLWRvd24tYXJyb3cgVGl0bGVEZXRhaWxzLXBhbmVsQXJyb3cgdS1wdWxsUmlnaHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwicmV2aWV3LWNvbnRlbnQtJHtpbmRleH1cIiBjbGFzcz1cIlRpdGxlRGV0YWlscy1yZXZpZXdDb250ZW50IHUtaGlkZU1lXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiVGl0bGVEZXRhaWxzLXJldmlld1NvdXJjZVwiPiR7cmV2aWV3LnNvdXJjZX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJUaXRsZURldGFpbHMtcmV2aWV3XCI+JHtyZXZpZXcuY29udGVudH08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9saT5cbiAgICBgKS5qb2luKCcnKVxuICAgIH1cbjwvdWw+YDtcbiIsImltcG9ydCBCYXNlVmlldyBmcm9tICcuLi8uLi8uLi92aWV3cy9iYXNlJztcbmltcG9ydCBSZXZpZXdzQ29udGFpbmVyVGVtcGxhdGUgZnJvbSAnLi4vdGVtcGxhdGVzL3Jldmlld3MuaHRtbCc7XG5pbXBvcnQga2V5cyBmcm9tICcuLi8uLi8uLi91dGlsL2tleWNvZGVzJztcblxuY29uc3QgUHJlbWl1bVJldmlld3NWaWV3ID0gQmFzZVZpZXcuZXh0ZW5kKHtcbiAgICB0ZW1wbGF0ZTogUmV2aWV3c0NvbnRhaW5lclRlbXBsYXRlLFxuICAgIGV2ZW50czoge1xuICAgICAgICAnY2xpY2sgLlRpdGxlRGV0YWlscy1yZXZpZXdCdXR0b24nOiAndG9nZ2xlUmV2aWV3JyxcbiAgICAgICAgJ3RhcCAuVGl0bGVEZXRhaWxzLXJldmlld0J1dHRvbic6ICd0b2dnbGVSZXZpZXcnLFxuICAgICAgICAna2V5cHJlc3MgLlRpdGxlRGV0YWlscy1yZXZpZXdCdXR0b24nOiAndG9nZ2xlUmV2aWV3JyxcbiAgICB9LFxuICAgIGluaXRpYWxpemUoeyBlbCwgbW9kZWwgfSkge1xuICAgICAgICB0aGlzLmVsID0gZWw7XG4gICAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy5tZWRpYUlkID0gXy5rZXlzKHdpbmRvdy5PdmVyRHJpdmUubWVkaWFJdGVtcylbMF07XG4gICAgICAgIHRoaXMucmVuZGVyUmV2aWV3cygpO1xuICAgIH0sXG4gICAgcmVuZGVyKHJldmlld3MpIHtcbiAgICAgICAgdGhpcy4kKCcuanMtcmV2aWV3cy1jb250YWluZXInKS5odG1sKFxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSh7IHJldmlld3M6IHJldmlld3MuaXRlbXMgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICByZW5kZXJSZXZpZXdzKCkge1xuICAgICAgICB0aGlzLm1vZGVsLnVybFJvb3QgPSB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMucmV2aWV3cywge1xuICAgICAgICAgICAgbWVkaWFJZDogdGhpcy5tZWRpYUlkLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tb2RlbC5mZXRjaCgpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiQoJy5qcy1yZXZpZXdzLWNvbnRhaW5lcicpLnJlbW92ZUNsYXNzKCd1LWhpZGVNZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuJCgnLmpzLXJldmlld3MtY29udGFpbmVyJykuYXR0cignZGF0YS1sb2FkZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcihyZXNwb25zZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuJCgnLmpzLXJldmlldy1sb2FkZXInKS5hZGRDbGFzcygndS1oaWRlTWUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLiQoJy5qcy1yZXZpZXdzLWNvbnRhaW5lcicpLmF0dHIoJ2RhdGEtbG9hZGVkJywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgdG9nZ2xlUmV2aWV3KGUpIHtcbiAgICAgICAgLy8gUHJldmVudCBmb3VuZGF0aW9uIHNjcm9sbGluZyBhd2F5IGZyb20gdGhlIHJldmlld1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICghdGhpcy5pc1NlbGVjdEV2ZW50KGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gJChlLmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICBjb25zdCB0YXJnZXRDb250ZW50ID0gdGFyZ2V0Lm5leHQoJy5UaXRsZURldGFpbHMtcmV2aWV3Q29udGVudCcpO1xuICAgICAgICBjb25zdCB0YXJnZXRBcnJvdyA9IHRhcmdldC5maW5kKCcuVGl0bGVEZXRhaWxzLXBhbmVsQXJyb3cnKTtcbiAgICAgICAgaWYgKHRhcmdldC5hdHRyKCdhcmlhLWV4cGFuZGVkJykgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsXG4gICAgICAgICAgICAgICAgLmZpbmQoJy5UaXRsZURldGFpbHMtcmV2aWV3Q29udGVudCcpXG4gICAgICAgICAgICAgICAgLm5vdCh0YXJnZXRDb250ZW50KVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcygndS1oaWRlTWUnKTtcbiAgICAgICAgICAgIHRoaXMuJGVsXG4gICAgICAgICAgICAgICAgLmZpbmQoJy5UaXRsZURldGFpbHMtcGFuZWxBcnJvdycpXG4gICAgICAgICAgICAgICAgLm5vdCh0YXJnZXRBcnJvdylcbiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2ljb24tdXAtYXJyb3cnKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnaWNvbi1kb3duLWFycm93Jyk7XG4gICAgICAgICAgICB0aGlzLiRlbFxuICAgICAgICAgICAgICAgIC5maW5kKCcuVGl0bGVEZXRhaWxzLXJldmlld0J1dHRvbicpXG4gICAgICAgICAgICAgICAgLm5vdCh0YXJnZXQpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgIHRhcmdldC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgIHRhcmdldEFycm93XG4gICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdpY29uLWRvd24tYXJyb3cnKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnaWNvbi11cC1hcnJvdycpO1xuICAgICAgICAgICAgdGFyZ2V0Q29udGVudC5yZW1vdmVDbGFzcygndS1oaWRlTWUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICB0YXJnZXRBcnJvd1xuICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnaWNvbi11cC1hcnJvdycpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCdpY29uLWRvd24tYXJyb3cnKTtcbiAgICAgICAgICAgIHRhcmdldENvbnRlbnQuYWRkQ2xhc3MoJ3UtaGlkZU1lJyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGlzU2VsZWN0RXZlbnQoZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBlLnR5cGUgPT09ICdjbGljaycgfHxcbiAgICAgICAgICAgIGUud2hpY2ggPT09IGtleXMuRU5URVIgfHxcbiAgICAgICAgICAgIGUud2hpY2ggPT09IGtleXMuU1BBQ0VcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBQcmVtaXVtUmV2aWV3c1ZpZXc7XG4iLCJjb25zdCB7IHRleHQsIHVybCB9ID0gd2luZG93O1xuaW1wb3J0IFRpdGxlIGZyb20gJy4uL21lZGlhL21vZGVscy9UaXRsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlY2VudElzc3Vlc0RyYXdlciBleHRlbmRzIEJhY2tib25lLlZpZXd7XG5cbiAgICBjb25zdHJ1Y3Rvcih7ZWwsIHRpdGxlTW9kZWx9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMucGFnZU51bSA9IDE7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy50aXRsZU1vZGVsID0gdGl0bGVNb2RlbDtcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KGVsKTtcblxuICAgICAgICAkKCcubG9hZC1idXR0b24nKS5jbGljaygoZSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMubG9hZE5leHRQYWdlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWROZXh0UGFnZSgpIHtcbiAgICAgICAgdGhpcy5wYWdlTnVtID0gdGhpcy5wYWdlTnVtICsgMTtcblxuICAgICAgICB0aGlzLmdldFJlY2VudElzc3VlcygpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcyAmJiB0eXBlb2YgcmVzLmJvZHkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmVzLmJvZHkuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kZWwgPSBuZXcgVGl0bGUoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsLmFwcGVuZChgXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiR7dXJsKHJvdXRlcy5tZWRpYUlkLCB7aWQ6IGl0ZW0uaWR9KX1cIiBhcmlhLWxhYmVsPVwiJHt0ZXh0KFwidmlld0RldGFpbHNBYm91dFRpdGxlXCIsIHt0aXRsZTogaXRlbS50aXRsZX0pfVwiIGRhdGEtbWVkaWEtaWQ9XCIke2l0ZW0uaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgYWx0PVwiJHtpdGVtLnRpdGxlfVwiIHNyYz1cIiR7bW9kZWwuZ2V0Q292ZXIoMTUwKS5ocmVmfVwiPiAke2l0ZW0uZWRpdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICBgKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoJy5sb2FkLWJ1dHRvbicpLnRleHQodGV4dCgnbWFnYXppbmVCYWNrSXNzdWVzLmxvYWRNb3JlJykpO1xuXG4gICAgICAgICAgICAgICAgaWYocmVzLmJvZHkubGlua3MubmV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICQoJy5sb2FkLWJ1dHRvbicpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB3aW5kb3cuTG9nZ2VyLmxvZygnZXJyb3InLCAnRmFpbGVkIHRvIHNob3cgcHJldmlvdXMgaXNzdWVzJywge21lc3NhZ2U6IGVycm9yLnN0YXR1c1RleHQgfHwgZXJyb3J9KTtcbiAgICAgICAgICAgICQoJy5sb2FkLWJ1dHRvbicpLnRleHQodGV4dCgnbWFnYXppbmVCYWNrSXNzdWVzLnRyeUFnYWluJykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRSZWNlbnRJc3N1ZXMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIHVybDogd2luZG93LnVybCh3aW5kb3cucm91dGVzLnJlc3QubWVkaWEucmVjZW50SXNzdWVzLCB7aWQ6IHRoaXMudGl0bGVNb2RlbC5hdHRyaWJ1dGVzLnBhcmVudE1hZ2F6aW5lVGl0bGVJZH0pLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHBhZ2VOdW1iZXI6IHRoaXMucGFnZU51bVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwXG4gICAgICAgIH0pXG4gICAgICAgIC5kb25lKChyZXNwb25zZSkgPT4gcmVzb2x2ZShyZXNwb25zZSkpXG4gICAgICAgIC5mYWlsKCh4aHIsIHN0YXR1cywgZXJyKSA9PiByZWplY3QoZXJyKSkpO1xuICAgIH1cbn1cbiIsImltcG9ydCBUaXRsZSBmcm9tICcuLi9jb21wb25lbnRzL21lZGlhL21vZGVscy9UaXRsZSc7XG5pbXBvcnQgVGl0bGVDb2xsZWN0aW9uIGZyb20gJy4uL2NvbXBvbmVudHMvbWVkaWEvbW9kZWxzL1RpdGxlQ29sbGVjdGlvbic7XG5cbi8vIFRoaXMgaXMgYSByZXBsYWNlbWVudCBmb3IgUGF0cm9uTWVkaWFJdGVtc01vZGVsIChlY21hc2NyaXB0XFxtb2RlbHNcXHBhdHJvbl9tZWRpYV9pdGVtcy5qcylcbi8vIFdlIHNob3VsZCBncmFkdWFsbHkgdHJhbnNpdGlvbiB0byB1c2luZyB0aGlzIGFzIHRpbWUgcGVybWl0cyBhbmQgd2UgY2FuIHRha2UgdGhlIHRpbWUgdG8gdmFsaWRhdGUgZnVudGlvbmFsaXR5XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXRyb25UaXRsZVN0YXR1cyBleHRlbmRzIEJhY2tib25lLk1vZGVsIHtcbiAgICBnZXQgdXJsKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhSW5mbyk7XG4gICAgfVxuXG4gICAgZmV0Y2hUaXRsZVN0YXR1cyh0aXRsZUNvbGxlY3Rpb24sIHN0YXR1c1R5cGVzID0gbnVsbCkge1xuICAgICAgICBsZXQgdGl0bGVBcnJheSA9IHRpdGxlQ29sbGVjdGlvbi5tb2RlbHMgfHwgdGl0bGVDb2xsZWN0aW9uIHx8IFtdO1xuXG4gICAgICAgIGlmICh0aXRsZUFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRpdGxlSWRzID0gXy5tYXAoXyh0aXRsZUFycmF5KS5wbHVjaygnaWQnKSwgTnVtYmVyKTtcblxuICAgICAgICB0aGlzLnJlcXVlc3QgPSB0aGlzLmZldGNoKHtcbiAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHsgdGl0bGVJZHMsIHN0YXR1c1R5cGVzIH0pLFxuICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxuICAgICAgICAgICAgY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdDtcbiAgICB9XG5cbiAgICAvKiogQHBhcmFtIHtUaXRsZX0gdGl0bGUgKi9cbiAgICB1cGRhdGVUaXRsZVN0YXRlKHRpdGxlKSB7XG4gICAgICAgIHRpdGxlLnVwZGF0ZVBhdHJvblN0YXRlKHRoaXMuYXR0cmlidXRlcyk7XG4gICAgfVxuXG4gICAgZ2V0IHRpdGxlSWRzKCkge1xuICAgICAgICByZXR1cm4gXy51bmlvbihcbiAgICAgICAgICAgIHRoaXMuZ2V0KCdvblJlYWRpbmdIaXN0b3J5JyksXG4gICAgICAgICAgICBfLmtleXModGhpcy5nZXQoJ3N0YXJSYXRpbmdzJykpLFxuICAgICAgICAgICAgdGhpcy5nZXQoJ29uQ2hlY2tvdXRzJyksXG4gICAgICAgICAgICB0aGlzLmdldCgnb25Ib2xkcycpLFxuICAgICAgICAgICAgdGhpcy5nZXQoJ29uV2lzaGxpc3QnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAcGFyYW0ge1RpdGxlQ29sbGVjdGlvbn0gdGl0bGVDb2xsZWN0aW9uICovXG4gICAgdXBkYXRlVGl0bGVDb2xsZWN0aW9uU3RhdGUodGl0bGVDb2xsZWN0aW9uKSB7XG4gICAgICAgIC8vIHdlIHByb3ZpZGUgYW4gZW1wdHkgYXJyYXkgZm9yIGFueSBzdGF0dXMgYXR0cmlidXRlcyB0aGF0IHdlcmUgbm90IGZldGNoZWRcbiAgICAgICAgLy8gaW4gb3JkZXIgdG8gYXZvaWQgYnJlYWtpbmcgYW55dGhpbmcgZG93bnN0cmVhbVxuICAgICAgICB0aGlzLnN0dWJBdHRyaWJ1dGVzKCk7XG4gICAgICAgIHRoaXMudGl0bGVJZHMuZm9yRWFjaCgodGl0bGVJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSB0aXRsZUNvbGxlY3Rpb24uZmluZFdoZXJlKHsgaWQ6IHRpdGxlSWQgfSk7XG5cbiAgICAgICAgICAgIGlmIChtb2RlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGl0bGVTdGF0ZShtb2RlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0dWJBdHRyaWJ1dGVzKCkge1xuICAgICAgICBpZiAoIXRoaXMuZ2V0KCdvblJlYWRpbmdIaXN0b3J5JykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdvblJlYWRpbmdIaXN0b3J5JywgW10pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5nZXQoJ3N0YXJSYXRpbmdzJykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdzdGFyUmF0aW5ncycsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ2V0KCdvbkNoZWNrb3V0cycpKSB7XG4gICAgICAgICAgICB0aGlzLnNldCgnb25DaGVja291dHMnLCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmdldCgnb25Ib2xkcycpKSB7XG4gICAgICAgICAgICB0aGlzLnNldCgnb25Ib2xkcycsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ2V0KCdvbldpc2hsaXN0JykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdvbldpc2hsaXN0JywgW10pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8gaW1wb3J0IHdoZW4gd2UgbW92ZSBtb3JlIHRvIG1vZHVsZXNcbmV4cG9ydCBkZWZhdWx0IHdpbmRvdy5CYWNrYm9uZS5Nb2RlbDtcbiIsImltcG9ydCBCYXNlTW9kZWwgZnJvbSAnLi4vbW9kZWxzL2Jhc2UnO1xuXG5jb25zdCBQYXRyb25NZWRpYUl0ZW1zTW9kZWwgPSBCYXNlTW9kZWwuZXh0ZW5kKHtcbiAgICB1cmwoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMubWVkaWFJbmZvKTtcbiAgICB9LFxuXG4gICAgaW5pdGlhbGl6ZSh7dGl0bGVzfSkge1xuICAgICAgICB0aGlzLm1lZGlhSXRlbXMgPSB0aXRsZXMgfHwgd2luZG93Lk92ZXJEcml2ZS50aXRsZUNvbGxlY3Rpb24gfHwge307XG4gICAgICAgIHRoaXMuaXRlbXNPblBhZ2UgPSBfLm1hcChfLnBsdWNrKHRoaXMubWVkaWFJdGVtcywgJ2lkJyksIE51bWJlcik7XG4gICAgfSxcblxuICAgIGluaXRpYWxGZXRjaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVkaWFJdGVtcy5sZW5ndGhcbiAgICAgICAgICAgID8gdGhpcy5mZXRjaCh7XG4gICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoe3RpdGxlSWRzOiB0aGlzLml0ZW1zT25QYWdlfSksXG4gICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLCBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsnY3NyZi10b2tlbic6ICQoJyNjc3JmJykudmFsKCkgfHwgT3ZlckRyaXZlLl9jc3JmfX0pXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFBhdHJvbk1lZGlhSXRlbXNNb2RlbDtcbiIsImltcG9ydCBjcmVhdGVDb21wb25lbnQgZnJvbSAnLi4vY29tcG9uZW50cy9wcmVtaXVtX3Jldmlld3MvbWFpbi5qcyc7XG5pbXBvcnQgY3JlYXRlRGV0YWlsc0NvdmVySW1hZ2VDb21wb25lbnQgZnJvbSAnLi4vY29tcG9uZW50cy9kZXRhaWxzX2NvdmVyX2ltYWdlL21haW4uanMnO1xuaW1wb3J0IERldGFpbHNSZWxhdGVkVGl0bGVzVmlldyBmcm9tICcuLi9jb21wb25lbnRzL2RldGFpbHNfcmVsYXRlZF90aXRsZXMvRGV0YWlsc1JlbGF0ZWRUaXRsZXNWaWV3JztcbmltcG9ydCBIYXNoTWFuYWdlciBmcm9tICcuLi9jb21wb25lbnRzL2NvbW1vbi9IYXNoTWFuYWdlcic7XG5pbXBvcnQgUGF0cm9uTWVkaWFJdGVtc01vZGVsIGZyb20gJy4uL21vZGVscy9wYXRyb25fbWVkaWFfaXRlbXMnO1xuaW1wb3J0IFByb2Nlc3NGb3J3YXJkZWRBY3Rpb24gZnJvbSAnLi4vdXRpbC90aXRsZS1hY3Rpb25zL3Byb2Nlc3NGb3J3YXJkZWRBY3Rpb24nO1xuaW1wb3J0IFN0YXJSYXRpbmcgZnJvbSAnLi4vY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm8vU3RhclJhdGluZyc7XG5pbXBvcnQgVGl0bGVTZXJpZXMgZnJvbSAnLi4vY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm8vVGl0bGVTZXJpZXMnO1xuaW1wb3J0IFRpdGxlQWN0aW9uQnV0dG9uIGZyb20gJy4uL2NvbXBvbmVudHMvbWVkaWEvVGl0bGVBY3Rpb25CdXR0b24nO1xuaW1wb3J0IFRpdGxlQWN0aW9ucyBmcm9tICcuLi90aXRsZS1hY3Rpb25zL1RpdGxlQWN0aW9ucyc7XG5pbXBvcnQgVGl0bGUgZnJvbSAnLi4vY29tcG9uZW50cy9tZWRpYS9tb2RlbHMvVGl0bGUnO1xuaW1wb3J0IFdpc2hMaXN0QnV0dG9uIGZyb20gJy4uL2NvbXBvbmVudHMvbWVkaWEvV2lzaExpc3RCdXR0b24nO1xuaW1wb3J0IFJlYWRpbmdIaXN0b3J5QnV0dG9uIGZyb20gJy4uL2NvbXBvbmVudHMvbWVkaWEvUmVhZGluZ0hpc3RvcnlCdXR0b24nO1xuaW1wb3J0IENvcGllc0F2YWlsYWJsZSBmcm9tICcuLi9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9Db3BpZXNBdmFpbGFibGUnO1xuaW1wb3J0IEx1Y2t5RGF5SG9sZHMgZnJvbSAnLi4vY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm8vTHVja3lEYXlIb2xkcyc7XG5pbXBvcnQgQ29sbGVjdGlvbkRlZmluaXRpb24gZnJvbSAnLi4vY29tcG9uZW50cy9jb2xsZWN0aW9uX2NhbXBhaWduX3BhZ2UvQ29sbGVjdGlvbkRlZmluaXRpb24nO1xuaW1wb3J0IFJlY2VudElzc3Vlc0RyYXdlciBmcm9tICcuLi9jb21wb25lbnRzL3JlY2VudF9pc3N1ZXNfZHJhd2VyL1JlY2VudElzc3Vlc0RyYXdlcic7XG5pbXBvcnQgTm90Q29tcGF0aWJsZUZvcm1hdCBmcm9tICcuLi9jb21wb25lbnRzL25vdF9jb21wYXRpYmxlX2Zvcm1hdC9ub3QtY29tcGF0aWJsZS1mb3JtYXQtdmlldy5qcyc7XG5cbmNvbnN0IGZldGNoQ29sbGVjdGlvbkJ5SWQgPSAoY29sbGVjdGlvbklkKSA9PlxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogd2luZG93LnVybCh3aW5kb3cucm91dGVzLnJlc3QuY29sbGVjdGlvbnMuZ2V0QnlJZCwge1xuICAgICAgICAgICAgICAgIGlkOiBjb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5kb25lKChyZXNwb25zZSkgPT4gcmVzb2x2ZShuZXcgQ29sbGVjdGlvbkRlZmluaXRpb24ocmVzcG9uc2UpKSlcbiAgICAgICAgICAgIC5mYWlsKChqcUhYUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pID0+IHJlc29sdmUoKSk7IC8vIExIVE5HLTMwMTggWWVzLCB3ZSBhcmUgaGlkaW5nIGVycm9ycyBoZXJlLCB3ZSBkb250IGNhcmUgaWYgYSB0cmFzaCBJRCBpcyBwYXNzZWRcbiAgICB9KTtcblxubGV0IGlzVW5zdXBwb3J0ZWRUb2xpbm9Gb3JtYXQgPSAoZm9ybWF0KSA9PiB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBsZXQgZm9ybWF0UGFydHMgPSBmb3JtYXQuc3BsaXQoJy0nKTtcbiAgICByZXR1cm4gZm9ybWF0LmluZGV4T2YoJ2Vib29rJykgPiAtMSAmJiBmb3JtYXRQYXJ0cy5sZW5ndGggPj0gMlxuICAgICAgICA/IFsna29ibycsICdtZWRpYScsICdraW5kbGUnXS5pbmNsdWRlcyhmb3JtYXRQYXJ0c1sxXSlcbiAgICAgICAgOiB0cnVlO1xufTtcblxuJCgoKSA9PiB7XG4gICAgbGV0IGNvbGxlY3Rpb25GZXRjaCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgY29uc3QgeyBjb2xsZWN0aW9uSWQgfSA9IHdpbmRvdy5PdmVyRHJpdmU7XG4gICAgaWYgKGNvbGxlY3Rpb25JZCkge1xuICAgICAgICBjb2xsZWN0aW9uRmV0Y2ggPSBmZXRjaENvbGxlY3Rpb25CeUlkKGNvbGxlY3Rpb25JZCk7XG4gICAgfVxuXG4gICAgY29sbGVjdGlvbkZldGNoLnRoZW4oKGNvbGxlY3Rpb25EZWZpbml0aW9uKSA9PiB7XG4gICAgICAgIGxldCB0aXRsZXMgPSB3aW5kb3cuT3ZlckRyaXZlLnRpdGxlQ29sbGVjdGlvbjtcblxuICAgICAgICBjb25zdCBtZWRpYU1vZGVsID0gbmV3IFRpdGxlKHdpbmRvdy5PdmVyRHJpdmUudGl0bGVDb2xsZWN0aW9uKTtcbiAgICAgICAgd2luZG93LnRpdGxlID0gbWVkaWFNb2RlbDtcblxuICAgICAgICBsZXQgc3RyZWFtaW5nVmlkZW9Gb3JtYXRzID0gXy5maW5kKFxuICAgICAgICAgICAgbWVkaWFNb2RlbC5nZXQoJ2Zvcm1hdHMnKSxcbiAgICAgICAgICAgIChmb3JtYXQpID0+IGZvcm1hdC5pZCA9PT0gJ3ZpZGVvLXN0cmVhbWluZydcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgaXNEUk0gPSBmYWxzZTtcblxuICAgICAgICBfLmVhY2gobWVkaWFNb2RlbC5nZXQoJ2Zvcm1hdHMnKSwgKGZvcm1hdCkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIF8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0LnJpZ2h0cyxcbiAgICAgICAgICAgICAgICAgICAgKHJpZ2h0KSA9PiByaWdodC5kcm1UeXBlLnRvTG93ZXJDYXNlKCkgPT09ICdoZWF2eSdcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpc0RSTSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzdHJlYW1pbmdWaWRlb0Zvcm1hdHMgIT09IHVuZGVmaW5lZCAmJiBpc0RSTSkge1xuICAgICAgICAgICAgbGV0IGlzQ2hyb21lYm9vayA9ICEhd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0NyT1MvKTtcbiAgICAgICAgICAgIGxldCBpbkFwcCA9IHdpbmRvdy5PdmVyRHJpdmUuaW5BcHA7XG4gICAgICAgICAgICBpZiAoaXNDaHJvbWVib29rICYmIGluQXBwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRvYXN0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3Rlci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnRleHQoJ2FjY291bnRMb2Fucy51bnN1cHBvcnRlZEZvcm1hdFZpZGVvSHRtbCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0YXRlVXBkYXRlUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgIC8vIFRPRE86IERldGVybWluZSBpZiB0aGUgcGF0cm9uIGVtYWlsIGNhbiBiZSBzdG9yZWQgaW4gYSBjb29raWUgb3Igc29tZXRoaW5nXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHdpbmRvdy5PdmVyRHJpdmUuaXNBdXRoZW50aWNhdGVkICYmXG4gICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLmhhc0xpbmtlZENhcmRzXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcGF0cm9uTWVkaWEgPSBuZXcgUGF0cm9uTWVkaWFJdGVtc01vZGVsKHtcbiAgICAgICAgICAgICAgICB0aXRsZXM6IFttZWRpYU1vZGVsLmF0dHJpYnV0ZXNdLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHN0YXRlVXBkYXRlUHJvbWlzZSA9IHBhdHJvbk1lZGlhXG4gICAgICAgICAgICAgICAgLmluaXRpYWxGZXRjaCgpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHBhdHJvbkRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgXy5lYWNoKF8uZmxhdHRlbihfLnZhbHVlcyhwYXRyb25EYXRhKSksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZWRpYU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFNb2RlbC51cGRhdGVQYXRyb25TdGF0ZShwYXRyb25EYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZVVwZGF0ZVByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgd2luZG93Lk92ZXJEcml2ZS5pc0F1dGhlbnRpY2F0ZWQgJiZcbiAgICAgICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLmhhc0xpbmtlZENhcmRzICYmXG4gICAgICAgICAgICAgICAgSGFzaE1hbmFnZXIuZ2V0KCdhY3Rpb24nKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcndhcmRlZEFjdGlvbiA9IG5ldyBQcm9jZXNzRm9yd2FyZGVkQWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICB0aXRsZXMsXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5nbG9iYWxFdmVudHMsXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhTW9kZWxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZvcndhcmRlZEFjdGlvbi5leGVjdXRlQWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgd2luZG93LmZvcndhcmRBY3Rpb24gPSBmb3J3YXJkZWRBY3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCB0aXRsZUFjdGlvbnMgPSBuZXcgVGl0bGVBY3Rpb25zKHtcbiAgICAgICAgICAgIGJ1czogd2luZG93Lmdsb2JhbEV2ZW50cyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uRGVmaW5pdGlvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHRpdGxlQWN0aW9uQnV0dG9uID0gbmV3IFRpdGxlQWN0aW9uQnV0dG9uKHtcbiAgICAgICAgICAgIG1vZGVsOiBtZWRpYU1vZGVsLFxuICAgICAgICAgICAgZWw6ICcuVGl0bGVBY3Rpb24nLFxuICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBoaWRlRXh0cmFJbmZvID1cbiAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ21hZ2F6aW5lLXJvbGx1cCcpICYmXG4gICAgICAgICAgICBtZWRpYU1vZGVsLmlzTWFnYXppbmU7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ3NhbXBsZU9ubHlNb2RlJykgJiZcbiAgICAgICAgICAgICFoaWRlRXh0cmFJbmZvICYmXG4gICAgICAgICAgICAhd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZGlzYWJsZVdpc2hsaXN0JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCB3aXNoTGlzdEJ1dHRvbiA9IG5ldyBXaXNoTGlzdEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgbW9kZWw6IG1lZGlhTW9kZWwsXG4gICAgICAgICAgICAgICAgZWw6ICcud2lzaGxpc3QtY29udGFpbmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnd2l0aC10ZXh0JyxcbiAgICAgICAgICAgICAgICBjb250cmFzdDogJ2FsdGVybmF0ZScsXG4gICAgICAgICAgICB9KS5yZW5kZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ3NhbXBsZU9ubHlNb2RlJykgJiZcbiAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2RldGFpbHMtcGFnZS1saWJieS1idXR0b24nKSAmJlxuICAgICAgICAgICAgd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgncHJvbW90ZUxpYmJ5JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgbGliYnlMaW5rID1cbiAgICAgICAgICAgICAgICAnaHR0cHM6Ly93d3cub3ZlcmRyaXZlLmNvbS9hcHBzL2xpYmJ5P3V0bV9vcmlnaW49bGlnaHRuaW5nJnV0bV9wYWdlX2dlbnJlPXNhbXBsZV9tb2RlJnV0bV9saXN0PWdldF9saWJieSZ1dG1fbWVkaXVtPWxpZ2h0bmluZ19iYW5uZXImdXRtX3NvdXJjZT1saWdodG5pbmcmdXRtX2NhbXBhaWduPXNhbXBsZV9tb2RlJnV0bV9jb250ZW50PWdldGxpYmJ5JztcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLmRldmljZVR5cGUgJiZcbiAgICAgICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLmRldmljZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2lvcydcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxpYmJ5TGluayA9XG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL2l0dW5lcy5hcHBsZS5jb20vdXMvYXBwL2xpYmJ5LWJ5LW92ZXJkcml2ZS1sYWJzL2lkMTA3NjQwMjYwNj9wdD0yMTE0ODMmY3Q9bGlnaHRuaW5nJm10PTgmdXRtX21lZGl1bT1saWdodG5pbmdfYmFubmVyJnV0bV9zb3VyY2U9bGlnaHRuaW5nJnV0bV9jYW1wYWlnbj1zYW1wbGVfbW9kZSZ1dG1fY29udGVudD1nZXRsaWJieSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHdpbmRvdy5PdmVyRHJpdmUuZGV2aWNlVHlwZSAmJlxuICAgICAgICAgICAgICAgIHdpbmRvdy5PdmVyRHJpdmUuZGV2aWNlVHlwZS50b0xvd2VyQ2FzZSgpID09PSAnYW5kcm9pZCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxpYmJ5TGluayA9XG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL3BsYXkuZ29vZ2xlLmNvbS9zdG9yZS9hcHBzL2RldGFpbHM/aWQ9Y29tLm92ZXJkcml2ZS5tb2JpbGUuYW5kcm9pZC5saWJieSZyZWZlcnJlcj11dG1fc291cmNlJTNEbGlnaHRuaW5nJnV0bV9tZWRpdW09bGlnaHRuaW5nX2Jhbm5lciZ1dG1fc291cmNlPWxpZ2h0bmluZyZ1dG1fY2FtcGFpZ249c2FtcGxlX21vZGUmdXRtX2NvbnRlbnQ9Z2V0bGliYnknO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAkKCcuR2V0TGliYnktYnV0dG9uQ29udGFpbmVyJykuYXBwZW5kKGBcbiAgICAgICAgICAgICAgICA8YSBpZD1cIkdldExpYmJ5TGlua1wiXG4gICAgICAgICAgICAgICAgICAgaHJlZj1cIiR7bGliYnlMaW5rfVwiXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCIke1xuICAgICAgICAgICAgICAgICAgICAgICBtZWRpYU1vZGVsLmlzTWFnYXppbmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFNb2RlbC5nZXQoJ3JlY2VudElzc3VlcycpLnRvdGFsSXRlbXMgPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdtdWx0aXBsZS1tYWdhemluZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgICAgfSBHZXRMaWJieUxpbmsgVGl0bGVBY3Rpb25CdXR0b24gYnV0dG9uIHJhZGl1cyBpcy1idXR0b24gc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vcmVmZXJyZXJcIj4gJHt3aW5kb3cudGV4dCgnZ2V0TGliYnknKX0gPC9hPmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFoaWRlRXh0cmFJbmZvKSB7XG4gICAgICAgICAgICBsZXQgc3RhclJhdGluZyA9IG5ldyBTdGFyUmF0aW5nKHtcbiAgICAgICAgICAgICAgICBtb2RlbDogbWVkaWFNb2RlbCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZWRpdGFibGUnLFxuICAgICAgICAgICAgfSkucmVuZGVyKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhbWVkaWFNb2RlbC5nZXQoJ2lzUHJlUmVsZWFzZVRpdGxlJykgJiZcbiAgICAgICAgICAgICAgICB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdzaG93LXN0YXItcmF0aW5ncycpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAkKCcuanMtc3RhclJhdGluZ3NDb250YWluZXInKS5hcHBlbmQoc3RhclJhdGluZy4kZWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKCcucHJlcmVsZWFzZS1kYXRlJylcbiAgICAgICAgICAgICAgICAgICAgLmZpcnN0KClcbiAgICAgICAgICAgICAgICAgICAgLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cudGV4dCgnYWNjb3VudEhvbGRzLnByZXJlbGVhc2VFeHBlY3RlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBtZWRpYU1vZGVsLmdldCgnZXN0aW1hdGVkUmVsZWFzZURhdGUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWFkaW5nSGlzdG9yeUJ1dHRvbiA9IG5ldyBSZWFkaW5nSGlzdG9yeUJ1dHRvbih7XG4gICAgICAgICAgICBtb2RlbDogbWVkaWFNb2RlbCxcbiAgICAgICAgICAgIGVsOiAnLlJlYWRpbmdIaXN0b3J5QnV0dG9uLWNvbnRhaW5lcicsXG4gICAgICAgIH0pLnJlbmRlcigpO1xuXG4gICAgICAgIGxldCBzZXJpZXMgPSBuZXcgVGl0bGVTZXJpZXMoe1xuICAgICAgICAgICAgbW9kZWw6IG1lZGlhTW9kZWwsXG4gICAgICAgICAgICBlbDogJy5UaXRsZVNlcmllcycsXG4gICAgICAgIH0pLnJlbmRlcigpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJykgfHxcbiAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2NvbnRlbnQtaG9sZHMnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBlbEZvckNvcGllc0F2YWlsYWJsZSA9ICcuanMtY29waWVzQXZhaWxhYmxlQ29udGFpbmVyJztcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG1lZGlhTW9kZWwuYWxsQ29waWVzQXJlTHVja3lEYXkgJiZcbiAgICAgICAgICAgICAgICBtZWRpYU1vZGVsLmdldCgndGl0bGVTdGF0ZScpID09PSAndW5hdmFpbGFibGUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZXQgY29waWVzQXZhaWxhYmxlTHVja3lEYXkgPSBuZXcgQ29waWVzQXZhaWxhYmxlKHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IG1lZGlhTW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIGVsOiAnLmpzLWNvcGllc0F2YWlsYWJsZUNvbnRhaW5lci1MdWNreURheScsXG4gICAgICAgICAgICAgICAgICAgIHdpdGhJY29uczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGxldCBsdWNreURheUhvbGRzQmxvYiA9IG5ldyBMdWNreURheUhvbGRzKHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IG1lZGlhTW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIGVsOiAnLkx1Y2t5RGF5Q2FudFBsYWNlSG9sZENvbnRhaW5lcicsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBlbEZvckNvcGllc0F2YWlsYWJsZSA9XG4gICAgICAgICAgICAgICAgICAgICcuanMtY29waWVzQXZhaWxhYmxlQ29udGFpbmVyLnNob3ctZm9yLTYwMC11cCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjb3BpZXNBdmFpbGFibGUgPSBuZXcgQ29waWVzQXZhaWxhYmxlKHtcbiAgICAgICAgICAgICAgICBtb2RlbDogbWVkaWFNb2RlbCxcbiAgICAgICAgICAgICAgICBlbDogZWxGb3JDb3BpZXNBdmFpbGFibGUsXG4gICAgICAgICAgICAgICAgd2l0aEljb25zOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZm9ybWF0cyA9IG1lZGlhTW9kZWwuZ2V0KCdmb3JtYXRzJyk7XG4gICAgICAgIGxldCB0b2xpbm9BY2NlcHRlZEZvcm1hdHMgPSBmb3JtYXRzLmZpbHRlcihcbiAgICAgICAgICAgIChpdGVtKSA9PiAhaXNVbnN1cHBvcnRlZFRvbGlub0Zvcm1hdChpdGVtLmlkKVxuICAgICAgICApO1xuICAgICAgICBsZXQgaGFzQWNjZXB0ZWRUb2xpbm9Gb3JtYXQgPSB0b2xpbm9BY2NlcHRlZEZvcm1hdHMubGVuZ3RoID4gMDtcblxuICAgICAgICBpZiAod2luZG93Lk92ZXJEcml2ZS5pc1RvbGlub0RldmljZSAmJiAhaGFzQWNjZXB0ZWRUb2xpbm9Gb3JtYXQpIHtcbiAgICAgICAgICAgIGxldCBub3RDb21wYXRpYmxlRm9ybWF0ID0gbmV3IE5vdENvbXBhdGlibGVGb3JtYXQoe1xuICAgICAgICAgICAgICAgIG1vZGVsOiBtZWRpYU1vZGVsLFxuICAgICAgICAgICAgICAgIGVsOiAnLnRvYXN0LXBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lZGlhTW9kZWwuZ2V0KCdhd2FyZHMnKSkge1xuICAgICAgICAgICAgbGV0IHNvcnRlZEF3YXJkcyA9IG1lZGlhTW9kZWxcbiAgICAgICAgICAgICAgICAuZ2V0KCdhd2FyZHMnKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgICBhLmRlc2NyaXB0aW9uID4gYi5kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGEuZGVzY3JpcHRpb24gPCBiLmRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICA6IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IGF3YXJkTGlua3MgPSAnJztcbiAgICAgICAgICAgIHNvcnRlZEF3YXJkcy5mb3JFYWNoKChhd2FyZCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YXJkTGlua3MgKz0gYDxsaT48YSBocmVmPVwiL3NlYXJjaC90aXRsZT9hd2FyZHM9JHthd2FyZC5pZH0mc29ydEJ5PW5ld2x5YWRkZWRcIiBjbGFzcz1cIlRpdGxlRGV0YWlscy1MaW5rXCI+PHN0cm9uZz4ke2F3YXJkLmRlc2NyaXB0aW9ufTwvc3Ryb25nPjxpIGNsYXNzPVwiaWNvbi1mb3J3YXJkLWFycm93IFRpdGxlRGV0YWlscy1wYW5lbEFycm93IHUtcHVsbFJpZ2h0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT48L2xpPmA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICQoJy5UaXRsZURldGFpbHMtYXdhcmRzTGlzdCcpLmFwcGVuZChhd2FyZExpbmtzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBMaXN0ZW4gZm9yIG1lZGlhIGJ1dHRvbiBhY3Rpb25cbiAgICAgICAgbWVkaWFNb2RlbC5vbigndGl0bGU6YWN0aW9uJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHRpdGxlQWN0aW9ucy5wZXJmb3JtKGRhdGEuYWN0aW9uLCBkYXRhLm1vZGVsKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVE9ETzogUmVuYW1lIHRoaXMgZm9yIHByZW1pdW0gcmV2aWV3c1xuICAgICAgICBjb25zdCBlbCA9ICQoJy5jb250YWluZXInKTtcbiAgICAgICAgY3JlYXRlQ29tcG9uZW50KHsgZWwgfSk7XG5cbiAgICAgICAgY29uc3QgY292ZXJJbWFnZSA9ICQoJy5qcy1kZXRhaWxzLWNvdmVyLWltYWdlJylbMF07XG4gICAgICAgIGNyZWF0ZURldGFpbHNDb3ZlckltYWdlQ29tcG9uZW50KHsgZWw6IGNvdmVySW1hZ2UgfSk7XG5cbiAgICAgICAgY29uc3QgcmVsYXRlZFRpdGxlc0NvbnRhaW5lciA9ICQoJy5qcy1yZWxhdGVkVGl0bGVzQ29udGFpbmVyJyk7XG4gICAgICAgIG5ldyBEZXRhaWxzUmVsYXRlZFRpdGxlc1ZpZXcoe1xuICAgICAgICAgICAgZWw6IHJlbGF0ZWRUaXRsZXNDb250YWluZXIsXG4gICAgICAgICAgICBidXM6IHdpbmRvdy5nbG9iYWxFdmVudHMsXG4gICAgICAgICAgICB0aXRsZU1vZGVsOiBtZWRpYU1vZGVsLFxuICAgICAgICB9KTtcblxuICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLmdhRXZlbnRMb2dnZXIucHVzaEV2ZW50KFxuICAgICAgICAgICAgeyB0aXRsZU1vZGVsOiBtZWRpYU1vZGVsIH0sXG4gICAgICAgICAgICAnZGV0YWlsc1BhZ2UnXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnbWFnYXppbmUtcm9sbHVwJykgJiZcbiAgICAgICAgICAgIG1lZGlhTW9kZWwuaXNNYWdhemluZVxuICAgICAgICApIHtcbiAgICAgICAgICAgIG5ldyBSZWNlbnRJc3N1ZXNEcmF3ZXIoe1xuICAgICAgICAgICAgICAgIGVsOiAkKCcuaXNzdWUtbGlzdCcpLFxuICAgICAgICAgICAgICAgIHRpdGxlTW9kZWw6IG1lZGlhTW9kZWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7XG4iLCJjb25zdCB7IGh0bWwgfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4gYFxuPGRpdiBjbGFzcz1cIkxvYWRlciBqcy1lczZsb2FkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiTG9hZGVyLWRpc3BsYXlcIj48L2Rpdj48YnI+XG4gICAgPHNwYW4gY2xhc3M9XCJMb2FkZXItdGV4dFwiPiR7aHRtbCgnbG9hZGluZycpfTwvc3Bhbj5cbjwvZGl2PlxuYDtcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlQWN0aW9ucyB7XG4gICAgY29uc3RydWN0b3IoeyBidXMsIGNvbnRleHQgfSkge1xuICAgICAgICB0aGlzLmJ1cyA9IGJ1cztcblxuICAgICAgICB0aGlzLmNvbnRleHQgPSB7XG4gICAgICAgICAgICByb29tOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb2xsZWN0aW9uRGVmaW5pdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuXG4gICAgICAgIF8uZXh0ZW5kKHRoaXMuY29udGV4dCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcGVyZm9ybShhY3Rpb24sIHRpdGxlTW9kZWwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzW2BfJHthY3Rpb259YF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXNbYF8ke2FjdGlvbn1gXSh0aXRsZU1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9ib3Jyb3codGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpib3Jyb3cnLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9ob2xkKHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6aG9sZCcsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX3dpc2godGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTp3aXNobGlzdCcsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX25vb2sodGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpub29rJywgdGl0bGVNb2RlbCwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBfcmF0aW5nKHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6cmF0aW5nJywgdGl0bGVNb2RlbCwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBfaGlzdG9yeSh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOmhpc3RvcnknLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9kb3dubG9hZCh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOmRvd25sb2FkJywgdGl0bGVNb2RlbCwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBfcHJldmlldyh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOnByZXZpZXcnLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9yZW5ldyh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOnJlbmV3JywgdGl0bGVNb2RlbCwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBfcmVxdWVzdEFnYWluKHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6cmVxdWVzdEFnYWluJywgdGl0bGVNb2RlbCwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBzZXRDb250ZXh0Um9vbShyb29tKSB7XG4gICAgICAgIGlmIChfKHJvb20pLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY29udGV4dC5yb29tO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnJvb20gPSByb29tO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgc2V0Q29udGV4dENvbGxlY3Rpb24odGl0bGVDb2xsZWN0aW9uKSB7XG4gICAgICAgIGlmIChfKHRpdGxlQ29sbGVjdGlvbikuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jb250ZXh0LnRpdGxlQ29sbGVjdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC50aXRsZUNvbGxlY3Rpb24gPSB0aXRsZUNvbGxlY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG4iLCJjbGFzcyBUaXRsZVN0YXRlIHtcbiAgICBzdGF0aWMgZ2V0U3RhdGUobWVkaWEsIHBhdHJvbkl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVNYW5hZ2VyID0gd2luZG93LmZlYXR1cmVNYW5hZ2VyO1xuXG4gICAgICAgIGlmIChmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ3NhbXBsZU9ubHlNb2RlJykpIHtcbiAgICAgICAgICAgIHJldHVybiAncHJldmlldyc7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWVkaWFJZCA9IG1lZGlhLmlkO1xuXG4gICAgICAgIGxldCBpc09uSG9sZCA9IHBhdHJvbkl0ZW1zICYmIHBhdHJvbkl0ZW1zLm9uSG9sZHMuaW5kZXhPZihtZWRpYUlkKSA+IC0xO1xuICAgICAgICBsZXQgaXNPbkNoZWNrb3V0cyA9XG4gICAgICAgICAgICBwYXRyb25JdGVtcyAmJiBwYXRyb25JdGVtcy5vbkNoZWNrb3V0cy5pbmRleE9mKG1lZGlhSWQpID4gLTE7XG4gICAgICAgIGxldCBpc0F2YWlsYWJsZSA9XG4gICAgICAgICAgICBtZWRpYS5pc0F2YWlsYWJsZSB8fFxuICAgICAgICAgICAgKGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnTHVja3lEYXknKSAmJlxuICAgICAgICAgICAgICAgIG1lZGlhLmx1Y2t5RGF5QXZhaWxhYmxlQ29waWVzID4gMCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgL2FjY291bnRcXC9sb2Fucy8udGVzdCh3aW5kb3cubG9jYXRpb24uaHJlZikgJiZcbiAgICAgICAgICAgIG1lZGlhLmlzUmVuZXdhYmxlICYmXG4gICAgICAgICAgICBmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2NvbnRlbnQtaG9sZHMnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChpc09uSG9sZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmVxdWVzdGVkJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgbWVkaWEuaG9sZHNDb3VudCA8PSAwICYmXG4gICAgICAgICAgICAgICAgbWVkaWEub3duZWRDb3BpZXMgPj0gMCAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnTHVja3lEYXknKSAmJlxuICAgICAgICAgICAgICAgICAgICBtZWRpYS5pc0x1Y2t5RGF5Q2hlY2tvdXRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3JlbmV3JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAncmVxdWVzdEFnYWluJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc09uQ2hlY2tvdXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2JvcnJvd2VkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc09uSG9sZCAmJiAhaXNBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiAnb25Ib2xkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0F2YWlsYWJsZSkge1xuICAgICAgICAgICAgaWYgKG1lZGlhLnR5cGUuaWQgPT09ICdwZXJpb2RpY2FscycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ25vb2snO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gJ2JvcnJvdyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWVkaWEuaXNIb2xkYWJsZSAmJiBmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2NvbnRlbnQtaG9sZHMnKSkge1xuICAgICAgICAgICAgcmV0dXJuICdob2xkJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAndW5hdmFpbGFibGUnO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc09uV2lzaGxpc3QobWVkaWEsIHBhdHJvbkl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBwYXRyb25JdGVtcyAmJiBwYXRyb25JdGVtcy5vbldpc2hsaXN0LmluZGV4T2YobWVkaWEuaWQpID4gLTE7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzT25SZWFkaW5nSGlzdG9yeShtZWRpYSwgcGF0cm9uSXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBhdHJvbkl0ZW1zICYmIHBhdHJvbkl0ZW1zLm9uUmVhZGluZ0hpc3RvcnkuaW5kZXhPZihtZWRpYS5pZCkgPiAtMVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHN0YXRpYyBzdGFyUmF0aW5nKG1lZGlhLCBwYXRyb25JdGVtcykge1xuICAgICAgICAvLyBSZXR1cm5zIDAgaWYgbm90IHJhdGVkXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocGF0cm9uSXRlbXMgJiZcbiAgICAgICAgICAgICAgICBwYXRyb25JdGVtcy5zdGFyUmF0aW5ncyAmJlxuICAgICAgICAgICAgICAgIHBhdHJvbkl0ZW1zLnN0YXJSYXRpbmdzW21lZGlhLmlkXSkgfHxcbiAgICAgICAgICAgIDBcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlU3RhdGU7XG4iLCJjb25zdCBrZXlzID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgVEFCOiA5LFxuICAgIEVOVEVSOiAxMyxcbiAgICBMRUZUOiAzNyxcbiAgICBVUDogMzgsXG4gICAgUklHSFQ6IDM5LFxuICAgIERPV046IDQwLFxuICAgIFNQQUNFOiAzMixcbiAgICBFU0M6IDI3XG59KTtcbmV4cG9ydCBkZWZhdWx0IGtleXM7XG4iLCJpbXBvcnQgSGFzaE1hbmFnZXIgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb21tb24vSGFzaE1hbmFnZXInO1xuaW1wb3J0IFRpdGxlIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbWVkaWEvbW9kZWxzL1RpdGxlJztcbmltcG9ydCBUaXRsZUFjdGlvbnMgZnJvbSAnLi4vLi4vdGl0bGUtYWN0aW9ucy9UaXRsZUFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9jZXNzRm9yd2FyZGVkQWN0aW9uIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2xsZWN0aW9uLCBidXMsIG1vZGVsKSB7XG4gICAgICAgIGxldCBoYXNoID0gSGFzaE1hbmFnZXIuZ2V0KCdhY3Rpb24nKVswXTtcbiAgICAgICAgdGhpcy5hY3Rpb25BcnIgPSBoYXNoID8gaGFzaC5zcGxpdCgnficpIDogW107XG4gICAgICAgIHRoaXMuYWN0aW9uID0gdGhpcy5hY3Rpb25BcnJbMF0gfHwgbnVsbDtcbiAgICAgICAgdGhpcy5tZWRpYUlkID0gdGhpcy5hY3Rpb25BcnJbMV0gfHwgbnVsbDtcbiAgICAgICAgdGhpcy5yYXRpbmcgPSB0aGlzLmFjdGlvbkFyclsyXSB8fCAwO1xuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWwgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gY29sbGVjdGlvbi5tb2RlbHM7XG4gICAgICAgIHRoaXMuYnVzID0gYnVzO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGUgdXNlciBmb3J3YXJkZWQgYWN0aW9uXG4gICAgZXhlY3V0ZUFjdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGlvbiB8fCAhdGhpcy5tZWRpYUlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5tb2RlbCB8fFxuICAgICAgICAgICAgKHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5nZXQoJ2lkJykgIT09IHRoaXMubWVkaWFJZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsID0gXy5maW5kKFxuICAgICAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICAobW9kZWwpID0+IG1vZGVsLmlkID09PSB0aGlzLm1lZGlhSWRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGl0bGVBY3Rpb25zID0gbmV3IFRpdGxlQWN0aW9ucyh7IGJ1czogdGhpcy5idXMgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwpIHtcbiAgICAgICAgICAgIC8vIFRpdGxlIG1vZGVsIGlzIG9uIHBhZ2VcbiAgICAgICAgICAgIEhhc2hNYW5hZ2VyLnJlbW92ZSgnYWN0aW9uJyk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNldCgndXNlclN0YXJSYXRpbmcnLCB0aGlzLnJhdGluZyk7XG4gICAgICAgICAgICB0aXRsZUFjdGlvbnMucGVyZm9ybSh0aGlzLmFjdGlvbiwgdGhpcy5tb2RlbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaXRsZSBtb2RlbCBpcyBub3Qgb24gcGFnZSwgZmV0Y2ggYXN5bmNcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IG5ldyBUaXRsZSgpO1xuICAgICAgICAgICAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGl0bGUuZ2V0VGl0bGVBc3luYyh0aGlzLm1lZGlhSWQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsICYmIHRoaXMubW9kZWwuc2V0KCd1c2VyU3RhclJhdGluZycsIHRoaXMucmF0aW5nKTtcbiAgICAgICAgICAgICAgICB0aXRsZUFjdGlvbnMucGVyZm9ybSh0aGlzLmFjdGlvbiwgdGl0bGUpO1xuICAgICAgICAgICAgICAgIEhhc2hNYW5hZ2VyLnJlbW92ZSgnYWN0aW9uJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIGltcG9ydCB3aGVuIHdlIG1vdmUgbW9yZSB0byBtb2R1bGVzXG5jb25zdCBCYWNrYm9uZSA9IHdpbmRvdy5CYWNrYm9uZTtcbmltcG9ydCBMb2FkZXJUZW1wbGF0ZSBmcm9tICcuLi90ZW1wbGF0ZXMvbG9hZGVyLmh0bWwnO1xuXG5jb25zdCBCYXNlVmlldyA9IEJhY2tib25lLlZpZXcuZXh0ZW5kKHtcbiAgICBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdjbG9zZScpO1xuICAgICAgICB0aGlzLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnVuYmluZCgpO1xuICAgICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcoKTtcbiAgICAgICAgLy8gVmlld3Mgc2hvdWxkIGRlZmluZSB0aGlzIGluIHRoZWlyIGV4dGVuZCBkZWNsYXJhdGlvblxuICAgICAgICB0aGlzLm9uQ2xvc2UgJiYgdGhpcy5vbkNsb3NlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBnZXRIdG1sKHsgdGVtcGxhdGVEYXRhIH0gPSB7fSkge1xuICAgICAgICBjb25zdCBnbG9iYWxzID0ge1xuICAgICAgICAgICAgaHRtbDogd2luZG93Lmh0bWwsXG4gICAgICAgICAgICB0ZXh0OiB3aW5kb3cudGV4dCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRlbXBsYXRlRGF0YSB8fCB0aGlzLmdldFRlbXBsYXRlRGF0YSgpO1xuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZShfLmV4dGVuZCh7fSwgZGF0YSwgZ2xvYmFscykpO1xuICAgIH0sXG5cbiAgICBidWlsZEVsZW1lbnQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy4kZWwuaHRtbCh0aGlzLmdldEh0bWwob3B0aW9ucykpO1xuICAgIH0sXG5cbiAgICBkb1JlbmRlcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuYnVpbGRFbGVtZW50KG9wdGlvbnMpO1xuICAgICAgICBpZiAodGhpcy50YXJnZXQgJiYgIXRoaXMuYXR0YWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYmVmb3JlQXR0YWNoICYmIHRoaXMuYmVmb3JlQXR0YWNoKCk7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaCgpO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0YWNoKCkge1xuICAgICAgICBpZiAoISh0aGlzLiR0YXJnZXQgaW5zdGFuY2VvZiBCYWNrYm9uZS4kKSkge1xuICAgICAgICAgICAgdGhpcy4kdGFyZ2V0ID0gQmFja2JvbmUuJCh0aGlzLnRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kdGFyZ2V0LmFwcGVuZCh0aGlzLiRlbCk7XG4gICAgfSxcblxuICAgIHJlbmRlcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuY2xlYXJMb2FkZXIoKTtcblxuICAgICAgICBpZiAodGhpcy5iZWZvcmVSZW5kZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYmVmb3JlUmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb1JlbmRlcihvcHRpb25zKTtcbiAgICAgICAgaWYgKHRoaXMuYWZ0ZXJSZW5kZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYWZ0ZXJSZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgZ2V0VGVtcGxhdGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC50b0pTT04oKSkgfHwge307XG4gICAgfSxcblxuICAgIHJlbmRlckxvYWRlcigpIHtcbiAgICAgICAgY29uc3QgZWxlbSA9ICQodGhpcy50YXJnZXQpLmxlbmd0aCA/ICQodGhpcy50YXJnZXQpIDogdGhpcy4kZWw7XG4gICAgICAgIGVsZW0uZW1wdHkoKS5hcHBlbmQoTG9hZGVyVGVtcGxhdGUoeyBodG1sOiB3aW5kb3cuaHRtbCB9KSk7XG4gICAgfSxcblxuICAgIGNsZWFyTG9hZGVyKCkge1xuICAgICAgICAvLyBDbGVhciBsb2FkZXIgaWYgaXQgZXhpc3RzXG4gICAgICAgIGNvbnN0ICRsb2FkZXIgPSAkKCcuanMtZXM2bG9hZGVyJyk7XG4gICAgICAgIGlmICgkbG9hZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgJGxvYWRlci5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQmFzZVZpZXc7XG4iXX0="}