diff --git a/content/communities/communities.md b/content/communities/communities.md index f1a37f4f90..b4be8d35c4 100644 --- a/content/communities/communities.md +++ b/content/communities/communities.md @@ -27,7 +27,7 @@ There are more than 10,000 people participating across government in 19 areas. O **[Challenges & Prizes]({{< link "challenges-prizes.md" >}})**: We encourage public participation in crowdsourcing competitions to find innovative government solutions.
[Learn more »]({{< link "challenges-prizes.md" >}}) -**[Community Solutions]({{< link "community-solutions.md" >}})**: A community of government to provide services to local communities in a holistic and collaborative way by developing innovative and crosscutting partnerships. We are experts who help federal, state, local, and regional leaders enhance their relationships with their local communities and create targeted solutions that drive meaningful outcomes.
+**[Community Solutions]({{< link "community-solutions.md" >}})**: A community of federal staff that provide services to local communities in a holistic and collaborative way by developing innovative and crosscutting partnerships. We are experts who help federal, state, local, and regional leaders enhance their relationships with their local communities and create targeted solutions that drive meaningful outcomes.
[Learn more »]({{< link "community-solutions.md" >}}) **[Crowdsourcing and Citizen Science]({{< link "crowdsourcing-and-citizen-science.md" >}})**: Designing, implementing, and evaluating crowdsourcing and citizen science initiatives.
@@ -42,13 +42,13 @@ There are more than 10,000 people participating across government in 19 areas. O **[MobileGov]({{< link "mobilegov.md" >}})**: Creating anytime, anywhere government resources and solutions with collaborations including the Federal Crowdsource Mobile Testing Program, the Structured and Open Content Models Working Group.
[Learn more »]({{< link "mobilegov.md" >}}) -**[Multilingual Digital Group]({{< link "multilingual.md" >}})**: Expanding and improving access to digital content on different platforms in languages other than English.
+**[Multilingual Community]({{< link "multilingual.md" >}})**: Expanding and improving access to digital content on different platforms in languages other than English.
[Learn more »]({{< link "multilingual.md" >}}) -**[Open Data]({{< link "open-data.md" >}}):** Uniting open data leads at federal agencies, data stewards, and all others in government interested in open data, enterprise data inventory, civic tech, and data-driven government issues. Bi-weekly implementation support meetings are held every Tuesday at GSA for Federal employees and contractors.
+**[Open Data]({{< link "open-data.md" >}}):** Uniting open data leads at federal agencies, data stewards, and all others in government interested in open data, enterprise data inventory, civic tech, and data-driven government issues.
[Learn more »]({{< link "open-data.md" >}}) -**[OpenGov]({{< link "open-gov.md" >}}):** A place where we talk about transparency, open-participation, and collaboration across agencies.
[Learn more »]({{< link "open-gov.md" >}}) +**[OpenGov]({{< link "open-gov.md" >}}):** A place where we talk about transparency, open-participation, and collaboration across agencies.
[Learn more »]({{< link "open-gov.md" >}}) **[Plain Language Action and Information Network]({{< link "plain-language-community-of-practice.md" >}})**: Supporting the use of clear communication in government writing and helping federal agencies comply with the Plain Writing Act of 2010.
[Learn more »]({{< link "plain-language-community-of-practice.md" >}}) @@ -56,10 +56,10 @@ There are more than 10,000 people participating across government in 19 areas. O **[SocialGov](https://www.gsa.gov/technology/government-it-initiatives/emerging-citizen-technology/social-technology-socialgov)**: Analyzing, testing and developing shared resources for digital engagement, participation and collaboration programs for citizens.
[Learn more »](https://www.gsa.gov/technology/government-it-initiatives/emerging-citizen-technology/social-technology-socialgov) -**[User Experience]({{< link "user-experience.md" >}})**: User Experience: Developing successful government products and services through the practice of user-centered design, casting a broad tent in the user experience, customer experience, service design, innovation, behavioral design and other fields.
+**[User Experience]({{< link "user-experience.md" >}})**: Developing successful government products and services through the practice of user-centered design, casting a broad tent in the user experience, customer experience, service design, innovation, behavioral design and other fields.
[Learn more »]({{< link "user-experience.md" >}}) -**[Video Production Pros]({{< link "video.md" >}})** Creating the best video content possible by staying on the top of our game. We love what we do. We’re a group of storytellers, artists, directors, DPs, producers, gaffers, editors, animators, motion graphics artists, editors, technologists, visionaries, strategists and editorial teams and more.
+**[Video Production Pros]({{< link "video.md" >}})** Sharing leading trends, best practices, latest projects, feedback, techniques, and strategies that help our respective agencies connect with people through the power of video.
[Learn more »]({{< link "video.md" >}}) **[Virtual/Augmented Reality](https://www.gsa.gov/technology/government-it-initiatives/emerging-citizen-technology/virtual-and-augmented-reality)**: Analyzing, testing and developing shared resources for Virtual and Augmented Reality programs to improve the citizen experience of public services and resources.
diff --git a/content/communities/open-gov.md b/content/communities/open-gov.md index 1d758fdcdc..1ecc3950fd 100644 --- a/content/communities/open-gov.md +++ b/content/communities/open-gov.md @@ -8,6 +8,8 @@ aliases: - /communities/open-government-opengov-community-of-practice/ --- +The Interagency Open Government Community of Practice is where we talk about transparency, open-participation, and collaboration across agencies. + ### Join We host two listservs. One is open to the public/civil society for the purposes of collaboration and discussion as well as coordination the quarterly government & civil society gatherings. The other is a government-only listserv and is primarily to disseminate government specific information on timelines and deadlines for the NAP and offer support as agencies work to achieve their commitments. diff --git a/content/communities/user-experience.md b/content/communities/user-experience.md index b0c78cbac9..3bc6fd8be4 100644 --- a/content/communities/user-experience.md +++ b/content/communities/user-experience.md @@ -8,27 +8,32 @@ aliases: - /federal-user-experience-community-of-practice/ --- -Join our community of more than 1,000 federal User Experience practitioners, and learn how to make better, User-Centered products. +Join other federal user experience practitioners and learn how to make better user-centered products. ### Join -Send an e-mail to the group Co-Chairs Jean Fox and Silvia Salazar at [ux-cop-request@listserv.gsa.gov](mailto:ux-cop-request@listserv.gsa.gov?subject=Join%20U%20Community). Please include "Join UX Community" in the subject line. +Send an e-mail from your official government email to [ux-cop-request@listserv.gsa.gov](mailto:ux-cop-request@listserv.gsa.gov?subject=Join%20U%20Community), with “Join UX Community” in the subject line. - * Learn how other agencies are creating great User Experiences! - * Find how how to conduct valuable user research with little (or no) budget! +## Community Managers: Jean Fox (BLS) and Silvia Salazar (NIH) + +### Overview + +Members of the User Experience Community of Practice can: + * Ask questions and learn how other agencies are creating great user experiences! + * Find out how to conduct valuable user research with little (or no) budget! * Meet other government usability practitioners! * Share your own successes and tips! -### Who We Are +### Who we are -Our members include more than 900 federal, state, and local U.S. government employees and contractors with a valid **.gov** or **.mil** email address. We welcome program managers, subject matter experts, designers, developers, writers and others interested in creating efficient, effective and useful technologies. +Our members include more than 1,100 federal, state, and local U.S. government employees and contractors with a valid **.gov** or **.mil** email address. We welcome program managers, subject matter experts, designers, developers, writers and others interested in creating efficient, effective and useful technologies. -### We Offer +### What we do + * Create case studies of why UX works! + * Training for government Web managers, usability specialists, project managers, etc… * User Experience (UX) networking events - * Training for government Web managers, usability specialists, and project managers through [DigitalGov University]({{< link "digitalgov-university.md" >}}) and other programs - * Volunteer opportunities - * Useful UX resources such as the [DigitalGov User Experience Resources]({{< link "digitalgov-user-experience-resources.md" >}} "DigitalGov User Experience Program"), the Usability.gov’s [Guidelines](http://guidelines.usability.gov/), [DigitalGov]({{< link "index.html" >}}), and [DigitalGov University]({{< link "digitalgov-university.md" >}}). [ - ](http://www.usability.gov/) - * Case studies of why UX works! + * Connect people to useful UX resources + +### Key Resources -We bring together federal employees who want to make digital services—websites, mobile Apps, intranets, APIs—work better for their customers. + * https://www.usability.gov/ diff --git a/content/events/2017/2017-11-15-fedramp-tailored-overview-finalized-new-baseline.md b/content/events/2017/2017-11-15-fedramp-tailored-overview-finalized-new-baseline.md new file mode 100644 index 0000000000..b69d0e4e78 --- /dev/null +++ b/content/events/2017/2017-11-15-fedramp-tailored-overview-finalized-new-baseline.md @@ -0,0 +1,14 @@ +--- +slug: fedramp-tailored-overview-finalized-new-baseline +title: 'FedRAMP Tailored: Overview of the Finalized New Baseline' +summary: 'This online event will cover the overview of the FedRAMP Tailored Baseline for Cloud Service Providers (CSPs) with Low-Impact Software-as-a-Service (LI-SaaS) Systems.' +event_type: online +date: 2017-11-15 13:00:00 -0400 +end_date: 2017-11-15 14:00:00 -0400 +event_organizer: DigitalGov University +host: FedRAMP +registration_url: https://www.eventbrite.com/e/online-fedramp-tailored-overview-of-the-finalized-new-baseline-registration-39406911132 +youtube_id: MC6GfzTnaNY +--- + +An introduction to the newly released security baseline, FedRAMP Tailored, which is designed for Cloud Service Providers (CSPs) with Low-Impact Software- as-a-Service (LI-SaaS) Systems. The webinar will address what FedRAMP Tailored is, how it was developed, how the finalized version differs from draft versions released for public comment, and other useful information geared toward CSPs, agencies, and 3PAOs. Discussion also address how to begin a FedRAMP Tailored authorization. diff --git a/content/events/2017/2017-12-12-workshop-making-government-websites-with-github-federalist-us-web-design-standards.md b/content/events/2017/2017-12-12-workshop-making-government-websites-with-github-federalist-us-web-design-standards.md new file mode 100644 index 0000000000..1aaaa877ab --- /dev/null +++ b/content/events/2017/2017-12-12-workshop-making-government-websites-with-github-federalist-us-web-design-standards.md @@ -0,0 +1,45 @@ +--- +slug: workshop-making-government-websites-with-github-federalist-us-web-design-standards +title: 'Workshop: Making Government Websites with GitHub, Federalist, & U.S. Web Design Standards' +summary: 'Come learn how to create a simple, compliant government website, using Federalist, GitHub and the U.S. Web Design Standards.' +event_type: in-person +date: 2017-12-12 09:00:00 -0400 +end_date: 2017-12-12 12:00:00 -0400 +event_organizer: Federalist +host: Will Slack +registration_url: https://www.eventbrite.com/e/workshop-making-government-websites-with-federalist-github-basics-registration-39457265744 +youtube_id: +venue: + venue_name: The General Services Administration + room: 4150 + address: 1800 F St. + city: Washington + state: D.C. + zip: 20006 + country: USA + map: https://goo.gl/maps/bFWBD6QfDLA2 + +--- + +Come learn how to create a simple, compliant government website, using Federalist, GitHub and the U.S. Web Design Standards. + +This workshop will provide you and your team with an overview of using TTS’s new government-specific tools in combination with GitHub. Then we’ll show you how, together, they make it easier than ever to create and launch compliant, government websites. + +The second part of the workshop is your chance to get hands-on experience with these tools. We are designing three breakout sessions aimed at helping those on your team publish on Federalist by the end of the day. + +### Schedule +* 9 - 9:15am — Arrivals +* 9:15 - 10am — Federalist overview +* 10 - 10:45am — Breakout working groups +* 10:45am — Take temperature of the room +* 10:45 — 11am - Break +* 11 - 12:00pm — Further learning and discussion + + +When you register for the event, we’d like to know: +- Are you interested in a GitHub-for-beginners training? What specific questions about GitHub would you want the training to cover? +- Do you have a website you think Federalist might be a good candidate for hosting? +- If so, tell us about the website +- Are you interested in learning how to design, code, and build Federalist websites? +- Are you interested in more details on managing a Federalist site in your agency? (non technical discussion) +- Any other areas/questions you’d like us to cover at this event? diff --git a/data/social.yml b/data/social.yml index 82809d962a..498b48572d 100644 --- a/data/social.yml +++ b/data/social.yml @@ -22,9 +22,3 @@ sources: link : "http://www.youtube.com/digitalgov" shortcode : "youtube" action : "Connect on YouTube" - - - name : "Google Plus" - username : nil - link : "https://plus.google.com/109077476228639396954?rel=author" - shortcode : "gplus" - action : "Connect on Google+" diff --git a/gulpfile.js b/gulpfile.js index 760afbab54..462cdf4244 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,4 +1,6 @@ var gulp = require("gulp"), + path = require('path'), + gutil = require('gulp-util'), watch = require('gulp-watch'), vinylPaths = require('vinyl-paths'), replace = require("gulp-replace-name"), @@ -8,6 +10,8 @@ var gulp = require("gulp"), del = require("del"), concat = require('gulp-concat'), cleanCSS = require('gulp-clean-css'), + cssnano = require('gulp-cssnano'), + sourcemaps = require('gulp-sourcemaps'), combineMq = require('gulp-combine-mq'), strip = require('gulp-strip-css-comments'), bless = require('gulp-bless'), @@ -27,6 +31,9 @@ var gulp = require("gulp"), s3 = require('gulp-s3-upload')(s3config), cp = require('child_process'); +const USWDS_DIST = 'node_modules/uswds/dist'; +const USWDS_DIST_DIR = path.join(__dirname, ...USWDS_DIST.split('/')); + gulp.task("file-tidy", function (done) { return gulp.src("content/images/_inbox/*.{png,jpg,jpeg}") @@ -401,12 +408,52 @@ gulp.task("cleanup", ["done"], function (done) { gulp.task("process-img", ["cleanup"], function () {}); +// - - - - - - - - - - - - - - - - - +// Build USWDS styles + +gulp.task('copy-uswds-assets', () => { + return gulp.src(`${USWDS_DIST}/@(js|fonts|img)/**/**`) + .pipe(gulp.dest('./themes/digital.gov/static/lib/uswds')); +}); + +gulp.task('sass', function (done) { + return gulp.src('./themes/digital.gov/src/sass/**/*.scss') + .pipe(sourcemaps.init()) + .pipe(sass({ + includePaths: [ + path.join(USWDS_DIST_DIR, 'scss'), + ] + }).on('error', sass.logError)) + .pipe( + autoprefixer({ + browsers: [ + '> 1%', + 'Last 2 versions', + 'IE 11', + 'IE 10', + 'IE 9', + ], + cascade: false, + })) + .pipe(cssnano({ + safe: true, + // XXX see https://github.com/ben-eb/cssnano/issues/340 + mergeRules: false, + })) + .pipe(rename({ + suffix: '.min', + })) + .pipe(sourcemaps.write()) + .pipe(gulp.dest('./themes/digital.gov/static/lib/uswds/css')); +}); + + // - - - - - - - - - - - - - - - - - gulp.task("watch", function () { - gulp.watch("content/images/_inbox/*.{png,jpg,jpeg}", ["process-img"]) + gulp.watch('./themes/digital.gov/src/sass/**/*.scss', ['sass']); }) // - - - - - - - - - - - - - - - - - // Set watch as default task -gulp.task("default", ["watch", "process-img"]) +gulp.task('default', ['watch', 'sass', 'copy-uswds-assets']); diff --git a/package.json b/package.json index f2293f6f1d..f3e022b458 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,11 @@ }, "dependencies": { "change-case": "^3.0.1", - "node-notifier": "^5.1.2" + "gulp-cssnano": "^2.1.2", + "gulp-sourcemaps": "^2.6.1", + "gutil": "^1.6.4", + "node-notifier": "^5.1.2", + "path": "^0.12.7", + "uswds": "^1.4.2" } } diff --git a/themes/digital.gov/layouts/partials/body-top.html b/themes/digital.gov/layouts/partials/body-top.html index bee7aa56f8..3198fb3256 100644 --- a/themes/digital.gov/layouts/partials/body-top.html +++ b/themes/digital.gov/layouts/partials/body-top.html @@ -15,7 +15,7 @@ {{ partial "notice-bar.html" . }} {{ end }} - + {{ partial "usa-banner.html" . }} {{ partial "nav-fixed-navbar.html" . }} Skip to page content diff --git a/themes/digital.gov/layouts/partials/footer-end-scripts.html b/themes/digital.gov/layouts/partials/footer-end-scripts.html index 4a2e425744..7acfb5202e 100644 --- a/themes/digital.gov/layouts/partials/footer-end-scripts.html +++ b/themes/digital.gov/layouts/partials/footer-end-scripts.html @@ -191,6 +191,8 @@ + + {{ if eq .Section "posts" }} diff --git a/themes/digital.gov/layouts/partials/head.html b/themes/digital.gov/layouts/partials/head.html index 2de8f58a09..b565074ad7 100644 --- a/themes/digital.gov/layouts/partials/head.html +++ b/themes/digital.gov/layouts/partials/head.html @@ -101,6 +101,7 @@ + diff --git a/themes/digital.gov/layouts/partials/notice-bar.html b/themes/digital.gov/layouts/partials/notice-bar.html index 7777e85cba..821ac5e340 100644 --- a/themes/digital.gov/layouts/partials/notice-bar.html +++ b/themes/digital.gov/layouts/partials/notice-bar.html @@ -6,9 +6,10 @@ {{ $cleanurl := replaceRE "^(.)" "/$1" $cleanurl }} {{ $cleanurl := replaceRE "//" "/" $cleanurl }} {{ $siteslink := printf "https://%s" (printf "www.digitalgov.gov%s" $cleanurl) }} +{{ $cleanurl := printf "digitalgov.gov%s" $cleanurl }} -
+
-

This is the Federalist version of DigitalGov. Visit the Sites page {{ $cleanurl }}

+

This is the prerelease preview of DigitalGov. Visit the live page {{ $cleanurl }}

diff --git a/themes/digital.gov/layouts/partials/usa-banner.html b/themes/digital.gov/layouts/partials/usa-banner.html new file mode 100644 index 0000000000..f34513f9da --- /dev/null +++ b/themes/digital.gov/layouts/partials/usa-banner.html @@ -0,0 +1,47 @@ +{{ $uswds_img_path := "lib/uswds/img"}} + +
+
+
+
+ {{ $uswds_asset := "favicons/favicon-57.png" }} + {{ $path := printf "%s/%s" $uswds_img_path $uswds_asset }} + {{ $path := (replace $path "//" "/") | relURL }} + U.S. flag +

An official website of the United States government

+ +
+
+
+
+ {{ $uswds_asset := "icon-dot-gov.svg" }} + {{ $path := printf "%s/%s" $uswds_img_path $uswds_asset }} + {{ $path := (replace $path "//" "/") | relURL }} + Dot gov +
+

+ The .gov means it’s official. +
+ Federal government websites often end in .gov or .mil. Before sharing sensitive information, make sure you're on a federal government site. +

+
+
+
+ {{ $uswds_asset := "icon-https.svg" }} + {{ $path := printf "%s/%s" $uswds_img_path $uswds_asset }} + {{ $path := (replace $path "//" "/") | relURL }} + Https +
+

+ The site is secure. +
+ The https:// ensures that you are connecting to the official website and that any information you provide is encrypted and transmitted securely. +

+
+
+
+
+
diff --git a/themes/digital.gov/src/sass/_dg-banner.scss b/themes/digital.gov/src/sass/_dg-banner.scss new file mode 100644 index 0000000000..d81e6fdbd5 --- /dev/null +++ b/themes/digital.gov/src/sass/_dg-banner.scss @@ -0,0 +1,204 @@ +.usa-banner { + background-color: $color-gray-lightest; + padding-bottom: size(7px); + + @include media($small-screen) { + font-size: $h6-font-size; + padding-bottom: 0; + } +} + +.usa-banner-content { + @include padding(null $site-margins-mobile 3px $site-margins-mobile); + background-color: transparent; + font-size: $h5-font-size; + padding-top: size(20px); + width: 100%; + + @include media($medium-screen) { + padding-bottom: size(23px); + padding-top: size(40px); + } + + @include media($nav-width) { + @include padding(null $site-margins); + } + + p { + &:first-child { + margin-top: size(10px); + + @include media($medium-screen) { + margin-top: 0; + } + } + } +} + +.usa-banner-inner { + @include outer-container(); + @include padding(null $site-margins-mobile); + max-width: $site-max-width; + + @include media($nav-width) { + @include padding(null $site-margins); + } +} + +.usa-banner-header { + @include padding(size(5.5px) null); + font-size: size(12px); + font-weight: $font-normal; + + @include media($small-screen) { + @include padding(0 null); + } + + p { + @include margin(0 null); + display: inline; + overflow: hidden; + vertical-align: middle; + + @include media($small-screen) { + @include margin(2px null); + display: inline-block; + } + } + + img { + float: left; + margin-right: size(10px); + margin-top: size(10px); + width: size(24px); + + @include media($small-screen) { + margin-right: size(7px); + width: size(20px); + } + } +} + +.usa-banner-header-expanded { + align-items: center; + border-bottom: 1px solid $color-gray-light; + display: flex; + font-size: $h5-font-size; + min-height: size(56px); + padding-right: size(30px); + + @include media($small-screen) { + border-bottom: none; + display: block; + font-size: size(12px); + font-weight: $font-normal; + min-height: 0; + padding-right: 0; + } + + > .usa-banner-inner { + margin-left: 0; + + @include media($small-screen) { + margin-left: auto; + } + } + + img { + margin-right: size(24px); + + @include media($small-screen) { + margin-right: size(7px); + } + } + + p { + line-height: $heading-line-height; + vertical-align: top; + + @include media($small-screen) { + line-height: $base-line-height; + vertical-align: middle; + } + } +} + +.usa-banner-button { + @include button-unstyled; + @include padding(size(13px) null null size(48px)); + background-position-x: right; + color: $color-primary; + display: block; + font-size: size(12px); + height: size(43px); + left: 0; + position: absolute; + text-decoration: underline; + top: 0; + width: 100%; + + @include media($small-screen) { + @include padding(0 null null 0); + /* stylelint-disable declaration-block-no-ignored-properties */ + display: inline; + height: initial; + margin-left: 3px; + position: relative; + vertical-align: middle; + width: initial; + /* stylelint-enable */ + } + + &:hover { + color: $color-primary-darker; + text-decoration: underline; + } + + &[aria-expanded=false] { + @include display-icon(angle-arrow-down-primary, after, size(10px), 0, hover); + background-image: none; + + &::after { + background-position-y: 1px; + } + } + + &[aria-expanded=true] { + @include display-icon(close, after, size(13px), 0, no-hover); + background-image: none; + height: size(56px); + + @include media($small-screen) { + @include display-icon(angle-arrow-up-primary, after, size(10px), 0, hover); + height: initial; + padding: 0; + position: relative; + + &::after { + background-position-y: 1px; + } + } + + &::after { + position: absolute; + right: size(15px); + top: size(21.5px); + + @include media($small-screen) { + position: static; + } + } + + .usa-banner-button-text { + display: none; + + @include media($small-screen) { + display: inline; + } + } + } +} + +.usa-banner-icon { + width: size(38px); +} diff --git a/themes/digital.gov/src/sass/_dg-buttons.scss b/themes/digital.gov/src/sass/_dg-buttons.scss new file mode 100644 index 0000000000..70b4ea8785 --- /dev/null +++ b/themes/digital.gov/src/sass/_dg-buttons.scss @@ -0,0 +1,217 @@ +// Buttons variables + +$button-stroke: inset 0 0 0 2px; + +// Buttons + +// This mixin is only needed until we fully remove the +// deprecated usa-button-disabled style. +@mixin disabledesque { + background-color: $color-gray-lighter; + pointer-events: none; + + &:hover, + &.usa-button-hover, + &:active, + &.usa-button-active, + &:focus, + &.usa-focus { + background-color: $color-gray-lighter; + border: 0; + box-shadow: none; + } +} + +/* stylelint-disable selector-no-qualifying-type */ +.usa-button, +.usa-button-primary, +.usa-button:visited, +.usa-button-primary:visited { +// remove all base element styling +// button, +// [type=button], +// [type=submit], +// [type=reset], +// [type=image] + @include font-smoothing; + @include margin(0.5em 0.5em 0.5em null); + appearance: none; + background-color: $color-primary; + border: 0; + border-radius: $button-border-radius; + color: $color-white; + cursor: pointer; + display: inline-block; + font-family: $font-sans; + font-size: $base-font-size; + font-weight: $font-bold; + line-height: 1; + padding: 1rem 2rem; + text-align: center; + text-decoration: none; + width: 100%; + + @include media($small-screen) { + width: auto; + } + + &:hover, + &.usa-button-hover { + background-color: $color-primary-darker; + border-bottom: 0; + color: $color-white; + text-decoration: none; + } + + &:active, + &.usa-button-active { + background-color: $color-primary-darkest; + } + + &.usa-button-primary-alt { + background-color: $color-primary-alt; + color: $color-base; + + &:hover, + &.usa-button-hover { + background-color: $color-primary-alt-dark; + } + + &:active, + &.usa-button-active { + background-color: $color-primary-alt-darkest; + color: $color-white; + } + } + + &.usa-button-secondary { + background-color: $color-white; + box-shadow: $button-stroke $color-primary; + color: $color-primary; + + &:hover, + &.usa-button-hover { + box-shadow: $button-stroke $color-primary-darker; + color: $color-primary-darker; + } + + &:active, + &.usa-button-active { + box-shadow: $button-stroke $color-primary-darkest; + color: $color-primary-darkest; + } + } + + &.usa-button-secondary-inverse, + &.usa-button-outline-inverse { // Outline inverse to be deprecated in 2.0 + background: transparent; + box-shadow: $button-stroke $color-white; + color: $color-white; + + &:hover, + &.usa-button-hover { + box-shadow: $button-stroke $color-gray-lighter; + color: $color-gray-lighter; + } + + &:active, + &.usa-button-active { + box-shadow: $button-stroke $color-gray-light; + color: $color-gray-lighter; + } + } + + &.usa-button-gray { + background-color: $color-gray; + + &:hover, + &.usa-button-hover { + background-color: $color-gray-dark; + } + + &:active, + &.usa-button-active { + background-color: $color-base; + } + } + + &.usa-button-red { + background-color: $color-secondary; + + &:hover, + &.usa-button-hover { + background-color: $color-secondary-dark; + } + + &:active, + &.usa-button-active { + background-color: $color-secondary-darkest; + } + } + + &.usa-button-big { + font-size: 1.9rem; + padding: 1.5rem 3rem; + } + + &:disabled { + @include disabledesque; + } +} +/* stylelint-disable */ + +.usa-button-disabled // Deprecated +{ + @include disabledesque +} + +.usa-button-secondary-disabled, // Deprecated +.usa-button-secondary-inverse-disabled, // Deprecated +.usa-button-secondary:disabled, +.usa-button-secondary-inverse:disabled, +.usa-button-outline-inverse:disabled { // Outline inverse to be deprecated in 2.0 + box-shadow: $button-stroke $color-gray-lighter; + pointer-events: none; + color: $color-gray-lighter; + + &:hover, + &.usa-button-hover, + &:active, + &.usa-button-active, + &:focus, + &.usa-focus { + background-color: $color-white; + border: 0; + } +} + +html .usa-button-secondary-disabled, // Deprecated +.usa-button-secondary:disabled { + background-color: $color-white; +} + +html .usa-button-secondary-inverse-disabled, // Deprecated +.usa-button-secondary-inverse:disabled { + background-color: transparent; + color: $color-gray; + box-shadow: $button-stroke $color-gray; +} + +@mixin button-unstyled { + background-color: transparent; + border: 0; + border-radius: 0; + font-weight: $font-normal; + margin: 0; + padding: 0; + text-align: left; + -webkit-font-smoothing: auto; + + &:hover { + background-color: transparent; + } +} + +.usa-button-unstyled { + @include button-unstyled; +} diff --git a/themes/digital.gov/src/sass/_dg-functions.scss b/themes/digital.gov/src/sass/_dg-functions.scss new file mode 100644 index 0000000000..6c606812f8 --- /dev/null +++ b/themes/digital.gov/src/sass/_dg-functions.scss @@ -0,0 +1,9 @@ +@function size($pixels){ + $pxToRem: #{($pixels / $base-rem)}rem; + @return $pxToRem; +} + +@function size-sans($pixels){ + $normalizedSans: #{($pixels / $base-rem) * $sans-normalize-multiplier}rem; + @return $normalizedSans; +} diff --git a/themes/digital.gov/src/sass/_dg-normalize.scss b/themes/digital.gov/src/sass/_dg-normalize.scss new file mode 100644 index 0000000000..fd63990aa3 --- /dev/null +++ b/themes/digital.gov/src/sass/_dg-normalize.scss @@ -0,0 +1,434 @@ +@if $scope-normalize == false { + html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ + } + + body { + margin: 0; + } + + article, + aside, + details, + figcaption, + figure, + footer, + header, + hgroup, + main, + menu, + nav, + section, + summary { + display: block; + } + + audio, + canvas, + progress, + video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ + } + + audio:not([controls]) { + display: none; + height: 0; + } + + [hidden], + template { + display: none; + } + + a { + background-color: transparent; + } + + a:active, + a:hover { + outline: 0; + } + + abbr[title] { + border-bottom: 1px dotted; + } + + b, + strong { + font-weight: bold; + } + + dfn { + font-style: italic; + } + + h1 { + font-size: 2em; + margin: 0.67em 0; + } + + mark { + background: #ff0; + color: #000; + } + + small { + font-size: 80%; + } + + sub, + sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + + sup { + top: -0.5em; + } + + sub { + bottom: -0.25em; + } + + img { + border: 0; + } + + svg:not(:root) { + overflow: hidden; + } + + figure { + margin: 1em 40px; + } + + hr { + box-sizing: content-box; + height: 0; + } + + pre { + overflow: auto; + } + + code, + kbd, + pre, + samp { + font-family: monospace, monospace; + font-size: 1em; + } + + button, + input, + optgroup, + select, + textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ + } + + button { + overflow: visible; + } + + button, + select { + text-transform: none; + } + + button, + html input[type="button"], /* 1 */ + input[type="reset"], + input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ + } + + button[disabled], + html input[disabled] { + cursor: default; + } + + button::-moz-focus-inner, + input::-moz-focus-inner { + border: 0; + padding: 0; + } + + input { + line-height: normal; + } + + input[type="checkbox"], + input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ + } + + input[type="number"]::-webkit-inner-spin-button, + input[type="number"]::-webkit-outer-spin-button { + height: auto; + } + + input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + box-sizing: content-box; /* 2 */ + } + + input[type="search"]::-webkit-search-cancel-button, + input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; + } + + fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; + } + + legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ + } + + textarea { + overflow: auto; + } + + optgroup { + font-weight: bold; + } + + table { + border-collapse: collapse; + border-spacing: 0; + } + + td, + th { + padding: 0; + } +} @else { + .normalize html, html.normalize { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ + } + .normalize body, body.normalize { + margin: 0; + } + + .normalize article, article.normalize, + .normalize aside, aside.normalize, + .normalize details, details.normalize, + .normalize figcaption, figcaption.normalize, + .normalize figure, figure.normalize, + .normalize footer, footer.normalize, + .normalize header, header.normalize, + .normalize hgroup, hgroup.normalize, + .normalize main, main.normalize, + .normalize menu, menu.normalize, + .normalize nav, nav.normalize, + .normalize section, section.normalize, + .normalize summary, summary.normalize { + display: block; + } + + .normalize audio, audio.normalize, + .normalize canvas, canvas.normalize, + .normalize progress, progress.normalize, + .normalize video, video.normalize { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ + } + + .normalize audio:not([controls]), audio:not([controls]).normalize { + display: none; + height: 0; + } + + .normalize [hidden], [hidden].normalize, + .normalize template, template.normalize { + display: none; + } + + .normalize a, a.normalize { + background-color: transparent; + } + + .normalize a:active, a:active.normalize, + .normalize a:hover, a:hover.normalize { + outline: 0; + } + + .normalize abbr[title], abbr[title].normalize { + border-bottom: 1px dotted; + } + + .normalize b, b.normalize, + .normalize strong, strong.normalize { + font-weight: bold; + } + + .normalize dfn, dfn.normalize { + font-style: italic; + } + + h1 { + font-size: 2em; + margin: 0.67em 0; + } + + .normalize mark, mark.normalize { + background: #ff0; + color: #000; + } + + .normalize small, small.normalize { + font-size: 80%; + } + + .normalize sub, sub.normalize, + .normalize sup, sup.normalize { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + + .normalize sup, sup.normalize { + top: -0.5em; + } + + .normalize sub, sub.normalize { + bottom: -0.25em; + } + + .normalize img, img.normalize { + border: 0; + } + + .normalize svg:not(:root), svg:not(:root).normalize { + overflow: hidden; + } + + .normalize figure, figure.normalize { + margin: 1em 40px; + } + + .normalize hr, hr.normalize { + box-sizing: content-box; + height: 0; + } + + .normalize pre, pre.normalize { + overflow: auto; + } + + .normalize code, code.normalize, + .normalize kbd, kbd.normalize, + .normalize pre, pre.normalize, + .normalize samp, samp.normalize { + font-family: monospace, monospace; + font-size: 1em; + } + + .normalize button, button.normalize, + .normalize input, input.normalize, + .normalize optgroup, optgroup.normalize, + .normalize select, select.normalize, + .normalize textarea, textarea.normalize { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ + } + + .normalize button, button.normalize { + overflow: visible; + } + + .normalize button, button.normalize, + .normalize select, select.normalize { + text-transform: none; + } + + .normalize button, button.normalize, + html input[type="button"], /* 1 */ + .normalize input[type="reset"], input[type="reset"].normalize, + .normalize input[type="submit"], input[type="submit"].normalize { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ + } + + .normalize button[disabled], button[disabled].normalize, + html input[disabled] { + cursor: default; + } + + .normalize button::-moz-focus-inner, button::-moz-focus-inner.normalize, + .normalize input::-moz-focus-inner, input::-moz-focus-inner.normalize { + border: 0; + padding: 0; + } + + .normalize input, input.normalize { + line-height: normal; + } + + .normalize input[type="checkbox"], input[type="checkbox"].normalize, + .normalize input[type="radio"], input[type="radio"].normalize { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ + } + + .normalize input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-inner-spin-button.normalize, + .normalize input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-outer-spin-button.normalize { + height: auto; + } + + .normalize input[type="search"], input[type="search"].normalize { + -webkit-appearance: textfield; /* 1 */ + box-sizing: content-box; /* 2 */ + } + + .normalize input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-cancel-button.normalize, + .normalize input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-decoration.normalize { + -webkit-appearance: none; + } + + .normalize fieldset, fieldset.normalize { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; + } + + .normalize legend, legend.normalize { + border: 0; /* 1 */ + padding: 0; /* 2 */ + } + + .normalize textarea, textarea.normalize { + overflow: auto; + } + + .normalize optgroup, optgroup.normalize { + font-weight: bold; + } + + .normalize table, table.normalize { + border-collapse: collapse; + border-spacing: 0; + } + + .normalize td, td.normalize, + .normalize th, th.normalize { + padding: 0; + } +} diff --git a/themes/digital.gov/src/sass/_dg-uswds-overrides.scss b/themes/digital.gov/src/sass/_dg-uswds-overrides.scss new file mode 100644 index 0000000000..0d345e1d3a --- /dev/null +++ b/themes/digital.gov/src/sass/_dg-uswds-overrides.scss @@ -0,0 +1,99 @@ +.usa-button, +.usa-button-primary, +.usa-button:visited, +.usa-button-primary:visited { + padding: size(10px) size(20px); +} + +.usa-banner { + position: relative; +} + +.usa-banner-inner { + @include media($medium-screen) { + padding: 0 calc(2% + 8px); + width: 96%; + } + @include media($large-screen) { + margin: 0 auto; + padding: 0 size(8px); + width: 960px; + } +} + +.usa-banner-content { + @include media($medium-screen) { + padding-left: calc(2% + 8px); + padding-right: calc(2% + 8px); + width: 96%; + } + @include media($large-screen) { + padding-left: size(8px); + padding-right: size(8px); + width: 960px; + } +} + +.usa-banner-header { + font-size: size(10px); + @include media($small-screen) { + font-size: size(12px); + @include padding(0 0 3px 0); + } + img { + display: block; + float: left; + margin-right: size(10px); + margin-top: 0; + vertical-align: middle; + width: size(24px); + + @include media($small-screen) { + display: inline-block; + float: none; + margin-right: size(10px); + width: size(20px); + } + } + p { + @include position(1px null null -2px); + display: block; + line-height: 1.15; + position: relative; + @include media($small-screen) { + @include position(auto null null auto); + display: inline; + line-height: 1; + overflow: visible; + margin: 0; + } + } + &-expanded { + img { + margin-right: size(10px); + } + } +} + +.usa-accordion-button[aria-expanded=false], +.usa-accordion-button[aria-expanded=true] { + background-size: size(15px); + &:after { + height: size(10px); + width: size(10px); + } + @include media($small-screen) { + top: 1px; + padding-left: 4px; + } +} + +.usa-media_block { + &-img { + float: left; + margin-right: 1rem; + } + &-body { + overflow: hidden; + } +} diff --git a/themes/digital.gov/src/sass/_dg-variables.scss b/themes/digital.gov/src/sass/_dg-variables.scss new file mode 100644 index 0000000000..33485dc440 --- /dev/null +++ b/themes/digital.gov/src/sass/_dg-variables.scss @@ -0,0 +1,169 @@ +$base-rem: 16px; // a new value distinct from USWDS static var; +$sans-normalize-multiplier: 1.0; // multiplier for trebuchet; taking Source Sans as 1.0 + +@import 'dg-functions'; + +// Typography +// Removing the from $em-base so we are not inheriting that +// value from Bourbon. +//$em-base: 10px; +$base-font-size-px: 17px; +$small-font-size-px: 14px; +$lead-font-size-px: 20px; +$title-font-size-px: 52px; +$h1-font-size-px: 40px; +$h2-font-size-px: 30px; +$h3-font-size-px: 20px; +$h4-font-size-px: 17px; +$h5-font-size-px: 15px; +$h6-font-size-px: 13px; + + +$base-font-size: size($base-font-size-px); +$small-font-size: size($small-font-size-px); +$lead-font-size: size($lead-font-size-px); +$title-font-size: size($title-font-size-px); +$h1-font-size: size($h1-font-size-px); +$h2-font-size: size($h2-font-size-px); +$h3-font-size: size($h3-font-size-px); +$h4-font-size: size($h4-font-size-px); +$h5-font-size: size($h5-font-size-px); +$h6-font-size: size($h6-font-size-px); +// $base-line-height: 1.5; +// $heading-line-height: 1.3; +// $lead-line-height: 1.7; + +$font-sans: Trebuchet,Tahoma,sans-serif; +// $font-serif: 'Merriweather', $georgia; + +// TODO these should be called font-weight-${} +// $font-normal: 400; +// $font-bold: 700; + +// Color +// $color-blue: #0071bc; +// $color-blue-darker: #205493; +// $color-blue-darkest: #112e51; + +// $color-aqua: #02bfe7; +// $color-aqua-dark: #00a6d2; +// $color-aqua-darkest: #046b99; +// $color-aqua-light: #9bdaf1; +// $color-aqua-lightest: #e1f3f8; + +// $color-red: #e31c3d; +// $color-red-dark: #cd2026; +// $color-red-darkest: #981b1e; +// $color-red-light: #e59393; +// $color-red-lightest: #f9dede; + +// $color-white: #ffffff; +// $color-black: #000000; +// $color-black-light: #212121; + +// $color-gray-dark: #323a45; +// $color-gray: #5b616b; +// $color-gray-medium: #757575; +// $color-gray-light: #aeb0b5; +// $color-gray-lighter: #d6d7d9; +// $color-gray-lightest: #f1f1f1; + +// $color-gray-warm-dark: #494440; +// $color-gray-warm-light: #e4e2e0; +// $color-gray-cool-light: #dce4ef; + +// $color-gold: #fdb81e; +// $color-gold-light: #f9c642; +// $color-gold-lighter: #fad980; +// $color-gold-lightest: #fff1d2; + +// $color-green: #2e8540; +// $color-green-light: #4aa564; +// $color-green-lighter: #94bfa2; +// $color-green-lightest: #e7f4e4; + +// $color-cool-blue: #205493; +// $color-cool-blue-light: #4773aa; +// $color-cool-blue-lighter: #8ba6ca; +// $color-cool-blue-lightest: #dce4ef; + +// $color-purple: #4c2c92; + +// Functional colors +// $color-primary: $color-blue; +// $color-primary-darker: $color-blue-darker; +// $color-primary-darkest: $color-blue-darkest; + +// $color-primary-alt: $color-aqua; +// $color-primary-alt-dark: $color-aqua-dark; +// $color-primary-alt-darkest: $color-aqua-darkest; +// $color-primary-alt-light: $color-aqua-light; +// $color-primary-alt-lightest: $color-aqua-lightest; + +// $color-secondary: $color-red; +// $color-secondary-dark: $color-red-dark; +// $color-secondary-darkest: $color-red-darkest; +// $color-secondary-light: $color-red-light; +// $color-secondary-lightest: $color-red-lightest; + +// $color-base: $color-black-light; +// $color-focus: $color-gray-light; +// $color-visited: $color-purple; + +// $color-shadow: rgba(#000, 0.3); +// $color-transparent: rgba(#000, 0); + +// Mobile First Breakpoints +// $small-screen: 481px; +$medium-screen: 801px; +$large-screen: 1025px; + +// Grid column counts by screen size +// $grid-columns-small: 1; +// $grid-columns-medium: 6; +// $grid-columns-large: 12; + +// @media single-keyword helpers +// $small: new-breakpoint(min-width $small-screen $grid-columns-small); +// $medium: new-breakpoint(min-width $medium-screen $grid-columns-medium); +// $large: new-breakpoint(min-width $large-screen $grid-columns-large); + +// Relative font and image file paths +// $font-path: '../fonts'; +// $image-path: '../img'; + +// Set $asset-pipeline to true if you're using the Rails Asset Pipeline +// $asset-pipeline: false; + +// Magic Numbers +$text-max-width-px: 530px; +$lead-max-width-px: 770px; +$site-margins-px: 30px; +$site-margins-mobile-px: 16px; +$input-max-width-px: 460px; + +$text-max-width: size($text-max-width-px); +$lead-max-width: size($lead-max-width-px); +$site-max-width: 960px; +$site-margins: size($site-margins-px); +$site-margins-mobile: size($site-margins-mobile-px); +// $article-max-width: 600px; +$input-max-width: size($input-max-width-px); +// $label-border-radius: 2px; +// $checkbox-border-radius: 2px; +// $border-radius: 3px; +// $button-border-radius: 5px; +// $box-shadow: 0 0 2px $color-shadow; +// $focus-outline: 2px dotted $color-gray-light; +// $focus-spacing: 3px; +// $nav-width: 951px; + +// 44 x 44 pixels hit target following Apple iOS Human Interface +// Guidelines +// $hit-area: 4.4rem; + +// $spacing-x-small: 0.5rem; +// $spacing-small: 1rem; +// $spacing-md-small: 1.5rem; +// $spacing-medium: 2rem; +// $spacing-large: 3rem; diff --git a/themes/digital.gov/src/sass/dg-uswds.scss b/themes/digital.gov/src/sass/dg-uswds.scss new file mode 100644 index 0000000000..2181c00b12 --- /dev/null +++ b/themes/digital.gov/src/sass/dg-uswds.scss @@ -0,0 +1,61 @@ +// USWDS SASS variable overrides go here, before we import USWDS itself. + +$border-box-sizing: false; +$scope-normalize: true; + +@import 'dg-variables'; + +// Copy imports from USWDS module to control imports + +/*! uswds @version */ + + +// Vendor -------------- // +@import 'lib/bourbon'; +@import 'lib/neat'; +@import 'dg-normalize'; + +// Core -------------- // +@import 'core/variables'; +@import 'core/fonts'; +@import 'core/grid'; +@import 'core/utilities'; +@import 'core/base'; + +// Elements -------------- // +// Styles basic HTML elements +@import 'dg-buttons'; +/* +@import 'elements/embed'; +@import 'elements/figure'; +@import 'elements/inputs'; +@import 'elements/labels'; +@import 'elements/list'; +@import 'elements/table'; +@import 'elements/typography'; + +// Components -------------- // +*/ +@import 'components/accordions'; +/* +@import 'components/alerts'; +*/ +@import 'dg-banner'; +/* +@import 'components/footer'; +@import 'components/forms'; +@import 'components/graphic-list'; +@import 'components/header'; +@import 'components/hero'; +@import 'components/layout'; +@import 'components/media-block'; +@import 'components/navigation'; +@import 'components/search'; +@import 'components/section'; +@import 'components/sidenav'; +@import 'components/skipnav'; +*/ + +// New custom CSS rules can go here. + +@import 'dg-uswds-overrides'; diff --git a/themes/digital.gov/static/css/override.css b/themes/digital.gov/static/css/override.css index c450098029..343c6f1feb 100644 --- a/themes/digital.gov/static/css/override.css +++ b/themes/digital.gov/static/css/override.css @@ -18,11 +18,7 @@ form#commentform input[type="submit"]:hover,form#commentform input[type="button" #footer {background:#003333;color:#ccdfcc;} #footer a, #footer a:link, #footer a:visited {color:#ffa49f;} #footer a:hover, #footer a:active {color:#ff5049;} - * html body { margin-top: 32px !important; } - @media screen and ( max-width: 782px ) { - html { margin-top: 46px !important; } - * html body { margin-top: 46px !important; } - } +* html body { margin-top: 32px !important; } .screenreaders { position: absolute; diff --git a/themes/digital.gov/static/lib/uswds/css/dg-uswds.min.css b/themes/digital.gov/static/lib/uswds/css/dg-uswds.min.css new file mode 100644 index 0000000000..83c9143bfd --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/css/dg-uswds.min.css @@ -0,0 +1,2 @@ +/*! uswds @version */.normalize html,html.normalize{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}.normalize body,body.normalize{margin:0}.normalize article,.normalize aside,.normalize details,.normalize figcaption,.normalize figure,.normalize footer,.normalize header,.normalize hgroup,.normalize main,.normalize menu,.normalize nav,.normalize section,.normalize summary,article.normalize,aside.normalize,details.normalize,figcaption.normalize,figure.normalize,footer.normalize,header.normalize,hgroup.normalize,main.normalize,menu.normalize,nav.normalize,section.normalize,summary.normalize{display:block}.normalize audio,.normalize canvas,.normalize progress,.normalize video,audio.normalize,canvas.normalize,progress.normalize,video.normalize{display:inline-block;vertical-align:baseline}.normalize audio:not([controls]),audio:not([controls]).normalize{display:none;height:0}.normalize [hidden],.normalize template,[hidden].normalize,template.normalize{display:none}.normalize a,a.normalize{background-color:transparent}.normalize a:active,.normalize a:hover,a:active.normalize,a:hover.normalize{outline:0}.normalize abbr[title],abbr[title].normalize{border-bottom:1px dotted}.normalize b,.normalize strong,b.normalize,strong.normalize{font-weight:700}.normalize dfn,dfn.normalize{font-style:italic}h1{font-size:2em;margin:.67em 0}.normalize mark,mark.normalize{background:#ff0;color:#000}.normalize small,small.normalize{font-size:80%}.normalize sub,.normalize sup,sub.normalize,sup.normalize{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.normalize sup,sup.normalize{top:-.5em}.normalize sub,sub.normalize{bottom:-.25em}.normalize img,img.normalize{border:0}.normalize svg:not(:root),svg:not(:root).normalize{overflow:hidden}.normalize figure,figure.normalize{margin:1em 40px}.normalize hr,hr.normalize{box-sizing:content-box;height:0}.normalize pre,pre.normalize{overflow:auto}.normalize code,.normalize kbd,.normalize pre,.normalize samp,code.normalize,kbd.normalize,pre.normalize,samp.normalize{font-family:monospace,monospace;font-size:1em}.normalize button,.normalize input,.normalize optgroup,.normalize select,.normalize textarea,button.normalize,input.normalize,optgroup.normalize,select.normalize,textarea.normalize{color:inherit;font:inherit;margin:0}.normalize button,button.normalize{overflow:visible}.normalize button,.normalize select,button.normalize,select.normalize{text-transform:none}.normalize button,.normalize input[type=reset],.normalize input[type=submit],button.normalize,html input[type=button],input[type=reset].normalize,input[type=submit].normalize{-webkit-appearance:button;cursor:pointer}.normalize button[disabled],button[disabled].normalize,html input[disabled]{cursor:default}.normalize button::-moz-focus-inner,.normalize input::-moz-focus-inner,button::-moz-focus-inner.normalize,input::-moz-focus-inner.normalize{border:0;padding:0}.normalize input,input.normalize{line-height:normal}.normalize input[type=checkbox],.normalize input[type=radio],input[type=checkbox].normalize,input[type=radio].normalize{box-sizing:border-box;padding:0}.normalize input[type=number]::-webkit-inner-spin-button,.normalize input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button.normalize,input[type=number]::-webkit-outer-spin-button.normalize{height:auto}.normalize input[type=search],input[type=search].normalize{-webkit-appearance:textfield;box-sizing:content-box}.normalize input[type=search]::-webkit-search-cancel-button,.normalize input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-cancel-button.normalize,input[type=search]::-webkit-search-decoration.normalize{-webkit-appearance:none}.normalize fieldset,fieldset.normalize{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}.normalize legend,legend.normalize{border:0;padding:0}.normalize textarea,textarea.normalize{overflow:auto}.normalize optgroup,optgroup.normalize{font-weight:700}.normalize table,table.normalize{border-collapse:collapse;border-spacing:0}.normalize td,.normalize th,td.normalize,th.normalize{padding:0}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(../fonts/sourcesanspro-light-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/sourcesanspro-light-webfont.woff2) format("woff2"),url(../fonts/sourcesanspro-light-webfont.woff) format("woff"),url(../fonts/sourcesanspro-light-webfont.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(../fonts/sourcesanspro-regular-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/sourcesanspro-regular-webfont.woff2) format("woff2"),url(../fonts/sourcesanspro-regular-webfont.woff) format("woff"),url(../fonts/sourcesanspro-regular-webfont.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(../fonts/sourcesanspro-italic-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/sourcesanspro-italic-webfont.woff2) format("woff2"),url(../fonts/sourcesanspro-italic-webfont.woff) format("woff"),url(../fonts/sourcesanspro-italic-webfont.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(../fonts/sourcesanspro-bold-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/sourcesanspro-bold-webfont.woff2) format("woff2"),url(../fonts/sourcesanspro-bold-webfont.woff) format("woff"),url(../fonts/sourcesanspro-bold-webfont.ttf) format("truetype")}@font-face{font-family:Merriweather;font-style:normal;font-weight:300;src:url(../fonts/merriweather-light-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/merriweather-light-webfont.woff2) format("woff2"),url(../fonts/merriweather-light-webfont.woff) format("woff"),url(../fonts/merriweather-light-webfont.ttf) format("truetype")}@font-face{font-family:Merriweather;font-style:normal;font-weight:400;src:url(../fonts/merriweather-regular-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/merriweather-regular-webfont.woff2) format("woff2"),url(../fonts/merriweather-regular-webfont.woff) format("woff"),url(../fonts/merriweather-regular-webfont.ttf) format("truetype")}@font-face{font-family:Merriweather;font-style:italic;font-weight:400;src:url(../fonts/merriweather-italic-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/merriweather-italic-webfont.woff2) format("woff2"),url(../fonts/merriweather-italic-webfont.woff) format("woff"),url(../fonts/merriweather-italic-webfont.ttf) format("truetype")}@font-face{font-family:Merriweather;font-style:normal;font-weight:700;src:url(../fonts/merriweather-bold-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/merriweather-bold-webfont.woff2) format("woff2"),url(../fonts/merriweather-bold-webfont.woff) format("woff"),url(../fonts/merriweather-bold-webfont.ttf) format("truetype")}.usa-grid,.usa-grid-full{max-width:1200px;margin-left:auto;margin-right:auto;max-width:960px}.usa-grid-full:after,.usa-grid:after{clear:both;content:"";display:block}.usa-grid{padding-right:1rem;padding-left:1rem}@media screen and (min-width:801px){.usa-grid{padding-right:1.875rem;padding-left:1.875rem}}.usa-grid-full{padding:0}@media screen and (min-width:801px){.usa-width-one-whole{float:left;display:block;margin-right:4.82916%;width:100%}.usa-width-one-whole:last-child{margin-right:0}.usa-width-one-half{float:left;display:block;margin-right:4.82916%;width:47.58542%}.usa-width-one-half:last-child{margin-right:0}.usa-width-one-third{float:left;display:block;margin-right:4.82916%;width:30.11389%}.usa-width-one-third:last-child{margin-right:0}.usa-width-two-thirds{float:left;display:block;margin-right:4.82916%;width:65.05695%}.usa-width-two-thirds:last-child{margin-right:0}.usa-width-one-fourth{float:left;display:block;margin-right:4.82916%;width:47.58542%}.usa-width-one-fourth:last-child{margin-right:0}.usa-width-one-fourth:nth-child(2n){margin-right:0}.usa-width-three-fourths{float:left;display:block;margin-right:4.82916%;width:100%}.usa-width-three-fourths:last-child{margin-right:0}.usa-width-one-sixth{float:left;display:block;margin-right:4.82916%;width:30.11389%}.usa-width-one-sixth:last-child{margin-right:0}.usa-width-one-sixth:nth-child(3n){margin-right:0}.usa-width-five-sixths{float:left;display:block;margin-right:4.82916%;width:65.05695%}.usa-width-five-sixths:last-child{margin-right:0}.usa-width-one-twelfth{float:left;display:block;margin-right:4.82916%;width:30.11389%}.usa-width-one-twelfth:last-child{margin-right:0}.usa-width-one-twelfth:nth-child(3n){margin-right:0}.usa-width-five-twelfths{float:left;display:block;margin-right:4.82916%;width:30.11389%}.usa-width-five-twelfths:last-child{margin-right:0}.usa-width-seven-twelfths{float:left;display:block;margin-right:4.82916%;width:65.05695%}.usa-width-seven-twelfths:last-child{margin-right:0}}@media screen and (min-width:1025px){.usa-width-one-whole{float:left;display:block;margin-right:2.35765%;width:100%}.usa-width-one-whole:last-child{margin-right:0}.usa-width-one-half{float:left;display:block;margin-right:2.35765%;width:48.82117%}.usa-width-one-half:last-child{margin-right:0}.usa-width-one-third{float:left;display:block;margin-right:2.35765%;width:31.76157%}.usa-width-one-third:last-child{margin-right:0}.usa-width-two-thirds{float:left;display:block;margin-right:2.35765%;width:65.88078%}.usa-width-two-thirds:last-child{margin-right:0}.usa-width-one-fourth{float:left;display:block;margin-right:2.35765%;width:23.23176%}.usa-width-one-fourth:last-child{margin-right:0}.usa-width-one-fourth:nth-child(2n){float:left;display:block;margin-right:2.35765%;width:23.23176%}.usa-width-one-fourth:nth-child(2n):last-child{margin-right:0}.usa-width-one-fourth:nth-child(4n){margin-right:0}.usa-width-three-fourths{float:left;display:block;margin-right:2.35765%;width:74.41059%}.usa-width-three-fourths:last-child{margin-right:0}.usa-width-one-sixth{float:left;display:block;margin-right:2.35765%;width:14.70196%}.usa-width-one-sixth:last-child{margin-right:0}.usa-width-one-sixth:nth-child(3n){float:left;display:block;margin-right:2.35765%;width:14.70196%}.usa-width-one-sixth:nth-child(3n):last-child{margin-right:0}.usa-width-one-sixth:nth-child(6n){margin-right:0}.usa-width-five-sixths{float:left;display:block;margin-right:2.35765%;width:82.94039%}.usa-width-five-sixths:last-child{margin-right:0}.usa-width-one-twelfth{float:left;display:block;margin-right:2.35765%;width:6.17215%}.usa-width-one-twelfth:last-child{margin-right:0}.usa-width-one-twelfth:nth-child(3n){float:left;display:block;margin-right:2.35765%;width:6.17215%}.usa-width-one-twelfth:nth-child(3n):last-child{margin-right:0}.usa-width-one-twelfth:nth-child(12n){margin-right:0}.usa-width-five-twelfths{float:left;display:block;margin-right:2.35765%;width:40.29137%}.usa-width-five-twelfths:last-child{margin-right:0}.usa-width-seven-twelfths{float:left;display:block;margin-right:2.35765%;width:57.35098%}.usa-width-seven-twelfths:last-child{margin-right:0}}.usa-end-row{margin-right:0}.usa-offset-one-twelfth{margin-left:8.5298%}.usa-offset-one-sixth{margin-left:17.05961%}.usa-offset-one-fourth{margin-left:25.58941%}.usa-offset-one-third{margin-left:34.11922%}.usa-offset-five-twelfths{margin-left:42.64902%}.usa-offset-one-half{margin-left:51.17883%}.usa-offset-seven-twelfths{margin-left:59.70863%}.usa-offset-two-thirds{margin-left:68.23843%}.usa-offset-three-fourths{margin-left:76.76824%}.usa-offset-five-sixths{margin-left:85.29804%}.usa-offset-eleven-twelfths{margin-left:93.82785%}.usa-sr-only{position:absolute;left:-999em}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}body{background-color:#fff;overflow-x:hidden}.lt-ie9 *{-webkit-filter:none!important;filter:none!important}[hidden]{display:none!important}.usa-focus,:focus{outline:2px dotted #aeb0b5;outline-offset:3px}.usa-button,.usa-button-primary,.usa-button-primary:visited,.usa-button:visited{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-top:.5em;margin-right:.5em;margin-bottom:.5em;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0071bc;border:0;border-radius:5px;color:#fff;cursor:pointer;display:inline-block;font-family:Trebuchet,Tahoma,sans-serif;font-size:1.0625rem;font-weight:700;line-height:1;padding:1rem 2rem;text-align:center;text-decoration:none;width:100%}@media screen and (min-width:481px){.usa-button,.usa-button-primary,.usa-button-primary:visited,.usa-button:visited{width:auto}}.usa-button-primary.usa-button-hover,.usa-button-primary:hover,.usa-button-primary:visited.usa-button-hover,.usa-button-primary:visited:hover,.usa-button.usa-button-hover,.usa-button:hover,.usa-button:visited.usa-button-hover,.usa-button:visited:hover{background-color:#205493;border-bottom:0;color:#fff;text-decoration:none}.usa-button-primary.usa-button-active,.usa-button-primary:active,.usa-button-primary:visited.usa-button-active,.usa-button-primary:visited:active,.usa-button.usa-button-active,.usa-button:active,.usa-button:visited.usa-button-active,.usa-button:visited:active{background-color:#112e51}.usa-button-primary.usa-button-primary-alt,.usa-button-primary:visited.usa-button-primary-alt,.usa-button.usa-button-primary-alt,.usa-button:visited.usa-button-primary-alt{background-color:#02bfe7;color:#212121}.usa-button-primary.usa-button-primary-alt.usa-button-hover,.usa-button-primary.usa-button-primary-alt:hover,.usa-button-primary:visited.usa-button-primary-alt.usa-button-hover,.usa-button-primary:visited.usa-button-primary-alt:hover,.usa-button.usa-button-primary-alt.usa-button-hover,.usa-button.usa-button-primary-alt:hover,.usa-button:visited.usa-button-primary-alt.usa-button-hover,.usa-button:visited.usa-button-primary-alt:hover{background-color:#00a6d2}.usa-button-primary.usa-button-primary-alt.usa-button-active,.usa-button-primary.usa-button-primary-alt:active,.usa-button-primary:visited.usa-button-primary-alt.usa-button-active,.usa-button-primary:visited.usa-button-primary-alt:active,.usa-button.usa-button-primary-alt.usa-button-active,.usa-button.usa-button-primary-alt:active,.usa-button:visited.usa-button-primary-alt.usa-button-active,.usa-button:visited.usa-button-primary-alt:active{background-color:#046b99;color:#fff}.usa-button-primary.usa-button-secondary,.usa-button-primary:visited.usa-button-secondary,.usa-button.usa-button-secondary,.usa-button:visited.usa-button-secondary{background-color:#fff;box-shadow:inset 0 0 0 2px #0071bc;color:#0071bc}.usa-button-primary.usa-button-secondary.usa-button-hover,.usa-button-primary.usa-button-secondary:hover,.usa-button-primary:visited.usa-button-secondary.usa-button-hover,.usa-button-primary:visited.usa-button-secondary:hover,.usa-button.usa-button-secondary.usa-button-hover,.usa-button.usa-button-secondary:hover,.usa-button:visited.usa-button-secondary.usa-button-hover,.usa-button:visited.usa-button-secondary:hover{box-shadow:inset 0 0 0 2px #205493;color:#205493}.usa-button-primary.usa-button-secondary.usa-button-active,.usa-button-primary.usa-button-secondary:active,.usa-button-primary:visited.usa-button-secondary.usa-button-active,.usa-button-primary:visited.usa-button-secondary:active,.usa-button.usa-button-secondary.usa-button-active,.usa-button.usa-button-secondary:active,.usa-button:visited.usa-button-secondary.usa-button-active,.usa-button:visited.usa-button-secondary:active{box-shadow:inset 0 0 0 2px #112e51;color:#112e51}.usa-button-primary.usa-button-outline-inverse,.usa-button-primary.usa-button-secondary-inverse,.usa-button-primary:visited.usa-button-outline-inverse,.usa-button-primary:visited.usa-button-secondary-inverse,.usa-button.usa-button-outline-inverse,.usa-button.usa-button-secondary-inverse,.usa-button:visited.usa-button-outline-inverse,.usa-button:visited.usa-button-secondary-inverse{background:transparent;box-shadow:inset 0 0 0 2px #fff;color:#fff}.usa-button-primary.usa-button-outline-inverse.usa-button-hover,.usa-button-primary.usa-button-outline-inverse:hover,.usa-button-primary.usa-button-secondary-inverse.usa-button-hover,.usa-button-primary.usa-button-secondary-inverse:hover,.usa-button-primary:visited.usa-button-outline-inverse.usa-button-hover,.usa-button-primary:visited.usa-button-outline-inverse:hover,.usa-button-primary:visited.usa-button-secondary-inverse.usa-button-hover,.usa-button-primary:visited.usa-button-secondary-inverse:hover,.usa-button.usa-button-outline-inverse.usa-button-hover,.usa-button.usa-button-outline-inverse:hover,.usa-button.usa-button-secondary-inverse.usa-button-hover,.usa-button.usa-button-secondary-inverse:hover,.usa-button:visited.usa-button-outline-inverse.usa-button-hover,.usa-button:visited.usa-button-outline-inverse:hover,.usa-button:visited.usa-button-secondary-inverse.usa-button-hover,.usa-button:visited.usa-button-secondary-inverse:hover{box-shadow:inset 0 0 0 2px #d6d7d9;color:#d6d7d9}.usa-button-primary.usa-button-outline-inverse.usa-button-active,.usa-button-primary.usa-button-outline-inverse:active,.usa-button-primary.usa-button-secondary-inverse.usa-button-active,.usa-button-primary.usa-button-secondary-inverse:active,.usa-button-primary:visited.usa-button-outline-inverse.usa-button-active,.usa-button-primary:visited.usa-button-outline-inverse:active,.usa-button-primary:visited.usa-button-secondary-inverse.usa-button-active,.usa-button-primary:visited.usa-button-secondary-inverse:active,.usa-button.usa-button-outline-inverse.usa-button-active,.usa-button.usa-button-outline-inverse:active,.usa-button.usa-button-secondary-inverse.usa-button-active,.usa-button.usa-button-secondary-inverse:active,.usa-button:visited.usa-button-outline-inverse.usa-button-active,.usa-button:visited.usa-button-outline-inverse:active,.usa-button:visited.usa-button-secondary-inverse.usa-button-active,.usa-button:visited.usa-button-secondary-inverse:active{box-shadow:inset 0 0 0 2px #aeb0b5;color:#d6d7d9}.usa-button-primary.usa-button-gray,.usa-button-primary:visited.usa-button-gray,.usa-button.usa-button-gray,.usa-button:visited.usa-button-gray{background-color:#5b616b}.usa-button-primary.usa-button-gray.usa-button-hover,.usa-button-primary.usa-button-gray:hover,.usa-button-primary:visited.usa-button-gray.usa-button-hover,.usa-button-primary:visited.usa-button-gray:hover,.usa-button.usa-button-gray.usa-button-hover,.usa-button.usa-button-gray:hover,.usa-button:visited.usa-button-gray.usa-button-hover,.usa-button:visited.usa-button-gray:hover{background-color:#323a45}.usa-button-primary.usa-button-gray.usa-button-active,.usa-button-primary.usa-button-gray:active,.usa-button-primary:visited.usa-button-gray.usa-button-active,.usa-button-primary:visited.usa-button-gray:active,.usa-button.usa-button-gray.usa-button-active,.usa-button.usa-button-gray:active,.usa-button:visited.usa-button-gray.usa-button-active,.usa-button:visited.usa-button-gray:active{background-color:#212121}.usa-button-primary.usa-button-red,.usa-button-primary:visited.usa-button-red,.usa-button.usa-button-red,.usa-button:visited.usa-button-red{background-color:#e31c3d}.usa-button-primary.usa-button-red.usa-button-hover,.usa-button-primary.usa-button-red:hover,.usa-button-primary:visited.usa-button-red.usa-button-hover,.usa-button-primary:visited.usa-button-red:hover,.usa-button.usa-button-red.usa-button-hover,.usa-button.usa-button-red:hover,.usa-button:visited.usa-button-red.usa-button-hover,.usa-button:visited.usa-button-red:hover{background-color:#cd2026}.usa-button-primary.usa-button-red.usa-button-active,.usa-button-primary.usa-button-red:active,.usa-button-primary:visited.usa-button-red.usa-button-active,.usa-button-primary:visited.usa-button-red:active,.usa-button.usa-button-red.usa-button-active,.usa-button.usa-button-red:active,.usa-button:visited.usa-button-red.usa-button-active,.usa-button:visited.usa-button-red:active{background-color:#981b1e}.usa-button-primary.usa-button-big,.usa-button-primary:visited.usa-button-big,.usa-button.usa-button-big,.usa-button:visited.usa-button-big{font-size:1.9rem;padding:1.5rem 3rem}.usa-button-primary:disabled,.usa-button-primary:visited:disabled,.usa-button:disabled,.usa-button:visited:disabled{background-color:#d6d7d9;pointer-events:none}.usa-button-primary:disabled.usa-button-active,.usa-button-primary:disabled.usa-button-hover,.usa-button-primary:disabled.usa-focus,.usa-button-primary:disabled:active,.usa-button-primary:disabled:focus,.usa-button-primary:disabled:hover,.usa-button-primary:visited:disabled.usa-button-active,.usa-button-primary:visited:disabled.usa-button-hover,.usa-button-primary:visited:disabled.usa-focus,.usa-button-primary:visited:disabled:active,.usa-button-primary:visited:disabled:focus,.usa-button-primary:visited:disabled:hover,.usa-button:disabled.usa-button-active,.usa-button:disabled.usa-button-hover,.usa-button:disabled.usa-focus,.usa-button:disabled:active,.usa-button:disabled:focus,.usa-button:disabled:hover,.usa-button:visited:disabled.usa-button-active,.usa-button:visited:disabled.usa-button-hover,.usa-button:visited:disabled.usa-focus,.usa-button:visited:disabled:active,.usa-button:visited:disabled:focus,.usa-button:visited:disabled:hover{background-color:#d6d7d9;border:0;box-shadow:none}.usa-button-disabled{background-color:#d6d7d9;pointer-events:none}.usa-button-disabled.usa-button-active,.usa-button-disabled.usa-button-hover,.usa-button-disabled.usa-focus,.usa-button-disabled:active,.usa-button-disabled:focus,.usa-button-disabled:hover{background-color:#d6d7d9;border:0;box-shadow:none}.usa-button-outline-inverse:disabled,.usa-button-secondary-disabled,.usa-button-secondary-inverse-disabled,.usa-button-secondary-inverse:disabled,.usa-button-secondary:disabled{box-shadow:inset 0 0 0 2px #d6d7d9;pointer-events:none;color:#d6d7d9}.usa-button-outline-inverse:disabled.usa-button-active,.usa-button-outline-inverse:disabled.usa-button-hover,.usa-button-outline-inverse:disabled.usa-focus,.usa-button-outline-inverse:disabled:active,.usa-button-outline-inverse:disabled:focus,.usa-button-outline-inverse:disabled:hover,.usa-button-secondary-disabled.usa-button-active,.usa-button-secondary-disabled.usa-button-hover,.usa-button-secondary-disabled.usa-focus,.usa-button-secondary-disabled:active,.usa-button-secondary-disabled:focus,.usa-button-secondary-disabled:hover,.usa-button-secondary-inverse-disabled.usa-button-active,.usa-button-secondary-inverse-disabled.usa-button-hover,.usa-button-secondary-inverse-disabled.usa-focus,.usa-button-secondary-inverse-disabled:active,.usa-button-secondary-inverse-disabled:focus,.usa-button-secondary-inverse-disabled:hover,.usa-button-secondary-inverse:disabled.usa-button-active,.usa-button-secondary-inverse:disabled.usa-button-hover,.usa-button-secondary-inverse:disabled.usa-focus,.usa-button-secondary-inverse:disabled:active,.usa-button-secondary-inverse:disabled:focus,.usa-button-secondary-inverse:disabled:hover,.usa-button-secondary:disabled.usa-button-active,.usa-button-secondary:disabled.usa-button-hover,.usa-button-secondary:disabled.usa-focus,.usa-button-secondary:disabled:active,.usa-button-secondary:disabled:focus,.usa-button-secondary:disabled:hover{background-color:#fff;border:0}.usa-button-secondary:disabled,html .usa-button-secondary-disabled{background-color:#fff}.usa-button-secondary-inverse:disabled,html .usa-button-secondary-inverse-disabled{background-color:transparent;color:#5b616b;box-shadow:inset 0 0 0 2px #5b616b}.usa-button-unstyled{background-color:transparent;border:0;border-radius:0;font-weight:400;margin:0;padding:0;text-align:left;-webkit-font-smoothing:auto}.usa-button-unstyled:hover{background-color:transparent}.usa-accordion,.usa-accordion-bordered{margin-top:0;margin-bottom:0;list-style-type:none;padding-left:0;color:#212121;margin:0;padding:0;width:100%}.usa-accordion-bordered>li,.usa-accordion>li{margin-bottom:0}.usa-accordion-bordered>ul li ul,.usa-accordion>ul li ul{list-style:disc}.usa-accordion-bordered>ul li ul>li>ul,.usa-accordion>ul li ul>li>ul{list-style:circle}.usa-accordion-bordered>ul li ul>li>ul>li>ul,.usa-accordion>ul li ul>li>ul>li>ul{list-style:square}.usa-accordion+.usa-accordion,.usa-accordion+.usa-accordion-bordered,.usa-accordion-bordered+.usa-accordion,.usa-accordion-bordered+.usa-accordion-bordered{margin-top:1rem}.usa-accordion-bordered>ul,.usa-accordion>ul{margin-top:0;margin-bottom:0;list-style-type:none;padding-left:0;color:#212121;margin:0;padding:0;width:100%}.usa-accordion-bordered>ul>li,.usa-accordion>ul>li{margin-bottom:0}.usa-accordion-bordered>ul>li,.usa-accordion>ul>li{background-color:#f1f1f1;font-family:Trebuchet,Tahoma,sans-serif;list-style:none;margin-bottom:.5rem;width:100%}.usa-accordion-bordered>ul button,.usa-accordion>ul button{background-color:transparent;border:0;border-radius:0;font-weight:400;padding:0;text-align:left;-webkit-font-smoothing:auto;background-color:#f1f1f1;background-image:url(../img/minus.png);background-image:url(../img/minus.svg);background-position:right 2rem center;background-repeat:no-repeat;background-size:1.5rem;color:#212121;cursor:pointer;display:inline-block;font-family:Trebuchet,Tahoma,sans-serif;font-weight:700;margin:0;padding:1.5rem 5.5rem 1.5rem 2rem;width:100%}.usa-accordion-bordered>ul button:hover,.usa-accordion>ul button:hover{background-color:transparent}.usa-accordion-bordered>ul button:hover,.usa-accordion>ul button:hover{background-color:#d6d7d9;color:#212121}.usa-accordion-bordered>ul button h1,.usa-accordion-bordered>ul button h2,.usa-accordion-bordered>ul button h3,.usa-accordion-bordered>ul button h4,.usa-accordion-bordered>ul button h5,.usa-accordion-bordered>ul button h6,.usa-accordion>ul button h1,.usa-accordion>ul button h2,.usa-accordion>ul button h3,.usa-accordion>ul button h4,.usa-accordion>ul button h5,.usa-accordion>ul button h6{margin:0}.usa-accordion-bordered>ul [aria-expanded=false],.usa-accordion>ul [aria-expanded=false]{background-image:url(../img/plus.png);background-image:url(../img/plus.svg);background-repeat:no-repeat;background-size:1.5rem}.usa-accordion-bordered>li,.usa-accordion>li{background-color:#f1f1f1;font-family:Trebuchet,Tahoma,sans-serif;list-style:none;margin-bottom:.5rem;width:100%}.usa-accordion-bordered .usa-accordion-content{border-bottom:3px solid #f1f1f1;border-left:3px solid #f1f1f1;border-right:3px solid #f1f1f1}.usa-accordion-content{background-color:#fff;overflow:auto;padding:1.5rem 2rem}.usa-accordion-content>:first-child{margin-top:0}.usa-accordion-content>:last-child{margin-bottom:0}.usa-accordion-content:not([aria-hidden]){position:absolute;left:-999em}.usa-accordion-content[aria-hidden=true]{display:none}.usa-accordion-button{background-color:transparent;border:0;border-radius:0;font-weight:400;padding:0;text-align:left;-webkit-font-smoothing:auto;background-color:#f1f1f1;background-image:url(../img/minus.png);background-image:url(../img/minus.svg);background-position:right 2rem center;background-repeat:no-repeat;background-size:1.5rem;color:#212121;cursor:pointer;display:inline-block;font-family:Trebuchet,Tahoma,sans-serif;font-weight:700;margin:0;padding:1.5rem 5.5rem 1.5rem 2rem;width:100%}.usa-accordion-button:hover{background-color:transparent}.usa-accordion-button:hover{background-color:#d6d7d9;color:#212121}.usa-accordion-button h1,.usa-accordion-button h2,.usa-accordion-button h3,.usa-accordion-button h4,.usa-accordion-button h5,.usa-accordion-button h6{margin:0}.usa-accordion-button[aria-expanded=false]{background-image:url(../img/plus.png);background-image:url(../img/plus.svg);background-repeat:no-repeat;background-size:1.5rem}.usa-banner{background-color:#f1f1f1;padding-bottom:.4375rem}@media screen and (min-width:481px){.usa-banner{font-size:.8125rem;padding-bottom:0}}.usa-banner-content{padding:1.25rem 1rem 3px;background-color:transparent;font-size:.9375rem;width:100%}@media screen and (min-width:801px){.usa-banner-content{padding-bottom:1.4375rem;padding-top:2.5rem}}@media screen and (min-width:951px){.usa-banner-content{padding-right:1.875rem;padding-left:1.875rem}}.usa-banner-content p:first-child{margin-top:.625rem}@media screen and (min-width:801px){.usa-banner-content p:first-child{margin-top:0}}.usa-banner-inner{max-width:1200px;margin-left:auto;margin-right:auto;padding-right:1rem;padding-left:1rem;max-width:960px}.usa-banner-inner:after{clear:both;content:"";display:block}@media screen and (min-width:951px){.usa-banner-inner{padding-right:1.875rem;padding-left:1.875rem}}.usa-banner-header{padding-top:.34375rem;padding-bottom:.34375rem;font-size:.75rem;font-weight:400}@media screen and (min-width:481px){.usa-banner-header{padding-top:0;padding-bottom:0}}.usa-banner-header p{margin-top:0;margin-bottom:0;display:inline;overflow:hidden;vertical-align:middle}@media screen and (min-width:481px){.usa-banner-header p{margin-top:2px;margin-bottom:2px;display:inline-block}}.usa-banner-header img{margin-top:.625rem}@media screen and (min-width:481px){.usa-banner-header img{margin-right:.4375rem;width:1.25rem}}.usa-banner-header-expanded{-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #aeb0b5;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.9375rem;min-height:3.5rem;padding-right:1.875rem}@media screen and (min-width:481px){.usa-banner-header-expanded{border-bottom:none;display:block;font-size:.75rem;font-weight:400;min-height:0;padding-right:0}}.usa-banner-header-expanded>.usa-banner-inner{margin-left:0}@media screen and (min-width:481px){.usa-banner-header-expanded>.usa-banner-inner{margin-left:auto}}.usa-banner-header-expanded img{margin-right:1.5rem}@media screen and (min-width:481px){.usa-banner-header-expanded img{margin-right:.4375rem}}.usa-banner-header-expanded p{line-height:1.3;vertical-align:top}@media screen and (min-width:481px){.usa-banner-header-expanded p{line-height:1.5;vertical-align:middle}}.usa-banner-button{background-color:transparent;border:0;border-radius:0;font-weight:400;margin:0;padding:0;text-align:left;-webkit-font-smoothing:auto;padding-top:.8125rem;padding-left:3rem;background-position-x:right;color:#0071bc;display:block;font-size:.75rem;height:2.6875rem;left:0;position:absolute;text-decoration:underline;top:0;width:100%}.usa-banner-button:hover{background-color:transparent}@media screen and (min-width:481px){.usa-banner-button{padding-top:0;padding-left:0;display:inline;height:auto;margin-left:3px;position:relative;vertical-align:middle;width:auto}}.usa-banner-button:hover{color:#205493;text-decoration:underline}.usa-banner-button[aria-expanded=false]{background-image:none}.usa-banner-button[aria-expanded=false]:after{background-image:url(../img/angle-arrow-down-primary.png);background-image:url(../img/angle-arrow-down-primary.svg);background-size:100%;content:"";display:inline-block;height:.625rem;width:.625rem;margin-left:0}.usa-banner-button[aria-expanded=false]:hover:after{background-image:url(../img/angle-arrow-down-primary-hover.png);background-image:url(../img/angle-arrow-down-primary-hover.svg)}.usa-banner-button[aria-expanded=false]:after{background-position-y:1px}.usa-banner-button[aria-expanded=true]{background-image:none;height:3.5rem}.usa-banner-button[aria-expanded=true]:after{background-image:url(../img/close.png);background-image:url(../img/close.svg);background-size:100%;content:"";display:inline-block;height:.8125rem;width:.8125rem;margin-left:0}@media screen and (min-width:481px){.usa-banner-button[aria-expanded=true]{height:auto;padding:0;position:relative}.usa-banner-button[aria-expanded=true]:after{background-image:url(../img/angle-arrow-up-primary.png);background-image:url(../img/angle-arrow-up-primary.svg);background-size:100%;content:"";display:inline-block;height:.625rem;width:.625rem;margin-left:0}.usa-banner-button[aria-expanded=true]:hover:after{background-image:url(../img/angle-arrow-up-primary-hover.png);background-image:url(../img/angle-arrow-up-primary-hover.svg)}.usa-banner-button[aria-expanded=true]:after{background-position-y:1px}}.usa-banner-button[aria-expanded=true]:after{position:absolute;right:.9375rem;top:1.34375rem}@media screen and (min-width:481px){.usa-banner-button[aria-expanded=true]:after{position:static}}.usa-banner-button[aria-expanded=true] .usa-banner-button-text{display:none}@media screen and (min-width:481px){.usa-banner-button[aria-expanded=true] .usa-banner-button-text{display:inline}}.usa-banner-icon{width:2.375rem}.usa-button,.usa-button-primary,.usa-button-primary:visited,.usa-button:visited{padding:.625rem 1.25rem}.usa-banner{position:relative}@media screen and (min-width:801px){.usa-banner-inner{padding:0 calc(2% + 8px);width:96%}}@media screen and (min-width:1025px){.usa-banner-inner{margin:0 auto;padding:0 .5rem;width:960px}}@media screen and (min-width:801px){.usa-banner-content{padding-left:calc(2% + 8px);padding-right:calc(2% + 8px);width:96%}}@media screen and (min-width:1025px){.usa-banner-content{padding-left:.5rem;padding-right:.5rem;width:960px}}.usa-banner-header{font-size:.625rem}@media screen and (min-width:481px){.usa-banner-header{font-size:.75rem;padding:0 0 3px}}.usa-banner-header img{display:block;float:left;margin-right:.625rem;margin-top:0;vertical-align:middle;width:1.5rem}@media screen and (min-width:481px){.usa-banner-header img{display:inline-block;float:none;margin-right:.625rem;width:1.25rem}}.usa-banner-header p{top:1px;left:-2px;display:block;line-height:1.15;position:relative}@media screen and (min-width:481px){.usa-banner-header p{position:relative;top:auto;left:auto;display:inline;line-height:1;overflow:visible;margin:0}}.usa-banner-header-expanded img{margin-right:.625rem}.usa-accordion-button[aria-expanded=false],.usa-accordion-button[aria-expanded=true]{background-size:.9375rem}.usa-accordion-button[aria-expanded=false]:after,.usa-accordion-button[aria-expanded=true]:after{height:.625rem;width:.625rem}@media screen and (min-width:481px){.usa-accordion-button[aria-expanded=false],.usa-accordion-button[aria-expanded=true]{top:1px;padding-left:4px}}.usa-media_block-img{float:left;margin-right:1rem}.usa-media_block-body{overflow:hidden} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRnLXVzd2RzLnNjc3MiLCJfZGctbm9ybWFsaXplLnNjc3MiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdXN3ZHMvZGlzdC9zY3NzL2xpYi9jc3MzL19mb250LWZhY2Uuc2NzcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy91c3dkcy9kaXN0L3Njc3MvY29yZS9fZm9udHMuc2NzcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy91c3dkcy9kaXN0L3Njc3MvbGliL2hlbHBlcnMvX2ZvbnQtc291cmNlLWRlY2xhcmF0aW9uLnNjc3MiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdXN3ZHMvZGlzdC9zY3NzL2NvcmUvX2dyaWQuc2NzcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy91c3dkcy9kaXN0L3Njc3MvbGliL2dyaWQvX291dGVyLWNvbnRhaW5lci5zY3NzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Vzd2RzL2Rpc3Qvc2Nzcy9saWIvc2V0dGluZ3MvX2dyaWQuc2NzcyIsIl9kZy12YXJpYWJsZXMuc2NzcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy91c3dkcy9kaXN0L3Njc3MvbGliL21peGlucy9fY2xlYXJmaXguc2NzcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy91c3dkcy9kaXN0L3Njc3MvbGliL2hlbHBlcnMvX2RpcmVjdGlvbmFsLXZhbHVlcy5zY3NzIiwiX2RnLWZ1bmN0aW9ucy5zY3NzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Vzd2RzL2Rpc3Qvc2Nzcy9saWIvZ3JpZC9fbWVkaWEuc2NzcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy91c3dkcy9kaXN0L3Njc3MvbGliL2dyaWQvX3NwYW4tY29sdW1ucy5zY3NzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Vzd2RzL2Rpc3Qvc2Nzcy9saWIvZ3JpZC9fcHJpdmF0ZS5zY3NzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Vzd2RzL2Rpc3Qvc2Nzcy9saWIvZ3JpZC9fb21lZ2Euc2NzcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy91c3dkcy9kaXN0L3Njc3MvbGliL2dyaWQvX3NoaWZ0LnNjc3MiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdXN3ZHMvZGlzdC9zY3NzL2NvcmUvX3V0aWxpdGllcy5zY3NzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Vzd2RzL2Rpc3Qvc2Nzcy9jb3JlL19iYXNlLnNjc3MiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdXN3ZHMvZGlzdC9zY3NzL2NvcmUvX3ZhcmlhYmxlcy5zY3NzIiwiZGctdXN3ZHMuY3NzIiwiX2RnLWJ1dHRvbnMuc2NzcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy91c3dkcy9kaXN0L3Njc3MvY29tcG9uZW50cy9fYWNjb3JkaW9ucy5zY3NzIiwiX2RnLWJhbm5lci5zY3NzIiwiX2RnLXVzd2RzLW92ZXJyaWRlcy5zY3NzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Vzd2RzL2Rpc3Qvc2Nzcy9saWIvYWRkb25zL19wb3NpdGlvbi5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLHFCQUFxQixBQ2lObkIsK0JBQ0UsdUJBQXVCLEFBQ3ZCLDBCQUEwQixBQUMxQiw2QkFBOEIsQ0FDL0IsQUFDRCwrQkFDRSxRQUFTLENBQ1YsQUFFRCx1Y0FhRSxhQUFjLENBQ2YsQUFFRCw0SUFJRSxxQkFBcUIsQUFDckIsdUJBQXdCLENBQ3pCLEFBRUQsaUVBQ0UsYUFBYSxBQUNiLFFBQVMsQ0FDVixBQUVELDhFQUVFLFlBQWEsQ0FDZCxBQUVELHlCQUNFLDRCQUE2QixDQUM5QixBQUVELDRFQUVFLFNBQVUsQ0FDWCxBQUVELDZDQUNFLHdCQUF5QixDQUMxQixBQUVELDREQUVFLGVBQWlCLENBQ2xCLEFBRUQsNkJBQ0UsaUJBQWtCLENBQ25CLEFBRUQsR0FDRSxjQUFjLEFBQ2QsY0FBZ0IsQ0FDakIsQUFFRCwrQkFDRSxnQkFBZ0IsQUFDaEIsVUFBVyxDQUNaLEFBRUQsaUNBQ0UsYUFBYyxDQUNmLEFBRUQsMERBRUUsY0FBYyxBQUNkLGNBQWMsQUFDZCxrQkFBa0IsQUFDbEIsdUJBQXdCLENBQ3pCLEFBRUQsNkJBQ0UsU0FBVyxDQUNaLEFBRUQsNkJBQ0UsYUFBZSxDQUNoQixBQUVELDZCQUNFLFFBQVMsQ0FDVixBQUVELG1EQUNFLGVBQWdCLENBQ2pCLEFBRUQsbUNBQ0UsZUFBZ0IsQ0FDakIsQUFFRCwyQkFDRSx1QkFBdUIsQUFDdkIsUUFBUyxDQUNWLEFBRUQsNkJBQ0UsYUFBYyxDQUNmLEFBRUQsd0hBSUUsZ0NBQWlDLEFBQ2pDLGFBQWMsQ0FDZixBQUVELHFMQUtFLGNBQWMsQUFDZCxhQUFhLEFBQ2IsUUFBUyxDQUNWLEFBRUQsbUNBQ0UsZ0JBQWlCLENBQ2xCLEFBRUQsc0VBRUUsbUJBQW9CLENBQ3JCLEFBRUQsK0tBSUUsMEJBQTBCLEFBQzFCLGNBQWUsQ0FDaEIsQUFFRCw0RUFFRSxjQUFlLENBQ2hCLEFBRUQsNElBRUUsU0FBUyxBQUNULFNBQVUsQ0FDWCxBQUVELGlDQUNFLGtCQUFtQixDQUNwQixBQUVELHdIQUVFLHNCQUFzQixBQUN0QixTQUFVLENBQ1gsQUFFRCxrT0FFRSxXQUFZLENBQ2IsQUFFRCwyREFDRSw2QkFBNkIsQUFDN0Isc0JBQXVCLENBQ3hCLEFBRUQsd09BRUUsdUJBQXdCLENBQ3pCLEFBRUQsdUNBQ0Usd0JBQXlCLEFBQ3pCLGFBQWEsQUFDYiwwQkFBOEIsQ0FDL0IsQUFFRCxtQ0FDRSxTQUFTLEFBQ1QsU0FBVSxDQUNYLEFBRUQsdUNBQ0UsYUFBYyxDQUNmLEFBRUQsdUNBQ0UsZUFBaUIsQ0FDbEIsQUFFRCxpQ0FDRSx5QkFBeUIsQUFDekIsZ0JBQWlCLENBQ2xCLEFBRUQsc0RBRUUsU0FBVSxDQUNYLEFDdGFELFdBQ0UsNEJDVGUsQURVZixrQkNQSSxBRFFKLGdCQ1RDLEFEV0QsbVJFUzZDLENBQUEsQUZkL0MsV0FDRSw0QkNEZSxBREVmLGtCQ0NJLEFEQUosZ0JDREMsQURHRCwyUkVTNkMsQ0FBQSxBRmQvQyxXQUNFLDRCQ09lLEFETmYsa0JDU0ksQURSSixnQkNPQyxBRExELHVSRVM2QyxDQUFBLEFGZC9DLFdBQ0UsNEJDZWUsQURkZixrQkNpQkksQURoQkosZ0JDZUMsQURiRCwrUUVTNkMsQ0FBQSxBRmQvQyxXQUNFLHlCQ3VCWSxBRHRCWixrQkN5QkksQUR4QkosZ0JDdUJDLEFEckJELCtRRVM2QyxDQUFBLEFGZC9DLFdBQ0UseUJDK0JZLEFEOUJaLGtCQ2lDSSxBRGhDSixnQkMrQkMsQUQ3QkQsdVJFUzZDLENBQUEsQUZkL0MsV0FDRSx5QkN1Q1ksQUR0Q1osa0JDeUNJLEFEeENKLGdCQ3VDQyxBRHJDRCxtUkVTNkMsQ0FBQSxBRmQvQyxXQUNFLHlCQytDWSxBRDlDWixrQkNpREksQURoREosZ0JDK0NDLEFEN0NELDJRRVM2QyxDQUFBLEFDdkJqRCx5QkMyQkUsaUJDSmdCLEFETWQsaUJBQVUsQUFDVixrQkFBVyxBRDNCYixlRzhJNkIsQ0g3STlCLEFJY0MscUNBQ0UsV0FBVyxBQUNYLFdBQVcsQUFDWCxhQUFjLENBQ2YsQUpoQkgsVUt3RTBCLG1CQzlFZixBRG1GZSxpQkNuRmYsQ05ZVixBTzZDRyxvQ1BuREosVUt3RTBCLHVCQzlFZixBRG1GZSxxQkNuRmYsQ05ZVixDQUFBLEFBRUQsZUFDRSxTQUFVLENBQ1gsQU9xRUcsb0NQakVGLHFCUThDRSxXQUFPLEFBR0wsY0FBYyxBQWVkLHNCQ3RFMEMsQUR1RTFDLFVDNUV5QyxDVGE1QyxBUWlFRyxnQ0FDRSxjQUE4QixDQUMvQixBUmpFTCxvQlEwQ0UsV0FBTyxBQUdMLGNBQWMsQUFlZCxzQkN0RTBDLEFEdUUxQyxlQzVFeUMsQ1RpQjVDLEFRNkRHLCtCQUNFLGNBQThCLENBQy9CLEFSN0RMLHFCUXNDRSxXQUFPLEFBR0wsY0FBYyxBQWVkLHNCQ3RFMEMsQUR1RTFDLGVDNUV5QyxDVHFCNUMsQVF5REcsZ0NBQ0UsY0FBOEIsQ0FDL0IsQVJ6REwsc0JRa0NFLFdBQU8sQUFHTCxjQUFjLEFBZWQsc0JDdEUwQyxBRHVFMUMsZUM1RXlDLENUeUI1QyxBUXFERyxpQ0FDRSxj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QUNULGtDSGdIbUIsQUcvR25CLFVBQVcsQ0F1R1osQURnRUMsNEJBQ0UsNEJBQTZCLENBQzlCLEFDdktELDRCQUNFLHlCSGNnQyxBR2JoQyxhSE9nQyxDR05qQyxBQUVELHNKQU1FLFFBQVMsQ0FDVixBQTJGSCwyQ0F0RkUsc0NBQWdELEFBQ2hELHNDQUFnRCxBQUNoRCw0QkFBNEIsQUFDNUIsc0JId0Z1QixDR0h4QixBQ3JKRCxZQUNFLHlCSjJEa0MsQUkxRGxDLHVCWkRTLENZT1YsQU5zQ0Msb0NNOUNGLFlBS0ksbUJaSk8sQVlLUCxnQkFBaUIsQ0FFcEIsQ0FBQSxBQUVELG9CYjZFMEIseUJDdEZmLEFZV1QsNkJBQTZCLEFBQzdCLG1CWlpTLEFZY1QsVUFBVyxDQW9CWixBTldDLG9DTXBDRixvQkFRSSx5QlpqQk8sQVlrQlAsa0JabEJPLENZa0NWLENBQUEsQU5XQyxvQ01wQ0Ysb0JicUUwQix1QkM5RWYsQURtRmUscUJDbkZmLENZa0NWLENBQUEsQUF6QkQsa0NBa0JNLGtCWjNCSyxDWWdDTixBTmFILG9DTXBDRixrQ0FxQlEsWUFBYSxDQUVoQixDQUFBLEFBSUwsa0JqQlRFLGlCQ0pnQixBRE1kLGlCQUFVLEFBQ1Ysa0JBQVcsQUlnRFcsbUJDOUVmLEFEbUZlLGtCQ25GZixBWXVDVCxlZjBHNkIsQ2VyRzlCLEFkMUJDLHdCQUNFLFdBQVcsQUFDWCxXQUFXLEFBQ1gsYUFBYyxDQUNmLEFRdUJELG9DTVRGLGtCYjBDMEIsdUJDOUVmLEFEbUZlLHFCQ25GZixDWTRDVixDQUFBLEFBRUQsbUJiMkJ3QixzQkN6RWIsQURrRmUseUJDbEZmLEFZZ0RULGlCWmhEUyxBWWlEVCxlSm5CdUIsQ0lnRHhCLEFOakNDLG9DTUNGLG1CYjJCd0IsY0F0Q0gsQUErQ0ssZ0JBL0NMLENhMkNwQixDQUFBLEFBaENELHFCYjJCd0IsYUF0Q0gsQUErQ0ssZ0JBL0NMLEFhc0JqQixlQUFlLEFBQ2YsZ0JBQWdCLEFBQ2hCLHFCQUFzQixDQU12QixBTnBCRCxvQ01DRixxQmIyQndCLGVhWEMsQWJvQkMsa0JhcEJELEFBQ25C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LHlCQUF5QixBQUN6QixTQUFVLENBT2IsQ0FBQSxBUHlCQyxxQ09uQ0Ysa0JBTUksY0FBYyxBQUNkLGdCYmpCTyxBYWtCUCxXQUFZLENBRWYsQ0FBQSxBUHlCQyxvQ092QkYsb0JBRUksNEJBQTRCLEFBQzVCLDZCQUE2QixBQUM3QixTQUFVLENBT2IsQ0FBQSxBUFlDLHFDT3ZCRixvQkFPSSxtQmI3Qk8sQWE4QlAsb0JiOUJPLEFhK0JQLFdBQVksQ0FFZixDQUFBLEFBRUQsbUJBQ0UsaUJicENTLENhMEVWLEFQN0JDLG9DT1ZGLG1CQUdJLGlCYnRDTyxBRDRGUCxlY3JEd0IsQ0FtQzNCLENBQUEsQUF2Q0QsdUJBT0ksY0FBYyxBQUNkLFdBQVcsQUFDWCxxQmI1Q08sQWE2Q1AsYUFBYSxBQUNiLHNCQUFzQixBQUN0QixZYi9DTyxDYXVEUixBUFZELG9DT1ZGLHVCQWVNLHFCQUFxQixBQUNyQixXQUFXLEFBQ1gscUJicERLLEFhcURMLGFickRLLENhdURSLENBQUEsQUFwQkgscUJDUU0sUURjbUIsQUNkbkIsVURja0MsQUFDcEMsY0FBYyxBQUNkLGlCQUFpQixBQUNqQixpQkFBa0IsQ0FRbkIsQVB2QkQsb0NPVkYscUJDSUUsa0JBWnFCLEFBZ0JqQixTRG1Cc0IsQUNuQnRCLFVEbUJxQyxBQUNyQyxlQUFlLEFBQ2YsY0FBYyxBQUNkLGlCQUFpQixBQUNqQixRQUFTLENBRVosQ0FBQSxBQUNELGdDQUVJLG9CYnZFSyxDYXdFTixBQUlMLHFGQUVFLHdCYjlFUyxDYXVGVixBQVhELGlHQUlJLGViaEZPLEFhaUZQLGFiakZPLENha0ZSLEFQckNELG9DTytCRixxRkFRSSxRQUFRLEFBQ1IsZ0JBQWlCLENBRXBCLENBQUEsQUFHQyxxQkFDRSxXQUFXLEFBQ1gsaUJBQWtCLENBQ25CLEFBQ0Qsc0JBQ0UsZUFBZ0IsQ0FDakIiLCJmaWxlIjoiZGctdXN3ZHMubWluLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFVTV0RTIFNBU1MgdmFyaWFibGUgb3ZlcnJpZGVzIGdvIGhlcmUsIGJlZm9yZSB3ZSBpbXBvcnQgVVNXRFMgaXRzZWxmLlxuXG4kYm9yZGVyLWJveC1zaXppbmc6IGZhbHNlO1xuJHNjb3BlLW5vcm1hbGl6ZTogdHJ1ZTtcblxuQGltcG9ydCAnZGctdmFyaWFibGVzJztcblxuLy8gQ29weSBpbXBvcnRzIGZyb20gVVNXRFMgbW9kdWxlIHRvIGNvbnRyb2wgaW1wb3J0c1xuXG4vKiEgdXN3ZHMgQHZlcnNpb24gKi9cblxuXG4vLyBWZW5kb3IgLS0tLS0tLS0tLS0tLS0gLy9cbkBpbXBvcnQgJ2xpYi9ib3VyYm9uJztcbkBpbXBvcnQgJ2xpYi9uZWF0JztcbkBpbXBvcnQgJ2RnLW5vcm1hbGl6ZSc7XG5cbi8vIENvcmUgLS0tLS0tLS0tLS0tLS0gLy9cbkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzJztcbkBpbXBvcnQgJ2NvcmUvZm9udHMnO1xuQGltcG9ydCAnY29yZS9ncmlkJztcbkBpbXBvcnQgJ2NvcmUvdXRpbGl0aWVzJztcbkBpbXBvcnQgJ2NvcmUvYmFzZSc7XG5cbi8vIEVsZW1lbnRzIC0tLS0tLS0tLS0tLS0tIC8vXG4vLyBTdHlsZXMgYmFzaWMgSFRNTCBlbGVtZW50c1xuQGltcG9ydCAnZGctYnV0dG9ucyc7XG4vKlxuQGltcG9ydCAnZWxlbWVudHMvZW1iZWQnO1xuQGltcG9ydCAnZWxlbWVudHMvZmlndXJlJztcbkBpbXBvcnQgJ2VsZW1lbnRzL2lucHV0cyc7XG5AaW1wb3J0ICdlbGVtZW50cy9sYWJlbHMnO1xuQGltcG9ydCAnZWxlbWVudHMvbGlzdCc7XG5AaW1wb3J0ICdlbGVtZW50cy90YWJsZSc7XG5AaW1wb3J0ICdlbGVtZW50cy90eXBvZ3JhcGh5JztcblxuLy8gQ29tcG9uZW50cyAtLS0tLS0tLS0tLS0tLSAvL1xuKi9cbkBpbXBvcnQgJ2NvbXBvbmVudHMvYWNjb3JkaW9ucyc7XG4vKlxuQGltcG9ydCAnY29tcG9uZW50cy9hbGVydHMnO1xuKi9cbkBpbXBvcnQgJ2RnLWJhbm5lcic7XG4vKlxuQGltcG9ydCAnY29tcG9uZW50cy9mb290ZXInO1xuQGltcG9ydCAnY29tcG9uZW50cy9mb3Jtcyc7XG5AaW1wb3J0ICdjb21wb25lbnRzL2dyYXBoaWMtbGlzdCc7XG5AaW1wb3J0ICdjb21wb25lbnRzL2hlYWRlcic7XG5AaW1wb3J0ICdjb21wb25lbnRzL2hlcm8nO1xuQGltcG9ydCAnY29tcG9uZW50cy9sYXlvdXQnO1xuQGltcG9ydCAnY29tcG9uZW50cy9tZWRpYS1ibG9jayc7XG5AaW1wb3J0ICdjb21wb25lbnRzL25hdmlnYXRpb24nO1xuQGltcG9ydCAnY29tcG9uZW50cy9zZWFyY2gnO1xuQGltcG9ydCAnY29tcG9uZW50cy9zZWN0aW9uJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvc2lkZW5hdic7XG5AaW1wb3J0ICdjb21wb25lbnRzL3NraXBuYXYnO1xuKi9cblxuLy8gTmV3IGN1c3RvbSBDU1MgcnVsZXMgY2FuIGdvIGhlcmUuXG5cbkBpbXBvcnQgJ2RnLXVzd2RzLW92ZXJyaWRlcyc7XG4iLCJAaWYgJHNjb3BlLW5vcm1hbGl6ZSA9PSBmYWxzZSB7XG4gIGh0bWwge1xuICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyAvKiAxICovXG4gICAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8qIDIgKi9cbiAgICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8qIDIgKi9cbiAgfVxuXG4gIGJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIGFydGljbGUsXG4gIGFzaWRlLFxuICBkZXRhaWxzLFxuICBmaWdjYXB0aW9uLFxuICBmaWd1cmUsXG4gIGZvb3RlcixcbiAgaGVhZGVyLFxuICBoZ3JvdXAsXG4gIG1haW4sXG4gIG1lbnUsXG4gIG5hdixcbiAgc2VjdGlvbixcbiAgc3VtbWFyeSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICBhdWRpbyxcbiAgY2FudmFzLFxuICBwcm9ncmVzcyxcbiAgdmlkZW8ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLyogMSAqL1xuICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgLyogMiAqL1xuICB9XG5cbiAgYXVkaW86bm90KFtjb250cm9sc10pIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGhlaWdodDogMDtcbiAgfVxuXG4gIFtoaWRkZW5dLFxuICB0ZW1wbGF0ZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIGEge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgYTphY3RpdmUsXG4gIGE6aG92ZXIge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cblxuICBhYmJyW3RpdGxlXSB7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZDtcbiAgfVxuXG4gIGIsXG4gIHN0cm9uZyB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICBkZm4ge1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuXG4gIGgxIHtcbiAgICBmb250LXNpemU6IDJlbTtcbiAgICBtYXJnaW46IDAuNjdlbSAwO1xuICB9XG5cbiAgbWFyayB7XG4gICAgYmFja2dyb3VuZDogI2ZmMDtcbiAgICBjb2xvcjogIzAwMDtcbiAgfVxuXG4gIHNtYWxsIHtcbiAgICBmb250LXNpemU6IDgwJTtcbiAgfVxuXG4gIHN1YixcbiAgc3VwIHtcbiAgICBmb250LXNpemU6IDc1JTtcbiAgICBsaW5lLWhlaWdodDogMDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICB9XG5cbiAgc3VwIHtcbiAgICB0b3A6IC0wLjVlbTtcbiAgfVxuXG4gIHN1YiB7XG4gICAgYm90dG9tOiAtMC4yNWVtO1xuICB9XG5cbiAgaW1nIHtcbiAgICBib3JkZXI6IDA7XG4gIH1cblxuICBzdmc6bm90KDpyb290KSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gIGZpZ3VyZSB7XG4gICAgbWFyZ2luOiAxZW0gNDBweDtcbiAgfVxuXG4gIGhyIHtcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICBoZWlnaHQ6IDA7XG4gIH1cblxuICBwcmUge1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICB9XG5cbiAgY29kZSxcbiAga2JkLFxuICBwcmUsXG4gIHNhbXAge1xuICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcbiAgICBmb250LXNpemU6IDFlbTtcbiAgfVxuXG4gIGJ1dHRvbixcbiAgaW5wdXQsXG4gIG9wdGdyb3VwLFxuICBzZWxlY3QsXG4gIHRleHRhcmVhIHtcbiAgICBjb2xvcjogaW5oZXJpdDsgLyogMSAqL1xuICAgIGZvbnQ6IGluaGVyaXQ7IC8qIDIgKi9cbiAgICBtYXJnaW46IDA7IC8qIDMgKi9cbiAgfVxuXG4gIGJ1dHRvbiB7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cblxuICBidXR0b24sXG4gIHNlbGVjdCB7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIH1cblxuICBidXR0b24sXG4gIGh0bWwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSwgLyogMSAqL1xuICBpbnB1dFt0eXBlPVwicmVzZXRcIl0sXG4gIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvKiAyICovXG4gICAgY3Vyc29yOiBwb2ludGVyOyAvKiAzICovXG4gIH1cblxuICBidXR0b25bZGlzYWJsZWRdLFxuICBodG1sIGlucHV0W2Rpc2FibGVkXSB7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICB9XG5cbiAgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxuICBpbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICBpbnB1dCB7XG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgfVxuXG4gIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbiAgaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gICAgcGFkZGluZzogMDsgLyogMiAqL1xuICB9XG5cbiAgaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG5cbiAgaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8qIDEgKi9cbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogMiAqL1xuICB9XG5cbiAgaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcbiAgaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICB9XG5cbiAgZmllbGRzZXQge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gICAgbWFyZ2luOiAwIDJweDtcbiAgICBwYWRkaW5nOiAwLjM1ZW0gMC42MjVlbSAwLjc1ZW07XG4gIH1cblxuICBsZWdlbmQge1xuICAgIGJvcmRlcjogMDsgLyogMSAqL1xuICAgIHBhZGRpbmc6IDA7IC8qIDIgKi9cbiAgfVxuXG4gIHRleHRhcmVhIHtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgfVxuXG4gIG9wdGdyb3VwIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIHRhYmxlIHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIGJvcmRlci1zcGFjaW5nOiAwO1xuICB9XG5cbiAgdGQsXG4gIHRoIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59IEBlbHNlIHtcbiAgLm5vcm1hbGl6ZSBodG1sLCBodG1sLm5vcm1hbGl6ZSB7XG4gICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IC8qIDEgKi9cbiAgICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogMiAqL1xuICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogMiAqL1xuICB9XG4gIC5ub3JtYWxpemUgYm9keSwgYm9keS5ub3JtYWxpemUge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIC5ub3JtYWxpemUgYXJ0aWNsZSwgYXJ0aWNsZS5ub3JtYWxpemUsXG4gIC5ub3JtYWxpemUgYXNpZGUsIGFzaWRlLm5vcm1hbGl6ZSxcbiAgLm5vcm1hbGl6ZSBkZXRhaWxzLCBkZXRhaWxzLm5vcm1hbGl6ZSxcbiAgLm5vcm1hbGl6ZSBmaWdjYXB0aW9uLCBmaWdjYXB0aW9uLm5vcm1hbGl6ZSxcbiAgLm5vcm1hbGl6ZSBmaWd1cmUsIGZpZ3VyZS5ub3JtYWxpemUsXG4gIC5ub3JtYWxpemUgZm9vdGVyLCBmb290ZXIubm9ybWFsaXplLFxuICAubm9ybWFsaXplIGhlYWRlciwgaGVhZGVyLm5vcm1hbGl6ZSxcbiAgLm5vcm1hbGl6ZSBoZ3JvdXAsIGhncm91cC5ub3JtYWxpemUsXG4gIC5ub3JtYWxpemUgbWFpbiwgbWFpbi5ub3JtYWxpemUsXG4gIC5ub3JtYWxpemUgbWVudSwgbWVudS5ub3JtYWxpemUsXG4gIC5ub3JtYWxpemUgbmF2LCBuYXYubm9ybWFsaXplLFxuICAubm9ybWFsaXplIHNlY3Rpb24sIHNlY3Rpb24ubm9ybWFsaXplLFxuICAubm9ybWFsaXplIHN1bW1hcnksIHN1bW1hcnkubm9ybWFsaXplIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIC5ub3JtYWxpemUgYXVkaW8sIGF1ZGlvLm5vcm1hbGl6ZSxcbiAgLm5vcm1hbGl6ZSBjYW52YXMsIGNhbnZhcy5ub3JtYWxpemUsXG4gIC5ub3JtYWxpemUgcHJvZ3Jlc3MsIHByb2dyZXNzLm5vcm1hbGl6ZSxcbiAgLm5vcm1hbGl6ZSB2aWRlbywgdmlkZW8ubm9ybWFsaXplIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8qIDEgKi9cbiAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7IC8qIDIgKi9cbiAgfVxuXG4gIC5ub3JtYWxpemUgYXVkaW86bm90KFtjb250cm9sc10pLCBhdWRpbzpub3QoW2NvbnRyb2xzXSkubm9ybWFsaXplIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGhlaWdodDogMDtcbiAgfVxuXG4gIC5ub3JtYWxpemUgW2hpZGRlbl0sIFtoaWRkZW5dLm5vcm1hbGl6ZSxcbiAgLm5vcm1hbGl6ZSB0ZW1wbGF0ZSwgdGVtcGxhdGUubm9ybWFsaXplIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLm5vcm1hbGl6ZSBhLCBhLm5vcm1hbGl6ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAubm9ybWFsaXplIGE6YWN0aXZlLCBhOmFjdGl2ZS5ub3JtYWxpemUsXG4gIC5ub3JtYWxpemUgYTpob3ZlciwgYTpob3Zlci5ub3JtYWxpemUge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cblxuICAubm9ybWFsaXplIGFiYnJbdGl0bGVdLCBhYmJyW3RpdGxlXS5ub3JtYWxpemUge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQ7XG4gIH1cblxuICAubm9ybWFsaXplIGIsIGIubm9ybWFsaXplLFxuICAubm9ybWFsaXplIHN0cm9uZywgc3Ryb25nLm5vcm1hbGl6ZSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICAubm9ybWFsaXplIGRmbiwgZGZuLm5vcm1hbGl6ZSB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICB9XG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogMmVtO1xuICAgIG1hcmdpbjogMC42N2VtIDA7XG4gIH1cblxuICAubm9ybWFsaXplIG1hcmssIG1hcmsubm9ybWFsaXplIHtcbiAgICBiYWNrZ3JvdW5kOiAjZmYwO1xuICAgIGNvbG9yOiAjMDAwO1xuICB9XG5cbiAgLm5vcm1hbGl6ZSBzbWFsbCwgc21hbGwubm9ybWFsaXplIHtcbiAgICBmb250LXNpemU6IDgwJTtcbiAgfVxuXG4gIC5ub3JtYWxpemUgc3ViLCBzdWIubm9ybWFsaXplLFxuICAubm9ybWFsaXplIHN1cCwgc3VwLm5vcm1hbGl6ZSB7XG4gICAgZm9udC1zaXplOiA3NSU7XG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgfVxuXG4gIC5ub3JtYWxpemUgc3VwLCBzdXAubm9ybWFsaXplIHtcbiAgICB0b3A6IC0wLjVlbTtcbiAgfVxuXG4gIC5ub3JtYWxpemUgc3ViLCBzdWIubm9ybWFsaXplIHtcbiAgICBib3R0b206IC0wLjI1ZW07XG4gIH1cblxuICAubm9ybWFsaXplIGltZywgaW1nLm5vcm1hbGl6ZSB7XG4gICAgYm9yZGVyOiAwO1xuICB9XG5cbiAgLm5vcm1hbGl6ZSBzdmc6bm90KDpyb290KSwgc3ZnOm5vdCg6cm9vdCkubm9ybWFsaXplIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgLm5vcm1hbGl6ZSBmaWd1cmUsIGZpZ3VyZS5ub3JtYWxpemUge1xuICAgIG1hcmdpbjogMWVtIDQwcHg7XG4gIH1cblxuICAubm9ybWFsaXplIGhyLCBoci5ub3JtYWxpemUge1xuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgIGhlaWdodDogMDtcbiAgfVxuXG4gIC5ub3JtYWxpemUgcHJlLCBwcmUubm9ybWFsaXplIHtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgfVxuXG4gIC5ub3JtYWxpemUgY29kZSwgY29kZS5ub3JtYWxpemUsXG4gIC5ub3JtYWxpemUga2JkLCBrYmQubm9ybWFsaXplLFxuICAubm9ybWFsaXplIHByZSwgcHJlLm5vcm1hbGl6ZSxcbiAgLm5vcm1hbGl6ZSBzYW1wLCBzYW1wLm5vcm1hbGl6ZSB7XG4gICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgbW9ub3NwYWNlO1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICB9XG5cbiAgLm5vcm1hbGl6ZSBidXR0b24sIGJ1dHRvbi5ub3JtYWxpemUsXG4gIC5ub3JtYWxpemUgaW5wdXQsIGlucHV0Lm5vcm1hbGl6ZSxcbiAgLm5vcm1hbGl6ZSBvcHRncm91cCwgb3B0Z3JvdXAubm9ybWFsaXplLFxuICAubm9ybWFsaXplIHNlbGVjdCwgc2VsZWN0Lm5vcm1hbGl6ZSxcbiAgLm5vcm1hbGl6ZSB0ZXh0YXJlYSwgdGV4dGFyZWEubm9ybWFsaXplIHtcbiAgICBjb2xvcjogaW5oZXJpdDsgLyogMSAqL1xuICAgIGZvbnQ6IGluaGVyaXQ7IC8qIDIgKi9cbiAgICBtYXJnaW46IDA7IC8qIDMgKi9cbiAgfVxuXG4gIC5ub3JtYWxpemUgYnV0dG9uLCBidXR0b24ubm9ybWFsaXplIHtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxuXG4gIC5ub3JtYWxpemUgYnV0dG9uLCBidXR0b24ubm9ybWFsaXplLFxuICAubm9ybWFsaXplIHNlbGVjdCwgc2VsZWN0Lm5vcm1hbGl6ZSB7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIH1cblxuICAubm9ybWFsaXplIGJ1dHRvbiwgYnV0dG9uLm5vcm1hbGl6ZSxcbiAgaHRtbCBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLCAvKiAxICovXG4gIC5ub3JtYWxpemUgaW5wdXRbdHlwZT1cInJlc2V0XCJdLCBpbnB1dFt0eXBlPVwicmVzZXRcIl0ubm9ybWFsaXplLFxuICAubm9ybWFsaXplIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0ubm9ybWFsaXplIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsgLyogMiAqL1xuICAgIGN1cnNvcjogcG9pbnRlcjsgLyogMyAqL1xuICB9XG5cbiAgLm5vcm1hbGl6ZSBidXR0b25bZGlzYWJsZWRdLCBidXR0b25bZGlzYWJsZWRdLm5vcm1hbGl6ZSxcbiAgaHRtbCBpbnB1dFtkaXNhYmxlZF0ge1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgfVxuXG4gIC5ub3JtYWxpemUgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLCBidXR0b246Oi1tb3otZm9jdXMtaW5uZXIubm9ybWFsaXplLFxuICAubm9ybWFsaXplIGlucHV0OjotbW96LWZvY3VzLWlubmVyLCBpbnB1dDo6LW1vei1mb2N1cy1pbm5lci5ub3JtYWxpemUge1xuICAgIGJvcmRlcjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLm5vcm1hbGl6ZSBpbnB1dCwgaW5wdXQubm9ybWFsaXplIHtcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICB9XG5cbiAgLm5vcm1hbGl6ZSBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5ub3JtYWxpemUsXG4gIC5ub3JtYWxpemUgaW5wdXRbdHlwZT1cInJhZGlvXCJdLCBpbnB1dFt0eXBlPVwicmFkaW9cIl0ubm9ybWFsaXplIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gICAgcGFkZGluZzogMDsgLyogMiAqL1xuICB9XG5cbiAgLm5vcm1hbGl6ZSBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLCBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLm5vcm1hbGl6ZSxcbiAgLm5vcm1hbGl6ZSBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLCBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLm5vcm1hbGl6ZSB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG5cbiAgLm5vcm1hbGl6ZSBpbnB1dFt0eXBlPVwic2VhcmNoXCJdLCBpbnB1dFt0eXBlPVwic2VhcmNoXCJdLm5vcm1hbGl6ZSB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8qIDEgKi9cbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogMiAqL1xuICB9XG5cbiAgLm5vcm1hbGl6ZSBpbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLCBpbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLm5vcm1hbGl6ZSxcbiAgLm5vcm1hbGl6ZSBpbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLCBpbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLm5vcm1hbGl6ZSB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICB9XG5cbiAgLm5vcm1hbGl6ZSBmaWVsZHNldCwgZmllbGRzZXQubm9ybWFsaXplIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgIG1hcmdpbjogMCAycHg7XG4gICAgcGFkZGluZzogMC4zNWVtIDAuNjI1ZW0gMC43NWVtO1xuICB9XG5cbiAgLm5vcm1hbGl6ZSBsZWdlbmQsIGxlZ2VuZC5ub3JtYWxpemUge1xuICAgIGJvcmRlcjogMDsgLyogMSAqL1xuICAgIHBhZGRpbmc6IDA7IC8qIDIgKi9cbiAgfVxuXG4gIC5ub3JtYWxpemUgdGV4dGFyZWEsIHRleHRhcmVhLm5vcm1hbGl6ZSB7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gIH1cblxuICAubm9ybWFsaXplIG9wdGdyb3VwLCBvcHRncm91cC5ub3JtYWxpemUge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLm5vcm1hbGl6ZSB0YWJsZSwgdGFibGUubm9ybWFsaXplIHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIGJvcmRlci1zcGFjaW5nOiAwO1xuICB9XG5cbiAgLm5vcm1hbGl6ZSB0ZCwgdGQubm9ybWFsaXplLFxuICAubm9ybWFsaXplIHRoLCB0aC5ub3JtYWxpemUge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbiIsIkBtaXhpbiBmb250LWZhY2UoXG4gICRmb250LWZhbWlseSxcbiAgJGZpbGUtcGF0aCxcbiAgJHdlaWdodDogbm9ybWFsLFxuICAkc3R5bGU6IG5vcm1hbCxcbiAgJGFzc2V0LXBpcGVsaW5lOiAkYXNzZXQtcGlwZWxpbmUsXG4gICRmaWxlLWZvcm1hdHM6IGVvdCB3b2ZmMiB3b2ZmIHR0ZiBzdmcpIHtcblxuICAkZm9udC11cmwtcHJlZml4OiBmb250LXVybC1wcmVmaXhlcigkYXNzZXQtcGlwZWxpbmUpO1xuXG4gIEBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHk7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICAgIGZvbnQtd2VpZ2h0OiAkd2VpZ2h0O1xuXG4gICAgc3JjOiBmb250LXNvdXJjZS1kZWNsYXJhdGlvbihcbiAgICAgICRmb250LWZhbWlseSxcbiAgICAgICRmaWxlLXBhdGgsXG4gICAgICAkYXNzZXQtcGlwZWxpbmUsXG4gICAgICAkZmlsZS1mb3JtYXRzLFxuICAgICAgJGZvbnQtdXJsLXByZWZpeFxuICAgICk7XG4gIH1cbn1cbiIsIi8qIHN0eWxlbGludC1kaXNhYmxlIGF0LXJ1bGUtZW1wdHktbGluZS1iZWZvcmUgKi9cbkBpbmNsdWRlIGZvbnQtZmFjZShcbiAgJ1NvdXJjZSBTYW5zIFBybycsXG4gICcjeyRmb250LXBhdGh9L3NvdXJjZXNhbnNwcm8tbGlnaHQtd2ViZm9udCcsXG4gIDMwMCxcbiAgbm9ybWFsLFxuICAkZmlsZS1mb3JtYXRzOiBlb3Qgd29mZjIgd29mZiB0dGZcbik7XG5cbkBpbmNsdWRlIGZvbnQtZmFjZShcbiAgJ1NvdXJjZSBTYW5zIFBybycsXG4gICcjeyRmb250LXBhdGh9L3NvdXJjZXNhbnNwcm8tcmVndWxhci13ZWJmb250JyxcbiAgNDAwLFxuICBub3JtYWwsXG4gICRmaWxlLWZvcm1hdHM6IGVvdCB3b2ZmMiB3b2ZmIHR0ZlxuKTtcblxuQGluY2x1ZGUgZm9udC1mYWNlKFxuICAnU291cmNlIFNhbnMgUHJvJyxcbiAgJyN7JGZvbnQtcGF0aH0vc291cmNlc2Fuc3Byby1pdGFsaWMtd2ViZm9udCcsXG4gIDQwMCxcbiAgaXRhbGljLFxuICAkZmlsZS1mb3JtYXRzOiBlb3Qgd29mZjIgd29mZiB0dGZcbik7XG5cbkBpbmNsdWRlIGZvbnQtZmFjZShcbiAgJ1NvdXJjZSBTYW5zIFBybycsXG4gICcjeyRmb250LXBhdGh9L3NvdXJjZXNhbnNwcm8tYm9sZC13ZWJmb250JyxcbiAgNzAwLFxuICBub3JtYWwsXG4gICRmaWxlLWZvcm1hdHM6IGVvdCB3b2ZmMiB3b2ZmIHR0ZlxuKTtcblxuQGluY2x1ZGUgZm9udC1mYWNlKFxuICAnTWVycml3ZWF0aGVyJyxcbiAgJyN7JGZvbnQtcGF0aH0vbWVycml3ZWF0aGVyLWxpZ2h0LXdlYmZvbnQnLFxuICAzMDAsXG4gIG5vcm1hbCxcbiAgJGZpbGUtZm9ybWF0czogZW90IHdvZmYyIHdvZmYgdHRmXG4pO1xuXG5AaW5jbHVkZSBmb250LWZhY2UoXG4gICdNZXJyaXdlYXRoZXInLFxuICAnI3skZm9udC1wYXRofS9tZXJyaXdlYXRoZXItcmVndWxhci13ZWJmb250JyxcbiAgNDAwLFxuICBub3JtYWwsXG4gICRmaWxlLWZvcm1hdHM6IGVvdCB3b2ZmMiB3b2ZmIHR0ZlxuKTtcblxuQGluY2x1ZGUgZm9udC1mYWNlKFxuICAnTWVycml3ZWF0aGVyJyxcbiAgJyN7JGZvbnQtcGF0aH0vbWVycml3ZWF0aGVyLWl0YWxpYy13ZWJmb250JyxcbiAgNDAwLFxuICBpdGFsaWMsXG4gICRmaWxlLWZvcm1hdHM6IGVvdCB3b2ZmMiB3b2ZmIHR0ZlxuKTtcblxuQGluY2x1ZGUgZm9udC1mYWNlKFxuICAnTWVycml3ZWF0aGVyJyxcbiAgJyN7JGZvbnQtcGF0aH0vbWVycml3ZWF0aGVyLWJvbGQtd2ViZm9udCcsXG4gIDcwMCxcbiAgbm9ybWFsLFxuICAkZmlsZS1mb3JtYXRzOiBlb3Qgd29mZjIgd29mZiB0dGZcbik7XG4vKiBzdHlsZWxpbnQtZW5hYmxlICovXG4iLCIvLyBVc2VkIGZvciBjcmVhdGluZyB0aGUgc291cmNlIHN0cmluZyBmb3IgZm9udHMgdXNpbmcgQGZvbnQtZmFjZVxuLy8gUmVmZXJlbmNlOiBodHRwOi8vZ29vLmdsL1J1MWJLUFxuXG5AZnVuY3Rpb24gZm9udC11cmwtcHJlZml4ZXIoJGFzc2V0LXBpcGVsaW5lKSB7XG4gIEBpZiAkYXNzZXQtcGlwZWxpbmUgPT0gdHJ1ZSB7XG4gICAgQHJldHVybiBmb250LXVybDtcbiAgfSBAZWxzZSB7XG4gICAgQHJldHVybiB1cmw7XG4gIH1cbn1cblxuQGZ1bmN0aW9uIGZvbnQtc291cmNlLWRlY2xhcmF0aW9uKFxuICAkZm9udC1mYW1pbHksXG4gICRmaWxlLXBhdGgsXG4gICRhc3NldC1waXBlbGluZSxcbiAgJGZpbGUtZm9ybWF0cyxcbiAgJGZvbnQtdXJsKSB7XG5cbiAgJHNyYzogKCk7XG5cbiAgJGZvcm1hdHMtbWFwOiAoXG4gICAgZW90OiAgIFwiI3skZmlsZS1wYXRofS5lb3Q/I2llZml4XCIgZm9ybWF0KFwiZW1iZWRkZWQtb3BlbnR5cGVcIiksXG4gICAgd29mZjI6IFwiI3skZmlsZS1wYXRofS53b2ZmMlwiIGZvcm1hdChcIndvZmYyXCIpLFxuICAgIHdvZmY6ICBcIiN7JGZpbGUtcGF0aH0ud29mZlwiIGZvcm1hdChcIndvZmZcIiksXG4gICAgdHRmOiAgIFwiI3skZmlsZS1wYXRofS50dGZcIiBmb3JtYXQoXCJ0cnVldHlwZVwiKSxcbiAgICBzdmc6ICAgXCIjeyRmaWxlLXBhdGh9LnN2ZyMjeyRmb250LWZhbWlseX1cIiBmb3JtYXQoXCJzdmdcIilcbiAgKTtcblxuICBAZWFjaCAka2V5LCAkdmFsdWVzIGluICRmb3JtYXRzLW1hcCB7XG4gICAgQGlmIGNvbnRhaW5zKCRmaWxlLWZvcm1hdHMsICRrZXkpIHtcbiAgICAgICRmaWxlLXBhdGg6IG50aCgkdmFsdWVzLCAxKTtcbiAgICAgICRmb250LWZvcm1hdDogbnRoKCR2YWx1ZXMsIDIpO1xuXG4gICAgICBAaWYgJGFzc2V0LXBpcGVsaW5lID09IHRydWUge1xuICAgICAgICAkc3JjOiBhcHBlbmQoJHNyYywgZm9udC11cmwoJGZpbGUtcGF0aCkgJGZvbnQtZm9ybWF0LCBjb21tYSk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJHNyYzogYXBwZW5kKCRzcmMsIHVybCgkZmlsZS1wYXRoKSAkZm9udC1mb3JtYXQsIGNvbW1hKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRzcmM7XG59XG4iLCIvLyBHcmlkIGNvbnRhaW5lclxuLnVzYS1ncmlkLFxuLnVzYS1ncmlkLWZ1bGwge1xuICBAaW5jbHVkZSBvdXRlci1jb250YWluZXIoKTtcbiAgbWF4LXdpZHRoOiAkc2l0ZS1tYXgtd2lkdGg7XG59XG5cbi51c2EtZ3JpZCB7XG4gIEBpbmNsdWRlIHBhZGRpbmcobnVsbCAkc2l0ZS1tYXJnaW5zLW1vYmlsZSk7XG5cbiAgQGluY2x1ZGUgbWVkaWEoJG1lZGl1bS1zY3JlZW4pIHtcbiAgICBAaW5jbHVkZSBwYWRkaW5nKG51bGwgJHNpdGUtbWFyZ2lucyk7XG4gIH1cbn1cblxuLnVzYS1ncmlkLWZ1bGwge1xuICBwYWRkaW5nOiAwO1xufVxuXG4vLyBHcmlkIGl0ZW1zXG5AaW5jbHVkZSBtZWRpYSgkbWVkaXVtKSB7XG4gIC51c2Etd2lkdGgtb25lLXdob2xlIHtcbiAgICBAaW5jbHVkZSBzcGFuLWNvbHVtbnMoNik7XG4gIH1cblxuICAudXNhLXdpZHRoLW9uZS1oYWxmIHtcbiAgICBAaW5jbHVkZSBzcGFuLWNvbHVtbnMoMyk7XG4gIH1cblxuICAudXNhLXdpZHRoLW9uZS10aGlyZCB7XG4gICAgQGluY2x1ZGUgc3Bhbi1jb2x1bW5zKDIpO1xuICB9XG5cbiAgLnVzYS13aWR0aC10d28tdGhpcmRzIHtcbiAgICBAaW5jbHVkZSBzcGFuLWNvbHVtbnMoNCk7XG4gIH1cblxuICAudXNhLXdpZHRoLW9uZS1mb3VydGgge1xuICAgIEBpbmNsdWRlIHNwYW4tY29sdW1ucygzKTtcblxuICAgICY6bnRoLWNoaWxkKDJuKSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgfVxuICB9XG5cbiAgLnVzYS13aWR0aC10aHJlZS1mb3VydGhzIHtcbiAgICBAaW5jbHVkZSBzcGFuLWNvbHVtbnMoNik7XG4gIH1cblxuICAudXNhLXdpZHRoLW9uZS1zaXh0aCB7XG4gICAgQGluY2x1ZGUgc3Bhbi1jb2x1bW5zKDIpO1xuXG4gICAgJjpudGgtY2hpbGQoM24pIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICB9XG4gIH1cblxuICAudXNhLXdpZHRoLWZpdmUtc2l4dGhzIHtcbiAgICBAaW5jbHVkZSBzcGFuLWNvbHVtbnMoNCk7XG4gIH1cblxuICAudXNhLXdpZHRoLW9uZS10d2VsZnRoIHtcbiAgICBAaW5jbHVkZSBzcGFuLWNvbHVtbnMoMik7XG5cbiAgICAmOm50aC1jaGlsZCgzbikge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuXG4gIC51c2Etd2lkdGgtZml2ZS10d2VsZnRocyB7XG4gICAgQGluY2x1ZGUgc3Bhbi1jb2x1bW5zKDIpO1xuICB9XG5cbiAgLnVzYS13aWR0aC1zZXZlbi10d2VsZnRocyB7XG4gICAgQGluY2x1ZGUgc3Bhbi1jb2x1bW5zKDQpO1xuICB9XG59XG5cbkBpbmNsdWRlIG1lZGlhKCRsYXJnZSkge1xuICAudXNhLXdpZHRoLW9uZS13aG9sZSB7XG4gICAgQGluY2x1ZGUgc3Bhbi1jb2x1bW5zKDEyKTtcbiAgfVxuXG4gIC51c2Etd2lkdGgtb25lLWhhbGYge1xuICAgIEBpbmNsdWRlIHNwYW4tY29sdW1ucyg2KTtcbiAgfVxuXG4gIC51c2Etd2lkdGgtb25lLXRoaXJkIHtcbiAgICBAaW5jbHVkZSBzcGFuLWNvbHVtbnMoNCk7XG4gIH1cblxuICAudXNhLXdpZHRoLXR3by10aGlyZHMge1xuICAgIEBpbmNsdWRlIHNwYW4tY29sdW1ucyg4KTtcbiAgfVxuXG4gIC51c2Etd2lkdGgtb25lLWZvdXJ0aCB7XG4gICAgQGluY2x1ZGUgc3Bhbi1jb2x1bW5zKDMpO1xuXG4gICAgJjpudGgtY2hpbGQoMm4pIHtcbiAgICAgIEBpbmNsdWRlIHNwYW4tY29sdW1ucygzKTtcbiAgICB9XG5cbiAgICAmOm50aC1jaGlsZCg0bikge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuXG4gIC51c2Etd2lkdGgtdGhyZWUtZm91cnRocyB7XG4gICAgQGluY2x1ZGUgc3Bhbi1jb2x1bW5zKDkpO1xuICB9XG5cbiAgLnVzYS13aWR0aC1vbmUtc2l4dGgge1xuICAgIEBpbmNsdWRlIHNwYW4tY29sdW1ucygyKTtcblxuICAgICY6bnRoLWNoaWxkKDNuKSB7XG4gICAgICBAaW5jbHVkZSBzcGFuLWNvbHVtbnMoMik7XG4gICAgfVxuXG4gICAgJjpudGgtY2hpbGQoNm4pIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICB9XG4gIH1cblxuICAudXNhLXdpZHRoLWZpdmUtc2l4dGhzIHtcbiAgICBAaW5jbHVkZSBzcGFuLWNvbHVtbnMoMTApO1xuICB9XG5cbiAgLnVzYS13aWR0aC1vbmUtdHdlbGZ0aCB7XG4gICAgQGluY2x1ZGUgc3Bhbi1jb2x1bW5zKDEpO1xuXG4gICAgJjpudGgtY2hpbGQoM24pIHtcbiAgICAgIEBpbmNsdWRlIHNwYW4tY29sdW1ucygxKTtcbiAgICB9XG5cbiAgICAmOm50aC1jaGlsZCgxMm4pIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICB9XG4gIH1cblxuICAudXNhLXdpZHRoLWZpdmUtdHdlbGZ0aHMge1xuICAgIEBpbmNsdWRlIHNwYW4tY29sdW1ucyg1KTtcbiAgfVxuXG4gIC51c2Etd2lkdGgtc2V2ZW4tdHdlbGZ0aHMge1xuICAgIEBpbmNsdWRlIHNwYW4tY29sdW1ucyg3KTtcbiAgfVxufVxuXG4vLyBTcGVjaWZpZXMgZW5kIG9mIGEgcm93LlxuLy8gUmVxdWlyZWQgaWYgZ3JpZC1ib3ggY29udGFpbnMgbXVsdGlwbGUgcm93cy5cbi8vIFJlcXVpcmVkIGlmIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCA6bGFzdC1jaGlsZFxuLnVzYS1lbmQtcm93IHtcbiAgQGluY2x1ZGUgb21lZ2EoKTtcbn1cblxuLy8gR3JpZCBPZmZzZXRzXG4udXNhLW9mZnNldC1vbmUtdHdlbGZ0aCB7XG4gIEBpbmNsdWRlIHNoaWZ0KDEgb2YgMTIpO1xufVxuXG4udXNhLW9mZnNldC1vbmUtc2l4dGgge1xuICBAaW5jbHVkZSBzaGlmdCgyIG9mIDEyKTtcbn1cblxuLnVzYS1vZmZzZXQtb25lLWZvdXJ0aCB7XG4gIEBpbmNsdWRlIHNoaWZ0KDMgb2YgMTIpO1xufVxuXG4udXNhLW9mZnNldC1vbmUtdGhpcmQge1xuICBAaW5jbHVkZSBzaGlmdCg0IG9mIDEyKTtcbn1cblxuLnVzYS1vZmZzZXQtZml2ZS10d2VsZnRocyB7XG4gIEBpbmNsdWRlIHNoaWZ0KDUgb2YgMTIpO1xufVxuXG4udXNhLW9mZnNldC1vbmUtaGFsZiB7XG4gIEBpbmNsdWRlIHNoaWZ0KDYgb2YgMTIpO1xufVxuXG4udXNhLW9mZnNldC1zZXZlbi10d2VsZnRocyB7XG4gIEBpbmNsdWRlIHNoaWZ0KDcgb2YgMTIpO1xufVxuXG4udXNhLW9mZnNldC10d28tdGhpcmRzIHtcbiAgQGluY2x1ZGUgc2hpZnQoOCBvZiAxMik7XG59XG5cbi51c2Etb2Zmc2V0LXRocmVlLWZvdXJ0aHMge1xuICBAaW5jbHVkZSBzaGlmdCg5IG9mIDEyKTtcbn1cblxuLnVzYS1vZmZzZXQtZml2ZS1zaXh0aHMge1xuICBAaW5jbHVkZSBzaGlmdCgxMCBvZiAxMik7XG59XG5cbi51c2Etb2Zmc2V0LWVsZXZlbi10d2VsZnRocyB7XG4gIEBpbmNsdWRlIHNoaWZ0KDExIG9mIDEyKTtcbn1cbiIsIkBjaGFyc2V0IFwiVVRGLThcIjtcblxuLy8vIE1ha2VzIGFuIGVsZW1lbnQgYSBvdXRlciBjb250YWluZXIgYnkgY2VudGVyaW5nIGl0IGluIHRoZSB2aWV3cG9ydCwgY2xlYXJpbmcgaXRzIGZsb2F0cywgYW5kIHNldHRpbmcgaXRzIGBtYXgtd2lkdGhgLlxuLy8vIEFsdGhvdWdoIG9wdGlvbmFsLCB1c2luZyBgb3V0ZXItY29udGFpbmVyYCBpcyByZWNvbW1lbmRlZC4gVGhlIG1peGluIGNhbiBiZSBjYWxsZWQgb24gbW9yZSB0aGFuIG9uZSBlbGVtZW50IHBlciBwYWdlLCBhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBuZXN0ZWQuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlciBbdW5pdF19ICRsb2NhbC1tYXgtd2lkdGggWyRtYXgtd2lkdGhdXG4vLy8gICBNYXggd2lkdGggdG8gYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudC4gQ2FuIGJlIGEgcGVyY2VudGFnZSBvciBhIG1lYXN1cmUuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVXNhZ2Vcbi8vLyAgIC5lbGVtZW50IHtcbi8vLyAgICAgQGluY2x1ZGUgb3V0ZXItY29udGFpbmVyKDEwMCUpO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgY3NzIC0gQ1NTIE91dHB1dFxuLy8vICAgLmVsZW1lbnQge1xuLy8vICAgICBtYXgtd2lkdGg6IDEwMCU7XG4vLy8gICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuLy8vICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4vLy8gICB9XG4vLy9cbi8vLyAgIC5lbGVtZW50OjphZnRlciB7XG4vLy8gICAgIGNsZWFyOiBib3RoO1xuLy8vICAgICBjb250ZW50OiBcIlwiO1xuLy8vICAgICBkaXNwbGF5OiB0YWJsZTtcbi8vLyAgIH1cblxuQG1peGluIG91dGVyLWNvbnRhaW5lcigkbG9jYWwtbWF4LXdpZHRoOiAkbWF4LXdpZHRoKSB7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xuICBtYXgtd2lkdGg6ICRsb2NhbC1tYXgtd2lkdGg7XG4gIG1hcmdpbjoge1xuICAgIGxlZnQ6IGF1dG87XG4gICAgcmlnaHQ6IGF1dG87XG4gIH1cbn1cbiIsIkBjaGFyc2V0IFwiVVRGLThcIjtcblxuLy8vIFNldHMgdGhlIHJlbGF0aXZlIHdpZHRoIG9mIGEgc2luZ2xlIGdyaWQgY29sdW1uLiBUaGUgdW5pdCB1c2VkIHNob3VsZCBiZSB0aGUgc2FtZSBvbmUgdXNlZCB0byBkZWZpbmUgYCRndXR0ZXJgLiBTZXQgd2l0aCBhIGAhZ2xvYmFsYCBmbGFnLlxuLy8vXG4vLy8gQHR5cGUgTnVtYmVyIChVbml0KVxuXG4kY29sdW1uOiA0LjIzNThlbSAhZGVmYXVsdDtcblxuLy8vIFNldHMgdGhlIHJlbGF0aXZlIHdpZHRoIG9mIGEgc2luZ2xlIGdyaWQgZ3V0dGVyLiBUaGUgdW5pdCB1c2VkIHNob3VsZCBiZSB0aGUgc2FtZSBvbmUgdXNlZCB0byBkZWZpbmUgYCRjb2x1bW5gLiBTZXQgd2l0aCB0aGUgYCFnbG9iYWxgIGZsYWcuXG4vLy9cbi8vLyBAdHlwZSBOdW1iZXIgKFVuaXQpXG5cbiRndXR0ZXI6IDEuNjE4ZW0gIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZC4gSXRzIHZhbHVlIGNhbiBiZSBvdmVycmlkZGVuIGluc2lkZSBhIG1lZGlhIHF1ZXJ5IHVzaW5nIHRoZSBgbWVkaWEoKWAgbWl4aW4uIFNldCB3aXRoIHRoZSBgIWdsb2JhbGAgZmxhZy5cbi8vL1xuLy8vIEB0eXBlIE51bWJlciAoVW5pdGxlc3MpXG5cbiRncmlkLWNvbHVtbnM6IDEyICFkZWZhdWx0O1xuXG4vLy8gU2V0cyB0aGUgbWF4LXdpZHRoIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IHRoYXQgaW5jbHVkZXMgYG91dGVyLWNvbnRhaW5lcigpYC4gU2V0IHdpdGggdGhlIGAhZ2xvYmFsYCBmbGFnLlxuLy8vXG4vLy8gQHR5cGUgTnVtYmVyIChVbml0KVxuLy8vXG4kbWF4LXdpZHRoOiAxMjAwcHggIWRlZmF1bHQ7XG5cbi8vLyBXaGVuIHNldCB0byB0cnVlLCBpdCBzZXRzIHRoZSBib3gtc2l6aW5nIHByb3BlcnR5IG9mIGFsbCBlbGVtZW50cyB0byBgYm9yZGVyLWJveGAuIFNldCB3aXRoIGEgYCFnbG9iYWxgIGZsYWcuXG4vLy9cbi8vLyBAdHlwZSBCb29sXG4vLy9cbi8vLyBAZXhhbXBsZSBjc3MgLSBDU1MgT3V0cHV0XG4vLy8gICBodG1sIHtcbi8vLyAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuLy8vXG4vLy8gICAqLCAqOjphZnRlciwgKjo6YmVmb3JlIHtcbi8vLyAgICAgYm94LXNpemluZzogaW5oZXJpdDtcbi8vLyAgIH1cblxuJGJvcmRlci1ib3gtc2l6aW5nOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gU2V0cyB0aGUgZGVmYXVsdCBbbWVkaWEgZmVhdHVyZV0oaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1tZWRpYXF1ZXJpZXMvI21lZGlhKSB0aGF0IGBtZWRpYSgpYCBhbmQgYG5ldy1icmVha3BvaW50KClgIHJldmVydCB0byB3aGVuIG9ubHkgYSBicmVha3BvaW50IHZhbHVlIGlzIHBhc3NlZC4gU2V0IHdpdGggYSBgIWdsb2JhbGAgZmxhZy5cbi8vL1xuLy8vIEB0eXBlIFN0cmluZ1xuXG4kZGVmYXVsdC1mZWF0dXJlOiBtaW4td2lkdGg7IC8vIERlZmF1bHQgQG1lZGlhIGZlYXR1cmUgZm9yIHRoZSBicmVha3BvaW50KCkgbWl4aW5cblxuLy8vU2V0cyB0aGUgZGVmYXVsdCBsYXlvdXQgZGlyZWN0aW9uIG9mIHRoZSBncmlkLiBDYW4gYmUgYExUUmAgb3IgYFJUTGAuIFNldCB3aXRoIGEgYCFnbG9iYWxgIGZsYWcuXG4vLy9cbi8vL0B0eXBlIFN0cmluZ1xuXG4kZGVmYXVsdC1sYXlvdXQtZGlyZWN0aW9uOiBMVFIgIWRlZmF1bHQ7XG4iLCIkYmFzZS1yZW06IDE2cHg7IC8vIGEgbmV3IHZhbHVlIGRpc3RpbmN0IGZyb20gVVNXRFMgc3RhdGljIHZhcjtcbiRzYW5zLW5vcm1hbGl6ZS1tdWx0aXBsaWVyOiAxLjA7IC8vIG11bHRpcGxpZXIgZm9yIHRyZWJ1Y2hldDsgdGFraW5nIFNvdXJjZSBTYW5zIGFzIDEuMFxuXG5AaW1wb3J0ICdkZy1mdW5jdGlvbnMnO1xuXG4vLyBUeXBvZ3JhcGh5XG4vLyBSZW1vdmluZyB0aGUgZnJvbSAkZW0tYmFzZSBzbyB3ZSBhcmUgbm90IGluaGVyaXRpbmcgdGhhdFxuLy8gdmFsdWUgZnJvbSBCb3VyYm9uLlxuLy8kZW0tYmFzZTogICAgICAgICAgICAgIDEwcHg7XG4kYmFzZS1mb250LXNpemUtcHg6ICAgICAgMTdweDtcbiRzbWFsbC1mb250LXNpemUtcHg6ICAgICAxNHB4O1xuJGxlYWQtZm9udC1zaXplLXB4OiAgICAgIDIwcHg7XG4kdGl0bGUtZm9udC1zaXplLXB4OiAgICAgNTJweDtcbiRoMS1mb250LXNpemUtcHg6ICAgICAgICA0MHB4O1xuJGgyLWZvbnQtc2l6ZS1weDogICAgICAgIDMwcHg7XG4kaDMtZm9udC1zaXplLXB4OiAgICAgICAgMjBweDtcbiRoNC1mb250LXNpemUtcHg6ICAgICAgICAxN3B4O1xuJGg1LWZvbnQtc2l6ZS1weDogICAgICAgIDE1cHg7XG4kaDYtZm9udC1zaXplLXB4OiAgICAgICAgMTNweDtcblxuXG4kYmFzZS1mb250LXNpemU6ICAgICAgc2l6ZSgkYmFzZS1mb250LXNpemUtcHgpO1xuJHNtYWxsLWZvbnQtc2l6ZTogICAgIHNpemUoJHNtYWxsLWZvbnQtc2l6ZS1weCk7XG4kbGVhZC1mb250LXNpemU6ICAgICAgc2l6ZSgkbGVhZC1mb250LXNpemUtcHgpO1xuJHRpdGxlLWZvbnQtc2l6ZTogICAgIHNpemUoJHRpdGxlLWZvbnQtc2l6ZS1weCk7XG4kaDEtZm9udC1zaXplOiAgICAgICAgc2l6ZSgkaDEtZm9udC1zaXplLXB4KTtcbiRoMi1mb250LXNpemU6ICAgICAgICBzaXplKCRoMi1mb250LXNpemUtcHgpO1xuJGgzLWZvbnQtc2l6ZTogICAgICAgIHNpemUoJGgzLWZvbnQtc2l6ZS1weCk7XG4kaDQtZm9udC1zaXplOiAgICAgICAgc2l6ZSgkaDQtZm9udC1zaXplLXB4KTtcbiRoNS1mb250LXNpemU6ICAgICAgICBzaXplKCRoNS1mb250LXNpemUtcHgpO1xuJGg2LWZvbnQtc2l6ZTogICAgICAgIHNpemUoJGg2LWZvbnQtc2l6ZS1weCk7XG4vLyAkYmFzZS1saW5lLWhlaWdodDogICAgMS41O1xuLy8gJGhlYWRpbmctbGluZS1oZWlnaHQ6IDEuMztcbi8vICRsZWFkLWxpbmUtaGVpZ2h0OiAgICAxLjc7XG5cbiRmb250LXNhbnM6ICAgICAgICAgICBUcmVidWNoZXQsVGFob21hLHNhbnMtc2VyaWY7XG4vLyAkZm9udC1zZXJpZjogICAgICAgICAgJ01lcnJpd2VhdGhlcicsICRnZW9yZ2lhO1xuXG4vLyBUT0RPIHRoZXNlIHNob3VsZCBiZSBjYWxsZWQgZm9udC13ZWlnaHQtJHt9XG4vLyAkZm9udC1ub3JtYWw6ICAgICAgICAgNDAwO1xuLy8gJGZvbnQtYm9sZDogICAgICAgICAgIDcwMDtcblxuLy8gQ29sb3Jcbi8vICRjb2xvci1ibHVlOiAgICAgICAgICAgICAgICAgIzAwNzFiYztcbi8vICRjb2xvci1ibHVlLWRhcmtlcjogICAgICAgICAgIzIwNTQ5Mztcbi8vICRjb2xvci1ibHVlLWRhcmtlc3Q6ICAgICAgICAgIzExMmU1MTtcblxuLy8gJGNvbG9yLWFxdWE6ICAgICAgICAgICAgICAgICAjMDJiZmU3O1xuLy8gJGNvbG9yLWFxdWEtZGFyazogICAgICAgICAgICAjMDBhNmQyO1xuLy8gJGNvbG9yLWFxdWEtZGFya2VzdDogICAgICAgICAjMDQ2Yjk5O1xuLy8gJGNvbG9yLWFxdWEtbGlnaHQ6ICAgICAgICAgICAjOWJkYWYxO1xuLy8gJGNvbG9yLWFxdWEtbGlnaHRlc3Q6ICAgICAgICAjZTFmM2Y4O1xuXG4vLyAkY29sb3ItcmVkOiAgICAgICAgICAgICAgICAgICNlMzFjM2Q7XG4vLyAkY29sb3ItcmVkLWRhcms6ICAgICAgICAgICAgICNjZDIwMjY7XG4vLyAkY29sb3ItcmVkLWRhcmtlc3Q6ICAgICAgICAgICM5ODFiMWU7XG4vLyAkY29sb3ItcmVkLWxpZ2h0OiAgICAgICAgICAgICNlNTkzOTM7XG4vLyAkY29sb3ItcmVkLWxpZ2h0ZXN0OiAgICAgICAgICNmOWRlZGU7XG5cbi8vICRjb2xvci13aGl0ZTogICAgICAgICAgICAgICAgI2ZmZmZmZjtcbi8vICRjb2xvci1ibGFjazogICAgICAgICAgICAgICAgIzAwMDAwMDtcbi8vICRjb2xvci1ibGFjay1saWdodDogICAgICAgICAgIzIxMjEyMTtcblxuLy8gJGNvbG9yLWdyYXktZGFyazogICAgICAgICAgICAjMzIzYTQ1O1xuLy8gJGNvbG9yLWdyYXk6ICAgICAgICAgICAgICAgICAjNWI2MTZiO1xuLy8gJGNvbG9yLWdyYXktbWVkaXVtOiAgICAgICAgICAjNzU3NTc1O1xuLy8gJGNvbG9yLWdyYXktbGlnaHQ6ICAgICAgICAgICAjYWViMGI1O1xuLy8gJGNvbG9yLWdyYXktbGlnaHRlcjogICAgICAgICAjZDZkN2Q5O1xuLy8gJGNvbG9yLWdyYXktbGlnaHRlc3Q6ICAgICAgICAjZjFmMWYxO1xuXG4vLyAkY29sb3ItZ3JheS13YXJtLWRhcms6ICAgICAgICM0OTQ0NDA7XG4vLyAkY29sb3ItZ3JheS13YXJtLWxpZ2h0OiAgICAgICNlNGUyZTA7XG4vLyAkY29sb3ItZ3JheS1jb29sLWxpZ2h0OiAgICAgICNkY2U0ZWY7XG5cbi8vICRjb2xvci1nb2xkOiAgICAgICAgICAgICAgICAgI2ZkYjgxZTtcbi8vICRjb2xvci1nb2xkLWxpZ2h0OiAgICAgICAgICAgI2Y5YzY0Mjtcbi8vICRjb2xvci1nb2xkLWxpZ2h0ZXI6ICAgICAgICAgI2ZhZDk4MDtcbi8vICRjb2xvci1nb2xkLWxpZ2h0ZXN0OiAgICAgICAgI2ZmZjFkMjtcblxuLy8gJGNvbG9yLWdyZWVuOiAgICAgICAgICAgICAgICAjMmU4NTQwO1xuLy8gJGNvbG9yLWdyZWVuLWxpZ2h0OiAgICAgICAgICAjNGFhNTY0O1xuLy8gJGNvbG9yLWdyZWVuLWxpZ2h0ZXI6ICAgICAgICAjOTRiZmEyO1xuLy8gJGNvbG9yLWdyZWVuLWxpZ2h0ZXN0OiAgICAgICAjZTdmNGU0O1xuXG4vLyAkY29sb3ItY29vbC1ibHVlOiAgICAgICAgICAgICMyMDU0OTM7XG4vLyAkY29sb3ItY29vbC1ibHVlLWxpZ2h0OiAgICAgICM0NzczYWE7XG4vLyAkY29sb3ItY29vbC1ibHVlLWxpZ2h0ZXI6ICAgICM4YmE2Y2E7XG4vLyAkY29sb3ItY29vbC1ibHVlLWxpZ2h0ZXN0OiAgICNkY2U0ZWY7XG5cbi8vICRjb2xvci1wdXJwbGU6ICAgICAgICAgICAgICAgIzRjMmM5MjtcblxuLy8gRnVuY3Rpb25hbCBjb2xvcnNcbi8vICRjb2xvci1wcmltYXJ5OiAgICAgICAgICAgICAgJGNvbG9yLWJsdWU7XG4vLyAkY29sb3ItcHJpbWFyeS1kYXJrZXI6ICAgICAgICRjb2xvci1ibHVlLWRhcmtlcjtcbi8vICRjb2xvci1wcmltYXJ5LWRhcmtlc3Q6ICAgICAgJGNvbG9yLWJsdWUtZGFya2VzdDtcblxuLy8gJGNvbG9yLXByaW1hcnktYWx0OiAgICAgICAgICAkY29sb3ItYXF1YTtcbi8vICRjb2xvci1wcmltYXJ5LWFsdC1kYXJrOiAgICAgJGNvbG9yLWFxdWEtZGFyaztcbi8vICRjb2xvci1wcmltYXJ5LWFsdC1kYXJrZXN0OiAgJGNvbG9yLWFxdWEtZGFya2VzdDtcbi8vICRjb2xvci1wcmltYXJ5LWFsdC1saWdodDogICAgJGNvbG9yLWFxdWEtbGlnaHQ7XG4vLyAkY29sb3ItcHJpbWFyeS1hbHQtbGlnaHRlc3Q6ICRjb2xvci1hcXVhLWxpZ2h0ZXN0O1xuXG4vLyAkY29sb3Itc2Vjb25kYXJ5OiAgICAgICAgICAgICRjb2xvci1yZWQ7XG4vLyAkY29sb3Itc2Vjb25kYXJ5LWRhcms6ICAgICAgICRjb2xvci1yZWQtZGFyaztcbi8vICRjb2xvci1zZWNvbmRhcnktZGFya2VzdDogICAgJGNvbG9yLXJlZC1kYXJrZXN0O1xuLy8gJGNvbG9yLXNlY29uZGFyeS1saWdodDogICAgICAkY29sb3ItcmVkLWxpZ2h0O1xuLy8gJGNvbG9yLXNlY29uZGFyeS1saWdodGVzdDogICAkY29sb3ItcmVkLWxpZ2h0ZXN0O1xuXG4vLyAkY29sb3ItYmFzZTogICAgICAgICAgICAgICAgICRjb2xvci1ibGFjay1saWdodDtcbi8vICRjb2xvci1mb2N1czogICAgICAgICAgICAgICAgJGNvbG9yLWdyYXktbGlnaHQ7XG4vLyAkY29sb3ItdmlzaXRlZDogICAgICAgICAgICAgICRjb2xvci1wdXJwbGU7XG5cbi8vICRjb2xvci1zaGFkb3c6ICAgICAgICAgICAgICAgcmdiYSgjMDAwLCAwLjMpO1xuLy8gJGNvbG9yLXRyYW5zcGFyZW50OiAgICAgICAgICByZ2JhKCMwMDAsIDApO1xuXG4vLyBNb2JpbGUgRmlyc3QgQnJlYWtwb2ludHNcbi8vICRzbWFsbC1zY3JlZW46ICA0ODFweDtcbiRtZWRpdW0tc2NyZWVuOiA4MDFweDtcbiRsYXJnZS1zY3JlZW46ICAxMDI1cHg7XG5cbi8vIEdyaWQgY29sdW1uIGNvdW50cyBieSBzY3JlZW4gc2l6ZVxuLy8gJGdyaWQtY29sdW1ucy1zbWFsbDogMTtcbi8vICRncmlkLWNvbHVtbnMtbWVkaXVtOiA2O1xuLy8gJGdyaWQtY29sdW1ucy1sYXJnZTogMTI7XG5cbi8vIEBtZWRpYSBzaW5nbGUta2V5d29yZCBoZWxwZXJzXG4vLyAkc21hbGw6IG5ldy1icmVha3BvaW50KG1pbi13aWR0aCAkc21hbGwtc2NyZWVuICRncmlkLWNvbHVtbnMtc21hbGwpO1xuLy8gJG1lZGl1bTogbmV3LWJyZWFrcG9pbnQobWluLXdpZHRoICRtZWRpdW0tc2NyZWVuICRncmlkLWNvbHVtbnMtbWVkaXVtKTtcbi8vICRsYXJnZTogbmV3LWJyZWFrcG9pbnQobWluLXdpZHRoICRsYXJnZS1zY3JlZW4gJGdyaWQtY29sdW1ucy1sYXJnZSk7XG5cbi8vIFJlbGF0aXZlIGZvbnQgYW5kIGltYWdlIGZpbGUgcGF0aHNcbi8vICRmb250LXBhdGg6ICAgJy4uL2ZvbnRzJztcbi8vICRpbWFnZS1wYXRoOiAgJy4uL2ltZyc7XG5cbi8vIFNldCAkYXNzZXQtcGlwZWxpbmUgdG8gdHJ1ZSBpZiB5b3UncmUgdXNpbmcgdGhlIFJhaWxzIEFzc2V0IFBpcGVsaW5lXG4vLyAkYXNzZXQtcGlwZWxpbmU6ICAgICAgZmFsc2U7XG5cbi8vIE1hZ2ljIE51bWJlcnNcbiR0ZXh0LW1heC13aWR0aC1weDogICAgICAgICAgNTMwcHg7XG4kbGVhZC1tYXgtd2lkdGgtcHg6ICAgICAgICAgIDc3MHB4O1xuJHNpdGUtbWFyZ2lucy1weDogICAgICAgICAgICAzMHB4O1xuJHNpdGUtbWFyZ2lucy1tb2JpbGUtcHg6ICAgICAxNnB4O1xuJGlucHV0LW1heC13aWR0aC1weDogICAgICAgICA0NjBweDtcblxuJHRleHQtbWF4LXdpZHRoOiAgICAgICAgICBzaXplKCR0ZXh0LW1heC13aWR0aC1weCk7XG4kbGVhZC1tYXgtd2lkdGg6ICAgICAgICAgIHNpemUoJGxlYWQtbWF4LXdpZHRoLXB4KTtcbiRzaXRlLW1heC13aWR0aDogICAgICAgICAgOTYwcHg7XG4kc2l0ZS1tYXJnaW5zOiAgICAgICAgICAgIHNpemUoJHNpdGUtbWFyZ2lucy1weCk7XG4kc2l0ZS1tYXJnaW5zLW1vYmlsZTogICAgIHNpemUoJHNpdGUtbWFyZ2lucy1tb2JpbGUtcHgpO1xuLy8gJGFydGljbGUtbWF4LXdpZHRoOiAgICAgICA2MDBweDtcbiRpbnB1dC1tYXgtd2lkdGg6ICAgICAgICAgc2l6ZSgkaW5wdXQtbWF4LXdpZHRoLXB4KTtcbi8vICRsYWJlbC1ib3JkZXItcmFkaXVzOiAgICAgMnB4O1xuLy8gJGNoZWNrYm94LWJvcmRlci1yYWRpdXM6ICAycHg7XG4vLyAkYm9yZGVyLXJhZGl1czogICAgICAgICAgIDNweDtcbi8vICRidXR0b24tYm9yZGVyLXJhZGl1czogICAgNXB4O1xuLy8gJGJveC1zaGFkb3c6ICAgICAgICAgICAgICAwIDAgMnB4ICRjb2xvci1zaGFkb3c7XG4vLyAkZm9jdXMtb3V0bGluZTogICAgICAgICAgIDJweCBkb3R0ZWQgJGNvbG9yLWdyYXktbGlnaHQ7XG4vLyAkZm9jdXMtc3BhY2luZzogICAgICAgICAgIDNweDtcbi8vICRuYXYtd2lkdGg6ICAgICAgICAgICAgICAgOTUxcHg7XG5cbi8vIDQ0IHggNDQgcGl4ZWxzIGhpdCB0YXJnZXQgZm9sbG93aW5nIEFwcGxlIGlPUyBIdW1hbiBJbnRlcmZhY2Vcbi8vIEd1aWRlbGluZXNcbi8vICRoaXQtYXJlYTogNC40cmVtO1xuXG4vLyAkc3BhY2luZy14LXNtYWxsOiAwLjVyZW07XG4vLyAkc3BhY2luZy1zbWFsbDogMXJlbTtcbi8vICRzcGFjaW5nLW1kLXNtYWxsOiAxLjVyZW07XG4vLyAkc3BhY2luZy1tZWRpdW06IDJyZW07XG4vLyAkc3BhY2luZy1sYXJnZTogM3JlbTtcbiIsIkBjaGFyc2V0IFwiVVRGLThcIjtcblxuLy8vIFByb3ZpZGVzIGFuIGVhc3kgd2F5IHRvIGluY2x1ZGUgYSBjbGVhcmZpeCBmb3IgY29udGFpbmluZyBmbG9hdHMuXG4vLy9cbi8vLyBAbGluayBodHRwOi8vZ29vLmdsL3lQNWhpWlxuLy8vXG4vLy8gQGV4YW1wbGUgc2Nzc1xuLy8vICAgLmVsZW1lbnQge1xuLy8vICAgICBAaW5jbHVkZSBjbGVhcmZpeDtcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIGNzc1xuLy8vICAgLmVsZW1lbnQ6OmFmdGVyIHtcbi8vLyAgICAgY2xlYXI6IGJvdGg7XG4vLy8gICAgIGNvbnRlbnQ6IFwiXCI7XG4vLy8gICAgIGRpc3BsYXk6IGJsb2NrO1xuLy8vICAgfVxuXG5AbWl4aW4gY2xlYXJmaXgge1xuICAmOjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuIiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuXG4vLy8gRGlyZWN0aW9uYWwtcHJvcGVydHkgbWl4aW5zIGFyZSBzaG9ydGhhbmRzIGZvciB3cml0aW5nIHByb3BlcnRpZXMgbGlrZSB0aGUgZm9sbG93aW5nXG4vLy9cbi8vLyBAaWdub3JlIFlvdSBjYW4gYWxzbyB1c2UgYGZhbHNlYCBpbnN0ZWFkIG9mIGBudWxsYC5cbi8vL1xuLy8vIEBwYXJhbSB7TGlzdH0gJHZhbHNcbi8vLyAgIExpc3Qgb2YgZGlyZWN0aW9uYWwgdmFsdWVzXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVXNhZ2Vcbi8vLyAgIC5lbGVtZW50IHtcbi8vLyAgICAgQGluY2x1ZGUgYm9yZGVyLXN0eWxlKGRvdHRlZCBudWxsKTtcbi8vLyAgICAgQGluY2x1ZGUgbWFyZ2luKG51bGwgMCAxMHB4KTtcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIGNzcyAtIENTUyBPdXRwdXRcbi8vLyAgIC5lbGVtZW50IHtcbi8vLyAgICAgYm9yZGVyLWJvdHRvbS1zdHlsZTogZG90dGVkO1xuLy8vICAgICBib3JkZXItdG9wLXN0eWxlOiBkb3R0ZWQ7XG4vLy8gICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4vLy8gICAgIG1hcmdpbi1sZWZ0OiAwO1xuLy8vICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4vLy8gICB9XG4vLy9cbi8vLyBAcmVxdWlyZSB7ZnVuY3Rpb259IGNvbnRhaW5zLWZhbHN5XG4vLy9cbi8vLyBAcmV0dXJuIHtMaXN0fVxuXG5AZnVuY3Rpb24gY29sbGFwc2UtZGlyZWN0aW9uYWxzKCR2YWxzKSB7XG4gICRvdXRwdXQ6IG51bGw7XG5cbiAgJGE6IG50aCgkdmFscywgMSk7XG4gICRiOiBpZihsZW5ndGgoJHZhbHMpIDwgMiwgJGEsIG50aCgkdmFscywgMikpO1xuICAkYzogaWYobGVuZ3RoKCR2YWxzKSA8IDMsICRhLCBudGgoJHZhbHMsIDMpKTtcbiAgJGQ6IGlmKGxlbmd0aCgkdmFscykgPCAyLCAkYSwgbnRoKCR2YWxzLCBpZihsZW5ndGgoJHZhbHMpIDwgNCwgMiwgNCkpKTtcblxuICBAaWYgJGEgPT0gMCB7ICRhOiAwOyB9XG4gIEBpZiAkYiA9PSAwIHsgJGI6IDA7IH1cbiAgQGlmICRjID09IDAgeyAkYzogMDsgfVxuICBAaWYgJGQgPT0gMCB7ICRkOiAwOyB9XG5cbiAgQGlmICRhID09ICRiIGFuZCAkYSA9PSAkYyBhbmQgJGEgPT0gJGQgeyAkb3V0cHV0OiAkYTsgICAgICAgICAgfVxuICBAZWxzZSBpZiAkYSA9PSAkYyBhbmQgJGIgPT0gJGQgICAgICAgICB7ICRvdXRwdXQ6ICRhICRiOyAgICAgICB9XG4gIEBlbHNlIGlmICRiID09ICRkICAgICAgICAgICAgICAgICAgICAgIHsgJG91dHB1dDogJGEgJGIgJGM7ICAgIH1cbiAgQGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkb3V0cHV0OiAkYSAkYiAkYyAkZDsgfVxuXG4gIEByZXR1cm4gJG91dHB1dDtcbn1cblxuLy8vIE91dHB1dCBkaXJlY3Rpb25hbCBwcm9wZXJ0aWVzLCBmb3IgaW5zdGFuY2UgYG1hcmdpbmAuXG4vLy9cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkcHJlXG4vLy8gICBQcmVmaXggdG8gdXNlXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRzdWZcbi8vLyAgIFN1ZmZpeCB0byB1c2Vcbi8vLyBAcGFyYW0ge0xpc3R9ICR2YWxzXG4vLy8gICBMaXN0IG9mIHZhbHVlc1xuLy8vXG4vLy8gQHJlcXVpcmUge2Z1bmN0aW9ufSBjb2xsYXBzZS1kaXJlY3Rpb25hbHNcbi8vLyBAcmVxdWlyZSB7ZnVuY3Rpb259IGNvbnRhaW5zLWZhbHN5XG5cbkBtaXhpbiBkaXJlY3Rpb25hbC1wcm9wZXJ0eSgkcHJlLCAkc3VmLCAkdmFscykge1xuICAvLyBQcm9wZXJ0eSBOYW1lc1xuICAkdG9wOiAgICAkcHJlICsgXCItdG9wXCIgICAgKyBpZigkc3VmLCBcIi0jeyRzdWZ9XCIsIFwiXCIpO1xuICAkYm90dG9tOiAkcHJlICsgXCItYm90dG9tXCIgKyBpZigkc3VmLCBcIi0jeyRzdWZ9XCIsIFwiXCIpO1xuICAkbGVmdDogICAkcHJlICsgXCItbGVmdFwiICAgKyBpZigkc3VmLCBcIi0jeyRzdWZ9XCIsIFwiXCIpO1xuICAkcmlnaHQ6ICAkcHJlICsgXCItcmlnaHRcIiAgKyBpZigkc3VmLCBcIi0jeyRzdWZ9XCIsIFwiXCIpO1xuICAkYWxsOiAgICAkcHJlICsgICAgICAgICAgICAgaWYoJHN1ZiwgXCItI3skc3VmfVwiLCBcIlwiKTtcblxuICAkdmFsczogY29sbGFwc2UtZGlyZWN0aW9uYWxzKCR2YWxzKTtcblxuICBAaWYgY29udGFpbnMtZmFsc3koJHZhbHMpIHtcbiAgICBAaWYgbnRoKCR2YWxzLCAxKSB7ICN7JHRvcH06IG50aCgkdmFscywgMSk7IH1cblxuICAgIEBpZiBsZW5ndGgoJHZhbHMpID09IDEge1xuICAgICAgQGlmIG50aCgkdmFscywgMSkgeyAjeyRyaWdodH06IG50aCgkdmFscywgMSk7IH1cbiAgICB9IEBlbHNlIHtcbiAgICAgIEBpZiBudGgoJHZhbHMsIDIpIHsgI3skcmlnaHR9OiBudGgoJHZhbHMsIDIpOyB9XG4gICAgfVxuXG4gICAgQGlmIGxlbmd0aCgkdmFscykgPT0gMiB7XG4gICAgICBAaWYgbnRoKCR2YWxzLCAxKSB7ICN7JGJvdHRvbX06IG50aCgkdmFscywgMSk7IH1cbiAgICAgIEBpZiBudGgoJHZhbHMsIDIpIHsgI3skbGVmdH06ICAgbnRoKCR2YWxzLCAyKTsgfVxuICAgIH0gQGVsc2UgaWYgbGVuZ3RoKCR2YWxzKSA9PSAzIHtcbiAgICAgIEBpZiBudGgoJHZhbHMsIDMpIHsgI3skYm90dG9tfTogbnRoKCR2YWxzLCAzKTsgfVxuICAgICAgQGlmIG50aCgkdmFscywgMikgeyAjeyRsZWZ0fTogICBudGgoJHZhbHMsIDIpOyB9XG4gICAgfSBAZWxzZSBpZiBsZW5ndGgoJHZhbHMpID09IDQge1xuICAgICAgQGlmIG50aCgkdmFscywgMykgeyAjeyRib3R0b219OiBudGgoJHZhbHMsIDMpOyB9XG4gICAgICBAaWYgbnRoKCR2YWxzLCA0KSB7ICN7JGxlZnR9OiAgIG50aCgkdmFscywgNCk7IH1cbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgICN7JGFsbH06ICR2YWxzO1xuICB9XG59XG4iLCJAZnVuY3Rpb24gc2l6ZSgkcGl4ZWxzKXtcbiAgJHB4VG9SZW06ICN7KCRwaXhlbHMgLyAkYmFzZS1yZW0pfXJlbTtcbiAgQHJldHVybiAkcHhUb1JlbTtcbn1cblxuQGZ1bmN0aW9uIHNpemUtc2FucygkcGl4ZWxzKXtcbiAgJG5vcm1hbGl6ZWRTYW5zOiAjeygkcGl4ZWxzIC8gJGJhc2UtcmVtKSAqICRzYW5zLW5vcm1hbGl6ZS1tdWx0aXBsaWVyfXJlbTtcbiAgQHJldHVybiAkbm9ybWFsaXplZFNhbnM7XG59XG4iLCJAY2hhcnNldCBcIlVURi04XCI7XG5cbi8vLyBPdXRwdXRzIGEgbWVkaWEtcXVlcnkgYmxvY2sgd2l0aCBhbiBvcHRpb25hbCBncmlkIGNvbnRleHQgKHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyB1c2VkIGluIHRoZSBncmlkKS5cbi8vL1xuLy8vIEBwYXJhbSB7TGlzdH0gJHF1ZXJ5XG4vLy8gICBBIGxpc3Qgb2YgbWVkaWEgcXVlcnkgZmVhdHVyZXMgYW5kIHZhbHVlcywgd2hlcmUgZWFjaCBgJGZlYXR1cmVgIHNob3VsZCBoYXZlIGEgY29ycmVzcG9uZGluZyBgJHZhbHVlYC5cbi8vLyAgIEZvciBhIGxpc3Qgb2YgdmFsaWQgdmFsdWVzIGZvciBgJGZlYXR1cmVgLCBjbGljayBbaGVyZV0oaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1tZWRpYXF1ZXJpZXMvI21lZGlhMSkuXG4vLy9cbi8vLyAgIElmIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgYCR2YWx1ZWAgaW4gYCRxdWVyeWAsIGAkZGVmYXVsdC1mZWF0dXJlYCBpcyBnb2luZyB0byBiZSB1c2VkLlxuLy8vXG4vLy8gICBUaGUgbnVtYmVyIG9mIHRvdGFsIGNvbHVtbnMgaW4gdGhlIGdyaWQgY2FuIGJlIHNldCBieSBwYXNzaW5nIGAkY29sdW1uc2AgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCAob3ZlcnJpZGVzIGAkdG90YWwtY29sdW1uc2ApLlxuLy8vXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlciAodW5pdGxlc3MpfSAkdG90YWwtY29sdW1ucyBbJGdyaWQtY29sdW1uc11cbi8vLyAgIC0gTnVtYmVyIG9mIGNvbHVtbnMgdG8gdXNlIGluIHRoZSBuZXcgZ3JpZCBjb250ZXh0LiBDYW4gYmUgc2V0IGFzIGEgc2hvcnRoYW5kIGluIHRoZSBmaXJzdCBwYXJhbWV0ZXIuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVXNhZ2Vcbi8vLyAgIC5yZXNwb25zaXZlLWVsZW1lbnQge1xuLy8vICAgICAgQGluY2x1ZGUgbWVkaWEoNzY5cHgpIHtcbi8vLyAgICAgICAgQGluY2x1ZGUgc3Bhbi1jb2x1bW5zKDYpO1xuLy8vICAgICAgfVxuLy8vICAgfVxuLy8vXG4vLy8gIC5uZXctY29udGV4dC1lbGVtZW50IHtcbi8vLyAgICBAaW5jbHVkZSBtZWRpYShtaW4td2lkdGggMzIwcHggbWF4LXdpZHRoIDQ4MHB4LCA2KSB7XG4vLy8gICAgICBAaW5jbHVkZSBzcGFuLWNvbHVtbnMoNik7XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBjc3MgLSBDU1MgT3V0cHV0XG4vLy8gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OXB4KSB7XG4vLy8gICAgLnJlc3BvbnNpdmUtZWxlbWVudCB7XG4vLy8gICAgICBkaXNwbGF5OiBibG9jaztcbi8vLyAgICAgIGZsb2F0OiBsZWZ0O1xuLy8vICAgICAgbWFyZ2luLXJpZ2h0OiAyLjM1NzY1JTtcbi8vLyAgICAgIHdpZHRoOiA0OC44MjExNyU7XG4vLy8gICAgfVxuLy8vXG4vLy8gICAgLnJlc3BvbnNpdmUtZWxlbWVudDpsYXN0LWNoaWxkIHtcbi8vLyAgICAgIG1hcmdpbi1yaWdodDogMDtcbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAzMjBweCkgYW5kIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4vLy8gICAgLm5ldy1jb250ZXh0LWVsZW1lbnQge1xuLy8vICAgICAgZGlzcGxheTogYmxvY2s7XG4vLy8gICAgICBmbG9hdDogbGVmdDtcbi8vLyAgICAgIG1hcmdpbi1yaWdodDogNC44MjkxNiU7XG4vLy8gICAgICB3aWR0aDogMTAwJTtcbi8vLyAgICB9XG4vLy9cbi8vLyAgICAubmV3LWNvbnRleHQtZWxlbWVudDpsYXN0LWNoaWxkIHtcbi8vLyAgICAgIG1hcmdpbi1yaWdodDogMDtcbi8vLyAgICB9XG4vLy8gIH1cblxuQG1peGluIG1lZGlhKCRxdWVyeTogJGZlYXR1cmUgJHZhbHVlICRjb2x1bW5zLCAkdG90YWwtY29sdW1uczogJGdyaWQtY29sdW1ucykge1xuICBAaWYgbGVuZ3RoKCRxdWVyeSkgPT0gMSB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKCRkZWZhdWx0LWZlYXR1cmU6IG50aCgkcXVlcnksIDEpKSB7XG4gICAgICAkZGVmYXVsdC1ncmlkLWNvbHVtbnM6ICRncmlkLWNvbHVtbnM7XG4gICAgICAkZ3JpZC1jb2x1bW5zOiAkdG90YWwtY29sdW1ucyAhZ2xvYmFsO1xuICAgICAgQGNvbnRlbnQ7XG4gICAgICAkZ3JpZC1jb2x1bW5zOiAkZGVmYXVsdC1ncmlkLWNvbHVtbnMgIWdsb2JhbDtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgICRsb29wLXRvOiBsZW5ndGgoJHF1ZXJ5KTtcbiAgICAkbWVkaWEtcXVlcnk6IFwic2NyZWVuIGFuZCBcIjtcbiAgICAkZGVmYXVsdC1ncmlkLWNvbHVtbnM6ICRncmlkLWNvbHVtbnM7XG4gICAgJGdyaWQtY29sdW1uczogJHRvdGFsLWNvbHVtbnMgIWdsb2JhbDtcblxuICAgIEBpZiBpcy1ub3QoaXMtZXZlbihsZW5ndGgoJHF1ZXJ5KSkpIHtcbiAgICAgICRncmlkLWNvbHVtbnM6IG50aCgkcXVlcnksICRsb29wLXRvKSAhZ2xvYmFsO1xuICAgICAgJGxvb3AtdG86ICRsb29wLXRvIC0gMTtcbiAgICB9XG5cbiAgICAkaTogMTtcbiAgICBAd2hpbGUgJGkgPD0gJGxvb3AtdG8ge1xuICAgICAgJG1lZGlhLXF1ZXJ5OiAkbWVkaWEtcXVlcnkgKyBcIihcIiArIG50aCgkcXVlcnksICRpKSArIFwiOiBcIiArIG50aCgkcXVlcnksICRpICsgMSkgKyBcIikgXCI7XG5cbiAgICAgIEBpZiAoJGkgKyAxKSAhPSAkbG9vcC10byB7XG4gICAgICAgICRtZWRpYS1xdWVyeTogJG1lZGlhLXF1ZXJ5ICsgXCJhbmQgXCI7XG4gICAgICB9XG5cbiAgICAgICRpOiAkaSArIDI7XG4gICAgfVxuXG4gICAgQG1lZGlhICN7JG1lZGlhLXF1ZXJ5fSB7XG4gICAgICBAY29udGVudDtcbiAgICAgICRncmlkLWNvbHVtbnM6ICRkZWZhdWx0LWdyaWQtY29sdW1ucyAhZ2xvYmFsO1xuICAgIH1cbiAgfVxufVxuIiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuXG4vLy8gU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgY29sdW1ucyBhbiBlbGVtZW50IHNob3VsZCBzcGFuLiBJZiB0aGUgc2VsZWN0b3IgaXMgbmVzdGVkIHRoZSBudW1iZXIgb2YgY29sdW1ucyBvZiBpdHMgcGFyZW50IGVsZW1lbnQgc2hvdWxkIGJlIHBhc3NlZCBhcyBhbiBhcmd1bWVudCBhcyB3ZWxsLlxuLy8vXG4vLy8gQHBhcmFtIHtMaXN0fSAkc3BhblxuLy8vICAgQSBsaXN0IGNvbnRhaW5pbmcgYCRjb2x1bW5zYCwgdGhlIHVuaXRsZXNzIG51bWJlciBvZiBjb2x1bW5zIHRoZSBlbGVtZW50IHNwYW5zIChyZXF1aXJlZCksIGFuZCBgJGNvbnRhaW5lci1jb2x1bW5zYCwgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSBwYXJlbnQgZWxlbWVudCBzcGFucyAob3B0aW9uYWwpLlxuLy8vXG4vLy8gICBJZiBvbmx5IG9uZSB2YWx1ZSBpcyBwYXNzZWQsIGl0IGlzIGFzc3VtZWQgdGhhdCBpdCdzIGAkY29sdW1uc2AgYW5kIHRoYXQgdGhhdCBgJGNvbnRhaW5lci1jb2x1bW5zYCBpcyBlcXVhbCB0byBgJGdyaWQtY29sdW1uc2AsIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZC5cbi8vL1xuLy8vICAgVGhlIHZhbHVlcyBjYW4gYmUgc2VwYXJhdGVkIHdpdGggYW55IHN0cmluZyBzdWNoIGFzIGBvZmAsIGAvYCwgZXRjLlxuLy8vXG4vLy8gICBgJGNvbHVtbnNgIGFsc28gYWNjZXB0cyBkZWNpbWFscyBmb3Igd2hlbiBpdCdzIG5lY2Vzc2FyeSB0byBicmVhayBvdXQgb2YgdGhlIHN0YW5kYXJkIGdyaWQuIEUuZy4gUGFzc2luZyBgMi40YCBpbiBhIHN0YW5kYXJkIDEyIGNvbHVtbiBncmlkIHdpbGwgZGl2aWRlIHRoZSByb3cgaW50byA1IGNvbHVtbnMuXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGRpc3BsYXkgW2Jsb2NrXVxuLy8vICAgU2V0cyB0aGUgZGlzcGxheSBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudC4gQnkgZGVmYXVsdCBpdCBzZXRzIHRoZSBkaXNwbGF5IHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IHRvIGBibG9ja2AuXG4vLy9cbi8vLyAgIElmIHBhc3NlZCBgYmxvY2stY29sbGFwc2VgLCBpdCBhbHNvIHJlbW92ZXMgdGhlIG1hcmdpbiBndXR0ZXIgYnkgYWRkaW5nIGl0IHRvIHRoZSBlbGVtZW50IHdpZHRoLlxuLy8vXG4vLy8gICBJZiBwYXNzZWQgYHRhYmxlYCwgaXQgc2V0cyB0aGUgZGlzcGxheSBwcm9wZXJ0eSB0byBgdGFibGUtY2VsbGAgYW5kIGNhbGN1bGF0ZXMgdGhlIHdpZHRoIG9mIHRoZSBlbGVtZW50IHdpdGhvdXQgdGFraW5nIGd1dHRlcnMgaW50byBjb25zaWRlcmF0aW9uLiBUaGUgcmVzdWx0IGRvZXMgbm90IGFsaWduIHdpdGggdGhlIGJsb2NrLWJhc2VkIGdyaWQuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVXNhZ2Vcbi8vLyAgIC5lbGVtZW50IHtcbi8vLyAgICAgQGluY2x1ZGUgc3Bhbi1jb2x1bW5zKDYpO1xuLy8vXG4vLy8gICAgLm5lc3RlZC1lbGVtZW50IHtcbi8vLyAgICAgIEBpbmNsdWRlIHNwYW4tY29sdW1ucygyIG9mIDYpO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgY3NzIC0gQ1NTIE91dHB1dFxuLy8vICAgLmVsZW1lbnQge1xuLy8vICAgICBkaXNwbGF5OiBibG9jaztcbi8vLyAgICAgZmxvYXQ6IGxlZnQ7XG4vLy8gICAgIG1hcmdpbi1yaWdodDogMi4zNTc2NSU7XG4vLy8gICAgIHdpZHRoOiA0OC44MjExNyU7XG4vLy8gICB9XG4vLy9cbi8vLyAgIC5lbGVtZW50Omxhc3QtY2hpbGQge1xuLy8vICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4vLy8gICB9XG4vLy9cbi8vLyAgIC5lbGVtZW50IC5uZXN0ZWQtZWxlbWVudCB7XG4vLy8gICAgIGRpc3BsYXk6IGJsb2NrO1xuLy8vICAgICBmbG9hdDogbGVmdDtcbi8vLyAgICAgbWFyZ2luLXJpZ2h0OiA0LjgyOTE2JTtcbi8vLyAgICAgd2lkdGg6IDMwLjExMzg5JTtcbi8vLyAgIH1cbi8vL1xuLy8vICAgLmVsZW1lbnQgLm5lc3RlZC1lbGVtZW50Omxhc3QtY2hpbGQge1xuLy8vICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4vLy8gICB9XG5cbkBtaXhpbiBzcGFuLWNvbHVtbnMoJHNwYW46ICRjb2x1bW5zIG9mICRjb250YWluZXItY29sdW1ucywgJGRpc3BsYXk6IGJsb2NrKSB7XG4gICRjb2x1bW5zOiBudGgoJHNwYW4sIDEpO1xuICAkY29udGFpbmVyLWNvbHVtbnM6IGNvbnRhaW5lci1zcGFuKCRzcGFuKTtcblxuICAkcGFyZW50LWNvbHVtbnM6IGdldC1wYXJlbnQtY29sdW1ucygkY29udGFpbmVyLWNvbHVtbnMpICFnbG9iYWw7XG5cbiAgJGRpcmVjdGlvbjogZ2V0LWRpcmVjdGlvbigkbGF5b3V0LWRpcmVjdGlvbiwgJGRlZmF1bHQtbGF5b3V0LWRpcmVjdGlvbik7XG4gICRvcHBvc2l0ZS1kaXJlY3Rpb246IGdldC1vcHBvc2l0ZS1kaXJlY3Rpb24oJGRpcmVjdGlvbik7XG5cbiAgJGRpc3BsYXktdGFibGU6IGlzLWRpc3BsYXktdGFibGUoJGNvbnRhaW5lci1kaXNwbGF5LXRhYmxlLCAkZGlzcGxheSk7XG5cbiAgQGlmICRkaXNwbGF5LXRhYmxlICB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICB3aWR0aDogcGVyY2VudGFnZSgkY29sdW1ucyAvICRjb250YWluZXItY29sdW1ucyk7XG4gIH0gQGVsc2Uge1xuICAgIGZsb2F0OiAjeyRvcHBvc2l0ZS1kaXJlY3Rpb259O1xuXG4gICAgQGlmICRkaXNwbGF5ICE9IG5vLWRpc3BsYXkge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuXG4gICAgQGlmICRkaXNwbGF5ID09IGNvbGxhcHNlIHtcbiAgICAgIEBpbmNsdWRlIC1uZWF0LXdhcm4oXCJUaGUgJ2NvbGxhcHNlJyBhcmd1bWVudCB3aWxsIGJlIGRlcHJlY2F0ZWQuIFVzZSAnYmxvY2stY29sbGFwc2UnIGluc3RlYWQuXCIpO1xuICAgIH1cblxuICAgIEBpZiAkZGlzcGxheSA9PSBjb2xsYXBzZSBvciAkZGlzcGxheSA9PSBibG9jay1jb2xsYXBzZSB7XG4gICAgICB3aWR0aDogZmxleC1ncmlkKCRjb2x1bW5zLCAkY29udGFpbmVyLWNvbHVtbnMpICsgZmxleC1ndXR0ZXIoJGNvbnRhaW5lci1jb2x1bW5zKTtcblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgd2lkdGg6IGZsZXgtZ3JpZCgkY29sdW1ucywgJGNvbnRhaW5lci1jb2x1bW5zKTtcbiAgICAgIH1cblxuICAgIH0gQGVsc2Uge1xuICAgICAgbWFyZ2luLSN7JGRpcmVjdGlvbn06IGZsZXgtZ3V0dGVyKCRjb250YWluZXItY29sdW1ucyk7XG4gICAgICB3aWR0aDogZmxleC1ncmlkKCRjb2x1bW5zLCAkY29udGFpbmVyLWNvbHVtbnMpO1xuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tI3skZGlyZWN0aW9ufTogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIiRwYXJlbnQtY29sdW1uczogJGdyaWQtY29sdW1ucyAhZGVmYXVsdDtcbiRmZy1jb2x1bW46ICRjb2x1bW47XG4kZmctZ3V0dGVyOiAkZ3V0dGVyO1xuJGZnLW1heC1jb2x1bW5zOiAkZ3JpZC1jb2x1bW5zO1xuJGNvbnRhaW5lci1kaXNwbGF5LXRhYmxlOiBmYWxzZSAhZGVmYXVsdDtcbiRsYXlvdXQtZGlyZWN0aW9uOiBMVFIgIWRlZmF1bHQ7XG5cbkBmdW5jdGlvbiBmbGV4LWdyaWQoJGNvbHVtbnMsICRjb250YWluZXItY29sdW1uczogJGZnLW1heC1jb2x1bW5zKSB7XG4gICR3aWR0aDogJGNvbHVtbnMgKiAkZmctY29sdW1uICsgKCRjb2x1bW5zIC0gMSkgKiAkZmctZ3V0dGVyO1xuICAkY29udGFpbmVyLXdpZHRoOiAkY29udGFpbmVyLWNvbHVtbnMgKiAkZmctY29sdW1uICsgKCRjb250YWluZXItY29sdW1ucyAtIDEpICogJGZnLWd1dHRlcjtcbiAgQHJldHVybiBwZXJjZW50YWdlKCR3aWR0aCAvICRjb250YWluZXItd2lkdGgpO1xufVxuXG5AZnVuY3Rpb24gZmxleC1ndXR0ZXIoJGNvbnRhaW5lci1jb2x1bW5zOiAkZmctbWF4LWNvbHVtbnMsICRndXR0ZXI6ICRmZy1ndXR0ZXIpIHtcbiAgJGNvbnRhaW5lci13aWR0aDogJGNvbnRhaW5lci1jb2x1bW5zICogJGZnLWNvbHVtbiArICgkY29udGFpbmVyLWNvbHVtbnMgLSAxKSAqICRmZy1ndXR0ZXI7XG4gIEByZXR1cm4gcGVyY2VudGFnZSgkZ3V0dGVyIC8gJGNvbnRhaW5lci13aWR0aCk7XG59XG5cbkBmdW5jdGlvbiBncmlkLXdpZHRoKCRuKSB7XG4gIEByZXR1cm4gJG4gKiAkZ3ctY29sdW1uICsgKCRuIC0gMSkgKiAkZ3ctZ3V0dGVyO1xufVxuXG5AZnVuY3Rpb24gZ2V0LXBhcmVudC1jb2x1bW5zKCRjb2x1bW5zKSB7XG4gIEBpZiAkY29sdW1ucyAhPSAkZ3JpZC1jb2x1bW5zIHtcbiAgICAkcGFyZW50LWNvbHVtbnM6ICRjb2x1bW5zICFnbG9iYWw7XG4gIH0gQGVsc2Uge1xuICAgICRwYXJlbnQtY29sdW1uczogJGdyaWQtY29sdW1ucyAhZ2xvYmFsO1xuICB9XG5cbiAgQHJldHVybiAkcGFyZW50LWNvbHVtbnM7XG59XG5cbkBmdW5jdGlvbiBpcy1kaXNwbGF5LXRhYmxlKCRjb250YWluZXItaXMtZGlzcGxheS10YWJsZSwgJGRpc3BsYXkpIHtcbiAgQHJldHVybiAkY29udGFpbmVyLWlzLWRpc3BsYXktdGFibGUgPT0gdHJ1ZSBvciAkZGlzcGxheSA9PSB0YWJsZTtcbn1cbiIsIkBjaGFyc2V0IFwiVVRGLThcIjtcblxuLy8vIFJlbW92ZXMgdGhlIGVsZW1lbnQncyBndXR0ZXIgbWFyZ2luLCByZWdhcmRsZXNzIG9mIGl0cyBwb3NpdGlvbiBpbiB0aGUgZ3JpZCBoaWVyYXJjaHkgb3IgZGlzcGxheSBwcm9wZXJ0eS4gSXQgY2FuIHRhcmdldCBhIHNwZWNpZmljIGVsZW1lbnQsIG9yIGV2ZXJ5IGBudGgtY2hpbGRgIG9jY3VycmVuY2UuIFdvcmtzIG9ubHkgd2l0aCBgYmxvY2tgIGxheW91dHMuXG4vLy9cbi8vLyBAcGFyYW0ge0xpc3R9ICRxdWVyeSBbYmxvY2tdXG4vLy8gICBMaXN0IG9mIGFyZ3VtZW50cy4gU3VwcG9ydGVkIGFyZ3VtZW50cyBhcmUgYG50aC1jaGlsZGAgc2VsZWN0b3JzICh0YXJnZXRzIGEgc3BlY2lmaWMgcHNldWRvIGVsZW1lbnQpIGFuZCBgYXV0b2AgKHRhcmdldHMgYGxhc3QtY2hpbGRgKS5cbi8vL1xuLy8vICAgV2hlbiBwYXNzZWQgYW4gYG50aC1jaGlsZGAgYXJndW1lbnQgb2YgdHlwZSBgKm5gIHdpdGggYGJsb2NrYCBkaXNwbGF5LCB0aGUgb21lZ2EgbWl4aW4gYXV0b21hdGljYWxseSBhZGRzIGEgY2xlYXIgdG8gdGhlIGAqbisxYCB0aCBlbGVtZW50LiBOb3RlIHRoYXQgY29tcG9zaXRlIGFyZ3VtZW50cyBzdWNoIGFzIGAybisxYCBkbyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuXG4vLy9cbi8vLyAgICoqRGVwcmVjYXRpb24gd2FybmluZyoqOiBUaGUgb21lZ2EgbWl4aW4gd2lsbCBubyBsb25nZXIgdGFrZSBhIGAkZGlyZWN0aW9uYCBhcmd1bWVudC4gVG8gY2hhbmdlIHRoZSBsYXlvdXQgZGlyZWN0aW9uLCB1c2UgYHJvdygkZGlyZWN0aW9uKWAgb3Igc2V0IGAkZGVmYXVsdC1sYXlvdXQtZGlyZWN0aW9uYCBpbnN0ZWFkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFVzYWdlXG4vLy8gICAuZWxlbWVudCB7XG4vLy8gICAgIEBpbmNsdWRlIG9tZWdhO1xuLy8vICAgfVxuLy8vXG4vLy8gICAubnRoLWVsZW1lbnQge1xuLy8vICAgICBAaW5jbHVkZSBvbWVnYSg0bik7XG4vLy8gICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBjc3MgLSBDU1MgT3V0cHV0XG4vLy8gICAuZWxlbWVudCB7XG4vLy8gICAgIG1hcmdpbi1yaWdodDogMDtcbi8vLyAgIH1cbi8vL1xuLy8vICAgLm50aC1lbGVtZW50Om50aC1jaGlsZCg0bikge1xuLy8vICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4vLy8gICB9XG4vLy9cbi8vLyAgIC5udGgtZWxlbWVudDpudGgtY2hpbGQoNG4rMSkge1xuLy8vICAgICBjbGVhcjogbGVmdDtcbi8vLyAgIH1cblxuQG1peGluIG9tZWdhKCRxdWVyeTogYmxvY2ssICRkaXJlY3Rpb246IGRlZmF1bHQpIHtcbiAgJHRhYmxlOiBiZWxvbmdzLXRvKHRhYmxlLCAkcXVlcnkpO1xuICAkYXV0bzogYmVsb25ncy10byhhdXRvLCAkcXVlcnkpO1xuXG4gIEBpZiAkZGlyZWN0aW9uICE9IGRlZmF1bHQge1xuICAgIEBpbmNsdWRlIC1uZWF0LXdhcm4oXCJUaGUgb21lZ2EgbWl4aW4gd2lsbCBubyBsb25nZXIgdGFrZSBhICRkaXJlY3Rpb24gYXJndW1lbnQuIFRvIGNoYW5nZSB0aGUgbGF5b3V0IGRpcmVjdGlvbiwgdXNlIHRoZSBkaXJlY3Rpb24oKXsuLi59IG1peGluLlwiKTtcbiAgfSBAZWxzZSB7XG4gICAgJGRpcmVjdGlvbjogZ2V0LWRpcmVjdGlvbigkbGF5b3V0LWRpcmVjdGlvbiwgJGRlZmF1bHQtbGF5b3V0LWRpcmVjdGlvbik7XG4gIH1cblxuICBAaWYgJHRhYmxlIHtcbiAgICBAaW5jbHVkZSAtbmVhdC13YXJuKFwiVGhlIG9tZWdhIG1peGluIG5vIGxvbmdlciByZW1vdmVzIHBhZGRpbmcgaW4gdGFibGUgbGF5b3V0cy5cIik7XG4gIH1cblxuICBAaWYgbGVuZ3RoKCRxdWVyeSkgPT0gMSB7XG4gICAgQGlmICRhdXRvIHtcbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi0jeyRkaXJlY3Rpb259OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBlbHNlIGlmIGNvbnRhaW5zLWRpc3BsYXktdmFsdWUoJHF1ZXJ5KSBhbmQgJHRhYmxlID09IGZhbHNlIHtcbiAgICAgIG1hcmdpbi0jeyRkaXJlY3Rpb259OiAwO1xuICAgIH1cblxuICAgIEBlbHNlIHtcbiAgICAgIEBpbmNsdWRlIG50aC1jaGlsZCgkcXVlcnksICRkaXJlY3Rpb24pO1xuICAgIH1cbiAgfSBAZWxzZSBpZiBsZW5ndGgoJHF1ZXJ5KSA9PSAyIHtcbiAgICBAaWYgJGF1dG8ge1xuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLSN7JGRpcmVjdGlvbn06IDA7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICBAaW5jbHVkZSBudGgtY2hpbGQobnRoKCRxdWVyeSwgMSksICRkaXJlY3Rpb24pO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGluY2x1ZGUgLW5lYXQtd2FybihcIlRvbyBtYW55IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIG9tZWdhKCkgbWl4aW4uXCIpO1xuICB9XG59XG5cbkBtaXhpbiBudGgtY2hpbGQoJHF1ZXJ5LCAkZGlyZWN0aW9uKSB7XG4gICRvcHBvc2l0ZS1kaXJlY3Rpb246IGdldC1vcHBvc2l0ZS1kaXJlY3Rpb24oJGRpcmVjdGlvbik7XG5cbiAgJjpudGgtY2hpbGQoI3skcXVlcnl9KSB7XG4gICAgbWFyZ2luLSN7JGRpcmVjdGlvbn06IDA7XG4gIH1cblxuICBAaWYgdHlwZS1vZigkcXVlcnkpID09IG51bWJlciBhbmQgdW5pdCgkcXVlcnkpID09IFwiblwiIHtcbiAgICAmOm50aC1jaGlsZCgjeyRxdWVyeX0rMSkge1xuICAgICAgY2xlYXI6ICRvcHBvc2l0ZS1kaXJlY3Rpb247XG4gICAgfVxuICB9XG59XG4iLCJAY2hhcnNldCBcIlVURi04XCI7XG5cbi8vLyBUcmFuc2xhdGVzIGFuIGVsZW1lbnQgaG9yaXpvbnRhbGx5IGJ5IGEgbnVtYmVyIG9mIGNvbHVtbnMuIFBvc2l0aXZlIGFyZ3VtZW50cyBzaGlmdCB0aGUgZWxlbWVudCB0byB0aGUgYWN0aXZlIGxheW91dCBkaXJlY3Rpb24sIHdoaWxlIG5lZ2F0aXZlIG9uZXMgc2hpZnQgaXQgdG8gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyICh1bml0bGVzcyl9ICRuLWNvbHVtbnMgWzFdXG4vLy8gICBOdW1iZXIgb2YgY29sdW1ucyBieSB3aGljaCB0aGUgZWxlbWVudCBzaGlmdHMuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVXNhZ2Vcbi8vLyAgIC5lbGVtZW50IHtcbi8vLyAgICAgQGluY2x1ZGUgc2hpZnQoLTMpO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgY3NzIC0gQ1NTIG91dHB1dFxuLy8vICAgLmVsZW1lbnQge1xuLy8vICAgICBtYXJnaW4tbGVmdDogLTI1LjU4OTQxJTtcbi8vLyAgIH1cblxuQG1peGluIHNoaWZ0KCRuLWNvbHVtbnM6IDEpIHtcbiAgQGluY2x1ZGUgc2hpZnQtaW4tY29udGV4dCgkbi1jb2x1bW5zKTtcbn1cblxuLy8vIFRyYW5zbGF0ZXMgYW4gZWxlbWVudCBob3Jpem9udGFsbHkgYnkgYSBudW1iZXIgb2YgY29sdW1ucywgaW4gYSBzcGVjaWZpYyBuZXN0aW5nIGNvbnRleHQuXG4vLy9cbi8vLyBAcGFyYW0ge0xpc3R9ICRzaGlmdFxuLy8vICAgQSBsaXN0IGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRvIHNoaWZ0IChgJGNvbHVtbnNgKSBhbmQgdGhlIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBwYXJlbnQgZWxlbWVudCAoYCRjb250YWluZXItY29sdW1uc2ApLlxuLy8vXG4vLy8gICBUaGUgdHdvIHZhbHVlcyBjYW4gYmUgc2VwYXJhdGVkIHdpdGggYW55IHN0cmluZyBzdWNoIGFzIGBvZmAsIGAvYCwgZXRjLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFVzYWdlXG4vLy8gICAuZWxlbWVudCB7XG4vLy8gICAgIEBpbmNsdWRlIHNoaWZ0KC0zIG9mIDYpO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgY3NzIC0gQ1NTIG91dHB1dFxuLy8vICAgLmVsZW1lbnQge1xuLy8vICAgICBtYXJnaW4tbGVmdDogLTUyLjQxNDU4JTtcbi8vLyAgIH1cblxuQG1peGluIHNoaWZ0LWluLWNvbnRleHQoJHNoaWZ0OiAkY29sdW1ucyBvZiAkY29udGFpbmVyLWNvbHVtbnMpIHtcbiAgJG4tY29sdW1uczogbnRoKCRzaGlmdCwgMSk7XG4gICRwYXJlbnQtY29sdW1uczogY29udGFpbmVyLXNoaWZ0KCRzaGlmdCkgIWdsb2JhbDtcblxuICAkZGlyZWN0aW9uOiBnZXQtZGlyZWN0aW9uKCRsYXlvdXQtZGlyZWN0aW9uLCAkZGVmYXVsdC1sYXlvdXQtZGlyZWN0aW9uKTtcbiAgJG9wcG9zaXRlLWRpcmVjdGlvbjogZ2V0LW9wcG9zaXRlLWRpcmVjdGlvbigkZGlyZWN0aW9uKTtcblxuICBtYXJnaW4tI3skb3Bwb3NpdGUtZGlyZWN0aW9ufTogJG4tY29sdW1ucyAqIGZsZXgtZ3JpZCgxLCAkcGFyZW50LWNvbHVtbnMpICsgJG4tY29sdW1ucyAqIGZsZXgtZ3V0dGVyKCRwYXJlbnQtY29sdW1ucyk7XG5cbiAgLy8gUmVzZXQgbmVzdGluZyBjb250ZXh0XG4gICRwYXJlbnQtY29sdW1uczogJGdyaWQtY29sdW1ucyAhZ2xvYmFsO1xufVxuIiwiLy8gSGVhZGluZyBtaXhpbnNcbkBtaXhpbiB0aXRsZSB7XG4gIGZvbnQtc2l6ZTogJHRpdGxlLWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRmb250LWJvbGQ7XG59XG5cbkBtaXhpbiBoMSB7XG4gIGZvbnQtc2l6ZTogJGgxLWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRmb250LWJvbGQ7XG59XG5cbkBtaXhpbiBoMiB7XG4gIGZvbnQtc2l6ZTogJGgyLWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRmb250LWJvbGQ7XG59XG5cbkBtaXhpbiBoMyB7XG4gIGZvbnQtc2l6ZTogJGgzLWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRmb250LWJvbGQ7XG59XG5cbkBtaXhpbiBoNCB7XG4gIGZvbnQtc2l6ZTogJGg0LWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRmb250LWJvbGQ7XG59XG5cbkBtaXhpbiBoNSB7XG4gIGZvbnQtc2l6ZTogJGg1LWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRmb250LWJvbGQ7XG59XG5cbkBtaXhpbiBoNiB7XG4gIGZvbnQtc2l6ZTogJGg2LWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRmb250LW5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6ICRiYXNlLWxpbmUtaGVpZ2h0O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4vLyBGb2N1cyBzdGF0ZSBtaXhpblxuQG1peGluIGZvY3VzIHtcbiAgb3V0bGluZTogJGZvY3VzLW91dGxpbmU7XG4gIG91dGxpbmUtb2Zmc2V0OiAkZm9jdXMtc3BhY2luZztcbn1cblxuLy8gTW9iaWxlLWZpcnN0IG1lZGlhIHF1ZXJ5IGhlbHBlclxuQG1peGluIG1lZGlhKCRicCkge1xuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAjeyRicH0pIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG4vLyBTY3JlZW4gcmVhZGVyIG9ubHkgaGVscGVyXG5AbWl4aW4gc3Itb25seSgpIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtOTk5ZW07XG59XG5cbi8vIFRoaXMgXCJuZWdhdGVzXCIgdGhlIHNyLW9ubHkoKSBoZWxwZXI7IHVzZWZ1bCBpZlxuLy8gd2Ugd2FudCB0aGUgZGVmYXVsdCBzdGF0ZSBvZiBzb21ldGhpbmcgdG8gYmVcbi8vIGZvciBzY3JlZW4gcmVhZGVycyBvbmx5LCBidXQgd2Ugd2FudCB0byBmb3JjZVxuLy8gaXQgdG8gc2hvdyBmb3Igc2lnaHRlZCB1c2VycyB1bmRlciBtb3JlIHNwZWNpZmljXG4vLyBjb25kaXRpb25zLlxuQG1peGluIG5vdC1zci1vbmx5KCkge1xuICBwb3NpdGlvbjogc3RhdGljO1xufVxuXG4udXNhLXNyLW9ubHkge1xuICBAaW5jbHVkZSBzci1vbmx5KCk7XG59XG5cbi8vIEFyaWEgaGlkZGVuIGhlbHBlclxuQG1peGluIGFjY2Vzc2libHktaGlkZGVuKCkge1xuICAmW2FyaWEtaGlkZGVuPXRydWVdIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi8vIFVuc3R5bGVkIGxpc3QgaGVscGVyXG5AbWl4aW4gdW5zdHlsZWQtbGlzdCgpIHtcbiAgQGluY2x1ZGUgbWFyZ2luKDAgbnVsbCk7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuXG4gID4gbGkge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuLy8gRm9udCBzbW9vdGhpbmcgbWl4aW5cbi8vIE9ubHkgdXNlIGZvciBsaWdodCB0ZXh0IG9uIGRhcmsgYmFja2dyb3VuZFxuLy8gVE9ETzogUmVtb3ZlIGFmdGVyIGFkZGluZyBQb3N0Q1NTXG5AbWl4aW4gZm9udC1zbW9vdGhpbmcge1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbn1cblxuLy8gQ29udGVudCBzaXplIGhlbHBlcnNcbkBtaXhpbiBhbGxvdy1sYXlvdXQtY2xhc3NlcyB7XG4gIEBpbmNsdWRlIG1hcmdpbihudWxsIGF1dG8pO1xuXG4gICYud2lkdGgtb25lLWhhbGYge1xuICAgIEBpbmNsdWRlIG1lZGlhKCRtZWRpdW0tc2NyZWVuKSB7XG4gICAgICB3aWR0aDogNTAlO1xuICAgIH1cbiAgfVxuXG4gICYud2lkdGgtb25lLXRoaXJkIHtcbiAgICBAaW5jbHVkZSBtZWRpYSgkbWVkaXVtLXNjcmVlbikge1xuICAgICAgd2lkdGg6IDMzJTtcbiAgICB9XG4gIH1cblxuICAmLndpZHRoLXR3by10aGlyZHMge1xuICAgIEBpbmNsdWRlIG1lZGlhKCRtZWRpdW0tc2NyZWVuKSB7XG4gICAgICB3aWR0aDogNjclO1xuICAgIH1cbiAgfVxuXG4gICYud2lkdGgtb25lLWZvdXJ0aCB7XG4gICAgQGluY2x1ZGUgbWVkaWEoJG1lZGl1bS1zY3JlZW4pIHtcbiAgICAgIHdpZHRoOiAyNSU7XG4gICAgfVxuICB9XG5cbiAgJi53aWR0aC10aHJlZS1mb3VydGhzIHtcbiAgICBAaW5jbHVkZSBtZWRpYSgkbWVkaXVtLXNjcmVlbikge1xuICAgICAgd2lkdGg6IDc1JTtcbiAgICB9XG4gIH1cblxuICAmLmFsaWduLWxlZnQge1xuICAgIEBpbmNsdWRlIG1lZGlhKCRtZWRpdW0tc2NyZWVuKSB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIG1hcmdpbi1yaWdodDogMmVtO1xuICAgICAgbWFyZ2luLXRvcDogMC41ZW07XG4gICAgfVxuICB9XG5cbiAgJi5hbGlnbi1yaWdodCB7XG4gICAgQGluY2x1ZGUgbWVkaWEoJG1lZGl1bS1zY3JlZW4pIHtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAyZW07XG4gICAgICBtYXJnaW4tdG9wOiAwLjVlbTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIGRpc3BsYXktaWNvbigkaWNvbiwgJGRpcmVjdGlvbiwgJHNpemUsICRtYXJnaW4sICRob3Zlcikge1xuICAmOjojeyRkaXJlY3Rpb259IHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJyN7JGltYWdlLXBhdGh9LyN7JGljb259LnBuZycpO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnI3skaW1hZ2UtcGF0aH0vI3skaWNvbn0uc3ZnJyk7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBoZWlnaHQ6ICRzaXplO1xuICAgIHdpZHRoOiAkc2l6ZTtcblxuICAgIC8qIHN0eWxlbGludC1kaXNhYmxlIGJsb2NrLWNsb3NpbmctYnJhY2UtbmV3bGluZS1hZnRlciwgYXQtcnVsZS1lbXB0eS1saW5lLWJlZm9yZSAqL1xuICAgIEBpZiAkZGlyZWN0aW9uID09ICdhZnRlcicge1xuICAgICAgbWFyZ2luLWxlZnQ6ICRtYXJnaW47XG4gICAgfSBAZWxzZSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6ICRtYXJnaW47XG4gICAgfVxuICAgIC8qIHN0eWxlbGludC1lbmFibGUgKi9cbiAgfVxuXG4gIEBpZiAkaG92ZXIgPT0gJ2hvdmVyJyB7XG4gICAgJjpob3Zlcjo6I3skZGlyZWN0aW9ufSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJyN7JGltYWdlLXBhdGh9LyN7JGljb259LWhvdmVyLnBuZycpO1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcjeyRpbWFnZS1wYXRofS8jeyRpY29ufS1ob3Zlci5zdmcnKTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIHVzYS1zaWRlbmF2LWxpc3Qge1xuICBAaW5jbHVkZSB1bnN0eWxlZC1saXN0KCk7XG5cbiAgPiBsaSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRjb2xvci1ncmF5O1xuICAgIGZvbnQtc2l6ZTogJGg0LWZvbnQtc2l6ZTtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcDogbm9uZTtcbiAgICB9XG4gIH1cblxuICBhIHtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY29sb3I6ICRjb2xvci1iYXNlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1zYW5zO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG4gICAgcGFkZGluZzogMC44NXJlbSAxcmVtIDAuODVyZW0gMS44cmVtO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLWdyYXktbGlnaHRlc3Q7XG4gICAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuXG4gICAgJjpmb2N1cyB7XG4gICAgICBvdXRsaW5lLW9mZnNldDogMDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuXG4gICAgJi51c2EtY3VycmVudCB7IC8qIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgc2VsZWN0b3Itbm8tcXVhbGlmeWluZy10eXBlICovXG4gICAgICBib3JkZXItbGVmdDogMC40cmVtIHNvbGlkICRjb2xvci1wcmltYXJ5O1xuICAgICAgY29sb3I6ICRjb2xvci1wcmltYXJ5O1xuICAgICAgZm9udC13ZWlnaHQ6ICRmb250LWJvbGQ7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDEuNHJlbTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIHVzYS1zaWRlbmF2LXN1Ymxpc3Qge1xuICBAaW5jbHVkZSB1bnN0eWxlZC1saXN0KCk7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgbGkge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBmb250LXNpemU6ICRoNS1mb250LXNpemU7XG4gIH1cblxuICBhIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDIuOHJlbTtcbiAgICBsaW5lLWhlaWdodDogJGhlYWRpbmctbGluZS1oZWlnaHQ7XG5cbiAgICAmOmhvdmVyLFxuICAgICYudXNhLWN1cnJlbnQgeyAvKiBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIHNlbGVjdG9yLW5vLXF1YWxpZnlpbmctdHlwZSAqL1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgcGFkZGluZy1sZWZ0OiAyLjhyZW07XG4gICAgfVxuICB9XG5cbiAgLnVzYS1zaWRlbmF2LXN1Yl9saXN0IHtcbiAgICBhIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMy44cmVtO1xuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDA7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDMuOHJlbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEFwcGx5IGEgbmF0dXJhbCBib3ggbGF5b3V0IG1vZGVsIHRvIGFsbCBlbGVtZW50cywgYnV0IGFsbG93aW5nIGNvbXBvbmVudHMgdG9cbi8vIGNoYW5nZVxuXG5odG1sIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuKixcbio6OmJlZm9yZSxcbio6OmFmdGVyIHtcbiAgYm94LXNpemluZzogaW5oZXJpdDtcbn1cblxuYm9keSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xufVxuXG4vLyBIYWNrIGZvciBjbGVhcmZpeGVzXG4ubHQtaWU5IHtcbiAgKiB7XG4gICAgZmlsdGVyOiBub25lICFpbXBvcnRhbnQ7IC8qIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4gIH1cbn1cblxuLy8gZm9yIElFIDwgMTEsIHNlZTpcbi8vIDxodHRwOi8vY2FuaXVzZS5jb20vI2ZlYXQ9aGlkZGVuPlxuW2hpZGRlbl0ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IC8qIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG59XG5cbio6Zm9jdXMsXG4udXNhLWZvY3VzIHtcbiAgQGluY2x1ZGUgZm9jdXM7XG59XG4iLCIvLyBUaGVzZSB2YXJpYWJsZXMgZHJpdmUgYWxtb3N0IGV2ZXJ5IGFzcGVjdCBvZiB0aGUgVS5TLiBXZWIgRGVzaWduXG4vLyBzeXN0ZW0uIEV2ZXJ5IHZhcmlhYmxlIGlzIGRlY2xhcmVkIGFzICFkZWZhdWx0IHNvIHRoYXQgaXQgY2FuIGJlXG4vLyBvdmVycmlkZGVuIGJ5IGEgcHJldmlvdXMgaW1wb3J0LlxuLy9cbi8vIFhYWCBEbyBub3QgbW9kaWZ5IHRoaXMgZmlsZSFcbi8vXG4vLyBJZiB5b3Ugd2FudCB0byBvdmVycmlkZSBhIHZhcmlhYmxlLCBzZXQgdGhhdCB2YXJpYWJsZSBpbiBvbmUgb2YgeW91clxuLy8gb3duIHBhcnRpYWxzLCB0aGVuIEBpbXBvcnQgJ3twYXRoL3RvL3Vzd2RzL31jb3JlL3ZhcmlhYmxlcycuXG5cbi8vIFR5cG9ncmFwaHlcbi8vIFJlbW92aW5nIHRoZSAhZGVmYXVsdCBmcm9tICRlbS1iYXNlIHNvIHdlIGFyZSBub3QgaW5oZXJpdGluZyB0aGF0XG4vLyB2YWx1ZSBmcm9tIEJvdXJib24uXG4kZW0tYmFzZTogICAgICAgICAgICAgMTBweDtcbiRiYXNlLWZvbnQtc2l6ZTogICAgICAxLjdyZW0gIWRlZmF1bHQ7XG4kc21hbGwtZm9udC1zaXplOiAgICAgMS40cmVtICFkZWZhdWx0O1xuJGxlYWQtZm9udC1zaXplOiAgICAgIDJyZW0gIWRlZmF1bHQ7XG4kdGl0bGUtZm9udC1zaXplOiAgICAgNS4ycmVtICFkZWZhdWx0O1xuJGgxLWZvbnQtc2l6ZTogICAgICAgIDRyZW0gIWRlZmF1bHQ7XG4kaDItZm9udC1zaXplOiAgICAgICAgM3JlbSAhZGVmYXVsdDtcbiRoMy1mb250LXNpemU6ICAgICAgICAycmVtICFkZWZhdWx0O1xuJGg0LWZvbnQtc2l6ZTogICAgICAgIDEuN3JlbSAhZGVmYXVsdDtcbiRoNS1mb250LXNpemU6ICAgICAgICAxLjVyZW0gIWRlZmF1bHQ7XG4kaDYtZm9udC1zaXplOiAgICAgICAgMS4zcmVtICFkZWZhdWx0O1xuJGJhc2UtbGluZS1oZWlnaHQ6ICAgIDEuNSAhZGVmYXVsdDtcbiRoZWFkaW5nLWxpbmUtaGVpZ2h0OiAxLjMgIWRlZmF1bHQ7XG4kbGVhZC1saW5lLWhlaWdodDogICAgMS43ICFkZWZhdWx0O1xuXG4kZm9udC1zYW5zOiAgICAgICAgICAgJ1NvdXJjZSBTYW5zIFBybycsICRoZWx2ZXRpY2EgIWRlZmF1bHQ7XG4kZm9udC1zZXJpZjogICAgICAgICAgJ01lcnJpd2VhdGhlcicsICRnZW9yZ2lhICFkZWZhdWx0O1xuXG4vLyBUT0RPIHRoZXNlIHNob3VsZCBiZSBjYWxsZWQgZm9udC13ZWlnaHQtJHt9XG4kZm9udC1ub3JtYWw6ICAgICAgICAgNDAwICFkZWZhdWx0O1xuJGZvbnQtYm9sZDogICAgICAgICAgIDcwMCAhZGVmYXVsdDtcblxuLy8gQ29sb3JcbiRjb2xvci1ibHVlOiAgICAgICAgICAgICAgICAgIzAwNzFiYyAhZGVmYXVsdDtcbiRjb2xvci1ibHVlLWRhcmtlcjogICAgICAgICAgIzIwNTQ5MyAhZGVmYXVsdDtcbiRjb2xvci1ibHVlLWRhcmtlc3Q6ICAgICAgICAgIzExMmU1MSAhZGVmYXVsdDtcblxuJGNvbG9yLWFxdWE6ICAgICAgICAgICAgICAgICAjMDJiZmU3ICFkZWZhdWx0O1xuJGNvbG9yLWFxdWEtZGFyazogICAgICAgICAgICAjMDBhNmQyICFkZWZhdWx0O1xuJGNvbG9yLWFxdWEtZGFya2VzdDogICAgICAgICAjMDQ2Yjk5ICFkZWZhdWx0O1xuJGNvbG9yLWFxdWEtbGlnaHQ6ICAgICAgICAgICAjOWJkYWYxICFkZWZhdWx0O1xuJGNvbG9yLWFxdWEtbGlnaHRlc3Q6ICAgICAgICAjZTFmM2Y4ICFkZWZhdWx0O1xuXG4kY29sb3ItcmVkOiAgICAgICAgICAgICAgICAgICNlMzFjM2QgIWRlZmF1bHQ7XG4kY29sb3ItcmVkLWRhcms6ICAgICAgICAgICAgICNjZDIwMjYgIWRlZmF1bHQ7XG4kY29sb3ItcmVkLWRhcmtlc3Q6ICAgICAgICAgICM5ODFiMWUgIWRlZmF1bHQ7XG4kY29sb3ItcmVkLWxpZ2h0OiAgICAgICAgICAgICNlNTkzOTMgIWRlZmF1bHQ7XG4kY29sb3ItcmVkLWxpZ2h0ZXN0OiAgICAgICAgICNmOWRlZGUgIWRlZmF1bHQ7XG5cbiRjb2xvci13aGl0ZTogICAgICAgICAgICAgICAgI2ZmZmZmZiAhZGVmYXVsdDtcbiRjb2xvci1ibGFjazogICAgICAgICAgICAgICAgIzAwMDAwMCAhZGVmYXVsdDtcbiRjb2xvci1ibGFjay1saWdodDogICAgICAgICAgIzIxMjEyMSAhZGVmYXVsdDtcblxuJGNvbG9yLWdyYXktZGFyazogICAgICAgICAgICAjMzIzYTQ1ICFkZWZhdWx0O1xuJGNvbG9yLWdyYXk6ICAgICAgICAgICAgICAgICAjNWI2MTZiICFkZWZhdWx0O1xuJGNvbG9yLWdyYXktbWVkaXVtOiAgICAgICAgICAjNzU3NTc1ICFkZWZhdWx0O1xuJGNvbG9yLWdyYXktbGlnaHQ6ICAgICAgICAgICAjYWViMGI1ICFkZWZhdWx0O1xuJGNvbG9yLWdyYXktbGlnaHRlcjogICAgICAgICAjZDZkN2Q5ICFkZWZhdWx0O1xuJGNvbG9yLWdyYXktbGlnaHRlc3Q6ICAgICAgICAjZjFmMWYxICFkZWZhdWx0O1xuXG4kY29sb3ItZ3JheS13YXJtLWRhcms6ICAgICAgICM0OTQ0NDAgIWRlZmF1bHQ7XG4kY29sb3ItZ3JheS13YXJtLWxpZ2h0OiAgICAgICNlNGUyZTAgIWRlZmF1bHQ7XG4kY29sb3ItZ3JheS1jb29sLWxpZ2h0OiAgICAgICNkY2U0ZWYgIWRlZmF1bHQ7XG5cbiRjb2xvci1nb2xkOiAgICAgICAgICAgICAgICAgI2ZkYjgxZSAhZGVmYXVsdDtcbiRjb2xvci1nb2xkLWxpZ2h0OiAgICAgICAgICAgI2Y5YzY0MiAhZGVmYXVsdDtcbiRjb2xvci1nb2xkLWxpZ2h0ZXI6ICAgICAgICAgI2ZhZDk4MCAhZGVmYXVsdDtcbiRjb2xvci1nb2xkLWxpZ2h0ZXN0OiAgICAgICAgI2ZmZjFkMiAhZGVmYXVsdDtcblxuJGNvbG9yLWdyZWVuOiAgICAgICAgICAgICAgICAjMmU4NTQwICFkZWZhdWx0O1xuJGNvbG9yLWdyZWVuLWxpZ2h0OiAgICAgICAgICAjNGFhNTY0ICFkZWZhdWx0O1xuJGNvbG9yLWdyZWVuLWxpZ2h0ZXI6ICAgICAgICAjOTRiZmEyICFkZWZhdWx0O1xuJGNvbG9yLWdyZWVuLWxpZ2h0ZXN0OiAgICAgICAjZTdmNGU0ICFkZWZhdWx0O1xuXG4kY29sb3ItY29vbC1ibHVlOiAgICAgICAgICAgICMyMDU0OTMgIWRlZmF1bHQ7XG4kY29sb3ItY29vbC1ibHVlLWxpZ2h0OiAgICAgICM0NzczYWEgIWRlZmF1bHQ7XG4kY29sb3ItY29vbC1ibHVlLWxpZ2h0ZXI6ICAgICM4YmE2Y2EgIWRlZmF1bHQ7XG4kY29sb3ItY29vbC1ibHVlLWxpZ2h0ZXN0OiAgICNkY2U0ZWYgIWRlZmF1bHQ7XG5cbiRjb2xvci1wdXJwbGU6ICAgICAgICAgICAgICAgIzRjMmM5MiAhZGVmYXVsdDtcblxuLy8gRnVuY3Rpb25hbCBjb2xvcnNcbiRjb2xvci1wcmltYXJ5OiAgICAgICAgICAgICAgJGNvbG9yLWJsdWUgIWRlZmF1bHQ7XG4kY29sb3ItcHJpbWFyeS1kYXJrZXI6ICAgICAgICRjb2xvci1ibHVlLWRhcmtlciAhZGVmYXVsdDtcbiRjb2xvci1wcmltYXJ5LWRhcmtlc3Q6ICAgICAgJGNvbG9yLWJsdWUtZGFya2VzdCAhZGVmYXVsdDtcblxuJGNvbG9yLXByaW1hcnktYWx0OiAgICAgICAgICAkY29sb3ItYXF1YSAhZGVmYXVsdDtcbiRjb2xvci1wcmltYXJ5LWFsdC1kYXJrOiAgICAgJGNvbG9yLWFxdWEtZGFyayAhZGVmYXVsdDtcbiRjb2xvci1wcmltYXJ5LWFsdC1kYXJrZXN0OiAgJGNvbG9yLWFxdWEtZGFya2VzdCAhZGVmYXVsdDtcbiRjb2xvci1wcmltYXJ5LWFsdC1saWdodDogICAgJGNvbG9yLWFxdWEtbGlnaHQgIWRlZmF1bHQ7XG4kY29sb3ItcHJpbWFyeS1hbHQtbGlnaHRlc3Q6ICRjb2xvci1hcXVhLWxpZ2h0ZXN0ICFkZWZhdWx0O1xuXG4kY29sb3Itc2Vjb25kYXJ5OiAgICAgICAgICAgICRjb2xvci1yZWQgIWRlZmF1bHQ7XG4kY29sb3Itc2Vjb25kYXJ5LWRhcms6ICAgICAgICRjb2xvci1yZWQtZGFyayAhZGVmYXVsdDtcbiRjb2xvci1zZWNvbmRhcnktZGFya2VzdDogICAgJGNvbG9yLXJlZC1kYXJrZXN0ICFkZWZhdWx0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodDogICAgICAkY29sb3ItcmVkLWxpZ2h0ICFkZWZhdWx0O1xuJGNvbG9yLXNlY29uZGFyeS1saWdodGVzdDogICAkY29sb3ItcmVkLWxpZ2h0ZXN0ICFkZWZhdWx0O1xuXG4kY29sb3ItYmFzZTogICAgICAgICAgICAgICAgICRjb2xvci1ibGFjay1saWdodCAhZGVmYXVsdDtcbiRjb2xvci1mb2N1czogICAgICAgICAgICAgICAgJGNvbG9yLWdyYXktbGlnaHQgIWRlZmF1bHQ7XG4kY29sb3ItdmlzaXRlZDogICAgICAgICAgICAgICRjb2xvci1wdXJwbGUgIWRlZmF1bHQ7XG5cbiRjb2xvci1zaGFkb3c6ICAgICAgICAgICAgICAgcmdiYSgjMDAwLCAwLjMpICFkZWZhdWx0O1xuJGNvbG9yLXRyYW5zcGFyZW50OiAgICAgICAgICByZ2JhKCMwMDAsIDApICFkZWZhdWx0O1xuXG4vLyBNb2JpbGUgRmlyc3QgQnJlYWtwb2ludHNcbiRzbWFsbC1zY3JlZW46ICA0ODFweCAhZGVmYXVsdDtcbiRtZWRpdW0tc2NyZWVuOiA2MDBweCAhZGVmYXVsdDtcbiRsYXJnZS1zY3JlZW46ICAxMjAxcHggIWRlZmF1bHQ7XG5cbi8vIEdyaWQgY29sdW1uIGNvdW50cyBieSBzY3JlZW4gc2l6ZVxuJGdyaWQtY29sdW1ucy1zbWFsbDogMSAhZGVmYXVsdDtcbiRncmlkLWNvbHVtbnMtbWVkaXVtOiA2ICFkZWZhdWx0O1xuJGdyaWQtY29sdW1ucy1sYXJnZTogMTIgIWRlZmF1bHQ7XG5cbi8vIEBtZWRpYSBzaW5nbGUta2V5d29yZCBoZWxwZXJzXG4kc21hbGw6IG5ldy1icmVha3BvaW50KG1pbi13aWR0aCAkc21hbGwtc2NyZWVuICRncmlkLWNvbHVtbnMtc21hbGwpICFkZWZhdWx0O1xuJG1lZGl1bTogbmV3LWJyZWFrcG9pbnQobWluLXdpZHRoICRtZWRpdW0tc2NyZWVuICRncmlkLWNvbHVtbnMtbWVkaXVtKSAhZGVmYXVsdDtcbiRsYXJnZTogbmV3LWJyZWFrcG9pbnQobWluLXdpZHRoICRsYXJnZS1zY3JlZW4gJGdyaWQtY29sdW1ucy1sYXJnZSkgIWRlZmF1bHQ7XG5cbi8vIFJlbGF0aXZlIGZvbnQgYW5kIGltYWdlIGZpbGUgcGF0aHNcbiRmb250LXBhdGg6ICAgJy4uL2ZvbnRzJyAhZGVmYXVsdDtcbiRpbWFnZS1wYXRoOiAgJy4uL2ltZycgIWRlZmF1bHQ7XG5cbi8vIFNldCAkYXNzZXQtcGlwZWxpbmUgdG8gdHJ1ZSBpZiB5b3UncmUgdXNpbmcgdGhlIFJhaWxzIEFzc2V0IFBpcGVsaW5lXG4kYXNzZXQtcGlwZWxpbmU6ICAgICAgZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIE1hZ2ljIE51bWJlcnNcbiR0ZXh0LW1heC13aWR0aDogICAgICAgICAgNjZjaCAhZGVmYXVsdDsgLy8gNjYgY2hhcmFjdGVycyBwZXIgbGluZVxuJGxlYWQtbWF4LXdpZHRoOiAgICAgICAgICA3N3JlbSAhZGVmYXVsdDtcbiRzaXRlLW1heC13aWR0aDogICAgICAgICAgMTA0MHB4ICFkZWZhdWx0O1xuJHNpdGUtbWFyZ2luczogICAgICAgICAgICAzcmVtICFkZWZhdWx0O1xuJHNpdGUtbWFyZ2lucy1tb2JpbGU6ICAgICAxLjVyZW0gIWRlZmF1bHQ7XG4kYXJ0aWNsZS1tYXgtd2lkdGg6ICAgICAgIDYwMHB4ICFkZWZhdWx0O1xuJGlucHV0LW1heC13aWR0aDogICAgICAgICA0NnJlbSAhZGVmYXVsdDtcbiRsYWJlbC1ib3JkZXItcmFkaXVzOiAgICAgMnB4ICFkZWZhdWx0O1xuJGNoZWNrYm94LWJvcmRlci1yYWRpdXM6ICAycHggIWRlZmF1bHQ7XG4kYm9yZGVyLXJhZGl1czogICAgICAgICAgIDNweCAhZGVmYXVsdDtcbiRidXR0b24tYm9yZGVyLXJhZGl1czogICAgNXB4ICFkZWZhdWx0O1xuJGJveC1zaGFkb3c6ICAgICAgICAgICAgICAwIDAgMnB4ICRjb2xvci1zaGFkb3cgIWRlZmF1bHQ7XG4kZm9jdXMtb3V0bGluZTogICAgICAgICAgIDJweCBkb3R0ZWQgJGNvbG9yLWdyYXktbGlnaHQ7XG4kZm9jdXMtc3BhY2luZzogICAgICAgICAgIDNweDtcbiRuYXYtd2lkdGg6ICAgICAgICAgICAgICAgOTUxcHggIWRlZmF1bHQ7XG5cbi8vIDQ0IHggNDQgcGl4ZWxzIGhpdCB0YXJnZXQgZm9sbG93aW5nIEFwcGxlIGlPUyBIdW1hbiBJbnRlcmZhY2Vcbi8vIEd1aWRlbGluZXNcbiRoaXQtYXJlYTogNC40cmVtICFkZWZhdWx0O1xuXG4kc3BhY2luZy14LXNtYWxsOiAwLjVyZW07XG4kc3BhY2luZy1zbWFsbDogMXJlbTtcbiRzcGFjaW5nLW1kLXNtYWxsOiAxLjVyZW07XG4kc3BhY2luZy1tZWRpdW06IDJyZW07XG4kc3BhY2luZy1sYXJnZTogM3JlbTtcbiIsIi8qISB1c3dkcyBAdmVyc2lvbiAqL1xuLm5vcm1hbGl6ZSBodG1sLCBodG1sLm5vcm1hbGl6ZSB7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xuICAvKiAxICovXG4gIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICAvKiAyICovXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgLyogMiAqLyB9XG5cbi5ub3JtYWxpemUgYm9keSwgYm9keS5ub3JtYWxpemUge1xuICBtYXJnaW46IDA7IH1cblxuLm5vcm1hbGl6ZSBhcnRpY2xlLCBhcnRpY2xlLm5vcm1hbGl6ZSxcbi5ub3JtYWxpemUgYXNpZGUsIGFzaWRlLm5vcm1hbGl6ZSxcbi5ub3JtYWxpemUgZGV0YWlscywgZGV0YWlscy5ub3JtYWxpemUsXG4ubm9ybWFsaXplIGZpZ2NhcHRpb24sIGZpZ2NhcHRpb24ubm9ybWFsaXplLFxuLm5vcm1hbGl6ZSBmaWd1cmUsIGZpZ3VyZS5ub3JtYWxpemUsXG4ubm9ybWFsaXplIGZvb3RlciwgZm9vdGVyLm5vcm1hbGl6ZSxcbi5ub3JtYWxpemUgaGVhZGVyLCBoZWFkZXIubm9ybWFsaXplLFxuLm5vcm1hbGl6ZSBoZ3JvdXAsIGhncm91cC5ub3JtYWxpemUsXG4ubm9ybWFsaXplIG1haW4sIG1haW4ubm9ybWFsaXplLFxuLm5vcm1hbGl6ZSBtZW51LCBtZW51Lm5vcm1hbGl6ZSxcbi5ub3JtYWxpemUgbmF2LCBuYXYubm9ybWFsaXplLFxuLm5vcm1hbGl6ZSBzZWN0aW9uLCBzZWN0aW9uLm5vcm1hbGl6ZSxcbi5ub3JtYWxpemUgc3VtbWFyeSwgc3VtbWFyeS5ub3JtYWxpemUge1xuICBkaXNwbGF5OiBibG9jazsgfVxuXG4ubm9ybWFsaXplIGF1ZGlvLCBhdWRpby5ub3JtYWxpemUsXG4ubm9ybWFsaXplIGNhbnZhcywgY2FudmFzLm5vcm1hbGl6ZSxcbi5ub3JtYWxpemUgcHJvZ3Jlc3MsIHByb2dyZXNzLm5vcm1hbGl6ZSxcbi5ub3JtYWxpemUgdmlkZW8sIHZpZGVvLm5vcm1hbGl6ZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgLyogMSAqL1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIC8qIDIgKi8gfVxuXG4ubm9ybWFsaXplIGF1ZGlvOm5vdChbY29udHJvbHNdKSwgYXVkaW86bm90KFtjb250cm9sc10pLm5vcm1hbGl6ZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGhlaWdodDogMDsgfVxuXG4ubm9ybWFsaXplIFtoaWRkZW5dLCBbaGlkZGVuXS5ub3JtYWxpemUsXG4ubm9ybWFsaXplIHRlbXBsYXRlLCB0ZW1wbGF0ZS5ub3JtYWxpemUge1xuICBkaXNwbGF5OiBub25lOyB9XG5cbi5ub3JtYWxpemUgYSwgYS5ub3JtYWxpemUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuXG4ubm9ybWFsaXplIGE6YWN0aXZlLCBhOmFjdGl2ZS5ub3JtYWxpemUsXG4ubm9ybWFsaXplIGE6aG92ZXIsIGE6aG92ZXIubm9ybWFsaXplIHtcbiAgb3V0bGluZTogMDsgfVxuXG4ubm9ybWFsaXplIGFiYnJbdGl0bGVdLCBhYmJyW3RpdGxlXS5ub3JtYWxpemUge1xuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkOyB9XG5cbi5ub3JtYWxpemUgYiwgYi5ub3JtYWxpemUsXG4ubm9ybWFsaXplIHN0cm9uZywgc3Ryb25nLm5vcm1hbGl6ZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi5ub3JtYWxpemUgZGZuLCBkZm4ubm9ybWFsaXplIHtcbiAgZm9udC1zdHlsZTogaXRhbGljOyB9XG5cbmgxIHtcbiAgZm9udC1zaXplOiAyZW07XG4gIG1hcmdpbjogMC42N2VtIDA7IH1cblxuLm5vcm1hbGl6ZSBtYXJrLCBtYXJrLm5vcm1hbGl6ZSB7XG4gIGJhY2tncm91bmQ6ICNmZjA7XG4gIGNvbG9yOiAjMDAwOyB9XG5cbi5ub3JtYWxpemUgc21hbGwsIHNtYWxsLm5vcm1hbGl6ZSB7XG4gIGZvbnQtc2l6ZTogODAlOyB9XG5cbi5ub3JtYWxpemUgc3ViLCBzdWIubm9ybWFsaXplLFxuLm5vcm1hbGl6ZSBzdXAsIHN1cC5ub3JtYWxpemUge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyB9XG5cbi5ub3JtYWxpemUgc3VwLCBzdXAubm9ybWFsaXplIHtcbiAgdG9wOiAtMC41ZW07IH1cblxuLm5vcm1hbGl6ZSBzdWIsIHN1Yi5ub3JtYWxpemUge1xuICBib3R0b206IC0wLjI1ZW07IH1cblxuLm5vcm1hbGl6ZSBpbWcsIGltZy5ub3JtYWxpemUge1xuICBib3JkZXI6IDA7IH1cblxuLm5vcm1hbGl6ZSBzdmc6bm90KDpyb290KSwgc3ZnOm5vdCg6cm9vdCkubm9ybWFsaXplIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuXG4ubm9ybWFsaXplIGZpZ3VyZSwgZmlndXJlLm5vcm1hbGl6ZSB7XG4gIG1hcmdpbjogMWVtIDQwcHg7IH1cblxuLm5vcm1hbGl6ZSBociwgaHIubm9ybWFsaXplIHtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIGhlaWdodDogMDsgfVxuXG4ubm9ybWFsaXplIHByZSwgcHJlLm5vcm1hbGl6ZSB7XG4gIG92ZXJmbG93OiBhdXRvOyB9XG5cbi5ub3JtYWxpemUgY29kZSwgY29kZS5ub3JtYWxpemUsXG4ubm9ybWFsaXplIGtiZCwga2JkLm5vcm1hbGl6ZSxcbi5ub3JtYWxpemUgcHJlLCBwcmUubm9ybWFsaXplLFxuLm5vcm1hbGl6ZSBzYW1wLCBzYW1wLm5vcm1hbGl6ZSB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcbiAgZm9udC1zaXplOiAxZW07IH1cblxuLm5vcm1hbGl6ZSBidXR0b24sIGJ1dHRvbi5ub3JtYWxpemUsXG4ubm9ybWFsaXplIGlucHV0LCBpbnB1dC5ub3JtYWxpemUsXG4ubm9ybWFsaXplIG9wdGdyb3VwLCBvcHRncm91cC5ub3JtYWxpemUsXG4ubm9ybWFsaXplIHNlbGVjdCwgc2VsZWN0Lm5vcm1hbGl6ZSxcbi5ub3JtYWxpemUgdGV4dGFyZWEsIHRleHRhcmVhLm5vcm1hbGl6ZSB7XG4gIGNvbG9yOiBpbmhlcml0O1xuICAvKiAxICovXG4gIGZvbnQ6IGluaGVyaXQ7XG4gIC8qIDIgKi9cbiAgbWFyZ2luOiAwO1xuICAvKiAzICovIH1cblxuLm5vcm1hbGl6ZSBidXR0b24sIGJ1dHRvbi5ub3JtYWxpemUge1xuICBvdmVyZmxvdzogdmlzaWJsZTsgfVxuXG4ubm9ybWFsaXplIGJ1dHRvbiwgYnV0dG9uLm5vcm1hbGl6ZSxcbi5ub3JtYWxpemUgc2VsZWN0LCBzZWxlY3Qubm9ybWFsaXplIHtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7IH1cblxuLm5vcm1hbGl6ZSBidXR0b24sIGJ1dHRvbi5ub3JtYWxpemUsXG5odG1sIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubm9ybWFsaXplIGlucHV0W3R5cGU9XCJyZXNldFwiXSwgaW5wdXRbdHlwZT1cInJlc2V0XCJdLm5vcm1hbGl6ZSxcbi5ub3JtYWxpemUgaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSwgaW5wdXRbdHlwZT1cInN1Ym1pdFwiXS5ub3JtYWxpemUge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcbiAgLyogMiAqL1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIC8qIDMgKi8gfVxuXG4ubm9ybWFsaXplIGJ1dHRvbltkaXNhYmxlZF0sIGJ1dHRvbltkaXNhYmxlZF0ubm9ybWFsaXplLFxuaHRtbCBpbnB1dFtkaXNhYmxlZF0ge1xuICBjdXJzb3I6IGRlZmF1bHQ7IH1cblxuLm5vcm1hbGl6ZSBidXR0b246Oi1tb3otZm9jdXMtaW5uZXIsIGJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lci5ub3JtYWxpemUsXG4ubm9ybWFsaXplIGlucHV0OjotbW96LWZvY3VzLWlubmVyLCBpbnB1dDo6LW1vei1mb2N1cy1pbm5lci5ub3JtYWxpemUge1xuICBib3JkZXI6IDA7XG4gIHBhZGRpbmc6IDA7IH1cblxuLm5vcm1hbGl6ZSBpbnB1dCwgaW5wdXQubm9ybWFsaXplIHtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsgfVxuXG4ubm9ybWFsaXplIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSwgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLm5vcm1hbGl6ZSxcbi5ub3JtYWxpemUgaW5wdXRbdHlwZT1cInJhZGlvXCJdLCBpbnB1dFt0eXBlPVwicmFkaW9cIl0ubm9ybWFsaXplIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLyogMSAqL1xuICBwYWRkaW5nOiAwO1xuICAvKiAyICovIH1cblxuLm5vcm1hbGl6ZSBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLCBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLm5vcm1hbGl6ZSxcbi5ub3JtYWxpemUgaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwgaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbi5ub3JtYWxpemUge1xuICBoZWlnaHQ6IGF1dG87IH1cblxuLm5vcm1hbGl6ZSBpbnB1dFt0eXBlPVwic2VhcmNoXCJdLCBpbnB1dFt0eXBlPVwic2VhcmNoXCJdLm5vcm1hbGl6ZSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xuICAvKiAxICovXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAvKiAyICovIH1cblxuLm5vcm1hbGl6ZSBpbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLCBpbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLm5vcm1hbGl6ZSxcbi5ub3JtYWxpemUgaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiwgaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbi5ub3JtYWxpemUge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IH1cblxuLm5vcm1hbGl6ZSBmaWVsZHNldCwgZmllbGRzZXQubm9ybWFsaXplIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgbWFyZ2luOiAwIDJweDtcbiAgcGFkZGluZzogMC4zNWVtIDAuNjI1ZW0gMC43NWVtOyB9XG5cbi5ub3JtYWxpemUgbGVnZW5kLCBsZWdlbmQubm9ybWFsaXplIHtcbiAgYm9yZGVyOiAwO1xuICAvKiAxICovXG4gIHBhZGRpbmc6IDA7XG4gIC8qIDIgKi8gfVxuXG4ubm9ybWFsaXplIHRleHRhcmVhLCB0ZXh0YXJlYS5ub3JtYWxpemUge1xuICBvdmVyZmxvdzogYXV0bzsgfVxuXG4ubm9ybWFsaXplIG9wdGdyb3VwLCBvcHRncm91cC5ub3JtYWxpemUge1xuICBmb250LXdlaWdodDogYm9sZDsgfVxuXG4ubm9ybWFsaXplIHRhYmxlLCB0YWJsZS5ub3JtYWxpemUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDsgfVxuXG4ubm9ybWFsaXplIHRkLCB0ZC5ub3JtYWxpemUsXG4ubm9ybWFsaXplIHRoLCB0aC5ub3JtYWxpemUge1xuICBwYWRkaW5nOiAwOyB9XG5cbi8qIHN0eWxlbGludC1kaXNhYmxlIGF0LXJ1bGUtZW1wdHktbGluZS1iZWZvcmUgKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogXCJTb3VyY2UgU2FucyBQcm9cIjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogMzAwO1xuICBzcmM6IHVybChcIi4uL2ZvbnRzL3NvdXJjZXNhbnNwcm8tbGlnaHQtd2ViZm9udC5lb3Q/I2llZml4XCIpIGZvcm1hdChcImVtYmVkZGVkLW9wZW50eXBlXCIpLCB1cmwoXCIuLi9mb250cy9zb3VyY2VzYW5zcHJvLWxpZ2h0LXdlYmZvbnQud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcIi4uL2ZvbnRzL3NvdXJjZXNhbnNwcm8tbGlnaHQtd2ViZm9udC53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcIi4uL2ZvbnRzL3NvdXJjZXNhbnNwcm8tbGlnaHQtd2ViZm9udC50dGZcIikgZm9ybWF0KFwidHJ1ZXR5cGVcIik7IH1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiBcIlNvdXJjZSBTYW5zIFByb1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHNyYzogdXJsKFwiLi4vZm9udHMvc291cmNlc2Fuc3Byby1yZWd1bGFyLXdlYmZvbnQuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlbWJlZGRlZC1vcGVudHlwZVwiKSwgdXJsKFwiLi4vZm9udHMvc291cmNlc2Fuc3Byby1yZWd1bGFyLXdlYmZvbnQud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcIi4uL2ZvbnRzL3NvdXJjZXNhbnNwcm8tcmVndWxhci13ZWJmb250LndvZmZcIikgZm9ybWF0KFwid29mZlwiKSwgdXJsKFwiLi4vZm9udHMvc291cmNlc2Fuc3Byby1yZWd1bGFyLXdlYmZvbnQudHRmXCIpIGZvcm1hdChcInRydWV0eXBlXCIpOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogXCJTb3VyY2UgU2FucyBQcm9cIjtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LXdlaWdodDogNDAwO1xuICBzcmM6IHVybChcIi4uL2ZvbnRzL3NvdXJjZXNhbnNwcm8taXRhbGljLXdlYmZvbnQuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlbWJlZGRlZC1vcGVudHlwZVwiKSwgdXJsKFwiLi4vZm9udHMvc291cmNlc2Fuc3Byby1pdGFsaWMtd2ViZm9udC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiLi4vZm9udHMvc291cmNlc2Fuc3Byby1pdGFsaWMtd2ViZm9udC53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcIi4uL2ZvbnRzL3NvdXJjZXNhbnNwcm8taXRhbGljLXdlYmZvbnQudHRmXCIpIGZvcm1hdChcInRydWV0eXBlXCIpOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogXCJTb3VyY2UgU2FucyBQcm9cIjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNzAwO1xuICBzcmM6IHVybChcIi4uL2ZvbnRzL3NvdXJjZXNhbnNwcm8tYm9sZC13ZWJmb250LmVvdD8jaWVmaXhcIikgZm9ybWF0KFwiZW1iZWRkZWQtb3BlbnR5cGVcIiksIHVybChcIi4uL2ZvbnRzL3NvdXJjZXNhbnNwcm8tYm9sZC13ZWJmb250LndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCIuLi9mb250cy9zb3VyY2VzYW5zcHJvLWJvbGQtd2ViZm9udC53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcIi4uL2ZvbnRzL3NvdXJjZXNhbnNwcm8tYm9sZC13ZWJmb250LnR0ZlwiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKTsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiTWVycml3ZWF0aGVyXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgc3JjOiB1cmwoXCIuLi9mb250cy9tZXJyaXdlYXRoZXItbGlnaHQtd2ViZm9udC5lb3Q/I2llZml4XCIpIGZvcm1hdChcImVtYmVkZGVkLW9wZW50eXBlXCIpLCB1cmwoXCIuLi9mb250cy9tZXJyaXdlYXRoZXItbGlnaHQtd2ViZm9udC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiLi4vZm9udHMvbWVycml3ZWF0aGVyLWxpZ2h0LXdlYmZvbnQud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCIuLi9mb250cy9tZXJyaXdlYXRoZXItbGlnaHQtd2ViZm9udC50dGZcIikgZm9ybWF0KFwidHJ1ZXR5cGVcIik7IH1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiBcIk1lcnJpd2VhdGhlclwiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHNyYzogdXJsKFwiLi4vZm9udHMvbWVycml3ZWF0aGVyLXJlZ3VsYXItd2ViZm9udC5lb3Q/I2llZml4XCIpIGZvcm1hdChcImVtYmVkZGVkLW9wZW50eXBlXCIpLCB1cmwoXCIuLi9mb250cy9tZXJyaXdlYXRoZXItcmVndWxhci13ZWJmb250LndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCIuLi9mb250cy9tZXJyaXdlYXRoZXItcmVndWxhci13ZWJmb250LndvZmZcIikgZm9ybWF0KFwid29mZlwiKSwgdXJsKFwiLi4vZm9udHMvbWVycml3ZWF0aGVyLXJlZ3VsYXItd2ViZm9udC50dGZcIikgZm9ybWF0KFwidHJ1ZXR5cGVcIik7IH1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiBcIk1lcnJpd2VhdGhlclwiO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHNyYzogdXJsKFwiLi4vZm9udHMvbWVycml3ZWF0aGVyLWl0YWxpYy13ZWJmb250LmVvdD8jaWVmaXhcIikgZm9ybWF0KFwiZW1iZWRkZWQtb3BlbnR5cGVcIiksIHVybChcIi4uL2ZvbnRzL21lcnJpd2VhdGhlci1pdGFsaWMtd2ViZm9udC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiLi4vZm9udHMvbWVycml3ZWF0aGVyLWl0YWxpYy13ZWJmb250LndvZmZcIikgZm9ybWF0KFwid29mZlwiKSwgdXJsKFwiLi4vZm9udHMvbWVycml3ZWF0aGVyLWl0YWxpYy13ZWJmb250LnR0ZlwiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKTsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiTWVycml3ZWF0aGVyXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgc3JjOiB1cmwoXCIuLi9mb250cy9tZXJyaXdlYXRoZXItYm9sZC13ZWJmb250LmVvdD8jaWVmaXhcIikgZm9ybWF0KFwiZW1iZWRkZWQtb3BlbnR5cGVcIiksIHVybChcIi4uL2ZvbnRzL21lcnJpd2VhdGhlci1ib2xkLXdlYmZvbnQud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcIi4uL2ZvbnRzL21lcnJpd2VhdGhlci1ib2xkLXdlYmZvbnQud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCIuLi9mb250cy9tZXJyaXdlYXRoZXItYm9sZC13ZWJmb250LnR0ZlwiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKTsgfVxuXG4vKiBzdHlsZWxpbnQtZW5hYmxlICovXG4udXNhLWdyaWQsXG4udXNhLWdyaWQtZnVsbCB7XG4gIG1heC13aWR0aDogMTIwMHB4O1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICBtYXgtd2lkdGg6IDk2MHB4OyB9XG4gIC51c2EtZ3JpZDo6YWZ0ZXIsXG4gIC51c2EtZ3JpZC1mdWxsOjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuXG4udXNhLWdyaWQge1xuICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xuICBwYWRkaW5nLWxlZnQ6IDFyZW07IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgICAudXNhLWdyaWQge1xuICAgICAgcGFkZGluZy1yaWdodDogMS44NzVyZW07XG4gICAgICBwYWRkaW5nLWxlZnQ6IDEuODc1cmVtOyB9IH1cblxuLnVzYS1ncmlkLWZ1bGwge1xuICBwYWRkaW5nOiAwOyB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC51c2Etd2lkdGgtb25lLXdob2xlIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tcmlnaHQ6IDQuODI5MTYlO1xuICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLnVzYS13aWR0aC1vbmUtd2hvbGU6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgLnVzYS13aWR0aC1vbmUtaGFsZiB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLXJpZ2h0OiA0LjgyOTE2JTtcbiAgICB3aWR0aDogNDcuNTg1NDIlOyB9XG4gICAgLnVzYS13aWR0aC1vbmUtaGFsZjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAudXNhLXdpZHRoLW9uZS10aGlyZCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLXJpZ2h0OiA0LjgyOTE2JTtcbiAgICB3aWR0aDogMzAuMTEzODklOyB9XG4gICAgLnVzYS13aWR0aC1vbmUtdGhpcmQ6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgLnVzYS13aWR0aC10d28tdGhpcmRzIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tcmlnaHQ6IDQuODI5MTYlO1xuICAgIHdpZHRoOiA2NS4wNTY5NSU7IH1cbiAgICAudXNhLXdpZHRoLXR3by10aGlyZHM6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgLnVzYS13aWR0aC1vbmUtZm91cnRoIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tcmlnaHQ6IDQuODI5MTYlO1xuICAgIHdpZHRoOiA0Ny41ODU0MiU7IH1cbiAgICAudXNhLXdpZHRoLW9uZS1mb3VydGg6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAudXNhLXdpZHRoLW9uZS1mb3VydGg6bnRoLWNoaWxkKDJuKSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgLnVzYS13aWR0aC10aHJlZS1mb3VydGhzIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tcmlnaHQ6IDQuODI5MTYlO1xuICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLnVzYS13aWR0aC10aHJlZS1mb3VydGhzOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gIC51c2Etd2lkdGgtb25lLXNpeHRoIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tcmlnaHQ6IDQuODI5MTYlO1xuICAgIHdpZHRoOiAzMC4xMTM4OSU7IH1cbiAgICAudXNhLXdpZHRoLW9uZS1zaXh0aDpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAgIC51c2Etd2lkdGgtb25lLXNpeHRoOm50aC1jaGlsZCgzbikge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gIC51c2Etd2lkdGgtZml2ZS1zaXh0aHMge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1yaWdodDogNC44MjkxNiU7XG4gICAgd2lkdGg6IDY1LjA1Njk1JTsgfVxuICAgIC51c2Etd2lkdGgtZml2ZS1zaXh0aHM6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgLnVzYS13aWR0aC1vbmUtdHdlbGZ0aCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLXJpZ2h0OiA0LjgyOTE2JTtcbiAgICB3aWR0aDogMzAuMTEzODklOyB9XG4gICAgLnVzYS13aWR0aC1vbmUtdHdlbGZ0aDpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAgIC51c2Etd2lkdGgtb25lLXR3ZWxmdGg6bnRoLWNoaWxkKDNuKSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgLnVzYS13aWR0aC1maXZlLXR3ZWxmdGhzIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tcmlnaHQ6IDQuODI5MTYlO1xuICAgIHdpZHRoOiAzMC4xMTM4OSU7IH1cbiAgICAudXNhLXdpZHRoLWZpdmUtdHdlbGZ0aHM6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgLnVzYS13aWR0aC1zZXZlbi10d2VsZnRocyB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLXJpZ2h0OiA0LjgyOTE2JTtcbiAgICB3aWR0aDogNjUuMDU2OTUlOyB9XG4gICAgLnVzYS13aWR0aC1zZXZlbi10d2VsZnRoczpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfSB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkge1xuICAudXNhLXdpZHRoLW9uZS13aG9sZSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLXJpZ2h0OiAyLjM1NzY1JTtcbiAgICB3aWR0aDogMTAwJTsgfVxuICAgIC51c2Etd2lkdGgtb25lLXdob2xlOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gIC51c2Etd2lkdGgtb25lLWhhbGYge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1yaWdodDogMi4zNTc2NSU7XG4gICAgd2lkdGg6IDQ4LjgyMTE3JTsgfVxuICAgIC51c2Etd2lkdGgtb25lLWhhbGY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgLnVzYS13aWR0aC1vbmUtdGhpcmQge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1yaWdodDogMi4zNTc2NSU7XG4gICAgd2lkdGg6IDMxLjc2MTU3JTsgfVxuICAgIC51c2Etd2lkdGgtb25lLXRoaXJkOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gIC51c2Etd2lkdGgtdHdvLXRoaXJkcyB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLXJpZ2h0OiAyLjM1NzY1JTtcbiAgICB3aWR0aDogNjUuODgwNzglOyB9XG4gICAgLnVzYS13aWR0aC10d28tdGhpcmRzOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gIC51c2Etd2lkdGgtb25lLWZvdXJ0aCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLXJpZ2h0OiAyLjM1NzY1JTtcbiAgICB3aWR0aDogMjMuMjMxNzYlOyB9XG4gICAgLnVzYS13aWR0aC1vbmUtZm91cnRoOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgLnVzYS13aWR0aC1vbmUtZm91cnRoOm50aC1jaGlsZCgybikge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi1yaWdodDogMi4zNTc2NSU7XG4gICAgICB3aWR0aDogMjMuMjMxNzYlOyB9XG4gICAgICAudXNhLXdpZHRoLW9uZS1mb3VydGg6bnRoLWNoaWxkKDJuKTpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgLnVzYS13aWR0aC1vbmUtZm91cnRoOm50aC1jaGlsZCg0bikge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gIC51c2Etd2lkdGgtdGhyZWUtZm91cnRocyB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLXJpZ2h0OiAyLjM1NzY1JTtcbiAgICB3aWR0aDogNzQuNDEwNTklOyB9XG4gICAgLnVzYS13aWR0aC10aHJlZS1mb3VydGhzOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gIC51c2Etd2lkdGgtb25lLXNpeHRoIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tcmlnaHQ6IDIuMzU3NjUlO1xuICAgIHdpZHRoOiAxNC43MDE5NiU7IH1cbiAgICAudXNhLXdpZHRoLW9uZS1zaXh0aDpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAgIC51c2Etd2lkdGgtb25lLXNpeHRoOm50aC1jaGlsZCgzbikge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi1yaWdodDogMi4zNTc2NSU7XG4gICAgICB3aWR0aDogMTQuNzAxOTYlOyB9XG4gICAgICAudXNhLXdpZHRoLW9uZS1zaXh0aDpudGgtY2hpbGQoM24pOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAudXNhLXdpZHRoLW9uZS1zaXh0aDpudGgtY2hpbGQoNm4pIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAudXNhLXdpZHRoLWZpdmUtc2l4dGhzIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tcmlnaHQ6IDIuMzU3NjUlO1xuICAgIHdpZHRoOiA4Mi45NDAzOSU7IH1cbiAgICAudXNhLXdpZHRoLWZpdmUtc2l4dGhzOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gIC51c2Etd2lkdGgtb25lLXR3ZWxmdGgge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1yaWdodDogMi4zNTc2NSU7XG4gICAgd2lkdGg6IDYuMTcyMTUlOyB9XG4gICAgLnVzYS13aWR0aC1vbmUtdHdlbGZ0aDpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAgIC51c2Etd2lkdGgtb25lLXR3ZWxmdGg6bnRoLWNoaWxkKDNuKSB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAyLjM1NzY1JTtcbiAgICAgIHdpZHRoOiA2LjE3MjE1JTsgfVxuICAgICAgLnVzYS13aWR0aC1vbmUtdHdlbGZ0aDpudGgtY2hpbGQoM24pOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAudXNhLXdpZHRoLW9uZS10d2VsZnRoOm50aC1jaGlsZCgxMm4pIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAudXNhLXdpZHRoLWZpdmUtdHdlbGZ0aHMge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1yaWdodDogMi4zNTc2NSU7XG4gICAgd2lkdGg6IDQwLjI5MTM3JTsgfVxuICAgIC51c2Etd2lkdGgtZml2ZS10d2VsZnRoczpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAudXNhLXdpZHRoLXNldmVuLXR3ZWxmdGhzIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tcmlnaHQ6IDIuMzU3NjUlO1xuICAgIHdpZHRoOiA1Ny4zNTA5OCU7IH1cbiAgICAudXNhLXdpZHRoLXNldmVuLXR3ZWxmdGhzOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9IH1cblxuLnVzYS1lbmQtcm93IHtcbiAgbWFyZ2luLXJpZ2h0OiAwOyB9XG5cbi51c2Etb2Zmc2V0LW9uZS10d2VsZnRoIHtcbiAgbWFyZ2luLWxlZnQ6IDguNTI5OCU7IH1cblxuLnVzYS1vZmZzZXQtb25lLXNpeHRoIHtcbiAgbWFyZ2luLWxlZnQ6IDE3LjA1OTYxJTsgfVxuXG4udXNhLW9mZnNldC1vbmUtZm91cnRoIHtcbiAgbWFyZ2luLWxlZnQ6IDI1LjU4OTQxJTsgfVxuXG4udXNhLW9mZnNldC1vbmUtdGhpcmQge1xuICBtYXJnaW4tbGVmdDogMzQuMTE5MjIlOyB9XG5cbi51c2Etb2Zmc2V0LWZpdmUtdHdlbGZ0aHMge1xuICBtYXJnaW4tbGVmdDogNDIuNjQ5MDIlOyB9XG5cbi51c2Etb2Zmc2V0LW9uZS1oYWxmIHtcbiAgbWFyZ2luLWxlZnQ6IDUxLjE3ODgzJTsgfVxuXG4udXNhLW9mZnNldC1zZXZlbi10d2VsZnRocyB7XG4gIG1hcmdpbi1sZWZ0OiA1OS43MDg2MyU7IH1cblxuLnVzYS1vZmZzZXQtdHdvLXRoaXJkcyB7XG4gIG1hcmdpbi1sZWZ0OiA2OC4yMzg0MyU7IH1cblxuLnVzYS1vZmZzZXQtdGhyZWUtZm91cnRocyB7XG4gIG1hcmdpbi1sZWZ0OiA3Ni43NjgyNCU7IH1cblxuLnVzYS1vZmZzZXQtZml2ZS1zaXh0aHMge1xuICBtYXJnaW4tbGVmdDogODUuMjk4MDQlOyB9XG5cbi51c2Etb2Zmc2V0LWVsZXZlbi10d2VsZnRocyB7XG4gIG1hcmdpbi1sZWZ0OiA5My44Mjc4NSU7IH1cblxuLnVzYS1zci1vbmx5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtOTk5ZW07IH1cblxuaHRtbCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cblxuKixcbio6OmJlZm9yZSxcbio6OmFmdGVyIHtcbiAgYm94LXNpemluZzogaW5oZXJpdDsgfVxuXG5ib2R5IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgb3ZlcmZsb3cteDogaGlkZGVuOyB9XG5cbi5sdC1pZTkgKiB7XG4gIGZpbHRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqLyB9XG5cbltoaWRkZW5dIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqLyB9XG5cbio6Zm9jdXMsXG4udXNhLWZvY3VzIHtcbiAgb3V0bGluZTogMnB4IGRvdHRlZCAjYWViMGI1O1xuICBvdXRsaW5lLW9mZnNldDogM3B4OyB9XG5cbi8qIHN0eWxlbGludC1kaXNhYmxlIHNlbGVjdG9yLW5vLXF1YWxpZnlpbmctdHlwZSAqL1xuLnVzYS1idXR0b24sXG4udXNhLWJ1dHRvbi1wcmltYXJ5LFxuLnVzYS1idXR0b246dmlzaXRlZCxcbi51c2EtYnV0dG9uLXByaW1hcnk6dmlzaXRlZCB7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICBtYXJnaW4tdG9wOiAwLjVlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjVlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDcxYmM7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiBUcmVidWNoZXQsIFRhaG9tYSwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxLjA2MjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBwYWRkaW5nOiAxcmVtIDJyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB3aWR0aDogMTAwJTsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0ODFweCkge1xuICAgIC51c2EtYnV0dG9uLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnksXG4gICAgLnVzYS1idXR0b246dmlzaXRlZCxcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQge1xuICAgICAgd2lkdGg6IGF1dG87IH0gfVxuICAudXNhLWJ1dHRvbjpob3ZlciwgLnVzYS1idXR0b24udXNhLWJ1dHRvbi1ob3ZlcixcbiAgLnVzYS1idXR0b24tcHJpbWFyeTpob3ZlcixcbiAgLnVzYS1idXR0b24tcHJpbWFyeS51c2EtYnV0dG9uLWhvdmVyLFxuICAudXNhLWJ1dHRvbjp2aXNpdGVkOmhvdmVyLFxuICAudXNhLWJ1dHRvbjp2aXNpdGVkLnVzYS1idXR0b24taG92ZXIsXG4gIC51c2EtYnV0dG9uLXByaW1hcnk6dmlzaXRlZDpob3ZlcixcbiAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24taG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMyMDU0OTM7XG4gICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgLnVzYS1idXR0b246YWN0aXZlLCAudXNhLWJ1dHRvbi51c2EtYnV0dG9uLWFjdGl2ZSxcbiAgLnVzYS1idXR0b24tcHJpbWFyeTphY3RpdmUsXG4gIC51c2EtYnV0dG9uLXByaW1hcnkudXNhLWJ1dHRvbi1hY3RpdmUsXG4gIC51c2EtYnV0dG9uOnZpc2l0ZWQ6YWN0aXZlLFxuICAudXNhLWJ1dHRvbjp2aXNpdGVkLnVzYS1idXR0b24tYWN0aXZlLFxuICAudXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQ6YWN0aXZlLFxuICAudXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQudXNhLWJ1dHRvbi1hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMxMTJlNTE7IH1cbiAgLnVzYS1idXR0b24udXNhLWJ1dHRvbi1wcmltYXJ5LWFsdCxcbiAgLnVzYS1idXR0b24tcHJpbWFyeS51c2EtYnV0dG9uLXByaW1hcnktYWx0LFxuICAudXNhLWJ1dHRvbjp2aXNpdGVkLnVzYS1idXR0b24tcHJpbWFyeS1hbHQsXG4gIC51c2EtYnV0dG9uLXByaW1hcnk6dmlzaXRlZC51c2EtYnV0dG9uLXByaW1hcnktYWx0IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDJiZmU3O1xuICAgIGNvbG9yOiAjMjEyMTIxOyB9XG4gICAgLnVzYS1idXR0b24udXNhLWJ1dHRvbi1wcmltYXJ5LWFsdDpob3ZlciwgLnVzYS1idXR0b24udXNhLWJ1dHRvbi1wcmltYXJ5LWFsdC51c2EtYnV0dG9uLWhvdmVyLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnkudXNhLWJ1dHRvbi1wcmltYXJ5LWFsdDpob3ZlcixcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5LnVzYS1idXR0b24tcHJpbWFyeS1hbHQudXNhLWJ1dHRvbi1ob3ZlcixcbiAgICAudXNhLWJ1dHRvbjp2aXNpdGVkLnVzYS1idXR0b24tcHJpbWFyeS1hbHQ6aG92ZXIsXG4gICAgLnVzYS1idXR0b246dmlzaXRlZC51c2EtYnV0dG9uLXByaW1hcnktYWx0LnVzYS1idXR0b24taG92ZXIsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tcHJpbWFyeS1hbHQ6aG92ZXIsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tcHJpbWFyeS1hbHQudXNhLWJ1dHRvbi1ob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBhNmQyOyB9XG4gICAgLnVzYS1idXR0b24udXNhLWJ1dHRvbi1wcmltYXJ5LWFsdDphY3RpdmUsIC51c2EtYnV0dG9uLnVzYS1idXR0b24tcHJpbWFyeS1hbHQudXNhLWJ1dHRvbi1hY3RpdmUsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeS51c2EtYnV0dG9uLXByaW1hcnktYWx0OmFjdGl2ZSxcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5LnVzYS1idXR0b24tcHJpbWFyeS1hbHQudXNhLWJ1dHRvbi1hY3RpdmUsXG4gICAgLnVzYS1idXR0b246dmlzaXRlZC51c2EtYnV0dG9uLXByaW1hcnktYWx0OmFjdGl2ZSxcbiAgICAudXNhLWJ1dHRvbjp2aXNpdGVkLnVzYS1idXR0b24tcHJpbWFyeS1hbHQudXNhLWJ1dHRvbi1hY3RpdmUsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tcHJpbWFyeS1hbHQ6YWN0aXZlLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnk6dmlzaXRlZC51c2EtYnV0dG9uLXByaW1hcnktYWx0LnVzYS1idXR0b24tYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwNDZiOTk7XG4gICAgICBjb2xvcjogI2ZmZmZmZjsgfVxuICAudXNhLWJ1dHRvbi51c2EtYnV0dG9uLXNlY29uZGFyeSxcbiAgLnVzYS1idXR0b24tcHJpbWFyeS51c2EtYnV0dG9uLXNlY29uZGFyeSxcbiAgLnVzYS1idXR0b246dmlzaXRlZC51c2EtYnV0dG9uLXNlY29uZGFyeSxcbiAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tc2Vjb25kYXJ5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCAjMDA3MWJjO1xuICAgIGNvbG9yOiAjMDA3MWJjOyB9XG4gICAgLnVzYS1idXR0b24udXNhLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsIC51c2EtYnV0dG9uLnVzYS1idXR0b24tc2Vjb25kYXJ5LnVzYS1idXR0b24taG92ZXIsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeS51c2EtYnV0dG9uLXNlY29uZGFyeTpob3ZlcixcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5LnVzYS1idXR0b24tc2Vjb25kYXJ5LnVzYS1idXR0b24taG92ZXIsXG4gICAgLnVzYS1idXR0b246dmlzaXRlZC51c2EtYnV0dG9uLXNlY29uZGFyeTpob3ZlcixcbiAgICAudXNhLWJ1dHRvbjp2aXNpdGVkLnVzYS1idXR0b24tc2Vjb25kYXJ5LnVzYS1idXR0b24taG92ZXIsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tc2Vjb25kYXJ5OmhvdmVyLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnk6dmlzaXRlZC51c2EtYnV0dG9uLXNlY29uZGFyeS51c2EtYnV0dG9uLWhvdmVyIHtcbiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCAjMjA1NDkzO1xuICAgICAgY29sb3I6ICMyMDU0OTM7IH1cbiAgICAudXNhLWJ1dHRvbi51c2EtYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsIC51c2EtYnV0dG9uLnVzYS1idXR0b24tc2Vjb25kYXJ5LnVzYS1idXR0b24tYWN0aXZlLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnkudXNhLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnkudXNhLWJ1dHRvbi1zZWNvbmRhcnkudXNhLWJ1dHRvbi1hY3RpdmUsXG4gICAgLnVzYS1idXR0b246dmlzaXRlZC51c2EtYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsXG4gICAgLnVzYS1idXR0b246dmlzaXRlZC51c2EtYnV0dG9uLXNlY29uZGFyeS51c2EtYnV0dG9uLWFjdGl2ZSxcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQudXNhLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnk6dmlzaXRlZC51c2EtYnV0dG9uLXNlY29uZGFyeS51c2EtYnV0dG9uLWFjdGl2ZSB7XG4gICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggIzExMmU1MTtcbiAgICAgIGNvbG9yOiAjMTEyZTUxOyB9XG4gIC51c2EtYnV0dG9uLnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2UsIC51c2EtYnV0dG9uLnVzYS1idXR0b24tb3V0bGluZS1pbnZlcnNlLFxuICAudXNhLWJ1dHRvbi1wcmltYXJ5LnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2UsXG4gIC51c2EtYnV0dG9uLXByaW1hcnkudXNhLWJ1dHRvbi1vdXRsaW5lLWludmVyc2UsXG4gIC51c2EtYnV0dG9uOnZpc2l0ZWQudXNhLWJ1dHRvbi1zZWNvbmRhcnktaW52ZXJzZSxcbiAgLnVzYS1idXR0b246dmlzaXRlZC51c2EtYnV0dG9uLW91dGxpbmUtaW52ZXJzZSxcbiAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2UsXG4gIC51c2EtYnV0dG9uLXByaW1hcnk6dmlzaXRlZC51c2EtYnV0dG9uLW91dGxpbmUtaW52ZXJzZSB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4ICNmZmZmZmY7XG4gICAgY29sb3I6ICNmZmZmZmY7IH1cbiAgICAudXNhLWJ1dHRvbi51c2EtYnV0dG9uLXNlY29uZGFyeS1pbnZlcnNlOmhvdmVyLCAudXNhLWJ1dHRvbi51c2EtYnV0dG9uLXNlY29uZGFyeS1pbnZlcnNlLnVzYS1idXR0b24taG92ZXIsIC51c2EtYnV0dG9uLnVzYS1idXR0b24tb3V0bGluZS1pbnZlcnNlOmhvdmVyLCAudXNhLWJ1dHRvbi51c2EtYnV0dG9uLW91dGxpbmUtaW52ZXJzZS51c2EtYnV0dG9uLWhvdmVyLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnkudXNhLWJ1dHRvbi1zZWNvbmRhcnktaW52ZXJzZTpob3ZlcixcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5LnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2UudXNhLWJ1dHRvbi1ob3ZlcixcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5LnVzYS1idXR0b24tb3V0bGluZS1pbnZlcnNlOmhvdmVyLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnkudXNhLWJ1dHRvbi1vdXRsaW5lLWludmVyc2UudXNhLWJ1dHRvbi1ob3ZlcixcbiAgICAudXNhLWJ1dHRvbjp2aXNpdGVkLnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2U6aG92ZXIsXG4gICAgLnVzYS1idXR0b246dmlzaXRlZC51c2EtYnV0dG9uLXNlY29uZGFyeS1pbnZlcnNlLnVzYS1idXR0b24taG92ZXIsXG4gICAgLnVzYS1idXR0b246dmlzaXRlZC51c2EtYnV0dG9uLW91dGxpbmUtaW52ZXJzZTpob3ZlcixcbiAgICAudXNhLWJ1dHRvbjp2aXNpdGVkLnVzYS1idXR0b24tb3V0bGluZS1pbnZlcnNlLnVzYS1idXR0b24taG92ZXIsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2U6aG92ZXIsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2UudXNhLWJ1dHRvbi1ob3ZlcixcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQudXNhLWJ1dHRvbi1vdXRsaW5lLWludmVyc2U6aG92ZXIsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tb3V0bGluZS1pbnZlcnNlLnVzYS1idXR0b24taG92ZXIge1xuICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4ICNkNmQ3ZDk7XG4gICAgICBjb2xvcjogI2Q2ZDdkOTsgfVxuICAgIC51c2EtYnV0dG9uLnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2U6YWN0aXZlLCAudXNhLWJ1dHRvbi51c2EtYnV0dG9uLXNlY29uZGFyeS1pbnZlcnNlLnVzYS1idXR0b24tYWN0aXZlLCAudXNhLWJ1dHRvbi51c2EtYnV0dG9uLW91dGxpbmUtaW52ZXJzZTphY3RpdmUsIC51c2EtYnV0dG9uLnVzYS1idXR0b24tb3V0bGluZS1pbnZlcnNlLnVzYS1idXR0b24tYWN0aXZlLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnkudXNhLWJ1dHRvbi1zZWNvbmRhcnktaW52ZXJzZTphY3RpdmUsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeS51c2EtYnV0dG9uLXNlY29uZGFyeS1pbnZlcnNlLnVzYS1idXR0b24tYWN0aXZlLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnkudXNhLWJ1dHRvbi1vdXRsaW5lLWludmVyc2U6YWN0aXZlLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnkudXNhLWJ1dHRvbi1vdXRsaW5lLWludmVyc2UudXNhLWJ1dHRvbi1hY3RpdmUsXG4gICAgLnVzYS1idXR0b246dmlzaXRlZC51c2EtYnV0dG9uLXNlY29uZGFyeS1pbnZlcnNlOmFjdGl2ZSxcbiAgICAudXNhLWJ1dHRvbjp2aXNpdGVkLnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2UudXNhLWJ1dHRvbi1hY3RpdmUsXG4gICAgLnVzYS1idXR0b246dmlzaXRlZC51c2EtYnV0dG9uLW91dGxpbmUtaW52ZXJzZTphY3RpdmUsXG4gICAgLnVzYS1idXR0b246dmlzaXRlZC51c2EtYnV0dG9uLW91dGxpbmUtaW52ZXJzZS51c2EtYnV0dG9uLWFjdGl2ZSxcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQudXNhLWJ1dHRvbi1zZWNvbmRhcnktaW52ZXJzZTphY3RpdmUsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2UudXNhLWJ1dHRvbi1hY3RpdmUsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tb3V0bGluZS1pbnZlcnNlOmFjdGl2ZSxcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQudXNhLWJ1dHRvbi1vdXRsaW5lLWludmVyc2UudXNhLWJ1dHRvbi1hY3RpdmUge1xuICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4ICNhZWIwYjU7XG4gICAgICBjb2xvcjogI2Q2ZDdkOTsgfVxuICAudXNhLWJ1dHRvbi51c2EtYnV0dG9uLWdyYXksXG4gIC51c2EtYnV0dG9uLXByaW1hcnkudXNhLWJ1dHRvbi1ncmF5LFxuICAudXNhLWJ1dHRvbjp2aXNpdGVkLnVzYS1idXR0b24tZ3JheSxcbiAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tZ3JheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzViNjE2YjsgfVxuICAgIC51c2EtYnV0dG9uLnVzYS1idXR0b24tZ3JheTpob3ZlciwgLnVzYS1idXR0b24udXNhLWJ1dHRvbi1ncmF5LnVzYS1idXR0b24taG92ZXIsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeS51c2EtYnV0dG9uLWdyYXk6aG92ZXIsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeS51c2EtYnV0dG9uLWdyYXkudXNhLWJ1dHRvbi1ob3ZlcixcbiAgICAudXNhLWJ1dHRvbjp2aXNpdGVkLnVzYS1idXR0b24tZ3JheTpob3ZlcixcbiAgICAudXNhLWJ1dHRvbjp2aXNpdGVkLnVzYS1idXR0b24tZ3JheS51c2EtYnV0dG9uLWhvdmVyLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnk6dmlzaXRlZC51c2EtYnV0dG9uLWdyYXk6aG92ZXIsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tZ3JheS51c2EtYnV0dG9uLWhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMjNhNDU7IH1cbiAgICAudXNhLWJ1dHRvbi51c2EtYnV0dG9uLWdyYXk6YWN0aXZlLCAudXNhLWJ1dHRvbi51c2EtYnV0dG9uLWdyYXkudXNhLWJ1dHRvbi1hY3RpdmUsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeS51c2EtYnV0dG9uLWdyYXk6YWN0aXZlLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnkudXNhLWJ1dHRvbi1ncmF5LnVzYS1idXR0b24tYWN0aXZlLFxuICAgIC51c2EtYnV0dG9uOnZpc2l0ZWQudXNhLWJ1dHRvbi1ncmF5OmFjdGl2ZSxcbiAgICAudXNhLWJ1dHRvbjp2aXNpdGVkLnVzYS1idXR0b24tZ3JheS51c2EtYnV0dG9uLWFjdGl2ZSxcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQudXNhLWJ1dHRvbi1ncmF5OmFjdGl2ZSxcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQudXNhLWJ1dHRvbi1ncmF5LnVzYS1idXR0b24tYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTIxMjE7IH1cbiAgLnVzYS1idXR0b24udXNhLWJ1dHRvbi1yZWQsXG4gIC51c2EtYnV0dG9uLXByaW1hcnkudXNhLWJ1dHRvbi1yZWQsXG4gIC51c2EtYnV0dG9uOnZpc2l0ZWQudXNhLWJ1dHRvbi1yZWQsXG4gIC51c2EtYnV0dG9uLXByaW1hcnk6dmlzaXRlZC51c2EtYnV0dG9uLXJlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2UzMWMzZDsgfVxuICAgIC51c2EtYnV0dG9uLnVzYS1idXR0b24tcmVkOmhvdmVyLCAudXNhLWJ1dHRvbi51c2EtYnV0dG9uLXJlZC51c2EtYnV0dG9uLWhvdmVyLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnkudXNhLWJ1dHRvbi1yZWQ6aG92ZXIsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeS51c2EtYnV0dG9uLXJlZC51c2EtYnV0dG9uLWhvdmVyLFxuICAgIC51c2EtYnV0dG9uOnZpc2l0ZWQudXNhLWJ1dHRvbi1yZWQ6aG92ZXIsXG4gICAgLnVzYS1idXR0b246dmlzaXRlZC51c2EtYnV0dG9uLXJlZC51c2EtYnV0dG9uLWhvdmVyLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnk6dmlzaXRlZC51c2EtYnV0dG9uLXJlZDpob3ZlcixcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQudXNhLWJ1dHRvbi1yZWQudXNhLWJ1dHRvbi1ob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2QyMDI2OyB9XG4gICAgLnVzYS1idXR0b24udXNhLWJ1dHRvbi1yZWQ6YWN0aXZlLCAudXNhLWJ1dHRvbi51c2EtYnV0dG9uLXJlZC51c2EtYnV0dG9uLWFjdGl2ZSxcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5LnVzYS1idXR0b24tcmVkOmFjdGl2ZSxcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5LnVzYS1idXR0b24tcmVkLnVzYS1idXR0b24tYWN0aXZlLFxuICAgIC51c2EtYnV0dG9uOnZpc2l0ZWQudXNhLWJ1dHRvbi1yZWQ6YWN0aXZlLFxuICAgIC51c2EtYnV0dG9uOnZpc2l0ZWQudXNhLWJ1dHRvbi1yZWQudXNhLWJ1dHRvbi1hY3RpdmUsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tcmVkOmFjdGl2ZSxcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQudXNhLWJ1dHRvbi1yZWQudXNhLWJ1dHRvbi1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzk4MWIxZTsgfVxuICAudXNhLWJ1dHRvbi51c2EtYnV0dG9uLWJpZyxcbiAgLnVzYS1idXR0b24tcHJpbWFyeS51c2EtYnV0dG9uLWJpZyxcbiAgLnVzYS1idXR0b246dmlzaXRlZC51c2EtYnV0dG9uLWJpZyxcbiAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkLnVzYS1idXR0b24tYmlnIHtcbiAgICBmb250LXNpemU6IDEuOXJlbTtcbiAgICBwYWRkaW5nOiAxLjVyZW0gM3JlbTsgfVxuICAudXNhLWJ1dHRvbjpkaXNhYmxlZCxcbiAgLnVzYS1idXR0b24tcHJpbWFyeTpkaXNhYmxlZCxcbiAgLnVzYS1idXR0b246dmlzaXRlZDpkaXNhYmxlZCxcbiAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkOmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDZkN2Q5O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyB9XG4gICAgLnVzYS1idXR0b246ZGlzYWJsZWQ6aG92ZXIsIC51c2EtYnV0dG9uOmRpc2FibGVkLnVzYS1idXR0b24taG92ZXIsIC51c2EtYnV0dG9uOmRpc2FibGVkOmFjdGl2ZSwgLnVzYS1idXR0b246ZGlzYWJsZWQudXNhLWJ1dHRvbi1hY3RpdmUsIC51c2EtYnV0dG9uOmRpc2FibGVkOmZvY3VzLCAudXNhLWJ1dHRvbjpkaXNhYmxlZC51c2EtZm9jdXMsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTpkaXNhYmxlZDpob3ZlcixcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5OmRpc2FibGVkLnVzYS1idXR0b24taG92ZXIsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTpkaXNhYmxlZDphY3RpdmUsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTpkaXNhYmxlZC51c2EtYnV0dG9uLWFjdGl2ZSxcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5OmRpc2FibGVkOmZvY3VzLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnk6ZGlzYWJsZWQudXNhLWZvY3VzLFxuICAgIC51c2EtYnV0dG9uOnZpc2l0ZWQ6ZGlzYWJsZWQ6aG92ZXIsXG4gICAgLnVzYS1idXR0b246dmlzaXRlZDpkaXNhYmxlZC51c2EtYnV0dG9uLWhvdmVyLFxuICAgIC51c2EtYnV0dG9uOnZpc2l0ZWQ6ZGlzYWJsZWQ6YWN0aXZlLFxuICAgIC51c2EtYnV0dG9uOnZpc2l0ZWQ6ZGlzYWJsZWQudXNhLWJ1dHRvbi1hY3RpdmUsXG4gICAgLnVzYS1idXR0b246dmlzaXRlZDpkaXNhYmxlZDpmb2N1cyxcbiAgICAudXNhLWJ1dHRvbjp2aXNpdGVkOmRpc2FibGVkLnVzYS1mb2N1cyxcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQ6ZGlzYWJsZWQ6aG92ZXIsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkOmRpc2FibGVkLnVzYS1idXR0b24taG92ZXIsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkOmRpc2FibGVkOmFjdGl2ZSxcbiAgICAudXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQ6ZGlzYWJsZWQudXNhLWJ1dHRvbi1hY3RpdmUsXG4gICAgLnVzYS1idXR0b24tcHJpbWFyeTp2aXNpdGVkOmRpc2FibGVkOmZvY3VzLFxuICAgIC51c2EtYnV0dG9uLXByaW1hcnk6dmlzaXRlZDpkaXNhYmxlZC51c2EtZm9jdXMge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDdkOTtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7IH1cblxuLyogc3R5bGVsaW50LWRpc2FibGUgKi9cbi51c2EtYnV0dG9uLWRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDdkOTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IH1cbiAgLnVzYS1idXR0b24tZGlzYWJsZWQ6aG92ZXIsIC51c2EtYnV0dG9uLWRpc2FibGVkLnVzYS1idXR0b24taG92ZXIsIC51c2EtYnV0dG9uLWRpc2FibGVkOmFjdGl2ZSwgLnVzYS1idXR0b24tZGlzYWJsZWQudXNhLWJ1dHRvbi1hY3RpdmUsIC51c2EtYnV0dG9uLWRpc2FibGVkOmZvY3VzLCAudXNhLWJ1dHRvbi1kaXNhYmxlZC51c2EtZm9jdXMge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNkNmQ3ZDk7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7IH1cblxuLnVzYS1idXR0b24tc2Vjb25kYXJ5LWRpc2FibGVkLFxuLnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2UtZGlzYWJsZWQsXG4udXNhLWJ1dHRvbi1zZWNvbmRhcnk6ZGlzYWJsZWQsXG4udXNhLWJ1dHRvbi1zZWNvbmRhcnktaW52ZXJzZTpkaXNhYmxlZCxcbi51c2EtYnV0dG9uLW91dGxpbmUtaW52ZXJzZTpkaXNhYmxlZCB7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCAjZDZkN2Q5O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgY29sb3I6ICNkNmQ3ZDk7IH1cbiAgLnVzYS1idXR0b24tc2Vjb25kYXJ5LWRpc2FibGVkOmhvdmVyLCAudXNhLWJ1dHRvbi1zZWNvbmRhcnktZGlzYWJsZWQudXNhLWJ1dHRvbi1ob3ZlciwgLnVzYS1idXR0b24tc2Vjb25kYXJ5LWRpc2FibGVkOmFjdGl2ZSwgLnVzYS1idXR0b24tc2Vjb25kYXJ5LWRpc2FibGVkLnVzYS1idXR0b24tYWN0aXZlLCAudXNhLWJ1dHRvbi1zZWNvbmRhcnktZGlzYWJsZWQ6Zm9jdXMsIC51c2EtYnV0dG9uLXNlY29uZGFyeS1kaXNhYmxlZC51c2EtZm9jdXMsXG4gIC51c2EtYnV0dG9uLXNlY29uZGFyeS1pbnZlcnNlLWRpc2FibGVkOmhvdmVyLFxuICAudXNhLWJ1dHRvbi1zZWNvbmRhcnktaW52ZXJzZS1kaXNhYmxlZC51c2EtYnV0dG9uLWhvdmVyLFxuICAudXNhLWJ1dHRvbi1zZWNvbmRhcnktaW52ZXJzZS1kaXNhYmxlZDphY3RpdmUsXG4gIC51c2EtYnV0dG9uLXNlY29uZGFyeS1pbnZlcnNlLWRpc2FibGVkLnVzYS1idXR0b24tYWN0aXZlLFxuICAudXNhLWJ1dHRvbi1zZWNvbmRhcnktaW52ZXJzZS1kaXNhYmxlZDpmb2N1cyxcbiAgLnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2UtZGlzYWJsZWQudXNhLWZvY3VzLFxuICAudXNhLWJ1dHRvbi1zZWNvbmRhcnk6ZGlzYWJsZWQ6aG92ZXIsXG4gIC51c2EtYnV0dG9uLXNlY29uZGFyeTpkaXNhYmxlZC51c2EtYnV0dG9uLWhvdmVyLFxuICAudXNhLWJ1dHRvbi1zZWNvbmRhcnk6ZGlzYWJsZWQ6YWN0aXZlLFxuICAudXNhLWJ1dHRvbi1zZWNvbmRhcnk6ZGlzYWJsZWQudXNhLWJ1dHRvbi1hY3RpdmUsXG4gIC51c2EtYnV0dG9uLXNlY29uZGFyeTpkaXNhYmxlZDpmb2N1cyxcbiAgLnVzYS1idXR0b24tc2Vjb25kYXJ5OmRpc2FibGVkLnVzYS1mb2N1cyxcbiAgLnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2U6ZGlzYWJsZWQ6aG92ZXIsXG4gIC51c2EtYnV0dG9uLXNlY29uZGFyeS1pbnZlcnNlOmRpc2FibGVkLnVzYS1idXR0b24taG92ZXIsXG4gIC51c2EtYnV0dG9uLXNlY29uZGFyeS1pbnZlcnNlOmRpc2FibGVkOmFjdGl2ZSxcbiAgLnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2U6ZGlzYWJsZWQudXNhLWJ1dHRvbi1hY3RpdmUsXG4gIC51c2EtYnV0dG9uLXNlY29uZGFyeS1pbnZlcnNlOmRpc2FibGVkOmZvY3VzLFxuICAudXNhLWJ1dHRvbi1zZWNvbmRhcnktaW52ZXJzZTpkaXNhYmxlZC51c2EtZm9jdXMsXG4gIC51c2EtYnV0dG9uLW91dGxpbmUtaW52ZXJzZTpkaXNhYmxlZDpob3ZlcixcbiAgLnVzYS1idXR0b24tb3V0bGluZS1pbnZlcnNlOmRpc2FibGVkLnVzYS1idXR0b24taG92ZXIsXG4gIC51c2EtYnV0dG9uLW91dGxpbmUtaW52ZXJzZTpkaXNhYmxlZDphY3RpdmUsXG4gIC51c2EtYnV0dG9uLW91dGxpbmUtaW52ZXJzZTpkaXNhYmxlZC51c2EtYnV0dG9uLWFjdGl2ZSxcbiAgLnVzYS1idXR0b24tb3V0bGluZS1pbnZlcnNlOmRpc2FibGVkOmZvY3VzLFxuICAudXNhLWJ1dHRvbi1vdXRsaW5lLWludmVyc2U6ZGlzYWJsZWQudXNhLWZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgIGJvcmRlcjogMDsgfVxuXG5odG1sIC51c2EtYnV0dG9uLXNlY29uZGFyeS1kaXNhYmxlZCxcbi51c2EtYnV0dG9uLXNlY29uZGFyeTpkaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7IH1cblxuaHRtbCAudXNhLWJ1dHRvbi1zZWNvbmRhcnktaW52ZXJzZS1kaXNhYmxlZCxcbi51c2EtYnV0dG9uLXNlY29uZGFyeS1pbnZlcnNlOmRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiAjNWI2MTZiO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggIzViNjE2YjsgfVxuXG4udXNhLWJ1dHRvbi11bnN0eWxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYXV0bzsgfVxuICAudXNhLWJ1dHRvbi11bnN0eWxlZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cblxuLypcbkBpbXBvcnQgJ2VsZW1lbnRzL2VtYmVkJztcbkBpbXBvcnQgJ2VsZW1lbnRzL2ZpZ3VyZSc7XG5AaW1wb3J0ICdlbGVtZW50cy9pbnB1dHMnO1xuQGltcG9ydCAnZWxlbWVudHMvbGFiZWxzJztcbkBpbXBvcnQgJ2VsZW1lbnRzL2xpc3QnO1xuQGltcG9ydCAnZWxlbWVudHMvdGFibGUnO1xuQGltcG9ydCAnZWxlbWVudHMvdHlwb2dyYXBoeSc7XG5cbi8vIENvbXBvbmVudHMgLS0tLS0tLS0tLS0tLS0gLy9cbiovXG4udXNhLWFjY29yZGlvbixcbi51c2EtYWNjb3JkaW9uLWJvcmRlcmVkIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIGNvbG9yOiAjMjEyMTIxO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAxMDAlOyB9XG4gIC51c2EtYWNjb3JkaW9uID4gbGksXG4gIC51c2EtYWNjb3JkaW9uLWJvcmRlcmVkID4gbGkge1xuICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgLnVzYS1hY2NvcmRpb24gPiB1bCBsaSB1bCxcbiAgLnVzYS1hY2NvcmRpb24tYm9yZGVyZWQgPiB1bCBsaSB1bCB7XG4gICAgbGlzdC1zdHlsZTogZGlzYzsgfVxuICAgIC51c2EtYWNjb3JkaW9uID4gdWwgbGkgdWwgPiBsaSA+IHVsLFxuICAgIC51c2EtYWNjb3JkaW9uLWJvcmRlcmVkID4gdWwgbGkgdWwgPiBsaSA+IHVsIHtcbiAgICAgIGxpc3Qtc3R5bGU6IGNpcmNsZTsgfVxuICAgICAgLnVzYS1hY2NvcmRpb24gPiB1bCBsaSB1bCA+IGxpID4gdWwgPiBsaSA+IHVsLFxuICAgICAgLnVzYS1hY2NvcmRpb24tYm9yZGVyZWQgPiB1bCBsaSB1bCA+IGxpID4gdWwgPiBsaSA+IHVsIHtcbiAgICAgICAgbGlzdC1zdHlsZTogc3F1YXJlOyB9XG4gIC51c2EtYWNjb3JkaW9uICsgLnVzYS1hY2NvcmRpb24sXG4gIC51c2EtYWNjb3JkaW9uICsgLnVzYS1hY2NvcmRpb24tYm9yZGVyZWQsXG4gIC51c2EtYWNjb3JkaW9uLWJvcmRlcmVkICsgLnVzYS1hY2NvcmRpb24sXG4gIC51c2EtYWNjb3JkaW9uLWJvcmRlcmVkICsgLnVzYS1hY2NvcmRpb24tYm9yZGVyZWQge1xuICAgIG1hcmdpbi10b3A6IDFyZW07IH1cbiAgLnVzYS1hY2NvcmRpb24gPiB1bCxcbiAgLnVzYS1hY2NvcmRpb24tYm9yZGVyZWQgPiB1bCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgY29sb3I6ICMyMTIxMjE7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgICAudXNhLWFjY29yZGlvbiA+IHVsID4gbGksXG4gICAgLnVzYS1hY2NvcmRpb24tYm9yZGVyZWQgPiB1bCA+IGxpIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgICAudXNhLWFjY29yZGlvbiA+IHVsID4gbGksXG4gICAgLnVzYS1hY2NvcmRpb24tYm9yZGVyZWQgPiB1bCA+IGxpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7XG4gICAgICBmb250LWZhbWlseTogVHJlYnVjaGV0LCBUYWhvbWEsIHNhbnMtc2VyaWY7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAudXNhLWFjY29yZGlvbiA+IHVsIGJ1dHRvbixcbiAgICAudXNhLWFjY29yZGlvbi1ib3JkZXJlZCA+IHVsIGJ1dHRvbiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhdXRvO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjFmMTtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL2ltZy9taW51cy5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWcvbWludXMuc3ZnXCIpO1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgMnJlbSBjZW50ZXI7XG4gICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxLjVyZW07XG4gICAgICBjb2xvcjogIzIxMjEyMTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGZvbnQtZmFtaWx5OiBUcmVidWNoZXQsIFRhaG9tYSwgc2Fucy1zZXJpZjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nOiAxLjVyZW0gNS41cmVtIDEuNXJlbSAycmVtO1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAgIC51c2EtYWNjb3JkaW9uID4gdWwgYnV0dG9uOmhvdmVyLFxuICAgICAgLnVzYS1hY2NvcmRpb24tYm9yZGVyZWQgPiB1bCBidXR0b246aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuICAgICAgLnVzYS1hY2NvcmRpb24gPiB1bCBidXR0b246aG92ZXIsXG4gICAgICAudXNhLWFjY29yZGlvbi1ib3JkZXJlZCA+IHVsIGJ1dHRvbjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkNmQ3ZDk7XG4gICAgICAgIGNvbG9yOiAjMjEyMTIxOyB9XG4gICAgICAudXNhLWFjY29yZGlvbiA+IHVsIGJ1dHRvbiBoMSxcbiAgICAgIC51c2EtYWNjb3JkaW9uID4gdWwgYnV0dG9uIGgyLFxuICAgICAgLnVzYS1hY2NvcmRpb24gPiB1bCBidXR0b24gaDMsXG4gICAgICAudXNhLWFjY29yZGlvbiA+IHVsIGJ1dHRvbiBoNCxcbiAgICAgIC51c2EtYWNjb3JkaW9uID4gdWwgYnV0dG9uIGg1LFxuICAgICAgLnVzYS1hY2NvcmRpb24gPiB1bCBidXR0b24gaDYsXG4gICAgICAudXNhLWFjY29yZGlvbi1ib3JkZXJlZCA+IHVsIGJ1dHRvbiBoMSxcbiAgICAgIC51c2EtYWNjb3JkaW9uLWJvcmRlcmVkID4gdWwgYnV0dG9uIGgyLFxuICAgICAgLnVzYS1hY2NvcmRpb24tYm9yZGVyZWQgPiB1bCBidXR0b24gaDMsXG4gICAgICAudXNhLWFjY29yZGlvbi1ib3JkZXJlZCA+IHVsIGJ1dHRvbiBoNCxcbiAgICAgIC51c2EtYWNjb3JkaW9uLWJvcmRlcmVkID4gdWwgYnV0dG9uIGg1LFxuICAgICAgLnVzYS1hY2NvcmRpb24tYm9yZGVyZWQgPiB1bCBidXR0b24gaDYge1xuICAgICAgICBtYXJnaW46IDA7IH1cbiAgICAudXNhLWFjY29yZGlvbiA+IHVsIFthcmlhLWV4cGFuZGVkPWZhbHNlXSxcbiAgICAudXNhLWFjY29yZGlvbi1ib3JkZXJlZCA+IHVsIFthcmlhLWV4cGFuZGVkPWZhbHNlXSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWcvcGx1cy5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWcvcGx1cy5zdmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxLjVyZW07IH1cbiAgLnVzYS1hY2NvcmRpb24gPiBsaSxcbiAgLnVzYS1hY2NvcmRpb24tYm9yZGVyZWQgPiBsaSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjFmMTtcbiAgICBmb250LWZhbWlseTogVHJlYnVjaGV0LCBUYWhvbWEsIHNhbnMtc2VyaWY7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gICAgd2lkdGg6IDEwMCU7IH1cblxuLnVzYS1hY2NvcmRpb24tYm9yZGVyZWQgLnVzYS1hY2NvcmRpb24tY29udGVudCB7XG4gIGJvcmRlci1ib3R0b206IDNweCBzb2xpZCAjZjFmMWYxO1xuICBib3JkZXItbGVmdDogM3B4IHNvbGlkICNmMWYxZjE7XG4gIGJvcmRlci1yaWdodDogM3B4IHNvbGlkICNmMWYxZjE7IH1cblxuLnVzYS1hY2NvcmRpb24tY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBwYWRkaW5nOiAxLjVyZW0gMnJlbTsgfVxuICAudXNhLWFjY29yZGlvbi1jb250ZW50ID4gKjpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXRvcDogMDsgfVxuICAudXNhLWFjY29yZGlvbi1jb250ZW50ID4gKjpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gIC51c2EtYWNjb3JkaW9uLWNvbnRlbnQ6bm90KFthcmlhLWhpZGRlbl0pIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogLTk5OWVtOyB9XG4gIC51c2EtYWNjb3JkaW9uLWNvbnRlbnRbYXJpYS1oaWRkZW49dHJ1ZV0ge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cblxuLnVzYS1hY2NvcmRpb24tYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhdXRvO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmMWYxO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWcvbWludXMucG5nXCIpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWcvbWludXMuc3ZnXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAycmVtIGNlbnRlcjtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1zaXplOiAxLjVyZW07XG4gIGNvbG9yOiAjMjEyMTIxO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1mYW1pbHk6IFRyZWJ1Y2hldCwgVGFob21hLCBzYW5zLXNlcmlmO1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDEuNXJlbSA1LjVyZW0gMS41cmVtIDJyZW07XG4gIHdpZHRoOiAxMDAlOyB9XG4gIC51c2EtYWNjb3JkaW9uLWJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgLnVzYS1hY2NvcmRpb24tYnV0dG9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDZkN2Q5O1xuICAgIGNvbG9yOiAjMjEyMTIxOyB9XG4gIC51c2EtYWNjb3JkaW9uLWJ1dHRvbiBoMSxcbiAgLnVzYS1hY2NvcmRpb24tYnV0dG9uIGgyLFxuICAudXNhLWFjY29yZGlvbi1idXR0b24gaDMsXG4gIC51c2EtYWNjb3JkaW9uLWJ1dHRvbiBoNCxcbiAgLnVzYS1hY2NvcmRpb24tYnV0dG9uIGg1LFxuICAudXNhLWFjY29yZGlvbi1idXR0b24gaDYge1xuICAgIG1hcmdpbjogMDsgfVxuXG4udXNhLWFjY29yZGlvbi1idXR0b25bYXJpYS1leHBhbmRlZD1mYWxzZV0ge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWcvcGx1cy5wbmdcIik7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL2ltZy9wbHVzLnN2Z1wiKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1zaXplOiAxLjVyZW07IH1cblxuLypcbkBpbXBvcnQgJ2NvbXBvbmVudHMvYWxlcnRzJztcbiovXG4udXNhLWJhbm5lciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7XG4gIHBhZGRpbmctYm90dG9tOiAwLjQzNzVyZW07IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDgxcHgpIHtcbiAgICAudXNhLWJhbm5lciB7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwOyB9IH1cblxuLnVzYS1iYW5uZXItY29udGVudCB7XG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIHBhZGRpbmctYm90dG9tOiAzcHg7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBwYWRkaW5nLXRvcDogMS4yNXJlbTtcbiAgd2lkdGg6IDEwMCU7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogODAxcHgpIHtcbiAgICAudXNhLWJhbm5lci1jb250ZW50IHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxLjQzNzVyZW07XG4gICAgICBwYWRkaW5nLXRvcDogMi41cmVtOyB9IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogOTUxcHgpIHtcbiAgICAudXNhLWJhbm5lci1jb250ZW50IHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDEuODc1cmVtO1xuICAgICAgcGFkZGluZy1sZWZ0OiAxLjg3NXJlbTsgfSB9XG4gIC51c2EtYmFubmVyLWNvbnRlbnQgcDpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXRvcDogMC42MjVyZW07IH1cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA4MDFweCkge1xuICAgICAgLnVzYS1iYW5uZXItY29udGVudCBwOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMDsgfSB9XG5cbi51c2EtYmFubmVyLWlubmVyIHtcbiAgbWF4LXdpZHRoOiAxMjAwcHg7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgbWF4LXdpZHRoOiA5NjBweDsgfVxuICAudXNhLWJhbm5lci1pbm5lcjo6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogOTUxcHgpIHtcbiAgICAudXNhLWJhbm5lci1pbm5lciB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxLjg3NXJlbTtcbiAgICAgIHBhZGRpbmctbGVmdDogMS44NzVyZW07IH0gfVxuXG4udXNhLWJhbm5lci1oZWFkZXIge1xuICBwYWRkaW5nLXRvcDogMC4zNDM3NXJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMzQzNzVyZW07XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0ODFweCkge1xuICAgIC51c2EtYmFubmVyLWhlYWRlciB7XG4gICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwOyB9IH1cbiAgLnVzYS1iYW5uZXItaGVhZGVyIHAge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDgxcHgpIHtcbiAgICAgIC51c2EtYmFubmVyLWhlYWRlciBwIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfSB9XG4gIC51c2EtYmFubmVyLWhlYWRlciBpbWcge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbi1yaWdodDogMC42MjVyZW07XG4gICAgbWFyZ2luLXRvcDogMC42MjVyZW07XG4gICAgd2lkdGg6IDEuNXJlbTsgfVxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ4MXB4KSB7XG4gICAgICAudXNhLWJhbm5lci1oZWFkZXIgaW1nIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjQzNzVyZW07XG4gICAgICAgIHdpZHRoOiAxLjI1cmVtOyB9IH1cblxuLnVzYS1iYW5uZXItaGVhZGVyLWV4cGFuZGVkIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNhZWIwYjU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBtaW4taGVpZ2h0OiAzLjVyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDEuODc1cmVtOyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ4MXB4KSB7XG4gICAgLnVzYS1iYW5uZXItaGVhZGVyLWV4cGFuZGVkIHtcbiAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDsgfSB9XG4gIC51c2EtYmFubmVyLWhlYWRlci1leHBhbmRlZCA+IC51c2EtYmFubmVyLWlubmVyIHtcbiAgICBtYXJnaW4tbGVmdDogMDsgfVxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ4MXB4KSB7XG4gICAgICAudXNhLWJhbm5lci1oZWFkZXItZXhwYW5kZWQgPiAudXNhLWJhbm5lci1pbm5lciB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOyB9IH1cbiAgLnVzYS1iYW5uZXItaGVhZGVyLWV4cGFuZGVkIGltZyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxLjVyZW07IH1cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0ODFweCkge1xuICAgICAgLnVzYS1iYW5uZXItaGVhZGVyLWV4cGFuZGVkIGltZyB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMC40Mzc1cmVtOyB9IH1cbiAgLnVzYS1iYW5uZXItaGVhZGVyLWV4cGFuZGVkIHAge1xuICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG4gICAgdmVydGljYWwtYWxpZ246IHRvcDsgfVxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ4MXB4KSB7XG4gICAgICAudXNhLWJhbm5lci1oZWFkZXItZXhwYW5kZWQgcCB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0gfVxuXG4udXNhLWJhbm5lci1idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiAwO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBmb250LXdlaWdodDogNDAwO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGF1dG87XG4gIHBhZGRpbmctdG9wOiAwLjgxMjVyZW07XG4gIHBhZGRpbmctbGVmdDogM3JlbTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbi14OiByaWdodDtcbiAgY29sb3I6ICMwMDcxYmM7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGhlaWdodDogMi42ODc1cmVtO1xuICBsZWZ0OiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxMDAlOyB9XG4gIC51c2EtYmFubmVyLWJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDgxcHgpIHtcbiAgICAudXNhLWJhbm5lci1idXR0b24ge1xuICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1ibG9jay1uby1pZ25vcmVkLXByb3BlcnRpZXMgKi9cbiAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICAgIGhlaWdodDogaW5pdGlhbDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgd2lkdGg6IGluaXRpYWw7XG4gICAgICAvKiBzdHlsZWxpbnQtZW5hYmxlICovIH0gfVxuICAudXNhLWJhbm5lci1idXR0b246aG92ZXIge1xuICAgIGNvbG9yOiAjMjA1NDkzO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9XG4gIC51c2EtYmFubmVyLWJ1dHRvblthcmlhLWV4cGFuZGVkPWZhbHNlXSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgfVxuICAgIC51c2EtYmFubmVyLWJ1dHRvblthcmlhLWV4cGFuZGVkPWZhbHNlXTo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vaW1nL2FuZ2xlLWFycm93LWRvd24tcHJpbWFyeS5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWcvYW5nbGUtYXJyb3ctZG93bi1wcmltYXJ5LnN2Z1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgaGVpZ2h0OiAwLjYyNXJlbTtcbiAgICAgIHdpZHRoOiAwLjYyNXJlbTtcbiAgICAgIC8qIHN0eWxlbGludC1kaXNhYmxlIGJsb2NrLWNsb3NpbmctYnJhY2UtbmV3bGluZS1hZnRlciwgYXQtcnVsZS1lbXB0eS1saW5lLWJlZm9yZSAqL1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAvKiBzdHlsZWxpbnQtZW5hYmxlICovIH1cbiAgICAudXNhLWJhbm5lci1idXR0b25bYXJpYS1leHBhbmRlZD1mYWxzZV06aG92ZXI6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL2ltZy9hbmdsZS1hcnJvdy1kb3duLXByaW1hcnktaG92ZXIucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vaW1nL2FuZ2xlLWFycm93LWRvd24tcHJpbWFyeS1ob3Zlci5zdmdcIik7IH1cbiAgICAudXNhLWJhbm5lci1idXR0b25bYXJpYS1leHBhbmRlZD1mYWxzZV06OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogMXB4OyB9XG4gIC51c2EtYmFubmVyLWJ1dHRvblthcmlhLWV4cGFuZGVkPXRydWVdIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgIGhlaWdodDogMy41cmVtOyB9XG4gICAgLnVzYS1iYW5uZXItYnV0dG9uW2FyaWEtZXhwYW5kZWQ9dHJ1ZV06OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL2ltZy9jbG9zZS5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWcvY2xvc2Uuc3ZnXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBoZWlnaHQ6IDAuODEyNXJlbTtcbiAgICAgIHdpZHRoOiAwLjgxMjVyZW07XG4gICAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBibG9jay1jbG9zaW5nLWJyYWNlLW5ld2xpbmUtYWZ0ZXIsIGF0LXJ1bGUtZW1wdHktbGluZS1iZWZvcmUgKi9cbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgLyogc3R5bGVsaW50LWVuYWJsZSAqLyB9XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDgxcHgpIHtcbiAgICAgIC51c2EtYmFubmVyLWJ1dHRvblthcmlhLWV4cGFuZGVkPXRydWVdIHtcbiAgICAgICAgaGVpZ2h0OiBpbml0aWFsO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAgICAgLnVzYS1iYW5uZXItYnV0dG9uW2FyaWEtZXhwYW5kZWQ9dHJ1ZV06OmFmdGVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWcvYW5nbGUtYXJyb3ctdXAtcHJpbWFyeS5wbmdcIik7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vaW1nL2FuZ2xlLWFycm93LXVwLXByaW1hcnkuc3ZnXCIpO1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgaGVpZ2h0OiAwLjYyNXJlbTtcbiAgICAgICAgICB3aWR0aDogMC42MjVyZW07XG4gICAgICAgICAgLyogc3R5bGVsaW50LWRpc2FibGUgYmxvY2stY2xvc2luZy1icmFjZS1uZXdsaW5lLWFmdGVyLCBhdC1ydWxlLWVtcHR5LWxpbmUtYmVmb3JlICovXG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgICAgLyogc3R5bGVsaW50LWVuYWJsZSAqLyB9XG4gICAgICAgIC51c2EtYmFubmVyLWJ1dHRvblthcmlhLWV4cGFuZGVkPXRydWVdOmhvdmVyOjphZnRlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vaW1nL2FuZ2xlLWFycm93LXVwLXByaW1hcnktaG92ZXIucG5nXCIpO1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL2ltZy9hbmdsZS1hcnJvdy11cC1wcmltYXJ5LWhvdmVyLnN2Z1wiKTsgfVxuICAgICAgICAudXNhLWJhbm5lci1idXR0b25bYXJpYS1leHBhbmRlZD10cnVlXTo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogMXB4OyB9IH1cbiAgICAudXNhLWJhbm5lci1idXR0b25bYXJpYS1leHBhbmRlZD10cnVlXTo6YWZ0ZXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6IDAuOTM3NXJlbTtcbiAgICAgIHRvcDogMS4zNDM3NXJlbTsgfVxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDgxcHgpIHtcbiAgICAgICAgLnVzYS1iYW5uZXItYnV0dG9uW2FyaWEtZXhwYW5kZWQ9dHJ1ZV06OmFmdGVyIHtcbiAgICAgICAgICBwb3NpdGlvbjogc3RhdGljOyB9IH1cbiAgICAudXNhLWJhbm5lci1idXR0b25bYXJpYS1leHBhbmRlZD10cnVlXSAudXNhLWJhbm5lci1idXR0b24tdGV4dCB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0ODFweCkge1xuICAgICAgICAudXNhLWJhbm5lci1idXR0b25bYXJpYS1leHBhbmRlZD10cnVlXSAudXNhLWJhbm5lci1idXR0b24tdGV4dCB7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lOyB9IH1cblxuLnVzYS1iYW5uZXItaWNvbiB7XG4gIHdpZHRoOiAyLjM3NXJlbTsgfVxuXG4vKlxuQGltcG9ydCAnY29tcG9uZW50cy9mb290ZXInO1xuQGltcG9ydCAnY29tcG9uZW50cy9mb3Jtcyc7XG5AaW1wb3J0ICdjb21wb25lbnRzL2dyYXBoaWMtbGlzdCc7XG5AaW1wb3J0ICdjb21wb25lbnRzL2hlYWRlcic7XG5AaW1wb3J0ICdjb21wb25lbnRzL2hlcm8nO1xuQGltcG9ydCAnY29tcG9uZW50cy9sYXlvdXQnO1xuQGltcG9ydCAnY29tcG9uZW50cy9tZWRpYS1ibG9jayc7XG5AaW1wb3J0ICdjb21wb25lbnRzL25hdmlnYXRpb24nO1xuQGltcG9ydCAnY29tcG9uZW50cy9zZWFyY2gnO1xuQGltcG9ydCAnY29tcG9uZW50cy9zZWN0aW9uJztcbkBpbXBvcnQgJ2NvbXBvbmVudHMvc2lkZW5hdic7XG5AaW1wb3J0ICdjb21wb25lbnRzL3NraXBuYXYnO1xuKi9cbi51c2EtYnV0dG9uLFxuLnVzYS1idXR0b24tcHJpbWFyeSxcbi51c2EtYnV0dG9uOnZpc2l0ZWQsXG4udXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQge1xuICBwYWRkaW5nOiAwLjYyNXJlbSAxLjI1cmVtOyB9XG5cbi51c2EtYmFubmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC51c2EtYmFubmVyLWlubmVyIHtcbiAgICBwYWRkaW5nOiAwIGNhbGMoMiUgKyA4cHgpO1xuICAgIHdpZHRoOiA5NiU7IH0gfVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI1cHgpIHtcbiAgLnVzYS1iYW5uZXItaW5uZXIge1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHBhZGRpbmc6IDAgMC41cmVtO1xuICAgIHdpZHRoOiA5NjBweDsgfSB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDgwMXB4KSB7XG4gIC51c2EtYmFubmVyLWNvbnRlbnQge1xuICAgIHBhZGRpbmctbGVmdDogY2FsYygyJSArIDhweCk7XG4gICAgcGFkZGluZy1yaWdodDogY2FsYygyJSArIDhweCk7XG4gICAgd2lkdGg6IDk2JTsgfSB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkge1xuICAudXNhLWJhbm5lci1jb250ZW50IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG4gICAgd2lkdGg6IDk2MHB4OyB9IH1cblxuLnVzYS1iYW5uZXItaGVhZGVyIHtcbiAgZm9udC1zaXplOiAwLjYyNXJlbTsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0ODFweCkge1xuICAgIC51c2EtYmFubmVyLWhlYWRlciB7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBwYWRkaW5nOiAwIDAgM3B4OyB9IH1cbiAgLnVzYS1iYW5uZXItaGVhZGVyIGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjYyNXJlbTtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgd2lkdGg6IDEuNXJlbTsgfVxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ4MXB4KSB7XG4gICAgICAudXNhLWJhbm5lci1oZWFkZXIgaW1nIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBmbG9hdDogbm9uZTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjYyNXJlbTtcbiAgICAgICAgd2lkdGg6IDEuMjVyZW07IH0gfVxuICAudXNhLWJhbm5lci1oZWFkZXIgcCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogMXB4O1xuICAgIGxlZnQ6IC0ycHg7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbGluZS1oZWlnaHQ6IDEuMTU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDgxcHgpIHtcbiAgICAgIC51c2EtYmFubmVyLWhlYWRlciBwIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IGF1dG87XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgICBtYXJnaW46IDA7IH0gfVxuICAudXNhLWJhbm5lci1oZWFkZXItZXhwYW5kZWQgaW1nIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDAuNjI1cmVtOyB9XG5cbi51c2EtYWNjb3JkaW9uLWJ1dHRvblthcmlhLWV4cGFuZGVkPWZhbHNlXSxcbi51c2EtYWNjb3JkaW9uLWJ1dHRvblthcmlhLWV4cGFuZGVkPXRydWVdIHtcbiAgYmFja2dyb3VuZC1zaXplOiAwLjkzNzVyZW07IH1cbiAgLnVzYS1hY2NvcmRpb24tYnV0dG9uW2FyaWEtZXhwYW5kZWQ9ZmFsc2VdOmFmdGVyLFxuICAudXNhLWFjY29yZGlvbi1idXR0b25bYXJpYS1leHBhbmRlZD10cnVlXTphZnRlciB7XG4gICAgaGVpZ2h0OiAwLjYyNXJlbTtcbiAgICB3aWR0aDogMC42MjVyZW07IH1cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDgxcHgpIHtcbiAgICAudXNhLWFjY29yZGlvbi1idXR0b25bYXJpYS1leHBhbmRlZD1mYWxzZV0sXG4gICAgLnVzYS1hY2NvcmRpb24tYnV0dG9uW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0ge1xuICAgICAgdG9wOiAxcHg7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDRweDsgfSB9XG5cbi51c2EtbWVkaWFfYmxvY2staW1nIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1hcmdpbi1yaWdodDogMXJlbTsgfVxuXG4udXNhLW1lZGlhX2Jsb2NrLWJvZHkge1xuICBvdmVyZmxvdzogaGlkZGVuOyB9XG4iLCIvLyBCdXR0b25zIHZhcmlhYmxlc1xuXG4kYnV0dG9uLXN0cm9rZTogaW5zZXQgMCAwIDAgMnB4O1xuXG4vLyBCdXR0b25zXG5cbi8vIFRoaXMgbWl4aW4gaXMgb25seSBuZWVkZWQgdW50aWwgd2UgZnVsbHkgcmVtb3ZlIHRoZVxuLy8gZGVwcmVjYXRlZCB1c2EtYnV0dG9uLWRpc2FibGVkIHN0eWxlLlxuQG1peGluIGRpc2FibGVkZXNxdWUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItZ3JheS1saWdodGVyO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAmOmhvdmVyLFxuICAmLnVzYS1idXR0b24taG92ZXIsXG4gICY6YWN0aXZlLFxuICAmLnVzYS1idXR0b24tYWN0aXZlLFxuICAmOmZvY3VzLFxuICAmLnVzYS1mb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLWdyYXktbGlnaHRlcjtcbiAgICBib3JkZXI6IDA7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxufVxuXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBzZWxlY3Rvci1uby1xdWFsaWZ5aW5nLXR5cGUgKi9cbi51c2EtYnV0dG9uLFxuLnVzYS1idXR0b24tcHJpbWFyeSxcbi51c2EtYnV0dG9uOnZpc2l0ZWQsXG4udXNhLWJ1dHRvbi1wcmltYXJ5OnZpc2l0ZWQge1xuLy8gcmVtb3ZlIGFsbCBiYXNlIGVsZW1lbnQgc3R5bGluZ1xuLy8gYnV0dG9uLFxuLy8gW3R5cGU9YnV0dG9uXSxcbi8vIFt0eXBlPXN1Ym1pdF0sXG4vLyBbdHlwZT1yZXNldF0sXG4vLyBbdHlwZT1pbWFnZV1cbiAgQGluY2x1ZGUgZm9udC1zbW9vdGhpbmc7XG4gIEBpbmNsdWRlIG1hcmdpbigwLjVlbSAwLjVlbSAwLjVlbSBudWxsKTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXJhZGl1czogJGJ1dHRvbi1ib3JkZXItcmFkaXVzO1xuICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1mYW1pbHk6ICRmb250LXNhbnM7XG4gIGZvbnQtc2l6ZTogJGJhc2UtZm9udC1zaXplO1xuICBmb250LXdlaWdodDogJGZvbnQtYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHBhZGRpbmc6IDFyZW0gMnJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xuXG4gIEBpbmNsdWRlIG1lZGlhKCRzbWFsbC1zY3JlZW4pIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuXG4gICY6aG92ZXIsXG4gICYudXNhLWJ1dHRvbi1ob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXByaW1hcnktZGFya2VyO1xuICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICAmOmFjdGl2ZSxcbiAgJi51c2EtYnV0dG9uLWFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXByaW1hcnktZGFya2VzdDtcbiAgfVxuXG4gICYudXNhLWJ1dHRvbi1wcmltYXJ5LWFsdCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXByaW1hcnktYWx0O1xuICAgIGNvbG9yOiAkY29sb3ItYmFzZTtcblxuICAgICY6aG92ZXIsXG4gICAgJi51c2EtYnV0dG9uLWhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1wcmltYXJ5LWFsdC1kYXJrO1xuICAgIH1cblxuICAgICY6YWN0aXZlLFxuICAgICYudXNhLWJ1dHRvbi1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXByaW1hcnktYWx0LWRhcmtlc3Q7XG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgIH1cbiAgfVxuXG4gICYudXNhLWJ1dHRvbi1zZWNvbmRhcnkge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICBib3gtc2hhZG93OiAkYnV0dG9uLXN0cm9rZSAkY29sb3ItcHJpbWFyeTtcbiAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG5cbiAgICAmOmhvdmVyLFxuICAgICYudXNhLWJ1dHRvbi1ob3ZlciB7XG4gICAgICBib3gtc2hhZG93OiAkYnV0dG9uLXN0cm9rZSAkY29sb3ItcHJpbWFyeS1kYXJrZXI7XG4gICAgICBjb2xvcjogJGNvbG9yLXByaW1hcnktZGFya2VyO1xuICAgIH1cblxuICAgICY6YWN0aXZlLFxuICAgICYudXNhLWJ1dHRvbi1hY3RpdmUge1xuICAgICAgYm94LXNoYWRvdzogJGJ1dHRvbi1zdHJva2UgJGNvbG9yLXByaW1hcnktZGFya2VzdDtcbiAgICAgIGNvbG9yOiAkY29sb3ItcHJpbWFyeS1kYXJrZXN0O1xuICAgIH1cbiAgfVxuXG4gICYudXNhLWJ1dHRvbi1zZWNvbmRhcnktaW52ZXJzZSxcbiAgJi51c2EtYnV0dG9uLW91dGxpbmUtaW52ZXJzZSB7ICAgIC8vIE91dGxpbmUgaW52ZXJzZSB0byBiZSBkZXByZWNhdGVkIGluIDIuMFxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJveC1zaGFkb3c6ICRidXR0b24tc3Ryb2tlICRjb2xvci13aGl0ZTtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuXG4gICAgJjpob3ZlcixcbiAgICAmLnVzYS1idXR0b24taG92ZXIge1xuICAgICAgYm94LXNoYWRvdzogJGJ1dHRvbi1zdHJva2UgJGNvbG9yLWdyYXktbGlnaHRlcjtcbiAgICAgIGNvbG9yOiAkY29sb3ItZ3JheS1saWdodGVyO1xuICAgIH1cblxuICAgICY6YWN0aXZlLFxuICAgICYudXNhLWJ1dHRvbi1hY3RpdmUge1xuICAgICAgYm94LXNoYWRvdzogJGJ1dHRvbi1zdHJva2UgJGNvbG9yLWdyYXktbGlnaHQ7XG4gICAgICBjb2xvcjogJGNvbG9yLWdyYXktbGlnaHRlcjtcbiAgICB9XG4gIH1cblxuICAmLnVzYS1idXR0b24tZ3JheSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLWdyYXk7XG5cbiAgICAmOmhvdmVyLFxuICAgICYudXNhLWJ1dHRvbi1ob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItZ3JheS1kYXJrO1xuICAgIH1cblxuICAgICY6YWN0aXZlLFxuICAgICYudXNhLWJ1dHRvbi1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLWJhc2U7XG4gICAgfVxuICB9XG5cbiAgJi51c2EtYnV0dG9uLXJlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXNlY29uZGFyeTtcblxuICAgICY6aG92ZXIsXG4gICAgJi51c2EtYnV0dG9uLWhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1zZWNvbmRhcnktZGFyaztcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSxcbiAgICAmLnVzYS1idXR0b24tYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1zZWNvbmRhcnktZGFya2VzdDtcbiAgICB9XG4gIH1cblxuICAmLnVzYS1idXR0b24tYmlnIHtcbiAgICBmb250LXNpemU6IDEuOXJlbTtcbiAgICBwYWRkaW5nOiAxLjVyZW0gM3JlbTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIEBpbmNsdWRlIGRpc2FibGVkZXNxdWU7XG4gIH1cbn1cbi8qIHN0eWxlbGludC1kaXNhYmxlICovXG5cbi51c2EtYnV0dG9uLWRpc2FibGVkICAvLyBEZXByZWNhdGVkXG57XG4gIEBpbmNsdWRlIGRpc2FibGVkZXNxdWVcbn1cblxuLnVzYS1idXR0b24tc2Vjb25kYXJ5LWRpc2FibGVkLCAgICAgICAgICAvLyBEZXByZWNhdGVkXG4udXNhLWJ1dHRvbi1zZWNvbmRhcnktaW52ZXJzZS1kaXNhYmxlZCwgIC8vIERlcHJlY2F0ZWRcbi51c2EtYnV0dG9uLXNlY29uZGFyeTpkaXNhYmxlZCxcbi51c2EtYnV0dG9uLXNlY29uZGFyeS1pbnZlcnNlOmRpc2FibGVkLFxuLnVzYS1idXR0b24tb3V0bGluZS1pbnZlcnNlOmRpc2FibGVkIHsgICAvLyBPdXRsaW5lIGludmVyc2UgdG8gYmUgZGVwcmVjYXRlZCBpbiAyLjBcbiAgYm94LXNoYWRvdzogJGJ1dHRvbi1zdHJva2UgJGNvbG9yLWdyYXktbGlnaHRlcjtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGNvbG9yOiAkY29sb3ItZ3JheS1saWdodGVyO1xuXG4gICY6aG92ZXIsXG4gICYudXNhLWJ1dHRvbi1ob3ZlcixcbiAgJjphY3RpdmUsXG4gICYudXNhLWJ1dHRvbi1hY3RpdmUsXG4gICY6Zm9jdXMsXG4gICYudXNhLWZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgYm9yZGVyOiAwO1xuICB9XG59XG5cbmh0bWwgLnVzYS1idXR0b24tc2Vjb25kYXJ5LWRpc2FibGVkLCAgICAgICAgICAvLyBEZXByZWNhdGVkXG4udXNhLWJ1dHRvbi1zZWNvbmRhcnk6ZGlzYWJsZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGU7XG59XG5cbmh0bWwgLnVzYS1idXR0b24tc2Vjb25kYXJ5LWludmVyc2UtZGlzYWJsZWQsICAvLyBEZXByZWNhdGVkXG4udXNhLWJ1dHRvbi1zZWNvbmRhcnktaW52ZXJzZTpkaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogJGNvbG9yLWdyYXk7XG4gIGJveC1zaGFkb3c6ICRidXR0b24tc3Ryb2tlICRjb2xvci1ncmF5O1xufVxuXG5AbWl4aW4gYnV0dG9uLXVuc3R5bGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgZm9udC13ZWlnaHQ6ICRmb250LW5vcm1hbDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhdXRvO1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG59XG5cbi51c2EtYnV0dG9uLXVuc3R5bGVkIHtcbiAgQGluY2x1ZGUgYnV0dG9uLXVuc3R5bGVkO1xufVxuIiwiLy8gVmFyaWFibGVzXG5cbiRhY2NvcmRpb24tYm9yZGVyOiAzcHggc29saWQgJGNvbG9yLWdyYXktbGlnaHRlc3Q7XG5cbi8vIEFjY29yZGlvbiBTdHlsZXNcblxuJGljb24tc2l6ZTogJHNwYWNpbmctbWQtc21hbGw7XG4kaC1wYWRkaW5nOiAkc3BhY2luZy1tZWRpdW07XG4kdi1wYWRkaW5nOiAkc3BhY2luZy1tZC1zbWFsbDtcblxuQG1peGluIGFjY29yZGlvbi1saXN0LXN0eWxlcyB7XG4gIEBpbmNsdWRlIHVuc3R5bGVkLWxpc3Q7XG4gIGNvbG9yOiAkY29sb3ItYmFzZTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuQG1peGluIGFjY29yZGlvbi1saXN0LWl0ZW0tc3R5bGVzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLWdyYXktbGlnaHRlc3Q7XG4gIGZvbnQtZmFtaWx5OiAkZm9udC1zYW5zO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZy14LXNtYWxsO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLy8gc2Nzcy1saW50OmRpc2FibGUgUHJvcGVydHlDb3VudFxuQG1peGluIGFjY29yZGlvbi1idXR0b24tc3R5bGVzIHtcbiAgQGluY2x1ZGUgYnV0dG9uLXVuc3R5bGVkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItZ3JheS1saWdodGVzdDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcjeyRpbWFnZS1wYXRofS9taW51cy5wbmcnKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcjeyRpbWFnZS1wYXRofS9taW51cy5zdmcnKTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgJGgtcGFkZGluZyBjZW50ZXI7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtc2l6ZTogJGljb24tc2l6ZTtcbiAgY29sb3I6ICRjb2xvci1iYXNlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1mYW1pbHk6ICRmb250LXNhbnM7XG4gIGZvbnQtd2VpZ2h0OiAkZm9udC1ib2xkO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6ICR2LXBhZGRpbmcgKCRoLXBhZGRpbmcgKiAyICsgJGljb24tc2l6ZSkgJHYtcGFkZGluZyAkaC1wYWRkaW5nO1xuICB3aWR0aDogMTAwJTtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItZ3JheS1saWdodGVyO1xuICAgIGNvbG9yOiAkY29sb3ItYmFzZTtcbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIGg0LFxuICBoNSxcbiAgaDYge1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuLy8gc2Nzcy1saW50OmVuYWJsZSBQcm9wZXJ0eUNvdW50XG5cbkBtaXhpbiBhY2NvcmRpb24tYnV0dG9uLXVub3BlbmVkLXN0eWxlcyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnI3skaW1hZ2UtcGF0aH0vcGx1cy5wbmcnKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcjeyRpbWFnZS1wYXRofS9wbHVzLnN2ZycpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXNpemU6ICRpY29uLXNpemU7XG59XG5cbkBtaXhpbiBhY2NvcmRpb24tbmVzdGVkLWxpc3Qge1xuICA+IHVsIGxpIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBkaXNjO1xuICAgID4gbGkgPiB1bCB7XG4gICAgICBsaXN0LXN0eWxlOiBjaXJjbGU7XG4gICAgICA+IGxpID4gdWwge1xuICAgICAgICBsaXN0LXN0eWxlOiBzcXVhcmU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi51c2EtYWNjb3JkaW9uLFxuLnVzYS1hY2NvcmRpb24tYm9yZGVyZWQge1xuICBAaW5jbHVkZSBhY2NvcmRpb24tbGlzdC1zdHlsZXM7XG4gIEBpbmNsdWRlIGFjY29yZGlvbi1uZXN0ZWQtbGlzdDtcblxuICArIC51c2EtYWNjb3JkaW9uLFxuICArIC51c2EtYWNjb3JkaW9uLWJvcmRlcmVkIHtcbiAgICBtYXJnaW4tdG9wOiAkc3BhY2luZy1zbWFsbDtcbiAgfVxuXG4gIC8vIFRPRE8gZGVwcmVjYXRlZCBydWxlc2V0IGJhc2VkIG9uIG9sZCBhY2NvcmRpb24uXG4gID4gdWwge1xuICAgIEBpbmNsdWRlIGFjY29yZGlvbi1saXN0LXN0eWxlcztcblxuICAgIC8vIFRPRE8gZGVwcmVjYXRlZCBydWxlc2V0IGJhc2VkIG9uIG9sZCBhY2NvcmRpb24uXG4gICAgPiBsaSB7XG4gICAgICBAaW5jbHVkZSBhY2NvcmRpb24tbGlzdC1pdGVtLXN0eWxlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPIGRlcHJlY2F0ZWQgcnVsZXNldCBiYXNlZCBvbiBvbGQgYWNjb3JkaW9uLlxuICAgIGJ1dHRvbiB7XG4gICAgICBAaW5jbHVkZSBhY2NvcmRpb24tYnV0dG9uLXN0eWxlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPIGRlcHJlY2F0ZWQgcnVsZXNldCBiYXNlZCBvbiBvbGQgYWNjb3JkaW9uLlxuICAgIFthcmlhLWV4cGFuZGVkPWZhbHNlXSB7XG4gICAgICBAaW5jbHVkZSBhY2NvcmRpb24tYnV0dG9uLXVub3BlbmVkLXN0eWxlcztcbiAgICB9XG4gIH1cblxuICA+IGxpIHtcbiAgICBAaW5jbHVkZSBhY2NvcmRpb24tbGlzdC1pdGVtLXN0eWxlcztcbiAgfVxuXG59XG5cbi51c2EtYWNjb3JkaW9uLWJvcmRlcmVkIHtcbiAgLnVzYS1hY2NvcmRpb24tY29udGVudCB7XG4gICAgYm9yZGVyLWJvdHRvbTogJGFjY29yZGlvbi1ib3JkZXI7XG4gICAgYm9yZGVyLWxlZnQ6ICRhY2NvcmRpb24tYm9yZGVyO1xuICAgIGJvcmRlci1yaWdodDogJGFjY29yZGlvbi1ib3JkZXI7XG4gIH1cbn1cblxuLnVzYS1hY2NvcmRpb24tY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIHBhZGRpbmc6ICRzcGFjaW5nLW1kLXNtYWxsICRzcGFjaW5nLW1lZGl1bTtcblxuICA+ICo6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cblxuICA+ICo6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gICY6bm90KFthcmlhLWhpZGRlbl0pIHtcbiAgICBAaW5jbHVkZSBzci1vbmx5KCk7XG4gIH1cblxuICBAaW5jbHVkZSBhY2Nlc3NpYmx5LWhpZGRlbigpO1xufVxuXG4udXNhLWFjY29yZGlvbi1idXR0b24ge1xuICBAaW5jbHVkZSBhY2NvcmRpb24tYnV0dG9uLXN0eWxlcztcbn1cblxuLnVzYS1hY2NvcmRpb24tYnV0dG9uW2FyaWEtZXhwYW5kZWQ9ZmFsc2VdIHtcbiAgQGluY2x1ZGUgYWNjb3JkaW9uLWJ1dHRvbi11bm9wZW5lZC1zdHlsZXM7XG59XG4iLCIudXNhLWJhbm5lciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1ncmF5LWxpZ2h0ZXN0O1xuICBwYWRkaW5nLWJvdHRvbTogc2l6ZSg3cHgpO1xuXG4gIEBpbmNsdWRlIG1lZGlhKCRzbWFsbC1zY3JlZW4pIHtcbiAgICBmb250LXNpemU6ICRoNi1mb250LXNpemU7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cblxuLnVzYS1iYW5uZXItY29udGVudCB7XG4gIEBpbmNsdWRlIHBhZGRpbmcobnVsbCAkc2l0ZS1tYXJnaW5zLW1vYmlsZSAzcHggJHNpdGUtbWFyZ2lucy1tb2JpbGUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgZm9udC1zaXplOiAkaDUtZm9udC1zaXplO1xuICBwYWRkaW5nLXRvcDogc2l6ZSgyMHB4KTtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgQGluY2x1ZGUgbWVkaWEoJG1lZGl1bS1zY3JlZW4pIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogc2l6ZSgyM3B4KTtcbiAgICBwYWRkaW5nLXRvcDogc2l6ZSg0MHB4KTtcbiAgfVxuXG4gIEBpbmNsdWRlIG1lZGlhKCRuYXYtd2lkdGgpIHtcbiAgICBAaW5jbHVkZSBwYWRkaW5nKG51bGwgJHNpdGUtbWFyZ2lucyk7XG4gIH1cblxuICBwIHtcbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IHNpemUoMTBweCk7XG5cbiAgICAgIEBpbmNsdWRlIG1lZGlhKCRtZWRpdW0tc2NyZWVuKSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi51c2EtYmFubmVyLWlubmVyIHtcbiAgQGluY2x1ZGUgb3V0ZXItY29udGFpbmVyKCk7XG4gIEBpbmNsdWRlIHBhZGRpbmcobnVsbCAkc2l0ZS1tYXJnaW5zLW1vYmlsZSk7XG4gIG1heC13aWR0aDogJHNpdGUtbWF4LXdpZHRoO1xuXG4gIEBpbmNsdWRlIG1lZGlhKCRuYXYtd2lkdGgpIHtcbiAgICBAaW5jbHVkZSBwYWRkaW5nKG51bGwgJHNpdGUtbWFyZ2lucyk7XG4gIH1cbn1cblxuLnVzYS1iYW5uZXItaGVhZGVyIHtcbiAgQGluY2x1ZGUgcGFkZGluZyhzaXplKDUuNXB4KSBudWxsKTtcbiAgZm9udC1zaXplOiBzaXplKDEycHgpO1xuICBmb250LXdlaWdodDogJGZvbnQtbm9ybWFsO1xuXG4gIEBpbmNsdWRlIG1lZGlhKCRzbWFsbC1zY3JlZW4pIHtcbiAgICBAaW5jbHVkZSBwYWRkaW5nKDAgbnVsbCk7XG4gIH1cblxuICBwIHtcbiAgICBAaW5jbHVkZSBtYXJnaW4oMCBudWxsKTtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICAgQGluY2x1ZGUgbWVkaWEoJHNtYWxsLXNjcmVlbikge1xuICAgICAgQGluY2x1ZGUgbWFyZ2luKDJweCBudWxsKTtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gIH1cblxuICBpbWcge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbi1yaWdodDogc2l6ZSgxMHB4KTtcbiAgICBtYXJnaW4tdG9wOiBzaXplKDEwcHgpO1xuICAgIHdpZHRoOiBzaXplKDI0cHgpO1xuXG4gICAgQGluY2x1ZGUgbWVkaWEoJHNtYWxsLXNjcmVlbikge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBzaXplKDdweCk7XG4gICAgICB3aWR0aDogc2l6ZSgyMHB4KTtcbiAgICB9XG4gIH1cbn1cblxuLnVzYS1iYW5uZXItaGVhZGVyLWV4cGFuZGVkIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjb2xvci1ncmF5LWxpZ2h0O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmb250LXNpemU6ICRoNS1mb250LXNpemU7XG4gIG1pbi1oZWlnaHQ6IHNpemUoNTZweCk7XG4gIHBhZGRpbmctcmlnaHQ6IHNpemUoMzBweCk7XG5cbiAgQGluY2x1ZGUgbWVkaWEoJHNtYWxsLXNjcmVlbikge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiBzaXplKDEycHgpO1xuICAgIGZvbnQtd2VpZ2h0OiAkZm9udC1ub3JtYWw7XG4gICAgbWluLWhlaWdodDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG5cbiAgPiAudXNhLWJhbm5lci1pbm5lciB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG5cbiAgICBAaW5jbHVkZSBtZWRpYSgkc21hbGwtc2NyZWVuKSB7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICB9XG4gIH1cblxuICBpbWcge1xuICAgIG1hcmdpbi1yaWdodDogc2l6ZSgyNHB4KTtcblxuICAgIEBpbmNsdWRlIG1lZGlhKCRzbWFsbC1zY3JlZW4pIHtcbiAgICAgIG1hcmdpbi1yaWdodDogc2l6ZSg3cHgpO1xuICAgIH1cbiAgfVxuXG4gIHAge1xuICAgIGxpbmUtaGVpZ2h0OiAkaGVhZGluZy1saW5lLWhlaWdodDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuXG4gICAgQGluY2x1ZGUgbWVkaWEoJHNtYWxsLXNjcmVlbikge1xuICAgICAgbGluZS1oZWlnaHQ6ICRiYXNlLWxpbmUtaGVpZ2h0O1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG4gIH1cbn1cblxuLnVzYS1iYW5uZXItYnV0dG9uIHtcbiAgQGluY2x1ZGUgYnV0dG9uLXVuc3R5bGVkO1xuICBAaW5jbHVkZSBwYWRkaW5nKHNpemUoMTNweCkgbnVsbCBudWxsIHNpemUoNDhweCkpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IHJpZ2h0O1xuICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IHNpemUoMTJweCk7XG4gIGhlaWdodDogc2l6ZSg0M3B4KTtcbiAgbGVmdDogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgdG9wOiAwO1xuICB3aWR0aDogMTAwJTtcblxuICBAaW5jbHVkZSBtZWRpYSgkc21hbGwtc2NyZWVuKSB7XG4gICAgQGluY2x1ZGUgcGFkZGluZygwIG51bGwgbnVsbCAwKTtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1ibG9jay1uby1pZ25vcmVkLXByb3BlcnRpZXMgKi9cbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgaGVpZ2h0OiBpbml0aWFsO1xuICAgIG1hcmdpbi1sZWZ0OiAzcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgd2lkdGg6IGluaXRpYWw7XG4gICAgLyogc3R5bGVsaW50LWVuYWJsZSAqL1xuICB9XG5cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICRjb2xvci1wcmltYXJ5LWRhcmtlcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgfVxuXG4gICZbYXJpYS1leHBhbmRlZD1mYWxzZV0ge1xuICAgIEBpbmNsdWRlIGRpc3BsYXktaWNvbihhbmdsZS1hcnJvdy1kb3duLXByaW1hcnksIGFmdGVyLCBzaXplKDEwcHgpLCAwLCBob3Zlcik7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogMXB4O1xuICAgIH1cbiAgfVxuXG4gICZbYXJpYS1leHBhbmRlZD10cnVlXSB7XG4gICAgQGluY2x1ZGUgZGlzcGxheS1pY29uKGNsb3NlLCBhZnRlciwgc2l6ZSgxM3B4KSwgMCwgbm8taG92ZXIpO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgaGVpZ2h0OiBzaXplKDU2cHgpO1xuXG4gICAgQGluY2x1ZGUgbWVkaWEoJHNtYWxsLXNjcmVlbikge1xuICAgICAgQGluY2x1ZGUgZGlzcGxheS1pY29uKGFuZ2xlLWFycm93LXVwLXByaW1hcnksIGFmdGVyLCBzaXplKDEwcHgpLCAwLCBob3Zlcik7XG4gICAgICBoZWlnaHQ6IGluaXRpYWw7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogMXB4O1xuICAgICAgfVxuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiBzaXplKDE1cHgpO1xuICAgICAgdG9wOiBzaXplKDIxLjVweCk7XG5cbiAgICAgIEBpbmNsdWRlIG1lZGlhKCRzbWFsbC1zY3JlZW4pIHtcbiAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAudXNhLWJhbm5lci1idXR0b24tdGV4dCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgICBAaW5jbHVkZSBtZWRpYSgkc21hbGwtc2NyZWVuKSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLnVzYS1iYW5uZXItaWNvbiB7XG4gIHdpZHRoOiBzaXplKDM4cHgpO1xufVxuIiwiLnVzYS1idXR0b24sXG4udXNhLWJ1dHRvbi1wcmltYXJ5LFxuLnVzYS1idXR0b246dmlzaXRlZCxcbi51c2EtYnV0dG9uLXByaW1hcnk6dmlzaXRlZCB7XG4gIHBhZGRpbmc6IHNpemUoMTBweCkgc2l6ZSgyMHB4KTtcbn1cblxuLnVzYS1iYW5uZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi51c2EtYmFubmVyLWlubmVyIHtcbiAgQGluY2x1ZGUgbWVkaWEoJG1lZGl1bS1zY3JlZW4pIHtcbiAgICBwYWRkaW5nOiAwIGNhbGMoMiUgKyA4cHgpO1xuICAgIHdpZHRoOiA5NiU7XG4gIH1cbiAgQGluY2x1ZGUgbWVkaWEoJGxhcmdlLXNjcmVlbikge1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHBhZGRpbmc6IDAgc2l6ZSg4cHgpO1xuICAgIHdpZHRoOiA5NjBweDtcbiAgfVxufVxuXG4udXNhLWJhbm5lci1jb250ZW50IHtcbiAgQGluY2x1ZGUgbWVkaWEoJG1lZGl1bS1zY3JlZW4pIHtcbiAgICBwYWRkaW5nLWxlZnQ6IGNhbGMoMiUgKyA4cHgpO1xuICAgIHBhZGRpbmctcmlnaHQ6IGNhbGMoMiUgKyA4cHgpO1xuICAgIHdpZHRoOiA5NiU7XG4gIH1cbiAgQGluY2x1ZGUgbWVkaWEoJGxhcmdlLXNjcmVlbikge1xuICAgIHBhZGRpbmctbGVmdDogc2l6ZSg4cHgpO1xuICAgIHBhZGRpbmctcmlnaHQ6IHNpemUoOHB4KTtcbiAgICB3aWR0aDogOTYwcHg7XG4gIH1cbn1cblxuLnVzYS1iYW5uZXItaGVhZGVyIHtcbiAgZm9udC1zaXplOiBzaXplKDEwcHgpO1xuICBAaW5jbHVkZSBtZWRpYSgkc21hbGwtc2NyZWVuKSB7XG4gICAgZm9udC1zaXplOiBzaXplKDEycHgpO1xuICAgIEBpbmNsdWRlIHBhZGRpbmcoMCAwIDNweCAwKTtcbiAgfVxuICBpbWcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbi1yaWdodDogc2l6ZSgxMHB4KTtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgd2lkdGg6IHNpemUoMjRweCk7XG5cbiAgICBAaW5jbHVkZSBtZWRpYSgkc21hbGwtc2NyZWVuKSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBmbG9hdDogbm9uZTtcbiAgICAgIG1hcmdpbi1yaWdodDogc2l6ZSgxMHB4KTtcbiAgICAgIHdpZHRoOiBzaXplKDIwcHgpO1xuICAgIH1cbiAgfVxuICBwIHtcbiAgICBAaW5jbHVkZSBwb3NpdGlvbigxcHggbnVsbCBudWxsIC0ycHgpO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE1O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBAaW5jbHVkZSBtZWRpYSgkc21hbGwtc2NyZWVuKSB7XG4gICAgICBAaW5jbHVkZSBwb3NpdGlvbihhdXRvIG51bGwgbnVsbCBhdXRvKTtcbiAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICB9XG4gICYtZXhwYW5kZWQge1xuICAgIGltZyB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IHNpemUoMTBweCk7XG4gICAgfVxuICB9XG59XG5cbi51c2EtYWNjb3JkaW9uLWJ1dHRvblthcmlhLWV4cGFuZGVkPWZhbHNlXSxcbi51c2EtYWNjb3JkaW9uLWJ1dHRvblthcmlhLWV4cGFuZGVkPXRydWVdIHtcbiAgYmFja2dyb3VuZC1zaXplOiBzaXplKDE1cHgpO1xuICAmOmFmdGVyIHtcbiAgICBoZWlnaHQ6IHNpemUoMTBweCk7XG4gICAgd2lkdGg6IHNpemUoMTBweCk7XG4gIH1cbiAgQGluY2x1ZGUgbWVkaWEoJHNtYWxsLXNjcmVlbikge1xuICAgIHRvcDogMXB4O1xuICAgIHBhZGRpbmctbGVmdDogNHB4O1xuICB9XG59XG5cbi51c2EtbWVkaWFfYmxvY2sge1xuICAmLWltZyB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xuICB9XG4gICYtYm9keSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxufVxuIiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuXG4vLy8gUHJvdmlkZXMgYSBxdWljayBtZXRob2QgZm9yIHNldHRpbmcgYW4gZWxlbWVudOKAmXMgcG9zaXRpb24uIFVzZSBhIGBudWxsYCB2YWx1ZSB0byDigJxza2lw4oCdIGEgc2lkZS5cbi8vL1xuLy8vIEBwYXJhbSB7UG9zaXRpb259ICRwb3NpdGlvbiBbcmVsYXRpdmVdXG4vLy8gICBBIENTUyBwb3NpdGlvbiB2YWx1ZVxuLy8vXG4vLy8gQHBhcmFtIHtBcmdsaXN0fSAkY29vcmRpbmF0ZXMgW251bGwgbnVsbCBudWxsIG51bGxdXG4vLy8gICBMaXN0IG9mIHZhbHVlcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIDQtdmFsdWUgc3ludGF4IGZvciB0aGUgZWRnZXMgb2YgYSBib3hcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBVc2FnZVxuLy8vICAgLmVsZW1lbnQge1xuLy8vICAgICBAaW5jbHVkZSBwb3NpdGlvbihhYnNvbHV0ZSwgMCBudWxsIG51bGwgMTBlbSk7XG4vLy8gICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBjc3MgLSBDU1MgT3V0cHV0XG4vLy8gICAuZWxlbWVudCB7XG4vLy8gICAgIGxlZnQ6IDEwZW07XG4vLy8gICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbi8vLyAgICAgdG9wOiAwO1xuLy8vICAgfVxuLy8vXG4vLy8gQHJlcXVpcmUge2Z1bmN0aW9ufSBpcy1sZW5ndGhcbi8vLyBAcmVxdWlyZSB7ZnVuY3Rpb259IHVucGFja1xuXG5AbWl4aW4gcG9zaXRpb24oJHBvc2l0aW9uOiByZWxhdGl2ZSwgJGNvb3JkaW5hdGVzOiBudWxsIG51bGwgbnVsbCBudWxsKSB7XG4gIEBpZiB0eXBlLW9mKCRwb3NpdGlvbikgPT0gbGlzdCB7XG4gICAgJGNvb3JkaW5hdGVzOiAkcG9zaXRpb247XG4gICAgJHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gICRjb29yZGluYXRlczogdW5wYWNrKCRjb29yZGluYXRlcyk7XG5cbiAgJG9mZnNldHM6IChcbiAgICB0b3A6ICAgIG50aCgkY29vcmRpbmF0ZXMsIDEpLFxuICAgIHJpZ2h0OiAgbnRoKCRjb29yZGluYXRlcywgMiksXG4gICAgYm90dG9tOiBudGgoJGNvb3JkaW5hdGVzLCAzKSxcbiAgICBsZWZ0OiAgIG50aCgkY29vcmRpbmF0ZXMsIDQpXG4gICk7XG5cbiAgcG9zaXRpb246ICRwb3NpdGlvbjtcblxuICBAZWFjaCAkb2Zmc2V0LCAkdmFsdWUgaW4gJG9mZnNldHMge1xuICAgIEBpZiBpcy1sZW5ndGgoJHZhbHVlKSB7XG4gICAgICAjeyRvZmZzZXR9OiAkdmFsdWU7XG4gICAgfVxuICB9XG59XG4iXX0= */ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-bold-webfont.eot b/themes/digital.gov/static/lib/uswds/fonts/merriweather-bold-webfont.eot new file mode 100755 index 0000000000..c77b53bdd0 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-bold-webfont.eot differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-bold-webfont.ttf b/themes/digital.gov/static/lib/uswds/fonts/merriweather-bold-webfont.ttf new file mode 100755 index 0000000000..44f33c239f Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-bold-webfont.ttf differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-bold-webfont.woff b/themes/digital.gov/static/lib/uswds/fonts/merriweather-bold-webfont.woff new file mode 100755 index 0000000000..a728400d5f Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-bold-webfont.woff differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-bold-webfont.woff2 b/themes/digital.gov/static/lib/uswds/fonts/merriweather-bold-webfont.woff2 new file mode 100755 index 0000000000..ff3bddfbd9 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-bold-webfont.woff2 differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-italic-webfont.eot b/themes/digital.gov/static/lib/uswds/fonts/merriweather-italic-webfont.eot new file mode 100755 index 0000000000..8841854416 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-italic-webfont.eot differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-italic-webfont.ttf b/themes/digital.gov/static/lib/uswds/fonts/merriweather-italic-webfont.ttf new file mode 100755 index 0000000000..3180e526d9 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-italic-webfont.ttf differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-italic-webfont.woff b/themes/digital.gov/static/lib/uswds/fonts/merriweather-italic-webfont.woff new file mode 100755 index 0000000000..d7071e3c23 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-italic-webfont.woff differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-italic-webfont.woff2 b/themes/digital.gov/static/lib/uswds/fonts/merriweather-italic-webfont.woff2 new file mode 100755 index 0000000000..f8660d06ff Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-italic-webfont.woff2 differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-light-webfont.eot b/themes/digital.gov/static/lib/uswds/fonts/merriweather-light-webfont.eot new file mode 100755 index 0000000000..4115d282bb Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-light-webfont.eot differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-light-webfont.ttf b/themes/digital.gov/static/lib/uswds/fonts/merriweather-light-webfont.ttf new file mode 100755 index 0000000000..03cfa42533 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-light-webfont.ttf differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-light-webfont.woff b/themes/digital.gov/static/lib/uswds/fonts/merriweather-light-webfont.woff new file mode 100755 index 0000000000..9b3427536d Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-light-webfont.woff differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-light-webfont.woff2 b/themes/digital.gov/static/lib/uswds/fonts/merriweather-light-webfont.woff2 new file mode 100755 index 0000000000..e53e4b531e Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-light-webfont.woff2 differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-regular-webfont.eot b/themes/digital.gov/static/lib/uswds/fonts/merriweather-regular-webfont.eot new file mode 100755 index 0000000000..c4cde6d015 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-regular-webfont.eot differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-regular-webfont.ttf b/themes/digital.gov/static/lib/uswds/fonts/merriweather-regular-webfont.ttf new file mode 100755 index 0000000000..3889a60658 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-regular-webfont.ttf differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-regular-webfont.woff b/themes/digital.gov/static/lib/uswds/fonts/merriweather-regular-webfont.woff new file mode 100755 index 0000000000..1969d2ed0d Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-regular-webfont.woff differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/merriweather-regular-webfont.woff2 b/themes/digital.gov/static/lib/uswds/fonts/merriweather-regular-webfont.woff2 new file mode 100755 index 0000000000..3023ce73c8 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/merriweather-regular-webfont.woff2 differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-bold-webfont.eot b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-bold-webfont.eot new file mode 100644 index 0000000000..f031b206e4 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-bold-webfont.eot differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-bold-webfont.ttf b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-bold-webfont.ttf new file mode 100644 index 0000000000..02ae55e6e7 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-bold-webfont.ttf differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-bold-webfont.woff b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-bold-webfont.woff new file mode 100644 index 0000000000..1985bc0f19 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-bold-webfont.woff differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-bold-webfont.woff2 b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-bold-webfont.woff2 new file mode 100644 index 0000000000..59cbda5199 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-bold-webfont.woff2 differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-italic-webfont.eot b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-italic-webfont.eot new file mode 100644 index 0000000000..e01ae4de04 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-italic-webfont.eot differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-italic-webfont.ttf b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-italic-webfont.ttf new file mode 100644 index 0000000000..b513caef9b Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-italic-webfont.ttf differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-italic-webfont.woff b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-italic-webfont.woff new file mode 100644 index 0000000000..a512221dda Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-italic-webfont.woff differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-italic-webfont.woff2 b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-italic-webfont.woff2 new file mode 100644 index 0000000000..c1a6d9f1e8 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-italic-webfont.woff2 differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-light-webfont.eot b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-light-webfont.eot new file mode 100644 index 0000000000..55d1c876c9 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-light-webfont.eot differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-light-webfont.ttf b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-light-webfont.ttf new file mode 100644 index 0000000000..a4c674a00f Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-light-webfont.ttf differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-light-webfont.woff b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-light-webfont.woff new file mode 100644 index 0000000000..eb2fd5ae65 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-light-webfont.woff differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-light-webfont.woff2 b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-light-webfont.woff2 new file mode 100644 index 0000000000..091b8079af Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-light-webfont.woff2 differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-regular-webfont.eot b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-regular-webfont.eot new file mode 100644 index 0000000000..cddebbca5f Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-regular-webfont.eot differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-regular-webfont.ttf b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-regular-webfont.ttf new file mode 100644 index 0000000000..ac42fa1c24 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-regular-webfont.ttf differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-regular-webfont.woff b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-regular-webfont.woff new file mode 100644 index 0000000000..e057c48e84 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-regular-webfont.woff differ diff --git a/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-regular-webfont.woff2 b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-regular-webfont.woff2 new file mode 100644 index 0000000000..43ec601dc2 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/fonts/sourcesanspro-regular-webfont.woff2 differ diff --git a/themes/digital.gov/static/lib/uswds/img/alerts/error.png b/themes/digital.gov/static/lib/uswds/img/alerts/error.png new file mode 100755 index 0000000000..0d43497570 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/alerts/error.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/alerts/error.svg b/themes/digital.gov/static/lib/uswds/img/alerts/error.svg new file mode 100755 index 0000000000..1d96a62100 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/alerts/error.svg @@ -0,0 +1,17 @@ + + + + + + diff --git a/themes/digital.gov/static/lib/uswds/img/alerts/info.png b/themes/digital.gov/static/lib/uswds/img/alerts/info.png new file mode 100755 index 0000000000..e666e97bad Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/alerts/info.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/alerts/info.svg b/themes/digital.gov/static/lib/uswds/img/alerts/info.svg new file mode 100755 index 0000000000..8c9ea2af6f --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/alerts/info.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/themes/digital.gov/static/lib/uswds/img/alerts/success.png b/themes/digital.gov/static/lib/uswds/img/alerts/success.png new file mode 100755 index 0000000000..66abc096c0 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/alerts/success.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/alerts/success.svg b/themes/digital.gov/static/lib/uswds/img/alerts/success.svg new file mode 100755 index 0000000000..90b5c739b2 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/alerts/success.svg @@ -0,0 +1,12 @@ + + + diff --git a/themes/digital.gov/static/lib/uswds/img/alerts/warning.png b/themes/digital.gov/static/lib/uswds/img/alerts/warning.png new file mode 100755 index 0000000000..909518d8b3 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/alerts/warning.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/alerts/warning.svg b/themes/digital.gov/static/lib/uswds/img/alerts/warning.svg new file mode 100755 index 0000000000..18b24c47cb --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/alerts/warning.svg @@ -0,0 +1,16 @@ + + + + + + diff --git a/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-hover.png b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-hover.png new file mode 100644 index 0000000000..2814eba30a Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-hover.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-hover.svg b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-hover.svg new file mode 100644 index 0000000000..63b09db89c --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-hover.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-primary-hover.png b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-primary-hover.png new file mode 100644 index 0000000000..03503962b9 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-primary-hover.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-primary-hover.svg b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-primary-hover.svg new file mode 100644 index 0000000000..0777e09ff2 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-primary-hover.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-primary.png b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-primary.png new file mode 100644 index 0000000000..e01573f831 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-primary.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-primary.svg b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-primary.svg new file mode 100644 index 0000000000..f522e715c1 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down-primary.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/angle-arrow-down.png b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down.png new file mode 100644 index 0000000000..a3d395ee5f Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/angle-arrow-down.svg b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down.svg new file mode 100644 index 0000000000..87cfc3a0f5 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/angle-arrow-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/angle-arrow-up-primary-hover.png b/themes/digital.gov/static/lib/uswds/img/angle-arrow-up-primary-hover.png new file mode 100644 index 0000000000..172b4c0256 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/angle-arrow-up-primary-hover.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/angle-arrow-up-primary-hover.svg b/themes/digital.gov/static/lib/uswds/img/angle-arrow-up-primary-hover.svg new file mode 100644 index 0000000000..05a4c041a3 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/angle-arrow-up-primary-hover.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/angle-arrow-up-primary.png b/themes/digital.gov/static/lib/uswds/img/angle-arrow-up-primary.png new file mode 100644 index 0000000000..16638a3c84 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/angle-arrow-up-primary.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/angle-arrow-up-primary.svg b/themes/digital.gov/static/lib/uswds/img/angle-arrow-up-primary.svg new file mode 100644 index 0000000000..7b3ec39164 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/angle-arrow-up-primary.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/arrow-both.png b/themes/digital.gov/static/lib/uswds/img/arrow-both.png new file mode 100644 index 0000000000..825da503e7 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/arrow-both.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/arrow-both.svg b/themes/digital.gov/static/lib/uswds/img/arrow-both.svg new file mode 100644 index 0000000000..4c7af72ab3 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/arrow-both.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/arrow-down.png b/themes/digital.gov/static/lib/uswds/img/arrow-down.png new file mode 100644 index 0000000000..d6fc7100e6 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/arrow-down.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/arrow-down.svg b/themes/digital.gov/static/lib/uswds/img/arrow-down.svg new file mode 100644 index 0000000000..79e1c6ae30 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/arrow-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/arrow-right.png b/themes/digital.gov/static/lib/uswds/img/arrow-right.png new file mode 100644 index 0000000000..5765f1b6d5 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/arrow-right.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/arrow-right.svg b/themes/digital.gov/static/lib/uswds/img/arrow-right.svg new file mode 100644 index 0000000000..5d29cdde1e --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/arrow-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/circle-124.png b/themes/digital.gov/static/lib/uswds/img/circle-124.png new file mode 100644 index 0000000000..f135de4c72 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/circle-124.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/close-primary.png b/themes/digital.gov/static/lib/uswds/img/close-primary.png new file mode 100644 index 0000000000..47f57dc470 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/close-primary.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/close-primary.svg b/themes/digital.gov/static/lib/uswds/img/close-primary.svg new file mode 100644 index 0000000000..8b0eca4191 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/close-primary.svg @@ -0,0 +1,16 @@ + + + + UI element / Icons / Close + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/close.png b/themes/digital.gov/static/lib/uswds/img/close.png new file mode 100644 index 0000000000..6e1d79e88f Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/close.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/close.svg b/themes/digital.gov/static/lib/uswds/img/close.svg new file mode 100644 index 0000000000..25f10873ec --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/close.svg @@ -0,0 +1,12 @@ + + + + Fill 15 Copy + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/correct8.png b/themes/digital.gov/static/lib/uswds/img/correct8.png new file mode 100755 index 0000000000..4b76107e65 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/correct8.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/correct8.svg b/themes/digital.gov/static/lib/uswds/img/correct8.svg new file mode 100755 index 0000000000..bd7b38b23a --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/correct8.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/correct9.png b/themes/digital.gov/static/lib/uswds/img/correct9.png new file mode 100644 index 0000000000..a83160a098 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/correct9.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/correct9.svg b/themes/digital.gov/static/lib/uswds/img/correct9.svg new file mode 100755 index 0000000000..485f42e5c3 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/correct9.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/external-link-alt-hover.png b/themes/digital.gov/static/lib/uswds/img/external-link-alt-hover.png new file mode 100644 index 0000000000..23ab6efacf Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/external-link-alt-hover.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/external-link-alt-hover.svg b/themes/digital.gov/static/lib/uswds/img/external-link-alt-hover.svg new file mode 100644 index 0000000000..2958691bf4 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/external-link-alt-hover.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/external-link-alt.png b/themes/digital.gov/static/lib/uswds/img/external-link-alt.png new file mode 100644 index 0000000000..084cbc11f7 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/external-link-alt.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/external-link-alt.svg b/themes/digital.gov/static/lib/uswds/img/external-link-alt.svg new file mode 100644 index 0000000000..2c4edd7eeb --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/external-link-alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/external-link-hover.png b/themes/digital.gov/static/lib/uswds/img/external-link-hover.png new file mode 100644 index 0000000000..0b6bf982d8 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/external-link-hover.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/external-link-hover.svg b/themes/digital.gov/static/lib/uswds/img/external-link-hover.svg new file mode 100644 index 0000000000..98942ea939 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/external-link-hover.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/external-link.png b/themes/digital.gov/static/lib/uswds/img/external-link.png new file mode 100644 index 0000000000..39bba235ec Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/external-link.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/external-link.svg b/themes/digital.gov/static/lib/uswds/img/external-link.svg new file mode 100644 index 0000000000..51b6cf2098 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/external-link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/favicons/favicon-114.png b/themes/digital.gov/static/lib/uswds/img/favicons/favicon-114.png new file mode 100755 index 0000000000..dd24afc681 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/favicons/favicon-114.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/favicons/favicon-144.png b/themes/digital.gov/static/lib/uswds/img/favicons/favicon-144.png new file mode 100755 index 0000000000..fe9df4a516 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/favicons/favicon-144.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/favicons/favicon-16.png b/themes/digital.gov/static/lib/uswds/img/favicons/favicon-16.png new file mode 100755 index 0000000000..ca6c38f552 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/favicons/favicon-16.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/favicons/favicon-192.png b/themes/digital.gov/static/lib/uswds/img/favicons/favicon-192.png new file mode 100755 index 0000000000..51f99f2f74 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/favicons/favicon-192.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/favicons/favicon-40.png b/themes/digital.gov/static/lib/uswds/img/favicons/favicon-40.png new file mode 100755 index 0000000000..ae16c78c34 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/favicons/favicon-40.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/favicons/favicon-57.png b/themes/digital.gov/static/lib/uswds/img/favicons/favicon-57.png new file mode 100755 index 0000000000..ad5eceed38 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/favicons/favicon-57.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/favicons/favicon-72.png b/themes/digital.gov/static/lib/uswds/img/favicons/favicon-72.png new file mode 100755 index 0000000000..5a644d02f4 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/favicons/favicon-72.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/favicons/favicon.ico b/themes/digital.gov/static/lib/uswds/img/favicons/favicon.ico new file mode 100755 index 0000000000..c8c9f1c097 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/favicons/favicon.ico differ diff --git a/themes/digital.gov/static/lib/uswds/img/favicons/favicon.png b/themes/digital.gov/static/lib/uswds/img/favicons/favicon.png new file mode 100755 index 0000000000..0d0077a7d5 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/favicons/favicon.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/hero.png b/themes/digital.gov/static/lib/uswds/img/hero.png new file mode 100644 index 0000000000..e56fef6579 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/hero.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/icon-dot-gov.svg b/themes/digital.gov/static/lib/uswds/img/icon-dot-gov.svg new file mode 100644 index 0000000000..641cbb8e2b --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/icon-dot-gov.svg @@ -0,0 +1 @@ +dot gov icon \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/icon-https.svg b/themes/digital.gov/static/lib/uswds/img/icon-https.svg new file mode 100644 index 0000000000..451632366f --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/icon-https.svg @@ -0,0 +1 @@ +https icon \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/logo-img.png b/themes/digital.gov/static/lib/uswds/img/logo-img.png new file mode 100644 index 0000000000..82ab23ec78 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/logo-img.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/minus-alt.png b/themes/digital.gov/static/lib/uswds/img/minus-alt.png new file mode 100644 index 0000000000..9cff2e6c47 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/minus-alt.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/minus-alt.svg b/themes/digital.gov/static/lib/uswds/img/minus-alt.svg new file mode 100644 index 0000000000..177eedd202 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/minus-alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/minus.png b/themes/digital.gov/static/lib/uswds/img/minus.png new file mode 100644 index 0000000000..70a2ea6829 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/minus.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/minus.svg b/themes/digital.gov/static/lib/uswds/img/minus.svg new file mode 100644 index 0000000000..73faba5704 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/minus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/plus-alt.png b/themes/digital.gov/static/lib/uswds/img/plus-alt.png new file mode 100644 index 0000000000..cca318eeea Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/plus-alt.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/plus-alt.svg b/themes/digital.gov/static/lib/uswds/img/plus-alt.svg new file mode 100644 index 0000000000..b97d4bfdcc --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/plus-alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/plus.png b/themes/digital.gov/static/lib/uswds/img/plus.png new file mode 100644 index 0000000000..d919970760 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/plus.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/plus.svg b/themes/digital.gov/static/lib/uswds/img/plus.svg new file mode 100644 index 0000000000..55bdf51f38 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/search-alt.png b/themes/digital.gov/static/lib/uswds/img/search-alt.png new file mode 100755 index 0000000000..89cef6ac6d Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/search-alt.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/search-alt.svg b/themes/digital.gov/static/lib/uswds/img/search-alt.svg new file mode 100755 index 0000000000..98170b9980 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/search-alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/search-primary.png b/themes/digital.gov/static/lib/uswds/img/search-primary.png new file mode 100644 index 0000000000..0791c9f640 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/search-primary.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/search-primary.svg b/themes/digital.gov/static/lib/uswds/img/search-primary.svg new file mode 100644 index 0000000000..e68a017c49 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/search-primary.svg @@ -0,0 +1,12 @@ + + + + Fill 200 Copy + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/search.png b/themes/digital.gov/static/lib/uswds/img/search.png new file mode 100755 index 0000000000..781d5b5809 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/search.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/search.svg b/themes/digital.gov/static/lib/uswds/img/search.svg new file mode 100755 index 0000000000..a50fa62fde --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/digital.gov/static/lib/uswds/img/social-icons/png/facebook25.png b/themes/digital.gov/static/lib/uswds/img/social-icons/png/facebook25.png new file mode 100644 index 0000000000..65df5b9400 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/social-icons/png/facebook25.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/social-icons/png/rss25.png b/themes/digital.gov/static/lib/uswds/img/social-icons/png/rss25.png new file mode 100644 index 0000000000..1ef7dcfbe3 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/social-icons/png/rss25.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/social-icons/png/twitter16.png b/themes/digital.gov/static/lib/uswds/img/social-icons/png/twitter16.png new file mode 100644 index 0000000000..8668da4dce Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/social-icons/png/twitter16.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/social-icons/png/youtube15.png b/themes/digital.gov/static/lib/uswds/img/social-icons/png/youtube15.png new file mode 100644 index 0000000000..b0568137d5 Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/social-icons/png/youtube15.png differ diff --git a/themes/digital.gov/static/lib/uswds/img/social-icons/svg/facebook25.svg b/themes/digital.gov/static/lib/uswds/img/social-icons/svg/facebook25.svg new file mode 100755 index 0000000000..2a136e150e --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/social-icons/svg/facebook25.svg @@ -0,0 +1 @@ + diff --git a/themes/digital.gov/static/lib/uswds/img/social-icons/svg/rss25.svg b/themes/digital.gov/static/lib/uswds/img/social-icons/svg/rss25.svg new file mode 100755 index 0000000000..b95e0b22ff --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/social-icons/svg/rss25.svg @@ -0,0 +1 @@ + diff --git a/themes/digital.gov/static/lib/uswds/img/social-icons/svg/twitter16.svg b/themes/digital.gov/static/lib/uswds/img/social-icons/svg/twitter16.svg new file mode 100755 index 0000000000..de129d6f5f --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/social-icons/svg/twitter16.svg @@ -0,0 +1 @@ + diff --git a/themes/digital.gov/static/lib/uswds/img/social-icons/svg/youtube15.svg b/themes/digital.gov/static/lib/uswds/img/social-icons/svg/youtube15.svg new file mode 100755 index 0000000000..921752952b --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/img/social-icons/svg/youtube15.svg @@ -0,0 +1 @@ + diff --git a/themes/digital.gov/static/lib/uswds/img/us_flag_small.png b/themes/digital.gov/static/lib/uswds/img/us_flag_small.png new file mode 100644 index 0000000000..34b927b42c Binary files /dev/null and b/themes/digital.gov/static/lib/uswds/img/us_flag_small.png differ diff --git a/themes/digital.gov/static/lib/uswds/js/uswds.js b/themes/digital.gov/static/lib/uswds/js/uswds.js new file mode 100644 index 0000000000..696ea3b3ad --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/js/uswds.js @@ -0,0 +1,1863 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** Used to match leading and trailing whitespace. */ +var reTrim = /^\s+|\s+$/g; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = (typeof global === 'undefined' ? 'undefined' : _typeof(global)) == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = (typeof self === 'undefined' ? 'undefined' : _typeof(self)) == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function now() { + return root.Date.now(); +}; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ +function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + result = wait - timeSinceLastCall; + + return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value === 'undefined' ? 'undefined' : _typeof(value); + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag; +} + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? other + '' : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; +} + +module.exports = debounce; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],8:[function(require,module,exports){ +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + +'use strict'; +/* eslint-disable no-unused-vars */ + +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +module.exports = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + +},{}],9:[function(require,module,exports){ +'use strict'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var assign = require('object-assign'); +var delegate = require('../delegate'); +var delegateAll = require('../delegateAll'); + +var DELEGATE_PATTERN = /^(.+):delegate\((.+)\)$/; +var SPACE = ' '; + +var getListeners = function getListeners(type, handler) { + var match = type.match(DELEGATE_PATTERN); + var selector; + if (match) { + type = match[1]; + selector = match[2]; + } + + var options; + if ((typeof handler === 'undefined' ? 'undefined' : _typeof(handler)) === 'object') { + options = { + capture: popKey(handler, 'capture'), + passive: popKey(handler, 'passive') + }; + } + + var listener = { + selector: selector, + delegate: (typeof handler === 'undefined' ? 'undefined' : _typeof(handler)) === 'object' ? delegateAll(handler) : selector ? delegate(selector, handler) : handler, + options: options + }; + + if (type.indexOf(SPACE) > -1) { + return type.split(SPACE).map(function (_type) { + return assign({ type: _type }, listener); + }); + } else { + listener.type = type; + return [listener]; + } +}; + +var popKey = function popKey(obj, key) { + var value = obj[key]; + delete obj[key]; + return value; +}; + +module.exports = function behavior(events, props) { + var listeners = Object.keys(events).reduce(function (memo, type) { + var listeners = getListeners(type, events[type]); + return memo.concat(listeners); + }, []); + + return assign({ + add: function addBehavior(element) { + listeners.forEach(function (listener) { + element.addEventListener(listener.type, listener.delegate, listener.options); + }); + }, + remove: function removeBehavior(element) { + listeners.forEach(function (listener) { + element.removeEventListener(listener.type, listener.delegate, listener.options); + }); + } + }, props); +}; + +},{"../delegate":11,"../delegateAll":12,"object-assign":8}],10:[function(require,module,exports){ +"use strict"; + +module.exports = function compose(functions) { + return function (e) { + return functions.some(function (fn) { + return fn.call(this, e) === false; + }, this); + }; +}; + +},{}],11:[function(require,module,exports){ +'use strict'; + +// polyfill Element.prototype.closest +require('element-closest'); + +module.exports = function delegate(selector, fn) { + return function delegation(event) { + var target = event.target.closest(selector); + if (target) { + return fn.call(target, event); + } + }; +}; + +},{"element-closest":6}],12:[function(require,module,exports){ +'use strict'; + +var delegate = require('../delegate'); +var compose = require('../compose'); + +var SPLAT = '*'; + +module.exports = function delegateAll(selectors) { + var keys = Object.keys(selectors); + + // XXX optimization: if there is only one handler and it applies to + // all elements (the "*" CSS selector), then just return that + // handler + if (keys.length === 1 && keys[0] === SPLAT) { + return selectors[SPLAT]; + } + + var delegates = keys.reduce(function (memo, selector) { + memo.push(delegate(selector, selectors[selector])); + return memo; + }, []); + return compose(delegates); +}; + +},{"../compose":10,"../delegate":11}],13:[function(require,module,exports){ +"use strict"; + +module.exports = function ignore(element, fn) { + return function ignorance(e) { + if (element !== e.target && !element.contains(e.target)) { + return fn.call(this, e); + } + }; +}; + +},{}],14:[function(require,module,exports){ +"use strict"; + +module.exports = function once(listener, options) { + var wrapped = function wrappedOnce(e) { + e.currentTarget.removeEventListener(e.type, wrapped, options); + return listener.call(this, e); + }; + return wrapped; +}; + +},{}],15:[function(require,module,exports){ +'use strict'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var RE_TRIM = /(^\s+)|(\s+$)/g; +var RE_SPLIT = /\s+/; + +var trim = String.prototype.trim ? function (str) { + return str.trim(); +} : function (str) { + return str.replace(RE_TRIM, ''); +}; + +var queryById = function queryById(id) { + return this.querySelector('[id="' + id.replace(/"/g, '\\"') + '"]'); +}; + +module.exports = function resolveIds(ids, doc) { + if (typeof ids !== 'string') { + throw new Error('Expected a string but got ' + (typeof ids === 'undefined' ? 'undefined' : _typeof(ids))); + } + + if (!doc) { + doc = window.document; + } + + var getElementById = doc.getElementById ? doc.getElementById.bind(doc) : queryById.bind(doc); + + ids = trim(ids).split(RE_SPLIT); + + // XXX we can short-circuit here because trimming and splitting a + // string of just whitespace produces an array containing a single, + // empty string + if (ids.length === 1 && ids[0] === '') { + return []; + } + + return ids.map(function (id) { + var el = getElementById(id); + if (!el) { + throw new Error('no element with id: "' + id + '"'); + } + return el; + }); +}; + +},{}],16:[function(require,module,exports){ +'use strict'; + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var behavior = require('../utils/behavior'); +var filter = require('array-filter'); +var forEach = require('array-foreach'); +var toggle = require('../utils/toggle'); +var isElementInViewport = require('../utils/is-in-viewport'); + +var CLICK = require('../events').CLICK; +var PREFIX = require('../config').prefix; + +// XXX match .usa-accordion and .usa-accordion-bordered +var ACCORDION = '.' + PREFIX + '-accordion, .' + PREFIX + '-accordion-bordered'; +var BUTTON = '.' + PREFIX + '-accordion-button[aria-controls]'; +var EXPANDED = 'aria-expanded'; +var MULTISELECTABLE = 'aria-multiselectable'; + +/** + * Toggle a button's "pressed" state, optionally providing a target + * state. + * + * @param {HTMLButtonElement} button + * @param {boolean?} expanded If no state is provided, the current + * state will be toggled (from false to true, and vice-versa). + * @return {boolean} the resulting state + */ +var toggleButton = function toggleButton(button, expanded) { + var accordion = button.closest(ACCORDION); + if (!accordion) { + throw new Error(BUTTON + ' is missing outer ' + ACCORDION); + } + + expanded = toggle(button, expanded); + // XXX multiselectable is opt-in, to preserve legacy behavior + var multiselectable = accordion.getAttribute(MULTISELECTABLE) === 'true'; + + if (expanded && !multiselectable) { + forEach(getAccordionButtons(accordion), function (other) { + if (other !== button) { + toggle(other, false); + } + }); + } +}; + +/** + * @param {HTMLButtonElement} button + * @return {boolean} true + */ +var showButton = function showButton(button) { + return toggleButton(button, true); +}; + +/** + * @param {HTMLButtonElement} button + * @return {boolean} false + */ +var hideButton = function hideButton(button) { + return toggleButton(button, false); +}; + +/** + * Get an Array of button elements belonging directly to the given + * accordion element. + * @param {HTMLElement} accordion + * @return {array} + */ +var getAccordionButtons = function getAccordionButtons(accordion) { + return filter(accordion.querySelectorAll(BUTTON), function (button) { + return button.closest(ACCORDION) === accordion; + }); +}; + +var accordion = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, function (event) { + event.preventDefault(); + toggleButton(this); + + if (this.getAttribute(EXPANDED) === 'true') { + // We were just expanded, but if another accordion was also just + // collapsed, we may no longer be in the viewport. This ensures + // that we are still visible, so the user isn't confused. + if (!isElementInViewport(this)) this.scrollIntoView(); + } +})), { + init: function init(root) { + forEach(root.querySelectorAll(BUTTON), function (button) { + var expanded = button.getAttribute(EXPANDED) === 'true'; + toggleButton(button, expanded); + }); + }, + ACCORDION: ACCORDION, + BUTTON: BUTTON, + show: showButton, + hide: hideButton, + toggle: toggleButton, + getButtons: getAccordionButtons +}); + +/** + * TODO: for 2.0, remove everything below this comment and export the + * behavior directly: + * + * module.exports = behavior({...}); + */ +var Accordion = function Accordion(root) { + this.root = root; + accordion.on(this.root); +}; + +// copy all of the behavior methods and props to Accordion +var assign = require('object-assign'); +assign(Accordion, accordion); + +Accordion.prototype.show = showButton; +Accordion.prototype.hide = hideButton; + +Accordion.prototype.remove = function () { + accordion.off(this.root); +}; + +module.exports = Accordion; + +},{"../config":25,"../events":26,"../utils/behavior":30,"../utils/is-in-viewport":31,"../utils/toggle":35,"array-filter":1,"array-foreach":2,"object-assign":8}],17:[function(require,module,exports){ +'use strict'; + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var behavior = require('../utils/behavior'); +var toggle = require('../utils/toggle'); + +var CLICK = require('../events').CLICK; +var PREFIX = require('../config').prefix; + +var HEADER = '.' + PREFIX + '-banner-header'; +var EXPANDED_CLASS = PREFIX + '-banner-header-expanded'; + +var toggleBanner = function toggleBanner(event) { + event.preventDefault(); + this.closest(HEADER).classList.toggle(EXPANDED_CLASS); + return false; +}; + +module.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, HEADER + ' [aria-controls]', toggleBanner))); + +},{"../config":25,"../events":26,"../utils/behavior":30,"../utils/toggle":35}],18:[function(require,module,exports){ +'use strict'; + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var accordion = require('./accordion'); +var behavior = require('../utils/behavior'); +var debounce = require('lodash.debounce'); +var forEach = require('array-foreach'); +var select = require('../utils/select'); + +var CLICK = require('../events').CLICK; +var PREFIX = require('../config').prefix; + +var HIDDEN = 'hidden'; +var SCOPE = '.' + PREFIX + '-footer-big'; +var NAV = SCOPE + ' nav'; +var BUTTON = NAV + ' .' + PREFIX + '-footer-primary-link'; +var LIST = NAV + ' ul'; + +var HIDE_MAX_WIDTH = 600; +var DEBOUNCE_RATE = 180; + +var showPanel = function showPanel() { + var list = this.closest(LIST); + list.classList.remove(HIDDEN); + + // NB: this *should* always succeed because the button + // selector is scoped to ".{prefix}-footer-big nav" + var lists = list.closest(NAV).querySelectorAll('ul'); + + forEach(lists, function (el) { + if (el !== list) { + el.classList.add(HIDDEN); + } + }); +}; + +var resize = debounce(function () { + var hidden = window.innerWidth < HIDE_MAX_WIDTH; + forEach(select(LIST), function (list) { + list.classList.toggle(HIDDEN, hidden); + }); +}, DEBOUNCE_RATE); + +module.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, showPanel)), { + // export for use elsewhere + HIDE_MAX_WIDTH: HIDE_MAX_WIDTH, + DEBOUNCE_RATE: DEBOUNCE_RATE, + + init: function init(target) { + resize(); + window.addEventListener('resize', resize); + }, + + teardown: function teardown(target) { + window.removeEventListener('resize', resize); + } +}); + +},{"../config":25,"../events":26,"../utils/behavior":30,"../utils/select":32,"./accordion":16,"array-foreach":2,"lodash.debounce":7}],19:[function(require,module,exports){ +'use strict'; + +module.exports = { + accordion: require('./accordion'), + banner: require('./banner'), + footer: require('./footer'), + navigation: require('./navigation'), + password: require('./password'), + search: require('./search'), + skipnav: require('./skipnav'), + validator: require('./validator') +}; + +},{"./accordion":16,"./banner":17,"./footer":18,"./navigation":20,"./password":21,"./search":22,"./skipnav":23,"./validator":24}],20:[function(require,module,exports){ +'use strict'; + +var _CLICK; + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var behavior = require('../utils/behavior'); +var forEach = require('array-foreach'); +var select = require('../utils/select'); +var accordion = require('./accordion'); + +var CLICK = require('../events').CLICK; +var PREFIX = require('../config').prefix; + +var NAV = '.' + PREFIX + '-nav'; +var NAV_LINKS = NAV + ' a'; +var OPENERS = '.' + PREFIX + '-menu-btn'; +var CLOSE_BUTTON = '.' + PREFIX + '-nav-close'; +var OVERLAY = '.' + PREFIX + '-overlay'; +var CLOSERS = CLOSE_BUTTON + ', .' + PREFIX + '-overlay'; +var TOGGLES = [NAV, OVERLAY].join(', '); + +var ACTIVE_CLASS = 'usa-mobile_nav-active'; +var VISIBLE_CLASS = 'is-visible'; + +var isActive = function isActive() { + return document.body.classList.contains(ACTIVE_CLASS); +}; + +var toggleNav = function toggleNav(active) { + var body = document.body; + if (typeof active !== 'boolean') { + active = !isActive(); + } + body.classList.toggle(ACTIVE_CLASS, active); + + forEach(select(TOGGLES), function (el) { + el.classList.toggle(VISIBLE_CLASS, active); + }); + + var closeButton = body.querySelector(CLOSE_BUTTON); + var menuButton = body.querySelector(OPENERS); + + if (active && closeButton) { + // The mobile nav was just activated, so focus on the close button, + // which is just before all the nav elements in the tab order. + closeButton.focus(); + } else if (!active && document.activeElement === closeButton && menuButton) { + // The mobile nav was just deactivated, and focus was on the close + // button, which is no longer visible. We don't want the focus to + // disappear into the void, so focus on the menu button if it's + // visible (this may have been what the user was just focused on, + // if they triggered the mobile nav by mistake). + menuButton.focus(); + } + + return active; +}; + +var resize = function resize() { + var closer = document.body.querySelector(CLOSE_BUTTON); + + if (isActive() && closer && closer.getBoundingClientRect().width === 0) { + // The mobile nav is active, but the close box isn't visible, which + // means the user's viewport has been resized so that it is no longer + // in mobile mode. Let's make the page state consistent by + // deactivating the mobile nav. + toggleNav.call(closer, false); + } +}; + +var navigation = behavior(_defineProperty({}, CLICK, (_CLICK = {}, _defineProperty(_CLICK, OPENERS, toggleNav), _defineProperty(_CLICK, CLOSERS, toggleNav), _defineProperty(_CLICK, NAV_LINKS, function () { + // A navigation link has been clicked! We want to collapse any + // hierarchical navigation UI it's a part of, so that the user + // can focus on whatever they've just selected. + + // Some navigation links are inside accordions; when they're + // clicked, we want to collapse those accordions. + var acc = this.closest(accordion.ACCORDION); + if (acc) { + accordion.getButtons(acc).forEach(function (btn) { + return accordion.hide(btn); + }); + } + + // If the mobile navigation menu is active, we want to hide it. + if (isActive()) { + toggleNav.call(this, false); + } +}), _CLICK)), { + init: function init() { + resize(); + window.addEventListener('resize', resize, false); + }, + teardown: function teardown() { + window.removeEventListener('resize', resize, false); + } +}); + +/** + * TODO for 2.0, remove this statement and export `navigation` directly: + * + * module.exports = behavior({...}); + */ +var assign = require('object-assign'); +module.exports = assign(function (el) { + return navigation.on(el); +}, navigation); + +},{"../config":25,"../events":26,"../utils/behavior":30,"../utils/select":32,"./accordion":16,"array-foreach":2,"object-assign":8}],21:[function(require,module,exports){ +'use strict'; + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var behavior = require('../utils/behavior'); +var toggleFormInput = require('../utils/toggle-form-input'); + +var CLICK = require('../events').CLICK; +var PREFIX = require('../config').prefix; + +var LINK = '.' + PREFIX + '-show_password, .' + PREFIX + '-show_multipassword'; + +var toggle = function toggle(event) { + event.preventDefault(); + toggleFormInput(this); +}; + +module.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, LINK, toggle))); + +},{"../config":25,"../events":26,"../utils/behavior":30,"../utils/toggle-form-input":34}],22:[function(require,module,exports){ +'use strict'; + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var behavior = require('../utils/behavior'); +var forEach = require('array-foreach'); +var ignore = require('receptor/ignore'); +var select = require('../utils/select'); + +var CLICK = require('../events').CLICK; +var PREFIX = require('../config').prefix; + +var BUTTON = '.js-search-button'; +var FORM = '.js-search-form'; +var INPUT = '[type=search]'; +var CONTEXT = 'header'; // XXX +var VISUALLY_HIDDEN = PREFIX + '-sr-only'; + +var lastButton = void 0; + +var showSearch = function showSearch(event) { + toggleSearch(this, true); + lastButton = this; +}; + +var hideSearch = function hideSearch(event) { + toggleSearch(this, false); + lastButton = undefined; +}; + +var getForm = function getForm(button) { + var context = button.closest(CONTEXT); + return context ? context.querySelector(FORM) : document.querySelector(FORM); +}; + +var toggleSearch = function toggleSearch(button, active) { + var form = getForm(button); + if (!form) { + throw new Error('No ' + FORM + ' found for search toggle in ' + CONTEXT + '!'); + } + + button.hidden = active; + form.classList.toggle(VISUALLY_HIDDEN, !active); + + if (active) { + var input = form.querySelector(INPUT); + if (input) { + input.focus(); + } + // when the user clicks _outside_ of the form w/ignore(): hide the + // search, then remove the listener + var listener = ignore(form, function (e) { + if (lastButton) { + hideSearch.call(lastButton); + } + document.body.removeEventListener(CLICK, listener); + }); + + // Normally we would just run this code without a timeout, but + // IE11 and Edge will actually call the listener *immediately* because + // they are currently handling this exact type of event, so we'll + // make sure the browser is done handling the current click event, + // if any, before we attach the listener. + setTimeout(function () { + document.body.addEventListener(CLICK, listener); + }, 0); + } +}; + +var search = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, showSearch)), { + init: function init(target) { + forEach(select(BUTTON, target), function (button) { + toggleSearch(button, false); + }); + }, + teardown: function teardown(target) { + // forget the last button clicked + lastButton = undefined; + } +}); + +/** + * TODO for 2.0, remove this statement and export `navigation` directly: + * + * module.exports = behavior({...}); + */ +var assign = require('object-assign'); +module.exports = assign(function (el) { + return search.on(el); +}, search); + +},{"../config":25,"../events":26,"../utils/behavior":30,"../utils/select":32,"array-foreach":2,"object-assign":8,"receptor/ignore":13}],23:[function(require,module,exports){ +'use strict'; + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var behavior = require('../utils/behavior'); +var once = require('receptor/once'); + +var CLICK = require('../events').CLICK; +var PREFIX = require('../config').prefix; +var LINK = '.' + PREFIX + '-skipnav[href^="#"]'; + +var setTabindex = function setTabindex(event) { + // NB: we know because of the selector we're delegating to below that the + // href already begins with '#' + var id = this.getAttribute('href').slice(1); + var target = document.getElementById(id); + if (target) { + target.setAttribute('tabindex', 0); + target.addEventListener('blur', once(function (event) { + target.setAttribute('tabindex', -1); + })); + } else { + // throw an error? + } +}; + +module.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, LINK, setTabindex))); + +},{"../config":25,"../events":26,"../utils/behavior":30,"receptor/once":14}],24:[function(require,module,exports){ +'use strict'; + +var behavior = require('../utils/behavior'); +var validate = require('../utils/validate-input'); +var debounce = require('lodash.debounce'); + +var change = function change(event) { + return validate(this); +}; + +var validator = behavior({ + 'keyup change': { + 'input[data-validation-element]': change + } +}); + +/** + * TODO for 2.0, remove this statement and export `navigation` directly: + * + * module.exports = behavior({...}); + */ +var assign = require('object-assign'); +module.exports = assign(function (el) { + return validator.on(el); +}, validator); + +},{"../utils/behavior":30,"../utils/validate-input":36,"lodash.debounce":7,"object-assign":8}],25:[function(require,module,exports){ +'use strict'; + +module.exports = { + prefix: 'usa' +}; + +},{}],26:[function(require,module,exports){ +'use strict'; + +module.exports = { + // This used to be conditionally dependent on whether the + // browser supported touch events; if it did, `CLICK` was set to + // `touchstart`. However, this had downsides: + // + // * It pre-empted mobile browsers' default behavior of detecting + // whether a touch turned into a scroll, thereby preventing + // users from using some of our components as scroll surfaces. + // + // * Some devices, such as the Microsoft Surface Pro, support *both* + // touch and clicks. This meant the conditional effectively dropped + // support for the user's mouse, frustrating users who preferred + // it on those systems. + CLICK: 'click' +}; + +},{}],27:[function(require,module,exports){ +'use strict'; + +var elproto = window.HTMLElement.prototype; +var HIDDEN = 'hidden'; + +if (!(HIDDEN in elproto)) { + Object.defineProperty(elproto, HIDDEN, { + get: function get() { + return this.hasAttribute(HIDDEN); + }, + set: function set(value) { + if (value) { + this.setAttribute(HIDDEN, ''); + } else { + this.removeAttribute(HIDDEN); + } + } + }); +} + +},{}],28:[function(require,module,exports){ +'use strict'; +// polyfills HTMLElement.prototype.classList and DOMTokenList + +require('classlist-polyfill'); +// polyfills HTMLElement.prototype.hidden +require('./element-hidden'); + +},{"./element-hidden":27,"classlist-polyfill":3}],29:[function(require,module,exports){ +'use strict'; + +var domready = require('domready'); + +/** + * The 'polyfills' define key ECMAScript 5 methods that may be missing from + * older browsers, so must be loaded first. + */ +require('./polyfills'); + +var uswds = require('./config'); + +var components = require('./components'); +uswds.components = components; + +domready(function () { + var target = document.body; + for (var name in components) { + var behavior = components[name]; + behavior.on(target); + } +}); + +module.exports = uswds; + +},{"./components":19,"./config":25,"./polyfills":28,"domready":4}],30:[function(require,module,exports){ +'use strict'; + +var assign = require('object-assign'); +var forEach = require('array-foreach'); +var Behavior = require('receptor/behavior'); + +var sequence = function sequence() { + var seq = [].slice.call(arguments); + return function (target) { + var _this = this; + + if (!target) { + target = document.body; + } + forEach(seq, function (method) { + if (typeof _this[method] === 'function') { + _this[method].call(_this, target); + } + }); + }; +}; + +/** + * @name behavior + * @param {object} events + * @param {object?} props + * @return {receptor.behavior} + */ +module.exports = function (events, props) { + return Behavior(events, assign({ + on: sequence('init', 'add'), + off: sequence('teardown', 'remove') + }, props)); +}; + +},{"array-foreach":2,"object-assign":8,"receptor/behavior":9}],31:[function(require,module,exports){ +"use strict"; + +// https://stackoverflow.com/a/7557433 +function isElementInViewport(el) { + var win = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window; + var docEl = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document.documentElement; + + var rect = el.getBoundingClientRect(); + + return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (win.innerHeight || docEl.clientHeight) && rect.right <= (win.innerWidth || docEl.clientWidth); +} + +module.exports = isElementInViewport; + +},{}],32:[function(require,module,exports){ +'use strict'; + +/** + * @name isElement + * @desc returns whether or not the given argument is a DOM element. + * @param {any} value + * @return {boolean} + */ + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var isElement = function isElement(value) { + return value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.nodeType === 1; +}; + +/** + * @name select + * @desc selects elements from the DOM by class selector or ID selector. + * @param {string} selector - The selector to traverse the DOM with. + * @param {Document|HTMLElement?} context - The context to traverse the DOM + * in. If not provided, it defaults to the document. + * @return {HTMLElement[]} - An array of DOM nodes or an empty array. + */ +module.exports = function select(selector, context) { + + if (typeof selector !== 'string') { + return []; + } + + if (!context || !isElement(context)) { + context = window.document; + } + + var selection = context.querySelectorAll(selector); + return Array.prototype.slice.call(selection); +}; + +},{}],33:[function(require,module,exports){ +'use strict'; + +/** + * Flips given INPUT elements between masked (hiding the field value) and unmasked + * @param {Array.HTMLElement} fields - An array of INPUT elements + * @param {Boolean} mask - Whether the mask should be applied, hiding the field value + */ +module.exports = function (field, mask) { + field.setAttribute('autocapitalize', 'off'); + field.setAttribute('autocorrect', 'off'); + field.setAttribute('type', mask ? 'password' : 'text'); +}; + +},{}],34:[function(require,module,exports){ +'use strict'; + +var forEach = require('array-foreach'); +var resolveIdRefs = require('resolve-id-refs'); +var select = require('./select'); +var toggleFieldMask = require('./toggle-field-mask'); + +var CONTROLS = 'aria-controls'; +var PRESSED = 'aria-pressed'; +var SHOW_ATTR = 'data-show-text'; +var HIDE_ATTR = 'data-hide-text'; + +/** + * Replace the word "Show" (or "show") with "Hide" (or "hide") in a string. + * @param {string} showText + * @return {strong} hideText + */ +var getHideText = function getHideText(showText) { + return showText.replace(/\bShow\b/i, function (show) { + return ('S' === show[0] ? 'H' : 'h') + 'ide'; + }); +}; + +/** + * Component that decorates an HTML element with the ability to toggle the + * masked state of an input field (like a password) when clicked. + * The ids of the fields to be masked will be pulled directly from the button's + * `aria-controls` attribute. + * + * @param {HTMLElement} el Parent element containing the fields to be masked + * @return {boolean} + */ +module.exports = function (el) { + // this is the *target* state: + // * if the element has the attr and it's !== "true", pressed is true + // * otherwise, pressed is false + var pressed = el.hasAttribute(PRESSED) && el.getAttribute(PRESSED) !== 'true'; + + var fields = resolveIdRefs(el.getAttribute(CONTROLS)); + forEach(fields, function (field) { + return toggleFieldMask(field, pressed); + }); + + if (!el.hasAttribute(SHOW_ATTR)) { + el.setAttribute(SHOW_ATTR, el.textContent); + } + + var showText = el.getAttribute(SHOW_ATTR); + var hideText = el.getAttribute(HIDE_ATTR) || getHideText(showText); + + el.textContent = pressed ? showText : hideText; + el.setAttribute(PRESSED, pressed); + return pressed; +}; + +},{"./select":32,"./toggle-field-mask":33,"array-foreach":2,"resolve-id-refs":15}],35:[function(require,module,exports){ +'use strict'; + +var EXPANDED = 'aria-expanded'; +var CONTROLS = 'aria-controls'; +var HIDDEN = 'aria-hidden'; + +module.exports = function (button, expanded) { + + if (typeof expanded !== 'boolean') { + expanded = button.getAttribute(EXPANDED) === 'false'; + } + button.setAttribute(EXPANDED, expanded); + + var id = button.getAttribute(CONTROLS); + var controls = document.getElementById(id); + if (!controls) { + throw new Error('No toggle target found with id: "' + id + '"'); + } + + controls.setAttribute(HIDDEN, !expanded); + return expanded; +}; + +},{}],36:[function(require,module,exports){ +'use strict'; + +var dataset = require('elem-dataset'); + +var PREFIX = require('../config').prefix; +var CHECKED = 'aria-checked'; +var CHECKED_CLASS = PREFIX + '-checklist-checked'; + +module.exports = function validate(el) { + var data = dataset(el); + var id = data.validationElement; + var checkList = id.charAt(0) === '#' ? document.querySelector(id) : document.getElementById(id); + + if (!checkList) { + throw new Error('No validation element found with id: "' + id + '"'); + } + + for (var key in data) { + if (key.startsWith('validate')) { + var validatorName = key.substr('validate'.length).toLowerCase(); + var validatorPattern = new RegExp(data[key]); + var validatorSelector = '[data-validator="' + validatorName + '"]'; + var validatorCheckbox = checkList.querySelector(validatorSelector); + if (!validatorCheckbox) { + throw new Error('No validator checkbox found for: "' + validatorName + '"'); + } + + var checked = validatorPattern.test(el.value); + validatorCheckbox.classList.toggle(CHECKED_CLASS, checked); + validatorCheckbox.setAttribute(CHECKED, checked); + } + } +}; + +},{"../config":25,"elem-dataset":5}]},{},[29]) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYXJyYXktZmlsdGVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FycmF5LWZvcmVhY2gvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2xhc3NsaXN0LXBvbHlmaWxsL3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kb21yZWFkeS9yZWFkeS5qcyIsIm5vZGVfbW9kdWxlcy9lbGVtLWRhdGFzZXQvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9lbGVtZW50LWNsb3Nlc3QvZWxlbWVudC1jbG9zZXN0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC5kZWJvdW5jZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlY2VwdG9yL2JlaGF2aW9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlY2VwdG9yL2NvbXBvc2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVjZXB0b3IvZGVsZWdhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVjZXB0b3IvZGVsZWdhdGVBbGwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVjZXB0b3IvaWdub3JlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlY2VwdG9yL29uY2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb2x2ZS1pZC1yZWZzL2luZGV4LmpzIiwic3JjL2pzL2NvbXBvbmVudHMvYWNjb3JkaW9uLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvYmFubmVyLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvZm9vdGVyLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvaW5kZXguanMiLCJzcmMvanMvY29tcG9uZW50cy9uYXZpZ2F0aW9uLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvcGFzc3dvcmQuanMiLCJzcmMvanMvY29tcG9uZW50cy9zZWFyY2guanMiLCJzcmMvanMvY29tcG9uZW50cy9za2lwbmF2LmpzIiwic3JjL2pzL2NvbXBvbmVudHMvdmFsaWRhdG9yLmpzIiwic3JjL2pzL2NvbmZpZy5qcyIsInNyYy9qcy9ldmVudHMuanMiLCJzcmMvanMvcG9seWZpbGxzL2VsZW1lbnQtaGlkZGVuLmpzIiwic3JjL2pzL3BvbHlmaWxscy9pbmRleC5qcyIsInNyYy9qcy9zdGFydC5qcyIsInNyYy9qcy91dGlscy9iZWhhdmlvci5qcyIsInNyYy9qcy91dGlscy9pcy1pbi12aWV3cG9ydC5qcyIsInNyYy9qcy91dGlscy9zZWxlY3QuanMiLCJzcmMvanMvdXRpbHMvdG9nZ2xlLWZpZWxkLW1hc2suanMiLCJzcmMvanMvdXRpbHMvdG9nZ2xlLWZvcm0taW5wdXQuanMiLCJzcmMvanMvdXRpbHMvdG9nZ2xlLmpzIiwic3JjL2pzL3V0aWxzL3ZhbGlkYXRlLWlucHV0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7QUNDQTs7Ozs7Ozs7OztBQVVBLE9BQU8sT0FBUCxHQUFpQixVQUFVLEdBQVYsRUFBZSxFQUFmLEVBQW1CLElBQW5CLEVBQXlCO0FBQ3hDLE1BQUksSUFBSSxNQUFSLEVBQWdCLE9BQU8sSUFBSSxNQUFKLENBQVcsRUFBWCxFQUFlLElBQWYsQ0FBUDtBQUNoQixNQUFJLEtBQUssQ0FBTCxLQUFXLEdBQVgsSUFBa0IsU0FBUyxHQUEvQixFQUFvQyxNQUFNLElBQUksU0FBSixFQUFOO0FBQ3BDLE1BQUksY0FBYyxPQUFPLEVBQXpCLEVBQTZCLE1BQU0sSUFBSSxTQUFKLEVBQU47QUFDN0IsTUFBSSxNQUFNLEVBQVY7QUFDQSxPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksSUFBSSxNQUF4QixFQUFnQyxHQUFoQyxFQUFxQztBQUNuQyxRQUFJLENBQUMsT0FBTyxJQUFQLENBQVksR0FBWixFQUFpQixDQUFqQixDQUFMLEVBQTBCO0FBQzFCLFFBQUksTUFBTSxJQUFJLENBQUosQ0FBVjtBQUNBLFFBQUksR0FBRyxJQUFILENBQVEsSUFBUixF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QixXQUE5QixFQUF0QjtBQUNBLFVBQU0sbUJBQW1CLElBQUksTUFBSixDQUFXLEtBQU0sR0FBTixDQUFYLENBQXpCO0FBQ0EsVUFBTSwwQ0FBd0MsYUFBeEMsT0FBTjtBQUNBLFVBQU0sb0JBQW9CLFVBQVUsYUFBVixDQUF3QixpQkFBeEIsQ0FBMUI7QUFDQSxVQUFJLENBQUMsaUJBQUwsRUFBd0I7QUFDdEIsY0FBTSxJQUFJLEtBQUosd0NBQ2lDLGFBRGpDLE9BQU47QUFHRDs7QUFFRCxVQUFNLFVBQVUsaUJBQWlCLElBQWpCLENBQXNCLEdBQUcsS0FBekIsQ0FBaEI7QUFDQSx3QkFBa0IsU0FBbEIsQ0FBNEIsTUFBNUIsQ0FBbUMsYUFBbkMsRUFBa0QsT0FBbEQ7QUFDQSx3QkFBa0IsWUFBbEIsQ0FBK0IsT0FBL0IsRUFBd0MsT0FBeEM7QUFDRDtBQUNGO0FBQ0YsQ0E5QkQiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiXG4vKipcbiAqIEFycmF5I2ZpbHRlci5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge09iamVjdD19IHNlbGZcbiAqIEByZXR1cm4ge0FycmF5fVxuICogQHRocm93IFR5cGVFcnJvclxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyciwgZm4sIHNlbGYpIHtcbiAgaWYgKGFyci5maWx0ZXIpIHJldHVybiBhcnIuZmlsdGVyKGZuLCBzZWxmKTtcbiAgaWYgKHZvaWQgMCA9PT0gYXJyIHx8IG51bGwgPT09IGFycikgdGhyb3cgbmV3IFR5cGVFcnJvcjtcbiAgaWYgKCdmdW5jdGlvbicgIT0gdHlwZW9mIGZuKSB0aHJvdyBuZXcgVHlwZUVycm9yO1xuICB2YXIgcmV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFoYXNPd24uY2FsbChhcnIsIGkpKSBjb250aW51ZTtcbiAgICB2YXIgdmFsID0gYXJyW2ldO1xuICAgIGlmIChmbi5jYWxsKHNlbGYsIHZhbCwgaSwgYXJyKSkgcmV0LnB1c2godmFsKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufTtcblxudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4iLCIvKipcbiAqIGFycmF5LWZvcmVhY2hcbiAqICAgQXJyYXkjZm9yRWFjaCBwb255ZmlsbCBmb3Igb2xkZXIgYnJvd3NlcnNcbiAqICAgKFBvbnlmaWxsOiBBIHBvbHlmaWxsIHRoYXQgZG9lc24ndCBvdmVyd3JpdGUgdGhlIG5hdGl2ZSBtZXRob2QpXG4gKiBcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90d2FkYS9hcnJheS1mb3JlYWNoXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYgVGFrdXRvIFdhZGFcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqICAgaHR0cHM6Ly9naXRodWIuY29tL3R3YWRhL2FycmF5LWZvcmVhY2gvYmxvYi9tYXN0ZXIvTUlULUxJQ0VOU0VcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZvckVhY2ggKGFyeSwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBpZiAoYXJ5LmZvckVhY2gpIHtcbiAgICAgICAgYXJ5LmZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSs9MSkge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIGFyeVtpXSwgaSwgYXJ5KTtcbiAgICB9XG59O1xuIiwiLypcbiAqIGNsYXNzTGlzdC5qczogQ3Jvc3MtYnJvd3NlciBmdWxsIGVsZW1lbnQuY2xhc3NMaXN0IGltcGxlbWVudGF0aW9uLlxuICogMS4xLjIwMTcwNDI3XG4gKlxuICogQnkgRWxpIEdyZXksIGh0dHA6Ly9lbGlncmV5LmNvbVxuICogTGljZW5zZTogRGVkaWNhdGVkIHRvIHRoZSBwdWJsaWMgZG9tYWluLlxuICogICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsaWdyZXkvY2xhc3NMaXN0LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWRcbiAqL1xuXG4vKmdsb2JhbCBzZWxmLCBkb2N1bWVudCwgRE9NRXhjZXB0aW9uICovXG5cbi8qISBAc291cmNlIGh0dHA6Ly9wdXJsLmVsaWdyZXkuY29tL2dpdGh1Yi9jbGFzc0xpc3QuanMvYmxvYi9tYXN0ZXIvY2xhc3NMaXN0LmpzICovXG5cbmlmIChcImRvY3VtZW50XCIgaW4gd2luZG93LnNlbGYpIHtcblxuLy8gRnVsbCBwb2x5ZmlsbCBmb3IgYnJvd3NlcnMgd2l0aCBubyBjbGFzc0xpc3Qgc3VwcG9ydFxuLy8gSW5jbHVkaW5nIElFIDwgRWRnZSBtaXNzaW5nIFNWR0VsZW1lbnQuY2xhc3NMaXN0XG5pZiAoIShcImNsYXNzTGlzdFwiIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJfXCIpKSBcblx0fHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TICYmICEoXCJjbGFzc0xpc3RcIiBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiZ1wiKSkpIHtcblxuKGZ1bmN0aW9uICh2aWV3KSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5pZiAoISgnRWxlbWVudCcgaW4gdmlldykpIHJldHVybjtcblxudmFyXG5cdCAgY2xhc3NMaXN0UHJvcCA9IFwiY2xhc3NMaXN0XCJcblx0LCBwcm90b1Byb3AgPSBcInByb3RvdHlwZVwiXG5cdCwgZWxlbUN0clByb3RvID0gdmlldy5FbGVtZW50W3Byb3RvUHJvcF1cblx0LCBvYmpDdHIgPSBPYmplY3Rcblx0LCBzdHJUcmltID0gU3RyaW5nW3Byb3RvUHJvcF0udHJpbSB8fCBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgXCJcIik7XG5cdH1cblx0LCBhcnJJbmRleE9mID0gQXJyYXlbcHJvdG9Qcm9wXS5pbmRleE9mIHx8IGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0dmFyXG5cdFx0XHQgIGkgPSAwXG5cdFx0XHQsIGxlbiA9IHRoaXMubGVuZ3RoXG5cdFx0O1xuXHRcdGZvciAoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChpIGluIHRoaXMgJiYgdGhpc1tpXSA9PT0gaXRlbSkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9XG5cdC8vIFZlbmRvcnM6IHBsZWFzZSBhbGxvdyBjb250ZW50IGNvZGUgdG8gaW5zdGFudGlhdGUgRE9NRXhjZXB0aW9uc1xuXHQsIERPTUV4ID0gZnVuY3Rpb24gKHR5cGUsIG1lc3NhZ2UpIHtcblx0XHR0aGlzLm5hbWUgPSB0eXBlO1xuXHRcdHRoaXMuY29kZSA9IERPTUV4Y2VwdGlvblt0eXBlXTtcblx0XHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXHR9XG5cdCwgY2hlY2tUb2tlbkFuZEdldEluZGV4ID0gZnVuY3Rpb24gKGNsYXNzTGlzdCwgdG9rZW4pIHtcblx0XHRpZiAodG9rZW4gPT09IFwiXCIpIHtcblx0XHRcdHRocm93IG5ldyBET01FeChcblx0XHRcdFx0ICBcIlNZTlRBWF9FUlJcIlxuXHRcdFx0XHQsIFwiQW4gaW52YWxpZCBvciBpbGxlZ2FsIHN0cmluZyB3YXMgc3BlY2lmaWVkXCJcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmICgvXFxzLy50ZXN0KHRva2VuKSkge1xuXHRcdFx0dGhyb3cgbmV3IERPTUV4KFxuXHRcdFx0XHQgIFwiSU5WQUxJRF9DSEFSQUNURVJfRVJSXCJcblx0XHRcdFx0LCBcIlN0cmluZyBjb250YWlucyBhbiBpbnZhbGlkIGNoYXJhY3RlclwiXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gYXJySW5kZXhPZi5jYWxsKGNsYXNzTGlzdCwgdG9rZW4pO1xuXHR9XG5cdCwgQ2xhc3NMaXN0ID0gZnVuY3Rpb24gKGVsZW0pIHtcblx0XHR2YXJcblx0XHRcdCAgdHJpbW1lZENsYXNzZXMgPSBzdHJUcmltLmNhbGwoZWxlbS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiKVxuXHRcdFx0LCBjbGFzc2VzID0gdHJpbW1lZENsYXNzZXMgPyB0cmltbWVkQ2xhc3Nlcy5zcGxpdCgvXFxzKy8pIDogW11cblx0XHRcdCwgaSA9IDBcblx0XHRcdCwgbGVuID0gY2xhc3Nlcy5sZW5ndGhcblx0XHQ7XG5cdFx0Zm9yICg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0dGhpcy5wdXNoKGNsYXNzZXNbaV0pO1xuXHRcdH1cblx0XHR0aGlzLl91cGRhdGVDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMudG9TdHJpbmcoKSk7XG5cdFx0fTtcblx0fVxuXHQsIGNsYXNzTGlzdFByb3RvID0gQ2xhc3NMaXN0W3Byb3RvUHJvcF0gPSBbXVxuXHQsIGNsYXNzTGlzdEdldHRlciA9IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gbmV3IENsYXNzTGlzdCh0aGlzKTtcblx0fVxuO1xuLy8gTW9zdCBET01FeGNlcHRpb24gaW1wbGVtZW50YXRpb25zIGRvbid0IGFsbG93IGNhbGxpbmcgRE9NRXhjZXB0aW9uJ3MgdG9TdHJpbmcoKVxuLy8gb24gbm9uLURPTUV4Y2VwdGlvbnMuIEVycm9yJ3MgdG9TdHJpbmcoKSBpcyBzdWZmaWNpZW50IGhlcmUuXG5ET01FeFtwcm90b1Byb3BdID0gRXJyb3JbcHJvdG9Qcm9wXTtcbmNsYXNzTGlzdFByb3RvLml0ZW0gPSBmdW5jdGlvbiAoaSkge1xuXHRyZXR1cm4gdGhpc1tpXSB8fCBudWxsO1xufTtcbmNsYXNzTGlzdFByb3RvLmNvbnRhaW5zID0gZnVuY3Rpb24gKHRva2VuKSB7XG5cdHRva2VuICs9IFwiXCI7XG5cdHJldHVybiBjaGVja1Rva2VuQW5kR2V0SW5kZXgodGhpcywgdG9rZW4pICE9PSAtMTtcbn07XG5jbGFzc0xpc3RQcm90by5hZGQgPSBmdW5jdGlvbiAoKSB7XG5cdHZhclxuXHRcdCAgdG9rZW5zID0gYXJndW1lbnRzXG5cdFx0LCBpID0gMFxuXHRcdCwgbCA9IHRva2Vucy5sZW5ndGhcblx0XHQsIHRva2VuXG5cdFx0LCB1cGRhdGVkID0gZmFsc2Vcblx0O1xuXHRkbyB7XG5cdFx0dG9rZW4gPSB0b2tlbnNbaV0gKyBcIlwiO1xuXHRcdGlmIChjaGVja1Rva2VuQW5kR2V0SW5kZXgodGhpcywgdG9rZW4pID09PSAtMSkge1xuXHRcdFx0dGhpcy5wdXNoKHRva2VuKTtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXHR3aGlsZSAoKytpIDwgbCk7XG5cblx0aWYgKHVwZGF0ZWQpIHtcblx0XHR0aGlzLl91cGRhdGVDbGFzc05hbWUoKTtcblx0fVxufTtcbmNsYXNzTGlzdFByb3RvLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0dmFyXG5cdFx0ICB0b2tlbnMgPSBhcmd1bWVudHNcblx0XHQsIGkgPSAwXG5cdFx0LCBsID0gdG9rZW5zLmxlbmd0aFxuXHRcdCwgdG9rZW5cblx0XHQsIHVwZGF0ZWQgPSBmYWxzZVxuXHRcdCwgaW5kZXhcblx0O1xuXHRkbyB7XG5cdFx0dG9rZW4gPSB0b2tlbnNbaV0gKyBcIlwiO1xuXHRcdGluZGV4ID0gY2hlY2tUb2tlbkFuZEdldEluZGV4KHRoaXMsIHRva2VuKTtcblx0XHR3aGlsZSAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHR0aGlzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHRcdGluZGV4ID0gY2hlY2tUb2tlbkFuZEdldEluZGV4KHRoaXMsIHRva2VuKTtcblx0XHR9XG5cdH1cblx0d2hpbGUgKCsraSA8IGwpO1xuXG5cdGlmICh1cGRhdGVkKSB7XG5cdFx0dGhpcy5fdXBkYXRlQ2xhc3NOYW1lKCk7XG5cdH1cbn07XG5jbGFzc0xpc3RQcm90by50b2dnbGUgPSBmdW5jdGlvbiAodG9rZW4sIGZvcmNlKSB7XG5cdHRva2VuICs9IFwiXCI7XG5cblx0dmFyXG5cdFx0ICByZXN1bHQgPSB0aGlzLmNvbnRhaW5zKHRva2VuKVxuXHRcdCwgbWV0aG9kID0gcmVzdWx0ID9cblx0XHRcdGZvcmNlICE9PSB0cnVlICYmIFwicmVtb3ZlXCJcblx0XHQ6XG5cdFx0XHRmb3JjZSAhPT0gZmFsc2UgJiYgXCJhZGRcIlxuXHQ7XG5cblx0aWYgKG1ldGhvZCkge1xuXHRcdHRoaXNbbWV0aG9kXSh0b2tlbik7XG5cdH1cblxuXHRpZiAoZm9yY2UgPT09IHRydWUgfHwgZm9yY2UgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuIGZvcmNlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAhcmVzdWx0O1xuXHR9XG59O1xuY2xhc3NMaXN0UHJvdG8udG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdHJldHVybiB0aGlzLmpvaW4oXCIgXCIpO1xufTtcblxuaWYgKG9iakN0ci5kZWZpbmVQcm9wZXJ0eSkge1xuXHR2YXIgY2xhc3NMaXN0UHJvcERlc2MgPSB7XG5cdFx0ICBnZXQ6IGNsYXNzTGlzdEdldHRlclxuXHRcdCwgZW51bWVyYWJsZTogdHJ1ZVxuXHRcdCwgY29uZmlndXJhYmxlOiB0cnVlXG5cdH07XG5cdHRyeSB7XG5cdFx0b2JqQ3RyLmRlZmluZVByb3BlcnR5KGVsZW1DdHJQcm90bywgY2xhc3NMaXN0UHJvcCwgY2xhc3NMaXN0UHJvcERlc2MpO1xuXHR9IGNhdGNoIChleCkgeyAvLyBJRSA4IGRvZXNuJ3Qgc3VwcG9ydCBlbnVtZXJhYmxlOnRydWVcblx0XHQvLyBhZGRpbmcgdW5kZWZpbmVkIHRvIGZpZ2h0IHRoaXMgaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL2VsaWdyZXkvY2xhc3NMaXN0LmpzL2lzc3Vlcy8zNlxuXHRcdC8vIG1vZGVybmllIElFOC1NU1c3IG1hY2hpbmUgaGFzIElFOCA4LjAuNjAwMS4xODcwMiBhbmQgaXMgYWZmZWN0ZWRcblx0XHRpZiAoZXgubnVtYmVyID09PSB1bmRlZmluZWQgfHwgZXgubnVtYmVyID09PSAtMHg3RkY1RUM1NCkge1xuXHRcdFx0Y2xhc3NMaXN0UHJvcERlc2MuZW51bWVyYWJsZSA9IGZhbHNlO1xuXHRcdFx0b2JqQ3RyLmRlZmluZVByb3BlcnR5KGVsZW1DdHJQcm90bywgY2xhc3NMaXN0UHJvcCwgY2xhc3NMaXN0UHJvcERlc2MpO1xuXHRcdH1cblx0fVxufSBlbHNlIGlmIChvYmpDdHJbcHJvdG9Qcm9wXS5fX2RlZmluZUdldHRlcl9fKSB7XG5cdGVsZW1DdHJQcm90by5fX2RlZmluZUdldHRlcl9fKGNsYXNzTGlzdFByb3AsIGNsYXNzTGlzdEdldHRlcik7XG59XG5cbn0od2luZG93LnNlbGYpKTtcblxufVxuXG4vLyBUaGVyZSBpcyBmdWxsIG9yIHBhcnRpYWwgbmF0aXZlIGNsYXNzTGlzdCBzdXBwb3J0LCBzbyBqdXN0IGNoZWNrIGlmIHdlIG5lZWRcbi8vIHRvIG5vcm1hbGl6ZSB0aGUgYWRkL3JlbW92ZSBhbmQgdG9nZ2xlIEFQSXMuXG5cbihmdW5jdGlvbiAoKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJfXCIpO1xuXG5cdHRlc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJjMVwiLCBcImMyXCIpO1xuXG5cdC8vIFBvbHlmaWxsIGZvciBJRSAxMC8xMSBhbmQgRmlyZWZveCA8MjYsIHdoZXJlIGNsYXNzTGlzdC5hZGQgYW5kXG5cdC8vIGNsYXNzTGlzdC5yZW1vdmUgZXhpc3QgYnV0IHN1cHBvcnQgb25seSBvbmUgYXJndW1lbnQgYXQgYSB0aW1lLlxuXHRpZiAoIXRlc3RFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImMyXCIpKSB7XG5cdFx0dmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uKG1ldGhvZCkge1xuXHRcdFx0dmFyIG9yaWdpbmFsID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZVttZXRob2RdO1xuXG5cdFx0XHRET01Ub2tlbkxpc3QucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih0b2tlbikge1xuXHRcdFx0XHR2YXIgaSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdFx0XHR0b2tlbiA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdFx0XHRvcmlnaW5hbC5jYWxsKHRoaXMsIHRva2VuKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9O1xuXHRcdGNyZWF0ZU1ldGhvZCgnYWRkJyk7XG5cdFx0Y3JlYXRlTWV0aG9kKCdyZW1vdmUnKTtcblx0fVxuXG5cdHRlc3RFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoXCJjM1wiLCBmYWxzZSk7XG5cblx0Ly8gUG9seWZpbGwgZm9yIElFIDEwIGFuZCBGaXJlZm94IDwyNCwgd2hlcmUgY2xhc3NMaXN0LnRvZ2dsZSBkb2VzIG5vdFxuXHQvLyBzdXBwb3J0IHRoZSBzZWNvbmQgYXJndW1lbnQuXG5cdGlmICh0ZXN0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJjM1wiKSkge1xuXHRcdHZhciBfdG9nZ2xlID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS50b2dnbGU7XG5cblx0XHRET01Ub2tlbkxpc3QucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uKHRva2VuLCBmb3JjZSkge1xuXHRcdFx0aWYgKDEgaW4gYXJndW1lbnRzICYmICF0aGlzLmNvbnRhaW5zKHRva2VuKSA9PT0gIWZvcmNlKSB7XG5cdFx0XHRcdHJldHVybiBmb3JjZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBfdG9nZ2xlLmNhbGwodGhpcywgdG9rZW4pO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0fVxuXG5cdHRlc3RFbGVtZW50ID0gbnVsbDtcbn0oKSk7XG5cbn1cbiIsIi8qIVxuICAqIGRvbXJlYWR5IChjKSBEdXN0aW4gRGlheiAyMDE0IC0gTGljZW5zZSBNSVRcbiAgKi9cbiFmdW5jdGlvbiAobmFtZSwgZGVmaW5pdGlvbikge1xuXG4gIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnKSBtb2R1bGUuZXhwb3J0cyA9IGRlZmluaXRpb24oKVxuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcpIGRlZmluZShkZWZpbml0aW9uKVxuICBlbHNlIHRoaXNbbmFtZV0gPSBkZWZpbml0aW9uKClcblxufSgnZG9tcmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgdmFyIGZucyA9IFtdLCBsaXN0ZW5lclxuICAgICwgZG9jID0gZG9jdW1lbnRcbiAgICAsIGhhY2sgPSBkb2MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsXG4gICAgLCBkb21Db250ZW50TG9hZGVkID0gJ0RPTUNvbnRlbnRMb2FkZWQnXG4gICAgLCBsb2FkZWQgPSAoaGFjayA/IC9ebG9hZGVkfF5jLyA6IC9ebG9hZGVkfF5pfF5jLykudGVzdChkb2MucmVhZHlTdGF0ZSlcblxuXG4gIGlmICghbG9hZGVkKVxuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcihkb21Db250ZW50TG9hZGVkLCBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb21Db250ZW50TG9hZGVkLCBsaXN0ZW5lcilcbiAgICBsb2FkZWQgPSAxXG4gICAgd2hpbGUgKGxpc3RlbmVyID0gZm5zLnNoaWZ0KCkpIGxpc3RlbmVyKClcbiAgfSlcblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgbG9hZGVkID8gc2V0VGltZW91dChmbiwgMCkgOiBmbnMucHVzaChmbilcbiAgfVxuXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gPDMgTW9kZXJuaXpyXG4vLyBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vTW9kZXJuaXpyL01vZGVybml6ci9tYXN0ZXIvZmVhdHVyZS1kZXRlY3RzL2RvbS9kYXRhc2V0LmpzXG5cbmZ1bmN0aW9uIHVzZU5hdGl2ZSgpIHtcblx0dmFyIGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0ZWxlbS5zZXRBdHRyaWJ1dGUoJ2RhdGEtYS1iJywgJ2MnKTtcblxuXHRyZXR1cm4gQm9vbGVhbihlbGVtLmRhdGFzZXQgJiYgZWxlbS5kYXRhc2V0LmFCID09PSAnYycpO1xufVxuXG5mdW5jdGlvbiBuYXRpdmVEYXRhc2V0KGVsZW1lbnQpIHtcblx0cmV0dXJuIGVsZW1lbnQuZGF0YXNldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1c2VOYXRpdmUoKSA/IG5hdGl2ZURhdGFzZXQgOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHR2YXIgbWFwID0ge307XG5cdHZhciBhdHRyaWJ1dGVzID0gZWxlbWVudC5hdHRyaWJ1dGVzO1xuXG5cdGZ1bmN0aW9uIGdldHRlcigpIHtcblx0XHRyZXR1cm4gdGhpcy52YWx1ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldHRlcihuYW1lLCB2YWx1ZSkge1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdGZvciAodmFyIGkgPSAwLCBqID0gYXR0cmlidXRlcy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHR2YXIgYXR0cmlidXRlID0gYXR0cmlidXRlc1tpXTtcblxuXHRcdGlmIChhdHRyaWJ1dGUpIHtcblx0XHRcdHZhciBuYW1lID0gYXR0cmlidXRlLm5hbWU7XG5cblx0XHRcdGlmIChuYW1lLmluZGV4T2YoJ2RhdGEtJykgPT09IDApIHtcblx0XHRcdFx0dmFyIHByb3AgPSBuYW1lLnNsaWNlKDUpLnJlcGxhY2UoLy0uL2csIGZ1bmN0aW9uICh1KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHUuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHZhciB2YWx1ZSA9IGF0dHJpYnV0ZS52YWx1ZTtcblxuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobWFwLCBwcm9wLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRnZXQ6IGdldHRlci5iaW5kKHsgdmFsdWU6IHZhbHVlIHx8ICcnIH0pLFxuXHRcdFx0XHRcdHNldDogc2V0dGVyLmJpbmQoZWxlbWVudCwgbmFtZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hcDtcbn07XG5cbiIsIi8vIGVsZW1lbnQtY2xvc2VzdCB8IENDMC0xLjAgfCBnaXRodWIuY29tL2pvbmF0aGFudG5lYWwvY2xvc2VzdFxuXG4oZnVuY3Rpb24gKEVsZW1lbnRQcm90bykge1xuXHRpZiAodHlwZW9mIEVsZW1lbnRQcm90by5tYXRjaGVzICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0RWxlbWVudFByb3RvLm1hdGNoZXMgPSBFbGVtZW50UHJvdG8ubXNNYXRjaGVzU2VsZWN0b3IgfHwgRWxlbWVudFByb3RvLm1vek1hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50UHJvdG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8IGZ1bmN0aW9uIG1hdGNoZXMoc2VsZWN0b3IpIHtcblx0XHRcdHZhciBlbGVtZW50ID0gdGhpcztcblx0XHRcdHZhciBlbGVtZW50cyA9IChlbGVtZW50LmRvY3VtZW50IHx8IGVsZW1lbnQub3duZXJEb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cdFx0XHR2YXIgaW5kZXggPSAwO1xuXG5cdFx0XHR3aGlsZSAoZWxlbWVudHNbaW5kZXhdICYmIGVsZW1lbnRzW2luZGV4XSAhPT0gZWxlbWVudCkge1xuXHRcdFx0XHQrK2luZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gQm9vbGVhbihlbGVtZW50c1tpbmRleF0pO1xuXHRcdH07XG5cdH1cblxuXHRpZiAodHlwZW9mIEVsZW1lbnRQcm90by5jbG9zZXN0ICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0RWxlbWVudFByb3RvLmNsb3Nlc3QgPSBmdW5jdGlvbiBjbG9zZXN0KHNlbGVjdG9yKSB7XG5cdFx0XHR2YXIgZWxlbWVudCA9IHRoaXM7XG5cblx0XHRcdHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IDEpIHtcblx0XHRcdFx0aWYgKGVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikpIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH07XG5cdH1cbn0pKHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZSk7XG4iLCIvKipcbiAqIGxvZGFzaCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz1cIm5wbVwiIC1vIC4vYFxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vanF1ZXJ5Lm9yZy8+XG4gKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKi9cblxuLyoqIFVzZWQgYXMgdGhlIGBUeXBlRXJyb3JgIG1lc3NhZ2UgZm9yIFwiRnVuY3Rpb25zXCIgbWV0aG9kcy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE5BTiA9IDAgLyAwO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovXG52YXIgcmVUcmltID0gL15cXHMrfFxccyskL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbnZhciBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgb2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4LFxuICAgIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIEdldHMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZVxuICogdGhlIFVuaXggZXBvY2ggKDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IERhdGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVzdGFtcC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xuICogICBjb25zb2xlLmxvZyhfLm5vdygpIC0gc3RhbXApO1xuICogfSwgXy5ub3coKSk7XG4gKiAvLyA9PiBMb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBpbnZvY2F0aW9uLlxuICovXG52YXIgbm93ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiByb290LkRhdGUubm93KCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBkZWJvdW5jZWQgZnVuY3Rpb24gdGhhdCBkZWxheXMgaW52b2tpbmcgYGZ1bmNgIHVudGlsIGFmdGVyIGB3YWl0YFxuICogbWlsbGlzZWNvbmRzIGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gd2FzXG4gKiBpbnZva2VkLiBUaGUgZGVib3VuY2VkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYCBtZXRob2QgdG8gY2FuY2VsXG4gKiBkZWxheWVkIGBmdW5jYCBpbnZvY2F0aW9ucyBhbmQgYSBgZmx1c2hgIG1ldGhvZCB0byBpbW1lZGlhdGVseSBpbnZva2UgdGhlbS5cbiAqIFByb3ZpZGUgYG9wdGlvbnNgIHRvIGluZGljYXRlIHdoZXRoZXIgYGZ1bmNgIHNob3VsZCBiZSBpbnZva2VkIG9uIHRoZVxuICogbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZFxuICogd2l0aCB0aGUgbGFzdCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlvbi4gU3Vic2VxdWVudFxuICogY2FsbHMgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlvbiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2BcbiAqIGludm9jYXRpb24uXG4gKlxuICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBvcHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpc1xuICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAqIGlzIGludm9rZWQgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBgd2FpdGAgdGltZW91dC5cbiAqXG4gKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAqIHVudGlsIHRvIHRoZSBuZXh0IHRpY2ssIHNpbWlsYXIgdG8gYHNldFRpbWVvdXRgIHdpdGggYSB0aW1lb3V0IG9mIGAwYC5cbiAqXG4gKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAqIGZvciBkZXRhaWxzIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYF8uZGVib3VuY2VgIGFuZCBgXy50aHJvdHRsZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWJvdW5jZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPWZhbHNlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXYWl0XVxuICogIFRoZSBtYXhpbXVtIHRpbWUgYGZ1bmNgIGlzIGFsbG93ZWQgdG8gYmUgZGVsYXllZCBiZWZvcmUgaXQncyBpbnZva2VkLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50cmFpbGluZz10cnVlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBkZWJvdW5jZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIEF2b2lkIGNvc3RseSBjYWxjdWxhdGlvbnMgd2hpbGUgdGhlIHdpbmRvdyBzaXplIGlzIGluIGZsdXguXG4gKiBqUXVlcnkod2luZG93KS5vbigncmVzaXplJywgXy5kZWJvdW5jZShjYWxjdWxhdGVMYXlvdXQsIDE1MCkpO1xuICpcbiAqIC8vIEludm9rZSBgc2VuZE1haWxgIHdoZW4gY2xpY2tlZCwgZGVib3VuY2luZyBzdWJzZXF1ZW50IGNhbGxzLlxuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uZGVib3VuY2Uoc2VuZE1haWwsIDMwMCwge1xuICogICAnbGVhZGluZyc6IHRydWUsXG4gKiAgICd0cmFpbGluZyc6IGZhbHNlXG4gKiB9KSk7XG4gKlxuICogLy8gRW5zdXJlIGBiYXRjaExvZ2AgaXMgaW52b2tlZCBvbmNlIGFmdGVyIDEgc2Vjb25kIG9mIGRlYm91bmNlZCBjYWxscy5cbiAqIHZhciBkZWJvdW5jZWQgPSBfLmRlYm91bmNlKGJhdGNoTG9nLCAyNTAsIHsgJ21heFdhaXQnOiAxMDAwIH0pO1xuICogdmFyIHNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZSgnL3N0cmVhbScpO1xuICogalF1ZXJ5KHNvdXJjZSkub24oJ21lc3NhZ2UnLCBkZWJvdW5jZWQpO1xuICpcbiAqIC8vIENhbmNlbCB0aGUgdHJhaWxpbmcgZGVib3VuY2VkIGludm9jYXRpb24uXG4gKiBqUXVlcnkod2luZG93KS5vbigncG9wc3RhdGUnLCBkZWJvdW5jZWQuY2FuY2VsKTtcbiAqL1xuZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICB2YXIgbGFzdEFyZ3MsXG4gICAgICBsYXN0VGhpcyxcbiAgICAgIG1heFdhaXQsXG4gICAgICByZXN1bHQsXG4gICAgICB0aW1lcklkLFxuICAgICAgbGFzdENhbGxUaW1lLFxuICAgICAgbGFzdEludm9rZVRpbWUgPSAwLFxuICAgICAgbGVhZGluZyA9IGZhbHNlLFxuICAgICAgbWF4aW5nID0gZmFsc2UsXG4gICAgICB0cmFpbGluZyA9IHRydWU7XG5cbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgd2FpdCA9IHRvTnVtYmVyKHdhaXQpIHx8IDA7XG4gIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgIGxlYWRpbmcgPSAhIW9wdGlvbnMubGVhZGluZztcbiAgICBtYXhpbmcgPSAnbWF4V2FpdCcgaW4gb3B0aW9ucztcbiAgICBtYXhXYWl0ID0gbWF4aW5nID8gbmF0aXZlTWF4KHRvTnVtYmVyKG9wdGlvbnMubWF4V2FpdCkgfHwgMCwgd2FpdCkgOiBtYXhXYWl0O1xuICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VGdW5jKHRpbWUpIHtcbiAgICB2YXIgYXJncyA9IGxhc3RBcmdzLFxuICAgICAgICB0aGlzQXJnID0gbGFzdFRoaXM7XG5cbiAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTtcbiAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBsZWFkaW5nRWRnZSh0aW1lKSB7XG4gICAgLy8gUmVzZXQgYW55IGBtYXhXYWl0YCB0aW1lci5cbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgLy8gU3RhcnQgdGhlIHRpbWVyIGZvciB0aGUgdHJhaWxpbmcgZWRnZS5cbiAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIC8vIEludm9rZSB0aGUgbGVhZGluZyBlZGdlLlxuICAgIHJldHVybiBsZWFkaW5nID8gaW52b2tlRnVuYyh0aW1lKSA6IHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbWFpbmluZ1dhaXQodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWUsXG4gICAgICAgIHJlc3VsdCA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgIHJldHVybiBtYXhpbmcgPyBuYXRpdmVNaW4ocmVzdWx0LCBtYXhXYWl0IC0gdGltZVNpbmNlTGFzdEludm9rZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cbiAgICAvLyBFaXRoZXIgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCwgYWN0aXZpdHkgaGFzIHN0b3BwZWQgYW5kIHdlJ3JlIGF0IHRoZVxuICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuICAgIHJldHVybiAobGFzdENhbGxUaW1lID09PSB1bmRlZmluZWQgfHwgKHRpbWVTaW5jZUxhc3RDYWxsID49IHdhaXQpIHx8XG4gICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGltZXJFeHBpcmVkKCkge1xuICAgIHZhciB0aW1lID0gbm93KCk7XG4gICAgaWYgKHNob3VsZEludm9rZSh0aW1lKSkge1xuICAgICAgcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTtcbiAgICB9XG4gICAgLy8gUmVzdGFydCB0aGUgdGltZXIuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCByZW1haW5pbmdXYWl0KHRpbWUpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKSB7XG4gICAgdGltZXJJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbiAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS5cbiAgICBpZiAodHJhaWxpbmcgJiYgbGFzdEFyZ3MpIHtcbiAgICAgIHJldHVybiBpbnZva2VGdW5jKHRpbWUpO1xuICAgIH1cbiAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgIH1cbiAgICBsYXN0SW52b2tlVGltZSA9IDA7XG4gICAgbGFzdEFyZ3MgPSBsYXN0Q2FsbFRpbWUgPSBsYXN0VGhpcyA9IHRpbWVySWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICByZXR1cm4gdGltZXJJZCA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogdHJhaWxpbmdFZGdlKG5vdygpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpLFxuICAgICAgICBpc0ludm9raW5nID0gc2hvdWxkSW52b2tlKHRpbWUpO1xuXG4gICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgIGxhc3RDYWxsVGltZSA9IHRpbWU7XG5cbiAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbGVhZGluZ0VkZ2UobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgLy8gSGFuZGxlIGludm9jYXRpb25zIGluIGEgdGlnaHQgbG9vcC5cbiAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAgICAgcmV0dXJuIGludm9rZUZ1bmMobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBkZWJvdW5jZWQuY2FuY2VsID0gY2FuY2VsO1xuICBkZWJvdW5jZWQuZmx1c2ggPSBmbHVzaDtcbiAgcmV0dXJuIGRlYm91bmNlZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAhIXZhbHVlICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9OdW1iZXIoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IEluZmluaXR5XG4gKlxuICogXy50b051bWJlcignMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIE5BTjtcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgIHZhbHVlID0gaXNPYmplY3Qob3RoZXIpID8gKG90aGVyICsgJycpIDogb3RoZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlO1xuICB9XG4gIHZhbHVlID0gdmFsdWUucmVwbGFjZShyZVRyaW0sICcnKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVib3VuY2U7XG4iLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiY29uc3QgYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuY29uc3QgZGVsZWdhdGUgPSByZXF1aXJlKCcuLi9kZWxlZ2F0ZScpO1xuY29uc3QgZGVsZWdhdGVBbGwgPSByZXF1aXJlKCcuLi9kZWxlZ2F0ZUFsbCcpO1xuXG5jb25zdCBERUxFR0FURV9QQVRURVJOID0gL14oLispOmRlbGVnYXRlXFwoKC4rKVxcKSQvO1xuY29uc3QgU1BBQ0UgPSAnICc7XG5cbmNvbnN0IGdldExpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUsIGhhbmRsZXIpIHtcbiAgdmFyIG1hdGNoID0gdHlwZS5tYXRjaChERUxFR0FURV9QQVRURVJOKTtcbiAgdmFyIHNlbGVjdG9yO1xuICBpZiAobWF0Y2gpIHtcbiAgICB0eXBlID0gbWF0Y2hbMV07XG4gICAgc2VsZWN0b3IgPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHZhciBvcHRpb25zO1xuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIGNhcHR1cmU6IHBvcEtleShoYW5kbGVyLCAnY2FwdHVyZScpLFxuICAgICAgcGFzc2l2ZTogcG9wS2V5KGhhbmRsZXIsICdwYXNzaXZlJylcbiAgICB9O1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0ge1xuICAgIHNlbGVjdG9yOiBzZWxlY3RvcixcbiAgICBkZWxlZ2F0ZTogKHR5cGVvZiBoYW5kbGVyID09PSAnb2JqZWN0JylcbiAgICAgID8gZGVsZWdhdGVBbGwoaGFuZGxlcilcbiAgICAgIDogc2VsZWN0b3JcbiAgICAgICAgPyBkZWxlZ2F0ZShzZWxlY3RvciwgaGFuZGxlcilcbiAgICAgICAgOiBoYW5kbGVyLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfTtcblxuICBpZiAodHlwZS5pbmRleE9mKFNQQUNFKSA+IC0xKSB7XG4gICAgcmV0dXJuIHR5cGUuc3BsaXQoU1BBQ0UpLm1hcChmdW5jdGlvbihfdHlwZSkge1xuICAgICAgcmV0dXJuIGFzc2lnbih7dHlwZTogX3R5cGV9LCBsaXN0ZW5lcik7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgbGlzdGVuZXIudHlwZSA9IHR5cGU7XG4gICAgcmV0dXJuIFtsaXN0ZW5lcl07XG4gIH1cbn07XG5cbnZhciBwb3BLZXkgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcbiAgZGVsZXRlIG9ialtrZXldO1xuICByZXR1cm4gdmFsdWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJlaGF2aW9yKGV2ZW50cywgcHJvcHMpIHtcbiAgY29uc3QgbGlzdGVuZXJzID0gT2JqZWN0LmtleXMoZXZlbnRzKVxuICAgIC5yZWR1Y2UoZnVuY3Rpb24obWVtbywgdHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycyA9IGdldExpc3RlbmVycyh0eXBlLCBldmVudHNbdHlwZV0pO1xuICAgICAgcmV0dXJuIG1lbW8uY29uY2F0KGxpc3RlbmVycyk7XG4gICAgfSwgW10pO1xuXG4gIHJldHVybiBhc3NpZ24oe1xuICAgIGFkZDogZnVuY3Rpb24gYWRkQmVoYXZpb3IoZWxlbWVudCkge1xuICAgICAgbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgIGxpc3RlbmVyLnR5cGUsXG4gICAgICAgICAgbGlzdGVuZXIuZGVsZWdhdGUsXG4gICAgICAgICAgbGlzdGVuZXIub3B0aW9uc1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZUJlaGF2aW9yKGVsZW1lbnQpIHtcbiAgICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBsaXN0ZW5lci50eXBlLFxuICAgICAgICAgIGxpc3RlbmVyLmRlbGVnYXRlLFxuICAgICAgICAgIGxpc3RlbmVyLm9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgcHJvcHMpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tcG9zZShmdW5jdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25zLnNvbWUoZnVuY3Rpb24oZm4pIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGUpID09PSBmYWxzZTtcbiAgICB9LCB0aGlzKTtcbiAgfTtcbn07XG4iLCIvLyBwb2x5ZmlsbCBFbGVtZW50LnByb3RvdHlwZS5jbG9zZXN0XG5yZXF1aXJlKCdlbGVtZW50LWNsb3Nlc3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWxlZ2F0ZShzZWxlY3RvciwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlbGVnYXRpb24oZXZlbnQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRhcmdldCwgZXZlbnQpO1xuICAgIH1cbiAgfVxufTtcbiIsImNvbnN0IGRlbGVnYXRlID0gcmVxdWlyZSgnLi4vZGVsZWdhdGUnKTtcbmNvbnN0IGNvbXBvc2UgPSByZXF1aXJlKCcuLi9jb21wb3NlJyk7XG5cbmNvbnN0IFNQTEFUID0gJyonO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlbGVnYXRlQWxsKHNlbGVjdG9ycykge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2VsZWN0b3JzKVxuXG4gIC8vIFhYWCBvcHRpbWl6YXRpb246IGlmIHRoZXJlIGlzIG9ubHkgb25lIGhhbmRsZXIgYW5kIGl0IGFwcGxpZXMgdG9cbiAgLy8gYWxsIGVsZW1lbnRzICh0aGUgXCIqXCIgQ1NTIHNlbGVjdG9yKSwgdGhlbiBqdXN0IHJldHVybiB0aGF0XG4gIC8vIGhhbmRsZXJcbiAgaWYgKGtleXMubGVuZ3RoID09PSAxICYmIGtleXNbMF0gPT09IFNQTEFUKSB7XG4gICAgcmV0dXJuIHNlbGVjdG9yc1tTUExBVF07XG4gIH1cblxuICBjb25zdCBkZWxlZ2F0ZXMgPSBrZXlzLnJlZHVjZShmdW5jdGlvbihtZW1vLCBzZWxlY3Rvcikge1xuICAgIG1lbW8ucHVzaChkZWxlZ2F0ZShzZWxlY3Rvciwgc2VsZWN0b3JzW3NlbGVjdG9yXSkpO1xuICAgIHJldHVybiBtZW1vO1xuICB9LCBbXSk7XG4gIHJldHVybiBjb21wb3NlKGRlbGVnYXRlcyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpZ25vcmUoZWxlbWVudCwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlnbm9yYW5jZShlKSB7XG4gICAgaWYgKGVsZW1lbnQgIT09IGUudGFyZ2V0ICYmICFlbGVtZW50LmNvbnRhaW5zKGUudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgZSk7XG4gICAgfVxuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gb25jZShsaXN0ZW5lciwgb3B0aW9ucykge1xuICB2YXIgd3JhcHBlZCA9IGZ1bmN0aW9uIHdyYXBwZWRPbmNlKGUpIHtcbiAgICBlLmN1cnJlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLnR5cGUsIHdyYXBwZWQsIG9wdGlvbnMpO1xuICAgIHJldHVybiBsaXN0ZW5lci5jYWxsKHRoaXMsIGUpO1xuICB9O1xuICByZXR1cm4gd3JhcHBlZDtcbn07XG5cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFJFX1RSSU0gPSAvKF5cXHMrKXwoXFxzKyQpL2c7XG52YXIgUkVfU1BMSVQgPSAvXFxzKy87XG5cbnZhciB0cmltID0gU3RyaW5nLnByb3RvdHlwZS50cmltXG4gID8gZnVuY3Rpb24oc3RyKSB7IHJldHVybiBzdHIudHJpbSgpOyB9XG4gIDogZnVuY3Rpb24oc3RyKSB7IHJldHVybiBzdHIucmVwbGFjZShSRV9UUklNLCAnJyk7IH07XG5cbnZhciBxdWVyeUJ5SWQgPSBmdW5jdGlvbihpZCkge1xuICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKCdbaWQ9XCInICsgaWQucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpICsgJ1wiXScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXNvbHZlSWRzKGlkcywgZG9jKSB7XG4gIGlmICh0eXBlb2YgaWRzICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYSBzdHJpbmcgYnV0IGdvdCAnICsgKHR5cGVvZiBpZHMpKTtcbiAgfVxuXG4gIGlmICghZG9jKSB7XG4gICAgZG9jID0gd2luZG93LmRvY3VtZW50O1xuICB9XG5cbiAgdmFyIGdldEVsZW1lbnRCeUlkID0gZG9jLmdldEVsZW1lbnRCeUlkXG4gICAgPyBkb2MuZ2V0RWxlbWVudEJ5SWQuYmluZChkb2MpXG4gICAgOiBxdWVyeUJ5SWQuYmluZChkb2MpO1xuXG4gIGlkcyA9IHRyaW0oaWRzKS5zcGxpdChSRV9TUExJVCk7XG5cbiAgLy8gWFhYIHdlIGNhbiBzaG9ydC1jaXJjdWl0IGhlcmUgYmVjYXVzZSB0cmltbWluZyBhbmQgc3BsaXR0aW5nIGFcbiAgLy8gc3RyaW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSBwcm9kdWNlcyBhbiBhcnJheSBjb250YWluaW5nIGEgc2luZ2xlLFxuICAvLyBlbXB0eSBzdHJpbmdcbiAgaWYgKGlkcy5sZW5ndGggPT09IDEgJiYgaWRzWzBdID09PSAnJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBpZHNcbiAgICAubWFwKGZ1bmN0aW9uKGlkKSB7XG4gICAgICB2YXIgZWwgPSBnZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gZWxlbWVudCB3aXRoIGlkOiBcIicgKyBpZCArICdcIicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsO1xuICAgIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IGJlaGF2aW9yID0gcmVxdWlyZSgnLi4vdXRpbHMvYmVoYXZpb3InKTtcbmNvbnN0IGZpbHRlciA9IHJlcXVpcmUoJ2FycmF5LWZpbHRlcicpO1xuY29uc3QgZm9yRWFjaCA9IHJlcXVpcmUoJ2FycmF5LWZvcmVhY2gnKTtcbmNvbnN0IHRvZ2dsZSA9IHJlcXVpcmUoJy4uL3V0aWxzL3RvZ2dsZScpO1xuY29uc3QgaXNFbGVtZW50SW5WaWV3cG9ydCA9IHJlcXVpcmUoJy4uL3V0aWxzL2lzLWluLXZpZXdwb3J0Jyk7XG5cbmNvbnN0IENMSUNLID0gcmVxdWlyZSgnLi4vZXZlbnRzJykuQ0xJQ0s7XG5jb25zdCBQUkVGSVggPSByZXF1aXJlKCcuLi9jb25maWcnKS5wcmVmaXg7XG5cbi8vIFhYWCBtYXRjaCAudXNhLWFjY29yZGlvbiBhbmQgLnVzYS1hY2NvcmRpb24tYm9yZGVyZWRcbmNvbnN0IEFDQ09SRElPTiA9IGAuJHtQUkVGSVh9LWFjY29yZGlvbiwgLiR7UFJFRklYfS1hY2NvcmRpb24tYm9yZGVyZWRgO1xuY29uc3QgQlVUVE9OID0gYC4ke1BSRUZJWH0tYWNjb3JkaW9uLWJ1dHRvblthcmlhLWNvbnRyb2xzXWA7XG5jb25zdCBFWFBBTkRFRCA9ICdhcmlhLWV4cGFuZGVkJztcbmNvbnN0IE1VTFRJU0VMRUNUQUJMRSA9ICdhcmlhLW11bHRpc2VsZWN0YWJsZSc7XG5cbi8qKlxuICogVG9nZ2xlIGEgYnV0dG9uJ3MgXCJwcmVzc2VkXCIgc3RhdGUsIG9wdGlvbmFsbHkgcHJvdmlkaW5nIGEgdGFyZ2V0XG4gKiBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0hUTUxCdXR0b25FbGVtZW50fSBidXR0b25cbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGV4cGFuZGVkIElmIG5vIHN0YXRlIGlzIHByb3ZpZGVkLCB0aGUgY3VycmVudFxuICogc3RhdGUgd2lsbCBiZSB0b2dnbGVkIChmcm9tIGZhbHNlIHRvIHRydWUsIGFuZCB2aWNlLXZlcnNhKS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHRpbmcgc3RhdGVcbiAqL1xuY29uc3QgdG9nZ2xlQnV0dG9uID0gKGJ1dHRvbiwgZXhwYW5kZWQpID0+IHtcbiAgdmFyIGFjY29yZGlvbiA9IGJ1dHRvbi5jbG9zZXN0KEFDQ09SRElPTik7XG4gIGlmICghYWNjb3JkaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke0JVVFRPTn0gaXMgbWlzc2luZyBvdXRlciAke0FDQ09SRElPTn1gKTtcbiAgfVxuXG4gIGV4cGFuZGVkID0gdG9nZ2xlKGJ1dHRvbiwgZXhwYW5kZWQpO1xuICAvLyBYWFggbXVsdGlzZWxlY3RhYmxlIGlzIG9wdC1pbiwgdG8gcHJlc2VydmUgbGVnYWN5IGJlaGF2aW9yXG4gIGNvbnN0IG11bHRpc2VsZWN0YWJsZSA9IGFjY29yZGlvbi5nZXRBdHRyaWJ1dGUoTVVMVElTRUxFQ1RBQkxFKSA9PT0gJ3RydWUnO1xuXG4gIGlmIChleHBhbmRlZCAmJiAhbXVsdGlzZWxlY3RhYmxlKSB7XG4gICAgZm9yRWFjaChnZXRBY2NvcmRpb25CdXR0b25zKGFjY29yZGlvbiksIG90aGVyID0+IHtcbiAgICAgIGlmIChvdGhlciAhPT0gYnV0dG9uKSB7XG4gICAgICAgIHRvZ2dsZShvdGhlciwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7SFRNTEJ1dHRvbkVsZW1lbnR9IGJ1dHRvblxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZVxuICovXG5jb25zdCBzaG93QnV0dG9uID0gYnV0dG9uID0+IHRvZ2dsZUJ1dHRvbihidXR0b24sIHRydWUpO1xuXG4vKipcbiAqIEBwYXJhbSB7SFRNTEJ1dHRvbkVsZW1lbnR9IGJ1dHRvblxuICogQHJldHVybiB7Ym9vbGVhbn0gZmFsc2VcbiAqL1xuY29uc3QgaGlkZUJ1dHRvbiA9IGJ1dHRvbiA9PiB0b2dnbGVCdXR0b24oYnV0dG9uLCBmYWxzZSk7XG5cbi8qKlxuICogR2V0IGFuIEFycmF5IG9mIGJ1dHRvbiBlbGVtZW50cyBiZWxvbmdpbmcgZGlyZWN0bHkgdG8gdGhlIGdpdmVuXG4gKiBhY2NvcmRpb24gZWxlbWVudC5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGFjY29yZGlvblxuICogQHJldHVybiB7YXJyYXk8SFRNTEJ1dHRvbkVsZW1lbnQ+fVxuICovXG5jb25zdCBnZXRBY2NvcmRpb25CdXR0b25zID0gYWNjb3JkaW9uID0+IHtcbiAgcmV0dXJuIGZpbHRlcihhY2NvcmRpb24ucXVlcnlTZWxlY3RvckFsbChCVVRUT04pLCBidXR0b24gPT4ge1xuICAgIHJldHVybiBidXR0b24uY2xvc2VzdChBQ0NPUkRJT04pID09PSBhY2NvcmRpb247XG4gIH0pO1xufTtcblxuY29uc3QgYWNjb3JkaW9uID0gYmVoYXZpb3Ioe1xuICBbIENMSUNLIF06IHtcbiAgICBbIEJVVFRPTiBdOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0b2dnbGVCdXR0b24odGhpcyk7XG5cbiAgICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZShFWFBBTkRFRCkgPT09ICd0cnVlJykge1xuICAgICAgICAvLyBXZSB3ZXJlIGp1c3QgZXhwYW5kZWQsIGJ1dCBpZiBhbm90aGVyIGFjY29yZGlvbiB3YXMgYWxzbyBqdXN0XG4gICAgICAgIC8vIGNvbGxhcHNlZCwgd2UgbWF5IG5vIGxvbmdlciBiZSBpbiB0aGUgdmlld3BvcnQuIFRoaXMgZW5zdXJlc1xuICAgICAgICAvLyB0aGF0IHdlIGFyZSBzdGlsbCB2aXNpYmxlLCBzbyB0aGUgdXNlciBpc24ndCBjb25mdXNlZC5cbiAgICAgICAgaWYgKCFpc0VsZW1lbnRJblZpZXdwb3J0KHRoaXMpKSB0aGlzLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbn0sIHtcbiAgaW5pdDogcm9vdCA9PiB7XG4gICAgZm9yRWFjaChyb290LnF1ZXJ5U2VsZWN0b3JBbGwoQlVUVE9OKSwgYnV0dG9uID0+IHtcbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gYnV0dG9uLmdldEF0dHJpYnV0ZShFWFBBTkRFRCkgPT09ICd0cnVlJztcbiAgICAgIHRvZ2dsZUJ1dHRvbihidXR0b24sIGV4cGFuZGVkKTtcbiAgICB9KTtcbiAgfSxcbiAgQUNDT1JESU9OLFxuICBCVVRUT04sXG4gIHNob3c6IHNob3dCdXR0b24sXG4gIGhpZGU6IGhpZGVCdXR0b24sXG4gIHRvZ2dsZTogdG9nZ2xlQnV0dG9uLFxuICBnZXRCdXR0b25zOiBnZXRBY2NvcmRpb25CdXR0b25zLFxufSk7XG5cbi8qKlxuICogVE9ETzogZm9yIDIuMCwgcmVtb3ZlIGV2ZXJ5dGhpbmcgYmVsb3cgdGhpcyBjb21tZW50IGFuZCBleHBvcnQgdGhlXG4gKiBiZWhhdmlvciBkaXJlY3RseTpcbiAqXG4gKiBtb2R1bGUuZXhwb3J0cyA9IGJlaGF2aW9yKHsuLi59KTtcbiAqL1xuY29uc3QgQWNjb3JkaW9uID0gZnVuY3Rpb24gKHJvb3QpIHtcbiAgdGhpcy5yb290ID0gcm9vdDtcbiAgYWNjb3JkaW9uLm9uKHRoaXMucm9vdCk7XG59O1xuXG4vLyBjb3B5IGFsbCBvZiB0aGUgYmVoYXZpb3IgbWV0aG9kcyBhbmQgcHJvcHMgdG8gQWNjb3JkaW9uXG5jb25zdCBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5hc3NpZ24oQWNjb3JkaW9uLCBhY2NvcmRpb24pO1xuXG5BY2NvcmRpb24ucHJvdG90eXBlLnNob3cgPSBzaG93QnV0dG9uO1xuQWNjb3JkaW9uLnByb3RvdHlwZS5oaWRlID0gaGlkZUJ1dHRvbjtcblxuQWNjb3JkaW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gIGFjY29yZGlvbi5vZmYodGhpcy5yb290KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQWNjb3JkaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgYmVoYXZpb3IgPSByZXF1aXJlKCcuLi91dGlscy9iZWhhdmlvcicpO1xuY29uc3QgdG9nZ2xlID0gcmVxdWlyZSgnLi4vdXRpbHMvdG9nZ2xlJyk7XG5cbmNvbnN0IENMSUNLID0gcmVxdWlyZSgnLi4vZXZlbnRzJykuQ0xJQ0s7XG5jb25zdCBQUkVGSVggPSByZXF1aXJlKCcuLi9jb25maWcnKS5wcmVmaXg7XG5cbmNvbnN0IEhFQURFUiA9IGAuJHtQUkVGSVh9LWJhbm5lci1oZWFkZXJgO1xuY29uc3QgRVhQQU5ERURfQ0xBU1MgPSBgJHtQUkVGSVh9LWJhbm5lci1oZWFkZXItZXhwYW5kZWRgO1xuXG5jb25zdCB0b2dnbGVCYW5uZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgdGhpcy5jbG9zZXN0KEhFQURFUikuY2xhc3NMaXN0LnRvZ2dsZShFWFBBTkRFRF9DTEFTUyk7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmVoYXZpb3Ioe1xuICBbIENMSUNLIF06IHtcbiAgICBbIGAke0hFQURFUn0gW2FyaWEtY29udHJvbHNdYCBdOiB0b2dnbGVCYW5uZXIsXG4gIH0sXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IGFjY29yZGlvbiA9IHJlcXVpcmUoJy4vYWNjb3JkaW9uJyk7XG5jb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoJy4uL3V0aWxzL2JlaGF2aW9yJyk7XG5jb25zdCBkZWJvdW5jZSA9IHJlcXVpcmUoJ2xvZGFzaC5kZWJvdW5jZScpO1xuY29uc3QgZm9yRWFjaCA9IHJlcXVpcmUoJ2FycmF5LWZvcmVhY2gnKTtcbmNvbnN0IHNlbGVjdCA9IHJlcXVpcmUoJy4uL3V0aWxzL3NlbGVjdCcpO1xuXG5jb25zdCBDTElDSyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpLkNMSUNLO1xuY29uc3QgUFJFRklYID0gcmVxdWlyZSgnLi4vY29uZmlnJykucHJlZml4O1xuXG5jb25zdCBISURERU4gPSAnaGlkZGVuJztcbmNvbnN0IFNDT1BFID0gYC4ke1BSRUZJWH0tZm9vdGVyLWJpZ2A7XG5jb25zdCBOQVYgPSBgJHtTQ09QRX0gbmF2YDtcbmNvbnN0IEJVVFRPTiA9IGAke05BVn0gLiR7UFJFRklYfS1mb290ZXItcHJpbWFyeS1saW5rYDtcbmNvbnN0IExJU1QgPSBgJHtOQVZ9IHVsYDtcblxuY29uc3QgSElERV9NQVhfV0lEVEggPSA2MDA7XG5jb25zdCBERUJPVU5DRV9SQVRFID0gMTgwO1xuXG5jb25zdCBzaG93UGFuZWwgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGxpc3QgPSB0aGlzLmNsb3Nlc3QoTElTVCk7XG4gIGxpc3QuY2xhc3NMaXN0LnJlbW92ZShISURERU4pO1xuXG4gIC8vIE5COiB0aGlzICpzaG91bGQqIGFsd2F5cyBzdWNjZWVkIGJlY2F1c2UgdGhlIGJ1dHRvblxuICAvLyBzZWxlY3RvciBpcyBzY29wZWQgdG8gXCIue3ByZWZpeH0tZm9vdGVyLWJpZyBuYXZcIlxuICBjb25zdCBsaXN0cyA9IGxpc3QuY2xvc2VzdChOQVYpXG4gICAgLnF1ZXJ5U2VsZWN0b3JBbGwoJ3VsJyk7XG5cbiAgZm9yRWFjaChsaXN0cywgZWwgPT4ge1xuICAgIGlmIChlbCAhPT0gbGlzdCkge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChISURERU4pO1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCByZXNpemUgPSBkZWJvdW5jZSgoKSA9PiB7XG4gIGNvbnN0IGhpZGRlbiA9IHdpbmRvdy5pbm5lcldpZHRoIDwgSElERV9NQVhfV0lEVEg7XG4gIGZvckVhY2goc2VsZWN0KExJU1QpLCBsaXN0ID0+IHtcbiAgICBsaXN0LmNsYXNzTGlzdC50b2dnbGUoSElEREVOLCBoaWRkZW4pO1xuICB9KTtcbn0sIERFQk9VTkNFX1JBVEUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJlaGF2aW9yKHtcbiAgWyBDTElDSyBdOiB7XG4gICAgWyBCVVRUT04gXTogc2hvd1BhbmVsLFxuICB9LFxufSwge1xuICAvLyBleHBvcnQgZm9yIHVzZSBlbHNld2hlcmVcbiAgSElERV9NQVhfV0lEVEgsXG4gIERFQk9VTkNFX1JBVEUsXG5cbiAgaW5pdDogdGFyZ2V0ID0+IHtcbiAgICByZXNpemUoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzaXplKTtcbiAgfSxcblxuICB0ZWFyZG93bjogdGFyZ2V0ID0+IHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzaXplKTtcbiAgfSxcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFjY29yZGlvbjogIHJlcXVpcmUoJy4vYWNjb3JkaW9uJyksXG4gIGJhbm5lcjogICAgIHJlcXVpcmUoJy4vYmFubmVyJyksXG4gIGZvb3RlcjogICAgIHJlcXVpcmUoJy4vZm9vdGVyJyksXG4gIG5hdmlnYXRpb246IHJlcXVpcmUoJy4vbmF2aWdhdGlvbicpLFxuICBwYXNzd29yZDogICByZXF1aXJlKCcuL3Bhc3N3b3JkJyksXG4gIHNlYXJjaDogICAgIHJlcXVpcmUoJy4vc2VhcmNoJyksXG4gIHNraXBuYXY6ICAgIHJlcXVpcmUoJy4vc2tpcG5hdicpLFxuICB2YWxpZGF0b3I6ICByZXF1aXJlKCcuL3ZhbGlkYXRvcicpLFxufTtcblxuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgYmVoYXZpb3IgPSByZXF1aXJlKCcuLi91dGlscy9iZWhhdmlvcicpO1xuY29uc3QgZm9yRWFjaCA9IHJlcXVpcmUoJ2FycmF5LWZvcmVhY2gnKTtcbmNvbnN0IHNlbGVjdCA9IHJlcXVpcmUoJy4uL3V0aWxzL3NlbGVjdCcpO1xuY29uc3QgYWNjb3JkaW9uID0gcmVxdWlyZSgnLi9hY2NvcmRpb24nKTtcblxuY29uc3QgQ0xJQ0sgPSByZXF1aXJlKCcuLi9ldmVudHMnKS5DTElDSztcbmNvbnN0IFBSRUZJWCA9IHJlcXVpcmUoJy4uL2NvbmZpZycpLnByZWZpeDtcblxuY29uc3QgTkFWID0gYC4ke1BSRUZJWH0tbmF2YDtcbmNvbnN0IE5BVl9MSU5LUyA9IGAke05BVn0gYWA7XG5jb25zdCBPUEVORVJTID0gYC4ke1BSRUZJWH0tbWVudS1idG5gO1xuY29uc3QgQ0xPU0VfQlVUVE9OID0gYC4ke1BSRUZJWH0tbmF2LWNsb3NlYDtcbmNvbnN0IE9WRVJMQVkgPSBgLiR7UFJFRklYfS1vdmVybGF5YDtcbmNvbnN0IENMT1NFUlMgPSBgJHtDTE9TRV9CVVRUT059LCAuJHtQUkVGSVh9LW92ZXJsYXlgO1xuY29uc3QgVE9HR0xFUyA9IFsgTkFWLCBPVkVSTEFZIF0uam9pbignLCAnKTtcblxuY29uc3QgQUNUSVZFX0NMQVNTID0gJ3VzYS1tb2JpbGVfbmF2LWFjdGl2ZSc7XG5jb25zdCBWSVNJQkxFX0NMQVNTID0gJ2lzLXZpc2libGUnO1xuXG5jb25zdCBpc0FjdGl2ZSA9ICgpID0+IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKEFDVElWRV9DTEFTUyk7XG5cbmNvbnN0IHRvZ2dsZU5hdiA9IGZ1bmN0aW9uIChhY3RpdmUpIHtcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gIGlmICh0eXBlb2YgYWN0aXZlICE9PSAnYm9vbGVhbicpIHtcbiAgICBhY3RpdmUgPSAhaXNBY3RpdmUoKTtcbiAgfVxuICBib2R5LmNsYXNzTGlzdC50b2dnbGUoQUNUSVZFX0NMQVNTLCBhY3RpdmUpO1xuXG4gIGZvckVhY2goc2VsZWN0KFRPR0dMRVMpLCBlbCA9PiB7XG4gICAgZWwuY2xhc3NMaXN0LnRvZ2dsZShWSVNJQkxFX0NMQVNTLCBhY3RpdmUpO1xuICB9KTtcblxuICBjb25zdCBjbG9zZUJ1dHRvbiA9IGJvZHkucXVlcnlTZWxlY3RvcihDTE9TRV9CVVRUT04pO1xuICBjb25zdCBtZW51QnV0dG9uID0gYm9keS5xdWVyeVNlbGVjdG9yKE9QRU5FUlMpO1xuXG4gIGlmIChhY3RpdmUgJiYgY2xvc2VCdXR0b24pIHtcbiAgICAvLyBUaGUgbW9iaWxlIG5hdiB3YXMganVzdCBhY3RpdmF0ZWQsIHNvIGZvY3VzIG9uIHRoZSBjbG9zZSBidXR0b24sXG4gICAgLy8gd2hpY2ggaXMganVzdCBiZWZvcmUgYWxsIHRoZSBuYXYgZWxlbWVudHMgaW4gdGhlIHRhYiBvcmRlci5cbiAgICBjbG9zZUJ1dHRvbi5mb2N1cygpO1xuICB9IGVsc2UgaWYgKCFhY3RpdmUgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gY2xvc2VCdXR0b24gJiZcbiAgICAgICAgICAgICBtZW51QnV0dG9uKSB7XG4gICAgLy8gVGhlIG1vYmlsZSBuYXYgd2FzIGp1c3QgZGVhY3RpdmF0ZWQsIGFuZCBmb2N1cyB3YXMgb24gdGhlIGNsb3NlXG4gICAgLy8gYnV0dG9uLCB3aGljaCBpcyBubyBsb25nZXIgdmlzaWJsZS4gV2UgZG9uJ3Qgd2FudCB0aGUgZm9jdXMgdG9cbiAgICAvLyBkaXNhcHBlYXIgaW50byB0aGUgdm9pZCwgc28gZm9jdXMgb24gdGhlIG1lbnUgYnV0dG9uIGlmIGl0J3NcbiAgICAvLyB2aXNpYmxlICh0aGlzIG1heSBoYXZlIGJlZW4gd2hhdCB0aGUgdXNlciB3YXMganVzdCBmb2N1c2VkIG9uLFxuICAgIC8vIGlmIHRoZXkgdHJpZ2dlcmVkIHRoZSBtb2JpbGUgbmF2IGJ5IG1pc3Rha2UpLlxuICAgIG1lbnVCdXR0b24uZm9jdXMoKTtcbiAgfVxuXG4gIHJldHVybiBhY3RpdmU7XG59O1xuXG5jb25zdCByZXNpemUgPSAoKSA9PiB7XG4gIGNvbnN0IGNsb3NlciA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcihDTE9TRV9CVVRUT04pO1xuXG4gIGlmIChpc0FjdGl2ZSgpICYmIGNsb3NlciAmJiBjbG9zZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPT09IDApIHtcbiAgICAvLyBUaGUgbW9iaWxlIG5hdiBpcyBhY3RpdmUsIGJ1dCB0aGUgY2xvc2UgYm94IGlzbid0IHZpc2libGUsIHdoaWNoXG4gICAgLy8gbWVhbnMgdGhlIHVzZXIncyB2aWV3cG9ydCBoYXMgYmVlbiByZXNpemVkIHNvIHRoYXQgaXQgaXMgbm8gbG9uZ2VyXG4gICAgLy8gaW4gbW9iaWxlIG1vZGUuIExldCdzIG1ha2UgdGhlIHBhZ2Ugc3RhdGUgY29uc2lzdGVudCBieVxuICAgIC8vIGRlYWN0aXZhdGluZyB0aGUgbW9iaWxlIG5hdi5cbiAgICB0b2dnbGVOYXYuY2FsbChjbG9zZXIsIGZhbHNlKTtcbiAgfVxufTtcblxuY29uc3QgbmF2aWdhdGlvbiA9IGJlaGF2aW9yKHtcbiAgWyBDTElDSyBdOiB7XG4gICAgWyBPUEVORVJTIF06IHRvZ2dsZU5hdixcbiAgICBbIENMT1NFUlMgXTogdG9nZ2xlTmF2LFxuICAgIFsgTkFWX0xJTktTIF06IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEEgbmF2aWdhdGlvbiBsaW5rIGhhcyBiZWVuIGNsaWNrZWQhIFdlIHdhbnQgdG8gY29sbGFwc2UgYW55XG4gICAgICAvLyBoaWVyYXJjaGljYWwgbmF2aWdhdGlvbiBVSSBpdCdzIGEgcGFydCBvZiwgc28gdGhhdCB0aGUgdXNlclxuICAgICAgLy8gY2FuIGZvY3VzIG9uIHdoYXRldmVyIHRoZXkndmUganVzdCBzZWxlY3RlZC5cblxuICAgICAgLy8gU29tZSBuYXZpZ2F0aW9uIGxpbmtzIGFyZSBpbnNpZGUgYWNjb3JkaW9uczsgd2hlbiB0aGV5J3JlXG4gICAgICAvLyBjbGlja2VkLCB3ZSB3YW50IHRvIGNvbGxhcHNlIHRob3NlIGFjY29yZGlvbnMuXG4gICAgICBjb25zdCBhY2MgPSB0aGlzLmNsb3Nlc3QoYWNjb3JkaW9uLkFDQ09SRElPTik7XG4gICAgICBpZiAoYWNjKSB7XG4gICAgICAgIGFjY29yZGlvbi5nZXRCdXR0b25zKGFjYykuZm9yRWFjaChidG4gPT4gYWNjb3JkaW9uLmhpZGUoYnRuKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBtb2JpbGUgbmF2aWdhdGlvbiBtZW51IGlzIGFjdGl2ZSwgd2Ugd2FudCB0byBoaWRlIGl0LlxuICAgICAgaWYgKGlzQWN0aXZlKCkpIHtcbiAgICAgICAgdG9nZ2xlTmF2LmNhbGwodGhpcywgZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG59LCB7XG4gIGluaXQgKCkge1xuICAgIHJlc2l6ZSgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemUsIGZhbHNlKTtcbiAgfSxcbiAgdGVhcmRvd24gKCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemUsIGZhbHNlKTtcbiAgfSxcbn0pO1xuXG4vKipcbiAqIFRPRE8gZm9yIDIuMCwgcmVtb3ZlIHRoaXMgc3RhdGVtZW50IGFuZCBleHBvcnQgYG5hdmlnYXRpb25gIGRpcmVjdGx5OlxuICpcbiAqIG1vZHVsZS5leHBvcnRzID0gYmVoYXZpb3Ioey4uLn0pO1xuICovXG5jb25zdCBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbihcbiAgZWwgPT4gbmF2aWdhdGlvbi5vbihlbCksXG4gIG5hdmlnYXRpb25cbik7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoJy4uL3V0aWxzL2JlaGF2aW9yJyk7XG5jb25zdCB0b2dnbGVGb3JtSW5wdXQgPSByZXF1aXJlKCcuLi91dGlscy90b2dnbGUtZm9ybS1pbnB1dCcpO1xuXG5jb25zdCBDTElDSyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpLkNMSUNLO1xuY29uc3QgUFJFRklYID0gcmVxdWlyZSgnLi4vY29uZmlnJykucHJlZml4O1xuXG5jb25zdCBMSU5LID0gYC4ke1BSRUZJWH0tc2hvd19wYXNzd29yZCwgLiR7UFJFRklYfS1zaG93X211bHRpcGFzc3dvcmRgO1xuXG5jb25zdCB0b2dnbGUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgdG9nZ2xlRm9ybUlucHV0KHRoaXMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiZWhhdmlvcih7XG4gIFsgQ0xJQ0sgXToge1xuICAgIFsgTElOSyBdOiB0b2dnbGUsXG4gIH0sXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IGJlaGF2aW9yID0gcmVxdWlyZSgnLi4vdXRpbHMvYmVoYXZpb3InKTtcbmNvbnN0IGZvckVhY2ggPSByZXF1aXJlKCdhcnJheS1mb3JlYWNoJyk7XG5jb25zdCBpZ25vcmUgPSByZXF1aXJlKCdyZWNlcHRvci9pZ25vcmUnKTtcbmNvbnN0IHNlbGVjdCA9IHJlcXVpcmUoJy4uL3V0aWxzL3NlbGVjdCcpO1xuXG5jb25zdCBDTElDSyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpLkNMSUNLO1xuY29uc3QgUFJFRklYID0gcmVxdWlyZSgnLi4vY29uZmlnJykucHJlZml4O1xuXG5jb25zdCBCVVRUT04gPSAnLmpzLXNlYXJjaC1idXR0b24nO1xuY29uc3QgRk9STSA9ICcuanMtc2VhcmNoLWZvcm0nO1xuY29uc3QgSU5QVVQgPSAnW3R5cGU9c2VhcmNoXSc7XG5jb25zdCBDT05URVhUID0gJ2hlYWRlcic7IC8vIFhYWFxuY29uc3QgVklTVUFMTFlfSElEREVOID0gYCR7UFJFRklYfS1zci1vbmx5YDtcblxubGV0IGxhc3RCdXR0b247XG5cbmNvbnN0IHNob3dTZWFyY2ggPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdG9nZ2xlU2VhcmNoKHRoaXMsIHRydWUpO1xuICBsYXN0QnV0dG9uID0gdGhpcztcbn07XG5cbmNvbnN0IGhpZGVTZWFyY2ggPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdG9nZ2xlU2VhcmNoKHRoaXMsIGZhbHNlKTtcbiAgbGFzdEJ1dHRvbiA9IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGdldEZvcm0gPSBidXR0b24gPT4ge1xuICBjb25zdCBjb250ZXh0ID0gYnV0dG9uLmNsb3Nlc3QoQ09OVEVYVCk7XG4gIHJldHVybiBjb250ZXh0XG4gICAgPyBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoRk9STSlcbiAgICA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoRk9STSk7XG59O1xuXG5jb25zdCB0b2dnbGVTZWFyY2ggPSAoYnV0dG9uLCBhY3RpdmUpID0+IHtcbiAgY29uc3QgZm9ybSA9IGdldEZvcm0oYnV0dG9uKTtcbiAgaWYgKCFmb3JtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyAke0ZPUk19IGZvdW5kIGZvciBzZWFyY2ggdG9nZ2xlIGluICR7Q09OVEVYVH0hYCk7XG4gIH1cblxuICBidXR0b24uaGlkZGVuID0gYWN0aXZlO1xuICBmb3JtLmNsYXNzTGlzdC50b2dnbGUoVklTVUFMTFlfSElEREVOLCAhYWN0aXZlKTtcblxuICBpZiAoYWN0aXZlKSB7XG4gICAgY29uc3QgaW5wdXQgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoSU5QVVQpO1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gICAgLy8gd2hlbiB0aGUgdXNlciBjbGlja3MgX291dHNpZGVfIG9mIHRoZSBmb3JtIHcvaWdub3JlKCk6IGhpZGUgdGhlXG4gICAgLy8gc2VhcmNoLCB0aGVuIHJlbW92ZSB0aGUgbGlzdGVuZXJcbiAgICBjb25zdCBsaXN0ZW5lciA9IGlnbm9yZShmb3JtLCBlID0+IHtcbiAgICAgIGlmIChsYXN0QnV0dG9uKSB7XG4gICAgICAgIGhpZGVTZWFyY2guY2FsbChsYXN0QnV0dG9uKTtcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihDTElDSywgbGlzdGVuZXIpO1xuICAgIH0pO1xuXG4gICAgLy8gTm9ybWFsbHkgd2Ugd291bGQganVzdCBydW4gdGhpcyBjb2RlIHdpdGhvdXQgYSB0aW1lb3V0LCBidXRcbiAgICAvLyBJRTExIGFuZCBFZGdlIHdpbGwgYWN0dWFsbHkgY2FsbCB0aGUgbGlzdGVuZXIgKmltbWVkaWF0ZWx5KiBiZWNhdXNlXG4gICAgLy8gdGhleSBhcmUgY3VycmVudGx5IGhhbmRsaW5nIHRoaXMgZXhhY3QgdHlwZSBvZiBldmVudCwgc28gd2UnbGxcbiAgICAvLyBtYWtlIHN1cmUgdGhlIGJyb3dzZXIgaXMgZG9uZSBoYW5kbGluZyB0aGUgY3VycmVudCBjbGljayBldmVudCxcbiAgICAvLyBpZiBhbnksIGJlZm9yZSB3ZSBhdHRhY2ggdGhlIGxpc3RlbmVyLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKENMSUNLLCBsaXN0ZW5lcik7XG4gICAgfSwgMCk7XG4gIH1cbn07XG5cbmNvbnN0IHNlYXJjaCA9IGJlaGF2aW9yKHtcbiAgWyBDTElDSyBdOiB7XG4gICAgWyBCVVRUT04gXTogc2hvd1NlYXJjaCxcbiAgfSxcbn0sIHtcbiAgaW5pdDogKHRhcmdldCkgPT4ge1xuICAgIGZvckVhY2goc2VsZWN0KEJVVFRPTiwgdGFyZ2V0KSwgYnV0dG9uID0+IHtcbiAgICAgIHRvZ2dsZVNlYXJjaChidXR0b24sIGZhbHNlKTtcbiAgICB9KTtcbiAgfSxcbiAgdGVhcmRvd246ICh0YXJnZXQpID0+IHtcbiAgICAvLyBmb3JnZXQgdGhlIGxhc3QgYnV0dG9uIGNsaWNrZWRcbiAgICBsYXN0QnV0dG9uID0gdW5kZWZpbmVkO1xuICB9LFxufSk7XG5cbi8qKlxuICogVE9ETyBmb3IgMi4wLCByZW1vdmUgdGhpcyBzdGF0ZW1lbnQgYW5kIGV4cG9ydCBgbmF2aWdhdGlvbmAgZGlyZWN0bHk6XG4gKlxuICogbW9kdWxlLmV4cG9ydHMgPSBiZWhhdmlvcih7Li4ufSk7XG4gKi9cbmNvbnN0IGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbm1vZHVsZS5leHBvcnRzID0gYXNzaWduKFxuICBlbCA9PiBzZWFyY2gub24oZWwpLFxuICBzZWFyY2hcbik7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoJy4uL3V0aWxzL2JlaGF2aW9yJyk7XG5jb25zdCBvbmNlID0gcmVxdWlyZSgncmVjZXB0b3Ivb25jZScpO1xuXG5jb25zdCBDTElDSyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpLkNMSUNLO1xuY29uc3QgUFJFRklYID0gcmVxdWlyZSgnLi4vY29uZmlnJykucHJlZml4O1xuY29uc3QgTElOSyA9IGAuJHtQUkVGSVh9LXNraXBuYXZbaHJlZl49XCIjXCJdYDtcblxuY29uc3Qgc2V0VGFiaW5kZXggPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gTkI6IHdlIGtub3cgYmVjYXVzZSBvZiB0aGUgc2VsZWN0b3Igd2UncmUgZGVsZWdhdGluZyB0byBiZWxvdyB0aGF0IHRoZVxuICAvLyBocmVmIGFscmVhZHkgYmVnaW5zIHdpdGggJyMnXG4gIGNvbnN0IGlkID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKS5zbGljZSgxKTtcbiAgY29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAodGFyZ2V0KSB7XG4gICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAwKTtcbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uY2UoZXZlbnQgPT4ge1xuICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAtMSk7XG4gICAgfSkpO1xuICB9IGVsc2Uge1xuICAgIC8vIHRocm93IGFuIGVycm9yP1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJlaGF2aW9yKHtcbiAgWyBDTElDSyBdOiB7XG4gICAgWyBMSU5LIF06IHNldFRhYmluZGV4LFxuICB9LFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoJy4uL3V0aWxzL2JlaGF2aW9yJyk7XG5jb25zdCB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4uL3V0aWxzL3ZhbGlkYXRlLWlucHV0Jyk7XG5jb25zdCBkZWJvdW5jZSA9IHJlcXVpcmUoJ2xvZGFzaC5kZWJvdW5jZScpO1xuXG5jb25zdCBjaGFuZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKHRoaXMpO1xufTtcblxuY29uc3QgdmFsaWRhdG9yID0gYmVoYXZpb3Ioe1xuICAna2V5dXAgY2hhbmdlJzoge1xuICAgICdpbnB1dFtkYXRhLXZhbGlkYXRpb24tZWxlbWVudF0nOiBjaGFuZ2UsXG4gIH0sXG59KTtcblxuLyoqXG4gKiBUT0RPIGZvciAyLjAsIHJlbW92ZSB0aGlzIHN0YXRlbWVudCBhbmQgZXhwb3J0IGBuYXZpZ2F0aW9uYCBkaXJlY3RseTpcbiAqXG4gKiBtb2R1bGUuZXhwb3J0cyA9IGJlaGF2aW9yKHsuLi59KTtcbiAqL1xuY29uc3QgYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ24oXG4gIGVsID0+IHZhbGlkYXRvci5vbihlbCksXG4gIHZhbGlkYXRvclxuKTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBwcmVmaXg6ICd1c2EnLFxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBUaGlzIHVzZWQgdG8gYmUgY29uZGl0aW9uYWxseSBkZXBlbmRlbnQgb24gd2hldGhlciB0aGVcbiAgLy8gYnJvd3NlciBzdXBwb3J0ZWQgdG91Y2ggZXZlbnRzOyBpZiBpdCBkaWQsIGBDTElDS2Agd2FzIHNldCB0b1xuICAvLyBgdG91Y2hzdGFydGAuICBIb3dldmVyLCB0aGlzIGhhZCBkb3duc2lkZXM6XG4gIC8vXG4gIC8vICogSXQgcHJlLWVtcHRlZCBtb2JpbGUgYnJvd3NlcnMnIGRlZmF1bHQgYmVoYXZpb3Igb2YgZGV0ZWN0aW5nXG4gIC8vICAgd2hldGhlciBhIHRvdWNoIHR1cm5lZCBpbnRvIGEgc2Nyb2xsLCB0aGVyZWJ5IHByZXZlbnRpbmdcbiAgLy8gICB1c2VycyBmcm9tIHVzaW5nIHNvbWUgb2Ygb3VyIGNvbXBvbmVudHMgYXMgc2Nyb2xsIHN1cmZhY2VzLlxuICAvL1xuICAvLyAqIFNvbWUgZGV2aWNlcywgc3VjaCBhcyB0aGUgTWljcm9zb2Z0IFN1cmZhY2UgUHJvLCBzdXBwb3J0ICpib3RoKlxuICAvLyAgIHRvdWNoIGFuZCBjbGlja3MuIFRoaXMgbWVhbnQgdGhlIGNvbmRpdGlvbmFsIGVmZmVjdGl2ZWx5IGRyb3BwZWRcbiAgLy8gICBzdXBwb3J0IGZvciB0aGUgdXNlcidzIG1vdXNlLCBmcnVzdHJhdGluZyB1c2VycyB3aG8gcHJlZmVycmVkXG4gIC8vICAgaXQgb24gdGhvc2Ugc3lzdGVtcy5cbiAgQ0xJQ0s6ICdjbGljaycsXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgZWxwcm90byA9IHdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGU7XG5jb25zdCBISURERU4gPSAnaGlkZGVuJztcblxuaWYgKCEoSElEREVOIGluIGVscHJvdG8pKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbHByb3RvLCBISURERU4sIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShISURERU4pO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShISURERU4sICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKEhJRERFTik7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG4vLyBwb2x5ZmlsbHMgSFRNTEVsZW1lbnQucHJvdG90eXBlLmNsYXNzTGlzdCBhbmQgRE9NVG9rZW5MaXN0XG5yZXF1aXJlKCdjbGFzc2xpc3QtcG9seWZpbGwnKTtcbi8vIHBvbHlmaWxscyBIVE1MRWxlbWVudC5wcm90b3R5cGUuaGlkZGVuXG5yZXF1aXJlKCcuL2VsZW1lbnQtaGlkZGVuJyk7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBkb21yZWFkeSA9IHJlcXVpcmUoJ2RvbXJlYWR5Jyk7XG5cbi8qKlxuICogVGhlICdwb2x5ZmlsbHMnIGRlZmluZSBrZXkgRUNNQVNjcmlwdCA1IG1ldGhvZHMgdGhhdCBtYXkgYmUgbWlzc2luZyBmcm9tXG4gKiBvbGRlciBicm93c2Vycywgc28gbXVzdCBiZSBsb2FkZWQgZmlyc3QuXG4gKi9cbnJlcXVpcmUoJy4vcG9seWZpbGxzJyk7XG5cbmNvbnN0IHVzd2RzID0gcmVxdWlyZSgnLi9jb25maWcnKTtcblxuY29uc3QgY29tcG9uZW50cyA9IHJlcXVpcmUoJy4vY29tcG9uZW50cycpO1xudXN3ZHMuY29tcG9uZW50cyA9IGNvbXBvbmVudHM7XG5cbmRvbXJlYWR5KCgpID0+IHtcbiAgY29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuYm9keTtcbiAgZm9yIChsZXQgbmFtZSBpbiBjb21wb25lbnRzKSB7XG4gICAgY29uc3QgYmVoYXZpb3IgPSBjb21wb25lbnRzWyBuYW1lIF07XG4gICAgYmVoYXZpb3Iub24odGFyZ2V0KTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gdXN3ZHM7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5jb25zdCBmb3JFYWNoID0gcmVxdWlyZSgnYXJyYXktZm9yZWFjaCcpO1xuY29uc3QgQmVoYXZpb3IgPSByZXF1aXJlKCdyZWNlcHRvci9iZWhhdmlvcicpO1xuXG5jb25zdCBzZXF1ZW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VxID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICB0YXJnZXQgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cbiAgICBmb3JFYWNoKHNlcSwgbWV0aG9kID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpc1sgbWV0aG9kIF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpc1sgbWV0aG9kIF0uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufTtcblxuLyoqXG4gKiBAbmFtZSBiZWhhdmlvclxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50c1xuICogQHBhcmFtIHtvYmplY3Q/fSBwcm9wc1xuICogQHJldHVybiB7cmVjZXB0b3IuYmVoYXZpb3J9XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGV2ZW50cywgcHJvcHMpID0+IHtcbiAgcmV0dXJuIEJlaGF2aW9yKGV2ZW50cywgYXNzaWduKHtcbiAgICBvbjogICBzZXF1ZW5jZSgnaW5pdCcsICdhZGQnKSxcbiAgICBvZmY6ICBzZXF1ZW5jZSgndGVhcmRvd24nLCAncmVtb3ZlJyksXG4gIH0sIHByb3BzKSk7XG59O1xuIiwiLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzc1NTc0MzNcbmZ1bmN0aW9uIGlzRWxlbWVudEluVmlld3BvcnQgKGVsLCB3aW49d2luZG93LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jRWw9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgcmV0dXJuIChcbiAgICByZWN0LnRvcCA+PSAwICYmXG4gICAgcmVjdC5sZWZ0ID49IDAgJiZcbiAgICByZWN0LmJvdHRvbSA8PSAod2luLmlubmVySGVpZ2h0IHx8IGRvY0VsLmNsaWVudEhlaWdodCkgJiZcbiAgICByZWN0LnJpZ2h0IDw9ICh3aW4uaW5uZXJXaWR0aCB8fCBkb2NFbC5jbGllbnRXaWR0aClcbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VsZW1lbnRJblZpZXdwb3J0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBuYW1lIGlzRWxlbWVudFxuICogQGRlc2MgcmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gYXJndW1lbnQgaXMgYSBET00gZWxlbWVudC5cbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaXNFbGVtZW50ID0gdmFsdWUgPT4ge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5ub2RlVHlwZSA9PT0gMTtcbn07XG5cbi8qKlxuICogQG5hbWUgc2VsZWN0XG4gKiBAZGVzYyBzZWxlY3RzIGVsZW1lbnRzIGZyb20gdGhlIERPTSBieSBjbGFzcyBzZWxlY3RvciBvciBJRCBzZWxlY3Rvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFRoZSBzZWxlY3RvciB0byB0cmF2ZXJzZSB0aGUgRE9NIHdpdGguXG4gKiBAcGFyYW0ge0RvY3VtZW50fEhUTUxFbGVtZW50P30gY29udGV4dCAtIFRoZSBjb250ZXh0IHRvIHRyYXZlcnNlIHRoZSBET01cbiAqICAgaW4uIElmIG5vdCBwcm92aWRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIGRvY3VtZW50LlxuICogQHJldHVybiB7SFRNTEVsZW1lbnRbXX0gLSBBbiBhcnJheSBvZiBET00gbm9kZXMgb3IgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2VsZWN0IChzZWxlY3RvciwgY29udGV4dCkge1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKCFjb250ZXh0IHx8ICFpc0VsZW1lbnQoY29udGV4dCkpIHtcbiAgICBjb250ZXh0ID0gd2luZG93LmRvY3VtZW50O1xuICB9XG5cbiAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHNlbGVjdGlvbik7XG59O1xuIiwiLyoqXG4gKiBGbGlwcyBnaXZlbiBJTlBVVCBlbGVtZW50cyBiZXR3ZWVuIG1hc2tlZCAoaGlkaW5nIHRoZSBmaWVsZCB2YWx1ZSkgYW5kIHVubWFza2VkXG4gKiBAcGFyYW0ge0FycmF5LkhUTUxFbGVtZW50fSBmaWVsZHMgLSBBbiBhcnJheSBvZiBJTlBVVCBlbGVtZW50c1xuICogQHBhcmFtIHtCb29sZWFufSBtYXNrIC0gV2hldGhlciB0aGUgbWFzayBzaG91bGQgYmUgYXBwbGllZCwgaGlkaW5nIHRoZSBmaWVsZCB2YWx1ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IChmaWVsZCwgbWFzaykgPT4ge1xuICBmaWVsZC5zZXRBdHRyaWJ1dGUoJ2F1dG9jYXBpdGFsaXplJywgJ29mZicpO1xuICBmaWVsZC5zZXRBdHRyaWJ1dGUoJ2F1dG9jb3JyZWN0JywgJ29mZicpO1xuICBmaWVsZC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCBtYXNrID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0Jyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgZm9yRWFjaCA9IHJlcXVpcmUoJ2FycmF5LWZvcmVhY2gnKTtcbmNvbnN0IHJlc29sdmVJZFJlZnMgPSByZXF1aXJlKCdyZXNvbHZlLWlkLXJlZnMnKTtcbmNvbnN0IHNlbGVjdCA9IHJlcXVpcmUoJy4vc2VsZWN0Jyk7XG5jb25zdCB0b2dnbGVGaWVsZE1hc2sgPSByZXF1aXJlKCcuL3RvZ2dsZS1maWVsZC1tYXNrJyk7XG5cbmNvbnN0IENPTlRST0xTID0gJ2FyaWEtY29udHJvbHMnO1xuY29uc3QgUFJFU1NFRCA9ICdhcmlhLXByZXNzZWQnO1xuY29uc3QgU0hPV19BVFRSID0gJ2RhdGEtc2hvdy10ZXh0JztcbmNvbnN0IEhJREVfQVRUUiA9ICdkYXRhLWhpZGUtdGV4dCc7XG5cbi8qKlxuICogUmVwbGFjZSB0aGUgd29yZCBcIlNob3dcIiAob3IgXCJzaG93XCIpIHdpdGggXCJIaWRlXCIgKG9yIFwiaGlkZVwiKSBpbiBhIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzaG93VGV4dFxuICogQHJldHVybiB7c3Ryb25nfSBoaWRlVGV4dFxuICovXG5jb25zdCBnZXRIaWRlVGV4dCA9IHNob3dUZXh0ID0+IHtcbiAgcmV0dXJuIHNob3dUZXh0LnJlcGxhY2UoL1xcYlNob3dcXGIvaSwgc2hvdyA9PiB7XG4gICAgcmV0dXJuICgnUycgPT09IHNob3dbIDAgXSA/ICdIJyA6ICdoJykgKyAnaWRlJztcbiAgfSk7XG59O1xuXG4vKipcbiAqIENvbXBvbmVudCB0aGF0IGRlY29yYXRlcyBhbiBIVE1MIGVsZW1lbnQgd2l0aCB0aGUgYWJpbGl0eSB0byB0b2dnbGUgdGhlXG4gKiBtYXNrZWQgc3RhdGUgb2YgYW4gaW5wdXQgZmllbGQgKGxpa2UgYSBwYXNzd29yZCkgd2hlbiBjbGlja2VkLlxuICogVGhlIGlkcyBvZiB0aGUgZmllbGRzIHRvIGJlIG1hc2tlZCB3aWxsIGJlIHB1bGxlZCBkaXJlY3RseSBmcm9tIHRoZSBidXR0b24nc1xuICogYGFyaWEtY29udHJvbHNgIGF0dHJpYnV0ZS5cbiAqXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWwgICAgUGFyZW50IGVsZW1lbnQgY29udGFpbmluZyB0aGUgZmllbGRzIHRvIGJlIG1hc2tlZFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBlbCA9PiB7XG4gIC8vIHRoaXMgaXMgdGhlICp0YXJnZXQqIHN0YXRlOlxuICAvLyAqIGlmIHRoZSBlbGVtZW50IGhhcyB0aGUgYXR0ciBhbmQgaXQncyAhPT0gXCJ0cnVlXCIsIHByZXNzZWQgaXMgdHJ1ZVxuICAvLyAqIG90aGVyd2lzZSwgcHJlc3NlZCBpcyBmYWxzZVxuICBjb25zdCBwcmVzc2VkID0gZWwuaGFzQXR0cmlidXRlKFBSRVNTRUQpXG4gICAgJiYgZWwuZ2V0QXR0cmlidXRlKFBSRVNTRUQpICE9PSAndHJ1ZSc7XG5cbiAgY29uc3QgZmllbGRzID0gcmVzb2x2ZUlkUmVmcyhlbC5nZXRBdHRyaWJ1dGUoQ09OVFJPTFMpKTtcbiAgZm9yRWFjaChmaWVsZHMsIGZpZWxkID0+IHRvZ2dsZUZpZWxkTWFzayhmaWVsZCwgcHJlc3NlZCkpO1xuXG4gIGlmICghZWwuaGFzQXR0cmlidXRlKFNIT1dfQVRUUikpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoU0hPV19BVFRSLCBlbC50ZXh0Q29udGVudCk7XG4gIH1cblxuICBjb25zdCBzaG93VGV4dCA9IGVsLmdldEF0dHJpYnV0ZShTSE9XX0FUVFIpO1xuICBjb25zdCBoaWRlVGV4dCA9IGVsLmdldEF0dHJpYnV0ZShISURFX0FUVFIpIHx8IGdldEhpZGVUZXh0KHNob3dUZXh0KTtcblxuICBlbC50ZXh0Q29udGVudCA9IHByZXNzZWQgPyBzaG93VGV4dCA6IGhpZGVUZXh0O1xuICBlbC5zZXRBdHRyaWJ1dGUoUFJFU1NFRCwgcHJlc3NlZCk7XG4gIHJldHVybiBwcmVzc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IEVYUEFOREVEID0gJ2FyaWEtZXhwYW5kZWQnO1xuY29uc3QgQ09OVFJPTFMgPSAnYXJpYS1jb250cm9scyc7XG5jb25zdCBISURERU4gPSAnYXJpYS1oaWRkZW4nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChidXR0b24sIGV4cGFuZGVkKSA9PiB7XG5cbiAgaWYgKHR5cGVvZiBleHBhbmRlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgZXhwYW5kZWQgPSBidXR0b24uZ2V0QXR0cmlidXRlKEVYUEFOREVEKSA9PT0gJ2ZhbHNlJztcbiAgfVxuICBidXR0b24uc2V0QXR0cmlidXRlKEVYUEFOREVELCBleHBhbmRlZCk7XG5cbiAgY29uc3QgaWQgPSBidXR0b24uZ2V0QXR0cmlidXRlKENPTlRST0xTKTtcbiAgY29uc3QgY29udHJvbHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghY29udHJvbHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnTm8gdG9nZ2xlIHRhcmdldCBmb3VuZCB3aXRoIGlkOiBcIicgKyBpZCArICdcIidcbiAgICApO1xuICB9XG5cbiAgY29udHJvbHMuc2V0QXR0cmlidXRlKEhJRERFTiwgIWV4cGFuZGVkKTtcbiAgcmV0dXJuIGV4cGFuZGVkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IGRhdGFzZXQgPSByZXF1aXJlKCdlbGVtLWRhdGFzZXQnKTtcblxuY29uc3QgUFJFRklYID0gcmVxdWlyZSgnLi4vY29uZmlnJykucHJlZml4O1xuY29uc3QgQ0hFQ0tFRCA9ICdhcmlhLWNoZWNrZWQnO1xuY29uc3QgQ0hFQ0tFRF9DTEFTUyA9IGAke1BSRUZJWH0tY2hlY2tsaXN0LWNoZWNrZWRgO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHZhbGlkYXRlIChlbCkge1xuICBjb25zdCBkYXRhID0gZGF0YXNldChlbCk7XG4gIGNvbnN0IGlkID0gZGF0YS52YWxpZGF0aW9uRWxlbWVudDtcbiAgY29uc3QgY2hlY2tMaXN0ID0gaWQuY2hhckF0KDApID09PSAnIydcbiAgICA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaWQpXG4gICAgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cbiAgaWYgKCFjaGVja0xpc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTm8gdmFsaWRhdGlvbiBlbGVtZW50IGZvdW5kIHdpdGggaWQ6IFwiJHtpZH1cImBcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aCgndmFsaWRhdGUnKSkge1xuICAgICAgY29uc3QgdmFsaWRhdG9yTmFtZSA9IGtleS5zdWJzdHIoJ3ZhbGlkYXRlJy5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB2YWxpZGF0b3JQYXR0ZXJuID0gbmV3IFJlZ0V4cChkYXRhWyBrZXkgXSk7XG4gICAgICBjb25zdCB2YWxpZGF0b3JTZWxlY3RvciA9IGBbZGF0YS12YWxpZGF0b3I9XCIke3ZhbGlkYXRvck5hbWV9XCJdYDtcbiAgICAgIGNvbnN0IHZhbGlkYXRvckNoZWNrYm94ID0gY2hlY2tMaXN0LnF1ZXJ5U2VsZWN0b3IodmFsaWRhdG9yU2VsZWN0b3IpO1xuICAgICAgaWYgKCF2YWxpZGF0b3JDaGVja2JveCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE5vIHZhbGlkYXRvciBjaGVja2JveCBmb3VuZCBmb3I6IFwiJHt2YWxpZGF0b3JOYW1lfVwiYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGVja2VkID0gdmFsaWRhdG9yUGF0dGVybi50ZXN0KGVsLnZhbHVlKTtcbiAgICAgIHZhbGlkYXRvckNoZWNrYm94LmNsYXNzTGlzdC50b2dnbGUoQ0hFQ0tFRF9DTEFTUywgY2hlY2tlZCk7XG4gICAgICB2YWxpZGF0b3JDaGVja2JveC5zZXRBdHRyaWJ1dGUoQ0hFQ0tFRCwgY2hlY2tlZCk7XG4gICAgfVxuICB9XG59O1xuIl19 diff --git a/themes/digital.gov/static/lib/uswds/js/uswds.min.js b/themes/digital.gov/static/lib/uswds/js/uswds.min.js new file mode 100644 index 0000000000..541fe5efb6 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/js/uswds.min.js @@ -0,0 +1,2 @@ +!function t(e,n,r){function o(u,c){if(!n[u]){if(!e[u]){var s="function"==typeof require&&require;if(!c&&s)return s(u,!0);if(i)return i(u,!0);var a=new Error("Cannot find module '"+u+"'");throw a.code="MODULE_NOT_FOUND",a}var f=n[u]={exports:{}};e[u][0].call(f.exports,function(t){var n=e[u][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[u].exports}for(var i="function"==typeof require&&require,u=0;u=e||n<0||A&&r>=y}function f(){var t=j();return a(t)?l(t):void(m=setTimeout(f,c(t)))}function l(t){return m=void 0,L&&b?o(t):(b=h=void 0,g)}function d(){void 0!==m&&clearTimeout(m),S=0,b=w=h=m=void 0}function p(){return void 0===m?g:l(j())}function v(){var t=j(),n=a(t);if(b=arguments,h=this,w=t,n){if(void 0===m)return i(w);if(A)return m=setTimeout(f,e),o(w)}return void 0===m&&(m=setTimeout(f,e)),g}var b,h,y,g,m,w,S=0,O=!1,A=!1,L=!0;if("function"!=typeof t)throw new TypeError(s);return e=u(e)||0,r(n)&&(O=!!n.leading,A="maxWait"in n,y=A?x(u(n.maxWait)||0,e):y,L="trailing"in n?!!n.trailing:L),v.cancel=d,v.flush=p,v}function r(t){var e="undefined"==typeof t?"undefined":c(t);return!!t&&("object"==e||"function"==e)}function o(t){return!!t&&"object"==("undefined"==typeof t?"undefined":c(t))}function i(t){return"symbol"==("undefined"==typeof t?"undefined":c(t))||o(t)&&w.call(t)==f}function u(t){if("number"==typeof t)return t;if(i(t))return a;if(r(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=r(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(l,"");var n=p.test(t);return n||v.test(t)?b(t.slice(2),n?2:8):d.test(t)?a:+t}var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s="Expected a function",a=NaN,f="[object Symbol]",l=/^\s+|\s+$/g,d=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,v=/^0o[0-7]+$/i,b=parseInt,h="object"==("undefined"==typeof t?"undefined":c(t))&&t&&t.Object===Object&&t,y="object"==("undefined"==typeof self?"undefined":c(self))&&self&&self.Object===Object&&self,g=h||y||Function("return this")(),m=Object.prototype,w=m.toString,x=Math.max,E=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],8:[function(t,e,n){"use strict";function r(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function o(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(e).map(function(t){return e[t]});if("0123456789"!==r.join(""))return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(t){o[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},o)).join("")}catch(i){return!1}}var i=Object.getOwnPropertySymbols,u=Object.prototype.hasOwnProperty,c=Object.prototype.propertyIsEnumerable;e.exports=o()?Object.assign:function(t,e){for(var n,o,s=r(t),a=1;a-1?t.split(s).map(function(t){return o({type:t},d)}):(d.type=t,[d])},f=function(t,e){var n=t[e];return delete t[e],n};e.exports=function(t,e){var n=Object.keys(t).reduce(function(e,n){var r=a(n,t[n]);return e.concat(r)},[]);return o({add:function(t){n.forEach(function(e){t.addEventListener(e.type,e.delegate,e.options)})},remove:function(t){n.forEach(function(e){t.removeEventListener(e.type,e.delegate,e.options)})}},e)}},{"../delegate":11,"../delegateAll":12,"object-assign":8}],10:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.some(function(t){return t.call(this,e)===!1},this)}}},{}],11:[function(t,e,n){"use strict";t("element-closest"),e.exports=function(t,e){return function(n){var r=n.target.closest(t);if(r)return e.call(r,n)}}},{"element-closest":6}],12:[function(t,e,n){"use strict";var r=t("../delegate"),o=t("../compose"),i="*";e.exports=function(t){var e=Object.keys(t);if(1===e.length&&e[0]===i)return t[i];var n=e.reduce(function(e,n){return e.push(r(n,t[n])),e},[]);return o(n)}},{"../compose":10,"../delegate":11}],13:[function(t,e,n){"use strict";e.exports=function(t,e){return function(n){if(t!==n.target&&!t.contains(n.target))return e.call(this,n)}}},{}],14:[function(t,e,n){"use strict";e.exports=function(t,e){var n=function(r){return r.currentTarget.removeEventListener(r.type,n,e),t.call(this,r)};return n}},{}],15:[function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=/(^\s+)|(\s+$)/g,i=/\s+/,u=String.prototype.trim?function(t){return t.trim()}:function(t){return t.replace(o,"")},c=function(t){return this.querySelector('[id="'+t.replace(/"/g,'\\"')+'"]')};e.exports=function(t,e){if("string"!=typeof t)throw new Error("Expected a string but got "+("undefined"==typeof t?"undefined":r(t)));e||(e=window.document);var n=e.getElementById?e.getElementById.bind(e):c.bind(e);return t=u(t).split(i),1===t.length&&""===t[0]?[]:t.map(function(t){var e=n(t);if(!e)throw new Error('no element with id: "'+t+'"');return e})}},{}],16:[function(t,e,n){"use strict";function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var o=t("../utils/behavior"),i=t("array-filter"),u=t("array-foreach"),c=t("../utils/toggle"),s=t("../utils/is-in-viewport"),a=t("../events").CLICK,f=t("../config").prefix,l="."+f+"-accordion, ."+f+"-accordion-bordered",d="."+f+"-accordion-button[aria-controls]",p="aria-expanded",v="aria-multiselectable",b=function(t,e){var n=t.closest(l);if(!n)throw new Error(d+" is missing outer "+l);e=c(t,e);var r="true"===n.getAttribute(v);e&&!r&&u(g(n),function(e){e!==t&&c(e,!1)})},h=function(t){return b(t,!0)},y=function(t){return b(t,!1)},g=function(t){return i(t.querySelectorAll(d),function(e){return e.closest(l)===t})},m=o(r({},a,r({},d,function(t){t.preventDefault(),b(this),"true"===this.getAttribute(p)&&(s(this)||this.scrollIntoView())})),{init:function(t){u(t.querySelectorAll(d),function(t){var e="true"===t.getAttribute(p);b(t,e)})},ACCORDION:l,BUTTON:d,show:h,hide:y,toggle:b,getButtons:g}),w=function(t){this.root=t,m.on(this.root)},x=t("object-assign");x(w,m),w.prototype.show=h,w.prototype.hide=y,w.prototype.remove=function(){m.off(this.root)},e.exports=w},{"../config":25,"../events":26,"../utils/behavior":30,"../utils/is-in-viewport":31,"../utils/toggle":35,"array-filter":1,"array-foreach":2,"object-assign":8}],17:[function(t,e,n){"use strict";function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var o=t("../utils/behavior"),i=(t("../utils/toggle"),t("../events").CLICK),u=t("../config").prefix,c="."+u+"-banner-header",s=u+"-banner-header-expanded",a=function(t){return t.preventDefault(),this.closest(c).classList.toggle(s),!1};e.exports=o(r({},i,r({},c+" [aria-controls]",a)))},{"../config":25,"../events":26,"../utils/behavior":30,"../utils/toggle":35}],18:[function(t,e,n){"use strict";function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var o=(t("./accordion"),t("../utils/behavior")),i=t("lodash.debounce"),u=t("array-foreach"),c=t("../utils/select"),s=t("../events").CLICK,a=t("../config").prefix,f="hidden",l="."+a+"-footer-big",d=l+" nav",p=d+" ."+a+"-footer-primary-link",v=d+" ul",b=600,h=180,y=function(){var t=this.closest(v);t.classList.remove(f);var e=t.closest(d).querySelectorAll("ul");u(e,function(e){e!==t&&e.classList.add(f)})},g=i(function(){var t=window.innerWidth1&&void 0!==arguments[1]?arguments[1]:window,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:document.documentElement,r=t.getBoundingClientRect();return r.top>=0&&r.left>=0&&r.bottom<=(e.innerHeight||n.clientHeight)&&r.right<=(e.innerWidth||n.clientWidth)}e.exports=r},{}],32:[function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=function(t){return t&&"object"===("undefined"==typeof t?"undefined":r(t))&&1===t.nodeType};e.exports=function(t,e){if("string"!=typeof t)return[];e&&o(e)||(e=window.document);var n=e.querySelectorAll(t);return Array.prototype.slice.call(n)}},{}],33:[function(t,e,n){"use strict";e.exports=function(t,e){t.setAttribute("autocapitalize","off"),t.setAttribute("autocorrect","off"),t.setAttribute("type",e?"password":"text")}},{}],34:[function(t,e,n){"use strict";var r=t("array-foreach"),o=t("resolve-id-refs"),i=(t("./select"),t("./toggle-field-mask")),u="aria-controls",c="aria-pressed",s="data-show-text",a="data-hide-text",f=function(t){return t.replace(/\bShow\b/i,function(t){return("S"===t[0]?"H":"h")+"ide"})};e.exports=function(t){var e=t.hasAttribute(c)&&"true"!==t.getAttribute(c),n=o(t.getAttribute(u));r(n,function(t){return i(t,e)}),t.hasAttribute(s)||t.setAttribute(s,t.textContent);var l=t.getAttribute(s),d=t.getAttribute(a)||f(l);return t.textContent=e?l:d,t.setAttribute(c,e),e}},{"./select":32,"./toggle-field-mask":33,"array-foreach":2,"resolve-id-refs":15}],35:[function(t,e,n){"use strict";var r="aria-expanded",o="aria-controls",i="aria-hidden";e.exports=function(t,e){"boolean"!=typeof e&&(e="false"===t.getAttribute(r)),t.setAttribute(r,e);var n=t.getAttribute(o),u=document.getElementById(n);if(!u)throw new Error('No toggle target found with id: "'+n+'"');return u.setAttribute(i,!e),e}},{}],36:[function(t,e,n){"use strict";var r=t("elem-dataset"),o=t("../config").prefix,i="aria-checked",u=o+"-checklist-checked";e.exports=function(t){var e=r(t),n=e.validationElement,o="#"===n.charAt(0)?document.querySelector(n):document.getElementById(n);if(!o)throw new Error('No validation element found with id: "'+n+'"');for(var c in e)if(c.startsWith("validate")){var s=c.substr("validate".length).toLowerCase(),a=new RegExp(e[c]),f='[data-validator="'+s+'"]',l=o.querySelector(f);if(!l)throw new Error('No validator checkbox found for: "'+s+'"');var d=a.test(t.value);l.classList.toggle(u,d),l.setAttribute(i,d)}}},{"../config":25,"elem-dataset":5}]},{},[29]); +//# sourceMappingURL=uswds.min.js.map diff --git a/themes/digital.gov/static/lib/uswds/js/uswds.min.js.map b/themes/digital.gov/static/lib/uswds/js/uswds.min.js.map new file mode 100644 index 0000000000..ffbbe07359 --- /dev/null +++ b/themes/digital.gov/static/lib/uswds/js/uswds.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","uswds.js","node_modules/array-filter/index.js","node_modules/array-foreach/index.js","node_modules/classlist-polyfill/src/index.js","node_modules/domready/ready.js","node_modules/elem-dataset/dist/index.js","node_modules/element-closest/element-closest.js","node_modules/lodash.debounce/index.js","node_modules/object-assign/index.js","node_modules/receptor/behavior/index.js","node_modules/receptor/compose/index.js","node_modules/receptor/delegate/index.js","node_modules/receptor/delegateAll/index.js","node_modules/receptor/ignore/index.js","node_modules/receptor/once/index.js","node_modules/resolve-id-refs/index.js","src/js/components/accordion.js","src/js/components/banner.js","src/js/components/footer.js","src/js/components/index.js","src/js/components/navigation.js","src/js/components/password.js","src/js/components/search.js","src/js/components/skipnav.js","src/js/components/validator.js","src/js/config.js","src/js/events.js","src/js/polyfills/element-hidden.js","src/js/polyfills/index.js","src/js/start.js","src/js/utils/behavior.js","src/js/utils/is-in-viewport.js","src/js/utils/select.js","src/js/utils/toggle-field-mask.js","src/js/utils/toggle-form-input.js","src/js/utils/toggle.js","src/js/utils/validate-input.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length","1","module","arr","fn","self","filter","TypeError","ret","hasOwn","val","push","Object","prototype","hasOwnProperty","2","ary","callback","thisArg","forEach","3","window","document","createElement","createElementNS","view","classListProp","protoProp","elemCtrProto","Element","objCtr","strTrim","String","trim","this","replace","arrIndexOf","Array","indexOf","item","len","DOMEx","type","message","name","DOMException","checkTokenAndGetIndex","classList","token","test","ClassList","elem","trimmedClasses","getAttribute","classes","split","_updateClassName","setAttribute","toString","classListProto","classListGetter","contains","add","tokens","arguments","updated","remove","index","splice","toggle","force","result","method","join","defineProperty","classListPropDesc","get","enumerable","configurable","ex","undefined","number","__defineGetter__","testElement","createMethod","original","DOMTokenList","_toggle","4","_typeof","Symbol","iterator","obj","constructor","definition","define","amd","_listener","fns","doc","hack","documentElement","doScroll","domContentLoaded","loaded","readyState","addEventListener","removeEventListener","shift","setTimeout","5","useNative","Boolean","dataset","aB","nativeDataset","element","getter","value","setter","removeAttribute","map","attributes","j","attribute","prop","slice","charAt","toUpperCase","bind","set","6","ElementProto","matches","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","selector","elements","ownerDocument","querySelectorAll","closest","nodeType","parentNode","7","global","debounce","func","wait","options","invokeFunc","time","args","lastArgs","lastThis","lastInvokeTime","apply","leadingEdge","timerId","timerExpired","leading","remainingWait","timeSinceLastCall","lastCallTime","timeSinceLastInvoke","maxing","nativeMin","maxWait","shouldInvoke","now","trailingEdge","trailing","cancel","clearTimeout","flush","debounced","isInvoking","FUNC_ERROR_TEXT","toNumber","isObject","nativeMax","isObjectLike","isSymbol","objectToString","symbolTag","NAN","other","valueOf","reTrim","isBinary","reIsBinary","reIsOctal","freeParseInt","reIsBadHex","parseInt","freeGlobal","freeSelf","root","Function","objectProto","Math","max","min","Date","8","toObject","shouldUseNative","assign","test1","getOwnPropertyNames","test2","fromCharCode","order2","test3","letter","keys","err","getOwnPropertySymbols","propIsEnumerable","propertyIsEnumerable","target","source","from","symbols","to","key","9","delegate","delegateAll","DELEGATE_PATTERN","SPACE","getListeners","handler","match","capture","popKey","passive","listener","_type","events","props","listeners","reduce","memo","concat","../delegate","../delegateAll","object-assign","10","functions","some","11","event","element-closest","12","compose","SPLAT","selectors","delegates","../compose","13","14","wrapped","currentTarget","15","RE_TRIM","RE_SPLIT","str","queryById","id","querySelector","ids","getElementById","el","16","_defineProperty","writable","behavior","isElementInViewport","CLICK","PREFIX","prefix","ACCORDION","BUTTON","EXPANDED","MULTISELECTABLE","toggleButton","button","expanded","accordion","multiselectable","getAccordionButtons","showButton","hideButton","preventDefault","scrollIntoView","init","show","hide","getButtons","Accordion","on","off","../config","../events","../utils/behavior","../utils/is-in-viewport","../utils/toggle","array-filter","array-foreach","17","HEADER","EXPANDED_CLASS","toggleBanner","18","select","HIDDEN","SCOPE","NAV","LIST","HIDE_MAX_WIDTH","DEBOUNCE_RATE","showPanel","list","lists","resize","hidden","innerWidth","teardown","../utils/select","./accordion","lodash.debounce","19","banner","footer","navigation","password","search","skipnav","validator","./banner","./footer","./navigation","./password","./search","./skipnav","./validator","20","_CLICK","NAV_LINKS","OPENERS","CLOSE_BUTTON","OVERLAY","CLOSERS","TOGGLES","ACTIVE_CLASS","VISIBLE_CLASS","isActive","body","toggleNav","active","closeButton","menuButton","focus","activeElement","closer","getBoundingClientRect","width","acc","btn","21","toggleFormInput","LINK","../utils/toggle-form-input","22","ignore","FORM","INPUT","CONTEXT","VISUALLY_HIDDEN","lastButton","showSearch","toggleSearch","hideSearch","getForm","context","form","input","receptor/ignore","23","once","setTabindex","receptor/once","24","validate","change","keyup change","input[data-validation-element]","../utils/validate-input","25","26","27","elproto","HTMLElement","hasAttribute","28","./element-hidden","classlist-polyfill","29","domready","uswds","components","./components","./config","./polyfills","30","Behavior","sequence","seq","_this","receptor/behavior","31","win","docEl","rect","top","left","bottom","innerHeight","clientHeight","right","clientWidth","32","isElement","selection","33","field","mask","34","resolveIdRefs","toggleFieldMask","CONTROLS","PRESSED","SHOW_ATTR","HIDE_ATTR","getHideText","showText","pressed","fields","textContent","hideText","./select","./toggle-field-mask","resolve-id-refs","35","controls","36","CHECKED","CHECKED_CLASS","data","validationElement","checkList","startsWith","validatorName","substr","toLowerCase","validatorPattern","RegExp","validatorSelector","validatorCheckbox","checked","elem-dataset"],"mappings":"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","file":"uswds.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = (typeof global === 'undefined' ? 'undefined' : _typeof(global)) == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = (typeof self === 'undefined' ? 'undefined' : _typeof(self)) == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function now() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? other + '' : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n}\n\nmodule.exports = debounce;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],8:[function(require,module,exports){\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\n\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n},{}],9:[function(require,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar assign = require('object-assign');\nvar delegate = require('../delegate');\nvar delegateAll = require('../delegateAll');\n\nvar DELEGATE_PATTERN = /^(.+):delegate\\((.+)\\)$/;\nvar SPACE = ' ';\n\nvar getListeners = function getListeners(type, handler) {\n var match = type.match(DELEGATE_PATTERN);\n var selector;\n if (match) {\n type = match[1];\n selector = match[2];\n }\n\n var options;\n if ((typeof handler === 'undefined' ? 'undefined' : _typeof(handler)) === 'object') {\n options = {\n capture: popKey(handler, 'capture'),\n passive: popKey(handler, 'passive')\n };\n }\n\n var listener = {\n selector: selector,\n delegate: (typeof handler === 'undefined' ? 'undefined' : _typeof(handler)) === 'object' ? delegateAll(handler) : selector ? delegate(selector, handler) : handler,\n options: options\n };\n\n if (type.indexOf(SPACE) > -1) {\n return type.split(SPACE).map(function (_type) {\n return assign({ type: _type }, listener);\n });\n } else {\n listener.type = type;\n return [listener];\n }\n};\n\nvar popKey = function popKey(obj, key) {\n var value = obj[key];\n delete obj[key];\n return value;\n};\n\nmodule.exports = function behavior(events, props) {\n var listeners = Object.keys(events).reduce(function (memo, type) {\n var listeners = getListeners(type, events[type]);\n return memo.concat(listeners);\n }, []);\n\n return assign({\n add: function addBehavior(element) {\n listeners.forEach(function (listener) {\n element.addEventListener(listener.type, listener.delegate, listener.options);\n });\n },\n remove: function removeBehavior(element) {\n listeners.forEach(function (listener) {\n element.removeEventListener(listener.type, listener.delegate, listener.options);\n });\n }\n }, props);\n};\n\n},{\"../delegate\":11,\"../delegateAll\":12,\"object-assign\":8}],10:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function compose(functions) {\n return function (e) {\n return functions.some(function (fn) {\n return fn.call(this, e) === false;\n }, this);\n };\n};\n\n},{}],11:[function(require,module,exports){\n'use strict';\n\n// polyfill Element.prototype.closest\nrequire('element-closest');\n\nmodule.exports = function delegate(selector, fn) {\n return function delegation(event) {\n var target = event.target.closest(selector);\n if (target) {\n return fn.call(target, event);\n }\n };\n};\n\n},{\"element-closest\":6}],12:[function(require,module,exports){\n'use strict';\n\nvar delegate = require('../delegate');\nvar compose = require('../compose');\n\nvar SPLAT = '*';\n\nmodule.exports = function delegateAll(selectors) {\n var keys = Object.keys(selectors);\n\n // XXX optimization: if there is only one handler and it applies to\n // all elements (the \"*\" CSS selector), then just return that\n // handler\n if (keys.length === 1 && keys[0] === SPLAT) {\n return selectors[SPLAT];\n }\n\n var delegates = keys.reduce(function (memo, selector) {\n memo.push(delegate(selector, selectors[selector]));\n return memo;\n }, []);\n return compose(delegates);\n};\n\n},{\"../compose\":10,\"../delegate\":11}],13:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function ignore(element, fn) {\n return function ignorance(e) {\n if (element !== e.target && !element.contains(e.target)) {\n return fn.call(this, e);\n }\n };\n};\n\n},{}],14:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function once(listener, options) {\n var wrapped = function wrappedOnce(e) {\n e.currentTarget.removeEventListener(e.type, wrapped, options);\n return listener.call(this, e);\n };\n return wrapped;\n};\n\n},{}],15:[function(require,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar RE_TRIM = /(^\\s+)|(\\s+$)/g;\nvar RE_SPLIT = /\\s+/;\n\nvar trim = String.prototype.trim ? function (str) {\n return str.trim();\n} : function (str) {\n return str.replace(RE_TRIM, '');\n};\n\nvar queryById = function queryById(id) {\n return this.querySelector('[id=\"' + id.replace(/\"/g, '\\\\\"') + '\"]');\n};\n\nmodule.exports = function resolveIds(ids, doc) {\n if (typeof ids !== 'string') {\n throw new Error('Expected a string but got ' + (typeof ids === 'undefined' ? 'undefined' : _typeof(ids)));\n }\n\n if (!doc) {\n doc = window.document;\n }\n\n var getElementById = doc.getElementById ? doc.getElementById.bind(doc) : queryById.bind(doc);\n\n ids = trim(ids).split(RE_SPLIT);\n\n // XXX we can short-circuit here because trimming and splitting a\n // string of just whitespace produces an array containing a single,\n // empty string\n if (ids.length === 1 && ids[0] === '') {\n return [];\n }\n\n return ids.map(function (id) {\n var el = getElementById(id);\n if (!el) {\n throw new Error('no element with id: \"' + id + '\"');\n }\n return el;\n });\n};\n\n},{}],16:[function(require,module,exports){\n'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar behavior = require('../utils/behavior');\nvar filter = require('array-filter');\nvar forEach = require('array-foreach');\nvar toggle = require('../utils/toggle');\nvar isElementInViewport = require('../utils/is-in-viewport');\n\nvar CLICK = require('../events').CLICK;\nvar PREFIX = require('../config').prefix;\n\n// XXX match .usa-accordion and .usa-accordion-bordered\nvar ACCORDION = '.' + PREFIX + '-accordion, .' + PREFIX + '-accordion-bordered';\nvar BUTTON = '.' + PREFIX + '-accordion-button[aria-controls]';\nvar EXPANDED = 'aria-expanded';\nvar MULTISELECTABLE = 'aria-multiselectable';\n\n/**\n * Toggle a button's \"pressed\" state, optionally providing a target\n * state.\n *\n * @param {HTMLButtonElement} button\n * @param {boolean?} expanded If no state is provided, the current\n * state will be toggled (from false to true, and vice-versa).\n * @return {boolean} the resulting state\n */\nvar toggleButton = function toggleButton(button, expanded) {\n var accordion = button.closest(ACCORDION);\n if (!accordion) {\n throw new Error(BUTTON + ' is missing outer ' + ACCORDION);\n }\n\n expanded = toggle(button, expanded);\n // XXX multiselectable is opt-in, to preserve legacy behavior\n var multiselectable = accordion.getAttribute(MULTISELECTABLE) === 'true';\n\n if (expanded && !multiselectable) {\n forEach(getAccordionButtons(accordion), function (other) {\n if (other !== button) {\n toggle(other, false);\n }\n });\n }\n};\n\n/**\n * @param {HTMLButtonElement} button\n * @return {boolean} true\n */\nvar showButton = function showButton(button) {\n return toggleButton(button, true);\n};\n\n/**\n * @param {HTMLButtonElement} button\n * @return {boolean} false\n */\nvar hideButton = function hideButton(button) {\n return toggleButton(button, false);\n};\n\n/**\n * Get an Array of button elements belonging directly to the given\n * accordion element.\n * @param {HTMLElement} accordion\n * @return {array}\n */\nvar getAccordionButtons = function getAccordionButtons(accordion) {\n return filter(accordion.querySelectorAll(BUTTON), function (button) {\n return button.closest(ACCORDION) === accordion;\n });\n};\n\nvar accordion = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, function (event) {\n event.preventDefault();\n toggleButton(this);\n\n if (this.getAttribute(EXPANDED) === 'true') {\n // We were just expanded, but if another accordion was also just\n // collapsed, we may no longer be in the viewport. This ensures\n // that we are still visible, so the user isn't confused.\n if (!isElementInViewport(this)) this.scrollIntoView();\n }\n})), {\n init: function init(root) {\n forEach(root.querySelectorAll(BUTTON), function (button) {\n var expanded = button.getAttribute(EXPANDED) === 'true';\n toggleButton(button, expanded);\n });\n },\n ACCORDION: ACCORDION,\n BUTTON: BUTTON,\n show: showButton,\n hide: hideButton,\n toggle: toggleButton,\n getButtons: getAccordionButtons\n});\n\n/**\n * TODO: for 2.0, remove everything below this comment and export the\n * behavior directly:\n *\n * module.exports = behavior({...});\n */\nvar Accordion = function Accordion(root) {\n this.root = root;\n accordion.on(this.root);\n};\n\n// copy all of the behavior methods and props to Accordion\nvar assign = require('object-assign');\nassign(Accordion, accordion);\n\nAccordion.prototype.show = showButton;\nAccordion.prototype.hide = hideButton;\n\nAccordion.prototype.remove = function () {\n accordion.off(this.root);\n};\n\nmodule.exports = Accordion;\n\n},{\"../config\":25,\"../events\":26,\"../utils/behavior\":30,\"../utils/is-in-viewport\":31,\"../utils/toggle\":35,\"array-filter\":1,\"array-foreach\":2,\"object-assign\":8}],17:[function(require,module,exports){\n'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar behavior = require('../utils/behavior');\nvar toggle = require('../utils/toggle');\n\nvar CLICK = require('../events').CLICK;\nvar PREFIX = require('../config').prefix;\n\nvar HEADER = '.' + PREFIX + '-banner-header';\nvar EXPANDED_CLASS = PREFIX + '-banner-header-expanded';\n\nvar toggleBanner = function toggleBanner(event) {\n event.preventDefault();\n this.closest(HEADER).classList.toggle(EXPANDED_CLASS);\n return false;\n};\n\nmodule.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, HEADER + ' [aria-controls]', toggleBanner)));\n\n},{\"../config\":25,\"../events\":26,\"../utils/behavior\":30,\"../utils/toggle\":35}],18:[function(require,module,exports){\n'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar accordion = require('./accordion');\nvar behavior = require('../utils/behavior');\nvar debounce = require('lodash.debounce');\nvar forEach = require('array-foreach');\nvar select = require('../utils/select');\n\nvar CLICK = require('../events').CLICK;\nvar PREFIX = require('../config').prefix;\n\nvar HIDDEN = 'hidden';\nvar SCOPE = '.' + PREFIX + '-footer-big';\nvar NAV = SCOPE + ' nav';\nvar BUTTON = NAV + ' .' + PREFIX + '-footer-primary-link';\nvar LIST = NAV + ' ul';\n\nvar HIDE_MAX_WIDTH = 600;\nvar DEBOUNCE_RATE = 180;\n\nvar showPanel = function showPanel() {\n var list = this.closest(LIST);\n list.classList.remove(HIDDEN);\n\n // NB: this *should* always succeed because the button\n // selector is scoped to \".{prefix}-footer-big nav\"\n var lists = list.closest(NAV).querySelectorAll('ul');\n\n forEach(lists, function (el) {\n if (el !== list) {\n el.classList.add(HIDDEN);\n }\n });\n};\n\nvar resize = debounce(function () {\n var hidden = window.innerWidth < HIDE_MAX_WIDTH;\n forEach(select(LIST), function (list) {\n list.classList.toggle(HIDDEN, hidden);\n });\n}, DEBOUNCE_RATE);\n\nmodule.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, showPanel)), {\n // export for use elsewhere\n HIDE_MAX_WIDTH: HIDE_MAX_WIDTH,\n DEBOUNCE_RATE: DEBOUNCE_RATE,\n\n init: function init(target) {\n resize();\n window.addEventListener('resize', resize);\n },\n\n teardown: function teardown(target) {\n window.removeEventListener('resize', resize);\n }\n});\n\n},{\"../config\":25,\"../events\":26,\"../utils/behavior\":30,\"../utils/select\":32,\"./accordion\":16,\"array-foreach\":2,\"lodash.debounce\":7}],19:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n accordion: require('./accordion'),\n banner: require('./banner'),\n footer: require('./footer'),\n navigation: require('./navigation'),\n password: require('./password'),\n search: require('./search'),\n skipnav: require('./skipnav'),\n validator: require('./validator')\n};\n\n},{\"./accordion\":16,\"./banner\":17,\"./footer\":18,\"./navigation\":20,\"./password\":21,\"./search\":22,\"./skipnav\":23,\"./validator\":24}],20:[function(require,module,exports){\n'use strict';\n\nvar _CLICK;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar behavior = require('../utils/behavior');\nvar forEach = require('array-foreach');\nvar select = require('../utils/select');\nvar accordion = require('./accordion');\n\nvar CLICK = require('../events').CLICK;\nvar PREFIX = require('../config').prefix;\n\nvar NAV = '.' + PREFIX + '-nav';\nvar NAV_LINKS = NAV + ' a';\nvar OPENERS = '.' + PREFIX + '-menu-btn';\nvar CLOSE_BUTTON = '.' + PREFIX + '-nav-close';\nvar OVERLAY = '.' + PREFIX + '-overlay';\nvar CLOSERS = CLOSE_BUTTON + ', .' + PREFIX + '-overlay';\nvar TOGGLES = [NAV, OVERLAY].join(', ');\n\nvar ACTIVE_CLASS = 'usa-mobile_nav-active';\nvar VISIBLE_CLASS = 'is-visible';\n\nvar isActive = function isActive() {\n return document.body.classList.contains(ACTIVE_CLASS);\n};\n\nvar toggleNav = function toggleNav(active) {\n var body = document.body;\n if (typeof active !== 'boolean') {\n active = !isActive();\n }\n body.classList.toggle(ACTIVE_CLASS, active);\n\n forEach(select(TOGGLES), function (el) {\n el.classList.toggle(VISIBLE_CLASS, active);\n });\n\n var closeButton = body.querySelector(CLOSE_BUTTON);\n var menuButton = body.querySelector(OPENERS);\n\n if (active && closeButton) {\n // The mobile nav was just activated, so focus on the close button,\n // which is just before all the nav elements in the tab order.\n closeButton.focus();\n } else if (!active && document.activeElement === closeButton && menuButton) {\n // The mobile nav was just deactivated, and focus was on the close\n // button, which is no longer visible. We don't want the focus to\n // disappear into the void, so focus on the menu button if it's\n // visible (this may have been what the user was just focused on,\n // if they triggered the mobile nav by mistake).\n menuButton.focus();\n }\n\n return active;\n};\n\nvar resize = function resize() {\n var closer = document.body.querySelector(CLOSE_BUTTON);\n\n if (isActive() && closer && closer.getBoundingClientRect().width === 0) {\n // The mobile nav is active, but the close box isn't visible, which\n // means the user's viewport has been resized so that it is no longer\n // in mobile mode. Let's make the page state consistent by\n // deactivating the mobile nav.\n toggleNav.call(closer, false);\n }\n};\n\nvar navigation = behavior(_defineProperty({}, CLICK, (_CLICK = {}, _defineProperty(_CLICK, OPENERS, toggleNav), _defineProperty(_CLICK, CLOSERS, toggleNav), _defineProperty(_CLICK, NAV_LINKS, function () {\n // A navigation link has been clicked! We want to collapse any\n // hierarchical navigation UI it's a part of, so that the user\n // can focus on whatever they've just selected.\n\n // Some navigation links are inside accordions; when they're\n // clicked, we want to collapse those accordions.\n var acc = this.closest(accordion.ACCORDION);\n if (acc) {\n accordion.getButtons(acc).forEach(function (btn) {\n return accordion.hide(btn);\n });\n }\n\n // If the mobile navigation menu is active, we want to hide it.\n if (isActive()) {\n toggleNav.call(this, false);\n }\n}), _CLICK)), {\n init: function init() {\n resize();\n window.addEventListener('resize', resize, false);\n },\n teardown: function teardown() {\n window.removeEventListener('resize', resize, false);\n }\n});\n\n/**\n * TODO for 2.0, remove this statement and export `navigation` directly:\n *\n * module.exports = behavior({...});\n */\nvar assign = require('object-assign');\nmodule.exports = assign(function (el) {\n return navigation.on(el);\n}, navigation);\n\n},{\"../config\":25,\"../events\":26,\"../utils/behavior\":30,\"../utils/select\":32,\"./accordion\":16,\"array-foreach\":2,\"object-assign\":8}],21:[function(require,module,exports){\n'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar behavior = require('../utils/behavior');\nvar toggleFormInput = require('../utils/toggle-form-input');\n\nvar CLICK = require('../events').CLICK;\nvar PREFIX = require('../config').prefix;\n\nvar LINK = '.' + PREFIX + '-show_password, .' + PREFIX + '-show_multipassword';\n\nvar toggle = function toggle(event) {\n event.preventDefault();\n toggleFormInput(this);\n};\n\nmodule.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, LINK, toggle)));\n\n},{\"../config\":25,\"../events\":26,\"../utils/behavior\":30,\"../utils/toggle-form-input\":34}],22:[function(require,module,exports){\n'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar behavior = require('../utils/behavior');\nvar forEach = require('array-foreach');\nvar ignore = require('receptor/ignore');\nvar select = require('../utils/select');\n\nvar CLICK = require('../events').CLICK;\nvar PREFIX = require('../config').prefix;\n\nvar BUTTON = '.js-search-button';\nvar FORM = '.js-search-form';\nvar INPUT = '[type=search]';\nvar CONTEXT = 'header'; // XXX\nvar VISUALLY_HIDDEN = PREFIX + '-sr-only';\n\nvar lastButton = void 0;\n\nvar showSearch = function showSearch(event) {\n toggleSearch(this, true);\n lastButton = this;\n};\n\nvar hideSearch = function hideSearch(event) {\n toggleSearch(this, false);\n lastButton = undefined;\n};\n\nvar getForm = function getForm(button) {\n var context = button.closest(CONTEXT);\n return context ? context.querySelector(FORM) : document.querySelector(FORM);\n};\n\nvar toggleSearch = function toggleSearch(button, active) {\n var form = getForm(button);\n if (!form) {\n throw new Error('No ' + FORM + ' found for search toggle in ' + CONTEXT + '!');\n }\n\n button.hidden = active;\n form.classList.toggle(VISUALLY_HIDDEN, !active);\n\n if (active) {\n var input = form.querySelector(INPUT);\n if (input) {\n input.focus();\n }\n // when the user clicks _outside_ of the form w/ignore(): hide the\n // search, then remove the listener\n var listener = ignore(form, function (e) {\n if (lastButton) {\n hideSearch.call(lastButton);\n }\n document.body.removeEventListener(CLICK, listener);\n });\n\n // Normally we would just run this code without a timeout, but\n // IE11 and Edge will actually call the listener *immediately* because\n // they are currently handling this exact type of event, so we'll\n // make sure the browser is done handling the current click event,\n // if any, before we attach the listener.\n setTimeout(function () {\n document.body.addEventListener(CLICK, listener);\n }, 0);\n }\n};\n\nvar search = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, showSearch)), {\n init: function init(target) {\n forEach(select(BUTTON, target), function (button) {\n toggleSearch(button, false);\n });\n },\n teardown: function teardown(target) {\n // forget the last button clicked\n lastButton = undefined;\n }\n});\n\n/**\n * TODO for 2.0, remove this statement and export `navigation` directly:\n *\n * module.exports = behavior({...});\n */\nvar assign = require('object-assign');\nmodule.exports = assign(function (el) {\n return search.on(el);\n}, search);\n\n},{\"../config\":25,\"../events\":26,\"../utils/behavior\":30,\"../utils/select\":32,\"array-foreach\":2,\"object-assign\":8,\"receptor/ignore\":13}],23:[function(require,module,exports){\n'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar behavior = require('../utils/behavior');\nvar once = require('receptor/once');\n\nvar CLICK = require('../events').CLICK;\nvar PREFIX = require('../config').prefix;\nvar LINK = '.' + PREFIX + '-skipnav[href^=\"#\"]';\n\nvar setTabindex = function setTabindex(event) {\n // NB: we know because of the selector we're delegating to below that the\n // href already begins with '#'\n var id = this.getAttribute('href').slice(1);\n var target = document.getElementById(id);\n if (target) {\n target.setAttribute('tabindex', 0);\n target.addEventListener('blur', once(function (event) {\n target.setAttribute('tabindex', -1);\n }));\n } else {\n // throw an error?\n }\n};\n\nmodule.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, LINK, setTabindex)));\n\n},{\"../config\":25,\"../events\":26,\"../utils/behavior\":30,\"receptor/once\":14}],24:[function(require,module,exports){\n'use strict';\n\nvar behavior = require('../utils/behavior');\nvar validate = require('../utils/validate-input');\nvar debounce = require('lodash.debounce');\n\nvar change = function change(event) {\n return validate(this);\n};\n\nvar validator = behavior({\n 'keyup change': {\n 'input[data-validation-element]': change\n }\n});\n\n/**\n * TODO for 2.0, remove this statement and export `navigation` directly:\n *\n * module.exports = behavior({...});\n */\nvar assign = require('object-assign');\nmodule.exports = assign(function (el) {\n return validator.on(el);\n}, validator);\n\n},{\"../utils/behavior\":30,\"../utils/validate-input\":36,\"lodash.debounce\":7,\"object-assign\":8}],25:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n prefix: 'usa'\n};\n\n},{}],26:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n // This used to be conditionally dependent on whether the\n // browser supported touch events; if it did, `CLICK` was set to\n // `touchstart`. However, this had downsides:\n //\n // * It pre-empted mobile browsers' default behavior of detecting\n // whether a touch turned into a scroll, thereby preventing\n // users from using some of our components as scroll surfaces.\n //\n // * Some devices, such as the Microsoft Surface Pro, support *both*\n // touch and clicks. This meant the conditional effectively dropped\n // support for the user's mouse, frustrating users who preferred\n // it on those systems.\n CLICK: 'click'\n};\n\n},{}],27:[function(require,module,exports){\n'use strict';\n\nvar elproto = window.HTMLElement.prototype;\nvar HIDDEN = 'hidden';\n\nif (!(HIDDEN in elproto)) {\n Object.defineProperty(elproto, HIDDEN, {\n get: function get() {\n return this.hasAttribute(HIDDEN);\n },\n set: function set(value) {\n if (value) {\n this.setAttribute(HIDDEN, '');\n } else {\n this.removeAttribute(HIDDEN);\n }\n }\n });\n}\n\n},{}],28:[function(require,module,exports){\n'use strict';\n// polyfills HTMLElement.prototype.classList and DOMTokenList\n\nrequire('classlist-polyfill');\n// polyfills HTMLElement.prototype.hidden\nrequire('./element-hidden');\n\n},{\"./element-hidden\":27,\"classlist-polyfill\":3}],29:[function(require,module,exports){\n'use strict';\n\nvar domready = require('domready');\n\n/**\n * The 'polyfills' define key ECMAScript 5 methods that may be missing from\n * older browsers, so must be loaded first.\n */\nrequire('./polyfills');\n\nvar uswds = require('./config');\n\nvar components = require('./components');\nuswds.components = components;\n\ndomready(function () {\n var target = document.body;\n for (var name in components) {\n var behavior = components[name];\n behavior.on(target);\n }\n});\n\nmodule.exports = uswds;\n\n},{\"./components\":19,\"./config\":25,\"./polyfills\":28,\"domready\":4}],30:[function(require,module,exports){\n'use strict';\n\nvar assign = require('object-assign');\nvar forEach = require('array-foreach');\nvar Behavior = require('receptor/behavior');\n\nvar sequence = function sequence() {\n var seq = [].slice.call(arguments);\n return function (target) {\n var _this = this;\n\n if (!target) {\n target = document.body;\n }\n forEach(seq, function (method) {\n if (typeof _this[method] === 'function') {\n _this[method].call(_this, target);\n }\n });\n };\n};\n\n/**\n * @name behavior\n * @param {object} events\n * @param {object?} props\n * @return {receptor.behavior}\n */\nmodule.exports = function (events, props) {\n return Behavior(events, assign({\n on: sequence('init', 'add'),\n off: sequence('teardown', 'remove')\n }, props));\n};\n\n},{\"array-foreach\":2,\"object-assign\":8,\"receptor/behavior\":9}],31:[function(require,module,exports){\n\"use strict\";\n\n// https://stackoverflow.com/a/7557433\nfunction isElementInViewport(el) {\n var win = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;\n var docEl = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document.documentElement;\n\n var rect = el.getBoundingClientRect();\n\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (win.innerHeight || docEl.clientHeight) && rect.right <= (win.innerWidth || docEl.clientWidth);\n}\n\nmodule.exports = isElementInViewport;\n\n},{}],32:[function(require,module,exports){\n'use strict';\n\n/**\n * @name isElement\n * @desc returns whether or not the given argument is a DOM element.\n * @param {any} value\n * @return {boolean}\n */\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar isElement = function isElement(value) {\n return value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.nodeType === 1;\n};\n\n/**\n * @name select\n * @desc selects elements from the DOM by class selector or ID selector.\n * @param {string} selector - The selector to traverse the DOM with.\n * @param {Document|HTMLElement?} context - The context to traverse the DOM\n * in. If not provided, it defaults to the document.\n * @return {HTMLElement[]} - An array of DOM nodes or an empty array.\n */\nmodule.exports = function select(selector, context) {\n\n if (typeof selector !== 'string') {\n return [];\n }\n\n if (!context || !isElement(context)) {\n context = window.document;\n }\n\n var selection = context.querySelectorAll(selector);\n return Array.prototype.slice.call(selection);\n};\n\n},{}],33:[function(require,module,exports){\n'use strict';\n\n/**\n * Flips given INPUT elements between masked (hiding the field value) and unmasked\n * @param {Array.HTMLElement} fields - An array of INPUT elements\n * @param {Boolean} mask - Whether the mask should be applied, hiding the field value\n */\nmodule.exports = function (field, mask) {\n field.setAttribute('autocapitalize', 'off');\n field.setAttribute('autocorrect', 'off');\n field.setAttribute('type', mask ? 'password' : 'text');\n};\n\n},{}],34:[function(require,module,exports){\n'use strict';\n\nvar forEach = require('array-foreach');\nvar resolveIdRefs = require('resolve-id-refs');\nvar select = require('./select');\nvar toggleFieldMask = require('./toggle-field-mask');\n\nvar CONTROLS = 'aria-controls';\nvar PRESSED = 'aria-pressed';\nvar SHOW_ATTR = 'data-show-text';\nvar HIDE_ATTR = 'data-hide-text';\n\n/**\n * Replace the word \"Show\" (or \"show\") with \"Hide\" (or \"hide\") in a string.\n * @param {string} showText\n * @return {strong} hideText\n */\nvar getHideText = function getHideText(showText) {\n return showText.replace(/\\bShow\\b/i, function (show) {\n return ('S' === show[0] ? 'H' : 'h') + 'ide';\n });\n};\n\n/**\n * Component that decorates an HTML element with the ability to toggle the\n * masked state of an input field (like a password) when clicked.\n * The ids of the fields to be masked will be pulled directly from the button's\n * `aria-controls` attribute.\n *\n * @param {HTMLElement} el Parent element containing the fields to be masked\n * @return {boolean}\n */\nmodule.exports = function (el) {\n // this is the *target* state:\n // * if the element has the attr and it's !== \"true\", pressed is true\n // * otherwise, pressed is false\n var pressed = el.hasAttribute(PRESSED) && el.getAttribute(PRESSED) !== 'true';\n\n var fields = resolveIdRefs(el.getAttribute(CONTROLS));\n forEach(fields, function (field) {\n return toggleFieldMask(field, pressed);\n });\n\n if (!el.hasAttribute(SHOW_ATTR)) {\n el.setAttribute(SHOW_ATTR, el.textContent);\n }\n\n var showText = el.getAttribute(SHOW_ATTR);\n var hideText = el.getAttribute(HIDE_ATTR) || getHideText(showText);\n\n el.textContent = pressed ? showText : hideText;\n el.setAttribute(PRESSED, pressed);\n return pressed;\n};\n\n},{\"./select\":32,\"./toggle-field-mask\":33,\"array-foreach\":2,\"resolve-id-refs\":15}],35:[function(require,module,exports){\n'use strict';\n\nvar EXPANDED = 'aria-expanded';\nvar CONTROLS = 'aria-controls';\nvar HIDDEN = 'aria-hidden';\n\nmodule.exports = function (button, expanded) {\n\n if (typeof expanded !== 'boolean') {\n expanded = button.getAttribute(EXPANDED) === 'false';\n }\n button.setAttribute(EXPANDED, expanded);\n\n var id = button.getAttribute(CONTROLS);\n var controls = document.getElementById(id);\n if (!controls) {\n throw new Error('No toggle target found with id: \"' + id + '\"');\n }\n\n controls.setAttribute(HIDDEN, !expanded);\n return expanded;\n};\n\n},{}],36:[function(require,module,exports){\n'use strict';\n\nvar dataset = require('elem-dataset');\n\nvar PREFIX = require('../config').prefix;\nvar CHECKED = 'aria-checked';\nvar CHECKED_CLASS = PREFIX + '-checklist-checked';\n\nmodule.exports = function validate(el) {\n var data = dataset(el);\n var id = data.validationElement;\n var checkList = id.charAt(0) === '#' ? document.querySelector(id) : document.getElementById(id);\n\n if (!checkList) {\n throw new Error('No validation element found with id: \"' + id + '\"');\n }\n\n for (var key in data) {\n if (key.startsWith('validate')) {\n var validatorName = key.substr('validate'.length).toLowerCase();\n var validatorPattern = new RegExp(data[key]);\n var validatorSelector = '[data-validator=\"' + validatorName + '\"]';\n var validatorCheckbox = checkList.querySelector(validatorSelector);\n if (!validatorCheckbox) {\n throw new Error('No validator checkbox found for: \"' + validatorName + '\"');\n }\n\n var checked = validatorPattern.test(el.value);\n validatorCheckbox.classList.toggle(CHECKED_CLASS, checked);\n validatorCheckbox.setAttribute(CHECKED, checked);\n }\n }\n};\n\n},{\"../config\":25,\"elem-dataset\":5}]},{},[29])\n\n","\n/**\n * Array#filter.\n *\n * @param {Array} arr\n * @param {Function} fn\n * @param {Object=} self\n * @return {Array}\n * @throw TypeError\n */\n\nmodule.exports = function (arr, fn, self) {\n if (arr.filter) return arr.filter(fn, self);\n if (void 0 === arr || null === arr) throw new TypeError;\n if ('function' != typeof fn) throw new TypeError;\n var ret = [];\n for (var i = 0; i < arr.length; i++) {\n if (!hasOwn.call(arr, i)) continue;\n var val = arr[i];\n if (fn.call(self, val, i, arr)) ret.push(val);\n }\n return ret;\n};\n\nvar hasOwn = Object.prototype.hasOwnProperty;\n","/**\n * array-foreach\n * Array#forEach ponyfill for older browsers\n * (Ponyfill: A polyfill that doesn't overwrite the native method)\n * \n * https://github.com/twada/array-foreach\n *\n * Copyright (c) 2015-2016 Takuto Wada\n * Licensed under the MIT license.\n * https://github.com/twada/array-foreach/blob/master/MIT-LICENSE\n */\n'use strict';\n\nmodule.exports = function forEach (ary, callback, thisArg) {\n if (ary.forEach) {\n ary.forEach(callback, thisArg);\n return;\n }\n for (var i = 0; i < ary.length; i+=1) {\n callback.call(thisArg, ary[i], i, ary);\n }\n};\n","/*\n * classList.js: Cross-browser full element.classList implementation.\n * 1.1.20170427\n *\n * By Eli Grey, http://eligrey.com\n * License: Dedicated to the public domain.\n * See https://github.com/eligrey/classList.js/blob/master/LICENSE.md\n */\n\n/*global self, document, DOMException */\n\n/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js */\n\nif (\"document\" in window.self) {\n\n// Full polyfill for browsers with no classList support\n// Including IE < Edge missing SVGElement.classList\nif (!(\"classList\" in document.createElement(\"_\")) \n\t|| document.createElementNS && !(\"classList\" in document.createElementNS(\"http://www.w3.org/2000/svg\",\"g\"))) {\n\n(function (view) {\n\n\"use strict\";\n\nif (!('Element' in view)) return;\n\nvar\n\t classListProp = \"classList\"\n\t, protoProp = \"prototype\"\n\t, elemCtrProto = view.Element[protoProp]\n\t, objCtr = Object\n\t, strTrim = String[protoProp].trim || function () {\n\t\treturn this.replace(/^\\s+|\\s+$/g, \"\");\n\t}\n\t, arrIndexOf = Array[protoProp].indexOf || function (item) {\n\t\tvar\n\t\t\t i = 0\n\t\t\t, len = this.length\n\t\t;\n\t\tfor (; i < len; i++) {\n\t\t\tif (i in this && this[i] === item) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\t// Vendors: please allow content code to instantiate DOMExceptions\n\t, DOMEx = function (type, message) {\n\t\tthis.name = type;\n\t\tthis.code = DOMException[type];\n\t\tthis.message = message;\n\t}\n\t, checkTokenAndGetIndex = function (classList, token) {\n\t\tif (token === \"\") {\n\t\t\tthrow new DOMEx(\n\t\t\t\t \"SYNTAX_ERR\"\n\t\t\t\t, \"An invalid or illegal string was specified\"\n\t\t\t);\n\t\t}\n\t\tif (/\\s/.test(token)) {\n\t\t\tthrow new DOMEx(\n\t\t\t\t \"INVALID_CHARACTER_ERR\"\n\t\t\t\t, \"String contains an invalid character\"\n\t\t\t);\n\t\t}\n\t\treturn arrIndexOf.call(classList, token);\n\t}\n\t, ClassList = function (elem) {\n\t\tvar\n\t\t\t trimmedClasses = strTrim.call(elem.getAttribute(\"class\") || \"\")\n\t\t\t, classes = trimmedClasses ? trimmedClasses.split(/\\s+/) : []\n\t\t\t, i = 0\n\t\t\t, len = classes.length\n\t\t;\n\t\tfor (; i < len; i++) {\n\t\t\tthis.push(classes[i]);\n\t\t}\n\t\tthis._updateClassName = function () {\n\t\t\telem.setAttribute(\"class\", this.toString());\n\t\t};\n\t}\n\t, classListProto = ClassList[protoProp] = []\n\t, classListGetter = function () {\n\t\treturn new ClassList(this);\n\t}\n;\n// Most DOMException implementations don't allow calling DOMException's toString()\n// on non-DOMExceptions. Error's toString() is sufficient here.\nDOMEx[protoProp] = Error[protoProp];\nclassListProto.item = function (i) {\n\treturn this[i] || null;\n};\nclassListProto.contains = function (token) {\n\ttoken += \"\";\n\treturn checkTokenAndGetIndex(this, token) !== -1;\n};\nclassListProto.add = function () {\n\tvar\n\t\t tokens = arguments\n\t\t, i = 0\n\t\t, l = tokens.length\n\t\t, token\n\t\t, updated = false\n\t;\n\tdo {\n\t\ttoken = tokens[i] + \"\";\n\t\tif (checkTokenAndGetIndex(this, token) === -1) {\n\t\t\tthis.push(token);\n\t\t\tupdated = true;\n\t\t}\n\t}\n\twhile (++i < l);\n\n\tif (updated) {\n\t\tthis._updateClassName();\n\t}\n};\nclassListProto.remove = function () {\n\tvar\n\t\t tokens = arguments\n\t\t, i = 0\n\t\t, l = tokens.length\n\t\t, token\n\t\t, updated = false\n\t\t, index\n\t;\n\tdo {\n\t\ttoken = tokens[i] + \"\";\n\t\tindex = checkTokenAndGetIndex(this, token);\n\t\twhile (index !== -1) {\n\t\t\tthis.splice(index, 1);\n\t\t\tupdated = true;\n\t\t\tindex = checkTokenAndGetIndex(this, token);\n\t\t}\n\t}\n\twhile (++i < l);\n\n\tif (updated) {\n\t\tthis._updateClassName();\n\t}\n};\nclassListProto.toggle = function (token, force) {\n\ttoken += \"\";\n\n\tvar\n\t\t result = this.contains(token)\n\t\t, method = result ?\n\t\t\tforce !== true && \"remove\"\n\t\t:\n\t\t\tforce !== false && \"add\"\n\t;\n\n\tif (method) {\n\t\tthis[method](token);\n\t}\n\n\tif (force === true || force === false) {\n\t\treturn force;\n\t} else {\n\t\treturn !result;\n\t}\n};\nclassListProto.toString = function () {\n\treturn this.join(\" \");\n};\n\nif (objCtr.defineProperty) {\n\tvar classListPropDesc = {\n\t\t get: classListGetter\n\t\t, enumerable: true\n\t\t, configurable: true\n\t};\n\ttry {\n\t\tobjCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n\t} catch (ex) { // IE 8 doesn't support enumerable:true\n\t\t// adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36\n\t\t// modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected\n\t\tif (ex.number === undefined || ex.number === -0x7FF5EC54) {\n\t\t\tclassListPropDesc.enumerable = false;\n\t\t\tobjCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n\t\t}\n\t}\n} else if (objCtr[protoProp].__defineGetter__) {\n\telemCtrProto.__defineGetter__(classListProp, classListGetter);\n}\n\n}(window.self));\n\n}\n\n// There is full or partial native classList support, so just check if we need\n// to normalize the add/remove and toggle APIs.\n\n(function () {\n\t\"use strict\";\n\n\tvar testElement = document.createElement(\"_\");\n\n\ttestElement.classList.add(\"c1\", \"c2\");\n\n\t// Polyfill for IE 10/11 and Firefox <26, where classList.add and\n\t// classList.remove exist but support only one argument at a time.\n\tif (!testElement.classList.contains(\"c2\")) {\n\t\tvar createMethod = function(method) {\n\t\t\tvar original = DOMTokenList.prototype[method];\n\n\t\t\tDOMTokenList.prototype[method] = function(token) {\n\t\t\t\tvar i, len = arguments.length;\n\n\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\ttoken = arguments[i];\n\t\t\t\t\toriginal.call(this, token);\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t\tcreateMethod('add');\n\t\tcreateMethod('remove');\n\t}\n\n\ttestElement.classList.toggle(\"c3\", false);\n\n\t// Polyfill for IE 10 and Firefox <24, where classList.toggle does not\n\t// support the second argument.\n\tif (testElement.classList.contains(\"c3\")) {\n\t\tvar _toggle = DOMTokenList.prototype.toggle;\n\n\t\tDOMTokenList.prototype.toggle = function(token, force) {\n\t\t\tif (1 in arguments && !this.contains(token) === !force) {\n\t\t\t\treturn force;\n\t\t\t} else {\n\t\t\t\treturn _toggle.call(this, token);\n\t\t\t}\n\t\t};\n\n\t}\n\n\ttestElement = null;\n}());\n\n}\n","/*!\n * domready (c) Dustin Diaz 2014 - License MIT\n */\n!function (name, definition) {\n\n if (typeof module != 'undefined') module.exports = definition()\n else if (typeof define == 'function' && typeof define.amd == 'object') define(definition)\n else this[name] = definition()\n\n}('domready', function () {\n\n var fns = [], listener\n , doc = document\n , hack = doc.documentElement.doScroll\n , domContentLoaded = 'DOMContentLoaded'\n , loaded = (hack ? /^loaded|^c/ : /^loaded|^i|^c/).test(doc.readyState)\n\n\n if (!loaded)\n doc.addEventListener(domContentLoaded, listener = function () {\n doc.removeEventListener(domContentLoaded, listener)\n loaded = 1\n while (listener = fns.shift()) listener()\n })\n\n return function (fn) {\n loaded ? setTimeout(fn, 0) : fns.push(fn)\n }\n\n});\n","'use strict';\n\n// <3 Modernizr\n// https://raw.githubusercontent.com/Modernizr/Modernizr/master/feature-detects/dom/dataset.js\n\nfunction useNative() {\n\tvar elem = document.createElement('div');\n\telem.setAttribute('data-a-b', 'c');\n\n\treturn Boolean(elem.dataset && elem.dataset.aB === 'c');\n}\n\nfunction nativeDataset(element) {\n\treturn element.dataset;\n}\n\nmodule.exports = useNative() ? nativeDataset : function (element) {\n\tvar map = {};\n\tvar attributes = element.attributes;\n\n\tfunction getter() {\n\t\treturn this.value;\n\t}\n\n\tfunction setter(name, value) {\n\t\tif (typeof value === 'undefined') {\n\t\t\tthis.removeAttribute(name);\n\t\t} else {\n\t\t\tthis.setAttribute(name, value);\n\t\t}\n\t}\n\n\tfor (var i = 0, j = attributes.length; i < j; i++) {\n\t\tvar attribute = attributes[i];\n\n\t\tif (attribute) {\n\t\t\tvar name = attribute.name;\n\n\t\t\tif (name.indexOf('data-') === 0) {\n\t\t\t\tvar prop = name.slice(5).replace(/-./g, function (u) {\n\t\t\t\t\treturn u.charAt(1).toUpperCase();\n\t\t\t\t});\n\n\t\t\t\tvar value = attribute.value;\n\n\t\t\t\tObject.defineProperty(map, prop, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: getter.bind({ value: value || '' }),\n\t\t\t\t\tset: setter.bind(element, name)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn map;\n};\n\n","// element-closest | CC0-1.0 | github.com/jonathantneal/closest\n\n(function (ElementProto) {\n\tif (typeof ElementProto.matches !== 'function') {\n\t\tElementProto.matches = ElementProto.msMatchesSelector || ElementProto.mozMatchesSelector || ElementProto.webkitMatchesSelector || function matches(selector) {\n\t\t\tvar element = this;\n\t\t\tvar elements = (element.document || element.ownerDocument).querySelectorAll(selector);\n\t\t\tvar index = 0;\n\n\t\t\twhile (elements[index] && elements[index] !== element) {\n\t\t\t\t++index;\n\t\t\t}\n\n\t\t\treturn Boolean(elements[index]);\n\t\t};\n\t}\n\n\tif (typeof ElementProto.closest !== 'function') {\n\t\tElementProto.closest = function closest(selector) {\n\t\t\tvar element = this;\n\n\t\t\twhile (element && element.nodeType === 1) {\n\t\t\t\tif (element.matches(selector)) {\n\t\t\t\t\treturn element;\n\t\t\t\t}\n\n\t\t\t\telement = element.parentNode;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t}\n})(window.Element.prototype);\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","const assign = require('object-assign');\nconst delegate = require('../delegate');\nconst delegateAll = require('../delegateAll');\n\nconst DELEGATE_PATTERN = /^(.+):delegate\\((.+)\\)$/;\nconst SPACE = ' ';\n\nconst getListeners = function(type, handler) {\n var match = type.match(DELEGATE_PATTERN);\n var selector;\n if (match) {\n type = match[1];\n selector = match[2];\n }\n\n var options;\n if (typeof handler === 'object') {\n options = {\n capture: popKey(handler, 'capture'),\n passive: popKey(handler, 'passive')\n };\n }\n\n var listener = {\n selector: selector,\n delegate: (typeof handler === 'object')\n ? delegateAll(handler)\n : selector\n ? delegate(selector, handler)\n : handler,\n options: options\n };\n\n if (type.indexOf(SPACE) > -1) {\n return type.split(SPACE).map(function(_type) {\n return assign({type: _type}, listener);\n });\n } else {\n listener.type = type;\n return [listener];\n }\n};\n\nvar popKey = function(obj, key) {\n var value = obj[key];\n delete obj[key];\n return value;\n};\n\nmodule.exports = function behavior(events, props) {\n const listeners = Object.keys(events)\n .reduce(function(memo, type) {\n var listeners = getListeners(type, events[type]);\n return memo.concat(listeners);\n }, []);\n\n return assign({\n add: function addBehavior(element) {\n listeners.forEach(function(listener) {\n element.addEventListener(\n listener.type,\n listener.delegate,\n listener.options\n );\n });\n },\n remove: function removeBehavior(element) {\n listeners.forEach(function(listener) {\n element.removeEventListener(\n listener.type,\n listener.delegate,\n listener.options\n );\n });\n }\n }, props);\n};\n","module.exports = function compose(functions) {\n return function(e) {\n return functions.some(function(fn) {\n return fn.call(this, e) === false;\n }, this);\n };\n};\n","// polyfill Element.prototype.closest\nrequire('element-closest');\n\nmodule.exports = function delegate(selector, fn) {\n return function delegation(event) {\n var target = event.target.closest(selector);\n if (target) {\n return fn.call(target, event);\n }\n }\n};\n","const delegate = require('../delegate');\nconst compose = require('../compose');\n\nconst SPLAT = '*';\n\nmodule.exports = function delegateAll(selectors) {\n const keys = Object.keys(selectors)\n\n // XXX optimization: if there is only one handler and it applies to\n // all elements (the \"*\" CSS selector), then just return that\n // handler\n if (keys.length === 1 && keys[0] === SPLAT) {\n return selectors[SPLAT];\n }\n\n const delegates = keys.reduce(function(memo, selector) {\n memo.push(delegate(selector, selectors[selector]));\n return memo;\n }, []);\n return compose(delegates);\n};\n","module.exports = function ignore(element, fn) {\n return function ignorance(e) {\n if (element !== e.target && !element.contains(e.target)) {\n return fn.call(this, e);\n }\n };\n};\n","module.exports = function once(listener, options) {\n var wrapped = function wrappedOnce(e) {\n e.currentTarget.removeEventListener(e.type, wrapped, options);\n return listener.call(this, e);\n };\n return wrapped;\n};\n\n","'use strict';\n\nvar RE_TRIM = /(^\\s+)|(\\s+$)/g;\nvar RE_SPLIT = /\\s+/;\n\nvar trim = String.prototype.trim\n ? function(str) { return str.trim(); }\n : function(str) { return str.replace(RE_TRIM, ''); };\n\nvar queryById = function(id) {\n return this.querySelector('[id=\"' + id.replace(/\"/g, '\\\\\"') + '\"]');\n};\n\nmodule.exports = function resolveIds(ids, doc) {\n if (typeof ids !== 'string') {\n throw new Error('Expected a string but got ' + (typeof ids));\n }\n\n if (!doc) {\n doc = window.document;\n }\n\n var getElementById = doc.getElementById\n ? doc.getElementById.bind(doc)\n : queryById.bind(doc);\n\n ids = trim(ids).split(RE_SPLIT);\n\n // XXX we can short-circuit here because trimming and splitting a\n // string of just whitespace produces an array containing a single,\n // empty string\n if (ids.length === 1 && ids[0] === '') {\n return [];\n }\n\n return ids\n .map(function(id) {\n var el = getElementById(id);\n if (!el) {\n throw new Error('no element with id: \"' + id + '\"');\n }\n return el;\n });\n};\n","'use strict';\nconst behavior = require('../utils/behavior');\nconst filter = require('array-filter');\nconst forEach = require('array-foreach');\nconst toggle = require('../utils/toggle');\nconst isElementInViewport = require('../utils/is-in-viewport');\n\nconst CLICK = require('../events').CLICK;\nconst PREFIX = require('../config').prefix;\n\n// XXX match .usa-accordion and .usa-accordion-bordered\nconst ACCORDION = `.${PREFIX}-accordion, .${PREFIX}-accordion-bordered`;\nconst BUTTON = `.${PREFIX}-accordion-button[aria-controls]`;\nconst EXPANDED = 'aria-expanded';\nconst MULTISELECTABLE = 'aria-multiselectable';\n\n/**\n * Toggle a button's \"pressed\" state, optionally providing a target\n * state.\n *\n * @param {HTMLButtonElement} button\n * @param {boolean?} expanded If no state is provided, the current\n * state will be toggled (from false to true, and vice-versa).\n * @return {boolean} the resulting state\n */\nconst toggleButton = (button, expanded) => {\n var accordion = button.closest(ACCORDION);\n if (!accordion) {\n throw new Error(`${BUTTON} is missing outer ${ACCORDION}`);\n }\n\n expanded = toggle(button, expanded);\n // XXX multiselectable is opt-in, to preserve legacy behavior\n const multiselectable = accordion.getAttribute(MULTISELECTABLE) === 'true';\n\n if (expanded && !multiselectable) {\n forEach(getAccordionButtons(accordion), other => {\n if (other !== button) {\n toggle(other, false);\n }\n });\n }\n};\n\n/**\n * @param {HTMLButtonElement} button\n * @return {boolean} true\n */\nconst showButton = button => toggleButton(button, true);\n\n/**\n * @param {HTMLButtonElement} button\n * @return {boolean} false\n */\nconst hideButton = button => toggleButton(button, false);\n\n/**\n * Get an Array of button elements belonging directly to the given\n * accordion element.\n * @param {HTMLElement} accordion\n * @return {array}\n */\nconst getAccordionButtons = accordion => {\n return filter(accordion.querySelectorAll(BUTTON), button => {\n return button.closest(ACCORDION) === accordion;\n });\n};\n\nconst accordion = behavior({\n [ CLICK ]: {\n [ BUTTON ]: function (event) {\n event.preventDefault();\n toggleButton(this);\n\n if (this.getAttribute(EXPANDED) === 'true') {\n // We were just expanded, but if another accordion was also just\n // collapsed, we may no longer be in the viewport. This ensures\n // that we are still visible, so the user isn't confused.\n if (!isElementInViewport(this)) this.scrollIntoView();\n }\n },\n },\n}, {\n init: root => {\n forEach(root.querySelectorAll(BUTTON), button => {\n const expanded = button.getAttribute(EXPANDED) === 'true';\n toggleButton(button, expanded);\n });\n },\n ACCORDION,\n BUTTON,\n show: showButton,\n hide: hideButton,\n toggle: toggleButton,\n getButtons: getAccordionButtons,\n});\n\n/**\n * TODO: for 2.0, remove everything below this comment and export the\n * behavior directly:\n *\n * module.exports = behavior({...});\n */\nconst Accordion = function (root) {\n this.root = root;\n accordion.on(this.root);\n};\n\n// copy all of the behavior methods and props to Accordion\nconst assign = require('object-assign');\nassign(Accordion, accordion);\n\nAccordion.prototype.show = showButton;\nAccordion.prototype.hide = hideButton;\n\nAccordion.prototype.remove = function () {\n accordion.off(this.root);\n};\n\nmodule.exports = Accordion;\n","'use strict';\nconst behavior = require('../utils/behavior');\nconst toggle = require('../utils/toggle');\n\nconst CLICK = require('../events').CLICK;\nconst PREFIX = require('../config').prefix;\n\nconst HEADER = `.${PREFIX}-banner-header`;\nconst EXPANDED_CLASS = `${PREFIX}-banner-header-expanded`;\n\nconst toggleBanner = function (event) {\n event.preventDefault();\n this.closest(HEADER).classList.toggle(EXPANDED_CLASS);\n return false;\n};\n\nmodule.exports = behavior({\n [ CLICK ]: {\n [ `${HEADER} [aria-controls]` ]: toggleBanner,\n },\n});\n","'use strict';\nconst accordion = require('./accordion');\nconst behavior = require('../utils/behavior');\nconst debounce = require('lodash.debounce');\nconst forEach = require('array-foreach');\nconst select = require('../utils/select');\n\nconst CLICK = require('../events').CLICK;\nconst PREFIX = require('../config').prefix;\n\nconst HIDDEN = 'hidden';\nconst SCOPE = `.${PREFIX}-footer-big`;\nconst NAV = `${SCOPE} nav`;\nconst BUTTON = `${NAV} .${PREFIX}-footer-primary-link`;\nconst LIST = `${NAV} ul`;\n\nconst HIDE_MAX_WIDTH = 600;\nconst DEBOUNCE_RATE = 180;\n\nconst showPanel = function () {\n const list = this.closest(LIST);\n list.classList.remove(HIDDEN);\n\n // NB: this *should* always succeed because the button\n // selector is scoped to \".{prefix}-footer-big nav\"\n const lists = list.closest(NAV)\n .querySelectorAll('ul');\n\n forEach(lists, el => {\n if (el !== list) {\n el.classList.add(HIDDEN);\n }\n });\n};\n\nconst resize = debounce(() => {\n const hidden = window.innerWidth < HIDE_MAX_WIDTH;\n forEach(select(LIST), list => {\n list.classList.toggle(HIDDEN, hidden);\n });\n}, DEBOUNCE_RATE);\n\nmodule.exports = behavior({\n [ CLICK ]: {\n [ BUTTON ]: showPanel,\n },\n}, {\n // export for use elsewhere\n HIDE_MAX_WIDTH,\n DEBOUNCE_RATE,\n\n init: target => {\n resize();\n window.addEventListener('resize', resize);\n },\n\n teardown: target => {\n window.removeEventListener('resize', resize);\n },\n});\n","module.exports = {\n accordion: require('./accordion'),\n banner: require('./banner'),\n footer: require('./footer'),\n navigation: require('./navigation'),\n password: require('./password'),\n search: require('./search'),\n skipnav: require('./skipnav'),\n validator: require('./validator'),\n};\n\n","'use strict';\nconst behavior = require('../utils/behavior');\nconst forEach = require('array-foreach');\nconst select = require('../utils/select');\nconst accordion = require('./accordion');\n\nconst CLICK = require('../events').CLICK;\nconst PREFIX = require('../config').prefix;\n\nconst NAV = `.${PREFIX}-nav`;\nconst NAV_LINKS = `${NAV} a`;\nconst OPENERS = `.${PREFIX}-menu-btn`;\nconst CLOSE_BUTTON = `.${PREFIX}-nav-close`;\nconst OVERLAY = `.${PREFIX}-overlay`;\nconst CLOSERS = `${CLOSE_BUTTON}, .${PREFIX}-overlay`;\nconst TOGGLES = [ NAV, OVERLAY ].join(', ');\n\nconst ACTIVE_CLASS = 'usa-mobile_nav-active';\nconst VISIBLE_CLASS = 'is-visible';\n\nconst isActive = () => document.body.classList.contains(ACTIVE_CLASS);\n\nconst toggleNav = function (active) {\n const body = document.body;\n if (typeof active !== 'boolean') {\n active = !isActive();\n }\n body.classList.toggle(ACTIVE_CLASS, active);\n\n forEach(select(TOGGLES), el => {\n el.classList.toggle(VISIBLE_CLASS, active);\n });\n\n const closeButton = body.querySelector(CLOSE_BUTTON);\n const menuButton = body.querySelector(OPENERS);\n\n if (active && closeButton) {\n // The mobile nav was just activated, so focus on the close button,\n // which is just before all the nav elements in the tab order.\n closeButton.focus();\n } else if (!active && document.activeElement === closeButton &&\n menuButton) {\n // The mobile nav was just deactivated, and focus was on the close\n // button, which is no longer visible. We don't want the focus to\n // disappear into the void, so focus on the menu button if it's\n // visible (this may have been what the user was just focused on,\n // if they triggered the mobile nav by mistake).\n menuButton.focus();\n }\n\n return active;\n};\n\nconst resize = () => {\n const closer = document.body.querySelector(CLOSE_BUTTON);\n\n if (isActive() && closer && closer.getBoundingClientRect().width === 0) {\n // The mobile nav is active, but the close box isn't visible, which\n // means the user's viewport has been resized so that it is no longer\n // in mobile mode. Let's make the page state consistent by\n // deactivating the mobile nav.\n toggleNav.call(closer, false);\n }\n};\n\nconst navigation = behavior({\n [ CLICK ]: {\n [ OPENERS ]: toggleNav,\n [ CLOSERS ]: toggleNav,\n [ NAV_LINKS ]: function () {\n // A navigation link has been clicked! We want to collapse any\n // hierarchical navigation UI it's a part of, so that the user\n // can focus on whatever they've just selected.\n\n // Some navigation links are inside accordions; when they're\n // clicked, we want to collapse those accordions.\n const acc = this.closest(accordion.ACCORDION);\n if (acc) {\n accordion.getButtons(acc).forEach(btn => accordion.hide(btn));\n }\n\n // If the mobile navigation menu is active, we want to hide it.\n if (isActive()) {\n toggleNav.call(this, false);\n }\n },\n },\n}, {\n init () {\n resize();\n window.addEventListener('resize', resize, false);\n },\n teardown () {\n window.removeEventListener('resize', resize, false);\n },\n});\n\n/**\n * TODO for 2.0, remove this statement and export `navigation` directly:\n *\n * module.exports = behavior({...});\n */\nconst assign = require('object-assign');\nmodule.exports = assign(\n el => navigation.on(el),\n navigation\n);\n","'use strict';\nconst behavior = require('../utils/behavior');\nconst toggleFormInput = require('../utils/toggle-form-input');\n\nconst CLICK = require('../events').CLICK;\nconst PREFIX = require('../config').prefix;\n\nconst LINK = `.${PREFIX}-show_password, .${PREFIX}-show_multipassword`;\n\nconst toggle = function (event) {\n event.preventDefault();\n toggleFormInput(this);\n};\n\nmodule.exports = behavior({\n [ CLICK ]: {\n [ LINK ]: toggle,\n },\n});\n","'use strict';\nconst behavior = require('../utils/behavior');\nconst forEach = require('array-foreach');\nconst ignore = require('receptor/ignore');\nconst select = require('../utils/select');\n\nconst CLICK = require('../events').CLICK;\nconst PREFIX = require('../config').prefix;\n\nconst BUTTON = '.js-search-button';\nconst FORM = '.js-search-form';\nconst INPUT = '[type=search]';\nconst CONTEXT = 'header'; // XXX\nconst VISUALLY_HIDDEN = `${PREFIX}-sr-only`;\n\nlet lastButton;\n\nconst showSearch = function (event) {\n toggleSearch(this, true);\n lastButton = this;\n};\n\nconst hideSearch = function (event) {\n toggleSearch(this, false);\n lastButton = undefined;\n};\n\nconst getForm = button => {\n const context = button.closest(CONTEXT);\n return context\n ? context.querySelector(FORM)\n : document.querySelector(FORM);\n};\n\nconst toggleSearch = (button, active) => {\n const form = getForm(button);\n if (!form) {\n throw new Error(`No ${FORM} found for search toggle in ${CONTEXT}!`);\n }\n\n button.hidden = active;\n form.classList.toggle(VISUALLY_HIDDEN, !active);\n\n if (active) {\n const input = form.querySelector(INPUT);\n if (input) {\n input.focus();\n }\n // when the user clicks _outside_ of the form w/ignore(): hide the\n // search, then remove the listener\n const listener = ignore(form, e => {\n if (lastButton) {\n hideSearch.call(lastButton);\n }\n document.body.removeEventListener(CLICK, listener);\n });\n\n // Normally we would just run this code without a timeout, but\n // IE11 and Edge will actually call the listener *immediately* because\n // they are currently handling this exact type of event, so we'll\n // make sure the browser is done handling the current click event,\n // if any, before we attach the listener.\n setTimeout(() => {\n document.body.addEventListener(CLICK, listener);\n }, 0);\n }\n};\n\nconst search = behavior({\n [ CLICK ]: {\n [ BUTTON ]: showSearch,\n },\n}, {\n init: (target) => {\n forEach(select(BUTTON, target), button => {\n toggleSearch(button, false);\n });\n },\n teardown: (target) => {\n // forget the last button clicked\n lastButton = undefined;\n },\n});\n\n/**\n * TODO for 2.0, remove this statement and export `navigation` directly:\n *\n * module.exports = behavior({...});\n */\nconst assign = require('object-assign');\nmodule.exports = assign(\n el => search.on(el),\n search\n);\n","'use strict';\nconst behavior = require('../utils/behavior');\nconst once = require('receptor/once');\n\nconst CLICK = require('../events').CLICK;\nconst PREFIX = require('../config').prefix;\nconst LINK = `.${PREFIX}-skipnav[href^=\"#\"]`;\n\nconst setTabindex = function (event) {\n // NB: we know because of the selector we're delegating to below that the\n // href already begins with '#'\n const id = this.getAttribute('href').slice(1);\n const target = document.getElementById(id);\n if (target) {\n target.setAttribute('tabindex', 0);\n target.addEventListener('blur', once(event => {\n target.setAttribute('tabindex', -1);\n }));\n } else {\n // throw an error?\n }\n};\n\nmodule.exports = behavior({\n [ CLICK ]: {\n [ LINK ]: setTabindex,\n },\n});\n","'use strict';\nconst behavior = require('../utils/behavior');\nconst validate = require('../utils/validate-input');\nconst debounce = require('lodash.debounce');\n\nconst change = function (event) {\n return validate(this);\n};\n\nconst validator = behavior({\n 'keyup change': {\n 'input[data-validation-element]': change,\n },\n});\n\n/**\n * TODO for 2.0, remove this statement and export `navigation` directly:\n *\n * module.exports = behavior({...});\n */\nconst assign = require('object-assign');\nmodule.exports = assign(\n el => validator.on(el),\n validator\n);\n","module.exports = {\n prefix: 'usa',\n};\n","module.exports = {\n // This used to be conditionally dependent on whether the\n // browser supported touch events; if it did, `CLICK` was set to\n // `touchstart`. However, this had downsides:\n //\n // * It pre-empted mobile browsers' default behavior of detecting\n // whether a touch turned into a scroll, thereby preventing\n // users from using some of our components as scroll surfaces.\n //\n // * Some devices, such as the Microsoft Surface Pro, support *both*\n // touch and clicks. This meant the conditional effectively dropped\n // support for the user's mouse, frustrating users who preferred\n // it on those systems.\n CLICK: 'click',\n};\n","'use strict';\nconst elproto = window.HTMLElement.prototype;\nconst HIDDEN = 'hidden';\n\nif (!(HIDDEN in elproto)) {\n Object.defineProperty(elproto, HIDDEN, {\n get: function () {\n return this.hasAttribute(HIDDEN);\n },\n set: function (value) {\n if (value) {\n this.setAttribute(HIDDEN, '');\n } else {\n this.removeAttribute(HIDDEN);\n }\n },\n });\n}\n","'use strict';\n// polyfills HTMLElement.prototype.classList and DOMTokenList\nrequire('classlist-polyfill');\n// polyfills HTMLElement.prototype.hidden\nrequire('./element-hidden');\n","'use strict';\nconst domready = require('domready');\n\n/**\n * The 'polyfills' define key ECMAScript 5 methods that may be missing from\n * older browsers, so must be loaded first.\n */\nrequire('./polyfills');\n\nconst uswds = require('./config');\n\nconst components = require('./components');\nuswds.components = components;\n\ndomready(() => {\n const target = document.body;\n for (let name in components) {\n const behavior = components[ name ];\n behavior.on(target);\n }\n});\n\nmodule.exports = uswds;\n","'use strict';\nconst assign = require('object-assign');\nconst forEach = require('array-foreach');\nconst Behavior = require('receptor/behavior');\n\nconst sequence = function () {\n const seq = [].slice.call(arguments);\n return function (target) {\n if (!target) {\n target = document.body;\n }\n forEach(seq, method => {\n if (typeof this[ method ] === 'function') {\n this[ method ].call(this, target);\n }\n });\n };\n};\n\n/**\n * @name behavior\n * @param {object} events\n * @param {object?} props\n * @return {receptor.behavior}\n */\nmodule.exports = (events, props) => {\n return Behavior(events, assign({\n on: sequence('init', 'add'),\n off: sequence('teardown', 'remove'),\n }, props));\n};\n","// https://stackoverflow.com/a/7557433\nfunction isElementInViewport (el, win=window,\n docEl=document.documentElement) {\n var rect = el.getBoundingClientRect();\n\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (win.innerHeight || docEl.clientHeight) &&\n rect.right <= (win.innerWidth || docEl.clientWidth)\n );\n}\n\nmodule.exports = isElementInViewport;\n","'use strict';\n\n/**\n * @name isElement\n * @desc returns whether or not the given argument is a DOM element.\n * @param {any} value\n * @return {boolean}\n */\nconst isElement = value => {\n return value && typeof value === 'object' && value.nodeType === 1;\n};\n\n/**\n * @name select\n * @desc selects elements from the DOM by class selector or ID selector.\n * @param {string} selector - The selector to traverse the DOM with.\n * @param {Document|HTMLElement?} context - The context to traverse the DOM\n * in. If not provided, it defaults to the document.\n * @return {HTMLElement[]} - An array of DOM nodes or an empty array.\n */\nmodule.exports = function select (selector, context) {\n\n if (typeof selector !== 'string') {\n return [];\n }\n\n if (!context || !isElement(context)) {\n context = window.document;\n }\n\n const selection = context.querySelectorAll(selector);\n return Array.prototype.slice.call(selection);\n};\n","/**\n * Flips given INPUT elements between masked (hiding the field value) and unmasked\n * @param {Array.HTMLElement} fields - An array of INPUT elements\n * @param {Boolean} mask - Whether the mask should be applied, hiding the field value\n */\nmodule.exports = (field, mask) => {\n field.setAttribute('autocapitalize', 'off');\n field.setAttribute('autocorrect', 'off');\n field.setAttribute('type', mask ? 'password' : 'text');\n};\n","'use strict';\nconst forEach = require('array-foreach');\nconst resolveIdRefs = require('resolve-id-refs');\nconst select = require('./select');\nconst toggleFieldMask = require('./toggle-field-mask');\n\nconst CONTROLS = 'aria-controls';\nconst PRESSED = 'aria-pressed';\nconst SHOW_ATTR = 'data-show-text';\nconst HIDE_ATTR = 'data-hide-text';\n\n/**\n * Replace the word \"Show\" (or \"show\") with \"Hide\" (or \"hide\") in a string.\n * @param {string} showText\n * @return {strong} hideText\n */\nconst getHideText = showText => {\n return showText.replace(/\\bShow\\b/i, show => {\n return ('S' === show[ 0 ] ? 'H' : 'h') + 'ide';\n });\n};\n\n/**\n * Component that decorates an HTML element with the ability to toggle the\n * masked state of an input field (like a password) when clicked.\n * The ids of the fields to be masked will be pulled directly from the button's\n * `aria-controls` attribute.\n *\n * @param {HTMLElement} el Parent element containing the fields to be masked\n * @return {boolean}\n */\nmodule.exports = el => {\n // this is the *target* state:\n // * if the element has the attr and it's !== \"true\", pressed is true\n // * otherwise, pressed is false\n const pressed = el.hasAttribute(PRESSED)\n && el.getAttribute(PRESSED) !== 'true';\n\n const fields = resolveIdRefs(el.getAttribute(CONTROLS));\n forEach(fields, field => toggleFieldMask(field, pressed));\n\n if (!el.hasAttribute(SHOW_ATTR)) {\n el.setAttribute(SHOW_ATTR, el.textContent);\n }\n\n const showText = el.getAttribute(SHOW_ATTR);\n const hideText = el.getAttribute(HIDE_ATTR) || getHideText(showText);\n\n el.textContent = pressed ? showText : hideText;\n el.setAttribute(PRESSED, pressed);\n return pressed;\n};\n","'use strict';\nconst EXPANDED = 'aria-expanded';\nconst CONTROLS = 'aria-controls';\nconst HIDDEN = 'aria-hidden';\n\nmodule.exports = (button, expanded) => {\n\n if (typeof expanded !== 'boolean') {\n expanded = button.getAttribute(EXPANDED) === 'false';\n }\n button.setAttribute(EXPANDED, expanded);\n\n const id = button.getAttribute(CONTROLS);\n const controls = document.getElementById(id);\n if (!controls) {\n throw new Error(\n 'No toggle target found with id: \"' + id + '\"'\n );\n }\n\n controls.setAttribute(HIDDEN, !expanded);\n return expanded;\n};\n","'use strict';\nconst dataset = require('elem-dataset');\n\nconst PREFIX = require('../config').prefix;\nconst CHECKED = 'aria-checked';\nconst CHECKED_CLASS = `${PREFIX}-checklist-checked`;\n\nmodule.exports = function validate (el) {\n const data = dataset(el);\n const id = data.validationElement;\n const checkList = id.charAt(0) === '#'\n ? document.querySelector(id)\n : document.getElementById(id);\n\n if (!checkList) {\n throw new Error(\n `No validation element found with id: \"${id}\"`\n );\n }\n\n for (const key in data) {\n if (key.startsWith('validate')) {\n const validatorName = key.substr('validate'.length).toLowerCase();\n const validatorPattern = new RegExp(data[ key ]);\n const validatorSelector = `[data-validator=\"${validatorName}\"]`;\n const validatorCheckbox = checkList.querySelector(validatorSelector);\n if (!validatorCheckbox) {\n throw new Error(\n `No validator checkbox found for: \"${validatorName}\"`\n );\n }\n\n const checked = validatorPattern.test(el.value);\n validatorCheckbox.classList.toggle(CHECKED_CLASS, checked);\n validatorCheckbox.setAttribute(CHECKED, checked);\n }\n }\n};\n"]} \ No newline at end of file