@renaissancerentals/renaissance-component 12.4.24 → 13.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/announcement/Banner.d.ts +1 -1
- package/lib/announcement/assets/Banner.css +65 -0
- package/lib/application/ApplicationCompletion.d.ts +1 -1
- package/lib/application/ApplicationModal.d.ts +1 -1
- package/lib/application/ApplicationSection.d.ts +1 -1
- package/lib/application/assets/ApplicationCompletion.css +44 -0
- package/lib/application/assets/{ApplicationModal.scss → ApplicationModal.css} +3 -5
- package/lib/application/assets/{ApplicationSection.scss → ApplicationSection.css} +12 -11
- package/lib/asset/AssetModal.d.ts +1 -1
- package/lib/asset/VideoModal.d.ts +1 -1
- package/lib/asset/assets/{AssetModal.scss → AssetModal.css} +1 -3
- package/lib/asset/assets/{VideoModal.scss → VideoModal.css} +1 -3
- package/lib/assets/App.css +3 -0
- package/lib/assets/form.css +89 -0
- package/lib/assets/variables.css +49 -0
- package/lib/banner/SubmissionRequestBanner.d.ts +1 -1
- package/lib/banner/assets/{SubmissionRequestBanner.scss → SubmissionRequestBanner.css} +0 -2
- package/lib/card/Card.d.ts +1 -1
- package/lib/card/assets/Card.css +45 -0
- package/lib/contact/ContactModal.d.ts +1 -1
- package/lib/contact/ContactSection.d.ts +1 -1
- package/lib/contact/ContactSectionSkeleton.d.ts +1 -1
- package/lib/contact/assets/{ContactModal.scss → ContactModal.css} +2 -4
- package/lib/contact/assets/{ContactSection.scss → ContactSection.css} +14 -12
- package/lib/contact/assets/{ContactSkeleton.scss → ContactSkeleton.css} +1 -1
- package/lib/faq/FaqsCard.d.ts +1 -1
- package/lib/faq/FaqsSection.d.ts +1 -1
- package/lib/faq/PropertyFaqSection.d.ts +1 -1
- package/lib/faq/ResidentFaqSection.d.ts +1 -1
- package/lib/faq/assets/{FaqsCard.scss → FaqsCard.css} +0 -2
- package/lib/faq/assets/{FaqsSection.scss → FaqsSection.css} +1 -3
- package/lib/faq/assets/{PropertyFaqSection.scss → PropertyFaqSection.css} +0 -2
- package/lib/faq/assets/{ResidentFaqSection.scss → ResidentFaqSection.css} +1 -3
- package/lib/feature/FeatureSection.d.ts +1 -1
- package/lib/feature/assets/{FeatureSection.scss → FeatureSection.css} +7 -6
- package/lib/floorplan/card/FloorplanCard.d.ts +1 -1
- package/lib/floorplan/card/FloorplanCardSkeleton.d.ts +1 -1
- package/lib/floorplan/card/FloorplanCardSlider.d.ts +1 -1
- package/lib/floorplan/card/FloorplanPrice.d.ts +1 -1
- package/lib/floorplan/card/SimilarFloorplanCard.d.ts +1 -1
- package/lib/floorplan/card/TestimonialsCard.d.ts +1 -1
- package/lib/floorplan/card/assets/{FloorplanCard.scss → FloorplanCard.css} +36 -35
- package/lib/floorplan/card/assets/{FloorplanCardSlider.scss → FloorplanCardSlider.css} +4 -6
- package/lib/floorplan/card/assets/{FloorplanFaqsCard.scss → FloorplanFaqsCard.css} +1 -3
- package/lib/floorplan/card/assets/FloorplanPrice.css +35 -0
- package/lib/floorplan/card/assets/{SimilarFloorplanCard.scss → SimilarFloorplanCard.css} +2 -4
- package/lib/floorplan/card/assets/{TestimonialsCard.scss → TestimonialsCard.css} +2 -4
- package/lib/floorplan/filter/FloorplanDropDown.d.ts +1 -1
- package/lib/floorplan/filter/assets/{FloorplanDropDown.scss → FloorplanDropDown.css} +0 -2
- package/lib/floorplan/section/FloorplanHero.d.ts +1 -1
- package/lib/floorplan/section/FloorplanSection.d.ts +1 -1
- package/lib/floorplan/section/FloorplanSectionSkeleton.d.ts +1 -1
- package/lib/floorplan/section/FloorplansHeader.d.ts +2 -2
- package/lib/floorplan/section/FloorplansHeaderSekeleton.d.ts +2 -2
- package/lib/floorplan/section/FloorplansSection.d.ts +1 -1
- package/lib/floorplan/section/HeroBadgeStats.d.ts +1 -1
- package/lib/floorplan/section/assets/BadgeStats.css +3 -0
- package/lib/floorplan/section/assets/{FloorplanHero.scss → FloorplanHero.css} +21 -20
- package/lib/floorplan/section/assets/{FloorplanSection.scss → FloorplanSection.css} +12 -12
- package/lib/{unit/section/assets/UnitsHeader.scss → floorplan/section/assets/FloorplansHeader.css} +8 -7
- package/lib/floorplan/section/assets/{FloorplansSection.scss → FloorplansSection.css} +0 -2
- package/lib/floorplan/section/assets/{HeroBadgeStats.scss → HeroBadgeStats.css} +5 -7
- package/lib/footer/Footer.d.ts +1 -1
- package/lib/footer/assets/{Footer.scss → Footer.css} +13 -12
- package/lib/gallery/DriveGallery.d.ts +1 -1
- package/lib/gallery/Gallery.d.ts +1 -1
- package/lib/gallery/GalleryModal.d.ts +1 -1
- package/lib/gallery/GridGallery.d.ts +1 -1
- package/lib/gallery/GridGalleryCover.d.ts +1 -1
- package/lib/gallery/GridGalleryMobile.d.ts +1 -1
- package/lib/gallery/GridGallerySkeleton.d.ts +1 -1
- package/lib/gallery/HeroImageCard.d.ts +1 -1
- package/lib/gallery/ImageCard.d.ts +1 -1
- package/lib/gallery/ImageCardSkeleton.d.ts +1 -1
- package/lib/gallery/assets/{DriveGallery.scss → DriveGallery.css} +0 -2
- package/lib/gallery/assets/{Gallery.scss → Gallery.css} +12 -14
- package/lib/gallery/assets/{GalleryModal.scss → GalleryModal.css} +3 -5
- package/lib/gallery/assets/{GridGallery.scss → GridGallery.css} +3 -5
- package/lib/gallery/assets/{GridGalleryMobile.scss → GridGalleryMobile.css} +3 -5
- package/lib/gallery/assets/{HeroImageCard.scss → HeroImageCard.css} +1 -3
- package/lib/gallery/assets/{ImageCard.scss → ImageCard.css} +1 -3
- package/lib/header/InfoHeader.d.ts +1 -1
- package/lib/header/assets/InfoHeader.css +29 -0
- package/lib/home-page-special/HomePageSpecialCard.d.ts +1 -1
- package/lib/home-page-special/HomePageSpecialModal.d.ts +1 -1
- package/lib/home-page-special/HomePageSpecialSection.d.ts +1 -1
- package/lib/home-page-special/assets/{HomePageSpecialCard.scss → HomePageSpecialCard.css} +0 -2
- package/lib/home-page-special/assets/{HomePageSpecialModal.scss → HomePageSpecialModal.css} +3 -5
- package/lib/home-page-special/assets/{HomePageSpecialSection.scss → HomePageSpecialSection.css} +0 -2
- package/lib/index.cjs.js +112 -0
- package/lib/index.css +10 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.es.js +21817 -0
- package/lib/index.umd.js +112 -0
- package/lib/map/MapSection.d.ts +1 -1
- package/lib/map/assets/{Map.scss → Map.css} +0 -2
- package/lib/property/LeaseOfficeSkeleton.d.ts +1 -1
- package/lib/property/PropertyLocation.d.ts +1 -1
- package/lib/property/PropertyLocationSkeleton.d.ts +1 -1
- package/lib/property/assets/{PropertyLocation.scss → PropertyLocation.css} +3 -5
- package/lib/property/assets/{PropertyLocationSkeleton.scss → PropertyLocationSkeleton.css} +2 -4
- package/lib/review/ReviewSection.d.ts +1 -1
- package/lib/review/assets/{ReviewSection.scss → ReviewSection.css} +7 -9
- package/lib/short-term/Hostaway.d.ts +1 -1
- package/lib/short-term/ShortTermFloorplanCard.d.ts +1 -1
- package/lib/short-term/ShortTermFloorplanHero.d.ts +1 -1
- package/lib/short-term/ShortTermFloorplanSection.d.ts +1 -1
- package/lib/short-term/ShortTermFloorplansHeader.d.ts +2 -2
- package/lib/short-term/ShortTermFloorplansSection.d.ts +1 -1
- package/lib/short-term/ShortTermPricingCard.d.ts +1 -1
- package/lib/short-term/assets/{Hostaway.scss → Hostaway.css} +16 -15
- package/lib/short-term/assets/{ShortTermFloorplanCard.scss → ShortTermFloorplanCard.css} +20 -19
- package/lib/short-term/assets/{ShortTermFloorplanHero.scss → ShortTermFloorplanHero.css} +21 -20
- package/lib/short-term/assets/{ShortTermFloorplanSection.scss → ShortTermFloorplanSection.css} +17 -17
- package/lib/short-term/assets/{ShortTermFloorplansHeader.scss → ShortTermFloorplansHeader.css} +8 -7
- package/lib/short-term/assets/{ShortTermFloorplansSection.scss → ShortTermFloorplansSection.css} +0 -2
- package/lib/short-term/assets/{ShortTermPricingCard.scss → ShortTermPricingCard.css} +5 -7
- package/lib/special-offer/SpecialOfferBadge.d.ts +1 -1
- package/lib/special-offer/SpecialOfferButton.d.ts +1 -1
- package/lib/special-offer/assets/{SpecialOfferBadge.scss → SpecialOfferBadge.css} +3 -5
- package/lib/special-offer/assets/{SpecialOfferButton.scss → SpecialOfferButton.css} +2 -4
- package/lib/sublet/SubletCard.d.ts +1 -1
- package/lib/sublet/SubletImage.d.ts +1 -1
- package/lib/sublet/SubletMessageModal.d.ts +1 -1
- package/lib/sublet/SubletNotFound.d.ts +1 -1
- package/lib/sublet/SubletSection.d.ts +1 -1
- package/lib/sublet/SubletsSection.d.ts +1 -1
- package/lib/sublet/assets/{SubletCard.scss → SubletCard.css} +2 -4
- package/lib/sublet/assets/{SubletImage.scss → SubletImage.css} +2 -4
- package/lib/sublet/assets/{SubletMessageModal.scss → SubletMessageModal.css} +6 -8
- package/lib/sublet/assets/{SubletNotFound.scss → SubletNotFound.css} +0 -2
- package/lib/sublet/assets/{SubletSection.scss → SubletSection.css} +4 -6
- package/lib/sublet/assets/{SubletsSection.scss → SubletsSection.css} +1 -3
- package/lib/sublet/services/SubletService.d.ts +6 -2
- package/lib/summer-house/SummerHouseFeatures.d.ts +1 -1
- package/lib/summer-house/assets/{SummerHouseFeatures.scss → SummerHouseFeatures.css} +2 -4
- package/lib/summer-house/assets/{SummerHousePricing.scss → SummerHousePricing.css} +2 -4
- package/lib/team/TeamSection.d.ts +1 -1
- package/lib/team/assets/{Team.scss → Team.css} +0 -2
- package/lib/team/card/TeamCard.d.ts +1 -1
- package/lib/team/card/TeamCardSkeleton.d.ts +1 -1
- package/lib/team/card/assets/{TeamCard.scss → TeamCard.css} +6 -5
- package/lib/unit/card/UnitCard.d.ts +1 -1
- package/lib/unit/card/assets/{UnitCard.scss → UnitCard.css} +33 -32
- package/lib/unit/section/UnitHero.d.ts +1 -1
- package/lib/unit/section/UnitPrice.d.ts +1 -1
- package/lib/unit/section/UnitSection.d.ts +1 -1
- package/lib/unit/section/UnitsHeader.d.ts +1 -1
- package/lib/unit/section/UnitsSection.d.ts +1 -1
- package/lib/unit/section/assets/{UnitSection.scss → UnitSection.css} +12 -12
- package/lib/{floorplan/section/assets/FloorplansHeader.scss → unit/section/assets/UnitsHeader.css} +8 -7
- package/lib/unit/section/assets/{UnitsSection.scss → UnitsSection.css} +0 -2
- package/lib/video/Video.d.ts +1 -1
- package/lib/video/assets/{Video.scss → Video.css} +0 -2
- package/package.json +68 -72
- package/lib/announcement/Banner.js +0 -31
- package/lib/announcement/assets/Banner.scss +0 -65
- package/lib/application/ApplicationCompletion.js +0 -53
- package/lib/application/ApplicationModal.js +0 -38
- package/lib/application/ApplicationSection.js +0 -253
- package/lib/application/assets/ApplicationCompletion.scss +0 -44
- package/lib/application/data/RentalApplication.js +0 -15
- package/lib/application/service/ApplicationService.js +0 -13
- package/lib/asset/AssetModal.js +0 -42
- package/lib/asset/VideoModal.js +0 -48
- package/lib/asset/data/Asset.js +0 -6
- package/lib/asset/service/AssetService.js +0 -42
- package/lib/assets/App.scss +0 -96
- package/lib/assets/_variables.scss +0 -47
- package/lib/assets/form.scss +0 -90
- package/lib/banner/SubmissionRequestBanner.js +0 -16
- package/lib/captcha/data/CaptchaEnabledRequest.js +0 -6
- package/lib/card/Card.js +0 -26
- package/lib/card/assets/Card.scss +0 -44
- package/lib/contact/ContactModal.js +0 -42
- package/lib/contact/ContactSection.js +0 -345
- package/lib/contact/ContactSectionSkeleton.js +0 -33
- package/lib/contact/data/CommunityContact.js +0 -6
- package/lib/contact/data/Contact.js +0 -12
- package/lib/contact/data/ContactMessage.js +0 -24
- package/lib/contact/service/ContactService.js +0 -49
- package/lib/data/Calendar.js +0 -21
- package/lib/data/RenaissanceData.js +0 -16
- package/lib/data/SortField.js +0 -62
- package/lib/faq/FaqsCard.js +0 -26
- package/lib/faq/FaqsSection.js +0 -35
- package/lib/faq/PropertyFaqSection.js +0 -30
- package/lib/faq/ResidentFaqSection.js +0 -37
- package/lib/faq/data/Faq.js +0 -6
- package/lib/feature/FeatureSection.js +0 -19
- package/lib/floorplan/card/FloorplanCard.js +0 -148
- package/lib/floorplan/card/FloorplanCardSkeleton.js +0 -23
- package/lib/floorplan/card/FloorplanCardSlider.js +0 -45
- package/lib/floorplan/card/FloorplanPrice.js +0 -49
- package/lib/floorplan/card/SimilarFloorplanCard.js +0 -62
- package/lib/floorplan/card/TestimonialsCard.js +0 -25
- package/lib/floorplan/card/assets/FloorplanPrice.scss +0 -34
- package/lib/floorplan/data/Floorplan.js +0 -34
- package/lib/floorplan/data/FloorplanFilters.js +0 -6
- package/lib/floorplan/filter/FloorplanDropDown.js +0 -33
- package/lib/floorplan/section/FloorplanHero.js +0 -229
- package/lib/floorplan/section/FloorplanSection.js +0 -212
- package/lib/floorplan/section/FloorplanSectionSkeleton.js +0 -36
- package/lib/floorplan/section/FloorplansHeader.js +0 -214
- package/lib/floorplan/section/FloorplansHeaderSekeleton.js +0 -31
- package/lib/floorplan/section/FloorplansSection.js +0 -86
- package/lib/floorplan/section/HeroBadgeStats.js +0 -75
- package/lib/floorplan/section/assets/BadgeStats.scss +0 -5
- package/lib/floorplan/section/filter/Availability.js +0 -33
- package/lib/floorplan/section/filter/Bedroom.js +0 -32
- package/lib/floorplan/section/filter/Price.js +0 -36
- package/lib/floorplan/section/filter/Sort.js +0 -41
- package/lib/floorplan/section/filter/Style.js +0 -31
- package/lib/floorplan/service/FloorplanService.js +0 -290
- package/lib/footer/Footer.js +0 -98
- package/lib/gallery/DriveGallery.js +0 -67
- package/lib/gallery/Gallery.js +0 -116
- package/lib/gallery/GalleryModal.js +0 -74
- package/lib/gallery/GridGallery.js +0 -32
- package/lib/gallery/GridGalleryCover.js +0 -90
- package/lib/gallery/GridGalleryMobile.js +0 -88
- package/lib/gallery/GridGallerySkeleton.js +0 -19
- package/lib/gallery/HeroImageCard.js +0 -31
- package/lib/gallery/ImageCard.js +0 -28
- package/lib/gallery/ImageCardSkeleton.js +0 -22
- package/lib/gallery/VideoTours.js +0 -53
- package/lib/gallery/VirtualTour.js +0 -26
- package/lib/gallery/data/GalleryImage.js +0 -6
- package/lib/header/InfoHeader.js +0 -21
- package/lib/header/assets/InfoHeader.scss +0 -28
- package/lib/home-page-special/HomePageSpecialCard.js +0 -40
- package/lib/home-page-special/HomePageSpecialModal.js +0 -65
- package/lib/home-page-special/HomePageSpecialSection.js +0 -33
- package/lib/home-page-special/data/HomePageSpecial.js +0 -6
- package/lib/home-page-special/service/HomePageSpecialService.js +0 -24
- package/lib/index.js +0 -822
- package/lib/map/MapSection.js +0 -25
- package/lib/property/LeaseOfficeSkeleton.js +0 -17
- package/lib/property/PropertyLocation.js +0 -89
- package/lib/property/PropertyLocationSkeleton.js +0 -19
- package/lib/property/PropertyVideo.js +0 -21
- package/lib/property/data/Property.js +0 -36
- package/lib/property/service/PropertyService.js +0 -41
- package/lib/resident/data/Resident.js +0 -6
- package/lib/resident/service/ResidentService.js +0 -19
- package/lib/review/ReviewSection.js +0 -81
- package/lib/service/Api.js +0 -25
- package/lib/short-term/Hostaway.js +0 -63
- package/lib/short-term/ShortTermFloorplanCard.js +0 -112
- package/lib/short-term/ShortTermFloorplanHero.js +0 -231
- package/lib/short-term/ShortTermFloorplanSection.js +0 -135
- package/lib/short-term/ShortTermFloorplansHeader.js +0 -145
- package/lib/short-term/ShortTermFloorplansSection.js +0 -80
- package/lib/short-term/ShortTermPricingCard.js +0 -70
- package/lib/short-term/ShortTermSort.js +0 -41
- package/lib/short-term/ShortTermStyleFilter.js +0 -31
- package/lib/short-term/data/ShortTerm.js +0 -15
- package/lib/short-term/data/ShortTermFilters.js +0 -41
- package/lib/short-term/service/ShortTermService.js +0 -54
- package/lib/special-offer/SpecialOfferBadge.js +0 -24
- package/lib/special-offer/SpecialOfferButton.js +0 -30
- package/lib/sublet/SubletCard.js +0 -65
- package/lib/sublet/SubletImage.js +0 -59
- package/lib/sublet/SubletMessageModal.js +0 -120
- package/lib/sublet/SubletNotFound.js +0 -16
- package/lib/sublet/SubletSection.js +0 -447
- package/lib/sublet/SubletsSection.js +0 -41
- package/lib/sublet/data/Sublet.js +0 -28
- package/lib/sublet/data/SubletMessage.js +0 -6
- package/lib/sublet/services/SubletService.js +0 -52
- package/lib/summer-house/SummerHouseFeatures.js +0 -25
- package/lib/summer-house/data/SummerHouseAmenities.js +0 -8
- package/lib/team/TeamSection.js +0 -35
- package/lib/team/card/TeamCard.js +0 -38
- package/lib/team/card/TeamCardSkeleton.js +0 -25
- package/lib/team/data/TeamMember.js +0 -6
- package/lib/team/service/TeamService.js +0 -13
- package/lib/types/ga-gtag.d.js +0 -2
- package/lib/unit/card/UnitCard.js +0 -140
- package/lib/unit/data/Unit.js +0 -26
- package/lib/unit/data/UnitFilters.js +0 -6
- package/lib/unit/section/UnitHero.js +0 -234
- package/lib/unit/section/UnitPrice.js +0 -41
- package/lib/unit/section/UnitSection.js +0 -211
- package/lib/unit/section/UnitsHeader.js +0 -214
- package/lib/unit/section/UnitsSection.js +0 -87
- package/lib/unit/service/UnitService.js +0 -177
- package/lib/utils/PrettyPrintJson.js +0 -16
- package/lib/utils/Utils.js +0 -155
- package/lib/video/Video.js +0 -76
- package/lib/video/data/VideoAsset.js +0 -6
- /package/lib/heading/assets/{HeadingStory.scss → HeadingStory.css} +0 -0
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.UnitSection = void 0;
|
|
7
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
-
var _Floorplan = require("../../floorplan/data/Floorplan");
|
|
9
|
-
var _FloorplanService = require("../../floorplan/service/FloorplanService");
|
|
10
|
-
require("./assets/UnitSection.scss");
|
|
11
|
-
var _GridGallerySkeleton = require("../../gallery/GridGallerySkeleton");
|
|
12
|
-
var _Utils = require("../../utils/Utils");
|
|
13
|
-
var _Card = require("../../card/Card");
|
|
14
|
-
var _TestimonialsCard = require("../../floorplan/card/TestimonialsCard");
|
|
15
|
-
var _MapSection = require("../../map/MapSection");
|
|
16
|
-
var _SimilarFloorplanCard = require("../../floorplan/card/SimilarFloorplanCard");
|
|
17
|
-
var _muncherUi = require("@contentmunch/muncher-ui");
|
|
18
|
-
var _moment = _interopRequireDefault(require("moment"));
|
|
19
|
-
var _Property = require("../../property/data/Property");
|
|
20
|
-
var _ShortTermFloorplanSection = require("../../short-term/ShortTermFloorplanSection");
|
|
21
|
-
var _FaqsCard = require("../../faq/FaqsCard");
|
|
22
|
-
var _UnitService = require("../service/UnitService");
|
|
23
|
-
var _UnitHero = require("./UnitHero");
|
|
24
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
26
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
27
|
-
const UnitSection = _ref => {
|
|
28
|
-
var _unitFloorplan$floorp, _unitFloorplan$floorp2;
|
|
29
|
-
let {
|
|
30
|
-
contactClickHandler,
|
|
31
|
-
applyClickHandler,
|
|
32
|
-
unitId,
|
|
33
|
-
locationRef,
|
|
34
|
-
handleRefToLocation,
|
|
35
|
-
handleHtmlTitleUpdate
|
|
36
|
-
} = _ref;
|
|
37
|
-
const [unitFloorplan, setUnitFloorplan] = (0, _react.useState)({});
|
|
38
|
-
const [similarFloorplans, setSimilarFloorplans] = (0, _react.useState)([]);
|
|
39
|
-
const [floorplanVariations, setFloorplanVariations] = (0, _react.useState)([]);
|
|
40
|
-
const [testimonials, setTestimonials] = (0, _react.useState)([]);
|
|
41
|
-
const [webSpecials, setWebSpecials] = (0, _react.useState)([]);
|
|
42
|
-
const [floorplanFaqs, setFloorplanFaqs] = (0, _react.useState)([]);
|
|
43
|
-
const [isLoading, setIsLoading] = (0, _react.useState)(true);
|
|
44
|
-
const [errorLoading, setErrorLoading] = (0, _react.useState)(false);
|
|
45
|
-
const mapRef = (0, _react.useRef)(null);
|
|
46
|
-
const handleRefToMap = () => {
|
|
47
|
-
if (handleRefToLocation) handleRefToLocation();else {
|
|
48
|
-
var _mapRef$current;
|
|
49
|
-
(_mapRef$current = mapRef.current) === null || _mapRef$current === void 0 || _mapRef$current.scrollIntoView({
|
|
50
|
-
behavior: "smooth",
|
|
51
|
-
block: "start"
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
(0, _react.useEffect)(() => {
|
|
56
|
-
(0, _UnitService.getUnit)(unitId).then(unitData => {
|
|
57
|
-
setUnitFloorplan(unitData);
|
|
58
|
-
if (handleHtmlTitleUpdate) {
|
|
59
|
-
handleHtmlTitleUpdate(unitData.floorplan.htmlTitle);
|
|
60
|
-
}
|
|
61
|
-
if (_Property.LeaseType.SHORT_TERM === unitData.floorplan.property.leaseType) {
|
|
62
|
-
setIsLoading(false);
|
|
63
|
-
} else {
|
|
64
|
-
Promise.all([(0, _FloorplanService.getFloorplanVariations)(unitData.floorplan.id), (0, _FloorplanService.getSimilarFloorplans)(unitData.floorplan.id), (0, _FloorplanService.getTestimonials)(unitData.floorplan.id), (0, _FloorplanService.getWebSpecials)(unitData.floorplan.id), (0, _FloorplanService.getFloorplanFaqs)(unitData.floorplan.id)]).then(data => {
|
|
65
|
-
const today = (0, _moment.default)();
|
|
66
|
-
setFloorplanVariations(data[0]);
|
|
67
|
-
setSimilarFloorplans(data[1]);
|
|
68
|
-
setTestimonials(data[2]);
|
|
69
|
-
const validWebSpecials = [];
|
|
70
|
-
data[3].forEach(webSpecial => {
|
|
71
|
-
if ((0, _Utils.dateToMoment)(webSpecial.startDate).isBefore(today) && (0, _Utils.dateToMoment)(webSpecial.endDate).isAfter(today)) {
|
|
72
|
-
validWebSpecials.push(webSpecial);
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
setWebSpecials(validWebSpecials);
|
|
76
|
-
setFloorplanFaqs(data[4].sort((a, b) => a.sortOrder - b.sortOrder));
|
|
77
|
-
}).catch(() => {
|
|
78
|
-
setErrorLoading(true);
|
|
79
|
-
}).finally(() => {
|
|
80
|
-
setIsLoading(false);
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
}).catch(() => {
|
|
84
|
-
setErrorLoading(true);
|
|
85
|
-
setIsLoading(false);
|
|
86
|
-
});
|
|
87
|
-
}, [unitId]);
|
|
88
|
-
const availableDates = () => {
|
|
89
|
-
const sortAvailableDates = (a, b) => (0, _moment.default)(a, _FloorplanService.MONTH_YEAR_FORMAT).diff((0, _moment.default)(b, _FloorplanService.MONTH_YEAR_FORMAT));
|
|
90
|
-
const dates = new Set();
|
|
91
|
-
const today = (0, _moment.default)();
|
|
92
|
-
const tomorrow = today.add(1, "day");
|
|
93
|
-
const isAvailableNow = moveInDate => moveInDate.isBefore(tomorrow);
|
|
94
|
-
const moveInDate = (0, _Utils.dateToMoment)(unitFloorplan.moveInDate);
|
|
95
|
-
if (isAvailableNow(moveInDate)) {
|
|
96
|
-
dates.add(today.format(_FloorplanService.MONTH_YEAR_FORMAT));
|
|
97
|
-
if (unitFloorplan.availabilityExtensionMonths && unitFloorplan.availabilityExtensionMonths > 0) {
|
|
98
|
-
for (let i = 1; i <= unitFloorplan.availabilityExtensionMonths; i++) {
|
|
99
|
-
let extensionDate = (0, _moment.default)().add(i, 'month');
|
|
100
|
-
dates.add(extensionDate.format(_FloorplanService.MONTH_YEAR_FORMAT));
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
} else {
|
|
104
|
-
dates.add(moveInDate.format(_FloorplanService.MONTH_YEAR_FORMAT));
|
|
105
|
-
if (unitFloorplan.availabilityExtensionMonths && unitFloorplan.availabilityExtensionMonths > 0) {
|
|
106
|
-
for (let i = 1; i <= unitFloorplan.availabilityExtensionMonths; i++) {
|
|
107
|
-
let extensionDate = (0, _Utils.dateToMoment)(unitFloorplan.moveInDate).add(i, 'month');
|
|
108
|
-
dates.add(extensionDate.format(_FloorplanService.MONTH_YEAR_FORMAT));
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
return Array.from(dates).sort(sortAvailableDates);
|
|
113
|
-
};
|
|
114
|
-
const residentUtilityDetails = utility => utility.averageMonthlyBill ? (0, _Utils.capitalizeFirstLetter)(utility.name) + " - Avg/Mo " + (0, _Utils.toUSD)(utility.averageMonthlyBill) : (0, _Utils.capitalizeFirstLetter)(utility.name);
|
|
115
|
-
const isAverageMonthlyBillPresent = () => unitFloorplan.floorplan.utilities.filter(utility => utility.type === _Floorplan.UtilityType.RESIDENT_UTILITY).some(utility => utility.averageMonthlyBill != null);
|
|
116
|
-
const isWithinTwelveMonths = date => {
|
|
117
|
-
const current = (0, _moment.default)(date, "MMM YYYY");
|
|
118
|
-
const twelveMonthsFromNow = (0, _moment.default)().add(1, "year");
|
|
119
|
-
return current.isBefore(twelveMonthsFromNow);
|
|
120
|
-
};
|
|
121
|
-
return _Property.LeaseType.SHORT_TERM === ((_unitFloorplan$floorp = unitFloorplan.floorplan) === null || _unitFloorplan$floorp === void 0 || (_unitFloorplan$floorp = _unitFloorplan$floorp.property) === null || _unitFloorplan$floorp === void 0 ? void 0 : _unitFloorplan$floorp.leaseType) ? /*#__PURE__*/_react.default.createElement(_ShortTermFloorplanSection.ShortTermFloorplanSection, {
|
|
122
|
-
contactClickHandler: contactClickHandler,
|
|
123
|
-
applyClickHandler: applyClickHandler,
|
|
124
|
-
floorplanId: unitId
|
|
125
|
-
}) : /*#__PURE__*/_react.default.createElement("section", {
|
|
126
|
-
className: "section-unit"
|
|
127
|
-
}, isLoading ? /*#__PURE__*/_react.default.createElement("section", {
|
|
128
|
-
className: "section-floorplan--hero"
|
|
129
|
-
}, /*#__PURE__*/_react.default.createElement(_GridGallerySkeleton.GridGallerySkeleton, null)) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, errorLoading ? /*#__PURE__*/_react.default.createElement("section", {
|
|
130
|
-
className: "div-full--center"
|
|
131
|
-
}, /*#__PURE__*/_react.default.createElement("h2", null, "Uh-oh, this is a 404")) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_UnitHero.UnitHero, {
|
|
132
|
-
unit: unitFloorplan,
|
|
133
|
-
contactClickHandler: contactClickHandler,
|
|
134
|
-
webSpecials: webSpecials,
|
|
135
|
-
applyClickHandler: applyClickHandler,
|
|
136
|
-
handleRefToMap: handleRefToMap
|
|
137
|
-
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
138
|
-
className: "container"
|
|
139
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
140
|
-
className: "unit--cards"
|
|
141
|
-
}, /*#__PURE__*/_react.default.createElement(_Card.Card, {
|
|
142
|
-
title: "Details"
|
|
143
|
-
}, /*#__PURE__*/_react.default.createElement("p", {
|
|
144
|
-
className: "unit-card--featured"
|
|
145
|
-
}, unitFloorplan.floorplan.bedroom, " Bedroom | ", unitFloorplan.floorplan.bathroom, " Bathroom ", (0, _Utils.enumToString)(unitFloorplan.floorplan.style)), /*#__PURE__*/_react.default.createElement("p", {
|
|
146
|
-
className: "unit-card--featured"
|
|
147
|
-
}, "$", unitFloorplan.squareFoot, " Square Feet"), /*#__PURE__*/_react.default.createElement("p", {
|
|
148
|
-
className: "unit-card--featured"
|
|
149
|
-
}, "$", unitFloorplan.rent, " /mo"), /*#__PURE__*/_react.default.createElement("p", {
|
|
150
|
-
className: "unit-card--featured"
|
|
151
|
-
}, "$", unitFloorplan.deposit, " Security Deposit"), /*#__PURE__*/_react.default.createElement("p", null, unitFloorplan.floorplan.description)), unitFloorplan.floorplan.amenities.length > 0 ? /*#__PURE__*/_react.default.createElement(_Card.Card, {
|
|
152
|
-
title: "Amenities"
|
|
153
|
-
}, /*#__PURE__*/_react.default.createElement(_muncherUi.Ul, null, unitFloorplan.floorplan.amenities.filter(amenity => amenity.featured).map(amenity => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
|
|
154
|
-
key: "unitFloorplan-amenity-" + amenity.id,
|
|
155
|
-
bulletIcon: "star",
|
|
156
|
-
isFeatured: true
|
|
157
|
-
}, amenity.name)), unitFloorplan.floorplan.amenities.filter(amenity => !amenity.featured).map(amenity => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
|
|
158
|
-
key: "unitFloorplan-amenity-" + amenity.id,
|
|
159
|
-
bulletIcon: "dot"
|
|
160
|
-
}, amenity.name))), floorplanVariations.length > 0 ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h5", null, "Variations"), /*#__PURE__*/_react.default.createElement(_muncherUi.Ul, null, floorplanVariations.map((variation, i) => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
|
|
161
|
-
key: "unitFloorplan-variation-" + i
|
|
162
|
-
}, variation.variation)))) : "") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), testimonials.length > 0 ? /*#__PURE__*/_react.default.createElement(_TestimonialsCard.TestimonialsCard, {
|
|
163
|
-
testimonials: testimonials
|
|
164
|
-
}) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), /*#__PURE__*/_react.default.createElement(_Card.Card, {
|
|
165
|
-
title: "Pets"
|
|
166
|
-
}, /*#__PURE__*/_react.default.createElement("h5", null, "Permitted"), /*#__PURE__*/_react.default.createElement(_muncherUi.Ul, null, (0, _UnitService.permittedPets)(unitFloorplan).map((pet, i) => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
|
|
167
|
-
key: "unitFloorplan-permitted-pet-" + i,
|
|
168
|
-
bulletIcon: "check",
|
|
169
|
-
bulletColor: "green"
|
|
170
|
-
}, pet))), (0, _UnitService.notPermittedPets)(unitFloorplan).length > 0 ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h5", null, "Not Permitted"), /*#__PURE__*/_react.default.createElement(_muncherUi.Ul, null, (0, _UnitService.notPermittedPets)(unitFloorplan).map((pet, i) => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
|
|
171
|
-
key: "unitFloorplan-not-permitted-pet-" + i,
|
|
172
|
-
bulletColor: "brown",
|
|
173
|
-
bulletIcon: "close"
|
|
174
|
-
}, pet)))) : "", unitFloorplan.petPolicy ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h5", null, "Additional Information"), /*#__PURE__*/_react.default.createElement("p", null, unitFloorplan.petPolicy)) : ""), /*#__PURE__*/_react.default.createElement(_Card.Card, {
|
|
175
|
-
title: "Availability"
|
|
176
|
-
}, /*#__PURE__*/_react.default.createElement(_muncherUi.Ul, null, availableDates().filter(availableDate => isWithinTwelveMonths(availableDate)).map(availableDate => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
|
|
177
|
-
key: "unitFloorplan-unit-availability-" + availableDate,
|
|
178
|
-
bulletIcon: "calendar"
|
|
179
|
-
}, "Available in ", /*#__PURE__*/_react.default.createElement("strong", null, (0, _Utils.capitalizeFirstLetter)(availableDate)))))), /*#__PURE__*/_react.default.createElement(_Card.Card, {
|
|
180
|
-
title: "Utilities"
|
|
181
|
-
}, /*#__PURE__*/_react.default.createElement("h5", null, "Paid By Landlord"), /*#__PURE__*/_react.default.createElement(_muncherUi.Ul, null, unitFloorplan.floorplan.utilities.filter(utility => utility.type === _Floorplan.UtilityType.INCLUDED_UTILITY).map(utility => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
|
|
182
|
-
key: "unitFloorplan-included-utility-" + utility.id,
|
|
183
|
-
bulletIcon: "home"
|
|
184
|
-
}, (0, _Utils.capitalizeFirstLetter)(utility.name)))), /*#__PURE__*/_react.default.createElement("h5", null, "Paid By Resident"), /*#__PURE__*/_react.default.createElement(_muncherUi.Ul, null, unitFloorplan.floorplan.utilities.filter(utility => utility.type === _Floorplan.UtilityType.RESIDENT_UTILITY).map(utility => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
|
|
185
|
-
key: "unitFloorplan-resident-utility-" + utility.id,
|
|
186
|
-
bulletIcon: "dollar"
|
|
187
|
-
}, residentUtilityDetails(utility)))), isAverageMonthlyBillPresent() ? /*#__PURE__*/_react.default.createElement("p", null, /*#__PURE__*/_react.default.createElement("i", null, "**Average utilities shown above are an estimate. Actual monthly utility costs can vary significantly based on individual usage, time of year, the weather, and other factors")) : ""), similarFloorplans.length > 0 ? /*#__PURE__*/_react.default.createElement(_SimilarFloorplanCard.SimilarFloorplanCard, {
|
|
188
|
-
similarFloorplans: similarFloorplans
|
|
189
|
-
}) : "", floorplanFaqs.length > 0 ? /*#__PURE__*/_react.default.createElement(_FaqsCard.FaqsCard, {
|
|
190
|
-
faqs: floorplanFaqs,
|
|
191
|
-
title: "Frequently Asked Questions"
|
|
192
|
-
}) : "", /*#__PURE__*/_react.default.createElement("div", {
|
|
193
|
-
className: "contact-card"
|
|
194
|
-
}, /*#__PURE__*/_react.default.createElement(_Card.Card, {
|
|
195
|
-
featured: true
|
|
196
|
-
}, /*#__PURE__*/_react.default.createElement("p", null, /*#__PURE__*/_react.default.createElement("i", null, "Questions?")), /*#__PURE__*/_react.default.createElement("p", null, /*#__PURE__*/_react.default.createElement("i", null, "Call or text us anytime:")), (_unitFloorplan$floorp2 = unitFloorplan.floorplan.property) !== null && _unitFloorplan$floorp2 !== void 0 && _unitFloorplan$floorp2.phone ? /*#__PURE__*/_react.default.createElement("p", null, /*#__PURE__*/_react.default.createElement("a", {
|
|
197
|
-
href: "tel:" + unitFloorplan.floorplan.property.phone
|
|
198
|
-
}, (0, _Utils.formatPhoneNumber)(unitFloorplan.floorplan.property.phone))) : "", /*#__PURE__*/_react.default.createElement(_muncherUi.Button, {
|
|
199
|
-
variant: "tertiary",
|
|
200
|
-
onClick: contactClickHandler,
|
|
201
|
-
size: "large"
|
|
202
|
-
}, "Contact Us \xBB")))), /*#__PURE__*/_react.default.createElement(_Card.Card, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
203
|
-
ref: locationRef ? locationRef : mapRef,
|
|
204
|
-
id: "location",
|
|
205
|
-
className: "reference"
|
|
206
|
-
}), /*#__PURE__*/_react.default.createElement(_MapSection.MapSection, {
|
|
207
|
-
src: (0, _Utils.floorplanAddressToGoogleMap)((0, _UnitService.addressFromUnit)(unitFloorplan))
|
|
208
|
-
}))))));
|
|
209
|
-
};
|
|
210
|
-
exports.UnitSection = UnitSection;
|
|
211
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfRmxvb3JwbGFuIiwiX0Zsb29ycGxhblNlcnZpY2UiLCJfR3JpZEdhbGxlcnlTa2VsZXRvbiIsIl9VdGlscyIsIl9DYXJkIiwiX1Rlc3RpbW9uaWFsc0NhcmQiLCJfTWFwU2VjdGlvbiIsIl9TaW1pbGFyRmxvb3JwbGFuQ2FyZCIsIl9tdW5jaGVyVWkiLCJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9Qcm9wZXJ0eSIsIl9TaG9ydFRlcm1GbG9vcnBsYW5TZWN0aW9uIiwiX0ZhcXNDYXJkIiwiX1VuaXRTZXJ2aWNlIiwiX1VuaXRIZXJvIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiVW5pdFNlY3Rpb24iLCJfcmVmIiwiX3VuaXRGbG9vcnBsYW4kZmxvb3JwIiwiX3VuaXRGbG9vcnBsYW4kZmxvb3JwMiIsImNvbnRhY3RDbGlja0hhbmRsZXIiLCJhcHBseUNsaWNrSGFuZGxlciIsInVuaXRJZCIsImxvY2F0aW9uUmVmIiwiaGFuZGxlUmVmVG9Mb2NhdGlvbiIsImhhbmRsZUh0bWxUaXRsZVVwZGF0ZSIsInVuaXRGbG9vcnBsYW4iLCJzZXRVbml0Rmxvb3JwbGFuIiwidXNlU3RhdGUiLCJzaW1pbGFyRmxvb3JwbGFucyIsInNldFNpbWlsYXJGbG9vcnBsYW5zIiwiZmxvb3JwbGFuVmFyaWF0aW9ucyIsInNldEZsb29ycGxhblZhcmlhdGlvbnMiLCJ0ZXN0aW1vbmlhbHMiLCJzZXRUZXN0aW1vbmlhbHMiLCJ3ZWJTcGVjaWFscyIsInNldFdlYlNwZWNpYWxzIiwiZmxvb3JwbGFuRmFxcyIsInNldEZsb29ycGxhbkZhcXMiLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJlcnJvckxvYWRpbmciLCJzZXRFcnJvckxvYWRpbmciLCJtYXBSZWYiLCJ1c2VSZWYiLCJoYW5kbGVSZWZUb01hcCIsIl9tYXBSZWYkY3VycmVudCIsImN1cnJlbnQiLCJzY3JvbGxJbnRvVmlldyIsImJlaGF2aW9yIiwiYmxvY2siLCJ1c2VFZmZlY3QiLCJnZXRVbml0IiwidGhlbiIsInVuaXREYXRhIiwiZmxvb3JwbGFuIiwiaHRtbFRpdGxlIiwiTGVhc2VUeXBlIiwiU0hPUlRfVEVSTSIsInByb3BlcnR5IiwibGVhc2VUeXBlIiwiUHJvbWlzZSIsImFsbCIsImdldEZsb29ycGxhblZhcmlhdGlvbnMiLCJpZCIsImdldFNpbWlsYXJGbG9vcnBsYW5zIiwiZ2V0VGVzdGltb25pYWxzIiwiZ2V0V2ViU3BlY2lhbHMiLCJnZXRGbG9vcnBsYW5GYXFzIiwiZGF0YSIsInRvZGF5IiwibW9tZW50IiwidmFsaWRXZWJTcGVjaWFscyIsImZvckVhY2giLCJ3ZWJTcGVjaWFsIiwiZGF0ZVRvTW9tZW50Iiwic3RhcnREYXRlIiwiaXNCZWZvcmUiLCJlbmREYXRlIiwiaXNBZnRlciIsInB1c2giLCJzb3J0IiwiYiIsInNvcnRPcmRlciIsImNhdGNoIiwiZmluYWxseSIsImF2YWlsYWJsZURhdGVzIiwic29ydEF2YWlsYWJsZURhdGVzIiwiTU9OVEhfWUVBUl9GT1JNQVQiLCJkaWZmIiwiZGF0ZXMiLCJTZXQiLCJ0b21vcnJvdyIsImFkZCIsImlzQXZhaWxhYmxlTm93IiwibW92ZUluRGF0ZSIsImZvcm1hdCIsImF2YWlsYWJpbGl0eUV4dGVuc2lvbk1vbnRocyIsImV4dGVuc2lvbkRhdGUiLCJBcnJheSIsImZyb20iLCJyZXNpZGVudFV0aWxpdHlEZXRhaWxzIiwidXRpbGl0eSIsImF2ZXJhZ2VNb250aGx5QmlsbCIsImNhcGl0YWxpemVGaXJzdExldHRlciIsIm5hbWUiLCJ0b1VTRCIsImlzQXZlcmFnZU1vbnRobHlCaWxsUHJlc2VudCIsInV0aWxpdGllcyIsImZpbHRlciIsInR5cGUiLCJVdGlsaXR5VHlwZSIsIlJFU0lERU5UX1VUSUxJVFkiLCJzb21lIiwiaXNXaXRoaW5Ud2VsdmVNb250aHMiLCJkYXRlIiwidHdlbHZlTW9udGhzRnJvbU5vdyIsImNyZWF0ZUVsZW1lbnQiLCJTaG9ydFRlcm1GbG9vcnBsYW5TZWN0aW9uIiwiZmxvb3JwbGFuSWQiLCJjbGFzc05hbWUiLCJHcmlkR2FsbGVyeVNrZWxldG9uIiwiRnJhZ21lbnQiLCJVbml0SGVybyIsInVuaXQiLCJDYXJkIiwidGl0bGUiLCJiZWRyb29tIiwiYmF0aHJvb20iLCJlbnVtVG9TdHJpbmciLCJzdHlsZSIsInNxdWFyZUZvb3QiLCJyZW50IiwiZGVwb3NpdCIsImRlc2NyaXB0aW9uIiwiYW1lbml0aWVzIiwibGVuZ3RoIiwiVWwiLCJhbWVuaXR5IiwiZmVhdHVyZWQiLCJtYXAiLCJMaSIsImtleSIsImJ1bGxldEljb24iLCJpc0ZlYXR1cmVkIiwidmFyaWF0aW9uIiwiVGVzdGltb25pYWxzQ2FyZCIsInBlcm1pdHRlZFBldHMiLCJwZXQiLCJidWxsZXRDb2xvciIsIm5vdFBlcm1pdHRlZFBldHMiLCJwZXRQb2xpY3kiLCJhdmFpbGFibGVEYXRlIiwiSU5DTFVERURfVVRJTElUWSIsIlNpbWlsYXJGbG9vcnBsYW5DYXJkIiwiRmFxc0NhcmQiLCJmYXFzIiwicGhvbmUiLCJocmVmIiwiZm9ybWF0UGhvbmVOdW1iZXIiLCJCdXR0b24iLCJ2YXJpYW50Iiwib25DbGljayIsInNpemUiLCJyZWYiLCJNYXBTZWN0aW9uIiwic3JjIiwiZmxvb3JwbGFuQWRkcmVzc1RvR29vZ2xlTWFwIiwiYWRkcmVzc0Zyb21Vbml0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91bml0L3NlY3Rpb24vVW5pdFNlY3Rpb24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICAgIEZsb29ycGxhbkZhcSxcbiAgICBGbG9vcnBsYW5WYXJpYXRpb24sXG4gICAgU2ltaWxhckZsb29ycGxhbixcbiAgICBUZXN0aW1vbmlhbCxcbiAgICBVdGlsaXR5TmFtZSxcbiAgICBVdGlsaXR5VHlwZSxcbiAgICBXZWJTcGVjaWFsXG59IGZyb20gXCIuLi8uLi9mbG9vcnBsYW4vZGF0YS9GbG9vcnBsYW5cIjtcbmltcG9ydCB7XG4gICAgZ2V0Rmxvb3JwbGFuRmFxcyxcbiAgICBnZXRGbG9vcnBsYW5WYXJpYXRpb25zLFxuICAgIGdldFNpbWlsYXJGbG9vcnBsYW5zLFxuICAgIGdldFRlc3RpbW9uaWFscyxcbiAgICBnZXRXZWJTcGVjaWFscyxcbiAgICBNT05USF9ZRUFSX0ZPUk1BVFxufSBmcm9tIFwiLi4vLi4vZmxvb3JwbGFuL3NlcnZpY2UvRmxvb3JwbGFuU2VydmljZVwiO1xuaW1wb3J0IFwiLi9hc3NldHMvVW5pdFNlY3Rpb24uc2Nzc1wiO1xuaW1wb3J0IHtHcmlkR2FsbGVyeVNrZWxldG9ufSBmcm9tIFwiLi4vLi4vZ2FsbGVyeS9HcmlkR2FsbGVyeVNrZWxldG9uXCI7XG5pbXBvcnQge1xuICAgIGNhcGl0YWxpemVGaXJzdExldHRlcixcbiAgICBkYXRlVG9Nb21lbnQsXG4gICAgZW51bVRvU3RyaW5nLFxuICAgIGZsb29ycGxhbkFkZHJlc3NUb0dvb2dsZU1hcCxcbiAgICBmb3JtYXRQaG9uZU51bWJlcixcbiAgICB0b1VTRFxufSBmcm9tIFwiLi4vLi4vdXRpbHMvVXRpbHNcIjtcbmltcG9ydCB7Q2FyZH0gZnJvbSBcIi4uLy4uL2NhcmQvQ2FyZFwiO1xuaW1wb3J0IHtUZXN0aW1vbmlhbHNDYXJkfSBmcm9tIFwiLi4vLi4vZmxvb3JwbGFuL2NhcmQvVGVzdGltb25pYWxzQ2FyZFwiO1xuaW1wb3J0IHtNYXBTZWN0aW9ufSBmcm9tIFwiLi4vLi4vbWFwL01hcFNlY3Rpb25cIjtcbmltcG9ydCB7U2ltaWxhckZsb29ycGxhbkNhcmR9IGZyb20gXCIuLi8uLi9mbG9vcnBsYW4vY2FyZC9TaW1pbGFyRmxvb3JwbGFuQ2FyZFwiO1xuaW1wb3J0IHtCdXR0b24sIExpLCBVbH0gZnJvbSBcIkBjb250ZW50bXVuY2gvbXVuY2hlci11aVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQge0xlYXNlVHlwZX0gZnJvbSBcIi4uLy4uL3Byb3BlcnR5L2RhdGEvUHJvcGVydHlcIjtcbmltcG9ydCB7U2hvcnRUZXJtRmxvb3JwbGFuU2VjdGlvbn0gZnJvbSBcIi4uLy4uL3Nob3J0LXRlcm0vU2hvcnRUZXJtRmxvb3JwbGFuU2VjdGlvblwiO1xuaW1wb3J0IHtGYXFzQ2FyZH0gZnJvbSBcIi4uLy4uL2ZhcS9GYXFzQ2FyZFwiO1xuaW1wb3J0IHthZGRyZXNzRnJvbVVuaXQsIGdldFVuaXQsIG5vdFBlcm1pdHRlZFBldHMsIHBlcm1pdHRlZFBldHN9IGZyb20gXCIuLi9zZXJ2aWNlL1VuaXRTZXJ2aWNlXCI7XG5pbXBvcnQge1VuaXRGbG9vcnBsYW59IGZyb20gXCIuLi9kYXRhL1VuaXRcIjtcbmltcG9ydCB7VW5pdEhlcm99IGZyb20gXCIuL1VuaXRIZXJvXCI7XG5cbmV4cG9ydCBjb25zdCBVbml0U2VjdGlvbjogUmVhY3QuRkM8VW5pdFNlY3Rpb25Qcm9wcz4gPSAoXG4gICAge1xuICAgICAgICBjb250YWN0Q2xpY2tIYW5kbGVyLFxuICAgICAgICBhcHBseUNsaWNrSGFuZGxlcixcbiAgICAgICAgdW5pdElkLFxuICAgICAgICBsb2NhdGlvblJlZixcbiAgICAgICAgaGFuZGxlUmVmVG9Mb2NhdGlvbixcbiAgICAgICAgaGFuZGxlSHRtbFRpdGxlVXBkYXRlXG4gICAgfSkgPT4ge1xuICAgIGNvbnN0IFt1bml0Rmxvb3JwbGFuLCBzZXRVbml0Rmxvb3JwbGFuXSA9IHVzZVN0YXRlPFVuaXRGbG9vcnBsYW4+KHt9IGFzIFVuaXRGbG9vcnBsYW4pO1xuICAgIGNvbnN0IFtzaW1pbGFyRmxvb3JwbGFucywgc2V0U2ltaWxhckZsb29ycGxhbnNdID0gdXNlU3RhdGU8U2ltaWxhckZsb29ycGxhbltdPihbXSk7XG4gICAgY29uc3QgW2Zsb29ycGxhblZhcmlhdGlvbnMsIHNldEZsb29ycGxhblZhcmlhdGlvbnNdID0gdXNlU3RhdGU8Rmxvb3JwbGFuVmFyaWF0aW9uW10+KFtdKTtcbiAgICBjb25zdCBbdGVzdGltb25pYWxzLCBzZXRUZXN0aW1vbmlhbHNdID0gdXNlU3RhdGU8VGVzdGltb25pYWxbXT4oW10pO1xuICAgIGNvbnN0IFt3ZWJTcGVjaWFscywgc2V0V2ViU3BlY2lhbHNdID0gdXNlU3RhdGU8V2ViU3BlY2lhbFtdPihbXSk7XG4gICAgY29uc3QgW2Zsb29ycGxhbkZhcXMsIHNldEZsb29ycGxhbkZhcXNdID0gdXNlU3RhdGU8Rmxvb3JwbGFuRmFxW10+KFtdKTtcblxuICAgIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgICBjb25zdCBbZXJyb3JMb2FkaW5nLCBzZXRFcnJvckxvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgY29uc3QgbWFwUmVmOiBSZWFjdC5SZWY8SFRNTERpdkVsZW1lbnQ+ID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgICBjb25zdCBoYW5kbGVSZWZUb01hcCA9ICgpID0+IHtcbiAgICAgICAgaWYgKGhhbmRsZVJlZlRvTG9jYXRpb24pXG4gICAgICAgICAgICBoYW5kbGVSZWZUb0xvY2F0aW9uKCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbWFwUmVmLmN1cnJlbnQ/LnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICAgICAgICBiZWhhdmlvcjogXCJzbW9vdGhcIixcbiAgICAgICAgICAgICAgICBibG9jazogXCJzdGFydFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZ2V0VW5pdCh1bml0SWQpLnRoZW4odW5pdERhdGEgPT4ge1xuICAgICAgICAgICAgc2V0VW5pdEZsb29ycGxhbih1bml0RGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChoYW5kbGVIdG1sVGl0bGVVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVIdG1sVGl0bGVVcGRhdGUodW5pdERhdGEuZmxvb3JwbGFuLmh0bWxUaXRsZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChMZWFzZVR5cGUuU0hPUlRfVEVSTSA9PT0gdW5pdERhdGEuZmxvb3JwbGFuLnByb3BlcnR5LmxlYXNlVHlwZSkge1xuICAgICAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgZ2V0Rmxvb3JwbGFuVmFyaWF0aW9ucyh1bml0RGF0YS5mbG9vcnBsYW4uaWQpLFxuICAgICAgICAgICAgICAgICAgICBnZXRTaW1pbGFyRmxvb3JwbGFucyh1bml0RGF0YS5mbG9vcnBsYW4uaWQpLFxuICAgICAgICAgICAgICAgICAgICBnZXRUZXN0aW1vbmlhbHModW5pdERhdGEuZmxvb3JwbGFuLmlkKSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0V2ViU3BlY2lhbHModW5pdERhdGEuZmxvb3JwbGFuLmlkKSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0Rmxvb3JwbGFuRmFxcyh1bml0RGF0YS5mbG9vcnBsYW4uaWQpLFxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2RheSA9IG1vbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rmxvb3JwbGFuVmFyaWF0aW9ucyhkYXRhWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNpbWlsYXJGbG9vcnBsYW5zKGRhdGFbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGVzdGltb25pYWxzKGRhdGFbMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRXZWJTcGVjaWFsczogV2ViU3BlY2lhbFtdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzNdLmZvckVhY2god2ViU3BlY2lhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGVUb01vbWVudCh3ZWJTcGVjaWFsLnN0YXJ0RGF0ZSkuaXNCZWZvcmUodG9kYXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVUb01vbWVudCh3ZWJTcGVjaWFsLmVuZERhdGUpLmlzQWZ0ZXIodG9kYXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkV2ViU3BlY2lhbHMucHVzaCh3ZWJTcGVjaWFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFdlYlNwZWNpYWxzKHZhbGlkV2ViU3BlY2lhbHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rmxvb3JwbGFuRmFxcyhkYXRhWzRdLnNvcnQoKGEsIGIpID0+IGEuc29ydE9yZGVyIC0gYi5zb3J0T3JkZXIpKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yTG9hZGluZyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIHNldEVycm9yTG9hZGluZyh0cnVlKTtcbiAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSwgW3VuaXRJZF0pO1xuXG4gICAgY29uc3QgYXZhaWxhYmxlRGF0ZXMgPSAoKTogc3RyaW5nW10gPT4ge1xuICAgICAgICBjb25zdCBzb3J0QXZhaWxhYmxlRGF0ZXMgPSAoYTogc3RyaW5nLCBiOiBzdHJpbmcpID0+IG1vbWVudChhLCBNT05USF9ZRUFSX0ZPUk1BVCkuZGlmZihtb21lbnQoYiwgTU9OVEhfWUVBUl9GT1JNQVQpKTtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgY29uc3QgdG9kYXkgPSBtb21lbnQoKTtcblxuICAgICAgICBjb25zdCB0b21vcnJvdyA9IHRvZGF5LmFkZCgxLCBcImRheVwiKTtcbiAgICAgICAgY29uc3QgaXNBdmFpbGFibGVOb3cgPSAobW92ZUluRGF0ZTogbW9tZW50Lk1vbWVudCkgPT4gbW92ZUluRGF0ZS5pc0JlZm9yZSh0b21vcnJvdyk7XG5cblxuICAgICAgICBjb25zdCBtb3ZlSW5EYXRlID0gZGF0ZVRvTW9tZW50KHVuaXRGbG9vcnBsYW4ubW92ZUluRGF0ZSk7XG4gICAgICAgIGlmIChpc0F2YWlsYWJsZU5vdyhtb3ZlSW5EYXRlKSkge1xuICAgICAgICAgICAgZGF0ZXMuYWRkKHRvZGF5LmZvcm1hdChNT05USF9ZRUFSX0ZPUk1BVCkpO1xuICAgICAgICAgICAgaWYgKHVuaXRGbG9vcnBsYW4uYXZhaWxhYmlsaXR5RXh0ZW5zaW9uTW9udGhzICYmIHVuaXRGbG9vcnBsYW4uYXZhaWxhYmlsaXR5RXh0ZW5zaW9uTW9udGhzID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHVuaXRGbG9vcnBsYW4uYXZhaWxhYmlsaXR5RXh0ZW5zaW9uTW9udGhzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4dGVuc2lvbkRhdGUgPSBtb21lbnQoKS5hZGQoaSwgJ21vbnRoJyk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVzLmFkZChleHRlbnNpb25EYXRlLmZvcm1hdChNT05USF9ZRUFSX0ZPUk1BVCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGVzLmFkZChtb3ZlSW5EYXRlLmZvcm1hdChNT05USF9ZRUFSX0ZPUk1BVCkpO1xuICAgICAgICAgICAgaWYgKHVuaXRGbG9vcnBsYW4uYXZhaWxhYmlsaXR5RXh0ZW5zaW9uTW9udGhzICYmIHVuaXRGbG9vcnBsYW4uYXZhaWxhYmlsaXR5RXh0ZW5zaW9uTW9udGhzID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHVuaXRGbG9vcnBsYW4uYXZhaWxhYmlsaXR5RXh0ZW5zaW9uTW9udGhzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4dGVuc2lvbkRhdGUgPSBkYXRlVG9Nb21lbnQodW5pdEZsb29ycGxhbi5tb3ZlSW5EYXRlKS5hZGQoaSwgJ21vbnRoJyk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVzLmFkZChleHRlbnNpb25EYXRlLmZvcm1hdChNT05USF9ZRUFSX0ZPUk1BVCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZGF0ZXMpLnNvcnQoc29ydEF2YWlsYWJsZURhdGVzKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNpZGVudFV0aWxpdHlEZXRhaWxzID0gKHV0aWxpdHk6IFV0aWxpdHlOYW1lKSA9PlxuICAgICAgICB1dGlsaXR5LmF2ZXJhZ2VNb250aGx5QmlsbCA/XG4gICAgICAgICAgICBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodXRpbGl0eS5uYW1lKSArIFwiIC0gQXZnL01vIFwiICsgdG9VU0QodXRpbGl0eS5hdmVyYWdlTW9udGhseUJpbGwpXG4gICAgICAgICAgICA6IGNhcGl0YWxpemVGaXJzdExldHRlcih1dGlsaXR5Lm5hbWUpO1xuXG4gICAgY29uc3QgaXNBdmVyYWdlTW9udGhseUJpbGxQcmVzZW50ID0gKCkgPT4gdW5pdEZsb29ycGxhbi5mbG9vcnBsYW4udXRpbGl0aWVzLmZpbHRlcih1dGlsaXR5ID0+IHV0aWxpdHkudHlwZSA9PT0gVXRpbGl0eVR5cGUuUkVTSURFTlRfVVRJTElUWSkuc29tZSh1dGlsaXR5ID0+IHV0aWxpdHkuYXZlcmFnZU1vbnRobHlCaWxsICE9IG51bGwpO1xuXG5cbiAgICBjb25zdCBpc1dpdGhpblR3ZWx2ZU1vbnRocyA9IChkYXRlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IG1vbWVudChkYXRlLCBcIk1NTSBZWVlZXCIpO1xuICAgICAgICBjb25zdCB0d2VsdmVNb250aHNGcm9tTm93ID0gbW9tZW50KCkuYWRkKDEsIFwieWVhclwiKTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQuaXNCZWZvcmUodHdlbHZlTW9udGhzRnJvbU5vdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcblxuICAgICAgICBMZWFzZVR5cGUuU0hPUlRfVEVSTSA9PT0gdW5pdEZsb29ycGxhbi5mbG9vcnBsYW4/LnByb3BlcnR5Py5sZWFzZVR5cGUgP1xuICAgICAgICAgICAgPFNob3J0VGVybUZsb29ycGxhblNlY3Rpb24gY29udGFjdENsaWNrSGFuZGxlcj17Y29udGFjdENsaWNrSGFuZGxlcn0gYXBwbHlDbGlja0hhbmRsZXI9e2FwcGx5Q2xpY2tIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvb3JwbGFuSWQ9e3VuaXRJZH0vPiA6XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJzZWN0aW9uLXVuaXRcIj5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZyA/IDxzZWN0aW9uIGNsYXNzTmFtZT1cInNlY3Rpb24tZmxvb3JwbGFuLS1oZXJvXCI+PEdyaWRHYWxsZXJ5U2tlbGV0b24vPjwvc2VjdGlvbj4gOiA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge2Vycm9yTG9hZGluZyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwiZGl2LWZ1bGwtLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+VWgtb2gsIHRoaXMgaXMgYSA0MDQ8L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxVbml0SGVybyB1bml0PXt1bml0Rmxvb3JwbGFufSBjb250YWN0Q2xpY2tIYW5kbGVyPXtjb250YWN0Q2xpY2tIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViU3BlY2lhbHM9e3dlYlNwZWNpYWxzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlDbGlja0hhbmRsZXI9e2FwcGx5Q2xpY2tIYW5kbGVyfSBoYW5kbGVSZWZUb01hcD17aGFuZGxlUmVmVG9NYXB9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidW5pdC0tY2FyZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2FyZCB0aXRsZT1cIkRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidW5pdC1jYXJkLS1mZWF0dXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3VuaXRGbG9vcnBsYW4uZmxvb3JwbGFuLmJlZHJvb219IEJlZHJvb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwge3VuaXRGbG9vcnBsYW4uZmxvb3JwbGFuLmJhdGhyb29tfSBCYXRocm9vbSB7ZW51bVRvU3RyaW5nKHVuaXRGbG9vcnBsYW4uZmxvb3JwbGFuLnN0eWxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInVuaXQtY2FyZC0tZmVhdHVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dW5pdEZsb29ycGxhbi5zcXVhcmVGb290fSBTcXVhcmUgRmVldFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInVuaXQtY2FyZC0tZmVhdHVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dW5pdEZsb29ycGxhbi5yZW50fSAvbW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ1bml0LWNhcmQtLWZlYXR1cmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3VuaXRGbG9vcnBsYW4uZGVwb3NpdH0gU2VjdXJpdHkgRGVwb3NpdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3VuaXRGbG9vcnBsYW4uZmxvb3JwbGFuLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9DYXJkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdEZsb29ycGxhbi5mbG9vcnBsYW4uYW1lbml0aWVzLmxlbmd0aCA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENhcmQgdGl0bGU9XCJBbWVuaXRpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRGbG9vcnBsYW4uZmxvb3JwbGFuLmFtZW5pdGllcy5maWx0ZXIoYW1lbml0eSA9PiBhbWVuaXR5LmZlYXR1cmVkKS5tYXAoYW1lbml0eSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaSBrZXk9e1widW5pdEZsb29ycGxhbi1hbWVuaXR5LVwiICsgYW1lbml0eS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVsbGV0SWNvbj1cInN0YXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZlYXR1cmVkPXt0cnVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FtZW5pdHkubmFtZX1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0Rmxvb3JwbGFuLmZsb29ycGxhbi5hbWVuaXRpZXMuZmlsdGVyKGFtZW5pdHkgPT4gIWFtZW5pdHkuZmVhdHVyZWQpLm1hcChhbWVuaXR5ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpIGtleT17XCJ1bml0Rmxvb3JwbGFuLWFtZW5pdHktXCIgKyBhbWVuaXR5LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWxsZXRJY29uPVwiZG90XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthbWVuaXR5Lm5hbWV9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9VbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb29ycGxhblZhcmlhdGlvbnMubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT5WYXJpYXRpb25zPC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb29ycGxhblZhcmlhdGlvbnMubWFwKCh2YXJpYXRpb24sIGkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpIGtleT17XCJ1bml0Rmxvb3JwbGFuLXZhcmlhdGlvbi1cIiArIGl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dmFyaWF0aW9uLnZhcmlhdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9VbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDogXCJcIn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9DYXJkPiA6IDw+PC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0aW1vbmlhbHMubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGVzdGltb25pYWxzQ2FyZCB0ZXN0aW1vbmlhbHM9e3Rlc3RpbW9uaWFsc30vPiA6IDw+PC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2FyZCB0aXRsZT1cIlBldHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1PlBlcm1pdHRlZDwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxVbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXR0ZWRQZXRzKHVuaXRGbG9vcnBsYW4pLm1hcCgocGV0LCBpKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGkga2V5PXtcInVuaXRGbG9vcnBsYW4tcGVybWl0dGVkLXBldC1cIiArIGl9IGJ1bGxldEljb249XCJjaGVja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWxsZXRDb2xvcj1cImdyZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGV0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9VbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge25vdFBlcm1pdHRlZFBldHModW5pdEZsb29ycGxhbikubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PjxoNT5Ob3QgUGVybWl0dGVkPC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdFBlcm1pdHRlZFBldHModW5pdEZsb29ycGxhbikubWFwKChwZXQsIGkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpIGtleT17XCJ1bml0Rmxvb3JwbGFuLW5vdC1wZXJtaXR0ZWQtcGV0LVwiICsgaX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVsbGV0Q29sb3I9XCJicm93blwiIGJ1bGxldEljb249XCJjbG9zZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGV0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDogXCJcIn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0Rmxvb3JwbGFuLnBldFBvbGljeSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1PkFkZGl0aW9uYWwgSW5mb3JtYXRpb248L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57dW5pdEZsb29ycGxhbi5wZXRQb2xpY3l9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6IFwiXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NhcmQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2FyZCB0aXRsZT1cIkF2YWlsYWJpbGl0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlRGF0ZXMoKS5maWx0ZXIoYXZhaWxhYmxlRGF0ZSA9PiBpc1dpdGhpblR3ZWx2ZU1vbnRocyhhdmFpbGFibGVEYXRlKSkubWFwKGF2YWlsYWJsZURhdGUgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpIGtleT17XCJ1bml0Rmxvb3JwbGFuLXVuaXQtYXZhaWxhYmlsaXR5LVwiICsgYXZhaWxhYmxlRGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bGxldEljb249XCJjYWxlbmRhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiA8c3Ryb25nPntjYXBpdGFsaXplRmlyc3RMZXR0ZXIoYXZhaWxhYmxlRGF0ZSl9PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1VsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9DYXJkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENhcmQgdGl0bGU9XCJVdGlsaXRpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1PlBhaWQgQnkgTGFuZGxvcmQ8L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdEZsb29ycGxhbi5mbG9vcnBsYW4udXRpbGl0aWVzLmZpbHRlcih1dGlsaXR5ID0+IHV0aWxpdHkudHlwZSA9PT0gVXRpbGl0eVR5cGUuSU5DTFVERURfVVRJTElUWSkubWFwKHV0aWxpdHkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpIGtleT17XCJ1bml0Rmxvb3JwbGFuLWluY2x1ZGVkLXV0aWxpdHktXCIgKyB1dGlsaXR5LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVsbGV0SWNvbj1cImhvbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjYXBpdGFsaXplRmlyc3RMZXR0ZXIodXRpbGl0eS5uYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT5QYWlkIEJ5IFJlc2lkZW50PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRGbG9vcnBsYW4uZmxvb3JwbGFuLnV0aWxpdGllcy5maWx0ZXIodXRpbGl0eSA9PiB1dGlsaXR5LnR5cGUgPT09IFV0aWxpdHlUeXBlLlJFU0lERU5UX1VUSUxJVFkpLm1hcCh1dGlsaXR5ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaSBrZXk9e1widW5pdEZsb29ycGxhbi1yZXNpZGVudC11dGlsaXR5LVwiICsgdXRpbGl0eS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bGxldEljb249XCJkb2xsYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZXNpZGVudFV0aWxpdHlEZXRhaWxzKHV0aWxpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9VbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzQXZlcmFnZU1vbnRobHlCaWxsUHJlc2VudCgpID8gPHA+PGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKkF2ZXJhZ2UgdXRpbGl0aWVzIHNob3duIGFib3ZlIGFyZSBhbiBlc3RpbWF0ZS4gQWN0dWFsIG1vbnRobHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvc3RzIGNhbiB2YXJ5IHNpZ25pZmljYW50bHkgYmFzZWQgb24gaW5kaXZpZHVhbCB1c2FnZSwgdGltZSBvZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB3ZWF0aGVyLCBhbmQgb3RoZXIgZmFjdG9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+PC9wPiA6IFwiXCJ9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NhcmQ+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzaW1pbGFyRmxvb3JwbGFucy5sZW5ndGggPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNpbWlsYXJGbG9vcnBsYW5DYXJkIHNpbWlsYXJGbG9vcnBsYW5zPXtzaW1pbGFyRmxvb3JwbGFuc30vPiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Zsb29ycGxhbkZhcXMubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGYXFzQ2FyZCBmYXFzPXtmbG9vcnBsYW5GYXFzfSB0aXRsZT1cIkZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zXCIvPiA6IFwiXCJ9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhY3QtY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2FyZCBmZWF0dXJlZD17dHJ1ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48aT5RdWVzdGlvbnM/PC9pPjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxpPkNhbGwgb3IgdGV4dCB1cyBhbnl0aW1lOjwvaT48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dW5pdEZsb29ycGxhbi5mbG9vcnBsYW4ucHJvcGVydHk/LnBob25lID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtcInRlbDpcIiArIHVuaXRGbG9vcnBsYW4uZmxvb3JwbGFuLnByb3BlcnR5LnBob25lfT57Zm9ybWF0UGhvbmVOdW1iZXIodW5pdEZsb29ycGxhbi5mbG9vcnBsYW4ucHJvcGVydHkucGhvbmUpfTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwidGVydGlhcnlcIiBvbkNsaWNrPXtjb250YWN0Q2xpY2tIYW5kbGVyfSBzaXplPVwibGFyZ2VcIj5Db250YWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDCuzwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDYXJkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgcmVmPXtsb2NhdGlvblJlZiA/IGxvY2F0aW9uUmVmIDogbWFwUmVmfSBpZD1cImxvY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlZmVyZW5jZVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE1hcFNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtmbG9vcnBsYW5BZGRyZXNzVG9Hb29nbGVNYXAoYWRkcmVzc0Zyb21Vbml0KHVuaXRGbG9vcnBsYW4pKX0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9DYXJkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pdFNlY3Rpb25Qcm9wcyB7XG4gICAgY29udGFjdENsaWNrSGFuZGxlcjogKCkgPT4gdm9pZDtcbiAgICBhcHBseUNsaWNrSGFuZGxlcjogKCkgPT4gdm9pZDtcbiAgICB1bml0SWQ6IHN0cmluZztcbiAgICBsb2NhdGlvblJlZj86IFJlYWN0LlJlZjxIVE1MRGl2RWxlbWVudD47XG4gICAgaGFuZGxlUmVmVG9Mb2NhdGlvbj86ICgpID0+IHZvaWQ7XG4gICAgaGFuZGxlSHRtbFRpdGxlVXBkYXRlPzogKHRpdGxlOiBzdHJpbmcpID0+IHZvaWQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQVNBLElBQUFFLGlCQUFBLEdBQUFGLE9BQUE7QUFRQUEsT0FBQTtBQUNBLElBQUFHLG9CQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFRQSxJQUFBSyxLQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxpQkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEscUJBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLFVBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQVgsT0FBQTtBQUNBLElBQUFZLFNBQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLDBCQUFBLEdBQUFiLE9BQUE7QUFDQSxJQUFBYyxTQUFBLEdBQUFkLE9BQUE7QUFDQSxJQUFBZSxZQUFBLEdBQUFmLE9BQUE7QUFFQSxJQUFBZ0IsU0FBQSxHQUFBaEIsT0FBQTtBQUFvQyxTQUFBVyx1QkFBQU0sR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQUFBLFNBQUFHLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUF0Qix3QkFBQXNCLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEs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
|
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.UnitsHeader = void 0;
|
|
7
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
-
require("./assets/UnitsHeader.scss");
|
|
9
|
-
var _muncherUi = require("@contentmunch/muncher-ui");
|
|
10
|
-
var _Utils = require("../../utils/Utils");
|
|
11
|
-
var _FloorplanService = require("../../floorplan/service/FloorplanService");
|
|
12
|
-
var _Floorplan = require("../../floorplan/data/Floorplan");
|
|
13
|
-
var _UnitService = require("../service/UnitService");
|
|
14
|
-
var _Bedroom = require("../../floorplan/section/filter/Bedroom");
|
|
15
|
-
var _Availability = require("../../floorplan/section/filter/Availability");
|
|
16
|
-
var _Price = require("../../floorplan/section/filter/Price");
|
|
17
|
-
var _Style = require("../../floorplan/section/filter/Style");
|
|
18
|
-
var _Sort = require("../../floorplan/section/filter/Sort");
|
|
19
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
20
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
21
|
-
const UnitsHeader = _ref => {
|
|
22
|
-
let {
|
|
23
|
-
title,
|
|
24
|
-
filters,
|
|
25
|
-
units,
|
|
26
|
-
setCurrentUnits,
|
|
27
|
-
isCondensed,
|
|
28
|
-
currentUnitCounts,
|
|
29
|
-
defaultFloorplanStyle,
|
|
30
|
-
defaultBedRooms,
|
|
31
|
-
defaultAvailability,
|
|
32
|
-
defaultMaxRent,
|
|
33
|
-
defaultMinRent,
|
|
34
|
-
defaultFloorplanIds
|
|
35
|
-
} = _ref;
|
|
36
|
-
const [bedroomFilters, setBedroomFilters] = (0, _react.useState)(defaultBedRooms ? [defaultBedRooms] : []);
|
|
37
|
-
const [availabilityFilters, setAvailabilityFilters] = (0, _react.useState)(defaultAvailability ? [(0, _FloorplanService.defaultAvailabilityToMonthYear)(defaultAvailability)] : []);
|
|
38
|
-
const [styleFilters, setStyleFilters] = (0, _react.useState)(defaultFloorplanStyle ? [defaultFloorplanStyle] : []);
|
|
39
|
-
const [minRent, setMinRent] = (0, _react.useState)(defaultMinRent ? defaultMinRent : _Floorplan.MIN_RENT);
|
|
40
|
-
const [maxRent, setMaxRent] = (0, _react.useState)(defaultMaxRent ? defaultMaxRent : _Floorplan.MAX_RENT);
|
|
41
|
-
const [sortBy, setSortBy] = (0, _react.useState)("featured");
|
|
42
|
-
const [floorplanIds, setFloorplanIds] = (0, _react.useState)(defaultFloorplanIds ? defaultFloorplanIds : []);
|
|
43
|
-
const currentFilters = {
|
|
44
|
-
bedroomFilters,
|
|
45
|
-
availabilityFilters,
|
|
46
|
-
styleFilters,
|
|
47
|
-
minRent,
|
|
48
|
-
maxRent,
|
|
49
|
-
sortBy,
|
|
50
|
-
floorplanIds
|
|
51
|
-
};
|
|
52
|
-
const handleSortAndFilter = withCurrentFilters => {
|
|
53
|
-
setCurrentUnits((0, _UnitService.sortAndFilterUnits)(units, withCurrentFilters));
|
|
54
|
-
};
|
|
55
|
-
const handleMinRentChange = rent => {
|
|
56
|
-
setMinRent(rent);
|
|
57
|
-
handleSortAndFilter({
|
|
58
|
-
...currentFilters,
|
|
59
|
-
minRent: rent
|
|
60
|
-
});
|
|
61
|
-
};
|
|
62
|
-
const handleMaxRentChange = rent => {
|
|
63
|
-
setMaxRent(rent);
|
|
64
|
-
handleSortAndFilter({
|
|
65
|
-
...currentFilters,
|
|
66
|
-
maxRent: rent
|
|
67
|
-
});
|
|
68
|
-
};
|
|
69
|
-
const handleBedroomFilterChange = filter => {
|
|
70
|
-
const index = bedroomFilters.indexOf(filter);
|
|
71
|
-
const currentBedroomFilters = [...bedroomFilters];
|
|
72
|
-
if (index > -1) {
|
|
73
|
-
currentBedroomFilters.splice(index, 1);
|
|
74
|
-
} else {
|
|
75
|
-
currentBedroomFilters.push(filter);
|
|
76
|
-
}
|
|
77
|
-
setBedroomFilters(currentBedroomFilters);
|
|
78
|
-
handleSortAndFilter({
|
|
79
|
-
...currentFilters,
|
|
80
|
-
bedroomFilters: currentBedroomFilters
|
|
81
|
-
});
|
|
82
|
-
};
|
|
83
|
-
const handleAvailabilityFilterChange = filter => {
|
|
84
|
-
const index = availabilityFilters.indexOf(filter);
|
|
85
|
-
const currentAvailabilityFilters = [...availabilityFilters];
|
|
86
|
-
if (index > -1) {
|
|
87
|
-
currentAvailabilityFilters.splice(index, 1);
|
|
88
|
-
} else {
|
|
89
|
-
currentAvailabilityFilters.push(filter);
|
|
90
|
-
}
|
|
91
|
-
setAvailabilityFilters(currentAvailabilityFilters);
|
|
92
|
-
handleSortAndFilter({
|
|
93
|
-
...currentFilters,
|
|
94
|
-
availabilityFilters: currentAvailabilityFilters
|
|
95
|
-
});
|
|
96
|
-
};
|
|
97
|
-
const handleFloorplanIdChange = floorplanId => {
|
|
98
|
-
const index = floorplanIds.indexOf(floorplanId);
|
|
99
|
-
const currentFloorplanIds = [...floorplanIds];
|
|
100
|
-
if (index > -1) {
|
|
101
|
-
currentFloorplanIds.splice(index, 1);
|
|
102
|
-
}
|
|
103
|
-
setFloorplanIds(currentFloorplanIds);
|
|
104
|
-
handleSortAndFilter({
|
|
105
|
-
...currentFilters,
|
|
106
|
-
floorplanIds: currentFloorplanIds
|
|
107
|
-
});
|
|
108
|
-
};
|
|
109
|
-
const handlePriceChange = range => {
|
|
110
|
-
setMinRent(range.min);
|
|
111
|
-
setMaxRent(range.max);
|
|
112
|
-
handleSortAndFilter({
|
|
113
|
-
...currentFilters,
|
|
114
|
-
minRent: range.min,
|
|
115
|
-
maxRent: range.max
|
|
116
|
-
});
|
|
117
|
-
};
|
|
118
|
-
const handleStyleFilterChange = filter => {
|
|
119
|
-
const index = styleFilters.indexOf(filter);
|
|
120
|
-
const currentSyleFilters = [...styleFilters];
|
|
121
|
-
if (index > -1) {
|
|
122
|
-
currentSyleFilters.splice(index, 1);
|
|
123
|
-
} else {
|
|
124
|
-
currentSyleFilters.push(filter);
|
|
125
|
-
}
|
|
126
|
-
setStyleFilters(currentSyleFilters);
|
|
127
|
-
handleSortAndFilter({
|
|
128
|
-
...currentFilters,
|
|
129
|
-
styleFilters: currentSyleFilters
|
|
130
|
-
});
|
|
131
|
-
};
|
|
132
|
-
const handleSortChange = sortBy => {
|
|
133
|
-
setSortBy(sortBy);
|
|
134
|
-
handleSortAndFilter({
|
|
135
|
-
...currentFilters,
|
|
136
|
-
sortBy: sortBy
|
|
137
|
-
});
|
|
138
|
-
};
|
|
139
|
-
return /*#__PURE__*/_react.default.createElement("header", {
|
|
140
|
-
className: "units-header"
|
|
141
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
142
|
-
className: isCondensed ? "" : "container"
|
|
143
|
-
}, /*#__PURE__*/_react.default.createElement("h2", null, title), /*#__PURE__*/_react.default.createElement("div", {
|
|
144
|
-
className: "units-filters"
|
|
145
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
146
|
-
className: "filter-group"
|
|
147
|
-
}, /*#__PURE__*/_react.default.createElement("label", {
|
|
148
|
-
className: "filter-label"
|
|
149
|
-
}, "Filter By:"), /*#__PURE__*/_react.default.createElement("div", {
|
|
150
|
-
className: "filters"
|
|
151
|
-
}, /*#__PURE__*/_react.default.createElement(_Bedroom.BedroomFilter, {
|
|
152
|
-
filters: filters.bedroom,
|
|
153
|
-
handleFilterChange: handleBedroomFilterChange,
|
|
154
|
-
currentFilters: bedroomFilters
|
|
155
|
-
}), /*#__PURE__*/_react.default.createElement(_Availability.AvailabilityFilter, {
|
|
156
|
-
filters: filters.availability,
|
|
157
|
-
handleFilterChange: handleAvailabilityFilterChange,
|
|
158
|
-
currentFilters: availabilityFilters
|
|
159
|
-
}), /*#__PURE__*/_react.default.createElement(_Price.PriceFilter, {
|
|
160
|
-
minValue: minRent,
|
|
161
|
-
maxValue: maxRent,
|
|
162
|
-
setMinValue: handleMinRentChange,
|
|
163
|
-
setMaxValue: handleMaxRentChange
|
|
164
|
-
}), /*#__PURE__*/_react.default.createElement(_Style.StyleFilter, {
|
|
165
|
-
filters: filters.style,
|
|
166
|
-
handleFilterChange: handleStyleFilterChange,
|
|
167
|
-
currentFilters: styleFilters
|
|
168
|
-
}))), /*#__PURE__*/_react.default.createElement("div", {
|
|
169
|
-
className: "filter-group"
|
|
170
|
-
}, /*#__PURE__*/_react.default.createElement("label", {
|
|
171
|
-
className: "filter-label"
|
|
172
|
-
}, "Sort By:"), /*#__PURE__*/_react.default.createElement("div", {
|
|
173
|
-
className: "filters"
|
|
174
|
-
}, /*#__PURE__*/_react.default.createElement(_Sort.Sort, {
|
|
175
|
-
sortBy: sortBy,
|
|
176
|
-
handleSortChange: handleSortChange
|
|
177
|
-
})))), /*#__PURE__*/_react.default.createElement("div", {
|
|
178
|
-
className: "pills"
|
|
179
|
-
}, bedroomFilters.sort(_Bedroom.sortBedrooms).map(bedroom => /*#__PURE__*/_react.default.createElement(_muncherUi.Pill, {
|
|
180
|
-
key: bedroom,
|
|
181
|
-
pillCloseHandler: () => {
|
|
182
|
-
handleBedroomFilterChange(bedroom);
|
|
183
|
-
}
|
|
184
|
-
}, bedroom + " bedroom")), availabilityFilters.sort(_Availability.sortAvailability).map(availability => /*#__PURE__*/_react.default.createElement(_muncherUi.Pill, {
|
|
185
|
-
key: availability.toString(),
|
|
186
|
-
pillCloseHandler: () => {
|
|
187
|
-
handleAvailabilityFilterChange(availability);
|
|
188
|
-
}
|
|
189
|
-
}, _FloorplanService.AVAILABLE_NOW === availability ? availability.toString() : availability.toString() + " availability")), minRent === _Floorplan.MIN_RENT && maxRent === _Floorplan.MAX_RENT ? "" : /*#__PURE__*/_react.default.createElement(_muncherUi.Pill, {
|
|
190
|
-
key: "rent",
|
|
191
|
-
pillCloseHandler: () => {
|
|
192
|
-
handlePriceChange({
|
|
193
|
-
min: _Floorplan.MIN_RENT,
|
|
194
|
-
max: _Floorplan.MAX_RENT
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
}, "$" + minRent + " - $" + maxRent), styleFilters.map(style => /*#__PURE__*/_react.default.createElement(_muncherUi.Pill, {
|
|
198
|
-
key: style,
|
|
199
|
-
pillCloseHandler: () => {
|
|
200
|
-
handleStyleFilterChange(style);
|
|
201
|
-
}
|
|
202
|
-
}, (0, _Utils.capitalizeFirstLetter)((0, _Utils.enumToString)(style)))), floorplanIds.sort().map(floorplanId => /*#__PURE__*/_react.default.createElement(_muncherUi.Pill, {
|
|
203
|
-
key: floorplanId,
|
|
204
|
-
pillCloseHandler: () => {
|
|
205
|
-
handleFloorplanIdChange(floorplanId);
|
|
206
|
-
}
|
|
207
|
-
}, floorplanId)), /*#__PURE__*/_react.default.createElement("div", {
|
|
208
|
-
className: "filter-result"
|
|
209
|
-
}, /*#__PURE__*/_react.default.createElement(_muncherUi.Icon, {
|
|
210
|
-
name: "filter"
|
|
211
|
-
}), "\xA0Total: ", currentUnitCounts, " Results"))));
|
|
212
|
-
};
|
|
213
|
-
exports.UnitsHeader = UnitsHeader;
|
|
214
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbXVuY2hlclVpIiwiX1V0aWxzIiwiX0Zsb29ycGxhblNlcnZpY2UiLCJfRmxvb3JwbGFuIiwiX1VuaXRTZXJ2aWNlIiwiX0JlZHJvb20iLCJfQXZhaWxhYmlsaXR5IiwiX1ByaWNlIiwiX1N0eWxlIiwiX1NvcnQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJVbml0c0hlYWRlciIsIl9yZWYiLCJ0aXRsZSIsImZpbHRlcnMiLCJ1bml0cyIsInNldEN1cnJlbnRVbml0cyIsImlzQ29uZGVuc2VkIiwiY3VycmVudFVuaXRDb3VudHMiLCJkZWZhdWx0Rmxvb3JwbGFuU3R5bGUiLCJkZWZhdWx0QmVkUm9vbXMiLCJkZWZhdWx0QXZhaWxhYmlsaXR5IiwiZGVmYXVsdE1heFJlbnQiLCJkZWZhdWx0TWluUmVudCIsImRlZmF1bHRGbG9vcnBsYW5JZHMiLCJiZWRyb29tRmlsdGVycyIsInNldEJlZHJvb21GaWx0ZXJzIiwidXNlU3RhdGUiLCJhdmFpbGFiaWxpdHlGaWx0ZXJzIiwic2V0QXZhaWxhYmlsaXR5RmlsdGVycyIsImRlZmF1bHRBdmFpbGFiaWxpdHlUb01vbnRoWWVhciIsInN0eWxlRmlsdGVycyIsInNldFN0eWxlRmlsdGVycyIsIm1pblJlbnQiLCJzZXRNaW5SZW50IiwiTUlOX1JFTlQiLCJtYXhSZW50Iiwic2V0TWF4UmVudCIsIk1BWF9SRU5UIiwic29ydEJ5Iiwic2V0U29ydEJ5IiwiZmxvb3JwbGFuSWRzIiwic2V0Rmxvb3JwbGFuSWRzIiwiY3VycmVudEZpbHRlcnMiLCJoYW5kbGVTb3J0QW5kRmlsdGVyIiwid2l0aEN1cnJlbnRGaWx0ZXJzIiwic29ydEFuZEZpbHRlclVuaXRzIiwiaGFuZGxlTWluUmVudENoYW5nZSIsInJlbnQiLCJoYW5kbGVNYXhSZW50Q2hhbmdlIiwiaGFuZGxlQmVkcm9vbUZpbHRlckNoYW5nZSIsImZpbHRlciIsImluZGV4IiwiaW5kZXhPZiIsImN1cnJlbnRCZWRyb29tRmlsdGVycyIsInNwbGljZSIsInB1c2giLCJoYW5kbGVBdmFpbGFiaWxpdHlGaWx0ZXJDaGFuZ2UiLCJjdXJyZW50QXZhaWxhYmlsaXR5RmlsdGVycyIsImhhbmRsZUZsb29ycGxhbklkQ2hhbmdlIiwiZmxvb3JwbGFuSWQiLCJjdXJyZW50Rmxvb3JwbGFuSWRzIiwiaGFuZGxlUHJpY2VDaGFuZ2UiLCJyYW5nZSIsIm1pbiIsIm1heCIsImhhbmRsZVN0eWxlRmlsdGVyQ2hhbmdlIiwiY3VycmVudFN5bGVGaWx0ZXJzIiwiaGFuZGxlU29ydENoYW5nZSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJCZWRyb29tRmlsdGVyIiwiYmVkcm9vbSIsImhhbmRsZUZpbHRlckNoYW5nZSIsIkF2YWlsYWJpbGl0eUZpbHRlciIsImF2YWlsYWJpbGl0eSIsIlByaWNlRmlsdGVyIiwibWluVmFsdWUiLCJtYXhWYWx1ZSIsInNldE1pblZhbHVlIiwic2V0TWF4VmFsdWUiLCJTdHlsZUZpbHRlciIsInN0eWxlIiwiU29ydCIsInNvcnQiLCJzb3J0QmVkcm9vbXMiLCJtYXAiLCJQaWxsIiwia2V5IiwicGlsbENsb3NlSGFuZGxlciIsInNvcnRBdmFpbGFiaWxpdHkiLCJ0b1N0cmluZyIsIkFWQUlMQUJMRV9OT1ciLCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIiLCJlbnVtVG9TdHJpbmciLCJJY29uIiwibmFtZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5pdC9zZWN0aW9uL1VuaXRzSGVhZGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCIuL2Fzc2V0cy9Vbml0c0hlYWRlci5zY3NzXCI7XG5pbXBvcnQge0ljb24sIFBpbGwsIFJhbmdlfSBmcm9tIFwiQGNvbnRlbnRtdW5jaC9tdW5jaGVyLXVpXCI7XG5pbXBvcnQge2NhcGl0YWxpemVGaXJzdExldHRlciwgZW51bVRvU3RyaW5nfSBmcm9tIFwiLi4vLi4vdXRpbHMvVXRpbHNcIjtcbmltcG9ydCB7U29ydEJ5fSBmcm9tIFwiLi4vLi4vZGF0YS9Tb3J0RmllbGRcIjtcbmltcG9ydCB7RGVmYXVsdEZsb29ycGxhbkZpbHRlcnN9IGZyb20gXCIuLi8uLi9mbG9vcnBsYW4vc2VjdGlvbi9GbG9vcnBsYW5zU2VjdGlvblwiO1xuaW1wb3J0IHtVbml0Q2FyZERhdGF9IGZyb20gXCIuLi9kYXRhL1VuaXRcIjtcbmltcG9ydCB7QVZBSUxBQkxFX05PVywgZGVmYXVsdEF2YWlsYWJpbGl0eVRvTW9udGhZZWFyfSBmcm9tIFwiLi4vLi4vZmxvb3JwbGFuL3NlcnZpY2UvRmxvb3JwbGFuU2VydmljZVwiO1xuaW1wb3J0IHtGbG9vcnBsYW5TdHlsZSwgTUFYX1JFTlQsIE1JTl9SRU5UfSBmcm9tIFwiLi4vLi4vZmxvb3JwbGFuL2RhdGEvRmxvb3JwbGFuXCI7XG5pbXBvcnQge0N1cnJlbnRGbG9vcnBsYW5GaWx0ZXJzLCBGbG9vcnBsYW5GaWx0ZXJzfSBmcm9tIFwiLi4vLi4vZmxvb3JwbGFuL2RhdGEvRmxvb3JwbGFuRmlsdGVyc1wiO1xuaW1wb3J0IHtzb3J0QW5kRmlsdGVyVW5pdHN9IGZyb20gXCIuLi9zZXJ2aWNlL1VuaXRTZXJ2aWNlXCI7XG5pbXBvcnQge0JlZHJvb21GaWx0ZXIsIHNvcnRCZWRyb29tc30gZnJvbSBcIi4uLy4uL2Zsb29ycGxhbi9zZWN0aW9uL2ZpbHRlci9CZWRyb29tXCI7XG5pbXBvcnQge0F2YWlsYWJpbGl0eUZpbHRlciwgc29ydEF2YWlsYWJpbGl0eX0gZnJvbSBcIi4uLy4uL2Zsb29ycGxhbi9zZWN0aW9uL2ZpbHRlci9BdmFpbGFiaWxpdHlcIjtcbmltcG9ydCB7UHJpY2VGaWx0ZXJ9IGZyb20gXCIuLi8uLi9mbG9vcnBsYW4vc2VjdGlvbi9maWx0ZXIvUHJpY2VcIjtcbmltcG9ydCB7U3R5bGVGaWx0ZXJ9IGZyb20gXCIuLi8uLi9mbG9vcnBsYW4vc2VjdGlvbi9maWx0ZXIvU3R5bGVcIjtcbmltcG9ydCB7U29ydH0gZnJvbSBcIi4uLy4uL2Zsb29ycGxhbi9zZWN0aW9uL2ZpbHRlci9Tb3J0XCI7XG5cbmV4cG9ydCBjb25zdCBVbml0c0hlYWRlcjogUmVhY3QuRkM8VW5pdHNIZWFkZXJQcm9wcz4gPSAoXG4gICAge1xuICAgICAgICB0aXRsZSxcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgdW5pdHMsXG4gICAgICAgIHNldEN1cnJlbnRVbml0cyxcbiAgICAgICAgaXNDb25kZW5zZWQsXG4gICAgICAgIGN1cnJlbnRVbml0Q291bnRzLFxuICAgICAgICBkZWZhdWx0Rmxvb3JwbGFuU3R5bGUsIGRlZmF1bHRCZWRSb29tcywgZGVmYXVsdEF2YWlsYWJpbGl0eSwgZGVmYXVsdE1heFJlbnQsIGRlZmF1bHRNaW5SZW50LCBkZWZhdWx0Rmxvb3JwbGFuSWRzXG4gICAgfSkgPT4ge1xuXG4gICAgY29uc3QgW2JlZHJvb21GaWx0ZXJzLCBzZXRCZWRyb29tRmlsdGVyc10gPSB1c2VTdGF0ZTxudW1iZXJbXT4oZGVmYXVsdEJlZFJvb21zID8gW2RlZmF1bHRCZWRSb29tc10gOiBbXSk7XG4gICAgY29uc3QgW2F2YWlsYWJpbGl0eUZpbHRlcnMsIHNldEF2YWlsYWJpbGl0eUZpbHRlcnNdID0gdXNlU3RhdGU8c3RyaW5nW10+KGRlZmF1bHRBdmFpbGFiaWxpdHkgPyBbZGVmYXVsdEF2YWlsYWJpbGl0eVRvTW9udGhZZWFyKGRlZmF1bHRBdmFpbGFiaWxpdHkpXSA6IFtdKTtcbiAgICBjb25zdCBbc3R5bGVGaWx0ZXJzLCBzZXRTdHlsZUZpbHRlcnNdID0gdXNlU3RhdGU8Rmxvb3JwbGFuU3R5bGVbXT4oZGVmYXVsdEZsb29ycGxhblN0eWxlID8gW2RlZmF1bHRGbG9vcnBsYW5TdHlsZV0gOiBbXSk7XG4gICAgY29uc3QgW21pblJlbnQsIHNldE1pblJlbnRdID0gdXNlU3RhdGU8bnVtYmVyPihkZWZhdWx0TWluUmVudCA/IGRlZmF1bHRNaW5SZW50IDogTUlOX1JFTlQpO1xuICAgIGNvbnN0IFttYXhSZW50LCBzZXRNYXhSZW50XSA9IHVzZVN0YXRlPG51bWJlcj4oZGVmYXVsdE1heFJlbnQgPyBkZWZhdWx0TWF4UmVudCA6IE1BWF9SRU5UKTtcbiAgICBjb25zdCBbc29ydEJ5LCBzZXRTb3J0QnldID0gdXNlU3RhdGU8U29ydEJ5PihcImZlYXR1cmVkXCIpO1xuICAgIGNvbnN0IFtmbG9vcnBsYW5JZHMsIHNldEZsb29ycGxhbklkc10gPSB1c2VTdGF0ZTxzdHJpbmdbXT4oZGVmYXVsdEZsb29ycGxhbklkcyA/IGRlZmF1bHRGbG9vcnBsYW5JZHMgOiBbXSk7XG5cbiAgICBjb25zdCBjdXJyZW50RmlsdGVyczogQ3VycmVudEZsb29ycGxhbkZpbHRlcnMgPSB7XG4gICAgICAgIGJlZHJvb21GaWx0ZXJzLCBhdmFpbGFiaWxpdHlGaWx0ZXJzLCBzdHlsZUZpbHRlcnMsIG1pblJlbnQsIG1heFJlbnQsIHNvcnRCeSwgZmxvb3JwbGFuSWRzXG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZVNvcnRBbmRGaWx0ZXIgPSAod2l0aEN1cnJlbnRGaWx0ZXJzOiBDdXJyZW50Rmxvb3JwbGFuRmlsdGVycykgPT4ge1xuICAgICAgICBzZXRDdXJyZW50VW5pdHMoc29ydEFuZEZpbHRlclVuaXRzKHVuaXRzLCB3aXRoQ3VycmVudEZpbHRlcnMpKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZU1pblJlbnRDaGFuZ2UgPSAocmVudDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHNldE1pblJlbnQocmVudCk7XG4gICAgICAgIGhhbmRsZVNvcnRBbmRGaWx0ZXIoey4uLmN1cnJlbnRGaWx0ZXJzLCBtaW5SZW50OiByZW50fSk7XG4gICAgfVxuICAgIGNvbnN0IGhhbmRsZU1heFJlbnRDaGFuZ2UgPSAocmVudDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHNldE1heFJlbnQocmVudCk7XG4gICAgICAgIGhhbmRsZVNvcnRBbmRGaWx0ZXIoey4uLmN1cnJlbnRGaWx0ZXJzLCBtYXhSZW50OiByZW50fSk7XG4gICAgfVxuICAgIGNvbnN0IGhhbmRsZUJlZHJvb21GaWx0ZXJDaGFuZ2UgPSAoZmlsdGVyOiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBiZWRyb29tRmlsdGVycy5pbmRleE9mKGZpbHRlcik7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRCZWRyb29tRmlsdGVycyA9IFsuLi5iZWRyb29tRmlsdGVyc107XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBjdXJyZW50QmVkcm9vbUZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRCZWRyb29tRmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgc2V0QmVkcm9vbUZpbHRlcnMoY3VycmVudEJlZHJvb21GaWx0ZXJzKTtcbiAgICAgICAgaGFuZGxlU29ydEFuZEZpbHRlcih7Li4uY3VycmVudEZpbHRlcnMsIGJlZHJvb21GaWx0ZXJzOiBjdXJyZW50QmVkcm9vbUZpbHRlcnN9KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUF2YWlsYWJpbGl0eUZpbHRlckNoYW5nZSA9IChmaWx0ZXI6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGF2YWlsYWJpbGl0eUZpbHRlcnMuaW5kZXhPZihmaWx0ZXIpO1xuICAgICAgICBjb25zdCBjdXJyZW50QXZhaWxhYmlsaXR5RmlsdGVycyA9IFsuLi5hdmFpbGFiaWxpdHlGaWx0ZXJzXTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGN1cnJlbnRBdmFpbGFiaWxpdHlGaWx0ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50QXZhaWxhYmlsaXR5RmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgc2V0QXZhaWxhYmlsaXR5RmlsdGVycyhjdXJyZW50QXZhaWxhYmlsaXR5RmlsdGVycyk7XG4gICAgICAgIGhhbmRsZVNvcnRBbmRGaWx0ZXIoey4uLmN1cnJlbnRGaWx0ZXJzLCBhdmFpbGFiaWxpdHlGaWx0ZXJzOiBjdXJyZW50QXZhaWxhYmlsaXR5RmlsdGVyc30pO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlRmxvb3JwbGFuSWRDaGFuZ2UgPSAoZmxvb3JwbGFuSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGZsb29ycGxhbklkcy5pbmRleE9mKGZsb29ycGxhbklkKTtcbiAgICAgICAgY29uc3QgY3VycmVudEZsb29ycGxhbklkcyA9IFsuLi5mbG9vcnBsYW5JZHNdO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgY3VycmVudEZsb29ycGxhbklkcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHNldEZsb29ycGxhbklkcyhjdXJyZW50Rmxvb3JwbGFuSWRzKTtcbiAgICAgICAgaGFuZGxlU29ydEFuZEZpbHRlcih7Li4uY3VycmVudEZpbHRlcnMsIGZsb29ycGxhbklkczogY3VycmVudEZsb29ycGxhbklkc30pO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlUHJpY2VDaGFuZ2UgPSAocmFuZ2U6IFJhbmdlKSA9PiB7XG4gICAgICAgIHNldE1pblJlbnQocmFuZ2UubWluKTtcbiAgICAgICAgc2V0TWF4UmVudChyYW5nZS5tYXgpO1xuICAgICAgICBoYW5kbGVTb3J0QW5kRmlsdGVyKHsuLi5jdXJyZW50RmlsdGVycywgbWluUmVudDogcmFuZ2UubWluLCBtYXhSZW50OiByYW5nZS5tYXh9KTtcbiAgICB9XG4gICAgY29uc3QgaGFuZGxlU3R5bGVGaWx0ZXJDaGFuZ2UgPSAoZmlsdGVyOiBGbG9vcnBsYW5TdHlsZSkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHN0eWxlRmlsdGVycy5pbmRleE9mKGZpbHRlcik7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTeWxlRmlsdGVycyA9IFsuLi5zdHlsZUZpbHRlcnNdO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgY3VycmVudFN5bGVGaWx0ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50U3lsZUZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHNldFN0eWxlRmlsdGVycyhjdXJyZW50U3lsZUZpbHRlcnMpO1xuICAgICAgICBoYW5kbGVTb3J0QW5kRmlsdGVyKHsuLi5jdXJyZW50RmlsdGVycywgc3R5bGVGaWx0ZXJzOiBjdXJyZW50U3lsZUZpbHRlcnN9KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVNvcnRDaGFuZ2UgPSAoc29ydEJ5OiBTb3J0QnkpID0+IHtcbiAgICAgICAgc2V0U29ydEJ5KHNvcnRCeSk7XG4gICAgICAgIGhhbmRsZVNvcnRBbmRGaWx0ZXIoey4uLmN1cnJlbnRGaWx0ZXJzLCBzb3J0Qnk6IHNvcnRCeX0pO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cInVuaXRzLWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2lzQ29uZGVuc2VkID8gXCJcIiA6IFwiY29udGFpbmVyXCJ9PlxuICAgICAgICAgICAgICAgIDxoMj57dGl0bGV9PC9oMj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVuaXRzLWZpbHRlcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmaWx0ZXItbGFiZWxcIj5GaWx0ZXIgQnk6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCZWRyb29tRmlsdGVyIGZpbHRlcnM9e2ZpbHRlcnMuYmVkcm9vbX0gaGFuZGxlRmlsdGVyQ2hhbmdlPXtoYW5kbGVCZWRyb29tRmlsdGVyQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaWx0ZXJzPXtiZWRyb29tRmlsdGVyc30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBdmFpbGFiaWxpdHlGaWx0ZXIgZmlsdGVycz17ZmlsdGVycy5hdmFpbGFiaWxpdHl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVGaWx0ZXJDaGFuZ2U9e2hhbmRsZUF2YWlsYWJpbGl0eUZpbHRlckNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaWx0ZXJzPXthdmFpbGFiaWxpdHlGaWx0ZXJzfS8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJpY2VGaWx0ZXIgbWluVmFsdWU9e21pblJlbnR9IG1heFZhbHVlPXttYXhSZW50fSBzZXRNaW5WYWx1ZT17aGFuZGxlTWluUmVudENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF4VmFsdWU9e2hhbmRsZU1heFJlbnRDaGFuZ2V9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVGaWx0ZXIgZmlsdGVycz17ZmlsdGVycy5zdHlsZX0gaGFuZGxlRmlsdGVyQ2hhbmdlPXtoYW5kbGVTdHlsZUZpbHRlckNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpbHRlcnM9e3N0eWxlRmlsdGVyc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbHRlci1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZpbHRlci1sYWJlbFwiPlNvcnQgQnk6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTb3J0IHNvcnRCeT17c29ydEJ5fSBoYW5kbGVTb3J0Q2hhbmdlPXtoYW5kbGVTb3J0Q2hhbmdlfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwaWxsc1wiPlxuICAgICAgICAgICAgICAgICAgICB7YmVkcm9vbUZpbHRlcnMuc29ydChzb3J0QmVkcm9vbXMpLm1hcChiZWRyb29tID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxQaWxsIGtleT17YmVkcm9vbX0gcGlsbENsb3NlSGFuZGxlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUJlZHJvb21GaWx0ZXJDaGFuZ2UoYmVkcm9vbSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtiZWRyb29tICsgXCIgYmVkcm9vbVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9QaWxsPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAge2F2YWlsYWJpbGl0eUZpbHRlcnMuc29ydChzb3J0QXZhaWxhYmlsaXR5KS5tYXAoKGF2YWlsYWJpbGl0eTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8UGlsbCBrZXk9e2F2YWlsYWJpbGl0eS50b1N0cmluZygpfSBwaWxsQ2xvc2VIYW5kbGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQXZhaWxhYmlsaXR5RmlsdGVyQ2hhbmdlKGF2YWlsYWJpbGl0eSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtBVkFJTEFCTEVfTk9XID09PSBhdmFpbGFiaWxpdHkgPyBhdmFpbGFiaWxpdHkudG9TdHJpbmcoKSA6IGF2YWlsYWJpbGl0eS50b1N0cmluZygpICsgXCIgYXZhaWxhYmlsaXR5XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1BpbGw+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5SZW50ID09PSBNSU5fUkVOVCAmJiBtYXhSZW50ID09PSBNQVhfUkVOVCA/IFwiXCIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQaWxsIGtleT1cInJlbnRcIiBwaWxsQ2xvc2VIYW5kbGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVByaWNlQ2hhbmdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogTUlOX1JFTlQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IE1BWF9SRU5UXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcIiRcIiArIG1pblJlbnQgKyBcIiAtICRcIiArIG1heFJlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9QaWxsPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHtzdHlsZUZpbHRlcnMubWFwKHN0eWxlID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxQaWxsIGtleT17c3R5bGV9IHBpbGxDbG9zZUhhbmRsZXI9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdHlsZUZpbHRlckNoYW5nZShzdHlsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjYXBpdGFsaXplRmlyc3RMZXR0ZXIoZW51bVRvU3RyaW5nKHN0eWxlKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1BpbGw+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICB7Zmxvb3JwbGFuSWRzLnNvcnQoKS5tYXAoZmxvb3JwbGFuSWQgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFBpbGwga2V5PXtmbG9vcnBsYW5JZH0gcGlsbENsb3NlSGFuZGxlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUZsb29ycGxhbklkQ2hhbmdlKGZsb29ycGxhbklkKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2Zsb29ycGxhbklkfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9QaWxsPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXItcmVzdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZmlsdGVyXCIvPiZuYnNwO1RvdGFsOiB7Y3VycmVudFVuaXRDb3VudHN9IFJlc3VsdHNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG4gICAgKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbml0c0hlYWRlclByb3BzIGV4dGVuZHMgRGVmYXVsdEZsb29ycGxhbkZpbHRlcnMge1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIGZpbHRlcnM6IEZsb29ycGxhbkZpbHRlcnM7XG4gICAgdW5pdHM6IFVuaXRDYXJkRGF0YVtdO1xuICAgIHNldEN1cnJlbnRVbml0czogKHVuaXRzOiBVbml0Q2FyZERhdGFbXSkgPT4gdm9pZDtcbiAgICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gICAgY3VycmVudFVuaXRDb3VudHM6IG51bWJlcjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0FBLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFJQSxJQUFBRyxpQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sYUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsTUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsTUFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsS0FBQSxHQUFBVixPQUFBO0FBQXlELFNBQUFXLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENB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
|