{"id":4344,"date":"2026-09-17T05:54:24","date_gmt":"2026-09-17T03:54:24","guid":{"rendered":"https:\/\/weiss-apparatebau.de\/service\/weld-fittings-stainless-steel\/"},"modified":"2026-09-23T14:41:04","modified_gmt":"2026-09-23T12:41:04","slug":"weld-fittings-stainless-steel","status":"publish","type":"page","link":"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/","title":{"rendered":"Stainless steel weld fittings"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background weiss-landing-hero nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:72px;--awb-padding-bottom:72px;--awb-padding-top-small:32px;--awb-padding-bottom-small:32px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center fusion-no-small-visibility\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-mask-url: url(https:\/\/weiss-apparatebau.de\/wp-content\/plugins\/fusion-builder\/\/assets\/images\/masks\/mask-16.svg);--awb-mask-size: 100%;--awb-mask-position: bottom left;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-1 hover-type-none has-mask\"><img decoding=\"async\" width=\"800\" height=\"728\" alt=\"Two employees in welding helmets welding a metal component\" title=\"weiss-schwei\u00dfarbeiten-fertigung\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung.jpg\" class=\"lazyload img-responsive wp-image-4314\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27800%27%20height%3D%27728%27%20viewBox%3D%270%200%20800%20728%27%3E%3Crect%20width%3D%27800%27%20height%3D%27728%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung-200x182.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung-400x364.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung-600x546.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung.jpg 800w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-right:40px;--awb-padding-left:40px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-1 fusion-sep-none fusion-title-text fusion-title-size-one weiss-hero-title\" style=\"--awb-margin-bottom:24px;--awb-margin-bottom-small:20px;--awb-font-size:40px;\"><h1 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;font-size:1em;text-transform:var(--awb-typography1-text-transform);--fontSize:40;line-height:var(--awb-typography1-line-height);\">Stainless steel weld fittings<\/h1><\/div><div class=\"fusion-text fusion-text-1 fusion-text-no-margin weiss-hero-intro\" style=\"--awb-margin-bottom:24px;\"><p>Bends, tees and reducers for tank, plant and vessel construction.<\/p>\n<p>Select design, series, size and material. Add drawings to your inquiry.<\/p>\n<\/div><div ><a class=\"fusion-button button-flat fusion-button-default-size button-custom fusion-button-default button-1 fusion-button-default-span fusion-button-default-type weiss-config-trigger weiss-norm-din11865 weiss-hero-cta fusion-has-button-gradient\" style=\"--button_accent_color:var(--awb-color8);--button_border_color:var(--awb-color7);--button_accent_hover_color:var(--awb-custom_color_1);--button_border_hover_color:var(--awb-custom_color_1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button_gradient_start:92%;--button_gradient_end:92%;--button_gradient_top_color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 100%));--button_gradient_bottom_color:var(--awb-color5);--button_gradient_top_color_hover:var(--awb-color5);--button_gradient_bottom_color_hover:var(--awb-color5);--button_padding-top:20px;--button_padding-right:36px;--button_padding-bottom:22px;--button_padding-left:36px;--button_margin-bottom:10px;\" target=\"_self\" data-hover=\"bg_slide_left\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Configure weld fittings<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><div class=\"fusion-image-element fusion-no-medium-visibility fusion-no-large-visibility\" style=\"--awb-mask-url: url(https:\/\/weiss-apparatebau.de\/wp-content\/plugins\/fusion-builder\/\/assets\/images\/masks\/mask-16.svg);--awb-mask-size: 100%;--awb-mask-position: bottom left;--awb-margin-bottom-small:20px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-2 hover-type-none has-mask\"><img decoding=\"async\" width=\"800\" height=\"728\" alt=\"Two employees in welding helmets welding a metal component\" title=\"weiss-schwei\u00dfarbeiten-fertigung\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung.jpg\" class=\"lazyload img-responsive wp-image-4314\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27800%27%20height%3D%27728%27%20viewBox%3D%270%200%20800%20728%27%3E%3Crect%20width%3D%27800%27%20height%3D%27728%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung-200x182.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung-400x364.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung-600x546.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung.jpg 800w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:100px;--awb-padding-top-small:36px;--awb-padding-bottom-small:35px;--awb-background-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 15%),var(--awb-color4-a));--awb-flex-wrap:wrap;\" ><div class=\"awb-background-pattern\" style=\"background-image:  url(data:image\/svg+xml;utf8,%3Csvg%20width%3D%2280%22%20height%3D%22120%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23prefix__clip0_43_320%29%22%20fill%3D%22rgba%280%2C0%2C0%2C0.3%29%22%3E%3Cpath%20d%3D%22M40%200L0%2030v30l40-30V0zm0%2030v30l40%2030V60L40%2030zM40-30V0l40%2030V0L40-30zm0%2090L0%2090v30l40-30V60zm0%2030v30l40%2030v-30L40%2090z%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22prefix__clip0_43_320%22%3E%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M0%200h80v120H0z%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E);opacity: 0.2 ;background-size:100%;mix-blend-mode:normal;\"><\/div><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:60px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-2 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:var(--awb-color1);\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:50;line-height:1.3;\">Fittings for tank, plant and vessel construction<\/h2><\/div><div class=\"fusion-text fusion-text-2\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-right:0px;\"><p>For tank, plant and vessel manufacturers, every fitting has to match the design. Purchasing and engineering need the same clear details for this: design, type of connection, tube dimension, material, surface finish and quantity.<\/p>\n<p>The configurator helps you bring these details together. Add any further requirements and drawings to your inquiry. That way we can review the design you want and clarify open technical points with you.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-3 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-0 fusion_builder_column_inner_1_3 1_3 fusion-flex-column fusion-flex-align-self-stretch\" style=\"--awb-bg-size:cover;--awb-border-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 85%));--awb-border-top:0px;--awb-border-right:1px;--awb-border-bottom:0px;--awb-border-left:0px;--awb-border-style:solid;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:40px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-max-width:250px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-3 hover-type-none\"><img decoding=\"async\" width=\"640\" height=\"640\" title=\"weiss-schweissfittings-bogen-20260914\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-bogen-20260914.png\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-bogen-20260914.png\" alt class=\"lazyload img-responsive wp-image-4257\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27640%27%20height%3D%27640%27%20viewBox%3D%270%200%20640%20640%27%3E%3Crect%20width%3D%27640%27%20height%3D%27640%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-bogen-20260914-200x200.png 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-bogen-20260914-400x400.png 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-bogen-20260914-600x600.png 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-bogen-20260914.png 640w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-1 fusion_builder_column_inner_2_3 2_3 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-left:30px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:66.666666666667%;--awb-spacing-right-large:2.88%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.88%;--awb-width-medium:66.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:2.88%;--awb-spacing-left-medium:2.88%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-3 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-top:20px;--awb-font-size:24px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;font-size:1em;text-transform:capitalize;--fontSize:24;line-height:1.4;\">Bends<\/h3><\/div><div class=\"fusion-text fusion-text-3\" style=\"--awb-text-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 30%));\"><p>45 degree and 90 degree bends change the direction of your piping. In the configurator you select angle, dimension series and size to suit the design. Tube outside diameter, wall thickness, bending radius and connection dimensions describe the component required. For deviating geometries, please inquire with a drawing.<\/p>\n<\/div><div style=\"text-align:left;\"><a class=\"fusion-button button-flat button-medium button-custom fusion-button-default button-2 fusion-button-span-no fusion-button-default-type weiss-config-trigger weiss-inline-cta weiss-norm-din11865 weiss-type-B90\" style=\"--button_accent_color:var(--awb-color1);--button_accent_hover_color:var(--awb-color1);--button_border_hover_color:var(--awb-color1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button_gradient_top_color:transparent;--button_gradient_bottom_color:transparent;--button_gradient_top_color_hover:var(--awb-custom_color_1);--button_gradient_bottom_color_hover:var(--awb-custom_color_1);\" target=\"_self\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Configure bend<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-2 fusion_builder_column_inner_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top:20px;--awb-padding-bottom:20px;--awb-bg-size:cover;--awb-border-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 85%));--awb-border-style:solid;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><\/div><\/div><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-3 fusion_builder_column_inner_1_3 1_3 fusion-flex-column fusion-flex-align-self-stretch\" style=\"--awb-bg-size:cover;--awb-border-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 85%));--awb-border-top:0px;--awb-border-right:1px;--awb-border-bottom:0px;--awb-border-left:0px;--awb-border-style:solid;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:40px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-max-width:230px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-4 hover-type-none\"><img decoding=\"async\" width=\"640\" height=\"640\" title=\"weiss-schweissfittings-reduzierung-20260914\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-reduzierung-20260914.png\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-reduzierung-20260914.png\" alt class=\"lazyload img-responsive wp-image-4255\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27640%27%20height%3D%27640%27%20viewBox%3D%270%200%20640%20640%27%3E%3Crect%20width%3D%27640%27%20height%3D%27640%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-reduzierung-20260914-200x200.png 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-reduzierung-20260914-400x400.png 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-reduzierung-20260914-600x600.png 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-reduzierung-20260914.png 640w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-4 fusion_builder_column_inner_2_3 2_3 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-left:30px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:66.666666666667%;--awb-spacing-right-large:2.88%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.88%;--awb-width-medium:66.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:2.88%;--awb-spacing-left-medium:2.88%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-4 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-top:20px;--awb-font-size:24px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;font-size:1em;text-transform:capitalize;--fontSize:24;line-height:1.4;\">Reducers<\/h3><\/div><div class=\"fusion-text fusion-text-4\" style=\"--awb-text-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 30%));\"><p>Reducers connect different tube sizes. Concentric and eccentric designs are available. The installation situation and your piping layout are decisive. State both connection sizes and the design you want so that the transition is clearly described.<\/p>\n<\/div><div style=\"text-align:left;\"><a class=\"fusion-button button-flat button-medium button-custom fusion-button-default button-3 fusion-button-span-no fusion-button-default-type weiss-config-trigger weiss-inline-cta weiss-norm-din11865 weiss-type-R\" style=\"--button_accent_color:var(--awb-color1);--button_accent_hover_color:var(--awb-color1);--button_border_hover_color:var(--awb-color1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button_gradient_top_color:transparent;--button_gradient_bottom_color:transparent;--button_gradient_top_color_hover:var(--awb-custom_color_1);--button_gradient_bottom_color_hover:var(--awb-custom_color_1);\" target=\"_self\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Configure reducer<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-5 fusion_builder_column_inner_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top:20px;--awb-padding-bottom:20px;--awb-bg-size:cover;--awb-border-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 85%));--awb-border-style:solid;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><\/div><\/div><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-6 fusion_builder_column_inner_1_3 1_3 fusion-flex-column fusion-flex-align-self-stretch\" style=\"--awb-bg-size:cover;--awb-border-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 85%));--awb-border-top:0px;--awb-border-right:1px;--awb-border-bottom:0px;--awb-border-left:0px;--awb-border-style:solid;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:40px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-max-width:250px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-5 hover-type-none\"><img decoding=\"async\" width=\"640\" height=\"640\" title=\"weiss-schweissfittings-t_stueck-20260914\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-t_stueck-20260914.png\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-t_stueck-20260914.png\" alt class=\"lazyload img-responsive wp-image-4253\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27640%27%20height%3D%27640%27%20viewBox%3D%270%200%20640%20640%27%3E%3Crect%20width%3D%27640%27%20height%3D%27640%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-t_stueck-20260914-200x200.png 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-t_stueck-20260914-400x400.png 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-t_stueck-20260914-600x600.png 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-t_stueck-20260914.png 640w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-7 fusion_builder_column_inner_2_3 2_3 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-left:30px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:66.666666666667%;--awb-spacing-right-large:2.88%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.88%;--awb-width-medium:66.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:2.88%;--awb-spacing-left-medium:2.88%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-5 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-top:20px;--awb-font-size:24px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;font-size:1em;text-transform:capitalize;--fontSize:24;line-height:1.4;\">Tees<\/h3><\/div><div class=\"fusion-text fusion-text-5\" style=\"--awb-text-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 30%));\"><p>Tees split or join pipe runs. In equal tees the run and the branch have the same size; in a reducing tee the branch is smaller. Select run size, branch size and the matching dimension series. This makes the branch in your design unambiguous.<\/p>\n<\/div><div style=\"text-align:left;\"><a class=\"fusion-button button-flat button-medium button-custom fusion-button-default button-4 fusion-button-span-no fusion-button-default-type weiss-config-trigger weiss-inline-cta weiss-norm-din11865 weiss-type-TS\" style=\"--button_accent_color:var(--awb-color1);--button_accent_hover_color:var(--awb-color1);--button_border_hover_color:var(--awb-color1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button_gradient_top_color:transparent;--button_gradient_bottom_color:transparent;--button_gradient_top_color_hover:var(--awb-custom_color_1);--button_gradient_bottom_color_hover:var(--awb-custom_color_1);\" target=\"_self\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Configure tee<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-8 fusion_builder_column_inner_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top:20px;--awb-padding-bottom:20px;--awb-bg-size:cover;--awb-border-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 85%));--awb-border-style:solid;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><\/div><\/div><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-3 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:0px;--awb-padding-bottom:100px;--awb-padding-bottom-small:34px;--awb-margin-top:150px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-4 fusion_builder_column_2_3 2_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:66.666666666667%;--awb-spacing-right-large:2.88%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.88%;--awb-width-medium:66.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:2.88%;--awb-spacing-left-medium:2.88%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-6 fusion-sep-none fusion-title-text fusion-title-size-two\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:50;line-height:1.3;\">Custom fittings to drawing<\/h2><\/div><div class=\"fusion-title title fusion-title-7 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-font-size:var(--awb-custom_typography_1-font-size);\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-custom_typography_1-font-family);font-weight:var(--awb-custom_typography_1-font-weight);font-style:var(--awb-custom_typography_1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-custom_typography_1-letter-spacing);text-transform:var(--awb-custom_typography_1-text-transform);--fontSize:40;line-height:var(--awb-custom_typography_1-line-height);\">Your geometry. Technically agreed.<\/h3><\/div><div class=\"fusion-text fusion-text-6\"><p>If your requirement differs from the DIN 11865 range provided, send us a drawing or technical specification. Weiss Apparatebau manufactures components and assemblies to agreed requirements. We review feasibility, design and terms for your specific needs.<\/p>\n<p>The following dimension tables help you select bends, tees and reducers in series A, B and C. The bend tables give tube outside diameter, wall thickness, bending radius and lengths for 45 and 90 degree designs. Check the dimensions together with your design; the size designation alone does not describe every connection.<\/p>\n<\/div><div class=\"accordian fusion-accordian weiss-masstabellen\" style=\"--awb-border-size:1px;--awb-icon-size:16px;--awb-content-font-size:var(--awb-typography4-font-size);--awb-icon-alignment:left;--awb-hover-color:var(--awb-color2);--awb-border-color:var(--awb-color3);--awb-background-color:var(--awb-color1);--awb-divider-color:var(--awb-color3);--awb-divider-hover-color:var(--awb-color3);--awb-icon-color:var(--awb-color1);--awb-title-color:var(--awb-color8);--awb-content-color:var(--awb-color8);--awb-icon-box-color:var(--awb-color8);--awb-toggle-hover-accent-color:var(--awb-color5);--awb-title-font-family:&quot;Plus Jakarta Sans&quot;;--awb-title-font-weight:700;--awb-title-font-style:normal;--awb-content-font-family:var(--awb-typography4-font-family);--awb-content-font-weight:var(--awb-typography4-font-weight);--awb-content-font-style:var(--awb-typography4-font-style);\"><div class=\"panel-group fusion-toggle-icon-boxed\" id=\"accordion-4344-1\"><div class=\"fusion-panel panel-default panel-2b9e9327121b0b53c fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_2b9e9327121b0b53c\"><a aria-expanded=\"false\" aria-controls=\"2b9e9327121b0b53c\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#2b9e9327121b0b53c\" href=\"#2b9e9327121b0b53c\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Bends to DIN 11865 series A (metric, DN)<\/span><\/a><\/h3><\/div><div id=\"2b9e9327121b0b53c\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_2b9e9327121b0b53c\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"Bends to DIN 11865 series A (metric, DN)\">\n<table class=\"weiss-masstabelle\">\n<caption>Bends to DIN 11865 series A (metric, DN)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Size<\/th>\n<th scope=\"col\">Tube OD<\/th>\n<th scope=\"col\">Wall thickness<\/th>\n<th scope=\"col\">Bending radius<\/th>\n<th scope=\"col\">L1<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L3 at 45 degrees<\/th>\n<th scope=\"col\">L3 at 90 degrees<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">DN06<\/th>\n<td>8<\/td>\n<td>1<\/td>\n<td>20<\/td>\n<td>45<\/td>\n<td>33,3<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN08<\/th>\n<td>10<\/td>\n<td>1<\/td>\n<td>25<\/td>\n<td>50<\/td>\n<td>35,4<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN10<\/th>\n<td>13<\/td>\n<td>1,5<\/td>\n<td>26<\/td>\n<td>51<\/td>\n<td>35,8<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN15<\/th>\n<td>19<\/td>\n<td>1,5<\/td>\n<td>35<\/td>\n<td>60<\/td>\n<td>39,5<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN20<\/th>\n<td>23<\/td>\n<td>1,5<\/td>\n<td>40<\/td>\n<td>65<\/td>\n<td>41,6<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN25<\/th>\n<td>29<\/td>\n<td>1,5<\/td>\n<td>50<\/td>\n<td>90<\/td>\n<td>60,7<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN32<\/th>\n<td>35<\/td>\n<td>1,5<\/td>\n<td>55<\/td>\n<td>95<\/td>\n<td>62,8<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>41<\/td>\n<td>1,5<\/td>\n<td>60<\/td>\n<td>100<\/td>\n<td>64,9<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>53<\/td>\n<td>1,5<\/td>\n<td>70<\/td>\n<td>110<\/td>\n<td>69<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN65<\/th>\n<td>70<\/td>\n<td>2<\/td>\n<td>80<\/td>\n<td>120<\/td>\n<td>73,1<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN80<\/th>\n<td>85<\/td>\n<td>2<\/td>\n<td>90<\/td>\n<td>145<\/td>\n<td>92,3<\/td>\n<td>55<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN100<\/th>\n<td>104<\/td>\n<td>2<\/td>\n<td>100<\/td>\n<td>155<\/td>\n<td>96,4<\/td>\n<td>55<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN125<\/th>\n<td>129<\/td>\n<td>2<\/td>\n<td>187,5<\/td>\n<td>270<\/td>\n<td>160,2<\/td>\n<td>82,5<\/td>\n<td>82,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN150<\/th>\n<td>154<\/td>\n<td>2<\/td>\n<td>225<\/td>\n<td>325<\/td>\n<td>193,2<\/td>\n<td>100<\/td>\n<td>100<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN200<\/th>\n<td>204<\/td>\n<td>2<\/td>\n<td>300<\/td>\n<td>400<\/td>\n<td>224,3<\/td>\n<td>100<\/td>\n<td>100<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-tabellen-hinweis\">All dimensions in millimetres. On narrow screens the table can be scrolled horizontally.<\/p>\n<div style=\"text-align:left;\"><a class=\"fusion-button button-flat button-medium button-custom fusion-button-default button-5 fusion-button-span-no fusion-button-default-type weiss-config-trigger weiss-inline-cta weiss-norm-din11865 weiss-type-B90 weiss-series-a\" style=\"--button_accent_color:var(--awb-custom_color_1);--button_border_color:var(--awb-custom_color_1);--button_accent_hover_color:var(--awb-color1);--button_border_hover_color:var(--awb-color1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button-border-radius-top-left:0;--button-border-radius-top-right:0;--button-border-radius-bottom-right:0;--button-border-radius-bottom-left:0;--button_gradient_top_color:transparent;--button_gradient_bottom_color:transparent;--button_gradient_top_color_hover:var(--awb-custom_color_1);--button_gradient_bottom_color_hover:var(--awb-custom_color_1);\" target=\"_self\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Configure a series A bend<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-876df9cbd04c7d218 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_876df9cbd04c7d218\"><a aria-expanded=\"false\" aria-controls=\"876df9cbd04c7d218\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#876df9cbd04c7d218\" href=\"#876df9cbd04c7d218\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Bends to DIN 11865 series B (metric ISO, OD)<\/span><\/a><\/h3><\/div><div id=\"876df9cbd04c7d218\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_876df9cbd04c7d218\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"Bends to DIN 11865 series B (metric ISO, OD)\">\n<table class=\"weiss-masstabelle\">\n<caption>Bends to DIN 11865 series B (metric ISO, OD)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Size<\/th>\n<th scope=\"col\">Tube OD<\/th>\n<th scope=\"col\">Wall thickness<\/th>\n<th scope=\"col\">Bending radius<\/th>\n<th scope=\"col\">L1<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L3 at 45 degrees<\/th>\n<th scope=\"col\">L3 at 90 degrees<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">NW10.2<\/th>\n<td>10,2<\/td>\n<td>1,6<\/td>\n<td>20<\/td>\n<td>45<\/td>\n<td>33,3<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW13.5<\/th>\n<td>13,5<\/td>\n<td>1,6<\/td>\n<td>20<\/td>\n<td>45<\/td>\n<td>33,3<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW17.2<\/th>\n<td>17,2<\/td>\n<td>1,6<\/td>\n<td>28<\/td>\n<td>53<\/td>\n<td>36,6<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW21.3<\/th>\n<td>21,3<\/td>\n<td>1,6<\/td>\n<td>30<\/td>\n<td>55<\/td>\n<td>37,4<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW26.9<\/th>\n<td>26,9<\/td>\n<td>1,6<\/td>\n<td>28,5<\/td>\n<td>68,5<\/td>\n<td>51,8<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW33.7<\/th>\n<td>33,7<\/td>\n<td>2<\/td>\n<td>38<\/td>\n<td>78<\/td>\n<td>55,7<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW42.4<\/th>\n<td>42,4<\/td>\n<td>2<\/td>\n<td>47,5<\/td>\n<td>87,5<\/td>\n<td>59,7<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>48,3<\/td>\n<td>2<\/td>\n<td>57<\/td>\n<td>97<\/td>\n<td>63,6<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>60,3<\/td>\n<td>2<\/td>\n<td>76<\/td>\n<td>116<\/td>\n<td>71,5<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW76.1<\/th>\n<td>76,1<\/td>\n<td>2<\/td>\n<td>95<\/td>\n<td>150<\/td>\n<td>94,4<\/td>\n<td>55<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW88.9<\/th>\n<td>88,9<\/td>\n<td>2,3<\/td>\n<td>114,5<\/td>\n<td>169,5<\/td>\n<td>102,4<\/td>\n<td>55<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW114.3<\/th>\n<td>114,3<\/td>\n<td>2,3<\/td>\n<td>152,5<\/td>\n<td>207,5<\/td>\n<td>118,2<\/td>\n<td>55<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW139.7<\/th>\n<td>139,7<\/td>\n<td>2,6<\/td>\n<td>190,5<\/td>\n<td>245,5<\/td>\n<td>133,9<\/td>\n<td>55<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW168.3<\/th>\n<td>168,3<\/td>\n<td>2,6<\/td>\n<td>228,5<\/td>\n<td>283,5<\/td>\n<td>149,7<\/td>\n<td>55<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW219.1<\/th>\n<td>219,1<\/td>\n<td>2,6<\/td>\n<td>305<\/td>\n<td>385<\/td>\n<td>206,3<\/td>\n<td>80<\/td>\n<td>80<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-tabellen-hinweis\">All dimensions in millimetres. On narrow screens the table can be scrolled horizontally.<\/p>\n<div style=\"text-align:left;\"><a class=\"fusion-button button-flat button-medium button-custom fusion-button-default button-6 fusion-button-span-no fusion-button-default-type weiss-config-trigger weiss-inline-cta weiss-norm-din11865 weiss-type-B90 weiss-series-b\" style=\"--button_accent_color:var(--awb-custom_color_1);--button_border_color:var(--awb-custom_color_1);--button_accent_hover_color:var(--awb-color1);--button_border_hover_color:var(--awb-color1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button-border-radius-top-left:0;--button-border-radius-top-right:0;--button-border-radius-bottom-right:0;--button-border-radius-bottom-left:0;--button_gradient_top_color:transparent;--button_gradient_bottom_color:transparent;--button_gradient_top_color_hover:var(--awb-custom_color_1);--button_gradient_bottom_color_hover:var(--awb-custom_color_1);\" target=\"_self\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Configure a series B bend<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-43ec902671aadc2fd fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_43ec902671aadc2fd\"><a aria-expanded=\"false\" aria-controls=\"43ec902671aadc2fd\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#43ec902671aadc2fd\" href=\"#43ec902671aadc2fd\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Bends to DIN 11865 series C (inch, OD)<\/span><\/a><\/h3><\/div><div id=\"43ec902671aadc2fd\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_43ec902671aadc2fd\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"Bends to DIN 11865 series C (inch, OD)\">\n<table class=\"weiss-masstabelle\">\n<caption>Bends to DIN 11865 series C (inch, OD)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Size<\/th>\n<th scope=\"col\">Tube OD<\/th>\n<th scope=\"col\">Wall thickness<\/th>\n<th scope=\"col\">Bending radius<\/th>\n<th scope=\"col\">L1<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L3 at 45 degrees<\/th>\n<th scope=\"col\">L3 at 90 degrees<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">0.25<\/th>\n<td>6,35<\/td>\n<td>0,89<\/td>\n<td>14,3<\/td>\n<td>66,7<\/td>\n<td>50,8<\/td>\n<td>44,9<\/td>\n<td>52,4<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.375<\/th>\n<td>9,53<\/td>\n<td>0,89<\/td>\n<td>28,6<\/td>\n<td>66,7<\/td>\n<td>50,8<\/td>\n<td>39<\/td>\n<td>38,1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.5<\/th>\n<td>12,7<\/td>\n<td>1,65<\/td>\n<td>28,6<\/td>\n<td>76,2<\/td>\n<td>57,2<\/td>\n<td>45,4<\/td>\n<td>47,6<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.75<\/th>\n<td>19,05<\/td>\n<td>1,65<\/td>\n<td>28,6<\/td>\n<td>76,2<\/td>\n<td>57,2<\/td>\n<td>45,4<\/td>\n<td>47,6<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1<\/th>\n<td>25,4<\/td>\n<td>1,65<\/td>\n<td>38,1<\/td>\n<td>76,2<\/td>\n<td>57,2<\/td>\n<td>41,4<\/td>\n<td>38,1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1.5<\/th>\n<td>38,1<\/td>\n<td>1,65<\/td>\n<td>57,2<\/td>\n<td>95,3<\/td>\n<td>63,5<\/td>\n<td>39,8<\/td>\n<td>38,1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2<\/th>\n<td>50,8<\/td>\n<td>1,65<\/td>\n<td>76,2<\/td>\n<td>120,7<\/td>\n<td>76,2<\/td>\n<td>44,6<\/td>\n<td>44,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2.5<\/th>\n<td>63,5<\/td>\n<td>1,65<\/td>\n<td>95,3<\/td>\n<td>139,7<\/td>\n<td>85,7<\/td>\n<td>46,2<\/td>\n<td>44,4<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>76,2<\/td>\n<td>1,65<\/td>\n<td>114,3<\/td>\n<td>158,8<\/td>\n<td>92,1<\/td>\n<td>44,8<\/td>\n<td>44,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>101,6<\/td>\n<td>2,11<\/td>\n<td>152,4<\/td>\n<td>203,2<\/td>\n<td>114,3<\/td>\n<td>51,2<\/td>\n<td>50,8<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">6<\/th>\n<td>152,4<\/td>\n<td>2,77<\/td>\n<td>228,6<\/td>\n<td>292,1<\/td>\n<td>158,8<\/td>\n<td>64,1<\/td>\n<td>63,5<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-tabellen-hinweis\">All dimensions in millimetres. On narrow screens the table can be scrolled horizontally.<\/p>\n<div style=\"text-align:left;\"><a class=\"fusion-button button-flat button-medium button-custom fusion-button-default button-7 fusion-button-span-no fusion-button-default-type weiss-config-trigger weiss-inline-cta weiss-norm-din11865 weiss-type-B90 weiss-series-c\" style=\"--button_accent_color:var(--awb-custom_color_1);--button_border_color:var(--awb-custom_color_1);--button_accent_hover_color:var(--awb-color1);--button_border_hover_color:var(--awb-color1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button-border-radius-top-left:0;--button-border-radius-top-right:0;--button-border-radius-bottom-right:0;--button-border-radius-bottom-left:0;--button_gradient_top_color:transparent;--button_gradient_bottom_color:transparent;--button_gradient_top_color_hover:var(--awb-custom_color_1);--button_gradient_bottom_color_hover:var(--awb-custom_color_1);\" target=\"_self\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Configure a series C bend<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-3d026c246c3db7b79 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_3d026c246c3db7b79\"><a aria-expanded=\"false\" aria-controls=\"3d026c246c3db7b79\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#3d026c246c3db7b79\" href=\"#3d026c246c3db7b79\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 equal tees, series A<\/span><\/a><\/h3><\/div><div id=\"3d026c246c3db7b79\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_3d026c246c3db7b79\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 equal tees, series A\">\n<table class=\"weiss-masstabelle\">\n<caption>Equal tees to DIN 11865, series A (metric DN)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Size<\/th>\n<th scope=\"col\">L0<\/th>\n<th scope=\"col\">L<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L1, branch offset<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">DN06<\/th>\n<td>30<\/td>\n<td>60<\/td>\n<td>30<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN08<\/th>\n<td>30<\/td>\n<td>60<\/td>\n<td>30<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN10<\/th>\n<td>35<\/td>\n<td>70<\/td>\n<td>35<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN15<\/th>\n<td>35<\/td>\n<td>70<\/td>\n<td>35<\/td>\n<td>11 \u00b1 0,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN20<\/th>\n<td>40<\/td>\n<td>80<\/td>\n<td>40<\/td>\n<td>13 \u00b1 0,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN25<\/th>\n<td>50<\/td>\n<td>100<\/td>\n<td>50<\/td>\n<td>16 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN32<\/th>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>19,5 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>23 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>80<\/td>\n<td>160<\/td>\n<td>80<\/td>\n<td>30 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN65<\/th>\n<td>105<\/td>\n<td>210<\/td>\n<td>105<\/td>\n<td>40 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN80<\/th>\n<td>130<\/td>\n<td>260<\/td>\n<td>130<\/td>\n<td>47,5 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN100<\/th>\n<td>155<\/td>\n<td>310<\/td>\n<td>155<\/td>\n<td>58 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN125<\/th>\n<td>187,5<\/td>\n<td>375<\/td>\n<td>187,5<\/td>\n<td>74 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN150<\/th>\n<td>225<\/td>\n<td>450<\/td>\n<td>225<\/td>\n<td>90 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN200<\/th>\n<td>300<\/td>\n<td>600<\/td>\n<td>300<\/td>\n<td>115 \u00b1 3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed. L0, L, L2 and L1 refer to the dimensions in the corresponding component drawing. A dash at L1 means no offset, not zero.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-8620b94786a05e6fd fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_8620b94786a05e6fd\"><a aria-expanded=\"false\" aria-controls=\"8620b94786a05e6fd\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#8620b94786a05e6fd\" href=\"#8620b94786a05e6fd\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 equal tees, series B<\/span><\/a><\/h3><\/div><div id=\"8620b94786a05e6fd\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_8620b94786a05e6fd\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 equal tees, series B\">\n<table class=\"weiss-masstabelle\">\n<caption>Equal tees to DIN 11865, series B (ISO\/OD NW)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Size<\/th>\n<th scope=\"col\">L0<\/th>\n<th scope=\"col\">L<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L1, branch offset<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">NW10.2<\/th>\n<td>30<\/td>\n<td>60<\/td>\n<td>30<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW13.5<\/th>\n<td>32<\/td>\n<td>64<\/td>\n<td>32<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW17.2<\/th>\n<td>34<\/td>\n<td>68<\/td>\n<td>34<\/td>\n<td>10,1 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW21.3<\/th>\n<td>36<\/td>\n<td>72<\/td>\n<td>36<\/td>\n<td>12,2 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW26.9<\/th>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>15 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW33.7<\/th>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>18,4 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW42.4<\/th>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>23,2 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>26,7 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>90<\/td>\n<td>180<\/td>\n<td>90<\/td>\n<td>33,7 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW76.1<\/th>\n<td>110<\/td>\n<td>220<\/td>\n<td>110<\/td>\n<td>43,1 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW88.9<\/th>\n<td>130<\/td>\n<td>260<\/td>\n<td>130<\/td>\n<td>49,5 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW114.3<\/th>\n<td>160<\/td>\n<td>320<\/td>\n<td>160<\/td>\n<td>63,2 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW139.7<\/th>\n<td>200<\/td>\n<td>400<\/td>\n<td>200<\/td>\n<td>79,9 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW168.3<\/th>\n<td>250<\/td>\n<td>500<\/td>\n<td>250<\/td>\n<td>97,2 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW219.1<\/th>\n<td>300<\/td>\n<td>600<\/td>\n<td>300<\/td>\n<td>123,6 \u00b1 4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed. L0, L, L2 and L1 refer to the dimensions in the corresponding component drawing. A dash at L1 means no offset, not zero.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-a49642e99757e5488 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_a49642e99757e5488\"><a aria-expanded=\"false\" aria-controls=\"a49642e99757e5488\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#a49642e99757e5488\" href=\"#a49642e99757e5488\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 equal tees, series C<\/span><\/a><\/h3><\/div><div id=\"a49642e99757e5488\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_a49642e99757e5488\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 equal tees, series C\">\n<table class=\"weiss-masstabelle\">\n<caption>Equal tees to DIN 11865, series C (inch)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Size<\/th>\n<th scope=\"col\">L0<\/th>\n<th scope=\"col\">L<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L1, branch offset<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">0.25<\/th>\n<td>44,5<\/td>\n<td>89<\/td>\n<td>44,5<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.375<\/th>\n<td>44,5<\/td>\n<td>89<\/td>\n<td>44,5<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.5<\/th>\n<td>47,6<\/td>\n<td>95,2<\/td>\n<td>47,6<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.75<\/th>\n<td>50,8<\/td>\n<td>101,6<\/td>\n<td>50,8<\/td>\n<td>11 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1<\/th>\n<td>54<\/td>\n<td>108<\/td>\n<td>54<\/td>\n<td>14,2 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1.5<\/th>\n<td>60,3<\/td>\n<td>120,6<\/td>\n<td>60,3<\/td>\n<td>21,1 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2<\/th>\n<td>73<\/td>\n<td>146<\/td>\n<td>73<\/td>\n<td>28,9 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2.5<\/th>\n<td>79,4<\/td>\n<td>158,8<\/td>\n<td>79,4<\/td>\n<td>35,3 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>85,7<\/td>\n<td>171,4<\/td>\n<td>85,7<\/td>\n<td>43,1 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>104,8<\/td>\n<td>209,6<\/td>\n<td>104,8<\/td>\n<td>56,8 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">6<\/th>\n<td>142,9<\/td>\n<td>285,8<\/td>\n<td>142,9<\/td>\n<td>90,1 \u00b1 3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed. L0, L, L2 and L1 refer to the dimensions in the corresponding component drawing. A dash at L1 means no offset, not zero.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-63e0fb978d9313aab fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_63e0fb978d9313aab\"><a aria-expanded=\"false\" aria-controls=\"63e0fb978d9313aab\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#63e0fb978d9313aab\" href=\"#63e0fb978d9313aab\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 reducing tees, series A<\/span><\/a><\/h3><\/div><div id=\"63e0fb978d9313aab\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_63e0fb978d9313aab\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 reducing tees, series A\">\n<table class=\"weiss-masstabelle\">\n<caption>Reducing tees to DIN 11865, series A<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Run<\/th>\n<th scope=\"col\">Branch<\/th>\n<th scope=\"col\">L0<\/th>\n<th scope=\"col\">L<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L1, branch offset<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">DN08<\/th>\n<td>DN06<\/td>\n<td>30<\/td>\n<td>60<\/td>\n<td>30<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN10<\/th>\n<td>DN06<\/td>\n<td>30<\/td>\n<td>60<\/td>\n<td>30<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN10<\/th>\n<td>DN08<\/td>\n<td>30<\/td>\n<td>60<\/td>\n<td>30<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN15<\/th>\n<td>DN08<\/td>\n<td>35<\/td>\n<td>70<\/td>\n<td>35<\/td>\n<td>11 \u00b1 0,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN15<\/th>\n<td>DN10<\/td>\n<td>35<\/td>\n<td>70<\/td>\n<td>35<\/td>\n<td>11 \u00b1 0,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN20<\/th>\n<td>DN10<\/td>\n<td>40<\/td>\n<td>80<\/td>\n<td>40<\/td>\n<td>13 \u00b1 0,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN20<\/th>\n<td>DN15<\/td>\n<td>40<\/td>\n<td>80<\/td>\n<td>40<\/td>\n<td>13 \u00b1 0,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN25<\/th>\n<td>DN15<\/td>\n<td>50<\/td>\n<td>100<\/td>\n<td>50<\/td>\n<td>16 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN25<\/th>\n<td>DN20<\/td>\n<td>50<\/td>\n<td>100<\/td>\n<td>50<\/td>\n<td>16 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN32<\/th>\n<td>DN15<\/td>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>19 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN32<\/th>\n<td>DN20<\/td>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>19 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN32<\/th>\n<td>DN25<\/td>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>19 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>DN20<\/td>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>22 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>DN25<\/td>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>22 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>DN32<\/td>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>22,5 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>DN25<\/td>\n<td>80<\/td>\n<td>160<\/td>\n<td>80<\/td>\n<td>28 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>DN32<\/td>\n<td>80<\/td>\n<td>160<\/td>\n<td>80<\/td>\n<td>28,5 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>DN40<\/td>\n<td>80<\/td>\n<td>160<\/td>\n<td>80<\/td>\n<td>29 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN65<\/th>\n<td>DN32<\/td>\n<td>105<\/td>\n<td>210<\/td>\n<td>80<\/td>\n<td>37 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN65<\/th>\n<td>DN40<\/td>\n<td>105<\/td>\n<td>210<\/td>\n<td>80<\/td>\n<td>37,5 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN65<\/th>\n<td>DN50<\/td>\n<td>105<\/td>\n<td>210<\/td>\n<td>80<\/td>\n<td>38,5 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN80<\/th>\n<td>DN40<\/td>\n<td>130<\/td>\n<td>260<\/td>\n<td>105<\/td>\n<td>45 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN80<\/th>\n<td>DN50<\/td>\n<td>130<\/td>\n<td>260<\/td>\n<td>105<\/td>\n<td>46 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN80<\/th>\n<td>DN65<\/td>\n<td>130<\/td>\n<td>260<\/td>\n<td>105<\/td>\n<td>47,5 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN100<\/th>\n<td>DN50<\/td>\n<td>155<\/td>\n<td>310<\/td>\n<td>130<\/td>\n<td>55,5 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN100<\/th>\n<td>DN65<\/td>\n<td>155<\/td>\n<td>310<\/td>\n<td>130<\/td>\n<td>57 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN100<\/th>\n<td>DN80<\/td>\n<td>155<\/td>\n<td>310<\/td>\n<td>130<\/td>\n<td>57 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN125<\/th>\n<td>DN65<\/td>\n<td>187,5<\/td>\n<td>375<\/td>\n<td>155<\/td>\n<td>69,5 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN125<\/th>\n<td>DN80<\/td>\n<td>187,5<\/td>\n<td>375<\/td>\n<td>155<\/td>\n<td>69,5 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN125<\/th>\n<td>DN100<\/td>\n<td>187,5<\/td>\n<td>375<\/td>\n<td>155<\/td>\n<td>70,5 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN150<\/th>\n<td>DN80<\/td>\n<td>225<\/td>\n<td>450<\/td>\n<td>187,5<\/td>\n<td>82 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN150<\/th>\n<td>DN100<\/td>\n<td>225<\/td>\n<td>450<\/td>\n<td>187,5<\/td>\n<td>83 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN150<\/th>\n<td>DN125<\/td>\n<td>225<\/td>\n<td>450<\/td>\n<td>187,5<\/td>\n<td>86,5 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN200<\/th>\n<td>DN100<\/td>\n<td>300<\/td>\n<td>600<\/td>\n<td>225<\/td>\n<td>108 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN200<\/th>\n<td>DN125<\/td>\n<td>300<\/td>\n<td>600<\/td>\n<td>225<\/td>\n<td>111,5 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN200<\/th>\n<td>DN150<\/td>\n<td>300<\/td>\n<td>600<\/td>\n<td>225<\/td>\n<td>115 \u00b1 3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed. L0, L, L2 and L1 refer to the dimensions in the corresponding component drawing. A dash at L1 means no offset, not zero.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-2f55936fb5cf3dc3b fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_2f55936fb5cf3dc3b\"><a aria-expanded=\"false\" aria-controls=\"2f55936fb5cf3dc3b\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#2f55936fb5cf3dc3b\" href=\"#2f55936fb5cf3dc3b\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 reducing tees, series B<\/span><\/a><\/h3><\/div><div id=\"2f55936fb5cf3dc3b\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_2f55936fb5cf3dc3b\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 reducing tees, series B\">\n<table class=\"weiss-masstabelle\">\n<caption>Reducing tees to DIN 11865, series B<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Run<\/th>\n<th scope=\"col\">Branch<\/th>\n<th scope=\"col\">L0<\/th>\n<th scope=\"col\">L<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L1, branch offset<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">NW13.5<\/th>\n<td>NW10.2<\/td>\n<td>32<\/td>\n<td>64<\/td>\n<td>32<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW17.2<\/th>\n<td>NW10.2<\/td>\n<td>34<\/td>\n<td>68<\/td>\n<td>34<\/td>\n<td>10,1 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW17.2<\/th>\n<td>NW13.5<\/td>\n<td>34<\/td>\n<td>68<\/td>\n<td>34<\/td>\n<td>10,1 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW21.3<\/th>\n<td>NW10.2<\/td>\n<td>36<\/td>\n<td>72<\/td>\n<td>36<\/td>\n<td>12,2 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW21.3<\/th>\n<td>NW13.5<\/td>\n<td>36<\/td>\n<td>72<\/td>\n<td>36<\/td>\n<td>12,2 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW21.3<\/th>\n<td>NW17.2<\/td>\n<td>36<\/td>\n<td>72<\/td>\n<td>36<\/td>\n<td>12,2 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW26.9<\/th>\n<td>NW13.5<\/td>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>15 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW26.9<\/th>\n<td>NW17.2<\/td>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>15 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW26.9<\/th>\n<td>NW21.3<\/td>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>15 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW33.7<\/th>\n<td>NW17.2<\/td>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>18,4 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW33.7<\/th>\n<td>NW21.3<\/td>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>18,4 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW33.7<\/th>\n<td>NW26.9<\/td>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>18,4 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW42.4<\/th>\n<td>NW21.3<\/td>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>22,7 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW42.4<\/th>\n<td>NW26.9<\/td>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>22,7 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW42.4<\/th>\n<td>NW33.7<\/td>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>22,7 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>NW26.9<\/td>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>25,7 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>NW33.7<\/td>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>25,7 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>NW42.4<\/td>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>26,2 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>NW33.7<\/td>\n<td>90<\/td>\n<td>180<\/td>\n<td>90<\/td>\n<td>31,7 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>NW42.4<\/td>\n<td>90<\/td>\n<td>180<\/td>\n<td>90<\/td>\n<td>32,2 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>NW48.3<\/td>\n<td>90<\/td>\n<td>180<\/td>\n<td>90<\/td>\n<td>32,7 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW76.1<\/th>\n<td>NW42.4<\/td>\n<td>110<\/td>\n<td>220<\/td>\n<td>90<\/td>\n<td>40,1 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW76.1<\/th>\n<td>NW48.3<\/td>\n<td>110<\/td>\n<td>220<\/td>\n<td>90<\/td>\n<td>40,6 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW76.1<\/th>\n<td>NW60.3<\/td>\n<td>110<\/td>\n<td>220<\/td>\n<td>90<\/td>\n<td>41,6 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW88.9<\/th>\n<td>NW48.3<\/td>\n<td>130<\/td>\n<td>260<\/td>\n<td>110<\/td>\n<td>47 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW88.9<\/th>\n<td>NW60.3<\/td>\n<td>130<\/td>\n<td>260<\/td>\n<td>110<\/td>\n<td>48 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW88.9<\/th>\n<td>NW76.1<\/td>\n<td>130<\/td>\n<td>260<\/td>\n<td>110<\/td>\n<td>49,5 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW114.3<\/th>\n<td>NW60.3<\/td>\n<td>160<\/td>\n<td>320<\/td>\n<td>130<\/td>\n<td>60,7 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW114.3<\/th>\n<td>NW76.1<\/td>\n<td>160<\/td>\n<td>320<\/td>\n<td>130<\/td>\n<td>62,2 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW114.3<\/th>\n<td>NW88.9<\/td>\n<td>160<\/td>\n<td>320<\/td>\n<td>130<\/td>\n<td>62,2 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW139.7<\/th>\n<td>NW76.1<\/td>\n<td>200<\/td>\n<td>400<\/td>\n<td>160<\/td>\n<td>74,9 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW139.7<\/th>\n<td>NW88.9<\/td>\n<td>200<\/td>\n<td>400<\/td>\n<td>160<\/td>\n<td>74,9 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW139.7<\/th>\n<td>NW114.3<\/td>\n<td>200<\/td>\n<td>400<\/td>\n<td>160<\/td>\n<td>75,9 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW168.3<\/th>\n<td>NW88.9<\/td>\n<td>250<\/td>\n<td>500<\/td>\n<td>200<\/td>\n<td>89,2 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW168.3<\/th>\n<td>NW114.3<\/td>\n<td>250<\/td>\n<td>500<\/td>\n<td>200<\/td>\n<td>90,2 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW168.3<\/th>\n<td>NW139.7<\/td>\n<td>250<\/td>\n<td>500<\/td>\n<td>200<\/td>\n<td>94,2 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW219.1<\/th>\n<td>NW114.3<\/td>\n<td>300<\/td>\n<td>600<\/td>\n<td>250<\/td>\n<td>115,6 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW219.1<\/th>\n<td>NW139.7<\/td>\n<td>300<\/td>\n<td>600<\/td>\n<td>250<\/td>\n<td>119,6 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW219.1<\/th>\n<td>NW168.3<\/td>\n<td>300<\/td>\n<td>600<\/td>\n<td>250<\/td>\n<td>122,6 \u00b1 3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed. L0, L, L2 and L1 refer to the dimensions in the corresponding component drawing. A dash at L1 means no offset, not zero.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-f1e7b1b75d415e5ba fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_f1e7b1b75d415e5ba\"><a aria-expanded=\"false\" aria-controls=\"f1e7b1b75d415e5ba\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#f1e7b1b75d415e5ba\" href=\"#f1e7b1b75d415e5ba\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 reducing tees, series C<\/span><\/a><\/h3><\/div><div id=\"f1e7b1b75d415e5ba\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_f1e7b1b75d415e5ba\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 reducing tees, series C\">\n<table class=\"weiss-masstabelle\">\n<caption>Reducing tees to DIN 11865, series C<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Run<\/th>\n<th scope=\"col\">Branch<\/th>\n<th scope=\"col\">L0<\/th>\n<th scope=\"col\">L<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L1, branch offset<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">0.375<\/th>\n<td>0.25<\/td>\n<td>44,5<\/td>\n<td>89<\/td>\n<td>44,5<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.5<\/th>\n<td>0.25<\/td>\n<td>47,6<\/td>\n<td>95,2<\/td>\n<td>47,6<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.5<\/th>\n<td>0.375<\/td>\n<td>47,6<\/td>\n<td>95,2<\/td>\n<td>47,6<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.75<\/th>\n<td>0.375<\/td>\n<td>50,8<\/td>\n<td>101,6<\/td>\n<td>50,8<\/td>\n<td>11 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.75<\/th>\n<td>0.5<\/td>\n<td>50,8<\/td>\n<td>101,6<\/td>\n<td>50,8<\/td>\n<td>11 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1<\/th>\n<td>0.5<\/td>\n<td>54<\/td>\n<td>108<\/td>\n<td>54<\/td>\n<td>14,2 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1<\/th>\n<td>0.75<\/td>\n<td>54<\/td>\n<td>108<\/td>\n<td>54<\/td>\n<td>14,2 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1.5<\/th>\n<td>0.75<\/td>\n<td>60,3<\/td>\n<td>120,6<\/td>\n<td>60,3<\/td>\n<td>20,6 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1.5<\/th>\n<td>1<\/td>\n<td>60,3<\/td>\n<td>120,6<\/td>\n<td>60,3<\/td>\n<td>20,6 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2<\/th>\n<td>1<\/td>\n<td>73<\/td>\n<td>146<\/td>\n<td>66,7<\/td>\n<td>26,9 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2<\/th>\n<td>1.5<\/td>\n<td>73<\/td>\n<td>146<\/td>\n<td>66,7<\/td>\n<td>27,4 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2.5<\/th>\n<td>1.5<\/td>\n<td>79,4<\/td>\n<td>158,8<\/td>\n<td>73<\/td>\n<td>33,8 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2.5<\/th>\n<td>2<\/td>\n<td>79,4<\/td>\n<td>158,8<\/td>\n<td>73<\/td>\n<td>35,3 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>1.5<\/td>\n<td>85,7<\/td>\n<td>171,4<\/td>\n<td>79,4<\/td>\n<td>40,1 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>2<\/td>\n<td>85,7<\/td>\n<td>171,4<\/td>\n<td>79,4<\/td>\n<td>41,6 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>2.5<\/td>\n<td>85,7<\/td>\n<td>171,4<\/td>\n<td>79,4<\/td>\n<td>41,6 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>2<\/td>\n<td>104,8<\/td>\n<td>209,6<\/td>\n<td>98,4<\/td>\n<td>54,3 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>2.5<\/td>\n<td>104,8<\/td>\n<td>209,6<\/td>\n<td>98,4<\/td>\n<td>54,3 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>3<\/td>\n<td>104,8<\/td>\n<td>209,6<\/td>\n<td>98,4<\/td>\n<td>55,8 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">6<\/th>\n<td>3<\/td>\n<td>142,9<\/td>\n<td>285,8<\/td>\n<td>123,8<\/td>\n<td>83,1 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">6<\/th>\n<td>4<\/td>\n<td>142,9<\/td>\n<td>285,8<\/td>\n<td>130,2<\/td>\n<td>83,1 \u00b1 1,5<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed. L0, L, L2 and L1 refer to the dimensions in the corresponding component drawing. A dash at L1 means no offset, not zero.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-23026b76fc3f2a513 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_23026b76fc3f2a513\"><a aria-expanded=\"false\" aria-controls=\"23026b76fc3f2a513\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#23026b76fc3f2a513\" href=\"#23026b76fc3f2a513\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 reducers, series A<\/span><\/a><\/h3><\/div><div id=\"23026b76fc3f2a513\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_23026b76fc3f2a513\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 reducers, series A\">\n<table class=\"weiss-masstabelle\">\n<caption>Reducers to DIN 11865, series A (metric DN)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">from<\/th>\n<th scope=\"col\">to<\/th>\n<th scope=\"col\">L<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">DN08<\/th>\n<td>DN06<\/td>\n<td>38<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN10<\/th>\n<td>DN06<\/td>\n<td>38<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN10<\/th>\n<td>DN08<\/td>\n<td>38<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN15<\/th>\n<td>DN08<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN15<\/th>\n<td>DN10<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN20<\/th>\n<td>DN10<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN20<\/th>\n<td>DN15<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN25<\/th>\n<td>DN15<\/td>\n<td>70<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN25<\/th>\n<td>DN20<\/td>\n<td>70<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN32<\/th>\n<td>DN20<\/td>\n<td>80<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN32<\/th>\n<td>DN25<\/td>\n<td>80<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>DN20<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>DN25<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>DN32<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>DN25<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>DN32<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>DN40<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN65<\/th>\n<td>DN40<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN65<\/th>\n<td>DN50<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN80<\/th>\n<td>DN50<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN80<\/th>\n<td>DN65<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN100<\/th>\n<td>DN65<\/td>\n<td>135<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN100<\/th>\n<td>DN80<\/td>\n<td>135<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN125<\/th>\n<td>DN80<\/td>\n<td>150<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN125<\/th>\n<td>DN100<\/td>\n<td>150<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN150<\/th>\n<td>DN100<\/td>\n<td>170<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN150<\/th>\n<td>DN125<\/td>\n<td>170<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN200<\/th>\n<td>DN125<\/td>\n<td>230<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN200<\/th>\n<td>DN150<\/td>\n<td>230<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-07edf66b46b7ee032 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_07edf66b46b7ee032\"><a aria-expanded=\"false\" aria-controls=\"07edf66b46b7ee032\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#07edf66b46b7ee032\" href=\"#07edf66b46b7ee032\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 reducers, series B<\/span><\/a><\/h3><\/div><div id=\"07edf66b46b7ee032\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_07edf66b46b7ee032\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 reducers, series B\">\n<table class=\"weiss-masstabelle\">\n<caption>Reducers to DIN 11865, series B (ISO\/OD NW)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">from<\/th>\n<th scope=\"col\">to<\/th>\n<th scope=\"col\">L<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">NW13.5<\/th>\n<td>NW10.2<\/td>\n<td>38<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW17.2<\/th>\n<td>NW10.2<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW17.2<\/th>\n<td>NW13.5<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW21.3<\/th>\n<td>NW13.5<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW21.3<\/th>\n<td>NW17.2<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW26.9<\/th>\n<td>NW17.2<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW26.9<\/th>\n<td>NW21.3<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW33.7<\/th>\n<td>NW21.3<\/td>\n<td>70<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW33.7<\/th>\n<td>NW26.9<\/td>\n<td>70<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW42.4<\/th>\n<td>NW26.9<\/td>\n<td>80<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW42.4<\/th>\n<td>NW33.7<\/td>\n<td>80<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>NW26.9<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>NW33.7<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>NW42.4<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>NW33.7<\/td>\n<td>100<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>NW42.4<\/td>\n<td>100<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>NW48.3<\/td>\n<td>100<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW76.1<\/th>\n<td>NW48.3<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW76.1<\/th>\n<td>NW60.3<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW88.9<\/th>\n<td>NW60.3<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW88.9<\/th>\n<td>NW76.1<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW114.3<\/th>\n<td>NW76.1<\/td>\n<td>135<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW114.3<\/th>\n<td>NW88.9<\/td>\n<td>135<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW139.7<\/th>\n<td>NW88.9<\/td>\n<td>150<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW139.7<\/th>\n<td>NW114.3<\/td>\n<td>150<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW168.3<\/th>\n<td>NW114.3<\/td>\n<td>170<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW168.3<\/th>\n<td>NW139.7<\/td>\n<td>170<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW219.1<\/th>\n<td>NW139.7<\/td>\n<td>230<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW219.1<\/th>\n<td>NW168.3<\/td>\n<td>230<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-f92e5d286f184192d fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_f92e5d286f184192d\"><a aria-expanded=\"false\" aria-controls=\"f92e5d286f184192d\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#f92e5d286f184192d\" href=\"#f92e5d286f184192d\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 reducers, series C<\/span><\/a><\/h3><\/div><div id=\"f92e5d286f184192d\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_f92e5d286f184192d\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 reducers, series C\">\n<table class=\"weiss-masstabelle\">\n<caption>Reducers to DIN 11865, series C (inch)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">from<\/th>\n<th scope=\"col\">to<\/th>\n<th scope=\"col\">L<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">0.375<\/th>\n<td>0.25<\/td>\n<td>41,28<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.5<\/th>\n<td>0.25<\/td>\n<td>47,63<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.5<\/th>\n<td>0.375<\/td>\n<td>47,63<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.75<\/th>\n<td>0.375<\/td>\n<td>50,8<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.75<\/th>\n<td>0.5<\/td>\n<td>53,98<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1<\/th>\n<td>0.5<\/td>\n<td>63,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1<\/th>\n<td>0.75<\/td>\n<td>53,98<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1.5<\/th>\n<td>0.75<\/td>\n<td>76,2<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1.5<\/th>\n<td>1<\/td>\n<td>63,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2<\/th>\n<td>1<\/td>\n<td>85,73<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2<\/th>\n<td>1.5<\/td>\n<td>63,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2.5<\/th>\n<td>1.5<\/td>\n<td>85,73<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2.5<\/th>\n<td>2<\/td>\n<td>63,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>1.5<\/td>\n<td>107,95<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>2<\/td>\n<td>85,73<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>2.5<\/td>\n<td>66,68<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>2<\/td>\n<td>130,18<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>2.5<\/td>\n<td>107,95<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>3<\/td>\n<td>98,43<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">6<\/th>\n<td>3<\/td>\n<td>184,15<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">6<\/th>\n<td>4<\/td>\n<td>142,88<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-9 fusion_builder_column_inner_1_1 1_1 fusion-flex-column fusion-no-small-visibility\" style=\"--awb-padding-top:60px;--awb-padding-bottom:60px;--awb-padding-left:60px;--awb-bg-image:linear-gradient(270deg, hsla(var(--awb-color8-h),var(--awb-color8-s),var(--awb-color8-l),calc(var(--awb-color8-a) - 100%)) 0%,var(--awb-color8) 75%);;--awb-bg-position:center top;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:49px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:40px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper lazyload fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column fusion-column-has-bg-image\" data-bg-url=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2024\/04\/factory-hero-image-001.jpg\" data-bg=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2024\/04\/factory-hero-image-001.jpg\" data-bg-gradient=\"linear-gradient(270deg, hsla(var(--awb-color8-h),var(--awb-color8-s),var(--awb-color8-l),calc(var(--awb-color8-a) - 100%)) 0%,var(--awb-color8) 75%)\"><div class=\"fusion-title title fusion-title-8 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-right:250px;--awb-margin-bottom:10px;--awb-font-size:24px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;font-size:1em;--fontSize:24;line-height:1.4;\">Your fitting, clearly specified<\/h3><\/div><div class=\"fusion-text fusion-text-7 fusion-text-no-margin\" style=\"--awb-font-size:var(--awb-typography4-font-size);--awb-line-height:var(--awb-typography4-line-height);--awb-letter-spacing:var(--awb-typography4-letter-spacing);--awb-text-transform:var(--awb-typography4-text-transform);--awb-text-color:var(--awb-color1);--awb-margin-right:250px;--awb-margin-bottom:10px;\"><p>Send us design, dimensions, material, surface finish and quantity. Drawings and the certificates you need complete the technical clarification.<\/p>\n<\/div><div ><a class=\"fusion-button button-flat fusion-button-default-size button-custom fusion-button-default button-8 fusion-button-default-span fusion-button-default-type weiss-config-trigger weiss-norm-din11865\" style=\"--button_accent_color:var(--awb-color5);--button_border_color:var(--awb-color5);--button_accent_hover_color:var(--awb-color1);--button_border_hover_color:var(--awb-color4);--button_gradient_angle:180deg;--button_gradient_top_color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 100%));--button_gradient_bottom_color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 100%));--button_gradient_top_color_hover:hsla(var(--awb-color4-h),var(--awb-color4-s),var(--awb-color4-l),calc(var(--awb-color4-a) - 100%));--button_gradient_bottom_color_hover:hsla(var(--awb-color4-h),var(--awb-color4-s),var(--awb-color4-l),calc(var(--awb-color4-a) - 100%));--button_padding-right:0px;--button_padding-left:0px;\" target=\"_self\" data-hover=\"underline\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Open project configurator<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-5 awb-sticky awb-sticky-medium awb-sticky-large fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-padding-top:15px;--awb-padding-right:15px;--awb-padding-bottom:15px;--awb-padding-left:15px;--awb-bg-color:rgba(76,0,0,0);--awb-bg-color-hover:rgba(76,0,0,0);--awb-bg-size:cover;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-margin-top-small:60px;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;--awb-sticky-offset:160px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-dropshadow imageframe-6 hover-type-none\" style=\"-webkit-box-shadow: 8px 8px 12px var(--awb-color7);box-shadow: 8px 8px 12px var(--awb-color7);\"><img decoding=\"async\" width=\"1346\" height=\"1900\" title=\"Zertifikat-AD-2000-HP0-ISO-3834-2\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2.jpg\" alt class=\"lazyload img-responsive wp-image-3895\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271346%27%20height%3D%271900%27%20viewBox%3D%270%200%201346%201900%27%3E%3Crect%20width%3D%271346%27%20height%3D%271900%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2-200x282.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2-400x565.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2-600x847.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2-800x1129.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2-1200x1694.jpg 1200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2.jpg 1346w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/span><\/div><div class=\"fusion-separator fusion-full-width-sep\" style=\"align-self: center;margin-left: auto;margin-right: auto;margin-bottom:50px;width:100%;\"><\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-dropshadow imageframe-7 hover-type-none\" style=\"-webkit-box-shadow: 8px 8px 12px var(--awb-color7);box-shadow: 8px 8px 12px var(--awb-color7);\"><img decoding=\"async\" width=\"1346\" height=\"1900\" title=\"Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen.jpg\" alt class=\"lazyload img-responsive wp-image-2889\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271346%27%20height%3D%271900%27%20viewBox%3D%270%200%201346%201900%27%3E%3Crect%20width%3D%271346%27%20height%3D%271900%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen-200x282.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen-400x565.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen-600x847.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen-800x1129.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen-1200x1694.jpg 1200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen.jpg 1346w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/span><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-4 fusion-flex-container has-pattern-background has-mask-background weiss-seo-details nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:56px;--awb-padding-bottom:56px;--awb-padding-top-small:28px;--awb-padding-bottom-small:28px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-6 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-9 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-margin-bottom:20px;--awb-font-size:30px;\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;font-size:1em;--fontSize:30;line-height:1.3;\">Series A, B or C: which dimensions fit?<\/h2><\/div><div class=\"fusion-text fusion-text-8\"><p>The dimension series has to match the existing piping. Series A is metric by nominal size (DN), series B metric by tube outside diameter of the ISO series, series C in inches by tube outside diameter.<\/p>\n<p>Check tube outside diameter and wall thickness. A similar nominal size does not make the series interchangeable.<\/p>\n<p>If the assignment is unclear, add the actual dimensions and your specification to the technical inquiry.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-5 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--link_hover_color: hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) + 20%),var(--awb-color4-a));--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-top-small:35px;--awb-background-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 15%),var(--awb-color4-a));--awb-flex-wrap:wrap;\" ><div class=\"awb-background-pattern\" style=\"background-image:  url(data:image\/svg+xml;utf8,%3Csvg%20width%3D%2280%22%20height%3D%22120%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M40%200H0v30L40%200zM0%2060v30l40-30v30L0%20120h40V90l40%2030V90L40%2060V30l40%2030V30L40%200v30L0%2060z%22%20fill%3D%22rgba%280%2C0%2C0%2C0.3%29%22%2F%3E%3C%2Fsvg%3E);opacity: 0.2 ;background-size:100%;mix-blend-mode:normal;\"><\/div><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-7 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:60px;--awb-spacing-left-large:1.92%;--awb-width-medium:80%;--awb-order-medium:0;--awb-spacing-right-medium:2.4%;--awb-spacing-left-medium:2.4%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-10 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:var(--awb-color1);\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:50;line-height:1.3;\">Weld fittings to DIN 11865<\/h2><\/div><div class=\"fusion-title title fusion-title-11 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-bottom:30px;--awb-margin-bottom-small:30px;--awb-font-size:var(--awb-custom_typography_1-font-size);\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-custom_typography_1-font-family);font-weight:var(--awb-custom_typography_1-font-weight);font-style:var(--awb-custom_typography_1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-custom_typography_1-letter-spacing);text-transform:var(--awb-custom_typography_1-text-transform);--fontSize:40;line-height:var(--awb-custom_typography_1-line-height);\">Selecting design and connection<\/h3><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-8 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center fusion-animated\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\" data-animationType=\"fadeInUp\" data-animationDuration=\"1.0\" data-animationDelay=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-8 hover-type-none\"><img decoding=\"async\" width=\"1120\" height=\"1568\" alt=\"Vessel and connected piping of a water treatment plant\" title=\"weiss-wasseraufbereitung-verrohrung\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-wasseraufbereitung-verrohrung.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-wasseraufbereitung-verrohrung.jpg\" class=\"lazyload img-responsive wp-image-4326\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271120%27%20height%3D%271568%27%20viewBox%3D%270%200%201120%201568%27%3E%3Crect%20width%3D%271120%27%20height%3D%271568%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-wasseraufbereitung-verrohrung-200x280.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-wasseraufbereitung-verrohrung-400x560.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-wasseraufbereitung-verrohrung-600x840.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-wasseraufbereitung-verrohrung-800x1120.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-wasseraufbereitung-verrohrung.jpg 1120w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-9 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-left:60px;--awb-padding-top-medium:0px;--awb-padding-left-medium:40px;--awb-padding-top-small:60px;--awb-padding-bottom-small:0px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:0px;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:0px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-text fusion-text-9\" style=\"--awb-text-color:#ffffff;\"><p>The Weiss configurator offers separate selection paths for 45 and 90 degree bends, equal and reducing tees as well as concentric and eccentric reducers.<\/p>\n<p>In addition to the standard, the dimension series, size and specific geometry are required. Metric, ISO and inch data must not be treated as equivalent just because the nominal size is similar. Check the actual tube and connection dimensions.<\/p>\n<p>Weld ends are permanently integrated into the piping. Tri-Clamp connections belong to detachable connection technology. Please state the type of connection you need explicitly. Include any special standards or deviating specifications in full in your inquiry so that we can review them separately.<\/p>\n<\/div><div class=\"fusion-separator\" style=\"align-self: flex-start;margin-right:auto;flex-grow:10;margin-top:10px;margin-bottom:30px;width:100%;max-width:140px;\"><div class=\"fusion-separator-border sep-single sep-solid\" style=\"--awb-height:20px;--awb-amount:20px;--awb-sep-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) + 15%),var(--awb-color4-a));border-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) + 15%),var(--awb-color4-a));border-top-width:6px;\"><\/div><\/div><div class=\"fusion-text fusion-text-10 fusion-text-no-margin\" style=\"--awb-font-size:var(--awb-typography2-font-size);--awb-line-height:var(--awb-typography2-line-height);--awb-letter-spacing:var(--awb-typography2-letter-spacing);--awb-text-transform:var(--awb-typography2-text-transform);--awb-text-color:var(--awb-color1);--awb-margin-bottom:0px;--awb-text-font-family:var(--awb-typography2-font-family);--awb-text-font-weight:var(--awb-typography2-font-weight);--awb-text-font-style:var(--awb-typography2-font-style);\"><p>For these designs<\/p>\n<\/div><ul style=\"--awb-size:17px;--awb-margin-bottom:20px;--awb-iconcolor:var(--awb-color5);--awb-textcolor:var(--awb-color2);--awb-line-height:28.9px;--awb-icon-width:28.9px;--awb-icon-height:28.9px;--awb-icon-margin:11.9px;--awb-content-margin:40.8px;\" class=\"fusion-checklist fusion-checklist-1 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Tank and vessel construction<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Plant and system construction<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Process equipment and mechanical engineering<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Industrial piping<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Stainless steel assemblies to drawing<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Technical clarification for your field of use<\/p>\n<\/div><\/li><\/ul><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-10 fusion_builder_column_1_2 1_2 fusion-flex-column\" style=\"--awb-padding-bottom:15px;--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:90px;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-12 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-bottom:30px;--awb-margin-bottom-small:30px;--awb-font-size:var(--awb-custom_typography_1-font-size);\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-custom_typography_1-font-family);font-weight:var(--awb-custom_typography_1-font-weight);font-style:var(--awb-custom_typography_1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-custom_typography_1-letter-spacing);text-transform:var(--awb-custom_typography_1-text-transform);--fontSize:40;line-height:var(--awb-custom_typography_1-line-height);\">Stainless steel for your requirements<\/h2><\/div><div class=\"fusion-text fusion-text-11\" style=\"--awb-text-color:#ffffff;\"><p>The fittings configurator offers the stainless steel materials 1.4404 and 1.4435. The requirements of your plant are decisive: medium, cleaning, temperature and the certificates intended.<\/p>\n<p>Please state the material number you need as clearly as possible. We review further materials and special designs on the basis of your drawing or specification.<\/p>\n<\/div><div ><a class=\"fusion-button button-flat fusion-button-default-size button-custom fusion-button-default button-9 fusion-button-default-span fusion-button-default-type weiss-config-trigger weiss-norm-din11865 fusion-has-button-gradient\" style=\"--button_accent_color:var(--awb-color1);--button_accent_hover_color:var(--awb-custom_color_1);--button_border_hover_color:var(--awb-custom_color_1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button_gradient_start:92%;--button_gradient_end:92%;--button_gradient_top_color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 100%));--button_gradient_bottom_color:var(--awb-color5);--button_gradient_top_color_hover:var(--awb-color5);--button_gradient_bottom_color_hover:var(--awb-color5);--button_padding-top:20px;--button_padding-right:36px;--button_padding-bottom:22px;--button_padding-left:36px;--button_margin-bottom:10px;\" target=\"_self\" data-hover=\"bg_slide_left\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Open project configurator<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-11 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-no-small-visibility fusion-animated\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:100px;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:-55px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\" data-animationType=\"fadeInDown\" data-animationDuration=\"1.0\" data-animationDelay=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-max-width:400px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-9 hover-type-none\"><img decoding=\"async\" width=\"800\" height=\"876\" alt=\"Detail of a stainless steel vessel lid with opening and connection ferrule\" title=\"weiss-edelstahl-oberfla\u0308che-beha\u0308lterdeckel\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-oberflaeche-behaelterdeckel.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-oberflaeche-behaelterdeckel.jpg\" class=\"lazyload img-responsive wp-image-4288\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27800%27%20height%3D%27876%27%20viewBox%3D%270%200%20800%20876%27%3E%3Crect%20width%3D%27800%27%20height%3D%27876%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-oberflaeche-behaelterdeckel-200x219.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-oberflaeche-behaelterdeckel-400x438.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-oberflaeche-behaelterdeckel-600x657.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-oberflaeche-behaelterdeckel.jpg 800w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-6 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:0px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-margin-top:80px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-12 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:30px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-13 fusion-sep-none fusion-title-center fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:var(--awb-color8);\"><h2 class=\"fusion-title-heading title-heading-center fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:50;line-height:1.3;\">In-house production for your custom parts<\/h2><\/div><div class=\"fusion-text fusion-text-12\" style=\"--awb-content-alignment:center;\"><p>Weld fittings and related stainless steel assemblies may require additional machining steps. Weiss Apparatebau combines welding and machining under one roof. Which processes suit your component is clarified from the drawing and the agreed requirements.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-7 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:0px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-margin-top:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-13 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-aspect-ratio: 100 \/ 85;--awb-object-position:0% 45%;--awb-mask-url: url(https:\/\/weiss-apparatebau.de\/wp-content\/plugins\/fusion-builder\/\/assets\/images\/masks\/mask-16.svg);--awb-mask-size: 100%;--awb-mask-position: bottom left;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-10 hover-type-none has-mask has-aspect-ratio\"><img decoding=\"async\" width=\"1400\" height=\"1050\" title=\"Weiss Zerspanung CNC-Bettfr\u00e4szentrum REIDEN BFR 1\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1.jpg\" class=\"lazyload img-responsive wp-image-3805 img-with-aspect-ratio\" data-parent-fit=\"cover\" data-parent-container=\".fusion-image-element\" alt srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271400%27%20height%3D%271050%27%20viewBox%3D%270%200%201400%201050%27%3E%3Crect%20width%3D%271400%27%20height%3D%271050%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1-1200x900.jpg 1200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1.jpg 1400w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-14 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-right:40px;--awb-padding-left:40px;--awb-padding-top-small:0px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-margin-top-small:0px;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-14 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom:30px;--awb-margin-bottom-small:40px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:40;line-height:1.4;\">CNC milling for stainless steel components<\/h3><\/div><ul style=\"--awb-size:17px;--awb-margin-bottom:60px;--awb-iconcolor:var(--awb-color5);--awb-line-height:28.9px;--awb-icon-width:28.9px;--awb-icon-height:28.9px;--awb-icon-margin:11.9px;--awb-content-margin:40.8px;\" class=\"fusion-checklist fusion-checklist-2 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>CNC machining for components and assemblies to drawing.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Machined faces and connection geometries are agreed on the basis of your technical requirements.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>For custom parts, tolerances, datum edges and the later installed position count as much as the outside dimensions. Complete drawings help to clarify these requirements before production.<\/p>\n<\/div><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-8 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:100px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-margin-top:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-15 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-mask-url: url(https:\/\/weiss-apparatebau.de\/wp-content\/plugins\/fusion-builder\/\/assets\/images\/masks\/mask-16.svg);--awb-mask-size: 100%;--awb-mask-position: bottom left;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-11 hover-type-none has-mask\"><img decoding=\"async\" width=\"1200\" height=\"600\" alt=\"Metal reactor component with machined cover plate and bracket\" title=\"weiss-reaktor-bauteil\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-reaktor-bauteil.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-reaktor-bauteil.jpg\" class=\"lazyload img-responsive wp-image-4310\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%27600%27%20viewBox%3D%270%200%201200%20600%27%3E%3Crect%20width%3D%271200%27%20height%3D%27600%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-reaktor-bauteil-200x100.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-reaktor-bauteil-400x200.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-reaktor-bauteil-600x300.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-reaktor-bauteil-800x400.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-reaktor-bauteil.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-16 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-right:40px;--awb-padding-left:40px;--awb-padding-top-small:0px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-margin-top-small:0px;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-15 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom:30px;--awb-margin-bottom-small:40px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:40;line-height:1.4;\">Jigs and custom components<\/h3><\/div><ul style=\"--awb-size:17px;--awb-margin-bottom:60px;--awb-iconcolor:var(--awb-color5);--awb-line-height:28.9px;--awb-icon-width:28.9px;--awb-icon-height:28.9px;--awb-icon-margin:11.9px;--awb-content-margin:40.8px;\" class=\"fusion-checklist fusion-checklist-3 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Machining for jigs, tooling and custom stainless steel components.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Machining is matched to geometry, material and intended use.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Whether a single part or a repeat design: tell us the quantity you need and send the documents you have. That lets us review the scope of production and the machining steps required.<\/p>\n<\/div><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-9 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:0px;--awb-padding-bottom:100px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-margin-top:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-17 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-mask-url: url(https:\/\/weiss-apparatebau.de\/wp-content\/plugins\/fusion-builder\/\/assets\/images\/masks\/mask-16.svg);--awb-mask-size: 100%;--awb-mask-position: bottom left;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-12 hover-type-none has-mask\"><img decoding=\"async\" width=\"1200\" height=\"1020\" alt=\"Two employees at a lathe with a clamped workpiece\" title=\"weiss-edelstahlbearbeitung-drehmaschine\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbearbeitung-drehmaschine.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbearbeitung-drehmaschine.jpg\" class=\"lazyload img-responsive wp-image-4292\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%271020%27%20viewBox%3D%270%200%201200%201020%27%3E%3Crect%20width%3D%271200%27%20height%3D%271020%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbearbeitung-drehmaschine-200x170.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbearbeitung-drehmaschine-400x340.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbearbeitung-drehmaschine-600x510.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbearbeitung-drehmaschine-800x680.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbearbeitung-drehmaschine.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-18 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-right:40px;--awb-padding-left:40px;--awb-padding-top-small:0px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-margin-top-small:0px;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-16 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom:30px;--awb-margin-bottom-small:40px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:40;line-height:1.4;\">Turning of stainless steel components<\/h3><\/div><ul style=\"--awb-size:17px;--awb-margin-bottom:60px;--awb-iconcolor:var(--awb-color5);--awb-line-height:28.9px;--awb-icon-width:28.9px;--awb-icon-height:28.9px;--awb-icon-margin:11.9px;--awb-content-margin:40.8px;\" class=\"fusion-checklist fusion-checklist-4 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Turning complements the production of stainless steel parts and assemblies.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Diameters, lengths, connection dimensions and tolerances belong in your specification. Additional machining and special geometries are agreed project by project.<\/p>\n<\/div><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-10 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:0px;--awb-padding-bottom:100px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-margin-top:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-19 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-aspect-ratio: 100 \/ 85;--awb-object-position:0% 45%;--awb-mask-url: url(https:\/\/weiss-apparatebau.de\/wp-content\/plugins\/fusion-builder\/\/assets\/images\/masks\/mask-16.svg);--awb-mask-size: 100%;--awb-mask-position: bottom left;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-13 hover-type-none has-mask has-aspect-ratio\"><img decoding=\"async\" width=\"1400\" height=\"1050\" title=\"Weiss Zerspanung L+Z-Drehmaschine MEUSER\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser.jpg\" class=\"lazyload img-responsive wp-image-3811 img-with-aspect-ratio\" data-parent-fit=\"cover\" data-parent-container=\".fusion-image-element\" alt srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271400%27%20height%3D%271050%27%20viewBox%3D%270%200%201400%201050%27%3E%3Crect%20width%3D%271400%27%20height%3D%271050%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser-1200x900.jpg 1200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser.jpg 1400w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-20 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-right:40px;--awb-padding-left:40px;--awb-padding-top-small:0px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-margin-top-small:0px;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-17 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom:30px;--awb-margin-bottom-small:40px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:40;line-height:1.4;\">Clarifying special dimensions<\/h3><\/div><ul style=\"--awb-size:17px;--awb-margin-bottom:60px;--awb-iconcolor:var(--awb-color5);--awb-line-height:28.9px;--awb-icon-width:28.9px;--awb-icon-height:28.9px;--awb-icon-margin:11.9px;--awb-content-margin:40.8px;\" class=\"fusion-checklist fusion-checklist-5 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Drawing, material, surface finish and quantity form the basis of your inquiry.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>A selection in the configurator does not replace the clarification of a custom-made part. For deviating dimensions or special installation conditions we review the technical implementation on the basis of your documents.<\/p>\n<\/div><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-11 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:80px;--awb-padding-bottom:90px;--awb-padding-top-small:35px;--awb-padding-bottom-small:35px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-21 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:30px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-18 fusion-sep-none fusion-title-center fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:var(--awb-color8);\"><h2 class=\"fusion-title-heading title-heading-center fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:50;line-height:1.3;\">Insights into stainless steel production<\/h2><\/div><div class=\"fusion-text fusion-text-13\" style=\"--awb-content-alignment:center;\"><p>The images show work already completed in production at Weiss Apparatebau. They give an insight into how we machine stainless steel components and assemblies. The design of your fitting is agreed on the basis of your requirements.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-22 fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:14px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-margin-bottom:20px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-14 hover-type-zoomin\"><a href=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung.jpg\" class=\"fusion-lightbox\" data-rel=\"iLightbox[weiss-maschinen]\" data-title=\"weiss-edelstahlbeha\u0308lter-fertigung\" title=\"weiss-edelstahlbeha\u0308lter-fertigung\"><img decoding=\"async\" width=\"1200\" height=\"900\" alt=\"Several stainless steel vessels of different sizes in the Weiss Apparatebau workshop\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung.jpg\" class=\"lazyload img-responsive wp-image-4294\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%27900%27%20viewBox%3D%270%200%201200%20900%27%3E%3Crect%20width%3D%271200%27%20height%3D%27900%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/a><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-23 fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:14px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-margin-bottom:20px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-15 hover-type-zoomin\"><a href=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung.jpg\" class=\"fusion-lightbox\" data-rel=\"iLightbox[weiss-maschinen]\" data-title=\"weiss-edelstahl-rohrbogen-flanschverbindung\" title=\"weiss-edelstahl-rohrbogen-flanschverbindung\"><img decoding=\"async\" width=\"960\" height=\"720\" alt=\"Stainless steel piping with bend, flange connections and reducer\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung.jpg\" class=\"lazyload img-responsive wp-image-4290\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27960%27%20height%3D%27720%27%20viewBox%3D%270%200%20960%20720%27%3E%3Crect%20width%3D%27960%27%20height%3D%27720%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung.jpg 960w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/a><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-24 fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:14px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-margin-bottom:20px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-16 hover-type-zoomin\"><a href=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen.jpg\" class=\"fusion-lightbox\" data-rel=\"iLightbox[weiss-maschinen]\" data-title=\"weiss-schwei\u00dfverbindungen-rohrstutzen\" title=\"weiss-schwei\u00dfverbindungen-rohrstutzen\"><img decoding=\"async\" width=\"1200\" height=\"900\" alt=\"Close-up of weld seams on pipe ferrules and a flange connection\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen.jpg\" class=\"lazyload img-responsive wp-image-4316\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%27900%27%20viewBox%3D%270%200%201200%20900%27%3E%3Crect%20width%3D%271200%27%20height%3D%27900%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/a><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-25 fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:14px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-margin-bottom:20px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-17 hover-type-zoomin\"><a href=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar.jpg\" class=\"fusion-lightbox\" data-rel=\"iLightbox[weiss-maschinen]\" data-title=\"weiss-edelstahlbeha\u0308lter-paar\" title=\"weiss-edelstahlbeha\u0308lter-paar\"><img decoding=\"async\" width=\"1200\" height=\"900\" alt=\"Two stainless steel vessels with closed lids and side connections\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar.jpg\" class=\"lazyload img-responsive wp-image-4298\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%27900%27%20viewBox%3D%270%200%201200%20900%27%3E%3Crect%20width%3D%271200%27%20height%3D%27900%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/a><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-26 fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:14px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-margin-bottom:20px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-18 hover-type-zoomin\"><a href=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss.jpg\" class=\"fusion-lightbox\" data-rel=\"iLightbox[weiss-maschinen]\" data-title=\"weiss-liegender-beha\u0308lter-flanschanschluss\" title=\"weiss-liegender-beha\u0308lter-flanschanschluss\"><img decoding=\"async\" width=\"1200\" height=\"900\" alt=\"Horizontal vessel with a large flange connection and bent piping\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss.jpg\" class=\"lazyload img-responsive wp-image-4300\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%27900%27%20viewBox%3D%270%200%201200%20900%27%3E%3Crect%20width%3D%271200%27%20height%3D%27900%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/a><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-27 fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:14px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-margin-bottom:20px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-19 hover-type-zoomin\"><a href=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht.jpg\" class=\"fusion-lightbox\" data-rel=\"iLightbox[weiss-maschinen]\" data-title=\"weiss-teiganmischbeha\u0308lter-innenansicht\" title=\"weiss-teiganmischbeha\u0308lter-innenansicht\"><img decoding=\"async\" width=\"1200\" height=\"900\" alt=\"Interior view of a dough mixing vessel with internals\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht.jpg\" class=\"lazyload img-responsive wp-image-4320\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%27900%27%20viewBox%3D%270%200%201200%20900%27%3E%3Crect%20width%3D%271200%27%20height%3D%27900%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/a><\/span><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-12 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:120px;--awb-padding-bottom:120px;--awb-padding-top-small:35px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1200px + 0px );margin-left: calc(-0px \/ 2 );margin-right: calc(-0px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-28 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-stretch fusion-animated\" style=\"--awb-padding-top-small:0px;--awb-padding-bottom-small:0px;--awb-bg-position:center center;--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:0px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:0px;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:0px;--awb-spacing-left-medium:0px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:0px;--awb-spacing-left-small:0px;\" data-animationType=\"fadeInUp\" data-animationDuration=\"1.0\" data-animationDelay=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-20 hover-type-none\"><img decoding=\"async\" width=\"900\" height=\"1200\" alt=\"Process unit on a frame with pipe connections and pressure gauges\" title=\"weiss-apparat-rohranschlu\u0308sse\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparat-rohranschluesse.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparat-rohranschluesse.jpg\" class=\"lazyload img-responsive wp-image-4268\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27900%27%20height%3D%271200%27%20viewBox%3D%270%200%20900%201200%27%3E%3Crect%20width%3D%27900%27%20height%3D%271200%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparat-rohranschluesse-200x267.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparat-rohranschluesse-400x533.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparat-rohranschluesse-600x800.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparat-rohranschluesse-800x1067.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparat-rohranschluesse.jpg 900w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-29 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-stretch fusion-animated\" style=\"--awb-padding-top:100px;--awb-padding-right:80px;--awb-padding-bottom:100px;--awb-padding-left:80px;--awb-bg-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 20%),var(--awb-color4-a));--awb-bg-color-hover:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 20%),var(--awb-color4-a));--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:0px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:0px;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:0px;--awb-spacing-left-medium:0px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:0px;--awb-spacing-left-small:0px;\" data-animationType=\"fadeInDown\" data-animationDuration=\"1.0\" data-animationDelay=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-text fusion-text-14 fusion-text-no-margin\" style=\"--awb-font-size:var(--awb-typography5-font-size);--awb-line-height:var(--awb-typography5-line-height);--awb-letter-spacing:var(--awb-typography5-letter-spacing);--awb-text-transform:var(--awb-typography5-text-transform);--awb-text-color:var(--awb-color5);--awb-margin-bottom:20px;--awb-text-font-family:var(--awb-typography5-font-family);--awb-text-font-weight:var(--awb-typography5-font-weight);--awb-text-font-style:var(--awb-typography5-font-style);\"><p>From component to assembly<\/p>\n<\/div><div class=\"fusion-title title fusion-title-19 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-bottom:30px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:40;line-height:1.4;\">Combining welding and machining<\/h3><\/div><div class=\"fusion-text fusion-text-15 fusion-text-no-margin\" style=\"--awb-text-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 30%));--awb-margin-bottom:60px;\"><p>Do you need more than a single fitting? We also agree components and assemblies to drawing or technical specification with you. In-house welding and machining allow connected production sequences. Scope and certificates are agreed for each project.<\/p>\n<\/div><div ><a class=\"fusion-button button-flat fusion-button-default-size button-default fusion-button-default button-10 fusion-button-default-span fusion-button-default-type\" style=\"--button_font_size:18px;--button_padding-top:22px;--button_padding-bottom:24px;--button_margin-bottom:10px;\" target=\"_self\" data-hover=\"bg_slide_left\" href=\"#awb-open-oc__2785\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Discuss a custom part<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-13 fusion-flex-container has-pattern-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:40px;--awb-padding-bottom:40px;--awb-background-color:var(--awb-custom_color_1);--awb-flex-wrap:wrap;\" ><div class=\"awb-background-pattern\" style=\"background-image:  url(data:image\/svg+xml;utf8,%3Csvg%20width%3D%22100%22%20height%3D%22100%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M0%200v100h1v-1l99-99H83L1%2082V0H0zM98.178%2085L100%2083v17H83l15.178-15z%22%20fill%3D%22rgba%280%2C0%2C0%2C0.3%29%22%2F%3E%3Cpath%20d%3D%22M84%2099H1v1h83v-1z%22%20fill%3D%22rgba%280%2C0%2C0%2C0.3%29%22%2F%3E%3C%2Fsvg%3E);background-size:50%;\"><\/div><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-30 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top-medium:10vw;--awb-padding-bottom-medium:10vw;--awb-padding-top-small:100px;--awb-padding-bottom-small:100px;--awb-bg-position:center center;--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"awb-column__background-slider\" ><div class=\"awb-background-slider\" data-type=\"column\" data-loop=\"yes\" data-animation=\"fade\" data-slideshow-speed=\"5000\" data-animation-speed=\"800\" data-direction=\"up\" style=\"--awb-image-position:46% 50%;\"><div class=\"swiper-wrapper\"><div class=\"swiper-slide\"><\/div><div class=\"swiper-slide\"><\/div><div class=\"swiper-slide\"><\/div><\/div><\/div><\/div><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"awb-column__content\"><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-21 hover-type-none\"><img decoding=\"async\" width=\"2400\" height=\"1600\" alt=\"Two employees discussing a technical drawing in production\" title=\"weiss-apparatebau-zeichnung-abstimmung\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung.jpg\" class=\"lazyload img-responsive wp-image-4280\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%272400%27%20height%3D%271600%27%20viewBox%3D%270%200%202400%201600%27%3E%3Crect%20width%3D%272400%27%20height%3D%271600%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung-200x133.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung-400x267.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung-600x400.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung-800x533.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung-1200x800.jpg 1200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung.jpg 2400w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 1200px\" \/><\/span><\/div><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-31 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top:40px;--awb-padding-bottom:40px;--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-20 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:#ffffff;--awb-margin-bottom:40px;--awb-margin-bottom-small:40px;--awb-font-size:50px;\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;font-size:1em;letter-spacing:-0.005em;--fontSize:50;line-height:1.2;\">How to inquire about your weld fittings<\/h2><\/div><div class=\"fusion-title title fusion-title-21 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-bottom:30px;--awb-margin-bottom-small:30px;--awb-font-size:var(--awb-custom_typography_1-font-size);\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-custom_typography_1-font-family);font-weight:var(--awb-custom_typography_1-font-weight);font-style:var(--awb-custom_typography_1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-custom_typography_1-letter-spacing);text-transform:var(--awb-custom_typography_1-text-transform);--fontSize:40;line-height:var(--awb-custom_typography_1-line-height);\">Select. Complete. Clarify technically.<\/h3><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-10 fusion_builder_column_inner_1_4 1_4 fusion-flex-column fusion-animated\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:0%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:0%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\" data-animationType=\"fadeInLeft\" data-animationDuration=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-separator\" style=\"align-self: flex-start;margin-right:auto;margin-bottom:15px;width:100%;max-width:100px;\"><div class=\"fusion-separator-border sep-single sep-solid\" style=\"--awb-height:20px;--awb-amount:20px;--awb-sep-color:rgba(129,197,228,0.5);border-color:rgba(129,197,228,0.5);border-top-width:1px;\"><\/div><\/div><div class=\"fusion-text fusion-text-16 fusion-text-no-margin\" style=\"--awb-font-size:24px;--awb-line-height:1.4;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography2-text-transform);--awb-text-color:var(--awb-color1);--awb-margin-bottom:5px;\"><p>01. Select design and dimensions<\/p>\n<\/div><div class=\"fusion-text fusion-text-17\" style=\"--awb-font-size:17px;--awb-line-height:1.6;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography4-text-transform);--awb-text-color:var(--awb-color3);\"><p>Start with a bend, tee or reducer. Select the dimension series and size to match your piping. For reducing components both connection sizes are required. Note any deviating dimensions and special installation conditions.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-11 fusion_builder_column_inner_1_4 1_4 fusion-flex-column fusion-animated\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:0%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:0%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\" data-animationType=\"fadeInLeft\" data-animationDuration=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-separator\" style=\"align-self: flex-start;margin-right:auto;margin-bottom:15px;width:100%;max-width:100px;\"><div class=\"fusion-separator-border sep-single sep-solid\" style=\"--awb-height:20px;--awb-amount:20px;--awb-sep-color:rgba(129,197,228,0.5);border-color:rgba(129,197,228,0.5);border-top-width:1px;\"><\/div><\/div><div class=\"fusion-text fusion-text-18 fusion-text-no-margin\" style=\"--awb-font-size:24px;--awb-line-height:1.4;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography2-text-transform);--awb-text-color:var(--awb-color1);--awb-margin-bottom:5px;\"><p>02. Define the design<\/p>\n<\/div><div class=\"fusion-text fusion-text-19\" style=\"--awb-font-size:17px;--awb-line-height:1.6;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography4-text-transform);--awb-text-color:var(--awb-color3);\"><p>Add material, surface finish and quantity. The configurator offers 1.4404 and 1.4435 together with the surface finishes provided for each. The inspection and material certificates you want should already be part of your inquiry.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-12 fusion_builder_column_inner_1_4 1_4 fusion-flex-column fusion-animated\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:0%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:0%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\" data-animationType=\"fadeInLeft\" data-animationDuration=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-separator\" style=\"align-self: flex-start;margin-right:auto;margin-bottom:15px;width:100%;max-width:100px;\"><div class=\"fusion-separator-border sep-single sep-solid\" style=\"--awb-height:20px;--awb-amount:20px;--awb-sep-color:rgba(129,197,228,0.5);border-color:rgba(129,197,228,0.5);border-top-width:1px;\"><\/div><\/div><div class=\"fusion-text fusion-text-20 fusion-text-no-margin\" style=\"--awb-font-size:24px;--awb-line-height:1.4;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography2-text-transform);--awb-text-color:var(--awb-color1);--awb-margin-bottom:5px;\"><p>03. Send your documents<\/p>\n<\/div><div class=\"fusion-text fusion-text-21\" style=\"--awb-font-size:17px;--awb-line-height:1.6;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography4-text-transform);--awb-text-color:var(--awb-color3);\"><p>Transfer the configuration into your inquiry and add drawings or technical specifications. Describe special dimensions and additional requirements explicitly. That way purchasing and engineering work from the same details.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-13 fusion_builder_column_inner_1_4 1_4 fusion-flex-column fusion-animated\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:0%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:0%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\" data-animationType=\"fadeInLeft\" data-animationDuration=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-separator\" style=\"align-self: flex-start;margin-right:auto;margin-bottom:15px;width:100%;max-width:100px;\"><div class=\"fusion-separator-border sep-single sep-solid\" style=\"--awb-height:20px;--awb-amount:20px;--awb-sep-color:rgba(129,197,228,0.5);border-color:rgba(129,197,228,0.5);border-top-width:1px;\"><\/div><\/div><div class=\"fusion-text fusion-text-22 fusion-text-no-margin\" style=\"--awb-font-size:24px;--awb-line-height:1.4;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography2-text-transform);--awb-text-color:var(--awb-color1);--awb-margin-bottom:5px;\"><p>04. Confirm the design<\/p>\n<\/div><div class=\"fusion-text fusion-text-23\" style=\"--awb-font-size:17px;--awb-line-height:1.6;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography4-text-transform);--awb-text-color:var(--awb-color3);\"><p>We review the combination requested and clarify open technical points with you. The specific design, availability, documentation and terms are then confirmed for your requirements.<\/p>\n<\/div><\/div><\/div><\/div><div ><a class=\"fusion-button button-flat fusion-button-default-size button-custom fusion-button-default button-11 fusion-button-default-span fusion-button-default-type weiss-config-trigger weiss-norm-din11865 fusion-has-button-gradient\" style=\"--button_accent_color:var(--awb-color1);--button_accent_hover_color:var(--awb-custom_color_1);--button_border_hover_color:var(--awb-custom_color_1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button_gradient_start:92%;--button_gradient_end:92%;--button_gradient_top_color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 100%));--button_gradient_bottom_color:var(--awb-color5);--button_gradient_top_color_hover:var(--awb-color5);--button_gradient_bottom_color_hover:var(--awb-color5);--button_padding-top:20px;--button_padding-right:36px;--button_padding-bottom:22px;--button_padding-left:36px;--button_margin-bottom:10px;\" target=\"_self\" data-hover=\"bg_slide_left\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Open project configurator<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-14 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:100px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-margin-top:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-32 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-mask-url: url(https:\/\/weiss-apparatebau.de\/wp-content\/plugins\/fusion-builder\/\/assets\/images\/masks\/mask-16.svg);--awb-mask-size: 100%;--awb-mask-position: bottom left;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-22 hover-type-none has-mask\"><img decoding=\"async\" width=\"1200\" height=\"800\" alt=\"Two employees applying a measuring device to the wall of a vessel\" title=\"weiss-beha\u0308lter-messung\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-behaelter-messung.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-behaelter-messung.jpg\" class=\"lazyload img-responsive wp-image-4282\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%27800%27%20viewBox%3D%270%200%201200%20800%27%3E%3Crect%20width%3D%271200%27%20height%3D%27800%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-behaelter-messung-200x133.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-behaelter-messung-400x267.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-behaelter-messung-600x400.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-behaelter-messung-800x533.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-behaelter-messung.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-33 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-right:40px;--awb-padding-left:40px;--awb-padding-top-small:0px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-margin-top-small:0px;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-22 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom:30px;--awb-margin-bottom-small:40px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:40;line-height:1.4;\">Keeping surface finishes and certificates in mind<\/h3><\/div><div class=\"fusion-text fusion-text-24 fusion-text-no-margin\" style=\"--awb-margin-bottom:50px;\"><p>The surface finish has to suit the component and the requirements of your plant. The configurator distinguishes between mechanically polished and electropolished designs among others. Pickling, passivating or grinding may be added depending on component and order.<\/p>\n<p>Please state required roughness values, inspection certificates and material certificates in your inquiry if possible. The certificate held by Weiss Apparatebau for AD 2000 HP0 and DIN EN ISO 3834-2 refers to the stated scope of fabrication. It does not replace the certificates agreed for your specific component.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-15 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-sizes-top:1px;--awb-border-sizes-bottom:1px;--awb-border-sizes-left:0px;--awb-border-sizes-right:0px;--awb-border-color:var(--awb-custom_color_1);--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:100px;--awb-padding-right-small:60px;--awb-padding-bottom-small:35px;--awb-padding-left-small:60px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-34 fusion_builder_column_1_4 1_4 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:7.68%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:7.68%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-23 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 10%),var(--awb-color4-a));--awb-margin-bottom:5px;--awb-font-size:65px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-typography1-font-family);font-weight:var(--awb-typography1-font-weight);font-style:var(--awb-typography1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-typography1-letter-spacing);text-transform:var(--awb-typography1-text-transform);--fontSize:65;line-height:var(--awb-typography1-line-height);\">DIN 11865<\/h3><\/div><div class=\"fusion-text fusion-text-25 fusion-text-no-margin\" style=\"--awb-font-size:19px;--awb-text-transform:none;--awb-margin-bottom:0px;\"><p>Selection basis for weld fittings<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-35 fusion_builder_column_1_4 1_4 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:7.68%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:7.68%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-24 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 10%),var(--awb-color4-a));--awb-margin-bottom:5px;--awb-font-size:65px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-typography1-font-family);font-weight:var(--awb-typography1-font-weight);font-style:var(--awb-typography1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-typography1-letter-spacing);text-transform:var(--awb-typography1-text-transform);--fontSize:65;line-height:var(--awb-typography1-line-height);\">1.4404<\/h3><\/div><div class=\"fusion-text fusion-text-26 fusion-text-no-margin\" style=\"--awb-font-size:19px;--awb-text-transform:none;--awb-margin-bottom:0px;\"><p>Stainless steel material in the configurator<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-36 fusion_builder_column_1_4 1_4 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:7.68%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:7.68%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-25 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 10%),var(--awb-color4-a));--awb-margin-bottom:5px;--awb-font-size:65px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-typography1-font-family);font-weight:var(--awb-typography1-font-weight);font-style:var(--awb-typography1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-typography1-letter-spacing);text-transform:var(--awb-typography1-text-transform);--fontSize:65;line-height:var(--awb-typography1-line-height);\">1.4435<\/h3><\/div><div class=\"fusion-text fusion-text-27 fusion-text-no-margin\" style=\"--awb-font-size:19px;--awb-text-transform:capitalize;--awb-margin-bottom:0px;\"><p>Further material choice in the configurator<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-37 fusion_builder_column_1_4 1_4 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:7.68%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:7.68%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-26 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 10%),var(--awb-color4-a));--awb-margin-bottom:5px;--awb-font-size:65px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-typography1-font-family);font-weight:var(--awb-typography1-font-weight);font-style:var(--awb-typography1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-typography1-letter-spacing);text-transform:var(--awb-typography1-text-transform);--fontSize:65;line-height:var(--awb-typography1-line-height);\">OEM<\/h3><\/div><div class=\"fusion-text fusion-text-28 fusion-text-no-margin\" style=\"--awb-font-size:19px;--awb-text-transform:capitalize;--awb-margin-bottom:0px;\"><p>For tank, plant and vessel manufacturers<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-16 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:100px;--awb-padding-top-small:35px;--awb-padding-bottom-small:37px;--awb-background-color:hsla(var(--awb-custom_color_1-h),var(--awb-custom_color_1-s),calc(var(--awb-custom_color_1-l) + 2%),var(--awb-custom_color_1-a));--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-center fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-38 fusion_builder_column_3_5 3_5 fusion-flex-column\" style=\"--awb-padding-right:20px;--awb-padding-right-small:0px;--awb-bg-size:cover;--awb-width-large:60%;--awb-spacing-right-large:3.2%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.2%;--awb-width-medium:60%;--awb-order-medium:0;--awb-spacing-right-medium:3.2%;--awb-spacing-left-medium:3.2%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-27 fusion-sep-none fusion-title-text fusion-title-size-two\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:50;line-height:1.3;\">Frequently asked questions about weld fittings<\/h2><\/div><div class=\"fusion-text fusion-text-29 fusion-text-no-margin\" style=\"--awb-margin-bottom:40px;\"><p>Designs, materials, special dimensions and inquiries: answers for purchasing and engineering.<\/p>\n<\/div><div class=\"accordian fusion-accordian\" style=\"--awb-border-size:1px;--awb-icon-size:16px;--awb-content-font-size:var(--awb-typography4-font-size);--awb-icon-alignment:left;--awb-hover-color:var(--awb-color2);--awb-border-color:var(--awb-color3);--awb-background-color:var(--awb-color1);--awb-divider-color:var(--awb-color3);--awb-divider-hover-color:var(--awb-color3);--awb-icon-color:var(--awb-color1);--awb-title-color:var(--awb-color8);--awb-content-color:var(--awb-color8);--awb-icon-box-color:var(--awb-color8);--awb-toggle-hover-accent-color:var(--awb-color5);--awb-title-font-family:&quot;Plus Jakarta Sans&quot;;--awb-title-font-weight:700;--awb-title-font-style:normal;--awb-content-font-family:var(--awb-typography4-font-family);--awb-content-font-weight:var(--awb-typography4-font-weight);--awb-content-font-style:var(--awb-typography4-font-style);\"><div class=\"panel-group fusion-toggle-icon-boxed\" id=\"accordion-4344-2\"><div class=\"fusion-panel panel-default panel-c1dc22b1cd06fcca0 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_c1dc22b1cd06fcca0\"><a aria-expanded=\"false\" aria-controls=\"c1dc22b1cd06fcca0\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#c1dc22b1cd06fcca0\" href=\"#c1dc22b1cd06fcca0\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Which weld fittings can I configure?<\/span><\/a><\/h3><\/div><div id=\"c1dc22b1cd06fcca0\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_c1dc22b1cd06fcca0\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>The DIN 11865 range covers 45 and 90 degree bends, equal and reducing tees as well as concentric and eccentric reducers. Select the design you need and add dimension, material, surface finish and quantity. Availability is confirmed after we have reviewed your inquiry.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-dace24bca01fefeac fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_dace24bca01fefeac\"><a aria-expanded=\"false\" aria-controls=\"dace24bca01fefeac\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#dace24bca01fefeac\" href=\"#dace24bca01fefeac\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Which details are needed for an inquiry?<\/span><\/a><\/h3><\/div><div id=\"dace24bca01fefeac\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_dace24bca01fefeac\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>State design, type of connection, dimension series, size, material, surface finish and quantity. For reducers and reducing tees both connection sizes are required. Add drawings, special dimensions and the inspection or material certificates you want.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-2a4aa67aa8064a5a3 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_2a4aa67aa8064a5a3\"><a aria-expanded=\"false\" aria-controls=\"2a4aa67aa8064a5a3\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#2a4aa67aa8064a5a3\" href=\"#2a4aa67aa8064a5a3\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Are special dimensions and single parts possible?<\/span><\/a><\/h3><\/div><div id=\"2a4aa67aa8064a5a3\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_2a4aa67aa8064a5a3\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>You can inquire about deviating dimensions, single parts and custom designs with a drawing or technical specification. We review feasibility, design and terms for your requirements. This does not imply a blanket delivery commitment for every special dimension.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-01942a230c3101189 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_01942a230c3101189\"><a aria-expanded=\"false\" aria-controls=\"01942a230c3101189\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#01942a230c3101189\" href=\"#01942a230c3101189\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Which materials are available?<\/span><\/a><\/h3><\/div><div id=\"01942a230c3101189\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_01942a230c3101189\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>The fittings shown in the configurator are offered in 1.4404 and 1.4435. Further materials are reviewed on request. Please state the material number required and the operating requirements as precisely as possible.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-b13f44384ffc6bc2e fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_b13f44384ffc6bc2e\"><a aria-expanded=\"false\" aria-controls=\"b13f44384ffc6bc2e\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#b13f44384ffc6bc2e\" href=\"#b13f44384ffc6bc2e\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">How do the surface finishes differ?<\/span><\/a><\/h3><\/div><div id=\"b13f44384ffc6bc2e\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_b13f44384ffc6bc2e\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>The surface finishes provided in the configurator differ by component and design. H4 denotes a mechanically polished surface, H4o an electropolished one. If your specification requires a particular roughness value, state it in your inquiry and have the assignment to the component confirmed.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-12e6060915f888a9f fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_12e6060915f888a9f\"><a aria-expanded=\"false\" aria-controls=\"12e6060915f888a9f\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#12e6060915f888a9f\" href=\"#12e6060915f888a9f\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Which documentation can I request?<\/span><\/a><\/h3><\/div><div id=\"12e6060915f888a9f\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_12e6060915f888a9f\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>Inspection certificates, material documentation and further certificates are agreed to match the agreed scope. State your requirements before placing the order. Certification of the manufacturing operation does not automatically mean that every fitting is supplied with every certificate.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-de4dcb925d230ff47 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_de4dcb925d230ff47\"><a aria-expanded=\"false\" aria-controls=\"de4dcb925d230ff47\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#de4dcb925d230ff47\" href=\"#de4dcb925d230ff47\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">What distinguishes DIN 11865 series A, B and C?<\/span><\/a><\/h3><\/div><div id=\"de4dcb925d230ff47\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_de4dcb925d230ff47\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>Series A is metric by nominal size, series B metric by tube outside diameter in the ISO series, series C in inches by tube outside diameter. Similar nominal sizes do not mean identical dimensions. For a clear assignment, please also state tube outside diameter and wall thickness.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-e06a23e5dd0937f5b fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_e06a23e5dd0937f5b\"><a aria-expanded=\"false\" aria-controls=\"e06a23e5dd0937f5b\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#e06a23e5dd0937f5b\" href=\"#e06a23e5dd0937f5b\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">What is the difference between weld ends and Tri-Clamp connections?<\/span><\/a><\/h3><\/div><div id=\"e06a23e5dd0937f5b\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_e06a23e5dd0937f5b\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>Weld ends are permanently integrated into the piping. Tri-Clamp connections are detachable. Please state explicitly in your inquiry which type of connection you need.<\/p>\n<\/div><\/div><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-39 fusion_builder_column_2_5 2_5 fusion-flex-column fusion-flex-align-self-stretch\" style=\"--awb-padding-top:60px;--awb-padding-right:60px;--awb-padding-bottom:30px;--awb-padding-left:60px;--awb-padding-top-small:40px;--awb-padding-right-small:40px;--awb-padding-bottom-small:20px;--awb-padding-left-small:40px;--awb-bg-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 15%),var(--awb-color4-a));--awb-bg-color-hover:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 15%),var(--awb-color4-a));--awb-bg-size:cover;--awb-width-large:40%;--awb-spacing-right-large:4.8%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:4.8%;--awb-width-medium:40%;--awb-order-medium:0;--awb-spacing-right-medium:4.8%;--awb-spacing-left-medium:4.8%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-28 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:var(--awb-color1);\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:50;line-height:1.3;\">Your technical inquiry<\/h2><\/div><div class=\"fusion-form fusion-form-builder fusion-form-form-wrapper fusion-form-3071 has-icon-alignment\" style=\"--awb-tooltip-text-color:#e5e5e5;--awb-tooltip-background-color:#e5e5e5;--awb-field-margin-top:0px;--awb-field-margin-bottom:20px;--awb-form-input-height:65px;--awb-form-bg-color:hsla(var(--awb-color8-h),var(--awb-color8-s),var(--awb-color8-l),calc(var(--awb-color8-a) - 100%));--awb-form-select-bg:var(--awb-color8);--awb-form-placeholder-color:var(--awb-color3);--awb-form-text-color:#e5e5e5;--awb-form-label-color:#e5e5e5;--awb-form-border-width-top:0px;--awb-form-border-width-bottom:1px;--awb-form-border-width-right:0px;--awb-form-border-width-left:0px;--awb-form-border-color:#e5e5e5;--awb-form-focus-border-color:var(--awb-color5);--awb-form-focus-border-hover-color:hsla(var(--awb-color5-h),var(--awb-color5-s),var(--awb-color5-l),calc(var(--awb-color5-a) - 50%));--awb-form-border-radius:0px;--awb-icon-alignment-top:0px;--awb-icon-alignment-bottom:1px;--awb-icon-alignment-font-size:1em;\" data-form-id=\"3071\" data-config=\"{&quot;form_id&quot;:3071,&quot;form_post_id&quot;:3071,&quot;post_id&quot;:4344,&quot;form_type&quot;:&quot;ajax&quot;,&quot;confirmation_type&quot;:&quot;message&quot;,&quot;redirect_url&quot;:&quot;&quot;,&quot;field_labels&quot;:{&quot;name&quot;:&quot;&quot;,&quot;email&quot;:&quot;&quot;,&quot;phone&quot;:&quot;&quot;,&quot;Your Message\\u2026&quot;:&quot;&quot;,&quot;datenschutz&quot;:&quot;Accept Privacy Policy&quot;},&quot;field_logics&quot;:{&quot;name&quot;:&quot;&quot;,&quot;email&quot;:&quot;&quot;,&quot;phone&quot;:&quot;&quot;,&quot;Your Message\\u2026&quot;:&quot;&quot;,&quot;datenschutz&quot;:&quot;&quot;,&quot;submit_1&quot;:&quot;&quot;,&quot;notice_1&quot;:&quot;&quot;},&quot;field_types&quot;:{&quot;name&quot;:&quot;text&quot;,&quot;email&quot;:&quot;email&quot;,&quot;phone&quot;:&quot;phone_number&quot;,&quot;Your Message\\u2026&quot;:&quot;textarea&quot;,&quot;datenschutz&quot;:&quot;consent&quot;,&quot;submit_1&quot;:&quot;submit&quot;,&quot;notice_1&quot;:&quot;notice&quot;},&quot;nonce_method&quot;:&quot;ajax&quot;}\"><form action=\"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/\" method=\"post\" class=\"fusion-form fusion-form-3071\"><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-16-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:0px;--awb-padding-right:0px;--awb-padding-bottom:0px;--awb-padding-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-40 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-flex-grow:0;--awb-flex-shrink:0;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-flex-grow-medium:0;--awb-flex-shrink-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-flex-grow-small:0;--awb-flex-shrink-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-form-field fusion-form-text-field fusion-form-label-above\" style=\"\" data-form-id=\"3071\"><input type=\"text\" autocomplete=\"off\" name=\"name\" id=\"name\" value=\"\"  class=\"fusion-form-input\" placeholder=\"First and Last Name \" data-holds-private-data=\"false\" minlength=\"0\"\/><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-41 fusion_builder_column_1_2 1_2 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-flex-grow:0;--awb-flex-shrink:0;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-flex-grow-medium:0;--awb-flex-shrink-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-flex-grow-small:0;--awb-flex-shrink-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-form-field fusion-form-email-field fusion-form-label-above\" style=\"\" data-form-id=\"3071\"><input type=\"email\" autocomplete=\"off\" name=\"email\" id=\"email\" value=\"\"  class=\"fusion-form-input\" required=\"true\" aria-required=\"true\" placeholder=\"Email *\" data-holds-private-data=\"false\"\/><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-42 fusion_builder_column_1_2 1_2 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-flex-grow:0;--awb-flex-shrink:0;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-flex-grow-medium:0;--awb-flex-shrink-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-flex-grow-small:0;--awb-flex-shrink-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-form-field fusion-form-phone-number-field fusion-form-label-above\" style=\"\" data-form-id=\"3071\"><input type=\"tel\" autocomplete=\"off\" name=\"phone\" id=\"phone\" value=\"\"  class=\"fusion-form-input\" required=\"true\" aria-required=\"true\" placeholder=\"Phone Number *\" data-holds-private-data=\"false\"\/><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-43 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-flex-grow:0;--awb-flex-shrink:0;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-flex-grow-medium:0;--awb-flex-shrink-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-flex-grow-small:0;--awb-flex-shrink-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-form-field fusion-form-textarea-field fusion-form-label-above\" style=\"\" data-form-id=\"3071\"><textarea cols=\"40\" autocomplete=\"off\"  minlength=\"0\"  rows=\"4\" tabindex=\"\" id=\"Your Message\u2026\" name=\"Your Message\u2026\" class=\"fusion-form-input\" placeholder=\"Your Message\u2026 \" data-holds-private-data=\"false\"><\/textarea><\/div><div class=\"fusion-form-field fusion-form-consent-field fusion-form-label-above\" style=\"\" data-form-id=\"3071\"><div class=\"fusion-form-label-wrapper\"><label for=\"datenschutz\">Accept Privacy Policy <abbr class=\"fusion-form-element-required\" title=\"required\">*<\/abbr><\/label><div class=\"fusion-form-tooltip\"><i class=\"awb-icon-question-circle\"><\/i><span class=\"fusion-form-tooltip-content\">I have read and accept the privacy policy. I agree that my data will be collected and processed electronically to respond to my inquiry.<\/span><\/div><\/div><div class=\"fusion-form-checkbox option-inline\"><input tabindex=\"\" id=\"datenschutz\" type=\"checkbox\" value=\"1\" name=\"datenschutz\" class=\"fusion-form-input\" required=\"true\" aria-required=\"true\"\/><label for=\"datenschutz\">I have read and accept the privacy policy. I agree that my data will be collected and processed electronically to respond to my inquiry.<\/label><\/div><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-44 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top:40px;--awb-padding-top-small:20px;--awb-bg-size:cover;--awb-width-large:100%;--awb-flex-grow:0;--awb-flex-shrink:0;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-flex-grow-medium:0;--awb-flex-shrink-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-flex-grow-small:0;--awb-flex-shrink-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-form-field fusion-form-submit-field fusion-form-label-above\" style=\"\" data-form-id=\"3071\"><div ><button type=\"submit\" class=\"fusion-button button-flat fusion-button-default-size button-custom fusion-button-default button-12 fusion-button-span-yes  form-form-submit button-default\" style=\"--button_accent_color:var(--awb-color4);--button_accent_hover_color:var(--awb-custom_color_1);--button_border_hover_color:var(--awb-color1);--button_gradient_angle:90deg;--button_gradient_start:0%;--button_gradient_end:100%;--button_gradient_top_color:var(--awb-color5);--button_gradient_bottom_color:var(--awb-color5);--button_gradient_top_color_hover:var(--awb-color4);--button_gradient_bottom_color_hover:var(--awb-color4);--button_font_size:18px;--button_padding-top:24px;--button_padding-bottom:26px;\" data-hover=\"bg_slide_left\" data-form-number=\"3071\" tabindex=\"\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Send Message<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/button><\/div><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-45 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top:20px;--awb-bg-size:cover;--awb-width-large:100%;--awb-flex-grow:0;--awb-flex-shrink:0;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-flex-grow-medium:0;--awb-flex-shrink-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-flex-grow-small:0;--awb-flex-shrink-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"form-submission-notices data-notice_1\" id=\"fusion-notices-1\"><div class=\"fusion-alert alert success alert-success fusion-alert-center fusion-form-response fusion-form-response-success awb-alert-native-link-color alert-dismissable awb-alert-close-boxed\" role=\"alert\"><div class=\"fusion-alert-content-wrapper\"><span class=\"alert-icon\"><i class=\"awb-icon-check-circle\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-alert-content\">Thank you for your message. We will get back to you within 48 hours.<\/span><\/div><button type=\"button\" class=\"close toggle-alert\" data-dismiss=\"alert\" aria-label=\"Close\">&times;<\/button><\/div><div class=\"fusion-alert alert error alert-danger fusion-alert-center fusion-form-response fusion-form-response-error awb-alert-native-link-color alert-dismissable awb-alert-close-boxed\" role=\"alert\"><div class=\"fusion-alert-content-wrapper\"><span class=\"alert-icon\"><i class=\"awb-icon-exclamation-triangle\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-alert-content\">An error occurred while sending your message. Please try again later or contact us by phone.<\/span><\/div><button type=\"button\" class=\"close toggle-alert\" data-dismiss=\"alert\" aria-label=\"Close\">&times;<\/button><\/div><\/div><\/div><\/div><\/div><\/div><input type=\"hidden\" name=\"fusion_privacy_store_ip_ua\" value=\"false\"><input type=\"hidden\" name=\"fusion_privacy_expiration_interval\" value=\"48\"><input type=\"hidden\" name=\"privacy_expiration_action\" value=\"anonymize\"><\/form><\/div><div class=\"fusion-modal modal fade modal-1 weiss-fittings-modal weiss-config-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"modal-heading-1\" aria-hidden=\"true\" style=\"--awb-border-color:var(--awb-color3);--awb-background:var(--awb-color1);\"><div class=\"modal-dialog modal-lg\" role=\"document\"><div class=\"modal-content fusion-modal-content\"><div class=\"modal-header\"><button class=\"close\" type=\"button\" data-dismiss=\"modal\" aria-hidden=\"true\" aria-label=\"Close\">&times;<\/button><h3 class=\"modal-title\" id=\"modal-heading-1\" data-dismiss=\"modal\" aria-hidden=\"true\">Project configurator<\/h3><\/div><div class=\"modal-body fusion-clearfix\">\n<p class=\"weiss-config-status\" role=\"status\">Configurator is loading \u2026<\/p>\n<p class=\"weiss-preis-hinweis\" style=\"margin:0 0 14px;padding:12px 14px;background:#fdecec;border-left:4px solid #d60a0a;font-size:14.5px;line-height:1.5;color:#1c1c1c\">Prices are hidden in this view. <a href=\"#weiss-zugang\" data-dismiss=\"modal\" data-bs-dismiss=\"modal\" style=\"color:#4c0000;text-decoration:underline;font-weight:700\">Request access<\/a> and you will receive your password by e-mail.<\/p>\n<!--noptimize-->\n<div class=\"weiss-konfigurator-embed\" style=\"width:100%;max-width:100%;\">\n    <iframe id=\"weiss-konf-7023\"\n            title=\"Project configurator\"\n            loading=\"lazy\"\n            style=\"width:100%;border:0;display:block;min-height:680px;\"><\/iframe>\n<\/div>\n<script>\n(function () {\n    var frame = document.getElementById(\"weiss-konf-7023\");\n    if (!frame) { return; }\n    \/\/ Widget-HTML als base64 setzen (NICHT als srcdoc-Attribut): base64 enthaelt keine\n    \/\/ HTML-Entities und ueberlebt damit jede Content-Verarbeitung (wptexturize\/Optimizer),\n    \/\/ die ein srcdoc-Attribut sonst um eine Escaping-Ebene entschaerft und das Inline-JS\n    \/\/ zerstoert. srcdoc bleibt erhalten -> gleicher Origin wie bisher, kein Verhaltenswechsel.\n    \/\/ Nur EINE base64-Ausgabe. Vorher stand derselbe rund 350 KB grosse String\n    \/\/ zweimal auf der Seite (Haupt- und Fallbackpfad) und blaehte sie unnoetig\n    \/\/ auf ueber ein Megabyte auf. 28.07.2026.\n    var b64 = \"PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImRlIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2luZGV4LCBub2ZvbGxvdyI+Cjx0aXRsZT5GaXR0aW5ncy1Lb25maWd1cmF0b3IgwrcgV2Vpc3MgQXBwYXJhdGViYXU8L3RpdGxlPgo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iRWRlbHN0YWhsLUh5Z2llbmUtRml0dGluZ3MgbGl2ZSBrb25maWd1cmllcmVuOiBESU4gMzI2NzYgQ2xhbXB2ZXJiaW5kdW5nZW4gdW5kIERJTiAxMTg2NSBGaXR0aW5ncywgbWl0IG1hw59zdMOkYmxpY2hlciBaZWljaG51bmcgdW5kIHRlY2huaXNjaGVyIEFuZnJhZ2UuIj4KPCEtLSBLZWluZSBleHRlcm5lbiBSZXF1ZXN0czogbG9rYWxlIFN5c3RlbS1GYWxsYmFja3Mgc3RlaGVuIGluIHN0eWxlcy5jc3MuIC0tPgo8c3R5bGU+Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIFdlaXNzIEFwcGFyYXRlYmF1IC0gRml0dGluZ3MtS29uZmlndXJhdG9yICDCtyAgc3R5bGVzLmNzcwogKiBXZWlzcy1DSSwgaGVsbC9tb2Rlcm4taW5kdXN0cmllbGwuIFRhYmxldC1oYXJ0OiBLRUlOIGJhY2tkcm9wLWZpbHRlciBhdWYKICogZml4ZWQvc3RpY2t5LCBrZWluZSBTY3JvbGwtUmV2ZWFsLCBhbGxlcyBzb2ZvcnQgc2ljaHRiYXIsIFRvdWNoID49IDQ0cHguCiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgo6cm9vdHsKICAtLXJlZDojZDYwYTBhOyAtLXJlZC1kYXJrOiM0YzAwMDA7IC0tcmVkLXRpbnQ6I2ZkZWNlYzsKICAtLWluazojMWMxYzFjOyAtLW11dGVkOiM1NTU7IC0tbXV0ZWQyOiM4YThmOTY7IC0tZmFpbnQ6I2I4YmNjMjsKICAtLWxpbmU6I2U2ZThlYTsgLS1saW5lLXN0cm9uZzojZDdkYmUwOwogIC0tYmc6I2ZmZmZmZjsgLS1zb2Z0OiNmNmY3Zjg7IC0tc29mdDI6I2VlZjFmNDsgLS1zb2Z0MzojZjFmMWYxOwogIC0tb2s6IzFmN2EzZDsgLS1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMjgsMjgsMjgsLjA0KSwwIDhweCAyNHB4IC0xMnB4IHJnYmEoMjgsMjgsMjgsLjE0KTsKICAtLXNoYWRvdy1zbTowIDFweCAycHggcmdiYSgyOCwyOCwyOCwuMDYpOwogIC0tcmFkaXVzOjE0cHg7IC0tcmFkaXVzLXNtOjEwcHg7CiAgLS1mczoxNXB4OyAtLWZmOidQbHVzIEpha2FydGEgU2FucycsJ0t1bWJoIFNhbnMnLHN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLFNlZ29lIFVJLFJvYm90byxzYW5zLXNlcmlmOwogIC8qIFplaWNobnVuZ3MtVmFyaWFibGVuIChFbmdpbmUpICovCiAgLS13ei1ib3JlOiNmNGY2Zjg7IC0td3otZWRnZTojMWMxYzFjOyAtLXd6LWNlbnRlcjojZDYwYTBhOyAtLXd6LWRpbTojOGE4Zjk2OwogIC0td3otZGltdHh0OiNjMjA5MDk7IC0td3otaGF0Y2g6I2FhYjBiNjsgLS13ei1jbGFtcDojY2RkMmQ4OyAtLXd6LW5vdGU6IzhhOGY5NjsKICAtLXd6LWJhZGdlOiNlZWYxZjQ7IC0td3otaW5rOiMxYzFjMWM7CiAgLS13ei1zdGVlbC1hOiNmY2ZkZmU7IC0td3otc3RlZWwtYjojZWVmMWY0OyAtLXd6LXN0ZWVsLWM6I2RlZTNlODsKfQoKKntib3gtc2l6aW5nOmJvcmRlci1ib3h9Cmh0bWwsYm9keXttYXJnaW46MDtwYWRkaW5nOjB9CmJvZHl7CiAgZm9udC1mYW1pbHk6dmFyKC0tZmYpOyBmb250LXNpemU6dmFyKC0tZnMpOyBjb2xvcjp2YXIoLS1pbmspOwogIGJhY2tncm91bmQ6dmFyKC0tYmcpOyBsaW5lLWhlaWdodDoxLjU7CiAgLXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDsgdGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5Owp9CmgxLGgyLGgzLGg0e21hcmdpbjowOyBmb250LXdlaWdodDo3MDA7IGxldHRlci1zcGFjaW5nOi0uMDFlbTsgbGluZS1oZWlnaHQ6MS4yfQpidXR0b257Zm9udC1mYW1pbHk6aW5oZXJpdDsgY3Vyc29yOnBvaW50ZXJ9Ci5tb25ve2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtczsgZm9udC1mZWF0dXJlLXNldHRpbmdzOiJ0bnVtIiAxfQouaWN7d2lkdGg6MThweDsgaGVpZ2h0OjE4cHg7IGZsZXg6MCAwIGF1dG87IHZlcnRpY2FsLWFsaWduOm1pZGRsZX0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmFobWVuICovCi5hcHB7bWF4LXdpZHRoOjEyODBweDsgbWFyZ2luOjAgYXV0bzsgcGFkZGluZzowIDIwcHggMjZweH0KCi50b3BiYXJ7CiAgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOyBnYXA6MTJweDsKICBwYWRkaW5nOjEycHggMnB4IDEwcHg7Cn0KLmJyYW5ke2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6MTFweH0KLmJyYW5kIC5tYXJre3dpZHRoOjlweDsgaGVpZ2h0OjMwcHg7IGJhY2tncm91bmQ6dmFyKC0tcmVkKTsgYm9yZGVyLXJhZGl1czoycHh9Ci5icmFuZCAubntmb250LXdlaWdodDo4MDA7IGZvbnQtc2l6ZToxOHB4OyBsZXR0ZXItc3BhY2luZzouMDRlbX0KLmJyYW5kIC5ze2Rpc3BsYXk6YmxvY2s7IGZvbnQtc2l6ZTo5LjVweDsgZm9udC13ZWlnaHQ6NzAwOyBsZXR0ZXItc3BhY2luZzouMTRlbTsKICBjb2xvcjp2YXIoLS1tdXRlZDIpOyB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7IG1hcmdpbi10b3A6MXB4fQovKiAyMi4wOS4yMDI2LCBXdW5zY2ggQmVybmQgTGlua2VyOiBkaWUgUHJlaXNncnVwcGUgbXVzcyBhdWYgZGVuIGVyc3RlbiBCbGljayBsZXNiYXIgc2Vpbi4KICAgVm9yaGVyIDEyIHB4IGdyYXUgaW4gZWluZXIgWmVpbGUgbWl0IGRlbSBOb3JtaGlud2VpcywgamV0enQgYWxzIEV0aWtldHQgaW4gSGF1c3JvdC4gKi8KLnRvcGJhciAuaGludHtmb250LXNpemU6MTNweDsgY29sb3I6dmFyKC0tbXV0ZWQyKTsgbGluZS1oZWlnaHQ6MS43fQoudG9wYmFyIC5oaW50IGJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7IGNvbG9yOiNmZmY7IGJhY2tncm91bmQ6dmFyKC0tcmVkKTsgcGFkZGluZzozcHggOXB4OwogIGJvcmRlci1yYWRpdXM6M3B4OyBmb250LXNpemU6MTJweDsgZm9udC13ZWlnaHQ6ODAwOyBsZXR0ZXItc3BhY2luZzouMDVlbTsKICB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7IG1hcmdpbi1yaWdodDo1cHh9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvcnRzY2hyaXR0ICovCi5wcm9ncmVzc3tkaXNwbGF5OmZsZXg7IGdhcDo2cHg7IG92ZXJmbG93LXg6YXV0bzsgcGFkZGluZzoycHggMnB4IDEycHg7IHNjcm9sbGJhci13aWR0aDp0aGlufQoucHN0ZXB7CiAgZmxleDowIDAgYXV0bzsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDo4cHg7CiAgcGFkZGluZzo4cHggMTJweDsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czo5OTlweDsKICBiYWNrZ3JvdW5kOnZhcigtLWJnKTsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXNpemU6MTIuNXB4OyBmb250LXdlaWdodDo2MDA7CiAgbWluLWhlaWdodDo0NHB4OyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xOHMsIGNvbG9yIC4xOHMsIGJhY2tncm91bmQgLjE4czsKfQoucHN0ZXAgLm51bXsKICB3aWR0aDoyMHB4OyBoZWlnaHQ6MjBweDsgYm9yZGVyLXJhZGl1czo1MCU7IGRpc3BsYXk6Z3JpZDsgcGxhY2UtaXRlbXM6Y2VudGVyOwogIGJhY2tncm91bmQ6dmFyKC0tc29mdDIpOyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxMXB4OyBmb250LXdlaWdodDo3MDA7Cn0KLnBzdGVwLmRvbmV7Y29sb3I6dmFyKC0taW5rKX0gLnBzdGVwLmRvbmUgLm51bXtiYWNrZ3JvdW5kOnZhcigtLWluayk7IGNvbG9yOiNmZmZ9Ci5wc3RlcC5hY3RpdmV7Ym9yZGVyLWNvbG9yOnZhcigtLXJlZCk7IGNvbG9yOnZhcigtLXJlZC1kYXJrKTsgYmFja2dyb3VuZDp2YXIoLS1yZWQtdGludCl9Ci5wc3RlcC5hY3RpdmUgLm51bXtiYWNrZ3JvdW5kOnZhcigtLXJlZCk7IGNvbG9yOiNmZmZ9Ci5wc3RlcFtkaXNhYmxlZF17b3BhY2l0eTouNTU7IGN1cnNvcjpub3QtYWxsb3dlZH0KLnBzdGVwOm5vdChbZGlzYWJsZWRdKXtjdXJzb3I6cG9pbnRlcn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR3JpZCAqLwoubGF5b3V0e2Rpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjEuMDVmciAuOTVmcjsgZ2FwOjMwcHg7IGFsaWduLWl0ZW1zOnN0YXJ0fQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGFuZWwgKi8KLnBhbmVse21pbi13aWR0aDowfQouc3RlcC1oZWFke21hcmdpbjoycHggMCA0cHh9Ci5zdGVwLWhlYWQtdG9we2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjsgZ2FwOjEycHh9Ci5raWNrZXJ7Zm9udC1zaXplOjExLjVweDsgZm9udC13ZWlnaHQ6NzAwOyBsZXR0ZXItc3BhY2luZzouMTJlbTsgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOyBjb2xvcjp2YXIoLS1yZWQpfQovKiBadXJ1ZWNrc2V0emVuLUJ1dHRvbiAoQTUpOiBQaWxsZSByZWNodHMgbmViZW4gZGVtIFNjaHJpdHQtS2lja2VyLCBpbiBqZWRlbSBTY2hyaXR0LgogICBTY2hhcmYgZ2VzY2hhbHRldCAoLmFybWVkKSB3aXJkIGVyIHJvdCAtIGRlciB6d2VpdGUgS2xpY2sgc2V0enQgd2lya2xpY2ggenVydWVjay4gKi8KLnJlc2V0YnRue2ZsZXg6MCAwIGF1dG87IGRpc3BsYXk6aW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjdweDsKICBtaW4taGVpZ2h0OjQ0cHg7IHBhZGRpbmc6MCAxNHB4OyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpOyBib3JkZXItcmFkaXVzOjk5OXB4OwogIGJhY2tncm91bmQ6dmFyKC0tYmcpOyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxMi41cHg7IGZvbnQtd2VpZ2h0OjcwMDsKICB3aGl0ZS1zcGFjZTpub3dyYXA7IHRyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xOHMsIGNvbG9yIC4xOHMsIGJhY2tncm91bmQgLjE4c30KLnJlc2V0YnRuOmhvdmVyOm5vdChbZGlzYWJsZWRdKXtib3JkZXItY29sb3I6dmFyKC0tcmVkKTsgY29sb3I6dmFyKC0tcmVkKTsgYmFja2dyb3VuZDp2YXIoLS1yZWQtdGludCl9Ci5yZXNldGJ0bjphY3RpdmU6bm90KFtkaXNhYmxlZF0pe3RyYW5zZm9ybTp0cmFuc2xhdGVZKDFweCl9Ci5yZXNldGJ0bltkaXNhYmxlZF17Y29sb3I6dmFyKC0tZmFpbnQpOyBjdXJzb3I6bm90LWFsbG93ZWR9Ci5yZXNldGJ0bi5hcm1lZHtib3JkZXItY29sb3I6dmFyKC0tcmVkKTsgYmFja2dyb3VuZDp2YXIoLS1yZWQpOyBjb2xvcjojZmZmfQoucmVzZXRidG4gLmlje3dpZHRoOjE1cHg7IGhlaWdodDoxNXB4fQouc3RlcC1oZWFkIGgye2ZvbnQtc2l6ZToyM3B4OyBtYXJnaW4tdG9wOjZweH0KLnN0ZXAtaGVhZCBwe2NvbG9yOnZhcigtLW11dGVkKTsgbWFyZ2luOjdweCAwIDA7IG1heC13aWR0aDo1MmNoOyBmb250LXNpemU6MTRweH0KCi8qIEthY2hlbC1HcmlkIChBbndlbmR1bmcsIE5vcm0sIFR5cCkgKi8KLnRpbGVze2Rpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7IGdhcDoxMnB4OyBtYXJnaW4tdG9wOjE2cHh9Ci50aWxlewogIHRleHQtYWxpZ246bGVmdDsgYmFja2dyb3VuZDp2YXIoLS1iZyk7IGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsKICBib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyk7IHBhZGRpbmc6MTZweCAxNnB4IDE1cHg7IG1pbi1oZWlnaHQ6OTZweDsKICBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsgZ2FwOjZweDsgY29sb3I6dmFyKC0taW5rKTsKICB0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMThzLCBib3gtc2hhZG93IC4xOHMsIHRyYW5zZm9ybSAuMTJzOwp9Ci50aWxlOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1saW5lLXN0cm9uZyk7IGJveC1zaGFkb3c6dmFyKC0tc2hhZG93LXNtKX0KLnRpbGU6YWN0aXZle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDFweCl9Ci50aWxlLnNlbHtib3JkZXItY29sb3I6dmFyKC0tcmVkKTsgYm94LXNoYWRvdzowIDAgMCAzcHggdmFyKC0tcmVkLXRpbnQpfQoudGlsZSAuaWN7d2lkdGg6MzBweDsgaGVpZ2h0OjMwcHg7IGNvbG9yOnZhcigtLXJlZCl9Ci50aWxlIC50e2ZvbnQtd2VpZ2h0OjcwMDsgZm9udC1zaXplOjE1LjVweH0KLnRpbGUgLmR7Y29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXNpemU6MTIuNXB4OyBsaW5lLWhlaWdodDoxLjM1fQoudGlsZSAuYmFkZ2V7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0OyBtYXJnaW4tdG9wOjJweDsgZm9udC1zaXplOjEwLjVweDsgZm9udC13ZWlnaHQ6NzAwOwogIHBhZGRpbmc6MnB4IDhweDsgYm9yZGVyLXJhZGl1czo5OTlweDsgbGV0dGVyLXNwYWNpbmc6LjAyZW19Ci50aWxlIC5iYWRnZS5saXZle2JhY2tncm91bmQ6I2U5ZjZlZTsgY29sb3I6dmFyKC0tb2spfQoudGlsZSAuYmFkZ2UuYW5mcmFnZXtiYWNrZ3JvdW5kOnZhcigtLXNvZnQzKTsgY29sb3I6dmFyKC0tbXV0ZWQpfQoKLyogT3B0aW9ucy1SZWloZSAoV2Vya3N0b2ZmL09iZXJmbGFlY2hlL0RpY2h0dW5nL05hY2h3ZWlzZSkgKi8KLm9wdHN7ZGlzcGxheTpmbGV4OyBmbGV4LXdyYXA6d3JhcDsgZ2FwOjEwcHg7IG1hcmdpbi10b3A6MTRweH0KLm9wdHsKICBmbGV4OjEgMSAxODBweDsgdGV4dC1hbGlnbjpsZWZ0OyBiYWNrZ3JvdW5kOnZhcigtLWJnKTsgYm9yZGVyOjEuNXB4IHNvbGlkIHZhcigtLWxpbmUpOwogIGJvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTsgcGFkZGluZzoxMnB4IDE0cHg7IG1pbi1oZWlnaHQ6NTZweDsgY29sb3I6dmFyKC0taW5rKTsKICBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsgZ2FwOjJweDsgdHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjE4cywgYm94LXNoYWRvdyAuMThzLCB0cmFuc2Zvcm0gLjEyczsKfQoub3B0OmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1saW5lLXN0cm9uZyl9Ci5vcHQ6YWN0aXZle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDFweCl9Ci5vcHQuc2Vse2JvcmRlci1jb2xvcjp2YXIoLS1yZWQpOyBib3gtc2hhZG93OjAgMCAwIDNweCB2YXIoLS1yZWQtdGludCl9Ci5vcHQuZGlzYWJsZWR7b3BhY2l0eTouNDI7IGN1cnNvcjpub3QtYWxsb3dlZDsgYmFja2dyb3VuZDp2YXIoLS1zb2Z0KX0KLm9wdCAudHtmb250LXdlaWdodDo3MDA7IGZvbnQtc2l6ZToxNC41cHg7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6N3B4fQoub3B0IC5ke2NvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zaXplOjEycHg7IGxpbmUtaGVpZ2h0OjEuMzV9Ci5vcHQgLmZsYWd7Zm9udC1zaXplOjEwcHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6dmFyKC0tcmVkKTsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1yZWQpOwogIGJvcmRlci1yYWRpdXM6NXB4OyBwYWRkaW5nOjAgNXB4OyBtYXJnaW4tbGVmdDphdXRvfQoub3B0IC5sb2Nre2ZvbnQtc2l6ZToxMXB4OyBjb2xvcjp2YXIoLS1tdXRlZDIpfQoKLmZpZWxkLWxhYmVse2ZvbnQtc2l6ZToxMi41cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBtYXJnaW46MTZweCAwIDdweDsgZGlzcGxheTpibG9ja30KCi8qIEdyb2Vzc2VuLVNlbGVjdCArIFNlZ21lbnRlZCAqLwoucm93MntkaXNwbGF5OmdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyOyBnYXA6MTRweH0KLyogQmVybmQgMjcuMDcuMjAyNiAoRGljaHR1bmdlbik6IFN0ZWh0IGluIGRlciBaZWlsZSBudXIgRUlOIEZlbGQgLSB6LiBCLiBkaWUKICogTmVubndlaXRlIGJlaSBEaWNodHVuZywgQmxpbmRkZWNrZWwgb2RlciBLbGFtbWVyIC0sIGJsaWViIGVzIHRyb3R6ZGVtIGF1ZiBkZXIKICogaGFsYmVuIEJyZWl0ZSBzdGVoZW4gdW5kIHNjaG5pdHQgbGFuZ2UgRWludHJhZWdlIGFiICgiRE4yMDAgwrcg4oyAIDIwNCDDlyAyIG1tIMK3CiAqIEtsZW1tLeKMgCAy4oCmIikuIEVpbiBlaW56ZWxuZXMgRmVsZCBuaW1tdCBqZXR6dCBkaWUgdm9sbGUgWmVpbGVuYnJlaXRlLiAqLwoucm93MiA+IDpvbmx5LWNoaWxke2dyaWQtY29sdW1uOjEgLyAtMX0KLnNlbGVjdC13cmFwe3Bvc2l0aW9uOnJlbGF0aXZlfQpzZWxlY3Quc3p7CiAgd2lkdGg6MTAwJTsgbWluLWhlaWdodDo0OHB4OyBwYWRkaW5nOjEycHggNDBweCAxMnB4IDE0cHg7IGZvbnQtc2l6ZToxNXB4OyBmb250LWZhbWlseTppbmhlcml0OwogIGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pOyBiYWNrZ3JvdW5kOnZhcigtLWJnKTsKICBjb2xvcjp2YXIoLS1pbmspOyBhcHBlYXJhbmNlOm5vbmU7IGN1cnNvcjpwb2ludGVyOwp9CnNlbGVjdC5zejpmb2N1c3tvdXRsaW5lOm5vbmU7IGJvcmRlci1jb2xvcjp2YXIoLS1yZWQpOyBib3gtc2hhZG93OjAgMCAwIDNweCB2YXIoLS1yZWQtdGludCl9Ci5zZWxlY3Qtd3JhcDo6YWZ0ZXJ7Y29udGVudDoiIjsgcG9zaXRpb246YWJzb2x1dGU7IHJpZ2h0OjE1cHg7IHRvcDo1MCU7IHdpZHRoOjlweDsgaGVpZ2h0OjlweDsKICBib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHZhcigtLW11dGVkMik7IGJvcmRlci1ib3R0b206MnB4IHNvbGlkIHZhcigtLW11dGVkMik7CiAgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTcwJSkgcm90YXRlKDQ1ZGVnKTsgcG9pbnRlci1ldmVudHM6bm9uZX0KCi5zZWd7ZGlzcGxheTppbmxpbmUtZmxleDsgYm9yZGVyOjEuNXB4IHNvbGlkIHZhcigtLWxpbmUpOyBib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7IG92ZXJmbG93OmhpZGRlbjsgZmxleC13cmFwOndyYXB9Ci5zZWcgYnV0dG9ue2JhY2tncm91bmQ6dmFyKC0tYmcpOyBib3JkZXI6bm9uZTsgcGFkZGluZzoxMXB4IDE2cHg7IG1pbi1oZWlnaHQ6NDZweDsgZm9udC1zaXplOjEzLjVweDsKICBmb250LXdlaWdodDo2MDA7IGNvbG9yOnZhcigtLW11dGVkKTsgYm9yZGVyLXJpZ2h0OjEuNXB4IHNvbGlkIHZhcigtLWxpbmUpfQouc2VnIGJ1dHRvbjpsYXN0LWNoaWxke2JvcmRlci1yaWdodDpub25lfQouc2VnIGJ1dHRvbi5zZWx7YmFja2dyb3VuZDp2YXIoLS1yZWQpOyBjb2xvcjojZmZmfQoKLyogU3RlcHBlciAoTWVuZ2UpICovCi5zdGVwcGVye2Rpc3BsYXk6aW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOnN0cmV0Y2g7IGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pOyBvdmVyZmxvdzpoaWRkZW59Ci5zdGVwcGVyIGJ1dHRvbnt3aWR0aDo0OHB4OyBtaW4taGVpZ2h0OjQ4cHg7IGZvbnQtc2l6ZToyMHB4OyBiYWNrZ3JvdW5kOnZhcigtLXNvZnQpOyBib3JkZXI6bm9uZTsgY29sb3I6dmFyKC0taW5rKX0KLnN0ZXBwZXIgYnV0dG9uOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLXNvZnQyKX0KLnN0ZXBwZXIgaW5wdXR7d2lkdGg6NzRweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlcjpub25lOyBib3JkZXItbGVmdDoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsKICBib3JkZXItcmlnaHQ6MS41cHggc29saWQgdmFyKC0tbGluZSk7IGZvbnQtc2l6ZToxNnB4OyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Ci5zdGVwcGVyIGlucHV0OmZvY3Vze291dGxpbmU6bm9uZX0KLnN0YWZmZWx7ZGlzcGxheTpmbGV4OyBmbGV4LXdyYXA6d3JhcDsgZ2FwOjdweDsgbWFyZ2luLXRvcDoxMnB4fQouc3RhZmZlbCAuc3tmb250LXNpemU6MTEuNXB4OyBwYWRkaW5nOjVweCAxMHB4OyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpOyBib3JkZXItcmFkaXVzOjk5OXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGN1cnNvcjpwb2ludGVyfQouc3RhZmZlbCAucy5vbntib3JkZXItY29sb3I6dmFyKC0tcmVkKTsgY29sb3I6dmFyKC0tcmVkLWRhcmspOyBiYWNrZ3JvdW5kOnZhcigtLXJlZC10aW50KTsgZm9udC13ZWlnaHQ6NzAwfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWb3JzY2hhdSAqLwoucHJldmlld3twb3NpdGlvbjpzdGlja3k7IHRvcDoxNHB4OyBhbGlnbi1zZWxmOnN0YXJ0fQoucHYtY2FyZHtiYWNrZ3JvdW5kOnZhcigtLWJnKTsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpOwogIGJveC1zaGFkb3c6dmFyKC0tc2hhZG93KTsgb3ZlcmZsb3c6aGlkZGVufQoucHYtaGVhZHtkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47IGdhcDoxMHB4OwogIHBhZGRpbmc6MTBweCAxNHB4IDhweDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tbGluZSl9Ci5wdi1oZWFkIC5sYmx7Zm9udC1zaXplOjExcHg7IGZvbnQtd2VpZ2h0OjcwMDsgbGV0dGVyLXNwYWNpbmc6LjFlbTsgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOyBjb2xvcjp2YXIoLS1tdXRlZDIpfQoucHYtdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWZsZXg7IGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czo5OTlweDsgb3ZlcmZsb3c6aGlkZGVufQoucHYtdG9nZ2xlIGJ1dHRvbntib3JkZXI6bm9uZTsgYmFja2dyb3VuZDp2YXIoLS1iZyk7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zaXplOjEyLjVweDsgZm9udC13ZWlnaHQ6NzAwOwogIHBhZGRpbmc6OHB4IDE0cHg7IG1pbi1oZWlnaHQ6NDRweDsgZGlzcGxheTppbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6NnB4fQoucHYtdG9nZ2xlIGJ1dHRvbiArIGJ1dHRvbntib3JkZXItbGVmdDoxLjVweCBzb2xpZCB2YXIoLS1saW5lKX0KLnB2LXRvZ2dsZSBidXR0b24uc2Vse2JhY2tncm91bmQ6dmFyKC0taW5rKTsgY29sb3I6I2ZmZn0KLnB2LXRvZ2dsZSBidXR0b246YWN0aXZle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDFweCl9Ci5wdi1zdGFnZXtwb3NpdGlvbjpyZWxhdGl2ZTsgYmFja2dyb3VuZDoKICByYWRpYWwtZ3JhZGllbnQoMTIwJSAxMDAlIGF0IDUwJSAwJSwgI2ZiZmNmZCAwJSwgI2YzZjVmNyAxMDAlKTsgcGFkZGluZzo2cHh9Ci5wdi1zdGFnZSAuZHJhd3t3aWR0aDoxMDAlOyBoZWlnaHQ6YXV0bzsgbWF4LWhlaWdodDozMjBweDsgZGlzcGxheTpibG9jazsgbWFyZ2luOjAgYXV0bzsgb3BhY2l0eToxOyB0cmFuc2l0aW9uOm9wYWNpdHkgLjE4cyBlYXNlfQoucHYtc3RhZ2Uuc3dhcCAuZHJhd3tvcGFjaXR5OjB9Ci5wdi1lbXB0eXtkaXNwbGF5OmdyaWQ7IHBsYWNlLWl0ZW1zOmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7IGNvbG9yOnZhcigtLW11dGVkMik7CiAgbWluLWhlaWdodDoyMzBweDsgcGFkZGluZzoyNHB4OyBmb250LXNpemU6MTMuNXB4fQoucHYtZW1wdHkgLmlje3dpZHRoOjQ0cHg7IGhlaWdodDo0NHB4OyBtYXJnaW46MCBhdXRvIDEwcHg7IGNvbG9yOnZhcigtLWZhaW50KX0KCi5wdi10eXBlY29kZXtkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjEwcHg7IHBhZGRpbmc6MTJweCAxNHB4OyBib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1saW5lKX0KLnB2LXR5cGVjb2RlIC5sYmx7Zm9udC1zaXplOjExcHg7IGZvbnQtd2VpZ2h0OjcwMDsgbGV0dGVyLXNwYWNpbmc6LjFlbTsgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOyBjb2xvcjp2YXIoLS1tdXRlZDIpfQoucHYtdHlwZWNvZGUgLmNvZGV7Zm9udC1mYW1pbHk6J0t1bWJoIFNhbnMnLHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7IGZvbnQtd2VpZ2h0OjcwMDsgZm9udC1zaXplOjE0cHg7CiAgbGV0dGVyLXNwYWNpbmc6LjAxZW07IGNvbG9yOnZhcigtLWluayk7IHdvcmQtYnJlYWs6bm9ybWFsOyBvdmVyZmxvdy13cmFwOmFueXdoZXJlfQoucHYtdHlwZWNvZGUgLmNvcHl7bWFyZ2luLWxlZnQ6YXV0bzsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgYmFja2dyb3VuZDp2YXIoLS1iZyk7IGJvcmRlci1yYWRpdXM6OHB4OwogIG1pbi1oZWlnaHQ6NDRweDsgbWluLXdpZHRoOjQ0cHg7IHBhZGRpbmc6MCAxMHB4OyBmb250LXNpemU6MTJweDsgZm9udC13ZWlnaHQ6NjAwOyBjb2xvcjp2YXIoLS1tdXRlZCk7IGRpc3BsYXk6aW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjZweH0KLnB2LXR5cGVjb2RlIC5jb3B5OmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLXNvZnQpfQoucHYtdHlwZWNvZGUgLmNvcHkub2t7Y29sb3I6dmFyKC0tb2spOyBib3JkZXItY29sb3I6I2JmZTJjY30KCi5wdi1wcmljZXtkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmZsZXgtZW5kOyBqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjsgZ2FwOjEycHg7IHBhZGRpbmc6MTJweCAxNHB4OyBib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgYmFja2dyb3VuZDp2YXIoLS1zb2Z0KX0KLnB2LXByaWNlIC5hbXR7Zm9udC1zaXplOjMwcHg7IGZvbnQtd2VpZ2h0OjgwMDsgbGV0dGVyLXNwYWNpbmc6LS4wMmVtOyBmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXM7IGxpbmUtaGVpZ2h0OjF9Ci5wdi1wcmljZSAuYW10IC5jdXJ7Zm9udC1zaXplOjE4cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBtYXJnaW4tbGVmdDozcHh9Ci5wdi1wcmljZSAuc3Vie2ZvbnQtc2l6ZToxMS41cHg7IGNvbG9yOnZhcigtLW11dGVkKTsgbWFyZ2luLXRvcDo1cHh9Ci5wdi1wcmljZSAuZmxhZ3tkaXNwbGF5OmlubGluZS1ibG9jazsgbWFyZ2luLXRvcDo2cHg7IGZvbnQtc2l6ZToxMC41cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6dmFyKC0tcmVkKTsKICBiYWNrZ3JvdW5kOnZhcigtLXJlZC10aW50KTsgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6MnB4IDdweH0KLnB2LXByaWNlLmFuZnJhZ2UgLmFtdHtmb250LXNpemU6MjJweDsgY29sb3I6dmFyKC0tcmVkLWRhcmspfQoucHYtcHJpY2UgLnRvdGFse3RleHQtYWxpZ246cmlnaHR9Ci5wdi1wcmljZSAudG90YWwgLnR7Zm9udC1zaXplOjExcHg7IGNvbG9yOnZhcigtLW11dGVkMik7IHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6LjA4ZW07IGZvbnQtd2VpZ2h0OjcwMH0KLnB2LXByaWNlIC50b3RhbCAudntmb250LXNpemU6MThweDsgZm9udC13ZWlnaHQ6ODAwOyBmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9CgoucHYtY2hpcHN7ZGlzcGxheTpmbGV4OyBmbGV4LXdyYXA6d3JhcDsgZ2FwOjZweDsgcGFkZGluZzoxMnB4IDE0cHg7IGJvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWxpbmUpfQouY2hpcHtmb250LXNpemU6MTEuNXB4OyBwYWRkaW5nOjVweCAxMHB4OyBib3JkZXItcmFkaXVzOjk5OXB4OyBiYWNrZ3JvdW5kOnZhcigtLXNvZnQyKTsgY29sb3I6dmFyKC0taW5rKTsgZm9udC13ZWlnaHQ6NjAwfQouY2hpcCBie2NvbG9yOnZhcigtLW11dGVkMik7IGZvbnQtd2VpZ2h0OjcwMDsgbWFyZ2luLXJpZ2h0OjRweH0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQWN0aW9uYmFyICovCi5uYXZ7ZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxMnB4OyBtYXJnaW4tdG9wOjE2cHh9Ci5idG57bWluLWhlaWdodDo1MnB4OyBwYWRkaW5nOjAgMjJweDsgYm9yZGVyLXJhZGl1czoxMnB4OyBmb250LXNpemU6MTVweDsgZm9udC13ZWlnaHQ6NzAwOwogIGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsgYmFja2dyb3VuZDp2YXIoLS1iZyk7IGNvbG9yOnZhcigtLWluayk7CiAgZGlzcGxheTppbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6OHB4OyB0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTJzLCBib3gtc2hhZG93IC4xOHMsIGJhY2tncm91bmQgLjE4c30KLmJ0bjphY3RpdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMXB4KX0KLmJ0bi5wcmltYXJ5e2JhY2tncm91bmQ6dmFyKC0tcmVkKTsgYm9yZGVyLWNvbG9yOnZhcigtLXJlZCk7IGNvbG9yOiNmZmY7IGJveC1zaGFkb3c6MCA4cHggMjBweCAtMTBweCByZ2JhKDIxNCwxMCwxMCwuNil9Ci5idG4ucHJpbWFyeTpob3ZlcntiYWNrZ3JvdW5kOiNjMDA5MDl9Ci5idG4ucHJpbWFyeVtkaXNhYmxlZF17YmFja2dyb3VuZDp2YXIoLS1mYWludCk7IGJvcmRlci1jb2xvcjp2YXIoLS1mYWludCk7IGJveC1zaGFkb3c6bm9uZTsgY3Vyc29yOm5vdC1hbGxvd2VkfQouYnRuLmdob3N0e2NvbG9yOnZhcigtLW11dGVkKX0KLmJ0bi53aWRle2ZsZXg6MTsganVzdGlmeS1jb250ZW50OmNlbnRlcn0KLmJ0biAuaWN7d2lkdGg6MThweDsgaGVpZ2h0OjE4cHh9CgovKiBXYXJlbmtvcmIgLyBQb3NpdGlvbmVuICovCi5jYXJ0e2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7IGJvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKTsgbWFyZ2luLXRvcDoxNnB4OyBvdmVyZmxvdzpoaWRkZW59Ci5jYXJ0IC5jaXtkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjEycHg7IHBhZGRpbmc6MTJweCAxNHB4OyBib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1saW5lKX0KLmNhcnQgLmNpOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpub25lfQouY2FydCAuY2kgLmNvZGV7Zm9udC1mYW1pbHk6J0t1bWJoIFNhbnMnLG1vbm9zcGFjZTsgZm9udC13ZWlnaHQ6NzAwOyBmb250LXNpemU6MTNweH0KLmNhcnQgLmNpIC5tZXRhe2ZvbnQtc2l6ZToxMnB4OyBjb2xvcjp2YXIoLS1tdXRlZCl9Ci5jYXJ0IC5jaSAucHJ7bWFyZ2luLWxlZnQ6YXV0bzsgZm9udC13ZWlnaHQ6NzAwOyBmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Ci5jYXJ0IC5jaSAuZGVse2JvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IGNvbG9yOnZhcigtLW11dGVkMik7IGZvbnQtc2l6ZToxOHB4OyBwYWRkaW5nOjZweDsgbWluLWhlaWdodDo0MHB4OyBtaW4td2lkdGg6NDBweH0KLmNhcnQgLmNpIC5kZWw6aG92ZXJ7Y29sb3I6dmFyKC0tcmVkKX0KLmNhcnQgLnN1bXtiYWNrZ3JvdW5kOnZhcigtLXNvZnQpOyBib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1saW5lLXN0cm9uZyl9Ci5jYXJ0IC5zcntkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjEycHg7IHBhZGRpbmc6MTFweCAxNHB4fQouY2FydCAuc3Iub3Blbntmb250LXNpemU6MTIuNXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWxpbmUpfQouY2FydCAuc3Iub3BlbiAuaWN7d2lkdGg6MTZweDsgaGVpZ2h0OjE2cHg7IGZsZXg6MCAwIGF1dG99Ci5jYXJ0IC5zci50b3QgLnR7Zm9udC13ZWlnaHQ6ODAwOyBmb250LXNpemU6MTVweH0KLmNhcnQgLnNyLnRvdCAuc3tmb250LXNpemU6MTJweDsgY29sb3I6dmFyKC0tbXV0ZWQpfQouY2FydCAuc3IudG90IC52e21hcmdpbi1sZWZ0OmF1dG87IGZvbnQtd2VpZ2h0OjgwMDsgZm9udC1zaXplOjE4cHg7IGZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtczsgd2hpdGUtc3BhY2U6bm93cmFwfQoubGlua2J0bntiYWNrZ3JvdW5kOm5vbmU7IGJvcmRlcjpub25lOyBjb2xvcjp2YXIoLS1yZWQpOyBmb250LXdlaWdodDo3MDA7IGZvbnQtc2l6ZToxMy41cHg7IHBhZGRpbmc6MTBweCAycHg7IG1pbi1oZWlnaHQ6NDRweH0KCi8qIEZvcm11bGFyIChSRlEpICovCi5mb3Jte2Rpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7IGdhcDoxNHB4OyBtYXJnaW4tdG9wOjE4cHh9Ci5mb3JtIC5mbGR7ZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47IGdhcDo2cHh9Ci5mb3JtIC5mbGQuZnVsbHtncmlkLWNvbHVtbjoxIC8gLTF9Ci5mb3JtIGxhYmVse2ZvbnQtc2l6ZToxMi41cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6dmFyKC0tbXV0ZWQpfQouZm9ybSBsYWJlbCAucmVxe2NvbG9yOnZhcigtLXJlZCl9Ci5mb3JtIGlucHV0LC5mb3JtIHRleHRhcmVhe2ZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZToxNXB4OyBwYWRkaW5nOjEycHggMTRweDsgbWluLWhlaWdodDo0OHB4OwogIGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pOyBiYWNrZ3JvdW5kOnZhcigtLWJnKTsgY29sb3I6dmFyKC0taW5rKX0KLmZvcm0gdGV4dGFyZWF7bWluLWhlaWdodDo4NHB4OyByZXNpemU6dmVydGljYWx9Ci5mb3JtIGlucHV0OmZvY3VzLC5mb3JtIHRleHRhcmVhOmZvY3Vze291dGxpbmU6bm9uZTsgYm9yZGVyLWNvbG9yOnZhcigtLXJlZCk7IGJveC1zaGFkb3c6MCAwIDAgM3B4IHZhcigtLXJlZC10aW50KX0KLmZvcm0gLmVycntib3JkZXItY29sb3I6dmFyKC0tcmVkKSFpbXBvcnRhbnR9Ci5mb3JtIC5lcnJtc2d7Zm9udC1zaXplOjEycHg7IGNvbG9yOnZhcigtLXJlZCl9Ci5oZWxwZXJ7Zm9udC1zaXplOjEyLjVweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBtYXJnaW4tdG9wOjEycHg7IGxpbmUtaGVpZ2h0OjEuNX0KCi5ub3RlLXBsaHtkaXNwbGF5OmZsZXg7IGdhcDo5cHg7IGFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7IG1hcmdpbi10b3A6MThweDsgcGFkZGluZzoxMnB4IDE0cHg7CiAgYmFja2dyb3VuZDp2YXIoLS1yZWQtdGludCk7IGJvcmRlcjoxcHggc29saWQgI2YzYzljOTsgYm9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pOyBmb250LXNpemU6MTIuNXB4OyBjb2xvcjp2YXIoLS1yZWQtZGFyayl9Ci5ub3RlLXBsaCAuaWN7d2lkdGg6MThweDsgaGVpZ2h0OjE4cHg7IGZsZXg6MCAwIGF1dG87IG1hcmdpbi10b3A6MXB4fQoubm90ZS1va3tkaXNwbGF5OmZsZXg7IGdhcDo5cHg7IGFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7IG1hcmdpbi10b3A6MTZweDsgcGFkZGluZzoxMnB4IDE0cHg7CiAgYmFja2dyb3VuZDojZjFmNmYyOyBib3JkZXI6MXB4IHNvbGlkICNjZmU2ZDY7IGJvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTsgZm9udC1zaXplOjEyLjVweDsgY29sb3I6IzI0NWMzN30KLm5vdGUtb2sgLmlje3dpZHRoOjE4cHg7IGhlaWdodDoxOHB4OyBmbGV4OjAgMCBhdXRvOyBtYXJnaW4tdG9wOjFweDsgY29sb3I6IzJmOGE0ZX0KCi8qIFZvcnNjaGF1LUtvcGY6IFRvZ2dsZSArIFZvbGxiaWxkICovCi5wdi1hY3Rpb25ze2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6OHB4fQoucHYtZnNidG57Ym9yZGVyOjEuNXB4IHNvbGlkIHZhcigtLWxpbmUpOyBiYWNrZ3JvdW5kOnZhcigtLWJnKTsgYm9yZGVyLXJhZGl1czo5OTlweDsKICBtaW4taGVpZ2h0OjQ0cHg7IG1pbi13aWR0aDo0NHB4OyBkaXNwbGF5OmlubGluZS1mbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGNvbG9yOnZhcigtLW11dGVkKX0KLnB2LWZzYnRuOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1saW5lLXN0cm9uZyk7IGNvbG9yOnZhcigtLWluayl9Ci5wdi1mc2J0bjphY3RpdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMXB4KX0KCi8qIEJlaXNwaWVsLVZvcnNjaGF1IChTY2hyaXR0IDEtMikgKi8KLnB2LXNhbXBsZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLnB2LXNhbXBsZT5zdmd7b3BhY2l0eTouNDJ9Ci5wdi1zYW1wbGUtaGludHtwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxMnB4OyByaWdodDoxMnB4OyBib3R0b206MTJweDsgYmFja2dyb3VuZDp2YXIoLS1iZyk7CiAgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czoxMHB4OyBwYWRkaW5nOjEwcHggMTJweDsgZm9udC1zaXplOjEyLjVweDsKICBjb2xvcjp2YXIoLS1tdXRlZCk7IGRpc3BsYXk6ZmxleDsgZ2FwOjlweDsgYWxpZ24taXRlbXM6ZmxleC1zdGFydDsgYm94LXNoYWRvdzp2YXIoLS1zaGFkb3ctc20pfQoucHYtc2FtcGxlLWhpbnQgLmlje21hcmdpbi10b3A6MXB4OyBjb2xvcjp2YXIoLS1yZWQpfQoucHYtc2FtcGxlLWhpbnQgYntjb2xvcjp2YXIoLS1pbmspfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZvbGxiaWxkICsgWm9vbSAqLwoud3otZnN7cG9zaXRpb246Zml4ZWQ7IGluc2V0OjA7IHotaW5kZXg6MTAwMDsgYmFja2dyb3VuZDojZjRmNmY4OyBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbn0KLnd6LWZzW2hpZGRlbl17ZGlzcGxheTpub25lfSAgIC8qIG11c3MgZGFzIGRpc3BsYXk6ZmxleCBvYmVuIHNjaGxhZ2VuLCBzb25zdCBzY2hsaWVzc3QgRVNDL1ggbmljaHQgKi8KLmZzLWJhcntkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjEycHg7IHBhZGRpbmc6MTBweCAxNHB4OyBiYWNrZ3JvdW5kOnZhcigtLWJnKTsKICBib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgZmxleC13cmFwOndyYXB9Ci5mcy1jb2Rle2ZvbnQtZmFtaWx5OidLdW1iaCBTYW5zJyx1aS1tb25vc3BhY2UsbW9ub3NwYWNlOyBmb250LXdlaWdodDo3MDA7IGZvbnQtc2l6ZToxNHB4OyBvdmVyZmxvdy13cmFwOmFueXdoZXJlfQouZnMtaGludHtmb250LXNpemU6MTEuNXB4OyBjb2xvcjp2YXIoLS1tdXRlZDIpOyBtYXJnaW4tbGVmdDphdXRvfQpAbWVkaWEgKG1heC13aWR0aDo5ODBweCl7IC5mcy1oaW50e2Rpc3BsYXk6bm9uZX0gfQouZnMtem9vbXtkaXNwbGF5OmlubGluZS1mbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDo1cHg7IG1hcmdpbi1sZWZ0OmF1dG99Ci5mcy1oaW50ICsgLmZzLXpvb217bWFyZ2luLWxlZnQ6MTRweH0KLmZzLXpvb20gYnV0dG9ue21pbi13aWR0aDo0MnB4OyBtaW4taGVpZ2h0OjQycHg7IGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsgYmFja2dyb3VuZDp2YXIoLS1iZyk7CiAgYm9yZGVyLXJhZGl1czoxMHB4OyBmb250LXNpemU6MTVweDsgZm9udC13ZWlnaHQ6NzAwOyBjb2xvcjp2YXIoLS1pbmspfQouZnMtem9vbSBidXR0b246YWN0aXZle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDFweCl9Ci5mcy16b29tIHNwYW57bWluLXdpZHRoOjU0cHg7IHRleHQtYWxpZ246Y2VudGVyOyBmb250LXNpemU6MTIuNXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30KLmZzLWNsb3Nle21pbi13aWR0aDo0NHB4OyBtaW4taGVpZ2h0OjQ0cHg7IGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsgYmFja2dyb3VuZDp2YXIoLS1iZyk7CiAgYm9yZGVyLXJhZGl1czoxMnB4OyBjb2xvcjp2YXIoLS1pbmspOyBkaXNwbGF5OmlubGluZS1mbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXJ9Ci5mcy1zdGFnZXtmbGV4OjE7IG92ZXJmbG93OmhpZGRlbjsgdG91Y2gtYWN0aW9uOm5vbmU7IGN1cnNvcjpncmFiOyBkaXNwbGF5OmdyaWQ7IHBsYWNlLWl0ZW1zOmNlbnRlcn0KLmZzLXN0YWdlOmFjdGl2ZXtjdXJzb3I6Z3JhYmJpbmd9Ci5mcy1jYW52YXN7d2lkdGg6bWluKDkydncsMTIwMHB4KTsgd2lsbC1jaGFuZ2U6dHJhbnNmb3JtfQouZnMtY2FudmFzIHN2Z3t3aWR0aDoxMDAlOyBoZWlnaHQ6YXV0bzsgZGlzcGxheTpibG9ja30KCi8qIFNpY2h0YmFyZXIgVGVpbGVuLUZhbGxiYWNrLCBmYWxscyBXZWIgU2hhcmUgQVBJIHVuZCBad2lzY2hlbmFibGFnZSBibG9ja2llcnQgc2luZC4gKi8KLnNoYXJlLWZhbGxiYWNre3Bvc2l0aW9uOmZpeGVkOyBpbnNldDowOyB6LWluZGV4OjEwMDIwOyBkaXNwbGF5OmdyaWQ7IHBsYWNlLWl0ZW1zOmNlbnRlcjsKICBwYWRkaW5nOjE2cHg7IGJhY2tncm91bmQ6cmdiYSgyMCwyNCwyOCwuNTgpfQouc2hhcmUtZmFsbGJhY2tbaGlkZGVuXXtkaXNwbGF5Om5vbmV9Ci5zaGFyZS1mYWxsYmFjay1jYXJke3Bvc2l0aW9uOnJlbGF0aXZlOyB3aWR0aDptaW4oNTYwcHgsMTAwJSk7IHBhZGRpbmc6MjRweDsgYm9yZGVyLXJhZGl1czoxNnB4OwogIGJhY2tncm91bmQ6dmFyKC0tYmcpOyBib3gtc2hhZG93OjAgMjRweCA3MHB4IHJnYmEoMCwwLDAsLjI4KX0KLnNoYXJlLWZhbGxiYWNrLWNhcmQgYntkaXNwbGF5OmJsb2NrOyBmb250LXNpemU6MThweDsgbWFyZ2luLWJvdHRvbTo2cHh9Ci5zaGFyZS1mYWxsYmFjay1jYXJkIHB7bWFyZ2luOjAgMzZweCAxMnB4IDA7IGNvbG9yOnZhcigtLW11dGVkKTsgbGluZS1oZWlnaHQ6MS40NX0KLnNoYXJlLWZhbGxiYWNrLWNhcmQgdGV4dGFyZWF7d2lkdGg6MTAwJTsgbWluLWhlaWdodDoxMzBweDsgcmVzaXplOnZlcnRpY2FsOyBwYWRkaW5nOjEycHg7CiAgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czoxMHB4OyBmb250OjEzcHgvMS40NSB2YXIoLS1tb25vKTsgb3ZlcmZsb3ctd3JhcDphbnl3aGVyZX0KLnNoYXJlLWZhbGxiYWNrLWNsb3Nle3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MTBweDsgcmlnaHQ6MTBweDsgd2lkdGg6NDRweDsgaGVpZ2h0OjQ0cHg7CiAgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOnZhcigtLWJnKTsgZm9udC1zaXplOjI0cHh9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhbnNraXp6ZSAvIERhdGVuYmxhdHQgKERydWNrKSAqLwojd3otZHN7ZGlzcGxheTpub25lOyBmb250LWZhbWlseTp2YXIoLS1mZik7IGNvbG9yOnZhcigtLWluayk7IGJhY2tncm91bmQ6I2ZmZn0KYm9keS53ei1wcmludGluZyAjd3otZHN7ZGlzcGxheTpibG9jazsgbWF4LXdpZHRoOjgyMHB4OyBtYXJnaW46MCBhdXRvOyBwYWRkaW5nOjE2cHh9Ci5kcy1oZWFke2Rpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7CiAgYm9yZGVyLWJvdHRvbToycHggc29saWQgdmFyKC0tcmVkKTsgcGFkZGluZy1ib3R0b206OHB4OyBtYXJnaW4tYm90dG9tOjEwcHh9Ci5kcy1icmFuZHtkaXNwbGF5OmZsZXg7IGdhcDo5cHg7IGFsaWduLWl0ZW1zOmNlbnRlcn0KLmRzLWJyYW5kIC5tYXJre3dpZHRoOjhweDsgaGVpZ2h0OjI2cHg7IGJhY2tncm91bmQ6dmFyKC0tcmVkKTsgYm9yZGVyLXJhZGl1czoycHg7IGRpc3BsYXk6aW5saW5lLWJsb2NrfQouZHMtYnJhbmQgYntmb250LXNpemU6MTdweDsgbGV0dGVyLXNwYWNpbmc6LjA0ZW19Ci5kcy1icmFuZCBpe2Rpc3BsYXk6YmxvY2s7IGZvbnQtc3R5bGU6bm9ybWFsOyBmb250LXNpemU6OC41cHg7IGZvbnQtd2VpZ2h0OjcwMDsgbGV0dGVyLXNwYWNpbmc6LjE0ZW07CiAgY29sb3I6dmFyKC0tbXV0ZWQyKTsgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfQouZHMtbWV0YXt0ZXh0LWFsaWduOnJpZ2h0OyBmb250LXNpemU6MTFweDsgY29sb3I6dmFyKC0tbXV0ZWQpfQouZHMtbWV0YSBie2Rpc3BsYXk6YmxvY2s7IGNvbG9yOnZhcigtLWluayk7IGZvbnQtc2l6ZToxM3B4fQouZHMtbWV0YSBzcGFue2Rpc3BsYXk6YmxvY2t9Ci5kcy1kcmF3e2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7IGJvcmRlci1yYWRpdXM6OHB4OyBtYXJnaW4tYm90dG9tOjhweDsgb3ZlcmZsb3c6aGlkZGVufQouZHMtZHJhdyBzdmcsLmRzLXJlbmRlciBzdmd7d2lkdGg6MTAwJTsgaGVpZ2h0OmF1dG87IGRpc3BsYXk6YmxvY2t9Ci5kcy1ncmlke2Rpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxLjE1ZnI7IGdhcDo4cHg7IG1hcmdpbi1ib3R0b206OHB4fQouZHMtcmVuZGVye2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7IGJvcmRlci1yYWRpdXM6OHB4OyBvdmVyZmxvdzpoaWRkZW47IGFsaWduLXNlbGY6c3RhcnR9Ci5kcy10YWJsZXt3aWR0aDoxMDAlOyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IGZvbnQtc2l6ZToxMC41cHh9Ci5kcy10YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpOyBwYWRkaW5nOjRweCA4cHg7IHZlcnRpY2FsLWFsaWduOnRvcH0KLmRzLXRhYmxlIHRkOmZpcnN0LWNoaWxke2NvbG9yOnZhcigtLW11dGVkKTsgd2lkdGg6NDAlfQouZHMtdGl0bGVibG9ja3t3aWR0aDoxMDAlOyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IG1hcmdpbi10b3A6MnB4fQouZHMtdGl0bGVibG9jayB0ZHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWluayk7IHBhZGRpbmc6NXB4IDhweDsgZm9udC1zaXplOjEwcHh9Ci5kcy10aXRsZWJsb2NrIGl7ZGlzcGxheTpibG9jazsgZm9udC1zdHlsZTpub3JtYWw7IGZvbnQtc2l6ZTo3LjVweDsgY29sb3I6dmFyKC0tbXV0ZWQpOwogIHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6LjA2ZW07IG1hcmdpbi1ib3R0b206MXB4fQouZHMtbm90ZXtmb250LXNpemU6OXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IG1hcmdpbi10b3A6NnB4OyBsaW5lLWhlaWdodDoxLjV9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc3BvbnNpdmUgKi8KQG1lZGlhIChtYXgtd2lkdGg6OTYwcHgpewogIC5sYXlvdXR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjsgZ2FwOjE4cHh9CiAgLnByZXZpZXd7cG9zaXRpb246c3RhdGljOyBvcmRlcjotMX0KICAuYXBwe3BhZGRpbmctYm90dG9tOjk2cHh9CiAgLm5hdntwb3NpdGlvbjpmaXhlZDsgbGVmdDowOyByaWdodDowOyBib3R0b206MDsgbWFyZ2luOjA7IHBhZGRpbmc6MTBweCAxNnB4IGNhbGMoMTBweCArIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSk7CiAgICBiYWNrZ3JvdW5kOnZhcigtLWJnKTsgYm9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7IHotaW5kZXg6NTA7IGJveC1zaGFkb3c6MCAtNnB4IDIwcHggLTE0cHggcmdiYSgyOCwyOCwyOCwuMyl9CiAgLm5hdiAubWluaXByaWNle2Rpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246Y29sdW1uOyBsaW5lLWhlaWdodDoxLjE1OyBtYXJnaW46MCBhdXRvIDAgNHB4fQogIC5uYXYgLm1pbmlwcmljZSAuYXtmb250LXdlaWdodDo4MDA7IGZvbnQtc2l6ZToxNnB4OyBmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9CiAgLm5hdiAubWluaXByaWNlIC5ie2ZvbnQtc2l6ZToxMC41cHg7IGNvbG9yOnZhcigtLW11dGVkMil9CiAgLyogRGFzIFdvcmRQcmVzcy1QbHVnaW4gcGFzc3QgZGllIHNyY2RvYy1pRnJhbWUtSMO2aGUgYW4gZGVuIEluaGFsdCBhbi4gRWluZSBpbQogICAgIGlGcmFtZSBmaXhpZXJ0ZSBMZWlzdGUgbMOkZ2UgcmVsYXRpdiB6dW0gZ2VzYW10ZW4gKHNlaHIgaG9oZW4pIERva3VtZW50IHVuZAogICAgIHfDpHJlIGltIHNpY2h0YmFyZW4gV29yZFByZXNzLUF1c3NjaG5pdHQgbmljaHQgenV2ZXJsw6Rzc2lnIGVycmVpY2hiYXIuICovCiAgaHRtbC53ei1lbWJlZGRlZCAuYXBwe3BhZGRpbmctYm90dG9tOjI2cHh9CiAgaHRtbC53ei1lbWJlZGRlZCAjd3otbmF2e3Bvc2l0aW9uOnN0YXRpYzsgbWFyZ2luLXRvcDoxOHB4OyBwYWRkaW5nOjEwcHggMCAwOwogICAgYmFja2dyb3VuZDp0cmFuc3BhcmVudDsgYm9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7IGJveC1zaGFkb3c6bm9uZX0KfQpAbWVkaWEgKG1pbi13aWR0aDo5NjFweCl7IC5uYXYgLm1pbmlwcmljZXtkaXNwbGF5Om5vbmV9IH0KQG1lZGlhIChtYXgtd2lkdGg6NTIwcHgpewogIC5hcHB7cGFkZGluZy1sZWZ0OjEycHg7IHBhZGRpbmctcmlnaHQ6MTJweH0KICAudG9wYmFye2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9CiAgLnRvcGJhciAuaGludHttYXgtd2lkdGg6MTY4cHg7IHRleHQtYWxpZ246cmlnaHQ7IGxpbmUtaGVpZ2h0OjEuNX0KICAudGlsZXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn0gLnJvdzJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn0gLmZvcm17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn0KICAuc2Vne2Rpc3BsYXk6ZmxleDsgd2lkdGg6MTAwJTsgbWF4LXdpZHRoOjEwMCV9CiAgLnNlZyBidXR0b257ZmxleDoxIDEgMTMycHg7IG1pbi13aWR0aDowOyB3aGl0ZS1zcGFjZTpub3JtYWw7IG92ZXJmbG93LXdyYXA6YW55d2hlcmV9CiAgLnB2LWhlYWR7cGFkZGluZy1sZWZ0OjEwcHg7IHBhZGRpbmctcmlnaHQ6MTBweH0KICAucHYtaGVhZCAubGJse2Rpc3BsYXk6bm9uZX0KICAucHYtYWN0aW9uc3t3aWR0aDoxMDAlOyBqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0KICAucHYtdG9nZ2xle2ZsZXg6MX0KICAucHYtdG9nZ2xlIGJ1dHRvbntmbGV4OjE7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IHBhZGRpbmctbGVmdDoxMHB4OyBwYWRkaW5nLXJpZ2h0OjEwcHh9CiAgLnB2LXR5cGVjb2Rle2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7IGZsZXgtd3JhcDp3cmFwfQogIC5wdi10eXBlY29kZSAuY29weXttYXJnaW4tbGVmdDowfQogIC5wYW5lbCAubmF2e2ZsZXgtd3JhcDp3cmFwfQogIC5wYW5lbCAubmF2IC5idG57ZmxleDoxIDEgMTQwcHg7IG1pbi13aWR0aDowOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBwYWRkaW5nLWxlZnQ6MTJweDsgcGFkZGluZy1yaWdodDoxMnB4OwogICAgd2hpdGUtc3BhY2U6bm9ybWFsOyB0ZXh0LWFsaWduOmNlbnRlcn0KICAjd3otbmF2e2dhcDo4cHg7IHBhZGRpbmctbGVmdDoxMnB4OyBwYWRkaW5nLXJpZ2h0OjEycHh9CiAgI3d6LW5hdiAuYnRue21pbi13aWR0aDowOyBwYWRkaW5nLWxlZnQ6MTJweDsgcGFkZGluZy1yaWdodDoxMnB4OyBmb250LXNpemU6MTNweDsgbGluZS1oZWlnaHQ6MS4xNTsKICAgIHRleHQtYWxpZ246Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBvdmVyZmxvdy13cmFwOmFueXdoZXJlfQogICN3ei1uYXYgLm1pbmlwcmljZXttaW4td2lkdGg6MDsgZmxleDowIDEgYXV0b30KICAuY2FydCAuY2l7YWxpZ24taXRlbXM6ZmxleC1zdGFydDsgZmxleC13cmFwOndyYXB9CiAgLmNhcnQgLmNpPmRpdjpmaXJzdC1jaGlsZHttaW4td2lkdGg6MDsgZmxleDoxIDEgMTcwcHh9CiAgLmNhcnQgLmNpIC5jb2Rle292ZXJmbG93LXdyYXA6YW55d2hlcmV9CiAgLnN0ZXAtaGVhZCBoMntmb250LXNpemU6MjBweH0KfQpAbWVkaWEgKG1heC13aWR0aDozNTlweCl7CiAgLnBhbmVsIC5uYXYgLmJ0bntmbGV4LWJhc2lzOjEwMCV9CiAgI3d6LW5hdiAuYnRuLmdob3N0e3dpZHRoOjQ4cHg7IGZsZXg6MCAwIDQ4cHg7IHBhZGRpbmc6MDsgZm9udC1zaXplOjB9CiAgI3d6LW5hdiAuYnRuLmdob3N0IC5pY3t3aWR0aDoyMHB4OyBoZWlnaHQ6MjBweH0KfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEcnVjay9QREYgKi8KQG1lZGlhIHByaW50ewogIC50b3BiYXIgLmhpbnQsLnByb2dyZXNzLC5uYXYsLnB2LXR5cGVjb2RlIC5jb3B5LC5saW5rYnRuLC5yZXNldGJ0biwubm90ZS1wbGgsLnB2LWhlYWQsLnd6LWZze2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9CiAgLmFwcHtwYWRkaW5nOjB9IC5sYXlvdXR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7IGdhcDoyMHB4fQogIC5wcmV2aWV3e3Bvc2l0aW9uOnN0YXRpY30gLnB2LWNhcmR7Ym94LXNoYWRvdzpub25lOyBib3JkZXI6MXB4IHNvbGlkICNjY2N9CiAgYm9keXtmb250LXNpemU6MTJweH0KICAvKiBQbGFuc2tpenplLU1vZHVzOiBudXIgZGFzIERhdGVuYmxhdHQgZHJ1Y2tlbiAqLwogIGJvZHkud3otcHJpbnRpbmcgLmFwcHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fQogIGJvZHkud3otcHJpbnRpbmcgI3d6LWRze2Rpc3BsYXk6YmxvY2s7IG1heC13aWR0aDpub25lOyBwYWRkaW5nOjB9CiAgQHBhZ2V7c2l6ZTpBNCBwb3J0cmFpdDsgbWFyZ2luOjEybW19Cn0KCi8qIHByZWZlcnMtcmVkdWNlZC1tb3Rpb24gKi8KQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7ICp7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudDsgYW5pbWF0aW9uOm5vbmUhaW1wb3J0YW50fSB9Cgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgogIDxtYWluIGNsYXNzPSJhcHAiIGlkPSJ3ei1hcHAiPgogICAgPGRpdiBjbGFzcz0idG9wYmFyIj4KICAgICAgPGRpdiBjbGFzcz0iYnJhbmQiPgogICAgICAgIDxzcGFuIGNsYXNzPSJtYXJrIj48L3NwYW4+CiAgICAgICAgPHNwYW4+PHNwYW4gY2xhc3M9Im4iPldFSVNTPC9zcGFuPjxzcGFuIGNsYXNzPSJzIj5GaXR0aW5ncy1Lb25maWd1cmF0b3I8L3NwYW4+PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaGludCIgaWQ9Ind6LXByaWNlLWhpbnQiPkRJTiAzMjY3NiA8Yj5hdWYgQW5mcmFnZTwvYj4gwrcgRElOIDExODY1IGF1ZiBBbmZyYWdlPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8bmF2IGNsYXNzPSJwcm9ncmVzcyIgaWQ9Ind6LXByb2dyZXNzIiBhcmlhLWxhYmVsPSJGb3J0c2Nocml0dCI+PC9uYXY+CgogICAgPGRpdiBjbGFzcz0ibGF5b3V0Ij4KICAgICAgPHNlY3Rpb24gY2xhc3M9InBhbmVsIiBpZD0id3otcGFuZWwiIGFyaWEtbGl2ZT0icG9saXRlIj48L3NlY3Rpb24+CiAgICAgIDxhc2lkZSBjbGFzcz0icHJldmlldyIgaWQ9Ind6LXByZXZpZXciIGFyaWEtbGFiZWw9IlZvcnNjaGF1Ij48L2FzaWRlPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ibmF2IiBpZD0id3otbmF2Ij48L2Rpdj4KICA8L21haW4+CgogIDxzY3JpcHQ+d2luZG93LldFSVNTX0RBVEE9eyJkaWNodHVuZ1dlaWNoIjpbIkVQRE0iLCJWTVEiLCJGS00iXSwibWV0YSI6eyJ2ZXJzaW9uIjoiMS4xIiwic3RhbmQiOiIyMDI2LTA3LTIyIiwiZWluaGVpdCI6Im1tIiwid2FlaHJ1bmciOiJFVVIiLCJzY29wZSI6IkRJTiAzMjY3NiArIERJTiAxMTg2NSAoUHJlaXNlIGF1ZiBBbmZyYWdlKSIsInZlcnRyaWViRW1haWwiOiJzdGVyaWx0ZWNobmlrQHdlaXNzLWFwcGFyYXRlYmF1LmRlIiwiaGlud2Vpc01hc3NlIjoiTWFzc2UgYXVzIEt1bmRlbnVudGVybGFnZW4gdW5kIHp1Z2VvcmRuZXRlbiBIZXJzdGVsbGVyZGF0ZW5ibGFldHRlcm47IHdpZGVyc3BydWVjaGxpY2hlIG9kZXIgZmVobGVuZGUgV2VydGUgYmxlaWJlbiBnZXNwZXJydC4ifSwiYW53ZW5kdW5nZW4iOlt7ImlkIjoicGhhcm1hIiwibGFiZWwiOiJQaGFybWEiLCJzdWIiOiJXRkksIERhbXBmLVNJUCwgaG9jaHJlaW4iLCJkZWZhdWx0cyI6eyJ3ZXJrc3RvZmYiOiIxLjQ0MzUiLCJvYmVyZmxhZWNoZSI6Ikg0IiwiZGljaHR1bmciOiJFUERNIn19LHsiaWQiOiJzdGVyaWx0ZWNobmlrIiwibGFiZWwiOiJTdGVyaWx0ZWNobmlrIiwic3ViIjoiQXNlcHRpaywgQ0lQXC9TSVAiLCJkZWZhdWx0cyI6eyJ3ZXJrc3RvZmYiOiIxLjQ0MDQiLCJvYmVyZmxhZWNoZSI6IlN0ZXJpbCIsImRpY2h0dW5nIjoiRVBETSJ9fSx7ImlkIjoibGViZW5zbWl0dGVsIiwibGFiZWwiOiJMZWJlbnNtaXR0ZWwiLCJzdWIiOiJHZXRyXHUwMGU0bmtlLCBNb2xrZXJlaSwgRm9vZCIsImRlZmF1bHRzIjp7IndlcmtzdG9mZiI6IjEuNDQwNCIsIm9iZXJmbGFlY2hlIjoiSDMiLCJkaWNodHVuZyI6IlZNUSJ9fSx7ImlkIjoiY2hlbWllIiwibGFiZWwiOiJDaGVtaWUiLCJzdWIiOiJMXHUwMGY2c2VtaXR0ZWwsIFNcdTAwZTR1cmVuLCBcdTAwZDZsZSIsImRlZmF1bHRzIjp7IndlcmtzdG9mZiI6IjEuNDQwNCIsIm9iZXJmbGFlY2hlIjoiSDEiLCJkaWNodHVuZyI6IkZLTSJ9fV0sIm5vcm1lbiI6W3siaWQiOiJkaW4zMjY3NiIsImxhYmVsIjoiRElOIDMyNjc2Iiwic3ViIjoiQ2xhbXB2ZXJiaW5kdW5nIiwicHJlaXNNb2R1cyI6ImFuZnJhZ2UiLCJoaW53ZWlzIjoiQ2xhbXBzdHV0emVuLCBCbGluZGRlY2tlbCwgS2xhbW1lcm4gXHUyMDEzIFByZWlzIGF1ZiBBbmZyYWdlLiJ9LHsiaWQiOiJkaW4xMTg2NSIsImxhYmVsIjoiRElOIDExODY1Iiwic3ViIjoiR2VzY2h3ZWlcdTAwZGZ0ZSBGaXR0aW5ncyIsInByZWlzTW9kdXMiOiJhbmZyYWdlIiwiaGlud2VpcyI6IkJcdTAwZjZnZW4sIFQtU3RcdTAwZmNja2UsIFJlZHV6aWVydW5nZW4gLSBhdWYgQW5mcmFnZSwgamUgbmFjaCBWZXJmXHUwMGZjZ2JhcmtlaXQuIn1dLCJ0eXBlbiI6W3siaWQiOiJUQyIsIm5vcm0iOiJkaW4zMjY3NiIsImxhYmVsIjoiS29tcGxldHRlIFRyaUNsYW1wIFZlcmJpbmR1bmciLCJzdWIiOiJBbnNjaHdlaXNzc3R1dHplbiBtaXQgQ2xhbXBhbnNjaGx1c3MiLCJzdmdUeXBlIjoiY2xhbXBzdHV0emVuIiwiZGljaHR1bmciOnRydWUsImxhZW5nZVZhcmlhbnRlIjp0cnVlLCJrb21wbGV0dGVWZXJiaW5kdW5nIjp0cnVlLCJha3RpdiI6dHJ1ZX0seyJpZCI6IlRDRCIsIm5vcm0iOiJkaW4zMjY3NiIsImxhYmVsIjoiVGFua3N0dXR6ZW4gZGlja3dhbmRpZyIsInN1YiI6IkFuc2Nod2Vpc3NzdHV0emVuIG1pdCBDbGFtcGFuc2NobHVzcyIsInN2Z1R5cGUiOiJjbGFtcHN0dXR6ZW4iLCJkaWNodHVuZyI6ZmFsc2UsImVpbnplbFN0dXR6ZW4iOnRydWUsIm1hc3NlUXVlbGxlIjoidGNkIiwiYWt0aXYiOnRydWV9LHsiaWQiOiJUQ1MiLCJub3JtIjoiZGluMzI2NzYiLCJsYWJlbCI6IlRDLVN0dXR6ZW4iLCJzdWIiOiJFaW56ZWxuZXIgVHJpQ2xhbXAtU3R1dHplbiIsInN2Z1R5cGUiOiJjbGFtcHN0dXR6ZW4iLCJkaWNodHVuZyI6ZmFsc2UsImxhZW5nZVZhcmlhbnRlIjp0cnVlLCJlaW56ZWxTdHV0emVuIjp0cnVlLCJha3RpdiI6dHJ1ZX0seyJpZCI6IkJEIiwibm9ybSI6ImRpbjMyNjc2IiwibGFiZWwiOiJCbGluZGRlY2tlbCIsInN1YiI6IlZlcnNjaGxpZXNzdCBlaW5lbiBDbGFtcGFuc2NobHVzcyIsInN2Z1R5cGUiOiJibGluZGRlY2tlbCIsImRpY2h0dW5nIjpmYWxzZSwibnVyRmxhbnNjaCI6dHJ1ZSwiYWt0aXYiOnRydWV9LHsiaWQiOiJEIiwibm9ybSI6ImRpbjMyNjc2IiwibGFiZWwiOiJEaWNodHVuZyIsInN1YiI6IkVpbnplbG5lIERpY2h0dW5nIiwic3ZnVHlwZSI6ImRpY2h0dW5nIiwiZGljaHR1bmciOnRydWUsImFrdGl2Ijp0cnVlfSx7ImlkIjoiS0wiLCJub3JtIjoiZGluMzI2NzYiLCJsYWJlbCI6IktsYW1tZXIgXC8gU3Bhbm5yaW5nIiwic3ViIjoiR3JcdTAwZjZcdTAwZGZlIG5hY2ggRmxhbnNjaC1cdTAwZDgiLCJzdmdUeXBlIjoia2xhbW1lciIsImRpY2h0dW5nIjpmYWxzZSwibnVyRmxhbnNjaCI6dHJ1ZSwia2xhbW1lclR5cGVuIjp0cnVlLCJha3RpdiI6dHJ1ZX0seyJpZCI6IkNGIiwibm9ybSI6ImRpbjMyNjc2IiwibGFiZWwiOiJDb25uZWN0LUZsYW5zY2giLCJzdWIiOiJXYW5kYlx1MDBmY25kaWdlciBCZWhcdTAwZTRsdGVyYW5zY2hsdXNzIiwic3ZnVHlwZSI6ImNvbm5lY3RmbGFuc2NoIiwiZGljaHR1bmciOmZhbHNlLCJtYXNzZVF1ZWxsZSI6ImNmIiwiY29ubmVjdCI6dHJ1ZSwiYWt0aXYiOnRydWV9LHsiaWQiOiJDRkkiLCJub3JtIjoiZGluMzI2NzYiLCJsYWJlbCI6IkNvbm5lY3QtRmxhbnNjaCBJbmxpbmUiLCJzdWIiOiJJbmxpbmUtQXVzZlx1MDBmY2hydW5nIiwic3ZnVHlwZSI6ImNvbm5lY3RpbmxpbmUiLCJkaWNodHVuZyI6ZmFsc2UsIm1hc3NlUXVlbGxlIjoiY2ZpIiwiY29ubmVjdCI6dHJ1ZSwiYWt0aXYiOnRydWV9LHsiaWQiOiJCOTAiLCJub3JtIjoiZGluMTE4NjUiLCJsYWJlbCI6IkJvZ2VuIDkwXHUwMGIwIiwic3ViIjoiRm9ybSBCTC05MCIsInN2Z1R5cGUiOiJib2dlbjkwIiwiYm9nZW4iOjkwLCJkaWNodHVuZyI6ZmFsc2UsImFrdGl2Ijp0cnVlLCJtYXNzZVF1ZWxsZSI6ImRpbjExODY1LmJvZWdlbiJ9LHsiaWQiOiJCNDUiLCJub3JtIjoiZGluMTE4NjUiLCJsYWJlbCI6IkJvZ2VuIDQ1XHUwMGIwIiwic3ViIjoiRm9ybSBCTC00NSIsInN2Z1R5cGUiOiJib2dlbjQ1IiwiYm9nZW4iOjQ1LCJkaWNodHVuZyI6ZmFsc2UsImFrdGl2Ijp0cnVlLCJtYXNzZVF1ZWxsZSI6ImRpbjExODY1LmJvZWdlbiJ9LHsiaWQiOiJUUyIsIm5vcm0iOiJkaW4xMTg2NSIsImxhYmVsIjoiVC1TdFx1MDBmY2NrIiwic3ViIjoiZ2xlaWNoIFx1MDBiNyBtZXRyaXNjaFwvSVNPXC9ab2xsIFx1MDBiNyBGb3JtIFQgXC8gRm9ybSBUSyIsInN2Z1R5cGUiOiJ0c3R1ZWNrIiwiZm9ybVdhaGwiOnRydWUsImRpY2h0dW5nIjpmYWxzZSwiYWt0aXYiOnRydWUsIm1hc3NlUXVlbGxlIjoiZGluMTE4NjUudFN0dWVja0dsZWljaCJ9LHsiaWQiOiJUU1IiLCJub3JtIjoiZGluMTE4NjUiLCJsYWJlbCI6IlQtU3RcdTAwZmNjayByZWR1emllcnQiLCJzdWIiOiJrbGVpbmVyZXIgQWJnYW5nIFx1MDBiNyBGb3JtIFQgXC8gRm9ybSBUSyIsInN2Z1R5cGUiOiJ0c3R1ZWNrIiwicmVkdXppZXJ0Ijp0cnVlLCJ6d2VpdGVHcm9lc3NlIjp0cnVlLCJmb3JtV2FobCI6dHJ1ZSwiZGljaHR1bmciOmZhbHNlLCJha3RpdiI6dHJ1ZSwibWFzc2VRdWVsbGUiOiJkaW4xMTg2NS50U3R1ZWNrUmVkdXppZXJ0In0seyJpZCI6IlIiLCJub3JtIjoiZGluMTE4NjUiLCJsYWJlbCI6IlJlZHV6aWVydW5nIiwic3ViIjoia29uemVudHJpc2NoIChGb3JtIFJLKSBcLyBleHplbnRyaXNjaCAoRm9ybSBSRSkiLCJzdmdUeXBlIjoicmVkdXppZXJ1bmciLCJ6d2VpdGVHcm9lc3NlIjp0cnVlLCJleHplbnRyaXNjaFdhaGwiOnRydWUsImRpY2h0dW5nIjpmYWxzZSwiYWt0aXYiOnRydWUsIm1hc3NlUXVlbGxlIjoiZGluMTE4NjUucmVkdXppZXJ1bmcifV0sIm1hc3NlIjp7ImRpbjMyNjc2Ijp7InJlaWhlbiI6eyJBIjp7ImxhYmVsIjoiUmVpaGUgQSAtIG1ldHJpc2NoIChETiwgRElOIDExODUwKSIsImdyb2Vzc2UiOiJETiIsInJvd3MiOlt7ImlkIjoiRE4wNiIsImxhYmVsIjoiRE4wNiIsInR1YmVPRCI6OCwidHViZUlEIjo2LCJ3YWxsIjoxLCJmbGFuZ2VPRCI6MjUsImJsaW5kVGhrIjo0Ljc1LCJrayI6MTIuNywia2wiOjI4LjYsImdhc2tldE9EIjoyMiwiZ2Fza2V0SUQiOjkuNywiZ2Fza2V0VHlwZSI6IkkifSx7ImlkIjoiRE4wOCIsImxhYmVsIjoiRE4wOCIsInR1YmVPRCI6MTAsInR1YmVJRCI6OCwid2FsbCI6MSwiZmxhbmdlT0QiOjI1LCJibGluZFRoayI6NC43NSwia2siOjEyLjcsImtsIjoyOC42LCJnYXNrZXRPRCI6MjIsImdhc2tldElEIjo4LjIsImdhc2tldElEcHRmZSI6OCwiZ2Fza2V0VHlwZSI6IkkifSx7ImlkIjoiRE4xMCIsImxhYmVsIjoiRE4xMCIsInR1YmVPRCI6MTMsInR1YmVJRCI6MTAsIndhbGwiOjEuNSwiZmxhbmdlT0QiOjM0LCJibGluZFRoayI6Ni4zNSwia2siOjE4LCJrbCI6MjguNiwiZ2Fza2V0T0QiOjM0LCJnYXNrZXRJRCI6MTIuNywiZ2Fza2V0VHlwZSI6IklJIn0seyJpZCI6IkROMTUiLCJsYWJlbCI6IkROMTUiLCJ0dWJlT0QiOjE5LCJ0dWJlSUQiOjE2LCJ3YWxsIjoxLjUsImZsYW5nZU9EIjozNCwiYmxpbmRUaGsiOjYuMzUsImtrIjoxOCwia2wiOjI4LjYsImdhc2tldE9EIjozNCwiZ2Fza2V0SUQiOjE4LjIsImdhc2tldFR5cGUiOiJJSSJ9LHsiaWQiOiJETjIwIiwibGFiZWwiOiJETjIwIiwidHViZU9EIjoyMywidHViZUlEIjoyMCwid2FsbCI6MS41LCJmbGFuZ2VPRCI6MzQsImJsaW5kVGhrIjo2LjM1LCJrayI6MTgsImtsIjoyOC42LCJnYXNrZXRPRCI6MzQsImdhc2tldElEIjoyMi4yLCJnYXNrZXRUeXBlIjoiSUkifSx7ImlkIjoiRE4yNSIsImxhYmVsIjoiRE4yNSIsInR1YmVPRCI6MjksInR1YmVJRCI6MjYsIndhbGwiOjEuNSwiZmxhbmdlT0QiOjUwLjUsImJsaW5kVGhrIjo2LjM1LCJrayI6MjEuNSwia2wiOjM2LCJnYXNrZXRPRCI6NTAuNSwiZ2Fza2V0SUQiOjI3LjcsImdhc2tldFR5cGUiOiJJSSJ9LHsiaWQiOiJETjMyIiwibGFiZWwiOiJETjMyIiwidHViZU9EIjozNSwidHViZUlEIjozMiwid2FsbCI6MS41LCJmbGFuZ2VPRCI6NTAuNSwiYmxpbmRUaGsiOjYuMzUsImtrIjoyMS41LCJrbCI6MzYsImdhc2tldE9EIjo1MC41LCJnYXNrZXRJRCI6MzIuNywiZ2Fza2V0VHlwZSI6IklJIn0seyJpZCI6IkRONDAiLCJsYWJlbCI6IkRONDAiLCJ0dWJlT0QiOjQxLCJ0dWJlSUQiOjM4LCJ3YWxsIjoxLjUsImZsYW5nZU9EIjo1MC41LCJibGluZFRoayI6Ni4zNSwia2siOjIxLjUsImtsIjozNiwiZ2Fza2V0T0QiOjUwLjUsImdhc2tldElEIjozOC43LCJnYXNrZXRUeXBlIjoiSUkifSx7ImlkIjoiRE41MCIsImxhYmVsIjoiRE41MCIsInR1YmVPRCI6NTMsInR1YmVJRCI6NTAsIndhbGwiOjEuNSwiZmxhbmdlT0QiOjY0LCJibGluZFRoayI6Ni4zNSwia2siOjI4LCJrbCI6MzYsImdhc2tldE9EIjo2NCwiZ2Fza2V0SUQiOjUwLjcsImdhc2tldFR5cGUiOiJJSSJ9LHsiaWQiOiJETjY1IiwibGFiZWwiOiJETjY1IiwidHViZU9EIjo3MCwidHViZUlEIjo2Niwid2FsbCI6MiwiZmxhbmdlT0QiOjkxLCJibGluZFRoayI6Ni4zNSwia2siOjI4LCJrbCI6NDgsImdhc2tldE9EIjo5MSwiZ2Fza2V0SUQiOjY2LjIsImdhc2tldFR5cGUiOiJJSSJ9LHsiaWQiOiJETjgwIiwibGFiZWwiOiJETjgwIiwidHViZU9EIjo4NSwidHViZUlEIjo4MSwid2FsbCI6MiwiZmxhbmdlT0QiOjEwNiwiYmxpbmRUaGsiOjYuMzUsImtrIjoyOCwia2wiOjQ4LCJnYXNrZXRPRCI6MTA2LCJnYXNrZXRJRCI6ODEuMiwiZ2Fza2V0VHlwZSI6IklJIn0seyJpZCI6IkROMTAwIiwibGFiZWwiOiJETjEwMCIsInR1YmVPRCI6MTA0LCJ0dWJlSUQiOjEwMCwid2FsbCI6MiwiZmxhbmdlT0QiOjExOSwiYmxpbmRUaGsiOjgsImtrIjoyOCwia2wiOjQ4LCJnYXNrZXRPRCI6MTE5LCJnYXNrZXRJRCI6MTAwLjIsImdhc2tldFR5cGUiOiJJSSJ9LHsiaWQiOiJETjEyNSIsImxhYmVsIjoiRE4xMjUiLCJ0dWJlT0QiOjEyOSwidHViZUlEIjoxMjUsIndhbGwiOjIsImZsYW5nZU9EIjoxNTUsImJsaW5kVGhrIjo4LCJrayI6MjgsImtsIjo2NiwiZ2Fza2V0T0QiOjE1NSwiZ2Fza2V0SUQiOjEyNS4yfSx7ImlkIjoiRE4xNTAiLCJsYWJlbCI6IkROMTUwIiwidHViZU9EIjoxNTQsInR1YmVJRCI6MTUwLCJ3YWxsIjoyLCJmbGFuZ2VPRCI6MTgzLCJibGluZFRoayI6MTQsImtrIjoyOCwia2wiOjY2LCJnYXNrZXRPRCI6MTgzLCJnYXNrZXRJRCI6MTUwLjJ9LHsiaWQiOiJETjIwMCIsImxhYmVsIjoiRE4yMDAiLCJ0dWJlT0QiOjIwNCwidHViZUlEIjoyMDAsIndhbGwiOjIsImZsYW5nZU9EIjoyMzMuNSwiYmxpbmRUaGsiOjE0LCJrayI6MjgsImtsIjo2NiwiZ2Fza2V0T0QiOjIzMy41LCJnYXNrZXRJRCI6MjAwLjJ9XX0sIkIiOnsibGFiZWwiOiJSZWloZSBCIC0gbWV0cmlzY2ggSVNPIChPRCwgRU4gSVNPIDExMjcpIiwiZ3JvZXNzZSI6Ik9EIiwicm93cyI6W3siaWQiOiJOVzEwLjIiLCJsYWJlbCI6Ik5XIDEwLDIiLCJ0dWJlT0QiOjEwLjIsInR1YmVJRCI6Nywid2FsbCI6MS42LCJmbGFuZ2VPRCI6MjUsImJsaW5kVGhrIjo0Ljc1LCJrayI6MTIuNywia2wiOjI4LjYsImdhc2tldE9EIjoyMiwiZ2Fza2V0SUQiOjEyLCJnYXNrZXRJRHB0ZmUiOjcuMiwiZ2Fza2V0VHlwZSI6IkkifSx7ImlkIjoiTlcxMy41IiwibGFiZWwiOiJOVyAxMyw1IiwidHViZU9EIjoxMy41LCJ0dWJlSUQiOjEwLjMsIndhbGwiOjEuNiwiZmxhbmdlT0QiOjI1LCJibGluZFRoayI6NC43NSwia2siOjEyLjcsImtsIjoyOC42LCJnYXNrZXRPRCI6MjIsImdhc2tldElEIjoxNS43LCJnYXNrZXRJRHB0ZmUiOjEwLjUsImdhc2tldFR5cGUiOiJJIn0seyJpZCI6Ik5XMTcuMiIsImxhYmVsIjoiTlcgMTcsMiIsInR1YmVPRCI6MTcuMiwidHViZUlEIjoxNCwid2FsbCI6MS42LCJmbGFuZ2VPRCI6MjUsImJsaW5kVGhrIjo0Ljc1LCJrayI6MTIuNywia2wiOjI4LjYsImdhc2tldE9EIjoyMiwiZ2Fza2V0SUQiOjE0LjIsImdhc2tldFR5cGUiOiJJIn0seyJpZCI6Ik5XMjEuMyIsImxhYmVsIjoiTlcgMjEsMyIsInR1YmVPRCI6MjEuMywidHViZUlEIjoxOC4xLCJ3YWxsIjoxLjYsImZsYW5nZU9EIjo1MC41LCJibGluZFRoayI6Ni4zNSwia2siOjIxLjUsImtsIjozNiwiZ2Fza2V0T0QiOjUwLjUsImdhc2tldElEIjoyNC45LCJnYXNrZXRUeXBlIjoiSUkifSx7ImlkIjoiTlcyNi45IiwibGFiZWwiOiJOVyAyNiw5IiwidHViZU9EIjoyNi45LCJ0dWJlSUQiOjIzLjcsIndhbGwiOjEuNiwiZmxhbmdlT0QiOjUwLjUsImJsaW5kVGhrIjo2LjM1LCJrayI6MjEuNSwia2wiOjM2LCJnYXNrZXRPRCI6NTAuNSwiZ2Fza2V0SUQiOjIzLjl9LHsiaWQiOiJOVzMzLjciLCJsYWJlbCI6Ik5XIDMzLDciLCJ0dWJlT0QiOjMzLjcsInR1YmVJRCI6MjkuNywid2FsbCI6MiwiZmxhbmdlT0QiOjUwLjUsImJsaW5kVGhrIjo2LjM1LCJrayI6MjEuNSwia2wiOjM2LCJnYXNrZXRPRCI6NTAuNSwiZ2Fza2V0SUQiOjMwLjksImdhc2tldFR5cGUiOiJJSSJ9LHsiaWQiOiJOVzQyLjQiLCJsYWJlbCI6Ik5XIDQyLDQiLCJ0dWJlT0QiOjQyLjQsInR1YmVJRCI6MzguNCwid2FsbCI6MiwiZmxhbmdlT0QiOjY0LCJibGluZFRoayI6Ni4zNSwia2siOjIxLjUsImtsIjozNiwiZ2Fza2V0T0QiOjY0LCJnYXNrZXRJRCI6MzkuMSwiZ2Fza2V0VHlwZSI6IklJIn0seyJpZCI6Ik5XNDguMyIsImxhYmVsIjoiTlcgNDgsMyIsInR1YmVPRCI6NDguMywidHViZUlEIjo0NC4zLCJ3YWxsIjoyLCJmbGFuZ2VPRCI6NjQsImJsaW5kVGhrIjo2LjM1LCJrayI6MjEuNSwia2wiOjM2LCJnYXNrZXRPRCI6NjQsImdhc2tldElEIjo0NSwiZ2Fza2V0VHlwZSI6IklJIn0seyJpZCI6Ik5XNjAuMyIsImxhYmVsIjoiTlcgNjAsMyIsInR1YmVPRCI6NjAuMywidHViZUlEIjo1Ni4zLCJ3YWxsIjoyLCJmbGFuZ2VPRCI6NzcuNSwiYmxpbmRUaGsiOjYuMzUsImtrIjoyOCwia2wiOjM2LCJnYXNrZXRPRCI6NzcuNSwiZ2Fza2V0SUQiOjU3LCJnYXNrZXRUeXBlIjoiSUkifSx7ImlkIjoiTlc3Ni4xIiwibGFiZWwiOiJOVyA3NiwxIiwidHViZU9EIjo3Ni4xLCJ0dWJlSUQiOjcyLjEsIndhbGwiOjIsImZsYW5nZU9EIjo5MSwiYmxpbmRUaGsiOjYuMzUsImtrIjoyOCwia2wiOjQ4LCJnYXNrZXRPRCI6OTEsImdhc2tldElEIjo3Mi4zfSx7ImlkIjoiTlc4OC45IiwibGFiZWwiOiJOVyA4OCw5IiwidHViZU9EIjo4OC45LCJ0dWJlSUQiOjg0LjMsIndhbGwiOjIuMywiZmxhbmdlT0QiOjEwNiwiYmxpbmRUaGsiOjYuMzUsImtrIjoyOCwia2wiOjQ4LCJnYXNrZXRPRCI6MTA2LCJnYXNrZXRJRCI6ODQuNX0seyJpZCI6Ik5XMTE0LjMiLCJsYWJlbCI6Ik5XIDExNCwzIiwidHViZU9EIjoxMTQuMywidHViZUlEIjoxMDkuNywid2FsbCI6Mi4zLCJmbGFuZ2VPRCI6MTMwLCJibGluZFRoayI6OCwia2siOjI4LCJrbCI6NDgsImdhc2tldE9EIjoxMzAsImdhc2tldElEIjoxMDkuOX0seyJpZCI6Ik5XMTM5LjciLCJsYWJlbCI6Ik5XIDEzOSw3IiwidHViZU9EIjoxMzkuNywidHViZUlEIjoxMzQuNSwid2FsbCI6Mi42LCJmbGFuZ2VPRCI6MTU1LCJibGluZFRoayI6OCwia2siOjI4LCJrbCI6NjYsImdhc2tldE9EIjoxNTUsImdhc2tldElEIjoxMzQuN30seyJpZCI6Ik5XMTY4LjMiLCJsYWJlbCI6Ik5XIDE2OCwzIiwidHViZU9EIjoxNjguMywidHViZUlEIjoxNjMuMSwid2FsbCI6Mi42LCJmbGFuZ2VPRCI6MTgzLCJibGluZFRoayI6MTQsImtrIjoyOCwia2wiOjY2LCJnYXNrZXRPRCI6MTgzLCJnYXNrZXRJRCI6MTYzLjN9LHsiaWQiOiJOVzIxOS4xIiwibGFiZWwiOiJOVyAyMTksMSIsInR1YmVPRCI6MjE5LjEsInR1YmVJRCI6MjEzLjksIndhbGwiOjIuNiwiZmxhbmdlT0QiOjIzMy41LCJibGluZFRoayI6MTQsImtrIjoyOCwia2wiOjY2LCJnYXNrZXRPRCI6MjMzLjUsImdhc2tldElEIjoyMTQuMX1dfSwiQyI6eyJsYWJlbCI6IlJlaWhlIEMgLSBab2xsXC9PRCAoQVNNRS1CUEUtbmFoKSIsImdyb2Vzc2UiOiJab2xsIiwicm93cyI6W3siaWQiOiIwLjI1IiwibGFiZWwiOiIxXC80XCIiLCJ0dWJlT0QiOjYuMzUsInR1YmVJRCI6NC41Nywid2FsbCI6MC44OSwiZmxhbmdlT0QiOjI1LCJibGluZFRoayI6NC43NSwia2siOjEyLjcsImtsIjoyOC42LCJnYXNrZXRPRCI6MjIsImdhc2tldElEIjo0Ljh9LHsiaWQiOiIwLjM3NSIsImxhYmVsIjoiM1wvOFwiIiwidHViZU9EIjo5LjUzLCJ0dWJlSUQiOjcuNzUsIndhbGwiOjAuODksImZsYW5nZU9EIjoyNSwiYmxpbmRUaGsiOjQuNzUsImtrIjoxMi43LCJrbCI6MjguNiwiZ2Fza2V0T0QiOjIyLCJnYXNrZXRJRCI6OH0seyJpZCI6IjAuNSIsImxhYmVsIjoiMVwvMlwiIiwidHViZU9EIjoxMi43LCJ0dWJlSUQiOjkuNCwid2FsbCI6MS42NSwiZmxhbmdlT0QiOjI1LCJibGluZFRoayI6NC43NSwia2siOjEyLjcsImtsIjoyOC42LCJnYXNrZXRPRCI6MjIsImdhc2tldElEIjo5LjZ9LHsiaWQiOiIwLjc1IiwibGFiZWwiOiIzXC80XCIiLCJ0dWJlT0QiOjE5LjA1LCJ0dWJlSUQiOjE1Ljc1LCJ3YWxsIjoxLjY1LCJmbGFuZ2VPRCI6MjUsImJsaW5kVGhrIjo0Ljc1LCJrayI6MTIuNywia2wiOjI4LjYsImdhc2tldE9EIjoyMiwiZ2Fza2V0SUQiOjE2fSx7ImlkIjoiMSIsImxhYmVsIjoiMVwiIiwidHViZU9EIjoyNS40LCJ0dWJlSUQiOjIyLjEsIndhbGwiOjEuNjUsImZsYW5nZU9EIjo1MC41LCJibGluZFRoayI6Ni4zNSwia2siOjIxLjUsImtsIjozNiwiZ2Fza2V0T0QiOjUwLjUsImdhc2tldElEIjoyMi4zfSx7ImlkIjoiMS41IiwibGFiZWwiOiIxIDFcLzJcIiIsInR1YmVPRCI6MzguMSwidHViZUlEIjozNC44LCJ3YWxsIjoxLjY1LCJmbGFuZ2VPRCI6NTAuNSwiYmxpbmRUaGsiOjYuMzUsImtrIjoyMS41LCJrbCI6MzYsImdhc2tldE9EIjo1MC41LCJnYXNrZXRJRCI6MzV9LHsiaWQiOiIyIiwibGFiZWwiOiIyXCIiLCJ0dWJlT0QiOjUwLjgsInR1YmVJRCI6NDcuNSwid2FsbCI6MS42NSwiZmxhbmdlT0QiOjY0LCJibGluZFRoayI6Ni4zNSwia2siOjIxLjUsImtsIjozNiwiZ2Fza2V0T0QiOjY0LCJnYXNrZXRJRCI6NDcuN30seyJpZCI6IjIuNSIsImxhYmVsIjoiMiAxXC8yXCIiLCJ0dWJlT0QiOjYzLjUsInR1YmVJRCI6NjAuMiwid2FsbCI6MS42NSwiZmxhbmdlT0QiOjc3LjUsImJsaW5kVGhrIjo2LjM1LCJrayI6MjgsImtsIjozNiwiZ2Fza2V0T0QiOjc3LjUsImdhc2tldElEIjo2MC40fSx7ImlkIjoiMyIsImxhYmVsIjoiM1wiIiwidHViZU9EIjo3Ni4yLCJ0dWJlSUQiOjcyLjksIndhbGwiOjEuNjUsImZsYW5nZU9EIjo5MSwiYmxpbmRUaGsiOjYuMzUsImtrIjoyOCwia2wiOjQ4LCJnYXNrZXRPRCI6OTEsImdhc2tldElEIjo3My4xfSx7ImlkIjoiNCIsImxhYmVsIjoiNFwiIiwidHViZU9EIjoxMDEuNiwidHViZUlEIjo5Ny4zOCwid2FsbCI6Mi4xMSwiZmxhbmdlT0QiOjExOSwiYmxpbmRUaGsiOjgsImtrIjoyOCwia2wiOjQ4LCJnYXNrZXRPRCI6MTE5LCJnYXNrZXRJRCI6OTcuNn0seyJpZCI6IjYiLCJsYWJlbCI6IjZcIiIsInR1YmVPRCI6MTUyLjQsInR1YmVJRCI6MTQ2Ljg2LCJ3YWxsIjoyLjc3LCJmbGFuZ2VPRCI6MTY3LCJibGluZFRoayI6MTQsImtrIjoyOCwia2wiOjY2LCJnYXNrZXRPRCI6MTY3LCJnYXNrZXRJRCI6MTQ3LjF9XX19LCJsNCI6eyJBIjp7IkROMDYiOnsiS0siOjI1LjQsIktMIjo1Ny4yfSwiRE4wOCI6eyJLSyI6MjUuNCwiS0wiOjU3LjJ9LCJETjEwIjp7IktLIjozNy43LCJLTCI6NTguOX0sIkROMTUiOnsiS0siOjM3LjcsIktMIjo1OC45fSwiRE4yMCI6eyJLSyI6MzcuNywiS0wiOjU4Ljl9LCJETjI1Ijp7IktLIjo0NC43LCJLTCI6NzMuN30sIkROMzIiOnsiS0siOjQ0LjcsIktMIjo3My43fSwiRE40MCI6eyJLSyI6NDQuNywiS0wiOjczLjd9LCJETjUwIjp7IktLIjo0NC43LCJLTCI6NzMuN30sIkRONjUiOnsiS0siOjU3LjcsIktMIjo5Ny43fSwiRE44MCI6eyJLSyI6NTcuNywiS0wiOjk3Ljd9LCJETjEwMCI6eyJLSyI6NTcuNywiS0wiOjk3Ljd9LCJETjEyNSI6eyJLSyI6NTcuNywiS0wiOjEzMy43fSwiRE4xNTAiOnsiS0siOjU3LjcsIktMIjoxMzMuN30sIkROMjAwIjp7IktLIjo1Ny43LCJLTCI6MTMzLjd9fSwiQiI6eyJOVzEwLjIiOnsiS0siOjI1LjQsIktMIjo1Ny4yfSwiTlcxMy41Ijp7IktLIjoyNS40LCJLTCI6NTcuMn0sIk5XMTcuMiI6eyJLSyI6MjUuNCwiS0wiOjU3LjJ9LCJOVzIxLjMiOnsiS0siOjQ0LjcsIktMIjo3My43fSwiTlcyNi45Ijp7IktLIjo0NC43LCJLTCI6NzMuN30sIk5XMzMuNyI6eyJLSyI6NDQuNywiS0wiOjczLjd9LCJOVzQyLjQiOnsiS0siOjQ0LjcsIktMIjo3My43fSwiTlc0OC4zIjp7IktLIjo0NC43LCJLTCI6NzMuN30sIk5XNjAuMyI6eyJLSyI6NTcuNywiS0wiOjczLjd9LCJOVzc2LjEiOnsiS0siOjU3LjcsIktMIjo5Ny43fSwiTlc4OC45Ijp7IktLIjo1Ny43LCJLTCI6OTcuN30sIk5XMTE0LjMiOnsiS0siOjU3LjcsIktMIjo5Ny43fSwiTlcxMzkuNyI6eyJLSyI6NTcuNywiS0wiOjEzMy43fSwiTlcxNjguMyI6eyJLSyI6NTcuNywiS0wiOjEzMy43fSwiTlcyMTkuMSI6eyJLSyI6NTcuNywiS0wiOjEzMy43fX0sIkMiOnsiMSI6eyJLSyI6NDMsIktMIjo3My43fSwiMiI6eyJLSyI6NDMsIktMIjo3My43fSwiMyI6eyJLSyI6NTYsIktMIjo5Ny43fSwiNCI6eyJLSyI6NTYsIktMIjo5Ny43fSwiNiI6eyJLSyI6NTYsIktMIjoxMzMuN30sIjAuMjUiOnsiS0siOjI1LjQsIktMIjo1Ny4yfSwiMC4zNzUiOnsiS0siOjI1LjQsIktMIjo1Ny4yfSwiMC41Ijp7IktLIjoyNS40LCJLTCI6NTcuMn0sIjAuNzUiOnsiS0siOjI1LjQsIktMIjo1Ny4yfSwiMS41Ijp7IktLIjo0MywiS0wiOjczLjd9LCIyLjUiOnsiS0siOjU2LCJLTCI6NzMuN319fX0sImJvZ2VuOTAiOnsiQSI6W3siaWQiOiJETjA2IiwidHViZU9EIjo4LCJ3YWxsIjoxLCJSIjoyMCwiTDEiOjQ1LCJMMiI6MzMuMywiTDNfNDUiOjI1LCJMM185MCI6MjUsIkMiOjQ1LCJDMSI6MjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjA4IiwidHViZU9EIjoxMCwid2FsbCI6MSwiUiI6MjUsIkwxIjo1MCwiTDIiOjM1LjQsIkwzXzQ1IjoyNSwiTDNfOTAiOjI1LCJDIjo1MCwiQzEiOjI1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4xMCIsInR1YmVPRCI6MTMsIndhbGwiOjEuNSwiUiI6MjYsIkwxIjo1MSwiTDIiOjM1LjgsIkwzXzQ1IjoyNSwiTDNfOTAiOjI1LCJDIjo1MSwiQzEiOjI1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4xNSIsInR1YmVPRCI6MTksIndhbGwiOjEuNSwiUiI6MzUsIkwxIjo2MCwiTDIiOjM5LjUsIkwzXzQ1IjoyNSwiTDNfOTAiOjI1LCJDIjo2MCwiQzEiOjI1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4yMCIsInR1YmVPRCI6MjMsIndhbGwiOjEuNSwiUiI6NDAsIkwxIjo2NSwiTDIiOjQxLjYsIkwzXzQ1IjoyNSwiTDNfOTAiOjI1LCJDIjo2NSwiQzEiOjI1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4yNSIsInR1YmVPRCI6MjksIndhbGwiOjEuNSwiUiI6NTAsIkwxIjo5MCwiTDIiOjYwLjcsIkwzXzQ1Ijo0MCwiTDNfOTAiOjQwLCJDIjo5MCwiQzEiOjQwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4zMiIsInR1YmVPRCI6MzUsIndhbGwiOjEuNSwiUiI6NTUsIkwxIjo5NSwiTDIiOjYyLjgsIkwzXzQ1Ijo0MCwiTDNfOTAiOjQwLCJDIjo5NSwiQzEiOjQwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE40MCIsInR1YmVPRCI6NDEsIndhbGwiOjEuNSwiUiI6NjAsIkwxIjoxMDAsIkwyIjo2NC45LCJMM180NSI6NDAsIkwzXzkwIjo0MCwiQyI6MTAwLCJDMSI6NDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjUwIiwidHViZU9EIjo1Mywid2FsbCI6MS41LCJSIjo3MCwiTDEiOjExMCwiTDIiOjY5LCJMM180NSI6NDAsIkwzXzkwIjo0MCwiQyI6MTEwLCJDMSI6NDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjY1IiwidHViZU9EIjo3MCwid2FsbCI6MiwiUiI6ODAsIkwxIjoxMjAsIkwyIjo3My4xLCJMM180NSI6NDAsIkwzXzkwIjo0MCwiQyI6MTIwLCJDMSI6NDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjgwIiwidHViZU9EIjo4NSwid2FsbCI6MiwiUiI6OTAsIkwxIjoxNDUsIkwyIjo5Mi4zLCJMM180NSI6NTUsIkwzXzkwIjo1NSwiQyI6MTQ1LCJDMSI6NTUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjEwMCIsInR1YmVPRCI6MTA0LCJ3YWxsIjoyLCJSIjoxMDAsIkwxIjoxNTUsIkwyIjo5Ni40LCJMM180NSI6NTUsIkwzXzkwIjo1NSwiQyI6MTU1LCJDMSI6NTUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjEyNSIsInR1YmVPRCI6MTI5LCJ3YWxsIjoyLCJSIjoxODcuNSwiTDEiOjI3MCwiTDIiOjE2MC4yLCJMM180NSI6ODIuNSwiTDNfOTAiOjgyLjUsIkMiOjI3MCwiQzEiOjgyLjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjE1MCIsInR1YmVPRCI6MTU0LCJ3YWxsIjoyLCJSIjoyMjUsIkwxIjozMjUsIkwyIjoxOTMuMiwiTDNfNDUiOjEwMCwiTDNfOTAiOjEwMCwiQyI6MzI1LCJDMSI6MTAwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4yMDAiLCJ0dWJlT0QiOjIwNCwid2FsbCI6MiwiUiI6MzAwLCJMMSI6NDAwLCJMMiI6MjI0LjMsIkwzXzQ1IjoxMDAsIkwzXzkwIjoxMDAsIkMiOjQwMCwiQzEiOjEwMCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH1dLCJCIjpbeyJpZCI6Ik5XMTAuMiIsInR1YmVPRCI6MTAuMiwid2FsbCI6MS42LCJSIjoyMCwiTDEiOjQ1LCJMMiI6MzMuMywiTDNfNDUiOjI1LCJMM185MCI6MjUsIkMiOjQ1LCJDMSI6MjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzEzLjUiLCJ0dWJlT0QiOjEzLjUsIndhbGwiOjEuNiwiUiI6MjAsIkwxIjo0NSwiTDIiOjMzLjMsIkwzXzQ1IjoyNSwiTDNfOTAiOjI1LCJDIjo0NSwiQzEiOjI1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlcxNy4yIiwidHViZU9EIjoxNy4yLCJ3YWxsIjoxLjYsIlIiOjI4LCJMMSI6NTMsIkwyIjozNi42LCJMM180NSI6MjUsIkwzXzkwIjoyNSwiQyI6NTMsIkMxIjoyNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XMjEuMyIsInR1YmVPRCI6MjEuMywid2FsbCI6MS42LCJSIjozMCwiTDEiOjU1LCJMMiI6MzcuNCwiTDNfNDUiOjI1LCJMM185MCI6MjUsIkMiOjU1LCJDMSI6MjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzI2LjkiLCJ0dWJlT0QiOjI2LjksIndhbGwiOjEuNiwiUiI6MjguNSwiTDEiOjY4LjUsIkwyIjo1MS44LCJMM180NSI6NDAsIkwzXzkwIjo0MCwiQyI6NjguNSwiQzEiOjQwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlczMy43IiwidHViZU9EIjozMy43LCJ3YWxsIjoyLCJSIjozOCwiTDEiOjc4LCJMMiI6NTUuNywiTDNfNDUiOjQwLCJMM185MCI6NDAsIkMiOjc4LCJDMSI6NDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzQyLjQiLCJ0dWJlT0QiOjQyLjQsIndhbGwiOjIsIlIiOjQ3LjUsIkwxIjo4Ny41LCJMMiI6NTkuNywiTDNfNDUiOjQwLCJMM185MCI6NDAsIkMiOjg3LjUsIkMxIjo0MCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XNDguMyIsInR1YmVPRCI6NDguMywid2FsbCI6MiwiUiI6NTcsIkwxIjo5NywiTDIiOjYzLjYsIkwzXzQ1Ijo0MCwiTDNfOTAiOjQwLCJDIjo5NywiQzEiOjQwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlc2MC4zIiwidHViZU9EIjo2MC4zLCJ3YWxsIjoyLCJSIjo3NiwiTDEiOjExNiwiTDIiOjcxLjUsIkwzXzQ1Ijo0MCwiTDNfOTAiOjQwLCJDIjoxMTYsIkMxIjo0MCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XNzYuMSIsInR1YmVPRCI6NzYuMSwid2FsbCI6MiwiUiI6OTUsIkwxIjoxNTAsIkwyIjo5NC40LCJMM180NSI6NTUsIkwzXzkwIjo1NSwiQyI6MTUwLCJDMSI6NTUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzg4LjkiLCJ0dWJlT0QiOjg4LjksIndhbGwiOjIuMywiUiI6MTE0LjUsIkwxIjoxNjkuNSwiTDIiOjEwMi40LCJMM180NSI6NTUsIkwzXzkwIjo1NSwiQyI6MTY5LjUsIkMxIjo1NSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XMTE0LjMiLCJ0dWJlT0QiOjExNC4zLCJ3YWxsIjoyLjMsIlIiOjE1Mi41LCJMMSI6MjA3LjUsIkwyIjoxMTguMiwiTDNfNDUiOjU1LCJMM185MCI6NTUsIkMiOjIwNy41LCJDMSI6NTUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzEzOS43IiwidHViZU9EIjoxMzkuNywid2FsbCI6Mi42LCJSIjoxOTAuNSwiTDEiOjI0NS41LCJMMiI6MTMzLjksIkwzXzQ1Ijo1NSwiTDNfOTAiOjU1LCJDIjoyNDUuNSwiQzEiOjU1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlcxNjguMyIsInR1YmVPRCI6MTY4LjMsIndhbGwiOjIuNiwiUiI6MjI4LjUsIkwxIjoyODMuNSwiTDIiOjE0OS43LCJMM180NSI6NTUsIkwzXzkwIjo1NSwiQyI6MjgzLjUsIkMxIjo1NSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XMjE5LjEiLCJ0dWJlT0QiOjIxOS4xLCJ3YWxsIjoyLjYsIlIiOjMwNSwiTDEiOjM4NSwiTDIiOjIwNi4zLCJMM180NSI6ODAsIkwzXzkwIjo4MCwiQyI6Mzg1LCJDMSI6ODAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9XSwiQyI6W3siaWQiOiIwLjI1IiwidHViZU9EIjo2LjM1LCJ3YWxsIjowLjg5LCJSIjoxNC4zLCJMMSI6NjYuNywiTDIiOjUwLjgsIkwzXzQ1Ijo0NC45LCJMM185MCI6NTIuNCwiQyI6NjYuNywiQzEiOjUyLjQsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiIwLjM3NSIsInR1YmVPRCI6OS41Mywid2FsbCI6MC44OSwiUiI6MjguNiwiTDEiOjY2LjcsIkwyIjo1MC44LCJMM180NSI6MzksIkwzXzkwIjozOC4xLCJDIjo2Ni43LCJDMSI6MzguMSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IjAuNSIsInR1YmVPRCI6MTIuNywid2FsbCI6MS42NSwiUiI6MjguNiwiTDEiOjc2LjIsIkwyIjo1Ny4yLCJMM180NSI6NDUuNCwiTDNfOTAiOjQ3LjYsIkMiOjc2LjIsIkMxIjo0Ny42LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiMC43NSIsInR1YmVPRCI6MTkuMDUsIndhbGwiOjEuNjUsIlIiOjI4LjYsIkwxIjo3Ni4yLCJMMiI6NTcuMiwiTDNfNDUiOjQ1LjQsIkwzXzkwIjo0Ny42LCJDIjo3Ni4yLCJDMSI6NDcuNiwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IjEiLCJ0dWJlT0QiOjI1LjQsIndhbGwiOjEuNjUsIlIiOjM4LjEsIkwxIjo3Ni4yLCJMMiI6NTcuMiwiTDNfNDUiOjQxLjQsIkwzXzkwIjozOC4xLCJDIjo3Ni4yLCJDMSI6MzguMSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IjEuNSIsInR1YmVPRCI6MzguMSwid2FsbCI6MS42NSwiUiI6NTcuMiwiTDEiOjk1LjMsIkwyIjo2My41LCJMM180NSI6MzkuOCwiTDNfOTAiOjM4LjEsIkMiOjk1LjMsIkMxIjozOC4xLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiMiIsInR1YmVPRCI6NTAuOCwid2FsbCI6MS42NSwiUiI6NzYuMiwiTDEiOjEyMC43LCJMMiI6NzYuMiwiTDNfNDUiOjQ0LjYsIkwzXzkwIjo0NC41LCJDIjoxMjAuNywiQzEiOjQ0LjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiIyLjUiLCJ0dWJlT0QiOjYzLjUsIndhbGwiOjEuNjUsIlIiOjk1LjMsIkwxIjoxMzkuNywiTDIiOjg1LjcsIkwzXzQ1Ijo0Ni4yLCJMM185MCI6NDQuNCwiQyI6MTM5LjcsIkMxIjo0NC40LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiMyIsInR1YmVPRCI6NzYuMiwid2FsbCI6MS42NSwiUiI6MTE0LjMsIkwxIjoxNTguOCwiTDIiOjkyLjEsIkwzXzQ1Ijo0NC44LCJMM185MCI6NDQuNSwiQyI6MTU4LjgsIkMxIjo0NC41LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiNCIsInR1YmVPRCI6MTAxLjYsIndhbGwiOjIuMTEsIlIiOjE1Mi40LCJMMSI6MjAzLjIsIkwyIjoxMTQuMywiTDNfNDUiOjUxLjIsIkwzXzkwIjo1MC44LCJDIjoyMDMuMiwiQzEiOjUwLjgsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiI2IiwidHViZU9EIjoxNTIuNCwid2FsbCI6Mi43NywiUiI6MjI4LjYsIkwxIjoyOTIuMSwiTDIiOjE1OC44LCJMM180NSI6NjQuMSwiTDNfOTAiOjYzLjUsIkMiOjI5Mi4xLCJDMSI6NjMuNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH1dfSwiZGluMTE4NjUiOnsiYm9lZ2VuIjp7IkEiOlt7ImlkIjoiRE4wNiIsInR1YmVPRCI6OCwid2FsbCI6MSwiUiI6MjAsIkwxIjo0NSwiTDIiOjMzLjMsIkwzXzQ1IjoyNSwiTDNfOTAiOjI1LCJDIjo0NSwiQzEiOjI1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4wOCIsInR1YmVPRCI6MTAsIndhbGwiOjEsIlIiOjI1LCJMMSI6NTAsIkwyIjozNS40LCJMM180NSI6MjUsIkwzXzkwIjoyNSwiQyI6NTAsIkMxIjoyNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IkROMTAiLCJ0dWJlT0QiOjEzLCJ3YWxsIjoxLjUsIlIiOjI2LCJMMSI6NTEsIkwyIjozNS44LCJMM180NSI6MjUsIkwzXzkwIjoyNSwiQyI6NTEsIkMxIjoyNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IkROMTUiLCJ0dWJlT0QiOjE5LCJ3YWxsIjoxLjUsIlIiOjM1LCJMMSI6NjAsIkwyIjozOS41LCJMM180NSI6MjUsIkwzXzkwIjoyNSwiQyI6NjAsIkMxIjoyNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IkROMjAiLCJ0dWJlT0QiOjIzLCJ3YWxsIjoxLjUsIlIiOjQwLCJMMSI6NjUsIkwyIjo0MS42LCJMM180NSI6MjUsIkwzXzkwIjoyNSwiQyI6NjUsIkMxIjoyNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IkROMjUiLCJ0dWJlT0QiOjI5LCJ3YWxsIjoxLjUsIlIiOjUwLCJMMSI6OTAsIkwyIjo2MC43LCJMM180NSI6NDAsIkwzXzkwIjo0MCwiQyI6OTAsIkMxIjo0MCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IkROMzIiLCJ0dWJlT0QiOjM1LCJ3YWxsIjoxLjUsIlIiOjU1LCJMMSI6OTUsIkwyIjo2Mi44LCJMM180NSI6NDAsIkwzXzkwIjo0MCwiQyI6OTUsIkMxIjo0MCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IkRONDAiLCJ0dWJlT0QiOjQxLCJ3YWxsIjoxLjUsIlIiOjYwLCJMMSI6MTAwLCJMMiI6NjQuOSwiTDNfNDUiOjQwLCJMM185MCI6NDAsIkMiOjEwMCwiQzEiOjQwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE41MCIsInR1YmVPRCI6NTMsIndhbGwiOjEuNSwiUiI6NzAsIkwxIjoxMTAsIkwyIjo2OSwiTDNfNDUiOjQwLCJMM185MCI6NDAsIkMiOjExMCwiQzEiOjQwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE42NSIsInR1YmVPRCI6NzAsIndhbGwiOjIsIlIiOjgwLCJMMSI6MTIwLCJMMiI6NzMuMSwiTDNfNDUiOjQwLCJMM185MCI6NDAsIkMiOjEyMCwiQzEiOjQwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE44MCIsInR1YmVPRCI6ODUsIndhbGwiOjIsIlIiOjkwLCJMMSI6MTQ1LCJMMiI6OTIuMywiTDNfNDUiOjU1LCJMM185MCI6NTUsIkMiOjE0NSwiQzEiOjU1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4xMDAiLCJ0dWJlT0QiOjEwNCwid2FsbCI6MiwiUiI6MTAwLCJMMSI6MTU1LCJMMiI6OTYuNCwiTDNfNDUiOjU1LCJMM185MCI6NTUsIkMiOjE1NSwiQzEiOjU1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4xMjUiLCJ0dWJlT0QiOjEyOSwid2FsbCI6MiwiUiI6MTg3LjUsIkwxIjoyNzAsIkwyIjoxNjAuMiwiTDNfNDUiOjgyLjUsIkwzXzkwIjo4Mi41LCJDIjoyNzAsIkMxIjo4Mi41LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4xNTAiLCJ0dWJlT0QiOjE1NCwid2FsbCI6MiwiUiI6MjI1LCJMMSI6MzI1LCJMMiI6MTkzLjIsIkwzXzQ1IjoxMDAsIkwzXzkwIjoxMDAsIkMiOjMyNSwiQzEiOjEwMCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IkROMjAwIiwidHViZU9EIjoyMDQsIndhbGwiOjIsIlIiOjMwMCwiTDEiOjQwMCwiTDIiOjIyNC4zLCJMM180NSI6MTAwLCJMM185MCI6MTAwLCJDIjo0MDAsIkMxIjoxMDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9XSwiQiI6W3siaWQiOiJOVzEwLjIiLCJ0dWJlT0QiOjEwLjIsIndhbGwiOjEuNiwiUiI6MjAsIkwxIjo0NSwiTDIiOjMzLjMsIkwzXzQ1IjoyNSwiTDNfOTAiOjI1LCJDIjo0NSwiQzEiOjI1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlcxMy41IiwidHViZU9EIjoxMy41LCJ3YWxsIjoxLjYsIlIiOjIwLCJMMSI6NDUsIkwyIjozMy4zLCJMM180NSI6MjUsIkwzXzkwIjoyNSwiQyI6NDUsIkMxIjoyNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XMTcuMiIsInR1YmVPRCI6MTcuMiwid2FsbCI6MS42LCJSIjoyOCwiTDEiOjUzLCJMMiI6MzYuNiwiTDNfNDUiOjI1LCJMM185MCI6MjUsIkMiOjUzLCJDMSI6MjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzIxLjMiLCJ0dWJlT0QiOjIxLjMsIndhbGwiOjEuNiwiUiI6MzAsIkwxIjo1NSwiTDIiOjM3LjQsIkwzXzQ1IjoyNSwiTDNfOTAiOjI1LCJDIjo1NSwiQzEiOjI1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlcyNi45IiwidHViZU9EIjoyNi45LCJ3YWxsIjoxLjYsIlIiOjI4LjUsIkwxIjo2OC41LCJMMiI6NTEuOCwiTDNfNDUiOjQwLCJMM185MCI6NDAsIkMiOjY4LjUsIkMxIjo0MCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XMzMuNyIsInR1YmVPRCI6MzMuNywid2FsbCI6MiwiUiI6MzgsIkwxIjo3OCwiTDIiOjU1LjcsIkwzXzQ1Ijo0MCwiTDNfOTAiOjQwLCJDIjo3OCwiQzEiOjQwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlc0Mi40IiwidHViZU9EIjo0Mi40LCJ3YWxsIjoyLCJSIjo0Ny41LCJMMSI6ODcuNSwiTDIiOjU5LjcsIkwzXzQ1Ijo0MCwiTDNfOTAiOjQwLCJDIjo4Ny41LCJDMSI6NDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzQ4LjMiLCJ0dWJlT0QiOjQ4LjMsIndhbGwiOjIsIlIiOjU3LCJMMSI6OTcsIkwyIjo2My42LCJMM180NSI6NDAsIkwzXzkwIjo0MCwiQyI6OTcsIkMxIjo0MCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XNjAuMyIsInR1YmVPRCI6NjAuMywid2FsbCI6MiwiUiI6NzYsIkwxIjoxMTYsIkwyIjo3MS41LCJMM180NSI6NDAsIkwzXzkwIjo0MCwiQyI6MTE2LCJDMSI6NDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzc2LjEiLCJ0dWJlT0QiOjc2LjEsIndhbGwiOjIsIlIiOjk1LCJMMSI6MTUwLCJMMiI6OTQuNCwiTDNfNDUiOjU1LCJMM185MCI6NTUsIkMiOjE1MCwiQzEiOjU1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlc4OC45IiwidHViZU9EIjo4OC45LCJ3YWxsIjoyLjMsIlIiOjExNC41LCJMMSI6MTY5LjUsIkwyIjoxMDIuNCwiTDNfNDUiOjU1LCJMM185MCI6NTUsIkMiOjE2OS41LCJDMSI6NTUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzExNC4zIiwidHViZU9EIjoxMTQuMywid2FsbCI6Mi4zLCJSIjoxNTIuNSwiTDEiOjIwNy41LCJMMiI6MTE4LjIsIkwzXzQ1Ijo1NSwiTDNfOTAiOjU1LCJDIjoyMDcuNSwiQzEiOjU1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlcxMzkuNyIsInR1YmVPRCI6MTM5LjcsIndhbGwiOjIuNiwiUiI6MTkwLjUsIkwxIjoyNDUuNSwiTDIiOjEzMy45LCJMM180NSI6NTUsIkwzXzkwIjo1NSwiQyI6MjQ1LjUsIkMxIjo1NSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XMTY4LjMiLCJ0dWJlT0QiOjE2OC4zLCJ3YWxsIjoyLjYsIlIiOjIyOC41LCJMMSI6MjgzLjUsIkwyIjoxNDkuNywiTDNfNDUiOjU1LCJMM185MCI6NTUsIkMiOjI4My41LCJDMSI6NTUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzIxOS4xIiwidHViZU9EIjoyMTkuMSwid2FsbCI6Mi42LCJSIjozMDUsIkwxIjozODUsIkwyIjoyMDYuMywiTDNfNDUiOjgwLCJMM185MCI6ODAsIkMiOjM4NSwiQzEiOjgwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfV0sIkMiOlt7ImlkIjoiMC4yNSIsInR1YmVPRCI6Ni4zNSwid2FsbCI6MC44OSwiUiI6MTQuMywiTDEiOjY2LjcsIkwyIjo1MC44LCJMM180NSI6NDQuOSwiTDNfOTAiOjUyLjQsIkMiOjY2LjcsIkMxIjo1Mi40LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiMC4zNzUiLCJ0dWJlT0QiOjkuNTMsIndhbGwiOjAuODksIlIiOjI4LjYsIkwxIjo2Ni43LCJMMiI6NTAuOCwiTDNfNDUiOjM5LCJMM185MCI6MzguMSwiQyI6NjYuNywiQzEiOjM4LjEsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiIwLjUiLCJ0dWJlT0QiOjEyLjcsIndhbGwiOjEuNjUsIlIiOjI4LjYsIkwxIjo3Ni4yLCJMMiI6NTcuMiwiTDNfNDUiOjQ1LjQsIkwzXzkwIjo0Ny42LCJDIjo3Ni4yLCJDMSI6NDcuNiwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IjAuNzUiLCJ0dWJlT0QiOjE5LjA1LCJ3YWxsIjoxLjY1LCJSIjoyOC42LCJMMSI6NzYuMiwiTDIiOjU3LjIsIkwzXzQ1Ijo0NS40LCJMM185MCI6NDcuNiwiQyI6NzYuMiwiQzEiOjQ3LjYsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiIxIiwidHViZU9EIjoyNS40LCJ3YWxsIjoxLjY1LCJSIjozOC4xLCJMMSI6NzYuMiwiTDIiOjU3LjIsIkwzXzQ1Ijo0MS40LCJMM185MCI6MzguMSwiQyI6NzYuMiwiQzEiOjM4LjEsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiIxLjUiLCJ0dWJlT0QiOjM4LjEsIndhbGwiOjEuNjUsIlIiOjU3LjIsIkwxIjo5NS4zLCJMMiI6NjMuNSwiTDNfNDUiOjM5LjgsIkwzXzkwIjozOC4xLCJDIjo5NS4zLCJDMSI6MzguMSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IjIiLCJ0dWJlT0QiOjUwLjgsIndhbGwiOjEuNjUsIlIiOjc2LjIsIkwxIjoxMjAuNywiTDIiOjc2LjIsIkwzXzQ1Ijo0NC42LCJMM185MCI6NDQuNSwiQyI6MTIwLjcsIkMxIjo0NC41LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiMi41IiwidHViZU9EIjo2My41LCJ3YWxsIjoxLjY1LCJSIjo5NS4zLCJMMSI6MTM5LjcsIkwyIjo4NS43LCJMM180NSI6NDYuMiwiTDNfOTAiOjQ0LjQsIkMiOjEzOS43LCJDMSI6NDQuNCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IjMiLCJ0dWJlT0QiOjc2LjIsIndhbGwiOjEuNjUsIlIiOjExNC4zLCJMMSI6MTU4LjgsIkwyIjo5Mi4xLCJMM180NSI6NDQuOCwiTDNfOTAiOjQ0LjUsIkMiOjE1OC44LCJDMSI6NDQuNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IjQiLCJ0dWJlT0QiOjEwMS42LCJ3YWxsIjoyLjExLCJSIjoxNTIuNCwiTDEiOjIwMy4yLCJMMiI6MTE0LjMsIkwzXzQ1Ijo1MS4yLCJMM185MCI6NTAuOCwiQyI6MjAzLjIsIkMxIjo1MC44LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiNiIsInR1YmVPRCI6MTUyLjQsIndhbGwiOjIuNzcsIlIiOjIyOC42LCJMMSI6MjkyLjEsIkwyIjoxNTguOCwiTDNfNDUiOjY0LjEsIkwzXzkwIjo2My41LCJDIjoyOTIuMSwiQzEiOjYzLjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9XX0sInJlZHV6aWVydW5nIjp7InN0YXR1cyI6InZlcmlmaXppZXJ0IiwicXVlbGxlIjoiRXhjZWwgUmVkdXppZXJ1bmdlbiwgWmVpbGVuIDUtODMiLCJyZWloZW4iOnsiQSI6eyJsYWJlbCI6Im1ldHJpc2NoIEROIiwicm93cyI6W3sidm9uSWQiOiJETjA4IiwibmFjaElkIjoiRE4wNiIsIkwiOjM4LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjEwIiwibmFjaElkIjoiRE4wNiIsIkwiOjM4LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjEwIiwibmFjaElkIjoiRE4wOCIsIkwiOjM4LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjE1IiwibmFjaElkIjoiRE4wOCIsIkwiOjYwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjE1IiwibmFjaElkIjoiRE4xMCIsIkwiOjYwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjIwIiwibmFjaElkIjoiRE4xMCIsIkwiOjYwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjIwIiwibmFjaElkIjoiRE4xNSIsIkwiOjYwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjI1IiwibmFjaElkIjoiRE4xNSIsIkwiOjcwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjI1IiwibmFjaElkIjoiRE4yMCIsIkwiOjcwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjMyIiwibmFjaElkIjoiRE4yMCIsIkwiOjgwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjMyIiwibmFjaElkIjoiRE4yNSIsIkwiOjgwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjQwIiwibmFjaElkIjoiRE4yMCIsIkwiOjkwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjQwIiwibmFjaElkIjoiRE4yNSIsIkwiOjkwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjQwIiwibmFjaElkIjoiRE4zMiIsIkwiOjkwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjUwIiwibmFjaElkIjoiRE4yNSIsIkwiOjkwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjUwIiwibmFjaElkIjoiRE4zMiIsIkwiOjkwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjUwIiwibmFjaElkIjoiRE40MCIsIkwiOjkwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjY1IiwibmFjaElkIjoiRE40MCIsIkwiOjExMCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE42NSIsIm5hY2hJZCI6IkRONTAiLCJMIjoxMTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROODAiLCJuYWNoSWQiOiJETjUwIiwiTCI6MTEwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjgwIiwibmFjaElkIjoiRE42NSIsIkwiOjExMCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4xMDAiLCJuYWNoSWQiOiJETjY1IiwiTCI6MTM1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjEwMCIsIm5hY2hJZCI6IkROODAiLCJMIjoxMzUsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTI1IiwibmFjaElkIjoiRE44MCIsIkwiOjE1MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4xMjUiLCJuYWNoSWQiOiJETjEwMCIsIkwiOjE1MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4xNTAiLCJuYWNoSWQiOiJETjEwMCIsIkwiOjE3MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4xNTAiLCJuYWNoSWQiOiJETjEyNSIsIkwiOjE3MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4yMDAiLCJuYWNoSWQiOiJETjEyNSIsIkwiOjIzMCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4yMDAiLCJuYWNoSWQiOiJETjE1MCIsIkwiOjIzMCwic3RhdHVzIjoidmVyaWZpemllcnQifV19LCJCIjp7ImxhYmVsIjoiSVNPXC9PRCBOVyIsInJvd3MiOlt7InZvbklkIjoiTlcxMy41IiwibmFjaElkIjoiTlcxMC4yIiwiTCI6MzgsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMTcuMiIsIm5hY2hJZCI6Ik5XMTAuMiIsIkwiOjYwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzE3LjIiLCJuYWNoSWQiOiJOVzEzLjUiLCJMIjo2MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcyMS4zIiwibmFjaElkIjoiTlcxMy41IiwiTCI6NjAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMjEuMyIsIm5hY2hJZCI6Ik5XMTcuMiIsIkwiOjYwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzI2LjkiLCJuYWNoSWQiOiJOVzE3LjIiLCJMIjo2MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcyNi45IiwibmFjaElkIjoiTlcyMS4zIiwiTCI6NjAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMzMuNyIsIm5hY2hJZCI6Ik5XMjEuMyIsIkwiOjcwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzMzLjciLCJuYWNoSWQiOiJOVzI2LjkiLCJMIjo3MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc0Mi40IiwibmFjaElkIjoiTlcyNi45IiwiTCI6ODAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNDIuNCIsIm5hY2hJZCI6Ik5XMzMuNyIsIkwiOjgwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzQ4LjMiLCJuYWNoSWQiOiJOVzI2LjkiLCJMIjo5MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc0OC4zIiwibmFjaElkIjoiTlczMy43IiwiTCI6OTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNDguMyIsIm5hY2hJZCI6Ik5XNDIuNCIsIkwiOjkwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzYwLjMiLCJuYWNoSWQiOiJOVzMzLjciLCJMIjoxMDAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNjAuMyIsIm5hY2hJZCI6Ik5XNDIuNCIsIkwiOjEwMCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc2MC4zIiwibmFjaElkIjoiTlc0OC4zIiwiTCI6MTAwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzc2LjEiLCJuYWNoSWQiOiJOVzQ4LjMiLCJMIjoxMTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNzYuMSIsIm5hY2hJZCI6Ik5XNjAuMyIsIkwiOjExMCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc4OC45IiwibmFjaElkIjoiTlc2MC4zIiwiTCI6MTEwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzg4LjkiLCJuYWNoSWQiOiJOVzc2LjEiLCJMIjoxMTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMTE0LjMiLCJuYWNoSWQiOiJOVzc2LjEiLCJMIjoxMzUsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMTE0LjMiLCJuYWNoSWQiOiJOVzg4LjkiLCJMIjoxMzUsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMTM5LjciLCJuYWNoSWQiOiJOVzg4LjkiLCJMIjoxNTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMTM5LjciLCJuYWNoSWQiOiJOVzExNC4zIiwiTCI6MTUwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzE2OC4zIiwibmFjaElkIjoiTlcxMTQuMyIsIkwiOjE3MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcxNjguMyIsIm5hY2hJZCI6Ik5XMTM5LjciLCJMIjoxNzAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMjE5LjEiLCJuYWNoSWQiOiJOVzEzOS43IiwiTCI6MjMwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzIxOS4xIiwibmFjaElkIjoiTlcxNjguMyIsIkwiOjIzMCwic3RhdHVzIjoidmVyaWZpemllcnQifV19LCJDIjp7ImxhYmVsIjoiWm9sbCIsInJvd3MiOlt7InZvbklkIjoiMC4zNzUiLCJuYWNoSWQiOiIwLjI1IiwiTCI6NDEuMjgsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjAuNSIsIm5hY2hJZCI6IjAuMjUiLCJMIjo0Ny42Mywic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMC41IiwibmFjaElkIjoiMC4zNzUiLCJMIjo0Ny42Mywic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMC43NSIsIm5hY2hJZCI6IjAuMzc1IiwiTCI6NTAuOCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMC43NSIsIm5hY2hJZCI6IjAuNSIsIkwiOjUzLjk4LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIxIiwibmFjaElkIjoiMC41IiwiTCI6NjMuNSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMSIsIm5hY2hJZCI6IjAuNzUiLCJMIjo1My45OCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMS41IiwibmFjaElkIjoiMC43NSIsIkwiOjc2LjIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjEuNSIsIm5hY2hJZCI6IjEiLCJMIjo2My41LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIyIiwibmFjaElkIjoiMSIsIkwiOjg1LjczLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIyIiwibmFjaElkIjoiMS41IiwiTCI6NjMuNSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMi41IiwibmFjaElkIjoiMS41IiwiTCI6ODUuNzMsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjIuNSIsIm5hY2hJZCI6IjIiLCJMIjo2My41LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIzIiwibmFjaElkIjoiMS41IiwiTCI6MTA3Ljk1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIzIiwibmFjaElkIjoiMiIsIkwiOjg1LjczLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIzIiwibmFjaElkIjoiMi41IiwiTCI6NjYuNjgsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjQiLCJuYWNoSWQiOiIyIiwiTCI6MTMwLjE4LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiI0IiwibmFjaElkIjoiMi41IiwiTCI6MTA3Ljk1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiI0IiwibmFjaElkIjoiMyIsIkwiOjk4LjQzLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiI2IiwibmFjaElkIjoiMyIsIkwiOjE4NC4xNSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiNiIsIm5hY2hJZCI6IjQiLCJMIjoxNDIuODgsInN0YXR1cyI6InZlcmlmaXppZXJ0In1dfX19LCJ0U3R1ZWNrR2xlaWNoIjp7InN0YXR1cyI6InZlcmlmaXppZXJ0IiwicXVlbGxlIjoiVC1TdHVlY2tlLnhsc3ggKEJlcm5kLCAyMy4wNy4yMDI2KSwgQmxhdHQgVGFibGUgMSAtIGRvcHBlbHQgZXh0cmFoaWVydCAob3BlbnB5eGwgKyBSb2gtWE1MLCAwIEFid2VpY2h1bmdlbikgdW5kIGdlZ2VuIGRpZSB2ZXJpZml6aWVydGVuIFJ1bmRlLTQtV2VydGUgZ2VwcnVlZnQuIEROMjAwOiBsPTMwMCB3YXIgZWluIFVlYmVydHJhZ3VuZ3NmZWhsZXIgaW4gZGVyIFRhYmVsbGUsIEJlcm5kIGhhdCBhbSAyNy4wNy4yMDI2IGw9NjAwIGJlc3RhZXRpZ3QuIiwicmVpaGVuIjp7IkEiOnsic3RhdHVzIjoidmVyaWZpemllcnQiLCJsYWJlbCI6Im1ldHJpc2NoIEROIiwicm93cyI6W3siaWQiOiJETjA2IiwiTDAiOjMwLCJMIjo2MCwiTDIiOjMwLCJMMSI6IjExIn0seyJpZCI6IkROMDgiLCJMMCI6MzAsIkwiOjYwLCJMMiI6MzAsIkwxIjoiMTEifSx7ImlkIjoiRE4xMCIsIkwwIjozNSwiTCI6NzAsIkwyIjozNSwiTDEiOiIxMSJ9LHsiaWQiOiJETjE1IiwiTDAiOjM1LCJMIjo3MCwiTDIiOjM1LCJMMSI6IjExIFx1MDBiMSAwLDUwIn0seyJpZCI6IkROMjAiLCJMMCI6NDAsIkwiOjgwLCJMMiI6NDAsIkwxIjoiMTMgXHUwMGIxIDAsNTAifSx7ImlkIjoiRE4yNSIsIkwwIjo1MCwiTCI6MTAwLCJMMiI6NTAsIkwxIjoiMTYgXHUwMGIxIDAsNzUifSx7ImlkIjoiRE4zMiIsIkwwIjo1NSwiTCI6MTEwLCJMMiI6NTUsIkwxIjoiMTksNSBcdTAwYjEgMCw3NSJ9LHsiaWQiOiJETjQwIiwiTDAiOjYwLCJMIjoxMjAsIkwyIjo2MCwiTDEiOiIyMyBcdTAwYjEgMSJ9LHsiaWQiOiJETjUwIiwiTDAiOjgwLCJMIjoxNjAsIkwyIjo4MCwiTDEiOiIzMCBcdTAwYjEgMSJ9LHsiaWQiOiJETjY1IiwiTDAiOjEwNSwiTCI6MjEwLCJMMiI6MTA1LCJMMSI6IjQwIFx1MDBiMSAxLDUwIn0seyJpZCI6IkROODAiLCJMMCI6MTMwLCJMIjoyNjAsIkwyIjoxMzAsIkwxIjoiNDcsNSBcdTAwYjEgMSw1MCJ9LHsiaWQiOiJETjEwMCIsIkwwIjoxNTUsIkwiOjMxMCwiTDIiOjE1NSwiTDEiOiI1OCBcdTAwYjEgMSw1MCJ9LHsiaWQiOiJETjEyNSIsIkwwIjoxODcuNSwiTCI6Mzc1LCJMMiI6MTg3LjUsIkwxIjoiNzQgXHUwMGIxIDMifSx7ImlkIjoiRE4xNTAiLCJMMCI6MjI1LCJMIjo0NTAsIkwyIjoyMjUsIkwxIjoiOTAgXHUwMGIxIDMifSx7ImlkIjoiRE4yMDAiLCJMMCI6MzAwLCJMIjo2MDAsIkwyIjozMDAsIkwxIjoiMTE1IFx1MDBiMSAzIn1dfSwiQiI6eyJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImxhYmVsIjoiSVNPXC9PRCBOVyIsInJvd3MiOlt7ImlkIjoiTlcxMC4yIiwiTDAiOjMwLCJMIjo2MCwiTDIiOjMwLCJMMSI6IjExIn0seyJpZCI6Ik5XMTMuNSIsIkwwIjozMiwiTCI6NjQsIkwyIjozMiwiTDEiOiIxMSJ9LHsiaWQiOiJOVzE3LjIiLCJMMCI6MzQsIkwiOjY4LCJMMiI6MzQsIkwxIjoiMTAsMSBcdTAwYjEgMCw1In0seyJpZCI6Ik5XMjEuMyIsIkwwIjozNiwiTCI6NzIsIkwyIjozNiwiTDEiOiIxMiwyIFx1MDBiMSAwLDUifSx7ImlkIjoiTlcyNi45IiwiTDAiOjU1LCJMIjoxMTAsIkwyIjo1NSwiTDEiOiIxNSBcdTAwYjEgMCw1In0seyJpZCI6Ik5XMzMuNyIsIkwwIjo2MCwiTCI6MTIwLCJMMiI6NjAsIkwxIjoiMTgsNCBcdTAwYjEgMCw3NSJ9LHsiaWQiOiJOVzQyLjQiLCJMMCI6NjUsIkwiOjEzMCwiTDIiOjY1LCJMMSI6IjIzLDIgXHUwMGIxIDAsNzUifSx7ImlkIjoiTlc0OC4zIiwiTDAiOjY1LCJMIjoxMzAsIkwyIjo2NSwiTDEiOiIyNiw3IFx1MDBiMSAxIn0seyJpZCI6Ik5XNjAuMyIsIkwwIjo5MCwiTCI6MTgwLCJMMiI6OTAsIkwxIjoiMzMsNyBcdTAwYjEgMSJ9LHsiaWQiOiJOVzc2LjEiLCJMMCI6MTEwLCJMIjoyMjAsIkwyIjoxMTAsIkwxIjoiNDMsMSBcdTAwYjEgMSw1In0seyJpZCI6Ik5XODguOSIsIkwwIjoxMzAsIkwiOjI2MCwiTDIiOjEzMCwiTDEiOiI0OSw1IFx1MDBiMSAxLDUifSx7ImlkIjoiTlcxMTQuMyIsIkwwIjoxNjAsIkwiOjMyMCwiTDIiOjE2MCwiTDEiOiI2MywyIFx1MDBiMSAxLDUifSx7ImlkIjoiTlcxMzkuNyIsIkwwIjoyMDAsIkwiOjQwMCwiTDIiOjIwMCwiTDEiOiI3OSw5IFx1MDBiMSAzIn0seyJpZCI6Ik5XMTY4LjMiLCJMMCI6MjUwLCJMIjo1MDAsIkwyIjoyNTAsIkwxIjoiOTcsMiBcdTAwYjEgMyJ9LHsiaWQiOiJOVzIxOS4xIiwiTDAiOjMwMCwiTCI6NjAwLCJMMiI6MzAwLCJMMSI6IjEyMyw2IFx1MDBiMSA0In1dfSwiQyI6eyJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImxhYmVsIjoiWm9sbCIsInJvd3MiOlt7ImlkIjoiMC4yNSIsIkwwIjo0NC41LCJMIjo4OSwiTDIiOjQ0LjUsIkwxIjoiMTEifSx7ImlkIjoiMC4zNzUiLCJMMCI6NDQuNSwiTCI6ODksIkwyIjo0NC41LCJMMSI6IjExIn0seyJpZCI6IjAuNSIsIkwwIjo0Ny42LCJMIjo5NS4yLCJMMiI6NDcuNiwiTDEiOiIxMSJ9LHsiaWQiOiIwLjc1IiwiTDAiOjUwLjgsIkwiOjEwMS42LCJMMiI6NTAuOCwiTDEiOiIxMSBcdTAwYjEgMCw1In0seyJpZCI6IjEiLCJMMCI6NTQsIkwiOjEwOCwiTDIiOjU0LCJMMSI6IjE0LDIgXHUwMGIxIDAsNSJ9LHsiaWQiOiIxLjUiLCJMMCI6NjAuMywiTCI6MTIwLjYsIkwyIjo2MC4zLCJMMSI6IjIxLDEgXHUwMGIxIDAsNzUifSx7ImlkIjoiMiIsIkwwIjo3MywiTCI6MTQ2LCJMMiI6NzMsIkwxIjoiMjgsOSBcdTAwYjEgMSJ9LHsiaWQiOiIyLjUiLCJMMCI6NzkuNCwiTCI6MTU4LjgsIkwyIjo3OS40LCJMMSI6IjM1LDMgXHUwMGIxIDEifSx7ImlkIjoiMyIsIkwwIjo4NS43LCJMIjoxNzEuNCwiTDIiOjg1LjcsIkwxIjoiNDMsMSBcdTAwYjEgMSw1In0seyJpZCI6IjQiLCJMMCI6MTA0LjgsIkwiOjIwOS42LCJMMiI6MTA0LjgsIkwxIjoiNTYsOCBcdTAwYjEgMSw1In0seyJpZCI6IjYiLCJMMCI6MTQyLjksIkwiOjI4NS44LCJMMiI6MTQyLjksIkwxIjoiOTAsMSBcdTAwYjEgMyJ9XX19fSwidFN0dWVja1JlZHV6aWVydCI6eyJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsInF1ZWxsZSI6IlQtU3R1ZWNrZS54bHN4IChCZXJuZCwgMjMuMDcuMjAyNiksIEJsYXR0IFRhYmxlIDEgLSBkb3BwZWx0IGV4dHJhaGllcnQgKG9wZW5weXhsICsgUm9oLVhNTCwgMCBBYndlaWNodW5nZW4pLiBETjIwMCByZWR1emllcnQgKDIwMFwvMTAwLCAyMDBcLzEyNSwgMjAwXC8xNTApIGlzdCBzZWl0IEJlcm5kcyBCZXN0YWV0aWd1bmcgdm9tIDI3LjA3LjIwMjYgZnJlaTogbCA9IDYwMCAoXCJoYWJlIGljaCB3b2hsIHZlcmdlc3NlbiBlaW56dXRyYWdlblwiKS4iLCJyZWloZW4iOnsiQSI6eyJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsInJvd3MiOlt7InZvbklkIjoiRE4wOCIsIm5hY2hJZCI6IkROMDYiLCJMMCI6MzAsIkwiOjYwLCJMMiI6MzAsIkwxIjoiMTEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjEwIiwibmFjaElkIjoiRE4wNiIsIkwwIjozMCwiTCI6NjAsIkwyIjozMCwiTDEiOiIxMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTAiLCJuYWNoSWQiOiJETjA4IiwiTDAiOjMwLCJMIjo2MCwiTDIiOjMwLCJMMSI6IjExIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4xNSIsIm5hY2hJZCI6IkROMDgiLCJMMCI6MzUsIkwiOjcwLCJMMiI6MzUsIkwxIjoiMTEgXHUwMGIxIDAsNTAiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjE1IiwibmFjaElkIjoiRE4xMCIsIkwwIjozNSwiTCI6NzAsIkwyIjozNSwiTDEiOiIxMSBcdTAwYjEgMCw1MCIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMjAiLCJuYWNoSWQiOiJETjEwIiwiTDAiOjQwLCJMIjo4MCwiTDIiOjQwLCJMMSI6IjEzIFx1MDBiMSAwLDUwIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4yMCIsIm5hY2hJZCI6IkROMTUiLCJMMCI6NDAsIkwiOjgwLCJMMiI6NDAsIkwxIjoiMTMgXHUwMGIxIDAsNTAiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjI1IiwibmFjaElkIjoiRE4xNSIsIkwwIjo1MCwiTCI6MTAwLCJMMiI6NTAsIkwxIjoiMTYgXHUwMGIxIDAsNzUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjI1IiwibmFjaElkIjoiRE4yMCIsIkwwIjo1MCwiTCI6MTAwLCJMMiI6NTAsIkwxIjoiMTYgXHUwMGIxIDAsNzUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjMyIiwibmFjaElkIjoiRE4xNSIsIkwwIjo1NSwiTCI6MTEwLCJMMiI6NTUsIkwxIjoiMTkgXHUwMGIxIDAsNzUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjMyIiwibmFjaElkIjoiRE4yMCIsIkwwIjo1NSwiTCI6MTEwLCJMMiI6NTUsIkwxIjoiMTkgXHUwMGIxIDAsNzUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjMyIiwibmFjaElkIjoiRE4yNSIsIkwwIjo1NSwiTCI6MTEwLCJMMiI6NTUsIkwxIjoiMTkgXHUwMGIxIDAsNzUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjQwIiwibmFjaElkIjoiRE4yMCIsIkwwIjo2MCwiTCI6MTIwLCJMMiI6NjAsIkwxIjoiMjIgXHUwMGIxIDAsNzUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjQwIiwibmFjaElkIjoiRE4yNSIsIkwwIjo2MCwiTCI6MTIwLCJMMiI6NjAsIkwxIjoiMjIgXHUwMGIxIDAsNzUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjQwIiwibmFjaElkIjoiRE4zMiIsIkwwIjo2MCwiTCI6MTIwLCJMMiI6NjAsIkwxIjoiMjIsNSBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkRONTAiLCJuYWNoSWQiOiJETjI1IiwiTDAiOjgwLCJMIjoxNjAsIkwyIjo4MCwiTDEiOiIyOCBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkRONTAiLCJuYWNoSWQiOiJETjMyIiwiTDAiOjgwLCJMIjoxNjAsIkwyIjo4MCwiTDEiOiIyOCw1IFx1MDBiMSAwLDc1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE41MCIsIm5hY2hJZCI6IkRONDAiLCJMMCI6ODAsIkwiOjE2MCwiTDIiOjgwLCJMMSI6IjI5IFx1MDBiMSAxIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE42NSIsIm5hY2hJZCI6IkROMzIiLCJMMCI6MTA1LCJMIjoyMTAsIkwyIjo4MCwiTDEiOiIzNyBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkRONjUiLCJuYWNoSWQiOiJETjQwIiwiTDAiOjEwNSwiTCI6MjEwLCJMMiI6ODAsIkwxIjoiMzcsNSBcdTAwYjEgMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkRONjUiLCJuYWNoSWQiOiJETjUwIiwiTDAiOjEwNSwiTCI6MjEwLCJMMiI6ODAsIkwxIjoiMzgsNSBcdTAwYjEgMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROODAiLCJuYWNoSWQiOiJETjQwIiwiTDAiOjEzMCwiTCI6MjYwLCJMMiI6MTA1LCJMMSI6IjQ1IFx1MDBiMSAxIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE44MCIsIm5hY2hJZCI6IkRONTAiLCJMMCI6MTMwLCJMIjoyNjAsIkwyIjoxMDUsIkwxIjoiNDYgXHUwMGIxIDEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjgwIiwibmFjaElkIjoiRE42NSIsIkwwIjoxMzAsIkwiOjI2MCwiTDIiOjEwNSwiTDEiOiI0Nyw1IFx1MDBiMSAxLDUwIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4xMDAiLCJuYWNoSWQiOiJETjUwIiwiTDAiOjE1NSwiTCI6MzEwLCJMMiI6MTMwLCJMMSI6IjU1LDUgXHUwMGIxIDEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjEwMCIsIm5hY2hJZCI6IkRONjUiLCJMMCI6MTU1LCJMIjozMTAsIkwyIjoxMzAsIkwxIjoiNTcgXHUwMGIxIDEsNTAiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjEwMCIsIm5hY2hJZCI6IkROODAiLCJMMCI6MTU1LCJMIjozMTAsIkwyIjoxMzAsIkwxIjoiNTcgXHUwMGIxIDEsNTAiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjEyNSIsIm5hY2hJZCI6IkRONjUiLCJMMCI6MTg3LjUsIkwiOjM3NSwiTDIiOjE1NSwiTDEiOiI2OSw1IFx1MDBiMSAxLDUwIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4xMjUiLCJuYWNoSWQiOiJETjgwIiwiTDAiOjE4Ny41LCJMIjozNzUsIkwyIjoxNTUsIkwxIjoiNjksNSBcdTAwYjEgMSw1MCIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTI1IiwibmFjaElkIjoiRE4xMDAiLCJMMCI6MTg3LjUsIkwiOjM3NSwiTDIiOjE1NSwiTDEiOiI3MCw1IFx1MDBiMSAxLDUwIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4xNTAiLCJuYWNoSWQiOiJETjgwIiwiTDAiOjIyNSwiTCI6NDUwLCJMMiI6MTg3LjUsIkwxIjoiODIgXHUwMGIxIDEsNTAiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjE1MCIsIm5hY2hJZCI6IkROMTAwIiwiTDAiOjIyNSwiTCI6NDUwLCJMMiI6MTg3LjUsIkwxIjoiODMgXHUwMGIxIDEsNTAiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjE1MCIsIm5hY2hJZCI6IkROMTI1IiwiTDAiOjIyNSwiTCI6NDUwLCJMMiI6MTg3LjUsIkwxIjoiODYsNSBcdTAwYjEgMyIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMjAwIiwibmFjaElkIjoiRE4xMDAiLCJMMCI6MzAwLCJMIjo2MDAsIkwyIjoyMjUsIkwxIjoiMTA4IFx1MDBiMSAxLDUwIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4yMDAiLCJuYWNoSWQiOiJETjEyNSIsIkwwIjozMDAsIkwiOjYwMCwiTDIiOjIyNSwiTDEiOiIxMTEsNSBcdTAwYjEgMyIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMjAwIiwibmFjaElkIjoiRE4xNTAiLCJMMCI6MzAwLCJMIjo2MDAsIkwyIjoyMjUsIkwxIjoiMTE1IFx1MDBiMSAzIiwic3RhdHVzIjoidmVyaWZpemllcnQifV19LCJCIjp7InN0YXR1cyI6InZlcmlmaXppZXJ0Iiwicm93cyI6W3sidm9uSWQiOiJOVzEzLjUiLCJuYWNoSWQiOiJOVzEwLjIiLCJMMCI6MzIsIkwiOjY0LCJMMiI6MzIsIkwxIjoiMTEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzE3LjIiLCJuYWNoSWQiOiJOVzEwLjIiLCJMMCI6MzQsIkwiOjY4LCJMMiI6MzQsIkwxIjoiMTAsMSBcdTAwYjEgMCw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcxNy4yIiwibmFjaElkIjoiTlcxMy41IiwiTDAiOjM0LCJMIjo2OCwiTDIiOjM0LCJMMSI6IjEwLDEgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMjEuMyIsIm5hY2hJZCI6Ik5XMTAuMiIsIkwwIjozNiwiTCI6NzIsIkwyIjozNiwiTDEiOiIxMiwyIFx1MDBiMSAwLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzIxLjMiLCJuYWNoSWQiOiJOVzEzLjUiLCJMMCI6MzYsIkwiOjcyLCJMMiI6MzYsIkwxIjoiMTIsMiBcdTAwYjEgMCw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcyMS4zIiwibmFjaElkIjoiTlcxNy4yIiwiTDAiOjM2LCJMIjo3MiwiTDIiOjM2LCJMMSI6IjEyLDIgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMjYuOSIsIm5hY2hJZCI6Ik5XMTMuNSIsIkwwIjo1NSwiTCI6MTEwLCJMMiI6NTUsIkwxIjoiMTUgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMjYuOSIsIm5hY2hJZCI6Ik5XMTcuMiIsIkwwIjo1NSwiTCI6MTEwLCJMMiI6NTUsIkwxIjoiMTUgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMjYuOSIsIm5hY2hJZCI6Ik5XMjEuMyIsIkwwIjo1NSwiTCI6MTEwLCJMMiI6NTUsIkwxIjoiMTUgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMzMuNyIsIm5hY2hJZCI6Ik5XMTcuMiIsIkwwIjo2MCwiTCI6MTIwLCJMMiI6NjAsIkwxIjoiMTgsNCBcdTAwYjEgMCw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlczMy43IiwibmFjaElkIjoiTlcyMS4zIiwiTDAiOjYwLCJMIjoxMjAsIkwyIjo2MCwiTDEiOiIxOCw0IFx1MDBiMSAwLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzMzLjciLCJuYWNoSWQiOiJOVzI2LjkiLCJMMCI6NjAsIkwiOjEyMCwiTDIiOjYwLCJMMSI6IjE4LDQgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNDIuNCIsIm5hY2hJZCI6Ik5XMjEuMyIsIkwwIjo2NSwiTCI6MTMwLCJMMiI6NjUsIkwxIjoiMjIsNyBcdTAwYjEgMCw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc0Mi40IiwibmFjaElkIjoiTlcyNi45IiwiTDAiOjY1LCJMIjoxMzAsIkwyIjo2NSwiTDEiOiIyMiw3IFx1MDBiMSAwLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzQyLjQiLCJuYWNoSWQiOiJOVzMzLjciLCJMMCI6NjUsIkwiOjEzMCwiTDIiOjY1LCJMMSI6IjIyLDcgXHUwMGIxIDAsNzUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzQ4LjMiLCJuYWNoSWQiOiJOVzI2LjkiLCJMMCI6NjUsIkwiOjEzMCwiTDIiOjY1LCJMMSI6IjI1LDcgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNDguMyIsIm5hY2hJZCI6Ik5XMzMuNyIsIkwwIjo2NSwiTCI6MTMwLCJMMiI6NjUsIkwxIjoiMjUsNyBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNDguMyIsIm5hY2hJZCI6Ik5XNDIuNCIsIkwwIjo2NSwiTCI6MTMwLCJMMiI6NjUsIkwxIjoiMjYsMiBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNjAuMyIsIm5hY2hJZCI6Ik5XMzMuNyIsIkwwIjo5MCwiTCI6MTgwLCJMMiI6OTAsIkwxIjoiMzEsNyBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNjAuMyIsIm5hY2hJZCI6Ik5XNDIuNCIsIkwwIjo5MCwiTCI6MTgwLCJMMiI6OTAsIkwxIjoiMzIsMiBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNjAuMyIsIm5hY2hJZCI6Ik5XNDguMyIsIkwwIjo5MCwiTCI6MTgwLCJMMiI6OTAsIkwxIjoiMzIsNyBcdTAwYjEgMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNzYuMSIsIm5hY2hJZCI6Ik5XNDIuNCIsIkwwIjoxMTAsIkwiOjIyMCwiTDIiOjkwLCJMMSI6IjQwLDEgXHUwMGIxIDAsNzUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzc2LjEiLCJuYWNoSWQiOiJOVzQ4LjMiLCJMMCI6MTEwLCJMIjoyMjAsIkwyIjo5MCwiTDEiOiI0MCw2IFx1MDBiMSAxIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc3Ni4xIiwibmFjaElkIjoiTlc2MC4zIiwiTDAiOjExMCwiTCI6MjIwLCJMMiI6OTAsIkwxIjoiNDEsNiBcdTAwYjEgMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XODguOSIsIm5hY2hJZCI6Ik5XNDguMyIsIkwwIjoxMzAsIkwiOjI2MCwiTDIiOjExMCwiTDEiOiI0NyBcdTAwYjEgMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XODguOSIsIm5hY2hJZCI6Ik5XNjAuMyIsIkwwIjoxMzAsIkwiOjI2MCwiTDIiOjExMCwiTDEiOiI0OCBcdTAwYjEgMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XODguOSIsIm5hY2hJZCI6Ik5XNzYuMSIsIkwwIjoxMzAsIkwiOjI2MCwiTDIiOjExMCwiTDEiOiI0OSw1IFx1MDBiMSAxLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzExNC4zIiwibmFjaElkIjoiTlc2MC4zIiwiTDAiOjE2MCwiTCI6MzIwLCJMMiI6MTMwLCJMMSI6IjYwLDcgXHUwMGIxIDEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzExNC4zIiwibmFjaElkIjoiTlc3Ni4xIiwiTDAiOjE2MCwiTCI6MzIwLCJMMiI6MTMwLCJMMSI6IjYyLDIgXHUwMGIxIDEsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMTE0LjMiLCJuYWNoSWQiOiJOVzg4LjkiLCJMMCI6MTYwLCJMIjozMjAsIkwyIjoxMzAsIkwxIjoiNjIsMiBcdTAwYjEgMSw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcxMzkuNyIsIm5hY2hJZCI6Ik5XNzYuMSIsIkwwIjoyMDAsIkwiOjQwMCwiTDIiOjE2MCwiTDEiOiI3NCw5IFx1MDBiMSAxLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzEzOS43IiwibmFjaElkIjoiTlc4OC45IiwiTDAiOjIwMCwiTCI6NDAwLCJMMiI6MTYwLCJMMSI6Ijc0LDkgXHUwMGIxIDEsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMTM5LjciLCJuYWNoSWQiOiJOVzExNC4zIiwiTDAiOjIwMCwiTCI6NDAwLCJMMiI6MTYwLCJMMSI6Ijc1LDkgXHUwMGIxIDEsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMTY4LjMiLCJuYWNoSWQiOiJOVzg4LjkiLCJMMCI6MjUwLCJMIjo1MDAsIkwyIjoyMDAsIkwxIjoiODksMiBcdTAwYjEgMSw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcxNjguMyIsIm5hY2hJZCI6Ik5XMTE0LjMiLCJMMCI6MjUwLCJMIjo1MDAsIkwyIjoyMDAsIkwxIjoiOTAsMiBcdTAwYjEgMSw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcxNjguMyIsIm5hY2hJZCI6Ik5XMTM5LjciLCJMMCI6MjUwLCJMIjo1MDAsIkwyIjoyMDAsIkwxIjoiOTQsMiBcdTAwYjEgMyIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMjE5LjEiLCJuYWNoSWQiOiJOVzExNC4zIiwiTDAiOjMwMCwiTCI6NjAwLCJMMiI6MjUwLCJMMSI6IjExNSw2IFx1MDBiMSAxLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzIxOS4xIiwibmFjaElkIjoiTlcxMzkuNyIsIkwwIjozMDAsIkwiOjYwMCwiTDIiOjI1MCwiTDEiOiIxMTksNiBcdTAwYjEgMyIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMjE5LjEiLCJuYWNoSWQiOiJOVzE2OC4zIiwiTDAiOjMwMCwiTCI6NjAwLCJMMiI6MjUwLCJMMSI6IjEyMiw2IFx1MDBiMSAzIiwic3RhdHVzIjoidmVyaWZpemllcnQifV19LCJDIjp7InN0YXR1cyI6InZlcmlmaXppZXJ0Iiwicm93cyI6W3sidm9uSWQiOiIwLjM3NSIsIm5hY2hJZCI6IjAuMjUiLCJMMCI6NDQuNSwiTCI6ODksIkwyIjo0NC41LCJMMSI6IjExIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMC41IiwibmFjaElkIjoiMC4yNSIsIkwwIjo0Ny42LCJMIjo5NS4yLCJMMiI6NDcuNiwiTDEiOiIxMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjAuNSIsIm5hY2hJZCI6IjAuMzc1IiwiTDAiOjQ3LjYsIkwiOjk1LjIsIkwyIjo0Ny42LCJMMSI6IjExIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMC43NSIsIm5hY2hJZCI6IjAuMzc1IiwiTDAiOjUwLjgsIkwiOjEwMS42LCJMMiI6NTAuOCwiTDEiOiIxMSBcdTAwYjEgMCw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMC43NSIsIm5hY2hJZCI6IjAuNSIsIkwwIjo1MC44LCJMIjoxMDEuNiwiTDIiOjUwLjgsIkwxIjoiMTEgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjEiLCJuYWNoSWQiOiIwLjUiLCJMMCI6NTQsIkwiOjEwOCwiTDIiOjU0LCJMMSI6IjE0LDIgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjEiLCJuYWNoSWQiOiIwLjc1IiwiTDAiOjU0LCJMIjoxMDgsIkwyIjo1NCwiTDEiOiIxNCwyIFx1MDBiMSAwLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIxLjUiLCJuYWNoSWQiOiIwLjc1IiwiTDAiOjYwLjMsIkwiOjEyMC42LCJMMiI6NjAuMywiTDEiOiIyMCw2IFx1MDBiMSAwLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIxLjUiLCJuYWNoSWQiOiIxIiwiTDAiOjYwLjMsIkwiOjEyMC42LCJMMiI6NjAuMywiTDEiOiIyMCw2IFx1MDBiMSAwLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIyIiwibmFjaElkIjoiMSIsIkwwIjo3MywiTCI6MTQ2LCJMMiI6NjYuNywiTDEiOiIyNiw5IFx1MDBiMSAwLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIyIiwibmFjaElkIjoiMS41IiwiTDAiOjczLCJMIjoxNDYsIkwyIjo2Ni43LCJMMSI6IjI3LDQgXHUwMGIxIDAsNzUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIyLjUiLCJuYWNoSWQiOiIxLjUiLCJMMCI6NzkuNCwiTCI6MTU4LjgsIkwyIjo3MywiTDEiOiIzMyw4IFx1MDBiMSAwLDc1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMi41IiwibmFjaElkIjoiMiIsIkwwIjo3OS40LCJMIjoxNTguOCwiTDIiOjczLCJMMSI6IjM1LDMgXHUwMGIxIDEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIzIiwibmFjaElkIjoiMS41IiwiTDAiOjg1LjcsIkwiOjE3MS40LCJMMiI6NzkuNCwiTDEiOiI0MCwxIFx1MDBiMSAwLDc1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMyIsIm5hY2hJZCI6IjIiLCJMMCI6ODUuNywiTCI6MTcxLjQsIkwyIjo3OS40LCJMMSI6IjQxLDYgXHUwMGIxIDEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIzIiwibmFjaElkIjoiMi41IiwiTDAiOjg1LjcsIkwiOjE3MS40LCJMMiI6NzkuNCwiTDEiOiI0MSw2IFx1MDBiMSAxIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiNCIsIm5hY2hJZCI6IjIiLCJMMCI6MTA0LjgsIkwiOjIwOS42LCJMMiI6OTguNCwiTDEiOiI1NCwzIFx1MDBiMSAxIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiNCIsIm5hY2hJZCI6IjIuNSIsIkwwIjoxMDQuOCwiTCI6MjA5LjYsIkwyIjo5OC40LCJMMSI6IjU0LDMgXHUwMGIxIDEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiI0IiwibmFjaElkIjoiMyIsIkwwIjoxMDQuOCwiTCI6MjA5LjYsIkwyIjo5OC40LCJMMSI6IjU1LDggXHUwMGIxIDEsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjYiLCJuYWNoSWQiOiIzIiwiTDAiOjE0Mi45LCJMIjoyODUuOCwiTDIiOjEyMy44LCJMMSI6IjgzLDEgXHUwMGIxIDEsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjYiLCJuYWNoSWQiOiI0IiwiTDAiOjE0Mi45LCJMIjoyODUuOCwiTDIiOjEzMC4yLCJMMSI6IjgzLDEgXHUwMGIxIDEsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In1dfX19fSwiY29ubmVjdCI6eyJtYXBwaW5nIjp7InN0YXR1cyI6InZlcmlmaXppZXJ0Iiwic2VyaWVuIjp7IjEuNDQwNCI6eyJ3ZXJrc3RvZmYiOiIxLjQ0MDQiLCJ3ZXJrc3RvZmZEYXRlbmJsYXR0IjoiMS40NDA0In0sIjEuNDQzNSI6eyJ3ZXJrc3RvZmYiOiIxLjQ0MzUiLCJ3ZXJrc3RvZmZEYXRlbmJsYXR0IjoiMS40NDM1LUJOMiJ9fSwiYmF1Zm9ybWVuIjp7IkNGIjp7InByb2R1a3QiOiJDb25uZWN0LUZsYW5zY2gifSwiQ0ZJIjp7InByb2R1a3QiOiJDb25uZWN0LUZsYW5zY2ggSW5saW5lIn19LCJnZW1laW5zYW0iOnsibG9ja2luZ1JpbmdXZXJrc3RvZmYiOiIxLjQ0MDQiLCJzY2hyYXViZW5NdXR0ZXJuV2Vya3N0b2ZmZSI6WyIxLjQ0MDQiLCIxLjQzMDEiXSwicmFJbm5lbiI6MC40LCJyYUF1c3NlbiI6MC44LCJlbGVrdHJvcG9saWVyZW5PcHRpb25hbCI6dHJ1ZX19LCJjZiI6eyJpZCI6IkNGIiwicXVlbGxlIjoiSGVyc3RlbGxlcmRhdGVuYmxhdHQgQ29ubmVjdC1GbGFuc2NoLCBTZWl0ZW4gMS04OyBDRi1DRkktTWFzc2UtZ2VzaWNoZXJ0LTIwMjYtMDctMTYubWQgKHVuYWJoYWVuZ2lnZXIgQWJnbGVpY2ggMjAyNi0wNy0yMikiLCJnZW9tZXRyaWVTdGF0dXMiOiJ2ZXJpZml6aWVydCIsImdlb21ldHJpZUdlbWVpbnNhbUZ1ZXJTZXJpZW4iOnRydWUsInJlaWhlbiI6eyJBU1RNIjp7ImxhYmVsIjoiQVNUTSBBMjY5LUEyNzAiLCJyb3dzIjpbeyJpZCI6IkEwMTIiLCJsYWJlbCI6IkEwMTIgKDFcLzJcIikiLCJEZSI6NTUsIkRmIjoyNSwiRGkiOjkuNCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTAxOSIsImxhYmVsIjoiQTAxOSAoM1wvNFwiKSIsIkRlIjo1NSwiRGYiOjI1LCJEaSI6MTUuNzUsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwMjUiLCJsYWJlbCI6IkEwMjUgKDFcIikiLCJEZSI6ODUsIkRmIjo1MC40LCJEaSI6MjIuMSwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTAzOCIsImxhYmVsIjoiQTAzOCAoMSAxXC8yXCIpIiwiRGUiOjg1LCJEZiI6NTAuNCwiRGkiOjM0LjgsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwNTAiLCJsYWJlbCI6IkEwNTAgKDJcIikiLCJEZSI6MTAwLCJEZiI6NjMuOSwiRGkiOjQ3LjUsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwNjMiLCJsYWJlbCI6IkEwNjMgKDIgMVwvMlwiKSIsIkRlIjoxMTIsIkRmIjo3Ny40LCJEaSI6NjAuMiwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTA3NiIsImxhYmVsIjoiQTA3NiAoM1wiKSIsIkRlIjoxMzEsIkRmIjo5MC45LCJEaSI6NzIuOSwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTEwMCIsImxhYmVsIjoiQTEwMCAoNFwiKSIsIkRlIjoxNzAsIkRmIjoxMTguOSwiRGkiOjk3LjM5LCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9XX0sIkRJTiI6eyJsYWJlbCI6IkRJTiAzMjY3NiBcLyBESU4gMTE4NTAgUmVpaGUgMS0zIiwicm93cyI6W3siaWQiOiJETjEwIiwibGFiZWwiOiJETjEwIiwiRGUiOjcwLCJEZiI6MzQsIkRpIjoxMCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4xNSIsImxhYmVsIjoiRE4xNSIsIkRlIjo3MCwiRGYiOjM0LCJEaSI6MTYsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMjAiLCJsYWJlbCI6IkROMjAiLCJEZSI6NzAsIkRmIjozNCwiRGkiOjIwLCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjI1IiwibGFiZWwiOiJETjI1IiwiRGUiOjg1LCJEZiI6NTAuNSwiRGkiOjI2LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjMyIiwibGFiZWwiOiJETjMyIiwiRGUiOjg1LCJEZiI6NTAuNSwiRGkiOjMyLCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjQwLUY1MC41IiwibGFiZWwiOiJETjQwIChGbGFuc2NoIDUwLDUpIiwiRGUiOjg1LCJEZiI6NTAuNSwiRGkiOjM4LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjQwLUY2NCIsImxhYmVsIjoiRE40MCAoRmxhbnNjaCA2NCkiLCJEZSI6MTAwLCJEZiI6NjQsIkRpIjozOCwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE41MCIsImxhYmVsIjoiRE41MCIsIkRlIjoxMDAsIkRmIjo2NCwiRGkiOjUwLCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjY1IiwibGFiZWwiOiJETjY1IiwiRGUiOjEzMSwiRGYiOjkxLCJEaSI6NjYsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROODAiLCJsYWJlbCI6IkROODAiLCJEZSI6MTQ2LCJEZiI6MTA2LCJEaSI6ODEsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMTAwIiwibGFiZWwiOiJETjEwMCIsIkRlIjoxNzAsIkRmIjoxMTksIkRpIjoxMDAsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In1dfSwiSVNPIjp7ImxhYmVsIjoiSVNPIDExMjcgU2VyaWUgMSIsInJvd3MiOlt7ImlkIjoiRE44LUYyNSIsImxhYmVsIjoiRE44IChGbGFuc2NoIDI1KSIsIkRlIjo1NSwiRGYiOjI1LCJEaSI6MTAuMywibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE44LUYzNCIsImxhYmVsIjoiRE44IChGbGFuc2NoIDM0KSIsIkRlIjo3MCwiRGYiOjM0LCJEaSI6MTAuMywibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4xMC1GMjUiLCJsYWJlbCI6IkROMTAgKEZsYW5zY2ggMjUpIiwiRGUiOjU1LCJEZiI6MjUsIkRpIjoxNCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4xMC1GMzQiLCJsYWJlbCI6IkROMTAgKEZsYW5zY2ggMzQpIiwiRGUiOjcwLCJEZiI6MzQsIkRpIjoxNCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4xNSIsImxhYmVsIjoiRE4xNSIsIkRlIjo3MCwiRGYiOjM0LCJEaSI6MTguMSwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4yMCIsImxhYmVsIjoiRE4yMCIsIkRlIjo4NSwiRGYiOjUwLjUsIkRpIjoyMy43LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjI1IiwibGFiZWwiOiJETjI1IiwiRGUiOjg1LCJEZiI6NTAuNSwiRGkiOjI5LjcsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMzItRjUwLjUiLCJsYWJlbCI6IkROMzIgKEZsYW5zY2ggNTAsNSkiLCJEZSI6ODUsIkRmIjo1MC41LCJEaSI6MzguNCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4zMi1GNjQiLCJsYWJlbCI6IkROMzIgKEZsYW5zY2ggNjQpIiwiRGUiOjEwMCwiRGYiOjY0LCJEaSI6MzguNCwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE40MCIsImxhYmVsIjoiRE40MCIsIkRlIjoxMDAsIkRmIjo2NCwiRGkiOjQ0LjMsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkRONTAiLCJsYWJlbCI6IkRONTAiLCJEZSI6MTEyLCJEZiI6NzcuNSwiRGkiOjU2LjMsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkRONjUiLCJsYWJlbCI6IkRONjUiLCJEZSI6MTMxLCJEZiI6OTEsIkRpIjo3Mi4xLCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjgwIiwibGFiZWwiOiJETjgwIiwiRGUiOjE0NiwiRGYiOjEwNiwiRGkiOjg0LjMsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In1dfSwiU01TIjp7ImxhYmVsIjoiU01TIDMwMDgiLCJyb3dzIjpbeyJpZCI6IlMxMiIsImxhYmVsIjoiUzEyIiwiRGUiOjU1LCJEZiI6MjUsIkRpIjoxMCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiUzE4IiwibGFiZWwiOiJTMTgiLCJEZSI6NTUsIkRmIjoyNSwiRGkiOjE1LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJTMjUiLCJsYWJlbCI6IlMyNSIsIkRlIjo4NSwiRGYiOjUwLjUsIkRpIjoyMi42LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJTMzgiLCJsYWJlbCI6IlMzOCIsIkRlIjo4NSwiRGYiOjUwLjUsIkRpIjozNS42LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJTNTEiLCJsYWJlbCI6IlM1MSIsIkRlIjoxMDAsIkRmIjo2NCwiRGkiOjQ4LjYsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IlM2NCIsImxhYmVsIjoiUzY0IiwiRGUiOjExMiwiRGYiOjc3LjUsIkRpIjo2MC4zLCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJTNzYiLCJsYWJlbCI6IlM3NiIsIkRlIjoxMzEsIkRmIjo5MSwiRGkiOjcyLjksImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IlMxMDIiLCJsYWJlbCI6IlMxMDIiLCJEZSI6MTcwLCJEZiI6MTE5LCJEaSI6OTcuNiwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifV19fX0sImNmaSI6eyJpZCI6IkNGSSIsInN0YXR1cyI6InZlcmlmaXppZXJ0Iiwibm9ybSI6IkFTVE0gQTI2OS1BMjcwIFwvIEFTTUUgQlBFIiwib2JlcmVyQW5zY2hsdXNzIjp7IkRlIjo1MC41LCJEaSI6MzQuOH0sInJvd3MiOlt7ImlkIjoiQTAxMiIsImxhYmVsIjoiMVwvMlwiIiwiRGUiOjEyLjcsIkRpIjo5LjQsIlkiOjEwLjMsImFuc2NobHVlc3NlIjp7IkJXIjp7ImxhYmVsIjoiQnV0dCBXZWxkIiwiTCI6MTEwLCJBIjoxOSwiVEMiOm51bGx9LCJUQyI6eyJsYWJlbCI6IlRyaS1DbGFtcCIsIkwiOjExNiwiQSI6bnVsbCwiVEMiOjI1fX0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwMTkiLCJsYWJlbCI6IjNcLzRcIiIsIkRlIjoxOS4wNSwiRGkiOjE1Ljc1LCJZIjoxMC45LCJhbnNjaGx1ZXNzZSI6eyJCVyI6eyJsYWJlbCI6IkJ1dHQgV2VsZCIsIkwiOjExMCwiQSI6MTksIlRDIjpudWxsfSwiVEMiOnsibGFiZWwiOiJUcmktQ2xhbXAiLCJMIjoxMTYsIkEiOm51bGwsIlRDIjoyNX19LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMDI1IiwibGFiZWwiOiIxXCIiLCJEZSI6MjUuNCwiRGkiOjIyLjEsIlkiOjE0LCJhbnNjaGx1ZXNzZSI6eyJCVyI6eyJsYWJlbCI6IkJ1dHQgV2VsZCIsIkwiOjExMCwiQSI6MTksIlRDIjpudWxsfSwiVEMiOnsibGFiZWwiOiJUcmktQ2xhbXAiLCJMIjoxMTYsIkEiOm51bGwsIlRDIjo1MC41fX0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwMzgiLCJsYWJlbCI6IjEgMVwvMlwiIiwiRGUiOjM4LjEsIkRpIjozNC44LCJZIjoyNCwiYW5zY2hsdWVzc2UiOnsiQlciOnsibGFiZWwiOiJCdXR0IFdlbGQiLCJMIjoxMTAsIkEiOjE5LCJUQyI6bnVsbH0sIlRDIjp7ImxhYmVsIjoiVHJpLUNsYW1wIiwiTCI6MTM2LCJBIjpudWxsLCJUQyI6NTAuNX19LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMDUwIiwibGFiZWwiOiIyXCIiLCJEZSI6NTAuOCwiRGkiOjQ3LjUsIlkiOjI5LCJhbnNjaGx1ZXNzZSI6eyJCVyI6eyJsYWJlbCI6IkJ1dHQgV2VsZCIsIkwiOjExMCwiQSI6MTksIlRDIjpudWxsfSwiVEMiOnsibGFiZWwiOiJUcmktQ2xhbXAiLCJMIjoxMzYsIkEiOm51bGwsIlRDIjo2NH19LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMDYzIiwibGFiZWwiOiIyIDFcLzJcIiIsIkRlIjo2My41LCJEaSI6NjAuMiwiWSI6MzUsImFuc2NobHVlc3NlIjp7IkJXIjp7ImxhYmVsIjoiQnV0dCBXZWxkIiwiTCI6MTEwLCJBIjoxOSwiVEMiOm51bGx9LCJUQyI6eyJsYWJlbCI6IlRyaS1DbGFtcCIsIkwiOjEzNiwiQSI6bnVsbCwiVEMiOjc3LjV9fSwic3RhdHVzIjoidmVyaWZpemllcnQifV19fSwiY2YiOnsiaWQiOiJDRiIsInF1ZWxsZSI6IkhlcnN0ZWxsZXJkYXRlbmJsYXR0IENvbm5lY3QtRmxhbnNjaCwgU2VpdGVuIDEtODsgQ0YtQ0ZJLU1hc3NlLWdlc2ljaGVydC0yMDI2LTA3LTE2Lm1kICh1bmFiaGFlbmdpZ2VyIEFiZ2xlaWNoIDIwMjYtMDctMjIpIiwiZ2VvbWV0cmllU3RhdHVzIjoidmVyaWZpemllcnQiLCJnZW9tZXRyaWVHZW1laW5zYW1GdWVyU2VyaWVuIjp0cnVlLCJyZWloZW4iOnsiQVNUTSI6eyJsYWJlbCI6IkFTVE0gQTI2OS1BMjcwIiwicm93cyI6W3siaWQiOiJBMDEyIiwibGFiZWwiOiJBMDEyICgxXC8yXCIpIiwiRGUiOjU1LCJEZiI6MjUsIkRpIjo5LjQsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwMTkiLCJsYWJlbCI6IkEwMTkgKDNcLzRcIikiLCJEZSI6NTUsIkRmIjoyNSwiRGkiOjE1Ljc1LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMDI1IiwibGFiZWwiOiJBMDI1ICgxXCIpIiwiRGUiOjg1LCJEZiI6NTAuNCwiRGkiOjIyLjEsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwMzgiLCJsYWJlbCI6IkEwMzggKDEgMVwvMlwiKSIsIkRlIjo4NSwiRGYiOjUwLjQsIkRpIjozNC44LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMDUwIiwibGFiZWwiOiJBMDUwICgyXCIpIiwiRGUiOjEwMCwiRGYiOjYzLjksIkRpIjo0Ny41LCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMDYzIiwibGFiZWwiOiJBMDYzICgyIDFcLzJcIikiLCJEZSI6MTEyLCJEZiI6NzcuNCwiRGkiOjYwLjIsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwNzYiLCJsYWJlbCI6IkEwNzYgKDNcIikiLCJEZSI6MTMxLCJEZiI6OTAuOSwiRGkiOjcyLjksImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkExMDAiLCJsYWJlbCI6IkExMDAgKDRcIikiLCJEZSI6MTcwLCJEZiI6MTE4LjksIkRpIjo5Ny4zOSwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifV19LCJESU4iOnsibGFiZWwiOiJESU4gMzI2NzYgXC8gRElOIDExODUwIFJlaWhlIDEtMyIsInJvd3MiOlt7ImlkIjoiRE4xMCIsImxhYmVsIjoiRE4xMCIsIkRlIjo3MCwiRGYiOjM0LCJEaSI6MTAsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMTUiLCJsYWJlbCI6IkROMTUiLCJEZSI6NzAsIkRmIjozNCwiRGkiOjE2LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjIwIiwibGFiZWwiOiJETjIwIiwiRGUiOjcwLCJEZiI6MzQsIkRpIjoyMCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4yNSIsImxhYmVsIjoiRE4yNSIsIkRlIjo4NSwiRGYiOjUwLjUsIkRpIjoyNiwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4zMiIsImxhYmVsIjoiRE4zMiIsIkRlIjo4NSwiRGYiOjUwLjUsIkRpIjozMiwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE40MC1GNTAuNSIsImxhYmVsIjoiRE40MCAoRmxhbnNjaCA1MCw1KSIsIkRlIjo4NSwiRGYiOjUwLjUsIkRpIjozOCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE40MC1GNjQiLCJsYWJlbCI6IkRONDAgKEZsYW5zY2ggNjQpIiwiRGUiOjEwMCwiRGYiOjY0LCJEaSI6MzgsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkRONTAiLCJsYWJlbCI6IkRONTAiLCJEZSI6MTAwLCJEZiI6NjQsIkRpIjo1MCwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE42NSIsImxhYmVsIjoiRE42NSIsIkRlIjoxMzEsIkRmIjo5MSwiRGkiOjY2LCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjgwIiwibGFiZWwiOiJETjgwIiwiRGUiOjE0NiwiRGYiOjEwNiwiRGkiOjgxLCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjEwMCIsImxhYmVsIjoiRE4xMDAiLCJEZSI6MTcwLCJEZiI6MTE5LCJEaSI6MTAwLCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9XX0sIklTTyI6eyJsYWJlbCI6IklTTyAxMTI3IFNlcmllIDEiLCJyb3dzIjpbeyJpZCI6IkROOC1GMjUiLCJsYWJlbCI6IkROOCAoRmxhbnNjaCAyNSkiLCJEZSI6NTUsIkRmIjoyNSwiRGkiOjEwLjMsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROOC1GMzQiLCJsYWJlbCI6IkROOCAoRmxhbnNjaCAzNCkiLCJEZSI6NzAsIkRmIjozNCwiRGkiOjEwLjMsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMTAtRjI1IiwibGFiZWwiOiJETjEwIChGbGFuc2NoIDI1KSIsIkRlIjo1NSwiRGYiOjI1LCJEaSI6MTQsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMTAtRjM0IiwibGFiZWwiOiJETjEwIChGbGFuc2NoIDM0KSIsIkRlIjo3MCwiRGYiOjM0LCJEaSI6MTQsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMTUiLCJsYWJlbCI6IkROMTUiLCJEZSI6NzAsIkRmIjozNCwiRGkiOjE4LjEsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMjAiLCJsYWJlbCI6IkROMjAiLCJEZSI6ODUsIkRmIjo1MC41LCJEaSI6MjMuNywibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4yNSIsImxhYmVsIjoiRE4yNSIsIkRlIjo4NSwiRGYiOjUwLjUsIkRpIjoyOS43LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjMyLUY1MC41IiwibGFiZWwiOiJETjMyIChGbGFuc2NoIDUwLDUpIiwiRGUiOjg1LCJEZiI6NTAuNSwiRGkiOjM4LjQsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMzItRjY0IiwibGFiZWwiOiJETjMyIChGbGFuc2NoIDY0KSIsIkRlIjoxMDAsIkRmIjo2NCwiRGkiOjM4LjQsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkRONDAiLCJsYWJlbCI6IkRONDAiLCJEZSI6MTAwLCJEZiI6NjQsIkRpIjo0NC4zLCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjUwIiwibGFiZWwiOiJETjUwIiwiRGUiOjExMiwiRGYiOjc3LjUsIkRpIjo1Ni4zLCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjY1IiwibGFiZWwiOiJETjY1IiwiRGUiOjEzMSwiRGYiOjkxLCJEaSI6NzIuMSwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE44MCIsImxhYmVsIjoiRE44MCIsIkRlIjoxNDYsIkRmIjoxMDYsIkRpIjo4NC4zLCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9XX0sIlNNUyI6eyJsYWJlbCI6IlNNUyAzMDA4Iiwicm93cyI6W3siaWQiOiJTMTIiLCJsYWJlbCI6IlMxMiIsIkRlIjo1NSwiRGYiOjI1LCJEaSI6MTAsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IlMxOCIsImxhYmVsIjoiUzE4IiwiRGUiOjU1LCJEZiI6MjUsIkRpIjoxNSwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiUzI1IiwibGFiZWwiOiJTMjUiLCJEZSI6ODUsIkRmIjo1MC41LCJEaSI6MjIuNiwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiUzM4IiwibGFiZWwiOiJTMzgiLCJEZSI6ODUsIkRmIjo1MC41LCJEaSI6MzUuNiwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiUzUxIiwibGFiZWwiOiJTNTEiLCJEZSI6MTAwLCJEZiI6NjQsIkRpIjo0OC42LCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJTNjQiLCJsYWJlbCI6IlM2NCIsIkRlIjoxMTIsIkRmIjo3Ny41LCJEaSI6NjAuMywibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiUzc2IiwibGFiZWwiOiJTNzYiLCJEZSI6MTMxLCJEZiI6OTEsIkRpIjo3Mi45LCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJTMTAyIiwibGFiZWwiOiJTMTAyIiwiRGUiOjE3MCwiRGYiOjExOSwiRGkiOjk3LjYsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In1dfX19LCJjZmkiOnsiaWQiOiJDRkkiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsIm5vcm0iOiJBU1RNIEEyNjktQTI3MCBcLyBBU01FIEJQRSIsIm9iZXJlckFuc2NobHVzcyI6eyJEZSI6NTAuNSwiRGkiOjM0Ljh9LCJyb3dzIjpbeyJpZCI6IkEwMTIiLCJsYWJlbCI6IjFcLzJcIiIsIkRlIjoxMi43LCJEaSI6OS40LCJZIjoxMC4zLCJhbnNjaGx1ZXNzZSI6eyJCVyI6eyJsYWJlbCI6IkJ1dHQgV2VsZCIsIkwiOjExMCwiQSI6MTksIlRDIjpudWxsfSwiVEMiOnsibGFiZWwiOiJUcmktQ2xhbXAiLCJMIjoxMTYsIkEiOm51bGwsIlRDIjoyNX19LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMDE5IiwibGFiZWwiOiIzXC80XCIiLCJEZSI6MTkuMDUsIkRpIjoxNS43NSwiWSI6MTAuOSwiYW5zY2hsdWVzc2UiOnsiQlciOnsibGFiZWwiOiJCdXR0IFdlbGQiLCJMIjoxMTAsIkEiOjE5LCJUQyI6bnVsbH0sIlRDIjp7ImxhYmVsIjoiVHJpLUNsYW1wIiwiTCI6MTE2LCJBIjpudWxsLCJUQyI6MjV9fSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTAyNSIsImxhYmVsIjoiMVwiIiwiRGUiOjI1LjQsIkRpIjoyMi4xLCJZIjoxNCwiYW5zY2hsdWVzc2UiOnsiQlciOnsibGFiZWwiOiJCdXR0IFdlbGQiLCJMIjoxMTAsIkEiOjE5LCJUQyI6bnVsbH0sIlRDIjp7ImxhYmVsIjoiVHJpLUNsYW1wIiwiTCI6MTE2LCJBIjpudWxsLCJUQyI6NTAuNX19LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMDM4IiwibGFiZWwiOiIxIDFcLzJcIiIsIkRlIjozOC4xLCJEaSI6MzQuOCwiWSI6MjQsImFuc2NobHVlc3NlIjp7IkJXIjp7ImxhYmVsIjoiQnV0dCBXZWxkIiwiTCI6MTEwLCJBIjoxOSwiVEMiOm51bGx9LCJUQyI6eyJsYWJlbCI6IlRyaS1DbGFtcCIsIkwiOjEzNiwiQSI6bnVsbCwiVEMiOjUwLjV9fSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTA1MCIsImxhYmVsIjoiMlwiIiwiRGUiOjUwLjgsIkRpIjo0Ny41LCJZIjoyOSwiYW5zY2hsdWVzc2UiOnsiQlciOnsibGFiZWwiOiJCdXR0IFdlbGQiLCJMIjoxMTAsIkEiOjE5LCJUQyI6bnVsbH0sIlRDIjp7ImxhYmVsIjoiVHJpLUNsYW1wIiwiTCI6MTM2LCJBIjpudWxsLCJUQyI6NjR9fSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTA2MyIsImxhYmVsIjoiMiAxXC8yXCIiLCJEZSI6NjMuNSwiRGkiOjYwLjIsIlkiOjM1LCJhbnNjaGx1ZXNzZSI6eyJCVyI6eyJsYWJlbCI6IkJ1dHQgV2VsZCIsIkwiOjExMCwiQSI6MTksIlRDIjpudWxsfSwiVEMiOnsibGFiZWwiOiJUcmktQ2xhbXAiLCJMIjoxMzYsIkEiOm51bGwsIlRDIjo3Ny41fX0sInN0YXR1cyI6InZlcmlmaXppZXJ0In1dfSwidGNkIjp7InJlaWhlbiI6eyJBIjp7ImxhYmVsIjoiUmVpaGUgQSAtIG1ldHJpc2NoIChETiwgRElOIDExODUwKSIsImdyb2Vzc2UiOiJETiIsInJvd3MiOlt7ImlkIjoiRE4wNiIsImxhYmVsIjoiRE4wNiIsIm53Ijo2LCJmbGFuZ2VPRCI6MjUsImF1c3NlbkQiOjEyLCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiJETjA4IiwibGFiZWwiOiJETjA4IiwibnciOjgsImZsYW5nZU9EIjoyNSwiYXVzc2VuRCI6MTYsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IkROMTAiLCJsYWJlbCI6IkROMTAiLCJudyI6MTAsImZsYW5nZU9EIjozNCwiYXVzc2VuRCI6MTgsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IkROMTUiLCJsYWJlbCI6IkROMTUiLCJudyI6MTUsImZsYW5nZU9EIjozNCwiYXVzc2VuRCI6MjQsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IkROMjAiLCJsYWJlbCI6IkROMjAiLCJudyI6MjAsImZsYW5nZU9EIjozNCwiYXVzc2VuRCI6MjgsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IkROMjUiLCJsYWJlbCI6IkROMjUiLCJudyI6MjUsImZsYW5nZU9EIjo1MC41LCJhdXNzZW5EIjozNCwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiRE4zMiIsImxhYmVsIjoiRE4zMiIsIm53IjozMiwiZmxhbmdlT0QiOjUwLjUsImF1c3NlbkQiOjQwLCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiJETjQwIiwibGFiZWwiOiJETjQwIiwibnciOjQwLCJmbGFuZ2VPRCI6NTAuNSwiYXVzc2VuRCI6NDYsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IkRONTAiLCJsYWJlbCI6IkRONTAiLCJudyI6NTAsImZsYW5nZU9EIjo2NCwiYXVzc2VuRCI6NTgsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IkRONjUiLCJsYWJlbCI6IkRONjUiLCJudyI6NjUsImZsYW5nZU9EIjo5MSwiYXVzc2VuRCI6NzQsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IkROODAiLCJsYWJlbCI6IkROODAiLCJudyI6ODAsImZsYW5nZU9EIjoxMDYsImF1c3NlbkQiOjg5LCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiJETjEwMCIsImxhYmVsIjoiRE4xMDAiLCJudyI6MTAwLCJmbGFuZ2VPRCI6MTE5LCJhdXNzZW5EIjoxMDgsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IkROMTI1IiwibGFiZWwiOiJETjEyNSIsIm53IjoxMjUsImZsYW5nZU9EIjoxNTUsImF1c3NlbkQiOjEzMywid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiRE4xNTAiLCJsYWJlbCI6IkROMTUwIiwibnciOjE1MCwiZmxhbmdlT0QiOjE4MywiYXVzc2VuRCI6MTU4LCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiJETjIwMCIsImxhYmVsIjoiRE4yMDAiLCJudyI6MjAwLCJmbGFuZ2VPRCI6MjMzLjUsImF1c3NlbkQiOjIwOCwid2FsbCI6NCwiaG9laGUiOjYwfV19LCJCIjp7ImxhYmVsIjoiUmVpaGUgQiAtIG1ldHJpc2NoIElTTyAoT0QsIEVOIElTTyAxMTI3KSIsImdyb2Vzc2UiOiJPRCIsInJvd3MiOlt7ImlkIjoiTlcxMC4yIiwibGFiZWwiOiJOVyAxMCwyIiwibnciOjEwLjIsImZsYW5nZU9EIjoyNSwiYXVzc2VuRCI6MTUsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6Ik5XMTMuNSIsImxhYmVsIjoiTlcgMTMsNSIsIm53IjoxMy41LCJmbGFuZ2VPRCI6MjUsImF1c3NlbkQiOjE4LjMsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6Ik5XMTcuMiIsImxhYmVsIjoiTlcgMTcsMiIsIm53IjoxNy4yLCJmbGFuZ2VPRCI6MjUsImF1c3NlbkQiOjIyLCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiJOVzIxLjMiLCJsYWJlbCI6Ik5XIDIxLDMiLCJudyI6MjEuMywiZmxhbmdlT0QiOjUwLjUsImF1c3NlbkQiOjI2LjEsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6Ik5XMjYuOSIsImxhYmVsIjoiTlcgMjYsOSIsIm53IjoyNi45LCJmbGFuZ2VPRCI6NTAuNSwiYXVzc2VuRCI6MzEuNywid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiTlczMy43IiwibGFiZWwiOiJOVyAzMyw3IiwibnciOjMzLjcsImZsYW5nZU9EIjo1MC41LCJhdXNzZW5EIjozNy43LCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiJOVzQyLjQiLCJsYWJlbCI6Ik5XIDQyLDQiLCJudyI6NDIuNCwiZmxhbmdlT0QiOjY0LCJhdXNzZW5EIjo0Ni40LCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiJOVzQ4LjMiLCJsYWJlbCI6Ik5XIDQ4LDMiLCJudyI6NDguMywiZmxhbmdlT0QiOjY0LCJhdXNzZW5EIjo1Mi4zLCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiJOVzYwLjMiLCJsYWJlbCI6Ik5XIDYwLDMiLCJudyI6NjAuMywiZmxhbmdlT0QiOjc3LjUsImF1c3NlbkQiOjY0LjMsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6Ik5XNzYuMSIsImxhYmVsIjoiTlcgNzYsMSIsIm53Ijo3Ni4xLCJmbGFuZ2VPRCI6OTEsImF1c3NlbkQiOjgwLjEsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6Ik5XODguOSIsImxhYmVsIjoiTlcgODgsOSIsIm53Ijo4OC45LCJmbGFuZ2VPRCI6MTA2LCJhdXNzZW5EIjo5Mi4zLCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiJOVzExNC4zIiwibGFiZWwiOiJOVyAxMTQsMyIsIm53IjoxMTQuMywiZmxhbmdlT0QiOjEzMCwiYXVzc2VuRCI6MTE3LjcsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6Ik5XMTM5LjciLCJsYWJlbCI6Ik5XIDEzOSw3IiwibnciOjEzOS43LCJmbGFuZ2VPRCI6MTU1LCJhdXNzZW5EIjoxNDIuNSwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiTlcxNjguMyIsImxhYmVsIjoiTlcgMTY4LDMiLCJudyI6MTY4LjMsImZsYW5nZU9EIjoxODMsImF1c3NlbkQiOjE3MS4xLCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiJOVzIxOS4xIiwibGFiZWwiOiJOVyAyMTksMSIsIm53IjoyMTkuMSwiZmxhbmdlT0QiOjIzMy41LCJhdXNzZW5EIjoyMjEuOSwid2FsbCI6NCwiaG9laGUiOjYwfV19LCJDIjp7ImxhYmVsIjoiUmVpaGUgQyAtIFpvbGxcL09EIChBU01FLUJQRS1uYWgpIiwiZ3JvZXNzZSI6IlpvbGwiLCJyb3dzIjpbeyJpZCI6IjAuMjUiLCJsYWJlbCI6IjFcLzRcIiIsIm53IjoiMVwvNFwiIiwiZmxhbmdlT0QiOjI1LCJhdXNzZW5EIjoxMi41LCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiIwLjM3NSIsImxhYmVsIjoiM1wvOFwiIiwibnciOiIzXC84XCIiLCJmbGFuZ2VPRCI6MjUsImF1c3NlbkQiOjE1LjcsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IjAuNSIsImxhYmVsIjoiMVwvMlwiIiwibnciOiIxXC8yXCIiLCJmbGFuZ2VPRCI6MjUsImF1c3NlbkQiOjE3LjQsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IjAuNzUiLCJsYWJlbCI6IjNcLzRcIiIsIm53IjoiM1wvNFwiIiwiZmxhbmdlT0QiOjI1LCJhdXNzZW5EIjoyMy43LCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiIxIiwibGFiZWwiOiIxXCIiLCJudyI6IjFcIiIsImZsYW5nZU9EIjo1MC41LCJhdXNzZW5EIjozMC4xLCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiIxLjUiLCJsYWJlbCI6IjEgMVwvMlwiIiwibnciOiIxIDFcLzJcIiIsImZsYW5nZU9EIjo1MC41LCJhdXNzZW5EIjo0Mi44LCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiIyIiwibGFiZWwiOiIyXCIiLCJudyI6IjJcIiIsImZsYW5nZU9EIjo2NCwiYXVzc2VuRCI6NTUuNSwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiMi41IiwibGFiZWwiOiIyIDFcLzJcIiIsIm53IjoiMiAxXC8yXCIiLCJmbGFuZ2VPRCI6NzcuNSwiYXVzc2VuRCI6NjguMiwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiMyIsImxhYmVsIjoiM1wiIiwibnciOiIzXCIiLCJmbGFuZ2VPRCI6OTEsImF1c3NlbkQiOjgwLjksIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IjQiLCJsYWJlbCI6IjRcIiIsIm53IjoiNFwiIiwiZmxhbmdlT0QiOjExOSwiYXVzc2VuRCI6MTA1LjMsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IjYiLCJsYWJlbCI6IjZcIiIsIm53IjoiNlwiIiwiZmxhbmdlT0QiOjE2NywiYXVzc2VuRCI6MTU0LjgsIndhbGwiOjQsImhvZWhlIjo2MH1dfX0sImtvbnN0YW50Ijp7IndhbGwiOjQsImhvZWhlIjo2MH19fSwiZmxhbnNjaGdyb2Vzc2VuIjpbeyJpZCI6IkYyNSIsImZsYW5nZU9EIjoyNSwibGFiZWwiOiIyNSIsImJsaW5kVGhrIjo0Ljc1LCJnYXNrZXRPRCI6MjIsImtsYW1tZXJBIjp7IktMMSI6MjgsIktMTEkiOjI4LCJLTEgiOjI4LjJ9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjM0IiwiZmxhbmdlT0QiOjM0LCJsYWJlbCI6IjM0IiwiYmxpbmRUaGsiOjQuNzUsImdhc2tldE9EIjozNCwia2xhbW1lckEiOnsiS0wxIjozNywiS0xMSSI6MzcsIktMSCI6Mzd9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjUwXzUiLCJmbGFuZ2VPRCI6NTAuNSwibGFiZWwiOiI1MCw1IiwiYmxpbmRUaGsiOjYuMzUsImdhc2tldE9EIjo1MC41LCJrbGFtbWVyQSI6eyJLTDEiOjUzLCJLTExJIjo1MywiS0xIIjo1MS41fSwibWFzc2VuQmVrYW5udCI6dHJ1ZX0seyJpZCI6IkY2NCIsImZsYW5nZU9EIjo2NCwibGFiZWwiOiI2NCIsImJsaW5kVGhrIjo2LjM1LCJnYXNrZXRPRCI6NjQsImtsYW1tZXJBIjp7IktMMSI6NjYuNSwiS0xMSSI6NjYuNSwiS0xIIjo2NS41fSwibWFzc2VuQmVrYW5udCI6dHJ1ZX0seyJpZCI6IkY3N181IiwiZmxhbmdlT0QiOjc3LjUsImxhYmVsIjoiNzcsNSIsImJsaW5kVGhrIjo2LjM1LCJnYXNrZXRPRCI6NzcuNSwia2xhbW1lckEiOnsiS0wxIjo4MCwiS0xMSSI6ODAsIktMSCI6Nzl9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjkxIiwiZmxhbmdlT0QiOjkxLCJsYWJlbCI6IjkxIiwiYmxpbmRUaGsiOjYuMzUsImdhc2tldE9EIjo5MSwia2xhbW1lckEiOnsiS0wxIjo5My41LCJLTExJIjo5My41LCJLTEgiOjkyLjV9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjEwNiIsImZsYW5nZU9EIjoxMDYsImxhYmVsIjoiMTA2IiwiYmxpbmRUaGsiOjYuMzUsImdhc2tldE9EIjoxMDYsImtsYW1tZXJBIjp7IktMMSI6MTA5LCJLTExJIjoxMDksIktMSCI6MTExLjV9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjExOSIsImZsYW5nZU9EIjoxMTksImxhYmVsIjoiMTE5IiwiYmxpbmRUaGsiOjgsImdhc2tldE9EIjoxMTksImtsYW1tZXJBIjp7IktMMSI6MTIxLjUsIktMTEkiOjEyMS41LCJLTEgiOjEyMC41fSwibWFzc2VuQmVrYW5udCI6dHJ1ZX0seyJpZCI6IkYxMzAiLCJmbGFuZ2VPRCI6MTMwLCJsYWJlbCI6IjEzMCIsImJsaW5kVGhrIjo4LCJnYXNrZXRPRCI6MTMwLCJrbGFtbWVyQSI6eyJLTDEiOjEzMywiS0xMSSI6MTMzLCJLTEgiOjEzMi41fSwibWFzc2VuQmVrYW5udCI6dHJ1ZX0seyJpZCI6IkYxNDRfNSIsImZsYW5nZU9EIjoxNDQuNSwibGFiZWwiOiIxNDQsNSIsImJsaW5kVGhrIjo4LCJnYXNrZXRPRCI6bnVsbCwia2xhbW1lckEiOnsiS0wxIjoxNDYsIktMTEkiOjE0NiwiS0xIIjoxNDd9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjE1NSIsImZsYW5nZU9EIjoxNTUsImxhYmVsIjoiMTU1IiwiYmxpbmRUaGsiOjgsImdhc2tldE9EIjoxNTUsImtsYW1tZXJBIjp7IktMMSI6MTU5LCJLTExJIjoxNTksIktMSCI6MTU5fSwibWFzc2VuQmVrYW5udCI6dHJ1ZX0seyJpZCI6IkYxNjciLCJmbGFuZ2VPRCI6MTY3LCJsYWJlbCI6IjE2NyIsImJsaW5kVGhrIjoxNCwiZ2Fza2V0T0QiOjE2Nywia2xhbW1lckEiOnsiS0wxIjoxNzAsIktMTEkiOjE3MCwiS0xIIjoxNzB9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjE4MyIsImZsYW5nZU9EIjoxODMsImxhYmVsIjoiMTgzIiwiYmxpbmRUaGsiOjE0LCJnYXNrZXRPRCI6MTgzLCJrbGFtbWVyQSI6eyJLTDEiOjE4NywiS0xMSSI6MTg3LCJLTEgiOjE4N30sIm1hc3NlbkJla2FubnQiOnRydWV9LHsiaWQiOiJGMjE3XzUiLCJmbGFuZ2VPRCI6MjE3LjUsImxhYmVsIjoiMjE3LDUiLCJibGluZFRoayI6MTQsImdhc2tldE9EIjpudWxsLCJrbGFtbWVyQSI6eyJLTDEiOjIxOS41LCJLTExJIjoyMTkuNSwiS0xIIjoyMjF9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjIzM181IiwiZmxhbmdlT0QiOjIzMy41LCJsYWJlbCI6IjIzMyw1IiwiYmxpbmRUaGsiOjE0LCJnYXNrZXRPRCI6MjMzLjUsImtsYW1tZXJBIjp7IktMMSI6MjM3LjUsIktMTEkiOjIzNy41LCJLTEgiOjIzNy41fSwibWFzc2VuQmVrYW5udCI6dHJ1ZX0seyJpZCI6IkYyNjgiLCJmbGFuZ2VPRCI6MjY4LCJsYWJlbCI6IjI2OCIsImJsaW5kVGhrIjoxNCwiZ2Fza2V0T0QiOm51bGwsImtsYW1tZXJBIjp7IktMMSI6MjcyLCJLTExJIjoyNzIsIktMSCI6MjczfSwibWFzc2VuQmVrYW5udCI6dHJ1ZX0seyJpZCI6IkYyODZfMSIsImZsYW5nZU9EIjoyODYuMSwibGFiZWwiOiIyODYsMSIsImJsaW5kVGhrIjoxNCwiZ2Fza2V0T0QiOm51bGwsImtsYW1tZXJBIjp7IktMMSI6MjkyLCJLTExJIjoyOTIsIktMSCI6MjkyfSwibWFzc2VuQmVrYW5udCI6dHJ1ZX0seyJpZCI6IkYzMTkiLCJmbGFuZ2VPRCI6MzE5LCJsYWJlbCI6IjMxOSIsImJsaW5kVGhrIjoxNCwiZ2Fza2V0T0QiOm51bGwsImtsYW1tZXJBIjp7IktMMSI6MzI0LjUsIktMTEkiOjMyNC41LCJLTEgiOjMyNC41fSwibWFzc2VuQmVrYW5udCI6dHJ1ZX0seyJpZCI6IkYzMzgiLCJmbGFuZ2VPRCI6MzM4LCJsYWJlbCI6IjMzOCIsImJsaW5kVGhrIjoxNCwiZ2Fza2V0T0QiOm51bGwsImtsYW1tZXJBIjp7IktMMSI6MzQzLjUsIktMTEkiOjM0My41LCJLTEgiOjM0My41fSwibWFzc2VuQmVrYW5udCI6dHJ1ZX1dLCJrbGFtbWVyVHlwZW4iOlt7ImlkIjoiS0wxIiwibGFiZWwiOiJLTDEiLCJzdWIiOiJLbGFtbWVyIG1pdCBlaW5mYWNoZW0gR2VsZW5rIHVuZCBlaW5lbSBQaW4iLCJ3ZXJrc3RvZmZlIjpbIjEuNDMwOCJdLCJkZWZhdWx0Ijp0cnVlfSx7ImlkIjoiS0xMSSIsImxhYmVsIjoiS0xMSSIsInN1YiI6IktsYW1tZXIgbWl0IGVpbmVtIEdlbGVuayB1bmQgendlaSBQaW5zIiwid2Vya3N0b2ZmZSI6WyIxLjQzMDgiLCIxLjQ0MDgiXX0seyJpZCI6IktMSCIsImxhYmVsIjoiS0xIIiwic3ViIjoiSG9jaGRydWNra2xhbW1lciBcdTIwMTMgendlaSBIYWxic2NoYWxlbiBtaXQgbFx1MDBmNnNiYXJlbiBWZXJiaW5kdW5nZW4gKDIgR2VsZW5rZSkiLCJ3ZXJrc3RvZmZlIjpbIjEuNDMwOCJdfV0sImtsYW1tZXJNdXR0ZXJuIjpbeyJpZCI6Ik0iLCJsYWJlbCI6Ik11dHRlciIsInN1YiI6IlN0YW5kYXJkIiwiZGVmYXVsdCI6dHJ1ZX0seyJpZCI6IlMiLCJsYWJlbCI6IlNlY2hza2FudG11dHRlciIsInN1YiI6ImdlZ2VuIEF1ZnByZWlzIiwiYXVmcHJlaXMiOnRydWV9XSwia2xhbW1lck11dHRlckhpbndlaXMiOiJTZWNoc2thbnRtdXR0ZXIgZ2VnZW4gQXVmcHJlaXMgbVx1MDBmNmdsaWNoLiIsIndlcmtzdG9mZmUiOlt7ImlkIjoiMS40NDA0IiwibGFiZWwiOiIxLjQ0MDQiLCJzdWIiOiJYMkNyTmlNbzE3LTEyLTIgXHUwMGI3IDMxNkwiLCJkZWZhdWx0Ijp0cnVlLCJoaW53ZWlzIjoiU3RhbmRhcmQgaW0gSHlnaWVuaWMgRGVzaWduLCBzZWhyIGd1dCBzY2h3ZWlzc2Jhci4ifSx7ImlkIjoiMS40NDM1IiwibGFiZWwiOiIxLjQ0MzUiLCJzdWIiOiJYMkNyTmlNbzE4LTE0LTMgXHUwMGI3IDMxNkwiLCJkZWZhdWx0IjpmYWxzZSwiaGlud2VpcyI6IkhcdTAwZjZoZXJlciBNb1wvTmktQW50ZWlsLCBmXHUwMGZjciBFbGVrdHJvcG9saXR1ciB1bmQgUmVpbnN0bWVkaWVuLiJ9XSwia2xhbW1lcldlcmtzdG9mZmUiOlt7ImlkIjoiMS40MzA4IiwibGFiZWwiOiIxLjQzMDgiLCJzdWIiOm51bGwsImhpbndlaXMiOm51bGwsImRlZmF1bHQiOnRydWV9LHsiaWQiOiIxLjQ0MDgiLCJsYWJlbCI6IjEuNDQwOCIsInN1YiI6bnVsbCwiaGlud2VpcyI6bnVsbH1dLCJvYmVyZmxhZWNoZW4iOlt7ImlkIjoiSDRvIiwibGFiZWwiOiJING8iLCJyYUlubmVuIjowLjQsInJhQXVzc2VuIjowLjgsInZlcmZhaHJlbiI6ImVsZWt0cm9wb2xpZXJ0IChFUCkiLCJzdWIiOiJSYSBpbm5lbiBcdTIyNjQwLDQwIFwvIGF1XHUwMGRmZW4gXHUyMjY0MCw4MCBcdTAwYjVtIFx1MDBiNyBlbGVrdHJvcG9saWVydCJ9LHsiaWQiOiJINCIsImxhYmVsIjoiSDQiLCJyYUlubmVuIjowLjQsInJhQXVzc2VuIjowLjgsInZlcmZhaHJlbiI6Im1lY2hhbmlzY2ggcG9saWVydCBcLyBnZWRyZWh0IiwiZGVmYXVsdCI6dHJ1ZSwic3ViIjoiUmEgaW5uZW4gXHUyMjY0MCw0MCBcLyBhdVx1MDBkZmVuIFx1MjI2NDAsODAgXHUwMGI1bSBcdTAwYjcgbWVjaGFuaXNjaCBwb2xpZXJ0In0seyJpZCI6IlN0ZXJpbCIsImxhYmVsIjoiU3RlcmlsIiwicmFJbm5lbiI6MC41LCJyYUF1c3NlbiI6MC44LCJ2ZXJmYWhyZW4iOiJtZWNoYW5pc2NoIHBvbGllcnQsIHBvbGllcnQgXC8gZ2VkcmVodCIsInN1YiI6IlJhIGlubmVuIFx1MjI2NDAsNTAgXC8gYXVcdTAwZGZlbiBcdTIyNjQwLDgwIFx1MDBiNW0gXHUwMGI3IG1lY2hhbmlzY2ggcG9saWVydCJ9LHsiaWQiOiJIMyIsImxhYmVsIjoiSDMiLCJyYUlubmVuIjowLjgsInJhQXVzc2VuIjoxLjYsInZlcmZhaHJlbiI6Imdlc2NobGlmZmVuIiwic3ViIjoiUmEgaW5uZW4gXHUyMjY0MCw4MCBcLyBhdVx1MDBkZmVuIFx1MjI2NDEsNjAgXHUwMGI1bSJ9LHsiaWQiOiJIMSIsImxhYmVsIjoiSDEiLCJyYUlubmVuIjoxLjYsInJhQXVzc2VuIjozLjIsInZlcmZhaHJlbiI6ImdlYmVpenQgXC8gZ2VzY2hsaWZmZW4iLCJzdWIiOiJSYSBpbm5lbiA8MSw2MCBcLyBhdVx1MDBkZmVuIDwzLDIwIFx1MDBiNW0gXHUwMGI3IENoZW1pZS1TdGFuZGFyZCJ9XSwiZGljaHR1bmdlbiI6W3siaWQiOiJFUERNIiwiY29kZSI6IkUiLCJhcnRpa2VsQ29kZSI6IkVQRE0iLCJsYWJlbCI6IkVQRE0iLCJmYXJiZSI6IiMyYjJiMmIiLCJ0ZW1wTWluIjotNDAsInRlbXBNYXgiOjE1MCwiYnJhbmNoZW4iOlsicGhhcm1hIiwic3RlcmlsdGVjaG5payIsImxlYmVuc21pdHRlbCJdLCJmZGEiOnRydWUsInVzcFZJIjp0cnVlLCJzdWIiOiJXYXNzZXIsIFdGSSwgRGFtcGYsIENJUFwvU0lQIn0seyJpZCI6IlZNUSIsImNvZGUiOiJTIiwiYXJ0aWtlbENvZGUiOiJWTVEiLCJsYWJlbCI6IlNpbGlrb24gKFZNUSkiLCJmYXJiZSI6IiNlN2UyZDgiLCJ0ZW1wTWluIjotNjAsInRlbXBNYXgiOjIwMCwiYnJhbmNoZW4iOlsibGViZW5zbWl0dGVsIiwicGhhcm1hIl0sImZkYSI6dHJ1ZSwidXNwVkkiOnRydWUsInN1YiI6IkhlcnZvcnJhZ2VuZGUgVGVtcGVyYXR1cmJlc3RcdTAwZTRuZGlna2VpdCBcdTAwYjcgQmVkaW5ndCBmXHUwMGZjciBEYW1wZiJ9LHsiaWQiOiJGS00iLCJjb2RlIjoiViIsImFydGlrZWxDb2RlIjoiRktNIiwibGFiZWwiOiJWaXRvbiAoRktNKSIsImZhcmJlIjoiIzJmN2QzYSIsInRlbXBNaW4iOi0yMCwidGVtcE1heCI6MjAwLCJicmFuY2hlbiI6WyJjaGVtaWUiXSwiZmRhIjp0cnVlLCJ1c3BWSSI6dHJ1ZSwic3ViIjoiQXVcdTAwZGZlcm9yZGVudGxpY2hlIEJlc3RcdTAwZTRuZGlna2VpdCBnZWdlbiBcdTAwZDZsZSwgRmV0dGUsIFNcdTAwZTR1cmVuIHVuZCBzY2h3YWNoZW4gQWxrYWxpZW4ifSx7ImlkIjoiUFRGRSIsImNvZGUiOiJQIiwiYXJ0aWtlbENvZGUiOiJQVEZFIiwibGFiZWwiOiJQVEZFIiwiZmFyYmUiOiIjZjRmNGY0IiwidGVtcE1pbiI6LTIwMCwidGVtcE1heCI6MjYwLCJicmFuY2hlbiI6WyJjaGVtaWUiLCJwaGFybWEiLCJzdGVyaWx0ZWNobmlrIl0sImZkYSI6dHJ1ZSwidXNwVkkiOnRydWUsInN1YiI6Im5haGV6dSB1bml2ZXJzZWxsIGNoZW1pc2NoIGJlc3RcdTAwZTRuZGlnIn0seyJpZCI6IlZQIiwiY29kZSI6IlZQIiwiYXJ0aWtlbENvZGUiOiJQVEZFXC9GS00iLCJsYWJlbCI6IlBURkVcL0ZLTSIsImZhcmJlIjoiI2VmZTlkZiIsInRlbXBNaW4iOi0yMCwidGVtcE1heCI6MjAwLCJicmFuY2hlbiI6WyJjaGVtaWUiLCJwaGFybWEiLCJzdGVyaWx0ZWNobmlrIl0sImZkYSI6dHJ1ZSwidXNwVkkiOnRydWUsInN1YiI6IlBURkUtdW1tYW50ZWx0IG1pdCBGS00tS2VybiBcdTAwYjcgYmVzdFx1MDBlNG5kaWcgKyByXHUwMGZjY2tzdGVsbGZcdTAwZTRoaWcifV0sImRpY2h0dW5nQXVzZnVlaHJ1bmciOlt7ImlkIjoiTCIsImxhYmVsIjoibWl0IExpcHBlIChUeXAgSUkpIn0seyJpZCI6Ik8iLCJsYWJlbCI6Im9obmUgTGlwcGUgKFR5cCBJKSJ9XSwiZmRhS29uZm9ybWl0YWV0Ijp7InBoYXJtYSI6IkZEQSBcLyBVU1AgQ2xhc3MgVkkgXHUwMGI3IEFESVwvQlNFXC9UU0UiLCJzdGVyaWx0ZWNobmlrIjoiRkRBIFwvIFVTUCBDbGFzcyBWSSBcdTAwYjcgQURJXC9CU0VcL1RTRSIsImxlYmVuc21pdHRlbCI6IkZEQSBcLyBFRyAxOTM1XC8yMDA0IiwiY2hlbWllIjoiRkRBIFwvIEVHIDE5MzVcLzIwMDQifSwiZmRhS29uZm9ybWl0YWV0RmFsbGJhY2siOiJGREEgXC8gRUcgMTkzNVwvMjAwNCIsImZkYUt1cnoiOnsicGhhcm1hIjoiVVNQIENsYXNzIFZJIiwic3RlcmlsdGVjaG5payI6IlVTUCBDbGFzcyBWSSIsImxlYmVuc21pdHRlbCI6IkVHIDE5MzVcLzIwMDQiLCJjaGVtaWUiOiJFRyAxOTM1XC8yMDA0In0sIm5hY2h3ZWlzZSI6W3siaWQiOiJFTjEwMjA0XzMxIiwibGFiZWwiOiJBYm5haG1lcHJcdTAwZmNmemV1Z25pcyAzLjEiLCJzdWIiOiJFTiAxMDIwNCwgY2hhcmdlbmJlem9nZW4ifSx7ImlkIjoiRU4xMDIwNF8zMV9BRFcyIiwibGFiZWwiOiJBYm5haG1lcHJcdTAwZmNmemV1Z25pcyAzLjEgbmFjaCBBRC1XMiIsInN1YiI6IkVOIDEwMjA0LCBjaGFyZ2VuYmV6b2dlbiJ9LHsiaWQiOiJGREEiLCJsYWJlbCI6IkZEQSBcLyBFRyAxOTM1XC8yMDA0Iiwic3ViIjoiTWVkaWVuYmVyXHUwMGZjaHJ0ZSBXZXJrc3RvZmZlIiwiYW53ZW5kdW5nc0xhYmVsIjoiZmRhS29uZm9ybWl0YWV0In0seyJpZCI6IkZFUlJJVCIsImxhYmVsIjoiRmVycml0LU1lc3N1bmciLCJzdWIiOiJEZWx0YS1GZXJyaXQtR2VoYWx0In0seyJpZCI6IlJBX1BST1QiLCJsYWJlbCI6IlJhLU1lc3Nwcm90b2tvbGwiLCJzdWIiOiJPYmVyZmxcdTAwZTRjaGVucmF1aGVpdCJ9XSwibWVuZ2Vuc3RhZmZlbCI6WzEsMjUsNTAsMTAwLDI1MF0sImVpbnNhdHoiOnsibm9ybSI6IkRJTiAzMjY3NiIsImRydWNrQmFuZHMiOlt7ImFkTWF4Ijo0Mi40LCJiYXIiOjI1LCJtcGEiOjIuNX0seyJhZE1heCI6NzYuMiwiYmFyIjoxNiwibXBhIjoxLjZ9LHsiYWRNYXgiOjIxOS4xLCJiYXIiOjEwLCJtcGEiOjF9XSwidGVtcE1pbiI6LTEwLCJ0ZW1wTWF4IjoxNDAsInRlbXBIaW53ZWlzIjoiYmVpIGdlZWlnbmV0ZW4gS2xhbW1lcm4gdW5kIERpY2h0dW5nc3dlcmtzdG9mZmVuIiwicGxhY2Vob2xkZXIiOmZhbHNlfSwiY29uc3RyYWludHMiOlt7Indlbm4iOnsib2JlcmZsYWVjaGUiOiJING8ifSwiZW1wZmllaGxXZXJrc3RvZmYiOiIxLjQ0MzUiLCJncnVuZCI6IkVsZWt0cm9wb2xpdHVyIChING8pIHdpcmQgbWl0IDEuNDQzNSBlbXBmb2hsZW4uIn1dLCJwcmVpc2UiOnsicGxhdHpoYWx0ZXIiOnRydWUsIndhZWhydW5nIjoiRVVSIiwiZ2xvYmFsRmFrdG9yIjoxLCJmcmVpZ2VnZWJlbiI6ZmFsc2UsImdydW5kcHJlaXMiOnsiVEMiOm51bGwsIlRDRCI6bnVsbCwiVENTIjpudWxsLCJEIjpudWxsLCJDRiI6bnVsbCwiQ0ZJIjpudWxsLCJCRCI6bnVsbCwiS0wiOm51bGwsIkI5MCI6bnVsbCwiQjQ1IjpudWxsLCJUUyI6bnVsbCwiVFNSIjpudWxsLCJSIjpudWxsfSwiZG5GYWt0b3JSZWZPRCI6MjUsImRuRmFrdG9yU3RlaWd1bmciOjAsIndlcmtzdG9mZlp1c2NobGFnUHJvemVudCI6eyIxLjQ0MDQiOm51bGwsIjEuNDQzNSI6bnVsbH0sIm9iZXJmbGFlY2hlWnVzY2hsYWdQcm96ZW50Ijp7Ikg0byI6bnVsbCwiSDQiOm51bGwsIlN0ZXJpbCI6bnVsbCwiSDMiOm51bGwsIkgxIjpudWxsfSwiZGljaHR1bmdBdWZwcmVpc0V1cm8iOnsiRVBETSI6bnVsbCwiVk1RIjpudWxsLCJGS00iOm51bGwsIlBURkUiOm51bGwsIlZQIjpudWxsfSwibmFjaHdlaXNBdWZwcmVpc0V1cm8iOnsiRU4xMDIwNF8zMSI6MCwiRU4xMDIwNF8zMV9BRFcyIjpudWxsLCJGREEiOjAsIkZFUlJJVCI6bnVsbCwiUkFfUFJPVCI6bnVsbH0sIm5hY2h3ZWlzU3RhbmRhcmQiOlsiRkRBIl0sInN0YWZmZWwiOlt7ImFiIjoxLCJyYWJhdHQiOjB9XX19O3dpbmRvdy5XRUlTU19TSEFSRV9CQVNFPSJodHRwczpcL1wvd2Vpc3MtYXBwYXJhdGViYXUuZGVcL2VuXC9zZXJ2aWNlXC93ZWxkLWZpdHRpbmdzLXN0YWlubGVzcy1zdGVlbFwvIjt3aW5kb3cuV0VJU1NfUFJFTE9BRD0iP25vcm09ZGluMTE4NjUiOzwvc2NyaXB0PjxzY3JpcHQ+d2luZG93LldFSVNTX0kxOE49ewogImV4YWt0IjogewogICJBYiBoaWVyIHfDpGNoc3QgZGllIFplaWNobnVuZyByZWNodHMgbGl2ZSBtaXQgZGVpbmVyIEF1c3dhaGwuIjogIkZyb20gaGVyZSB0aGUgZHJhd2luZyBvbiB0aGUgcmlnaHQgZ3Jvd3MgbGl2ZSB3aXRoIHlvdXIgc2VsZWN0aW9uLiIsCiAgIkFibmFobWVwcsO8ZnpldWduaXMgMy4xIjogIkluc3BlY3Rpb24gY2VydGlmaWNhdGUgMy4xIiwKICAiQWJuYWhtZXByw7xmemV1Z25pcyAzLjEgbmFjaCBBRC1XMiI6ICJJbnNwZWN0aW9uIGNlcnRpZmljYXRlIDMuMSB0byBBRC1XMiIsCiAgIkFsbGUgRElOLTExODY1LUZpdHRpbmdzIGbDvHIgT3JiaXRhbHNjaHdlacOfdW5nLiI6ICJBbGwgRElOIDExODY1IGZpdHRpbmdzIGZvciBvcmJpdGFsIHdlbGRpbmcuIiwKICAiQW5mcmFnZSI6ICJJbnF1aXJ5IiwKICAiQW5mcmFnZSBwZXIgRS1NYWlsIHNlbmRlbiI6ICJTZW5kIGlucXVpcnkgYnkgZS1tYWlsIiwKICAiQW5mcmFnZSB6dXNhbW1lbnN0ZWxsZW4iOiAiQ29tcGlsZSBpbnF1aXJ5IiwKICAiQW5zY2h3ZWlzc3N0dXR6ZW4gbWl0IENsYW1wYW5zY2hsdXNzIjogIldlbGQtb24gZmVycnVsZSB3aXRoIGNsYW1wIGNvbm5lY3Rpb24iLAogICJBbnNpY2h0IjogIlZpZXciLAogICJBbnNpY2h0OiI6ICJWaWV3OiIsCiAgIkFud2VuZHVuZyI6ICJBcHBsaWNhdGlvbiIsCiAgIkF1ZiBBbmZyYWdlIjogIk9uIHJlcXVlc3QiLAogICJhdWYgQW5mcmFnZSI6ICJvbiByZXF1ZXN0IiwKICAiQXVzIGRlciBBbndlbmR1bmcgc2NobGFnZW4gd2lyIFdlcmtzdG9mZiwgT2JlcmZsw6RjaGUgdW5kIERpY2h0dW5nIHNpbm52b2xsIHZvci4gQW5wYXNzZW4ga2FubnN0IGR1IGFsbGVzIHNww6R0ZXIuIjogIkJhc2VkIG9uIHRoZSBhcHBsaWNhdGlvbiB3ZSBzdWdnZXN0IGEgc3VpdGFibGUgbWF0ZXJpYWwsIHN1cmZhY2UgZmluaXNoIGFuZCBnYXNrZXQuIFlvdSBjYW4gY2hhbmdlIGV2ZXJ5dGhpbmcgbGF0ZXIuIiwKICAiQXVzZsO8aHJ1bmciOiAiRGVzaWduIiwKICAiQXXDn2Vyb3JkZW50bGljaGUgQmVzdMOkbmRpZ2tlaXQgZ2VnZW4gw5ZsZSwgRmV0dGUsIFPDpHVyZW4gdW5kIHNjaHdhY2hlbiBBbGthbGllbiDCtyBGREEgwrcgVVNQIENsYXNzIFZJIjogIk91dHN0YW5kaW5nIHJlc2lzdGFuY2UgdG8gb2lscywgZ3JlYXNlcywgYWNpZHMgYW5kIHdlYWsgYWxrYWxpcyDCtyBGREEgwrcgVVNQIENsYXNzIFZJIiwKICAiQmF1dGVpbCI6ICJDb21wb25lbnQiLAogICJCYXV0ZWlsIHfDpGhsZW4iOiAiU2VsZWN0IGNvbXBvbmVudCIsCiAgIkJlaWRlIHNpbmQgYXVzIGRlciBBbndlbmR1bmcgdm9yYmVsZWd0LiI6ICJCb3RoIGFyZSBwcmVzZXQgZnJvbSB0aGUgYXBwbGljYXRpb24uIiwKICAiQsO2Z2VuLCBULVN0w7xja2UsIFJlZHV6aWVydW5nZW4gLSBhdWYgQW5mcmFnZSwgamUgbmFjaCBWZXJmw7xnYmFya2VpdC4iOiAiQmVuZHMsIHRlZXMsIHJlZHVjZXJzIC0gb24gcmVxdWVzdCwgc3ViamVjdCB0byBhdmFpbGFiaWxpdHkuIiwKICAiQ2xhbXBzdHV0emVuLCBCbGluZGRlY2tlbCwgS2xhbW1lcm4g4oCTIFByZWlzIGF1ZiBBbmZyYWdlLiI6ICJDbGFtcCBmZXJydWxlcywgYmxhbmsgY2FwcywgY2xhbXBzIC0gcHJpY2Ugb24gcmVxdWVzdC4iLAogICJESU4gMTE4NjUg4oCTIEZpcm1hIFdlaXNzIGthbGt1bGllcnQgaW5kaXZpZHVlbGwuIjogIkRJTiAxMTg2NSAtIFdlaXNzIHF1b3RlcyBpbmRpdmlkdWFsbHkuIiwKICAiRElOIDExODY1IOKAkyBHZXNjaHdlacOfdGUgRml0dGluZ3MiOiAiRElOIDExODY1IC0gd2VsZGVkIGZpdHRpbmdzIiwKICAiRElOIDMyNjc2IOKAkyBGaXJtYSBXZWlzcyBrYWxrdWxpZXJ0IGluZGl2aWR1ZWxsLiI6ICJESU4gMzI2NzYgLSBXZWlzcyBxdW90ZXMgaW5kaXZpZHVhbGx5LiIsCiAgIkRJTiAzMjY3NiDigJMgQ2xhbXB2ZXJiaW5kdW5nIjogIkRJTiAzMjY3NiAtIGNsYW1wIGNvbm5lY3Rpb24iLAogICJEYXMgQWJuYWhtZXByw7xmemV1Z25pcyAzLjEgaXN0IGtvc3Rlbmxvcy4gMy4xIG5hY2ggQUQtVzIsIEZlcnJpdC1NZXNzdW5nIHVuZCBSYS1NZXNzcHJvdG9rb2xsIGdpYnQgZXMgZ2VnZW4gTWVocmtvc3Rlbi4iOiAiVGhlIGluc3BlY3Rpb24gY2VydGlmaWNhdGUgMy4xIGlzIGZyZWUgb2YgY2hhcmdlLiAzLjEgdG8gQUQtVzIsIGZlcnJpdGUgbWVhc3VyZW1lbnQgYW5kIFJhIHRlc3QgcmVwb3J0IGFyZSBhdmFpbGFibGUgYXQgZXh0cmEgY29zdC4iLAogICJEaWNodHVuZyB3w6RobGVuIjogIlNlbGVjdCBnYXNrZXQiLAogICJEaWUgRGljaHR1bmdzZmFyYmUgZXJzY2hlaW50IGRpcmVrdCBpbiBkZXIgWmVpY2hudW5nLiBBbGxlIFN0YW5kYXJkZGljaHR1bmdlbiB2b24gRmlybWEgV2Vpc3Mgc2luZCBGREEtIHVuZCBVU1AgQ2xhc3MgVkkta29uZm9ybS4iOiAiVGhlIGdhc2tldCBjb2xvdXIgYXBwZWFycyBkaXJlY3RseSBpbiB0aGUgZHJhd2luZy4gQWxsIHN0YW5kYXJkIGdhc2tldHMgZnJvbSBXZWlzcyBjb21wbHkgd2l0aCBGREEgYW5kIFVTUCBDbGFzcyBWSS4iLAogICJFaW5zYXR6IjogIlVzZSIsCiAgIkZEQSAvIFVTUCBDbGFzcyBWSSDCtyBBREkvQlNFL1RTRSAoU3RhbmRhcmQpIOKAlCBiZWkgYWxsZW4gU3RhbmRhcmRkaWNodHVuZ2VuIHZvbiBGaXJtYSBXZWlzcyBpbmtsdXNpdmUuIjogIkZEQSAvIFVTUCBDbGFzcyBWSSDCtyBBREkvQlNFL1RTRSAoc3RhbmRhcmQpIC0gaW5jbHVkZWQgd2l0aCBhbGwgc3RhbmRhcmQgZ2Fza2V0cyBmcm9tIFdlaXNzLiIsCiAgIkZpcm1hIjogIkNvbXBhbnkiLAogICJGaXJtYSBXZWlzcyBrYWxrdWxpZXJ0IGJlaWRlIFByb2R1a3RncnVwcGVuIGluZGl2aWR1ZWxsIGF1ZiBBbmZyYWdlLiI6ICJXZWlzcyBxdW90ZXMgYm90aCBwcm9kdWN0IGdyb3VwcyBpbmRpdmlkdWFsbHkgb24gcmVxdWVzdC4iLAogICJHZXRyw6Rua2UsIE1vbGtlcmVpLCBGb29kIjogIkJldmVyYWdlcywgZGFpcnksIGZvb2QiLAogICJHcsO2w59lIjogIlNpemUiLAogICJHcsO2w59lIChPRCkiOiAiU2l6ZSAoT0QpIiwKICAiR3LDtsOfZSBuYWNoIEZsYW5zY2gtw5giOiAiU2l6ZSBieSBmbGFuZ2Ug4oyAIiwKICAiSGVydm9ycmFnZW5kZSBUZW1wZXJhdHVyYmVzdMOkbmRpZ2tlaXQgwrcgQmVkaW5ndCBmw7xyIERhbXBmIMK3IEZEQSDCtyBVU1AgQ2xhc3MgVkkiOiAiRXhjZWxsZW50IHRlbXBlcmF0dXJlIHJlc2lzdGFuY2UgwrcgbGltaXRlZCBmb3Igc3RlYW0gwrcgRkRBIMK3IFVTUCBDbGFzcyBWSSIsCiAgIkhvY2hkcnVja2tsYW1tZXIg4oCTIHp3ZWkgSGFsYnNjaGFsZW4gbWl0IGzDtnNiYXJlbiBWZXJiaW5kdW5nZW4gKDIgR2VsZW5rZSkiOiAiSGlnaC1wcmVzc3VyZSBjbGFtcCAtIHR3byBoYWxmIHNoZWxscyB3aXRoIGRldGFjaGFibGUgam9pbnRzICgyIGhpbmdlcykiLAogICJJbmxpbmUtQXVzZsO8aHJ1bmciOiAiSW5saW5lIGRlc2lnbiIsCiAgIktsYW1tZXIgZGVyIGtvbXBsZXR0ZW4gVmVyYmluZHVuZyI6ICJDbGFtcCBvZiB0aGUgY29tcGxldGUgY29ubmVjdGlvbiIsCiAgIktsYW1tZXIgbWl0IGVpbmVtIEdlbGVuayB1bmQgendlaSBQaW5zIjogIkNsYW1wIHdpdGggb25lIGhpbmdlIGFuZCB0d28gcGlucyIsCiAgIktsYW1tZXIgbWl0IGVpbmZhY2hlbSBHZWxlbmsgdW5kIGVpbmVtIFBpbiI6ICJDbGFtcCB3aXRoIGEgc2luZ2xlIGhpbmdlIGFuZCBvbmUgcGluIiwKICAiS29uZmlndXJhdGlvbiBhdWYgZGVuIFVyc3BydW5nc3p1c3RhbmQgenVyw7xja3NldHplbiI6ICJSZXNldCB0aGUgY29uZmlndXJhdGlvbiB0byBpdHMgb3JpZ2luYWwgc3RhdGUiLAogICJMw6RuZ3NzY2huaXR0IChCb2dlbiA0NcKwKSI6ICJMb25naXR1ZGluYWwgc2VjdGlvbiAoNDXCsCBiZW5kKSIsCiAgIkzDpG5nc3NjaG5pdHQgKEJvZ2VuIDkwwrApIjogIkxvbmdpdHVkaW5hbCBzZWN0aW9uICg5MMKwIGJlbmQpIiwKICAiTMOkbmdzc2Nobml0dCAoQ2xhbXAtVmVyYmluZHVuZykiOiAiTG9uZ2l0dWRpbmFsIHNlY3Rpb24gKGNsYW1wIGNvbm5lY3Rpb24pIiwKICAiTMOkbmdzc2Nobml0dCAoVC1TdMO8Y2spIjogIkxvbmdpdHVkaW5hbCBzZWN0aW9uICh0ZWUpIiwKICAiTMOkbmdzc2Nobml0dCAoZWluemVsbmVyIFN0dXR6ZW4pIjogIkxvbmdpdHVkaW5hbCBzZWN0aW9uIChzaW5nbGUgZmVycnVsZSkiLAogICJMw7ZzZW1pdHRlbCwgU8OkdXJlbiwgw5ZsZSI6ICJTb2x2ZW50cywgYWNpZHMsIG9pbHMiLAogICJNYcOfZSBmZXN0bGVnZW4iOiAiRGVmaW5lIGRpbWVuc2lvbnMiLAogICJNZWRpZW5iZXLDvGhydGUgV2Vya3N0b2ZmZSI6ICJQcm9kdWN0LWNvbnRhY3QgbWF0ZXJpYWxzIiwKICAiTmFjaHdlaXNlICYgTWVuZ2UiOiAiQ2VydGlmaWNhdGVzICYgcXVhbnRpdHkiLAogICJOb3JtIjogIlN0YW5kYXJkIiwKICAiT2JlcmZsw6RjaGUiOiAiU3VyZmFjZSBmaW5pc2giLAogICJPYmVyZmzDpGNoZSAoRElOIDExODY2KSI6ICJTdXJmYWNlIGZpbmlzaCAoRElOIDExODY2KSIsCiAgIk9iZXJmbMOkY2hlOiI6ICJTdXJmYWNlIGZpbmlzaDoiLAogICJPYmVyZmzDpGNoZW5yYXVoZWl0IjogIlN1cmZhY2Ugcm91Z2huZXNzIiwKICAiUFRGRS11bW1hbnRlbHQgbWl0IEZLTS1LZXJuIMK3IGJlc3TDpG5kaWcgKyByw7xja3N0ZWxsZsOkaGlnIMK3IEZEQSDCtyBVU1AgQ2xhc3MgVkkiOiAiUFRGRS1qYWNrZXRlZCB3aXRoIEZLTSBjb3JlIMK3IHJlc2lzdGFudCBhbmQgcmVzaWxpZW50IMK3IEZEQSDCtyBVU1AgQ2xhc3MgVkkiLAogICJQcmVpc2Ugd2VyZGVuIGluZGl2aWR1ZWxsIGFuZ2Vib3Rlbi4gTmljaHQgYmVsZWd0ZSBNYcOfZSBvZGVyIEFydGlrZWxudW1tZXJuIGVyZ8Okbnp0IEZpcm1hIFdlaXNzIGltIEFuZ2Vib3Q7IHdpZGVyc3Byw7xjaGxpY2hlIG9kZXIgbmljaHQgZ2VsaWVmZXJ0ZSBCZXJlaWNoZSBibGVpYmVuIGdlc3BlcnJ0IHVuZCB3ZXJkZW4gbmljaHQgZ2VzY2jDpHR6dC4iOiAiUHJpY2VzIGFyZSBxdW90ZWQgaW5kaXZpZHVhbGx5LiBXZWlzcyBhZGRzIGFueSBkaW1lbnNpb25zIG9yIGFydGljbGUgbnVtYmVycyBub3QgY292ZXJlZCBoZXJlIGluIHRoZSBxdW90YXRpb247IGNvbnRyYWRpY3Rvcnkgb3IgdW5zdXBwbGllZCByYW5nZXMgc3RheSBsb2NrZWQgYW5kIGFyZSBub3QgZXN0aW1hdGVkLiIsCiAgIlByw7xmZSBkaWUgYmVsZWd0ZW4gQW5nYWJlbiB1bmQgZXJnw6RuemUgZGVpbmVuIEtvbnRha3QuIE9mZmVuZSBXZXJ0ZSBibGVpYmVuIGRldXRsaWNoIGdla2VubnplaWNobmV0LiI6ICJDaGVjayB0aGUgZGV0YWlscyBwcm92aWRlZCBhbmQgYWRkIHlvdXIgY29udGFjdCBkYXRhLiBPcGVuIHZhbHVlcyByZW1haW4gY2xlYXJseSBtYXJrZWQuIiwKICAiUiwgTDEsIEwyIHVuZCBMMyBzdGFtbWVuIGF1cyBkZXIgYXVzZ2Vmw7xsbHRlbiBXZWlzcy1NYcOfdGFiZWxsZS4gRGllIHZvbiBGaXJtYSBXZWlzcyBrb3JyaWdpZXJ0ZW4gRE4yNS1XZXJ0ZSBzaW5kIGVudGhhbHRlbi4iOiAiUiwgTDEsIEwyIGFuZCBMMyBjb21lIGZyb20gdGhlIGNvbXBsZXRlZCBXZWlzcyBkaW1lbnNpb24gdGFibGUuIFRoZSBETjI1IHZhbHVlcyBjb3JyZWN0ZWQgYnkgV2Vpc3MgYXJlIGluY2x1ZGVkLiIsCiAgIlJhIGlubmVuIDwxLDYwIC8gYXXDn2VuIDwzLDIwIMK1bSDCtyBDaGVtaWUtU3RhbmRhcmQgwrcgZ2ViZWl6dCAvIGdlc2NobGlmZmVuIjogIlJhIGluc2lkZSA8MS42MCAvIG91dHNpZGUgPDMuMjAgwrVtIMK3IGNoZW1pY2FsIHN0YW5kYXJkIMK3IHBpY2tsZWQgLyBncm91bmQiLAogICJSYSBpbm5lbiDiiaQwLDQwIC8gYXXDn2VuIOKJpDAsODAgwrVtIMK3IGVsZWt0cm9wb2xpZXJ0IMK3IGVsZWt0cm9wb2xpZXJ0IChFUCkiOiAiUmEgaW5zaWRlIOKJpDAuNDAgLyBvdXRzaWRlIOKJpDAuODAgwrVtIMK3IGVsZWN0cm9wb2xpc2hlZCDCtyBlbGVjdHJvcG9saXNoZWQgKEVQKSIsCiAgIlJhIGlubmVuIOKJpDAsNDAgLyBhdcOfZW4g4omkMCw4MCDCtW0gwrcgbWVjaGFuaXNjaCBwb2xpZXJ0IMK3IG1lY2hhbmlzY2ggcG9saWVydCAvIGdlZHJlaHQiOiAiUmEgaW5zaWRlIOKJpDAuNDAgLyBvdXRzaWRlIOKJpDAuODAgwrVtIMK3IG1lY2hhbmljYWxseSBwb2xpc2hlZCDCtyBtZWNoYW5pY2FsbHkgcG9saXNoZWQgLyB0dXJuZWQiLAogICJSYSBpbm5lbiDiiaQwLDUwIC8gYXXDn2VuIOKJpDAsODAgwrVtIMK3IG1lY2hhbmlzY2ggcG9saWVydCDCtyBtZWNoYW5pc2NoIHBvbGllcnQsIHBvbGllcnQgLyBnZWRyZWh0IjogIlJhIGluc2lkZSDiiaQwLjUwIC8gb3V0c2lkZSDiiaQwLjgwIMK1bSDCtyBtZWNoYW5pY2FsbHkgcG9saXNoZWQgwrcgbWVjaGFuaWNhbGx5IHBvbGlzaGVkLCBwb2xpc2hlZCAvIHR1cm5lZCIsCiAgIlJhIGlubmVuIOKJpDAsODAgLyBhdcOfZW4g4omkMSw2MCDCtW0gwrcgZ2VzY2hsaWZmZW4iOiAiUmEgaW5zaWRlIOKJpDAuODAgLyBvdXRzaWRlIOKJpDEuNjAgwrVtIMK3IGdyb3VuZCIsCiAgIlJlaWhlIHVuZCBHcsO2w59lIGJlc3RpbW1lbiBkaWUgR2VvbWV0cmllLiBEaWUgWmVpY2hudW5nIHVuZCBkaWUgTWHDn2tldHRlbiB3YWNoc2VuIGxpdmUgbWl0LiI6ICJTZXJpZXMgYW5kIHNpemUgZGV0ZXJtaW5lIHRoZSBnZW9tZXRyeS4gVGhlIGRyYXdpbmcgYW5kIHRoZSBkaW1lbnNpb24gY2hhaW5zIGdyb3cgd2l0aCBpdCBsaXZlLiIsCiAgIlN0dXR6ZW5sw6RuZ2UiOiAiRmVycnVsZSBsZW5ndGgiLAogICJTdMO8Y2t6YWhsIjogIlF1YW50aXR5IiwKICAiVC1TdMO8Y2siOiAiVGVlIiwKICAiVC1TdMO8Y2sgcmVkdXppZXJ0IjogIlJlZHVjaW5nIHRlZSIsCiAgIlRpcHA6IExhZGUgZGllIFBsYW5za2l6emUgYWxzIFBERiBoZXJ1bnRlciB1bmQgaMOkbmcgc2llIGRlaW5lciBBbmZyYWdlLU1haWwgYW4g4oCUIEZpcm1hIFdlaXNzIGJla29tbXQgZGFtaXQgZGlyZWt0IGRpZSBmZXJ0aWdlIFNraXp6ZSBtaXQgYWxsZW4gTWHDn2VuLiI6ICJUaXA6IGRvd25sb2FkIHRoZSBza2V0Y2ggYXMgYSBQREYgYW5kIGF0dGFjaCBpdCB0byB5b3VyIGlucXVpcnkgZS1tYWlsIC0gV2Vpc3MgdGhlbiByZWNlaXZlcyB0aGUgZmluaXNoZWQgc2tldGNoIHdpdGggYWxsIGRpbWVuc2lvbnMuIiwKICAiVmVyYmluZHVuZ3NhcnQgd8OkaGxlbiI6ICJTZWxlY3QgdHlwZSBvZiBjb25uZWN0aW9uIiwKICAiVm9sbGJpbGQgw7ZmZm5lbiI6ICJPcGVuIGZ1bGwgc2NyZWVuIiwKICAiV2FuZGLDvG5kaWdlciBCZWjDpGx0ZXJhbnNjaGx1c3MiOiAiRmx1c2ggdmVzc2VsIGNvbm5lY3Rpb24iLAogICJXZWl0ZXIiOiAiTmV4dCIsCiAgIldlaXRlcmUgUG9zaXRpb24gaGluenVmw7xnZW4iOiAiQWRkIGFub3RoZXIgaXRlbSIsCiAgIldlcmtzdG9mZiI6ICJNYXRlcmlhbCIsCiAgIldlcmtzdG9mZiAmIE9iZXJmbMOkY2hlIjogIk1hdGVyaWFsICYgc3VyZmFjZSBmaW5pc2giLAogICJXZXJrc3RvZmY6IjogIk1hdGVyaWFsOiIsCiAgIldvZsO8ciB3aXJkIGRhcyBGaXR0aW5nIGVpbmdlc2V0enQ\\\/IjogIldoYXQgd2lsbCB0aGUgZml0dGluZyBiZSB1c2VkIGZvcj8iLAogICJXw6RobGUgbGlua3MgZGllIEFud2VuZHVuZyDigJQgZGFubiBiYXV0IHNpY2ggaGllciBkZWluIEZpdHRpbmcgbGl2ZSBtaXQgWmVpY2hudW5nIHVuZCBiZWxlZ3RlbiBNYcOfZW4gYXVmLiI6ICJTZWxlY3QgdGhlIGFwcGxpY2F0aW9uIG9uIHRoZSBsZWZ0IC0geW91ciBmaXR0aW5nIHRoZW4gYnVpbGRzIHVwIGhlcmUgbGl2ZSB3aXRoIGEgZHJhd2luZyBhbmQgZG9jdW1lbnRlZCBkaW1lbnNpb25zLiIsCiAgIlgyQ3JOaU1vMTgtMTQtMyDCtyAzMTZMIMK3IEjDtmhlcmVyIE1vL05pLUFudGVpbCwgZsO8ciBFbGVrdHJvcG9saXR1ciB1bmQgUmVpbnN0bWVkaWVuLiI6ICJYMkNyTmlNbzE4LTE0LTMgwrcgMzE2TCDCtyBoaWdoZXIgTW8vTmkgY29udGVudCwgZm9yIGVsZWN0cm9wb2xpc2hpbmcgYW5kIHVsdHJhcHVyZSBtZWRpYS4iLAogICJYMkNyTmlNbzE3LTEyLTIgwrcgMzE2TCDCtyBTdGFuZGFyZCBpbSBIeWdpZW5pYyBEZXNpZ24sIHNlaHIgZ3V0IHNjaHdlaXNzYmFyLiI6ICJYMkNyTmlNbzE3LTEyLTIgwrcgMzE2TCDCtyBzdGFuZGFyZCBpbiBoeWdpZW5pYyBkZXNpZ24sIHZlcnkgZ29vZCB3ZWxkYWJpbGl0eS4iLAogICJaZWljaG51bmciOiAiRHJhd2luZyIsCiAgIlplcnRpZmlrYXRlIHp1YnVjaGVuIHVuZCBTdMO8Y2t6YWhsIHfDpGhsZW4uIEJlaWRlcyBnZWh0IG1pdCBpbiBkaWUgQW5mcmFnZS4iOiAiQWRkIGNlcnRpZmljYXRlcyBhbmQgY2hvb3NlIHRoZSBxdWFudGl0eS4gQm90aCBnbyBpbnRvIHRoZSBpbnF1aXJ5LiIsCiAgIlp1csO8Y2siOiAiQmFjayIsCiAgIlp1csO8Y2tzZXR6ZW4iOiAiUmVzZXQiLAogICJXaXJrbGljaCB6dXLDvGNrc2V0emVuPyI6ICJSZWFsbHkgcmVzZXQ\\\/IiwKICAibmFoZXp1IHVuaXZlcnNlbGwgY2hlbWlzY2ggYmVzdMOkbmRpZyDCtyBGREEgwrcgVVNQIENsYXNzIFZJIjogImFsbW9zdCB1bml2ZXJzYWxseSBjaGVtaWNhbGx5IHJlc2lzdGFudCDCtyBGREEgwrcgVVNQIENsYXNzIFZJIiwKICAiwrcgRElOIDExODY1IGF1ZiBBbmZyYWdlIjogIsK3IERJTiAxMTg2NSBvbiByZXF1ZXN0IiwKICAiQW5zcHJlY2hwYXJ0bmVyIjogIkNvbnRhY3QgcGVyc29uIiwKICAiQXNlcHRpaywgQ0lQL1NJUCI6ICJBc2VwdGljLCBDSVAvU0lQIiwKICAiQmVpc3BpZWwtRGFyc3RlbGx1bmcuIjogIkV4YW1wbGUgaWxsdXN0cmF0aW9uLiIsCiAgIkJsaW5kZGVja2VsIjogIkJsYW5rIGNhcCIsCiAgIkJvZ2VuIDQ1wrAiOiAiNDXCsCBiZW5kIiwKICAiQm9nZW4gOTDCsCI6ICI5MMKwIGJlbmQiLAogICJDaGVtaWUiOiAiQ2hlbWljYWxzIiwKICAiQ29ubmVjdC1GbGFuc2NoIjogIkNvbm5lY3QgZmxhbmdlIiwKICAiQ29ubmVjdC1GbGFuc2NoIElubGluZSI6ICJDb25uZWN0IGZsYW5nZSBpbmxpbmUiLAogICJEYXJzdGVsbHVuZyI6ICJJbGx1c3RyYXRpb24iLAogICJEZWx0YS1GZXJyaXQtR2VoYWx0IjogIkRlbHRhIGZlcnJpdGUgY29udGVudCIsCiAgIkRpY2h0dW5nIjogIkdhc2tldCIsCiAgIkUtTWFpbCI6ICJFLW1haWwiLAogICJFTiAxMDIwNCwgY2hhcmdlbmJlem9nZW4iOiAiRU4gMTAyMDQsIGJhdGNoLXJlbGF0ZWQiLAogICJFaW56ZWxuZSBEaWNodHVuZyI6ICJTaW5nbGUgZ2Fza2V0IiwKICAiRWluemVsbmVyIFRyaUNsYW1wLVN0dXR6ZW4iOiAiU2luZ2xlIFRyaS1DbGFtcCBmZXJydWxlIiwKICAiRXMgaXN0IG5vY2ggbmljaHRzIGtvbmZpZ3VyaWVydC4iOiAiTm90aGluZyBoYXMgYmVlbiBjb25maWd1cmVkIHlldC4iLAogICJGZXJyaXQtTWVzc3VuZyI6ICJGZXJyaXRlIG1lYXN1cmVtZW50IiwKICAiRml0dGluZ3MtS29uZmlndXJhdG9yIjogIkZpdHRpbmdzIGNvbmZpZ3VyYXRvciIsCiAgIkZsYW5zY2gt4oyAIjogIkZsYW5nZSDijIAiLAogICJGb3J0c2Nocml0dCI6ICJQcm9ncmVzcyIsCiAgIkZyb250YW5zaWNodCAoS2xhbW1lciBLTDEpIjogIkZyb250IHZpZXcgKGNsYW1wIEtMMSkiLAogICJLbGFtbWVyIC8gU3Bhbm5yaW5nIjogIkNsYW1wIC8gY2xhbXBpbmcgcmluZyIsCiAgIktsYW1tZXJ0eXAiOiAiQ2xhbXAgdHlwZSIsCiAgIktvbXBsZXR0ZSBUcmlDbGFtcCBWZXJiaW5kdW5nIjogIkNvbXBsZXRlIFRyaS1DbGFtcCBjb25uZWN0aW9uIiwKICAiS29uZmlndXJhdGlvbiB0ZWlsZW4iOiAiU2hhcmUgY29uZmlndXJhdGlvbiIsCiAgIktvbmZpZ3VyYXRpb25zLSAvIEFydGlrZWwtTnIuIjogIkNvbmZpZ3VyYXRpb24gLyBhcnRpY2xlIG5vLiIsCiAgIktvbmZpZ3VyYXRpb25zLU5yLiI6ICJDb25maWd1cmF0aW9uIG5vLiIsCiAgIkxlYmVuc21pdHRlbCI6ICJGb29kIiwKICAiTXV0dGVyIjogIk51dCIsCiAgIk5hY2h3ZWlzZSAvIFplcnRpZmlrYXRlIjogIkNlcnRpZmljYXRlcyIsCiAgIk5lbm53ZWl0ZSI6ICJOb21pbmFsIHNpemUiLAogICJQbGFuc2tpenplIGFscyBQREYiOiAiU2tldGNoIGFzIFBERiIsCiAgIlBvc2l0aW9uc2xpbmtzIGtvcGllcmVuIjogIkNvcHkgaXRlbSBsaW5rcyIsCiAgIlByb2R1a3RkYXJzdGVsbHVuZyI6ICJQcm9kdWN0IGlsbHVzdHJhdGlvbiIsCiAgIlJhLU1lc3Nwcm90b2tvbGwiOiAiUmEgdGVzdCByZXBvcnQiLAogICJSZWR1emllcnVuZyI6ICJSZWR1Y2VyIiwKICAiUmVpaGUiOiAiU2VyaWVzIiwKICAiU2Nocml0dCAxIjogIlN0ZXAgMSIsCiAgIlNjaHJpdHQgMiI6ICJTdGVwIDIiLAogICJTY2hyaXR0IDMiOiAiU3RlcCAzIiwKICAiU2Nocml0dCA0IjogIlN0ZXAgNCIsCiAgIlNjaHJpdHQgNSI6ICJTdGVwIDUiLAogICJTY2hyaXR0IDYiOiAiU3RlcCA2IiwKICAiU2Nocml0dCA3IjogIlN0ZXAgNyIsCiAgIlNjaHJpdHQgOCI6ICJTdGVwIDgiLAogICJTaWxpa29uIChWTVEpIjogIlNpbGljb25lIChWTVEpIiwKICAiU29uZGVyYWJtZXNzdW5nIGFuZnJhZ2VuIjogIklucXVpcmUgYWJvdXQgYSBzcGVjaWFsIGRpbWVuc2lvbiIsCiAgIlNvbmRlcmFuZm9yZGVydW5nZW4gKG9wdGlvbmFsKSI6ICJTcGVjaWFsIHJlcXVpcmVtZW50cyAob3B0aW9uYWwpIiwKICAiU3RlcmlsIjogIlN0ZXJpbGUiLAogICJTdGVyaWx0ZWNobmlrIjogIlN0ZXJpbGUgdGVjaG5vbG9neSIsCiAgIlRDLVN0dXR6ZW4iOiAiVEMgZmVycnVsZSIsCiAgIlRhbmtzdHV0emVuIGRpY2t3YW5kaWciOiAiSGVhdnktd2FsbCB0YW5rIGZlcnJ1bGUiLAogICJUZWxlZm9uIjogIlBob25lIiwKICAiVmVyc2NobGllc3N0IGVpbmVuIENsYW1wYW5zY2hsdXNzIjogIkNsb3NlcyBvZmYgYSBjbGFtcCBjb25uZWN0aW9uIiwKICAiVm9sbGJpbGQgKyBab29tIjogIkZ1bGwgc2NyZWVuICsgem9vbSIsCiAgIlZvcnNjaGF1IjogIlByZXZpZXciLAogICJXRkksIERhbXBmLVNJUCwgaG9jaHJlaW4iOiAiV0ZJLCBzdGVhbSBTSVAsIHVsdHJhcHVyZSIsCiAgIldhc3NlciwgV0ZJLCBEYW1wZiwgQ0lQL1NJUCDCtyBGREEgwrcgVVNQIENsYXNzIFZJIjogIldhdGVyLCBXRkksIHN0ZWFtLCBDSVAvU0lQIMK3IEZEQSDCtyBVU1AgQ2xhc3MgVkkiLAogICJXdW5zY2h0ZXJtaW4gLyBQcm9qZWt0IChvcHRpb25hbCkiOiAiUHJlZmVycmVkIGRhdGUgLyBwcm9qZWN0IChvcHRpb25hbCkiLAogICJab2xsIjogIkluY2giLAogICJhYiAxIjogImZyb20gMSIsCiAgImFiIDI1IjogImZyb20gMjUiLAogICJhYiA1MCI6ICJmcm9tIDUwIiwKICAiYWIgMTAwIjogImZyb20gMTAwIiwKICAiYWIgMjUwIjogImZyb20gMjUwIiwKICAiZW50ZmVybmVuIjogInJlbW92ZSIsCiAgImdsZWljaCDCtyBtZXRyaXNjaC9JU08vWm9sbCDCtyBGb3JtIFQgLyBGb3JtIFRLIjogImVxdWFsIMK3IG1ldHJpYy9JU08vaW5jaCDCtyBmb3JtIFQgLyBmb3JtIFRLIiwKICAia2xlaW5lcmVyIEFiZ2FuZyDCtyBGb3JtIFQgLyBGb3JtIFRLIjogInNtYWxsZXIgYnJhbmNoIMK3IGZvcm0gVCAvIGZvcm0gVEsiLAogICJrb256ZW50cmlzY2ggKEZvcm0gUkspIC8gZXh6ZW50cmlzY2ggKEZvcm0gUkUpIjogImNvbmNlbnRyaWMgKGZvcm0gUkspIC8gZWNjZW50cmljIChmb3JtIFJFKSIsCiAgImtvcGllcmVuIjogImNvcHkiLAogICJrdXJ6IChLSykiOiAic2hvcnQgKEtLKSIsCiAgImxhbmcgKEtMKSI6ICJsb25nIChLTCkiLAogICJtZWhyIjogIm1vcmUiLAogICJ3ZW5pZ2VyIjogImxlc3MiLAogICJtZXRyaXNjaCI6ICJtZXRyaWMiLAogICJtZXRyaXNjaCBETiI6ICJtZXRyaWMgRE4iLAogICJvaG5lIExpcHBlIChUeXAgSSkiOiAid2l0aG91dCBsaXAgKHR5cGUgSSkiLAogICJtaXQgTGlwcGUiOiAid2l0aCBsaXAiLAogICJ6LiBCLiBiZXNvbmRlcmUgVG9sZXJhbnplbiwgd2VpdGVyZSBaZXJ0aWZpa2F0ZSwgTGllZmVyYmVkaW5ndW5nZW4iOiAiZS5nLiBzcGVjaWFsIHRvbGVyYW5jZXMsIGZ1cnRoZXIgY2VydGlmaWNhdGVzLCBkZWxpdmVyeSB0ZXJtcyIsCiAgIlByw7xmZSBkaWUgYmVsZWd0ZW4gQW5nYWJlbiB1bmQgZXJnw6RuemUgZGVpbmVuIEtvbnRha3QuIjogIkNoZWNrIHRoZSBkZXRhaWxzIHByb3ZpZGVkIGFuZCBhZGQgeW91ciBjb250YWN0IGRhdGEuIiwKICAibWl0IFByZWlzZW4iOiAid2l0aCBwcmljZXMiLAogICJTdMO8Y2siOiAicGNzIgogfSwKICJiZWdyaWZmZSI6IHsKICAiQm9nZW4gNDXCsCI6ICI0NcKwIGJlbmQiLAogICJCb2dlbiA5MMKwIjogIjkwwrAgYmVuZCIsCiAgIlQtU3TDvGNrIGdsZWljaCI6ICJFcXVhbCB0ZWUiLAogICJULVN0w7xjayByZWR1emllcnQiOiAiUmVkdWNpbmcgdGVlIiwKICAiVC1TdMO8Y2siOiAiVGVlIiwKICAiQ2xhbXAtVmVyYmluZHVuZyI6ICJDbGFtcCBjb25uZWN0aW9uIiwKICAiS29tcGxldHRlIFRyaUNsYW1wIFZlcmJpbmR1bmciOiAiQ29tcGxldGUgVHJpLUNsYW1wIGNvbm5lY3Rpb24iLAogICJFaW56ZWxuZXIgVHJpQ2xhbXAtU3R1dHplbiI6ICJTaW5nbGUgVHJpLUNsYW1wIGZlcnJ1bGUiLAogICJFaW56ZWxuZSBEaWNodHVuZyI6ICJTaW5nbGUgZ2Fza2V0IiwKICAiQmxpbmRkZWNrZWwiOiAiQmxhbmsgY2FwIiwKICAiUmVkdXppZXJ1bmciOiAiUmVkdWNlciIsCiAgIlN0w7xjayI6ICJwY3MiLAogICJGb3JtIFQiOiAiZm9ybSBUIiwKICAiRm9ybSBUSyI6ICJmb3JtIFRLIiwKICAiRW5ka3VuZGVucHJlaXNlIjogIkVuZCBjdXN0b21lciBwcmljZXMiLAogICJPRU0tUHJlaXNlIjogIk9FTSBwcmljZXMiLAogICJtaXQgUHJlaXNlbiI6ICJ3aXRoIHByaWNlcyIsCiAgImF1ZiBBbmZyYWdlIjogIm9uIHJlcXVlc3QiCiB9Cn07PC9zY3JpcHQ+PHNjcmlwdD4vKiBFbmdsaXNjaGUgT2JlcmZsYWVjaGUgZGVzIEtvbmZpZ3VyYXRvcnMuCiAqCiAqIERlciBLb25maWd1cmF0b3IgYmF1dCBzZWluZSBPYmVyZmxhZWNoZSBhdXMgVm9ybGFnZW4gaW4gYXBwLmpzIHp1c2FtbWVuLiBTdGF0dAogKiBodW5kZXJ0ZSBaZWljaGVua2V0dGVuIGltIFF1ZWxsdGV4dCB1bXp1YmF1ZW4sIHdpcmQgZGllIGZlcnRpZ2UgT2JlcmZsYWVjaGUgaGllcgogKiB1ZWJlcnNldHp0OiBleGFrdGUgVGV4dGtub3RlbiBhdXMgZGVtIFdvZXJ0ZXJidWNoLCBkYW5hY2ggZWluZSBrdXJ6ZSwgZ2VwcnVlZnRlCiAqIEJlZ3JpZmZzbGlzdGUgZnVlciB6dXNhbW1lbmdlc2V0enRlIEJlemVpY2hudW5nZW4gd2llICJCb2dlbiA5MMKwIMK3IDEgU3R1ZWNrIi4KICoKICogU2NodXR6cmVnZWxuLCBkYW1pdCBrZWluZSBUZWNobmlrIGdldHJvZmZlbiB3aXJkOgogKiAgLSBBcnRpa2VsLSB1bmQgS29uZmlndXJhdGlvbnNudW1tZXJuIChNdXN0ZXIgd2llIEI0NS1ETjA2LUEtMS40NDA0LUgzKSBibGVpYmVuIHVuYmVydWVocnQuCiAqICAtIEtub3RlbiBpbiA8c2NyaXB0PiB1bmQgPHN0eWxlPiB3ZXJkZW4gbmllIGFuZ2VmYXNzdC4KICogIC0gV2FlaHJlbmQgZGVyIGVpZ2VuZW4gQWVuZGVydW5nZW4gaXN0IGRlciBCZW9iYWNodGVyIHN0aWxsZ2VsZWd0LCBzb25zdCBsb2VzdCBkaWUKICogICAgVWViZXJzZXR6dW5nIHNpY2ggc2VsYnN0IHdpZWRlciBhdXMuCiAqIEVpbmdlYmF1dCBhbSAxNy4wOS4yMDI2IGZ1ZXIgZGllIGVuZ2xpc2NoZW4gTGFuZGluZ3BhZ2VzLgogKi8KKGZ1bmN0aW9uICgpIHsKICB2YXIgd2IgPSB3aW5kb3cuV0VJU1NfSTE4TjsKICBpZiAoIXdiIHx8ICF3Yi5leGFrdCkgeyByZXR1cm47IH0KICB2YXIgZXhha3QgPSB3Yi5leGFrdDsKICB2YXIgYmVncmlmZmUgPSBPYmplY3Qua2V5cyh3Yi5iZWdyaWZmZSB8fCB7fSkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDsgfSk7CiAgdmFyIGNvZGVNdXN0ZXIgPSAvXltBLVpdezEsNH1cZCpbLV1bQS1aMC05LlwtXSskLzsKICB2YXIgbGFldWZ0ID0gZmFsc2U7CiAgdmFyIGVybmV1dCA9IGZhbHNlOwoKICBmdW5jdGlvbiB1ZWJlcnNldHplVGV4dChyb2gpIHsKICAgIHZhciB0ID0gcm9oLnRyaW0oKTsKICAgIGlmICghdCkgeyByZXR1cm4gbnVsbDsgfQogICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleGFrdCwgdCkpIHsKICAgICAgcmV0dXJuIHJvaC5yZXBsYWNlKHQsIGV4YWt0W3RdKTsKICAgIH0KICAgIGlmIChjb2RlTXVzdGVyLnRlc3QodCkpIHsgcmV0dXJuIG51bGw7IH0KICAgIHZhciBuZXUgPSByb2gsIGdldHJvZmZlbiA9IGZhbHNlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiZWdyaWZmZS5sZW5ndGg7IGkrKykgewogICAgICB2YXIgZGUgPSBiZWdyaWZmZVtpXTsKICAgICAgaWYgKG5ldS5pbmRleE9mKGRlKSAhPT0gLTEpIHsgbmV1ID0gbmV1LnNwbGl0KGRlKS5qb2luKHdiLmJlZ3JpZmZlW2RlXSk7IGdldHJvZmZlbiA9IHRydWU7IH0KICAgIH0KICAgIHJldHVybiBnZXRyb2ZmZW4gPyBuZXUgOiBudWxsOwogIH0KCiAgZnVuY3Rpb24gZHVyY2hsYXVmKHd1cnplbCkgewogICAgdmFyIGxhdWYgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKHd1cnplbCwgTm9kZUZpbHRlci5TSE9XX1RFWFQsIHsKICAgICAgYWNjZXB0Tm9kZTogZnVuY3Rpb24gKGspIHsKICAgICAgICB2YXIgZSA9IGsucGFyZW50RWxlbWVudDsKICAgICAgICBpZiAoIWUpIHsgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1JFSkVDVDsgfQogICAgICAgIHZhciB0YWcgPSAoZS50YWdOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmICh0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3N0eWxlJykgeyByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfUkVKRUNUOyB9CiAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDsKICAgICAgfQogICAgfSk7CiAgICB2YXIga25vdGVuID0gW10sIGs7CiAgICB3aGlsZSAoKGsgPSBsYXVmLm5leHROb2RlKCkpKSB7IGtub3Rlbi5wdXNoKGspOyB9CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtub3Rlbi5sZW5ndGg7IGkrKykgewogICAgICB2YXIgbmV1ID0gdWViZXJzZXR6ZVRleHQoa25vdGVuW2ldLnRleHRDb250ZW50IHx8ICcnKTsKICAgICAgaWYgKG5ldSAhPT0gbnVsbCAmJiBuZXUgIT09IGtub3RlbltpXS50ZXh0Q29udGVudCkgeyBrbm90ZW5baV0udGV4dENvbnRlbnQgPSBuZXU7IH0KICAgIH0KICAgIHZhciBhdHRyaWJ1dGUgPSBbJ3RpdGxlJywgJ2FyaWEtbGFiZWwnLCAncGxhY2Vob2xkZXInXTsKICAgIHZhciBlbGVtZW50ZSA9IHd1cnplbC5xdWVyeVNlbGVjdG9yQWxsID8gd3VyemVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ1t0aXRsZV0sW2FyaWEtbGFiZWxdLFtwbGFjZWhvbGRlcl0nKSA6IFtdOwogICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbGVtZW50ZS5sZW5ndGg7IGorKykgewogICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYnV0ZS5sZW5ndGg7IGErKykgewogICAgICAgIHZhciB3ZXJ0ID0gZWxlbWVudGVbal0uZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZVthXSk7CiAgICAgICAgaWYgKCF3ZXJ0KSB7IGNvbnRpbnVlOyB9CiAgICAgICAgdmFyIG5ldUEgPSB1ZWJlcnNldHplVGV4dCh3ZXJ0KTsKICAgICAgICBpZiAobmV1QSAhPT0gbnVsbCAmJiBuZXVBICE9PSB3ZXJ0KSB7IGVsZW1lbnRlW2pdLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVbYV0sIG5ldUEpOyB9CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIGFuc3Rvc3NlbigpIHsKICAgIC8vIFdhZWhyZW5kIGVpbmVzIER1cmNobGF1ZnMgZWludHJlZmZlbmRlIEFlbmRlcnVuZ2VuIGR1ZXJmZW4gbmljaHQgdmVybG9yZW4gZ2VoZW4uCiAgICAvLyBFcnN0ZSBGYXNzdW5nIGhhdCBzaWUgdmVyd29yZmVuLCBkYWR1cmNoIGJsaWViZW4gc3BhZXRlciBnZXJlbmRlcnRlIFNjaHJpdHRlIGRldXRzY2guCiAgICBpZiAobGFldWZ0KSB7IGVybmV1dCA9IHRydWU7IHJldHVybjsgfQogICAgbGFldWZ0ID0gdHJ1ZTsKICAgIHRyeSB7IGR1cmNobGF1Zihkb2N1bWVudC5ib2R5KTsgfSBmaW5hbGx5IHsKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsKICAgICAgICBsYWV1ZnQgPSBmYWxzZTsKICAgICAgICBpZiAoZXJuZXV0KSB7IGVybmV1dCA9IGZhbHNlOyBhbnN0b3NzZW4oKTsgfQogICAgICB9KTsKICAgIH0KICB9CgogIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCAnZW4nKTsKICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgYW5zdG9zc2VuKTsKICB9IGVsc2UgewogICAgYW5zdG9zc2VuKCk7CiAgfQogIHZhciBiZW9iYWNodGVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkgewogICAgaWYgKGxhZXVmdCkgeyBlcm5ldXQgPSB0cnVlOyByZXR1cm47IH0KICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbnN0b3NzZW4pOwogIH0pOwogIGJlb2JhY2h0ZXIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOwp9KSgpOwo8L3NjcmlwdD4KICA8c2NyaXB0PgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBXZWlzcyBBcHBhcmF0ZWJhdSAtIEZpdHRpbmdzLUtvbmZpZ3VyYXRvcgogKiBkcmF3LmpzICAtICBQYXJhbWV0cmlzY2hlIERJTi1uYWhlIDJELVRlY2huaWt6ZWljaG51bmcgKFZhbmlsbGEgSlMpCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFJlaW5lIEZ1bmt0aW9uZW46ICBwYXJhbXMgLT4gU1ZHLVN0cmluZy4gIEtlaW4gRnJhbWV3b3JrLCBrZWluIEJ1aWxkLVN0ZXAuCiAqIEdlb21ldHJpZSArIE1hc3N6YWhsZW4gd2FjaHNlbiBsaXZlL3BhcmFtZXRyaXNjaCBtaXQgZG4vb2Qvd2FsbC9sZW5ndGggdXN3LgogKiBCYXNpczogcmVjaGVyY2hlLzAzLXN2Zy1zdGFydGVyLmpzIChOb2RlLXZlcmlmaXppZXJ0KSwgZXJ3ZWl0ZXJ0IHVtIGVjaHRlCiAqIEZsYW5zY2gtTWFzc2UgKHBhcmFtcy5mbGFuZ2VPZCkgdW5kIGVpbmUgS2xhbW1lci1Gcm9udGFuc2ljaHQuCiAqCiAqICAgcmVuZGVyRml0dGluZyhwYXJhbXMsIG9wdHMpIC0+IHN0cmluZyAgIChrb21wbGV0dGVyIDxzdmc+Li4uPC9zdmc+KQogKgogKiBUaGVtZTogIEZhcmJlbiB1ZWJlciBDU1MtVmFyaWFibGVuICgtLXd6LSopLCBGYWxsYmFja3MgZWluZ2ViYXV0LgogKiBUYWJsZXQ6IEtlaW4gYmFja2Ryb3AtZmlsdGVyLCBrZWluZSBTY3JvbGwtUmV2ZWFsIC0gcmVpbmVzIHN0YXRpc2NoZXMgU1ZHLgogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwondXNlIHN0cmljdCc7CgooZnVuY3Rpb24gKHJvb3QpIHsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGYXJiZW4gKi8KLyogRGllc2UgVGFiZWxsZSBpc3QgbnVyIGRlciBSdWVja2ZhbGwuIEltIEtvbmZpZ3VyYXRvciBnZXdpbm50IGltbWVyIG8uZ2Fza2V0Q29sb3IKICogKHNpZWhlIHVudGVuIGluIHByZXAoKSksIHVuZCBhcHAuanMgcmVpY2h0IGRvcnQgZGllIEZhcmJlIGF1cyBkYXRhLmpzIGR1cmNoLiBWUAogKiBmZWhsdGUgaGllciB0cm90emRlbSB1bmQgd2FyIGRhbWl0IGRlciBlaW56aWdlIFdlcmtzdG9mZiBvaG5lIFJ1ZWNrZmFsbHdlcnQgLQogKiBqZWRlciBBdWZydWYgb2huZSBnYXNrZXRDb2xvciBoYWV0dGUgaWhuIEVQRE0tc2Nod2FyeiBnZXplaWNobmV0LiBFcmdhZW56dCBhbQogKiAyMS4wOC4yMDI2IG1pdCBkZW1zZWxiZW4gV2VydCwgZGVuIGRhdGEuanMgZnVlaHJ0LCBkYW1pdCBlcyBmdWVyIFZQIG5pY2h0IHp3ZWkKICogdmVyc2NoaWVkZW5lIEZhcmJlbiBpbSBQcm9qZWt0IGdpYnQuICovCmNvbnN0IEdBU0tFVF9DT0xPUlMgPSB7IEVQRE06JyMyYjJiMmInLCBWTVE6JyNlN2UyZDgnLCBGS006JyMyZjdkM2EnLCBQVEZFOicjZjRmNGY0JywgVlA6JyNlZmU5ZGYnIH07Ci8qIFZQIGZlaGx0ZSBoaWVyOiBkaWUgWmVpY2hudW5nIGhhdCBkaWUgaW50ZXJuZSBpZCBhdXNnZWdlYmVuIHVuZCBkZW0gS3VuZGVuCiAqICJWUCIgc3RhdHQgIlBURkUvRktNIiBnZXplaWd0IChCZWZ1bmQgMTEuMDguMjAyNikuIERpZSBTY2hyZWlid2Vpc2UgZm9sZ3QKICogZGF0YS5qcyAoYXJ0aWtlbENvZGUgJ1BURkUvRktNJywgQmVybmQgMjcuMDcuMjAyNjogUFRGRSBhdXNzZW4sIEZLTSBpbSBLZXJuKS4gKi8KY29uc3QgR0FTS0VUX0xBQkVMICA9IHsgRVBETTonRVBETScsIFZNUTonU2lsaWtvbiAoVk1RKScsIEZLTTonVml0b24gKEZLTSknLCBQVEZFOidQVEZFJywgVlA6J1BURkUvRktNJyB9OwoKLyogQ2xhbXAtRmxhbnNjaGR1cmNobWVzc2VyIChCdW5kKSBqZSBSb2hyLU9EIC0gTmFlaGVydW5nLCBudXIgd2VubiBwYXJhbXMKICogS0VJTiBmbGFuZ2VPZCBsaWVmZXJ0LiBFY2h0ZSBXZXJ0ZSBrb21tZW4gYXVzIGRhdGEuanMgKERJTiAzMjY3NikuICovCmNvbnN0IENMQU1QX0ZMQU5HRV9PRCA9IHsKICA2LjM1OjI1LCA4OjI1LCA5LjUzOjI1LCAxMDoyNSwgMTIuNzoyNSwgMTM6MzQsIDE5OjM0LCAxOS4wNToyNSwgMjM6MzQsCiAgMjU6NTAuNSwgMjUuNDo1MC41LCAyNi45OjUwLjUsIDI5OjUwLjUsIDMzLjc6NTAuNSwgMzU6NTAuNSwgMzg6NTAuNSwgNDE6NTAuNSwKICA0Mi40OjY0LCA0OC4zOjY0LCA1MC44OjY0LCA1Mzo2NCwgNjAuMzo3Ny41LCA2My41Ojc3LjUsIDcwOjkxLCA3Ni4xOjkxLAogIDc2LjI6OTEsIDg1OjEwNiwgODguOToxMDYsIDEwMS42OjExOSwgMTA0OjExOQp9OwpmdW5jdGlvbiBmbGFuZ2VPZEZvcihvZCkgewogIGlmIChDTEFNUF9GTEFOR0VfT0Rbb2RdKSByZXR1cm4gQ0xBTVBfRkxBTkdFX09EW29kXTsKICBsZXQgYmVzdCA9IG51bGwsIGJkID0gSW5maW5pdHk7CiAgZm9yIChjb25zdCBrIGluIENMQU1QX0ZMQU5HRV9PRCkgeyBjb25zdCBkID0gTWF0aC5hYnMoK2sgLSBvZCk7IGlmIChkIDwgYmQpIHsgYmQgPSBkOyBiZXN0ID0gQ0xBTVBfRkxBTkdFX09EW2tdOyB9IH0KICBpZiAoYmVzdCAmJiBiZCA8PSA0KSByZXR1cm4gYmVzdDsKICByZXR1cm4gTWF0aC5tYXgob2QgKyAyMiwgb2QgKiAxLjI1ICsgNik7Cn0KCi8qIC0tLS0gR2V6ZWljaG5ldGUgSG9laGUgZGVzIENsYW1wYnVuZHMgKFRDLVRlaWwpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEJlcm5kIDI4LjA3LjIwMjY6ICJFaW5mYWNoIGRlbiBUZWlsIGRlcyBUQydzIGt1ZXJ6ZXIgemVpY2huZW4gdm9uIEFuZmFuZyBhbi4KICogRGFzIHd1ZXJkZSBpY2ggYWJlciBiZWkgYmVpZGVuIFZhcmlhbnRlbiBLSyB1bmQgS0wgZ2xlaWNoIG1hY2hlbi4iIHVuZCAiQmVpIGRlbgogKiBkaWNrd2FuZGlnZW4gVGFua3N0dXR6ZW4gd3VlcmRlIGljaCBhdWNoIGRpZSBnbGVpY2hlIEhvZWhlIGRlcyBUQydzIHdpZSBiZWkgZGVuCiAqIG5vcm1hbGVuIFN0dXR6ZW4gbWFjaGVuLiBEYSBwYXNzdCBlcyB6d2FyIGFiZXIgc2llaHQgZ2xlaWNobWFlc3NpZ2VyIGF1cy4iCiAqCiAqIEJpc2hlciBoaW5nIGRpZSBCdW5kaG9laGUgYW4gUm9oci3ijIAgVU5EIFN0dXR6ZW5sYWVuZ2UgKG9kKjAsMTQgKyBvZCowLDA4LCBuYWNoCiAqIG9iZW4gZ2VkZWNrZWx0IGJlaSA4ICsgNCw1IHVuZCB6dXNhZXR6bGljaCBhbiBMKjAsMjAgKyBMKjAsMTApLiBHZW5hdSBkZXIKICogTC1BbnRlaWwgbWFjaHRlIEtLIHVuZCBLTCB1bmdsZWljaDogRE4xMDAgS0sgOCw0MCBtbSBnZWdlbiBLTCAxMiw1MCBtbS4gRGVyCiAqIGRpY2t3YW5kaWdlIFRhbmtzdHV0emVuIChMID0gNjAgbW0sIGFiZXIgZ3JvZXNzZXJlciBBdXNzZW4t4oyAKSBsYW5kZXRlIGFiIERONjUKICogYXVmIGRlbSBLTC1XZXJ0IHVuZCB3aWNoIGJlaSBETjE1IGJpcyBETjUwIHZvbiBiZWlkZW4gYWIuCiAqCiAqIE5ldWUgUmVnZWwgLSBFSU4gV2VydCBqZSBHcm9lc3NlOgogKiAgIC0gVHJlaWJlciBpc3QgZGVyIEZMQU5TQ0gt4oyALiBFciBpc3QgZGFzIGVpbnppZ2UgR3JvZXNzZW5tYXNzLCBkYXMgZnVlciBLSywgS0wKICogICAgIHVuZCBkaWNrd2FuZGlnIGlkZW50aXNjaCBpc3QgKGRpZSBUQ0QtU3BhbHRlIFREIGRlY2t0IHNpY2ggemVpbGVud2Vpc2UgbWl0CiAqICAgICBmbGFuZ2VPRCBkZXIgRElOMzI2NzYtUmVpaGVuLCBzaWVoZSBkYXRhLmpzKS4gRGVyIFJvaHIt4oyAIHRhdWd0IG5pY2h0OiBlciBpc3QKICogICAgIGJlaW0gZGlja3dhbmRpZ2VuIFN0dXR6ZW4gZ3JvZXNzZXIgKEROMTU6IDI0IHN0YXR0IDE5IG1tKS4KICogICAtIERpZSBTdHV0emVubGFlbmdlIGdlaHQgTklDSFQgbWVociBpbiBkaWUgSG9laGUgZWluLCBudXIgbm9jaCBhbHMgRGVja2VsdW5nLgogKiAgIC0gV2VydGViZXJlaWNoIHVudmVyYWVuZGVydCBuYWNoIHVudGVuICg0LDUwIG1tID0gZGllIGFsdGVuIE1pbmRlc3R3ZXJ0ZQogKiAgICAgMywwMCBCdW5kICsgMSw1MCBGYXNlKSwgbmFjaCBvYmVuIGF1ZiA4LDQwIG1tIGdlc2Vua3QuIDgsNDAgaXN0IGtlaW4gbmV1ZXIKICogICAgIFdlcnQsIHNvbmRlcm4gZ2VuYXUgZGllIEhvZWhlLCBkaWUgZGllIEtVUlpFIFZhcmlhbnRlIChLSykgYmlzaGVyIGFiIERONTAKICogICAgIHNjaG9uIGhhdHRlICg1LDYwICsgMiw4MCkgLSBhbHNvIGRhcyB2b24gQmVybmQgZ2V3dWVuc2NodGUgImt1ZXJ6ZXIiLgogKiAgIC0gQXVmdGVpbHVuZyB3aWUgYmlzaGVyIDI6MSBpbiBCdW5kIHVuZCBGYXNlICg1LDYwOjIsODAgdW5kIDMsMDA6MSw1MCBzaW5kCiAqICAgICBiZWlkZSBleGFrdCAyOjEpLgogKiAgIC0gcmVmRmxhbnNjaCA2NCA9IGtsZWluc3RlciBGbGFuc2NoLeKMgCwgYmVpIGRlbSBkaWUgYWx0ZSBLSy1WYXJpYW50ZSBpaHJlbgogKiAgICAgSG9lY2hzdHdlcnQgZXJyZWljaHRlIChETjUwKS4gRG9ydCB0cmlmZnQgZGllIEdlcmFkZSBkaWUgT2JlcmdyZW56ZS4KICoKICogREVDS0VMVU5HIEJMRUlCVCAodXJzcHJ1ZW5nbGljaGUgS29ycmVrdHVyIHZvbSAyNy4wNy4yMDI2LCBkYXJmIG5pY2h0IHp1cnVlY2tmYWxsZW4pOgogKiBEZXIgQnVuZCBkYXJmIG5pZSBsYWVuZ2VyIHdlcmRlbiBhbHMgZGVyIFN0dXR6ZW4uIEVyIG5pbW10IGhvZWNoc3RlbnMgZGllIGhhbGJlCiAqIFN0dXR6ZW5sYWVuZ2UgZWluLiBGdWVyIGFsbGUgYmVsZWd0ZW4gR3JvZXNzZW4vVmFyaWFudGVuIGdyZWlmdCBkaWVzZSBEZWNrZWx1bmcKICogbmljaHQgKGdyb2Vzc3RlciBCZWRhcmY6IE5XNDIsNC9OVzQ4LDMvMiIgbWl0IEtLIDIxLDUgLT4gOCw0MC8yMSw1ID0gMCwzOTEpLAogKiBkaWUgSG9laGUgYmxlaWJ0IGRvcnQgYWxzbyBqZSBHcm9lc3NlIHdpcmtsaWNoIGlkZW50aXNjaC4gU2llIGlzdCByZWluZXMKICogU2ljaGVyaGVpdHNuZXR6IGZ1ZXIgbmljaHQgYmVsZWd0ZS9zZWhyIGt1cnplIExhZW5nZW4uCiAqCiAqIERhcyBpc3QgZWluZSByZWluZSBEQVJTVEVMTFVOR1NHUk9FU1NFIC0gZGVyIEJ1bmQgdHJhZWd0IGtlaW5lIE1hc3N6YWhsLiAqLwpjb25zdCBUQ19CVU5EID0geyBtaW46IDQuNSwgbWF4OiA4LjQsIHJlZkZsYW5zY2g6IDY0LCBtYXhBbnRlaWxMOiAwLjUgfTsKZnVuY3Rpb24gdGNCdW5kSG9laGUoZmxhbmdlT2QsIEwpIHsKICBjb25zdCByb2ggPSBwb3NpdGl2ZShmbGFuZ2VPZCkgPyBmbGFuZ2VPZCAvIFRDX0JVTkQucmVmRmxhbnNjaCAqIFRDX0JVTkQubWF4IDogVENfQlVORC5taW47CiAgY29uc3QgaCA9IE1hdGgubWluKFRDX0JVTkQubWF4LCBNYXRoLm1heChUQ19CVU5ELm1pbiwgcm9oKSk7CiAgcmV0dXJuIE1hdGgubWluKGgsIEwgKiBUQ19CVU5ELm1heEFudGVpbEwpOwp9CgovKiAtLS0tIEJhdWxhZW5nZSBsNCBkZXIga29tcGxldHRlbiBDbGFtcC1WZXJiaW5kdW5nIChESU4gMzI2NzYpIC0tLS0tLS0tLS0tLQogKiBRdWVsbGU6IFdFSVNTX0RBVEEubWFzc2UuZGluMzI2NzYubDQgLyAubDRGdWVyIChTcGFsdGUgbDQgZGVyIFRhYmVsbGVuIDIvMy80LAogKiB2b24gQmVybmQgYW0gMjcuMDcuMjAyNiBnZWxpZWZlcnQpLiBsNCBpc3QgZGllIExhZW5nZSBkZXIgTU9OVElFUlRFTiBWZXJiaW5kdW5nCiAqICh6d2VpIFN0dXR6ZW4gKyBEaWNodHVuZykgLSBkZXNoYWxiIG51ciBiZWltIGtvbXBsZXR0ZW4gVmVyYmluZHVuZ3MtVHlwLCBuaWUKICogYmVpbSBlaW56ZWxuZW4gU3R1dHplbiwgYmVpbSBCbGluZGRlY2tlbCBvZGVyIGJlaW0gZGlja3dhbmRpZ2VuIFRhbmtzdHV0emVuLgogKgogKiBkcmF3LmpzIGJla29tbXQgdm9uIGFwcC5qcyB3ZWRlciBSZWloZSBub2NoIEdyb2Vzc2VuLUlELiBEaWUgWmVpbGUgd2lyZCBkZXNoYWxiCiAqIHVlYmVyIGRyZWkgYmVsZWd0ZSwgZ2VtZWluc2FtIGVpbmRldXRpZ2UgV2VydGUgenVydWVja2dlc3VjaHQgKEdyb2Vzc2VuLUxhYmVsCiAqIGF1cyBjbGFtcFNpemUsIEZsYW5zY2gt4oyALCBSb2hyLeKMgCksIGRpZSBWYXJpYW50ZSB1ZWJlciBkaWUgdWViZXJnZWJlbmUKICogU3R1dHplbmxhZW5nZSAtIGRpZSBJU1Qgcncua2sgYnp3LiBydy5rbCwgaGllciB3aXJkIG5pY2h0cyBnZXNjaGFldHp0LgogKgogKiBGQUlMLUNMT1NFRCBpbiBkcmVpIEZhZWxsZW4sIGRhbm4gYmxlaWJ0IGRlciBQbGF0emhhbHRlciBzdGVoZW46CiAqICAgMS4gRGllIGw0LVRhYmVsbGUgZmVobHQgZ2FueiAoZHJhdy5qcyBsYWV1ZnQgYXVjaCBvaG5lIGRhdGEuanMgaW0gTm9kZS1EZW1vKS4KICogICAyLiBLZWluZSBaZWlsZSBvZGVyIGtlaW5lIFZhcmlhbnRlIHRyaWZmdCAtPiBrZWluIEJlbGVnLgogKiAgIDMuIGw0IDwgMiB4IFN0dXR6ZW5sYWVuZ2UuIERhcyBpc3QgZWluIFdJREVSU1BSVUNIIGluIGRlbiBRdWVsbGRhdGVuLCBrZWluCiAqICAgICAgZmVobGVuZGVyIFdlcnQ6IGJldHJpZmZ0IGdlbmF1IFJlaWhlIEEgLyBETjUwIC8gS0sgKFplaWxlIGtrID0gMjgsMCwgYWJlcgogKiAgICAgIGw0IEtLID0gNDQsNyA9IDIgeCAyMSw1ICsgMSw3IHdpZSBiZWkgRE4yNS9ETjMyL0RONDApLiBCZWlkZSBXZXJ0ZSBzaW5kCiAqICAgICAgYmVsZWd0IHVuZCB3aWRlcnNwcmVjaGVuIHNpY2guIEVpbmUgQmF1bGFlbmdlIHp1IGJlbWFzc2VuLCBkaWUga2xlaW5lciBpc3QKICogICAgICBhbHMgZGllIGJlaWRlbiBnZXplaWNobmV0ZW4sIGViZW5mYWxscyBiZW1hc3N0ZW4gU3R1dHplbiwgd2FlcmUgZWluZQogKiAgICAgIFplaWNobnVuZywgZGllIHNpY2ggc2VsYnN0IHdpZGVyc3ByaWNodCAtPiBsaWViZXIgUGxhdHpoYWx0ZXIgKyBSdWVja2ZyYWdlLgogKgogKiBSdWVja2dhYmU6IHsgd2VydCwgcmVpaGUsIGlkLCB2YXJpYW50ZSwgc3BhbHQgfSBvZGVyIG51bGwuCiAqIHNwYWx0ID0gbDQgLSAyIHggU3R1dHplbmxhZW5nZSAtPiBleGFrdCBkZXIgRGljaHR1bmdzc3BhbHQsIG1pdCBkZW0gZGllCiAqIGdlemVpY2huZXRlIEdlc2FtdGxhZW5nZSBkYXMgYmVtYXNzdGUgbDQgd2lya2xpY2ggdHJpZmZ0LiAqLwovKiBXZXJ0IGF1cyBkZXIgbDQtVGFiZWxsZSBob2xlbi4KICoKICogV0lDSFRJRywgaGllciBsYWcgYW0gMjguMDcuMjAyNiBlaW4gRGVmZWt0OiBGcnVlaGVyIGhpbmcgZGFzIGFsbGVpbiBhbgogKiBtZC5sNEZ1ZXIoKS4gSW0gU3RhbmRhbG9uZS1CdWlsZCBmdW5rdGlvbmllcnQgZGFzLCB1ZWJlciBXb3JkUHJlc3MgTklDSFQgLQogKiBkYXMgUGx1Z2luIGluaml6aWVydCBkaWUgS29uZmlndXJhdGlvbiBtaXQgd3BfanNvbl9lbmNvZGUgYWxzIHJlaW5lcyBKU09OLAogKiB1bmQgRnVua3Rpb25lbiB1ZWJlcmxlYmVuIGVpbmUgSlNPTi1TZXJpYWxpc2llcnVuZyBuaWNodC4gbDRGdWVyIHdhciBkYXMKICogZWluemlnZSBGdW5rdGlvbnNmZWxkIGFuIFdFSVNTX0RBVEEsIGZlaGx0ZSBpbSBXaWRnZXQgYWxzbyBpbW1lciwgdW5kIGRpZQogKiBCYXVsYWVuZ2UgYmxpZWIgZG9ydCBkYXVlcmhhZnQgYXVmICJCYXVsYWVuZ2UgZm9sZ3QiIHN0ZWhlbi4KICogRGVzaGFsYiBpc3QgZGllIFJvaHRhYmVsbGUgbWQubDQgZGVyIHZlcmJpbmRsaWNoZSBXZWcgLSBzaWUgaXN0IGltIEpTT04KICogZW50aGFsdGVuLiBsNEZ1ZXIgd2lyZCBudXIgbm9jaCBnZW51dHp0LCB3ZW5uIGVzIHZvcmhhbmRlbiBpc3QuICovCmZ1bmN0aW9uIGw0V2VydChtZCwgcmVpaGUsIGlkLCB2YXJpYW50ZSkgewogIGNvbnN0IGtleSA9IFN0cmluZyh2YXJpYW50ZSkudG9VcHBlckNhc2UoKSA9PT0gJ0tMJyA\\\/ICdLTCcgOiAnS0snOwogIGNvbnN0IHRhYiA9IG1kICYmIG1kLmw0ICYmIG1kLmw0W3JlaWhlXTsKICBjb25zdCByb3cgPSB0YWIgJiYgdGFiW2lkXTsKICBpZiAocm93ICYmIHBvc2l0aXZlKHJvd1trZXldKSkgcmV0dXJuIHJvd1trZXldOwogIGlmIChtZCAmJiB0eXBlb2YgbWQubDRGdWVyID09PSAnZnVuY3Rpb24nKSB7CiAgICBjb25zdCB2ID0gbWQubDRGdWVyKHJlaWhlLCBpZCwga2V5KTsKICAgIGlmIChwb3NpdGl2ZSh2KSkgcmV0dXJuIHY7CiAgfQogIHJldHVybiBudWxsOwp9CmZ1bmN0aW9uIGw0SW5mbyhvKSB7CiAgY29uc3QgbWQgPSByb290ICYmIHJvb3QuV0VJU1NfREFUQSAmJiByb290LldFSVNTX0RBVEEubWFzc2UgJiYgcm9vdC5XRUlTU19EQVRBLm1hc3NlLmRpbjMyNjc2OwogIGlmICghbWQgfHwgIW1kLnJlaWhlbikgcmV0dXJuIG51bGw7CiAgaWYgKCFtZC5sNCAmJiB0eXBlb2YgbWQubDRGdWVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gbnVsbDsKICBjb25zdCBMID0gby5sZW5ndGg7CiAgaWYgKCFwb3NpdGl2ZShMKSkgcmV0dXJuIG51bGw7CiAgY29uc3QgbGFiZWwgPSBTdHJpbmcoby5jbGFtcFNpemUgPT0gbnVsbCA\\\/ICcnIDogby5jbGFtcFNpemUpLnRyaW0oKTsKICBpZiAoIWxhYmVsKSByZXR1cm4gbnVsbDsKICBmb3IgKGNvbnN0IGsgb2YgWydBJywgJ0InLCAnQyddKSB7CiAgICBjb25zdCByZWloZSA9IG1kLnJlaWhlbltrXTsKICAgIGlmICghcmVpaGUgfHwgIXJlaWhlLnJvd3MpIGNvbnRpbnVlOwogICAgZm9yIChjb25zdCByb3cgb2YgcmVpaGUucm93cykgewogICAgICAvLyBEcmVpIFdlcnRlIG11ZXNzZW4genVzYW1tZW5wYXNzZW4gLSBMYWJlbCBhbGxlaW4gd3VlcmRlIGF1Y2ggZGllCiAgICAgIC8vIGRpY2t3YW5kaWdlIFRDRC1aZWlsZSB0cmVmZmVuLCBkaWUgZGllc2VsYmVuIExhYmVscyBmdWVocnQuCiAgICAgIGlmIChTdHJpbmcocm93LmxhYmVsKSAhPT0gbGFiZWwpIGNvbnRpbnVlOwogICAgICBpZiAocm93LmZsYW5nZU9EICE9PSBvLmZsYW5nZU9kIHx8IHJvdy50dWJlT0QgIT09IG8ub2QpIGNvbnRpbnVlOwogICAgICBjb25zdCB2YXJpYW50ZSA9IChyb3cua2sgIT0gbnVsbCAmJiByb3cua2sgPT09IEwpID8gJ0tLJwogICAgICAgIDogKHJvdy5rbCAhPSBudWxsICYmIHJvdy5rbCA9PT0gTCkgPyAnS0wnIDogbnVsbDsKICAgICAgaWYgKCF2YXJpYW50ZSkgcmV0dXJuIG51bGw7CiAgICAgIGNvbnN0IHdlcnQgPSBsNFdlcnQobWQsIGssIHJvdy5pZCwgdmFyaWFudGUpOwogICAgICBpZiAoIXBvc2l0aXZlKHdlcnQpKSByZXR1cm4gbnVsbDsKICAgICAgY29uc3Qgc3BhbHQgPSB3ZXJ0IC0gMiAqIEw7CiAgICAgIGlmIChzcGFsdCA8IDApIHJldHVybiBudWxsOyAgICAgICAgICAgICAgLy8gRmFsbCAzLCBzaWVoZSBvYmVuCiAgICAgIHJldHVybiB7IHdlcnQ6IHdlcnQsIHJlaWhlOiBrLCBpZDogcm93LmlkLCB2YXJpYW50ZTogdmFyaWFudGUsIHNwYWx0OiBzcGFsdCB9OwogICAgfQogIH0KICByZXR1cm4gbnVsbDsKfQovKiBLbGVpbnN0ZXIgZ2V6ZWljaG5ldGVyIERpY2h0dW5nc3NwYWx0LiBJbiAyMSBkZXIgODIgYmVsZWd0ZW4gS29tYmluYXRpb25lbiBpc3QKICogbDQgbGF1dCBOb3JtIGV4YWt0IDIgeCBsMyAoRmxhbnNjaGZsYWVjaGVuIG1ldGFsbGlzY2ggYXVmIEJsb2NrKSwgZGVyIHJlY2huZXJpc2NoZQogKiBTcGFsdCBhbHNvIDAgLSBkYW5uIHdhZXJlIGRpZSBEaWNodHVuZyBpbiBkZXIgWmVpY2hudW5nIHVuc2ljaHRiYXIuIFNpZSBiZWtvbW10CiAqIGRlc2hhbGIgMCw4IG1tIE1pbmRlc3RicmVpdGU7IGRpZSBnZXplaWNobmV0ZSBHZXNhbXRsYWVuZ2UgbGllZ3QgaW4gZGllc2VuIEZhZWxsZW4KICogdW0gZGllc2UgMCw4IG1tIHVlYmVyIGRlbSBiZW1hc3N0ZW4gbDQgKGJlaSBkZXIga2xlaW5zdGVuIFZlcmJpbmR1bmcgbDQgPSAyNSw0CiAqIHNpbmQgZGFzIDMsMSAlKS4gRGllIE1BU1NaQUhMIGJsZWlidCBpbiBqZWRlbSBGYWxsIHVudmVyYWVuZGVydCBkZXIgVGFiZWxsZW53ZXJ0LiAqLwpjb25zdCBESUNIVF9TUEFMVF9NSU4gPSAwLjg7Cgpjb25zdCBGSVRUSU5HX1RZUEVTID0gWydjbGFtcHN0dXR6ZW4nLCdibGluZGthcHBlJywnYmxpbmRkZWNrZWwnLCdib2dlbjkwJywnYm9nZW40NScsJ3RzdHVlY2snLCdyZWR1emllcnVuZycsJ2tsYW1tZXInLCdkaWNodHVuZycsJ2Nvbm5lY3RmbGFuc2NoJywnY29ubmVjdGlubGluZSddOwoKY29uc3QgREVGQVVMVFMgPSB7CiAgdHlwZTonY2xhbXBzdHV0emVuJywgZG46MjUsIG9kOjI1LjAsIHdhbGw6MS41LCBsZW5ndGg6MTAwLCBjbGFtcFNpemU6J0ROMjUnLAogIGJlbmRSYWRpdXM6MzgsIG9kMjoyMC4wLCBicmFuY2hPZDpudWxsLCBlY2NlbnRyaWM6ZmFsc2UsIGZsYW5nZU9kOm51bGwsCiAgLy8gUjMtMy9SMy00OiBCYXVmb3JtIGRlcyBULVN0w7xja3MuICdUJyA9IEFiZ2FuZyBnbGVpY2ggbGFuZywgJ1RLJyA9IEFiZ2FuZyBrdXJ6LgogIC8vIFN0ZXVlcnQgbnVyIGRpZSBzY2hlbWF0aXNjaGUgQWJnYW5nc2zDpG5nZSAoa2VpbiBiZW1hw590ZXMgTWHDnykgaW4gZHJhd1RzdHVlY2suCiAgdGZvcm06J1QnLAogIGdhc2tldE1hdGVyaWFsOidFUERNJywgZ2Fza2V0Q29sb3I6bnVsbCwgc3VyZmFjZTonSDQnLCB3ZXJrc3RvZmY6JzEuNDQwNCcsCiAgLy8gQmVzY2hyaWZ0dW5nIGRlcyBMYWVuZ2VubWFzc2VzLiAnTCcgPSBCYXVsYWVuZ2UvU3R1dHplbmxhZW5nZSAoS0svS0wsIGR1ZW5ud2FuZGlnKS4KICAvLyBEZXIgZGlja3dhbmRpZ2UgVGFua3N0dXR6ZW4gKFRDRCkgaGF0IEtFSU5FIEtLL0tMLUxhZW5nZSwgc29uZGVybiBkaWUgSG9laGUgaCA9IDYwIG1tCiAgLy8gLT4gYXBwLmpzIHNjaGlja3QgZG9ydCBsZW5ndGhMYWJlbDonaCcuIE51ciBkYXMgUHJhZWZpeCBhZW5kZXJ0IHNpY2gsIG5pZSBkZXIgV2VydC4KICBsZW5ndGhMYWJlbDonTCcKfTsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFV0aWxpdGllcyAqLwpsZXQgX3VpZCA9IDA7CmNvbnN0IHVpZCA9ICgpID0+ICd3eicgKyAoKytfdWlkKTsKY29uc3QgbnVtID0gKHYsIGQpID0+ICh0eXBlb2YgdiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodikpID8gdiA6IGQ7CmNvbnN0IGZ4ICA9IG4gPT4gKE1hdGgucm91bmQobiAqIDEwMCkgLyAxMDApOwpjb25zdCBkZSAgPSBuID0+IFN0cmluZyhmeChuKSkucmVwbGFjZSgnLicsICcsJyk7ICAgLy8gZGV1dHNjaGUgTWFzc3phaGwgKEtvbW1hKQpjb25zdCBwb2x5ID0gcHRzID0+IHB0cy5tYXAocCA9PiBmeChwWzBdKSArICcsJyArIGZ4KHBbMV0pKS5qb2luKCcgJyk7CmNvbnN0IHBhdGhGcm9tID0gcHRzID0+ICdNJyArIHBvbHkocHRzKS5yZXBsYWNlKC8gL2csICcgTCcpLnJlcGxhY2UoJ0wnLCAnJyk7CmNvbnN0IGVzYyA9IHMgPT4gU3RyaW5nKHMgPT0gbnVsbCA\\\/ICcnIDogcykucmVwbGFjZSgvWyY8PiInXS9nLCBjID0+ICh7CiAgJyYnOicmYW1wOycsICc8JzonJmx0OycsICc+JzonJmd0OycsICciJzonJnF1b3Q7JywgIiciOicmIzM5OycKfSlbY10pOwpjb25zdCBwb3NpdGl2ZSA9IHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHYpICYmIHYgPiAwOwovLyBXZXJrc3RvZmZzZXJpZSBkZXIgQ29ubmVjdC1GbGFuc2NoZSAoV2Vya3N0b2ZmbnVtbWVyIHN0YXR0IEhlcnN0ZWxsZXJrdWVyemVsKS4KY29uc3Qgc2VyaWVzT2sgPSB2ID0+IFsnMS40NDA0JywnMS40NDM1J10uaW5jbHVkZXMoU3RyaW5nKHYgfHwgJycpLnRyaW0oKSk7CmNvbnN0IGhhc1NpemVMYWJlbCA9IHAgPT4gISEocCAmJiAoKHR5cGVvZiBwLmxhYmVsID09PSAnc3RyaW5nJyAmJiBwLmxhYmVsLnRyaW0oKSkgfHwgcC5kbiAhPSBudWxsKSk7CmZ1bmN0aW9uIHZhbGlkQ29ubmVjdGZsYW5zY2gocCkgewogIHJldHVybiAhIShwICYmIHBvc2l0aXZlKHAub2QpICYmIHBvc2l0aXZlKHAuaW5uZXJEaWFtZXRlcikgJiYgcC5pbm5lckRpYW1ldGVyIDwgcC5vZCAmJgogICAgcG9zaXRpdmUocC5mbGFuZ2VPZCkgJiYgcC5pbm5lckRpYW1ldGVyIDwgcC5mbGFuZ2VPZCAmJiBwb3NpdGl2ZShwLmxlbmd0aCkgJiYKICAgIHNlcmllc09rKHAucHJvZHVjdFNlcmllcykgJiYgaGFzU2l6ZUxhYmVsKHApKTsKfQpmdW5jdGlvbiB2YWxpZENvbm5lY3RpbmxpbmUocCkgewogIGNvbnN0IGVuZFR5cGUgPSBTdHJpbmcocCAmJiBwLmVuZFR5cGUgfHwgJycpLnRyaW0oKS50b1VwcGVyQ2FzZSgpOwogIHJldHVybiAhIShwICYmIHBvc2l0aXZlKHAub2QpICYmIHBvc2l0aXZlKHAuaW5uZXJEaWFtZXRlcikgJiYgcC5pbm5lckRpYW1ldGVyIDwgcC5vZCAmJgogICAgcG9zaXRpdmUocC5sZW5ndGgpICYmIHBvc2l0aXZlKHAuYnJhbmNoSGVpZ2h0KSAmJiBwb3NpdGl2ZShwLmVuZERpYW1ldGVyKSAmJgogICAgcG9zaXRpdmUocC51cHBlck91dGVyRGlhbWV0ZXIpICYmIHBvc2l0aXZlKHAudXBwZXJJbm5lckRpYW1ldGVyKSAmJiBwLnVwcGVySW5uZXJEaWFtZXRlciA8IHAudXBwZXJPdXRlckRpYW1ldGVyICYmCiAgICBbJ0JXJywnVEMnXS5pbmNsdWRlcyhlbmRUeXBlKSAmJiBzZXJpZXNPayhwLnByb2R1Y3RTZXJpZXMpICYmIGhhc1NpemVMYWJlbChwKSk7Cn0KZnVuY3Rpb24gc2l6ZUxhYmVsKG8pIHsKICBpZiAodHlwZW9mIG8ubGFiZWwgPT09ICdzdHJpbmcnICYmIG8ubGFiZWwudHJpbSgpKSByZXR1cm4gby5sYWJlbC50cmltKCk7CiAgY29uc3QgZG4gPSBTdHJpbmcoby5kbiA9PSBudWxsID8gJycgOiBvLmRuKS50cmltKCk7CiAgaWYgKCFkbikgcmV0dXJuICcnOwogIHJldHVybiAvXkROXHMqL2kudGVzdChkbikgPyBkbiA6ICdETiAnICsgZG47Cn0KZnVuY3Rpb24gZml0dGluZ0JhZGdlKHZ3LCB0ZXh0KSB7CiAgY29uc3QgbGFiZWwgPSBlc2ModGV4dCk7CiAgY29uc3QgdyA9IE1hdGgubWluKHZ3IC0gMjgsIE1hdGgubWF4KDE4OCwgU3RyaW5nKHRleHQpLmxlbmd0aCAqIDYuMSArIDI4KSk7CiAgcmV0dXJuIGA8cmVjdCBjbGFzcz0id3otYmFkZ2UtYmciIHg9IiR7ZngoKHZ3IC0gdykgLyAyKX0iIHk9IjEyIiB3aWR0aD0iJHtmeCh3KX0iIGhlaWdodD0iMjIiIHJ4PSIxMSIvPgogICAgPHRleHQgY2xhc3M9Ind6LWJhZGdlLXR4IiB4PSIke2Z4KHZ3IC8gMil9IiB5PSIyNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+JHtsYWJlbH08L3RleHQ+YDsKfQpmdW5jdGlvbiBhcmNQdHMoY3gsIGN5LCByLCBhMCwgYTEsIG4pIHsKICBuID0gbiB8fCBNYXRoLm1heCg2LCBNYXRoLnJvdW5kKE1hdGguYWJzKGExIC0gYTApIC8gKE1hdGguUEkgLyAyNCkpKTsKICBjb25zdCBvdXQgPSBbXTsKICBmb3IgKGxldCBpID0gMDsgaSA8PSBuOyBpKyspIHsgY29uc3QgYSA9IGEwICsgKGExIC0gYTApICogKGkgLyBuKTsgb3V0LnB1c2goW2N4ICsgciAqIE1hdGguY29zKGEpLCBjeSArIHIgKiBNYXRoLnNpbihhKV0pOyB9CiAgcmV0dXJuIG91dDsKfQpjb25zdCBtZWFzdXJlID0gcyA9PiBTdHJpbmcocykubGVuZ3RoICogMy42ICsgNDsKCmZ1bmN0aW9uIG5vcm1hbGl6ZShwKSB7CiAgY29uc3QgbyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRTLCBwIHx8IHt9KTsKICBjb25zdCBjb25uZWN0VHlwZSA9IHAgJiYgKHAudHlwZSA9PT0gJ2Nvbm5lY3RmbGFuc2NoJyB8fCBwLnR5cGUgPT09ICdjb25uZWN0aW5saW5lJyk7CiAgby5vZCA9IE1hdGgubWF4KDQsIG51bShvLm9kLCBERUZBVUxUUy5vZCkpOwogIG8ud2FsbCA9IE1hdGgubWluKG8ub2QgLyAyIC0gMC4yLCBNYXRoLm1heCgwLjMsIG51bShvLndhbGwsIERFRkFVTFRTLndhbGwpKSk7CiAgLy8gRGVja2Vsc3RhZXJrZSBkZXMgQmxpbmRkZWNrZWxzIGxpZWd0IGJlaSA0LDc1LTE0IG1tIC0gZGllIDgtbW0tVW50ZXJncmVuemUKICAvLyBmdWVyIFN0dXR6ZW5sYWVuZ2VuIGRhcmYgc2llIG5pY2h0IHZlcmZhZWxzY2hlbi4gRGVyIFdlcnQgZGFyZiBOVVIgYXVzIGRlbQogIC8vIEF1ZnJ1ZiBrb21tZW4gKG5pZW1hbHMgZGVyIERFRkFVTFRTLVdlcnQgMTAwKTsgZmVobHQgZXIgLT4gbnVsbCAtPiBQbGF0emhhbHRlci4KICBvLmxlbmd0aCA9IChwICYmIHAudHlwZSA9PT0gJ2JsaW5kZGVja2VsJykKICAgID8gKGlzRmluaXRlKHAubGVuZ3RoKSA\\\/IE51bWJlcihwLmxlbmd0aCkgOiBudWxsKQogICAgOiBNYXRoLm1heCg4LCBudW0oby5sZW5ndGgsIERFRkFVTFRTLmxlbmd0aCkpOwogIC8vIG9kMiBudXIgYWxzIEVDSFRFUyBNYXNzIGJlaGFuZGVsbiwgd2VubiBkZXIgQXVmcnVmZXIgd2lya2xpY2ggZWluZW4gendlaXRlbiDDmCBnZWxpZWZlcnQKICAvLyBoYXQuIERFRkFVTFRTLm9kMiAoMjApIHVuZCBkZXIgMC42Ni1GYWxsYmFjayBzaW5kIEtFSU5FIFdlaXNzLU1hc3NlIC0gb2huZSBlY2h0ZW4gendlaXRlbgogIC8vIMOYIHd1ZXJkZSBkaWUgUmVkdXppZXJ1bmcgc29uc3QgZWluZSBlcmZ1bmRlbmUgWmFobCBiZW1hc3NlbiAoTmFjaHBydWVmLUJlZnVuZCBhKS4gRGllCiAgLy8gR2VvbWV0cmllIGJla29tbXQgZWluZW4gbmV1dHJhbGVuIFdlcnQsIGRpZSBNQVNTWkFITCB3aXJkIGFiZXIgdWViZXIgby5vZDJQcm92IGF1ZgogIC8vICJmb2xndCIgZ2VzZXR6dCAoZHJhd1JlZHV6aWVydW5nKSwgYW5hbG9nIHp1IHByb3ZEaW1zIGJlaSBMYWVuZ2UvUmFkaXVzLgogIG8ub2QyUHJvdiA9ICEhKHAgJiYgaXNGaW5pdGUocC5vZDIpKTsKICBvLm9kMiA9IG8ub2QyUHJvdiA\\\/IE1hdGgubWF4KDQsIE1hdGgubWluKG8ub2QgLSAwLjUsIHAub2QyKSkgOiBNYXRoLm1heCg0LCBNYXRoLm1pbihvLm9kIC0gMC41LCBvLm9kICogMC42NikpOwogIG8uYnJhbmNoT2QgPSBudW0oby5icmFuY2hPZCwgby5vZCk7CiAgby5icmFuY2hMZW5ndGggPSBwICYmIHBvc2l0aXZlKHAuYnJhbmNoTGVuZ3RoKSA\\\/IE51bWJlcihwLmJyYW5jaExlbmd0aCkgOiBudWxsOwogIG8ud2FsbDIgPSBwICYmIHBvc2l0aXZlKHAud2FsbDIpID8gTnVtYmVyKHAud2FsbDIpIDogby53YWxsOwogIG8ub3ZlcmFsbExlbmd0aCA9IHAgJiYgcG9zaXRpdmUocC5vdmVyYWxsTGVuZ3RoKSA\\\/IE51bWJlcihwLm92ZXJhbGxMZW5ndGgpIDogbnVsbDsKICBvLm92ZXJhbGxMZW5ndGhMYWJlbCA9IHAgJiYgdHlwZW9mIHAub3ZlcmFsbExlbmd0aExhYmVsID09PSAnc3RyaW5nJyA\\\/IHAub3ZlcmFsbExlbmd0aExhYmVsIDogJyc7CiAgby50Zm9ybSA9IChvLnRmb3JtID09PSAnVEsnKSA\\\/ICdUSycgOiAnVCc7ICAgLy8gUjMtMy9SMy00OiBudXIgJ1QnIG9kZXIgJ1RLJyB6dWxhc3NlbgogIG8uYmVuZFJhZGl1cyA9IE1hdGgubWF4KG8ub2QsIG51bShvLmJlbmRSYWRpdXMsIG8ub2QgKiAxLjUpKTsKICBvLmZsYW5nZU9kID0gbnVtKG8uZmxhbmdlT2QsIGZsYW5nZU9kRm9yKG8ub2QpKTsKICBvLmlubmVyRGlhbWV0ZXIgPSBudW0oby5pbm5lckRpYW1ldGVyLCBudWxsKTsKICBvLmJyYW5jaEhlaWdodCA9IG51bShvLmJyYW5jaEhlaWdodCwgbnVsbCk7CiAgby5lbmREaWFtZXRlciA9IG51bShvLmVuZERpYW1ldGVyLCBudWxsKTsKICBvLnVwcGVyT3V0ZXJEaWFtZXRlciA9IG51bShvLnVwcGVyT3V0ZXJEaWFtZXRlciwgbnVsbCk7CiAgby51cHBlcklubmVyRGlhbWV0ZXIgPSBudW0oby51cHBlcklubmVyRGlhbWV0ZXIsIG51bGwpOwogIG8uZW5kVHlwZSA9IFN0cmluZyhvLmVuZFR5cGUgfHwgJycpLnRyaW0oKS50b1VwcGVyQ2FzZSgpOwogIG8ucHJvZHVjdFNlcmllcyA9IFN0cmluZyhvLnByb2R1Y3RTZXJpZXMgfHwgJycpLnRyaW0oKS50b1VwcGVyQ2FzZSgpOwogIG8ubGFiZWwgPSB0eXBlb2Ygby5sYWJlbCA9PT0gJ3N0cmluZycgPyBvLmxhYmVsLnRyaW0oKSA6ICcnOwogIC8vIFJ1bmRlIDcgKFctMDU5KTogYmVsZWd0ZSBadXNhdHptYXNzZSBmdWVyIEtsYW1tZXIgLyBCbGluZGRlY2tlbCAvIERpY2h0dW5nLgogIC8vIEVzIGdpbHQgbnVyLCB3YXMgZGVyIEF1ZnJ1ZmVyIGxpZWZlcnQgLSBvaG5lIGRpZXNlIFdlcnRlIGJsZWlidCBkZXIgUGxhdHpoYWx0ZXIuCiAgby5rbGFtbWVyQSA9IG51bShvLmtsYW1tZXJBLCBudWxsKTsKICBvLmtsYW1tZXJUeXAgPSBbJ0tMMScsJ0tMTEknLCdLTEgnXS5pbmRleE9mKFN0cmluZyhvLmtsYW1tZXJUeXAgfHwgJycpLnRvVXBwZXJDYXNlKCkpID49IDAKICAgID8gU3RyaW5nKG8ua2xhbW1lclR5cCkudG9VcHBlckNhc2UoKSA6ICdLTDEnOwogIG8ua2xhbW1lck11dHRlciA9IFN0cmluZyhvLmtsYW1tZXJNdXR0ZXIgfHwgJycpLnRvVXBwZXJDYXNlKCkgPT09ICdTJyA\\\/ICdTJyA6ICdNJzsKICBvLmdhc2tldE9kID0gbnVtKG8uZ2Fza2V0T2QsIG51bGwpOwogIG8uZ2Fza2V0SWQgPSBudW0oby5nYXNrZXRJZCwgbnVsbCk7CiAgby5nYXNrZXRUeXBlID0gU3RyaW5nKG8uZ2Fza2V0VHlwZSB8fCAnJykudG9VcHBlckNhc2UoKSA9PT0gJ0knID8gJ0knIDogJ0lJJzsKICAvLyBGdWVyIENGL0NGSSBrZWluZSBNZXRhZGF0ZW4gYXVzIGRlbiBBbHQtVHlwLURlZmF1bHRzIGFuemVpZ2VuLgogIC8vIEZhbGxzIGRlciBBdWZydWZlciBXZXJrc3RvZmYvT2JlcmZsYWVjaGUgbmljaHQgbGllZmVydCwgYmxlaWJ0IGRpZSBMZWdlbmRlIGxlZXIuCiAgaWYgKGNvbm5lY3RUeXBlKSB7CiAgICBvLndlcmtzdG9mZiA9IHR5cGVvZiBwLndlcmtzdG9mZiA9PT0gJ3N0cmluZycgPyBwLndlcmtzdG9mZi50cmltKCkgOiAnJzsKICAgIG8uc3VyZmFjZSA9IHR5cGVvZiBwLnN1cmZhY2UgPT09ICdzdHJpbmcnID8gcC5zdXJmYWNlLnRyaW0oKSA6ICcnOwogIH0KICBvLm9kUiA9IG8ub2QgLyAyOwogIG8uaW5uUiA9IG8ub2QgLyAyIC0gby53YWxsOwogIG8uZ0NvbCA9IG8uZ2Fza2V0Q29sb3IgfHwgR0FTS0VUX0NPTE9SU1tvLmdhc2tldE1hdGVyaWFsXSB8fCBHQVNLRVRfQ09MT1JTLkVQRE07CiAgcmV0dXJuIG87Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNWRy1SYWhtZW46IHN0eWxlL2RlZnMgKi8KZnVuY3Rpb24gZnJhbWVEZWZzKGlkLCBnYXNrZXRGaWxsKSB7CiAgcmV0dXJuIGAKICA8ZGVmcz4KICAgIDxwYXR0ZXJuIGlkPSIke2lkfS1oYXRjaCIgd2lkdGg9IjciIGhlaWdodD0iNyIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1KSI+CiAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSI3IiBzdHJva2U9InZhcigtLXd6LWhhdGNoLCM5YWEwYTYpIiBzdHJva2Utd2lkdGg9IjAuOSIvPgogICAgPC9wYXR0ZXJuPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSIke2lkfS1zdGVlbCIgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjEiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiICAgc3RvcC1jb2xvcj0idmFyKC0td3otc3RlZWwtYSwjZmJmY2ZkKSIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjAuNSIgc3RvcC1jb2xvcj0idmFyKC0td3otc3RlZWwtYiwjZWVmMWY0KSIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiICAgc3RvcC1jb2xvcj0idmFyKC0td3otc3RlZWwtYywjZGZlNGU5KSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxtYXJrZXIgaWQ9IiR7aWR9LWFyIiBtYXJrZXJXaWR0aD0iOSIgbWFya2VySGVpZ2h0PSI5IiByZWZYPSI3LjUiIHJlZlk9IjQuNSIgb3JpZW50PSJhdXRvIiBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aCBkPSJNMCwxLjIgTDgsNC41IEwwLDcuOCBaIiBmaWxsPSJ2YXIoLS13ei1kaW0sIzhhOGY5NikiLz48L21hcmtlcj4KICAgIDxtYXJrZXIgaWQ9IiR7aWR9LWFsIiBtYXJrZXJXaWR0aD0iOSIgbWFya2VySGVpZ2h0PSI5IiByZWZYPSIxLjUiIHJlZlk9IjQuNSIgb3JpZW50PSJhdXRvIiBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aCBkPSJNOCwxLjIgTDAsNC41IEw4LDcuOCBaIiBmaWxsPSJ2YXIoLS13ei1kaW0sIzhhOGY5NikiLz48L21hcmtlcj4KICA8L2RlZnM+CiAgPHN0eWxlPgogICAgLnd6LXN2Z3tmb250LWZhbWlseTonUGx1cyBKYWthcnRhIFNhbnMnLCdLdW1iaCBTYW5zJyxzeXN0ZW0tdWksc2Fucy1zZXJpZn0KICAgIC53ei1ib3Jle2ZpbGw6dmFyKC0td3otYm9yZSwjZjRmNmY4KX0KICAgIC53ei1zdGVlbHtmaWxsOnVybCgjJHtpZH0tc3RlZWwpO3N0cm9rZTp2YXIoLS13ei1lZGdlLCMxYzFjMWMpO3N0cm9rZS13aWR0aDoxLjF9CiAgICAud3otaGF0Y2h7ZmlsbDp1cmwoIyR7aWR9LWhhdGNoKTtzdHJva2U6dmFyKC0td3otZWRnZSwjMWMxYzFjKTtzdHJva2Utd2lkdGg6MS4xO3N0cm9rZS1saW5lam9pbjpyb3VuZH0KICAgIC53ei1lZGdle2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0td3otZWRnZSwjMWMxYzFjKTtzdHJva2Utd2lkdGg6MS4xfQogICAgLnd6LWdhc2tldHtmaWxsOiR7Z2Fza2V0RmlsbH07c3Ryb2tlOnZhcigtLXd6LWVkZ2UsIzFjMWMxYyk7c3Ryb2tlLXdpZHRoOjAuODtvcGFjaXR5OjAuOTV9CiAgICAud3otY2xhbXB7ZmlsbDp2YXIoLS13ei1jbGFtcCwjYzljZWQ0KTtzdHJva2U6dmFyKC0td3otZWRnZSwjMWMxYzFjKTtzdHJva2Utd2lkdGg6MX0KICAgIC53ei1jZW50ZXJ7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS13ei1jZW50ZXIsI2Q2MGEwYSk7c3Ryb2tlLXdpZHRoOjAuOTtvcGFjaXR5OjAuNztzdHJva2UtZGFzaGFycmF5OjExIDMgMiAzO3N0cm9rZS1saW5lY2FwOnJvdW5kfQogICAgLnd6LWRpbXtzdHJva2U6dmFyKC0td3otZGltLCM4YThmOTYpO3N0cm9rZS13aWR0aDowLjg7ZmlsbDpub25lfQogICAgLnd6LWRpbXR4dHtmaWxsOnZhcigtLXd6LWRpbXR4dCwjZDYwYTBhKTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7dGV4dC1hbmNob3I6bWlkZGxlO2RvbWluYW50LWJhc2VsaW5lOm1pZGRsZX0KICAgIC53ei1sZWFke3N0cm9rZTp2YXIoLS13ei1kaW0sIzhhOGY5Nik7c3Ryb2tlLXdpZHRoOjAuNztmaWxsOm5vbmV9CiAgICAud3otbm90ZXtmaWxsOnZhcigtLXd6LW5vdGUsIzU1NSk7Zm9udC1zaXplOjExcHh9CiAgICAud3otYmFkZ2UtYmd7ZmlsbDp2YXIoLS13ei1iYWRnZSwjZjFmMWYxKX0KICAgIC53ei1iYWRnZS10eHtmaWxsOnZhcigtLXd6LWluaywjMWMxYzFjKTtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDB9CiAgPC9zdHlsZT5gOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQmVtYXNzdW5ncy1QcmltaXRpdmUgKi8KZnVuY3Rpb24gZGltSChpZCwgeGEsIHhiLCB5LCBsYWJlbCwgb3B0KSB7CiAgb3B0ID0gb3B0IHx8IHt9OyBjb25zdCBleHQgPSBvcHQuZXh0ID09IG51bGwgPyAwIDogb3B0LmV4dDsKICBjb25zdCBlbCA9IGV4dCAhPT0gMCA\\\/IGAKICAgIDxsaW5lIGNsYXNzPSJ3ei1kaW0iIHgxPSIke2Z4KHhhKX0iIHkxPSIke2Z4KGV4dCl9IiB4Mj0iJHtmeCh4YSl9IiB5Mj0iJHtmeCh5ICsgKHkgPiBleHQgPyA0IDogLTQpKX0iLz4KICAgIDxsaW5lIGNsYXNzPSJ3ei1kaW0iIHgxPSIke2Z4KHhiKX0iIHkxPSIke2Z4KGV4dCl9IiB4Mj0iJHtmeCh4Yil9IiB5Mj0iJHtmeCh5ICsgKHkgPiBleHQgPyA0IDogLTQpKX0iLz5gIDogJyc7CiAgcmV0dXJuIGAke2VsfQogICAgPGxpbmUgY2xhc3M9Ind6LWRpbSIgeDE9IiR7ZngoeGEpfSIgeTE9IiR7ZngoeSl9IiB4Mj0iJHtmeCh4Yil9IiB5Mj0iJHtmeCh5KX0iIG1hcmtlci1zdGFydD0idXJsKCMke2lkfS1hbCkiIG1hcmtlci1lbmQ9InVybCgjJHtpZH0tYXIpIi8+CiAgICA8cmVjdCBjbGFzcz0id3otYmFkZ2UtYmciIHg9IiR7ZngoKHhhICsgeGIpIC8gMiAtIG1lYXN1cmUobGFiZWwpKX0iIHk9IiR7ZngoeSAtIDkpfSIgd2lkdGg9IiR7ZngobWVhc3VyZShsYWJlbCkgKiAyKX0iIGhlaWdodD0iMTYiIHJ4PSIzIiBvcGFjaXR5PSIwLjkiLz4KICAgIDx0ZXh0IGNsYXNzPSJ3ei1kaW10eHQiIHg9IiR7ZngoKHhhICsgeGIpIC8gMil9IiB5PSIke2Z4KHkgKyAxKX0iPiR7bGFiZWx9PC90ZXh0PmA7Cn0KZnVuY3Rpb24gZGltVihpZCwgeCwgeWEsIHliLCBsYWJlbCwgb3B0KSB7CiAgb3B0ID0gb3B0IHx8IHt9OyBjb25zdCBleHQgPSBvcHQuZXh0ID09IG51bGwgPyAwIDogb3B0LmV4dDsKICBjb25zdCBlbCA9IGV4dCAhPT0gMCA\\\/IGAKICAgIDxsaW5lIGNsYXNzPSJ3ei1kaW0iIHgxPSIke2Z4KGV4dCl9IiB5MT0iJHtmeCh5YSl9IiB4Mj0iJHtmeCh4ICsgKHggPiBleHQgPyA0IDogLTQpKX0iIHkyPSIke2Z4KHlhKX0iLz4KICAgIDxsaW5lIGNsYXNzPSJ3ei1kaW0iIHgxPSIke2Z4KGV4dCl9IiB5MT0iJHtmeCh5Yil9IiB4Mj0iJHtmeCh4ICsgKHggPiBleHQgPyA0IDogLTQpKX0iIHkyPSIke2Z4KHliKX0iLz5gIDogJyc7CiAgcmV0dXJuIGAke2VsfQogICAgPGxpbmUgY2xhc3M9Ind6LWRpbSIgeDE9IiR7ZngoeCl9IiB5MT0iJHtmeCh5YSl9IiB4Mj0iJHtmeCh4KX0iIHkyPSIke2Z4KHliKX0iIG1hcmtlci1zdGFydD0idXJsKCMke2lkfS1hbCkiIG1hcmtlci1lbmQ9InVybCgjJHtpZH0tYXIpIi8+CiAgICA8cmVjdCBjbGFzcz0id3otYmFkZ2UtYmciIHg9IiR7ZngoeCAtIG1lYXN1cmUobGFiZWwpKX0iIHk9IiR7ZngoKHlhICsgeWIpIC8gMiAtIDgpfSIgd2lkdGg9IiR7ZngobWVhc3VyZShsYWJlbCkgKiAyKX0iIGhlaWdodD0iMTYiIHJ4PSIzIiBvcGFjaXR5PSIwLjkiLz4KICAgIDx0ZXh0IGNsYXNzPSJ3ei1kaW10eHQiIHg9IiR7ZngoeCl9IiB5PSIke2Z4KCh5YSArIHliKSAvIDIgKyAxKX0iPiR7bGFiZWx9PC90ZXh0PmA7Cn0KZnVuY3Rpb24gZGltVlJvdChpZCwgeCwgeWEsIHliLCBsYWJlbCwgb3B0KSB7CiAgb3B0ID0gb3B0IHx8IHt9OyBjb25zdCBleHQgPSBvcHQuZXh0ID09IG51bGwgPyAwIDogb3B0LmV4dDsKICBjb25zdCBjeSA9ICh5YSArIHliKSAvIDIsIHR3ID0gbWVhc3VyZShsYWJlbCkgKiAyOwogIGNvbnN0IGVsID0gZXh0ICE9PSAwID8gYAogICAgPGxpbmUgY2xhc3M9Ind6LWRpbSIgeDE9IiR7ZngoZXh0KX0iIHkxPSIke2Z4KHlhKX0iIHgyPSIke2Z4KHggKyAoeCA+IGV4dCA\\\/IDQgOiAtNCkpfSIgeTI9IiR7ZngoeWEpfSIvPgogICAgPGxpbmUgY2xhc3M9Ind6LWRpbSIgeDE9IiR7ZngoZXh0KX0iIHkxPSIke2Z4KHliKX0iIHgyPSIke2Z4KHggKyAoeCA+IGV4dCA\\\/IDQgOiAtNCkpfSIgeTI9IiR7ZngoeWIpfSIvPmAgOiAnJzsKICByZXR1cm4gYCR7ZWx9CiAgICA8bGluZSBjbGFzcz0id3otZGltIiB4MT0iJHtmeCh4KX0iIHkxPSIke2Z4KHlhKX0iIHgyPSIke2Z4KHgpfSIgeTI9IiR7ZngoeWIpfSIgbWFya2VyLXN0YXJ0PSJ1cmwoIyR7aWR9LWFsKSIgbWFya2VyLWVuZD0idXJsKCMke2lkfS1hcikiLz4KICAgIDxnIHRyYW5zZm9ybT0icm90YXRlKC05MCAke2Z4KHgpfSAke2Z4KGN5KX0pIj4KICAgICAgPHJlY3QgY2xhc3M9Ind6LWJhZGdlLWJnIiB4PSIke2Z4KHggLSB0dyAvIDIpfSIgeT0iJHtmeChjeSAtIDgpfSIgd2lkdGg9IiR7ZngodHcpfSIgaGVpZ2h0PSIxNiIgcng9IjMiIG9wYWNpdHk9IjAuOTIiLz4KICAgICAgPHRleHQgY2xhc3M9Ind6LWRpbXR4dCIgeD0iJHtmeCh4KX0iIHk9IiR7ZngoY3kgKyAxKX0iPiR7bGFiZWx9PC90ZXh0PgogICAgPC9nPmA7Cn0KZnVuY3Rpb24gbGVhZGVyKGlkLCB4MSwgeTEsIHgyLCB5MiwgbGFiZWwpIHsKICByZXR1cm4gYDxsaW5lIGNsYXNzPSJ3ei1sZWFkIiB4MT0iJHtmeCh4MSl9IiB5MT0iJHtmeCh5MSl9IiB4Mj0iJHtmeCh4Mil9IiB5Mj0iJHtmeCh5Mil9IiBtYXJrZXItc3RhcnQ9InVybCgjJHtpZH0tYWwpIi8+CiAgICA8cmVjdCBjbGFzcz0id3otYmFkZ2UtYmciIHg9IiR7ZngoeDIgLSBtZWFzdXJlKGxhYmVsKSAtIDMpfSIgeT0iJHtmeCh5MiAtIDgpfSIgd2lkdGg9IiR7ZngobWVhc3VyZShsYWJlbCkgKiAyICsgNil9IiBoZWlnaHQ9IjE2IiByeD0iMyIgb3BhY2l0eT0iMC45NSIvPgogICAgPHRleHQgY2xhc3M9Ind6LWRpbXR4dCIgeD0iJHtmeCh4MiArIG1lYXN1cmUobGFiZWwpKX0iIHk9IiR7ZngoeTIgKyAxKX0iPiR7bGFiZWx9PC90ZXh0PmA7Cn0KCmZ1bmN0aW9uIHdyYXBTdmcoaWQsIHZ3LCB2aCwgZ2Fza2V0RmlsbCwgYm9keSwgbGVnZW5kKSB7CiAgcmV0dXJuIGA8c3ZnIGNsYXNzPSJ3ei1zdmciIHZpZXdCb3g9IjAgMCAke3Z3fSAke3ZofSIgcm9sZT0iaW1nIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogICR7ZnJhbWVEZWZzKGlkLCBnYXNrZXRGaWxsKX0KICA8Zz4ke2JvZHl9PC9nPgogICR7bGVnZW5kIHx8ICcnfQo8L3N2Zz5gOwp9Ci8qIFJhLVp1c2F0eiBmdWVyIGRpZSBMZWdlbmRlIC0ga29tbXQgQVVTU0NITElFU1NMSUNIIGF1cyBkYXRhLmpzIChvYmVyZmxhZWNoZW5bXSkuCiAqIEZydWVoZXIgc3RhbmQgaGllciBlaW5lIGhhcnRrb2RpZXJ0ZSBLZXR0ZSAoSDEgLT4gIihnZWJlaXp0KSIsIEgzIC0+ICIoUmE8MCw4KSIsCiAqIEFMTEVTIEFOREVSRSAtPiAiKFJhPDAsNCkiKS4gRGVyIGVsc2UtWndlaWcgaGFldHRlIGplZGVyIHVuYmVrYW5udGVuL25ldWVuCiAqIE9iZXJmbGFlY2hlIHN0aWxsc2Nod2VpZ2VuZCBlaW5lbiBlcmZ1bmRlbmVuIFJhLVdlcnQgYW5nZWRpY2h0ZXQuCiAqIEpldHp0OiBudXIgYmVzdGFldGlndGUgV2VydGUuIEZlaGx0IGRlciBXZXJ0IChIMTogcmFJbm5lbiA9IG51bGwpIG9kZXIgZmVobGVuIGRpZQogKiBEYXRlbiBnYW56IChkcmF3LmpzIGxhZXVmdCBhdWNoIG9obmUgZGF0YS5qcyBpbSBOb2RlLURlbW8pLCBlbnRmYWVsbHQgZGVyIFp1c2F0ei4gKi8KZnVuY3Rpb24gcmFTdWZmaXgoc3VyZmFjZSkgewogIGNvbnN0IGxpc3QgPSByb290ICYmIHJvb3QuV0VJU1NfREFUQSAmJiByb290LldFSVNTX0RBVEEub2JlcmZsYWVjaGVuOwogIGlmICghbGlzdCkgcmV0dXJuICcnOwogIGNvbnN0IG8gPSBsaXN0LmZpbmQoeCA9PiB4LmlkID09PSBzdXJmYWNlKTsKICBpZiAoIW8gfHwgby5yYUlubmVuID09IG51bGwpIHJldHVybiAnJzsKICByZXR1cm4gJyAoUmEmbHQ7JyArIFN0cmluZyhvLnJhSW5uZW4pLnJlcGxhY2UoJy4nLCAnLCcpICsgJyknOwp9CmZ1bmN0aW9uIGxlZ2VuZEJveChpZCwgdncsIHZoLCBvLCB2aWV3TmFtZSkgewogIGNvbnN0IGl0ZW1zID0gWwogICAgWydBbnNpY2h0Jywgdmlld05hbWVdLAogICAgWydXZXJrc3RvZmYnLCBvLndlcmtzdG9mZl0sCiAgICBbJ09iZXJmbMOkY2hlJywgby5zdXJmYWNlICsgcmFTdWZmaXgoby5zdXJmYWNlKV0KICBdLmZpbHRlcihpdCA9PiBpdFsxXSk7CiAgY29uc3QgeTAgPSB2aCAtIDE0IC0gaXRlbXMubGVuZ3RoICogMTU7IGxldCByb3dzID0gJyc7CiAgaXRlbXMuZm9yRWFjaCgoaXQsIGkpID0+IHsKICAgIHJvd3MgKz0gYDx0ZXh0IGNsYXNzPSJ3ei1ub3RlIiB4PSIxNCIgeT0iJHt5MCArIDEyICsgaSAqIDE1fSI+CiAgICAgIDx0c3BhbiBmaWxsPSJ2YXIoLS13ei1ub3RlLCM5OTkpIj4ke2l0WzBdfTo8L3RzcGFuPgogICAgICA8dHNwYW4gZHg9IjQiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9InZhcigtLXd6LWluaywjMWMxYzFjKSI+JHtpdFsxXX08L3RzcGFuPjwvdGV4dD5gOwogIH0pOwogIHJldHVybiBgPGcgb3BhY2l0eT0iMC45NSI+JHtyb3dzfTwvZz5gOwp9CgovKiAtLSBnZW1laW5zYW1lciBQcm9qZWt0b3IgKyBGaXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmZ1bmN0aW9uIG1ha2VQcm9qKGV4dFhtaW4sIGV4dFhtYXgsIGV4dFltaW4sIGV4dFltYXgsIHZ3LCB2aCwgcGFkKSB7CiAgY29uc3Qgd01tID0gZXh0WG1heCAtIGV4dFhtaW4sIGhNbSA9IGV4dFltYXggLSBleHRZbWluOwogIGNvbnN0IGJveFcgPSB2dyAtIHBhZC5sIC0gcGFkLnIsIGJveEggPSB2aCAtIHBhZC50IC0gcGFkLmI7CiAgY29uc3Qgc2NhbGUgPSBNYXRoLm1heCgwLjM1LCBNYXRoLm1pbig2LCBNYXRoLm1pbihib3hXIC8gd01tLCBib3hIIC8gaE1tKSkpOwogIGNvbnN0IG94ID0gcGFkLmwgKyAoYm94VyAtIHdNbSAqIHNjYWxlKSAvIDIgLSBleHRYbWluICogc2NhbGU7CiAgY29uc3Qgb3kgPSBwYWQudCArIChib3hIIC0gaE1tICogc2NhbGUpIC8gMiAtIGV4dFltaW4gKiBzY2FsZTsKICBjb25zdCBQID0gKHgsIHkpID0+IFtveCArIHggKiBzY2FsZSwgb3kgKyB5ICogc2NhbGVdOwogIFAuc2NhbGUgPSBzY2FsZTsgUC5zeCA9IHggPT4gb3ggKyB4ICogc2NhbGU7IFAuc3kgPSB5ID0+IG95ICsgeSAqIHNjYWxlOwogIHJldHVybiBQOwp9CgovKiAtLSAxKSBDbGFtcHN0dXR6ZW46IEFzc2VtYmx5IC8gQmxpbmRkZWNrZWwgLyBFSU5aRUxORVIgU3R1dHplbiAtLS0tLS0tLS0tLS0KICogbW9kZTogZmFsc2UgfCAnYXNzZW1ibHknICAtPiBrb21wbGV0dGUgVHJpQ2xhbXAtVmVyYmluZHVuZyAoMnggRmVycnVsZSArIERpY2h0dW5nICsgS2xhbW1lcikKICogICAgICAgdHJ1ZSAgfCAnY2xvc2VkJyAgICAtPiBCbGluZGRlY2tlbCAoZWluIFN0dXR6ZW4sIFN0aXJuZmxhZWNoZSB6dSkKICogICAgICAgJ3NpbmdsZScgICAgICAgICAgICAtPiBFSU4gU3R1dHplbiwgb2ZmZW46IGtlaW5lIHp3ZWl0ZSBGZXJydWxlLCBrZWluZSBEaWNodHVuZywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWluZSBLbGFtbWVyIChCZXJuZCAxNi4wNy4yMDI2LCBQa3QuIDkuMi85LjMgLSBUQ0QvVENTKS4KICogRGllIGFsdGVuIEJvb2xlYW4tQXVmcnVmZXIgKGZhbHNlL3RydWUpIGZ1bmt0aW9uaWVyZW4gdW52ZXJhZW5kZXJ0IHdlaXRlci4KICogR2V6ZWljaG5ldCB3ZXJkZW4gYXVzc2NobGllc3NsaWNoIHVlYmVyZ2ViZW5lIE1hc3NlIChvZCAvIHdhbGwgLyBsZW5ndGggLyBmbGFuZ2VPZCkgLQogKiBoaWVyIHdpcmQgbmljaHRzIGJlcmVjaG5ldCBvZGVyIGVyZ2Flbnp0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZnVuY3Rpb24gZHJhd0NsYW1wc3R1dHplbihvLCB2dywgdmgsIG1vZGUpIHsKICBjb25zdCBjbG9zZWQgPSBtb2RlID09PSB0cnVlIHx8IG1vZGUgPT09ICdjbG9zZWQnOwogIGNvbnN0IHNpbmdsZSA9IG1vZGUgPT09ICdzaW5nbGUnOwogIC8vIEJlaWRlIFZhcmlhbnRlbiB6ZWlnZW4gbnVyIGRlbiBsaW5rZW4gU3R1dHplbiAtPiBnbGVpY2hlIEF1c2RlaG51bmcsIGdsZWljaGUgQmVtYXNzdW5nLgogIGNvbnN0IGVpbnplbG4gPSBjbG9zZWQgfHwgc2luZ2xlOwogIGNvbnN0IFIgPSBvLm9kUiwgcmkgPSBvLmlublIsIEwgPSBvLmxlbmd0aDsKICBjb25zdCBmUiA9IG8uZmxhbmdlT2QgLyAyOwogIC8qIENsYW1wYnVuZCAoVEMtVGVpbCk6IEVJTkUgSG9laGUgamUgR3JvZXNzZSwgaWRlbnRpc2NoIGZ1ZXIgS0ssIEtMIHVuZCBkZW4KICAgKiBkaWNrd2FuZGlnZW4gVGFua3N0dXR6ZW4gLSBIZXJsZWl0dW5nLCBCZWxlZ2UgdW5kIGRpZSB3ZWl0ZXJoaW4gZ2VsdGVuZGUKICAgKiBEZWNrZWx1bmcgYW4gZGVyIFN0dXR6ZW5sYWVuZ2Ugc3RlaGVuIGJlaSBUQ19CVU5EIC8gdGNCdW5kSG9laGUgb2Jlbi4KICAgKiBBdWZ0ZWlsdW5nIDI6MSBpbiBCdW5kaG9laGUgdW5kIEZhc2UsIHdpZSBpbiBkZXIgVm9yZ2FlbmdlcmZhc3N1bmcuCiAgICogUmVpbiBzY2hlbWF0aXNjaCwgdHJhZWd0IEtFSU5FIE1hc3N6YWhsLiAqLwogIGNvbnN0IGJ1bmRIID0gdGNCdW5kSG9laGUoby5mbGFuZ2VPZCwgTCk7CiAgY29uc3QgdEZsID0gYnVuZEggKiAyIC8gMzsKICBjb25zdCBjaCA9IGJ1bmRIIC8gMzsKICAvKiBCYXVsYWVuZ2UgbDQgKG51ciBrb21wbGV0dGUgVmVyYmluZHVuZykuIElzdCBzaWUgYmVsZWd0LCBiZWtvbW10IGRlcgogICAqIERpY2h0dW5nc3NwYWx0IGdlbmF1IGRpZSBCcmVpdGUgbDQgLSAyIHggU3R1dHplbmxhZW5nZTogZGFubiBzdGltbXQgZGllCiAgICogZ2V6ZWljaG5ldGUgR2VzYW10bGFlbmdlIG1pdCBkZXIgYmVtYXNzdGVuIHVlYmVyZWluLCBzdGF0dCB3aWUgYmlzaGVyIGF1cwogICAqIGVpbmVtIHNjaGVtYXRpc2NoZW4gb2QqMCwxMi1TcGFsdCB6dSBlbnRzdGVoZW4gKGRlciBiZWkgRE4yMDAgYWxsZWluIDI0LDUgbW0KICAgKiBicmVpdCB3YXIgdW5kIGRpZSBHZXNhbXRsYWVuZ2UgdW0gfjM5ICUgdmVyZmVobHQgaGFldHRlKS4gKi8KICBjb25zdCBsNCA9IGVpbnplbG4gPyBudWxsIDogbDRJbmZvKG8pOwogIGNvbnN0IGdUID0gbDQgPyBNYXRoLm1heChsNC5zcGFsdCwgRElDSFRfU1BBTFRfTUlOKSA6IE1hdGgubWF4KDIuNSwgby5vZCAqIDAuMTIpOwogIGNvbnN0IGNsYW1wVCA9IE1hdGgubWF4KDUsIG8ub2QgKiAwLjE2KTsKICBjb25zdCBnT1IgPSBmUiAqIDAuODIsIGdJUiA9IHJpOwoKICAvLyBCMiAoQmVybmQsIDE2LjA3LjIwMjYpOiBCRUlERSBTdHV0emVuIGdsZWljaCBsYW5nIC0gYmVpIEtLIGJlaWRlIGt1cnosIGJlaSBLTAogIC8vIGJlaWRlIGxhbmcuIERpZSByZWNodGUgU2VpdGUgaXN0IGpldHp0IGV4YWt0IGRpZSBTcGllZ2VsdW5nIGRlciBsaW5rZW4gYW4gZGVyCiAgLy8gRGljaHR1bmc6IFNwaWVnZWx1bmcgbSh4KSA9IHhmMiArIChMIC0geCkuIEZydWVoZXIgd2FyIGRlciByZWNodGUgU3R1dHplbiBlaW4KICAvLyBlaWdlbmVyLCBhdXMgZGVyIEdlb21ldHJpZSBhYmdlbGVpdGV0ZXIgU3R1bW1lbCAobWF4KDE0LCBMKjAuMjgpKSB1bmQgZGFtaXQKICAvLyB1bmFiaGFlbmdpZyB2b24gZGVyIGdld2FlaGx0ZW4gU3R1dHplbmxhZW5nZSAtPiBNaXggYXVzIEtLIHVuZCBLTC4KICAvLyBMID0gby5sZW5ndGgga29tbXQgYXVzIGRlciBEYXRlbnRhYmVsbGUgKGFwcC5qczogcncua2sgYnp3LiBydy5rbCBqZSBuYWNoCiAgLy8gbGFlbmdlVmFyaWFudGUpIC0gaGllciB3aXJkIEtFSU4gTWFzcyBiZXJlY2huZXQgb2RlciBlcmZ1bmRlbiwgbnVyIGdlc3BpZWdlbHQuCiAgY29uc3QgeDAgPSAwLCB4YiA9IEwgLSB0RmwgLSBjaCwgeGYgPSBMLCB4ZyA9IHhmICsgZ1QsIHhmMiA9IHhnLCB4YjIgPSB4ZjIgKyB0RmwgKyBjaCwgeEVuZCA9IHhmMiArIEw7CiAgY29uc3QgeU1heCA9IE1hdGgubWF4KGZSICsgY2xhbXBUICsgNiwgUiArIDYpOwogIGNvbnN0IFAgPSBtYWtlUHJvaigwLCBlaW56ZWxuID8geGYgKyA2IDogeEVuZCwgLXlNYXgsIHlNYXgsIHZ3LCB2aCwgeyBsOjY2LCByOjk2LCB0OjQwLCBiOjc0IH0pOwogIGNvbnN0IGlkID0gdWlkKCk7IGNvbnN0IGN5ID0gUC5zeSgwKTsKCiAgY29uc3QgZmVycnVsZU91dGVyID0gKHgwLCB4YiwgeGYsIGZSKSA9PiBbCiAgICBQKHgwLC1SKSwgUCh4YiwtUiksIFAoeGIrY2gsLWZSKSwgUCh4ZiwtZlIpLCBQKHhmLC1yaSksCiAgICBQKHhmLHJpKSwgUCh4ZixmUiksIFAoeGIrY2gsZlIpLCBQKHhiLFIpLCBQKHgwLFIpCiAgXTsKICBjb25zdCBmZXJydWxlQm9yZSA9ICh4MCwgeGYpID0+IFtQKHgwLC1yaSksIFAoeGYsLXJpKSwgUCh4ZixyaSksIFAoeDAscmkpXTsKCiAgbGV0IHMgPSAnJzsKICBzICs9IGA8cmVjdCBjbGFzcz0id3otYm9yZSIgeD0iJHtmeChQLnN4KHgwKSl9IiB5PSIke2Z4KFAuc3koLXJpKSl9IiB3aWR0aD0iJHtmeCgoZWluemVsbiA\\\/IHhmIDogeEVuZCAtIHgwKSAqIFAuc2NhbGUpfSIgaGVpZ2h0PSIke2Z4KDIgKiByaSAqIFAuc2NhbGUpfSIvPmA7CiAgcyArPSBgPHBhdGggY2xhc3M9Ind6LWhhdGNoIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9IiR7cGF0aEZyb20oZmVycnVsZU91dGVyKHgwLCB4YiwgeGYsIGZSKSl9IFogJHtwYXRoRnJvbShmZXJydWxlQm9yZSh4MCwgeGYpKX0gWiIvPmA7CgogIGlmICghZWluemVsbikgewogICAgY29uc3QgZ1RvcCA9IFtQKHhmLC1nT1IpLCBQKHhnLC1nT1IpLCBQKHhnLC1nSVIpLCBQKHhmLC1nSVIpXTsKICAgIGNvbnN0IGdCb3QgPSBbUCh4ZixnSVIpLCBQKHhnLGdJUiksIFAoeGcsZ09SKSwgUCh4ZixnT1IpXTsKICAgIHMgKz0gYDxwYXRoIGNsYXNzPSJ3ei1nYXNrZXQiIGQ9IiR7cGF0aEZyb20oZ1RvcCl9IFoiLz5gOwogICAgcyArPSBgPHBhdGggY2xhc3M9Ind6LWdhc2tldCIgZD0iJHtwYXRoRnJvbShnQm90KX0gWiIvPmA7CiAgICBjb25zdCBnMk91dGVyID0gWwogICAgICBQKHhFbmQsLVIpLCBQKHhiMiwtUiksIFAoeGIyLWNoLC1mUiksIFAoeGYyLC1mUiksIFAoeGYyLC1yaSksCiAgICAgIFAoeGYyLHJpKSwgUCh4ZjIsZlIpLCBQKHhiMi1jaCxmUiksIFAoeGIyLFIpLCBQKHhFbmQsUikKICAgIF07CiAgICBjb25zdCBnMkJvcmUgPSBbUCh4ZjIsLXJpKSwgUCh4RW5kLC1yaSksIFAoeEVuZCxyaSksIFAoeGYyLHJpKV07CiAgICBzICs9IGA8cGF0aCBjbGFzcz0id3otaGF0Y2giIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iJHtwYXRoRnJvbShnMk91dGVyKX0gWiAke3BhdGhGcm9tKGcyQm9yZSl9IFoiLz5gOwogICAgY29uc3QgY2xhbXBUb3AgPSAoc2duKSA9PiB7CiAgICAgIGNvbnN0IHlGID0gc2duICogZlIsIHlDID0gc2duICogKGZSICsgY2xhbXBUKTsKICAgICAgY29uc3QgeGEgPSB4YiArIGNoIC0gMSwgeGUgPSB4YjIgLSBjaCArIDE7CiAgICAgIHJldHVybiBbIFAoeGEseUYpLCBQKHhmLHlGKSwgUCh4Zyx5RiksIFAoeGUseUYpLCBQKHhlKzIsIHlDKjAuNjIgKyBzZ24qMiksIFAoeGUseUMpLCBQKHhhLHlDKSwgUCh4YS0yLCB5QyowLjYyICsgc2duKjIpIF07CiAgICB9OwogICAgcyArPSBgPHBhdGggY2xhc3M9Ind6LWNsYW1wIiBkPSIke3BhdGhGcm9tKGNsYW1wVG9wKC0xKSl9IFoiLz5gOwogICAgcyArPSBgPHBhdGggY2xhc3M9Ind6LWNsYW1wIiBkPSIke3BhdGhGcm9tKGNsYW1wVG9wKDEpKX0gWiIvPmA7CiAgfSBlbHNlIGlmIChjbG9zZWQpIHsKICAgIC8vIE51ciBkZXIgQmxpbmRkZWNrZWwgaGF0IGVpbmUgZ2VzY2hsb3NzZW5lIFN0aXJuZmxhZWNoZS4gRGVyIGVpbnplbG5lIFN0dXR6ZW4KICAgIC8vICgnc2luZ2xlJykgaXN0IG9mZmVuIC0+IGhpZXIgYmV3dXNzdCBLRUlOIERlY2tlbC4KICAgIHMgKz0gYDxyZWN0IGNsYXNzPSJ3ei1oYXRjaCIgeD0iJHtmeChQLnN4KHhmIC0gby53YWxsICogMS40KSl9IiB5PSIke2Z4KFAuc3koLXJpKSl9IiB3aWR0aD0iJHtmeChvLndhbGwgKiAxLjQgKiBQLnNjYWxlKX0iIGhlaWdodD0iJHtmeCgyICogcmkgKiBQLnNjYWxlKX0iLz5gOwogIH0KCiAgcyArPSBgPGxpbmUgY2xhc3M9Ind6LWNlbnRlciIgeDE9IiR7ZngoUC5zeCh4MCkgLSAxMCl9IiB5MT0iJHtmeChjeSl9IiB4Mj0iJHtmeChQLnN4KGVpbnplbG4gPyB4ZiA6IHhFbmQpICsgMTApfSIgeTI9IiR7ZngoY3kpfSIvPmA7CgogIGNvbnN0IGRpbVkgPSBjeSArIFIgKiBQLnNjYWxlICsgMzAsIGRpbVkyID0gZGltWSArIDIyOwogIC8vIExhZW5nZW5tYXNzOiBQcmFlZml4IGF1cyBvLmxlbmd0aExhYmVsICgnTCcgPSBTdHV0emVubGFlbmdlIEtLL0tMLCAnaCcgPSBIb2VoZSBiZWltIFRDRCkuCiAgcyArPSBkaW1IKGlkLCBQLnN4KHgwKSwgUC5zeCh4ZiksIGRpbVksIG8ubGVuZ3RoTGFiZWwgKyAnICcgKyBkZShvLmxlbmd0aCksIHsgZXh0OiBQLnN5KFIpIH0pOwogIC8qIEJhdWxhZW5nZSBkZXIga29tcGxldHRlbiBWZXJiaW5kdW5nOiBzZWl0IDI4LjA3LjIwMjYgZGFzIGVjaHRlIE1hc3MgbDQgYXVzCiAgICogRElOIDMyNjc2IChkYXRhLmpzKS4gQmVpbSBlaW56ZWxuZW4gU3R1dHplbiBJU1QgZGFzIExhZW5nZW5tYXNzIG9iZW4gc2Nob24gZGFzCiAgICogdm9sbHN0YWVuZGlnZSBNYXNzIC0+IGtlaW4gendlaXRlcyBNYXNzIGFuaGFlbmdlbi4gT2huZSBCZWxlZyAob2RlciBiZWkKICAgKiB3aWRlcnNwcnVlY2hsaWNoZXIgUXVlbGxlLCBzaWVoZSBsNEluZm8pIGJsZWlidCBkZXIgYmlzaGVyaWdlIFBsYXR6aGFsdGVyIC0KICAgKiBlcyB3aXJkIEtFSU5FIEJhdWxhZW5nZSBnZXNjaGFldHp0LiAqLwogIGlmICghZWluemVsbikgcyArPSBkaW1IKGlkLCBQLnN4KHgwKSwgUC5zeCh4RW5kKSwgZGltWTIsCiAgICBsNCA\\\/ICdsNCAnICsgZGUobDQud2VydCkgOiAnQmF1bMOkbmdlIGZvbGd0JywgeyBleHQ6IDAgfSk7CiAgcyArPSBkaW1WKGlkLCBQLnN4KHgwKSAtIDM0LCBQLnN5KC1SKSwgUC5zeShSKSwgJ0FEIOKMgCAnICsgZGUoby5vZCksIHsgZXh0OiBQLnN4KHgwKSB9KTsKICAvKiBCZXJuZCAyNy4wNy4yMDI2IChXb3JkLCBBYnNjaG5pdHQgMyk6IEJpc2hlciBzdGFuZGVuIG51ciBBdXNzZW5kdXJjaG1lc3NlciB1bmQKICAgKiBXYW5kc3RhZXJrZSBpbiBkZXIgWmVpY2hudW5nLiBEZXIgSW5uZW5kdXJjaG1lc3NlciBrb21tdCBkYXp1IC0gYmVyZWNobmV0IG5hY2gKICAgKiBCZXJuZHMgRm9ybWVsIElEID0gQUQgLSAoMiB4IFdhbmQpLCBhbHNvIGV4YWt0IGRlciBnZXplaWNobmV0ZSBCb2hydW5ncy3ijIAgKDIqcmkpLgogICAqIEVyIHN0ZWh0IGF1ZiBkZXIgVEMtU2VpdGUsIGRlciBUQy3ijIAgcnVlY2t0IGRhZnVlciB3ZWl0ZXIgbmFjaCByZWNodHMuIEJlaSBkZXIKICAgKiBrb21wbGV0dGVuIFZlcmJpbmR1bmcgc2l0emVuIGJlaWRlIE1hc3NlIGFtIHJlY2h0ZW4gRW5kZS4gKi8KICBjb25zdCB4UmlnaHQgPSBlaW56ZWxuID8geGYgOiB4RW5kOwogIHMgKz0gZGltVlJvdChpZCwgUC5zeCh4UmlnaHQpICsgMzIsIFAuc3koLXJpKSwgUC5zeShyaSksICdJRCDijIAgJyArIGRlKDIgKiByaSksIHsgZXh0OiBQLnN4KHhSaWdodCkgfSk7CiAgcyArPSBkaW1WUm90KGlkLCBQLnN4KHhSaWdodCkgKyA2MiwgUC5zeSgtZlIpLCBQLnN5KGZSKSwgJ1RDIOKMgCAnICsgZGUoZlIgKiAyKSwgeyBleHQ6IFAuc3goeFJpZ2h0KSB9KTsKICBzICs9IGxlYWRlcihpZCwgUC5zeChvLmxlbmd0aCAqIDAuMTgpLCBQLnN5KC1SKSwgUC5zeChvLmxlbmd0aCAqIDAuMTgpIC0gMzAsIFAuc3koLVIpIC0gMjQsICdzICcgKyBkZShvLndhbGwpKTsKCiAgcyArPSBgPHJlY3QgY2xhc3M9Ind6LWJhZGdlLWJnIiB4PSIke2Z4KFAuc3goKHgwICsgeGYpIC8gMikgLSA2Mil9IiB5PSIxNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIyMCIgcng9IjEwIi8+CiAgICAgICAgPHRleHQgY2xhc3M9Ind6LWJhZGdlLXR4IiB4PSIke2Z4KFAuc3goKHgwICsgeGYpIC8gMikpfSIgeT0iMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPkROICR7by5kbn0gwrcgQ2xhbXAgJHtvLmNsYW1wU2l6ZX08L3RleHQ+YDsKICBjb25zdCBsZWdlbmQgPSBsZWdlbmRCb3goaWQsIHZ3LCB2aCwgbywgY2xvc2VkID8gJ0zDpG5nc3NjaG5pdHQgKEJsaW5kZGVja2VsKScKICAgIDogc2luZ2xlID8gJ0zDpG5nc3NjaG5pdHQgKGVpbnplbG5lciBTdHV0emVuKScgOiAnTMOkbmdzc2Nobml0dCAoQ2xhbXAtVmVyYmluZHVuZyknKTsKICByZXR1cm4gd3JhcFN2ZyhpZCwgdncsIHZoLCBvLmdDb2wsIHMsIGxlZ2VuZCk7Cn0KCi8qIC0tIDIpIEJvZ2VuIDkwLzQ1IChnZXNjaHdlaXNzdCwgRElOIDExODY1KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gZHJhd0JvZ2VuKG8sIHZ3LCB2aCwgZGVnKSB7CiAgY29uc3QgUiA9IG8ub2RSLCByaSA9IG8uaW5uUiwgUmMgPSBvLmJlbmRSYWRpdXMsIEwgPSBvLmxlbmd0aDsKICBjb25zdCBhbmcgPSBkZWcgKiBNYXRoLlBJIC8gMTgwOwogIGNvbnN0IEEgPSAtTWF0aC5QSSAvIDIsIEIgPSBBICsgYW5nLCBDID0gWzAsIDBdOwogIGNvbnN0IG9uQyA9IChyLCBhKSA9PiBbQ1swXSArIHIgKiBNYXRoLmNvcyhhKSwgQ1sxXSArIHIgKiBNYXRoLnNpbihhKV07CiAgY29uc3QgdEEgPSBbLU1hdGguc2luKEEpLCBNYXRoLmNvcyhBKV0sIHRCID0gWy1NYXRoLnNpbihCKSwgTWF0aC5jb3MoQildOwogIGNvbnN0IGluVGlwID0gciA9PiBbb25DKHIsIEEpWzBdIC0gdEFbMF0gKiBMLCBvbkMociwgQSlbMV0gLSB0QVsxXSAqIExdOwogIGNvbnN0IG91dFRpcCA9IHIgPT4gW29uQyhyLCBCKVswXSArIHRCWzBdICogTCwgb25DKHIsIEIpWzFdICsgdEJbMV0gKiBMXTsKICBjb25zdCBzZWcgPSBkZWcgPiA2MCA\\\/IDIwIDogMTQ7CiAgY29uc3QgbWlkID0gKEEgKyBCKSAvIDI7CiAgLyogQmVybmQgMjcuMDcuMjAyNjogQmVpbSA5MC1HcmFkLUJvZ2VuIHNhc3MgZGllIE1hc3N6YWhsICJSIiBhdWYgaGFsYmVyIFN0cmVja2UKICAgKiB6d2lzY2hlbiBCb2dlbm1pdHRlbHB1bmt0IHVuZCBCb2dlbm1pdHRlIC0gYWxzbyBnZW5hdSBkb3J0LCB3byBkaWUgTWFzc2tldHRlCiAgICogTDMvTDEgbGFldWZ0LiBBYiBETjI1IHVlYmVyZGVja3RlbiBzaWNoIGRpZSBiZWlkZW4gVGV4dGthZXN0ZW4uIERpZSBaYWhsIHN0ZWh0CiAgICogamV0enQgQVVTU0VSSEFMQiBkZXIgQm9nZW5rb250dXIgYW0gRW5kZSBlaW5lcyBIaW53ZWlzc3RyaWNoczsgZGllIE1hc3NsaW5pZQogICAqIHplaWd0IHdlaXRlcmhpbiB2b20gTWl0dGVscHVua3QgYXVmIGRpZSBCb2dlbm1pdHRlbGxpbmllLiBEZXIgNDUtR3JhZC1Cb2dlbgogICAqIChiaXNoZXIgdW5hdWZmYWVsbGlnKSBmb2xndCBkZXJzZWxiZW4gUmVnZWwgdW5kIGJsZWlidCBkYWR1cmNoIGtvbGxpc2lvbnNmcmVpLiAqLwogIGNvbnN0IHJMYWJlbFB0ID0gb25DKFJjICsgUiArIE1hdGgubWF4KDksIFIgKiAwLjg1KSwgbWlkKTsKICBjb25zdCBvdXRlciA9IFtdLmNvbmNhdChbaW5UaXAoUmMgKyBSKV0pLmNvbmNhdChhcmNQdHMoMCwwLFJjK1IsQSxCLHNlZykpLmNvbmNhdChbb3V0VGlwKFJjK1IpXSkuY29uY2F0KFtvdXRUaXAoUmMtUildKS5jb25jYXQoYXJjUHRzKDAsMCxSYy1SLEIsQSxzZWcpKS5jb25jYXQoW2luVGlwKFJjLVIpXSk7CiAgY29uc3QgYm9yZSA9IFtdLmNvbmNhdChbaW5UaXAoUmMgKyByaSldKS5jb25jYXQoYXJjUHRzKDAsMCxSYytyaSxBLEIsc2VnKSkuY29uY2F0KFtvdXRUaXAoUmMrcmkpXSkuY29uY2F0KFtvdXRUaXAoUmMtcmkpXSkuY29uY2F0KGFyY1B0cygwLDAsUmMtcmksQixBLHNlZykpLmNvbmNhdChbaW5UaXAoUmMtcmkpXSk7CiAgY29uc3QgYWxsWCA9IG91dGVyLm1hcChwID0+IHBbMF0pLmNvbmNhdChbaW5UaXAoUmMpWzBdLCBvdXRUaXAoUmMpWzBdLCByTGFiZWxQdFswXV0pOwogIGNvbnN0IGFsbFkgPSBvdXRlci5tYXAocCA9PiBwWzFdKS5jb25jYXQoW2luVGlwKFJjKVsxXSwgb3V0VGlwKFJjKVsxXSwgckxhYmVsUHRbMV1dKTsKICBjb25zdCBQID0gbWFrZVByb2ooTWF0aC5taW4oLi4uYWxsWCktNiwgTWF0aC5tYXgoLi4uYWxsWCkrNiwgTWF0aC5taW4oLi4uYWxsWSktNiwgTWF0aC5tYXgoLi4uYWxsWSkrNiwgdncsIHZoLCB7IGw6NTgsIHI6NTgsIHQ6NTAsIGI6NjIgfSk7CiAgY29uc3QgaWQgPSB1aWQoKTsgY29uc3QgcHIgPSBhID0+IGEubWFwKHAgPT4gUChwWzBdLCBwWzFdKSk7CgogIGxldCBzID0gJyc7CiAgcyArPSBgPHBhdGggY2xhc3M9Ind6LWJvcmUiIGQ9IiR7cGF0aEZyb20ocHIoYm9yZSkpfSBaIi8+YDsKICBzICs9IGA8cGF0aCBjbGFzcz0id3otaGF0Y2giIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iJHtwYXRoRnJvbShwcihvdXRlcikpfSBaICR7cGF0aEZyb20ocHIoYm9yZSkpfSBaIi8+YDsKICBjb25zdCBjbEFyYyA9IGFyY1B0cygwLDAsUmMsQSxCLHNlZykubWFwKHAgPT4gUChwWzBdLCBwWzFdKSk7CiAgcyArPSBgPHBvbHlsaW5lIGNsYXNzPSJ3ei1jZW50ZXIiIHBvaW50cz0iJHtwb2x5KFtQKC4uLmluVGlwKFJjKSksIFAoLi4ub25DKFJjLCBBKSldKX0iLz5gOwogIHMgKz0gYDxwb2x5bGluZSBjbGFzcz0id3otY2VudGVyIiBwb2ludHM9IiR7cG9seShjbEFyYyl9Ii8+YDsKICBzICs9IGA8cG9seWxpbmUgY2xhc3M9Ind6LWNlbnRlciIgcG9pbnRzPSIke3BvbHkoW1AoLi4ub25DKFJjLCBCKSksIFAoLi4ub3V0VGlwKFJjKSldKX0iLz5gOwogIGNvbnN0IGNDID0gUCgwLCAwKSwgY01pZCA9IFAoLi4ub25DKFJjLCBtaWQpKSwgY0xibCA9IFAoLi4uckxhYmVsUHQpOwogIGNvbnN0IHJUeHQgPSAnUiAnICsgKG8ucHJvdkRpbXMgPyAnZm9sZ3QnIDogZGUoUmMpKTsKICBjb25zdCByQm94VyA9IG1lYXN1cmUoclR4dCkgKiAyOwogIHMgKz0gYDxsaW5lIGNsYXNzPSJ3ei1kaW0iIHgxPSIke2Z4KGNDWzBdKX0iIHkxPSIke2Z4KGNDWzFdKX0iIHgyPSIke2Z4KGNNaWRbMF0pfSIgeTI9IiR7ZngoY01pZFsxXSl9IiBtYXJrZXItZW5kPSJ1cmwoIyR7aWR9LWFyKSIvPgogICAgICAgIDxsaW5lIGNsYXNzPSJ3ei1sZWFkIiB4MT0iJHtmeChjTWlkWzBdKX0iIHkxPSIke2Z4KGNNaWRbMV0pfSIgeDI9IiR7ZngoY0xibFswXSl9IiB5Mj0iJHtmeChjTGJsWzFdKX0iLz4KICAgICAgICA8cmVjdCBjbGFzcz0id3otYmFkZ2UtYmciIHg9IiR7ZngoY0xibFswXSAtIHJCb3hXIC8gMil9IiB5PSIke2Z4KGNMYmxbMV0gLSA5KX0iIHdpZHRoPSIke2Z4KHJCb3hXKX0iIGhlaWdodD0iMTYiIHJ4PSIzIiBvcGFjaXR5PSIwLjkyIi8+CiAgICAgICAgPHRleHQgY2xhc3M9Ind6LWRpbXR4dCIgeD0iJHtmeChjTGJsWzBdKX0iIHk9IiR7ZngoY0xibFsxXSArIDEpfSI+JHtyVHh0fTwvdGV4dD5gOwogIGNvbnN0IGV4SW4gPSBpblRpcChSYyk7CiAgcyArPSBkaW1WKGlkLCBQLnN4KGV4SW5bMF0pIC0gOCwgUC5zeShvbkMoUmMsQSlbMV0pIC0gUipQLnNjYWxlLCBQLnN5KG9uQyhSYyxBKVsxXSkgKyBSKlAuc2NhbGUsICfijIAgJyArIGRlKG8ub2QpLCB7IGV4dDogUC5zeChleEluWzBdKSB9KTsKICBzICs9IGRpbUgoaWQsIFAuc3goaW5UaXAoUmMpWzBdKSwgUC5zeChvbkMoUmMsQSlbMF0pLCBQLnN5KG9uQyhSYyxBKVsxXSkgKyBSKlAuc2NhbGUgKyAyNCwgKG8ubGVuZ3RoTGFiZWwgfHwgJ0wzJykgKyAnICcgKyAoby5wcm92RGltcyA\\\/ICdmb2xndCcgOiBkZShvLmxlbmd0aCkpLCB7IGV4dDogUC5zeShvbkMoUmMsQSlbMV0gKyBSKSB9KTsKICBpZiAoby5vdmVyYWxsTGVuZ3RoICE9IG51bGwgJiYgby5vdmVyYWxsTGVuZ3RoTGFiZWwpIHsKICAgIGNvbnN0IHgxID0gUC5zeChpblRpcChSYylbMF0pLCB4MiA9IHgxICsgby5vdmVyYWxsTGVuZ3RoICogUC5zY2FsZTsKICAgIHMgKz0gZGltSChpZCwgeDEsIHgyLCBQLnN5KG9uQyhSYyxBKVsxXSkgKyBSKlAuc2NhbGUgKyA0OCwgby5vdmVyYWxsTGVuZ3RoTGFiZWwgKyAnICcgKyBkZShvLm92ZXJhbGxMZW5ndGgpLCB7IGV4dDogUC5zeShvbkMoUmMsQSlbMV0gKyBSKSB9KTsKICB9CiAgcyArPSBgPHJlY3QgY2xhc3M9Ind6LWJhZGdlLWJnIiB4PSIke2Z4KHZ3LzItNzIpfSIgeT0iMTQiIHdpZHRoPSIxNDQiIGhlaWdodD0iMjAiIHJ4PSIxMCIvPgogICAgICAgIDx0ZXh0IGNsYXNzPSJ3ei1iYWRnZS10eCIgeD0iJHtmeCh2dy8yKX0iIHk9IjI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5Cb2dlbiAke2RlZ33CsCDCtyBETiAke28uZG59IMK3IERJTiAxMTg2NTwvdGV4dD5gOwogIHJldHVybiB3cmFwU3ZnKGlkLCB2dywgdmgsIG8uZ0NvbCwgcywgbGVnZW5kQm94KGlkLCB2dywgdmgsIG8sICdMw6RuZ3NzY2huaXR0IChCb2dlbiAnICsgZGVnICsgJ8KwKScpKTsKfQoKLyogLS0gMykgVC1TdHVlY2sgKGdsZWljaCAvIHJlZHV6aWVydCwgRElOIDExODY1KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBkcmF3VHN0dWVjayhvLCB2dywgdmgpIHsKICBjb25zdCBSID0gby5vZFIsIHJpID0gby5pbm5SLCBMID0gby5sZW5ndGg7CiAgY29uc3QgYlIgPSBvLmJyYW5jaE9kIC8gMiwgYnJpID0gTWF0aC5tYXgoMC41LCBiUiAtIG8ud2FsbCk7CiAgLyogRGllIEFiZ2FuZ3NsYWVuZ2UgaXN0IGluIEJFSURFTiBCYXVmb3JtZW4gZWluIGVjaHRlcyBNYXNzIGF1cyBkZXIgS3VuZGVudGFiZWxsZQogICAqIChGb3JtIFQ6IFNwYWx0ZSBMMiwgRm9ybSBUSzogU3BhbHRlIEwxIC0gQmVybmQgMjcuMDcuMjAyNikuIG8uYnJhbmNoTGVuZ3RoIG1pc3N0CiAgICogYWIgTGF1Zi1NaXR0ZWxsaW5pZTsgZ2V6ZWljaG5ldCB3aXJkIGRpZSBIb2VoZSB1ZWJlciBkZXIgTGF1ZmtvbnR1ci4gRGllIGZydWVoZXIKICAgKiBmdWVyIFRLIHZlcndlbmRldGUgU2NoYWV0emxhZW5nZSAob2QqMCw3IGJ6dy4gTCowLDIyKSBlbnRmYWVsbHQgZGFtaXQuICovCiAgY29uc3QgYkwgPSBvLmJyYW5jaExlbmd0aCAhPSBudWxsID8gTWF0aC5tYXgoMSwgby5icmFuY2hMZW5ndGggLSBSKSA6IE1hdGgubWF4KG8ub2QsIEwgKiAwLjQyKTsKICBjb25zdCB4YyA9IEwgLyAyOwogIGNvbnN0IG91dGVyID0gWyBbMCwtUl0sIFt4Yy1iUiwtUl0sIFt4Yy1iUiwtUi1iTF0sIFt4YytiUiwtUi1iTF0sIFt4YytiUiwtUl0sIFtMLC1SXSwgW0wsUl0sIFswLFJdIF07CiAgY29uc3QgYm9yZSAgPSBbIFswLC1yaV0sIFt4Yy1icmksLXJpXSwgW3hjLWJyaSwtUi1iTF0sIFt4YyticmksLVItYkxdLCBbeGMrYnJpLC1yaV0sIFtMLC1yaV0sIFtMLHJpXSwgWzAscmldIF07CiAgY29uc3QgUCA9IG1ha2VQcm9qKDAsIEwsIC1SIC0gYkwgLSA2LCBSICsgNiwgdncsIHZoLCB7IGw6NTgsIHI6NjQsIHQ6ODAsIGI6NjYgfSk7CiAgY29uc3QgaWQgPSB1aWQoKTsgY29uc3QgcHIgPSBhID0+IGEubWFwKHAgPT4gUChwWzBdLCBwWzFdKSk7CiAgbGV0IHMgPSAnJzsKICBzICs9IGA8cGF0aCBjbGFzcz0id3otYm9yZSIgZD0iJHtwYXRoRnJvbShwcihib3JlKSl9IFoiLz5gOwogIHMgKz0gYDxwYXRoIGNsYXNzPSJ3ei1oYXRjaCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSIke3BhdGhGcm9tKHByKG91dGVyKSl9IFogJHtwYXRoRnJvbShwcihib3JlKSl9IFoiLz5gOwogIHMgKz0gYDxsaW5lIGNsYXNzPSJ3ei1jZW50ZXIiIHgxPSIke2Z4KFAuc3goMCktMTApfSIgeTE9IiR7ZngoUC5zeSgwKSl9IiB4Mj0iJHtmeChQLnN4KEwpKzEwKX0iIHkyPSIke2Z4KFAuc3koMCkpfSIvPmA7CiAgcyArPSBgPGxpbmUgY2xhc3M9Ind6LWNlbnRlciIgeDE9IiR7ZngoUC5zeCh4YykpfSIgeTE9IiR7ZngoUC5zeSgtUi1iTCktMTApfSIgeDI9IiR7ZngoUC5zeCh4YykpfSIgeTI9IiR7ZngoUC5zeShSKSl9Ii8+YDsKICAvLyBCZXJuZCAyNy4wNy4yMDI2OiBEYXMgTGF1Zm1hc3MgaGVpc3N0IG51ciBub2NoICJMIiAodm9yaGVyICJMYXVmIikuCiAgcyArPSBkaW1IKGlkLCBQLnN4KDApLCBQLnN4KEwpLCBQLnN5KFIpICsgMjgsICdMICcgKyAoby5wcm92RGltcyA\\\/ICdmb2xndCcgOiBkZShMKSksIHsgZXh0OiBQLnN5KFIpIH0pOwogIC8qIEJlcm5kIDI4LjA3LjIwMjY6IERlciBBYmdhbmcgc3RhbW10IGJlaSBGb3JtIFRLIGF1cyBTcGFsdGUgTDEsIHd1cmRlIGFiZXIgYXVjaAogICAqIGRvcnQgYWxzICJMMiIgYmVzY2hyaWZ0ZXQgKGJlaSBETjE1IFRLIHN0YW5kICI+TDIgMTE8Iiwgd2FlaHJlbmQgZGllIFdlaXNzLVRhYmVsbGUKICAgKiBpbiBTcGFsdGUgTDIgZGVuIFdlcnQgMzUgZnVlaHJ0KS4gRGFzIEt1ZXJ6ZWwgZm9sZ3QgamV0enQgZGVyIEJhdWZvcm0gLSBGb3JtIFQKICAgKiBiZW1hc3N0IEwyLCBGb3JtIFRLIGJlbWFzc3QgTDEuIERlciBXZXJ0IHNlbGJzdCBibGVpYnQgdW52ZXJhZW5kZXJ0OyBlciBrb21tdAogICAqIHdlaXRlcmhpbiBhdXMgYWJnYW5nTDIoKSBpbiBhcHAuanMgKEZvcm0gVDogTDIsIEZvcm0gVEs6IEwxKS4gKi8KICBjb25zdCBhYmdhbmdLdWVyemVsID0gby50Zm9ybSA9PT0gJ1RLJyA\\\/ICdMMScgOiAnTDInOwogIGlmIChvLmJyYW5jaExlbmd0aCAhPSBudWxsKSBzICs9IGRpbVYoaWQsIFAuc3goeGMgKyBiUikgKyAzNCwgUC5zeSgtby5icmFuY2hMZW5ndGgpLCBQLnN5KDApLCBhYmdhbmdLdWVyemVsICsgJyAnICsgZGUoby5icmFuY2hMZW5ndGgpLCB7IGV4dDogUC5zeCh4YyArIGJSKSB9KTsKICBzICs9IGRpbVYoaWQsIFAuc3goMCkgLSAzMCwgUC5zeSgtUiksIFAuc3koUiksICfijIAgJyArIGRlKG8ub2QpLCB7IGV4dDogUC5zeCgwKSB9KTsKICAvKiBCZXJuZCAyNy4wNy4yMDI2OiBEZXIgQWJnYW5ncy3ijIAgc3RhbmQgYWxzIFNFTktSRUNIVEVTIE1hc3MgcmVjaHRzIG5lYmVuIGRlbQogICAqIEFiZ2FuZyAtIGRvcnQgbWlzc3QgZGllIE1hc3NsaW5pZSBhYmVyIGRlc3NlbiBMYWVuZ2UsIG5pY2h0IHNlaW5lbiBEdXJjaG1lc3Nlci4KICAgKiBFciBnZWhvZXJ0IGFscyBRdWVybWFzcyB1ZWJlciBkZW4gQWJnYW5nIChGb3JtIFQgd2llIEZvcm0gVCByZWR1emllcnQpLiAqLwogIHMgKz0gZGltSChpZCwgUC5zeCh4YyAtIGJSKSwgUC5zeCh4YyArIGJSKSwgUC5zeSgtUiAtIGJMKSAtIDI2LCAn4oyAICcgKyBkZShvLmJyYW5jaE9kKSwgeyBleHQ6IFAuc3koLVIgLSBiTCkgfSk7CiAgLy8gUjMtMy9SMy00OiBCYXVmb3JtIChGb3JtIFQgLyBGb3JtIFRLKSBtaXQgaW0gQmFkZ2UuCiAgcyArPSBgPHJlY3QgY2xhc3M9Ind6LWJhZGdlLWJnIiB4PSIke2Z4KHZ3LzItMTE1KX0iIHk9IjE0IiB3aWR0aD0iMjMwIiBoZWlnaHQ9IjIwIiByeD0iMTAiLz4KICAgICAgICA8dGV4dCBjbGFzcz0id3otYmFkZ2UtdHgiIHg9IiR7ZngodncvMil9IiB5PSIyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+VC1TdMO8Y2sgJHtvLmJyYW5jaE9kID09PSBvLm9kID8gJ2dsZWljaCcgOiAncmVkdXppZXJ0J30gwrcgRm9ybSAke28udGZvcm19IMK3IEROICR7by5kbn08L3RleHQ+YDsKICByZXR1cm4gd3JhcFN2ZyhpZCwgdncsIHZoLCBvLmdDb2wsIHMsIGxlZ2VuZEJveChpZCwgdncsIHZoLCBvLCAnTMOkbmdzc2Nobml0dCAoVC1TdMO8Y2spJykpOwp9CgovKiAtLSA0KSBSZWR1emllcnVuZyAoa29uemVudHJpc2NoIC8gZXh6ZW50cmlzY2gsIERJTiAxMTg2NSkgLS0tLS0tLS0tLS0tLS0tICovCmZ1bmN0aW9uIGRyYXdSZWR1emllcnVuZyhvLCB2dywgdmgpIHsKICBjb25zdCBSID0gby5vZFIsIHJpID0gby5pbm5SLCBMID0gby5sZW5ndGg7CiAgY29uc3QgUjIgPSBvLm9kMiAvIDIsIHJpMiA9IE1hdGgubWF4KDAuNSwgUjIgLSBvLndhbGwyKTsKICBjb25zdCBlY2MgPSAhIW8uZWNjZW50cmljLCBvZmYgPSBlY2MgPyAoUiAtIFIyKSA6IDA7CiAgY29uc3Qgb3V0ZXIgPSBbIFswLC1SXSwgW0wsLVIyK29mZl0sIFtMLFIyK29mZl0sIFswLFJdIF07CiAgY29uc3QgYm9yZSAgPSBbIFswLC1yaV0sIFtMLC1yaTIrb2ZmXSwgW0wscmkyK29mZl0sIFswLHJpXSBdOwogIGNvbnN0IFAgPSBtYWtlUHJvaigwLCBMLCAtUiAtIDYsIFIgKyA2LCB2dywgdmgsIHsgbDo1OCwgcjo2NCwgdDo0NiwgYjo2MiB9KTsKICBjb25zdCBpZCA9IHVpZCgpOyBjb25zdCBwciA9IGEgPT4gYS5tYXAocCA9PiBQKHBbMF0sIHBbMV0pKTsKICBsZXQgcyA9ICcnOwogIHMgKz0gYDxwYXRoIGNsYXNzPSJ3ei1ib3JlIiBkPSIke3BhdGhGcm9tKHByKGJvcmUpKX0gWiIvPmA7CiAgcyArPSBgPHBhdGggY2xhc3M9Ind6LWhhdGNoIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9IiR7cGF0aEZyb20ocHIob3V0ZXIpKX0gWiAke3BhdGhGcm9tKHByKGJvcmUpKX0gWiIvPmA7CiAgcyArPSBgPGxpbmUgY2xhc3M9Ind6LWNlbnRlciIgeDE9IiR7ZngoUC5zeCgwKS0xMCl9IiB5MT0iJHtmeChQLnN5KDApKX0iIHgyPSIke2Z4KFAuc3goTCkrMTApfSIgeTI9IiR7ZngoUC5zeShlY2MgPyBvZmYgOiAwKSl9Ii8+YDsKICBzICs9IGRpbUgoaWQsIFAuc3goMCksIFAuc3goTCksIFAuc3koUikgKyAyNiwgJ0wgJyArIChvLnByb3ZEaW1zID8gJ2ZvbGd0JyA6IGRlKEwpKSwgeyBleHQ6IFAuc3koUikgfSk7CiAgcyArPSBkaW1WKGlkLCBQLnN4KDApIC0gMzAsIFAuc3koLVIpLCBQLnN5KFIpLCAn4oyAICcgKyBkZShvLm9kKSwgeyBleHQ6IFAuc3goMCkgfSk7CiAgcyArPSBkaW1WKGlkLCBQLnN4KEwpICsgMzQsIFAuc3koLVIyICsgb2ZmKSwgUC5zeShSMiArIG9mZiksICfijIAgJyArIChvLm9kMlByb3YgPyBkZShvLm9kMikgOiAnZm9sZ3QnKSwgeyBleHQ6IFAuc3goTCkgfSk7CiAgLy8gUjMtMjogQmF1Zm9ybS1Lw7xyemVsIEZvcm0gUksgKGtvbnplbnRyaXNjaCkgLyBGb3JtIFJFIChleHplbnRyaXNjaCkgaW4gZGVyIFplaWNobnVuZy4KICBjb25zdCByZWRGb3JtID0gZWNjID8gJ2V4emVudHJpc2NoIChGb3JtIFJFKScgOiAna29uemVudHJpc2NoIChGb3JtIFJLKSc7CiAgcyArPSBgPHJlY3QgY2xhc3M9Ind6LWJhZGdlLWJnIiB4PSIke2Z4KHZ3LzItMTIwKX0iIHk9IjE0IiB3aWR0aD0iMjQwIiBoZWlnaHQ9IjIwIiByeD0iMTAiLz4KICAgICAgICA8dGV4dCBjbGFzcz0id3otYmFkZ2UtdHgiIHg9IiR7ZngodncvMil9IiB5PSIyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+UmVkdXppZXJ1bmcgJHtyZWRGb3JtfSDCtyAke2RlKG8ub2QpfeKGkiR7by5vZDJQcm92ID8gZGUoby5vZDIpIDogJ2ZvbGd0J308L3RleHQ+YDsKICByZXR1cm4gd3JhcFN2ZyhpZCwgdncsIHZoLCBvLmdDb2wsIHMsIGxlZ2VuZEJveChpZCwgdncsIHZoLCBvLCAnTMOkbmdzc2Nobml0dCAoUmVkdXppZXJ1bmcpJykpOwp9CgovKiAtLSA1KSBLbGFtbWVyIC8gU3Bhbm5yaW5nIChGcm9udGFuc2ljaHQsIERJTiAzMjY3NikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFJ1bmRlIDcgKFctMDU5KTogZWNodGUgTWFzc3plaWNobnVuZyBuYWNoIGRlbiBnZWxpZWZlcnRlbiBXZWlzcy1Wb3JsYWdlbgogKiAoTWFzc3plaWNobnVuZyBLTDEvS0xIL0tMTEkuc3ZnLCAyMi4wNy4yMDI2KS4gQmVtYXNzdCB3ZXJkZW4gbnVyIGJlbGVndGUKICogV2VydGU6IEEgPSBLbGFtbWVyLUF1c3Nlbi3DmCAoa2xhbW1lckEgYXVzICJNYXNzZSBLbGVtbWVuLCBCbGluZGRlY2tlbC54bHN4IiksCiAqIEtsZW1tLeKMgCA9IEZsYW5zY2gtw5ggKGZsYW5nZU9kKS4gRmVobHQgQSwgYmxlaWJ0IGRlciBQbGF0emhhbHRlci4KICogS2xhbW1lcnR5cGVuIChiZWxlZ3QsIEJlcm5kIFIyLTQpOiBLTDEgPSAxIEdlbGVuay8xIFBpbiwgS0xMSSA9IDEgR2VsZW5rLwogKiAyIFBpbnMsIEtMSCA9IEhvY2hkcnVja2tsYW1tZXIsIHp3ZWkgSGFsYnNjaGFsZW4gbWl0IDIgR2VsZW5rZW4uCiAqIE11dHRlciAoYmVsZWd0LCBSMi00KTogTSA9IEZsdWVnZWxtdXR0ZXIgKFN0YW5kYXJkKSwgUyA9IFNlY2hza2FudG11dHRlci4gKi8KZnVuY3Rpb24gZHJhd0tsYW1tZXIobywgdncsIHZoKSB7CiAgaWYgKCFwb3NpdGl2ZShvLmtsYW1tZXJBKSB8fCAhcG9zaXRpdmUoby5mbGFuZ2VPZCkgfHwgby5rbGFtbWVyQSA8PSBvLmZsYW5nZU9kKSB7CiAgICByZXR1cm4gZHJhd1BsYXR6aGFsdGVyKG8sIHZ3LCB2aCk7CiAgfQogIGNvbnN0IHJPdXQgPSBvLmtsYW1tZXJBIC8gMiwgZlIgPSBvLmZsYW5nZU9kIC8gMjsKICBjb25zdCBiYW5kID0gck91dCAtIGZSOwogIGNvbnN0IGV4dCA9IHJPdXQgKyAxNDsgICAgICAgICAgICAgICAgICAgIC8vIFJhbmQgZnVlciBWZXJzY2hsdXNzL0dlbGVuayBvYmVuK3VudGVuCiAgY29uc3QgUCA9IG1ha2VQcm9qKC1leHQsIGV4dCwgLWV4dCwgZXh0LCB2dywgdmgsIHsgbDo3MCwgcjo1NiwgdDo0NCwgYjo4NiB9KTsKICBjb25zdCBpZCA9IHVpZCgpOwogIGNvbnN0IGMgPSBQKDAsIDApLCBzYyA9IFAuc2NhbGU7CiAgbGV0IHMgPSAnJzsKICAvLyBLbGFtbWVyYmFuZCAoVm9sbHJpbmcpICsgSW5uZW5rYW50ZSBhbSBLbGVtbS3ijIAKICBzICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGNbMF0pfSIgY3k9IiR7ZngoY1sxXSl9IiByPSIke2Z4KChmUiArIGJhbmQgLyAyKSAqIHNjKX0iIGZpbGw9Im5vbmUiIHN0cm9rZT0idmFyKC0td3otY2xhbXAsI2M5Y2VkNCkiIHN0cm9rZS13aWR0aD0iJHtmeChiYW5kICogc2MpfSIvPmA7CiAgcyArPSBgPGNpcmNsZSBjeD0iJHtmeChjWzBdKX0iIGN5PSIke2Z4KGNbMV0pfSIgcj0iJHtmeChyT3V0ICogc2MpfSIgY2xhc3M9Ind6LWVkZ2UiLz5gOwogIHMgKz0gYDxjaXJjbGUgY3g9IiR7ZngoY1swXSl9IiBjeT0iJHtmeChjWzFdKX0iIHI9IiR7ZngoZlIgKiBzYyl9IiBjbGFzcz0id3otZWRnZSIvPmA7CiAgLy8gS0xIOiB6d2VpIEhhbGJzY2hhbGVuIC0+IFRyZW5uZnVnZW4gbGlua3MvcmVjaHRzIChlcmdpYnQgZGllIDIgR2VsZW5rZSkKICBpZiAoby5rbGFtbWVyVHlwID09PSAnS0xIJykgewogICAgWy0xLCAxXS5mb3JFYWNoKHNpZGUgPT4gewogICAgICBzICs9IGA8bGluZSBjbGFzcz0id3otZWRnZSIgeDE9IiR7ZngoY1swXSArIHNpZGUgKiBmUiAqIHNjKX0iIHkxPSIke2Z4KGNbMV0pfSIgeDI9IiR7ZngoY1swXSArIHNpZGUgKiByT3V0ICogc2MpfSIgeTI9IiR7ZngoY1sxXSl9IiBzdHJva2Utd2lkdGg9IjIiLz5gOwogICAgfSk7CiAgfQogIC8qIFZlcnNjaGx1c3M6IExhc2NoZSArIE11dHRlciAoTSA9IEZsdWVnZWxtdXR0ZXIsIFMgPSBTZWNoc2thbnRtdXR0ZXIpLgogICAqIHNnbiA9IC0xIHplaWNobmV0IG5hY2ggb2Jlbiwgc2duID0gKzEgZXhha3QgZ2VzcGllZ2VsdCBuYWNoIHVudGVuLiAqLwogIGNvbnN0IHZlcnNjaGx1c3MgPSAoeUVkZ2UsIHNnbikgPT4gewogICAgbGV0IHQgPSBgPHJlY3QgY2xhc3M9Ind6LWNsYW1wIiB4PSIke2Z4KGNbMF0gLSA3KX0iIHk9IiR7Zngoc2duIDwgMCA\\\/IHlFZGdlIC0gMTMgOiB5RWRnZSAtIDQpfSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjE3IiByeD0iMiIvPmA7CiAgICBpZiAoby5rbGFtbWVyTXV0dGVyID09PSAnUycpIHsKICAgICAgcmV0dXJuIHQgKyBgPHBvbHlnb24gY2xhc3M9Ind6LWNsYW1wIiBwb2ludHM9IiR7cG9seShbCiAgICAgICAgW2NbMF0gLSA3LCB5RWRnZSArIHNnbiAqIDE1XSwgW2NbMF0gLSAzLjUsIHlFZGdlICsgc2duICogMjJdLCBbY1swXSArIDMuNSwgeUVkZ2UgKyBzZ24gKiAyMl0sCiAgICAgICAgW2NbMF0gKyA3LCB5RWRnZSArIHNnbiAqIDE1XSwgW2NbMF0gKyAzLjUsIHlFZGdlICsgc2duICogOF0sIFtjWzBdIC0gMy41LCB5RWRnZSArIHNnbiAqIDhdXSl9Ii8+YDsKICAgIH0KICAgIGNvbnN0IGV5ID0geUVkZ2UgKyBzZ24gKiAxNiwgbnkgPSB5RWRnZSArIHNnbiAqIDE1OwogICAgcmV0dXJuIHQgKwogICAgICBgPGVsbGlwc2UgY2xhc3M9Ind6LWNsYW1wIiBjeD0iJHtmeChjWzBdIC0gOSl9IiBjeT0iJHtmeChleSl9IiByeD0iNyIgcnk9IjMuNCIgdHJhbnNmb3JtPSJyb3RhdGUoJHtmeChzZ24gKiAtMjQpfSAke2Z4KGNbMF0gLSA5KX0gJHtmeChleSl9KSIvPmAgKwogICAgICBgPGVsbGlwc2UgY2xhc3M9Ind6LWNsYW1wIiBjeD0iJHtmeChjWzBdICsgOSl9IiBjeT0iJHtmeChleSl9IiByeD0iNyIgcnk9IjMuNCIgdHJhbnNmb3JtPSJyb3RhdGUoJHtmeChzZ24gKiAyNCl9ICR7ZngoY1swXSArIDkpfSAke2Z4KGV5KX0pIi8+YCArCiAgICAgIGA8Y2lyY2xlIGNsYXNzPSJ3ei1jbGFtcCIgY3g9IiR7ZngoY1swXSl9IiBjeT0iJHtmeChueSl9IiByPSI0LjUiLz5gOwogIH07CiAgY29uc3QgdG9wWSA9IGNbMV0gLSByT3V0ICogc2MsIGJvdFkgPSBjWzFdICsgck91dCAqIHNjOwogIHMgKz0gdmVyc2NobHVzcyh0b3BZLCAtMSk7CiAgaWYgKG8ua2xhbW1lclR5cCA9PT0gJ0tMSCcpIHsKICAgIC8qIEJlcm5kIDI3LjA3LjIwMjY6IERpZSBLTEggYmVzdGVodCBhdXMgendlaSBIYWxic2NoYWxlbiBtaXQgWldFSSBsb2VzYmFyZW4KICAgICAqIFZlcmJpbmR1bmdlbi4gU2llIGJla29tbXQgZGVzaGFsYiB1bnRlbiBkZW5zZWxiZW4gVmVyc2NobHVzcyB3aWUgb2JlbiwKICAgICAqIGdlc3BpZWdlbHQgLSBuaWNodCBkYXMgZWluemVsbmUgR2VsZW5rIGRlciBLTDEuICovCiAgICBzICs9IHZlcnNjaGx1c3MoYm90WSwgMSk7CiAgfSBlbHNlIHsKICAgIC8vIEdlbGVuayB1bnRlbjogS0wxIGVpbiBQaW4sIEtMTEkgendlaSBQaW5zCiAgICBzICs9IGA8cmVjdCBjbGFzcz0id3otY2xhbXAiIHg9IiR7ZngoY1swXSAtIDcpfSIgeT0iJHtmeChib3RZIC0gNCl9IiB3aWR0aD0iMTQiIGhlaWdodD0iOCIgcng9IjIiLz5gOwogICAgaWYgKG8ua2xhbW1lclR5cCA9PT0gJ0tMTEknKSB7CiAgICAgIHMgKz0gYDxjaXJjbGUgY2xhc3M9Ind6LWNsYW1wIiBjeD0iJHtmeChjWzBdIC0gNSl9IiBjeT0iJHtmeChib3RZICsgNyl9IiByPSIzLjQiLz5gOwogICAgICBzICs9IGA8Y2lyY2xlIGNsYXNzPSJ3ei1jbGFtcCIgY3g9IiR7ZngoY1swXSArIDUpfSIgY3k9IiR7ZngoYm90WSArIDcpfSIgcj0iMy40Ii8+YDsKICAgIH0gZWxzZSB7CiAgICAgIHMgKz0gYDxjaXJjbGUgY2xhc3M9Ind6LWNsYW1wIiBjeD0iJHtmeChjWzBdKX0iIGN5PSIke2Z4KGJvdFkgKyA3KX0iIHI9IjQiLz5gOwogICAgfQogIH0KICAvLyBCZW1hc3N1bmc6IEtsZW1tLeKMgCAoRmxhbnNjaCkgbGlua3MsIEEgKEF1c3Nlbi3ijIApIHVudGVuIC0gd2llIGluIGRlciBWb3JsYWdlLgogIHMgKz0gZGltVlJvdChpZCwgY1swXSAtIHJPdXQgKiBzYyAtIDI0LCBjWzFdIC0gZlIgKiBzYywgY1sxXSArIGZSICogc2MsICfijIAgJyArIGRlKG8uZmxhbmdlT2QpLCB7IGV4dDogY1swXSB9KTsKICAvLyBCZWkgZGVyIEtMSCBzaXR6dCB1bnRlbiBqZXR6dCBkZXIgZ2VzcGllZ2VsdGUgVmVyc2NobHVzcyAtPiBBLU1hc3MgZXR3YXMgdGllZmVyLgogIHMgKz0gZGltSChpZCwgY1swXSAtIHJPdXQgKiBzYywgY1swXSArIHJPdXQgKiBzYywgYm90WSArIChvLmtsYW1tZXJUeXAgPT09ICdLTEgnID8gNDggOiA0MCksICdBIOKMgCAnICsgZGUoby5rbGFtbWVyQSksIHsgZXh0OiBjWzFdICsgck91dCAqIHNjIH0pOwogIHMgKz0gZml0dGluZ0JhZGdlKHZ3LCAnS2xhbW1lciAnICsgby5rbGFtbWVyVHlwICsgJyDCtyBLbGVtbS3ijIAgJyArIGRlKG8uZmxhbmdlT2QpICsgJyDCtyBESU4gMzI2NzYnKTsKICByZXR1cm4gd3JhcFN2ZyhpZCwgdncsIHZoLCBvLmdDb2wsIHMsIGxlZ2VuZEJveChpZCwgdncsIHZoLCBvLCAnRnJvbnRhbnNpY2h0IChLbGFtbWVyICcgKyBvLmtsYW1tZXJUeXAgKyAnKScpKTsKfQoKLyogLS0gNWIpIEJsaW5kZGVja2VsIChTZWl0ZW5hbnNpY2h0LCBESU4gMzI2NzYpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogUnVuZGUgNyAoVy0wNTkpOiBlY2h0ZSBNYXNzemVpY2hudW5nIG5hY2ggTWFzc3plaWNobnVuZyBCbGluZGRlY2tlbC5zdmcKICogKDIyLjA3LjIwMjYpLiBCZWxlZ3RlIE1hc3NlOiBBID0gRmxhbnNjaC3DmCAoZmxhbmdlT2QpLCBMID0gRGVja2Vsc3RhZXJrZQogKiAobGVuZ3RoIGF1cyAiTWFzc2UgS2xlbW1lbiwgQmxpbmRkZWNrZWwueGxzeCIpLiBPaG5lIGJlbGVndGUgRGVja2Vsc3RhZXJrZQogKiAoMjg2LDEvMzE5LzMzOCkgYmxlaWJ0IGRlciBQbGF0emhhbHRlciAtIGVzIHdpcmQga2VpbmUgRGlja2UgZ2VyYXRlbi4gKi8KZnVuY3Rpb24gZHJhd0JsaW5kZGVja2VsKG8sIHZ3LCB2aCkgewogIGlmICghcG9zaXRpdmUoby5mbGFuZ2VPZCkgfHwgIXBvc2l0aXZlKG8ubGVuZ3RoKSkgcmV0dXJuIGRyYXdQbGF0emhhbHRlcihvLCB2dywgdmgpOwogIGNvbnN0IEEgPSBvLmZsYW5nZU9kLCBMID0gby5sZW5ndGgsIHIgPSBBIC8gMjsKICBjb25zdCBQID0gbWFrZVByb2ooMCwgTCwgLXIsIHIsIHZ3LCB2aCwgeyBsOjc4LCByOjU2LCB0OjQ0LCBiOjc2IH0pOwogIGNvbnN0IGlkID0gdWlkKCk7CiAgbGV0IHMgPSAnJzsKICAvLyBHZXNjaGxvc3NlbmUgU2NoZWliZSBpbSBWb2xsc2Nobml0dCArIFN0aXJuc2VpdGUgdW5kIE1pdHRlbGxpbmllCiAgcyArPSBgPHJlY3QgY2xhc3M9Ind6LWhhdGNoIiB4PSIke2Z4KFAuc3goMCkpfSIgeT0iJHtmeChQLnN5KC1yKSl9IiB3aWR0aD0iJHtmeChMICogUC5zY2FsZSl9IiBoZWlnaHQ9IiR7ZngoQSAqIFAuc2NhbGUpfSIvPmA7CiAgcyArPSBgPGxpbmUgY2xhc3M9Ind6LWVkZ2UiIHgxPSIke2Z4KFAuc3goTCkpfSIgeTE9IiR7ZngoUC5zeSgtcikpfSIgeDI9IiR7ZngoUC5zeChMKSl9IiB5Mj0iJHtmeChQLnN5KHIpKX0iIHN0cm9rZS13aWR0aD0iMS42Ii8+YDsKICBzICs9IGA8bGluZSBjbGFzcz0id3otY2VudGVyIiB4MT0iJHtmeChQLnN4KDApIC0gMTApfSIgeTE9IiR7ZngoUC5zeSgwKSl9IiB4Mj0iJHtmeChQLnN4KEwpICsgMTApfSIgeTI9IiR7ZngoUC5zeSgwKSl9Ii8+YDsKICAvLyBCZW1hc3N1bmc6IEEgKEZsYW5zY2gt4oyAKSBsaW5rcyB2ZXJ0aWthbCwgTCAoRGVja2Vsc3RhZXJrZSkgdW50ZW4gLSB3aWUgaW4gZGVyIFZvcmxhZ2UuCiAgcyArPSBkaW1WUm90KGlkLCBQLnN4KDApIC0gMzQsIFAuc3koLXIpLCBQLnN5KHIpLCAnQSDijIAgJyArIGRlKEEpLCB7IGV4dDogUC5zeCgwKSB9KTsKICBzICs9IGRpbUgoaWQsIFAuc3goMCksIFAuc3goTCksIFAuc3kocikgKyAzMiwgJ0wgJyArIGRlKEwpLCB7IGV4dDogUC5zeShyKSB9KTsKICBzICs9IGZpdHRpbmdCYWRnZSh2dywgJ0JsaW5kZGVja2VsIMK3IEZsYW5zY2gt4oyAICcgKyBkZShBKSArICcgwrcgRElOIDMyNjc2Jyk7CiAgcmV0dXJuIHdyYXBTdmcoaWQsIHZ3LCB2aCwgby5nQ29sLCBzLCBsZWdlbmRCb3goaWQsIHZ3LCB2aCwgbywgJ1NlaXRlbmFuc2ljaHQgKEJsaW5kZGVja2VsKScpKTsKfQoKLyogLS0gNikgQ29ubmVjdC1GbGFuc2NoIChDRikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBWZXJiaW5kbGljaGUgUGFyYW1ldGVyOiBEZT1vLm9kLCBEaT1vLmlubmVyRGlhbWV0ZXIsIERmPW8uZmxhbmdlT2QsIEw9by5sZW5ndGguCiAqIEJlcm5kIDI3LjA3LjIwMjY6IERpZSBmcnVlaGVyZW4gU2NocmF1YmVuLSwgS2xlbW0tIHVuZCBQdW5rdGRldGFpbHMgc2luZAogKiBlbnRmYWxsZW4gKCJkaWUgRGV0YWlscyBpbiBkZWluZXIgU2tpenplIHZlcndpcnJlbiBlaGVyIC0ga2VlcCBpdCBzaW1wbGUiKS4KICogR2V6ZWljaG5ldCB3aXJkIGpldHp0IGVpbmUgZWluZmFjaGUsIHN5bW1ldHJpc2NoZSBTY2huaXR0Zm9ybTogQW5zYXR6IG1pdCBkZW0KICogRmxhbnNjaC3ijIAgRGYsIGtvbmlzY2hlciBVZWJlcmdhbmcgYXVmIGRlbiBBdXNzZW4t4oyAIERlIHVlYmVyIGRpZSBIb2VoZSBMLAogKiBkdXJjaGdlaGVuZGUgQm9ocnVuZyBEaS4gQmVtYXNzdCB3ZXJkZW4gYXVzc2NobGllc3NsaWNoIGRpZXNlIHZpZXIgV2VydGU7CiAqIGRpZSBIb2VoZSBkZXMgQW5zYXR6ZXMgaXN0IHNjaGVtYXRpc2NoIHVuZCB0cmFlZ3QgZGVzaGFsYiBrZWluZSBNYXNzemFobC4gKi8KZnVuY3Rpb24gZHJhd0Nvbm5lY3RmbGFuc2NoKG8sIHZ3LCB2aCkgewogIGNvbnN0IERlID0gby5vZCwgRGkgPSBvLmlubmVyRGlhbWV0ZXIsIERmID0gby5mbGFuZ2VPZCwgTCA9IG8ubGVuZ3RoOwogIGNvbnN0IHJEZSA9IERlIC8gMiwgckRpID0gRGkgLyAyLCByRGYgPSBEZiAvIDI7CiAgY29uc3QgYm9zc0ggPSBNYXRoLm1heChMICogMS4yLCBEZiAqIDAuNTUpOwogIGNvbnN0IHRvcCA9IC1MIC0gYm9zc0g7CiAgY29uc3QgUCA9IG1ha2VQcm9qKC1yRGUsIHJEZSwgdG9wLCAwLCB2dywgdmgsIHsgbDo4OCwgcjo5NCwgdDo2NCwgYjo5MiB9KTsKICBjb25zdCBpZCA9IHVpZCgpOwoKICBjb25zdCBvdXRlciA9IFtQKC1yRGYsIHRvcCksIFAockRmLCB0b3ApLCBQKHJEZiwgLUwpLCBQKHJEZSwgMCksIFAoLXJEZSwgMCksIFAoLXJEZiwgLUwpXTsKICBjb25zdCBib3JlID0gW1AoLXJEaSwgdG9wKSwgUChyRGksIHRvcCksIFAockRpLCAwKSwgUCgtckRpLCAwKV07CiAgbGV0IHMgPSAnJzsKICBzICs9IGA8cGF0aCBjbGFzcz0id3otYm9yZSIgZD0iJHtwYXRoRnJvbShib3JlKX0gWiIvPmA7CiAgcyArPSBgPHBhdGggY2xhc3M9Ind6LWhhdGNoIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9IiR7cGF0aEZyb20ob3V0ZXIpfSBaICR7cGF0aEZyb20oYm9yZSl9IFoiLz5gOwogIHMgKz0gYDxsaW5lIGNsYXNzPSJ3ei1jZW50ZXIiIHgxPSIke2Z4KFAuc3goMCkpfSIgeTE9IiR7ZngoUC5zeSh0b3ApIC0gMTIpfSIgeDI9IiR7ZngoUC5zeCgwKSl9IiB5Mj0iJHtmeChQLnN5KDApICsgMTIpfSIvPmA7CgogIHMgKz0gZGltSChpZCwgUC5zeCgtckRmKSwgUC5zeChyRGYpLCBQLnN5KHRvcCkgLSAyNCwgJ0RmICcgKyBkZShEZiksIHsgZXh0OiBQLnN5KHRvcCkgfSk7CiAgcyArPSBkaW1IKGlkLCBQLnN4KC1yRGkpLCBQLnN4KHJEaSksIFAuc3koMCkgKyAyNiwgJ0RpICcgKyBkZShEaSksIHsgZXh0OiBQLnN5KDApIH0pOwogIHMgKz0gZGltSChpZCwgUC5zeCgtckRlKSwgUC5zeChyRGUpLCBQLnN5KDApICsgNTIsICdEZSAnICsgZGUoRGUpLCB7IGV4dDogUC5zeSgwKSB9KTsKICBzICs9IGRpbVYoaWQsIFAuc3gockRlKSArIDM2LCBQLnN5KC1MKSwgUC5zeSgwKSwgJ0wgJyArIGRlKEwpLCB7IGV4dDogUC5zeChyRGUpIH0pOwogIHMgKz0gZml0dGluZ0JhZGdlKHZ3LCAnQ29ubmVjdC1GbGFuc2NoIChDRikgwrcgJyArIHNpemVMYWJlbChvKSk7CiAgcmV0dXJuIHdyYXBTdmcoaWQsIHZ3LCB2aCwgby5nQ29sLCBzLAogICAgbGVnZW5kQm94KGlkLCB2dywgdmgsIG8sICdTY2huaXR0c2NoZW1hIChDb25uZWN0LUZsYW5zY2ggQ0YpJykpOwp9CgovKiAtLSA3KSBDb25uZWN0LUZsYW5zY2ggSW5saW5lIC8gQ0ZJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFZlcmJpbmRsaWNoZSBQYXJhbWV0ZXI6IERlLCBEaSwgTCwgWSBzb3dpZSBBbnNjaGx1c3NtYXNzIEEgKEJXKSBiencuIFRDLgogKiBEZXIgbWl0dGxlcmUgWmVyby1EZWFkLUxlZy1BdWZiYXUgaXN0IGVpbmUgdGVjaG5pc2NoZSBTY2hlbWFmb3JtOyBzZWluZSBuaWNodAogKiB1ZWJlcmdlYmVuZW4gRWluemVsbWFzc2Ugd2VyZGVuIHdlZGVyIGJlc2NocmlmdGV0IG5vY2ggYWxzIE5vcm13ZXJ0IGdlbnV0enQuICovCmZ1bmN0aW9uIGRyYXdDb25uZWN0aW5saW5lKG8sIHZ3LCB2aCkgewogIGNvbnN0IERlID0gby5vZCwgRGkgPSBvLmlubmVyRGlhbWV0ZXIsIEwgPSBvLmxlbmd0aCwgWSA9IG8uYnJhbmNoSGVpZ2h0OwogIGNvbnN0IGVuZFZhbHVlID0gby5lbmREaWFtZXRlciwgaXNUQyA9IG8uZW5kVHlwZSA9PT0gJ1RDJzsKICBjb25zdCB1cHBlckRlID0gby51cHBlck91dGVyRGlhbWV0ZXIsIHVwcGVyRGkgPSBvLnVwcGVySW5uZXJEaWFtZXRlcjsKICBjb25zdCByRGUgPSBEZSAvIDIsIHJEaSA9IERpIC8gMiwgckVuZCA9IGlzVEMgPyBlbmRWYWx1ZSAvIDIgOiByRGU7CiAgY29uc3QgeGMgPSBMIC8gMjsKICBjb25zdCBiYXNlSGFsZiA9IE1hdGgubWluKEwgKiAwLjI0LCBNYXRoLm1heCgxMCwgdXBwZXJEZSAqIDAuNTgpKTsKICBjb25zdCB1cHBlckxlZnQgPSB4YyAtIHVwcGVyRGUgLyAyLCB1cHBlclJpZ2h0ID0geGMgKyB1cHBlckRlIC8gMjsKICBjb25zdCBpbm5lckxlZnQgPSB4YyAtIHVwcGVyRGkgLyAyLCBpbm5lclJpZ2h0ID0geGMgKyB1cHBlckRpIC8gMjsKICBjb25zdCBzZWFsWSA9IC1ZOwogIGNvbnN0IGhlYWRIID0gTWF0aC5tYXgoNywgdXBwZXJEZSAqIDAuMik7CiAgY29uc3QgdG9wID0gc2VhbFkgLSBoZWFkSDsKICBjb25zdCBmbGFuZ2VUID0gaXNUQyA\\\/IE1hdGgubWF4KDIsIE1hdGgubWluKEwgKiAwLjA0NSwgRGUgKiAwLjEzKSkgOiAwOwogIGNvbnN0IG1pblkgPSBNYXRoLm1pbih0b3AgLSBoZWFkSCAqIDAuMzgsIC1yRW5kKTsKICBjb25zdCBtYXhZID0gTWF0aC5tYXgockVuZCwgckRlKTsKICBjb25zdCBQID0gbWFrZVByb2ooMCwgTCwgbWluWSwgbWF4WSwgdncsIHZoLCB7IGw6MTA0LCByOjk0LCB0OjkyLCBiOjkyIH0pOwogIGNvbnN0IGlkID0gdWlkKCk7CiAgY29uc3QgcGlwZVgwID0gaXNUQyA\\\/IGZsYW5nZVQgOiAwLCBwaXBlWDEgPSBpc1RDID8gTCAtIGZsYW5nZVQgOiBMOwogIGxldCBzID0gJyc7CgogIC8vIFJvaHJzY2huaXR0OiBEZSB1bmQgRGkgc2luZCBlY2h0ZSB1ZWJlcmdlYmVuZSBEdXJjaG1lc3Nlci4KICBzICs9IGA8cmVjdCBjbGFzcz0id3otaGF0Y2giIHg9IiR7ZngoUC5zeChwaXBlWDApKX0iIHk9IiR7ZngoUC5zeSgtckRlKSl9IiB3aWR0aD0iJHtmeCgocGlwZVgxIC0gcGlwZVgwKSAqIFAuc2NhbGUpfSIgaGVpZ2h0PSIke2Z4KERlICogUC5zY2FsZSl9Ii8+YDsKICBzICs9IGA8cmVjdCBjbGFzcz0id3otYm9yZSIgeD0iJHtmeChQLnN4KHBpcGVYMCkgLSAxKX0iIHk9IiR7ZngoUC5zeSgtckRpKSl9IiB3aWR0aD0iJHtmeCgocGlwZVgxIC0gcGlwZVgwKSAqIFAuc2NhbGUgKyAyKX0iIGhlaWdodD0iJHtmeChEaSAqIFAuc2NhbGUpfSIvPmA7CiAgcyArPSBgPGxpbmUgY2xhc3M9Ind6LWVkZ2UiIHgxPSIke2Z4KFAuc3gocGlwZVgwKSl9IiB5MT0iJHtmeChQLnN5KC1yRGkpKX0iIHgyPSIke2Z4KFAuc3gocGlwZVgxKSl9IiB5Mj0iJHtmeChQLnN5KC1yRGkpKX0iLz5gOwogIHMgKz0gYDxsaW5lIGNsYXNzPSJ3ei1lZGdlIiB4MT0iJHtmeChQLnN4KHBpcGVYMCkpfSIgeTE9IiR7ZngoUC5zeShyRGkpKX0iIHgyPSIke2Z4KFAuc3gocGlwZVgxKSl9IiB5Mj0iJHtmeChQLnN5KHJEaSkpfSIvPmA7CgogIGlmIChpc1RDKSB7CiAgICAvLyBUQyB3aXJkIGFscyB1ZWJlcmdlYmVuZXIgRW5kZHVyY2htZXNzZXIgZ2V6ZWljaG5ldDsgRmxhbnNjaGRpY2tlIGJsZWlidCBzY2hlbWF0aXNjaC4KICAgIHMgKz0gYDxyZWN0IGNsYXNzPSJ3ei1oYXRjaCIgeD0iJHtmeChQLnN4KDApKX0iIHk9IiR7ZngoUC5zeSgtckVuZCkpfSIgd2lkdGg9IiR7ZngoZmxhbmdlVCAqIFAuc2NhbGUpfSIgaGVpZ2h0PSIke2Z4KDIgKiByRW5kICogUC5zY2FsZSl9Ii8+YDsKICAgIHMgKz0gYDxyZWN0IGNsYXNzPSJ3ei1oYXRjaCIgeD0iJHtmeChQLnN4KEwgLSBmbGFuZ2VUKSl9IiB5PSIke2Z4KFAuc3koLXJFbmQpKX0iIHdpZHRoPSIke2Z4KGZsYW5nZVQgKiBQLnNjYWxlKX0iIGhlaWdodD0iJHtmeCgyICogckVuZCAqIFAuc2NhbGUpfSIvPmA7CiAgICBzICs9IGRpbVZSb3QoaWQsIFAuc3goMCkgLSA2MiwgUC5zeSgtckVuZCksIFAuc3kockVuZCksICdUQyDijIAgJyArIGRlKGVuZFZhbHVlKSwgeyBleHQ6IFAuc3goMCkgfSk7CiAgfSBlbHNlIHsKICAgIC8vIEEgaXN0IGxhdXQgRGF0ZW5ibGF0dCBlaW4gTGFlbmdlbm1hc3MgYW0gQnV0dC1XZWxkLUVuZGUsIGtlaW4gRHVyY2htZXNzZXIuCiAgICBjb25zdCBhWCA9IE1hdGgubWluKGVuZFZhbHVlLCBMKTsKICAgIHMgKz0gYDxsaW5lIGNsYXNzPSJ3ei1lZGdlIiB4MT0iJHtmeChQLnN4KGFYKSl9IiB5MT0iJHtmeChQLnN5KC1yRGUpKX0iIHgyPSIke2Z4KFAuc3goYVgpKX0iIHkyPSIke2Z4KFAuc3kockRlKSl9IiBzdHJva2UtZGFzaGFycmF5PSIzIDMiLz5gOwogICAgcyArPSBkaW1IKGlkLCBQLnN4KDApLCBQLnN4KGFYKSwgUC5zeShyRGUpICsgMjcsICdBICcgKyBkZShlbmRWYWx1ZSksIHsgZXh0OiBQLnN5KHJEZSkgfSk7CiAgfQoKICAvLyBNaXR0bGVyZXIgWmVyby1EZWFkLUxlZy1BdWZiYXUsIHNjaGVtYXRpc2NoIGFuIGRlciBEYXRlbmJsYXR0a29udHVyIG9yaWVudGllcnQuCiAgY29uc3QgbGVmdCA9IHhjIC0gYmFzZUhhbGYsIHJpZ2h0ID0geGMgKyBiYXNlSGFsZjsKICBzICs9IGA8cGF0aCBjbGFzcz0id3otaGF0Y2giIGQ9Ik0ke2Z4KFAuc3gobGVmdCkpfSwke2Z4KFAuc3koLXJEZSkpfQogICAgTCR7ZngoUC5zeCh1cHBlckxlZnQpKX0sJHtmeChQLnN5KHNlYWxZKSl9CiAgICBMJHtmeChQLnN4KHVwcGVyUmlnaHQpKX0sJHtmeChQLnN5KHNlYWxZKSl9CiAgICBMJHtmeChQLnN4KHJpZ2h0KSl9LCR7ZngoUC5zeSgtckRlKSl9IFoiLz5gOwogIHMgKz0gYDxyZWN0IGNsYXNzPSJ3ei1oYXRjaCIgeD0iJHtmeChQLnN4KHVwcGVyTGVmdCkpfSIgeT0iJHtmeChQLnN5KHRvcCkpfSIgd2lkdGg9IiR7ZngodXBwZXJEZSAqIFAuc2NhbGUpfSIgaGVpZ2h0PSIke2Z4KGhlYWRIICogUC5zY2FsZSl9Ii8+YDsKICAvLyBPZmZlbmVyLCBnZXJ1bmRldGVyIElubmVucmF1bToga2VpbmVybGVpIG5pY2h0IHVlYmVyZ2ViZW5lcyBNYXNzIHdpcmQgYW5nZXNjaHJpZWJlbi4KICBzICs9IGA8cGF0aCBjbGFzcz0id3otYm9yZSIgZD0iTSR7ZngoUC5zeChpbm5lckxlZnQpKX0sJHtmeChQLnN5KHRvcCkgLSAxKX0KICAgIEwke2Z4KFAuc3goaW5uZXJMZWZ0KSl9LCR7ZngoUC5zeSgtckRlICogMC4yMikpfQogICAgUSR7ZngoUC5zeCh4YykpfSwke2Z4KFAuc3kockRpICogMC45MikpfSAke2Z4KFAuc3goaW5uZXJSaWdodCkpfSwke2Z4KFAuc3koLXJEZSAqIDAuMjIpKX0KICAgIEwke2Z4KFAuc3goaW5uZXJSaWdodCkpfSwke2Z4KFAuc3kodG9wKSAtIDEpfSBaIi8+YDsKICBzICs9IGA8cGF0aCBjbGFzcz0id3otZWRnZSIgZD0iTSR7ZngoUC5zeChpbm5lckxlZnQpKX0sJHtmeChQLnN5KHRvcCkpfQogICAgTCR7ZngoUC5zeChpbm5lckxlZnQpKX0sJHtmeChQLnN5KC1yRGUgKiAwLjIyKSl9CiAgICBRJHtmeChQLnN4KHhjKSl9LCR7ZngoUC5zeShyRGkgKiAwLjkyKSl9ICR7ZngoUC5zeChpbm5lclJpZ2h0KSl9LCR7ZngoUC5zeSgtckRlICogMC4yMikpfQogICAgTCR7ZngoUC5zeChpbm5lclJpZ2h0KSl9LCR7ZngoUC5zeSh0b3ApKX0iLz5gOwogIFstMSwxXS5mb3JFYWNoKHNpZGUgPT4gewogICAgY29uc3QgYnggPSB4YyArIHNpZGUgKiB1cHBlckRlICogMC41NjsKICAgIGNvbnN0IGJyID0gTWF0aC5tYXgoMS44LCB1cHBlckRlICogMC4wNTUpOwogICAgcyArPSBgPHJlY3QgY2xhc3M9Ind6LWNsYW1wIiB4PSIke2Z4KFAuc3goYnggLSBicikpfSIgeT0iJHtmeChQLnN5KHRvcCArIGhlYWRIICogMC4wOCkpfSIgd2lkdGg9IiR7ZngoMiAqIGJyICogUC5zY2FsZSl9IiBoZWlnaHQ9IiR7ZngoaGVhZEggKiAwLjg2ICogUC5zY2FsZSl9IiByeD0iJHtmeChiciAqIFAuc2NhbGUgKiAwLjM1KX0iLz5gOwogICAgcyArPSBgPGNpcmNsZSBjbGFzcz0id3otY2xhbXAiIGN4PSIke2Z4KFAuc3goYngpKX0iIGN5PSIke2Z4KFAuc3kodG9wKSl9IiByPSIke2Z4KGJyICogUC5zY2FsZSl9Ii8+YDsKICB9KTsKICBzICs9IGA8bGluZSBjbGFzcz0id3otY2VudGVyIiB4MT0iJHtmeChQLnN4KDApIC0gMTApfSIgeTE9IiR7ZngoUC5zeSgwKSl9IiB4Mj0iJHtmeChQLnN4KEwpICsgMTApfSIgeTI9IiR7ZngoUC5zeSgwKSl9Ii8+YDsKICBzICs9IGA8bGluZSBjbGFzcz0id3otY2VudGVyIiB4MT0iJHtmeChQLnN4KHhjKSl9IiB5MT0iJHtmeChQLnN5KHRvcCkgLSAxMCl9IiB4Mj0iJHtmeChQLnN4KHhjKSl9IiB5Mj0iJHtmeChQLnN5KHJEZSkpfSIvPmA7CgogIGNvbnN0IGxlZnREaW1YID0gUC5zeCgwKSAtIChpc1RDID8gMzggOiA0Mik7CiAgcyArPSBkaW1WUm90KGlkLCBsZWZ0RGltWCwgUC5zeSgtckRlKSwgUC5zeShyRGUpLCAnRGUgJyArIGRlKERlKSwgeyBleHQ6IFAuc3goMCkgfSk7CiAgcyArPSBkaW1WUm90KGlkLCBQLnN4KDApIC0gMTYsIFAuc3koLXJEaSksIFAuc3kockRpKSwgJ0RpICcgKyBkZShEaSksIHsgZXh0OiBQLnN4KDApIH0pOwogIHMgKz0gZGltVlJvdChpZCwgUC5zeChyaWdodCkgKyAzOCwgUC5zeShzZWFsWSksIFAuc3koMCksICdZICcgKyBkZShZKSwgeyBleHQ6IFAuc3gocmlnaHQpIH0pOwogIHMgKz0gZGltSChpZCwgUC5zeCgwKSwgUC5zeChMKSwgUC5zeShtYXhZKSArIDU1LCAnTCAnICsgZGUoTCksIHsgZXh0OiBQLnN5KG1heFkpIH0pOwogIHMgKz0gZGltSChpZCwgUC5zeCh1cHBlckxlZnQpLCBQLnN4KHVwcGVyUmlnaHQpLCBQLnN5KHRvcCkgLSAyMSwgJ29iZW4gRGUgJyArIGRlKHVwcGVyRGUpLCB7IGV4dDogUC5zeSh0b3ApIH0pOwogIHMgKz0gZGltSChpZCwgUC5zeChpbm5lckxlZnQpLCBQLnN4KGlubmVyUmlnaHQpLCBQLnN5KHRvcCkgLSA0MywgJ29iZW4gRGkgJyArIGRlKHVwcGVyRGkpLCB7IGV4dDogUC5zeSh0b3ApIH0pOwogIHMgKz0gZml0dGluZ0JhZGdlKHZ3LCAnQ29ubmVjdC1GbGFuc2NoIElubGluZSAoQ0ZJKSDCtyAnICsKICAgIChpc1RDID8gJ1RyaS1DbGFtcCcgOiAnQnV0dCBXZWxkJykgKyAnIMK3ICcgKyBzaXplTGFiZWwobykpOwogIHJldHVybiB3cmFwU3ZnKGlkLCB2dywgdmgsIG8uZ0NvbCwgcywKICAgIGxlZ2VuZEJveChpZCwgdncsIHZoLCBvLCAnU2Nobml0dHNjaGVtYSAoQ29ubmVjdC1GbGFuc2NoIElubGluZSBDRkkpJykpOwp9CgovKiAtLSA4KSBEaWNodHVuZyAoRnJvbnRhbnNpY2h0ICsgUHJvZmlsLCBESU4gMzI2NzYpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBSdW5kZSA3IChXLTA1OSk6IGVjaHRlIFplaWNobnVuZyBuYWNoIGRlbiBnZWxpZWZlcnRlbiBQcm9maWxiaWxkZXJuCiAqICgiRGljaHR1bmcgVHlwSSBvaG5lIExpcHBlLmpwZyIgLyAiRGljaHR1bmcgVHlwSUkgbWl0IExpcHBlLmpwZyIsIDIyLjA3LjIwMjYpLgogKiBCZWxlZ3RlIE1hc3NlIGF1cyBkYXRhLmpzIChESU4zMjY3Ni1aZWlsZW4pOiBFID0gQXVzc2VuLeKMgCAoZ2Fza2V0T2QpLAogKiBDID0gSW5uZW4t4oyAIChnYXNrZXRJZCkuIFR5cCBJID0gb2huZSBMaXBwZSwgVHlwIElJID0gbWl0IExpcHBlIChiZWxlZ3QsCiAqIEJlcm5kIFIyLTMpLiBEYXMgUHJvZmlsIHJlY2h0cyBpc3Qgc2NoZW1hdGlzY2ggdW5kIHVuYmVtYXNzdDsgYmVtYXNzdCB3ZXJkZW4KICogbnVyIEUgdW5kIEMuIEZlaGx0IGVpbmVzIGRlciBiZWlkZW4gTWFzc2UsIGJsZWlidCBkZXIgUGxhdHpoYWx0ZXIuICovCmZ1bmN0aW9uIGRyYXdEaWNodHVuZyhvLCB2dywgdmgpIHsKICBpZiAoIXBvc2l0aXZlKG8uZ2Fza2V0T2QpIHx8ICFwb3NpdGl2ZShvLmdhc2tldElkKSB8fCBvLmdhc2tldElkID49IG8uZ2Fza2V0T2QpIHsKICAgIHJldHVybiBkcmF3UGxhdHpoYWx0ZXIobywgdncsIHZoKTsKICB9CiAgY29uc3QgRSA9IG8uZ2Fza2V0T2QsIEMgPSBvLmdhc2tldElkLCByRSA9IEUgLyAyLCByQyA9IEMgLyAyOwogIGNvbnN0IGxpcHBlID0gby5nYXNrZXRUeXBlID09PSAnSUknOwogIC8vIExheW91dCBpbiBtbTogUmluZyBtaXQgTWl0dGUgYmVpICgwLDApLCBzY2hlbWF0aXNjaGVzIFByb2ZpbCByZWNodHMgZGFuZWJlbi4KICBjb25zdCBwcm9mVyA9IChyRSAtIHJDKSAqIDIuMiwgcHJvZkggPSBFICogMC40MjsKICBjb25zdCBwcm9mWDAgPSByRSArIE1hdGgubWF4KDE0LCBFICogMC4yMik7CiAgY29uc3QgUCA9IG1ha2VQcm9qKC1yRSAtIDQsIHByb2ZYMCArIHByb2ZXICsgNCwgLXJFIC0gNCwgckUgKyA0LCB2dywgdmgsIHsgbDo1Niwgcjo1NiwgdDo1NiwgYjo3OCB9KTsKICBjb25zdCBpZCA9IHVpZCgpOwogIGNvbnN0IGMgPSBQKDAsIDApLCBzYyA9IFAuc2NhbGU7CiAgbGV0IHMgPSAnJzsKICAvLyBSaW5nIGluIERpY2h0dW5nc2ZhcmJlLCBCb2hydW5nIGZyZWksIE1pdHRlbGxpbmllbgogIHMgKz0gYDxjaXJjbGUgY2xhc3M9Ind6LWdhc2tldCIgY3g9IiR7ZngoY1swXSl9IiBjeT0iJHtmeChjWzFdKX0iIHI9IiR7ZngockUgKiBzYyl9Ii8+YDsKICBzICs9IGA8Y2lyY2xlIGNsYXNzPSJ3ei1ib3JlIiBjeD0iJHtmeChjWzBdKX0iIGN5PSIke2Z4KGNbMV0pfSIgcj0iJHtmeChyQyAqIHNjKX0iIHN0cm9rZT0idmFyKC0td3otZWRnZSwjMWMxYzFjKSIgc3Ryb2tlLXdpZHRoPSIwLjgiLz5gOwogIHMgKz0gYDxsaW5lIGNsYXNzPSJ3ei1jZW50ZXIiIHgxPSIke2Z4KGNbMF0gLSByRSAqIHNjIC0gOCl9IiB5MT0iJHtmeChjWzFdKX0iIHgyPSIke2Z4KGNbMF0gKyByRSAqIHNjICsgOCl9IiB5Mj0iJHtmeChjWzFdKX0iLz5gOwogIHMgKz0gYDxsaW5lIGNsYXNzPSJ3ei1jZW50ZXIiIHgxPSIke2Z4KGNbMF0pfSIgeTE9IiR7ZngoY1sxXSAtIHJFICogc2MgLSA4KX0iIHgyPSIke2Z4KGNbMF0pfSIgeTI9IiR7ZngoY1sxXSArIHJFICogc2MgKyA4KX0iLz5gOwogIC8vIFByb2ZpbCAoc2NoZW1hdGlzY2gpOiBUeXAgSUkgbWl0IExpcHBlIGFtIEF1c3NlbnJhbmQsIFR5cCBJIGdsYXR0CiAgY29uc3QgcHgwID0gUC5zeChwcm9mWDApLCBweDEgPSBQLnN4KHByb2ZYMCArIHByb2ZXKSwgcHkwID0gUC5zeSgtcHJvZkggLyAyKSwgcHkxID0gUC5zeShwcm9mSCAvIDIpOwogIHMgKz0gYDxyZWN0IGNsYXNzPSJ3ei1nYXNrZXQiIHg9IiR7ZngocHgwKX0iIHk9IiR7ZngocHkwKX0iIHdpZHRoPSIke2Z4KHB4MSAtIHB4MCl9IiBoZWlnaHQ9IiR7ZngocHkxIC0gcHkwKX0iLz5gOwogIGlmIChsaXBwZSkgewogICAgdmFyIGx3ID0gTWF0aC5tYXgoNCwgKHB4MSAtIHB4MCkgKiAwLjMyKSwgbGggPSBNYXRoLm1heCgzLCAocHkxIC0gcHkwKSAqIDAuMTYpOwogICAgcyArPSBgPHJlY3QgY2xhc3M9Ind6LWdhc2tldCIgeD0iJHtmeChweDEgLSBsdyAvIDIpfSIgeT0iJHtmeChweTAgLSBsaCl9IiB3aWR0aD0iJHtmeChsdyl9IiBoZWlnaHQ9IiR7ZngobGgpfSIvPmA7CiAgICBzICs9IGA8cmVjdCBjbGFzcz0id3otZ2Fza2V0IiB4PSIke2Z4KHB4MSAtIGx3IC8gMil9IiB5PSIke2Z4KHB5MSl9IiB3aWR0aD0iJHtmeChsdyl9IiBoZWlnaHQ9IiR7ZngobGgpfSIvPmA7CiAgfQogIHMgKz0gYDxsaW5lIGNsYXNzPSJ3ei1jZW50ZXIiIHgxPSIke2Z4KHB4MCAtIDgpfSIgeTE9IiR7ZngoKHB5MCArIHB5MSkgLyAyKX0iIHgyPSIke2Z4KHB4MSArIDgpfSIgeTI9IiR7ZngoKHB5MCArIHB5MSkgLyAyKX0iLz5gOwogIHMgKz0gYDx0ZXh0IGNsYXNzPSJ3ei1ub3RlIiB4PSIke2Z4KChweDAgKyBweDEpIC8gMil9IiB5PSIke2Z4KHB5MSArIChsaXBwZSA\\\/IE1hdGgubWF4KDMsIChweTEgLSBweTApICogMC4xNikgKyAxNiA6IDE4KSl9IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5Qcm9maWwgKHNjaGVtYXRpc2NoKSDCtyAke2xpcHBlID8gJ1R5cCBJSSBtaXQgTGlwcGUnIDogJ1R5cCBJIG9obmUgTGlwcGUnfTwvdGV4dD5gOwogIC8vIEJlbWFzc3VuZzogQyAoSW5uZW4t4oyAKSBhbHMgRHVyY2htZXNzZXIgcXVlciBkdXJjaCBkaWUgQm9ocnVuZywgRSAoQXVzc2VuLeKMgCkgdW50ZW4uCiAgcyArPSBkaW1IKGlkLCBjWzBdIC0gckMgKiBzYywgY1swXSArIHJDICogc2MsIGNbMV0sICdDIOKMgCAnICsgZGUoQykpOwogIHMgKz0gZGltSChpZCwgY1swXSAtIHJFICogc2MsIGNbMF0gKyByRSAqIHNjLCBjWzFdICsgckUgKiBzYyArIDMyLCAnRSDijIAgJyArIGRlKEUpLCB7IGV4dDogY1sxXSArIHJFICogc2MgfSk7CiAgY29uc3QgbWF0ID0gR0FTS0VUX0xBQkVMW28uZ2Fza2V0TWF0ZXJpYWxdIHx8IG8uZ2Fza2V0TWF0ZXJpYWw7CiAgcyArPSBmaXR0aW5nQmFkZ2UodncsICdEaWNodHVuZyDCtyBUeXAgJyArIG8uZ2Fza2V0VHlwZSArIChsaXBwZSA\\\/ICcgKG1pdCBMaXBwZSknIDogJyAob2huZSBMaXBwZSknKSArICcgwrcgRSDijIAgJyArIGRlKEUpICsgJyDCtyAnICsgbWF0KTsKICByZXR1cm4gd3JhcFN2ZyhpZCwgdncsIHZoLCBvLmdDb2wsIHMsIGxlZ2VuZEJveChpZCwgdncsIHZoLCBvLCAnRnJvbnRhbnNpY2h0ICsgUHJvZmlsIChEaWNodHVuZyknKSk7Cn0KCi8qIC0tIFBsYXR6aGFsdGVyOiB1bmJla2FubnRlciAvIG5pY2h0LXplaWNoZW5iYXJlciBzdmdUeXBlIC0tLS0tLS0tLS0tLS0tLS0tLQogKiBGYWVsbHQgbnVyIG5vY2ggYW4sIHdlbm4gZWluIGJlbGVndGVzIFBmbGljaHRtYXNzIGZlaGx0ICh6LiBCLiBEaWNodHVuZyBvaG5lCiAqIEUvQywgS2xhbW1lciBvaG5lIEEsIEJsaW5kZGVja2VsIG9obmUgRGVja2Vsc3RhZXJrZSkgb2RlciBlaW4gc3ZnVHlwZSBnYW56CiAqIHVuYmVrYW5udCBpc3QuIE5hY2hwcnVlZi1CZWZ1bmQgYiAoMTYuMDcuMjAyNik6IEJpcyBoaWVyaGVyIGZpZWwgZGVyCiAqIGRlZmF1bHQtWndlaWcgYXVmIGRyYXdDbGFtcHN0dXR6ZW4genVydWVjayB1bmQgemVpZ3RlIHN0aWxsIGVpbmUga29tcGxldHRlCiAqIENsYW1wdmVyYmluZHVuZywgZGllIGVzIGZ1ZXIgZGVuIFR5cCBnYXIgbmljaHQgZ2lidC4gU3RhdHQgZXJmdW5kZW5lcgogKiBHZW9tZXRyaWU6IGVpbiBrbGFyZXIgIlplaWNobnVuZyBmb2xndCItSGlud2Vpcy4gRXMgd2lyZCBCRVdVU1NUIGtlaW4KICogRml0dGluZyBnZXplaWNobmV0LiAqLwpmdW5jdGlvbiBkcmF3UGxhdHpoYWx0ZXIobywgdncsIHZoKSB7CiAgY29uc3QgaWQgPSB1aWQoKTsKICBjb25zdCBjeCA9IHZ3IC8gMiwgY3kgPSB2aCAvIDI7CiAgY29uc3QgYncgPSBNYXRoLm1pbigzODAsIHZ3IC0gODgpLCBiaCA9IDEzMjsKICBsZXQgcyA9ICcnOwogIHMgKz0gYDxyZWN0IHg9IiR7ZngoY3ggLSBidyAvIDIpfSIgeT0iJHtmeChjeSAtIGJoIC8gMiAtIDYpfSIgd2lkdGg9IiR7ZngoYncpfSIgaGVpZ2h0PSIke2Z4KGJoKX0iIHJ4PSIxNCIKICAgICAgICAgIGZpbGw9InZhcigtLXd6LWJvcmUsI2Y0ZjZmOCkiIHN0cm9rZT0idmFyKC0td3otZGltLCM4YThmOTYpIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iNyA1Ii8+YDsKICBzICs9IGA8cGF0aCBkPSJNJHtmeChjeCAtIDI0KX0sJHtmeChjeSAtIDEwKX0gbDE0LC0xNCAxMCwxMCAyMCwtMjIgTSR7ZngoY3ggLSAyNCl9LCR7ZngoY3kgKyA4KX0gaDU4IgogICAgICAgICAgZmlsbD0ibm9uZSIgc3Ryb2tlPSJ2YXIoLS13ei1lZGdlLCMxYzFjMWMpIiBzdHJva2Utd2lkdGg9IjEuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+YDsKICBzICs9IGA8dGV4dCB4PSIke2Z4KGN4KX0iIHk9IiR7ZngoY3kgKyAzNCl9IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIgogICAgICAgICAgZmlsbD0idmFyKC0td3otaW5rLCMxYzFjMWMpIiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNjAwIgogICAgICAgICAgZm9udC1mYW1pbHk9IidQbHVzIEpha2FydGEgU2FucycsJ0t1bWJoIFNhbnMnLHN5c3RlbS11aSxzYW5zLXNlcmlmIj5aZWljaG51bmcgZm9sZ3Q8L3RleHQ+YDsKICByZXR1cm4gd3JhcFN2ZyhpZCwgdncsIHZoLCBvLmdDb2wsIHMsIGxlZ2VuZEJveChpZCwgdncsIHZoLCBvLCAnWmVpY2hudW5nIGZvbGd0JykpOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IERpc3BhdGNoICovCmZ1bmN0aW9uIHJlbmRlckZpdHRpbmcocGFyYW1zLCBvcHRzKSB7CiAgb3B0cyA9IG9wdHMgfHwge307CiAgY29uc3QgdncgPSBvcHRzLndpZHRoIHx8IDc2MCwgdmggPSBvcHRzLmhlaWdodCB8fCA0NDA7CiAgY29uc3QgcmVxdWVzdGVkVHlwZSA9IHBhcmFtcyAmJiBwYXJhbXMudHlwZTsKICBjb25zdCBpbnZhbGlkQ29ubmVjdCA9IChyZXF1ZXN0ZWRUeXBlID09PSAnY29ubmVjdGZsYW5zY2gnICYmICF2YWxpZENvbm5lY3RmbGFuc2NoKHBhcmFtcykpIHx8CiAgICAocmVxdWVzdGVkVHlwZSA9PT0gJ2Nvbm5lY3RpbmxpbmUnICYmICF2YWxpZENvbm5lY3RpbmxpbmUocGFyYW1zKSk7CiAgY29uc3QgbyA9IG5vcm1hbGl6ZShwYXJhbXMpOwogIGlmIChpbnZhbGlkQ29ubmVjdCkgcmV0dXJuIGRyYXdQbGF0emhhbHRlcihvLCB2dywgdmgpOwogIHN3aXRjaCAoby50eXBlKSB7CiAgICBjYXNlICdjbGFtcHN0dXR6ZW4nOiByZXR1cm4gZHJhd0NsYW1wc3R1dHplbihvLCB2dywgdmgsIGZhbHNlKTsKICAgIC8vIEVpbnplbG5lciBTdHV0emVuIChUQ0QvVENTKToga2VpbiB6d2VpdGVyIFN0dXR6ZW4sIGtlaW5lIERpY2h0dW5nLCBrZWluZSBLbGFtbWVyLgogICAgY2FzZSAnc3R1dHplbic6ICAgICAgcmV0dXJuIGRyYXdDbGFtcHN0dXR6ZW4obywgdncsIHZoLCAnc2luZ2xlJyk7CiAgICBjYXNlICdibGluZGthcHBlJzogICByZXR1cm4gZHJhd0NsYW1wc3R1dHplbihvLCB2dywgdmgsIHRydWUpOwogICAgLy8gUnVuZGUgNyAoVy0wNTkpOiByZWluZSBGbGFuc2NoLVplaWNobnVuZyBvaG5lIFJvaHJtYXNzZSAoVHlwIEJEKS4KICAgIGNhc2UgJ2JsaW5kZGVja2VsJzogIHJldHVybiBkcmF3QmxpbmRkZWNrZWwobywgdncsIHZoKTsKICAgIGNhc2UgJ2JvZ2VuOTAnOiAgICAgIHJldHVybiBkcmF3Qm9nZW4obywgdncsIHZoLCA5MCk7CiAgICBjYXNlICdib2dlbjQ1JzogICAgICByZXR1cm4gZHJhd0JvZ2VuKG8sIHZ3LCB2aCwgNDUpOwogICAgY2FzZSAndHN0dWVjayc6ICAgICAgcmV0dXJuIGRyYXdUc3R1ZWNrKG8sIHZ3LCB2aCk7CiAgICBjYXNlICdyZWR1emllcnVuZyc6ICByZXR1cm4gZHJhd1JlZHV6aWVydW5nKG8sIHZ3LCB2aCk7CiAgICBjYXNlICdrbGFtbWVyJzogICAgICByZXR1cm4gZHJhd0tsYW1tZXIobywgdncsIHZoKTsKICAgIGNhc2UgJ2Nvbm5lY3RmbGFuc2NoJzogcmV0dXJuIGRyYXdDb25uZWN0ZmxhbnNjaChvLCB2dywgdmgpOwogICAgY2FzZSAnY29ubmVjdGlubGluZSc6ICByZXR1cm4gZHJhd0Nvbm5lY3RpbmxpbmUobywgdncsIHZoKTsKICAgIC8vIFR5cCBEICdkaWNodHVuZyc6IGVjaHRlIFplaWNobnVuZyBtaXQgYmVsZWd0ZW4gRS9DLU1hc3Nlbjsgb2huZSBzaWUKICAgIC8vIGZhZWxsdCBkcmF3RGljaHR1bmcgc2VsYnN0IGF1ZiBkZW4gUGxhdHpoYWx0ZXIgKE5JRSBkcmF3Q2xhbXBzdHV0emVuKS4KICAgIGNhc2UgJ2RpY2h0dW5nJzogICAgIHJldHVybiBkcmF3RGljaHR1bmcobywgdncsIHZoKTsKICAgIC8vIFNpY2hlcmhlaXRzbmV0ejogamVkZXIgdW5iZWthbm50ZSBzdmdUeXBlIGJla29tbXQgZGVuIFBsYXR6aGFsdGVyIHN0YXR0IHN0aWxsCiAgICAvLyBlaW5lIGZhbHNjaGUgQ2xhbXB2ZXJiaW5kdW5nIChOYWNocHJ1ZWYtQmVmdW5kIGIpLgogICAgZGVmYXVsdDogICAgICAgICAgICAgcmV0dXJuIGRyYXdQbGF0emhhbHRlcihvLCB2dywgdmgpOwogIH0KfQoKY29uc3QgQVBJID0geyByZW5kZXJGaXR0aW5nLCBGSVRUSU5HX1RZUEVTLCBERUZBVUxUUywgR0FTS0VUX0NPTE9SUywgR0FTS0VUX0xBQkVMIH07CmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgbW9kdWxlLmV4cG9ydHMgPSBBUEk7CmlmIChyb290KSByb290LldlaXNzRml0dGluZ1NWRyA9IEFQSTsKCi8qIC0tLS0tLS0tLSBOb2RlLVNlbGJzdHRlc3Q6IGBub2RlIGRyYXcuanNgIHNjaHJlaWJ0IEJlaXNwaWVsZSBuYWNoIC4vcWEgLS0tICovCmlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgJiYgcmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHsKICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyksIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7CiAgY29uc3Qgb3V0ID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3FhJyk7IHRyeSB7IGZzLm1rZGlyU3luYyhvdXQsIHsgcmVjdXJzaXZlOiB0cnVlIH0pOyB9IGNhdGNoIChlKSB7fQogIGNvbnN0IHNhbXBsZXMgPSBbCiAgICBbJ2NsYW1wc3R1dHplbicse3R5cGU6J2NsYW1wc3R1dHplbicsZG46MjUsb2Q6Mjksd2FsbDoxLjUsbGVuZ3RoOjIxLjUsY2xhbXBTaXplOidETjI1JyxmbGFuZ2VPZDo1MC41LGdhc2tldE1hdGVyaWFsOidFUERNJyxzdXJmYWNlOidINCcsd2Vya3N0b2ZmOicxLjQ0MzUnfV0sCiAgICBbJ2JsaW5kZGVja2VsJywge3R5cGU6J2JsaW5kZGVja2VsJyxmbGFuZ2VPZDo1MC41LGxlbmd0aDo2LjM1LHN1cmZhY2U6J0g0Jyx3ZXJrc3RvZmY6JzEuNDQwNCd9XSwKICAgIFsna2xhbW1lcicsICAgICB7dHlwZTona2xhbW1lcicsZmxhbmdlT2Q6NTAuNSxrbGFtbWVyQTo1MyxrbGFtbWVyVHlwOidLTDEnLGtsYW1tZXJNdXR0ZXI6J00nLHdlcmtzdG9mZjonMS40MzA4JyxzdXJmYWNlOicnfV0sCiAgICBbJ2tsYW1tZXIta2xoJywge3R5cGU6J2tsYW1tZXInLGZsYW5nZU9kOjY0LGtsYW1tZXJBOjY1LjUsa2xhbW1lclR5cDonS0xIJyxrbGFtbWVyTXV0dGVyOidTJyx3ZXJrc3RvZmY6JzEuNDMwOCcsc3VyZmFjZTonJ31dLAogICAgWydkaWNodHVuZy10MScsIHt0eXBlOidkaWNodHVuZycsZ2Fza2V0T2Q6MjIuMCxnYXNrZXRJZDo5LjcsZ2Fza2V0VHlwZTonSScsZ2Fza2V0TWF0ZXJpYWw6J0VQRE0nLHdlcmtzdG9mZjonMS40NDA0JyxzdXJmYWNlOicnfV0sCiAgICBbJ2RpY2h0dW5nLXQyJywge3R5cGU6J2RpY2h0dW5nJyxnYXNrZXRPZDo1MC41LGdhc2tldElkOjI3LjcsZ2Fza2V0VHlwZTonSUknLGdhc2tldE1hdGVyaWFsOidWTVEnLHdlcmtzdG9mZjonMS40NDA0JyxzdXJmYWNlOicnfV0sCiAgICBbJ2JvZ2VuOTAnLCAgICAge3R5cGU6J2JvZ2VuOTAnLGRuOjI1LG9kOjI5LHdhbGw6MS41LGxlbmd0aDo0MCxiZW5kUmFkaXVzOjUwLHN1cmZhY2U6J0gzJ31dLAogICAgWydib2dlbjQ1JywgICAgIHt0eXBlOidib2dlbjQ1Jyxkbjo0MCxvZDo0MSx3YWxsOjEuNSxsZW5ndGg6NDAsYmVuZFJhZGl1czo2MCxzdXJmYWNlOidINCd9XSwKICAgIFsndHN0dWVjaycsICAgICB7dHlwZTondHN0dWVjaycsZG46NDAsb2Q6NDEsd2FsbDoxLjUsbGVuZ3RoOjEyMCxicmFuY2hPZDo0MSxzdXJmYWNlOidINCd9XSwKICAgIFsndHN0dWVjay1yZWQnLCB7dHlwZTondHN0dWVjaycsZG46NDAsb2Q6NDEsd2FsbDoxLjUsbGVuZ3RoOjEyMCxicmFuY2hPZDoyOSxzdXJmYWNlOidINCd9XSwKICAgIFsncmVkdXppZXJ1bmcnLCB7dHlwZToncmVkdXppZXJ1bmcnLGRuOjQwLG9kOjQxLHdhbGw6MS41LGxlbmd0aDo2MCxvZDI6MjksZWNjZW50cmljOmZhbHNlLHN1cmZhY2U6J0g0J31dLAogICAgWydyZWQtZXh6JywgICAgIHt0eXBlOidyZWR1emllcnVuZycsZG46NTAsb2Q6NTMsd2FsbDoxLjUsbGVuZ3RoOjcwLG9kMjoyOSxlY2NlbnRyaWM6dHJ1ZSxzdXJmYWNlOidIMyd9XQogIF07CiAgY29uc3QgcGFnZSA9IFsnPCFkb2N0eXBlIGh0bWw+PG1ldGEgY2hhcnNldD0idXRmLTgiPjx0aXRsZT5XZWlzcyBTVkcgUUE8L3RpdGxlPicsCiAgICAnPHN0eWxlPmJvZHl7YmFja2dyb3VuZDojZmZmO2ZvbnQtZmFtaWx5OnN5c3RlbS11aTttYXJnaW46MDtwYWRkaW5nOjIwcHh9JywKICAgICcuY2FyZHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo0MjBweDttYXJnaW46OHB4O2JvcmRlcjoxcHggc29saWQgI2VlZTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzo4cHg7dmVydGljYWwtYWxpZ246dG9wfScsCiAgICAnLmNhcmQgaDN7Zm9udDo2MDAgMTNweCBzeXN0ZW0tdWk7Y29sb3I6IzFjMWMxYzttYXJnaW46NHB4IDZweH1zdmd7d2lkdGg6MTAwJTtoZWlnaHQ6YXV0bztiYWNrZ3JvdW5kOiNmZmZ9PC9zdHlsZT4nXTsKICBzYW1wbGVzLmZvckVhY2goKFtuYW1lLCBwXSkgPT4gewogICAgY29uc3Qgc3ZnID0gcmVuZGVyRml0dGluZyhwKTsKICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKG91dCwgJ2RlbW8tJyArIG5hbWUgKyAnLnN2ZycpLCBzdmcpOwogICAgcGFnZS5wdXNoKGA8ZGl2IGNsYXNzPSJjYXJkIj48aDM+JHtuYW1lfTwvaDM+JHtzdmd9PC9kaXY+YCk7CiAgICBjb25zb2xlLmxvZygnb2sgICcgKyBuYW1lLnBhZEVuZCgxNCkgKyAnIGJ5dGVzPScgKyBzdmcubGVuZ3RoKTsKICB9KTsKICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihvdXQsICdpbmRleC5odG1sJyksIHBhZ2Uuam9pbignXG4nKSk7CiAgY29uc29sZS5sb2coJ1xuZ2VzY2hyaWViZW4gbmFjaDogJyArIG91dCk7Cn0KCn0pKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogbnVsbCk7Cgo8L3NjcmlwdD4KICA8c2NyaXB0PgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBXZWlzcyBBcHBhcmF0ZWJhdSAtIEZpdHRpbmdzLUtvbmZpZ3VyYXRvcgogKiByZW5kZXIuanMgIC0gIEZvdG9yZWFsaXN0aXNjaCB3aXJrZW5kZSBQcm9kdWt0LUFuc2ljaHQgKEVkZWxzdGFobC1Mb29rLCBTVkcpCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFp3ZWl0ZSBEYXJzdGVsbHVuZyBuZWJlbiBkZXIgRElOLVplaWNobnVuZyAoZHJhdy5qcyk6IGdsZWljaGUgcGFyYW1ldHJpc2NoZQogKiBHZW9tZXRyaWUsIGFiZXIgQ2hyb20tL1NhdGluLVZlcmxhZXVmZSwgR2xhbnprYW50ZW4sIHdlaWNoZXIgU2NoYXR0ZW4gLQogKiBhbmdlbGVobnQgYW4gZGllIFByb2R1a3RyZW5kZXJzIGF1ZiB3ZWlzcy1hcHBhcmF0ZWJhdS5kZS4KICoKICogICBXZWlzc0ZpdHRpbmdSZW5kZXIucmVuZGVyRml0dGluZyhwYXJhbXMsIG9wdHMpIC0+IFNWRy1TdHJpbmcKICogICBwYXJhbXMgd2llIGRyYXcuanM6IHt0eXBlLCBkbiwgb2QsIHdhbGwsIGxlbmd0aCwgb2QyLCBicmFuY2hPZCwKICogICAgICAgICAgICAgICAgICAgICAgICBiZW5kUmFkaXVzLCBlY2NlbnRyaWMsIGZsYW5nZU9kLCBnYXNrZXRNYXRlcmlhbCwKICogICAgICAgICAgICAgICAgICAgICAgICBnYXNrZXRDb2xvciwgc3VyZmFjZSwgd2Vya3N0b2ZmLCBjbGFtcFNpemV9CiAqICAgQ0Y6ICAgICAgICAge3R5cGU6J2Nvbm5lY3RmbGFuc2NoJywgb2Q6RGUsIGlubmVyRGlhbWV0ZXI6RGksCiAqICAgICAgICAgICAgICAgIGZsYW5nZU9kOkRmLCBsZW5ndGg6TCwgcHJvZHVjdFNlcmllcywgZG58bGFiZWx9CiAqICAgQ0ZJOiAgICAgICAge3R5cGU6J2Nvbm5lY3RpbmxpbmUnLCBvZDpEZSwgaW5uZXJEaWFtZXRlcjpEaSwgbGVuZ3RoOkwsCiAqICAgICAgICAgICAgICAgIGJyYW5jaEhlaWdodDpZLCBlbmRUeXBlOidCVyd8J1RDJywgZW5kRGlhbWV0ZXI6QXxUQywKICogICAgICAgICAgICAgICAgcHJvZHVjdFNlcmllcywgZG58bGFiZWx9CiAqCiAqIFN0YXRpc2NoZXMgU1ZHLCBrZWluZSBGaWx0ZXIgYXVmIGZpeGVkL3N0aWNreSBFYmVuZW4gLSBUYWJsZXQtc2ljaGVyLgogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwondXNlIHN0cmljdCc7CihmdW5jdGlvbiAocm9vdCkgewoKLyogTnVyIFJ1ZWNrZmFsbCwgby5nYXNrZXRDb2xvciBnZXdpbm50LiBWUCBlcmdhZW56dCBhbSAyMS4wOC4yMDI2IG1pdCBkZW0gV2VydAogKiBhdXMgZGF0YS5qcywgc2llaGUgS29tbWVudGFyIGluIGRyYXcuanMuICovCmNvbnN0IEdBU0tFVF9DT0xPUlMgPSB7IEVQRE06JyMyMzI4MmMnLCBWTVE6JyNlN2UyZDgnLCBGS006JyMyZjdkM2EnLCBQVEZFOicjZjRmNGY0JywgVlA6JyNlZmU5ZGYnIH07CmxldCBVSUQgPSAwOyBjb25zdCB1aWQgPSAoKSA9PiAnd3InICsgKCsrVUlEKTsKY29uc3QgZnggPSBuID0+IE1hdGgucm91bmQobiAqIDEwMCkgLyAxMDA7CmNvbnN0IG51bSA9ICh2LCBkKSA9PiAodHlwZW9mIHYgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHYpKSA\\\/IHYgOiBkOwpjb25zdCBlc2MgPSBzID0+IFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpLnJlcGxhY2UoL1smPD4iJ10vZywgYyA9PiAoewogICcmJzonJmFtcDsnLCAnPCc6JyZsdDsnLCAnPic6JyZndDsnLCAnIic6JyZxdW90OycsICInIjonJiMzOTsnCn0pW2NdKTsKY29uc3QgcG9zaXRpdmUgPSB2ID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2KSAmJiB2ID4gMDsKLyogVEMtQnVuZC1Ib2VoZS4gTXVzcyBaRUlDSEVOR0xFSUNIIHp1IGRyYXcuanMgc2VpbiAoZG9ydCBUQ19CVU5EIC8gdGNCdW5kSG9laGUpLAogKiBzb25zdCB6ZWlnZW4gQW5zaWNodCB1bmQgWmVpY2hudW5nIGZ1ZXIgZGllc2VsYmUgS29uZmlndXJhdGlvbiB2ZXJzY2hpZWRlbiBob2hlCiAqIEJ1bmRlIC0gZ2VuYXUgZGFzIHdhciBhbSAyOC4wNy4yMDI2IGRlciBGYWxsIChiaXMgNCwxMCBtbSBVbnRlcnNjaGllZCwgei4gQi4KICogRE4xMDAgS0w6IFplaWNobnVuZyA4LDQwIGdlZ2VuIEFuc2ljaHQgMTIsNTApLgogKiBCZXp1ZyBpc3QgZGVyIEZMQU5TQ0gt4oyALCB3ZWlsIGVyIGFscyBlaW56aWdlcyBHcm9lc3Nlbm1hc3MgZnVlciBLSywgS0wgdW5kIGRlbgogKiBkaWNrd2FuZGlnZW4gVGFua3N0dXR6ZW4gaWRlbnRpc2NoIGlzdCAtIGdlbmF1IGRhcyBoYXR0ZSBCZXJuZCB2ZXJsYW5ndC4KICogQmVpbSBBZW5kZXJuIElNTUVSIGJlaWRlIERhdGVpZW4gYW5mYXNzZW4uICovCmNvbnN0IFRDX0JVTkQgPSB7IG1pbjogNC41LCBtYXg6IDguNCwgcmVmRmxhbnNjaDogNjQsIG1heEFudGVpbEw6IDAuNSB9OwpmdW5jdGlvbiB0Y0J1bmRIb2VoZShmbGFuZ2VPZCwgTCkgewogIGNvbnN0IHJvaCA9IHBvc2l0aXZlKGZsYW5nZU9kKSA\\\/IGZsYW5nZU9kIC8gVENfQlVORC5yZWZGbGFuc2NoICogVENfQlVORC5tYXggOiBUQ19CVU5ELm1pbjsKICBjb25zdCBoID0gTWF0aC5taW4oVENfQlVORC5tYXgsIE1hdGgubWF4KFRDX0JVTkQubWluLCByb2gpKTsKICByZXR1cm4gcG9zaXRpdmUoTCkgPyBNYXRoLm1pbihoLCBMICogVENfQlVORC5tYXhBbnRlaWxMKSA6IGg7Cn0KY29uc3Qgc2VyaWVzT2sgPSB2ID0+IFsnMS40NDA0JywnMS40NDM1J10uaW5jbHVkZXMoU3RyaW5nKHYgfHwgJycpLnRyaW0oKSk7CmNvbnN0IGhhc1NpemVMYWJlbCA9IHAgPT4gISEocCAmJiAoKHR5cGVvZiBwLmxhYmVsID09PSAnc3RyaW5nJyAmJiBwLmxhYmVsLnRyaW0oKSkgfHwgcC5kbiAhPSBudWxsKSk7CmZ1bmN0aW9uIHZhbGlkQ29ubmVjdGZsYW5zY2gocCkgewogIHJldHVybiAhIShwICYmIHBvc2l0aXZlKHAub2QpICYmIHBvc2l0aXZlKHAuaW5uZXJEaWFtZXRlcikgJiYgcC5pbm5lckRpYW1ldGVyIDwgcC5vZCAmJgogICAgcG9zaXRpdmUocC5mbGFuZ2VPZCkgJiYgcC5pbm5lckRpYW1ldGVyIDwgcC5mbGFuZ2VPZCAmJiBwb3NpdGl2ZShwLmxlbmd0aCkgJiYKICAgIHNlcmllc09rKHAucHJvZHVjdFNlcmllcykgJiYgaGFzU2l6ZUxhYmVsKHApKTsKfQpmdW5jdGlvbiB2YWxpZENvbm5lY3RpbmxpbmUocCkgewogIGNvbnN0IGVuZFR5cGUgPSBTdHJpbmcocCAmJiBwLmVuZFR5cGUgfHwgJycpLnRyaW0oKS50b1VwcGVyQ2FzZSgpOwogIHJldHVybiAhIShwICYmIHBvc2l0aXZlKHAub2QpICYmIHBvc2l0aXZlKHAuaW5uZXJEaWFtZXRlcikgJiYgcC5pbm5lckRpYW1ldGVyIDwgcC5vZCAmJgogICAgcG9zaXRpdmUocC5sZW5ndGgpICYmIHBvc2l0aXZlKHAuYnJhbmNoSGVpZ2h0KSAmJiBwb3NpdGl2ZShwLmVuZERpYW1ldGVyKSAmJgogICAgcG9zaXRpdmUocC51cHBlck91dGVyRGlhbWV0ZXIpICYmIHBvc2l0aXZlKHAudXBwZXJJbm5lckRpYW1ldGVyKSAmJiBwLnVwcGVySW5uZXJEaWFtZXRlciA8IHAudXBwZXJPdXRlckRpYW1ldGVyICYmCiAgICBbJ0JXJywnVEMnXS5pbmNsdWRlcyhlbmRUeXBlKSAmJiBzZXJpZXNPayhwLnByb2R1Y3RTZXJpZXMpICYmIGhhc1NpemVMYWJlbChwKSk7Cn0KZnVuY3Rpb24gc2l6ZUxhYmVsKG8pIHsKICBpZiAodHlwZW9mIG8ubGFiZWwgPT09ICdzdHJpbmcnICYmIG8ubGFiZWwudHJpbSgpKSByZXR1cm4gby5sYWJlbC50cmltKCk7CiAgY29uc3QgZG4gPSBTdHJpbmcoby5kbiA9PSBudWxsID8gJycgOiBvLmRuKS50cmltKCk7CiAgaWYgKCFkbikgcmV0dXJuICcnOwogIHJldHVybiAvXkROXHMqL2kudGVzdChkbikgPyBkbiA6ICdETiAnICsgZG47Cn0KCi8qIENocm9tLVF1ZXJzY2huaXR0IChIaWdobGlnaHQgbWl0dGlnKSArIFNhdGluIChLbGFtbWVyKSAqLwpjb25zdCBDSFJPTUUgPSBbCiAgWzAuMDAsICcjNDk1NTVlJ10sIFswLjA5LCAnIzdlOGM5NiddLCBbMC4yNiwgJyNkNGRjZTInXSwgWzAuNDAsICcjZjlmYmZjJ10sCiAgWzAuNTAsICcjZmZmZmZmJ10sIFswLjYwLCAnI2VhZWZmMyddLCBbMC43NCwgJyNiNGJmYzcnXSwgWzAuODgsICcjNzY4NDhlJ10sIFsxLjAwLCAnIzNmNGI1NCddCl07CmNvbnN0IFNBVElOID0gWwogIFswLjAwLCAnIzVhNjU2ZSddLCBbMC4xNSwgJyM4ZDk5YTInXSwgWzAuMzgsICcjYzhkMWQ3J10sIFswLjUyLCAnI2RkZTRlOSddLAogIFswLjY2LCAnI2FhYjViZCddLCBbMC44NCwgJyM3Yjg3OTEnXSwgWzEuMDAsICcjNTI1ZDY2J10KXTsKY29uc3QgTkFNRSA9IHsgY2xhbXBzdHV0emVuOidDbGFtcC1WZXJiaW5kdW5nJywgYmxpbmRrYXBwZTonQmxpbmRkZWNrZWwnLCBibGluZGRlY2tlbDonQmxpbmRkZWNrZWwnLCBrbGFtbWVyOidLbGFtbWVyJywKICAgICAgICAgICAgICAgYm9nZW45MDonQm9nZW4gOTDCsCcsIGJvZ2VuNDU6J0JvZ2VuIDQ1wrAnLCB0c3R1ZWNrOidULVN0w7xjaycsIHJlZHV6aWVydW5nOidSZWR1emllcnVuZycsCiAgICAgICAgICAgICAgIGRpY2h0dW5nOidEaWNodHVuZycsIGNvbm5lY3RmbGFuc2NoOidDb25uZWN0LUZsYW5zY2ggKENGKScsIGNvbm5lY3RpbmxpbmU6J0Nvbm5lY3QtRmxhbnNjaCBJbmxpbmUgKENGSSknIH07Cgpjb25zdCBzdG9wc1N2ZyA9IChzdG9wcywgdDApID0+IHN0b3BzLm1hcCgoW28sIGNdKSA9PgogIGA8c3RvcCBvZmZzZXQ9IiR7ZngoKHQwID09IG51bGwgPyBvIDogdDAgKyBvICogKDEgLSB0MCkpICogMTAwKX0lIiBzdG9wLWNvbG9yPSIke2N9Ii8+YCkuam9pbignJyk7CmNvbnN0IGxpbkdyYWRBQiA9IChpZCwgeDEsIHkxLCB4MiwgeTIsIHN0b3BzKSA9PgogIGA8bGluZWFyR3JhZGllbnQgaWQ9IiR7aWR9IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IiR7ZngoeDEpfSIgeTE9IiR7ZngoeTEpfSIgeDI9IiR7ZngoeDIpfSIgeTI9IiR7ZngoeTIpfSI+JHtzdG9wc1N2ZyhzdG9wcyl9PC9saW5lYXJHcmFkaWVudD5gOwpjb25zdCByYWRHcmFkID0gKGlkLCBjeCwgY3ksIHIsIHN0b3BzLCB0MCkgPT4KICBgPHJhZGlhbEdyYWRpZW50IGlkPSIke2lkfSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGN4PSIke2Z4KGN4KX0iIGN5PSIke2Z4KGN5KX0iIHI9IiR7Zngocil9Ij4ke3N0b3BzU3ZnKHN0b3BzLCB0MCl9PC9yYWRpYWxHcmFkaWVudD5gOwpjb25zdCBzaGFkb3dHcmFkID0gaWQgPT4gYDxyYWRpYWxHcmFkaWVudCBpZD0iJHtpZH0tc2giIGN4PSIwLjUiIGN5PSIwLjUiIHI9IjAuNSI+CiAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0icmdiYSgyOCwzMiwzNiwwLjI4KSIvPjxzdG9wIG9mZnNldD0iNzAlIiBzdG9wLWNvbG9yPSJyZ2JhKDI4LDMyLDM2LDAuMTEpIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSJyZ2JhKDI4LDMyLDM2LDApIi8+PC9yYWRpYWxHcmFkaWVudD5gOwpjb25zdCBibHVyRGVmID0gKGlkLCBzKSA9PiBgPGZpbHRlciBpZD0iJHtpZH0tYmwiIHg9Ii00MCUiIHk9Ii00MCUiIHdpZHRoPSIxODAlIiBoZWlnaHQ9IjE4MCUiPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IiR7ZngoTWF0aC5tYXgoMC42LCBzKSl9Ii8+PC9maWx0ZXI+YDsKY29uc3QgRURHRSA9ICdzdHJva2U9IiMzOTQzNGIiIHN0cm9rZS1vcGFjaXR5PSIwLjUiIHN0cm9rZS13aWR0aD0iMSInOwpjb25zdCBGT05UID0gImZvbnQtZmFtaWx5PVwiJ1BsdXMgSmFrYXJ0YSBTYW5zJywnS3VtYmggU2Fucycsc3lzdGVtLXVpLHNhbnMtc2VyaWZcIiI7CgpmdW5jdGlvbiBub3JtYWxpemUocCkgewogIGNvbnN0IG8gPSBPYmplY3QuYXNzaWduKHsgdHlwZTonY2xhbXBzdHV0emVuJywgZG46MjUsIG9kOjI5LCB3YWxsOjEuNSwgbGVuZ3RoOjYwLCBjbGFtcFNpemU6J0ROMjUnLAogICAgYmVuZFJhZGl1czo1MCwgb2QyOjIwLCBicmFuY2hPZDpudWxsLCBlY2NlbnRyaWM6ZmFsc2UsIGZsYW5nZU9kOm51bGwsCiAgICBnYXNrZXRNYXRlcmlhbDonRVBETScsIGdhc2tldENvbG9yOm51bGwsIHN1cmZhY2U6J0gzJywgd2Vya3N0b2ZmOicxLjQ0MDQnIH0sIHAgfHwge30pOwogIGNvbnN0IGNvbm5lY3RUeXBlID0gcCAmJiAocC50eXBlID09PSAnY29ubmVjdGZsYW5zY2gnIHx8IHAudHlwZSA9PT0gJ2Nvbm5lY3RpbmxpbmUnKTsKICBvLm9kID0gTWF0aC5tYXgoNCwgbnVtKG8ub2QsIDI5KSk7CiAgby53YWxsID0gTWF0aC5taW4oby5vZCAvIDIgLSAwLjIsIE1hdGgubWF4KDAuMywgbnVtKG8ud2FsbCwgMS41KSkpOwogIC8vIERlY2tlbHN0YWVya2UgZGVzIEJsaW5kZGVja2VscyBsaWVndCBiZWkgNCw3NS0xNCBtbSAtIGRpZSA4LW1tLVVudGVyZ3JlbnplCiAgLy8gZGFyZiBzaWUgbmljaHQgdmVyZmFlbHNjaGVuLiBEZXIgV2VydCBkYXJmIE5VUiBhdXMgZGVtIEF1ZnJ1ZiBrb21tZW47CiAgLy8gZmVobHQgZXIgLT4gbnVsbCAtPiBQbGF0emhhbHRlciAoZmFpbC1jbG9zZWQpLgogIG8ubGVuZ3RoID0gKHAgJiYgcC50eXBlID09PSAnYmxpbmRkZWNrZWwnKQogICAgPyAoaXNGaW5pdGUocC5sZW5ndGgpID8gTnVtYmVyKHAubGVuZ3RoKSA6IG51bGwpCiAgICA6IE1hdGgubWF4KDgsIG51bShvLmxlbmd0aCwgNjApKTsKICAvLyBvZDIgbnVyIGFscyBlY2h0ZXMgTWFzcyBmdWVocmVuLCB3ZW5uIGRlciBBdWZydWZlciB3aXJrbGljaCBlaW5lbiB6d2VpdGVuIMOYIGdlbGllZmVydAogIC8vIGhhdCAoTmFjaHBydWVmLUJlZnVuZCBhKS4gT2huZSBlY2h0ZW4gendlaXRlbiDDmDogbmV1dHJhbGUgR2VvbWV0cmllLCBCZXNjaHJpZnR1bmcgImZvbGd0Ii4KICBvLm9kMlByb3YgPSAhIShwICYmIGlzRmluaXRlKHAub2QyKSk7CiAgby5vZDIgPSBvLm9kMlByb3YgPyBNYXRoLm1heCg0LCBNYXRoLm1pbihvLm9kIC0gMC41LCBwLm9kMikpIDogTWF0aC5tYXgoNCwgTWF0aC5taW4oby5vZCAtIDAuNSwgby5vZCAqIDAuNjYpKTsKICBvLmJyYW5jaE9kID0gbnVtKG8uYnJhbmNoT2QsIG8ub2QpOwogIG8uYnJhbmNoTGVuZ3RoID0gcCAmJiBwb3NpdGl2ZShwLmJyYW5jaExlbmd0aCkgPyBOdW1iZXIocC5icmFuY2hMZW5ndGgpIDogbnVsbDsKICBvLndhbGwyID0gcCAmJiBwb3NpdGl2ZShwLndhbGwyKSA\\\/IE51bWJlcihwLndhbGwyKSA6IG8ud2FsbDsKICAvLyBSMy0zL1IzLTQ6IEJhdWZvcm0gZGVzIFQtU3TDvGNrcywgZXhha3Qgd2llIGluIGRyYXcuanMgbm9ybWFsaXNpZXJ0IC0gbnVyICdUJwogIC8vIChBYmdhbmcgZ2xlaWNoIGxhbmcpIG9kZXIgJ1RLJyAoQWJnYW5nIGt1cnopLCBhbGxlcyBhbmRlcmUgd2lyZCB6dSAnVCcuCiAgLy8gRGllIEFuc2ljaHQgYmVzY2hyaWZ0ZXQgZGFtaXQgbnVyOyBkaWUgR2VvbWV0cmllIGjDpG5ndCB3aWUgaW4gZGVyIFplaWNobnVuZwogIC8vIGFsbGVpbiBhbSBiZWxlZ3RlbiBBYmdhbmdzbWHDnywgbmljaHQgYW4gZGVyIEJhdWZvcm0uCiAgby50Zm9ybSA9IChvLnRmb3JtID09PSAnVEsnKSA\\\/ICdUSycgOiAnVCc7CiAgby5iZW5kUmFkaXVzID0gTWF0aC5tYXgoby5vZCwgbnVtKG8uYmVuZFJhZGl1cywgby5vZCAqIDEuNSkpOwogIG8uZmxhbmdlT2QgPSBudW0oby5mbGFuZ2VPZCwgTWF0aC5tYXgoby5vZCArIDIyLCBvLm9kICogMS4yNSArIDYpKTsKICBvLmlubmVyRGlhbWV0ZXIgPSBudW0oby5pbm5lckRpYW1ldGVyLCBudWxsKTsKICBvLmJyYW5jaEhlaWdodCA9IG51bShvLmJyYW5jaEhlaWdodCwgbnVsbCk7CiAgby5lbmREaWFtZXRlciA9IG51bShvLmVuZERpYW1ldGVyLCBudWxsKTsKICBvLnVwcGVyT3V0ZXJEaWFtZXRlciA9IG51bShvLnVwcGVyT3V0ZXJEaWFtZXRlciwgbnVsbCk7CiAgby51cHBlcklubmVyRGlhbWV0ZXIgPSBudW0oby51cHBlcklubmVyRGlhbWV0ZXIsIG51bGwpOwogIG8uZW5kVHlwZSA9IFN0cmluZyhvLmVuZFR5cGUgfHwgJycpLnRyaW0oKS50b1VwcGVyQ2FzZSgpOwogIG8ucHJvZHVjdFNlcmllcyA9IFN0cmluZyhvLnByb2R1Y3RTZXJpZXMgfHwgJycpLnRyaW0oKS50b1VwcGVyQ2FzZSgpOwogIG8ubGFiZWwgPSB0eXBlb2Ygby5sYWJlbCA9PT0gJ3N0cmluZycgPyBvLmxhYmVsLnRyaW0oKSA6ICcnOwogIC8vIFJ1bmRlIDcgKFctMDU5KTogYmVsZWd0ZSBadXNhdHptYXNzZSBmdWVyIEtsYW1tZXIgLyBCbGluZGRlY2tlbCAvIERpY2h0dW5nLgogIC8vIEVzIGdpbHQgbnVyLCB3YXMgZGVyIEF1ZnJ1ZmVyIGxpZWZlcnQgLSBvaG5lIGRpZXNlIFdlcnRlIGJsZWlidCBkZXIgUGxhdHpoYWx0ZXIuCiAgby5rbGFtbWVyQSA9IG51bShvLmtsYW1tZXJBLCBudWxsKTsKICBvLmtsYW1tZXJUeXAgPSBbJ0tMMScsJ0tMTEknLCdLTEgnXS5pbmRleE9mKFN0cmluZyhvLmtsYW1tZXJUeXAgfHwgJycpLnRvVXBwZXJDYXNlKCkpID49IDAKICAgID8gU3RyaW5nKG8ua2xhbW1lclR5cCkudG9VcHBlckNhc2UoKSA6ICdLTDEnOwogIG8ua2xhbW1lck11dHRlciA9IFN0cmluZyhvLmtsYW1tZXJNdXR0ZXIgfHwgJycpLnRvVXBwZXJDYXNlKCkgPT09ICdTJyA\\\/ICdTJyA6ICdNJzsKICBvLmdhc2tldE9kID0gbnVtKG8uZ2Fza2V0T2QsIG51bGwpOwogIG8uZ2Fza2V0SWQgPSBudW0oby5nYXNrZXRJZCwgbnVsbCk7CiAgby5nYXNrZXRUeXBlID0gU3RyaW5nKG8uZ2Fza2V0VHlwZSB8fCAnJykudG9VcHBlckNhc2UoKSA9PT0gJ0knID8gJ0knIDogJ0lJJzsKICBpZiAoY29ubmVjdFR5cGUpIHsKICAgIG8ud2Vya3N0b2ZmID0gdHlwZW9mIHAud2Vya3N0b2ZmID09PSAnc3RyaW5nJyA\\\/IHAud2Vya3N0b2ZmLnRyaW0oKSA6ICcnOwogICAgby5zdXJmYWNlID0gdHlwZW9mIHAuc3VyZmFjZSA9PT0gJ3N0cmluZycgPyBwLnN1cmZhY2UudHJpbSgpIDogJyc7CiAgfQogIG8ub2RSID0gby5vZCAvIDI7IG8uaW5uUiA9IG8ub2QgLyAyIC0gby53YWxsOwogIG8uZ0NvbCA9IG8uZ2Fza2V0Q29sb3IgfHwgR0FTS0VUX0NPTE9SU1tvLmdhc2tldE1hdGVyaWFsXSB8fCBHQVNLRVRfQ09MT1JTLkVQRE07CiAgcmV0dXJuIG87Cn0KCmZ1bmN0aW9uIGZpdChtaW5YLCBtYXhYLCBtaW5ZLCBtYXhZLCB2dywgdmgsIHBhZCkgewogIGNvbnN0IHMgPSBNYXRoLm1pbigodncgLSBwYWQgKiAyKSAvIChtYXhYIC0gbWluWCksICh2aCAtIHBhZCAqIDIpIC8gKG1heFkgLSBtaW5ZKSk7CiAgY29uc3Qgb3ggPSBwYWQgLSBtaW5YICogcyArICh2dyAtIHBhZCAqIDIgLSAobWF4WCAtIG1pblgpICogcykgLyAyOwogIGNvbnN0IG95ID0gcGFkIC0gbWluWSAqIHMgKyAodmggLSBwYWQgKiAyIC0gKG1heFkgLSBtaW5ZKSAqIHMpIC8gMjsKICByZXR1cm4geyBzLCBYOiB4ID0+IG94ICsgeCAqIHMsIFk6IHkgPT4gb3kgKyB5ICogcyB9Owp9CgpmdW5jdGlvbiBiYWRnZSh2dywgbGFiZWwpIHsKICBjb25zdCB3ID0gTWF0aC5taW4odncgLSAyOCwgbGFiZWwubGVuZ3RoICogNi42ICsgMjYpOwogIGNvbnN0IGZpdHRlZCA9IGxhYmVsLmxlbmd0aCAqIDYuNiArIDI2ID4gdzsKICByZXR1cm4gYDxyZWN0IHg9IiR7ZngodncgLyAyIC0gdyAvIDIpfSIgeT0iMTQiIHdpZHRoPSIke2Z4KHcpfSIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjZWVmMWY0Ii8+CiAgPHRleHQgeD0iJHtmeCh2dyAvIDIpfSIgeT0iMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiICR7Rk9OVH0gZm9udC1zaXplPSIxMSIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzFjMWMxYyIke2ZpdHRlZCA\\\/IGAgdGV4dExlbmd0aD0iJHtmeCh3IC0gMTgpfSIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzImAgOiAnJ30+JHtlc2MobGFiZWwpfTwvdGV4dD5gOwp9Ci8qIFJhLVp1c2F0eiAtIGlkZW50aXNjaCB6dSBkcmF3LmpzOiBudXIgYmVzdGFldGlndGUgV2VydGUgYXVzIGRhdGEuanMsIHNvbnN0IG5pY2h0cy4KICogRGllIGFsdGUgaGFydGtvZGllcnRlIEtldHRlIGhhdCBqZWRlciBPYmVyZmxhZWNoZSBhdXNzZXIgSDEvSDMgcGF1c2NoYWwgIihSYTwwLDQpIgogKiBhbmdlaGFlbmd0IC0gYWxzbyBhdWNoIGplZGVyIGt1ZW5mdGlnZW4gb2huZSBiZXN0YWV0aWd0ZW4gV2VydC4gKi8KZnVuY3Rpb24gcmFTdWZmaXgoc3VyZmFjZSkgewogIGNvbnN0IGxpc3QgPSByb290ICYmIHJvb3QuV0VJU1NfREFUQSAmJiByb290LldFSVNTX0RBVEEub2JlcmZsYWVjaGVuOwogIGlmICghbGlzdCkgcmV0dXJuICcnOwogIGNvbnN0IG8gPSBsaXN0LmZpbmQoeCA9PiB4LmlkID09PSBzdXJmYWNlKTsKICBpZiAoIW8gfHwgby5yYUlubmVuID09IG51bGwpIHJldHVybiAnJzsKICByZXR1cm4gJyAoUmEmbHQ7JyArIFN0cmluZyhvLnJhSW5uZW4pLnJlcGxhY2UoJy4nLCAnLCcpICsgJyknOwp9CmZ1bmN0aW9uIGxlZ2VuZCh2aCwgbykgewogIGNvbnN0IGl0ZW1zID0gW1snQW5zaWNodCcsICdQcm9kdWt0ZGFyc3RlbGx1bmcnXSwgWydXZXJrc3RvZmYnLCBvLndlcmtzdG9mZl0sCiAgICBbJ09iZXJmbMOkY2hlJywgby5zdXJmYWNlICsgcmFTdWZmaXgoby5zdXJmYWNlKV1dLmZpbHRlcihpdCA9PiBpdFsxXSk7CiAgY29uc3QgeTAgPSB2aCAtIDE0IC0gaXRlbXMubGVuZ3RoICogMTU7IGxldCByb3dzID0gJyc7CiAgaXRlbXMuZm9yRWFjaCgoaXQsIGkpID0+IHsKICAgIHJvd3MgKz0gYDx0ZXh0IHg9IjE0IiB5PSIke3kwICsgMTIgKyBpICogMTV9IiAke0ZPTlR9IGZvbnQtc2l6ZT0iMTEiPgogICAgICA8dHNwYW4gZmlsbD0iIzk5OSI+JHtpdFswXX06PC90c3Bhbj48dHNwYW4gZHg9IjQiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiMxYzFjMWMiPiR7aXRbMV19PC90c3Bhbj48L3RleHQ+YDsKICB9KTsKICByZXR1cm4gYDxnIG9wYWNpdHk9IjAuOTUiPiR7cm93c308L2c+YDsKfQpjb25zdCBzdmdXcmFwID0gKHZ3LCB2aCwgZGVmcywgYm9keSwgYmRnLCBsZ2QpID0+CiAgYDxzdmcgdmlld0JveD0iMCAwICR7dnd9ICR7dmh9IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHJvbGU9ImltZyIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCI+CjxkZWZzPiR7ZGVmc308L2RlZnM+PGc+JHtib2R5fTwvZz4ke2JkZ30ke2xnZH08L3N2Zz5gOwoKLyogRmx1ZWdlbG11dHRlciAoQm9semVuICsgMiBGbHVlZ2VsICsgSHViKSwgR3JvZXNzZSB+IHUgKEVpbmhlaXQgcHgpICovCmZ1bmN0aW9uIHdpbmdOdXQoaWRjLCBjeCwgdG9wWSwgdSkgewogIGxldCBiID0gYDxyZWN0IHg9IiR7ZngoY3ggLSB1ICogMC40KX0iIHk9IiR7ZngodG9wWSAtIHUgKiAzKX0iIHdpZHRoPSIke2Z4KHUgKiAwLjgpfSIgaGVpZ2h0PSIke2Z4KHUgKiAzKX0iIHJ4PSIke2Z4KHUgKiAwLjMpfSIgZmlsbD0idXJsKCMke2lkY30pIiAke0VER0V9Lz5gOwogIGZvciAobGV0IGkgPSAxOyBpIDw9IDM7IGkrKykgYiArPSBgPGxpbmUgeDE9IiR7ZngoY3ggLSB1ICogMC40KX0iIHkxPSIke2Z4KHRvcFkgLSBpICogdSAqIDAuNTUpfSIgeDI9IiR7ZngoY3ggKyB1ICogMC40KX0iIHkyPSIke2Z4KHRvcFkgLSBpICogdSAqIDAuNTUpfSIgc3Ryb2tlPSIjNWE2NTZlIiBzdHJva2Utd2lkdGg9IjAuOCIgc3Ryb2tlLW9wYWNpdHk9IjAuNyIvPmA7CiAgY29uc3QgbnkgPSB0b3BZIC0gdSAqIDIuNjsKICBiICs9IGA8ZWxsaXBzZSBjeD0iJHtmeChjeCAtIHUgKiAxLjU1KX0iIGN5PSIke2Z4KG55KX0iIHJ4PSIke2Z4KHUgKiAxLjUpfSIgcnk9IiR7ZngodSAqIDAuNyl9IiB0cmFuc2Zvcm09InJvdGF0ZSgtMjUgJHtmeChjeCAtIHUgKiAxLjU1KX0gJHtmeChueSl9KSIgZmlsbD0idXJsKCMke2lkY30pIiAke0VER0V9Lz5gOwogIGIgKz0gYDxlbGxpcHNlIGN4PSIke2Z4KGN4ICsgdSAqIDEuNTUpfSIgY3k9IiR7ZngobnkpfSIgcng9IiR7ZngodSAqIDEuNSl9IiByeT0iJHtmeCh1ICogMC43KX0iIHRyYW5zZm9ybT0icm90YXRlKDI1ICR7ZngoY3ggKyB1ICogMS41NSl9ICR7ZngobnkpfSkiIGZpbGw9InVybCgjJHtpZGN9KSIgJHtFREdFfS8+YDsKICBiICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGN4KX0iIGN5PSIke2Z4KG55KX0iIHI9IiR7ZngodSAqIDAuNjgpfSIgZmlsbD0iI2Q2ZGRlMiIgJHtFREdFfS8+YDsKICBiICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGN4IC0gdSAqIDAuMil9IiBjeT0iJHtmeChueSAtIHUgKiAwLjIpfSIgcj0iJHtmeCh1ICogMC4yMil9IiBmaWxsPSIjZmZmIiBvcGFjaXR5PSIwLjgiLz5gOwogIHJldHVybiBiOwp9CgovKiAtLSAxKSBDbGFtcC1WZXJiaW5kdW5nIChBc3NlbWJseSkgLyBCbGluZGRlY2tlbCAvIGVpbnplbG5lciBTdHV0emVuIC0tLS0tLS0KICogbW9kZTogZmFsc2V8J2Fzc2VtYmx5JyAtPiBrb21wbGV0dGUgVmVyYmluZHVuZyDCtyB0cnVlfCdjbG9zZWQnIC0+IEJsaW5kZGVja2VsCiAqICAgICAgICdzaW5nbGUnICAgICAgICAgLT4gRUlOIFN0dXR6ZW4gKFRDRC9UQ1MsIEJlcm5kIDE2LjA3LjIwMjYgUGt0LiA5LjIvOS4zKToKICogICAgICAgICAgICAgICAgICAgICAgICAgICBrZWluIHp3ZWl0ZXMgUm9ociwga2VpbmUgRGljaHR1bmcsIGtlaW5lIEtsYW1tZXIuCiAqIEFsdGUgQm9vbGVhbi1BdWZydWZlciBibGVpYmVuIGd1ZWx0aWcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZnVuY3Rpb24gckNsYW1wKG8sIHZ3LCB2aCwgbW9kZSkgewogIGNvbnN0IGNsb3NlZCA9IG1vZGUgPT09IHRydWUgfHwgbW9kZSA9PT0gJ2Nsb3NlZCc7CiAgY29uc3Qgc2luZ2xlID0gbW9kZSA9PT0gJ3NpbmdsZSc7CiAgY29uc3QgZWluemVsbiA9IGNsb3NlZCB8fCBzaW5nbGU7ICAgLy8gYmVpZGUgemVpZ2VuIG51ciBkZW4gbGlua2VuIFN0dXR6ZW4KICBjb25zdCBpZCA9IHVpZCgpOwogIGNvbnN0IFIgPSBvLm9kUiwgZlIgPSBvLmZsYW5nZU9kIC8gMjsKICAvKiBUQy1CdW5kOiBFSU5FIEhvZWhlIGplIEdyb2Vzc2UsIGlkZW50aXNjaCBmdWVyIEtLLCBLTCB1bmQgZGVuIGRpY2t3YW5kaWdlbgogICAqIFRhbmtzdHV0emVuIChCZXJuZCAyNy4wNy4yMDI2LCBXb3JkLUFic2Nobml0dCAzKS4gUmVnZWwgdW5kIEhlcmxlaXR1bmcgc3RlaGVuCiAgICogYmVpIFRDX0JVTkQgLyB0Y0J1bmRIb2VoZSBvYmVuLCB3b3J0Z2xlaWNoIHp1IGRyYXcuanMuCiAgICogRnJ1ZWhlciBoaW5nIGRlciBCdW5kIGhpZXIgYW0gUm9oci3ijIAgVU5EIGFuIGRlciBTdHV0emVubGFlbmdlIC0gZGFkdXJjaCB3YXIgZXIKICAgKiBqZSBHcm9lc3NlIGZ1ZXIgS0ssIEtMIHVuZCBkaWNrd2FuZGlnIHZlcnNjaGllZGVuIGhvY2gsIHVuZCBkaWUgQW5zaWNodCB3aWRlcnNwcmFjaAogICAqIGRlciBaZWljaG51bmcuIEF1ZnRlaWx1bmcgMjoxIGluIEJ1bmRob2VoZSB1bmQgRmFzZSB3aWUgaW4gZHJhdy5qcy4KICAgKiBCZXp1Z3NsYWVuZ2UgaXN0IGJld3Vzc3Qgby5sZW5ndGggKGRhcyBiZWxlZ3RlIEtLL0tML2gtTWFzcyksIE5JQ0hUIGRpZSBmdWVyIGRpZQogICAqIEJpbGR3aXJrdW5nIGdlc3RyZWNrdGUgUm9ocmxhZW5nZSB0TCAtIHNvbnN0IGxpZWZlIGRpZSBEZWNrZWx1bmcgaW5zIExlZXJlLgogICAqIFJlaW4gc2NoZW1hdGlzY2gsIHRyYWVndCBpbiBkZXIgQW5zaWNodCBrZWluZSBNYXNzemFobC4gKi8KICBjb25zdCBidW5kSCA9IHRjQnVuZEhvZWhlKG8uZmxhbmdlT2QsIG8ubGVuZ3RoKTsKICBjb25zdCB0RmwgPSBidW5kSCAqIDIgLyAzOwogIGNvbnN0IGNoID0gYnVuZEggLyAzOwogIGNvbnN0IGdUID0gTWF0aC5tYXgoMi40LCBvLm9kICogMC4xMik7CiAgY29uc3QgY2xhbXBUID0gTWF0aC5tYXgoNC41LCBvLm9kICogMC4yKTsKICBjb25zdCB0TCA9IE1hdGgubWF4KG8ubGVuZ3RoLCBvLm9kICogMC45KTsKICAvLyAnc2luZ2xlJzogRGVyIFN0dXR6ZW4gZW5kZXQgYW4gZGVyIEZsYW5zY2hzdGlybiAoeGYpIC0ga2VpbiBEZWNrZWxhdWZzY2hsYWcgd2llIGJlaW0KICAvLyBCbGluZGRlY2tlbCwga2VpbiB6d2VpdGVyIFNjaGVua2VsIHdpZSBiZWkgZGVyIFZlcmJpbmR1bmcuCiAgY29uc3QgeDAgPSAwLCB4YiA9IHRMLCB4ZiA9IHhiICsgdEZsICsgY2gsIHhnID0geGYgKyBnVCwgeGIyID0geGcgKyB0RmwgKyBjaCwKICAgICAgICB4RW5kID0gY2xvc2VkID8geGYgKyB0RmwgKiAwLjkgOiBzaW5nbGUgPyB4ZiA6IHhiMiArIHRMOwogIGNvbnN0IG51dFUgPSBNYXRoLm1heCgzLjIsIGNsYW1wVCAqIDAuNjIpOwogIGNvbnN0IG1pblkgPSAtKGZSICsgY2xhbXBUKSAtIG51dFUgKiA0LjQsIG1heFkgPSBmUiArIGNsYW1wVCArIDE0OwogIGNvbnN0IEYgPSBmaXQoLTQsIHhFbmQgKyA0LCBtaW5ZLCBtYXhZLCB2dywgdmgsIDQ0KTsKICBjb25zdCB7IHMsIFgsIFkgfSA9IEY7CgogIGNvbnN0IGRlZnMgPQogICAgbGluR3JhZEFCKGlkICsgJ3R1JywgMCwgWSgtUiksIDAsIFkoUiksIENIUk9NRSkgKwogICAgbGluR3JhZEFCKGlkICsgJ2ZsJywgMCwgWSgtZlIpLCAwLCBZKGZSKSwgQ0hST01FKSArCiAgICBsaW5HcmFkQUIoaWQgKyAnY2wnLCAwLCBZKC0oZlIgKyBjbGFtcFQpKSwgMCwgWShmUiArIGNsYW1wVCksIFNBVElOKSArCiAgICBzaGFkb3dHcmFkKGlkKSArIGJsdXJEZWYoaWQsIFIgKiBzICogMC4xKTsKCiAgbGV0IGIgPSAnJzsKICBiICs9IGA8ZWxsaXBzZSBjeD0iJHtmeChYKHhFbmQgLyAyKSl9IiBjeT0iJHtmeChZKGZSICsgY2xhbXBUKSArIDEyKX0iIHJ4PSIke2Z4KHhFbmQgKiBzICogMC41NSl9IiByeT0iJHtmeChNYXRoLm1heCg4LCBSICogcyAqIDAuNSkpfSIgZmlsbD0idXJsKCMke2lkfS1zaCkiLz5gOwogIC8vIFJvaHIgbGlua3MgKCsgcmVjaHRzIHdlbm4gVmVyYmluZHVuZykKICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoeDApKX0iIHk9IiR7ZngoWSgtUikpfSIgd2lkdGg9IiR7ZngoKHhiICsgY2gpICogcyl9IiBoZWlnaHQ9IiR7ZngoMiAqIFIgKiBzKX0iIGZpbGw9InVybCgjJHtpZH10dSkiICR7RURHRX0vPmA7CiAgaWYgKCFlaW56ZWxuKSBiICs9IGA8cmVjdCB4PSIke2Z4KFgoeGIyIC0gY2gpKX0iIHk9IiR7ZngoWSgtUikpfSIgd2lkdGg9IiR7ZngoKHhFbmQgLSB4YjIgKyBjaCkgKiBzKX0iIGhlaWdodD0iJHtmeCgyICogUiAqIHMpfSIgZmlsbD0idXJsKCMke2lkfXR1KSIgJHtFREdFfS8+YDsKICAvLyBGbGFuc2NoLVNjaHVsdGVybgogIGNvbnN0IHNoWDAgPSB4YiAtIDAuNSwgc2hYMSA9IGVpbnplbG4gPyB4RW5kIDogeGIyICsgMC41OwogIGIgKz0gYDxyZWN0IHg9IiR7ZngoWChzaFgwKSl9IiB5PSIke2Z4KFkoLWZSKSl9IiB3aWR0aD0iJHtmeCgoc2hYMSAtIHNoWDApICogcyl9IiBoZWlnaHQ9IiR7ZngoMiAqIGZSICogcyl9IiByeD0iJHtmeChjaCAqIHMpfSIgZmlsbD0idXJsKCMke2lkfWZsKSIgJHtFREdFfS8+YDsKICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoc2hYMCkgLSAyLjUpfSIgeT0iJHtmeChZKC1SKSl9IiB3aWR0aD0iMyIgaGVpZ2h0PSIke2Z4KDIgKiBSICogcyl9IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjE2Ii8+YDsKICBpZiAoIWVpbnplbG4pIGIgKz0gYDxyZWN0IHg9IiR7ZngoWChzaFgxKSAtIDAuNSl9IiB5PSIke2Z4KFkoLVIpKX0iIHdpZHRoPSIzIiBoZWlnaHQ9IiR7ZngoMiAqIFIgKiBzKX0iIGZpbGw9IiMwMDAiIG9wYWNpdHk9IjAuMTYiLz5gOwoKICBpZiAoY2xvc2VkKSB7CiAgICAvLyBCbGluZGRlY2tlbDogU3Rpcm5mbGFlY2hlIG1pdCBoZWxsZXIgS2FudGUKICAgIGIgKz0gYDxyZWN0IHg9IiR7ZngoWCh4RW5kKSAtIDMpfSIgeT0iJHtmeChZKC1mUikgKyAxKX0iIHdpZHRoPSIzLjUiIGhlaWdodD0iJHtmeCgyICogZlIgKiBzIC0gMil9IiByeD0iMS42IiBmaWxsPSIjZWVmMmY1IiBvcGFjaXR5PSIwLjkiLz5gOwogIH0gZWxzZSBpZiAoIXNpbmdsZSkgewogICAgLy8gS2xhbW1lci1CYW5kICsgU2lja2UgKGluIERpY2h0dW5nc2ZhcmJlIGFuZ2VkZXV0ZXQpICsgR2xhbnouCiAgICAvLyBCZWltIGVpbnplbG5lbiBTdHV0emVuICgnc2luZ2xlJykgYmV3dXNzdCBOSUNIVDogS2xhbW1lciB1bmQgRGljaHR1bmcgc2luZCBlaWdlbmUKICAgIC8vIEFydGlrZWwgdW5kIGdlaG9lcmVuIG5pY2h0IGlucyBCaWxkIGVpbmVzIGVpbnplbG5lbiBTdHV0emVucyAoQmVybmQsIFBrdC4gOS4yLzkuMykuCiAgICBjb25zdCBieDAgPSB4YiArIGNoLCBieDEgPSB4YjIgLSBjaCwgYncgPSAoYngxIC0gYngwKSAqIHMsIGJoID0gMiAqIChmUiArIGNsYW1wVCkgKiBzOwogICAgYiArPSBgPHJlY3QgeD0iJHtmeChYKGJ4MCkpfSIgeT0iJHtmeChZKC0oZlIgKyBjbGFtcFQpKSl9IiB3aWR0aD0iJHtmeChidyl9IiBoZWlnaHQ9IiR7ZngoYmgpfSIgcng9IiR7ZngoY2xhbXBUICogcyAqIDAuOSl9IiBmaWxsPSJ1cmwoIyR7aWR9Y2wpIiAke0VER0V9Lz5gOwogICAgYiArPSBgPGxpbmUgeDE9IiR7ZngoWCgoYngwICsgYngxKSAvIDIpKX0iIHkxPSIke2Z4KFkoLShmUiArIGNsYW1wVCAqIDAuNSkpKX0iIHgyPSIke2Z4KFgoKGJ4MCArIGJ4MSkgLyAyKSl9IiB5Mj0iJHtmeChZKGZSICsgY2xhbXBUICogMC41KSl9IiBzdHJva2U9IiR7by5nQ29sfSIgc3Ryb2tlLW9wYWNpdHk9IjAuNzUiIHN0cm9rZS13aWR0aD0iMiIvPmA7CiAgICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoYngwKSArIDIpfSIgeT0iJHtmeChZKC0oZlIgKyBjbGFtcFQgKiAwLjM1KSkpfSIgd2lkdGg9IiR7ZngoYncgLSA0KX0iIGhlaWdodD0iJHtmeChjbGFtcFQgKiAwLjYgKiBzKX0iIGZpbGw9IiNmZmYiIG9wYWNpdHk9IjAuMzgiIHJ4PSIzIiBmaWx0ZXI9InVybCgjJHtpZH0tYmwpIi8+YDsKICAgIGIgKz0gYDxyZWN0IHg9IiR7ZngoWChieDApICsgMil9IiB5PSIke2Z4KFkoZlIgLSBjbGFtcFQgKiAwLjQpKX0iIHdpZHRoPSIke2Z4KGJ3IC0gNCl9IiBoZWlnaHQ9IiR7ZngoY2xhbXBUICogMC41ICogcyl9IiBmaWxsPSIjMzg0MjRhIiBvcGFjaXR5PSIwLjMyIiByeD0iMyIgZmlsdGVyPSJ1cmwoIyR7aWR9LWJsKSIvPmA7CiAgICBiICs9IHdpbmdOdXQoaWQgKyAnY2wnLCBYKChieDAgKyBieDEpIC8gMiksIFkoLShmUiArIGNsYW1wVCkpLCBudXRVICogcyAqIDAuNTUgKyA0KTsKICB9CiAgLy8gR2xhbnotU3RyZWlmZW4gUm9ocmUgKyBTY2h3ZWlzc2VuZGVuCiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKHgwKSArIDIpfSIgeT0iJHtmeChZKC1SICogMC4yNSkpfSIgd2lkdGg9IiR7ZngoKHhiICsgY2gpICogcyAtIDQpfSIgaGVpZ2h0PSIke2Z4KE1hdGgubWF4KDMsIFIgKiAwLjI4ICogcykpfSIgZmlsbD0iI2ZmZiIgb3BhY2l0eT0iMC42IiByeD0iMyIgZmlsdGVyPSJ1cmwoIyR7aWR9LWJsKSIvPmA7CiAgaWYgKCFlaW56ZWxuKSBiICs9IGA8cmVjdCB4PSIke2Z4KFgoeGIyIC0gY2gpICsgMil9IiB5PSIke2Z4KFkoLVIgKiAwLjI1KSl9IiB3aWR0aD0iJHtmeCgoeEVuZCAtIHhiMiArIGNoKSAqIHMgLSA0KX0iIGhlaWdodD0iJHtmeChNYXRoLm1heCgzLCBSICogMC4yOCAqIHMpKX0iIGZpbGw9IiNmZmYiIG9wYWNpdHk9IjAuNiIgcng9IjMiIGZpbHRlcj0idXJsKCMke2lkfS1ibCkiLz5gOwogIGIgKz0gYDxyZWN0IHg9IiR7ZngoWCh4MCkgLSAyKX0iIHk9IiR7ZngoWSgtUikpfSIgd2lkdGg9IjMiIGhlaWdodD0iJHtmeCgyICogUiAqIHMpfSIgZmlsbD0iIzJmMzk0MCIgb3BhY2l0eT0iMC44NSIgcng9IjEiLz5gOwogIGlmICghZWluemVsbikgYiArPSBgPHJlY3QgeD0iJHtmeChYKHhFbmQpIC0gMSl9IiB5PSIke2Z4KFkoLVIpKX0iIHdpZHRoPSIzIiBoZWlnaHQ9IiR7ZngoMiAqIFIgKiBzKX0iIGZpbGw9IiMyZjM5NDAiIG9wYWNpdHk9IjAuODUiIHJ4PSIxIi8+YDsKCiAgY29uc3QgYmRnID0gYmFkZ2UodncsIChjbG9zZWQgPyAnQmxpbmRkZWNrZWwnIDogc2luZ2xlID8gJ1N0dXR6ZW4nIDogJ0NsYW1wLVZlcmJpbmR1bmcnKSArICcgwrcgRE4gJyArIG8uZG4gKyAnIMK3IERJTiAzMjY3NicpOwogIHJldHVybiBzdmdXcmFwKHZ3LCB2aCwgZGVmcywgYiwgYmRnLCBsZWdlbmQodmgsIG8pKTsKfQoKLyogLS0gMikgS2xhbW1lciAoRnJvbnRhbnNpY2h0KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFJ1bmRlIDcgKFctMDU5KTogbnV0enQgZGFzIGJlbGVndGUgQXVzc2VubWFzcyBrbGFtbWVyQSAoIk1hc3NlIEtsZW1tZW4sCiAqIEJsaW5kZGVja2VsLnhsc3giKSwgd2VubiBlcyBkZXIgQXVmcnVmZXIgbGllZmVydC4gS2xhbW1lcnR5cGVuIChiZWxlZ3QsCiAqIEJlcm5kIFIyLTQpOiBLTDEgPSAxIEdlbGVuay8xIFBpbiwgS0xMSSA9IDEgR2VsZW5rLzIgUGlucywgS0xIID0gendlaQogKiBIYWxic2NoYWxlbiBtaXQgMiBHZWxlbmtlbiAoenVzYWV0emxpY2hlIFRyZW5uZnVnZW4pLiBNdXR0ZXI6IE0gPSBGbHVlZ2VsLAogKiBTID0gU2VjaHNrYW50LiAqLwpmdW5jdGlvbiByS2xhbW1lcihvLCB2dywgdmgpIHsKICBjb25zdCBpZCA9IHVpZCgpOwogIGNvbnN0IGZSID0gby5mbGFuZ2VPZCAvIDI7CiAgY29uc3QgaGFzQSA9IHBvc2l0aXZlKG8ua2xhbW1lckEpICYmIG8ua2xhbW1lckEgPiBvLmZsYW5nZU9kOwogIC8vIEZhaWwtY2xvc2VkOiBvaG5lIGJlbGVndGVzIEF1c3Nlbm1hc3MgQSBrZWluZSBLbGFtbWVyIHplaWNobmVuIChSdW5kZSA3KS4KICBpZiAoIWhhc0EpIHJldHVybiByUGxhdHpoYWx0ZXIobywgdncsIHZoKTsKICBjb25zdCBiYW5kID0gby5rbGFtbWVyQSAvIDIgLSBmUjsKICAvLyBJbm5lbmZsYWVjaGUgYmVncmVuemVuOiBvaG5lIFJvaHIt4oyAIChyZWluZSBGbGFuc2NoLUF1c3dhaGwpIGRhcmYgZGllCiAgLy8gQm9ocnVuZyBkaWUgRGljaHRzaXR6LUZsYWVjaGUgbmljaHQgdWViZXJkZWNrZW4uCiAgY29uc3QgYm9yZSA9IE1hdGgubWluKE1hdGgubWF4KDMsIG8ub2RSICogMC45KSwgZlIgKiAwLjYpOwogIGNvbnN0IGV4dCA9IGZSICsgYmFuZDsKICBjb25zdCBGID0gZml0KC1leHQgLSAxNCwgZXh0ICsgMTQsIC1leHQgLSBiYW5kICogMi42LCBleHQgKyAxMCwgdncsIHZoLCA0Nik7CiAgY29uc3QgeyBzIH0gPSBGOyBjb25zdCBjeCA9IEYuWCgwKSwgY3kgPSBGLlkoMCk7CgogIGNvbnN0IGRlZnMgPQogICAgbGluR3JhZEFCKGlkICsgJ3JpbmcnLCAwLCBjeSAtIGV4dCAqIHMsIDAsIGN5ICsgZXh0ICogcywgWwogICAgICBbMCwgJyNlOGVkZjEnXSwgWzAuMjgsICcjYzNjZGQ0J10sIFswLjU1LCAnIzlhYTZhZiddLCBbMC44MiwgJyM3ODg1OGYnXSwgWzEsICcjNjY3MjdjJ11dKSArCiAgICBsaW5HcmFkQUIoaWQgKyAnZmFjZScsIDAsIGN5IC0gZlIgKiBzLCAwLCBjeSArIGZSICogcywgWwogICAgICBbMCwgJyNmMmY1ZjgnXSwgWzAuNDUsICcjZDRkY2UyJ10sIFsxLCAnI2EyYWViNyddXSkgKwogICAgcmFkR3JhZChpZCArICdib3JlJywgY3gsIGN5IC0gYm9yZSAqIHMgKiAwLjI1LCBib3JlICogcyAqIDEuNSwgWwogICAgICBbMCwgJyNmZmZmZmYnXSwgWzAuNywgJyNlZWYxZjQnXSwgWzEsICcjZGRlM2U4J11dKSArCiAgICBzaGFkb3dHcmFkKGlkKSArIGJsdXJEZWYoaWQsIGJhbmQgKiBzICogMC4xMik7CgogIGxldCBiID0gJyc7CiAgYiArPSBgPGVsbGlwc2UgY3g9IiR7ZngoY3gpfSIgY3k9IiR7ZngoY3kgKyBleHQgKiBzICsgMTIpfSIgcng9IiR7ZngoZXh0ICogcyAqIDAuOSl9IiByeT0iJHtmeChleHQgKiBzICogMC4xNCl9IiBmaWxsPSJ1cmwoIyR7aWR9LXNoKSIvPmA7CiAgYiArPSBgPGNpcmNsZSBjeD0iJHtmeChjeCl9IiBjeT0iJHtmeChjeSl9IiByPSIke2Z4KChmUiArIGJhbmQgLyAyKSAqIHMpfSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJ1cmwoIyR7aWR9cmluZykiIHN0cm9rZS13aWR0aD0iJHtmeChiYW5kICogcyl9Ii8+YDsKICBiICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGN4KX0iIGN5PSIke2Z4KGN5KX0iIHI9IiR7ZngoKGZSICsgYmFuZCkgKiBzKX0iIGZpbGw9Im5vbmUiICR7RURHRX0vPmA7CiAgYiArPSBgPGNpcmNsZSBjeD0iJHtmeChjeCl9IiBjeT0iJHtmeChjeSl9IiByPSIke2Z4KGZSICogcyl9IiBmaWxsPSJub25lIiAke0VER0V9Lz5gOwogIGIgKz0gYDxwYXRoIGQ9Ik0gJHtmeChjeCAtIChmUiArIGJhbmQgKiAwLjc4KSAqIHMgKiAwLjc3KX0gJHtmeChjeSAtIChmUiArIGJhbmQgKiAwLjc4KSAqIHMgKiAwLjY0KX0gQSAke2Z4KChmUiArIGJhbmQgKiAwLjc4KSAqIHMpfSAke2Z4KChmUiArIGJhbmQgKiAwLjc4KSAqIHMpfSAwIDAgMSAke2Z4KGN4ICsgKGZSICsgYmFuZCAqIDAuNzgpICogcyAqIDAuNzcpfSAke2Z4KGN5IC0gKGZSICsgYmFuZCAqIDAuNzgpICogcyAqIDAuNjQpfSIKICAgICAgICBmaWxsPSJub25lIiBzdHJva2U9IiNmZmZmZmYiIHN0cm9rZS1vcGFjaXR5PSIwLjU1IiBzdHJva2Utd2lkdGg9IiR7ZngoYmFuZCAqIHMgKiAwLjE4KX0iIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgZmlsdGVyPSJ1cmwoIyR7aWR9LWJsKSIvPmA7CiAgLy8gU2VnbWVudC1GdWdlbjogS0wxL0tMTEkgendlaXRlaWxpZyAoRnVnZW4gbGlua3MvcmVjaHRzICsgTGFzY2hlbikuCiAgWzE4MCwgMF0uZm9yRWFjaChhID0+IHsKICAgIGNvbnN0IGFyID0gYSAqIE1hdGguUEkgLyAxODA7CiAgICBiICs9IGA8bGluZSB4MT0iJHtmeChjeCArIGZSICogcyAqIE1hdGguY29zKGFyKSl9IiB5MT0iJHtmeChjeSArIGZSICogcyAqIE1hdGguc2luKGFyKSl9IiB4Mj0iJHtmeChjeCArIChmUiArIGJhbmQpICogcyAqIE1hdGguY29zKGFyKSl9IiB5Mj0iJHtmeChjeSArIChmUiArIGJhbmQpICogcyAqIE1hdGguc2luKGFyKSl9IiBzdHJva2U9IiMzOTQzNGIiIHN0cm9rZS1vcGFjaXR5PSIwLjY1IiBzdHJva2Utd2lkdGg9IjEuNiIvPmA7CiAgICBjb25zdCBseCA9IGN4ICsgKGZSICsgYmFuZCkgKiBzICogTWF0aC5jb3MoYXIpLCBseSA9IGN5ICsgKGZSICsgYmFuZCkgKiBzICogTWF0aC5zaW4oYXIpOwogICAgYiArPSBgPHJlY3QgeD0iJHtmeChseCAtIGJhbmQgKiBzICogMC4zMil9IiB5PSIke2Z4KGx5IC0gYmFuZCAqIHMgKiAwLjc1KX0iIHdpZHRoPSIke2Z4KGJhbmQgKiBzICogMC42NCl9IiBoZWlnaHQ9IiR7ZngoYmFuZCAqIHMgKiAxLjUpfSIgcng9IiR7ZngoYmFuZCAqIHMgKiAwLjIyKX0iIGZpbGw9InVybCgjJHtpZH1yaW5nKSIgJHtFREdFfS8+YDsKICB9KTsKICAvLyBLTEg6IHp3ZWkgSGFsYnNjaGFsZW4gLT4genVzYWV0emxpY2hlIEZ1Z2VuIG9iZW4vdW50ZW4gKHp3ZWl0ZXMgR2VsZW5rcGFhcikKICBpZiAoby5rbGFtbWVyVHlwID09PSAnS0xIJykgewogICAgWzkwLCAyNzBdLmZvckVhY2goYSA9PiB7CiAgICAgIGNvbnN0IGFyID0gYSAqIE1hdGguUEkgLyAxODA7CiAgICAgIGIgKz0gYDxsaW5lIHgxPSIke2Z4KGN4ICsgZlIgKiBzICogTWF0aC5jb3MoYXIpKX0iIHkxPSIke2Z4KGN5ICsgZlIgKiBzICogTWF0aC5zaW4oYXIpKX0iIHgyPSIke2Z4KGN4ICsgKGZSICsgYmFuZCkgKiBzICogTWF0aC5jb3MoYXIpKX0iIHkyPSIke2Z4KGN5ICsgKGZSICsgYmFuZCkgKiBzICogTWF0aC5zaW4oYXIpKX0iIHN0cm9rZT0iIzM5NDM0YiIgc3Ryb2tlLW9wYWNpdHk9IjAuNjUiIHN0cm9rZS13aWR0aD0iMS42Ii8+YDsKICAgIH0pOwogIH0KICAvLyBGbGFuc2NoLVNjaGVpYmUgKyBEaWNodHNpdHogKyBCb2hydW5nCiAgYiArPSBgPGNpcmNsZSBjeD0iJHtmeChjeCl9IiBjeT0iJHtmeChjeSl9IiByPSIke2Z4KGZSICogcyl9IiBmaWxsPSJ1cmwoIyR7aWR9ZmFjZSkiLz5gOwogIGIgKz0gYDxjaXJjbGUgY3g9IiR7ZngoY3gpfSIgY3k9IiR7ZngoY3kpfSIgcj0iJHtmeCgoYm9yZSArIChmUiAtIGJvcmUpICogMC41KSAqIHMpfSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOGQ5OWEyIiBzdHJva2Utb3BhY2l0eT0iMC41NSIgc3Ryb2tlLXdpZHRoPSIxLjEiLz5gOwogIGIgKz0gYDxjaXJjbGUgY3g9IiR7ZngoY3gpfSIgY3k9IiR7ZngoY3kpfSIgcj0iJHtmeChib3JlICogcyl9IiBmaWxsPSJ1cmwoIyR7aWR9Ym9yZSkiICR7RURHRX0vPmA7CiAgYiArPSBgPGNpcmNsZSBjeD0iJHtmeChjeCl9IiBjeT0iJHtmeChjeSAtIDAuOCl9IiByPSIke2Z4KE1hdGgubWF4KDEsIGJvcmUgKiBzIC0gMS42KSl9IiBmaWxsPSJub25lIiBzdHJva2U9IiM1ZjZiNzQiIHN0cm9rZS1vcGFjaXR5PSIwLjgiIHN0cm9rZS13aWR0aD0iMS42Ii8+YDsKICAvLyBWZXJzY2hsdXNzIG9iZW46IE0gPSBGbHVlZ2VsbXV0dGVyLCBTID0gU2VjaHNrYW50bXV0dGVyIChiZWxlZ3QsIFIyLTQpCiAgaWYgKG8ua2xhbW1lck11dHRlciA9PT0gJ1MnKSB7CiAgICBjb25zdCBodyA9IE1hdGgubWF4KDQsIGJhbmQgKiBzICogMC41KSwgaHkgPSBjeSAtIChmUiArIGJhbmQpICogcyAtIGh3ICogMC45OwogICAgYiArPSBgPHJlY3QgeD0iJHtmeChjeCAtIGh3ICogMC4zNCl9IiB5PSIke2Z4KGh5KX0iIHdpZHRoPSIke2Z4KGh3ICogMC42OCl9IiBoZWlnaHQ9IiR7ZngoaHcgKiAwLjkpfSIgZmlsbD0idXJsKCMke2lkfXJpbmcpIiAke0VER0V9Lz5gOwogICAgY29uc3QgaGV4ID0gW1tjeCAtIGh3LCBoeV0sW2N4IC0gaHcgLyAyLCBoeSAtIGh3ICogMC43Ml0sW2N4ICsgaHcgLyAyLCBoeSAtIGh3ICogMC43Ml0sW2N4ICsgaHcsIGh5XSxbY3ggKyBodyAvIDIsIGh5ICsgaHcgKiAwLjcyXSxbY3ggLSBodyAvIDIsIGh5ICsgaHcgKiAwLjcyXV0KICAgICAgLm1hcChwdCA9PiBmeChwdFswXSkgKyAnLCcgKyBmeChwdFsxXSkpLmpvaW4oJyAnKTsKICAgIGIgKz0gYDxwb2x5Z29uIHBvaW50cz0iJHtoZXh9IiBmaWxsPSJ1cmwoIyR7aWR9cmluZykiICR7RURHRX0vPmA7CiAgfSBlbHNlIHsKICAgIGIgKz0gd2luZ051dChpZCArICdyaW5nJywgY3gsIGN5IC0gKGZSICsgYmFuZCkgKiBzLCBNYXRoLm1heCgzLjQsIGJhbmQgKiBzICogMC40MikpOwogIH0KICAvLyBHZWxlbmsgdW50ZW46IEtMMS9LTEggZWluIFBpbiwgS0xMSSB6d2VpIFBpbnMKICBjb25zdCBneSA9IGN5ICsgKGZSICsgYmFuZCkgKiBzIC0gNDsKICBiICs9IGA8cmVjdCB4PSIke2Z4KGN4IC0gYmFuZCAqIHMgKiAwLjU1KX0iIHk9IiR7ZngoZ3kpfSIgd2lkdGg9IiR7ZngoYmFuZCAqIHMgKiAxLjEpfSIgaGVpZ2h0PSIke2Z4KGJhbmQgKiBzICogMC44NSl9IiByeD0iJHtmeChiYW5kICogcyAqIDAuMyl9IiBmaWxsPSJ1cmwoIyR7aWR9cmluZykiICR7RURHRX0vPmA7CiAgaWYgKG8ua2xhbW1lclR5cCA9PT0gJ0tMTEknKSB7CiAgICBiICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGN4IC0gYmFuZCAqIHMgKiAwLjMpfSIgY3k9IiR7ZngoZ3kgKyBiYW5kICogcyAqIDAuNDIpfSIgcj0iJHtmeChNYXRoLm1heCgxLjYsIGJhbmQgKiBzICogMC4xNikpfSIgZmlsbD0iIzQ1NGY1NyIvPmA7CiAgICBiICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGN4ICsgYmFuZCAqIHMgKiAwLjMpfSIgY3k9IiR7ZngoZ3kgKyBiYW5kICogcyAqIDAuNDIpfSIgcj0iJHtmeChNYXRoLm1heCgxLjYsIGJhbmQgKiBzICogMC4xNikpfSIgZmlsbD0iIzQ1NGY1NyIvPmA7CiAgfSBlbHNlIHsKICAgIGIgKz0gYDxjaXJjbGUgY3g9IiR7ZngoY3gpfSIgY3k9IiR7ZngoZ3kgKyBiYW5kICogcyAqIDAuNDIpfSIgcj0iJHtmeChNYXRoLm1heCgxLjgsIGJhbmQgKiBzICogMC4yKSl9IiBmaWxsPSIjNDU0ZjU3Ii8+YDsKICB9CiAgY29uc3QgYmRnID0gYmFkZ2UodncsICdLbGFtbWVyICcgKyBvLmtsYW1tZXJUeXAgKyAnIMK3IEtsZW1tLeKMgCAnICsgU3RyaW5nKGZ4KG8uZmxhbmdlT2QpKS5yZXBsYWNlKCcuJywgJywnKSArICcgwrcgRElOIDMyNjc2Jyk7CiAgcmV0dXJuIHN2Z1dyYXAodncsIHZoLCBkZWZzLCBiLCBiZGcsIGxlZ2VuZCh2aCwgbykpOwp9CgovKiAtLSAyYikgQmxpbmRkZWNrZWwgKFNlaXRlbmFuc2ljaHQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogUnVuZGUgNyAoVy0wNTkpOiBQcm9kdWt0LURhcnN0ZWxsdW5nIG5hY2ggTWFzc3plaWNobnVuZyBCbGluZGRlY2tlbC5zdmcuCiAqIE51ciBiZWxlZ3RlIE1hc3NlOiBBID0gRmxhbnNjaC3DmCAoZmxhbmdlT2QpLCBMID0gRGVja2Vsc3RhZXJrZSAobGVuZ3RoKS4KICogT2huZSBiZWxlZ3RlIERlY2tlbHN0YWVya2UgLT4gUGxhdHpoYWx0ZXIgc3RhdHQgZ2VyYXRlbmVyIERpY2tlLiAqLwpmdW5jdGlvbiByQmxpbmRkZWNrZWwobywgdncsIHZoKSB7CiAgaWYgKCFwb3NpdGl2ZShvLmZsYW5nZU9kKSB8fCAhcG9zaXRpdmUoby5sZW5ndGgpKSByZXR1cm4gclBsYXR6aGFsdGVyKG8sIHZ3LCB2aCk7CiAgY29uc3QgaWQgPSB1aWQoKTsKICBjb25zdCBBID0gby5mbGFuZ2VPZCwgTCA9IG8ubGVuZ3RoLCByID0gQSAvIDI7CiAgY29uc3QgRiA9IGZpdCgtMiwgTCArIDIsIC1yLCByICsgMTQsIHZ3LCB2aCwgNjApOwogIGNvbnN0IHsgcywgWCwgWSB9ID0gRjsKICBjb25zdCBkZWZzID0KICAgIGxpbkdyYWRBQihpZCArICdjYXAnLCAwLCBZKC1yKSwgMCwgWShyKSwgQ0hST01FKSArCiAgICBsaW5HcmFkQUIoaWQgKyAnZmFjZScsIFgoMCksIDAsIFgoTCksIDAsIFsKICAgICAgWzAsICcjN2U4Yzk2J10sIFswLjM1LCAnI2Q0ZGNlMiddLCBbMC43LCAnI2Y0ZjdmOSddLCBbMSwgJyM5OGE0YWQnXV0pICsKICAgIHNoYWRvd0dyYWQoaWQpICsgYmx1ckRlZihpZCwgTWF0aC5tYXgoMC44LCByICogcyAqIDAuMDYpKTsKICBsZXQgYiA9ICcnOwogIGIgKz0gYDxlbGxpcHNlIGN4PSIke2Z4KFgoTCAvIDIpKX0iIGN5PSIke2Z4KFkocikgKyAxMil9IiByeD0iJHtmeChNYXRoLm1heCgxMCwgQSAqIHMgKiAwLjI0KSl9IiByeT0iJHtmeChNYXRoLm1heCg2LCBBICogcyAqIDAuMSkpfSIgZmlsbD0idXJsKCMke2lkfS1zaCkiLz5gOwogIC8vIFNjaGVpYmUgKENocm9tKSArIFN0aXJuc2VpdGUgbWl0IGVpZ2VuZXIgU2NoYXR0aWVydW5nCiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKDApKX0iIHk9IiR7ZngoWSgtcikpfSIgd2lkdGg9IiR7ZngoTCAqIHMpfSIgaGVpZ2h0PSIke2Z4KEEgKiBzKX0iIGZpbGw9InVybCgjJHtpZH1jYXApIiAke0VER0V9Lz5gOwogIGIgKz0gYDxyZWN0IHg9IiR7ZngoWChMKSAtIE1hdGgubWF4KDEuNSwgTCAqIHMgKiAwLjI4KSl9IiB5PSIke2Z4KFkoLXIpKX0iIHdpZHRoPSIke2Z4KE1hdGgubWF4KDEuNSwgTCAqIHMgKiAwLjI4KSl9IiBoZWlnaHQ9IiR7ZngoQSAqIHMpfSIgZmlsbD0idXJsKCMke2lkfWZhY2UpIiAke0VER0V9Lz5gOwogIC8vIEdsYW56LVN0cmVpZmVuIHVlYmVyIGRpZSBTdGlybmZsYWVjaGUKICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoMCkgKyAxKX0iIHk9IiR7ZngoWSgtciAqIDAuNTUpKX0iIHdpZHRoPSIke2Z4KEwgKiBzIC0gMil9IiBoZWlnaHQ9IiR7ZngoTWF0aC5tYXgoMiwgQSAqIHMgKiAwLjE0KSl9IiBmaWxsPSIjZmZmIiBvcGFjaXR5PSIwLjQ1IiByeD0iMiIgZmlsdGVyPSJ1cmwoIyR7aWR9LWJsKSIvPmA7CiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKDApICsgMSl9IiB5PSIke2Z4KFkociAqIDAuNDUpKX0iIHdpZHRoPSIke2Z4KEwgKiBzIC0gMil9IiBoZWlnaHQ9IiR7ZngoTWF0aC5tYXgoMiwgQSAqIHMgKiAwLjEyKSl9IiBmaWxsPSIjMzg0MjRhIiBvcGFjaXR5PSIwLjMiIHJ4PSIyIiBmaWx0ZXI9InVybCgjJHtpZH0tYmwpIi8+YDsKICBjb25zdCBiZGcgPSBiYWRnZSh2dywgJ0JsaW5kZGVja2VsIMK3IEZsYW5zY2gt4oyAICcgKyBTdHJpbmcoZngoQSkpLnJlcGxhY2UoJy4nLCAnLCcpICsgJyDCtyBESU4gMzI2NzYnKTsKICByZXR1cm4gc3ZnV3JhcCh2dywgdmgsIGRlZnMsIGIsIGJkZywgbGVnZW5kKHZoLCBvKSk7Cn0KCi8qIC0tIDJjKSBEaWNodHVuZyAoUHJvZHVrdC1EYXJzdGVsbHVuZykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogUnVuZGUgNyAoVy0wNTkpOiBSaW5nIGluIERpY2h0dW5nc2ZhcmJlIG5hY2ggZGVuIGdlbGllZmVydGVuIFByb2ZpbGJpbGRlcm4KICogKFR5cCBJIG9obmUgTGlwcGUgLyBUeXAgSUkgbWl0IExpcHBlLCAyMi4wNy4yMDI2KS4gQmVsZWd0ZSBNYXNzZTogRSA9CiAqIGdhc2tldE9kLCBDID0gZ2Fza2V0SWQuIFR5cCBJSSB0cmFlZ3QgZWluZSBlcmhhYmVuZSBMaXBwZSBhbSBBdXNzZW5yYW5kLAogKiBUeXAgSSBpc3QgZ2xhdHQgLSBkYWR1cmNoIHNpbmQgYmVpZGUgc2ljaHRiYXIgdW50ZXJzY2hlaWRiYXIuIE9obmUgYmVsZWd0ZQogKiBFL0MtTWFzc2UgLT4gUGxhdHpoYWx0ZXIuICovCmZ1bmN0aW9uIHJEaWNodHVuZyhvLCB2dywgdmgpIHsKICBpZiAoIXBvc2l0aXZlKG8uZ2Fza2V0T2QpIHx8ICFwb3NpdGl2ZShvLmdhc2tldElkKSB8fCBvLmdhc2tldElkID49IG8uZ2Fza2V0T2QpIHsKICAgIHJldHVybiByUGxhdHpoYWx0ZXIobywgdncsIHZoKTsKICB9CiAgY29uc3QgaWQgPSB1aWQoKTsKICBjb25zdCByRSA9IG8uZ2Fza2V0T2QgLyAyLCByQyA9IG8uZ2Fza2V0SWQgLyAyOwogIGNvbnN0IGxpcHBlID0gby5nYXNrZXRUeXBlID09PSAnSUknOwogIGNvbnN0IGV4dCA9IHJFICogKGxpcHBlID8gMS4xNCA6IDEpOwogIGNvbnN0IEYgPSBmaXQoLWV4dCAtIDgsIGV4dCArIDgsIC1leHQgLSAxMCwgZXh0ICsgMTYsIHZ3LCB2aCwgNTApOwogIGNvbnN0IHsgcyB9ID0gRjsgY29uc3QgY3ggPSBGLlgoMCksIGN5ID0gRi5ZKDApOwogIGNvbnN0IHNoYWRlID0gKGhleCwgZikgPT4gewogICAgY29uc3QgbiA9IHBhcnNlSW50KGhleC5zbGljZSgxKSwgMTYpOwogICAgY29uc3QgY2ggPSB2ID0+IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh2ICogZikpKTsKICAgIHJldHVybiAnIycgKyBbY2goKG4gPj4gMTYpICYgMjU1KSwgY2goKG4gPj4gOCkgJiAyNTUpLCBjaChuICYgMjU1KV0ubWFwKHYgPT4gdi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7CiAgfTsKICBjb25zdCBkZWZzID0KICAgIHJhZEdyYWQoaWQgKyAncmluZycsIGN4LCBjeSAtIHJFICogcyAqIDAuMzUsIHJFICogcyAqIDEuMzUsIFsKICAgICAgWzAsIHNoYWRlKG8uZ0NvbCwgMS41NSldLCBbMC41NSwgby5nQ29sXSwgWzEsIHNoYWRlKG8uZ0NvbCwgMC41NSldXSkgKwogICAgcmFkR3JhZChpZCArICdib3JlJywgY3gsIGN5IC0gckMgKiBzICogMC4yLCByQyAqIHMgKiAxLjQsIFsKICAgICAgWzAsICcjZmZmZmZmJ10sIFswLjcsICcjZWVmMWY0J10sIFsxLCAnI2RkZTNlOCddXSkgKwogICAgc2hhZG93R3JhZChpZCkgKyBibHVyRGVmKGlkLCBNYXRoLm1heCgwLjcsIHJFICogcyAqIDAuMDUpKTsKICBsZXQgYiA9ICcnOwogIGIgKz0gYDxlbGxpcHNlIGN4PSIke2Z4KGN4KX0iIGN5PSIke2Z4KGN5ICsgZXh0ICogcyArIDEyKX0iIHJ4PSIke2Z4KGV4dCAqIHMgKiAwLjg4KX0iIHJ5PSIke2Z4KGV4dCAqIHMgKiAwLjEzKX0iIGZpbGw9InVybCgjJHtpZH0tc2gpIi8+YDsKICBpZiAobGlwcGUpIHsKICAgIC8vIEVyaGFiZW5lIExpcHBlOiBUb3J1cyBhbSBBdXNzZW5yYW5kIG1pdCBHbGFuemthbnRlCiAgICBiICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGN4KX0iIGN5PSIke2Z4KGN5KX0iIHI9IiR7ZngockUgKiBzICogMS4wNSl9IiBmaWxsPSJub25lIiBzdHJva2U9IiR7c2hhZGUoby5nQ29sLCAwLjYpfSIgc3Ryb2tlLXdpZHRoPSIke2Z4KHJFICogcyAqIDAuMTQpfSIvPmA7CiAgICBiICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGN4KX0iIGN5PSIke2Z4KGN5KX0iIHI9IiR7ZngockUgKiBzICogMS4xMil9IiBmaWxsPSJub25lIiAke0VER0V9Lz5gOwogICAgYiArPSBgPHBhdGggZD0iTSAke2Z4KGN4IC0gckUgKiBzICogMC44Nil9ICR7ZngoY3kgLSByRSAqIHMgKiAwLjYyKX0gQSAke2Z4KHJFICogcyAqIDEuMDUpfSAke2Z4KHJFICogcyAqIDEuMDUpfSAwIDAgMSAke2Z4KGN4ICsgckUgKiBzICogMC44Nil9ICR7ZngoY3kgLSByRSAqIHMgKiAwLjYyKX0iCiAgICAgICAgICBmaWxsPSJub25lIiBzdHJva2U9IiNmZmZmZmYiIHN0cm9rZS1vcGFjaXR5PSIwLjY1IiBzdHJva2Utd2lkdGg9IiR7ZngoTWF0aC5tYXgoMiwgckUgKiBzICogMC4wNSkpfSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBmaWx0ZXI9InVybCgjJHtpZH0tYmwpIi8+YDsKICB9CiAgYiArPSBgPGNpcmNsZSBjeD0iJHtmeChjeCl9IiBjeT0iJHtmeChjeSl9IiByPSIke2Z4KHJFICogcyl9IiBmaWxsPSJ1cmwoIyR7aWR9cmluZykiICR7RURHRX0vPmA7CiAgYiArPSBgPGNpcmNsZSBjeD0iJHtmeChjeCl9IiBjeT0iJHtmeChjeSl9IiByPSIke2Z4KHJDICogcyl9IiBmaWxsPSJ1cmwoIyR7aWR9Ym9yZSkiICR7RURHRX0vPmA7CiAgLy8gR2xhbnpwdW5rdCBhdWYgZGVtIFJpbmcKICBiICs9IGA8ZWxsaXBzZSBjeD0iJHtmeChjeCAtIHJFICogcyAqIDAuNCl9IiBjeT0iJHtmeChjeSAtIHJFICogcyAqIDAuNTIpfSIgcng9IiR7ZngoTWF0aC5tYXgoMywgckUgKiBzICogMC4yKSl9IiByeT0iJHtmeChNYXRoLm1heCgyLCByRSAqIHMgKiAwLjEpKX0iIGZpbGw9IiNmZmYiIG9wYWNpdHk9IjAuMzUiIGZpbHRlcj0idXJsKCMke2lkfS1ibCkiLz5gOwogIC8vIFZQIGVyZ2Flbnp0ICgxMS4wOC4yMDI2KSwgc29uc3Qgc3RhbmQgaW4gZGVyIFByb2R1a3RkYXJzdGVsbHVuZyAiVlAiIHN0YXR0ICJQVEZFL0ZLTSIuCiAgY29uc3QgbWF0TmFtZSA9IHsgRVBETTonRVBETScsIFZNUTonU2lsaWtvbiAoVk1RKScsIEZLTTonVml0b24gKEZLTSknLCBQVEZFOidQVEZFJywgVlA6J1BURkUvRktNJyB9W28uZ2Fza2V0TWF0ZXJpYWxdIHx8IG8uZ2Fza2V0TWF0ZXJpYWw7CiAgY29uc3QgYmRnID0gYmFkZ2UodncsICdEaWNodHVuZyDCtyBUeXAgJyArIG8uZ2Fza2V0VHlwZSArIChsaXBwZSA\\\/ICcgKG1pdCBMaXBwZSknIDogJyAob2huZSBMaXBwZSknKSArICcgwrcgJyArIG1hdE5hbWUpOwogIHJldHVybiBzdmdXcmFwKHZ3LCB2aCwgZGVmcywgYiwgYmRnLCBsZWdlbmQodmgsIG8pKTsKfQoKLyogLS0gMykgQm9nZW4gOTAvNDUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmZ1bmN0aW9uIHJCb2dlbihvLCB2dywgdmgsIGRlZykgewogIGNvbnN0IGlkID0gdWlkKCk7CiAgY29uc3QgUiA9IG8ub2RSLCBSYyA9IG8uYmVuZFJhZGl1cywgTCA9IE1hdGgubWF4KG8ubGVuZ3RoLCBvLm9kICogMC43KTsKICBjb25zdCBhbmcgPSBkZWcgKiBNYXRoLlBJIC8gMTgwLCBBID0gLU1hdGguUEkgLyAyLCBCID0gQSArIGFuZzsKICBjb25zdCBvbkMgPSAociwgYSkgPT4gW3IgKiBNYXRoLmNvcyhhKSwgciAqIE1hdGguc2luKGEpXTsKICBjb25zdCB0QiA9IFstTWF0aC5zaW4oQiksIE1hdGguY29zKEIpXTsKICBjb25zdCBleGl0UCA9IChyLCB0KSA9PiB7IGNvbnN0IHAgPSBvbkMociwgQik7IHJldHVybiBbcFswXSArIHRCWzBdICogdCwgcFsxXSArIHRCWzFdICogdF07IH07CiAgLy8gRXh0ZW50CiAgY29uc3QgcHRzID0gW1stTCwgLVJjIC0gUl0sIFstTCwgLVJjICsgUl0sIFswLCAtUmMgLSBSXSwgWzAsIC1SYyArIFJdLAogICAgb25DKFJjICsgUiwgQiksIG9uQyhSYyAtIFIsIEIpLCBleGl0UChSYyArIFIsIEwpLCBleGl0UChSYyAtIFIsIEwpLAogICAgb25DKFJjICsgUiwgKEEgKyBCKSAvIDIpLCBbMCwgMF1dOwogIGNvbnN0IHhzID0gcHRzLm1hcChwID0+IHBbMF0pLCB5cyA9IHB0cy5tYXAocCA9PiBwWzFdKTsKICBjb25zdCBGID0gZml0KE1hdGgubWluKC4uLnhzKSAtIDYsIE1hdGgubWF4KC4uLnhzKSArIDYsIE1hdGgubWluKC4uLnlzKSAtIDYsIE1hdGgubWF4KC4uLnlzKSArIDIwLCB2dywgdmgsIDQ2KTsKICBjb25zdCB7IHMsIFgsIFkgfSA9IEY7CiAgY29uc3QgUCA9IHAgPT4gW1gocFswXSksIFkocFsxXSldOwoKICBjb25zdCBlbSA9IGV4aXRQKFJjICsgUiwgTCAvIDIpLCBlbTIgPSBleGl0UChSYyAtIFIsIEwgLyAyKTsKICBjb25zdCBkZWZzID0KICAgIGxpbkdyYWRBQihpZCArICdlJywgMCwgWSgtUmMgLSBSKSwgMCwgWSgtUmMgKyBSKSwgQ0hST01FKSArCiAgICBsaW5HcmFkQUIoaWQgKyAneCcsIFgoZW1bMF0pLCBZKGVtWzFdKSwgWChlbTJbMF0pLCBZKGVtMlsxXSksIENIUk9NRSkgKwogICAgcmFkR3JhZChpZCArICd0JywgWCgwKSwgWSgwKSwgKFJjICsgUikgKiBzLCBDSFJPTUUsIChSYyAtIFIpIC8gKFJjICsgUikpICsKICAgIHNoYWRvd0dyYWQoaWQpICsgYmx1ckRlZihpZCwgUiAqIHMgKiAwLjEpOwoKICBsZXQgYiA9ICcnOwogIGNvbnN0IGxvd1kgPSBNYXRoLm1heCguLi55cyk7CiAgYiArPSBgPGVsbGlwc2UgY3g9IiR7ZngoWCgoTWF0aC5taW4oLi4ueHMpICsgTWF0aC5tYXgoLi4ueHMpKSAvIDIpKX0iIGN5PSIke2Z4KFkobG93WSkgKyAxMil9IiByeD0iJHtmeCgoTWF0aC5tYXgoLi4ueHMpIC0gTWF0aC5taW4oLi4ueHMpKSAqIHMgKiAwLjQ0KX0iIHJ5PSIke2Z4KE1hdGgubWF4KDksIFIgKiBzICogMC41KSl9IiBmaWxsPSJ1cmwoIyR7aWR9LXNoKSIvPmA7CiAgLy8gRnVlbGx1bmdlbiBPSE5FIEthbnRlbmxpbmllbiAoc29uc3QgUXVlcm5hZWh0ZSBhbiBkZW4gVGFuZ2VudGVuKSAuLi4KICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoLUwpKX0iIHk9IiR7ZngoWSgtUmMgLSBSKSl9IiB3aWR0aD0iJHtmeChMICogcyArIDEpfSIgaGVpZ2h0PSIke2Z4KDIgKiBSICogcyl9IiBmaWxsPSJ1cmwoIyR7aWR9ZSkiLz5gOwogIGNvbnN0IHEgPSBbUChvbkMoUmMgKyBSLCBCKSksIFAoZXhpdFAoUmMgKyBSLCBMKSksIFAoZXhpdFAoUmMgLSBSLCBMKSksIFAob25DKFJjIC0gUiwgQikpXTsKICBiICs9IGA8cG9seWdvbiBwb2ludHM9IiR7cS5tYXAocCA9PiBmeChwWzBdKSArICcsJyArIGZ4KHBbMV0pKS5qb2luKCcgJyl9IiBmaWxsPSJ1cmwoIyR7aWR9eCkiLz5gOwogIGNvbnN0IFJvID0gKFJjICsgUikgKiBzLCBSaSA9IChSYyAtIFIpICogczsKICBjb25zdCBvMCA9IFAob25DKFJjICsgUiwgQSkpLCBvMSA9IFAob25DKFJjICsgUiwgQikpLCBpMSA9IFAob25DKFJjIC0gUiwgQikpLCBpMCA9IFAob25DKFJjIC0gUiwgQSkpOwogIGIgKz0gYDxwYXRoIGQ9Ik0gJHtmeChvMFswXSl9ICR7ZngobzBbMV0pfSBBICR7ZngoUm8pfSAke2Z4KFJvKX0gMCAwIDEgJHtmeChvMVswXSl9ICR7ZngobzFbMV0pfSBMICR7ZngoaTFbMF0pfSAke2Z4KGkxWzFdKX0gQSAke2Z4KFJpKX0gJHtmeChSaSl9IDAgMCAwICR7ZngoaTBbMF0pfSAke2Z4KGkwWzFdKX0gWiIgZmlsbD0idXJsKCMke2lkfXQpIi8+YDsKICAvLyAuLi4gZGFmdWVyIEVJTkUgZHVyY2hnZWhlbmRlIEF1c3NlbmtvbnR1ciB1ZWJlciBkYXMgZ2FuemUgVGVpbAogIGNvbnN0IGUxYyA9IFAoZXhpdFAoUmMgKyBSLCBMKSksIGUyYyA9IFAoZXhpdFAoUmMgLSBSLCBMKSk7CiAgYiArPSBgPHBhdGggZD0iTSAke2Z4KFgoLUwpKX0gJHtmeChZKC1SYyAtIFIpKX0gTCAke2Z4KG8wWzBdKX0gJHtmeChvMFsxXSl9IEEgJHtmeChSbyl9ICR7ZngoUm8pfSAwIDAgMSAke2Z4KG8xWzBdKX0gJHtmeChvMVsxXSl9IEwgJHtmeChlMWNbMF0pfSAke2Z4KGUxY1sxXSl9IEwgJHtmeChlMmNbMF0pfSAke2Z4KGUyY1sxXSl9IEwgJHtmeChpMVswXSl9ICR7ZngoaTFbMV0pfSBBICR7ZngoUmkpfSAke2Z4KFJpKX0gMCAwIDAgJHtmeChpMFswXSl9ICR7ZngoaTBbMV0pfSBMICR7ZngoWCgtTCkpfSAke2Z4KFkoLVJjICsgUikpfSBaIiBmaWxsPSJub25lIiAke0VER0V9Lz5gOwogIC8vIEdsYW56LVN0cmVpZmVuIChFaW50cml0dCAtPiBUb3J1cyAtPiBBdXN0cml0dCkKICBjb25zdCBoUiA9IChSYyArIFIgKiAwLjEyKSAqIHM7CiAgY29uc3QgaDAgPSBQKG9uQyhSYyArIFIgKiAwLjEyLCBBKSksIGgxID0gUChvbkMoUmMgKyBSICogMC4xMiwgQikpLCBoRSA9IFAoZXhpdFAoUmMgKyBSICogMC4xMiwgTCAqIDAuOSkpOwogIGIgKz0gYDxwYXRoIGQ9Ik0gJHtmeChYKC1MICogMC45MikpfSAke2Z4KGgwWzFdKX0gTCAke2Z4KGgwWzBdKX0gJHtmeChoMFsxXSl9IEEgJHtmeChoUil9ICR7ZngoaFIpfSAwIDAgMSAke2Z4KGgxWzBdKX0gJHtmeChoMVsxXSl9IEwgJHtmeChoRVswXSl9ICR7ZngoaEVbMV0pfSIKICAgIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLW9wYWNpdHk9IjAuNzIiIHN0cm9rZS13aWR0aD0iJHtmeChNYXRoLm1heCgzLCBSICogcyAqIDAuMjYpKX0iIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgZmlsdGVyPSJ1cmwoIyR7aWR9LWJsKSIvPmA7CiAgLy8gU2Nod2Vpc3NlbmRlbiAoc2Vua3JlY2h0IHp1ciBqZXdlaWxpZ2VuIEFjaHNlKQogIGIgKz0gYDxsaW5lIHgxPSIke2Z4KFgoLUwpKX0iIHkxPSIke2Z4KFkoLVJjIC0gUikgKyAxKX0iIHgyPSIke2Z4KFgoLUwpKX0iIHkyPSIke2Z4KFkoLVJjICsgUikgLSAxKX0iIHN0cm9rZT0iIzJmMzk0MCIgc3Ryb2tlLW9wYWNpdHk9IjAuODUiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+YDsKICBjb25zdCBlMSA9IFAoZXhpdFAoUmMgKyBSLCBMKSksIGUyID0gUChleGl0UChSYyAtIFIsIEwpKTsKICBiICs9IGA8bGluZSB4MT0iJHtmeChlMVswXSl9IiB5MT0iJHtmeChlMVsxXSl9IiB4Mj0iJHtmeChlMlswXSl9IiB5Mj0iJHtmeChlMlsxXSl9IiBzdHJva2U9IiMyZjM5NDAiIHN0cm9rZS1vcGFjaXR5PSIwLjg1IiBzdHJva2Utd2lkdGg9IjMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPmA7CiAgY29uc3QgYmRnID0gYmFkZ2UodncsICdCb2dlbiAnICsgZGVnICsgJ8KwIMK3IEROICcgKyBvLmRuICsgJyDCtyBESU4gMTE4NjUnKTsKICByZXR1cm4gc3ZnV3JhcCh2dywgdmgsIGRlZnMsIGIsIGJkZywgbGVnZW5kKHZoLCBvKSk7Cn0KCi8qIC0tIDQpIFQtU3R1ZWNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiByVHN0dWVjayhvLCB2dywgdmgpIHsKICBjb25zdCBpZCA9IHVpZCgpOwogIGNvbnN0IFIgPSBvLm9kUiwgTCA9IE1hdGgubWF4KG8ubGVuZ3RoLCBvLm9kICogMiksIGJSID0gby5icmFuY2hPZCAvIDI7CiAgLyogQWJnYW5nc2zDpG5nZTogby5icmFuY2hMZW5ndGggaXN0IGRhcyBiZWxlZ3RlIE1hw58gYXVzIGRlciBLdW5kZW50YWJlbGxlCiAgICogKEZvcm0gVDogU3BhbHRlIEwyLCBGb3JtIFRLOiBTcGFsdGUgTDEgLSBCZXJuZCAyNy4wNy4yMDI2KSwgZ2VtZXNzZW4gYWIKICAgKiBMYXVmLU1pdHRlbGxpbmllOyBnZXplaWNobmV0IHdpcmQgZGllIEjDtmhlIMO8YmVyIGRlciBMYXVma29udHVyLgogICAqIEFDSFRVTkcgLSBvZmZlbmVyIFB1bmt0LCBiZXd1c3N0IE5JQ0hUIGVpZ2VubcOkY2h0aWcgZ2XDpG5kZXJ0OiBGZWhsdAogICAqIGJyYW5jaExlbmd0aCwgZ3JlaWZ0IGhpZXIgZGllc2VsYmUgU2Now6R0enByb3BvcnRpb24gd2llIGluIGRyYXcuanM6NDM5CiAgICogKE1hdGgubWF4KG9kLCBMKjAsNDIpKS4gU2llIGlzdCBLRUlOIGJlbGVndGVzIE1hw58uIFNpZSBzdGVodCBoaWVyIG51ciwgZGFtaXQKICAgKiBBbnNpY2h0IHVuZCBaZWljaG51bmcgbmljaHQgYXVzZWluYW5kZXJsYXVmZW47IGRpZSBBbnNpY2h0IHRyw6RndCBvaG5laGluIGtlaW5lCiAgICogTWHDn3phaGwsIGJlaGF1cHRldCBhbHNvIGtlaW4gTWHDny4gRWluZSBVbXN0ZWxsdW5nIGF1ZiBmYWlsLWNsb3NlZAogICAqIChQbGF0emhhbHRlciBzdGF0dCBTY2jDpHR6dW5nKSBtdXNzIGluIEJFSURFTiBTY2hpY2h0ZW4gZ2VtZWluc2FtIHBhc3NpZXJlbiAtCiAgICogc2llaGUgQmVmdW5kIEIgaW0gw5xiZXJnYWJlYmVyaWNodC4gKi8KICBjb25zdCBiTCA9IG8uYnJhbmNoTGVuZ3RoICE9IG51bGwgPyBNYXRoLm1heCgxLCBvLmJyYW5jaExlbmd0aCAtIFIpIDogTWF0aC5tYXgoby5vZCwgTCAqIDAuNDIpLCB4YyA9IEwgLyAyOwogIGNvbnN0IEYgPSBmaXQoLTMsIEwgKyAzLCAtUiAtIGJMIC0gOCwgUiArIDE2LCB2dywgdmgsIDQ2KTsKICBjb25zdCB7IHMsIFgsIFkgfSA9IEY7CiAgY29uc3QgZGVmcyA9CiAgICBsaW5HcmFkQUIoaWQgKyAncnVuJywgMCwgWSgtUiksIDAsIFkoUiksIENIUk9NRSkgKwogICAgbGluR3JhZEFCKGlkICsgJ2JyJywgWCh4YyAtIGJSKSwgMCwgWCh4YyArIGJSKSwgMCwgQ0hST01FKSArCiAgICBzaGFkb3dHcmFkKGlkKSArIGJsdXJEZWYoaWQsIFIgKiBzICogMC4xKTsKICBsZXQgYiA9ICcnOwogIGIgKz0gYDxlbGxpcHNlIGN4PSIke2Z4KFgoTCAvIDIpKX0iIGN5PSIke2Z4KFkoUikgKyAxMil9IiByeD0iJHtmeChMICogcyAqIDAuNTIpfSIgcnk9IiR7ZngoTWF0aC5tYXgoOSwgUiAqIHMgKiAwLjUpKX0iIGZpbGw9InVybCgjJHtpZH0tc2gpIi8+YDsKICAvLyBBYnp3ZWlnIChoaW50ZXIgZGVtIExhdWYpCiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKHhjIC0gYlIpKX0iIHk9IiR7ZngoWSgtUiAtIGJMKSl9IiB3aWR0aD0iJHtmeCgyICogYlIgKiBzKX0iIGhlaWdodD0iJHtmeCgoYkwgKyBSKSAqIHMpfSIgZmlsbD0idXJsKCMke2lkfWJyKSIgJHtFREdFfS8+YDsKICAvLyBMYXVmCiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKDApKX0iIHk9IiR7ZngoWSgtUikpfSIgd2lkdGg9IiR7ZngoTCAqIHMpfSIgaGVpZ2h0PSIke2Z4KDIgKiBSICogcyl9IiBmaWxsPSJ1cmwoIyR7aWR9cnVuKSIgJHtFREdFfS8+YDsKICAvLyBBTyBhbiBkZXIgRWlubXVlbmR1bmcKICBiICs9IGA8ZWxsaXBzZSBjeD0iJHtmeChYKHhjKSl9IiBjeT0iJHtmeChZKC1SKSl9IiByeD0iJHtmeChiUiAqIHMgKiAxLjI1KX0iIHJ5PSIke2Z4KE1hdGgubWF4KDIuNSwgUiAqIHMgKiAwLjE2KSl9IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjE2IiBmaWx0ZXI9InVybCgjJHtpZH0tYmwpIi8+YDsKICAvLyBHbGFuei1TdHJlaWZlbgogIGIgKz0gYDxyZWN0IHg9IiR7ZngoWCgwKSArIDIpfSIgeT0iJHtmeChZKC1SICogMC4yNSkpfSIgd2lkdGg9IiR7ZngoTCAqIHMgLSA0KX0iIGhlaWdodD0iJHtmeChNYXRoLm1heCgzLCBSICogMC4yOCAqIHMpKX0iIGZpbGw9IiNmZmYiIG9wYWNpdHk9IjAuNiIgcng9IjMiIGZpbHRlcj0idXJsKCMke2lkfS1ibCkiLz5gOwogIGIgKz0gYDxyZWN0IHg9IiR7ZngoWCh4YyAtIGJSICogMC4zNSkpfSIgeT0iJHtmeChZKC1SIC0gYkwpICsgMil9IiB3aWR0aD0iJHtmeChNYXRoLm1heCgzLCBiUiAqIDAuMyAqIHMpKX0iIGhlaWdodD0iJHtmeChiTCAqIHMgKiAwLjg1KX0iIGZpbGw9IiNmZmYiIG9wYWNpdHk9IjAuNTUiIHJ4PSIzIiBmaWx0ZXI9InVybCgjJHtpZH0tYmwpIi8+YDsKICAvLyBTY2h3ZWlzc2VuZGVuCiAgYiArPSBgPGxpbmUgeDE9IiR7ZngoWCgwKSl9IiB5MT0iJHtmeChZKC1SKSArIDEpfSIgeDI9IiR7ZngoWCgwKSl9IiB5Mj0iJHtmeChZKFIpIC0gMSl9IiBzdHJva2U9IiMyZjM5NDAiIHN0cm9rZS1vcGFjaXR5PSIwLjg1IiBzdHJva2Utd2lkdGg9IjMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPmA7CiAgYiArPSBgPGxpbmUgeDE9IiR7ZngoWChMKSl9IiB5MT0iJHtmeChZKC1SKSArIDEpfSIgeDI9IiR7ZngoWChMKSl9IiB5Mj0iJHtmeChZKFIpIC0gMSl9IiBzdHJva2U9IiMyZjM5NDAiIHN0cm9rZS1vcGFjaXR5PSIwLjg1IiBzdHJva2Utd2lkdGg9IjMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPmA7CiAgYiArPSBgPGxpbmUgeDE9IiR7ZngoWCh4YyAtIGJSKSArIDEpfSIgeTE9IiR7ZngoWSgtUiAtIGJMKSl9IiB4Mj0iJHtmeChYKHhjICsgYlIpIC0gMSl9IiB5Mj0iJHtmeChZKC1SIC0gYkwpKX0iIHN0cm9rZT0iIzJmMzk0MCIgc3Ryb2tlLW9wYWNpdHk9IjAuODUiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+YDsKICBjb25zdCByZWQgPSBvLmJyYW5jaE9kICE9PSBvLm9kOwogIC8qIFIzLTMvUjMtNDogQmF1Zm9ybSBtaXQgaW5zIEJhZGdlIC0gdm9yaGVyIHN0YW5kIGluIGRlciBBbnNpY2h0IG51cgogICAqICJULVN0w7xjayBnbGVpY2ggwrcgRE4gMTUgwrcgRElOIDExODY1IiwgRm9ybSBUIHVuZCBGb3JtIFRLIHdhcmVuIGFsc28gbmljaHQKICAgKiB1bnRlcnNjaGVpZGJhciwgb2J3b2hsIGRpZSBaZWljaG51bmcgc2llIGF1c3dlaXN0LiBTY2hyZWlid2Vpc2Ugd2llIGJlaSBkZXIKICAgKiBSZWR1emllcnVuZyBkYXJ1bnRlciAoIihGb3JtIFJLKSIgLyAiKEZvcm0gUkUpIiksIGluaGFsdGxpY2ggaWRlbnRpc2NoIHp1bQogICAqIFplaWNobnVuZ3MtQmFkZ2UgaW4gZHJhdy5qcyAoIsK3IEZvcm0gVCDCtyIpLiAqLwogIGNvbnN0IGJkZyA9IGJhZGdlKHZ3LCAnVC1TdMO8Y2sgJyArIChyZWQgPyAncmVkdXppZXJ0JyA6ICdnbGVpY2gnKSArCiAgICAnIChGb3JtICcgKyBvLnRmb3JtICsgJykgwrcgRE4gJyArIG8uZG4gKyAnIMK3IERJTiAxMTg2NScpOwogIHJldHVybiBzdmdXcmFwKHZ3LCB2aCwgZGVmcywgYiwgYmRnLCBsZWdlbmQodmgsIG8pKTsKfQoKLyogLS0gNSkgUmVkdXppZXJ1bmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiByUmVkdXppZXJ1bmcobywgdncsIHZoKSB7CiAgY29uc3QgaWQgPSB1aWQoKTsKICBjb25zdCBSID0gby5vZFIsIFIyID0gby5vZDIgLyAyLCBMID0gTWF0aC5tYXgoby5sZW5ndGgsIChvLm9kIC0gby5vZDIpICogMi4yLCBvLm9kICogMC45KTsKICBjb25zdCBlY2MgPSAhIW8uZWNjZW50cmljLCBvZmYgPSBlY2MgPyAoUiAtIFIyKSA6IDA7CiAgY29uc3QgRiA9IGZpdCgtMywgTCArIDMsIC1SIC0gOCwgUiArIDE2LCB2dywgdmgsIDUwKTsKICBjb25zdCB7IHMsIFgsIFkgfSA9IEY7CiAgY29uc3QgZGVmcyA9CiAgICBsaW5HcmFkQUIoaWQgKyAnaycsIDAsIFkoLVIpLCAwLCBZKFIpLCBDSFJPTUUpICsKICAgIHNoYWRvd0dyYWQoaWQpICsgYmx1ckRlZihpZCwgUiAqIHMgKiAwLjEpOwogIGxldCBiID0gJyc7CiAgYiArPSBgPGVsbGlwc2UgY3g9IiR7ZngoWChMIC8gMikpfSIgY3k9IiR7ZngoWShSKSArIDEyKX0iIHJ4PSIke2Z4KEwgKiBzICogMC41NSl9IiByeT0iJHtmeChNYXRoLm1heCg5LCBSICogcyAqIDAuNSkpfSIgZmlsbD0idXJsKCMke2lkfS1zaCkiLz5gOwogIGIgKz0gYDxwb2x5Z29uIHBvaW50cz0iJHtmeChYKDApKX0sJHtmeChZKC1SKSl9ICR7ZngoWChMKSl9LCR7ZngoWSgtUjIgKyBvZmYpKX0gJHtmeChYKEwpKX0sJHtmeChZKFIyICsgb2ZmKSl9ICR7ZngoWCgwKSl9LCR7ZngoWShSKSl9IiBmaWxsPSJ1cmwoIyR7aWR9aykiICR7RURHRX0vPmA7CiAgLy8gR2xhbnotU3RyZWlmZW4gZW50bGFuZyBkZXIgKGdnZi4gZ2VuZWlndGVuKSBNaXR0ZQogIGNvbnN0IHkwID0gWSgtUiAqIDAuMjUpLCB5MSA9IFkoLVIyICogMC4yNSArIG9mZik7CiAgYiArPSBgPHBhdGggZD0iTSAke2Z4KFgoMCkgKyAzKX0gJHtmeCh5MCl9IEwgJHtmeChYKEwpIC0gMyl9ICR7ZngoeTEpfSIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utb3BhY2l0eT0iMC42MiIgc3Ryb2tlLXdpZHRoPSIke2Z4KE1hdGgubWF4KDMsIFIgKiBzICogMC4yNikpfSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBmaWxsPSJub25lIiBmaWx0ZXI9InVybCgjJHtpZH0tYmwpIi8+YDsKICAvLyBTY2h3ZWlzc2VuZGVuCiAgYiArPSBgPGxpbmUgeDE9IiR7ZngoWCgwKSl9IiB5MT0iJHtmeChZKC1SKSArIDEpfSIgeDI9IiR7ZngoWCgwKSl9IiB5Mj0iJHtmeChZKFIpIC0gMSl9IiBzdHJva2U9IiMyZjM5NDAiIHN0cm9rZS1vcGFjaXR5PSIwLjg1IiBzdHJva2Utd2lkdGg9IjMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPmA7CiAgYiArPSBgPGxpbmUgeDE9IiR7ZngoWChMKSl9IiB5MT0iJHtmeChZKC1SMiArIG9mZikgKyAxKX0iIHgyPSIke2Z4KFgoTCkpfSIgeTI9IiR7ZngoWShSMiArIG9mZikgLSAxKX0iIHN0cm9rZT0iIzJmMzk0MCIgc3Ryb2tlLW9wYWNpdHk9IjAuODUiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+YDsKICBjb25zdCBkZSA9IG4gPT4gU3RyaW5nKGZ4KG4pKS5yZXBsYWNlKCcuJywgJywnKTsKICAvLyBSMy0yOiBrb256ZW50cmlzY2ggPSBGb3JtIFJLLCBleHplbnRyaXNjaCA9IEZvcm0gUkUgKGdsZWljaGUgQmVzY2hyaWZ0dW5nIHdpZSBkaWUgWmVpY2hudW5nKS4KICBjb25zdCBiZGcgPSBiYWRnZSh2dywgJ1JlZHV6aWVydW5nICcgKyAoZWNjID8gJ2V4emVudHJpc2NoIChGb3JtIFJFKScgOiAna29uemVudHJpc2NoIChGb3JtIFJLKScpICsgJyDCtyAnICsgZGUoby5vZCkgKyAn4oaSJyArIChvLm9kMlByb3YgPyBkZShvLm9kMikgOiAnZm9sZ3QnKSArICcgwrcgRElOIDExODY1Jyk7CiAgcmV0dXJuIHN2Z1dyYXAodncsIHZoLCBkZWZzLCBiLCBiZGcsIGxlZ2VuZCh2aCwgbykpOwp9CgovKiAtLSA2KSBDb25uZWN0LUZsYW5zY2ggLyBDRiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogUHJvZHVrdGRhcnN0ZWxsdW5nIGRlcyBEYXRlbmJsYXR0LVNjaG5pdHRzLiBOdXIgRGUsIERpLCBEZiB1bmQgTCBzdGV1ZXJuCiAqIHByb3BvcnRpb25zcmVsZXZhbnRlIEdlb21ldHJpZTsgSGFyZHdhcmVkZXRhaWxzIGJsZWliZW4gYmV3dXNzdCBzY2hlbWF0aXNjaC4gKi8KZnVuY3Rpb24gckNvbm5lY3RmbGFuc2NoKG8sIHZ3LCB2aCkgewogIGNvbnN0IGlkID0gdWlkKCk7CiAgY29uc3QgRGUgPSBvLm9kLCBEaSA9IG8uaW5uZXJEaWFtZXRlciwgRGYgPSBvLmZsYW5nZU9kLCBMID0gby5sZW5ndGg7CiAgY29uc3QgckRlID0gRGUgLyAyLCByRGkgPSBEaSAvIDIsIHJEZiA9IERmIC8gMjsKICBjb25zdCBib3NzSCA9IE1hdGgubWF4KEwgKiAxLjIsIERmICogMC41OCk7CiAgY29uc3QgdG9wID0gLUwgLSBib3NzSDsKICBjb25zdCBib2x0WCA9IE1hdGgubWluKHJEZSAqIDAuNzgsIHJEZiArIE1hdGgubWF4KDQsIChyRGUgLSByRGYpICogMC40MikpOwogIGNvbnN0IGJvbHRSID0gTWF0aC5tYXgoMi4yLCBNYXRoLm1pbihEZiwgRGUpICogMC4wOSk7CiAgY29uc3QgRiA9IGZpdCgtckRlIC0gYm9sdFIsIHJEZSArIGJvbHRSLCB0b3AgLSBib2x0UiAqIDEuOCwgMCwgdncsIHZoLCA1Mik7CiAgY29uc3QgeyBzLCBYLCBZIH0gPSBGOwogIGNvbnN0IGRlZnMgPQogICAgbGluR3JhZEFCKGlkICsgJ2JvZHknLCAwLCBZKHRvcCksIDAsIFkoMCksIENIUk9NRSkgKwogICAgbGluR3JhZEFCKGlkICsgJ2Jvc3MnLCBYKC1yRGYpLCAwLCBYKHJEZiksIDAsIENIUk9NRSkgKwogICAgbGluR3JhZEFCKGlkICsgJ2JvbHQnLCAwLCBZKHRvcCksIDAsIFkoLUwpLCBTQVRJTikgKwogICAgbGluR3JhZEFCKGlkICsgJ2JvcmUnLCBYKC1yRGkpLCAwLCBYKHJEaSksIDAsIFsKICAgICAgWzAsJyMxMTE4MjAnXSwgWzAuMzUsJyMzNTQxNGEnXSwgWzAuNTUsJyM2MjZmNzgnXSwgWzEsJyMxODIxMjknXV0pICsKICAgIHNoYWRvd0dyYWQoaWQpICsgYmx1ckRlZihpZCwgTWF0aC5tYXgoMC44LCByRGkgKiBzICogMC4wOCkpOwoKICBsZXQgYiA9ICcnOwogIGIgKz0gYDxlbGxpcHNlIGN4PSIke2Z4KFgoMCkpfSIgY3k9IiR7ZngoWSgwKSArIDEzKX0iIHJ4PSIke2Z4KHJEZSAqIHMgKiAxLjA0KX0iIHJ5PSIke2Z4KE1hdGgubWF4KDgsIEwgKiBzICogMC4zNCkpfSIgZmlsbD0idXJsKCMke2lkfS1zaCkiLz5gOwogIGIgKz0gYDxwb2x5Z29uIHBvaW50cz0iJHtmeChYKC1yRGUpKX0sJHtmeChZKDApKX0gJHtmeChYKC1yRGkpKX0sJHtmeChZKDApKX0gJHtmeChYKC1yRGkpKX0sJHtmeChZKC1MKSl9ICR7ZngoWCgtckRmKSl9LCR7ZngoWSgtTCkpfSIgZmlsbD0idXJsKCMke2lkfWJvZHkpIiAke0VER0V9Lz5gOwogIGIgKz0gYDxwb2x5Z29uIHBvaW50cz0iJHtmeChYKHJEZikpfSwke2Z4KFkoLUwpKX0gJHtmeChYKHJEaSkpfSwke2Z4KFkoLUwpKX0gJHtmeChYKHJEaSkpfSwke2Z4KFkoMCkpfSAke2Z4KFgockRlKSl9LCR7ZngoWSgwKSl9IiBmaWxsPSJ1cmwoIyR7aWR9Ym9keSkiICR7RURHRX0vPmA7CiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKC1yRGYpKX0iIHk9IiR7ZngoWSh0b3ApKX0iIHdpZHRoPSIke2Z4KERmICogcyl9IiBoZWlnaHQ9IiR7ZngoYm9zc0ggKiBzKX0iIHJ4PSIke2Z4KE1hdGgubWF4KDEuNSwgcyAqIDAuOCkpfSIgZmlsbD0idXJsKCMke2lkfWJvc3MpIiAke0VER0V9Lz5gOwogIGIgKz0gYDxyZWN0IHg9IiR7ZngoWCgtckRpKSl9IiB5PSIke2Z4KFkodG9wKSAtIDEpfSIgd2lkdGg9IiR7ZngoRGkgKiBzKX0iIGhlaWdodD0iJHtmeCgoLXRvcCkgKiBzICsgMil9IiBmaWxsPSJ1cmwoIyR7aWR9Ym9yZSkiLz5gOwogIGIgKz0gYDxyZWN0IHg9IiR7ZngoWCgtckRpKSArIDEuNSl9IiB5PSIke2Z4KFkodG9wKSArIDIpfSIgd2lkdGg9IiR7ZngoTWF0aC5tYXgoMiwgRGkgKiBzICogMC4xNikpfSIgaGVpZ2h0PSIke2Z4KCgtdG9wKSAqIHMgLSA0KX0iIGZpbGw9IiNmZmYiIG9wYWNpdHk9IjAuMTgiIHJ4PSIyIiBmaWx0ZXI9InVybCgjJHtpZH0tYmwpIi8+YDsKCiAgWy0xLDFdLmZvckVhY2goc2lkZSA9PiB7CiAgICBjb25zdCB4ID0gc2lkZSAqIGJvbHRYOwogICAgY29uc3Qgc2hvdWxkZXJYID0gc2lkZSA+IDAgPyByRGYgOiAtckRmOwogICAgYiArPSBgPHBhdGggZD0iTSR7ZngoWCh4IC0gc2lkZSAqIGJvbHRSICogMS43KSl9LCR7ZngoWSgtTCAqIDAuNzQpKX0gTCR7ZngoWChzaG91bGRlclgpKX0sJHtmeChZKC1MKSl9IiBmaWxsPSJub25lIiBzdHJva2U9IiM0YjU4NjEiIHN0cm9rZS13aWR0aD0iJHtmeChNYXRoLm1heCgyLjIsIGJvbHRSICogcyAqIDAuNDUpKX0iIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPmA7CiAgICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoeCAtIGJvbHRSKSl9IiB5PSIke2Z4KFkodG9wICsgYm9zc0ggKiAwLjEpKX0iIHdpZHRoPSIke2Z4KDIgKiBib2x0UiAqIHMpfSIgaGVpZ2h0PSIke2Z4KGJvc3NIICogMC42MiAqIHMpfSIgcng9IiR7ZngoYm9sdFIgKiBzICogMC4zNSl9IiBmaWxsPSJ1cmwoIyR7aWR9Ym9sdCkiICR7RURHRX0vPmA7CiAgICBiICs9IGA8ZWxsaXBzZSBjeD0iJHtmeChYKHgpKX0iIGN5PSIke2Z4KFkodG9wICsgYm9zc0ggKiAwLjA4KSl9IiByeD0iJHtmeChib2x0UiAqIDEuMjUgKiBzKX0iIHJ5PSIke2Z4KGJvbHRSICogMC43MiAqIHMpfSIgZmlsbD0idXJsKCMke2lkfWJvbHQpIiAke0VER0V9Lz5gOwogIH0pOwogIGIgKz0gYDxsaW5lIHgxPSIke2Z4KFgoLXJEZikpfSIgeTE9IiR7ZngoWSgtTCkpfSIgeDI9IiR7ZngoWChyRGYpKX0iIHkyPSIke2Z4KFkoLUwpKX0iIHN0cm9rZT0iIzE1MWMyMiIgc3Ryb2tlLXdpZHRoPSIyLjIiIG9wYWNpdHk9IjAuODIiLz5gOwogIGIgKz0gYDxwYXRoIGQ9Ik0ke2Z4KFgoLXJEZSAqIDAuOSkpfSwke2Z4KFkoLUwgKiAwLjEyKSl9IFEke2Z4KFgoMCkpfSwke2Z4KFkoLUwgKiAwLjcpKX0gJHtmeChYKHJEZSAqIDAuOSkpfSwke2Z4KFkoLUwgKiAwLjEyKSl9IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iJHtmeChNYXRoLm1heCgyLjUsIEwgKiBzICogMC4xOCkpfSIgc3Ryb2tlLW9wYWNpdHk9IjAuMjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgZmlsdGVyPSJ1cmwoIyR7aWR9LWJsKSIvPmA7CgogIHJldHVybiBzdmdXcmFwKHZ3LCB2aCwgZGVmcywgYiwKICAgIGJhZGdlKHZ3LCAnQ29ubmVjdC1GbGFuc2NoIChDRikgwrcgJyArIHNpemVMYWJlbChvKSksIGxlZ2VuZCh2aCwgbykpOwp9CgovKiAtLSA3KSBDb25uZWN0LUZsYW5zY2ggSW5saW5lIC8gQ0ZJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFRlY2huaXNjaGVyIENocm9tLVNjaG5pdHQ6IERlLCBEaSwgTCwgWSB1bmQgQS9UQyBrb21tZW4gYXVzc2NobGllc3NsaWNoCiAqIGF1cyBkZW0gQXVmcnVmZXIuIE5pY2h0IGdlbGllZmVydGUgRWluemVsbWFzc2UgYmxlaWJlbiB1bmJlc2NocmlmdGV0ZQogKiBTY2hlbWFlbGVtZW50ZSB1bmQgd2VyZGVuIG5pY2h0IGFscyB0ZWNobmlzY2hlIFdlcnRlIGF1c2dlZ2ViZW4uICovCmZ1bmN0aW9uIHJDb25uZWN0aW5saW5lKG8sIHZ3LCB2aCkgewogIGNvbnN0IGlkID0gdWlkKCk7CiAgY29uc3QgRGUgPSBvLm9kLCBEaSA9IG8uaW5uZXJEaWFtZXRlciwgTCA9IG8ubGVuZ3RoLCBZaCA9IG8uYnJhbmNoSGVpZ2h0OwogIGNvbnN0IGVuZFZhbHVlID0gby5lbmREaWFtZXRlciwgaXNUQyA9IG8uZW5kVHlwZSA9PT0gJ1RDJzsKICBjb25zdCB1cHBlckRlID0gby51cHBlck91dGVyRGlhbWV0ZXIsIHVwcGVyRGkgPSBvLnVwcGVySW5uZXJEaWFtZXRlcjsKICBjb25zdCByRGUgPSBEZSAvIDIsIHJEaSA9IERpIC8gMiwgckVuZCA9IGlzVEMgPyBlbmRWYWx1ZSAvIDIgOiByRGU7CiAgY29uc3QgeGMgPSBMIC8gMjsKICBjb25zdCBiYXNlSGFsZiA9IE1hdGgubWluKEwgKiAwLjI0LCBNYXRoLm1heCgxMCwgdXBwZXJEZSAqIDAuNTgpKTsKICBjb25zdCB1cHBlckxlZnQgPSB4YyAtIHVwcGVyRGUgLyAyLCB1cHBlclJpZ2h0ID0geGMgKyB1cHBlckRlIC8gMjsKICBjb25zdCBpbm5lckxlZnQgPSB4YyAtIHVwcGVyRGkgLyAyLCBpbm5lclJpZ2h0ID0geGMgKyB1cHBlckRpIC8gMjsKICBjb25zdCBzZWFsWSA9IC1ZaDsKICBjb25zdCBoZWFkSCA9IE1hdGgubWF4KDcsIHVwcGVyRGUgKiAwLjIpOwogIGNvbnN0IHRvcCA9IHNlYWxZIC0gaGVhZEg7CiAgY29uc3QgZmxhbmdlVCA9IGlzVEMgPyBNYXRoLm1heCgyLCBNYXRoLm1pbihMICogMC4wNDUsIERlICogMC4xMykpIDogMDsKICBjb25zdCBtaW5ZID0gTWF0aC5taW4odG9wIC0gaGVhZEggKiAwLjM0LCAtckVuZCksIG1heFkgPSBNYXRoLm1heChyRW5kLCByRGUpOwogIGNvbnN0IEYgPSBmaXQoMCwgTCwgbWluWSwgbWF4WSwgdncsIHZoLCA1NCk7CiAgY29uc3QgeyBzLCBYLCBZIH0gPSBGOwogIGNvbnN0IHBpcGVYMCA9IGlzVEMgPyBmbGFuZ2VUIDogMCwgcGlwZVgxID0gaXNUQyA\\\/IEwgLSBmbGFuZ2VUIDogTDsKICBjb25zdCBkZWZzID0KICAgIGxpbkdyYWRBQihpZCArICdwaXBlJywgMCwgWSgtckRlKSwgMCwgWShyRGUpLCBDSFJPTUUpICsKICAgIGxpbkdyYWRBQihpZCArICdoZWFkJywgWCh1cHBlckxlZnQpLCAwLCBYKHVwcGVyUmlnaHQpLCAwLCBDSFJPTUUpICsKICAgIGxpbkdyYWRBQihpZCArICdlbmQnLCAwLCBZKC1yRW5kKSwgMCwgWShyRW5kKSwgU0FUSU4pICsKICAgIGxpbkdyYWRBQihpZCArICdib3JlJywgMCwgWSgtckRpKSwgMCwgWShyRGkpLCBbCiAgICAgIFswLCcjMjYzMTNhJ10sIFswLjM1LCcjNGI1OTYzJ10sIFswLjUyLCcjNjU3MzdkJ10sIFsxLCcjMWQyNjJkJ11dKSArCiAgICBzaGFkb3dHcmFkKGlkKSArIGJsdXJEZWYoaWQsIE1hdGgubWF4KDAuOCwgckRlICogcyAqIDAuMDgpKTsKCiAgbGV0IGIgPSAnJzsKICBiICs9IGA8ZWxsaXBzZSBjeD0iJHtmeChYKHhjKSl9IiBjeT0iJHtmeChZKG1heFkpICsgMTQpfSIgcng9IiR7ZngoTCAqIHMgKiAwLjQ4KX0iIHJ5PSIke2Z4KE1hdGgubWF4KDgsIHJEZSAqIHMgKiAwLjUpKX0iIGZpbGw9InVybCgjJHtpZH0tc2gpIi8+YDsKICBiICs9IGA8cmVjdCB4PSIke2Z4KFgocGlwZVgwKSl9IiB5PSIke2Z4KFkoLXJEZSkpfSIgd2lkdGg9IiR7ZngoKHBpcGVYMSAtIHBpcGVYMCkgKiBzKX0iIGhlaWdodD0iJHtmeChEZSAqIHMpfSIgcng9IiR7ZngoTWF0aC5tYXgoMSwgckRlICogcyAqIDAuMDgpKX0iIGZpbGw9InVybCgjJHtpZH1waXBlKSIgJHtFREdFfS8+YDsKICBiICs9IGA8cmVjdCB4PSIke2Z4KFgocGlwZVgwKSAtIDEpfSIgeT0iJHtmeChZKC1yRGkpKX0iIHdpZHRoPSIke2Z4KChwaXBlWDEgLSBwaXBlWDApICogcyArIDIpfSIgaGVpZ2h0PSIke2Z4KERpICogcyl9IiBmaWxsPSJ1cmwoIyR7aWR9Ym9yZSkiLz5gOwogIGIgKz0gYDxyZWN0IHg9IiR7ZngoWChwaXBlWDApICsgMyl9IiB5PSIke2Z4KFkoLXJEZSAqIDAuNDIpKX0iIHdpZHRoPSIke2Z4KE1hdGgubWF4KDUsIChwaXBlWDEgLSBwaXBlWDApICogcyAtIDYpKX0iIGhlaWdodD0iJHtmeChNYXRoLm1heCgyLjUsIHJEZSAqIHMgKiAwLjIyKSl9IiBmaWxsPSIjZmZmIiBvcGFjaXR5PSIwLjQyIiByeD0iMyIgZmlsdGVyPSJ1cmwoIyR7aWR9LWJsKSIvPmA7CgogIGlmIChpc1RDKSB7CiAgICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoMCkpfSIgeT0iJHtmeChZKC1yRW5kKSl9IiB3aWR0aD0iJHtmeChmbGFuZ2VUICogcyl9IiBoZWlnaHQ9IiR7ZngoMiAqIHJFbmQgKiBzKX0iIHJ4PSIke2Z4KE1hdGgubWF4KDEuMiwgZmxhbmdlVCAqIHMgKiAwLjI1KSl9IiBmaWxsPSJ1cmwoIyR7aWR9ZW5kKSIgJHtFREdFfS8+YDsKICAgIGIgKz0gYDxyZWN0IHg9IiR7ZngoWChMIC0gZmxhbmdlVCkpfSIgeT0iJHtmeChZKC1yRW5kKSl9IiB3aWR0aD0iJHtmeChmbGFuZ2VUICogcyl9IiBoZWlnaHQ9IiR7ZngoMiAqIHJFbmQgKiBzKX0iIHJ4PSIke2Z4KE1hdGgubWF4KDEuMiwgZmxhbmdlVCAqIHMgKiAwLjI1KSl9IiBmaWxsPSJ1cmwoIyR7aWR9ZW5kKSIgJHtFREdFfS8+YDsKICB9IGVsc2UgewogICAgY29uc3QgYSA9IE1hdGgubWluKGVuZFZhbHVlLCBMKTsKICAgIFthLCBMIC0gYV0uZm9yRWFjaCh4ID0+IHsKICAgICAgYiArPSBgPGxpbmUgeDE9IiR7ZngoWCh4KSl9IiB5MT0iJHtmeChZKC1yRGUpICsgMSl9IiB4Mj0iJHtmeChYKHgpKX0iIHkyPSIke2Z4KFkockRlKSAtIDEpfSIgc3Ryb2tlPSIjMmYzOTQwIiBzdHJva2Utb3BhY2l0eT0iMC44MiIgc3Ryb2tlLXdpZHRoPSIyIi8+YDsKICAgIH0pOwogIH0KCiAgY29uc3QgbGVmdCA9IHhjIC0gYmFzZUhhbGYsIHJpZ2h0ID0geGMgKyBiYXNlSGFsZjsKICBiICs9IGA8cGF0aCBkPSJNJHtmeChYKGxlZnQpKX0sJHtmeChZKC1yRGUpKX0gTCR7ZngoWCh1cHBlckxlZnQpKX0sJHtmeChZKHNlYWxZKSl9IEwke2Z4KFgodXBwZXJSaWdodCkpfSwke2Z4KFkoc2VhbFkpKX0gTCR7ZngoWChyaWdodCkpfSwke2Z4KFkoLXJEZSkpfSBaIiBmaWxsPSJ1cmwoIyR7aWR9aGVhZCkiICR7RURHRX0vPmA7CiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKHVwcGVyTGVmdCkpfSIgeT0iJHtmeChZKHRvcCkpfSIgd2lkdGg9IiR7ZngodXBwZXJEZSAqIHMpfSIgaGVpZ2h0PSIke2Z4KGhlYWRIICogcyl9IiByeD0iJHtmeChNYXRoLm1heCgxLjQsIGhlYWRIICogcyAqIDAuMDgpKX0iIGZpbGw9InVybCgjJHtpZH1oZWFkKSIgJHtFREdFfS8+YDsKICBiICs9IGA8cGF0aCBkPSJNJHtmeChYKGlubmVyTGVmdCkpfSwke2Z4KFkodG9wKSAtIDEpfSBMJHtmeChYKGlubmVyTGVmdCkpfSwke2Z4KFkoLXJEZSAqIDAuMjIpKX0KICAgIFEke2Z4KFgoeGMpKX0sJHtmeChZKHJEaSAqIDAuOTIpKX0gJHtmeChYKGlubmVyUmlnaHQpKX0sJHtmeChZKC1yRGUgKiAwLjIyKSl9CiAgICBMJHtmeChYKGlubmVyUmlnaHQpKX0sJHtmeChZKHRvcCkgLSAxKX0gWiIgZmlsbD0idXJsKCMke2lkfWJvcmUpIiAke0VER0V9Lz5gOwogIFstMSwxXS5mb3JFYWNoKHNpZGUgPT4gewogICAgY29uc3QgYnggPSB4YyArIHNpZGUgKiB1cHBlckRlICogMC41NiwgYnIgPSBNYXRoLm1heCgxLjgsIHVwcGVyRGUgKiAwLjA1NSk7CiAgICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoYnggLSBicikpfSIgeT0iJHtmeChZKHRvcCArIGhlYWRIICogMC4wOCkpfSIgd2lkdGg9IiR7ZngoMiAqIGJyICogcyl9IiBoZWlnaHQ9IiR7ZngoaGVhZEggKiAwLjg2ICogcyl9IiByeD0iJHtmeChiciAqIHMgKiAwLjM1KX0iIGZpbGw9InVybCgjJHtpZH1lbmQpIiAke0VER0V9Lz5gOwogICAgYiArPSBgPGVsbGlwc2UgY3g9IiR7ZngoWChieCkpfSIgY3k9IiR7ZngoWSh0b3ApKX0iIHJ4PSIke2Z4KGJyICogMS4yNSAqIHMpfSIgcnk9IiR7ZngoYnIgKiAwLjc1ICogcyl9IiBmaWxsPSJ1cmwoIyR7aWR9ZW5kKSIgJHtFREdFfS8+YDsKICB9KTsKICBiICs9IGA8bGluZSB4MT0iJHtmeChYKHVwcGVyTGVmdCkpfSIgeTE9IiR7ZngoWShzZWFsWSkpfSIgeDI9IiR7ZngoWCh1cHBlclJpZ2h0KSl9IiB5Mj0iJHtmeChZKHNlYWxZKSl9IiBzdHJva2U9IiMxNTFjMjIiIHN0cm9rZS13aWR0aD0iMiIgb3BhY2l0eT0iMC44MiIvPmA7CgogIHJldHVybiBzdmdXcmFwKHZ3LCB2aCwgZGVmcywgYiwKICAgIGJhZGdlKHZ3LCAnQ29ubmVjdC1GbGFuc2NoIElubGluZSAoQ0ZJKSDCtyAnICsKICAgICAgKGlzVEMgPyAnVHJpLUNsYW1wJyA6ICdCdXR0IFdlbGQnKSArICcgwrcgJyArIHNpemVMYWJlbChvKSksIGxlZ2VuZCh2aCwgbykpOwp9CgovKiAtLSBQbGF0emhhbHRlcjogdW5iZWthbm50ZXIgLyBuaWNodC16ZWljaGVuYmFyZXIgc3ZnVHlwZSAoTmFjaHBydWVmLUJlZnVuZCBiKSAtLQogKiBGYWVsbHQgbnVyIG5vY2ggYW4sIHdlbm4gZWluIGJlbGVndGVzIFBmbGljaHRtYXNzIGZlaGx0ICh6LiBCLiBEaWNodHVuZyBvaG5lCiAqIEUvQywgQmxpbmRkZWNrZWwgb2huZSBEZWNrZWxzdGFlcmtlKSBvZGVyIGVpbiBzdmdUeXBlIGdhbnogdW5iZWthbm50IGlzdC4KICogU3RhdHQgc3RpbGwgZWluZSBmYWxzY2hlIENsYW1wdmVyYmluZHVuZyAoZnJ1ZWhlcjogZGVmYXVsdCAtPiByQ2xhbXApIHp1CiAqIHJlbmRlcm4sIGVpbiBrbGFyZXIgIlplaWNobnVuZyBmb2xndCItSGlud2Vpcy4gRXMgd2lyZCBCRVdVU1NUIGtlaW4gRml0dGluZwogKiBnZXplaWNobmV0LiAqLwpmdW5jdGlvbiByUGxhdHpoYWx0ZXIobywgdncsIHZoKSB7CiAgY29uc3QgY3ggPSB2dyAvIDIsIGN5ID0gdmggLyAyOwogIGNvbnN0IGJ3ID0gTWF0aC5taW4oMzgwLCB2dyAtIDg4KSwgYmggPSAxMzI7CiAgbGV0IGIgPSAnJzsKICBiICs9IGA8cmVjdCB4PSIke2Z4KGN4IC0gYncgLyAyKX0iIHk9IiR7ZngoY3kgLSBiaCAvIDIgLSA2KX0iIHdpZHRoPSIke2Z4KGJ3KX0iIGhlaWdodD0iJHtmeChiaCl9IiByeD0iMTQiIGZpbGw9IiNmNGY2ZjgiIHN0cm9rZT0iIzhhOGY5NiIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjcgNSIvPmA7CiAgYiArPSBgPHBhdGggZD0iTSR7ZngoY3ggLSAyNCl9LCR7ZngoY3kgLSAxMCl9IGwxNCwtMTQgMTAsMTAgMjAsLTIyIE0ke2Z4KGN4IC0gMjQpfSwke2Z4KGN5ICsgOCl9IGg1OCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFjIiBzdHJva2Utd2lkdGg9IjEuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+YDsKICBiICs9IGA8dGV4dCB4PSIke2Z4KGN4KX0iIHk9IiR7ZngoY3kgKyAzNCl9IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiAke0ZPTlR9IGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiMxYzFjMWMiPlplaWNobnVuZyBmb2xndDwvdGV4dD5gOwogIHJldHVybiBzdmdXcmFwKHZ3LCB2aCwgJycsIGIsIGJhZGdlKHZ3LCAnWmVpY2hudW5nIGZvbGd0JyksIGxlZ2VuZCh2aCwgbykpOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IERpc3BhdGNoICovCmZ1bmN0aW9uIHJlbmRlckZpdHRpbmcocGFyYW1zLCBvcHRzKSB7CiAgb3B0cyA9IG9wdHMgfHwge307CiAgY29uc3QgdncgPSBvcHRzLndpZHRoIHx8IDc2MCwgdmggPSBvcHRzLmhlaWdodCB8fCA0NDA7CiAgY29uc3QgcmVxdWVzdGVkVHlwZSA9IHBhcmFtcyAmJiBwYXJhbXMudHlwZTsKICBjb25zdCBpbnZhbGlkQ29ubmVjdCA9IChyZXF1ZXN0ZWRUeXBlID09PSAnY29ubmVjdGZsYW5zY2gnICYmICF2YWxpZENvbm5lY3RmbGFuc2NoKHBhcmFtcykpIHx8CiAgICAocmVxdWVzdGVkVHlwZSA9PT0gJ2Nvbm5lY3RpbmxpbmUnICYmICF2YWxpZENvbm5lY3RpbmxpbmUocGFyYW1zKSk7CiAgY29uc3QgbyA9IG5vcm1hbGl6ZShwYXJhbXMpOwogIGlmIChpbnZhbGlkQ29ubmVjdCkgcmV0dXJuIHJQbGF0emhhbHRlcihvLCB2dywgdmgpOwogIHN3aXRjaCAoby50eXBlKSB7CiAgICBjYXNlICdjbGFtcHN0dXR6ZW4nOiByZXR1cm4gckNsYW1wKG8sIHZ3LCB2aCwgZmFsc2UpOwogICAgLy8gRWluemVsbmVyIFN0dXR6ZW4gKFRDRC9UQ1MpOiBrZWluIHp3ZWl0ZXMgUm9ociwga2VpbmUgRGljaHR1bmcsIGtlaW5lIEtsYW1tZXIuCiAgICBjYXNlICdzdHV0emVuJzogICAgICByZXR1cm4gckNsYW1wKG8sIHZ3LCB2aCwgJ3NpbmdsZScpOwogICAgY2FzZSAnYmxpbmRrYXBwZSc6ICAgcmV0dXJuIHJDbGFtcChvLCB2dywgdmgsIHRydWUpOwogICAgLy8gUnVuZGUgNyAoVy0wNTkpOiByZWluZSBGbGFuc2NoLURhcnN0ZWxsdW5nIG9obmUgUm9ocm1hc3NlIChUeXAgQkQpLgogICAgY2FzZSAnYmxpbmRkZWNrZWwnOiAgcmV0dXJuIHJCbGluZGRlY2tlbChvLCB2dywgdmgpOwogICAgY2FzZSAna2xhbW1lcic6ICAgICAgcmV0dXJuIHJLbGFtbWVyKG8sIHZ3LCB2aCk7CiAgICBjYXNlICdib2dlbjkwJzogICAgICByZXR1cm4gckJvZ2VuKG8sIHZ3LCB2aCwgOTApOwogICAgY2FzZSAnYm9nZW40NSc6ICAgICAgcmV0dXJuIHJCb2dlbihvLCB2dywgdmgsIDQ1KTsKICAgIGNhc2UgJ3RzdHVlY2snOiAgICAgIHJldHVybiByVHN0dWVjayhvLCB2dywgdmgpOwogICAgY2FzZSAncmVkdXppZXJ1bmcnOiAgcmV0dXJuIHJSZWR1emllcnVuZyhvLCB2dywgdmgpOwogICAgY2FzZSAnY29ubmVjdGZsYW5zY2gnOiByZXR1cm4gckNvbm5lY3RmbGFuc2NoKG8sIHZ3LCB2aCk7CiAgICBjYXNlICdjb25uZWN0aW5saW5lJzogIHJldHVybiByQ29ubmVjdGlubGluZShvLCB2dywgdmgpOwogICAgLy8gVHlwIEQgJ2RpY2h0dW5nJzogZWNodGUgRGFyc3RlbGx1bmcgbWl0IGJlbGVndGVuIEUvQy1NYXNzZW47IG9obmUgc2llCiAgICAvLyBmYWVsbHQgckRpY2h0dW5nIHNlbGJzdCBhdWYgZGVuIFBsYXR6aGFsdGVyIChOSUUgckNsYW1wKS4KICAgIGNhc2UgJ2RpY2h0dW5nJzogICAgIHJldHVybiByRGljaHR1bmcobywgdncsIHZoKTsKICAgIC8vIFNpY2hlcmhlaXRzbmV0ejogamVkZXIgdW5iZWthbm50ZSBzdmdUeXBlIGJla29tbXQgZGVuIFBsYXR6aGFsdGVyIChOYWNocHJ1ZWYtQmVmdW5kIGIpLgogICAgZGVmYXVsdDogICAgICAgICAgICAgcmV0dXJuIHJQbGF0emhhbHRlcihvLCB2dywgdmgpOwogIH0KfQoKY29uc3QgQVBJID0geyByZW5kZXJGaXR0aW5nLCBOQU1FIH07CmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgbW9kdWxlLmV4cG9ydHMgPSBBUEk7CmlmIChyb290KSByb290LldlaXNzRml0dGluZ1JlbmRlciA9IEFQSTsKCi8qIC0tLS0tLS0tLSBOb2RlLVNlbGJzdHRlc3Q6IGBub2RlIHJlbmRlci5qc2AgLT4gcWEvcmVuZGVyLXZpZXctKi5zdmcgLS0tLS0tICovCmlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgJiYgcmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHsKICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyksIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7CiAgY29uc3Qgb3V0ID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3FhJyk7IHRyeSB7IGZzLm1rZGlyU3luYyhvdXQsIHsgcmVjdXJzaXZlOiB0cnVlIH0pOyB9IGNhdGNoIChlKSB7fQogIGNvbnN0IHNhbXBsZXMgPSBbCiAgICBbJ2NsYW1wJywgICAgeyB0eXBlOidjbGFtcHN0dXR6ZW4nLCBkbjoyNSwgb2Q6MjksIHdhbGw6MS41LCBsZW5ndGg6MzYsIGZsYW5nZU9kOjUwLjUsIGdhc2tldE1hdGVyaWFsOidQVEZFJywgc3VyZmFjZTonSDQnLCB3ZXJrc3RvZmY6JzEuNDQzNScgfV0sCiAgICBbJ2JsaW5kJywgICAgeyB0eXBlOidibGluZGRlY2tlbCcsIGZsYW5nZU9kOjUwLjUsIGxlbmd0aDo2LjM1LCBzdXJmYWNlOidIMycsIHdlcmtzdG9mZjonMS40NDA0JyB9XSwKICAgIFsna2xhbW1lcicsICB7IHR5cGU6J2tsYW1tZXInLCBmbGFuZ2VPZDo2NCwga2xhbW1lckE6NjYuNSwga2xhbW1lclR5cDonS0xMSScsIGtsYW1tZXJNdXR0ZXI6J1MnLCBzdXJmYWNlOicnLCB3ZXJrc3RvZmY6JzEuNDMwOCcgfV0sCiAgICBbJ2RpY2h0dW5nJywgeyB0eXBlOidkaWNodHVuZycsIGdhc2tldE9kOjUwLjUsIGdhc2tldElkOjI3LjcsIGdhc2tldFR5cGU6J0lJJywgZ2Fza2V0TWF0ZXJpYWw6J0VQRE0nLCBzdXJmYWNlOicnLCB3ZXJrc3RvZmY6JzEuNDQwNCcgfV0sCiAgICBbJ2JvZ2VuOTAnLCAgeyB0eXBlOidib2dlbjkwJywgZG46NTAsIG9kOjUzLCB3YWxsOjEuNSwgbGVuZ3RoOjQwLCBiZW5kUmFkaXVzOjcwLCBzdXJmYWNlOidINCcgfV0sCiAgICBbJ2JvZ2VuNDUnLCAgeyB0eXBlOidib2dlbjQ1JywgZG46NDAsIG9kOjQxLCB3YWxsOjEuNSwgbGVuZ3RoOjQwLCBiZW5kUmFkaXVzOjYwLCBzdXJmYWNlOidIMycgfV0sCiAgICBbJ3RzdHVlY2snLCAgeyB0eXBlOid0c3R1ZWNrJywgZG46NDAsIG9kOjQxLCB3YWxsOjEuNSwgbGVuZ3RoOjEyMCwgYnJhbmNoT2Q6MjksIHN1cmZhY2U6J0g0JyB9XSwKICAgIFsncmVkdXonLCAgICB7IHR5cGU6J3JlZHV6aWVydW5nJywgZG46NTAsIG9kOjUzLCB3YWxsOjEuNSwgbGVuZ3RoOjYyLCBvZDI6MjksIGVjY2VudHJpYzp0cnVlLCBzdXJmYWNlOidIMycgfV0KICBdOwogIGNvbnN0IHBhZ2UgPSBbJzwhZG9jdHlwZSBodG1sPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij48dGl0bGU+UmVuZGVyLUFuc2ljaHQgUUE8L3RpdGxlPicsCiAgICAnPHN0eWxlPmJvZHl7bWFyZ2luOjA7cGFkZGluZzoyMHB4O2JhY2tncm91bmQ6I2VjZWVmMDtmb250LWZhbWlseTpzeXN0ZW0tdWl9JywKICAgICcuY2FyZHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo0ODBweDttYXJnaW46OHB4O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE2MGRlZywjZmFmYmZjLCNlOGViZWUpO2JvcmRlci1yYWRpdXM6MTRweDtwYWRkaW5nOjhweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9JywKICAgICdoM3tmb250OjYwMCAxM3B4IHN5c3RlbS11aTttYXJnaW46NHB4IDZweDtjb2xvcjojMjIyfTwvc3R5bGU+J107CiAgc2FtcGxlcy5mb3JFYWNoKChbbiwgcF0pID0+IHsKICAgIGNvbnN0IHN2ZyA9IHJlbmRlckZpdHRpbmcocCk7CiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihvdXQsICdyZW5kZXItdmlldy0nICsgbiArICcuc3ZnJyksIHN2Zyk7CiAgICBwYWdlLnB1c2goYDxkaXYgY2xhc3M9ImNhcmQiPjxoMz4ke259PC9oMz4ke3N2Z308L2Rpdj5gKTsKICAgIGNvbnNvbGUubG9nKCdvayAnICsgbi5wYWRFbmQoMTApICsgJyBieXRlcz0nICsgc3ZnLmxlbmd0aCk7CiAgfSk7CiAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4ob3V0LCAncmVuZGVyLXZpZXcuaHRtbCcpLCBwYWdlLmpvaW4oJ1xuJykpOwogIGNvbnNvbGUubG9nKCctPiAnICsgcGF0aC5qb2luKG91dCwgJ3JlbmRlci12aWV3Lmh0bWwnKSk7Cn0KCn0pKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogbnVsbCk7Cgo8L3NjcmlwdD4KICA8c2NyaXB0PgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBXZWlzcyBBcHBhcmF0ZWJhdSAtIEZpdHRpbmdzLUtvbmZpZ3VyYXRvciAgwrcgIGFwcC5qcwogKiBTdGF0ZSwgQmVyYXRlci1GbG93LCBMaXZlLVplaWNobnVuZywgTGl2ZS1QcmVpcywgQ29uc3RyYWludHMsIFR5cGVuc2NobHVlc3NlbCwKICogUkZRIChtYWlsdG8pLCBUZWlsZW4tTGluaywgUERGLUV4cG9ydC4gVmFuaWxsYSwgZWluIFdpZGdldCwgaUZyYW1lLXRhdWdsaWNoLgogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwondXNlIHN0cmljdCc7CihmdW5jdGlvbiAoKSB7CiAgY29uc3QgRCA9IHdpbmRvdy5XRUlTU19EQVRBLCBTVkcgPSB3aW5kb3cuV2Vpc3NGaXR0aW5nU1ZHOwogIGlmICghRCB8fCAhU1ZHKSB7IGNvbnNvbGUuZXJyb3IoJ1dFSVNTOiBkYXRhLmpzL2RyYXcuanMgZmVobGVuJyk7IHJldHVybjsgfQoKICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFV0aWxpdGllcyAqLwogIGNvbnN0ICQgPSBzID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iocyk7CiAgY29uc3QgZXNjID0gcyA9PiBTdHJpbmcocyA9PSBudWxsID8gJycgOiBzKS5yZXBsYWNlKC9bJjw+Il0vZywgYyA9PiAoeyAnJic6JyZhbXA7JywnPCc6JyZsdDsnLCc+JzonJmd0OycsJyInOicmcXVvdDsnIH1bY10pKTsKICBjb25zdCBldXIgPSB2ID0+IHYudG9Mb2NhbGVTdHJpbmcoJ2RlLURFJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDIsIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMiB9KTsKCiAgZnVuY3Rpb24gcmVuZGVyUHJpY2VIaW50KCkgewogICAgY29uc3QgYm94ID0gJCgnI3d6LXByaWNlLWhpbnQnKTsKICAgIGlmICghYm94KSByZXR1cm47CiAgICBjb25zdCBsYWJlbCA9IEQucHJlaXNlICYmIEQucHJlaXNlLmdydXBwZSA9PT0gJ29lbScgPyAnT0VNLVByZWlzZScgOiAnRW5ka3VuZGVucHJlaXNlJzsKICAgIGNvbnN0IGxpdmUgPSBpZCA9PiB7CiAgICAgIGNvbnN0IG4gPSBELm5vcm1lbi5maW5kKHggPT4geC5pZCA9PT0gaWQpOwogICAgICByZXR1cm4gISEobiAmJiBuLnByZWlzTW9kdXMgPT09ICdsaXZlJyAmJiBELnByZWlzZSAmJiBELnByZWlzZS5mcmVpZ2VnZWJlbiA9PT0gdHJ1ZSk7CiAgICB9OwogICAgaWYgKEQucHJlaXNlICYmIEQucHJlaXNlLmdydXBwZSkgewogICAgICBib3guaW5uZXJIVE1MID0gYDxiPiR7bGFiZWx9PC9iPiDCtyBESU4gMzI2NzYgJHtsaXZlKCdkaW4zMjY3NicpID8gJ21pdCBQcmVpc2VuJyA6ICdhdWYgQW5mcmFnZSd9IMK3IERJTiAxMTg2NSAke2xpdmUoJ2RpbjExODY1JykgPyAnbWl0IFByZWlzZW4nIDogJ2F1ZiBBbmZyYWdlJ31gOwogICAgfQogIH0KCiAgY29uc3QgSUNPTiA9IHsKICAgIHBoYXJtYTonPHBhdGggZD0iTTkgM2g2TTEwIDN2NmwtNSA4YTIgMiAwIDAgMCAxLjggM2gxMC40QTIgMiAwIDAgMCAxOSAxN2wtNS04VjNNNy41IDE0aDkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+JywKICAgIHN0ZXJpbHRlY2huaWs6JzxwYXRoIGQ9Ik0xMiAzbDcgM3Y1YzAgNC40LTMgNy43LTcgOS00LTEuMy03LTQuNi03LTlWNmw3LTN6TTkgMTJsMiAyIDQtNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS43IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4nLAogICAgY2hlbWllOic8cGF0aCBkPSJNMTAgM3Y1bC00LjUgOUEyIDIgMCAwIDAgNy4zIDIwaDkuNGEyIDIgMCAwIDAgMS44LTNMMTQgOFYzTTkgM2g2TTYuNSAxNWgxMSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS43IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4nLAogICAgbGViZW5zbWl0dGVsOic8cGF0aCBkPSJNNiAzdjdhMyAzIDAgMCAwIDYgMFYzTTkgM3YxOE0xNyAzYy0xLjUgMS41LTIgMy0yIDV2NGgzVjNNMTggMTJ2OSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS43IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4nLAogICAgaW5mbzonPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iOSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS43Ii8+PHBhdGggZD0iTTEyIDExdjVNMTIgOGguMDEiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+JywKICAgIGNvcHk6JzxyZWN0IHg9IjkiIHk9IjkiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNyIvPjxwYXRoIGQ9Ik01IDE1VjVhMiAyIDAgMCAxIDItMmgxMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS43Ii8+JywKICAgIGNoZWNrOic8cGF0aCBkPSJNNSAxMmw0IDQgMTAtMTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPicsCiAgICBhcnJvd1I6JzxwYXRoIGQ9Ik01IDEyaDE0TTEzIDZsNiA2LTYgNiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS45IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4nLAogICAgYXJyb3dMOic8cGF0aCBkPSJNMTkgMTJINU0xMSA2bC02IDYgNiA2IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPicsCiAgICBwZGY6JzxwYXRoIGQ9Ik0xNCAzSDdhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDEwYTIgMiAwIDAgMCAyLTJWOGwtNS01ek0xNCAzdjVoNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS43IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+JywKICAgIHNoYXJlOic8cGF0aCBkPSJNNCAxMnY3YTEgMSAwIDAgMCAxIDFoMTRhMSAxIDAgMCAwIDEtMXYtN00xMiAxNVYzTTggN2w0LTQgNCA0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPicsCiAgICBwbHVzOic8cGF0aCBkPSJNMTIgNXYxNE01IDEyaDE0IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPicsCiAgICBkcmF3Oic8cGF0aCBkPSJNNCAxN2w2LTYgNCA0IDYtOE00IDIxaDE2IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPicsCiAgICBleHBhbmQ6JzxwYXRoIGQ9Ik00IDlWNGg1TTIwIDlWNGgtNU00IDE1djVoNU0yMCAxNXY1aC01IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPicsCiAgICBjbG9zZTonPHBhdGggZD0iTTYgNmwxMiAxMk0xOCA2TDYgMTgiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuOSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+JywKICAgIHJlc2V0Oic8cGF0aCBkPSJNMyAxMmE5IDkgMCAxIDAgMi42LTYuNEwzIDhNMyAzdjVoNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4nCiAgfTsKICBjb25zdCBpYyA9IChuLCBjbHMpID0+IGA8c3ZnIGNsYXNzPSIke2NscyB8fCAnaWMnfSIgdmlld0JveD0iMCAwIDI0IDI0IiBhcmlhLWhpZGRlbj0idHJ1ZSI+JHtJQ09OW25dIHx8ICcnfTwvc3ZnPmA7CgogIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9va3VwcyAqLwogIGNvbnN0IHR5cE9iaiA9IGlkID0+IEQudHlwZW4uZmluZCh0ID0+IHQuaWQgPT09IGlkKTsKICBjb25zdCBkaWNodE9iaiA9IGlkID0+IEQuZGljaHR1bmdlbi5maW5kKGQgPT4gZC5pZCA9PT0gaWQpOwogIGNvbnN0IGlzQmVuZCA9IHQgPT4gdCAmJiAodC5zdmdUeXBlID09PSAnYm9nZW45MCcgfHwgdC5zdmdUeXBlID09PSAnYm9nZW40NScpOwogIGNvbnN0IGlzQ29ubmVjdCA9IHQgPT4gISEodCAmJiB0LmNvbm5lY3QpOwogIGNvbnN0IGlzRGluMTE4NjUgPSB0ID0+ICEhKHQgJiYgdC5ub3JtID09PSAnZGluMTE4NjUnKTsKICBjb25zdCByb3dzMzIgPSByID0+IEQubWFzc2UuZGluMzI2NzYucmVpaGVuW3JdLnJvd3M7CiAgY29uc3QgbGJsID0gciA9PiByID8gKHIubGFiZWwgfHwgci5pZCkgOiAnJzsKICBjb25zdCBjb25uZWN0RGF0YSA9IHQgPT4gIXQgPyBudWxsIDogKHQuaWQgPT09ICdDRicgPyBELm1hc3NlLmNvbm5lY3QuY2YgOiB0LmlkID09PSAnQ0ZJJyA\\\/IEQubWFzc2UuY29ubmVjdC5jZmkgOiBudWxsKTsKICAvLyBXZXJrc3RvZmZzZXJpZSBkZXIgQ29ubmVjdC1GbGFuc2NoZTogd2lyZCB1ZWJlciBkaWUgV2Vya3N0b2ZmbnVtbWVyIGdlZnVlaHJ0CiAgLy8gKEhlcnN0ZWxsZXJrdWVyemVsIHNpbmQgc2VpdCBkZW0gMjcuMDcuMjAyNiByYXVzLCBzaWVoZSBkYXRhLmpzKS4KICBjb25zdCBjb25uZWN0U2VyaWUgPSBzID0+IGVmZldlcmtzdG9mZihzKTsKICBmdW5jdGlvbiBvYmVyZmxhZWNoZW5PcHRpb25lbihzKSB7CiAgICBjb25zdCB0ID0gdHlwT2JqKHMgJiYgcy50eXApOwogICAgLy8gRGllIENvbm5lY3QtRGF0ZW5ibGFldHRlciBiZWxlZ2VuIGZ1ZXIgQ0YgZGllIEF1c2Z1ZWhydW5nIEg0LgogICAgLy8gRnVlciBDRkkgaXN0IHp1c2FldHpsaWNoIGRpZSBlbGVrdHJvcG9saWVydGUgQXVzZnVlaHJ1bmcgSDRvIGF1ZmdlZnVlaHJ0LgogICAgLy8gQW5kZXJlIERJTi0xMTg2Ni1LbGFzc2VuIHdlcmRlbiBmdWVyIGRpZXNlIFByb2R1a3RmYW1pbGllbiBuaWNodCBhbmdlYm90ZW4uCiAgICBjb25zdCBpZHMgPSB0ICYmIHQuaWQgPT09ICdDRicgPyBbJ0g0J10gOiB0ICYmIHQuaWQgPT09ICdDRkknID8gWydINCcsICdING8nXSA6IG51bGw7CiAgICByZXR1cm4gaWRzID8gaWRzLm1hcChpZCA9PiBELm9iZXJmbGFlY2hlbi5maW5kKG8gPT4gby5pZCA9PT0gaWQpKS5maWx0ZXIoQm9vbGVhbikgOiBELm9iZXJmbGFlY2hlbjsKICB9CiAgY29uc3Qgb2JlcmZsYWVjaGVFcmxhdWJ0ID0gcyA9PiBvYmVyZmxhZWNoZW5PcHRpb25lbihzKS5zb21lKG8gPT4gby5pZCA9PT0gcy5vYmVyZmxhZWNoZSk7CgogIC8qIC0tIE1hc3NxdWVsbGUgamUgVHlwIChkYXRhLmpzOiB0eXAubWFzc2VRdWVsbGUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICogRGVyIGRpY2t3YW5kaWdlIFRhbmtzdHV0emVuIChUQ0QpIGhhdCBlaW5lIEVJR0VORSBNYXNzdGFiZWxsZSAobWFzc2UudGNkLAogICAqIHppbW1lcmxpbi1EYXRlbmJsYXR0LCBBZW5kZXJ1bmdzcGxhbiBBYnNjaG5pdHQgRikgLSBhbmRlcmUgUm9ocm1hc3NlIGFscyBkaWUKICAgKiBkdWVubndhbmRpZ2UgRElOLTMyNjc2LVJlaWhlLiBCaXMgMTYuMDcuMjAyNiB3YXIgZGFzIEZsYWcgcmVpbmUgRG9rdSB1bmQgcm93c0ZvcigpCiAgICogbGllZmVydGUgZnVlciBUQ0QgdW5iZWRpbmd0IHJvd3MzMigpIC0+IFRDRC9ETjI1IHplaWd0ZSBkaWUgZHVlbm53YW5kaWdlbiDijIAyOSB4IDEsNQogICAqIHN0YXR0IGRlciBkaWNrd2FuZGlnZW4g4oyAMzQgeCA0LiBXZXIgaGllciBlaW5lbiBUeXAgZXJnYWVuenQ6IG1hc3NlUXVlbGxlIGluIGRhdGEuanMKICAgKiBzZXR6ZW4gdW5kIGhpZXIgZWludHJhZ2VuIC0gTklFIHN0aWxsc2Nod2VpZ2VuZCBhdWYgcm93czMyKCkgenVydWVja2ZhbGxlbi4KICAgKiBEaWUgVENELVplaWxlbiB0cmFnZW4gYmV3dXNzdCBBTkRFUkUgRmVsZG5hbWVuIGFscyBkaWUgZHVlbm53YW5kaWdlbjoKICAgKiAgIGR1ZW5ud2FuZGlnOiB0dWJlT0QgLyB0dWJlSUQgLyBrayAvIGtsIC8gZ2Fza2V0T0QgLyBnYXNrZXRJRAogICAqICAgVENEOiAgICAgICAgIGF1c3NlbkQgKFNwYWx0ZSBBKSAvIGhvZWhlICg2MCkgLyB3YWxsICg0KSAtIGtlaW4gdHViZU9ELCBrZWluIGtrL2tsLAogICAqICAgICAgICAgICAgICAgIGtlaW5lIElubmVuLS9EaWNodHVuZ3NtYXNzZSAoaW0gRGF0ZW5ibGF0dCBuaWNodCBnZWxpc3RldCkuCiAgICogRGVzaGFsYiBOSUUgdW5nZXBydWVmdCBydy50dWJlT0QgbGVzZW4gLT4gaW1tZXIgb2RPZihydykuICovCiAgY29uc3QgTUFTU1FVRUxMRU4gPSB7IHRjZDogciA9PiBELm1hc3NlLnRjZC5yZWloZW5bcl0ucm93cyB9OwogIGNvbnN0IHJvd3NRdWVsbGUgPSAodCwgcmVpaGUpID0+IHsKICAgIGNvbnN0IHEgPSB0ICYmIHQubWFzc2VRdWVsbGUgPyBNQVNTUVVFTExFTlt0Lm1hc3NlUXVlbGxlXSA6IG51bGw7CiAgICByZXR1cm4gcSA\\\/IHEocmVpaGUpIDogcm93czMyKHJlaWhlKTsKICB9OwogIC8qIEF1c3NlbmR1cmNobWVzc2VyIGVpbmVyIFplaWxlIC0gZWdhbCBhdXMgd2VsY2hlciBUYWJlbGxlLgogICAqIFRDRDogYXVzc2VuRCAoU3BhbHRlIEEgZGVzIERhdGVuYmxhdHRzKS4gRHVlbm53YW5kaWc6IHR1YmVPRC4KICAgKiBCZWlkZXMgc2luZCBnZWxpc3RldGUgUXVlbGx3ZXJ0ZSwgaGllciB3aXJkIE5JQ0hUUyBnZXJlY2huZXQuICovCiAgY29uc3Qgb2RPZiA9IHJ3ID0+IHJ3ID8gKHJ3LmF1c3NlbkQgIT0gbnVsbCA\\\/IHJ3LmF1c3NlbkQgOiAocncudHViZU9EICE9IG51bGwgPyBydy50dWJlT0QgOiBydy5EZSkpIDogbnVsbDsKICBjb25zdCBpZE9mID0gcncgPT4gcncgPyAocncudHViZUlEICE9IG51bGwgPyBydy50dWJlSUQgOiBydy5EaSkgOiBudWxsOwogIGNvbnN0IHdhbGxPZiA9IHJ3ID0+IHsKICAgIGlmICghcncpIHJldHVybiBudWxsOwogICAgaWYgKHJ3LndhbGwgIT0gbnVsbCkgcmV0dXJuIHJ3LndhbGw7CiAgICBjb25zdCBvZCA9IG9kT2YocncpLCBpZCA9IGlkT2YocncpOwogICAgcmV0dXJuIG9kICE9IG51bGwgJiYgaWQgIT0gbnVsbCA\\\/IChvZCAtIGlkKSAvIDIgOiBudWxsOwogIH07CiAgLyogTGFlbmdlbm1hc3MgZWluZXIgWmVpbGU6CiAgICogICBUQ0QgIC0+IEhvZWhlIGggPSA2MCBtbSAoVENEX0tPTlNULCBXZWlzcy1TdGFuZGFyZCBsYXV0IEJlcm5kKSAtIEtFSU4gS0svS0wuCiAgICogICBzb25zdCAtPiBTdHV0emVubGFlbmdlIEtLL0tMIGF1cyBkZXIgZHVlbm53YW5kaWdlbiBUYWJlbGxlLgogICAqIEdpYnQge3dlcnQsIGxhYmVsfSB6dXJ1ZWNrOyBudWxsLCB3ZW5uIGRpZSBaZWlsZSBrZWluIExhZW5nZW5tYXNzIHRyYWVndC4gKi8KICBmdW5jdGlvbiBsYWVuZ2VPZih0LCBydywgbGFlbmdlVmFyaWFudGUpIHsKICAgIGlmICghcncpIHJldHVybiBudWxsOwogICAgaWYgKHJ3LmhvZWhlICE9IG51bGwpIHJldHVybiB7IHdlcnQ6IHJ3LmhvZWhlLCBsYWJlbDogJ2gnLCB0ZXh0OiAnSMO2aGUnIH07CiAgICBpZiAodCAmJiB0LmxhZW5nZVZhcmlhbnRlKSB7CiAgICAgIGNvbnN0IHYgPSBsYWVuZ2VWYXJpYW50ZSA9PT0gJ0tMJyA\\\/IHJ3LmtsIDogcncua2s7CiAgICAgIHJldHVybiB2ID09IG51bGwgPyBudWxsIDogeyB3ZXJ0OiB2LCBsYWJlbDogJ0wnLCB0ZXh0OiAnU3R1dHplbmzDpG5nZSAoJyArIGxhZW5nZVZhcmlhbnRlICsgJyknIH07CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8qIC0tIEZsYW5zY2gtVHlwZW4gKEJsaW5kZGVja2VsICsgS2xhbW1lciwgQWVuZGVydW5nc3BsYW4gQWJzY2huaXR0IEQpIC0tLS0KICAgKiBEaWVzZSBUeXBlbiBrZW5uZW4gS0VJTkUgUmVpaGUgQS9CL0MgdW5kIEtFSU5FIE5lbm53ZWl0ZSAtIHNpZSBoYWVuZ2VuCiAgICogYXVzc2NobGllc3NsaWNoIGFtIEZsYW5zY2gtw5ggKEJlcm5kIDE2LjA3LjIwMjYpLiBzdGF0ZS5yZWloZS9zdGF0ZS5ncm9lc3NlCiAgICogd2VyZGVuIGZ1ZXIgc2llIG5pY2h0IGdlbGVzZW47IGFsbGVzIGxhZXVmdCB1ZWJlciBzdGF0ZS5mbGFuc2NoLgogICAqIERlc2hhbGIgbGllZmVydCByb3dGb3IoKSBoaWVyIGJld3Vzc3QgbnVsbDogZXMgZ2lidCBrZWluZSBESU4zMjY3Ni1aZWlsZSwKICAgKiBkaWUgenUgZWluZW0gRmxhbnNjaC3DmCBlaW5kZXV0aWcgZ2Vob2VydCAoZWluIEZsYW5zY2ggdHJhZWd0IG1laHJlcmUgUm9oci3ijIApLgogICAqIEplZGUgU3RlbGxlLCBkaWUgcncgYnJhdWNodCwgbXVzcyBkZW4gbnVyRmxhbnNjaC1GYWxsIGdldHJlbm50IGJlaGFuZGVsbiAtCiAgICogTklFIGF1ZiByb3dzMzIoLi4uKVswXSB6dXJ1ZWNrZmFsbGVuLCBkYXMgd2FlcmUgZWluZSBmYWxzY2hlIEdyb2Vzc2UuICovCiAgY29uc3QgaXN0TnVyRmxhbnNjaCA9IHQgPT4gISEodCAmJiB0Lm51ckZsYW5zY2gpOwogIC8qIC0tIFR5cGVuIG9obmUgYmVsZWd0ZSBNYXNzcXVlbGxlIChDRi9DRkksIEFlbmRlcnVuZ3NwbGFuIEFic2Nobml0dCBHKSAtLS0KICAgKiBtYXNzZUZvbGd0OnRydWUgaGVpc3N0OiBGdWVyIGRpZXNlbiBUeXAgbGllZ3QgVUVCRVJIQVVQVCBLRUlOIGZyZWlnZWdlYmVuZXMgTWFzcyB2b3IgLQogICAqIHdlZGVyIGVpbmUgUmVpaGUvTmVubndlaXRlIG5vY2ggZWluIEZsYW5zY2gtw5guIEFuZGVycyBhbHMgYmVpIG51ckZsYW5zY2ggKEJsaW5kZGVja2VsLwogICAqIEtsYW1tZXI6IEZsYW5zY2gtw5ggaXN0IGJlbGVndCwgZGVyIFJlc3QgZmVobHQpIGdpYnQgZXMgaGllciBnYXIga2VpbmVuIEFua2VyLgogICAqIEtvbnNlcXVlbnogYW4gSkVERVIgU3RlbGxlOiByb3dzRm9yKCkgLT4gW10sIHBhcmFtc0ZvcigpIC0+IG51bGwsIGtlaW5lIEdyb2Vzc2VubGlzdGUsCiAgICoga2VpbmUgWmVpY2hudW5nLCBrZWluIFByZWlzLiBOSUUgYXVmIHJvd3MzMiguLi4pIHp1cnVlY2tmYWxsZW4gLSBkYXMgc2luZCBkaWUKICAgKiBEVUVOTldBTkRJR0VOIERJTi0zMjY3Ni1Sb2hybWFzc2UsIGRpZSBtaXQgQ0YvQ0ZJIG5pY2h0cyB6dSB0dW4gaGFiZW4gKGdlbmF1IGRhcyB3YXIKICAgKiBkZXIgRmVobGVyIHZvciBkZW0gMTYuMDcuMjAyNikuCiAgICogQUNIVFVORyBmdWVyIE5hY2hmb2xnZXIgLSBTdGFuZCAxNi4wNy4yMDI2LCB3ZWxjaGUgZGF0YS5qcy1GbGFncyB3aXJrbGljaCB3aXJrZW46CiAgICogICBWRVJEUkFIVEVUOiBgbWFzc2VGb2xndGAsIGBudXJGbGFuc2NoYCwgYG1hc3NlUXVlbGxlYCAoLT4gcm93c1F1ZWxsZS9yb3dzRm9yKSwKICAgKiAgICAgICAgICAgICAgIGBlaW56ZWxTdHV0emVuYCAoLT4gcGFyYW1zRm9yOiBwLnR5cGU9J3N0dXR6ZW4nKSwgYGxhZW5nZVZhcmlhbnRlYC4KICAgKiAgIFJFSU5FIERPS1U6IGB6ZWljaG51bmdPaG5lTWFzc2VgLCBga29tcGxldHRlVmVyYmluZHVuZ2AuIFdlciBzaWNoIGF1ZiBlaW4gRG9rdS1GbGFnCiAgICogICAgICAgICAgICAgICB2ZXJsYWVzc3QsIGJhdXQgc3RpbGwgd2llZGVyIGZhbHNjaGUgTWFzc2UgZWluIC0gZXJzdCB2ZXJkcmFodGVuLiAqLwogIGNvbnN0IGlzdE1hc3NlRm9sZ3QgPSB0ID0+ICEhKHQgJiYgdC5tYXNzZUZvbGd0KTsKICBjb25zdCBpc3RLbGFtbWVyID0gdCA9PiAhISh0ICYmIHQua2xhbW1lclR5cGVuKTsKICAvKiAtLSBCYXV0ZWlsICJEaWNodHVuZyIgKFR5cCBEKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgogICAqIEJlcm5kIExpbmtlciwgMTEuMDguMjAyNjogIldlcmtzdG9mZi9PYmVyZmxhZWNoZSBpc3QgaGllciB1bm51ZXR6IGRhIG51cgogICAqIEVkZWxzdGFobCBtaXQgZW50c3ByZWNoZW5kZW4gT2JlcmZsYWVjaGVuIGFuZ2V6ZWlndCB3aXJkLiBLYW5uc3QgZHUgZGFzCiAgICogU3BlcnJlbiBiZWkgQmF1dGVpbCBEaWNodHVuZyBkYXMgbWFuIG51cjogQmF1dGVpbCAtPiBHcm9lc3NlIC0+IERpY2h0dW5nIC0+CiAgICogTmFjaHdlaXNlIGhhdD8iIC0+IFNjaHJpdHQgNSBlbnRmYWVsbHQgZnVlciBUeXAgRCAoYXBwbGljYWJsZSgpKSwgdW5kIGRlcgogICAqIEVkZWxzdGFobC1XZXJrc3RvZmYgc2FtdCBPYmVyZmxhZWNoZSB2ZXJzY2h3aW5kZXQgdWViZXJhbGwgZG9ydCwgd28gZXIgc29uc3QKICAgKiBrdW5kZW5zaWNodGJhciB3dWVyZGU6IFZvcnNjaGF1LUNoaXBzLCBEYXRlbmJsYXR0IHVuZCBBbmZyYWdldGV4dC4gRGVyCiAgICogV2Vya3N0b2ZmIGRlciBEaWNodHVuZyBzdGVodCB3ZWl0ZXJoaW4gaW4gZGVyIGVpZ2VuZW4gWmVpbGUgIkRpY2h0dW5nIi4KICAgKiBOSUNIVCB1ZWJlciB0LmRpY2h0dW5nIHBydWVmZW4gLSBkYXMgRmxhZyB0cmFlZ3QgYXVjaCBUeXAgVEMgKGtvbXBsZXR0ZQogICAqIFZlcmJpbmR1bmcpLCB1bmQgZGVyIGJlc3RlaHQgc2VociB3b2hsIGF1cyBFZGVsc3RhaGwuICovCiAgY29uc3QgaXN0RGljaHR1bmdCYXV0ZWlsID0gdCA9PiAhISh0ICYmIHQuaWQgPT09ICdEJyk7CiAgLyogQW53ZW5kdW5nc2FiaGFlbmdpZ2UgRkRBLUtvbmZvcm1pdGFldCAoQmVybmQgMTEuMDguMjAyNik6IFBoYXJtYSB1bmQKICAgKiBTdGVyaWx0ZWNobmlrIC0+IFVTUCBDbGFzcyBWSSArIEFESS9CU0UvVFNFLCBMZWJlbnNtaXR0ZWwgdW5kIENoZW1pZSAtPgogICAqIEVHIDE5MzUvMjAwNC4gRWluZSBRdWVsbGUgZnVlciBOYWNod2Vpcy1TY2hyaXR0LCBEaWNodHVuZ3MtU2Nocml0dCwKICAgKiBEYXRlbmJsYXR0IHVuZCBBbmZyYWdldGV4dC4gKi8KICBjb25zdCBmZGFUZXh0ID0gKCkgPT4gKEQuZmRhS29uZm9ybWl0YWV0IHx8IHt9KVtzdGF0ZS5hbndlbmR1bmddIHx8IEQuZmRhS29uZm9ybWl0YWV0RmFsbGJhY2sgfHwgJ0ZEQSc7CiAgY29uc3QgZmRhS3VyelRleHQgPSAoKSA9PiAoRC5mZGFLdXJ6IHx8IHt9KVtzdGF0ZS5hbndlbmR1bmddIHx8IG51bGw7CiAgLy8gQmVybmQgTGlua2VyLCAwMS4wOS4yMDI2OiBEYXMgQWJuYWhtZXBydWVmemV1Z25pcyAzLjEgbmFjaCBBRC1XMiB3aXJkIGVpbm1hbCBqZQogIC8vIENoYXJnZSBhdXNnZXN0ZWxsdCwgbmljaHQgamUgQmF1dGVpbC4gRmVycml0LU1lc3N1bmcgdW5kIFJhLU1lc3Nwcm90b2tvbGwgYmxlaWJlbgogIC8vIGRhZ2VnZW4gYXVzZHJ1ZWNrbGljaCBqZSBTdHVlY2ssIHdlaWwgamVkZXMgZWluemVsbmUgVGVpbCBnZW1lc3NlbiB1bmQKICAvLyBwcm90b2tvbGxpZXJ0IHdpcmQuIFNlaW4gUmVjaGVuYmVpc3BpZWw6IDUgU3R1ZWNrIHp1IDcwLDgwIHNpbmQgMzU0LDAwIHBsdXMKICAvLyBlaW5tYWxpZyAxNSwwMCBmdWVyIGRhcyBaZXVnbmlzLCBhbHNvIDM2OSwwMCB1bmQgbmljaHQgNDI5LDAwLgogIGNvbnN0IE5BQ0hXRUlTX0pFX0NIQVJHRSA9IFsnRU4xMDIwNF8zMV9BRFcyJ107CiAgY29uc3QgaXN0Q2hhcmdlbk5hY2h3ZWlzID0gaWQgPT4gTkFDSFdFSVNfSkVfQ0hBUkdFLmluZGV4T2YoaWQpID49IDA7CiAgY29uc3QgY2hhcmdlbkF1ZnByZWlzRnVlciA9IGlkID0+IHsKICAgIGNvbnN0IFAgPSBELnByZWlzZSB8fCB7fTsKICAgIGNvbnN0IGJldHJhZyA9IFAubmFjaHdlaXNBdWZwcmVpc0V1cm8gJiYgUC5uYWNod2Vpc0F1ZnByZWlzRXVyb1tpZF07CiAgICByZXR1cm4gKGJldHJhZyA9PSBudWxsKSA\\\/IG51bGwgOiBOdW1iZXIoYmV0cmFnKSAqIChQLmdsb2JhbEZha3RvciB8fCAxKTsKICB9OwogIGNvbnN0IG5hY2h3ZWlzTGFiZWwgPSBudyA9PiAobncgJiYgbncuYW53ZW5kdW5nc0xhYmVsID09PSAnZmRhS29uZm9ybWl0YWV0JykgPyBmZGFUZXh0KCkgOiAobncgPyBudy5sYWJlbCA6ICcnKTsKICBjb25zdCBuYWNod2Vpc0xhYmVsQnlJZCA9IGlkID0+IG5hY2h3ZWlzTGFiZWwoKEQubmFjaHdlaXNlIHx8IFtdKS5maW5kKHggPT4geC5pZCA9PT0gaWQpKTsKICBjb25zdCBmbGFuc2NoT2JqID0gaWQgPT4gKEQuZmxhbnNjaGdyb2Vzc2VuIHx8IFtdKS5maW5kKGYgPT4gZi5pZCA9PT0gaWQpOwogIGNvbnN0IGtsYW1tZXJUeXBPYmogPSBpZCA9PiAoRC5rbGFtbWVyVHlwZW4gfHwgW10pLmZpbmQoayA9PiBrLmlkID09PSBpZCk7CiAgY29uc3QgZmxhbnNjaEZvciA9IHMgPT4gZmxhbnNjaE9iaihzLmZsYW5zY2gpIHx8IChELmZsYW5zY2hncm9lc3NlbiB8fCBbXSlbMF0gfHwgbnVsbDsKICAvKiBJc3QgZnVlciBESUVTRVMgQmF1dGVpbCBpbiBESUVTRVIgRmxhbnNjaGdyb2Vzc2UgYXVzc2VyIGRlbSBGbGFuc2NoLcOYIG5vY2gga2VpbgogICAqIE1hc3MgYmVsZWd0PyBEaWUgRnJhZ2UgaGFlbmd0IGFtIEJBVVRFSUwsIG5pY2h0IGFuIGVpbmVtIGVpbnplbG5lbiBGZWxkLgogICAqIEZydWVoZXIgc3RhbmQgaGllciBzdGVsbHZlcnRyZXRlbmQgYGJsaW5kVGhrID09IG51bGxgLiBTZWl0IEJlcm5kcyBOYWNodHJhZyB2b20KICAgKiAyNy4wNy4yMDI2ICgiQmxpbmRkZWNrZWw6IDI4NiwxOyAzMTkgdW5kIDMzOCBlaW5mYWNoIE1hc3MgTCBtaXQgMTQgYW5nZWJlbiIpIGlzdAogICAqIGJsaW5kVGhrIGluIEpFREVSIEdyb2Vzc2UgYmVsZWd0IC0gZGVyIFRlc3Qgd2FyIGRhbWl0IHRvdCB1bmQgaGF0IGRlbiBIaW53ZWlzCiAgICogYXVjaCBiZWkgZGVyIEtMQU1NRVIgdmVyc2NobHVja3QsIG9id29obCBlciBkb3J0IHdlaXRlciBnaWx0OiBLTEFNTUVSX0EgaW4gZGF0YS5qcwogICAqIGVuZGV0IGJlaSBGbGFuc2NoLeKMgCAyNjgsIGZ1ZXIgMjg2LDEgLyAzMTkgLyAzMzggZ2lidCBlcyBrZWluIE1hc3MgQSAoIkF1ZiBBbmZyYWdlIikuCiAgICogS2xhbW1lciAtPiBNYXNzIEEgZGVzIGdld2FlaGx0ZW4gS2xhbW1lcnR5cHMsIEJsaW5kZGVja2VsIC0+IERlY2tlbHN0YWVya2UgTC4gKi8KICBmdW5jdGlvbiBmbGFuc2NoTWFzc09mZmVuKHQsIGYsIGtsYW1tZXJUeXApIHsKICAgIGlmICghdCB8fCAhZikgcmV0dXJuIGZhbHNlOwogICAgaWYgKGlzdEtsYW1tZXIodCkpIHJldHVybiAhKGYua2xhbW1lckEgJiYgZi5rbGFtbWVyQVtrbGFtbWVyVHlwXSAhPSBudWxsKTsKICAgIGlmICh0LnN2Z1R5cGUgPT09ICdibGluZGRlY2tlbCcpIHJldHVybiBmLmJsaW5kVGhrID09IG51bGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIC8qIEZsYW5zY2gtw5ggYXVzIGRlbSBTdGF0ZSAtIGVnYWwgb2IgdWViZXIgRmxhbnNjaC1MaXN0ZSBvZGVyIHVlYmVyIGVpbmUgUmVpaGUgZ2V3YWVobHQuICovCiAgZnVuY3Rpb24gZmxhbmdlT2ZTdGF0ZShzKSB7CiAgICBjb25zdCB0ID0gdHlwT2JqKHMudHlwKTsKICAgIGlmIChpc3ROdXJGbGFuc2NoKHQpKSB7IGNvbnN0IGYgPSBmbGFuc2NoRm9yKHMpOyByZXR1cm4gZiA\\\/IGYuZmxhbmdlT0QgOiBudWxsOyB9CiAgICBjb25zdCBydyA9IHJvd0ZvcihzKTsgcmV0dXJuIHJ3ID8gcncuZmxhbmdlT0QgOiBudWxsOwogIH0KCiAgLyogLS0gV2Vya3N0b2ZmZTogS2xhbW1lcm4gaGFiZW4gZWlnZW5lIChBYnNjaG5pdHQgRSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAqIEJlcm5kOiAiQWNodHVuZywgZGllIEtsYW1tZXJuIGhhYmVuIGFuZGVyZSBNYXRlcmlhbGllbiBhbHMgZGllIEZpdHRpbmdzLiIKICAgKiAtPiAxLjQzMDgvMS40NDA4IHN0YXR0IDEuNDQwNC8xLjQ0MzUsIHVuZCBqZSBLbGFtbWVydHlwIG51ciBkaWUgZXJsYXVidGVuLgogICAqIEtsYW1tZXItV2Vya3N0b2ZmIGxpZWd0IGluIHN0YXRlLmtsYW1tZXJXZXJrc3RvZmYsIGdldHJlbm50IHZvbiBzdGF0ZS53ZXJrc3RvZmYsCiAgICogZGFtaXQgZWluIFdlY2hzZWwgS2xhbW1lciA8LT4gRml0dGluZyBkZW4gamV3ZWlscyBhbmRlcmVuIFdlcnQgbmljaHQgdWViZXJzY2hyZWlidC4KICAgKiBBbGxlcywgd2FzIGVpbmVuIFdlcmtzdG9mZiBhdXNnaWJ0LCBsYWV1ZnQgdWViZXIgZWZmV2Vya3N0b2ZmKCkuICovCiAgZnVuY3Rpb24gd2Vya3N0b2ZmT3B0aW9uZW4ocykgewogICAgY29uc3QgdCA9IHR5cE9iaihzLnR5cCk7CiAgICBpZiAoIWlzdEtsYW1tZXIodCkpIHJldHVybiBELndlcmtzdG9mZmU7CiAgICBjb25zdCBrdCA9IGtsYW1tZXJUeXBPYmoocy5rbGFtbWVyVHlwKTsKICAgIGNvbnN0IGVybGF1YnQgPSBrdCA\\\/IGt0LndlcmtzdG9mZmUgOiBbXTsKICAgIHJldHVybiAoRC5rbGFtbWVyV2Vya3N0b2ZmZSB8fCBbXSkuZmlsdGVyKHcgPT4gZXJsYXVidC5pbmRleE9mKHcuaWQpID49IDApOwogIH0KICBmdW5jdGlvbiBlZmZXZXJrc3RvZmYocykgewogICAgY29uc3QgdCA9IHR5cE9iaihzLnR5cCk7CiAgICBpZiAoIWlzdEtsYW1tZXIodCkpIHJldHVybiBzLndlcmtzdG9mZjsKICAgIGNvbnN0IGF2ID0gd2Vya3N0b2ZmT3B0aW9uZW4ocykubWFwKHcgPT4gdy5pZCk7CiAgICByZXR1cm4gYXYuaW5kZXhPZihzLmtsYW1tZXJXZXJrc3RvZmYpID49IDAgPyBzLmtsYW1tZXJXZXJrc3RvZmYgOiAoYXZbMF0gfHwgbnVsbCk7CiAgfQoKICBmdW5jdGlvbiByb3dzRm9yKHMpIHsKICAgIGNvbnN0IHQgPSB0eXBPYmoocy50eXApOwogICAgaWYgKGlzdE51ckZsYW5zY2godCkpIHJldHVybiBbXTsKICAgIC8vIG1hc3NlRm9sZ3QgKENGL0NGSSk6IEtFSU5FIEdyb2Vzc2VuemVpbGVuLiBPaG5lIGRpZXNlcyBbXSB3dWVyZGUgaGllciByb3dzMzIocy5yZWloZSkKICAgIC8vIGdyZWlmZW4gdW5kIGRlbSBLdW5kZW4gZGllIGR1ZW5ud2FuZGlnZW4gRElOLTMyNjc2LU1hc3NlIGFscyBDRi1NYXNzZSB2ZXJrYXVmZW4uCiAgICBpZiAoaXN0TWFzc2VGb2xndCh0KSkgcmV0dXJuIFtdOwogICAgaWYgKHQgJiYgdC5pZCA9PT0gJ0NGJykgewogICAgICBjb25zdCBncnVwcGUgPSBELm1hc3NlLmNvbm5lY3QuY2YucmVpaGVuW3MuY29ubmVjdE5vcm1dIHx8IEQubWFzc2UuY29ubmVjdC5jZi5yZWloZW4uRElOOwogICAgICByZXR1cm4gZ3J1cHBlID8gZ3J1cHBlLnJvd3MgOiBbXTsKICAgIH0KICAgIGlmICh0ICYmIHQuaWQgPT09ICdDRkknKSByZXR1cm4gRC5tYXNzZS5jb25uZWN0LmNmaS5yb3dzIHx8IFtdOwogICAgaWYgKHQgJiYgdC5pZCA9PT0gJ1RTUicpIHsKICAgICAgLy8gUnVuZGUgODogZ2VsaWVmZXJ0ZSBLb21iaW5hdGlvbmVuIChEdXJjaGdhbmcvQWJ6d2VpZykgYXVzIGRlciBLdW5kZW50YWJlbGxlLgogICAgICAvLyBTY2hyaXR0IDQgemVpZ3QgbnVyIER1cmNoZ8OkbmdlLCBmw7xyIGRpZSBtaW5kZXN0ZW5zIGVpbiBiZWxlZ3RlciBBYnp3ZWlnIGV4aXN0aWVydDsKICAgICAgLy8gTDAvTCBzaW5kIGplIER1cmNoZ2FuZ3MtR3J1cHBlIGtvbnN0YW50IHVuZCBrb21tZW4gYXVzIGRlbSBlcnN0ZW4gUGFhci4KICAgICAgY29uc3QgcGFhcmUgPSAoRC5tYXNzZS5kaW4xMTg2NS50U3R1ZWNrUmVkdXppZXJ0LnJlaWhlbltzLnJlaWhlXSB8fCB7fSkucm93cyB8fCBbXTsKICAgICAgY29uc3QgYmFzaXMgPSBELm1hc3NlLmRpbjExODY1LmJvZWdlbltzLnJlaWhlXSB8fCBbXTsKICAgICAgY29uc3QgZ2VzZWhlbiA9IG5ldyBTZXQoKTsKICAgICAgcmV0dXJuIHBhYXJlLmZpbHRlcihwID0+ICFnZXNlaGVuLmhhcyhwLnZvbklkKSAmJiBnZXNlaGVuLmFkZChwLnZvbklkKSkKICAgICAgICAubWFwKHAgPT4gewogICAgICAgICAgY29uc3QgbWVyZ2VkID0gT2JqZWN0LmFzc2lnbih7fSwgYmFzaXMuZmluZChiID0+IGIuaWQgPT09IHAudm9uSWQpIHx8IHt9LCB7IGlkOiBwLnZvbklkLCBMMDogcC5MMCwgTDogcC5MLCBMMTogbnVsbCwgTDI6IG51bGwsIFI6IG51bGwgfSk7CiAgICAgICAgICBpZiAoIW1lcmdlZC5sYWJlbCkgeyBjb25zdCBtID0gcm93czMyKHMucmVpaGUpLmZpbmQoeCA9PiB4LmlkID09PSBwLnZvbklkKTsgaWYgKG0pIG1lcmdlZC5sYWJlbCA9IG0ubGFiZWw7IH0KICAgICAgICAgIHJldHVybiBtZXJnZWQ7CiAgICAgICAgfSk7CiAgICB9CiAgICBpZiAodCAmJiB0LmlkID09PSAnVFMnKSB7CiAgICAgIGNvbnN0IHF1ZWxsZSA9IEQubWFzc2UuZGluMTE4NjUudFN0dWVja0dsZWljaC5yZWloZW5bcy5yZWloZV07CiAgICAgIGNvbnN0IGJhc2lzID0gRC5tYXNzZS5kaW4xMTg2NS5ib2VnZW5bcy5yZWloZV0gfHwgW107CiAgICAgIHJldHVybiAocXVlbGxlID8gcXVlbGxlLnJvd3MgOiBbXSkubWFwKHIgPT4gewogICAgICAgIGNvbnN0IG1lcmdlZCA9IE9iamVjdC5hc3NpZ24oe30sIGJhc2lzLmZpbmQoYiA9PiBiLmlkID09PSByLmlkKSB8fCB7fSwgcik7CiAgICAgICAgaWYgKCFtZXJnZWQubGFiZWwpIHsgY29uc3QgbSA9IHJvd3MzMihzLnJlaWhlKS5maW5kKHggPT4geC5pZCA9PT0gci5pZCk7IGlmIChtKSBtZXJnZWQubGFiZWwgPSBtLmxhYmVsOyB9CiAgICAgICAgcmV0dXJuIG1lcmdlZDsKICAgICAgfSk7CiAgICB9CiAgICBpZiAodCAmJiB0LmlkID09PSAnUicpIHsKICAgICAgY29uc3QgcGFhcmUgPSAoRC5tYXNzZS5kaW4xMTg2NS5yZWR1emllcnVuZy5yZWloZW5bcy5yZWloZV0gfHwge30pLnJvd3MgfHwgW107CiAgICAgIGNvbnN0IHZvbiA9IG5ldyBTZXQocGFhcmUubWFwKHIgPT4gci52b25JZCkpOwogICAgICByZXR1cm4gKEQubWFzc2UuZGluMTE4NjUuYm9lZ2VuW3MucmVpaGVdIHx8IFtdKS5maWx0ZXIociA9PiB2b24uaGFzKHIuaWQpKTsKICAgIH0KICAgIC8vIG1hc3NlUXVlbGxlIChUQ0QpOiBlaWdlbmUgVGFiZWxsZSBzdGF0dCBkZXIgZHVlbm53YW5kaWdlbiBESU4tMzI2NzYtUmVpaGUuCiAgICBpZiAoIWlzQmVuZCh0KSkgcmV0dXJuIHJvd3NRdWVsbGUodCwgcy5yZWloZSk7CiAgICAvLyBCb2dlbi1UYWJlbGxlbiB0cmFnZW4ga2VpbiBMYWJlbCAtPiB3ZW5uIG1vZWdsaWNoIGF1cyBkZXIgMzI2NzYtUmVpaGUgdWViZXJuZWhtZW4uCiAgICAvLyBCbG9ja2llcnRlIFplaWxlbiAoYWt0dWVsbCBETjI1IG1pdCB3aWRlcnNwcnVlY2hsaWNoZW0gTDMpIHNpbmQgbmljaHQgd2FlaGxiYXIuCiAgICBjb25zdCBiYXNlID0gcm93czMyKHMucmVpaGUpOwogICAgcmV0dXJuIChELm1hc3NlLmRpbjExODY1LmJvZWdlbltzLnJlaWhlXSB8fCBbXSkuZmlsdGVyKHIgPT4gci5zdGF0dXMgIT09ICdibG9ja2llcnQnKS5tYXAociA9PiB7CiAgICAgIGlmIChyLmxhYmVsKSByZXR1cm4gcjsKICAgICAgY29uc3QgbSA9IGJhc2UuZmluZCh4ID0+IHguaWQgPT09IHIuaWQpOwogICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgciwgeyBsYWJlbDogbSA\\\/IG0ubGFiZWwgOiByLmlkIH0pOwogICAgfSk7CiAgfQogIC8vIG51bGwgYmVpIG51ckZsYW5zY2gtVHlwZW4gKHJvd3NGb3IgbGllZmVydCBkb3J0IFtdKSAtPiBBdWZydWZlciBtdWVzc2VuIGRhcyBhYmZhbmdlbi4KICBmdW5jdGlvbiByb3dGb3IocykgeyBjb25zdCBycyA9IHJvd3NGb3Iocyk7IHJldHVybiBycy5maW5kKHIgPT4gci5pZCA9PT0gcy5ncm9lc3NlKSB8fCByc1swXSB8fCBudWxsOyB9CiAgLyogLS0gWndlaXRlciDDmCAoIlJlZHV6aWVydCBhdWYiIC8gIkFiZ2FuZyIpOiBudXIgS0xFSU5FUiBhbHMgZGllIE5lbm53ZWl0ZSAtLS0tLS0tLS0tLQogICAqIEJlcm5kIFIzLTIvUjMtNCAoMTcuMDcuMjAyNik6ICJOZW5ud2VpdGUgbXVzcyBpbW1lciBHUsOWU1NFUiBzZWluIGFscyAnUmVkdXppZXJ0IGF1ZicuIgogICAqIERpZSBSZWloZW4tVGFiZWxsZW4gKHJvd3MzMikgc2luZCBhdWZzdGVpZ2VuZCBzb3J0aWVydCAtPiBrbGVpbmVyZSBOZW5ud2VpdGUgPSBmcsO8aGVyZXIKICAgKiBJbmRleC4gcm93czJGb3IoKSBsaWVmZXJ0IGRlc2hhbGIgZ2VuYXUgZGllIFplaWxlbiBWT1IgZGVyIGdld8OkaGx0ZW4gTmVubndlaXRlLgogICAqIElzdCBkaWUga2xlaW5zdGUgR3LDtsOfZSBnZXfDpGhsdCAoSW5kZXggMCkgb2RlciBpc3QgZ3JvZXNzZSB1bmJla2FubnQgLT4gW10gKGtlaW5lCiAgICoga2xlaW5lcmUgR3LDtsOfZSkuIERlciBBdWZydWZlciBiZWhhbmRlbHQgZGFzIHNhdWJlciAoUGxhdHpoYWx0ZXIvImZvbGd0Iiwga2VpbiBBYnN0dXJ6KS4KICAgKiBEaWUgZ2VuYXVlbiBnw7xsdGlnZW4gS29tYmluYXRpb25lbiBsaWVmZXJ0IEJlcm5kIG5vY2ggYWxzIFZvcmxhZ2U7IGJpcyBkYWhpbiBnaWx0IGRpZQogICAqIHNpbXBsZSBLbGVpbmVyLVJlZ2VsIC0gZXMgd2lyZCBOSUNIVFMgZXJmdW5kZW4sIG51ciBnZWZpbHRlcnQuICovCiAgZnVuY3Rpb24gcm93czJGb3IocykgewogICAgY29uc3QgdCA9IHR5cE9iaihzLnR5cCk7CiAgICBpZiAodCAmJiB0LmlkID09PSAnUicpIHsKICAgICAgY29uc3QgcGFhcmUgPSAoRC5tYXNzZS5kaW4xMTg2NS5yZWR1emllcnVuZy5yZWloZW5bcy5yZWloZV0gfHwge30pLnJvd3MgfHwgW107CiAgICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQocGFhcmUuZmlsdGVyKHAgPT4gcC52b25JZCA9PT0gcy5ncm9lc3NlKS5tYXAocCA9PiBwLm5hY2hJZCkpOwogICAgICByZXR1cm4gKEQubWFzc2UuZGluMTE4NjUuYm9lZ2VuW3MucmVpaGVdIHx8IFtdKS5maWx0ZXIociA9PiBpZHMuaGFzKHIuaWQpKTsKICAgIH0KICAgIGlmICh0ICYmIHQuaWQgPT09ICdUU1InKSB7CiAgICAgIC8vIFJ1bmRlIDg6IGRlciBBYnp3ZWlnIGJpZXRldCBOVVIgZGllIGdlbGllZmVydGVuLCBiZWxlZ3RlbiBLb21iaW5hdGlvbmVuIGFuIC0KICAgICAgLy8gbmljaHQgYmVsZWd0ZSBQYWFyZSBibGVpYmVuIHVuc2ljaHRiYXIgKGZhaWwtY2xvc2VkIHN0YXR0IEtsZWluZXItUmVnZWwpLgogICAgICBjb25zdCBwYWFyZSA9IChELm1hc3NlLmRpbjExODY1LnRTdHVlY2tSZWR1emllcnQucmVpaGVuW3MucmVpaGVdIHx8IHt9KS5yb3dzIHx8IFtdOwogICAgICBjb25zdCBpZHMgPSBuZXcgU2V0KHBhYXJlLmZpbHRlcihwID0+IHAudm9uSWQgPT09IHMuZ3JvZXNzZSkubWFwKHAgPT4gcC5uYWNoSWQpKTsKICAgICAgcmV0dXJuIChELm1hc3NlLmRpbjExODY1LmJvZWdlbltzLnJlaWhlXSB8fCBbXSkuZmlsdGVyKHIgPT4gaWRzLmhhcyhyLmlkKSk7CiAgICB9CiAgICBjb25zdCByciA9IHJvd3MzMihzLnJlaWhlKTsKICAgIGNvbnN0IGkgPSByci5maW5kSW5kZXgociA9PiByLmlkID09PSBzLmdyb2Vzc2UpOwogICAgcmV0dXJuIGkgPiAwID8gcnIuc2xpY2UoMCwgaSkgOiBbXTsKICB9CiAgLy8gRGVmYXVsdCBmw7xyIGRlbiB6d2VpdGVuIMOYOiBkaWUgR1LDllNTVEUgbm9jaCBrbGVpbmVyZSBHcsO2w59lIChlaW4gU2Nocml0dCB1bnRlciBkZXIKICAvLyBOZW5ud2VpdGUpIC0+IHNvZm9ydCBlaW4gZWNodGVyIEtlZ2VsIG1pdCB6d2VpIHZlcnNjaGllZGVuZW4gw5guIG51bGwsIHdlbm4ga2VpbmUKICAvLyBrbGVpbmVyZSBHcsO2w59lIGV4aXN0aWVydCAoZGFubiB6ZWlndCBkaWUgWmVpY2hudW5nIGRlbiAiZm9sZ3QiLVBsYXR6aGFsdGVyKS4KICBmdW5jdGlvbiBkZWZhdWx0R3JvZXNzZTIocykgeyBjb25zdCBhdiA9IHJvd3MyRm9yKHMpOyByZXR1cm4gYXYubGVuZ3RoID8gYXZbYXYubGVuZ3RoIC0gMV0uaWQgOiBudWxsOyB9CiAgLy8gcm93MkZvciBudXIgYXVzIGRlbiBHw5xMVElHRU4ga2xlaW5lcmVuIFplaWxlbiAocm93czJGb3IpIC0gZWluIGdyb2Vzc2UyLCBkYXMgbmljaHQKICAvLyBrbGVpbmVyIGFscyBkaWUgTmVubndlaXRlIGlzdCAoei4gQi4gYXVzIGVpbmVtIGFsdGVuIExpbmsgb2RlciBuYWNoIE5lbm53ZWl0ZW4tV2VjaHNlbCksCiAgLy8gbGllZmVydCBudWxsIC0+IGlzdFJlZHV6aWVydW5nT2huZVp3ZWl0T0QgZ3JlaWZ0IC0+ICJmb2xndCIsIHN0YXR0IGVpbmVyIGVyZnVuZGVuZW4KICAvLyBSZWR1emllcnVuZy4gRGFtaXQgaXN0IGVpbiBnZXJhZGVzIFJvaHIgKG9kID09IG9kMikgbmljaHQgbWVociB6ZWljaGVuYmFyLgogIGZ1bmN0aW9uIHJvdzJGb3IocykgeyByZXR1cm4gcm93czJGb3IocykuZmluZChyID0+IHIuaWQgPT09IHMuZ3JvZXNzZTIpIHx8IG51bGw7IH0KICBmdW5jdGlvbiByZWR1Y3Rpb25QYWlyKHMpIHsKICAgIGlmICghcyB8fCBzLnR5cCAhPT0gJ1InKSByZXR1cm4gbnVsbDsKICAgIGNvbnN0IHJvd3MgPSAoRC5tYXNzZS5kaW4xMTg2NS5yZWR1emllcnVuZy5yZWloZW5bcy5yZWloZV0gfHwge30pLnJvd3MgfHwgW107CiAgICByZXR1cm4gcm93cy5maW5kKHIgPT4gci52b25JZCA9PT0gcy5ncm9lc3NlICYmIHIubmFjaElkID09PSBzLmdyb2Vzc2UyKSB8fCBudWxsOwogIH0KICAvLyBCZWxlZ3RlcyBULVN0w7xjay1QYWFyIChEdXJjaGdhbmcvQWJ6d2VpZykgLSBSdW5kZSA4LiBMaWVmZXJ0IGRpZSBwYWFyc3BlemlmaXNjaGVuCiAgLy8gTWHDn2UgKEwyIHVuZCBMMSB2YXJpaWVyZW4gamUgQWJ6d2VpZywgTDAvTCBzaW5kIGdydXBwZW5rb25zdGFudCkuIE9obmUgUGFhcjogbnVsbCwKICAvLyB1bmQgZGllIEF1ZnJ1ZmVyIGJsZWliZW4gZmFpbC1jbG9zZWQgKGtlaW5lIFplaWNobnVuZywga2VpbiBEYXRlbmJsYXR0LU1hw58pLgogIGZ1bmN0aW9uIHRTdHVlY2tQYWlyKHMpIHsKICAgIGlmICghcyB8fCBzLnR5cCAhPT0gJ1RTUicpIHJldHVybiBudWxsOwogICAgY29uc3Qgcm93cyA9IChELm1hc3NlLmRpbjExODY1LnRTdHVlY2tSZWR1emllcnQucmVpaGVuW3MucmVpaGVdIHx8IHt9KS5yb3dzIHx8IFtdOwogICAgcmV0dXJuIHJvd3MuZmluZChyID0+IHIudm9uSWQgPT09IHMuZ3JvZXNzZSAmJiByLm5hY2hJZCA9PT0gcy5ncm9lc3NlMikgfHwgbnVsbDsKICB9CgogIC8qIC0tIFJlZHV6aWVydW5nIG9obmUgYmVsZWd0ZW4gendlaXRlbiDDmCAoTmFjaHBydWVmLUJlZnVuZCBhLCAxNi4wNy4yMDI2KSAtLS0tCiAgICogRGllIFJlZHV6aWVydW5nIChzdmdUeXBlICdyZWR1emllcnVuZycpIGJyYXVjaHQgWldFSSBEdXJjaG1lc3NlcjogZGVuIFJvaHItw5gKICAgKiAocncpIHVuZCBkZW4gw5gsIGF1ZiBkZW4gcmVkdXppZXJ0IHdpcmQgKHJvdzJGb3IgLT4gc3RhdGUuZ3JvZXNzZTIpLiBGZWhsdCBkZXIKICAgKiB6d2VpdGUgLSB6LiBCLiBiZWkgZWluZW0gZ2V0ZWlsdGVuIExpbmsgbWl0IHR5cD1SIG9obmUgZ3JvZXNzZTIgLSwgd3VyZGUgZXIKICAgKiBmcnVlaGVyIGF1cyBkZW0gRmFrdG9yIDAuNjYgR0VSRUNITkVUIChydy50dWJlT0QqMC42NiAtPiB6LiBCLiAzNCw5OCBhdXMgNTMpCiAgICogdW5kIGFscyBlY2h0ZXMgTWFzcyBiZW1hc3N0LiBEYXMgaXN0IGVyZnVuZGVuLiBPaG5lIHp3ZWl0ZW4gw5ggZ2lidCBlcyBLRUlOCiAgICogYmVsZWd0ZXMgTWFzcyAtPiBwYXJhbXNGb3IoKSBsaWVmZXJ0IG51bGwgdW5kIHJlbmRlclByZXZpZXcoKSB6ZWlndCBkaWUKICAgKiAiZm9sZ3QiLUthcnRlLCBnZW5hdSB3aWUgYmVpIG1hc3NlRm9sZ3QvbnVyRmxhbnNjaC4gTklFIGVpbmVuIHp3ZWl0ZW4gw5ggcmVjaG5lbi4gKi8KICBmdW5jdGlvbiBpc3RSZWR1emllcnVuZ09obmVad2VpdE9EKHMpIHsKICAgIGNvbnN0IHQgPSB0eXBPYmoocy50eXApOwogICAgcmV0dXJuICEhKHQgJiYgdC5zdmdUeXBlID09PSAncmVkdXppZXJ1bmcnICYmICFyb3cyRm9yKHMpKTsKICB9CiAgLyogRm9ybSBUSyAtIEJlcm5kIDI3LjA3LjIwMjYgaW0gV29ydGxhdXQ6ICJNYXNzZSBmdWVyIFRLIHNpbmQgaWRlbnRpc2NoIHdpZQogICAqIEZvcm0gVCBhdXNzZXIgZGFzIEwyIGR1cmNoIGRlbiBXZXJ0IGF1cyBkZXIgVGFiZWxsZSBtaXQgTDEgZXJzZXR6dCB3aXJkCiAgICogKHdvIFN0cmljaCBpc3QsIGlzdCBkZXIgV2VydCAwKS4iCiAgICogRGllIFNwYWx0ZSBMMSBzdGVodCBpbiBkZW4gS3VuZGVudGFiZWxsZW4gYWxzIFRleHQgbWl0IFRvbGVyYW56IGRhLCB6LiBCLgogICAqICcxNiDCsSAwLDc1JzsgZWluIFN0cmljaCBpc3QgYWxzIG51bGwgZ2VmdWVocnQuIHRrQWJnYW5nKCkgemllaHQgZGFyYXVzIGRpZQogICAqIE1hc3N6YWhsIChkZXV0c2NoZXMgS29tbWEpIGJ6dy4gMCAtIGVzIHdpcmQgbmljaHRzIGdlc2NoYWV0enQuICovCiAgZnVuY3Rpb24gdGtBYmdhbmcobDEpIHsKICAgIGlmIChsMSA9PSBudWxsKSByZXR1cm4gMDsKICAgIGlmICh0eXBlb2YgbDEgPT09ICdudW1iZXInKSByZXR1cm4gaXNGaW5pdGUobDEpID8gbDEgOiBudWxsOwogICAgY29uc3QgbSA9IFN0cmluZyhsMSkubWF0Y2goLy0\\\/XGQrKD86Wy4sXVxkKyk\\\/Lyk7CiAgICBpZiAoIW0pIHJldHVybiBudWxsOwogICAgY29uc3QgdiA9IHBhcnNlRmxvYXQobVswXS5yZXBsYWNlKCcsJywgJy4nKSk7CiAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogbnVsbDsKICB9CiAgLy8gQWJnYW5nc2xhZW5nZSBMMiBkZXIgZ2V3YWVobHRlbiBCYXVmb3JtOiBGb3JtIFQgLT4gU3BhbHRlIEwyLCBGb3JtIFRLIC0+IFNwYWx0ZSBMMS4KICBmdW5jdGlvbiBhYmdhbmdMMihzLCBzcmMpIHsKICAgIGlmICghc3JjKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBzLmZvcm1WYXJpYW50ZSA9PT0gJ1RLJyA\\\/IHRrQWJnYW5nKHNyYy5MMSkgOiBzcmMuTDI7CiAgfQogIC8qIERhcyBNQVNTS1VFUlpFTCBtdXNzIGRlciBCYXVmb3JtIGZvbGdlbiwgbmljaHQgbnVyIGRlciBXZXJ0OiBCZWkgRm9ybSBUSyBzdGFtbXQgZGVyCiAgICogQWJnYW5nIGF1cyBTcGFsdGUgTDEsIGltIERhdGVuYmxhdHQgc3RhbmQgYWJlciB3ZWl0ZXIgIkFiZ2FuZyBMMiIgLSB1bmQgZGlyZWt0CiAgICogZGFydW50ZXIgbm9jaCBlaW5tYWwgZGllc2VsYmUgWmFobCBhbHMgIkwxIi4gRWluIEt1bmRlbmRva3VtZW50LCBkYXMgc2ljaCBzZWxic3QKICAgKiB3aWRlcnNwcmljaHQuIEVpbmUgUXVlbGxlIGZ1ZXIgRGF0ZW5ibGF0dCBVTkQgQW5mcmFnZS1NYWlsLCBkYW1pdCBiZWlkZSBnbGVpY2ggaGVpc3Nlbi4gKi8KICBjb25zdCBhYmdhbmdLdWVyemVsID0gcyA9PiAocyAmJiBzLmZvcm1WYXJpYW50ZSA9PT0gJ1RLJykgPyAnTDEnIDogJ0wyJzsKICAvKiBJbiAxNSBkZXIgMTM3IFplaWxlbiBzdGFuZCBpbiBkZXIgU3BhbHRlIEwxIGVpbiBTdHJpY2ggKGRpZSBrbGVpbnN0ZW4gR3JvZXNzZW46CiAgICogRE4wNi9ETjA4L0ROMTAsIE5XMTAsMi9OVzEzLDUsIDEvNCIvMy84Ii8xLzIiIHVuZCBkaWUgenVnZWhvZXJpZ2VuIHJlZHV6aWVydGVuCiAgICogUGFhcmUpLiBGb3JtIFRLIHdhciBkb3J0IGdlc3BlcnJ0LCB3ZWlsICJTdHJpY2ggPSAwIiBlaW5lbiBBYmdhbmcgZXJnZWJlbiBoYWV0dGUsCiAgICogZGVyIGt1ZXJ6ZXIgYWxzIGRlciBSYWRpdXMgZGVzIExhdWZyb2hycyBpc3QgLSB6ZWljaG5lcmlzY2ggdW5tb2VnbGljaC4KICAgKiBHRUtMQUVSVCwgQmVybmQgTGlua2VyIDMxLjA3LjIwMjY6ICJkYSBlcyBpbiBkZXIgTm9ybSBuaWNodCBnZW5hbm50IHdpcmQgaGFiZSBpY2gKICAgKiBiZWkgZWluZW0gTGllZmVyYW50ZW4gbmFjaGdlc2VoZW4sIGRlciBnaWJ0IGRlbiBXZXJ0IGJlaSBkZW4ga2xlaW5lbiBHcm9lc3NlbiBtaXQKICAgKiAxMW1tIGFuLiBEYW5uIG5pbW10IGRpZXNlIDExbW0gZnVlciBhbGxlIHdvIGVzIGRpciBmZWhsdC4iIC0+IEwxID0gMTEgaW4gZGF0YS5qcywKICAgKiBhbGxlIDEzNyBLb21iaW5hdGlvbmVuIHNpbmQgZnJlaS4gRGllIFNwZXJyZSBibGVpYnQgYWxzIFNpY2hlcmhlaXRzbmV0eiBzdGVoZW46CiAgICoga29tbXQga3VlbmZ0aWcgZWluZSBaZWlsZSBvaG5lIEwxIGRhenUsIGJsZWlidCBGb3JtIFRLIGRvcnQgYXV0b21hdGlzY2ggenUsCiAgICogc3RhdHQgZWluZSAwIHp1IHplaWNobmVuLiAqLwogIGZ1bmN0aW9uIHRrUXVlbGxlKHMpIHsKICAgIGNvbnN0IHQgPSB0eXBPYmoocy50eXApOyBpZiAoIXQgfHwgIXQuZm9ybVdhaGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHQucmVkdXppZXJ0ID8gdFN0dWVja1BhaXIocykgOiByb3dGb3Iocyk7CiAgfQogIGZ1bmN0aW9uIHRrT2huZU1hc3MocykgewogICAgaWYgKCFzIHx8IHMuZm9ybVZhcmlhbnRlICE9PSAnVEsnKSByZXR1cm4gZmFsc2U7CiAgICBjb25zdCBzcmMgPSB0a1F1ZWxsZShzKTsKICAgIHJldHVybiAhIXNyYyAmJiBzcmMuTDEgPT0gbnVsbDsKICB9CiAgLy8gU2ljaGVyaGVpdHNuZXR6IGZ1ZXIgZWluZSB1bmJla2FubnRlIEJhdWZvcm0gKHdlZGVyIFQgbm9jaCBUSykuCiAgZnVuY3Rpb24gaXN0Rm9ybU9obmVNYXNzZShzKSB7CiAgICBjb25zdCB0ID0gdHlwT2JqKHMudHlwKTsKICAgIGlmICghdCB8fCAhdC5mb3JtV2FobCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHMuZm9ybVZhcmlhbnRlICE9PSAnVCcgJiYgcy5mb3JtVmFyaWFudGUgIT09ICdUSycpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIHRrT2huZU1hc3Mocyk7CiAgfQoKICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0YXRlICovCiAgY29uc3Qgc3RhdGUgPSB7CiAgICBzdGVwOiAxLCBhbndlbmR1bmc6IG51bGwsIG5vcm06IG51bGwsIHR5cDogbnVsbCwgcmVpaGU6ICdBJywKICAgIC8vIERpZSBXZWlzcy1QcmVpc2xpc3RlbiBiZXppZWhlbiBzaWNoIGF1ZiBLTC4gRGVzaGFsYiBzdGFydGV0IGRpZSBzaWNodGJhcmUKICAgIC8vIEF1c3dhaGwgYXVmIGRlciBQcmVpc2xpc3RlbmJhc2lzOyBLSyBibGVpYnQgYWxzIGJld3Vzc3QgZ2V3YWVobHRlLAogICAgLy8gcmFiYXR0aWVydGUgVmFyaWFudGUgdmVyZnVlZ2Jhci4KICAgIGdyb2Vzc2U6IG51bGwsIGdyb2Vzc2UyOiBudWxsLCBsYWVuZ2VWYXJpYW50ZTogJ0tMJywgZXh6ZW50cmlzY2g6IGZhbHNlLAogICAgLy8gQ29ubmVjdC1GbGFuc2NoZSBoYWJlbiBlaW5lIGVpZ2VuZSBOb3JtZmFtaWxpZSwgQmF1Zm9ybSB1bmQgTGFlbmdlbndhaGwuCiAgICBjb25uZWN0Tm9ybTogJ0RJTicsIGNvbm5lY3RMYWVuZ2U6IG51bGwsIGNvbm5lY3RBbnNjaGx1c3M6ICdCVycsCiAgICAvLyBSMy0zL1IzLTQ6IEJhdWZvcm0gZGVyIFQtU3TDvGNrZS4gJ1QnID0gYWxsZSBBYmfDpG5nZSBnbGVpY2ggbGFuZyAoRGVmYXVsdCwgPSBiaXNoZXJpZ2VzCiAgICAvLyBWZXJoYWx0ZW4pLCAnVEsnID0gRHVyY2hnYW5nIGdsZWljaCwgQWJnYW5nIGt1cnouIE51ciByZWxldmFudCBmw7xyIFR5cGVuIG1pdCBmb3JtV2FobDp0cnVlLgogICAgZm9ybVZhcmlhbnRlOiAnVCcsCiAgICAvLyBOdXIgZnVlciBUeXBlbiBtaXQgbnVyRmxhbnNjaDp0cnVlIChCbGluZGRlY2tlbCwgS2xhbW1lcikgLSB1bmFiaGFlbmdpZyB2b24gcmVpaGUvZ3JvZXNzZS4KICAgIGZsYW5zY2g6IG51bGwsCiAgICAvLyBOdXIgZnVlciBkaWUgS2xhbW1lciAoQWJzY2huaXR0IEUpOiBCYXVmb3JtICsgZWlnZW5lciBXZXJrc3RvZmYgKyBNdXR0ZXItQXJ0LgogICAgLy8ga2xhbW1lck11dHRlcjogJ00nID0gTXV0dGVyIChTdGFuZGFyZCksICdTJyA9IFNlY2hza2FudG11dHRlciAoQXVmcHJlaXMpLCBSMi00LgogICAga2xhbW1lclR5cDogJ0tMMScsIGtsYW1tZXJXZXJrc3RvZmY6ICcxLjQzMDgnLCBrbGFtbWVyTXV0dGVyOiAnTScsCiAgICB3ZXJrc3RvZmY6ICcxLjQ0MDQnLCBvYmVyZmxhZWNoZTogJ0gzJywgZGljaHR1bmc6IG51bGwsIGxpcHBlOiAnTCcsCiAgICBuYWNod2Vpc2U6IChELnByZWlzZS5uYWNod2Vpc1N0YW5kYXJkIHx8IFtdKS5zbGljZSgpLCBtZW5nZTogMSwKICAgIHZpZXc6ICd6ZWljaG51bmcnLCAgICAgICAgLy8gJ3plaWNobnVuZycgKERJTikgfCAnYW5zaWNodCcgKFByb2R1a3QtUmVuZGVyKQogICAgcG9zaXRpb25lbjogW10sIGtvbnRha3Q6IHsgZmlybWE6JycsIG5hbWU6JycsIGVtYWlsOicnLCB0ZWxlZm9uOicnLCB0ZXJtaW46JycsIGZyZWl0ZXh0OicnIH0KICB9OwoKICAvKiAtLSBVcnNwcnVuZ3N6dXN0YW5kIGZ1ZXIgZGVuIFp1cnVlY2tzZXR6ZW4tQnV0dG9uIChBNSwgQmVybmQgUGt0LiA4KSAtLS0tCiAgICogVGllZmUgS29waWUgZGVzIFN0YXJ0LVN0YXRlcyAtIEdFTkFVIEhJRVIgZ2V6b2dlbiwgYWxzbyBiZXZvciBwcmVmaWxsKCkgaWhuCiAgICogdW50ZW4gYXVzIGRlciBVUkwgdWViZXJzY2hyZWlidC4gU29uc3Qgd3VlcmRlIGRlciBCdXR0b24gYmVpIGVpbmVtIGdldGVpbHRlbgogICAqIEtvbmZpZ3VyYXRpb25zLUxpbmsgYXVmIERFU1NFTiBTdGFuZCB6dXJ1ZWNrc3RlbGxlbiBzdGF0dCBhdWYgZGVuIGVjaHRlbgogICAqIFVyc3BydW5nICgid2llIGJlaW0gZXJzdGVuIExhZGVuIjogU2Nocml0dCAxLCBrZWluZSBBdXN3YWhsLCBEZWZhdWx0cykuCiAgICogSlNPTiByZWljaHQgYWxzIEtsb24gLSBkZXIgU3RhdGUgdHJhZWd0IG51ciBTdHJpbmdzL1phaGxlbi9Cb29scy9udWxsLAogICAqIGVpbiBBcnJheSB1bmQgZWluIGZsYWNoZXMgT2JqZWt0LCBrZWluZSBGdW5rdGlvbmVuL0RhdGVzLiAqLwogIGNvbnN0IFVSU1BSVU5HID0gSlNPTi5zdHJpbmdpZnkoc3RhdGUpOwogIGNvbnN0IGlzdFVyc3BydW5nID0gKCkgPT4gSlNPTi5zdHJpbmdpZnkoc3RhdGUpID09PSBVUlNQUlVORzsKCiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25zdHJhaW50cyAqLwogIGZ1bmN0aW9uIHNwZXJyRGljaHR1bmdlbigpIHsKICAgIGNvbnN0IG91dCA9IG5ldyBTZXQoKTsKICAgIEQuY29uc3RyYWludHMuZm9yRWFjaChjID0+IHsKICAgICAgaWYgKGMuc3BlcnJlRGljaHR1bmcgJiYgYy53ZW5uICYmIGMud2Vubi5hbndlbmR1bmcgJiYgYy53ZW5uLmFud2VuZHVuZy5pbmNsdWRlcyhzdGF0ZS5hbndlbmR1bmcpKQogICAgICAgIGMuc3BlcnJlRGljaHR1bmcuZm9yRWFjaCh4ID0+IG91dC5hZGQoeCkpOwogICAgfSk7CiAgICByZXR1cm4gb3V0OwogIH0KCiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQYXJhbXMgLT4gU1ZHICovCiAgZnVuY3Rpb24gY29ubmVjdExlbmd0aEZvcihzLCBydykgewogICAgaWYgKCFydyB8fCAhQXJyYXkuaXNBcnJheShydy5sYWVuZ2VuKSkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gcncubGFlbmdlbi5maW5kKHggPT4gTnVtYmVyKHguTCkgPT09IE51bWJlcihzLmNvbm5lY3RMYWVuZ2UpKSB8fCBydy5sYWVuZ2VuWzBdIHx8IG51bGw7CiAgfQogIGZ1bmN0aW9uIGNvbm5lY3RFbmRGb3IocywgcncpIHsKICAgIHJldHVybiBydyAmJiBydy5hbnNjaGx1ZXNzZSA\\\/IHJ3LmFuc2NobHVlc3NlW3MuY29ubmVjdEFuc2NobHVzc10gfHwgbnVsbCA6IG51bGw7CiAgfQogIGZ1bmN0aW9uIHBhcmFtc0ZvcihzKSB7CiAgICBjb25zdCB0ID0gdHlwT2JqKHMudHlwKTsgaWYgKCF0KSByZXR1cm4gbnVsbDsKICAgIC8vIG51ckZsYW5zY2gtVHlwZW4gKEJsaW5kZGVja2VsL0tsYW1tZXIpOiBFcyBnaWJ0IG51ciBkZW4gRmxhbnNjaC3DmC4gRWluIFJvaHIt4oyALwogICAgLy8gZWluZSBXYW5kc3RhZXJrZSB3YWVyZSBnZXJhdGVuIC0+IGRpZSBaZWljaG51bmcgYmVrb21tdCBOVVIgZGllIGJlbGVndGVuIEZsYW5zY2gtCiAgICAvLyBtYXNzZS4gUnVuZGUgNyAoVy0wNTkpOiBkcmF3LmpzL3JlbmRlci5qcyBoYWJlbiBlY2h0ZSBaZWljaG51bmdlbiBmdWVyIGRlbgogICAgLy8gQmxpbmRkZWNrZWwgKEEgKyBEZWNrZWxzdGFlcmtlIEwpIHVuZCBkaWUgS2xhbW1lciAoQSArIEtsZW1tLeKMgCwgamUgS2xhbW1lcnR5cCkuCiAgICAvLyBGZWhsdCBkYXMgYmVsZWd0ZSBNYXNzIChGbGFuc2NoIDI4NiwxLzMxOS8zMzgpLCBibGVpYnQgcGFyYW1zIG51bGwgdW5kCiAgICAvLyByZW5kZXJQcmV2aWV3IHplaWd0IHdlaXRlcmhpbiBkaWUgIlplaWNobnVuZyBmb2xndCItS2FydGUgc3RhdHQgZXJmdW5kZW5lciBNYXNzZS4KICAgIGlmIChpc3ROdXJGbGFuc2NoKHQpKSB7CiAgICAgIGNvbnN0IGYgPSBmbGFuc2NoRm9yKHMpOyBpZiAoIWYpIHJldHVybiBudWxsOwogICAgICBjb25zdCBiYXNpcyA9IHsgZmxhbmdlT2Q6IGYuZmxhbmdlT0QsIGxhYmVsOiAnRmxhbnNjaC3ijIAgJyArIGYubGFiZWwsIHByb3ZEaW1zOiBmYWxzZSB9OwogICAgICBpZiAoaXN0S2xhbW1lcih0KSkgewogICAgICAgIGNvbnN0IGEgPSBmLmtsYW1tZXJBID8gZi5rbGFtbWVyQVtzLmtsYW1tZXJUeXBdIDogbnVsbDsKICAgICAgICBpZiAoIShhID4gMCkpIHJldHVybiBudWxsOwogICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGJhc2lzLCB7CiAgICAgICAgICB0eXBlOiAna2xhbW1lcicsIGtsYW1tZXJBOiBhLCBrbGFtbWVyVHlwOiBzLmtsYW1tZXJUeXAsIGtsYW1tZXJNdXR0ZXI6IHMua2xhbW1lck11dHRlciwKICAgICAgICAgIHdlcmtzdG9mZjogZWZmV2Vya3N0b2ZmKHMpLCBzdXJmYWNlOiAnJyAgIC8vIFIyLTQ6IEtsYW1tZXIgaGF0IGtlaW5lIE9iZXJmbGFlY2hlCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKCEoZi5ibGluZFRoayA+IDApKSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYmFzaXMsIHsKICAgICAgICB0eXBlOiAnYmxpbmRkZWNrZWwnLCBsZW5ndGg6IGYuYmxpbmRUaGssCiAgICAgICAgd2Vya3N0b2ZmOiBlZmZXZXJrc3RvZmYocyksIHN1cmZhY2U6IHMub2JlcmZsYWVjaGUKICAgICAgfSk7CiAgICB9CiAgICAvLyBtYXNzZUZvbGd0IChDRi9DRkkpOiBrZWluIGVpbnppZ2VzIGJlbGVndGVzIE1hc3MgLT4ga2VpbmUgUGFyYW1zLCBrZWluZSBaZWljaG51bmcuCiAgICAvLyAocm93Rm9yKCkgbGllZmVydCBoaWVyIG9obmVoaW4gbnVsbCwgZGFzIGlzdCBudXIgZGllIGV4cGxpeml0ZSBBYnNpY2h0LikKICAgIGlmIChpc3RNYXNzZUZvbGd0KHQpKSByZXR1cm4gbnVsbDsKICAgIC8vIFJlZHV6aWVydW5nIG9obmUgendlaXRlbiDDmDoga2VpbiBiZWxlZ3RlcyBNYXNzIC0+IGtlaW5lIFBhcmFtcywga2VpbmUgWmVpY2hudW5nLgogICAgLy8gcmVuZGVyUHJldmlldygpIGZhZW5ndCBkYXMgYWIgdW5kIHplaWd0IGRpZSAiZm9sZ3QiLUthcnRlLCBzdGF0dCBkcmF3LmpzIGVpbmVuCiAgICAvLyBhdXMgMC42NiBnZXJlY2huZXRlbiDDmCAoMzQsOTggJiBDby4pIGJlbWFzc2VuIHp1IGxhc3Nlbi4KICAgIGlmIChpc3RSZWR1emllcnVuZ09obmVad2VpdE9EKHMpKSByZXR1cm4gbnVsbDsKICAgIGNvbnN0IHJ3ID0gcm93Rm9yKHMpOyBpZiAoIXJ3KSByZXR1cm4gbnVsbDsKICAgIGlmICh0LmlkID09PSAnQ0YnKSB7CiAgICAgIGNvbnN0IGxnID0gY29ubmVjdExlbmd0aEZvcihzLCBydyk7CiAgICAgIGlmICghbGcgfHwgcncuRGUgPT0gbnVsbCB8fCBydy5EaSA9PSBudWxsIHx8IHJ3LkRmID09IG51bGwgfHwgbGcuTCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIHsKICAgICAgICB0eXBlOidjb25uZWN0ZmxhbnNjaCcsIG9kOnJ3LkRlLCBpbm5lckRpYW1ldGVyOnJ3LkRpLCBmbGFuZ2VPZDpydy5EZiwKICAgICAgICBsZW5ndGg6bGcuTCwgcHJvZHVjdFNlcmllczpjb25uZWN0U2VyaWUocyksIGxhYmVsOmxibChydyksCiAgICAgICAgc3VyZmFjZTpzLm9iZXJmbGFlY2hlLCB3ZXJrc3RvZmY6ZWZmV2Vya3N0b2ZmKHMpLCBwcm92RGltczpmYWxzZQogICAgICB9OwogICAgfQogICAgaWYgKHQuaWQgPT09ICdDRkknKSB7CiAgICAgIGNvbnN0IGVuZCA9IGNvbm5lY3RFbmRGb3IocywgcncpOwogICAgICBjb25zdCB1cHBlciA9IEQubWFzc2UuY29ubmVjdC5jZmkub2JlcmVyQW5zY2hsdXNzOwogICAgICBjb25zdCBlbmREaWFtZXRlciA9IGVuZCA\\\/IChzLmNvbm5lY3RBbnNjaGx1c3MgPT09ICdUQycgPyBlbmQuVEMgOiBlbmQuQSkgOiBudWxsOwogICAgICBpZiAoIWVuZCB8fCAhdXBwZXIgfHwgcncuRGUgPT0gbnVsbCB8fCBydy5EaSA9PSBudWxsIHx8IHJ3LlkgPT0gbnVsbCB8fCBlbmQuTCA9PSBudWxsIHx8IGVuZERpYW1ldGVyID09IG51bGwgfHwgdXBwZXIuRGUgPT0gbnVsbCB8fCB1cHBlci5EaSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIHsKICAgICAgICB0eXBlOidjb25uZWN0aW5saW5lJywgb2Q6cncuRGUsIGlubmVyRGlhbWV0ZXI6cncuRGksIGxlbmd0aDplbmQuTCwKICAgICAgICBicmFuY2hIZWlnaHQ6cncuWSwgZW5kVHlwZTpzLmNvbm5lY3RBbnNjaGx1c3MsIGVuZERpYW1ldGVyLAogICAgICAgIHVwcGVyT3V0ZXJEaWFtZXRlcjp1cHBlci5EZSwgdXBwZXJJbm5lckRpYW1ldGVyOnVwcGVyLkRpLAogICAgICAgIHByb2R1Y3RTZXJpZXM6Y29ubmVjdFNlcmllKHMpLCBsYWJlbDpsYmwocncpLCBzdXJmYWNlOnMub2JlcmZsYWVjaGUsCiAgICAgICAgd2Vya3N0b2ZmOmVmZldlcmtzdG9mZihzKSwgcHJvdkRpbXM6ZmFsc2UKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IGRPID0gZGljaHRPYmoocy5kaWNodHVuZyk7CiAgICBjb25zdCBwID0gewogICAgICAvLyBlaW56ZWxTdHV0emVuIChUQ0QvVENTKTogJ3N0dXR6ZW4nIHplaWNobmV0IEVJTkVOIFN0dXR6ZW4gLSBvaG5lIHp3ZWl0ZSBGZXJydWxlLAogICAgICAvLyBvaG5lIERpY2h0dW5nLCBvaG5lIEtsYW1tZXIgKEJlcm5kIDE2LjA3LjIwMjYsIFBrdC4gOS4yLzkuMykuCiAgICAgIHR5cGU6ICh0LmVpbnplbFN0dXR6ZW4gJiYgdC5zdmdUeXBlID09PSAnY2xhbXBzdHV0emVuJykgPyAnc3R1dHplbicgOiB0LnN2Z1R5cGUsCiAgICAgIC8vIG9kT2Y6IFRDRCBsaWVmZXJ0IGF1c3NlbkQgKGRpY2t3YW5kaWcpLCBzb25zdCB0dWJlT0QuIE5JRSBkaXJla3QgcncudHViZU9EIC0KICAgICAgLy8gZGllIFRDRC1aZWlsZW4gaGFiZW4ga2VpbiB0dWJlT0QsIGRhcyB3YWVyZSB1bmRlZmluZWQgLT4gZHJhdy5qcy1EZWZhdWx0IOKMgDI1LgogICAgICBvZDogb2RPZihydyksIHdhbGw6IHdhbGxPZihydyksIHN1cmZhY2U6IHMub2JlcmZsYWVjaGUsIHdlcmtzdG9mZjogZWZmV2Vya3N0b2ZmKHMpLAogICAgICBjbGFtcFNpemU6IGxibChydyksIGdhc2tldE1hdGVyaWFsOiBzLmRpY2h0dW5nIHx8ICdFUERNJywgZ2Fza2V0Q29sb3I6IGRPID8gZE8uZmFyYmUgOiBudWxsLAogICAgICBkbjogcy5yZWloZSA9PT0gJ0EnID8gU3RyaW5nKHJ3LmlkKS5yZXBsYWNlKCdETicsICcnKSA6IGxibChydykKICAgIH07CiAgICBpZiAodC5zdmdUeXBlID09PSAnY2xhbXBzdHV0emVuJykgewogICAgICBwLmZsYW5nZU9kID0gcncuZmxhbmdlT0Q7CiAgICAgIC8vIGxhZW5nZU9mOiBUQ0QgLT4gSG9laGUgNjAgKExhYmVsICdoJyksIHNvbnN0IEtLL0tMIChMYWJlbCAnTCcpLiBGZWhsdCBkYXMgTWFzcywKICAgICAgLy8gYmxlaWJ0IHAubGVuZ3RoIHVuZ2VzZXR6dCAtIGRhbm4gemVpY2huZXQgZHJhdy5qcyBzZWluZW4gRGVmYXVsdC4gRGFzIGRhcmYgbnVyCiAgICAgIC8vIHBhc3NpZXJlbiwgd2VubiBkaWUgWmVpbGUgd2lya2xpY2gga2VpbiBMYWVuZ2VubWFzcyB0cmFlZ3QuCiAgICAgIGNvbnN0IGxnID0gbGFlbmdlT2YodCwgcncsIHMubGFlbmdlVmFyaWFudGUpOwogICAgICBpZiAobGcpIHsgcC5sZW5ndGggPSBsZy53ZXJ0OyBwLmxlbmd0aExhYmVsID0gbGcubGFiZWw7IH0KICAgIH0KICAgIGVsc2UgaWYgKHQuc3ZnVHlwZSA9PT0gJ2JsaW5ka2FwcGUnKSB7IHAuZmxhbmdlT2QgPSBydy5mbGFuZ2VPRDsgcC5sZW5ndGggPSBydy5razsgfQogICAgZWxzZSBpZiAodC5zdmdUeXBlID09PSAna2xhbW1lcicpIHsgcC5mbGFuZ2VPZCA9IHJ3LmZsYW5nZU9EOyB9CiAgICAvLyBUeXAgRCAnZGljaHR1bmcnIChSdW5kZSA3LCBXLTA1OSk6IEUvQyBrb21tZW4gYXVzIGRlciBiZWxlZ3RlbiBESU4zMjY3Ni1aZWlsZTsKICAgIC8vIGRlciBUeXAgZm9sZ3QgZGVyIGJlbGVndGVuIEF1c2Z1ZWhydW5nc3JlZ2VsIChUeXAgSUkgPSBtaXQgTGlwcGUsIFR5cCBJID0gb2huZSwKICAgIC8vIHdhZWhsYmFyIG51ciBpbiBSZWloZSBDKS4gZHJhdy5qcy9yZW5kZXIuanMgZmFsbGVuIG9obmUgRS9DIHNlbGJzdCBhdWYgZGVuCiAgICAvLyBQbGF0emhhbHRlciB6dXJ1ZWNrIC0gaGllciB3aXJkIG5pY2h0cyBlcmdhZW56dCBvZGVyIGdlcmF0ZW4uCiAgICBlbHNlIGlmICh0LnN2Z1R5cGUgPT09ICdkaWNodHVuZycpIHsKICAgICAgLy8gSW5uZW4tw5ggaGFlbmd0IHNlaXQgZGVtIDExLjA4LjIwMjYgYW0gRGljaHR1bmdzd2Vya3N0b2ZmIChCZXJuZDogd2VpY2ggPSBTdHV0emVuCiAgICAgIC8vICsgMCwyIG1tLCBQVEZFIHVuZCBQVEZFL0ZLTSA9IFN0dXR6ZW4tSW5uZW4tw5gsIFRDMjUgZWlnZW5lIFdlcnRlKS4gRGVzaGFsYiBOSUUKICAgICAgLy8gcncuZ2Fza2V0SUQgZGlyZWt0IHplaWNobmVuIC0gZGFzIHdhZXJlIGltbWVyIGRlciB3ZWljaGUgRmFsbC4KICAgICAgcC5nYXNrZXRPZCA9IHJ3Lmdhc2tldE9EOyBwLmdhc2tldElkID0gZGljaHR1bmdJbm5lbkQocywgcncpOwogICAgICBwLmdhc2tldFR5cGUgPSBlZmZMaXBwZShzKSA9PT0gJ08nID8gJ0knIDogJ0lJJzsKICAgICAgLy8gRGllIExlZ2VuZGUgZGVyIFplaWNobnVuZyBmdWVocnRlIGJpcyB6dW0gMTEuMDguMjAyNiBhdWNoIGJlaSBkZXIgRGljaHR1bmcKICAgICAgLy8gIldlcmtzdG9mZiAxLjQ0MzUgLyBPYmVyZmxhZWNoZSBINCIgLSBnZW5hdSBkaWUgendlaSBBbmdhYmVuLCBkaWUgQmVybmQgaGllcgogICAgICAvLyB3ZWdoYWJlbiB3aWxsLiBsZWdlbmRCb3goKSBmaWx0ZXJ0IGxlZXJlIFdlcnRlIHNlbGJzdCBoZXJhdXMsIGRlc2hhbGIgcmVpY2h0CiAgICAgIC8vIGVzLCBzaWUgZ2FyIG5pY2h0IGVyc3QgbWl0enVnZWJlbi4KICAgICAgcC53ZXJrc3RvZmYgPSAnJzsgcC5zdXJmYWNlID0gJyc7CiAgICB9CiAgICBlbHNlIGlmIChpc0JlbmQodCkpIHsKICAgICAgY29uc3QgdGFuZ2VudCA9IHQuYm9nZW4gPT09IDQ1ID8gcncuTDNfNDUgOiBydy5MM185MDsKICAgICAgY29uc3Qgb3ZlcmFsbCA9IHQuYm9nZW4gPT09IDQ1ID8gcncuTDIgOiBydy5MMTsKICAgICAgaWYgKHJ3LlIgPT0gbnVsbCB8fCB0YW5nZW50ID09IG51bGwgfHwgb3ZlcmFsbCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgcC5iZW5kUmFkaXVzID0gcncuUjsgcC5sZW5ndGggPSB0YW5nZW50OyBwLmxlbmd0aExhYmVsID0gJ0wzJzsKICAgICAgcC5vdmVyYWxsTGVuZ3RoID0gb3ZlcmFsbDsgcC5vdmVyYWxsTGVuZ3RoTGFiZWwgPSB0LmJvZ2VuID09PSA0NSA\\\/ICdMMicgOiAnTDEnOwogICAgfQogICAgLyogVC1TdHVlY2s6IERpZSBBYmdhbmdzbGFlbmdlIGlzdCBqZXR6dCBpbiBCRUlERU4gQmF1Zm9ybWVuIGVpbiBlY2h0ZXMgTWFzcyBhdXMKICAgICAqIGRlciBLdW5kZW50YWJlbGxlIC0gRm9ybSBUIGF1cyBTcGFsdGUgTDIsIEZvcm0gVEsgYXVzIFNwYWx0ZSBMMSAoQmVybmQKICAgICAqIDI3LjA3LjIwMjYpLiBFcyB3aXJkIHdlaXRlcmhpbiBuaWNodHMgZ2VzY2hhZXR6dDogZmVobHQgZGVyIFdlcnQsIGdpYnQgZXMKICAgICAqIGtlaW5lIFplaWNobnVuZy4gKi8KICAgIGVsc2UgaWYgKHQuc3ZnVHlwZSA9PT0gJ3RzdHVlY2snKSB7CiAgICAgIC8vIFJlZHV6aWVydDogTDIgKHVuZCBMMSkgaGFlbmdlbiBhbSBiZWxlZ3RlbiBQYWFyLCBuaWNodCBhbiBkZXIgRHVyY2hnYW5nc3plaWxlLgogICAgICAvLyBPaG5lIGJlbGVndGVzIFBhYXIvWndlaXQtw5ggLT4gbnVsbCAoZmFpbC1jbG9zZWQsIGtlaW5lIGVyZnVuZGVuZSBaZWljaG51bmcpLgogICAgICBjb25zdCBwYWlyID0gdC5yZWR1emllcnQgPyB0U3R1ZWNrUGFpcihzKSA6IG51bGw7CiAgICAgIGNvbnN0IHNyYyA9IHQucmVkdXppZXJ0ID8gcGFpciA6IHJ3OwogICAgICBpZiAodGtPaG5lTWFzcyhzKSkgcmV0dXJuIG51bGw7CiAgICAgIGNvbnN0IGJyYW5jaEwyID0gYWJnYW5nTDIocywgc3JjKTsKICAgICAgaWYgKHJ3LkwgPT0gbnVsbCB8fCBydy5MMCA9PSBudWxsIHx8IGJyYW5jaEwyID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBjb25zdCByMiA9IHQuendlaXRlR3JvZXNzZSA\\\/IHJvdzJGb3IocykgOiBudWxsOwogICAgICBpZiAodC5yZWR1emllcnQgJiYgIXIyKSByZXR1cm4gbnVsbDsKICAgICAgcC5sZW5ndGggPSBydy5MOyBwLmJyYW5jaExlbmd0aCA9IGJyYW5jaEwyOwogICAgICBwLmJyYW5jaE9kID0gKHQucmVkdXppZXJ0ICYmIHIyKSA\\\/IG9kT2YocjIpIDogb2RPZihydyk7CiAgICAgIHAudGZvcm0gPSBzLmZvcm1WYXJpYW50ZSA9PT0gJ1RLJyA\\\/ICdUSycgOiAnVCc7CiAgICB9CiAgICAvLyBEZXIgendlaXRlIMOYIGtvbW10IEFVU1NDSExJRVNTTElDSCBhdXMgcm93MkZvciAoc3RhdGUuZ3JvZXNzZTIpIC0gbmllIGF1cyBlaW5lbQogICAgLy8gRmFrdG9yLiBpc3RSZWR1emllcnVuZ09obmVad2VpdE9EIGhhdCBvYmVuIHNjaG9uIG51bGwgZ2VsaWVmZXJ0LCBmYWxscyBlciBmZWhsdDsKICAgIC8vIGRhcyBpZighcjIpIHJldHVybiBudWxsIGlzdCBkaWUgZG9wcGVsdGUgQWJzaWNoZXJ1bmc6IGxpZWJlciBrZWluZSBaZWljaG51bmcgYWxzCiAgICAvLyBlaW5lIGVyZnVuZGVuZSBSZWR1emllcnVuZy4KICAgIGVsc2UgaWYgKHQuc3ZnVHlwZSA9PT0gJ3JlZHV6aWVydW5nJykgewogICAgICBjb25zdCByMiA9IHJvdzJGb3IocyksIHBhaXIgPSByZWR1Y3Rpb25QYWlyKHMpOwogICAgICBpZiAoIXIyIHx8ICFwYWlyIHx8IHBhaXIuTCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgcC5vZDIgPSBvZE9mKHIyKTsgcC53YWxsMiA9IHdhbGxPZihyMik7IHAubGVuZ3RoID0gcGFpci5MOyBwLmVjY2VudHJpYyA9IHMuZXh6ZW50cmlzY2g7CiAgICB9CiAgICBwLnByb3ZEaW1zID0gZmFsc2U7CiAgICByZXR1cm4gcDsKICB9CgogIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJlaXMgKi8KICAvKiBTcHJ1bmdtYXJrZW4gdW50ZXIgZGVtIFN0dWVja3phaGxmZWxkLiBWZXJlaW5pZ3VuZyBhdXMgZGVuIGFsbGdlbWVpbmVuCiAgICogTWVuZ2Vudm9yc2NobGFlZ2VuIChELm1lbmdlbnN0YWZmZWwpIHVuZCBkZW4gdGF0c2FlY2hsaWNoZW4gUmFiYXR0c3R1ZmVuCiAgICogKEQucHJlaXNlLnN0YWZmZWwpLiBPaG5lIGRpZSBWZXJlaW5pZ3VuZyB3YXIgZWluZSBpbSBBZG1pbiBnZXBmbGVndGUgU3R1ZmUKICAgKiBwZXIgS2xpY2sgbmljaHQgZXJyZWljaGJhcjogZGllIEtub2VwZmUgc3RhbmRlbiBmZXN0IGF1ZiAxLzI1LzUwLzEwMC8yNTAsCiAgICogZ2VyZWNobmV0IHd1cmRlIGFiZXIgbWl0IGRlbiBTdHVmZW4gYXVzIGRlciBTdGFmZmVsIChCZWZ1bmQgMjEuMDguMjAyNikuICovCiAgZnVuY3Rpb24gbWVuZ2VuU3BydW5nbWFya2VuKCkgewogICAgY29uc3QgYmFzaXMgPSBBcnJheS5pc0FycmF5KEQubWVuZ2Vuc3RhZmZlbCkgPyBELm1lbmdlbnN0YWZmZWwgOiBbMV07CiAgICBjb25zdCBzdHVmZW4gPSAoRC5wcmVpc2UgJiYgQXJyYXkuaXNBcnJheShELnByZWlzZS5zdGFmZmVsKSA\\\/IEQucHJlaXNlLnN0YWZmZWwgOiBbXSkKICAgICAgLmZpbHRlcih4ID0+IHggJiYgeC5yYWJhdHQgPiAwICYmIHguYWIgPiAwKQogICAgICAubWFwKHggPT4geC5hYik7CiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGJhc2lzLmNvbmNhdChzdHVmZW4pKSkuc29ydCgoYSwgYikgPT4gYSAtIGIpOwogIH0KCiAgLyogRXhha3RlIFByZWlzbGlzdGVuIHZvbiBXZWlzcyAoMjEuMDguMjAyNikuIERpZSBaZWlsZW5zY2hsdWVzc2VsIGZvbGdlbgogICAqIFJlaWhlICsgR3JvZXNzZW4tSUQgYXVzIGRhdGEuanMuIFQgdW5kIFRLIGhhYmVuIGdldHJlbm50ZSBTcGFsdGVuLiBLbGFtbWVyCiAgICogdW5kIEJsaW5kZGVja2VsIHdlcmRlbiB3aWUgaW0gVUkgbnVyIG5hY2ggRmxhbnNjaC3DmCBiZXByZWlzdC4gKi8KICBmdW5jdGlvbiBleGFjdFByaWNlS2V5KHMsIHQpIHsKICAgIGlmICghcyB8fCAhdCkgcmV0dXJuIG51bGw7CiAgICBpZiAodC5pZCA9PT0gJ1RTJykgcmV0dXJuIHMuZm9ybVZhcmlhbnRlID09PSAnVEsnID8gJ1RTX1RLJyA6ICdUU19UJzsKICAgIHJldHVybiB0LmlkOwogIH0KCiAgZnVuY3Rpb24gZXhhY3RCYXNlUHJpY2UocywgdCwgUCkgewogICAgaWYgKCFzIHx8ICF0IHx8ICFQKSByZXR1cm4gbnVsbDsKICAgIGlmIChpc3ROdXJGbGFuc2NoKHQpKSB7CiAgICAgIGNvbnN0IHJvdyA9IFAuZmxhbnNjaHByZWlzICYmIHMuZmxhbnNjaCA\\\/IFAuZmxhbnNjaHByZWlzW3MuZmxhbnNjaF0gOiBudWxsOwogICAgICByZXR1cm4gcm93ICYmIHJvd1t0LmlkXSAhPSBudWxsID8gTnVtYmVyKHJvd1t0LmlkXSkgOiBudWxsOwogICAgfQogICAgY29uc3Qgcm93S2V5ID0gcy5yZWloZSAmJiBzLmdyb2Vzc2UgPyBzLnJlaWhlICsgJzonICsgcy5ncm9lc3NlIDogbnVsbDsKICAgIGNvbnN0IHJvdyA9IHJvd0tleSAmJiBQLmV4YWt0ID8gUC5leGFrdFtyb3dLZXldIDogbnVsbDsKICAgIGNvbnN0IHByaWNlS2V5ID0gZXhhY3RQcmljZUtleShzLCB0KTsKICAgIHJldHVybiByb3cgJiYgcHJpY2VLZXkgJiYgcm93W3ByaWNlS2V5XSAhPSBudWxsID8gTnVtYmVyKHJvd1twcmljZUtleV0pIDogbnVsbDsKICB9CgogIC8qIERpZSBQcmVpc2xpc3RlbndlcnRlIGZ1ZXIgVEMgdW5kIFRDUyBiZXppZWhlbiBzaWNoIGxhdXQgQmVybmQgTGlua2VyIGF1ZgogICAqIGRpZSBsYW5nZSBTdHV0emVubGFlbmdlIEtMIChNYWlsIHZvbSAyOC4wOC4yMDI2KS4gRnVlciBLSyBnZWx0ZW4gZGllIHZvbgogICAqIGlobSBiZXN0YWV0aWd0ZW4gQWJzY2hsYWVnZTogRWluemVsc3R1dHplbiAtNDAgJSwga29tcGxldHRlIFZlcmJpbmR1bmcKICAgKiAtMzcgJS4gQWxsZSBhbmRlcmVuIFR5cGVuIHVuZCBLTCBibGVpYmVuIHVudmVyYWVuZGVydC4gKi8KICBmdW5jdGlvbiBsYWVuZ2VuUHJlaXNGYWt0b3IocywgdCkgewogICAgaWYgKCFzIHx8ICF0IHx8IHMubGFlbmdlVmFyaWFudGUgIT09ICdLSycpIHJldHVybiAxOwogICAgaWYgKHQuaWQgPT09ICdUQ1MnKSByZXR1cm4gMC42MDsKICAgIGlmICh0LmlkID09PSAnVEMnKSByZXR1cm4gMC42MzsKICAgIHJldHVybiAxOwogIH0KCiAgZnVuY3Rpb24gcHJpY2VJbmZvKHMpIHsKICAgIGNvbnN0IHQgPSB0eXBPYmoocy50eXApLCBuID0gRC5ub3JtZW4uZmluZCh4ID0+IHguaWQgPT09IHMubm9ybSksIFAgPSBELnByZWlzZTsKICAgIGlmICghdCB8fCAhbikgcmV0dXJuIHsgbW9kZTogJ2FuZnJhZ2UnIH07CiAgICBpZiAobi5wcmVpc01vZHVzID09PSAnYW5mcmFnZScpIHJldHVybiB7IG1vZGU6ICdhbmZyYWdlJywgZ3J1bmQ6IG4ubGFiZWwgKyAnIOKAkyBGaXJtYSBXZWlzcyBrYWxrdWxpZXJ0IGluZGl2aWR1ZWxsLicgfTsKICAgIC8vIEZhaWwtc2FmZTogQXVjaCB3ZW5uIGVpbmUgYmVzdGVoZW5kZSBXb3JkUHJlc3MtSW5zdGFsbGF0aW9uIG5vY2ggYWx0ZQogICAgLy8gQmVpc3BpZWx3ZXJ0ZSBvZGVyIHBsYXR6aGFsdGVyOmZhbHNlIGdlc3BlaWNoZXJ0IGhhdCwgZXJzY2hlaW5lbiBFdXJvLQogICAgLy8gQmV0csOkZ2UgZXJzdCBuYWNoIGVpbmVyIGF1c2Ryw7xja2xpY2hlbiBQcmVpc2ZyZWlnYWJlIGltIEFkbWluLgogICAgaWYgKFAuZnJlaWdlZ2ViZW4gIT09IHRydWUpIHJldHVybiB7IG1vZGU6ICdhbmZyYWdlJywgZ3J1bmQ6ICdEaWUgUHJlaXNmcmVpZ2FiZSB2b24gRmlybWEgV2Vpc3Mgc3RlaHQgbm9jaCBhdXMuJyB9OwogICAgaWYgKFAucGxhdHpoYWx0ZXIgPT09IHRydWUpIHJldHVybiB7IG1vZGU6ICdhbmZyYWdlJywgZ3J1bmQ6ICdGaXJtYSBXZWlzcyBrYWxrdWxpZXJ0IGluZGl2aWR1ZWxsLicgfTsKICAgIGNvbnN0IGV4YWN0TW9kZSA9IFAubW9kdXMgPT09ICdleGFrdCc7CiAgICBjb25zdCBiYXNlID0gZXhhY3RNb2RlCiAgICAgID8gZXhhY3RCYXNlUHJpY2UocywgdCwgUCkKICAgICAgOiAoUC5ncnVuZHByZWlzICYmIHQgPyBQLmdydW5kcHJlaXNbcy50eXBdIDogbnVsbCk7CiAgICAvLyBJbSBhbHRlbiBHcnVuZHByZWlzLU1vZGVsbCBibGVpYmVuIG51ckZsYW5zY2gtVHlwZW4gKEJsaW5kZGVja2VsLCBLbGFtbWVyKQogICAgLy8gZ2VzcGVycnQ6IERpZSBGb3JtZWwgc2thbGllcnQgdWViZXIgZGVuIFJPSFItQXVzc2VuZHVyY2htZXNzZXIKICAgIC8vIChkbkZha3RvclJlZk9EKS4gRGVuIGdpYnQgZXMgYmVpIHJlaW5lciBGbGFuc2NoLUF1c3dhaGwgbmljaHQsIHVuZCBlaW5lIFByZWlzc3RhZmZlbCBuYWNoCiAgICAvLyBGbGFuc2NoLcOYIGhhdCBXZWlzcyBuaWNodCBnZWxpZWZlcnQuIEVpbiBSdWVja2ZhbGwgYXVmIHJvd3MzMihyZWloZSlbMF0gd3VlcmRlIHN0aWxsc2Nod2VpZ2VuZAogICAgLy8gbWl0IGRlciBrbGVpbnN0ZW4gTmVubndlaXRlIHJlY2huZW4gLT4gZmFsc2NoZXIgUHJlaXMuIERlc2hhbGIgZWhybGljaCAiYXVmIEFuZnJhZ2UiLgogICAgLy8gTVVTUyBWT1IgZGVyIFp1c2NobGFnc3BydWVmdW5nIHN0ZWhlbjogRGllIEtsYW1tZXItV2Vya3N0b2ZmZSAxLjQzMDgvMS40NDA4IHNpbmQgaW4KICAgIC8vIHdlcmtzdG9mZlp1c2NobGFnUHJvemVudCBiZXd1c3N0IG5pY2h0IGVudGhhbHRlbiAoc2llaGUgZGF0YS5qcykuIFN0YW5kIGRpZSBQcnVlZnVuZyBkYXZvciwKICAgIC8vIGJla2FtIGRlciBLdW5kZSBiZWkgamVkZXIgS2xhbW1lciBkaWUgZmFsc2NoZSBCZWdydWVuZHVuZyAiWnVzY2hsYWVnZSBub2NoIG5pY2h0IGJlc3RhZXRpZ3QiCiAgICAvLyBzdGF0dCBkZXIgd2FocmVuIChCZWZ1bmQgMjEuMDguMjAyNikuCiAgICAvLyBEaWUgbmV1ZSBXZWlzcy1MaXN0ZSBlbnRoYWVsdCBkYWdlZ2VuIGVjaHRlIEZsYW5zY2hwcmVpc2UuIERhbm4gZGFyZiBkaWUKICAgIC8vIFNwZXJyZSB3ZWcsIGFiZXIgbnVyIHdlbm4gZnVlciBkZW4gZ2V3YWVobHRlbiBGbGFuc2NoIHdpcmtsaWNoIGVpbiBXZXJ0IGRhIGlzdC4KICAgIGlmICghZXhhY3RNb2RlICYmIGlzdE51ckZsYW5zY2godCkpIHJldHVybiB7IG1vZGU6ICdhbmZyYWdlJywgZ3J1bmQ6IHQubGFiZWwgKyAnIHdpcmQgbnVyIG5hY2ggRmxhbnNjaC3DmCB1bnRlcnNjaGllZGVuLCBlaW5lIFByZWlzc3RhZmZlbCBuYWNoIEZsYW5zY2gtw5ggbGllZ3Qgbm9jaCBuaWNodCB2b3IuJyB9OwogICAgaWYgKGJhc2UgPT0gbnVsbCkgcmV0dXJuIHsgbW9kZTogJ2FuZnJhZ2UnLCBncnVuZDogJ0bDvHIgJyArIHQubGFiZWwgKyAnIGxpZWd0IG5vY2gga2VpbiBSaWNodHByZWlzIHZvbiBGaXJtYSBXZWlzcyB2b3IuJyB9OwogICAgLy8gRGljaHR1bmdlbiBoYWJlbiBrZWluZW4gRWRlbHN0YWhsLS9PYmVyZmxhZWNoZW5zY2hyaXR0LiBLbGFtbWVybiB0cmFnZW4KICAgIC8vIGVpZ2VuZSBXZXJrc3RvZmZlLCBmdWVyIGRpZSBXZWlzcyBrZWluZW4gTWF0ZXJpYWxhdWZzY2hsYWcgZ2VsaWVmZXJ0IGhhdC4KICAgIGNvbnN0IG9obmVGaXR0aW5nWnVzY2hsYWcgPSBpc3REaWNodHVuZ0JhdXRlaWwodCkgfHwgaXN0S2xhbW1lcih0KTsKICAgIGNvbnN0IG1hdFogPSBvaG5lRml0dGluZ1p1c2NobGFnID8gMCA6IFAud2Vya3N0b2ZmWnVzY2hsYWdQcm96ZW50W2VmZldlcmtzdG9mZihzKV07CiAgICBjb25zdCBzdXJmWiA9IG9obmVGaXR0aW5nWnVzY2hsYWcgPyAwIDogUC5vYmVyZmxhZWNoZVp1c2NobGFnUHJvemVudFtzLm9iZXJmbGFlY2hlXTsKICAgIGlmIChtYXRaID09IG51bGwgfHwgc3VyZlogPT0gbnVsbCkgcmV0dXJuIHsgbW9kZTonYW5mcmFnZScsIGdydW5kOidEaWUgWnVzY2hsw6RnZSBmw7xyIGRpZXNlIEF1c2bDvGhydW5nIHNpbmQgbm9jaCBuaWNodCB2b2xsc3TDpG5kaWcgYmVzdMOkdGlndC4nIH07CiAgICBpZiAodC5kaWNodHVuZyAmJiBzLmRpY2h0dW5nICYmIFAuZGljaHR1bmdBdWZwcmVpc0V1cm9bcy5kaWNodHVuZ10gPT0gbnVsbCkgcmV0dXJuIHsgbW9kZTonYW5mcmFnZScsIGdydW5kOidEZXIgRGljaHR1bmdzYXVmcHJlaXMgaXN0IG5vY2ggbmljaHQgYmVzdMOkdGlndC4nIH07CiAgICBpZiAoKHMubmFjaHdlaXNlIHx8IFtdKS5zb21lKGlkID0+IFAubmFjaHdlaXNBdWZwcmVpc0V1cm9baWRdID09IG51bGwpKSByZXR1cm4geyBtb2RlOidhbmZyYWdlJywgZ3J1bmQ6J01pbmRlc3RlbnMgZWluIGdld8OkaGx0ZXIgTmFjaHdlaXMgd2lyZCBpbmRpdmlkdWVsbCBrYWxrdWxpZXJ0LicgfTsKICAgIGNvbnN0IGNoYXJnZW5OYWNod2Vpc2UgPSAocy5uYWNod2Vpc2UgfHwgW10pLmZpbHRlcihpc3RDaGFyZ2VuTmFjaHdlaXMpOwogICAgbGV0IHN0ayA9IGJhc2U7CiAgICBzdGsgKj0gbGFlbmdlblByZWlzRmFrdG9yKHMsIHQpOwogICAgaWYgKCFleGFjdE1vZGUpIHsKICAgICAgY29uc3QgcncgPSByb3dGb3Iocyk7CiAgICAgIC8vIG9kT2Ygc3RhdHQgcncudHViZU9EOiBEZXIgZGlja3dhbmRpZ2UgVENEIGhhdCBrZWluIHR1YmVPRCAtIGRlciBGYWt0b3Igd2FlcmUgc29uc3QKICAgICAgLy8gYXVmIHVuZGVmaW5lZCBnZWxhdWZlbiB1bmQgZGVyIFJpY2h0cHJlaXMgdWViZXIgZGVuIGZhbHNjaGVuIChkdWVubndhbmRpZ2VuKSBBRAogICAgICAvLyBza2FsaWVydC4gb2RPZiBsaWVmZXJ0IGZ1ZXIgVENEIGRlbiBnZWxpc3RldGVuIGF1c3NlbkQuCiAgICAgIGNvbnN0IG9kID0gb2RPZihydykgIT0gbnVsbCA\\\/IG9kT2YocncpIDogUC5kbkZha3RvclJlZk9EOwogICAgICBjb25zdCBmYWt0b3IgPSBNYXRoLm1heCgwLjcsIDEgKyBQLmRuRmFrdG9yU3RlaWd1bmcgKiAoKG9kIC0gUC5kbkZha3RvclJlZk9EKSAvIFAuZG5GYWt0b3JSZWZPRCkpOwogICAgICBzdGsgKj0gZmFrdG9yOwogICAgfQogICAgLy8gQmVybmQgTGlua2VyICgyOC4wOC4yMDI2KTogUHJvemVudGF1ZnNjaGxhZWdlIHdlcmRlbiBuYWNoZWluYW5kZXIgZ2VyZWNobmV0LgogICAgLy8gQmVpc3BpZWw6IDc1LDgwIEVVUiAqIDEsMTUgKiAxLDE1ID0gMTAwLDI1IEVVUiAoa2F1Zm1hZW5uaXNjaCBnZXJ1bmRldCkuCiAgICAvLyBFdXJvLUF1ZnByZWlzZSBibGVpYmVuIGRhbmFjaCB1bnZlcmFlbmRlcnQgYWJzb2x1dC4KICAgIHN0ayAqPSAoMSArIG1hdFogLyAxMDApOwogICAgc3RrICo9ICgxICsgc3VyZlogLyAxMDApOwogICAgaWYgKHQuZGljaHR1bmcgJiYgcy5kaWNodHVuZykgc3RrICs9IFAuZGljaHR1bmdBdWZwcmVpc0V1cm9bcy5kaWNodHVuZ107CiAgICBpZiAoKHQuaWQgPT09ICdUQycgfHwgdC5pZCA9PT0gJ0tMJykgJiYgcy5rbGFtbWVyVHlwKSB7CiAgICAgIGNvbnN0IGtsYW1tZXJaID0gUC5rbGFtbWVyVHlwQXVmcHJlaXNFdXJvICYmIFAua2xhbW1lclR5cEF1ZnByZWlzRXVyb1tzLmtsYW1tZXJUeXBdOwogICAgICBpZiAoa2xhbW1lclogPT0gbnVsbCkgcmV0dXJuIHsgbW9kZTonYW5mcmFnZScsIGdydW5kOidEZXIgQXVmcHJlaXMgZsO8ciBkZW4gZ2V3w6RobHRlbiBLbGFtbWVydHlwIGlzdCBub2NoIG5pY2h0IGJlc3TDpHRpZ3QuJyB9OwogICAgICBzdGsgKz0gTnVtYmVyKGtsYW1tZXJaKTsKICAgIH0KICAgIC8vIERpZSBTZWNoc2thbnRtdXR0ZXIgaXN0IGxhdXQgS3VuZGVudW50ZXJsYWdlIG51ciAiZ2VnZW4gQXVmcHJlaXMiCiAgICAvLyB2ZXJmdWVnYmFyOyBlaW4gQmV0cmFnIGZlaGx0LiBTaWUgZGFyZiBkZXNoYWxiIGtlaW5lbiBzY2hlaW5iYXIgZmVydGlnZW4KICAgIC8vIFByZWlzIGJla29tbWVuLgogICAgaWYgKHQuaWQgPT09ICdLTCcgJiYgcy5rbGFtbWVyTXV0dGVyID09PSAnUycpIHJldHVybiB7IG1vZGU6J2FuZnJhZ2UnLCBncnVuZDonRGVyIEF1ZnByZWlzIGbDvHIgZGllIFNlY2hza2FudG11dHRlciB3aXJkIGluZGl2aWR1ZWxsIGthbGt1bGllcnQuJyB9OwogICAgLy8gTnVyIGRpZSBOYWNod2Vpc2UsIGRpZSBqZSBCYXV0ZWlsIGFuZmFsbGVuLCBnZWhlbiBpbiBkZW4gU3R1ZWNrcHJlaXMuIEZlcnJpdC1NZXNzdW5nCiAgICAvLyB1bmQgUmEtTWVzc3Byb3Rva29sbCBnZWhvZXJlbiBkYXp1OiBkb3J0IHdpcmQgamVkZXMgZWluemVsbmUgVGVpbCBnZW1lc3Nlbi4KICAgIChzLm5hY2h3ZWlzZSB8fCBbXSkuZm9yRWFjaChpZCA9PiB7IGlmICghaXN0Q2hhcmdlbk5hY2h3ZWlzKGlkKSkgc3RrICs9IFAubmFjaHdlaXNBdWZwcmVpc0V1cm9baWRdOyB9KTsKICAgIHN0ayAqPSAoUC5nbG9iYWxGYWt0b3IgfHwgMSk7ICAgLy8gZ2xvYmFsZXIgUHJlaXNmYWt0b3IgKEFkbWluL1BsdWdpbiwgei4gQi4gMS4wMiA9ICsyICUpCiAgICAvLyBGYWxsYmFjayBiZXd1c3N0IHthYjoxLCByYWJhdHQ6MH0gdW5kIE5JQ0hUIFAuc3RhZmZlbFswXTogQmVnaW5udCBlaW5lIGltIEFkbWluCiAgICAvLyBnZXBmbGVndGUgU3RhZmZlbCBlcnN0IGJlaSAxMCwgZ2FiIFAuc3RhZmZlbFswXSBkZW4gMTBlci1SYWJhdHQgYXVjaCBmdWVyIGVpbgogICAgLy8gZWluemVsbmVzIFN0dWVjayAoQmVmdW5kIDIxLjA4LjIwMjYpLgogICAgY29uc3Qgc3R1ZmVuID0gQXJyYXkuaXNBcnJheShQLnN0YWZmZWwpID8gUC5zdGFmZmVsIDogW107CiAgICBjb25zdCBzdGFmZmVsID0gc3R1ZmVuLnNsaWNlKCkucmV2ZXJzZSgpLmZpbmQoeCA9PiBzLm1lbmdlID49IHguYWIpIHx8IHsgYWI6IDEsIHJhYmF0dDogMCB9OwogICAgLy8gQ2hhcmdlbmF1ZnByZWlzZSBoYWVuZ2VuIGFuIGRlciBMaWVmZXJ1bmcsIG5pY2h0IGFuIGRlciBTdHVlY2t6YWhsLiBTaWUga29tbWVuCiAgICAvLyBkZXNoYWxiIGVyc3QgTkFDSCBkZXIgTWVuZ2VucmVjaG51bmcgZGF6dSB1bmQgYmVrb21tZW4gYmV3dXNzdCBLRUlORU4gTWVuZ2VucmFiYXR0OgogICAgLy8gZWluIFpldWduaXMgd2lyZCBuaWNodCBiaWxsaWdlciwgd2VpbCBtZWhyIFRlaWxlIGluIGRlcnNlbGJlbiBDaGFyZ2UgbGllZ2VuLgogICAgLy8gRGVyIGdsb2JhbGUgUHJlaXNmYWt0b3IgZ2lsdCBkYWdlZ2VuIGF1Y2ggaGllciwgc29uc3Qgd2FlcmUgZXIgdGVpbHdlaXNlIHdpcmt1bmdzbG9zLgogICAgbGV0IGNoYXJnZUF1ZnByZWlzID0gMDsKICAgIGNoYXJnZW5OYWNod2Vpc2UuZm9yRWFjaChpZCA9PiB7IGNoYXJnZUF1ZnByZWlzICs9IFAubmFjaHdlaXNBdWZwcmVpc0V1cm9baWRdOyB9KTsKICAgIGNoYXJnZUF1ZnByZWlzICo9IChQLmdsb2JhbEZha3RvciB8fCAxKTsKICAgIGNvbnN0IGdlc2FtdCA9IHN0ayAqIHMubWVuZ2UgKiAoMSAtIHN0YWZmZWwucmFiYXR0IC8gMTAwKSArIGNoYXJnZUF1ZnByZWlzOwogICAgcmV0dXJuIHsgbW9kZTogJ2xpdmUnLCBzdHVlY2s6IHN0aywgZ2VzYW10LCBjaGFyZ2VBdWZwcmVpcywgcmFiYXR0OiBzdGFmZmVsLnJhYmF0dCwgYWI6IHN0YWZmZWwuYWIsIHBsYXR6aGFsdGVyOiAhIVAucGxhdHpoYWx0ZXIgfTsKICB9CgogIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHlwZW5zY2hsdWVzc2VsICovCiAgLy8gR3JvZXNzZW4tVG9rZW4gZGVyIEtvbmZpZ3VyYXRpb25zLU5yLiAtIGlkZW50aXNjaCBtaXQgZGVtIGRlciBBcnRpa2VsbnVtbWVyLAogIC8vIGRhbWl0IGJlaWRlIE51bW1lcm4gbmljaHQgaW4gZGVyIFNjaHJlaWJ3ZWlzZSBhdXNlaW5hbmRlcmxhdWZlbiAoQmVybmQgMjcuMDcuMjAyNjoKICAvLyBOVy4uLiBmdWVyIElTTywgWi4uLiBmdWVyIFpvbGwsIGRldXRzY2hlcyBLb21tYSkuCiAgZnVuY3Rpb24gc2l6ZVRva2VuKHMpIHsKICAgIHJldHVybiBhcnRpa2VsR3JvZXNzZShzLCByb3dGb3IocykpIHx8ICcnOwogIH0KICBjb25zdCBhcnRpY2xlTnVtYmVyRm9ybWF0ID0gbiA9PiBTdHJpbmcoTWF0aC5yb3VuZChOdW1iZXIobikgKiAxMDApIC8gMTAwKS5yZXBsYWNlKCcuJywgJywnKTsKICAvKiBCZXJuZCAyNy4wNy4yMDI2OiAiaWNoIGhhYmUgbm9jaCBrZWluZSBGcmVpZ2FiZSBmdWVyIGRpZSBWZXJ3ZW5kdW5nIGRlcgogICAqIEJlemVpY2hudW5nZW4gZGEgZGllc2UgSGVyc3RlbGxlcnNwZXppZmlzY2ggc2luZC4iIERpZSBoZXJzdGVsbGVyZWlnZW5lbgogICAqIEFydGlrZWxjb2RlcyBkZXMgSGVyc3RlbGxlcnMgd2VyZGVuIGRlc2hhbGIgTklDSFQgbWVociBhdXNnZWdlYmVuLgogICAqIFNlaW5lIFZvcmdhYmUgYXVmIGRlbSBTY3JlZW5zaG90OiAiQXJ0IE5yLiB3aWUgS29uZmlndXJhdGlvbiIgLSBkaWUKICAgKiBBcnRpa2VsbnVtbWVyIGlzdCBiZWkgQ0YvQ0ZJIGFsc28gaWRlbnRpc2NoIG1pdCBkZXIgS29uZmlndXJhdGlvbnMtTnIuCiAgICogRGllIENvZGVzIGJsZWliZW4gaW4gZGF0YS5qcyBhbHMgUXVlbGxlIGVyaGFsdGVuLCBudXIgdW5zaWNodGJhci4gKi8KICBmdW5jdGlvbiBjb25uZWN0QXJ0aWNsZU51bWJlcihzKSB7CiAgICBjb25zdCB0ID0gdHlwT2JqKHMudHlwKSwgcncgPSByb3dGb3Iocyk7CiAgICBpZiAoIXQgfHwgIXJ3KSByZXR1cm4gbnVsbDsKICAgIHJldHVybiB0eXBlY29kZShzKTsKICB9CiAgLyogR3JvZXNzZW4tVG9rZW4gZGVyIEFydGlrZWxudW1tZXIgKEJlcm5kIDI3LjA3LjIwMjYpOgogICAqICAgUmVpaGUgQSAobWV0cmlzY2gpIC0+IEROMDYsIEROMjUgLi4uCiAgICogICBSZWloZSBCIChJU08pICAgICAgLT4gTlczMyw3ICAgKCJkYXMgTlcgc2FndCBJU08gYXVzIikKICAgKiAgIFJlaWhlIEMgKFpvbGwpICAgICAtPiBaMSwgWjEsNSAoImRhcyBaIHN0ZWh0IGZ1ZXIgWm9lbGxpZyIpCiAgICogRGV1dHNjaGUgU2NocmVpYndlaXNlIG1pdCBLb21tYSwgd2llIGluIEJlcm5kcyBCZWlzcGllbGVuLiAqLwogIGZ1bmN0aW9uIGdyb2Vzc2VUb2tlbihyZWloZSwgcncpIHsKICAgIGlmICghcncgfHwgIXJlaWhlKSByZXR1cm4gbnVsbDsKICAgIGlmIChyZWloZSA9PT0gJ0EnKSByZXR1cm4gU3RyaW5nKHJ3LmlkKTsKICAgIGlmIChyZWloZSA9PT0gJ0InKSByZXR1cm4gU3RyaW5nKHJ3LmlkKS5yZXBsYWNlKCcuJywgJywnKTsKICAgIGlmIChyZWloZSA9PT0gJ0MnKSByZXR1cm4gJ1onICsgU3RyaW5nKHJ3LmlkKS5yZXBsYWNlKCcuJywgJywnKTsKICAgIHJldHVybiBudWxsOwogIH0KICBmdW5jdGlvbiBhcnRpa2VsR3JvZXNzZShzLCBydykgeyByZXR1cm4gZ3JvZXNzZVRva2VuKHMgJiYgcy5yZWloZSwgcncpOyB9CiAgZnVuY3Rpb24gYXJ0aWNsZU51bWJlcihzKSB7CiAgICBjb25zdCB0ID0gdHlwT2JqKHMudHlwKSwgcncgPSByb3dGb3Iocyk7CiAgICBpZiAoIXQgfHwgIXJ3KSByZXR1cm4gbnVsbDsKICAgIGlmIChpc0Nvbm5lY3QodCkpIHJldHVybiBjb25uZWN0QXJ0aWNsZU51bWJlcihzKTsKICAgIC8qIFRDLVN0dXR6ZW4gZWluemVsbiAtIEJlcm5kcyBTY2hlbWEgdm9tIDI3LjA3LjIwMjYsIGVzIGVyc2V0enQgZGllIGFsdGUKICAgICAqIFJldjA2LU51bW1lciB2b2xsc3RhZW5kaWcgKCJTb2xsIGRhcyBuZXVlIFNjaGVtYSBkaWUgYWx0ZSBOdW1tZXIgZ2FuegogICAgICogZXJzZXR6ZW4\\\/IEphIikuIERlciBXZXJrc3RvZmYgc3RlaHQgaW0gS2xhcnRleHQgKGZ1ZXIgMS40NDM1IGVpbmZhY2ggMS40NDM1CiAgICAgKiBhbiBkaWUgU3RlbGxlIHZvbiAxLjQ0MDQpLCBkaWUgRGljaHR1bmcgZ2Vob2VydCBOSUNIVCBoaW5laW4gKCJOZWluLCBtZWluCiAgICAgKiBGZWhsZXIsIGRhIG5hdHVlcmxpY2ggbnVyIFRDUy1ETjA2LUEtMS40NDM1LUgxLUtLIikuCiAgICAgKiAgIFRDUy08R3JvZXNzZT4tPFJlaWhlPi08V2Vya3N0b2ZmPi08T2JlcmZsYWVjaGU+LTxLS3xLTD4gKi8KICAgIGlmICh0LmlkID09PSAnVENTJykgewogICAgICBjb25zdCBzaXplID0gYXJ0aWtlbEdyb2Vzc2UocywgcncpLCB3ZXJrID0gZWZmV2Vya3N0b2ZmKHMpOwogICAgICAvLyBGYWlsLWNsb3NlZDogTlVSIGRpZSBiZWlkZW4gYmVsZWd0ZW4gTGFlbmdlbnZhcmlhbnRlbiBlcmdlYmVuIGVpbmUgTnVtbWVyLgogICAgICAvLyBEZXIgZnJ1ZWhlciBoaWVyIHN0ZWhlbmRlIEt1cnpzY2hsdXNzICg9PT0gJ0tMJyA\\\/ICdLTCcgOiAnS0snKSBoYXQgYmVpIGplZGVtCiAgICAgIC8vIGZyZW1kZW4gb2RlciBmZWhsZW5kZW4gV2VydCBzdGlsbHNjaHdlaWdlbmQgIktLIiBiZWhhdXB0ZXQgLSBhdXMgZWluZW0KICAgICAgLy8ga2FwdXR0ZW4gVGVpbGVuLUxpbmsgd2FlcmUgc28gZWluZSBmYWxzY2hlIEFydGlrZWxudW1tZXIgZW50c3RhbmRlbiwgZGllIGRlcgogICAgICAvLyBLdW5kZSBuaWUgZ2V3YWVobHQgaGF0LiBPaG5lIGJlbGVndGUgVmFyaWFudGUgZ2lidCBlcyBsaWViZXIga2VpbmUgTnVtbWVyLgogICAgICBjb25zdCBsdiA9IHMubGFlbmdlVmFyaWFudGUgPT09ICdLTCcgPyAnS0wnIDogcy5sYWVuZ2VWYXJpYW50ZSA9PT0gJ0tLJyA\\\/ICdLSycgOiBudWxsOwogICAgICBpZiAoIXNpemUgfHwgIXdlcmsgfHwgIXMub2JlcmZsYWVjaGUgfHwgIWx2KSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIFsnVENTJywgc2l6ZSwgcy5yZWloZSwgd2Vyaywgcy5vYmVyZmxhZWNoZSwgbHZdLmpvaW4oJy0nKTsKICAgIH0KICAgIC8qIERpY2h0dW5nIC0gQmVybmRzIFNjaGVtYSB2b20gMjcuMDcuMjAyNjoKICAgICAqICAgRC08R3JvZXNzZT4tPFJlaWhlPi08V2Vya3N0b2ZmPi08THxPPgogICAgICogICBELUROMjUtQS1FUERNLUwgwrcgRC1OVzMzLDctQi1WTVEtTCDCtyBELVoxLDUtQy1GS00tTwogICAgICogTCA9IG1pdCBMaXBwZSwgTyA9IG9obmUgTGlwcGUuIERpZSBMaXBwZSBrb21tdCBhdXMgZWZmTGlwcGUoKSwgZGFzIEJlcm5kcwogICAgICogUmVnZWwgYWJiaWxkZXQgKEZsYW5zY2ggMjUgbmllIG1pdCBMaXBwZSwgVHlwIEkgc29uc3QgbnVyIGJlaSBab2xsKS4gKi8KICAgIGlmICh0LmlkID09PSAnRCcpIHsKICAgICAgY29uc3Qgc2l6ZSA9IGFydGlrZWxHcm9lc3NlKHMsIHJ3KTsKICAgICAgY29uc3QgZCA9IGRpY2h0T2JqKHMuZGljaHR1bmcpOwogICAgICBjb25zdCBtYXQgPSBkID8gKGQuYXJ0aWtlbENvZGUgfHwgZC5pZCkgOiBudWxsOwogICAgICBpZiAoIXNpemUgfHwgIW1hdCkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBbJ0QnLCBzaXplLCBzLnJlaWhlLCBtYXQsIGVmZkxpcHBlKHMpXS5qb2luKCctJyk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24gdHlwZWNvZGUocykgewogICAgY29uc3QgdCA9IHR5cE9iaihzLnR5cCk7IGlmICghdCkgcmV0dXJuICfigJMnOwogICAgaWYgKGlzQ29ubmVjdCh0KSkgewogICAgICBjb25zdCBydyA9IHJvd0ZvcihzKTsgaWYgKCFydykgcmV0dXJuICfigJMnOwogICAgICAvLyBCZXJuZCAyNy4wNy4yMDI2OiBrZWluZSBIZXJzdGVsbGVyc2VyaWUgbWVociBpbiBkZXIgTnVtbWVyIC0gbnVyIG5vY2ggQ0YgYnp3LiBDRkkuCiAgICAgIGNvbnN0IHBhcnRzID0gW3QuaWQsIHJ3LmlkXTsKICAgICAgaWYgKHQuaWQgPT09ICdDRicpIHBhcnRzLnB1c2goJ0wnICsgYXJ0aWNsZU51bWJlckZvcm1hdChzLmNvbm5lY3RMYWVuZ2UpKTsKICAgICAgZWxzZSBwYXJ0cy5wdXNoKHMuY29ubmVjdEFuc2NobHVzcyk7CiAgICAgIHBhcnRzLnB1c2goZWZmV2Vya3N0b2ZmKHMpLCBzLm9iZXJmbGFlY2hlKTsKICAgICAgcmV0dXJuIHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKCctJyk7CiAgICB9CiAgICAvLyBudXJGbGFuc2NoLVR5cGVuOiBrZWluIFJlaWhlbi0vTmVubndlaXRlbi1Ub2tlbiwgbnVyIGRlciBGbGFuc2NoLcOYLgogICAgLy8gQmVpIGRlciBLbGFtbWVyIHN0ZWh0IGRlciBLbGFtbWVydHlwIHZvcm4gKEtMMS9LTExJL0tMSCkgLSBuYWVoZXIgYW4gUmV2MDYKICAgIC8vIChkb3J0IHouIEIuICJLTExJLTA4LTUwLU0iKSBhbHMgZWluIGdlbmVyaXNjaGVzICJLTCIuIERpZSBSZXYwNi1NYXRlcmlhbC0KICAgIC8vIGNvZGVzICgwOC80MDgpIHNpbmQgdWViZXIgUjItNSAoQXJ0aWtlbG51bW1lcikgbm9jaCBhYnp1YmlsZGVuIC0+IGhpZXIgYmxlaWJ0CiAgICAvLyBkaWUgV2Vya3N0b2ZmbnVtbWVyIHZvcmVyc3QgaW0gS2xhcnRleHQuCiAgICAvLyBSMi00OiBEaWUgS2xhbW1lciB0cmFlZ3QgS0VJTkUgT2JlcmZsYWVjaGUgKGtlaW4gT2JlcmZsYWVjaGVuLVNjaHJpdHQpIC0+IGRpZQogICAgLy8gT2JlcmZsYWVjaGVua2xhc3NlIGdlaG9lcnQgTklDSFQgaW4gZGllIEtsYW1tZXItVHlwLU5yLiAoYmVoZWJ0ICJLbGFtbWVyIHRyYWVndCBINCIpLgogICAgLy8gQmVpbSBCbGluZGRlY2tlbCBibGVpYnQgc2llIGRyaW4uCiAgICBpZiAoaXN0TnVyRmxhbnNjaCh0KSkgewogICAgICBjb25zdCBmID0gZmxhbnNjaEZvcihzKTsgaWYgKCFmKSByZXR1cm4gJ+KAkyc7CiAgICAgIGNvbnN0IGt0ID0gaXN0S2xhbW1lcih0KSA\\\/IGtsYW1tZXJUeXBPYmoocy5rbGFtbWVyVHlwKSA6IG51bGw7CiAgICAgIGNvbnN0IHBhcnRzID0gW2t0ID8ga3QuaWQgOiB0LmlkLCAn4oyAJyArIGYubGFiZWwsIGVmZldlcmtzdG9mZihzKV07CiAgICAgIC8vIEtvbmZpZ3VyYXRpb25zLU5yLiAoa2VpbmUgV2Vpc3MtQXJ0aWtlbG51bW1lcik6IE11dHRlci9TZWNoc2thbnRtdXR0ZXIgbXVzcwogICAgICAvLyBlbnRoYWx0ZW4gc2VpbiwgZGFtaXQgendlaSBzaWNodGJhcmUgS2xhbW1lci1BdXNmdWVocnVuZ2VuIGVpbmRldXRpZyBibGVpYmVuLgogICAgICBpZiAoaXN0S2xhbW1lcih0KSkgcGFydHMucHVzaChzLmtsYW1tZXJNdXR0ZXIpOwogICAgICBpZiAoIWlzdEtsYW1tZXIodCkpIHBhcnRzLnB1c2gocy5vYmVyZmxhZWNoZSk7CiAgICAgIGlmICh0LmRpY2h0dW5nICYmIHMuZGljaHR1bmcpIHBhcnRzLnB1c2gocy5kaWNodHVuZyk7CiAgICAgIHJldHVybiBwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbignLScpOwogICAgfQogICAgLy8gbWFzc2VGb2xndCAoQ0YvQ0ZJKTogRXMgZ2lidCBrZWluIEdyb2Vzc2VuLVRva2VuIC0gZGllIE51bW1lciB3aXJkIG51ciBhdXMgZGVtCiAgICAvLyBnZWJhdXQsIHdhcyBkZXIgS3VuZGUgV0lSS0xJQ0ggZ2V3YWVobHQgaGF0IChUeXAsIFdlcmtzdG9mZiwgT2JlcmZsYWVjaGUsIERpY2h0dW5nKS4KICAgIC8vIEtlaW4gUmVpaGVuLS9OZW5ud2VpdGVuLVRlaWwsIGtlaW4gS0svS0w6IGJlaWRlcyB3YWVyZSBlcmZ1bmRlbi4gRGllIEdyb2Vzc2UgdHJhZWd0CiAgICAvLyBXZWlzcyBuYWNoLCBzb2JhbGQgZGFzIERhdGVuYmxhdHQgZGEgaXN0LgogICAgaWYgKGlzdE1hc3NlRm9sZ3QodCkpIHsKICAgICAgY29uc3QgcGFydHMgPSBbdC5pZCwgZWZmV2Vya3N0b2ZmKHMpLCBzLm9iZXJmbGFlY2hlXTsKICAgICAgaWYgKHQuZGljaHR1bmcgJiYgcy5kaWNodHVuZykgcGFydHMucHVzaChzLmRpY2h0dW5nKTsKICAgICAgcmV0dXJuIHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKCctJyk7CiAgICB9CiAgICBpZiAoIXMuZ3JvZXNzZSkgcmV0dXJuICfigJMnOwogICAgY29uc3QgcGFydHMgPSBbdC5pZCwgc2l6ZVRva2VuKHMpXTsKICAgIC8vIFp3ZWl0ZSBHcm9lc3NlIGluIGRlcnNlbGJlbiBTY2hyZWlid2Vpc2Ugd2llIGRpZSBlcnN0ZSAoTlcuLi4vWi4uLiBtaXQgS29tbWEpLgogICAgaWYgKHQuendlaXRlR3JvZXNzZSAmJiBzLmdyb2Vzc2UyKSB7IGNvbnN0IHIyID0gcm93MkZvcihzKTsgaWYgKHIyKSBwYXJ0cy5wdXNoKGdyb2Vzc2VUb2tlbihzLnJlaWhlLCByMikpOyB9CiAgICAvLyBUeXAgRDogU2VpdCBkZW0gV2VnZmFsbCB2b24gU2Nocml0dCA1IChCZXJuZCAxMS4wOC4yMDI2KSB3YWVobHQgbmllbWFuZCBtZWhyCiAgICAvLyBFZGVsc3RhaGwtV2Vya3N0b2ZmIHVuZCBPYmVyZmxhZWNoZSAtIGRhbm4gZHVlcmZlbiBzaWUgYXVjaCBuaWNodCBpbiBkZXIKICAgIC8vIGt1bmRlbnNpY2h0YmFyZW4gS29uZmlndXJhdGlvbnMtTnIuIGF1ZnRhdWNoZW4uIFNvbnN0IHN0dWVuZGUgZG9ydCBlaW4KICAgIC8vICIxLjQ0MDQtSDQiLCBkYXMgZGVyIEt1bmRlIG5pZSBhbmdla2xpY2t0IGhhdC4gVWVicmlnIGJsZWlidAogICAgLy8gRC08R3JvZXNzZT4tPFJlaWhlPi08RGljaHR1bmc+LTxMfE8+LCBwYXJhbGxlbCB6dXIgV2Vpc3MtQXJ0aWtlbG51bW1lci4KICAgIGlmIChpc3REaWNodHVuZ0JhdXRlaWwodCkpIHBhcnRzLnB1c2gocy5yZWloZSk7CiAgICBlbHNlIHBhcnRzLnB1c2gocy5yZWloZSwgZWZmV2Vya3N0b2ZmKHMpLCBzLm9iZXJmbGFlY2hlKTsKICAgIGlmICh0LmRpY2h0dW5nICYmIHMuZGljaHR1bmcpIHBhcnRzLnB1c2gocy5kaWNodHVuZywgZWZmTGlwcGUocykpOwogICAgLy8gS0svS0wgaGFlbmd0IGFtIGxhZW5nZVZhcmlhbnRlLUZsYWcsIE5JQ0hUIGFtIHN2Z1R5cGU6IFRDRCB0cmFlZ3QgendhcgogICAgLy8gc3ZnVHlwZTonY2xhbXBzdHV0emVuJywgaGF0IGFiZXIga2VpbmUgS0svS0wtTGFlbmdlIChkaWNrd2FuZGlnLCBmZXN0ZSBIb2VoZSA2MCBtbSkuCiAgICAvLyBVZWJlciBkZW4gc3ZnVHlwZSBzdGFuZCBpbiBkZXIgVHlwLU5yLiBlaW4gIi1LSyIsIGRhcyBlcyBmdWVyIFRDRCBuaWNodCBnaWJ0LgogICAgaWYgKHQubGFlbmdlVmFyaWFudGUpIHBhcnRzLnB1c2gocy5sYWVuZ2VWYXJpYW50ZSk7CiAgICBpZiAodC5zdmdUeXBlID09PSAncmVkdXppZXJ1bmcnKSBwYXJ0cy5wdXNoKHMuZXh6ZW50cmlzY2ggPyAnZXh6JyA6ICdrb256Jyk7CiAgICAvLyBSMy0zL1IzLTQ6IEJhdWZvcm0gVCAvIFRLIGluIGRpZSBUeXAtTnIuICh6LiBCLiBUUy0uLi4tVCwgVFNSLS4uLi1USykuCiAgICBpZiAodC5mb3JtV2FobCkgcGFydHMucHVzaChzLmZvcm1WYXJpYW50ZSk7CiAgICBpZiAodC5pZCA9PT0gJ1RDJyAmJiBzLmtsYW1tZXJUeXApIHBhcnRzLnB1c2gocy5rbGFtbWVyVHlwKTsKICAgIHJldHVybiBwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbignLScpOwogIH0KICAvLyBBdXNmdWVocnVuZyAoTGlwcGUpID0gRGljaHR1bmdzdHlwLiBCRUxFR1QgKEJlcm5kIDE2LjA3LjIwMjYsIEFFTkRFUlVOR1NQTEFOIFIyLTMpOgogIC8vIFR5cCBJID0gb2huZSBMaXBwZSAoTyksIFR5cCBJSSA9IG1pdCBMaXBwZSAoTCkuICJHZW5lcmVsbCBudXIgVHlwIElJOyBUeXAgSSBudXIgYmVpCiAgLy8gUmVpaGUgQyAoWm9sbCkuIiAtPiBSRUlIRU4tYmFzaWVydCAobG9lc3QgZGllIGZydWVoZXJlIGZsYW5zY2gtw5gtU3RhZmZlbHVuZyBhYik6CiAgLy8gUmVpaGUgQyBiaWV0ZXQgVHlwIEkgKyBUeXAgSUksIFJlaWhlIEEgKyBCIG51ciBUeXAgSUkuIERlciBEZWZhdWx0IGlzdCBkYW1pdCB1ZWJlcmFsbAogIC8vICJtaXQgTGlwcGUgKFR5cCBJSSkiIChzdGF0ZS5saXBwZTonTCcpLiBudXJGbGFuc2NoLVR5cGVuIChCbGluZGRlY2tlbCkgaGFiZW4ga2VpbmUKICAvLyB3YWVobGJhcmUgUmVpaGUgLT4gZWJlbmZhbGxzIG51ciBUeXAgSUkuCiAgLyogRXJnYWVuenVuZyBCZXJuZCAyNy4wNy4yMDI2OiAiTCA9IG1pdCBMaXBwZSwgYWxzbyBmYXN0IGFsbGUsIHVuZCBPID0gb2huZSBMaXBwZQogICAqIChudXIgYmVpIHpvZWxsaWdlbiBVTkQgYmVpIGFsbGVuIERpY2h0dW5nZW4gbWl0IFRDMjUuIERpZSBEaWNodHVuZ2VuIGZ1ZXIKICAgKiBGbGFuc2NoIDI1bW0gaGFiZW4gYmF1YXJ0YmVkaW5ndCBuaWUgZWluZSBMaXBwZSwgYXVjaCBiZWkgRElOIHVuZCBJU08gbmljaHQhKSIKICAgKiAtPiBGbGFuc2NoLeKMgCAyNSBsYWVzc3QgbnVyIFR5cCBJIHp1LCB1bmFiaGFlbmdpZyB2b24gZGVyIFJlaWhlLiAqLwogIGZ1bmN0aW9uIGZsYW5zY2hPZE9mKHMpIHsKICAgIGlmIChpc3ROdXJGbGFuc2NoKHR5cE9iaihzLnR5cCkpKSB7IGNvbnN0IGYgPSBmbGFuc2NoRm9yKHMpOyByZXR1cm4gZiA\\\/IGYuZmxhbmdlT0QgOiBudWxsOyB9CiAgICBjb25zdCBydyA9IHJvd0ZvcihzKTsKICAgIHJldHVybiBydyAmJiBydy5mbGFuZ2VPRCAhPSBudWxsID8gcncuZmxhbmdlT0QgOiBudWxsOwogIH0KICBmdW5jdGlvbiBhdXNmdWVocnVuZ0F2YWlsKHMpIHsKICAgIGlmIChmbGFuc2NoT2RPZihzKSA9PT0gMjUpIHJldHVybiBbJ08nXTsKICAgIHJldHVybiAocy5yZWloZSA9PT0gJ0MnICYmICFpc3ROdXJGbGFuc2NoKHR5cE9iaihzLnR5cCkpKSA\\\/IFsnTCcsICdPJ10gOiBbJ0wnXTsKICB9CiAgZnVuY3Rpb24gZWZmTGlwcGUocykgeyBjb25zdCBhdiA9IGF1c2Z1ZWhydW5nQXZhaWwocyk7IHJldHVybiBhdi5pbmRleE9mKHMubGlwcGUpID49IDAgPyBzLmxpcHBlIDogYXZbMF07IH0KICAvKiBEaWNodHVuZ3MtSW5uZW4tw5ggZnVlciBkZW4gR0VXQUVITFRFTiBEaWNodHVuZ3N3ZXJrc3RvZmYuIERpZSBSZWdlbCBzdGVodCBpbgogICAqIGRhdGEuanMgKGRpY2h0dW5nSW5uZW5EKSwgaGllciB3aXJkIG51ciBkZXIgU3RhdGUgYW5nZWxlZ3QuIFp3ZWkgTnV0emVyOgogICAqIGRpZSBaZWljaG51bmcgKHBhcmFtc0ZvcikgdW5kIGRhcyBEYXRlbmJsYXR0LiBCZWlkZSBtdWVzc2VuIGRlbnNlbGJlbiBXZXJ0CiAgICogemVpZ2VuIC0gZnJ1ZWhlciB3YXIgZXMgYW4gYmVpZGVuIFN0ZWxsZW4gc3R1ciBkZXIgVGFiZWxsZW53ZXJ0LiAqLwogIGZ1bmN0aW9uIGRpY2h0dW5nSW5uZW5EKHMsIHJ3KSB7CiAgICBpZiAoIXJ3KSByZXR1cm4gbnVsbDsKICAgIGlmICh0eXBlb2YgRC5kaWNodHVuZ0lubmVuRCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHJ3Lmdhc2tldElEICE9IG51bGwgPyBydy5nYXNrZXRJRCA6IG51bGw7CiAgICByZXR1cm4gRC5kaWNodHVuZ0lubmVuRChydywgcy5kaWNodHVuZyB8fCAnRVBETScpOwogIH0KICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0ZXBzICovCiAgY29uc3QgU1RFUFMgPSBbCiAgICB7IG46MSwgbGFiZWw6J0Fud2VuZHVuZycgfSwgeyBuOjIsIGxhYmVsOidOb3JtJyB9LCB7IG46MywgbGFiZWw6J0JhdXRlaWwnIH0sCiAgICB7IG46NCwgbGFiZWw6J0dyw7bDn2UnIH0sIHsgbjo1LCBsYWJlbDonV2Vya3N0b2ZmICYgT2JlcmZsw6RjaGUnIH0sIHsgbjo2LCBsYWJlbDonRGljaHR1bmcnIH0sCiAgICB7IG46NywgbGFiZWw6J05hY2h3ZWlzZSAmIE1lbmdlJyB9LCB7IG46OCwgbGFiZWw6J0FuZnJhZ2UnIH0KICBdOwogIGZ1bmN0aW9uIGlzVHlwZUJsb2NrZWQodCkgewogICAgcmV0dXJuICEhKHQgJiYgdC5pZCA9PT0gJ1RTUicgJiYgRC5tYXNzZS5kaW4xMTg2NS50U3R1ZWNrUmVkdXppZXJ0LnN0YXR1cyA9PT0gJ2Jsb2NraWVydCcpOwogIH0KICBmdW5jdGlvbiByZWloZUF2YWlsYWJsZSh0LCByZWloZSkgewogICAgaWYgKCF0IHx8IGlzQ29ubmVjdCh0KSB8fCBpc3ROdXJGbGFuc2NoKHQpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodC5pZCA9PT0gJ1RTJykgcmV0dXJuICEhKCgoRC5tYXNzZS5kaW4xMTg2NS50U3R1ZWNrR2xlaWNoLnJlaWhlbltyZWloZV0gfHwge30pLnJvd3MgfHwgW10pLmxlbmd0aCk7CiAgICBpZiAodC5pZCA9PT0gJ1RTUicpIHJldHVybiAhISgoKEQubWFzc2UuZGluMTE4NjUudFN0dWVja1JlZHV6aWVydC5yZWloZW5bcmVpaGVdIHx8IHt9KS5yb3dzIHx8IFtdKS5sZW5ndGgpOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGNvbnN0IGRpY2h0dW5nQXBwbGllcyA9ICgpID0+IHsgY29uc3QgdCA9IHR5cE9iaihzdGF0ZS50eXApOyByZXR1cm4gISEodCAmJiB0LmRpY2h0dW5nKTsgfTsKICBmdW5jdGlvbiBhcHBsaWNhYmxlKG4pIHsKICAgIC8vIFNjaHJpdHQgNSBlbnRmYWVsbHQgYmVpbSBCYXV0ZWlsICJEaWNodHVuZyI6IGRvcnQgZ2lidCBlcyBrZWluZW4gRWRlbHN0YWhsLQogICAgLy8gV2Vya3N0b2ZmIHVuZCBrZWluZSBPYmVyZmxhZWNoZSB6dSB3YWVobGVuIChCZXJuZCAxMS4wOC4yMDI2KS4KICAgIC8vIEdld3VlbnNjaHRlIEZvbGdlIGZ1ZXIgVHlwIEQ6IEJhdXRlaWwgLT4gR3JvZXNzZSAtPiBEaWNodHVuZyAtPiBOYWNod2Vpc2UuCiAgICBpZiAobiA9PT0gNSkgcmV0dXJuICFpc3REaWNodHVuZ0JhdXRlaWwodHlwT2JqKHN0YXRlLnR5cCkpOwogICAgaWYgKG4gPT09IDYpIHJldHVybiBkaWNodHVuZ0FwcGxpZXMoKTsKICAgIHJldHVybiB0cnVlOwogIH0KICAvLyBGYWVuZ3QgZGVuIEZhbGwgYWIsIGRhc3MgZGVyIGFrdHVlbGxlIFNjaHJpdHQgZHVyY2ggZWluZW4gVHlwd2VjaHNlbCBvZGVyIGVpbmVuCiAgLy8gRGVlcC1MaW5rIHdlZ2ZhZWxsdCAtIHNvbnN0IHN0dWVuZGUgZGVyIEtvbmZpZ3VyYXRvciBhdWYgZWluZW0gU2Nocml0dCwgZGVuIGVzCiAgLy8gZnVlciBkaWVzZXMgQmF1dGVpbCBnYXIgbmljaHQgbWVociBnaWJ0LCB1bmQgZGllIEJ1ZWhuZSBibGllYmUgbGVlci4KICBmdW5jdGlvbiBmaXhTdGVwKCkgewogICAgaWYgKGFwcGxpY2FibGUoc3RhdGUuc3RlcCkpIHJldHVybjsKICAgIGNvbnN0IGEgPSBhcHBTdGVwcygpOwogICAgc3RhdGUuc3RlcCA9IGEuZmluZCh4ID0+IHggPj0gc3RhdGUuc3RlcCkgfHwgYVthLmxlbmd0aCAtIDFdIHx8IDE7CiAgfQogIGZ1bmN0aW9uIGFwcFN0ZXBzKCkgeyByZXR1cm4gU1RFUFMuZmlsdGVyKHMgPT4gYXBwbGljYWJsZShzLm4pKS5tYXAocyA9PiBzLm4pOyB9CiAgLy8gRm9ydGxhdWZlbmRlIEFuemVpZ2UtTnVtbWVyIGVpbmVzIFNjaHJpdHRzICgxLi5OKSB1bnRlciBkZW4gYWt0dWVsbCBhbndlbmRiYXJlbgogIC8vIFNjaHJpdHRlbi4gQmxlaWJ0IGx1ZWNrbG9zLCB3ZW5uIFNjaHJpdHQgNiAoRGljaHR1bmcpIG5pY2h0IGFud2VuZGJhciBpc3QuIERpZQogIC8vIGludGVybmUgTG9naWsgbnV0enQgd2VpdGVyIGRpZSBzdGFiaWxlbiBuIChkYXRhLW4pLCBudXIgZGllIEFuemVpZ2UgemFlaGx0IG5ldS4KICBmdW5jdGlvbiBzdGVwUG9zKG4pIHsgY29uc3QgaSA9IGFwcFN0ZXBzKCkuaW5kZXhPZihuKTsgcmV0dXJuIGkgPCAwID8gbiA6IGkgKyAxOyB9CiAgZnVuY3Rpb24gY29tcGxldGUobikgewogICAgc3dpdGNoIChuKSB7CiAgICAgIGNhc2UgMTogcmV0dXJuICEhc3RhdGUuYW53ZW5kdW5nOwogICAgICBjYXNlIDI6IHJldHVybiAhIXN0YXRlLm5vcm07CiAgICAgIGNhc2UgMzogewogICAgICAgIGNvbnN0IHQgPSB0eXBPYmooc3RhdGUudHlwKTsKICAgICAgICByZXR1cm4gISEodCAmJiB0LmFrdGl2ICYmICFpc1R5cGVCbG9ja2VkKHQpICYmIHQubm9ybSA9PT0gc3RhdGUubm9ybSk7CiAgICAgIH0KICAgICAgLy8gbWFzc2VGb2xndCAoQ0YvQ0ZJKTogSW4gU2Nocml0dCA0IGdpYnQgZXMgbmljaHRzIHp1IHdhZWhsZW4gKGtlaW5lIGJlbGVndGUgR3JvZXNzZSkuCiAgICAgIC8vIERlciBTY2hyaXR0IGdpbHQgdHJvdHpkZW0gYWxzIGVybGVkaWd0LCBzb25zdCBoYWVuZ2UgZGVyIEt1bmRlIGZlc3QgdW5kIGtvZW5udGUgZGVuCiAgICAgIC8vIFR5cCB6d2FyIHNlaGVuLCBhYmVyIG5pZSBhbmZyYWdlbiAtIGRhcyB3YWVyZSBmYWt0aXNjaCBha3RpdjpmYWxzZS4KICAgICAgY2FzZSA0OiB7CiAgICAgICAgY29uc3QgdCA9IHR5cE9iaihzdGF0ZS50eXApOwogICAgICAgIGlmIChpc3RNYXNzZUZvbGd0KHQpKSByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoaXN0TnVyRmxhbnNjaCh0KSkgcmV0dXJuICEhc3RhdGUuZmxhbnNjaDsKICAgICAgICBpZiAodCAmJiB0LmlkID09PSAnQ0YnKSByZXR1cm4gISEoc3RhdGUuZ3JvZXNzZSAmJiBzdGF0ZS5jb25uZWN0TGFlbmdlICE9IG51bGwpOwogICAgICAgIGlmICh0ICYmIHQuaWQgPT09ICdDRkknKSByZXR1cm4gISEoc3RhdGUuZ3JvZXNzZSAmJiBzdGF0ZS5jb25uZWN0QW5zY2hsdXNzKTsKICAgICAgICBpZiAodCAmJiB0LmZvcm1XYWhsICYmICFbJ1QnLCdUSyddLmluY2x1ZGVzKHN0YXRlLmZvcm1WYXJpYW50ZSkpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoaXN0Rm9ybU9obmVNYXNzZShzdGF0ZSkpIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gISFzdGF0ZS5ncm9lc3NlICYmICghKHQgJiYgdC56d2VpdGVHcm9lc3NlKSB8fCAhIXN0YXRlLmdyb2Vzc2UyKTsKICAgICAgfQogICAgICBjYXNlIDU6IHsKICAgICAgICBjb25zdCB0ID0gdHlwT2JqKHN0YXRlLnR5cCk7CiAgICAgICAgcmV0dXJuICEhKGVmZldlcmtzdG9mZihzdGF0ZSkgJiYgKGlzdEtsYW1tZXIodCkgfHwgb2JlcmZsYWVjaGVFcmxhdWJ0KHN0YXRlKSkpOwogICAgICB9CiAgICAgIGNhc2UgNjogcmV0dXJuICFkaWNodHVuZ0FwcGxpZXMoKSB8fCAhIXN0YXRlLmRpY2h0dW5nOwogICAgICBjYXNlIDc6IHJldHVybiBzdGF0ZS5tZW5nZSA+PSAxOwogICAgICBjYXNlIDg6IHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KICBmdW5jdGlvbiByZWFjaGFibGUobikgeyBmb3IgKGNvbnN0IG0gb2YgYXBwU3RlcHMoKSkgeyBpZiAobSA+PSBuKSBicmVhazsgaWYgKCFjb21wbGV0ZShtKSkgcmV0dXJuIGZhbHNlOyB9IHJldHVybiB0cnVlOyB9CiAgZnVuY3Rpb24gZ28obikgeyBpZiAoIWFwcGxpY2FibGUobikgfHwgIXJlYWNoYWJsZShuKSkgcmV0dXJuOyBzdGF0ZS5zdGVwID0gbjsgcmVuZGVyQWxsKCk7IHNjcm9sbFRvcCgpOyB9CiAgZnVuY3Rpb24gbmV4dFN0ZXAoKSB7IGNvbnN0IGEgPSBhcHBTdGVwcygpOyBjb25zdCBpID0gYS5pbmRleE9mKHN0YXRlLnN0ZXApOyBpZiAoaSA8IGEubGVuZ3RoIC0gMSAmJiBjb21wbGV0ZShzdGF0ZS5zdGVwKSkgZ28oYVtpICsgMV0pOyB9CiAgZnVuY3Rpb24gcHJldlN0ZXAoKSB7IGNvbnN0IGEgPSBhcHBTdGVwcygpOyBjb25zdCBpID0gYS5pbmRleE9mKHN0YXRlLnN0ZXApOyBpZiAoaSA+IDApIGdvKGFbaSAtIDFdKTsgfQogIGZ1bmN0aW9uIHNjcm9sbFRvcCgpIHsgdHJ5IHsgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7IH0gY2F0Y2ggKGUpIHt9IH0KCiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTZXR0ZXIgKi8KICBmdW5jdGlvbiBwaWNrKHBhdGNoKSB7IE9iamVjdC5hc3NpZ24oc3RhdGUsIHBhdGNoKTsgcmVuZGVyQWxsKCk7IH0KICBmdW5jdGlvbiBzZXRBbndlbmR1bmcoaWQpIHsKICAgIGNvbnN0IGEgPSBELmFud2VuZHVuZ2VuLmZpbmQoeCA9PiB4LmlkID09PSBpZCk7IGlmICghYSkgcmV0dXJuOwogICAgc3RhdGUuYW53ZW5kdW5nID0gaWQ7CiAgICBzdGF0ZS53ZXJrc3RvZmYgPSBhLmRlZmF1bHRzLndlcmtzdG9mZjsgc3RhdGUub2JlcmZsYWVjaGUgPSBhLmRlZmF1bHRzLm9iZXJmbGFlY2hlOyBzdGF0ZS5kaWNodHVuZyA9IGEuZGVmYXVsdHMuZGljaHR1bmc7CiAgICByZW5kZXJBbGwoKTsKICB9CiAgZnVuY3Rpb24gc2V0Tm9ybShpZCkgeyBzdGF0ZS5ub3JtID0gaWQ7IHN0YXRlLnR5cCA9IG51bGw7IHN0YXRlLmdyb2Vzc2UgPSBudWxsOyBzdGF0ZS5ncm9lc3NlMiA9IG51bGw7IHJlbmRlckFsbCgpOyB9CiAgZnVuY3Rpb24gc2V0VHlwKGlkKSB7CiAgICBjb25zdCB0ID0gdHlwT2JqKGlkKTsgaWYgKCF0KSByZXR1cm47CiAgICBpZiAoIXQuYWt0aXYgfHwgdC5ub3JtICE9PSBzdGF0ZS5ub3JtIHx8IGlzVHlwZUJsb2NrZWQodCkpIHJldHVybjsKICAgIHN0YXRlLnR5cCA9IGlkOwogICAgaWYgKGlzdE51ckZsYW5zY2godCkpIHsKICAgICAgLy8gUmVpaGVuLUF1c3dhaGwgZ2lsdCBmdWVyIGRpZXNlbiBUeXAgbmljaHQgLT4gZ3JvZXNzZSBsZWVyZW4sIGRhbWl0IG5pcmdlbmRzCiAgICAgIC8vIHZlcnNlaGVudGxpY2ggZWluZSBOZW5ud2VpdGUgYXVzIGVpbmVtIGZydWVoZXJlbiBUeXAgbWl0Z2VzY2hsZWlmdCB3aXJkLgogICAgICBzdGF0ZS5ncm9lc3NlID0gbnVsbDsgc3RhdGUuZ3JvZXNzZTIgPSBudWxsOwogICAgICBpZiAoIWZsYW5zY2hPYmooc3RhdGUuZmxhbnNjaCkpIHN0YXRlLmZsYW5zY2ggPSAoRC5mbGFuc2NoZ3JvZXNzZW5bMF0gfHwge30pLmlkIHx8IG51bGw7CiAgICAgIGlmIChpc3RLbGFtbWVyKHQpICYmICFrbGFtbWVyVHlwT2JqKHN0YXRlLmtsYW1tZXJUeXApKSB7CiAgICAgICAgY29uc3QgZGVmID0gKEQua2xhbW1lclR5cGVuIHx8IFtdKS5maW5kKGsgPT4gay5kZWZhdWx0KSB8fCAoRC5rbGFtbWVyVHlwZW4gfHwgW10pWzBdOwogICAgICAgIHN0YXRlLmtsYW1tZXJUeXAgPSBkZWYgPyBkZWYuaWQgOiBudWxsOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzQ29ubmVjdCh0KSkgewogICAgICBzdGF0ZS5ncm9lc3NlMiA9IG51bGw7CiAgICAgIHN0YXRlLmNvbm5lY3ROb3JtID0gdC5pZCA9PT0gJ0NGJyAmJiBELm1hc3NlLmNvbm5lY3QuY2YucmVpaGVuW3N0YXRlLmNvbm5lY3ROb3JtXSA\\\/IHN0YXRlLmNvbm5lY3ROb3JtIDogJ0RJTic7CiAgICAgIHN0YXRlLmNvbm5lY3RBbnNjaGx1c3MgPSAnQlcnOwogICAgICBjb25zdCBycyA9IHJvd3NGb3Ioc3RhdGUpOwogICAgICBzdGF0ZS5ncm9lc3NlID0gcnMubGVuZ3RoID8gcnNbMF0uaWQgOiBudWxsOwogICAgICBjb25zdCBydyA9IHJzWzBdIHx8IG51bGw7CiAgICAgIHN0YXRlLmNvbm5lY3RMYWVuZ2UgPSB0LmlkID09PSAnQ0YnICYmIHJ3ICYmIHJ3LmxhZW5nZW4ubGVuZ3RoID8gcncubGFlbmdlblswXS5MIDogbnVsbDsKICAgICAgaWYgKCFvYmVyZmxhZWNoZUVybGF1YnQoc3RhdGUpKSBzdGF0ZS5vYmVyZmxhZWNoZSA9IG9iZXJmbGFlY2hlbk9wdGlvbmVuKHN0YXRlKVswXS5pZDsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHJzID0gcm93c0ZvcihzdGF0ZSk7CiAgICAgIGlmICh0Lnp3ZWl0ZUdyb2Vzc2UpIHsKICAgICAgICAvLyBSZWR1emllcnVuZyAvIHJlZHV6aWVydGVzIFQtU3TDvGNrOiBkaWUgTmVubndlaXRlIG11c3MgR1LDllNTRVIgc2VpbiBhbHMgIlJlZHV6aWVydCBhdWYiCiAgICAgICAgLy8gKEJlcm5kIFIzLTIvUjMtNCkuIERlZmF1bHQtTmVubndlaXRlIGRhaGVyIE5JQ0hUIGRpZSBrbGVpbnN0ZSAoc29uc3QgZ8OkYmUgZXMga2VpbmUKICAgICAgICAvLyBrbGVpbmVyZSB1bmQgZGllIFplaWNobnVuZyBibGllYmUgbGVlciksIHNvbmRlcm4gZWluZSBrbGVpbmUsIGFiZXIgcmVkdXppZXJiYXJlIEdyw7bDn2U7CiAgICAgICAgLy8gIlJlZHV6aWVydCBhdWYiID0gZGllIGdyw7bDn3RlIG5vY2gga2xlaW5lcmUgR3LDtsOfZSAtPiBzb2ZvcnQgZWluIGVjaHRlciBLZWdlbC4KICAgICAgICBzdGF0ZS5ncm9lc3NlID0gcnMubGVuZ3RoID8gcnNbTWF0aC5taW4oMywgcnMubGVuZ3RoIC0gMSldLmlkIDogbnVsbDsKICAgICAgICBzdGF0ZS5ncm9lc3NlMiA9IGRlZmF1bHRHcm9lc3NlMihzdGF0ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RhdGUuZ3JvZXNzZSA9IHJzLmxlbmd0aCA\\\/IHJzWzBdLmlkIDogbnVsbDsKICAgICAgfQogICAgfQogICAgc3RhdGUubGFlbmdlVmFyaWFudGUgPSAnS0wnOyBzdGF0ZS5leHplbnRyaXNjaCA9IGZhbHNlOyBzdGF0ZS5mb3JtVmFyaWFudGUgPSAnVCc7CiAgICBpZiAoIXQuZGljaHR1bmcpIHsgLyoga2VlcCBkaWNodHVuZyBzdG9yZWQgKi8gfQogICAgZml4U3RlcCgpOwogICAgcmVuZGVyQWxsKCk7CiAgfQogIGZ1bmN0aW9uIHNldFJlaWhlKHIpIHsKICAgIGNvbnN0IHQwID0gdHlwT2JqKHN0YXRlLnR5cCk7CiAgICBpZiAoIXJlaWhlQXZhaWxhYmxlKHQwLCByKSkgcmV0dXJuOwogICAgc3RhdGUucmVpaGUgPSByOwogICAgY29uc3QgdCA9IHR5cE9iaihzdGF0ZS50eXApLCBycyA9IHJvd3NGb3Ioc3RhdGUpOwogICAgaWYgKHQgJiYgdC56d2VpdGVHcm9lc3NlKSB7CiAgICAgIC8vIHdpZSBpbiBzZXRUeXA6IHJlZHV6aWVyYmFyZSBEZWZhdWx0LU5lbm53ZWl0ZSArIGdyw7bDn3RlIGtsZWluZXJlIEdyw7bDn2UgYWxzICJSZWR1emllcnQgYXVmIi4KICAgICAgc3RhdGUuZ3JvZXNzZSA9IHJzLmxlbmd0aCA\\\/IHJzW01hdGgubWluKDMsIHJzLmxlbmd0aCAtIDEpXS5pZCA6IG51bGw7CiAgICAgIHN0YXRlLmdyb2Vzc2UyID0gZGVmYXVsdEdyb2Vzc2UyKHN0YXRlKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0YXRlLmdyb2Vzc2UgPSBycy5sZW5ndGggPyByc1swXS5pZCA6IG51bGw7CiAgICB9CiAgICByZW5kZXJBbGwoKTsKICB9CiAgLy8gTmVubndlaXRlIHNldHplbi4gQmVpIFJlZHV6aWVyLVR5cGVuICh6d2VpdGVHcm9lc3NlKSBtdXNzICJSZWR1emllcnQgYXVmIiBLTEVJTkVSIGJsZWliZW4KICAvLyBhbHMgZGllIG5ldWUgTmVubndlaXRlIChCZXJuZCBSMy0yL1IzLTQpOiBpc3QgZGVyIGJpc2hlcmlnZSB6d2VpdGUgw5ggbmljaHQgbWVociBrbGVpbmVyCiAgLy8gKG9kZXIgZ2lidCBlcyBnYXIga2VpbmVuIGtsZWluZXJlbiksIGF1ZiBkaWUgZ3LDtsOfdGUgZ8O8bHRpZ2Uga2xlaW5lcmUgR3LDtsOfZSB6dXLDvGNrc2V0emVuIC0KICAvLyBiencuIG51bGwsIHdlbm4ga2VpbmUgZXhpc3RpZXJ0IChkYW5uIFBsYXR6aGFsdGVyICJmb2xndCIpLiBTbyBrYW5uIG5pZSBvZCA9PSBvZDIgKGdlcmFkZXMKICAvLyBSb2hyKSBlbnRzdGVoZW4gdW5kIGRlciBTdGF0ZSBibGVpYnQga29uc2lzdGVudC4KICBmdW5jdGlvbiBzZXRHcm9lc3NlKGlkKSB7CiAgICBzdGF0ZS5ncm9lc3NlID0gaWQ7CiAgICBjb25zdCB0ID0gdHlwT2JqKHN0YXRlLnR5cCk7CiAgICBpZiAodCAmJiB0LmlkID09PSAnQ0YnKSB7CiAgICAgIGNvbnN0IHJ3ID0gcm93Rm9yKHN0YXRlKTsKICAgICAgaWYgKCFydyB8fCAhcncubGFlbmdlbi5zb21lKHggPT4gTnVtYmVyKHguTCkgPT09IE51bWJlcihzdGF0ZS5jb25uZWN0TGFlbmdlKSkpIHsKICAgICAgICBzdGF0ZS5jb25uZWN0TGFlbmdlID0gcncgJiYgcncubGFlbmdlbi5sZW5ndGggPyBydy5sYWVuZ2VuWzBdLkwgOiBudWxsOwogICAgICB9CiAgICB9CiAgICBpZiAodCAmJiB0Lnp3ZWl0ZUdyb2Vzc2UpIHsKICAgICAgY29uc3QgYXYgPSByb3dzMkZvcihzdGF0ZSk7CiAgICAgIGlmICghYXYuc29tZShyID0+IHIuaWQgPT09IHN0YXRlLmdyb2Vzc2UyKSkgc3RhdGUuZ3JvZXNzZTIgPSBhdi5sZW5ndGggPyBhdlthdi5sZW5ndGggLSAxXS5pZCA6IG51bGw7CiAgICB9CiAgICByZW5kZXJBbGwoKTsKICB9CiAgZnVuY3Rpb24gc2V0Q29ubmVjdE5vcm0oaWQpIHsKICAgIGlmICghRC5tYXNzZS5jb25uZWN0LmNmLnJlaWhlbltpZF0pIHJldHVybjsKICAgIHN0YXRlLmNvbm5lY3ROb3JtID0gaWQ7CiAgICBjb25zdCBycyA9IHJvd3NGb3Ioc3RhdGUpOyBzdGF0ZS5ncm9lc3NlID0gcnMubGVuZ3RoID8gcnNbMF0uaWQgOiBudWxsOwogICAgc3RhdGUuY29ubmVjdExhZW5nZSA9IHJzWzBdICYmIHJzWzBdLmxhZW5nZW4ubGVuZ3RoID8gcnNbMF0ubGFlbmdlblswXS5MIDogbnVsbDsKICAgIHJlbmRlckFsbCgpOwogIH0KICBmdW5jdGlvbiBzZXRDb25uZWN0TGFlbmdlKHZhbHVlKSB7CiAgICBjb25zdCBydyA9IHJvd0ZvcihzdGF0ZSksIG4gPSBOdW1iZXIodmFsdWUpOwogICAgaWYgKHJ3ICYmIHJ3LmxhZW5nZW4uc29tZSh4ID0+IE51bWJlcih4LkwpID09PSBuKSkgeyBzdGF0ZS5jb25uZWN0TGFlbmdlID0gbjsgcmVuZGVyQWxsKCk7IH0KICB9CiAgZnVuY3Rpb24gc2V0Q29ubmVjdEFuc2NobHVzcyhpZCkgewogICAgY29uc3QgcncgPSByb3dGb3Ioc3RhdGUpOwogICAgaWYgKHJ3ICYmIHJ3LmFuc2NobHVlc3NlICYmIHJ3LmFuc2NobHVlc3NlW2lkXSkgeyBzdGF0ZS5jb25uZWN0QW5zY2hsdXNzID0gaWQ7IHJlbmRlckFsbCgpOyB9CiAgfQogIGZ1bmN0aW9uIHNldEZsYW5zY2goaWQpIHsgaWYgKGZsYW5zY2hPYmooaWQpKSB7IHN0YXRlLmZsYW5zY2ggPSBpZDsgcmVuZGVyQWxsKCk7IH0gfQogIC8vIEtsYW1tZXJ0eXAgd2VjaHNlbG46IERlciBiaXNoZXJpZ2UgV2Vya3N0b2ZmIGJsZWlidCBudXIgc3RlaGVuLCB3ZW5uIGRlciBuZXVlIFR5cCBpaG4KICAvLyB6dWxhZXNzdCAoS0xMSSAtPiAxLjQ0MDgsIGRhbm4gV2VjaHNlbCBhdWYgS0wxLCBkYXMgbnVyIDEuNDMwOCBrYW5uKS4gU29uc3QgZmFlbGx0IGVyCiAgLy8gYXVmIGRlbiBlcnN0ZW4gZXJsYXVidGVuIFdlcmtzdG9mZiBkZXMgVHlwcyB6dXJ1ZWNrIC0ga2VpbiB1bmd1ZWx0aWdlcyBQYWFyIGltIFN0YXRlLgogIGZ1bmN0aW9uIHNldEtsYW1tZXJUeXAoaWQpIHsKICAgIGNvbnN0IGt0ID0ga2xhbW1lclR5cE9iaihpZCk7IGlmICgha3QpIHJldHVybjsKICAgIHN0YXRlLmtsYW1tZXJUeXAgPSBpZDsKICAgIGlmIChrdC53ZXJrc3RvZmZlLmluZGV4T2Yoc3RhdGUua2xhbW1lcldlcmtzdG9mZikgPCAwKSBzdGF0ZS5rbGFtbWVyV2Vya3N0b2ZmID0ga3Qud2Vya3N0b2ZmZVswXTsKICAgIHJlbmRlckFsbCgpOwogIH0KICAvLyBNdXR0ZXItQXJ0IGRlciBLbGFtbWVyIChSMi00KTogTSA9IE11dHRlciAoU3RhbmRhcmQpLCBTID0gU2VjaHNrYW50bXV0dGVyIChBdWZwcmVpcykuCiAgZnVuY3Rpb24gc2V0S2xhbW1lck11dHRlcihpZCkgewogICAgaWYgKCEoRC5rbGFtbWVyTXV0dGVybiB8fCBbXSkuc29tZShtID0+IG0uaWQgPT09IGlkKSkgcmV0dXJuOwogICAgc3RhdGUua2xhbW1lck11dHRlciA9IGlkOwogICAgcmVuZGVyQWxsKCk7CiAgfQogIC8qIFdlcmtzdG9mZiBzZXR6ZW4gKEFic2Nobml0dCBFKTogQmVpIEtsYW1tZXJuIGdlaHQgZGVyIFdlcnQgaW4gc3RhdGUua2xhbW1lcldlcmtzdG9mZgogICAqICgxLjQzMDgvMS40NDA4KSwgYmVpIGFsbGVuIGFuZGVyZW4gVHlwZW4gaW4gc3RhdGUud2Vya3N0b2ZmICgxLjQ0MDQvMS40NDM1KS4gQmVpZGUKICAgKiBGZWxkZXIgYmxlaWJlbiBnZXRyZW5udCAtIHNvbnN0IHd1ZXJkZSBlaW4gS2xpY2sgYXVmIGVpbmVuIEtsYW1tZXItV2Vya3N0b2ZmIGRlbgogICAqIEZpdHRpbmctV2Vya3N0b2ZmIG1pdCAxLjQzMDggdWViZXJzY2hyZWliZW4gKGRvcnQgZ2lidCBlcyBkZW4gV2Vya3N0b2ZmIGdhciBuaWNodCkKICAgKiB1bmQgZGVyIG5hZWNoc3RlIEZpdHRpbmcgdHJhZWdlIGVpbmUgV2Vya3N0b2ZmbnVtbWVyLCBkaWUgV2Vpc3MgbmllIGdlbmFubnQgaGF0LgogICAqIFp1c2FldHpsaWNoIGdlZ2VuIGRpZSBqZXdlaWxpZ2UgTGlzdGUgZ2VwcnVlZnQsIGRhbWl0IG51ciBlY2h0ZSBXZXJ0ZSBpbSBTdGF0ZSBsYW5kZW4uICovCiAgZnVuY3Rpb24gc2V0V2Vya3N0b2ZmKGlkKSB7CiAgICBjb25zdCB0ID0gdHlwT2JqKHN0YXRlLnR5cCk7CiAgICBpZiAoaXN0S2xhbW1lcih0KSkgewogICAgICBpZiAoIShELmtsYW1tZXJXZXJrc3RvZmZlIHx8IFtdKS5zb21lKHcgPT4gdy5pZCA9PT0gaWQpKSByZXR1cm47CiAgICAgIHN0YXRlLmtsYW1tZXJXZXJrc3RvZmYgPSBpZDsKICAgIH0gZWxzZSB7CiAgICAgIGlmICghKEQud2Vya3N0b2ZmZSB8fCBbXSkuc29tZSh3ID0+IHcuaWQgPT09IGlkKSkgcmV0dXJuOwogICAgICBzdGF0ZS53ZXJrc3RvZmYgPSBpZDsKICAgIH0KICAgIHJlbmRlckFsbCgpOwogIH0KICBmdW5jdGlvbiBzZXRPYmVyZmxhZWNoZShpZCkgewogICAgaWYgKCFvYmVyZmxhZWNoZW5PcHRpb25lbihzdGF0ZSkuc29tZShvID0+IG8uaWQgPT09IGlkKSkgcmV0dXJuOwogICAgc3RhdGUub2JlcmZsYWVjaGUgPSBpZDsKICAgIHJlbmRlckFsbCgpOwogIH0KCiAgLyogLS0gWnVydWVja3NldHplbiAoQTUsIEJlcm5kIFBrdC4gOCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICogU3RlbGx0IGRpZSBLb25maWd1cmF0aW9uIGF1ZiBkZW4gVXJzcHJ1bmdzenVzdGFuZCB6dXJ1ZWNrOiBTY2hyaXR0IDEsIGtlaW5lCiAgICogQXVzd2FobCwgRGVmYXVsdHMgLSBpbmtsdXNpdmUgV2FyZW5rb3JiLVBvc2l0aW9uZW4gdW5kIEtvbnRha3RkYXRlbi4KICAgKiBad2VpLUtsaWNrLUJlc3RhZXRpZ3VuZyBkaXJla3QgYW0gQnV0dG9uIChMYWJlbCB3ZWNoc2VsdCBhdWYgIldpcmtsaWNoCiAgICogenVydWVja3NldHplbj8iLCBmYWVsbHQgbmFjaCA0IHMgenVydWVjaykgc3RhdHQgd2luZG93LmNvbmZpcm0oKTogRGVyCiAgICogS29uZmlndXJhdG9yIGxhZXVmdCBzcGFldGVyIGltIFdvcmRQcmVzcy1pRnJhbWUsIHVuZCBlaW4gc2FuZGJveGVkIGlGcmFtZQogICAqIG9obmUgYWxsb3ctbW9kYWxzIHZlcnNjaGx1Y2t0IGNvbmZpcm0oKSAtIGRlciBCdXR0b24gd3VlcmRlIGRvcnQgc3RpbGwKICAgKiBuaWNodHMgdHVuLiBEYXMgTGFiZWwtV2VjaHNlbC1NdXN0ZXIgZ2lidCBlcyBoaWVyIHNjaG9uIGJlaSBjb3B5VGV4dCgpLiAqLwogIGxldCByZXNldFRpbWVyID0gbnVsbDsKICBjb25zdCByZXNldExhYmVsID0gdHh0ID0+IGljKCdyZXNldCcsICdpYycpICsgJyAnICsgdHh0OwogIGZ1bmN0aW9uIGRpc2FybVJlc2V0KGJ0bikgewogICAgY2xlYXJUaW1lb3V0KHJlc2V0VGltZXIpOyByZXNldFRpbWVyID0gbnVsbDsKICAgIGlmICghYnRuKSByZXR1cm47CiAgICBidG4uY2xhc3NMaXN0LnJlbW92ZSgnYXJtZWQnKTsgYnRuLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1hcm1lZCcpOwogICAgYnRuLmlubmVySFRNTCA9IHJlc2V0TGFiZWwoJ1p1csO8Y2tzZXR6ZW4nKTsKICB9CiAgZnVuY3Rpb24gYXJtUmVzZXQoYnRuKSB7CiAgICBjbGVhclRpbWVvdXQocmVzZXRUaW1lcik7CiAgICBidG4uY2xhc3NMaXN0LmFkZCgnYXJtZWQnKTsgYnRuLnNldEF0dHJpYnV0ZSgnZGF0YS1hcm1lZCcsICcxJyk7CiAgICBidG4uaW5uZXJIVE1MID0gcmVzZXRMYWJlbCgnV2lya2xpY2ggenVyw7xja3NldHplbj8nKTsKICAgIC8vIE5hY2ggNCBzIHdpZWRlciBlbnRzY2hhZXJmZW4uIElzdCBkZXIgQnV0dG9uIGJpcyBkYWhpbiBkdXJjaCBlaW4gUmUtUmVuZGVyCiAgICAvLyBlcnNldHp0IHdvcmRlbiwgbGFldWZ0IGRhcyBadXJ1ZWNrc2V0emVuIGF1ZiBlaW5lbSBsb3NnZWxvZXN0ZW4gS25vdGVuIC0KICAgIC8vIGhhcm1sb3MsIGRlciBmcmlzY2ggZ2VyZW5kZXJ0ZSBCdXR0b24gc3RhcnRldCBvaG5laGluIHVuc2NoYXJmLgogICAgcmVzZXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gZGlzYXJtUmVzZXQoYnRuKSwgNDAwMCk7CiAgfQogIGZ1bmN0aW9uIHJlc2V0S29uZmlndXJhdGlvbigpIHsKICAgIGNsZWFyVGltZW91dChyZXNldFRpbWVyKTsgcmVzZXRUaW1lciA9IG51bGw7CiAgICAvLyBHbGVpY2hlIFNjaGx1ZXNzZWxtZW5nZSB3aWUgZGVyIFVyc3BydW5nIC0+IE9iamVjdC5hc3NpZ24gbGFlc3N0IG5pY2h0cyBzdGVoZW4uCiAgICAvLyBKU09OLnBhcnNlIGxpZWZlcnQgZnJpc2NoZSBLb3BpZW4gdm9uIGtvbnRha3QvbmFjaHdlaXNlL3Bvc2l0aW9uZW4sIGRhbWl0IGRlcgogICAgLy8gVXJzcHJ1bmdzLVNuYXBzaG90IG5pY2h0IHVlYmVyIGdldGVpbHRlIFJlZmVyZW56ZW4gbWl0bXV0aWVydCB3aXJkLgogICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwgSlNPTi5wYXJzZShVUlNQUlVORykpOwogICAgaWYgKGZzLm9wZW4pIGZzQ2xvc2UoKTsgICAgICAgICAgLy8gVm9sbGJpbGQgemVpZ3Qgc29uc3QgZGllIFplaWNobnVuZyBkZXMgYWx0ZW4gU3RhbmRlcwogICAgcHJpY2VDdXIgPSAwOyAgICAgICAgICAgICAgICAgICAgLy8gUHJlaXMtQW5pbWF0aW9uIG5pY2h0IHZvbSBhbHRlbiBXZXJ0IGhlcnVudGVyemFlaGxlbiBsYXNzZW4KICAgIHJlbmRlckFsbCgpOyAgICAgICAgICAgICAgICAgICAgIC8vIHJlbmRlckFsbCgpIHJ1ZnQgcmVwb3J0SGVpZ2h0KCkgYmVyZWl0cyBtaXQgYXVmIC4uLgogICAgc2Nyb2xsVG9wKCk7CiAgICByZXBvcnRIZWlnaHQoKTsgICAgICAgICAgICAgICAgICAvLyAuLi4gaGllciBub2NobWFsLCBuYWNoZGVtIGRhcyBMYXlvdXQgYXVmIFNjaHJpdHQgMSBzdGVodAogIH0KCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFJFTkRFUiAqLwogIGZ1bmN0aW9uIHJlbmRlckFsbCgpIHsgcmVuZGVyUHJvZ3Jlc3MoKTsgcmVuZGVyUGFuZWwoKTsgcmVuZGVyUHJldmlldygpOyByZW5kZXJOYXYoKTsgcmVwb3J0SGVpZ2h0KCk7IH0KCiAgZnVuY3Rpb24gcmVuZGVyUHJvZ3Jlc3MoKSB7CiAgICBjb25zdCB3cmFwID0gJCgnI3d6LXByb2dyZXNzJyk7CiAgICBjb25zdCBrbGFtbWVyID0gaXN0S2xhbW1lcih0eXBPYmooc3RhdGUudHlwKSk7CiAgICB3cmFwLmlubmVySFRNTCA9IFNURVBTLmZpbHRlcihzID0+IGFwcGxpY2FibGUocy5uKSkubWFwKHMgPT4gewogICAgICBjb25zdCBjbHMgPSBzLm4gPT09IHN0YXRlLnN0ZXAgPyAnYWN0aXZlJyA6IChjb21wbGV0ZShzLm4pICYmIHMubiA8IHN0YXRlLnN0ZXAgPyAnZG9uZScgOiAnJyk7CiAgICAgIGNvbnN0IGNhbkNsaWNrID0gcmVhY2hhYmxlKHMubik7CiAgICAgIC8vIFIyLTQ6IEJlaSBkZXIgS2xhbW1lciBlbnRmYWVsbHQgZGllIE9iZXJmbGFlY2hlbi1XYWhsIC0+IFNjaHJpdHQgNSBoZWlzc3QgbnVyICJXZXJrc3RvZmYiLgogICAgICBjb25zdCBsYWJlbCA9IChzLm4gPT09IDUgJiYga2xhbW1lcikgPyAnV2Vya3N0b2ZmJyA6IHMubGFiZWw7CiAgICAgIHJldHVybiBgPGJ1dHRvbiBjbGFzcz0icHN0ZXAgJHtjbHN9IiBkYXRhLWFjdD0iZ290byIgZGF0YS1uPSIke3Mubn0iICR7Y2FuQ2xpY2sgPyAnJyA6ICdkaXNhYmxlZCd9PgogICAgICAgIDxzcGFuIGNsYXNzPSJudW0iPiR7Y29tcGxldGUocy5uKSAmJiBzLm4gPCBzdGF0ZS5zdGVwID8gaWMoJ2NoZWNrJywgJ2ljJykgOiBzdGVwUG9zKHMubil9PC9zcGFuPiR7ZXNjKGxhYmVsKX08L2J1dHRvbj5gOwogICAgfSkuam9pbignJyk7CiAgfQoKICBmdW5jdGlvbiB0aWxlKHNlbCwgYWN0LCBpZCwgdGl0bGUsIHN1YiwgYmFkZ2UsIGljb24pIHsKICAgIHJldHVybiBgPGJ1dHRvbiBjbGFzcz0idGlsZSAke3NlbCA\\\/ICdzZWwnIDogJyd9IiBkYXRhLWFjdD0iJHthY3R9IiBkYXRhLWlkPSIke2lkfSI+CiAgICAgICR7aWNvbiA\\\/IGljKGljb24pIDogJyd9CiAgICAgIDxzcGFuIGNsYXNzPSJ0Ij4ke2VzYyh0aXRsZSl9PC9zcGFuPgogICAgICAke3N1YiA\\\/IGA8c3BhbiBjbGFzcz0iZCI+JHtlc2Moc3ViKX08L3NwYW4+YCA6ICcnfQogICAgICAke2JhZGdlID8gYDxzcGFuIGNsYXNzPSJiYWRnZSAke2JhZGdlLmNsc30iPiR7ZXNjKGJhZGdlLnR4dCl9PC9zcGFuPmAgOiAnJ30KICAgIDwvYnV0dG9uPmA7CiAgfQogIC8qIEtvcGZ6ZWlsZSBqZWRlcyBTY2hyaXR0cy4gRGVyIFp1cnVlY2tzZXR6ZW4tQnV0dG9uIChBNSkgaGFlbmd0IGJld3Vzc3QgaGllcgogICAqIGRyaW46IGhlYWQoKSBiYXVlbiBBTExFIGFjaHQgU2Nocml0dGUsIGRhbWl0IHNpdHp0IGVyIHVlYmVyYWxsIGFuIGRlcnNlbGJlbgogICAqIFN0ZWxsZSAtIHVuZCBkaWUgUmVpaGUgZGVyIFNjaHJpdHQtUGlsbGVuICgjd3otcHJvZ3Jlc3MpIGJsZWlidCBzYXViZXIuCiAgICogU29sYW5nZSBuaWNodHMgZ2V3YWVobHQgaXN0ICg9IFVyc3BydW5nc3p1c3RhbmQpLCB3YWVyZSBlciBlaW4gTm8tT3AgLT4gZGlzYWJsZWQuICovCiAgZnVuY3Rpb24gaGVhZChraWNrZXIsIHRpdGxlLCBkZXNjKSB7CiAgICBjb25zdCBmcmlzY2ggPSBpc3RVcnNwcnVuZygpOwogICAgLy8gS2lja2VyLU51bW1lciBhdWYgZGllIGx1ZWNrbG9zZSBBbnplaWdlLVBvc2l0aW9uIGRlcyBha3R1ZWxsZW4gU2Nocml0dHMgc2V0emVuCiAgICAvLyAoc29uc3QgemVpZ3QgZGllIFBpbGxlICI2IiwgZGllIFVlYmVyc2NocmlmdCBhYmVyICJTY2hyaXR0IDciKS4KICAgIGtpY2tlciA9IFN0cmluZyhraWNrZXIpLnJlcGxhY2UoL1xkKy8sIHN0ZXBQb3Moc3RhdGUuc3RlcCkpOwogICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJzdGVwLWhlYWQiPgogICAgICA8ZGl2IGNsYXNzPSJzdGVwLWhlYWQtdG9wIj48ZGl2IGNsYXNzPSJraWNrZXIiPiR7ZXNjKGtpY2tlcil9PC9kaXY+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0icmVzZXRidG4iIGRhdGEtYWN0PSJyZXNldCIgJHtmcmlzY2ggPyAnZGlzYWJsZWQnIDogJyd9CiAgICAgICAgICB0aXRsZT0iJHtmcmlzY2ggPyAnRXMgaXN0IG5vY2ggbmljaHRzIGtvbmZpZ3VyaWVydC4nIDogJ0tvbmZpZ3VyYXRpb24gYXVmIGRlbiBVcnNwcnVuZ3N6dXN0YW5kIHp1csO8Y2tzZXR6ZW4nfSIKICAgICAgICAgID4ke3Jlc2V0TGFiZWwoJ1p1csO8Y2tzZXR6ZW4nKX08L2J1dHRvbj48L2Rpdj4KICAgICAgPGgyPiR7ZXNjKHRpdGxlKX08L2gyPiR7ZGVzYyA\\\/IGA8cD4ke2VzYyhkZXNjKX08L3A+YCA6ICcnfTwvZGl2PmA7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJQYW5lbCgpIHsKICAgIGNvbnN0IHAgPSAkKCcjd3otcGFuZWwnKTsgbGV0IGggPSAnJzsKICAgIHN3aXRjaCAoc3RhdGUuc3RlcCkgewogICAgICBjYXNlIDE6CiAgICAgICAgaCA9IGhlYWQoJ1NjaHJpdHQgMScsICdXb2bDvHIgd2lyZCBkYXMgRml0dGluZyBlaW5nZXNldHp0PycsICdBdXMgZGVyIEFud2VuZHVuZyBzY2hsYWdlbiB3aXIgV2Vya3N0b2ZmLCBPYmVyZmzDpGNoZSB1bmQgRGljaHR1bmcgc2lubnZvbGwgdm9yLiBBbnBhc3NlbiBrYW5uc3QgZHUgYWxsZXMgc3DDpHRlci4nKTsKICAgICAgICBoICs9ICc8ZGl2IGNsYXNzPSJ0aWxlcyI+JyArIEQuYW53ZW5kdW5nZW4ubWFwKGEgPT4gdGlsZShzdGF0ZS5hbndlbmR1bmcgPT09IGEuaWQsICdhbndlbmR1bmcnLCBhLmlkLCBhLmxhYmVsLCBhLnN1YiwgbnVsbCwgYS5pZCkpLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICBoID0gaGVhZCgnU2Nocml0dCAyJywgJ1ZlcmJpbmR1bmdzYXJ0IHfDpGhsZW4nLCAnRmlybWEgV2Vpc3Mga2Fsa3VsaWVydCBiZWlkZSBQcm9kdWt0Z3J1cHBlbiBpbmRpdmlkdWVsbCBhdWYgQW5mcmFnZS4nKTsKICAgICAgICBoICs9ICc8ZGl2IGNsYXNzPSJ0aWxlcyI+JyArIEQubm9ybWVuLm1hcChuID0+IHRpbGUoc3RhdGUubm9ybSA9PT0gbi5pZCwgJ25vcm0nLCBuLmlkLCBuLmxhYmVsICsgJyDigJMgJyArIG4uc3ViLCBuLmhpbndlaXMsCiAgICAgICAgICBuLnByZWlzTW9kdXMgPT09ICdsaXZlJyAmJiBELnByZWlzZS5mcmVpZ2VnZWJlbiA9PT0gdHJ1ZSA\\\/IHsgY2xzOidsaXZlJywgdHh0OidtaXQgZnJlaWdlZ2ViZW5lbSBQcmVpcycgfSA6IHsgY2xzOidhbmZyYWdlJywgdHh0OidhdWYgQW5mcmFnZScgfSkpLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMzogewogICAgICAgIGNvbnN0IHRzID0gRC50eXBlbi5maWx0ZXIodCA9PiB0Lm5vcm0gPT09IHN0YXRlLm5vcm0gJiYgdC5ha3RpdiAmJiAhaXNUeXBlQmxvY2tlZCh0KSk7CiAgICAgICAgaCA9IGhlYWQoJ1NjaHJpdHQgMycsICdCYXV0ZWlsIHfDpGhsZW4nLCAnQWIgaGllciB3w6RjaHN0IGRpZSBaZWljaG51bmcgcmVjaHRzIGxpdmUgbWl0IGRlaW5lciBBdXN3YWhsLicpOwogICAgICAgIC8vIEJhZGdlLVJlaWhlbmZvbGdlOiBtYXNzZUZvbGd0IChDRi9DRkkgLSBnYXIga2VpbmUgTWFzc2UpIGdlaHQgdm9yIG1hc3NlUGxhdHpoYWx0ZXIKICAgICAgICAvLyAoRElOIDExODY1IC0gTWFzc2UgZGEsIGFiZXIgbm9jaCBuaWNodCBXZWlzcy12ZXJpZml6aWVydCkuIERlciBLdW5kZSBzaWVodCBhbQogICAgICAgIC8vIEJhdXRlaWwgc2VsYnN0LCB3b3JhbiBlciBpc3QsIGJldm9yIGVyIGhpbmVpbmtsaWNrdC4KICAgICAgICBoICs9ICc8ZGl2IGNsYXNzPSJ0aWxlcyI+JyArIHRzLm1hcCh0ID0+IHRpbGUoc3RhdGUudHlwID09PSB0LmlkLCAndHlwJywgdC5pZCwgdC5sYWJlbCwgdC5zdWIsCiAgICAgICAgICB0Lm1hc3NlRm9sZ3QgPyB7IGNsczonYW5mcmFnZScsIHR4dDonTWHDn2UgZm9sZ2VuJyB9CiAgICAgICAgICA6IHQubWFzc2VQbGF0emhhbHRlciA\\\/IHsgY2xzOidhbmZyYWdlJywgdHh0OidNYcOfZSB2b3Jsw6R1ZmlnJyB9IDogbnVsbCkpLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICAgICAgLy8gUjMtMTogT3JiaXRhbHNjaHdlaXNzLUhpbndlaXMgZnVlciBkaWUgZ2VzY2h3ZWlzc3RlbiBGaXR0aW5ncy4gRXJzZXR6dCBkZW4gZnJ1ZWhlcmVuCiAgICAgICAgLy8gIk9yYml0YWwgZ2VzY2h3ZWnDn3QiLVVudGVydGl0ZWwgZGVyIEJvZWdlbiAoamV0enQgIkZvcm0gQkwtOTAvQkwtNDUiKSBhbiBlaW5lciBTdGVsbGUKICAgICAgICAvLyBmdWVyIGRpZSBnYW56ZSBESU4tMTE4NjUtRmFtaWxpZS4KICAgICAgICBpZiAoc3RhdGUubm9ybSA9PT0gJ2RpbjExODY1JykgaCArPSBgPGRpdiBjbGFzcz0ibm90ZS1wbGgiPiR7aWMoJ2luZm8nKX08c3Bhbj5BbGxlIERJTi0xMTg2NS1GaXR0aW5ncyBmw7xyIE9yYml0YWxzY2h3ZWnDn3VuZy48L3NwYW4+PC9kaXY+YDsKICAgICAgICBpZiAoc3RhdGUubm9ybSA9PT0gJ2RpbjExODY1JyAmJiBELm1hc3NlLmRpbjExODY1LnRTdHVlY2tSZWR1emllcnQuc3RhdHVzID09PSAnYmxvY2tpZXJ0JykgewogICAgICAgICAgaCArPSBgPGRpdiBjbGFzcz0ibm90ZS1wbGgiPiR7aWMoJ2luZm8nKX08c3Bhbj5SZWR1emllcnRlIFQtU3TDvGNrZSBibGVpYmVuIGF1c2dlYmxlbmRldCwgYmlzIEZpcm1hIFdlaXNzIGRpZSBmZWhsZW5kZW4gR3LDtsOfZW5rb21iaW5hdGlvbmVuIHVuZCBNYcOfZSBsaWVmZXJ0Ljwvc3Bhbj48L2Rpdj5gOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIDQ6IGggPSByZW5kZXJTdGVwNCgpOyBicmVhazsKICAgICAgY2FzZSA1OiB7CiAgICAgICAgLy8gV2Vya3N0b2ZmbGlzdGUgaXN0IHR5cGFiaGFlbmdpZzogS2xhbW1lcm4gaGFiZW4gZWlnZW5lIFdlcmtzdG9mZmUgKDEuNDMwOC8xLjQ0MDgsCiAgICAgICAgLy8gQWJzY2huaXR0IEUpLCBnZWZpbHRlcnQgbmFjaCBkZW0gZ2V3YWVobHRlbiBLbGFtbWVydHlwLiBBbGxlcyBhbmRlcmU6IDEuNDQwNC8xLjQ0MzUuCiAgICAgICAgY29uc3Qgd0xpc3RlID0gd2Vya3N0b2ZmT3B0aW9uZW4oc3RhdGUpLCB3U2VsID0gZWZmV2Vya3N0b2ZmKHN0YXRlKSwga2xhbW1lciA9IGlzdEtsYW1tZXIodHlwT2JqKHN0YXRlLnR5cCkpOwogICAgICAgIC8vIFIyLTQ6IERpZSBLbGFtbWVyIGhhdCBLRUlORSBPYmVyZmxhZWNoZW4tV2FobCAtPiBTY2hyaXR0IDUgemVpZ3QgYmVpIGlociBudXIgZGVuCiAgICAgICAgLy8gV2Vya3N0b2ZmICgxLjQzMDgvMS40NDA4KSB1bmQgZGVyIFRpdGVsL1VudGVydGl0ZWwgc3BhcnQgZGllIE9iZXJmbGFlY2hlIGF1cy4KICAgICAgICBoID0gaGVhZCgnU2Nocml0dCA1Jywga2xhbW1lciA\\\/ICdXZXJrc3RvZmYnIDogJ1dlcmtzdG9mZiAmIE9iZXJmbMOkY2hlJywga2xhbW1lcgogICAgICAgICAgPyAnS2xhbW1lcm4gd2VyZGVuIGF1cyBhbmRlcmVuIFdlcmtzdG9mZmVuIGdlZmVydGlndCBhbHMgZGllIEZpdHRpbmdzIOKAkyB3w6RobGJhciBpc3QsIHdhcyBkZXIgS2xhbW1lcnR5cCB6dWzDpHNzdC4gRWluZSBPYmVyZmzDpGNoZW5rbGFzc2Ugd2lyZCBiZWkgS2xhbW1lcm4gbmljaHQgZ2V3w6RobHQuJwogICAgICAgICAgOiAnQmVpZGUgc2luZCBhdXMgZGVyIEFud2VuZHVuZyB2b3JiZWxlZ3QuJyk7CiAgICAgICAgaCArPSAnPHNwYW4gY2xhc3M9ImZpZWxkLWxhYmVsIj5XZXJrc3RvZmY8L3NwYW4+PGRpdiBjbGFzcz0ib3B0cyI+JyArIHdMaXN0ZS5tYXAodyA9PiB7CiAgICAgICAgICAvLyBzdWIvaGlud2VpcyBzaW5kIGJlaSBkZW4gS2xhbW1lci1XZXJrc3RvZmZlbiBiZXd1c3N0IGxlZXIgKFdlaXNzIGhhdCBkYXp1IG5pY2h0cwogICAgICAgICAgLy8gZ2VsaWVmZXJ0KSAtPiBudXIgYXVzZ2ViZW4sIHdhcyB3aXJrbGljaCBkYSBpc3QuIE5pY2h0cyBkYXp1ZXJmaW5kZW4uCiAgICAgICAgICBjb25zdCBkID0gW3cuc3ViLCB3LmhpbndlaXNdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgwrcgJyk7CiAgICAgICAgICByZXR1cm4gYDxidXR0b24gY2xhc3M9Im9wdCAke3dTZWwgPT09IHcuaWQgPyAnc2VsJyA6ICcnfSIgZGF0YS1hY3Q9IndlcmtzdG9mZiIgZGF0YS1pZD0iJHt3LmlkfSI+CiAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idCI+JHtlc2Mody5sYWJlbCl9PC9zcGFuPiR7ZCA\\\/IGA8c3BhbiBjbGFzcz0iZCI+JHtlc2MoZCl9PC9zcGFuPmAgOiAnJ308L2J1dHRvbj5gOwogICAgICAgIH0pLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICAgICAgaWYgKGtsYW1tZXIpIHsKICAgICAgICAgIGNvbnN0IGt0ID0ga2xhbW1lclR5cE9iaihzdGF0ZS5rbGFtbWVyVHlwKTsKICAgICAgICAgIGlmIChrdCAmJiBrdC53ZXJrc3RvZmZlLmxlbmd0aCA9PT0gMSkgaCArPSBgPGRpdiBjbGFzcz0ibm90ZS1wbGgiPiR7aWMoJ2luZm8nKX08c3Bhbj4ke2VzYyhrdC5sYWJlbCl9ICgke2VzYyhrdC5zdWIpfSkgd2lyZCBpbiAke2VzYyhrdC53ZXJrc3RvZmZlWzBdKX0gZ2VmZXJ0aWd0Ljwvc3Bhbj48L2Rpdj5gOwogICAgICAgIH0KICAgICAgICAvLyBPYmVyZmxhZWNoZW4tQmxvY2sgbnVyIGZ1ZXIgTklDSFQtS2xhbW1lci1UeXBlbiAoUjItNCkuCiAgICAgICAgaWYgKCFrbGFtbWVyKSB7CiAgICAgICAgICBjb25zdCBvTGlzdGUgPSBvYmVyZmxhZWNoZW5PcHRpb25lbihzdGF0ZSk7CiAgICAgICAgICBjb25zdCBlbXBmID0gKHN0YXRlLm9iZXJmbGFlY2hlID09PSAnSDRvJykgPyAnMS40NDM1JyA6IG51bGw7CiAgICAgICAgICBoICs9ICc8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPk9iZXJmbMOkY2hlIChESU4gMTE4NjYpPC9zcGFuPjxkaXYgY2xhc3M9Im9wdHMiPicgKyBvTGlzdGUubWFwKG8gPT4KICAgICAgICAgICAgYDxidXR0b24gY2xhc3M9Im9wdCAke3N0YXRlLm9iZXJmbGFlY2hlID09PSBvLmlkID8gJ3NlbCcgOiAnJ30iIGRhdGEtYWN0PSJvYmVyZmxhZWNoZSIgZGF0YS1pZD0iJHtvLmlkfSI+CiAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Ij4ke2VzYyhvLmxhYmVsKX08L3NwYW4+PHNwYW4gY2xhc3M9ImQiPiR7ZXNjKG8uc3ViKX0gwrcgJHtlc2Moby52ZXJmYWhyZW4pfTwvc3Bhbj48L2J1dHRvbj5gKS5qb2luKCcnKSArICc8L2Rpdj4nOwogICAgICAgICAgaWYgKGVtcGYgJiYgc3RhdGUud2Vya3N0b2ZmICE9PSBlbXBmKSBoICs9IGA8ZGl2IGNsYXNzPSJub3RlLXBsaCI+JHtpYygnaW5mbycpfTxzcGFuPkbDvHIgSDRvIChlbGVrdHJvcG9saWVydCkgZW1wZmVobGVuIHdpciBXZXJrc3RvZmYgMS40NDM1Ljwvc3Bhbj48L2Rpdj5gOwogICAgICAgICAgaWYgKGlzQ29ubmVjdCh0eXBPYmooc3RhdGUudHlwKSkpIGggKz0gYDxkaXYgY2xhc3M9Im5vdGUtb2siPiR7aWMoJ2NoZWNrJywgJ2ljJyl9PHNwYW4+RGllIEF1c3dhaGwgaXN0IGF1ZiBkaWUgaW4gZGVuIGdlcHLDvGZ0ZW4gRGF0ZW5ibMOkdHRlcm4gYmVsZWd0ZW4gT2JlcmZsw6RjaGVuIGVpbmdlc2NocsOkbmt0Ljwvc3Bhbj48L2Rpdj5gOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIDY6IHsKICAgICAgICBjb25zdCBzcCA9IHNwZXJyRGljaHR1bmdlbigpOwogICAgICAgIC8vIERlciBLb25mb3JtaXRhZXRzLVp1c2F0eiBmb2xndCBzZWl0IGRlbSAxMS4wOC4yMDI2IGRlciBBbndlbmR1bmcgYXVzIFNjaHJpdHQgMQogICAgICAgIC8vIChCZXJuZDogUGhhcm1hL1N0ZXJpbHRlY2huaWsgLT4gVVNQIENsYXNzIFZJLCBMZWJlbnNtaXR0ZWwvQ2hlbWllIC0+IEVHIDE5MzUvMjAwNCkuCiAgICAgICAgLy8gVm9yaGVyIHN0YW5kIGhpZXIgZnVlciBhbGxlIHZpZXIgQW53ZW5kdW5nZW4gcGF1c2NoYWwgIkZEQS9VU1Ata29uZm9ybSIuCiAgICAgICAgY29uc3QgZmRhSyA9IGZkYUt1cnpUZXh0KCk7CiAgICAgICAgaCA9IGhlYWQoJ1NjaHJpdHQgNicsICdEaWNodHVuZyB3w6RobGVuJywgJ0RpZSBEaWNodHVuZ3NmYXJiZSBlcnNjaGVpbnQgZGlyZWt0IGluIGRlciBaZWljaG51bmcuIEFsbGUgU3RhbmRhcmRkaWNodHVuZ2VuIHZvbiBGaXJtYSBXZWlzcyBzaW5kICcKICAgICAgICAgICsgKGZkYUsgPyAnRkRBLSB1bmQgJyArIGZkYUsgKyAnLWtvbmZvcm0uJyA6ICdGREEta29uZm9ybS4nKSk7CiAgICAgICAgaCArPSAnPGRpdiBjbGFzcz0ib3B0cyI+JyArIEQuZGljaHR1bmdlbi5tYXAoZCA9PiB7CiAgICAgICAgICBjb25zdCBkaXMgPSBzcC5oYXMoZC5pZCk7CiAgICAgICAgICByZXR1cm4gYDxidXR0b24gY2xhc3M9Im9wdCAke3N0YXRlLmRpY2h0dW5nID09PSBkLmlkID8gJ3NlbCcgOiAnJ30gJHtkaXMgPyAnZGlzYWJsZWQnIDogJyd9IiBkYXRhLWFjdD0iZGljaHR1bmciIGRhdGEtaWQ9IiR7ZC5pZH0iICR7ZGlzID8gJ2Rpc2FibGVkJyA6ICcnfT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQiPjxzcGFuIHN0eWxlPSJ3aWR0aDoxMnB4O2hlaWdodDoxMnB4O2JvcmRlci1yYWRpdXM6M3B4O2JvcmRlcjoxcHggc29saWQgIzFjMWMxYztiYWNrZ3JvdW5kOiR7ZC5mYXJiZX0iPjwvc3Bhbj4ke2VzYyhkLmxhYmVsKX0ke2RpcyA\\\/ICc8c3BhbiBjbGFzcz0ibG9jayI+Z2VzcGVycnQ8L3NwYW4+JyA6ICcnfTwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImQiPiR7ZXNjKGQuc3ViKX0ke2QuZmRhID09PSB0cnVlID8gJyDCtyBGREEnIDogJyd9JHsoZC51c3BWSSA9PT0gdHJ1ZSAmJiBmZGFLKSA\\\/ICcgwrcgJyArIGVzYyhmZGFLKSA6ICcnfTwvc3Bhbj48L2J1dHRvbj5gOwogICAgICAgIH0pLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICAgICAgY29uc3QgYXZMID0gYXVzZnVlaHJ1bmdBdmFpbChzdGF0ZSk7CiAgICAgICAgaCArPSAnPHNwYW4gY2xhc3M9ImZpZWxkLWxhYmVsIj5BdXNmw7xocnVuZzwvc3Bhbj48ZGl2IGNsYXNzPSJzZWciPicgKwogICAgICAgICAgRC5kaWNodHVuZ0F1c2Z1ZWhydW5nLmZpbHRlcihhID0+IGF2TC5pbmRleE9mKGEuaWQpID49IDApLm1hcChhID0+IGA8YnV0dG9uIGNsYXNzPSIke2VmZkxpcHBlKHN0YXRlKSA9PT0gYS5pZCA\\\/ICdzZWwnIDogJyd9IiBkYXRhLWFjdD0ibGlwcGUiIGRhdGEtaWQ9IiR7YS5pZH0iPiR7ZXNjKGEubGFiZWwpfTwvYnV0dG9uPmApLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICAgICAgaCArPSBgPGRpdiBjbGFzcz0ibm90ZS1vayI+JHtpYygnY2hlY2snLCAnaWMnKX08c3Bhbj4ke2VzYyhmZGFUZXh0KCkpfSAoU3RhbmRhcmQpIOKAlCBiZWkgYWxsZW4gU3RhbmRhcmRkaWNodHVuZ2VuIHZvbiBGaXJtYSBXZWlzcyBpbmtsdXNpdmUuPC9zcGFuPjwvZGl2PmA7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSA3OiBoID0gcmVuZGVyU3RlcDcoKTsgYnJlYWs7CiAgICAgIGNhc2UgODogaCA9IHJlbmRlclN0ZXA4KCk7IGJyZWFrOwogICAgfQogICAgcC5pbm5lckhUTUwgPSBoOwogICAgaWYgKHN0YXRlLnN0ZXAgPT09IDgpIGJpbmRGb3JtKCk7CiAgfQoKICAvKiBTY2hyaXR0IDQgZnVlciBCbGluZGRlY2tlbCArIEtsYW1tZXIgKEFic2Nobml0dCBEKTogS0VJTiBSZWloZW4tVW1zY2hhbHRlci4KICAgKiBCZXJuZDogIm1ldHJpc2NoIEROLCBJU08vT0QgdW5kIFpvbGwga2FubnN0IGR1IGlnbm9yaWVyZW4uIEVpbmZhY2ggbmFjaCBkZXIKICAgKiBGbGFuc2NoZ3JvZXNzZSBhdWZsaXN0ZW4uIiAtPiBudXIgZWluZSBMaXN0ZSBtaXQgZGVuIDE4IEZsYW5zY2gtw5guCiAgICogRnVlciBkaWUgR3JvZXNzZW4gb2huZSBoaW50ZXJsZWd0ZSBNYXNzZSAoMTQ0LDUgLyAyMTcsNSAvIDI2OCAvIDI4NiwxIC8gMzE5KQogICAqIHdpcmQgYXVzc2NobGllc3NsaWNoIGRlciBGbGFuc2NoLcOYIGdlZnVlaHJ0LCBhbGxlcyBhbmRlcmUgc3RlaHQgYXVmICJmb2xndCIuICovCiAgZnVuY3Rpb24gcmVuZGVyU3RlcDRGbGFuc2NoKHQpIHsKICAgIGNvbnN0IGYgPSBmbGFuc2NoRm9yKHN0YXRlKTsKICAgIGxldCBoID0gaGVhZCgnU2Nocml0dCA0JywgJ0ZsYW5zY2hncsO2w59lIHfDpGhsZW4nLAogICAgICB0LmxhYmVsICsgJyB3aXJkIG51ciBuYWNoIGRlbSBGbGFuc2NoLcOYIHVudGVyc2NoaWVkZW4g4oCTIFJlaWhlIChtZXRyaXNjaCBETiAvIElTTyAvIFpvbGwpIHNwaWVsdCBoaWVyIGtlaW5lIFJvbGxlLicpOwogICAgaWYgKGlzdEtsYW1tZXIodCkpIHsKICAgICAgaCArPSAnPHNwYW4gY2xhc3M9ImZpZWxkLWxhYmVsIj5LbGFtbWVydHlwPC9zcGFuPjxkaXYgY2xhc3M9Im9wdHMiPicgKyAoRC5rbGFtbWVyVHlwZW4gfHwgW10pLm1hcChrID0+CiAgICAgICAgYDxidXR0b24gY2xhc3M9Im9wdCAke3N0YXRlLmtsYW1tZXJUeXAgPT09IGsuaWQgPyAnc2VsJyA6ICcnfSIgZGF0YS1hY3Q9ImtsYW1tZXJ0eXAiIGRhdGEtaWQ9IiR7ay5pZH0iPgogICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Ij4ke2VzYyhrLmxhYmVsKX08L3NwYW4+PHNwYW4gY2xhc3M9ImQiPiR7ZXNjKGsuc3ViKX0gwrcgV2Vya3N0b2ZmICR7ZXNjKGsud2Vya3N0b2ZmZS5qb2luKCcgb2RlciAnKSl9PC9zcGFuPjwvYnV0dG9uPmApLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICAgIC8vIE11dHRlci1BcnQgKFIyLTQpOiBNdXR0ZXIgPSBTdGFuZGFyZCwgU2VjaHNrYW50bXV0dGVyIGdlZ2VuIEF1ZnByZWlzLiBEZWZhdWx0ID0gTS4KICAgICAgaWYgKChELmtsYW1tZXJNdXR0ZXJuIHx8IFtdKS5sZW5ndGgpIHsKICAgICAgICBoICs9ICc8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPk11dHRlcjwvc3Bhbj48ZGl2IGNsYXNzPSJzZWciPicgKyBELmtsYW1tZXJNdXR0ZXJuLm1hcChtID0+CiAgICAgICAgICBgPGJ1dHRvbiBjbGFzcz0iJHtzdGF0ZS5rbGFtbWVyTXV0dGVyID09PSBtLmlkID8gJ3NlbCcgOiAnJ30iIGRhdGEtYWN0PSJrbGFtbWVybXV0dGVyIiBkYXRhLWlkPSIke20uaWR9Ij4ke2VzYyhtLmxhYmVsKX08L2J1dHRvbj5gKS5qb2luKCcnKSArICc8L2Rpdj4nOwogICAgICAgIGlmIChELmtsYW1tZXJNdXR0ZXJIaW53ZWlzKSBoICs9IGA8ZGl2IGNsYXNzPSJub3RlLXBsaCI+JHtpYygnaW5mbycpfTxzcGFuPiR7ZXNjKEQua2xhbW1lck11dHRlckhpbndlaXMpfTwvc3Bhbj48L2Rpdj5gOwogICAgICB9CiAgICB9CiAgICAvLyBEZXIgWnVzYXR6IGhhZW5ndCBhbSBCYXV0ZWlsIChmbGFuc2NoTWFzc09mZmVuKSwgTklDSFQgbWVociBhbiBibGluZFRoazogZnVlciBkZW4KICAgIC8vIEJsaW5kZGVja2VsIGlzdCBpbnp3aXNjaGVuIGplZGUgR3JvZXNzZSBiZW1hc3N0LCBiZWkgZGVyIEtsYW1tZXIgYmxlaWJlbiAyODYsMSAvCiAgICAvLyAzMTkgLyAzMzggbGF1dCBCZXJuZCAiQXVmIEFuZnJhZ2UiIC0gZGVyIEhpbndlaXMgbXVzcyBkb3J0IHN0ZWhlbmJsZWliZW4uCiAgICBoICs9IGA8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPkZsYW5zY2gt4oyAPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJzZWxlY3Qtd3JhcCI+PHNlbGVjdCBjbGFzcz0ic3oiIGlkPSJ3ei1mbGFuc2NoIiBkYXRhLXJvbGU9ImZsYW5zY2giPiR7KEQuZmxhbnNjaGdyb2Vzc2VuIHx8IFtdKS5tYXAoeCA9PgogICAgICAgIGA8b3B0aW9uIHZhbHVlPSIke3guaWR9IiAke3N0YXRlLmZsYW5zY2ggPT09IHguaWQgPyAnc2VsZWN0ZWQnIDogJyd9PuKMgCAke2VzYyh4LmxhYmVsKX0gbW0ke2ZsYW5zY2hNYXNzT2ZmZW4odCwgeCwgc3RhdGUua2xhbW1lclR5cCkgPyAnIMK3IHdlaXRlcmUgTWHDn2UgZm9sZ2VuJyA6ICcnfTwvb3B0aW9uPmApLmpvaW4oJycpfTwvc2VsZWN0PjwvZGl2PmA7CiAgICBpZiAoZmxhbnNjaE1hc3NPZmZlbih0LCBmLCBzdGF0ZS5rbGFtbWVyVHlwKSkgewogICAgICBoICs9IGA8ZGl2IGNsYXNzPSJub3RlLXBsaCI+JHtpYygnaW5mbycpfTxzcGFuPiR7aXN0S2xhbW1lcih0KQogICAgICAgID8gJ0bDvHIgRmxhbnNjaC3ijIAgJyArIGVzYyhmLmxhYmVsKSArICcgbW0gaXN0IGRpZSBLbGFtbWVyIG5vY2ggbmljaHQgYmVtYcOfdCDigJMgZGFzIE1hw58gQSBibGVpYnQgaGllciBhdWYgQW5mcmFnZS4gQW5mcmFnZW4gbMOkc3N0IHNpY2ggZGllIEdyw7bDn2UgdHJvdHpkZW0uJwogICAgICAgIDogJ0bDvHIgRmxhbnNjaC3ijIAgJyArIGVzYyhmLmxhYmVsKSArICcgbW0gbGllZ3QgdW5zIGJpc2hlciBudXIgZGVyIEZsYW5zY2gtRHVyY2htZXNzZXIgdm9yLiBEaWUgw7xicmlnZW4gTWHDn2UgcmVpY2h0IEZpcm1hIFdlaXNzIG5hY2gg4oCTIGFuYmlldGVuIGzDpHNzdCBzaWNoIGRpZSBHcsO2w59lIHRyb3R6ZGVtLid9PC9zcGFuPjwvZGl2PmA7CiAgICB9CiAgICBoICs9IGA8YnV0dG9uIGNsYXNzPSJsaW5rYnRuIiBkYXRhLWFjdD0ic29uZGVyIj4ke2ljKCdwbHVzJywgJ2ljJyl9IFNvbmRlcmFibWVzc3VuZyBhbmZyYWdlbjwvYnV0dG9uPmA7CiAgICByZXR1cm4gaDsKICB9CgogIC8qIFNjaHJpdHQgNCBmdWVyIFR5cGVuIG9obmUgYmVsZWd0ZSBNYXNzcXVlbGxlIChDRi9DRkksIEFic2Nobml0dCBHKS4KICAgKiBCZXd1c3N0IEtFSU5FIFJlaWhlbi0vR3JvZXNzZW5hdXN3YWhsOiBEaWUgTGlzdGUgaGFldHRlIG51ciBkaWUgZHVlbm53YW5kaWdlbgogICAqIERJTi0zMjY3Ni1NYXNzZSBhbnp1YmlldGVuLCBkaWUgZnVlciBDRi9DRkkgbmljaHQgYmVsZWd0IHNpbmQuIExpZWJlciBlaW5lIGVocmxpY2hlCiAgICogTHVlY2tlIGFscyBlaW5lIGZhbHNjaGUgR3JvZXNzZSAtIGRlciBLdW5kZSBrYW5uIHNlaW5lIFd1bnNjaGdyb2Vzc2UgaW0gRnJlaXRleHQKICAgKiAoIlNvbmRlcmFibWVzc3VuZyBhbmZyYWdlbiIpIG1pdGdlYmVuLCBXZWlzcyBrbGFlcnQgc2llIG1pdCBkZW0gRGF0ZW5ibGF0dC4gKi8KICBmdW5jdGlvbiByZW5kZXJTdGVwNE1hc3NlRm9sZ3QodCkgewogICAgbGV0IGggPSBoZWFkKCdTY2hyaXR0IDQnLCAnTWHDn2UgZm9sZ2VuJywKICAgICAgJ0bDvHIgJyArIHQubGFiZWwgKyAnIGxpZWdlbiB1bnMgbm9jaCBrZWluZSBmcmVpZ2VnZWJlbmVuIE1hw59lIHZvci4nKTsKICAgIGggKz0gYDxkaXYgY2xhc3M9Im5vdGUtcGxoIj4ke2ljKCdpbmZvJyl9PHNwYW4+U29iYWxkIHVucyBkYXMgcGFzc2VuZGUgRGF0ZW5ibGF0dCB2b24gRmlybWEgV2Vpc3Mgdm9ybGllZ3QsCiAgICAgIGthbm5zdCBkdSBoaWVyIGRpZSBHcsO2w59lIHfDpGhsZW4gdW5kIGRpZSBaZWljaG51bmcgYmF1dCBzaWNoIGF1Zi4gQmlzIGRhaGluIHplaWdlbiB3aXIgYmV3dXNzdAogICAgICB3ZWRlciBNYcOfZSBub2NoIGVpbmVuIFJpY2h0cHJlaXMg4oCTIGxpZWJlciBlaW5lIEzDvGNrZSBhbHMgZWluZSBnZXNjaMOkdHp0ZSBaYWhsLgogICAgICBXZXJrc3RvZmYsIE9iZXJmbMOkY2hlIHVuZCBEaWNodHVuZyBrYW5uc3QgZHUgdHJvdHpkZW0gc2Nob24gZmVzdGxlZ2VuOyBkZWluZSBBbmZyYWdlIGdlaHQKICAgICAgbWl0IGRpZXNlbiBBbmdhYmVuIHJhdXMgdW5kIEZpcm1hIFdlaXNzIG1lbGRldCBzaWNoIG1pdCBkZW4gTWHDn2VuLjwvc3Bhbj48L2Rpdj5gOwogICAgaCArPSBgPGJ1dHRvbiBjbGFzcz0ibGlua2J0biIgZGF0YS1hY3Q9InNvbmRlciI+JHtpYygncGx1cycsICdpYycpfSBXdW5zY2htYcOfIC8gU29uZGVyYWJtZXNzdW5nIGFuZnJhZ2VuPC9idXR0b24+YDsKICAgIHJldHVybiBoOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyU3RlcDRDb25uZWN0KHQpIHsKICAgIGNvbnN0IHJ3ID0gcm93Rm9yKHN0YXRlKTsKICAgIC8vIEJlcm5kIDI3LjA3LjIwMjY6IGtlaW5lIEhlcnN0ZWxsZXJiZXplaWNobnVuZ2VuIG1laHIgaW0gVGV4dCAtIG51ciBub2NoCiAgICAvLyBkaWUgbmV1dHJhbGVuIEt1ZXJ6ZWwgQ0YgdW5kIENGSS4KICAgIGxldCBoID0gaGVhZCgnU2Nocml0dCA0JywgdC5pZCA9PT0gJ0NGJyA\\\/ICdDb25uZWN0LU1hw59lIGZlc3RsZWdlbicgOiAnQ29ubmVjdC1JbmxpbmUtTWHDn2UgZmVzdGxlZ2VuJywKICAgICAgdC5pZCA9PT0gJ0NGJwogICAgICAgID8gJ1JvaHJzdGFuZGFyZCwgR3LDtsOfZSB1bmQgRWluYmF1bMOkbmdlIGJlc3RpbW1lbiBkaWUgR2VvbWV0cmllLiBEaWUgWmVpY2hudW5nIHVuZCBkaWUgTWHDn2tldHRlbiB3YWNoc2VuIGxpdmUgbWl0LicKICAgICAgICA6ICdSb2hyYW5zY2hsdXNzIHVuZCBSb2hyZ3LDtsOfZSBiZXN0aW1tZW4gZGllIEdlb21ldHJpZS4gRGllIFplaWNobnVuZyB1bmQgZGllIE1hw59rZXR0ZW4gd2FjaHNlbiBsaXZlIG1pdC4nKTsKICAgIGlmICh0LmlkID09PSAnQ0YnKSB7CiAgICAgIGggKz0gJzxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCI+Um9ocnN0YW5kYXJkPC9zcGFuPjxkaXYgY2xhc3M9InNlZyI+JyArCiAgICAgICAgT2JqZWN0LmVudHJpZXMoRC5tYXNzZS5jb25uZWN0LmNmLnJlaWhlbikubWFwKChbaWQsIGdydXBwZV0pID0+CiAgICAgICAgICBgPGJ1dHRvbiBjbGFzcz0iJHtzdGF0ZS5jb25uZWN0Tm9ybSA9PT0gaWQgPyAnc2VsJyA6ICcnfSIgZGF0YS1hY3Q9ImNvbm5lY3Rub3JtIiBkYXRhLWlkPSIke2lkfSI+JHtlc2MoZ3J1cHBlLmxhYmVsKX08L2J1dHRvbj5gKS5qb2luKCcnKSArICc8L2Rpdj4nOwogICAgICBjb25zdCBycyA9IHJvd3NGb3Ioc3RhdGUpOwogICAgICBoICs9IGA8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPkdyw7bDn2U8L3NwYW4+PGRpdiBjbGFzcz0ic2VsZWN0LXdyYXAiPjxzZWxlY3QgY2xhc3M9InN6IiBkYXRhLXJvbGU9InNpemUiPiR7cnMubWFwKHIgPT4KICAgICAgICBgPG9wdGlvbiB2YWx1ZT0iJHtlc2Moci5pZCl9IiAke3N0YXRlLmdyb2Vzc2UgPT09IHIuaWQgPyAnc2VsZWN0ZWQnIDogJyd9PiR7ZXNjKGxibChyKSl9IMK3IERlICR7Zm10TU0oci5EZSl9IMK3IERmICR7Zm10TU0oci5EZil9IMK3IERpICR7Zm10TU0oci5EaSl9IG1tPC9vcHRpb24+YCkuam9pbignJyl9PC9zZWxlY3Q+PC9kaXY+YDsKICAgICAgaWYgKHJ3KSB7CiAgICAgICAgaCArPSAnPHNwYW4gY2xhc3M9ImZpZWxkLWxhYmVsIj5FaW5iYXVsw6RuZ2UgTDwvc3Bhbj48ZGl2IGNsYXNzPSJzZWciPicgKyBydy5sYWVuZ2VuLm1hcCh4ID0+CiAgICAgICAgICBgPGJ1dHRvbiBjbGFzcz0iJHtOdW1iZXIoc3RhdGUuY29ubmVjdExhZW5nZSkgPT09IE51bWJlcih4LkwpID8gJ3NlbCcgOiAnJ30iIGRhdGEtYWN0PSJjb25uZWN0bGFlbmdlIiBkYXRhLWlkPSIke3guTH0iPiR7Zm10TU0oeC5MKX0gbW08L2J1dHRvbj5gKS5qb2luKCcnKSArICc8L2Rpdj4nOwogICAgICAgIGggKz0gYDxkaXYgY2xhc3M9InB2LWNoaXBzIj48c3BhbiBjbGFzcz0iY2hpcCI+PGI+VHlwPC9iPiR7ZXNjKHQuaWQpfTwvc3Bhbj48c3BhbiBjbGFzcz0iY2hpcCI+PGI+RGU8L2I+JHtmbXRNTShydy5EZSl9IG1tPC9zcGFuPjxzcGFuIGNsYXNzPSJjaGlwIj48Yj5EZjwvYj4ke2ZtdE1NKHJ3LkRmKX0gbW08L3NwYW4+PHNwYW4gY2xhc3M9ImNoaXAiPjxiPkRpPC9iPiR7Zm10TU0ocncuRGkpfSBtbTwvc3Bhbj48L2Rpdj5gOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBoICs9ICc8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPlJvaHJhbnNjaGx1c3M8L3NwYW4+PGRpdiBjbGFzcz0ic2VnIj4nICsKICAgICAgICBbWydCVycsJ0J1dHQgV2VsZCddLFsnVEMnLCdUcmktQ2xhbXAnXV0ubWFwKChbaWQsbGFiZWxdKSA9PiBgPGJ1dHRvbiBjbGFzcz0iJHtzdGF0ZS5jb25uZWN0QW5zY2hsdXNzID09PSBpZCA\\\/ICdzZWwnIDogJyd9IiBkYXRhLWFjdD0iY29ubmVjdGFuc2NobHVzcyIgZGF0YS1pZD0iJHtpZH0iPiR7bGFiZWx9PC9idXR0b24+YCkuam9pbignJykgKyAnPC9kaXY+JzsKICAgICAgY29uc3QgcnMgPSByb3dzRm9yKHN0YXRlKTsKICAgICAgaCArPSBgPHNwYW4gY2xhc3M9ImZpZWxkLWxhYmVsIj5Sb2hyZ3LDtsOfZTwvc3Bhbj48ZGl2IGNsYXNzPSJzZWxlY3Qtd3JhcCI+PHNlbGVjdCBjbGFzcz0ic3oiIGRhdGEtcm9sZT0ic2l6ZSI+JHtycy5tYXAociA9PgogICAgICAgIGA8b3B0aW9uIHZhbHVlPSIke2VzYyhyLmlkKX0iICR7c3RhdGUuZ3JvZXNzZSA9PT0gci5pZCA\\\/ICdzZWxlY3RlZCcgOiAnJ30+JHtlc2MobGJsKHIpKX0gwrcgRGUgJHtmbXRNTShyLkRlKX0gwrcgRGkgJHtmbXRNTShyLkRpKX0gbW08L29wdGlvbj5gKS5qb2luKCcnKX08L3NlbGVjdD48L2Rpdj5gOwogICAgICBpZiAocncpIHsKICAgICAgICBjb25zdCBlbmQgPSBjb25uZWN0RW5kRm9yKHN0YXRlLCBydyk7CiAgICAgICAgY29uc3QgdXBwZXIgPSBELm1hc3NlLmNvbm5lY3QuY2ZpLm9iZXJlckFuc2NobHVzczsKICAgICAgICBoICs9IGA8ZGl2IGNsYXNzPSJwdi1jaGlwcyI+PHNwYW4gY2xhc3M9ImNoaXAiPjxiPlR5cDwvYj4ke2VzYyh0LmlkKX08L3NwYW4+PHNwYW4gY2xhc3M9ImNoaXAiPjxiPlJvaHIgRGUgLyBEaTwvYj4ke2ZtdE1NKHJ3LkRlKX0gLyAke2ZtdE1NKHJ3LkRpKX0gbW08L3NwYW4+PHNwYW4gY2xhc3M9ImNoaXAiPjxiPk9iZXJlciBBbnNjaGx1c3MgRGUgLyBEaTwvYj4ke2ZtdE1NKHVwcGVyLkRlKX0gLyAke2ZtdE1NKHVwcGVyLkRpKX0gbW08L3NwYW4+PHNwYW4gY2xhc3M9ImNoaXAiPjxiPlk8L2I+JHtmbXRNTShydy5ZKX0gbW08L3NwYW4+JHtlbmQgPyBgPHNwYW4gY2xhc3M9ImNoaXAiPjxiPkw8L2I+JHtmbXRNTShlbmQuTCl9IG1tPC9zcGFuPjxzcGFuIGNsYXNzPSJjaGlwIj48Yj4ke3N0YXRlLmNvbm5lY3RBbnNjaGx1c3MgPT09ICdUQycgPyAnVEMnIDogJ0EnfTwvYj4ke2ZtdE1NKHN0YXRlLmNvbm5lY3RBbnNjaGx1c3MgPT09ICdUQycgPyBlbmQuVEMgOiBlbmQuQSl9IG1tPC9zcGFuPmAgOiAnJ308L2Rpdj5gOwogICAgICB9CiAgICB9CiAgICBoICs9IGA8YnV0dG9uIGNsYXNzPSJsaW5rYnRuIiBkYXRhLWFjdD0ic29uZGVyIj4ke2ljKCdwbHVzJywgJ2ljJyl9IFNvbmRlcmFibWVzc3VuZyBhbmZyYWdlbjwvYnV0dG9uPmA7CiAgICByZXR1cm4gaDsKICB9CgogIGZ1bmN0aW9uIHJlbmRlclN0ZXA0KCkgewogICAgY29uc3QgdCA9IHR5cE9iaihzdGF0ZS50eXApOyBjb25zdCBycyA9IHJvd3NGb3Ioc3RhdGUpOwogICAgaWYgKGlzdE1hc3NlRm9sZ3QodCkpIHJldHVybiByZW5kZXJTdGVwNE1hc3NlRm9sZ3QodCk7CiAgICBpZiAoaXN0TnVyRmxhbnNjaCh0KSkgcmV0dXJuIHJlbmRlclN0ZXA0RmxhbnNjaCh0KTsKICAgIGlmIChpc0Nvbm5lY3QodCkpIHJldHVybiByZW5kZXJTdGVwNENvbm5lY3QodCk7CiAgICBsZXQgaCA9IGhlYWQoJ1NjaHJpdHQgNCcsICdNYcOfZSBmZXN0bGVnZW4nLCAnUmVpaGUgdW5kIEdyw7bDn2UgYmVzdGltbWVuIGRpZSBHZW9tZXRyaWUuIERpZSBaZWljaG51bmcgdW5kIGRpZSBNYcOfa2V0dGVuIHdhY2hzZW4gbGl2ZSBtaXQuJyk7CiAgICBoICs9ICc8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPlJlaWhlPC9zcGFuPjxkaXYgY2xhc3M9InNlZyI+JyArCiAgICAgIFsnQScsICdCJywgJ0MnXS5tYXAociA9PiB7IGNvbnN0IG9rID0gcmVpaGVBdmFpbGFibGUodCwgcik7IHJldHVybiBgPGJ1dHRvbiBjbGFzcz0iJHtzdGF0ZS5yZWloZSA9PT0gciA\\\/ICdzZWwnIDogJyd9IiBkYXRhLWFjdD0icmVpaGUiIGRhdGEtaWQ9IiR7cn0iICR7b2sgPyAnJyA6ICdkaXNhYmxlZCd9PiR7ZXNjKChpc0JlbmQodCkgPyB7IEE6J21ldHJpc2NoJywgQjonSVNPL09EJywgQzonWm9sbCcgfSA6IHsgQTonbWV0cmlzY2ggRE4nLCBCOidJU08vT0QnLCBDOidab2xsJyB9KVtyXSl9JHtvayA\\\/ICcnIDogJyDCtyBmZWhsdCd9PC9idXR0b24+YDsgfSkuam9pbignJykgKyAnPC9kaXY+JzsKICAgIGggKz0gJzxkaXYgY2xhc3M9InJvdzIiIHN0eWxlPSJtYXJnaW4tdG9wOjE2cHgiPic7CiAgICBoICs9IGA8ZGl2PjxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCIgc3R5bGU9Im1hcmdpbi10b3A6MCI+JHtlc2MoaXNCZW5kKHQpID8gJ0dyw7bDn2UgKE9EKScgOiAoc3RhdGUucmVpaGUgPT09ICdBJyA\\\/ICdOZW5ud2VpdGUnIDogJ0dyw7bDn2UnKSl9PC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJzZWxlY3Qtd3JhcCI+PHNlbGVjdCBjbGFzcz0ic3oiIGlkPSJ3ei1zaXplIiBkYXRhLXJvbGU9InNpemUiPiR7cnMubWFwKHIgPT4gYDxvcHRpb24gdmFsdWU9IiR7ci5pZH0iICR7c3RhdGUuZ3JvZXNzZSA9PT0gci5pZCA\\\/ICdzZWxlY3RlZCcgOiAnJ30+JHtlc2MobGJsKHIpKX0gwrcg4oyAICR7Zm10TU0ob2RPZihyKSl9IMOXICR7Zm10TU0od2FsbE9mKHIpKX0gbW0ke3Qubm9ybSA9PT0gJ2RpbjMyNjc2JyAmJiByLmZsYW5nZU9EID8gJyDCtyBLbGVtbS3ijIAgJyArIGZtdE1NKHIuZmxhbmdlT0QpIDogJyd9PC9vcHRpb24+YCkuam9pbignJyl9PC9zZWxlY3Q+PC9kaXY+PC9kaXY+YDsKICAgIGlmICh0ICYmIHQuendlaXRlR3JvZXNzZSkgewogICAgICAvLyBSMy0yL1IzLTQ6ICJSZWR1emllcnQgYXVmIiAvICJBYmdhbmciIGJpZXRldCBOVVIgR3LDtsOfZW4ga2xlaW5lciBhbHMgZGllIE5lbm53ZWl0ZSBhbi4KICAgICAgY29uc3QgcnIgPSByb3dzMkZvcihzdGF0ZSksIGZsZCA9IHQuc3ZnVHlwZSA9PT0gJ3JlZHV6aWVydW5nJyA\\\/ICdSZWR1emllcnQgYXVmJyA6ICdBYmdhbmcnOwogICAgICBpZiAocnIubGVuZ3RoKSB7CiAgICAgICAgaCArPSBgPGRpdj48c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiIHN0eWxlPSJtYXJnaW4tdG9wOjAiPiR7ZXNjKGZsZCl9PC9zcGFuPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0LXdyYXAiPjxzZWxlY3QgY2xhc3M9InN6IiBpZD0id3otc2l6ZTIiIGRhdGEtcm9sZT0ic2l6ZTIiPiR7cnIubWFwKHIgPT4gYDxvcHRpb24gdmFsdWU9IiR7ci5pZH0iICR7c3RhdGUuZ3JvZXNzZTIgPT09IHIuaWQgPyAnc2VsZWN0ZWQnIDogJyd9PiR7ZXNjKGxibChyKSl9IMK3IOKMgCAke2ZtdE1NKG9kT2YocikpfSBtbTwvb3B0aW9uPmApLmpvaW4oJycpfTwvc2VsZWN0PjwvZGl2PjwvZGl2PmA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gS2xlaW5zdGUgR3LDtsOfZSBkZXIgUmVpaGUgZ2V3w6RobHQgLT4gZXMgZ2lidCBrZWluZSBrbGVpbmVyZS4gS2VpbiBsZWVyZXMgRHJvcGRvd24sCiAgICAgICAgLy8gc29uZGVybiBlaW4ga2xhcmVyIEhpbndlaXM7IGRpZSBaZWljaG51bmcgemVpZ3Qgc28gbGFuZ2UgZGVuICJmb2xndCItUGxhdHpoYWx0ZXIuCiAgICAgICAgaCArPSBgPGRpdj48c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiIHN0eWxlPSJtYXJnaW4tdG9wOjAiPiR7ZXNjKGZsZCl9PC9zcGFuPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZS1wbGgiPiR7aWMoJ2luZm8nKX08c3Bhbj5Gw7xyIGRpZSBrbGVpbnN0ZSBHcsO2w59lIGRlciBSZWloZSBnaWJ0IGVzIGtlaW5lIGtsZWluZXJlIE5lbm53ZWl0ZS4gV8OkaGxlIGVpbmUgZ3LDtsOfZXJlIE5lbm53ZWl0ZSwgZGFubiBsw6Rzc3Qgc2ljaCDigJ4ke2VzYyhmbGQpfeKAnCBmZXN0bGVnZW4uPC9zcGFuPjwvZGl2PjwvZGl2PmA7CiAgICAgIH0KICAgIH0KICAgIGggKz0gJzwvZGl2Pic7CiAgICBpZiAodCAmJiB0LmxhZW5nZVZhcmlhbnRlKSB7CiAgICAgIGggKz0gJzxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCI+U3R1dHplbmzDpG5nZTwvc3Bhbj48ZGl2IGNsYXNzPSJzZWciPicgKwogICAgICAgIFtbJ0tLJywgJ2t1cnogKEtLKSddLCBbJ0tMJywgJ2xhbmcgKEtMKSddXS5tYXAoKFt2LCBsXSkgPT4gYDxidXR0b24gY2xhc3M9IiR7c3RhdGUubGFlbmdlVmFyaWFudGUgPT09IHYgPyAnc2VsJyA6ICcnfSIgZGF0YS1hY3Q9ImxhZW5nZSIgZGF0YS1pZD0iJHt2fSI+JHtlc2MobCl9PC9idXR0b24+YCkuam9pbignJykgKyAnPC9kaXY+JzsKICAgIH0KICAgIC8vIFRDRCAoZGlja3dhbmRpZyk6IEtFSU5FIEtLL0tMLUF1c3dhaGwgLSBkaWUgWmVpbGVuIHRyYWdlbiBkaWUgZmVzdGUgSG9laGUgaCA9IDYwIG1tCiAgICAvLyAoV2Vpc3MtU3RhbmRhcmQgbGF1dCBCZXJuZCkuIERlciBXZXJ0IGtvbW10IGF1cyBkZXIgVGFiZWxsZSwgbmljaHQgYXVzIGRpZXNlbSBUZXh0LgogICAgLy8gT0ZGRU4gKEJlcm5kKTogb2IgZGVyIEt1bmRlIHZvbiBkZW4gNjAgbW0gYWJ3ZWljaGVuIGRhcmYsIGlzdCBuaWNodCBnZXNhZ3QgLT4gYmlzIHp1cgogICAgLy8gS2xhZXJ1bmcgZmVzdCwgS0VJTkVOIEF1c3dhaGxzY2hhbHRlciBlcmZpbmRlbi4KICAgIGNvbnN0IHJ3TCA9IHQgJiYgIWlzdE51ckZsYW5zY2godCkgJiYgIWlzdE1hc3NlRm9sZ3QodCkgPyByb3dGb3Ioc3RhdGUpIDogbnVsbDsKICAgIGlmIChyd0wgJiYgcndMLmhvZWhlICE9IG51bGwpIHsKICAgICAgaCArPSBgPHNwYW4gY2xhc3M9ImZpZWxkLWxhYmVsIj5Iw7ZoZTwvc3Bhbj48ZGl2IGNsYXNzPSJub3RlLXBsaCI+JHtpYygnaW5mbycpfTxzcGFuPjxiPiR7ZXNjKGZtdE1NKHJ3TC5ob2VoZSkpfSBtbTwvYj4g4oCTIFN0YW5kYXJkaMO2aGUgdm9uIEZpcm1hIFdlaXNzIGbDvHIgZGlja3dhbmRpZ2UgVGFua3N0dXR6ZW4uCiAgICAgICAgQnJhdWNoc3QgZHUgZWluZSBhbmRlcmUgSMO2aGUsIGdpYiBzaWUgYml0dGUgdW50ZXIg4oCeU29uZGVyYWJtZXNzdW5nIGFuZnJhZ2Vu4oCcIGFuLjwvc3Bhbj48L2Rpdj5gOwogICAgfQogICAgaWYgKHQgJiYgdC5pZCA9PT0gJ1RDJykgewogICAgICBoICs9ICc8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPktsYW1tZXIgZGVyIGtvbXBsZXR0ZW4gVmVyYmluZHVuZzwvc3Bhbj48ZGl2IGNsYXNzPSJvcHRzIj4nICsgKEQua2xhbW1lclR5cGVuIHx8IFtdKS5tYXAoayA9PgogICAgICAgIGA8YnV0dG9uIGNsYXNzPSJvcHQgJHtzdGF0ZS5rbGFtbWVyVHlwID09PSBrLmlkID8gJ3NlbCcgOiAnJ30iIGRhdGEtYWN0PSJrbGFtbWVydHlwIiBkYXRhLWlkPSIke2suaWR9Ij48c3BhbiBjbGFzcz0idCI+JHtlc2Moay5sYWJlbCl9PC9zcGFuPjxzcGFuIGNsYXNzPSJkIj4ke2VzYyhrLnN1Yil9PC9zcGFuPjwvYnV0dG9uPmApLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICB9CiAgICBpZiAodCAmJiB0LmV4emVudHJpc2NoV2FobCkgewogICAgICAvLyBSMy0yOiBrb256ZW50cmlzY2ggPSAiRm9ybSBSSyIsIGV4emVudHJpc2NoID0gIkZvcm0gUkUiLgogICAgICBoICs9ICc8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPkJhdWZvcm08L3NwYW4+PGRpdiBjbGFzcz0ic2VnIj4nICsKICAgICAgICBbW2ZhbHNlLCAna29uemVudHJpc2NoIMK3IEZvcm0gUksnXSwgW3RydWUsICdleHplbnRyaXNjaCDCtyBGb3JtIFJFJ11dLm1hcCgoW3YsIGxdKSA9PiBgPGJ1dHRvbiBjbGFzcz0iJHtzdGF0ZS5leHplbnRyaXNjaCA9PT0gdiA\\\/ICdzZWwnIDogJyd9IiBkYXRhLWFjdD0iZXh6IiBkYXRhLWlkPSIke3Z9Ij4ke2VzYyhsKX08L2J1dHRvbj5gKS5qb2luKCcnKSArICc8L2Rpdj4nOwogICAgfQogICAgaWYgKHQgJiYgdC5mb3JtV2FobCkgewogICAgICAvLyBSMy0zL1IzLTQ6IEZvcm0gVCAoYWxsZSBBYmfDpG5nZSBnbGVpY2ggbGFuZykgLyBGb3JtIFRLIChEdXJjaGdhbmcgZ2xlaWNoLCBBYmdhbmcga3VyeikuCiAgICAgIGggKz0gJzxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCI+QmF1Zm9ybTwvc3Bhbj48ZGl2IGNsYXNzPSJzZWciPicgKwogICAgICAgIFtbJ1QnLCAnRm9ybSBUIMK3IEFiZ8OkbmdlIGdsZWljaCBsYW5nJ10sIFsnVEsnLCAnRm9ybSBUSyDCtyBBYmdhbmcga3VyeiddXS5tYXAoKFt2LCBsXSkgPT4gYDxidXR0b24gY2xhc3M9IiR7c3RhdGUuZm9ybVZhcmlhbnRlID09PSB2ID8gJ3NlbCcgOiAnJ30iIGRhdGEtYWN0PSJmb3JtdmFyIiBkYXRhLWlkPSIke3Z9Ij4ke2VzYyhsKX08L2J1dHRvbj5gKS5qb2luKCcnKSArICc8L2Rpdj4nOwogICAgfQogICAgaWYgKGlzQmVuZCh0KSkgaCArPSBgPGRpdiBjbGFzcz0ibm90ZS1vayI+JHtpYygnY2hlY2snLCAnaWMnKX08c3Bhbj5SLCBMMSwgTDIgdW5kIEwzIHN0YW1tZW4gYXVzIGRlciBhdXNnZWbDvGxsdGVuIFdlaXNzLU1hw590YWJlbGxlLiBEaWUgdm9uIEZpcm1hIFdlaXNzIGtvcnJpZ2llcnRlbiBETjI1LVdlcnRlIHNpbmQgZW50aGFsdGVuLjwvc3Bhbj48L2Rpdj5gOwogICAgZWxzZSBpZiAodCAmJiB0LmlkID09PSAnUicpIGggKz0gYDxkaXYgY2xhc3M9Im5vdGUtb2siPiR7aWMoJ2NoZWNrJywgJ2ljJyl9PHNwYW4+RXMgd2VyZGVuIGF1c3NjaGxpZcOfbGljaCBkaWUgNzkgdm9uIEZpcm1hIFdlaXNzIGdlbGllZmVydGVuIEdyw7bDn2VucGFhcmUgdW5kIEwtV2VydGUgYW5nZWJvdGVuLjwvc3Bhbj48L2Rpdj5gOwogICAgZWxzZSBpZiAodCAmJiB0LmlkID09PSAnVFMnKSBoICs9IGA8ZGl2IGNsYXNzPSJub3RlLW9rIj4ke2ljKCdjaGVjaycsICdpYycpfTxzcGFuPkFsbGUgZ2xlaWNod2VpdGVuIFQtU3TDvGNrZSAobWV0cmlzY2gsIElTTyB1bmQgWm9sbCkgc3RhbW1lbiBhdXMgZGVyIGdlbGllZmVydGVuIFdlaXNzLU1hw590YWJlbGxlLiBGb3JtIFRLIMO8YmVybmltbXQgZGVuIEFiZ2FuZyBhdXMgZGVyIFNwYWx0ZSBMMS48L3NwYW4+PC9kaXY+YDsKICAgIGVsc2UgaWYgKHQgJiYgdC5pZCA9PT0gJ1RTUicpIGggKz0gYDxkaXYgY2xhc3M9Im5vdGUtb2siPiR7aWMoJ2NoZWNrJywgJ2ljJyl9PHNwYW4+RXMgd2VyZGVuIGF1c3NjaGxpZcOfbGljaCBkaWUgdm9uIEZpcm1hIFdlaXNzIGdlbGllZmVydGVuIEFiendlaWctS29tYmluYXRpb25lbiBhbmdlYm90ZW4uIEZvcm0gVEsgw7xiZXJuaW1tdCBkZW4gQWJnYW5nIGF1cyBkZXIgU3BhbHRlIEwxLjwvc3Bhbj48L2Rpdj5gOwogICAgaCArPSBgPGJ1dHRvbiBjbGFzcz0ibGlua2J0biIgZGF0YS1hY3Q9InNvbmRlciI+JHtpYygncGx1cycsICdpYycpfSBTb25kZXJhYm1lc3N1bmcgYW5mcmFnZW48L2J1dHRvbj5gOwogICAgcmV0dXJuIGg7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJTdGVwNygpIHsKICAgIGxldCBoID0gaGVhZCgnU2Nocml0dCA3JywgJ05hY2h3ZWlzZSAmIE1lbmdlJywgJ1plcnRpZmlrYXRlIHp1YnVjaGVuIHVuZCBTdMO8Y2t6YWhsIHfDpGhsZW4uIEJlaWRlcyBnZWh0IG1pdCBpbiBkaWUgQW5mcmFnZS4nKTsKICAgIGNvbnN0IHN0ZCA9IEQucHJlaXNlLm5hY2h3ZWlzU3RhbmRhcmQgfHwgW107CiAgICBoICs9ICc8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPk5hY2h3ZWlzZSAvIFplcnRpZmlrYXRlPC9zcGFuPjxkaXYgY2xhc3M9Im9wdHMiPicgKyBELm5hY2h3ZWlzZS5tYXAobncgPT4gewogICAgICBjb25zdCBvbiA9IHN0YXRlLm5hY2h3ZWlzZS5pbmRleE9mKG53LmlkKSA+PSAwLCBpc1N0ZCA9IHN0ZC5pbmRleE9mKG53LmlkKSA+PSAwOwogICAgICAvLyBCZXJuZCBMaW5rZXIsIDAxLjA5LjIwMjY6IEJlaW0gQUQtVzIgc29sbCBpbSBLYWVzdGNoZW4gc3RlaGVuLCBkYXNzIGRlciBBdWZwcmVpcwogICAgICAvLyBqZSBDaGFyZ2UgZ2lsdCB1bmQgbmljaHQgamUgU3R1ZWNrLiBEZXIgQmV0cmFnIGtvbW10IGF1cyBkZW4gUHJlaXNkYXRlbiwgZGFtaXQgZXIKICAgICAgLy8gbmljaHQgZG9wcGVsdCBnZXBmbGVndCB3ZXJkZW4gbXVzcyB1bmQgaW0gVGV4dCBuaWUgdmVyYWx0ZXQuCiAgICAgIGNvbnN0IGNoYXJnZUJldHJhZyA9IGlzdENoYXJnZW5OYWNod2Vpcyhudy5pZCkgPyBjaGFyZ2VuQXVmcHJlaXNGdWVyKG53LmlkKSA6IG51bGw7CiAgICAgIGNvbnN0IGNoYXJnZVplaWxlID0gY2hhcmdlQmV0cmFnICE9IG51bGwKICAgICAgICA\\\/IGA8c3BhbiBjbGFzcz0iZCI+QXVmcHJlaXMgJHtldXIoY2hhcmdlQmV0cmFnKX0g4oKsIGplIENoYXJnZTwvc3Bhbj5gCiAgICAgICAgOiAnJzsKICAgICAgcmV0dXJuIGA8YnV0dG9uIGNsYXNzPSJvcHQgJHtvbiA\\\/ICdzZWwnIDogJyd9ICR7aXNTdGQgPyAnZGlzYWJsZWQnIDogJyd9IiBkYXRhLWFjdD0ibmFjaHdlaXMiIGRhdGEtaWQ9IiR7bncuaWR9IiAke2lzU3RkID8gJ2Rpc2FibGVkJyA6ICcnfT4KICAgICAgICA8c3BhbiBjbGFzcz0idCI+JHtvbiA\\\/IGljKCdjaGVjaycsICdpYycpIDogJyd9JHtlc2MobmFjaHdlaXNMYWJlbChudykpfSR7aXNTdGQgPyAnPHNwYW4gY2xhc3M9ImxvY2siPlN0YW5kYXJkPC9zcGFuPicgOiAnJ308L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImQiPiR7ZXNjKG53LnN1Yil9PC9zcGFuPiR7Y2hhcmdlWmVpbGV9PC9idXR0b24+YDsKICAgIH0pLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICBoICs9IGA8ZGl2IGNsYXNzPSJub3RlLXBsaCI+JHtpYygnaW5mbycpfTxzcGFuPkRhcyBBYm5haG1lcHLDvGZ6ZXVnbmlzIDMuMSBpc3Qga29zdGVubG9zLiAzLjEgbmFjaCBBRC1XMiwgRmVycml0LU1lc3N1bmcgdW5kIFJhLU1lc3Nwcm90b2tvbGwgZ2lidCBlcyBnZWdlbiBNZWhya29zdGVuLjwvc3Bhbj48L2Rpdj5gOwogICAgaCArPSAnPHNwYW4gY2xhc3M9ImZpZWxkLWxhYmVsIj5TdMO8Y2t6YWhsPC9zcGFuPjxkaXYgY2xhc3M9InN0ZXBwZXIiPjxidXR0b24gZGF0YS1hY3Q9Im1lbmdlLSIgYXJpYS1sYWJlbD0id2VuaWdlciI+4oiSPC9idXR0b24+JyArCiAgICAgIGA8aW5wdXQgaWQ9Ind6LW1lbmdlIiBkYXRhLXJvbGU9Im1lbmdlIiBpbnB1dG1vZGU9Im51bWVyaWMiIHZhbHVlPSIke3N0YXRlLm1lbmdlfSIvPmAgKyAnPGJ1dHRvbiBkYXRhLWFjdD0ibWVuZ2UrIiBhcmlhLWxhYmVsPSJtZWhyIj4rPC9idXR0b24+PC9kaXY+JzsKICAgIGggKz0gJzxkaXYgY2xhc3M9InN0YWZmZWwiPicgKyBtZW5nZW5TcHJ1bmdtYXJrZW4oKS5tYXAobSA9PiBgPHNwYW4gY2xhc3M9InMgJHtzdGF0ZS5tZW5nZSA+PSBtID8gJ29uJyA6ICcnfSIgZGF0YS1hY3Q9InN0YWZmZWwiIGRhdGEtYWI9IiR7bX0iPmFiICR7bX08L3NwYW4+YCkuam9pbignJykgKyAnPC9kaXY+JzsKICAgIHJldHVybiBoOwogIH0KCiAgZnVuY3Rpb24gcG9zaXRpb25zRm9yUmZxKCkgewogICAgY29uc3Qgb3V0ID0gc3RhdGUucG9zaXRpb25lbi5zbGljZSgpOwogICAgaWYgKHN0YXRlLnR5cCkgb3V0LnB1c2goc25hcHNob3QoKSk7CiAgICByZXR1cm4gb3V0OwogIH0KCiAgLyogU3VtbWUgdWViZXIgZGllIFBvc2l0aW9uc2xpc3RlLiBBdWZzdW1taWVydCB3aXJkIEFVU1NDSExJRVNTTElDSCB1ZWJlciBQb3NpdGlvbmVuIG1pdAogICAqIGVjaHRlbSBQcmVpcyAobW9kZSAnbGl2ZScsIGtlaW4gUGxhdHpoYWx0ZXIpLiBFaW5lIFBvc2l0aW9uICJhdWYgQW5mcmFnZSIgZGFyZiBuaWVtYWxzCiAgICogc3RpbGxzY2h3ZWlnZW5kIGFscyAwIEVVUiBpbiBlaW5lIFN1bW1lIGxhdWZlbiAtIHNpZSB3aXJkIGdldHJlbm50IGdlemFlaGx0IHVuZCBpbQogICAqIFdhcmVua29yYiB3aWUgaW4gZGVyIEFuZnJhZ2UtTWFpbCBhdXNkcnVlY2tsaWNoIGF1c2dld2llc2VuLiBzdHVlY2sgemFlaGx0IGF1cyBkZW0KICAgKiBnbGVpY2hlbiBHcnVuZCBudXIgZGllIFN0dWVja3phaGxlbiBkZXIgYmVwcmVpc3RlbiBQb3NpdGlvbmVuOiBzb25zdCBzdHVlbmRlIHVlYmVyIGRlcgogICAqIFN1bW1lIGVpbmUgTWVuZ2UsIGRpZSBzaWUgZ2FyIG5pY2h0IGFiZGVja3QuICovCiAgZnVuY3Rpb24gY2FydFN1bW1hcnkocG9zKSB7CiAgICBsZXQgc3VtbWUgPSAwLCBtaXRQcmVpcyA9IDAsIG9obmVQcmVpcyA9IDAsIHN0dWVjayA9IDA7CiAgICAocG9zIHx8IFtdKS5mb3JFYWNoKHBzID0+IHsKICAgICAgY29uc3QgcCA9IHBzLnByaWNlOwogICAgICBpZiAocCAmJiBwLm1vZGUgPT09ICdsaXZlJyAmJiAhcC5wbGF0emhhbHRlcikgeyBzdW1tZSArPSBwLmdlc2FtdDsgbWl0UHJlaXMrKzsgc3R1ZWNrICs9IE51bWJlcihwcy5tZW5nZSkgfHwgMDsgfQogICAgICBlbHNlIG9obmVQcmVpcysrOwogICAgfSk7CiAgICByZXR1cm4geyBzdW1tZSwgbWl0UHJlaXMsIG9obmVQcmVpcywgc3R1ZWNrIH07CiAgfQogIGNvbnN0IHBvc1dvcnQgPSBuID0+IG4gPT09IDEgPyAnUG9zaXRpb24nIDogJ1Bvc2l0aW9uZW4nOwogIGZ1bmN0aW9uIHNuYXBzaG90KCkgewogICAgY29uc3QgcyA9IHN0YXRlLCB0ID0gdHlwT2JqKHMudHlwKSwgcGkgPSBwcmljZUluZm8ocyk7CiAgICByZXR1cm4geyBhbndlbmR1bmc6cy5hbndlbmR1bmcsIHR5cDpzLnR5cCwgbm9ybTpzLm5vcm0sIHJlaWhlOnMucmVpaGUsIGdyb2Vzc2U6cy5ncm9lc3NlLCBncm9lc3NlMjpzLmdyb2Vzc2UyLCBsYWVuZ2VWYXJpYW50ZTpzLmxhZW5nZVZhcmlhbnRlLAogICAgICBjb25uZWN0Tm9ybTpzLmNvbm5lY3ROb3JtLCBjb25uZWN0TGFlbmdlOnMuY29ubmVjdExhZW5nZSwgY29ubmVjdEFuc2NobHVzczpzLmNvbm5lY3RBbnNjaGx1c3MsCiAgICAgIC8vIEZsYW5zY2gtL0tsYW1tZXItQW5nYWJlbiBtaXRzY2huZWlkZW4sIHNvbnN0IGZlaGxlbiBzaWUgaW4gV2FyZW5rb3JiICsgUkZRLU1haWwuCiAgICAgIGZsYW5zY2g6cy5mbGFuc2NoLCBrbGFtbWVyVHlwOnMua2xhbW1lclR5cCwga2xhbW1lcldlcmtzdG9mZjpzLmtsYW1tZXJXZXJrc3RvZmYsIGtsYW1tZXJNdXR0ZXI6cy5rbGFtbWVyTXV0dGVyLAogICAgICBleHplbnRyaXNjaDpzLmV4emVudHJpc2NoLCBmb3JtVmFyaWFudGU6cy5mb3JtVmFyaWFudGUsIHdlcmtzdG9mZjplZmZXZXJrc3RvZmYocyksIG9iZXJmbGFlY2hlOnMub2JlcmZsYWVjaGUsIGRpY2h0dW5nOnQgJiYgdC5kaWNodHVuZyA\\\/IHMuZGljaHR1bmcgOiBudWxsLAogICAgICBuYWNod2Vpc2U6cy5uYWNod2Vpc2Uuc2xpY2UoKSwgbGlwcGU6cy5saXBwZSwgbWVuZ2U6cy5tZW5nZSwgdmlldzpzLnZpZXcsCiAgICAgIGNvZGU6dHlwZWNvZGUocyksIGNvbmZpZ3VyYXRpb25Db2RlOnR5cGVjb2RlKHMpLCBhcnRpY2xlTnVtYmVyOmFydGljbGVOdW1iZXIocyksIHByaWNlOnBpIH07CiAgfQoKICBmdW5jdGlvbiBhZGRQb3NpdGlvbigpIHsKICAgIGlmICghc3RhdGUudHlwKSByZXR1cm47CiAgICBzdGF0ZS5wb3NpdGlvbmVuLnB1c2goc25hcHNob3QoKSk7CiAgICAvLyBEaWUgZ2VzcGVpY2hlcnRlIFBvc2l0aW9uIGJsZWlidCB1bnZlcsOkbmRlcnQuIEbDvHIgZGllIG7DpGNoc3RlIFBvc2l0aW9uIG11c3MKICAgIC8vIGJld3Vzc3QgZWluIG5ldWVzIEJhdXRlaWwgZ2V3w6RobHQgd2VyZGVuLCBkYW1pdCBkZXIgYWt0dWVsbGUgU3RhbmQgbmljaHQgZG9wcGVsdAogICAgLy8gaW4gV2FyZW5rb3JiLCBBbmZyYWdlIG9kZXIgUG9zaXRpb25zbGlua3MgbGFuZGV0LgogICAgc3RhdGUudHlwID0gbnVsbDsgc3RhdGUuZ3JvZXNzZSA9IG51bGw7IHN0YXRlLmdyb2Vzc2UyID0gbnVsbDsKICAgIHN0YXRlLmNvbm5lY3RMYWVuZ2UgPSBudWxsOyBzdGF0ZS5mbGFuc2NoID0gbnVsbDsgc3RhdGUuc3RlcCA9IDM7CiAgICByZW5kZXJBbGwoKTsgc2Nyb2xsVG9wKCk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJTdGVwOCgpIHsKICAgIGNvbnN0IHBvcyA9IHBvc2l0aW9uc0ZvclJmcSgpOwogICAgbGV0IGggPSBoZWFkKCdTY2hyaXR0IDgnLCAnQW5mcmFnZSB6dXNhbW1lbnN0ZWxsZW4nLCAnUHLDvGZlIGRpZSBiZWxlZ3RlbiBBbmdhYmVuIHVuZCBlcmfDpG56ZSBkZWluZW4gS29udGFrdC4gT2ZmZW5lIFdlcnRlIGJsZWliZW4gZGV1dGxpY2ggZ2VrZW5uemVpY2huZXQuJyk7CiAgICBjb25zdCBzdW0gPSBjYXJ0U3VtbWFyeShwb3MpOwogICAgaCArPSAnPGRpdiBjbGFzcz0iY2FydCI+JyArIHBvcy5tYXAoKHBzLCBpKSA9PiB7CiAgICAgIGNvbnN0IHQgPSB0eXBPYmoocHMudHlwKSwgbGl2ZSA9IHBzLnByaWNlLm1vZGUgPT09ICdsaXZlJyAmJiAhcHMucHJpY2UucGxhdHpoYWx0ZXI7CiAgICAgIGNvbnN0IHByID0gbGl2ZSA\\\/IGV1cihwcy5wcmljZS5nZXNhbXQpICsgJyDigqwnIDogJ2F1ZiBBbmZyYWdlJzsKICAgICAgLy8gUmVjaGVud2VnIGRlciBaZWlsZSBvZmZlbmxlZ2VuOiBvaG5lICJTdHVlY2twcmVpcyB4IE1lbmdlIiBpc3QgaW0gV2FyZW5rb3JiIG5pY2h0CiAgICAgIC8vIG5hY2h2b2xsemllaGJhciwgd2llIGRlciBaZWlsZW5iZXRyYWcgenVzdGFuZGUga29tbXQgLSB1bmQgZGllIE1lbmdlbnN0YWZmZWwgd2FlcmUKICAgICAgLy8gdW5zaWNodGJhciBpbiBkZW4gQmV0cmFnIGVpbmdlcmVjaG5ldC4KICAgICAgY29uc3QgcmVjaG51bmcgPSBsaXZlCiAgICAgICAgPyAnIMK3ICcgKyBldXIocHMucHJpY2Uuc3R1ZWNrKSArICcg4oKsIC8gU3TDvGNrJyArIChwcy5wcmljZS5yYWJhdHQgPyAnIMK3IOKIkicgKyBwcy5wcmljZS5yYWJhdHQgKyAnICUgYWIgJyArIHBzLnByaWNlLmFiIDogJycpCiAgICAgICAgICArIChwcy5wcmljZS5jaGFyZ2VBdWZwcmVpcyA\\\/ICcgwrcgcGx1cyAnICsgZXVyKHBzLnByaWNlLmNoYXJnZUF1ZnByZWlzKSArICcg4oKsIGplIENoYXJnZScgOiAnJykKICAgICAgICA6ICcnOwogICAgICBjb25zdCBkZWxCdG4gPSBpIDwgc3RhdGUucG9zaXRpb25lbi5sZW5ndGggPyBgPGJ1dHRvbiBjbGFzcz0iZGVsIiBkYXRhLWFjdD0iZGVscG9zIiBkYXRhLWk9IiR7aX0iIGFyaWEtbGFiZWw9ImVudGZlcm5lbiI+w5c8L2J1dHRvbj5gIDogJyc7CiAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iY2kiPjxkaXY+PGRpdiBjbGFzcz0iY29kZSI+JHtlc2MocHMuY29kZSl9PC9kaXY+PGRpdiBjbGFzcz0ibWV0YSI+JHtlc2ModCA\\\/IHQubGFiZWwgOiAnJyl9IMK3ICR7ZXNjKHBzLm1lbmdlKX0gU3TDvGNrJHtlc2MocmVjaG51bmcpfTwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InByIj4ke2VzYyhwcil9PC9kaXY+JHtkZWxCdG59PC9kaXY+YDsKICAgIH0pLmpvaW4oJycpCiAgICAvLyBPaG5lIGVpbmUgZWluemlnZSBiZXByZWlzdGUgUG9zaXRpb24gKG9lZmZlbnRsaWNoZSBTZWl0ZSBvaG5lIFByZWlzZnJlaWdhYmUsIERJTiAxMTg2NSwKICAgIC8vIFBsYXR6aGFsdGVyLU1vZHVzKSBlbnRmYWVsbHQgZGVyIFN1bW1lbmJsb2NrIGtvbXBsZXR0IC0gZG9ydCBnYWViZSBlcyBuaWNodHMgenUgc3VtbWllcmVuCiAgICAvLyB1bmQgIkdlc2FtdCAwLDAwIOKCrCIgd2FlcmUgc2NobGljaHQgZmFsc2NoLgogICAgKyAoc3VtLm1pdFByZWlzID8gYDxkaXYgY2xhc3M9InN1bSI+CiAgICAgICR7c3VtLm9obmVQcmVpcyA\\\/IGA8ZGl2IGNsYXNzPSJzciBvcGVuIj4ke2ljKCdpbmZvJyl9PHNwYW4+JHtzdW0ub2huZVByZWlzfSAke3Bvc1dvcnQoc3VtLm9obmVQcmVpcyl9IGF1ZiBBbmZyYWdlIOKAlCBuaWNodCBpbiBkZXIgU3VtbWUgZW50aGFsdGVuPC9zcGFuPjwvZGl2PmAgOiAnJ30KICAgICAgPGRpdiBjbGFzcz0ic3IgdG90Ij48ZGl2PjxkaXYgY2xhc3M9InQiPkdlc2FtdDwvZGl2PjxkaXYgY2xhc3M9InMiPiR7c3VtLm1pdFByZWlzfSAke3Bvc1dvcnQoc3VtLm1pdFByZWlzKX0gwrcgJHtzdW0uc3R1ZWNrfSBTdMO8Y2s8L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJ2IG1vbm8iPiR7ZXVyKHN1bS5zdW1tZSl9IOKCrDwvZGl2PjwvZGl2PgogICAgPC9kaXY+YCA6ICcnKSArICc8L2Rpdj4nOwogICAgaCArPSBgPGJ1dHRvbiBjbGFzcz0ibGlua2J0biIgZGF0YS1hY3Q9ImFkZHBvcyI+JHtpYygncGx1cycsICdpYycpfSBXZWl0ZXJlIFBvc2l0aW9uIGhpbnp1ZsO8Z2VuPC9idXR0b24+YDsKICAgIGggKz0gYDxmb3JtIGlkPSJ3ei1mb3JtIiBjbGFzcz0iZm9ybSIgbm92YWxpZGF0ZT4KICAgICAgPGRpdiBjbGFzcz0iZmxkIj48bGFiZWw+RmlybWEgPHNwYW4gY2xhc3M9InJlcSI+Kjwvc3Bhbj48L2xhYmVsPjxpbnB1dCBkYXRhLWs9ImZpcm1hIiB2YWx1ZT0iJHtlc2Moc3RhdGUua29udGFrdC5maXJtYSl9IiBhdXRvY29tcGxldGU9Im9yZ2FuaXphdGlvbiIvPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmbGQiPjxsYWJlbD5BbnNwcmVjaHBhcnRuZXIgPHNwYW4gY2xhc3M9InJlcSI+Kjwvc3Bhbj48L2xhYmVsPjxpbnB1dCBkYXRhLWs9Im5hbWUiIHZhbHVlPSIke2VzYyhzdGF0ZS5rb250YWt0Lm5hbWUpfSIgYXV0b2NvbXBsZXRlPSJuYW1lIi8+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZsZCI+PGxhYmVsPkUtTWFpbCA8c3BhbiBjbGFzcz0icmVxIj4qPC9zcGFuPjwvbGFiZWw+PGlucHV0IGRhdGEtaz0iZW1haWwiIHR5cGU9ImVtYWlsIiB2YWx1ZT0iJHtlc2Moc3RhdGUua29udGFrdC5lbWFpbCl9IiBhdXRvY29tcGxldGU9ImVtYWlsIi8+PHNwYW4gY2xhc3M9ImVycm1zZyIgaWQ9Ind6LWVyci1lbWFpbCI+PC9zcGFuPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmbGQiPjxsYWJlbD5UZWxlZm9uPC9sYWJlbD48aW5wdXQgZGF0YS1rPSJ0ZWxlZm9uIiB0eXBlPSJ0ZWwiIHZhbHVlPSIke2VzYyhzdGF0ZS5rb250YWt0LnRlbGVmb24pfSIgYXV0b2NvbXBsZXRlPSJ0ZWwiLz48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZmxkIGZ1bGwiPjxsYWJlbD5XdW5zY2h0ZXJtaW4gLyBQcm9qZWt0IChvcHRpb25hbCk8L2xhYmVsPjxpbnB1dCBkYXRhLWs9InRlcm1pbiIgdmFsdWU9IiR7ZXNjKHN0YXRlLmtvbnRha3QudGVybWluKX0iLz48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZmxkIGZ1bGwiPjxsYWJlbD5Tb25kZXJhbmZvcmRlcnVuZ2VuIChvcHRpb25hbCk8L2xhYmVsPjx0ZXh0YXJlYSBkYXRhLWs9ImZyZWl0ZXh0IiBwbGFjZWhvbGRlcj0iei4gQi4gYmVzb25kZXJlIFRvbGVyYW56ZW4sIHdlaXRlcmUgWmVydGlmaWthdGUsIExpZWZlcmJlZGluZ3VuZ2VuIj4ke2VzYyhzdGF0ZS5rb250YWt0LmZyZWl0ZXh0KX08L3RleHRhcmVhPjwvZGl2PgogICAgPC9mb3JtPmA7CiAgICAvLyBEaWUgUGxhbnNraXp6ZSB3aXJkIGF1cyBkZXIgTGl2ZS1aZWljaG51bmcgZGVzIGFrdHVlbGxlbiBTdGFuZGVzIGdlYmF1dC4gRnVlciBkaWUKICAgIC8vIG51ckZsYW5zY2gtVHlwZW4gKEJsaW5kZGVja2VsL0tsYW1tZXIsIEFic2Nobml0dCBEKSBnaWJ0IGVzIG5vY2gga2VpbmUgYmVtYXNzdGUKICAgIC8vIFplaWNobnVuZyAtPiBidWlsZERhdGFzaGVldCgpIGhhZXR0ZSBuaWNodHMgenUgcmVuZGVybiB1bmQgZGVyIEJ1dHRvbiBsaWVmZSBpbnMKICAgIC8vIExlZXJlLiBEZXNoYWxiIG51ciBhbmJpZXRlbiwgd2VubiB3aXJrbGljaCBlaW5lIFplaWNobnVuZyBleGlzdGllcnQuCiAgICBjb25zdCBoYXRTa2l6emUgPSAhIShzdGF0ZS50eXAgJiYgcGFyYW1zRm9yKHN0YXRlKSk7CiAgICBoICs9IGA8ZGl2IGNsYXNzPSJuYXYiIHN0eWxlPSJwb3NpdGlvbjpzdGF0aWM7Ym94LXNoYWRvdzpub25lO2JvcmRlcjpub25lO3BhZGRpbmc6MDttYXJnaW4tdG9wOjZweCI+CiAgICAgICR7aGF0U2tpenplID8gYDxidXR0b24gY2xhc3M9ImJ0biBnaG9zdCIgZGF0YS1hY3Q9InBkZiI+JHtpYygncGRmJywgJ2ljJyl9IFBsYW5za2l6emUgYWxzIFBERjwvYnV0dG9uPmAgOiAnJ30KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGdob3N0IiBkYXRhLWFjdD0ic2hhcmUiPiR7aWMoJ3NoYXJlJywgJ2ljJyl9ICR7cG9zLmxlbmd0aCA+IDEgPyAnUG9zaXRpb25zbGlua3Mga29waWVyZW4nIDogJ0tvbmZpZ3VyYXRpb24gdGVpbGVuJ308L2J1dHRvbj48L2Rpdj4KICAgICR7aGF0U2tpenplID8gJzxwIGNsYXNzPSJoZWxwZXIiPlRpcHA6IExhZGUgZGllIFBsYW5za2l6emUgYWxzIFBERiBoZXJ1bnRlciB1bmQgaMOkbmcgc2llIGRlaW5lciBBbmZyYWdlLU1haWwgYW4g4oCUIEZpcm1hIFdlaXNzIGJla29tbXQgZGFtaXQgZGlyZWt0IGRpZSBmZXJ0aWdlIFNraXp6ZSBtaXQgYWxsZW4gTWHDn2VuLjwvcD4nIDogJyd9YDsKICAgIC8vIERlciBTYXR6ICJNYcOfZSBESU4gMzI2NzYgLi4uIHNpbmQgZmluYWwiIGdpbHQgTklDSFQsIHNvYmFsZCBlaW5lIFBvc2l0aW9uIGVpbmVuCiAgICAvLyBtYXNzZUZvbGd0LVR5cCAoQ0YvQ0ZJKSBlbnRoYWVsdCAtIGZ1ZXIgZGllIGdpYnQgZXMgdWViZXJoYXVwdCBrZWluZSBNYXNzZS4gU29uc3QKICAgIC8vIHN0dWVuZGUgaGllciAiZmluYWwiIHVuZCB6d2VpIFplbnRpbWV0ZXIgd2VpdGVyIG9iZW4gIk1hw59lIGZvbGdlbiIuIERlc2hhbGIgZGVuCiAgICAvLyBVbWZhbmcgZGVyIEZpbmFsLUF1c3NhZ2UgYW4gZGVuIHRhdHNhZWNobGljaGVuIFBvc2l0aW9uZW4gYXVzcmljaHRlbi4KICAgIC8vIFNvYmFsZCBvYmVuIGVpbiBHZXNhbXRiZXRyYWcgc3RlaHQsIGRhcmYgaGllciBuaWNodCBtZWhyICJQcmVpc2Ugd2VyZGVuIGluZGl2aWR1ZWxsCiAgICAvLyBhbmdlYm90ZW4iIHN0ZWhlbiAtIGRhcyB3aWRlcnNwcmFlY2hlIGRlciBTdW1tZSB6d2VpIFplbnRpbWV0ZXIgZGFydWViZXIuIERlciBTYXR6CiAgICAvLyBibGVpYnQgbnVyIGZ1ZXIgZGVuIEZhbGwgb2huZSBqZWRlbiBiZWxlZ3RlbiBQcmVpcy4KICAgIGggKz0gYDxkaXYgY2xhc3M9Im5vdGUtcGxoIj4ke2ljKCdpbmZvJyl9PHNwYW4+JHtzdW0ubWl0UHJlaXMKICAgICAgPyAnRGllIGdlemVpZ3RlbiBCZXRyw6RnZSBzdGFtbWVuIGF1cyBkZXIgaGludGVybGVndGVuIFByZWlzbGlzdGUgdm9uIEZpcm1hIFdlaXNzIHVuZCB3ZXJkZW4gbWl0IGRlbSBBbmdlYm90IHZlcmJpbmRsaWNoLicKICAgICAgOiAnUHJlaXNlIHdlcmRlbiBpbmRpdmlkdWVsbCBhbmdlYm90ZW4uJ30gTmljaHQgYmVsZWd0ZSBNYcOfZSBvZGVyIEFydGlrZWxudW1tZXJuIGVyZ8Okbnp0IEZpcm1hIFdlaXNzIGltIEFuZ2Vib3Q7IHdpZGVyc3Byw7xjaGxpY2hlIG9kZXIgbmljaHQgZ2VsaWVmZXJ0ZSBCZXJlaWNoZSBibGVpYmVuIGdlc3BlcnJ0IHVuZCB3ZXJkZW4gbmljaHQgZ2VzY2jDpHR6dC48L3NwYW4+PC9kaXY+YDsKICAgIHJldHVybiBoOwogIH0KCiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcmV2aWV3ICovCiAgbGV0IHByaWNlQ3VyID0gbnVsbCwgcHJpY2VSQUYgPSBudWxsOwogIGZ1bmN0aW9uIGFuaW1hdGVQcmljZShlbCwgdG8pIHsKICAgIGlmICghZWwpIHJldHVybjsgY2FuY2VsQW5pbWF0aW9uRnJhbWUocHJpY2VSQUYpOwogICAgLy8gQmVpbSBlcnN0ZW4gUmVuZGVybiBkZW4gZWNodGVuIEJldHJhZyBzb2ZvcnQgYW56ZWlnZW4uIHJlcXVlc3RBbmltYXRpb25GcmFtZQogICAgLy8gd2lyZCBpbiBub2NoIG5pY2h0IHNpY2h0YmFyZW4gaUZyYW1lcyBnZWRyb3NzZWx0OyBtaXQgU3RhcnR3ZXJ0IDAsMDAgc3RhbmQKICAgIC8vIHNvbnN0IGltIHp3ZWl0ZW4gUHJlaXNiZXJlaWNoIHZvciBkZW0gU2Nyb2xsZW4gZWluIGZhbHNjaGVyIFN0w7xja3ByZWlzLgogICAgaWYgKHByaWNlQ3VyID09IG51bGwpIHsKICAgICAgZWwudGV4dENvbnRlbnQgPSBldXIodG8pOwogICAgICBwcmljZUN1ciA9IHRvOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBmcm9tID0gcHJpY2VDdXIsIHQwID0gcGVyZm9ybWFuY2Uubm93KCksIGR1ciA9IDM4MDsKICAgIChmdW5jdGlvbiB0aWNrKHQpIHsKICAgICAgY29uc3QgayA9IE1hdGgubWluKDEsICh0IC0gdDApIC8gZHVyKSwgZSA9IDEgLSBNYXRoLnBvdygxIC0gaywgMyksIHYgPSBmcm9tICsgKHRvIC0gZnJvbSkgKiBlOwogICAgICBlbC50ZXh0Q29udGVudCA9IGV1cih2KTsKICAgICAgaWYgKGsgPCAxKSBwcmljZVJBRiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsgZWxzZSBwcmljZUN1ciA9IHRvOwogICAgfSkodDApOwogIH0KCiAgLyogIlplaWNobnVuZyBmb2xndCItS2FydGUgZnVlciBhbGxlIFR5cGVuIG9obmUgKHZvbGxzdGFlbmRpZ2UpIE1hc3NxdWVsbGUuCiAgICogWndlaSBGYWVsbGUsIGJld3Vzc3QgZ2V0cmVubnQ6CiAgICogIGEpIG51ckZsYW5zY2ggKEJsaW5kZGVja2VsL0tsYW1tZXIsIEFic2Nobml0dCBEKTogRGVyIEZsYW5zY2gtw5ggSVNUIGJlbGVndCwgZGVyIFJlc3QKICAgKiAgICAgZmVobHQgLT4gS2FydGUgemVpZ3QgZGVuIEZsYW5zY2gtw5ggKyB3YXMgc29uc3QgZ2VzaWNoZXJ0IGlzdCwgYWxsZXMgYW5kZXJlICJmb2xndCIuCiAgICogIGIpIG1hc3NlRm9sZ3QgKENGL0NGSSwgQWJzY2huaXR0IEcpOiBFcyBpc3QgR0FSIE5JQ0hUUyBiZWxlZ3QgLSBrZWluIEZsYW5zY2gtw5gsIGtlaW5lCiAgICogICAgIE5lbm53ZWl0ZS4gRGVzaGFsYiBoaWVyIEtFSU4gZmxhbnNjaEZvcigpOiBkYXMgd3VlcmRlIHN0dW1wZiBkaWUgZXJzdGUgRmxhbnNjaC0KICAgKiAgICAgZ3JvZXNzZSAo4oyAMjUpIGF1cyBkZXIgTGlzdGUgemllaGVuIHVuZCBhbHMgQ0YtTWFzcyBhbnplaWdlbi4gR2V6ZWlndCB3aXJkIG51ciwgd2FzCiAgICogICAgIGRlciBLdW5kZSBzZWxic3QgZ2V3YWVobHQgaGF0IChXZXJrc3RvZmYvT2JlcmZsYWVjaGUvRGljaHR1bmcpLgogICAqIEluIGJlaWRlbiBGYWVsbGVuIGJld3Vzc3QgS0VJTkUgU1ZHLVplaWNobnVuZzogZHJhdy5qcyB3dWVyZGUgb2huZSBNYXNzZSBzdGlsbCBhdWYgc2VpbmUKICAgKiBEZWZhdWx0cyAo4oyAMjUgLyBzMSw1IC8gTDEwMCkgenVydWVja2ZhbGxlbiB1bmQgZGVtIEt1bmRlbiBlcmZ1bmRlbmUgTWFzc2UgemVpZ2VuLiAqLwogIGZ1bmN0aW9uIHplaWNobnVuZ0ZvbGd0Q2FyZCh0KSB7CiAgICBjb25zdCBtYXNzZUZvbGd0ID0gaXN0TWFzc2VGb2xndCh0KTsKICAgIC8vIEVpbmVuIEZsYW5zY2gtw5ggZ2lidCBlcyBOVVIgYmVpIGRlbiBudXJGbGFuc2NoLVR5cGVuIChCbGluZGRlY2tlbC9LbGFtbWVyKS4gRnVlciBkaWUKICAgIC8vIFJlZHV6aWVydW5nIChOYWNocHJ1ZWYtQmVmdW5kIGEpIHdhZXJlIGZsYW5zY2hGb3Ioc3RhdGUpIGRpZSBlcnN0ZSBGbGFuc2NoZ3JvZXNzZSBkZXIKICAgIC8vIExpc3RlICjijIAyNSkgLSBlaW4gZXJmdW5kZW5lcyBNYXNzLiBEZXNoYWxiIGhpZXIgZ2V6aWVsdCBudXIgYmVpIG51ckZsYW5zY2ggemllaGVuLgogICAgY29uc3QgZiA9IGlzdE51ckZsYW5zY2godCkgPyBmbGFuc2NoRm9yKHN0YXRlKSA6IG51bGw7CiAgICBjb25zdCByb3dzID0gW107CiAgICBpZiAoZikgcm93cy5wdXNoKFsnRmxhbnNjaC3ijIAnLCBmLmxhYmVsICsgJyBtbSddKTsKICAgIGlmIChpc3RLbGFtbWVyKHQpKSB7CiAgICAgIGNvbnN0IGt0ID0ga2xhbW1lclR5cE9iaihzdGF0ZS5rbGFtbWVyVHlwKTsgaWYgKGt0KSByb3dzLnB1c2goWydLbGFtbWVydHlwJywga3QubGFiZWwgKyAnIOKAkyAnICsga3Quc3ViXSk7CiAgICAgIGlmIChmICYmIGYua2xhbW1lckEpIHJvd3MucHVzaChbJ01hw58gQScsIGYua2xhbW1lckFbc3RhdGUua2xhbW1lclR5cF0gPT0gbnVsbCA\\\/ICdhdWYgQW5mcmFnZScgOiBmbXRNTShmLmtsYW1tZXJBW3N0YXRlLmtsYW1tZXJUeXBdKSArICcgbW0nXSk7CiAgICAgIGNvbnN0IG11ID0gKEQua2xhbW1lck11dHRlcm4gfHwgW10pLmZpbmQobSA9PiBtLmlkID09PSBzdGF0ZS5rbGFtbWVyTXV0dGVyKTsgaWYgKG11KSByb3dzLnB1c2goWydNdXR0ZXInLCBtdS5sYWJlbF0pOwogICAgfQogICAgLy8gRGVja2Vsc3RhZXJrZSBMIGlzdCBzZWl0IFJ1bmRlIDUgYmVsZWd0OiBEaWUgV2VydGUgaW4gZGF0YS5qcyAoQkxJTkRERUNLRUxfTCkKICAgIC8vIHN0YW1tZW4gYXVzIGRlciBXZWlzcy1EYXRlaSAiTWFzc2UgS2xlbW1lbiwgQmxpbmRkZWNrZWwueGxzeCIgKDIyLjA3LjIwMjYpIHVuZAogICAgLy8gZHVlcmZlbiBkZW0gS3VuZGVuIGdlemVpZ3Qgd2VyZGVuLiBudWxsIChGbGFuc2NoIDI4NiwxLzMxOS8zMzgpIGJlZGV1dGV0CiAgICAvLyAiYXVmIEFuZnJhZ2UiIC0gZGVyIG51bGwtRmFsbCBzdGV1ZXJ0IGF1Y2ggaW4gcmVuZGVyU3RlcDRGbGFuc2NoIGRpZSBLZW5uemVpY2hudW5nCiAgICAvLyAid2VpdGVyZSBNYcOfZSBmb2xnZW4iLgogICAgaWYgKHQuc3ZnVHlwZSA9PT0gJ2JsaW5kZGVja2VsJykgcm93cy5wdXNoKFsnRGVja2Vsc3TDpHJrZSBMJywgZiAmJiBmLmJsaW5kVGhrICE9IG51bGwgPyBmbXRNTShmLmJsaW5kVGhrKSArICcgbW0nIDogJ2F1ZiBBbmZyYWdlJ10pOwogICAgLy8gUmVkdXppZXJ1bmcgb2huZSB6d2VpdGVuIMOYIChOYWNocHJ1ZWYtQmVmdW5kIGEpOiBkZXIgRVJTVEUgw5ggaXN0IGJlbGVndCAocmVpaGUrZ3JvZXNzZSksCiAgICAvLyBudXIgZGVyIMOYLCBhdWYgZGVuIHJlZHV6aWVydCB3aXJkLCBmZWhsdC4gRWhybGljaCB6ZWlnZW4sIHdhcyBkYSBpc3QgLSBkZXIgendlaXRlIMOYCiAgICAvLyBzdGVodCBhdWYgImZvbGd0Iiwgc3RhdHQgaWhuIGF1cyBkZW0gRmFrdG9yIDAuNjYgenUgZXJmaW5kZW4uCiAgICBpZiAodC5zdmdUeXBlID09PSAncmVkdXppZXJ1bmcnKSB7CiAgICAgIGNvbnN0IHJ3UiA9IHJvd0ZvcihzdGF0ZSk7CiAgICAgIGlmIChyd1IpIHJvd3MucHVzaChbJ1JlZHV6aWVydCB2b24nLCBsYmwocndSKSArICcgwrcg4oyAICcgKyBmbXRNTShvZE9mKHJ3UikpICsgJyBtbSddKTsKICAgICAgcm93cy5wdXNoKFsnUmVkdXppZXJ0IGF1ZicsICdmb2xndCddKTsKICAgIH0KICAgIGlmIChpc3RGb3JtT2huZU1hc3NlKHN0YXRlKSkgcm93cy5wdXNoKFsnQmF1Zm9ybScsICdGb3JtIFRLIMK3IEwxIG5pY2h0IGJlbWHDn3QnXSk7CiAgICAvLyBEaWNodHVuZ3MtQXXDn2VuLeKMgCBoYWVuZ3QgYW0gRmxhbnNjaC3DmC4gQmVpIG1hc3NlRm9sZ3QgZ2lidCBlcyBrZWluZW4gLT4gWmVpbGUgd2VnbGFzc2VuLAogICAgLy8gc3RhdHQgZWluICJmb2xndCIgenUgemVpZ2VuLCBkYXMgc28gdHV0LCBhbHMgc2VpIGRpZSBHcm9lc3NlIHNjaG9uIGVpbmdlZ3Jlbnp0LgogICAgaWYgKHQuZGljaHR1bmcgJiYgIW1hc3NlRm9sZ3QpIHJvd3MucHVzaChbJ0RpY2h0dW5ncy1BdcOfZW4t4oyAJywgZiAmJiBmLmdhc2tldE9EICE9IG51bGwgPyBmbXRNTShmLmdhc2tldE9EKSArICcgbW0nIDogJ2ZvbGd0J10pOwogICAgaWYgKG1hc3NlRm9sZ3QpIHJvd3MucHVzaChbJ01hw59lJywgJ2ZvbGdlbiddKTsKICAgIC8vIEJlaW0gQmF1dGVpbCAiRGljaHR1bmciIGdpYnQgZXMga2VpbmVuIEVkZWxzdGFobC1XZXJrc3RvZmYgKEJlcm5kIDExLjA4LjIwMjYpIC0KICAgIC8vIGRvcnQgc3RlaHQgc3RhdHRkZXNzZW4gZGVyIERpY2h0dW5nc3dlcmtzdG9mZi4KICAgIGlmIChpc3REaWNodHVuZ0JhdXRlaWwodCkpIHsKICAgICAgY29uc3QgZEQgPSBkaWNodE9iaihzdGF0ZS5kaWNodHVuZyk7CiAgICAgIGlmIChkRCkgcm93cy5wdXNoKFsnRGljaHR1bmcnLCBkRC5sYWJlbF0pOwogICAgfSBlbHNlIHsKICAgICAgcm93cy5wdXNoKFsnV2Vya3N0b2ZmJywgZWZmV2Vya3N0b2ZmKHN0YXRlKSB8fCAnZm9sZ3QnXSk7CiAgICB9CiAgICBjb25zdCBsaSA9IHJvd3MubWFwKChbaywgdl0pID0+IGA8ZGl2IGNsYXNzPSJjaGlwIj48Yj4ke2VzYyhrKX08L2I+JHtlc2Modil9PC9kaXY+YCkuam9pbignJyk7CiAgICBjb25zdCBoaW50ID0gbWFzc2VGb2xndAogICAgICA\\\/IGA8Yj5NYcOfZSB1bmQgWmVpY2hudW5nIGZvbGdlbi48L2I+IEbDvHIgJHtlc2ModC5sYWJlbCl9IGxpZWd0IHVucyBub2NoIGtlaW4gZnJlaWdlZ2ViZW5lcwogICAgICAgICBEYXRlbmJsYXR0IHZvbiBGaXJtYSBXZWlzcyB2b3IuIFNvYmFsZCBlcyBkYSBpc3QsIMO8YmVybmVobWVuIHdpciBkaWUgTWHDn2UgMToxIHVuZCBkaWUgWmVpY2hudW5nCiAgICAgICAgIGJhdXQgc2ljaCBoaWVyIGF1ZiDigJMgYmlzIGRhaGluIHplaWdlbiB3aXIgbGllYmVyIG5pY2h0cyBhbHMgZ2VzY2jDpHR6dGUgTWHDn2UuYAogICAgICA6IGlzdE51ckZsYW5zY2godCkKICAgICAgLy8gRGllc2UgS2FydGUgZXJzY2hlaW50IG51ciwgd2VubiBwYXJhbXNGb3IoKSBrZWluIGJlbGVndGVzIE1hc3MgZ2VmdW5kZW4gaGF0LgogICAgICAvLyBTZWl0IGRlbSBCbGluZGRlY2tlbC1OYWNodHJhZyB2b20gMjcuMDcuMjAyNiB0cmFlZ3QgamVkZXIgRmxhbnNjaC3DmCBlaW5lCiAgICAgIC8vIERlY2tlbHN0YWVya2UgTCwgdW5kIHNlaXQgQmVybmRzIE5hY2h0cmFnIHZvbSAxMS4wOC4yMDI2ICgyODYsMSAvIDMxOSAvIDMzOCkKICAgICAgLy8gYXVjaCBqZWRlciBlaW4gTWFzcyBBLiBGdWVyIGRpZSBudXJGbGFuc2NoLVR5cGVuIGdyZWlmdCBkaWUgS2FydGUgZGFtaXQKICAgICAgLy8gYWt0dWVsbCBuaXJnZW5kcyBtZWhyIC0gZGVyIFRleHQgYmxlaWJ0IGFscyBOZXR6IGZ1ZXIga3VlbmZ0aWdlIEdyb2Vzc2VuCiAgICAgIC8vIHN0ZWhlbiwgbmVubnQgYWJlciBrZWluZSBrb25rcmV0ZW4gRmxhbnNjaC3DmCBtZWhyLCBkaWUgbGFlbmdzdCBiZWxlZ3Qgc2luZC4KICAgICAgPyAoaXN0S2xhbW1lcih0KQogICAgICAgID8gYDxiPktsYW1tZXIgaW4gZGllc2VyIEdyw7bDn2Ugbm9jaCBuaWNodCBiZW1hw590LjwvYj4gRsO8ciBGbGFuc2NoLeKMgAogICAgICAgICAgICR7ZXNjKGYgPyBmLmxhYmVsIDogJycpfSBtbSBsaWVndCB1bnMgZsO8ciBkaWUgS2xhbW1lcm4ga2VpbiBNYcOfIEEgdm9yIOKAkwogICAgICAgICAgIGRvcnQgYmxlaWJlbiBkaWUgTWHDn2UgYXVmIEFuZnJhZ2UuIEFuZnJhZ2VuIGzDpHNzdCBzaWNoIGRpZSBHcsO2w59lIHRyb3R6ZGVtLmAKICAgICAgICA6IGA8Yj5NYcOfZSBmb2xnZW4uPC9iPiBGw7xyIEZsYW5zY2gt4oyAICR7ZXNjKGYgPyBmLmxhYmVsIDogJycpfSBtbSBsaWVndCB1bnMgYmlzaGVyIG51ciBkZXIKICAgICAgICAgICBGbGFuc2NoLUR1cmNobWVzc2VyIHZvciDigJMgZGllIMO8YnJpZ2VuIE1hw59lIHJlaWNodCBGaXJtYSBXZWlzcyBuYWNoLmApCiAgICAgIDogaXN0Rm9ybU9obmVNYXNzZShzdGF0ZSkKICAgICAgPyBgPGI+Rm9ybSBUSyBpc3QgaW4gZGllc2VyIEdyw7bDn2Ugbm9jaCBvZmZlbi48L2I+IEluIGRlciBXZWlzcy1NYcOfdGFiZWxsZSBzdGVodCBiZWkKICAgICAgICAgTDEgZsO8ciBkaWVzZSBHcsO2w59lIGVpbiBTdHJpY2gsIGRhcmF1cyBsw6Rzc3Qgc2ljaCBkZXIga3VyemUgQWJnYW5nIG5pY2h0IGJlbWHDn2VuLgogICAgICAgICBXw6RobGUgRm9ybSBUIOKAkyBvZGVyIGZyYWcgZGVuIEFiZ2FuZyDDvGJlciDigJ5Tb25kZXJhYm1lc3N1bmcgYW5mcmFnZW7igJwgYW4uYAogICAgICA6IGA8Yj5ad2VpdGVyIER1cmNobWVzc2VyIGZlaGx0LjwvYj4gRsO8ciBkaWUgJHtlc2ModC5sYWJlbCl9IGlzdCBub2NoIG5pY2h0IGdld8OkaGx0LCBhdWYKICAgICAgICAgd2VsY2hlIEdyw7bDn2UgcmVkdXppZXJ0IHdpcmQuIFNvYmFsZCBkZXIgendlaXRlIER1cmNobWVzc2VyIGZlc3RzdGVodCwgYmF1dCBzaWNoIGRpZQogICAgICAgICBiZW1hw590ZSBaZWljaG51bmcgaGllciBhdWYg4oCTIGJpcyBkYWhpbiB6ZWlnZW4gd2lyIGxpZWJlciBuaWNodHMgYWxzIGVpbmUgZ2VzY2jDpHR6dGUgWmFobC5gOwogICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJwdi1oZWFkIj48c3BhbiBjbGFzcz0ibGJsIj5Wb3JzY2hhdTwvc3Bhbj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icHYtc3RhZ2UgcHYtc2FtcGxlIiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2dhcDoxNHB4O3BhZGRpbmc6MjRweCI+CiAgICAgICAgPGRpdiBjbGFzcz0icHYtY2hpcHMiIHN0eWxlPSJqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIj4ke2xpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InB2LXNhbXBsZS1oaW50Ij4ke2ljKCdkcmF3JywgJ2ljJyl9PHNwYW4+JHtoaW50fTwvc3Bhbj48L2Rpdj4KICAgICAgPC9kaXY+YDsKICB9CgogIGZ1bmN0aW9uIHJlbmRlclByZXZpZXcoKSB7CiAgICBjb25zdCBib3ggPSAkKCcjd3otcHJldmlldycpOwogICAgY29uc3QgdCA9IHR5cE9iaihzdGF0ZS50eXApOwogICAgY29uc3QgcCA9IHN0YXRlLnR5cCA\\\/IHBhcmFtc0ZvcihzdGF0ZSkgOiBudWxsOwogICAgY29uc3QgcGkgPSBwcmljZUluZm8oc3RhdGUpOwogICAgbGV0IHN0YWdlOwogICAgLy8gbWFzc2VGb2xndCAoQ0YvQ0ZJKSBNVVNTIGhpZXIgbWl0IHJlaW46IHBhcmFtc0ZvcigpIGxpZWZlcnQgbnVsbCwgc29uc3QgbGllZmUgZGllCiAgICAvLyBWb3JzY2hhdSBpbiBkZW4gZWxzZS1ad2VpZyB1bnRlbiB1bmQgd3VlcmRlIGRpZSAiQmVpc3BpZWwtRGFyc3RlbGx1bmciIHJlbmRlcm4gLQogICAgLy8gZWluIGZlcnRpZyBiZW1hc3N0ZXMgRml0dGluZyAo4oyAMjnDlzEsNSAvIEZsYW5zY2ggNTAsNSkuIEdlbmF1IGRpZSBaYWhsZW4sIGRpZSBlcwogICAgLy8gZnVlciBDRi9DRkkgbmljaHQgZ2lidC4KICAgIC8vIG51ckZsYW5zY2ggbWl0IGJlbGVndGVuIE1hc3NlbiAocGFyYW1zIHZvcmhhbmRlbikgYmVrb21tdCBzZWl0IFJ1bmRlIDcgKFctMDU5KQogICAgLy8gZGllIGVjaHRlIFplaWNobnVuZzsgbnVyIG9obmUgYmVsZWd0ZSBNYXNzZSBibGVpYnQgZGllICJaZWljaG51bmcgZm9sZ3QiLUthcnRlLgogICAgaWYgKHN0YXRlLnR5cCAmJiAoKGlzdE51ckZsYW5zY2godCkgJiYgIXApIHx8IGlzdE1hc3NlRm9sZ3QodCkgfHwgaXN0UmVkdXppZXJ1bmdPaG5lWndlaXRPRChzdGF0ZSkgfHwgaXN0Rm9ybU9obmVNYXNzZShzdGF0ZSkpKSB7IHN0YWdlID0gemVpY2hudW5nRm9sZ3RDYXJkKHQpOyB9CiAgICBlbHNlIGlmIChwKSB7CiAgICAgIGNvbnN0IFIgPSB3aW5kb3cuV2Vpc3NGaXR0aW5nUmVuZGVyOwogICAgICBjb25zdCBzdmdTdHIgPSAoc3RhdGUudmlldyA9PT0gJ2Fuc2ljaHQnICYmIFIpCiAgICAgICAgPyBSLnJlbmRlckZpdHRpbmcocCwgeyB3aWR0aDogNzYwLCBoZWlnaHQ6IDQ0MCB9KQogICAgICAgIDogU1ZHLnJlbmRlckZpdHRpbmcocCwgeyB3aWR0aDogNzYwLCBoZWlnaHQ6IDQ0MCB9KTsKICAgICAgY29uc3QgdG9nZ2xlID0gYDxkaXYgY2xhc3M9InB2LWhlYWQiPjxzcGFuIGNsYXNzPSJsYmwiPlZvcnNjaGF1PC9zcGFuPgogICAgICAgIDxkaXYgY2xhc3M9InB2LWFjdGlvbnMiPgogICAgICAgICAgPGRpdiBjbGFzcz0icHYtdG9nZ2xlIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iRGFyc3RlbGx1bmciPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSIke3N0YXRlLnZpZXcgPT09ICd6ZWljaG51bmcnID8gJ3NlbCcgOiAnJ30iIGRhdGEtYWN0PSJ2aWV3IiBkYXRhLWlkPSJ6ZWljaG51bmciPlplaWNobnVuZzwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSIke3N0YXRlLnZpZXcgPT09ICdhbnNpY2h0JyA\\\/ICdzZWwnIDogJyd9IiBkYXRhLWFjdD0idmlldyIgZGF0YS1pZD0iYW5zaWNodCI+QW5zaWNodDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJwdi1mc2J0biIgZGF0YS1hY3Q9ImZzLW9wZW4iIGFyaWEtbGFiZWw9IlZvbGxiaWxkIMO2ZmZuZW4iIHRpdGxlPSJWb2xsYmlsZCArIFpvb20iPiR7aWMoJ2V4cGFuZCcsICdpYycpfTwvYnV0dG9uPgogICAgICAgIDwvZGl2PjwvZGl2PmA7CiAgICAgIHN0YWdlID0gdG9nZ2xlICsgYDxkaXYgY2xhc3M9InB2LXN0YWdlIiBpZD0id3otc3RhZ2UiPiR7c3ZnU3RyfTwvZGl2PmA7CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3QgUjAgPSB3aW5kb3cuV2Vpc3NGaXR0aW5nUmVuZGVyOwogICAgICBjb25zdCBzYW1wbGUgPSBSMCA\\\/IFIwLnJlbmRlckZpdHRpbmcoeyB0eXBlOidjbGFtcHN0dXR6ZW4nLCBkbjoyNSwgb2Q6MjksIHdhbGw6MS41LCBsZW5ndGg6MzYsIGZsYW5nZU9kOjUwLjUsIGdhc2tldE1hdGVyaWFsOidFUERNJywgc3VyZmFjZTonSDMnLCB3ZXJrc3RvZmY6JzEuNDQwNCcgfSwgeyB3aWR0aDo3NjAsIGhlaWdodDo0NDAgfSkgOiAnJzsKICAgICAgc3RhZ2UgPSBgPGRpdiBjbGFzcz0icHYtc3RhZ2UgcHYtc2FtcGxlIj4ke3NhbXBsZX0KICAgICAgICA8ZGl2IGNsYXNzPSJwdi1zYW1wbGUtaGludCI+JHtpYygnZHJhdycsICdpYycpfTxzcGFuPjxiPkJlaXNwaWVsLURhcnN0ZWxsdW5nLjwvYj4gV8OkaGxlIGxpbmtzIGRpZSBBbndlbmR1bmcg4oCUIGRhbm4gYmF1dCBzaWNoIGhpZXIgZGVpbiBGaXR0aW5nIGxpdmUgbWl0IFplaWNobnVuZyB1bmQgYmVsZWd0ZW4gTWHDn2VuIGF1Zi48L3NwYW4+PC9kaXY+PC9kaXY+YDsKICAgIH0KCiAgICBsZXQgcHJpY2VIdG1sID0gJyc7CiAgICBpZiAoc3RhdGUudHlwKSB7CiAgICAgIGlmIChwaS5tb2RlID09PSAnYW5mcmFnZScpIHsKICAgICAgICAvLyBCZWdydWVuZHVuZyBrb21tdCBhdXMgcHJpY2VJbmZvKCkgLSBqZSBuYWNoIEZhbGwgRElOIDExODY1LCBmZWhsZW5kZXIgR3J1bmRwcmVpcwogICAgICAgIC8vIG9kZXIgbnVyRmxhbnNjaC1UeXAgb2huZSBQcmVpc3N0YWZmZWwgbmFjaCBGbGFuc2NoLcOYLgogICAgICAgIHByaWNlSHRtbCA9IGA8ZGl2IGNsYXNzPSJwdi1wcmljZSBhbmZyYWdlIj48ZGl2PjxkaXYgY2xhc3M9ImFtdCI+QXVmIEFuZnJhZ2U8L2Rpdj48ZGl2IGNsYXNzPSJzdWIiPiR7ZXNjKHBpLmdydW5kIHx8ICdGaXJtYSBXZWlzcyBrYWxrdWxpZXJ0IGluZGl2aWR1ZWxsLicpfTwvZGl2PjwvZGl2PjwvZGl2PmA7CiAgICAgIH0gZWxzZSBpZiAocGkucGxhdHpoYWx0ZXIpIHsKICAgICAgICBwcmljZUh0bWwgPSBgPGRpdiBjbGFzcz0icHYtcHJpY2UgYW5mcmFnZSI+PGRpdj48ZGl2IGNsYXNzPSJhbXQiPkF1ZiBBbmZyYWdlPC9kaXY+PGRpdiBjbGFzcz0ic3ViIj5GaXJtYSBXZWlzcyBrYWxrdWxpZXJ0IGluZGl2aWR1ZWxsLjwvZGl2PjwvZGl2PjwvZGl2PmA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gU29iYWxkIGVpbiBDaGFyZ2VuYXVmcHJlaXMgYW5mYWVsbHQsIGlzdCBTdHVlY2twcmVpcyBtYWwgTWVuZ2UgTklDSFQgbWVociBkaWUKICAgICAgICAvLyBHZXNhbXRzdW1tZS4gRGFzIG11c3MgZGFzdGVoZW4sIHNvbnN0IHdpcmt0IGRpZSBSZWNobnVuZyBmYWxzY2guCiAgICAgICAgY29uc3QgY2hhcmdlSGlud2VpcyA9IHBpLmNoYXJnZUF1ZnByZWlzCiAgICAgICAgICA\\\/ICcgwrcgcGx1cyBlaW5tYWxpZyAnICsgZXVyKHBpLmNoYXJnZUF1ZnByZWlzKSArICcg4oKsIGplIENoYXJnZScKICAgICAgICAgIDogJyc7CiAgICAgICAgcHJpY2VIdG1sID0gYDxkaXYgY2xhc3M9InB2LXByaWNlIj48ZGl2PjxkaXYgY2xhc3M9ImFtdCI+PHNwYW4gaWQ9Ind6LWFtb3VudCI+JHtldXIocGkuc3R1ZWNrKX08L3NwYW4+PHNwYW4gY2xhc3M9ImN1ciI+4oKsIC8gU3TDvGNrPC9zcGFuPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3ViIj4ke3N0YXRlLm1lbmdlfSBTdMO8Y2ske3BpLnJhYmF0dCA\\\/ICcgwrcg4oiSJyArIHBpLnJhYmF0dCArICcgJSBhYiAnICsgcGkuYWIgOiAnJ30ke2NoYXJnZUhpbndlaXN9PC9kaXY+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b3RhbCI+PGRpdiBjbGFzcz0idCI+R2VzYW10PC9kaXY+PGRpdiBjbGFzcz0idiBtb25vIj4ke2V1cihwaS5nZXNhbXQpfSDigqw8L2Rpdj48L2Rpdj48L2Rpdj5gOwogICAgICB9CiAgICB9CgogICAgbGV0IGNoaXBzID0gJyc7CiAgICBpZiAoc3RhdGUudHlwKSB7CiAgICAgIGNvbnN0IHJ3ID0gcm93Rm9yKHN0YXRlKTsKICAgICAgY29uc3QgcGFydHMgPSBbXTsKICAgICAgaWYgKHN0YXRlLm5vcm0pIHBhcnRzLnB1c2goWydOb3JtJywgRC5ub3JtZW4uZmluZChuID0+IG4uaWQgPT09IHN0YXRlLm5vcm0pLmxhYmVsXSk7CiAgICAgIGlmIChpc3ROdXJGbGFuc2NoKHQpKSB7CiAgICAgICAgY29uc3QgZiA9IGZsYW5zY2hGb3Ioc3RhdGUpOwogICAgICAgIGlmIChmKSBwYXJ0cy5wdXNoKFsnRmxhbnNjaC3ijIAnLCBmLmxhYmVsICsgJyBtbSddKTsKICAgICAgICBpZiAoaXN0S2xhbW1lcih0KSkgewogICAgICAgICAgY29uc3Qga3QgPSBrbGFtbWVyVHlwT2JqKHN0YXRlLmtsYW1tZXJUeXApOyBpZiAoa3QpIHBhcnRzLnB1c2goWydLbGFtbWVydHlwJywga3QubGFiZWxdKTsKICAgICAgICAgIGNvbnN0IG11ID0gKEQua2xhbW1lck11dHRlcm4gfHwgW10pLmZpbmQobSA9PiBtLmlkID09PSBzdGF0ZS5rbGFtbWVyTXV0dGVyKTsgaWYgKG11KSBwYXJ0cy5wdXNoKFsnTXV0dGVyJywgbXUubGFiZWxdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSBpZiAoaXNDb25uZWN0KHQpICYmIHJ3KSB7CiAgICAgICAgcGFydHMucHVzaChbJ0dyw7bDn2UnLCBsYmwocncpXSk7CiAgICAgICAgLy8gQmVybmQgMjcuMDcuMjAyNjogc3RhdHQgZGVyIEhlcnN0ZWxsZXJzZXJpZSBudXIgbm9jaCBkYXMgS8O8cnplbC4KICAgICAgICBwYXJ0cy5wdXNoKFsnVHlwJywgdC5pZF0pOwogICAgICAgIHBhcnRzLnB1c2goWydEZSAvIERpJywgZm10TU0ocncuRGUpICsgJyAvICcgKyBmbXRNTShydy5EaSkgKyAnIG1tJ10pOwogICAgICAgIGlmICh0LmlkID09PSAnQ0YnKSB7CiAgICAgICAgICBwYXJ0cy5wdXNoKFsnRGYgLyBMJywgZm10TU0ocncuRGYpICsgJyAvICcgKyBmbXRNTShzdGF0ZS5jb25uZWN0TGFlbmdlKSArICcgbW0nXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGVuZCA9IGNvbm5lY3RFbmRGb3Ioc3RhdGUsIHJ3KTsKICAgICAgICAgIGNvbnN0IHVwcGVyID0gRC5tYXNzZS5jb25uZWN0LmNmaS5vYmVyZXJBbnNjaGx1c3M7CiAgICAgICAgICBwYXJ0cy5wdXNoKFsnQW5zY2hsdXNzJywgc3RhdGUuY29ubmVjdEFuc2NobHVzcyA9PT0gJ1RDJyA\\\/ICdUcmktQ2xhbXAnIDogJ0J1dHQgV2VsZCddKTsKICAgICAgICAgIGlmIChlbmQpIHBhcnRzLnB1c2goWydZIC8gTCcsIGZtdE1NKHJ3LlkpICsgJyAvICcgKyBmbXRNTShlbmQuTCkgKyAnIG1tJ10pOwogICAgICAgICAgcGFydHMucHVzaChbJ09iZXJlciBBbnNjaGx1c3MgRGUgLyBEaScsIGZtdE1NKHVwcGVyLkRlKSArICcgLyAnICsgZm10TU0odXBwZXIuRGkpICsgJyBtbSddKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSBpZiAocncpIHsKICAgICAgICBwYXJ0cy5wdXNoKFsnR3LDtsOfZScsIGxibChydykgKyAnIMK3IOKMgCcgKyBmbXRNTShvZE9mKHJ3KSkgKyAnw5cnICsgZm10TU0od2FsbE9mKHJ3KSldKTsKICAgICAgICAvLyBUQ0Q6IGZlc3RlIEhvZWhlIHN0YXR0IEtLL0tMIC0+IGFscyBlaWdlbmVyIENoaXAsIHNvbnN0IGZhZWxsdCBkYXMgZWluemlnZQogICAgICAgIC8vIExhZW5nZW5tYXNzIGRlcyBTdHV0emVucyBpbiBkZXIgVm9yc2NoYXUgZ2FueiB3ZWcuCiAgICAgICAgY29uc3QgbGcgPSBsYWVuZ2VPZih0LCBydywgc3RhdGUubGFlbmdlVmFyaWFudGUpOwogICAgICAgIGlmIChsZyAmJiBsZy5sYWJlbCA9PT0gJ2gnKSBwYXJ0cy5wdXNoKFsnSMO2aGUnLCBmbXRNTShsZy53ZXJ0KSArICcgbW0nXSk7CiAgICAgIH0KICAgICAgLy8gVHlwIEQgKEJhdXRlaWwgRGljaHR1bmcpOiBrZWluIEVkZWxzdGFobC1XZXJrc3RvZmYsIGtlaW5lIE9iZXJmbGFlY2hlIC0KICAgICAgLy8gZGllIERpY2h0dW5nIHNlbGJzdCBrb21tdCBnbGVpY2ggYWxzIGVpZ2VuZXIgQ2hpcCAoQmVybmQgMTEuMDguMjAyNikuCiAgICAgIGlmICghaXN0RGljaHR1bmdCYXV0ZWlsKHQpKSB7CiAgICAgICAgcGFydHMucHVzaChbJ1dlcmtzdG9mZicsIGVmZldlcmtzdG9mZihzdGF0ZSkgfHwgJ2ZvbGd0J10pOwogICAgICAgIC8vIFIyLTQ6IERpZSBLbGFtbWVyIGhhdCBrZWluZSBPYmVyZmxhZWNoZSAtPiBrZWluZW4gT2JlcmZsYWVjaGVuLUNoaXAgemVpZ2VuLgogICAgICAgIGlmICghaXN0S2xhbW1lcih0KSkgcGFydHMucHVzaChbJ09iZXJmbMOkY2hlJywgc3RhdGUub2JlcmZsYWVjaGVdKTsKICAgICAgfQogICAgICBpZiAodCAmJiB0LmRpY2h0dW5nICYmIHN0YXRlLmRpY2h0dW5nKSBwYXJ0cy5wdXNoKFsnRGljaHR1bmcnLCBkaWNodE9iaihzdGF0ZS5kaWNodHVuZykubGFiZWxdKTsKICAgICAgLy8gRWluc2F0emdyZW56ZW4gc2luZCBuYWNoIFJPSFItQXVzc2VuZHVyY2htZXNzZXIgZ2VzdGFmZmVsdCAoRC5laW5zYXR6LmRydWNrQmFuZHMpLgogICAgICAvLyBCZWkgbnVyRmxhbnNjaC1UeXBlbiBmZWhsdCBkZXIgLT4gQ2hpcCBlbnRmYWVsbHQsIHN0YXR0IGRhcyBmYWxzY2hlIEJhbmQgenUgemVpZ2VuLgogICAgICAvLyBUQ0QgKGRpY2t3YW5kaWcpOiBEaWUgQmFlbmRlciBzaW5kIGRpZSBBRC1TdGFmZmVsIGRlciBEVUVOTldBTkRJR0VOIERJTi0zMjY3Ni1SZWloZQogICAgICAvLyAoIlJvaHItQUQgNiwzNSBiaXMgNDIsNCBtbSIgdXN3LikuIEZ1ZXIgZGVuIGRpY2t3YW5kaWdlbiBTdHV0emVuIChXYW5kIDQgbW0pIGxpZWd0CiAgICAgIC8vIEtFSU5FIERydWNrYW5nYWJlIHZvciAtIHdlZGVyIGJlaSBCZXJuZCBub2NoIGltIHppbW1lcmxpbi1BdXN6dWcuIERlbiBkaWNrd2FuZGlnZW4KICAgICAgLy8gYXVzc2VuRCBpbiBkaWVzZSBTdGFmZmVsIHp1IHN0ZWNrZW4gd2FlcmUgZ2VyYXRlbiB1bmQgdGVpbHMgc29nYXIgYWJ3ZWljaGVuZAogICAgICAvLyAoVENEL0RONDA6IGF1c3NlbkQgNDYgLT4gMTYgYmFyLCBkdWVubndhbmRpZyDijIA0MSAtPiAyNSBiYXIpLiBEZXNoYWxiICJmb2xndCIuCiAgICAgIGlmICh0ICYmIHQuaWQgPT09ICdUQycgJiYgcncgJiYgRC5laW5zYXR6ICYmIEQuZWluc2F0ei5kcnVja0JhbmRzKSB7CiAgICAgICAgY29uc3QgZWIgPSBELmVpbnNhdHouZHJ1Y2tCYW5kcy5maW5kKGIgPT4gcncudHViZU9EIDw9IGIuYWRNYXgpOwogICAgICAgIGlmIChlYikgcGFydHMucHVzaChbJ0VpbnNhdHonLCBlYi5iYXIgKyAnIGJhciDCtyAnICsgRC5laW5zYXR6LnRlbXBNaW4gKyAnIGJpcyAnICsgRC5laW5zYXR6LnRlbXBNYXggKyAnIMKwQyddKTsKICAgICAgfSBlbHNlIGlmICh0ICYmIHQubm9ybSA9PT0gJ2RpbjExODY1JykgewogICAgICAgIHBhcnRzLnB1c2goWydFaW5zYXR6JywgJ2F1ZiBBbmZyYWdlJ10pOwogICAgICB9CiAgICAgIGNvbnN0IHByb2R1a3RBcnQgPSBhcnRpY2xlTnVtYmVyKHN0YXRlKTsKICAgICAgLy8gQmVpIENGL0NGSSBpc3QgZGllIEFydGlrZWwtTnIuIGpldHp0IGlkZW50aXNjaCBtaXQgZGVyIEtvbmZpZ3VyYXRpb25zLU5yLgogICAgICAvLyAoQmVybmQgMjcuMDcuMjAyNikgLSBkYW5uIG5pY2h0IHp3ZWltYWwgZGFzc2VsYmUgYW56ZWlnZW4uCiAgICAgIGlmIChwcm9kdWt0QXJ0ICYmIHByb2R1a3RBcnQgIT09IHR5cGVjb2RlKHN0YXRlKSkgcGFydHMucHVzaChbJ0FydGlrZWwtTnIuJywgcHJvZHVrdEFydF0pOwogICAgICBjaGlwcyA9ICc8ZGl2IGNsYXNzPSJwdi1jaGlwcyI+JyArIHBhcnRzLm1hcCgoW2ssIHZdKSA9PiBgPHNwYW4gY2xhc3M9ImNoaXAiPjxiPiR7ZXNjKGspfTwvYj4ke2VzYyh2KX08L3NwYW4+YCkuam9pbignJykgKyAnPC9kaXY+JzsKICAgIH0KCiAgICBjb25zdCBjb2RlID0gc3RhdGUudHlwID8gdHlwZWNvZGUoc3RhdGUpIDogJ+KAkycsIHByb2R1a3RBcnQgPSBzdGF0ZS50eXAgPyBhcnRpY2xlTnVtYmVyKHN0YXRlKSA6IG51bGw7CiAgICBjb25zdCBhcnRHbGVpY2hDb2RlID0gISFwcm9kdWt0QXJ0ICYmIHByb2R1a3RBcnQgPT09IGNvZGU7CiAgICBib3guaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9InB2LWNhcmQiPgogICAgICAke3N0YWdlfQogICAgICA8ZGl2IGNsYXNzPSJwdi10eXBlY29kZSI+PHNwYW4gY2xhc3M9ImxibCI+JHthcnRHbGVpY2hDb2RlID8gJ0tvbmZpZ3VyYXRpb25zLSAvIEFydGlrZWwtTnIuJyA6ICdLb25maWd1cmF0aW9ucy1Oci4nfTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSIgaWQ9Ind6LWNvZGUiPiR7ZXNjKGNvZGUpfTwvc3Bhbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJjb3B5IiBkYXRhLWFjdD0iY29weWNvZGUiPiR7aWMoJ2NvcHknLCAnaWMnKX0ga29waWVyZW48L2J1dHRvbj48L2Rpdj4KICAgICAgJHtwcm9kdWt0QXJ0ICYmICFhcnRHbGVpY2hDb2RlID8gYDxkaXYgY2xhc3M9InB2LXR5cGVjb2RlIj48c3BhbiBjbGFzcz0ibGJsIj5BcnRpa2VsLU5yLjwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSI+JHtlc2MocHJvZHVrdEFydCl9PC9zcGFuPjwvZGl2PmAgOiAnJ30KICAgICAgJHtwcmljZUh0bWx9JHtjaGlwc308L2Rpdj5gOwoKICAgIGlmIChwaS5tb2RlID09PSAnbGl2ZScgJiYgIXBpLnBsYXR6aGFsdGVyKSBhbmltYXRlUHJpY2UoJCgnI3d6LWFtb3VudCcpLCBwaS5zdHVlY2spOyBlbHNlIHByaWNlQ3VyID0gbnVsbDsKICB9CgogIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTmF2ICovCiAgZnVuY3Rpb24gcmVuZGVyTmF2KCkgewogICAgY29uc3QgbmF2ID0gJCgnI3d6LW5hdicpOwogICAgY29uc3QgYSA9IGFwcFN0ZXBzKCksIGkgPSBhLmluZGV4T2Yoc3RhdGUuc3RlcCksIGxhc3QgPSBpID09PSBhLmxlbmd0aCAtIDE7CiAgICBjb25zdCBwaSA9IHByaWNlSW5mbyhzdGF0ZSk7CiAgICBjb25zdCBub3JtID0gRC5ub3JtZW4uZmluZChuID0+IG4uaWQgPT09IHN0YXRlLm5vcm0pOwogICAgY29uc3QgbWluaSA9IHN0YXRlLnR5cCA\\\/ICgocGkubW9kZSA9PT0gJ2xpdmUnICYmICFwaS5wbGF0emhhbHRlcikKICAgICAgPyBgPGRpdiBjbGFzcz0ibWluaXByaWNlIj48c3BhbiBjbGFzcz0iYSBtb25vIj4ke2V1cihwaS5nZXNhbXQpfSDigqw8L3NwYW4+PHNwYW4gY2xhc3M9ImIiPiR7c3RhdGUubWVuZ2V9IFN0w7xjazwvc3Bhbj48L2Rpdj5gCiAgICAgIDogcGkubW9kZSA9PT0gJ2xpdmUnCiAgICAgID8gYDxkaXYgY2xhc3M9Im1pbmlwcmljZSI+PHNwYW4gY2xhc3M9ImEiPkF1ZiBBbmZyYWdlPC9zcGFuPjxzcGFuIGNsYXNzPSJiIj4ke3N0YXRlLm1lbmdlfSBTdMO8Y2s8L3NwYW4+PC9kaXY+YAogICAgICA6IGA8ZGl2IGNsYXNzPSJtaW5pcHJpY2UiPjxzcGFuIGNsYXNzPSJhIj5BdWYgQW5mcmFnZTwvc3Bhbj48c3BhbiBjbGFzcz0iYiI+JHtlc2Mobm9ybSA\\\/IG5vcm0ubGFiZWwgOiAnJyl9PC9zcGFuPjwvZGl2PmApIDogJyc7CiAgICBjb25zdCBiYWNrID0gaSA+IDAgPyBgPGJ1dHRvbiBjbGFzcz0iYnRuIGdob3N0IiBkYXRhLWFjdD0iYmFjayI+JHtpYygnYXJyb3dMJywgJ2ljJyl9IFp1csO8Y2s8L2J1dHRvbj5gIDogJzxzcGFuPjwvc3Bhbj4nOwogICAgbGV0IGZ3ZDsKICAgIGlmIChsYXN0KSBmd2QgPSBgPGJ1dHRvbiBjbGFzcz0iYnRuIHByaW1hcnkgd2lkZSIgZGF0YS1hY3Q9InNlbmQiIGlkPSJ3ei1zZW5kIj5BbmZyYWdlIHBlciBFLU1haWwgc2VuZGVuICR7aWMoJ2Fycm93UicsICdpYycpfTwvYnV0dG9uPmA7CiAgICBlbHNlIGZ3ZCA9IGA8YnV0dG9uIGNsYXNzPSJidG4gcHJpbWFyeSB3aWRlIiBkYXRhLWFjdD0ibmV4dCIgJHtjb21wbGV0ZShzdGF0ZS5zdGVwKSA\\\/ICcnIDogJ2Rpc2FibGVkJ30+V2VpdGVyICR7aWMoJ2Fycm93UicsICdpYycpfTwvYnV0dG9uPmA7CiAgICBuYXYuaW5uZXJIVE1MID0gYmFjayArIG1pbmkgKyBmd2Q7CiAgICBpZiAobGFzdCkgdmFsaWRhdGVTZW5kKCk7CiAgfQoKICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJGUSAvIEFrdGlvbmVuICovCiAgZnVuY3Rpb24gY29udGFjdFZhbGlkKCkgewogICAgY29uc3QgayA9IHN0YXRlLmtvbnRha3Q7CiAgICByZXR1cm4gay5maXJtYS50cmltKCkgJiYgay5uYW1lLnRyaW0oKSAmJiAvXlteXHNAXStAW15cc0BdK1wuW15cc0BdKyQvLnRlc3Qoay5lbWFpbC50cmltKCkpOwogIH0KICBmdW5jdGlvbiB2YWxpZGF0ZVNlbmQoKSB7IGNvbnN0IGIgPSAkKCcjd3otc2VuZCcpOyBpZiAoYikgYi5kaXNhYmxlZCA9ICFjb250YWN0VmFsaWQoKTsgfQoKICBmdW5jdGlvbiBiaW5kRm9ybSgpIHsKICAgIGNvbnN0IGYgPSAkKCcjd3otZm9ybScpOyBpZiAoIWYpIHJldHVybjsKICAgIGYucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEta10nKS5mb3JFYWNoKGlucCA9PiB7CiAgICAgIGlucC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHsKICAgICAgICBzdGF0ZS5rb250YWt0W2lucC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaycpXSA9IGlucC52YWx1ZTsKICAgICAgICBpZiAoaW5wLmdldEF0dHJpYnV0ZSgnZGF0YS1rJykgPT09ICdlbWFpbCcpIHsKICAgICAgICAgIGNvbnN0IGVtID0gJCgnI3d6LWVyci1lbWFpbCcpOwogICAgICAgICAgaWYgKGVtKSBlbS50ZXh0Q29udGVudCA9IChpbnAudmFsdWUgJiYgIS9eW15cc0BdK0BbXlxzQF0rXC5bXlxzQF0rJC8udGVzdChpbnAudmFsdWUudHJpbSgpKSkgPyAnQml0dGUgZ8O8bHRpZ2UgRS1NYWlsIGVpbmdlYmVuLicgOiAnJzsKICAgICAgICB9CiAgICAgICAgdmFsaWRhdGVTZW5kKCk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBwb3NMaW5lKHBzLCBpZHgpIHsKICAgIGNvbnN0IHQgPSB0eXBPYmoocHMudHlwKSwgbiA9IEQubm9ybWVuLmZpbmQoeCA9PiB4LmlkID09PSBwcy5ub3JtKTsKICAgIGNvbnN0IGFudyA9IEQuYW53ZW5kdW5nZW4uZmluZChhID0+IGEuaWQgPT09IHBzLmFud2VuZHVuZyk7CiAgICAvLyBudXJGbGFuc2NoLVR5cGVuIGhhYmVuIGtlaW5lIE5lbm53ZWl0ZSAtPiBnYXIgbmljaHQgZXJzdCBpbiBkZW4gUmVpaGVuIHN1Y2hlbi4KICAgIC8vIHJvd3NRdWVsbGUgc3RhdHQgZGVyIGZlc3QgdmVyZHJhaHRldGVuIGRpbjMyNjc2LVJlaWhlOiBzb25zdCB6aWVodCBkaWUgQW5mcmFnZS1NYWlsCiAgICAvLyBmdWVyIFRDRCBkaWUgRFVFTk5XQU5ESUdFTiBNYXNzZSAoRE4yNSAtPiDijIAyOSB4IDEsNSBzdGF0dCDijIAzNCB4IDQpLiBEaWUgTWFpbCBnZWh0IGFuCiAgICAvLyBXZWlzcyB1bmQgaXN0IGRpZSBCZXN0ZWxsZ3J1bmRsYWdlIC0gaGllciBkYXJmIGtlaW5lIGZyZW1kZSBUYWJlbGxlIGdyZWlmZW4uCiAgICBjb25zdCBydyA9IGlzdE51ckZsYW5zY2godCkgPyBudWxsIDogcm93Rm9yKHBzKTsKICAgIGNvbnN0IHIyID0gKCFpc3ROdXJGbGFuc2NoKHQpICYmIHBzLmdyb2Vzc2UyKSA\\\/IHJvdzJGb3IocHMpIDogbnVsbDsKICAgIGNvbnN0IG53ID0gcHMubmFjaHdlaXNlLm1hcChpZCA9PiBuYWNod2Vpc0xhYmVsQnlJZChpZCkpLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpIHx8ICfigJQnOwogICAgLy8gWmVpbGVuc3VtbWUgbWl0IGluIGRpZSBNYWlsOiBPaG5lIHNpZSBtdWVzc3RlIFdlaXNzIFN0dWVja3ByZWlzIG1hbCBNZW5nZSBtaW51cwogICAgLy8gTWVuZ2Vuc3RhZmZlbCB2b24gSGFuZCBuYWNocmVjaG5lbiwgdW5kIGRlciBHZXNhbXRiZXRyYWcgYW0gRW5kZSBkZXIgTWFpbCBoYWV0dGUKICAgIC8vIGtlaW5lIG5hY2h2b2xsemllaGJhcmVuIEVpbnplbHBvc3Rlbi4KICAgIC8vIERlciBDaGFyZ2VuYXVmcHJlaXMgc3RlY2t0IGluIGRlciBQb3NpdGlvbnNzdW1tZSwgYWJlciBuaWNodCBpbSBTdHVlY2twcmVpcy4KICAgIC8vIE9obmUgZGllc2VuIFp1c2F0eiBrb2VubnRlIFdlaXNzIGRpZSBaZWlsZSBuaWNodCBuYWNocmVjaG5lbi4KICAgIGNvbnN0IHByZWlzID0gKHBzLnByaWNlLm1vZGUgPT09ICdsaXZlJyAmJiAhcHMucHJpY2UucGxhdHpoYWx0ZXIpCiAgICAgID8gKGV1cihwcy5wcmljZS5zdHVlY2spICsgJyBFVVIgLyBTdMO8Y2snICsgKHBzLnByaWNlLnJhYmF0dCA\\\/ICcgYWJ6w7xnbGljaCAnICsgcHMucHJpY2UucmFiYXR0ICsgJyAlIGFiICcgKyBwcy5wcmljZS5hYiArICcgU3TDvGNrJyA6ICcnKQogICAgICAgICArIChwcy5wcmljZS5jaGFyZ2VBdWZwcmVpcyA\\\/ICcgenV6w7xnbGljaCBlaW5tYWxpZyAnICsgZXVyKHBzLnByaWNlLmNoYXJnZUF1ZnByZWlzKSArICcgRVVSIGplIENoYXJnZScgOiAnJykKICAgICAgICAgKyAnIMK3IFBvc2l0aW9uICcgKyBldXIocHMucHJpY2UuZ2VzYW10KSArICcgRVVSJykKICAgICAgOiAnYXVmIEFuZnJhZ2UnOwogICAgY29uc3QgTCA9IFtdOwogICAgTC5wdXNoKCctLS0gUG9zaXRpb24gJyArIChpZHggKyAxKSArICcgLS0tJyk7CiAgICBpZiAoYW53KSBMLnB1c2goJ0Fud2VuZHVuZzogJyArIGFudy5sYWJlbCk7CiAgICBMLnB1c2goJ0tvbmZpZ3VyYXRpb25zLU5yLjogJyArIChwcy5jb25maWd1cmF0aW9uQ29kZSB8fCBwcy5jb2RlKSk7CiAgICBpZiAocHMuYXJ0aWNsZU51bWJlcikgTC5wdXNoKCdBcnRpa2VsLU5yLjogJyArIHBzLmFydGljbGVOdW1iZXIpOwogICAgTC5wdXNoKCdOb3JtOiAnICsgKG4gPyBuLmxhYmVsICsgJyAoJyArIG4uc3ViICsgJyknIDogJycpKTsKICAgIEwucHVzaCgnQmF1dGVpbDogJyArICh0ID8gdC5sYWJlbCA6ICcnKSk7CiAgICAvLyBudXJGbGFuc2NoLVR5cGVuIChCbGluZGRlY2tlbC9LbGFtbWVyLCBBYnNjaG5pdHQgRCk6IEVzIGdpYnQga2VpbmUgTmVubndlaXRlIC0gZGVyCiAgICAvLyBGbGFuc2NoLcOYIGlzdCBkYXMgRUlOWklHRSBHcm9lc3Nlbm1hc3MuIE9obmUgZGllc2UgWmVpbGUgYmVrYWVtZSBXZWlzcyBlaW5lIFBvc2l0aW9uCiAgICAvLyB2b2VsbGlnIG9obmUgR3JvZXNzZW5hbmdhYmUuIEtsYW1tZXJ0eXAgKEFic2Nobml0dCBFKSBnZWhvZXJ0IGViZW5zbyBpbiBkaWUgQW5mcmFnZS4KICAgIGlmIChpc3ROdXJGbGFuc2NoKHQpKSB7CiAgICAgIGNvbnN0IGYgPSBmbGFuc2NoT2JqKHBzLmZsYW5zY2gpOwogICAgICBMLnB1c2goJ0ZsYW5zY2gtRHVyY2htZXNzZXI6ICcgKyAoZiA\\\/IGYubGFiZWwgKyAnIG1tJyA6ICdmb2xndCcpKTsKICAgICAgaWYgKGlzdEtsYW1tZXIodCkpIHsKICAgICAgICBjb25zdCBrdCA9IGtsYW1tZXJUeXBPYmoocHMua2xhbW1lclR5cCk7CiAgICAgICAgaWYgKGt0KSBMLnB1c2goJ0tsYW1tZXJ0eXA6ICcgKyBrdC5sYWJlbCArICcgKCcgKyBrdC5zdWIgKyAnKScpOwogICAgICAgIGlmIChmICYmIGYua2xhbW1lckEpIEwucHVzaCgnTWHDnyBBOiAnICsgKGYua2xhbW1lckFbcHMua2xhbW1lclR5cF0gPT0gbnVsbCA\\\/ICdhdWYgQW5mcmFnZScgOiBmbXRNTShmLmtsYW1tZXJBW3BzLmtsYW1tZXJUeXBdKSArICcgbW0nKSk7CiAgICAgICAgY29uc3QgbXUgPSAoRC5rbGFtbWVyTXV0dGVybiB8fCBbXSkuZmluZChtID0+IG0uaWQgPT09IHBzLmtsYW1tZXJNdXR0ZXIpOwogICAgICAgIGlmIChtdSkgTC5wdXNoKCdNdXR0ZXI6ICcgKyBtdS5sYWJlbCArIChtdS5hdWZwcmVpcyA\\\/ICcgKGdlZ2VuIEF1ZnByZWlzKScgOiAnJykpOwogICAgICB9CiAgICAgIC8vIERlY2tlbHN0YWVya2UgTCBpc3Qgc2VpdCBSdW5kZSA1IGJlbGVndCAoIk1hc3NlIEtsZW1tZW4sIEJsaW5kZGVja2VsLnhsc3giLAogICAgICAvLyAyMi4wNy4yMDI2KSB1bmQgZGFyZiBpbiBkZXIgQW5mcmFnZS1NYWlsIHN0ZWhlbi4gbnVsbCBibGVpYnQgImF1ZiBBbmZyYWdlIiwKICAgICAgLy8gZGFtaXQgV2Vpc3Mgc2llaHQsIGRhc3MgZGFzIE1hc3Mgb2ZmZW4gaXN0LCBzdGF0dCBlcyBzdGlsbHNjaHdlaWdlbmQgYW56dW5laG1lbi4KICAgICAgaWYgKHQuc3ZnVHlwZSA9PT0gJ2JsaW5kZGVja2VsJykgTC5wdXNoKCdEZWNrZWxzdMOkcmtlIEw6ICcgKyAoZiAmJiBmLmJsaW5kVGhrICE9IG51bGwgPyBmbXRNTShmLmJsaW5kVGhrKSArICcgbW0nIDogJ2F1ZiBBbmZyYWdlJykpOwogICAgfQogICAgLy8gbWFzc2VGb2xndCAoQ0YvQ0ZJKTogT2huZSBkaWVzZSBaZWlsZSBiZWthZW1lIFdlaXNzIGVpbmUgUG9zaXRpb24gdm9lbGxpZyBvaG5lIEhpbndlaXMsCiAgICAvLyBkYXNzIGRpZSBHcm9lc3NlIG5vY2ggb2ZmZW4gaXN0IC0gdW5kIHd1ZXJkZSBlaW5lIHN0aWxsc2Nod2VpZ2VuZCBhbm5laG1lbi4gRWhybGljaAogICAgLy8gYmVuZW5uZW4sIHdhcyBmZWhsdDsgZGFzIFd1bnNjaG1hc3Mga29tbXQgZ2dmLiB1ZWJlciBkZW4gRnJlaXRleHQgZGF6dS4KICAgIGVsc2UgaWYgKGlzQ29ubmVjdCh0KSAmJiBydykgewogICAgICBMLnB1c2goJ1R5cDogJyArIHQuaWQgKyAnICgnICsgZWZmV2Vya3N0b2ZmKHBzKSArICcpJyk7CiAgICAgIEwucHVzaCgnR3LDtsOfZTogJyArIGxibChydykpOwogICAgICBMLnB1c2goJ01hw59lOiBEZSAnICsgZm10TU0ocncuRGUpICsgJyBtbSAvIERpICcgKyBmbXRNTShydy5EaSkgKyAnIG1tJyk7CiAgICAgIGlmICh0LmlkID09PSAnQ0YnKSB7CiAgICAgICAgTC5wdXNoKCdSb2hyc3RhbmRhcmQ6ICcgKyBwcy5jb25uZWN0Tm9ybSk7CiAgICAgICAgTC5wdXNoKCdNYcOfZTogRGYgJyArIGZtdE1NKHJ3LkRmKSArICcgbW0gLyBMICcgKyBmbXRNTShwcy5jb25uZWN0TGFlbmdlKSArICcgbW0nKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBlbmQgPSBjb25uZWN0RW5kRm9yKHBzLCBydyk7CiAgICAgICAgY29uc3QgdXBwZXIgPSBELm1hc3NlLmNvbm5lY3QuY2ZpLm9iZXJlckFuc2NobHVzczsKICAgICAgICBMLnB1c2goJ1JvaHJhbnNjaGx1c3M6ICcgKyAocHMuY29ubmVjdEFuc2NobHVzcyA9PT0gJ1RDJyA\\\/ICdUcmktQ2xhbXAnIDogJ0J1dHQgV2VsZCcpKTsKICAgICAgICBpZiAoZW5kKSBMLnB1c2goJ01hw59lOiBZICcgKyBmbXRNTShydy5ZKSArICcgbW0gLyBMICcgKyBmbXRNTShlbmQuTCkgKyAnIG1tIC8gJyArIChwcy5jb25uZWN0QW5zY2hsdXNzID09PSAnVEMnID8gJ1RDICcgOiAnQSAnKSArIGZtdE1NKHBzLmNvbm5lY3RBbnNjaGx1c3MgPT09ICdUQycgPyBlbmQuVEMgOiBlbmQuQSkgKyAnIG1tJyk7CiAgICAgICAgTC5wdXNoKCdPYmVyZXIgQW5zY2hsdXNzOiBEZSAnICsgZm10TU0odXBwZXIuRGUpICsgJyBtbSAvIERpICcgKyBmbXRNTSh1cHBlci5EaSkgKyAnIG1tJyk7CiAgICAgIH0KICAgICAgLy8gRnJ1ZWhlciBzdGFuZCBoaWVyIGVpbiBGYWxsYmFjayAiQXJ0aWtlbC1Oci46IHdpcmQgdm9uIEZpcm1hIFdlaXNzIGVyZ8Okbnp0Ii4KICAgICAgLy8gRXIga29ubnRlIG5pZSBmZXVlcm46IEluIGRpZXNlbSBad2VpZyBpc3QgcncgYmVsZWd0LCB1bmQgZnVlciBDRi9DRkkgbGllZmVydAogICAgICAvLyBhcnRpY2xlTnVtYmVyKCkgdWViZXIgY29ubmVjdEFydGljbGVOdW1iZXIoKSAtPiB0eXBlY29kZSgpIGltbWVyIGVpbmUgTnVtbWVyLgogICAgICAvLyBUb3RlciBDb2RlIHJhdXMsIHN0YXR0IGlobiBhbHMgdmVybWVpbnRsaWNoZXMgU2ljaGVyaGVpdHNuZXR6IHN0ZWhlbnp1bGFzc2VuLgogICAgfQogICAgZWxzZSBpZiAoaXN0TWFzc2VGb2xndCh0KSkgTC5wdXNoKCdHcm9lc3NlL01hc3NlOiBOT0NIIE9GRkVOIC0gZnVlciAnICsgKHQgPyB0LmxhYmVsIDogJycpICsgJyBsaWVndCBpbSBLb25maWd1cmF0b3Igbm9jaCBrZWluIGZyZWlnZWdlYmVuZXMgRGF0ZW5ibGF0dCB2b3IgKGtlaW5lIE1hc3NlIGhpbnRlcmxlZ3QpLicpOwogICAgZWxzZSBpZiAocncpIEwucHVzaCgnR3LDtsOfZTogJyArIGxibChydykgKyAocjIgPyAnIGF1ZiAnICsgbGJsKHIyKSA6ICcnKSArICcgLSBSb2hyICcgKyBmbXRNTShvZE9mKHJ3KSkgKyAnIHggJyArIGZtdE1NKHdhbGxPZihydykpICsgJyBtbScgKyAodC5ub3JtID09PSAnZGluMzI2NzYnICYmIHJ3LmZsYW5nZU9EID8gJyAtIEtsZW1tLUR1cmNobWVzc2VyICcgKyBydy5mbGFuZ2VPRCArICcgbW0nIDogJycpKTsKICAgIC8vIEJlZGluZ3VuZyBoYWVuZ3QgYW0gbGFlbmdlVmFyaWFudGUtRmxhZywgTklDSFQgYW0gc3ZnVHlwZTogQ0YvQ0ZJIHRyYWdlbiB6d2FyCiAgICAvLyBzdmdUeXBlOidjbGFtcHN0dXR6ZW4nLCBoYWJlbiBhYmVyIGtlaW5lIHdhZWhsYmFyZSBTdHV0emVubGFlbmdlLiBVZWJlciBkZW4gc3ZnVHlwZQogICAgLy8gaGFldHRlIGRpZSBBbmZyYWdlLU1haWwgZnVlciBDRi9DRkkgZWluICJMYWVuZ2U6IGt1cnogKEtLKSIgYmVoYXVwdGV0LCBkYXMgZGVyIEt1bmRlCiAgICAvLyBuaWUgZ2V3YWVobHQgaGF0LiBGdWVyIFRDL1RDUyAobGFlbmdlVmFyaWFudGU6dHJ1ZSkgYWVuZGVydCBzaWNoIG5pY2h0cy4KICAgIGlmICh0ICYmIHQubGFlbmdlVmFyaWFudGUpIEwucHVzaCgnTGFlbmdlOiAnICsgKHBzLmxhZW5nZVZhcmlhbnRlID09PSAnS0wnID8gJ2xhbmcgKEtMKScgOiAna3VyeiAoS0spJykpOwogICAgLy8gVENEOiBrZWluIEtLL0tMLCBzb25kZXJuIGRpZSBXZWlzcy1TdGFuZGFyZGhvZWhlIGF1cyBkZXIgVGFiZWxsZS4gT2huZSBkaWVzZSBaZWlsZQogICAgLy8gYmVrYWVtZSBXZWlzcyBkZW4gU3R1dHplbiBvaG5lIHNlaW4gZWluemlnZXMgTGFlbmdlbm1hc3MuCiAgICBjb25zdCBsZ1AgPSBsYWVuZ2VPZih0LCBydywgcHMubGFlbmdlVmFyaWFudGUpOwogICAgaWYgKGxnUCAmJiBsZ1AubGFiZWwgPT09ICdoJykgTC5wdXNoKCdIb2VoZTogJyArIGZtdE1NKGxnUC53ZXJ0KSArICcgbW0gKFN0YW5kYXJkIHZvbiBGaXJtYSBXZWlzcyknKTsKICAgIGlmICh0ICYmIHQuc3ZnVHlwZSA9PT0gJ3JlZHV6aWVydW5nJykgTC5wdXNoKCdCYXVmb3JtOiAnICsgKHBzLmV4emVudHJpc2NoID8gJ2V4emVudHJpc2NoIChGb3JtIFJFKScgOiAna29uemVudHJpc2NoIChGb3JtIFJLKScpKTsKICAgIC8vIFIzLTMvUjMtNDogQmF1Zm9ybSBkZXIgVC1TdMO8Y2tlIG1pdCBpbiBkaWUgQW5mcmFnZS1NYWlsLgogICAgaWYgKHQgJiYgdC5mb3JtV2FobCkgTC5wdXNoKCdCYXVmb3JtOiAnICsgKHBzLmZvcm1WYXJpYW50ZSA9PT0gJ1RLJyA\\\/ICdGb3JtIFRLIChEdXJjaGdhbmcgZ2xlaWNoLCBBYmdhbmcga3VyeiknIDogJ0Zvcm0gVCAoYWxsZSBBYmfDpG5nZSBnbGVpY2ggbGFuZyknKSk7CiAgICBpZiAodCAmJiBpc0JlbmQodCkgJiYgcncpIHsKICAgICAgTC5wdXNoKCdNYcOfZTogUiAnICsgZm10TU0ocncuUikgKyAnIG1tIC8gJyArICh0LmJvZ2VuID09PSA0NSA\\\/ICdMMiAnICsgZm10TU0ocncuTDIpIDogJ0wxICcgKyBmbXRNTShydy5MMSkpICsgJyBtbSAvIEwzICcgKyBmbXRNTSh0LmJvZ2VuID09PSA0NSA\\\/IHJ3LkwzXzQ1IDogcncuTDNfOTApICsgJyBtbScpOwogICAgfQogICAgaWYgKHQgJiYgdC5pZCA9PT0gJ1InKSB7IGNvbnN0IHBhaXIgPSByZWR1Y3Rpb25QYWlyKHBzKTsgaWYgKHBhaXIpIEwucHVzaCgnTMOkbmdlIEw6ICcgKyBmbXRNTShwYWlyLkwpICsgJyBtbScpOyB9CiAgICAvKiBNYXNzbGlzdGUgZGVyIFQtU3R1ZWNrZS4gRGVyIEZpbHRlciBzdGFuZCBmcnVlaGVyIGF1ZiB0LmlkID09PSAnVFMnIC0gZGFkdXJjaCBnaW5nCiAgICAgKiBKRURFIHJlZHV6aWVydGUgUG9zaXRpb24gKFRTUikgb2huZSBMMC9ML0FiZ2FuZyBhbiBXZWlzcyByYXVzLCBvYndvaGwgZGllIFdlcnRlIGltCiAgICAgKiBiZWxlZ3RlbiBQYWFyIHN0ZWhlbi4gUXVlbGxlIGRlc2hhbGIgd2llIGltIERhdGVuYmxhdHQ6IFRTIC0+IER1cmNoZ2FuZ3N6ZWlsZSwKICAgICAqIFRTUiAtPiB0U3R1ZWNrUGFpcigpLiBPaG5lIGJlbGVndGUgUXVlbGxlIGJsZWlidCBkaWUgWmVpbGUgd2VnIChmYWlsLWNsb3NlZCksCiAgICAgKiBkYXMgS3VlcnplbCBkZXMgQWJnYW5ncyBmb2xndCBkZXIgQmF1Zm9ybSAoRm9ybSBUIC0+IEwyLCBGb3JtIFRLIC0+IEwxKS4gKi8KICAgIGlmICh0ICYmICh0LmlkID09PSAnVFMnIHx8IHQuaWQgPT09ICdUU1InKSkgewogICAgICBjb25zdCB0U3JjID0gdC5pZCA9PT0gJ1RTUicgPyB0U3R1ZWNrUGFpcihwcykgOiBydzsKICAgICAgLy8gRm9ybSBUSyBvaG5lIGJlbGVndGUgU3BhbHRlIEwxOiB0a0FiZ2FuZygpIG1hY2h0IGF1cyBkZW0gVGFiZWxsZW4tU3RyaWNoIGVpbmUgMC4KICAgICAgLy8gSW4gZGVyIEFuZnJhZ2UtTWFpbCAoPSBCZXN0ZWxsZ3J1bmRsYWdlIGZ1ZXIgV2Vpc3MpIHdhZXJlICJMMSAwIG1tIiBlaW4gZXJmdW5kZW5lcwogICAgICAvLyBNYXNzIC0gZGFubiBibGVpYnQgZGVyIEFiZ2FuZyBhdXNkcnVlY2tsaWNoIG9mZmVuLCBMMC9MIGdlaGVuIHRyb3R6ZGVtIG1pdC4KICAgICAgY29uc3QgdGtPZmZlbiA9IHBzLmZvcm1WYXJpYW50ZSA9PT0gJ1RLJyAmJiAoIXRTcmMgfHwgdFNyYy5MMSA9PSBudWxsKTsKICAgICAgY29uc3QgdEFiZyA9IHRrT2ZmZW4gPyBudWxsIDogYWJnYW5nTDIocHMsIHRTcmMpOwogICAgICBpZiAodFNyYyAmJiB0U3JjLkwwICE9IG51bGwgJiYgdFNyYy5MICE9IG51bGwpIHsKICAgICAgICBMLnB1c2goJ01hw59lOiBMMCAnICsgZm10TU0odFNyYy5MMCkgKyAnIG1tIC8gTCAnICsgZm10TU0odFNyYy5MKSArICcgbW0gLyAnCiAgICAgICAgICArIGFiZ2FuZ0t1ZXJ6ZWwocHMpICsgJyAnICsgKHRBYmcgIT0gbnVsbCA\\\/IGZtdE1NKHRBYmcpICsgJyBtbScgOiAnTk9DSCBPRkZFTicpKTsKICAgICAgfQogICAgfQogICAgaWYgKHQgJiYgdC5pZCA9PT0gJ1RDJykgTC5wdXNoKCdLbGFtbWVyOiAnICsgcHMua2xhbW1lclR5cCk7CiAgICAvKiBUeXAgRCAoQmF1dGVpbCBEaWNodHVuZyk6IFdlZGVyIEVkZWxzdGFobC1XZXJrc3RvZmYgbm9jaCBPYmVyZmxhZWNoZSBnZWhvZXJlbgogICAgICogaW4gZGllIEFuZnJhZ2UgLSBpbiBkZXIgTWFpbCBhbiBXZWlzcyBzdHVlbmRlIHNvbnN0ICIxLjQ0MDQgLyBINCIgdWViZXIgZWluZXIKICAgICAqIEVQRE0tRGljaHR1bmcgKEJlcm5kIDExLjA4LjIwMjYpLiBEZXIgV2Vya3N0b2ZmIGRlciBEaWNodHVuZyBzdGVodCBlaW5lIFplaWxlCiAgICAgKiB0aWVmZXIgdW50ZXIgIkRpY2h0dW5nIiwgZGllIE1hc3NlIEUvQyBpbiBkZXIgYmVpbGllZ2VuZGVuIFplaWNobnVuZy4gKi8KICAgIGlmICghaXN0RGljaHR1bmdCYXV0ZWlsKHQpKSB7CiAgICAgIEwucHVzaCgnV2Vya3N0b2ZmOiAnICsgcHMud2Vya3N0b2ZmKTsKICAgICAgLy8gUjItNDogRGllIEtsYW1tZXIgaGF0IEtFSU5FIE9iZXJmbGFlY2hlIC0+IGtlaW5lIE9iZXJmbGFlY2hlbi1aZWlsZSBpbiBkZXIgQW5mcmFnZQogICAgICAvLyAoc29uc3Qgc3R1ZW5kZSAiS2xhbW1lciB0cmFlZ3QgSDQiIGluIGRlciBNYWlsIGFuIFdlaXNzKS4KICAgICAgaWYgKCFpc3RLbGFtbWVyKHQpKSB7CiAgICAgICAgY29uc3Qgb28gPSBELm9iZXJmbGFlY2hlbi5maW5kKG8gPT4gby5pZCA9PT0gcHMub2JlcmZsYWVjaGUpOwogICAgICAgIC8vIFJhLVp1c2F0eiBOVVIsIHdlbm4gYmVpZGUgR3Jlbnp3ZXJ0ZSBiZXN0YWV0aWd0IGluIGRhdGEuanMgc3RlaGVuLiBCZWkgSDEgc2luZAogICAgICAgIC8vIHJhSW5uZW4vcmFBdXNzZW4gYmV3dXNzdCBudWxsIChvZmZlbmUgRnJhZ2UgNCkgLT4gWnVzYXR6IGVudGZhZWxsdCBrb21wbGV0dCwKICAgICAgICAvLyBzdGF0dCAiUmEgaW5uZW4gPD1udWxsIiB6dSBzY2hpY2tlbi4gS2VpbiBnZXJhdGVuZXIgV2VydCwga2VpbiAiZm9sZ3QiIGluIGRlciBLbGFtbWVyLgogICAgICAgIGNvbnN0IHJhT2sgPSBvbyAmJiBvby5yYUlubmVuICE9IG51bGwgJiYgb28ucmFBdXNzZW4gIT0gbnVsbDsKICAgICAgICBMLnB1c2goJ09iZXJmbMOkY2hlOiAnICsgcHMub2JlcmZsYWVjaGUgKyAocmFPayA\\\/ICcgKFJhIGlubmVuIDw9JyArIG9vLnJhSW5uZW4gKyAnIC8gYXXDn2VuIDw9JyArIG9vLnJhQXVzc2VuICsgJyDCtW0pJyA6ICcnKSk7CiAgICAgIH0KICAgIH0KICAgIGlmICh0ICYmIHQuZGljaHR1bmcpIEwucHVzaCgnRGljaHR1bmc6ICcgKyAoZGljaHRPYmoocHMuZGljaHR1bmcpID8gZGljaHRPYmoocHMuZGljaHR1bmcpLmxhYmVsIDogJ+KAlCcpKTsKICAgIC8vIERlciBadXNhdHogZ2lsdCBudXIsIHdlbm4gZGllIERpY2h0dW5nIGVpbiBaVUJFSE9FUlRFSUwgZGVyIFBvc2l0aW9uIGlzdCAoVHlwIFRDKS4KICAgIC8vIEJlaW0gVHlwIEQgSVNUIGRpZSBEaWNodHVuZyBkYXMgYmVzdGVsbHRlIEJhdXRlaWwgLSBkb3J0IHN0ZWh0IGlocmUgTnVtbWVyIGJlcmVpdHMKICAgIC8vIG9iZW4gaW4gZGVyIEFydGlrZWwtTnIuLVplaWxlIChTY2hlbWEgRC08R3JvZXNzZT4tPFJlaWhlPi08V2Vya3N0b2ZmPi08THxPPiksIGRlcgogICAgLy8gWnVzYXR6IHdhciBlaW5lIERvcHBsdW5nIHVuZCBoYXQgZGVyIGVpZ2VuZW4gQXJ0aWtlbG51bW1lciB3aWRlcnNwcm9jaGVuLgogICAgaWYgKHQgJiYgdC5kaWNodHVuZyAmJiB0LmlkICE9PSAnRCcpIEwucHVzaCgnRGljaHR1bmcgQXJ0aWtlbC1Oci46IHdpcmQgdm9uIEZpcm1hIFdlaXNzIGVyZ8Okbnp0Jyk7CiAgICBMLnB1c2goJ05hY2h3ZWlzZTogJyArIG53KTsKICAgIEwucHVzaCgnTWVuZ2U6ICcgKyBwcy5tZW5nZSArICcgU3TDvGNrJyk7CiAgICBMLnB1c2goJ1ByZWlzc3RhdHVzOiAnICsgcHJlaXMpOwogICAgcmV0dXJuIEwuam9pbignXG4nKTsKICB9CgogIGZ1bmN0aW9uIGJ1aWxkUmZxQm9keSgpIHsKICAgIGNvbnN0IGsgPSBzdGF0ZS5rb250YWt0LCBwb3MgPSBwb3NpdGlvbnNGb3JSZnEoKTsKICAgIGNvbnN0IGFudyA9IEQuYW53ZW5kdW5nZW4uZmluZChhID0+IGEuaWQgPT09IHN0YXRlLmFud2VuZHVuZyk7CiAgICBjb25zdCBMID0gW107CiAgICBMLnB1c2goJ0FuZnJhZ2Ugw7xiZXIgZGVuIFdlaXNzIEZpdHRpbmdzLUtvbmZpZ3VyYXRvcicpOwogICAgTC5wdXNoKCcnKTsKICAgIGlmIChhbncpIEwucHVzaCgnQW53ZW5kdW5nOiAnICsgYW53LmxhYmVsKTsKICAgIEwucHVzaCgnS29udGFrdDogJyArIGsuZmlybWEgKyAnIC8gJyArIGsubmFtZSArICcgLyAnICsgay5lbWFpbCArIChrLnRlbGVmb24gPyAnIC8gJyArIGsudGVsZWZvbiA6ICcnKSk7CiAgICBpZiAoay50ZXJtaW4pIEwucHVzaCgnV3Vuc2NodGVybWluIC8gUHJvamVrdDogJyArIGsudGVybWluKTsKICAgIEwucHVzaCgnJyk7CiAgICBwb3MuZm9yRWFjaCgocHMsIGkpID0+IHsKICAgICAgTC5wdXNoKHBvc0xpbmUocHMsIGkpKTsKICAgICAgTC5wdXNoKCdLb25maWd1cmF0aW9ucy1MaW5rIFBvc2l0aW9uICcgKyAoaSArIDEpICsgJzogJyArIGJ1aWxkU2hhcmVVcmwocHMpKTsKICAgICAgTC5wdXNoKCcnKTsKICAgIH0pOwogICAgLy8gR2VzYW10YmV0cmFnIGRlciBBbmZyYWdlLiBHbGVpY2hlIFF1ZWxsZSB3aWUgZGVyIFdhcmVua29yYiAoY2FydFN1bW1hcnkpLCBkYW1pdAogICAgLy8gQmlsZHNjaGlybSB1bmQgTWFpbCBuaWNodCBhdXNlaW5hbmRlcmxhdWZlbiBrb2VubmVuLgogICAgY29uc3Qgc3VtID0gY2FydFN1bW1hcnkocG9zKTsKICAgIGlmIChzdW0ubWl0UHJlaXMpIHsKICAgICAgTC5wdXNoKCctLS0gR2VzYW10IC0tLScpOwogICAgICBMLnB1c2goJ1N1bW1lICcgKyBzdW0ubWl0UHJlaXMgKyAnICcgKyBwb3NXb3J0KHN1bS5taXRQcmVpcykgKyAnICgnICsgc3VtLnN0dWVjayArICcgU3TDvGNrKTogJyArIGV1cihzdW0uc3VtbWUpICsgJyBFVVInKTsKICAgICAgaWYgKHN1bS5vaG5lUHJlaXMpIEwucHVzaChzdW0ub2huZVByZWlzICsgJyAnICsgcG9zV29ydChzdW0ub2huZVByZWlzKSArICcgYXVmIEFuZnJhZ2UsIG5pY2h0IGluIGRlciBTdW1tZSBlbnRoYWx0ZW4uJyk7CiAgICAgIEwucHVzaCgnJyk7CiAgICB9CiAgICAvLyBOdXIgdmVyc3ByZWNoZW4sIHdhcyBlcyBnaWJ0OiBmdWVyIEJsaW5kZGVja2VsL0tsYW1tZXIgKEFic2Nobml0dCBEKSBleGlzdGllcnQKICAgIC8vIG5vY2gga2VpbmUgYmVtYXNzdGUgWmVpY2hudW5nIC0+IGRhbm4gYXVjaCBrZWluZSBQbGFuc2tpenplIGFua3VlbmRpZ2VuLgogICAgaWYgKHN0YXRlLnR5cCAmJiBwYXJhbXNGb3Ioc3RhdGUpKSBMLnB1c2goJ1BsYW5za2l6emUvRGF0ZW5ibGF0dDogw7xiZXIgZGVuIExpbmsgYWJydWZiYXIgKEJ1dHRvbiAiRGF0ZW5ibGF0dCBhbHMgUERGIikuJyk7CiAgICBpZiAoay5mcmVpdGV4dCkgeyBMLnB1c2goJycpOyBMLnB1c2goJ1NvbmRlcmFuZm9yZGVydW5nZW46ICcgKyBrLmZyZWl0ZXh0KTsgfQogICAgTC5wdXNoKCcnKTsKICAgIEwucHVzaChzdW0ubWl0UHJlaXMKICAgICAgPyAnKERpZSBCZXRyw6RnZSBzdGFtbWVuIGF1cyBkZXIgaGludGVybGVndGVuIFByZWlzbGlzdGUgdm9uIEZpcm1hIFdlaXNzIHVuZCB3ZXJkZW4gbWl0IGRlbSBBbmdlYm90IHZlcmJpbmRsaWNoLiknCiAgICAgIDogJyhQcmVpc2FuZ2FiZW4gZXJmb2xnZW4gZXJzdCBtaXQgZGVtIGluZGl2aWR1ZWxsZW4gQW5nZWJvdCB2b24gRmlybWEgV2Vpc3MuKScpOwogICAgcmV0dXJuIEwuam9pbignXG4nKTsKICB9CgogIGZ1bmN0aW9uIHJmcVNlbmQoKSB7CiAgICBpZiAoIWNvbnRhY3RWYWxpZCgpKSB7CiAgICAgIGNvbnN0IGYgPSAkKCcjd3otZm9ybScpOyBpZiAoZikgeyBjb25zdCBiYWQgPSBzdGF0ZS5rb250YWt0LmZpcm1hLnRyaW0oKSA\\\/IChzdGF0ZS5rb250YWt0Lm5hbWUudHJpbSgpID8gZi5xdWVyeVNlbGVjdG9yKCdbZGF0YS1rPWVtYWlsXScpIDogZi5xdWVyeVNlbGVjdG9yKCdbZGF0YS1rPW5hbWVdJykpIDogZi5xdWVyeVNlbGVjdG9yKCdbZGF0YS1rPWZpcm1hXScpOyBpZiAoYmFkKSB7IGJhZC5jbGFzc0xpc3QuYWRkKCdlcnInKTsgYmFkLmZvY3VzKCk7IH0gfQogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBwb3MgPSBwb3NpdGlvbnNGb3JSZnEoKTsKICAgIGNvbnN0IHN1YmogPSAnUkZRICcgKyAocG9zWzBdID8gcG9zWzBdLmNvZGUgOiAnJykgKyAocG9zLmxlbmd0aCA+IDEgPyAnICsnICsgKHBvcy5sZW5ndGggLSAxKSA6ICcnKSArICcgJyArIHN0YXRlLmtvbnRha3QuZmlybWE7CiAgICBjb25zdCBocmVmID0gJ21haWx0bzonICsgRC5tZXRhLnZlcnRyaWViRW1haWwgKyAnP3N1YmplY3Q9JyArIGVuY29kZVVSSUNvbXBvbmVudChzdWJqKSArICcmYm9keT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGJ1aWxkUmZxQm9keSgpKTsKICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaHJlZjsKICB9CgogIGZ1bmN0aW9uIGJ1aWxkU2hhcmVVcmwoc291cmNlKSB7CiAgICBjb25zdCBzID0gc291cmNlIHx8IHN0YXRlLCBxID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpLCB0dCA9IHR5cE9iaihzLnR5cCk7CiAgICBbJ2Fud2VuZHVuZycsICdub3JtJywgJ3R5cCcsICdyZWloZScsICdncm9lc3NlJ10uZm9yRWFjaChrID0+IHNba10gJiYgcS5zZXQoaywgc1trXSkpOwogICAgaWYgKHMuZ3JvZXNzZTIpIHEuc2V0KCdncm9lc3NlMicsIHMuZ3JvZXNzZTIpOwogICAgLy8gRmxhbnNjaC0vS2xhbW1lci1BdXN3YWhsIChBYnNjaG5pdHQgRCtFKSBtaXQgaW4gZGVuIExpbmssIHNvbnN0IGdlaHQgZGllIGVpbnppZ2UKICAgIC8vIEdyb2Vzc2VuYW5nYWJlIGVpbmVzIEJsaW5kZGVja2Vscy9laW5lciBLbGFtbWVyIGJlaW0gVGVpbGVuIHZlcmxvcmVuLgogICAgaWYgKGlzdE51ckZsYW5zY2godHQpKSB7CiAgICAgIGlmIChzLmZsYW5zY2gpIHEuc2V0KCdmbGFuc2NoJywgcy5mbGFuc2NoKTsKICAgICAgaWYgKGlzdEtsYW1tZXIodHQpKSB7IGlmIChzLmtsYW1tZXJUeXApIHEuc2V0KCdrbGFtbWVydHlwJywgcy5rbGFtbWVyVHlwKTsgaWYgKHMua2xhbW1lcldlcmtzdG9mZikgcS5zZXQoJ2t3ZXJrc3RvZmYnLCBzLmtsYW1tZXJXZXJrc3RvZmYpOyBpZiAocy5rbGFtbWVyTXV0dGVyKSBxLnNldCgna211dHRlcicsIHMua2xhbW1lck11dHRlcik7IH0KICAgIH0KICAgIGlmICh0dCAmJiB0dC5pZCA9PT0gJ0NGJykgewogICAgICBxLnNldCgnY3N0YW5kYXJkJywgcy5jb25uZWN0Tm9ybSk7IGlmIChzLmNvbm5lY3RMYWVuZ2UgIT0gbnVsbCkgcS5zZXQoJ2NsYWVuZ2UnLCBzLmNvbm5lY3RMYWVuZ2UpOwogICAgfQogICAgaWYgKHR0ICYmIHR0LmlkID09PSAnQ0ZJJykgcS5zZXQoJ2NhbnNjaGx1c3MnLCBzLmNvbm5lY3RBbnNjaGx1c3MpOwogICAgaWYgKHR0ICYmIHR0LmlkID09PSAnVEMnICYmIHMua2xhbW1lclR5cCkgcS5zZXQoJ2tsYW1tZXJ0eXAnLCBzLmtsYW1tZXJUeXApOwogICAgcS5zZXQoJ3dlcmtzdG9mZicsIHMud2Vya3N0b2ZmKTsgcS5zZXQoJ29iZXJmbGFlY2hlJywgcy5vYmVyZmxhZWNoZSk7CiAgICBpZiAocy5kaWNodHVuZyAmJiB0eXBPYmoocy50eXApICYmIHR5cE9iaihzLnR5cCkuZGljaHR1bmcpIHEuc2V0KCdkaWNodHVuZycsIHMuZGljaHR1bmcpOwogICAgaWYgKHMuZGljaHR1bmcgJiYgdHQgJiYgdHQuZGljaHR1bmcpIHEuc2V0KCdsaXBwZScsIGVmZkxpcHBlKHMpKTsKICAgIGlmIChBcnJheS5pc0FycmF5KHMubmFjaHdlaXNlKSAmJiBzLm5hY2h3ZWlzZS5sZW5ndGgpIHEuc2V0KCduYWNod2Vpc2UnLCBzLm5hY2h3ZWlzZS5qb2luKCcsJykpOwogICAgaWYgKHMubGFlbmdlVmFyaWFudGUpIHEuc2V0KCdsYWVuZ2UnLCBzLmxhZW5nZVZhcmlhbnRlKTsKICAgIGlmIChzLmV4emVudHJpc2NoKSBxLnNldCgnZXh6JywgJzEnKTsKICAgIC8vIEJhdWZvcm06IEZvcm0gVCBpc3QgZGVyIERlZmF1bHQgdW5kIGJyYXVjaHQga2VpbmVuIFBhcmFtZXRlciwgRm9ybSBUSyB3aXJkCiAgICAvLyBzZWl0IGRlciBNYcOfZnJlaWdhYmUgKEJlcm5kIDI3LjA3LjIwMjYpIG1pdGdldGVpbHQuCiAgICBpZiAodHQgJiYgdHQuZm9ybVdhaGwgJiYgcy5mb3JtVmFyaWFudGUgPT09ICdUSycpIHEuc2V0KCdmb3JtJywgJ1RLJyk7CiAgICBpZiAocy52aWV3ICE9PSAnemVpY2hudW5nJykgcS5zZXQoJ3ZpZXcnLCBzLnZpZXcpOwogICAgcS5zZXQoJ21lbmdlJywgcy5tZW5nZSk7CiAgICAvLyBJbiBkZXIgV29yZFByZXNzLUF1c2dhYmUgbGFldWZ0IGRhcyBXaWRnZXQgYWxzIHNyY2RvYy4gRG9ydCBpc3QKICAgIC8vIGxvY2F0aW9uIGtlaW4gdGVpbGJhcmVyIFNlaXRlbi1MaW5rIChhYm91dDpzcmNkb2MgYnp3LiBlaW5lIGdlZXJidGUgVVJMKSwKICAgIC8vIGRlc2hhbGIgZ2lidCBkYXMgUGx1Z2luIGRpZSBlY2h0ZSBXb3JkUHJlc3MtU2VpdGUgYWxzIFdFSVNTX1NIQVJFX0JBU0UgbWl0LgogICAgLy8gRnVlciBkZW4gc3RhdGlzY2hlbiBFbWJlZCBkaWVudCBkb2N1bWVudC5yZWZlcnJlciBhbHMgRmFsbGJhY2s7IHN0YW5kYWxvbmUKICAgIC8vIGJsZWlidCBlcyBiZWkgZGVyIGFrdHVlbGxlbiBTZWl0ZS4gUXVlcnkgdW5kIEhhc2ggZGVzIFJlZmVycmVycyB3ZXJkZW4KICAgIC8vIGVudGZlcm50LCBkYW1pdCBhbHRlIEtvbmZpZ3VyYXRpb25lbiBuaWNodCBpbmVpbmFuZGVyIHZlcnNjaGFjaHRlbHQgd2VyZGVuLgogICAgbGV0IGJhc2UgPSB3aW5kb3cuV0VJU1NfU0hBUkVfQkFTRSB8fCAnJzsKICAgIGlmICghYmFzZSAmJiBkb2N1bWVudC5yZWZlcnJlcikgewogICAgICB0cnkgeyBjb25zdCB1ID0gbmV3IFVSTChkb2N1bWVudC5yZWZlcnJlcik7IHUuc2VhcmNoID0gJyc7IHUuaGFzaCA9ICcnOyBiYXNlID0gdS50b1N0cmluZygpOyB9IGNhdGNoIChlKSB7fQogICAgfQogICAgaWYgKCFiYXNlKSBiYXNlID0gbG9jYXRpb24ub3JpZ2luICsgbG9jYXRpb24ucGF0aG5hbWU7CiAgICByZXR1cm4gYmFzZSArICc\\\/JyArIHEudG9TdHJpbmcoKTsKICB9CiAgZnVuY3Rpb24gYnVpbGRTaGFyZVRleHQoKSB7CiAgICBjb25zdCBwb3MgPSBwb3NpdGlvbnNGb3JSZnEoKTsKICAgIGlmIChwb3MubGVuZ3RoIDw9IDEpIHJldHVybiBidWlsZFNoYXJlVXJsKHBvc1swXSB8fCBzdGF0ZSk7CiAgICByZXR1cm4gWydXZWlzcyBGaXR0aW5ncy1Lb25maWd1cmF0aW9uZW4nXS5jb25jYXQoCiAgICAgIHBvcy5tYXAoKHBzLCBpKSA9PiAnUG9zaXRpb24gJyArIChpICsgMSkgKyAnOiAnICsgYnVpbGRTaGFyZVVybChwcykpCiAgICApLmpvaW4oJ1xuJyk7CiAgfQogIGZ1bmN0aW9uIGNvcHlEb25lKGJ0bikgewogICAgaWYgKCFidG4pIHJldHVybjsKICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCdvaycpOyBjb25zdCBvcmlnaW5hbCA9IGJ0bi5pbm5lckhUTUw7CiAgICBidG4uaW5uZXJIVE1MID0gaWMoJ2NoZWNrJywgJ2ljJykgKyAnIExpbmsga29waWVydCc7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsgYnRuLmNsYXNzTGlzdC5yZW1vdmUoJ29rJyk7IGJ0bi5pbm5lckhUTUwgPSBvcmlnaW5hbDsgfSwgMTgwMCk7CiAgfQogIGZ1bmN0aW9uIHNob3dTaGFyZUZhbGxiYWNrKHR4dCkgewogICAgbGV0IGJveCA9ICQoJyN3ei1zaGFyZS1mYWxsYmFjaycpOwogICAgaWYgKCFib3gpIHsKICAgICAgYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IGJveC5pZCA9ICd3ei1zaGFyZS1mYWxsYmFjayc7IGJveC5jbGFzc05hbWUgPSAnc2hhcmUtZmFsbGJhY2snOwogICAgICBib3guaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9InNoYXJlLWZhbGxiYWNrLWNhcmQiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSIgYXJpYS1sYWJlbGxlZGJ5PSJ3ei1zaGFyZS10aXRsZSI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ic2hhcmUtZmFsbGJhY2stY2xvc2UiIGRhdGEtYWN0PSJzaGFyZS1jbG9zZSIgYXJpYS1sYWJlbD0iU2NobGllw59lbiI+w5c8L2J1dHRvbj4KICAgICAgICA8YiBpZD0id3otc2hhcmUtdGl0bGUiPkxpbmsgenVtIFRlaWxlbjwvYj48cD5BdXRvbWF0aXNjaGVzIEtvcGllcmVuIGlzdCBpbiBkaWVzZW0gQnJvd3NlciBuaWNodCB2ZXJmw7xnYmFyLiBNYXJraWVyZSBkZW4gVGV4dCB1bmQga29waWVyZSBpaG4uPC9wPgogICAgICAgIDx0ZXh0YXJlYSBpZD0id3otc2hhcmUtdmFsdWUiIHJlYWRvbmx5PjwvdGV4dGFyZWE+PC9kaXY+YDsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChib3gpOwogICAgfQogICAgY29uc3QgZmllbGQgPSAkKCcjd3otc2hhcmUtdmFsdWUnKTsgZmllbGQudmFsdWUgPSB0eHQ7IGJveC5oaWRkZW4gPSBmYWxzZTsgZmllbGQuZm9jdXMoKTsgZmllbGQuc2VsZWN0KCk7CiAgfQogIGZ1bmN0aW9uIGNvcHlUZXh0KHR4dCwgYnRuKSB7CiAgICBjb25zdCBsZWdhY3kgPSAoKSA9PiB7CiAgICAgIGNvbnN0IHRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTsgdGEudmFsdWUgPSB0eHQ7IHRhLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAnJyk7CiAgICAgIHRhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJzsgdGEuc3R5bGUub3BhY2l0eSA9ICcwJzsgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0YSk7IHRhLnNlbGVjdCgpOwogICAgICBsZXQgb2sgPSBmYWxzZTsgdHJ5IHsgb2sgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpID09PSB0cnVlOyB9IGNhdGNoIChlKSB7fSB0YS5yZW1vdmUoKTsKICAgICAgaWYgKG9rKSBjb3B5RG9uZShidG4pOyBlbHNlIHNob3dTaGFyZUZhbGxiYWNrKHR4dCk7CiAgICB9OwogICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQpIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHR4dCkudGhlbigoKSA9PiBjb3B5RG9uZShidG4pLCBsZWdhY3kpOwogICAgZWxzZSBsZWdhY3koKTsKICB9CiAgZnVuY3Rpb24gc2hhcmVUZXh0KHR4dCwgYnRuKSB7CiAgICBpZiAobmF2aWdhdG9yLnNoYXJlKSB7CiAgICAgIG5hdmlnYXRvci5zaGFyZSh7IHRpdGxlOidXZWlzcyBGaXR0aW5ncy1Lb25maWd1cmF0aW9uJywgdGV4dDp0eHQgfSkuY2F0Y2goZXJyID0+IHsKICAgICAgICBpZiAoIWVyciB8fCBlcnIubmFtZSAhPT0gJ0Fib3J0RXJyb3InKSBjb3B5VGV4dCh0eHQsIGJ0bik7CiAgICAgIH0pOwogICAgfSBlbHNlIGNvcHlUZXh0KHR4dCwgYnRuKTsKICB9CgogIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWb2xsYmlsZCArIFpvb20gKi8KICBjb25zdCBmcyA9IHsgb3BlbjogZmFsc2UsIHo6IDEsIHR4OiAwLCB0eTogMCwgZHJhZzogbnVsbCwgcHRzOiBuZXcgTWFwKCksIHBpbmNoOiBudWxsIH07CiAgZnVuY3Rpb24gZnNFbnN1cmUoKSB7CiAgICBpZiAoJCgnI3d6LWZzJykpIHJldHVybjsKICAgIGNvbnN0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgZC5pZCA9ICd3ei1mcyc7IGQuY2xhc3NOYW1lID0gJ3d6LWZzJzsgZC5oaWRkZW4gPSB0cnVlOwogICAgZC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0iZnMtYmFyIj48c3BhbiBjbGFzcz0iZnMtY29kZSIgaWQ9Ind6LWZzLWNvZGUiPjwvc3Bhbj4KICAgICAgPGRpdiBjbGFzcz0icHYtdG9nZ2xlIiBpZD0id3otZnMtdG9nZ2xlIj48L2Rpdj4KICAgICAgPHNwYW4gY2xhc3M9ImZzLWhpbnQiPlppZWhlbi9TY3JvbGxlbiB2ZXJzY2hpZWJ0IMK3IOKMmC9TdHJnICsgU2Nyb2xsZW4gem9vbXQgwrcgRVNDIHNjaGxpZcOfdDwvc3Bhbj4KICAgICAgPGRpdiBjbGFzcz0iZnMtem9vbSI+PGJ1dHRvbiBkYXRhLWFjdD0iZnMtb3V0IiBhcmlhLWxhYmVsPSJ2ZXJrbGVpbmVybiI+4oiSPC9idXR0b24+PHNwYW4gaWQ9Ind6LWZzLXoiPjEwMCAlPC9zcGFuPjxidXR0b24gZGF0YS1hY3Q9ImZzLWluIiBhcmlhLWxhYmVsPSJ2ZXJncsO2w59lcm4iPis8L2J1dHRvbj48YnV0dG9uIGRhdGEtYWN0PSJmcy1yZXNldCIgYXJpYS1sYWJlbD0iWm9vbSB6dXLDvGNrc2V0emVuIj4xOjE8L2J1dHRvbj48L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iZnMtY2xvc2UiIGRhdGEtYWN0PSJmcy1jbG9zZSIgYXJpYS1sYWJlbD0iVm9sbGJpbGQgc2NobGllw59lbiI+JHtpYygnY2xvc2UnLCAnaWMnKX08L2J1dHRvbj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZnMtc3RhZ2UiIGlkPSJ3ei1mcy1zdGFnZSI+PGRpdiBjbGFzcz0iZnMtY2FudmFzIiBpZD0id3otZnMtY2FudmFzIj48L2Rpdj48L2Rpdj5gOwogICAgZC50YWJJbmRleCA9IC0xOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkKTsKICAgIGNvbnN0IHN0ID0gJCgnI3d6LWZzLXN0YWdlJyk7CiAgICBzdC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIGUgPT4gewogICAgICBzdC5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7IGZzLnB0cy5zZXQoZS5wb2ludGVySWQsIFtlLmNsaWVudFgsIGUuY2xpZW50WV0pOwogICAgICBpZiAoZnMucHRzLnNpemUgPT09IDEpIGZzLmRyYWcgPSBbZS5jbGllbnRYIC0gZnMudHgsIGUuY2xpZW50WSAtIGZzLnR5XTsKICAgICAgZWxzZSBpZiAoZnMucHRzLnNpemUgPT09IDIpIHsgY29uc3QgYSA9IFsuLi5mcy5wdHMudmFsdWVzKCldOyBmcy5waW5jaCA9IE1hdGguaHlwb3QoYVswXVswXSAtIGFbMV1bMF0sIGFbMF1bMV0gLSBhWzFdWzFdKSAvIGZzLno7IGZzLmRyYWcgPSBudWxsOyB9CiAgICB9KTsKICAgIHN0LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgZSA9PiB7CiAgICAgIGlmICghZnMucHRzLmhhcyhlLnBvaW50ZXJJZCkpIHJldHVybjsgZnMucHRzLnNldChlLnBvaW50ZXJJZCwgW2UuY2xpZW50WCwgZS5jbGllbnRZXSk7CiAgICAgIGlmIChmcy5wdHMuc2l6ZSA9PT0gMiAmJiBmcy5waW5jaCkgeyBjb25zdCBhID0gWy4uLmZzLnB0cy52YWx1ZXMoKV07IGZzWm9vbShNYXRoLmh5cG90KGFbMF1bMF0gLSBhWzFdWzBdLCBhWzBdWzFdIC0gYVsxXVsxXSkgLyBmcy5waW5jaCk7IH0KICAgICAgZWxzZSBpZiAoZnMuZHJhZykgeyBmcy50eCA9IGUuY2xpZW50WCAtIGZzLmRyYWdbMF07IGZzLnR5ID0gZS5jbGllbnRZIC0gZnMuZHJhZ1sxXTsgZnNBcHBseSgpOyB9CiAgICB9KTsKICAgIGNvbnN0IHVwID0gZSA9PiB7IGZzLnB0cy5kZWxldGUoZS5wb2ludGVySWQpOyBpZiAoZnMucHRzLnNpemUgPCAyKSBmcy5waW5jaCA9IG51bGw7IGlmICghZnMucHRzLnNpemUpIGZzLmRyYWcgPSBudWxsOyB9OwogICAgc3QuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdXApOyBzdC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgdXApOwogICAgc3QuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBlID0+IHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAocGVyZm9ybWFuY2Uubm93KCkgLSAoZnMub3BlbmVkQXQgfHwgMCkgPCAzNTApIHJldHVybjsgICAvLyBUcmFja3BhZC1Nb21lbnR1bSB2b20gT2VmZm5lbiBpZ25vcmllcmVuCiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSBmc1pvb20oZnMueiAqIE1hdGguZXhwKC1lLmRlbHRhWSAqIDAuMDAyMikpOyAgLy8gUGluY2gvQ21kK1Njcm9sbCA9IFpvb20KICAgICAgZWxzZSB7IGZzLnR4IC09IGUuZGVsdGFYOyBmcy50eSAtPSBlLmRlbHRhWTsgZnNBcHBseSgpOyB9ICAgICAgICAgICAgICAgICAgLy8gU2Nyb2xsID0gVmVyc2NoaWViZW4KICAgIH0sIHsgcGFzc2l2ZTogZmFsc2UgfSk7CiAgfQogIGZ1bmN0aW9uIGZzS2V5KGUpIHsgaWYgKGUua2V5ID09PSAnRXNjYXBlJyB8fCBlLmtleSA9PT0gJ0VzYycpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBmc0Nsb3NlKCk7IH0gfQogIGZ1bmN0aW9uIGZzWm9vbSh6KSB7IGZzLnogPSBNYXRoLm1heCgwLjQsIE1hdGgubWluKDgsIHopKTsgZnNBcHBseSgpOyB9CiAgZnVuY3Rpb24gZnNBcHBseSgpIHsKICAgIGNvbnN0IGMgPSAkKCcjd3otZnMtY2FudmFzJyk7IGlmIChjKSBjLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtmeDIoZnMudHgpfXB4LCR7ZngyKGZzLnR5KX1weCkgc2NhbGUoJHtmeDIoZnMueil9KWA7CiAgICBjb25zdCB6bCA9ICQoJyN3ei1mcy16Jyk7IGlmICh6bCkgemwudGV4dENvbnRlbnQgPSBNYXRoLnJvdW5kKGZzLnogKiAxMDApICsgJyAlJzsKICB9CiAgY29uc3QgZngyID0gbiA9PiBNYXRoLnJvdW5kKG4gKiAxMDApIC8gMTAwOwogIGZ1bmN0aW9uIGZzUmVuZGVyKCkgewogICAgY29uc3QgcCA9IHN0YXRlLnR5cCA\\\/IHBhcmFtc0ZvcihzdGF0ZSkgOiBudWxsOyBpZiAoIXApIHJldHVybjsKICAgIGNvbnN0IFIgPSB3aW5kb3cuV2Vpc3NGaXR0aW5nUmVuZGVyOwogICAgY29uc3Qgc3ZnID0gKHN0YXRlLnZpZXcgPT09ICdhbnNpY2h0JyAmJiBSKSA\\\/IFIucmVuZGVyRml0dGluZyhwLCB7IHdpZHRoOiAxMjAwLCBoZWlnaHQ6IDcwMCB9KSA6IFNWRy5yZW5kZXJGaXR0aW5nKHAsIHsgd2lkdGg6IDEyMDAsIGhlaWdodDogNzAwIH0pOwogICAgJCgnI3d6LWZzLWNhbnZhcycpLmlubmVySFRNTCA9IHN2ZzsKICAgICQoJyN3ei1mcy1jb2RlJykudGV4dENvbnRlbnQgPSB0eXBlY29kZShzdGF0ZSk7CiAgICAkKCcjd3otZnMtdG9nZ2xlJykuaW5uZXJIVE1MID0gYDxidXR0b24gY2xhc3M9IiR7c3RhdGUudmlldyA9PT0gJ3plaWNobnVuZycgPyAnc2VsJyA6ICcnfSIgZGF0YS1hY3Q9InZpZXciIGRhdGEtaWQ9InplaWNobnVuZyI+WmVpY2hudW5nPC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iJHtzdGF0ZS52aWV3ID09PSAnYW5zaWNodCcgPyAnc2VsJyA6ICcnfSIgZGF0YS1hY3Q9InZpZXciIGRhdGEtaWQ9ImFuc2ljaHQiPkFuc2ljaHQ8L2J1dHRvbj5gOwogIH0KICBmdW5jdGlvbiBmc09wZW4oKSB7CiAgICBpZiAoIXN0YXRlLnR5cCkgcmV0dXJuOyBmc0Vuc3VyZSgpOwogICAgZnMub3BlbiA9IHRydWU7IGZzLnogPSAxOyBmcy50eCA9IDA7IGZzLnR5ID0gMDsgZnMub3BlbmVkQXQgPSBwZXJmb3JtYW5jZS5ub3coKTsKICAgIGNvbnN0IGQgPSAkKCcjd3otZnMnKTsgZC5oaWRkZW4gPSBmYWxzZTsgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmc0tleSwgdHJ1ZSk7CiAgICBmc1JlbmRlcigpOyBmc0FwcGx5KCk7IGQuZm9jdXMoKTsKICB9CiAgZnVuY3Rpb24gZnNDbG9zZSgpIHsKICAgIGZzLm9wZW4gPSBmYWxzZTsgY29uc3QgZCA9ICQoJyN3ei1mcycpOyBpZiAoZCkgZC5oaWRkZW4gPSB0cnVlOwogICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICcnOwogICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmc0tleSwgdHJ1ZSk7CiAgfQoKICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYW5za2l6emUgLyBEYXRlbmJsYXR0IChBNCkgKi8KICBjb25zdCBmbXRNTSA9IG4gPT4gbiA9PSBudWxsIHx8ICFpc0Zpbml0ZShOdW1iZXIobikpID8gJ2ZvbGd0JyA6IFN0cmluZyhNYXRoLnJvdW5kKE51bWJlcihuKSAqIDEwMCkgLyAxMDApLnJlcGxhY2UoJy4nLCAnLCcpOwogIGZ1bmN0aW9uIGRhdGFzaGVldFJvd3MoKSB7CiAgICBjb25zdCBzID0gc3RhdGUsIHQgPSB0eXBPYmoocy50eXApOyBjb25zdCBvdXQgPSBbXTsKICAgIGlmICghdCkgcmV0dXJuIG91dDsKICAgIC8vIG51ckZsYW5zY2ggKEJsaW5kZGVja2VsL0tsYW1tZXIpOiBFcyBnaWJ0IGtlaW5lIFJlaWhlbnplaWxlIC0gZGllIE1hc3NlIGtvbW1lbgogICAgLy8gYXVzIGZsYW5zY2hncm9lc3Nlbi4gUnVuZGUgNyAoVy0wNTkpOiBNaXQgZGVuIGVjaHRlbiBaZWljaG51bmdlbiBiZWtvbW1lbiBCRC9LTAogICAgLy8gYXVjaCBlaW4gRGF0ZW5ibGF0dC4gRXMgZW50aGFlbHQgbnVyIGJlbGVndGUgTWFzc2U7IHVuYmVsZWd0ZSBGbGFuc2NoZ3JvZXNzZW4KICAgIC8vICgyODYsMS8zMTkvMzM4KSBlcnJlaWNoZW4gZGFzIERhdGVuYmxhdHQgbmljaHQsIHdlaWwgcGFyYW1zRm9yIGRvcnQgbnVsbCBsaWVmZXJ0LgogICAgaWYgKGlzdE51ckZsYW5zY2godCkpIHsKICAgICAgY29uc3QgZiA9IGZsYW5zY2hGb3Iocyk7IGlmICghZikgcmV0dXJuIG91dDsKICAgICAgb3V0LnB1c2goWydOb3JtJywgJ0RJTiAzMjY3NiDCtyBPYmVyZmzDpGNoZW4gbmFjaCBESU4gMTE4NjYnXSk7CiAgICAgIG91dC5wdXNoKFsnQmF1dGVpbCcsIHQubGFiZWxdKTsKICAgICAgb3V0LnB1c2goWydLb25maWd1cmF0aW9ucy1Oci4nLCB0eXBlY29kZShzKV0pOwogICAgICBjb25zdCBhcnRGID0gYXJ0aWNsZU51bWJlcihzKTsgaWYgKGFydEYpIG91dC5wdXNoKFsnQXJ0aWtlbC1Oci4nLCBhcnRGXSk7CiAgICAgIG91dC5wdXNoKFsnRmxhbnNjaC3ijIAnLCBmLmxhYmVsICsgJyBtbSddKTsKICAgICAgaWYgKGlzdEtsYW1tZXIodCkpIHsKICAgICAgICBjb25zdCBrdCA9IGtsYW1tZXJUeXBPYmoocy5rbGFtbWVyVHlwKTsKICAgICAgICBpZiAoa3QpIG91dC5wdXNoKFsnS2xhbW1lcnR5cCcsIGt0LmxhYmVsICsgJyDigJMgJyArIGt0LnN1Yl0pOwogICAgICAgIG91dC5wdXNoKFsnTWHDnyBBJywgZi5rbGFtbWVyQSAmJiBmLmtsYW1tZXJBW3Mua2xhbW1lclR5cF0gIT0gbnVsbCA\\\/IGZtdE1NKGYua2xhbW1lckFbcy5rbGFtbWVyVHlwXSkgKyAnIG1tJyA6ICdhdWYgQW5mcmFnZSddKTsKICAgICAgICBjb25zdCBtdSA9IChELmtsYW1tZXJNdXR0ZXJuIHx8IFtdKS5maW5kKG0gPT4gbS5pZCA9PT0gcy5rbGFtbWVyTXV0dGVyKTsKICAgICAgICBpZiAobXUpIG91dC5wdXNoKFsnTXV0dGVyJywgbXUubGFiZWwgKyAobXUuYXVmcHJlaXMgPyAnIChnZWdlbiBBdWZwcmVpcyknIDogJycpXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0LnB1c2goWydEZWNrZWxzdMOkcmtlIEwnLCBmLmJsaW5kVGhrICE9IG51bGwgPyBmbXRNTShmLmJsaW5kVGhrKSArICcgbW0nIDogJ2F1ZiBBbmZyYWdlJ10pOwogICAgICB9CiAgICAgIG91dC5wdXNoKFsnV2Vya3N0b2ZmJywgZWZmV2Vya3N0b2ZmKHMpIHx8ICdmb2xndCddKTsKICAgICAgLy8gUjItNDogRGllIEtsYW1tZXIgaGF0IGtlaW5lIE9iZXJmbGFlY2hlIC0+IGF1Y2gga2VpbmUgT2JlcmZsYWVjaGVuLVplaWxlIGltIERhdGVuYmxhdHQuCiAgICAgIGlmICghaXN0S2xhbW1lcih0KSkgewogICAgICAgIGNvbnN0IG9vRiA9IEQub2JlcmZsYWVjaGVuLmZpbmQobyA9PiBvLmlkID09PSBzLm9iZXJmbGFlY2hlKTsKICAgICAgICBjb25zdCByYUYgPSBvb0YgJiYgb29GLnJhSW5uZW4gIT0gbnVsbCAmJiBvb0YucmFBdXNzZW4gIT0gbnVsbDsKICAgICAgICBvdXQucHVzaChbJ09iZXJmbMOkY2hlJywgcy5vYmVyZmxhZWNoZSArIChyYUYgPyAnIOKAlCBSYSBpbm5lbiDiiaQnICsgU3RyaW5nKG9vRi5yYUlubmVuKS5yZXBsYWNlKCcuJywgJywnKSArICcgLyBhdcOfZW4g4omkJyArIFN0cmluZyhvb0YucmFBdXNzZW4pLnJlcGxhY2UoJy4nLCAnLCcpICsgJyDCtW0nIDogJycpXSk7CiAgICAgIH0KICAgICAgY29uc3QgbndGID0gcy5uYWNod2Vpc2UubWFwKGlkID0+IG5hY2h3ZWlzTGFiZWxCeUlkKGlkKSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywgJyk7CiAgICAgIG91dC5wdXNoKFsnTmFjaHdlaXNlJywgbndGIHx8ICfigJQnXSk7CiAgICAgIG91dC5wdXNoKFsnTWVuZ2UnLCBzLm1lbmdlICsgJyBTdMO8Y2snXSk7CiAgICAgIGNvbnN0IHBpRiA9IHByaWNlSW5mbyhzKTsKICAgICAgLy8gV2llIHVudGVuOiBzb2xhbmdlIHByZWlzZS5wbGF0emhhbHRlciBnaWx0LCBudXIgImF1ZiBBbmZyYWdlIiAtIGtlaW4gRXVyby1XZXJ0LgogICAgICBvdXQucHVzaChbJ1ByZWlzc3RhdHVzJywgKHBpRi5tb2RlID09PSAnbGl2ZScgJiYgIXBpRi5wbGF0emhhbHRlcikKICAgICAgICA\\\/IGV1cihwaUYuc3R1ZWNrKSArICcg4oKsIC8gU3TDvGNrIMK3IEdlc2FtdCAnICsgZXVyKHBpRi5nZXNhbXQpICsgJyDigqwnCiAgICAgICAgOiAnYXVmIEFuZnJhZ2UnXSk7CiAgICAgIHJldHVybiBvdXQ7CiAgICB9CiAgICBjb25zdCBydyA9IHJvd0ZvcihzKTsKICAgIGlmICghcncpIHJldHVybiBvdXQ7CiAgICBjb25zdCBub3JtVGV4dCA9IHQuaWQgPT09ICdDRicKICAgICAgPyAoRC5tYXNzZS5jb25uZWN0LmNmLnJlaWhlbltzLmNvbm5lY3ROb3JtXSB8fCB7fSkubGFiZWwKICAgICAgOiB0LmlkID09PSAnQ0ZJJyA\\\/IEQubWFzc2UuY29ubmVjdC5jZmkubm9ybQogICAgICA6IEQubm9ybWVuLmZpbmQobiA9PiBuLmlkID09PSBzLm5vcm0pLmxhYmVsICsgJyDCtyBPYmVyZmzDpGNoZW4gbmFjaCBESU4gMTE4NjYnOwogICAgb3V0LnB1c2goWydOb3JtJywgbm9ybVRleHRdKTsKICAgIG91dC5wdXNoKFsnQmF1dGVpbCcsIHQubGFiZWxdKTsKICAgIG91dC5wdXNoKFsnS29uZmlndXJhdGlvbnMtTnIuJywgdHlwZWNvZGUocyldKTsKICAgIGNvbnN0IHByb2R1a3RBcnQgPSBhcnRpY2xlTnVtYmVyKHMpOyBpZiAocHJvZHVrdEFydCkgb3V0LnB1c2goWydBcnRpa2VsLU5yLicsIHByb2R1a3RBcnRdKTsKICAgIG91dC5wdXNoKFsnR3LDtsOfZScsIGxibChydykgKyAoaXNDb25uZWN0KHQpID8gJycgOiAnIChSZWloZSAnICsgcy5yZWloZSArICcpJyldKTsKICAgIGlmIChpc0Nvbm5lY3QodCkpIHsKICAgICAgb3V0LnB1c2goWydUeXAnLCB0LmlkXSk7CiAgICAgIG91dC5wdXNoKFsnRGUgLyBEaScsIGZtdE1NKHJ3LkRlKSArICcgLyAnICsgZm10TU0ocncuRGkpICsgJyBtbSddKTsKICAgICAgaWYgKHQuaWQgPT09ICdDRicpIHsKICAgICAgICBvdXQucHVzaChbJ0RmJywgZm10TU0ocncuRGYpICsgJyBtbSddKTsKICAgICAgICBvdXQucHVzaChbJ0VpbmJhdWzDpG5nZSBMJywgZm10TU0ocy5jb25uZWN0TGFlbmdlKSArICcgbW0nXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgZW5kID0gY29ubmVjdEVuZEZvcihzLCBydyk7CiAgICAgICAgY29uc3QgdXBwZXIgPSBELm1hc3NlLmNvbm5lY3QuY2ZpLm9iZXJlckFuc2NobHVzczsKICAgICAgICBvdXQucHVzaChbJ1JvaHJhbnNjaGx1c3MnLCBzLmNvbm5lY3RBbnNjaGx1c3MgPT09ICdUQycgPyAnVHJpLUNsYW1wJyA6ICdCdXR0IFdlbGQnXSk7CiAgICAgICAgb3V0LnB1c2goWydZIC8gTCcsIGZtdE1NKHJ3LlkpICsgJyAvICcgKyBmbXRNTShlbmQgJiYgZW5kLkwpICsgJyBtbSddKTsKICAgICAgICBvdXQucHVzaChbcy5jb25uZWN0QW5zY2hsdXNzID09PSAnVEMnID8gJ1RDJyA6ICdBJywgZm10TU0oZW5kICYmIChzLmNvbm5lY3RBbnNjaGx1c3MgPT09ICdUQycgPyBlbmQuVEMgOiBlbmQuQSkpICsgJyBtbSddKTsKICAgICAgICBvdXQucHVzaChbJ09iZXJlciBBbnNjaGx1c3MgRGUgLyBEaScsIGZtdE1NKHVwcGVyLkRlKSArICcgLyAnICsgZm10TU0odXBwZXIuRGkpICsgJyBtbSddKTsKICAgICAgfQogICAgICBpZiAoIXByb2R1a3RBcnQpIG91dC5wdXNoKFsnQXJ0aWtlbC1Oci4nLCAnd2lyZCB2b24gRmlybWEgV2Vpc3MgZXJnw6RuenQnXSk7CiAgICB9IGVsc2UgewogICAgLy8gb2RPZjogVENEIC0+IGF1c3NlbkQgKGRpY2t3YW5kaWcpLCBzb25zdCB0dWJlT0QuIERhcyBEYXRlbmJsYXR0IGlzdCBlaW4gS3VuZGVuZG9rdW1lbnQgLQogICAgLy8gaGllciBzdGFuZCBtaXQgcncudHViZU9EIGZ1ZXIgVENEICJ1bmRlZmluZWQiIGJ6dy4gZGFzIGR1ZW5ud2FuZGlnZSBNYXNzLgogICAgb3V0LnB1c2goWydSb2hyIOKMgCDDlyBXYW5kc3TDpHJrZScsIGZtdE1NKG9kT2YocncpKSArICcgw5cgJyArIGZtdE1NKHdhbGxPZihydykpICsgJyBtbSddKTsKICAgIGlmICh0Lm5vcm0gPT09ICdkaW4zMjY3NicgJiYgcncuZmxhbmdlT0QpIG91dC5wdXNoKFsnS2xlbW0tL0ZsYW5zY2gt4oyAJywgZm10TU0ocncuZmxhbmdlT0QpICsgJyBtbSddKTsKICAgIC8vIGxhZW5nZU9mIHN0YXR0IHN2Z1R5cGUtQWJmcmFnZTogVENEIGhhdCBrZWluIEtLL0tMLCBzb25kZXJuIGRpZSBIb2VoZSA2MCBtbS4KICAgIC8vIFVlYmVyIGRlbiBzdmdUeXBlIHN0YW5kIGhpZXIgIlN0dXR6ZW5sw6RuZ2UgKEtLKTogdW5kZWZpbmVkIG1tIi4KICAgIGNvbnN0IGxnRCA9IGxhZW5nZU9mKHQsIHJ3LCBzLmxhZW5nZVZhcmlhbnRlKTsKICAgIGlmIChsZ0QpIG91dC5wdXNoKFtsZ0QudGV4dCwgZm10TU0obGdELndlcnQpICsgJyBtbScgKyAobGdELmxhYmVsID09PSAnaCcgPyAnIChTdGFuZGFyZCB2b24gRmlybWEgV2Vpc3MpJyA6ICcnKV0pOwogICAgaWYgKHQuc3ZnVHlwZSA9PT0gJ2JsaW5ka2FwcGUnKSBvdXQucHVzaChbJ0RlY2tlbHN0w6Rya2UnLCAnZm9sZ3QnXSk7CiAgICBpZiAoaXNCZW5kKHQpKSB7CiAgICAgIG91dC5wdXNoKFsnQmllZ2VyYWRpdXMgUicsIGZtdE1NKHJ3LlIpICsgJyBtbSddKTsKICAgICAgb3V0LnB1c2goW3QuYm9nZW4gPT09IDQ1ID8gJ0dlc2FtdG1hw58gTDInIDogJ0dlc2FtdG1hw58gTDEnLCBmbXRNTSh0LmJvZ2VuID09PSA0NSA\\\/IHJ3LkwyIDogcncuTDEpICsgJyBtbSddKTsKICAgICAgb3V0LnB1c2goWydHZXJhZGVzIEVuZGUgTDMnLCBmbXRNTSh0LmJvZ2VuID09PSA0NSA\\\/IHJ3LkwzXzQ1IDogcncuTDNfOTApICsgJyBtbSddKTsKICAgIH0KICAgIGlmICh0Lnp3ZWl0ZUdyb2Vzc2UpIHsgY29uc3QgcjIgPSByb3cyRm9yKHMpOyBpZiAocjIpIG91dC5wdXNoKFt0LnN2Z1R5cGUgPT09ICdyZWR1emllcnVuZycgPyAnUmVkdXppZXJ0IGF1ZicgOiAnQWJnYW5nJywgbGJsKHIyKSArICcgwrcg4oyAICcgKyBmbXRNTShvZE9mKHIyKSkgKyAnIG1tJ10pOyB9CiAgICBpZiAodC5pZCA9PT0gJ1InKSB7IGNvbnN0IHBhaXIgPSByZWR1Y3Rpb25QYWlyKHMpOyBpZiAocGFpcikgb3V0LnB1c2goWydCYXVsw6RuZ2UgTCcsIGZtdE1NKHBhaXIuTCkgKyAnIG1tJ10pOyB9CiAgICBpZiAodC5leHplbnRyaXNjaFdhaGwpIG91dC5wdXNoKFsnQmF1Zm9ybScsIHMuZXh6ZW50cmlzY2ggPyAnZXh6ZW50cmlzY2ggKEZvcm0gUkUpJyA6ICdrb256ZW50cmlzY2ggKEZvcm0gUkspJ10pOwogICAgLy8gUjMtMy9SMy00OiBCYXVmb3JtIGRlciBULVN0w7xja2UgaW5zIERhdGVuYmxhdHQuIERhcyBMYXVmbWHDnyAoIkxhdWYiID0gTCBnZXNhbXQgPQogICAgLy8gMsOXIEwwKSBoZWnDn3Qgc2VpdCBCZXJuZHMgVm9yZ2FiZSB2b20gMjcuMDcuMjAyNiBudXIgbm9jaCAiTCIgLSBzbyBzdGVodCBlcyBhdWNoCiAgICAvLyBpbiBkZXIgWmVpY2hudW5nLiBIaWVyIHN0ZWh0IG51ciBkaWUgZ2V3w6RobHRlIEZvcm0sIGtlaW4gTWHDny4KICAgIGlmICh0LmZvcm1XYWhsKSBvdXQucHVzaChbJ0JhdWZvcm0nLCBzLmZvcm1WYXJpYW50ZSA9PT0gJ1RLJyA\\\/ICdGb3JtIFRLIChEdXJjaGdhbmcgZ2xlaWNoLCBBYmdhbmcga3VyeiknIDogJ0Zvcm0gVCAoYWxsZSBBYmfDpG5nZSBnbGVpY2ggbGFuZyknXSk7CiAgICBpZiAodC5pZCA9PT0gJ1RTJyB8fCB0LmlkID09PSAnVFNSJykgewogICAgICAvLyBNYXNzcXVlbGxlOiBUUyAtPiBEdXJjaGdhbmdzemVpbGUsIFRTUiAtPiBiZWxlZ3RlcyBQYWFyIChMMi9MMSB2YXJpaWVyZW4gamUgQWJ6d2VpZykuCiAgICAgIC8vIE9obmUgUXVlbGxlIGJsZWliZW4gZGllIFplaWxlbiB3ZWcsIHN0YXR0IGVpbiAiZm9sZ3QiIHp1IGJlaGF1cHRlbi4KICAgICAgY29uc3Qgc3JjID0gdC5pZCA9PT0gJ1RTUicgPyB0U3R1ZWNrUGFpcihzKSA6IHJ3OwogICAgICBpZiAoc3JjKSB7CiAgICAgICAgb3V0LnB1c2goWydMMCcsIGZtdE1NKHNyYy5MMCkgKyAnIG1tJ10pOwogICAgICAgIC8vIEJlcm5kIDI3LjA3LjIwMjY6ICJCZWkgTGF1ZiBudXIgTCBzY2hyZWliZW4uIiAodm9yaGVyICJMYXVmIEwiKQogICAgICAgIG91dC5wdXNoKFsnTCcsIGZtdE1NKHNyYy5MKSArICcgbW0nXSk7CiAgICAgICAgLyogRm9ybSBUIGJlbWFzc3QgZGVuIEFiZ2FuZyBtaXQgTDIsIEZvcm0gVEsgbWl0IGRlbSBXZXJ0IGF1cyBTcGFsdGUgTDEKICAgICAgICAgKiAoQmVybmQgMjcuMDcuMjAyNikuIERhcyBLw7xyemVsIGZvbGd0IGpldHp0IGRlciBCYXVmb3JtOiBiZWkgRm9ybSBUSyBzdGFuZAogICAgICAgICAqIGhpZXIgIkFiZ2FuZyBMMiIgdW5kIGRpcmVrdCBkYXJ1bnRlciBkaWVzZWxiZSBaYWhsIG5vY2ggZWlubWFsIGFscyAiTDEiIC0KICAgICAgICAgKiBkYXMgRGF0ZW5ibGF0dCB3aWRlcnNwcmFjaCBzaWNoIHNlbGJzdC4gQmVpIEZvcm0gVEsgdHLDpGd0IGRpZSBBYmdhbmdzemVpbGUKICAgICAgICAgKiBkZXNoYWxiIGRpZSBUYWJlbGxlbnNwYWx0ZSBMMSBzYW10IFRvbGVyYW56IHVuZCBkaWUgRXh0cmEtWmVpbGUgZW50ZsOkbGx0OwogICAgICAgICAqIGJlaSBGb3JtIFQgYmxlaWJ0IEwyIGRpZSBBYmdhbmdzemVpbGUgdW5kIEwxIGRpZSB6dXPDpHR6bGljaGUgU3BhbHRlLiAqLwogICAgICAgIGlmIChzLmZvcm1WYXJpYW50ZSA9PT0gJ1RLJykgewogICAgICAgICAgLyogT2huZSBiZWxlZ3RlIFNwYWx0ZSBMMSAoU3RyaWNoIGluIGRlciBXZWlzcy1UYWJlbGxlKSBnaWJ0IGVzIEtFSU4gQWJnYW5nc21hw58uCiAgICAgICAgICAgKiB0a0FiZ2FuZygpIHNldHp0IGRvcnQgbmFjaCBCZXJuZHMgUmVnZWwgMCAtIGFscyBnZWRydWNrdGUgTWHDn3phaGwgaW0KICAgICAgICAgICAqIEt1bmRlbmRva3VtZW50IHfDpHJlIGRhcyBlaW5lIGVyZnVuZGVuZSBOdWxsLiBEZXNoYWxiICJmb2xndCIuIERpZXNlIEdyw7bDn2VuCiAgICAgICAgICAgKiBlcnJlaWNoZW4gZGFzIERhdGVuYmxhdHQgaGV1dGUgb2huZWhpbiBuaWNodCAocGFyYW1zRm9yIGxpZWZlcnQgdm9yaGVyIG51bGwpLAogICAgICAgICAgICogZGVyIFNjaHV0eiBnZWjDtnJ0IHRyb3R6ZGVtIGFuIGRpZSBTdGVsbGUsIGRpZSBkaWUgWmVpbGUgZXJ6ZXVndC4gKi8KICAgICAgICAgIG91dC5wdXNoKFsnQWJnYW5nIEwxJywgc3JjLkwxICE9IG51bGwgPyBTdHJpbmcoc3JjLkwxKSArICcgbW0nIDogJ2ZvbGd0J10pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvdXQucHVzaChbJ0FiZ2FuZyBMMicsIGZtdE1NKGFiZ2FuZ0wyKHMsIHNyYykpICsgJyBtbSddKTsKICAgICAgICAgIGlmIChzcmMuTDEpIG91dC5wdXNoKFsnTDEnLCBzcmMuTDEgKyAnIG1tJ10pOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgfQogICAgLyogVHlwIEQgKEJhdXRlaWwgRGljaHR1bmcpOiBFZGVsc3RhaGwtV2Vya3N0b2ZmIHVuZCBPYmVyZmxhZWNoZSBnZWhvZXJlbiBuaWNodAogICAgICogaW5zIERhdGVuYmxhdHQgZWluZXIgR3VtbWktL1BURkUtRGljaHR1bmcgKEJlcm5kIDExLjA4LjIwMjYpLiBTdGF0dGRlc3NlbgogICAgICogc3RlaGVuIGRvcnQgZGllIGJlaWRlbiBNYXNzZSwgZGllIGRpZSBEaWNodHVuZyB3aXJrbGljaCBiZXNjaHJlaWJlbiAtIHVuZAogICAgICogZGVyIElubmVuLcOYIEMgaGFlbmd0IGFtIERpY2h0dW5nc3dlcmtzdG9mZiwgc2llaGUgZGljaHR1bmdJbm5lbkQoKS4gKi8KICAgIGlmIChpc3REaWNodHVuZ0JhdXRlaWwodCkpIHsKICAgICAgaWYgKHJ3ICYmIHJ3Lmdhc2tldE9EICE9IG51bGwpIG91dC5wdXNoKFsnRGljaHR1bmdzLUF1w59lbi3ijIAgRScsIGZtdE1NKHJ3Lmdhc2tldE9EKSArICcgbW0nXSk7CiAgICAgIGNvbnN0IGNEID0gZGljaHR1bmdJbm5lbkQocywgcncpOwogICAgICBpZiAoY0QgIT0gbnVsbCkgb3V0LnB1c2goWydEaWNodHVuZ3MtSW5uZW4t4oyAIEMnLCBmbXRNTShjRCkgKyAnIG1tJ10pOwogICAgfSBlbHNlIHsKICAgICAgb3V0LnB1c2goWydXZXJrc3RvZmYnLCBzLndlcmtzdG9mZiArICcgKCcgKyAocy53ZXJrc3RvZmYgPT09ICcxLjQ0MzUnID8gJ1gyQ3JOaU1vMTgtMTQtMycgOiAnWDJDck5pTW8xNy0xMi0yJykgKyAnKSddKTsKICAgICAgY29uc3Qgb28gPSBELm9iZXJmbGFlY2hlbi5maW5kKG8gPT4gby5pZCA9PT0gcy5vYmVyZmxhZWNoZSk7CiAgICAgIC8vIFNpZWhlIFJGUS1NYWlsOiBSYSBudXIgYmVpIGJlc3RhZXRpZ3RlbiBXZXJ0ZW4uIEgxIGhhdCBrZWluZW4gZmVzdGVuIFJhLUdyZW56d2VydAogICAgICAvLyAocmFJbm5lbi9yYUF1c3NlbiA9IG51bGwpIC0+IGluIGRlciBQbGFuc2tpenplIHN0ZWh0IGRhbm4gbnVyICJIMSIuCiAgICAgIGNvbnN0IHJhT2syID0gb28gJiYgb28ucmFJbm5lbiAhPSBudWxsICYmIG9vLnJhQXVzc2VuICE9IG51bGw7CiAgICAgIG91dC5wdXNoKFsnT2JlcmZsw6RjaGUnLCBzLm9iZXJmbGFlY2hlICsgKHJhT2syID8gJyDigJQgUmEgaW5uZW4g4omkJyArIFN0cmluZyhvby5yYUlubmVuKS5yZXBsYWNlKCcuJywgJywnKSArICcgLyBhdcOfZW4g4omkJyArIFN0cmluZyhvby5yYUF1c3NlbikucmVwbGFjZSgnLicsICcsJykgKyAnIMK1bScgOiAnJyldKTsKICAgIH0KICAgIC8vIEtvbmZvcm1pdGFldHMtWnVzYXR6IGZvbGd0IGRlciBBbndlbmR1bmcgKEJlcm5kIDExLjA4LjIwMjYpLCBmcnVlaGVyIHN0YW5kIGhpZXIKICAgIC8vIGZ1ZXIgYWxsZSB2aWVyIEFud2VuZHVuZ2VuICJVU1AgQ2xhc3MgVkkiLgogICAgaWYgKHQuZGljaHR1bmcgJiYgcy5kaWNodHVuZykgewogICAgICBjb25zdCBkZCA9IGRpY2h0T2JqKHMuZGljaHR1bmcpLCBmayA9IGZkYUt1cnpUZXh0KCk7CiAgICAgIG91dC5wdXNoKFsnRGljaHR1bmcnLCBkZC5sYWJlbCArIChkZC5mZGEgPT09IHRydWUgPyAnIMK3IEZEQScgOiAnJykgKyAoKGRkLnVzcFZJID09PSB0cnVlICYmIGZrKSA\\\/ICcgwrcgJyArIGZrIDogJycpXSk7CiAgICB9CiAgICAvLyBEcnVja3N0YWZmZWwgZ2lsdCBmdWVyIGRpZSBEVUVOTldBTkRJR0UgRElOLTMyNjc2LVJlaWhlIChTdGFmZmVsIG5hY2ggUm9oci1BRCkuCiAgICAvLyBGdWVyIGRlbiBkaWNrd2FuZGlnZW4gVENEIChrZWluIHR1YmVPRCkgbGllZ3Qga2VpbmUgRHJ1Y2thbmdhYmUgdm9yIC0+ICJmb2xndCIuCiAgICAvLyBEZW4gZGlja3dhbmRpZ2VuIGF1c3NlbkQgaW4gZGllc2UgU3RhZmZlbCB6dSBzdGVja2VuIHdhZXJlIGdlcmF0ZW4gKHVuZCB3ZWljaHQKICAgIC8vIHRlaWx3ZWlzZSBhYiwgei4gQi4gVENEL0RONDA6IGF1c3NlbkQgNDYgLT4gMTYgYmFyIHZzLiBkdWVubndhbmRpZyDijIA0MSAtPiAyNSBiYXIpLgogICAgLy8gRGVyIFRlbXBlcmF0dXJiZXJlaWNoIGhhZW5ndCBkYWdlZ2VuIG5pY2h0IGFtIEFELCBzb25kZXJuIGFuIEtsYW1tZXIvRGljaHR1bmcKICAgIC8vIChELmVpbnNhdHoudGVtcEhpbndlaXMpIHVuZCBnaWx0IGZ1ZXIgZGllIENsYW1wdmVyYmluZHVuZyBuYWNoIERJTiAzMjY3NiBnZW5lcmVsbC4KICAgIGlmICh0LmlkID09PSAnVEMnICYmIEQuZWluc2F0eiAmJiBELmVpbnNhdHouZHJ1Y2tCYW5kcykgewogICAgICBjb25zdCBlYiA9IHJ3LnR1YmVPRCAhPSBudWxsID8gRC5laW5zYXR6LmRydWNrQmFuZHMuZmluZChiID0+IHJ3LnR1YmVPRCA8PSBiLmFkTWF4KSA6IG51bGw7CiAgICAgIG91dC5wdXNoKFsnWnVsw6Rzc2lnZXIgRHJ1Y2snLCBlYgogICAgICAgID8gJ2JpcyAnICsgZWIuYmFyICsgJyBiYXIgKCcgKyBTdHJpbmcoZWIubXBhKS5yZXBsYWNlKCcuJywgJywnKSArICcgTVBhKSBuYWNoIERJTiAzMjY3NicKICAgICAgICA6ICdmb2xndCddKTsKICAgICAgb3V0LnB1c2goWydUZW1wZXJhdHVyYmVyZWljaCcsIEQuZWluc2F0ei50ZW1wTWluICsgJyBiaXMgJyArIEQuZWluc2F0ei50ZW1wTWF4ICsgJyDCsEMgwrcgJyArIEQuZWluc2F0ei50ZW1wSGlud2Vpc10pOwogICAgfQogICAgY29uc3QgbncgPSBzLm5hY2h3ZWlzZS5tYXAoaWQgPT4gbmFjaHdlaXNMYWJlbEJ5SWQoaWQpKS5maWx0ZXIoQm9vbGVhbikuam9pbignLCAnKTsKICAgIG91dC5wdXNoKFsnTmFjaHdlaXNlJywgbncgfHwgJ+KAlCddKTsKICAgIG91dC5wdXNoKFsnTWVuZ2UnLCBzLm1lbmdlICsgJyBTdMO8Y2snXSk7CiAgICBjb25zdCBwaSA9IHByaWNlSW5mbyhzKTsKICAgIC8vIERhcyBEYXRlbmJsYXR0IGlzdCBlaW4gaGVydW50ZXJsYWRiYXJlcyBLdW5kZW5kb2t1bWVudCAtPiBoaWVyIGRhcmYgTklFIGVpbmUKICAgIC8vIFBsYXR6aGFsdGVyLVphaGwgc3RlaGVuLiBTb2xhbmdlIHByZWlzZS5wbGF0emhhbHRlciBnaWx0LCBudXIgIlJpY2h0cHJlaXMgZm9sZ3QiCiAgICAvLyAoZ2xlaWNoZSBMb2dpayB3aWUgVm9yc2NoYXUgdW5kIEFuZnJhZ2UtTWFpbCkuIEtlaW4gRXVyby1XZXJ0LCBrZWluIFN1ZmZpeC4KICAgIG91dC5wdXNoKFsnUHJlaXNzdGF0dXMnLCAocGkubW9kZSA9PT0gJ2xpdmUnICYmICFwaS5wbGF0emhhbHRlcikKICAgICAgPyBldXIocGkuc3R1ZWNrKSArICcg4oKsIC8gU3TDvGNrIMK3IEdlc2FtdCAnICsgZXVyKHBpLmdlc2FtdCkgKyAnIOKCrCcKICAgICAgOiAnYXVmIEFuZnJhZ2UnXSk7CiAgICByZXR1cm4gb3V0OwogIH0KICBmdW5jdGlvbiBidWlsZERhdGFzaGVldChza2lwUHJpbnQpIHsKICAgIGNvbnN0IHAgPSBzdGF0ZS50eXAgPyBwYXJhbXNGb3Ioc3RhdGUpIDogbnVsbDsgaWYgKCFwKSByZXR1cm47CiAgICBsZXQgZHMgPSAkKCcjd3otZHMnKTsgaWYgKCFkcykgeyBkcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBkcy5pZCA9ICd3ei1kcyc7IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZHMpOyB9CiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKCdkZS1ERScpOwogICAgY29uc3QgdCA9IHR5cE9iaihzdGF0ZS50eXApOwogICAgY29uc3Qgbm9ybVJlZiA9IHQgJiYgdC5pZCA9PT0gJ0NGJyA\\\/IChELm1hc3NlLmNvbm5lY3QuY2YucmVpaGVuW3N0YXRlLmNvbm5lY3ROb3JtXSB8fCB7fSkubGFiZWwKICAgICAgOiB0ICYmIHQuaWQgPT09ICdDRkknID8gRC5tYXNzZS5jb25uZWN0LmNmaS5ub3JtCiAgICAgIDogc3RhdGUubm9ybSA9PT0gJ2RpbjMyNjc2JyA\\\/ICdESU4gMzI2NzYgwrcgRElOIDExODY2JyA6ICdESU4gMTE4NjUgwrcgRElOIDExODY2JzsKICAgIGNvbnN0IHJvd3MgPSBkYXRhc2hlZXRSb3dzKCkubWFwKChbaywgdl0pID0+IGA8dHI+PHRkPiR7ZXNjKGspfTwvdGQ+PHRkPiR7ZXNjKHYpfTwvdGQ+PC90cj5gKS5qb2luKCcnKTsKICAgIGNvbnN0IFIgPSB3aW5kb3cuV2Vpc3NGaXR0aW5nUmVuZGVyOwogICAgZHMuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9ImRzLWhlYWQiPgogICAgICA8ZGl2IGNsYXNzPSJkcy1icmFuZCI+PHNwYW4gY2xhc3M9Im1hcmsiPjwvc3Bhbj48c3Bhbj48Yj5XRUlTUzwvYj48aT5BcHBhcmF0ZWJhdSDCtyBTdGVyaWx0ZWNobmlrPC9pPjwvc3Bhbj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZHMtbWV0YSI+PGI+UGxhbnNraXp6ZSAvIERhdGVuYmxhdHQ8L2I+PHNwYW4+JHtlc2ModHlwZWNvZGUoc3RhdGUpKX08L3NwYW4+PHNwYW4+JHt0b2RheX08L3NwYW4+PC9kaXY+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImRzLWRyYXciPiR7U1ZHLnJlbmRlckZpdHRpbmcocCwgeyB3aWR0aDogNzYwLCBoZWlnaHQ6IDQzMCB9KX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZHMtZ3JpZCI+PGRpdiBjbGFzcz0iZHMtcmVuZGVyIj4ke1IgPyBSLnJlbmRlckZpdHRpbmcocCwgeyB3aWR0aDogNTIwLCBoZWlnaHQ6IDM0MCB9KSA6ICcnfTwvZGl2PgogICAgICA8dGFibGUgY2xhc3M9ImRzLXRhYmxlIj48dGJvZHk+JHtyb3dzfTwvdGJvZHk+PC90YWJsZT48L2Rpdj4KICAgICAgPHRhYmxlIGNsYXNzPSJkcy10aXRsZWJsb2NrIj48dGJvZHk+PHRyPgogICAgICAgIDx0ZD48aT5aZWljaG51bmdzLU5yLjwvaT48Yj4ke2VzYyh0eXBlY29kZShzdGF0ZSkpfTwvYj48L3RkPgogICAgICAgIDx0ZD48aT5EYXR1bTwvaT48Yj4ke3RvZGF5fTwvYj48L3RkPgogICAgICAgIDx0ZD48aT5NYcOfc3RhYjwvaT48Yj5vaG5lIE1hw59zdGFiPC9iPjwvdGQ+CiAgICAgICAgPHRkPjxpPkVpbmhlaXQ8L2k+PGI+bW08L2I+PC90ZD4KICAgICAgICA8dGQ+PGk+Tm9ybWJlenVnPC9pPjxiPiR7ZXNjKG5vcm1SZWYpfTwvYj48L3RkPgogICAgICA8L3RyPjwvdGJvZHk+PC90YWJsZT4KICAgICAgPHAgY2xhc3M9ImRzLW5vdGUiPlVudmVyYmluZGxpY2hlIFBsYW5za2l6emUgYXVzIGRlbSBXZWlzcyBGaXR0aW5ncy1Lb25maWd1cmF0b3IsIFNjaHJpZnRmZWxkIGFuZ2VsZWhudCBhbiBESU4gRU4gSVNPIDcyMDAuIE1hw59lIHNpbmQgUmljaHR3ZXJ0ZSBiaXMgenVyIEF1ZnRyYWdzYmVzdMOkdGlndW5nIOKAlCB2ZXJiaW5kbGljaGUgRmVydGlndW5nc3plaWNobnVuZyB1bmQgQXVzbGVndW5nIGR1cmNoIFdlaXNzIEFwcGFyYXRlYmF1LiBBbGxlIE1hw59lIGluIG1tLjwvcD5gOwogICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCd3ei1wcmludGluZycpOwogICAgaWYgKHNraXBQcmludCkgcmV0dXJuOwogICAgY29uc3QgZG9uZSA9ICgpID0+IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnd3otcHJpbnRpbmcnKTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdhZnRlcnByaW50JywgZG9uZSwgeyBvbmNlOiB0cnVlIH0pOwogICAgd2luZG93LnByaW50KCk7CiAgfQoKICBmdW5jdGlvbiBzb25kZXJBbmZyYWdlKCkgewogICAgY29uc3QgdCA9IHR5cE9iaihzdGF0ZS50eXApOwogICAgY29uc3Qgc3ViaiA9ICdBbmZyYWdlIFNvbmRlcmFibWVzc3VuZycgKyAodCA\\\/ICcgJyArIHQubGFiZWwgOiAnJykgKyAoc3RhdGUuZ3JvZXNzZSA\\\/ICcgJyArIGxibChyb3dGb3Ioc3RhdGUpKSA6ICcnKTsKICAgIGNvbnN0IGJvZHkgPSBbJ0FuZnJhZ2UgZsO8ciBlaW5lIFNvbmRlcmFibWVzc3VuZyDDvGJlciBkZW4gV2Vpc3MgRml0dGluZ3MtS29uZmlndXJhdG9yJywgJycsCiAgICAgICdCYXNpcy1Lb25maWd1cmF0aW9uOicsIHN0YXRlLnR5cCA\\\/IHR5cGVjb2RlKHN0YXRlKSA6ICcobm9jaCBrZWluZSBnZXfDpGhsdCknLCAnJywKICAgICAgJ0dld8O8bnNjaHRlIEFid2VpY2h1bmcgLyBTb25kZXJtYcOfOicsICcgICcsICcnLCAnS29udGFrdCAoRmlybWEgLyBOYW1lIC8gRS1NYWlsKTonLCAnICAnXS5qb2luKCdcbicpOwogICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnbWFpbHRvOicgKyBELm1ldGEudmVydHJpZWJFbWFpbCArICc\\\/c3ViamVjdD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHN1YmopICsgJyZib2R5PScgKyBlbmNvZGVVUklDb21wb25lbnQoYm9keSk7CiAgfQoKICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV2ZW50cyAqLwogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgIGNvbnN0IGIgPSBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1hY3RdJyk7IGlmICghYiB8fCBiLmRpc2FibGVkKSByZXR1cm47CiAgICBjb25zdCBhY3QgPSBiLmdldEF0dHJpYnV0ZSgnZGF0YS1hY3QnKSwgaWQgPSBiLmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcpOwogICAgc3dpdGNoIChhY3QpIHsKICAgICAgY2FzZSAnYW53ZW5kdW5nJzogc2V0QW53ZW5kdW5nKGlkKTsgaWYgKHN0YXRlLnN0ZXAgPT09IDEpIG5leHRTdGVwKCk7IGJyZWFrOwogICAgICBjYXNlICdub3JtJzogc2V0Tm9ybShpZCk7IGlmIChzdGF0ZS5zdGVwID09PSAyKSBuZXh0U3RlcCgpOyBicmVhazsKICAgICAgY2FzZSAndHlwJzogc2V0VHlwKGlkKTsgaWYgKHN0YXRlLnN0ZXAgPT09IDMpIG5leHRTdGVwKCk7IGJyZWFrOwogICAgICBjYXNlICdyZWloZSc6IHNldFJlaWhlKGlkKTsgYnJlYWs7CiAgICAgIGNhc2UgJ2Nvbm5lY3Rub3JtJzogc2V0Q29ubmVjdE5vcm0oaWQpOyBicmVhazsKICAgICAgY2FzZSAnY29ubmVjdGxhZW5nZSc6IHNldENvbm5lY3RMYWVuZ2UoaWQpOyBicmVhazsKICAgICAgY2FzZSAnY29ubmVjdGFuc2NobHVzcyc6IHNldENvbm5lY3RBbnNjaGx1c3MoaWQpOyBicmVhazsKICAgICAgLy8gS2xhbW1lcnR5cCAoQWJzY2huaXR0IEUpOiBLTDEgLyBLTExJIC8gS0xIIC0gemllaHQgZ2dmLiBkZW4gS2xhbW1lci1XZXJrc3RvZmYgbmFjaC4KICAgICAgY2FzZSAna2xhbW1lcnR5cCc6IHNldEtsYW1tZXJUeXAoaWQpOyBicmVhazsKICAgICAgLy8gTXV0dGVyLUFydCBkZXIgS2xhbW1lciAoUjItNCk6IE0gPSBNdXR0ZXIgKFN0YW5kYXJkKSAvIFMgPSBTZWNoc2thbnRtdXR0ZXIgKEF1ZnByZWlzKS4KICAgICAgY2FzZSAna2xhbW1lcm11dHRlcic6IHNldEtsYW1tZXJNdXR0ZXIoaWQpOyBicmVhazsKICAgICAgY2FzZSAnd2Vya3N0b2ZmJzogc2V0V2Vya3N0b2ZmKGlkKTsgYnJlYWs7CiAgICAgIGNhc2UgJ29iZXJmbGFlY2hlJzogc2V0T2JlcmZsYWVjaGUoaWQpOyBicmVhazsKICAgICAgY2FzZSAnZGljaHR1bmcnOiBwaWNrKHsgZGljaHR1bmc6IGlkIH0pOyBicmVhazsKICAgICAgY2FzZSAnbGFlbmdlJzogcGljayh7IGxhZW5nZVZhcmlhbnRlOiBpZCB9KTsgYnJlYWs7CiAgICAgIGNhc2UgJ2xpcHBlJzogcGljayh7IGxpcHBlOiBpZCB9KTsgYnJlYWs7CiAgICAgIGNhc2UgJ3NvbmRlcic6IHNvbmRlckFuZnJhZ2UoKTsgYnJlYWs7CiAgICAgIC8vIEE1OiBlcnN0ZXIgS2xpY2sgc2NoYWVyZnQsIHp3ZWl0ZXIgc2V0enQgenVydWVjayAoc2llaGUgYXJtUmVzZXQoKSkuCiAgICAgIGNhc2UgJ3Jlc2V0JzogaWYgKGIuZ2V0QXR0cmlidXRlKCdkYXRhLWFybWVkJykgPT09ICcxJykgcmVzZXRLb25maWd1cmF0aW9uKCk7IGVsc2UgYXJtUmVzZXQoYik7IGJyZWFrOwogICAgICBjYXNlICd2aWV3JzogcGljayh7IHZpZXc6IGlkIH0pOyBpZiAoZnMub3BlbikgZnNSZW5kZXIoKTsgYnJlYWs7CiAgICAgIGNhc2UgJ2ZzLW9wZW4nOiBmc09wZW4oKTsgYnJlYWs7CiAgICAgIGNhc2UgJ2ZzLWNsb3NlJzogZnNDbG9zZSgpOyBicmVhazsKICAgICAgY2FzZSAnZnMtaW4nOiBmc1pvb20oZnMueiAqIDEuMjUpOyBicmVhazsKICAgICAgY2FzZSAnZnMtb3V0JzogZnNab29tKGZzLnogLyAxLjI1KTsgYnJlYWs7CiAgICAgIGNhc2UgJ2ZzLXJlc2V0JzogZnMueiA9IDE7IGZzLnR4ID0gMDsgZnMudHkgPSAwOyBmc0FwcGx5KCk7IGJyZWFrOwogICAgICBjYXNlICdleHonOiBwaWNrKHsgZXh6ZW50cmlzY2g6IGlkID09PSAndHJ1ZScgfSk7IGJyZWFrOwogICAgICAvLyBSMy0zL1IzLTQ6IEJhdWZvcm0gVCAvIFRLIGRlciBULVN0w7xja2UuCiAgICAgIGNhc2UgJ2Zvcm12YXInOiBpZiAoaWQgPT09ICdUJyB8fCBpZCA9PT0gJ1RLJykgcGljayh7IGZvcm1WYXJpYW50ZTogaWQgfSk7IGJyZWFrOwogICAgICBjYXNlICduYWNod2Vpcyc6IHsKICAgICAgICBjb25zdCBpID0gc3RhdGUubmFjaHdlaXNlLmluZGV4T2YoaWQpOwogICAgICAgIGlmIChpID49IDApIHN0YXRlLm5hY2h3ZWlzZS5zcGxpY2UoaSwgMSk7IGVsc2Ugc3RhdGUubmFjaHdlaXNlLnB1c2goaWQpOwogICAgICAgIHJlbmRlclBhbmVsKCk7IHJlbmRlclByZXZpZXcoKTsgcmVuZGVyTmF2KCk7IGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgJ21lbmdlKyc6IHNldE1lbmdlKHN0YXRlLm1lbmdlICsgMSk7IGJyZWFrOwogICAgICBjYXNlICdtZW5nZS0nOiBzZXRNZW5nZShzdGF0ZS5tZW5nZSAtIDEpOyBicmVhazsKICAgICAgY2FzZSAnc3RhZmZlbCc6IHNldE1lbmdlKHBhcnNlSW50KGIuZ2V0QXR0cmlidXRlKCdkYXRhLWFiJyksIDEwKSk7IGJyZWFrOwogICAgICBjYXNlICdnb3RvJzogZ28ocGFyc2VJbnQoYi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbicpLCAxMCkpOyBicmVhazsKICAgICAgY2FzZSAnbmV4dCc6IG5leHRTdGVwKCk7IGJyZWFrOwogICAgICBjYXNlICdiYWNrJzogcHJldlN0ZXAoKTsgYnJlYWs7CiAgICAgIGNhc2UgJ2NvcHljb2RlJzogY29weVRleHQodHlwZWNvZGUoc3RhdGUpLCBiKTsgYnJlYWs7CiAgICAgIGNhc2UgJ3NoYXJlJzogc2hhcmVUZXh0KGJ1aWxkU2hhcmVUZXh0KCksIGIpOyBicmVhazsKICAgICAgY2FzZSAnc2hhcmUtY2xvc2UnOiB7IGNvbnN0IGJveCA9ICQoJyN3ei1zaGFyZS1mYWxsYmFjaycpOyBpZiAoYm94KSBib3guaGlkZGVuID0gdHJ1ZTsgYnJlYWs7IH0KICAgICAgY2FzZSAncGRmJzogYnVpbGREYXRhc2hlZXQoKTsgYnJlYWs7CiAgICAgIGNhc2UgJ2FkZHBvcyc6IGFkZFBvc2l0aW9uKCk7IGJyZWFrOwogICAgICBjYXNlICdkZWxwb3MnOiBzdGF0ZS5wb3NpdGlvbmVuLnNwbGljZShwYXJzZUludChiLmdldEF0dHJpYnV0ZSgnZGF0YS1pJyksIDEwKSwgMSk7IHJlbmRlclBhbmVsKCk7IGJyZWFrOwogICAgICBjYXNlICdzZW5kJzogcmZxU2VuZCgpOyBicmVhazsKICAgIH0KICB9KTsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZSkgewogICAgY29uc3QgciA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSAmJiBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm9sZScpOwogICAgaWYgKHIgPT09ICdzaXplJykgc2V0R3JvZXNzZShlLnRhcmdldC52YWx1ZSk7CiAgICBlbHNlIGlmIChyID09PSAnc2l6ZTInKSBwaWNrKHsgZ3JvZXNzZTI6IGUudGFyZ2V0LnZhbHVlIH0pOwogICAgLy8gRmxhbnNjaC3DmCAoQWJzY2huaXR0IEQpOiBlaW56aWdlcyBHcm9lc3Nlbm1lcmttYWwgYmVpIEJsaW5kZGVja2VsICsgS2xhbW1lci4KICAgIGVsc2UgaWYgKHIgPT09ICdmbGFuc2NoJykgc2V0RmxhbnNjaChlLnRhcmdldC52YWx1ZSk7CiAgICBlbHNlIGlmIChyID09PSAnbWVuZ2UnKSBzZXRNZW5nZShwYXJzZUludChlLnRhcmdldC52YWx1ZSwgMTApKTsKICB9KTsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7CiAgICBpZiAoZS50YXJnZXQuZ2V0QXR0cmlidXRlICYmIGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1yb2xlJykgPT09ICdtZW5nZScpIHsKICAgICAgY29uc3QgdiA9IHBhcnNlSW50KGUudGFyZ2V0LnZhbHVlLCAxMCk7IGlmIChpc0Zpbml0ZSh2KSAmJiB2ID49IDEpIHsgc3RhdGUubWVuZ2UgPSB2OyByZW5kZXJQcmV2aWV3KCk7IHJlbmRlck5hdigpOyB9CiAgICB9CiAgfSk7CiAgZnVuY3Rpb24gc2V0TWVuZ2UodikgeyBzdGF0ZS5tZW5nZSA9IE1hdGgubWF4KDEsIE1hdGgubWluKDEwMDAwMCwgaXNGaW5pdGUodikgPyB2IDogMSkpOyByZW5kZXJQYW5lbCgpOyByZW5kZXJQcmV2aWV3KCk7IHJlbmRlck5hdigpOyB9CgogIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJlZmlsbCAoRnVubmVsLVVlYmVyZ2FiZSkgKi8KICAvLyBzcmNkb2MtRWluYmV0dHVuZyAoV1AtUGx1Z2luKSBoYXQga2VpbiBsb2NhdGlvbi5zZWFyY2ggLT4gd2luZG93LldFSVNTX1BSRUxPQUQgYWxzIEZhbGxiYWNrLgogIGZ1bmN0aW9uIHByZWxvYWRRdWVyeSgpIHsKICAgIGNvbnN0IHMgPSAobG9jYXRpb24uc2VhcmNoICYmIGxvY2F0aW9uLnNlYXJjaC5sZW5ndGggPiAxKSA\\\/IGxvY2F0aW9uLnNlYXJjaCA6ICh3aW5kb3cuV0VJU1NfUFJFTE9BRCB8fCAnJyk7CiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyhzKTsKICB9CiAgZnVuY3Rpb24gcHJlZmlsbCgpIHsKICAgIGNvbnN0IHEgPSBwcmVsb2FkUXVlcnkoKTsgaWYgKCFbLi4ucS5rZXlzKCldLmxlbmd0aCkgcmV0dXJuOwogICAgY29uc3Qgc2V0ID0gKGssIGFsbG93KSA9PiB7IGNvbnN0IHYgPSBxLmdldChrKTsgaWYgKHYgJiYgKCFhbGxvdyB8fCBhbGxvdy5pbmRleE9mKHYpID49IDApKSByZXR1cm4gdjsgcmV0dXJuIG51bGw7IH07CiAgICBjb25zdCBhbncgPSBzZXQoJ2Fud2VuZHVuZycsIEQuYW53ZW5kdW5nZW4ubWFwKGEgPT4gYS5pZCkpOyBpZiAoYW53KSBzZXRBbndlbmR1bmdTaWxlbnQoYW53KTsKICAgIGNvbnN0IG5vcm0gPSBzZXQoJ25vcm0nLCBELm5vcm1lbi5tYXAobiA9PiBuLmlkKSk7IGlmIChub3JtKSBzdGF0ZS5ub3JtID0gbm9ybTsKICAgIGNvbnN0IHR5cCA9IHNldCgndHlwJywgRC50eXBlbi5maWx0ZXIodCA9PiB0LmFrdGl2ICYmICFpc1R5cGVCbG9ja2VkKHQpKS5tYXAodCA9PiB0LmlkKSk7CiAgICBpZiAodHlwICYmIHR5cE9iaih0eXApICYmIHR5cE9iaih0eXApLm5vcm0gPT09IHN0YXRlLm5vcm0pIHN0YXRlLnR5cCA9IHR5cDsKICAgIGNvbnN0IHJlaWhlID0gc2V0KCdyZWloZScsIFsnQScsICdCJywgJ0MnXSk7IGlmIChyZWloZSkgc3RhdGUucmVpaGUgPSByZWloZTsKICAgIC8vIEFic2Nobml0dCBEK0U6IEJsaW5kZGVja2VsL0tsYW1tZXIga2VubmVuIGtlaW5lIFJlaWhlL05lbm53ZWl0ZSAtIG51ciBGbGFuc2NoLcOYCiAgICAvLyAoKyBLbGFtbWVydHlwLy1XZXJrc3RvZmYpLiBEZXNoYWxiIGhpZXIgZ2V0cmVubnQgdm9tIFJlaWhlbi0vR3JvZXNzZW4tUGZhZC4KICAgIGNvbnN0IHRQcmUgPSB0eXBPYmooc3RhdGUudHlwKTsKICAgIGlmICh0UHJlICYmICFpc0Nvbm5lY3QodFByZSkgJiYgIWlzdE51ckZsYW5zY2godFByZSkgJiYgIXJlaWhlQXZhaWxhYmxlKHRQcmUsIHN0YXRlLnJlaWhlKSkgc3RhdGUucmVpaGUgPSAnQSc7CiAgICBpZiAoc3RhdGUudHlwICYmIGlzdE51ckZsYW5zY2godFByZSkpIHsKICAgICAgY29uc3QgZmwgPSBzZXQoJ2ZsYW5zY2gnLCAoRC5mbGFuc2NoZ3JvZXNzZW4gfHwgW10pLm1hcCh4ID0+IHguaWQpKTsKICAgICAgc3RhdGUuZmxhbnNjaCA9IGZsIHx8ICgoRC5mbGFuc2NoZ3JvZXNzZW4gfHwgW10pWzBdIHx8IHt9KS5pZCB8fCBudWxsOwogICAgICBpZiAoaXN0S2xhbW1lcih0UHJlKSkgewogICAgICAgIGNvbnN0IGt0ID0gc2V0KCdrbGFtbWVydHlwJywgKEQua2xhbW1lclR5cGVuIHx8IFtdKS5tYXAoeCA9PiB4LmlkKSk7CiAgICAgICAgaWYgKGt0KSBzdGF0ZS5rbGFtbWVyVHlwID0ga3Q7CiAgICAgICAgY29uc3Qga3RPID0ga2xhbW1lclR5cE9iaihzdGF0ZS5rbGFtbWVyVHlwKTsKICAgICAgICBjb25zdCBrdyA9IHNldCgna3dlcmtzdG9mZicsIChELmtsYW1tZXJXZXJrc3RvZmZlIHx8IFtdKS5tYXAoeCA9PiB4LmlkKSk7CiAgICAgICAgLy8gV2Vya3N0b2ZmIG51ciB1ZWJlcm5laG1lbiwgd2VubiBkZXIgZ2V3YWVobHRlIEtsYW1tZXJ0eXAgaWhuIGxhdXQgQmVybmRzIExpc3RlCiAgICAgICAgLy8genVsYWVzc3QgLSBlaW4gTGluayBkYXJmIGtlaW5lIEtvbWJpbmF0aW9uIGVyemV1Z2VuLCBkaWUgZXMgbmljaHQgZ2lidC4KICAgICAgICBpZiAoa3cgJiYga3RPICYmIGt0Ty53ZXJrc3RvZmZlLmluZGV4T2Yoa3cpID49IDApIHN0YXRlLmtsYW1tZXJXZXJrc3RvZmYgPSBrdzsKICAgICAgICBlbHNlIGlmIChrdE8gJiYga3RPLndlcmtzdG9mZmUuaW5kZXhPZihzdGF0ZS5rbGFtbWVyV2Vya3N0b2ZmKSA8IDApIHN0YXRlLmtsYW1tZXJXZXJrc3RvZmYgPSBrdE8ud2Vya3N0b2ZmZVswXTsKICAgICAgICAvLyBNdXR0ZXItQXJ0IGF1cyBkZW0gTGluayAoUjItNCk6IG51ciB1ZWJlcm5laG1lbiwgd2VubiBlcyBkaWUgT3B0aW9uIGdpYnQuCiAgICAgICAgY29uc3Qga20gPSBzZXQoJ2ttdXR0ZXInLCAoRC5rbGFtbWVyTXV0dGVybiB8fCBbXSkubWFwKHggPT4geC5pZCkpOwogICAgICAgIGlmIChrbSkgc3RhdGUua2xhbW1lck11dHRlciA9IGttOwogICAgICB9CiAgICB9CiAgICAvLyBtYXNzZUZvbGd0IChDRi9DRkkpOiByb3dzRm9yKCkgaXN0IGxlZXIgLT4gZXMgZ2lidCBrZWluZSBndWVsdGlnZSBHcm9lc3NlIGF1cyBkZW0gTGluawogICAgLy8genUgdWViZXJuZWhtZW4uIEV4cGxpeml0IG51bGwgKG5pY2h0IHVuZGVmaW5lZCBhdXMgcnNbMF0pLCBkYW1pdCBkZXIgU3RhdGUgc2F1YmVyIGJsZWlidAogICAgLy8gdW5kIGVpbiBtYW5pcHVsaWVydGVyID9ncm9lc3NlPUROMjUgbmljaHQgZG9jaCBhbHMgQ0YtR3JvZXNzZSBpbSBTdGF0ZSBsYW5kZXQuCiAgICBlbHNlIGlmIChzdGF0ZS50eXAgJiYgaXNDb25uZWN0KHRQcmUpKSB7CiAgICAgIGlmICh0UHJlLmlkID09PSAnQ0YnKSB7CiAgICAgICAgY29uc3QgY3MgPSBzZXQoJ2NzdGFuZGFyZCcsIE9iamVjdC5rZXlzKEQubWFzc2UuY29ubmVjdC5jZi5yZWloZW4pKTsKICAgICAgICBzdGF0ZS5jb25uZWN0Tm9ybSA9IGNzIHx8ICdESU4nOwogICAgICB9CiAgICAgIGlmICh0UHJlLmlkID09PSAnQ0ZJJykgewogICAgICAgIGNvbnN0IGNhID0gc2V0KCdjYW5zY2hsdXNzJywgWydCVycsICdUQyddKTsgc3RhdGUuY29ubmVjdEFuc2NobHVzcyA9IGNhIHx8ICdCVyc7CiAgICAgIH0KICAgICAgY29uc3QgcnMgPSByb3dzRm9yKHN0YXRlKSwgZyA9IHNldCgnZ3JvZXNzZScpOwogICAgICBzdGF0ZS5ncm9lc3NlID0gKGcgJiYgcnMuc29tZShyID0+IHIuaWQgPT09IGcpKSA\\\/IGcgOiAoKHJzWzBdICYmIHJzWzBdLmlkKSB8fCBudWxsKTsKICAgICAgaWYgKHRQcmUuaWQgPT09ICdDRicpIHsKICAgICAgICBjb25zdCBydyA9IHJvd0ZvcihzdGF0ZSksIGNsID0gTnVtYmVyKHEuZ2V0KCdjbGFlbmdlJykpOwogICAgICAgIHN0YXRlLmNvbm5lY3RMYWVuZ2UgPSBydyAmJiBydy5sYWVuZ2VuLnNvbWUoeCA9PiBOdW1iZXIoeC5MKSA9PT0gY2wpID8gY2wgOiAocncgJiYgcncubGFlbmdlblswXSA\\\/IHJ3LmxhZW5nZW5bMF0uTCA6IG51bGwpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChzdGF0ZS50eXAgJiYgaXN0TWFzc2VGb2xndCh0eXBPYmooc3RhdGUudHlwKSkpIHsgc3RhdGUuZ3JvZXNzZSA9IG51bGw7IHN0YXRlLmdyb2Vzc2UyID0gbnVsbDsgfQogICAgZWxzZSBpZiAoc3RhdGUudHlwKSB7IGNvbnN0IHJzID0gcm93c0ZvcihzdGF0ZSk7IGNvbnN0IGcgPSBzZXQoJ2dyb2Vzc2UnKTsgc3RhdGUuZ3JvZXNzZSA9IChnICYmIHJzLmZpbmQociA9PiByLmlkID09PSBnKSkgPyBnIDogKChyc1swXSAmJiByc1swXS5pZCkgfHwgbnVsbCk7IH0KICAgIC8vIGdyb2Vzc2UyIGF1cyBkZW0gTGluayBudXIgw7xiZXJuZWhtZW4sIHdlbm4gZXMgS0xFSU5FUiBhbHMgZGllIChvYmVuIGdlc2V0enRlKSBOZW5ud2VpdGUKICAgIC8vIGlzdCAoUjMtMi9SMy00KSAtIGVpbiBtYW5pcHVsaWVydGVyL3ZlcmFsdGV0ZXIgTGluayBkYXJmIGtlaW4gZ2VyYWRlcyBSb2hyIGVyemV1Z2VuLgogICAgY29uc3QgZzIgPSBzZXQoJ2dyb2Vzc2UyJyk7IGlmIChnMiAmJiByb3dzMkZvcihzdGF0ZSkuc29tZShyID0+IHIuaWQgPT09IGcyKSkgc3RhdGUuZ3JvZXNzZTIgPSBnMjsKICAgIGNvbnN0IHcgPSBzZXQoJ3dlcmtzdG9mZicsIEQud2Vya3N0b2ZmZS5tYXAoeCA9PiB4LmlkKSk7IGlmICh3KSBzdGF0ZS53ZXJrc3RvZmYgPSB3OwogICAgY29uc3QgbyA9IHNldCgnb2JlcmZsYWVjaGUnLCBELm9iZXJmbGFlY2hlbi5tYXAoeCA9PiB4LmlkKSk7IGlmIChvKSBzdGF0ZS5vYmVyZmxhZWNoZSA9IG87CiAgICBpZiAoc3RhdGUudHlwICYmICFvYmVyZmxhZWNoZUVybGF1YnQoc3RhdGUpKSBzdGF0ZS5vYmVyZmxhZWNoZSA9IG9iZXJmbGFlY2hlbk9wdGlvbmVuKHN0YXRlKVswXS5pZDsKICAgIGNvbnN0IGQgPSBzZXQoJ2RpY2h0dW5nJywgRC5kaWNodHVuZ2VuLm1hcCh4ID0+IHguaWQpKTsgaWYgKGQpIHN0YXRlLmRpY2h0dW5nID0gZDsKICAgIGNvbnN0IGxwID0gc2V0KCdsaXBwZScsIFsnTCcsICdPJ10pOyBpZiAobHAgJiYgYXVzZnVlaHJ1bmdBdmFpbChzdGF0ZSkuaW5jbHVkZXMobHApKSBzdGF0ZS5saXBwZSA9IGxwOwogICAgY29uc3QgbndSYXcgPSBxLmdldCgnbmFjaHdlaXNlJyk7CiAgICBpZiAobndSYXcgIT0gbnVsbCkgewogICAgICBjb25zdCBhbGxvd2VkTncgPSBuZXcgU2V0KEQubmFjaHdlaXNlLm1hcCh4ID0+IHguaWQpKTsKICAgICAgY29uc3Qgc2VsZWN0ZWROdyA9IFN0cmluZyhud1Jhdykuc3BsaXQoJywnKS5maWx0ZXIoaWQgPT4gYWxsb3dlZE53LmhhcyhpZCkpOwogICAgICBpZiAoc2VsZWN0ZWROdy5sZW5ndGgpIHN0YXRlLm5hY2h3ZWlzZSA9IFsuLi5uZXcgU2V0KFsuLi4oRC5wcmVpc2UubmFjaHdlaXNTdGFuZGFyZCB8fCBbXSksIC4uLnNlbGVjdGVkTnddKV07CiAgICB9CiAgICBjb25zdCBsdiA9IHNldCgnbGFlbmdlJywgWydLSycsICdLTCddKTsgaWYgKGx2KSBzdGF0ZS5sYWVuZ2VWYXJpYW50ZSA9IGx2OwogICAgaWYgKHEuZ2V0KCdleHonKSA9PT0gJzEnKSBzdGF0ZS5leHplbnRyaXNjaCA9IHRydWU7CiAgICAvLyBCYXVmb3JtIFQgLyBUSyBhdXMgZGVtIExpbmsuIFVuYmVrYW5udGUgV2VydGUgYmxlaWJlbiBudWxsIHVuZCBoYWx0ZW4gZGVuCiAgICAvLyBMaW5rIGluIFNjaHJpdHQgNCB6dXIgS29ycmVrdHVyIHN0ZWhlbiwgc3RhdHQgc3RpbGwgRm9ybSBUIGFuenVuZWhtZW4uCiAgICB7IGNvbnN0IGZ2ID0gc2V0KCdmb3JtJywgWydUJywgJ1RLJ10pOyBpZiAoZnYpIHN0YXRlLmZvcm1WYXJpYW50ZSA9IGZ2OyB9CiAgICBpZiAodFByZSAmJiB0UHJlLmlkID09PSAnVEMnKSB7CiAgICAgIGNvbnN0IGt0ID0gc2V0KCdrbGFtbWVydHlwJywgKEQua2xhbW1lclR5cGVuIHx8IFtdKS5tYXAoeCA9PiB4LmlkKSk7IGlmIChrdCkgc3RhdGUua2xhbW1lclR5cCA9IGt0OwogICAgfQogICAgY29uc3QgdncgPSBzZXQoJ3ZpZXcnLCBbJ3plaWNobnVuZycsICdhbnNpY2h0J10pOyBpZiAodncpIHN0YXRlLnZpZXcgPSB2dzsKICAgIGNvbnN0IG0gPSBwYXJzZUludChxLmdldCgnbWVuZ2UnKSwgMTApOyBpZiAoaXNGaW5pdGUobSkgJiYgbSA+PSAxKSBzdGF0ZS5tZW5nZSA9IG07CiAgICAvLyBFaW4gTGluayBkYXJmIG5pZSB1bnZvbGxzdMOkbmRpZ2UgR3LDtsOfZW4tIG9kZXIgT3B0aW9uc2RhdGVuIMO8YmVyc3ByaW5nZW4uCiAgICAvLyBEZXIgZXJzdGUgbmljaHQgZXJmw7xsbHRlLCBmw7xyIGRlbiBUeXAgcmVsZXZhbnRlIFNjaHJpdHQgd2lyZCBnZcO2ZmZuZXQuCiAgICBjb25zdCBmaXJzdEluY29tcGxldGUgPSBhcHBTdGVwcygpLmZpbmQobiA9PiAhY29tcGxldGUobikpOwogICAgc3RhdGUuc3RlcCA9IGZpcnN0SW5jb21wbGV0ZSB8fCA4OwogIH0KICBmdW5jdGlvbiBzZXRBbndlbmR1bmdTaWxlbnQoaWQpIHsgY29uc3QgYSA9IEQuYW53ZW5kdW5nZW4uZmluZCh4ID0+IHguaWQgPT09IGlkKTsgaWYgKCFhKSByZXR1cm47IHN0YXRlLmFud2VuZHVuZyA9IGlkOyBzdGF0ZS53ZXJrc3RvZmYgPSBhLmRlZmF1bHRzLndlcmtzdG9mZjsgc3RhdGUub2JlcmZsYWVjaGUgPSBhLmRlZmF1bHRzLm9iZXJmbGFlY2hlOyBzdGF0ZS5kaWNodHVuZyA9IGEuZGVmYXVsdHMuZGljaHR1bmc7IH0KCiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlGcmFtZS1BdXRvLUjDtmhlIChXb3JkUHJlc3MtRWluYmV0dHVuZykgKi8KICAvLyBNZWxkZXQgZGllIEluaGFsdHNow7ZoZSBhbnMgw7xiZXJnZW9yZG5ldGUgRmVuc3RlciwgZGFtaXQgZGFzIGlGcmFtZSBvaG5lCiAgLy8gaW5uZXJlbiBTY3JvbGxiYWxrZW4gbWl0d8OkY2hzdC4gU3RhbmRhbG9uZSAoa2VpbiBQYXJlbnQpID0gTm8tT3AuCiAgZnVuY3Rpb24gcmVwb3J0SGVpZ2h0KCkgewogICAgaWYgKHdpbmRvdy5wYXJlbnQgPT09IHdpbmRvdykgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgY29uc3QgaCA9IE1hdGguY2VpbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTsKICAgICAgaWYgKGggPiAxMDApIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoeyB3ZWlzc0tvbmZpZ0hlaWdodDogaCB9LCAnKicpOwogICAgfSBjYXRjaCAoZSkge30KICB9CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHJlcG9ydEhlaWdodCk7CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCByZXBvcnRIZWlnaHQpOwoKICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEluaXQgKi8KICBpZiAod2luZG93LnBhcmVudCAhPT0gd2luZG93KSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnd3otZW1iZWRkZWQnKTsKICByZW5kZXJQcmljZUhpbnQoKTsKICBwcmVmaWxsKCk7CiAgcmVuZGVyQWxsKCk7CiAgLy8gUUEtL0RlZXAtTGluay1Ib29rczogP2ZzPTEgb2VmZm5ldCBWb2xsYmlsZCwgP2RzPTEgYmF1dCBkYXMgRGF0ZW5ibGF0dCAob2huZSBEcnVja2RpYWxvZykKICBjb25zdCBxMCA9IHByZWxvYWRRdWVyeSgpOwogIGlmIChxMC5nZXQoJ2ZzJykgPT09ICcxJykgZnNPcGVuKCk7CiAgaWYgKHEwLmdldCgnZHMnKSA9PT0gJzEnKSBidWlsZERhdGFzaGVldCh0cnVlKTsKICBzZXRUaW1lb3V0KHJlcG9ydEhlaWdodCwgMzUwKTsKfSkoKTsKCjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K\";\n    try {\n        frame.srcdoc = new TextDecoder('utf-8').decode(\n            Uint8Array.from(atob(b64), function (c) { return c.charCodeAt(0); })\n        );\n    } catch (err) {\n        try { frame.srcdoc = decodeURIComponent(escape(atob(b64))); } catch (e2) {}\n    }\n    var last = 680;\n    \/\/ Auf Desktop die Hoehe auf ~Viewport deckeln -> das iFrame scrollt intern,\n    \/\/ die sticky Vorschau bleibt rechts stehen. Auf Mobil volle Inhaltshoehe.\n    function setHeight(h) {\n        var desktop = window.innerWidth > 960;\n        var cap = desktop ? Math.max(600, Math.round((window.innerHeight || 800) * 0.92)) : 1e7;\n        frame.style.height = Math.min(h, cap) + 'px';\n    }\n    window.addEventListener('message', function (e) {\n        if (e.source !== frame.contentWindow) { return; } \/\/ srcdoc-Quelle -> kein origin-Check\n        var h = e.data && e.data.weissKonfigHeight;\n        if (typeof h === 'number' && h > 100) { last = h; setHeight(h); }\n    }, false);\n    window.addEventListener('resize', function () { setHeight(last); });\n})();\n<\/script>\n<!--\/noptimize-->\n    <\/div><\/div><\/div><\/div><style>.weiss-config-trigger{min-height:44px}\n.weiss-product-cta{margin-top:8px!important;margin-bottom:20px!important}\n.weiss-fittings-modal .modal-dialog{width:calc(100% - 32px);max-width:1180px;margin:24px auto}\n.weiss-fittings-modal .modal-content{background:#fff;color:#1c1c1c;border-radius:0}\n.weiss-fittings-modal .modal-header{background:var(--awb-custom_color_1);color:#fff;padding:16px 24px;display:flex;align-items:center;gap:16px}\n.weiss-fittings-modal .modal-title{color:#fff!important;font-size:22px!important;line-height:1.4!important;margin:0!important}\n.weiss-fittings-modal .modal-header .close{color:#fff!important;opacity:1;min-width:44px;min-height:44px;font-size:30px;order:2;margin-left:auto;float:none}\n.weiss-fittings-modal .modal-body{max-height:calc(100dvh - 150px);overflow-y:auto;padding:0;overscroll-behavior:contain}\n.weiss-fittings-modal .weiss-config-status{padding:20px 24px;margin:0}\n.weiss-fittings-modal .weiss-konfigurator-embed{margin:0!important}\n@media(max-width:640px){.weiss-fittings-modal .modal-dialog{width:100%;margin:0;max-width:none}.weiss-fittings-modal .modal-header{padding:10px 14px}.weiss-fittings-modal .modal-title{font-size:18px!important}.weiss-fittings-modal .modal-body{max-height:calc(100dvh - 70px)}.weiss-config-trigger{max-width:100%;white-space:normal!important}.weiss-product-cta{margin-bottom:24px!important}}\n\n.weiss-config-action{display:flow-root;clear:both}.weiss-config-trigger{margin-bottom:12px!important;max-width:100%;white-space:normal!important;line-height:1.4!important}.weiss-inline-cta{margin-top:14px!important}.weiss-fittings-modal .modal-body{background:#fff}.weiss-fittings-modal .modal-title{text-transform:none!important}\n<\/style><script>(function () {\n  'use strict';\n  const modalSelector = '.weiss-fittings-modal';\n  let lastNorm = null;\n  let lastType = null;\n  let lastSeries = null;\n  let boundDocument = null;\n  let pending = 0;\n\n  function action(doc, act, id) {\n    const control = doc.createElement('button');\n    control.type = 'button';\n    control.hidden = true;\n    control.setAttribute('data-act', act);\n    if (act === 'goto') control.setAttribute('data-n', id);\n    else control.setAttribute('data-id', id);\n    doc.body.appendChild(control);\n    control.click();\n    control.remove();\n  }\n\n  function applyPreset(norm, type, series, token, started) {\n    if (token !== pending) return;\n    const modal = document.querySelector(modalSelector);\n    const frame = modal && modal.querySelector('.weiss-konfigurator-embed iframe');\n    const status = modal && modal.querySelector('.weiss-config-status');\n    let doc;\n    try { doc = frame && frame.contentDocument; } catch (error) { doc = null; }\n    if (!doc || !doc.querySelector('#wz-panel .step-head')) {\n      if (Date.now() - started < 20000) {\n        window.setTimeout(function () { applyPreset(norm, type, series, token, started); }, 100);\n      } else if (status) {\n        status.hidden = false;\n        status.textContent = 'The configurator could not be loaded. Please close it and open it again.';\n      }\n      return;\n    }\n    if (boundDocument !== doc) {\n      boundDocument = doc;\n      doc.addEventListener('click', function (event) {\n        const control = event.target.closest('[data-act]');\n        if (!control || control.hidden) return;\n        const act = control.getAttribute('data-act');\n        if (act === 'anwendung' && lastType) action(doc, 'goto', '4');\n        if (act === 'typ') { lastType = control.getAttribute('data-id'); lastSeries = null; }\n        if (act === 'reihe') lastSeries = control.getAttribute('data-id');\n        if (act === 'norm') lastNorm = control.getAttribute('data-id');\n        if (act === 'norm' || act === 'reset' || act === 'addpos') { lastType = null; lastSeries = null; }\n      });\n    }\n    if (norm !== lastNorm) {\n      action(doc, 'goto', '2');\n      action(doc, 'norm', norm);\n      lastNorm = norm; lastType = null; lastSeries = null;\n      action(doc, 'goto', '3');\n    }\n    if (type && type !== lastType) {\n      action(doc, 'typ', type);\n      lastType = type;\n      lastSeries = null;\n      action(doc, 'goto', '4');\n    }\n    if (type && series && series !== lastSeries) {\n      action(doc, 'reihe', series);\n      lastSeries = series;\n      action(doc, 'goto', '4');\n    }\n    if (status) status.hidden = true;\n    frame.setAttribute('data-weiss-preset', type || lastType || 'all');\n    frame.contentWindow.dispatchEvent(new Event('resize'));\n  }\n\n  document.addEventListener('click', function (event) {\n    const trigger = event.target.closest('.weiss-config-trigger');\n    if (!trigger) return;\n    const match = Array.from(trigger.classList).find(function (name) { return name.indexOf('weiss-type-') === 0; });\n    const type = match ? match.slice(11) : null;\n    const norm = trigger.classList.contains('weiss-norm-din11865') ? 'din11865' : 'din32676';\n    const series = trigger.classList.contains('weiss-series-a') ? 'A'\n      : trigger.classList.contains('weiss-series-b') ? 'B'\n      : trigger.classList.contains('weiss-series-c') ? 'C' : null;\n    const modal = document.querySelector(modalSelector);\n    if (!modal) return;\n    const heading = modal.querySelector('.modal-title');\n    const labels = {B90:'Configure bend',R:'Configure reducer',TS:'Configure tee',TC:'Configure Tri-Clamp',TCS:'Configure ferrule',KL:'Configure clamp',D:'Configure gasket',BD:'Configure blank cap'};\n    if (heading) heading.textContent = type && labels[type] ? labels[type] : 'Project configurator';\n    const status = modal.querySelector('.weiss-config-status');\n    if (status) { status.hidden = false; status.textContent = 'Configurator is loading ...'; }\n    applyPreset(norm, type, series, ++pending, Date.now());\n  }, true);\n})();\n<\/script><!--noptimize-->\n<style id=\"weiss-modal-ci\">\n\/* Weiss Projektkonfigurator: gemeinsamer Modal-Stil, Stand 14.09.2026. *\/\n.weiss-fittings-modal {\n  --weiss-ci-red: var(--awb-color4, #cc0000);\n  --weiss-ci-dark: var(--awb-custom_color_1, #4c0000);\n  --weiss-ci-ink: var(--awb-color8, #1c1c1c);\n  --weiss-modal-gap: 24px;\n  --weiss-admin-height: 0px;\n  position: fixed !important;\n  inset: var(--weiss-admin-height) 0 0 !important;\n  height: auto !important;\n  padding: var(--weiss-modal-gap) !important;\n  overflow-x: hidden;\n  overflow-y: auto;\n  box-sizing: border-box;\n  font-family: var(--awb-typography4-font-family, 'Plus Jakarta Sans', Arial, sans-serif);\n}\n.weiss-fittings-modal .modal-dialog {\n  display: flex;\n  align-items: center;\n  width: 100% !important;\n  max-width: 1180px !important;\n  min-height: 100%;\n  margin: 0 auto !important;\n  transform: none !important;\n  transition: none !important;\n}\n.weiss-fittings-modal .modal-content {\n  width: 100%;\n  min-width: 0;\n  max-height: calc(100dvh - var(--weiss-admin-height) - 2 * var(--weiss-modal-gap));\n  display: flex;\n  flex-direction: column;\n  background: #fff;\n  color: var(--weiss-ci-ink);\n  border: 0;\n  border-top: 4px solid var(--weiss-ci-red);\n  border-radius: 0;\n  box-shadow: 0 24px 72px rgba(28,28,28,.22);\n  overflow: hidden;\n}\n.weiss-fittings-modal .modal-header {\n  display: grid;\n  grid-template-columns: 44px minmax(0, 1fr) 44px;\n  align-items: center;\n  gap: 12px;\n  flex: 0 0 auto;\n  padding: 14px 24px;\n  background: #fff;\n  border-bottom: 1px solid #e5e5e5;\n  color: var(--weiss-ci-ink);\n}\n.weiss-fittings-modal .modal-header::before,\n.weiss-fittings-modal .modal-header::after { display: none; }\n.weiss-fittings-modal .modal-title {\n  grid-column: 2;\n  grid-row: 1;\n  margin: 0 !important;\n  color: var(--weiss-ci-ink) !important;\n  font-family: inherit !important;\n  font-size: 22px !important;\n  font-weight: 600 !important;\n  line-height: 1.3 !important;\n  text-align: center;\n  text-transform: none !important;\n  overflow-wrap: break-word;\n}\n.weiss-fittings-modal .modal-header .close {\n  grid-column: 3;\n  grid-row: 1;\n  order: initial;\n  display: grid;\n  place-items: center;\n  float: none;\n  margin: 0 !important;\n  padding: 0;\n  width: 44px;\n  height: 44px;\n  min-width: 44px;\n  min-height: 44px;\n  border: 1px solid #e5e5e5;\n  border-radius: 0;\n  background: #fff;\n  color: var(--weiss-ci-ink) !important;\n  opacity: 1;\n  font: 28px\/1 Arial, sans-serif;\n  text-shadow: none;\n  cursor: pointer;\n}\n.weiss-fittings-modal .modal-header .close:hover { background: #f1f1f1; color: var(--weiss-ci-red) !important; }\n.weiss-fittings-modal .modal-header .close:focus-visible { outline: 2px solid var(--weiss-ci-red); outline-offset: 3px; }\n.weiss-fittings-modal .modal-body {\n  flex: 1 1 auto;\n  min-height: 0;\n  max-height: none !important;\n  padding: 0 !important;\n  background: #fff;\n  overflow: auto;\n  overscroll-behavior: contain;\n  scrollbar-gutter: stable;\n}\n.weiss-fittings-modal .weiss-konfigurator-embed { margin: 0 !important; padding: 0 !important; }\n.weiss-fittings-modal .weiss-konfigurator-embed iframe { display: block; width: 100%; min-height: 0 !important; border: 0; }\n.weiss-fittings-modal .weiss-config-status { margin: 0; padding: 24px 28px; color: #555; }\n.weiss-fittings-modal .weiss-config-status[hidden] { display: none !important; }\n@media(max-width:767px) {\n  .weiss-fittings-modal { --weiss-modal-gap: 12px; }\n  .weiss-fittings-modal .modal-header { padding: 10px 12px; gap: 8px; }\n  .weiss-fittings-modal .modal-title { font-size: 18px !important; }\n}\n@media(max-width:374px) {\n  .weiss-fittings-modal { --weiss-modal-gap: 8px; }\n  .weiss-fittings-modal .modal-header { padding: 8px; gap: 4px; }\n  .weiss-fittings-modal .modal-title { font-size: 16px !important; }\n}\n@media(prefers-reduced-motion:reduce) { .weiss-fittings-modal, .weiss-fittings-modal * { scroll-behavior: auto !important; transition: none !important; } }\n\n<\/style>\n<script>\n(function () {\n  'use strict';\n  if (window.weissModalCiInstalled) return;\n  window.weissModalCiInstalled = true;\n  const widgetCss = \"@font-face {\\n  font-family: 'Plus Jakarta Sans';\\n  font-style: normal;\\n  font-weight: 200;\\n  font-display: swap;\\n  src: url(https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/fusion-gfonts\/LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko20yw.woff2) format('woff2');\\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n@font-face {\\n  font-family: 'Plus Jakarta Sans';\\n  font-style: normal;\\n  font-weight: 300;\\n  font-display: swap;\\n  src: url(https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/fusion-gfonts\/LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko20yw.woff2) format('woff2');\\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n@font-face {\\n  font-family: 'Plus Jakarta Sans';\\n  font-style: normal;\\n  font-weight: 400;\\n  font-display: swap;\\n  src: url(https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/fusion-gfonts\/LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko20yw.woff2) format('woff2');\\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n@font-face {\\n  font-family: 'Plus Jakarta Sans';\\n  font-style: normal;\\n  font-weight: 600;\\n  font-display: swap;\\n  src: url(https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/fusion-gfonts\/LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko20yw.woff2) format('woff2');\\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n@font-face {\\n  font-family: 'Plus Jakarta Sans';\\n  font-style: normal;\\n  font-weight: 700;\\n  font-display: swap;\\n  src: url(https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/fusion-gfonts\/LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko20yw.woff2) format('woff2');\\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n\/* Nur in eingebettete Projektkonfigurator-Popups einsetzen. *\/\\n:root {\\n  --red: var(--weiss-brand-red, #cc0000);\\n  --red-dark: var(--weiss-brand-dark, #4c0000);\\n  --red-tint: #fff4f4;\\n  --ink: #1c1c1c;\\n  --radius: 2px;\\n  --radius-sm: 2px;\\n  --ff: var(--weiss-brand-font, 'Plus Jakarta Sans', Arial, sans-serif);\\n}\\nbody, button, input, select, textarea { font-family: var(--ff); }\\n.app { max-width: none; padding: 18px 28px 24px; }\\n.topbar { padding: 0 0 16px; }\\n.topbar .hint { color: #555; }\\n.brand .mark { border-radius: 0; background: var(--red); }\\n.brand .n { font-size: 16px; letter-spacing: .04em; }\\n.brand .s { color: #555; }\\n.progress { gap: 4px; padding-bottom: 20px; margin-bottom: 2px; }\\n.pstep { border-radius: 0; padding: 9px 10px; font-size: 12px; border-color: #e5e5e5; }\\n.pstep.active { color: var(--red-dark); background: var(--red-tint); border-color: var(--red); }\\n.pstep[disabled] { opacity: 1; color: #727272; background: #fafafa; }\\n.pstep[disabled] .num { background: #eee; color: #727272; }\\n.layout { gap: 28px; }\\n.step-head h2 { font-size: 24px; line-height: 1.3; font-weight: 600; }\\n.step-head p { font-size: 13px; line-height: 1.6; }\\n.kicker { color: var(--red); }\\n.resetbtn, .pv-toggle, .pv-typecode .copy, .btn, .chip, .seg, .stepper { border-radius: 0; }\\n.resetbtn { padding: 0 12px; color: #555; }\\n.tiles { gap: 12px; }\\n.tile { border-width: 1px; border-radius: 2px; min-height: 112px; padding: 16px; box-shadow: none; }\\n.tile .t { font-size: 15px; font-weight: 600; }\\n.tile .d { font-size: 12px; }\\n.tile:hover, .opt:hover { border-color: var(--red); box-shadow: none; }\\n.tile.sel, .opt.sel { background: var(--red-tint); box-shadow: inset 3px 0 0 var(--red); }\\n.pv-card { border-radius: 2px; box-shadow: none; }\\n.pv-typecode { flex-wrap: wrap; }\\n.pv-typecode .code { min-width: 0; flex: 1 1 120px; }\\n.pv-typecode .copy { flex-shrink: 0; }\\n.pv-typecode .lbl { color: #555; }\\n.preview { position: static; }\\n.nav { justify-content: flex-end; gap: 12px; margin-top: 24px; padding-top: 20px; border-top: 1px solid #e5e5e5; }\\n.nav .btn.primary { flex: 0 1 auto; width: auto; min-width: 176px; justify-content: center; background: var(--red); border-color: var(--red); box-shadow: none; }\\n.nav .btn.primary:hover:not([disabled]) { background: var(--red-dark); border-color: var(--red-dark); }\\n.nav .btn.primary[disabled] { background: #e5e5e5; color: #626262; border-color: #e5e5e5; }\\nbutton:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible { outline: 2px solid var(--red); outline-offset: 3px; }\\n@media(max-width:767px) {\\n  .app { padding: 14px 16px 20px; }\\n  .topbar { flex-wrap: wrap; gap: 10px; }\\n  .topbar .hint { font-size: 11px; }\\n  .layout { grid-template-columns: minmax(0,1fr); gap: 20px; }\\n  .step-head h2 { font-size: 21px; }\\n  .nav .btn.primary { min-width: 0; flex: 1; }\\n  .nav { margin-top: 18px; }\\n  .pv-typecode { gap: 8px; }\\n}\\n@media(max-width:359px) {\\n  .app { padding: 12px; }\\n  .tiles { grid-template-columns: minmax(0,1fr); }\\n  .tile { min-height: 96px; }\\n  .step-head-top { gap: 8px; }\\n  .resetbtn { padding: 0 8px; font-size: 11px; }\\n}\\n@media(prefers-reduced-motion:reduce) { *, *::before, *::after { transition: none !important; scroll-behavior: auto !important; } }\\n@media(max-width:767px) {\\n  .app { display: flex; flex-direction: column; }\\n  .app > .topbar { order: 0; }\\n  .app > .progress { order: 1; }\\n  .layout { display: contents; }\\n  .panel { order: 2; }\\n  .app > .nav { order: 3; }\\n  .preview { order: 4; width: 100%; margin-top: 20px; }\\n}\\n@media(min-width:320px) and (max-width:767px) {\\n  .tiles { grid-template-columns: repeat(2,minmax(0,1fr)); }\\n  .tile { padding: 14px 12px; }\\n  .tile .t { font-size: 13px; }\\n}\\n\";\n  const bound = new WeakMap();\n  function install(frame) {\n    let doc;\n    try { doc = frame.contentDocument; } catch (_) { return; }\n    if (!doc || !doc.querySelector('.app')) return;\n    const modal = frame.closest('.weiss-fittings-modal');\n    if (!modal) return;\n    const old = bound.get(frame);\n    if (old && old.doc === doc) { old.size(); return; }\n    if (old) { old.resize.disconnect(); old.mutation.disconnect(); }\n    const style = doc.createElement('style');\n    style.id = 'weiss-modal-ci-widget';\n    style.textContent = widgetCss;\n    doc.head.appendChild(style);\n    const ci = getComputedStyle(modal);\n    doc.documentElement.style.setProperty('--weiss-brand-red', ci.getPropertyValue('--awb-color4').trim() || '#cc0000');\n    doc.documentElement.style.setProperty('--weiss-brand-dark', ci.getPropertyValue('--awb-custom_color_1').trim() || '#4c0000');\n    doc.documentElement.style.setProperty('--weiss-brand-font', ci.fontFamily);\n    const app = doc.querySelector('.app');\n    let pending = 0;\n    let gesetzt = 0;\n    \/\/ Die Hoehe wird ueber eine eigene Stilregel gesetzt, nicht ueber das style-Attribut.\n    \/\/ Grund: Das Konfigurator-Plugin setzt die Hoehe ebenfalls und deckelt sie auf die\n    \/\/ Fensterhoehe. Beide Setzer haben sich gegenseitig ueberschrieben, jede Aenderung\n    \/\/ loeste im iFrame ein resize aus, das Widget meldete erneut, und das Fenster sprang\n    \/\/ rund 230 mal pro Sekunde zwischen zwei Hoehen. Eine Regel mit !important gewinnt\n    \/\/ gegen das style-Attribut, damit ist die Hoehe stabil und die Rueckkopplung beendet.\n    \/\/ Befund vom 17.09.2026, gemeldet von Bernd Linker als Flackern im Anfrageschritt.\n    const hoeheSetzen = function (id, hoehe) {\n      if (!id) return;\n      let regelBlock = document.getElementById('weiss-modal-hoehe');\n      if (!regelBlock) {\n        regelBlock = document.createElement('style');\n        regelBlock.id = 'weiss-modal-hoehe';\n        document.head.appendChild(regelBlock);\n      }\n      const regeln = {};\n      regelBlock.textContent.split('}').forEach(function (teil) {\n        const m = teil.match(\/#([\\w-]+)\\s*\\{\\s*height:\\s*(\\d+)px\/);\n        if (m) regeln[m[1]] = m[2];\n      });\n      regeln[id] = String(hoehe);\n      regelBlock.textContent = Object.keys(regeln)\n        .map(function (k) { return '#' + k + ' { height: ' + regeln[k] + 'px !important; }'; })\n        .join('\\n');\n    };\n    const size = function () {\n      if (pending) return;\n      pending = requestAnimationFrame(function () {\n        pending = 0;\n        if (!frame.isConnected || !frame.getBoundingClientRect().width) return;\n        const height = Math.ceil(app.getBoundingClientRect().height);\n        if (height > 100 && Math.abs(gesetzt - height) > 1) {\n          gesetzt = height;\n          hoeheSetzen(frame.id, height);\n        }\n      });\n    };\n    const resize = new ResizeObserver(size);\n    resize.observe(app);\n    const mutation = new MutationObserver(size);\n    mutation.observe(app, {childList:true, subtree:true, characterData:true});\n    bound.set(frame, {doc:doc, size:size, resize:resize, mutation:mutation});\n    if (doc.fonts) doc.fonts.ready.then(size);\n    size();\n  }\n  function scan() {\n    const admin = document.getElementById('wpadminbar');\n    const adminHeight = admin && getComputedStyle(admin).position === 'fixed' ? Math.max(0, admin.getBoundingClientRect().bottom) : 0;\n    document.querySelectorAll('.weiss-fittings-modal').forEach(function (modal) {\n      const value = Math.round(adminHeight) + 'px';\n      if (modal.style.getPropertyValue('--weiss-admin-height') !== value) modal.style.setProperty('--weiss-admin-height', value);\n      modal.querySelectorAll('.weiss-konfigurator-embed iframe').forEach(function (frame) {\n        if (!frame.hasAttribute('data-weiss-ci-bound')) {\n          frame.setAttribute('data-weiss-ci-bound', 'true');\n          frame.addEventListener('load', function () { install(frame); });\n        }\n        install(frame);\n      });\n    });\n  }\n  let scheduled = false;\n  function schedule() {\n    if (scheduled) return;\n    scheduled = true;\n    requestAnimationFrame(function () { scheduled = false; scan(); });\n  }\n  const observer = new MutationObserver(schedule);\n  observer.observe(document.documentElement, {childList:true, subtree:true, attributes:true, attributeFilter:['class','style']});\n  window.addEventListener('resize', schedule);\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', schedule, {once:true});\n  else schedule();\n})();\n<\/script>\n<!--\/noptimize-->\n\n<style id=\"weiss-landing-hero-20260914\">\n.weiss-landing-hero .weiss-hero-title h1{font-size:clamp(28px,3vw,40px)!important;line-height:1.18!important;letter-spacing:-.035em;overflow-wrap:break-word}\n.weiss-landing-hero .weiss-hero-intro{max-width:38em}\n.weiss-landing-hero .weiss-hero-intro p{margin-bottom:14px}\n.weiss-landing-hero .weiss-hero-cta{min-height:48px;max-width:100%;white-space:normal;box-sizing:border-box}\n.weiss-landing-hero .weiss-hero-cta:focus-visible{outline:3px solid #cc0000;outline-offset:4px}\n.weiss-masstabellen .weiss-tabellen-scroll{max-width:100%;overflow-x:auto;overscroll-behavior-x:contain;margin:12px 0}\n.weiss-masstabellen .weiss-tabellen-scroll:focus-visible{outline:3px solid #cc0000;outline-offset:2px}\n.weiss-masstabellen table.weiss-masstabelle{border-collapse:collapse;width:100%;font-size:14px}\n.weiss-masstabellen table.weiss-masstabelle th,.weiss-masstabellen table.weiss-masstabelle td{padding:10px 12px;border-bottom:1px solid #ddd;text-align:left;white-space:nowrap}\n.weiss-masstabellen table.weiss-masstabelle thead{background:#f3f1ef}\n.weiss-masstabellen table.weiss-masstabelle caption{text-align:left;font-weight:700;white-space:normal;padding:12px 0}\n.weiss-masstabellen .weiss-masshinweis{font-size:14px;line-height:1.6}\n@media(max-width:767px){.weiss-landing-hero .weiss-hero-cta{width:100%;padding-left:16px!important;padding-right:16px!important}.weiss-landing-hero .fusion-imageframe{margin-top:24px}}\n<\/style><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-17 fusion-flex-container has-pattern-background has-mask-background weiss-zugang-abschnitt nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:56px;--awb-padding-bottom:56px;--awb-padding-top-small:28px;--awb-padding-bottom-small:28px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-46 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-flex-grow:0;--awb-flex-shrink:0;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-flex-grow-medium:0;--awb-flex-shrink-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-flex-grow-small:0;--awb-flex-shrink-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column\"><section class=\"weiss-zugang\" id=\"weiss-zugang\">\n  <div class=\"weiss-zugang-haupt\">\n  <h2 class=\"weiss-zugang-titel\">Request access to prices<\/h2>\n  <p class=\"weiss-zugang-text\">Prices in the configurator are kept in a protected area. Tell us briefly who you are and you will receive your password by e-mail.<\/p>\n    <form method=\"post\" class=\"weiss-zugang-form\" novalidate>\n    <input type=\"hidden\" id=\"weiss_zugang_nonce\" name=\"weiss_zugang_nonce\" value=\"e594db9145\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/en\/wp-json\/wp\/v2\/pages\/4344\" \/>    <input type=\"hidden\" name=\"weiss_zugang_absenden\" value=\"1\">\n    <input type=\"hidden\" name=\"weiss_zugang_lang\" value=\"en\">\n    <input type=\"hidden\" name=\"weiss_zugang_empfaenger\" value=\"steriltechnik@weiss-apparatebau.de\">\n    <input type=\"hidden\" name=\"weiss_zugang_bestaetigung\" value=\"ja\">\n    <input type=\"hidden\" name=\"weiss_zeit\" value=\"1794154462\">\n    <input type=\"hidden\" name=\"weiss_zugang_sig\" value=\"fb64a950cd2ec914f53b112eb980ee73db2b2987a7460876bddafffa6e77c86d\">\n    <fieldset class=\"weiss-zugang-art\">\n      <legend>You are enquiring as<\/legend>\n      <label><input type=\"radio\" name=\"weiss_art\" value=\"endkunde\"  required> End customer<\/label>\n      <label><input type=\"radio\" name=\"weiss_art\" value=\"oem\" > OEM<\/label>\n    <\/fieldset>\n    <label class=\"weiss-zugang-feld\"><span>Company and location<\/span>\n      <input type=\"text\" name=\"weiss_firma\" value=\"\" required autocomplete=\"organization\"><\/label>\n    <label class=\"weiss-zugang-feld\"><span>Contact, first and last name<\/span>\n      <input type=\"text\" name=\"weiss_name\" value=\"\" required autocomplete=\"name\"><\/label>\n    <label class=\"weiss-zugang-feld\"><span>E-mail address<\/span>\n      <input type=\"email\" name=\"weiss_mail\" value=\"\" required autocomplete=\"email\"><\/label>\n    <label class=\"weiss-zugang-feld\"><span>Phone number<\/span>\n      <input type=\"tel\" name=\"weiss_telefon\" value=\"\" required autocomplete=\"tel\"><\/label>\n    <label class=\"weiss-zugang-falle\" aria-hidden=\"true\"><span>Firma<\/span>\n      <input type=\"text\" name=\"weiss_firma_2\" value=\"\" tabindex=\"-1\" autocomplete=\"off\"><\/label>\n    <label class=\"weiss-zugang-pflicht\"><input type=\"checkbox\" name=\"weiss_datenschutz\" value=\"1\" required>\n      <span>I agree to my details being processed in order to handle this enquiry.        <a href=\"https:\/\/weiss-apparatebau.de\/en\/datenschutzerklaerung\/\" target=\"_blank\" rel=\"noopener\">Privacy policy<\/a><\/span><\/label>\n    <button type=\"submit\" class=\"weiss-zugang-knopf\">Request access<\/button>\n  <\/form>\n  <\/div>\n  <aside class=\"weiss-zugang-leiste\" aria-labelledby=\"weiss-zugang-leiste-titel\">\n    <p class=\"weiss-zugang-marke\">How it works<\/p>\n    <h3 class=\"weiss-zugang-leiste-titel\" id=\"weiss-zugang-leiste-titel\">Three steps to your prices<\/h3>\n    <ol class=\"weiss-zugang-schritte\">\n            <li><span class=\"weiss-zugang-nr\" aria-hidden=\"true\">1<\/span>\n        <span class=\"weiss-zugang-schritt\"><strong>Send your request<\/strong> As an end customer or OEM. The confirmation arrives by <span class=\"weiss-zugang-nb\">e-mail<\/span> straight away.<\/span><\/li>\n            <li><span class=\"weiss-zugang-nr\" aria-hidden=\"true\">2<\/span>\n        <span class=\"weiss-zugang-schritt\"><strong>Receive your password<\/strong> The link and password for your price area come by <span class=\"weiss-zugang-nb\">e-mail<\/span>.<\/span><\/li>\n            <li><span class=\"weiss-zugang-nr\" aria-hidden=\"true\">3<\/span>\n        <span class=\"weiss-zugang-schritt\"><strong>Configure with prices<\/strong> See the prices for your price group and send your inquiry with the configuration no.<\/span><\/li>\n          <\/ol>\n    <p class=\"weiss-zugang-zwischentitel\">Good to know<\/p>\n    <ul class=\"weiss-zugang-gut\">\n            <li>Separate price areas for end customers and OEMs.<\/li>\n            <li>Inspection certificate 3.1 free of charge, further certificates at extra cost.<\/li>\n            <li>Without a password: components, dimensions and materials selectable, prices on request.<\/li>\n          <\/ul>\n    <div class=\"weiss-zugang-kontakt\">\n      <p class=\"weiss-zugang-zwischentitel\">Questions first?<\/p>\n      <p class=\"weiss-zugang-kontakt-name\">Weiss Steriltechnik<\/p>\n      <a href=\"tel:+4951284044981\">Phone 0 51 28 - 40 44 981<\/a>\n      <a href=\"mailto:steriltechnik@weiss-apparatebau.de\">steriltechnik@weiss-apparatebau.de<\/a>\n    <\/div>\n  <\/aside>\n<\/section>\n<style>\n.weiss-zugang{max-width:1248px;margin:0 auto;scroll-margin-top:120px}\n.weiss-zugang-haupt{min-width:0}\n@media(min-width:1200px){.weiss-zugang{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,440px);gap:56px;align-items:start}}\n.weiss-zugang-leiste{background:#800000;color:#fff;border-top:6px solid #cc0000;padding:32px 28px 34px;margin-top:48px;min-width:0}\n@media(min-width:1200px){.weiss-zugang-leiste{margin-top:0;padding:34px 36px 30px}}\n.weiss-zugang .weiss-zugang-leiste p{color:#fff}\n.weiss-zugang-leiste .weiss-zugang-marke{margin:0 0 10px;font-size:14px;line-height:1.5;opacity:.9}\n.weiss-zugang-leiste .weiss-zugang-leiste-titel{margin:0 0 22px;color:#fff;font-size:26px;line-height:1.25;font-weight:800}\n.weiss-zugang-schritte{list-style:none;margin:0 0 24px;padding:0;display:grid;gap:14px}\n.weiss-zugang-schritte li{display:grid;grid-template-columns:36px minmax(0,1fr);gap:14px;align-items:start;margin:0;font-size:15px;line-height:1.5}\n.weiss-zugang-nr{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid #fff;font-weight:700;font-size:15px}\n.weiss-zugang-schritt strong{display:block;font-size:16px;margin-bottom:2px}\n.weiss-zugang-leiste .weiss-zugang-zwischentitel{margin:0 0 10px;padding-top:20px;border-top:1px solid rgba(255,255,255,.28);font-weight:700;font-size:16px}\n.weiss-zugang-gut{list-style:none;margin:0 0 22px;padding:0;display:grid;gap:8px}\n.weiss-zugang-gut li{position:relative;margin:0;padding-left:28px;font-size:15px;line-height:1.5}\n.weiss-zugang-gut li:before{content:\"\";position:absolute;left:3px;top:6px;width:6px;height:11px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}\n.weiss-zugang-kontakt{display:grid;gap:2px}\n.weiss-zugang-nb{white-space:nowrap}\n.weiss-zugang-leiste .weiss-zugang-kontakt-name{margin:0;font-size:15px}\n.weiss-zugang .weiss-zugang-kontakt a{display:flex;align-items:center;min-height:44px;color:#fff;font-weight:700;font-size:15px;text-decoration:underline;text-underline-offset:3px;overflow-wrap:anywhere}\n.weiss-zugang .weiss-zugang-kontakt a:hover{color:#fff;text-decoration-thickness:2px}\n.weiss-zugang-titel{margin:0 0 8px}\n.weiss-zugang-text{margin:0 0 20px}\n.weiss-zugang-form{display:grid;gap:14px}\n@media(min-width:700px){.weiss-zugang-form{grid-template-columns:1fr 1fr}\n.weiss-zugang-art,.weiss-zugang-pflicht,.weiss-zugang-knopf{grid-column:1\/-1}}\n.weiss-zugang-feld{display:grid;grid-template-rows:1fr auto;gap:5px;font-size:14px}\n.weiss-zugang-feld span{align-self:end}\n.weiss-zugang-feld input{padding:11px 12px;border:1px solid #d7dbe0;border-radius:3px;font:inherit;min-height:44px}\n.weiss-zugang-art{border:0;padding:0;margin:0;font-size:14px}\n.weiss-zugang-art legend{padding:0;margin-bottom:4px}\n.weiss-zugang-art label{display:inline-flex;align-items:center;gap:8px;margin-right:18px;min-height:44px}\n.weiss-zugang-pflicht{display:flex;gap:10px;align-items:flex-start;font-size:13.5px;line-height:1.5;min-height:44px;padding:4px 0}\n.weiss-zugang-pflicht input{margin-top:3px;width:18px;height:18px}\n.weiss-zugang-knopf{min-height:44px;padding:12px 24px;border:0;border-radius:3px;background:#d60a0a;color:#fff;\n  font:inherit;font-weight:700;letter-spacing:.02em;cursor:pointer;justify-self:start}\n.weiss-zugang-knopf:hover{background:#4c0000}\n.weiss-zugang a{color:#4c0000;text-decoration:underline}\n.weiss-zugang a:hover{color:#d60a0a}\n.weiss-zugang-falle{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}\n.weiss-zugang-ok{background:#eefaf1;border-left:4px solid #1f7a3d;padding:12px 14px;margin:0 0 18px}\n.weiss-zugang-fehler{background:#fdecec;border-left:4px solid #d60a0a;padding:12px 14px;margin:0 0 18px}\n<\/style>\n<script>\n(function () {\n  document.addEventListener('click', function (e) {\n    var a = e.target && e.target.closest ? e.target.closest('a[href=\"#weiss-zugang\"]') : null;\n    if (!a) { return; }\n    var ziel = document.getElementById('weiss-zugang');\n    if (!ziel) { return; }\n    \/\/ Dreimal, weil das Fenster beim Schliessen die alte Position zurueckholt und\n    \/\/ der Zeitpunkt davon nicht zugesichert ist.\n    var hin = function () { ziel.scrollIntoView({block: 'start'}); };\n    setTimeout(hin, 300);\n    setTimeout(hin, 800);\n    setTimeout(hin, 1400);\n  });\n})();\n<\/script>\n    <\/div><\/div><\/div><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":2827,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"100-width.php","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-4344","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Stainless steel weld fittings to DIN 11865 | Weiss<\/title>\n<meta name=\"description\" content=\"Bends, tees and reducers in stainless steel to DIN 11865. Select design, dimensions and material and send a technical inquiry.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Stainless steel weld fittings to DIN 11865 | Weiss\" \/>\n<meta property=\"og:description\" content=\"Bends, tees and reducers in stainless steel to DIN 11865. Select design, dimensions and material and send a technical inquiry.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/\" \/>\n<meta property=\"og:site_name\" content=\"Weiss Apparatebau GmbH\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-23T12:41:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/1weiss\u00a9patrik.labitzke\u00a9candidateflow.de_B-9.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"798\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"163 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/en\\\/service\\\/weld-fittings-stainless-steel\\\/\",\"url\":\"https:\\\/\\\/weiss-apparatebau.de\\\/en\\\/service\\\/weld-fittings-stainless-steel\\\/\",\"name\":\"Stainless steel weld fittings to DIN 11865 | Weiss\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/#website\"},\"datePublished\":\"2026-09-17T03:54:24+00:00\",\"dateModified\":\"2026-09-23T12:41:04+00:00\",\"description\":\"Bends, tees and reducers in stainless steel to DIN 11865. Select design, dimensions and material and send a technical inquiry.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/en\\\/service\\\/weld-fittings-stainless-steel\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/weiss-apparatebau.de\\\/en\\\/service\\\/weld-fittings-stainless-steel\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/en\\\/service\\\/weld-fittings-stainless-steel\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/weiss-apparatebau.de\\\/en\\\/precision-engineering-in-stainless-steel-made-in-germany\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Services\",\"item\":\"https:\\\/\\\/weiss-apparatebau.de\\\/en\\\/service\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Stainless steel weld fittings\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/#website\",\"url\":\"https:\\\/\\\/weiss-apparatebau.de\\\/\",\"name\":\"Ihr Partner f\u00fcr pr\u00e4zise Schwei\u00dfmontagen & Apparatebau \u2013 Made in Germany.\",\"description\":\"Spezialist f\u00fcr Edelstahl Beh\u00e4lterbau, Rohrleitungsbau &amp; Steriltechnik in der Industrie\",\"publisher\":{\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/weiss-apparatebau.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/#organization\",\"name\":\"Ihr Partner f\u00fcr pr\u00e4zise Schwei\u00dfmontagen & Apparatebau \u2013 Made in Germany.\",\"url\":\"https:\\\/\\\/weiss-apparatebau.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/weiss-apparatebau.de\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/WEISS-Logo.png\",\"contentUrl\":\"https:\\\/\\\/weiss-apparatebau.de\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/WEISS-Logo.png\",\"width\":400,\"height\":176,\"caption\":\"Ihr Partner f\u00fcr pr\u00e4zise Schwei\u00dfmontagen & Apparatebau \u2013 Made in Germany.\"},\"image\":{\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Stainless steel weld fittings to DIN 11865 | Weiss","description":"Bends, tees and reducers in stainless steel to DIN 11865. Select design, dimensions and material and send a technical inquiry.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/","og_locale":"en_US","og_type":"article","og_title":"Stainless steel weld fittings to DIN 11865 | Weiss","og_description":"Bends, tees and reducers in stainless steel to DIN 11865. Select design, dimensions and material and send a technical inquiry.","og_url":"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/","og_site_name":"Weiss Apparatebau GmbH","article_modified_time":"2026-09-23T12:41:04+00:00","og_image":[{"width":1200,"height":798,"url":"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/1weiss\u00a9patrik.labitzke\u00a9candidateflow.de_B-9.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"163 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/","url":"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/","name":"Stainless steel weld fittings to DIN 11865 | Weiss","isPartOf":{"@id":"https:\/\/weiss-apparatebau.de\/#website"},"datePublished":"2026-09-17T03:54:24+00:00","dateModified":"2026-09-23T12:41:04+00:00","description":"Bends, tees and reducers in stainless steel to DIN 11865. Select design, dimensions and material and send a technical inquiry.","breadcrumb":{"@id":"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/weiss-apparatebau.de\/en\/precision-engineering-in-stainless-steel-made-in-germany\/"},{"@type":"ListItem","position":2,"name":"Services","item":"https:\/\/weiss-apparatebau.de\/en\/service\/"},{"@type":"ListItem","position":3,"name":"Stainless steel weld fittings"}]},{"@type":"WebSite","@id":"https:\/\/weiss-apparatebau.de\/#website","url":"https:\/\/weiss-apparatebau.de\/","name":"Ihr Partner f\u00fcr pr\u00e4zise Schwei\u00dfmontagen & Apparatebau \u2013 Made in Germany.","description":"Spezialist f\u00fcr Edelstahl Beh\u00e4lterbau, Rohrleitungsbau &amp; Steriltechnik in der Industrie","publisher":{"@id":"https:\/\/weiss-apparatebau.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/weiss-apparatebau.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/weiss-apparatebau.de\/#organization","name":"Ihr Partner f\u00fcr pr\u00e4zise Schwei\u00dfmontagen & Apparatebau \u2013 Made in Germany.","url":"https:\/\/weiss-apparatebau.de\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/weiss-apparatebau.de\/#\/schema\/logo\/image\/","url":"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/03\/WEISS-Logo.png","contentUrl":"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/03\/WEISS-Logo.png","width":400,"height":176,"caption":"Ihr Partner f\u00fcr pr\u00e4zise Schwei\u00dfmontagen & Apparatebau \u2013 Made in Germany."},"image":{"@id":"https:\/\/weiss-apparatebau.de\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/pages\/4344","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/comments?post=4344"}],"version-history":[{"count":7,"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/pages\/4344\/revisions"}],"predecessor-version":[{"id":4390,"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/pages\/4344\/revisions\/4390"}],"up":[{"embeddable":true,"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/pages\/2827"}],"wp:attachment":[{"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/media?parent=4344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}