{"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","business-objects/GeneratedCollectionDetails.js","lib/colorUtility.js","lib/getOptimizedCover-ts.js","models/dao/MediaParameters.js","public/ecmascript/components/collection_campaign_page/CollectionDefinition.js","public/ecmascript/components/collection_campaign_page/CollectionHighlightFactory.js","public/ecmascript/components/collection_campaign_page/CollectionManager.js","public/ecmascript/components/collection_campaign_page/PageManager.js","public/ecmascript/components/collection_highlight/templates/collection_highlight.html.js","public/ecmascript/components/collection_highlight/views/CollectionHighlight.js","public/ecmascript/components/collection_highlight_slanted/SlantedCollectionHightlight.html.js","public/ecmascript/components/collection_highlight_slanted/SlantedCollectionHightlight.js","public/ecmascript/components/common/HashManager.js","public/ecmascript/components/common/templates/Error.html.js","public/ecmascript/components/featured_collections/FeaturedCollectionView.js","public/ecmascript/components/media/ContextMenu.js","public/ecmascript/components/media/Cover.js","public/ecmascript/components/media/MediaInterface.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/Cover.html.js","public/ecmascript/components/media/templates/NoCover.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/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/models/PatronTitleStatus.js","public/ecmascript/pages/featured_collection.js","public/ecmascript/title-actions/TitleActions.js","public/ecmascript/title-actions/TitleState.js","public/ecmascript/util/Promise.js","public/ecmascript/util/title-actions/processForwardedAction.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,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,SAA1B,CATU,CAS2B;;AAErC,eAAO,MAA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","file":"featured_collection.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","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","export default class ColorUtility {\n\n // see _vars.scss for the corresponding css color vars\n //\n static get highContrastBlue(){\n return '#0000FF';\n }\n\n static get highContrastBlueHover(){\n return '#0000F5';\n }\n\n static get highContrastYellow(){\n return '#FFFF00';\n }\n\n static get highContrastYellowHover() {\n return '#F5E600';\n }\n\n// credit: https://stackoverflow.com/a/39077686\n // This will accept three character shorthand hex colors as well as the standard six character format.\n static hexToRGB(hexColor){\n return hexColor.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i\n ,(m, r, g, b) => '#' + r + r + g + g + b + b)\n .substring(1).match(/.{2}/g)\n .map(x => parseInt(x, 16));\n }\n\n static rgbToHex(rgb) {\n let nToHex = function (n) {\n let hex = parseInt(n, 10).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n return '#' + nToHex(rgb[0]) + nToHex(rgb[1]) + nToHex(rgb[2]);\n }\n\n static getTextColorFromRGB(backgroundRGB){\n // Standard contrast calculation based on the Y component of the YIQ color space. Libby uses the same default Luma threshold.\n // https://github.com/bksh/dewey-js/blob/ebb7189241c5eade8000776d97cd5451bf643e3d/src/app/base/cover-guru.js#L10\n // https://en.wikipedia.org/wiki/YIQ#From_RGB_to_YIQ\n const LUMA_THRESHOLD_YIQ = 190;\n return (backgroundRGB[0] * 299 + backgroundRGB[1] * 587 + backgroundRGB[2] * 114) / 1000 > LUMA_THRESHOLD_YIQ ? '#000000' : '#ffffff';\n }\n\n static getTextColorFromHex(backgroundHex){\n let rgb = ColorUtility.hexToRGB(backgroundHex);\n return ColorUtility.getTextColorFromRGB(rgb);\n }\n\n static shadeColorHex(hexColor, percent){\n let rgb = ColorUtility.hexToRGB(hexColor);\n let shadedRGB = ColorUtility.shadeColor(rgb, percent);\n return ColorUtility.rgbToHex(shadedRGB);\n }\n\n static shadeColor(rgb, percent){\n percent = Math.abs(percent);\n let hsl = ColorUtility.rgbToHsl(rgb[0], rgb[1], rgb[2]);\n let l = hsl[2];\n if (l >= 0.5){\n percent *= -1;\n }\n l = l + percent;\n hsl[2] = l;\n return ColorUtility.hslToRgb(hsl[0], hsl[1], hsl[2]);\n }\n\n /**\n * Credit: taken from https://stackoverflow.com/a/9493060\n *\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param {number} h The hue\n * @param {number} s The saturation\n * @param {number} l The lightness\n * @return {Array} The RGB representation\n */\n static hslToRgb(h, s, l){\n var r, g, b;\n\n if (s === 0){\n r = g = b = l; // achromatic\n } else {\n let hue2rgb = function (p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n };\n\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n }\n\n /**\n * Credit: taken from https://stackoverflow.com/a/9493060\n *\n * Converts an RGB color value to HSL. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and l in the set [0, 1].\n *\n * @param {number} r The red color value\n * @param {number} g The green color value\n * @param {number} b The blue color value\n * @return {Array} The HSL representation\n */\n static rgbToHsl(r, g, b){\n r = r / 255;\n g = g / 255;\n b = b / 255;\n let max = Math.max(r, g, b);\n let min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min){\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max){\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n\n return [h, s, l];\n }\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 _ = 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 CollectionHighlightView from '../collection_highlight/views/CollectionHighlight';\nimport SlantedCollectionHighlight from '../collection_highlight_slanted/SlantedCollectionHightlight';\nconst {featureManager} = window;\n\nexport default class CollectionHighlightViewFactory\n{\n static Build(collectionDefinition, viewOptions, forceSlanted = false){\n if ((featureManager.isEnabled('LuckyDay') && collectionDefinition.isLuckyDay) || forceSlanted){\n return new SlantedCollectionHighlight(viewOptions);\n }\n else {\n return new CollectionHighlightView(viewOptions);\n }\n }\n}\n","import CollectionDefinition from './CollectionDefinition';\n\nexport default class CollectionManager extends Backbone.Collection {\n get model() { return CollectionDefinition; }\n}\n","import CollectionDefinition from './CollectionDefinition';\n\nexport default class PageManager extends Backbone.Model {\n\n get idAttribute() { return 'pageId'; }\n\n get isLoaded() {\n return !_.isEmpty(this.attributes);\n }\n\n // page == room, page has views, one of which is the home-page collections collection\n // ref: /v2/libraries/qa/pages\n fetchRoomById(roomId = 'home') {\n this.url = window.url(window.routes.rest.rooms.get, { roomId });\n\n return new Promise((resolve, reject) => {\n this.fetch({\n timeout: 10000,\n success: (model, response, options) => resolve(response),\n error: (model, response, options) => reject(response)\n });\n });\n }\n\n fetchCampaignById(campaignId) {\n return new Promise((resolve, reject) => {\n $.ajax({\n url: window.url(window.routes.rest.campaigns.get, { campaignId }),\n dataType: 'json',\n timeout: 10000\n })\n .done((response) => resolve(response))\n .fail((jqHXR) => reject(jqHXR));\n });\n }\n\n fetchFirstDisplayableCampaign(roomId = 'home') {\n return new Promise((resolve, reject) => {\n $.ajax({\n url: window.url(window.routes.rest.campaigns.getFirstDisplayable, { roomId }),\n dataType: 'json',\n timeout: 10000\n })\n .done((response) => resolve(response))\n .fail((jqHXR) => reject(jqHXR));\n });\n }\n\n fetchCollectionById(collectionId) {\n return new Promise((resolve, reject) => {\n $.ajax({\n url: window.url(window.routes.rest.collections.getById, { id: collectionId }),\n dataType: 'json',\n timeout: 10000\n })\n .done((response) => resolve(new CollectionDefinition(response)))\n .fail((jqHXR, textStatus, errorThrown) => reject(jqHXR));\n });\n }\n\n getView(viewName) {\n if (!this.isLoaded) { return null; }\n\n return (viewName || '').toLowerCase() === 'home'\n ? _(this.attributes.views).findWhere({ isDefault: true })\n : _(this.attributes.views).findWhere({ name: viewName });\n }\n\n getCampaigns() {\n return this.isLoaded && this.attributes.campaigns;\n }\n}\n","export default ({ name, languageCode, room, seeAllUrl }) => `\n
\n
\n
\n
\n \n

\n \n ${name}\n \n \n

\n \n ${html('seeAll')}\n \n \n
\n
    \n
    \n
    \n
    \n
    `;\n","import TitleCollectionView from '../../media/TitleCollectionView';\nimport CollectionHighlightTemplate from '../templates/collection_highlight.html';\n\nexport default class CollectionHighlight extends Backbone.View {\n template = CollectionHighlightTemplate;\n\n viewAttributes(collection) {\n let classes = [];\n\n if (this.isHero) {\n classes.push(`large-block-grid-${collection.length}`);\n } else {\n classes.push(`large-block-grid-6`);\n }\n\n if (collection.length <= 2) {\n classes.push(`small-block-grid-${collection.length}`);\n }\n\n if (collection.length >= 3) {\n classes.push(`small-block-grid-2 medium-block-grid-3`);\n }\n\n return {\n class: `titleContainer ${classes.join(' ')}`,\n };\n }\n\n constructor({ bus, room, isHero = false }) {\n super(...arguments);\n\n this.bus = bus;\n this.room = room;\n this.collection = this.model.titleCollection;\n this.isHero = isHero;\n\n this.render();\n }\n\n get seeAllUrl() {\n const collectionId = this.model.get('id');\n return window.url(window.routes.collectionById, { collectionId });\n }\n\n get desiredTitleCount() {\n return 6;\n }\n\n render() {\n let $view = $(\n this.template(\n _.extend({}, this.model.attributes, {\n room: this.room,\n seeAllUrl: this.seeAllUrl,\n })\n )\n );\n\n this.titleCollectionView && this.titleCollectionView.remove();\n\n this.titleCollectionView = new TitleCollectionView({\n el: $view.find('.titleContainer'),\n bus: this.bus,\n attributes: this.viewAttributes(this.collection),\n collection: this.collection,\n coverWidths: { mobile: 145, tablet: 160, desktop: 190 },\n isInHero: this.isHero,\n context: {\n collectionDefinition: this.model,\n room: this.room,\n },\n });\n\n // ref: LHTNG-1970 - hiding the last two elements so we can remove the overflow hidden on the parent container\n $view.find('.Item').each((i, el) => {\n if (i > 3) {\n $(el).addClass(`titles-item-overflow`);\n }\n });\n\n this.$el.empty().append($view);\n if (this.isHero) {\n this.makeHero();\n }\n\n return this;\n }\n\n makeHero() {\n if (!window.featureManager.isEnabled('geo-idc')) {\n this.isHero = true;\n this.$el.find('.collection-container').addClass('Hero');\n this.$el.find('.icon-forward-arrow').remove();\n let description = this.model.attributes.description;\n if (description) {\n this.$el\n .find('.collectionTitle')\n .after(\n `

    ${description}

    `\n );\n }\n }\n }\n\n remove() {\n this.titleCollectionView && this.titleCollectionView.remove();\n super.remove();\n }\n\n toggleTitleVisibility(isVisible) {\n let title = this.$el.find('.collectionTitle');\n isVisible\n ? title.removeClass('invisible')\n : title.addClass('invisible');\n }\n}\n","export default ({coverGridSizeClass, collectionTitle, collectionDescription, collectionId, coversHtml, bannerBackgroundColor, bannerTextColor, isHero, useFallbackDisplay, fallBackGridWidth}) => `\n
    \n
    \n
    \n
    \n

    ${collectionTitle}

    \n
    ${collectionDescription}
    \n ${window.text('seeAll')}\n
    \n
    \n
    \n
    \n
    \n ${useFallbackDisplay ?\n `
      \n ${coversHtml.map((html) => `
    • ${html}
    • `).join('')}\n
    ` :\n `
    \n ${coversHtml.map((coverHtml, index) => `\n
    \n ${coverHtml}\n
    `).join('')}\n
    `}\n
    \n
    \n
    \n
    \n ${window.text('seeAll')}\n
    \n`;\n\n","import SlantedGridTemplate from './SlantedCollectionHightlight.html';\nimport Cover from '../media/Cover';\nimport TitleName from '../media/views/TitleInfo/TitleName';\nimport ColorUtility from '../../../../lib/colorUtility';\nconst {OverDrive} = window;\n\n\nexport default class SlantedCollectionHighlight extends Backbone.View {\n\n template = SlantedGridTemplate;\n constructor({ bus, room, isHero = false, titleCountOverride = null }) {\n super(...arguments);\n\n this._views = [];\n this.bus = bus;\n this.room = room;\n this.isHero = isHero;\n this.highContrastMode = window.OverDrive.highContrast;\n this.titleCountOverride = titleCountOverride;\n\n this._vertToHorizBreakpointPx = 720;\n this._coverBlockWidthPercentLarge = 0.58;\n this._coverBlockWidthPercentageSmall = 1;\n\n this._smallGridMaxWidthPx = 555;\n this._mediumGridMaxWidthPx = 667;\n this._largeGridMaxWidthPx = 1280;\n this._coverPlaceholderHtml = '
    ';\n }\n\n render() {\n this.$el.empty();\n let colors = this.getTitlePanelColors();\n\n let sizeInfo = this.getGridSize();\n this.$el.empty().append(\n $(this.template({\n coverGridSizeClass: sizeInfo.class,\n collectionTitle: this.model.get('name'),\n collectionDescription: this.model.get('description'),\n collectionId: this.model.get('id'),\n coversHtml: this.getCoversHtml(),\n bannerBackgroundColor: colors.background,\n bannerTextColor: colors.foreground,\n isHero: this.isHero,\n useFallbackDisplay: this.useFallbackDisplay,\n fallBackGridWidth: sizeInfo.gridWidthFallback\n })));\n\n this.$el.find('.textBlockInner a').on('mouseover', (evt) => {\n evt.currentTarget.style.color = colors.foregroundHover;\n }).on('mouseout', (evt) => {\n evt.currentTarget.style.color = colors.foreground;\n });\n\n return this;\n }\n\n get desiredTitleCount(){\n if (this.titleCountOverride){\n return this.titleCountOverride;\n }\n\n let sizeInfo = this.getGridSize();\n return this.useFallbackDisplay ? sizeInfo.numCoversFallback : sizeInfo.numCovers;\n }\n\n get useFallbackDisplay(){\n return window.Modernizr && !window.Modernizr.cssgrid;\n }\n\n getGridSize(){\n\n const xlarge = {\n class: 'extraLarge',\n numCovers: 39,\n numCoversFallback: 47,\n numTilesFallback: 117,\n gridWidthFallback: 13,\n placeholderIndexes: [4,5,6,7,8,9,10,11,12,18,19,20,21,22,23,24,25,26,33,34,35,36,37,38,39,40,48,49,50,51,52,53,54,55,62,63,64,65,66,67,68,69,70,77,78,79,80,81,82,83,84,91,92,93,94,95,96,97,98,99,104,105,106,107,108,109,110,111,112]\n };\n\n const large = {\n class: 'large',\n numCovers: 25,\n numCoversFallback: 25,\n numTilesFallback: 54,\n gridWidthFallback: 9,\n placeholderIndexes: [0,4,5,6,7,8,14,15,16,17,18,25,26,27,28,35,36,37,38,39,44,45,46,47,48,49,52,53]\n };\n\n const medium = {\n class: 'medium',\n numCovers: 17,\n numCoversFallback: 21,\n numTilesFallback: 35,\n gridWidthFallback: 7,\n placeholderIndexes: [0,4,5,6,12,13,14,21,22,28,29,30,31]\n };\n\n const small = {\n class: 'small',\n numCovers: 12,\n numCoversFallback: 20,\n numTilesFallback: 20,\n gridWidthFallback: 5,\n placeholderIndexes: [0,10,15,16]\n };\n\n // take the max of the available width and height so we don't need to rerender when the device rotates\n let largeDimension = Math.max(window.screen.availWidth, window.screen.availHeight);\n let smallDimension = Math.min(window.screen.availWidth, window.screen.availHeight);\n\n let landscapeMaxGridWidth = (largeDimension < this._vertToHorizBreakpointPx)\n ? largeDimension * this._coverBlockWidthPercentageSmall\n : largeDimension * this._coverBlockWidthPercentLarge;\n\n let portraitMaxGridWidth = (smallDimension < this._vertToHorizBreakpointPx)\n ? smallDimension * this._coverBlockWidthPercentageSmall\n : smallDimension * this._coverBlockWidthPercentLarge;\n\n let maxCoverGridWidth = Math.max(landscapeMaxGridWidth, portraitMaxGridWidth);\n\n if (maxCoverGridWidth <= this._smallGridMaxWidthPx){\n return small;\n } else if (maxCoverGridWidth <= this._mediumGridMaxWidthPx){\n return medium;\n } else if (maxCoverGridWidth <= this._largeGridMaxWidthPx){\n return large;\n } else {\n return xlarge;\n }\n }\n\n getTitlePanelColors(){\n\n let backgroundColor;\n\n if (this.highContrastMode){\n backgroundColor = ColorUtility.highContrastBlue;\n } else {\n // choose a different cover for the source color when the title block is rendered above the cover grid.\n // The effect is nicer if the source cover is abuts the colored area that matches it.\n let colorSourceTitle = this.model.titleCollection.first();\n if (window.innerWidth < this._vertToHorizBreakpointPx && this.model.titleCollection.length > 2){\n colorSourceTitle = this.model.titleCollection.at(2);\n }\n\n let cover = colorSourceTitle.getCover(300);\n backgroundColor = '#a79d99';\n if (this.isHero && OverDrive.colors.primary){\n backgroundColor = OverDrive.colors.primary;\n }\n else if (!colorSourceTitle.isPlaceholder && cover && cover.primaryColor){\n backgroundColor = cover.primaryColor.hex;\n } else {\n backgroundColor = '#a79d99';\n }\n }\n\n let foregroundColor = ColorUtility.getTextColorFromHex(backgroundColor);\n\n return {\n background: backgroundColor,\n foreground: foregroundColor,\n foregroundHover: ColorUtility.shadeColorHex(backgroundColor, 0.2)\n };\n }\n\n // Render one cover for each available title and then repeat them to reach the\n // desired cover count\n getCoversHtml(){\n this.renderBaseCovers();\n let sizeInfo = this.getGridSize();\n\n let numRequired = !this.useFallbackDisplay ? sizeInfo.numCovers : sizeInfo.numTilesFallback;\n\n let results = [];\n while (results.length < numRequired){\n for (let i = 0; i < this._coverMarkup.length && (results.length < numRequired);){\n if (!this.useFallbackDisplay || !sizeInfo.placeholderIndexes.includes(results.length)){\n results.push(this._coverMarkup[i]);\n ++i;\n } else {\n // The fallback display mode uses placeholder covers to fill out the parts of the grid\n // that will be clipped off by the parent container.\n results.push(this._coverPlaceholderHtml);\n }\n }\n }\n return results;\n }\n\n renderBaseCovers() {\n this._views.forEach((view) => view.remove());\n this._views = [];\n this._coverMarkup = [];\n this.model.titleCollection.each((title) => {\n\n if (title.isPlaceholder){\n this._coverMarkup.push(this._coverPlaceholderHtml);\n }\n else {\n let cover = new Cover({\n model: title,\n coverWidths: {mobile: 200, tablet: 300, desktop: 400},\n isInHero: this.isHero\n });\n cover.render();\n\n // we add a hidden title name for screen readers\n let titleName = new TitleName({model: title});\n\n this._coverMarkup.push(`${cover.el.innerHTML}

    ${titleName.el.innerHTML}

    `);\n\n this._views.push(cover);\n this._views.push(titleName);\n }\n });\n }\n\n remove() {\n this._views.forEach((v) => v.remove());\n super.remove();\n }\n\n makeHero() {\n this.isHero = true;\n this.$el.find('.mainBox').addClass('hero');\n let colors = this.getTitlePanelColors();\n this.$el.find('.textBlockOuter').attr('style', `background-color:${colors.background};color:${colors.foreground}`);\n }\n\n toggleTitleVisibility(isVisible) {\n let title = this.$el.find('.textBlockInner');\n isVisible ? title.removeClass('invisible') : title.addClass('invisible');\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","export default () => `\n
    \n
    \n
    \n
    \n
    \n ${window.text('error.errorContactSupport', {link: `${window.html('pleaseContactSupport')}`})}\n
    \n
    \n
    \n
    \n
    \n`;\n","const { Logger, html } = window;\nconst { isAuthenticated, hasLinkedCards } = window.OverDrive;\n\nimport '../../util/Promise';\nimport ErrorTemplate from '../../components/common/templates/Error.html';\n\nimport ProcessForwardedAction from '../../util/title-actions/processForwardedAction';\nimport HashManager from '../../components/common/HashManager';\nimport TitleCollection from '../media/models/TitleCollection';\n\nimport PageManager from '../collection_campaign_page/PageManager';\nimport CollectionManager from '../collection_campaign_page/CollectionManager';\nimport CollectionHighlightView from '../collection_highlight/views/CollectionHighlight';\nimport CollectionHighlightFactory from '../collection_campaign_page/CollectionHighlightFactory';\n\nimport PatronTitleStatus from '../../models/PatronTitleStatus';\n\nexport default class FeaturedCollectionView extends Backbone.View {\n constructor({ viewName, room, bus, featureManager, patronSettings }) {\n super(...arguments);\n\n this._views = [];\n this.viewName = _.unescape(viewName.replace(/'/g, \"'\"));\n this.room = room;\n this.bus = bus;\n this.featureManager = featureManager;\n this.patronSettings = patronSettings;\n this.pageSize = 10;\n\n this.pageManager = new PageManager();\n this.collectionManager = new CollectionManager();\n\n this.collectionErrors = [];\n\n this.update();\n }\n\n update() {\n this.$el.empty();\n\n this._views.forEach((view) => view.remove());\n this._views = [];\n\n this.pageManager\n .fetchRoomById((this.room && this.room.id) || 'home')\n .then(() => {\n this._views = this.initViews();\n this.unrenderedViews = this._views.slice();\n this._renderPage();\n this._performForwardedAction();\n });\n }\n\n _renderPage() {\n this._fetchRows(this.pageSize).then((collections) => {\n this._updatePatronTitleStatus(collections);\n this._pageLoadComplete();\n });\n }\n\n _fetchRows(rowCount, collectionsDone = []) {\n let views = this.unrenderedViews.splice(0, rowCount);\n this._paintCollections(views);\n\n return new Promise((resolve) => {\n this._syncRows(views, collectionsDone).then((result) => {\n if (result.failed) {\n this._fetchRows(result.failed, collectionsDone).then(\n (collections) => {\n resolve(collections);\n }\n );\n } else {\n resolve(collectionsDone);\n }\n });\n });\n }\n\n _syncRows(views, collections) {\n let requestQueue = views.map((view) => view.sync());\n\n return Promise.settle(requestQueue).then((results) => {\n const succeeded = results.filter(\n (result) => result.fulfilled && result.value\n );\n const failed = results.filter(\n (result) => !result.fulfilled || !result.value\n );\n\n succeeded.map((request) => collections.push(request.value));\n\n return { failed: failed.length };\n });\n }\n\n _paintCollections(views) {\n let frag = document.createDocumentFragment();\n\n views.forEach((view) => {\n if (!view.isPainted) {\n frag.appendChild(view.el);\n view.isPainted = true;\n }\n });\n\n this.el.appendChild(frag);\n }\n\n _pageLoadComplete() {\n if (this.unrenderedViews.length > 0) {\n let $loadMore = $(\n ``\n ).on('click', () => {\n this._renderPage();\n $loadMore.remove();\n });\n\n this.$el.append($loadMore);\n }\n\n if (this.collectionErrors.length > 0) {\n let allCollectionsFailed = this._views.length === 0;\n this._logPageErrors(this.collectionErrors, allCollectionsFailed);\n if (allCollectionsFailed) {\n this.$el.empty().append(ErrorTemplate());\n }\n this.collectionErrors = [];\n }\n }\n\n _logPageErrors(failed, allFailed) {\n const howMany = allFailed ? 'Total' : 'Partial';\n let errors = [];\n for (let failure of failed) {\n errors.push({\n id: failure.id,\n type: failure.type,\n statusText: failure.statusText,\n status: failure.status,\n });\n }\n let counts = _.countBy(\n errors,\n (error) => error.type + ':' + error.statusText\n );\n Logger.log('error', `${howMany} Featured Page Ajax Error`, {\n message: 'HighlightErrorRollup',\n errors: errors,\n counts: counts,\n page: this.viewName,\n });\n }\n\n initViews() {\n let views = [];\n let mainView = this.pageManager.getView(this.viewName);\n\n if (this._shouldTruncateCollections) {\n mainView.collectionDefinitions =\n mainView.collectionDefinitions.slice(0, 10);\n }\n\n this.collectionManager.reset(mainView.collectionDefinitions);\n\n this.collectionManager.each((collectionDefinition) => {\n // TitleCard template will render in \"dummy\" state\n collectionDefinition.titleCollection.reset([\n { placeholder: true },\n { placeholder: true },\n { placeholder: true },\n { placeholder: true },\n { placeholder: true },\n { placeholder: true },\n ]);\n\n let collectionHighlightView = CollectionHighlightFactory.Build(\n collectionDefinition,\n {\n model: collectionDefinition,\n bus: this.bus,\n featureManager: this.featureManager,\n room: this.room,\n }\n );\n\n views.push(collectionHighlightView.render());\n\n collectionHighlightView.sync = () =>\n collectionDefinition\n .fetchCollectionTitles({\n patronSettings: this.patronSettings,\n room: this.room,\n })\n .then(\n () => {\n if (collectionDefinition.titleCollection.length) {\n collectionHighlightView.render();\n collectionHighlightView.toggleTitleVisibility(\n true\n );\n\n return collectionDefinition;\n } else {\n // Clean up the failed row\n collectionHighlightView.remove();\n this._views = this._views.filter(\n (v) => v !== collectionHighlightView\n );\n throw new Error(\n 'No collection contents retrieved'\n );\n }\n },\n (error) => {\n collectionHighlightView.remove();\n this._views = this._views.filter(\n (v) => v !== collectionHighlightView\n );\n\n error.id = collectionDefinition.id;\n error.statusText = !!error.statusText\n ? error.statusText\n : 'UnknownStatus';\n error.type = 'Ajax Error: Collection';\n\n this.collectionErrors.push(error);\n\n throw error;\n }\n );\n });\n\n return views;\n }\n\n _updatePatronTitleStatus(views) {\n if (\n window.OverDrive.isAuthenticated &&\n window.OverDrive.hasLinkedCards &&\n views &&\n views.length > 0\n ) {\n let titles = [];\n\n views.forEach((view) => {\n titles.push(...view.titleCollection.models);\n });\n\n let patronTitleStatus = new PatronTitleStatus();\n\n patronTitleStatus.fetchTitleStatus(titles).then(() => {\n patronTitleStatus.updateTitleCollectionState(_(titles));\n });\n }\n }\n\n _performForwardedAction() {\n if (isAuthenticated && hasLinkedCards && HashManager.get('action')) {\n let titles = [];\n this.collectionManager.each((collectionDefinition) => {\n titles.push(...collectionDefinition.titleCollection.models);\n });\n const forwardedAction = new ProcessForwardedAction(\n new TitleCollection(titles),\n this.bus\n );\n forwardedAction.executeAction();\n window.forwardedAction = forwardedAction;\n }\n }\n\n get _shouldTruncateCollections() {\n // The OD app on iOS 8 and 9 crashes on the featured collection page if there are too many collections. LHTNG-2387\n let inApp = Cookies.get('omcbrowse') !== undefined;\n if (inApp && bowser.ios && bowser.osversion) {\n let versionParts = bowser.osversion.split('.');\n if (versionParts && versionParts.length > 0) {\n let majorVersion = parseInt(versionParts[0], 10);\n if (majorVersion && majorVersion < 10) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","import ContextMenuTemplate from './templates/ContextMenu.html';\nconst { featureManager, url, routes, OverDrive, text, html } = window;\n\nexport default class ContextMenu extends Backbone.View {\n template = ContextMenuTemplate;\n\n constructor() {\n super(...arguments);\n\n this.rid = Math.random().toString(36).substring(7);\n\n this.listenTo(this.model, 'change:isInHistory', () => this.render());\n\n this.render();\n }\n\n events() {\n let events = {\n 'click .js-historyAction': '_handleClick',\n 'keydown .js-historyAction': '_handleKeyHistory',\n 'keydown .js-context-button': 'toggle',\n };\n\n if (featureManager.isEnabled('cleanupContextMenuToggle')) {\n events['keyup .js-context-drop'] = '_handleKeyUpContainer';\n }\n return events;\n }\n\n _handleKeyUpContainer(e) {\n if (e.keyCode === 27 /*ESC*/) {\n this.close();\n }\n }\n\n _handleClick() {\n this.model.trigger('title:action', {\n action: 'history',\n model: this.model,\n });\n }\n\n _handleKeyHistory(e) {\n if (!window.featureManager.isEnabled('cleanupContextMenuToggle')) {\n e.stopImmediatePropagation();\n }\n\n if (e.keyCode === 13 || e.keyCode === 32) {\n if (window.featureManager.isEnabled('cleanupContextMenuToggle')) {\n e.stopImmediatePropagation();\n }\n this.model.trigger('title:action', {\n action: 'history',\n model: this.model,\n });\n }\n }\n\n get viewModel() {\n let seriesSearchUrl = '';\n if (\n !(\n this.model.isMagazine &&\n featureManager.isEnabled('magazine-rollup')\n )\n ) {\n if (\n featureManager.isEnabled('enhancedSeries') &&\n this.model.get('detailedSeries')\n ) {\n seriesSearchUrl = url(routes.searchByType, {\n type: 'seriesId',\n query: this.model.get('detailedSeries').seriesId,\n sortBy: 'readingOrder',\n });\n } else if (this.model.get('series')) {\n seriesSearchUrl = url(routes.searchByType, {\n type: 'series',\n query: this.model.get('series'),\n sortBy: 'newlyadded',\n });\n }\n }\n\n let hasMediaDoFormat = false;\n this.model.get('formats').forEach((format) => {\n if (format.id === 'ebook-media-do') {\n hasMediaDoFormat = true;\n }\n });\n\n let maturityLevel = this.model.attributes.ratings.maturityLevel.id;\n\n const relatedTitlesPageUrl = `${window.url(\n window.routes.mediaRelatedId,\n {\n id: this.model.get('id'),\n }\n )}${maturityLevel ? `?maturityLevel=${maturityLevel}` : ''}`;\n\n return {\n isOwned: this.model.get('isOwned'),\n relatedTitlesPageUrl,\n id: this.model.id,\n rid: this.rid,\n title: this.model.get('title'),\n typeId: this.model.get('type').id,\n sampleHref: this.model.get('sample').href || '',\n sampleText: this._getSampleText(),\n alignment: 'bottom',\n historyActionLabel: this._getHistoryActionLabel(),\n historyActionText: this._getHistoryActionText(),\n historyEnabled:\n OverDrive.showHistoryFeature &&\n !this.model.get('isPreReleaseTitle'),\n gaHistoryAction: this.model.get('isInHistory')\n ? 'history-remove'\n : 'history-add',\n seriesSearchUrl,\n hasMediaDoFormat,\n };\n }\n\n _getSampleText() {\n const type = this.model.get('type').id;\n\n if (type === 'audiobook' || type === 'music') {\n return text('sampleListen');\n } else if (type === 'video') {\n return text('sampleWatch');\n }\n\n return text('sampleRead');\n }\n\n _getHistoryActionLabel() {\n const title = this.model.get('title');\n if (this.model.get('isInHistory')) {\n return html('readingHistory.removeTitle', { title });\n } else {\n return html('readingHistory.addTitle', { title });\n }\n }\n\n _getHistoryActionText() {\n if (this.model.get('isInHistory')) {\n return html('readingHistory.remove');\n } else {\n return html('readingHistory.add');\n }\n }\n\n render() {\n this.$el.empty().append(this.template(this.viewModel));\n\n return this;\n }\n\n isKeyboardSelectEvent = (e) =>\n (e.which === 13 || e.which === 32) && (e.preventDefault() || true);\n\n close() {\n window.Foundation.libs.dropdown.close(\n this.$el.find('.js-context-drop')\n );\n }\n\n toggle(e) {\n if (this.isKeyboardSelectEvent(e)) {\n window.Foundation.libs.dropdown.toggle(\n this.$el.find('.js-context-button')\n );\n }\n }\n}\n","import CoverTemplate from './templates/Cover.html';\nimport NoCoverTemplate from './templates/NoCover.html';\nimport { toStaticUrl } from '../../../../lib/assetMapper';\n\nexport default class Cover extends Backbone.View {\n constructor({ coverWidths, isInHero, isTitleHistory = false }) {\n super(...arguments);\n\n this.coverWidths = _.extend(\n { mobile: 145, tablet: 160, desktop: 190 },\n coverWidths\n );\n this.isInHero = isInHero;\n this.isTitleHistory = isTitleHistory;\n\n this.listenTo(this.model, 'change', this._render);\n this._render();\n }\n\n remove() {\n $(window).off(`resize.${this.model.id}`);\n }\n\n _render() {\n const media = this.model.toJSON();\n const coverWidth = bowser.mobile\n ? this.coverWidths.mobile\n : bowser.tablet\n ? this.coverWidths.tablet\n : this.coverWidths.desktop;\n const cover = this.model.getCover(coverWidth);\n\n if (this.model.isPlaceholder) {\n let $cover = `
    `;\n this.$el.empty().append($cover);\n } else if (cover && cover.href) {\n let $cover = $(\n CoverTemplate({\n media,\n coverColor:\n (cover &&\n cover.primaryColor &&\n cover.primaryColor.hex) ||\n 'inherit',\n src: cover && cover.href,\n href: this.model.titleDetailsUrl,\n label: window.text('cover.coverImageLabel', {\n title: media.title,\n creator: media.firstCreatorName,\n }),\n noSampleClass:\n media.sample.href == null ? 'is-noSample' : '',\n srcset: cover && cover.srcset,\n })\n );\n\n // LHTNG-2105: In the event that an image fails to load, wipe out the href's and update the model to trigger a render()\n $cover.find('img').on('error', () => {\n let imagesRemoved = JSON.parse(\n JSON.stringify(this.model.attributes.covers)\n );\n\n _(imagesRemoved).each((image) => {\n delete image.href;\n });\n\n this.model.set({ covers: imagesRemoved });\n });\n\n this.$el.empty().append($cover);\n } else if (this.isTitleHistory) {\n this.$el.empty().append(\n `\n \"${window.html('coverImageForTitle',\n `\n );\n } else {\n let creatorText = this.model.isMagazine\n ? this.model.get('edition')\n : this.model.get('firstCreatorName');\n this.$el.empty().append(\n NoCoverTemplate({\n media,\n href: this.model.titleDetailsUrl,\n isInHero: this.isInHero,\n coverWidth: coverWidth,\n coverHeight: (coverWidth * 293) / 220,\n creatorText: creatorText,\n })\n );\n $(window).on(\n `resize.${this.model.id}`,\n _.bind(\n this._manageOverflow,\n this,\n '.CoverImageContainer .noCoverAvailable .title',\n this.model.get('title')\n )\n );\n $(window).on(\n `resize.${this.model.id}`,\n _.bind(\n this._manageOverflow,\n this,\n '.CoverImageContainer .noCoverAvailable .author',\n creatorText\n )\n );\n $(window).on(\n `resize.${this.model.id}`,\n _.bind(this._resizeClearImage, this)\n );\n\n // timeout gives browser chance to draw and set innerHTML values used\n setTimeout(() => {\n this._manageOverflow(\n '.CoverImageContainer .noCoverAvailable .title',\n this.model.get('title')\n );\n this._manageOverflow(\n '.CoverImageContainer .noCoverAvailable .author',\n creatorText\n );\n this._resizeClearImage();\n }, 1);\n }\n\n return this;\n }\n\n _resizeClearImage() {\n const image = this.el.querySelector('img');\n if (image) {\n $(image).height(($(image).parent().width() * 293) / 220);\n }\n }\n _manageOverflow(selector, resetText) {\n const element = this.el.querySelector(selector);\n if (element) {\n element.innerHTML = resetText;\n if (selector.indexOf('.title') !== -1) {\n if ($(element).width() < 100) {\n $(element).css('font-size', '14px');\n } else if (\n $(element).width() < 125 &&\n $(element).width() >= 100\n ) {\n $(element).css('font-size', '16px');\n } else if (\n $(element).width() < 150 &&\n $(element).width() >= 125\n ) {\n $(element).css('font-size', '18px');\n } else if ($(element).width() >= 150) {\n $(element).css('font-size', '20px');\n }\n } else if (selector.indexOf('.author') !== -1) {\n if ($(element).width() < 110) {\n $(element).css('font-size', '10px');\n } else if (\n $(element).width() < 135 &&\n $(element).width() >= 110\n ) {\n $(element).css('font-size', '12px');\n } else if (\n $(element).width() < 160 &&\n $(element).width() >= 135\n ) {\n $(element).css('font-size', '14px');\n } else if ($(element).width() >= 160) {\n $(element).css('font-size', '16px');\n }\n }\n if (\n element.scrollHeight > 0 &&\n element.scrollHeight > element.clientHeight\n ) {\n let text = element.innerHTML;\n text = `${text.replace(/\\W+$/g, '')}...`; // remove trailing special characters and add ellipsis\n while (\n text !== '...' &&\n element.scrollHeight > element.clientHeight\n ) {\n text = text.replace(/\\W*\\w\\W*(\\.{3})$/g, '$1'); // remove a non-ellipsis character and unwanted characters around itΩ\n element.innerHTML = text;\n }\n // todo: put a min width an height on this! We know what the heights are for particular screen widths\n }\n }\n }\n}\n","import MediaParameters from '../../../../models/dao/MediaParameters';\nimport TitleCollection from './models/TitleCollection';\n\nexport default class MediaInterface {\n\n constructor() {\n _.extend(this, Backbone.Events);\n\n this.items = new TitleCollection();\n this.facets = {};\n this.sortOptions = [];\n }\n\n quickSearch(term, options) {\n return this._fetch(_.extend({}, { query: term }, options));\n }\n\n search(parameters, options) {\n return this._fetch(_.extend({}, parameters, options));\n }\n\n fetchCollectionById(id, options) {\n return this._fetch(_.extend({}, { collectionId: id }, options));\n }\n\n fetchCollectionByParameters(collectionFilters, options) {\n return this._fetch(_.extend({}, collectionFilters, options));\n }\n\n /** Utility function to simulate a data call, but deliberatley return an empty result set */\n fetchEmptyResponse() {\n this.trigger('sync:start', this, { mediaParameters: null });\n\n let emptyResponse = {\n items : [],\n facets : {},\n sortOptions : []\n };\n\n this._fetchDone(emptyResponse, 'synthetic');\n\n this.trigger('sync:end', this);\n\n return Promise.resolve(emptyResponse);\n }\n\n /**\n * @param {MediaParameters} parameters\n * @memberof MediaInterface\n */\n _fetch(parameters) {\n\n if (!parameters){\n parameters = {};\n }\n\n // if a title id is specificed then no facets will be calculated regardless of the params sent.\n if (!parameters.includedFacets && !parameters.titleId){\n parameters.includedFacets = window.OverDrive.supportedFacets;\n }\n\n if (window.featureManager.isEnabled('LuckyDay') && parameters.shuffle){\n const sorts = ['mostpopular', 'releasedate', 'title', 'author', 'newlyadded', 'lowcirculating', 'mostpopular-site'];\n parameters.sortBy = sorts[Math.floor(Math.random() * sorts.length)];\n }\n\n let mediaParameters = new MediaParameters(parameters);\n\n if (!!window.OverDrive.showOnlyAvailable) {\n mediaParameters.showOnlyAvailable = true;\n }\n\n this.trigger('sync:start', this, { mediaParameters });\n\n return new Promise((resolve, reject) => {\n $.ajax({\n url: window.url(window.routes.rest.media.index),\n method : 'POST',\n dataType: 'json',\n contentType: 'application/json; charset=utf-8',\n data : JSON.stringify(mediaParameters.serialize()),\n timeout: 10000\n })\n .done((data, textStatus, jqXHR) => {\n if (window.featureManager.isEnabled('LuckyDay') && parameters.shuffle){\n data.items = data.items && _.shuffle(data.items);\n }\n if (window.featureManager.isEnabled('only-show-owned-content') && data.items) {\n data.items = data.items.filter((x) => x.isOwned === true);\n }\n this._fetchDone(data, textStatus, jqXHR);\n this.trigger('sync:end', this);\n resolve(data);\n })\n .fail((jqXHR, textStatus, errorThrown) => {\n this._fetchFail(jqXHR, textStatus, errorThrown);\n this.trigger('sync:end', this);\n reject(jqXHR);\n });\n });\n }\n\n _fetchDone(data, textStatus, jqXHR) {\n this.items.reset(data.items);\n this.trigger('sync:success', this, { data, textStatus, jqXHR });\n }\n\n _fetchFail(jqXHR, textStatus, errorThrown) {\n this.trigger('sync:fail', this, { jqXHR, textStatus, errorThrown });\n }\n}\n","export default class TitleActionButton extends Backbone.View {\n constructor({ type = 'link', action, style }) {\n super(...arguments);\n\n this.type = type;\n\n this.hasCustomAction = false;\n if (!!action) {\n this.action = action;\n this.hasCustomAction = true;\n }\n\n this.style = style;\n\n this.$button = $('');\n\n this.listenTo(this.model, 'change:titleState', this.render);\n\n this.$el.empty().append(this.$button);\n this.render();\n }\n\n get isButton() {\n return this.type === 'button';\n }\n\n get isLink() {\n return this.type === 'link';\n }\n\n get state() {\n return this.model.get('titleState');\n }\n\n render() {\n this.$button.off();\n this.$el.off();\n\n const buttonProps = this.getButtonProps();\n const attributes = buttonProps.attributes;\n if (_(attributes.href).isEmpty()) {\n attributes.role = 'button';\n } else {\n attributes.role = 'link';\n }\n\n this.$button.attr(attributes);\n this.$button.html(buttonProps.html);\n\n // Attach event handlers if either is true\n // - Button is not a link\n // - Custom action has been provided\n if (attributes.role !== 'link' || this.hasCustomAction) {\n this._attachEventHandlers(this.$button);\n }\n\n return this;\n }\n\n waiting(isWaiting = true) {\n if (isWaiting) {\n this.$button\n .off('.titleActionButton')\n .addClass('waiting')\n .attr('disabled', isWaiting)\n .append('
    ');\n } else {\n this.$button\n .removeClass('waiting')\n .attr('disabled', isWaiting)\n .find('.spinner')\n .remove();\n\n this._attachEventHandlers(this.$button);\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 _attachEventHandlers($el) {\n $el.off('.titleActionButton');\n\n $el.on('click.titleActionButton', (e) => {\n this.isSelectEvent(e) && this.action(e);\n });\n $el.on('keydown.titleActionButton', (e) => {\n this.isSelectEvent(e) && this.action(e);\n });\n }\n\n action(event) {\n this.isSelectEvent(event) && this._triggerTitleAction();\n }\n\n _triggerTitleAction() {\n this.model.trigger('title:action', {\n action: this.state,\n model: this.model,\n });\n }\n\n _getBorrowButtonText() {\n if (window.featureManager.isEnabled('geo-idc')) {\n return this.model.attributes.type.id === 'audiobook'\n ? window.html('listen')\n : window.html('read');\n }\n return window.html('borrow');\n }\n\n _getBorrowButtonAriaLabel(title) {\n if (window.featureManager.isEnabled('geo-idc')) {\n return this.model.attributes.type.id === 'audiobook'\n ? window.html('listenToTitle', { title })\n : window.html('readTitle', { title });\n }\n return window.html('borrowTitle', { title });\n }\n\n getButtonProps() {\n let buttonAttrs = {\n 'data-media-id': this.model.id,\n 'data-type': this.model.attributes.type.id,\n 'data-type-name':\n (this.model.attributes.type.id &&\n window.html(this.model.attributes.type.id)) ||\n '',\n tabindex: 0,\n disabled: false,\n };\n let html = (this.$button.html && this.$button.html()) || '';\n\n let title = this.model.attributes.title;\n\n let classes = ['TitleActionButton', 'u-allCaps'];\n\n if (this.isButton) {\n classes.push(...['button', 'radius', 'is-button', 'secondary']);\n }\n\n if (this.style === 'fill') {\n classes.push('fill');\n }\n\n switch (this.state) {\n case 'unavailable':\n classes.push('is-unavailable js-unavailable disabled');\n if (window.featureManager.isEnabled('geo-idc')) {\n classes.push('visible-unavailable');\n }\n html = `${window.html('availabilityUnavailable')}`;\n break;\n case 'nook':\n classes.push('is-nook js-nook');\n html = `${window.html('sendToNook')}`;\n break;\n case 'preview':\n if (this.isLink) {\n classes.push('secondary-color');\n }\n\n classes.push('is-preview js-preview secondary');\n html = `${window.html('demoMode.preview')}`;\n buttonAttrs['aria-label'] = window.html(\n 'demoMode.previewTitle',\n { title }\n );\n break;\n case 'borrow':\n if (this.isLink) {\n classes.push('secondary-color');\n }\n\n classes.push('is-borrow js-borrow secondary');\n html = `${this._getBorrowButtonText()}`;\n buttonAttrs['aria-label'] =\n this._getBorrowButtonAriaLabel(title);\n break;\n case 'borrowed':\n if (window.featureManager.isEnabled('geo-idc')) {\n classes.push('is-openBook big');\n html = `${window.html('openBook')}`;\n buttonAttrs.href = window.url(window.routes.mediaDownload, {\n format: this.model.attributes.formats[0].id,\n mediaId: this.model.id,\n });\n buttonAttrs['aria-label'] = window.html('openBookLabel', {\n titleName: title,\n });\n buttonAttrs.target = '_blank';\n buttonAttrs.rel = 'noreferrer';\n } else {\n classes.push('is-borrowed js-borrowed');\n html = `${window.html('goToLoans')}`;\n buttonAttrs.href = window.url(window.routes.accountLoans);\n }\n break;\n case 'hold':\n if (this.isLink) {\n classes.push('secondary-color-hover');\n }\n\n classes.push('is-hold js-hold');\n html = `${window.html('placeAHold')}`;\n buttonAttrs['aria-label'] = window.html('placeAHoldOnTitle', {\n title,\n });\n break;\n case 'onHold':\n if (this.isButton) {\n classes.push('primary');\n }\n\n classes.push('is-onHold js-onHold');\n html = `${window.html('goToHolds')}`;\n buttonAttrs.href = window.url(window.routes.accountHolds);\n break;\n case 'renew':\n classes.push('is-renew renewalButton');\n classes = classes.filter((c) => c !== 'u-allCaps');\n html = `${window.html(\n 'renewal.renewTitle',\n { title: '' }\n )}`;\n break;\n case 'requestAgain':\n classes.push('is-requestAgain renewalButton');\n classes = classes.filter((c) => c !== 'u-allCaps');\n html = `${window.html(\n 'accountLoans.requestAgain'\n )}`;\n break;\n case 'requested':\n classes.push('is-requested renewalButton');\n classes = classes.filter((c) => c !== 'u-allCaps');\n html = `${window.html(\n 'accountLoans.requested'\n )}`;\n break;\n case 'renewed':\n classes.push('is-renewed renewalButton');\n classes = classes.filter((c) => c !== 'u-allCaps');\n html = `${window.html(\n 'accountLoans.renewed'\n )}`;\n break;\n case 'listenNow':\n classes.push('is-listenNow');\n html = `${window.html('listenNow')}`;\n buttonAttrs.href = window.url(window.routes.mediaDownload, {\n format: 'audiobook-overdrive',\n mediaId: this.model.id,\n });\n buttonAttrs.target = '_blank';\n buttonAttrs.rel = 'noreferrer';\n break;\n case 'readNow':\n classes.push('is-readNow');\n html = `${window.html('readNow')}`;\n buttonAttrs.href = window.url(window.routes.mediaDownload, {\n format: 'ebook-overdrive',\n mediaId: this.model.id,\n });\n buttonAttrs.target = '_blank';\n buttonAttrs.rel = 'noreferrer';\n break;\n case 'addToApp':\n if (this.isLink) {\n classes.push('secondary-color-hover');\n }\n\n classes.push('is-addToApp');\n html = `${window.html('addToApp')}`;\n buttonAttrs.href = window.url(window.routes.mediaDownload, {\n format: this.model.get('addToAppFormat'),\n mediaId: this.model.id,\n });\n break;\n case 'waiting':\n if (this.isLink) {\n let dotSpinner = $(window.primaryActionLoadingGif);\n dotSpinner.css('width', 'inherit');\n html = dotSpinner;\n break;\n }\n\n classes.push('waiting secondary');\n buttonAttrs.disabled = true;\n html = 'working
    ';\n break;\n }\n\n buttonAttrs.class = classes.join(' ');\n\n return { attributes: buttonAttrs, html };\n }\n}\n","import TitleCardTemplate from './templates/TitleCard.html';\n\nimport TitleInfo from './views/TitleInfo';\nimport TitleActionButton from './TitleActionButton';\nimport WishListButton from './WishListButton';\nimport TitleHeaderBar from './TitleHeaderBar';\nimport Cover from './Cover';\n\nexport default class TitleCard extends Backbone.View {\n get className() {\n return 'title-container title';\n }\n\n template = TitleCardTemplate;\n\n constructor({ coverWidths, isInHero = false }) {\n super(...arguments);\n this._views = [];\n\n this.coverWidths = coverWidths;\n this.isInHero = isInHero;\n\n this.render();\n }\n\n render() {\n const { model, coverWidths, isInHero } = this;\n\n this.$el.empty();\n\n this._views.forEach((view) => view.remove());\n this._views = [];\n\n const $tmp = $(\n this.template({\n geoIdcClass: window.featureManager.isEnabled('geo-idc')\n ? 'geoIdc'\n : '',\n })\n );\n\n // TODO: This will not work with CSS transition animations\n if (this.model.isPlaceholder) {\n this.$el.addClass('placeholder');\n }\n\n if (!window.featureManager.isEnabled('geo-idc')) {\n this._views.push(\n (this.titleHeaderBar = new TitleHeaderBar({\n model,\n el: $tmp.find('.TitleHeaderBar'),\n }))\n );\n }\n\n this._views.push(\n (this.cover = new Cover({\n model,\n el: $tmp.find('.CoverImage'),\n coverWidths,\n isInHero,\n }))\n );\n\n this._views.push(\n (this.titleInfo = new TitleInfo({\n model,\n el: $tmp.find('.TitleInfo'),\n }))\n );\n\n this._views.push(\n (this.titleActionButton = new TitleActionButton({\n model,\n el: $tmp.find('.TitleAction'),\n }))\n );\n\n if (\n !window.featureManager.isEnabled('sampleOnlyMode') &&\n !(\n window.featureManager.isEnabled('magazine-rollup') &&\n this.model.isMagazine\n ) &&\n !window.featureManager.isEnabled('disableWishlist')\n ) {\n this._views.push(\n (this.wishlistButton = new WishListButton({\n model,\n el: $tmp.find('.TitleWishlist'),\n type: 'icon-only',\n }).render())\n );\n }\n\n this.$el.append($tmp);\n\n return this;\n }\n\n remove() {\n this._views.forEach((view) => view.remove());\n super.remove();\n }\n}\n","import ProcessForwardedAction from '../../util/title-actions/processForwardedAction';\nimport HashManager from '../../components/common/HashManager';\n\nimport TitleCard from './TitleCard';\nimport TitleActions from '../../title-actions/TitleActions';\nconst he = require('he');\n// This assumes that the calling code passes a Backbone.Collection with a model type of Title\nexport default class TitleCollectionView extends Backbone.View {\n constructor({\n bus,\n patronMediaItemsModel,\n View,\n attributes,\n coverWidths,\n isInHero,\n context,\n }) {\n super(...arguments);\n\n this._views = [];\n\n this.bus = bus;\n this.View = View || TitleCard;\n this.attributes = _.extend({}, attributes);\n this.coverWidths = coverWidths;\n this.isInHero = isInHero;\n this.context = context;\n\n this.titleActions = new TitleActions({ bus: this.bus, context });\n\n this.listenTo(this.collection, 'title:action', this._handleTitleAction);\n\n // TODO: >>> Remove this call and _updateMediaStates() logic and update dependant consumers to use PatronTitleStatus\n // Fetch patron data and trigger state updates.\n // Only fetch patron data if authed and has linked cards.\n if (\n patronMediaItemsModel &&\n window.OverDrive.isAuthenticated &&\n window.OverDrive.hasLinkedCards\n ) {\n patronMediaItemsModel.initialFetch().then((patronData) => {\n this._updateMediaStates(patronData);\n });\n }\n\n this.render();\n }\n get tagName() {\n return 'ul';\n }\n\n _handleTitleAction({ action, model }) {\n this.titleActions.perform(action, model);\n }\n\n _updateMediaStates(patronData) {\n let ids = [];\n _(_.values(patronData)).each((item) => {\n if (_.isArray(item)) {\n ids.push(...item);\n } else if (_.isObject(item)) {\n ids.push(..._.keys(item).map(Number));\n } else {\n ids.push(item);\n }\n });\n ids = _.uniq(ids);\n\n ids.forEach((id) => {\n const model = this.collection.get(id);\n\n if (model) {\n model.updatePatronState(patronData);\n }\n });\n\n this._performForwardedAction();\n }\n\n render() {\n let frag = document.createDocumentFragment();\n\n this._views.forEach((view) => view.remove());\n this._views = [];\n\n this.collection.forEach((title) => {\n title.set('title', he.decode(title.get('title')));\n\n title.setContext(this.context);\n\n let view = new this.View({\n model: title,\n bus: this.bus,\n coverWidths: this.coverWidths,\n isInHero: this.isInHero,\n });\n\n frag.appendChild(\n $('
  • ', {\n class: 'js-titleCard Item',\n }).append(view.$el)[0]\n );\n\n this._views.push(view);\n });\n\n this.$el.attr(this.attributes);\n this.$el.empty().append(frag);\n }\n\n remove() {\n this._views.forEach((view) => view.remove());\n super.remove();\n }\n\n _performForwardedAction() {\n if (\n window.OverDrive.isAuthenticated &&\n window.OverDrive.hasLinkedCards &&\n HashManager.get('action')\n ) {\n const forwardedAction = new ProcessForwardedAction(\n this.collection,\n this.bus\n );\n forwardedAction.executeAction();\n window.forwardedAction = forwardedAction;\n }\n }\n}\n","const Backbone = window.Backbone;\n\nconst TitleHeaderBar = Backbone.View.extend({\n initialize() {\n this.listenTo(this.model, 'change', this.render);\n\n this.$titleHeaderBar = $('
    ');\n\n this.render();\n },\n\n render() {\n const a = this.returnState();\n\n this.$titleHeaderBar = $('
    ', a.container).append(\n $('', a.link)\n );\n this.$el.html(this.$titleHeaderBar);\n this.$el.attr('aria-hidden', 'true');\n\n return this;\n },\n\n returnState() {\n let banner = {\n container: {\n classes: ['title-header-bar', 'u-allCaps'],\n },\n link: {\n text: '',\n href: this.model.titleDetailsUrl,\n tabindex: -1,\n },\n };\n\n this.action = this.model.get('titleState');\n\n switch (this.action) {\n case 'unavailable':\n banner.container.classes.push(\n 'is-unavailable unavailable-title'\n );\n banner.link.text = window.html('availabilityUnavailable');\n break;\n case 'nook':\n banner.container.classes.push(\n 'is-nook available-title secondary-background'\n );\n banner.link.text = window.html('availabilityAvailable');\n break;\n case 'borrow':\n banner.container.classes.push(\n 'available-title secondary-background is-borrow'\n );\n banner.link.text = window.html('availabilityAvailable');\n break;\n case 'borrowed':\n case 'addToApp':\n case 'listenNow':\n case 'readNow':\n banner.container.classes.push(\n 'is-borrowed available-title secondary-background'\n );\n banner.link.text = window.html('borrowed');\n break;\n case 'hold':\n banner.container.classes.push('is-hold unavailable-title');\n banner.link.text = this.model.get('isPreReleaseTitle')\n ? window.html('availabilityComingSoon')\n : window.text('availabilityWaitList');\n break;\n case 'onHold':\n banner.container.classes.push('is-onHold unavailable-title');\n banner.link.text = window.html('onHold');\n break;\n case 'waiting':\n banner.container.classes = this.$titleHeaderBar\n .attr('class')\n .split(' ');\n banner.link.text = this.$titleHeaderBar.find('a:first').text();\n break;\n }\n\n banner.container.class = banner.container.classes.join(' ');\n\n return banner;\n },\n});\n\nexport default TitleHeaderBar;\n","import WishListButtonTemplate from './templates/WishListButton.html';\n\nexport default class WishListButton extends Backbone.View {\n get contrastClass() {\n return this.contrast === 'default' ? '' : 'contrast-alternate';\n }\n\n getAriaLabel(isRerender) {\n const title = this.model.attributes.title;\n if (isRerender) {\n return this.model.get('wishlistState') === 'wishlistAdd'\n ? window.html('titleRemovedFromWishList', { title })\n : window.html('titleAddedToWishList', { title });\n } else {\n return this.model.get('wishlistState') === 'wishlistAdd'\n ? window.html('addTitleToWishList', { title })\n : window.html('removeTitleFromWishList', { title });\n }\n }\n\n get iconClass() {\n return this.model.get('wishlistState') === 'wishlistAdd'\n ? 'icon-wish-list'\n : 'icon-wish-list-added';\n }\n\n get text() {\n if (this.type === 'icon-only') {\n return '';\n }\n return this.model.get('wishlistState') === 'wishlistAdd'\n ? window.html('addToWishList')\n : window.html('removeFromWishList');\n }\n\n get ga() {\n const isAdd = this.model.get('wishlistState') === 'wishlistAdd';\n if (isAdd) {\n return {\n mediaId: this.model.attributes.id,\n formatType: this.model.attributes.type.id,\n };\n }\n return null;\n }\n\n constructor({ type, contrast }) {\n super(...arguments);\n this.type = type || 'icon-only';\n this.contrast = contrast || 'default';\n\n this.listenTo(this.model, 'change:wishlistState', this.render);\n this.type = type || 'icon-only';\n }\n\n events() {\n return { click: '_handleClick' };\n }\n\n render() {\n if (!this.el || this.$el.length < 1) {\n return; // we have no target to render anything into\n }\n\n // retain focus on rerender\n const isRerender =\n this.el.querySelector('.WishListButton') === document.activeElement;\n\n this.$el.empty();\n\n const buttonHtml = WishListButtonTemplate({\n ga: this.ga,\n contrastClass: this.contrastClass,\n ariaLabel: this.getAriaLabel(isRerender),\n iconClass: this.iconClass,\n text: this.text,\n iconAnimationClasses: window.OverDrive.isTolinoDevice\n ? ''\n : 'animated bounceIn',\n });\n\n this.$el.append(buttonHtml);\n\n if (isRerender) {\n this.el.querySelector('.WishListButton').focus();\n }\n\n return this;\n }\n\n _handleClick() {\n this.model.trigger('title:action', {\n action: 'wish',\n model: this.model,\n });\n if (!window.OverDrive.isTolinoDevice) {\n this._animate();\n }\n }\n\n _animate() {\n this.$el\n .find('i')\n .removeClass('animated bounceIn bounceOut')\n .addClass('animated bounceOut');\n }\n}\n","import TitleState from '../../../title-actions/TitleState';\nimport MediaInterface from '../MediaInterface';\nimport { toStaticUrl } from '../../../../../lib/assetMapper';\nimport { getOptimizedCovers } from '../../../../../lib/getOptimizedCover-ts';\n\nexport default class Title extends Backbone.Model {\n get idAttribute() {\n return 'id';\n }\n\n defaults() {\n return {\n id: 0,\n firstCreatorName: null,\n title: 'Title',\n firstCreatorId: 0,\n formats: [],\n isOwned: false,\n isHoldable: false,\n isPreReleaseTitle: false,\n isAvailable: false,\n starRating: 0.0,\n userStarRating: 0,\n starRatingCount: 0,\n holdsRatio: 0,\n holdsCount: 0,\n ownedCopies: 0,\n availableCopies: 0,\n luckyDayOwnedCopies: 0,\n luckyDayAvailableCopies: 0,\n estimatedReleaseDate: '',\n availabilityType: '',\n description: '',\n sample: {}, // Sample\n publisher: {}, // Publisher\n type: { id: 'ebook' }, // Type\n covers: {}, // Covers\n parentMagazineTitleId: 0,\n ratings: {\n maturityLevel: {},\n },\n // Custom Lightning Properties\n titleState: 'waiting',\n wishlistState: 'wishlistAdd',\n isInHistory: false,\n addToAppFormat: null,\n isOnHold: false,\n isReleasedHold: false,\n isBorrowed: false,\n isMostRecentMagazine: false,\n };\n }\n\n get isPlaceholder() {\n return this.get('placeholder');\n }\n\n setContext(context) {\n this.context = context;\n }\n\n constructor(model, options, context) {\n let { patronItems } = options || {};\n\n super(model, options);\n\n this.setContext(context);\n\n this.set(\n _.extend({}, model, { titleState: this._getState(patronItems) })\n );\n if (!this.isPlaceholder) {\n this.link(window.globalEvents);\n }\n }\n\n link(bus) {\n // Unlink the old bus if there is one\n if (this.bus) {\n this.stopListening(this.bus, 'title:update');\n this.bus = null;\n }\n\n // Attach new bus if passed\n if (bus) {\n this.bus = bus;\n this.listenTo(this.bus, 'title:update', (titleModel) => {\n this._applyUpdates(titleModel);\n });\n }\n\n return this;\n }\n\n _applyUpdates(titleModel) {\n if (titleModel !== this && titleModel.id === this.id) {\n super.set(titleModel.changedAttributes());\n }\n }\n\n set() {\n super.set(...arguments);\n this.bus && this.bus.trigger('title:update', this);\n }\n\n // An example of this can be seen in CollectionHightlight.js:61 (where TitleCollectionView gets new'ed up)\n get contextCollectionId() {\n return this.context && this.context.collectionDefinition\n ? this.context.collectionDefinition.id\n : undefined;\n }\n\n get titleDetailsUrl() {\n // LHTNG-3018 Reference optional contextCollectionId value when creating a title details link\n let props = { id: this.id };\n\n if (this.contextCollectionId) {\n props.cid = this.contextCollectionId;\n }\n\n return window.url(window.routes.mediaId, props);\n }\n\n get hasLuckyDayCopies() {\n return (\n window.featureManager.isEnabled('LuckyDay') &&\n this.get('luckyDayOwnedCopies') > 0\n );\n }\n\n get allCopiesAreLuckyDay() {\n return this.hasLuckyDayCopies && this.get('ownedCopies') === 0;\n }\n\n get isLuckyDayCheckout() {\n return (\n this.hasAvailableLuckyDayCopies &&\n this.get('availableCopies') === 0 &&\n !this.get('isReleasedHold')\n );\n }\n\n get canPlaceHold() {\n return (\n this.get('isHoldable') &&\n !this.get('isOnHold') &&\n window.featureManager.isEnabled('content-holds')\n );\n }\n\n get isAvailable() {\n return this.get('isAvailable') || this.hasAvailableLuckyDayCopies;\n }\n\n get hasAvailableLuckyDayCopies() {\n return (\n this.hasLuckyDayCopies && this.get('luckyDayAvailableCopies') > 0\n );\n }\n\n get isExpired() {\n return (\n this.get('isOwned') &&\n (this.isExpiredSuTitle || this.isExpiredNonSuTitle)\n );\n }\n\n get isExpiredSuTitle() {\n return (\n this.get('availabilityType') === 'always' &&\n !this.get('isPreReleaseTitle') &&\n !this.get('isAvailable')\n );\n }\n\n get isExpiredNonSuTitle() {\n return (\n this.get('availabilityType') !== 'always' &&\n !this.get('ownedCopies')\n );\n }\n\n updatePatronState(patronItems, options = {}) {\n this.set(\n {\n titleState: this._getState(patronItems),\n wishlistState: TitleState.isOnWishlist(\n this.attributes,\n patronItems\n )\n ? 'wishlistRemove'\n : 'wishlistAdd',\n userStarRating: TitleState.starRating(\n this.attributes,\n patronItems\n ), // 0 if not rated\n },\n options\n );\n const readingHistoryState = TitleState.isOnReadingHistory(\n this.attributes,\n patronItems\n );\n this.set('isInHistory', readingHistoryState, options || {});\n\n const userStarRating = TitleState.starRating(\n this.attributes,\n patronItems\n );\n this.set('userStarRating', userStarRating, options || {}); // 0 if not rated\n }\n\n getCover(desiredSize) {\n const covers = _.map(this.get('covers'), (cover) => cover); // maps to collection of covers\n return getOptimizedCovers(covers, desiredSize);\n }\n\n getCoverSrc(desiredSize) {\n const cover = this.getCover(desiredSize);\n return (cover && cover.href) || toStaticUrl('img/no-cover_en_US.jpg');\n }\n\n getCurrentAvailability() {\n return $.ajax({\n url: window.url(window.routes.mediaAvailabilityId, { id: this.id }),\n type: 'GET',\n timeout: 0,\n });\n }\n\n getMissingAttribute(attribute) {\n if (!this._mediaInterface) {\n this._mediaInterface = new MediaInterface();\n }\n return this._mediaInterface\n .search({ titleId: this.get('id') })\n .then((response) => {\n this.set(attribute, response[attribute]);\n return Promise.resolve();\n });\n }\n\n availabilityText() {\n let action = this.get('titleState');\n let availabilityText = '';\n\n switch (action) {\n case 'unavailable':\n availabilityText = window.html('availabilityUnavailable');\n break;\n case 'nook':\n availabilityText = window.html('availabilityAvailable');\n break;\n case 'borrow' || 'preview':\n availabilityText = window.html('availabilityAvailable');\n break;\n case 'borrowed':\n case 'addToApp':\n case 'listenNow':\n case 'readNow':\n availabilityText = window.html('borrowed');\n break;\n case 'hold':\n if (this.get('isPreReleaseTitle')) {\n availabilityText = window.html('availabilityComingSoon');\n break;\n }\n\n availabilityText = this.get('isPreReleaseTitle')\n ? window.html('availabilityComingSoon')\n : window.html('availabilityWaitList');\n break;\n case 'onHold':\n availabilityText = window.html('onHold');\n break;\n case 'waiting':\n availabilityText = window.html('loading');\n break;\n }\n\n return availabilityText;\n }\n\n _getState(patronItems) {\n this.setPatronState(patronItems);\n return TitleState.getState(this.attributes, patronItems);\n }\n\n setPatronState(patronItems) {\n this.set({\n isOnHold: patronItems && patronItems.onHolds.indexOf(this.id) > -1,\n });\n this.set({\n isBorrowed:\n patronItems && patronItems.onCheckouts.indexOf(this.id) > -1,\n });\n }\n\n sanitizedDesc() {\n let desc = this.get('description').replace(\n /()|(\\r?\\n|\\r)/gim,\n ' '\n );\n return $(`
    ${desc}
    `).text();\n }\n\n getTitleAsync(mediaId, resolve, reject) {\n $.ajax({\n url: window.url(window.routes.mediaInfoId, { id: mediaId }),\n type: 'GET',\n timeout: 10000,\n success: (data) => {\n this.set(data);\n this.set('titleState', this._getState(null));\n resolve();\n },\n fail: (err) => {\n reject(err);\n },\n });\n }\n\n get isMagazine() {\n return this.get('type').id === 'magazine';\n }\n}\n","\nimport Title from './Title';\n\nexport default class TitleCollection extends Backbone.Collection {\n get model() { return Title; }\n}\n\n","const { featureManager, html, url, routes } = window;\n\nexport default ({\n isOwned,\n relatedTitlesPageUrl,\n id,\n rid,\n typeId,\n title,\n alignment,\n sampleHref,\n sampleText,\n historyActionLabel,\n historyActionText,\n historyEnabled,\n gaHistoryAction,\n seriesSearchUrl,\n hasMediaDoFormat,\n}) => `\n
    `;\n","export default ({ media, src, href, coverColor, noSampleClass, srcset }) => `\n
    \n \n \n \n
    `;\n","import { toStaticUrl } from '../../../../../lib/assetMapper';\n\nexport default ({ media, href, isInHero, coverWidth, coverHeight, creatorText }) => `\n\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","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","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 FeaturedCollectionView from '../components/featured_collections/FeaturedCollectionView';\n\nwindow.featuredCollectionView = new FeaturedCollectionView ({\n el : '.Carousels',\n viewName : window.viewName,\n bus : window.globalEvents,\n room : window.OverDrive.currentRoom,\n patronSettings : window.patronSettings\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","// ES6 version of settle\nPromise.settle = function(promises) {\n class PromiseInspection {\n constructor(fulfilled, value) {\n this.fulfilled = fulfilled;\n this.value = value;\n }\n }\n\n return Promise.all(promises.map((p) =>\n // make sure any values are wrapped in a promise\n Promise.resolve(p).then((val) => new PromiseInspection(true, val)).catch((err) => new PromiseInspection(false, err))));\n};\n\n// wrapping Promise notation around an ajax call\nPromise.ajax = function(options) {\n return new Promise((resolve, reject) =>\n $.ajax(options)\n .done((response) => resolve(response))\n .fail((xhr, status, err) => reject(err))\n );\n};\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"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy55YXJuL2NhY2hlL2Jyb3dzZXItcGFjay1ucG0tNi4xLjAtNjc1NTdlMDExYi05ZTU5OTNkM2VlLnppcC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvaGUtbnBtLTEuMi4wLTNiNzNhMmZmMDctM2Q0ZDZiYWJjYy56aXAvbm9kZV9tb2R1bGVzL2hlL2hlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvcXVlcnlzdHJpbmctZXMzLW5wbS0wLjIuMS1mNDYzMmYyNzYwLTY5MWU4ZDZiOGIuemlwL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZGVjb2RlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvcXVlcnlzdHJpbmctZXMzLW5wbS0wLjIuMS1mNDYzMmYyNzYwLTY5MWU4ZDZiOGIuemlwL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZW5jb2RlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvcXVlcnlzdHJpbmctZXMzLW5wbS0wLjIuMS1mNDYzMmYyNzYwLTY5MWU4ZDZiOGIuemlwL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCIuLi8uLi8ueWFybi9jYWNoZS91bmRlcnNjb3JlLW5wbS0xLjEzLjYtM2ViZTlkOTJmYi1kNWNlZGQxNGE5LnppcC9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS91bmRlcnNjb3JlLXVtZC5qcyIsImJ1c2luZXNzLW9iamVjdHMvR2VuZXJhdGVkQ29sbGVjdGlvbkRldGFpbHMuanMiLCJsaWIvY29sb3JVdGlsaXR5LmpzIiwibGliL2dldE9wdGltaXplZENvdmVyLXRzLmpzIiwibW9kZWxzL2Rhby9NZWRpYVBhcmFtZXRlcnMuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbGxlY3Rpb25fY2FtcGFpZ25fcGFnZS9Db2xsZWN0aW9uRGVmaW5pdGlvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvY29sbGVjdGlvbl9jYW1wYWlnbl9wYWdlL0NvbGxlY3Rpb25IaWdobGlnaHRGYWN0b3J5LmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9jb2xsZWN0aW9uX2NhbXBhaWduX3BhZ2UvQ29sbGVjdGlvbk1hbmFnZXIuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbGxlY3Rpb25fY2FtcGFpZ25fcGFnZS9QYWdlTWFuYWdlci5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvY29sbGVjdGlvbl9oaWdobGlnaHQvdGVtcGxhdGVzL2NvbGxlY3Rpb25faGlnaGxpZ2h0Lmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbGxlY3Rpb25faGlnaGxpZ2h0L3ZpZXdzL0NvbGxlY3Rpb25IaWdobGlnaHQuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbGxlY3Rpb25faGlnaGxpZ2h0X3NsYW50ZWQvU2xhbnRlZENvbGxlY3Rpb25IaWdodGxpZ2h0Lmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbGxlY3Rpb25faGlnaGxpZ2h0X3NsYW50ZWQvU2xhbnRlZENvbGxlY3Rpb25IaWdodGxpZ2h0LmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9jb21tb24vSGFzaE1hbmFnZXIuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbW1vbi90ZW1wbGF0ZXMvRXJyb3IuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvZmVhdHVyZWRfY29sbGVjdGlvbnMvRmVhdHVyZWRDb2xsZWN0aW9uVmlldy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvQ29udGV4dE1lbnUuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL0NvdmVyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS9NZWRpYUludGVyZmFjZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvVGl0bGVBY3Rpb25CdXR0b24uanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL1RpdGxlQ2FyZC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvVGl0bGVDb2xsZWN0aW9uVmlldy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvVGl0bGVIZWFkZXJCYXIuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL1dpc2hMaXN0QnV0dG9uLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS9tb2RlbHMvVGl0bGUuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL21vZGVscy9UaXRsZUNvbGxlY3Rpb24uanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9Db250ZXh0TWVudS5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS90ZW1wbGF0ZXMvQ292ZXIuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL05vQ292ZXIuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL1RpdGxlQXV0aG9yLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9UaXRsZUNhcmQuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL1RpdGxlRm9ybWF0QmFkZ2UuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL1RpdGxlTmFtZS5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS90ZW1wbGF0ZXMvV2lzaExpc3RCdXR0b24uaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm8vVGl0bGVBdXRob3IuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9UaXRsZUVkaXRpb24uanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9UaXRsZUZvcm1hdEJhZGdlLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm8vVGl0bGVOYW1lLmpzIiwicHVibGljL2VjbWFzY3JpcHQvbW9kZWxzL1BhdHJvblRpdGxlU3RhdHVzLmpzIiwicHVibGljL2VjbWFzY3JpcHQvcGFnZXMvZmVhdHVyZWRfY29sbGVjdGlvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L3RpdGxlLWFjdGlvbnMvVGl0bGVBY3Rpb25zLmpzIiwicHVibGljL2VjbWFzY3JpcHQvdGl0bGUtYWN0aW9ucy9UaXRsZVN0YXRlLmpzIiwicHVibGljL2VjbWFzY3JpcHQvdXRpbC9Qcm9taXNlLmpzIiwicHVibGljL2VjbWFzY3JpcHQvdXRpbC90aXRsZS1hY3Rpb25zL3Byb2Nlc3NGb3J3YXJkZWRBY3Rpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN6VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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SyxLQUFMLEdBQWEsRUFBRSxJQUFGLENBQ1QsS0FBSyxVQURJLEVBRVQsVUFBQyxLQUFEO0FBQUEsMkJBQVcsTUFBTSxFQUFOLEtBQWEsTUFBSyxPQUE3QjtBQUFBLGlCQUZTLENBQWI7QUFJSDs7QUFFRCxnQkFBSSxlQUFlLElBQUkseUJBQUosQ0FBaUIsRUFBRSxLQUFLLEtBQUssR0FBWixFQUFqQixDQUFuQjs7QUFFQSxnQkFBSSxLQUFLLEtBQVQsRUFBZ0I7QUFDWjtBQUNBLHlDQUFZLE1BQVosQ0FBbUIsUUFBbkI7QUFDQSxxQkFBSyxLQUFMLENBQVcsR0FBWCxDQUFlLGdCQUFmLEVBQWlDLEtBQUssTUFBdEM7QUFDQSw2QkFBYSxPQUFiLENBQXFCLEtBQUssTUFBMUIsRUFBa0MsS0FBSyxLQUF2QztBQUNILGFBTEQsTUFLTztBQUNIO0FBQ0Esb0JBQUksUUFBUSxJQUFJLGtCQUFKLEVBQVo7QUFDQSxvQkFBSSxVQUFVLElBQUksT0FBSixDQUFZLFVBQUMsT0FBRCxFQUFVLE1BQVYsRUFBcUI7QUFDM0MsMEJBQU0sYUFBTixDQUFvQixNQUFLLE9BQXpCLEVBQWtDLE9BQWxDLEVBQTJDLE1BQTNDO0FBQ0gsaUJBRmEsQ0FBZDs7QUFJQSx3QkFBUSxJQUFSLENBQWEsWUFBTTtBQUNmLDBCQUFLLEtBQUwsSUFBYyxNQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsZ0JBQWYsRUFBaUMsTUFBSyxNQUF0QyxDQUFkO0FBQ0EsaUNBQWEsT0FBYixDQUFxQixNQUFLLE1BQTFCLEVBQWtDLEtBQWxDO0FBQ0EsNkNBQVksTUFBWixDQUFtQixRQUFuQjtBQUNILGlCQUpEO0FBS0g7QUFDSjs7Ozs7O3FCQWhEZ0Isc0IiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL2hlIHYxLjIuMCBieSBAbWF0aGlhcyB8IE1JVCBsaWNlbnNlICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZXMgYGV4cG9ydHNgLlxuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzO1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLlxuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgLCBmcm9tIE5vZGUuanMgb3IgQnJvd3NlcmlmaWVkIGNvZGUsXG5cdC8vIGFuZCB1c2UgaXQgYXMgYHJvb3RgLlxuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8vIEFsbCBhc3RyYWwgc3ltYm9scy5cblx0dmFyIHJlZ2V4QXN0cmFsU3ltYm9scyA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdL2c7XG5cdC8vIEFsbCBBU0NJSSBzeW1ib2xzIChub3QganVzdCBwcmludGFibGUgQVNDSUkpIGV4Y2VwdCB0aG9zZSBsaXN0ZWQgaW4gdGhlXG5cdC8vIGZpcnN0IGNvbHVtbiBvZiB0aGUgb3ZlcnJpZGVzIHRhYmxlLlxuXHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCN0YWJsZS1jaGFycmVmLW92ZXJyaWRlc1xuXHR2YXIgcmVnZXhBc2NpaVdoaXRlbGlzdCA9IC9bXFx4MDEtXFx4N0ZdL2c7XG5cdC8vIEFsbCBCTVAgc3ltYm9scyB0aGF0IGFyZSBub3QgQVNDSUkgbmV3bGluZXMsIHByaW50YWJsZSBBU0NJSSBzeW1ib2xzLCBvclxuXHQvLyBjb2RlIHBvaW50cyBsaXN0ZWQgaW4gdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgb3ZlcnJpZGVzIHRhYmxlIG9uXG5cdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3RhYmxlLWNoYXJyZWYtb3ZlcnJpZGVzLlxuXHR2YXIgcmVnZXhCbXBXaGl0ZWxpc3QgPSAvW1xceDAxLVxcdFxceDBCXFxmXFx4MEUtXFx4MUZcXHg3RlxceDgxXFx4OERcXHg4RlxceDkwXFx4OURcXHhBMC1cXHVGRkZGXS9nO1xuXG5cdHZhciByZWdleEVuY29kZU5vbkFzY2lpID0gLzxcXHUyMEQyfD1cXHUyMEU1fD5cXHUyMEQyfFxcdTIwNUZcXHUyMDBBfFxcdTIxOURcXHUwMzM4fFxcdTIyMDJcXHUwMzM4fFxcdTIyMjBcXHUyMEQyfFxcdTIyMjlcXHVGRTAwfFxcdTIyMkFcXHVGRTAwfFxcdTIyM0NcXHUyMEQyfFxcdTIyM0RcXHUwMzMxfFxcdTIyM0VcXHUwMzMzfFxcdTIyNDJcXHUwMzM4fFxcdTIyNEJcXHUwMzM4fFxcdTIyNERcXHUyMEQyfFxcdTIyNEVcXHUwMzM4fFxcdTIyNEZcXHUwMzM4fFxcdTIyNTBcXHUwMzM4fFxcdTIyNjFcXHUyMEU1fFxcdTIyNjRcXHUyMEQyfFxcdTIyNjVcXHUyMEQyfFxcdTIyNjZcXHUwMzM4fFxcdTIyNjdcXHUwMzM4fFxcdTIyNjhcXHVGRTAwfFxcdTIyNjlcXHVGRTAwfFxcdTIyNkFcXHUwMzM4fFxcdTIyNkFcXHUyMEQyfFxcdTIyNkJcXHUwMzM4fFxcdTIyNkJcXHUyMEQyfFxcdTIyN0ZcXHUwMzM4fFxcdTIyODJcXHUyMEQyfFxcdTIyODNcXHUyMEQyfFxcdTIyOEFcXHVGRTAwfFxcdTIyOEJcXHVGRTAwfFxcdTIyOEZcXHUwMzM4fFxcdTIyOTBcXHUwMzM4fFxcdTIyOTNcXHVGRTAwfFxcdTIyOTRcXHVGRTAwfFxcdTIyQjRcXHUyMEQyfFxcdTIyQjVcXHUyMEQyfFxcdTIyRDhcXHUwMzM4fFxcdTIyRDlcXHUwMzM4fFxcdTIyREFcXHVGRTAwfFxcdTIyREJcXHVGRTAwfFxcdTIyRjVcXHUwMzM4fFxcdTIyRjlcXHUwMzM4fFxcdTI5MzNcXHUwMzM4fFxcdTI5Q0ZcXHUwMzM4fFxcdTI5RDBcXHUwMzM4fFxcdTJBNkRcXHUwMzM4fFxcdTJBNzBcXHUwMzM4fFxcdTJBN0RcXHUwMzM4fFxcdTJBN0VcXHUwMzM4fFxcdTJBQTFcXHUwMzM4fFxcdTJBQTJcXHUwMzM4fFxcdTJBQUNcXHVGRTAwfFxcdTJBQURcXHVGRTAwfFxcdTJBQUZcXHUwMzM4fFxcdTJBQjBcXHUwMzM4fFxcdTJBQzVcXHUwMzM4fFxcdTJBQzZcXHUwMzM4fFxcdTJBQ0JcXHVGRTAwfFxcdTJBQ0NcXHVGRTAwfFxcdTJBRkRcXHUyMEU1fFtcXHhBMC1cXHUwMTEzXFx1MDExNi1cXHUwMTIyXFx1MDEyNC1cXHUwMTJCXFx1MDEyRS1cXHUwMTREXFx1MDE1MC1cXHUwMTdFXFx1MDE5MlxcdTAxQjVcXHUwMUY1XFx1MDIzN1xcdTAyQzZcXHUwMkM3XFx1MDJEOC1cXHUwMkREXFx1MDMxMVxcdTAzOTEtXFx1MDNBMVxcdTAzQTMtXFx1MDNBOVxcdTAzQjEtXFx1MDNDOVxcdTAzRDFcXHUwM0QyXFx1MDNENVxcdTAzRDZcXHUwM0RDXFx1MDNERFxcdTAzRjBcXHUwM0YxXFx1MDNGNVxcdTAzRjZcXHUwNDAxLVxcdTA0MENcXHUwNDBFLVxcdTA0NEZcXHUwNDUxLVxcdTA0NUNcXHUwNDVFXFx1MDQ1RlxcdTIwMDItXFx1MjAwNVxcdTIwMDctXFx1MjAxMFxcdTIwMTMtXFx1MjAxNlxcdTIwMTgtXFx1MjAxQVxcdTIwMUMtXFx1MjAxRVxcdTIwMjAtXFx1MjAyMlxcdTIwMjVcXHUyMDI2XFx1MjAzMC1cXHUyMDM1XFx1MjAzOVxcdTIwM0FcXHUyMDNFXFx1MjA0MVxcdTIwNDNcXHUyMDQ0XFx1MjA0RlxcdTIwNTdcXHUyMDVGLVxcdTIwNjNcXHUyMEFDXFx1MjBEQlxcdTIwRENcXHUyMTAyXFx1MjEwNVxcdTIxMEEtXFx1MjExM1xcdTIxMTUtXFx1MjExRVxcdTIxMjJcXHUyMTI0XFx1MjEyNy1cXHUyMTI5XFx1MjEyQ1xcdTIxMkRcXHUyMTJGLVxcdTIxMzFcXHUyMTMzLVxcdTIxMzhcXHUyMTQ1LVxcdTIxNDhcXHUyMTUzLVxcdTIxNUVcXHUyMTkwLVxcdTIxOUJcXHUyMTlELVxcdTIxQTdcXHUyMUE5LVxcdTIxQUVcXHUyMUIwLVxcdTIxQjNcXHUyMUI1LVxcdTIxQjdcXHUyMUJBLVxcdTIxREJcXHUyMUREXFx1MjFFNFxcdTIxRTVcXHUyMUY1XFx1MjFGRC1cXHUyMjA1XFx1MjIwNy1cXHUyMjA5XFx1MjIwQlxcdTIyMENcXHUyMjBGLVxcdTIyMTRcXHUyMjE2LVxcdTIyMThcXHUyMjFBXFx1MjIxRC1cXHUyMjM4XFx1MjIzQS1cXHUyMjU3XFx1MjI1OVxcdTIyNUFcXHUyMjVDXFx1MjI1Ri1cXHUyMjYyXFx1MjI2NC1cXHUyMjhCXFx1MjI4RC1cXHUyMjlCXFx1MjI5RC1cXHUyMkE1XFx1MjJBNy1cXHUyMkIwXFx1MjJCMi1cXHUyMkJCXFx1MjJCRC1cXHUyMkRCXFx1MjJERS1cXHUyMkUzXFx1MjJFNi1cXHUyMkY3XFx1MjJGOS1cXHUyMkZFXFx1MjMwNVxcdTIzMDZcXHUyMzA4LVxcdTIzMTBcXHUyMzEyXFx1MjMxM1xcdTIzMTVcXHUyMzE2XFx1MjMxQy1cXHUyMzFGXFx1MjMyMlxcdTIzMjNcXHUyMzJEXFx1MjMyRVxcdTIzMzZcXHUyMzNEXFx1MjMzRlxcdTIzN0NcXHUyM0IwXFx1MjNCMVxcdTIzQjQtXFx1MjNCNlxcdTIzREMtXFx1MjNERlxcdTIzRTJcXHUyM0U3XFx1MjQyM1xcdTI0QzhcXHUyNTAwXFx1MjUwMlxcdTI1MENcXHUyNTEwXFx1MjUxNFxcdTI1MThcXHUyNTFDXFx1MjUyNFxcdTI1MkNcXHUyNTM0XFx1MjUzQ1xcdTI1NTAtXFx1MjU2Q1xcdTI1ODBcXHUyNTg0XFx1MjU4OFxcdTI1OTEtXFx1MjU5M1xcdTI1QTFcXHUyNUFBXFx1MjVBQlxcdTI1QURcXHUyNUFFXFx1MjVCMVxcdTI1QjMtXFx1MjVCNVxcdTI1QjhcXHUyNUI5XFx1MjVCRC1cXHUyNUJGXFx1MjVDMlxcdTI1QzNcXHUyNUNBXFx1MjVDQlxcdTI1RUNcXHUyNUVGXFx1MjVGOC1cXHUyNUZDXFx1MjYwNVxcdTI2MDZcXHUyNjBFXFx1MjY0MFxcdTI2NDJcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2QVxcdTI2NkQtXFx1MjY2RlxcdTI3MTNcXHUyNzE3XFx1MjcyMFxcdTI3MzZcXHUyNzU4XFx1Mjc3MlxcdTI3NzNcXHUyN0M4XFx1MjdDOVxcdTI3RTYtXFx1MjdFRFxcdTI3RjUtXFx1MjdGQVxcdTI3RkNcXHUyN0ZGXFx1MjkwMi1cXHUyOTA1XFx1MjkwQy1cXHUyOTEzXFx1MjkxNlxcdTI5MTktXFx1MjkyMFxcdTI5MjMtXFx1MjkyQVxcdTI5MzNcXHUyOTM1LVxcdTI5MzlcXHUyOTNDXFx1MjkzRFxcdTI5NDVcXHUyOTQ4LVxcdTI5NEJcXHUyOTRFLVxcdTI5NzZcXHUyOTc4XFx1Mjk3OVxcdTI5N0ItXFx1Mjk3RlxcdTI5ODVcXHUyOTg2XFx1Mjk4Qi1cXHUyOTk2XFx1Mjk5QVxcdTI5OUNcXHUyOTlEXFx1MjlBNC1cXHUyOUI3XFx1MjlCOVxcdTI5QkJcXHUyOUJDXFx1MjlCRS1cXHUyOUM1XFx1MjlDOVxcdTI5Q0QtXFx1MjlEMFxcdTI5REMtXFx1MjlERVxcdTI5RTMtXFx1MjlFNVxcdTI5RUJcXHUyOUY0XFx1MjlGNlxcdTJBMDAtXFx1MkEwMlxcdTJBMDRcXHUyQTA2XFx1MkEwQ1xcdTJBMERcXHUyQTEwLVxcdTJBMTdcXHUyQTIyLVxcdTJBMjdcXHUyQTI5XFx1MkEyQVxcdTJBMkQtXFx1MkEzMVxcdTJBMzMtXFx1MkEzQ1xcdTJBM0ZcXHUyQTQwXFx1MkE0Mi1cXHUyQTREXFx1MkE1MFxcdTJBNTMtXFx1MkE1OFxcdTJBNUEtXFx1MkE1RFxcdTJBNUZcXHUyQTY2XFx1MkE2QVxcdTJBNkQtXFx1MkE3NVxcdTJBNzctXFx1MkE5QVxcdTJBOUQtXFx1MkFBMlxcdTJBQTQtXFx1MkFCMFxcdTJBQjMtXFx1MkFDOFxcdTJBQ0JcXHUyQUNDXFx1MkFDRi1cXHUyQURCXFx1MkFFNFxcdTJBRTYtXFx1MkFFOVxcdTJBRUItXFx1MkFGM1xcdTJBRkRcXHVGQjAwLVxcdUZCMDRdfFxcdUQ4MzVbXFx1REM5Q1xcdURDOUVcXHVEQzlGXFx1RENBMlxcdURDQTVcXHVEQ0E2XFx1RENBOS1cXHVEQ0FDXFx1RENBRS1cXHVEQ0I5XFx1RENCQlxcdURDQkQtXFx1RENDM1xcdURDQzUtXFx1RENDRlxcdUREMDRcXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REQ2Ql0vZztcblx0dmFyIGVuY29kZU1hcCA9IHsnXFx4QUQnOidzaHknLCdcXHUyMDBDJzonenduaicsJ1xcdTIwMEQnOid6d2onLCdcXHUyMDBFJzonbHJtJywnXFx1MjA2Myc6J2ljJywnXFx1MjA2Mic6J2l0JywnXFx1MjA2MSc6J2FmJywnXFx1MjAwRic6J3JsbScsJ1xcdTIwMEInOidaZXJvV2lkdGhTcGFjZScsJ1xcdTIwNjAnOidOb0JyZWFrJywnXFx1MDMxMSc6J0Rvd25CcmV2ZScsJ1xcdTIwREInOid0ZG90JywnXFx1MjBEQyc6J0RvdERvdCcsJ1xcdCc6J1RhYicsJ1xcbic6J05ld0xpbmUnLCdcXHUyMDA4JzoncHVuY3NwJywnXFx1MjA1Ric6J01lZGl1bVNwYWNlJywnXFx1MjAwOSc6J3RoaW5zcCcsJ1xcdTIwMEEnOidoYWlyc3AnLCdcXHUyMDA0JzonZW1zcDEzJywnXFx1MjAwMic6J2Vuc3AnLCdcXHUyMDA1JzonZW1zcDE0JywnXFx1MjAwMyc6J2Vtc3AnLCdcXHUyMDA3JzonbnVtc3AnLCdcXHhBMCc6J25ic3AnLCdcXHUyMDVGXFx1MjAwQSc6J1RoaWNrU3BhY2UnLCdcXHUyMDNFJzonb2xpbmUnLCdfJzonbG93YmFyJywnXFx1MjAxMCc6J2Rhc2gnLCdcXHUyMDEzJzonbmRhc2gnLCdcXHUyMDE0JzonbWRhc2gnLCdcXHUyMDE1JzonaG9yYmFyJywnLCc6J2NvbW1hJywnOyc6J3NlbWknLCdcXHUyMDRGJzonYnNlbWknLCc6JzonY29sb24nLCdcXHUyQTc0JzonQ29sb25lJywnISc6J2V4Y2wnLCdcXHhBMSc6J2lleGNsJywnPyc6J3F1ZXN0JywnXFx4QkYnOidpcXVlc3QnLCcuJzoncGVyaW9kJywnXFx1MjAyNSc6J25sZHInLCdcXHUyMDI2JzonbWxkcicsJ1xceEI3JzonbWlkZG90JywnXFwnJzonYXBvcycsJ1xcdTIwMTgnOidsc3F1bycsJ1xcdTIwMTknOidyc3F1bycsJ1xcdTIwMUEnOidzYnF1bycsJ1xcdTIwMzknOidsc2FxdW8nLCdcXHUyMDNBJzoncnNhcXVvJywnXCInOidxdW90JywnXFx1MjAxQyc6J2xkcXVvJywnXFx1MjAxRCc6J3JkcXVvJywnXFx1MjAxRSc6J2JkcXVvJywnXFx4QUInOidsYXF1bycsJ1xceEJCJzoncmFxdW8nLCcoJzonbHBhcicsJyknOidycGFyJywnWyc6J2xzcWInLCddJzoncnNxYicsJ3snOidsY3ViJywnfSc6J3JjdWInLCdcXHUyMzA4JzonbGNlaWwnLCdcXHUyMzA5JzoncmNlaWwnLCdcXHUyMzBBJzonbGZsb29yJywnXFx1MjMwQic6J3JmbG9vcicsJ1xcdTI5ODUnOidsb3BhcicsJ1xcdTI5ODYnOidyb3BhcicsJ1xcdTI5OEInOidsYnJrZScsJ1xcdTI5OEMnOidyYnJrZScsJ1xcdTI5OEQnOidsYnJrc2x1JywnXFx1Mjk4RSc6J3JicmtzbGQnLCdcXHUyOThGJzonbGJya3NsZCcsJ1xcdTI5OTAnOidyYnJrc2x1JywnXFx1Mjk5MSc6J2xhbmdkJywnXFx1Mjk5Mic6J3JhbmdkJywnXFx1Mjk5Myc6J2xwYXJsdCcsJ1xcdTI5OTQnOidycGFyZ3QnLCdcXHUyOTk1JzonZ3RsUGFyJywnXFx1Mjk5Nic6J2x0clBhcicsJ1xcdTI3RTYnOidsb2JyaycsJ1xcdTI3RTcnOidyb2JyaycsJ1xcdTI3RTgnOidsYW5nJywnXFx1MjdFOSc6J3JhbmcnLCdcXHUyN0VBJzonTGFuZycsJ1xcdTI3RUInOidSYW5nJywnXFx1MjdFQyc6J2xvYW5nJywnXFx1MjdFRCc6J3JvYW5nJywnXFx1Mjc3Mic6J2xiYnJrJywnXFx1Mjc3Myc6J3JiYnJrJywnXFx1MjAxNic6J1ZlcnQnLCdcXHhBNyc6J3NlY3QnLCdcXHhCNic6J3BhcmEnLCdAJzonY29tbWF0JywnKic6J2FzdCcsJy8nOidzb2wnLCd1bmRlZmluZWQnOm51bGwsJyYnOidhbXAnLCcjJzonbnVtJywnJSc6J3BlcmNudCcsJ1xcdTIwMzAnOidwZXJtaWwnLCdcXHUyMDMxJzoncGVydGVuaycsJ1xcdTIwMjAnOidkYWdnZXInLCdcXHUyMDIxJzonRGFnZ2VyJywnXFx1MjAyMic6J2J1bGwnLCdcXHUyMDQzJzonaHlidWxsJywnXFx1MjAzMic6J3ByaW1lJywnXFx1MjAzMyc6J1ByaW1lJywnXFx1MjAzNCc6J3RwcmltZScsJ1xcdTIwNTcnOidxcHJpbWUnLCdcXHUyMDM1JzonYnByaW1lJywnXFx1MjA0MSc6J2NhcmV0JywnYCc6J2dyYXZlJywnXFx4QjQnOidhY3V0ZScsJ1xcdTAyREMnOid0aWxkZScsJ14nOidIYXQnLCdcXHhBRic6J21hY3InLCdcXHUwMkQ4JzonYnJldmUnLCdcXHUwMkQ5JzonZG90JywnXFx4QTgnOidkaWUnLCdcXHUwMkRBJzoncmluZycsJ1xcdTAyREQnOidkYmxhYycsJ1xceEI4JzonY2VkaWwnLCdcXHUwMkRCJzonb2dvbicsJ1xcdTAyQzYnOidjaXJjJywnXFx1MDJDNyc6J2Nhcm9uJywnXFx4QjAnOidkZWcnLCdcXHhBOSc6J2NvcHknLCdcXHhBRSc6J3JlZycsJ1xcdTIxMTcnOidjb3B5c3InLCdcXHUyMTE4Jzond3AnLCdcXHUyMTFFJzoncngnLCdcXHUyMTI3JzonbWhvJywnXFx1MjEyOSc6J2lpb3RhJywnXFx1MjE5MCc6J2xhcnInLCdcXHUyMTlBJzonbmxhcnInLCdcXHUyMTkyJzoncmFycicsJ1xcdTIxOUInOiducmFycicsJ1xcdTIxOTEnOid1YXJyJywnXFx1MjE5Myc6J2RhcnInLCdcXHUyMTk0JzonaGFycicsJ1xcdTIxQUUnOiduaGFycicsJ1xcdTIxOTUnOid2YXJyJywnXFx1MjE5Nic6J253YXJyJywnXFx1MjE5Nyc6J25lYXJyJywnXFx1MjE5OCc6J3NlYXJyJywnXFx1MjE5OSc6J3N3YXJyJywnXFx1MjE5RCc6J3JhcnJ3JywnXFx1MjE5RFxcdTAzMzgnOiducmFycncnLCdcXHUyMTlFJzonTGFycicsJ1xcdTIxOUYnOidVYXJyJywnXFx1MjFBMCc6J1JhcnInLCdcXHUyMUExJzonRGFycicsJ1xcdTIxQTInOidsYXJydGwnLCdcXHUyMUEzJzoncmFycnRsJywnXFx1MjFBNCc6J21hcHN0b2xlZnQnLCdcXHUyMUE1JzonbWFwc3RvdXAnLCdcXHUyMUE2JzonbWFwJywnXFx1MjFBNyc6J21hcHN0b2Rvd24nLCdcXHUyMUE5JzonbGFycmhrJywnXFx1MjFBQSc6J3JhcnJoaycsJ1xcdTIxQUInOidsYXJybHAnLCdcXHUyMUFDJzoncmFycmxwJywnXFx1MjFBRCc6J2hhcnJ3JywnXFx1MjFCMCc6J2xzaCcsJ1xcdTIxQjEnOidyc2gnLCdcXHUyMUIyJzonbGRzaCcsJ1xcdTIxQjMnOidyZHNoJywnXFx1MjFCNSc6J2NyYXJyJywnXFx1MjFCNic6J2N1bGFycicsJ1xcdTIxQjcnOidjdXJhcnInLCdcXHUyMUJBJzonb2xhcnInLCdcXHUyMUJCJzonb3JhcnInLCdcXHUyMUJDJzonbGhhcnUnLCdcXHUyMUJEJzonbGhhcmQnLCdcXHUyMUJFJzondWhhcnInLCdcXHUyMUJGJzondWhhcmwnLCdcXHUyMUMwJzoncmhhcnUnLCdcXHUyMUMxJzoncmhhcmQnLCdcXHUyMUMyJzonZGhhcnInLCdcXHUyMUMzJzonZGhhcmwnLCdcXHUyMUM0JzoncmxhcnInLCdcXHUyMUM1JzondWRhcnInLCdcXHUyMUM2JzonbHJhcnInLCdcXHUyMUM3JzonbGxhcnInLCdcXHUyMUM4JzondXVhcnInLCdcXHUyMUM5JzoncnJhcnInLCdcXHUyMUNBJzonZGRhcnInLCdcXHUyMUNCJzonbHJoYXInLCdcXHUyMUNDJzoncmxoYXInLCdcXHUyMUQwJzonbEFycicsJ1xcdTIxQ0QnOidubEFycicsJ1xcdTIxRDEnOid1QXJyJywnXFx1MjFEMic6J3JBcnInLCdcXHUyMUNGJzonbnJBcnInLCdcXHUyMUQzJzonZEFycicsJ1xcdTIxRDQnOidpZmYnLCdcXHUyMUNFJzonbmhBcnInLCdcXHUyMUQ1JzondkFycicsJ1xcdTIxRDYnOidud0FycicsJ1xcdTIxRDcnOiduZUFycicsJ1xcdTIxRDgnOidzZUFycicsJ1xcdTIxRDknOidzd0FycicsJ1xcdTIxREEnOidsQWFycicsJ1xcdTIxREInOidyQWFycicsJ1xcdTIxREQnOid6aWdyYXJyJywnXFx1MjFFNCc6J2xhcnJiJywnXFx1MjFFNSc6J3JhcnJiJywnXFx1MjFGNSc6J2R1YXJyJywnXFx1MjFGRCc6J2xvYXJyJywnXFx1MjFGRSc6J3JvYXJyJywnXFx1MjFGRic6J2hvYXJyJywnXFx1MjIwMCc6J2ZvcmFsbCcsJ1xcdTIyMDEnOidjb21wJywnXFx1MjIwMic6J3BhcnQnLCdcXHUyMjAyXFx1MDMzOCc6J25wYXJ0JywnXFx1MjIwMyc6J2V4aXN0JywnXFx1MjIwNCc6J25leGlzdCcsJ1xcdTIyMDUnOidlbXB0eScsJ1xcdTIyMDcnOidEZWwnLCdcXHUyMjA4JzonaW4nLCdcXHUyMjA5Jzonbm90aW4nLCdcXHUyMjBCJzonbmknLCdcXHUyMjBDJzonbm90bmknLCdcXHUwM0Y2JzonYmVwc2knLCdcXHUyMjBGJzoncHJvZCcsJ1xcdTIyMTAnOidjb3Byb2QnLCdcXHUyMjExJzonc3VtJywnKyc6J3BsdXMnLCdcXHhCMSc6J3BtJywnXFx4RjcnOidkaXYnLCdcXHhENyc6J3RpbWVzJywnPCc6J2x0JywnXFx1MjI2RSc6J25sdCcsJzxcXHUyMEQyJzonbnZsdCcsJz0nOidlcXVhbHMnLCdcXHUyMjYwJzonbmUnLCc9XFx1MjBFNSc6J2JuZScsJ1xcdTJBNzUnOidFcXVhbCcsJz4nOidndCcsJ1xcdTIyNkYnOiduZ3QnLCc+XFx1MjBEMic6J252Z3QnLCdcXHhBQyc6J25vdCcsJ3wnOid2ZXJ0JywnXFx4QTYnOidicnZiYXInLCdcXHUyMjEyJzonbWludXMnLCdcXHUyMjEzJzonbXAnLCdcXHUyMjE0JzoncGx1c2RvJywnXFx1MjA0NCc6J2ZyYXNsJywnXFx1MjIxNic6J3NldG1uJywnXFx1MjIxNyc6J2xvd2FzdCcsJ1xcdTIyMTgnOidjb21wZm4nLCdcXHUyMjFBJzonU3FydCcsJ1xcdTIyMUQnOidwcm9wJywnXFx1MjIxRSc6J2luZmluJywnXFx1MjIxRic6J2FuZ3J0JywnXFx1MjIyMCc6J2FuZycsJ1xcdTIyMjBcXHUyMEQyJzonbmFuZycsJ1xcdTIyMjEnOidhbmdtc2QnLCdcXHUyMjIyJzonYW5nc3BoJywnXFx1MjIyMyc6J21pZCcsJ1xcdTIyMjQnOidubWlkJywnXFx1MjIyNSc6J3BhcicsJ1xcdTIyMjYnOiducGFyJywnXFx1MjIyNyc6J2FuZCcsJ1xcdTIyMjgnOidvcicsJ1xcdTIyMjknOidjYXAnLCdcXHUyMjI5XFx1RkUwMCc6J2NhcHMnLCdcXHUyMjJBJzonY3VwJywnXFx1MjIyQVxcdUZFMDAnOidjdXBzJywnXFx1MjIyQic6J2ludCcsJ1xcdTIyMkMnOidJbnQnLCdcXHUyMjJEJzondGludCcsJ1xcdTJBMEMnOidxaW50JywnXFx1MjIyRSc6J29pbnQnLCdcXHUyMjJGJzonQ29uaW50JywnXFx1MjIzMCc6J0Njb25pbnQnLCdcXHUyMjMxJzonY3dpbnQnLCdcXHUyMjMyJzonY3djb25pbnQnLCdcXHUyMjMzJzonYXdjb25pbnQnLCdcXHUyMjM0JzondGhlcmU0JywnXFx1MjIzNSc6J2JlY2F1cycsJ1xcdTIyMzYnOidyYXRpbycsJ1xcdTIyMzcnOidDb2xvbicsJ1xcdTIyMzgnOidtaW51c2QnLCdcXHUyMjNBJzonbUREb3QnLCdcXHUyMjNCJzonaG9tdGh0JywnXFx1MjIzQyc6J3NpbScsJ1xcdTIyNDEnOiduc2ltJywnXFx1MjIzQ1xcdTIwRDInOidudnNpbScsJ1xcdTIyM0QnOidic2ltJywnXFx1MjIzRFxcdTAzMzEnOidyYWNlJywnXFx1MjIzRSc6J2FjJywnXFx1MjIzRVxcdTAzMzMnOidhY0UnLCdcXHUyMjNGJzonYWNkJywnXFx1MjI0MCc6J3dyJywnXFx1MjI0Mic6J2VzaW0nLCdcXHUyMjQyXFx1MDMzOCc6J25lc2ltJywnXFx1MjI0Myc6J3NpbWUnLCdcXHUyMjQ0JzonbnNpbWUnLCdcXHUyMjQ1JzonY29uZycsJ1xcdTIyNDcnOiduY29uZycsJ1xcdTIyNDYnOidzaW1uZScsJ1xcdTIyNDgnOidhcCcsJ1xcdTIyNDknOiduYXAnLCdcXHUyMjRBJzonYXBlJywnXFx1MjI0Qic6J2FwaWQnLCdcXHUyMjRCXFx1MDMzOCc6J25hcGlkJywnXFx1MjI0Qyc6J2Jjb25nJywnXFx1MjI0RCc6J0N1cENhcCcsJ1xcdTIyNkQnOidOb3RDdXBDYXAnLCdcXHUyMjREXFx1MjBEMic6J252YXAnLCdcXHUyMjRFJzonYnVtcCcsJ1xcdTIyNEVcXHUwMzM4JzonbmJ1bXAnLCdcXHUyMjRGJzonYnVtcGUnLCdcXHUyMjRGXFx1MDMzOCc6J25idW1wZScsJ1xcdTIyNTAnOidkb3RlcScsJ1xcdTIyNTBcXHUwMzM4JzonbmVkb3QnLCdcXHUyMjUxJzonZURvdCcsJ1xcdTIyNTInOidlZkRvdCcsJ1xcdTIyNTMnOidlckRvdCcsJ1xcdTIyNTQnOidjb2xvbmUnLCdcXHUyMjU1JzonZWNvbG9uJywnXFx1MjI1Nic6J2VjaXInLCdcXHUyMjU3JzonY2lyZScsJ1xcdTIyNTknOid3ZWRnZXEnLCdcXHUyMjVBJzondmVlZXEnLCdcXHUyMjVDJzondHJpZScsJ1xcdTIyNUYnOidlcXVlc3QnLCdcXHUyMjYxJzonZXF1aXYnLCdcXHUyMjYyJzonbmVxdWl2JywnXFx1MjI2MVxcdTIwRTUnOidibmVxdWl2JywnXFx1MjI2NCc6J2xlJywnXFx1MjI3MCc6J25sZScsJ1xcdTIyNjRcXHUyMEQyJzonbnZsZScsJ1xcdTIyNjUnOidnZScsJ1xcdTIyNzEnOiduZ2UnLCdcXHUyMjY1XFx1MjBEMic6J252Z2UnLCdcXHUyMjY2JzonbEUnLCdcXHUyMjY2XFx1MDMzOCc6J25sRScsJ1xcdTIyNjcnOidnRScsJ1xcdTIyNjdcXHUwMzM4JzonbmdFJywnXFx1MjI2OFxcdUZFMDAnOidsdm5FJywnXFx1MjI2OCc6J2xuRScsJ1xcdTIyNjknOidnbkUnLCdcXHUyMjY5XFx1RkUwMCc6J2d2bkUnLCdcXHUyMjZBJzonbGwnLCdcXHUyMjZBXFx1MDMzOCc6J25MdHYnLCdcXHUyMjZBXFx1MjBEMic6J25MdCcsJ1xcdTIyNkInOidnZycsJ1xcdTIyNkJcXHUwMzM4Jzonbkd0dicsJ1xcdTIyNkJcXHUyMEQyJzonbkd0JywnXFx1MjI2Qyc6J3R3aXh0JywnXFx1MjI3Mic6J2xzaW0nLCdcXHUyMjc0JzonbmxzaW0nLCdcXHUyMjczJzonZ3NpbScsJ1xcdTIyNzUnOiduZ3NpbScsJ1xcdTIyNzYnOidsZycsJ1xcdTIyNzgnOidudGxnJywnXFx1MjI3Nyc6J2dsJywnXFx1MjI3OSc6J250Z2wnLCdcXHUyMjdBJzoncHInLCdcXHUyMjgwJzonbnByJywnXFx1MjI3Qic6J3NjJywnXFx1MjI4MSc6J25zYycsJ1xcdTIyN0MnOidwcmN1ZScsJ1xcdTIyRTAnOiducHJjdWUnLCdcXHUyMjdEJzonc2NjdWUnLCdcXHUyMkUxJzonbnNjY3VlJywnXFx1MjI3RSc6J3Byc2ltJywnXFx1MjI3Ric6J3Njc2ltJywnXFx1MjI3RlxcdTAzMzgnOidOb3RTdWNjZWVkc1RpbGRlJywnXFx1MjI4Mic6J3N1YicsJ1xcdTIyODQnOiduc3ViJywnXFx1MjI4MlxcdTIwRDInOid2bnN1YicsJ1xcdTIyODMnOidzdXAnLCdcXHUyMjg1JzonbnN1cCcsJ1xcdTIyODNcXHUyMEQyJzondm5zdXAnLCdcXHUyMjg2Jzonc3ViZScsJ1xcdTIyODgnOiduc3ViZScsJ1xcdTIyODcnOidzdXBlJywnXFx1MjI4OSc6J25zdXBlJywnXFx1MjI4QVxcdUZFMDAnOid2c3VibmUnLCdcXHUyMjhBJzonc3VibmUnLCdcXHUyMjhCXFx1RkUwMCc6J3ZzdXBuZScsJ1xcdTIyOEInOidzdXBuZScsJ1xcdTIyOEQnOidjdXBkb3QnLCdcXHUyMjhFJzondXBsdXMnLCdcXHUyMjhGJzonc3FzdWInLCdcXHUyMjhGXFx1MDMzOCc6J05vdFNxdWFyZVN1YnNldCcsJ1xcdTIyOTAnOidzcXN1cCcsJ1xcdTIyOTBcXHUwMzM4JzonTm90U3F1YXJlU3VwZXJzZXQnLCdcXHUyMjkxJzonc3FzdWJlJywnXFx1MjJFMic6J25zcXN1YmUnLCdcXHUyMjkyJzonc3FzdXBlJywnXFx1MjJFMyc6J25zcXN1cGUnLCdcXHUyMjkzJzonc3FjYXAnLCdcXHUyMjkzXFx1RkUwMCc6J3NxY2FwcycsJ1xcdTIyOTQnOidzcWN1cCcsJ1xcdTIyOTRcXHVGRTAwJzonc3FjdXBzJywnXFx1MjI5NSc6J29wbHVzJywnXFx1MjI5Nic6J29taW51cycsJ1xcdTIyOTcnOidvdGltZXMnLCdcXHUyMjk4Jzonb3NvbCcsJ1xcdTIyOTknOidvZG90JywnXFx1MjI5QSc6J29jaXInLCdcXHUyMjlCJzonb2FzdCcsJ1xcdTIyOUQnOidvZGFzaCcsJ1xcdTIyOUUnOidwbHVzYicsJ1xcdTIyOUYnOidtaW51c2InLCdcXHUyMkEwJzondGltZXNiJywnXFx1MjJBMSc6J3Nkb3RiJywnXFx1MjJBMic6J3ZkYXNoJywnXFx1MjJBQyc6J252ZGFzaCcsJ1xcdTIyQTMnOidkYXNodicsJ1xcdTIyQTQnOid0b3AnLCdcXHUyMkE1JzonYm90JywnXFx1MjJBNyc6J21vZGVscycsJ1xcdTIyQTgnOid2RGFzaCcsJ1xcdTIyQUQnOidudkRhc2gnLCdcXHUyMkE5JzonVmRhc2gnLCdcXHUyMkFFJzonblZkYXNoJywnXFx1MjJBQSc6J1Z2ZGFzaCcsJ1xcdTIyQUInOidWRGFzaCcsJ1xcdTIyQUYnOiduVkRhc2gnLCdcXHUyMkIwJzoncHJ1cmVsJywnXFx1MjJCMic6J3ZsdHJpJywnXFx1MjJFQSc6J25sdHJpJywnXFx1MjJCMyc6J3ZydHJpJywnXFx1MjJFQic6J25ydHJpJywnXFx1MjJCNCc6J2x0cmllJywnXFx1MjJFQyc6J25sdHJpZScsJ1xcdTIyQjRcXHUyMEQyJzonbnZsdHJpZScsJ1xcdTIyQjUnOidydHJpZScsJ1xcdTIyRUQnOiducnRyaWUnLCdcXHUyMkI1XFx1MjBEMic6J252cnRyaWUnLCdcXHUyMkI2Jzonb3JpZ29mJywnXFx1MjJCNyc6J2ltb2YnLCdcXHUyMkI4JzonbXVtYXAnLCdcXHUyMkI5JzonaGVyY29uJywnXFx1MjJCQSc6J2ludGNhbCcsJ1xcdTIyQkInOid2ZWViYXInLCdcXHUyMkJEJzonYmFydmVlJywnXFx1MjJCRSc6J2FuZ3J0dmInLCdcXHUyMkJGJzonbHJ0cmknLCdcXHUyMkMwJzonV2VkZ2UnLCdcXHUyMkMxJzonVmVlJywnXFx1MjJDMic6J3hjYXAnLCdcXHUyMkMzJzoneGN1cCcsJ1xcdTIyQzQnOidkaWFtJywnXFx1MjJDNSc6J3Nkb3QnLCdcXHUyMkM2JzonU3RhcicsJ1xcdTIyQzcnOidkaXZvbngnLCdcXHUyMkM4JzonYm93dGllJywnXFx1MjJDOSc6J2x0aW1lcycsJ1xcdTIyQ0EnOidydGltZXMnLCdcXHUyMkNCJzonbHRocmVlJywnXFx1MjJDQyc6J3J0aHJlZScsJ1xcdTIyQ0QnOidic2ltZScsJ1xcdTIyQ0UnOidjdXZlZScsJ1xcdTIyQ0YnOidjdXdlZCcsJ1xcdTIyRDAnOidTdWInLCdcXHUyMkQxJzonU3VwJywnXFx1MjJEMic6J0NhcCcsJ1xcdTIyRDMnOidDdXAnLCdcXHUyMkQ0JzonZm9yaycsJ1xcdTIyRDUnOidlcGFyJywnXFx1MjJENic6J2x0ZG90JywnXFx1MjJENyc6J2d0ZG90JywnXFx1MjJEOCc6J0xsJywnXFx1MjJEOFxcdTAzMzgnOiduTGwnLCdcXHUyMkQ5JzonR2cnLCdcXHUyMkQ5XFx1MDMzOCc6J25HZycsJ1xcdTIyREFcXHVGRTAwJzonbGVzZycsJ1xcdTIyREEnOidsZWcnLCdcXHUyMkRCJzonZ2VsJywnXFx1MjJEQlxcdUZFMDAnOidnZXNsJywnXFx1MjJERSc6J2N1ZXByJywnXFx1MjJERic6J2N1ZXNjJywnXFx1MjJFNic6J2xuc2ltJywnXFx1MjJFNyc6J2duc2ltJywnXFx1MjJFOCc6J3BybnNpbScsJ1xcdTIyRTknOidzY25zaW0nLCdcXHUyMkVFJzondmVsbGlwJywnXFx1MjJFRic6J2N0ZG90JywnXFx1MjJGMCc6J3V0ZG90JywnXFx1MjJGMSc6J2R0ZG90JywnXFx1MjJGMic6J2Rpc2luJywnXFx1MjJGMyc6J2lzaW5zdicsJ1xcdTIyRjQnOidpc2lucycsJ1xcdTIyRjUnOidpc2luZG90JywnXFx1MjJGNVxcdTAzMzgnOidub3RpbmRvdCcsJ1xcdTIyRjYnOidub3RpbnZjJywnXFx1MjJGNyc6J25vdGludmInLCdcXHUyMkY5JzonaXNpbkUnLCdcXHUyMkY5XFx1MDMzOCc6J25vdGluRScsJ1xcdTIyRkEnOiduaXNkJywnXFx1MjJGQic6J3huaXMnLCdcXHUyMkZDJzonbmlzJywnXFx1MjJGRCc6J25vdG5pdmMnLCdcXHUyMkZFJzonbm90bml2YicsJ1xcdTIzMDUnOidiYXJ3ZWQnLCdcXHUyMzA2JzonQmFyd2VkJywnXFx1MjMwQyc6J2RyY3JvcCcsJ1xcdTIzMEQnOidkbGNyb3AnLCdcXHUyMzBFJzondXJjcm9wJywnXFx1MjMwRic6J3VsY3JvcCcsJ1xcdTIzMTAnOidibm90JywnXFx1MjMxMic6J3Byb2ZsaW5lJywnXFx1MjMxMyc6J3Byb2ZzdXJmJywnXFx1MjMxNSc6J3RlbHJlYycsJ1xcdTIzMTYnOid0YXJnZXQnLCdcXHUyMzFDJzondWxjb3JuJywnXFx1MjMxRCc6J3VyY29ybicsJ1xcdTIzMUUnOidkbGNvcm4nLCdcXHUyMzFGJzonZHJjb3JuJywnXFx1MjMyMic6J2Zyb3duJywnXFx1MjMyMyc6J3NtaWxlJywnXFx1MjMyRCc6J2N5bGN0eScsJ1xcdTIzMkUnOidwcm9mYWxhcicsJ1xcdTIzMzYnOid0b3Bib3QnLCdcXHUyMzNEJzonb3ZiYXInLCdcXHUyMzNGJzonc29sYmFyJywnXFx1MjM3Qyc6J2FuZ3phcnInLCdcXHUyM0IwJzonbG1vdXN0JywnXFx1MjNCMSc6J3Jtb3VzdCcsJ1xcdTIzQjQnOid0YnJrJywnXFx1MjNCNSc6J2JicmsnLCdcXHUyM0I2JzonYmJya3RicmsnLCdcXHUyM0RDJzonT3ZlclBhcmVudGhlc2lzJywnXFx1MjNERCc6J1VuZGVyUGFyZW50aGVzaXMnLCdcXHUyM0RFJzonT3ZlckJyYWNlJywnXFx1MjNERic6J1VuZGVyQnJhY2UnLCdcXHUyM0UyJzondHJwZXppdW0nLCdcXHUyM0U3JzonZWxpbnRlcnMnLCdcXHUyNDIzJzonYmxhbmsnLCdcXHUyNTAwJzonYm94aCcsJ1xcdTI1MDInOidib3h2JywnXFx1MjUwQyc6J2JveGRyJywnXFx1MjUxMCc6J2JveGRsJywnXFx1MjUxNCc6J2JveHVyJywnXFx1MjUxOCc6J2JveHVsJywnXFx1MjUxQyc6J2JveHZyJywnXFx1MjUyNCc6J2JveHZsJywnXFx1MjUyQyc6J2JveGhkJywnXFx1MjUzNCc6J2JveGh1JywnXFx1MjUzQyc6J2JveHZoJywnXFx1MjU1MCc6J2JveEgnLCdcXHUyNTUxJzonYm94VicsJ1xcdTI1NTInOidib3hkUicsJ1xcdTI1NTMnOidib3hEcicsJ1xcdTI1NTQnOidib3hEUicsJ1xcdTI1NTUnOidib3hkTCcsJ1xcdTI1NTYnOidib3hEbCcsJ1xcdTI1NTcnOidib3hETCcsJ1xcdTI1NTgnOidib3h1UicsJ1xcdTI1NTknOidib3hVcicsJ1xcdTI1NUEnOidib3hVUicsJ1xcdTI1NUInOidib3h1TCcsJ1xcdTI1NUMnOidib3hVbCcsJ1xcdTI1NUQnOidib3hVTCcsJ1xcdTI1NUUnOidib3h2UicsJ1xcdTI1NUYnOidib3hWcicsJ1xcdTI1NjAnOidib3hWUicsJ1xcdTI1NjEnOidib3h2TCcsJ1xcdTI1NjInOidib3hWbCcsJ1xcdTI1NjMnOidib3hWTCcsJ1xcdTI1NjQnOidib3hIZCcsJ1xcdTI1NjUnOidib3hoRCcsJ1xcdTI1NjYnOidib3hIRCcsJ1xcdTI1NjcnOidib3hIdScsJ1xcdTI1NjgnOidib3hoVScsJ1xcdTI1NjknOidib3hIVScsJ1xcdTI1NkEnOidib3h2SCcsJ1xcdTI1NkInOidib3hWaCcsJ1xcdTI1NkMnOidib3hWSCcsJ1xcdTI1ODAnOid1aGJsaycsJ1xcdTI1ODQnOidsaGJsaycsJ1xcdTI1ODgnOidibG9jaycsJ1xcdTI1OTEnOidibGsxNCcsJ1xcdTI1OTInOidibGsxMicsJ1xcdTI1OTMnOidibGszNCcsJ1xcdTI1QTEnOidzcXUnLCdcXHUyNUFBJzonc3F1ZicsJ1xcdTI1QUInOidFbXB0eVZlcnlTbWFsbFNxdWFyZScsJ1xcdTI1QUQnOidyZWN0JywnXFx1MjVBRSc6J21hcmtlcicsJ1xcdTI1QjEnOidmbHRucycsJ1xcdTI1QjMnOid4dXRyaScsJ1xcdTI1QjQnOid1dHJpZicsJ1xcdTI1QjUnOid1dHJpJywnXFx1MjVCOCc6J3J0cmlmJywnXFx1MjVCOSc6J3J0cmknLCdcXHUyNUJEJzoneGR0cmknLCdcXHUyNUJFJzonZHRyaWYnLCdcXHUyNUJGJzonZHRyaScsJ1xcdTI1QzInOidsdHJpZicsJ1xcdTI1QzMnOidsdHJpJywnXFx1MjVDQSc6J2xveicsJ1xcdTI1Q0InOidjaXInLCdcXHUyNUVDJzondHJpZG90JywnXFx1MjVFRic6J3hjaXJjJywnXFx1MjVGOCc6J3VsdHJpJywnXFx1MjVGOSc6J3VydHJpJywnXFx1MjVGQSc6J2xsdHJpJywnXFx1MjVGQic6J0VtcHR5U21hbGxTcXVhcmUnLCdcXHUyNUZDJzonRmlsbGVkU21hbGxTcXVhcmUnLCdcXHUyNjA1Jzonc3RhcmYnLCdcXHUyNjA2Jzonc3RhcicsJ1xcdTI2MEUnOidwaG9uZScsJ1xcdTI2NDAnOidmZW1hbGUnLCdcXHUyNjQyJzonbWFsZScsJ1xcdTI2NjAnOidzcGFkZXMnLCdcXHUyNjYzJzonY2x1YnMnLCdcXHUyNjY1JzonaGVhcnRzJywnXFx1MjY2Nic6J2RpYW1zJywnXFx1MjY2QSc6J3N1bmcnLCdcXHUyNzEzJzonY2hlY2snLCdcXHUyNzE3JzonY3Jvc3MnLCdcXHUyNzIwJzonbWFsdCcsJ1xcdTI3MzYnOidzZXh0JywnXFx1Mjc1OCc6J1ZlcnRpY2FsU2VwYXJhdG9yJywnXFx1MjdDOCc6J2Jzb2xoc3ViJywnXFx1MjdDOSc6J3N1cGhzb2wnLCdcXHUyN0Y1JzoneGxhcnInLCdcXHUyN0Y2JzoneHJhcnInLCdcXHUyN0Y3JzoneGhhcnInLCdcXHUyN0Y4JzoneGxBcnInLCdcXHUyN0Y5JzoneHJBcnInLCdcXHUyN0ZBJzoneGhBcnInLCdcXHUyN0ZDJzoneG1hcCcsJ1xcdTI3RkYnOidkemlncmFycicsJ1xcdTI5MDInOidudmxBcnInLCdcXHUyOTAzJzonbnZyQXJyJywnXFx1MjkwNCc6J252SGFycicsJ1xcdTI5MDUnOidNYXAnLCdcXHUyOTBDJzonbGJhcnInLCdcXHUyOTBEJzoncmJhcnInLCdcXHUyOTBFJzonbEJhcnInLCdcXHUyOTBGJzonckJhcnInLCdcXHUyOTEwJzonUkJhcnInLCdcXHUyOTExJzonRERvdHJhaGQnLCdcXHUyOTEyJzonVXBBcnJvd0JhcicsJ1xcdTI5MTMnOidEb3duQXJyb3dCYXInLCdcXHUyOTE2JzonUmFycnRsJywnXFx1MjkxOSc6J2xhdGFpbCcsJ1xcdTI5MUEnOidyYXRhaWwnLCdcXHUyOTFCJzonbEF0YWlsJywnXFx1MjkxQyc6J3JBdGFpbCcsJ1xcdTI5MUQnOidsYXJyZnMnLCdcXHUyOTFFJzoncmFycmZzJywnXFx1MjkxRic6J2xhcnJiZnMnLCdcXHUyOTIwJzoncmFycmJmcycsJ1xcdTI5MjMnOidud2FyaGsnLCdcXHUyOTI0JzonbmVhcmhrJywnXFx1MjkyNSc6J3NlYXJoaycsJ1xcdTI5MjYnOidzd2FyaGsnLCdcXHUyOTI3JzonbnduZWFyJywnXFx1MjkyOCc6J3RvZWEnLCdcXHUyOTI5JzondG9zYScsJ1xcdTI5MkEnOidzd253YXInLCdcXHUyOTMzJzoncmFycmMnLCdcXHUyOTMzXFx1MDMzOCc6J25yYXJyYycsJ1xcdTI5MzUnOidjdWRhcnJyJywnXFx1MjkzNic6J2xkY2EnLCdcXHUyOTM3JzoncmRjYScsJ1xcdTI5MzgnOidjdWRhcnJsJywnXFx1MjkzOSc6J2xhcnJwbCcsJ1xcdTI5M0MnOidjdXJhcnJtJywnXFx1MjkzRCc6J2N1bGFycnAnLCdcXHUyOTQ1JzoncmFycnBsJywnXFx1Mjk0OCc6J2hhcnJjaXInLCdcXHUyOTQ5JzonVWFycm9jaXInLCdcXHUyOTRBJzonbHVyZHNoYXInLCdcXHUyOTRCJzonbGRydXNoYXInLCdcXHUyOTRFJzonTGVmdFJpZ2h0VmVjdG9yJywnXFx1Mjk0Ric6J1JpZ2h0VXBEb3duVmVjdG9yJywnXFx1Mjk1MCc6J0Rvd25MZWZ0UmlnaHRWZWN0b3InLCdcXHUyOTUxJzonTGVmdFVwRG93blZlY3RvcicsJ1xcdTI5NTInOidMZWZ0VmVjdG9yQmFyJywnXFx1Mjk1Myc6J1JpZ2h0VmVjdG9yQmFyJywnXFx1Mjk1NCc6J1JpZ2h0VXBWZWN0b3JCYXInLCdcXHUyOTU1JzonUmlnaHREb3duVmVjdG9yQmFyJywnXFx1Mjk1Nic6J0Rvd25MZWZ0VmVjdG9yQmFyJywnXFx1Mjk1Nyc6J0Rvd25SaWdodFZlY3RvckJhcicsJ1xcdTI5NTgnOidMZWZ0VXBWZWN0b3JCYXInLCdcXHUyOTU5JzonTGVmdERvd25WZWN0b3JCYXInLCdcXHUyOTVBJzonTGVmdFRlZVZlY3RvcicsJ1xcdTI5NUInOidSaWdodFRlZVZlY3RvcicsJ1xcdTI5NUMnOidSaWdodFVwVGVlVmVjdG9yJywnXFx1Mjk1RCc6J1JpZ2h0RG93blRlZVZlY3RvcicsJ1xcdTI5NUUnOidEb3duTGVmdFRlZVZlY3RvcicsJ1xcdTI5NUYnOidEb3duUmlnaHRUZWVWZWN0b3InLCdcXHUyOTYwJzonTGVmdFVwVGVlVmVjdG9yJywnXFx1Mjk2MSc6J0xlZnREb3duVGVlVmVjdG9yJywnXFx1Mjk2Mic6J2xIYXInLCdcXHUyOTYzJzondUhhcicsJ1xcdTI5NjQnOidySGFyJywnXFx1Mjk2NSc6J2RIYXInLCdcXHUyOTY2JzonbHVydWhhcicsJ1xcdTI5NjcnOidsZHJkaGFyJywnXFx1Mjk2OCc6J3J1bHVoYXInLCdcXHUyOTY5JzoncmRsZGhhcicsJ1xcdTI5NkEnOidsaGFydWwnLCdcXHUyOTZCJzonbGxoYXJkJywnXFx1Mjk2Qyc6J3JoYXJ1bCcsJ1xcdTI5NkQnOidscmhhcmQnLCdcXHUyOTZFJzondWRoYXInLCdcXHUyOTZGJzonZHVoYXInLCdcXHUyOTcwJzonUm91bmRJbXBsaWVzJywnXFx1Mjk3MSc6J2VyYXJyJywnXFx1Mjk3Mic6J3NpbXJhcnInLCdcXHUyOTczJzonbGFycnNpbScsJ1xcdTI5NzQnOidyYXJyc2ltJywnXFx1Mjk3NSc6J3JhcnJhcCcsJ1xcdTI5NzYnOidsdGxhcnInLCdcXHUyOTc4JzonZ3RyYXJyJywnXFx1Mjk3OSc6J3N1YnJhcnInLCdcXHUyOTdCJzonc3VwbGFycicsJ1xcdTI5N0MnOidsZmlzaHQnLCdcXHUyOTdEJzoncmZpc2h0JywnXFx1Mjk3RSc6J3VmaXNodCcsJ1xcdTI5N0YnOidkZmlzaHQnLCdcXHUyOTlBJzondnppZ3phZycsJ1xcdTI5OUMnOid2YW5ncnQnLCdcXHUyOTlEJzonYW5ncnR2YmQnLCdcXHUyOUE0JzonYW5nZScsJ1xcdTI5QTUnOidyYW5nZScsJ1xcdTI5QTYnOidkd2FuZ2xlJywnXFx1MjlBNyc6J3V3YW5nbGUnLCdcXHUyOUE4JzonYW5nbXNkYWEnLCdcXHUyOUE5JzonYW5nbXNkYWInLCdcXHUyOUFBJzonYW5nbXNkYWMnLCdcXHUyOUFCJzonYW5nbXNkYWQnLCdcXHUyOUFDJzonYW5nbXNkYWUnLCdcXHUyOUFEJzonYW5nbXNkYWYnLCdcXHUyOUFFJzonYW5nbXNkYWcnLCdcXHUyOUFGJzonYW5nbXNkYWgnLCdcXHUyOUIwJzonYmVtcHR5dicsJ1xcdTI5QjEnOidkZW1wdHl2JywnXFx1MjlCMic6J2NlbXB0eXYnLCdcXHUyOUIzJzoncmFlbXB0eXYnLCdcXHUyOUI0JzonbGFlbXB0eXYnLCdcXHUyOUI1Jzonb2hiYXInLCdcXHUyOUI2Jzonb21pZCcsJ1xcdTI5QjcnOidvcGFyJywnXFx1MjlCOSc6J29wZXJwJywnXFx1MjlCQic6J29sY3Jvc3MnLCdcXHUyOUJDJzonb2Rzb2xkJywnXFx1MjlCRSc6J29sY2lyJywnXFx1MjlCRic6J29mY2lyJywnXFx1MjlDMCc6J29sdCcsJ1xcdTI5QzEnOidvZ3QnLCdcXHUyOUMyJzonY2lyc2NpcicsJ1xcdTI5QzMnOidjaXJFJywnXFx1MjlDNCc6J3NvbGInLCdcXHUyOUM1JzonYnNvbGInLCdcXHUyOUM5JzonYm94Ym94JywnXFx1MjlDRCc6J3RyaXNiJywnXFx1MjlDRSc6J3J0cmlsdHJpJywnXFx1MjlDRic6J0xlZnRUcmlhbmdsZUJhcicsJ1xcdTI5Q0ZcXHUwMzM4JzonTm90TGVmdFRyaWFuZ2xlQmFyJywnXFx1MjlEMCc6J1JpZ2h0VHJpYW5nbGVCYXInLCdcXHUyOUQwXFx1MDMzOCc6J05vdFJpZ2h0VHJpYW5nbGVCYXInLCdcXHUyOURDJzonaWluZmluJywnXFx1MjlERCc6J2luZmludGllJywnXFx1MjlERSc6J252aW5maW4nLCdcXHUyOUUzJzonZXBhcnNsJywnXFx1MjlFNCc6J3NtZXBhcnNsJywnXFx1MjlFNSc6J2VxdnBhcnNsJywnXFx1MjlFQic6J2xvemYnLCdcXHUyOUY0JzonUnVsZURlbGF5ZWQnLCdcXHUyOUY2JzonZHNvbCcsJ1xcdTJBMDAnOid4b2RvdCcsJ1xcdTJBMDEnOid4b3BsdXMnLCdcXHUyQTAyJzoneG90aW1lJywnXFx1MkEwNCc6J3h1cGx1cycsJ1xcdTJBMDYnOid4c3FjdXAnLCdcXHUyQTBEJzonZnBhcnRpbnQnLCdcXHUyQTEwJzonY2lyZm5pbnQnLCdcXHUyQTExJzonYXdpbnQnLCdcXHUyQTEyJzoncnBwb2xpbnQnLCdcXHUyQTEzJzonc2Nwb2xpbnQnLCdcXHUyQTE0JzonbnBvbGludCcsJ1xcdTJBMTUnOidwb2ludGludCcsJ1xcdTJBMTYnOidxdWF0aW50JywnXFx1MkExNyc6J2ludGxhcmhrJywnXFx1MkEyMic6J3BsdXNjaXInLCdcXHUyQTIzJzoncGx1c2FjaXInLCdcXHUyQTI0Jzonc2ltcGx1cycsJ1xcdTJBMjUnOidwbHVzZHUnLCdcXHUyQTI2JzoncGx1c3NpbScsJ1xcdTJBMjcnOidwbHVzdHdvJywnXFx1MkEyOSc6J21jb21tYScsJ1xcdTJBMkEnOidtaW51c2R1JywnXFx1MkEyRCc6J2xvcGx1cycsJ1xcdTJBMkUnOidyb3BsdXMnLCdcXHUyQTJGJzonQ3Jvc3MnLCdcXHUyQTMwJzondGltZXNkJywnXFx1MkEzMSc6J3RpbWVzYmFyJywnXFx1MkEzMyc6J3NtYXNocCcsJ1xcdTJBMzQnOidsb3RpbWVzJywnXFx1MkEzNSc6J3JvdGltZXMnLCdcXHUyQTM2Jzonb3RpbWVzYXMnLCdcXHUyQTM3JzonT3RpbWVzJywnXFx1MkEzOCc6J29kaXYnLCdcXHUyQTM5JzondHJpcGx1cycsJ1xcdTJBM0EnOid0cmltaW51cycsJ1xcdTJBM0InOid0cml0aW1lJywnXFx1MkEzQyc6J2lwcm9kJywnXFx1MkEzRic6J2FtYWxnJywnXFx1MkE0MCc6J2NhcGRvdCcsJ1xcdTJBNDInOiduY3VwJywnXFx1MkE0Myc6J25jYXAnLCdcXHUyQTQ0JzonY2FwYW5kJywnXFx1MkE0NSc6J2N1cG9yJywnXFx1MkE0Nic6J2N1cGNhcCcsJ1xcdTJBNDcnOidjYXBjdXAnLCdcXHUyQTQ4JzonY3VwYnJjYXAnLCdcXHUyQTQ5JzonY2FwYnJjdXAnLCdcXHUyQTRBJzonY3VwY3VwJywnXFx1MkE0Qic6J2NhcGNhcCcsJ1xcdTJBNEMnOidjY3VwcycsJ1xcdTJBNEQnOidjY2FwcycsJ1xcdTJBNTAnOidjY3Vwc3NtJywnXFx1MkE1Myc6J0FuZCcsJ1xcdTJBNTQnOidPcicsJ1xcdTJBNTUnOidhbmRhbmQnLCdcXHUyQTU2Jzonb3JvcicsJ1xcdTJBNTcnOidvcnNsb3BlJywnXFx1MkE1OCc6J2FuZHNsb3BlJywnXFx1MkE1QSc6J2FuZHYnLCdcXHUyQTVCJzonb3J2JywnXFx1MkE1Qyc6J2FuZGQnLCdcXHUyQTVEJzonb3JkJywnXFx1MkE1Ric6J3dlZGJhcicsJ1xcdTJBNjYnOidzZG90ZScsJ1xcdTJBNkEnOidzaW1kb3QnLCdcXHUyQTZEJzonY29uZ2RvdCcsJ1xcdTJBNkRcXHUwMzM4JzonbmNvbmdkb3QnLCdcXHUyQTZFJzonZWFzdGVyJywnXFx1MkE2Ric6J2FwYWNpcicsJ1xcdTJBNzAnOidhcEUnLCdcXHUyQTcwXFx1MDMzOCc6J25hcEUnLCdcXHUyQTcxJzonZXBsdXMnLCdcXHUyQTcyJzoncGx1c2UnLCdcXHUyQTczJzonRXNpbScsJ1xcdTJBNzcnOidlRERvdCcsJ1xcdTJBNzgnOidlcXVpdkREJywnXFx1MkE3OSc6J2x0Y2lyJywnXFx1MkE3QSc6J2d0Y2lyJywnXFx1MkE3Qic6J2x0cXVlc3QnLCdcXHUyQTdDJzonZ3RxdWVzdCcsJ1xcdTJBN0QnOidsZXMnLCdcXHUyQTdEXFx1MDMzOCc6J25sZXMnLCdcXHUyQTdFJzonZ2VzJywnXFx1MkE3RVxcdTAzMzgnOiduZ2VzJywnXFx1MkE3Ric6J2xlc2RvdCcsJ1xcdTJBODAnOidnZXNkb3QnLCdcXHUyQTgxJzonbGVzZG90bycsJ1xcdTJBODInOidnZXNkb3RvJywnXFx1MkE4Myc6J2xlc2RvdG9yJywnXFx1MkE4NCc6J2dlc2RvdG9sJywnXFx1MkE4NSc6J2xhcCcsJ1xcdTJBODYnOidnYXAnLCdcXHUyQTg3JzonbG5lJywnXFx1MkE4OCc6J2duZScsJ1xcdTJBODknOidsbmFwJywnXFx1MkE4QSc6J2duYXAnLCdcXHUyQThCJzonbEVnJywnXFx1MkE4Qyc6J2dFbCcsJ1xcdTJBOEQnOidsc2ltZScsJ1xcdTJBOEUnOidnc2ltZScsJ1xcdTJBOEYnOidsc2ltZycsJ1xcdTJBOTAnOidnc2ltbCcsJ1xcdTJBOTEnOidsZ0UnLCdcXHUyQTkyJzonZ2xFJywnXFx1MkE5Myc6J2xlc2dlcycsJ1xcdTJBOTQnOidnZXNsZXMnLCdcXHUyQTk1JzonZWxzJywnXFx1MkE5Nic6J2VncycsJ1xcdTJBOTcnOidlbHNkb3QnLCdcXHUyQTk4JzonZWdzZG90JywnXFx1MkE5OSc6J2VsJywnXFx1MkE5QSc6J2VnJywnXFx1MkE5RCc6J3NpbWwnLCdcXHUyQTlFJzonc2ltZycsJ1xcdTJBOUYnOidzaW1sRScsJ1xcdTJBQTAnOidzaW1nRScsJ1xcdTJBQTEnOidMZXNzTGVzcycsJ1xcdTJBQTFcXHUwMzM4JzonTm90TmVzdGVkTGVzc0xlc3MnLCdcXHUyQUEyJzonR3JlYXRlckdyZWF0ZXInLCdcXHUyQUEyXFx1MDMzOCc6J05vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyJywnXFx1MkFBNCc6J2dsaicsJ1xcdTJBQTUnOidnbGEnLCdcXHUyQUE2JzonbHRjYycsJ1xcdTJBQTcnOidndGNjJywnXFx1MkFBOCc6J2xlc2NjJywnXFx1MkFBOSc6J2dlc2NjJywnXFx1MkFBQSc6J3NtdCcsJ1xcdTJBQUInOidsYXQnLCdcXHUyQUFDJzonc210ZScsJ1xcdTJBQUNcXHVGRTAwJzonc210ZXMnLCdcXHUyQUFEJzonbGF0ZScsJ1xcdTJBQURcXHVGRTAwJzonbGF0ZXMnLCdcXHUyQUFFJzonYnVtcEUnLCdcXHUyQUFGJzoncHJlJywnXFx1MkFBRlxcdTAzMzgnOiducHJlJywnXFx1MkFCMCc6J3NjZScsJ1xcdTJBQjBcXHUwMzM4JzonbnNjZScsJ1xcdTJBQjMnOidwckUnLCdcXHUyQUI0Jzonc2NFJywnXFx1MkFCNSc6J3BybkUnLCdcXHUyQUI2Jzonc2NuRScsJ1xcdTJBQjcnOidwcmFwJywnXFx1MkFCOCc6J3NjYXAnLCdcXHUyQUI5JzoncHJuYXAnLCdcXHUyQUJBJzonc2NuYXAnLCdcXHUyQUJCJzonUHInLCdcXHUyQUJDJzonU2MnLCdcXHUyQUJEJzonc3ViZG90JywnXFx1MkFCRSc6J3N1cGRvdCcsJ1xcdTJBQkYnOidzdWJwbHVzJywnXFx1MkFDMCc6J3N1cHBsdXMnLCdcXHUyQUMxJzonc3VibXVsdCcsJ1xcdTJBQzInOidzdXBtdWx0JywnXFx1MkFDMyc6J3N1YmVkb3QnLCdcXHUyQUM0Jzonc3VwZWRvdCcsJ1xcdTJBQzUnOidzdWJFJywnXFx1MkFDNVxcdTAzMzgnOiduc3ViRScsJ1xcdTJBQzYnOidzdXBFJywnXFx1MkFDNlxcdTAzMzgnOiduc3VwRScsJ1xcdTJBQzcnOidzdWJzaW0nLCdcXHUyQUM4Jzonc3Vwc2ltJywnXFx1MkFDQlxcdUZFMDAnOid2c3VibkUnLCdcXHUyQUNCJzonc3VibkUnLCdcXHUyQUNDXFx1RkUwMCc6J3ZzdXBuRScsJ1xcdTJBQ0MnOidzdXBuRScsJ1xcdTJBQ0YnOidjc3ViJywnXFx1MkFEMCc6J2NzdXAnLCdcXHUyQUQxJzonY3N1YmUnLCdcXHUyQUQyJzonY3N1cGUnLCdcXHUyQUQzJzonc3Vic3VwJywnXFx1MkFENCc6J3N1cHN1YicsJ1xcdTJBRDUnOidzdWJzdWInLCdcXHUyQUQ2Jzonc3Vwc3VwJywnXFx1MkFENyc6J3N1cGhzdWInLCdcXHUyQUQ4Jzonc3VwZHN1YicsJ1xcdTJBRDknOidmb3JrdicsJ1xcdTJBREEnOid0b3Bmb3JrJywnXFx1MkFEQic6J21sY3AnLCdcXHUyQUU0JzonRGFzaHYnLCdcXHUyQUU2JzonVmRhc2hsJywnXFx1MkFFNyc6J0JhcnYnLCdcXHUyQUU4JzondkJhcicsJ1xcdTJBRTknOid2QmFydicsJ1xcdTJBRUInOidWYmFyJywnXFx1MkFFQyc6J05vdCcsJ1xcdTJBRUQnOidiTm90JywnXFx1MkFFRSc6J3JubWlkJywnXFx1MkFFRic6J2Npcm1pZCcsJ1xcdTJBRjAnOidtaWRjaXInLCdcXHUyQUYxJzondG9wY2lyJywnXFx1MkFGMic6J25ocGFyJywnXFx1MkFGMyc6J3BhcnNpbScsJ1xcdTJBRkQnOidwYXJzbCcsJ1xcdTJBRkRcXHUyMEU1JzonbnBhcnNsJywnXFx1MjY2RCc6J2ZsYXQnLCdcXHUyNjZFJzonbmF0dXInLCdcXHUyNjZGJzonc2hhcnAnLCdcXHhBNCc6J2N1cnJlbicsJ1xceEEyJzonY2VudCcsJyQnOidkb2xsYXInLCdcXHhBMyc6J3BvdW5kJywnXFx4QTUnOid5ZW4nLCdcXHUyMEFDJzonZXVybycsJ1xceEI5Jzonc3VwMScsJ1xceEJEJzonaGFsZicsJ1xcdTIxNTMnOidmcmFjMTMnLCdcXHhCQyc6J2ZyYWMxNCcsJ1xcdTIxNTUnOidmcmFjMTUnLCdcXHUyMTU5JzonZnJhYzE2JywnXFx1MjE1Qic6J2ZyYWMxOCcsJ1xceEIyJzonc3VwMicsJ1xcdTIxNTQnOidmcmFjMjMnLCdcXHUyMTU2JzonZnJhYzI1JywnXFx4QjMnOidzdXAzJywnXFx4QkUnOidmcmFjMzQnLCdcXHUyMTU3JzonZnJhYzM1JywnXFx1MjE1Qyc6J2ZyYWMzOCcsJ1xcdTIxNTgnOidmcmFjNDUnLCdcXHUyMTVBJzonZnJhYzU2JywnXFx1MjE1RCc6J2ZyYWM1OCcsJ1xcdTIxNUUnOidmcmFjNzgnLCdcXHVEODM1XFx1RENCNic6J2FzY3InLCdcXHVEODM1XFx1REQ1Mic6J2FvcGYnLCdcXHVEODM1XFx1REQxRSc6J2FmcicsJ1xcdUQ4MzVcXHVERDM4JzonQW9wZicsJ1xcdUQ4MzVcXHVERDA0JzonQWZyJywnXFx1RDgzNVxcdURDOUMnOidBc2NyJywnXFx4QUEnOidvcmRmJywnXFx4RTEnOidhYWN1dGUnLCdcXHhDMSc6J0FhY3V0ZScsJ1xceEUwJzonYWdyYXZlJywnXFx4QzAnOidBZ3JhdmUnLCdcXHUwMTAzJzonYWJyZXZlJywnXFx1MDEwMic6J0FicmV2ZScsJ1xceEUyJzonYWNpcmMnLCdcXHhDMic6J0FjaXJjJywnXFx4RTUnOidhcmluZycsJ1xceEM1JzonYW5nc3QnLCdcXHhFNCc6J2F1bWwnLCdcXHhDNCc6J0F1bWwnLCdcXHhFMyc6J2F0aWxkZScsJ1xceEMzJzonQXRpbGRlJywnXFx1MDEwNSc6J2FvZ29uJywnXFx1MDEwNCc6J0FvZ29uJywnXFx1MDEwMSc6J2FtYWNyJywnXFx1MDEwMCc6J0FtYWNyJywnXFx4RTYnOidhZWxpZycsJ1xceEM2JzonQUVsaWcnLCdcXHVEODM1XFx1RENCNyc6J2JzY3InLCdcXHVEODM1XFx1REQ1Myc6J2JvcGYnLCdcXHVEODM1XFx1REQxRic6J2JmcicsJ1xcdUQ4MzVcXHVERDM5JzonQm9wZicsJ1xcdTIxMkMnOidCc2NyJywnXFx1RDgzNVxcdUREMDUnOidCZnInLCdcXHVEODM1XFx1REQyMCc6J2NmcicsJ1xcdUQ4MzVcXHVEQ0I4JzonY3NjcicsJ1xcdUQ4MzVcXHVERDU0JzonY29wZicsJ1xcdTIxMkQnOidDZnInLCdcXHVEODM1XFx1REM5RSc6J0NzY3InLCdcXHUyMTAyJzonQ29wZicsJ1xcdTAxMDcnOidjYWN1dGUnLCdcXHUwMTA2JzonQ2FjdXRlJywnXFx1MDEwOSc6J2NjaXJjJywnXFx1MDEwOCc6J0NjaXJjJywnXFx1MDEwRCc6J2NjYXJvbicsJ1xcdTAxMEMnOidDY2Fyb24nLCdcXHUwMTBCJzonY2RvdCcsJ1xcdTAxMEEnOidDZG90JywnXFx4RTcnOidjY2VkaWwnLCdcXHhDNyc6J0NjZWRpbCcsJ1xcdTIxMDUnOidpbmNhcmUnLCdcXHVEODM1XFx1REQyMSc6J2RmcicsJ1xcdTIxNDYnOidkZCcsJ1xcdUQ4MzVcXHVERDU1JzonZG9wZicsJ1xcdUQ4MzVcXHVEQ0I5JzonZHNjcicsJ1xcdUQ4MzVcXHVEQzlGJzonRHNjcicsJ1xcdUQ4MzVcXHVERDA3JzonRGZyJywnXFx1MjE0NSc6J0REJywnXFx1RDgzNVxcdUREM0InOidEb3BmJywnXFx1MDEwRic6J2RjYXJvbicsJ1xcdTAxMEUnOidEY2Fyb24nLCdcXHUwMTExJzonZHN0cm9rJywnXFx1MDExMCc6J0RzdHJvaycsJ1xceEYwJzonZXRoJywnXFx4RDAnOidFVEgnLCdcXHUyMTQ3JzonZWUnLCdcXHUyMTJGJzonZXNjcicsJ1xcdUQ4MzVcXHVERDIyJzonZWZyJywnXFx1RDgzNVxcdURENTYnOidlb3BmJywnXFx1MjEzMCc6J0VzY3InLCdcXHVEODM1XFx1REQwOCc6J0VmcicsJ1xcdUQ4MzVcXHVERDNDJzonRW9wZicsJ1xceEU5JzonZWFjdXRlJywnXFx4QzknOidFYWN1dGUnLCdcXHhFOCc6J2VncmF2ZScsJ1xceEM4JzonRWdyYXZlJywnXFx4RUEnOidlY2lyYycsJ1xceENBJzonRWNpcmMnLCdcXHUwMTFCJzonZWNhcm9uJywnXFx1MDExQSc6J0VjYXJvbicsJ1xceEVCJzonZXVtbCcsJ1xceENCJzonRXVtbCcsJ1xcdTAxMTcnOidlZG90JywnXFx1MDExNic6J0Vkb3QnLCdcXHUwMTE5JzonZW9nb24nLCdcXHUwMTE4JzonRW9nb24nLCdcXHUwMTEzJzonZW1hY3InLCdcXHUwMTEyJzonRW1hY3InLCdcXHVEODM1XFx1REQyMyc6J2ZmcicsJ1xcdUQ4MzVcXHVERDU3JzonZm9wZicsJ1xcdUQ4MzVcXHVEQ0JCJzonZnNjcicsJ1xcdUQ4MzVcXHVERDA5JzonRmZyJywnXFx1RDgzNVxcdUREM0QnOidGb3BmJywnXFx1MjEzMSc6J0ZzY3InLCdcXHVGQjAwJzonZmZsaWcnLCdcXHVGQjAzJzonZmZpbGlnJywnXFx1RkIwNCc6J2ZmbGxpZycsJ1xcdUZCMDEnOidmaWxpZycsJ2ZqJzonZmpsaWcnLCdcXHVGQjAyJzonZmxsaWcnLCdcXHUwMTkyJzonZm5vZicsJ1xcdTIxMEEnOidnc2NyJywnXFx1RDgzNVxcdURENTgnOidnb3BmJywnXFx1RDgzNVxcdUREMjQnOidnZnInLCdcXHVEODM1XFx1RENBMic6J0dzY3InLCdcXHVEODM1XFx1REQzRSc6J0dvcGYnLCdcXHVEODM1XFx1REQwQSc6J0dmcicsJ1xcdTAxRjUnOidnYWN1dGUnLCdcXHUwMTFGJzonZ2JyZXZlJywnXFx1MDExRSc6J0dicmV2ZScsJ1xcdTAxMUQnOidnY2lyYycsJ1xcdTAxMUMnOidHY2lyYycsJ1xcdTAxMjEnOidnZG90JywnXFx1MDEyMCc6J0dkb3QnLCdcXHUwMTIyJzonR2NlZGlsJywnXFx1RDgzNVxcdUREMjUnOidoZnInLCdcXHUyMTBFJzoncGxhbmNraCcsJ1xcdUQ4MzVcXHVEQ0JEJzonaHNjcicsJ1xcdUQ4MzVcXHVERDU5JzonaG9wZicsJ1xcdTIxMEInOidIc2NyJywnXFx1MjEwQyc6J0hmcicsJ1xcdTIxMEQnOidIb3BmJywnXFx1MDEyNSc6J2hjaXJjJywnXFx1MDEyNCc6J0hjaXJjJywnXFx1MjEwRic6J2hiYXInLCdcXHUwMTI3JzonaHN0cm9rJywnXFx1MDEyNic6J0hzdHJvaycsJ1xcdUQ4MzVcXHVERDVBJzonaW9wZicsJ1xcdUQ4MzVcXHVERDI2JzonaWZyJywnXFx1RDgzNVxcdURDQkUnOidpc2NyJywnXFx1MjE0OCc6J2lpJywnXFx1RDgzNVxcdURENDAnOidJb3BmJywnXFx1MjExMCc6J0lzY3InLCdcXHUyMTExJzonSW0nLCdcXHhFRCc6J2lhY3V0ZScsJ1xceENEJzonSWFjdXRlJywnXFx4RUMnOidpZ3JhdmUnLCdcXHhDQyc6J0lncmF2ZScsJ1xceEVFJzonaWNpcmMnLCdcXHhDRSc6J0ljaXJjJywnXFx4RUYnOidpdW1sJywnXFx4Q0YnOidJdW1sJywnXFx1MDEyOSc6J2l0aWxkZScsJ1xcdTAxMjgnOidJdGlsZGUnLCdcXHUwMTMwJzonSWRvdCcsJ1xcdTAxMkYnOidpb2dvbicsJ1xcdTAxMkUnOidJb2dvbicsJ1xcdTAxMkInOidpbWFjcicsJ1xcdTAxMkEnOidJbWFjcicsJ1xcdTAxMzMnOidpamxpZycsJ1xcdTAxMzInOidJSmxpZycsJ1xcdTAxMzEnOidpbWF0aCcsJ1xcdUQ4MzVcXHVEQ0JGJzonanNjcicsJ1xcdUQ4MzVcXHVERDVCJzonam9wZicsJ1xcdUQ4MzVcXHVERDI3JzonamZyJywnXFx1RDgzNVxcdURDQTUnOidKc2NyJywnXFx1RDgzNVxcdUREMEQnOidKZnInLCdcXHVEODM1XFx1REQ0MSc6J0pvcGYnLCdcXHUwMTM1JzonamNpcmMnLCdcXHUwMTM0JzonSmNpcmMnLCdcXHUwMjM3Jzonam1hdGgnLCdcXHVEODM1XFx1REQ1Qyc6J2tvcGYnLCdcXHVEODM1XFx1RENDMCc6J2tzY3InLCdcXHVEODM1XFx1REQyOCc6J2tmcicsJ1xcdUQ4MzVcXHVEQ0E2JzonS3NjcicsJ1xcdUQ4MzVcXHVERDQyJzonS29wZicsJ1xcdUQ4MzVcXHVERDBFJzonS2ZyJywnXFx1MDEzNyc6J2tjZWRpbCcsJ1xcdTAxMzYnOidLY2VkaWwnLCdcXHVEODM1XFx1REQyOSc6J2xmcicsJ1xcdUQ4MzVcXHVEQ0MxJzonbHNjcicsJ1xcdTIxMTMnOidlbGwnLCdcXHVEODM1XFx1REQ1RCc6J2xvcGYnLCdcXHUyMTEyJzonTHNjcicsJ1xcdUQ4MzVcXHVERDBGJzonTGZyJywnXFx1RDgzNVxcdURENDMnOidMb3BmJywnXFx1MDEzQSc6J2xhY3V0ZScsJ1xcdTAxMzknOidMYWN1dGUnLCdcXHUwMTNFJzonbGNhcm9uJywnXFx1MDEzRCc6J0xjYXJvbicsJ1xcdTAxM0MnOidsY2VkaWwnLCdcXHUwMTNCJzonTGNlZGlsJywnXFx1MDE0Mic6J2xzdHJvaycsJ1xcdTAxNDEnOidMc3Ryb2snLCdcXHUwMTQwJzonbG1pZG90JywnXFx1MDEzRic6J0xtaWRvdCcsJ1xcdUQ4MzVcXHVERDJBJzonbWZyJywnXFx1RDgzNVxcdURENUUnOidtb3BmJywnXFx1RDgzNVxcdURDQzInOidtc2NyJywnXFx1RDgzNVxcdUREMTAnOidNZnInLCdcXHVEODM1XFx1REQ0NCc6J01vcGYnLCdcXHUyMTMzJzonTXNjcicsJ1xcdUQ4MzVcXHVERDJCJzonbmZyJywnXFx1RDgzNVxcdURENUYnOidub3BmJywnXFx1RDgzNVxcdURDQzMnOiduc2NyJywnXFx1MjExNSc6J05vcGYnLCdcXHVEODM1XFx1RENBOSc6J05zY3InLCdcXHVEODM1XFx1REQxMSc6J05mcicsJ1xcdTAxNDQnOiduYWN1dGUnLCdcXHUwMTQzJzonTmFjdXRlJywnXFx1MDE0OCc6J25jYXJvbicsJ1xcdTAxNDcnOidOY2Fyb24nLCdcXHhGMSc6J250aWxkZScsJ1xceEQxJzonTnRpbGRlJywnXFx1MDE0Nic6J25jZWRpbCcsJ1xcdTAxNDUnOidOY2VkaWwnLCdcXHUyMTE2JzonbnVtZXJvJywnXFx1MDE0Qic6J2VuZycsJ1xcdTAxNEEnOidFTkcnLCdcXHVEODM1XFx1REQ2MCc6J29vcGYnLCdcXHVEODM1XFx1REQyQyc6J29mcicsJ1xcdTIxMzQnOidvc2NyJywnXFx1RDgzNVxcdURDQUEnOidPc2NyJywnXFx1RDgzNVxcdUREMTInOidPZnInLCdcXHVEODM1XFx1REQ0Nic6J09vcGYnLCdcXHhCQSc6J29yZG0nLCdcXHhGMyc6J29hY3V0ZScsJ1xceEQzJzonT2FjdXRlJywnXFx4RjInOidvZ3JhdmUnLCdcXHhEMic6J09ncmF2ZScsJ1xceEY0Jzonb2NpcmMnLCdcXHhENCc6J09jaXJjJywnXFx4RjYnOidvdW1sJywnXFx4RDYnOidPdW1sJywnXFx1MDE1MSc6J29kYmxhYycsJ1xcdTAxNTAnOidPZGJsYWMnLCdcXHhGNSc6J290aWxkZScsJ1xceEQ1JzonT3RpbGRlJywnXFx4RjgnOidvc2xhc2gnLCdcXHhEOCc6J09zbGFzaCcsJ1xcdTAxNEQnOidvbWFjcicsJ1xcdTAxNEMnOidPbWFjcicsJ1xcdTAxNTMnOidvZWxpZycsJ1xcdTAxNTInOidPRWxpZycsJ1xcdUQ4MzVcXHVERDJEJzoncGZyJywnXFx1RDgzNVxcdURDQzUnOidwc2NyJywnXFx1RDgzNVxcdURENjEnOidwb3BmJywnXFx1MjExOSc6J1BvcGYnLCdcXHVEODM1XFx1REQxMyc6J1BmcicsJ1xcdUQ4MzVcXHVEQ0FCJzonUHNjcicsJ1xcdUQ4MzVcXHVERDYyJzoncW9wZicsJ1xcdUQ4MzVcXHVERDJFJzoncWZyJywnXFx1RDgzNVxcdURDQzYnOidxc2NyJywnXFx1RDgzNVxcdURDQUMnOidRc2NyJywnXFx1RDgzNVxcdUREMTQnOidRZnInLCdcXHUyMTFBJzonUW9wZicsJ1xcdTAxMzgnOidrZ3JlZW4nLCdcXHVEODM1XFx1REQyRic6J3JmcicsJ1xcdUQ4MzVcXHVERDYzJzoncm9wZicsJ1xcdUQ4MzVcXHVEQ0M3JzoncnNjcicsJ1xcdTIxMUInOidSc2NyJywnXFx1MjExQyc6J1JlJywnXFx1MjExRCc6J1JvcGYnLCdcXHUwMTU1JzoncmFjdXRlJywnXFx1MDE1NCc6J1JhY3V0ZScsJ1xcdTAxNTknOidyY2Fyb24nLCdcXHUwMTU4JzonUmNhcm9uJywnXFx1MDE1Nyc6J3JjZWRpbCcsJ1xcdTAxNTYnOidSY2VkaWwnLCdcXHVEODM1XFx1REQ2NCc6J3NvcGYnLCdcXHVEODM1XFx1RENDOCc6J3NzY3InLCdcXHVEODM1XFx1REQzMCc6J3NmcicsJ1xcdUQ4MzVcXHVERDRBJzonU29wZicsJ1xcdUQ4MzVcXHVERDE2JzonU2ZyJywnXFx1RDgzNVxcdURDQUUnOidTc2NyJywnXFx1MjRDOCc6J29TJywnXFx1MDE1Qic6J3NhY3V0ZScsJ1xcdTAxNUEnOidTYWN1dGUnLCdcXHUwMTVEJzonc2NpcmMnLCdcXHUwMTVDJzonU2NpcmMnLCdcXHUwMTYxJzonc2Nhcm9uJywnXFx1MDE2MCc6J1NjYXJvbicsJ1xcdTAxNUYnOidzY2VkaWwnLCdcXHUwMTVFJzonU2NlZGlsJywnXFx4REYnOidzemxpZycsJ1xcdUQ4MzVcXHVERDMxJzondGZyJywnXFx1RDgzNVxcdURDQzknOid0c2NyJywnXFx1RDgzNVxcdURENjUnOid0b3BmJywnXFx1RDgzNVxcdURDQUYnOidUc2NyJywnXFx1RDgzNVxcdUREMTcnOidUZnInLCdcXHVEODM1XFx1REQ0Qic6J1RvcGYnLCdcXHUwMTY1JzondGNhcm9uJywnXFx1MDE2NCc6J1RjYXJvbicsJ1xcdTAxNjMnOid0Y2VkaWwnLCdcXHUwMTYyJzonVGNlZGlsJywnXFx1MjEyMic6J3RyYWRlJywnXFx1MDE2Nyc6J3RzdHJvaycsJ1xcdTAxNjYnOidUc3Ryb2snLCdcXHVEODM1XFx1RENDQSc6J3VzY3InLCdcXHVEODM1XFx1REQ2Nic6J3VvcGYnLCdcXHVEODM1XFx1REQzMic6J3VmcicsJ1xcdUQ4MzVcXHVERDRDJzonVW9wZicsJ1xcdUQ4MzVcXHVERDE4JzonVWZyJywnXFx1RDgzNVxcdURDQjAnOidVc2NyJywnXFx4RkEnOid1YWN1dGUnLCdcXHhEQSc6J1VhY3V0ZScsJ1xceEY5JzondWdyYXZlJywnXFx4RDknOidVZ3JhdmUnLCdcXHUwMTZEJzondWJyZXZlJywnXFx1MDE2Qyc6J1VicmV2ZScsJ1xceEZCJzondWNpcmMnLCdcXHhEQic6J1VjaXJjJywnXFx1MDE2Ric6J3VyaW5nJywnXFx1MDE2RSc6J1VyaW5nJywnXFx4RkMnOid1dW1sJywnXFx4REMnOidVdW1sJywnXFx1MDE3MSc6J3VkYmxhYycsJ1xcdTAxNzAnOidVZGJsYWMnLCdcXHUwMTY5JzondXRpbGRlJywnXFx1MDE2OCc6J1V0aWxkZScsJ1xcdTAxNzMnOid1b2dvbicsJ1xcdTAxNzInOidVb2dvbicsJ1xcdTAxNkInOid1bWFjcicsJ1xcdTAxNkEnOidVbWFjcicsJ1xcdUQ4MzVcXHVERDMzJzondmZyJywnXFx1RDgzNVxcdURENjcnOid2b3BmJywnXFx1RDgzNVxcdURDQ0InOid2c2NyJywnXFx1RDgzNVxcdUREMTknOidWZnInLCdcXHVEODM1XFx1REQ0RCc6J1ZvcGYnLCdcXHVEODM1XFx1RENCMSc6J1ZzY3InLCdcXHVEODM1XFx1REQ2OCc6J3dvcGYnLCdcXHVEODM1XFx1RENDQyc6J3dzY3InLCdcXHVEODM1XFx1REQzNCc6J3dmcicsJ1xcdUQ4MzVcXHVEQ0IyJzonV3NjcicsJ1xcdUQ4MzVcXHVERDRFJzonV29wZicsJ1xcdUQ4MzVcXHVERDFBJzonV2ZyJywnXFx1MDE3NSc6J3djaXJjJywnXFx1MDE3NCc6J1djaXJjJywnXFx1RDgzNVxcdUREMzUnOid4ZnInLCdcXHVEODM1XFx1RENDRCc6J3hzY3InLCdcXHVEODM1XFx1REQ2OSc6J3hvcGYnLCdcXHVEODM1XFx1REQ0Ric6J1hvcGYnLCdcXHVEODM1XFx1REQxQic6J1hmcicsJ1xcdUQ4MzVcXHVEQ0IzJzonWHNjcicsJ1xcdUQ4MzVcXHVERDM2JzoneWZyJywnXFx1RDgzNVxcdURDQ0UnOid5c2NyJywnXFx1RDgzNVxcdURENkEnOid5b3BmJywnXFx1RDgzNVxcdURDQjQnOidZc2NyJywnXFx1RDgzNVxcdUREMUMnOidZZnInLCdcXHVEODM1XFx1REQ1MCc6J1lvcGYnLCdcXHhGRCc6J3lhY3V0ZScsJ1xceEREJzonWWFjdXRlJywnXFx1MDE3Nyc6J3ljaXJjJywnXFx1MDE3Nic6J1ljaXJjJywnXFx4RkYnOid5dW1sJywnXFx1MDE3OCc6J1l1bWwnLCdcXHVEODM1XFx1RENDRic6J3pzY3InLCdcXHVEODM1XFx1REQzNyc6J3pmcicsJ1xcdUQ4MzVcXHVERDZCJzonem9wZicsJ1xcdTIxMjgnOidaZnInLCdcXHUyMTI0JzonWm9wZicsJ1xcdUQ4MzVcXHVEQ0I1JzonWnNjcicsJ1xcdTAxN0EnOid6YWN1dGUnLCdcXHUwMTc5JzonWmFjdXRlJywnXFx1MDE3RSc6J3pjYXJvbicsJ1xcdTAxN0QnOidaY2Fyb24nLCdcXHUwMTdDJzonemRvdCcsJ1xcdTAxN0InOidaZG90JywnXFx1MDFCNSc6J2ltcGVkJywnXFx4RkUnOid0aG9ybicsJ1xceERFJzonVEhPUk4nLCdcXHUwMTQ5JzonbmFwb3MnLCdcXHUwM0IxJzonYWxwaGEnLCdcXHUwMzkxJzonQWxwaGEnLCdcXHUwM0IyJzonYmV0YScsJ1xcdTAzOTInOidCZXRhJywnXFx1MDNCMyc6J2dhbW1hJywnXFx1MDM5Myc6J0dhbW1hJywnXFx1MDNCNCc6J2RlbHRhJywnXFx1MDM5NCc6J0RlbHRhJywnXFx1MDNCNSc6J2Vwc2knLCdcXHUwM0Y1JzonZXBzaXYnLCdcXHUwMzk1JzonRXBzaWxvbicsJ1xcdTAzREQnOidnYW1tYWQnLCdcXHUwM0RDJzonR2FtbWFkJywnXFx1MDNCNic6J3pldGEnLCdcXHUwMzk2JzonWmV0YScsJ1xcdTAzQjcnOidldGEnLCdcXHUwMzk3JzonRXRhJywnXFx1MDNCOCc6J3RoZXRhJywnXFx1MDNEMSc6J3RoZXRhdicsJ1xcdTAzOTgnOidUaGV0YScsJ1xcdTAzQjknOidpb3RhJywnXFx1MDM5OSc6J0lvdGEnLCdcXHUwM0JBJzona2FwcGEnLCdcXHUwM0YwJzona2FwcGF2JywnXFx1MDM5QSc6J0thcHBhJywnXFx1MDNCQic6J2xhbWJkYScsJ1xcdTAzOUInOidMYW1iZGEnLCdcXHUwM0JDJzonbXUnLCdcXHhCNSc6J21pY3JvJywnXFx1MDM5Qyc6J011JywnXFx1MDNCRCc6J251JywnXFx1MDM5RCc6J051JywnXFx1MDNCRSc6J3hpJywnXFx1MDM5RSc6J1hpJywnXFx1MDNCRic6J29taWNyb24nLCdcXHUwMzlGJzonT21pY3JvbicsJ1xcdTAzQzAnOidwaScsJ1xcdTAzRDYnOidwaXYnLCdcXHUwM0EwJzonUGknLCdcXHUwM0MxJzoncmhvJywnXFx1MDNGMSc6J3Job3YnLCdcXHUwM0ExJzonUmhvJywnXFx1MDNDMyc6J3NpZ21hJywnXFx1MDNBMyc6J1NpZ21hJywnXFx1MDNDMic6J3NpZ21hZicsJ1xcdTAzQzQnOid0YXUnLCdcXHUwM0E0JzonVGF1JywnXFx1MDNDNSc6J3Vwc2knLCdcXHUwM0E1JzonVXBzaWxvbicsJ1xcdTAzRDInOidVcHNpJywnXFx1MDNDNic6J3BoaScsJ1xcdTAzRDUnOidwaGl2JywnXFx1MDNBNic6J1BoaScsJ1xcdTAzQzcnOidjaGknLCdcXHUwM0E3JzonQ2hpJywnXFx1MDNDOCc6J3BzaScsJ1xcdTAzQTgnOidQc2knLCdcXHUwM0M5Jzonb21lZ2EnLCdcXHUwM0E5Jzonb2htJywnXFx1MDQzMCc6J2FjeScsJ1xcdTA0MTAnOidBY3knLCdcXHUwNDMxJzonYmN5JywnXFx1MDQxMSc6J0JjeScsJ1xcdTA0MzInOid2Y3knLCdcXHUwNDEyJzonVmN5JywnXFx1MDQzMyc6J2djeScsJ1xcdTA0MTMnOidHY3knLCdcXHUwNDUzJzonZ2pjeScsJ1xcdTA0MDMnOidHSmN5JywnXFx1MDQzNCc6J2RjeScsJ1xcdTA0MTQnOidEY3knLCdcXHUwNDUyJzonZGpjeScsJ1xcdTA0MDInOidESmN5JywnXFx1MDQzNSc6J2llY3knLCdcXHUwNDE1JzonSUVjeScsJ1xcdTA0NTEnOidpb2N5JywnXFx1MDQwMSc6J0lPY3knLCdcXHUwNDU0JzonanVrY3knLCdcXHUwNDA0JzonSnVrY3knLCdcXHUwNDM2JzonemhjeScsJ1xcdTA0MTYnOidaSGN5JywnXFx1MDQzNyc6J3pjeScsJ1xcdTA0MTcnOidaY3knLCdcXHUwNDU1JzonZHNjeScsJ1xcdTA0MDUnOidEU2N5JywnXFx1MDQzOCc6J2ljeScsJ1xcdTA0MTgnOidJY3knLCdcXHUwNDU2JzonaXVrY3knLCdcXHUwNDA2JzonSXVrY3knLCdcXHUwNDU3JzoneWljeScsJ1xcdTA0MDcnOidZSWN5JywnXFx1MDQzOSc6J2pjeScsJ1xcdTA0MTknOidKY3knLCdcXHUwNDU4JzonanNlcmN5JywnXFx1MDQwOCc6J0pzZXJjeScsJ1xcdTA0M0EnOidrY3knLCdcXHUwNDFBJzonS2N5JywnXFx1MDQ1Qyc6J2tqY3knLCdcXHUwNDBDJzonS0pjeScsJ1xcdTA0M0InOidsY3knLCdcXHUwNDFCJzonTGN5JywnXFx1MDQ1OSc6J2xqY3knLCdcXHUwNDA5JzonTEpjeScsJ1xcdTA0M0MnOidtY3knLCdcXHUwNDFDJzonTWN5JywnXFx1MDQzRCc6J25jeScsJ1xcdTA0MUQnOidOY3knLCdcXHUwNDVBJzonbmpjeScsJ1xcdTA0MEEnOidOSmN5JywnXFx1MDQzRSc6J29jeScsJ1xcdTA0MUUnOidPY3knLCdcXHUwNDNGJzoncGN5JywnXFx1MDQxRic6J1BjeScsJ1xcdTA0NDAnOidyY3knLCdcXHUwNDIwJzonUmN5JywnXFx1MDQ0MSc6J3NjeScsJ1xcdTA0MjEnOidTY3knLCdcXHUwNDQyJzondGN5JywnXFx1MDQyMic6J1RjeScsJ1xcdTA0NUInOid0c2hjeScsJ1xcdTA0MEInOidUU0hjeScsJ1xcdTA0NDMnOid1Y3knLCdcXHUwNDIzJzonVWN5JywnXFx1MDQ1RSc6J3VicmN5JywnXFx1MDQwRSc6J1VicmN5JywnXFx1MDQ0NCc6J2ZjeScsJ1xcdTA0MjQnOidGY3knLCdcXHUwNDQ1Jzona2hjeScsJ1xcdTA0MjUnOidLSGN5JywnXFx1MDQ0Nic6J3RzY3knLCdcXHUwNDI2JzonVFNjeScsJ1xcdTA0NDcnOidjaGN5JywnXFx1MDQyNyc6J0NIY3knLCdcXHUwNDVGJzonZHpjeScsJ1xcdTA0MEYnOidEWmN5JywnXFx1MDQ0OCc6J3NoY3knLCdcXHUwNDI4JzonU0hjeScsJ1xcdTA0NDknOidzaGNoY3knLCdcXHUwNDI5JzonU0hDSGN5JywnXFx1MDQ0QSc6J2hhcmRjeScsJ1xcdTA0MkEnOidIQVJEY3knLCdcXHUwNDRCJzoneWN5JywnXFx1MDQyQic6J1ljeScsJ1xcdTA0NEMnOidzb2Z0Y3knLCdcXHUwNDJDJzonU09GVGN5JywnXFx1MDQ0RCc6J2VjeScsJ1xcdTA0MkQnOidFY3knLCdcXHUwNDRFJzoneXVjeScsJ1xcdTA0MkUnOidZVWN5JywnXFx1MDQ0Ric6J3lhY3knLCdcXHUwNDJGJzonWUFjeScsJ1xcdTIxMzUnOidhbGVwaCcsJ1xcdTIxMzYnOidiZXRoJywnXFx1MjEzNyc6J2dpbWVsJywnXFx1MjEzOCc6J2RhbGV0aCd9O1xuXG5cdHZhciByZWdleEVzY2FwZSA9IC9bXCImJzw+YF0vZztcblx0dmFyIGVzY2FwZU1hcCA9IHtcblx0XHQnXCInOiAnJnF1b3Q7Jyxcblx0XHQnJic6ICcmYW1wOycsXG5cdFx0J1xcJyc6ICcmI3gyNzsnLFxuXHRcdCc8JzogJyZsdDsnLFxuXHRcdC8vIFNlZSBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvYW1iaWd1b3VzLWFtcGVyc2FuZHM6IGluIEhUTUwsIHRoZVxuXHRcdC8vIGZvbGxvd2luZyBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHVubGVzcyBpdOKAmXMgcGFydCBvZiBhIHRhZyBvciBhblxuXHRcdC8vIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4gV2XigJlyZSBvbmx5IGVzY2FwaW5nIGl0IHRvIHN1cHBvcnQgdGhvc2Vcblx0XHQvLyBzaXR1YXRpb25zLCBhbmQgZm9yIFhNTCBzdXBwb3J0LlxuXHRcdCc+JzogJyZndDsnLFxuXHRcdC8vIEluIEludGVybmV0IEV4cGxvcmVyIOKJpCA4LCB0aGUgYmFja3RpY2sgY2hhcmFjdGVyIGNhbiBiZSB1c2VkXG5cdFx0Ly8gdG8gYnJlYWsgb3V0IG9mICh1bilxdW90ZWQgYXR0cmlidXRlIHZhbHVlcyBvciBIVE1MIGNvbW1lbnRzLlxuXHRcdC8vIFNlZSBodHRwOi8vaHRtbDVzZWMub3JnLyMxMDIsIGh0dHA6Ly9odG1sNXNlYy5vcmcvIzEwOCwgYW5kXG5cdFx0Ly8gaHR0cDovL2h0bWw1c2VjLm9yZy8jMTMzLlxuXHRcdCdgJzogJyYjeDYwOydcblx0fTtcblxuXHR2YXIgcmVnZXhJbnZhbGlkRW50aXR5ID0gLyYjKD86W3hYXVteYS1mQS1GMC05XXxbXjAtOXhYXSkvO1xuXHR2YXIgcmVnZXhJbnZhbGlkUmF3Q29kZVBvaW50ID0gL1tcXDAtXFx4MDhcXHgwQlxceDBFLVxceDFGXFx4N0YtXFx4OUZcXHVGREQwLVxcdUZERUZcXHVGRkZFXFx1RkZGRl18W1xcdUQ4M0ZcXHVEODdGXFx1RDhCRlxcdUQ4RkZcXHVEOTNGXFx1RDk3RlxcdUQ5QkZcXHVEOUZGXFx1REEzRlxcdURBN0ZcXHVEQUJGXFx1REFGRlxcdURCM0ZcXHVEQjdGXFx1REJCRlxcdURCRkZdW1xcdURGRkVcXHVERkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXS87XG5cdHZhciByZWdleERlY29kZSA9IC8mKENvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWx8RG91YmxlTG9uZ0xlZnRSaWdodEFycm93fENsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbHxOb3ROZXN0ZWRHcmVhdGVyR3JlYXRlcnxOb3RTcXVhcmVTdXBlcnNldEVxdWFsfERpYWNyaXRpY2FsRG91YmxlQWN1dGV8Tm90UmlnaHRUcmlhbmdsZUVxdWFsfE5vdFN1Y2NlZWRzU2xhbnRFcXVhbHxOb3RQcmVjZWRlc1NsYW50RXF1YWx8Q2xvc2VDdXJseURvdWJsZVF1b3RlfE5lZ2F0aXZlVmVyeVRoaW5TcGFjZXxEb3VibGVDb250b3VySW50ZWdyYWx8RmlsbGVkVmVyeVNtYWxsU3F1YXJlfENhcGl0YWxEaWZmZXJlbnRpYWxEfE9wZW5DdXJseURvdWJsZVF1b3RlfEVtcHR5VmVyeVNtYWxsU3F1YXJlfE5lc3RlZEdyZWF0ZXJHcmVhdGVyfERvdWJsZUxvbmdSaWdodEFycm93fE5vdExlZnRUcmlhbmdsZUVxdWFsfE5vdEdyZWF0ZXJTbGFudEVxdWFsfFJldmVyc2VVcEVxdWlsaWJyaXVtfERvdWJsZUxlZnRSaWdodEFycm93fE5vdFNxdWFyZVN1YnNldEVxdWFsfE5vdERvdWJsZVZlcnRpY2FsQmFyfFJpZ2h0QXJyb3dMZWZ0QXJyb3d8Tm90R3JlYXRlckZ1bGxFcXVhbHxOb3RSaWdodFRyaWFuZ2xlQmFyfFNxdWFyZVN1cGVyc2V0RXF1YWx8RG93bkxlZnRSaWdodFZlY3RvcnxEb3VibGVMb25nTGVmdEFycm93fGxlZnRyaWdodHNxdWlnYXJyb3d8TGVmdEFycm93UmlnaHRBcnJvd3xOZWdhdGl2ZU1lZGl1bVNwYWNlfGJsYWNrdHJpYW5nbGVyaWdodHxSaWdodERvd25WZWN0b3JCYXJ8UHJlY2VkZXNTbGFudEVxdWFsfFJpZ2h0RG91YmxlQnJhY2tldHxTdWNjZWVkc1NsYW50RXF1YWx8Tm90TGVmdFRyaWFuZ2xlQmFyfFJpZ2h0VHJpYW5nbGVFcXVhbHxTcXVhcmVJbnRlcnNlY3Rpb258UmlnaHREb3duVGVlVmVjdG9yfFJldmVyc2VFcXVpbGlicml1bXxOZWdhdGl2ZVRoaWNrU3BhY2V8bG9uZ2xlZnRyaWdodGFycm93fExvbmdsZWZ0cmlnaHRhcnJvd3xMb25nTGVmdFJpZ2h0QXJyb3d8RG93blJpZ2h0VGVlVmVjdG9yfERvd25SaWdodFZlY3RvckJhcnxHcmVhdGVyU2xhbnRFcXVhbHxTcXVhcmVTdWJzZXRFcXVhbHxMZWZ0RG93blZlY3RvckJhcnxMZWZ0RG91YmxlQnJhY2tldHxWZXJ0aWNhbFNlcGFyYXRvcnxyaWdodGxlZnRoYXJwb29uc3xOb3RHcmVhdGVyR3JlYXRlcnxOb3RTcXVhcmVTdXBlcnNldHxibGFja3RyaWFuZ2xlbGVmdHxibGFja3RyaWFuZ2xlZG93bnxOZWdhdGl2ZVRoaW5TcGFjZXxMZWZ0RG93blRlZVZlY3RvcnxOb3RMZXNzU2xhbnRFcXVhbHxsZWZ0cmlnaHRoYXJwb29uc3xEb3VibGVVcERvd25BcnJvd3xEb3VibGVWZXJ0aWNhbEJhcnxMZWZ0VHJpYW5nbGVFcXVhbHxGaWxsZWRTbWFsbFNxdWFyZXx0d29oZWFkcmlnaHRhcnJvd3xOb3ROZXN0ZWRMZXNzTGVzc3xEb3duTGVmdFRlZVZlY3RvcnxEb3duTGVmdFZlY3RvckJhcnxSaWdodEFuZ2xlQnJhY2tldHxOb3RUaWxkZUZ1bGxFcXVhbHxOb3RSZXZlcnNlRWxlbWVudHxSaWdodFVwRG93blZlY3RvcnxEaWFjcml0aWNhbFRpbGRlfE5vdFN1Y2NlZWRzVGlsZGV8Y2lyY2xlYXJyb3dyaWdodHxOb3RQcmVjZWRlc0VxdWFsfHJpZ2h0aGFycG9vbmRvd258RG91YmxlUmlnaHRBcnJvd3xOb3RTdWNjZWVkc0VxdWFsfE5vbkJyZWFraW5nU3BhY2V8Tm90UmlnaHRUcmlhbmdsZXxMZXNzRXF1YWxHcmVhdGVyfFJpZ2h0VXBUZWVWZWN0b3J8TGVmdEFuZ2xlQnJhY2tldHxHcmVhdGVyRnVsbEVxdWFsfERvd25BcnJvd1VwQXJyb3d8UmlnaHRVcFZlY3RvckJhcnx0d29oZWFkbGVmdGFycm93fEdyZWF0ZXJFcXVhbExlc3N8ZG93bmhhcnBvb25yaWdodHxSaWdodFRyaWFuZ2xlQmFyfG50cmlhbmdsZXJpZ2h0ZXF8Tm90U3VwZXJzZXRFcXVhbHxMZWZ0VXBEb3duVmVjdG9yfERpYWNyaXRpY2FsQWN1dGV8cmlnaHRyaWdodGFycm93c3x2YXJ0cmlhbmdsZXJpZ2h0fFVwQXJyb3dEb3duQXJyb3d8RGlhY3JpdGljYWxHcmF2ZXxVbmRlclBhcmVudGhlc2lzfEVtcHR5U21hbGxTcXVhcmV8TGVmdFVwVmVjdG9yQmFyfGxlZnRyaWdodGFycm93c3xEb3duUmlnaHRWZWN0b3J8ZG93bmhhcnBvb25sZWZ0fHRyaWFuZ2xlcmlnaHRlcXxTaG9ydFJpZ2h0QXJyb3d8T3ZlclBhcmVudGhlc2lzfERvdWJsZUxlZnRBcnJvd3xEb3VibGVEb3duQXJyb3d8Tm90U3F1YXJlU3Vic2V0fGJpZ3RyaWFuZ2xlZG93bnxudHJpYW5nbGVsZWZ0ZXF8VXBwZXJSaWdodEFycm93fGN1cnZlYXJyb3dyaWdodHx2YXJ0cmlhbmdsZWxlZnR8Tm90TGVmdFRyaWFuZ2xlfG5sZWZ0cmlnaHRhcnJvd3xMb3dlclJpZ2h0QXJyb3d8Tm90SHVtcERvd25IdW1wfE5vdEdyZWF0ZXJUaWxkZXxyaWdodHRocmVldGltZXN8TGVmdFVwVGVlVmVjdG9yfE5vdEdyZWF0ZXJFcXVhbHxzdHJhaWdodGVwc2lsb258TGVmdFRyaWFuZ2xlQmFyfHJpZ2h0c3F1aWdhcnJvd3xDb250b3VySW50ZWdyYWx8cmlnaHRsZWZ0YXJyb3dzfENsb3NlQ3VybHlRdW90ZXxSaWdodERvd25WZWN0b3J8TGVmdFJpZ2h0VmVjdG9yfG5MZWZ0cmlnaHRhcnJvd3xsZWZ0aGFycG9vbmRvd258Y2lyY2xlYXJyb3dsZWZ0fFNxdWFyZVN1cGVyc2V0fE9wZW5DdXJseVF1b3RlfGhvb2tyaWdodGFycm93fEhvcml6b250YWxMaW5lfERpYWNyaXRpY2FsRG90fE5vdExlc3NHcmVhdGVyfG50cmlhbmdsZXJpZ2h0fERvdWJsZVJpZ2h0VGVlfEludmlzaWJsZUNvbW1hfEludmlzaWJsZVRpbWVzfExvd2VyTGVmdEFycm93fERvd25MZWZ0VmVjdG9yfE5vdFN1YnNldEVxdWFsfGN1cnZlYXJyb3dsZWZ0fHRyaWFuZ2xlbGVmdGVxfE5vdFZlcnRpY2FsQmFyfFRpbGRlRnVsbEVxdWFsfGRvd25kb3duYXJyb3dzfE5vdEdyZWF0ZXJMZXNzfFJpZ2h0VGVlVmVjdG9yfFplcm9XaWR0aFNwYWNlfGxvb3BhcnJvd3JpZ2h0fExvbmdSaWdodEFycm93fGRvdWJsZWJhcndlZGdlfFNob3J0TGVmdEFycm93fFNob3J0RG93bkFycm93fFJpZ2h0VmVjdG9yQmFyfEdyZWF0ZXJHcmVhdGVyfFJldmVyc2VFbGVtZW50fHJpZ2h0aGFycG9vbnVwfExlc3NTbGFudEVxdWFsfGxlZnR0aHJlZXRpbWVzfHVwaGFycG9vbnJpZ2h0fHJpZ2h0YXJyb3d0YWlsfExlZnREb3duVmVjdG9yfExvbmdyaWdodGFycm93fE5lc3RlZExlc3NMZXNzfFVwcGVyTGVmdEFycm93fG5zaG9ydHBhcmFsbGVsfGxlZnRsZWZ0YXJyb3dzfGxlZnRyaWdodGFycm93fExlZnRyaWdodGFycm93fExlZnRSaWdodEFycm93fGxvbmdyaWdodGFycm93fHVwaGFycG9vbmxlZnR8UmlnaHRBcnJvd0JhcnxBcHBseUZ1bmN0aW9ufExlZnRUZWVWZWN0b3J8bGVmdGFycm93dGFpbHxOb3RFcXVhbFRpbGRlfHZhcnN1YnNldG5lcXF8dmFyc3Vwc2V0bmVxcXxSaWdodFRlZUFycm93fFN1Y2NlZWRzRXF1YWx8U3VjY2VlZHNUaWxkZXxMZWZ0VmVjdG9yQmFyfFN1cGVyc2V0RXF1YWx8aG9va2xlZnRhcnJvd3xEaWZmZXJlbnRpYWxEfFZlcnRpY2FsVGlsZGV8VmVyeVRoaW5TcGFjZXxibGFja3RyaWFuZ2xlfGJpZ3RyaWFuZ2xldXB8TGVzc0Z1bGxFcXVhbHxkaXZpZGVvbnRpbWVzfGxlZnRoYXJwb29udXB8VXBFcXVpbGlicml1bXxudHJpYW5nbGVsZWZ0fFJpZ2h0VHJpYW5nbGV8bWVhc3VyZWRhbmdsZXxzaG9ydHBhcmFsbGVsfGxvbmdsZWZ0YXJyb3d8TG9uZ2xlZnRhcnJvd3xMb25nTGVmdEFycm93fERvdWJsZUxlZnRUZWV8UG9pbmNhcmVwbGFuZXxQcmVjZWRlc0VxdWFsfHRyaWFuZ2xlcmlnaHR8RG91YmxlVXBBcnJvd3xSaWdodFVwVmVjdG9yfGZhbGxpbmdkb3RzZXF8bG9vcGFycm93bGVmdHxQcmVjZWRlc1RpbGRlfE5vdFRpbGRlRXF1YWx8Tm90VGlsZGVUaWxkZXxzbWFsbHNldG1pbnVzfFByb3BvcnRpb25hbHx0cmlhbmdsZWxlZnR8dHJpYW5nbGVkb3dufFVuZGVyQnJhY2tldHxOb3RIdW1wRXF1YWx8ZXhwb25lbnRpYWxlfEV4cG9uZW50aWFsRXxOb3RMZXNzVGlsZGV8SGlsYmVydFNwYWNlfFJpZ2h0Q2VpbGluZ3xibGFja2xvemVuZ2V8dmFyc3Vwc2V0bmVxfEh1bXBEb3duSHVtcHxHcmVhdGVyRXF1YWx8VmVydGljYWxMaW5lfExlZnRUZWVBcnJvd3xOb3RMZXNzRXF1YWx8RG93blRlZUFycm93fExlZnRUcmlhbmdsZXx2YXJzdWJzZXRuZXF8SW50ZXJzZWN0aW9ufE5vdENvbmdydWVudHxEb3duQXJyb3dCYXJ8TGVmdFVwVmVjdG9yfExlZnRBcnJvd0JhcnxyaXNpbmdkb3RzZXF8R3JlYXRlclRpbGRlfFJvdW5kSW1wbGllc3xTcXVhcmVTdWJzZXR8U2hvcnRVcEFycm93fE5vdFN1cGVyc2V0fHF1YXRlcm5pb25zfHByZWNuYXBwcm94fGJhY2tlcHNpbG9ufHByZWNjdXJseWVxfE92ZXJCcmFja2V0fGJsYWNrc3F1YXJlfE1lZGl1bVNwYWNlfFZlcnRpY2FsQmFyfGNpcmNsZWRjaXJjfGNpcmNsZWRkYXNofENpcmNsZU1pbnVzfENpcmNsZVRpbWVzfExlc3NHcmVhdGVyfGN1cmx5ZXFwcmVjfGN1cmx5ZXFzdWNjfGRpYW1vbmRzdWl0fFVwRG93bkFycm93fFVwZG93bmFycm93fFJ1bGVEZWxheWVkfFJyaWdodGFycm93fHVwZG93bmFycm93fFJpZ2h0VmVjdG9yfG5SaWdodGFycm93fG5yaWdodGFycm93fGVxc2xhbnRsZXNzfExlZnRDZWlsaW5nfEVxdWlsaWJyaXVtfFNtYWxsQ2lyY2xlfGV4cGVjdGF0aW9ufE5vdFN1Y2NlZWRzfHRoaWNrYXBwcm94fEdyZWF0ZXJMZXNzfFNxdWFyZVVuaW9ufE5vdFByZWNlZGVzfE5vdExlc3NMZXNzfHN0cmFpZ2h0cGhpfHN1Y2NuYXBwcm94fHN1Y2NjdXJseWVxfFN1YnNldEVxdWFsfHNxc3Vwc2V0ZXF8UHJvcG9ydGlvbnxMYXBsYWNldHJmfEltYWdpbmFyeUl8c3Vwc2V0bmVxcXxOb3RHcmVhdGVyfGd0cmVxcWxlc3N8Tm90RWxlbWVudHxUaGlja1NwYWNlfFRpbGRlRXF1YWx8VGlsZGVUaWxkZXxGb3VyaWVydHJmfHJtb3VzdGFjaGV8RXF1YWxUaWxkZXxlcXNsYW50Z3RyfFVuZGVyQnJhY2V8TGVmdFZlY3RvcnxVcEFycm93QmFyfG5MZWZ0YXJyb3d8bnN1YnNldGVxcXxzdWJzZXRuZXFxfG5zdXBzZXRlcXF8bmxlZnRhcnJvd3xzdWNjYXBwcm94fGxlc3NhcHByb3h8VXBUZWVBcnJvd3x1cHVwYXJyb3dzfGN1cmx5d2VkZ2V8bGVzc2VxcWd0cnx2YXJlcHNpbG9ufHZhcm5vdGhpbmd8UmlnaHRGbG9vcnxjb21wbGVtZW50fENpcmNsZVBsdXN8c3FzdWJzZXRlcXxMbGVmdGFycm93fGNpcmNsZWRhc3R8UmlnaHRBcnJvd3xSaWdodGFycm93fHJpZ2h0YXJyb3d8bG1vdXN0YWNoZXxCZXJub3VsbGlzfHByZWNhcHByb3h8bWFwc3RvbGVmdHxtYXBzdG9kb3dufGxvbmdtYXBzdG98ZG90c3F1YXJlfGRvd25hcnJvd3xEb3VibGVEb3R8bnN1YnNldGVxfHN1cHNldG5lcXxsZWZ0YXJyb3d8bnN1cHNldGVxfHN1YnNldG5lcXxUaGluU3BhY2V8bmdlcXNsYW50fHN1YnNldGVxcXxIdW1wRXF1YWx8Tm90U3Vic2V0fHRyaWFuZ2xlcXxOb3RDdXBDYXB8bGVzc2VxZ3RyfGhlYXJ0c3VpdHxUcmlwbGVEb3R8TGVmdGFycm93fENvcHJvZHVjdHxDb25ncnVlbnR8dmFycHJvcHRvfGNvbXBsZXhlc3xndmVydG5lcXF8TGVmdEFycm93fExlc3NUaWxkZXxzdXBzZXRlcXF8TWludXNQbHVzfENpcmNsZURvdHxubGVxc2xhbnR8Tm90RXhpc3RzfGd0cmVxbGVzc3xucGFyYWxsZWx8VW5pb25QbHVzfExlZnRGbG9vcnxjaGVja21hcmt8Q2VudGVyRG90fGNlbnRlcmRvdHxNZWxsaW50cmZ8Z3RyYXBwcm94fGJpZ290aW1lc3xPdmVyQnJhY2V8c3BhZGVzdWl0fHRoZXJlZm9yZXxwaXRjaGZvcmt8cmF0aW9uYWxzfFBsdXNNaW51c3xCYWNrc2xhc2h8VGhlcmVmb3JlfERvd25CcmV2ZXxiYWNrc2ltZXF8YmFja3ByaW1lfERvd25BcnJvd3xuc2hvcnRtaWR8RG93bmFycm93fGx2ZXJ0bmVxcXxlcXZwYXJzbHxpbWFnbGluZXxpbWFncGFydHxpbmZpbnRpZXxpbnRlZ2Vyc3xJbnRlZ3JhbHxpbnRlcmNhbHxMZXNzTGVzc3xVYXJyb2NpcnxpbnRsYXJoa3xzcXN1cHNldHxhbmdtc2RhZnxzcXN1YnNldHxsbGNvcm5lcnx2YXJ0aGV0YXxjdXBicmNhcHxsbmFwcHJveHxTdXBlcnNldHxTdWNoVGhhdHxzdWNjbnNpbXxzdWNjbmVxcXxhbmdtc2RhZ3xiaWd1cGx1c3xjdXJseXZlZXx0cnBleml1bXxTdWNjZWVkc3xOb3RUaWxkZXxiaWd3ZWRnZXxhbmdtc2RhaHxhbmdydHZiZHx0cmltaW51c3xjd2NvbmludHxmcGFydGludHxscmNvcm5lcnxzbWVwYXJzbHxzdWJzZXRlcXx1cmNvcm5lcnxsdXJkc2hhcnxsYWVtcHR5dnxERG90cmFoZHxhcHByb3hlcXxsZHJ1c2hhcnxhd2NvbmludHxtYXBzdG91cHxiYWNrY29uZ3xzaG9ydG1pZHx0cmlhbmdsZXxnZXFzbGFudHxnZXNkb3RvbHx0aW1lc2JhcnxjaXJjbGVkUnxjaXJjbGVkU3xzZXRtaW51c3xtdWx0aW1hcHxuYXR1cmFsc3xzY3BvbGludHxuY29uZ2RvdHxSaWdodFRlZXxib3htaW51c3xnbmFwcHJveHxib3h0aW1lc3xhbmRzbG9wZXx0aGlja3NpbXxhbmdtc2RhYXx2YXJzaWdtYXxjaXJmbmludHxydHJpbHRyaXxhbmdtc2RhYnxycHBvbGludHxhbmdtc2RhY3xiYXJ3ZWRnZXxkcmJrYXJvd3xjbHVic3VpdHx0aGV0YXN5bXxic29saHN1YnxjYXBicmN1cHxkemlncmFycnxkb3RlcWRvdHxEb3RFcXVhbHxkb3RtaW51c3xVbmRlckJhcnxOb3RFcXVhbHxyZWFscGFydHxvdGltZXNhc3x1bGNvcm5lcnxoa3NlYXJvd3xoa3N3YXJvd3xwYXJhbGxlbHxQYXJ0aWFsRHxlbGludGVyc3xlbXB0eXNldHxwbHVzYWNpcnxiYnJrdGJya3xhbmdtc2RhZHxwb2ludGludHxiaWdvcGx1c3xhbmdtc2RhZXxQcmVjZWRlc3xiaWdzcWN1cHx2YXJrYXBwYXxub3RpbmRvdHxzdXBzZXRlcXxwcmVjbmVxcXxwcmVjbnNpbXxwcm9mYWxhcnxwcm9mbGluZXxwcm9mc3VyZnxsZXFzbGFudHxsZXNkb3RvcnxyYWVtcHR5dnxzdWJwbHVzfG5vdG5pdmJ8bm90bml2Y3xzdWJyYXJyfHppZ3JhcnJ8dnppZ3phZ3xzdWJtdWx0fHN1YmVkb3R8RWxlbWVudHxiZXR3ZWVufGNpcnNjaXJ8bGFycmJmc3xsYXJyc2ltfGxvdGltZXN8bGJya3NsZHxsYnJrc2x1fGxvemVuZ2V8bGRyZGhhcnxkYmthcm93fGJpZ2NpcmN8ZXBzaWxvbnxzaW1yYXJyfHNpbXBsdXN8bHRxdWVzdHxFcHNpbG9ufGx1cnVoYXJ8Z3RxdWVzdHxtYWx0ZXNlfG5wb2xpbnR8ZXFjb2xvbnxucHJlY2VxfGJpZ29kb3R8ZGRhZ2dlcnxndHJsZXNzfGJuZXF1aXZ8aGFycmNpcnxkZG90c2VxfGVxdWl2RER8YmFja3NpbXxkZW1wdHl2fG5zcXN1YmV8bnNxc3VwZXxVcHNpbG9ufG5zdWJzZXR8dXBzaWxvbnxtaW51c2R1fG5zdWNjZXF8c3dhcnJvd3xuc3Vwc2V0fGNvbG9uZXF8c2VhcnJvd3xib3hwbHVzfG5hcHByb3h8bmF0dXJhbHxhc3ltcGVxfGFsZWZzeW18Y29uZ2RvdHxuZWFycm93fGJpZ3N0YXJ8ZGlhbW9uZHxzdXBwbHVzfHRyaXRpbWV8TGVmdFRlZXxudmluZmlufHRyaXBsdXN8TmV3TGluZXxudmx0cmllfG52cnRyaWV8bndhcnJvd3xuZXhpc3RzfERpYW1vbmR8cnVsdWhhcnxJbXBsaWVzfHN1cG11bHR8YW5nemFycnxzdXBsYXJyfHN1cGhzdWJ8cXVlc3RlcXxiZWNhdXNlfGRpZ2FtbWF8QmVjYXVzZXxvbGNyb3NzfGJlbXB0eXZ8b21pY3JvbnxPbWljcm9ufHJvdGltZXN8Tm9CcmVha3xpbnRwcm9kfGFuZ3J0dmJ8b3JkZXJvZnx1d2FuZ2xlfHN1cGhzb2x8bGVzZG90b3xvcnNsb3BlfERvd25UZWV8cmVhbGluZXxjdWRhcnJsfHJkbGRoYXJ8T3ZlckJhcnxzdXBlZG90fGxlc3Nkb3R8c3VwZHN1Ynx0b3Bmb3JrfHN1Y2NzaW18cmJya3NsdXxyYnJrc2xkfHBlcnRlbmt8Y3VkYXJycnxpc2luZG90fHBsYW5ja2h8bGVzc2d0cnxwbHVzY2lyfGdlc2RvdG98cGx1c3NpbXxwbHVzdHdvfGxlc3NzaW18Y3VsYXJycHxyYXJyc2ltfENheWxleXN8bm90aW52YXxub3RpbnZifG5vdGludmN8VXBBcnJvd3xVcGFycm93fHVwYXJyb3d8Tm90TGVzc3xkd2FuZ2xlfHByZWNzaW18UHJvZHVjdHxjdXJhcnJtfENjb25pbnR8ZG90cGx1c3xyYXJyYmZzfGNjdXBzc218Q2VkaWxsYXxjZW1wdHl2fG5vdG5pdmF8cXVhdGludHxmcmFjMzV8ZnJhYzM4fGZyYWM0NXxmcmFjNTZ8ZnJhYzU4fGZyYWM3OHx0cmlkb3R8eG9wbHVzfGdhY3V0ZXxnYW1tYWR8R2FtbWFkfGxmaXNodHxsZmxvb3J8YmlnY3VwfHNxc3VwZXxnYnJldmV8R2JyZXZlfGxoYXJ1bHxzcXN1YmV8c3FjdXBzfEdjZWRpbHxhcGFjaXJ8bGxoYXJkfGxtaWRvdHxMbWlkb3R8bG1vdXN0fGFuZGFuZHxzcWNhcHN8YXBwcm94fEFicmV2ZXxzcGFkZXN8Y2lyY2VxfHRwcmltZXxkaXZpZGV8dG9wY2lyfEFzc2lnbnx0b3Bib3R8Z2VzZG90fGRpdm9ueHx4dXBsdXN8dGltZXNkfGdlc2xlc3xhdGlsZGV8c29sYmFyfFNPRlRjeXxsb3BsdXN8dGltZXNifGxvd2FzdHxsb3diYXJ8ZGxjb3JufGRsY3JvcHxzb2Z0Y3l8ZG9sbGFyfGxwYXJsdHx0aGtzaW18bHJoYXJkfEF0aWxkZXxsc2FxdW98c21hc2hwfGJpZ3ZlZXx0aGluc3B8d3JlYXRofGJrYXJvd3xsc3F1b3J8bHN0cm9rfExzdHJva3xsdGhyZWV8bHRpbWVzfGx0bGFycnxEb3REb3R8c2ltZG90fGx0clBhcnx3ZWllcnB8eHNxY3VwfGFuZ21zZHxzaWdtYXZ8c2lnbWFmfHplZXRyZnxaY2Fyb258emNhcm9ufG1hcHN0b3x2c3VwbmV8dGhldGF2fGNpcm1pZHxtYXJrZXJ8bWNvbW1hfFphY3V0ZXx2c3VibkV8dGhlcmU0fGd0bFBhcnx2c3VibmV8Ym90dG9tfGd0cmFycnxTSENIY3l8c2hjaGN5fG1pZGFzdHxtaWRjaXJ8bWlkZG90fG1pbnVzYnxtaW51c2R8Z3RyZG90fGJvd3RpZXxzZnJvd258bW5wbHVzfG1vZGVsc3xjb2xvbmV8c2Vzd2FyfENvbG9uZXxtc3Rwb3N8c2VhcmhrfGd0cnNpbXxuYWN1dGV8TmFjdXRlfGJveGJveHx0ZWxyZWN8aGFpcnNwfFRjZWRpbHxuYnVtcGV8c2Nuc2ltfG5jYXJvbnxOY2Fyb258bmNlZGlsfE5jZWRpbHxoYW1pbHR8U2NlZGlsfG5lYXJoa3xoYXJkY3l8SEFSRGN5fHRjZWRpbHxUY2Fyb258Y29tbWF0fG5lcXVpdnxuZXNlYXJ8dGNhcm9ufHRhcmdldHxoZWFydHN8bmV4aXN0fHZhcnJob3xzY2VkaWx8U2Nhcm9ufHNjYXJvbnxoZWxsaXB8U2FjdXRlfHNhY3V0ZXxoZXJjb258c3dud2FyfGNvbXBmbnxydGltZXN8cnRocmVlfHJzcXVvcnxyc2FxdW98emFjdXRlfHdlZGdlcXxob210aHR8YmFydmVlfGJhcndlZHxCYXJ3ZWR8cnBhcmd0fGhvcmJhcnxjb25pbnR8c3dhcmhrfHJvcGx1c3xubHRyaWV8aHNsYXNofGhzdHJva3xIc3Ryb2t8cm1vdXN0fENvbmludHxicHJpbWV8aHlidWxsfGh5cGhlbnxpYWN1dGV8SWFjdXRlfHN1cHN1cHxzdXBzdWJ8c3Vwc2ltfHZhcnBoaXxjb3Byb2R8YnJ2YmFyfGFncmF2ZXxTdXBzZXR8c3Vwc2V0fGlncmF2ZXxJZ3JhdmV8bm90aW5FfEFncmF2ZXxpaWlpbnR8aWluZmlufGNvcHlzcnx3ZWRiYXJ8VmVyYmFyfHZhbmdydHxiZWNhdXN8aW5jYXJlfHZlcmJhcnxpbm9kb3R8YnVsbGV0fGRyY29ybnxpbnRjYWx8ZHJjcm9wfGN1bGFycnx2ZWxsaXB8VXRpbGRlfGJ1bXBlcXxjdXBjYXB8ZHN0cm9rfERzdHJva3xDdXBDYXB8Y3VwY3VwfGN1cGRvdHxlYWN1dGV8RWFjdXRlfHN1cGRvdHxpcXVlc3R8ZWFzdGVyfGVjYXJvbnxFY2Fyb258ZWNvbG9ufGlzaW5zdnx1dGlsZGV8aXRpbGRlfEl0aWxkZXxjdXJhcnJ8c3VjY2VxfEJ1bXBlcXxjYWN1dGV8dWxjcm9wfG5wYXJzbHxDYWN1dGV8bnByY3VlfGVncmF2ZXxFZ3JhdmV8bnJhcnJjfG5yYXJyd3xzdWJzdXB8c3Vic3VifG5ydHJpZXxqc2VyY3l8bnNjY3VlfEpzZXJjeXxrYXBwYXZ8a2NlZGlsfEtjZWRpbHxzdWJzaW18dWxjb3JufG5zaW1lcXxlZ3Nkb3R8dmVlYmFyfGtncmVlbnxjYXBhbmR8ZWxzZG90fFN1YnNldHxzdWJzZXR8Y3VycmVufGFhY3V0ZXxsYWN1dGV8TGFjdXRlfGVtcHR5dnxudGlsZGV8TnRpbGRlfGxhZ3JhbnxsYW1iZGF8TGFtYmRhfGNhcGNhcHxVZ3JhdmV8bGFuZ2xlfHN1YmRvdHxlbXNwMTN8bnVtZXJvfGVtc3AxNHxudmRhc2h8bnZEYXNofG5WZGFzaHxuVkRhc2h8dWdyYXZlfHVmaXNodHxudkhhcnJ8bGFycmZzfG52bEFycnxsYXJyaGt8bGFycmxwfGxhcnJwbHxudnJBcnJ8VWRibGFjfG53YXJoa3xsYXJydGx8bnduZWFyfG9hY3V0ZXxPYWN1dGV8bGF0YWlsfGxBdGFpbHxzc3RhcmZ8bGJyYWNlfG9kYmxhY3xPZGJsYWN8bGJyYWNrfHVkYmxhY3xvZHNvbGR8ZXBhcnNsfGxjYXJvbnxMY2Fyb258b2dyYXZlfE9ncmF2ZXxsY2VkaWx8TGNlZGlsfEFhY3V0ZXxzc21pbGV8c3NldG1ufHNxdWFyZnxsZHF1b3J8Y2FwY3VwfG9taW51c3xjeWxjdHl8cmhhcnVsfGVxY2lyY3xkYWdnZXJ8cmZsb29yfHJmaXNodHxEYWdnZXJ8ZGFsZXRofGVxdWFsc3xvcmlnb2Z8Y2FwZG90fGVxdWVzdHxkY2Fyb258RGNhcm9ufHJkcXVvcnxvc2xhc2h8T3NsYXNofG90aWxkZXxPdGlsZGV8b3RpbWVzfE90aW1lc3x1cmNyb3B8VWJyZXZlfHVicmV2ZXxZYWN1dGV8VWFjdXRlfHVhY3V0ZXxSY2VkaWx8cmNlZGlsfHVyY29ybnxwYXJzaW18UmNhcm9ufFZkYXNobHxyY2Fyb258VHN0cm9rfHBlcmNudHxwZXJpb2R8cGVybWlsfEV4aXN0c3x5YWN1dGV8cmJyYWNrfHJicmFjZXxwaG1tYXR8Y2Nhcm9ufENjYXJvbnxwbGFuY2t8Y2NlZGlsfHBsYW5rdnx0c3Ryb2t8ZmVtYWxlfHBsdXNkb3xwbHVzZHV8ZmZpbGlnfHBsdXNtbnxmZmxsaWd8Q2NlZGlsfHJBdGFpbHxkZmlzaHR8YmVybm91fHJhdGFpbHxSYXJydGx8cmFycnRsfGFuZ3NwaHxyYXJycGx8cmFycmxwfHJhcnJoa3x4d2VkZ2V8eG90aW1lfGZvcmFsbHxGb3JBbGx8VnZkYXNofHZzdXBuRXxwcmVjZXF8YmlnY2FwfGZyYWMxMnxmcmFjMTN8ZnJhYzE0fHByaW1lc3xyYXJyZnN8cHJuc2ltfGZyYWMxNXxTcXVhcmV8ZnJhYzE2fHNxdWFyZXxsZXNkb3R8ZnJhYzE4fGZyYWMyM3xwcm9wdG98cHJ1cmVsfHJhcnJhcHxyYW5nbGV8cHVuY3NwfGZyYWMyNXxSYWN1dGV8cXByaW1lfHJhY3V0ZXxsZXNnZXN8ZnJhYzM0fGFicmV2ZXxBRWxpZ3xlcXNpbXx1dGRvdHxzZXRtbnx1cnRyaXxFcXVhbHxVcmluZ3xzZUFycnx1cmluZ3xzZWFycnxkYXNodnxEYXNodnxtdW1hcHxuYWJsYXxpb2dvbnxJb2dvbnxzZG90ZXxzZG90YnxzY3NpbXxuYXBpZHxuYXBvc3xlcXVpdnxuYXR1cnxBY2lyY3xkYmxhY3xlcmFycnxuYnVtcHxpcHJvZHxlckRvdHx1Y2lyY3xhd2ludHxlc2RvdHxhbmdydHxuY29uZ3xpc2luRXxzY25hcHxTY2lyY3xzY2lyY3xuZGFzaHxpc2luc3xVYnJjeXxuZWFycnxuZUFycnxpc2ludnxuZWRvdHx1YnJjeXxhY3V0ZXxZY2lyY3xpdWtjeXxJdWtjeXx4dXRyaXxuZXNpbXxjYXJldHxqY2lyY3xKY2lyY3xjYXJvbnx0d2l4dHxkZGFycnxzY2N1ZXxleGlzdHxqbWF0aHxzYnF1b3xuZ2VxcXxhbmdzdHxjY2Fwc3xsY2VpbHxuZ3NpbXxVcFRlZXxkZWx0YXxEZWx0YXxydHJpZnxuaGFycnxuaEFycnxuaHBhcnxydHJpZXxqdWtjeXxKdWtjeXxrYXBwYXxyc3F1b3xLYXBwYXxubGFycnxubEFycnxUU0hjeXxycmFycnxhb2dvbnxBb2dvbnxmZmxpZ3x4cmFycnx0c2hjeXxjY2lyY3xubGVxcXxmaWxpZ3x1cHNpaHxubGVzc3xkaGFybHxubHNpbXxmamxpZ3xyb3BhcnxubHRyaXxkaGFycnxyb2Jya3xyb2FycnxmbGxpZ3xmbHRuc3xyb2FuZ3xybm1pZHxzdWJuRXxzdWJuZXxsQWFycnx0cmlzYnxDY2lyY3xhY2lyY3xjY3Vwc3xibGFua3xWRGFzaHxmb3JrdnxWZGFzaHxsYW5nZHxjZWRpbHxibGsxMnxibGsxNHxsYXF1b3xzdHJuc3xkaWFtc3xub3Rpbnx2RGFzaHxsYXJyYnxibGszNHxibG9ja3xkaXNpbnx1cGx1c3x2ZGFzaHx2QmFydnxhZWxpZ3xzdGFyZnxXZWRnZXxjaGVja3x4ckFycnxsYXRlc3xsYmFycnxsQmFycnxub3RuaXxsYmJya3xiY29uZ3xmcmFzbHxsYnJrZXxmcm93bnx2cnRyaXx2cHJvcHx2bnN1cHxnYW1tYXxHYW1tYXx3ZWRnZXx4b2RvdHxiZHF1b3xzcmFycnxkb3RlcXxsZHF1b3xib3hkbHxib3hkTHxnY2lyY3xHY2lyY3xib3hEbHxib3hETHxib3hkcnxib3hkUnxib3hEcnxUUkFERXx0cmFkZXxybGhhcnxib3hEUnx2bnN1YnxucGFydHx2bHRyaXxybGFycnxib3hoZHxib3hoRHxucHJlY3xnZXNjY3xucmFycnxuckFycnxib3hIZHxib3hIRHxib3hodXxib3hoVXxucnRyaXxib3hIdXxjbHVic3xib3hIVXx0aW1lc3xjb2xvbnxDb2xvbnxnaW1lbHx4bEFycnxUaWxkZXxuc2ltZXx0aWxkZXxuc21pZHxuc3BhcnxUSE9STnx0aG9ybnx4bGFycnxuc3ViZXxuc3ViRXx0aGthcHx4aEFycnxjb21tYXxuc3VjY3xib3h1bHxib3h1THxuc3VwZXxuc3VwRXxnbmVxcXxnbnNpbXxib3hVbHxib3hVTHxncmF2ZXxib3h1cnxib3h1Unxib3hVcnxib3hVUnxsZXNjY3xhbmdsZXxiZXBzaXxib3h2aHx2YXJwaXxib3h2SHxudW1zcHxUaGV0YXxnc2ltZXxnc2ltbHx0aGV0YXxib3hWaHxib3hWSHxib3h2bHxndGNpcnxndGRvdHxib3h2THxib3hWbHxib3hWTHxjcmFycnxjcm9zc3xDcm9zc3xudnNpbXxib3h2cnxud2Fycnxud0FycnxzcXN1cHxkdGRvdHxVb2dvbnxsaGFyZHxsaGFydXxkdHJpZnxvY2lyY3xPY2lyY3xsaGJsa3xkdWFycnxvZGFzaHxzcXN1YnxIYWNla3xzcWN1cHxsbGFycnxkdWhhcnxvZWxpZ3xPRWxpZ3xvZmNpcnxib3h2Unx1b2dvbnxsbHRyaXxib3hWcnxjc3ViZXx1dWFycnxvaGJhcnxjc3VwZXxjdGRvdHxvbGFycnxvbGNpcnxoYXJyd3xvbGluZXxzcWNhcHxvbWFjcnxPbWFjcnxvbWVnYXxPbWVnYXxib3hWUnxhbGVwaHxsbmVxcXxsbnNpbXxsb2FuZ3xsb2FycnxyaGFydXxsb2Jya3xoY2lyY3xvcGVycHxvcGx1c3xyaGFyZHxIY2lyY3xvcmFycnxVbmlvbnxvcmRlcnxlY2lyY3xFY2lyY3xjdWVwcnxzemxpZ3xjdWVzY3xicmV2ZXxyZWFsc3xlRERvdHxCcmV2ZXxob2Fycnxsb3Bhcnx1dHJpZnxyZHF1b3xVbWFjcnx1bWFjcnxlZkRvdHxzd0Fycnx1bHRyaXxhbHBoYXxyY2VpbHxvdmJhcnxzd2FycnxXY2lyY3x3Y2lyY3xzbXRlc3xzbWlsZXxic2VtaXxscmFycnxhcmluZ3xwYXJzbHxscmhhcnxic2ltZXx1aGJsa3xscnRyaXxjdXBvcnxBcmluZ3x1aGFycnx1aGFybHxzbGFycnxyYnJrZXxic29sYnxsc2ltZXxyYmJya3xSQmFycnxsc2ltZ3xwaG9uZXxyQmFycnxyYmFycnxpY2lyY3xsc3F1b3xJY2lyY3xlbWFjcnxFbWFjcnxyYXRpb3xzaW1uZXxwbHVzYnxzaW1sRXxzaW1nRXxzaW1lcXxwbHVzZXxsdGNpcnxsdGRvdHxlbXB0eXx4aGFycnx4ZHRyaXxpZXhjbHxBbHBoYXxsdHJpZXxyYXJyd3xwb3VuZHxsdHJpZnx4Y2lyY3xidW1wZXxwcmN1ZXxidW1wRXxhc3ltcHxhbWFjcnxjdXZlZXxTaWdtYXxzaWdtYXxpaWludHx1ZGhhcnxpaW90YXxpamxpZ3xJSmxpZ3xzdXBuRXxpbWFjcnxJbWFjcnxwcmltZXxQcmltZXxpbWFnZXxwcm5hcHxlb2dvbnxFb2dvbnxyYXJyY3xtZGFzaHxtRERvdHxjdXdlZHxpbWF0aHxzdXBuZXxpbXBlZHxBbWFjcnx1ZGFycnxwcnNpbXxtaWNyb3xyYXJyYnxjd2ludHxyYXF1b3xpbmZpbnxlcGx1c3xyYW5nZXxyYW5nZHxVY2lyY3xyYWRpY3xtaW51c3xhbWFsZ3x2ZWVlcXxyQWFycnxlcHNpdnx5Y2lyY3xxdWVzdHxzaGFycHxxdW90fHp3bmp8UXNjcnxyYWNlfHFzY3J8UW9wZnxxb3BmfHFpbnR8cmFuZ3xSYW5nfFpzY3J8enNjcnxab3BmfHpvcGZ8cmFycnxyQXJyfFJhcnJ8UHNjcnxwc2NyfHByb3B8cHJvZHxwcm5FfHByZWN8WkhjeXx6aGN5fHByYXB8WmV0YXx6ZXRhfFBvcGZ8cG9wZnxaZG90fHBsdXN8emRvdHxZdW1sfHl1bWx8cGhpdnxZVWN5fHl1Y3l8WXNjcnx5c2NyfHBlcnB8WW9wZnx5b3BmfHBhcnR8cGFyYXxZSWN5fE91bWx8cmN1Ynx5aWN5fFlBY3l8cmRjYXxvdW1sfG9zb2x8T3NjcnxyZHNofHlhY3l8cmVhbHxvc2NyfHh2ZWV8YW5kZHxyZWN0fGFuZHZ8WHNjcnxvcm9yfG9yZG18b3JkZnx4c2NyfGFuZ2V8YW9wZnxBb3BmfHJIYXJ8WG9wZnxvcGFyfE9vcGZ8eG9wZnx4bmlzfHJob3Z8b29wZnxvbWlkfHhtYXB8b2ludHxhcGlkfGFwb3N8b2dvbnxhc2NyfEFzY3J8b2RvdHxvZGl2fHhjdXB8eGNhcHxvY2lyfG9hc3R8bnZsdHxudmxlfG52Z3R8bnZnZXxudmFwfFdzY3J8d3NjcnxhdW1sfG50bGd8bnRnbHxuc3VwfG5zdWJ8bnNpbXxOc2NyfG5zY3J8bnNjZXxXb3BmfHJpbmd8bnByZXx3b3BmfG5wYXJ8QXVtbHxCYXJ2fGJicmt8Tm9wZnxub3BmfG5taWR8bkx0dnxiZXRhfHJvcGZ8Um9wZnxCZXRhfGJldGh8bmxlc3xycGFyfG5sZXF8Ym5vdHxiTm90fG5sZHJ8TkpjeXxyc2NyfFJzY3J8VnNjcnx2c2NyfHJzcWJ8bmpjeXxib3BmfG5pc2R8Qm9wZnxydHJpfFZvcGZ8bkd0dnxuZ3RyfHZvcGZ8Ym94aHxib3hIfGJveHZ8bmdlc3xuZ2VxfGJveFZ8YnNjcnxzY2FwfEJzY3J8YnNpbXxWZXJ0fHZlcnR8YnNvbHxidWxsfGJ1bXB8Y2Fwc3xjZG90fG5jdXB8c2NuRXxuY2FwfG5ic3B8bmFwRXxDZG90fGNlbnR8c2RvdHxWYmFyfG5hbmd8dkJhcnxjaGN5fE1zY3J8bXNjcnxzZWN0fHNlbWl8Q0hjeXxNb3BmfG1vcGZ8c2V4dHxjaXJjfGNpcmV8bWxkcnxtbGNwfGNpckV8Y29tcHxzaGN5fFNIY3l8dkFycnx2YXJyfGNvbmd8Y29wZnxDb3BmfGNvcHl8Q09QWXxtYWx0fG1hbGV8bWFjcnxsdm5FfGNzY3J8bHRyaXxzaW1lfGx0Y2N8c2ltZ3xDc2NyfHNpbWx8Y3N1YnxVdW1sfGxzcWJ8bHNpbXx1dW1sfGNzdXB8THNjcnxsc2NyfHV0cml8c21pZHxscGFyfGN1cHN8c210ZXxsb3pmfGRhcnJ8TG9wZnxVc2NyfHNvbGJ8bG9wZnxzb3BmfFNvcGZ8bG5lcXx1c2NyfHNwYXJ8ZEFycnxsbmFwfERhcnJ8ZGFzaHxTcXJ0fExKY3l8bGpjeXxsSGFyfGRIYXJ8VXBzaXx1cHNpfGRpYW18bGVzZ3xkamN5fERKY3l8bGVxcXxkb3BmfERvcGZ8ZHNjcnxEc2NyfGRzY3l8bGRzaHxsZGNhfHNxdWZ8RFNjeXxzc2NyfFNzY3J8ZHNvbHxsY3VifGxhdGV8c3RhcnxTdGFyfFVvcGZ8TGFycnxsQXJyfGxhcnJ8dW9wZnxkdHJpfGR6Y3l8c3ViZXxzdWJFfExhbmd8bGFuZ3xLc2NyfGtzY3J8S29wZnxrb3BmfEtKY3l8a2pjeXxLSGN5fGtoY3l8RFpjeXxlY2lyfGVkb3R8ZURvdHxKc2NyfGpzY3J8c3VjY3xKb3BmfGpvcGZ8RWRvdHx1SGFyfGVtc3B8ZW5zcHxJdW1sfGl1bWx8ZW9wZnxpc2lufElzY3J8aXNjcnxFb3BmfGVwYXJ8c3VuZ3xlcHNpfGVzY3J8c3VwMXxzdXAyfHN1cDN8SW90YXxpb3RhfHN1cGV8c3VwRXxJb3BmfGlvcGZ8SU9jeXxpb2N5fEVzY3J8ZXNpbXxFc2ltfGltb2Z8VWFycnxRVU9UfHVBcnJ8dWFycnxldW1sfElFY3l8aWVjeXxJZG90fEV1bWx8ZXVyb3xleGNsfEhzY3J8aHNjcnxIb3BmfGhvcGZ8VFNjeXx0c2N5fFRzY3J8aGJhcnx0c2NyfGZsYXR8dGJya3xmbm9mfGhBcnJ8aGFycnxoYWxmfGZvcGZ8Rm9wZnx0ZG90fGd2bkV8Zm9ya3x0cmllfGd0Y2N8ZnNjcnxGc2NyfGdkb3R8Z3NpbXxHc2NyfGdzY3J8R29wZnxnb3BmfGduZXF8R2RvdHx0b3NhfGduYXB8VG9wZnx0b3BmfGdlcXF8dG9lYXxHSmN5fGdqY3l8dGludHxnZXNsfG1pZHxTZnJ8Z2dnfHRvcHxnZXN8Z2xhfGdsRXxnbGp8Z2VxfGduZXxnRWx8Z2VsfGduRXxHY3l8Z2N5fGdhcHxUZnJ8dGZyfFRjeXx0Y3l8SGF0fFRhdXxGZnJ8dGF1fFRhYnxoZnJ8SGZyfGZmcnxGY3l8ZmN5fGljeXxJY3l8aWZmfEVUSHxldGh8aWZyfElmcnxFdGF8ZXRhfGludHxJbnR8U3VwfHN1cHx1Y3l8VWN5fFN1bXxzdW18amN5fEVOR3x1ZnJ8VWZyfGVuZ3xKY3l8amZyfGVsc3xlbGx8ZWdzfEVmcnxlZnJ8SmZyfHVtbHxrY3l8S2N5fEVjeXxlY3l8a2ZyfEtmcnxsYXB8U3VifHN1YnxsYXR8bGN5fExjeXxsZWd8RG90fGRvdHxsRWd8bGVxfGxlc3xzcXV8ZGl2fGRpZXxsZnJ8TGZyfGxnRXxEZnJ8ZGZyfERlbHxkZWd8RGN5fGRjeXxsbmV8bG5FfHNvbHxsb3p8c210fEN1cHxscm18Y3VwfGxzaHxMc2h8c2ltfHNoeXxtYXB8TWFwfG1jeXxNY3l8bWZyfE1mcnxtaG98Z2ZyfEdmcnxzZnJ8Y2lyfENoaXxjaGl8bmFwfENmcnx2Y3l8VmN5fGNmcnxTY3l8c2N5fG5jeXxOY3l8dmVlfFZlZXxDYXB8Y2FwfG5mcnxzY0V8c2NlfE5mcnxuZ2V8bmdFfG5HZ3x2ZnJ8VmZyfG5ndHxib3R8bkd0fG5pc3xuaXZ8UnNofHJzaHxubGV8bmxFfGJuZXxCZnJ8YmZyfG5MbHxubHR8bkx0fEJjeXxiY3l8bm90fE5vdHxybG18d2ZyfFdmcnxucHJ8bnNjfG51bXxvY3l8YXN0fE9jeXxvZnJ8eGZyfFhmcnxPZnJ8b2d0fG9obXxhcEV8b2x0fFJob3xhcGV8cmhvfFJmcnxyZnJ8b3JkfFJFR3xhbmd8cmVnfG9ydnxBbmR8YW5kfEFNUHxSY3l8YW1wfEFmcnx5Y3l8WWN5fHllbnx5ZnJ8WWZyfHJjeXxwYXJ8cGN5fFBjeXxwZnJ8UGZyfHBoaXxQaGl8YWZyfEFjeXxhY3l8emN5fFpjeXxwaXZ8YWNFfGFjZHx6ZnJ8WmZyfHByZXxwckV8cHNpfFBzaXxxZnJ8UWZyfHp3anxPcnxnZXxHZ3xndHxnZ3xlbHxvU3xsdHxMdHxMVHxSZXxsZ3xnbHxlZ3xuZXxJbXxpdHxsZXxERHx3cHx3cnxudXxOdXxkZHxsRXxTY3xzY3xwaXxQaXxlZXxhZnxsbHxMbHxyeHxnRXx4aXxwbXxYaXxpY3xwcnxQcnxpbnxuaXxtcHxtdXxhY3xNdXxvcnxhcHxHdHxHVHxpaSk7fCYoQWFjdXRlfEFncmF2ZXxBdGlsZGV8Q2NlZGlsfEVhY3V0ZXxFZ3JhdmV8SWFjdXRlfElncmF2ZXxOdGlsZGV8T2FjdXRlfE9ncmF2ZXxPc2xhc2h8T3RpbGRlfFVhY3V0ZXxVZ3JhdmV8WWFjdXRlfGFhY3V0ZXxhZ3JhdmV8YXRpbGRlfGJydmJhcnxjY2VkaWx8Y3VycmVufGRpdmlkZXxlYWN1dGV8ZWdyYXZlfGZyYWMxMnxmcmFjMTR8ZnJhYzM0fGlhY3V0ZXxpZ3JhdmV8aXF1ZXN0fG1pZGRvdHxudGlsZGV8b2FjdXRlfG9ncmF2ZXxvc2xhc2h8b3RpbGRlfHBsdXNtbnx1YWN1dGV8dWdyYXZlfHlhY3V0ZXxBRWxpZ3xBY2lyY3xBcmluZ3xFY2lyY3xJY2lyY3xPY2lyY3xUSE9STnxVY2lyY3xhY2lyY3xhY3V0ZXxhZWxpZ3xhcmluZ3xjZWRpbHxlY2lyY3xpY2lyY3xpZXhjbHxsYXF1b3xtaWNyb3xvY2lyY3xwb3VuZHxyYXF1b3xzemxpZ3x0aG9ybnx0aW1lc3x1Y2lyY3xBdW1sfENPUFl8RXVtbHxJdW1sfE91bWx8UVVPVHxVdW1sfGF1bWx8Y2VudHxjb3B5fGV1bWx8aXVtbHxtYWNyfG5ic3B8b3JkZnxvcmRtfG91bWx8cGFyYXxxdW90fHNlY3R8c3VwMXxzdXAyfHN1cDN8dXVtbHx5dW1sfEFNUHxFVEh8UkVHfGFtcHxkZWd8ZXRofG5vdHxyZWd8c2h5fHVtbHx5ZW58R1R8TFR8Z3R8bHQpKD8hOykoWz1hLXpBLVowLTldPyl8JiMoWzAtOV0rKSg7Pyl8JiNbeFhdKFthLWZBLUYwLTldKykoOz8pfCYoWzAtOWEtekEtWl0rKS9nO1xuXHR2YXIgZGVjb2RlTWFwID0geydhYWN1dGUnOidcXHhFMScsJ0FhY3V0ZSc6J1xceEMxJywnYWJyZXZlJzonXFx1MDEwMycsJ0FicmV2ZSc6J1xcdTAxMDInLCdhYyc6J1xcdTIyM0UnLCdhY2QnOidcXHUyMjNGJywnYWNFJzonXFx1MjIzRVxcdTAzMzMnLCdhY2lyYyc6J1xceEUyJywnQWNpcmMnOidcXHhDMicsJ2FjdXRlJzonXFx4QjQnLCdhY3knOidcXHUwNDMwJywnQWN5JzonXFx1MDQxMCcsJ2FlbGlnJzonXFx4RTYnLCdBRWxpZyc6J1xceEM2JywnYWYnOidcXHUyMDYxJywnYWZyJzonXFx1RDgzNVxcdUREMUUnLCdBZnInOidcXHVEODM1XFx1REQwNCcsJ2FncmF2ZSc6J1xceEUwJywnQWdyYXZlJzonXFx4QzAnLCdhbGVmc3ltJzonXFx1MjEzNScsJ2FsZXBoJzonXFx1MjEzNScsJ2FscGhhJzonXFx1MDNCMScsJ0FscGhhJzonXFx1MDM5MScsJ2FtYWNyJzonXFx1MDEwMScsJ0FtYWNyJzonXFx1MDEwMCcsJ2FtYWxnJzonXFx1MkEzRicsJ2FtcCc6JyYnLCdBTVAnOicmJywnYW5kJzonXFx1MjIyNycsJ0FuZCc6J1xcdTJBNTMnLCdhbmRhbmQnOidcXHUyQTU1JywnYW5kZCc6J1xcdTJBNUMnLCdhbmRzbG9wZSc6J1xcdTJBNTgnLCdhbmR2JzonXFx1MkE1QScsJ2FuZyc6J1xcdTIyMjAnLCdhbmdlJzonXFx1MjlBNCcsJ2FuZ2xlJzonXFx1MjIyMCcsJ2FuZ21zZCc6J1xcdTIyMjEnLCdhbmdtc2RhYSc6J1xcdTI5QTgnLCdhbmdtc2RhYic6J1xcdTI5QTknLCdhbmdtc2RhYyc6J1xcdTI5QUEnLCdhbmdtc2RhZCc6J1xcdTI5QUInLCdhbmdtc2RhZSc6J1xcdTI5QUMnLCdhbmdtc2RhZic6J1xcdTI5QUQnLCdhbmdtc2RhZyc6J1xcdTI5QUUnLCdhbmdtc2RhaCc6J1xcdTI5QUYnLCdhbmdydCc6J1xcdTIyMUYnLCdhbmdydHZiJzonXFx1MjJCRScsJ2FuZ3J0dmJkJzonXFx1Mjk5RCcsJ2FuZ3NwaCc6J1xcdTIyMjInLCdhbmdzdCc6J1xceEM1JywnYW5nemFycic6J1xcdTIzN0MnLCdhb2dvbic6J1xcdTAxMDUnLCdBb2dvbic6J1xcdTAxMDQnLCdhb3BmJzonXFx1RDgzNVxcdURENTInLCdBb3BmJzonXFx1RDgzNVxcdUREMzgnLCdhcCc6J1xcdTIyNDgnLCdhcGFjaXInOidcXHUyQTZGJywnYXBlJzonXFx1MjI0QScsJ2FwRSc6J1xcdTJBNzAnLCdhcGlkJzonXFx1MjI0QicsJ2Fwb3MnOidcXCcnLCdBcHBseUZ1bmN0aW9uJzonXFx1MjA2MScsJ2FwcHJveCc6J1xcdTIyNDgnLCdhcHByb3hlcSc6J1xcdTIyNEEnLCdhcmluZyc6J1xceEU1JywnQXJpbmcnOidcXHhDNScsJ2FzY3InOidcXHVEODM1XFx1RENCNicsJ0FzY3InOidcXHVEODM1XFx1REM5QycsJ0Fzc2lnbic6J1xcdTIyNTQnLCdhc3QnOicqJywnYXN5bXAnOidcXHUyMjQ4JywnYXN5bXBlcSc6J1xcdTIyNEQnLCdhdGlsZGUnOidcXHhFMycsJ0F0aWxkZSc6J1xceEMzJywnYXVtbCc6J1xceEU0JywnQXVtbCc6J1xceEM0JywnYXdjb25pbnQnOidcXHUyMjMzJywnYXdpbnQnOidcXHUyQTExJywnYmFja2NvbmcnOidcXHUyMjRDJywnYmFja2Vwc2lsb24nOidcXHUwM0Y2JywnYmFja3ByaW1lJzonXFx1MjAzNScsJ2JhY2tzaW0nOidcXHUyMjNEJywnYmFja3NpbWVxJzonXFx1MjJDRCcsJ0JhY2tzbGFzaCc6J1xcdTIyMTYnLCdCYXJ2JzonXFx1MkFFNycsJ2JhcnZlZSc6J1xcdTIyQkQnLCdiYXJ3ZWQnOidcXHUyMzA1JywnQmFyd2VkJzonXFx1MjMwNicsJ2JhcndlZGdlJzonXFx1MjMwNScsJ2JicmsnOidcXHUyM0I1JywnYmJya3RicmsnOidcXHUyM0I2JywnYmNvbmcnOidcXHUyMjRDJywnYmN5JzonXFx1MDQzMScsJ0JjeSc6J1xcdTA0MTEnLCdiZHF1byc6J1xcdTIwMUUnLCdiZWNhdXMnOidcXHUyMjM1JywnYmVjYXVzZSc6J1xcdTIyMzUnLCdCZWNhdXNlJzonXFx1MjIzNScsJ2JlbXB0eXYnOidcXHUyOUIwJywnYmVwc2knOidcXHUwM0Y2JywnYmVybm91JzonXFx1MjEyQycsJ0Jlcm5vdWxsaXMnOidcXHUyMTJDJywnYmV0YSc6J1xcdTAzQjInLCdCZXRhJzonXFx1MDM5MicsJ2JldGgnOidcXHUyMTM2JywnYmV0d2Vlbic6J1xcdTIyNkMnLCdiZnInOidcXHVEODM1XFx1REQxRicsJ0Jmcic6J1xcdUQ4MzVcXHVERDA1JywnYmlnY2FwJzonXFx1MjJDMicsJ2JpZ2NpcmMnOidcXHUyNUVGJywnYmlnY3VwJzonXFx1MjJDMycsJ2JpZ29kb3QnOidcXHUyQTAwJywnYmlnb3BsdXMnOidcXHUyQTAxJywnYmlnb3RpbWVzJzonXFx1MkEwMicsJ2JpZ3NxY3VwJzonXFx1MkEwNicsJ2JpZ3N0YXInOidcXHUyNjA1JywnYmlndHJpYW5nbGVkb3duJzonXFx1MjVCRCcsJ2JpZ3RyaWFuZ2xldXAnOidcXHUyNUIzJywnYmlndXBsdXMnOidcXHUyQTA0JywnYmlndmVlJzonXFx1MjJDMScsJ2JpZ3dlZGdlJzonXFx1MjJDMCcsJ2JrYXJvdyc6J1xcdTI5MEQnLCdibGFja2xvemVuZ2UnOidcXHUyOUVCJywnYmxhY2tzcXVhcmUnOidcXHUyNUFBJywnYmxhY2t0cmlhbmdsZSc6J1xcdTI1QjQnLCdibGFja3RyaWFuZ2xlZG93bic6J1xcdTI1QkUnLCdibGFja3RyaWFuZ2xlbGVmdCc6J1xcdTI1QzInLCdibGFja3RyaWFuZ2xlcmlnaHQnOidcXHUyNUI4JywnYmxhbmsnOidcXHUyNDIzJywnYmxrMTInOidcXHUyNTkyJywnYmxrMTQnOidcXHUyNTkxJywnYmxrMzQnOidcXHUyNTkzJywnYmxvY2snOidcXHUyNTg4JywnYm5lJzonPVxcdTIwRTUnLCdibmVxdWl2JzonXFx1MjI2MVxcdTIwRTUnLCdibm90JzonXFx1MjMxMCcsJ2JOb3QnOidcXHUyQUVEJywnYm9wZic6J1xcdUQ4MzVcXHVERDUzJywnQm9wZic6J1xcdUQ4MzVcXHVERDM5JywnYm90JzonXFx1MjJBNScsJ2JvdHRvbSc6J1xcdTIyQTUnLCdib3d0aWUnOidcXHUyMkM4JywnYm94Ym94JzonXFx1MjlDOScsJ2JveGRsJzonXFx1MjUxMCcsJ2JveGRMJzonXFx1MjU1NScsJ2JveERsJzonXFx1MjU1NicsJ2JveERMJzonXFx1MjU1NycsJ2JveGRyJzonXFx1MjUwQycsJ2JveGRSJzonXFx1MjU1MicsJ2JveERyJzonXFx1MjU1MycsJ2JveERSJzonXFx1MjU1NCcsJ2JveGgnOidcXHUyNTAwJywnYm94SCc6J1xcdTI1NTAnLCdib3hoZCc6J1xcdTI1MkMnLCdib3hoRCc6J1xcdTI1NjUnLCdib3hIZCc6J1xcdTI1NjQnLCdib3hIRCc6J1xcdTI1NjYnLCdib3hodSc6J1xcdTI1MzQnLCdib3hoVSc6J1xcdTI1NjgnLCdib3hIdSc6J1xcdTI1NjcnLCdib3hIVSc6J1xcdTI1NjknLCdib3htaW51cyc6J1xcdTIyOUYnLCdib3hwbHVzJzonXFx1MjI5RScsJ2JveHRpbWVzJzonXFx1MjJBMCcsJ2JveHVsJzonXFx1MjUxOCcsJ2JveHVMJzonXFx1MjU1QicsJ2JveFVsJzonXFx1MjU1QycsJ2JveFVMJzonXFx1MjU1RCcsJ2JveHVyJzonXFx1MjUxNCcsJ2JveHVSJzonXFx1MjU1OCcsJ2JveFVyJzonXFx1MjU1OScsJ2JveFVSJzonXFx1MjU1QScsJ2JveHYnOidcXHUyNTAyJywnYm94Vic6J1xcdTI1NTEnLCdib3h2aCc6J1xcdTI1M0MnLCdib3h2SCc6J1xcdTI1NkEnLCdib3hWaCc6J1xcdTI1NkInLCdib3hWSCc6J1xcdTI1NkMnLCdib3h2bCc6J1xcdTI1MjQnLCdib3h2TCc6J1xcdTI1NjEnLCdib3hWbCc6J1xcdTI1NjInLCdib3hWTCc6J1xcdTI1NjMnLCdib3h2cic6J1xcdTI1MUMnLCdib3h2Uic6J1xcdTI1NUUnLCdib3hWcic6J1xcdTI1NUYnLCdib3hWUic6J1xcdTI1NjAnLCdicHJpbWUnOidcXHUyMDM1JywnYnJldmUnOidcXHUwMkQ4JywnQnJldmUnOidcXHUwMkQ4JywnYnJ2YmFyJzonXFx4QTYnLCdic2NyJzonXFx1RDgzNVxcdURDQjcnLCdCc2NyJzonXFx1MjEyQycsJ2JzZW1pJzonXFx1MjA0RicsJ2JzaW0nOidcXHUyMjNEJywnYnNpbWUnOidcXHUyMkNEJywnYnNvbCc6J1xcXFwnLCdic29sYic6J1xcdTI5QzUnLCdic29saHN1Yic6J1xcdTI3QzgnLCdidWxsJzonXFx1MjAyMicsJ2J1bGxldCc6J1xcdTIwMjInLCdidW1wJzonXFx1MjI0RScsJ2J1bXBlJzonXFx1MjI0RicsJ2J1bXBFJzonXFx1MkFBRScsJ2J1bXBlcSc6J1xcdTIyNEYnLCdCdW1wZXEnOidcXHUyMjRFJywnY2FjdXRlJzonXFx1MDEwNycsJ0NhY3V0ZSc6J1xcdTAxMDYnLCdjYXAnOidcXHUyMjI5JywnQ2FwJzonXFx1MjJEMicsJ2NhcGFuZCc6J1xcdTJBNDQnLCdjYXBicmN1cCc6J1xcdTJBNDknLCdjYXBjYXAnOidcXHUyQTRCJywnY2FwY3VwJzonXFx1MkE0NycsJ2NhcGRvdCc6J1xcdTJBNDAnLCdDYXBpdGFsRGlmZmVyZW50aWFsRCc6J1xcdTIxNDUnLCdjYXBzJzonXFx1MjIyOVxcdUZFMDAnLCdjYXJldCc6J1xcdTIwNDEnLCdjYXJvbic6J1xcdTAyQzcnLCdDYXlsZXlzJzonXFx1MjEyRCcsJ2NjYXBzJzonXFx1MkE0RCcsJ2NjYXJvbic6J1xcdTAxMEQnLCdDY2Fyb24nOidcXHUwMTBDJywnY2NlZGlsJzonXFx4RTcnLCdDY2VkaWwnOidcXHhDNycsJ2NjaXJjJzonXFx1MDEwOScsJ0NjaXJjJzonXFx1MDEwOCcsJ0Njb25pbnQnOidcXHUyMjMwJywnY2N1cHMnOidcXHUyQTRDJywnY2N1cHNzbSc6J1xcdTJBNTAnLCdjZG90JzonXFx1MDEwQicsJ0Nkb3QnOidcXHUwMTBBJywnY2VkaWwnOidcXHhCOCcsJ0NlZGlsbGEnOidcXHhCOCcsJ2NlbXB0eXYnOidcXHUyOUIyJywnY2VudCc6J1xceEEyJywnY2VudGVyZG90JzonXFx4QjcnLCdDZW50ZXJEb3QnOidcXHhCNycsJ2Nmcic6J1xcdUQ4MzVcXHVERDIwJywnQ2ZyJzonXFx1MjEyRCcsJ2NoY3knOidcXHUwNDQ3JywnQ0hjeSc6J1xcdTA0MjcnLCdjaGVjayc6J1xcdTI3MTMnLCdjaGVja21hcmsnOidcXHUyNzEzJywnY2hpJzonXFx1MDNDNycsJ0NoaSc6J1xcdTAzQTcnLCdjaXInOidcXHUyNUNCJywnY2lyYyc6J1xcdTAyQzYnLCdjaXJjZXEnOidcXHUyMjU3JywnY2lyY2xlYXJyb3dsZWZ0JzonXFx1MjFCQScsJ2NpcmNsZWFycm93cmlnaHQnOidcXHUyMUJCJywnY2lyY2xlZGFzdCc6J1xcdTIyOUInLCdjaXJjbGVkY2lyYyc6J1xcdTIyOUEnLCdjaXJjbGVkZGFzaCc6J1xcdTIyOUQnLCdDaXJjbGVEb3QnOidcXHUyMjk5JywnY2lyY2xlZFInOidcXHhBRScsJ2NpcmNsZWRTJzonXFx1MjRDOCcsJ0NpcmNsZU1pbnVzJzonXFx1MjI5NicsJ0NpcmNsZVBsdXMnOidcXHUyMjk1JywnQ2lyY2xlVGltZXMnOidcXHUyMjk3JywnY2lyZSc6J1xcdTIyNTcnLCdjaXJFJzonXFx1MjlDMycsJ2NpcmZuaW50JzonXFx1MkExMCcsJ2Npcm1pZCc6J1xcdTJBRUYnLCdjaXJzY2lyJzonXFx1MjlDMicsJ0Nsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbCc6J1xcdTIyMzInLCdDbG9zZUN1cmx5RG91YmxlUXVvdGUnOidcXHUyMDFEJywnQ2xvc2VDdXJseVF1b3RlJzonXFx1MjAxOScsJ2NsdWJzJzonXFx1MjY2MycsJ2NsdWJzdWl0JzonXFx1MjY2MycsJ2NvbG9uJzonOicsJ0NvbG9uJzonXFx1MjIzNycsJ2NvbG9uZSc6J1xcdTIyNTQnLCdDb2xvbmUnOidcXHUyQTc0JywnY29sb25lcSc6J1xcdTIyNTQnLCdjb21tYSc6JywnLCdjb21tYXQnOidAJywnY29tcCc6J1xcdTIyMDEnLCdjb21wZm4nOidcXHUyMjE4JywnY29tcGxlbWVudCc6J1xcdTIyMDEnLCdjb21wbGV4ZXMnOidcXHUyMTAyJywnY29uZyc6J1xcdTIyNDUnLCdjb25nZG90JzonXFx1MkE2RCcsJ0NvbmdydWVudCc6J1xcdTIyNjEnLCdjb25pbnQnOidcXHUyMjJFJywnQ29uaW50JzonXFx1MjIyRicsJ0NvbnRvdXJJbnRlZ3JhbCc6J1xcdTIyMkUnLCdjb3BmJzonXFx1RDgzNVxcdURENTQnLCdDb3BmJzonXFx1MjEwMicsJ2NvcHJvZCc6J1xcdTIyMTAnLCdDb3Byb2R1Y3QnOidcXHUyMjEwJywnY29weSc6J1xceEE5JywnQ09QWSc6J1xceEE5JywnY29weXNyJzonXFx1MjExNycsJ0NvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWwnOidcXHUyMjMzJywnY3JhcnInOidcXHUyMUI1JywnY3Jvc3MnOidcXHUyNzE3JywnQ3Jvc3MnOidcXHUyQTJGJywnY3Njcic6J1xcdUQ4MzVcXHVEQ0I4JywnQ3Njcic6J1xcdUQ4MzVcXHVEQzlFJywnY3N1Yic6J1xcdTJBQ0YnLCdjc3ViZSc6J1xcdTJBRDEnLCdjc3VwJzonXFx1MkFEMCcsJ2NzdXBlJzonXFx1MkFEMicsJ2N0ZG90JzonXFx1MjJFRicsJ2N1ZGFycmwnOidcXHUyOTM4JywnY3VkYXJycic6J1xcdTI5MzUnLCdjdWVwcic6J1xcdTIyREUnLCdjdWVzYyc6J1xcdTIyREYnLCdjdWxhcnInOidcXHUyMUI2JywnY3VsYXJycCc6J1xcdTI5M0QnLCdjdXAnOidcXHUyMjJBJywnQ3VwJzonXFx1MjJEMycsJ2N1cGJyY2FwJzonXFx1MkE0OCcsJ2N1cGNhcCc6J1xcdTJBNDYnLCdDdXBDYXAnOidcXHUyMjREJywnY3VwY3VwJzonXFx1MkE0QScsJ2N1cGRvdCc6J1xcdTIyOEQnLCdjdXBvcic6J1xcdTJBNDUnLCdjdXBzJzonXFx1MjIyQVxcdUZFMDAnLCdjdXJhcnInOidcXHUyMUI3JywnY3VyYXJybSc6J1xcdTI5M0MnLCdjdXJseWVxcHJlYyc6J1xcdTIyREUnLCdjdXJseWVxc3VjYyc6J1xcdTIyREYnLCdjdXJseXZlZSc6J1xcdTIyQ0UnLCdjdXJseXdlZGdlJzonXFx1MjJDRicsJ2N1cnJlbic6J1xceEE0JywnY3VydmVhcnJvd2xlZnQnOidcXHUyMUI2JywnY3VydmVhcnJvd3JpZ2h0JzonXFx1MjFCNycsJ2N1dmVlJzonXFx1MjJDRScsJ2N1d2VkJzonXFx1MjJDRicsJ2N3Y29uaW50JzonXFx1MjIzMicsJ2N3aW50JzonXFx1MjIzMScsJ2N5bGN0eSc6J1xcdTIzMkQnLCdkYWdnZXInOidcXHUyMDIwJywnRGFnZ2VyJzonXFx1MjAyMScsJ2RhbGV0aCc6J1xcdTIxMzgnLCdkYXJyJzonXFx1MjE5MycsJ2RBcnInOidcXHUyMUQzJywnRGFycic6J1xcdTIxQTEnLCdkYXNoJzonXFx1MjAxMCcsJ2Rhc2h2JzonXFx1MjJBMycsJ0Rhc2h2JzonXFx1MkFFNCcsJ2Ria2Fyb3cnOidcXHUyOTBGJywnZGJsYWMnOidcXHUwMkREJywnZGNhcm9uJzonXFx1MDEwRicsJ0RjYXJvbic6J1xcdTAxMEUnLCdkY3knOidcXHUwNDM0JywnRGN5JzonXFx1MDQxNCcsJ2RkJzonXFx1MjE0NicsJ0REJzonXFx1MjE0NScsJ2RkYWdnZXInOidcXHUyMDIxJywnZGRhcnInOidcXHUyMUNBJywnRERvdHJhaGQnOidcXHUyOTExJywnZGRvdHNlcSc6J1xcdTJBNzcnLCdkZWcnOidcXHhCMCcsJ0RlbCc6J1xcdTIyMDcnLCdkZWx0YSc6J1xcdTAzQjQnLCdEZWx0YSc6J1xcdTAzOTQnLCdkZW1wdHl2JzonXFx1MjlCMScsJ2RmaXNodCc6J1xcdTI5N0YnLCdkZnInOidcXHVEODM1XFx1REQyMScsJ0Rmcic6J1xcdUQ4MzVcXHVERDA3JywnZEhhcic6J1xcdTI5NjUnLCdkaGFybCc6J1xcdTIxQzMnLCdkaGFycic6J1xcdTIxQzInLCdEaWFjcml0aWNhbEFjdXRlJzonXFx4QjQnLCdEaWFjcml0aWNhbERvdCc6J1xcdTAyRDknLCdEaWFjcml0aWNhbERvdWJsZUFjdXRlJzonXFx1MDJERCcsJ0RpYWNyaXRpY2FsR3JhdmUnOidgJywnRGlhY3JpdGljYWxUaWxkZSc6J1xcdTAyREMnLCdkaWFtJzonXFx1MjJDNCcsJ2RpYW1vbmQnOidcXHUyMkM0JywnRGlhbW9uZCc6J1xcdTIyQzQnLCdkaWFtb25kc3VpdCc6J1xcdTI2NjYnLCdkaWFtcyc6J1xcdTI2NjYnLCdkaWUnOidcXHhBOCcsJ0RpZmZlcmVudGlhbEQnOidcXHUyMTQ2JywnZGlnYW1tYSc6J1xcdTAzREQnLCdkaXNpbic6J1xcdTIyRjInLCdkaXYnOidcXHhGNycsJ2RpdmlkZSc6J1xceEY3JywnZGl2aWRlb250aW1lcyc6J1xcdTIyQzcnLCdkaXZvbngnOidcXHUyMkM3JywnZGpjeSc6J1xcdTA0NTInLCdESmN5JzonXFx1MDQwMicsJ2RsY29ybic6J1xcdTIzMUUnLCdkbGNyb3AnOidcXHUyMzBEJywnZG9sbGFyJzonJCcsJ2RvcGYnOidcXHVEODM1XFx1REQ1NScsJ0RvcGYnOidcXHVEODM1XFx1REQzQicsJ2RvdCc6J1xcdTAyRDknLCdEb3QnOidcXHhBOCcsJ0RvdERvdCc6J1xcdTIwREMnLCdkb3RlcSc6J1xcdTIyNTAnLCdkb3RlcWRvdCc6J1xcdTIyNTEnLCdEb3RFcXVhbCc6J1xcdTIyNTAnLCdkb3RtaW51cyc6J1xcdTIyMzgnLCdkb3RwbHVzJzonXFx1MjIxNCcsJ2RvdHNxdWFyZSc6J1xcdTIyQTEnLCdkb3VibGViYXJ3ZWRnZSc6J1xcdTIzMDYnLCdEb3VibGVDb250b3VySW50ZWdyYWwnOidcXHUyMjJGJywnRG91YmxlRG90JzonXFx4QTgnLCdEb3VibGVEb3duQXJyb3cnOidcXHUyMUQzJywnRG91YmxlTGVmdEFycm93JzonXFx1MjFEMCcsJ0RvdWJsZUxlZnRSaWdodEFycm93JzonXFx1MjFENCcsJ0RvdWJsZUxlZnRUZWUnOidcXHUyQUU0JywnRG91YmxlTG9uZ0xlZnRBcnJvdyc6J1xcdTI3RjgnLCdEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3cnOidcXHUyN0ZBJywnRG91YmxlTG9uZ1JpZ2h0QXJyb3cnOidcXHUyN0Y5JywnRG91YmxlUmlnaHRBcnJvdyc6J1xcdTIxRDInLCdEb3VibGVSaWdodFRlZSc6J1xcdTIyQTgnLCdEb3VibGVVcEFycm93JzonXFx1MjFEMScsJ0RvdWJsZVVwRG93bkFycm93JzonXFx1MjFENScsJ0RvdWJsZVZlcnRpY2FsQmFyJzonXFx1MjIyNScsJ2Rvd25hcnJvdyc6J1xcdTIxOTMnLCdEb3duYXJyb3cnOidcXHUyMUQzJywnRG93bkFycm93JzonXFx1MjE5MycsJ0Rvd25BcnJvd0Jhcic6J1xcdTI5MTMnLCdEb3duQXJyb3dVcEFycm93JzonXFx1MjFGNScsJ0Rvd25CcmV2ZSc6J1xcdTAzMTEnLCdkb3duZG93bmFycm93cyc6J1xcdTIxQ0EnLCdkb3duaGFycG9vbmxlZnQnOidcXHUyMUMzJywnZG93bmhhcnBvb25yaWdodCc6J1xcdTIxQzInLCdEb3duTGVmdFJpZ2h0VmVjdG9yJzonXFx1Mjk1MCcsJ0Rvd25MZWZ0VGVlVmVjdG9yJzonXFx1Mjk1RScsJ0Rvd25MZWZ0VmVjdG9yJzonXFx1MjFCRCcsJ0Rvd25MZWZ0VmVjdG9yQmFyJzonXFx1Mjk1NicsJ0Rvd25SaWdodFRlZVZlY3Rvcic6J1xcdTI5NUYnLCdEb3duUmlnaHRWZWN0b3InOidcXHUyMUMxJywnRG93blJpZ2h0VmVjdG9yQmFyJzonXFx1Mjk1NycsJ0Rvd25UZWUnOidcXHUyMkE0JywnRG93blRlZUFycm93JzonXFx1MjFBNycsJ2RyYmthcm93JzonXFx1MjkxMCcsJ2RyY29ybic6J1xcdTIzMUYnLCdkcmNyb3AnOidcXHUyMzBDJywnZHNjcic6J1xcdUQ4MzVcXHVEQ0I5JywnRHNjcic6J1xcdUQ4MzVcXHVEQzlGJywnZHNjeSc6J1xcdTA0NTUnLCdEU2N5JzonXFx1MDQwNScsJ2Rzb2wnOidcXHUyOUY2JywnZHN0cm9rJzonXFx1MDExMScsJ0RzdHJvayc6J1xcdTAxMTAnLCdkdGRvdCc6J1xcdTIyRjEnLCdkdHJpJzonXFx1MjVCRicsJ2R0cmlmJzonXFx1MjVCRScsJ2R1YXJyJzonXFx1MjFGNScsJ2R1aGFyJzonXFx1Mjk2RicsJ2R3YW5nbGUnOidcXHUyOUE2JywnZHpjeSc6J1xcdTA0NUYnLCdEWmN5JzonXFx1MDQwRicsJ2R6aWdyYXJyJzonXFx1MjdGRicsJ2VhY3V0ZSc6J1xceEU5JywnRWFjdXRlJzonXFx4QzknLCdlYXN0ZXInOidcXHUyQTZFJywnZWNhcm9uJzonXFx1MDExQicsJ0VjYXJvbic6J1xcdTAxMUEnLCdlY2lyJzonXFx1MjI1NicsJ2VjaXJjJzonXFx4RUEnLCdFY2lyYyc6J1xceENBJywnZWNvbG9uJzonXFx1MjI1NScsJ2VjeSc6J1xcdTA0NEQnLCdFY3knOidcXHUwNDJEJywnZUREb3QnOidcXHUyQTc3JywnZWRvdCc6J1xcdTAxMTcnLCdlRG90JzonXFx1MjI1MScsJ0Vkb3QnOidcXHUwMTE2JywnZWUnOidcXHUyMTQ3JywnZWZEb3QnOidcXHUyMjUyJywnZWZyJzonXFx1RDgzNVxcdUREMjInLCdFZnInOidcXHVEODM1XFx1REQwOCcsJ2VnJzonXFx1MkE5QScsJ2VncmF2ZSc6J1xceEU4JywnRWdyYXZlJzonXFx4QzgnLCdlZ3MnOidcXHUyQTk2JywnZWdzZG90JzonXFx1MkE5OCcsJ2VsJzonXFx1MkE5OScsJ0VsZW1lbnQnOidcXHUyMjA4JywnZWxpbnRlcnMnOidcXHUyM0U3JywnZWxsJzonXFx1MjExMycsJ2Vscyc6J1xcdTJBOTUnLCdlbHNkb3QnOidcXHUyQTk3JywnZW1hY3InOidcXHUwMTEzJywnRW1hY3InOidcXHUwMTEyJywnZW1wdHknOidcXHUyMjA1JywnZW1wdHlzZXQnOidcXHUyMjA1JywnRW1wdHlTbWFsbFNxdWFyZSc6J1xcdTI1RkInLCdlbXB0eXYnOidcXHUyMjA1JywnRW1wdHlWZXJ5U21hbGxTcXVhcmUnOidcXHUyNUFCJywnZW1zcCc6J1xcdTIwMDMnLCdlbXNwMTMnOidcXHUyMDA0JywnZW1zcDE0JzonXFx1MjAwNScsJ2VuZyc6J1xcdTAxNEInLCdFTkcnOidcXHUwMTRBJywnZW5zcCc6J1xcdTIwMDInLCdlb2dvbic6J1xcdTAxMTknLCdFb2dvbic6J1xcdTAxMTgnLCdlb3BmJzonXFx1RDgzNVxcdURENTYnLCdFb3BmJzonXFx1RDgzNVxcdUREM0MnLCdlcGFyJzonXFx1MjJENScsJ2VwYXJzbCc6J1xcdTI5RTMnLCdlcGx1cyc6J1xcdTJBNzEnLCdlcHNpJzonXFx1MDNCNScsJ2Vwc2lsb24nOidcXHUwM0I1JywnRXBzaWxvbic6J1xcdTAzOTUnLCdlcHNpdic6J1xcdTAzRjUnLCdlcWNpcmMnOidcXHUyMjU2JywnZXFjb2xvbic6J1xcdTIyNTUnLCdlcXNpbSc6J1xcdTIyNDInLCdlcXNsYW50Z3RyJzonXFx1MkE5NicsJ2Vxc2xhbnRsZXNzJzonXFx1MkE5NScsJ0VxdWFsJzonXFx1MkE3NScsJ2VxdWFscyc6Jz0nLCdFcXVhbFRpbGRlJzonXFx1MjI0MicsJ2VxdWVzdCc6J1xcdTIyNUYnLCdFcXVpbGlicml1bSc6J1xcdTIxQ0MnLCdlcXVpdic6J1xcdTIyNjEnLCdlcXVpdkREJzonXFx1MkE3OCcsJ2VxdnBhcnNsJzonXFx1MjlFNScsJ2VyYXJyJzonXFx1Mjk3MScsJ2VyRG90JzonXFx1MjI1MycsJ2VzY3InOidcXHUyMTJGJywnRXNjcic6J1xcdTIxMzAnLCdlc2RvdCc6J1xcdTIyNTAnLCdlc2ltJzonXFx1MjI0MicsJ0VzaW0nOidcXHUyQTczJywnZXRhJzonXFx1MDNCNycsJ0V0YSc6J1xcdTAzOTcnLCdldGgnOidcXHhGMCcsJ0VUSCc6J1xceEQwJywnZXVtbCc6J1xceEVCJywnRXVtbCc6J1xceENCJywnZXVybyc6J1xcdTIwQUMnLCdleGNsJzonIScsJ2V4aXN0JzonXFx1MjIwMycsJ0V4aXN0cyc6J1xcdTIyMDMnLCdleHBlY3RhdGlvbic6J1xcdTIxMzAnLCdleHBvbmVudGlhbGUnOidcXHUyMTQ3JywnRXhwb25lbnRpYWxFJzonXFx1MjE0NycsJ2ZhbGxpbmdkb3RzZXEnOidcXHUyMjUyJywnZmN5JzonXFx1MDQ0NCcsJ0ZjeSc6J1xcdTA0MjQnLCdmZW1hbGUnOidcXHUyNjQwJywnZmZpbGlnJzonXFx1RkIwMycsJ2ZmbGlnJzonXFx1RkIwMCcsJ2ZmbGxpZyc6J1xcdUZCMDQnLCdmZnInOidcXHVEODM1XFx1REQyMycsJ0Zmcic6J1xcdUQ4MzVcXHVERDA5JywnZmlsaWcnOidcXHVGQjAxJywnRmlsbGVkU21hbGxTcXVhcmUnOidcXHUyNUZDJywnRmlsbGVkVmVyeVNtYWxsU3F1YXJlJzonXFx1MjVBQScsJ2ZqbGlnJzonZmonLCdmbGF0JzonXFx1MjY2RCcsJ2ZsbGlnJzonXFx1RkIwMicsJ2ZsdG5zJzonXFx1MjVCMScsJ2Zub2YnOidcXHUwMTkyJywnZm9wZic6J1xcdUQ4MzVcXHVERDU3JywnRm9wZic6J1xcdUQ4MzVcXHVERDNEJywnZm9yYWxsJzonXFx1MjIwMCcsJ0ZvckFsbCc6J1xcdTIyMDAnLCdmb3JrJzonXFx1MjJENCcsJ2Zvcmt2JzonXFx1MkFEOScsJ0ZvdXJpZXJ0cmYnOidcXHUyMTMxJywnZnBhcnRpbnQnOidcXHUyQTBEJywnZnJhYzEyJzonXFx4QkQnLCdmcmFjMTMnOidcXHUyMTUzJywnZnJhYzE0JzonXFx4QkMnLCdmcmFjMTUnOidcXHUyMTU1JywnZnJhYzE2JzonXFx1MjE1OScsJ2ZyYWMxOCc6J1xcdTIxNUInLCdmcmFjMjMnOidcXHUyMTU0JywnZnJhYzI1JzonXFx1MjE1NicsJ2ZyYWMzNCc6J1xceEJFJywnZnJhYzM1JzonXFx1MjE1NycsJ2ZyYWMzOCc6J1xcdTIxNUMnLCdmcmFjNDUnOidcXHUyMTU4JywnZnJhYzU2JzonXFx1MjE1QScsJ2ZyYWM1OCc6J1xcdTIxNUQnLCdmcmFjNzgnOidcXHUyMTVFJywnZnJhc2wnOidcXHUyMDQ0JywnZnJvd24nOidcXHUyMzIyJywnZnNjcic6J1xcdUQ4MzVcXHVEQ0JCJywnRnNjcic6J1xcdTIxMzEnLCdnYWN1dGUnOidcXHUwMUY1JywnZ2FtbWEnOidcXHUwM0IzJywnR2FtbWEnOidcXHUwMzkzJywnZ2FtbWFkJzonXFx1MDNERCcsJ0dhbW1hZCc6J1xcdTAzREMnLCdnYXAnOidcXHUyQTg2JywnZ2JyZXZlJzonXFx1MDExRicsJ0dicmV2ZSc6J1xcdTAxMUUnLCdHY2VkaWwnOidcXHUwMTIyJywnZ2NpcmMnOidcXHUwMTFEJywnR2NpcmMnOidcXHUwMTFDJywnZ2N5JzonXFx1MDQzMycsJ0djeSc6J1xcdTA0MTMnLCdnZG90JzonXFx1MDEyMScsJ0dkb3QnOidcXHUwMTIwJywnZ2UnOidcXHUyMjY1JywnZ0UnOidcXHUyMjY3JywnZ2VsJzonXFx1MjJEQicsJ2dFbCc6J1xcdTJBOEMnLCdnZXEnOidcXHUyMjY1JywnZ2VxcSc6J1xcdTIyNjcnLCdnZXFzbGFudCc6J1xcdTJBN0UnLCdnZXMnOidcXHUyQTdFJywnZ2VzY2MnOidcXHUyQUE5JywnZ2VzZG90JzonXFx1MkE4MCcsJ2dlc2RvdG8nOidcXHUyQTgyJywnZ2VzZG90b2wnOidcXHUyQTg0JywnZ2VzbCc6J1xcdTIyREJcXHVGRTAwJywnZ2VzbGVzJzonXFx1MkE5NCcsJ2dmcic6J1xcdUQ4MzVcXHVERDI0JywnR2ZyJzonXFx1RDgzNVxcdUREMEEnLCdnZyc6J1xcdTIyNkInLCdHZyc6J1xcdTIyRDknLCdnZ2cnOidcXHUyMkQ5JywnZ2ltZWwnOidcXHUyMTM3JywnZ2pjeSc6J1xcdTA0NTMnLCdHSmN5JzonXFx1MDQwMycsJ2dsJzonXFx1MjI3NycsJ2dsYSc6J1xcdTJBQTUnLCdnbEUnOidcXHUyQTkyJywnZ2xqJzonXFx1MkFBNCcsJ2duYXAnOidcXHUyQThBJywnZ25hcHByb3gnOidcXHUyQThBJywnZ25lJzonXFx1MkE4OCcsJ2duRSc6J1xcdTIyNjknLCdnbmVxJzonXFx1MkE4OCcsJ2duZXFxJzonXFx1MjI2OScsJ2duc2ltJzonXFx1MjJFNycsJ2dvcGYnOidcXHVEODM1XFx1REQ1OCcsJ0dvcGYnOidcXHVEODM1XFx1REQzRScsJ2dyYXZlJzonYCcsJ0dyZWF0ZXJFcXVhbCc6J1xcdTIyNjUnLCdHcmVhdGVyRXF1YWxMZXNzJzonXFx1MjJEQicsJ0dyZWF0ZXJGdWxsRXF1YWwnOidcXHUyMjY3JywnR3JlYXRlckdyZWF0ZXInOidcXHUyQUEyJywnR3JlYXRlckxlc3MnOidcXHUyMjc3JywnR3JlYXRlclNsYW50RXF1YWwnOidcXHUyQTdFJywnR3JlYXRlclRpbGRlJzonXFx1MjI3MycsJ2dzY3InOidcXHUyMTBBJywnR3Njcic6J1xcdUQ4MzVcXHVEQ0EyJywnZ3NpbSc6J1xcdTIyNzMnLCdnc2ltZSc6J1xcdTJBOEUnLCdnc2ltbCc6J1xcdTJBOTAnLCdndCc6Jz4nLCdHdCc6J1xcdTIyNkInLCdHVCc6Jz4nLCdndGNjJzonXFx1MkFBNycsJ2d0Y2lyJzonXFx1MkE3QScsJ2d0ZG90JzonXFx1MjJENycsJ2d0bFBhcic6J1xcdTI5OTUnLCdndHF1ZXN0JzonXFx1MkE3QycsJ2d0cmFwcHJveCc6J1xcdTJBODYnLCdndHJhcnInOidcXHUyOTc4JywnZ3RyZG90JzonXFx1MjJENycsJ2d0cmVxbGVzcyc6J1xcdTIyREInLCdndHJlcXFsZXNzJzonXFx1MkE4QycsJ2d0cmxlc3MnOidcXHUyMjc3JywnZ3Ryc2ltJzonXFx1MjI3MycsJ2d2ZXJ0bmVxcSc6J1xcdTIyNjlcXHVGRTAwJywnZ3ZuRSc6J1xcdTIyNjlcXHVGRTAwJywnSGFjZWsnOidcXHUwMkM3JywnaGFpcnNwJzonXFx1MjAwQScsJ2hhbGYnOidcXHhCRCcsJ2hhbWlsdCc6J1xcdTIxMEInLCdoYXJkY3knOidcXHUwNDRBJywnSEFSRGN5JzonXFx1MDQyQScsJ2hhcnInOidcXHUyMTk0JywnaEFycic6J1xcdTIxRDQnLCdoYXJyY2lyJzonXFx1Mjk0OCcsJ2hhcnJ3JzonXFx1MjFBRCcsJ0hhdCc6J14nLCdoYmFyJzonXFx1MjEwRicsJ2hjaXJjJzonXFx1MDEyNScsJ0hjaXJjJzonXFx1MDEyNCcsJ2hlYXJ0cyc6J1xcdTI2NjUnLCdoZWFydHN1aXQnOidcXHUyNjY1JywnaGVsbGlwJzonXFx1MjAyNicsJ2hlcmNvbic6J1xcdTIyQjknLCdoZnInOidcXHVEODM1XFx1REQyNScsJ0hmcic6J1xcdTIxMEMnLCdIaWxiZXJ0U3BhY2UnOidcXHUyMTBCJywnaGtzZWFyb3cnOidcXHUyOTI1JywnaGtzd2Fyb3cnOidcXHUyOTI2JywnaG9hcnInOidcXHUyMUZGJywnaG9tdGh0JzonXFx1MjIzQicsJ2hvb2tsZWZ0YXJyb3cnOidcXHUyMUE5JywnaG9va3JpZ2h0YXJyb3cnOidcXHUyMUFBJywnaG9wZic6J1xcdUQ4MzVcXHVERDU5JywnSG9wZic6J1xcdTIxMEQnLCdob3JiYXInOidcXHUyMDE1JywnSG9yaXpvbnRhbExpbmUnOidcXHUyNTAwJywnaHNjcic6J1xcdUQ4MzVcXHVEQ0JEJywnSHNjcic6J1xcdTIxMEInLCdoc2xhc2gnOidcXHUyMTBGJywnaHN0cm9rJzonXFx1MDEyNycsJ0hzdHJvayc6J1xcdTAxMjYnLCdIdW1wRG93bkh1bXAnOidcXHUyMjRFJywnSHVtcEVxdWFsJzonXFx1MjI0RicsJ2h5YnVsbCc6J1xcdTIwNDMnLCdoeXBoZW4nOidcXHUyMDEwJywnaWFjdXRlJzonXFx4RUQnLCdJYWN1dGUnOidcXHhDRCcsJ2ljJzonXFx1MjA2MycsJ2ljaXJjJzonXFx4RUUnLCdJY2lyYyc6J1xceENFJywnaWN5JzonXFx1MDQzOCcsJ0ljeSc6J1xcdTA0MTgnLCdJZG90JzonXFx1MDEzMCcsJ2llY3knOidcXHUwNDM1JywnSUVjeSc6J1xcdTA0MTUnLCdpZXhjbCc6J1xceEExJywnaWZmJzonXFx1MjFENCcsJ2lmcic6J1xcdUQ4MzVcXHVERDI2JywnSWZyJzonXFx1MjExMScsJ2lncmF2ZSc6J1xceEVDJywnSWdyYXZlJzonXFx4Q0MnLCdpaSc6J1xcdTIxNDgnLCdpaWlpbnQnOidcXHUyQTBDJywnaWlpbnQnOidcXHUyMjJEJywnaWluZmluJzonXFx1MjlEQycsJ2lpb3RhJzonXFx1MjEyOScsJ2lqbGlnJzonXFx1MDEzMycsJ0lKbGlnJzonXFx1MDEzMicsJ0ltJzonXFx1MjExMScsJ2ltYWNyJzonXFx1MDEyQicsJ0ltYWNyJzonXFx1MDEyQScsJ2ltYWdlJzonXFx1MjExMScsJ0ltYWdpbmFyeUknOidcXHUyMTQ4JywnaW1hZ2xpbmUnOidcXHUyMTEwJywnaW1hZ3BhcnQnOidcXHUyMTExJywnaW1hdGgnOidcXHUwMTMxJywnaW1vZic6J1xcdTIyQjcnLCdpbXBlZCc6J1xcdTAxQjUnLCdJbXBsaWVzJzonXFx1MjFEMicsJ2luJzonXFx1MjIwOCcsJ2luY2FyZSc6J1xcdTIxMDUnLCdpbmZpbic6J1xcdTIyMUUnLCdpbmZpbnRpZSc6J1xcdTI5REQnLCdpbm9kb3QnOidcXHUwMTMxJywnaW50JzonXFx1MjIyQicsJ0ludCc6J1xcdTIyMkMnLCdpbnRjYWwnOidcXHUyMkJBJywnaW50ZWdlcnMnOidcXHUyMTI0JywnSW50ZWdyYWwnOidcXHUyMjJCJywnaW50ZXJjYWwnOidcXHUyMkJBJywnSW50ZXJzZWN0aW9uJzonXFx1MjJDMicsJ2ludGxhcmhrJzonXFx1MkExNycsJ2ludHByb2QnOidcXHUyQTNDJywnSW52aXNpYmxlQ29tbWEnOidcXHUyMDYzJywnSW52aXNpYmxlVGltZXMnOidcXHUyMDYyJywnaW9jeSc6J1xcdTA0NTEnLCdJT2N5JzonXFx1MDQwMScsJ2lvZ29uJzonXFx1MDEyRicsJ0lvZ29uJzonXFx1MDEyRScsJ2lvcGYnOidcXHVEODM1XFx1REQ1QScsJ0lvcGYnOidcXHVEODM1XFx1REQ0MCcsJ2lvdGEnOidcXHUwM0I5JywnSW90YSc6J1xcdTAzOTknLCdpcHJvZCc6J1xcdTJBM0MnLCdpcXVlc3QnOidcXHhCRicsJ2lzY3InOidcXHVEODM1XFx1RENCRScsJ0lzY3InOidcXHUyMTEwJywnaXNpbic6J1xcdTIyMDgnLCdpc2luZG90JzonXFx1MjJGNScsJ2lzaW5FJzonXFx1MjJGOScsJ2lzaW5zJzonXFx1MjJGNCcsJ2lzaW5zdic6J1xcdTIyRjMnLCdpc2ludic6J1xcdTIyMDgnLCdpdCc6J1xcdTIwNjInLCdpdGlsZGUnOidcXHUwMTI5JywnSXRpbGRlJzonXFx1MDEyOCcsJ2l1a2N5JzonXFx1MDQ1NicsJ0l1a2N5JzonXFx1MDQwNicsJ2l1bWwnOidcXHhFRicsJ0l1bWwnOidcXHhDRicsJ2pjaXJjJzonXFx1MDEzNScsJ0pjaXJjJzonXFx1MDEzNCcsJ2pjeSc6J1xcdTA0MzknLCdKY3knOidcXHUwNDE5JywnamZyJzonXFx1RDgzNVxcdUREMjcnLCdKZnInOidcXHVEODM1XFx1REQwRCcsJ2ptYXRoJzonXFx1MDIzNycsJ2pvcGYnOidcXHVEODM1XFx1REQ1QicsJ0pvcGYnOidcXHVEODM1XFx1REQ0MScsJ2pzY3InOidcXHVEODM1XFx1RENCRicsJ0pzY3InOidcXHVEODM1XFx1RENBNScsJ2pzZXJjeSc6J1xcdTA0NTgnLCdKc2VyY3knOidcXHUwNDA4JywnanVrY3knOidcXHUwNDU0JywnSnVrY3knOidcXHUwNDA0Jywna2FwcGEnOidcXHUwM0JBJywnS2FwcGEnOidcXHUwMzlBJywna2FwcGF2JzonXFx1MDNGMCcsJ2tjZWRpbCc6J1xcdTAxMzcnLCdLY2VkaWwnOidcXHUwMTM2Jywna2N5JzonXFx1MDQzQScsJ0tjeSc6J1xcdTA0MUEnLCdrZnInOidcXHVEODM1XFx1REQyOCcsJ0tmcic6J1xcdUQ4MzVcXHVERDBFJywna2dyZWVuJzonXFx1MDEzOCcsJ2toY3knOidcXHUwNDQ1JywnS0hjeSc6J1xcdTA0MjUnLCdramN5JzonXFx1MDQ1QycsJ0tKY3knOidcXHUwNDBDJywna29wZic6J1xcdUQ4MzVcXHVERDVDJywnS29wZic6J1xcdUQ4MzVcXHVERDQyJywna3Njcic6J1xcdUQ4MzVcXHVEQ0MwJywnS3Njcic6J1xcdUQ4MzVcXHVEQ0E2JywnbEFhcnInOidcXHUyMURBJywnbGFjdXRlJzonXFx1MDEzQScsJ0xhY3V0ZSc6J1xcdTAxMzknLCdsYWVtcHR5dic6J1xcdTI5QjQnLCdsYWdyYW4nOidcXHUyMTEyJywnbGFtYmRhJzonXFx1MDNCQicsJ0xhbWJkYSc6J1xcdTAzOUInLCdsYW5nJzonXFx1MjdFOCcsJ0xhbmcnOidcXHUyN0VBJywnbGFuZ2QnOidcXHUyOTkxJywnbGFuZ2xlJzonXFx1MjdFOCcsJ2xhcCc6J1xcdTJBODUnLCdMYXBsYWNldHJmJzonXFx1MjExMicsJ2xhcXVvJzonXFx4QUInLCdsYXJyJzonXFx1MjE5MCcsJ2xBcnInOidcXHUyMUQwJywnTGFycic6J1xcdTIxOUUnLCdsYXJyYic6J1xcdTIxRTQnLCdsYXJyYmZzJzonXFx1MjkxRicsJ2xhcnJmcyc6J1xcdTI5MUQnLCdsYXJyaGsnOidcXHUyMUE5JywnbGFycmxwJzonXFx1MjFBQicsJ2xhcnJwbCc6J1xcdTI5MzknLCdsYXJyc2ltJzonXFx1Mjk3MycsJ2xhcnJ0bCc6J1xcdTIxQTInLCdsYXQnOidcXHUyQUFCJywnbGF0YWlsJzonXFx1MjkxOScsJ2xBdGFpbCc6J1xcdTI5MUInLCdsYXRlJzonXFx1MkFBRCcsJ2xhdGVzJzonXFx1MkFBRFxcdUZFMDAnLCdsYmFycic6J1xcdTI5MEMnLCdsQmFycic6J1xcdTI5MEUnLCdsYmJyayc6J1xcdTI3NzInLCdsYnJhY2UnOid7JywnbGJyYWNrJzonWycsJ2xicmtlJzonXFx1Mjk4QicsJ2xicmtzbGQnOidcXHUyOThGJywnbGJya3NsdSc6J1xcdTI5OEQnLCdsY2Fyb24nOidcXHUwMTNFJywnTGNhcm9uJzonXFx1MDEzRCcsJ2xjZWRpbCc6J1xcdTAxM0MnLCdMY2VkaWwnOidcXHUwMTNCJywnbGNlaWwnOidcXHUyMzA4JywnbGN1Yic6J3snLCdsY3knOidcXHUwNDNCJywnTGN5JzonXFx1MDQxQicsJ2xkY2EnOidcXHUyOTM2JywnbGRxdW8nOidcXHUyMDFDJywnbGRxdW9yJzonXFx1MjAxRScsJ2xkcmRoYXInOidcXHUyOTY3JywnbGRydXNoYXInOidcXHUyOTRCJywnbGRzaCc6J1xcdTIxQjInLCdsZSc6J1xcdTIyNjQnLCdsRSc6J1xcdTIyNjYnLCdMZWZ0QW5nbGVCcmFja2V0JzonXFx1MjdFOCcsJ2xlZnRhcnJvdyc6J1xcdTIxOTAnLCdMZWZ0YXJyb3cnOidcXHUyMUQwJywnTGVmdEFycm93JzonXFx1MjE5MCcsJ0xlZnRBcnJvd0Jhcic6J1xcdTIxRTQnLCdMZWZ0QXJyb3dSaWdodEFycm93JzonXFx1MjFDNicsJ2xlZnRhcnJvd3RhaWwnOidcXHUyMUEyJywnTGVmdENlaWxpbmcnOidcXHUyMzA4JywnTGVmdERvdWJsZUJyYWNrZXQnOidcXHUyN0U2JywnTGVmdERvd25UZWVWZWN0b3InOidcXHUyOTYxJywnTGVmdERvd25WZWN0b3InOidcXHUyMUMzJywnTGVmdERvd25WZWN0b3JCYXInOidcXHUyOTU5JywnTGVmdEZsb29yJzonXFx1MjMwQScsJ2xlZnRoYXJwb29uZG93bic6J1xcdTIxQkQnLCdsZWZ0aGFycG9vbnVwJzonXFx1MjFCQycsJ2xlZnRsZWZ0YXJyb3dzJzonXFx1MjFDNycsJ2xlZnRyaWdodGFycm93JzonXFx1MjE5NCcsJ0xlZnRyaWdodGFycm93JzonXFx1MjFENCcsJ0xlZnRSaWdodEFycm93JzonXFx1MjE5NCcsJ2xlZnRyaWdodGFycm93cyc6J1xcdTIxQzYnLCdsZWZ0cmlnaHRoYXJwb29ucyc6J1xcdTIxQ0InLCdsZWZ0cmlnaHRzcXVpZ2Fycm93JzonXFx1MjFBRCcsJ0xlZnRSaWdodFZlY3Rvcic6J1xcdTI5NEUnLCdMZWZ0VGVlJzonXFx1MjJBMycsJ0xlZnRUZWVBcnJvdyc6J1xcdTIxQTQnLCdMZWZ0VGVlVmVjdG9yJzonXFx1Mjk1QScsJ2xlZnR0aHJlZXRpbWVzJzonXFx1MjJDQicsJ0xlZnRUcmlhbmdsZSc6J1xcdTIyQjInLCdMZWZ0VHJpYW5nbGVCYXInOidcXHUyOUNGJywnTGVmdFRyaWFuZ2xlRXF1YWwnOidcXHUyMkI0JywnTGVmdFVwRG93blZlY3Rvcic6J1xcdTI5NTEnLCdMZWZ0VXBUZWVWZWN0b3InOidcXHUyOTYwJywnTGVmdFVwVmVjdG9yJzonXFx1MjFCRicsJ0xlZnRVcFZlY3RvckJhcic6J1xcdTI5NTgnLCdMZWZ0VmVjdG9yJzonXFx1MjFCQycsJ0xlZnRWZWN0b3JCYXInOidcXHUyOTUyJywnbGVnJzonXFx1MjJEQScsJ2xFZyc6J1xcdTJBOEInLCdsZXEnOidcXHUyMjY0JywnbGVxcSc6J1xcdTIyNjYnLCdsZXFzbGFudCc6J1xcdTJBN0QnLCdsZXMnOidcXHUyQTdEJywnbGVzY2MnOidcXHUyQUE4JywnbGVzZG90JzonXFx1MkE3RicsJ2xlc2RvdG8nOidcXHUyQTgxJywnbGVzZG90b3InOidcXHUyQTgzJywnbGVzZyc6J1xcdTIyREFcXHVGRTAwJywnbGVzZ2VzJzonXFx1MkE5MycsJ2xlc3NhcHByb3gnOidcXHUyQTg1JywnbGVzc2RvdCc6J1xcdTIyRDYnLCdsZXNzZXFndHInOidcXHUyMkRBJywnbGVzc2VxcWd0cic6J1xcdTJBOEInLCdMZXNzRXF1YWxHcmVhdGVyJzonXFx1MjJEQScsJ0xlc3NGdWxsRXF1YWwnOidcXHUyMjY2JywnTGVzc0dyZWF0ZXInOidcXHUyMjc2JywnbGVzc2d0cic6J1xcdTIyNzYnLCdMZXNzTGVzcyc6J1xcdTJBQTEnLCdsZXNzc2ltJzonXFx1MjI3MicsJ0xlc3NTbGFudEVxdWFsJzonXFx1MkE3RCcsJ0xlc3NUaWxkZSc6J1xcdTIyNzInLCdsZmlzaHQnOidcXHUyOTdDJywnbGZsb29yJzonXFx1MjMwQScsJ2xmcic6J1xcdUQ4MzVcXHVERDI5JywnTGZyJzonXFx1RDgzNVxcdUREMEYnLCdsZyc6J1xcdTIyNzYnLCdsZ0UnOidcXHUyQTkxJywnbEhhcic6J1xcdTI5NjInLCdsaGFyZCc6J1xcdTIxQkQnLCdsaGFydSc6J1xcdTIxQkMnLCdsaGFydWwnOidcXHUyOTZBJywnbGhibGsnOidcXHUyNTg0JywnbGpjeSc6J1xcdTA0NTknLCdMSmN5JzonXFx1MDQwOScsJ2xsJzonXFx1MjI2QScsJ0xsJzonXFx1MjJEOCcsJ2xsYXJyJzonXFx1MjFDNycsJ2xsY29ybmVyJzonXFx1MjMxRScsJ0xsZWZ0YXJyb3cnOidcXHUyMURBJywnbGxoYXJkJzonXFx1Mjk2QicsJ2xsdHJpJzonXFx1MjVGQScsJ2xtaWRvdCc6J1xcdTAxNDAnLCdMbWlkb3QnOidcXHUwMTNGJywnbG1vdXN0JzonXFx1MjNCMCcsJ2xtb3VzdGFjaGUnOidcXHUyM0IwJywnbG5hcCc6J1xcdTJBODknLCdsbmFwcHJveCc6J1xcdTJBODknLCdsbmUnOidcXHUyQTg3JywnbG5FJzonXFx1MjI2OCcsJ2xuZXEnOidcXHUyQTg3JywnbG5lcXEnOidcXHUyMjY4JywnbG5zaW0nOidcXHUyMkU2JywnbG9hbmcnOidcXHUyN0VDJywnbG9hcnInOidcXHUyMUZEJywnbG9icmsnOidcXHUyN0U2JywnbG9uZ2xlZnRhcnJvdyc6J1xcdTI3RjUnLCdMb25nbGVmdGFycm93JzonXFx1MjdGOCcsJ0xvbmdMZWZ0QXJyb3cnOidcXHUyN0Y1JywnbG9uZ2xlZnRyaWdodGFycm93JzonXFx1MjdGNycsJ0xvbmdsZWZ0cmlnaHRhcnJvdyc6J1xcdTI3RkEnLCdMb25nTGVmdFJpZ2h0QXJyb3cnOidcXHUyN0Y3JywnbG9uZ21hcHN0byc6J1xcdTI3RkMnLCdsb25ncmlnaHRhcnJvdyc6J1xcdTI3RjYnLCdMb25ncmlnaHRhcnJvdyc6J1xcdTI3RjknLCdMb25nUmlnaHRBcnJvdyc6J1xcdTI3RjYnLCdsb29wYXJyb3dsZWZ0JzonXFx1MjFBQicsJ2xvb3BhcnJvd3JpZ2h0JzonXFx1MjFBQycsJ2xvcGFyJzonXFx1Mjk4NScsJ2xvcGYnOidcXHVEODM1XFx1REQ1RCcsJ0xvcGYnOidcXHVEODM1XFx1REQ0MycsJ2xvcGx1cyc6J1xcdTJBMkQnLCdsb3RpbWVzJzonXFx1MkEzNCcsJ2xvd2FzdCc6J1xcdTIyMTcnLCdsb3diYXInOidfJywnTG93ZXJMZWZ0QXJyb3cnOidcXHUyMTk5JywnTG93ZXJSaWdodEFycm93JzonXFx1MjE5OCcsJ2xveic6J1xcdTI1Q0EnLCdsb3plbmdlJzonXFx1MjVDQScsJ2xvemYnOidcXHUyOUVCJywnbHBhcic6JygnLCdscGFybHQnOidcXHUyOTkzJywnbHJhcnInOidcXHUyMUM2JywnbHJjb3JuZXInOidcXHUyMzFGJywnbHJoYXInOidcXHUyMUNCJywnbHJoYXJkJzonXFx1Mjk2RCcsJ2xybSc6J1xcdTIwMEUnLCdscnRyaSc6J1xcdTIyQkYnLCdsc2FxdW8nOidcXHUyMDM5JywnbHNjcic6J1xcdUQ4MzVcXHVEQ0MxJywnTHNjcic6J1xcdTIxMTInLCdsc2gnOidcXHUyMUIwJywnTHNoJzonXFx1MjFCMCcsJ2xzaW0nOidcXHUyMjcyJywnbHNpbWUnOidcXHUyQThEJywnbHNpbWcnOidcXHUyQThGJywnbHNxYic6J1snLCdsc3F1byc6J1xcdTIwMTgnLCdsc3F1b3InOidcXHUyMDFBJywnbHN0cm9rJzonXFx1MDE0MicsJ0xzdHJvayc6J1xcdTAxNDEnLCdsdCc6JzwnLCdMdCc6J1xcdTIyNkEnLCdMVCc6JzwnLCdsdGNjJzonXFx1MkFBNicsJ2x0Y2lyJzonXFx1MkE3OScsJ2x0ZG90JzonXFx1MjJENicsJ2x0aHJlZSc6J1xcdTIyQ0InLCdsdGltZXMnOidcXHUyMkM5JywnbHRsYXJyJzonXFx1Mjk3NicsJ2x0cXVlc3QnOidcXHUyQTdCJywnbHRyaSc6J1xcdTI1QzMnLCdsdHJpZSc6J1xcdTIyQjQnLCdsdHJpZic6J1xcdTI1QzInLCdsdHJQYXInOidcXHUyOTk2JywnbHVyZHNoYXInOidcXHUyOTRBJywnbHVydWhhcic6J1xcdTI5NjYnLCdsdmVydG5lcXEnOidcXHUyMjY4XFx1RkUwMCcsJ2x2bkUnOidcXHUyMjY4XFx1RkUwMCcsJ21hY3InOidcXHhBRicsJ21hbGUnOidcXHUyNjQyJywnbWFsdCc6J1xcdTI3MjAnLCdtYWx0ZXNlJzonXFx1MjcyMCcsJ21hcCc6J1xcdTIxQTYnLCdNYXAnOidcXHUyOTA1JywnbWFwc3RvJzonXFx1MjFBNicsJ21hcHN0b2Rvd24nOidcXHUyMUE3JywnbWFwc3RvbGVmdCc6J1xcdTIxQTQnLCdtYXBzdG91cCc6J1xcdTIxQTUnLCdtYXJrZXInOidcXHUyNUFFJywnbWNvbW1hJzonXFx1MkEyOScsJ21jeSc6J1xcdTA0M0MnLCdNY3knOidcXHUwNDFDJywnbWRhc2gnOidcXHUyMDE0JywnbUREb3QnOidcXHUyMjNBJywnbWVhc3VyZWRhbmdsZSc6J1xcdTIyMjEnLCdNZWRpdW1TcGFjZSc6J1xcdTIwNUYnLCdNZWxsaW50cmYnOidcXHUyMTMzJywnbWZyJzonXFx1RDgzNVxcdUREMkEnLCdNZnInOidcXHVEODM1XFx1REQxMCcsJ21obyc6J1xcdTIxMjcnLCdtaWNybyc6J1xceEI1JywnbWlkJzonXFx1MjIyMycsJ21pZGFzdCc6JyonLCdtaWRjaXInOidcXHUyQUYwJywnbWlkZG90JzonXFx4QjcnLCdtaW51cyc6J1xcdTIyMTInLCdtaW51c2InOidcXHUyMjlGJywnbWludXNkJzonXFx1MjIzOCcsJ21pbnVzZHUnOidcXHUyQTJBJywnTWludXNQbHVzJzonXFx1MjIxMycsJ21sY3AnOidcXHUyQURCJywnbWxkcic6J1xcdTIwMjYnLCdtbnBsdXMnOidcXHUyMjEzJywnbW9kZWxzJzonXFx1MjJBNycsJ21vcGYnOidcXHVEODM1XFx1REQ1RScsJ01vcGYnOidcXHVEODM1XFx1REQ0NCcsJ21wJzonXFx1MjIxMycsJ21zY3InOidcXHVEODM1XFx1RENDMicsJ01zY3InOidcXHUyMTMzJywnbXN0cG9zJzonXFx1MjIzRScsJ211JzonXFx1MDNCQycsJ011JzonXFx1MDM5QycsJ211bHRpbWFwJzonXFx1MjJCOCcsJ211bWFwJzonXFx1MjJCOCcsJ25hYmxhJzonXFx1MjIwNycsJ25hY3V0ZSc6J1xcdTAxNDQnLCdOYWN1dGUnOidcXHUwMTQzJywnbmFuZyc6J1xcdTIyMjBcXHUyMEQyJywnbmFwJzonXFx1MjI0OScsJ25hcEUnOidcXHUyQTcwXFx1MDMzOCcsJ25hcGlkJzonXFx1MjI0QlxcdTAzMzgnLCduYXBvcyc6J1xcdTAxNDknLCduYXBwcm94JzonXFx1MjI0OScsJ25hdHVyJzonXFx1MjY2RScsJ25hdHVyYWwnOidcXHUyNjZFJywnbmF0dXJhbHMnOidcXHUyMTE1JywnbmJzcCc6J1xceEEwJywnbmJ1bXAnOidcXHUyMjRFXFx1MDMzOCcsJ25idW1wZSc6J1xcdTIyNEZcXHUwMzM4JywnbmNhcCc6J1xcdTJBNDMnLCduY2Fyb24nOidcXHUwMTQ4JywnTmNhcm9uJzonXFx1MDE0NycsJ25jZWRpbCc6J1xcdTAxNDYnLCdOY2VkaWwnOidcXHUwMTQ1JywnbmNvbmcnOidcXHUyMjQ3JywnbmNvbmdkb3QnOidcXHUyQTZEXFx1MDMzOCcsJ25jdXAnOidcXHUyQTQyJywnbmN5JzonXFx1MDQzRCcsJ05jeSc6J1xcdTA0MUQnLCduZGFzaCc6J1xcdTIwMTMnLCduZSc6J1xcdTIyNjAnLCduZWFyaGsnOidcXHUyOTI0JywnbmVhcnInOidcXHUyMTk3JywnbmVBcnInOidcXHUyMUQ3JywnbmVhcnJvdyc6J1xcdTIxOTcnLCduZWRvdCc6J1xcdTIyNTBcXHUwMzM4JywnTmVnYXRpdmVNZWRpdW1TcGFjZSc6J1xcdTIwMEInLCdOZWdhdGl2ZVRoaWNrU3BhY2UnOidcXHUyMDBCJywnTmVnYXRpdmVUaGluU3BhY2UnOidcXHUyMDBCJywnTmVnYXRpdmVWZXJ5VGhpblNwYWNlJzonXFx1MjAwQicsJ25lcXVpdic6J1xcdTIyNjInLCduZXNlYXInOidcXHUyOTI4JywnbmVzaW0nOidcXHUyMjQyXFx1MDMzOCcsJ05lc3RlZEdyZWF0ZXJHcmVhdGVyJzonXFx1MjI2QicsJ05lc3RlZExlc3NMZXNzJzonXFx1MjI2QScsJ05ld0xpbmUnOidcXG4nLCduZXhpc3QnOidcXHUyMjA0JywnbmV4aXN0cyc6J1xcdTIyMDQnLCduZnInOidcXHVEODM1XFx1REQyQicsJ05mcic6J1xcdUQ4MzVcXHVERDExJywnbmdlJzonXFx1MjI3MScsJ25nRSc6J1xcdTIyNjdcXHUwMzM4JywnbmdlcSc6J1xcdTIyNzEnLCduZ2VxcSc6J1xcdTIyNjdcXHUwMzM4JywnbmdlcXNsYW50JzonXFx1MkE3RVxcdTAzMzgnLCduZ2VzJzonXFx1MkE3RVxcdTAzMzgnLCduR2cnOidcXHUyMkQ5XFx1MDMzOCcsJ25nc2ltJzonXFx1MjI3NScsJ25ndCc6J1xcdTIyNkYnLCduR3QnOidcXHUyMjZCXFx1MjBEMicsJ25ndHInOidcXHUyMjZGJywnbkd0dic6J1xcdTIyNkJcXHUwMzM4JywnbmhhcnInOidcXHUyMUFFJywnbmhBcnInOidcXHUyMUNFJywnbmhwYXInOidcXHUyQUYyJywnbmknOidcXHUyMjBCJywnbmlzJzonXFx1MjJGQycsJ25pc2QnOidcXHUyMkZBJywnbml2JzonXFx1MjIwQicsJ25qY3knOidcXHUwNDVBJywnTkpjeSc6J1xcdTA0MEEnLCdubGFycic6J1xcdTIxOUEnLCdubEFycic6J1xcdTIxQ0QnLCdubGRyJzonXFx1MjAyNScsJ25sZSc6J1xcdTIyNzAnLCdubEUnOidcXHUyMjY2XFx1MDMzOCcsJ25sZWZ0YXJyb3cnOidcXHUyMTlBJywnbkxlZnRhcnJvdyc6J1xcdTIxQ0QnLCdubGVmdHJpZ2h0YXJyb3cnOidcXHUyMUFFJywnbkxlZnRyaWdodGFycm93JzonXFx1MjFDRScsJ25sZXEnOidcXHUyMjcwJywnbmxlcXEnOidcXHUyMjY2XFx1MDMzOCcsJ25sZXFzbGFudCc6J1xcdTJBN0RcXHUwMzM4Jywnbmxlcyc6J1xcdTJBN0RcXHUwMzM4Jywnbmxlc3MnOidcXHUyMjZFJywnbkxsJzonXFx1MjJEOFxcdTAzMzgnLCdubHNpbSc6J1xcdTIyNzQnLCdubHQnOidcXHUyMjZFJywnbkx0JzonXFx1MjI2QVxcdTIwRDInLCdubHRyaSc6J1xcdTIyRUEnLCdubHRyaWUnOidcXHUyMkVDJywnbkx0dic6J1xcdTIyNkFcXHUwMzM4Jywnbm1pZCc6J1xcdTIyMjQnLCdOb0JyZWFrJzonXFx1MjA2MCcsJ05vbkJyZWFraW5nU3BhY2UnOidcXHhBMCcsJ25vcGYnOidcXHVEODM1XFx1REQ1RicsJ05vcGYnOidcXHUyMTE1Jywnbm90JzonXFx4QUMnLCdOb3QnOidcXHUyQUVDJywnTm90Q29uZ3J1ZW50JzonXFx1MjI2MicsJ05vdEN1cENhcCc6J1xcdTIyNkQnLCdOb3REb3VibGVWZXJ0aWNhbEJhcic6J1xcdTIyMjYnLCdOb3RFbGVtZW50JzonXFx1MjIwOScsJ05vdEVxdWFsJzonXFx1MjI2MCcsJ05vdEVxdWFsVGlsZGUnOidcXHUyMjQyXFx1MDMzOCcsJ05vdEV4aXN0cyc6J1xcdTIyMDQnLCdOb3RHcmVhdGVyJzonXFx1MjI2RicsJ05vdEdyZWF0ZXJFcXVhbCc6J1xcdTIyNzEnLCdOb3RHcmVhdGVyRnVsbEVxdWFsJzonXFx1MjI2N1xcdTAzMzgnLCdOb3RHcmVhdGVyR3JlYXRlcic6J1xcdTIyNkJcXHUwMzM4JywnTm90R3JlYXRlckxlc3MnOidcXHUyMjc5JywnTm90R3JlYXRlclNsYW50RXF1YWwnOidcXHUyQTdFXFx1MDMzOCcsJ05vdEdyZWF0ZXJUaWxkZSc6J1xcdTIyNzUnLCdOb3RIdW1wRG93bkh1bXAnOidcXHUyMjRFXFx1MDMzOCcsJ05vdEh1bXBFcXVhbCc6J1xcdTIyNEZcXHUwMzM4Jywnbm90aW4nOidcXHUyMjA5Jywnbm90aW5kb3QnOidcXHUyMkY1XFx1MDMzOCcsJ25vdGluRSc6J1xcdTIyRjlcXHUwMzM4Jywnbm90aW52YSc6J1xcdTIyMDknLCdub3RpbnZiJzonXFx1MjJGNycsJ25vdGludmMnOidcXHUyMkY2JywnTm90TGVmdFRyaWFuZ2xlJzonXFx1MjJFQScsJ05vdExlZnRUcmlhbmdsZUJhcic6J1xcdTI5Q0ZcXHUwMzM4JywnTm90TGVmdFRyaWFuZ2xlRXF1YWwnOidcXHUyMkVDJywnTm90TGVzcyc6J1xcdTIyNkUnLCdOb3RMZXNzRXF1YWwnOidcXHUyMjcwJywnTm90TGVzc0dyZWF0ZXInOidcXHUyMjc4JywnTm90TGVzc0xlc3MnOidcXHUyMjZBXFx1MDMzOCcsJ05vdExlc3NTbGFudEVxdWFsJzonXFx1MkE3RFxcdTAzMzgnLCdOb3RMZXNzVGlsZGUnOidcXHUyMjc0JywnTm90TmVzdGVkR3JlYXRlckdyZWF0ZXInOidcXHUyQUEyXFx1MDMzOCcsJ05vdE5lc3RlZExlc3NMZXNzJzonXFx1MkFBMVxcdTAzMzgnLCdub3RuaSc6J1xcdTIyMEMnLCdub3RuaXZhJzonXFx1MjIwQycsJ25vdG5pdmInOidcXHUyMkZFJywnbm90bml2Yyc6J1xcdTIyRkQnLCdOb3RQcmVjZWRlcyc6J1xcdTIyODAnLCdOb3RQcmVjZWRlc0VxdWFsJzonXFx1MkFBRlxcdTAzMzgnLCdOb3RQcmVjZWRlc1NsYW50RXF1YWwnOidcXHUyMkUwJywnTm90UmV2ZXJzZUVsZW1lbnQnOidcXHUyMjBDJywnTm90UmlnaHRUcmlhbmdsZSc6J1xcdTIyRUInLCdOb3RSaWdodFRyaWFuZ2xlQmFyJzonXFx1MjlEMFxcdTAzMzgnLCdOb3RSaWdodFRyaWFuZ2xlRXF1YWwnOidcXHUyMkVEJywnTm90U3F1YXJlU3Vic2V0JzonXFx1MjI4RlxcdTAzMzgnLCdOb3RTcXVhcmVTdWJzZXRFcXVhbCc6J1xcdTIyRTInLCdOb3RTcXVhcmVTdXBlcnNldCc6J1xcdTIyOTBcXHUwMzM4JywnTm90U3F1YXJlU3VwZXJzZXRFcXVhbCc6J1xcdTIyRTMnLCdOb3RTdWJzZXQnOidcXHUyMjgyXFx1MjBEMicsJ05vdFN1YnNldEVxdWFsJzonXFx1MjI4OCcsJ05vdFN1Y2NlZWRzJzonXFx1MjI4MScsJ05vdFN1Y2NlZWRzRXF1YWwnOidcXHUyQUIwXFx1MDMzOCcsJ05vdFN1Y2NlZWRzU2xhbnRFcXVhbCc6J1xcdTIyRTEnLCdOb3RTdWNjZWVkc1RpbGRlJzonXFx1MjI3RlxcdTAzMzgnLCdOb3RTdXBlcnNldCc6J1xcdTIyODNcXHUyMEQyJywnTm90U3VwZXJzZXRFcXVhbCc6J1xcdTIyODknLCdOb3RUaWxkZSc6J1xcdTIyNDEnLCdOb3RUaWxkZUVxdWFsJzonXFx1MjI0NCcsJ05vdFRpbGRlRnVsbEVxdWFsJzonXFx1MjI0NycsJ05vdFRpbGRlVGlsZGUnOidcXHUyMjQ5JywnTm90VmVydGljYWxCYXInOidcXHUyMjI0JywnbnBhcic6J1xcdTIyMjYnLCducGFyYWxsZWwnOidcXHUyMjI2JywnbnBhcnNsJzonXFx1MkFGRFxcdTIwRTUnLCducGFydCc6J1xcdTIyMDJcXHUwMzM4JywnbnBvbGludCc6J1xcdTJBMTQnLCducHInOidcXHUyMjgwJywnbnByY3VlJzonXFx1MjJFMCcsJ25wcmUnOidcXHUyQUFGXFx1MDMzOCcsJ25wcmVjJzonXFx1MjI4MCcsJ25wcmVjZXEnOidcXHUyQUFGXFx1MDMzOCcsJ25yYXJyJzonXFx1MjE5QicsJ25yQXJyJzonXFx1MjFDRicsJ25yYXJyYyc6J1xcdTI5MzNcXHUwMzM4JywnbnJhcnJ3JzonXFx1MjE5RFxcdTAzMzgnLCducmlnaHRhcnJvdyc6J1xcdTIxOUInLCduUmlnaHRhcnJvdyc6J1xcdTIxQ0YnLCducnRyaSc6J1xcdTIyRUInLCducnRyaWUnOidcXHUyMkVEJywnbnNjJzonXFx1MjI4MScsJ25zY2N1ZSc6J1xcdTIyRTEnLCduc2NlJzonXFx1MkFCMFxcdTAzMzgnLCduc2NyJzonXFx1RDgzNVxcdURDQzMnLCdOc2NyJzonXFx1RDgzNVxcdURDQTknLCduc2hvcnRtaWQnOidcXHUyMjI0JywnbnNob3J0cGFyYWxsZWwnOidcXHUyMjI2JywnbnNpbSc6J1xcdTIyNDEnLCduc2ltZSc6J1xcdTIyNDQnLCduc2ltZXEnOidcXHUyMjQ0JywnbnNtaWQnOidcXHUyMjI0JywnbnNwYXInOidcXHUyMjI2JywnbnNxc3ViZSc6J1xcdTIyRTInLCduc3FzdXBlJzonXFx1MjJFMycsJ25zdWInOidcXHUyMjg0JywnbnN1YmUnOidcXHUyMjg4JywnbnN1YkUnOidcXHUyQUM1XFx1MDMzOCcsJ25zdWJzZXQnOidcXHUyMjgyXFx1MjBEMicsJ25zdWJzZXRlcSc6J1xcdTIyODgnLCduc3Vic2V0ZXFxJzonXFx1MkFDNVxcdTAzMzgnLCduc3VjYyc6J1xcdTIyODEnLCduc3VjY2VxJzonXFx1MkFCMFxcdTAzMzgnLCduc3VwJzonXFx1MjI4NScsJ25zdXBlJzonXFx1MjI4OScsJ25zdXBFJzonXFx1MkFDNlxcdTAzMzgnLCduc3Vwc2V0JzonXFx1MjI4M1xcdTIwRDInLCduc3Vwc2V0ZXEnOidcXHUyMjg5JywnbnN1cHNldGVxcSc6J1xcdTJBQzZcXHUwMzM4JywnbnRnbCc6J1xcdTIyNzknLCdudGlsZGUnOidcXHhGMScsJ050aWxkZSc6J1xceEQxJywnbnRsZyc6J1xcdTIyNzgnLCdudHJpYW5nbGVsZWZ0JzonXFx1MjJFQScsJ250cmlhbmdsZWxlZnRlcSc6J1xcdTIyRUMnLCdudHJpYW5nbGVyaWdodCc6J1xcdTIyRUInLCdudHJpYW5nbGVyaWdodGVxJzonXFx1MjJFRCcsJ251JzonXFx1MDNCRCcsJ051JzonXFx1MDM5RCcsJ251bSc6JyMnLCdudW1lcm8nOidcXHUyMTE2JywnbnVtc3AnOidcXHUyMDA3JywnbnZhcCc6J1xcdTIyNERcXHUyMEQyJywnbnZkYXNoJzonXFx1MjJBQycsJ252RGFzaCc6J1xcdTIyQUQnLCduVmRhc2gnOidcXHUyMkFFJywnblZEYXNoJzonXFx1MjJBRicsJ252Z2UnOidcXHUyMjY1XFx1MjBEMicsJ252Z3QnOic+XFx1MjBEMicsJ252SGFycic6J1xcdTI5MDQnLCdudmluZmluJzonXFx1MjlERScsJ252bEFycic6J1xcdTI5MDInLCdudmxlJzonXFx1MjI2NFxcdTIwRDInLCdudmx0JzonPFxcdTIwRDInLCdudmx0cmllJzonXFx1MjJCNFxcdTIwRDInLCdudnJBcnInOidcXHUyOTAzJywnbnZydHJpZSc6J1xcdTIyQjVcXHUyMEQyJywnbnZzaW0nOidcXHUyMjNDXFx1MjBEMicsJ253YXJoayc6J1xcdTI5MjMnLCdud2Fycic6J1xcdTIxOTYnLCdud0Fycic6J1xcdTIxRDYnLCdud2Fycm93JzonXFx1MjE5NicsJ253bmVhcic6J1xcdTI5MjcnLCdvYWN1dGUnOidcXHhGMycsJ09hY3V0ZSc6J1xceEQzJywnb2FzdCc6J1xcdTIyOUInLCdvY2lyJzonXFx1MjI5QScsJ29jaXJjJzonXFx4RjQnLCdPY2lyYyc6J1xceEQ0Jywnb2N5JzonXFx1MDQzRScsJ09jeSc6J1xcdTA0MUUnLCdvZGFzaCc6J1xcdTIyOUQnLCdvZGJsYWMnOidcXHUwMTUxJywnT2RibGFjJzonXFx1MDE1MCcsJ29kaXYnOidcXHUyQTM4Jywnb2RvdCc6J1xcdTIyOTknLCdvZHNvbGQnOidcXHUyOUJDJywnb2VsaWcnOidcXHUwMTUzJywnT0VsaWcnOidcXHUwMTUyJywnb2ZjaXInOidcXHUyOUJGJywnb2ZyJzonXFx1RDgzNVxcdUREMkMnLCdPZnInOidcXHVEODM1XFx1REQxMicsJ29nb24nOidcXHUwMkRCJywnb2dyYXZlJzonXFx4RjInLCdPZ3JhdmUnOidcXHhEMicsJ29ndCc6J1xcdTI5QzEnLCdvaGJhcic6J1xcdTI5QjUnLCdvaG0nOidcXHUwM0E5Jywnb2ludCc6J1xcdTIyMkUnLCdvbGFycic6J1xcdTIxQkEnLCdvbGNpcic6J1xcdTI5QkUnLCdvbGNyb3NzJzonXFx1MjlCQicsJ29saW5lJzonXFx1MjAzRScsJ29sdCc6J1xcdTI5QzAnLCdvbWFjcic6J1xcdTAxNEQnLCdPbWFjcic6J1xcdTAxNEMnLCdvbWVnYSc6J1xcdTAzQzknLCdPbWVnYSc6J1xcdTAzQTknLCdvbWljcm9uJzonXFx1MDNCRicsJ09taWNyb24nOidcXHUwMzlGJywnb21pZCc6J1xcdTI5QjYnLCdvbWludXMnOidcXHUyMjk2Jywnb29wZic6J1xcdUQ4MzVcXHVERDYwJywnT29wZic6J1xcdUQ4MzVcXHVERDQ2Jywnb3Bhcic6J1xcdTI5QjcnLCdPcGVuQ3VybHlEb3VibGVRdW90ZSc6J1xcdTIwMUMnLCdPcGVuQ3VybHlRdW90ZSc6J1xcdTIwMTgnLCdvcGVycCc6J1xcdTI5QjknLCdvcGx1cyc6J1xcdTIyOTUnLCdvcic6J1xcdTIyMjgnLCdPcic6J1xcdTJBNTQnLCdvcmFycic6J1xcdTIxQkInLCdvcmQnOidcXHUyQTVEJywnb3JkZXInOidcXHUyMTM0Jywnb3JkZXJvZic6J1xcdTIxMzQnLCdvcmRmJzonXFx4QUEnLCdvcmRtJzonXFx4QkEnLCdvcmlnb2YnOidcXHUyMkI2Jywnb3Jvcic6J1xcdTJBNTYnLCdvcnNsb3BlJzonXFx1MkE1NycsJ29ydic6J1xcdTJBNUInLCdvUyc6J1xcdTI0QzgnLCdvc2NyJzonXFx1MjEzNCcsJ09zY3InOidcXHVEODM1XFx1RENBQScsJ29zbGFzaCc6J1xceEY4JywnT3NsYXNoJzonXFx4RDgnLCdvc29sJzonXFx1MjI5OCcsJ290aWxkZSc6J1xceEY1JywnT3RpbGRlJzonXFx4RDUnLCdvdGltZXMnOidcXHUyMjk3JywnT3RpbWVzJzonXFx1MkEzNycsJ290aW1lc2FzJzonXFx1MkEzNicsJ291bWwnOidcXHhGNicsJ091bWwnOidcXHhENicsJ292YmFyJzonXFx1MjMzRCcsJ092ZXJCYXInOidcXHUyMDNFJywnT3ZlckJyYWNlJzonXFx1MjNERScsJ092ZXJCcmFja2V0JzonXFx1MjNCNCcsJ092ZXJQYXJlbnRoZXNpcyc6J1xcdTIzREMnLCdwYXInOidcXHUyMjI1JywncGFyYSc6J1xceEI2JywncGFyYWxsZWwnOidcXHUyMjI1JywncGFyc2ltJzonXFx1MkFGMycsJ3BhcnNsJzonXFx1MkFGRCcsJ3BhcnQnOidcXHUyMjAyJywnUGFydGlhbEQnOidcXHUyMjAyJywncGN5JzonXFx1MDQzRicsJ1BjeSc6J1xcdTA0MUYnLCdwZXJjbnQnOiclJywncGVyaW9kJzonLicsJ3Blcm1pbCc6J1xcdTIwMzAnLCdwZXJwJzonXFx1MjJBNScsJ3BlcnRlbmsnOidcXHUyMDMxJywncGZyJzonXFx1RDgzNVxcdUREMkQnLCdQZnInOidcXHVEODM1XFx1REQxMycsJ3BoaSc6J1xcdTAzQzYnLCdQaGknOidcXHUwM0E2JywncGhpdic6J1xcdTAzRDUnLCdwaG1tYXQnOidcXHUyMTMzJywncGhvbmUnOidcXHUyNjBFJywncGknOidcXHUwM0MwJywnUGknOidcXHUwM0EwJywncGl0Y2hmb3JrJzonXFx1MjJENCcsJ3Bpdic6J1xcdTAzRDYnLCdwbGFuY2snOidcXHUyMTBGJywncGxhbmNraCc6J1xcdTIxMEUnLCdwbGFua3YnOidcXHUyMTBGJywncGx1cyc6JysnLCdwbHVzYWNpcic6J1xcdTJBMjMnLCdwbHVzYic6J1xcdTIyOUUnLCdwbHVzY2lyJzonXFx1MkEyMicsJ3BsdXNkbyc6J1xcdTIyMTQnLCdwbHVzZHUnOidcXHUyQTI1JywncGx1c2UnOidcXHUyQTcyJywnUGx1c01pbnVzJzonXFx4QjEnLCdwbHVzbW4nOidcXHhCMScsJ3BsdXNzaW0nOidcXHUyQTI2JywncGx1c3R3byc6J1xcdTJBMjcnLCdwbSc6J1xceEIxJywnUG9pbmNhcmVwbGFuZSc6J1xcdTIxMEMnLCdwb2ludGludCc6J1xcdTJBMTUnLCdwb3BmJzonXFx1RDgzNVxcdURENjEnLCdQb3BmJzonXFx1MjExOScsJ3BvdW5kJzonXFx4QTMnLCdwcic6J1xcdTIyN0EnLCdQcic6J1xcdTJBQkInLCdwcmFwJzonXFx1MkFCNycsJ3ByY3VlJzonXFx1MjI3QycsJ3ByZSc6J1xcdTJBQUYnLCdwckUnOidcXHUyQUIzJywncHJlYyc6J1xcdTIyN0EnLCdwcmVjYXBwcm94JzonXFx1MkFCNycsJ3ByZWNjdXJseWVxJzonXFx1MjI3QycsJ1ByZWNlZGVzJzonXFx1MjI3QScsJ1ByZWNlZGVzRXF1YWwnOidcXHUyQUFGJywnUHJlY2VkZXNTbGFudEVxdWFsJzonXFx1MjI3QycsJ1ByZWNlZGVzVGlsZGUnOidcXHUyMjdFJywncHJlY2VxJzonXFx1MkFBRicsJ3ByZWNuYXBwcm94JzonXFx1MkFCOScsJ3ByZWNuZXFxJzonXFx1MkFCNScsJ3ByZWNuc2ltJzonXFx1MjJFOCcsJ3ByZWNzaW0nOidcXHUyMjdFJywncHJpbWUnOidcXHUyMDMyJywnUHJpbWUnOidcXHUyMDMzJywncHJpbWVzJzonXFx1MjExOScsJ3BybmFwJzonXFx1MkFCOScsJ3BybkUnOidcXHUyQUI1JywncHJuc2ltJzonXFx1MjJFOCcsJ3Byb2QnOidcXHUyMjBGJywnUHJvZHVjdCc6J1xcdTIyMEYnLCdwcm9mYWxhcic6J1xcdTIzMkUnLCdwcm9mbGluZSc6J1xcdTIzMTInLCdwcm9mc3VyZic6J1xcdTIzMTMnLCdwcm9wJzonXFx1MjIxRCcsJ1Byb3BvcnRpb24nOidcXHUyMjM3JywnUHJvcG9ydGlvbmFsJzonXFx1MjIxRCcsJ3Byb3B0byc6J1xcdTIyMUQnLCdwcnNpbSc6J1xcdTIyN0UnLCdwcnVyZWwnOidcXHUyMkIwJywncHNjcic6J1xcdUQ4MzVcXHVEQ0M1JywnUHNjcic6J1xcdUQ4MzVcXHVEQ0FCJywncHNpJzonXFx1MDNDOCcsJ1BzaSc6J1xcdTAzQTgnLCdwdW5jc3AnOidcXHUyMDA4JywncWZyJzonXFx1RDgzNVxcdUREMkUnLCdRZnInOidcXHVEODM1XFx1REQxNCcsJ3FpbnQnOidcXHUyQTBDJywncW9wZic6J1xcdUQ4MzVcXHVERDYyJywnUW9wZic6J1xcdTIxMUEnLCdxcHJpbWUnOidcXHUyMDU3JywncXNjcic6J1xcdUQ4MzVcXHVEQ0M2JywnUXNjcic6J1xcdUQ4MzVcXHVEQ0FDJywncXVhdGVybmlvbnMnOidcXHUyMTBEJywncXVhdGludCc6J1xcdTJBMTYnLCdxdWVzdCc6Jz8nLCdxdWVzdGVxJzonXFx1MjI1RicsJ3F1b3QnOidcIicsJ1FVT1QnOidcIicsJ3JBYXJyJzonXFx1MjFEQicsJ3JhY2UnOidcXHUyMjNEXFx1MDMzMScsJ3JhY3V0ZSc6J1xcdTAxNTUnLCdSYWN1dGUnOidcXHUwMTU0JywncmFkaWMnOidcXHUyMjFBJywncmFlbXB0eXYnOidcXHUyOUIzJywncmFuZyc6J1xcdTI3RTknLCdSYW5nJzonXFx1MjdFQicsJ3JhbmdkJzonXFx1Mjk5MicsJ3JhbmdlJzonXFx1MjlBNScsJ3JhbmdsZSc6J1xcdTI3RTknLCdyYXF1byc6J1xceEJCJywncmFycic6J1xcdTIxOTInLCdyQXJyJzonXFx1MjFEMicsJ1JhcnInOidcXHUyMUEwJywncmFycmFwJzonXFx1Mjk3NScsJ3JhcnJiJzonXFx1MjFFNScsJ3JhcnJiZnMnOidcXHUyOTIwJywncmFycmMnOidcXHUyOTMzJywncmFycmZzJzonXFx1MjkxRScsJ3JhcnJoayc6J1xcdTIxQUEnLCdyYXJybHAnOidcXHUyMUFDJywncmFycnBsJzonXFx1Mjk0NScsJ3JhcnJzaW0nOidcXHUyOTc0JywncmFycnRsJzonXFx1MjFBMycsJ1JhcnJ0bCc6J1xcdTI5MTYnLCdyYXJydyc6J1xcdTIxOUQnLCdyYXRhaWwnOidcXHUyOTFBJywnckF0YWlsJzonXFx1MjkxQycsJ3JhdGlvJzonXFx1MjIzNicsJ3JhdGlvbmFscyc6J1xcdTIxMUEnLCdyYmFycic6J1xcdTI5MEQnLCdyQmFycic6J1xcdTI5MEYnLCdSQmFycic6J1xcdTI5MTAnLCdyYmJyayc6J1xcdTI3NzMnLCdyYnJhY2UnOid9JywncmJyYWNrJzonXScsJ3JicmtlJzonXFx1Mjk4QycsJ3JicmtzbGQnOidcXHUyOThFJywncmJya3NsdSc6J1xcdTI5OTAnLCdyY2Fyb24nOidcXHUwMTU5JywnUmNhcm9uJzonXFx1MDE1OCcsJ3JjZWRpbCc6J1xcdTAxNTcnLCdSY2VkaWwnOidcXHUwMTU2JywncmNlaWwnOidcXHUyMzA5JywncmN1Yic6J30nLCdyY3knOidcXHUwNDQwJywnUmN5JzonXFx1MDQyMCcsJ3JkY2EnOidcXHUyOTM3JywncmRsZGhhcic6J1xcdTI5NjknLCdyZHF1byc6J1xcdTIwMUQnLCdyZHF1b3InOidcXHUyMDFEJywncmRzaCc6J1xcdTIxQjMnLCdSZSc6J1xcdTIxMUMnLCdyZWFsJzonXFx1MjExQycsJ3JlYWxpbmUnOidcXHUyMTFCJywncmVhbHBhcnQnOidcXHUyMTFDJywncmVhbHMnOidcXHUyMTFEJywncmVjdCc6J1xcdTI1QUQnLCdyZWcnOidcXHhBRScsJ1JFRyc6J1xceEFFJywnUmV2ZXJzZUVsZW1lbnQnOidcXHUyMjBCJywnUmV2ZXJzZUVxdWlsaWJyaXVtJzonXFx1MjFDQicsJ1JldmVyc2VVcEVxdWlsaWJyaXVtJzonXFx1Mjk2RicsJ3JmaXNodCc6J1xcdTI5N0QnLCdyZmxvb3InOidcXHUyMzBCJywncmZyJzonXFx1RDgzNVxcdUREMkYnLCdSZnInOidcXHUyMTFDJywnckhhcic6J1xcdTI5NjQnLCdyaGFyZCc6J1xcdTIxQzEnLCdyaGFydSc6J1xcdTIxQzAnLCdyaGFydWwnOidcXHUyOTZDJywncmhvJzonXFx1MDNDMScsJ1Jobyc6J1xcdTAzQTEnLCdyaG92JzonXFx1MDNGMScsJ1JpZ2h0QW5nbGVCcmFja2V0JzonXFx1MjdFOScsJ3JpZ2h0YXJyb3cnOidcXHUyMTkyJywnUmlnaHRhcnJvdyc6J1xcdTIxRDInLCdSaWdodEFycm93JzonXFx1MjE5MicsJ1JpZ2h0QXJyb3dCYXInOidcXHUyMUU1JywnUmlnaHRBcnJvd0xlZnRBcnJvdyc6J1xcdTIxQzQnLCdyaWdodGFycm93dGFpbCc6J1xcdTIxQTMnLCdSaWdodENlaWxpbmcnOidcXHUyMzA5JywnUmlnaHREb3VibGVCcmFja2V0JzonXFx1MjdFNycsJ1JpZ2h0RG93blRlZVZlY3Rvcic6J1xcdTI5NUQnLCdSaWdodERvd25WZWN0b3InOidcXHUyMUMyJywnUmlnaHREb3duVmVjdG9yQmFyJzonXFx1Mjk1NScsJ1JpZ2h0Rmxvb3InOidcXHUyMzBCJywncmlnaHRoYXJwb29uZG93bic6J1xcdTIxQzEnLCdyaWdodGhhcnBvb251cCc6J1xcdTIxQzAnLCdyaWdodGxlZnRhcnJvd3MnOidcXHUyMUM0JywncmlnaHRsZWZ0aGFycG9vbnMnOidcXHUyMUNDJywncmlnaHRyaWdodGFycm93cyc6J1xcdTIxQzknLCdyaWdodHNxdWlnYXJyb3cnOidcXHUyMTlEJywnUmlnaHRUZWUnOidcXHUyMkEyJywnUmlnaHRUZWVBcnJvdyc6J1xcdTIxQTYnLCdSaWdodFRlZVZlY3Rvcic6J1xcdTI5NUInLCdyaWdodHRocmVldGltZXMnOidcXHUyMkNDJywnUmlnaHRUcmlhbmdsZSc6J1xcdTIyQjMnLCdSaWdodFRyaWFuZ2xlQmFyJzonXFx1MjlEMCcsJ1JpZ2h0VHJpYW5nbGVFcXVhbCc6J1xcdTIyQjUnLCdSaWdodFVwRG93blZlY3Rvcic6J1xcdTI5NEYnLCdSaWdodFVwVGVlVmVjdG9yJzonXFx1Mjk1QycsJ1JpZ2h0VXBWZWN0b3InOidcXHUyMUJFJywnUmlnaHRVcFZlY3RvckJhcic6J1xcdTI5NTQnLCdSaWdodFZlY3Rvcic6J1xcdTIxQzAnLCdSaWdodFZlY3RvckJhcic6J1xcdTI5NTMnLCdyaW5nJzonXFx1MDJEQScsJ3Jpc2luZ2RvdHNlcSc6J1xcdTIyNTMnLCdybGFycic6J1xcdTIxQzQnLCdybGhhcic6J1xcdTIxQ0MnLCdybG0nOidcXHUyMDBGJywncm1vdXN0JzonXFx1MjNCMScsJ3Jtb3VzdGFjaGUnOidcXHUyM0IxJywncm5taWQnOidcXHUyQUVFJywncm9hbmcnOidcXHUyN0VEJywncm9hcnInOidcXHUyMUZFJywncm9icmsnOidcXHUyN0U3Jywncm9wYXInOidcXHUyOTg2Jywncm9wZic6J1xcdUQ4MzVcXHVERDYzJywnUm9wZic6J1xcdTIxMUQnLCdyb3BsdXMnOidcXHUyQTJFJywncm90aW1lcyc6J1xcdTJBMzUnLCdSb3VuZEltcGxpZXMnOidcXHUyOTcwJywncnBhcic6JyknLCdycGFyZ3QnOidcXHUyOTk0JywncnBwb2xpbnQnOidcXHUyQTEyJywncnJhcnInOidcXHUyMUM5JywnUnJpZ2h0YXJyb3cnOidcXHUyMURCJywncnNhcXVvJzonXFx1MjAzQScsJ3JzY3InOidcXHVEODM1XFx1RENDNycsJ1JzY3InOidcXHUyMTFCJywncnNoJzonXFx1MjFCMScsJ1JzaCc6J1xcdTIxQjEnLCdyc3FiJzonXScsJ3JzcXVvJzonXFx1MjAxOScsJ3JzcXVvcic6J1xcdTIwMTknLCdydGhyZWUnOidcXHUyMkNDJywncnRpbWVzJzonXFx1MjJDQScsJ3J0cmknOidcXHUyNUI5JywncnRyaWUnOidcXHUyMkI1JywncnRyaWYnOidcXHUyNUI4JywncnRyaWx0cmknOidcXHUyOUNFJywnUnVsZURlbGF5ZWQnOidcXHUyOUY0JywncnVsdWhhcic6J1xcdTI5NjgnLCdyeCc6J1xcdTIxMUUnLCdzYWN1dGUnOidcXHUwMTVCJywnU2FjdXRlJzonXFx1MDE1QScsJ3NicXVvJzonXFx1MjAxQScsJ3NjJzonXFx1MjI3QicsJ1NjJzonXFx1MkFCQycsJ3NjYXAnOidcXHUyQUI4Jywnc2Nhcm9uJzonXFx1MDE2MScsJ1NjYXJvbic6J1xcdTAxNjAnLCdzY2N1ZSc6J1xcdTIyN0QnLCdzY2UnOidcXHUyQUIwJywnc2NFJzonXFx1MkFCNCcsJ3NjZWRpbCc6J1xcdTAxNUYnLCdTY2VkaWwnOidcXHUwMTVFJywnc2NpcmMnOidcXHUwMTVEJywnU2NpcmMnOidcXHUwMTVDJywnc2NuYXAnOidcXHUyQUJBJywnc2NuRSc6J1xcdTJBQjYnLCdzY25zaW0nOidcXHUyMkU5Jywnc2Nwb2xpbnQnOidcXHUyQTEzJywnc2NzaW0nOidcXHUyMjdGJywnc2N5JzonXFx1MDQ0MScsJ1NjeSc6J1xcdTA0MjEnLCdzZG90JzonXFx1MjJDNScsJ3Nkb3RiJzonXFx1MjJBMScsJ3Nkb3RlJzonXFx1MkE2NicsJ3NlYXJoayc6J1xcdTI5MjUnLCdzZWFycic6J1xcdTIxOTgnLCdzZUFycic6J1xcdTIxRDgnLCdzZWFycm93JzonXFx1MjE5OCcsJ3NlY3QnOidcXHhBNycsJ3NlbWknOic7Jywnc2Vzd2FyJzonXFx1MjkyOScsJ3NldG1pbnVzJzonXFx1MjIxNicsJ3NldG1uJzonXFx1MjIxNicsJ3NleHQnOidcXHUyNzM2Jywnc2ZyJzonXFx1RDgzNVxcdUREMzAnLCdTZnInOidcXHVEODM1XFx1REQxNicsJ3Nmcm93bic6J1xcdTIzMjInLCdzaGFycCc6J1xcdTI2NkYnLCdzaGNoY3knOidcXHUwNDQ5JywnU0hDSGN5JzonXFx1MDQyOScsJ3NoY3knOidcXHUwNDQ4JywnU0hjeSc6J1xcdTA0MjgnLCdTaG9ydERvd25BcnJvdyc6J1xcdTIxOTMnLCdTaG9ydExlZnRBcnJvdyc6J1xcdTIxOTAnLCdzaG9ydG1pZCc6J1xcdTIyMjMnLCdzaG9ydHBhcmFsbGVsJzonXFx1MjIyNScsJ1Nob3J0UmlnaHRBcnJvdyc6J1xcdTIxOTInLCdTaG9ydFVwQXJyb3cnOidcXHUyMTkxJywnc2h5JzonXFx4QUQnLCdzaWdtYSc6J1xcdTAzQzMnLCdTaWdtYSc6J1xcdTAzQTMnLCdzaWdtYWYnOidcXHUwM0MyJywnc2lnbWF2JzonXFx1MDNDMicsJ3NpbSc6J1xcdTIyM0MnLCdzaW1kb3QnOidcXHUyQTZBJywnc2ltZSc6J1xcdTIyNDMnLCdzaW1lcSc6J1xcdTIyNDMnLCdzaW1nJzonXFx1MkE5RScsJ3NpbWdFJzonXFx1MkFBMCcsJ3NpbWwnOidcXHUyQTlEJywnc2ltbEUnOidcXHUyQTlGJywnc2ltbmUnOidcXHUyMjQ2Jywnc2ltcGx1cyc6J1xcdTJBMjQnLCdzaW1yYXJyJzonXFx1Mjk3MicsJ3NsYXJyJzonXFx1MjE5MCcsJ1NtYWxsQ2lyY2xlJzonXFx1MjIxOCcsJ3NtYWxsc2V0bWludXMnOidcXHUyMjE2Jywnc21hc2hwJzonXFx1MkEzMycsJ3NtZXBhcnNsJzonXFx1MjlFNCcsJ3NtaWQnOidcXHUyMjIzJywnc21pbGUnOidcXHUyMzIzJywnc210JzonXFx1MkFBQScsJ3NtdGUnOidcXHUyQUFDJywnc210ZXMnOidcXHUyQUFDXFx1RkUwMCcsJ3NvZnRjeSc6J1xcdTA0NEMnLCdTT0ZUY3knOidcXHUwNDJDJywnc29sJzonLycsJ3NvbGInOidcXHUyOUM0Jywnc29sYmFyJzonXFx1MjMzRicsJ3NvcGYnOidcXHVEODM1XFx1REQ2NCcsJ1NvcGYnOidcXHVEODM1XFx1REQ0QScsJ3NwYWRlcyc6J1xcdTI2NjAnLCdzcGFkZXN1aXQnOidcXHUyNjYwJywnc3Bhcic6J1xcdTIyMjUnLCdzcWNhcCc6J1xcdTIyOTMnLCdzcWNhcHMnOidcXHUyMjkzXFx1RkUwMCcsJ3NxY3VwJzonXFx1MjI5NCcsJ3NxY3Vwcyc6J1xcdTIyOTRcXHVGRTAwJywnU3FydCc6J1xcdTIyMUEnLCdzcXN1Yic6J1xcdTIyOEYnLCdzcXN1YmUnOidcXHUyMjkxJywnc3FzdWJzZXQnOidcXHUyMjhGJywnc3FzdWJzZXRlcSc6J1xcdTIyOTEnLCdzcXN1cCc6J1xcdTIyOTAnLCdzcXN1cGUnOidcXHUyMjkyJywnc3FzdXBzZXQnOidcXHUyMjkwJywnc3FzdXBzZXRlcSc6J1xcdTIyOTInLCdzcXUnOidcXHUyNUExJywnc3F1YXJlJzonXFx1MjVBMScsJ1NxdWFyZSc6J1xcdTI1QTEnLCdTcXVhcmVJbnRlcnNlY3Rpb24nOidcXHUyMjkzJywnU3F1YXJlU3Vic2V0JzonXFx1MjI4RicsJ1NxdWFyZVN1YnNldEVxdWFsJzonXFx1MjI5MScsJ1NxdWFyZVN1cGVyc2V0JzonXFx1MjI5MCcsJ1NxdWFyZVN1cGVyc2V0RXF1YWwnOidcXHUyMjkyJywnU3F1YXJlVW5pb24nOidcXHUyMjk0Jywnc3F1YXJmJzonXFx1MjVBQScsJ3NxdWYnOidcXHUyNUFBJywnc3JhcnInOidcXHUyMTkyJywnc3Njcic6J1xcdUQ4MzVcXHVEQ0M4JywnU3Njcic6J1xcdUQ4MzVcXHVEQ0FFJywnc3NldG1uJzonXFx1MjIxNicsJ3NzbWlsZSc6J1xcdTIzMjMnLCdzc3RhcmYnOidcXHUyMkM2Jywnc3Rhcic6J1xcdTI2MDYnLCdTdGFyJzonXFx1MjJDNicsJ3N0YXJmJzonXFx1MjYwNScsJ3N0cmFpZ2h0ZXBzaWxvbic6J1xcdTAzRjUnLCdzdHJhaWdodHBoaSc6J1xcdTAzRDUnLCdzdHJucyc6J1xceEFGJywnc3ViJzonXFx1MjI4MicsJ1N1Yic6J1xcdTIyRDAnLCdzdWJkb3QnOidcXHUyQUJEJywnc3ViZSc6J1xcdTIyODYnLCdzdWJFJzonXFx1MkFDNScsJ3N1YmVkb3QnOidcXHUyQUMzJywnc3VibXVsdCc6J1xcdTJBQzEnLCdzdWJuZSc6J1xcdTIyOEEnLCdzdWJuRSc6J1xcdTJBQ0InLCdzdWJwbHVzJzonXFx1MkFCRicsJ3N1YnJhcnInOidcXHUyOTc5Jywnc3Vic2V0JzonXFx1MjI4MicsJ1N1YnNldCc6J1xcdTIyRDAnLCdzdWJzZXRlcSc6J1xcdTIyODYnLCdzdWJzZXRlcXEnOidcXHUyQUM1JywnU3Vic2V0RXF1YWwnOidcXHUyMjg2Jywnc3Vic2V0bmVxJzonXFx1MjI4QScsJ3N1YnNldG5lcXEnOidcXHUyQUNCJywnc3Vic2ltJzonXFx1MkFDNycsJ3N1YnN1Yic6J1xcdTJBRDUnLCdzdWJzdXAnOidcXHUyQUQzJywnc3VjYyc6J1xcdTIyN0InLCdzdWNjYXBwcm94JzonXFx1MkFCOCcsJ3N1Y2NjdXJseWVxJzonXFx1MjI3RCcsJ1N1Y2NlZWRzJzonXFx1MjI3QicsJ1N1Y2NlZWRzRXF1YWwnOidcXHUyQUIwJywnU3VjY2VlZHNTbGFudEVxdWFsJzonXFx1MjI3RCcsJ1N1Y2NlZWRzVGlsZGUnOidcXHUyMjdGJywnc3VjY2VxJzonXFx1MkFCMCcsJ3N1Y2NuYXBwcm94JzonXFx1MkFCQScsJ3N1Y2NuZXFxJzonXFx1MkFCNicsJ3N1Y2Nuc2ltJzonXFx1MjJFOScsJ3N1Y2NzaW0nOidcXHUyMjdGJywnU3VjaFRoYXQnOidcXHUyMjBCJywnc3VtJzonXFx1MjIxMScsJ1N1bSc6J1xcdTIyMTEnLCdzdW5nJzonXFx1MjY2QScsJ3N1cCc6J1xcdTIyODMnLCdTdXAnOidcXHUyMkQxJywnc3VwMSc6J1xceEI5Jywnc3VwMic6J1xceEIyJywnc3VwMyc6J1xceEIzJywnc3VwZG90JzonXFx1MkFCRScsJ3N1cGRzdWInOidcXHUyQUQ4Jywnc3VwZSc6J1xcdTIyODcnLCdzdXBFJzonXFx1MkFDNicsJ3N1cGVkb3QnOidcXHUyQUM0JywnU3VwZXJzZXQnOidcXHUyMjgzJywnU3VwZXJzZXRFcXVhbCc6J1xcdTIyODcnLCdzdXBoc29sJzonXFx1MjdDOScsJ3N1cGhzdWInOidcXHUyQUQ3Jywnc3VwbGFycic6J1xcdTI5N0InLCdzdXBtdWx0JzonXFx1MkFDMicsJ3N1cG5lJzonXFx1MjI4QicsJ3N1cG5FJzonXFx1MkFDQycsJ3N1cHBsdXMnOidcXHUyQUMwJywnc3Vwc2V0JzonXFx1MjI4MycsJ1N1cHNldCc6J1xcdTIyRDEnLCdzdXBzZXRlcSc6J1xcdTIyODcnLCdzdXBzZXRlcXEnOidcXHUyQUM2Jywnc3Vwc2V0bmVxJzonXFx1MjI4QicsJ3N1cHNldG5lcXEnOidcXHUyQUNDJywnc3Vwc2ltJzonXFx1MkFDOCcsJ3N1cHN1Yic6J1xcdTJBRDQnLCdzdXBzdXAnOidcXHUyQUQ2Jywnc3dhcmhrJzonXFx1MjkyNicsJ3N3YXJyJzonXFx1MjE5OScsJ3N3QXJyJzonXFx1MjFEOScsJ3N3YXJyb3cnOidcXHUyMTk5Jywnc3dud2FyJzonXFx1MjkyQScsJ3N6bGlnJzonXFx4REYnLCdUYWInOidcXHQnLCd0YXJnZXQnOidcXHUyMzE2JywndGF1JzonXFx1MDNDNCcsJ1RhdSc6J1xcdTAzQTQnLCd0YnJrJzonXFx1MjNCNCcsJ3RjYXJvbic6J1xcdTAxNjUnLCdUY2Fyb24nOidcXHUwMTY0JywndGNlZGlsJzonXFx1MDE2MycsJ1RjZWRpbCc6J1xcdTAxNjInLCd0Y3knOidcXHUwNDQyJywnVGN5JzonXFx1MDQyMicsJ3Rkb3QnOidcXHUyMERCJywndGVscmVjJzonXFx1MjMxNScsJ3Rmcic6J1xcdUQ4MzVcXHVERDMxJywnVGZyJzonXFx1RDgzNVxcdUREMTcnLCd0aGVyZTQnOidcXHUyMjM0JywndGhlcmVmb3JlJzonXFx1MjIzNCcsJ1RoZXJlZm9yZSc6J1xcdTIyMzQnLCd0aGV0YSc6J1xcdTAzQjgnLCdUaGV0YSc6J1xcdTAzOTgnLCd0aGV0YXN5bSc6J1xcdTAzRDEnLCd0aGV0YXYnOidcXHUwM0QxJywndGhpY2thcHByb3gnOidcXHUyMjQ4JywndGhpY2tzaW0nOidcXHUyMjNDJywnVGhpY2tTcGFjZSc6J1xcdTIwNUZcXHUyMDBBJywndGhpbnNwJzonXFx1MjAwOScsJ1RoaW5TcGFjZSc6J1xcdTIwMDknLCd0aGthcCc6J1xcdTIyNDgnLCd0aGtzaW0nOidcXHUyMjNDJywndGhvcm4nOidcXHhGRScsJ1RIT1JOJzonXFx4REUnLCd0aWxkZSc6J1xcdTAyREMnLCdUaWxkZSc6J1xcdTIyM0MnLCdUaWxkZUVxdWFsJzonXFx1MjI0MycsJ1RpbGRlRnVsbEVxdWFsJzonXFx1MjI0NScsJ1RpbGRlVGlsZGUnOidcXHUyMjQ4JywndGltZXMnOidcXHhENycsJ3RpbWVzYic6J1xcdTIyQTAnLCd0aW1lc2Jhcic6J1xcdTJBMzEnLCd0aW1lc2QnOidcXHUyQTMwJywndGludCc6J1xcdTIyMkQnLCd0b2VhJzonXFx1MjkyOCcsJ3RvcCc6J1xcdTIyQTQnLCd0b3Bib3QnOidcXHUyMzM2JywndG9wY2lyJzonXFx1MkFGMScsJ3RvcGYnOidcXHVEODM1XFx1REQ2NScsJ1RvcGYnOidcXHVEODM1XFx1REQ0QicsJ3RvcGZvcmsnOidcXHUyQURBJywndG9zYSc6J1xcdTI5MjknLCd0cHJpbWUnOidcXHUyMDM0JywndHJhZGUnOidcXHUyMTIyJywnVFJBREUnOidcXHUyMTIyJywndHJpYW5nbGUnOidcXHUyNUI1JywndHJpYW5nbGVkb3duJzonXFx1MjVCRicsJ3RyaWFuZ2xlbGVmdCc6J1xcdTI1QzMnLCd0cmlhbmdsZWxlZnRlcSc6J1xcdTIyQjQnLCd0cmlhbmdsZXEnOidcXHUyMjVDJywndHJpYW5nbGVyaWdodCc6J1xcdTI1QjknLCd0cmlhbmdsZXJpZ2h0ZXEnOidcXHUyMkI1JywndHJpZG90JzonXFx1MjVFQycsJ3RyaWUnOidcXHUyMjVDJywndHJpbWludXMnOidcXHUyQTNBJywnVHJpcGxlRG90JzonXFx1MjBEQicsJ3RyaXBsdXMnOidcXHUyQTM5JywndHJpc2InOidcXHUyOUNEJywndHJpdGltZSc6J1xcdTJBM0InLCd0cnBleml1bSc6J1xcdTIzRTInLCd0c2NyJzonXFx1RDgzNVxcdURDQzknLCdUc2NyJzonXFx1RDgzNVxcdURDQUYnLCd0c2N5JzonXFx1MDQ0NicsJ1RTY3knOidcXHUwNDI2JywndHNoY3knOidcXHUwNDVCJywnVFNIY3knOidcXHUwNDBCJywndHN0cm9rJzonXFx1MDE2NycsJ1RzdHJvayc6J1xcdTAxNjYnLCd0d2l4dCc6J1xcdTIyNkMnLCd0d29oZWFkbGVmdGFycm93JzonXFx1MjE5RScsJ3R3b2hlYWRyaWdodGFycm93JzonXFx1MjFBMCcsJ3VhY3V0ZSc6J1xceEZBJywnVWFjdXRlJzonXFx4REEnLCd1YXJyJzonXFx1MjE5MScsJ3VBcnInOidcXHUyMUQxJywnVWFycic6J1xcdTIxOUYnLCdVYXJyb2Npcic6J1xcdTI5NDknLCd1YnJjeSc6J1xcdTA0NUUnLCdVYnJjeSc6J1xcdTA0MEUnLCd1YnJldmUnOidcXHUwMTZEJywnVWJyZXZlJzonXFx1MDE2QycsJ3VjaXJjJzonXFx4RkInLCdVY2lyYyc6J1xceERCJywndWN5JzonXFx1MDQ0MycsJ1VjeSc6J1xcdTA0MjMnLCd1ZGFycic6J1xcdTIxQzUnLCd1ZGJsYWMnOidcXHUwMTcxJywnVWRibGFjJzonXFx1MDE3MCcsJ3VkaGFyJzonXFx1Mjk2RScsJ3VmaXNodCc6J1xcdTI5N0UnLCd1ZnInOidcXHVEODM1XFx1REQzMicsJ1Vmcic6J1xcdUQ4MzVcXHVERDE4JywndWdyYXZlJzonXFx4RjknLCdVZ3JhdmUnOidcXHhEOScsJ3VIYXInOidcXHUyOTYzJywndWhhcmwnOidcXHUyMUJGJywndWhhcnInOidcXHUyMUJFJywndWhibGsnOidcXHUyNTgwJywndWxjb3JuJzonXFx1MjMxQycsJ3VsY29ybmVyJzonXFx1MjMxQycsJ3VsY3JvcCc6J1xcdTIzMEYnLCd1bHRyaSc6J1xcdTI1RjgnLCd1bWFjcic6J1xcdTAxNkInLCdVbWFjcic6J1xcdTAxNkEnLCd1bWwnOidcXHhBOCcsJ1VuZGVyQmFyJzonXycsJ1VuZGVyQnJhY2UnOidcXHUyM0RGJywnVW5kZXJCcmFja2V0JzonXFx1MjNCNScsJ1VuZGVyUGFyZW50aGVzaXMnOidcXHUyM0REJywnVW5pb24nOidcXHUyMkMzJywnVW5pb25QbHVzJzonXFx1MjI4RScsJ3VvZ29uJzonXFx1MDE3MycsJ1VvZ29uJzonXFx1MDE3MicsJ3VvcGYnOidcXHVEODM1XFx1REQ2NicsJ1VvcGYnOidcXHVEODM1XFx1REQ0QycsJ3VwYXJyb3cnOidcXHUyMTkxJywnVXBhcnJvdyc6J1xcdTIxRDEnLCdVcEFycm93JzonXFx1MjE5MScsJ1VwQXJyb3dCYXInOidcXHUyOTEyJywnVXBBcnJvd0Rvd25BcnJvdyc6J1xcdTIxQzUnLCd1cGRvd25hcnJvdyc6J1xcdTIxOTUnLCdVcGRvd25hcnJvdyc6J1xcdTIxRDUnLCdVcERvd25BcnJvdyc6J1xcdTIxOTUnLCdVcEVxdWlsaWJyaXVtJzonXFx1Mjk2RScsJ3VwaGFycG9vbmxlZnQnOidcXHUyMUJGJywndXBoYXJwb29ucmlnaHQnOidcXHUyMUJFJywndXBsdXMnOidcXHUyMjhFJywnVXBwZXJMZWZ0QXJyb3cnOidcXHUyMTk2JywnVXBwZXJSaWdodEFycm93JzonXFx1MjE5NycsJ3Vwc2knOidcXHUwM0M1JywnVXBzaSc6J1xcdTAzRDInLCd1cHNpaCc6J1xcdTAzRDInLCd1cHNpbG9uJzonXFx1MDNDNScsJ1Vwc2lsb24nOidcXHUwM0E1JywnVXBUZWUnOidcXHUyMkE1JywnVXBUZWVBcnJvdyc6J1xcdTIxQTUnLCd1cHVwYXJyb3dzJzonXFx1MjFDOCcsJ3VyY29ybic6J1xcdTIzMUQnLCd1cmNvcm5lcic6J1xcdTIzMUQnLCd1cmNyb3AnOidcXHUyMzBFJywndXJpbmcnOidcXHUwMTZGJywnVXJpbmcnOidcXHUwMTZFJywndXJ0cmknOidcXHUyNUY5JywndXNjcic6J1xcdUQ4MzVcXHVEQ0NBJywnVXNjcic6J1xcdUQ4MzVcXHVEQ0IwJywndXRkb3QnOidcXHUyMkYwJywndXRpbGRlJzonXFx1MDE2OScsJ1V0aWxkZSc6J1xcdTAxNjgnLCd1dHJpJzonXFx1MjVCNScsJ3V0cmlmJzonXFx1MjVCNCcsJ3V1YXJyJzonXFx1MjFDOCcsJ3V1bWwnOidcXHhGQycsJ1V1bWwnOidcXHhEQycsJ3V3YW5nbGUnOidcXHUyOUE3JywndmFuZ3J0JzonXFx1Mjk5QycsJ3ZhcmVwc2lsb24nOidcXHUwM0Y1JywndmFya2FwcGEnOidcXHUwM0YwJywndmFybm90aGluZyc6J1xcdTIyMDUnLCd2YXJwaGknOidcXHUwM0Q1JywndmFycGknOidcXHUwM0Q2JywndmFycHJvcHRvJzonXFx1MjIxRCcsJ3ZhcnInOidcXHUyMTk1JywndkFycic6J1xcdTIxRDUnLCd2YXJyaG8nOidcXHUwM0YxJywndmFyc2lnbWEnOidcXHUwM0MyJywndmFyc3Vic2V0bmVxJzonXFx1MjI4QVxcdUZFMDAnLCd2YXJzdWJzZXRuZXFxJzonXFx1MkFDQlxcdUZFMDAnLCd2YXJzdXBzZXRuZXEnOidcXHUyMjhCXFx1RkUwMCcsJ3ZhcnN1cHNldG5lcXEnOidcXHUyQUNDXFx1RkUwMCcsJ3ZhcnRoZXRhJzonXFx1MDNEMScsJ3ZhcnRyaWFuZ2xlbGVmdCc6J1xcdTIyQjInLCd2YXJ0cmlhbmdsZXJpZ2h0JzonXFx1MjJCMycsJ3ZCYXInOidcXHUyQUU4JywnVmJhcic6J1xcdTJBRUInLCd2QmFydic6J1xcdTJBRTknLCd2Y3knOidcXHUwNDMyJywnVmN5JzonXFx1MDQxMicsJ3ZkYXNoJzonXFx1MjJBMicsJ3ZEYXNoJzonXFx1MjJBOCcsJ1ZkYXNoJzonXFx1MjJBOScsJ1ZEYXNoJzonXFx1MjJBQicsJ1ZkYXNobCc6J1xcdTJBRTYnLCd2ZWUnOidcXHUyMjI4JywnVmVlJzonXFx1MjJDMScsJ3ZlZWJhcic6J1xcdTIyQkInLCd2ZWVlcSc6J1xcdTIyNUEnLCd2ZWxsaXAnOidcXHUyMkVFJywndmVyYmFyJzonfCcsJ1ZlcmJhcic6J1xcdTIwMTYnLCd2ZXJ0JzonfCcsJ1ZlcnQnOidcXHUyMDE2JywnVmVydGljYWxCYXInOidcXHUyMjIzJywnVmVydGljYWxMaW5lJzonfCcsJ1ZlcnRpY2FsU2VwYXJhdG9yJzonXFx1Mjc1OCcsJ1ZlcnRpY2FsVGlsZGUnOidcXHUyMjQwJywnVmVyeVRoaW5TcGFjZSc6J1xcdTIwMEEnLCd2ZnInOidcXHVEODM1XFx1REQzMycsJ1Zmcic6J1xcdUQ4MzVcXHVERDE5Jywndmx0cmknOidcXHUyMkIyJywndm5zdWInOidcXHUyMjgyXFx1MjBEMicsJ3Zuc3VwJzonXFx1MjI4M1xcdTIwRDInLCd2b3BmJzonXFx1RDgzNVxcdURENjcnLCdWb3BmJzonXFx1RDgzNVxcdURENEQnLCd2cHJvcCc6J1xcdTIyMUQnLCd2cnRyaSc6J1xcdTIyQjMnLCd2c2NyJzonXFx1RDgzNVxcdURDQ0InLCdWc2NyJzonXFx1RDgzNVxcdURDQjEnLCd2c3VibmUnOidcXHUyMjhBXFx1RkUwMCcsJ3ZzdWJuRSc6J1xcdTJBQ0JcXHVGRTAwJywndnN1cG5lJzonXFx1MjI4QlxcdUZFMDAnLCd2c3VwbkUnOidcXHUyQUNDXFx1RkUwMCcsJ1Z2ZGFzaCc6J1xcdTIyQUEnLCd2emlnemFnJzonXFx1Mjk5QScsJ3djaXJjJzonXFx1MDE3NScsJ1djaXJjJzonXFx1MDE3NCcsJ3dlZGJhcic6J1xcdTJBNUYnLCd3ZWRnZSc6J1xcdTIyMjcnLCdXZWRnZSc6J1xcdTIyQzAnLCd3ZWRnZXEnOidcXHUyMjU5Jywnd2VpZXJwJzonXFx1MjExOCcsJ3dmcic6J1xcdUQ4MzVcXHVERDM0JywnV2ZyJzonXFx1RDgzNVxcdUREMUEnLCd3b3BmJzonXFx1RDgzNVxcdURENjgnLCdXb3BmJzonXFx1RDgzNVxcdURENEUnLCd3cCc6J1xcdTIxMTgnLCd3cic6J1xcdTIyNDAnLCd3cmVhdGgnOidcXHUyMjQwJywnd3Njcic6J1xcdUQ4MzVcXHVEQ0NDJywnV3Njcic6J1xcdUQ4MzVcXHVEQ0IyJywneGNhcCc6J1xcdTIyQzInLCd4Y2lyYyc6J1xcdTI1RUYnLCd4Y3VwJzonXFx1MjJDMycsJ3hkdHJpJzonXFx1MjVCRCcsJ3hmcic6J1xcdUQ4MzVcXHVERDM1JywnWGZyJzonXFx1RDgzNVxcdUREMUInLCd4aGFycic6J1xcdTI3RjcnLCd4aEFycic6J1xcdTI3RkEnLCd4aSc6J1xcdTAzQkUnLCdYaSc6J1xcdTAzOUUnLCd4bGFycic6J1xcdTI3RjUnLCd4bEFycic6J1xcdTI3RjgnLCd4bWFwJzonXFx1MjdGQycsJ3huaXMnOidcXHUyMkZCJywneG9kb3QnOidcXHUyQTAwJywneG9wZic6J1xcdUQ4MzVcXHVERDY5JywnWG9wZic6J1xcdUQ4MzVcXHVERDRGJywneG9wbHVzJzonXFx1MkEwMScsJ3hvdGltZSc6J1xcdTJBMDInLCd4cmFycic6J1xcdTI3RjYnLCd4ckFycic6J1xcdTI3RjknLCd4c2NyJzonXFx1RDgzNVxcdURDQ0QnLCdYc2NyJzonXFx1RDgzNVxcdURDQjMnLCd4c3FjdXAnOidcXHUyQTA2JywneHVwbHVzJzonXFx1MkEwNCcsJ3h1dHJpJzonXFx1MjVCMycsJ3h2ZWUnOidcXHUyMkMxJywneHdlZGdlJzonXFx1MjJDMCcsJ3lhY3V0ZSc6J1xceEZEJywnWWFjdXRlJzonXFx4REQnLCd5YWN5JzonXFx1MDQ0RicsJ1lBY3knOidcXHUwNDJGJywneWNpcmMnOidcXHUwMTc3JywnWWNpcmMnOidcXHUwMTc2JywneWN5JzonXFx1MDQ0QicsJ1ljeSc6J1xcdTA0MkInLCd5ZW4nOidcXHhBNScsJ3lmcic6J1xcdUQ4MzVcXHVERDM2JywnWWZyJzonXFx1RDgzNVxcdUREMUMnLCd5aWN5JzonXFx1MDQ1NycsJ1lJY3knOidcXHUwNDA3JywneW9wZic6J1xcdUQ4MzVcXHVERDZBJywnWW9wZic6J1xcdUQ4MzVcXHVERDUwJywneXNjcic6J1xcdUQ4MzVcXHVEQ0NFJywnWXNjcic6J1xcdUQ4MzVcXHVEQ0I0JywneXVjeSc6J1xcdTA0NEUnLCdZVWN5JzonXFx1MDQyRScsJ3l1bWwnOidcXHhGRicsJ1l1bWwnOidcXHUwMTc4JywnemFjdXRlJzonXFx1MDE3QScsJ1phY3V0ZSc6J1xcdTAxNzknLCd6Y2Fyb24nOidcXHUwMTdFJywnWmNhcm9uJzonXFx1MDE3RCcsJ3pjeSc6J1xcdTA0MzcnLCdaY3knOidcXHUwNDE3JywnemRvdCc6J1xcdTAxN0MnLCdaZG90JzonXFx1MDE3QicsJ3plZXRyZic6J1xcdTIxMjgnLCdaZXJvV2lkdGhTcGFjZSc6J1xcdTIwMEInLCd6ZXRhJzonXFx1MDNCNicsJ1pldGEnOidcXHUwMzk2JywnemZyJzonXFx1RDgzNVxcdUREMzcnLCdaZnInOidcXHUyMTI4JywnemhjeSc6J1xcdTA0MzYnLCdaSGN5JzonXFx1MDQxNicsJ3ppZ3JhcnInOidcXHUyMUREJywnem9wZic6J1xcdUQ4MzVcXHVERDZCJywnWm9wZic6J1xcdTIxMjQnLCd6c2NyJzonXFx1RDgzNVxcdURDQ0YnLCdac2NyJzonXFx1RDgzNVxcdURDQjUnLCd6d2onOidcXHUyMDBEJywnenduaic6J1xcdTIwMEMnfTtcblx0dmFyIGRlY29kZU1hcExlZ2FjeSA9IHsnYWFjdXRlJzonXFx4RTEnLCdBYWN1dGUnOidcXHhDMScsJ2FjaXJjJzonXFx4RTInLCdBY2lyYyc6J1xceEMyJywnYWN1dGUnOidcXHhCNCcsJ2FlbGlnJzonXFx4RTYnLCdBRWxpZyc6J1xceEM2JywnYWdyYXZlJzonXFx4RTAnLCdBZ3JhdmUnOidcXHhDMCcsJ2FtcCc6JyYnLCdBTVAnOicmJywnYXJpbmcnOidcXHhFNScsJ0FyaW5nJzonXFx4QzUnLCdhdGlsZGUnOidcXHhFMycsJ0F0aWxkZSc6J1xceEMzJywnYXVtbCc6J1xceEU0JywnQXVtbCc6J1xceEM0JywnYnJ2YmFyJzonXFx4QTYnLCdjY2VkaWwnOidcXHhFNycsJ0NjZWRpbCc6J1xceEM3JywnY2VkaWwnOidcXHhCOCcsJ2NlbnQnOidcXHhBMicsJ2NvcHknOidcXHhBOScsJ0NPUFknOidcXHhBOScsJ2N1cnJlbic6J1xceEE0JywnZGVnJzonXFx4QjAnLCdkaXZpZGUnOidcXHhGNycsJ2VhY3V0ZSc6J1xceEU5JywnRWFjdXRlJzonXFx4QzknLCdlY2lyYyc6J1xceEVBJywnRWNpcmMnOidcXHhDQScsJ2VncmF2ZSc6J1xceEU4JywnRWdyYXZlJzonXFx4QzgnLCdldGgnOidcXHhGMCcsJ0VUSCc6J1xceEQwJywnZXVtbCc6J1xceEVCJywnRXVtbCc6J1xceENCJywnZnJhYzEyJzonXFx4QkQnLCdmcmFjMTQnOidcXHhCQycsJ2ZyYWMzNCc6J1xceEJFJywnZ3QnOic+JywnR1QnOic+JywnaWFjdXRlJzonXFx4RUQnLCdJYWN1dGUnOidcXHhDRCcsJ2ljaXJjJzonXFx4RUUnLCdJY2lyYyc6J1xceENFJywnaWV4Y2wnOidcXHhBMScsJ2lncmF2ZSc6J1xceEVDJywnSWdyYXZlJzonXFx4Q0MnLCdpcXVlc3QnOidcXHhCRicsJ2l1bWwnOidcXHhFRicsJ0l1bWwnOidcXHhDRicsJ2xhcXVvJzonXFx4QUInLCdsdCc6JzwnLCdMVCc6JzwnLCdtYWNyJzonXFx4QUYnLCdtaWNybyc6J1xceEI1JywnbWlkZG90JzonXFx4QjcnLCduYnNwJzonXFx4QTAnLCdub3QnOidcXHhBQycsJ250aWxkZSc6J1xceEYxJywnTnRpbGRlJzonXFx4RDEnLCdvYWN1dGUnOidcXHhGMycsJ09hY3V0ZSc6J1xceEQzJywnb2NpcmMnOidcXHhGNCcsJ09jaXJjJzonXFx4RDQnLCdvZ3JhdmUnOidcXHhGMicsJ09ncmF2ZSc6J1xceEQyJywnb3JkZic6J1xceEFBJywnb3JkbSc6J1xceEJBJywnb3NsYXNoJzonXFx4RjgnLCdPc2xhc2gnOidcXHhEOCcsJ290aWxkZSc6J1xceEY1JywnT3RpbGRlJzonXFx4RDUnLCdvdW1sJzonXFx4RjYnLCdPdW1sJzonXFx4RDYnLCdwYXJhJzonXFx4QjYnLCdwbHVzbW4nOidcXHhCMScsJ3BvdW5kJzonXFx4QTMnLCdxdW90JzonXCInLCdRVU9UJzonXCInLCdyYXF1byc6J1xceEJCJywncmVnJzonXFx4QUUnLCdSRUcnOidcXHhBRScsJ3NlY3QnOidcXHhBNycsJ3NoeSc6J1xceEFEJywnc3VwMSc6J1xceEI5Jywnc3VwMic6J1xceEIyJywnc3VwMyc6J1xceEIzJywnc3psaWcnOidcXHhERicsJ3Rob3JuJzonXFx4RkUnLCdUSE9STic6J1xceERFJywndGltZXMnOidcXHhENycsJ3VhY3V0ZSc6J1xceEZBJywnVWFjdXRlJzonXFx4REEnLCd1Y2lyYyc6J1xceEZCJywnVWNpcmMnOidcXHhEQicsJ3VncmF2ZSc6J1xceEY5JywnVWdyYXZlJzonXFx4RDknLCd1bWwnOidcXHhBOCcsJ3V1bWwnOidcXHhGQycsJ1V1bWwnOidcXHhEQycsJ3lhY3V0ZSc6J1xceEZEJywnWWFjdXRlJzonXFx4REQnLCd5ZW4nOidcXHhBNScsJ3l1bWwnOidcXHhGRid9O1xuXHR2YXIgZGVjb2RlTWFwTnVtZXJpYyA9IHsnMCc6J1xcdUZGRkQnLCcxMjgnOidcXHUyMEFDJywnMTMwJzonXFx1MjAxQScsJzEzMSc6J1xcdTAxOTInLCcxMzInOidcXHUyMDFFJywnMTMzJzonXFx1MjAyNicsJzEzNCc6J1xcdTIwMjAnLCcxMzUnOidcXHUyMDIxJywnMTM2JzonXFx1MDJDNicsJzEzNyc6J1xcdTIwMzAnLCcxMzgnOidcXHUwMTYwJywnMTM5JzonXFx1MjAzOScsJzE0MCc6J1xcdTAxNTInLCcxNDInOidcXHUwMTdEJywnMTQ1JzonXFx1MjAxOCcsJzE0Nic6J1xcdTIwMTknLCcxNDcnOidcXHUyMDFDJywnMTQ4JzonXFx1MjAxRCcsJzE0OSc6J1xcdTIwMjInLCcxNTAnOidcXHUyMDEzJywnMTUxJzonXFx1MjAxNCcsJzE1Mic6J1xcdTAyREMnLCcxNTMnOidcXHUyMTIyJywnMTU0JzonXFx1MDE2MScsJzE1NSc6J1xcdTIwM0EnLCcxNTYnOidcXHUwMTUzJywnMTU4JzonXFx1MDE3RScsJzE1OSc6J1xcdTAxNzgnfTtcblx0dmFyIGludmFsaWRSZWZlcmVuY2VDb2RlUG9pbnRzID0gWzEsMiwzLDQsNSw2LDcsOCwxMSwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwxMjcsMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSw2NDk3Niw2NDk3Nyw2NDk3OCw2NDk3OSw2NDk4MCw2NDk4MSw2NDk4Miw2NDk4Myw2NDk4NCw2NDk4NSw2NDk4Niw2NDk4Nyw2NDk4OCw2NDk4OSw2NDk5MCw2NDk5MSw2NDk5Miw2NDk5Myw2NDk5NCw2NDk5NSw2NDk5Niw2NDk5Nyw2NDk5OCw2NDk5OSw2NTAwMCw2NTAwMSw2NTAwMiw2NTAwMyw2NTAwNCw2NTAwNSw2NTAwNiw2NTAwNyw2NTUzNCw2NTUzNSwxMzEwNzAsMTMxMDcxLDE5NjYwNiwxOTY2MDcsMjYyMTQyLDI2MjE0MywzMjc2NzgsMzI3Njc5LDM5MzIxNCwzOTMyMTUsNDU4NzUwLDQ1ODc1MSw1MjQyODYsNTI0Mjg3LDU4OTgyMiw1ODk4MjMsNjU1MzU4LDY1NTM1OSw3MjA4OTQsNzIwODk1LDc4NjQzMCw3ODY0MzEsODUxOTY2LDg1MTk2Nyw5MTc1MDIsOTE3NTAzLDk4MzAzOCw5ODMwMzksMTA0ODU3NCwxMDQ4NTc1LDExMTQxMTAsMTExNDExMV07XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0dmFyIHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cblx0dmFyIG9iamVjdCA9IHt9O1xuXHR2YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3QuaGFzT3duUHJvcGVydHk7XG5cdHZhciBoYXMgPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5TmFtZSkge1xuXHRcdHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHlOYW1lKTtcblx0fTtcblxuXHR2YXIgY29udGFpbnMgPSBmdW5jdGlvbihhcnJheSwgdmFsdWUpIHtcblx0XHR2YXIgaW5kZXggPSAtMTtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG5cdFx0XHRpZiAoYXJyYXlbaW5kZXhdID09IHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0dmFyIG1lcmdlID0gZnVuY3Rpb24ob3B0aW9ucywgZGVmYXVsdHMpIHtcblx0XHRpZiAoIW9wdGlvbnMpIHtcblx0XHRcdHJldHVybiBkZWZhdWx0cztcblx0XHR9XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdHZhciBrZXk7XG5cdFx0Zm9yIChrZXkgaW4gZGVmYXVsdHMpIHtcblx0XHRcdC8vIEEgYGhhc093blByb3BlcnR5YCBjaGVjayBpcyBub3QgbmVlZGVkIGhlcmUsIHNpbmNlIG9ubHkgcmVjb2duaXplZFxuXHRcdFx0Ly8gb3B0aW9uIG5hbWVzIGFyZSB1c2VkIGFueXdheS4gQW55IG90aGVycyBhcmUgaWdub3JlZC5cblx0XHRcdHJlc3VsdFtrZXldID0gaGFzKG9wdGlvbnMsIGtleSkgPyBvcHRpb25zW2tleV0gOiBkZWZhdWx0c1trZXldO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdC8vIE1vZGlmaWVkIHZlcnNpb24gb2YgYHVjczJlbmNvZGVgOyBzZWUgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlLlxuXHR2YXIgY29kZVBvaW50VG9TeW1ib2wgPSBmdW5jdGlvbihjb2RlUG9pbnQsIHN0cmljdCkge1xuXHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRpZiAoKGNvZGVQb2ludCA+PSAweEQ4MDAgJiYgY29kZVBvaW50IDw9IDB4REZGRikgfHwgY29kZVBvaW50ID4gMHgxMEZGRkYpIHtcblx0XHRcdC8vIFNlZSBpc3N1ZSAjNDpcblx0XHRcdC8vIOKAnE90aGVyd2lzZSwgaWYgdGhlIG51bWJlciBpcyBpbiB0aGUgcmFuZ2UgMHhEODAwIHRvIDB4REZGRiBvciBpc1xuXHRcdFx0Ly8gZ3JlYXRlciB0aGFuIDB4MTBGRkZGLCB0aGVuIHRoaXMgaXMgYSBwYXJzZSBlcnJvci4gUmV0dXJuIGEgVStGRkZEXG5cdFx0XHQvLyBSRVBMQUNFTUVOVCBDSEFSQUNURVIu4oCdXG5cdFx0XHRpZiAoc3RyaWN0KSB7XG5cdFx0XHRcdHBhcnNlRXJyb3IoJ2NoYXJhY3RlciByZWZlcmVuY2Ugb3V0c2lkZSB0aGUgcGVybWlzc2libGUgVW5pY29kZSByYW5nZScpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuICdcXHVGRkZEJztcblx0XHR9XG5cdFx0aWYgKGhhcyhkZWNvZGVNYXBOdW1lcmljLCBjb2RlUG9pbnQpKSB7XG5cdFx0XHRpZiAoc3RyaWN0KSB7XG5cdFx0XHRcdHBhcnNlRXJyb3IoJ2Rpc2FsbG93ZWQgY2hhcmFjdGVyIHJlZmVyZW5jZScpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRlY29kZU1hcE51bWVyaWNbY29kZVBvaW50XTtcblx0XHR9XG5cdFx0aWYgKHN0cmljdCAmJiBjb250YWlucyhpbnZhbGlkUmVmZXJlbmNlQ29kZVBvaW50cywgY29kZVBvaW50KSkge1xuXHRcdFx0cGFyc2VFcnJvcignZGlzYWxsb3dlZCBjaGFyYWN0ZXIgcmVmZXJlbmNlJyk7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcblx0XHRcdGNvZGVQb2ludCAtPSAweDEwMDAwO1xuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZShjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApO1xuXHRcdFx0Y29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkY7XG5cdFx0fVxuXHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUoY29kZVBvaW50KTtcblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9O1xuXG5cdHZhciBoZXhFc2NhcGUgPSBmdW5jdGlvbihjb2RlUG9pbnQpIHtcblx0XHRyZXR1cm4gJyYjeCcgKyBjb2RlUG9pbnQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyAnOyc7XG5cdH07XG5cblx0dmFyIGRlY0VzY2FwZSA9IGZ1bmN0aW9uKGNvZGVQb2ludCkge1xuXHRcdHJldHVybiAnJiMnICsgY29kZVBvaW50ICsgJzsnO1xuXHR9O1xuXG5cdHZhciBwYXJzZUVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkge1xuXHRcdHRocm93IEVycm9yKCdQYXJzZSBlcnJvcjogJyArIG1lc3NhZ2UpO1xuXHR9O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdHZhciBlbmNvZGUgPSBmdW5jdGlvbihzdHJpbmcsIG9wdGlvbnMpIHtcblx0XHRvcHRpb25zID0gbWVyZ2Uob3B0aW9ucywgZW5jb2RlLm9wdGlvbnMpO1xuXHRcdHZhciBzdHJpY3QgPSBvcHRpb25zLnN0cmljdDtcblx0XHRpZiAoc3RyaWN0ICYmIHJlZ2V4SW52YWxpZFJhd0NvZGVQb2ludC50ZXN0KHN0cmluZykpIHtcblx0XHRcdHBhcnNlRXJyb3IoJ2ZvcmJpZGRlbiBjb2RlIHBvaW50Jyk7XG5cdFx0fVxuXHRcdHZhciBlbmNvZGVFdmVyeXRoaW5nID0gb3B0aW9ucy5lbmNvZGVFdmVyeXRoaW5nO1xuXHRcdHZhciB1c2VOYW1lZFJlZmVyZW5jZXMgPSBvcHRpb25zLnVzZU5hbWVkUmVmZXJlbmNlcztcblx0XHR2YXIgYWxsb3dVbnNhZmVTeW1ib2xzID0gb3B0aW9ucy5hbGxvd1Vuc2FmZVN5bWJvbHM7XG5cdFx0dmFyIGVzY2FwZUNvZGVQb2ludCA9IG9wdGlvbnMuZGVjaW1hbCA/IGRlY0VzY2FwZSA6IGhleEVzY2FwZTtcblxuXHRcdHZhciBlc2NhcGVCbXBTeW1ib2wgPSBmdW5jdGlvbihzeW1ib2wpIHtcblx0XHRcdHJldHVybiBlc2NhcGVDb2RlUG9pbnQoc3ltYm9sLmNoYXJDb2RlQXQoMCkpO1xuXHRcdH07XG5cblx0XHRpZiAoZW5jb2RlRXZlcnl0aGluZykge1xuXHRcdFx0Ly8gRW5jb2RlIEFTQ0lJIHN5bWJvbHMuXG5cdFx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleEFzY2lpV2hpdGVsaXN0LCBmdW5jdGlvbihzeW1ib2wpIHtcblx0XHRcdFx0Ly8gVXNlIG5hbWVkIHJlZmVyZW5jZXMgaWYgcmVxdWVzdGVkICYgcG9zc2libGUuXG5cdFx0XHRcdGlmICh1c2VOYW1lZFJlZmVyZW5jZXMgJiYgaGFzKGVuY29kZU1hcCwgc3ltYm9sKSkge1xuXHRcdFx0XHRcdHJldHVybiAnJicgKyBlbmNvZGVNYXBbc3ltYm9sXSArICc7Jztcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZXNjYXBlQm1wU3ltYm9sKHN5bWJvbCk7XG5cdFx0XHR9KTtcblx0XHRcdC8vIFNob3J0ZW4gYSBmZXcgZXNjYXBlcyB0aGF0IHJlcHJlc2VudCB0d28gc3ltYm9scywgb2Ygd2hpY2ggYXQgbGVhc3Qgb25lXG5cdFx0XHQvLyBpcyB3aXRoaW4gdGhlIEFTQ0lJIHJhbmdlLlxuXHRcdFx0aWYgKHVzZU5hbWVkUmVmZXJlbmNlcykge1xuXHRcdFx0XHRzdHJpbmcgPSBzdHJpbmdcblx0XHRcdFx0XHQucmVwbGFjZSgvJmd0O1xcdTIwRDIvZywgJyZudmd0OycpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyZsdDtcXHUyMEQyL2csICcmbnZsdDsnKVxuXHRcdFx0XHRcdC5yZXBsYWNlKC8mI3g2NjsmI3g2QTsvZywgJyZmamxpZzsnKTtcblx0XHRcdH1cblx0XHRcdC8vIEVuY29kZSBub24tQVNDSUkgc3ltYm9scy5cblx0XHRcdGlmICh1c2VOYW1lZFJlZmVyZW5jZXMpIHtcblx0XHRcdFx0Ly8gRW5jb2RlIG5vbi1BU0NJSSBzeW1ib2xzIHRoYXQgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBuYW1lZCByZWZlcmVuY2UuXG5cdFx0XHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4RW5jb2RlTm9uQXNjaWksIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0XHRcdC8vIE5vdGU6IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgYGhhcyhlbmNvZGVNYXAsIHN0cmluZylgIGhlcmUuXG5cdFx0XHRcdFx0cmV0dXJuICcmJyArIGVuY29kZU1hcFtzdHJpbmddICsgJzsnO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIE5vdGU6IGFueSByZW1haW5pbmcgbm9uLUFTQ0lJIHN5bWJvbHMgYXJlIGhhbmRsZWQgb3V0c2lkZSBvZiB0aGUgYGlmYC5cblx0XHR9IGVsc2UgaWYgKHVzZU5hbWVkUmVmZXJlbmNlcykge1xuXHRcdFx0Ly8gQXBwbHkgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMuXG5cdFx0XHQvLyBFbmNvZGUgYDw+XCInJmAgdXNpbmcgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMuXG5cdFx0XHRpZiAoIWFsbG93VW5zYWZlU3ltYm9scykge1xuXHRcdFx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleEVzY2FwZSwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRcdFx0cmV0dXJuICcmJyArIGVuY29kZU1hcFtzdHJpbmddICsgJzsnOyAvLyBubyBuZWVkIHRvIGNoZWNrIGBoYXMoKWAgaGVyZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIFNob3J0ZW4gZXNjYXBlcyB0aGF0IHJlcHJlc2VudCB0d28gc3ltYm9scywgb2Ygd2hpY2ggYXQgbGVhc3Qgb25lIGlzXG5cdFx0XHQvLyBgPD5cIicmYC5cblx0XHRcdHN0cmluZyA9IHN0cmluZ1xuXHRcdFx0XHQucmVwbGFjZSgvJmd0O1xcdTIwRDIvZywgJyZudmd0OycpXG5cdFx0XHRcdC5yZXBsYWNlKC8mbHQ7XFx1MjBEMi9nLCAnJm52bHQ7Jyk7XG5cdFx0XHQvLyBFbmNvZGUgbm9uLUFTQ0lJIHN5bWJvbHMgdGhhdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIG5hbWVkIHJlZmVyZW5jZS5cblx0XHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4RW5jb2RlTm9uQXNjaWksIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0XHQvLyBOb3RlOiB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGBoYXMoZW5jb2RlTWFwLCBzdHJpbmcpYCBoZXJlLlxuXHRcdFx0XHRyZXR1cm4gJyYnICsgZW5jb2RlTWFwW3N0cmluZ10gKyAnOyc7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKCFhbGxvd1Vuc2FmZVN5bWJvbHMpIHtcblx0XHRcdC8vIEVuY29kZSBgPD5cIicmYCB1c2luZyBoZXhhZGVjaW1hbCBlc2NhcGVzLCBub3cgdGhhdCB0aGV54oCZcmUgbm90IGhhbmRsZWRcblx0XHRcdC8vIHVzaW5nIG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhFc2NhcGUsIGVzY2FwZUJtcFN5bWJvbCk7XG5cdFx0fVxuXHRcdHJldHVybiBzdHJpbmdcblx0XHRcdC8vIEVuY29kZSBhc3RyYWwgc3ltYm9scy5cblx0XHRcdC5yZXBsYWNlKHJlZ2V4QXN0cmFsU3ltYm9scywgZnVuY3Rpb24oJDApIHtcblx0XHRcdFx0Ly8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG5cdFx0XHRcdHZhciBoaWdoID0gJDAuY2hhckNvZGVBdCgwKTtcblx0XHRcdFx0dmFyIGxvdyA9ICQwLmNoYXJDb2RlQXQoMSk7XG5cdFx0XHRcdHZhciBjb2RlUG9pbnQgPSAoaGlnaCAtIDB4RDgwMCkgKiAweDQwMCArIGxvdyAtIDB4REMwMCArIDB4MTAwMDA7XG5cdFx0XHRcdHJldHVybiBlc2NhcGVDb2RlUG9pbnQoY29kZVBvaW50KTtcblx0XHRcdH0pXG5cdFx0XHQvLyBFbmNvZGUgYW55IHJlbWFpbmluZyBCTVAgc3ltYm9scyB0aGF0IGFyZSBub3QgcHJpbnRhYmxlIEFTQ0lJIHN5bWJvbHNcblx0XHRcdC8vIHVzaW5nIGEgaGV4YWRlY2ltYWwgZXNjYXBlLlxuXHRcdFx0LnJlcGxhY2UocmVnZXhCbXBXaGl0ZWxpc3QsIGVzY2FwZUJtcFN5bWJvbCk7XG5cdH07XG5cdC8vIEV4cG9zZSBkZWZhdWx0IG9wdGlvbnMgKHNvIHRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gZ2xvYmFsbHkpLlxuXHRlbmNvZGUub3B0aW9ucyA9IHtcblx0XHQnYWxsb3dVbnNhZmVTeW1ib2xzJzogZmFsc2UsXG5cdFx0J2VuY29kZUV2ZXJ5dGhpbmcnOiBmYWxzZSxcblx0XHQnc3RyaWN0JzogZmFsc2UsXG5cdFx0J3VzZU5hbWVkUmVmZXJlbmNlcyc6IGZhbHNlLFxuXHRcdCdkZWNpbWFsJyA6IGZhbHNlXG5cdH07XG5cblx0dmFyIGRlY29kZSA9IGZ1bmN0aW9uKGh0bWwsIG9wdGlvbnMpIHtcblx0XHRvcHRpb25zID0gbWVyZ2Uob3B0aW9ucywgZGVjb2RlLm9wdGlvbnMpO1xuXHRcdHZhciBzdHJpY3QgPSBvcHRpb25zLnN0cmljdDtcblx0XHRpZiAoc3RyaWN0ICYmIHJlZ2V4SW52YWxpZEVudGl0eS50ZXN0KGh0bWwpKSB7XG5cdFx0XHRwYXJzZUVycm9yKCdtYWxmb3JtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZScpO1xuXHRcdH1cblx0XHRyZXR1cm4gaHRtbC5yZXBsYWNlKHJlZ2V4RGVjb2RlLCBmdW5jdGlvbigkMCwgJDEsICQyLCAkMywgJDQsICQ1LCAkNiwgJDcsICQ4KSB7XG5cdFx0XHR2YXIgY29kZVBvaW50O1xuXHRcdFx0dmFyIHNlbWljb2xvbjtcblx0XHRcdHZhciBkZWNEaWdpdHM7XG5cdFx0XHR2YXIgaGV4RGlnaXRzO1xuXHRcdFx0dmFyIHJlZmVyZW5jZTtcblx0XHRcdHZhciBuZXh0O1xuXG5cdFx0XHRpZiAoJDEpIHtcblx0XHRcdFx0cmVmZXJlbmNlID0gJDE7XG5cdFx0XHRcdC8vIE5vdGU6IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgYGhhcyhkZWNvZGVNYXAsIHJlZmVyZW5jZSlgLlxuXHRcdFx0XHRyZXR1cm4gZGVjb2RlTWFwW3JlZmVyZW5jZV07XG5cdFx0XHR9XG5cblx0XHRcdGlmICgkMikge1xuXHRcdFx0XHQvLyBEZWNvZGUgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMgd2l0aG91dCB0cmFpbGluZyBgO2AsIGUuZy4gYCZhbXBgLlxuXHRcdFx0XHQvLyBUaGlzIGlzIG9ubHkgYSBwYXJzZSBlcnJvciBpZiBpdCBnZXRzIGNvbnZlcnRlZCB0byBgJmAsIG9yIGlmIGl0IGlzXG5cdFx0XHRcdC8vIGZvbGxvd2VkIGJ5IGA9YCBpbiBhbiBhdHRyaWJ1dGUgY29udGV4dC5cblx0XHRcdFx0cmVmZXJlbmNlID0gJDI7XG5cdFx0XHRcdG5leHQgPSAkMztcblx0XHRcdFx0aWYgKG5leHQgJiYgb3B0aW9ucy5pc0F0dHJpYnV0ZVZhbHVlKSB7XG5cdFx0XHRcdFx0aWYgKHN0cmljdCAmJiBuZXh0ID09ICc9Jykge1xuXHRcdFx0XHRcdFx0cGFyc2VFcnJvcignYCZgIGRpZCBub3Qgc3RhcnQgYSBjaGFyYWN0ZXIgcmVmZXJlbmNlJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiAkMDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoc3RyaWN0KSB7XG5cdFx0XHRcdFx0XHRwYXJzZUVycm9yKFxuXHRcdFx0XHRcdFx0XHQnbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZSB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24nXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBOb3RlOiB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGBoYXMoZGVjb2RlTWFwTGVnYWN5LCByZWZlcmVuY2UpYC5cblx0XHRcdFx0XHRyZXR1cm4gZGVjb2RlTWFwTGVnYWN5W3JlZmVyZW5jZV0gKyAobmV4dCB8fCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCQ0KSB7XG5cdFx0XHRcdC8vIERlY29kZSBkZWNpbWFsIGVzY2FwZXMsIGUuZy4gYCYjMTE5NTU4O2AuXG5cdFx0XHRcdGRlY0RpZ2l0cyA9ICQ0O1xuXHRcdFx0XHRzZW1pY29sb24gPSAkNTtcblx0XHRcdFx0aWYgKHN0cmljdCAmJiAhc2VtaWNvbG9uKSB7XG5cdFx0XHRcdFx0cGFyc2VFcnJvcignY2hhcmFjdGVyIHJlZmVyZW5jZSB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb2RlUG9pbnQgPSBwYXJzZUludChkZWNEaWdpdHMsIDEwKTtcblx0XHRcdFx0cmV0dXJuIGNvZGVQb2ludFRvU3ltYm9sKGNvZGVQb2ludCwgc3RyaWN0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCQ2KSB7XG5cdFx0XHRcdC8vIERlY29kZSBoZXhhZGVjaW1hbCBlc2NhcGVzLCBlLmcuIGAmI3gxRDMwNjtgLlxuXHRcdFx0XHRoZXhEaWdpdHMgPSAkNjtcblx0XHRcdFx0c2VtaWNvbG9uID0gJDc7XG5cdFx0XHRcdGlmIChzdHJpY3QgJiYgIXNlbWljb2xvbikge1xuXHRcdFx0XHRcdHBhcnNlRXJyb3IoJ2NoYXJhY3RlciByZWZlcmVuY2Ugd2FzIG5vdCB0ZXJtaW5hdGVkIGJ5IGEgc2VtaWNvbG9uJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29kZVBvaW50ID0gcGFyc2VJbnQoaGV4RGlnaXRzLCAxNik7XG5cdFx0XHRcdHJldHVybiBjb2RlUG9pbnRUb1N5bWJvbChjb2RlUG9pbnQsIHN0cmljdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHdl4oCZcmUgc3RpbGwgaGVyZSwgYGlmICgkNylgIGlzIGltcGxpZWQ7IGl04oCZcyBhbiBhbWJpZ3VvdXNcblx0XHRcdC8vIGFtcGVyc2FuZCBmb3Igc3VyZS4gaHR0cHM6Ly9tdGhzLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzXG5cdFx0XHRpZiAoc3RyaWN0KSB7XG5cdFx0XHRcdHBhcnNlRXJyb3IoXG5cdFx0XHRcdFx0J25hbWVkIGNoYXJhY3RlciByZWZlcmVuY2Ugd2FzIG5vdCB0ZXJtaW5hdGVkIGJ5IGEgc2VtaWNvbG9uJ1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuICQwO1xuXHRcdH0pO1xuXHR9O1xuXHQvLyBFeHBvc2UgZGVmYXVsdCBvcHRpb25zIChzbyB0aGV5IGNhbiBiZSBvdmVycmlkZGVuIGdsb2JhbGx5KS5cblx0ZGVjb2RlLm9wdGlvbnMgPSB7XG5cdFx0J2lzQXR0cmlidXRlVmFsdWUnOiBmYWxzZSxcblx0XHQnc3RyaWN0JzogZmFsc2Vcblx0fTtcblxuXHR2YXIgZXNjYXBlID0gZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlZ2V4RXNjYXBlLCBmdW5jdGlvbigkMCkge1xuXHRcdFx0Ly8gTm90ZTogdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBgaGFzKGVzY2FwZU1hcCwgJDApYCBoZXJlLlxuXHRcdFx0cmV0dXJuIGVzY2FwZU1hcFskMF07XG5cdFx0fSk7XG5cdH07XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0dmFyIGhlID0ge1xuXHRcdCd2ZXJzaW9uJzogJzEuMi4wJyxcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCdkZWNvZGUnOiBkZWNvZGUsXG5cdFx0J2VzY2FwZSc6IGVzY2FwZSxcblx0XHQndW5lc2NhcGUnOiBkZWNvZGVcblx0fTtcblxuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZShmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBoZTtcblx0XHR9KTtcblx0fVx0ZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XG5cdFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gaGU7XG5cdFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cblx0XHRcdGZvciAodmFyIGtleSBpbiBoZSkge1xuXHRcdFx0XHRoYXMoaGUsIGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBoZVtrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7IC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LmhlID0gaGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKCd1bmRlcnNjb3JlJywgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBjdXJyZW50ID0gZ2xvYmFsLl87XG4gICAgdmFyIGV4cG9ydHMgPSBnbG9iYWwuXyA9IGZhY3RvcnkoKTtcbiAgICBleHBvcnRzLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7IGdsb2JhbC5fID0gY3VycmVudDsgcmV0dXJuIGV4cG9ydHM7IH07XG4gIH0oKSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkge1xuICAvLyAgICAgVW5kZXJzY29yZS5qcyAxLjEzLjZcbiAgLy8gICAgIGh0dHBzOi8vdW5kZXJzY29yZWpzLm9yZ1xuICAvLyAgICAgKGMpIDIwMDktMjAyMiBKZXJlbXkgQXNoa2VuYXMsIEp1bGlhbiBHb25nZ3JpanAsIGFuZCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAgLy8gICAgIFVuZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5cbiAgLy8gQ3VycmVudCB2ZXJzaW9uLlxuICB2YXIgVkVSU0lPTiA9ICcxLjEzLjYnO1xuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gIC8vIGluc3RlYWQgb2YgYHdpbmRvd2AgZm9yIGBXZWJXb3JrZXJgIHN1cHBvcnQuXG4gIHZhciByb290ID0gKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmKSB8fFxuICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCkgfHxcbiAgICAgICAgICAgIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCkgfHxcbiAgICAgICAgICAgIHt9O1xuXG4gIC8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQgbm90IGd6aXBwZWQpIHZlcnNpb246XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBTeW1ib2xQcm90byA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnID8gU3ltYm9sLnByb3RvdHlwZSA6IG51bGw7XG5cbiAgLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3JlIHByb3RvdHlwZXMuXG4gIHZhciBwdXNoID0gQXJyYXlQcm90by5wdXNoLFxuICAgICAgc2xpY2UgPSBBcnJheVByb3RvLnNsaWNlLFxuICAgICAgdG9TdHJpbmcgPSBPYmpQcm90by50b1N0cmluZyxcbiAgICAgIGhhc093blByb3BlcnR5ID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAgLy8gTW9kZXJuIGZlYXR1cmUgZGV0ZWN0aW9uLlxuICB2YXIgc3VwcG9ydHNBcnJheUJ1ZmZlciA9IHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgICBzdXBwb3J0c0RhdGFWaWV3ID0gdHlwZW9mIERhdGFWaWV3ICE9PSAndW5kZWZpbmVkJztcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUrKiogbmF0aXZlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8vIGFyZSBkZWNsYXJlZCBoZXJlLlxuICB2YXIgbmF0aXZlSXNBcnJheSA9IEFycmF5LmlzQXJyYXksXG4gICAgICBuYXRpdmVLZXlzID0gT2JqZWN0LmtleXMsXG4gICAgICBuYXRpdmVDcmVhdGUgPSBPYmplY3QuY3JlYXRlLFxuICAgICAgbmF0aXZlSXNWaWV3ID0gc3VwcG9ydHNBcnJheUJ1ZmZlciAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG5cbiAgLy8gQ3JlYXRlIHJlZmVyZW5jZXMgdG8gdGhlc2UgYnVpbHRpbiBmdW5jdGlvbnMgYmVjYXVzZSB3ZSBvdmVycmlkZSB0aGVtLlxuICB2YXIgX2lzTmFOID0gaXNOYU4sXG4gICAgICBfaXNGaW5pdGUgPSBpc0Zpbml0ZTtcblxuICAvLyBLZXlzIGluIElFIDwgOSB0aGF0IHdvbid0IGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLlxuICB2YXIgaGFzRW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpO1xuICB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAndG9TdHJpbmcnLFxuICAgICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuXG4gIC8vIFRoZSBsYXJnZXN0IGludGVnZXIgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgZXhhY3RseS5cbiAgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG5cbiAgLy8gU29tZSBmdW5jdGlvbnMgdGFrZSBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMsIG9yIGEgZmV3IGV4cGVjdGVkXG4gIC8vIGFyZ3VtZW50cyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGVuIGEgdmFyaWFibGUgbnVtYmVyIG9mIHZhbHVlcyB0byBvcGVyYXRlXG4gIC8vIG9uLiBUaGlzIGhlbHBlciBhY2N1bXVsYXRlcyBhbGwgcmVtYWluaW5nIGFyZ3VtZW50cyBwYXN0IHRoZSBmdW5jdGlvbuKAmXNcbiAgLy8gYXJndW1lbnQgbGVuZ3RoIChvciBhbiBleHBsaWNpdCBgc3RhcnRJbmRleGApLCBpbnRvIGFuIGFycmF5IHRoYXQgYmVjb21lc1xuICAvLyB0aGUgbGFzdCBhcmd1bWVudC4gU2ltaWxhciB0byBFUzbigJlzIFwicmVzdCBwYXJhbWV0ZXJcIi5cbiAgZnVuY3Rpb24gcmVzdEFyZ3VtZW50cyhmdW5jLCBzdGFydEluZGV4KSB7XG4gICAgc3RhcnRJbmRleCA9IHN0YXJ0SW5kZXggPT0gbnVsbCA/IGZ1bmMubGVuZ3RoIC0gMSA6ICtzdGFydEluZGV4O1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCksXG4gICAgICAgICAgcmVzdCA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3RbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4ICsgc3RhcnRJbmRleF07XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgYXJndW1lbnRzWzFdLCByZXN0KTtcbiAgICAgIH1cbiAgICAgIHZhciBhcmdzID0gQXJyYXkoc3RhcnRJbmRleCArIDEpO1xuICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc3RhcnRJbmRleDsgaW5kZXgrKykge1xuICAgICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICB9XG4gICAgICBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cbiAgZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgIHJldHVybiB0eXBlID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iaik7XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG4gIGZ1bmN0aW9uIGlzTnVsbChvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/XG4gIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHZvaWQgMDtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuP1xuICBmdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIERPTSBlbGVtZW50P1xuICBmdW5jdGlvbiBpc0VsZW1lbnQob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgYHRvU3RyaW5nYC1iYXNlZCB0eXBlIHRlc3Rlci5cbiAgZnVuY3Rpb24gdGFnVGVzdGVyKG5hbWUpIHtcbiAgICB2YXIgdGFnID0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gdGFnO1xuICAgIH07XG4gIH1cblxuICB2YXIgaXNTdHJpbmcgPSB0YWdUZXN0ZXIoJ1N0cmluZycpO1xuXG4gIHZhciBpc051bWJlciA9IHRhZ1Rlc3RlcignTnVtYmVyJyk7XG5cbiAgdmFyIGlzRGF0ZSA9IHRhZ1Rlc3RlcignRGF0ZScpO1xuXG4gIHZhciBpc1JlZ0V4cCA9IHRhZ1Rlc3RlcignUmVnRXhwJyk7XG5cbiAgdmFyIGlzRXJyb3IgPSB0YWdUZXN0ZXIoJ0Vycm9yJyk7XG5cbiAgdmFyIGlzU3ltYm9sID0gdGFnVGVzdGVyKCdTeW1ib2wnKTtcblxuICB2YXIgaXNBcnJheUJ1ZmZlciA9IHRhZ1Rlc3RlcignQXJyYXlCdWZmZXInKTtcblxuICB2YXIgaXNGdW5jdGlvbiA9IHRhZ1Rlc3RlcignRnVuY3Rpb24nKTtcblxuICAvLyBPcHRpbWl6ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNvbWUgYHR5cGVvZmAgYnVncyBpbiBvbGRcbiAgLy8gdjgsIElFIDExICgjMTYyMSksIFNhZmFyaSA4ICgjMTkyOSksIGFuZCBQaGFudG9tSlMgKCMyMjM2KS5cbiAgdmFyIG5vZGVsaXN0ID0gcm9vdC5kb2N1bWVudCAmJiByb290LmRvY3VtZW50LmNoaWxkTm9kZXM7XG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZWxpc3QgIT0gJ2Z1bmN0aW9uJykge1xuICAgIGlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBpc0Z1bmN0aW9uJDEgPSBpc0Z1bmN0aW9uO1xuXG4gIHZhciBoYXNPYmplY3RUYWcgPSB0YWdUZXN0ZXIoJ09iamVjdCcpO1xuXG4gIC8vIEluIElFIDEwIC0gRWRnZSAxMywgYERhdGFWaWV3YCBoYXMgc3RyaW5nIHRhZyBgJ1tvYmplY3QgT2JqZWN0XSdgLlxuICAvLyBJbiBJRSAxMSwgdGhlIG1vc3QgY29tbW9uIGFtb25nIHRoZW0sIHRoaXMgcHJvYmxlbSBhbHNvIGFwcGxpZXMgdG9cbiAgLy8gYE1hcGAsIGBXZWFrTWFwYCBhbmQgYFNldGAuXG4gIHZhciBoYXNTdHJpbmdUYWdCdWcgPSAoXG4gICAgICAgIHN1cHBvcnRzRGF0YVZpZXcgJiYgaGFzT2JqZWN0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoOCkpKVxuICAgICAgKSxcbiAgICAgIGlzSUUxMSA9ICh0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJyAmJiBoYXNPYmplY3RUYWcobmV3IE1hcCkpO1xuXG4gIHZhciBpc0RhdGFWaWV3ID0gdGFnVGVzdGVyKCdEYXRhVmlldycpO1xuXG4gIC8vIEluIElFIDEwIC0gRWRnZSAxMywgd2UgbmVlZCBhIGRpZmZlcmVudCBoZXVyaXN0aWNcbiAgLy8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGEgYERhdGFWaWV3YC5cbiAgZnVuY3Rpb24gaWUxMElzRGF0YVZpZXcob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGlzRnVuY3Rpb24kMShvYmouZ2V0SW50OCkgJiYgaXNBcnJheUJ1ZmZlcihvYmouYnVmZmVyKTtcbiAgfVxuXG4gIHZhciBpc0RhdGFWaWV3JDEgPSAoaGFzU3RyaW5nVGFnQnVnID8gaWUxMElzRGF0YVZpZXcgOiBpc0RhdGFWaWV3KTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgYEFycmF5LmlzQXJyYXlgLlxuICB2YXIgaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgdGFnVGVzdGVyKCdBcnJheScpO1xuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYGtleWAgaXMgYW4gb3duIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuXG4gIGZ1bmN0aW9uIGhhcyQxKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICB9XG5cbiAgdmFyIGlzQXJndW1lbnRzID0gdGFnVGVzdGVyKCdBcmd1bWVudHMnKTtcblxuICAvLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4gYnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdoZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNwZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUuXG4gIChmdW5jdGlvbigpIHtcbiAgICBpZiAoIWlzQXJndW1lbnRzKGFyZ3VtZW50cykpIHtcbiAgICAgIGlzQXJndW1lbnRzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBoYXMkMShvYmosICdjYWxsZWUnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KCkpO1xuXG4gIHZhciBpc0FyZ3VtZW50cyQxID0gaXNBcmd1bWVudHM7XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuICBmdW5jdGlvbiBpc0Zpbml0ZSQxKG9iaikge1xuICAgIHJldHVybiAhaXNTeW1ib2wob2JqKSAmJiBfaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfVxuXG4gIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFOYD9cbiAgZnVuY3Rpb24gaXNOYU4kMShvYmopIHtcbiAgICByZXR1cm4gaXNOdW1iZXIob2JqKSAmJiBfaXNOYU4ob2JqKTtcbiAgfVxuXG4gIC8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9uLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuICBmdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gQ29tbW9uIGludGVybmFsIGxvZ2ljIGZvciBgaXNBcnJheUxpa2VgIGFuZCBgaXNCdWZmZXJMaWtlYC5cbiAgZnVuY3Rpb24gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0U2l6ZVByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICAgIHZhciBzaXplUHJvcGVydHkgPSBnZXRTaXplUHJvcGVydHkoY29sbGVjdGlvbik7XG4gICAgICByZXR1cm4gdHlwZW9mIHNpemVQcm9wZXJ0eSA9PSAnbnVtYmVyJyAmJiBzaXplUHJvcGVydHkgPj0gMCAmJiBzaXplUHJvcGVydHkgPD0gTUFYX0FSUkFZX0lOREVYO1xuICAgIH1cbiAgfVxuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBnZW5lcmF0ZSBhIGZ1bmN0aW9uIHRvIG9idGFpbiBwcm9wZXJ0eSBga2V5YCBmcm9tIGBvYmpgLlxuICBmdW5jdGlvbiBzaGFsbG93UHJvcGVydHkoa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW2tleV07XG4gICAgfTtcbiAgfVxuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBvYnRhaW4gdGhlIGBieXRlTGVuZ3RoYCBwcm9wZXJ0eSBvZiBhbiBvYmplY3QuXG4gIHZhciBnZXRCeXRlTGVuZ3RoID0gc2hhbGxvd1Byb3BlcnR5KCdieXRlTGVuZ3RoJyk7XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIGRldGVybWluZSB3aGV0aGVyIHdlIHNob3VsZCBzcGVuZCBleHRlbnNpdmUgY2hlY2tzIGFnYWluc3RcbiAgLy8gYEFycmF5QnVmZmVyYCBldCBhbC5cbiAgdmFyIGlzQnVmZmVyTGlrZSA9IGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrKGdldEJ5dGVMZW5ndGgpO1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSB0eXBlZCBhcnJheT9cbiAgdmFyIHR5cGVkQXJyYXlQYXR0ZXJuID0gL1xcW29iamVjdCAoKEl8VWkpbnQoOHwxNnwzMil8RmxvYXQoMzJ8NjQpfFVpbnQ4Q2xhbXBlZHxCaWcoSXxVaSludDY0KUFycmF5XFxdLztcbiAgZnVuY3Rpb24gaXNUeXBlZEFycmF5KG9iaikge1xuICAgIC8vIGBBcnJheUJ1ZmZlci5pc1ZpZXdgIGlzIHRoZSBtb3N0IGZ1dHVyZS1wcm9vZiwgc28gdXNlIGl0IHdoZW4gYXZhaWxhYmxlLlxuICAgIC8vIE90aGVyd2lzZSwgZmFsbCBiYWNrIG9uIHRoZSBhYm92ZSByZWd1bGFyIGV4cHJlc3Npb24uXG4gICAgcmV0dXJuIG5hdGl2ZUlzVmlldyA/IChuYXRpdmVJc1ZpZXcob2JqKSAmJiAhaXNEYXRhVmlldyQxKG9iaikpIDpcbiAgICAgICAgICAgICAgICAgIGlzQnVmZmVyTGlrZShvYmopICYmIHR5cGVkQXJyYXlQYXR0ZXJuLnRlc3QodG9TdHJpbmcuY2FsbChvYmopKTtcbiAgfVxuXG4gIHZhciBpc1R5cGVkQXJyYXkkMSA9IHN1cHBvcnRzQXJyYXlCdWZmZXIgPyBpc1R5cGVkQXJyYXkgOiBjb25zdGFudChmYWxzZSk7XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIG9idGFpbiB0aGUgYGxlbmd0aGAgcHJvcGVydHkgb2YgYW4gb2JqZWN0LlxuICB2YXIgZ2V0TGVuZ3RoID0gc2hhbGxvd1Byb3BlcnR5KCdsZW5ndGgnKTtcblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gY3JlYXRlIGEgc2ltcGxlIGxvb2t1cCBzdHJ1Y3R1cmUuXG4gIC8vIGBjb2xsZWN0Tm9uRW51bVByb3BzYCB1c2VkIHRvIGRlcGVuZCBvbiBgXy5jb250YWluc2AsIGJ1dCB0aGlzIGxlZCB0b1xuICAvLyBjaXJjdWxhciBpbXBvcnRzLiBgZW11bGF0ZWRTZXRgIGlzIGEgb25lLW9mZiBzb2x1dGlvbiB0aGF0IG9ubHkgd29ya3MgZm9yXG4gIC8vIGFycmF5cyBvZiBzdHJpbmdzLlxuICBmdW5jdGlvbiBlbXVsYXRlZFNldChrZXlzKSB7XG4gICAgdmFyIGhhc2ggPSB7fTtcbiAgICBmb3IgKHZhciBsID0ga2V5cy5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgKytpKSBoYXNoW2tleXNbaV1dID0gdHJ1ZTtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGFpbnM6IGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gaGFzaFtrZXldID09PSB0cnVlOyB9LFxuICAgICAgcHVzaDogZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGhhc2hba2V5XSA9IHRydWU7XG4gICAgICAgIHJldHVybiBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyLiBDaGVja3MgYGtleXNgIGZvciB0aGUgcHJlc2VuY2Ugb2Yga2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndFxuICAvLyBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC4gRXh0ZW5kcyBga2V5c2AgaW4gcGxhY2UgaWZcbiAgLy8gbmVlZGVkLlxuICBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cykge1xuICAgIGtleXMgPSBlbXVsYXRlZFNldChrZXlzKTtcbiAgICB2YXIgbm9uRW51bUlkeCA9IG5vbkVudW1lcmFibGVQcm9wcy5sZW5ndGg7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuICAgIHZhciBwcm90byA9IChpc0Z1bmN0aW9uJDEoY29uc3RydWN0b3IpICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkgfHwgT2JqUHJvdG87XG5cbiAgICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS5cbiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7XG4gICAgaWYgKGhhcyQxKG9iaiwgcHJvcCkgJiYgIWtleXMuY29udGFpbnMocHJvcCkpIGtleXMucHVzaChwcm9wKTtcblxuICAgIHdoaWxlIChub25FbnVtSWR4LS0pIHtcbiAgICAgIHByb3AgPSBub25FbnVtZXJhYmxlUHJvcHNbbm9uRW51bUlkeF07XG4gICAgICBpZiAocHJvcCBpbiBvYmogJiYgb2JqW3Byb3BdICE9PSBwcm90b1twcm9wXSAmJiAha2V5cy5jb250YWlucyhwcm9wKSkge1xuICAgICAgICBrZXlzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0cmlldmUgdGhlIG5hbWVzIG9mIGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzLlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNgLlxuICBmdW5jdGlvbiBrZXlzKG9iaikge1xuICAgIGlmICghaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKGhhcyQxKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0eT9cbiAgLy8gQW4gXCJlbXB0eVwiIG9iamVjdCBoYXMgbm8gZW51bWVyYWJsZSBvd24tcHJvcGVydGllcy5cbiAgZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIC8vIFNraXAgdGhlIG1vcmUgZXhwZW5zaXZlIGB0b1N0cmluZ2AtYmFzZWQgdHlwZSBjaGVja3MgaWYgYG9iamAgaGFzIG5vXG4gICAgLy8gYC5sZW5ndGhgLlxuICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgob2JqKTtcbiAgICBpZiAodHlwZW9mIGxlbmd0aCA9PSAnbnVtYmVyJyAmJiAoXG4gICAgICBpc0FycmF5KG9iaikgfHwgaXNTdHJpbmcob2JqKSB8fCBpc0FyZ3VtZW50cyQxKG9iailcbiAgICApKSByZXR1cm4gbGVuZ3RoID09PSAwO1xuICAgIHJldHVybiBnZXRMZW5ndGgoa2V5cyhvYmopKSA9PT0gMDtcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBmdW5jdGlvbiBpc01hdGNoKG9iamVjdCwgYXR0cnMpIHtcbiAgICB2YXIgX2tleXMgPSBrZXlzKGF0dHJzKSwgbGVuZ3RoID0gX2tleXMubGVuZ3RoO1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7XG4gICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBfa2V5c1tpXTtcbiAgICAgIGlmIChhdHRyc1trZXldICE9PSBvYmpba2V5XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXQgY2FuXG4gIC8vIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCBmdW5jdGlvbnMgYWRkZWRcbiAgLy8gdGhyb3VnaCBgXy5taXhpbmAuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cbiAgZnVuY3Rpb24gXyQxKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfJDEpIHJldHVybiBvYmo7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIF8kMSkpIHJldHVybiBuZXcgXyQxKG9iaik7XG4gICAgdGhpcy5fd3JhcHBlZCA9IG9iajtcbiAgfVxuXG4gIF8kMS5WRVJTSU9OID0gVkVSU0lPTjtcblxuICAvLyBFeHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC5cbiAgXyQxLnByb3RvdHlwZS52YWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl93cmFwcGVkO1xuICB9O1xuXG4gIC8vIFByb3ZpZGUgdW53cmFwcGluZyBwcm94aWVzIGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9uc1xuICAvLyBzdWNoIGFzIGFyaXRobWV0aWMgYW5kIEpTT04gc3RyaW5naWZpY2F0aW9uLlxuICBfJDEucHJvdG90eXBlLnZhbHVlT2YgPSBfJDEucHJvdG90eXBlLnRvSlNPTiA9IF8kMS5wcm90b3R5cGUudmFsdWU7XG5cbiAgXyQxLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBTdHJpbmcodGhpcy5fd3JhcHBlZCk7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gd3JhcCBvciBzaGFsbG93LWNvcHkgYW4gQXJyYXlCdWZmZXIsXG4gIC8vIHR5cGVkIGFycmF5IG9yIERhdGFWaWV3IHRvIGEgbmV3IHZpZXcsIHJldXNpbmcgdGhlIGJ1ZmZlci5cbiAgZnVuY3Rpb24gdG9CdWZmZXJWaWV3KGJ1ZmZlclNvdXJjZSkge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShcbiAgICAgIGJ1ZmZlclNvdXJjZS5idWZmZXIgfHwgYnVmZmVyU291cmNlLFxuICAgICAgYnVmZmVyU291cmNlLmJ5dGVPZmZzZXQgfHwgMCxcbiAgICAgIGdldEJ5dGVMZW5ndGgoYnVmZmVyU291cmNlKVxuICAgICk7XG4gIH1cblxuICAvLyBXZSB1c2UgdGhpcyBzdHJpbmcgdHdpY2UsIHNvIGdpdmUgaXQgYSBuYW1lIGZvciBtaW5pZmljYXRpb24uXG4gIHZhciB0YWdEYXRhVmlldyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBfLmlzRXF1YWxgLlxuICBmdW5jdGlvbiBlcShhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cHM6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gICAgaWYgKGEgPT09IGIpIHJldHVybiBhICE9PSAwIHx8IDEgLyBhID09PSAxIC8gYjtcbiAgICAvLyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgb25seSBlcXVhbCB0byBpdHNlbGYgKHN0cmljdCBjb21wYXJpc29uKS5cbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAgaWYgKGEgIT09IGEpIHJldHVybiBiICE9PSBiO1xuICAgIC8vIEV4aGF1c3QgcHJpbWl0aXZlIGNoZWNrc1xuICAgIHZhciB0eXBlID0gdHlwZW9mIGE7XG4gICAgaWYgKHR5cGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKTtcbiAgfVxuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgXy5pc0VxdWFsYC5cbiAgZnVuY3Rpb24gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfJDEpIGEgPSBhLl93cmFwcGVkO1xuICAgIGlmIChiIGluc3RhbmNlb2YgXyQxKSBiID0gYi5fd3JhcHBlZDtcbiAgICAvLyBDb21wYXJlIGBbW0NsYXNzXV1gIG5hbWVzLlxuICAgIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICAgIGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTtcbiAgICAvLyBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBJRSAxMCAtIEVkZ2UgMTMuXG4gICAgaWYgKGhhc1N0cmluZ1RhZ0J1ZyAmJiBjbGFzc05hbWUgPT0gJ1tvYmplY3QgT2JqZWN0XScgJiYgaXNEYXRhVmlldyQxKGEpKSB7XG4gICAgICBpZiAoIWlzRGF0YVZpZXckMShiKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgY2xhc3NOYW1lID0gdGFnRGF0YVZpZXc7XG4gICAgfVxuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAvLyBUaGVzZSB0eXBlcyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuXG4gICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuICAgICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTi5cbiAgICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IFN5bWJvbF0nOlxuICAgICAgICByZXR1cm4gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGEpID09PSBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYik7XG4gICAgICBjYXNlICdbb2JqZWN0IEFycmF5QnVmZmVyXSc6XG4gICAgICBjYXNlIHRhZ0RhdGFWaWV3OlxuICAgICAgICAvLyBDb2VyY2UgdG8gdHlwZWQgYXJyYXkgc28gd2UgY2FuIGZhbGwgdGhyb3VnaC5cbiAgICAgICAgcmV0dXJuIGRlZXBFcSh0b0J1ZmZlclZpZXcoYSksIHRvQnVmZmVyVmlldyhiKSwgYVN0YWNrLCBiU3RhY2spO1xuICAgIH1cblxuICAgIHZhciBhcmVBcnJheXMgPSBjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgaWYgKCFhcmVBcnJheXMgJiYgaXNUeXBlZEFycmF5JDEoYSkpIHtcbiAgICAgICAgdmFyIGJ5dGVMZW5ndGggPSBnZXRCeXRlTGVuZ3RoKGEpO1xuICAgICAgICBpZiAoYnl0ZUxlbmd0aCAhPT0gZ2V0Qnl0ZUxlbmd0aChiKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoYS5idWZmZXIgPT09IGIuYnVmZmVyICYmIGEuYnl0ZU9mZnNldCA9PT0gYi5ieXRlT2Zmc2V0KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgYXJlQXJyYXlzID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFhcmVBcnJheXMpIHtcbiAgICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFycmF5YHNcbiAgICAgIC8vIGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAgICBpZiAoYUN0b3IgIT09IGJDdG9yICYmICEoaXNGdW5jdGlvbiQxKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGdW5jdGlvbiQxKGJDdG9yKSAmJiBiQ3RvciBpbnN0YW5jZW9mIGJDdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBpbiBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXG4gICAgLy8gc3RydWN0dXJlcyBpcyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9uIGBKT2AuXG5cbiAgICAvLyBJbml0aWFsaXppbmcgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgLy8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0gZm9yIG9iamVjdHMgYW5kIGFycmF5cyBjb21wYXJpc29uLlxuICAgIGFTdGFjayA9IGFTdGFjayB8fCBbXTtcbiAgICBiU3RhY2sgPSBiU3RhY2sgfHwgW107XG4gICAgdmFyIGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBMaW5lYXIgc2VhcmNoLiBQZXJmb3JtYW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2ZcbiAgICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucHVzaChhKTtcbiAgICBiU3RhY2sucHVzaChiKTtcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgIGlmIChhcmVBcnJheXMpIHtcbiAgICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5LlxuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBpZiAoIWVxKGFbbGVuZ3RoXSwgYltsZW5ndGhdLCBhU3RhY2ssIGJTdGFjaykpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVlcCBjb21wYXJlIG9iamVjdHMuXG4gICAgICB2YXIgX2tleXMgPSBrZXlzKGEpLCBrZXk7XG4gICAgICBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZvcmUgY29tcGFyaW5nIGRlZXAgZXF1YWxpdHkuXG4gICAgICBpZiAoa2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIC8vIERlZXAgY29tcGFyZSBlYWNoIG1lbWJlclxuICAgICAgICBrZXkgPSBfa2V5c1tsZW5ndGhdO1xuICAgICAgICBpZiAoIShoYXMkMShiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXldLCBhU3RhY2ssIGJTdGFjaykpKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wb3AoKTtcbiAgICBiU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbiAgZnVuY3Rpb24gaXNFcXVhbChhLCBiKSB7XG4gICAgcmV0dXJuIGVxKGEsIGIpO1xuICB9XG5cbiAgLy8gUmV0cmlldmUgYWxsIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGFuIG9iamVjdC5cbiAgZnVuY3Rpb24gYWxsS2V5cyhvYmopIHtcbiAgICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9XG5cbiAgLy8gU2luY2UgdGhlIHJlZ3VsYXIgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIHR5cGUgdGVzdHMgZG9uJ3Qgd29yayBmb3JcbiAgLy8gc29tZSB0eXBlcyBpbiBJRSAxMSwgd2UgdXNlIGEgZmluZ2VycHJpbnRpbmcgaGV1cmlzdGljIGluc3RlYWQsIGJhc2VkXG4gIC8vIG9uIHRoZSBtZXRob2RzLiBJdCdzIG5vdCBncmVhdCwgYnV0IGl0J3MgdGhlIGJlc3Qgd2UgZ290LlxuICAvLyBUaGUgZmluZ2VycHJpbnQgbWV0aG9kIGxpc3RzIGFyZSBkZWZpbmVkIGJlbG93LlxuICBmdW5jdGlvbiBpZTExZmluZ2VycHJpbnQobWV0aG9kcykge1xuICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgobWV0aG9kcyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YCBoYXZlIG5vIGVudW1lcmFibGUga2V5cy5cbiAgICAgIHZhciBrZXlzID0gYWxsS2V5cyhvYmopO1xuICAgICAgaWYgKGdldExlbmd0aChrZXlzKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzRnVuY3Rpb24kMShvYmpbbWV0aG9kc1tpXV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBJZiB3ZSBhcmUgdGVzdGluZyBhZ2FpbnN0IGBXZWFrTWFwYCwgd2UgbmVlZCB0byBlbnN1cmUgdGhhdFxuICAgICAgLy8gYG9iamAgZG9lc24ndCBoYXZlIGEgYGZvckVhY2hgIG1ldGhvZCBpbiBvcmRlciB0byBkaXN0aW5ndWlzaFxuICAgICAgLy8gaXQgZnJvbSBhIHJlZ3VsYXIgYE1hcGAuXG4gICAgICByZXR1cm4gbWV0aG9kcyAhPT0gd2Vha01hcE1ldGhvZHMgfHwgIWlzRnVuY3Rpb24kMShvYmpbZm9yRWFjaE5hbWVdKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSW4gdGhlIGludGVyZXN0IG9mIGNvbXBhY3QgbWluaWZpY2F0aW9uLCB3ZSB3cml0ZVxuICAvLyBlYWNoIHN0cmluZyBpbiB0aGUgZmluZ2VycHJpbnRzIG9ubHkgb25jZS5cbiAgdmFyIGZvckVhY2hOYW1lID0gJ2ZvckVhY2gnLFxuICAgICAgaGFzTmFtZSA9ICdoYXMnLFxuICAgICAgY29tbW9uSW5pdCA9IFsnY2xlYXInLCAnZGVsZXRlJ10sXG4gICAgICBtYXBUYWlsID0gWydnZXQnLCBoYXNOYW1lLCAnc2V0J107XG5cbiAgLy8gYE1hcGAsIGBXZWFrTWFwYCBhbmQgYFNldGAgZWFjaCBoYXZlIHNsaWdodGx5IGRpZmZlcmVudFxuICAvLyBjb21iaW5hdGlvbnMgb2YgdGhlIGFib3ZlIHN1Ymxpc3RzLlxuICB2YXIgbWFwTWV0aG9kcyA9IGNvbW1vbkluaXQuY29uY2F0KGZvckVhY2hOYW1lLCBtYXBUYWlsKSxcbiAgICAgIHdlYWtNYXBNZXRob2RzID0gY29tbW9uSW5pdC5jb25jYXQobWFwVGFpbCksXG4gICAgICBzZXRNZXRob2RzID0gWydhZGQnXS5jb25jYXQoY29tbW9uSW5pdCwgZm9yRWFjaE5hbWUsIGhhc05hbWUpO1xuXG4gIHZhciBpc01hcCA9IGlzSUUxMSA/IGllMTFmaW5nZXJwcmludChtYXBNZXRob2RzKSA6IHRhZ1Rlc3RlcignTWFwJyk7XG5cbiAgdmFyIGlzV2Vha01hcCA9IGlzSUUxMSA/IGllMTFmaW5nZXJwcmludCh3ZWFrTWFwTWV0aG9kcykgOiB0YWdUZXN0ZXIoJ1dlYWtNYXAnKTtcblxuICB2YXIgaXNTZXQgPSBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQoc2V0TWV0aG9kcykgOiB0YWdUZXN0ZXIoJ1NldCcpO1xuXG4gIHZhciBpc1dlYWtTZXQgPSB0YWdUZXN0ZXIoJ1dlYWtTZXQnKTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIGZ1bmN0aW9uIHZhbHVlcyhvYmopIHtcbiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDtcbiAgICB2YXIgdmFsdWVzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZXNbaV0gPSBvYmpbX2tleXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIC8vIFRoZSBvcHBvc2l0ZSBvZiBgXy5vYmplY3RgIHdpdGggb25lIGFyZ3VtZW50LlxuICBmdW5jdGlvbiBwYWlycyhvYmopIHtcbiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDtcbiAgICB2YXIgcGFpcnMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhaXJzW2ldID0gW19rZXlzW2ldLCBvYmpbX2tleXNbaV1dXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9XG5cbiAgLy8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxlLlxuICBmdW5jdGlvbiBpbnZlcnQob2JqKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtvYmpbX2tleXNbaV1dXSA9IF9rZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0LlxuICBmdW5jdGlvbiBmdW5jdGlvbnMob2JqKSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKGlzRnVuY3Rpb24kMShvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfVxuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhc3NpZ25lciBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGtleXNGdW5jLCBkZWZhdWx0cykge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgaWYgKGRlZmF1bHRzKSBvYmogPSBPYmplY3Qob2JqKTtcbiAgICAgIGlmIChsZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqO1xuICAgICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4XSxcbiAgICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLFxuICAgICAgICAgICAgbCA9IGtleXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmICghZGVmYXVsdHMgfHwgb2JqW2tleV0gPT09IHZvaWQgMCkgb2JqW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9XG5cbiAgLy8gRXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGluIHBhc3NlZC1pbiBvYmplY3QocykuXG4gIHZhciBleHRlbmQgPSBjcmVhdGVBc3NpZ25lcihhbGxLZXlzKTtcblxuICAvLyBBc3NpZ25zIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBvd24gcHJvcGVydGllcyBpbiB0aGUgcGFzc2VkLWluXG4gIC8vIG9iamVjdChzKS5cbiAgLy8gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ24pXG4gIHZhciBleHRlbmRPd24gPSBjcmVhdGVBc3NpZ25lcihrZXlzKTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICB2YXIgZGVmYXVsdHMgPSBjcmVhdGVBc3NpZ25lcihhbGxLZXlzLCB0cnVlKTtcblxuICAvLyBDcmVhdGUgYSBuYWtlZCBmdW5jdGlvbiByZWZlcmVuY2UgZm9yIHN1cnJvZ2F0ZS1wcm90b3R5cGUtc3dhcHBpbmcuXG4gIGZ1bmN0aW9uIGN0b3IoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCl7fTtcbiAgfVxuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuXG4gIGZ1bmN0aW9uIGJhc2VDcmVhdGUocHJvdG90eXBlKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90b3R5cGUpKSByZXR1cm4ge307XG4gICAgaWYgKG5hdGl2ZUNyZWF0ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIHZhciBDdG9yID0gY3RvcigpO1xuICAgIEN0b3IucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICAgIHZhciByZXN1bHQgPSBuZXcgQ3RvcjtcbiAgICBDdG9yLnByb3RvdHlwZSA9IG51bGw7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgZ2l2ZW4gcHJvdG90eXBlIG9iamVjdC5cbiAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVuIHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgLy8gY3JlYXRlZCBvYmplY3QuXG4gIGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIHByb3BzKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTtcbiAgICBpZiAocHJvcHMpIGV4dGVuZE93bihyZXN1bHQsIHByb3BzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LlxuICBmdW5jdGlvbiBjbG9uZShvYmopIHtcbiAgICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gICAgcmV0dXJuIGlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogZXh0ZW5kKHt9LCBvYmopO1xuICB9XG5cbiAgLy8gSW52b2tlcyBgaW50ZXJjZXB0b3JgIHdpdGggdGhlIGBvYmpgIGFuZCB0aGVuIHJldHVybnMgYG9iamAuXG4gIC8vIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gXCJ0YXAgaW50b1wiIGEgbWV0aG9kIGNoYWluLCBpblxuICAvLyBvcmRlciB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFpbi5cbiAgZnVuY3Rpb24gdGFwKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvLyBOb3JtYWxpemUgYSAoZGVlcCkgcHJvcGVydHkgYHBhdGhgIHRvIGFycmF5LlxuICAvLyBMaWtlIGBfLml0ZXJhdGVlYCwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY3VzdG9taXplZC5cbiAgZnVuY3Rpb24gdG9QYXRoJDEocGF0aCkge1xuICAgIHJldHVybiBpc0FycmF5KHBhdGgpID8gcGF0aCA6IFtwYXRoXTtcbiAgfVxuICBfJDEudG9QYXRoID0gdG9QYXRoJDE7XG5cbiAgLy8gSW50ZXJuYWwgd3JhcHBlciBmb3IgYF8udG9QYXRoYCB0byBlbmFibGUgbWluaWZpY2F0aW9uLlxuICAvLyBTaW1pbGFyIHRvIGBjYmAgZm9yIGBfLml0ZXJhdGVlYC5cbiAgZnVuY3Rpb24gdG9QYXRoKHBhdGgpIHtcbiAgICByZXR1cm4gXyQxLnRvUGF0aChwYXRoKTtcbiAgfVxuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIG9idGFpbiBhIG5lc3RlZCBwcm9wZXJ0eSBpbiBgb2JqYCBhbG9uZyBgcGF0aGAuXG4gIGZ1bmN0aW9uIGRlZXBHZXQob2JqLCBwYXRoKSB7XG4gICAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICAgIG9iaiA9IG9ialtwYXRoW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIGxlbmd0aCA/IG9iaiA6IHZvaWQgMDtcbiAgfVxuXG4gIC8vIEdldCB0aGUgdmFsdWUgb2YgdGhlIChkZWVwKSBwcm9wZXJ0eSBvbiBgcGF0aGAgZnJvbSBgb2JqZWN0YC5cbiAgLy8gSWYgYW55IHByb3BlcnR5IGluIGBwYXRoYCBkb2VzIG5vdCBleGlzdCBvciBpZiB0aGUgdmFsdWUgaXNcbiAgLy8gYHVuZGVmaW5lZGAsIHJldHVybiBgZGVmYXVsdFZhbHVlYCBpbnN0ZWFkLlxuICAvLyBUaGUgYHBhdGhgIGlzIG5vcm1hbGl6ZWQgdGhyb3VnaCBgXy50b1BhdGhgLlxuICBmdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgICB2YXIgdmFsdWUgPSBkZWVwR2V0KG9iamVjdCwgdG9QYXRoKHBhdGgpKTtcbiAgICByZXR1cm4gaXNVbmRlZmluZWQodmFsdWUpID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gIH1cblxuICAvLyBTaG9ydGN1dCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHByb3BlcnR5IGRpcmVjdGx5IG9uXG4gIC8vIGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIG5vdCBvbiBhIHByb3RvdHlwZSkuIFVubGlrZSB0aGUgaW50ZXJuYWwgYGhhc2BcbiAgLy8gZnVuY3Rpb24sIHRoaXMgcHVibGljIHZlcnNpb24gY2FuIGFsc28gdHJhdmVyc2UgbmVzdGVkIHByb3BlcnRpZXMuXG4gIGZ1bmN0aW9uIGhhcyhvYmosIHBhdGgpIHtcbiAgICBwYXRoID0gdG9QYXRoKHBhdGgpO1xuICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gcGF0aFtpXTtcbiAgICAgIGlmICghaGFzJDEob2JqLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICBvYmogPSBvYmpba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuICEhbGVuZ3RoO1xuICB9XG5cbiAgLy8gS2VlcCB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gYXJvdW5kIGZvciBkZWZhdWx0IGl0ZXJhdGVlcy5cbiAgZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2ZcbiAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuXG4gIGZ1bmN0aW9uIG1hdGNoZXIoYXR0cnMpIHtcbiAgICBhdHRycyA9IGV4dGVuZE93bih7fSwgYXR0cnMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBpc01hdGNoKG9iaiwgYXR0cnMpO1xuICAgIH07XG4gIH1cblxuICAvLyBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBwYXNzZWQgYW4gb2JqZWN0LCB3aWxsIHRyYXZlcnNlIHRoYXQgb2JqZWN04oCZc1xuICAvLyBwcm9wZXJ0aWVzIGRvd24gdGhlIGdpdmVuIGBwYXRoYCwgc3BlY2lmaWVkIGFzIGFuIGFycmF5IG9mIGtleXMgb3IgaW5kaWNlcy5cbiAgZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICAgIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIGRlZXBHZXQob2JqLCBwYXRoKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvblxuICAvLyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4gb3RoZXIgVW5kZXJzY29yZVxuICAvLyBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIG9wdGltaXplQ2IoZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSByZXR1cm4gZnVuYztcbiAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgICAgfTtcbiAgICAgIC8vIFRoZSAyLWFyZ3VtZW50IGNhc2UgaXMgb21pdHRlZCBiZWNhdXNlIHdl4oCZcmUgbm90IHVzaW5nIGl0LlxuICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBlYWNoXG4gIC8vIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXIgYF8uaWRlbnRpdHlgLFxuICAvLyBhbiBhcmJpdHJhcnkgY2FsbGJhY2ssIGEgcHJvcGVydHkgbWF0Y2hlciwgb3IgYSBwcm9wZXJ0eSBhY2Nlc3Nvci5cbiAgZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gaWRlbnRpdHk7XG4gICAgaWYgKGlzRnVuY3Rpb24kMSh2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkpIHJldHVybiBtYXRjaGVyKHZhbHVlKTtcbiAgICByZXR1cm4gcHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgLy8gRXh0ZXJuYWwgd3JhcHBlciBmb3Igb3VyIGNhbGxiYWNrIGdlbmVyYXRvci4gVXNlcnMgbWF5IGN1c3RvbWl6ZVxuICAvLyBgXy5pdGVyYXRlZWAgaWYgdGhleSB3YW50IGFkZGl0aW9uYWwgcHJlZGljYXRlL2l0ZXJhdGVlIHNob3J0aGFuZCBzdHlsZXMuXG4gIC8vIFRoaXMgYWJzdHJhY3Rpb24gaGlkZXMgdGhlIGludGVybmFsLW9ubHkgYGFyZ0NvdW50YCBhcmd1bWVudC5cbiAgZnVuY3Rpb24gaXRlcmF0ZWUodmFsdWUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gYmFzZUl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0LCBJbmZpbml0eSk7XG4gIH1cbiAgXyQxLml0ZXJhdGVlID0gaXRlcmF0ZWU7XG5cbiAgLy8gVGhlIGZ1bmN0aW9uIHdlIGNhbGwgaW50ZXJuYWxseSB0byBnZW5lcmF0ZSBhIGNhbGxiYWNrLiBJdCBpbnZva2VzXG4gIC8vIGBfLml0ZXJhdGVlYCBpZiBvdmVycmlkZGVuLCBvdGhlcndpc2UgYGJhc2VJdGVyYXRlZWAuXG4gIGZ1bmN0aW9uIGNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChfJDEuaXRlcmF0ZWUgIT09IGl0ZXJhdGVlKSByZXR1cm4gXyQxLml0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gYmFzZUl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBgaXRlcmF0ZWVgIHRvIGVhY2ggZWxlbWVudCBvZiBgb2JqYC5cbiAgLy8gSW4gY29udHJhc3QgdG8gYF8ubWFwYCBpdCByZXR1cm5zIGFuIG9iamVjdC5cbiAgZnVuY3Rpb24gbWFwT2JqZWN0KG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IF9rZXlzLmxlbmd0aCxcbiAgICAgICAgcmVzdWx0cyA9IHt9O1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXNbaW5kZXhdO1xuICAgICAgcmVzdWx0c1tjdXJyZW50S2V5XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbi4gT2Z0ZW4gdXNlZnVsIG91dHNpZGUgb2YgVW5kZXJzY29yZS5cbiAgZnVuY3Rpb24gbm9vcCgpe31cblxuICAvLyBHZW5lcmF0ZXMgYSBmdW5jdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2ZW4gcHJvcGVydHkuXG4gIGZ1bmN0aW9uIHByb3BlcnR5T2Yob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbm9vcDtcbiAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgcmV0dXJuIGdldChvYmosIHBhdGgpO1xuICAgIH07XG4gIH1cblxuICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy5cbiAgZnVuY3Rpb24gdGltZXMobiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgYWNjdW0gPSBBcnJheShNYXRoLm1heCgwLCBuKSk7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgYWNjdW1baV0gPSBpdGVyYXRlZShpKTtcbiAgICByZXR1cm4gYWNjdW07XG4gIH1cblxuICAvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIGBtaW5gIGFuZCBgbWF4YCAoaW5jbHVzaXZlKS5cbiAgZnVuY3Rpb24gcmFuZG9tKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PSBudWxsKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cbiAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcbiAgfVxuXG4gIC8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci5cbiAgdmFyIG5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gZ2VuZXJhdGUgZnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzXG4gIC8vIHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxuICBmdW5jdGlvbiBjcmVhdGVFc2NhcGVyKG1hcCkge1xuICAgIHZhciBlc2NhcGVyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXBbbWF0Y2hdO1xuICAgIH07XG4gICAgLy8gUmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVkLlxuICAgIHZhciBzb3VyY2UgPSAnKD86JyArIGtleXMobWFwKS5qb2luKCd8JykgKyAnKSc7XG4gICAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTtcbiAgICB2YXIgcmVwbGFjZVJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UsICdnJyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsgc3RyaW5nO1xuICAgICAgcmV0dXJuIHRlc3RSZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJlcGxhY2UocmVwbGFjZVJlZ2V4cCwgZXNjYXBlcikgOiBzdHJpbmc7XG4gICAgfTtcbiAgfVxuXG4gIC8vIEludGVybmFsIGxpc3Qgb2YgSFRNTCBlbnRpdGllcyBmb3IgZXNjYXBpbmcuXG4gIHZhciBlc2NhcGVNYXAgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxuICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgICAnYCc6ICcmI3g2MDsnXG4gIH07XG5cbiAgLy8gRnVuY3Rpb24gZm9yIGVzY2FwaW5nIHN0cmluZ3MgdG8gSFRNTCBpbnRlcnBvbGF0aW9uLlxuICB2YXIgX2VzY2FwZSA9IGNyZWF0ZUVzY2FwZXIoZXNjYXBlTWFwKTtcblxuICAvLyBJbnRlcm5hbCBsaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIHVuZXNjYXBpbmcuXG4gIHZhciB1bmVzY2FwZU1hcCA9IGludmVydChlc2NhcGVNYXApO1xuXG4gIC8vIEZ1bmN0aW9uIGZvciB1bmVzY2FwaW5nIHN0cmluZ3MgZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBfdW5lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKHVuZXNjYXBlTWFwKTtcblxuICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMuIENoYW5nZSB0aGVcbiAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICB2YXIgdGVtcGxhdGVTZXR0aW5ncyA9IF8kMS50ZW1wbGF0ZVNldHRpbmdzID0ge1xuICAgIGV2YWx1YXRlOiAvPCUoW1xcc1xcU10rPyklPi9nLFxuICAgIGludGVycG9sYXRlOiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgICBlc2NhcGU6IC88JS0oW1xcc1xcU10rPyklPi9nXG4gIH07XG5cbiAgLy8gV2hlbiBjdXN0b21pemluZyBgXy50ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidcIjogXCInXCIsXG4gICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgJ1xccic6ICdyJyxcbiAgICAnXFxuJzogJ24nLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlUmVnRXhwID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIGZ1bmN0aW9uIGVzY2FwZUNoYXIobWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07XG4gIH1cblxuICAvLyBJbiBvcmRlciB0byBwcmV2ZW50IHRoaXJkLXBhcnR5IGNvZGUgaW5qZWN0aW9uIHRocm91Z2hcbiAgLy8gYF8udGVtcGxhdGVTZXR0aW5ncy52YXJpYWJsZWAsIHdlIHRlc3QgaXQgYWdhaW5zdCB0aGUgZm9sbG93aW5nIHJlZ3VsYXJcbiAgLy8gZXhwcmVzc2lvbi4gSXQgaXMgaW50ZW50aW9uYWxseSBhIGJpdCBtb3JlIGxpYmVyYWwgdGhhbiBqdXN0IG1hdGNoaW5nIHZhbGlkXG4gIC8vIGlkZW50aWZpZXJzLCBidXQgc3RpbGwgcHJldmVudHMgcG9zc2libGUgbG9vcGhvbGVzIHRocm91Z2ggZGVmYXVsdHMgb3JcbiAgLy8gZGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50LlxuICB2YXIgYmFyZUlkZW50aWZpZXIgPSAvXlxccyooXFx3fFxcJCkrXFxzKiQvO1xuXG4gIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uXG4gIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSxcbiAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuXG4gIC8vIE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgZnVuY3Rpb24gdGVtcGxhdGUodGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IGRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXyQxLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcblxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNlID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlUmVnRXhwLCBlc2NhcGVDaGFyKTtcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgaW50ZXJwb2xhdGUgKyBcIikpPT1udWxsPycnOl9fdCkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGUgKyBcIlxcbl9fcCs9J1wiO1xuICAgICAgfVxuXG4gICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZzZXQuXG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlO1xuICAgIGlmIChhcmd1bWVudCkge1xuICAgICAgLy8gSW5zdXJlIGFnYWluc3QgdGhpcmQtcGFydHkgY29kZSBpbmplY3Rpb24uIChDVkUtMjAyMS0yMzM1OClcbiAgICAgIGlmICghYmFyZUlkZW50aWZpZXIudGVzdChhcmd1bWVudCkpIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3ZhcmlhYmxlIGlzIG5vdCBhIGJhcmUgaWRlbnRpZmllcjogJyArIGFyZ3VtZW50XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgICAgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XFxuJyArIHNvdXJjZSArICd9XFxuJztcbiAgICAgIGFyZ3VtZW50ID0gJ29iaic7XG4gICAgfVxuXG4gICAgc291cmNlID0gXCJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sXCIgK1xuICAgICAgXCJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xcblwiICtcbiAgICAgIHNvdXJjZSArICdyZXR1cm4gX19wO1xcbic7XG5cbiAgICB2YXIgcmVuZGVyO1xuICAgIHRyeSB7XG4gICAgICByZW5kZXIgPSBuZXcgRnVuY3Rpb24oYXJndW1lbnQsICdfJywgc291cmNlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8kMSk7XG4gICAgfTtcblxuICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsgJyl7XFxuJyArIHNvdXJjZSArICd9JztcblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vIFRyYXZlcnNlcyB0aGUgY2hpbGRyZW4gb2YgYG9iamAgYWxvbmcgYHBhdGhgLiBJZiBhIGNoaWxkIGlzIGEgZnVuY3Rpb24sIGl0XG4gIC8vIGlzIGludm9rZWQgd2l0aCBpdHMgcGFyZW50IGFzIGNvbnRleHQuIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaW5hbFxuICAvLyBjaGlsZCwgb3IgYGZhbGxiYWNrYCBpZiBhbnkgY2hpbGQgaXMgdW5kZWZpbmVkLlxuICBmdW5jdGlvbiByZXN1bHQob2JqLCBwYXRoLCBmYWxsYmFjaykge1xuICAgIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gICAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaXNGdW5jdGlvbiQxKGZhbGxiYWNrKSA/IGZhbGxiYWNrLmNhbGwob2JqKSA6IGZhbGxiYWNrO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW3BhdGhbaV1dO1xuICAgICAgaWYgKHByb3AgPT09IHZvaWQgMCkge1xuICAgICAgICBwcm9wID0gZmFsbGJhY2s7XG4gICAgICAgIGkgPSBsZW5ndGg7IC8vIEVuc3VyZSB3ZSBkb24ndCBjb250aW51ZSBpdGVyYXRpbmcuXG4gICAgICB9XG4gICAgICBvYmogPSBpc0Z1bmN0aW9uJDEocHJvcCkgPyBwcm9wLmNhbGwob2JqKSA6IHByb3A7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgY2xpZW50IHNlc3Npb24pLlxuICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRzLlxuICB2YXIgaWRDb3VudGVyID0gMDtcbiAgZnVuY3Rpb24gdW5pcXVlSWQocHJlZml4KSB7XG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcbiAgICByZXR1cm4gcHJlZml4ID8gcHJlZml4ICsgaWQgOiBpZDtcbiAgfVxuXG4gIC8vIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVjdC5cbiAgZnVuY3Rpb24gY2hhaW4ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyQxKG9iaik7XG4gICAgaW5zdGFuY2UuX2NoYWluID0gdHJ1ZTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBleGVjdXRlIGBzb3VyY2VGdW5jYCBib3VuZCB0byBgY29udGV4dGAgd2l0aCBvcHRpb25hbFxuICAvLyBgYXJnc2AuIERldGVybWluZXMgd2hldGhlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvciBvciBhcyBhXG4gIC8vIG5vcm1hbCBmdW5jdGlvbi5cbiAgZnVuY3Rpb24gZXhlY3V0ZUJvdW5kKHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgaWYgKGlzT2JqZWN0KHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH1cblxuICAvLyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBieSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUgb2YgaXRzXG4gIC8vIGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250ZXh0LiBgX2AgYWN0c1xuICAvLyBhcyBhIHBsYWNlaG9sZGVyIGJ5IGRlZmF1bHQsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmVcbiAgLy8gcHJlLWZpbGxlZC4gU2V0IGBfLnBhcnRpYWwucGxhY2Vob2xkZXJgIGZvciBhIGN1c3RvbSBwbGFjZWhvbGRlciBhcmd1bWVudC5cbiAgdmFyIHBhcnRpYWwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIGJvdW5kQXJncykge1xuICAgIHZhciBwbGFjZWhvbGRlciA9IHBhcnRpYWwucGxhY2Vob2xkZXI7XG4gICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSAwLCBsZW5ndGggPSBib3VuZEFyZ3MubGVuZ3RoO1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBhcmdzW2ldID0gYm91bmRBcmdzW2ldID09PSBwbGFjZWhvbGRlciA/IGFyZ3VtZW50c1twb3NpdGlvbisrXSA6IGJvdW5kQXJnc1tpXTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGFyZ3VtZW50cy5sZW5ndGgpIGFyZ3MucHVzaChhcmd1bWVudHNbcG9zaXRpb24rK10pO1xuICAgICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgdGhpcywgdGhpcywgYXJncyk7XG4gICAgfTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH0pO1xuXG4gIHBhcnRpYWwucGxhY2Vob2xkZXIgPSBfJDE7XG5cbiAgLy8gQ3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmluZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsXG4gIC8vIG9wdGlvbmFsbHkpLlxuICB2YXIgYmluZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJncykge1xuICAgIGlmICghaXNGdW5jdGlvbiQxKGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVuY3Rpb24nKTtcbiAgICB2YXIgYm91bmQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGNhbGxBcmdzKSB7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChjYWxsQXJncykpO1xuICAgIH0pO1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIGZvciBjb2xsZWN0aW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2xsZWN0aW9uXG4gIC8vIHNob3VsZCBiZSBpdGVyYXRlZCBhcyBhbiBhcnJheSBvciBhcyBhbiBvYmplY3QuXG4gIC8vIFJlbGF0ZWQ6IGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aFxuICAvLyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NFxuICB2YXIgaXNBcnJheUxpa2UgPSBjcmVhdGVTaXplUHJvcGVydHlDaGVjayhnZXRMZW5ndGgpO1xuXG4gIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgZnVuY3Rpb24gZmxhdHRlbiQxKGlucHV0LCBkZXB0aCwgc3RyaWN0LCBvdXRwdXQpIHtcbiAgICBvdXRwdXQgPSBvdXRwdXQgfHwgW107XG4gICAgaWYgKCFkZXB0aCAmJiBkZXB0aCAhPT0gMCkge1xuICAgICAgZGVwdGggPSBJbmZpbml0eTtcbiAgICB9IGVsc2UgaWYgKGRlcHRoIDw9IDApIHtcbiAgICAgIHJldHVybiBvdXRwdXQuY29uY2F0KGlucHV0KTtcbiAgICB9XG4gICAgdmFyIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyQxKHZhbHVlKSkpIHtcbiAgICAgICAgLy8gRmxhdHRlbiBjdXJyZW50IGxldmVsIG9mIGFycmF5IG9yIGFyZ3VtZW50cyBvYmplY3QuXG4gICAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgICBmbGF0dGVuJDEodmFsdWUsIGRlcHRoIC0gMSwgc3RyaWN0LCBvdXRwdXQpO1xuICAgICAgICAgIGlkeCA9IG91dHB1dC5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGogPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGogPCBsZW4pIG91dHB1dFtpZHgrK10gPSB2YWx1ZVtqKytdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgLy8gQmluZCBhIG51bWJlciBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXG4gIC8vIGFyZSB0aGUgbWV0aG9kIG5hbWVzIHRvIGJlIGJvdW5kLiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRoYXQgYWxsIGNhbGxiYWNrc1xuICAvLyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQuXG4gIHZhciBiaW5kQWxsID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHtcbiAgICBrZXlzID0gZmxhdHRlbiQxKGtleXMsIGZhbHNlLCBmYWxzZSk7XG4gICAgdmFyIGluZGV4ID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKGluZGV4IDwgMSkgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7XG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgIG9ialtrZXldID0gYmluZChvYmpba2V5XSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSk7XG5cbiAgLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy5cbiAgZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCBoYXNoZXIpIHtcbiAgICB2YXIgbWVtb2l6ZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTtcbiAgICAgIHZhciBhZGRyZXNzID0gJycgKyAoaGFzaGVyID8gaGFzaGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBrZXkpO1xuICAgICAgaWYgKCFoYXMkMShjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xuICAgIH07XG4gICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIHJldHVybiBtZW1vaXplO1xuICB9XG5cbiAgLy8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBjYWxsc1xuICAvLyBpdCB3aXRoIHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuXG4gIHZhciBkZWxheSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgd2FpdCwgYXJncykge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4gIH0pO1xuXG4gIC8vIERlZmVycyBhIGZ1bmN0aW9uLCBzY2hlZHVsaW5nIGl0IHRvIHJ1biBhZnRlciB0aGUgY3VycmVudCBjYWxsIHN0YWNrIGhhc1xuICAvLyBjbGVhcmVkLlxuICB2YXIgZGVmZXIgPSBwYXJ0aWFsKGRlbGF5LCBfJDEsIDEpO1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgd2hlbiBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIGF0IG1vc3Qgb25jZVxuICAvLyBkdXJpbmcgYSBnaXZlbiB3aW5kb3cgb2YgdGltZS4gTm9ybWFsbHksIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gd2lsbCBydW5cbiAgLy8gYXMgbXVjaCBhcyBpdCBjYW4sIHdpdGhvdXQgZXZlciBnb2luZyBtb3JlIHRoYW4gb25jZSBwZXIgYHdhaXRgIGR1cmF0aW9uO1xuICAvLyBidXQgaWYgeW91J2QgbGlrZSB0byBkaXNhYmxlIHRoZSBleGVjdXRpb24gb24gdGhlIGxlYWRpbmcgZWRnZSwgcGFzc1xuICAvLyBge2xlYWRpbmc6IGZhbHNlfWAuIFRvIGRpc2FibGUgZXhlY3V0aW9uIG9uIHRoZSB0cmFpbGluZyBlZGdlLCBkaXR0by5cbiAgZnVuY3Rpb24gdGhyb3R0bGUoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciB0aW1lb3V0LCBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IG5vdygpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcblxuICAgIHZhciB0aHJvdHRsZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBfbm93ID0gbm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gX25vdztcbiAgICAgIHZhciByZW1haW5pbmcgPSB3YWl0IC0gKF9ub3cgLSBwcmV2aW91cyk7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBpZiAocmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91cyA9IF9ub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHRocm90dGxlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHByZXZpb3VzID0gMDtcbiAgICAgIHRpbWVvdXQgPSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcblxuICAgIHJldHVybiB0aHJvdHRsZWQ7XG4gIH1cblxuICAvLyBXaGVuIGEgc2VxdWVuY2Ugb2YgY2FsbHMgb2YgdGhlIHJldHVybmVkIGZ1bmN0aW9uIGVuZHMsIHRoZSBhcmd1bWVudFxuICAvLyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQuIFRoZSBlbmQgb2YgYSBzZXF1ZW5jZSBpcyBkZWZpbmVkIGJ5IHRoZSBgd2FpdGBcbiAgLy8gcGFyYW1ldGVyLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRoZSBhcmd1bWVudCBmdW5jdGlvbiB3aWxsIGJlXG4gIC8vIHRyaWdnZXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZXF1ZW5jZSBpbnN0ZWFkIG9mIGF0IHRoZSBlbmQuXG4gIGZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIHZhciB0aW1lb3V0LCBwcmV2aW91cywgYXJncywgcmVzdWx0LCBjb250ZXh0O1xuXG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcGFzc2VkID0gbm93KCkgLSBwcmV2aW91cztcbiAgICAgIGlmICh3YWl0ID4gcGFzc2VkKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gcGFzc2VkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIWltbWVkaWF0ZSkgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgLy8gVGhpcyBjaGVjayBpcyBuZWVkZWQgYmVjYXVzZSBgZnVuY2AgY2FuIHJlY3Vyc2l2ZWx5IGludm9rZSBgZGVib3VuY2VkYC5cbiAgICAgICAgaWYgKCF0aW1lb3V0KSBhcmdzID0gY29udGV4dCA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBkZWJvdW5jZWQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKF9hcmdzKSB7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBfYXJncztcbiAgICAgIHByZXZpb3VzID0gbm93KCk7XG4gICAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgICBpZiAoaW1tZWRpYXRlKSByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIGRlYm91bmNlZC5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRpbWVvdXQgPSBhcmdzID0gY29udGV4dCA9IG51bGw7XG4gICAgfTtcblxuICAgIHJldHVybiBkZWJvdW5jZWQ7XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBmdW5jdGlvbiB3cmFwKGZ1bmMsIHdyYXBwZXIpIHtcbiAgICByZXR1cm4gcGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBuZWdhdGVkIHZlcnNpb24gb2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXG4gIGZ1bmN0aW9uIG5lZ2F0ZShwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBmdW5jdGlvbiBjb21wb3NlKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBzdGFydCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHN0YXJ0O1xuICAgICAgdmFyIHJlc3VsdCA9IGFyZ3Nbc3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB3aGlsZSAoaS0tKSByZXN1bHQgPSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBhbmQgYWZ0ZXIgdGhlIE50aCBjYWxsLlxuICBmdW5jdGlvbiBhZnRlcih0aW1lcywgZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzIDwgMSkge1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGVcbiAgLy8gTnRoIGNhbGwuXG4gIGZ1bmN0aW9uIGJlZm9yZSh0aW1lcywgZnVuYykge1xuICAgIHZhciBtZW1vO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRpbWVzID4gMCkge1xuICAgICAgICBtZW1vID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgICAgaWYgKHRpbWVzIDw9IDEpIGZ1bmMgPSBudWxsO1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhvd1xuICAvLyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLlxuICB2YXIgb25jZSA9IHBhcnRpYWwoYmVmb3JlLCAyKTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBrZXkgb24gYW4gb2JqZWN0IHRoYXQgcGFzc2VzIGEgdHJ1dGggdGVzdC5cbiAgZnVuY3Rpb24gZmluZEtleShvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIF9rZXlzID0ga2V5cyhvYmopLCBrZXk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBfa2V5c1tpXTtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2tleV0sIGtleSwgb2JqKSkgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YC5cbiAgZnVuY3Rpb24gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoZGlyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIHZhciBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG4gIHZhciBmaW5kSW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigxKTtcblxuICAvLyBSZXR1cm5zIHRoZSBsYXN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuICB2YXIgZmluZExhc3RJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKC0xKTtcblxuICAvLyBVc2UgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoXG4gIC8vIGFuIG9iamVjdCBzaG91bGQgYmUgaW5zZXJ0ZWQgc28gYXMgdG8gbWFpbnRhaW4gb3JkZXIuIFVzZXMgYmluYXJ5IHNlYXJjaC5cbiAgZnVuY3Rpb24gc29ydGVkSW5kZXgoYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICB2YXIgdmFsdWUgPSBpdGVyYXRlZShvYmopO1xuICAgIHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XG4gICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxzZSBoaWdoID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbG93O1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIGBfLmluZGV4T2ZgIGFuZCBgXy5sYXN0SW5kZXhPZmAgZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpZHgpIHtcbiAgICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3RoLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZW5ndGggPSBpZHggPj0gMCA/IE1hdGgubWluKGlkeCArIDEsIGxlbmd0aCkgOiBpZHggKyBsZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHtcbiAgICAgICAgaWR4ID0gc29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlbaWR4XSA9PT0gaXRlbSA/IGlkeCA6IC0xO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0gIT09IGl0ZW0pIHtcbiAgICAgICAgaWR4ID0gcHJlZGljYXRlRmluZChzbGljZS5jYWxsKGFycmF5LCBpLCBsZW5ndGgpLCBpc05hTiQxKTtcbiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0xO1xuICAgICAgfVxuICAgICAgZm9yIChpZHggPSBkaXIgPiAwID8gaSA6IGxlbmd0aCAtIDE7IGlkeCA+PSAwICYmIGlkeCA8IGxlbmd0aDsgaWR4ICs9IGRpcikge1xuICAgICAgICBpZiAoYXJyYXlbaWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LlxuICAvLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5kIGFscmVhZHkgaW4gc29ydCBvcmRlciwgcGFzcyBgdHJ1ZWBcbiAgLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5IHNlYXJjaC5cbiAgdmFyIGluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigxLCBmaW5kSW5kZXgsIHNvcnRlZEluZGV4KTtcblxuICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgdmFyIGxhc3RJbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIoLTEsIGZpbmRMYXN0SW5kZXgpO1xuXG4gIC8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC5cbiAgZnVuY3Rpb24gZmluZChvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBrZXlGaW5kZXIgPSBpc0FycmF5TGlrZShvYmopID8gZmluZEluZGV4IDogZmluZEtleTtcbiAgICB2YXIga2V5ID0ga2V5RmluZGVyKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICBpZiAoa2V5ICE9PSB2b2lkIDAgJiYga2V5ICE9PSAtMSkgcmV0dXJuIG9ialtrZXldO1xuICB9XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgXy5maW5kYDogZ2V0dGluZyB0aGUgZmlyc3RcbiAgLy8gb2JqZWN0IGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIGZ1bmN0aW9uIGZpbmRXaGVyZShvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIGZpbmQob2JqLCBtYXRjaGVyKGF0dHJzKSk7XG4gIH1cblxuICAvLyBUaGUgY29ybmVyc3RvbmUgZm9yIGNvbGxlY3Rpb24gZnVuY3Rpb25zLCBhbiBgZWFjaGBcbiAgLy8gaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuXG4gIC8vIEhhbmRsZXMgcmF3IG9iamVjdHMgaW4gYWRkaXRpb24gdG8gYXJyYXktbGlrZXMuIFRyZWF0cyBhbGxcbiAgLy8gc3BhcnNlIGFycmF5LWxpa2VzIGFzIGlmIHRoZXkgd2VyZSBkZW5zZS5cbiAgZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgaSwgbGVuZ3RoO1xuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpbX2tleXNbaV1dLCBfa2V5c1tpXSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50LlxuICBmdW5jdGlvbiBtYXAob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gY3JlYXRlIGEgcmVkdWNpbmcgZnVuY3Rpb24sIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LlxuICBmdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZGlyKSB7XG4gICAgLy8gV3JhcCBjb2RlIHRoYXQgcmVhc3NpZ25zIGFyZ3VtZW50IHZhcmlhYmxlcyBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRoYW5cbiAgICAvLyB0aGUgb25lIHRoYXQgYWNjZXNzZXMgYGFyZ3VtZW50cy5sZW5ndGhgIHRvIGF2b2lkIGEgcGVyZiBoaXQuICgjMTk5MSlcbiAgICB2YXIgcmVkdWNlciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGluaXRpYWwpIHtcbiAgICAgIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSxcbiAgICAgICAgICBsZW5ndGggPSAoX2tleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICBpZiAoIWluaXRpYWwpIHtcbiAgICAgICAgbWVtbyA9IG9ialtfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4XTtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xuICAgICAgfVxuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGNvbnRleHQpIHtcbiAgICAgIHZhciBpbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA+PSAzO1xuICAgICAgcmV0dXJuIHJlZHVjZXIob2JqLCBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0KSwgbWVtbywgaW5pdGlhbCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAgdmFyIHJlZHVjZSA9IGNyZWF0ZVJlZHVjZSgxKTtcblxuICAvLyBUaGUgcmlnaHQtYXNzb2NpYXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZvbGRyYC5cbiAgdmFyIHJlZHVjZVJpZ2h0ID0gY3JlYXRlUmVkdWNlKC0xKTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LlxuICBmdW5jdGlvbiBmaWx0ZXIob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgZm9yIHdoaWNoIGEgdHJ1dGggdGVzdCBmYWlscy5cbiAgZnVuY3Rpb24gcmVqZWN0KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGZpbHRlcihvYmosIG5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29udGV4dCk7XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIHBhc3MgYSB0cnV0aCB0ZXN0LlxuICBmdW5jdGlvbiBldmVyeShvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoX2tleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBvYmplY3QgcGFzc2VzIGEgdHJ1dGggdGVzdC5cbiAgZnVuY3Rpb24gc29tZShvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoX2tleXMgfHwgb2JqKS5sZW5ndGg7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgaWYgdGhlIGFycmF5IG9yIG9iamVjdCBjb250YWlucyBhIGdpdmVuIGl0ZW0gKHVzaW5nIGA9PT1gKS5cbiAgZnVuY3Rpb24gY29udGFpbnMob2JqLCBpdGVtLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSB2YWx1ZXMob2JqKTtcbiAgICBpZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDtcbiAgICByZXR1cm4gaW5kZXhPZihvYmosIGl0ZW0sIGZyb21JbmRleCkgPj0gMDtcbiAgfVxuXG4gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuICB2YXIgaW52b2tlID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIHBhdGgsIGFyZ3MpIHtcbiAgICB2YXIgY29udGV4dFBhdGgsIGZ1bmM7XG4gICAgaWYgKGlzRnVuY3Rpb24kMShwYXRoKSkge1xuICAgICAgZnVuYyA9IHBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gICAgICBjb250ZXh0UGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpO1xuICAgICAgcGF0aCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcChvYmosIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICAgIHZhciBtZXRob2QgPSBmdW5jO1xuICAgICAgaWYgKCFtZXRob2QpIHtcbiAgICAgICAgaWYgKGNvbnRleHRQYXRoICYmIGNvbnRleHRQYXRoLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnRleHQgPSBkZWVwR2V0KGNvbnRleHQsIGNvbnRleHRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgICAgICBtZXRob2QgPSBjb250ZXh0W3BhdGhdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1ldGhvZCA9PSBudWxsID8gbWV0aG9kIDogbWV0aG9kLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBfLm1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIGZ1bmN0aW9uIHBsdWNrKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIG1hcChvYmosIHByb3BlcnR5KGtleSkpO1xuICB9XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgXy5maWx0ZXJgOiBzZWxlY3Rpbmcgb25seVxuICAvLyBvYmplY3RzIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIGZ1bmN0aW9uIHdoZXJlKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gZmlsdGVyKG9iaiwgbWF0Y2hlcihhdHRycykpO1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBmdW5jdGlvbiBtYXgob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IC1JbmZpbml0eSxcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xuICAgIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8ICh0eXBlb2YgaXRlcmF0ZWUgPT0gJ251bWJlcicgJiYgdHlwZW9mIG9ialswXSAhPSAnb2JqZWN0JyAmJiBvYmogIT0gbnVsbCkpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiB2YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlID4gcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBlYWNoKG9iaiwgZnVuY3Rpb24odiwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2LCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA+IGxhc3RDb21wdXRlZCB8fCAoY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2O1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgZnVuY3Rpb24gbWluKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgKHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IHZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPCByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIGVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkIDwgbGFzdENvbXB1dGVkIHx8IChjb21wdXRlZCA9PT0gSW5maW5pdHkgJiYgcmVzdWx0ID09PSBJbmZpbml0eSkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2O1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIFNhZmVseSBjcmVhdGUgYSByZWFsLCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRlcmFibGUuXG4gIHZhciByZVN0clN5bWJvbCA9IC9bXlxcdWQ4MDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXXxbXFx1ZDgwMC1cXHVkZmZmXS9nO1xuICBmdW5jdGlvbiB0b0FycmF5KG9iaikge1xuICAgIGlmICghb2JqKSByZXR1cm4gW107XG4gICAgaWYgKGlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgICBpZiAoaXNTdHJpbmcob2JqKSkge1xuICAgICAgLy8gS2VlcCBzdXJyb2dhdGUgcGFpciBjaGFyYWN0ZXJzIHRvZ2V0aGVyLlxuICAgICAgcmV0dXJuIG9iai5tYXRjaChyZVN0clN5bWJvbCk7XG4gICAgfVxuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSByZXR1cm4gbWFwKG9iaiwgaWRlbnRpdHkpO1xuICAgIHJldHVybiB2YWx1ZXMob2JqKTtcbiAgfVxuXG4gIC8vIFNhbXBsZSAqKm4qKiByYW5kb20gdmFsdWVzIGZyb20gYSBjb2xsZWN0aW9uIHVzaW5nIHRoZSBtb2Rlcm4gdmVyc2lvbiBvZiB0aGVcbiAgLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgLy8gSWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBmdW5jdGlvbiBzYW1wbGUob2JqLCBuLCBndWFyZCkge1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHtcbiAgICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gdmFsdWVzKG9iaik7XG4gICAgICByZXR1cm4gb2JqW3JhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1cbiAgICB2YXIgc2FtcGxlID0gdG9BcnJheShvYmopO1xuICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoc2FtcGxlKTtcbiAgICBuID0gTWF0aC5tYXgoTWF0aC5taW4obiwgbGVuZ3RoKSwgMCk7XG4gICAgdmFyIGxhc3QgPSBsZW5ndGggLSAxO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBuOyBpbmRleCsrKSB7XG4gICAgICB2YXIgcmFuZCA9IHJhbmRvbShpbmRleCwgbGFzdCk7XG4gICAgICB2YXIgdGVtcCA9IHNhbXBsZVtpbmRleF07XG4gICAgICBzYW1wbGVbaW5kZXhdID0gc2FtcGxlW3JhbmRdO1xuICAgICAgc2FtcGxlW3JhbmRdID0gdGVtcDtcbiAgICB9XG4gICAgcmV0dXJuIHNhbXBsZS5zbGljZSgwLCBuKTtcbiAgfVxuXG4gIC8vIFNodWZmbGUgYSBjb2xsZWN0aW9uLlxuICBmdW5jdGlvbiBzaHVmZmxlKG9iaikge1xuICAgIHJldHVybiBzYW1wbGUob2JqLCBJbmZpbml0eSk7XG4gIH1cblxuICAvLyBTb3J0IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRlcmF0ZWUuXG4gIGZ1bmN0aW9uIHNvcnRCeShvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gcGx1Y2sobWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgrKyxcbiAgICAgICAgY3JpdGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBrZXksIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH1cblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJhdGlvbnMuXG4gIGZ1bmN0aW9uIGdyb3VwKGJlaGF2aW9yLCBwYXJ0aXRpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHBhcnRpdGlvbiA/IFtbXSwgW11dIDoge307XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9XG5cbiAgLy8gR3JvdXBzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZVxuICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRlcmlvbi5cbiAgdmFyIGdyb3VwQnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoaGFzJDEocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgXy5ncm91cEJ5YCwgYnV0IGZvclxuICAvLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuXG4gIHZhciBpbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgLy8gQ291bnRzIGluc3RhbmNlcyBvZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3JpdGVyaW9uLiBQYXNzXG4gIC8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZVxuICAvLyBjcml0ZXJpb24uXG4gIHZhciBjb3VudEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKGhhcyQxKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0rKzsgZWxzZSByZXN1bHRba2V5XSA9IDE7XG4gIH0pO1xuXG4gIC8vIFNwbGl0IGEgY29sbGVjdGlvbiBpbnRvIHR3byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgcGFzcyB0aGUgZ2l2ZW5cbiAgLy8gdHJ1dGggdGVzdCwgYW5kIG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90IHBhc3MgdGhlIHRydXRoIHRlc3QuXG4gIHZhciBwYXJ0aXRpb24gPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBwYXNzKSB7XG4gICAgcmVzdWx0W3Bhc3MgPyAwIDogMV0ucHVzaCh2YWx1ZSk7XG4gIH0sIHRydWUpO1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgY29sbGVjdGlvbi5cbiAgZnVuY3Rpb24gc2l6ZShvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiAwO1xuICAgIHJldHVybiBpc0FycmF5TGlrZShvYmopID8gb2JqLmxlbmd0aCA6IGtleXMob2JqKS5sZW5ndGg7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBgXy5waWNrYCBoZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYGtleWAgaXMgYW4gZW51bWVyYWJsZVxuICAvLyBwcm9wZXJ0eSBuYW1lIG9mIGBvYmpgLlxuICBmdW5jdGlvbiBrZXlJbk9iaih2YWx1ZSwga2V5LCBvYmopIHtcbiAgICByZXR1cm4ga2V5IGluIG9iajtcbiAgfVxuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBvbmx5IGNvbnRhaW5pbmcgdGhlIGFsbG93ZWQgcHJvcGVydGllcy5cbiAgdmFyIHBpY2sgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciByZXN1bHQgPSB7fSwgaXRlcmF0ZWUgPSBrZXlzWzBdO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgICBpZiAoaXNGdW5jdGlvbiQxKGl0ZXJhdGVlKSkge1xuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBrZXlzWzFdKTtcbiAgICAgIGtleXMgPSBhbGxLZXlzKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0ga2V5SW5PYmo7XG4gICAgICBrZXlzID0gZmxhdHRlbiQxKGtleXMsIGZhbHNlLCBmYWxzZSk7XG4gICAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG4gICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGRpc2FsbG93ZWQgcHJvcGVydGllcy5cbiAgdmFyIG9taXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciBpdGVyYXRlZSA9IGtleXNbMF0sIGNvbnRleHQ7XG4gICAgaWYgKGlzRnVuY3Rpb24kMShpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJhdGVlID0gbmVnYXRlKGl0ZXJhdGVlKTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGNvbnRleHQgPSBrZXlzWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzID0gbWFwKGZsYXR0ZW4kMShrZXlzLCBmYWxzZSwgZmFsc2UpLCBTdHJpbmcpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgIHJldHVybiAhY29udGFpbnMoa2V5cywga2V5KTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBwaWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9KTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbiAgZnVuY3Rpb24gaW5pdGlhbChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gKG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKSkpO1xuICB9XG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIFRoZSAqKmd1YXJkKiogY2hlY2sgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBmdW5jdGlvbiBmaXJzdChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCB8fCBhcnJheS5sZW5ndGggPCAxKSByZXR1cm4gbiA9PSBudWxsIHx8IGd1YXJkID8gdm9pZCAwIDogW107XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5WzBdO1xuICAgIHJldHVybiBpbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfVxuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBgYXJyYXlgLiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuICAvLyB0aGUgYGFyZ3VtZW50c2Agb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZVxuICAvLyBgYXJyYXlgLlxuICBmdW5jdGlvbiByZXN0KGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG4gIH1cblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIGZ1bmN0aW9uIGxhc3QoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCB8fCBndWFyZCA/IHZvaWQgMCA6IFtdO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gcmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9XG5cbiAgLy8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuICBmdW5jdGlvbiBjb21wYWN0KGFycmF5KSB7XG4gICAgcmV0dXJuIGZpbHRlcihhcnJheSwgQm9vbGVhbik7XG4gIH1cblxuICAvLyBGbGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBkZWZhdWx0KSwgb3IgdXAgdG8gYGRlcHRoYC5cbiAgLy8gUGFzc2luZyBgdHJ1ZWAgb3IgYGZhbHNlYCBhcyBgZGVwdGhgIG1lYW5zIGAxYCBvciBgSW5maW5pdHlgLCByZXNwZWN0aXZlbHkuXG4gIGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXksIGRlcHRoKSB7XG4gICAgcmV0dXJuIGZsYXR0ZW4kMShhcnJheSwgZGVwdGgsIGZhbHNlKTtcbiAgfVxuXG4gIC8vIFRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgdmFyIGRpZmZlcmVuY2UgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5LCByZXN0KSB7XG4gICAgcmVzdCA9IGZsYXR0ZW4kMShyZXN0LCB0cnVlLCB0cnVlKTtcbiAgICByZXR1cm4gZmlsdGVyKGFycmF5LCBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICByZXR1cm4gIWNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4gIHZhciB3aXRob3V0ID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgb3RoZXJBcnJheXMpIHtcbiAgICByZXR1cm4gZGlmZmVyZW5jZShhcnJheSwgb3RoZXJBcnJheXMpO1xuICB9KTtcblxuICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIFRoZSBmYXN0ZXIgYWxnb3JpdGhtIHdpbGwgbm90IHdvcmsgd2l0aCBhbiBpdGVyYXRlZSBpZiB0aGUgaXRlcmF0ZWVcbiAgLy8gaXMgbm90IGEgb25lLXRvLW9uZSBmdW5jdGlvbiwgc28gcHJvdmlkaW5nIGFuIGl0ZXJhdGVlIHdpbGwgZGlzYWJsZVxuICAvLyB0aGUgZmFzdGVyIGFsZ29yaXRobS5cbiAgZnVuY3Rpb24gdW5pcShhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFpc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgICBjb250ZXh0ID0gaXRlcmF0ZWU7XG4gICAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAgICAgaXNTb3J0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgc2VlbiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkpIDogdmFsdWU7XG4gICAgICBpZiAoaXNTb3J0ZWQgJiYgIWl0ZXJhdGVlKSB7XG4gICAgICAgIGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICBzZWVuID0gY29tcHV0ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIGlmICghY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3QgZWxlbWVudCBmcm9tIGFsbCBvZlxuICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbiAgdmFyIHVuaW9uID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheXMpIHtcbiAgICByZXR1cm4gdW5pcShmbGF0dGVuJDEoYXJyYXlzLCB0cnVlLCB0cnVlKSk7XG4gIH0pO1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVcbiAgLy8gcGFzc2VkLWluIGFycmF5cy5cbiAgZnVuY3Rpb24gaW50ZXJzZWN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAgICAgaWYgKGNvbnRhaW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVlO1xuICAgICAgdmFyIGo7XG4gICAgICBmb3IgKGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmICghY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaiA9PT0gYXJnc0xlbmd0aCkgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBDb21wbGVtZW50IG9mIHppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXMuXG4gIGZ1bmN0aW9uIHVuemlwKGFycmF5KSB7XG4gICAgdmFyIGxlbmd0aCA9IChhcnJheSAmJiBtYXgoYXJyYXksIGdldExlbmd0aCkubGVuZ3RoKSB8fCAwO1xuICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmVzdWx0W2luZGV4XSA9IHBsdWNrKGFycmF5LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBaaXAgdG9nZXRoZXIgbXVsdGlwbGUgbGlzdHMgaW50byBhIHNpbmdsZSBhcnJheSAtLSBlbGVtZW50cyB0aGF0IHNoYXJlXG4gIC8vIGFuIGluZGV4IGdvIHRvZ2V0aGVyLlxuICB2YXIgemlwID0gcmVzdEFyZ3VtZW50cyh1bnppcCk7XG5cbiAgLy8gQ29udmVydHMgbGlzdHMgaW50byBvYmplY3RzLiBQYXNzIGVpdGhlciBhIHNpbmdsZSBhcnJheSBvZiBgW2tleSwgdmFsdWVdYFxuICAvLyBwYWlycywgb3IgdHdvIHBhcmFsbGVsIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFuZCBvbmUgb2ZcbiAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiBQYXNzaW5nIGJ5IHBhaXJzIGlzIHRoZSByZXZlcnNlIG9mIGBfLnBhaXJzYC5cbiAgZnVuY3Rpb24gb2JqZWN0KGxpc3QsIHZhbHVlcykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG4gIGZ1bmN0aW9uIHJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKHN0b3AgPT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIGlmICghc3RlcCkge1xuICAgICAgc3RlcCA9IHN0b3AgPCBzdGFydCA/IC0xIDogMTtcbiAgICB9XG5cbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApO1xuICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7XG4gICAgICByYW5nZVtpZHhdID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG5cbiAgLy8gQ2h1bmsgYSBzaW5nbGUgYXJyYXkgaW50byBtdWx0aXBsZSBhcnJheXMsIGVhY2ggY29udGFpbmluZyBgY291bnRgIG9yIGZld2VyXG4gIC8vIGl0ZW1zLlxuICBmdW5jdGlvbiBjaHVuayhhcnJheSwgY291bnQpIHtcbiAgICBpZiAoY291bnQgPT0gbnVsbCB8fCBjb3VudCA8IDEpIHJldHVybiBbXTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHNsaWNlLmNhbGwoYXJyYXksIGksIGkgKz0gY291bnQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgZnVuY3Rpb24gY2hhaW5SZXN1bHQoaW5zdGFuY2UsIG9iaikge1xuICAgIHJldHVybiBpbnN0YW5jZS5fY2hhaW4gPyBfJDEob2JqKS5jaGFpbigpIDogb2JqO1xuICB9XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBmdW5jdGlvbiBtaXhpbihvYmopIHtcbiAgICBlYWNoKGZ1bmN0aW9ucyhvYmopLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IF8kMVtuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8kMS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5fd3JhcHBlZF07XG4gICAgICAgIHB1c2guYXBwbHkoYXJncywgYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIGNoYWluUmVzdWx0KHRoaXMsIGZ1bmMuYXBwbHkoXyQxLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBfJDE7XG4gIH1cblxuICAvLyBBZGQgYWxsIG11dGF0b3IgYEFycmF5YCBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIGVhY2goWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8kMS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgaWYgKG9iaiAhPSBudWxsKSB7XG4gICAgICAgIG1ldGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSBvYmpbMF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEFkZCBhbGwgYWNjZXNzb3IgYEFycmF5YCBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIGVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXyQxLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgICBpZiAob2JqICE9IG51bGwpIG9iaiA9IG1ldGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgb2JqKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBOYW1lZCBFeHBvcnRzXG5cbiAgdmFyIGFsbEV4cG9ydHMgPSB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIFZFUlNJT046IFZFUlNJT04sXG4gICAgcmVzdEFyZ3VtZW50czogcmVzdEFyZ3VtZW50cyxcbiAgICBpc09iamVjdDogaXNPYmplY3QsXG4gICAgaXNOdWxsOiBpc051bGwsXG4gICAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICAgIGlzQm9vbGVhbjogaXNCb29sZWFuLFxuICAgIGlzRWxlbWVudDogaXNFbGVtZW50LFxuICAgIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgICBpc051bWJlcjogaXNOdW1iZXIsXG4gICAgaXNEYXRlOiBpc0RhdGUsXG4gICAgaXNSZWdFeHA6IGlzUmVnRXhwLFxuICAgIGlzRXJyb3I6IGlzRXJyb3IsXG4gICAgaXNTeW1ib2w6IGlzU3ltYm9sLFxuICAgIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gICAgaXNEYXRhVmlldzogaXNEYXRhVmlldyQxLFxuICAgIGlzQXJyYXk6IGlzQXJyYXksXG4gICAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbiQxLFxuICAgIGlzQXJndW1lbnRzOiBpc0FyZ3VtZW50cyQxLFxuICAgIGlzRmluaXRlOiBpc0Zpbml0ZSQxLFxuICAgIGlzTmFOOiBpc05hTiQxLFxuICAgIGlzVHlwZWRBcnJheTogaXNUeXBlZEFycmF5JDEsXG4gICAgaXNFbXB0eTogaXNFbXB0eSxcbiAgICBpc01hdGNoOiBpc01hdGNoLFxuICAgIGlzRXF1YWw6IGlzRXF1YWwsXG4gICAgaXNNYXA6IGlzTWFwLFxuICAgIGlzV2Vha01hcDogaXNXZWFrTWFwLFxuICAgIGlzU2V0OiBpc1NldCxcbiAgICBpc1dlYWtTZXQ6IGlzV2Vha1NldCxcbiAgICBrZXlzOiBrZXlzLFxuICAgIGFsbEtleXM6IGFsbEtleXMsXG4gICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgcGFpcnM6IHBhaXJzLFxuICAgIGludmVydDogaW52ZXJ0LFxuICAgIGZ1bmN0aW9uczogZnVuY3Rpb25zLFxuICAgIG1ldGhvZHM6IGZ1bmN0aW9ucyxcbiAgICBleHRlbmQ6IGV4dGVuZCxcbiAgICBleHRlbmRPd246IGV4dGVuZE93bixcbiAgICBhc3NpZ246IGV4dGVuZE93bixcbiAgICBkZWZhdWx0czogZGVmYXVsdHMsXG4gICAgY3JlYXRlOiBjcmVhdGUsXG4gICAgY2xvbmU6IGNsb25lLFxuICAgIHRhcDogdGFwLFxuICAgIGdldDogZ2V0LFxuICAgIGhhczogaGFzLFxuICAgIG1hcE9iamVjdDogbWFwT2JqZWN0LFxuICAgIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgICBjb25zdGFudDogY29uc3RhbnQsXG4gICAgbm9vcDogbm9vcCxcbiAgICB0b1BhdGg6IHRvUGF0aCQxLFxuICAgIHByb3BlcnR5OiBwcm9wZXJ0eSxcbiAgICBwcm9wZXJ0eU9mOiBwcm9wZXJ0eU9mLFxuICAgIG1hdGNoZXI6IG1hdGNoZXIsXG4gICAgbWF0Y2hlczogbWF0Y2hlcixcbiAgICB0aW1lczogdGltZXMsXG4gICAgcmFuZG9tOiByYW5kb20sXG4gICAgbm93OiBub3csXG4gICAgZXNjYXBlOiBfZXNjYXBlLFxuICAgIHVuZXNjYXBlOiBfdW5lc2NhcGUsXG4gICAgdGVtcGxhdGVTZXR0aW5nczogdGVtcGxhdGVTZXR0aW5ncyxcbiAgICB0ZW1wbGF0ZTogdGVtcGxhdGUsXG4gICAgcmVzdWx0OiByZXN1bHQsXG4gICAgdW5pcXVlSWQ6IHVuaXF1ZUlkLFxuICAgIGNoYWluOiBjaGFpbixcbiAgICBpdGVyYXRlZTogaXRlcmF0ZWUsXG4gICAgcGFydGlhbDogcGFydGlhbCxcbiAgICBiaW5kOiBiaW5kLFxuICAgIGJpbmRBbGw6IGJpbmRBbGwsXG4gICAgbWVtb2l6ZTogbWVtb2l6ZSxcbiAgICBkZWxheTogZGVsYXksXG4gICAgZGVmZXI6IGRlZmVyLFxuICAgIHRocm90dGxlOiB0aHJvdHRsZSxcbiAgICBkZWJvdW5jZTogZGVib3VuY2UsXG4gICAgd3JhcDogd3JhcCxcbiAgICBuZWdhdGU6IG5lZ2F0ZSxcbiAgICBjb21wb3NlOiBjb21wb3NlLFxuICAgIGFmdGVyOiBhZnRlcixcbiAgICBiZWZvcmU6IGJlZm9yZSxcbiAgICBvbmNlOiBvbmNlLFxuICAgIGZpbmRLZXk6IGZpbmRLZXksXG4gICAgZmluZEluZGV4OiBmaW5kSW5kZXgsXG4gICAgZmluZExhc3RJbmRleDogZmluZExhc3RJbmRleCxcbiAgICBzb3J0ZWRJbmRleDogc29ydGVkSW5kZXgsXG4gICAgaW5kZXhPZjogaW5kZXhPZixcbiAgICBsYXN0SW5kZXhPZjogbGFzdEluZGV4T2YsXG4gICAgZmluZDogZmluZCxcbiAgICBkZXRlY3Q6IGZpbmQsXG4gICAgZmluZFdoZXJlOiBmaW5kV2hlcmUsXG4gICAgZWFjaDogZWFjaCxcbiAgICBmb3JFYWNoOiBlYWNoLFxuICAgIG1hcDogbWFwLFxuICAgIGNvbGxlY3Q6IG1hcCxcbiAgICByZWR1Y2U6IHJlZHVjZSxcbiAgICBmb2xkbDogcmVkdWNlLFxuICAgIGluamVjdDogcmVkdWNlLFxuICAgIHJlZHVjZVJpZ2h0OiByZWR1Y2VSaWdodCxcbiAgICBmb2xkcjogcmVkdWNlUmlnaHQsXG4gICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgc2VsZWN0OiBmaWx0ZXIsXG4gICAgcmVqZWN0OiByZWplY3QsXG4gICAgZXZlcnk6IGV2ZXJ5LFxuICAgIGFsbDogZXZlcnksXG4gICAgc29tZTogc29tZSxcbiAgICBhbnk6IHNvbWUsXG4gICAgY29udGFpbnM6IGNvbnRhaW5zLFxuICAgIGluY2x1ZGVzOiBjb250YWlucyxcbiAgICBpbmNsdWRlOiBjb250YWlucyxcbiAgICBpbnZva2U6IGludm9rZSxcbiAgICBwbHVjazogcGx1Y2ssXG4gICAgd2hlcmU6IHdoZXJlLFxuICAgIG1heDogbWF4LFxuICAgIG1pbjogbWluLFxuICAgIHNodWZmbGU6IHNodWZmbGUsXG4gICAgc2FtcGxlOiBzYW1wbGUsXG4gICAgc29ydEJ5OiBzb3J0QnksXG4gICAgZ3JvdXBCeTogZ3JvdXBCeSxcbiAgICBpbmRleEJ5OiBpbmRleEJ5LFxuICAgIGNvdW50Qnk6IGNvdW50QnksXG4gICAgcGFydGl0aW9uOiBwYXJ0aXRpb24sXG4gICAgdG9BcnJheTogdG9BcnJheSxcbiAgICBzaXplOiBzaXplLFxuICAgIHBpY2s6IHBpY2ssXG4gICAgb21pdDogb21pdCxcbiAgICBmaXJzdDogZmlyc3QsXG4gICAgaGVhZDogZmlyc3QsXG4gICAgdGFrZTogZmlyc3QsXG4gICAgaW5pdGlhbDogaW5pdGlhbCxcbiAgICBsYXN0OiBsYXN0LFxuICAgIHJlc3Q6IHJlc3QsXG4gICAgdGFpbDogcmVzdCxcbiAgICBkcm9wOiByZXN0LFxuICAgIGNvbXBhY3Q6IGNvbXBhY3QsXG4gICAgZmxhdHRlbjogZmxhdHRlbixcbiAgICB3aXRob3V0OiB3aXRob3V0LFxuICAgIHVuaXE6IHVuaXEsXG4gICAgdW5pcXVlOiB1bmlxLFxuICAgIHVuaW9uOiB1bmlvbixcbiAgICBpbnRlcnNlY3Rpb246IGludGVyc2VjdGlvbixcbiAgICBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlLFxuICAgIHVuemlwOiB1bnppcCxcbiAgICB0cmFuc3Bvc2U6IHVuemlwLFxuICAgIHppcDogemlwLFxuICAgIG9iamVjdDogb2JqZWN0LFxuICAgIHJhbmdlOiByYW5nZSxcbiAgICBjaHVuazogY2h1bmssXG4gICAgbWl4aW46IG1peGluLFxuICAgICdkZWZhdWx0JzogXyQxXG4gIH07XG5cbiAgLy8gRGVmYXVsdCBFeHBvcnRcblxuICAvLyBBZGQgYWxsIG9mIHRoZSBVbmRlcnNjb3JlIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlciBvYmplY3QuXG4gIHZhciBfID0gbWl4aW4oYWxsRXhwb3J0cyk7XG4gIC8vIExlZ2FjeSBOb2RlLmpzIEFQSS5cbiAgXy5fID0gXztcblxuICByZXR1cm4gXztcblxufSkpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVuZGVyc2NvcmUtdW1kLmpzLm1hcFxuIiwiY29uc3QgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcblxuLy8gcmVmOiBPdmVyRHJpdmUuVGh1bmRlci5Nb2RlbHMuRGF0YU1vZGVscy5HZW5lcmF0ZWRDb2xsZWN0aW9uRGV0YWlsc1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBHZW5lcmF0ZWRDb2xsZWN0aW9uRGV0YWlscyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubWVkaWFUeXBlICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMubGFuZ3VhZ2UgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMucHVibGlzaGVyRW50aXR5SWQgID0gbnVsbDsgLy8gaW50XG4gICAgICAgIHRoaXMubWF0dXJpdHlMZXZlbHMgICAgID0gW107IC8vIHN0cmluZ1xuICAgICAgICB0aGlzLnN1YmplY3RzICAgICAgICAgICA9IFtdOyAvLyBzdHJpbmdcbiAgICAgICAgdGhpcy5iaXNhY0NvZGVzICAgICAgICAgPSBbXTtcblxuICAgICAgICB0aGlzLnNvcnRCeSAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLm1heEl0ZW1zICAgICAgICAgICA9IHVuZGVmaW5lZDsgLy8gaW50XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCAuLi5hcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIFRyYW5zbGF0ZXMgR2VuZXJhdGVkQ29sbGVjdGlvbkRldGFpbHMgbW9kZWwgdG8gcGFyYW1ldGVycyB0aGF0IGFsaWduIHdpdGggdGhlIE1lZGlhUGFyYW1ldGVycyBtb2RlbCBmb3IgZXhlY3V0aW5nIGEgXCJzZWFyY2hcIlxuICAgIHNlcmlhbGl6ZUZvclNlYXJjaCgpIHtcbiAgICAgICAgbGV0IG1vZGVsID0gXy5leHRlbmQoe30sIHRoaXMpO1xuXG4gICAgICAgIC8vIGxhbmd1YWdlIGlzIGFuIGFycmF5IGluIE1lZGlhUGFyYW1ldGVyc1xuICAgICAgICBtb2RlbC5sYW5ndWFnZSA9IF8oXy5mbGF0dGVuKFttb2RlbC5sYW5ndWFnZV0pKS5yZWplY3QoKHZhbCkgPT4gXy5pc0VtcHR5KHZhbCkpO1xuXG4gICAgICAgIC8vIG1hdHVyaXR5TGV2ZWxzIGlzIGNhbGxlZCBtYXR1cml0eUxldmVsXG4gICAgICAgIG1vZGVsLm1hdHVyaXR5TGV2ZWwgPSBfKF8uZmxhdHRlbihbbW9kZWwubWF0dXJpdHlMZXZlbHNdKSkucmVqZWN0KCh2YWwpID0+IF8uaXNFbXB0eSh2YWwpKTtcbiAgICAgICAgZGVsZXRlIG1vZGVsLm1hdHVyaXR5TGV2ZWxzO1xuXG4gICAgICAgIC8vIHN1YmplY3RzIGlzIGNhbGxlZCBzdWJqZWN0XG4gICAgICAgIG1vZGVsLnN1YmplY3QgPSBfKF8uZmxhdHRlbihbbW9kZWwuc3ViamVjdHNdKSkucmVqZWN0KCh2YWwpID0+IF8uaXNFbXB0eSh2YWwpKTtcbiAgICAgICAgZGVsZXRlIG1vZGVsLnN1YmplY3RzO1xuXG4gICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdiaXNhYy1jb2xsZWN0aW9uLWZpbHRlcmluZycpKSB7XG4gICAgICAgICAgICBtb2RlbC5iaXNhY0NvZGUgPSBfKF8uZmxhdHRlbihbbW9kZWwuYmlzYWNDb2Rlc10pKS5yZWplY3QoKHZhbCkgPT4gXy5pc0VtcHR5KHZhbCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGVsLm1lZGlhVHlwZXMpIHtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdtZWRpYS10eXBlcy1jb2xsZWN0aW9uLXBhcmFtJykpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgbW9kZWwubWVkaWFUeXBlO1xuICAgICAgICAgICAgfSBlbHNle1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBtb2RlbC5tZWRpYVR5cGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGVsLm1lZGlhVHlwZXMpIHtcbiAgICAgICAgICAgIG1vZGVsLm1lZGlhVHlwZXMgPSAgbW9kZWwubWVkaWFUeXBlcy5qb2luKCcsJyk7XG4gICAgICAgIH0gZWxzZSBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZmlsdGVyLW91dC1udGMnKSkge1xuICAgICAgICAgICAgbW9kZWwubWVkaWFUeXBlcyA9IHdpbmRvdy5PdmVyRHJpdmUud2hpdGVsaXN0ZWRNZWRpYVR5cGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIG1vZGVsLmJpc2FjQ29kZXM7ICAvLyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IHJlZ2FyZGxlc3MgYmVjYXVzZSB0aGUgY29ycmVjdCBxdWVyeSBwYXJhbSBpcyBgYmlzYWNDb2RlYC4gIFRoZSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSB0aHVuZGVyIHF1ZXJ5IHBhcmFtcyBhbmQgdGhlIHByb3BlcnR5IG5hbWVzIGluIHRoZSBnZW5lcmF0ZWQgY29sbGVjdGlvbiBkZWZpbml0aW9ucyBpcy4uLmZ1bi5cblxuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbG9yVXRpbGl0eSB7XG5cbiAgICAvLyBzZWUgX3ZhcnMuc2NzcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgY3NzIGNvbG9yIHZhcnNcbiAgICAvL1xuICAgIHN0YXRpYyBnZXQgaGlnaENvbnRyYXN0Qmx1ZSgpe1xuICAgICAgICByZXR1cm4gJyMwMDAwRkYnO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgaGlnaENvbnRyYXN0Qmx1ZUhvdmVyKCl7XG4gICAgICAgIHJldHVybiAnIzAwMDBGNSc7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBoaWdoQ29udHJhc3RZZWxsb3coKXtcbiAgICAgICAgcmV0dXJuICcjRkZGRjAwJztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IGhpZ2hDb250cmFzdFllbGxvd0hvdmVyKCkge1xuICAgICAgICByZXR1cm4gJyNGNUU2MDAnO1xuICAgIH1cblxuLy8gY3JlZGl0OiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkwNzc2ODZcbiAgICAvLyBUaGlzIHdpbGwgYWNjZXB0IHRocmVlIGNoYXJhY3RlciBzaG9ydGhhbmQgaGV4IGNvbG9ycyBhcyB3ZWxsIGFzIHRoZSBzdGFuZGFyZCBzaXggY2hhcmFjdGVyIGZvcm1hdC5cbiAgICBzdGF0aWMgaGV4VG9SR0IoaGV4Q29sb3Ipe1xuICAgICAgICByZXR1cm4gaGV4Q29sb3IucmVwbGFjZSgvXiM/KFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pJC9pXG4gICAgICAgICAgICAgICAgLChtLCByLCBnLCBiKSA9PiAnIycgKyByICsgciArIGcgKyBnICsgYiArIGIpXG4gICAgICAgICAgICAuc3Vic3RyaW5nKDEpLm1hdGNoKC8uezJ9L2cpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTYpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmdiVG9IZXgocmdiKSB7XG4gICAgICAgIGxldCBuVG9IZXggPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgICAgbGV0IGhleCA9IHBhcnNlSW50KG4sIDEwKS50b1N0cmluZygxNik7XG4gICAgICAgICAgICByZXR1cm4gaGV4Lmxlbmd0aCA9PT0gMSA/ICcwJyArIGhleCA6IGhleDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuICcjJyArIG5Ub0hleChyZ2JbMF0pICsgblRvSGV4KHJnYlsxXSkgKyBuVG9IZXgocmdiWzJdKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0VGV4dENvbG9yRnJvbVJHQihiYWNrZ3JvdW5kUkdCKXtcbiAgICAgICAgLy8gU3RhbmRhcmQgY29udHJhc3QgY2FsY3VsYXRpb24gYmFzZWQgb24gdGhlIFkgY29tcG9uZW50IG9mIHRoZSBZSVEgY29sb3Igc3BhY2UuICBMaWJieSB1c2VzIHRoZSBzYW1lIGRlZmF1bHQgTHVtYSB0aHJlc2hvbGQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ia3NoL2Rld2V5LWpzL2Jsb2IvZWJiNzE4OTI0MWM1ZWFkZTgwMDA3NzZkOTdjZDU0NTFiZjY0M2UzZC9zcmMvYXBwL2Jhc2UvY292ZXItZ3VydS5qcyNMMTBcbiAgICAgICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWUlRI0Zyb21fUkdCX3RvX1lJUVxuICAgICAgICBjb25zdCBMVU1BX1RIUkVTSE9MRF9ZSVEgID0gMTkwO1xuICAgICAgICByZXR1cm4gKGJhY2tncm91bmRSR0JbMF0gKiAyOTkgKyBiYWNrZ3JvdW5kUkdCWzFdICogNTg3ICsgYmFja2dyb3VuZFJHQlsyXSAqIDExNCkgLyAxMDAwID4gTFVNQV9USFJFU0hPTERfWUlRID8gJyMwMDAwMDAnIDogJyNmZmZmZmYnO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRUZXh0Q29sb3JGcm9tSGV4KGJhY2tncm91bmRIZXgpe1xuICAgICAgICBsZXQgcmdiID0gQ29sb3JVdGlsaXR5LmhleFRvUkdCKGJhY2tncm91bmRIZXgpO1xuICAgICAgICByZXR1cm4gQ29sb3JVdGlsaXR5LmdldFRleHRDb2xvckZyb21SR0IocmdiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2hhZGVDb2xvckhleChoZXhDb2xvciwgcGVyY2VudCl7XG4gICAgICAgIGxldCByZ2IgPSBDb2xvclV0aWxpdHkuaGV4VG9SR0IoaGV4Q29sb3IpO1xuICAgICAgICBsZXQgc2hhZGVkUkdCID0gQ29sb3JVdGlsaXR5LnNoYWRlQ29sb3IocmdiLCBwZXJjZW50KTtcbiAgICAgICAgcmV0dXJuIENvbG9yVXRpbGl0eS5yZ2JUb0hleChzaGFkZWRSR0IpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzaGFkZUNvbG9yKHJnYiwgcGVyY2VudCl7XG4gICAgICAgIHBlcmNlbnQgPSBNYXRoLmFicyhwZXJjZW50KTtcbiAgICAgICAgbGV0IGhzbCA9IENvbG9yVXRpbGl0eS5yZ2JUb0hzbChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKTtcbiAgICAgICAgbGV0IGwgPSBoc2xbMl07XG4gICAgICAgIGlmIChsID49IDAuNSl7XG4gICAgICAgICAgICBwZXJjZW50ICo9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGwgPSBsICsgcGVyY2VudDtcbiAgICAgICAgaHNsWzJdID0gbDtcbiAgICAgICAgcmV0dXJuIENvbG9yVXRpbGl0eS5oc2xUb1JnYihoc2xbMF0sIGhzbFsxXSwgaHNsWzJdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVkaXQ6IHRha2VuIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk0OTMwNjBcbiAgICAgKlxuICAgICAqIENvbnZlcnRzIGFuIEhTTCBjb2xvciB2YWx1ZSB0byBSR0IuIENvbnZlcnNpb24gZm9ybXVsYVxuICAgICAqIGFkYXB0ZWQgZnJvbSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xvcl9zcGFjZS5cbiAgICAgKiBBc3N1bWVzIGgsIHMsIGFuZCBsIGFyZSBjb250YWluZWQgaW4gdGhlIHNldCBbMCwgMV0gYW5kXG4gICAgICogcmV0dXJucyByLCBnLCBhbmQgYiBpbiB0aGUgc2V0IFswLCAyNTVdLlxuICAgICAqXG4gICAgICogQHBhcmFtICAge251bWJlcn0gIGggICAgICAgVGhlIGh1ZVxuICAgICAqIEBwYXJhbSAgIHtudW1iZXJ9ICBzICAgICAgIFRoZSBzYXR1cmF0aW9uXG4gICAgICogQHBhcmFtICAge251bWJlcn0gIGwgICAgICAgVGhlIGxpZ2h0bmVzc1xuICAgICAqIEByZXR1cm4gIHtBcnJheX0gICAgICAgICAgIFRoZSBSR0IgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBzdGF0aWMgaHNsVG9SZ2IoaCwgcywgbCl7XG4gICAgICAgIHZhciByLCBnLCBiO1xuXG4gICAgICAgIGlmIChzID09PSAwKXtcbiAgICAgICAgICAgIHIgPSBnID0gYiA9IGw7IC8vIGFjaHJvbWF0aWNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBodWUycmdiID0gZnVuY3Rpb24gKHAsIHEsIHQpIHtcbiAgICAgICAgICAgICAgICBpZiAodCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdCArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdCAtPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodCA8IDEgLyA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwICsgKHEgLSBwKSAqIDYgKiB0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodCA8IDEgLyAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodCA8IDIgLyAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwICsgKHEgLSBwKSAqICgyIC8gMyAtIHQpICogNjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB2YXIgcSA9IGwgPCAwLjUgPyBsICogKDEgKyBzKSA6IGwgKyBzIC0gbCAqIHM7XG4gICAgICAgICAgICB2YXIgcCA9IDIgKiBsIC0gcTtcbiAgICAgICAgICAgIHIgPSBodWUycmdiKHAsIHEsIGggKyAxIC8gMyk7XG4gICAgICAgICAgICBnID0gaHVlMnJnYihwLCBxLCBoKTtcbiAgICAgICAgICAgIGIgPSBodWUycmdiKHAsIHEsIGggLSAxIC8gMyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW01hdGgucm91bmQociAqIDI1NSksIE1hdGgucm91bmQoZyAqIDI1NSksIE1hdGgucm91bmQoYiAqIDI1NSldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWRpdDogdGFrZW4gZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvOTQ5MzA2MFxuICAgICAqXG4gICAgICogQ29udmVydHMgYW4gUkdCIGNvbG9yIHZhbHVlIHRvIEhTTC4gQ29udmVyc2lvbiBmb3JtdWxhXG4gICAgICogYWRhcHRlZCBmcm9tIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSFNMX2NvbG9yX3NwYWNlLlxuICAgICAqIEFzc3VtZXMgciwgZywgYW5kIGIgYXJlIGNvbnRhaW5lZCBpbiB0aGUgc2V0IFswLCAyNTVdIGFuZFxuICAgICAqIHJldHVybnMgaCwgcywgYW5kIGwgaW4gdGhlIHNldCBbMCwgMV0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gICB7bnVtYmVyfSAgciAgICAgICBUaGUgcmVkIGNvbG9yIHZhbHVlXG4gICAgICogQHBhcmFtICAge251bWJlcn0gIGcgICAgICAgVGhlIGdyZWVuIGNvbG9yIHZhbHVlXG4gICAgICogQHBhcmFtICAge251bWJlcn0gIGIgICAgICAgVGhlIGJsdWUgY29sb3IgdmFsdWVcbiAgICAgKiBAcmV0dXJuICB7QXJyYXl9ICAgICAgICAgICBUaGUgSFNMIHJlcHJlc2VudGF0aW9uXG4gICAgICovXG4gICAgc3RhdGljIHJnYlRvSHNsKHIsIGcsIGIpe1xuICAgICAgICByID0gciAvIDI1NTtcbiAgICAgICAgZyA9IGcgLyAyNTU7XG4gICAgICAgIGIgPSBiIC8gMjU1O1xuICAgICAgICBsZXQgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG4gICAgICAgIGxldCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcbiAgICAgICAgbGV0IGgsIHMsIGwgPSAobWF4ICsgbWluKSAvIDI7XG5cbiAgICAgICAgaWYgKG1heCA9PT0gbWluKXtcbiAgICAgICAgICAgIGggPSBzID0gMDsgLy8gYWNocm9tYXRpY1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGQgPSBtYXggLSBtaW47XG4gICAgICAgICAgICBzID0gbCA+IDAuNSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gICAgICAgICAgICBzd2l0Y2ggKG1heCl7XG4gICAgICAgICAgICAgICAgY2FzZSByOiBoID0gKGcgLSBiKSAvIGQgKyAoZyA8IGIgPyA2IDogMCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgZzogaCA9IChiIC0gcikgLyBkICsgMjsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBiOiBoID0gKHIgLSBnKSAvIGQgKyA0OyBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGggLz0gNjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbaCwgcywgbF07XG4gICAgfVxuXG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPcHRpbWl6ZWRDb3ZlcnMgPSB2b2lkIDA7XG52YXIgXyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwidW5kZXJzY29yZVwiKSk7XG5mdW5jdGlvbiBnZXRPcHRpbWl6ZWRDb3ZlcnMoY292ZXJzLCBkZXNpcmVkU2l6ZSkge1xuICAgIC8vIGNvdmVyc0J5U2l6ZSBpcyBub3cgYW4gYXJyYXkgb2YgY292ZXJzLCBmcm9tIHNtYWxsZXN0IHRvIGxhcmdlc3RcbiAgICB2YXIgY292ZXJzQnlTaXplID0gXy5zb3J0QnkoY292ZXJzLCAnd2lkdGgnKTtcbiAgICAvLyBTdGFydCB3aXRoIHRoZSBiaWdnZXN0IGNvdmVyXG4gICAgLy8gQ29weSBvYmplY3Qgd2l0aCBPYmplY3QuYXNzaWduKCkgc28gd2UgZG9udCBkYW1hZ2UgcmVmZXJlbmNlXG4gICAgdmFyIG9wdGltaXplZENvdmVyID0gT2JqZWN0LmFzc2lnbih7fSwgXy5sYXN0KGNvdmVyc0J5U2l6ZSkpO1xuICAgIGlmIChvcHRpbWl6ZWRDb3ZlciAmJiBvcHRpbWl6ZWRDb3Zlci5ocmVmKSB7XG4gICAgICAgIHZhciBsZWdhY3lUb09wdGltaXplZEltYWdlSG9zdHNNYXAgPSB7XG4gICAgICAgICAgICAnaHR0cHM6Ly9pbWcxLm9kLWNkbi5jb20vJzogJ2h0dHBzOi8vaWMub2QtY2RuLmNvbS9yZXNpemUnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vaW1hZ2VzLm92ZXJkcml2ZWNoaW5hLmNuLyc6ICdodHRwczovL2ltYWdlcy5vdmVyZHJpdmVjaGluYS5jbi9yZXNpemUnXG4gICAgICAgIH07XG4gICAgICAgIHZhciBob3N0TWFwS2V5ID0gXy5maW5kKE9iamVjdC5rZXlzKGxlZ2FjeVRvT3B0aW1pemVkSW1hZ2VIb3N0c01hcCksIGZ1bmN0aW9uIChsZWdhY3kpIHsgcmV0dXJuIG9wdGltaXplZENvdmVyLmhyZWYuc3RhcnRzV2l0aChsZWdhY3kpOyB9KTtcbiAgICAgICAgaWYgKGhvc3RNYXBLZXkpIHtcbiAgICAgICAgICAgIC8vIGxvb2sgdXAgdGhlIGNvcnJlc3BvbmRpbmcgb3B0aW1pemVkIHJvb3QsIGUuZy4gaHR0cHM6Ly9pbWcxLm9kLWNkbi5jb20vIC0+IGh0dHBzOi8vaWMub2QtY2RuLmNvbS9yZXNpemVcbiAgICAgICAgICAgIHZhciBvcHRpbWl6ZWRJbWFnZUhvc3QgPSBsZWdhY3lUb09wdGltaXplZEltYWdlSG9zdHNNYXBbaG9zdE1hcEtleV07XG4gICAgICAgICAgICB2YXIgb3B0aW1pemF0aW9ucyA9ICd0eXBlPWF1dG8nOyAvLyBmb3JtYXQgPSBhdXRvIC0+IHVzZSB3ZWJwIGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaXRcbiAgICAgICAgICAgIHZhciBwYXRoID0gJyc7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIC8vIG5vZGUuanMgdXNhZ2Ugc2hvdWxkIGJlIGZpbmUgd2l0aCB0aGUgVVJMIGFwaVxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBuZXcgVVJMKG9wdGltaXplZENvdmVyLmhyZWYpO1xuICAgICAgICAgICAgICAgIHBhdGggPSB1cmwucGF0aG5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBoYWNrIHRvIGdldCB1cmwgcGF0aG5hbWUgc2luY2UgSUUgZG9lc24ndCBzdXBwb3J0IHRoZSBVUkwgYXBpLiAgSSBkaWRuJ3Qgd2FudCB0byBhZGQgYSBwb2x5ZmlsbFxuICAgICAgICAgICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgIGEuaHJlZiA9IG9wdGltaXplZENvdmVyLmhyZWY7XG4gICAgICAgICAgICAgICAgcGF0aCA9IGEucGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkgeyAvLyBicm93c2VycyBhcmUgaW5jb25zaXN0ZW50IGFib3V0IHdoZXRoZXIgdGhlIHBhdGhuYW1lIGluY2x1ZGVzIGEgbGVhZGluZyBzbGFzaCwgYnV0IHRoZSBjYWNoZWZseSBhcGkgcmVxdWlyZXMgZXhhY3RseSBvbmUgb24gdGhlIHVybCBwYXJhbVxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gXCIvXCIuY29uY2F0KHBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBlbmNvZGVkU3JjVXJsID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpO1xuICAgICAgICAgICAgdmFyIGNvdmVySHJlZldpdGhvdXRTaXplID0gXCJcIi5jb25jYXQob3B0aW1pemVkSW1hZ2VIb3N0LCBcIj9cIikuY29uY2F0KG9wdGltaXphdGlvbnMsIFwiJnVybD1cIikuY29uY2F0KGVuY29kZWRTcmNVcmwsIFwiJnN0cmlwbWV0YT10cnVlXCIpO1xuICAgICAgICAgICAgb3B0aW1pemVkQ292ZXIuaHJlZiA9IFwiXCIuY29uY2F0KGNvdmVySHJlZldpdGhvdXRTaXplLCBcIiZ3aWR0aD1cIikuY29uY2F0KGRlc2lyZWRTaXplKTtcbiAgICAgICAgICAgIG9wdGltaXplZENvdmVyLnNyY3NldCA9IFwiXCIuY29uY2F0KGNvdmVySHJlZldpdGhvdXRTaXplLCBcIiZ3aWR0aD1cIikuY29uY2F0KE1hdGguZmxvb3IoZGVzaXJlZFNpemUgKiAyKSwgXCIgMngsIFwiKSArXG4gICAgICAgICAgICAgICAgXCJcIi5jb25jYXQoY292ZXJIcmVmV2l0aG91dFNpemUsIFwiJndpZHRoPVwiKS5jb25jYXQoTWF0aC5mbG9vcihkZXNpcmVkU2l6ZSAqIDEuNSksIFwiIDEuNXgsIFwiKSArXG4gICAgICAgICAgICAgICAgXCJcIi5jb25jYXQoY292ZXJIcmVmV2l0aG91dFNpemUsIFwiJndpZHRoPVwiKS5jb25jYXQoZGVzaXJlZFNpemUsIFwiIDF4XCIpO1xuICAgICAgICAgICAgcmV0dXJuIG9wdGltaXplZENvdmVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfLmZpbmQoY292ZXJzQnlTaXplLCBmdW5jdGlvbiAoY292ZXIpIHsgcmV0dXJuIGNvdmVyLndpZHRoID49IGRlc2lyZWRTaXplOyB9KSB8fFxuICAgICAgICBfLmxhc3QoY292ZXJzQnlTaXplKTsgLy8gZmluZHMgdGhlIGZpcnN0IGNvdmVyIHRoYXQgaXMgYmlnIGVub3VnaFxufVxuZXhwb3J0cy5nZXRPcHRpbWl6ZWRDb3ZlcnMgPSBnZXRPcHRpbWl6ZWRDb3ZlcnM7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldE9wdGltaXplZENvdmVyLXRzLmpzLm1hcFxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRPcHRpbWl6ZWRDb3Zlci10cy5qcy5tYXBcbiIsImNvbnN0IF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG5cbi8qKlxuICogRGVmaW5lcyBhbGwgdGhlIGF2YWlsYWJsZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB0aGUgbWVkaWEgZW5kcG9pbnRcbiAqIEBjbGFzcyBNZWRpYVBhcmFtZXRlcnNcbiAqIHJlZjogaHR0cHM6Ly90aHVuZGVyLmFwaS50ZXN0Lm92ZXJkcml2ZS5jb20vZG9jcy91aS9pbmRleCMhL01lZGlhL1YyTWVkaWFfSW5kZXhNZWRpYVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIE1lZGlhUGFyYW1ldGVycyB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5xdWVyeSAgICAgICAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLm1lZGlhVHlwZSAgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMubWVkaWFUeXBlcyAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy50aXRsZSAgICAgICAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLnNlcmllcyAgICAgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMucHVibGlzaGVySWQgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5wdWJsaXNoZXJFbnRpdHlJZCAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuaW1wcmludElkICAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5pZGVudGlmaWVyICAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLmNyZWF0b3IgICAgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMuY3JlYXRvcklkICAgICAgICAgICAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLmFkZGVkRGF0ZSAgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlRmlyc3QgICAgICAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLnNob3dPbmx5QXZhaWxhYmxlICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd09ubHlQcmVyZWxlYXNlICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93T25seUx1Y2t5RGF5QXZhaWxhYmxlICA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc0F1ZGlvU3luY2hyb25pemVkVGV4dCAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uSWQgICAgICAgICAgICAgICA9IDA7XG5cbiAgICAgICAgLy8gQWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJyYXlzIGFyZSBzdHJpbmcgYXJyYXlzXG4gICAgICAgIHRoaXMuZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5zdWJqZWN0ICAgICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmJpc2FjQ29kZSAgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMubWF0dXJpdHlMZXZlbCAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5sYW5ndWFnZSAgICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmF0b3NMZXZlbCAgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMubGV4aWxlU2NvcmUgICAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5pbnRlcmVzdExldmVsICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmdyYWRlTGV2ZWwgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMuaW5jbHVkZWRGYWNldHMgICAgICAgICAgICAgPSBbXTtcblxuICAgICAgICB0aGlzLnNvcnRCeSAgICAgICAgICAgICAgICAgICAgID0gJ3JlbGV2YW5jZSc7XG4gICAgICAgIHRoaXMuc2hvdyAgICAgICAgICAgICAgICAgICAgICAgPSAnb3duZWQnO1xuICAgICAgICB0aGlzLnBhZ2UgICAgICAgICAgICAgICAgICAgICAgID0gMTtcbiAgICAgICAgdGhpcy5wZXJQYWdlICAgICAgICAgICAgICAgICAgICA9IDI0O1xuICAgICAgICB0aGlzLmluY2x1ZGVGYWNldHMgICAgICAgICAgICAgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbmNsdWRlTm9Gb3JtYXRUaXRsZXMgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpbHRlckNwY1RpdGxlcyAgICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWF4SXRlbXMgICAgICAgICAgICAgICAgICAgPSAwO1xuXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgLi4uYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBhcHBseVJvb21GaWx0ZXJzQW5kVXNlclByZWZzKHJvb21GaWx0ZXJzLCB1c2VyUHJlZmVyZW5jZXMpIHtcbiAgICAgICAgaWYgKHJvb21GaWx0ZXJzKSB7XG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIG5hbWVzIGRvbid0IG1hdGNoIHVwIHNvIHdlIGNhbid0IGp1c3QgZXh0ZW5kXG4gICAgICAgICAgICBpZiAocm9vbUZpbHRlcnMubWF0dXJpdHlMZXZlbHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hdHVyaXR5TGV2ZWwgPSByb29tRmlsdGVycy5tYXR1cml0eUxldmVscztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyb29tRmlsdGVycy5zdWJqZWN0cykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3ViamVjdCA9IHJvb21GaWx0ZXJzLnN1YmplY3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvb21GaWx0ZXJzLmxhbmd1YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZSA9IHJvb21GaWx0ZXJzLmxhbmd1YWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvb21GaWx0ZXJzLm1lZGlhVHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUeXBlID0gcm9vbUZpbHRlcnMubWVkaWFUeXBlO1xuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUeXBlcyA9IHJvb21GaWx0ZXJzLm1lZGlhVHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1c2VyUHJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIC8vIFRoZXJlIG1heSBiZSBtb3JlIHVzZXIgcHJlZnMgdG8gYXBwbHkgYmVzaWRlcyBhdWRpZW5jZS1zZXR0aW5ncyBidXQgdGhpc1xuICAgICAgICAgICAgLy8gd2FzIHRoZSBpbW1lZGlhdGUgbmVlZC4gIFdlIGNhbiBhZGQgbW9yZSBhcyB0aGV5IGNvbWUgdXAuXG4gICAgICAgICAgICBpZiAodXNlclByZWZlcmVuY2VzWydhdWRpZW5jZS1zZXR0aW5nJ10gJiYgdGhpcy5tYXR1cml0eUxldmVsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHVzZXJQcmVmZXJlbmNlc1snYXVkaWVuY2Utc2V0dGluZyddO1xuICAgICAgICAgICAgICAgIGxldCBtYXR1cml0eUxldmVscyA9IFtdO1xuICAgICAgICAgICAgICAgIF8uZWFjaChfLmtleXMoYXVkaWVuY2UpLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1ZGllbmNlW2tleV0gJiYga2V5ICE9PSAnYWxsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0dXJpdHlMZXZlbHMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdHVyaXR5TGV2ZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXR1cml0eUxldmVsID0gbWF0dXJpdHlMZXZlbHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBfLmV4dGVuZCh7fSwgdGhpcyk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBwcm9wZXJ0aWVzIHRoYXQgZG8gbm90IGhhdmUgYSB2YWx1ZSBzZXRcbiAgICAgICAgT2JqZWN0LmtleXMocmVzcG9uc2UpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgIXRoaXMuX2hhc1ZhbHVlKHJlc3BvbnNlW2tleV0pICYmIGRlbGV0ZSByZXNwb25zZVtrZXldO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgX2hhc1ZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiAhKChfKHZhbHVlKS5pc09iamVjdCgpICYmIF8odmFsdWUpLmlzRW1wdHkoKSkgfHwgIXZhbHVlKSB8fCB2YWx1ZSA9PT0gZmFsc2U7XG4gICAgfVxufTtcbiIsImltcG9ydCBNZWRpYUludGVyZmFjZSBmcm9tICcuLi9tZWRpYS9NZWRpYUludGVyZmFjZSc7XG5cbmltcG9ydCBHZW5lcmF0ZWRDb2xsZWN0aW9uRGV0YWlscyBmcm9tICcuLi8uLi8uLi8uLi9idXNpbmVzcy1vYmplY3RzL0dlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzJztcblxuLy8gcmVmOiBUaHVuZGVyLk1vZGVscy5SZXNwb25zZU1vZGVscy5Db2xsZWN0aW9uRGVmaW5pdGlvblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvbkRlZmluaXRpb24gZXh0ZW5kcyBCYWNrYm9uZS5Nb2RlbCB7XG5cbiAgICBnZXQgaWRBdHRyaWJ1dGUoKSB7IHJldHVybiAnaWQnOyB9XG5cbiAgICBnZXQgY29sbGVjdGlvbk9wdGlvbnMoKSB7XG4gICAgICAgIGxldCBvcHRpb25zID0ge1xuICAgICAgICAgICAgaW5jbHVkZUZhY2V0czogZmFsc2UsXG4gICAgICAgICAgICBwZXJQYWdlOiAgICAgICB0aGlzLnBhZ2VTaXplIHx8IDYsXG4gICAgICAgICAgICBzaHVmZmxlOiAgICAgICB0aGlzLnNodWZmbGUgfHwgdGhpcy5pc0x1Y2t5RGF5XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmdldCgnc29ydEJ5QXZhaWxhYmlsaXR5JykgfHwgdGhpcy5nZXQoJ2F2YWlsYWJpbGl0eU9wdGlvbicpID09PSAnYXZhaWxhYmxlLWZpcnN0Jykge1xuICAgICAgICAgICAgb3B0aW9ucy5hdmFpbGFibGVGaXJzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ2V0KCdzaG93T25seUF2YWlsYWJsZScpIHx8IHRoaXMuZ2V0KCdhdmFpbGFiaWxpdHlPcHRpb24nKSA9PT0gJ2F2YWlsYWJsZS1vbmx5Jykge1xuICAgICAgICAgICAgb3B0aW9ucy5zaG93T25seUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ2V0KCdzaG93T25seVByZXJlbGVhc2UnKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5zaG93T25seVByZXJlbGVhc2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVzZUxpc3RPcmRlcil7XG4gICAgICAgICAgICBvcHRpb25zLnNvcnRCeSA9ICdsaXN0b3JkZXInO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgZGVmYXVsdHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMCcsXG4gICAgICAgICAgICBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgYXZhaWxhYmlsaXR5T3B0aW9uICAgICAgICAgIDogJycsXG4gICAgICAgICAgICBzaG93T25seUF2YWlsYWJsZSAgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dPbmx5UHJlcmVsZWFzZSAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgICAgc29ydEJ5QXZhaWxhYmlsaXR5ICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBjdXJhdGVkQ29sbGVjdGlvbkRldGFpbHMgICAgOiBudWxsLFxuICAgICAgICAgICAgZ2VuZXJhdGVkQ29sbGVjdGlvbkRldGFpbHMgIDogbnVsbCxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZCAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBvcmRlciAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxuXG4gICAgICAgICAgICAvLyBDb21wdXRlZCBwcm9wZXJ0eVxuICAgICAgICAgICAgdG90YWxJdGVtcyAgICAgICAgICAgICAgICAgIDogMFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBpc0x1Y2t5RGF5KCl7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnYXZhaWxhYmlsaXR5T3B0aW9uJykgPT09ICdhdmFpbGFibGUtbHVja3lkYXknO1xuICAgIH1cblxuICAgIGdldCBpc0dlbmVyYXRlZCgpIHtcbiAgICAgICAgcmV0dXJuICFfKHRoaXMuZ2V0KCdnZW5lcmF0ZWRDb2xsZWN0aW9uRGV0YWlscycpKS5pc0VtcHR5KCk7XG4gICAgfVxuXG4gICAgZ2V0IGlzQ3VyYXRlZCgpIHtcbiAgICAgICAgcmV0dXJuICFfKHRoaXMuZ2V0KCdjdXJhdGVkQ29sbGVjdGlvbkRldGFpbHMnKSkuaXNFbXB0eSgpO1xuICAgIH1cblxuICAgIGdldCB1c2VMaXN0T3JkZXIoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDdXJhdGVkICYmIHRoaXMuZ2V0KCdjdXJhdGVkQ29sbGVjdGlvbkRldGFpbHMnKS5pc09yZGVyZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHByb3Age1RpdGxlQ29sbGVjdGlvbn0gY29sbGVjdGlvblxuICAgICAqIEBtZW1iZXJvZiBDb2xsZWN0aW9uRGVmaW5pdGlvblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuXG4gICAgICAgIHRoaXMuX21lZGlhSW50ZXJmYWNlID0gbmV3IE1lZGlhSW50ZXJmYWNlKCk7XG5cbiAgICAgICAgdGhpcy50aXRsZUNvbGxlY3Rpb24gPSB0aGlzLl9tZWRpYUludGVyZmFjZS5pdGVtcztcblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMudGl0bGVDb2xsZWN0aW9uLCAnYWxsJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXQoJ3RvdGFsSXRlbXMnLCB0aGlzLnRpdGxlQ29sbGVjdGlvbi5sZW5ndGgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmZXRjaENvbGxlY3Rpb25UaXRsZXMoeyBwYXRyb25TZXR0aW5ncywgcm9vbX0pIHtcbiAgICAgICAgLy8gUGFyc2UgdGhlIGN1cnJlbnQgcm9vbSdzIG1hdHVyaXR5TGV2ZWxzIGlmIHRoZXJlIGlzIGEgcm9vbSwgYW5kIGEgbWF0dXJpdHlMZXZlbHMgZmlsdGVyIGhhcyBiZWVuIHNldFxuICAgICAgICBsZXQgcm9vbUhhc01hdHVyaXR5TGV2ZWxGaWx0ZXIgPSAhXy5pc0VtcHR5KHJvb20gJiYgcm9vbS5maWx0ZXJzICYmIHJvb20uZmlsdGVycy5tYXR1cml0eUxldmVscyk7XG5cbiAgICAgICAgbGV0IHBhdHJvbk1hdHVyaXR5TGV2ZWxQcmVmZXJlbmNlcyA9IHRoaXMuX3BhcnNlUGF0cm9uQXVkaWVuY2VTZXR0aW5ncyhwYXRyb25TZXR0aW5ncyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNHZW5lcmF0ZWQpIHtcbiAgICAgICAgICAgIGxldCBnZW5Db2xEZXRhaWxzID0gdGhpcy5nZXQoJ2dlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVzLnNvcnRCeSkge1xuICAgICAgICAgICAgICAgIGdlbkNvbERldGFpbHMuc29ydEJ5ID0gdGhpcy5hdHRyaWJ1dGVzLnNvcnRCeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghIXRoaXMuZ2V0KCdzaG93T25seUx1Y2t5RGF5QXZhaWxhYmxlJykpe1xuICAgICAgICAgICAgICAgIGdlbkNvbERldGFpbHMuc2hvd09ubHlMdWNreURheUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZGV0YWlscyA9IG5ldyBHZW5lcmF0ZWRDb2xsZWN0aW9uRGV0YWlscyhnZW5Db2xEZXRhaWxzKTtcbiAgICAgICAgICAgIGxldCBwYXJhbXMgID0gZGV0YWlscy5zZXJpYWxpemVGb3JTZWFyY2goKTtcblxuICAgICAgICAgICAgaWYgKCEhcGF0cm9uU2V0dGluZ3Muc2hvd09ubHlBdmFpbGFibGUpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuc2hvd09ubHlBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gYSByb29tIHdpdGggbWF0dXJpdHkgZmlsdGVycyBhcHBsaWVkLCB0aGUgZmlsdGVycyB3aWxsIGJlIGFwYXJ0IG9mIHRoZSBjb2xsZWN0aW9uIGRlZmluaXRpb24gYW5kIHdlIGNhbiBzaW1wbHkgcXVlcnkgZm9yIHRoZSBjb2xsZWN0aW9uXG4gICAgICAgICAgICAvLyBVc2VyIHByZWZlcmVuY2VzIHNob3VsZCBOT1Qgb3ZlcnJpZGUgYSByb29tJ3MgbWF0dXJpdHkgZmlsdGVyXG4gICAgICAgICAgICBpZiAocm9vbUhhc01hdHVyaXR5TGV2ZWxGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWVkaWFJbnRlcmZhY2UuZmV0Y2hDb2xsZWN0aW9uQnlQYXJhbWV0ZXJzKHBhcmFtcywgdGhpcy5jb2xsZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBPdGhlcndpc2UgZGV0ZXJtaW5lIGlmIHRoZSBVc2VyJ3MgbWF0dXJpdHkgZmlsdGVyIHNldHRpbmdzIGNvdmVyIHRoZSBjb2xsZWN0aW9uJ3MgbWF0dXJpdHlMZXZlbCBzZXR0aW5nc1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGdlbmVyYXRlZENvbGxlY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb2xsZWN0aW9uT3B0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIV8ocGF0cm9uTWF0dXJpdHlMZXZlbFByZWZlcmVuY2VzKS5pc0VtcHR5KCkgJiYgXyhwYXJhbXMubWF0dXJpdHlMZXZlbCkuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZ2VuZXJhdGVkQ29sbGVjdGlvbk9wdGlvbnMsIHsgbWF0dXJpdHlMZXZlbDogcGF0cm9uTWF0dXJpdHlMZXZlbFByZWZlcmVuY2VzIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIEZha2UgYW4gZW1wdHkgcmVzcG9uc2UgaWYgYWxsIHRoZSBhdXRvIGdlbmVyYXRlZCBjb2xsZWN0aW9uJ3MgZmlsdGVycyBhcmUgbm90IGNvdmVyZWQgYnkgdGhlIHVzZXIncyBtYXR1cml0eSBsZXZlbCBzZXR0aW5nc1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXRyb25GaWx0ZXJzUGVybWl0Q29sbGVjdGlvbihwYXJhbXMubWF0dXJpdHlMZXZlbCwgcGF0cm9uTWF0dXJpdHlMZXZlbFByZWZlcmVuY2VzKVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX21lZGlhSW50ZXJmYWNlLmZldGNoQ29sbGVjdGlvbkJ5UGFyYW1ldGVycyhwYXJhbXMsIGdlbmVyYXRlZENvbGxlY3Rpb25PcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX21lZGlhSW50ZXJmYWNlLmZldGNoRW1wdHlSZXNwb25zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgaWYgXCJpc0N1cmF0ZWRcIlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjdXJhdGVkQ29sbGVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbGxlY3Rpb25PcHRpb25zKTtcblxuICAgICAgICAgICAgaWYgKCEhcGF0cm9uU2V0dGluZ3Muc2hvd09ubHlBdmFpbGFibGUpIHtcbiAgICAgICAgICAgICAgICBjdXJhdGVkQ29sbGVjdGlvbk9wdGlvbnMuc2hvd09ubHlBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnc29ydC1jdXJhdGVkLWxpc3QtY2Fyb3VzZWxzJykgJiYgdGhpcy5hdHRyaWJ1dGVzLnNvcnRCeSkge1xuICAgICAgICAgICAgICAgIGN1cmF0ZWRDb2xsZWN0aW9uT3B0aW9ucy5zb3J0QnkgPSB0aGlzLmF0dHJpYnV0ZXMuc29ydEJ5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgTk9UIGluIGEgcm9vbSwgYXBwbHkgYSB1c2VyJ3MgbWF0dXJpdHkgc2V0dGluZ3MgaWYgcHJlc2VudCB0byB0aGUgY29sbGVjdGlvbiByZXF1ZXN0XG4gICAgICAgICAgICAvLyBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCBpZiBub25lIG9mIHRoZSBjb250ZW50IHNhdGlzZmllcyB0aGUgdXNlcidzIGZpbHRlciBpdHMgYWNjZXB0YWJsZSB0aGF0IG5vIHJlc3VsdHMgYXJlIHJldHVybmVkXG4gICAgICAgICAgICBpZiAoXyhyb29tKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGN1cmF0ZWRDb2xsZWN0aW9uT3B0aW9ucywgeyBtYXR1cml0eUxldmVsOiBwYXRyb25NYXR1cml0eUxldmVsUHJlZmVyZW5jZXMgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZWRpYUludGVyZmFjZS5mZXRjaENvbGxlY3Rpb25CeUlkKHRoaXMuaWQsIGN1cmF0ZWRDb2xsZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHRoZSBwYXRyb24gYXVkaWVuY2Ugc2V0dGluZ3MgbW9kZWwgaW50byBhbiBhcnJheSBvZiBmaWx0ZXIgdGVybXMgdGhhdCBNZWRpYUludGVyZmFjZSB1bmRlcnN0YW5kcywgZXg6XG4gICAgLy8gXCJhdWRpZW5jZS1zZXR0aW5nXCI6IHtcbiAgICAvLyAgICAgXCJhbGxcIiAgICAgICAgICAgIDogZmFsc2UsXG4gICAgLy8gICAgIFwianV2ZW5pbGVcIiAgICAgICA6IGZhbHNlLFxuICAgIC8vICAgICBcInlvdW5nYWR1bHRcIiAgICAgOiB0cnVlLFxuICAgIC8vICAgICBcImdlbmVyYWxjb250ZW50XCIgOiB0cnVlLFxuICAgIC8vICAgICBcImFkdWx0b25seVwiICAgICAgOiB0cnVlXG4gICAgLy8gfVxuICAgIC8vIHRvOiBbXCJ5b3VuZ2FkdWx0XCIsIFwiZ2VuZXJhbGNvbnRlbnRcIiwgXCJhZHVsdG9ubHlcIl1cbiAgICAvKiogQHJldHVybnMge3N0cmluZ1tdfSAqL1xuICAgIF9wYXJzZVBhdHJvbkF1ZGllbmNlU2V0dGluZ3MocGF0cm9uU2V0dGluZ3MpIHtcbiAgICAgICAgbGV0IHBhdHJvbkF1ZGllbmNlU2V0dGluZyA9IHBhdHJvblNldHRpbmdzICYmIHBhdHJvblNldHRpbmdzWydhdWRpZW5jZS1zZXR0aW5nJ10gfHwge307XG5cbiAgICAgICAgaWYgKF8ocGF0cm9uQXVkaWVuY2VTZXR0aW5nKS5pc0VtcHR5KCkgfHwgcGF0cm9uQXVkaWVuY2VTZXR0aW5nLmFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGF1ZGllbmNlRmlsdGVycyA9IFtdO1xuICAgICAgICBfKHBhdHJvbkF1ZGllbmNlU2V0dGluZykuZWFjaCgoaXNBcHBsaWVkLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0FwcGxpZWQgJiYga2V5ICE9PSBcImFsbFwiKSB7XG4gICAgICAgICAgICAgICAgYXVkaWVuY2VGaWx0ZXJzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGF1ZGllbmNlRmlsdGVycztcbiAgICB9XG5cbiAgICBfcGF0cm9uRmlsdGVyc1Blcm1pdENvbGxlY3Rpb24oY29sbGVjdGlvbk1hdHVyaXR5RmlsdGVycyA9IFtdLCB1c2VyTWF0dXJpdHlGaWx0ZXJzID0gW10pIHtcbiAgICAgICAgaWYgKHVzZXJNYXR1cml0eUZpbHRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25Mb3dlciA9IGNvbGxlY3Rpb25NYXR1cml0eUZpbHRlcnMubWFwKChmaWx0ZXIpID0+IGZpbHRlci50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgY29uc3QgdXNlckxvd2VyID0gdXNlck1hdHVyaXR5RmlsdGVycy5tYXAoKGZpbHRlcikgPT4gZmlsdGVyLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgIHJldHVybiBfKGNvbGxlY3Rpb25Mb3dlcikuZGlmZmVyZW5jZSh1c2VyTG93ZXIpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG59XG4iLCJpbXBvcnQgQ29sbGVjdGlvbkhpZ2hsaWdodFZpZXcgICAgICBmcm9tICcuLi9jb2xsZWN0aW9uX2hpZ2hsaWdodC92aWV3cy9Db2xsZWN0aW9uSGlnaGxpZ2h0JztcbmltcG9ydCBTbGFudGVkQ29sbGVjdGlvbkhpZ2hsaWdodCAgIGZyb20gJy4uL2NvbGxlY3Rpb25faGlnaGxpZ2h0X3NsYW50ZWQvU2xhbnRlZENvbGxlY3Rpb25IaWdodGxpZ2h0JztcbmNvbnN0IHtmZWF0dXJlTWFuYWdlcn0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbGxlY3Rpb25IaWdobGlnaHRWaWV3RmFjdG9yeVxue1xuICAgIHN0YXRpYyBCdWlsZChjb2xsZWN0aW9uRGVmaW5pdGlvbiwgdmlld09wdGlvbnMsIGZvcmNlU2xhbnRlZCA9IGZhbHNlKXtcbiAgICAgICAgaWYgKChmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ0x1Y2t5RGF5JykgJiYgY29sbGVjdGlvbkRlZmluaXRpb24uaXNMdWNreURheSkgfHwgZm9yY2VTbGFudGVkKXtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2xhbnRlZENvbGxlY3Rpb25IaWdobGlnaHQodmlld09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uSGlnaGxpZ2h0Vmlldyh2aWV3T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgQ29sbGVjdGlvbkRlZmluaXRpb24gZnJvbSAnLi9Db2xsZWN0aW9uRGVmaW5pdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbGxlY3Rpb25NYW5hZ2VyIGV4dGVuZHMgQmFja2JvbmUuQ29sbGVjdGlvbiB7XG4gICAgZ2V0IG1vZGVsKCkgeyByZXR1cm4gQ29sbGVjdGlvbkRlZmluaXRpb247IH1cbn1cbiIsImltcG9ydCBDb2xsZWN0aW9uRGVmaW5pdGlvbiBmcm9tICcuL0NvbGxlY3Rpb25EZWZpbml0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFnZU1hbmFnZXIgZXh0ZW5kcyBCYWNrYm9uZS5Nb2RlbCB7XG5cbiAgICBnZXQgaWRBdHRyaWJ1dGUoKSB7IHJldHVybiAncGFnZUlkJzsgfVxuXG4gICAgZ2V0IGlzTG9hZGVkKCkge1xuICAgICAgICByZXR1cm4gIV8uaXNFbXB0eSh0aGlzLmF0dHJpYnV0ZXMpO1xuICAgIH1cblxuICAgIC8vIHBhZ2UgPT0gcm9vbSwgcGFnZSBoYXMgdmlld3MsIG9uZSBvZiB3aGljaCBpcyB0aGUgaG9tZS1wYWdlIGNvbGxlY3Rpb25zIGNvbGxlY3Rpb25cbiAgICAvLyByZWY6IC92Mi9saWJyYXJpZXMvcWEvcGFnZXNcbiAgICBmZXRjaFJvb21CeUlkKHJvb21JZCA9ICdob21lJykge1xuICAgICAgICB0aGlzLnVybCA9IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5yZXN0LnJvb21zLmdldCwgeyByb29tSWQgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2goe1xuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IChtb2RlbCwgcmVzcG9uc2UsIG9wdGlvbnMpID0+IHJlc29sdmUocmVzcG9uc2UpLFxuICAgICAgICAgICAgICAgIGVycm9yOiAobW9kZWwsIHJlc3BvbnNlLCBvcHRpb25zKSA9PiByZWplY3QocmVzcG9uc2UpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZmV0Y2hDYW1wYWlnbkJ5SWQoY2FtcGFpZ25JZCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5yZXN0LmNhbXBhaWducy5nZXQsIHsgY2FtcGFpZ25JZCB9KSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kb25lKChyZXNwb25zZSkgPT4gcmVzb2x2ZShyZXNwb25zZSkpXG4gICAgICAgICAgICAgICAgLmZhaWwoKGpxSFhSKSA9PiByZWplY3QoanFIWFIpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZmV0Y2hGaXJzdERpc3BsYXlhYmxlQ2FtcGFpZ24ocm9vbUlkID0gJ2hvbWUnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogd2luZG93LnVybCh3aW5kb3cucm91dGVzLnJlc3QuY2FtcGFpZ25zLmdldEZpcnN0RGlzcGxheWFibGUsIHsgcm9vbUlkIH0pLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgdGltZW91dDogMTAwMDBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRvbmUoKHJlc3BvbnNlKSA9PiByZXNvbHZlKHJlc3BvbnNlKSlcbiAgICAgICAgICAgICAgICAuZmFpbCgoanFIWFIpID0+IHJlamVjdChqcUhYUikpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmZXRjaENvbGxlY3Rpb25CeUlkKGNvbGxlY3Rpb25JZCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5yZXN0LmNvbGxlY3Rpb25zLmdldEJ5SWQsIHsgaWQ6IGNvbGxlY3Rpb25JZCB9KSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kb25lKChyZXNwb25zZSkgPT4gcmVzb2x2ZShuZXcgQ29sbGVjdGlvbkRlZmluaXRpb24ocmVzcG9uc2UpKSlcbiAgICAgICAgICAgICAgICAuZmFpbCgoanFIWFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSA9PiByZWplY3QoanFIWFIpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0Vmlldyh2aWV3TmFtZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2FkZWQpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgICAgICByZXR1cm4gKHZpZXdOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnaG9tZSdcbiAgICAgICAgICAgID8gXyh0aGlzLmF0dHJpYnV0ZXMudmlld3MpLmZpbmRXaGVyZSh7IGlzRGVmYXVsdDogdHJ1ZSB9KVxuICAgICAgICAgICAgOiBfKHRoaXMuYXR0cmlidXRlcy52aWV3cykuZmluZFdoZXJlKHsgbmFtZTogdmlld05hbWUgfSk7XG4gICAgfVxuXG4gICAgZ2V0Q2FtcGFpZ25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xvYWRlZCAmJiB0aGlzLmF0dHJpYnV0ZXMuY2FtcGFpZ25zO1xuICAgIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0ICh7IG5hbWUsIGxhbmd1YWdlQ29kZSwgcm9vbSwgc2VlQWxsVXJsIH0pID0+IGBcbjxkaXYgY2xhc3M9XCJjb2xsZWN0aW9uLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJIZXJvLWJhbm5lciAkeyAhIXJvb20gJiYgYGlzLSR7cm9vbS50aGVtZU5hbWV9YCB9XCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBzbWFsbC0xMiBDb2xsZWN0aW9uIFN0YW5kYXJkXCI+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJjb2xsZWN0aW9uVGl0bGUgTGFiZWwgbGVmdCBpbnZpc2libGVcIiB0YWJpbmRleD1cIi0xXCIgbGFuZz1cIiR7bGFuZ3VhZ2VDb2RlfVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiJHtzZWVBbGxVcmx9XCIgY2xhc3M9XCJUaXRsZUxpbmsgQ2Fyb3VzZWwtdGl0bGVMaW5rICR7ICEhcm9vbSAmJiBgaXMtJHtyb29tLnRoZW1lTmFtZX1gIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7bmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbi1mb3J3YXJkLWFycm93IHNlY29uZGFyeS1jb2xvclwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIiR7c2VlQWxsVXJsfVwiIHJvbGU9XCJsaW5rXCIgYXJpYS1sYWJlbD1cIiR7IGh0bWwoJ2Nhcm91c2VsLnNlZUFsbFRpdGxlcycsIHsgY29sbGVjdGlvbk5hbWU6IG5hbWUgfSkgfVwiIGNsYXNzPVwiQ2Fyb3VzZWwtc2VlQWxsIHUtYWxsQ2FwcyBidXR0b24gcmFkaXVzIG5vLW91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtodG1sKCdzZWVBbGwnKX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJUaXRsZXNcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJ0aXRsZUNvbnRhaW5lclwiPjwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5gO1xuIiwiaW1wb3J0IFRpdGxlQ29sbGVjdGlvblZpZXcgZnJvbSAnLi4vLi4vbWVkaWEvVGl0bGVDb2xsZWN0aW9uVmlldyc7XG5pbXBvcnQgQ29sbGVjdGlvbkhpZ2hsaWdodFRlbXBsYXRlIGZyb20gJy4uL3RlbXBsYXRlcy9jb2xsZWN0aW9uX2hpZ2hsaWdodC5odG1sJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvbkhpZ2hsaWdodCBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIHRlbXBsYXRlID0gQ29sbGVjdGlvbkhpZ2hsaWdodFRlbXBsYXRlO1xuXG4gICAgdmlld0F0dHJpYnV0ZXMoY29sbGVjdGlvbikge1xuICAgICAgICBsZXQgY2xhc3NlcyA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmlzSGVybykge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGBsYXJnZS1ibG9jay1ncmlkLSR7Y29sbGVjdGlvbi5sZW5ndGh9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goYGxhcmdlLWJsb2NrLWdyaWQtNmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbGxlY3Rpb24ubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaChgc21hbGwtYmxvY2stZ3JpZC0ke2NvbGxlY3Rpb24ubGVuZ3RofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbGxlY3Rpb24ubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaChgc21hbGwtYmxvY2stZ3JpZC0yIG1lZGl1bS1ibG9jay1ncmlkLTNgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjbGFzczogYHRpdGxlQ29udGFpbmVyICR7Y2xhc3Nlcy5qb2luKCcgJyl9YCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcih7IGJ1cywgcm9vbSwgaXNIZXJvID0gZmFsc2UgfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuXG4gICAgICAgIHRoaXMuYnVzID0gYnVzO1xuICAgICAgICB0aGlzLnJvb20gPSByb29tO1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb24gPSB0aGlzLm1vZGVsLnRpdGxlQ29sbGVjdGlvbjtcbiAgICAgICAgdGhpcy5pc0hlcm8gPSBpc0hlcm87XG5cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBnZXQgc2VlQWxsVXJsKCkge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uSWQgPSB0aGlzLm1vZGVsLmdldCgnaWQnKTtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5jb2xsZWN0aW9uQnlJZCwgeyBjb2xsZWN0aW9uSWQgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGRlc2lyZWRUaXRsZUNvdW50KCkge1xuICAgICAgICByZXR1cm4gNjtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCAkdmlldyA9ICQoXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIF8uZXh0ZW5kKHt9LCB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgcm9vbTogdGhpcy5yb29tLFxuICAgICAgICAgICAgICAgICAgICBzZWVBbGxVcmw6IHRoaXMuc2VlQWxsVXJsLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy50aXRsZUNvbGxlY3Rpb25WaWV3ICYmIHRoaXMudGl0bGVDb2xsZWN0aW9uVmlldy5yZW1vdmUoKTtcblxuICAgICAgICB0aGlzLnRpdGxlQ29sbGVjdGlvblZpZXcgPSBuZXcgVGl0bGVDb2xsZWN0aW9uVmlldyh7XG4gICAgICAgICAgICBlbDogJHZpZXcuZmluZCgnLnRpdGxlQ29udGFpbmVyJyksXG4gICAgICAgICAgICBidXM6IHRoaXMuYnVzLFxuICAgICAgICAgICAgYXR0cmlidXRlczogdGhpcy52aWV3QXR0cmlidXRlcyh0aGlzLmNvbGxlY3Rpb24pLFxuICAgICAgICAgICAgY29sbGVjdGlvbjogdGhpcy5jb2xsZWN0aW9uLFxuICAgICAgICAgICAgY292ZXJXaWR0aHM6IHsgbW9iaWxlOiAxNDUsIHRhYmxldDogMTYwLCBkZXNrdG9wOiAxOTAgfSxcbiAgICAgICAgICAgIGlzSW5IZXJvOiB0aGlzLmlzSGVybyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uRGVmaW5pdGlvbjogdGhpcy5tb2RlbCxcbiAgICAgICAgICAgICAgICByb29tOiB0aGlzLnJvb20sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyByZWY6IExIVE5HLTE5NzAgLSBoaWRpbmcgdGhlIGxhc3QgdHdvIGVsZW1lbnRzIHNvIHdlIGNhbiByZW1vdmUgdGhlIG92ZXJmbG93IGhpZGRlbiBvbiB0aGUgcGFyZW50IGNvbnRhaW5lclxuICAgICAgICAkdmlldy5maW5kKCcuSXRlbScpLmVhY2goKGksIGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoaSA+IDMpIHtcbiAgICAgICAgICAgICAgICAkKGVsKS5hZGRDbGFzcyhgdGl0bGVzLWl0ZW0tb3ZlcmZsb3dgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQoJHZpZXcpO1xuICAgICAgICBpZiAodGhpcy5pc0hlcm8pIHtcbiAgICAgICAgICAgIHRoaXMubWFrZUhlcm8oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG1ha2VIZXJvKCkge1xuICAgICAgICBpZiAoIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2dlby1pZGMnKSkge1xuICAgICAgICAgICAgdGhpcy5pc0hlcm8gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy4kZWwuZmluZCgnLmNvbGxlY3Rpb24tY29udGFpbmVyJykuYWRkQ2xhc3MoJ0hlcm8nKTtcbiAgICAgICAgICAgIHRoaXMuJGVsLmZpbmQoJy5pY29uLWZvcndhcmQtYXJyb3cnKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIGxldCBkZXNjcmlwdGlvbiA9IHRoaXMubW9kZWwuYXR0cmlidXRlcy5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKCcuY29sbGVjdGlvblRpdGxlJylcbiAgICAgICAgICAgICAgICAgICAgLmFmdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgYDxwIGNsYXNzPVwiSGVyby1jb2xsZWN0aW9uRGVzY3JpcHRpb25cIj4ke2Rlc2NyaXB0aW9ufTwvcD5gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIHRoaXMudGl0bGVDb2xsZWN0aW9uVmlldyAmJiB0aGlzLnRpdGxlQ29sbGVjdGlvblZpZXcucmVtb3ZlKCk7XG4gICAgICAgIHN1cGVyLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIHRvZ2dsZVRpdGxlVmlzaWJpbGl0eShpc1Zpc2libGUpIHtcbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy4kZWwuZmluZCgnLmNvbGxlY3Rpb25UaXRsZScpO1xuICAgICAgICBpc1Zpc2libGVcbiAgICAgICAgICAgID8gdGl0bGUucmVtb3ZlQ2xhc3MoJ2ludmlzaWJsZScpXG4gICAgICAgICAgICA6IHRpdGxlLmFkZENsYXNzKCdpbnZpc2libGUnKTtcbiAgICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCAoe2NvdmVyR3JpZFNpemVDbGFzcywgY29sbGVjdGlvblRpdGxlLCBjb2xsZWN0aW9uRGVzY3JpcHRpb24sIGNvbGxlY3Rpb25JZCwgY292ZXJzSHRtbCwgYmFubmVyQmFja2dyb3VuZENvbG9yLCBiYW5uZXJUZXh0Q29sb3IsIGlzSGVybywgdXNlRmFsbGJhY2tEaXNwbGF5LCBmYWxsQmFja0dyaWRXaWR0aH0pID0+IGBcbjxkaXYgY2xhc3M9XCJzbGFudGVkQ29sbGVjdGlvbkhpZ2hsaWdodFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtYWluQm94ICR7aXNIZXJvID8gJ2hlcm8nIDogJyd9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0QmxvY2tPdXRlclwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjoke2Jhbm5lckJhY2tncm91bmRDb2xvcn07Y29sb3I6JHtiYW5uZXJUZXh0Q29sb3J9XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dEJsb2NrSW5uZXIgaW52aXNpYmxlXCI+XG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZ1dyYXBwZXJcIj48YSBjbGFzcz1cInRpdGxlXCIgaHJlZj1cIiR7d2luZG93LnVybCh3aW5kb3cucm91dGVzLmNvbGxlY3Rpb25CeUlkLCB7Y29sbGVjdGlvbklkOiBjb2xsZWN0aW9uSWR9KX1cIj4ke2NvbGxlY3Rpb25UaXRsZX08L2E+PC9oMj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj4ke2NvbGxlY3Rpb25EZXNjcmlwdGlvbn08L2Rpdj5cbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImNvbGxlY3Rpb25MaW5rIGhvcml6b250YWxcIiBocmVmPVwiJHt3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMuY29sbGVjdGlvbkJ5SWQsIHtjb2xsZWN0aW9uSWQ6IGNvbGxlY3Rpb25JZH0pfVwiPiR7d2luZG93LnRleHQoJ3NlZUFsbCcpfTxpIGNsYXNzPVwiaWNvbi1mb3J3YXJkLWFycm93XCIvPjwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlQ292ZXJzICR7Y292ZXJHcmlkU2l6ZUNsYXNzfVwiPlxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkV3JhcHBlck91dGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkV3JhcHBlckFzcGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHt1c2VGYWxsYmFja0Rpc3BsYXkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgYDx1bCBjbGFzcz1cImZhbGxiYWNrQ292ZXJHcmlkIHNtYWxsLWJsb2NrLWdyaWQtJHtmYWxsQmFja0dyaWRXaWR0aH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvdmVyc0h0bWwubWFwKChodG1sKSA9PiBgPGxpIGNsYXNzPVwiY292ZXJJbWFnZUNvbnRhaW5lckNvbnRhaW5lclwiPiR7aHRtbH08L2xpPmApLmpvaW4oJycpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGA8ZGl2IGNsYXNzPVwiZ3JpZElubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb3ZlcnNIdG1sLm1hcCgoY292ZXJIdG1sLCBpbmRleCkgPT4gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjJHtpbmRleCArIDF9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Y292ZXJIdG1sfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApLmpvaW4oJycpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxhIGNsYXNzPVwiY29sbGVjdGlvbkxpbmsgdmVydGljYWxcIiBocmVmPVwiJHt3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMuY29sbGVjdGlvbkJ5SWQsIHtjb2xsZWN0aW9uSWQ6IGNvbGxlY3Rpb25JZH0pfVwiPiR7d2luZG93LnRleHQoJ3NlZUFsbCcpfTxpIGNsYXNzPVwiaWNvbi1mb3J3YXJkLWFycm93XCIvPjwvYT5cbjwvZGl2PlxuYDtcblxuIiwiaW1wb3J0IFNsYW50ZWRHcmlkVGVtcGxhdGUgIGZyb20gJy4vU2xhbnRlZENvbGxlY3Rpb25IaWdodGxpZ2h0Lmh0bWwnO1xuaW1wb3J0IENvdmVyIGZyb20gJy4uL21lZGlhL0NvdmVyJztcbmltcG9ydCBUaXRsZU5hbWUgZnJvbSAnLi4vbWVkaWEvdmlld3MvVGl0bGVJbmZvL1RpdGxlTmFtZSc7XG5pbXBvcnQgQ29sb3JVdGlsaXR5IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9jb2xvclV0aWxpdHknO1xuY29uc3Qge092ZXJEcml2ZX0gPSB3aW5kb3c7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2xhbnRlZENvbGxlY3Rpb25IaWdobGlnaHQgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcblxuICAgIHRlbXBsYXRlID0gU2xhbnRlZEdyaWRUZW1wbGF0ZTtcbiAgICBjb25zdHJ1Y3Rvcih7IGJ1cywgcm9vbSwgaXNIZXJvID0gZmFsc2UsIHRpdGxlQ291bnRPdmVycmlkZSA9IG51bGwgfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuXG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG4gICAgICAgIHRoaXMuYnVzICAgICAgICAgPSBidXM7XG4gICAgICAgIHRoaXMucm9vbSAgICAgICAgPSByb29tO1xuICAgICAgICB0aGlzLmlzSGVybyAgICAgID0gaXNIZXJvO1xuICAgICAgICB0aGlzLmhpZ2hDb250cmFzdE1vZGUgPSB3aW5kb3cuT3ZlckRyaXZlLmhpZ2hDb250cmFzdDtcbiAgICAgICAgdGhpcy50aXRsZUNvdW50T3ZlcnJpZGUgPSB0aXRsZUNvdW50T3ZlcnJpZGU7XG5cbiAgICAgICAgdGhpcy5fdmVydFRvSG9yaXpCcmVha3BvaW50UHggPSA3MjA7XG4gICAgICAgIHRoaXMuX2NvdmVyQmxvY2tXaWR0aFBlcmNlbnRMYXJnZSA9IDAuNTg7XG4gICAgICAgIHRoaXMuX2NvdmVyQmxvY2tXaWR0aFBlcmNlbnRhZ2VTbWFsbCA9IDE7XG5cbiAgICAgICAgdGhpcy5fc21hbGxHcmlkTWF4V2lkdGhQeCA9IDU1NTtcbiAgICAgICAgdGhpcy5fbWVkaXVtR3JpZE1heFdpZHRoUHggPSA2Njc7XG4gICAgICAgIHRoaXMuX2xhcmdlR3JpZE1heFdpZHRoUHggPSAxMjgwO1xuICAgICAgICB0aGlzLl9jb3ZlclBsYWNlaG9sZGVySHRtbCA9ICc8ZGl2IHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIkNvdmVySW1hZ2VDb250YWluZXIgcGxhY2Vob2xkZXJcIj48L2Rpdj4nO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTtcbiAgICAgICAgbGV0IGNvbG9ycyA9IHRoaXMuZ2V0VGl0bGVQYW5lbENvbG9ycygpO1xuXG4gICAgICAgIGxldCBzaXplSW5mbyA9IHRoaXMuZ2V0R3JpZFNpemUoKTtcbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQoXG4gICAgICAgICAgICAkKHRoaXMudGVtcGxhdGUoe1xuICAgICAgICAgICAgICAgIGNvdmVyR3JpZFNpemVDbGFzczogc2l6ZUluZm8uY2xhc3MsXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvblRpdGxlOiB0aGlzLm1vZGVsLmdldCgnbmFtZScpLFxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25EZXNjcmlwdGlvbjogdGhpcy5tb2RlbC5nZXQoJ2Rlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbklkOiB0aGlzLm1vZGVsLmdldCgnaWQnKSxcbiAgICAgICAgICAgICAgICBjb3ZlcnNIdG1sOiB0aGlzLmdldENvdmVyc0h0bWwoKSxcbiAgICAgICAgICAgICAgICBiYW5uZXJCYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5iYWNrZ3JvdW5kLFxuICAgICAgICAgICAgICAgIGJhbm5lclRleHRDb2xvcjogY29sb3JzLmZvcmVncm91bmQsXG4gICAgICAgICAgICAgICAgaXNIZXJvOiB0aGlzLmlzSGVybyxcbiAgICAgICAgICAgICAgICB1c2VGYWxsYmFja0Rpc3BsYXk6IHRoaXMudXNlRmFsbGJhY2tEaXNwbGF5LFxuICAgICAgICAgICAgICAgIGZhbGxCYWNrR3JpZFdpZHRoOiBzaXplSW5mby5ncmlkV2lkdGhGYWxsYmFja1xuICAgICAgICAgICAgfSkpKTtcblxuICAgICAgICAgICAgdGhpcy4kZWwuZmluZCgnLnRleHRCbG9ja0lubmVyIGEnKS5vbignbW91c2VvdmVyJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2dC5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yID0gY29sb3JzLmZvcmVncm91bmRIb3ZlcjtcbiAgICAgICAgICAgIH0pLm9uKCdtb3VzZW91dCcsIChldnQpID0+IHtcbiAgICAgICAgICAgICAgICBldnQuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvciA9IGNvbG9ycy5mb3JlZ3JvdW5kO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZ2V0IGRlc2lyZWRUaXRsZUNvdW50KCl7XG4gICAgICAgIGlmICh0aGlzLnRpdGxlQ291bnRPdmVycmlkZSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aXRsZUNvdW50T3ZlcnJpZGU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2l6ZUluZm8gPSB0aGlzLmdldEdyaWRTaXplKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZUZhbGxiYWNrRGlzcGxheSA/IHNpemVJbmZvLm51bUNvdmVyc0ZhbGxiYWNrIDogc2l6ZUluZm8ubnVtQ292ZXJzO1xuICAgIH1cblxuICAgIGdldCB1c2VGYWxsYmFja0Rpc3BsYXkoKXtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5Nb2Rlcm5penIgJiYgIXdpbmRvdy5Nb2Rlcm5penIuY3NzZ3JpZDtcbiAgICB9XG5cbiAgICBnZXRHcmlkU2l6ZSgpe1xuXG4gICAgICAgIGNvbnN0IHhsYXJnZSA9IHtcbiAgICAgICAgICAgIGNsYXNzOiAnZXh0cmFMYXJnZScsXG4gICAgICAgICAgICBudW1Db3ZlcnM6IDM5LFxuICAgICAgICAgICAgbnVtQ292ZXJzRmFsbGJhY2s6IDQ3LFxuICAgICAgICAgICAgbnVtVGlsZXNGYWxsYmFjazogMTE3LFxuICAgICAgICAgICAgZ3JpZFdpZHRoRmFsbGJhY2s6IDEzLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXJJbmRleGVzOiBbNCw1LDYsNyw4LDksMTAsMTEsMTIsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzcsNzgsNzksODAsODEsODIsODMsODQsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTJdXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbGFyZ2UgPSB7XG4gICAgICAgICAgICBjbGFzczogJ2xhcmdlJyxcbiAgICAgICAgICAgIG51bUNvdmVyczogMjUsXG4gICAgICAgICAgICBudW1Db3ZlcnNGYWxsYmFjazogMjUsXG4gICAgICAgICAgICBudW1UaWxlc0ZhbGxiYWNrOiA1NCxcbiAgICAgICAgICAgIGdyaWRXaWR0aEZhbGxiYWNrOiA5LFxuICAgICAgICAgICAgcGxhY2Vob2xkZXJJbmRleGVzOiBbMCw0LDUsNiw3LDgsMTQsMTUsMTYsMTcsMTgsMjUsMjYsMjcsMjgsMzUsMzYsMzcsMzgsMzksNDQsNDUsNDYsNDcsNDgsNDksNTIsNTNdXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWVkaXVtID0ge1xuICAgICAgICAgICAgY2xhc3M6ICdtZWRpdW0nLFxuICAgICAgICAgICAgbnVtQ292ZXJzOiAxNyxcbiAgICAgICAgICAgIG51bUNvdmVyc0ZhbGxiYWNrOiAyMSxcbiAgICAgICAgICAgIG51bVRpbGVzRmFsbGJhY2s6IDM1LFxuICAgICAgICAgICAgZ3JpZFdpZHRoRmFsbGJhY2s6IDcsXG4gICAgICAgICAgICBwbGFjZWhvbGRlckluZGV4ZXM6IFswLDQsNSw2LDEyLDEzLDE0LDIxLDIyLDI4LDI5LDMwLDMxXVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHNtYWxsID0ge1xuICAgICAgICAgICAgY2xhc3M6ICdzbWFsbCcsXG4gICAgICAgICAgICBudW1Db3ZlcnM6IDEyLFxuICAgICAgICAgICAgbnVtQ292ZXJzRmFsbGJhY2s6IDIwLFxuICAgICAgICAgICAgbnVtVGlsZXNGYWxsYmFjazogMjAsXG4gICAgICAgICAgICBncmlkV2lkdGhGYWxsYmFjazogNSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVySW5kZXhlczogWzAsMTAsMTUsMTZdXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gdGFrZSB0aGUgbWF4IG9mIHRoZSBhdmFpbGFibGUgd2lkdGggYW5kIGhlaWdodCBzbyB3ZSBkb24ndCBuZWVkIHRvIHJlcmVuZGVyIHdoZW4gdGhlIGRldmljZSByb3RhdGVzXG4gICAgICAgIGxldCBsYXJnZURpbWVuc2lvbiA9IE1hdGgubWF4KHdpbmRvdy5zY3JlZW4uYXZhaWxXaWR0aCwgd2luZG93LnNjcmVlbi5hdmFpbEhlaWdodCk7XG4gICAgICAgIGxldCBzbWFsbERpbWVuc2lvbiA9IE1hdGgubWluKHdpbmRvdy5zY3JlZW4uYXZhaWxXaWR0aCwgd2luZG93LnNjcmVlbi5hdmFpbEhlaWdodCk7XG5cbiAgICAgICAgbGV0IGxhbmRzY2FwZU1heEdyaWRXaWR0aCA9IChsYXJnZURpbWVuc2lvbiA8IHRoaXMuX3ZlcnRUb0hvcml6QnJlYWtwb2ludFB4KVxuICAgICAgICAgICAgPyBsYXJnZURpbWVuc2lvbiAqIHRoaXMuX2NvdmVyQmxvY2tXaWR0aFBlcmNlbnRhZ2VTbWFsbFxuICAgICAgICAgICAgOiBsYXJnZURpbWVuc2lvbiAqIHRoaXMuX2NvdmVyQmxvY2tXaWR0aFBlcmNlbnRMYXJnZTtcblxuICAgICAgICBsZXQgcG9ydHJhaXRNYXhHcmlkV2lkdGggPSAoc21hbGxEaW1lbnNpb24gPCB0aGlzLl92ZXJ0VG9Ib3JpekJyZWFrcG9pbnRQeClcbiAgICAgICAgICAgID8gc21hbGxEaW1lbnNpb24gKiB0aGlzLl9jb3ZlckJsb2NrV2lkdGhQZXJjZW50YWdlU21hbGxcbiAgICAgICAgICAgIDogc21hbGxEaW1lbnNpb24gKiB0aGlzLl9jb3ZlckJsb2NrV2lkdGhQZXJjZW50TGFyZ2U7XG5cbiAgICAgICAgbGV0IG1heENvdmVyR3JpZFdpZHRoID0gTWF0aC5tYXgobGFuZHNjYXBlTWF4R3JpZFdpZHRoLCBwb3J0cmFpdE1heEdyaWRXaWR0aCk7XG5cbiAgICAgICAgaWYgKG1heENvdmVyR3JpZFdpZHRoIDw9IHRoaXMuX3NtYWxsR3JpZE1heFdpZHRoUHgpe1xuICAgICAgICAgICAgcmV0dXJuIHNtYWxsO1xuICAgICAgICB9IGVsc2UgaWYgKG1heENvdmVyR3JpZFdpZHRoIDw9IHRoaXMuX21lZGl1bUdyaWRNYXhXaWR0aFB4KXtcbiAgICAgICAgICAgIHJldHVybiBtZWRpdW07XG4gICAgICAgIH0gZWxzZSBpZiAobWF4Q292ZXJHcmlkV2lkdGggPD0gdGhpcy5fbGFyZ2VHcmlkTWF4V2lkdGhQeCl7XG4gICAgICAgICAgICByZXR1cm4gbGFyZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geGxhcmdlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0VGl0bGVQYW5lbENvbG9ycygpe1xuXG4gICAgICAgIGxldCBiYWNrZ3JvdW5kQ29sb3I7XG5cbiAgICAgICAgaWYgKHRoaXMuaGlnaENvbnRyYXN0TW9kZSl7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBDb2xvclV0aWxpdHkuaGlnaENvbnRyYXN0Qmx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNob29zZSBhIGRpZmZlcmVudCBjb3ZlciBmb3IgdGhlIHNvdXJjZSBjb2xvciB3aGVuIHRoZSB0aXRsZSBibG9jayBpcyByZW5kZXJlZCBhYm92ZSB0aGUgY292ZXIgZ3JpZC5cbiAgICAgICAgICAgIC8vIFRoZSBlZmZlY3QgaXMgbmljZXIgaWYgdGhlIHNvdXJjZSBjb3ZlciBpcyBhYnV0cyB0aGUgY29sb3JlZCBhcmVhIHRoYXQgbWF0Y2hlcyBpdC5cbiAgICAgICAgICAgIGxldCBjb2xvclNvdXJjZVRpdGxlID0gdGhpcy5tb2RlbC50aXRsZUNvbGxlY3Rpb24uZmlyc3QoKTtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IHRoaXMuX3ZlcnRUb0hvcml6QnJlYWtwb2ludFB4ICYmIHRoaXMubW9kZWwudGl0bGVDb2xsZWN0aW9uLmxlbmd0aCA+IDIpe1xuICAgICAgICAgICAgICAgIGNvbG9yU291cmNlVGl0bGUgPSB0aGlzLm1vZGVsLnRpdGxlQ29sbGVjdGlvbi5hdCgyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNvdmVyID0gY29sb3JTb3VyY2VUaXRsZS5nZXRDb3ZlcigzMDApO1xuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gJyNhNzlkOTknO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNIZXJvICYmIE92ZXJEcml2ZS5jb2xvcnMucHJpbWFyeSl7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gT3ZlckRyaXZlLmNvbG9ycy5wcmltYXJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWNvbG9yU291cmNlVGl0bGUuaXNQbGFjZWhvbGRlciAmJiBjb3ZlciAmJiBjb3Zlci5wcmltYXJ5Q29sb3Ipe1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvciA9IGNvdmVyLnByaW1hcnlDb2xvci5oZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvciA9ICcjYTc5ZDk5JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmb3JlZ3JvdW5kQ29sb3IgPSBDb2xvclV0aWxpdHkuZ2V0VGV4dENvbG9yRnJvbUhleChiYWNrZ3JvdW5kQ29sb3IpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICBmb3JlZ3JvdW5kOiBmb3JlZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICBmb3JlZ3JvdW5kSG92ZXI6IENvbG9yVXRpbGl0eS5zaGFkZUNvbG9ySGV4KGJhY2tncm91bmRDb2xvciwgMC4yKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIFJlbmRlciBvbmUgY292ZXIgZm9yIGVhY2ggYXZhaWxhYmxlIHRpdGxlIGFuZCB0aGVuIHJlcGVhdCB0aGVtIHRvIHJlYWNoIHRoZVxuICAgIC8vIGRlc2lyZWQgY292ZXIgY291bnRcbiAgICBnZXRDb3ZlcnNIdG1sKCl7XG4gICAgICAgIHRoaXMucmVuZGVyQmFzZUNvdmVycygpO1xuICAgICAgICBsZXQgc2l6ZUluZm8gPSB0aGlzLmdldEdyaWRTaXplKCk7XG5cbiAgICAgICAgbGV0IG51bVJlcXVpcmVkID0gIXRoaXMudXNlRmFsbGJhY2tEaXNwbGF5ID8gc2l6ZUluZm8ubnVtQ292ZXJzIDogc2l6ZUluZm8ubnVtVGlsZXNGYWxsYmFjaztcblxuICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xuICAgICAgICB3aGlsZSAocmVzdWx0cy5sZW5ndGggPCBudW1SZXF1aXJlZCl7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2NvdmVyTWFya3VwLmxlbmd0aCAmJiAocmVzdWx0cy5sZW5ndGggPCBudW1SZXF1aXJlZCk7KXtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXNlRmFsbGJhY2tEaXNwbGF5IHx8ICFzaXplSW5mby5wbGFjZWhvbGRlckluZGV4ZXMuaW5jbHVkZXMocmVzdWx0cy5sZW5ndGgpKXtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMuX2NvdmVyTWFya3VwW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgKytpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBmYWxsYmFjayBkaXNwbGF5IG1vZGUgdXNlcyBwbGFjZWhvbGRlciBjb3ZlcnMgdG8gZmlsbCBvdXQgdGhlIHBhcnRzIG9mIHRoZSBncmlkXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgd2lsbCBiZSBjbGlwcGVkIG9mZiBieSB0aGUgcGFyZW50IGNvbnRhaW5lci5cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMuX2NvdmVyUGxhY2Vob2xkZXJIdG1sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgcmVuZGVyQmFzZUNvdmVycygpIHtcbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodmlldykgPT4gdmlldy5yZW1vdmUoKSk7XG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG4gICAgICAgIHRoaXMuX2NvdmVyTWFya3VwID0gW107XG4gICAgICAgIHRoaXMubW9kZWwudGl0bGVDb2xsZWN0aW9uLmVhY2goKHRpdGxlKSA9PiB7XG5cbiAgICAgICAgICAgIGlmICh0aXRsZS5pc1BsYWNlaG9sZGVyKXtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb3Zlck1hcmt1cC5wdXNoKHRoaXMuX2NvdmVyUGxhY2Vob2xkZXJIdG1sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBjb3ZlciA9IG5ldyBDb3Zlcih7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsOiB0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgY292ZXJXaWR0aHM6IHttb2JpbGU6IDIwMCwgdGFibGV0OiAzMDAsIGRlc2t0b3A6IDQwMH0sXG4gICAgICAgICAgICAgICAgICAgIGlzSW5IZXJvOiB0aGlzLmlzSGVyb1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvdmVyLnJlbmRlcigpO1xuXG4gICAgICAgICAgICAgICAgLy8gd2UgYWRkIGEgaGlkZGVuIHRpdGxlIG5hbWUgZm9yIHNjcmVlbiByZWFkZXJzXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlTmFtZSA9IG5ldyBUaXRsZU5hbWUoe21vZGVsOiB0aXRsZX0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fY292ZXJNYXJrdXAucHVzaChgJHtjb3Zlci5lbC5pbm5lckhUTUx9IDxoMyBjbGFzcz1cImhpZGRlblRpdGxlTmFtZVwiPiR7dGl0bGVOYW1lLmVsLmlubmVySFRNTH08L2gzPmApO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fdmlld3MucHVzaChjb3Zlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmlld3MucHVzaCh0aXRsZU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdzLmZvckVhY2goKHYpID0+IHYucmVtb3ZlKCkpO1xuICAgICAgICBzdXBlci5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBtYWtlSGVybygpIHtcbiAgICAgICAgdGhpcy5pc0hlcm8gPSB0cnVlO1xuICAgICAgICB0aGlzLiRlbC5maW5kKCcubWFpbkJveCcpLmFkZENsYXNzKCdoZXJvJyk7XG4gICAgICAgIGxldCBjb2xvcnMgPSB0aGlzLmdldFRpdGxlUGFuZWxDb2xvcnMoKTtcbiAgICAgICAgdGhpcy4kZWwuZmluZCgnLnRleHRCbG9ja091dGVyJykuYXR0cignc3R5bGUnLCBgYmFja2dyb3VuZC1jb2xvcjoke2NvbG9ycy5iYWNrZ3JvdW5kfTtjb2xvcjoke2NvbG9ycy5mb3JlZ3JvdW5kfWApO1xuICAgIH1cblxuICAgIHRvZ2dsZVRpdGxlVmlzaWJpbGl0eShpc1Zpc2libGUpIHtcbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy4kZWwuZmluZCgnLnRleHRCbG9ja0lubmVyJyk7XG4gICAgICAgIGlzVmlzaWJsZSA/IHRpdGxlLnJlbW92ZUNsYXNzKCdpbnZpc2libGUnKSA6IHRpdGxlLmFkZENsYXNzKCdpbnZpc2libGUnKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgUXVlcnlTdHJpbmcgZnJvbSAncXVlcnlzdHJpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIYXNoTWFuYWdlciB7XG5cbiAgICBzdGF0aWMgcGFyc2UoKSB7XG4gICAgICAgIGxldCBoYXNoT2JqZWN0ID0gUXVlcnlTdHJpbmcucGFyc2UobG9jYXRpb24uaGFzaC5zdWJzdHIoMSkpO1xuXG4gICAgICAgIF8ua2V5cyhoYXNoT2JqZWN0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGhhc2hPYmplY3Rba2V5XSA9IF8uZmxhdHRlbihbaGFzaE9iamVjdFtrZXldIHx8IFtdXSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBoYXNoT2JqZWN0O1xuICAgIH1cblxuICAgIHN0YXRpYyB1cGRhdGUob2JqZWN0KSB7XG4gICAgICAgIGxldCBuZXdIYXNoID0gUXVlcnlTdHJpbmcuc3RyaW5naWZ5KG9iamVjdCk7XG4gICAgICAgIGlmIChuZXdIYXNoICE9PSAnJicpe1xuICAgICAgICAgICAgbG9jYXRpb24uaGFzaCA9IG5ld0hhc2g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0KGtleSkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSB0aGlzLnBhcnNlKCk7XG5cbiAgICAgICAgaWYgKF8uaXNTdHJpbmcoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgc3RhdGljIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIGxldCBoYXNoID0gdGhpcy5wYXJzZSgpO1xuXG4gICAgICAgIGhhc2hba2V5XSA9IF8uZmxhdHRlbihbdmFsdWVdKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZShoYXNoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcHVzaChrZXksIHZhbHVlKSB7XG4gICAgICAgIGxldCBoYXNoID0gdGhpcy5wYXJzZSgpO1xuXG4gICAgICAgIGhhc2hba2V5XSA9IGhhc2hba2V5XSB8fCBbXTtcbiAgICAgICAgaGFzaFtrZXldLnB1c2godmFsdWUpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKGhhc2gpO1xuICAgIH1cblxuICAgIHN0YXRpYyByZW1vdmUoa2V5KSB7XG4gICAgICAgIGxldCBoYXNoID0gdGhpcy5wYXJzZSgpO1xuXG4gICAgICAgIGhhc2hba2V5XSAmJiBkZWxldGUgaGFzaFtrZXldO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKGhhc2gpO1xuICAgIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0ICgpID0+IGBcbjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYXJnZS01IHNtYWxsLTggc21hbGwtY2VudGVyZWQgY29sdW1uc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLWNvbnRhaW5lciB0ZXh0LWNlbnRlclwiIHN0eWxlPVwibWFyZ2luLXRvcDo3MHB4XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWFsZXJ0IGNsYXNzPVwiYWxlcnQtYm94IGFsZXJ0IHJhZGl1c1wiPlxuICAgICAgICAgICAgICAgICAgICAke3dpbmRvdy50ZXh0KCdlcnJvci5lcnJvckNvbnRhY3RTdXBwb3J0Jywge2xpbms6IGA8YSBjbGFzcz1cImJvbGRcIiBocmVmPVwiJHt3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMuc3VwcG9ydE1lbWJlcnMpfVwiIHRhYmluZGV4PVwiMFwiPiR7d2luZG93Lmh0bWwoJ3BsZWFzZUNvbnRhY3RTdXBwb3J0Jyl9PC9hPmB9KX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYDtcbiIsImNvbnN0IHsgTG9nZ2VyLCBodG1sIH0gPSB3aW5kb3c7XG5jb25zdCB7IGlzQXV0aGVudGljYXRlZCwgaGFzTGlua2VkQ2FyZHMgfSA9IHdpbmRvdy5PdmVyRHJpdmU7XG5cbmltcG9ydCAnLi4vLi4vdXRpbC9Qcm9taXNlJztcbmltcG9ydCBFcnJvclRlbXBsYXRlIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY29tbW9uL3RlbXBsYXRlcy9FcnJvci5odG1sJztcblxuaW1wb3J0IFByb2Nlc3NGb3J3YXJkZWRBY3Rpb24gZnJvbSAnLi4vLi4vdXRpbC90aXRsZS1hY3Rpb25zL3Byb2Nlc3NGb3J3YXJkZWRBY3Rpb24nO1xuaW1wb3J0IEhhc2hNYW5hZ2VyIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY29tbW9uL0hhc2hNYW5hZ2VyJztcbmltcG9ydCBUaXRsZUNvbGxlY3Rpb24gZnJvbSAnLi4vbWVkaWEvbW9kZWxzL1RpdGxlQ29sbGVjdGlvbic7XG5cbmltcG9ydCBQYWdlTWFuYWdlciBmcm9tICcuLi9jb2xsZWN0aW9uX2NhbXBhaWduX3BhZ2UvUGFnZU1hbmFnZXInO1xuaW1wb3J0IENvbGxlY3Rpb25NYW5hZ2VyIGZyb20gJy4uL2NvbGxlY3Rpb25fY2FtcGFpZ25fcGFnZS9Db2xsZWN0aW9uTWFuYWdlcic7XG5pbXBvcnQgQ29sbGVjdGlvbkhpZ2hsaWdodFZpZXcgZnJvbSAnLi4vY29sbGVjdGlvbl9oaWdobGlnaHQvdmlld3MvQ29sbGVjdGlvbkhpZ2hsaWdodCc7XG5pbXBvcnQgQ29sbGVjdGlvbkhpZ2hsaWdodEZhY3RvcnkgZnJvbSAnLi4vY29sbGVjdGlvbl9jYW1wYWlnbl9wYWdlL0NvbGxlY3Rpb25IaWdobGlnaHRGYWN0b3J5JztcblxuaW1wb3J0IFBhdHJvblRpdGxlU3RhdHVzIGZyb20gJy4uLy4uL21vZGVscy9QYXRyb25UaXRsZVN0YXR1cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVkQ29sbGVjdGlvblZpZXcgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBjb25zdHJ1Y3Rvcih7IHZpZXdOYW1lLCByb29tLCBidXMsIGZlYXR1cmVNYW5hZ2VyLCBwYXRyb25TZXR0aW5ncyB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MgPSBbXTtcbiAgICAgICAgdGhpcy52aWV3TmFtZSA9IF8udW5lc2NhcGUodmlld05hbWUucmVwbGFjZSgvJiMzOTsvZywgXCInXCIpKTtcbiAgICAgICAgdGhpcy5yb29tID0gcm9vbTtcbiAgICAgICAgdGhpcy5idXMgPSBidXM7XG4gICAgICAgIHRoaXMuZmVhdHVyZU1hbmFnZXIgPSBmZWF0dXJlTWFuYWdlcjtcbiAgICAgICAgdGhpcy5wYXRyb25TZXR0aW5ncyA9IHBhdHJvblNldHRpbmdzO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gMTA7XG5cbiAgICAgICAgdGhpcy5wYWdlTWFuYWdlciA9IG5ldyBQYWdlTWFuYWdlcigpO1xuICAgICAgICB0aGlzLmNvbGxlY3Rpb25NYW5hZ2VyID0gbmV3IENvbGxlY3Rpb25NYW5hZ2VyKCk7XG5cbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uRXJyb3JzID0gW107XG5cbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG5cbiAgICB1cGRhdGUoKSB7XG4gICAgICAgIHRoaXMuJGVsLmVtcHR5KCk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodmlldykgPT4gdmlldy5yZW1vdmUoKSk7XG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG5cbiAgICAgICAgdGhpcy5wYWdlTWFuYWdlclxuICAgICAgICAgICAgLmZldGNoUm9vbUJ5SWQoKHRoaXMucm9vbSAmJiB0aGlzLnJvb20uaWQpIHx8ICdob21lJylcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl92aWV3cyA9IHRoaXMuaW5pdFZpZXdzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51bnJlbmRlcmVkVmlld3MgPSB0aGlzLl92aWV3cy5zbGljZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlclBhZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wZXJmb3JtRm9yd2FyZGVkQWN0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcmVuZGVyUGFnZSgpIHtcbiAgICAgICAgdGhpcy5fZmV0Y2hSb3dzKHRoaXMucGFnZVNpemUpLnRoZW4oKGNvbGxlY3Rpb25zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVQYXRyb25UaXRsZVN0YXR1cyhjb2xsZWN0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLl9wYWdlTG9hZENvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9mZXRjaFJvd3Mocm93Q291bnQsIGNvbGxlY3Rpb25zRG9uZSA9IFtdKSB7XG4gICAgICAgIGxldCB2aWV3cyA9IHRoaXMudW5yZW5kZXJlZFZpZXdzLnNwbGljZSgwLCByb3dDb3VudCk7XG4gICAgICAgIHRoaXMuX3BhaW50Q29sbGVjdGlvbnModmlld3MpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3luY1Jvd3Modmlld3MsIGNvbGxlY3Rpb25zRG9uZSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5mYWlsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmV0Y2hSb3dzKHJlc3VsdC5mYWlsZWQsIGNvbGxlY3Rpb25zRG9uZSkudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xsZWN0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY29sbGVjdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY29sbGVjdGlvbnNEb25lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3N5bmNSb3dzKHZpZXdzLCBjb2xsZWN0aW9ucykge1xuICAgICAgICBsZXQgcmVxdWVzdFF1ZXVlID0gdmlld3MubWFwKCh2aWV3KSA9PiB2aWV3LnN5bmMoKSk7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2Uuc2V0dGxlKHJlcXVlc3RRdWV1ZSkudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VjY2VlZGVkID0gcmVzdWx0cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHJlc3VsdCkgPT4gcmVzdWx0LmZ1bGZpbGxlZCAmJiByZXN1bHQudmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBmYWlsZWQgPSByZXN1bHRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAocmVzdWx0KSA9PiAhcmVzdWx0LmZ1bGZpbGxlZCB8fCAhcmVzdWx0LnZhbHVlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBzdWNjZWVkZWQubWFwKChyZXF1ZXN0KSA9PiBjb2xsZWN0aW9ucy5wdXNoKHJlcXVlc3QudmFsdWUpKTtcblxuICAgICAgICAgICAgcmV0dXJuIHsgZmFpbGVkOiBmYWlsZWQubGVuZ3RoIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9wYWludENvbGxlY3Rpb25zKHZpZXdzKSB7XG4gICAgICAgIGxldCBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgICAgIHZpZXdzLmZvckVhY2goKHZpZXcpID0+IHtcbiAgICAgICAgICAgIGlmICghdmlldy5pc1BhaW50ZWQpIHtcbiAgICAgICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKHZpZXcuZWwpO1xuICAgICAgICAgICAgICAgIHZpZXcuaXNQYWludGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5lbC5hcHBlbmRDaGlsZChmcmFnKTtcbiAgICB9XG5cbiAgICBfcGFnZUxvYWRDb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudW5yZW5kZXJlZFZpZXdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCAkbG9hZE1vcmUgPSAkKFxuICAgICAgICAgICAgICAgIGA8YnV0dG9uIGNsYXNzPVwiY2VudGVyIHUtYWxsQ2FwcyBidXR0b24gcmFkaXVzIG5vLW91dGxpbmVcIj4ke2h0bWwoXG4gICAgICAgICAgICAgICAgICAgICdsb2FkTW9yZSdcbiAgICAgICAgICAgICAgICApfTwvYnV0dG9uPmBcbiAgICAgICAgICAgICkub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlclBhZ2UoKTtcbiAgICAgICAgICAgICAgICAkbG9hZE1vcmUucmVtb3ZlKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy4kZWwuYXBwZW5kKCRsb2FkTW9yZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb2xsZWN0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBhbGxDb2xsZWN0aW9uc0ZhaWxlZCA9IHRoaXMuX3ZpZXdzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgIHRoaXMuX2xvZ1BhZ2VFcnJvcnModGhpcy5jb2xsZWN0aW9uRXJyb3JzLCBhbGxDb2xsZWN0aW9uc0ZhaWxlZCk7XG4gICAgICAgICAgICBpZiAoYWxsQ29sbGVjdGlvbnNGYWlsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZChFcnJvclRlbXBsYXRlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uRXJyb3JzID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfbG9nUGFnZUVycm9ycyhmYWlsZWQsIGFsbEZhaWxlZCkge1xuICAgICAgICBjb25zdCBob3dNYW55ID0gYWxsRmFpbGVkID8gJ1RvdGFsJyA6ICdQYXJ0aWFsJztcbiAgICAgICAgbGV0IGVycm9ycyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBmYWlsdXJlIG9mIGZhaWxlZCkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBmYWlsdXJlLmlkLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZhaWx1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBzdGF0dXNUZXh0OiBmYWlsdXJlLnN0YXR1c1RleHQsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBmYWlsdXJlLnN0YXR1cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb3VudHMgPSBfLmNvdW50QnkoXG4gICAgICAgICAgICBlcnJvcnMsXG4gICAgICAgICAgICAoZXJyb3IpID0+IGVycm9yLnR5cGUgKyAnOicgKyBlcnJvci5zdGF0dXNUZXh0XG4gICAgICAgICk7XG4gICAgICAgIExvZ2dlci5sb2coJ2Vycm9yJywgYCR7aG93TWFueX0gRmVhdHVyZWQgUGFnZSBBamF4IEVycm9yYCwge1xuICAgICAgICAgICAgbWVzc2FnZTogJ0hpZ2hsaWdodEVycm9yUm9sbHVwJyxcbiAgICAgICAgICAgIGVycm9yczogZXJyb3JzLFxuICAgICAgICAgICAgY291bnRzOiBjb3VudHMsXG4gICAgICAgICAgICBwYWdlOiB0aGlzLnZpZXdOYW1lLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0Vmlld3MoKSB7XG4gICAgICAgIGxldCB2aWV3cyA9IFtdO1xuICAgICAgICBsZXQgbWFpblZpZXcgPSB0aGlzLnBhZ2VNYW5hZ2VyLmdldFZpZXcodGhpcy52aWV3TmFtZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFRydW5jYXRlQ29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgIG1haW5WaWV3LmNvbGxlY3Rpb25EZWZpbml0aW9ucyA9XG4gICAgICAgICAgICAgICAgbWFpblZpZXcuY29sbGVjdGlvbkRlZmluaXRpb25zLnNsaWNlKDAsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbk1hbmFnZXIucmVzZXQobWFpblZpZXcuY29sbGVjdGlvbkRlZmluaXRpb25zKTtcblxuICAgICAgICB0aGlzLmNvbGxlY3Rpb25NYW5hZ2VyLmVhY2goKGNvbGxlY3Rpb25EZWZpbml0aW9uKSA9PiB7XG4gICAgICAgICAgICAvLyBUaXRsZUNhcmQgdGVtcGxhdGUgd2lsbCByZW5kZXIgaW4gXCJkdW1teVwiIHN0YXRlXG4gICAgICAgICAgICBjb2xsZWN0aW9uRGVmaW5pdGlvbi50aXRsZUNvbGxlY3Rpb24ucmVzZXQoW1xuICAgICAgICAgICAgICAgIHsgcGxhY2Vob2xkZXI6IHRydWUgfSxcbiAgICAgICAgICAgICAgICB7IHBsYWNlaG9sZGVyOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyBwbGFjZWhvbGRlcjogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgcGxhY2Vob2xkZXI6IHRydWUgfSxcbiAgICAgICAgICAgICAgICB7IHBsYWNlaG9sZGVyOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyBwbGFjZWhvbGRlcjogdHJ1ZSB9LFxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uSGlnaGxpZ2h0VmlldyA9IENvbGxlY3Rpb25IaWdobGlnaHRGYWN0b3J5LkJ1aWxkKFxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25EZWZpbml0aW9uLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IGNvbGxlY3Rpb25EZWZpbml0aW9uLFxuICAgICAgICAgICAgICAgICAgICBidXM6IHRoaXMuYnVzLFxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlTWFuYWdlcjogdGhpcy5mZWF0dXJlTWFuYWdlcixcbiAgICAgICAgICAgICAgICAgICAgcm9vbTogdGhpcy5yb29tLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHZpZXdzLnB1c2goY29sbGVjdGlvbkhpZ2hsaWdodFZpZXcucmVuZGVyKCkpO1xuXG4gICAgICAgICAgICBjb2xsZWN0aW9uSGlnaGxpZ2h0Vmlldy5zeW5jID0gKCkgPT5cbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uRGVmaW5pdGlvblxuICAgICAgICAgICAgICAgICAgICAuZmV0Y2hDb2xsZWN0aW9uVGl0bGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHJvblNldHRpbmdzOiB0aGlzLnBhdHJvblNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vbTogdGhpcy5yb29tLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbkRlZmluaXRpb24udGl0bGVDb2xsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uSGlnaGxpZ2h0Vmlldy5yZW5kZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbkhpZ2hsaWdodFZpZXcudG9nZ2xlVGl0bGVWaXNpYmlsaXR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZmFpbGVkIHJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uSGlnaGxpZ2h0Vmlldy5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlld3MgPSB0aGlzLl92aWV3cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodikgPT4gdiAhPT0gY29sbGVjdGlvbkhpZ2hsaWdodFZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vIGNvbGxlY3Rpb24gY29udGVudHMgcmV0cmlldmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uSGlnaGxpZ2h0Vmlldy5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92aWV3cyA9IHRoaXMuX3ZpZXdzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHYpID0+IHYgIT09IGNvbGxlY3Rpb25IaWdobGlnaHRWaWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLmlkID0gY29sbGVjdGlvbkRlZmluaXRpb24uaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Iuc3RhdHVzVGV4dCA9ICEhZXJyb3Iuc3RhdHVzVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGVycm9yLnN0YXR1c1RleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnVW5rbm93blN0YXR1cyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IudHlwZSA9ICdBamF4IEVycm9yOiBDb2xsZWN0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbkVycm9ycy5wdXNoKGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdmlld3M7XG4gICAgfVxuXG4gICAgX3VwZGF0ZVBhdHJvblRpdGxlU3RhdHVzKHZpZXdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHdpbmRvdy5PdmVyRHJpdmUuaXNBdXRoZW50aWNhdGVkICYmXG4gICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLmhhc0xpbmtlZENhcmRzICYmXG4gICAgICAgICAgICB2aWV3cyAmJlxuICAgICAgICAgICAgdmlld3MubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCB0aXRsZXMgPSBbXTtcblxuICAgICAgICAgICAgdmlld3MuZm9yRWFjaCgodmlldykgPT4ge1xuICAgICAgICAgICAgICAgIHRpdGxlcy5wdXNoKC4uLnZpZXcudGl0bGVDb2xsZWN0aW9uLm1vZGVscyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGV0IHBhdHJvblRpdGxlU3RhdHVzID0gbmV3IFBhdHJvblRpdGxlU3RhdHVzKCk7XG5cbiAgICAgICAgICAgIHBhdHJvblRpdGxlU3RhdHVzLmZldGNoVGl0bGVTdGF0dXModGl0bGVzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBwYXRyb25UaXRsZVN0YXR1cy51cGRhdGVUaXRsZUNvbGxlY3Rpb25TdGF0ZShfKHRpdGxlcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcGVyZm9ybUZvcndhcmRlZEFjdGlvbigpIHtcbiAgICAgICAgaWYgKGlzQXV0aGVudGljYXRlZCAmJiBoYXNMaW5rZWRDYXJkcyAmJiBIYXNoTWFuYWdlci5nZXQoJ2FjdGlvbicpKSB7XG4gICAgICAgICAgICBsZXQgdGl0bGVzID0gW107XG4gICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb25NYW5hZ2VyLmVhY2goKGNvbGxlY3Rpb25EZWZpbml0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgdGl0bGVzLnB1c2goLi4uY29sbGVjdGlvbkRlZmluaXRpb24udGl0bGVDb2xsZWN0aW9uLm1vZGVscyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZvcndhcmRlZEFjdGlvbiA9IG5ldyBQcm9jZXNzRm9yd2FyZGVkQWN0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBUaXRsZUNvbGxlY3Rpb24odGl0bGVzKSxcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvcndhcmRlZEFjdGlvbi5leGVjdXRlQWN0aW9uKCk7XG4gICAgICAgICAgICB3aW5kb3cuZm9yd2FyZGVkQWN0aW9uID0gZm9yd2FyZGVkQWN0aW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IF9zaG91bGRUcnVuY2F0ZUNvbGxlY3Rpb25zKCkge1xuICAgICAgICAvLyBUaGUgT0QgYXBwIG9uIGlPUyA4IGFuZCA5IGNyYXNoZXMgb24gdGhlIGZlYXR1cmVkIGNvbGxlY3Rpb24gcGFnZSBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgY29sbGVjdGlvbnMuICBMSFRORy0yMzg3XG4gICAgICAgIGxldCBpbkFwcCA9IENvb2tpZXMuZ2V0KCdvbWNicm93c2UnKSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaW5BcHAgJiYgYm93c2VyLmlvcyAmJiBib3dzZXIub3N2ZXJzaW9uKSB7XG4gICAgICAgICAgICBsZXQgdmVyc2lvblBhcnRzID0gYm93c2VyLm9zdmVyc2lvbi5zcGxpdCgnLicpO1xuICAgICAgICAgICAgaWYgKHZlcnNpb25QYXJ0cyAmJiB2ZXJzaW9uUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxldCBtYWpvclZlcnNpb24gPSBwYXJzZUludCh2ZXJzaW9uUGFydHNbMF0sIDEwKTtcbiAgICAgICAgICAgICAgICBpZiAobWFqb3JWZXJzaW9uICYmIG1ham9yVmVyc2lvbiA8IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIiwiaW1wb3J0IENvbnRleHRNZW51VGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZXMvQ29udGV4dE1lbnUuaHRtbCc7XG5jb25zdCB7IGZlYXR1cmVNYW5hZ2VyLCB1cmwsIHJvdXRlcywgT3ZlckRyaXZlLCB0ZXh0LCBodG1sIH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRleHRNZW51IGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgdGVtcGxhdGUgPSBDb250ZXh0TWVudVRlbXBsYXRlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy5yaWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNyk7XG5cbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdlOmlzSW5IaXN0b3J5JywgKCkgPT4gdGhpcy5yZW5kZXIoKSk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBldmVudHMoKSB7XG4gICAgICAgIGxldCBldmVudHMgPSB7XG4gICAgICAgICAgICAnY2xpY2sgLmpzLWhpc3RvcnlBY3Rpb24nOiAnX2hhbmRsZUNsaWNrJyxcbiAgICAgICAgICAgICdrZXlkb3duIC5qcy1oaXN0b3J5QWN0aW9uJzogJ19oYW5kbGVLZXlIaXN0b3J5JyxcbiAgICAgICAgICAgICdrZXlkb3duIC5qcy1jb250ZXh0LWJ1dHRvbic6ICd0b2dnbGUnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2NsZWFudXBDb250ZXh0TWVudVRvZ2dsZScpKSB7XG4gICAgICAgICAgICBldmVudHNbJ2tleXVwIC5qcy1jb250ZXh0LWRyb3AnXSA9ICdfaGFuZGxlS2V5VXBDb250YWluZXInO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudHM7XG4gICAgfVxuXG4gICAgX2hhbmRsZUtleVVwQ29udGFpbmVyKGUpIHtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcgLypFU0MqLykge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2hhbmRsZUNsaWNrKCkge1xuICAgICAgICB0aGlzLm1vZGVsLnRyaWdnZXIoJ3RpdGxlOmFjdGlvbicsIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ2hpc3RvcnknLFxuICAgICAgICAgICAgbW9kZWw6IHRoaXMubW9kZWwsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9oYW5kbGVLZXlIaXN0b3J5KGUpIHtcbiAgICAgICAgaWYgKCF3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdjbGVhbnVwQ29udGV4dE1lbnVUb2dnbGUnKSkge1xuICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IDEzIHx8IGUua2V5Q29kZSA9PT0gMzIpIHtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdjbGVhbnVwQ29udGV4dE1lbnVUb2dnbGUnKSkge1xuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnRyaWdnZXIoJ3RpdGxlOmFjdGlvbicsIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICBtb2RlbDogdGhpcy5tb2RlbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHZpZXdNb2RlbCgpIHtcbiAgICAgICAgbGV0IHNlcmllc1NlYXJjaFVybCA9ICcnO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuaXNNYWdhemluZSAmJlxuICAgICAgICAgICAgICAgIGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnbWFnYXppbmUtcm9sbHVwJylcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdlbmhhbmNlZFNlcmllcycpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5nZXQoJ2RldGFpbGVkU2VyaWVzJylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHNlcmllc1NlYXJjaFVybCA9IHVybChyb3V0ZXMuc2VhcmNoQnlUeXBlLCB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXJpZXNJZCcsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiB0aGlzLm1vZGVsLmdldCgnZGV0YWlsZWRTZXJpZXMnKS5zZXJpZXNJZCxcbiAgICAgICAgICAgICAgICAgICAgc29ydEJ5OiAncmVhZGluZ09yZGVyJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlbC5nZXQoJ3NlcmllcycpKSB7XG4gICAgICAgICAgICAgICAgc2VyaWVzU2VhcmNoVXJsID0gdXJsKHJvdXRlcy5zZWFyY2hCeVR5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NlcmllcycsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiB0aGlzLm1vZGVsLmdldCgnc2VyaWVzJyksXG4gICAgICAgICAgICAgICAgICAgIHNvcnRCeTogJ25ld2x5YWRkZWQnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhhc01lZGlhRG9Gb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tb2RlbC5nZXQoJ2Zvcm1hdHMnKS5mb3JFYWNoKChmb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQuaWQgPT09ICdlYm9vay1tZWRpYS1kbycpIHtcbiAgICAgICAgICAgICAgICBoYXNNZWRpYURvRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IG1hdHVyaXR5TGV2ZWwgPSB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMucmF0aW5ncy5tYXR1cml0eUxldmVsLmlkO1xuXG4gICAgICAgIGNvbnN0IHJlbGF0ZWRUaXRsZXNQYWdlVXJsID0gYCR7d2luZG93LnVybChcbiAgICAgICAgICAgIHdpbmRvdy5yb3V0ZXMubWVkaWFSZWxhdGVkSWQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMubW9kZWwuZ2V0KCdpZCcpLFxuICAgICAgICAgICAgfVxuICAgICAgICApfSR7bWF0dXJpdHlMZXZlbCA/IGA/bWF0dXJpdHlMZXZlbD0ke21hdHVyaXR5TGV2ZWx9YCA6ICcnfWA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzT3duZWQ6IHRoaXMubW9kZWwuZ2V0KCdpc093bmVkJyksXG4gICAgICAgICAgICByZWxhdGVkVGl0bGVzUGFnZVVybCxcbiAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsLmlkLFxuICAgICAgICAgICAgcmlkOiB0aGlzLnJpZCxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLm1vZGVsLmdldCgndGl0bGUnKSxcbiAgICAgICAgICAgIHR5cGVJZDogdGhpcy5tb2RlbC5nZXQoJ3R5cGUnKS5pZCxcbiAgICAgICAgICAgIHNhbXBsZUhyZWY6IHRoaXMubW9kZWwuZ2V0KCdzYW1wbGUnKS5ocmVmIHx8ICcnLFxuICAgICAgICAgICAgc2FtcGxlVGV4dDogdGhpcy5fZ2V0U2FtcGxlVGV4dCgpLFxuICAgICAgICAgICAgYWxpZ25tZW50OiAnYm90dG9tJyxcbiAgICAgICAgICAgIGhpc3RvcnlBY3Rpb25MYWJlbDogdGhpcy5fZ2V0SGlzdG9yeUFjdGlvbkxhYmVsKCksXG4gICAgICAgICAgICBoaXN0b3J5QWN0aW9uVGV4dDogdGhpcy5fZ2V0SGlzdG9yeUFjdGlvblRleHQoKSxcbiAgICAgICAgICAgIGhpc3RvcnlFbmFibGVkOlxuICAgICAgICAgICAgICAgIE92ZXJEcml2ZS5zaG93SGlzdG9yeUZlYXR1cmUgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5tb2RlbC5nZXQoJ2lzUHJlUmVsZWFzZVRpdGxlJyksXG4gICAgICAgICAgICBnYUhpc3RvcnlBY3Rpb246IHRoaXMubW9kZWwuZ2V0KCdpc0luSGlzdG9yeScpXG4gICAgICAgICAgICAgICAgPyAnaGlzdG9yeS1yZW1vdmUnXG4gICAgICAgICAgICAgICAgOiAnaGlzdG9yeS1hZGQnLFxuICAgICAgICAgICAgc2VyaWVzU2VhcmNoVXJsLFxuICAgICAgICAgICAgaGFzTWVkaWFEb0Zvcm1hdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfZ2V0U2FtcGxlVGV4dCgpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMubW9kZWwuZ2V0KCd0eXBlJykuaWQ7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdhdWRpb2Jvb2snIHx8IHR5cGUgPT09ICdtdXNpYycpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0KCdzYW1wbGVMaXN0ZW4nKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dCgnc2FtcGxlV2F0Y2gnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0KCdzYW1wbGVSZWFkJyk7XG4gICAgfVxuXG4gICAgX2dldEhpc3RvcnlBY3Rpb25MYWJlbCgpIHtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLm1vZGVsLmdldCgndGl0bGUnKTtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZ2V0KCdpc0luSGlzdG9yeScpKSB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbCgncmVhZGluZ0hpc3RvcnkucmVtb3ZlVGl0bGUnLCB7IHRpdGxlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWwoJ3JlYWRpbmdIaXN0b3J5LmFkZFRpdGxlJywgeyB0aXRsZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9nZXRIaXN0b3J5QWN0aW9uVGV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZ2V0KCdpc0luSGlzdG9yeScpKSB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbCgncmVhZGluZ0hpc3RvcnkucmVtb3ZlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbCgncmVhZGluZ0hpc3RvcnkuYWRkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKHRoaXMudGVtcGxhdGUodGhpcy52aWV3TW9kZWwpKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpc0tleWJvYXJkU2VsZWN0RXZlbnQgPSAoZSkgPT5cbiAgICAgICAgKGUud2hpY2ggPT09IDEzIHx8IGUud2hpY2ggPT09IDMyKSAmJiAoZS5wcmV2ZW50RGVmYXVsdCgpIHx8IHRydWUpO1xuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHdpbmRvdy5Gb3VuZGF0aW9uLmxpYnMuZHJvcGRvd24uY2xvc2UoXG4gICAgICAgICAgICB0aGlzLiRlbC5maW5kKCcuanMtY29udGV4dC1kcm9wJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB0b2dnbGUoZSkge1xuICAgICAgICBpZiAodGhpcy5pc0tleWJvYXJkU2VsZWN0RXZlbnQoZSkpIHtcbiAgICAgICAgICAgIHdpbmRvdy5Gb3VuZGF0aW9uLmxpYnMuZHJvcGRvd24udG9nZ2xlKFxuICAgICAgICAgICAgICAgIHRoaXMuJGVsLmZpbmQoJy5qcy1jb250ZXh0LWJ1dHRvbicpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IENvdmVyVGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZXMvQ292ZXIuaHRtbCc7XG5pbXBvcnQgTm9Db3ZlclRlbXBsYXRlIGZyb20gJy4vdGVtcGxhdGVzL05vQ292ZXIuaHRtbCc7XG5pbXBvcnQgeyB0b1N0YXRpY1VybCB9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9hc3NldE1hcHBlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvdmVyIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgY29uc3RydWN0b3IoeyBjb3ZlcldpZHRocywgaXNJbkhlcm8sIGlzVGl0bGVIaXN0b3J5ID0gZmFsc2UgfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuXG4gICAgICAgIHRoaXMuY292ZXJXaWR0aHMgPSBfLmV4dGVuZChcbiAgICAgICAgICAgIHsgbW9iaWxlOiAxNDUsIHRhYmxldDogMTYwLCBkZXNrdG9wOiAxOTAgfSxcbiAgICAgICAgICAgIGNvdmVyV2lkdGhzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXNJbkhlcm8gPSBpc0luSGVybztcbiAgICAgICAgdGhpcy5pc1RpdGxlSGlzdG9yeSA9IGlzVGl0bGVIaXN0b3J5O1xuXG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZScsIHRoaXMuX3JlbmRlcik7XG4gICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgJCh3aW5kb3cpLm9mZihgcmVzaXplLiR7dGhpcy5tb2RlbC5pZH1gKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBtZWRpYSA9IHRoaXMubW9kZWwudG9KU09OKCk7XG4gICAgICAgIGNvbnN0IGNvdmVyV2lkdGggPSBib3dzZXIubW9iaWxlXG4gICAgICAgICAgICA/IHRoaXMuY292ZXJXaWR0aHMubW9iaWxlXG4gICAgICAgICAgICA6IGJvd3Nlci50YWJsZXRcbiAgICAgICAgICAgID8gdGhpcy5jb3ZlcldpZHRocy50YWJsZXRcbiAgICAgICAgICAgIDogdGhpcy5jb3ZlcldpZHRocy5kZXNrdG9wO1xuICAgICAgICBjb25zdCBjb3ZlciA9IHRoaXMubW9kZWwuZ2V0Q292ZXIoY292ZXJXaWR0aCk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuaXNQbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgbGV0ICRjb3ZlciA9IGA8ZGl2IGNsYXNzPVwiQ292ZXJJbWFnZUNvbnRhaW5lclwiPjwvZGl2PmA7XG4gICAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZCgkY292ZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvdmVyICYmIGNvdmVyLmhyZWYpIHtcbiAgICAgICAgICAgIGxldCAkY292ZXIgPSAkKFxuICAgICAgICAgICAgICAgIENvdmVyVGVtcGxhdGUoe1xuICAgICAgICAgICAgICAgICAgICBtZWRpYSxcbiAgICAgICAgICAgICAgICAgICAgY292ZXJDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb3ZlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdmVyLnByaW1hcnlDb2xvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdmVyLnByaW1hcnlDb2xvci5oZXgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5oZXJpdCcsXG4gICAgICAgICAgICAgICAgICAgIHNyYzogY292ZXIgJiYgY292ZXIuaHJlZixcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogdGhpcy5tb2RlbC50aXRsZURldGFpbHNVcmwsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB3aW5kb3cudGV4dCgnY292ZXIuY292ZXJJbWFnZUxhYmVsJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG1lZGlhLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRvcjogbWVkaWEuZmlyc3RDcmVhdG9yTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIG5vU2FtcGxlQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYS5zYW1wbGUuaHJlZiA9PSBudWxsID8gJ2lzLW5vU2FtcGxlJyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBzcmNzZXQ6IGNvdmVyICYmIGNvdmVyLnNyY3NldCxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gTEhUTkctMjEwNTogSW4gdGhlIGV2ZW50IHRoYXQgYW4gaW1hZ2UgZmFpbHMgdG8gbG9hZCwgd2lwZSBvdXQgdGhlIGhyZWYncyBhbmQgdXBkYXRlIHRoZSBtb2RlbCB0byB0cmlnZ2VyIGEgcmVuZGVyKClcbiAgICAgICAgICAgICRjb3Zlci5maW5kKCdpbWcnKS5vbignZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGltYWdlc1JlbW92ZWQgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsLmF0dHJpYnV0ZXMuY292ZXJzKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBfKGltYWdlc1JlbW92ZWQpLmVhY2goKGltYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpbWFnZS5ocmVmO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXQoeyBjb3ZlcnM6IGltYWdlc1JlbW92ZWQgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQoJGNvdmVyKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVGl0bGVIaXN0b3J5KSB7XG4gICAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZChcbiAgICAgICAgICAgICAgICBgPGEgaHJlZj1cIiR7dGhpcy5tb2RlbC50aXRsZURldGFpbHNVcmx9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgYWx0PVwiJHt3aW5kb3cuaHRtbCgnY292ZXJJbWFnZUZvclRpdGxlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG1lZGlhLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB9KX1cIiBjbGFzcz1cImhpc3Rvcnktbm9Db3ZlclwiIHNyYz1cIiR7dG9TdGF0aWNVcmwoXG4gICAgICAgICAgICAgICAgICAgICdpbWcvbm8tY292ZXJfZW5fVVMuanBnJ1xuICAgICAgICAgICAgICAgICl9XCI+XG4gICAgICAgICAgICAgICAgPC9hPmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgY3JlYXRvclRleHQgPSB0aGlzLm1vZGVsLmlzTWFnYXppbmVcbiAgICAgICAgICAgICAgICA/IHRoaXMubW9kZWwuZ2V0KCdlZGl0aW9uJylcbiAgICAgICAgICAgICAgICA6IHRoaXMubW9kZWwuZ2V0KCdmaXJzdENyZWF0b3JOYW1lJyk7XG4gICAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZChcbiAgICAgICAgICAgICAgICBOb0NvdmVyVGVtcGxhdGUoe1xuICAgICAgICAgICAgICAgICAgICBtZWRpYSxcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogdGhpcy5tb2RlbC50aXRsZURldGFpbHNVcmwsXG4gICAgICAgICAgICAgICAgICAgIGlzSW5IZXJvOiB0aGlzLmlzSW5IZXJvLFxuICAgICAgICAgICAgICAgICAgICBjb3ZlcldpZHRoOiBjb3ZlcldpZHRoLFxuICAgICAgICAgICAgICAgICAgICBjb3ZlckhlaWdodDogKGNvdmVyV2lkdGggKiAyOTMpIC8gMjIwLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdG9yVGV4dDogY3JlYXRvclRleHQsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAkKHdpbmRvdykub24oXG4gICAgICAgICAgICAgICAgYHJlc2l6ZS4ke3RoaXMubW9kZWwuaWR9YCxcbiAgICAgICAgICAgICAgICBfLmJpbmQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hbmFnZU92ZXJmbG93LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAnLkNvdmVySW1hZ2VDb250YWluZXIgLm5vQ292ZXJBdmFpbGFibGUgLnRpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5nZXQoJ3RpdGxlJylcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgJCh3aW5kb3cpLm9uKFxuICAgICAgICAgICAgICAgIGByZXNpemUuJHt0aGlzLm1vZGVsLmlkfWAsXG4gICAgICAgICAgICAgICAgXy5iaW5kKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VPdmVyZmxvdyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgJy5Db3ZlckltYWdlQ29udGFpbmVyIC5ub0NvdmVyQXZhaWxhYmxlIC5hdXRob3InLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdG9yVGV4dFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAkKHdpbmRvdykub24oXG4gICAgICAgICAgICAgICAgYHJlc2l6ZS4ke3RoaXMubW9kZWwuaWR9YCxcbiAgICAgICAgICAgICAgICBfLmJpbmQodGhpcy5fcmVzaXplQ2xlYXJJbWFnZSwgdGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIHRpbWVvdXQgZ2l2ZXMgYnJvd3NlciBjaGFuY2UgdG8gZHJhdyBhbmQgc2V0IGlubmVySFRNTCB2YWx1ZXMgdXNlZFxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFuYWdlT3ZlcmZsb3coXG4gICAgICAgICAgICAgICAgICAgICcuQ292ZXJJbWFnZUNvbnRhaW5lciAubm9Db3ZlckF2YWlsYWJsZSAudGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmdldCgndGl0bGUnKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFuYWdlT3ZlcmZsb3coXG4gICAgICAgICAgICAgICAgICAgICcuQ292ZXJJbWFnZUNvbnRhaW5lciAubm9Db3ZlckF2YWlsYWJsZSAuYXV0aG9yJyxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRvclRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZUNsZWFySW1hZ2UoKTtcbiAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX3Jlc2l6ZUNsZWFySW1hZ2UoKSB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCdpbWcnKTtcbiAgICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICAkKGltYWdlKS5oZWlnaHQoKCQoaW1hZ2UpLnBhcmVudCgpLndpZHRoKCkgKiAyOTMpIC8gMjIwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfbWFuYWdlT3ZlcmZsb3coc2VsZWN0b3IsIHJlc2V0VGV4dCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gcmVzZXRUZXh0O1xuICAgICAgICAgICAgaWYgKHNlbGVjdG9yLmluZGV4T2YoJy50aXRsZScpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmICgkKGVsZW1lbnQpLndpZHRoKCkgPCAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3MoJ2ZvbnQtc2l6ZScsICcxNHB4Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS53aWR0aCgpIDwgMTI1ICYmXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkud2lkdGgoKSA+PSAxMDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3MoJ2ZvbnQtc2l6ZScsICcxNnB4Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS53aWR0aCgpIDwgMTUwICYmXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkud2lkdGgoKSA+PSAxMjVcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3MoJ2ZvbnQtc2l6ZScsICcxOHB4Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkKGVsZW1lbnQpLndpZHRoKCkgPj0gMTUwKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdmb250LXNpemUnLCAnMjBweCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaW5kZXhPZignLmF1dGhvcicpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmICgkKGVsZW1lbnQpLndpZHRoKCkgPCAxMTApIHtcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3MoJ2ZvbnQtc2l6ZScsICcxMHB4Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS53aWR0aCgpIDwgMTM1ICYmXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkud2lkdGgoKSA+PSAxMTBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3MoJ2ZvbnQtc2l6ZScsICcxMnB4Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS53aWR0aCgpIDwgMTYwICYmXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkud2lkdGgoKSA+PSAxMzVcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3MoJ2ZvbnQtc2l6ZScsICcxNHB4Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkKGVsZW1lbnQpLndpZHRoKCkgPj0gMTYwKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdmb250LXNpemUnLCAnMTZweCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNjcm9sbEhlaWdodCA+IDAgJiZcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNjcm9sbEhlaWdodCA+IGVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IGVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgIHRleHQgPSBgJHt0ZXh0LnJlcGxhY2UoL1xcVyskL2csICcnKX0uLi5gOyAvLyByZW1vdmUgdHJhaWxpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBhZGQgZWxsaXBzaXNcbiAgICAgICAgICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICAgICAgICAgIHRleHQgIT09ICcuLi4nICYmXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxXKlxcd1xcVyooXFwuezN9KSQvZywgJyQxJyk7IC8vIHJlbW92ZSBhIG5vbi1lbGxpcHNpcyBjaGFyYWN0ZXIgYW5kIHVud2FudGVkIGNoYXJhY3RlcnMgYXJvdW5kIGl0zqlcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSB0ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB0b2RvOiBwdXQgYSBtaW4gd2lkdGggYW4gaGVpZ2h0IG9uIHRoaXMhIFdlIGtub3cgd2hhdCB0aGUgaGVpZ2h0cyBhcmUgZm9yIHBhcnRpY3VsYXIgc2NyZWVuIHdpZHRoc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IE1lZGlhUGFyYW1ldGVycyBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZGFvL01lZGlhUGFyYW1ldGVycyc7XG5pbXBvcnQgVGl0bGVDb2xsZWN0aW9uIGZyb20gJy4vbW9kZWxzL1RpdGxlQ29sbGVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lZGlhSW50ZXJmYWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBfLmV4dGVuZCh0aGlzLCBCYWNrYm9uZS5FdmVudHMpO1xuXG4gICAgICAgIHRoaXMuaXRlbXMgICAgICAgICAgPSBuZXcgVGl0bGVDb2xsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuZmFjZXRzICAgICAgICAgPSB7fTtcbiAgICAgICAgdGhpcy5zb3J0T3B0aW9ucyAgICA9IFtdO1xuICAgIH1cblxuICAgIHF1aWNrU2VhcmNoKHRlcm0sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoKF8uZXh0ZW5kKHt9LCB7IHF1ZXJ5OiB0ZXJtIH0sIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBzZWFyY2gocGFyYW1ldGVycywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2goXy5leHRlbmQoe30sIHBhcmFtZXRlcnMsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBmZXRjaENvbGxlY3Rpb25CeUlkKGlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mZXRjaChfLmV4dGVuZCh7fSwgeyBjb2xsZWN0aW9uSWQ6IGlkIH0sIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBmZXRjaENvbGxlY3Rpb25CeVBhcmFtZXRlcnMoY29sbGVjdGlvbkZpbHRlcnMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoKF8uZXh0ZW5kKHt9LCBjb2xsZWN0aW9uRmlsdGVycywgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIC8qKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIHNpbXVsYXRlIGEgZGF0YSBjYWxsLCBidXQgZGVsaWJlcmF0bGV5IHJldHVybiBhbiBlbXB0eSByZXN1bHQgc2V0ICovXG4gICAgZmV0Y2hFbXB0eVJlc3BvbnNlKCkge1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3N5bmM6c3RhcnQnLCB0aGlzLCB7IG1lZGlhUGFyYW1ldGVyczogbnVsbCB9KTtcblxuICAgICAgICBsZXQgZW1wdHlSZXNwb25zZSA9IHtcbiAgICAgICAgICAgIGl0ZW1zICAgICAgIDogW10sXG4gICAgICAgICAgICBmYWNldHMgICAgICA6IHt9LFxuICAgICAgICAgICAgc29ydE9wdGlvbnMgOiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2ZldGNoRG9uZShlbXB0eVJlc3BvbnNlLCAnc3ludGhldGljJyk7XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jOmVuZCcsIHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZW1wdHlSZXNwb25zZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtNZWRpYVBhcmFtZXRlcnN9IHBhcmFtZXRlcnNcbiAgICAgKiBAbWVtYmVyb2YgTWVkaWFJbnRlcmZhY2VcbiAgICAgKi9cbiAgICBfZmV0Y2gocGFyYW1ldGVycykge1xuXG4gICAgICAgIGlmICghcGFyYW1ldGVycyl7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBhIHRpdGxlIGlkIGlzIHNwZWNpZmljZWQgdGhlbiBubyBmYWNldHMgd2lsbCBiZSBjYWxjdWxhdGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHBhcmFtcyBzZW50LlxuICAgICAgICBpZiAoIXBhcmFtZXRlcnMuaW5jbHVkZWRGYWNldHMgJiYgIXBhcmFtZXRlcnMudGl0bGVJZCl7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzLmluY2x1ZGVkRmFjZXRzID0gd2luZG93Lk92ZXJEcml2ZS5zdXBwb3J0ZWRGYWNldHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnTHVja3lEYXknKSAmJiBwYXJhbWV0ZXJzLnNodWZmbGUpe1xuICAgICAgICAgICAgY29uc3Qgc29ydHMgPSBbJ21vc3Rwb3B1bGFyJywgJ3JlbGVhc2VkYXRlJywgJ3RpdGxlJywgJ2F1dGhvcicsICduZXdseWFkZGVkJywgJ2xvd2NpcmN1bGF0aW5nJywgJ21vc3Rwb3B1bGFyLXNpdGUnXTtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMuc29ydEJ5ID0gc29ydHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc29ydHMubGVuZ3RoKV07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWVkaWFQYXJhbWV0ZXJzID0gbmV3IE1lZGlhUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcblxuICAgICAgICBpZiAoISF3aW5kb3cuT3ZlckRyaXZlLnNob3dPbmx5QXZhaWxhYmxlKSB7XG4gICAgICAgICAgICBtZWRpYVBhcmFtZXRlcnMuc2hvd09ubHlBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jOnN0YXJ0JywgdGhpcywgeyBtZWRpYVBhcmFtZXRlcnMgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMucmVzdC5tZWRpYS5pbmRleCksXG4gICAgICAgICAgICAgICAgbWV0aG9kICA6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcsXG4gICAgICAgICAgICAgICAgZGF0YSAgICA6IEpTT04uc3RyaW5naWZ5KG1lZGlhUGFyYW1ldGVycy5zZXJpYWxpemUoKSksXG4gICAgICAgICAgICAgICAgdGltZW91dDogMTAwMDBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZG9uZSgoZGF0YSwgdGV4dFN0YXR1cywganFYSFIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnTHVja3lEYXknKSAmJiBwYXJhbWV0ZXJzLnNodWZmbGUpe1xuICAgICAgICAgICAgICAgICAgICBkYXRhLml0ZW1zID0gZGF0YS5pdGVtcyAmJiBfLnNodWZmbGUoZGF0YS5pdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdvbmx5LXNob3ctb3duZWQtY29udGVudCcpICYmIGRhdGEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5pdGVtcyA9IGRhdGEuaXRlbXMuZmlsdGVyKCh4KSA9PiB4LmlzT3duZWQgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9mZXRjaERvbmUoZGF0YSwgdGV4dFN0YXR1cywganFYSFIpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignc3luYzplbmQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5mYWlsKChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mZXRjaEZhaWwoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3N5bmM6ZW5kJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGpxWEhSKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfZmV0Y2hEb25lKGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSKSB7XG4gICAgICAgIHRoaXMuaXRlbXMucmVzZXQoZGF0YS5pdGVtcyk7XG4gICAgICAgIHRoaXMudHJpZ2dlcignc3luYzpzdWNjZXNzJywgdGhpcywgeyBkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUiB9KTtcbiAgICB9XG5cbiAgICBfZmV0Y2hGYWlsKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikge1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3N5bmM6ZmFpbCcsIHRoaXMsIHsganFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duIH0pO1xuICAgIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlQWN0aW9uQnV0dG9uIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgY29uc3RydWN0b3IoeyB0eXBlID0gJ2xpbmsnLCBhY3Rpb24sIHN0eWxlIH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcblxuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuXG4gICAgICAgIHRoaXMuaGFzQ3VzdG9tQWN0aW9uID0gZmFsc2U7XG4gICAgICAgIGlmICghIWFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgICAgICAgICB0aGlzLmhhc0N1c3RvbUFjdGlvbiA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG5cbiAgICAgICAgdGhpcy4kYnV0dG9uID0gJCgnPGEgLz4nKTtcblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWwsICdjaGFuZ2U6dGl0bGVTdGF0ZScsIHRoaXMucmVuZGVyKTtcblxuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZCh0aGlzLiRidXR0b24pO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIGdldCBpc0J1dHRvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2J1dHRvbic7XG4gICAgfVxuXG4gICAgZ2V0IGlzTGluaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2xpbmsnO1xuICAgIH1cblxuICAgIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLiRidXR0b24ub2ZmKCk7XG4gICAgICAgIHRoaXMuJGVsLm9mZigpO1xuXG4gICAgICAgIGNvbnN0IGJ1dHRvblByb3BzID0gdGhpcy5nZXRCdXR0b25Qcm9wcygpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gYnV0dG9uUHJvcHMuYXR0cmlidXRlcztcbiAgICAgICAgaWYgKF8oYXR0cmlidXRlcy5ocmVmKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMucm9sZSA9ICdidXR0b24nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXR0cmlidXRlcy5yb2xlID0gJ2xpbmsnO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kYnV0dG9uLmF0dHIoYXR0cmlidXRlcyk7XG4gICAgICAgIHRoaXMuJGJ1dHRvbi5odG1sKGJ1dHRvblByb3BzLmh0bWwpO1xuXG4gICAgICAgIC8vIEF0dGFjaCBldmVudCBoYW5kbGVycyBpZiBlaXRoZXIgaXMgdHJ1ZVxuICAgICAgICAvLyAtIEJ1dHRvbiBpcyBub3QgYSBsaW5rXG4gICAgICAgIC8vIC0gQ3VzdG9tIGFjdGlvbiBoYXMgYmVlbiBwcm92aWRlZFxuICAgICAgICBpZiAoYXR0cmlidXRlcy5yb2xlICE9PSAnbGluaycgfHwgdGhpcy5oYXNDdXN0b21BY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2F0dGFjaEV2ZW50SGFuZGxlcnModGhpcy4kYnV0dG9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdhaXRpbmcoaXNXYWl0aW5nID0gdHJ1ZSkge1xuICAgICAgICBpZiAoaXNXYWl0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLiRidXR0b25cbiAgICAgICAgICAgICAgICAub2ZmKCcudGl0bGVBY3Rpb25CdXR0b24nKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnd2FpdGluZycpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2Rpc2FibGVkJywgaXNXYWl0aW5nKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoJzxkaXYgY2xhc3M9XCJzcGlubmVyXCI+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+XG48L2Rpdj5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHsgbWVkaWEsIHNyYywgaHJlZiwgY292ZXJDb2xvciwgbm9TYW1wbGVDbGFzcywgc3Jjc2V0IH0pID0+IGBcbjxkaXYgY2xhc3M9XCJDb3ZlckltYWdlQ29udGFpbmVyXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAke2NvdmVyQ29sb3J9XCI+XG4gICAgPGEgaHJlZj1cIiR7aHJlZn1cIlxuICAgICAgICAgICBkYXRhLWhyZWYgICAgPVwiJHtocmVmfVwiXG4gICAgICAgICAgIGRhdGEtbWVkaWEtaWQ9XCIke21lZGlhLmlkfVwiXG4gICAgICAgICAgIGRhdGEtdGl0bGUgICA9XCIke21lZGlhLnRpdGxlfVwiXG4gICAgICAgICAgIGRhdGEtdHlwZSAgICA9XCIke21lZGlhLnR5cGUuaWR9XCI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzPVwibGFyZ2UtdGl0bGUganMtZGV0YWlscy1jb3Zlci1pbWFnZSAke25vU2FtcGxlQ2xhc3N9IFwiXG4gICAgICAgICAgICBzcmM9XCIke3NyY31cIlxuICAgICAgICAgICAgJHtzcmNzZXQgJiYgYHNyY3NldD1cIiR7c3Jjc2V0fVwiYH1cbiAgICAgICAgICAgIGFsdD1cIiR7bWVkaWEudGl0bGV9IC0gJHtodG1sKG1lZGlhLnR5cGUuaWQpfVwiXG4gICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICR7Y292ZXJDb2xvcn07IG1heC1oZWlnaHQ6IG5vbmUgIWltcG9ydGFudDtcIi8+XG4gICAgPC9hPlxuPC9kaXY+YDtcbiIsImltcG9ydCB7IHRvU3RhdGljVXJsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbGliL2Fzc2V0TWFwcGVyJztcblxuZXhwb3J0IGRlZmF1bHQgKHsgbWVkaWEsIGhyZWYsIGlzSW5IZXJvLCBjb3ZlcldpZHRoLCBjb3ZlckhlaWdodCwgY3JlYXRvclRleHQgfSkgPT4gYFxuPGRpdiBjbGFzcz1cIkNvdmVySW1hZ2VDb250YWluZXJcIj5cbjxhIGNsYXNzPVwiQ292ZXJJbWFnZUNvbnRhaW5lciBub0NvdmVyQXZhaWxhYmxlICR7IGlzSW5IZXJvID8gJ3NlY29uZGFyeS1iYWNrZ3JvdW5kJyA6ICdwcmltYXJ5LWJhY2tncm91bmQnIH1cIlxuICAgIGhyZWY9XCIkeyBocmVmIH1cIlxuICAgIGRhdGEtaHJlZiAgICA9XCIkeyBocmVmIH1cIlxuICAgIGRhdGEtbWVkaWEtaWQ9XCIkeyBtZWRpYS5pZCB9XCJcbiAgICBkYXRhLXRpdGxlICAgPVwiJHsgbWVkaWEudGl0bGUgfVwiXG4gICAgZGF0YS10eXBlICAgID1cIiR7IG1lZGlhLnR5cGUuaWQgfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUgJHsgaXNJbkhlcm8gPyAnc2Vjb25kYXJ5LWZvbnQtaGlnaGxpZ2h0LWJveCcgOiAncHJpbWFyeS1mb250IHByaW1hcnktZm9udC1oaWdobGlnaHQtYm94JyB9XCI+JHsgbWVkaWEudGl0bGUgfTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0aG9yICR7IGlzSW5IZXJvID8gJycgOiAncHJpbWFyeS1mb250JyB9XCI+JHsgY3JlYXRvclRleHQgfTwvZGl2PlxuXG4gICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzPVwibGFyZ2UtdGl0bGUganMtZGV0YWlscy1jb3Zlci1pbWFnZVwiXG4gICAgICAgICAgICBzcmM9XCIkeyB0b1N0YXRpY1VybCgnaW1nL2NsZWFyLmdpZicpIH1cIlxuICAgICAgICAgICAgYWx0PVwiJHsgbWVkaWEudGl0bGUgfSAtICR7IGh0bWwobWVkaWEudHlwZS5pZCkgfVwiXG4gICAgICAgICAgICAvPlxuXG48L2E+XG48L2Rpdj5cblxuYDtcbiIsImV4cG9ydCBkZWZhdWx0ICh7IHRleHQsIGhyZWYsIGxhYmVsIH0pID0+IGBcbjxhIHRpdGxlPVwiJHt0ZXh0fVwiIGNsYXNzPVwic2Vjb25kYXJ5LXVuZGVybGluZVwiIGhyZWY9XCIke2hyZWZ9XCIgYXJpYS1sYWJlbD1cIiR7bGFiZWx9XCI+JHt0ZXh0fTwvYT5cbmA7XG4iLCJleHBvcnQgZGVmYXVsdCAoeyBnZW9JZGNDbGFzcyB9KSA9PiBgXG48ZGl2IGNsYXNzPVwidGl0bGUtY29udGVudHMgY2FyZCBUaXRsZUNhcmQgJHtnZW9JZGNDbGFzc31cIj5cbiAgICA8ZGl2IGNsYXNzPVwiVGl0bGVIZWFkZXJCYXJcIj48L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJDb3ZlckltYWdlXCI+PC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiSW5mb1BhbmVsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJUaXRsZUluZm9cIj48L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiVGl0bGVBY3Rpb24gaXMtZ3JpZFwiPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJUaXRsZVdpc2hsaXN0IGlzLWdyaWRcIj48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjbGVhclwiIC8+XG48L2Rpdj5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHt0eXBlSWR9KSA9PiBgXG4ke3R5cGVJZCA/IGBcbiAgICA8c3BhbiBjbGFzcz1cInRpdGxlLWZvcm1hdC1iYWRnZSBjb250cmFzdCB1LWFsbENhcHNcIj48aSBjbGFzcz1cImljb24tJHt0eXBlSWR9XCI+PC9pPiR7d2luZG93Lmh0bWwodHlwZUlkKX08L3NwYW4+XG5gIDogJycgfVxuYDtcbiIsImV4cG9ydCBkZWZhdWx0ICh7IHRpdGxlSWQsIHRpdGxlLCBocmVmLCBhcmlhTGFiZWwgfSkgPT4gYDxoMyB0aXRsZT1cIiR7IHRpdGxlIH1cIiBjbGFzcz1cInRpdGxlLW5hbWVcIiBkYXRhLW1lZGlhLWlkPVwiJHsgdGl0bGVJZCB9XCIgdGFiaW5kZXg9XCItMVwiPlxuICAgIDxhIHRhYmluZGV4PVwiMFwiIGhyZWY9XCIkeyBocmVmIH1cIiByb2xlPVwibGlua1wiIGFyaWEtbGFiZWw9XCIkeyBhcmlhTGFiZWwgfVwiPlxuICAgICAgICAkeyB0aXRsZSB9XG4gICAgPC9hPlxuPC9oMz5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHtnYSwgY29udHJhc3RDbGFzcywgYXJpYUxhYmVsLCBpY29uQ2xhc3MsIHRleHQsIGljb25BbmltYXRpb25DbGFzc2VzfSkgPT4gYFxuPGJ1dHRvbiAke2dhID8gYGRhdGEtZ2EtdHJhY2s9XCJ3aXNobGlzdFwiIGRhdGEtZ2EtbWVkaWFJRD1cIiR7Z2EubWVkaWFJZH1cIiBkYXRhLWdhLXR5cGU9JHtnYS5mb3JtYXRUeXBlfWAgOiAnJ31cbmNsYXNzPVwiV2lzaExpc3RCdXR0b24gJHtjb250cmFzdENsYXNzfVwiIFxudHlwZT1cImJ1dHRvblwiIFxuYXJpYS1sYWJlbD1cIiR7YXJpYUxhYmVsfVwiPlxuICAgIDxpIGNsYXNzPVwiJHtpY29uQ2xhc3N9IGljb24gJHtpY29uQW5pbWF0aW9uQ2xhc3Nlc31cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgJHt0ZXh0ID8gYDxzcGFuIGNsYXNzPVwidS1hbGxDYXBzIFdpc2hMaXN0QnV0dG9uLXRleHRcIj4ke3RleHR9PC9zcGFuPmAgOiAnJ31cbjwvYnV0dG9uPmA7XG4iLCJpbXBvcnQgQ29udGV4dE1lbnUgZnJvbSAnLi4vQ29udGV4dE1lbnUnO1xuaW1wb3J0IFRpdGxlQXV0aG9yIGZyb20gJy4vVGl0bGVJbmZvL1RpdGxlQXV0aG9yJztcbmltcG9ydCBUaXRsZUVkaXRpb24gZnJvbSAnLi9UaXRsZUluZm8vVGl0bGVFZGl0aW9uJztcbmltcG9ydCBUaXRsZU5hbWUgZnJvbSAnLi9UaXRsZUluZm8vVGl0bGVOYW1lJztcbmltcG9ydCBUaXRsZUZvcm1hdEJhZGdlIGZyb20gJy4vVGl0bGVJbmZvL1RpdGxlRm9ybWF0QmFkZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaXRsZUluZm8gZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBnZXQgY2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gJ3RpdGxlLWluZm8nO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLl92aWV3cyA9IFtdO1xuXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgX3Jlc2V0KCkge1xuICAgICAgICB0aGlzLl92aWV3cy5mb3JFYWNoKCh2aWV3KSA9PiB2aWV3LnJlbW92ZSgpKTtcbiAgICAgICAgdGhpcy5fdmlld3MgPSBbXTtcbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIHRoaXMuX3Jlc2V0KCk7XG4gICAgICAgIHN1cGVyLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcblxuICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgKHRoaXMudGl0bGVOYW1lID0gbmV3IFRpdGxlTmFtZSh7IG1vZGVsOiB0aGlzLm1vZGVsIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZ2VvLWlkYycpKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgICAgICh0aGlzLmNvbnRleHRNZW51ID0gbmV3IENvbnRleHRNZW51KHsgbW9kZWw6IHRoaXMubW9kZWwgfSkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudS4kZWwuYWRkQ2xhc3MoJ3RleHQtcmlnaHQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb2RlbC5pc01hZ2F6aW5lKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgICAgICh0aGlzLnRpdGxlRWRpdGlvbiA9IG5ldyBUaXRsZUVkaXRpb24oeyBtb2RlbDogdGhpcy5tb2RlbCB9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2dlby1pZGMnKSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICAgICAodGhpcy50aXRsZUF1dGhvciA9IG5ldyBUaXRsZUF1dGhvcih7IG1vZGVsOiB0aGlzLm1vZGVsIH0pKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAodGhpcy50aXRsZUZvcm1hdEJhZGdlID0gbmV3IFRpdGxlRm9ybWF0QmFkZ2Uoe1xuICAgICAgICAgICAgICAgIHR5cGVJZDogdGhpcy5tb2RlbC5nZXQoJ3R5cGUnKS5pZCxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuJGVsLmVtcHR5KCk7XG4gICAgICAgIHRoaXMuJGVsLmFwcGVuZCguLi50aGlzLl92aWV3cy5tYXAoKHZpZXcpID0+IHZpZXcuJGVsKSk7XG4gICAgfVxufVxuIiwiY29uc3QgQmFja2JvbmUgPSB3aW5kb3cuQmFja2JvbmU7XG5jb25zdCBmZWF0dXJlTWFuYWdlciA9IHdpbmRvdy5mZWF0dXJlTWFuYWdlcjtcblxuaW1wb3J0IFRpdGxlQXV0aG9yVGVtcGxhdGUgZnJvbSAnLi4vLi4vdGVtcGxhdGVzL1RpdGxlQXV0aG9yLmh0bWwnO1xuXG5jb25zdCBUaXRsZUF1dGhvciA9IEJhY2tib25lLlZpZXcuZXh0ZW5kKHtcbiAgICB0ZW1wbGF0ZTogVGl0bGVBdXRob3JUZW1wbGF0ZSxcblxuICAgIGNsYXNzTmFtZTogJ3RpdGxlLWF1dGhvcicsXG5cbiAgICB0YWdOYW1lOiAncCcsXG5cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5nZXQoJ3R5cGUnKS5pZCAhPT0gJ3BlcmlvZGljYWxzJykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMubW9kZWwudG9KU09OKCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGl0bGUuZmlyc3RDcmVhdG9yTmFtZSAhPSBudWxsICYmXG4gICAgICAgICAgICAhXy5pc0VtcHR5KHRpdGxlLmZpcnN0Q3JlYXRvck5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgbGV0IGNyZWF0b3JOYW1lID0gZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdmaXhIdG1sVGFnc0luQ29weScpXG4gICAgICAgICAgICAgICAgPyB0aXRsZS5maXJzdENyZWF0b3JOYW1lXG4gICAgICAgICAgICAgICAgOiBfLmVzY2FwZSh0aXRsZS5maXJzdENyZWF0b3JOYW1lKTtcblxuICAgICAgICAgICAgY29uc3Qgdmlld0RhdGEgPSB7XG4gICAgICAgICAgICAgICAgaHJlZjogd2luZG93LnVybCh3aW5kb3cucm91dGVzLnNlYXJjaEJ5VHlwZSwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY3JlYXRvcklkJyxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHRpdGxlLmZpcnN0Q3JlYXRvcklkLFxuICAgICAgICAgICAgICAgICAgICBzb3J0Qnk6ICduZXdseWFkZGVkJyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBsYWJlbDogd2luZG93LnRleHQoJ2NvdmVyLnNlYXJjaEJ5QXV0aG9yJywge1xuICAgICAgICAgICAgICAgICAgICBhdXRob3I6IGNyZWF0b3JOYW1lLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRleHQ6IGNyZWF0b3JOYW1lLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy4kZWwuaHRtbChcbiAgICAgICAgICAgICAgICB3aW5kb3cudGV4dCgnYnlMaW5lJywgeyBjcmVhdG9yOiB0aGlzLnRlbXBsYXRlKHZpZXdEYXRhKSB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCduby1hdXRob3ItZml4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbC5odG1sKHdpbmRvdy5odG1sKCdjb3Zlci5ub0F1dGhvckF2YWlsYWJsZScpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVBdXRob3I7XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlRWRpdGlvbiBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IG5vZGUgPSAkKGA8ZGl2IGNsYXNzPVwidGl0bGUtZWRpdGlvblwiPiR7dGhpcy5tb2RlbC5nZXQoJ2VkaXRpb24nKX08L2Rpdj5gKTtcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KG5vZGUpO1xuICAgIH1cbn1cbiIsImltcG9ydCBUaXRsZUZvcm1hdEJhZGdlVGVtcGxhdGUgZnJvbSAnLi4vLi4vdGVtcGxhdGVzL1RpdGxlRm9ybWF0QmFkZ2UuaHRtbCc7XG5cbmNvbnN0IFRpdGxlRm9ybWF0QmFkZ2UgPSBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7XG4gICAgaW5pdGlhbGl6ZSh7dHlwZUlkfSkge1xuICAgICAgICB0aGlzLnR5cGVJZCA9IHR5cGVJZDtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9LFxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLnNldEVsZW1lbnQoJChUaXRsZUZvcm1hdEJhZGdlVGVtcGxhdGUoe3R5cGVJZDogdGhpcy50eXBlSWR9KSkpO1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBUaXRsZUZvcm1hdEJhZGdlO1xuIiwiaW1wb3J0IFRpdGxlTmFtZVRlbXBsYXRlIGZyb20gJy4uLy4uL3RlbXBsYXRlcy9UaXRsZU5hbWUuaHRtbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlTmFtZSBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuXG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSBUaXRsZU5hbWVUZW1wbGF0ZTtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBfYXNzZW1ibGVMYWJlbCgpIHtcbiAgICAgICAgbGV0IGxhYmVsUGFydHMgPSBbXTtcblxuICAgICAgICBsYWJlbFBhcnRzLnB1c2godGhpcy5tb2RlbC5nZXQoJ3RpdGxlJykpO1xuXG4gICAgICAgIGlmICghIXRoaXMubW9kZWwuZ2V0KCdmaXJzdENyZWF0b3JOYW1lJykpIHtcbiAgICAgICAgICAgIGxhYmVsUGFydHMucHVzaCh3aW5kb3cuaHRtbCgnYnlMaW5lJywge2NyZWF0b3I6IHRoaXMubW9kZWwuaXNNYWdhemluZSA/IHRoaXMubW9kZWwuZ2V0KCdwdWJsaXNoZXInKS5uYW1lIDogdGhpcy5tb2RlbC5nZXQoJ2ZpcnN0Q3JlYXRvck5hbWUnKX0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhYmVsUGFydHMucHVzaCh0aGlzLm1vZGVsLmF2YWlsYWJpbGl0eVRleHQoKSk7XG5cbiAgICAgICAgbGFiZWxQYXJ0cy5wdXNoKHRoaXMubW9kZWwuZ2V0KCd0eXBlJykubmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIGxhYmVsUGFydHMuam9pbignICcpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qgdmlld0RhdGEgPSB7XG4gICAgICAgICAgICB0aXRsZUlkICAgOiB0aGlzLm1vZGVsLmlkLFxuICAgICAgICAgICAgaHJlZiAgICAgIDogdGhpcy5tb2RlbC50aXRsZURldGFpbHNVcmwsXG4gICAgICAgICAgICBhcmlhTGFiZWwgOiBfLmVzY2FwZSh0aGlzLl9hc3NlbWJsZUxhYmVsKCkpLFxuICAgICAgICAgICAgdGl0bGUgICAgIDogdGhpcy5tb2RlbC5nZXQoJ3RpdGxlJylcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuc2V0RWxlbWVudCgkKHRoaXMudGVtcGxhdGUodmlld0RhdGEpKSk7XG4gICAgfVxufVxuXG4iLCJpbXBvcnQgVGl0bGUgZnJvbSAnLi4vY29tcG9uZW50cy9tZWRpYS9tb2RlbHMvVGl0bGUnO1xuaW1wb3J0IFRpdGxlQ29sbGVjdGlvbiBmcm9tICcuLi9jb21wb25lbnRzL21lZGlhL21vZGVscy9UaXRsZUNvbGxlY3Rpb24nO1xuXG4vLyBUaGlzIGlzIGEgcmVwbGFjZW1lbnQgZm9yIFBhdHJvbk1lZGlhSXRlbXNNb2RlbCAoZWNtYXNjcmlwdFxcbW9kZWxzXFxwYXRyb25fbWVkaWFfaXRlbXMuanMpXG4vLyBXZSBzaG91bGQgZ3JhZHVhbGx5IHRyYW5zaXRpb24gdG8gdXNpbmcgdGhpcyBhcyB0aW1lIHBlcm1pdHMgYW5kIHdlIGNhbiB0YWtlIHRoZSB0aW1lIHRvIHZhbGlkYXRlIGZ1bnRpb25hbGl0eVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGF0cm9uVGl0bGVTdGF0dXMgZXh0ZW5kcyBCYWNrYm9uZS5Nb2RlbCB7XG4gICAgZ2V0IHVybCgpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYUluZm8pO1xuICAgIH1cblxuICAgIGZldGNoVGl0bGVTdGF0dXModGl0bGVDb2xsZWN0aW9uLCBzdGF0dXNUeXBlcyA9IG51bGwpIHtcbiAgICAgICAgbGV0IHRpdGxlQXJyYXkgPSB0aXRsZUNvbGxlY3Rpb24ubW9kZWxzIHx8IHRpdGxlQ29sbGVjdGlvbiB8fCBbXTtcblxuICAgICAgICBpZiAodGl0bGVBcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aXRsZUlkcyA9IF8ubWFwKF8odGl0bGVBcnJheSkucGx1Y2soJ2lkJyksIE51bWJlcik7XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gdGhpcy5mZXRjaCh7XG4gICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7IHRpdGxlSWRzLCBzdGF0dXNUeXBlcyB9KSxcbiAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3Q7XG4gICAgfVxuXG4gICAgLyoqIEBwYXJhbSB7VGl0bGV9IHRpdGxlICovXG4gICAgdXBkYXRlVGl0bGVTdGF0ZSh0aXRsZSkge1xuICAgICAgICB0aXRsZS51cGRhdGVQYXRyb25TdGF0ZSh0aGlzLmF0dHJpYnV0ZXMpO1xuICAgIH1cblxuICAgIGdldCB0aXRsZUlkcygpIHtcbiAgICAgICAgcmV0dXJuIF8udW5pb24oXG4gICAgICAgICAgICB0aGlzLmdldCgnb25SZWFkaW5nSGlzdG9yeScpLFxuICAgICAgICAgICAgXy5rZXlzKHRoaXMuZ2V0KCdzdGFyUmF0aW5ncycpKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0KCdvbkNoZWNrb3V0cycpLFxuICAgICAgICAgICAgdGhpcy5nZXQoJ29uSG9sZHMnKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0KCdvbldpc2hsaXN0JylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQHBhcmFtIHtUaXRsZUNvbGxlY3Rpb259IHRpdGxlQ29sbGVjdGlvbiAqL1xuICAgIHVwZGF0ZVRpdGxlQ29sbGVjdGlvblN0YXRlKHRpdGxlQ29sbGVjdGlvbikge1xuICAgICAgICAvLyB3ZSBwcm92aWRlIGFuIGVtcHR5IGFycmF5IGZvciBhbnkgc3RhdHVzIGF0dHJpYnV0ZXMgdGhhdCB3ZXJlIG5vdCBmZXRjaGVkXG4gICAgICAgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGJyZWFraW5nIGFueXRoaW5nIGRvd25zdHJlYW1cbiAgICAgICAgdGhpcy5zdHViQXR0cmlidXRlcygpO1xuICAgICAgICB0aGlzLnRpdGxlSWRzLmZvckVhY2goKHRpdGxlSWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gdGl0bGVDb2xsZWN0aW9uLmZpbmRXaGVyZSh7IGlkOiB0aXRsZUlkIH0pO1xuXG4gICAgICAgICAgICBpZiAobW9kZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlU3RhdGUobW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdHViQXR0cmlidXRlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdldCgnb25SZWFkaW5nSGlzdG9yeScpKSB7XG4gICAgICAgICAgICB0aGlzLnNldCgnb25SZWFkaW5nSGlzdG9yeScsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ2V0KCdzdGFyUmF0aW5ncycpKSB7XG4gICAgICAgICAgICB0aGlzLnNldCgnc3RhclJhdGluZ3MnLCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmdldCgnb25DaGVja291dHMnKSkge1xuICAgICAgICAgICAgdGhpcy5zZXQoJ29uQ2hlY2tvdXRzJywgW10pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5nZXQoJ29uSG9sZHMnKSkge1xuICAgICAgICAgICAgdGhpcy5zZXQoJ29uSG9sZHMnLCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmdldCgnb25XaXNobGlzdCcpKSB7XG4gICAgICAgICAgICB0aGlzLnNldCgnb25XaXNobGlzdCcsIFtdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCBGZWF0dXJlZENvbGxlY3Rpb25WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvZmVhdHVyZWRfY29sbGVjdGlvbnMvRmVhdHVyZWRDb2xsZWN0aW9uVmlldyc7XG5cbndpbmRvdy5mZWF0dXJlZENvbGxlY3Rpb25WaWV3ID0gbmV3IEZlYXR1cmVkQ29sbGVjdGlvblZpZXcgKHtcbiAgICBlbCAgICAgICAgICAgICAgOiAnLkNhcm91c2VscycsXG4gICAgdmlld05hbWUgICAgICAgIDogd2luZG93LnZpZXdOYW1lLFxuICAgIGJ1cyAgICAgICAgICAgICA6IHdpbmRvdy5nbG9iYWxFdmVudHMsXG4gICAgcm9vbSAgICAgICAgICAgIDogd2luZG93Lk92ZXJEcml2ZS5jdXJyZW50Um9vbSxcbiAgICBwYXRyb25TZXR0aW5ncyAgOiB3aW5kb3cucGF0cm9uU2V0dGluZ3Ncbn0pO1xuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVBY3Rpb25zIHtcbiAgICBjb25zdHJ1Y3Rvcih7IGJ1cywgY29udGV4dCB9KSB7XG4gICAgICAgIHRoaXMuYnVzID0gYnVzO1xuXG4gICAgICAgIHRoaXMuY29udGV4dCA9IHtcbiAgICAgICAgICAgIHJvb206IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25EZWZpbml0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgXy5leHRlbmQodGhpcy5jb250ZXh0LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwZXJmb3JtKGFjdGlvbiwgdGl0bGVNb2RlbCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXNbYF8ke2FjdGlvbn1gXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpc1tgXyR7YWN0aW9ufWBdKHRpdGxlTW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2JvcnJvdyh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOmJvcnJvdycsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX2hvbGQodGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpob2xkJywgdGl0bGVNb2RlbCwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBfd2lzaCh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOndpc2hsaXN0JywgdGl0bGVNb2RlbCwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBfbm9vayh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOm5vb2snLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9yYXRpbmcodGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpyYXRpbmcnLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9oaXN0b3J5KHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6aGlzdG9yeScsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX2Rvd25sb2FkKHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6ZG93bmxvYWQnLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9wcmV2aWV3KHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6cHJldmlldycsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX3JlbmV3KHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6cmVuZXcnLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9yZXF1ZXN0QWdhaW4odGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpyZXF1ZXN0QWdhaW4nLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIHNldENvbnRleHRSb29tKHJvb20pIHtcbiAgICAgICAgaWYgKF8ocm9vbSkuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jb250ZXh0LnJvb207XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucm9vbSA9IHJvb207XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzZXRDb250ZXh0Q29sbGVjdGlvbih0aXRsZUNvbGxlY3Rpb24pIHtcbiAgICAgICAgaWYgKF8odGl0bGVDb2xsZWN0aW9uKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvbnRleHQudGl0bGVDb2xsZWN0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnRpdGxlQ29sbGVjdGlvbiA9IHRpdGxlQ29sbGVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiIsImNsYXNzIFRpdGxlU3RhdGUge1xuICAgIHN0YXRpYyBnZXRTdGF0ZShtZWRpYSwgcGF0cm9uSXRlbXMpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZU1hbmFnZXIgPSB3aW5kb3cuZmVhdHVyZU1hbmFnZXI7XG5cbiAgICAgICAgaWYgKGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnc2FtcGxlT25seU1vZGUnKSkge1xuICAgICAgICAgICAgcmV0dXJuICdwcmV2aWV3JztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtZWRpYUlkID0gbWVkaWEuaWQ7XG5cbiAgICAgICAgbGV0IGlzT25Ib2xkID0gcGF0cm9uSXRlbXMgJiYgcGF0cm9uSXRlbXMub25Ib2xkcy5pbmRleE9mKG1lZGlhSWQpID4gLTE7XG4gICAgICAgIGxldCBpc09uQ2hlY2tvdXRzID1cbiAgICAgICAgICAgIHBhdHJvbkl0ZW1zICYmIHBhdHJvbkl0ZW1zLm9uQ2hlY2tvdXRzLmluZGV4T2YobWVkaWFJZCkgPiAtMTtcbiAgICAgICAgbGV0IGlzQXZhaWxhYmxlID1cbiAgICAgICAgICAgIG1lZGlhLmlzQXZhaWxhYmxlIHx8XG4gICAgICAgICAgICAoZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMdWNreURheScpICYmXG4gICAgICAgICAgICAgICAgbWVkaWEubHVja3lEYXlBdmFpbGFibGVDb3BpZXMgPiAwKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAvYWNjb3VudFxcL2xvYW5zLy50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmKSAmJlxuICAgICAgICAgICAgbWVkaWEuaXNSZW5ld2FibGUgJiZcbiAgICAgICAgICAgIGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnY29udGVudC1ob2xkcycpXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGlzT25Ib2xkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyZXF1ZXN0ZWQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBtZWRpYS5ob2xkc0NvdW50IDw9IDAgJiZcbiAgICAgICAgICAgICAgICBtZWRpYS5vd25lZENvcGllcyA+PSAwICYmXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMdWNreURheScpICYmXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhLmlzTHVja3lEYXlDaGVja291dFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmVuZXcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdyZXF1ZXN0QWdhaW4nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzT25DaGVja291dHMpIHtcbiAgICAgICAgICAgIHJldHVybiAnYm9ycm93ZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzT25Ib2xkICYmICFpc0F2YWlsYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuICdvbkhvbGQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICBpZiAobWVkaWEudHlwZS5pZCA9PT0gJ3BlcmlvZGljYWxzJykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbm9vayc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAnYm9ycm93JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZWRpYS5pc0hvbGRhYmxlICYmIGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnY29udGVudC1ob2xkcycpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2hvbGQnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICd1bmF2YWlsYWJsZSc7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzT25XaXNobGlzdChtZWRpYSwgcGF0cm9uSXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIHBhdHJvbkl0ZW1zICYmIHBhdHJvbkl0ZW1zLm9uV2lzaGxpc3QuaW5kZXhPZihtZWRpYS5pZCkgPiAtMTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNPblJlYWRpbmdIaXN0b3J5KG1lZGlhLCBwYXRyb25JdGVtcykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcGF0cm9uSXRlbXMgJiYgcGF0cm9uSXRlbXMub25SZWFkaW5nSGlzdG9yeS5pbmRleE9mKG1lZGlhLmlkKSA+IC0xXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc3RhdGljIHN0YXJSYXRpbmcobWVkaWEsIHBhdHJvbkl0ZW1zKSB7XG4gICAgICAgIC8vIFJldHVybnMgMCBpZiBub3QgcmF0ZWRcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChwYXRyb25JdGVtcyAmJlxuICAgICAgICAgICAgICAgIHBhdHJvbkl0ZW1zLnN0YXJSYXRpbmdzICYmXG4gICAgICAgICAgICAgICAgcGF0cm9uSXRlbXMuc3RhclJhdGluZ3NbbWVkaWEuaWRdKSB8fFxuICAgICAgICAgICAgMFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVTdGF0ZTtcbiIsIi8vIEVTNiB2ZXJzaW9uIG9mIHNldHRsZVxuUHJvbWlzZS5zZXR0bGUgPSBmdW5jdGlvbihwcm9taXNlcykge1xuICAgIGNsYXNzIFByb21pc2VJbnNwZWN0aW9uIHtcbiAgICAgICAgY29uc3RydWN0b3IoZnVsZmlsbGVkLCB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5mdWxmaWxsZWQgPSBmdWxmaWxsZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMubWFwKChwKSA9PlxuICAgICAgICAvLyBtYWtlIHN1cmUgYW55IHZhbHVlcyBhcmUgd3JhcHBlZCBpbiBhIHByb21pc2VcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHApLnRoZW4oKHZhbCkgPT4gbmV3IFByb21pc2VJbnNwZWN0aW9uKHRydWUsIHZhbCkpLmNhdGNoKChlcnIpID0+IG5ldyBQcm9taXNlSW5zcGVjdGlvbihmYWxzZSwgZXJyKSkpKTtcbn07XG5cbi8vIHdyYXBwaW5nIFByb21pc2Ugbm90YXRpb24gYXJvdW5kIGFuIGFqYXggY2FsbFxuUHJvbWlzZS5hamF4ID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgICAgICAkLmFqYXgob3B0aW9ucylcbiAgICAgICAgICAgIC5kb25lKChyZXNwb25zZSkgPT4gcmVzb2x2ZShyZXNwb25zZSkpXG4gICAgICAgICAgICAuZmFpbCgoeGhyLCBzdGF0dXMsIGVycikgPT4gcmVqZWN0KGVycikpXG4gICAgKTtcbn07XG4iLCJpbXBvcnQgSGFzaE1hbmFnZXIgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb21tb24vSGFzaE1hbmFnZXInO1xuaW1wb3J0IFRpdGxlIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbWVkaWEvbW9kZWxzL1RpdGxlJztcbmltcG9ydCBUaXRsZUFjdGlvbnMgZnJvbSAnLi4vLi4vdGl0bGUtYWN0aW9ucy9UaXRsZUFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9jZXNzRm9yd2FyZGVkQWN0aW9uIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2xsZWN0aW9uLCBidXMsIG1vZGVsKSB7XG4gICAgICAgIGxldCBoYXNoID0gSGFzaE1hbmFnZXIuZ2V0KCdhY3Rpb24nKVswXTtcbiAgICAgICAgdGhpcy5hY3Rpb25BcnIgPSBoYXNoID8gaGFzaC5zcGxpdCgnficpIDogW107XG4gICAgICAgIHRoaXMuYWN0aW9uID0gdGhpcy5hY3Rpb25BcnJbMF0gfHwgbnVsbDtcbiAgICAgICAgdGhpcy5tZWRpYUlkID0gdGhpcy5hY3Rpb25BcnJbMV0gfHwgbnVsbDtcbiAgICAgICAgdGhpcy5yYXRpbmcgPSB0aGlzLmFjdGlvbkFyclsyXSB8fCAwO1xuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWwgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gY29sbGVjdGlvbi5tb2RlbHM7XG4gICAgICAgIHRoaXMuYnVzID0gYnVzO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGUgdXNlciBmb3J3YXJkZWQgYWN0aW9uXG4gICAgZXhlY3V0ZUFjdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGlvbiB8fCAhdGhpcy5tZWRpYUlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5tb2RlbCB8fFxuICAgICAgICAgICAgKHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5nZXQoJ2lkJykgIT09IHRoaXMubWVkaWFJZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsID0gXy5maW5kKFxuICAgICAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICAobW9kZWwpID0+IG1vZGVsLmlkID09PSB0aGlzLm1lZGlhSWRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGl0bGVBY3Rpb25zID0gbmV3IFRpdGxlQWN0aW9ucyh7IGJ1czogdGhpcy5idXMgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwpIHtcbiAgICAgICAgICAgIC8vIFRpdGxlIG1vZGVsIGlzIG9uIHBhZ2VcbiAgICAgICAgICAgIEhhc2hNYW5hZ2VyLnJlbW92ZSgnYWN0aW9uJyk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNldCgndXNlclN0YXJSYXRpbmcnLCB0aGlzLnJhdGluZyk7XG4gICAgICAgICAgICB0aXRsZUFjdGlvbnMucGVyZm9ybSh0aGlzLmFjdGlvbiwgdGhpcy5tb2RlbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaXRsZSBtb2RlbCBpcyBub3Qgb24gcGFnZSwgZmV0Y2ggYXN5bmNcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IG5ldyBUaXRsZSgpO1xuICAgICAgICAgICAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGl0bGUuZ2V0VGl0bGVBc3luYyh0aGlzLm1lZGlhSWQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsICYmIHRoaXMubW9kZWwuc2V0KCd1c2VyU3RhclJhdGluZycsIHRoaXMucmF0aW5nKTtcbiAgICAgICAgICAgICAgICB0aXRsZUFjdGlvbnMucGVyZm9ybSh0aGlzLmFjdGlvbiwgdGl0bGUpO1xuICAgICAgICAgICAgICAgIEhhc2hNYW5hZ2VyLnJlbW92ZSgnYWN0aW9uJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ=="}