{"id":33,"date":"2026-06-10T11:13:55","date_gmt":"2026-06-10T03:13:55","guid":{"rendered":"http:\/\/zdoxig.com\/index.php\/zdoxig-home\/"},"modified":"2026-07-03T17:56:40","modified_gmt":"2026-07-03T09:56:40","slug":"zdoxig-home","status":"publish","type":"page","link":"https:\/\/zdoxig.com\/","title":{"rendered":"ZDOXIG Official"},"content":{"rendered":"\n<style id=\"zdoxig-wp-shell-guard\">\nhtml { margin-top: 0 !important; }\nhtml,\nbody {\n  background: #000 !important;\n}\n#wpadminbar {\n  display: none !important;\n  height: 0 !important;\n  opacity: 0 !important;\n  pointer-events: none !important;\n  visibility: hidden !important;\n}\nbody.wp-theme-zdoxig-theme-v2-1 {\n  background: #000 !important;\n  margin: 0 !important;\n  padding-top: 0 !important;\n  overflow: hidden !important;\n}\nbody.wp-theme-zdoxig-theme-v2-1 > main {\n  display: block !important;\n  margin: 0 !important;\n  max-width: none !important;\n  padding: 0 !important;\n  width: 100% !important;\n}\nbody.wp-theme-zdoxig-theme-v2-1 > main > .wp-block-post-content,\nbody.wp-theme-zdoxig-theme-v2-1 > main > article,\nbody.wp-theme-zdoxig-theme-v2-1 > main .entry-content {\n  margin: 0 !important;\n  max-width: none !important;\n  padding: 0 !important;\n  width: 100% !important;\n}\nbody.wp-theme-zdoxig-theme-v2-1 > main > div > h1:first-child,\nbody.wp-theme-zdoxig-theme-v2-1 > main > div > h1:first-child + p:empty {\n  display: none !important;\n}\nbody.wp-theme-zdoxig-theme-v2-1 #main-content {\n  left: 0 !important;\n  margin: 0 !important;\n  max-width: none !important;\n  right: auto !important;\n  top: 0 !important;\n  width: 100% !important;\n}\nbody.wp-theme-zdoxig-theme-v2-1 > nav.navbar,\nbody.wp-theme-zdoxig-theme-v2-1 > footer.footer,\nbody.wp-theme-zdoxig-theme-v2-1 .cart-sidebar,\nbody.wp-theme-zdoxig-theme-v2-1 .cart-overlay,\nbody.wp-theme-zdoxig-theme-v2-1 .cart-drawer,\nbody.wp-theme-zdoxig-theme-v2-1 .shopping-cart,\nbody.wp-theme-zdoxig-theme-v2-1 #cartSidebar,\nbody.wp-theme-zdoxig-theme-v2-1 #cartOverlay,\nbody.wp-theme-zdoxig-theme-v2-1 #cartDrawer,\nbody.wp-theme-zdoxig-theme-v2-1 [class*=\"cart-sidebar\"],\nbody.wp-theme-zdoxig-theme-v2-1 [class*=\"cart-overlay\"] {\n  display: none !important;\n}\n.zdoxig-static-frame-wrap {\n  position: fixed !important;\n  inset: 0 !important;\n  z-index: 2147483000 !important;\n  width: 100vw !important;\n  height: 100vh !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  background: #000 !important;\n  overflow: hidden !important;\n}\n.zdoxig-static-frame {\n  display: block !important;\n  width: 100vw !important;\n  height: 100vh !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  border: 0 !important;\n  background: #000 !important;\n}\n<\/style>\n<div class=\"zdoxig-static-frame-wrap\">\n  <iframe class=\"zdoxig-static-frame\" id=\"zdoxig-static-frame-zdoxig-home\" title=\"ZDOXIG Official\" loading=\"eager\" allow=\"autoplay; fullscreen; clipboard-write; encrypted-media\"><\/iframe>\n<\/div>\n<script id=\"zdoxig-static-html-zdoxig-home\" type=\"text\/plain\">PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJ6aC1DTiI+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+DQogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPg0KICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJaRE9YSUcgd2F0Y2ggd2Vic2l0ZSB3aXRoIHNlbGVjdGVkIGltcG9ydGVkIG1vdmVtZW50IGNvbGxlY3Rpb25zLCBvd25lcnNoaXAgam91cm5leSwgc2VydmljZSBjYXJlLCBvbmxpbmUgY29uc3VsdGF0aW9uIGFuZCBhdXRoZW50aWNpdHkgdmVyaWZpY2F0aW9uLiI+DQogICAgPHRpdGxlPlpET1hJRyBPZmZpY2lhbDwvdGl0bGU+Cg0KICAgIDxzdHlsZSBpZD0iemRveGlnLXByb2R1Y3Rpb24tcmV2ZWFsLWd1YXJkIj4KICAgICAgICBodG1sLAogICAgICAgIGJvZHksCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSB7CiAgICAgICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW4gIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2Uubm8tc2Nyb2xsIHsKICAgICAgICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UuaW50cm8tbG9hZGluZyBoZWFkZXIsCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZS5pbnRyby1sb2FkaW5nIHNlY3Rpb24sCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZS5pbnRyby1sb2FkaW5nIGZvb3RlciwKICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlLmludHJvLWxvYWRpbmcgLmJhY2stdG8tdG9wIHsKICAgICAgICAgICAgb3BhY2l0eTogMSAhaW1wb3J0YW50OwogICAgICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0byAhaW1wb3J0YW50OwogICAgICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgIC8qIDIwMjYwNjI5IHJlZmluZW1lbnQ6IGhvbWVwYWdlIHJlYWRhYmlsaXR5LCB2aWRlbyBjb3B5IGZpdCwgY29udGFjdCBwb2xpc2ggKi8KICAgICAgICAjbmF2YmFyIC5uYXYtYnJhbmQtcGlsbCB7IHdpZHRoOiAxNzZweDsgfQogICAgICAgICNuYXZiYXIgLm5hdi1icmFuZC1uYW1lIHsgZm9udC1zaXplOiAuOThyZW07IGZvbnQtd2VpZ2h0OiA2MDA7IGxldHRlci1zcGFjaW5nOiAuMDJlbTsgfQogICAgICAgICNob21lIC5oZXJvLW1lZGlhLWZ1c2lvbiBpbWcgewogICAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDI1KTsKICAgICAgICAgICAgYW5pbWF0aW9uOiB6ZG94aWdIZXJvUG9zdGVyUmV2ZWFsIDEuNDVzIGN1YmljLWJlemllciguMjIsMSwuMzYsMSkgLjE4cyBmb3J3YXJkczsKICAgICAgICB9CiAgICAgICAgQGtleWZyYW1lcyB6ZG94aWdIZXJvUG9zdGVyUmV2ZWFsIHsKICAgICAgICAgICAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9CiAgICAgICAgfQogICAgICAgICNob21lIC5oZXJvLWFnZW5jeS1iYWRnZSB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoLjc4cmVtLCAxdncsIC45NnJlbSk7CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC45Mik7CiAgICAgICAgfQogICAgICAgICNob21lICNoZXJvX3N1YiB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoLjc4cmVtLCAxLjA1dncsIDFyZW0pICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC44NikgIWltcG9ydGFudDsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC4yNGVtICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgICNob21lIC5oZXJvLXRpdGxlLWZpdCB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoNC4yNXJlbSwgOHZ3LCA3LjdyZW0pICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAuOTIgIWltcG9ydGFudDsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDM1ZW0gIWltcG9ydGFudDsKICAgICAgICAgICAgdGV4dC1zaGFkb3c6IDAgMThweCA3MnB4IHJnYmEoMCwwLDAsLjgyKSwgMCAycHggOHB4IHJnYmEoMCwwLDAsLjQ2KTsKICAgICAgICB9CiAgICAgICAgI2hvbWUgI2hlcm9fZGVzYyB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMXJlbSwgMS4ydncsIDEuMThyZW0pICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjg2ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC43MikgIWltcG9ydGFudDsKICAgICAgICAgICAgbWF4LXdpZHRoOiA0OHJlbSAhaW1wb3J0YW50OwogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjA4ZW0gIWltcG9ydGFudDsKICAgICAgICB9CiAgICAgICAgI2hvbWUgLmhlcm8tbWV0YS1yb3cgc3BhbiwKICAgICAgICAjaG9tZSAuaGVyby10cnVzdC1iYXIsCiAgICAgICAgI2hvbWUgLmhlcm8tc3RhdC1jYXJkIGVtIHsKICAgICAgICAgICAgZm9udC1zaXplOiBjbGFtcCguNzZyZW0sIC44MnZ3LCAuODhyZW0pICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgICNob21lIC5nc2FwLWhlcm8gewogICAgICAgICAgICBmaWx0ZXI6IGJsdXIoMTBweCk7CiAgICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgLjgycyBjdWJpYy1iZXppZXIoLjIyLDEsLjM2LDEpLCB0cmFuc2Zvcm0gLjgycyBjdWJpYy1iZXppZXIoLjIyLDEsLjM2LDEpLCBmaWx0ZXIgLjgycyBjdWJpYy1iZXppZXIoLjIyLDEsLjM2LDEpOwogICAgICAgIH0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrOjphZnRlciB7CiAgICAgICAgICAgIGNvbnRlbnQ6ICIiOwogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIGluc2V0OiBhdXRvIDAgMDsKICAgICAgICAgICAgaGVpZ2h0OiAyOHZoOwogICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICAgICAgei1pbmRleDogNDU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHRyYW5zcGFyZW50IDAlLCByZ2JhKDUsNiw1LC43NCkgNjIlLCAjMDkwYjBhIDEwMCUpOwogICAgICAgIH0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZSA+IC5yZWxhdGl2ZS56LTEwIHsKICAgICAgICAgICAgbWF4LXdpZHRoOiBtaW4oOTYwcHgsIGNhbGMoMTAwdncgLSAzcmVtKSk7CiAgICAgICAgICAgIHBhZGRpbmc6IGNsYW1wKDEuMXJlbSwgMi4ydncsIDEuN3JlbSk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7CiAgICAgICAgICAgIHRleHQtc2hhZG93OiAwIDE0cHggNDRweCByZ2JhKDAsMCwwLC43Mik7CiAgICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgLjQ1cyBlYXNlLCBmaWx0ZXIgLjQ1cyBlYXNlLCB0cmFuc2Zvcm0gLjQ1cyBlYXNlOwogICAgICAgIH0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZS5pcy1hY3RpdmUgPiAucmVsYXRpdmUuei0xMCB7CiAgICAgICAgICAgIGZpbHRlcjogYnJpZ2h0bmVzcygxLjE4KTsKICAgICAgICB9CiAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayBoMiB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMi41NXJlbSwgNS4ydncsIDUuNDVyZW0pICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAuOTUgIWltcG9ydGFudDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogY2xhbXAoLjhyZW0sIDEuNnZ3LCAxLjJyZW0pICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlLS1kZXRhaWwgPiAucmVsYXRpdmUuei0xMCB7CiAgICAgICAgICAgIG1heC13aWR0aDogbWluKDcyMHB4LCBjYWxjKDEwMHZ3IC0gM3JlbSkpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTR2aCk7CiAgICAgICAgfQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlLS1kZXRhaWwgaDIgewogICAgICAgICAgICBmb250LXNpemU6IGNsYW1wKDIuMDVyZW0sIDMuOXZ3LCA0LjJyZW0pICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlLS1kZXRhaWwgLnZpZGVvLXNsaWRlLWNvcHkgewogICAgICAgICAgICBtYXgtd2lkdGg6IDI4cmVtOwogICAgICAgICAgICBmb250LXNpemU6IGNsYW1wKC44MnJlbSwgLjkydncsIC45NnJlbSk7CiAgICAgICAgfQogICAgICAgICNzaG93Y2FzZS0zZCB7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IC0xcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMwNTA2MDUgMCUsICMwOTBiMGEgMjQlLCAjMDkwYjBhIDEwMCUpICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgICNpbm5vdmF0aW9uIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgIzA5MGIwYSAwJSwgIzExMTYxNCAxOCUsICMxMTE2MTQgODIlLCAjMDgwYTA5IDEwMCUpICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgICN2YXVsdCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMwODBhMDkgMCUsICMwMDAgMTYlLCAjMDAwIDEwMCUpICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgICNjb250YWN0Lnpkb3hpZy1jb250YWN0LXN0dWRpbyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmYgIWltcG9ydGFudDsKICAgICAgICAgICAgY29sb3I6ICMwNTFBMjQ7CiAgICAgICAgICAgIGJvcmRlci10b3A6IDA7CiAgICAgICAgICAgIHBhZGRpbmctdG9wOiBjbGFtcCg1cmVtLCAxMHZ3LCA4cmVtKTsKICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IGNsYW1wKDVyZW0sIDEwdncsIDhyZW0pOwogICAgICAgIH0KICAgICAgICAjY29udGFjdC56ZG94aWctY29udGFjdC1zdHVkaW8gLmNvbnRhY3Qtc3R1ZGlvLXdyYXAgewogICAgICAgICAgICBtYXgtd2lkdGg6IDExODBweDsKICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgICNjb250YWN0Lnpkb3hpZy1jb250YWN0LXN0dWRpbyAuY29udGFjdC1zdHVkaW8taGVybyB7CiAgICAgICAgICAgIG1heC13aWR0aDogNTIwcHg7CiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvIGNsYW1wKDNyZW0sIDd2dywgNS41cmVtKTsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIH0KICAgICAgICAjY29udGFjdC56ZG94aWctY29udGFjdC1zdHVkaW8gLmNvbnRhY3Qtc3R1ZGlvLWhlcm8gaDIgewogICAgICAgICAgICBjb2xvcjogIzBEMjEyQzsKICAgICAgICAgICAgZm9udC1zaXplOiBjbGFtcCgyLjZyZW0sIDZ2dywgNS41cmVtKTsKICAgICAgICAgICAgbGluZS1oZWlnaHQ6IC45NjsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDNlbTsKICAgICAgICB9CiAgICAgICAgI2NvbnRhY3QuemRveGlnLWNvbnRhY3Qtc3R1ZGlvIC5jb250YWN0LXN0dWRpby1oZXJvIHAgewogICAgICAgICAgICBjb2xvcjogcmdiYSg1LDI2LDM2LC43Mik7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMXJlbSwgMS4zdncsIDEuMTJyZW0pOwogICAgICAgICAgICBsaW5lLWhlaWdodDogMS45OwogICAgICAgIH0KICAgICAgICAjY29udGFjdC56ZG94aWctY29udGFjdC1zdHVkaW8gLmNvbnRhY3Qtc3R1ZGlvLWFjdGlvbnMsCiAgICAgICAgI2NvbnRhY3QuemRveGlnLWNvbnRhY3Qtc3R1ZGlvIC5jb250YWN0LXN0dWRpby1ncmlkIHsKICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgICAgZ2FwOiAxcmVtOwogICAgICAgIH0KICAgICAgICAjY29udGFjdC56ZG94aWctY29udGFjdC1zdHVkaW8gLmNvbnRhY3Qtc3R1ZGlvLWFjdGlvbnMgewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDEuNjVyZW07CiAgICAgICAgfQogICAgICAgICNjb250YWN0Lnpkb3hpZy1jb250YWN0LXN0dWRpbyAuY29udGFjdC1zdHVkaW8tZ3JpZCB7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIG1pbm1heCgwLCAxZnIpKTsKICAgICAgICB9CiAgICAgICAgI2NvbnRhY3QuemRveGlnLWNvbnRhY3Qtc3R1ZGlvIC5jb250YWN0LXN0dWRpby1jYXJkLAogICAgICAgICNjb250YWN0Lnpkb3hpZy1jb250YWN0LXN0dWRpbyAuY29udGFjdC1zdHVkaW8tYnV0dG9uIHsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjhweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgICAgICAgY29sb3I6ICMwNTFBMjQ7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDE2cHggcmdiYSg1LDI2LDM2LC4wOCk7CiAgICAgICAgfQogICAgICAgICNjb250YWN0Lnpkb3hpZy1jb250YWN0LXN0dWRpbyAuY29udGFjdC1zdHVkaW8tY2FyZCB7CiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDIyMHB4OwogICAgICAgICAgICBwYWRkaW5nOiAxLjM1cmVtOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNSwyNiwzNiwuMDYpOwogICAgICAgIH0KICAgICAgICAjY29udGFjdC56ZG94aWctY29udGFjdC1zdHVkaW8gLmNvbnRhY3Qtc3R1ZGlvLWNhcmQgcDpmaXJzdC1jaGlsZCB7CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDUsMjYsMzYsLjQ1KTsKICAgICAgICAgICAgZm9udC1zaXplOiAuNzJyZW07CiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAuMThlbTsKICAgICAgICB9CiAgICAgICAgI2NvbnRhY3QuemRveGlnLWNvbnRhY3Qtc3R1ZGlvIC5jb250YWN0LXN0dWRpby1jYXJkIHN0cm9uZyB7CiAgICAgICAgICAgIGNvbG9yOiAjMEQyMTJDOwogICAgICAgICAgICBmb250LXNpemU6IGNsYW1wKDEuMzVyZW0sIDJ2dywgMS45NXJlbSk7CiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjA1OwogICAgICAgIH0KICAgICAgICAjY29udGFjdC56ZG94aWctY29udGFjdC1zdHVkaW8gLmNvbnRhY3Qtc3R1ZGlvLWNhcmQgc3BhbiB7CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDUsMjYsMzYsLjYyKTsKICAgICAgICAgICAgZm9udC1zaXplOiAuOXJlbTsKICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNzsKICAgICAgICB9CiAgICAgICAgI2NvbnRhY3QuemRveGlnLWNvbnRhY3Qtc3R1ZGlvIC5jb250YWN0LXN0dWRpby1idXR0b24gewogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDUwcHg7CiAgICAgICAgICAgIHBhZGRpbmc6IC45cmVtIDEuMjVyZW07CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICAgICAgICBmb250LXNpemU6IC44OHJlbTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4yNXMgZWFzZSwgYm94LXNoYWRvdyAuMjVzIGVhc2U7CiAgICAgICAgfQogICAgICAgICNjb250YWN0Lnpkb3hpZy1jb250YWN0LXN0dWRpbyAuY29udGFjdC1zdHVkaW8tYnV0dG9uLnByaW1hcnkgewogICAgICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzA1MUEyNDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoNSwyNiwzNiwuMSksIDAgOXB4IDE4cHggcmdiYSg1LDI2LDM2LC4xMiksIGluc2V0IDAgMnB4IDhweCByZ2JhKDI1NSwyNTUsMjU1LC4zNCk7CiAgICAgICAgfQogICAgICAgICNjb250YWN0Lnpkb3hpZy1jb250YWN0LXN0dWRpbyAuY29udGFjdC1zdHVkaW8tYnV0dG9uOmhvdmVyIHsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwogICAgICAgIH0KICAgICAgICAvKiAyMDI2MDYyOSBjb250YWN0IHNjYWxlLXVwOiB3aGl0ZSwgZ2VuZXJvdXMsIHByb21wdC1pbnNwaXJlZCBzdHVkaW8gcGFnZSAqLwogICAgICAgICNjb250YWN0Lnpkb3hpZy1jb250YWN0LXN0dWRpbyB7CiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IG1pbig5ODBweCwgMTAwc3ZoKTsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgcGFkZGluZy10b3A6IGNsYW1wKDdyZW0sIDE0dncsIDEycmVtKTsKICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IGNsYW1wKDdyZW0sIDE0dncsIDEycmVtKTsKICAgICAgICB9CiAgICAgICAgI2NvbnRhY3QuemRveGlnLWNvbnRhY3Qtc3R1ZGlvIC5jb250YWN0LXN0dWRpby13cmFwIHsKICAgICAgICAgICAgd2lkdGg6IG1pbigxMDAlLCAxMjQwcHgpOwogICAgICAgIH0KICAgICAgICAjY29udGFjdC56ZG94aWctY29udGFjdC1zdHVkaW8gLmNvbnRhY3Qtc3R1ZGlvLWhlcm8gewogICAgICAgICAgICBtYXgtd2lkdGg6IDYyMHB4OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiBjbGFtcCgzLjhyZW0sIDh2dywgNi44cmVtKTsKICAgICAgICB9CiAgICAgICAgI2NvbnRhY3QuemRveGlnLWNvbnRhY3Qtc3R1ZGlvIC5jb250YWN0LXN0dWRpby1oZXJvIGgyIHsKICAgICAgICAgICAgZm9udC1zaXplOiBjbGFtcCgzLjM1cmVtLCA3Ljh2dywgNy40cmVtKTsKICAgICAgICAgICAgbGluZS1oZWlnaHQ6IC45OwogICAgICAgICAgICB0ZXh0LXdyYXA6IGJhbGFuY2U7CiAgICAgICAgfQogICAgICAgICNjb250YWN0Lnpkb3hpZy1jb250YWN0LXN0dWRpbyAuY29udGFjdC1zdHVkaW8taGVybyBwIHsKICAgICAgICAgICAgbWF4LXdpZHRoOiA1NjBweDsKICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsKICAgICAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxLjA4cmVtLCAxLjQ1dncsIDEuMjhyZW0pOwogICAgICAgIH0KICAgICAgICAjY29udGFjdC56ZG94aWctY29udGFjdC1zdHVkaW8gLmNvbnRhY3Qtc3R1ZGlvLWFjdGlvbnMgewogICAgICAgICAgICBtYXgtd2lkdGg6IDQ4MHB4OwogICAgICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOwogICAgICAgIH0KICAgICAgICAjY29udGFjdC56ZG94aWctY29udGFjdC1zdHVkaW8gLmNvbnRhY3Qtc3R1ZGlvLWJ1dHRvbiB7CiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDU4cHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgICAgICB9CiAgICAgICAgI2NvbnRhY3QuemRveGlnLWNvbnRhY3Qtc3R1ZGlvIC5jb250YWN0LXN0dWRpby1ncmlkIHsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNCwgbWlubWF4KDAsIDFmcikpOwogICAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgICAgICB9CiAgICAgICAgI2NvbnRhY3QuemRveGlnLWNvbnRhY3Qtc3R1ZGlvIC5jb250YWN0LXN0dWRpby1jYXJkIHsKICAgICAgICAgICAgbWluLWhlaWdodDogY2xhbXAoMjYwcHgsIDI4dncsIDM0MHB4KTsKICAgICAgICAgICAgcGFkZGluZzogY2xhbXAoMS4zNXJlbSwgMi40dncsIDIuMXJlbSk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDM2cHg7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggcmdiYSg1LDI2LDM2LC4wOCksIDAgMjhweCA3MHB4IHJnYmEoNSwyNiwzNiwuMDYpOwogICAgICAgIH0KICAgICAgICAjY29udGFjdC56ZG94aWctY29udGFjdC1zdHVkaW8gLmNvbnRhY3Qtc3R1ZGlvLWNhcmQgc3Ryb25nIHsKICAgICAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxLjY1cmVtLCAyLjU1dncsIDIuNnJlbSk7CiAgICAgICAgfQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkgewogICAgICAgICAgICAjbmF2YmFyIC5uYXYtYnJhbmQtcGlsbCB7IHdpZHRoOiA1MnB4OyB9CiAgICAgICAgICAgICNob21lICNoZXJvX3N1YiwKICAgICAgICAgICAgI2hvbWUgLmhlcm8tdGl0bGUtZml0LAogICAgICAgICAgICAjaG9tZSAjaGVyb19kZXNjIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIGNsaXA6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgI2hvbWUgLmhlcm8tdGl0bGUtZml0IHsgZm9udC1zaXplOiBjbGFtcCgzLjI1cmVtLCAxNnZ3LCA1LjVyZW0pICFpbXBvcnRhbnQ7IH0KICAgICAgICAgICAgI2hvbWUgI2hlcm9fZGVzYyB7IG1heC13aWR0aDogbWluKDkydncsIDMycmVtKSAhaW1wb3J0YW50OyBmb250LXNpemU6IC45OHJlbSAhaW1wb3J0YW50OyB9CiAgICAgICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgaDIgeyBmb250LXNpemU6IGNsYW1wKDIuMnJlbSwgMTF2dywgNHJlbSkgIWltcG9ydGFudDsgfQogICAgICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZSA+IC5yZWxhdGl2ZS56LTEwIHsgcGFkZGluZzogMXJlbTsgfQogICAgICAgICAgICAjY29udGFjdC56ZG94aWctY29udGFjdC1zdHVkaW8gLmNvbnRhY3Qtc3R1ZGlvLWFjdGlvbnMsCiAgICAgICAgICAgICNjb250YWN0Lnpkb3hpZy1jb250YWN0LXN0dWRpbyAuY29udGFjdC1zdHVkaW8tZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9CiAgICAgICAgfQogICAgCgogICAgICAgIC8qIDIwMjYtMDYtMzAgZ2xvYmFsIG5hdmlnYXRpb24gbG9nbyByZXBhaXIgKi8KICAgICAgICAjbmF2YmFyIC5uYXYtYnJhbmQtcGlsbCB7CiAgICAgICAgICAgIHdpZHRoOiAxMzZweCAhaW1wb3J0YW50OwogICAgICAgICAgICBoZWlnaHQ6IDQ0cHggIWltcG9ydGFudDsKICAgICAgICAgICAgbWluLWhlaWdodDogNDRweCAhaW1wb3J0YW50OwogICAgICAgICAgICBnYXA6IC41NXJlbSAhaW1wb3J0YW50OwogICAgICAgICAgICBwYWRkaW5nOiAuMThyZW0gLjc4cmVtIC4xOHJlbSAuMjJyZW0gIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgICNuYXZiYXIgLm5hdi1icmFuZC1tYXJrIHsKICAgICAgICAgICAgd2lkdGg6IDM2cHggIWltcG9ydGFudDsKICAgICAgICAgICAgaGVpZ2h0OiAzNnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGZsZXg6IDAgMCAzNnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHggIWltcG9ydGFudDsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzA3MTEwZiAhaW1wb3J0YW50OwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4zMikgIWltcG9ydGFudDsKICAgICAgICAgICAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsKICAgICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNCksIDAgMTBweCAyNHB4IHJnYmEoMCwgMCwgMCwgLjE4KSAhaW1wb3J0YW50OwogICAgICAgICAgICBmb250LWZhbWlseTogJ0JhcmxvdycsICdNaWNyb3NvZnQgWWFIZWknLCAnUGluZ0ZhbmcgU0MnLCBzYW5zLXNlcmlmICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjk0cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbCAhaW1wb3J0YW50OwogICAgICAgICAgICBmb250LXdlaWdodDogODAwICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgICNuYXZiYXIgLm5hdi1icmFuZC1tYXJrIGltZyB7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgICNuYXZiYXIgLm5hdi1icmFuZC1uYW1lIHsKICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50OwogICAgICAgICAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50OwogICAgICAgICAgICBmb250LXNpemU6IC43OHJlbSAhaW1wb3J0YW50OwogICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWwgIWltcG9ydGFudDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDgwMCAhaW1wb3J0YW50OwogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjEyZW0gIWltcG9ydGFudDsKICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEgIWltcG9ydGFudDsKICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcCAhaW1wb3J0YW50OwogICAgICAgIH0KCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7CiAgICAgICAgICAgICNuYXZiYXIgLm5hdi1icmFuZC1waWxsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiA0NHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQ0cHggIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIG1pbi13aWR0aDogNDRweCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgcGFkZGluZzogM3B4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICBnYXA6IDAgIWltcG9ydGFudDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgI25hdmJhciAubmF2LWJyYW5kLW1hcmsgewogICAgICAgICAgICAgICAgd2lkdGg6IDM4cHggIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIGhlaWdodDogMzhweCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgZmxleC1iYXNpczogMzhweCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgZm9udC1zaXplOiAuOTZyZW0gIWltcG9ydGFudDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgI25hdmJhciAubmF2LWJyYW5kLW5hbWUgewogICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjc2Nyb2xsLXNjZW5lLWltYWdlOm5vdChbc3JjXSksCiAgICAgICAgI3Njcm9sbC1zY2VuZS1pbWFnZVtzcmM9IiJdIHsKICAgICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CgogICAgPC9zdHlsZT4KCiAgICA8c2NyaXB0PgogICAgICAgIHdpbmRvdy56ZG94aWdGb3JjZVJldmVhbCA9IGZ1bmN0aW9uIHpkb3hpZ0ZvcmNlUmV2ZWFsKCkgew0KICAgICAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5Ow0KICAgICAgICAgICAgaWYgKCFib2R5KSByZXR1cm4gd2luZG93LnNldFRpbWVvdXQod2luZG93Lnpkb3hpZ0ZvcmNlUmV2ZWFsLCA4MCk7DQogICAgICAgICAgICB2YXIgcHJlbG9hZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWxvYWRlcicpOw0KICAgICAgICAgICAgdmFyIG5hdmJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduYXZiYXInKTsNCiAgICAgICAgICAgIHZhciBoZXJvSXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZ3NhcC1oZXJvJyk7DQoNCiAgICAgICAgICAgIGlmIChwcmVsb2FkZXIpIHsNCiAgICAgICAgICAgICAgICBwcmVsb2FkZXIuY2xhc3NMaXN0LmFkZCgncHJlbG9hZGVyLWhpZGUnKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChwcmVsb2FkZXIpIHByZWxvYWRlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgICAgIH0sIDc2MCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbm8tc2Nyb2xsJywgJ2ludHJvLWxvYWRpbmcnKTsNCg0KICAgICAgICAgICAgaWYgKG5hdmJhcikgew0KICAgICAgICAgICAgICAgIG5hdmJhci5zdHlsZS5vcGFjaXR5ID0gJzEnOw0KICAgICAgICAgICAgICAgIG5hdmJhci5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWSgwKSc7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGhlcm9JdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgew0KICAgICAgICAgICAgICAgIGVsLnN0eWxlLm9wYWNpdHkgPSAnMSc7DQogICAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVkoMCknOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH07DQoNCiAgICAgICAgd2luZG93LnNldFRpbWVvdXQod2luZG93Lnpkb3hpZ0ZvcmNlUmV2ZWFsLCA2NTAwKTsKICAgIDwvc2NyaXB0PgogICAgDQogICAgPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2Nkbi50YWlsd2luZGNzcy5jb20iPg0KICAgIDxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbSI+DQogICAgPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4NCiAgICA8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20iIGNyb3Nzb3JpZ2luPg0KICAgIDxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA2NCA2NCclM0UlM0NyZWN0IHdpZHRoPSc2NCcgaGVpZ2h0PSc2NCcgZmlsbD0nJTIzMDkwYjBhJy8lM0UlM0NjaXJjbGUgY3g9JzMyJyBjeT0nMzInIHI9JzIyJyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAwZmZjYycgc3Ryb2tlLXdpZHRoPSc0Jy8lM0UlM0N0ZXh0IHg9JzMyJyB5PSczOCcgdGV4dC1hbmNob3I9J21pZGRsZScgZm9udC1mYW1pbHk9J0FyaWFsJyBmb250LXNpemU9JzE4JyBmb250LXdlaWdodD0nNzAwJyBmaWxsPSclMjNmMmYwZTgnJTNFWiUzQy90ZXh0JTNFJTNDL3N2ZyUzRSI+DQoNCiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4udGFpbHdpbmRjc3MuY29tIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZ3NhcC8zLjEyLjIvZ3NhcC5taW4uanMiIGRlZmVyPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9nc2FwLzMuMTIuMi9TY3JvbGxUcmlnZ2VyLm1pbi5qcyIgZGVmZXI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vdW5wa2cuY29tL2x1Y2lkZUBsYXRlc3QvZGlzdC91bWQvbHVjaWRlLm1pbi5qcyIgZGVmZXI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHN0dWRpby1mcmVpZ2h0L2xlbmlzQDEuMC40Mi9kaXN0L2xlbmlzLm1pbi5qcyIgZGVmZXI+PC9zY3JpcHQ+DQoNCiAgICA8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI\/ZmFtaWx5PUluc3RydW1lbnQrU2VyaWY6aXRhbEAxJmZhbWlseT1CYXJsb3c6d2dodEAzMDA7NDAwOzUwMDs2MDAmZmFtaWx5PUFsbWFyYWk6d2dodEAzMDA7NDAwOzcwMDs4MDAmZmFtaWx5PVBvcHBpbnM6d2dodEAzMDA7NDAwOzUwMDs2MDAmZmFtaWx5PVNvdXJjZStTZXJpZis0Oml0YWwsb3Bzeix3Z2h0QDEsOC4uNjAsNDAwOzEsOC4uNjAsNTAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4NCg0KICAgIDxzdHlsZT4NCiAgICAgICAgOnJvb3QgeyANCiAgICAgICAgICAgIC0tbW9kZXJuLWFjY2VudDogI0RFREJDODsNCiAgICAgICAgICAgIC0tbW9kZXJuLWRhcms6ICMwMDAwMDA7DQogICAgICAgICAgICAtLW1vZGVybi1ncmF5OiAjMTAxMDEwOw0KICAgICAgICAgICAgLS1tb2Rlcm4tbGlnaHQtZ3JheTogIzIxMjEyMTsNCiAgICAgICAgICAgIC0tbHVtZTogI0RFREJDODsNCiAgICAgICAgICAgIC0tbW9vbi1ibHVlOiAjRTFFMENDOw0KICAgICAgICAgICAgLS1uZXV0cmFsLWxpbmU6IHJnYmEoMjIyLCAyMTksIDIwMCwgLjE0KTsNCiAgICAgICAgICAgIC0tbmV1dHJhbC10ZXh0OiAjRTFFMENDOw0KICAgICAgICAgICAgLS1uZXV0cmFsLW11dGVkOiByZ2JhKDIyNSwgMjI0LCAyMDQsIC41OCk7DQogICAgICAgICAgICAtLXN1cmZhY2UtYmFzZTogIzAwMDAwMDsNCiAgICAgICAgICAgIC0tYWNjZW50LWluazogIzA1MDUwNDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaHRtbCB7IG92ZXJmbG93LXg6IGhpZGRlbjsgbWF4LXdpZHRoOiAxMDAlOyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IH0NCg0KICAgICAgICBib2R5IHsgDQogICAgICAgICAgICAtLXNjZW5lLWJnOiAjMDAwMDAwOw0KICAgICAgICAgICAgLS1zY2VuZS1mZzogI0UxRTBDQzsNCiAgICAgICAgICAgIC0tc2NlbmUtYWNjZW50OiAjREVEQkM4Ow0KICAgICAgICAgICAgLS1zY2VuZS1pbWFnZS1vcGFjaXR5OiAuMTI7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlLWJhc2UpOw0KICAgICAgICAgICAgY29sb3I6IHZhcigtLW5ldXRyYWwtdGV4dCk7IA0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdCYXJsb3cnLCAnTWljcm9zb2Z0IFlhSGVpJywgJ1BpbmdGYW5nIFNDJywgc2Fucy1zZXJpZjsNCiAgICAgICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47DQogICAgICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yLXg6IG5vbmU7DQogICAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsNCiAgICAgICAgfQ0KICAgICAgICBib2R5OjpiZWZvcmUgew0KICAgICAgICAgICAgY29udGVudDogbm9uZTsNCiAgICAgICAgfQ0KICAgICAgICBzZWN0aW9uIHsgc2Nyb2xsLW1hcmdpbi10b3A6IDkycHg7IH0NCiAgICAgICAgI2hvbWUgeyBzY3JvbGwtbWFyZ2luLXRvcDogMDsgfQ0KDQogICAgICAgIC5mb250LWRpc3BsYXkgeyBmb250LWZhbWlseTogJ0luc3RydW1lbnQgU2VyaWYnLCAnU291cmNlIFNlcmlmIDQnLCBzZXJpZjsgZm9udC1zdHlsZTogaXRhbGljOyBmb250LXdlaWdodDogNDAwOyB9DQogICAgICAgIC5mb250LWJvZHkgeyBmb250LWZhbWlseTogJ0JhcmxvdycsICdNaWNyb3NvZnQgWWFIZWknLCAnUGluZ0ZhbmcgU0MnLCBzYW5zLXNlcmlmOyB9DQogICAgICAgIC5ub2lzZS1vdmVybGF5LA0KICAgICAgICAuYmctbm9pc2UgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH0NCiAgICAgICAgLm5vaXNlLW92ZXJsYXk6OmFmdGVyLA0KICAgICAgICAuYmctbm9pc2U6OmJlZm9yZSB7DQogICAgICAgICAgICBjb250ZW50OiAnJzsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIGluc2V0OiAwOw0KICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgdmlld0JveD0nMCAwIDI2MCAyNjAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NmaWx0ZXIgaWQ9J25vaXNlRmlsdGVyJyUzRSUzQ2ZlVHVyYnVsZW5jZSB0eXBlPSdmcmFjdGFsTm9pc2UnIGJhc2VGcmVxdWVuY3k9JzAuODUnIG51bU9jdGF2ZXM9JzMnIHN0aXRjaFRpbGVzPSdzdGl0Y2gnLyUzRSUzQy9maWx0ZXIlM0UlM0NyZWN0IHdpZHRoPScxMDAlMjUnIGhlaWdodD0nMTAwJTI1JyBmaWx0ZXI9J3VybCglMjNub2lzZUZpbHRlciknIG9wYWNpdHk9JzAuNDInLyUzRSUzQy9zdmclM0UiKTsNCiAgICAgICAgICAgIG9wYWNpdHk6IC4yMjsNCiAgICAgICAgICAgIG1peC1ibGVuZC1tb2RlOiBvdmVybGF5Ow0KICAgICAgICAgICAgei1pbmRleDogMjsNCiAgICAgICAgfQ0KICAgICAgICAuYmctbm9pc2U6OmJlZm9yZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgdmlld0JveD0nMCAwIDI2MCAyNjAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NmaWx0ZXIgaWQ9J25vaXNlRmlsdGVyJyUzRSUzQ2ZlVHVyYnVsZW5jZSB0eXBlPSdmcmFjdGFsTm9pc2UnIGJhc2VGcmVxdWVuY3k9JzAuOScgbnVtT2N0YXZlcz0nNCcgc3RpdGNoVGlsZXM9J3N0aXRjaCcvJTNFJTNDL2ZpbHRlciUzRSUzQ3JlY3Qgd2lkdGg9JzEwMCUyNScgaGVpZ2h0PScxMDAlMjUnIGZpbHRlcj0ndXJsKCUyM25vaXNlRmlsdGVyKScgb3BhY2l0eT0nMC41Jy8lM0UlM0Mvc3ZnJTNFIik7DQogICAgICAgICAgICBvcGFjaXR5OiAuMTU7DQogICAgICAgIH0NCg0KICAgICAgICAjbmF2YmFyLm5hdi1zaGVsbCB7DQogICAgICAgICAgICB0b3A6IDA7DQogICAgICAgICAgICBsZWZ0OiAwOw0KICAgICAgICAgICAgcmlnaHQ6IDA7DQogICAgICAgICAgICB3aWR0aDogYXV0bzsNCiAgICAgICAgICAgIGhlaWdodDogNzhweDsNCiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvOw0KICAgICAgICAgICAgcGFkZGluZzogMCBjbGFtcCgxcmVtLCA0dncsIDRyZW0pOw0KICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsNCiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDEwcmVtLCAxM3JlbSkgbWlubWF4KDAsIDFmcikgbWlubWF4KDlyZW0sIDEzcmVtKTsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgICAgIGdhcDogY2xhbXAoLjc1cmVtLCAydncsIDEuNXJlbSk7DQogICAgICAgICAgICBtaXgtYmxlbmQtbW9kZTogbm9ybWFsOw0KICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCiAgICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogbm9uZTsNCiAgICAgICAgICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBub25lOw0KICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsNCiAgICAgICAgfQ0KICAgICAgICAjbmF2YmFyIC5uYXYtYnJhbmQtcGlsbCwNCiAgICAgICAgI25hdmJhciAubmF2LWNlbnRlci1waWxsLA0KICAgICAgICAjbmF2YmFyIC5uYXYtYWN0aW9uLXBpbGwsDQogICAgICAgICNuYXZiYXIgLm5hdi1tZW51LXBpbGwsDQogICAgICAgICNuYXZiYXIgLm5hdi1sYW5nLXBpbGwgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjAxKTsNCiAgICAgICAgICAgIGJhY2tncm91bmQtYmxlbmQtbW9kZTogbHVtaW5vc2l0eTsNCiAgICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig0cHgpOw0KICAgICAgICAgICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNHB4KTsNCiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7DQogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87DQogICAgICAgIH0NCiAgICAgICAgI25hdmJhciAubmF2LWJyYW5kLXBpbGw6OmJlZm9yZSwNCiAgICAgICAgI25hdmJhciAubmF2LWNlbnRlci1waWxsOjpiZWZvcmUsDQogICAgICAgICNuYXZiYXIgLm5hdi1hY3Rpb24tcGlsbDo6YmVmb3JlLA0KICAgICAgICAjbmF2YmFyIC5uYXYtbWVudS1waWxsOjpiZWZvcmUsDQogICAgICAgICNuYXZiYXIgLm5hdi1sYW5nLXBpbGw6OmJlZm9yZSB7DQogICAgICAgICAgICBjb250ZW50OiAiIjsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIGluc2V0OiAwOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDEuNHB4Ow0KICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsMjU1LDI1NSwwLjQ1KSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyMCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgNDAlLCByZ2JhKDI1NSwyNTUsMjU1LDApIDYwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA4MCUsIHJnYmEoMjU1LDI1NSwyNTUsMC40NSkgMTAwJSk7DQogICAgICAgICAgICAtd2Via2l0LW1hc2s6IGxpbmVhci1ncmFkaWVudCgjZmZmIDAgMCkgY29udGVudC1ib3gsIGxpbmVhci1ncmFkaWVudCgjZmZmIDAgMCk7DQogICAgICAgICAgICAtd2Via2l0LW1hc2stY29tcG9zaXRlOiB4b3I7DQogICAgICAgICAgICBtYXNrLWNvbXBvc2l0ZTogZXhjbHVkZTsNCiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOw0KICAgICAgICB9DQogICAgICAgICNuYXZiYXIgLm5hdi1icmFuZC1waWxsIHsKICAgICAgICAgICAganVzdGlmeS1zZWxmOiBzdGFydDsKICAgICAgICAgICAgd2lkdGg6IDE1NnB4OwogICAgICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDQ4cHg7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBnYXA6IC42OHJlbTsKICAgICAgICAgICAgcGFkZGluZzogLjJyZW0gLjlyZW0gLjJyZW0gLjJyZW07CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7CiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIH0KICAgICAgICAjbmF2YmFyIC5uYXYtYnJhbmQtbWFyayB7CiAgICAgICAgICAgIHdpZHRoOiA0MnB4OwogICAgICAgICAgICBoZWlnaHQ6IDQycHg7CiAgICAgICAgICAgIGZsZXg6IDAgMCA0MnB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7DQogICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOw0KICAgICAgICAgICAgZm9udC1zaXplOiAuOTVyZW07DQogICAgICAgICAgICBsaW5lLWhlaWdodDogMTsNCiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgICAgIH0NCiAgICAgICAgI25hdmJhciAubmF2LWJyYW5kLW1hcmsgaW1nIHsNCiAgICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7DQogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICAgICAgfQogICAgICAgICNuYXZiYXIgLm5hdi1icmFuZC1uYW1lIHsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC45KTsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdCYXJsb3cnLCAnTWljcm9zb2Z0IFlhSGVpJywgJ1BpbmdGYW5nIFNDJywgc2Fucy1zZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiAuODJyZW07CiAgICAgICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC4xM2VtOwogICAgICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICB9CiAgICAgICAgI25hdmJhci5uYXYtc2Nyb2xsZWQgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7DQogICAgICAgICAgICBib3gtc2hhZG93OiBub25lOw0KICAgICAgICB9DQogICAgICAgICNuYXZiYXIubmF2LXNjcm9sbGVkIC5uYXYtYnJhbmQtcGlsbCwNCiAgICAgICAgI25hdmJhci5uYXYtc2Nyb2xsZWQgLm5hdi1hY3Rpb24tcGlsbCwNCiAgICAgICAgI25hdmJhci5uYXYtc2Nyb2xsZWQgLm5hdi1tZW51LXBpbGwsDQogICAgICAgICNuYXZiYXIubmF2LXNjcm9sbGVkIC5uYXYtbGFuZy1waWxsIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsLjAxOCk7DQogICAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMDU1KTsNCiAgICAgICAgfQ0KICAgICAgICAjbmF2YmFyLm5hdi1zY3JvbGxlZCAubmF2LWNlbnRlci1waWxsIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wMTgpOw0KICAgICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC4wNik7DQogICAgICAgIH0NCiAgICAgICAgI25hdmJhci5uYXYtc2Nyb2xsZWQgLm5hdi1icmFuZC1tYXJrIHsgdHJhbnNmb3JtOiBub25lOyB9DQogICAgICAgICNuYXZiYXIgLm5hdi1jZW50ZXItcGlsbCB7CiAgICAgICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyOwogICAgICAgICAgICB3aWR0aDogbWluKDc2dncsIDkyMHB4KTsKICAgICAgICAgICAgaGVpZ2h0OiA1NHB4Ow0KICAgICAgICAgICAgbWluLWhlaWdodDogNTRweDsNCiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4Ow0KICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAgICAgICAgICAgZ2FwOiBjbGFtcCguMzVyZW0sIDEuMXZ3LCAuODVyZW0pOw0KICAgICAgICAgICAgcGFkZGluZzogLjQ0cmVtIGNsYW1wKC45cmVtLCAydncsIDEuNjVyZW0pOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7DQogICAgICAgICAgICBjb2xvcjogcmdiYSgyMjUsIDIyNCwgMjA0LCAuODIpOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjAxMik7DQogICAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjA1NSk7DQogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMDsKICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgfQogICAgICAgICNuYXZiYXIgLm5hdi1jZW50ZXItcGlsbCwKICAgICAgICAjbmF2YmFyIC5uYXYtY2VudGVyLXBpbGwgYSwKICAgICAgICAjbmF2YmFyIC5uYXYtbGFuZy1waWxsLAogICAgICAgICNuYXZiYXIgLm5hdi1tZW51LXBpbGwsCiAgICAgICAgI25hdmJhciAubmF2LWFjdGlvbi1waWxsLAogICAgICAgICNmdWxsLW1lbnUgLm1lbnUtbGluayB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnQmFybG93JywgJ01pY3Jvc29mdCBZYUhlaScsICdQaW5nRmFuZyBTQycsIHNhbnMtc2VyaWYgIWltcG9ydGFudDsKICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgICNuYXZiYXIgLm5hdi1jZW50ZXItcGlsbCBhIHsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICAgICAgICAgIHBhZGRpbmc6IC42cmVtIC43NnJlbTsKICAgICAgICAgICAgZm9udC1zaXplOiAuODJyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAuMDJlbTsKICAgICAgICAgICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjc4KTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgLjIycyBlYXNlLCBiYWNrZ3JvdW5kIC4yMnMgZWFzZSwgdHJhbnNmb3JtIC4yMnMgZWFzZTsKICAgICAgICB9CiAgICAgICAgI25hdmJhciAubmF2LWNlbnRlci1waWxsIGE6aG92ZXIgeyBjb2xvcjogI2ZmZjsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwuMDM1KTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyB9DQogICAgICAgICNuYXZiYXIgLm5hdi1hY3Rpb25zIHsganVzdGlmeS1zZWxmOiBlbmQ7IGdhcDogLjVyZW07IH0KICAgICAgICAjbmF2YmFyIC5uYXYtbWVudS1waWxsIHsgZGlzcGxheTogbm9uZTsgfQogICAgICAgICNuYXZiYXIgLm5hdi1hY3Rpb24tcGlsbCwNCiAgICAgICAgI25hdmJhciAubmF2LW1lbnUtcGlsbCwNCiAgICAgICAgI25hdmJhciAubmF2LWxhbmctcGlsbCB7DQogICAgICAgICAgICBoZWlnaHQ6IDQ4cHg7DQogICAgICAgICAgICBtaW4taGVpZ2h0OiA0OHB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7DQogICAgICAgICAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwuOCk7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjIycyBlYXNlLCBjb2xvciAuMjJzIGVhc2UsIGJhY2tncm91bmQgLjIycyBlYXNlOw0KICAgICAgICB9DQogICAgICAgICNuYXZiYXIgLm5hdi1hY3Rpb24tcGlsbDpob3ZlciwNCiAgICAgICAgI25hdmJhciAubmF2LW1lbnUtcGlsbDpob3ZlciwNCiAgICAgICAgI25hdmJhciAubmF2LWxhbmctcGlsbDpob3ZlciB7IHRyYW5zZm9ybTogc2NhbGUoMS4wNCk7IGNvbG9yOiAjZmZmOyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LC4wMzUpOyB9DQogICAgICAgICNuYXZiYXIgLm5hdi12YXVsdC1jdGEubmF2LWFjdGlvbi1waWxsIHsKICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgICAgIG1pbi13aWR0aDogMTA2cHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDAgLjk1cmVtOwogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjAyZW07CiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICAgICAgICBmb250LXNpemU6IC43NnJlbTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB9CiAgICAgICAgI25hdmJhciAubmF2LXZhdWx0LWxhYmVsIHsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfQogICAgICAgICNuYXZiYXIgLm5hdi1sYW5nLXBpbGwgeyBwYWRkaW5nOiAwIC44cmVtOyBsZXR0ZXItc3BhY2luZzogLS4wMWVtOyBmb250LXNpemU6IC43NHJlbTsgZm9udC13ZWlnaHQ6IDUwMDsgfQ0KICAgICAgICAjbmF2YmFyIC5uYXYtbWVudS1waWxsIHsgcGFkZGluZzogMCAuOXJlbTsgfQ0KICAgICAgICAjbmF2YmFyIC5uYXYtbWVudS1saW5lcyBkaXYgeyBiYWNrZ3JvdW5kOiAjZmZmOyBoZWlnaHQ6IDEuNXB4OyBib3JkZXItcmFkaXVzOiA5OTlweDsgfQ0KICAgICAgICAjbmF2YmFyIC5uYXYtdmF1bHQtbWFyayB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsLjg4KTsgYm94LXNoYWRvdzogMCAwIDE0cHggcmdiYSgyNTUsMjU1LDI1NSwuMjgpOyB9DQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkgew0KICAgICAgICAgICAgI25hdmJhci5uYXYtc2hlbGwgeyB0b3A6IDA7IGhlaWdodDogNjZweDsgcGFkZGluZzogMCAuNzVyZW07IGdyaWQtdGVtcGxhdGUtY29sdW1uczogM3JlbSBtaW5tYXgoMCwgMWZyKSAzcmVtOyB9DQogICAgICAgICAgICAjbmF2YmFyIC5uYXYtYnJhbmQtcGlsbCB7IHdpZHRoOiA0NHB4OyBoZWlnaHQ6IDQ0cHg7IG1pbi1oZWlnaHQ6IDQ0cHg7IHBhZGRpbmc6IDA7IH0NCiAgICAgICAgICAgICNuYXZiYXIgLm5hdi1icmFuZC1uYW1lIHsgZGlzcGxheTogbm9uZTsgfQ0KICAgICAgICAgICAgI25hdmJhciAubmF2LWNlbnRlci1waWxsIHsgZGlzcGxheTogbm9uZTsgfQ0KICAgICAgICAgICAgI25hdmJhciAubmF2LWxhbmctcGlsbCB7IGRpc3BsYXk6IG5vbmU7IH0NCiAgICAgICAgICAgICNuYXZiYXIgLm5hdi12YXVsdC1jdGEubmF2LWFjdGlvbi1waWxsIHsgZGlzcGxheTogbm9uZTsgfQ0KICAgICAgICAgICAgI25hdmJhciAubmF2LW1lbnUtcGlsbCB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyB3aWR0aDogNDRweDsgaGVpZ2h0OiA0NHB4OyBtaW4taGVpZ2h0OiA0NHB4OyBwYWRkaW5nOiAwOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLmhvbWUtY2luZW1hdGljLWluc2V0IHsNCiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwMGR2aDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDFyZW07DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwOw0KICAgICAgICB9DQogICAgICAgIC5ob21lLWNpbmVtYXRpYy1pbnNldCA+IC5ob21lLWNpbmVtYXRpYy1mcmFtZSB7DQogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMGR2aCAtIDJyZW0pOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMS41cmVtOw0KICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgICAgIGlzb2xhdGlvbjogaXNvbGF0ZTsNCiAgICAgICAgfQ0KICAgICAgICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHsNCiAgICAgICAgICAgIC5ob21lLWNpbmVtYXRpYy1pbnNldCB7IHBhZGRpbmc6IDEuNXJlbTsgfQ0KICAgICAgICAgICAgLmhvbWUtY2luZW1hdGljLWluc2V0ID4gLmhvbWUtY2luZW1hdGljLWZyYW1lIHsgbWluLWhlaWdodDogY2FsYygxMDBkdmggLSAzcmVtKTsgYm9yZGVyLXJhZGl1czogMnJlbTsgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLyogQ3JpdGljYWwgdXRpbGl0eSBmYWxsYmFjayBmb3IgZmlsZTovLywgV29yZFByZXNzIHByZXZpZXdzLCBvciBDRE4tYmxvY2tlZCBlbnZpcm9ubWVudHMuICovDQogICAgICAgIC5yZWxhdGl2ZSB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfQ0KICAgICAgICAuYWJzb2x1dGUgeyBwb3NpdGlvbjogYWJzb2x1dGU7IH0NCiAgICAgICAgLmZpeGVkIHsgcG9zaXRpb246IGZpeGVkOyB9DQogICAgICAgIC5zdGlja3kgeyBwb3NpdGlvbjogc3RpY2t5OyB9DQogICAgICAgIC5pbnNldC0wIHsgaW5zZXQ6IDA7IH0NCiAgICAgICAgLnRvcC0wIHsgdG9wOiAwOyB9DQogICAgICAgIC5ib3R0b20tMCB7IGJvdHRvbTogMDsgfQ0KICAgICAgICAubGVmdC0wIHsgbGVmdDogMDsgfQ0KICAgICAgICAucmlnaHQtMCB7IHJpZ2h0OiAwOyB9DQogICAgICAgIC56LTAgeyB6LWluZGV4OiAwOyB9DQogICAgICAgIC56LTEwIHsgei1pbmRleDogMTA7IH0NCiAgICAgICAgLnotMjAgeyB6LWluZGV4OiAyMDsgfQ0KICAgICAgICAuei0zMCB7IHotaW5kZXg6IDMwOyB9DQogICAgICAgIC56LTQwIHsgei1pbmRleDogNDA7IH0NCiAgICAgICAgLnotNTAgeyB6LWluZGV4OiA1MDsgfQ0KICAgICAgICAucG9pbnRlci1ldmVudHMtbm9uZSB7IHBvaW50ZXItZXZlbnRzOiBub25lOyB9DQogICAgICAgIC5wb2ludGVyLWV2ZW50cy1hdXRvIHsgcG9pbnRlci1ldmVudHM6IGF1dG87IH0NCiAgICAgICAgLmJsb2NrIHsgZGlzcGxheTogYmxvY2s7IH0NCiAgICAgICAgLmlubGluZS1ibG9jayB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgfQ0KICAgICAgICAuZmxleCB7IGRpc3BsYXk6IGZsZXg7IH0NCiAgICAgICAgLmlubGluZS1mbGV4IHsgZGlzcGxheTogaW5saW5lLWZsZXg7IH0NCiAgICAgICAgLmdyaWQgeyBkaXNwbGF5OiBncmlkOyB9DQogICAgICAgIC5oaWRkZW4geyBkaXNwbGF5OiBub25lOyB9DQogICAgICAgIC5mbGV4LWNvbCB7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH0NCiAgICAgICAgLmZsZXgtd3JhcCB7IGZsZXgtd3JhcDogd3JhcDsgfQ0KICAgICAgICAuc2hyaW5rLTAgeyBmbGV4LXNocmluazogMDsgfQ0KICAgICAgICAuaXRlbXMtY2VudGVyIHsgYWxpZ24taXRlbXM6IGNlbnRlcjsgfQ0KICAgICAgICAuaXRlbXMtc3RhcnQgeyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgfQ0KICAgICAgICAuaXRlbXMtZW5kIHsgYWxpZ24taXRlbXM6IGZsZXgtZW5kOyB9DQogICAgICAgIC5qdXN0aWZ5LWNlbnRlciB7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9DQogICAgICAgIC5qdXN0aWZ5LWJldHdlZW4geyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH0NCiAgICAgICAgLmp1c3RpZnktZW5kIHsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsgfQ0KICAgICAgICAucGxhY2UtaXRlbXMtY2VudGVyIHsgcGxhY2UtaXRlbXM6IGNlbnRlcjsgfQ0KICAgICAgICAuZ2FwLTIgeyBnYXA6IC41cmVtOyB9DQogICAgICAgIC5nYXAtMyB7IGdhcDogLjc1cmVtOyB9DQogICAgICAgIC5nYXAtNCB7IGdhcDogMXJlbTsgfQ0KICAgICAgICAuZ2FwLTUgeyBnYXA6IDEuMjVyZW07IH0NCiAgICAgICAgLmdhcC02IHsgZ2FwOiAxLjVyZW07IH0NCiAgICAgICAgLmdhcC04IHsgZ2FwOiAycmVtOyB9DQogICAgICAgIC5nYXAtMTAgeyBnYXA6IDIuNXJlbTsgfQ0KICAgICAgICAudy1mdWxsIHsgd2lkdGg6IDEwMCU7IH0NCiAgICAgICAgLmgtZnVsbCB7IGhlaWdodDogMTAwJTsgfQ0KICAgICAgICAubWluLWgtc2NyZWVuIHsgbWluLWhlaWdodDogMTAwdmg7IH0NCiAgICAgICAgLm1pbi1oLVxbMTAwZHZoXF0geyBtaW4taGVpZ2h0OiAxMDBkdmg7IH0NCiAgICAgICAgLmgtXFsxMDBkdmhcXSB7IGhlaWdodDogMTAwZHZoOyB9DQogICAgICAgIC5tYXgtdy1tZCB7IG1heC13aWR0aDogMjhyZW07IH0NCiAgICAgICAgLm1heC13LTJ4bCB7IG1heC13aWR0aDogNDJyZW07IH0NCiAgICAgICAgLm1heC13LTN4bCB7IG1heC13aWR0aDogNDhyZW07IH0NCiAgICAgICAgLm1heC13LTR4bCB7IG1heC13aWR0aDogNTZyZW07IH0NCiAgICAgICAgLm1heC13LTV4bCB7IG1heC13aWR0aDogNjRyZW07IH0NCiAgICAgICAgLm1heC13LTZ4bCB7IG1heC13aWR0aDogNzJyZW07IH0NCiAgICAgICAgLm1heC13LTd4bCB7IG1heC13aWR0aDogODByZW07IH0NCiAgICAgICAgLm14LWF1dG8geyBtYXJnaW4tbGVmdDogYXV0bzsgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9DQogICAgICAgIC5tYi0yIHsgbWFyZ2luLWJvdHRvbTogLjVyZW07IH0NCiAgICAgICAgLm1iLTMgeyBtYXJnaW4tYm90dG9tOiAuNzVyZW07IH0NCiAgICAgICAgLm1iLTQgeyBtYXJnaW4tYm90dG9tOiAxcmVtOyB9DQogICAgICAgIC5tYi02IHsgbWFyZ2luLWJvdHRvbTogMS41cmVtOyB9DQogICAgICAgIC5tYi04IHsgbWFyZ2luLWJvdHRvbTogMnJlbTsgfQ0KICAgICAgICAubWItMTAgeyBtYXJnaW4tYm90dG9tOiAyLjVyZW07IH0NCiAgICAgICAgLm1iLTEyIHsgbWFyZ2luLWJvdHRvbTogM3JlbTsgfQ0KICAgICAgICAubXQtNCB7IG1hcmdpbi10b3A6IDFyZW07IH0NCiAgICAgICAgLm10LTggeyBtYXJnaW4tdG9wOiAycmVtOyB9DQogICAgICAgIC5wLTQgeyBwYWRkaW5nOiAxcmVtOyB9DQogICAgICAgIC5wLTYgeyBwYWRkaW5nOiAxLjVyZW07IH0NCiAgICAgICAgLnAtNyB7IHBhZGRpbmc6IDEuNzVyZW07IH0NCiAgICAgICAgLnB4LTIgeyBwYWRkaW5nLWxlZnQ6IC41cmVtOyBwYWRkaW5nLXJpZ2h0OiAuNXJlbTsgfQ0KICAgICAgICAucHgtNCB7IHBhZGRpbmctbGVmdDogMXJlbTsgcGFkZGluZy1yaWdodDogMXJlbTsgfQ0KICAgICAgICAucHgtNiB7IHBhZGRpbmctbGVmdDogMS41cmVtOyBwYWRkaW5nLXJpZ2h0OiAxLjVyZW07IH0NCiAgICAgICAgLnB5LTEyIHsgcGFkZGluZy10b3A6IDNyZW07IHBhZGRpbmctYm90dG9tOiAzcmVtOyB9DQogICAgICAgIC5weS0xNiB7IHBhZGRpbmctdG9wOiA0cmVtOyBwYWRkaW5nLWJvdHRvbTogNHJlbTsgfQ0KICAgICAgICAucHktMjAgeyBwYWRkaW5nLXRvcDogNXJlbTsgcGFkZGluZy1ib3R0b206IDVyZW07IH0NCiAgICAgICAgLnB5LTI0IHsgcGFkZGluZy10b3A6IDZyZW07IHBhZGRpbmctYm90dG9tOiA2cmVtOyB9DQogICAgICAgIC5wdC0yMCB7IHBhZGRpbmctdG9wOiA1cmVtOyB9DQogICAgICAgIC5wYi0yMCB7IHBhZGRpbmctYm90dG9tOiA1cmVtOyB9DQogICAgICAgIC50ZXh0LWNlbnRlciB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQ0KICAgICAgICAudGV4dC1sZWZ0IHsgdGV4dC1hbGlnbjogbGVmdDsgfQ0KICAgICAgICAudXBwZXJjYXNlIHsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQ0KICAgICAgICAubGVhZGluZy1ub25lIHsgbGluZS1oZWlnaHQ6IDE7IH0NCiAgICAgICAgLmxlYWRpbmctdGlnaHQgeyBsaW5lLWhlaWdodDogMS4xODsgfQ0KICAgICAgICAubGVhZGluZy1yZWxheGVkIHsgbGluZS1oZWlnaHQ6IDEuNjI1OyB9DQogICAgICAgIC5mb250LWxpZ2h0IHsgZm9udC13ZWlnaHQ6IDMwMDsgfQ0KICAgICAgICAuZm9udC1tZWRpdW0geyBmb250LXdlaWdodDogNTAwOyB9DQogICAgICAgIC5mb250LWJvbGQgeyBmb250LXdlaWdodDogNzAwOyB9DQogICAgICAgIC50ZXh0LXhzIHsgZm9udC1zaXplOiAuNzVyZW07IGxpbmUtaGVpZ2h0OiAxcmVtOyB9DQogICAgICAgIC50ZXh0LXNtIHsgZm9udC1zaXplOiAuODc1cmVtOyBsaW5lLWhlaWdodDogMS4yNXJlbTsgfQ0KICAgICAgICAudGV4dC1iYXNlIHsgZm9udC1zaXplOiAxcmVtOyBsaW5lLWhlaWdodDogMS41cmVtOyB9DQogICAgICAgIC50ZXh0LWxnIHsgZm9udC1zaXplOiAxLjEyNXJlbTsgbGluZS1oZWlnaHQ6IDEuNzVyZW07IH0NCiAgICAgICAgLnRleHQteGwgeyBmb250LXNpemU6IDEuMjVyZW07IGxpbmUtaGVpZ2h0OiAxLjc1cmVtOyB9DQogICAgICAgIC50ZXh0LTJ4bCB7IGZvbnQtc2l6ZTogMS41cmVtOyBsaW5lLWhlaWdodDogMnJlbTsgfQ0KICAgICAgICAudGV4dC0zeGwgeyBmb250LXNpemU6IDEuODc1cmVtOyBsaW5lLWhlaWdodDogMi4yNXJlbTsgfQ0KICAgICAgICAudGV4dC00eGwgeyBmb250LXNpemU6IDIuMjVyZW07IGxpbmUtaGVpZ2h0OiAyLjVyZW07IH0NCiAgICAgICAgLnRyYWNraW5nLXdpZGVzdCB7IGxldHRlci1zcGFjaW5nOiAuMWVtOyB9DQogICAgICAgIC50cmFja2luZy1cWzBcLjJlbVxdIHsgbGV0dGVyLXNwYWNpbmc6IC4yZW07IH0NCiAgICAgICAgLnRyYWNraW5nLVxbMFwuM2VtXF0geyBsZXR0ZXItc3BhY2luZzogLjNlbTsgfQ0KICAgICAgICAudHJhY2tpbmctXFswXC40ZW1cXSB7IGxldHRlci1zcGFjaW5nOiAuNGVtOyB9DQogICAgICAgIC5vdmVyZmxvdy1oaWRkZW4geyBvdmVyZmxvdzogaGlkZGVuOyB9DQogICAgICAgIC5vdmVyZmxvdy14LWF1dG8geyBvdmVyZmxvdy14OiBhdXRvOyB9DQogICAgICAgIC5vYmplY3QtY292ZXIgeyBvYmplY3QtZml0OiBjb3ZlcjsgfQ0KICAgICAgICAub2JqZWN0LWNvbnRhaW4geyBvYmplY3QtZml0OiBjb250YWluOyB9DQogICAgICAgIC50cmFuc2l0aW9uLWFsbCB7IHRyYW5zaXRpb24tcHJvcGVydHk6IGFsbDsgdHJhbnNpdGlvbi1kdXJhdGlvbjogLjE1czsgfQ0KICAgICAgICAudHJhbnNpdGlvbi1jb2xvcnMgeyB0cmFuc2l0aW9uLXByb3BlcnR5OiBjb2xvciwgYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyLWNvbG9yLCB0ZXh0LWRlY29yYXRpb24tY29sb3IsIGZpbGwsIHN0cm9rZTsgdHJhbnNpdGlvbi1kdXJhdGlvbjogLjE1czsgfQ0KICAgICAgICAuZHVyYXRpb24tMzAwIHsgdHJhbnNpdGlvbi1kdXJhdGlvbjogLjNzOyB9DQogICAgICAgIC5yb3VuZGVkLWZ1bGwgeyBib3JkZXItcmFkaXVzOiA5OTk5cHg7IH0NCiAgICAgICAgLnJvdW5kZWQtM3hsIHsgYm9yZGVyLXJhZGl1czogMS41cmVtOyB9DQogICAgICAgIC5ib3JkZXIgeyBib3JkZXItd2lkdGg6IDFweDsgYm9yZGVyLXN0eWxlOiBzb2xpZDsgfQ0KICAgICAgICAuYm9yZGVyLWIgeyBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7IGJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkOyB9DQogICAgICAgIC5ib3JkZXIteSB7IGJvcmRlci10b3Atd2lkdGg6IDFweDsgYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4OyBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDsgYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7IH0NCiAgICAgICAgLm9wYWNpdHktMCB7IG9wYWNpdHk6IDA7IH0NCiAgICAgICAgLm9wYWNpdHktMTAwIHsgb3BhY2l0eTogMTsgfQ0KICAgICAgICAuaW52aXNpYmxlIHsgdmlzaWJpbGl0eTogaGlkZGVuOyB9DQogICAgICAgIC52aXNpYmxlIHsgdmlzaWJpbGl0eTogdmlzaWJsZTsgfQ0KICAgICAgICAudHJhbnNsYXRlLXktMTAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMi41cmVtKTsgfQ0KICAgICAgICAuc2NhbGUtMTA1IHsgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsgfQ0KICAgICAgICAuc2NhbGUtMTEwIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOyB9DQogICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgew0KICAgICAgICAgICAgLm1kXDpmbGV4IHsgZGlzcGxheTogZmxleDsgfQ0KICAgICAgICAgICAgLm1kXDpncmlkIHsgZGlzcGxheTogZ3JpZDsgfQ0KICAgICAgICAgICAgLm1kXDpibG9jayB7IGRpc3BsYXk6IGJsb2NrOyB9DQogICAgICAgICAgICAubWRcOmhpZGRlbiB7IGRpc3BsYXk6IG5vbmU7IH0NCiAgICAgICAgICAgIC5tZFw6ZmxleC1yb3cgeyBmbGV4LWRpcmVjdGlvbjogcm93OyB9DQogICAgICAgICAgICAubWRcOml0ZW1zLWVuZCB7IGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsgfQ0KICAgICAgICAgICAgLm1kXDpqdXN0aWZ5LWJldHdlZW4geyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH0NCiAgICAgICAgICAgIC5tZFw6Z2FwLTEwIHsgZ2FwOiAyLjVyZW07IH0NCiAgICAgICAgICAgIC5tZFw6Z2FwLTEyIHsgZ2FwOiAzcmVtOyB9DQogICAgICAgICAgICAubWRcOnB4LTEyIHsgcGFkZGluZy1sZWZ0OiAzcmVtOyBwYWRkaW5nLXJpZ2h0OiAzcmVtOyB9DQogICAgICAgICAgICAubWRcOnB5LTI0IHsgcGFkZGluZy10b3A6IDZyZW07IHBhZGRpbmctYm90dG9tOiA2cmVtOyB9DQogICAgICAgICAgICAubWRcOnB5LTM2IHsgcGFkZGluZy10b3A6IDlyZW07IHBhZGRpbmctYm90dG9tOiA5cmVtOyB9DQogICAgICAgICAgICAubWRcOnB5LTQwIHsgcGFkZGluZy10b3A6IDEwcmVtOyBwYWRkaW5nLWJvdHRvbTogMTByZW07IH0NCiAgICAgICAgICAgIC5tZFw6cHktNDggeyBwYWRkaW5nLXRvcDogMTJyZW07IHBhZGRpbmctYm90dG9tOiAxMnJlbTsgfQ0KICAgICAgICAgICAgLm1kXDp0ZXh0LWJhc2UgeyBmb250LXNpemU6IDFyZW07IGxpbmUtaGVpZ2h0OiAxLjVyZW07IH0NCiAgICAgICAgICAgIC5tZFw6dGV4dC01eGwgeyBmb250LXNpemU6IDNyZW07IGxpbmUtaGVpZ2h0OiAxOyB9DQogICAgICAgICAgICAubWRcOmdyaWQtY29scy0yIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpOyB9DQogICAgICAgICAgICAubWRcOmdyaWQtY29scy0zIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgbWlubWF4KDAsIDFmcikpOyB9DQogICAgICAgIH0NCg0KICAgICAgICAuemRveGlnLXdwLXBhZ2UgeyBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlLWJhc2UpOyBjb2xvcjogdmFyKC0tbmV1dHJhbC10ZXh0KTsgbWF4LXdpZHRoOiAxMDAlOyBvdmVyZmxvdy14OiBoaWRkZW47IH0NCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSB7IC0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzOiAwOyB9DQogICAgICAgIC56ZG94aWctd3AtcGFnZSAud3AtYmxvY2stcG9zdC10aXRsZSwNCiAgICAgICAgLnpkb3hpZy13cC1wYWdlIC5lbnRyeS10aXRsZSwNCiAgICAgICAgLnpkb3hpZy13cC1wYWdlIC53cC1ibG9jay1xdWVyeS10aXRsZSwNCiAgICAgICAgLnpkb3hpZy13cC1wYWdlIC53cC1ibG9jay1zcGFjZXI6aGFzKCsgLndwLWJsb2NrLXBvc3QtY29udGVudCkgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgLnpkb3hpZy13cC1wYWdlIG1haW4sDQogICAgICAgIC56ZG94aWctd3AtcGFnZSAud3AtYmxvY2stcG9zdC1jb250ZW50LA0KICAgICAgICAuemRveGlnLXdwLXBhZ2UgLmVudHJ5LWNvbnRlbnQgeyBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OyBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgLnpkb3hpZy13cC1wYWdlIG1haW4gPiAud3AtYmxvY2stZ3JvdXA6Zmlyc3QtY2hpbGQgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgLnpkb3hpZy13cC1wYWdlICNob21lIHsgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OyB9DQogICAgICAgIC53cC1yZWFkeS1zZWN0aW9uIHsgcG9zaXRpb246IHJlbGF0aXZlOyBpc29sYXRpb246IGlzb2xhdGU7IGJvcmRlci1jb2xvcjogdmFyKC0tbmV1dHJhbC1saW5lKSAhaW1wb3J0YW50OyB9DQoNCiAgICAgICAgI3Njcm9sbC1zY2VuZS1iYWNrZHJvcCB7DQogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7DQogICAgICAgICAgICBpbnNldDogMDsNCiAgICAgICAgICAgIHotaW5kZXg6IDA7DQogICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgICAgICAgICBiYWNrZ3JvdW5kOg0KICAgICAgICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNzQlIDI4JSwgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLXNjZW5lLWFjY2VudCkgMTAlLCB0cmFuc3BhcmVudCksIHRyYW5zcGFyZW50IDM0JSksDQogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLXNjZW5lLWJnKSA4MiUsICNmZmZmZmYgMTglKSwgdmFyKC0tc2NlbmUtYmcpKTsNCiAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMjIwbXMgZWFzZSwgb3BhY2l0eSAyMjBtcyBlYXNlOw0KICAgICAgICB9DQogICAgICAgICNzY3JvbGwtc2NlbmUtYmFja2Ryb3AgaW1nIHsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIGluc2V0OiAwOw0KICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsNCiAgICAgICAgICAgIG9iamVjdC1wb3NpdGlvbjogNzYlIGNlbnRlcjsNCiAgICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXNjZW5lLWltYWdlLW9wYWNpdHkpOw0KICAgICAgICAgICAgZmlsdGVyOiBzYXR1cmF0ZSguNjIpIGNvbnRyYXN0KDEuMDMpIGJyaWdodG5lc3MoMS4wOCk7DQogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDQpOw0KICAgICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMjBtcyBlYXNlLCBmaWx0ZXIgMjIwbXMgZWFzZTsNCiAgICAgICAgfQ0KICAgICAgICAjc2Nyb2xsLXNjZW5lLWJhY2tkcm9wOjphZnRlciB7DQogICAgICAgICAgICBjb250ZW50OiAiIjsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIGluc2V0OiAwOw0KICAgICAgICAgICAgYmFja2dyb3VuZDoNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1zY2VuZS1iZykgODglLCB0cmFuc3BhcmVudCkgMCUsIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1zY2VuZS1iZykgNTglLCB0cmFuc3BhcmVudCkgMzglLCB0cmFuc3BhcmVudCAxMDAlKSwNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tc2NlbmUtYmcpIDU0JSwgdHJhbnNwYXJlbnQpLCB0cmFuc3BhcmVudCA0OCUsIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1zY2VuZS1iZykgNjIlLCB0cmFuc3BhcmVudCkpOw0KICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAyMjBtcyBlYXNlOw0KICAgICAgICB9DQogICAgICAgIG1haW4sIGhlYWRlciwgZm9vdGVyIHsgcG9zaXRpb246IHJlbGF0aXZlOyB9DQogICAgICAgICNmdWxsLW1lbnUsICNwcmVsb2FkZXIgeyBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDsgfQ0KICAgICAgICBib2R5LnNjZW5lLWhvbWUgI3Njcm9sbC1zY2VuZS1iYWNrZHJvcCB7IG9wYWNpdHk6IDA7IH0NCiAgICAgICAgYm9keS5zY2VuZS1ob21lICNzY3JvbGwtc2NlbmUtYmFja2Ryb3AgaW1nIHsgb3BhY2l0eTogMCAhaW1wb3J0YW50OyB9DQogICAgICAgIGJvZHkuc2NlbmUtZXhwbG9yZS10cmFuc2l0aW9uICNzY3JvbGwtc2NlbmUtYmFja2Ryb3AgeyBvcGFjaXR5OiAwOyB9DQogICAgICAgIGJvZHkuc2NlbmUtZXhwbG9yZS10cmFuc2l0aW9uICNzY3JvbGwtc2NlbmUtYmFja2Ryb3AgaW1nIHsgb3BhY2l0eTogMCAhaW1wb3J0YW50OyB9DQogICAgICAgIGJvZHkuc2NlbmUtbGlnaHQgI3Njcm9sbC1zY2VuZS1iYWNrZHJvcCB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOg0KICAgICAgICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNzYlIDE4JSwgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLXNjZW5lLWFjY2VudCkgNyUsIHRyYW5zcGFyZW50KSwgdHJhbnNwYXJlbnQgMzYlKSwNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjZjhmYWY5IDAlLCB2YXIoLS1zY2VuZS1iZykgNDglLCAjZmZmZmZmIDEwMCUpOw0KICAgICAgICB9DQogICAgICAgIGJvZHkuc2NlbmUtbGlnaHQgI3Njcm9sbC1zY2VuZS1iYWNrZHJvcDo6YWZ0ZXIgew0KICAgICAgICAgICAgYmFja2dyb3VuZDoNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoMjU1LDI1NSwyNTUsLjg2KSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwuNTIpIDM4JSwgcmdiYSgyNTUsMjU1LDI1NSwuMDgpIDEwMCUpLA0KICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LDI1NSwyNTUsLjYyKSwgcmdiYSgyNTUsMjU1LDI1NSwuMTgpIDQ0JSwgcmdiYSgyNTUsMjU1LDI1NSwuNzYpKTsNCiAgICAgICAgfQ0KICAgICAgICBib2R5LnNjZW5lLWxpZ2h0ICNzY3JvbGwtc2NlbmUtYmFja2Ryb3AgaW1nIHsNCiAgICAgICAgICAgIGZpbHRlcjogc2F0dXJhdGUoLjUyKSBjb250cmFzdCguOTgpIGJyaWdodG5lc3MoMS4xMik7DQogICAgICAgIH0NCiAgICAgICAgbWFpbiwgaGVhZGVyLCBmb290ZXIgeyB6LWluZGV4OiAxOyB9DQogICAgICAgIFtkYXRhLXNjZW5lLWJnXSB7DQogICAgICAgICAgICAtLXNjZW5lLWxvY2FsLWJnOiB2YXIoLS1tb2Rlcm4tZGFyayk7DQogICAgICAgICAgICAtLXNjZW5lLWxvY2FsLWZnOiB2YXIoLS1uZXV0cmFsLXRleHQpOw0KICAgICAgICAgICAgLS1zY2VuZS1sb2NhbC1hY2NlbnQ6IHZhcigtLWx1bWUpOw0KICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICAgICAgaXNvbGF0aW9uOiBpc29sYXRlOw0KICAgICAgICAgICAgY29sb3I6IHZhcigtLXNjZW5lLWxvY2FsLWZnKTsNCiAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTgwbXMgZWFzZSwgY29sb3IgMTgwbXMgZWFzZSwgYm9yZGVyLWNvbG9yIDE4MG1zIGVhc2U7DQogICAgICAgIH0NCiAgICAgICAgLnByZW1pdW0tbmFycmF0aXZlLWNoYXB0ZXIgew0KICAgICAgICAgICAgbWluLWhlaWdodDogMTAwc3ZoOw0KICAgICAgICAgICAgc2Nyb2xsLW1hcmdpbi10b3A6IDA7DQogICAgICAgIH0NCiAgICAgICAgLnByZW1pdW0tbmFycmF0aXZlLWNoYXB0ZXI6OmJlZm9yZSB7DQogICAgICAgICAgICBjb250ZW50OiBhdHRyKGRhdGEtY2hhcHRlci1pbmRleCkgIiAvICIgYXR0cihkYXRhLWNoYXB0ZXItdGl0bGUpOw0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgbGVmdDogY2xhbXAoMS4yNXJlbSwgNHZ3LCAzcmVtKTsNCiAgICAgICAgICAgIHRvcDogY2xhbXAoNS41cmVtLCAxMHZoLCA3LjI1cmVtKTsNCiAgICAgICAgICAgIHotaW5kZXg6IDEyOw0KICAgICAgICAgICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1zY2VuZS1sb2NhbC1hY2NlbnQsICMwMGZmY2MpIDc2JSwgI2ZmZmZmZiAyNCUpOw0KICAgICAgICAgICAgZm9udC1mYW1pbHk6IFN5bmNvcGF0ZSwgc3lzdGVtLXVpLCBzYW5zLXNlcmlmOw0KICAgICAgICAgICAgZm9udC1zaXplOiAuNThyZW07DQogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjI4ZW07DQogICAgICAgICAgICBvcGFjaXR5OiAwOw0KICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEycHgpOw0KICAgICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAuNDJzIGVhc2UsIHRyYW5zZm9ybSAuNDJzIGVhc2U7DQogICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgICAgICAgfQ0KICAgICAgICAucHJlbWl1bS1uYXJyYXRpdmUtY2hhcHRlci5jaGFwdGVyLWlzLWFjdGl2ZTo6YmVmb3JlIHsNCiAgICAgICAgICAgIG9wYWNpdHk6IC44MjsNCiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsNCiAgICAgICAgfQ0KICAgICAgICAucHJlbWl1bS1uYXJyYXRpdmUtY2hhcHRlci5jaGFwdGVyLWlzLWxlYXZpbmcgew0KICAgICAgICAgICAgZmlsdGVyOiBzYXR1cmF0ZSguOTIpIGJyaWdodG5lc3MoLjk0KTsNCiAgICAgICAgfQ0KICAgICAgICAucHJlbWl1bS1uYXJyYXRpdmUtdWkgew0KICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkOw0KICAgICAgICAgICAgbGVmdDogY2xhbXAoMXJlbSwgM3Z3LCAyLjVyZW0pOw0KICAgICAgICAgICAgcmlnaHQ6IGNsYW1wKDFyZW0sIDN2dywgMi41cmVtKTsNCiAgICAgICAgICAgIGJvdHRvbTogY2xhbXAoMXJlbSwgM3Z3LCAycmVtKTsNCiAgICAgICAgICAgIHotaW5kZXg6IDcwOw0KICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsNCiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byAxZnIgYXV0bzsNCiAgICAgICAgICAgIGdhcDogMXJlbTsNCiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAgICBjb2xvcjogcmdiYSgyNDIsMjQwLDIzMiwuNzgpOw0KICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogICAgICAgICAgICBvcGFjaXR5OiAwOw0KICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEycHgpOw0KICAgICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAuMjhzIGVhc2UsIHRyYW5zZm9ybSAuMjhzIGVhc2UsIGNvbG9yIC4yOHMgZWFzZTsNCiAgICAgICAgfQ0KICAgICAgICBib2R5LnByZW1pdW0tbmFycmF0aXZlLWFjdGl2ZSAucHJlbWl1bS1uYXJyYXRpdmUtdWkgew0KICAgICAgICAgICAgb3BhY2l0eTogMTsNCiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsNCiAgICAgICAgfQ0KICAgICAgICBib2R5LnNjZW5lLXByb2R1Y3QtdHJhbnNpdGlvbiAucHJlbWl1bS1uYXJyYXRpdmUtdWkgew0KICAgICAgICAgICAgb3BhY2l0eTogMDsNCiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxNHB4KTsNCiAgICAgICAgfQ0KICAgICAgICBib2R5LnNjZW5lLWxpZ2h0IC5wcmVtaXVtLW5hcnJhdGl2ZS11aSB7DQogICAgICAgICAgICBjb2xvcjogcmdiYSg3LDE2LDE0LC43Mik7DQogICAgICAgIH0NCiAgICAgICAgLnByZW1pdW0tbmFycmF0aXZlLWxhYmVsLA0KICAgICAgICAucHJlbWl1bS1uYXJyYXRpdmUtY291bnQgew0KICAgICAgICAgICAgZm9udC1mYW1pbHk6IFN5bmNvcGF0ZSwgc3lzdGVtLXVpLCBzYW5zLXNlcmlmOw0KICAgICAgICAgICAgZm9udC1zaXplOiAuNThyZW07DQogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjI0ZW07DQogICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KICAgICAgICB9DQogICAgICAgIC5wcmVtaXVtLW5hcnJhdGl2ZS10cmFjayB7DQogICAgICAgICAgICBoZWlnaHQ6IDFweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsNCiAgICAgICAgICAgIG9wYWNpdHk6IC4yODsNCiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgICAgIH0NCiAgICAgICAgLnByZW1pdW0tbmFycmF0aXZlLWZpbGwgew0KICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7DQogICAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsNCiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKHZhcigtLXByZW1pdW0tbmFycmF0aXZlLXByb2dyZXNzLCAwKSk7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjEycyBsaW5lYXI7DQogICAgICAgIH0NCiAgICAgICAgW2RhdGEtc2NlbmUtYmddLnNjZW5lLWlzLWFjdGl2ZSAuZ3NhcC1mYWRlLXVwLA0KICAgICAgICBbZGF0YS1zY2VuZS1iZ10uc2NlbmUtaXMtYWN0aXZlIC5jYWxpYnJlLWNvcHksDQogICAgICAgIFtkYXRhLXNjZW5lLWJnXS5zY2VuZS1pcy1hY3RpdmUgLmFyY2hpdmUtY2FyZCwNCiAgICAgICAgW2RhdGEtc2NlbmUtYmddLnNjZW5lLWlzLWFjdGl2ZSAubGFkaWVzLXN0YWNrIGltZyB7DQogICAgICAgICAgICBhbmltYXRpb246IHNjZW5lVGV4dFJpc2UgLjc4cyBjdWJpYy1iZXppZXIoLjIyLDEsLjM2LDEpIGJvdGg7DQogICAgICAgIH0NCiAgICAgICAgQGtleWZyYW1lcyBzY2VuZVRleHRSaXNlIHsNCiAgICAgICAgICAgIGZyb20geyBvcGFjaXR5OiAuNDg7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxOHB4KTsgfQ0KICAgICAgICAgICAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnRoZW1lLWl2b3J5IHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgIzExMTQxMiAwJSwgIzBkMTAwZiAxMDAlKSAhaW1wb3J0YW50OyB9DQogICAgICAgIC50aGVtZS1zdGVlbCB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMxNjFhMTggMCUsICMxMDEzMTIgMTAwJSkgIWltcG9ydGFudDsgfQ0KICAgICAgICAudGhlbWUtbW9vbiB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMxMTE3MTYgMCUsICMxNzE5MTUgMTAwJSkgIWltcG9ydGFudDsgfQ0KICAgICAgICANCiAgICAgICAgLnRoZW1lLWl2b3J5IGgyLCAudGhlbWUtaXZvcnkgaDMsIC50aGVtZS1zdGVlbCBoMiwgLnRoZW1lLXN0ZWVsIGgzLCAudGhlbWUtbW9vbiBoMiwgLnRoZW1lLW1vb24gaDMgeyBjb2xvcjogdmFyKC0tbmV1dHJhbC10ZXh0KSAhaW1wb3J0YW50OyB9DQogICAgICAgIC50aGVtZS1pdm9yeSBwLCAudGhlbWUtc3RlZWwgcCwgLnRoZW1lLW1vb24gcCB7IGNvbG9yOiB2YXIoLS1uZXV0cmFsLW11dGVkKSAhaW1wb3J0YW50OyB9DQoNCiAgICAgICAgI2hvbWU6OmJlZm9yZSB7DQogICAgICAgICAgICBjb250ZW50OiAnJzsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIGluc2V0OiAwOw0KICAgICAgICAgICAgei1pbmRleDogMTsNCiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOw0KICAgICAgICAgICAgYmFja2dyb3VuZDoNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDUsNyw2LC4zKSAwJSwgcmdiYSg1LDcsNiwuMTgpIDQyJSwgcmdiYSg1LDcsNiwuNzIpIDEwMCUpLA0KICAgICAgICAgICAgICAgIHJnYmEoNSw3LDYsLjIyKTsNCiAgICAgICAgfQ0KDQogICAgICAgICNob21lOjphZnRlciB7DQogICAgICAgICAgICBjb250ZW50OiAnJzsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIGluc2V0OiAwOw0KICAgICAgICAgICAgei1pbmRleDogMjsNCiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1LDcsNiwuMTYpOw0KICAgICAgICB9DQoNCiAgICAgICAgI2hvbWUgPiAuYWJzb2x1dGUuaW5zZXQtMC56LTAgew0KICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgfQ0KDQogICAgICAgICNob21lID4gLmFic29sdXRlLmluc2V0LTAuei0wOjphZnRlciB7DQogICAgICAgICAgICBjb250ZW50OiAnJzsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIGluc2V0OiAwOw0KICAgICAgICAgICAgei1pbmRleDogNTsNCiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1LDcsNiwuMik7DQogICAgICAgIH0NCg0KICAgICAgICAjaG9tZSA+IC5hYnNvbHV0ZS5pbnNldC0wLnotMDo6YmVmb3JlIHsNCiAgICAgICAgICAgIGNvbnRlbnQ6ICcnOw0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgaW5zZXQ6IDA7DQogICAgICAgICAgICB6LWluZGV4OiA2Ow0KICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOg0KICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSg1LDcsNiwuMDI1KSAwJSwgcmdiYSg1LDcsNiwwKSA0OCUsIHJnYmEoNSw3LDYsLjA0NSkgMTAwJSksDQogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg1LDcsNiwuMDgpIDAlLCByZ2JhKDUsNyw2LDApIDQ4JSwgcmdiYSg1LDcsNiwuMTIpIDEwMCUpOw0KICAgICAgICB9DQoNCiAgICAgICAgI2hvbWUgPiAuYWJzb2x1dGUuaW5zZXQtMC56LTAgPiAuYWJzb2x1dGUuaW5zZXQtMCB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDUsNyw2LC4wOCkgMCUsIHJnYmEoNSw3LDYsMCkgNTAlLCByZ2JhKDUsNyw2LC4xNCkgMTAwJSkgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KDQogICAgICAgICNoZXJvLXZpZGVvIHsgb3BhY2l0eTogMCAhaW1wb3J0YW50OyB9DQoNCiAgICAgICAgI2hlcm8tdmlkZW8sDQogICAgICAgICNoZXJvLWltZyB7DQogICAgICAgICAgICBvYmplY3QtZml0OiBjb3ZlciAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgb2JqZWN0LXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogIzA1MDcwNjsNCiAgICAgICAgICAgIGZpbHRlcjogYnJpZ2h0bmVzcygxLjIpIGNvbnRyYXN0KDEuMDIpIHNhdHVyYXRlKDEuMikgIWltcG9ydGFudDsNCiAgICAgICAgICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsNCiAgICAgICAgfQ0KDQogICAgICAgICNoZXJvLWltZ1tkYXRhLXNsaWRlPSIwIl0geyBvYmplY3QtcG9zaXRpb246IDM4JSBjZW50ZXIgIWltcG9ydGFudDsgfQ0KICAgICAgICAjaGVyby1pbWdbZGF0YS1zbGlkZT0iMSJdIHsgb2JqZWN0LXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgI2hlcm8taW1nW2RhdGEtc2xpZGU9IjIiXSB7IG9iamVjdC1wb3NpdGlvbjogY2VudGVyIGNlbnRlciAhaW1wb3J0YW50OyB9DQoNCiAgICAgICAgI2hlcm8taW1nW2RhdGEtc2xpZGU9IjEiXSB7DQogICAgICAgICAgICBvYmplY3QtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7DQogICAgICAgIH0NCg0KICAgICAgICBAbWVkaWEgKG1pbi13aWR0aDogOTAxcHgpIHsNCiAgICAgICAgICAgICNob21lID4gLnJlbGF0aXZlLnotMTAudGV4dC1jZW50ZXIgew0KICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IG1pbig5MnZ3LCA3NHJlbSkgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAxMDBkdmggIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDcycHggIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogY2xhbXAoMy43NXJlbSwgOXZoLCA2LjVyZW0pICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNob21lICNoZXJvX3N1YiwNCiAgICAgICAgICAgICNob21lIC5oZXJvLXRpdGxlLWZpdCwNCiAgICAgICAgICAgICNob21lICNoZXJvX2Rlc2Mgew0KICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHdpZHRoOiAxcHggIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBoZWlnaHQ6IDFweCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBtYXJnaW46IC0xcHggIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBib3JkZXI6IDAgIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI2hvbWUgLmhlcm8tdGl0bGUtZml0IHsNCiAgICAgICAgICAgICAgICBmb250LXNpemU6IGNsYW1wKDNyZW0sIDQuOHZ3LCA1cmVtKTsNCiAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgyNDIsIDI0MCwgMjMyLCAuOTIpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHJnYmEoMjQyLCAyNDAsIDIzMiwgLjkyKSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHRleHQtc2hhZG93OiAwIDE4cHggNjRweCByZ2JhKDAsMCwwLC44Mik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNob21lIC5nc2FwLWhlcm8uZmxleC5mbGV4LWNvbCB7DQogICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjaG9tZSAjaGVyby1jYXJvdXNlbC1vcHRpb25zIHsNCiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7DQogICAgICAgICAgICAjaG9tZTo6YmVmb3JlIHsNCiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNob21lOjphZnRlciB7DQogICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjaG9tZSA+IC5hYnNvbHV0ZS5pbnNldC0wLnotMCB7DQogICAgICAgICAgICAgICAgaW5zZXQ6IDAgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI2hvbWUgPiAuYWJzb2x1dGUuaW5zZXQtMC56LTA6OmFmdGVyIHsNCiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOg0KICAgICAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDUsNyw2LC4wOCkgMCUsIHJnYmEoNSw3LDYsLjA0KSA0NiUsIHJnYmEoNSw3LDYsLjM0KSAxMDAlKSwNCiAgICAgICAgICAgICAgICAgICAgcmdiYSg1LDcsNiwuMDQpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjaG9tZSA+IC5hYnNvbHV0ZS5pbnNldC0wLnotMDo6YmVmb3JlIHsNCiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNoZXJvLXZpZGVvLA0KICAgICAgICAgICAgI2hlcm8taW1nIHsNCiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBpbnNldDogMCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGxlZnQ6IDAgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICByaWdodDogMCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgb2JqZWN0LWZpdDogY292ZXIgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBvYmplY3QtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7DQogICAgICAgICAgICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMDMpIGNvbnRyYXN0KDEuMDMpIHNhdHVyYXRlKDEuMSkgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI2hlcm8taW1nW2RhdGEtc2xpZGU9IjAiXSwNCiAgICAgICAgICAgICNoZXJvLWltZ1tkYXRhLXNsaWRlPSIxIl0sDQogICAgICAgICAgICAjaGVyby1pbWdbZGF0YS1zbGlkZT0iMiJdIHsgb2JqZWN0LXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyICFpbXBvcnRhbnQ7IH0NCg0KICAgICAgICAgICAgI2hvbWUgPiAucmVsYXRpdmUuei0xMC50ZXh0LWNlbnRlciB7DQogICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwMGR2aCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogNjhweCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiA1LjI1cmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNob21lICNoZXJvX3N1YiwNCiAgICAgICAgICAgICNob21lIC5oZXJvLXRpdGxlLWZpdCwNCiAgICAgICAgICAgICNob21lICNoZXJvX2Rlc2Mgew0KICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHdpZHRoOiAxcHggIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBoZWlnaHQ6IDFweCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBtYXJnaW46IC0xcHggIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBib3JkZXI6IDAgIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmx1eC1ncmlkIHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNCwgbWlubWF4KDAsIDFmcikpOyBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xMik7IGJvcmRlci1yYWRpdXM6IDI0cHg7IG92ZXJmbG93OiBoaWRkZW47fQ0KICAgICAgICAubHV4LWdyaWQgPiAqIHsgbWluLWhlaWdodDogMTVyZW07IHBhZGRpbmc6IGNsYW1wKDEuMzVyZW0sIDN2dywgMnJlbSk7IGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEpOyB9DQogICAgICAgIC5sdXgtZ3JpZCA+ICo6bGFzdC1jaGlsZCB7IGJvcmRlci1yaWdodDogMDsgfQ0KICAgICAgICAubHV4LWtpY2tlciB7IGRpc3BsYXk6IGJsb2NrOyBmb250LWZhbWlseTogJ1N5bmNvcGF0ZScsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogLjYycmVtOyBsZXR0ZXItc3BhY2luZzogLjMyZW07IGNvbG9yOiB2YXIoLS1sdW1lKTsgbWFyZ2luLWJvdHRvbTogMS40cmVtOyB9DQogICAgICAgIA0KICAgICAgICAub3duZXJzaGlwLXN0ZXAgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LC4wMik7IHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMzJzIGVhc2UsIGJhY2tncm91bmQgLjMycyBlYXNlLCBib3JkZXItY29sb3IgLjMycyBlYXNlOyB9DQogICAgICAgIC5vd25lcnNoaXAtc3RlcDpob3ZlciB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtM3B4KTsgYm9yZGVyLWNvbG9yOiByZ2JhKDAsMjU1LDIwNCwuMzQpICFpbXBvcnRhbnQ7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsLjA1KTsgfQ0KICAgICAgICANCiAgICAgICAgLmZhcS1wYW5lbCB7IGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xMik7IH0NCiAgICAgICAgLmZhcS1wYW5lbCBzdW1tYXJ5IHsgY3Vyc29yOiBwb2ludGVyOyBsaXN0LXN0eWxlOiBub25lOyBvdXRsaW5lOiBub25lOyB9DQogICAgICAgIC5mYXEtcGFuZWwgc3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7IGRpc3BsYXk6IG5vbmU7IH0NCiAgICAgICAgLmZhcS1wYW5lbCBzdW1tYXJ5OjphZnRlciB7IGNvbnRlbnQ6ICcrJzsgZmxvYXQ6IHJpZ2h0OyBjb2xvcjogdmFyKC0tbHVtZSk7IH0NCiAgICAgICAgLmZhcS1wYW5lbFtvcGVuXSBzdW1tYXJ5OjphZnRlciB7IGNvbnRlbnQ6ICctJzsgfQ0KICAgICAgICANCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7DQogICAgICAgICAgICAubHV4LWdyaWQgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7IH0NCiAgICAgICAgICAgIC5sdXgtZ3JpZCA+ICogeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMSk7IH0NCiAgICAgICAgfQ0KICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNjQwcHgpIHsNCiAgICAgICAgICAgIC5sdXgtZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9DQogICAgICAgICAgICAubHV4LWdyaWQgPiAqIHsgYm9yZGVyLXJpZ2h0OiAwOyB9DQogICAgICAgIH0NCg0KICAgICAgICAuemRveGlnLXdwLXBhZ2UgI3Nob3djYXNlLTNkLCAuemRveGlnLXdwLXBhZ2UgI2Jlc3Bva2UsIC56ZG94aWctd3AtcGFnZSAjaGVyaXRhZ2UsIC56ZG94aWctd3AtcGFnZSAjam91cm5hbCwgLnpkb3hpZy13cC1wYWdlICN2YXVsdCwgLnpkb3hpZy13cC1wYWdlICNjb250YWN0LCAuemRveGlnLXdwLXBhZ2UgZm9vdGVyIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMwYjBlMGQgMCUsICMxMDEzMTIgMTAwJSk7DQogICAgICAgIH0NCiAgICAgICAgLnpkb3hpZy13cC1wYWdlIGZvb3RlciB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMwYjBlMGQgMCUsICMxMDEzMTIgMTAwJSkgIWltcG9ydGFudDsgfQ0KICAgICAgICAuemRveGlnLXdwLXBhZ2UgI2V4cGxvcmUgeyBiYWNrZ3JvdW5kOiAjZmZmZmZmICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgLnpkb3hpZy13cC1wYWdlIGltZyB7IGZpbHRlcjogc2F0dXJhdGUoLjg2KSBjb250cmFzdCgxLjA4KTsgfQ0KDQogICAgICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAg6YCP5piO44CB6IO25ZuK5ZyG5ram54q255qE6auY57qn5oKs5rWu5oyJ6ZKuDQogICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCiAgICAgICAgLmJ0bi1tb2Rlcm4sIC56ZG94aWctd3AtcGFnZSAuYnRuLW1vZGVybiwNCiAgICAgICAgLmhlcm8tb3B0aW9uLCAuemRveGlnLXdwLXBhZ2UgLmhlcm8tb3B0aW9uLA0KICAgICAgICAubWF0ZXJpYWwtY2hpcCwgLnpkb3hpZy13cC1wYWdlIC5tYXRlcmlhbC1jaGlwLA0KICAgICAgICAubmF2LXZhdWx0LWN0YSwgLnpkb3hpZy13cC1wYWdlIC5uYXYtdmF1bHQtY3RhIHsNCiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4Ow0KICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTeW5jb3BhdGUnLCBzYW5zLXNlcmlmOw0KICAgICAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtOw0KICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMjVlbTsNCiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7DQogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA5OTk5cHggIWltcG9ydGFudDsgDQogICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OyANCiAgICAgICAgICAgIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC41cyBjdWJpYy1iZXppZXIoMC4xOSwgMSwgMC4yMiwgMSk7DQogICAgICAgICAgICB6LWluZGV4OiA1MDsgDQogICAgICAgICAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsNCiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAuYnRuLW1vZGVybiwgLnpkb3hpZy13cC1wYWdlIC5idG4tbW9kZXJuIHsgcGFkZGluZzogMS4ycmVtIDNyZW07IH0NCiAgICAgICAgLmJ0bi1tb2Rlcm46OmJlZm9yZSwgLnpkb3hpZy13cC1wYWdlIC5idG4tbW9kZXJuOjpiZWZvcmUgew0KICAgICAgICAgICAgY29udGVudDogJyc7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZiAhaW1wb3J0YW50OyB0cmFuc2Zvcm06IHNjYWxlWCgwKTsgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQ7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cyBjdWJpYy1iZXppZXIoMC4xOSwgMSwgMC4yMiwgMSk7IHotaW5kZXg6IC0xOw0KICAgICAgICB9DQogICAgICAgIC5idG4tbW9kZXJuOmhvdmVyLCAuemRveGlnLXdwLXBhZ2UgLmJ0bi1tb2Rlcm46aG92ZXIgeyBjb2xvcjogIzAwMCAhaW1wb3J0YW50OyBib3JkZXItY29sb3I6ICNmZmYgIWltcG9ydGFudDsgfQ0KICAgICAgICAuYnRuLW1vZGVybjpob3Zlcjo6YmVmb3JlLCAuemRveGlnLXdwLXBhZ2UgLmJ0bi1tb2Rlcm46aG92ZXI6OmJlZm9yZSB7IHRyYW5zZm9ybTogc2NhbGVYKDEpOyB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0OyB9DQoNCiAgICAgICAgLmhlcm8tb3B0aW9uLCAuemRveGlnLXdwLXBhZ2UgLmhlcm8tb3B0aW9uLCAubWF0ZXJpYWwtY2hpcCwgLnpkb3hpZy13cC1wYWdlIC5tYXRlcmlhbC1jaGlwIHsNCiAgICAgICAgICAgIHBhZGRpbmc6IDAuOHJlbSAxLjhyZW07IGZvbnQtc2l6ZTogMC42NXJlbTsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42KSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgIC5oZXJvLW9wdGlvbi5hY3RpdmUsIC5tYXRlcmlhbC1jaGlwLmFjdGl2ZSwgLnpkb3hpZy13cC1wYWdlIC5oZXJvLW9wdGlvbi5hY3RpdmUsIC56ZG94aWctd3AtcGFnZSAubWF0ZXJpYWwtY2hpcC5hY3RpdmUgew0KICAgICAgICAgICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDsgYmFja2dyb3VuZDogIzAwZmZjYyAhaW1wb3J0YW50OyBib3JkZXItY29sb3I6ICMwMGZmY2MgIWltcG9ydGFudDsgYm94LXNoYWRvdzogMCAwIDIwcHggcmdiYSgwLDI1NSwyMDQsMC4zKSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgLm5hdi12YXVsdC1jdGEsIC56ZG94aWctd3AtcGFnZSAubmF2LXZhdWx0LWN0YSB7DQogICAgICAgICAgICBwYWRkaW5nOiAwIDEuMnJlbTsgbWluLWhlaWdodDogMi4zNXJlbSAhaW1wb3J0YW50OyBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDI1NSwgMjA0LCAwLjQpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBjb2xvcjogIzAwZmZjYyAhaW1wb3J0YW50OyBnYXA6IDhweDsNCiAgICAgICAgfQ0KICAgICAgICAubmF2LXZhdWx0LWN0YTpob3ZlciwgLnpkb3hpZy13cC1wYWdlIC5uYXYtdmF1bHQtY3RhOmhvdmVyIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMjU1LCAyMDQsIDAuMSkgIWltcG9ydGFudDsgYm94LXNoYWRvdzogMCAwIDIwcHggcmdiYSgwLDI1NSwyMDQsMC4yKSAhaW1wb3J0YW50OyBjb2xvcjogIzAwZmZjYyAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgIC5uYXYtdmF1bHQtbWFyayB7IHdpZHRoOiAuMzVyZW07IGhlaWdodDogLjM1cmVtOyBib3JkZXItcmFkaXVzOiA5OTlweDsgYmFja2dyb3VuZDogIzAwZmZjYzsgYm94LXNoYWRvdzogMCAwIDhweCByZ2JhKDAsMjU1LDIwNCwuOCk7IH0NCg0KICAgICAgICAuemRveGlnLXdwLXBhZ2UgLmhlcm8tcXVpY2stYWN0aW9ucyB7DQogICAgICAgICAgICBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCBtaW5tYXgoMCwgMWZyKSk7IHdpZHRoOiBtaW4oNzIwcHgsIGNhbGMoMTAwdncgLSAzcmVtKSk7DQogICAgICAgICAgICBtYXJnaW4tdG9wOiAxLjI1cmVtOyBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xNSk7IGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsLjIpOw0KICAgICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDE0cHgpOyAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigxNHB4KTsgYm9yZGVyLXJhZGl1czogOTk5OXB4OyBvdmVyZmxvdzogaGlkZGVuOw0KICAgICAgICB9DQogICAgICAgIC56ZG94aWctd3AtcGFnZSAuaGVyby1xdWljay1saW5rIHsNCiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDQ4cHg7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNCiAgICAgICAgICAgIHBhZGRpbmc6IC44NXJlbSAxcmVtOyBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xKTsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjgpOyBmb250LXNpemU6IC42OHJlbTsgdHJhbnNpdGlvbjogYWxsIC4zcyBlYXNlOw0KICAgICAgICB9DQogICAgICAgIC56ZG94aWctd3AtcGFnZSAuaGVyby1xdWljay1saW5rOmxhc3QtY2hpbGQgeyBib3JkZXItcmlnaHQ6IDA7IH0NCiAgICAgICAgLnpkb3hpZy13cC1wYWdlIC5oZXJvLXF1aWNrLWxpbms6aG92ZXIgeyBjb2xvcjogIzAwMDsgYmFja2dyb3VuZDogI2ZmZjsgfQ0KICAgICAgICAuaGVyby1tb2JpbGUtZG90cyB7IGRpc3BsYXk6IG5vbmU7IH0NCiAgICAgICAgLmhlcm8tbW9iaWxlLWRvdCB7DQogICAgICAgICAgICB3aWR0aDogN3B4Ow0KICAgICAgICAgICAgaGVpZ2h0OiA3cHg7DQogICAgICAgICAgICBib3JkZXI6IDA7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LC40Mik7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI4cyBlYXNlLCBiYWNrZ3JvdW5kIC4yOHMgZWFzZSwgYm94LXNoYWRvdyAuMjhzIGVhc2U7DQogICAgICAgIH0NCiAgICAgICAgLmhlcm8tbW9iaWxlLWRvdC5hY3RpdmUgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwZmZjYzsNCiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4zKTsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAxNnB4IHJnYmEoMCwyNTUsMjA0LC40Mik7DQogICAgICAgIH0NCg0KICAgICAgICAuaW5wdXQtZ2xvdyB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMik7IGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsgYm9yZGVyLXJhZGl1czogMTJweDsgY29sb3I6ICNmZmY7IHBhZGRpbmc6IDEuNXJlbSAycmVtOyB3aWR0aDogMTAwJTsgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTsgfQ0KICAgICAgICAuaW5wdXQtZ2xvdzpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IGJvcmRlci1jb2xvcjogcmdiYSgwLCAyNTUsIDIwNCwgMC42KTsgYm94LXNoYWRvdzogMCAwIDMwcHggcmdiYSgwLCAyNTUsIDIwNCwgMC4xKTsgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsgfQ0KDQogICAgICAgIDo6LXdlYmtpdC1zY3JvbGxiYXIgeyB3aWR0aDogMHB4OyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgfQ0KICAgICAgICAubm8tc2Nyb2xsIHsgb3ZlcmZsb3c6IGhpZGRlbjsgaGVpZ2h0OiAxMDB2aDsgfQ0KICAgICAgICBAc3VwcG9ydHMgKGhlaWdodDogMTAwZHZoKSB7DQogICAgICAgICAgICAubm8tc2Nyb2xsIHsgaGVpZ2h0OiAxMDBkdmg7IH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNsaXAtZGlhZ29uYWwgeyBjbGlwLXBhdGg6IG5vbmU7IH0NCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7DQogICAgICAgICAgICBodG1sLA0KICAgICAgICAgICAgYm9keSwNCiAgICAgICAgICAgIG1haW4sDQogICAgICAgICAgICBzZWN0aW9uIHsNCiAgICAgICAgICAgICAgICB0b3VjaC1hY3Rpb246IHBhbi15Ow0KICAgICAgICAgICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3IteDogbm9uZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI2V4cGxvcmUgPiAub3ZlcmZsb3ctaGlkZGVuLA0KICAgICAgICAgICAgLmFyY2hpdmUtcmFpbCB7DQogICAgICAgICAgICAgICAgdG91Y2gtYWN0aW9uOiBwYW4teCBwYW4teTsNCiAgICAgICAgICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yLWlubGluZTogY29udGFpbjsNCiAgICAgICAgICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yLWJsb2NrOiBhdXRvOw0KICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwdnc7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC5jbGlwLWRpYWdvbmFsIHsgY2xpcC1wYXRoOiBub25lOyB9DQogICAgICAgICAgICAjc2xpZGVyLWNvbnRhaW5lciB7IG92ZXJmbG93LXg6IHZpc2libGU7IHNjcm9sbC1zbmFwLXR5cGU6IG5vbmU7IHBhZGRpbmctYm90dG9tOiAycmVtOyAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7IG92ZXJzY3JvbGwtYmVoYXZpb3ItaW5saW5lOiBjb250YWluOyBvdmVyc2Nyb2xsLWJlaGF2aW9yLWJsb2NrOiBhdXRvOyB9DQogICAgICAgICAgICAuc2xpZGUtY2FyZCB7IHNjcm9sbC1zbmFwLWFsaWduOiBjZW50ZXI7IHdpZHRoOiA4NXZ3ICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgICAgIC5zbGlkZXItbmF2LWJ0bnMgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgICAgIC56ZG94aWctd3AtcGFnZSAuYnRuLW1vZGVybiB7IHBhZGRpbmc6IDFyZW0gMnJlbTsgfQ0KICAgICAgICAgICAgLnpkb3hpZy13cC1wYWdlIC5oZXJvLXF1aWNrLWFjdGlvbnMgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgYm9yZGVyLXJhZGl1czogMjRweDsgfQ0KICAgICAgICAgICAgLnpkb3hpZy13cC1wYWdlIC5oZXJvLXF1aWNrLWxpbmsgeyBib3JkZXItcmlnaHQ6IDA7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xKTsgfQ0KICAgICAgICAgICAgLnpkb3hpZy13cC1wYWdlIC5oZXJvLXF1aWNrLWxpbms6bGFzdC1jaGlsZCB7IGJvcmRlci1ib3R0b206IDA7IH0NCiAgICAgICAgICAgIC5oZXJvLW1vYmlsZS1kb3RzIHsNCiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgICAgICAgICAgcmlnaHQ6IDFyZW07DQogICAgICAgICAgICAgICAgdG9wOiA1MCU7DQogICAgICAgICAgICAgICAgei1pbmRleDogMjA7DQogICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsNCiAgICAgICAgICAgICAgICBnYXA6IC44cmVtOw0KICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC5tZW51LWxpbmsgeyBwb3NpdGlvbjogcmVsYXRpdmU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgfQ0KICAgICAgICAubWVudS1saW5rOjphZnRlciB7IGNvbnRlbnQ6ICcnOyBwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxMDAlOyB0cmFuc2Zvcm06IHNjYWxlWCgwKTsgaGVpZ2h0OiAycHg7IGJvdHRvbTogMDsgbGVmdDogMDsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIHJpZ2h0OyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC40cyBjdWJpYy1iZXppZXIoMC44NiwgMCwgMC4wNywgMSk7IH0NCiAgICAgICAgLm1lbnUtbGluazpob3Zlcjo6YWZ0ZXIgeyB0cmFuc2Zvcm06IHNjYWxlWCgxKTsgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGxlZnQ7IH0NCg0KICAgICAgICAjZnVsbC1tZW51IHsgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjM1cyBlYXNlLCB2aXNpYmlsaXR5IDAuMzVzIGVhc2U7IH0NCiAgICAgICAgI2Z1bGwtbWVudS5tZW51LW9wZW4geyBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7IHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDsgcG9pbnRlci1ldmVudHM6IGF1dG8gIWltcG9ydGFudDsgfQ0KICAgICAgICAjZnVsbC1tZW51IC5tZW51LWl0ZW0geyB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNDVzIGVhc2UsIHRyYW5zZm9ybSAwLjQ1cyBlYXNlOyB9DQogICAgICAgICNmdWxsLW1lbnUgbmF2IHsgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDlyZW0pOyBvdmVyZmxvdy15OiBhdXRvOyB9DQogICAgICAgICNmdWxsLW1lbnUgLm1lbnUtbGluayB7IGZvbnQtc2l6ZTogY2xhbXAoMS40NXJlbSwgNC42dncsIDMuNDVyZW0pICFpbXBvcnRhbnQ7IGxpbmUtaGVpZ2h0OiAuOTU7IH0NCiAgICAgICAgI2Z1bGwtbWVudS5tZW51LW9wZW4gLm1lbnUtaXRlbSB7IG9wYWNpdHk6IDEgIWltcG9ydGFudDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApICFpbXBvcnRhbnQ7IH0NCg0KICAgICAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgIOOAkOW3sua4heeQhuS\/ruWkjeOAkeWujOaVtOe6r+WHgCBQcmVsb2FkZXIg5LiOIDNEIENTUw0KICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQogICAgICAgIC53YXRjaC0zZC1zdGFnZSB7IHBlcnNwZWN0aXZlOiAxMjAwcHg7IHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7IH0NCiAgICAgICAgI3ByZWxvYWRlci5wcmVsb2FkZXItaGlkZSB7IG9wYWNpdHk6IDA7IHZpc2liaWxpdHk6IGhpZGRlbjsgcG9pbnRlci1ldmVudHM6IG5vbmU7IHRyYW5zaXRpb246IG9wYWNpdHkgLjc1cyBlYXNlLCB2aXNpYmlsaXR5IC43NXMgZWFzZTsgfQ0KICAgICAgICAjcHJlbG9hZGVyIHsgcG9zaXRpb246IGZpeGVkOyBpbnNldDogMDsgei1pbmRleDogOTk5OTsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IG92ZXJmbG93OiBoaWRkZW47IGJhY2tncm91bmQ6ICMwMjAzMDM7IGNvbG9yOiAjZDRlOGU4OyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9DQogICAgICAgICNwcmVsb2FkZXI6OmJlZm9yZSwgI3ByZWxvYWRlcjo6YWZ0ZXIgeyBjb250ZW50OiAnJzsgcG9zaXRpb246IGFic29sdXRlOyBwb2ludGVyLWV2ZW50czogbm9uZTsgfQ0KICAgICAgICAjcHJlbG9hZGVyOjpiZWZvcmUgeyANCiAgICAgICAgICAgIGluc2V0OiAwOyANCiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQgMCA0OS45NSUsIHJnYmEoNzUsMTg0LDI1NSwwLjA0NSkgNTAlLCB0cmFuc3BhcmVudCA1MC4wNSUpLCAKICAgICAgICAgICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDBkZWcsIHRyYW5zcGFyZW50IDAgNDkuOTUlLCByZ2JhKDc1LDE4NCwyNTUsMC4wNDUpIDUwJSwgdHJhbnNwYXJlbnQgNTAuMDUlKTsgCiAgICAgICAgICAgIG9wYWNpdHk6IDA7IA0KICAgICAgICAgICAgYW5pbWF0aW9uOiBsb2FkZXJHcmlkSW4gMi44cyBjdWJpYy1iZXppZXIoLjE2LDEsLjMsMSkgZm9yd2FyZHM7IA0KICAgICAgICB9DQogICAgICAgICNwcmVsb2FkZXI6OmFmdGVyIHsgDQogICAgICAgICAgICBsZWZ0OiA1MCU7IHRvcDogNTAlOyB3aWR0aDogbWluKDU0dm1pbiwgNDMwcHgpOyBoZWlnaHQ6IG1pbig1NHZtaW4sIDQzMHB4KTsgDQogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc1LDE4NCwyNTUsMC4wOCk7IGJvcmRlci1yYWRpdXM6IDk5OXB4OyAKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoLjk2KTsgb3BhY2l0eTogMDsgDQogICAgICAgICAgICBhbmltYXRpb246IGxvYWRlck91dGVyQ2lyY2xlIDMuMnMgY3ViaWMtYmV6aWVyKC4xNiwxLC4zLDEpIGZvcndhcmRzOyANCiAgICAgICAgfQ0KICAgICAgICAucHJlbG9hZGVyLXN5c3RlbSB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMjsgd2lkdGg6IG1pbigzMHZtaW4sIDIxOHB4KTsgYXNwZWN0LXJhdGlvOiAxOyB9DQogICAgICAgIC5wcmVsb2FkZXItbWFyayB7IA0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiA1MCU7IHRvcDogNTAlOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgDQogICAgICAgICAgICBnYXA6IGNsYW1wKC4xOHJlbSwgLjU1dncsIC40MnJlbSk7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOyANCiAgICAgICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMS4zNXJlbSwgMi4xdncsIDJyZW0pOyBsZXR0ZXItc3BhY2luZzogMDsgbWFyZ2luLWxlZnQ6IDA7IA0KICAgICAgICAgICAgY29sb3I6ICNkNGU4ZTg7IHRleHQtc2hhZG93OiAwIDAgMThweCByZ2JhKDc1LDE4NCwyNTUsLjE2KTsgb3BhY2l0eTogMDsgCiAgICAgICAgICAgIGFuaW1hdGlvbjogbG9hZGVyTWFya0luIC43NXMgY3ViaWMtYmV6aWVyKC4xNiwxLC4zLDEpIC4xNXMgZm9yd2FyZHM7IA0KICAgICAgICB9DQogICAgICAgIC5wcmVsb2FkZXItbWFyayBzcGFuIHsgDQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGNvbG9yOiAjZDRlOGU4OyB0ZXh0LXNoYWRvdzogMCAwIDE4cHggcmdiYSg3NSwxODQsMjU1LC4xNik7IAogICAgICAgICAgICBhbmltYXRpb246IGxvYWRlckxldHRlckx1bWUgMS4wNXMgZWFzZSBmb3J3YXJkczsgYW5pbWF0aW9uLWRlbGF5OiBjYWxjKDEuNDVzICsgdmFyKC0taSkgKiAuMTFzKTsgDQogICAgICAgIH0NCiAgICAgICAgLnByZWxvYWRlci1jaXJjbGVzLCAucHJlbG9hZGVyLWNpcmNsZXMgc3ZnIHsgcG9zaXRpb246IGFic29sdXRlOyBpbnNldDogMDsgb3ZlcmZsb3c6IHZpc2libGU7IH0NCiAgICAgICAgLnByZWxvYWRlci1jaXJjbGVzIHN2ZyB7IHRyYW5zZm9ybTogcm90YXRlKC05MGRlZyk7IH0NCiAgICAgICAgLnByZWxvYWRlci1jaXJjbGVzIGNpcmNsZSB7IGZpbGw6IG5vbmU7IGN4OiAxMDk7IGN5OiAxMDk7IHI6IDEwODsgc3Ryb2tlLXdpZHRoOiAxOyB2ZWN0b3ItZWZmZWN0OiBub24tc2NhbGluZy1zdHJva2U7IH0NCiAgICAgICAgLnByZWxvYWRlci1jaXJjbGVzIC50cmFjayB7IHN0cm9rZTogcmdiYSg3NSwxODQsMjU1LC4xNCk7IG9wYWNpdHk6IDA7IGFuaW1hdGlvbjogbG9hZGVyVHJhY2tJbiAuOHMgZWFzZSAuMjhzIGZvcndhcmRzOyB9CiAgICAgICAgLnByZWxvYWRlci1jaXJjbGVzIC5wcm9ncmVzcyB7IAogICAgICAgICAgICBzdHJva2U6ICM0YmI4ZmY7IHN0cm9rZS1saW5lY2FwOiByb3VuZDsgc3Ryb2tlLWRhc2hhcnJheTogNjc4LjY7IHN0cm9rZS1kYXNob2Zmc2V0OiA2NzguNjsgCiAgICAgICAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDhweCByZ2JhKDc1LDE4NCwyNTUsLjMpKTsgCiAgICAgICAgICAgIGFuaW1hdGlvbjogbG9hZGVyQ2lyY2xlRHJhdyAyLjM1cyBjdWJpYy1iZXppZXIoLjY0LDAsLjIsMSkgLjVzIGZvcndhcmRzLCBsb2FkZXJDaXJjbGVMdW1lIC45cyBlYXNlIDIuMjVzIGZvcndhcmRzOyANCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnByZWxvYWRlci1jb3VudGVyIHsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIGxlZnQ6IDUwJTsNCiAgICAgICAgICAgIHRvcDogY2FsYyg1MCUgKyBtaW4oMTh2bWluLCAxNDJweCkpOw0KICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOw0KICAgICAgICAgICAgei1pbmRleDogMzsNCiAgICAgICAgICAgIG1pbi13aWR0aDogNC40cmVtOw0KICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgICAgICAgICAgY29sb3I6IHJnYmEoMjEyLDIzMiwyMzIsLjc0KTsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjcycmVtOw0KICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC4zMmVtOw0KICAgICAgICAgICAgdGV4dC1pbmRlbnQ6IC4zMmVtOw0KICAgICAgICAgICAgb3BhY2l0eTogMDsNCiAgICAgICAgICAgIGFuaW1hdGlvbjogbG9hZGVyVHJhY2tJbiAuOHMgZWFzZSAuMzZzIGZvcndhcmRzOw0KICAgICAgICB9DQogICAgICAgIC5wcmVsb2FkZXItY291bnRlcjo6YWZ0ZXIgew0KICAgICAgICAgICAgY29udGVudDogJyUnOw0KICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC4xOHJlbTsNCiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAwOw0KICAgICAgICAgICAgdGV4dC1pbmRlbnQ6IDA7DQogICAgICAgICAgICBjb2xvcjogcmdiYSg3NSwxODQsMjU1LC44Mik7CiAgICAgICAgfQ0KICAgICAgICAucHJlbG9hZGVyLXByb2dyZXNzLWJhciB7DQogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7DQogICAgICAgICAgICBsZWZ0OiBjbGFtcCgxcmVtLCA0dncsIDNyZW0pOw0KICAgICAgICAgICAgcmlnaHQ6IGNsYW1wKDFyZW0sIDR2dywgM3JlbSk7DQogICAgICAgICAgICBib3R0b206IGNsYW1wKDFyZW0sIDMuOHZoLCAyLjRyZW0pOw0KICAgICAgICAgICAgei1pbmRleDogMzsNCiAgICAgICAgICAgIGhlaWdodDogMXB4Ow0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwuMTIpOw0KICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgICAgIG9wYWNpdHk6IDA7DQogICAgICAgICAgICBhbmltYXRpb246IGxvYWRlclRyYWNrSW4gLjhzIGVhc2UgLjQycyBmb3J3YXJkczsNCiAgICAgICAgfQ0KICAgICAgICAucHJlbG9hZGVyLXByb2dyZXNzLWJhciBzcGFuIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgICAgICAgICAgd2lkdGg6IHZhcigtLWxvYWRlci1wcm9ncmVzcywgMCUpOw0KICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDc1LDE4NCwyNTUsLjQ1KSwgcmdiYSgyMzEsMjQ3LDI1NSwuOTIpKTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDIwcHggcmdiYSg3NSwxODQsMjU1LC4zKTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggLjE4cyBlYXNlLW91dDsNCiAgICAgICAgfQ0KICAgICAgICAuaGVyby1zY3JvbGwtbGFiZWwgew0KICAgICAgICAgICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjU1KTsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjU4cmVtOw0KICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC4zNGVtOw0KICAgICAgICAgICAgdGV4dC1pbmRlbnQ6IC4zNGVtOw0KICAgICAgICB9DQogICAgICAgIC5zZWN0aW9uLXJldmVhbCB7IHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm0sIG9wYWNpdHksIGZpbHRlcjsgfQ0KICAgICAgICAubGlxdWlkLWdsYXNzLXN0cm9uZyB7DQogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjAxKTsNCiAgICAgICAgICAgIGJhY2tncm91bmQtYmxlbmQtbW9kZTogbHVtaW5vc2l0eTsNCiAgICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig1MHB4KTsNCiAgICAgICAgICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDUwcHgpOw0KICAgICAgICAgICAgYm9yZGVyOiBub25lOw0KICAgICAgICAgICAgYm94LXNoYWRvdzogNHB4IDRweCA0cHggcmdiYSgwLDAsMCwwLjA1KSwgaW5zZXQgMCAxcHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7DQogICAgICAgIH0NCiAgICAgICAgLmxpcXVpZC1nbGFzcy1zdHJvbmc6OmJlZm9yZSB7DQogICAgICAgICAgICBjb250ZW50OiAnJzsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIGluc2V0OiAwOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDEuNHB4Ow0KICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsMjU1LDI1NSwwLjUpIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMikgMjAlLCByZ2JhKDI1NSwyNTUsMjU1LDApIDQwJSwgcmdiYSgyNTUsMjU1LDI1NSwwKSA2MCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSA4MCUsIHJnYmEoMjU1LDI1NSwyNTUsMC41KSAxMDAlKTsNCiAgICAgICAgICAgIC13ZWJraXQtbWFzazogbGluZWFyLWdyYWRpZW50KCNmZmYgMCAwKSBjb250ZW50LWJveCwgbGluZWFyLWdyYWRpZW50KCNmZmYgMCAwKTsNCiAgICAgICAgICAgIC13ZWJraXQtbWFzay1jb21wb3NpdGU6IHhvcjsNCiAgICAgICAgICAgIG1hc2stY29tcG9zaXRlOiBleGNsdWRlOw0KICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogICAgICAgIH0NCiAgICAgICAgLmhlcm8tYWdlbmN5LWJhZGdlIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4Ow0KICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgICAgIGdhcDogLjYycmVtOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMS4xcmVtOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7DQogICAgICAgICAgICBwYWRkaW5nOiAuNDVyZW0gLjg1cmVtOw0KICAgICAgICAgICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjg2KTsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjc4cmVtOw0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdCYXJsb3cnLCAnTWljcm9zb2Z0IFlhSGVpJywgc2Fucy1zZXJpZjsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7DQogICAgICAgIH0NCiAgICAgICAgLmhlcm8tYWdlbmN5LWJhZGdlIHNwYW4gew0KICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWdyaWQ7DQogICAgICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgbWluLXdpZHRoOiAyLjZyZW07DQogICAgICAgICAgICBtaW4taGVpZ2h0OiAxLjU1cmVtOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7DQogICAgICAgICAgICBjb2xvcjogIzAwMDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7DQogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICB9DQogICAgICAgIC5oZXJvLXRpdGxlLWZpdCB7DQogICAgICAgICAgICBmb250LXNpemU6IGNsYW1wKDQuOHJlbSwgMTR2dywgMTJyZW0pOw0KICAgICAgICAgICAgbGluZS1oZWlnaHQ6IC43ODsNCiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjA3NWVtOw0KICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7DQogICAgICAgIH0NCiAgICAgICAgLmhlcm8tY3RhLXJvdywNCiAgICAgICAgLmhlcm8tc3RhdHMtcm93IHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7DQogICAgICAgICAgICBnYXA6IDFyZW07DQogICAgICAgIH0NCiAgICAgICAgLmhlcm8tY3RhLXByaW1hcnksDQogICAgICAgIC5oZXJvLWN0YS1naG9zdCB7DQogICAgICAgICAgICBtaW4taGVpZ2h0OiA0NnB4Ow0KICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICAgICAgICBnYXA6IC41NXJlbTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4Ow0KICAgICAgICAgICAgcGFkZGluZzogLjcycmVtIDEuMXJlbTsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnQmFybG93JywgJ01pY3Jvc29mdCBZYUhlaScsIHNhbnMtc2VyaWY7DQogICAgICAgICAgICBmb250LXNpemU6IC44NnJlbTsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7DQogICAgICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICAgICAgICAgIHRyYW5zaXRpb246IGdhcCAuMjVzIGVhc2UsIHRyYW5zZm9ybSAuMjVzIGVhc2U7DQogICAgICAgIH0NCiAgICAgICAgLmhlcm8tY3RhLXByaW1hcnk6aG92ZXIsDQogICAgICAgIC5oZXJvLWN0YS1naG9zdDpob3ZlciB7IGdhcDogLjlyZW07IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsgfQ0KICAgICAgICAuaGVyby1zdGF0LWNhcmQgew0KICAgICAgICAgICAgd2lkdGg6IG1pbig0MnZ3LCAyMjBweCk7DQogICAgICAgICAgICBtaW4taGVpZ2h0OiAxMTZweDsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEuMjVyZW07DQogICAgICAgICAgICBwYWRkaW5nOiAxcmVtOw0KICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsNCiAgICAgICAgICAgIGNvbG9yOiAjZmZmOw0KICAgICAgICB9DQogICAgICAgIC5oZXJvLXN0YXQtY2FyZCBzcGFuIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjc4KTsgZm9udC1zaXplOiAxLjE1cmVtOyB9DQogICAgICAgIC5oZXJvLXN0YXQtY2FyZCBzdHJvbmcgew0KICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICAgICAgICBtYXJnaW4tdG9wOiAuNzVyZW07DQogICAgICAgICAgICBmb250LWZhbWlseTogJ0luc3RydW1lbnQgU2VyaWYnLCBzZXJpZjsNCiAgICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMi4zNXJlbTsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7DQogICAgICAgICAgICBsaW5lLWhlaWdodDogLjk7DQogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtOw0KICAgICAgICB9DQogICAgICAgIC5oZXJvLXN0YXQtY2FyZCBlbSB7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW4tdG9wOiAuNDVyZW07IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC43Mik7IGZvbnQtc2l6ZTogLjc2cmVtOyBmb250LXN0eWxlOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiAxLjI7IH0NCiAgICAgICAgLmhlcm8tdHJ1c3QtYmFyIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4Ow0KICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAgICAgICAgICAgZ2FwOiAuOHJlbTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4Ow0KICAgICAgICAgICAgcGFkZGluZzogLjU1cmVtIC45NXJlbTsNCiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC44Mik7DQogICAgICAgICAgICBmb250LXNpemU6IC43OHJlbTsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnQmFybG93JywgJ01pY3Jvc29mdCBZYUhlaScsIHNhbnMtc2VyaWY7DQogICAgICAgIH0NCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7DQogICAgICAgICAgICAuaGVyby1hZ2VuY3ktYmFkZ2UgeyBmb250LXNpemU6IC42OHJlbTsgbWF4LXdpZHRoOiA5MnZ3OyB9DQogICAgICAgICAgICAuaGVyby10aXRsZS1maXQgeyBmb250LXNpemU6IGNsYW1wKDRyZW0sIDIzdncsIDYuOHJlbSk7IH0NCiAgICAgICAgICAgIC5oZXJvLXN0YXQtY2FyZCB7IHdpZHRoOiBtaW4oODh2dywgMjIwcHgpOyB9DQogICAgICAgIH0NCiAgICAgICAgLmhlcm8tYm90dG9tLWJsdXIgew0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgaW5zZXQ6IDA7DQogICAgICAgICAgICB6LWluZGV4OiAxOw0KICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMThweCk7DQogICAgICAgICAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigxOHB4KTsNCiAgICAgICAgICAgIC13ZWJraXQtbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgYmxhY2sgMCUsIHRyYW5zcGFyZW50IDQ1JSk7DQogICAgICAgICAgICBtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCBibGFjayAwJSwgdHJhbnNwYXJlbnQgNDUlKTsNCiAgICAgICAgfQ0KICAgICAgICAuaGVyby1tZXRhLXJvdyB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOw0KICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICAgICAgICBnYXA6IC43cmVtIDEuMjVyZW07DQogICAgICAgICAgICBtYXJnaW46IC0uMTVyZW0gYXV0byAxLjE1cmVtOw0KICAgICAgICAgICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjcyKTsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoLjYycmVtLCAxLjZ2dywgLjc4cmVtKTsNCiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAuMTZlbTsNCiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7DQogICAgICAgIH0NCiAgICAgICAgLmhlcm8tbWV0YS1yb3cgc3BhbiB7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsNCiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAgICBnYXA6IC40cmVtOw0KICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsNCiAgICAgICAgfQ0KICAgICAgICAuaGVyby1tZXRhLXJvdyBzdmcgew0KICAgICAgICAgICAgd2lkdGg6IDFyZW07DQogICAgICAgICAgICBoZWlnaHQ6IDFyZW07DQogICAgICAgICAgICBjb2xvcjogcmdiYSgwLDI1NSwyMDQsLjgyKTsNCiAgICAgICAgICAgIHN0cm9rZS13aWR0aDogMS42Ow0KICAgICAgICB9DQoNCiAgICAgICAgLmhlcm8tbWVkaWEtZnVzaW9uOjpiZWZvcmUsDQogICAgICAgIC5oZXJvLW1lZGlhLWZ1c2lvbjo6YWZ0ZXIgew0KICAgICAgICAgICAgY29udGVudDogJyc7DQogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgICAgICBpbnNldDogMDsNCiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOw0KICAgICAgICAgICAgei1pbmRleDogMzsNCiAgICAgICAgfQ0KICAgICAgICAuaGVyby1tZWRpYS1mdXNpb246OmJlZm9yZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOg0KICAgICAgICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDQyJSwgdHJhbnNwYXJlbnQgMCAyOCUsIHJnYmEoMCwwLDAsLjEpIDQ0JSwgcmdiYSgwLDAsMCwuNjQpIDEwMCUpLA0KICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgwLDAsMCwuNjgpLCB0cmFuc3BhcmVudCAyNCUsIHRyYW5zcGFyZW50IDc2JSwgcmdiYSgwLDAsMCwuNjgpKSwNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDAsMCwwLC40MiksIHRyYW5zcGFyZW50IDM4JSwgcmdiYSgwLDAsMCwuNzgpKTsNCiAgICAgICAgICAgIG1peC1ibGVuZC1tb2RlOiBtdWx0aXBseTsNCiAgICAgICAgfQ0KICAgICAgICAuaGVyby1tZWRpYS1mdXNpb246OmFmdGVyIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6DQogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEyMGRlZywgcmdiYSgyNTUsMjU1LDI1NSwuMSksIHRyYW5zcGFyZW50IDI4JSwgdHJhbnNwYXJlbnQgNzAlLCByZ2JhKDI1NSwyNTUsMjU1LC4wNikpLA0KICAgICAgICAgICAgICAgIHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoMjU1LDI1NSwyNTUsLjAyNSkgMCAxcHgsIHRyYW5zcGFyZW50IDFweCA4OHB4KTsNCiAgICAgICAgICAgIG9wYWNpdHk6IC40MjsNCiAgICAgICAgICAgIG1peC1ibGVuZC1tb2RlOiBzY3JlZW47DQogICAgICAgIH0NCiAgICAgICAgI2hlcm8tdmlkZW8sDQogICAgICAgICNoZXJvLWltZyB7DQogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDYpOw0KICAgICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyOw0KICAgICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAuNTVzIGVhc2UsIGZpbHRlciAuOHMgZWFzZSwgdHJhbnNmb3JtIDEuMnMgY3ViaWMtYmV6aWVyKC4xNiwxLC4zLDEpOw0KICAgICAgICB9DQogICAgICAgICNob21lLmlzLXN3aXRjaGluZyAjaGVyby12aWRlbywNCiAgICAgICAgI2hvbWUuaXMtc3dpdGNoaW5nICNoZXJvLWltZyB7IG9wYWNpdHk6IC4zNjsgZmlsdGVyOiBibHVyKDEwcHgpIGJyaWdodG5lc3MoLjg2KTsgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOyB9DQogICAgICAgIC5oZXJvLWNvcHktbW9ycGggew0KICAgICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAuNDJzIGVhc2UsIGZpbHRlciAuNDJzIGVhc2UsIHRyYW5zZm9ybSAuNDJzIGN1YmljLWJlemllciguMTYsMSwuMywxKTsNCiAgICAgICAgfQ0KICAgICAgICAjaG9tZS5pcy1zd2l0Y2hpbmcgLmhlcm8tY29weS1tb3JwaCB7IG9wYWNpdHk6IC4xNTsgZmlsdGVyOiBibHVyKDEycHgpOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMThweCk7IH0NCiAgICAgICAgLmhlcm8tb3B0aW9uLmFjdGl2ZSB7DQogICAgICAgICAgICBjb2xvcjogIzAwMDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7DQogICAgICAgICAgICBib3gtc2hhZG93OiAwIDEycHggMzJweCByZ2JhKDI1NSwyNTUsMjU1LC4xMik7DQogICAgICAgIH0NCiAgICAgICAgLnByZWxvYWRlci1tYXJrIHNwYW4sCiAgICAgICAgLnByZWxvYWRlci1jb3VudGVyIHsgY29sb3I6ICNjOGU4ZjI7IHRleHQtc2hhZG93OiAwIDAgMThweCByZ2JhKDc1LDE4NCwyNTUsLjE4KTsgfQogICAgICAgIC5wcmVsb2FkZXItY2lyY2xlcyAudHJhY2sgeyBzdHJva2U6IHJnYmEoNzUsMTg0LDI1NSwuMTgpOyB9CiAgICAgICAgLnByZWxvYWRlci1jaXJjbGVzIC5wcm9ncmVzcyB7IHN0cm9rZTogIzRiYjhmZjsgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgMTBweCByZ2JhKDc1LDE4NCwyNTUsLjM0KSk7IH0KICAgICAgICAucHJlbG9hZGVyLXByb2dyZXNzLWJhciBzcGFuIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDc1LDE4NCwyNTUsLjM0KSwgcmdiYSgyMTQsMjQyLDI1NSwuOTYpKTsgYm94LXNoYWRvdzogMCAwIDIwcHggcmdiYSg3NSwxODQsMjU1LC4yNCk7IH0KDQogICAgICAgIEBrZXlmcmFtZXMgbG9hZGVyR3JpZEluIHsgMCUgeyBvcGFjaXR5OiAwOyB9IDI1JSwgODIlIHsgb3BhY2l0eTogMTsgfSAxMDAlIHsgb3BhY2l0eTogMDsgfSB9DQogICAgICAgIEBrZXlmcmFtZXMgbG9hZGVyT3V0ZXJDaXJjbGUgeyAwJSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKC45KTsgfSAzMCUsIDgyJSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEpOyB9IDEwMCUgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgxLjA0KTsgfSB9DQogICAgICAgIEBrZXlmcmFtZXMgbG9hZGVyTWFya0luIHsgMCUgeyBvcGFjaXR5OiAwOyBmaWx0ZXI6IGJsdXIoOHB4KTsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTQ1JSk7IH0gMTAwJSB7IG9wYWNpdHk6IDE7IGZpbHRlcjogYmx1cigwKTsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7IH0gfQ0KICAgICAgICBAa2V5ZnJhbWVzIGxvYWRlckxldHRlckx1bWUgeyAwJSB7IGNvbG9yOiAjZDRlOGU4OyB0ZXh0LXNoYWRvdzogMCAwIDE4cHggcmdiYSg3NSwxODQsMjU1LC4xNCk7IH0gNDIlIHsgY29sb3I6ICNiOWU4ZmY7IHRleHQtc2hhZG93OiAwIDAgMjBweCByZ2JhKDc1LDE4NCwyNTUsLjMyKTsgfSAxMDAlIHsgY29sb3I6ICM0YmI4ZmY7IHRleHQtc2hhZG93OiAwIDAgMjhweCByZ2JhKDc1LDE4NCwyNTUsLjQ4KSwgMCAwIDcwcHggcmdiYSg3NSwxODQsMjU1LC4yKTsgfSB9CiAgICAgICAgQGtleWZyYW1lcyBsb2FkZXJUcmFja0luIHsgMCUgeyBvcGFjaXR5OiAwOyB9IDEwMCUgeyBvcGFjaXR5OiAuOTsgfSB9DQogICAgICAgIEBrZXlmcmFtZXMgbG9hZGVyQ2lyY2xlRHJhdyB7IDAlIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDY3OC42OyBvcGFjaXR5OiAuNTU7IH0gNzglIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDM0OyBvcGFjaXR5OiAxOyB9IDEwMCUgeyBzdHJva2UtZGFzaG9mZnNldDogMDsgb3BhY2l0eTogMTsgfSB9DQogICAgICAgIEBrZXlmcmFtZXMgbG9hZGVyQ2lyY2xlTHVtZSB7IDAlIHsgc3Ryb2tlOiAjNGJiOGZmOyBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCA4cHggcmdiYSg3NSwxODQsMjU1LC4zKSk7IH0gMTAwJSB7IHN0cm9rZTogIzRiYjhmZjsgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgMTJweCByZ2JhKDc1LDE4NCwyNTUsLjUpKSBkcm9wLXNoYWRvdygwIDAgMzRweCByZ2JhKDc1LDE4NCwyNTUsLjE4KSk7IH0gfQogICAgICAgIA0KICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNjQwcHgpIHsgLnByZWxvYWRlci1zeXN0ZW0geyB3aWR0aDogbWluKDQ2dncsIDE3NnB4KTsgfSAucHJlbG9hZGVyLW1hcmsgeyBmb250LXNpemU6IDEuMjJyZW07IGdhcDogLjIycmVtOyB9IH0NCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHsgLnByZWxvYWRlci1zeXN0ZW0sIC5wcmVsb2FkZXItbWFyaywgLnByZWxvYWRlci1jaXJjbGVzIGNpcmNsZSB7IGFuaW1hdGlvbi1kdXJhdGlvbjogLjAxbXMgIWltcG9ydGFudDsgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMSAhaW1wb3J0YW50OyB9IGJvZHkubm8tc2Nyb2xsIHsgb3ZlcmZsb3c6IGF1dG87IGhlaWdodDogYXV0bzsgfSAjcHJlbG9hZGVyIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9IGJvZHkuaW50cm8tbG9hZGluZyA+IGhlYWRlciwgYm9keS5pbnRyby1sb2FkaW5nID4gc2VjdGlvbiwgYm9keS5pbnRyby1sb2FkaW5nID4gZm9vdGVyIHsgb3BhY2l0eTogMSAhaW1wb3J0YW50OyB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7IHBvaW50ZXItZXZlbnRzOiBhdXRvICFpbXBvcnRhbnQ7IH0gLmdzYXAtaGVybywgLmdzYXAtZmFkZS11cCwgLmdzYXAtcmV2ZWFsLWRpYWdvbmFsIHsgb3BhY2l0eTogMSAhaW1wb3J0YW50OyB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsgY2xpcC1wYXRoOiBub25lICFpbXBvcnRhbnQ7IH0gfQ0KDQogICAgICAgIC8qIFdhdGNoIDNEIHNwZWNpZmljIHJlbmRlcmluZyAqLw0KICAgICAgICAud2F0Y2gtM2QtY2FyZCB7IHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7IHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE4cyBlYXNlLW91dCwgZmlsdGVyIDAuMzVzIGVhc2U7IHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07IH0NCiAgICAgICAgLndhdGNoLTNkLWNhcmQ6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBwb3NpdGlvbjogYWJzb2x1dGU7IGluc2V0OiA4JTsgYm9yZGVyLXJhZGl1czogOTk5cHg7IGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUsIHJnYmEoMCwyNTUsMjA0LDAuMjIpLCB0cmFuc3BhcmVudCA1OCUpOyBmaWx0ZXI6IGJsdXIoNDRweCk7IHRyYW5zZm9ybTogdHJhbnNsYXRlWigtNTBweCk7IG9wYWNpdHk6IDAuODsgfQ0KICAgICAgICAud2F0Y2gtM2QtYmV6ZWwgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooOTBweCk7IGJveC1zaGFkb3c6IDAgNDBweCAxMjBweCByZ2JhKDAsMCwwLDAuNzUpLCBpbnNldCAwIDAgMzRweCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpOyB9DQogICAgICAgIC53YXRjaC0zZC1kaWFsIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDEyMHB4KTsgfQ0KICAgICAgICAuY3VzdG9tLWRpYWwtaW1nIHsgcG9zaXRpb246IGFic29sdXRlOyBpbnNldDogMDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgb2JqZWN0LWZpdDogY292ZXI7IGJvcmRlci1yYWRpdXM6IDk5OXB4OyBvcGFjaXR5OiAwLjkyOyBtaXgtYmxlbmQtbW9kZTogc2NyZWVuOyBwb2ludGVyLWV2ZW50czogbm9uZTsgfQ0KICAgICAgICANCiAgICAgICAgLndhdGNoLTNkLWhhbmQgeyB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgYm90dG9tOyB9DQogICAgICAgIC53YXRjaC1ob3RzcG90IHsgYm94LXNoYWRvdzogMCAwIDAgMCByZ2JhKDAsMjU1LDIwNCwwLjU1KTsgYW5pbWF0aW9uOiBob3RzcG90UHVsc2UgMnMgaW5maW5pdGU7IH0NCiAgICAgICAgLndhdGNoLWhvdHNwb3Qgc3BhbiB7IHBvaW50ZXItZXZlbnRzOiBub25lOyBtYXgtd2lkdGg6IG1pbigzNHZ3LCAxNTBweCk7IHdoaXRlLXNwYWNlOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiAxLjM1OyB9DQogICAgICAgIEBrZXlmcmFtZXMgaG90c3BvdFB1bHNlIHsgMCUgeyBib3gtc2hhZG93OiAwIDAgMCAwIHJnYmEoMCwyNTUsMjA0LDAuNSk7IH0gNzAlIHsgYm94LXNoYWRvdzogMCAwIDAgMTJweCByZ2JhKDAsMjU1LDIwNCwwKTsgfSAxMDAlIHsgYm94LXNoYWRvdzogMCAwIDAgMCByZ2JhKDAsMjU1LDIwNCwwKTsgfSB9DQogICAgICAgIC5zaG93Y2FzZS1wcm9kdWN0LWNhcmQgew0KICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICAgICAgd2lkdGg6IG1pbig3OHZ3LCA1MjBweCk7DQogICAgICAgICAgICBhc3BlY3QtcmF0aW86IDMgLyA0LjI1Ow0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMTIpOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMThweDsNCiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUyJSAzOCUsIHJnYmEoMCwyNTUsMjA0LC4xNCksIHRyYW5zcGFyZW50IDI4JSksIGxpbmVhci1ncmFkaWVudCgxNjBkZWcsIHJnYmEoMjU1LDI1NSwyNTUsLjA4KSwgcmdiYSgyNTUsMjU1LDI1NSwuMDIpIDI4JSwgcmdiYSgwLDAsMCwuMzgpKSwgIzA1MDcwNjsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNDRweCAxMjBweCByZ2JhKDAsMCwwLC41OCk7DQogICAgICAgIH0NCiAgICAgICAgLnNob3djYXNlLXByb2R1Y3QtY2FyZDo6YmVmb3JlIHsNCiAgICAgICAgICAgIGNvbnRlbnQ6ICcnOw0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgaW5zZXQ6IDclOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCByZ2JhKDAsMjU1LDIwNCwuMjIpLCB0cmFuc3BhcmVudCA2MiUpOw0KICAgICAgICAgICAgZmlsdGVyOiBibHVyKDQ4cHgpOw0KICAgICAgICAgICAgb3BhY2l0eTogLjgyOw0KICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKC00MnB4KTsNCiAgICAgICAgfQ0KICAgICAgICAuc2hvd2Nhc2UtcHJvZHVjdC1jYXJkOjphZnRlciB7DQogICAgICAgICAgICBjb250ZW50OiAnJzsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIGluc2V0OiAwOw0KICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwyNTUsMjU1LC4wOCksIHRyYW5zcGFyZW50IDM0JSwgcmdiYSgwLDAsMCwuMzIpKTsNCiAgICAgICAgICAgIG1peC1ibGVuZC1tb2RlOiBzY3JlZW47DQogICAgICAgIH0NCiAgICAgICAgLnNob3djYXNlLXByb2R1Y3QtaW1nIHsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIGluc2V0OiA2JTsNCiAgICAgICAgICAgIHdpZHRoOiA4OCU7DQogICAgICAgICAgICBoZWlnaHQ6IDg4JTsNCiAgICAgICAgICAgIG9iamVjdC1maXQ6IGNvbnRhaW47DQogICAgICAgICAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMzRweCA0MnB4IHJnYmEoMCwwLDAsLjYyKSk7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4zOHMgZWFzZSwgdHJhbnNmb3JtIC41cyBlYXNlLCBmaWx0ZXIgLjVzIGVhc2U7DQogICAgICAgIH0NCiAgICAgICAgLnNob3djYXNlLXByb2R1Y3QtY2FyZFtkYXRhLXRoZW1lPSJsYWRpZXMiXSAuc2hvd2Nhc2UtcHJvZHVjdC1pbWcgeyBpbnNldDogMyUgMTAlOyB3aWR0aDogODAlOyBoZWlnaHQ6IDk0JTsgfQ0KICAgICAgICAuc2hvd2Nhc2UtcHJvZHVjdC1sYWJlbCB7DQogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgICAgICBsZWZ0OiAxLjJyZW07DQogICAgICAgICAgICBib3R0b206IDEuMnJlbTsNCiAgICAgICAgICAgIHotaW5kZXg6IDI7DQogICAgICAgICAgICBjb2xvcjogcmdiYSgyNDIsMjQwLDIzMiwuNzIpOw0KICAgICAgICAgICAgZm9udC1zaXplOiAuNThyZW07DQogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjIyZW07DQogICAgICAgIH0NCg0KICAgICAgICAuaGVyby10aXRsZS1maXQgeyBmb250LXNpemU6IGNsYW1wKDNyZW0sIDd2dywgNi44cmVtKTsgbGluZS1oZWlnaHQ6IDAuOTY7IG1heC13aWR0aDogbWluKDkydncsIDk4MHB4KTsgbWFyZ2luLWxlZnQ6IGF1dG87IG1hcmdpbi1yaWdodDogYXV0bzsgfQ0KDQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDUwNjA1OwogICAgICAgICAgICBtaW4taGVpZ2h0OiAxMDBzdmg7CiAgICAgICAgICAgIHNjcm9sbC1tYXJnaW4tdG9wOiAwOwogICAgICAgIH0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZSB7IGlzb2xhdGlvbjogaXNvbGF0ZTsgfQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlIHsKICAgICAgICAgICAgY2xpcC1wYXRoOiBpbnNldCgwIDAgMCAwKTsKICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB9CiAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUgaW1nLA0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZSB2aWRlbyB7IHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07IHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsgfQ0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZSB2aWRlbyB7DQogICAgICAgICAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4yOCkgY29udHJhc3QoMS4wNCkgc2F0dXJhdGUoMS4xOCkgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZSBpbWcgew0KICAgICAgICAgICAgb2JqZWN0LXBvc2l0aW9uOiAxMDAlIGNlbnRlcjsNCiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xOCkgdHJhbnNsYXRlWigwKTsNCiAgICAgICAgfQ0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZTo6YWZ0ZXIgew0KICAgICAgICAgICAgY29udGVudDogJyc7DQogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgICAgICBpbnNldDogMDsNCiAgICAgICAgICAgIHotaW5kZXg6IDE7DQogICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6DQogICAgICAgICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNDglLCByZ2JhKDAsIDAsIDAsIDApLCB0cmFuc3BhcmVudCAzNCUpLA0KICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoNSwgNiwgNSwgMC4xKSwgcmdiYSg1LCA2LCA1LCAwKSA0MiUsIHJnYmEoNSwgNiwgNSwgMC4xNCkpOw0KICAgICAgICB9DQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlID4gLnJlbGF0aXZlIHsKICAgICAgICAgICAgbWF4LXdpZHRoOiBtaW4oNzJ2dywgNzYwcHgpOwogICAgICAgICAgICBvcGFjaXR5OiAuODY7CiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgICAgICB0ZXh0LXNoYWRvdzogMCAxOHB4IDU0cHggcmdiYSgwLDAsMCwuNDQpOwogICAgICAgICAgICBwYWRkaW5nLXRvcDogY2xhbXAoNS4ycmVtLCA4dmgsIDcuMjVyZW0pOwogICAgICAgIH0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZS0tZmllbGQgPiAucmVsYXRpdmUgewogICAgICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgICAgICBtYXJnaW4tbGVmdDogY2xhbXAoMS41cmVtLCA2dncsIDYuNXJlbSk7CiAgICAgICAgICAgIG1heC13aWR0aDogbWluKDQ4dncsIDcyMHB4KTsKICAgICAgICB9CiAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUtLWx1bWUgPiAucmVsYXRpdmUgewogICAgICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogY2xhbXAoMS41cmVtLCA2dncsIDYuNXJlbSk7CiAgICAgICAgICAgIG1heC13aWR0aDogbWluKDQ2dncsIDcwMHB4KTsKICAgICAgICB9CiAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUtLWRldGFpbCA+IC5yZWxhdGl2ZSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMnZoKTsKICAgICAgICAgICAgbWF4LXdpZHRoOiBtaW4oNTh2dywgNzYwcHgpOwogICAgICAgIH0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZS0tbHVtZTo6YWZ0ZXIgew0KICAgICAgICAgICAgYmFja2dyb3VuZDoNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoNSw2LDUsLjE4KSwgcmdiYSg1LDYsNSwwKSA0MiUsIHJnYmEoNSw2LDUsLjEyKSksDQogICAgICAgICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA3MiUgNDglLCByZ2JhKDAsMjU1LDIwNCwuMDUpLCB0cmFuc3BhcmVudCAzNCUpOw0KICAgICAgICB9DQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlLS1kZXRhaWw6OmFmdGVyIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6DQogICAgICAgICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNTAlLCByZ2JhKDUsNiw1LDApIDIyJSwgcmdiYSg1LDYsNSwuMDgpIDYyJSwgcmdiYSg1LDYsNSwuMikgMTAwJSksDQogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg1LDYsNSwuMDYpLCByZ2JhKDUsNiw1LC4xNikpOw0KICAgICAgICB9DQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlIHNwYW4gew0KICAgICAgICAgICAgY29sb3I6IHJnYmEoMCwgMjU1LCAyMDQsIC42MikgIWltcG9ydGFudDsNCiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAuNDJlbSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlIGgyIHsKICAgICAgICAgICAgY29sb3I6IHJnYmEoMjQyLCAyNDAsIDIzMiwgLjU4KSAhaW1wb3J0YW50OwogICAgICAgICAgICBmb250LXNpemU6IGNsYW1wKDIuNDVyZW0sIDd2dywgNi4xcmVtKTsKICAgICAgICAgICAgbGluZS1oZWlnaHQ6IC45OwogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjAxNWVtICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIHRleHQtd3JhcDogYmFsYW5jZTsKICAgICAgICB9CiAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUtY29weSB7CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI0MiwyNDAsMjMyLC43KTsKICAgICAgICAgICAgZm9udC1zaXplOiBjbGFtcCguODZyZW0sIDF2dywgMXJlbSk7CiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjk7CiAgICAgICAgICAgIG1heC13aWR0aDogMzRyZW07CiAgICAgICAgICAgIG1hcmdpbi10b3A6IGNsYW1wKDFyZW0sIDJ2aCwgMS40NXJlbSk7CiAgICAgICAgfQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlLS1sdW1lIC52aWRlby1zbGlkZS1jb3B5IHsKICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgfQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlLS1kZXRhaWwgLnZpZGVvLXNsaWRlLWNvcHkgewogICAgICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgfQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlLW1ldGEgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgICAgIGdhcDogLjU1cmVtOwogICAgICAgICAgICBtYXJnaW4tdG9wOiBjbGFtcCgxLjFyZW0sIDJ2aCwgMS41cmVtKTsKICAgICAgICB9CiAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUtLWx1bWUgLnZpZGVvLXNsaWRlLW1ldGEgewogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIH0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZS0tZGV0YWlsIC52aWRlby1zbGlkZS1tZXRhIHsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgfQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlLW1ldGEgYiB7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjQyLDI0MCwyMzIsLjE0KTsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1LDYsNSwuMzQpOwogICAgICAgICAgICBjb2xvcjogcmdiYSgyNDIsMjQwLDIzMiwuNzIpOwogICAgICAgICAgICBmb250LWZhbWlseTogdmFyKC0tZGlzcGxheS1mb250LCBpbmhlcml0KTsKICAgICAgICAgICAgZm9udC1zaXplOiAuNjhyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAuMTZlbTsKICAgICAgICAgICAgcGFkZGluZzogLjQ2cmVtIC43cmVtOwogICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7CiAgICAgICAgfQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlLWFjdGlvbnMgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgICAgIGdhcDogLjdyZW07CiAgICAgICAgICAgIG1hcmdpbi10b3A6IGNsYW1wKDEuMzVyZW0sIDIuNHZoLCAxLjlyZW0pOwogICAgICAgIH0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZS0tbHVtZSAudmlkZW8tc2xpZGUtYWN0aW9ucywKICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZS0tZGV0YWlsIC52aWRlby1zbGlkZS1hY3Rpb25zIHsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICB9CiAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUtLWRldGFpbCAudmlkZW8tc2xpZGUtYWN0aW9ucyB7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIH0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1hY3Rpb24gewogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDIuODVyZW07CiAgICAgICAgICAgIHBhZGRpbmc6IDAgMS4wNXJlbTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNDIsMjQwLDIzMiwuMTgpOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0MiwyNDAsMjMyLC4wOCk7CiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI0MiwyNDAsMjMyLC44Nik7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1kaXNwbGF5LWZvbnQsIGluaGVyaXQpOwogICAgICAgICAgICBmb250LXNpemU6IC43MnJlbTsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC4xOGVtOwogICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgLjI1cyBlYXNlLCBiYWNrZ3JvdW5kIC4yNXMgZWFzZSwgY29sb3IgLjI1cyBlYXNlLCB0cmFuc2Zvcm0gLjI1cyBlYXNlOwogICAgICAgIH0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1hY3Rpb246aG92ZXIgewogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7CiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgwLDI1NSwyMDQsLjQyKTsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLDI1NSwyMDQsLjEyKTsKICAgICAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgfQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXByb2dyZXNzLWRvdHMgewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIHotaW5kZXg6IDQyOwogICAgICAgICAgICBsZWZ0OiBjbGFtcCgxcmVtLCAzdncsIDIuMjVyZW0pOwogICAgICAgICAgICBib3R0b206IGNsYW1wKDFyZW0sIDN2dywgMi4yNXJlbSk7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGdhcDogLjVyZW07CiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIH0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1wcm9ncmVzcy1kb3RzIGkgewogICAgICAgICAgICB3aWR0aDogMi4ycmVtOwogICAgICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNDIsMjQwLDIzMiwuMTgpOwogICAgICAgIH0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1wcm9ncmVzcy1kb3RzIGk6Zmlyc3QtY2hpbGQgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMjU1LDIwNCwuNik7CiAgICAgICAgfQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkgewogICAgICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIHsKICAgICAgICAgICAgICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgbWluLWhlaWdodDogMCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKICAgICAgICAgICAgfQ0KICAgICAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUgew0KICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGluc2V0OiBhdXRvICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTAwc3ZoOw0KICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZSA+IC5yZWxhdGl2ZSB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAuNjIgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDIuNXJlbSkgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiA2Ljc1cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUtY29weSwKICAgICAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUtLWx1bWUgLnZpZGVvLXNsaWRlLWNvcHksCiAgICAgICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlLS1kZXRhaWwgLnZpZGVvLXNsaWRlLWNvcHkgewogICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87CiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUtbWV0YSwKICAgICAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUtYWN0aW9ucywKICAgICAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUtLWx1bWUgLnZpZGVvLXNsaWRlLW1ldGEsCiAgICAgICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlLS1sdW1lIC52aWRlby1zbGlkZS1hY3Rpb25zLAogICAgICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZS0tZGV0YWlsIC52aWRlby1zbGlkZS1tZXRhLAogICAgICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZS0tZGV0YWlsIC52aWRlby1zbGlkZS1hY3Rpb25zIHsKICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICB9CiAgICAgICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXByb2dyZXNzLWRvdHMgeyBkaXNwbGF5OiBub25lOyB9CiAgICAgICAgfQogICAgICAgICNzaG93Y2FzZS0zZCwNCiAgICAgICAgI2lubm92YXRpb24sDQogICAgICAgICNhdGVsaWVyLXByb2Nlc3Mgew0KICAgICAgICAgICAgLS1sdXgtbGlnaHQtcHJvZ3Jlc3M6IHZhcigtLWdsb2JhbC1saWdodC1wcm9ncmVzcywgMCk7DQogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgICAgICAgICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjJmMGU4IGNhbGMoKDEgLSB2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpKSAqIDEwMCUpLCAjMDcxMDBlIGNhbGModmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSAqIDEwMCUpKSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSgyNTUsMjU1LDI1NSwuMDgpIGNhbGMoKDEgLSB2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpKSAqIDEwMCUpLCByZ2JhKDcsMTYsMTQsLjEpIGNhbGModmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSAqIDEwMCUpKSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIC4xMnMgbGluZWFyOw0KICAgICAgICB9DQogICAgICAgICNzaG93Y2FzZS0zZCA+ICosICNpbm5vdmF0aW9uID4gKiwgI2F0ZWxpZXItcHJvY2VzcyA+ICogeyBwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IDI7IH0NCiAgICAgICAgI3Nob3djYXNlLTNkID4gLnNpZ25hdHVyZS1zY2VuZS1zdGFjayB7DQogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgICAgICB6LWluZGV4OiAwOw0KICAgICAgICB9DQogICAgICAgIC5zY2VuZS10cmFuc2l0aW9uLW1lZGlhIHsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsNCiAgICAgICAgICAgIGluc2V0OiAwOw0KICAgICAgICAgICAgei1pbmRleDogMTsNCiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOw0KICAgICAgICAgICAgb3BhY2l0eTogMDsNCiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4xOHMgbGluZWFyOw0KICAgICAgICB9DQogICAgICAgIGJvZHkuc2NlbmUtcHJvZHVjdC10cmFuc2l0aW9uIC5zY2VuZS10cmFuc2l0aW9uLW1lZGlhIHsgb3BhY2l0eTogMDsgfQ0KICAgICAgICAuc2NlbmUtdHJhbnNpdGlvbi1tZWRpYSBpbWcgew0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgaW5zZXQ6IC00JTsNCiAgICAgICAgICAgIHdpZHRoOiAxMDglOw0KICAgICAgICAgICAgaGVpZ2h0OiAxMDglOw0KICAgICAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7DQogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKGNhbGMoMS4wNCArICh2YXIoLS1nbG9iYWwtbGlnaHQtcHJvZ3Jlc3MsIDApICogLjA4KSkpOw0KICAgICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAuMTJzIGxpbmVhciwgZmlsdGVyIC4xMnMgbGluZWFyLCB0cmFuc2Zvcm0gLjEycyBsaW5lYXI7DQogICAgICAgIH0NCiAgICAgICAgLnNjZW5lLXRyYW5zaXRpb24tZGFyayB7DQogICAgICAgICAgICBvcGFjaXR5OiBjYWxjKDEgLSB2YXIoLS1nbG9iYWwtbGlnaHQtcHJvZ3Jlc3MsIDApKTsNCiAgICAgICAgICAgIGZpbHRlcjogYnJpZ2h0bmVzcyhjYWxjKC4zOCArICh2YXIoLS1nbG9iYWwtbGlnaHQtcHJvZ3Jlc3MsIDApICogLjI2KSkpIHNhdHVyYXRlKGNhbGMoLjcyIC0gKHZhcigtLWdsb2JhbC1saWdodC1wcm9ncmVzcywgMCkgKiAuMTgpKSkgY29udHJhc3QoMS4wOCkgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAuc2NlbmUtdHJhbnNpdGlvbi1saWdodCB7DQogICAgICAgICAgICBvcGFjaXR5OiBjYWxjKHZhcigtLWdsb2JhbC1saWdodC1wcm9ncmVzcywgMCkgKiAuOSk7DQogICAgICAgICAgICBvYmplY3QtZml0OiBjb250YWluICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBvYmplY3QtcG9zaXRpb246IDc2JSBjZW50ZXI7DQogICAgICAgICAgICBmaWx0ZXI6IGJyaWdodG5lc3MoY2FsYyguOTIgKyAodmFyKC0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzLCAwKSAqIC4xKSkpIHNhdHVyYXRlKC44NikgY29udHJhc3QoMS4wMikgZHJvcC1zaGFkb3coMCAyOHB4IDQycHggcmdiYSg3LDE2LDE0LC4xOCkpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgLnNjZW5lLXRyYW5zaXRpb24tbWVkaWE6OmFmdGVyIHsNCiAgICAgICAgICAgIGNvbnRlbnQ6ICcnOw0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgaW5zZXQ6IDA7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOg0KICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCg5MGRlZywgY29sb3ItbWl4KGluIHNyZ2IsIHJnYmEoNSw3LDYsLjg4KSBjYWxjKCgxIC0gdmFyKC0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzLCAwKSkgKiAxMDAlKSwgcmdiYSgyNTUsMjU1LDI1NSwuODYpIGNhbGModmFyKC0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzLCAwKSAqIDEwMCUpKSAwJSwgY29sb3ItbWl4KGluIHNyZ2IsIHJnYmEoNSw3LDYsLjUyKSBjYWxjKCgxIC0gdmFyKC0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzLCAwKSkgKiAxMDAlKSwgcmdiYSgyNTUsMjU1LDI1NSwuNTIpIGNhbGModmFyKC0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzLCAwKSAqIDEwMCUpKSA0NiUsIHRyYW5zcGFyZW50IDEwMCUpLA0KICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDUsNyw2LC43NCkgY2FsYygoMSAtIHZhcigtLWdsb2JhbC1saWdodC1wcm9ncmVzcywgMCkpICogMTAwJSksIHJnYmEoMjQ4LDI1MCwyNDksLjcyKSBjYWxjKHZhcigtLWdsb2JhbC1saWdodC1wcm9ncmVzcywgMCkgKiAxMDAlKSkgMCUsIGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDUsNyw2LC40NCkgY2FsYygoMSAtIHZhcigtLWdsb2JhbC1saWdodC1wcm9ncmVzcywgMCkpICogMTAwJSksIHJnYmEoMjU1LDI1NSwyNTUsLjkpIGNhbGModmFyKC0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzLCAwKSAqIDEwMCUpKSAxMDAlKTsNCiAgICAgICAgfQ0KICAgICAgICAjc2hvd2Nhc2UtM2Qgew0KICAgICAgICAgICAgYmFja2dyb3VuZDoNCiAgICAgICAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDc0JSAzMCUsIGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDAsMjU1LDIwNCwuMTQpIGNhbGMoKDEgLSB2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpKSAqIDEwMCUpLCByZ2JhKDU2LDEwMiwxODQsLjA4KSBjYWxjKHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykgKiAxMDAlKSksIHRyYW5zcGFyZW50IDM0JSksDQogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgIzA5MGIwYSAwJSwgY29sb3ItbWl4KGluIHNyZ2IsICMxMTE2MTQgY2FsYygoMSAtIHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykpICogMTAwJSksICNlZWYzZWYgY2FsYyh2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpICogMTAwJSkpIDY4JSwgY29sb3ItbWl4KGluIHNyZ2IsICMxMDEzMTIgY2FsYygoMSAtIHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykpICogMTAwJSksICNmOGZhZjkgY2FsYyh2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpICogMTAwJSkpIDEwMCUpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI2lubm92YXRpb24gew0KICAgICAgICAgICAgYmFja2dyb3VuZDoNCiAgICAgICAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDIwJSAxMiUsIGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDE1NiwyMzUsMjE3LC4xMikgY2FsYygoMSAtIHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykpICogMTAwJSksIHJnYmEoNTYsMTAyLDE4NCwuMDgpIGNhbGModmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSAqIDEwMCUpKSwgdHJhbnNwYXJlbnQgMzQlKSwNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCBjb2xvci1taXgoaW4gc3JnYiwgIzExMTYxNCBjYWxjKCgxIC0gdmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSkgKiAxMDAlKSwgI2VlZjNlZiBjYWxjKHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykgKiAxMDAlKSkgMCUsIGNvbG9yLW1peChpbiBzcmdiLCAjMDYwODA3IGNhbGMoKDEgLSB2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpKSAqIDEwMCUpLCAjZmZmZmZmIGNhbGModmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSAqIDEwMCUpKSAxMDAlKSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgICNhdGVsaWVyLXByb2Nlc3Mgew0KICAgICAgICAgICAgYmFja2dyb3VuZDoNCiAgICAgICAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDc2JSAyNiUsIGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDAsMjU1LDIwNCwuMSkgY2FsYygoMSAtIHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykpICogMTAwJSksIHJnYmEoNTYsMTAyLDE4NCwuMDc1KSBjYWxjKHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykgKiAxMDAlKSksIHRyYW5zcGFyZW50IDM2JSksDQogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgY29sb3ItbWl4KGluIHNyZ2IsICMwNjA4MDcgY2FsYygoMSAtIHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykpICogMTAwJSksICNmMmY2ZjMgY2FsYyh2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpICogMTAwJSkpIDAlLCBjb2xvci1taXgoaW4gc3JnYiwgIzA2MDgwNyBjYWxjKCgxIC0gdmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSkgKiAxMDAlKSwgI2ZmZmZmZiBjYWxjKHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykgKiAxMDAlKSkgMTAwJSkgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAjc2hvd2Nhc2UtM2QgaDIsICNzaG93Y2FzZS0zZCBoMywgI3Nob3djYXNlLTNkIHAsDQogICAgICAgICNpbm5vdmF0aW9uIGgyLCAjaW5ub3ZhdGlvbiBoMywgI2lubm92YXRpb24gcCwNCiAgICAgICAgI2F0ZWxpZXItcHJvY2VzcyBoMiwgI2F0ZWxpZXItcHJvY2VzcyBoMywgI2F0ZWxpZXItcHJvY2VzcyBwLA0KICAgICAgICAjc2hvd2Nhc2UtM2QgW2NsYXNzKj0idGV4dC13aGl0ZS8iXSwNCiAgICAgICAgI2lubm92YXRpb24gW2NsYXNzKj0idGV4dC13aGl0ZS8iXSwNCiAgICAgICAgI2F0ZWxpZXItcHJvY2VzcyBbY2xhc3MqPSJ0ZXh0LXdoaXRlLyJdIHsNCiAgICAgICAgICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSgyNDIsMjQwLDIzMiwuNjIpIGNhbGMoKDEgLSB2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpKSAqIDEwMCUpLCByZ2JhKDcsMTYsMTQsLjY2KSBjYWxjKHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykgKiAxMDAlKSkgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAjc2hvd2Nhc2UtM2QgaDIsICNzaG93Y2FzZS0zZCBoMywNCiAgICAgICAgI2lubm92YXRpb24gaDIsICNpbm5vdmF0aW9uIGgzLA0KICAgICAgICAjYXRlbGllci1wcm9jZXNzIGgyLCAjYXRlbGllci1wcm9jZXNzIGgzIHsNCiAgICAgICAgICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2YyZjBlOCBjYWxjKCgxIC0gdmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSkgKiAxMDAlKSwgIzA3MTAwZSBjYWxjKHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykgKiAxMDAlKSkgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAjc2hvd2Nhc2UtM2QgLmJ0bi1tb2Rlcm4sDQogICAgICAgICNpbm5vdmF0aW9uIC5idG4tbW9kZXJuLA0KICAgICAgICAjYXRlbGllci1wcm9jZXNzIC5idG4tbW9kZXJuLA0KICAgICAgICAjc2hvd2Nhc2UtM2QgLm1hdGVyaWFsLWNoaXAgew0KICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSgyNTUsMjU1LDI1NSwuMykgY2FsYygoMSAtIHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykpICogMTAwJSksIHJnYmEoNywxNiwxNCwuMTgpIGNhbGModmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSAqIDEwMCUpKSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZmZmZmZmIGNhbGMoKDEgLSB2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpKSAqIDEwMCUpLCAjMDcxMDBlIGNhbGModmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSAqIDEwMCUpKSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgICNzaG93Y2FzZS0zZCAuYWJzb2x1dGUuaW5zZXQtMC5vcGFjaXR5LTQwIHsNCiAgICAgICAgICAgIG9wYWNpdHk6IGNhbGMoLjQgLSAodmFyKC0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzLCAwKSAqIC4yNCkpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI3Nob3djYXNlLTNkIC5zaG93Y2FzZS1wcm9kdWN0LWNhcmQgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHJnYmEoMjU1LDI1NSwyNTUsLjA1KSBjYWxjKCgxIC0gdmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSkgKiAxMDAlKSwgcmdiYSgyNTUsMjU1LDI1NSwuOTQpIGNhbGModmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSAqIDEwMCUpKSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSgyNTUsMjU1LDI1NSwuMTIpIGNhbGMoKDEgLSB2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpKSAqIDEwMCUpLCByZ2JhKDcsMTYsMTQsLjEpIGNhbGModmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSAqIDEwMCUpKSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgYm94LXNoYWRvdzogMCAzOHB4IDkwcHggY29sb3ItbWl4KGluIHNyZ2IsIHJnYmEoMCwwLDAsLjYyKSBjYWxjKCgxIC0gdmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSkgKiAxMDAlKSwgcmdiYSg3LDE2LDE0LC4xMikgY2FsYyh2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpICogMTAwJSkpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI3Nob3djYXNlLTNkIC5zaG93Y2FzZS1wcm9kdWN0LWltZyB7DQogICAgICAgICAgICBmaWx0ZXI6IHNhdHVyYXRlKGNhbGMoLjc4ICsgKHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykgKiAuMTQpKSkgY29udHJhc3QoY2FsYygxLjEyIC0gKHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykgKiAuMDgpKSkgYnJpZ2h0bmVzcyhjYWxjKC44OCArICh2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpICogLjE0KSkpIGRyb3Atc2hhZG93KDAgMjhweCAzNnB4IHJnYmEoNywxNiwxNCwuMikpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI3Nob3djYXNlLTNkIHsNCiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwMHN2aDsNCiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgaXNvbGF0aW9uOiBpc29sYXRlOw0KICAgICAgICB9DQogICAgICAgIC5zaWduYXR1cmUtc2NlbmUtc3RhY2sgew0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgaW5zZXQ6IDA7DQogICAgICAgICAgICB6LWluZGV4OiAwOw0KICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOw0KICAgICAgICB9DQogICAgICAgIC5zaWduYXR1cmUtc2NlbmUgew0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgaW5zZXQ6IDA7DQogICAgICAgICAgICBvcGFjaXR5OiAwOw0KICAgICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAuMThzIGxpbmVhcjsNCiAgICAgICAgfQ0KICAgICAgICAuc2lnbmF0dXJlLXNjZW5lLmlzLWFjdGl2ZSB7DQogICAgICAgICAgICBvcGFjaXR5OiAxOw0KICAgICAgICB9DQogICAgICAgIC5zaWduYXR1cmUtc2NlbmUgaW1nIHsNCiAgICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7DQogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKGNhbGMoMS4wNCAtICh2YXIoLS1zaWduYXR1cmUtc2NlbmUtcHJvZ3Jlc3MsIDApICogLjAyNSkpKSB0cmFuc2xhdGVZKGNhbGModmFyKC0tc2lnbmF0dXJlLXNjZW5lLXByb2dyZXNzLCAwKSAqIC0xLjJ2aCkpOw0KICAgICAgICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKGNhbGMoLjUyICsgKHZhcigtLWdsb2JhbC1saWdodC1wcm9ncmVzcywgMCkgKiAuMzYpKSkgc2F0dXJhdGUoY2FsYyguODIgKyAodmFyKC0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzLCAwKSAqIC4wOCkpKSBjb250cmFzdChjYWxjKDEuMTIgLSAodmFyKC0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzLCAwKSAqIC4wNSkpKSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgIC5zaWduYXR1cmUtc2NlbmUuaXMtbGlnaHQgaW1nIHsNCiAgICAgICAgICAgIG9iamVjdC1maXQ6IGNvbnRhaW47DQogICAgICAgICAgICBvYmplY3QtcG9zaXRpb246IDcyJSBjZW50ZXI7DQogICAgICAgICAgICBwYWRkaW5nOiBjbGFtcCgycmVtLCA4dncsIDdyZW0pOw0KICAgICAgICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKGNhbGMoLjkgKyAodmFyKC0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzLCAwKSAqIC4xMikpKSBzYXR1cmF0ZSguOSkgY29udHJhc3QoMS4wMikgZHJvcC1zaGFkb3coMCAzNnB4IDQ4cHggcmdiYSg3LDE2LDE0LC4xOCkpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgLnNpZ25hdHVyZS1zY2VuZVtkYXRhLXNpZ25hdHVyZS1zY2VuZT0ibWVucyJdIGltZywNCiAgICAgICAgLnNpZ25hdHVyZS1zY2VuZVtkYXRhLXNpZ25hdHVyZS1zY2VuZT0ibWVjaGFuaWNhbCJdIGltZyB7DQogICAgICAgICAgICBvYmplY3QtZml0OiBjb250YWluOw0KICAgICAgICAgICAgb2JqZWN0LXBvc2l0aW9uOiA3MiUgY2VudGVyOw0KICAgICAgICAgICAgcGFkZGluZzogY2xhbXAoMnJlbSwgOXZ3LCA4cmVtKTsNCiAgICAgICAgfQ0KICAgICAgICAuc2lnbmF0dXJlLXNjZW5lOjphZnRlciB7DQogICAgICAgICAgICBjb250ZW50OiAnJzsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIGluc2V0OiAwOw0KICAgICAgICAgICAgYmFja2dyb3VuZDoNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDUsNyw2LC44MikgY2FsYygoMSAtIHZhcigtLWdsb2JhbC1saWdodC1wcm9ncmVzcywgMCkpICogMTAwJSksIHJnYmEoMjU1LDI1NSwyNTUsLjgyKSBjYWxjKHZhcigtLWdsb2JhbC1saWdodC1wcm9ncmVzcywgMCkgKiAxMDAlKSkgMCUsIGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDUsNyw2LC40MikgY2FsYygoMSAtIHZhcigtLWdsb2JhbC1saWdodC1wcm9ncmVzcywgMCkpICogMTAwJSksIHJnYmEoMjU1LDI1NSwyNTUsLjQyKSBjYWxjKHZhcigtLWdsb2JhbC1saWdodC1wcm9ncmVzcywgMCkgKiAxMDAlKSkgNDIlLCB0cmFuc3BhcmVudCAxMDAlKSwNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDUsNyw2LC40NiksIGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDUsNyw2LC42NCkgY2FsYygoMSAtIHZhcigtLWdsb2JhbC1saWdodC1wcm9ncmVzcywgMCkpICogMTAwJSksIHJnYmEoMjU1LDI1NSwyNTUsLjcyKSBjYWxjKHZhcigtLWdsb2JhbC1saWdodC1wcm9ncmVzcywgMCkgKiAxMDAlKSkgMTAwJSk7DQogICAgICAgIH0NCiAgICAgICAgLnNpZ25hdHVyZS1zY2VuZS1zdGF0dXMgew0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgbGVmdDogY2xhbXAoMS4yNXJlbSwgNHZ3LCAzcmVtKTsNCiAgICAgICAgICAgIHJpZ2h0OiBjbGFtcCgxLjI1cmVtLCA0dncsIDNyZW0pOw0KICAgICAgICAgICAgYm90dG9tOiBjbGFtcCgxcmVtLCA0dmgsIDJyZW0pOw0KICAgICAgICAgICAgei1pbmRleDogMzsNCiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7DQogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyIGF1dG87DQogICAgICAgICAgICBnYXA6IDFyZW07DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDI0MiwyNDAsMjMyLC42OCkgY2FsYygoMSAtIHZhcigtLWdsb2JhbC1saWdodC1wcm9ncmVzcywgMCkpICogMTAwJSksIHJnYmEoNywxNiwxNCwuNjQpIGNhbGModmFyKC0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzLCAwKSAqIDEwMCUpKTsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBTeW5jb3BhdGUsIHNhbnMtc2VyaWY7DQogICAgICAgICAgICBmb250LXNpemU6IC41OHJlbTsNCiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAuMjRlbTsNCiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOw0KICAgICAgICB9DQogICAgICAgIC5zaWduYXR1cmUtc2NlbmUtc3RhdHVzIC50cmFjayB7DQogICAgICAgICAgICBoZWlnaHQ6IDFweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsNCiAgICAgICAgICAgIG9wYWNpdHk6IC4zMjsNCiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgICAgIH0NCiAgICAgICAgLnNpZ25hdHVyZS1zY2VuZS1zdGF0dXMgLmZpbGwgew0KICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOw0KICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgodmFyKC0tc2lnbmF0dXJlLXByb2dyZXNzLCAwKSk7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7DQogICAgICAgIH0NCiAgICAgICAgI3Nob3djYXNlLTNkID4gLnNpZ25hdHVyZS1zY2VuZS1zdGF0dXMgew0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgei1pbmRleDogMzsNCiAgICAgICAgfQ0KICAgICAgICAjc2hvd2Nhc2UtM2QgLm1heC13LTd4bCB7DQogICAgICAgICAgICBtaW4taGVpZ2h0OiAxMDBzdmg7DQogICAgICAgICAgICBwYWRkaW5nLXRvcDogY2xhbXAoN3JlbSwgMTV2aCwgMTByZW0pOw0KICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IGNsYW1wKDVyZW0sIDl2aCwgN3JlbSk7DQogICAgICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7DQogICAgICAgIH0NCiAgICAgICAgI3Nob3djYXNlLTNkICNzaG93Y2FzZV90aXRsZSB7DQogICAgICAgICAgICBmb250LXNpemU6IGNsYW1wKDIuMzVyZW0sIDUuNHZ3LCA1LjI1cmVtKTsNCiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAuOTI7DQogICAgICAgICAgICBtYXgtd2lkdGg6IDExY2g7DQogICAgICAgICAgICB0ZXh0LXdyYXA6IGJhbGFuY2U7DQogICAgICAgIH0NCiAgICAgICAgI3Nob3djYXNlLTNkICNzaG93Y2FzZV9kZXNjIHsNCiAgICAgICAgICAgIG1heC13aWR0aDogMzRyZW07DQogICAgICAgIH0NCiAgICAgICAgI3Nob3djYXNlLTNkIC5ncmlkLnNtXDpncmlkLWNvbHMtMyA+IGRpdiB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSgxNywyMCwxOCwuODQpIGNhbGMoKDEgLSB2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpKSAqIDEwMCUpLCByZ2JhKDI1NSwyNTUsMjU1LC43MikgY2FsYyh2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpICogMTAwJSkpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDI1NSwyNTUsMjU1LC4xKSBjYWxjKCgxIC0gdmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSkgKiAxMDAlKSwgcmdiYSg3LDE2LDE0LC4xMikgY2FsYyh2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpICogMTAwJSkpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTZweCk7DQogICAgICAgIH0NCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7DQogICAgICAgICAgICAjc2hvd2Nhc2UtM2Qgew0KICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICNzaG93Y2FzZS0zZCAubWF4LXctN3hsIHsNCiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiBhdXRvOw0KICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiA2LjI1cmVtOw0KICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiA1cmVtOw0KICAgICAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgZ2FwOiAxLjc1cmVtOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgI3Nob3djYXNlLTNkICNzaG93Y2FzZV90aXRsZSB7DQogICAgICAgICAgICAgICAgZm9udC1zaXplOiBjbGFtcCgycmVtLCAxMnZ3LCAzLjZyZW0pOw0KICAgICAgICAgICAgICAgIG1heC13aWR0aDogOS41Y2g7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAjc2hvd2Nhc2UtM2QgLmdyaWQuc21cOmdyaWQtY29scy0zIHsNCiAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCBtaW5tYXgoMCwgMWZyKSk7DQogICAgICAgICAgICAgICAgZ2FwOiAuNjVyZW07DQogICAgICAgICAgICB9DQogICAgICAgICAgICAjc2hvd2Nhc2UtM2QgLmdyaWQuc21cOmdyaWQtY29scy0zID4gZGl2IHsNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAuODVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAjc2hvd2Nhc2UtM2QgLndhdGNoLTNkLXN0YWdlIHsNCiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAzOTBweCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLnNpZ25hdHVyZS1zY2VuZS1zdGF0dXMgew0KICAgICAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG87DQogICAgICAgICAgICAgICAgYm90dG9tOiAuNzVyZW07DQogICAgICAgICAgICAgICAgZm9udC1zaXplOiAuNXJlbTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC5zaWduYXR1cmUtc2NlbmUtc3RhdHVzID4gc3BhbjpmaXJzdC1jaGlsZCB7DQogICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAjaW5ub3ZhdGlvbiAuY3JhZnQtbWVkaWEgew0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHJnYmEoMjU1LDI1NSwyNTUsLjEpIGNhbGMoKDEgLSB2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpKSAqIDEwMCUpLCByZ2JhKDcsMTYsMTQsLjEpIGNhbGModmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSAqIDEwMCUpKTsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMzRweCA5MHB4IGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDAsMCwwLC40OCkgY2FsYygoMSAtIHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykpICogMTAwJSksIHJnYmEoNywxNiwxNCwuMTIpIGNhbGModmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSAqIDEwMCUpKTsNCiAgICAgICAgfQ0KICAgICAgICAjaW5ub3ZhdGlvbiAuY3JhZnQtbWVkaWEgPiBkaXYgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCxjYWxjKC41IC0gKHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykgKiAuNDIpKSkgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAjaW5ub3ZhdGlvbiAjY3JhZnQtaW1nIHsNCiAgICAgICAgICAgIG9wYWNpdHk6IGNhbGMoLjcgKyAodmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSAqIC4yOCkpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBmaWx0ZXI6IGdyYXlzY2FsZShjYWxjKDEgLSB2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpKSkgY29udHJhc3QoY2FsYygxLjI1IC0gKHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykgKiAuMTIpKSkgYnJpZ2h0bmVzcyhjYWxjKC44MiArICh2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpICogLjIpKSkgIWltcG9ydGFudDsNCiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoY2FsYygxICsgKHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykgKiAuMDM1KSkpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI2F0ZWxpZXItcHJvY2VzcyAuYXNzZXQtdGlsZSB7DQogICAgICAgICAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDI1NSwyNTUsMjU1LC4xKSBjYWxjKCgxIC0gdmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSkgKiAxMDAlKSwgcmdiYSg3LDE2LDE0LC4xKSBjYWxjKHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykgKiAxMDAlKSkgIWltcG9ydGFudDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDI1NSwyNTUsMjU1LC4wMykgY2FsYygoMSAtIHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykpICogMTAwJSksIHJnYmEoMjU1LDI1NSwyNTUsLjkpIGNhbGModmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSAqIDEwMCUpKSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgYm94LXNoYWRvdzogMCAyNHB4IDU4cHggY29sb3ItbWl4KGluIHNyZ2IsIHJnYmEoMCwwLDAsLjM4KSBjYWxjKCgxIC0gdmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSkgKiAxMDAlKSwgcmdiYSg3LDE2LDE0LC4wOCkgY2FsYyh2YXIoLS1sdXgtbGlnaHQtcHJvZ3Jlc3MpICogMTAwJSkpOw0KICAgICAgICB9DQogICAgICAgICNhdGVsaWVyLXByb2Nlc3MgLmFzc2V0LXRpbGUgaW1nLA0KICAgICAgICAjYXRlbGllci1wcm9jZXNzIC5hc3NldC10aWxlIHZpZGVvIHsNCiAgICAgICAgICAgIGZpbHRlcjogc2F0dXJhdGUoY2FsYyguNzggKyAodmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSAqIC4xNCkpKSBjb250cmFzdChjYWxjKDEuMTIgLSAodmFyKC0tbHV4LWxpZ2h0LXByb2dyZXNzKSAqIC4wOCkpKSBicmlnaHRuZXNzKGNhbGMoLjc2ICsgKHZhcigtLWx1eC1saWdodC1wcm9ncmVzcykgKiAuMjIpKSkgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsNCiAgICAgICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgeyBoZWlnaHQ6IDEwMHN2aDsgfQ0KICAgICAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUgPiAucmVsYXRpdmUgeyBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAyLjVyZW0pOyBvcGFjaXR5OiAuNjI7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgydmgpOyB9DQogICAgICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZSBpbWcgeyBvYmplY3QtcG9zaXRpb246IDc4JSBjZW50ZXI7IHRyYW5zZm9ybTogc2NhbGUoMS4xNCkgdHJhbnNsYXRlWigwKTsgfQ0KICAgICAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUgaDIgeyBmb250LXNpemU6IGNsYW1wKDIuMnJlbSwgMTN2dywgNC40cmVtKTsgbGluZS1oZWlnaHQ6IC44ODsgfQ0KICAgICAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUgc3BhbiB7IGxldHRlci1zcGFjaW5nOiAuMjZlbSAhaW1wb3J0YW50OyB9DQogICAgICAgIH0NCg0KICAgICAgICAuY2FsaWJyZS10aGVhdHJlIHsgYmFja2dyb3VuZDogIzA1MDYwNTsgfQ0KICAgICAgICAuY2FsaWJyZS1wYW5lbCB7DQogICAgICAgICAgICBtaW4taGVpZ2h0OiAxMDBzdmg7DQogICAgICAgICAgICBkaXNwbGF5OiBncmlkOw0KICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgLjgyZnIpIG1pbm1heCgzMjBweCwgMWZyKTsNCiAgICAgICAgICAgIGdhcDogY2xhbXAoMnJlbSwgNXZ3LCA2cmVtKTsNCiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMDgpOw0KICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICAgICAgaXNvbGF0aW9uOiBpc29sYXRlOw0KICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgfQ0KICAgICAgICAuY2FsaWJyZS1wYW5lbDo6YmVmb3JlIHsNCiAgICAgICAgICAgIGNvbnRlbnQ6ICcnOw0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgaW5zZXQ6IDglIGF1dG8gOCUgLTEyJTsNCiAgICAgICAgICAgIHdpZHRoOiBjbGFtcCgyMjBweCwgMzJ2dywgNTIwcHgpOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCByZ2JhKDAsMjU1LDIwNCwuMTQpLCB0cmFuc3BhcmVudCA2NiUpOw0KICAgICAgICAgICAgZmlsdGVyOiBibHVyKDIycHgpOw0KICAgICAgICAgICAgb3BhY2l0eTogLjc1Ow0KICAgICAgICAgICAgei1pbmRleDogLTE7DQogICAgICAgIH0NCiAgICAgICAgLmNhbGlicmUtcGFuZWw6OmFmdGVyIHsNCiAgICAgICAgICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1jYWxpYnJlLWluZGV4KTsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIHJpZ2h0OiBjbGFtcCgxLjVyZW0sIDR2dywgNHJlbSk7DQogICAgICAgICAgICB0b3A6IGNsYW1wKDEuNXJlbSwgN3ZoLCA0LjVyZW0pOw0KICAgICAgICAgICAgei1pbmRleDogMjsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBTeW5jb3BhdGUsIHNhbnMtc2VyaWY7DQogICAgICAgICAgICBmb250LXNpemU6IGNsYW1wKDIuNzVyZW0sIDh2dywgOHJlbSk7DQogICAgICAgICAgICBjb2xvcjogcmdiYSgyNDIsMjQwLDIzMiwuMDUpOw0KICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC4wOGVtOw0KICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogICAgICAgIH0NCiAgICAgICAgLmNhbGlicmUtY29weSB7DQogICAgICAgICAgICBwb3NpdGlvbjogc3RpY2t5Ow0KICAgICAgICAgICAgdG9wOiAxOHZoOw0KICAgICAgICAgICAgYWxpZ24tc2VsZjogc3RhcnQ7DQogICAgICAgICAgICBwYWRkaW5nOiBjbGFtcCg0cmVtLCA5dncsIDhyZW0pIDA7DQogICAgICAgICAgICBtYXgtd2lkdGg6IDM0cmVtOw0KICAgICAgICB9DQogICAgICAgIC5jYWxpYnJlLWNvcHk6OmJlZm9yZSB7DQogICAgICAgICAgICBjb250ZW50OiAnJzsNCiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgICAgICAgICAgd2lkdGg6IDcycHg7DQogICAgICAgICAgICBoZWlnaHQ6IDFweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEuNDVyZW07DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICMwMGZmY2MsIHRyYW5zcGFyZW50KTsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAyNHB4IHJnYmEoMCwyNTUsMjA0LC4zKTsNCiAgICAgICAgfQ0KICAgICAgICAuY2FsaWJyZS1tZWRpYSB7DQogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgICAgICBtaW4taGVpZ2h0OiBjbGFtcCg1MjBweCwgNzh2aCwgODYwcHgpOw0KICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMDgpOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNDAlLCByZ2JhKDAsMjU1LDIwNCwuMTIpLCB0cmFuc3BhcmVudCAzNiUpLCAjMDUwNjA1Ow0KICAgICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjA4KSwgMCAzNnB4IDExMHB4IHJnYmEoMCwwLDAsLjQyKTsNCiAgICAgICAgICAgIGNsaXAtcGF0aDogcG9seWdvbigwIDAsIDEwMCUgMCwgMTAwJSBjYWxjKDEwMCUgLSAzOHB4KSwgY2FsYygxMDAlIC0gMzhweCkgMTAwJSwgMCAxMDAlKTsNCiAgICAgICAgfQ0KICAgICAgICAuY2FsaWJyZS1tZWRpYSBpbWcsDQogICAgICAgIC5jYWxpYnJlLW1lZGlhIHZpZGVvIHsNCiAgICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgICAgICAgbWluLWhlaWdodDogaW5oZXJpdDsNCiAgICAgICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOw0KICAgICAgICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKC43MikgY29udHJhc3QoMS4wOCkgc2F0dXJhdGUoLjkyKTsNCiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNCk7DQogICAgICAgIH0NCiAgICAgICAgLmNhbGlicmUtbWVkaWE6OmFmdGVyIHsNCiAgICAgICAgICAgIGNvbnRlbnQ6ICcnOw0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgaW5zZXQ6IDA7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOg0KICAgICAgICAgICAgICAgIHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwyNTUsMjU1LC4wNDUpIDAgMXB4LCB0cmFuc3BhcmVudCAxcHggOHB4KSwNCiAgICAgICAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDc0JSAyOCUsIHJnYmEoMCwyNTUsMjA0LC4xNiksIHRyYW5zcGFyZW50IDMyJSksDQogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDUsNiw1LC42OCksIHRyYW5zcGFyZW50IDQ0JSwgcmdiYSg1LDYsNSwuMjQpKSwNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMGRlZywgcmdiYSg1LDYsNSwuNzYpLCB0cmFuc3BhcmVudCAzMiUpOw0KICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogICAgICAgIH0NCiAgICAgICAgLmNhbGlicmUtbWVkaWE6OmJlZm9yZSB7DQogICAgICAgICAgICBjb250ZW50OiAn5py66IqvTUVOVCBTVFVEWSc7DQogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgICAgICBsZWZ0OiBjbGFtcCgxcmVtLCAzdncsIDJyZW0pOw0KICAgICAgICAgICAgYm90dG9tOiBjbGFtcCgxcmVtLCAzdncsIDJyZW0pOw0KICAgICAgICAgICAgei1pbmRleDogMzsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBTeW5jb3BhdGUsIHNhbnMtc2VyaWY7DQogICAgICAgICAgICBmb250LXNpemU6IC41OHJlbTsNCiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAuMjRlbTsNCiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDAsMjU1LDIwNCwuNzgpOw0KICAgICAgICB9DQogICAgICAgIC5hcmNoaXZlLXJhaWwgew0KICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsNCiAgICAgICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47DQogICAgICAgICAgICBncmlkLWF1dG8tY29sdW1uczogbWlubWF4KDI4MHB4LCAzNHZ3KTsNCiAgICAgICAgICAgIGdhcDogY2xhbXAoMXJlbSwgMnZ3LCAxLjc1cmVtKTsNCiAgICAgICAgICAgIG92ZXJmbG93LXg6IGF1dG87DQogICAgICAgICAgICBtYXgtd2lkdGg6IDEwMHZ3Ow0KICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICBtaW4td2lkdGg6IDA7DQogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgICAgICAgICAgY29udGFpbjogbGF5b3V0IHBhaW50Ow0KICAgICAgICAgICAgc2Nyb2xsLXNuYXAtdHlwZTogbm9uZTsNCiAgICAgICAgICAgIHBhZGRpbmc6IDAgY2xhbXAoMS4yNXJlbSwgNXZ3LCA0LjVyZW0pIDJyZW07DQogICAgICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7DQogICAgICAgICAgICBjdXJzb3I6IGdyYWI7DQogICAgICAgICAgICBzY3JvbGwtYmVoYXZpb3I6IGF1dG87DQogICAgICAgICAgICBtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCAjMDAwIDUlLCAjMDAwIDk1JSwgdHJhbnNwYXJlbnQpOw0KICAgICAgICAgICAgLXdlYmtpdC1tYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCAjMDAwIDUlLCAjMDAwIDk1JSwgdHJhbnNwYXJlbnQpOw0KICAgICAgICB9DQogICAgICAgIC5hcmNoaXZlLXJhaWwuaXMtbG9vcGluZyAuYXJjaGl2ZS1jYXJkW2FyaWEtaGlkZGVuPSJ0cnVlIl0geyBwb2ludGVyLWV2ZW50czogbm9uZTsgfQ0KICAgICAgICAuYXJjaGl2ZS1yYWlsOmFjdGl2ZSB7IGN1cnNvcjogZ3JhYmJpbmc7IH0NCiAgICAgICAgI2V4cGxvcmUgeyAtLWV4cGxvcmUtcHJvZ3Jlc3M6IDA7IC0tZXhwbG9yZS12aXN1YWwtcHJvZ3Jlc3M6IG1heCh2YXIoLS1leHBsb3JlLXByb2dyZXNzKSwgdmFyKC0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzLCAwKSk7IHBhZGRpbmctdG9wOiBjbGFtcCg2cmVtLCAxMHZoLCA4cmVtKSAhaW1wb3J0YW50OyBwYWRkaW5nLWJvdHRvbTogY2xhbXAoM3JlbSwgN3ZoLCA1cmVtKSAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kOiAjZmZmICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgI2V4cGxvcmU6OmJlZm9yZSB7DQogICAgICAgICAgICBjb250ZW50OiAnJzsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIGluc2V0OiAwOw0KICAgICAgICAgICAgei1pbmRleDogMDsNCiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOw0KICAgICAgICAgICAgb3BhY2l0eTogY2FsYygxIC0gdmFyKC0tZXhwbG9yZS12aXN1YWwtcHJvZ3Jlc3MpKTsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNzIlIDM1JSwgcmdiYSgwLDI1NSwyMDQsLjE0KSwgdHJhbnNwYXJlbnQgMzQlKSwgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgIzA2MDgwNyAwJSwgIzExMTYxNSAxMDAlKTsNCiAgICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgLjA4cyBsaW5lYXI7DQogICAgICAgIH0NCiAgICAgICAgI2V4cGxvcmU6OmFmdGVyIHsNCiAgICAgICAgICAgIGNvbnRlbnQ6ICcnOw0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgaW5zZXQ6IDA7DQogICAgICAgICAgICB6LWluZGV4OiAwOw0KICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogICAgICAgICAgICBvcGFjaXR5OiB2YXIoLS1leHBsb3JlLXZpc3VhbC1wcm9ncmVzcyk7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjZjhmYWY5IDAlLCAjZmZmZmZmIDM4JSwgI2ZmZmZmZiAxMDAlKTsNCiAgICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgLjA4cyBsaW5lYXI7DQogICAgICAgIH0NCiAgICAgICAgI2V4cGxvcmUgPiAqIHsgcG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxOyB9DQogICAgICAgIC56ZG94aWctd3AtcGFnZSAjZXhwbG9yZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICNmMmYwZTggY2FsYygoMSAtIHZhcigtLWV4cGxvcmUtdmlzdWFsLXByb2dyZXNzKSkgKiAxMDAlKSwgIzA3MTAwZSBjYWxjKHZhcigtLWV4cGxvcmUtdmlzdWFsLXByb2dyZXNzKSAqIDEwMCUpKTsNCiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSg3LDE2LDE0LC4wOCkgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAjZXhwbG9yZSAuZm9udC1kaXNwbGF5LCAjZXhwbG9yZSBoMiwgI2V4cGxvcmUgaDMgeyBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICNmMmYwZTggY2FsYygoMSAtIHZhcigtLWV4cGxvcmUtdmlzdWFsLXByb2dyZXNzKSkgKiAxMDAlKSwgIzA3MTAwZSBjYWxjKHZhcigtLWV4cGxvcmUtdmlzdWFsLXByb2dyZXNzKSAqIDEwMCUpKSAhaW1wb3J0YW50OyB9DQogICAgICAgICNleHBsb3JlICNhcmNoX3N1YiB7IGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSgyNTUsMjU1LDI1NSwuMzQpIGNhbGMoKDEgLSB2YXIoLS1leHBsb3JlLXZpc3VhbC1wcm9ncmVzcykpICogMTAwJSksIHJnYmEoNywxNiwxNCwuNDgpIGNhbGModmFyKC0tZXhwbG9yZS12aXN1YWwtcHJvZ3Jlc3MpICogMTAwJSkpICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgI2V4cGxvcmUgLmkxOG4tcHJvZHVjdC1tYXQgeyBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHJnYmEoMjU1LDI1NSwyNTUsLjQ4KSBjYWxjKCgxIC0gdmFyKC0tZXhwbG9yZS12aXN1YWwtcHJvZ3Jlc3MpKSAqIDEwMCUpLCByZ2JhKDcsMTYsMTQsLjU2KSBjYWxjKHZhcigtLWV4cGxvcmUtdmlzdWFsLXByb2dyZXNzKSAqIDEwMCUpKSAhaW1wb3J0YW50OyB9DQogICAgICAgICNleHBsb3JlIC5zbGlkZS1jYXJkID4gZGl2Omxhc3QtY2hpbGQgc3BhbiB7IGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSgyNTUsMjU1LDI1NSwuNDgpIGNhbGMoKDEgLSB2YXIoLS1leHBsb3JlLXZpc3VhbC1wcm9ncmVzcykpICogMTAwJSksIHJnYmEoNywxNiwxNCwuNDYpIGNhbGModmFyKC0tZXhwbG9yZS12aXN1YWwtcHJvZ3Jlc3MpICogMTAwJSkpICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgI2V4cGxvcmUgLnNsaWRlLWNhcmQ6aG92ZXIgPiBkaXY6bGFzdC1jaGlsZCBzcGFuIHsgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZmZmZmZmIGNhbGMoKDEgLSB2YXIoLS1leHBsb3JlLXZpc3VhbC1wcm9ncmVzcykpICogMTAwJSksICMwNzEwMGUgY2FsYyh2YXIoLS1leHBsb3JlLXZpc3VhbC1wcm9ncmVzcykgKiAxMDAlKSkgIWltcG9ydGFudDsgfQ0KICAgICAgICAjZXhwbG9yZSAjc2xpZGVyLXByZXYsICNleHBsb3JlICNzbGlkZXItbmV4dCB7DQogICAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoNywxNiwxNCwuMTYpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBjb2xvcjogIzA3MTAwZTsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsLjcyKTsNCiAgICAgICAgfQ0KICAgICAgICAjZXhwbG9yZSAjc2xpZGVyLXByZXY6aG92ZXIsICNleHBsb3JlICNzbGlkZXItbmV4dDpob3ZlciB7IGJhY2tncm91bmQ6ICMwNzEwMGU7IGNvbG9yOiAjZmZmOyBib3JkZXItY29sb3I6ICMwNzEwMGUgIWltcG9ydGFudDsgfQ0KICAgICAgICAjZXhwbG9yZSA+IC5vdmVyZmxvdy1oaWRkZW4gew0KICAgICAgICAgICAgb3ZlcmZsb3cteDogYXV0byAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgb3ZlcmZsb3cteTogdmlzaWJsZSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOw0KICAgICAgICAgICAgc2Nyb2xsLXNuYXAtdHlwZTogbm9uZTsNCiAgICAgICAgICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsNCiAgICAgICAgfQ0KICAgICAgICAjZXhwbG9yZSA+IC5vdmVyZmxvdy1oaWRkZW46Oi13ZWJraXQtc2Nyb2xsYmFyIHsgZGlzcGxheTogbm9uZTsgfQ0KICAgICAgICAjc2xpZGVyLWNvbnRhaW5lciB7DQogICAgICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAuYXJjaGl2ZS1yYWlsLmlzLWZyZWUtc2Nyb2xsaW5nIHsgc2Nyb2xsLXNuYXAtdHlwZTogbm9uZTsgfQ0KDQogICAgICAgIC5hcmNoaXZlLXN0YWdlIHsgcG9zaXRpb246IHJlbGF0aXZlOyBvdmVyZmxvdzogaGlkZGVuOyB3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiAxMDB2dzsgbWluLXdpZHRoOiAwOyBjb250YWluOiBsYXlvdXQgcGFpbnQ7IH0NCiAgICAgICAgLmFyY2hpdmUtcHJvZ3Jlc3Mgew0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgbGVmdDogNTAlOw0KICAgICAgICAgICAgdG9wOiAwOw0KICAgICAgICAgICAgd2lkdGg6IG1pbig4NHZ3LCAxMTgwcHgpOw0KICAgICAgICAgICAgaGVpZ2h0OiAycHg7DQogICAgICAgICAgICB6LWluZGV4OiA0Ow0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg3LDE2LDE0LC4xKTsNCiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7DQogICAgICAgIH0NCiAgICAgICAgLmFyY2hpdmUtcHJvZ3Jlc3MtZmlsbCB7DQogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCk7DQogICAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzM4NjZiOCwgIzA3MTAwZSk7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBub25lOw0KICAgICAgICB9DQogICAgICAgIC5hcmNoaXZlLXN0YWdlIC5hcmNoaXZlLWNvbnRyb2wgew0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgdG9wOiA1OCU7DQogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7DQogICAgICAgICAgICB6LWluZGV4OiAzOw0KICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxOHB4IDM2cHggcmdiYSg3LDE2LDE0LC4xNik7DQogICAgICAgIH0NCiAgICAgICAgLmFyY2hpdmUtc3RhZ2UgLmFyY2hpdmUtY29udHJvbFtkYXRhLWRpcj0icHJldiJdIHsgbGVmdDogY2xhbXAoLjY1cmVtLCAxLjZ2dywgMS40cmVtKTsgfQ0KICAgICAgICAuYXJjaGl2ZS1zdGFnZSAuYXJjaGl2ZS1jb250cm9sW2RhdGEtZGlyPSJuZXh0Il0geyByaWdodDogY2xhbXAoLjY1cmVtLCAxLjZ2dywgMS40cmVtKTsgfQ0KICAgICAgICAuYXJjaGl2ZS1jb250cm9sIHsNCiAgICAgICAgICAgIHdpZHRoOiA1MnB4Ow0KICAgICAgICAgICAgaGVpZ2h0OiA1MnB4Ow0KICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWdyaWQ7DQogICAgICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg3LDE2LDE0LC4xNik7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LC45Mik7DQogICAgICAgICAgICBjb2xvcjogIzA3MTAwZTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4Ow0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjY1cmVtOw0KICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDE7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjIycyBlYXNlLCBiYWNrZ3JvdW5kIC4yMnMgZWFzZSwgYm9yZGVyLWNvbG9yIC4yMnMgZWFzZTsNCiAgICAgICAgfQ0KICAgICAgICAuYXJjaGl2ZS1jb250cm9sOmhvdmVyIHsgYmFja2dyb3VuZDogI2ZmZjsgYm9yZGVyLWNvbG9yOiByZ2JhKDU2LDEwMiwxODQsLjM0KTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHNjYWxlKDEuMDQpOyB9DQogICAgICAgIC5hcmNoaXZlLWNvbnRyb2w6YWN0aXZlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHNjYWxlKC45OCk7IH0NCiAgICAgICAgLmFyY2hpdmUtY29udHJvbDpmb2N1cy12aXNpYmxlIHsgb3V0bGluZTogMnB4IHNvbGlkICMzODY2Yjg7IG91dGxpbmUtb2Zmc2V0OiAzcHg7IH0NCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7DQogICAgICAgICAgICAuYXJjaGl2ZS1zdGFnZSAuYXJjaGl2ZS1jb250cm9sIHsgdG9wOiA2NCU7IH0NCiAgICAgICAgICAgIC5hcmNoaXZlLWNvbnRyb2wgeyB3aWR0aDogNDZweDsgaGVpZ2h0OiA0NnB4OyBmb250LXNpemU6IDEuMzVyZW07IH0NCiAgICAgICAgfQ0KICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNjQwcHgpIHsNCiAgICAgICAgICAgIC5hcmNoaXZlLXN0YWdlIC5hcmNoaXZlLWNvbnRyb2wgeyB0b3A6IDY4JTsgfQ0KICAgICAgICAgICAgLmFyY2hpdmUtY29udHJvbCB7IHdpZHRoOiA0MHB4OyBoZWlnaHQ6IDQwcHg7IGZvbnQtc2l6ZTogMS4xMnJlbTsgfQ0KICAgICAgICAgICAgLmFyY2hpdmUtc3RhZ2UgLmFyY2hpdmUtY29udHJvbFtkYXRhLWRpcj0icHJldiJdIHsgbGVmdDogLjQ1cmVtOyB9DQogICAgICAgICAgICAuYXJjaGl2ZS1zdGFnZSAuYXJjaGl2ZS1jb250cm9sW2RhdGEtZGlyPSJuZXh0Il0geyByaWdodDogLjQ1cmVtOyB9DQogICAgICAgIH0NCiAgICAgICAgLmFyY2hpdmUtY2FyZCB7DQogICAgICAgICAgICBzY3JvbGwtc25hcC1hbGlnbjogbm9uZTsNCiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDY4dmg7DQogICAgICAgICAgICBkaXNwbGF5OiBncmlkOw0KICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgYXV0bzsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNywxNiwxNCwuMSk7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOw0KICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMjJweCA1NHB4IHJnYmEoNywxNiwxNCwuMDYpOw0KICAgICAgICB9DQogICAgICAgIC5hcmNoaXZlLWNhcmQgZmlndXJlIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7DQogICAgICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgbWluLWhlaWdodDogNDMwcHg7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOw0KICAgICAgICB9DQogICAgICAgIC5hcmNoaXZlLWNhcmQgaW1nIHsgd2lkdGg6IDg4JTsgaGVpZ2h0OiA3OCU7IG9iamVjdC1maXQ6IGNvbnRhaW47IGZpbHRlcjogZHJvcC1zaGFkb3coMCAyMnB4IDI4cHggcmdiYSgwLDAsMCwuMTgpKTsgfQ0KICAgICAgICAuYXJjaGl2ZS1tZXRhIHsgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoNywxNiwxNCwuMSk7IHBhZGRpbmc6IDEuMzVyZW07IH0NCiAgICAgICAgLmFyY2hpdmUtZGV0YWlsLWxpbmsgew0KICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgbWluLWhlaWdodDogMzhweDsNCiAgICAgICAgICAgIG1hcmdpbi10b3A6IDFyZW07DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSg1NiwxMDIsMTg0LC4zMik7DQogICAgICAgICAgICBjb2xvcjogIzM4NjZiOCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgZm9udC1mYW1pbHk6IFN5bmNvcGF0ZSwgc3lzdGVtLXVpLCBzYW5zLXNlcmlmOw0KICAgICAgICAgICAgZm9udC1zaXplOiAuNjJyZW07DQogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjE4ZW07DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgLjI1cyBlYXNlLCBjb2xvciAuMjVzIGVhc2U7DQogICAgICAgIH0NCiAgICAgICAgLmFyY2hpdmUtZGV0YWlsLWxpbms6aG92ZXIgeyBib3JkZXItY29sb3I6ICMzODY2Yjg7IGNvbG9yOiAjMDcxMDBlICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgI2F0ZWxpZXItcHJvY2VzcyB7DQogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogY2xhbXAoOHJlbSwgMTZ2aCwgMTRyZW0pICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI2F0ZWxpZXItcHJvY2Vzczo6YWZ0ZXIgew0KICAgICAgICAgICAgY29udGVudDogJyc7DQogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgICAgICBsZWZ0OiAwOw0KICAgICAgICAgICAgcmlnaHQ6IDA7DQogICAgICAgICAgICBib3R0b206IC0xcHg7DQogICAgICAgICAgICBoZWlnaHQ6IGNsYW1wKDE4MHB4LCAzMnZoLCAzNjBweCk7DQogICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgICAgICAgICAgIHotaW5kZXg6IDI7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDYsOCw3LDApLCByZ2JhKDcwLDc4LDc0LC4xOCkgMzQlLCByZ2JhKDI0OCwyNTAsMjQ5LC45MikgODIlLCAjZjhmYWY5IDEwMCUpOw0KICAgICAgICB9DQogICAgICAgICNleHBsb3JlIHsNCiAgICAgICAgICAgIG1hcmdpbi10b3A6IC0xcHg7DQogICAgICAgIH0NCiAgICAgICAgI3NsaWRlci1jb250YWluZXIgLnNsaWRlLWNhcmQgPiBkaXY6Zmlyc3QtY2hpbGQgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZiAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgICNzbGlkZXItY29udGFpbmVyIC5zbGlkZS1jYXJkIGltZyB7CiAgICAgICAgICAgIG9iamVjdC1maXQ6IGNvbnRhaW4gIWltcG9ydGFudDsKICAgICAgICAgICAgcGFkZGluZzogY2xhbXAoLjhyZW0sIDJ2dywgMS40cmVtKTsKICAgICAgICAgICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDE4cHggMjZweCByZ2JhKDAsMCwwLC4xNikpOwogICAgICAgIH0KICAgICAgICAjZXhwbG9yZSAuZXhwbG9yZS1hY3Rpb25zIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgICAgICBnYXA6IC45cmVtOwogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgfQogICAgICAgICNleHBsb3JlIC5leHBsb3JlLXZlcmlmeS1jYXJkIHsKICAgICAgICAgICAgd2lkdGg6IG1pbigxMDAlLCAzNjBweCk7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNywxNiwxNCwuMTIpOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxLjFyZW07CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsLjc4KTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxOHB4IDQ2cHggcmdiYSg3LDE2LDE0LC4wOCk7CiAgICAgICAgICAgIHBhZGRpbmc6IC45NXJlbSAxcmVtOwogICAgICAgICAgICBjb2xvcjogIzA3MTAwZTsKICAgICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDE0cHgpOwogICAgICAgIH0KICAgICAgICAjZXhwbG9yZSAuZXhwbG9yZS12ZXJpZnktY2FyZCBwIHsKICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgICBjb2xvcjogcmdiYSg3LDE2LDE0LC42Mik7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjc4cmVtOwogICAgICAgICAgICBsaW5lLWhlaWdodDogMS42NTsKICAgICAgICB9CiAgICAgICAgI2V4cGxvcmUgLmV4cGxvcmUtdmVyaWZ5LXRvcCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgICAgZ2FwOiAuNzVyZW07CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IC40NXJlbTsKICAgICAgICB9CiAgICAgICAgI2V4cGxvcmUgLmV4cGxvcmUtdmVyaWZ5LXRvcCBzdHJvbmcgewogICAgICAgICAgICBjb2xvcjogIzA3MTAwZTsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdCYXJsb3cnLCAnTWljcm9zb2Z0IFlhSGVpJywgJ1BpbmdGYW5nIFNDJywgc2Fucy1zZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiAuODJyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAuMDhlbTsKICAgICAgICB9CiAgICAgICAgI2V4cGxvcmUgLmV4cGxvcmUtdmVyaWZ5LXRvcCBzcGFuIHsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwyNTUsMjA0LC4xNCk7CiAgICAgICAgICAgIGNvbG9yOiAjMGQ2YjU2OwogICAgICAgICAgICBmb250LXNpemU6IC42OHJlbTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC4wOGVtOwogICAgICAgICAgICBwYWRkaW5nOiAuM3JlbSAuNTVyZW07CiAgICAgICAgfQogICAgICAgICNleHBsb3JlIC5leHBsb3JlLXZlcmlmeS1jYXJkIGEgewogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDIuMzVyZW07CiAgICAgICAgICAgIG1hcmdpbi10b3A6IC44NXJlbTsKICAgICAgICAgICAgcGFkZGluZzogMCAuODVyZW07CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDcxMDBlOwogICAgICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdCYXJsb3cnLCAnTWljcm9zb2Z0IFlhSGVpJywgJ1BpbmdGYW5nIFNDJywgc2Fucy1zZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiAuNzZyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAuMDVlbTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4yMnMgZWFzZSwgYmFja2dyb3VuZCAuMjJzIGVhc2U7CiAgICAgICAgfQogICAgICAgICNleHBsb3JlIC5leHBsb3JlLXZlcmlmeS1jYXJkIGE6aG92ZXIgewogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwZDZiNTY7CiAgICAgICAgfQogICAgICAgICN2YXVsdCAjc25faW5wdXQgewogICAgICAgICAgICBmb250LWZhbWlseTogJ0JhcmxvdycsICdNaWNyb3NvZnQgWWFIZWknLCAnUGluZ0ZhbmcgU0MnLCBzYW5zLXNlcmlmICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbCAhaW1wb3J0YW50OwogICAgICAgICAgICBmb250LXdlaWdodDogODAwOwogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjEyZW0gIWltcG9ydGFudDsKICAgICAgICB9CiAgICAgICAgLmFzc2V0LWNvbGxhZ2Ugew0KICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsNCiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDEyLCBtaW5tYXgoMCwgMWZyKSk7DQogICAgICAgICAgICBnYXA6IGNsYW1wKC43NXJlbSwgMS41dncsIDEuMjVyZW0pOw0KICAgICAgICB9DQogICAgICAgIC5hc3NldC10aWxlIHsNCiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDI2MHB4Ow0KICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEpOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogIzA4MGIwYTsNCiAgICAgICAgfQ0KICAgICAgICAuYXNzZXQtdGlsZS5sYXJnZSB7IGdyaWQtY29sdW1uOiBzcGFuIDc7IG1pbi1oZWlnaHQ6IDU2MHB4OyB9DQogICAgICAgIC5hc3NldC10aWxlLm1lZGl1bSB7IGdyaWQtY29sdW1uOiBzcGFuIDU7IG1pbi1oZWlnaHQ6IDM2MHB4OyB9DQogICAgICAgIC5hc3NldC10aWxlLnNtYWxsIHsgZ3JpZC1jb2x1bW46IHNwYW4gMzsgfQ0KICAgICAgICAuYXNzZXQtdGlsZSBpbWcsDQogICAgICAgIC5hc3NldC10aWxlIHZpZGVvIHsNCiAgICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7DQogICAgICAgICAgICBmaWx0ZXI6IGdyYXlzY2FsZSgxKSBjb250cmFzdCgxLjMpIGJyaWdodG5lc3MoLjUpOw0KICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA0KTsNCiAgICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxcyBjdWJpYy1iZXppZXIoLjIyLDEsLjM2LDEpLCBmaWx0ZXIgMXMgY3ViaWMtYmV6aWVyKC4yMiwxLC4zNiwxKTsNCiAgICAgICAgfQ0KICAgICAgICAuY3JhZnQtbWVkaWEgaW1nIHsgZmlsdGVyOiBncmF5c2NhbGUoMSkgYnJpZ2h0bmVzcyguNDIpIGNvbnRyYXN0KDEuMTYpIHNhdHVyYXRlKC44Mik7IH0NCiAgICAgICAgLmNyYWZ0LW1lZGlhOmhvdmVyIGltZyB7IGZpbHRlcjogZ3JheXNjYWxlKDApIGJyaWdodG5lc3MoMS4wMikgY29udHJhc3QoMS4wNCkgc2F0dXJhdGUoMS4wNik7IH0NCiAgICAgICAgLmFzc2V0LXRpbGUucHJvZHVjdCBpbWcgeyBvYmplY3QtZml0OiBjb250YWluOyBwYWRkaW5nOiBjbGFtcCgxLjVyZW0sIDR2dywgM3JlbSk7IGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDM4JSwgcmdiYSgwLDI1NSwyMDQsLjEyKSwgdHJhbnNwYXJlbnQgMzQlKSwgIzA5MGMwYjsgZmlsdGVyOiBncmF5c2NhbGUoLjUpIGNvbnRyYXN0KDEuMSkgYnJpZ2h0bmVzcyguNjUpOyB9DQogICAgICAgIC5hc3NldC10aWxlOmhvdmVyIGltZywNCiAgICAgICAgLmFzc2V0LXRpbGU6aG92ZXIgdmlkZW8geyB0cmFuc2Zvcm06IHNjYWxlKDEuMDgpOyBmaWx0ZXI6IGdyYXlzY2FsZSgwKSBjb250cmFzdCgxLjA1KSBicmlnaHRuZXNzKDEpOyB9DQogICAgICAgIC5hc3NldC10aWxlOjphZnRlciB7DQogICAgICAgICAgICBjb250ZW50OiAiIjsNCiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgIGluc2V0OiAwOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwuNSk7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC44cyBjdWJpYy1iZXppZXIoLjIyLDEsLjM2LDEpOw0KICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogICAgICAgICAgICB6LWluZGV4OiAyOw0KICAgICAgICB9DQogICAgICAgIC5hc3NldC10aWxlOmhvdmVyOjphZnRlciB7IG9wYWNpdHk6IDA7IH0NCiAgICAgICAgLmFzc2V0LWNhcHRpb24gew0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgaW5zZXQ6IGF1dG8gMCAwOw0KICAgICAgICAgICAgcGFkZGluZzogMS4xNXJlbTsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHRyYW5zcGFyZW50LCByZ2JhKDAsMCwwLC43OCkpOw0KICAgICAgICB9DQogICAgICAgIC5sYWRpZXMtcnVud2F5IHsNCiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwMHN2aDsNCiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7DQogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAuOWZyKSBtaW5tYXgoMzAwcHgsIDEuMWZyKTsNCiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAgICBnYXA6IGNsYW1wKDJyZW0sIDZ2dywgN3JlbSk7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCiAgICAgICAgfQ0KICAgICAgICAjbGFkaWVzLXJ1bndheSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjZmZmZmZmIDAlLCAjZmZmZmZmIDcyJSwgI2Y0ZjBmZiAxMDAlKTsNCiAgICAgICAgICAgIGNvbG9yOiAjMDcxMDBlOw0KICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDcsMTYsMTQsLjA4KSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgcGFkZGluZy10b3A6IGNsYW1wKDZyZW0sIDEwdmgsIDhyZW0pICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI2xhZGllcy1ydW53YXkgLmZvbnQtZGlzcGxheSB7IGNvbG9yOiAjMDcxMDBlOyB9DQogICAgICAgICNsYWRpZXMtcnVud2F5IHNwYW4uZm9udC1kaXNwbGF5LA0KICAgICAgICAjbGFkaWVzLXJ1bndheSBhIHsgY29sb3I6ICMzODY2YjggIWltcG9ydGFudDsgfQ0KICAgICAgICAjbGFkaWVzLXJ1bndheSBwIHsgY29sb3I6IHJnYmEoNywxNiwxNCwuNjIpICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgLmxhZGllcy1zdGFjayB7DQogICAgICAgICAgICBkaXNwbGF5OiBncmlkOw0KICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMS4wOGZyKSBtaW5tYXgoMjIwcHgsIC45MmZyKTsNCiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyIDFmcjsNCiAgICAgICAgICAgIGdhcDogY2xhbXAoLjhyZW0sIDEuNnZ3LCAxLjJyZW0pOw0KICAgICAgICAgICAgbWluLWhlaWdodDogY2xhbXAoNTYwcHgsIDc4dmgsIDgyMHB4KTsNCiAgICAgICAgfQ0KICAgICAgICAubGFkaWVzLXN0YWNrIGltZyB7DQogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgICAgIGhlaWdodDogMTAwJTsNCiAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTsNCiAgICAgICAgICAgIG9iamVjdC1maXQ6IGNvbnRhaW47DQogICAgICAgICAgICBwYWRkaW5nOiBjbGFtcCgxcmVtLCAzdncsIDJyZW0pOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNywxNiwxNCwuMTIpOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICAgICAgICAgICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDE4cHggMzRweCByZ2JhKDcsMTYsMTQsLjEpKSBicmlnaHRuZXNzKDEuMDEpIGNvbnRyYXN0KDEuMDIpOw0KICAgICAgICB9DQogICAgICAgIC5sYWRpZXMtc3RhY2sgaW1nOm50aC1jaGlsZCgxKSB7IGdyaWQtcm93OiBzcGFuIDI7IG9iamVjdC1maXQ6IGNvbnRhaW47IHBhZGRpbmc6IGNsYW1wKDFyZW0sIDN2dywgMnJlbSk7IH0NCiAgICAgICAgLmxhZGllcy1zdGFjayBpbWc6bnRoLWNoaWxkKDIpLA0KICAgICAgICAubGFkaWVzLXN0YWNrIGltZzpudGgtY2hpbGQoMykgeyBvYmplY3QtZml0OiBjb250YWluOyB9DQogICAgICAgIC5tb3Rpb24tbGF5ZXIgeyB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOyB9DQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkgew0KICAgICAgICAgICAgLmNhbGlicmUtcGFuZWwgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgbWluLWhlaWdodDogYXV0bzsgfQ0KICAgICAgICAgICAgLmNhbGlicmUtcGFuZWw6OmFmdGVyIHsgZm9udC1zaXplOiAzLjRyZW07IHRvcDogMi4yNXJlbTsgcmlnaHQ6IDFyZW07IG9wYWNpdHk6IC44OyB9DQogICAgICAgICAgICAuY2FsaWJyZS1jb3B5IHsgcG9zaXRpb246IHJlbGF0aXZlOyB0b3A6IGF1dG87IHBhZGRpbmc6IDVyZW0gMCAxcmVtOyB9DQogICAgICAgICAgICAuY2FsaWJyZS1tZWRpYSB7DQogICAgICAgICAgICAgICAgbWluLWhlaWdodDogNTh2aDsNCiAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogMDsNCiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICAgICAgICAgICAgICAgIGNsaXAtcGF0aDogcG9seWdvbigwIDAsIDEwMCUgMCwgMTAwJSBjYWxjKDEwMCUgLSAyNHB4KSwgY2FsYygxMDAlIC0gMjRweCkgMTAwJSwgMCAxMDAlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC5hcmNoaXZlLXJhaWwgeyBncmlkLWF1dG8tY29sdW1uczogbWlubWF4KDI4MHB4LCA5MnZ3KTsgZ2FwOiAuNjVyZW07IHBhZGRpbmctbGVmdDogMDsgcGFkZGluZy1yaWdodDogMDsgfQ0KICAgICAgICAgICAgLmFyY2hpdmUtY2FyZCB7IG1pbi1oZWlnaHQ6IDU0MHB4OyB9DQogICAgICAgICAgICAubGFkaWVzLXJ1bndheSB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyBwYWRkaW5nLXRvcDogNXJlbTsgfQ0KICAgICAgICAgICAgLmxhZGllcy1zdGFjayB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG87IG1pbi1oZWlnaHQ6IGF1dG87IH0NCiAgICAgICAgICAgIC5sYWRpZXMtc3RhY2sgaW1nIHsgbWluLWhlaWdodDogMzAwcHg7IH0NCiAgICAgICAgICAgIC5sYWRpZXMtc3RhY2sgaW1nOm50aC1jaGlsZCgxKSB7IGdyaWQtcm93OiBhdXRvOyBtaW4taGVpZ2h0OiA0MjBweDsgfQ0KICAgICAgICAgICAgLmFzc2V0LXRpbGUubGFyZ2UsLmFzc2V0LXRpbGUubWVkaXVtLC5hc3NldC10aWxlLnNtYWxsIHsgZ3JpZC1jb2x1bW46IDEgLyAtMTsgbWluLWhlaWdodDogMzYwcHg7IH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnpkb3hpZy13cC1wYWdlICNuYXZiYXIgeyBtaXgtYmxlbmQtbW9kZTogbm9ybWFsOyBoZWlnaHQ6IDcycHg7IHBhZGRpbmctdG9wOiAxcmVtOyBwYWRkaW5nLWJvdHRvbTogMXJlbTsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg5LCAxMSwgMTAsIC44OCksIHJnYmEoOSwgMTEsIDEwLCAuNjQpKTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjQyLCAyNDAsIDIzMiwgLjA4KTsgfQ0KICAgICAgICAuemRveGlnLXdwLXBhZ2UgI3RvcC1uYXYgeyBsZXR0ZXItc3BhY2luZzogLjA4ZW07IH0NCiAgICAgICAgI25hdmJhciwgLnpkb3hpZy13cC1wYWdlICNuYXZiYXIgeyBsZWZ0OiAwOyByaWdodDogMDsgbWF4LXdpZHRoOiAxMDB2dzsgd2lkdGg6IDEwMCU7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IG92ZXJmbG93OiBoaWRkZW47IH0NCiAgICAgICAgI2JyYW5kLWhvbWUsIC56ZG94aWctd3AtcGFnZSAjYnJhbmQtaG9tZSB7IGNvbG9yOiAjZjJmMGU4ICFpbXBvcnRhbnQ7IHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50OyB9DQogICAgICAgICNicmFuZC1ob21lOmhvdmVyLCAuemRveGlnLXdwLXBhZ2UgI2JyYW5kLWhvbWU6aG92ZXIgeyBjb2xvcjogIzAwZmZjYyAhaW1wb3J0YW50OyB9DQogICAgICAgICNicmFuZC1ob21lLCAjdG9wLW5hdiwgI25hdmJhciA+IC5uYXYtYWN0aW9ucyB7IG1pbi13aWR0aDogMDsgfQ0KICAgICAgICAjdG9wLW5hdiB7IG92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IH0NCiAgICAgICAgI3RvcC1uYXYgYSB7IGZsZXg6IDAgMSBhdXRvOyBtaW4td2lkdGg6IDA7IH0NCiAgICAgICAgI25hdmJhciA+IC5uYXYtYWN0aW9ucyB7IGp1c3RpZnktc2VsZjogZW5kOyBmbGV4LXdyYXA6IG5vd3JhcDsgfQ0KICAgICAgICAjbWVudS1idG4geyBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50OyBhbGlnbi1pdGVtczogY2VudGVyOyB9DQogICAgICAgICNtZW51LWJ0biA+IGRpdjpsYXN0LWNoaWxkIHsgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogZmxleC1lbmQ7IGdhcDogNHB4OyB3aWR0aDogMzRweDsgfQ0KICAgICAgICAjbWVudS1idG4gPiBkaXY6bGFzdC1jaGlsZCA+IGRpdiB7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDJweDsgYmFja2dyb3VuZDogI2YyZjBlOCAhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOiA5OTlweDsgfQ0KICAgICAgICAjbWVudS1idG4gPiBkaXY6bGFzdC1jaGlsZCA+IGRpdjpudGgtY2hpbGQoMSksDQogICAgICAgICNtZW51LWJ0biA+IGRpdjpsYXN0LWNoaWxkID4gZGl2Om50aC1jaGlsZCgzKSB7IHdpZHRoOiAzMnB4OyB9DQogICAgICAgICNtZW51LWJ0biA+IGRpdjpsYXN0LWNoaWxkID4gZGl2Om50aC1jaGlsZCgyKSB7IHdpZHRoOiAyMHB4OyB9DQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMTgwcHgpIHsgI3RvcC1uYXYgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0gfQ0KICAgICAgICAuemRveGlnLXdwLXBhZ2UgI3RvcC1uYXYgYSwgLnpkb3hpZy13cC1wYWdlICNtZW51X2J0bl90ZXh0LCAuemRveGlnLXdwLXBhZ2UgI2xhbmctc3dpdGNoIHsgY29sb3I6IHJnYmEoMjQyLCAyNDAsIDIzMiwgLjY0KSAhaW1wb3J0YW50OyB9DQogICAgICAgIC56ZG94aWctd3AtcGFnZSAjdG9wLW5hdiBhOmhvdmVyLCAuemRveGlnLXdwLXBhZ2UgI21lbnUtYnRuOmhvdmVyICNtZW51X2J0bl90ZXh0LCAuemRveGlnLXdwLXBhZ2UgI2xhbmctc3dpdGNoIHNwYW46aG92ZXIgeyBjb2xvcjogdmFyKC0tbmV1dHJhbC10ZXh0KSAhaW1wb3J0YW50OyB9DQogICAgICAgIC56ZG94aWctd3AtcGFnZSAuaGVyby10aXRsZS1maXQgeyBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7IGNvbG9yOiB2YXIoLS1uZXV0cmFsLXRleHQpICFpbXBvcnRhbnQ7IC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB2YXIoLS1uZXV0cmFsLXRleHQpOyB0ZXh0LXNoYWRvdzogMCAxOHB4IDUycHggcmdiYSgwLDAsMCwuNik7IGxldHRlci1zcGFjaW5nOiAuMDFlbSAhaW1wb3J0YW50OyB9DQoNCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7DQogICAgICAgICAgICAjbmF2YmFyLA0KICAgICAgICAgICAgLnpkb3hpZy13cC1wYWdlICNuYXZiYXIgew0KICAgICAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIGF1dG8pIDFmciBhdXRvICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgZ2FwOiAuNXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDFyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY4cHg7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNicmFuZC1ob21lIHsNCiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDguMnJlbTsNCiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAuMThlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNuYXZiYXIgPiAubmF2LWFjdGlvbnMgew0KICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMDsNCiAgICAgICAgICAgICAgICBnYXA6IC42NXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjbGFuZy1zd2l0Y2ggew0KICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLm5hdi12YXVsdC1jdGEgew0KICAgICAgICAgICAgICAgIHdpZHRoOiAzNnB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgaGVpZ2h0OiAzNnB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgZmxleDogMCAwIDM2cHggIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLm5hdi12YXVsdC1sYWJlbCB7DQogICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjbWVudS1idG4gew0KICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBmbGV4OiAwIDAgYXV0byAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBib2R5LmludHJvLWxvYWRpbmcgPiBoZWFkZXIsIGJvZHkuaW50cm8tbG9hZGluZyA+IHNlY3Rpb24sIGJvZHkuaW50cm8tbG9hZGluZyA+IGZvb3RlciwgYm9keS5pbnRyby1sb2FkaW5nID4gLmJhY2stdG8tdG9wIHsgb3BhY2l0eTogMCAhaW1wb3J0YW50OyB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDsgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDsgfQ0KICAgICAgICBib2R5Om5vdCguaW50cm8tbG9hZGluZykgPiBoZWFkZXIsIGJvZHk6bm90KC5pbnRyby1sb2FkaW5nKSA+IHNlY3Rpb24sIGJvZHk6bm90KC5pbnRyby1sb2FkaW5nKSA+IGZvb3RlciB7IHRyYW5zaXRpb246IG9wYWNpdHkgLjcycyBlYXNlLCB2aXNpYmlsaXR5IC43MnMgZWFzZTsgfQ0KICAgICAgICAuYmFjay10by10b3AgeyBwb3NpdGlvbjogZml4ZWQ7IHJpZ2h0OiBjbGFtcCgxcmVtLCAyLjR2dywgMnJlbSk7IGJvdHRvbTogY2xhbXAoMXJlbSwgMi40dncsIDJyZW0pOyB6LWluZGV4OiA4MDsgd2lkdGg6IDQ4cHg7IGhlaWdodDogNDhweDsgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNDIsMjQwLDIzMiwuMTgpOyBib3JkZXItcmFkaXVzOiA5OTlweDsgYmFja2dyb3VuZDogcmdiYSg5LDExLDEwLC43NCk7IGNvbG9yOiB2YXIoLS1uZXV0cmFsLXRleHQpOyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IG9wYWNpdHk6IDA7IHZpc2liaWxpdHk6IGhpZGRlbjsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpOyB0cmFuc2l0aW9uOiBhbGwgLjI0cyBlYXNlOyBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTZweCk7IHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOyB9DQogICAgICAgIC5iYWNrLXRvLXRvcC5pcy12aXNpYmxlIHsgb3BhY2l0eTogMTsgdmlzaWJpbGl0eTogdmlzaWJsZTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9DQogICAgICAgIC5iYWNrLXRvLXRvcDpob3ZlciB7IGJvcmRlci1jb2xvcjogIzAwZmZjYzsgY29sb3I6ICMwMGZmY2M7IH0NCg0KICAgICAgICAjc3RvcnksDQogICAgICAgICNzZXJ2aWNlLA0KICAgICAgICAjb3duZXJzaGlwLA0KICAgICAgICAjbWF0ZXJpYWxzLA0KICAgICAgICAjcmVmZXJlbmNlLWFyY2hpdmUsDQogICAgICAgICNsYWRpZXMtcnVud2F5LA0KICAgICAgICAjYmVzcG9rZSwNCiAgICAgICAgI2hlcml0YWdlLA0KICAgICAgICAjam91cm5hbCwNCiAgICAgICAgI2NhcmUtZmFxLA0KICAgICAgICAjdmF1bHQsDQogICAgICAgICNjb250YWN0IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6DQogICAgICAgICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA3OCUgMTYlLCByZ2JhKDU2LDEwMiwxODQsLjA3NSksIHRyYW5zcGFyZW50IDM0JSksDQogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI2ZmZmZmZiAwJSwgI2Y4ZmFmOSA1NCUsICNmZmZmZmYgMTAwJSkgIWltcG9ydGFudDsNCiAgICAgICAgICAgIGNvbG9yOiAjMDcxMDBlICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoNywxNiwxNCwuMSkgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAjc3RvcnkgaDIsICNzdG9yeSBoMywNCiAgICAgICAgI3NlcnZpY2UgaDIsICNzZXJ2aWNlIGgzLA0KICAgICAgICAjb3duZXJzaGlwIGgyLCAjb3duZXJzaGlwIGgzLA0KICAgICAgICAjbWF0ZXJpYWxzIGgyLCAjbWF0ZXJpYWxzIGgzLA0KICAgICAgICAjcmVmZXJlbmNlLWFyY2hpdmUgaDIsICNyZWZlcmVuY2UtYXJjaGl2ZSBoMywNCiAgICAgICAgI2xhZGllcy1ydW53YXkgaDIsICNsYWRpZXMtcnVud2F5IGgzLA0KICAgICAgICAjYmVzcG9rZSBoMiwgI2Jlc3Bva2UgaDMsDQogICAgICAgICNoZXJpdGFnZSBoMiwgI2hlcml0YWdlIGgzLA0KICAgICAgICAjam91cm5hbCBoMiwgI2pvdXJuYWwgaDMsDQogICAgICAgICNjYXJlLWZhcSBoMiwgI2NhcmUtZmFxIGgzLA0KICAgICAgICAjdmF1bHQgaDIsICN2YXVsdCBoMywNCiAgICAgICAgI2NvbnRhY3QgaDIsICNjb250YWN0IGgzIHsNCiAgICAgICAgICAgIGNvbG9yOiAjMDcxMDBlICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI3N0b3J5IFtjbGFzcyo9InRleHQtd2hpdGUvIl0sDQogICAgICAgICNzZXJ2aWNlIFtjbGFzcyo9InRleHQtd2hpdGUvIl0sDQogICAgICAgICNvd25lcnNoaXAgW2NsYXNzKj0idGV4dC13aGl0ZS8iXSwNCiAgICAgICAgI21hdGVyaWFscyBbY2xhc3MqPSJ0ZXh0LXdoaXRlLyJdLA0KICAgICAgICAjcmVmZXJlbmNlLWFyY2hpdmUgW2NsYXNzKj0idGV4dC13aGl0ZS8iXSwNCiAgICAgICAgI2xhZGllcy1ydW53YXkgW2NsYXNzKj0idGV4dC13aGl0ZS8iXSwNCiAgICAgICAgI2Jlc3Bva2UgW2NsYXNzKj0idGV4dC13aGl0ZS8iXSwNCiAgICAgICAgI2hlcml0YWdlIFtjbGFzcyo9InRleHQtd2hpdGUvIl0sDQogICAgICAgICNqb3VybmFsIFtjbGFzcyo9InRleHQtd2hpdGUvIl0sDQogICAgICAgICNjYXJlLWZhcSBbY2xhc3MqPSJ0ZXh0LXdoaXRlLyJdLA0KICAgICAgICAjdmF1bHQgW2NsYXNzKj0idGV4dC13aGl0ZS8iXSwNCiAgICAgICAgI2NvbnRhY3QgW2NsYXNzKj0idGV4dC13aGl0ZS8iXSB7DQogICAgICAgICAgICBjb2xvcjogcmdiYSg3LDE2LDE0LC42MikgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAjc3RvcnkgW2NsYXNzKj0iYm9yZGVyLXdoaXRlLyJdLA0KICAgICAgICAjc2VydmljZSBbY2xhc3MqPSJib3JkZXItd2hpdGUvIl0sDQogICAgICAgICNvd25lcnNoaXAgW2NsYXNzKj0iYm9yZGVyLXdoaXRlLyJdLA0KICAgICAgICAjbWF0ZXJpYWxzIFtjbGFzcyo9ImJvcmRlci13aGl0ZS8iXSwNCiAgICAgICAgI3JlZmVyZW5jZS1hcmNoaXZlIFtjbGFzcyo9ImJvcmRlci13aGl0ZS8iXSwNCiAgICAgICAgI2xhZGllcy1ydW53YXkgW2NsYXNzKj0iYm9yZGVyLXdoaXRlLyJdLA0KICAgICAgICAjYmVzcG9rZSBbY2xhc3MqPSJib3JkZXItd2hpdGUvIl0sDQogICAgICAgICNoZXJpdGFnZSBbY2xhc3MqPSJib3JkZXItd2hpdGUvIl0sDQogICAgICAgICNqb3VybmFsIFtjbGFzcyo9ImJvcmRlci13aGl0ZS8iXSwNCiAgICAgICAgI2NhcmUtZmFxIFtjbGFzcyo9ImJvcmRlci13aGl0ZS8iXSwNCiAgICAgICAgI3ZhdWx0IFtjbGFzcyo9ImJvcmRlci13aGl0ZS8iXSwNCiAgICAgICAgI2NvbnRhY3QgW2NsYXNzKj0iYm9yZGVyLXdoaXRlLyJdIHsNCiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSg3LDE2LDE0LC4xMikgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAjc3RvcnkgW2NsYXNzKj0iYmctd2hpdGUvIl0sDQogICAgICAgICNzZXJ2aWNlIFtjbGFzcyo9ImJnLXdoaXRlLyJdLA0KICAgICAgICAjb3duZXJzaGlwIFtjbGFzcyo9ImJnLXdoaXRlLyJdLA0KICAgICAgICAjbWF0ZXJpYWxzIFtjbGFzcyo9ImJnLXdoaXRlLyJdLA0KICAgICAgICAjcmVmZXJlbmNlLWFyY2hpdmUgW2NsYXNzKj0iYmctd2hpdGUvIl0sDQogICAgICAgICNsYWRpZXMtcnVud2F5IFtjbGFzcyo9ImJnLXdoaXRlLyJdLA0KICAgICAgICAjYmVzcG9rZSBbY2xhc3MqPSJiZy13aGl0ZS8iXSwNCiAgICAgICAgI2hlcml0YWdlIFtjbGFzcyo9ImJnLXdoaXRlLyJdLA0KICAgICAgICAjam91cm5hbCBbY2xhc3MqPSJiZy13aGl0ZS8iXSwNCiAgICAgICAgI2NhcmUtZmFxIFtjbGFzcyo9ImJnLXdoaXRlLyJdLA0KICAgICAgICAjdmF1bHQgW2NsYXNzKj0iYmctd2hpdGUvIl0sDQogICAgICAgICNjb250YWN0IFtjbGFzcyo9ImJnLXdoaXRlLyJdIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjcyKSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgICNzdG9yeSAubHV4LWtpY2tlciwNCiAgICAgICAgI3NlcnZpY2UgLmx1eC1raWNrZXIsDQogICAgICAgICNvd25lcnNoaXAgLmx1eC1raWNrZXIsDQogICAgICAgICNtYXRlcmlhbHMgLmx1eC1raWNrZXIsDQogICAgICAgICNyZWZlcmVuY2UtYXJjaGl2ZSAubHV4LWtpY2tlciwNCiAgICAgICAgI2xhZGllcy1ydW53YXkgLmx1eC1raWNrZXIsDQogICAgICAgICNiZXNwb2tlIC5sdXgta2lja2VyLA0KICAgICAgICAjaGVyaXRhZ2UgLmx1eC1raWNrZXIsDQogICAgICAgICNqb3VybmFsIC5sdXgta2lja2VyLA0KICAgICAgICAjY2FyZS1mYXEgLmx1eC1raWNrZXIsDQogICAgICAgICN2YXVsdCAubHV4LWtpY2tlciwNCiAgICAgICAgI2NvbnRhY3QgLmx1eC1raWNrZXIsDQogICAgICAgICNzdG9yeSAuZm9udC1kaXNwbGF5LnRleHQtXFsxMHB4XF0sDQogICAgICAgICNzZXJ2aWNlIC5mb250LWRpc3BsYXkudGV4dC1cWzEwcHhcXSwNCiAgICAgICAgI293bmVyc2hpcCAuZm9udC1kaXNwbGF5LnRleHQtXFsxMHB4XF0sDQogICAgICAgICNtYXRlcmlhbHMgLmZvbnQtZGlzcGxheS50ZXh0LVxbMTBweFxdLA0KICAgICAgICAjcmVmZXJlbmNlLWFyY2hpdmUgLmZvbnQtZGlzcGxheS50ZXh0LVxbMTBweFxdLA0KICAgICAgICAjbGFkaWVzLXJ1bndheSAuZm9udC1kaXNwbGF5LnRleHQtXFsxMHB4XF0sDQogICAgICAgICNiZXNwb2tlIC5mb250LWRpc3BsYXkudGV4dC1cWzEwcHhcXSwNCiAgICAgICAgI2hlcml0YWdlIC5mb250LWRpc3BsYXkudGV4dC1cWzEwcHhcXSwNCiAgICAgICAgI2pvdXJuYWwgLmZvbnQtZGlzcGxheS50ZXh0LVxbMTBweFxdLA0KICAgICAgICAjY2FyZS1mYXEgLmZvbnQtZGlzcGxheS50ZXh0LVxbMTBweFxdLA0KICAgICAgICAjdmF1bHQgLmZvbnQtZGlzcGxheS50ZXh0LVxbMTBweFxdLA0KICAgICAgICAjY29udGFjdCAuZm9udC1kaXNwbGF5LnRleHQtXFsxMHB4XF0gew0KICAgICAgICAgICAgY29sb3I6ICMwZDZiNTYgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAjdmF1bHQgLmlucHV0LWdsb3cgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwuODIpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBjb2xvcjogIzA3MTAwZSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDcsMTYsMTQsLjE2KSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgICN2YXVsdCAuaW5wdXQtZ2xvdzo6cGxhY2Vob2xkZXIgeyBjb2xvcjogcmdiYSg3LDE2LDE0LC4zOCkgIWltcG9ydGFudDsgfQ0KICAgICAgICAjdmF1bHQgeyBzY3JvbGwtbWFyZ2luLXRvcDogMTEycHg7IH0NCiAgICAgICAgDQogICAgICAgIC56ZG94aWctd3AtcGFnZSBmb290ZXIgYSB7IGNvbG9yOiByZ2JhKDI0MiwgMjQwLCAyMzIsIC42NCk7IH0NCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7DQogICAgICAgICAgICAuemRveGlnLXdwLXBhZ2UgI25hdmJhciB7IHBhZGRpbmctbGVmdDogMS4yNXJlbTsgcGFkZGluZy1yaWdodDogMS4yNXJlbTsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgYXV0bykgbWlubWF4KDAsIDFmcikgbWlubWF4KDAsIGF1dG8pOyB9DQogICAgICAgICAgICAuemRveGlnLXdwLXBhZ2UgLmhlcm8tdGl0bGUtZml0IHsgZm9udC1zaXplOiBjbGFtcCgxLjU4cmVtLCA2LjA4dncsIDIuMzRyZW0pOyBsaW5lLWhlaWdodDogMS4wMzsgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMi43NXJlbSk7IG92ZXJmbG93LXdyYXA6IG5vcm1hbDsgfQ0KICAgICAgICAgICAgI2V4cGxvcmUgeyBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7IG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7IGp1c3RpZnktY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50OyB9DQogICAgICAgICAgICAjc2xpZGVyLWNvbnRhaW5lciB7IHBhZGRpbmctYm90dG9tOiAyLjI1cmVtICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgICAgICNzbGlkZXItY29udGFpbmVyIC5zbGlkZS1jYXJkID4gZGl2OmZpcnN0LWNoaWxkIHsgaGVpZ2h0OiBtaW4oNTh2aCwgNTIwcHgpICFpbXBvcnRhbnQ7IH0NCiAgICAgICAgICAgICNzbGlkZXItY29udGFpbmVyIC5zbGlkZS1jYXJkID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2Om50aC1vZi10eXBlKDEpIHsgb3BhY2l0eTogMSAhaW1wb3J0YW50OyB9DQogICAgICAgICAgICAjc2xpZGVyLWNvbnRhaW5lciAuc2xpZGUtY2FyZCA+IGRpdjpmaXJzdC1jaGlsZCA+IGRpdjpudGgtb2YtdHlwZSgxKSBhIHsNCiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsNCiAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7DQogICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDA7DQogICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwuOCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAucHJlbWl1bS1uYXJyYXRpdmUtY2hhcHRlcjo6YmVmb3JlIHsNCiAgICAgICAgICAgICAgICB0b3A6IDVyZW07DQogICAgICAgICAgICAgICAgbGVmdDogMS4yNXJlbTsNCiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAyLjVyZW0pOw0KICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAucHJlbWl1bS1uYXJyYXRpdmUtdWkgew0KICAgICAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG87DQogICAgICAgICAgICAgICAgZ2FwOiAuNzVyZW07DQogICAgICAgICAgICAgICAgYm90dG9tOiAuODVyZW07DQogICAgICAgICAgICB9DQogICAgICAgICAgICAucHJlbWl1bS1uYXJyYXRpdmUtbGFiZWwgeyBkaXNwbGF5OiBub25lOyB9DQogICAgICAgIH0NCiAgICANCiAgICAgICAgLyogQWNjZXNzaWJpbGl0eTogZm9jdXMtdmlzaWJsZSAqLw0KICAgICAgICA6Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmU6IDJweCBzb2xpZCAjMDBmZmNjOyBvdXRsaW5lLW9mZnNldDogMnB4OyB9DQogICAgICAgIC5za2lwLW5hdiB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtMTAwcHg7IGxlZnQ6IDE2cHg7IGJhY2tncm91bmQ6ICMwMGZmY2M7IGNvbG9yOiAjMDAwOyBwYWRkaW5nOiA4cHggMTZweDsgei1pbmRleDogOTk5OTsgZm9udC1zaXplOiAxNHB4OyBib3JkZXItcmFkaXVzOiA0cHg7IHRyYW5zaXRpb246IHRvcCAwLjJzOyB9DQogICAgICAgIC5za2lwLW5hdjpmb2N1cyB7IHRvcDogMTZweDsgfQ0KICAgICAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgew0KICAgICAgICAgICAgKiwgKjo6YmVmb3JlLCAqOjphZnRlciB7IGFuaW1hdGlvbi1kdXJhdGlvbjogMC4wMW1zICFpbXBvcnRhbnQ7IHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50OyB9DQogICAgICAgICAgICAuZ3NhcC1mYWRlLXVwLCAuZ3NhcC1yZXZlYWwtZGlhZ29uYWwsIC5nc2FwLWhlcm8geyBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7IHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50OyBjbGlwLXBhdGg6IG5vbmUgIWltcG9ydGFudDsgfQ0KICAgICAgICB9DQoNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjc3RvcnksDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI3NlcnZpY2UsDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI293bmVyc2hpcCwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjbWF0ZXJpYWxzLA0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICNyZWZlcmVuY2UtYXJjaGl2ZSwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjbGFkaWVzLXJ1bndheSwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjYmVzcG9rZSwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjaGVyaXRhZ2UsDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI2pvdXJuYWwsDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI2NhcmUtZmFxLA0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICN2YXVsdCwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjY29udGFjdCB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOg0KICAgICAgICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNzglIDE2JSwgcmdiYSg1NiwxMDIsMTg0LC4wNzUpLCB0cmFuc3BhcmVudCAzNCUpLA0KICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsICNmZmZmZmYgMCUsICNmOGZhZjkgNTQlLCAjZmZmZmZmIDEwMCUpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBjb2xvcjogIzA3MTAwZSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDcsMTYsMTQsLjEpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjc3RvcnkgKiwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjc2VydmljZSAqLA0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICNvd25lcnNoaXAgKiwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjbWF0ZXJpYWxzICosDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI3JlZmVyZW5jZS1hcmNoaXZlICosDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI2xhZGllcy1ydW53YXkgKiwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjYmVzcG9rZSAqLA0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICNoZXJpdGFnZSAqLA0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICNqb3VybmFsICosDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI2NhcmUtZmFxICosDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI3ZhdWx0ICosDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI2NvbnRhY3QgKiB7DQogICAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoNywxNiwxNCwuMTIpOw0KICAgICAgICB9DQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI3N0b3J5IGgyLCBib2R5Lnpkb3hpZy13cC1wYWdlICNzdG9yeSBoMywNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjc2VydmljZSBoMiwgYm9keS56ZG94aWctd3AtcGFnZSAjc2VydmljZSBoMywNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjb3duZXJzaGlwIGgyLCBib2R5Lnpkb3hpZy13cC1wYWdlICNvd25lcnNoaXAgaDMsDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI21hdGVyaWFscyBoMiwgYm9keS56ZG94aWctd3AtcGFnZSAjbWF0ZXJpYWxzIGgzLA0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICNyZWZlcmVuY2UtYXJjaGl2ZSBoMiwgYm9keS56ZG94aWctd3AtcGFnZSAjcmVmZXJlbmNlLWFyY2hpdmUgaDMsDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI2xhZGllcy1ydW53YXkgaDIsIGJvZHkuemRveGlnLXdwLXBhZ2UgI2xhZGllcy1ydW53YXkgaDMsDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI2Jlc3Bva2UgaDIsIGJvZHkuemRveGlnLXdwLXBhZ2UgI2Jlc3Bva2UgaDMsDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI2hlcml0YWdlIGgyLCBib2R5Lnpkb3hpZy13cC1wYWdlICNoZXJpdGFnZSBoMywNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjam91cm5hbCBoMiwgYm9keS56ZG94aWctd3AtcGFnZSAjam91cm5hbCBoMywNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjY2FyZS1mYXEgaDIsIGJvZHkuemRveGlnLXdwLXBhZ2UgI2NhcmUtZmFxIGgzLA0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICN2YXVsdCBoMiwgYm9keS56ZG94aWctd3AtcGFnZSAjdmF1bHQgaDMsDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI2NvbnRhY3QgaDIsIGJvZHkuemRveGlnLXdwLXBhZ2UgI2NvbnRhY3QgaDMgew0KICAgICAgICAgICAgY29sb3I6ICMwNzEwMGUgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICNzdG9yeSBwLA0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICNzZXJ2aWNlIHAsDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI293bmVyc2hpcCBwLA0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICNtYXRlcmlhbHMgcCwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjcmVmZXJlbmNlLWFyY2hpdmUgcCwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjbGFkaWVzLXJ1bndheSBwLA0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICNiZXNwb2tlIHAsDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI2hlcml0YWdlIHAsDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI2pvdXJuYWwgcCwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjY2FyZS1mYXEgcCwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjdmF1bHQgcCwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjY29udGFjdCBwLA0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICNzdG9yeSBbY2xhc3MqPSJ0ZXh0LXdoaXRlLyJdLA0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICNzZXJ2aWNlIFtjbGFzcyo9InRleHQtd2hpdGUvIl0sDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI293bmVyc2hpcCBbY2xhc3MqPSJ0ZXh0LXdoaXRlLyJdLA0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICNtYXRlcmlhbHMgW2NsYXNzKj0idGV4dC13aGl0ZS8iXSwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjcmVmZXJlbmNlLWFyY2hpdmUgW2NsYXNzKj0idGV4dC13aGl0ZS8iXSwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjbGFkaWVzLXJ1bndheSBbY2xhc3MqPSJ0ZXh0LXdoaXRlLyJdLA0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICNiZXNwb2tlIFtjbGFzcyo9InRleHQtd2hpdGUvIl0sDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI2hlcml0YWdlIFtjbGFzcyo9InRleHQtd2hpdGUvIl0sDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI2pvdXJuYWwgW2NsYXNzKj0idGV4dC13aGl0ZS8iXSwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjY2FyZS1mYXEgW2NsYXNzKj0idGV4dC13aGl0ZS8iXSwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjdmF1bHQgW2NsYXNzKj0idGV4dC13aGl0ZS8iXSwNCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjY29udGFjdCBbY2xhc3MqPSJ0ZXh0LXdoaXRlLyJdIHsNCiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDcsMTYsMTQsLjYyKSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI3ZhdWx0IC5pbnB1dC1nbG93IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsLjg0KSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgY29sb3I6ICMwNzEwMGUgIWltcG9ydGFudDsNCiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSg3LDE2LDE0LC4xNikgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICN2YXVsdCAjdmVyaWZ5X2J0biB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDcxMDBlICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDcxMDBlICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBib3gtc2hhZG93OiAwIDE4cHggNDBweCByZ2JhKDcsMTYsMTQsLjE2KTsNCiAgICAgICAgfQ0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICN2YXVsdCAjdmVyaWZ5X2J0bjpob3ZlciB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMGQ2YjU2ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBib3JkZXItY29sb3I6ICMwZDZiNTYgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAjdmF1bHQgLnZlcmlmeS1kZXRhaWwtZ3JpZCB7DQogICAgICAgICAgICBkaXNwbGF5OiBncmlkOw0KICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpOw0KICAgICAgICAgICAgZ2FwOiAxLjI1cmVtIDEuNXJlbTsNCiAgICAgICAgfQ0KICAgICAgICAjdmF1bHQgLnZlcmlmeS1kZXRhaWwtaXRlbSB7DQogICAgICAgICAgICBtaW4td2lkdGg6IDA7DQogICAgICAgIH0NCiAgICAgICAgI3ZhdWx0IC52ZXJpZnktZGV0YWlsLWxhYmVsIHsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IC41cmVtOw0KICAgICAgICAgICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjQpOw0KICAgICAgICAgICAgZm9udC1zaXplOiAuNTZyZW07DQogICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjJlbTsNCiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7DQogICAgICAgIH0NCiAgICAgICAgI3ZhdWx0IC52ZXJpZnktZGV0YWlsLXZhbHVlIHsNCiAgICAgICAgICAgIGNvbG9yOiAjZmZmOw0KICAgICAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxcmVtLCAydncsIDEuMzVyZW0pOw0KICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzU7DQogICAgICAgICAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsNCiAgICAgICAgfQ0KICAgICAgICAjdmF1bHQgLnZlcmlmeS1ibGVzc2luZyB7DQogICAgICAgICAgICBtYXJnaW4tdG9wOiAxLjVyZW07DQogICAgICAgICAgICBwYWRkaW5nLXRvcDogMS4yNXJlbTsNCiAgICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xKTsNCiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC43Mik7DQogICAgICAgICAgICBmb250LXNpemU6IC45cmVtOw0KICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuODsNCiAgICAgICAgfQ0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICN2YXVsdCAjcmVzdWx0X2NhcmQsDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI3ZhdWx0ICNyZXN1bHRfY2FyZCAqIHsNCiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI0MiwyNDAsMjMyLC45KSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI3ZhdWx0ICNyZXN1bHRfY2FyZCA+IGRpdiB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCByZ2JhKDYsMTcsMTUsLjk4KSwgcmdiYSgxMiwyMiwxOSwuOTYpKSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsMjU1LDIwNCwuMTQpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBib3gtc2hhZG93OiAwIDI2cHggNzBweCByZ2JhKDcsMTYsMTQsLjE4KTsNCiAgICAgICAgfQ0KICAgICAgICBib2R5Lnpkb3hpZy13cC1wYWdlICN2YXVsdCAjcmVzX3N0YXR1c190ZXh0IHsNCiAgICAgICAgICAgIGNvbG9yOiAjMDBmZmNjICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjdmF1bHQgLnZlcmlmeS1kZXRhaWwtbGFiZWwsDQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI3ZhdWx0ICNyZXNfcmVjb3JkX2xhYmVsIHsNCiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI0MiwyNDAsMjMyLC41KSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2UgI3ZhdWx0IC52ZXJpZnktZGV0YWlsLXZhbHVlIHsNCiAgICAgICAgICAgIGNvbG9yOiAjZjJmMGU4ICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjdmF1bHQgLnZlcmlmeS1ibGVzc2luZyB7DQogICAgICAgICAgICBjb2xvcjogcmdiYSgyNDIsMjQwLDIzMiwuNzgpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCg0KICAgICAgICAvKiBNb2JpbGUgcHJvZHVjdGlvbiBwYXNzOiBrZWVwIHNlY3Rpb25zIHZpc2libGUsIGNhbG0sIGFuZCB0b3VjaC1uYXRpdmUuICovDQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkgew0KICAgICAgICAgICAgaHRtbCwNCiAgICAgICAgICAgIGJvZHkgew0KICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTsNCiAgICAgICAgICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGJvZHkuemRveGlnLXdwLXBhZ2Ugew0KICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwNTA3MDY7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIG1haW4gPiBzZWN0aW9uLA0KICAgICAgICAgICAgZm9vdGVyIHsNCiAgICAgICAgICAgICAgICBzY3JvbGwtbWFyZ2luLXRvcDogNzZweDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgYm9keS56ZG94aWctd3AtcGFnZSAjbmF2YmFyIHsNCiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY4cHggIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiA2OHB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IC44NXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAuODVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDcsIDksIDgsIC45KSwgcmdiYSg3LCA5LCA4LCAuNjgpKSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxNnB4KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLmdzYXAtZmFkZS11cCwNCiAgICAgICAgICAgIC5nc2FwLXJldmVhbC1kaWFnb25hbCB7DQogICAgICAgICAgICAgICAgb3BhY2l0eTogMSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBjbGlwLXBhdGg6IG5vbmUgIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayB7DQogICAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgbWluLWhlaWdodDogMCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlIHsNCiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBpbnNldDogYXV0byAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDkyc3ZoICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgaGVpZ2h0OiA5MnN2aCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUgdmlkZW8sDQogICAgICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZSBpbWcgew0KICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgb2JqZWN0LWZpdDogY292ZXIgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBvYmplY3QtcG9zaXRpb246IGNlbnRlciBjZW50ZXIgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDQpIHRyYW5zbGF0ZVooMCkgIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUgPiAucmVsYXRpdmUgew0KICAgICAgICAgICAgICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDIuNXJlbSkgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBvcGFjaXR5OiAuNzIgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI3Nob3djYXNlLTNkIHsNCiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDEwLjI1cmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDQuNzVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOg0KICAgICAgICAgICAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDc2JSAxNiUsIHJnYmEoMCwyNTUsMjA0LC4wOCksIHRyYW5zcGFyZW50IDI4JSksDQogICAgICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMwOTBiMGEgMCUsICMxMDE2MTQgNjglLCAjZjhmYWY5IDEwMCUpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNzaG93Y2FzZS0zZCA+IC5zaWduYXR1cmUtc2NlbmUtc3RhY2sgew0KICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI3Nob3djYXNlLTNkIC5hYnNvbHV0ZS5pbnNldC0wLm9wYWNpdHktNDAgew0KICAgICAgICAgICAgICAgIG9wYWNpdHk6IC4xOCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjc2hvd2Nhc2UtM2QgLm1heC13LTd4bCB7DQogICAgICAgICAgICAgICAgbWluLWhlaWdodDogYXV0byAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBnYXA6IDEuNXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjc2hvd2Nhc2UtM2QgI3Nob3djYXNlX3RpdGxlIHsNCiAgICAgICAgICAgICAgICBmb250LXNpemU6IGNsYW1wKDIuMDVyZW0sIDExLjV2dywgMy4xNXJlbSkgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogLjkyICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA4LjZjaCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEuMzVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI3Nob3djYXNlLTNkICNzaG93Y2FzZV9kZXNjIHsNCiAgICAgICAgICAgICAgICBmb250LXNpemU6IC45MnJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjc1ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMS41NXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjc2hvd2Nhc2UtM2QgLmdyaWQuc21cOmdyaWQtY29scy0zIHsNCiAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCBtaW5tYXgoMCwgMWZyKSkgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBnYXA6IC41NXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEuMzVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI3Nob3djYXNlLTNkIC5ncmlkLnNtXDpncmlkLWNvbHMtMyA+IGRpdiB7DQogICAgICAgICAgICAgICAgbWluLWhlaWdodDogOTJweDsNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAuNzhyZW0gLjY1cmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjc2hvd2Nhc2UtM2QgLmdyaWQuc21cOmdyaWQtY29scy0zIHA6Zmlyc3QtY2hpbGQgew0KICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMS4wOHJlbSwgN3Z3LCAxLjY1cmVtKSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNzaG93Y2FzZS0zZCAubWF0ZXJpYWwtY2hpcCB7DQogICAgICAgICAgICAgICAgbWluLXdpZHRoOiAwOw0KICAgICAgICAgICAgICAgIGZsZXg6IDEgMSAwOw0KICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDQ2cHg7DQogICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAuNjVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAuNjVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBmb250LXNpemU6IC42NHJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjc2hvd2Nhc2UtM2QgLndhdGNoLTNkLXN0YWdlIHsNCiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiA0MzBweCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBzdGFydCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiAuMzVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI3Nob3djYXNlLTNkIC5zaG93Y2FzZS1wcm9kdWN0LWNhcmQgew0KICAgICAgICAgICAgICAgIHdpZHRoOiBtaW4oNzh2dywgMzEwcHgpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgYXNwZWN0LXJhdGlvOiAzIC8gNC4xOCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDE0cHggIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDMwcHggNzRweCByZ2JhKDAsMCwwLC4zOCkgIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI3Nob3djYXNlLTNkIC5zaG93Y2FzZS1wcm9kdWN0LWltZyB7DQogICAgICAgICAgICAgICAgaW5zZXQ6IDUlICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgd2lkdGg6IDkwJSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGhlaWdodDogOTAlICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNzaG93Y2FzZS0zZCAud2F0Y2gtaG90c3BvdCBzcGFuIHsNCiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNzaG93Y2FzZS0zZCAuc2lnbmF0dXJlLXNjZW5lLXN0YXR1cyB7DQogICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjZXhwbG9yZSB7DQogICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDUuNXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiA0LjI1cmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNleHBsb3JlID4gLm1heC13LTd4bCB7DQogICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMi40cmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNleHBsb3JlIGgyIHsNCiAgICAgICAgICAgICAgICBmb250LXNpemU6IGNsYW1wKDIuN3JlbSwgMTV2dywgNC4wNXJlbSkgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogLjk4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNleHBsb3JlIC5mbGV4LmdhcC00IHsNCiAgICAgICAgICAgICAgICBnYXA6IC44NXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjZXhwbG9yZSAjc2xpZGVyLXByZXYsDQogICAgICAgICAgICAjZXhwbG9yZSAjc2xpZGVyLW5leHQgew0KICAgICAgICAgICAgICAgIHdpZHRoOiA1OHB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgaGVpZ2h0OiA1OHB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgZmxleDogMCAwIDU4cHggIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LC45KSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjZXhwbG9yZSA+IC5vdmVyZmxvdy1oaWRkZW4gew0KICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogbWF4KDFyZW0sIGNhbGMoKDEwMHZ3IC0gbWluKDgydncsIDMyMHB4KSkgLyAyKSkgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiBtYXgoMXJlbSwgY2FsYygoMTAwdncgLSBtaW4oODJ2dywgMzIwcHgpKSAvIDIpKSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHNjcm9sbC1wYWRkaW5nLWlubGluZTogbWF4KDFyZW0sIGNhbGMoKDEwMHZ3IC0gbWluKDgydncsIDMyMHB4KSkgLyAyKSk7DQogICAgICAgICAgICAgICAgb3ZlcmZsb3cteDogYXV0byAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIG92ZXJmbG93LXk6IHZpc2libGUgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yLWlubGluZTogY29udGFpbjsNCiAgICAgICAgICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7DQogICAgICAgICAgICAgICAgbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgIzAwMCA3JSwgIzAwMCA5MyUsIHRyYW5zcGFyZW50KTsNCiAgICAgICAgICAgICAgICAtd2Via2l0LW1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsICMwMDAgNyUsICMwMDAgOTMlLCB0cmFuc3BhcmVudCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNzbGlkZXItY29udGFpbmVyIHsNCiAgICAgICAgICAgICAgICBnYXA6IDEuMDVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBvdmVyZmxvdy14OiB2aXNpYmxlICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgc2Nyb2xsLXNuYXAtdHlwZTogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjc2xpZGVyLWNvbnRhaW5lciAuc2xpZGUtY2FyZCB7DQogICAgICAgICAgICAgICAgd2lkdGg6IG1pbig4MnZ3LCAzMjBweCkgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBmbGV4LWJhc2lzOiBtaW4oODJ2dywgMzIwcHgpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgc2Nyb2xsLXNuYXAtYWxpZ246IGNlbnRlcjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI3NsaWRlci1jb250YWluZXIgLnNsaWRlLWNhcmQgPiBkaXY6Zmlyc3QtY2hpbGQgew0KICAgICAgICAgICAgICAgIGhlaWdodDogbWluKDU1dmgsIDQzMHB4KSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHggIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI3NsaWRlci1jb250YWluZXIgLnNsaWRlLWNhcmQgaW1nIHsNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxLjA1cmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC5hcmNoaXZlLXN0YWdlIHsNCiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMDsNCiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC5hcmNoaXZlLXByb2dyZXNzIHsNCiAgICAgICAgICAgICAgICB3aWR0aDogbWluKDc4dncsIDM0MHB4KSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHRvcDogLjI1cmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC5hcmNoaXZlLXJhaWwgew0KICAgICAgICAgICAgICAgIGdyaWQtYXV0by1jb2x1bW5zOiA5MnZ3ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgZ2FwOiAuNjVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDEuMjVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBvdmVyZmxvdy14OiBhdXRvICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgb3ZlcmZsb3cteTogdmlzaWJsZSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3ItaW5saW5lOiBjb250YWluOw0KICAgICAgICAgICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsNCiAgICAgICAgICAgICAgICBtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCAjMDAwIDclLCAjMDAwIDkzJSwgdHJhbnNwYXJlbnQpOw0KICAgICAgICAgICAgICAgIC13ZWJraXQtbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgIzAwMCA3JSwgIzAwMCA5MyUsIHRyYW5zcGFyZW50KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLmFyY2hpdmUtY2FyZCB7DQogICAgICAgICAgICAgICAgbWluLWhlaWdodDogbWluKDY4c3ZoLCA1NzVweCkgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC5hcmNoaXZlLWNhcmQgZmlndXJlIHsNCiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAzNDBweCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAuYXJjaGl2ZS1jYXJkIGltZyB7DQogICAgICAgICAgICAgICAgd2lkdGg6IDkwJSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGhlaWdodDogODQlICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC5hcmNoaXZlLXN0YWdlIC5hcmNoaXZlLWNvbnRyb2wgew0KICAgICAgICAgICAgICAgIHdpZHRoOiA1MnB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgaGVpZ2h0OiA1MnB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwuODYpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC5hcmNoaXZlLXN0YWdlIC5hcmNoaXZlLWNvbnRyb2xbZGF0YS1kaXI9InByZXYiXSB7DQogICAgICAgICAgICAgICAgbGVmdDogLjc1cmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC5hcmNoaXZlLXN0YWdlIC5hcmNoaXZlLWNvbnRyb2xbZGF0YS1kaXI9Im5leHQiXSB7DQogICAgICAgICAgICAgICAgcmlnaHQ6IC43NXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjam91cm5hbCB7DQogICAgICAgICAgICAgICAgbWluLWhlaWdodDogYXV0byAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiA1LjVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogNS4yNXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjam91cm5hbCAud3AtYmxvZy1ncmlkIHsNCiAgICAgICAgICAgICAgICBkaXNwbGF5OiBncmlkICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBnYXA6IDEuMDVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI2pvdXJuYWwgLndwLWJsb2ctY2FyZCB7DQogICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsLjkpICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxOHB4IDQ2cHggcmdiYSg3LDE2LDE0LC4wOCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNqb3VybmFsIC53cC1ibG9nLW1lZGlhIHsNCiAgICAgICAgICAgICAgICBhc3BlY3QtcmF0aW86IDEuMjQgLyAxICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICN2YXVsdCB7DQogICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDUuNXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiA1Ljc1cmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICN2YXVsdCAuaW5wdXQtZ2xvdyB7DQogICAgICAgICAgICAgICAgbWluLWhlaWdodDogNzZweCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDNyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBmb250LXNpemU6IGNsYW1wKDFyZW0sIDZ2dywgMS40NXJlbSkgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjE2ZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAyMnB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICN2YXVsdCAjdmVyaWZ5X2J0biB7DQogICAgICAgICAgICAgICAgbWluLWhlaWdodDogNjRweCAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgZm9udC1zaXplOiAuNzRyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjdmF1bHQgLnZlcmlmeS1kZXRhaWwtZ3JpZCB7DQogICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBnYXA6IC44MnJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjdmF1bHQgI3Jlc3VsdF9jYXJkIHsNCiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAyLjI1cmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICN2YXVsdCAjcmVzdWx0X2NhcmQgPiBkaXYgew0KICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEuMzVyZW0gMXJlbSAxLjhyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICN2YXVsdCAjcmVzdWx0X2NhcmQgLmZsZXguaXRlbXMtY2VudGVyIHsNCiAgICAgICAgICAgICAgICBnYXA6IC44NXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEuMzVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjdmF1bHQgI3Jlc19zdGF0dXNfdGV4dCB7DQogICAgICAgICAgICAgICAgZm9udC1zaXplOiAuNzJyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjE0ZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI3ZhdWx0ICNyZXNfcmVjb3JkX2xhYmVsIHsNCiAgICAgICAgICAgICAgICBmb250LXNpemU6IC41OHJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjE0ZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI3ZhdWx0IC52ZXJpZnktZGV0YWlsLWxhYmVsIHsNCiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAuMjhyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBmb250LXNpemU6IC41OHJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAuMTRlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjdmF1bHQgLnZlcmlmeS1kZXRhaWwtdmFsdWUgew0KICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoLjkycmVtLCA0LjZ2dywgMS4wOHJlbSkgIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMS40MiAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAwICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICN2YXVsdCAudmVyaWZ5LWJsZXNzaW5nIHsNCiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAxcmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IC45NXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMuNnJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogLjg2cmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjUgIWltcG9ydGFudDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgI2NvbnRhY3Qgew0KICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiA1LjVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogNC4yNXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjY29udGFjdCAuZ3JpZC5zbVw6Z3JpZC1jb2xzLTIgew0KICAgICAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgZ2FwOiAxcmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICNjb250YWN0IGEgew0KICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDE4cHggIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxLjM1cmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGZvb3RlciB7DQogICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDMuNzVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogNC43NXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAuYmFjay10by10b3Agew0KICAgICAgICAgICAgICAgIHdpZHRoOiA0NHB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgaGVpZ2h0OiA0NHB4ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgcmlnaHQ6IC45cmVtICFpbXBvcnRhbnQ7DQogICAgICAgICAgICAgICAgYm90dG9tOiAuOXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHotaW5kZXg6IDcwICFpbXBvcnRhbnQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC5wcmVtaXVtLW5hcnJhdGl2ZS11aSB7DQogICAgICAgICAgICAgICAgbGVmdDogMXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIHJpZ2h0OiA0LjVyZW0gIWltcG9ydGFudDsNCiAgICAgICAgICAgICAgICBib3R0b206IC45NXJlbSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLyogVXNlciBwcmVmZXJlbmNlOiBrZWVwIHRoZSBjYW1wYWlnbiBhbmQgcHJvZHVjdCBwYXRoIGJyaWdodCBmcm9tIHRoZSBmaXJzdCB2aWV3cG9ydCwgbm90IG9ubHkgYWZ0ZXIgc2Nyb2xsIHByb2dyZXNzIGFkdmFuY2VzLiAqLw0KICAgICAgICAjaG9tZTo6YmVmb3JlIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6DQogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg1LDcsNiwuMDgpIDAlLCByZ2JhKDUsNyw2LDApIDQ2JSwgcmdiYSg1LDcsNiwuMTQpIDEwMCUpLA0KICAgICAgICAgICAgICAgIHJnYmEoNSw3LDYsLjAyNSkgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAjaG9tZTo6YWZ0ZXIsDQogICAgICAgICNob21lID4gLmFic29sdXRlLmluc2V0LTAuei0wOjphZnRlciB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDUsNyw2LC4wMzUpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI2hvbWUgPiAuYWJzb2x1dGUuaW5zZXQtMC56LTA6OmJlZm9yZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOg0KICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSg1LDcsNiwuMDEyKSAwJSwgcmdiYSg1LDcsNiwwKSA0OCUsIHJnYmEoNSw3LDYsLjAyKSAxMDAlKSwNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDUsNyw2LC4wMzUpIDAlLCByZ2JhKDUsNyw2LDApIDUwJSwgcmdiYSg1LDcsNiwuMDU1KSAxMDAlKSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgICNob21lID4gLmFic29sdXRlLmluc2V0LTAuei0wID4gLmFic29sdXRlLmluc2V0LTAgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg1LDcsNiwuMDM1KSAwJSwgcmdiYSg1LDcsNiwwKSA1NCUsIHJnYmEoNSw3LDYsLjA2KSAxMDAlKSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgICNoZXJvLXZpZGVvLA0KICAgICAgICAjaGVyby1pbWcgew0KICAgICAgICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMzQpIGNvbnRyYXN0KDEuMDIpIHNhdHVyYXRlKDEuMjQpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI3Njcm9sbC1zY2VuZS1iYWNrZHJvcCB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOg0KICAgICAgICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNzQlIDI4JSwgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLXNjZW5lLWFjY2VudCkgOCUsIHRyYW5zcGFyZW50KSwgdHJhbnNwYXJlbnQgMzQlKSwNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tc2NlbmUtYmcpIDQyJSwgI2ZmZmZmZiA1OCUpLCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tc2NlbmUtYmcpIDMwJSwgI2ZmZmZmZiA3MCUpKSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgICNzY3JvbGwtc2NlbmUtYmFja2Ryb3AgaW1nLA0KICAgICAgICBib2R5LnNjZW5lLWxpZ2h0ICNzY3JvbGwtc2NlbmUtYmFja2Ryb3AgaW1nIHsNCiAgICAgICAgICAgIGZpbHRlcjogc2F0dXJhdGUoLjk2KSBjb250cmFzdCgxLjAxKSBicmlnaHRuZXNzKDEuMjYpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI3Njcm9sbC1zY2VuZS1iYWNrZHJvcDo6YWZ0ZXIgew0KICAgICAgICAgICAgYmFja2dyb3VuZDoNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoMjU1LDI1NSwyNTUsLjM4KSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwuMTQpIDQwJSwgdHJhbnNwYXJlbnQgMTAwJSksDQogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsMjU1LDI1NSwuMjIpLCByZ2JhKDI1NSwyNTUsMjU1LC4wNSkgNDYlLCByZ2JhKDI1NSwyNTUsMjU1LC4yOCkpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDUwNjA1ICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUgdmlkZW8sDQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlIGltZyB7DQogICAgICAgICAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4xOCkgY29udHJhc3QoMS4xKSBzYXR1cmF0ZSgxLjE2KSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlOjphZnRlciwNCiAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGUtLWx1bWU6OmFmdGVyLA0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZS0tZGV0YWlsOjphZnRlciB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOg0KICAgICAgICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDQ4JSwgcmdiYSgwLDI1NSwyMDQsLjAzNSksIHRyYW5zcGFyZW50IDMyJSksDQogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg1LDYsNSwuMDgpLCByZ2JhKDUsNiw1LDApIDQ2JSwgcmdiYSg1LDYsNSwuMTgpKSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgIC5zY2VuZS10cmFuc2l0aW9uLWRhcmsgew0KICAgICAgICAgICAgb3BhY2l0eTogLjI0ICFpbXBvcnRhbnQ7DQogICAgICAgICAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wNikgc2F0dXJhdGUoMS4wMikgY29udHJhc3QoMS4wMykgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAuc2NlbmUtdHJhbnNpdGlvbi1saWdodCB7DQogICAgICAgICAgICBvcGFjaXR5OiAuOSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMDgpIHNhdHVyYXRlKC45NikgY29udHJhc3QoMS4wMSkgZHJvcC1zaGFkb3coMCAyOHB4IDQycHggcmdiYSg3LDE2LDE0LC4xNikpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgLnNjZW5lLXRyYW5zaXRpb24tbWVkaWE6OmFmdGVyIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6DQogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDI1NSwyNTUsMjU1LC40MikgMCUsIHJnYmEoMjU1LDI1NSwyNTUsLjE4KSA0NiUsIHRyYW5zcGFyZW50IDEwMCUpLA0KICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjQ4LDI1MCwyNDksLjQ0KSwgcmdiYSgyNTUsMjU1LDI1NSwuNjgpKSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgICNzaG93Y2FzZS0zZCwNCiAgICAgICAgI2lubm92YXRpb24sDQogICAgICAgICNhdGVsaWVyLXByb2Nlc3Mgew0KICAgICAgICAgICAgLS1sdXgtbGlnaHQtcHJvZ3Jlc3M6IDEgIWltcG9ydGFudDsNCiAgICAgICAgICAgIC0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzOiAxICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgLnNpZ25hdHVyZS1zY2VuZSBpbWcgew0KICAgICAgICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMDgpIHNhdHVyYXRlKC45OCkgY29udHJhc3QoMS4wMikgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAuc2lnbmF0dXJlLXNjZW5lLmlzLWxpZ2h0IGltZyB7DQogICAgICAgICAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4xMikgc2F0dXJhdGUoLjk2KSBjb250cmFzdCgxLjAxKSBkcm9wLXNoYWRvdygwIDM2cHggNDhweCByZ2JhKDcsMTYsMTQsLjE2KSkgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KICAgICAgICAjaW5ub3ZhdGlvbiAjY3JhZnQtaW1nLA0KICAgICAgICAjYXRlbGllci1wcm9jZXNzIC5hc3NldC10aWxlIGltZywNCiAgICAgICAgI2F0ZWxpZXItcHJvY2VzcyAuYXNzZXQtdGlsZSB2aWRlbyB7DQogICAgICAgICAgICBmaWx0ZXI6IGdyYXlzY2FsZSgwKSBicmlnaHRuZXNzKDEuMDgpIGNvbnRyYXN0KDEuMDMpIHNhdHVyYXRlKDEuMDYpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI2lubm92YXRpb24gLmNyYWZ0LW1lZGlhID4gZGl2IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsLjA4KSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlIHZpZGVvLA0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZSBpbWcgew0KICAgICAgICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMTYpIGNvbnRyYXN0KDEuMTQpIHNhdHVyYXRlKDEuMTQpICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICAgICAgI3ZpZGVvLXNjcm9sbC10cmFjayAudmlkZW8tc2xpZGU6OmFmdGVyLA0KICAgICAgICAjdmlkZW8tc2Nyb2xsLXRyYWNrIC52aWRlby1zbGlkZS0tbHVtZTo6YWZ0ZXIsDQogICAgICAgICN2aWRlby1zY3JvbGwtdHJhY2sgLnZpZGVvLXNsaWRlLS1kZXRhaWw6OmFmdGVyIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6DQogICAgICAgICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNDYlLCByZ2JhKDAsMjU1LDIwNCwuMDM1KSwgdHJhbnNwYXJlbnQgMzQlKSwNCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDUsNiw1LC4xKSwgcmdiYSg1LDYsNSwwKSA0NiUsIHJnYmEoNSw2LDUsLjIpKSAhaW1wb3J0YW50Ow0KICAgICAgICAgICAgbWl4LWJsZW5kLW1vZGU6IG5vcm1hbDsNCiAgICAgICAgfQ0KPC9zdHlsZT4NCgo8c3R5bGUgaWQ9InpkeC1jaW5lbWF0aWMtbmF2LXN0eWxlIj4KQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9SW50ZXI6d2dodEAzMDA7NDAwOzUwMDs2MDA7NzAwJmRpc3BsYXk9c3dhcCcpOwpAa2V5ZnJhbWVzIHpkeEJsdXJGYWRlVXAgewogIGZyb20geyBvcGFjaXR5OiAwOyBmaWx0ZXI6IGJsdXIoMjBweCk7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MHB4KTsgfQogIHRvIHsgb3BhY2l0eTogMTsgZmlsdGVyOiBibHVyKDApOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0KfQpib2R5LnpkeC1uYXYtcmVhZHkgI25hdmJhciwKYm9keS56ZHgtbmF2LXJlYWR5ICNmdWxsLW1lbnUsCmJvZHkuemR4LW5hdi1yZWFkeSAudG9wYmFyOm5vdCguemR4LWNpbmVtYXRpYy1uYXYpLApib2R5LnpkeC1uYXYtcmVhZHkgLnRvcGJhcjpub3QoLnpkeC1jaW5lbWF0aWMtbmF2KSAqLApib2R5LnpkeC1uYXYtcmVhZHkgLmRldGFpbC1hY3Rpb25zLApib2R5LnpkeC1uYXYtcmVhZHkgLmRldGFpbC1hY3Rpb25zICosCmJvZHkuemR4LW5hdi1yZWFkeSAudG9wYmFyICsgLm1vYmlsZS1tZW51LApib2R5LnpkeC1uYXYtcmVhZHkgLnNpdGUtbWVudSB7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIG9wYWNpdHk6IDAgIWltcG9ydGFudDsKICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50OwogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9CmJvZHkuemR4LW5hdi1yZWFkeSAuemR4LWNpbmVtYXRpYy1uYXYsCmJvZHkuemR4LW5hdi1yZWFkeSAuemR4LW1vYmlsZS1tZW51IHsKICBmb250LWZhbWlseTogSW50ZXIsICJNaWNyb3NvZnQgWWFIZWkiLCAiUGluZ0ZhbmcgU0MiLCBzeXN0ZW0tdWksIHNhbnMtc2VyaWYgIWltcG9ydGFudDsKfQouemR4LWxpcXVpZC1nbGFzcyB7CiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAxKTsKICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IGx1bWlub3NpdHk7CiAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNHB4KTsKICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNHB4KTsKICBib3JkZXI6IG5vbmU7CiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQouemR4LWxpcXVpZC1nbGFzczo6YmVmb3JlIHsKICBjb250ZW50OiAiIjsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgaW5zZXQ6IDA7CiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICBwYWRkaW5nOiAxLjRweDsKICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDIwJSwgcmdiYSgyNTUsMjU1LDI1NSwwKSA0MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgNjAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDgwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjQ1KSAxMDAlKTsKICAtd2Via2l0LW1hc2s6IGxpbmVhci1ncmFkaWVudCgjZmZmIDAgMCkgY29udGVudC1ib3gsIGxpbmVhci1ncmFkaWVudCgjZmZmIDAgMCk7CiAgLXdlYmtpdC1tYXNrLWNvbXBvc2l0ZTogeG9yOwogIG1hc2stY29tcG9zaXRlOiBleGNsdWRlOwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci56ZHgtYW5pbWF0ZS1ibHVyLWZhZGUtdXAgewogIG9wYWNpdHk6IDA7CiAgYW5pbWF0aW9uOiB6ZHhCbHVyRmFkZVVwIDFzIGVhc2Utb3V0IGZvcndhcmRzOwp9Ci56ZHgtY2luZW1hdGljLW5hdiB7CiAgcG9zaXRpb246IGZpeGVkOwogIGxlZnQ6IDA7CiAgcmlnaHQ6IDA7CiAgdG9wOiAwOwogIHotaW5kZXg6IDIxNDc0ODI1MDA7CiAgbWluLWhlaWdodDogNzZweDsKICBkaXNwbGF5OiBncmlkOwogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcikgYXV0byBtaW5tYXgoMCwgMWZyKTsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGdhcDogMTZweDsKICBwYWRkaW5nOiAxNnB4IGNsYW1wKDE2cHgsIDMuNnZ3LCA1MnB4KTsKICBjb2xvcjogI2ZmZjsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDAsMCwwLC42MiksIHJnYmEoMCwwLDAsLjM0KSA2NCUsIHJnYmEoMCwwLDAsMCkpOwogIHRleHQtc2hhZG93OiAwIDFweCAxOHB4IHJnYmEoMCwwLDAsLjcyKTsKfQouemR4LWNpbmVtYXRpYy1uYXYgYSwKLnpkeC1jaW5lbWF0aWMtbmF2IGJ1dHRvbiB7CiAgcG9pbnRlci1ldmVudHM6IGF1dG87Cn0KLnpkeC1icmFuZCB7CiAganVzdGlmeS1zZWxmOiBzdGFydDsKICBtaW4taGVpZ2h0OiA0NHB4OwogIGRpc3BsYXk6IGlubGluZS1mbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgZ2FwOiAxMXB4OwogIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogIHBhZGRpbmc6IDZweCAxN3B4IDZweCA2cHg7CiAgY29sb3I6ICNmZmY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci56ZHgtYnJhbmQtbWFyayB7CiAgd2lkdGg6IDMycHg7CiAgaGVpZ2h0OiAzMnB4OwogIGRpc3BsYXk6IGdyaWQ7CiAgcGxhY2UtaXRlbXM6IGNlbnRlcjsKICBib3JkZXItcmFkaXVzOiA5OTlweDsKICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LC45NCk7CiAgY29sb3I6ICMwNTA1MDU7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBsZXR0ZXItc3BhY2luZzogMDsKfQouemR4LWJyYW5kLXdvcmQgewogIGZvbnQtc2l6ZTogMTNweDsKICBmb250LXdlaWdodDogNzAwOwogIGxldHRlci1zcGFjaW5nOiAuMThlbTsKfQouemR4LWNlbnRlci1uYXYgewogIG1pbi1oZWlnaHQ6IDQ0cHg7CiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGdhcDogY2xhbXAoMTJweCwgMnZ3LCAyOHB4KTsKICBib3JkZXItcmFkaXVzOiA5OTlweDsKICBwYWRkaW5nOiAwIGNsYW1wKDE4cHgsIDIuN3Z3LCAzNHB4KTsKfQouemR4LWNlbnRlci1uYXYgYSB7CiAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjcyKTsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgZm9udC1zaXplOiAxM3B4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGV0dGVyLXNwYWNpbmc6IC4wMjVlbTsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwogIHRyYW5zaXRpb246IGNvbG9yIC4yOHMgZWFzZSwgdHJhbnNmb3JtIC4yOHMgZWFzZTsKfQouemR4LWNlbnRlci1uYXYgYTpob3ZlciB7CiAgY29sb3I6ICNmZmY7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwp9Ci56ZHgtYWN0aW9ucyB7CiAganVzdGlmeS1zZWxmOiBlbmQ7CiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGdhcDogMTBweDsKfQouemR4LXZlcmlmeSwKLnpkeC1jb250YWN0LAouemR4LW1lbnUtdG9nZ2xlIHsKICBtaW4taGVpZ2h0OiA0NHB4OwogIGRpc3BsYXk6IGlubGluZS1mbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgY29sb3I6ICNmZmY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGZvbnQtc2l6ZTogMTNweDsKICBmb250LXdlaWdodDogNjUwOwogIGxldHRlci1zcGFjaW5nOiAuMDNlbTsKfQouemR4LXZlcmlmeSB7CiAgZ2FwOiA5cHg7CiAgcGFkZGluZzogMCAxOHB4Owp9Ci56ZHgtdmVyaWZ5OjpiZWZvcmUgewogIGNvbnRlbnQ6ICIiOwogIHdpZHRoOiA3cHg7CiAgaGVpZ2h0OiA3cHg7CiAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgYmFja2dyb3VuZDogIzRlY2JmZjsKICBib3gtc2hhZG93OiAwIDAgMTZweCByZ2JhKDc4LDIwMywyNTUsLjcyKTsKfQouemR4LWNvbnRhY3QgewogIHdpZHRoOiA0NHB4OwogIGZvbnQtc2l6ZTogMTZweDsKfQouemR4LW1lbnUtdG9nZ2xlIHsKICB3aWR0aDogNDRweDsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KLnpkeC1tZW51LWljb24gewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB3aWR0aDogMThweDsKICBoZWlnaHQ6IDE0cHg7Cn0KLnpkeC1tZW51LWljb24gc3BhbiB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGxlZnQ6IDA7CiAgd2lkdGg6IDE4cHg7CiAgaGVpZ2h0OiAycHg7CiAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yOwogIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuNXMgZWFzZS1vdXQsIG9wYWNpdHkgLjVzIGVhc2Utb3V0LCB0b3AgLjVzIGVhc2Utb3V0Owp9Ci56ZHgtbWVudS1pY29uIHNwYW46bnRoLWNoaWxkKDEpIHsgdG9wOiAwOyB9Ci56ZHgtbWVudS1pY29uIHNwYW46bnRoLWNoaWxkKDIpIHsgdG9wOiA2cHg7IH0KLnpkeC1tZW51LWljb24gc3BhbjpudGgtY2hpbGQoMykgeyB0b3A6IDEycHg7IH0KYm9keS56ZHgtbWVudS1vcGVuIC56ZHgtbWVudS1pY29uIHNwYW46bnRoLWNoaWxkKDEpIHsgdG9wOiA2cHg7IHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsgfQpib2R5LnpkeC1tZW51LW9wZW4gLnpkeC1tZW51LWljb24gc3BhbjpudGgtY2hpbGQoMikgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHNjYWxlKC41KSByb3RhdGUoMTgwZGVnKTsgfQpib2R5LnpkeC1tZW51LW9wZW4gLnpkeC1tZW51LWljb24gc3BhbjpudGgtY2hpbGQoMykgeyB0b3A6IDZweDsgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsgfQouemR4LW1vYmlsZS1tZW51IHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgbGVmdDogY2xhbXAoMTJweCwgM3Z3LCA0MnB4KTsKICByaWdodDogY2xhbXAoMTJweCwgM3Z3LCA0MnB4KTsKICB0b3A6IDc2cHg7CiAgei1pbmRleDogMjE0NzQ4MjQwMDsKICBkaXNwbGF5OiBncmlkOwogIGdhcDogOHB4OwogIHBhZGRpbmc6IDE0cHg7CiAgY29sb3I6ICNmZmY7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEpOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xKTsKICBib3JkZXItcmFkaXVzOiAyMnB4OwogIGJhY2tncm91bmQ6IHJnYmEoOCw5LDEwLC45NSk7CiAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMThweCk7CiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDE4cHgpOwogIGJveC1zaGFkb3c6IDAgMjZweCA3MHB4IHJnYmEoMCwwLDAsLjM0KTsKICBvcGFjaXR5OiAwOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTZweCk7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuNXMgZWFzZS1vdXQsIHRyYW5zZm9ybSAuNXMgZWFzZS1vdXQ7Cn0KYm9keS56ZHgtbWVudS1vcGVuIC56ZHgtbW9iaWxlLW1lbnUgewogIG9wYWNpdHk6IDE7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogIHBvaW50ZXItZXZlbnRzOiBhdXRvOwp9Ci56ZHgtbW9iaWxlLW1lbnUgYSB7CiAgbWluLWhlaWdodDogNDRweDsKICBkaXNwbGF5OiBmbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIHBhZGRpbmc6IDAgMTNweDsKICBib3JkZXItcmFkaXVzOiAxNHB4OwogIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC43OCk7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGZvbnQtc2l6ZTogMTRweDsKICBmb250LXdlaWdodDogNjUwOwogIGxldHRlci1zcGFjaW5nOiAuMDNlbTsKICBvcGFjaXR5OiAwOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTJweCk7CiAgdHJhbnNpdGlvbjogY29sb3IgLjI1cyBlYXNlLCBiYWNrZ3JvdW5kIC4yNXMgZWFzZSwgb3BhY2l0eSAuNXMgZWFzZS1vdXQsIHRyYW5zZm9ybSAuNXMgZWFzZS1vdXQ7Cn0KYm9keS56ZHgtbWVudS1vcGVuIC56ZHgtbW9iaWxlLW1lbnUgYSB7CiAgb3BhY2l0eTogMTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7Cn0KLnpkeC1tb2JpbGUtbWVudSBhOmhvdmVyIHsKICBjb2xvcjogI2ZmZjsKICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LC4wNik7Cn0KLnpkeC1tb2JpbGUtbWVudSBhOjphZnRlciB7CiAgY29udGVudDogIuKAuiI7CiAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjM0KTsKICBmb250LXNpemU6IDIwcHg7Cn0KLnpkeC1tb2JpbGUtYWN0aW9ucyBhOjphZnRlciB7CiAgZGlzcGxheTogbm9uZTsKfQouemR4LW1vYmlsZS1hY3Rpb25zIHsKICBkaXNwbGF5OiBub25lOwogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICBnYXA6IDEwcHg7CiAgbWFyZ2luLXRvcDogOHB4OwogIHBhZGRpbmctdG9wOiAxMnB4OwogIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xKTsKfQouemR4LW1vYmlsZS1hY3Rpb25zIGEgewogIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIGNvbG9yOiAjZmZmOwp9CkBtZWRpYSAobWF4LXdpZHRoOiAxMTgwcHgpIHsKICAuemR4LWNlbnRlci1uYXYgeyBkaXNwbGF5OiBub25lOyB9Cn0KQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7CiAgLnpkeC1jaW5lbWF0aWMtbmF2IHsKICAgIG1pbi1oZWlnaHQ6IDY4cHg7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyIGF1dG87CiAgICBwYWRkaW5nOiAxMnB4IDE0cHg7CiAgfQogIC56ZHgtYnJhbmQgewogICAgd2lkdGg6IDQ2cHg7CiAgICBtaW4taGVpZ2h0OiA0NnB4OwogICAgcGFkZGluZzogN3B4OwogIH0KICAuemR4LWJyYW5kLXdvcmQsCiAgLnpkeC1jb250YWN0LAogIC56ZHgtdmVyaWZ5IHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQogIC56ZHgtYWN0aW9ucyB7IGdhcDogMDsgfQogIC56ZHgtbW9iaWxlLW1lbnUgeyB0b3A6IDY4cHg7IH0KICAuemR4LW1vYmlsZS1hY3Rpb25zIHsgZGlzcGxheTogZ3JpZDsgfQp9CkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgLnpkeC1hbmltYXRlLWJsdXItZmFkZS11cCwKICAuemR4LW1vYmlsZS1tZW51LAogIC56ZHgtbW9iaWxlLW1lbnUgYSwKICAuemR4LW1lbnUtaWNvbiBzcGFuIHsKICAgIGFuaW1hdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogLjAxbXMgIWltcG9ydGFudDsKICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDsKICAgIGZpbHRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7CiAgfQp9Cjwvc3R5bGU+CjwvaGVhZD4NCjxib2R5IGNsYXNzPSJuby1zY3JvbGwgemRveGlnLXdwLXBhZ2UgaW50cm8tbG9hZGluZyBzY2VuZS1ob21lIj4KCjxoZWFkZXIgY2xhc3M9InpkeC1jaW5lbWF0aWMtbmF2IiBpZD0iemR4LWNpbmVtYXRpYy1uYXYiIGFyaWEtbGFiZWw9IlpET1hJRyDlhajlsYDlr7zoiKoiPgogIDxhIGNsYXNzPSJ6ZHgtYnJhbmQgemR4LWxpcXVpZC1nbGFzcyB6ZHgtYW5pbWF0ZS1ibHVyLWZhZGUtdXAiIHN0eWxlPSJhbmltYXRpb24tZGVsYXk6MG1zIiBocmVmPSIvIiB0YXJnZXQ9Il90b3AiIGFyaWEtbGFiZWw9IlpET1hJRyDlrpjnvZHpppbpobUiPgogICAgPHNwYW4gY2xhc3M9InpkeC1icmFuZC1tYXJrIiBhcmlhLWhpZGRlbj0idHJ1ZSI+Wjwvc3Bhbj4KICAgIDxzcGFuIGNsYXNzPSJ6ZHgtYnJhbmQtd29yZCI+WkRPWElHPC9zcGFuPgogIDwvYT4KICA8bmF2IGNsYXNzPSJ6ZHgtY2VudGVyLW5hdiB6ZHgtbGlxdWlkLWdsYXNzIiBhcmlhLWxhYmVsPSLkuLvopoHlr7zoiKoiPjxhIGhyZWY9Ii8iIHRhcmdldD0iX3RvcCIgY2xhc3M9InpkeC1hbmltYXRlLWJsdXItZmFkZS11cCIgc3R5bGU9ImFuaW1hdGlvbi1kZWxheToxMDBtcyI+6aaW6aG1PC9hPjxhIGhyZWY9Ii9pbmRleC5waHAvYnJhbmQtc3RvcnkvIiB0YXJnZXQ9Il90b3AiIGNsYXNzPSJ6ZHgtYW5pbWF0ZS1ibHVyLWZhZGUtdXAiIHN0eWxlPSJhbmltYXRpb24tZGVsYXk6MTUwbXMiPuWTgeeJjOaVheS6izwvYT48YSBocmVmPSIvaW5kZXgucGhwL2NvbGxlY3Rpb25zLyIgdGFyZ2V0PSJfdG9wIiBjbGFzcz0iemR4LWFuaW1hdGUtYmx1ci1mYWRlLXVwIiBzdHlsZT0iYW5pbWF0aW9uLWRlbGF5OjIwMG1zIj7ohZXooajns7vliJc8L2E+PGEgaHJlZj0iL2luZGV4LnBocC9jcmFmdC8iIHRhcmdldD0iX3RvcCIgY2xhc3M9InpkeC1hbmltYXRlLWJsdXItZmFkZS11cCIgc3R5bGU9ImFuaW1hdGlvbi1kZWxheToyNTBtcyI+5Yi26KGo5bel6Im6PC9hPjxhIGhyZWY9Ii9pbmRleC5waHAvbmV3cy1jZW50ZXIvIiB0YXJnZXQ9Il90b3AiIGNsYXNzPSJ6ZHgtYW5pbWF0ZS1ibHVyLWZhZGUtdXAiIHN0eWxlPSJhbmltYXRpb24tZGVsYXk6MzAwbXMiPuaWsOmXu+S4reW\/gzwvYT48L25hdj4KICA8ZGl2IGNsYXNzPSJ6ZHgtYWN0aW9ucyI+CiAgICA8YSBjbGFzcz0iemR4LXZlcmlmeSB6ZHgtbGlxdWlkLWdsYXNzIHpkeC1hbmltYXRlLWJsdXItZmFkZS11cCIgc3R5bGU9ImFuaW1hdGlvbi1kZWxheTozNTBtcyIgaHJlZj0iL2luZGV4LnBocC92ZXJpZnkvIiB0YXJnZXQ9Il90b3AiPuafpemqjOiFleihqDwvYT4KICAgIDxhIGNsYXNzPSJ6ZHgtY29udGFjdCB6ZHgtbGlxdWlkLWdsYXNzIHpkeC1hbmltYXRlLWJsdXItZmFkZS11cCIgc3R5bGU9ImFuaW1hdGlvbi1kZWxheTo0MDBtcyIgaHJlZj0iL2luZGV4LnBocC9wYXJ0bmVycy8iIHRhcmdldD0iX3RvcCIgYXJpYS1sYWJlbD0i6IGU57O75oiR5LusIj7ogZQ8L2E+CiAgICA8YnV0dG9uIGNsYXNzPSJ6ZHgtbWVudS10b2dnbGUgemR4LWxpcXVpZC1nbGFzcyB6ZHgtYW5pbWF0ZS1ibHVyLWZhZGUtdXAiIHN0eWxlPSJhbmltYXRpb24tZGVsYXk6MzUwbXMiIGlkPSJ6ZHgtbWVudS10b2dnbGUiIHR5cGU9ImJ1dHRvbiIgYXJpYS1sYWJlbD0i5omT5byA6I+c5Y2VIiBhcmlhLWV4cGFuZGVkPSJmYWxzZSI+CiAgICAgIDxzcGFuIGNsYXNzPSJ6ZHgtbWVudS1pY29uIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHNwYW4+PC9zcGFuPjxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PC9zcGFuPgogICAgPC9idXR0b24+CiAgPC9kaXY+CjwvaGVhZGVyPgo8bmF2IGNsYXNzPSJ6ZHgtbW9iaWxlLW1lbnUiIGlkPSJ6ZHgtbW9iaWxlLW1lbnUiIGFyaWEtbGFiZWw9Iuenu+WKqOWvvOiIqiI+CiAgPGEgaHJlZj0iLyIgdGFyZ2V0PSJfdG9wIiBzdHlsZT0idHJhbnNpdGlvbi1kZWxheTowbXMiPummlumhtTwvYT48YSBocmVmPSIvaW5kZXgucGhwL2JyYW5kLXN0b3J5LyIgdGFyZ2V0PSJfdG9wIiBzdHlsZT0idHJhbnNpdGlvbi1kZWxheTo1MG1zIj7lk4HniYzmlYXkuos8L2E+PGEgaHJlZj0iL2luZGV4LnBocC9jb2xsZWN0aW9ucy8iIHRhcmdldD0iX3RvcCIgc3R5bGU9InRyYW5zaXRpb24tZGVsYXk6MTAwbXMiPuiFleihqOezu+WIlzwvYT48YSBocmVmPSIvaW5kZXgucGhwL2NyYWZ0LyIgdGFyZ2V0PSJfdG9wIiBzdHlsZT0idHJhbnNpdGlvbi1kZWxheToxNTBtcyI+5Yi26KGo5bel6Im6PC9hPjxhIGhyZWY9Ii9pbmRleC5waHAvbmV3cy1jZW50ZXIvIiB0YXJnZXQ9Il90b3AiIHN0eWxlPSJ0cmFuc2l0aW9uLWRlbGF5OjIwMG1zIj7mlrDpl7vkuK3lv4M8L2E+PGEgaHJlZj0iL2luZGV4LnBocC92ZXJpZnkvIiB0YXJnZXQ9Il90b3AiIHN0eWxlPSJ0cmFuc2l0aW9uLWRlbGF5OjI1MG1zIj7nnJ\/kvKrmn6Xpqow8L2E+PGEgaHJlZj0iL2luZGV4LnBocC9zZXJ2aWNlLyIgdGFyZ2V0PSJfdG9wIiBzdHlsZT0idHJhbnNpdGlvbi1kZWxheTozMDBtcyI+5pyN5Yqh5pSv5oyBPC9hPjxhIGhyZWY9Ii9pbmRleC5waHAvcGFydG5lcnMvIiB0YXJnZXQ9Il90b3AiIHN0eWxlPSJ0cmFuc2l0aW9uLWRlbGF5OjM1MG1zIj7ogZTns7vmiJHku6w8L2E+CiAgPGRpdiBjbGFzcz0iemR4LW1vYmlsZS1hY3Rpb25zIj4KICAgIDxhIGNsYXNzPSJ6ZHgtbGlxdWlkLWdsYXNzIiBocmVmPSIvaW5kZXgucGhwL3ZlcmlmeS8iIHRhcmdldD0iX3RvcCI+5p+l6aqM6IWV6KGoPC9hPgogICAgPGEgY2xhc3M9InpkeC1saXF1aWQtZ2xhc3MiIGhyZWY9Ii9pbmRleC5waHAvcGFydG5lcnMvIiB0YXJnZXQ9Il90b3AiPuiBlOezu+aIkeS7rDwvYT4KICA8L2Rpdj4KPC9uYXY+DQogICAgPGRpdiBjbGFzcz0ic2NlbmUtdHJhbnNpdGlvbi1tZWRpYSIgYXJpYS1oaWRkZW49InRydWUiPg0KICAgICAgICA8aW1nIGNsYXNzPSJzY2VuZS10cmFuc2l0aW9uLWRhcmsiIHNyYz0iaHR0cHM6Ly96ZG94aWcuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA2L3pkb3hpZy1jcmFmdC1tYWtpbmctODM5ZTA3ZjlmMTlmLmpwZyIgYWx0PSIiPg0KICAgICAgICA8aW1nIGNsYXNzPSJzY2VuZS10cmFuc2l0aW9uLWxpZ2h0IiBzcmM9Imh0dHBzOi8vemRveGlnLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi96ZG94aWctemQwMDctYmx1ZS13aGl0ZS04OGE1NDM3YjA1OWIuanBnIiBhbHQ9IiI+DQogICAgPC9kaXY+DQoNCiAgICA8IS0tIDAuIOaegeeugOWknOWFieWKoOi9vemhte+8muWujOWFqOa4heeQhuWkmuS9meaWh+Wtl++8jOe6r+WHgOWxheS4rSAtLT4NCiAgICA8ZGl2IGlkPSJwcmVsb2FkZXIiIGNsYXNzPSJmaXhlZCBpbnNldC0wIHotWzk5OTldIGJnLVt2YXIoLS1tb2Rlcm4tZGFyayldIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJlbG9hZGVyLXN5c3RlbSIgYXJpYS1sYWJlbD0iWkRPWElHIGxvYWRpbmciPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJlbG9hZGVyLW1hcmsgZm9udC1kaXNwbGF5IiBpZD0icHJlbG9hZGVyLWxvZ28iIGFyaWEtbGFiZWw9IlpET1hJRyI+DQogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9Ii0taTowIj5aPC9zcGFuPjxzcGFuIHN0eWxlPSItLWk6MSI+RDwvc3Bhbj48c3BhbiBzdHlsZT0iLS1pOjIiPk88L3NwYW4+PHNwYW4gc3R5bGU9Ii0taTozIj5YPC9zcGFuPjxzcGFuIHN0eWxlPSItLWk6NCI+STwvc3Bhbj48c3BhbiBzdHlsZT0iLS1pOjUiPkc8L3NwYW4+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZWxvYWRlci1jaXJjbGVzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+DQogICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjE4IDIxOCI+DQogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9InRyYWNrIiBjeD0iMTA5IiBjeT0iMTA5IiByPSIxMDgiPjwvY2lyY2xlPg0KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJwcm9ncmVzcyIgY3g9IjEwOSIgY3k9IjEwOSIgcj0iMTA4Ij48L2NpcmNsZT4NCiAgICAgICAgICAgICAgICA8L3N2Zz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJlbG9hZGVyLWNvdW50ZXIgZm9udC1kaXNwbGF5IiBpZD0icHJlbG9hZGVyLWNvdW50ZXIiIGFyaWEtbGl2ZT0icG9saXRlIj4wMDA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZWxvYWRlci1wcm9ncmVzcy1iYXIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3BhbiBpZD0icHJlbG9hZGVyLXByb2dyZXNzLWxpbmUiPjwvc3Bhbj48L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPCEtLSAxLiDlhajlsY\/msonmtbjlvI\/oj5zljZUgLS0+DQogICAgICAgICAgICA8ZGl2IGlkPSJmdWxsLW1lbnUiIGNsYXNzPSJmaXhlZCBpbnNldC0wIHotWzEwMF0gYmctWyMwNTA1MDVdLzk1IGJhY2tkcm9wLWJsdXIteGwgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgcG9pbnRlci1ldmVudHMtbm9uZSBvcGFjaXR5LTAgaW52aXNpYmxlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtNiByaWdodC02IG1kOnRvcC0xMCBtZDpyaWdodC0xMiBjdXJzb3ItcG9pbnRlciBncm91cCBwLTQgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMiIGlkPSJjbG9zZS1tZW51Ij4KICAgICAgICAgICAgPHNwYW4gaWQ9ImNsb3NlX21lbnVfdGV4dCIgY2xhc3M9ImZvbnQtZGlzcGxheSB0ZXh0LVsxMHB4XSB0cmFja2luZy1bMC4yZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzUwIGdyb3VwLWhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMiPuWFs+mXrTwvc3Bhbj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUgdy02IGgtNiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMCB3LWZ1bGwgaC1bMnB4XSBiZy13aGl0ZSByb3RhdGUtNDUgdHJhbnNmb3JtIG9yaWdpbi1jZW50ZXIgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZ3JvdXAtaG92ZXI6c2NhbGUtMTEwIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIHRvcC0xLzIgbGVmdC0wIHctZnVsbCBoLVsycHhdIGJnLXdoaXRlIC1yb3RhdGUtNDUgdHJhbnNmb3JtIG9yaWdpbi1jZW50ZXIgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZ3JvdXAtaG92ZXI6c2NhbGUtMTEwIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPG5hdiBjbGFzcz0iZnVsbC1tZW51LWRpcmVjdG9yeSBncmlkIGdyaWQtY29scy0xIHNtOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zIGdhcC14LTEwIGdhcC15LTMgbWQ6Z2FwLXktNCB0ZXh0LWxlZnQgdy1mdWxsIG1heC13LTZ4bCBweC04Ij4KICAgICAgICAgICAgPGEgaHJlZj0iI2hvbWUiIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1saW5rIGZvbnQtZGlzcGxheSB0ZXh0LXhsIG1kOnRleHQtM3hsIGxnOnRleHQtNHhsIHRleHQtd2hpdGUvNDAgaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyB0cmFuc2xhdGUteS0xMCBvcGFjaXR5LTAgcGItMSI+6aaW6aG1PC9hPgogICAgICAgICAgICA8YSBocmVmPSIvaW5kZXgucGhwL2JyYW5kLXN0b3J5LyIgdGFyZ2V0PSJfdG9wIiBjbGFzcz0ibWVudS1pdGVtIG1lbnUtbGluayBmb250LWRpc3BsYXkgdGV4dC14bCBtZDp0ZXh0LTN4bCBsZzp0ZXh0LTR4bCB0ZXh0LXdoaXRlLzQwIGhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgdHJhbnNsYXRlLXktMTAgb3BhY2l0eS0wIHBiLTEiPuWTgeeJjOaVheS6izwvYT4KICAgICAgICAgICAgPGEgaHJlZj0iL2luZGV4LnBocC9jb2xsZWN0aW9ucy8iIHRhcmdldD0iX3RvcCIgY2xhc3M9Im1lbnUtaXRlbSBtZW51LWxpbmsgZm9udC1kaXNwbGF5IHRleHQteGwgbWQ6dGV4dC0zeGwgbGc6dGV4dC00eGwgdGV4dC13aGl0ZS80MCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIHRyYW5zbGF0ZS15LTEwIG9wYWNpdHktMCBwYi0xIj7ohZXooajns7vliJc8L2E+CiAgICAgICAgICAgIDxhIGhyZWY9Ii9pbmRleC5waHAvY3JhZnQvIiB0YXJnZXQ9Il90b3AiIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1saW5rIGZvbnQtZGlzcGxheSB0ZXh0LXhsIG1kOnRleHQtM3hsIGxnOnRleHQtNHhsIHRleHQtd2hpdGUvNDAgaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyB0cmFuc2xhdGUteS0xMCBvcGFjaXR5LTAgcGItMSI+5Yi26KGo5bel6Im6PC9hPgogICAgICAgICAgICA8YSBocmVmPSIvaW5kZXgucGhwL3ZlcmlmeS8iIHRhcmdldD0iX3RvcCIgY2xhc3M9Im1lbnUtaXRlbSBtZW51LWxpbmsgZm9udC1kaXNwbGF5IHRleHQteGwgbWQ6dGV4dC0zeGwgbGc6dGV4dC00eGwgdGV4dC13aGl0ZS80MCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIHRyYW5zbGF0ZS15LTEwIG9wYWNpdHktMCBwYi0xIj7nnJ\/kvKrmn6Xpqow8L2E+CiAgICAgICAgICAgIDxhIGhyZWY9Ii9pbmRleC5waHAvc2VydmljZS8iIHRhcmdldD0iX3RvcCIgY2xhc3M9Im1lbnUtaXRlbSBtZW51LWxpbmsgZm9udC1kaXNwbGF5IHRleHQteGwgbWQ6dGV4dC0zeGwgbGc6dGV4dC00eGwgdGV4dC13aGl0ZS80MCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIHRyYW5zbGF0ZS15LTEwIG9wYWNpdHktMCBwYi0xIj7mnI3liqHmlK\/mjIE8L2E+CiAgICAgICAgICAgIDxhIGhyZWY9Ii9pbmRleC5waHAvcGFydG5lcnMvIiB0YXJnZXQ9Il90b3AiIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1saW5rIGZvbnQtZGlzcGxheSB0ZXh0LXhsIG1kOnRleHQtM3hsIGxnOnRleHQtNHhsIHRleHQtd2hpdGUvNDAgaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyB0cmFuc2xhdGUteS0xMCBvcGFjaXR5LTAgcGItMSI+6IGU57O75oiR5LusPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvaW5kZXgucGhwL25ld3MtY2VudGVyLyIgdGFyZ2V0PSJfdG9wIiBjbGFzcz0ibWVudS1pdGVtIG1lbnUtbGluayBmb250LWRpc3BsYXkgdGV4dC14bCBtZDp0ZXh0LTN4bCBsZzp0ZXh0LTR4bCB0ZXh0LXdoaXRlLzQwIGhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgdHJhbnNsYXRlLXktMTAgb3BhY2l0eS0wIHBiLTEiPuaWsOmXu+S4reW\/gzwvYT4KICAgICAgICA8L25hdj4KICAgIDwvZGl2Pg0KDQogICAgPCEtLSAyLiDliqjmhJ\/pobbpg6jlr7zoiKogLS0+DQogICAgPGhlYWRlciBjbGFzcz0iZml4ZWQgei01MCBuYXYtc2hlbGwiIGlkPSJuYXZiYXIiPg0KICAgICAgICA8YSBocmVmPSIjaG9tZSIgaWQ9ImJyYW5kLWhvbWUiIGNsYXNzPSJuYXYtYnJhbmQtcGlsbCBmb250LWRpc3BsYXkgZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlIGN1cnNvci1wb2ludGVyIiBhcmlhLWxhYmVsPSJaRE9YSUcg5a6Y572R6aaW6aG1Ij48c3BhbiBjbGFzcz0ibmF2LWJyYW5kLW1hcmsiIGFyaWEtaGlkZGVuPSJ0cnVlIj5aPC9zcGFuPjxzcGFuIGNsYXNzPSJuYXYtYnJhbmQtbmFtZSI+WkRPWElHPC9zcGFuPjwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxuYXYgaWQ9InRvcC1uYXYiIGNsYXNzPSJuYXYtY2VudGVyLXBpbGwgaGlkZGVuIHhsOmZsZXggZm9udC1kaXNwbGF5Ij4KICAgICAgICAgICAgPGEgaHJlZj0iI2hvbWUiIGNsYXNzPSJob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIiBkYXRhLXRvcC1pbmRleD0iMCI+6aaW6aG1PC9hPgogICAgICAgICAgICA8YSBocmVmPSIvaW5kZXgucGhwL2JyYW5kLXN0b3J5LyIgdGFyZ2V0PSJfdG9wIiBjbGFzcz0iaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyIgZGF0YS10b3AtaW5kZXg9IjEiPuWTgeeJjOaVheS6izwvYT4KICAgICAgICAgICAgPGEgaHJlZj0iL2luZGV4LnBocC9jb2xsZWN0aW9ucy8iIHRhcmdldD0iX3RvcCIgY2xhc3M9ImhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMiIGRhdGEtdG9wLWluZGV4PSIyIj7ohZXooajns7vliJc8L2E+CiAgICAgICAgICAgIDxhIGhyZWY9Ii9pbmRleC5waHAvY3JhZnQvIiB0YXJnZXQ9Il90b3AiIGNsYXNzPSJob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIiBkYXRhLXRvcC1pbmRleD0iMyI+5Yi26KGo5bel6Im6PC9hPgogICAgICAgICAgICA8YSBocmVmPSIvaW5kZXgucGhwL3ZlcmlmeS8iIHRhcmdldD0iX3RvcCIgY2xhc3M9ImhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMiIGRhdGEtdG9wLWluZGV4PSI0Ij7nnJ\/kvKrmn6Xpqow8L2E+CiAgICAgICAgICAgIDxhIGhyZWY9Ii9pbmRleC5waHAvc2VydmljZS8iIHRhcmdldD0iX3RvcCIgY2xhc3M9ImhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMiIGRhdGEtdG9wLWluZGV4PSI1Ij7mnI3liqHmlK\/mjIE8L2E+CiAgICAgICAgICAgIDxhIGhyZWY9Ii9pbmRleC5waHAvcGFydG5lcnMvIiB0YXJnZXQ9Il90b3AiIGNsYXNzPSJob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIiBkYXRhLXRvcC1pbmRleD0iNiI+6IGU57O75oiR5LusPC9hPgogICAgICAgICAgICA8YSBocmVmPSIvaW5kZXgucGhwL25ld3MtY2VudGVyLyIgdGFyZ2V0PSJfdG9wIiBjbGFzcz0iaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyI+5paw6Ze75Lit5b+DPC9hPgogICAgICAgIDwvbmF2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJuYXYtYWN0aW9ucyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCI+DQogICAgICAgICAgICA8YSBocmVmPSIjdmF1bHQiIGNsYXNzPSJuYXYtdmF1bHQtY3RhIG5hdi1hY3Rpb24tcGlsbCBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgZm9udC1kaXNwbGF5IiBhcmlhLWxhYmVsPSLmn6XpqozohZXooajnnJ\/kvKoiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYXYtdmF1bHQtbWFyayIgYXJpYS1oaWRkZW49InRydWUiPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICA8c3BhbiBpZD0ibmF2X3ZlcmlmeV9jdGEiIGNsYXNzPSJuYXYtdmF1bHQtbGFiZWwiPuafpemqjOiFleihqDwvc3Bhbj4NCiAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgIDwhLS0g5Zu96ZmF5YyW5Lit6Iux5YiH5o2iIC0tPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2LWxhbmctcGlsbCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBmb250LWRpc3BsYXkgY3Vyc29yLXBvaW50ZXIgei01MCIgaWQ9Imxhbmctc3dpdGNoIj4NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC13aGl0ZSBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIiBpZD0iYnRuLWNuIiBvbmNsaWNrPSJzd2l0Y2hMYW5nKCdjbicpIj7kuK08L3NwYW4+DQogICAgICAgICAgICAgICAgPHNwYW4+Lzwvc3Bhbj4NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyIgaWQ9ImJ0bi1lbiIgb25jbGljaz0ic3dpdGNoTGFuZygnZW4nKSI+RU48L3NwYW4+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwhLS0gTWVudSDmjInpkq4gLS0+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJuYXYtbWVudS1waWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIG1kOmdhcC00IGN1cnNvci1wb2ludGVyIGdyb3VwIiBpZD0ibWVudS1idG4iPg0KICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJtZW51X2J0bl90ZXh0IiBjbGFzcz0iZm9udC1kaXNwbGF5IHRleHQtWzEwcHhdIHRyYWNraW5nLVswLjEyZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzcwIGdyb3VwLWhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgaGlkZGVuIG1kOmJsb2NrIj7oj5zljZU8L3NwYW4+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2LW1lbnUtbGluZXMgZmxleCBmbGV4LWNvbCBnYXAtWzRweF0gaXRlbXMtZW5kIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idy04IGgtWzJweF0gYmctd2hpdGUgdHJhbnNmb3JtIG9yaWdpbi1yaWdodCB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0zMDAgZ3JvdXAtaG92ZXI6c2NhbGUteC03NSI+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InctNSBoLVsycHhdIGJnLXdoaXRlIHRyYW5zZm9ybSBvcmlnaW4tcmlnaHQgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMzAwIGdyb3VwLWhvdmVyOnNjYWxlLXgtMTAwIj48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idy04IGgtWzJweF0gYmctd2hpdGUgdHJhbnNmb3JtIG9yaWdpbi1yaWdodCB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0zMDAgZ3JvdXAtaG92ZXI6c2NhbGUteC01MCI+PC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9oZWFkZXI+DQoNCjxkaXYgaWQ9InNjcm9sbC1zY2VuZS1iYWNrZHJvcCIgYXJpYS1oaWRkZW49InRydWUiPjxpbWcgaWQ9InNjcm9sbC1zY2VuZS1pbWFnZSIgYWx0PSIiPjwvZGl2Pg0KDQo8bWFpbiBpZD0ibWFpbi1jb250ZW50Ij4NCg0KDQogICAgPCEtLSAzLiDjgJDnu53lr7nkv53nlZnjgJHpppblsY\/vvJrlm77niYfova7mkq0gKyDkuIvmlrnpgI\/mmI7pgInpobkgLS0+DQogICAgPHNlY3Rpb24gaWQ9ImhvbWUiIGNsYXNzPSJob21lLWNpbmVtYXRpYy1pbnNldCByZWxhdGl2ZSB3LWZ1bGwgY2xpcC1kaWFnb25hbCIgZGF0YS1zY2VuZS1iZz0iIzAwMDAwMCIgZGF0YS1zY2VuZS1mZz0iI0UxRTBDQyIgZGF0YS1zY2VuZS1hY2NlbnQ9IiNERURCQzgiIGRhdGEtc2NlbmUtaW1hZ2U9Imh0dHBzOi8vemRveGlnLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi96ZG94aWctemRveGlnLWhlcm8tbmlnaHQtOTk4ZGRjOTA4NDVmLndlYnAiIGRhdGEtc2NlbmUtb3BhY2l0eT0iLjE4Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iaG9tZS1jaW5lbWF0aWMtZnJhbWUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuIGJnLVt2YXIoLS1tb2Rlcm4tZGFyayldIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB6LTAgbm9pc2Utb3ZlcmxheSBoZXJvLW1lZGlhLWZ1c2lvbiI+DQogICAgICAgICAgICA8IS0tIOW6leWxguiDjOaZr+inhumikSAtLT4NCiAgICAgICAgICAgIDxpbWcgaWQ9Imhlcm8tdmlkZW8iIHNyYz0iaHR0cHM6Ly96ZG94aWcuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA2L3pkb3hpZy02NjUzY2U4ZjUwOWM5Y2NkODc4NzExYTUyZjJjNDhjZi01NjhkYWY4N2FmZjgucG5nIiBsb2FkaW5nPSJlYWdlciIgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgdy1mdWxsIGgtZnVsbCBvYmplY3QtY292ZXIgZmlsdGVyIGJyaWdodG5lc3MtWzEuMDhdIGNvbnRyYXN0LTEwNSBzYXR1cmF0ZS1bMS4xMl0iIGFsdD0iWkRPWElHIGNhbXBhaWduIGJhY2tkcm9wIj4NCiAgICAgICAgICAgIDwhLS0g54K55Ye76YCJ6aG55Y2h5pe25Lya5YiH5o2i6L+Z6YeM55qEIHNyYyAtLT4NCiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL3pkb3hpZy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDYvemRveGlnLTY2NTNjZThmNTA5YzljY2Q4Nzg3MTFhNTJmMmM0OGNmLTU2OGRhZjg3YWZmOC5wbmciIGxvYWRpbmc9ImVhZ2VyIiBjbGFzcz0idy1mdWxsIGgtZnVsbCBvYmplY3QtY292ZXIgZmlsdGVyIGJyaWdodG5lc3MtWzEuMDhdIGNvbnRyYXN0LTEwNSBzYXR1cmF0ZS1bMS4xMl0gdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTUwMCBlYXNlLWluLW91dCIgaWQ9Imhlcm8taW1nIiBhbHQ9IlpET1hJRyBXYXRjaCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bdmFyKC0tbW9kZXJuLWRhcmspXS8xMCB2aWEtdHJhbnNwYXJlbnQgdG8tW3ZhcigtLW1vZGVybi1kYXJrKV0vMjAgcG9pbnRlci1ldmVudHMtbm9uZSI+PC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZXJvLWJvdHRvbS1ibHVyIj48L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIA0KICAgICAgICA8ZGl2IGNsYXNzPSJyZWxhdGl2ZSB6LTEwIHRleHQtY2VudGVyIHctZnVsbCBtYXgtdy03eGwgcHgtNiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBtdC0xMiBtZDptdC0yMCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZXJvLWFnZW5jeS1iYWRnZSBsaXF1aWQtZ2xhc3MgZ3NhcC1oZXJvIG9wYWNpdHktMCB0cmFuc2xhdGUteS0xMCI+DQogICAgICAgICAgICAgICAgPHNwYW4+5YWo5pawPC9zcGFuPiAyMDI2IOW3peWOguebtOi+vuiFleihqOezu+WIl+eOsOW3suW8gOaUvg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9udC1ib2R5IHRleHQtWzEwcHhdIHRyYWNraW5nLVswLjM0ZW1dIHRleHQtd2hpdGUvNzUgbWItNCBtZDptYi01IGdzYXAtaGVybyBvcGFjaXR5LTAgdHJhbnNsYXRlLXktMTAgdXBwZXJjYXNlIGhlcm8tY29weS1tb3JwaCIgaWQ9Imhlcm9fc3ViIj7nlLflo6vml6XluLjohZXooag8L3NwYW4+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZXJvLW1ldGEtcm93IGdzYXAtaGVybyBvcGFjaXR5LTAgdHJhbnNsYXRlLXktMTAgaGVyby1jb3B5LW1vcnBoIiBhcmlhLWxhYmVsPSJaRE9YSUcgaG9tZXBhZ2UgbWV0YWRhdGEiPg0KICAgICAgICAgICAgICAgIDxzcGFuPjxpIGRhdGEtbHVjaWRlPSJmYWN0b3J5Ij48L2k+MjAg5bm05Yi26YCg5Z+656GAPC9zcGFuPg0KICAgICAgICAgICAgICAgIDxzcGFuPjxpIGRhdGEtbHVjaWRlPSJjaXJjbGUtZG90Ij48L2k+6L+b5Y+j5py66IqvPC9zcGFuPg0KICAgICAgICAgICAgICAgIDxzcGFuPjxpIGRhdGEtbHVjaWRlPSJzaGllbGQtY2hlY2siPjwvaT7lt6XljoLnm7Tovr48L3NwYW4+DQogICAgICAgICAgICAgICAgPHNwYW4+PGkgZGF0YS1sdWNpZGU9Imdsb2JlLTIiPjwvaT7otbDlkJHlhajnkIPmiYvohZU8L3NwYW4+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxoMSBjbGFzcz0iaGVyby10aXRsZS1maXQgZm9udC1kaXNwbGF5IGZvbnQtbm9ybWFsIGl0YWxpYyB0ZXh0LXdoaXRlIG1iLTUgbWQ6bWItNiBnc2FwLWhlcm8gb3BhY2l0eS0wIHRyYW5zbGF0ZS15LTEwIGhlcm8tY29weS1tb3JwaCIgaWQ9Imhlcm9fdGl0bGUiPg0KICAgICAgICAgICAgICAgIOeUt+ihqDxicj7nu4\/lhbjmrL4NCiAgICAgICAgICAgIDwvaDE+DQogICAgICAgICAgICA8cCBjbGFzcz0iZm9udC1saWdodCB0ZXh0LXdoaXRlLzYwIHRyYWNraW5nLXdpZGVzdCB0ZXh0LXhzIG1kOnRleHQtc20gbWF4LXctbWQgbXgtYXV0byBtYi03IG1kOm1iLTggZ3NhcC1oZXJvIG9wYWNpdHktMCB0cmFuc2xhdGUteS0xMCBsZWFkaW5nLXJlbGF4ZWQgaGVyby1jb3B5LW1vcnBoIiBpZD0iaGVyb19kZXNjIj4NCiAgICAgICAgICAgICAgICBaRE9YSUcg5omT6YCg6YeH55So55SE6YCJ6L+b5Y+j5py66Iqv55qE55+z6Iux5LiO5py65qKw6IWV6KGo44CCPGJyIGNsYXNzPSJoaWRkZW4gbWQ6YmxvY2siPuacjeWKoeeOsOS7o+eUt+Wjq++8jOS5n+aPkOS+m+eyvuiHtOWls+Wjq+aWueW9oumVtuefs+iFleihqOOAgg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ3NhcC1oZXJvIG9wYWNpdHktMCB0cmFuc2xhdGUteS0xMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtNSByZWxhdGl2ZSB6LTUwIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZXJvLWN0YS1yb3cgcG9pbnRlci1ldmVudHMtYXV0byI+DQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiN2YXVsdCIgY2xhc3M9Imhlcm8tY3RhLXByaW1hcnkgbGlxdWlkLWdsYXNzLXN0cm9uZyBoZXJvLWNvcHktbW9ycGgiIGlkPSJzY3JvbGwtdG8tZXhwbG9yZSI+5p+l6aqM6IWV6KGoIDxzcGFuPi0+PC9zcGFuPjwvYT4NCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL2luZGV4LnBocC93YXRjaC1kZXRhaWwtemQwMDcvP21vZGVsPXpkMDA3IiBjbGFzcz0iaGVyby1jdGEtZ2hvc3QgaGVyby1jb3B5LW1vcnBoIiBpZD0iaGVyby1kZXRhaWwtbGluayI+5p+l55yL55S36KGo6K+m5oOFIDxzcGFuPi0+PC9zcGFuPjwvYT4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZXJvLXN0YXRzLXJvdyBoZXJvLWNvcHktbW9ycGgiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZXJvLXN0YXQtY2FyZCBsaXF1aWQtZ2xhc3MiPjxzcGFuPjIwPC9zcGFuPjxzdHJvbmc+MjAg5bm0PC9zdHJvbmc+PGVtPuW3peWOguS+m+W6lOmTvuWfuuehgDwvZW0+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imhlcm8tc3RhdC1jYXJkIGxpcXVpZC1nbGFzcyI+PHNwYW4+R0w8L3NwYW4+PHN0cm9uZz7lhajnkIM8L3N0cm9uZz48ZW0+5LuO5Lit5Zu95bel5Y6C6LWw5ZCR5YWo55CD5omL6IWVPC9lbT48L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtd3JhcCBqdXN0aWZ5LWNlbnRlciBnYXAtMiBtZDpnYXAtMyBwb2ludGVyLWV2ZW50cy1hdXRvIG10LTEiIGlkPSJoZXJvLWNhcm91c2VsLW9wdGlvbnMiIGFyaWEtbGFiZWw9Ikhlcm8gYmFubmVyIG9wdGlvbnMiPg0KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Imhlcm8tb3B0aW9uIGFjdGl2ZSIgZGF0YS1zbGlkZT0iMCIgaWQ9Imhlcm9fdGFiMSI+55S36KGoPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iaGVyby1vcHRpb24iIGRhdGEtc2xpZGU9IjEiIGlkPSJoZXJvX3RhYjIiPum7kemSmzwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iaGVyby1vcHRpb24iIGRhdGEtc2xpZGU9IjIiIGlkPSJoZXJvX3RhYjMiPum7kee7vzwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0iaGVyby1tb2JpbGUtZG90cyIgYXJpYS1sYWJlbD0i6aaW5bGP6L2u5pKt6L+b5bqmIj4NCiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iaGVyby1tb2JpbGUtZG90IGFjdGl2ZSIgZGF0YS1zbGlkZT0iMCIgYXJpYS1sYWJlbD0i55S36KGo5bCB6Z2iIj48L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iaGVyby1tb2JpbGUtZG90IiBkYXRhLXNsaWRlPSIxIiBhcmlhLWxhYmVsPSLpu5HpkpvlsIHpnaIiPjwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Imhlcm8tbW9iaWxlLWRvdCIgZGF0YS1zbGlkZT0iMiIgYXJpYS1sYWJlbD0i6buR57u\/5bCB6Z2iIj48L2J1dHRvbj4KICAgICAgICA8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGJvdHRvbS04IGxlZnQtMS8yIC10cmFuc2xhdGUteC0xLzIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgb3BhY2l0eS04MCBnc2FwLWhlcm8gcG9pbnRlci1ldmVudHMtbm9uZSI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZXJvLXRydXN0LWJhciBsaXF1aWQtZ2xhc3MiPumdouWQkeeOsOS7o+iFleihqOa2iOi0ueiAheS4juWFqOeQg+mbtuWUruS8meS8tOeahOWPr+S\/oei1luWTgeeJjDwvZGl2Pg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imhlcm8tc2Nyb2xsLWxhYmVsIGZvbnQtZGlzcGxheSI+5ZCR5LiL5rua5YqoPC9zcGFuPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0idy1bMXB4XSBoLTEyIGJnLXdoaXRlLzIwIG92ZXJmbG93LWhpZGRlbiByZWxhdGl2ZSI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTAgdy1mdWxsIGgtZnVsbCBiZy13aGl0ZSBhbmltYXRlLVtzY3JvbGxEb3duXzJzX2luZmluaXRlXSI+PC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvc2VjdGlvbj4NCg0KICAgIDwhLS0gMy41IOOAkOS\/ruWlveeahOWkp+eJjOWumOe9kea7oeWxj+iBlOWKqOaooeWdl+OAkeW9u+W6lea2iOmZpOa7keWHuum7keWxj+eahCBCdWcgLS0+DQogICAgCjxzZWN0aW9uIGlkPSJ2aWRlby1zY3JvbGwtdHJhY2siIGNsYXNzPSJyZWxhdGl2ZSB3LWZ1bGwgYmctYmxhY2sgaC1bMTAwZHZoXSBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyLXkgYm9yZGVyLXdoaXRlLzUiIGRhdGEtc2NlbmUtYmc9IiMwMDAwMDAiIGRhdGEtc2NlbmUtZmc9IiNmZmZmZmYiIGRhdGEtc2NlbmUtYWNjZW50PSIjZmZmZmZmIiBkYXRhLXNjZW5lLWltYWdlPSJodHRwczovL3pkb3hpZy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDYvemRveGlnLXpkMDAzLXBvc3Rlci03MGViOWQ4NThjZTUucG5nIiBkYXRhLXNjZW5lLW9wYWNpdHk9Ii4xNiI+DQogICAgICAgIA0KICAgICAgICA8IS0tIOa7oeWxj+inhumikSAxICjpu5jorqTlnKjmnIDlupXlsYIpIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJ2aWRlby1zbGlkZSB2aWRlby1zbGlkZS0tZmllbGQgYWJzb2x1dGUgaW5zZXQtMCB6LTEwIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIiBkYXRhLXZpZGVvLW1vZGU9ImZpZWxkIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4NCiAgICAgICAgICAgICAgICA8dmlkZW8gY2xhc3M9InctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvdmVyIGZpbHRlciBicmlnaHRuZXNzLVswLjldIGNvbnRyYXN0LTEwNSBzYXR1cmF0ZS1bMS4xMl0gc2NhbGUtMTA1IiBhdXRvcGxheSBtdXRlZCBsb29wIHBsYXlzaW5saW5lIHByZWxvYWQ9Im5vbmUiIHBvc3Rlcj0iaHR0cHM6Ly96ZG94aWcuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA2L3pkb3hpZy16ZG94aWctaGVyby10aW1lLTNhZWViYWFjODQzMy53ZWJwIiBhcmlhLWxhYmVsPSJaRE9YSUcgY2luZW1hdGljIHdhdGNoIGZpbG0iPgogICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgZGF0YS1zcmM9Imh0dHBzOi8vemRveGlnLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi96ZG94aWctemQwMDMtZ3JlZW4tY2Y1OGZiZjgyODE4Lm1wNCIgdHlwZT0idmlkZW8vbXA0Ij4KICAgICAgICAgICAgICAgIDwvdmlkZW8+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bdmFyKC0tbW9kZXJuLWRhcmspXS8xOCB2aWEtdHJhbnNwYXJlbnQgdG8tW3ZhcigtLW1vZGVybi1kYXJrKV0vMzIgcG9pbnRlci1ldmVudHMtbm9uZSI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWxhdGl2ZSB6LTEwIHRleHQtY2VudGVyIHB4LTYgdy1mdWxsIG1heC13LTd4bCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9udC1kaXNwbGF5IHRleHQtWzlweF0gdHJhY2tpbmctWzAuNWVtXSB0ZXh0LVsjREVEQkM4XSBtYi00IG1kOm1iLTUgYmxvY2sgdXBwZXJjYXNlIiBpZD0idmlkMV9zdWIiPue+juWtpuWFiOmUizwvc3Bhbj4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iZm9udC1kaXNwbGF5IHRleHQtNHhsIG1kOnRleHQtN3hsIGZvbnQtYm9sZCB0ZXh0LXdoaXRlIG1iLTUgdXBwZXJjYXNlIiBpZD0idmlkMV90aXRsZSI+5YmN5567PGJyPuiuvuiuoTwvaDI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0idmlkZW8tc2xpZGUtY29weSIgaWQ9InZpZDFfZGVzYyI+5Lul5pW06KGo5q+U5L6L44CB5aSc5YWJ5bGC5qyh5LiO6KGo55uY5rex5bqm5bu656uL56ys5LiA55y86K+G5Yir77yM6K6p5b2x5YOP5YWI5oqK5L2p5oi05rCU6LSo6K6y5riF5qWa44CCPC9wPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmlkZW8tc2xpZGUtbWV0YSIgYXJpYS1sYWJlbD0i5b2x5YOP6YeN54K5Ij4KICAgICAgICAgICAgICAgICAgICA8Yj5aRDAwMzwvYj4KICAgICAgICAgICAgICAgICAgICA8Yj7ln47luILpgJrli6Q8L2I+CiAgICAgICAgICAgICAgICAgICAgPGI+5aSc5YWJ6KGo55uYPC9iPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWRlby1zbGlkZS1hY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0idmlkZW8tYWN0aW9uIiBocmVmPSIjc2hvd2Nhc2UtM2QiIGlkPSJ2aWQxX2N0YTEiPui\/m+WFpSAzRCDlsZXnpLo8L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InZpZGVvLWFjdGlvbiIgaHJlZj0iI2V4cGxvcmUiIGlkPSJ2aWQxX2N0YTIiPuafpeeci+iFleihqOezu+WIlzwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KDQogICAgICAgIDwhLS0g5ruh5bGP6KeG6aKRIDIgKOmaj+mhtemdouW+gOS4i+a7mu+8jOS7juS4i+aWueWujOe+juimhuebluS4iuadpSkgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9InZpZGVvLXNsaWRlIHZpZGVvLXNsaWRlLS1sdW1lIGFic29sdXRlIGluc2V0LTAgei0yMCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciIgZGF0YS12aWRlby1tb2RlPSJsdW1lIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4NCiAgICAgICAgICAgICAgICA8dmlkZW8gY2xhc3M9InctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvdmVyIGZpbHRlciBicmlnaHRuZXNzLVswLjg4XSBjb250cmFzdC0xMDUgc2F0dXJhdGUtWzEuMTJdIHNjYWxlLTEwNSIgYXV0b3BsYXkgbXV0ZWQgbG9vcCBwbGF5c2lubGluZSBwcmVsb2FkPSJub25lIiBwb3N0ZXI9Imh0dHBzOi8vemRveGlnLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi96ZG94aWctemRveGlnLWhlcm8tbmlnaHQtOTk4ZGRjOTA4NDVmLndlYnAiIGFyaWEtbGFiZWw9IlpET1hJRyBtZWNoYW5pY2FsIHdhdGNoIHZpZGVvIj4KICAgICAgICAgICAgICAgICAgICA8c291cmNlIGRhdGEtc3JjPSJodHRwczovL3pkb3hpZy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDYvemRveGlnLWZpbG0tMDEubXA0IiB0eXBlPSJ2aWRlby9tcDQiPgogICAgICAgICAgICAgICAgPC92aWRlbz4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmctZ3JhZGllbnQtdG8tYiBmcm9tLVt2YXIoLS1tb2Rlcm4tZGFyayldLzE4IHZpYS10cmFuc3BhcmVudCB0by1bdmFyKC0tbW9kZXJuLWRhcmspXS8zMiBwb2ludGVyLWV2ZW50cy1ub25lIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIHotMTAgdGV4dC1jZW50ZXIgcHgtNiB3LWZ1bGwgbWF4LXctN3hsIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb250LWRpc3BsYXkgdGV4dC1bOXB4XSB0cmFja2luZy1bMC41ZW1dIHRleHQtWyNERURCQzhdIG1iLTQgbWQ6bWItNSBibG9jayB1cHBlcmNhc2UiIGlkPSJ2aWQyX3N1YiI+5py65qKw6Im65pyvPC9zcGFuPgogICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJmb250LWRpc3BsYXkgdGV4dC00eGwgbWQ6dGV4dC03eGwgZm9udC1ib2xkIHRleHQtd2hpdGUgbWItNSB1cHBlcmNhc2UiIGlkPSJ2aWQyX3RpdGxlIj7nsr7lh4Y8YnI+5bel56iLPC9oMj4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ2aWRlby1zbGlkZS1jb3B5IiBpZD0idmlkMl9kZXNjIj7ku47mnLroiq\/oioLlpY\/liLDlo7PouqvlvKfnur\/vvIzkv53nlZnliqjmgIHnibnmlYjvvIzlkIzml7borqnlhbPplK7kv6Hmga\/lp4vnu4jlgZzlnKjlj6\/or7vljLrln5\/jgII8L3A+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWRlby1zbGlkZS1tZXRhIiBhcmlhLWxhYmVsPSLlt6XnqIvph43ngrkiPgogICAgICAgICAgICAgICAgICAgIDxiPuiHquWKqOacuuaisDwvYj4KICAgICAgICAgICAgICAgICAgICA8Yj7nu4boioLmiZPno6g8L2I+CiAgICAgICAgICAgICAgICAgICAgPGI+56uL5L2T6KGo5aOzPC9iPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWRlby1zbGlkZS1hY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0idmlkZW8tYWN0aW9uIiBocmVmPSIjaW5ub3ZhdGlvbiIgaWQ9InZpZDJfY3RhMSI+5p+l55yL5Yi26KGo5bel6Im6PC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ2aWRlby1hY3Rpb24iIGhyZWY9IiN2YXVsdCIgaWQ9InZpZDJfY3RhMiI+5p+l6aqM6IWV6KGoPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoNCiAgICAgICAgPCEtLSDmu6HlsY\/op4bpopEgMyAo6ZqP6aG16Z2i57un57ut5b6A5LiL5rua77yM5pyA5ZCO6KaG55uW5ruh5bGPKSAtLT4NCiAgICAgICAgPGRpdiBjbGFzcz0idmlkZW8tc2xpZGUgdmlkZW8tc2xpZGUtLWRldGFpbCBhYnNvbHV0ZSBpbnNldC0wIHotMzAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIiIGRhdGEtdmlkZW8tbW9kZT0iZGV0YWlsIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgei0wIj4NCiAgICAgICAgICAgICAgICA8dmlkZW8gY2xhc3M9InctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvdmVyIGZpbHRlciBicmlnaHRuZXNzLVswLjldIGNvbnRyYXN0LTEwNSBzYXR1cmF0ZS1bMS4xMl0gc2NhbGUtMTA1IiBhdXRvcGxheSBtdXRlZCBsb29wIHBsYXlzaW5saW5lIHByZWxvYWQ9Im5vbmUiIHBvc3Rlcj0iaHR0cHM6Ly96ZG94aWcuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA2L3pkb3hpZy16ZG94aWctaGVyby1kaXZlci1ncmVlbi1lYjg0MjhjNjc4MzEud2VicCIgYXJpYS1sYWJlbD0iWkRPWElHIGx1bWlub3VzIHdhdGNoIGZpbG0iPgogICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgZGF0YS1zcmM9Imh0dHBzOi8vemRveGlnLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi96ZG94aWctemQwMDMtYmxhY2stY2Y2ZGUyODU3MDE0Lm1wNCIgdHlwZT0idmlkZW8vbXA0Ij4KICAgICAgICAgICAgICAgIDwvdmlkZW8+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bdmFyKC0tbW9kZXJuLWRhcmspXS8xOCB2aWEtdHJhbnNwYXJlbnQgdG8tW3ZhcigtLW1vZGVybi1kYXJrKV0vMzIgcG9pbnRlci1ldmVudHMtbm9uZSI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWxhdGl2ZSB6LTEwIHRleHQtY2VudGVyIHB4LTYgdy1mdWxsIG1heC13LTd4bCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9udC1kaXNwbGF5IHRleHQtWzlweF0gdHJhY2tpbmctWzAuNWVtXSB0ZXh0LVsjREVEQkM4XSBtYi00IG1kOm1iLTUgYmxvY2sgdXBwZXJjYXNlIiBpZD0idmlkM19zdWIiPuaXpeW4uOS8mOmbhTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iZm9udC1kaXNwbGF5IHRleHQtNHhsIG1kOnRleHQtN3hsIGZvbnQtYm9sZCB0ZXh0LXdoaXRlIG1iLTUgdXBwZXJjYXNlIiBpZD0idmlkM190aXRsZSI+5pel5bi4PGJyPui9u+WlojwvaDI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0idmlkZW8tc2xpZGUtY29weSIgaWQ9InZpZDNfZGVzYyI+5oqK5ZOB54mM5b2x5YOP44CB5Lqn5ZOB5o6i57Si5ZKM5ZCO57ut6aG16Z2i5Liy6LW35p2l77yM5rua5Yqo57uT5p2f5ZCO6Ieq54S26L+b5YWl5a6M5pW05a6Y572R5YaF5a6544CCPC9wPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmlkZW8tc2xpZGUtbWV0YSIgYXJpYS1sYWJlbD0i5L2p5oi06YeN54K5Ij4KICAgICAgICAgICAgICAgICAgICA8Yj7ovbvlpaLml6XluLg8L2I+CiAgICAgICAgICAgICAgICAgICAgPGI+5ZWG5Yqh5LyR6ZeyPC9iPgogICAgICAgICAgICAgICAgICAgIDxiPuWFqOermeWvvOiniDwvYj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmlkZW8tc2xpZGUtYWN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InZpZGVvLWFjdGlvbiIgaHJlZj0iI2NhbGlicmUtdGhlYXRyZSIgaWQ9InZpZDNfY3RhMSI+57un57ut5py66Iqv5Ymn5Zy6PC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ2aWRlby1hY3Rpb24iIGhyZWY9Ii9pbmRleC5waHAvYnJhbmQtc3RvcnkvIiB0YXJnZXQ9Il90b3AiIGlkPSJ2aWQzX2N0YTIiPuWTgeeJjOaVheS6izwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2aWRlby1wcm9ncmVzcy1kb3RzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PGk+PC9pPjxpPjwvaT48aT48L2k+PC9kaXY+CiAgICA8L3NlY3Rpb24+Cg0KICAgIDwhLS0gNC4gM0Qg5Lqn5ZOB5bGV56S6IChTaWduYXR1cmUgM0QgU2hvd2Nhc2UpIOeOsOW3suWujOWFqOiBlOWKqOaWh+Wtl+S4juWPguaVsCAtLT4NCiAgICAKPHNlY3Rpb24gaWQ9InNob3djYXNlLTNkIiBjbGFzcz0icmVsYXRpdmUgcHktMjQgbWQ6cHktMzYgcHgtNiBiZy1bdmFyKC0tbW9kZXJuLWRhcmspXSBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyLXkgYm9yZGVyLXdoaXRlLzUiIGRhdGEtc2NlbmUtYmc9IiMwOTBiMGEiIGRhdGEtc2NlbmUtZmc9IiNmMmYwZTgiIGRhdGEtc2NlbmUtYWNjZW50PSIjMDBmZmNjIiBkYXRhLXNjZW5lLWltYWdlPSJodHRwczovL3pkb3hpZy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDYvemRveGlnLXpkMDAzLWRpc3BsYXktYjE0MmQ3MzkwNDM3LnBuZyIgZGF0YS1zY2VuZS1vcGFjaXR5PSIuMSI+DQogICAgICAgIDxkaXYgY2xhc3M9InNpZ25hdHVyZS1zY2VuZS1zdGFjayIgYXJpYS1oaWRkZW49InRydWUiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lnbmF0dXJlLXNjZW5lIGlzLWFjdGl2ZSIgZGF0YS1zaWduYXR1cmUtc2NlbmU9Im1lbnMiPg0KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL3pkb3hpZy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDYvemRveGlnLXpkMDA3LWJsdWUtd2hpdGUtODhhNTQzN2IwNTliLmpwZyIgbG9hZGluZz0iZWFnZXIiIGFsdD0iIj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lnbmF0dXJlLXNjZW5lIiBkYXRhLXNpZ25hdHVyZS1zY2VuZT0ibWVjaGFuaWNhbCI+DQogICAgICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vemRveGlnLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi96ZG94aWctemQwMDgtYmxhY2stbWVjaGFuaWNhbC13aGl0ZS1lMmI0YTllNjVmNzEuanBnIiBsb2FkaW5nPSJsYXp5IiBhbHQ9IiI+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZ25hdHVyZS1zY2VuZSBpcy1saWdodCIgZGF0YS1zaWduYXR1cmUtc2NlbmU9ImxhZGllcyI+DQogICAgICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vemRveGlnLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi96ZG94aWctbGFkaWVzLWJsdWUtd2hpdGUtNDU4NzE0NzlhMmU5LnBuZyIgbG9hZGluZz0ibGF6eSIgYWx0PSIiPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJzaWduYXR1cmUtc2NlbmUtc3RhdHVzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+DQogICAgICAgICAgICA8c3Bhbj7kuqflk4HlnLrmma88L3NwYW4+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idHJhY2siPjxzcGFuIGNsYXNzPSJmaWxsIj48L3NwYW4+PC9zcGFuPg0KICAgICAgICAgICAgPHNwYW4gZGF0YS1zaWduYXR1cmUtY291bnQ+MDEgLyAwMzwvc3Bhbj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgb3BhY2l0eS00MCBwb2ludGVyLWV2ZW50cy1ub25lIGJnLVtyYWRpYWwtZ3JhZGllbnQoY2lyY2xlX2F0X2NlbnRlcixyZ2JhKDAsMjU1LDIwNCwwLjE2KSx0cmFuc3BhcmVudF80MiUpXSI+PC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1heC13LTd4bCBteC1hdXRvIGdyaWQgbGc6Z3JpZC1jb2xzLVswLjk1ZnJfMS4wNWZyXSBnYXAtMTIgbWQ6Z2FwLTIwIGl0ZW1zLWNlbnRlciByZWxhdGl2ZSB6LTEwIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImdzYXAtZmFkZS11cCI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvbnQtZGlzcGxheSB0ZXh0LVsxMHB4XSB0cmFja2luZy1bMC40NWVtXSB0ZXh0LVsjREVEQkM4XSBtYi02IGJsb2NrIHVwcGVyY2FzZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMzAwIiBpZD0ic2hvd2Nhc2Vfc3ViIj7kuqflk4HlsZXnpLo8L3NwYW4+DQogICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJmb250LWRpc3BsYXkgdGV4dC0zeGwgbWQ6dGV4dC02eGwgbGVhZGluZy10aWdodCBtYi04IHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0zMDAgdXBwZXJjYXNlIiBpZD0ic2hvd2Nhc2VfdGl0bGUiPueUt+ihqOe7j+WFuOasvjxicj7ov5vlj6PmnLroiq88L2gyPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXdoaXRlLzUwIGxlYWRpbmctcmVsYXhlZCBmb250LWxpZ2h0IHRleHQtc20gbWQ6dGV4dC1iYXNlIG1iLTEwIG1heC13LXhsIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0zMDAiIGlkPSJzaG93Y2FzZV9kZXNjIj7mjqLntKLkuIDmnprpgILlkIjml6XluLjkvanmiLTnmoQgWkRPWElHIOiFleihqO+8mui\/m+WPo+efs+iLseacuuiKr+OAgeeyvue7huihqOWjs+aJk+ejqOS4jue7j+WFuOiuvuiuoeOAgjwvcD4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJncmlkIHNtOmdyaWQtY29scy0zIGdhcC00IG1iLTEwIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMCBwLTUgYmctW3ZhcigtLW1vZGVybi1ncmF5KV0iPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZvbnQtZGlzcGxheSB0ZXh0LXhsIG1iLTIgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTMwMCIgaWQ9InNob3djYXNlX3YxIj40Mk1NPC9wPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtWzlweF0gdHJhY2tpbmctWzAuMmVtXSB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMzAwIiBpZD0ic2hvd2Nhc2VfczEiPuihqOWjszwvcD4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItd2hpdGUvMTAgcC01IGJnLVt2YXIoLS1tb2Rlcm4tZ3JheSldIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmb250LWRpc3BsYXkgdGV4dC14bCBtYi0yIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0zMDAiIGlkPSJzaG93Y2FzZV92MiI+NzJIPC9wPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtWzlweF0gdHJhY2tpbmctWzAuMmVtXSB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMzAwIiBpZD0ic2hvd2Nhc2VfczIiPuWKqOWCqDwvcD4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdW5kZWQtMnhsIGJvcmRlciBib3JkZXItd2hpdGUvMTAgcC01IGJnLVt2YXIoLS1tb2Rlcm4tZ3JheSldIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmb250LWRpc3BsYXkgdGV4dC14bCBtYi0yIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0zMDAiIGlkPSJzaG93Y2FzZV92MyI+ODBHPC9wPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtWzlweF0gdHJhY2tpbmctWzAuMmVtXSB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMzAwIiBpZD0ic2hvd2Nhc2VfczMiPumHjemHjzwvcD4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LXdyYXAgZ2FwLTMiIGlkPSJtYXRlcmlhbC1zd2l0Y2hlciI+DQogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im1hdGVyaWFsLWNoaXAgYWN0aXZlIiBkYXRhLXRoZW1lPSJtZW5zIiBpZD0ic2hvd2Nhc2VfY2hpcDEiPueUt+ihqDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJtYXRlcmlhbC1jaGlwIiBkYXRhLXRoZW1lPSJtZWNoYW5pY2FsIiBpZD0ic2hvd2Nhc2VfY2hpcDIiPuacuuaisDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJtYXRlcmlhbC1jaGlwIiBkYXRhLXRoZW1lPSJsYWRpZXMiIGlkPSJzaG93Y2FzZV9jaGlwMyI+5aWz6KGoPC9idXR0b24+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGlxdWlkLWdsYXNzIG10LTggbWF4LXcteGwgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1bI0RFREJDOF0vMjAgcC00IG1kOnAtNSBmbGV4IGZsZXgtY29sIHNtOmZsZXgtcm93IHNtOml0ZW1zLWNlbnRlciBnYXAtNCI+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtMSBtaW4tdy0wIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmb250LWRpc3BsYXkgdGV4dC1bMTBweF0gdHJhY2tpbmctWzAuMjhlbV0gdGV4dC1bI0RFREJDOF0gdXBwZXJjYXNlIG1iLTIiIGlkPSJoYWxvX3ZlcmlmeV9raWNrZXIiPuWFieeOr+mqjOecnzwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXdoaXRlLzU1IHRleHQteHMgbWQ6dGV4dC1zbSBsZWFkaW5nLXJlbGF4ZWQiIGlkPSJoYWxvX3ZlcmlmeV9kZXNjIj7ovpPlhaXlupXnm5bluo\/liJflj7fvvIzov57mjqUgWkRPWElHIOWumOaWueaVsOaNruW6k+afpemqjOiFleihqOecn+S8quS4juacuuiKr+iusOW9leOAgjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiN2YXVsdCIgY2xhc3M9ImJ0bi1tb2Rlcm4gc2hyaW5rLTAgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHB4LTUgcHktMyByb3VuZGVkLWZ1bGwgYmctWyNERURCQzhdIHRleHQtYmxhY2sgdGV4dC1bMTBweF0gdHJhY2tpbmctWzAuMjJlbV0gdXBwZXJjYXNlIGhvdmVyOmJnLXdoaXRlIHRyYW5zaXRpb24tYWxsIj48aSBkYXRhLWx1Y2lkZT0ic2hpZWxkLWNoZWNrIiBjbGFzcz0idy0zLjUgaC0zLjUiPjwvaT48c3BhbiBpZD0iaGFsb192ZXJpZnlfYnRuIj7nq4vljbPmn6Xpqow8L3NwYW4+PC9hPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IndhdGNoLTNkLXN0YWdlIG1pbi1oLVs1NjBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcmVsYXRpdmUiIGlkPSJ3YXRjaC0zZC1zdGFnZSI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2F0Y2gtM2QtY2FyZCBzaG93Y2FzZS1wcm9kdWN0LWNhcmQiIGlkPSJ3YXRjaC0zZC1jYXJkIiBkYXRhLXRoZW1lPSJtZW5zIj4NCiAgICAgICAgICAgICAgICAgICAgPGltZyBpZD0ic2hvd2Nhc2Utd2F0Y2gtaW1nIiBzcmM9Imh0dHBzOi8vemRveGlnLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi96ZG94aWctemQwMDctYmx1ZS13aGl0ZS04OGE1NDM3YjA1OWIuanBnIiBsb2FkaW5nPSJsYXp5IiBjbGFzcz0ic2hvd2Nhc2UtcHJvZHVjdC1pbWciIGFsdD0iWkRPWElHIG1lbidzIGNocm9ub2dyYXBoIGRpc3BsYXkiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG93Y2FzZS1wcm9kdWN0LWxhYmVsIGZvbnQtZGlzcGxheSIgaWQ9InNob3djYXNlX3Zpc3VhbF9sYWJlbCI+55S35aOr5bGV56S66IWV6KGoPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndhdGNoLWhvdHNwb3QgYWJzb2x1dGUgdG9wLVsyOCVdIHJpZ2h0LVsxMiVdIHctMyBoLTMgcm91bmRlZC1mdWxsIGJnLVsjMDBmZmNjXSB6LVszXSI+PHNwYW4gY2xhc3M9ImFic29sdXRlIGxlZnQtNSAtdG9wLTIgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4yZW1dIHRleHQtd2hpdGUvNjAgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTMwMCB1cHBlcmNhc2UiIGlkPSJzaG93Y2FzZV9ob3QxIj7nlITpgInmnLroiq88L3NwYW4+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndhdGNoLWhvdHNwb3QgYWJzb2x1dGUgYm90dG9tLVsyOCVdIGxlZnQtWzEyJV0gdy0zIGgtMyByb3VuZGVkLWZ1bGwgYmctWyMwMGZmY2NdIHotWzNdIj48c3BhbiBjbGFzcz0iYWJzb2x1dGUgcmlnaHQtNSAtdG9wLTIgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4yZW1dIHRleHQtd2hpdGUvNjAgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTMwMCB1cHBlcmNhc2UiIGlkPSJzaG93Y2FzZV9ob3QyIj7lrprliLbooajnm5g8L3NwYW4+PC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9zZWN0aW9uPg0KDQogICAgPCEtLSA2LiDliqjmgIHlt6XoibogKElubm92YXRpb24pIC0tPg0KICAgIAo8c2VjdGlvbiBpZD0iaW5ub3ZhdGlvbiIgY2xhc3M9IndwLXJlYWR5LXNlY3Rpb24gdGhlbWUtc3RlZWwgcHktMjQgbWQ6cHktNDggcHgtNiByZWxhdGl2ZSIgZGF0YS1zY2VuZS1iZz0iIzExMTYxNCIgZGF0YS1zY2VuZS1mZz0iI2YyZjBlOCIgZGF0YS1zY2VuZS1hY2NlbnQ9IiM5Y2ViZDkiIGRhdGEtc2NlbmUtaW1hZ2U9Imh0dHBzOi8vemRveGlnLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi96ZG94aWctY3JhZnQtbWFraW5nLTgzOWUwN2Y5ZjE5Zi5qcGciIGRhdGEtc2NlbmUtb3BhY2l0eT0iLjEyIj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWF4LXctN3hsIG14LWF1dG8gZmxleCBmbGV4LWNvbCBtZDpmbGV4LXJvdyBnYXAtMTYgbWQ6Z2FwLTI0IGl0ZW1zLWNlbnRlciI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LWZ1bGwgbWQ6dy0xLzIgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBvcmRlci0yIG1kOm9yZGVyLTEiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb250LWRpc3BsYXkgdGV4dC1bMTBweF0gdHJhY2tpbmctWzAuNGVtXSB0ZXh0LXdoaXRlLzMwIG1iLTYgYmxvY2sgZ3NhcC1mYWRlLXVwIiBpZD0iaW5ub19zdWIiPuWIm+aWsOW3peiJujwvc3Bhbj4NCiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImZvbnQtZGlzcGxheSB0ZXh0LTN4bCBtZDp0ZXh0LTV4bCBsZWFkaW5nLXRpZ2h0IG1iLTggZ3NhcC1mYWRlLXVwIiBpZD0iaW5ub190aXRsZSI+DQogICAgICAgICAgICAgICAgICAgIOeyvuW3peaZuumAoDxicj7mr6vljpjlv4XkuokNCiAgICAgICAgICAgICAgICA8L2gyPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXdoaXRlLzUwIGxlYWRpbmctcmVsYXhlZCBmb250LWxpZ2h0IHRleHQtc20gbWQ6dGV4dC1iYXNlIG1iLTEyIGdzYXAtZmFkZS11cCBtYXgtdy1sZyIgaWQ9Imlubm9fZGVzYyI+DQogICAgICAgICAgICAgICAgICAgIFpET1hJRyDph4fnlKjnlITpgInov5vlj6Pnn7Poi7HkuI7oh6rliqjmnLrmorDmnLroiq\/vvIzmr4\/kuIDmnprohZXooajpg73nu4\/ov4fnsr7lr4bosIPmoKHjgILnlLflo6vns7vliJfms6jph43nu4\/lhbjpgKDlnovkuI7ml6XluLjkvanmiLToiJLpgILluqbvvIzlpbPlo6vplbbnn7PmlrnooajliJnono3lkIjovbvlpaLorr7orqHkuI7nsr7muZvlt6XoibrjgIINCiAgICAgICAgICAgICAgICA8L3A+DQoNCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJncmlkIGdyaWQtY29scy0yIGdhcC04IG1kOmdhcC0xMiBnc2FwLWZhZGUtdXAgYm9yZGVyLXQgYm9yZGVyLXdoaXRlLzEwIHB0LTggbWF4LXctbGciPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9udC1kaXNwbGF5IHRleHQtNHhsIG1kOnRleHQtNXhsIHRleHQtd2hpdGUgbWItMyI+PHNwYW4gY2xhc3M9ImNvdW50ZXIiIGRhdGEtdGFyZ2V0PSI0MDAiPjA8L3NwYW4+PHNwYW4gY2xhc3M9InRleHQtMnhsIHRleHQtWyNERURCQzhdIj4rPC9zcGFuPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1bOXB4XSB0ZXh0LXdoaXRlLzQwIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIiBpZD0iaW5ub19zMSI+55+z6Iux57K+5YeGPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9udC1kaXNwbGF5IHRleHQtNHhsIG1kOnRleHQtNXhsIHRleHQtd2hpdGUgbWItMyI+PHNwYW4gY2xhc3M9ImNvdW50ZXIiIGRhdGEtdGFyZ2V0PSI3MiI+MDwvc3Bhbj48c3BhbiBjbGFzcz0idGV4dC0yeGwgdGV4dC13aGl0ZS81MCI+SDwvc3Bhbj48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtWzlweF0gdGV4dC13aGl0ZS80MCB0cmFja2luZy1bMC4yZW1dIHVwcGVyY2FzZSIgaWQ9Imlubm9fczIiPuacuuaisOmAieaLqTwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjcmFmdC1tZWRpYSB3LWZ1bGwgbWQ6dy0xLzIgcmVsYXRpdmUgaC1bNTB2aF0gbWQ6aC1bODB2aF0gcm91bmRlZC0zeGwgb3ZlcmZsb3ctaGlkZGVuIGdzYXAtcmV2ZWFsLWRpYWdvbmFsIG9yZGVyLTEgbWQ6b3JkZXItMiBncm91cCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBiZy1ibGFjay81MCB6LTEwIG9wYWNpdHktMTAwIGdyb3VwLWhvdmVyOm9wYWNpdHktMCB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tNzAwIHBvaW50ZXItZXZlbnRzLW5vbmUiPjwvZGl2Pg0KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL3pkb3hpZy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDYvemRveGlnLWNyYWZ0LW1ha2luZy04MzllMDdmOWYxOWYuanBnIiBsb2FkaW5nPSJsYXp5Ig0KICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgdy1mdWxsIGgtZnVsbCBvYmplY3QtY292ZXIgZmlsdGVyIGdyYXlzY2FsZSBjb250cmFzdC0xMjUgb3BhY2l0eS03MCBncm91cC1ob3ZlcjpncmF5c2NhbGUtMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBncm91cC1ob3ZlcjpzY2FsZS0xMTAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNzAwIiBpZD0iY3JhZnQtaW1nIiBhbHQ9IkNyYWZ0aW5nIj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L3NlY3Rpb24+DQogICAgCjxzZWN0aW9uIGlkPSJ2YXVsdCIgY2xhc3M9InNjcm9sbC1tdC1bMTEycHhdIHB5LTMyIG1kOnB5LTQ4IHJlbGF0aXZlIGJnLVt2YXIoLS1tb2Rlcm4tZGFyayldIHotMTAiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIG9wYWNpdHktMTAgcG9pbnRlci1ldmVudHMtbm9uZSIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChyZ2JhKDI1NSwyNTUsMjU1LDAuMSkgMXB4LCB0cmFuc3BhcmVudCAxcHgpLCBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSAxcHgsIHRyYW5zcGFyZW50IDFweCk7IGJhY2tncm91bmQtc2l6ZTogNTBweCA1MHB4OyI+PC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0ibWF4LXctM3hsIG14LWF1dG8gcHgtNiB0ZXh0LWNlbnRlciByZWxhdGl2ZSB6LTEwIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InctMTYgaC0xNiBiZy13aGl0ZS81IGJvcmRlciBib3JkZXItd2hpdGUvMTAgcm91bmRlZC0yeGwgbXgtYXV0byBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtYi04IGdzYXAtZmFkZS11cCI+DQogICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS41Ij48cGF0aCBkPSJNMTIgMjJzOC00IDgtMTBWNWwtOC0zLTggM3Y3YzAgNiA4IDEwIDggMTB6Ii8+PC9zdmc+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxoMiBjbGFzcz0iZm9udC1kaXNwbGF5IHRleHQtM3hsIG1kOnRleHQtNXhsIG1iLTYgZ3NhcC1mYWRlLXVwIiBpZD0idmF1bHRfdGl0bGUiPuecn+S8quafpemqjDwvaDI+DQogICAgICAgICAgICA8cCBjbGFzcz0idGV4dC13aGl0ZS80MCB0ZXh0LXhzIG1kOnRleHQtc20gZm9udC1saWdodCBtYi0xMiBnc2FwLWZhZGUtdXAgbWF4LXctbWQgbXgtYXV0byBsZWFkaW5nLXJlbGF4ZWQiIGlkPSJ2YXVsdF9kZXNjIj4NCiAgICAgICAgICAgICAgICDov57mjqUgWkRPWElHIOWFqOeQg+WKoOWvhuaVsOaNruW6k+OAgui+k+WFpeaCqOeahOS4k+WxnuW6j+WIl+WPt++8jOmqjOivgeiFleihqOWOn+S6p+WcsOWPiue7hOS7tuS\/oeaBr+OAgg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJnc2FwLWZhZGUtdXAgcmVsYXRpdmUgdy1mdWxsIG1heC13LWxnIG14LWF1dG8iPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIGdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJzbl9pbnB1dCIgYXJpYS1sYWJlbD0iU2VyaWFsIG51bWJlciIgY2xhc3M9ImlucHV0LWdsb3cgZm9udC1kaXNwbGF5IHRleHQtY2VudGVyIHRleHQtbGcgbWQ6dGV4dC14bCB0cmFja2luZy1bMC4yZW1dIHBsYWNlaG9sZGVyLXdoaXRlLzIwIHVwcGVyY2FzZSIgcGxhY2Vob2xkZXI9IkUuRy4gWkQtMDAxIiBhdXRvY29tcGxldGU9Im9mZiI+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIHJpZ2h0LTYgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJ2YXVsdF9lbnRlcl9oaW50IiBjbGFzcz0idGV4dC1bOHB4XSB0ZXh0LXdoaXRlLzMwIGhpZGRlbiBtZDppbmxpbmUgdHJhY2tpbmctd2lkZXN0Ij7mjInlm57ovabmn6Xor6I8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LTIgaC0yIGJnLVsjMDBmZmNjXS81MCByb3VuZGVkLWZ1bGwgYW5pbWF0ZS1wdWxzZSBncm91cC1mb2N1cy13aXRoaW46YmctWyMwMGZmY2NdIj48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0idmVyaWZ5X2J0biIgY2xhc3M9ImJ0bi1tb2Rlcm4gdy1mdWxsIG10LTYgYmctd2hpdGUgdGV4dC1ibGFjayBob3ZlcjpiZy10cmFuc3BhcmVudCBob3Zlcjp0ZXh0LXdoaXRlIGJvcmRlci13aGl0ZSI+DQogICAgICAgICAgICAgICAgICAgIOW8gOWni+afpemqjA0KICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDwhLS0g6aqM6K+B57uT5p6c5Y2h54mHIC0tPg0KICAgICAgICAgICAgPGRpdiBpZD0icmVzdWx0X2NhcmQiIGNsYXNzPSJtdC0xNiBoaWRkZW4iPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLVt2YXIoLS1tb2Rlcm4tZ3JheSldIGJvcmRlciBib3JkZXItd2hpdGUvMTAgcm91bmRlZC0zeGwgcC04IG1kOnAtMTAgdGV4dC1sZWZ0IHJlbGF0aXZlIG92ZXJmbG93LWhpZGRlbiBzaGFkb3ctMnhsIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCB3LTQ4IGgtNDggYmctWyMwMGZmY2NdLzEwIGJsdXItWzYwcHhdIHJvdW5kZWQtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIiBpZD0icmVzdWx0X2dsb3ciPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQgbWItMTAgYm9yZGVyLWIgYm9yZGVyLXdoaXRlLzEwIHBiLTYiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icmVzX2ljb24iIGNsYXNzPSJ3LTEwIGgtMTAgcm91bmRlZC1mdWxsIGJnLVsjMDBmZmNjXS8yMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LVsjREVEQkM4XSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0idy01IGgtNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik01IDEzbDQgNEwxOSA3Ij48L3BhdGg+PC9zdmc+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvbnQtZGlzcGxheSB0ZXh0LXhzIG1kOnRleHQtc20gdHJhY2tpbmctWzAuMmVtXSIgaWQ9InJlc19zdGF0dXNfdGV4dCI+5bey6aqM6K+B5q2j5ZOBPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LVs5cHhdIHRleHQtd2hpdGUvNDAgdHJhY2tpbmctd2lkZXN0IG10LTEiIGlkPSJyZXNfcmVjb3JkX2xhYmVsIj7lronlhajpqoznnJ\/orrDlvZU8L3A+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVyaWZ5LWRldGFpbC1ncmlkIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZlcmlmeS1kZXRhaWwtaXRlbSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InZlcmlmeS1kZXRhaWwtbGFiZWwiIGlkPSJyZXNfbW9kZWxfbGFiZWwiPuaJi+ihqOWei+WPtzwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idmVyaWZ5LWRldGFpbC12YWx1ZSBmb250LWRpc3BsYXkiIGlkPSJyZXNfbW9kZWwiPueUt+ihqOe7j+WFuOasvjwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVyaWZ5LWRldGFpbC1pdGVtIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idmVyaWZ5LWRldGFpbC1sYWJlbCIgaWQ9InJlc19zZXJpYWxfbGFiZWwiPuaJi+ihqOe8luWPtzwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idmVyaWZ5LWRldGFpbC12YWx1ZSBmb250LWRpc3BsYXkiIGlkPSJyZXNfc2VyaWFsIj5aRC0wMDE8L3A+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZlcmlmeS1kZXRhaWwtaXRlbSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InZlcmlmeS1kZXRhaWwtbGFiZWwiIGlkPSJyZXNfY2FsaWJyZV9sYWJlbCI+5py66Iqv57O757ufPC9wPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ2ZXJpZnktZGV0YWlsLXZhbHVlIGZvbnQtZGlzcGxheSIgaWQ9InJlc19tb3ZlbWVudCI+6L+b5Y+j55+z6Iux5py66IqvPC9wPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2ZXJpZnktZGV0YWlsLWl0ZW0iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ2ZXJpZnktZGV0YWlsLWxhYmVsIiBpZD0icmVzX2dlbmRlcl9sYWJlbCI+57O75YiXPC9wPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ2ZXJpZnktZGV0YWlsLXZhbHVlIGZvbnQtZGlzcGxheSIgaWQ9InJlc19nZW5kZXIiPueUt+Wjq+iFleihqDwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVyaWZ5LWRldGFpbC1pdGVtIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idmVyaWZ5LWRldGFpbC1sYWJlbCIgaWQ9InJlc19kaWFsX2xhYmVsIj7ooajnm5jkv6Hmga88L3A+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InZlcmlmeS1kZXRhaWwtdmFsdWUgZm9udC1kaXNwbGF5IiBpZD0icmVzX2RpYWwiPuiTneiJsuWkqumYs+e6ueiuoeaXtuihqOebmDwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVyaWZ5LWRldGFpbC1pdGVtIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idmVyaWZ5LWRldGFpbC1sYWJlbCIgaWQ9InJlc19jYXNlX2xhYmVsIj7ooajlo7MgLyDmibnmrKE8L3A+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InZlcmlmeS1kZXRhaWwtdmFsdWUgZm9udC1kaXNwbGF5IiBpZD0icmVzX2Nhc2UiPueyvumSouihqOWjsyAvIDIwMjYtQTwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InZlcmlmeS1ibGVzc2luZyIgaWQ9InJlc19ibGVzc2luZyI+5oS\/6L+Z5p6aIFpET1hJRyDohZXooajkuLrmr4\/kuIDmrKHliY3ooYzorrDlvZXnsr7lh4bml7bpl7TkuI7nrIPlrprkv6Hlv4PjgII8L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9zZWN0aW9uPg0KDQogICAgPCEtLSAxNi4g6IGU57O75LiO5LyB5Lia5YWl5Y+jICjpmLLmraLpgq7nrrHmuqLlh7opIC0tPg0KICAgIAo8c2VjdGlvbiBpZD0iY29udGFjdCIgY2xhc3M9Inpkb3hpZy1jb250YWN0LXN0dWRpbyBweC02Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWN0LXN0dWRpby13cmFwIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFjdC1zdHVkaW8taGVybyBnc2FwLWZhZGUtdXAiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvbnQtZGlzcGxheSB0ZXh0LVsxMHB4XSB0cmFja2luZy1bMC4zMmVtXSBtYi00IGJsb2NrIiBpZD0iY29udGFjdF9zdWIiPuiBlOezuyBaRE9YSUc8L3NwYW4+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImZvbnQtZGlzcGxheSBtYi02IiBpZD0iY29udGFjdF90aXRsZSI+5oqK6IWV6KGo6Zeu6aKYPGJyPuS6pOe7meWumOaWueWboumYnzwvaDI+CiAgICAgICAgICAgICAgICA8cCBpZD0iY29udGFjdF9kZXNjIj7pgInotK3jgIHpqoznnJ\/jgIHllK7lkI7lkozmuKDpgZPlkIjkvZzpg73ku47ov5nph4zlvIDlp4vjgILnlZnkuIvlnovlj7fjgIHluo\/liJflj7fmiJblkIjkvZzpnIDmsYLvvIzmiJHku6zmjInnnJ\/lrp7kuqflk4Hkv6Hmga\/lm57lpI3vvIzkuI3nlKjkvaDlnKjlpJrkuKrlhaXlj6Pph4zmnaXlm57mib7jgII8L3A+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWN0LXN0dWRpby1hY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iY29udGFjdC1zdHVkaW8tYnV0dG9uIHByaW1hcnkiIGhyZWY9Im1haWx0bzppbmZvQHpkb3hpZy5jb20\/c3ViamVjdD1aRE9YSUclMjBvZmZpY2lhbCUyMGlucXVpcnkiPuWPkemAgemCruS7tjwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iY29udGFjdC1zdHVkaW8tYnV0dG9uIiBocmVmPSIjdmF1bHQiPuWFiOafpemqjOiFleihqDwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFjdC1zdHVkaW8tZ3JpZCBnc2FwLWZhZGUtdXAiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOmluZm9AemRveGlnLmNvbSIgY2xhc3M9ImNvbnRhY3Qtc3R1ZGlvLWNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxwIGlkPSJjb250YWN0X2NhcmQxX2xhYmVsIj5FTUFJTDwvcD4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPmluZm9AemRveGlnLmNvbTwvc3Ryb25nPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPuWumOaWuemCrueuse+8jOmAguWQiOS6p+WTgeOAgeWUruWQjuOAgea4oOmBk+WSjOWqkuS9k+ayn+mAmuOAgjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiN2YXVsdCIgY2xhc3M9ImNvbnRhY3Qtc3R1ZGlvLWNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxwIGlkPSJjb250YWN0X2NhcmQyX2xhYmVsIj5WRVJJRlk8L3A+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBpZD0iY29udGFjdF9jYXJkMl90ZXh0Ij7nnJ\/kvKrmn6Xpqow8L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj7ovpPlhaXlupXnm5bluo\/liJflj7fvvIzmn6XnnIvlnovlj7fjgIHmnLroiq\/jgIHmibnmrKHkuI7npZ3npo\/or63jgII8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86aW5mb0B6ZG94aWcuY29tP3N1YmplY3Q9WkRPWElHJTIwd2hvbGVzYWxlJTIwb3IlMjBwYXJ0bmVyc2hpcCUyMGlucXVpcnkiIGNsYXNzPSJjb250YWN0LXN0dWRpby1jYXJkIj4KICAgICAgICAgICAgICAgICAgICA8cCBpZD0iY29udGFjdF9jYXJkM19sYWJlbCI+UEFSVE5FUjwvcD4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIGlkPSJjb250YWN0X2NhcmQzX3RleHQiPua4oOmBk+WQiOS9nDwvc3Ryb25nPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPuaJueWPkeOAgeWIhumUgOOAgU9FTS9PRE0g5pSv5oyB5Y+v55u05o6l6K+05piO55uu5qCH5Zyw5Yy65LiO5pWw6YeP44CCPC9zcGFuPgogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOmluZm9AemRveGlnLmNvbT9zdWJqZWN0PVpET1hJRyUyMHNlcnZpY2UlMjByZXF1ZXN0IiBjbGFzcz0iY29udGFjdC1zdHVkaW8tY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPHAgaWQ9ImNvbnRhY3RfY2FyZDRfbGFiZWwiPlNFUlZJQ0U8L3A+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBpZD0iY29udGFjdF9jYXJkNF90ZXh0Ij7llK7lkI7mlK\/mjIE8L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj7nlLXmsaDjgIHpmLLmsLTjgIHooajluKbjgIHkv53lhbvlkozotK3kubDlh63or4Hpl67popjpm4bkuK3lpITnkIbjgII8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9zZWN0aW9uPgoNCiAgICA8IS0tIDE3LiDmnoHnroDlupXpg6ggLS0+DQogICAgDQoNCg0KPC9tYWluPg0KDQo8Zm9vdGVyIGNsYXNzPSJweS0xNiBweC02IGJvcmRlci10IGJvcmRlci13aGl0ZS8xMCBiZy1bIzA2MDgwN10iPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtYXgtdy03eGwgbXgtYXV0byBncmlkIG1kOmdyaWQtY29scy00IGdhcC0xMCI+DQogICAgICAgICAgICA8ZGl2Pg0KICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0iZm9udC1kaXNwbGF5IHRleHQtc20gdHJhY2tpbmctWzAuMmVtXSBtYi00IHRleHQtd2hpdGUvNjAiPlpET1hJRzwvaDQ+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtd2hpdGUvMzAgdGV4dC14cyBsZWFkaW5nLXJlbGF4ZWQiIGlkPSJmb290ZXJfYnJhbmRfZGVzYyI+5LiT5rOo6L+b5Y+j5py66Iqv5LiO5pel5bi45L2p5oi05L2T6aqM55qE5b2T5Luj6IWV6KGo5ZOB54mM77yM6KaG55uW55+z6Iux44CB5py65qKw5LiO5aWz5aOr5pa55b2i6ZW255+z57O75YiX44CCPC9wPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2Pg0KICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0iZm9udC1kaXNwbGF5IHRleHQtc20gdHJhY2tpbmctWzAuMmVtXSBtYi00IHRleHQtd2hpdGUvNjAiIGlkPSJmb290ZXJfY29sbGVjdGlvbnNfdGl0bGUiPuiFleihqOezu+WIlzwvaDQ+DQogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJzcGFjZS15LTIgdGV4dC14cyB0ZXh0LXdoaXRlLzMwIj4NCiAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNleHBsb3JlIiBjbGFzcz0iaG92ZXI6dGV4dC13aGl0ZS83MCB0cmFuc2l0aW9uLWNvbG9ycyIgZGF0YS1mb290ZXItaW5kZXg9IjAiPueUt+ihqOezu+WIlzwvYT48L2xpPg0KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI2xhZGllcy1ydW53YXkiIGNsYXNzPSJob3Zlcjp0ZXh0LXdoaXRlLzcwIHRyYW5zaXRpb24tY29sb3JzIiBkYXRhLWZvb3Rlci1pbmRleD0iMSI+5aWz5aOr57O75YiXPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjcmVmZXJlbmNlLWFyY2hpdmUiIGNsYXNzPSJob3Zlcjp0ZXh0LXdoaXRlLzcwIHRyYW5zaXRpb24tY29sb3JzIiBkYXRhLWZvb3Rlci1pbmRleD0iMiI+5Lqn5ZOB5qGj5qGIPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdj4NCiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9ImZvbnQtZGlzcGxheSB0ZXh0LXNtIHRyYWNraW5nLVswLjJlbV0gbWItNCB0ZXh0LXdoaXRlLzYwIiBpZD0iZm9vdGVyX3N1cHBvcnRfdGl0bGUiPuacjeWKoeaUr+aMgTwvaDQ+DQogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJzcGFjZS15LTIgdGV4dC14cyB0ZXh0LXdoaXRlLzMwIj4NCiAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNzZXJ2aWNlIiBjbGFzcz0iaG92ZXI6dGV4dC13aGl0ZS83MCB0cmFuc2l0aW9uLWNvbG9ycyIgZGF0YS1mb290ZXItaW5kZXg9IjMiPuacjeWKoeS\/neWFuzwvYT48L2xpPg0KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI2NhcmUtZmFxIiBjbGFzcz0iaG92ZXI6dGV4dC13aGl0ZS83MCB0cmFuc2l0aW9uLWNvbG9ycyIgZGF0YS1mb290ZXItaW5kZXg9IjQiPuS\/neWFu+mXruetlDwvYT48L2xpPg0KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI3ZhdWx0IiBjbGFzcz0iaG92ZXI6dGV4dC13aGl0ZS83MCB0cmFuc2l0aW9uLWNvbG9ycyIgZGF0YS1mb290ZXItaW5kZXg9IjUiPumYsuS8quafpemqjDwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXY+DQogICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJmb250LWRpc3BsYXkgdGV4dC1zbSB0cmFja2luZy1bMC4yZW1dIG1iLTQgdGV4dC13aGl0ZS82MCIgaWQ9ImZvb3Rlcl9jb250YWN0X3RpdGxlIj7ogZTns7s8L2g0Pg0KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ic3BhY2UteS0yIHRleHQteHMgdGV4dC13aGl0ZS8zMCI+DQogICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjY29udGFjdCIgY2xhc3M9ImhvdmVyOnRleHQtd2hpdGUvNzAgdHJhbnNpdGlvbi1jb2xvcnMiIGRhdGEtZm9vdGVyLWluZGV4PSI2Ij7ogZTns7vmiJHku6w8L2E+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9pbmRleC5waHAvYnJhbmQtc3RvcnkvIiB0YXJnZXQ9Il90b3AiIGNsYXNzPSJob3Zlcjp0ZXh0LXdoaXRlLzcwIHRyYW5zaXRpb24tY29sb3JzIj7lk4HniYzmlYXkuos8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8L3VsPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXdoaXRlLzIwIHRleHQteHMgbXQtOCIgaWQ9ImZvb3RfciI+JmNvcHk7IDIwMjYgWkRPWElHIFdBVENIRVMuIOS\/neeVmeaJgOacieadg+WIqeOAgjwvcD4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Zvb3Rlcj4NCg0KICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYmFjay10by10b3AiIGlkPSJiYWNrLXRvLXRvcCIgYXJpYS1sYWJlbD0i5Zue5Yiw6aG26YOoIj4NCiAgICAgICAgPHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4NCiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMiAxOVY1Ij48L3BhdGg+DQogICAgICAgICAgICA8cGF0aCBkPSJNNSAxMmw3LTcgNyA3Ij48L3BhdGg+DQogICAgICAgIDwvc3ZnPg0KICAgIDwvYnV0dG9uPg0KDQogICAgPHNjcmlwdD4NCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsICgpID0+IHsNCiAgICAgICAgICAgIGNvbnN0IGhhc0dTQVAgPSB0eXBlb2Ygd2luZG93LmdzYXAgIT09ICd1bmRlZmluZWQnOw0KICAgICAgICAgICAgY29uc3QgaGFzU2Nyb2xsVHJpZ2dlciA9IHR5cGVvZiB3aW5kb3cuU2Nyb2xsVHJpZ2dlciAhPT0gJ3VuZGVmaW5lZCc7DQogICAgICAgICAgICBjb25zdCBzY3JvbGxUb1ZhdWx0U2VjdGlvbiA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICBjb25zdCB2YXVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2YXVsdCcpOw0KICAgICAgICAgICAgICAgIGlmICghdmF1bHQpIHJldHVybjsNCiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJPZmZzZXQgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKG1heC13aWR0aDogNzY4cHgpJykubWF0Y2hlcyA\/IDY0IDogNzI7DQogICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0VG9wID0gdmF1bHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnNjcm9sbFkgLSBoZWFkZXJPZmZzZXQ7DQogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsZW5pcyAhPT0gJ3VuZGVmaW5lZCcgJiYgbGVuaXMpIHsNCiAgICAgICAgICAgICAgICAgICAgbGVuaXMuc2Nyb2xsVG8oTWF0aC5tYXgoMCwgdGFyZ2V0VG9wKSwgeyBkdXJhdGlvbjogMC45IH0pOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnN0IGlzTW9iaWxlID0gd2luZG93Lm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDc2OHB4KScpLm1hdGNoZXM7DQogICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiBNYXRoLm1heCgwLCB0YXJnZXRUb3ApLCBiZWhhdmlvcjogaXNNb2JpbGUgPyAnYXV0bycgOiAnc21vb3RoJyB9KTsNCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIGNvbnN0IHNjcm9sbFRvUGFnZVRhcmdldCA9IChoYXNoLCBvcHRpb25zID0ge30pID0+IHsKICAgICAgICAgICAgICAgIGlmICghaGFzaCB8fCBoYXNoID09PSAnIycpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gZGVjb2RlVVJJQ29tcG9uZW50KGhhc2gucmVwbGFjZSgvXiMvLCAnJykpOwogICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gaWQgPT09ICdob21lJyA\/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdob21lJykgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyT2Zmc2V0ID0gb3B0aW9ucy5ub09mZnNldCB8fCBpZCA9PT0gJ3ZpZGVvLXNjcm9sbC10cmFjaycgPyAwIDogKHdpbmRvdy5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiA3NjhweCknKS5tYXRjaGVzID8gNjQgOiA3Nik7CiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRUb3AgPSBpZCA9PT0gJ2hvbWUnID8gMCA6IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIGhlYWRlck9mZnNldDsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGVuaXMgIT09ICd1bmRlZmluZWQnICYmIGxlbmlzKSB7CiAgICAgICAgICAgICAgICAgICAgbGVuaXMuc2Nyb2xsVG8oTWF0aC5tYXgoMCwgdGFyZ2V0VG9wKSwgeyBkdXJhdGlvbjogMC44NSB9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiBNYXRoLm1heCgwLCB0YXJnZXRUb3ApLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAod2luZG93Lmhpc3Rvcnk\/LnJlcGxhY2VTdGF0ZSAmJiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgIT09ICdhYm91dDonKSB7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsICcnLCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgaGFzaCk7CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGNvbnN0IGJpbmRQYWdlQW5jaG9yTmF2aWdhdGlvbiA9ICgpID0+IHsKICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC5ib3VuZFBhZ2VBbmNob3JOYXYgPT09ICd0cnVlJykgcmV0dXJuOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQuYm91bmRQYWdlQW5jaG9yTmF2ID0gJ3RydWUnOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5rID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJ2FbaHJlZl49IiMiXScpOwogICAgICAgICAgICAgICAgICAgIGlmICghbGluaykgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IGhyZWYgPSBsaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpOwogICAgICAgICAgICAgICAgICAgIGlmICghaHJlZiB8fCBocmVmID09PSAnIycpIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsVG9QYWdlVGFyZ2V0KGhyZWYpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxNZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Z1bGwtbWVudScpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVsbE1lbnUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxNZW51LmNsYXNzTGlzdC5yZW1vdmUoJ21lbnUtb3BlbicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbE1lbnUuY2xhc3NMaXN0LmFkZCgncG9pbnRlci1ldmVudHMtbm9uZScsICdvcGFjaXR5LTAnLCAnaW52aXNpYmxlJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ25vLXNjcm9sbCcpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGNvbnN0IGluaXROb0FuaW1hdGlvbkZhbGxiYWNrID0gKCkgPT4gew0KICAgICAgICAgICAgICAgIGNvbnN0IHByZWxvYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmVsb2FkZXInKTsNCiAgICAgICAgICAgICAgICBjb25zdCBuYXZiYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmF2YmFyJyk7DQogICAgICAgICAgICAgICAgY29uc3QgaGVyb0l0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdzYXAtaGVybycpOw0KICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbEV4cGxvcmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Nyb2xsLXRvLWV4cGxvcmUnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBtZW51QnRuRmFsbGJhY2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVudS1idG4nKTsNCiAgICAgICAgICAgICAgICBjb25zdCBjbG9zZU1lbnVCdG5GYWxsYmFjayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbG9zZS1tZW51Jyk7DQogICAgICAgICAgICAgICAgY29uc3QgZnVsbE1lbnVGYWxsYmFjayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmdWxsLW1lbnUnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBtZW51SXRlbXNGYWxsYmFjayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZW51LWl0ZW0nKTsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IHJldmVhbFNpdGUgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGlmIChwcmVsb2FkZXIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByZWxvYWRlci5jbGFzc0xpc3QuYWRkKCdwcmVsb2FkZXItaGlkZScpOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHByZWxvYWRlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9LCA3NjApOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbm8tc2Nyb2xsJywgJ2ludHJvLWxvYWRpbmcnKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKG5hdmJhcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgbmF2YmFyLnN0eWxlLm9wYWNpdHkgPSAnMSc7DQogICAgICAgICAgICAgICAgICAgICAgICBuYXZiYXIuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVkoMCknOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGhlcm9JdGVtcy5mb3JFYWNoKGVsID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLm9wYWNpdHkgPSAnMSc7DQogICAgICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWSgwKSc7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJldmVhbFNpdGUsIDM2MDApOw0KDQogICAgICAgICAgICAgICAgc2Nyb2xsRXhwbG9yZT8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gew0KICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVmF1bHRTZWN0aW9uKCk7DQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICBpbml0UHJvZHVjdFJhaWxGYWxsYmFjaygpOw0KDQogICAgICAgICAgICAgICAgYmluZEhvbWVOYXYoKTsNCiAgICAgICAgICAgICAgICBiaW5kUGFnZUFuY2hvck5hdmlnYXRpb24oKTsNCg0KICAgICAgICAgICAgICAgIGlmIChtZW51QnRuRmFsbGJhY2sgJiYgY2xvc2VNZW51QnRuRmFsbGJhY2sgJiYgZnVsbE1lbnVGYWxsYmFjaykgew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBvcGVuTWVudUZhbGxiYWNrID0gKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgZnVsbE1lbnVGYWxsYmFjay5jbGFzc0xpc3QucmVtb3ZlKCdwb2ludGVyLWV2ZW50cy1ub25lJywgJ29wYWNpdHktMCcsICdpbnZpc2libGUnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxNZW51RmFsbGJhY2suc3R5bGUub3BhY2l0eSA9ICcxJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxNZW51RmFsbGJhY2suc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnbm8tc2Nyb2xsJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBtZW51SXRlbXNGYWxsYmFjay5mb3JFYWNoKGl0ZW0gPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUub3BhY2l0eSA9ICcxJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVZKDApJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgICAgICBjb25zdCBjbG9zZU1lbnVGYWxsYmFjayA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxNZW51RmFsbGJhY2suY2xhc3NMaXN0LmFkZCgncG9pbnRlci1ldmVudHMtbm9uZScsICdvcGFjaXR5LTAnLCAnaW52aXNpYmxlJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBmdWxsTWVudUZhbGxiYWNrLnN0eWxlLm9wYWNpdHkgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxNZW51RmFsbGJhY2suc3R5bGUudmlzaWJpbGl0eSA9ICcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCduby1zY3JvbGwnKTsNCiAgICAgICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICAgICAgbWVudUJ0bkZhbGxiYWNrLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb3Blbk1lbnVGYWxsYmFjayk7DQogICAgICAgICAgICAgICAgICAgIGNsb3NlTWVudUJ0bkZhbGxiYWNrLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xvc2VNZW51RmFsbGJhY2spOw0KICAgICAgICAgICAgICAgICAgICBtZW51SXRlbXNGYWxsYmFjay5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlTWVudUZhbGxiYWNrKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgY29uc3QgaW5pdFByb2R1Y3RSYWlsRmFsbGJhY2sgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZXhwbG9yZSA+IC5vdmVyZmxvdy1oaWRkZW4nKTsNCiAgICAgICAgICAgICAgICBjb25zdCByYWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NsaWRlci1jb250YWluZXInKTsNCiAgICAgICAgICAgICAgICBpZiAoIXZpZXdwb3J0IHx8ICFyYWlsIHx8IHJhaWwuZGF0YXNldC5mYWxsYmFja0xvb3BCb3VuZCA9PT0gJ3RydWUnKSByZXR1cm47DQogICAgICAgICAgICAgICAgcmFpbC5kYXRhc2V0LmZhbGxiYWNrTG9vcEJvdW5kID0gJ3RydWUnOw0KICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFscyA9IEFycmF5LmZyb20ocmFpbC5xdWVyeVNlbGVjdG9yQWxsKCcuc2xpZGUtY2FyZDpub3QoW2RhdGEtcHJvZHVjdC1jbG9uZV0pJykpOw0KICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbHMubGVuZ3RoIDwgMikgcmV0dXJuOw0KICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsNCiAgICAgICAgICAgICAgICBjb25zdCBhZnRlciA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsNCiAgICAgICAgICAgICAgICBvcmlnaW5hbHMuZm9yRWFjaCgoY2FyZCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVDbG9uZSA9IGNhcmQuY2xvbmVOb2RlKHRydWUpOw0KICAgICAgICAgICAgICAgICAgICBiZWZvcmVDbG9uZS5kYXRhc2V0LnByb2R1Y3RDbG9uZSA9ICdiZWZvcmUnOw0KICAgICAgICAgICAgICAgICAgICBiZWZvcmVDbG9uZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsNCiAgICAgICAgICAgICAgICAgICAgYmVmb3JlQ2xvbmUuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpOw0KICAgICAgICAgICAgICAgICAgICBiZWZvcmVDbG9uZS5xdWVyeVNlbGVjdG9yQWxsKCdhLCBidXR0b24nKS5mb3JFYWNoKChlbCkgPT4gZWwuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpKTsNCiAgICAgICAgICAgICAgICAgICAgYmVmb3JlLmFwcGVuZENoaWxkKGJlZm9yZUNsb25lKTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJDbG9uZSA9IGNhcmQuY2xvbmVOb2RlKHRydWUpOw0KICAgICAgICAgICAgICAgICAgICBhZnRlckNsb25lLmRhdGFzZXQucHJvZHVjdENsb25lID0gJ2FmdGVyJzsNCiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJDbG9uZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsNCiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJDbG9uZS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7DQogICAgICAgICAgICAgICAgICAgIGFmdGVyQ2xvbmUucXVlcnlTZWxlY3RvckFsbCgnYSwgYnV0dG9uJykuZm9yRWFjaCgoZWwpID0+IGVsLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKSk7DQogICAgICAgICAgICAgICAgICAgIGFmdGVyLmFwcGVuZENoaWxkKGFmdGVyQ2xvbmUpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIHJhaWwucHJlcGVuZChiZWZvcmUpOw0KICAgICAgICAgICAgICAgIHJhaWwuYXBwZW5kKGFmdGVyKTsNCiAgICAgICAgICAgICAgICBjb25zdCBtZWFzdXJlID0gKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdE9yaWdpbmFsID0gcmFpbC5xdWVyeVNlbGVjdG9yKCcuc2xpZGUtY2FyZDpub3QoW2RhdGEtcHJvZHVjdC1jbG9uZV0pJyk7DQogICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RPcmlnaW5hbCkgcmV0dXJuIDA7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvb3BXaWR0aCA9IGZpcnN0T3JpZ2luYWwub2Zmc2V0TGVmdDsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGxvb3BXaWR0aCA+IDAgJiYgdmlld3BvcnQuc2Nyb2xsTGVmdCA8IGxvb3BXaWR0aCkgdmlld3BvcnQuc2Nyb2xsTGVmdCArPSBsb29wV2lkdGg7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBsb29wV2lkdGg7DQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICBsZXQgbG9vcFdpZHRoID0gMDsNCiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4geyBsb29wV2lkdGggPSBtZWFzdXJlKCk7IH0pOw0KICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZSA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFsb29wV2lkdGgpIGxvb3BXaWR0aCA9IG1lYXN1cmUoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFsb29wV2lkdGgpIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBsb29wV2lkdGg7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGxvb3BXaWR0aCAqIDI7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGd1YXJkID0gTWF0aC5tYXgoODAsIHZpZXdwb3J0LmNsaWVudFdpZHRoICogMC4wOCk7DQogICAgICAgICAgICAgICAgICAgIGxldCBuZXh0ID0gdmlld3BvcnQuc2Nyb2xsTGVmdDsNCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5leHQgPj0gZW5kIC0gZ3VhcmQpIG5leHQgLT0gbG9vcFdpZHRoOw0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV4dCA8IHN0YXJ0IC0gZ3VhcmQpIG5leHQgKz0gbG9vcFdpZHRoOw0KICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMobmV4dCAtIHZpZXdwb3J0LnNjcm9sbExlZnQpID4gMSkgdmlld3BvcnQuc2Nyb2xsTGVmdCA9IG5leHQ7DQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICBsZXQgZnJhbWUgPSAwOw0KICAgICAgICAgICAgICAgIGxldCBhdXRvRnJhbWUgPSAwOw0KICAgICAgICAgICAgICAgIGxldCBsYXN0QXV0b1RpbWUgPSAwOw0KICAgICAgICAgICAgICAgIGxldCBob2xkVW50aWwgPSAwOw0KICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3ROb3JtYWxpemUgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZSkgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICBmcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7IGZyYW1lID0gMDsgbm9ybWFsaXplKCk7IH0pOw0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgY29uc3QgcmFpbFZpc2libGUgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwbG9yZScpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoIXNlY3Rpb24pIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gc2VjdGlvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlY3QuYm90dG9tID4gODAgJiYgcmVjdC50b3AgPCB3aW5kb3cuaW5uZXJIZWlnaHQgLSA4MDsNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0QXV0byA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9GcmFtZSB8fCB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknKS5tYXRjaGVzKSByZXR1cm47DQogICAgICAgICAgICAgICAgICAgIGxhc3RBdXRvVGltZSA9IDA7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpY2sgPSAodGltZSkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsYXN0QXV0b1RpbWUpIGxhc3RBdXRvVGltZSA9IHRpbWU7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWx0YSA9IE1hdGgubWluKDQ4LCB0aW1lIC0gbGFzdEF1dG9UaW1lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBdXRvVGltZSA9IHRpbWU7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LmhpZGRlbiAmJiBEYXRlLm5vdygpID49IGhvbGRVbnRpbCAmJiByYWlsVmlzaWJsZSgpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld3BvcnQuc2Nyb2xsTGVmdCArPSBNYXRoLm1heCgxLjM1LCBkZWx0YSAqIDAuMTA1KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlsLmRhdGFzZXQuZmFsbGJhY2tBdXRvVGlja3MgPSBTdHJpbmcoTnVtYmVyKHJhaWwuZGF0YXNldC5mYWxsYmFja0F1dG9UaWNrcyB8fCAnMCcpICsgMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBhdXRvRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7DQogICAgICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgICAgIGF1dG9GcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgIGNvbnN0IHBhdXNlQXV0byA9IChkZWxheSA9IDkwMCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBob2xkVW50aWwgPSBEYXRlLm5vdygpICsgZGVsYXk7DQogICAgICAgICAgICAgICAgICAgIGlmIChhdXRvRnJhbWUpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGF1dG9GcmFtZSk7DQogICAgICAgICAgICAgICAgICAgIGF1dG9GcmFtZSA9IDA7DQogICAgICAgICAgICAgICAgICAgIGxhc3RBdXRvVGltZSA9IDA7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHN0YXJ0QXV0bywgZGVsYXkpOw0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgdmlld3BvcnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgcmVxdWVzdE5vcm1hbGl6ZSwgeyBwYXNzaXZlOiB0cnVlIH0pOw0KICAgICAgICAgICAgICAgIHZpZXdwb3J0LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKCkgPT4gcGF1c2VBdXRvKDEyMDApLCB7IHBhc3NpdmU6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgdmlld3BvcnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgKCkgPT4gd2luZG93LnNldFRpbWVvdXQoc3RhcnRBdXRvLCAyNjApLCB7IHBhc3NpdmU6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgdmlld3BvcnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsICgpID0+IHBhdXNlQXV0bygxMjAwKSwgeyBwYXNzaXZlOiB0cnVlIH0pOw0KICAgICAgICAgICAgICAgIHZpZXdwb3J0LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgKCkgPT4gd2luZG93LnNldFRpbWVvdXQoc3RhcnRBdXRvLCAyNjApLCB7IHBhc3NpdmU6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VzaG93Jywgc3RhcnRBdXRvKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgc3RhcnRBdXRvKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBpZiAoIWF1dG9GcmFtZSAmJiBEYXRlLm5vdygpID49IGhvbGRVbnRpbCkgc3RhcnRBdXRvKCk7DQogICAgICAgICAgICAgICAgfSwgMTIwMCk7DQogICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICBjb25zdCBiaW5kSG9tZU5hdiA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICBjb25zdCBicmFuZEhvbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnJhbmQtaG9tZScpOw0KICAgICAgICAgICAgICAgIGlmICghYnJhbmRIb21lIHx8IGJyYW5kSG9tZS5kYXRhc2V0LmJvdW5kSG9tZU5hdiA9PT0gJ3RydWUnKSByZXR1cm47DQogICAgICAgICAgICAgICAgYnJhbmRIb21lLmRhdGFzZXQuYm91bmRIb21lTmF2ID0gJ3RydWUnOw0KICAgICAgICAgICAgICAgIGJyYW5kSG9tZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsZW5pcyAhPT0gJ3VuZGVmaW5lZCcgJiYgbGVuaXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxlbmlzLnNjcm9sbFRvKDAsIHsgZHVyYXRpb246IDAuNzUgfSk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93Lmhpc3Rvcnk\/LnJlcGxhY2VTdGF0ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsICcnLCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgY29uc3QgaW5pdEZ1bGxNZW51SW50ZXJhY3Rpb24gPSAoKSA9PiB7DQoNCiAgICAgICAgICAgICAgICBjb25zdCBtZW51QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lbnUtYnRuJyk7DQogICAgICAgICAgICAgICAgY29uc3QgY2xvc2VNZW51QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nsb3NlLW1lbnUnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBmdWxsTWVudSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmdWxsLW1lbnUnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBtZW51SXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubWVudS1pdGVtJyk7DQogICAgICAgICAgICAgICAgaWYgKCFtZW51QnRuIHx8ICFjbG9zZU1lbnVCdG4gfHwgIWZ1bGxNZW51IHx8IGZ1bGxNZW51LmRhdGFzZXQuYm91bmQgPT09ICd0cnVlJykgcmV0dXJuOw0KICAgICAgICAgICAgICAgIGZ1bGxNZW51LmRhdGFzZXQuYm91bmQgPSAndHJ1ZSc7DQoNCiAgICAgICAgICAgICAgICBjb25zdCBvcGVuTWVudSA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgZnVsbE1lbnUuY2xhc3NMaXN0LnJlbW92ZSgncG9pbnRlci1ldmVudHMtbm9uZScsICdvcGFjaXR5LTAnLCAnaW52aXNpYmxlJyk7DQogICAgICAgICAgICAgICAgICAgIGZ1bGxNZW51LmNsYXNzTGlzdC5hZGQoJ21lbnUtb3BlbicpOw0KICAgICAgICAgICAgICAgICAgICBtZW51SXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgndHJhbnNsYXRlLXktMTAnLCAnb3BhY2l0eS0wJykpOw0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ25vLXNjcm9sbCcpOw0KICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICBjb25zdCBjbG9zZU1lbnUgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGZ1bGxNZW51LmNsYXNzTGlzdC5yZW1vdmUoJ21lbnUtb3BlbicpOw0KICAgICAgICAgICAgICAgICAgICBmdWxsTWVudS5jbGFzc0xpc3QuYWRkKCdwb2ludGVyLWV2ZW50cy1ub25lJywgJ29wYWNpdHktMCcsICdpbnZpc2libGUnKTsNCiAgICAgICAgICAgICAgICAgICAgbWVudUl0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLmNsYXNzTGlzdC5hZGQoJ3RyYW5zbGF0ZS15LTEwJywgJ29wYWNpdHktMCcpKTsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCduby1zY3JvbGwnKTsNCiAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgbWVudUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICAgICAgICAgb3Blbk1lbnUoKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBjbG9zZU1lbnVCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gew0KICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7DQogICAgICAgICAgICAgICAgICAgIGNsb3NlTWVudSgpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIG1lbnVJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlTWVudSkpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4gew0KICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBjbG9zZU1lbnUoKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIGluaXRGdWxsTWVudUludGVyYWN0aW9uKCk7DQogICAgICAgICAgICBiaW5kSG9tZU5hdigpOw0KICAgICAgICAgICAgYmluZFBhZ2VBbmNob3JOYXZpZ2F0aW9uKCk7DQoNCiAgICAgICAgICAgIGlmICh3aW5kb3cubHVjaWRlPy5jcmVhdGVJY29ucykgd2luZG93Lmx1Y2lkZS5jcmVhdGVJY29ucygpOw0KDQogICAgICAgICAgICBjb25zdCB1cGRhdGVOYXZTY3JvbGxTdGF0ZSA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICBjb25zdCBuYXZiYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmF2YmFyJyk7DQogICAgICAgICAgICAgICAgaWYgKCFuYXZiYXIpIHJldHVybjsNCiAgICAgICAgICAgICAgICBuYXZiYXIuY2xhc3NMaXN0LnRvZ2dsZSgnbmF2LXNjcm9sbGVkJywgd2luZG93LnNjcm9sbFkgPiAyNCk7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgdXBkYXRlTmF2U2Nyb2xsU3RhdGUoKTsNCiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGVOYXZTY3JvbGxTdGF0ZSwgeyBwYXNzaXZlOiB0cnVlIH0pOw0KDQogICAgICAgICAgICBjb25zdCBydW5QcmVsb2FkZXJQcm9ncmVzcyA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICBjb25zdCBjb3VudGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWxvYWRlci1jb3VudGVyJyk7DQogICAgICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3NMaW5lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWxvYWRlci1wcm9ncmVzcy1saW5lJyk7DQogICAgICAgICAgICAgICAgY29uc3QgcHJlbG9hZGVyU3lzdGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByZWxvYWRlci1zeXN0ZW0nKTsNCiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSAwOw0KICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHBlcmZvcm1hbmNlLm5vdygpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gMzQwMDsNCiAgICAgICAgICAgICAgICBjb25zdCB0aWNrID0gKG5vdykgPT4gew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGFwc2VkID0gTWF0aC5taW4oMSwgKG5vdyAtIHN0YXJ0ZWRBdCkgLyBkdXJhdGlvbik7DQogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTWF0aC5tYXgodmFsdWUsIE1hdGgucm91bmQoMTAwICogKDEgLSBNYXRoLnBvdygxIC0gZWxhcHNlZCwgMykpKSk7DQogICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyKSBjb3VudGVyLnRleHRDb250ZW50ID0gU3RyaW5nKHZhbHVlKS5wYWRTdGFydCgzLCAnMCcpOw0KICAgICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3NMaW5lKSBwcm9ncmVzc0xpbmUuc3R5bGUuc2V0UHJvcGVydHkoJy0tbG9hZGVyLXByb2dyZXNzJywgdmFsdWUgKyAnJScpOw0KICAgICAgICAgICAgICAgICAgICBpZiAocHJlbG9hZGVyU3lzdGVtKSBwcmVsb2FkZXJTeXN0ZW0uc3R5bGUuc2V0UHJvcGVydHkoJy0tbG9hZGVyLXByb2dyZXNzJywgdmFsdWUgKyAnJScpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxhcHNlZCA8IDEpIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsNCiAgICAgICAgICAgIH07DQogICAgICAgICAgICBydW5QcmVsb2FkZXJQcm9ncmVzcygpOw0KDQogICAgICAgICAgICBjb25zdCBpbml0U3R1ZGlvUmV2ZWFsID0gKCkgPT4gew0KICAgICAgICAgICAgICAgIGNvbnN0IHJldmVhbEl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJldmVhbC11cCcpOw0KICAgICAgICAgICAgICAgIGlmICghcmV2ZWFsSXRlbXMubGVuZ3RoKSByZXR1cm47DQogICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXMgfHwgISgnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV2ZWFsSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbS5jbGFzc0xpc3QuYWRkKCdpcy12aXNpYmxlJykpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW50cnkuaXNJbnRlcnNlY3RpbmcpIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnRhcmdldC5jbGFzc0xpc3QuYWRkKCdpcy12aXNpYmxlJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZW50cnkudGFyZ2V0KTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfSwgeyB0aHJlc2hvbGQ6IDAuMTYsIHJvb3RNYXJnaW46ICcwcHggMHB4IC04JSAwcHgnIH0pOw0KICAgICAgICAgICAgICAgIHJldmVhbEl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUudHJhbnNpdGlvbkRlbGF5ID0gYCR7TWF0aC5taW4oaW5kZXggKiA5MCwgNDIwKX1tc2A7DQogICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoaXRlbSk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgaW5pdFN0dWRpb1JldmVhbCgpOw0KDQogICAgICAgICAgICBjb25zdCBmb3JjZVJldmVhbFNpdGUgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgY29uc3QgcHJlbG9hZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWxvYWRlcicpOw0KICAgICAgICAgICAgICAgIGNvbnN0IG5hdmJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduYXZiYXInKTsNCiAgICAgICAgICAgICAgICBjb25zdCBoZXJvSXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZ3NhcC1oZXJvJyk7DQoNCiAgICAgICAgICAgICAgICBwcmVsb2FkZXI\/LmNsYXNzTGlzdC5hZGQoJ3ByZWxvYWRlci1oaWRlJyk7DQogICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IGlmIChwcmVsb2FkZXIpIHByZWxvYWRlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9LCA3NjApOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbm8tc2Nyb2xsJywgJ2ludHJvLWxvYWRpbmcnKTsNCg0KICAgICAgICAgICAgICAgIGlmIChuYXZiYXIpIHsNCiAgICAgICAgICAgICAgICAgICAgbmF2YmFyLnN0eWxlLm9wYWNpdHkgPSAnMSc7DQogICAgICAgICAgICAgICAgICAgIG5hdmJhci5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWSgwKSc7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaGVyb0l0ZW1zLmZvckVhY2goKGVsKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLm9wYWNpdHkgPSAnMSc7DQogICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVZKDApJzsNCiAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUuZmlsdGVyID0gJ2JsdXIoMCknOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZm9yY2VSZXZlYWxTaXRlLCA0NjAwKTsNCg0KICAgICAgICAgICAgaWYgKGhhc0dTQVAgJiYgaGFzU2Nyb2xsVHJpZ2dlcikgew0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIGdzYXAucmVnaXN0ZXJQbHVnaW4oU2Nyb2xsVHJpZ2dlcik7DQoNCiAgICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgLy8gMC4gTGVuaXMg5bmz5ruR5rua5YqoICjpq5jnuqfmtYHnlYXmhJ8pDQogICAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIHZhciBsZW5pczsNCiAgICAgICAgICAgIGNvbnN0IHVzZU5hdGl2ZVRvdWNoU2Nyb2xsID0gd2luZG93Lm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDkwMHB4KScpLm1hdGNoZXM7DQogICAgICAgICAgICBpZiAodHlwZW9mIExlbmlzICE9PSAndW5kZWZpbmVkJyAmJiAhdXNlTmF0aXZlVG91Y2hTY3JvbGwpIHsNCiAgICAgICAgICAgICAgICBsZW5pcyA9IG5ldyBMZW5pcyh7DQogICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjU4LA0KICAgICAgICAgICAgICAgICAgICBsZXJwOiAwLjEyLA0KICAgICAgICAgICAgICAgICAgICBlYXNpbmc6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6IDEgLSBNYXRoLnBvdygtMiAqIHQgKyAyLCAzKSAvIDI7IH0sDQogICAgICAgICAgICAgICAgICAgIHNtb290aFdoZWVsOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICB3aGVlbE11bHRpcGxpZXI6IDEuMDUsDQogICAgICAgICAgICAgICAgICAgIHRvdWNoTXVsdGlwbGllcjogMS4wNSwNCiAgICAgICAgICAgICAgICAgICAgaW5maW5pdGU6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICBzeW5jVG91Y2g6IGZhbHNlLA0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgLy8g5ZCM5q2lIEdTQVAgU2Nyb2xsVHJpZ2dlciDkuI4gTGVuaXMNCiAgICAgICAgICAgICAgICBsZW5pcy5vbignc2Nyb2xsJywgU2Nyb2xsVHJpZ2dlci51cGRhdGUpOw0KICAgICAgICAgICAgICAgIGdzYXAudGlja2VyLmFkZChmdW5jdGlvbiAodGltZSkgew0KICAgICAgICAgICAgICAgICAgICBsZW5pcy5yYWYodGltZSAqIDEwMDApOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIGdzYXAudGlja2VyLmxhZ1Ntb290aGluZygwKTsgLy8gZGlzYWJsZWQgZm9yIHBlcmZvcm1hbmNlDQoNCiAgICAgICAgICAgIGNvbnN0IG1vdGlvblF1ZXJ5ID0gd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIik7DQogICAgICAgICAgICBpZiAobW90aW9uUXVlcnkubWF0Y2hlcykgew0KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGVuaXMgIT09ICJ1bmRlZmluZWQiICYmIGxlbmlzKSBsZW5pcy5zdG9wKCk7DQogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBnc2FwICE9PSAidW5kZWZpbmVkIikgZ3NhcC5nbG9iYWxUaW1lbGluZS50aW1lU2NhbGUoMCk7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCJyZWR1Y2VkLW1vdGlvbiIpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCduYXRpdmUtdG91Y2gtc2Nyb2xsJyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgLy8gMS4g55S15b2x57qn5Yqg6L295Yqo55S7ICjph43loZHlpKfmsJTlvIDlnLopDQogICAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIHNldFRpbWVvdXQoc3RhcnRJbnRybywgMjIwMCk7CiAgICAgICAgICAgIA0KICAgICAgICAgICAgZnVuY3Rpb24gc3RhcnRJbnRybygpIHsNCiAgICAgICAgICAgICAgICBjb25zdCBwcmVsb2FkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJlbG9hZGVyJyk7DQogICAgICAgICAgICAgICAgY29uc3QgbmF2YmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25hdmJhcicpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGhlcm9JdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5nc2FwLWhlcm8nKTsNCg0KICAgICAgICAgICAgICAgIHByZWxvYWRlcj8uY2xhc3NMaXN0LmFkZCgncHJlbG9hZGVyLWhpZGUnKTsNCiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgaWYocHJlbG9hZGVyKSBwcmVsb2FkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfSwgODAwKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ25vLXNjcm9sbCcsICdpbnRyby1sb2FkaW5nJyk7DQoNCiAgICAgICAgICAgICAgICBpZiAobmF2YmFyKSB7DQogICAgICAgICAgICAgICAgICAgIG5hdmJhci5zdHlsZS5vcGFjaXR5ID0gJzEnOw0KICAgICAgICAgICAgICAgICAgICBuYXZiYXIuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVkoMCknOw0KICAgICAgICAgICAgICAgICAgICBuYXZiYXIuc3R5bGUudHJhbnNpdGlvbiA9ICdvcGFjaXR5IC44cyBlYXNlLCB0cmFuc2Zvcm0gLjhzIGVhc2UnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBoZXJvSXRlbXMuZm9yRWFjaCgoZWwsIGluZGV4KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9IGBvcGFjaXR5IC44MnMgY3ViaWMtYmV6aWVyKC4yMiwxLC4zNiwxKSAke2luZGV4ICogMC4wOX1zLCB0cmFuc2Zvcm0gLjgycyBjdWJpYy1iZXppZXIoLjIyLDEsLjM2LDEpICR7aW5kZXggKiAwLjA5fXMsIGZpbHRlciAuODJzIGN1YmljLWJlemllciguMjIsMSwuMzYsMSkgJHtpbmRleCAqIDAuMDl9c2A7CiAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUub3BhY2l0eSA9ICcxJzsKICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWSgwKSc7CiAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUuZmlsdGVyID0gJ2JsdXIoMCknOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Njcm9sbC10by1leHBsb3JlJyk\/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsNCiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVmF1bHRTZWN0aW9uKCk7DQogICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICAvLyAyLiDmu5rliqjop4blt67kuI7mta7njrDliqjnlLsgICAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGdzYXAudXRpbHMudG9BcnJheSgnLmdzYXAtZmFkZS11cCcpLmZpbHRlcihlbCA9PiAhZWwuY2xvc2VzdCgnI2V4cGxvcmUnKSkuZm9yRWFjaChlbCA9PiB7DQogICAgICAgICAgICAgICAgZ3NhcC5mcm9tKGVsLCB7DQogICAgICAgICAgICAgICAgICAgIHNjcm9sbFRyaWdnZXI6IHsgdHJpZ2dlcjogZWwsIHN0YXJ0OiAidG9wIDg1JSIgfSwNCiAgICAgICAgICAgICAgICAgICAgeTogNDAsIG9wYWNpdHk6IDAsIGR1cmF0aW9uOiAxLjIsIGVhc2U6ICJwb3dlcjMub3V0Ig0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGdzYXAudXRpbHMudG9BcnJheSgiLmdzYXAtcmV2ZWFsLWRpYWdvbmFsIikuZm9yRWFjaCgoZWwpID0+IHsNCiAgICAgICAgICAgICAgICBnc2FwLnRvKGVsLCB7DQogICAgICAgICAgICAgICAgICAgIHNjcm9sbFRyaWdnZXI6IHsgdHJpZ2dlcjogZWwsIHN0YXJ0OiAidG9wIDgwJSIgfSwNCiAgICAgICAgICAgICAgICAgICAgY2xpcFBhdGg6ICJwb2x5Z29uKDAgMCwgMTAwJSAwLCAxMDAlIDEwMCUsIDAgMTAwJSkiLA0KICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMS41LA0KICAgICAgICAgICAgICAgICAgICBlYXNlOiAicG93ZXI0LmluT3V0Ig0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGdzYXAudG8oIiNjcmFmdC1pbWciLCB7DQogICAgICAgICAgICAgICAgeVBlcmNlbnQ6IDEwLCBlYXNlOiAibm9uZSIsDQogICAgICAgICAgICAgICAgc2Nyb2xsVHJpZ2dlcjogeyB0cmlnZ2VyOiAiI2lubm92YXRpb24iLCBzdGFydDogInRvcCBib3R0b20iLCBlbmQ6ICJib3R0b20gdG9wIiwgc2NydWI6IHRydWUgfQ0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGdzYXAudXRpbHMudG9BcnJheSgnLmNhbGlicmUtbWVkaWEgaW1nLCAuY2FsaWJyZS1tZWRpYSB2aWRlbycpLmZvckVhY2goKG1lZGlhKSA9PiB7DQogICAgICAgICAgICAgICAgZ3NhcC50byhtZWRpYSwgew0KICAgICAgICAgICAgICAgICAgICB5UGVyY2VudDogLTcsDQogICAgICAgICAgICAgICAgICAgIHNjYWxlOiAxLjA4LA0KICAgICAgICAgICAgICAgICAgICBlYXNlOiAibm9uZSIsDQogICAgICAgICAgICAgICAgICAgIHNjcm9sbFRyaWdnZXI6IHsgdHJpZ2dlcjogbWVkaWEuY2xvc2VzdCgnLmNhbGlicmUtcGFuZWwnKSwgc3RhcnQ6ICJ0b3AgYm90dG9tIiwgZW5kOiAiYm90dG9tIHRvcCIsIHNjcnViOiB0cnVlIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICBnc2FwLmZyb20oJy5hcmNoaXZlLWNhcmQnLCB7DQogICAgICAgICAgICAgICAgc2Nyb2xsVHJpZ2dlcjogeyB0cmlnZ2VyOiAnI3JlZmVyZW5jZS1hcmNoaXZlJywgc3RhcnQ6ICJ0b3AgNzIlIiB9LA0KICAgICAgICAgICAgICAgIHk6IDQ2LA0KICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAsDQogICAgICAgICAgICAgICAgc2NhbGU6IDAuOTYsDQogICAgICAgICAgICAgICAgc3RhZ2dlcjogMC4wOCwNCiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMSwNCiAgICAgICAgICAgICAgICBlYXNlOiAicG93ZXIzLm91dCINCiAgICAgICAgICAgIH0pOw0KDQovLyBMYWRpZXMgcnVud2F5IHBhcmFsbGF4DQpnc2FwLnV0aWxzLnRvQXJyYXkoIi5nc2FwLXBhcmFsbGF4IikuZm9yRWFjaChmdW5jdGlvbiAoaW1nKSB7DQogICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiA5MDBweCknKS5tYXRjaGVzKSByZXR1cm47DQogICAgdmFyIHNwZWVkID0gcGFyc2VGbG9hdChpbWcuZ2V0QXR0cmlidXRlKCJkYXRhLXNwZWVkIikpIHx8IDAuMjsNCiAgICBnc2FwLnRvKGltZywgew0KICAgICAgICB5UGVyY2VudDogc3BlZWQgKiA2MCwNCiAgICAgICAgZWFzZTogIm5vbmUiLA0KICAgICAgICBzY3JvbGxUcmlnZ2VyOiB7IHRyaWdnZXI6IGltZy5jbG9zZXN0KCIubGFkaWVzLXJ1bndheSIpLCBzdGFydDogInRvcCBib3R0b20iLCBlbmQ6ICJib3R0b20gdG9wIiwgc2NydWI6IDEuMiB9DQogICAgfSk7DQp9KTsNCg0KLy8gTGFkaWVzIHN0YWNrIHN0YWdnZXJlZCByZXZlYWwNCmlmICghd2luZG93Lm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDkwMHB4KScpLm1hdGNoZXMpIHsNCiAgICBnc2FwLmZyb20oIi5sYWRpZXMtc3RhY2sgaW1nIiwgew0KICAgICAgICBzY3JvbGxUcmlnZ2VyOiB7IHRyaWdnZXI6ICIjbGFkaWVzLXJ1bndheSIsIHN0YXJ0OiAidG9wIDY1JSIgfSwNCiAgICAgICAgeTogODAsDQogICAgICAgIG9wYWNpdHk6IDAsDQogICAgICAgIHNjYWxlOiAwLjkyLA0KICAgICAgICBzdGFnZ2VyOiAwLjE0LA0KICAgICAgICBkdXJhdGlvbjogMS4yLA0KICAgICAgICBlYXNlOiAicG93ZXIzLm91dCINCiAgICB9KTsNCn0NCg0KLy8gQXRlbGllciB0aWxlcyByZXZlYWwNCmdzYXAudXRpbHMudG9BcnJheSgiI2F0ZWxpZXItcHJvY2VzcyAuYXNzZXQtdGlsZSIpLmZvckVhY2goZnVuY3Rpb24gKHRpbGUsIGkpIHsNCiAgICBnc2FwLmZyb20odGlsZSwgew0KICAgICAgICBzY3JvbGxUcmlnZ2VyOiB7IHRyaWdnZXI6ICIjYXRlbGllci1wcm9jZXNzIiwgc3RhcnQ6ICJ0b3AgNzIlIiB9LA0KICAgICAgICB5OiA2MCwNCiAgICAgICAgb3BhY2l0eTogMCwNCiAgICAgICAgc2NhbGU6IDAuOTQsDQogICAgICAgIGRlbGF5OiBpICogMC4wOCwNCiAgICAgICAgZHVyYXRpb246IDEsDQogICAgICAgIGVhc2U6ICJwb3dlcjMub3V0Ig0KICAgIH0pOw0KfSk7DQoNCi8vIEpvdXJuYWwgc2Vjb25kIHJvdyByZXZlYWwNCmdzYXAuZnJvbSgiI2pvdXJuYWwgLmdyaWQ6bnRoLW9mLXR5cGUoMikgYXJ0aWNsZSIsIHsNCiAgICBzY3JvbGxUcmlnZ2VyOiB7IHRyaWdnZXI6ICIjam91cm5hbCAuZ3JpZDpudGgtb2YtdHlwZSgyKSIsIHN0YXJ0OiAidG9wIDgwJSIgfSwNCiAgICB5OiA0MCwNCiAgICBvcGFjaXR5OiAwLA0KICAgIHN0YWdnZXI6IDAuMSwNCiAgICBkdXJhdGlvbjogMC45LA0KICAgIGVhc2U6ICJwb3dlcjMub3V0Ig0KfSk7DQoNCg0KDQogICAgICAgICAgICBjb25zdCBjb3VudGVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jb3VudGVyJyk7DQogICAgICAgICAgICBjb3VudGVycy5mb3JFYWNoKGNvdW50ZXIgPT4gew0KICAgICAgICAgICAgICAgIFNjcm9sbFRyaWdnZXIuY3JlYXRlKHsNCiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcjogY291bnRlciwgc3RhcnQ6ICJ0b3AgODUlIiwgb25jZTogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgb25FbnRlcjogKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gK2NvdW50ZXIuZ2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZ3NhcC50byhjb3VudGVyLCB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiB0YXJnZXQsIGR1cmF0aW9uOiAyLjUsIGVhc2U6ICJwb3dlcjMub3V0Iiwgc25hcDogeyBpbm5lckhUTUw6IDEgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblVwZGF0ZTogZnVuY3Rpb24oKSB7IGNvdW50ZXIuaW5uZXJIVE1MID0gTWF0aC5yb3VuZCh0aGlzLnRhcmdldHMoKVswXS5pbm5lckhUTUwpOyB9DQogICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgLy8gMy4g5ruh5bGP6KeG5beu5ZCR5LiL6IGU5YqoIDMg5Liq6KeG6aKR5qih5Z2XDQogICAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGNvbnN0IGluaXRWaWRlb1Njcm9sbCA9ICgpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IHNsaWRlcyA9IGdzYXAudXRpbHMudG9BcnJheSgnLnZpZGVvLXNsaWRlJyk7CiAgICAgICAgICAgICAgICBpZiAoc2xpZGVzLmxlbmd0aCA8IDMpIHJldHVybjsKICAgICAgICAgICAgICAgIGNvbnN0IHRyYWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZGVvLXNjcm9sbC10cmFjaycpOwogICAgICAgICAgICAgICAgY29uc3QgaXNUcmFja05lYXJWaWV3cG9ydCA9ICgpID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRyYWNrKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRyYWNrLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IDkwMDsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVjdC5ib3R0b20gPiAtdmlld3BvcnRIICogMC40NSAmJiByZWN0LnRvcCA8IHZpZXdwb3J0SCAqIDAuNzI7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgY29uc3Qgc2V0SW50ZXJhY3RpdmVTbGlkZSA9IChhY3RpdmVJbmRleCA9IDApID0+IHsKICAgICAgICAgICAgICAgICAgICBzbGlkZXMuZm9yRWFjaCgoc2xpZGUsIGluZGV4KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBpbmRleCA9PT0gYWN0aXZlSW5kZXggPyAnYXV0bycgOiAnbm9uZSc7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlLmNsYXNzTGlzdC50b2dnbGUoJ2lzLWFjdGl2ZScsIGluZGV4ID09PSBhY3RpdmVJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgY29uc3QgY29tcGFjdE1vdGlvbiA9IHdpbmRvdy5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiA5MDBweCknKS5tYXRjaGVzIHx8IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXM7CiAgICAgICAgICAgICAgICBpZiAoY29tcGFjdE1vdGlvbikgewogICAgICAgICAgICAgICAgICAgIHNsaWRlcy5mb3JFYWNoKChzbGlkZSwgaW5kZXgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29weSA9IHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy5yZWxhdGl2ZS56LTEwJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZGVvID0gc2xpZGUucXVlcnlTZWxlY3RvcigndmlkZW8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGUuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJzsKICAgICAgICAgICAgICAgICAgICAgICAgZ3NhcC5zZXQoc2xpZGUsIHsgY2xlYXJQcm9wczogJ3RyYW5zZm9ybScgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3B5KSBnc2FwLnNldChjb3B5LCB7IGNsZWFyUHJvcHM6ICd0cmFuc2Zvcm0sb3BhY2l0eScgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWRlbykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW8ubXV0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW8ucGxheXNJbmxpbmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwICYmIGlzVHJhY2tOZWFyVmlld3BvcnQoKSkgdmlkZW8ucGxheSgpLmNhdGNoKCgpID0+IHt9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgdmlkZW8ucGF1c2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29uc3QgdGl0bGVPcGFjaXR5ID0gMC44MjsKICAgICAgICAgICAgICAgIHNldEludGVyYWN0aXZlU2xpZGUoMCk7CgogICAgICAgICAgICAgICAgc2xpZGVzLmZvckVhY2goKHNsaWRlLCBpbmRleCkgPT4gewogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcHkgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcucmVsYXRpdmUuei0xMCcpOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWRlbyA9IHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvJyk7DQogICAgICAgICAgICAgICAgICAgIGlmICh2aWRlbykgewogICAgICAgICAgICAgICAgICAgICAgICB2aWRlby5tdXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvLnBsYXlzSW5saW5lID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwICYmIGlzVHJhY2tOZWFyVmlld3BvcnQoKSkgdmlkZW8ucGxheSgpLmNhdGNoKCgpID0+IHt9KTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB2aWRlby5wYXVzZSgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjb25zdCBtZWRpYSA9IHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvLCBpbWcnKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBnc2FwLnNldChzbGlkZSwgeyBhdXRvQWxwaGE6IDEsIHlQZXJjZW50OiAwLCB4UGVyY2VudDogMCwgY2xpcFBhdGg6ICdpbnNldCgwJSAwJSAwJSAwJSknLCBzY2FsZTogMSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZWRpYSkgZ3NhcC5zZXQobWVkaWEsIHsgc2NhbGU6IDEuMDMsIHhQZXJjZW50OiAwLCB5UGVyY2VudDogMCB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3B5KSBnc2FwLnNldChjb3B5LCB7IHk6IDAsIHg6IDAsIG9wYWNpdHk6IHRpdGxlT3BhY2l0eSB9KTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZ3NhcC5zZXQoc2xpZGUsIHsgYXV0b0FscGhhOiAxLCB5UGVyY2VudDogMCwgeFBlcmNlbnQ6IDAsIGNsaXBQYXRoOiAnaW5zZXQoMCUgMTAwJSAwJSAwJSknLCBzY2FsZTogMSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZWRpYSkgZ3NhcC5zZXQobWVkaWEsIHsgc2NhbGU6IDEuMDksIHhQZXJjZW50OiAzLCB5UGVyY2VudDogMCB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3B5KSBnc2FwLnNldChjb3B5LCB7IHk6IDI0LCB4OiA0OCwgb3BhY2l0eTogMCB9KTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGdzYXAuc2V0KHNsaWRlLCB7IGF1dG9BbHBoYTogMCwgeVBlcmNlbnQ6IDAsIHhQZXJjZW50OiAwLCBjbGlwUGF0aDogJ2luc2V0KDAlIDAlIDAlIDAlKScsIHNjYWxlOiAxLjA0NSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZWRpYSkgZ3NhcC5zZXQobWVkaWEsIHsgc2NhbGU6IDEuMTYsIHhQZXJjZW50OiAwLCB5UGVyY2VudDogMCB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3B5KSBnc2FwLnNldChjb3B5LCB7IHk6IDg2LCB4OiAwLCBvcGFjaXR5OiAwIH0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICBjb25zdCB0bCA9IGdzYXAudGltZWxpbmUoew0KICAgICAgICAgICAgICAgICAgICBzY3JvbGxUcmlnZ2VyOiB7DQogICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyOiAiI3ZpZGVvLXNjcm9sbC10cmFjayIsDQogICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogInRvcCB0b3AiLA0KICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiAoKSA9PiBgKz0ke3dpbmRvdy5pbm5lckhlaWdodCAqIChzbGlkZXMubGVuZ3RoIC0gMSl9YCwNCiAgICAgICAgICAgICAgICAgICAgICAgIHNjcnViOiAwLjg1LA0KICAgICAgICAgICAgICAgICAgICAgICAgcGluOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAgICAgYW50aWNpcGF0ZVBpbjogMSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRhdGVPblJlZnJlc2g6IHRydWUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzbGlkZXNbMF07DQogICAgICAgICAgICAgICAgY29uc3QgbHVtZSA9IHNsaWRlc1sxXTsNCiAgICAgICAgICAgICAgICBjb25zdCBkZXRhaWwgPSBzbGlkZXNbMl07DQogICAgICAgICAgICAgICAgY29uc3QgZmllbGRDb3B5ID0gZmllbGQucXVlcnlTZWxlY3RvcignLnJlbGF0aXZlLnotMTAnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBsdW1lQ29weSA9IGx1bWUucXVlcnlTZWxlY3RvcignLnJlbGF0aXZlLnotMTAnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBkZXRhaWxDb3B5ID0gZGV0YWlsLnF1ZXJ5U2VsZWN0b3IoJy5yZWxhdGl2ZS56LTEwJyk7DQogICAgICAgICAgICAgICAgY29uc3QgZmllbGRNZWRpYSA9IGZpZWxkLnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvLCBpbWcnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBsdW1lTWVkaWEgPSBsdW1lLnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvLCBpbWcnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBkZXRhaWxNZWRpYSA9IGRldGFpbC5xdWVyeVNlbGVjdG9yKCd2aWRlbywgaW1nJyk7DQogICAgICAgICAgICAgICAgY29uc3QgZmllbGRWaWRlbyA9IGZpZWxkLnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvJyk7DQogICAgICAgICAgICAgICAgY29uc3QgbHVtZVZpZGVvID0gbHVtZS5xdWVyeVNlbGVjdG9yKCd2aWRlbycpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGRldGFpbFZpZGVvID0gZGV0YWlsLnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvJyk7DQoNCiAgICAgICAgICAgICAgICB0bC50byhmaWVsZE1lZGlhLCB7IHNjYWxlOiAxLjEsIHhQZXJjZW50OiAtMiwgZWFzZTogJ25vbmUnLCBkdXJhdGlvbjogMC45IH0sIDApOw0KICAgICAgICAgICAgICAgIGlmIChmaWVsZENvcHkpIHRsLnRvKGZpZWxkQ29weSwgeyB4OiAtNTQsIG9wYWNpdHk6IDAuMjgsIGVhc2U6ICdwb3dlcjIub3V0JywgZHVyYXRpb246IDAuNyB9LCAwLjA4KTsKCiAgICAgICAgICAgICAgICB0bC5jYWxsKCgpID0+IGx1bWVWaWRlbz8ucGxheSgpLmNhdGNoKCgpID0+IHt9KSwgbnVsbCwgMC40Nik7CiAgICAgICAgICAgICAgICB0bC5jYWxsKCgpID0+IHNldEludGVyYWN0aXZlU2xpZGUoMSksIG51bGwsIDAuNjIpOwogICAgICAgICAgICAgICAgdGwudG8obHVtZSwgeyBjbGlwUGF0aDogJ2luc2V0KDAlIDAlIDAlIDAlKScsIGVhc2U6ICdwb3dlcjMuaW5PdXQnLCBkdXJhdGlvbjogMS4wNSB9LCAwLjU1KTsKICAgICAgICAgICAgICAgIHRsLnRvKGx1bWVNZWRpYSwgeyBzY2FsZTogMS4wMiwgeFBlcmNlbnQ6IDAsIGVhc2U6ICdwb3dlcjIub3V0JywgZHVyYXRpb246IDEuMDUgfSwgMC41NSk7CiAgICAgICAgICAgICAgICBpZiAobHVtZUNvcHkpIHRsLnRvKGx1bWVDb3B5LCB7IHg6IDAsIHk6IDAsIG9wYWNpdHk6IHRpdGxlT3BhY2l0eSwgZWFzZTogJ3Bvd2VyMy5vdXQnLCBkdXJhdGlvbjogMC43MiB9LCAwLjcyKTsKICAgICAgICAgICAgICAgIHRsLmNhbGwoKCkgPT4gZmllbGRWaWRlbz8ucGF1c2UoKSwgbnVsbCwgMS4zKTsNCg0KICAgICAgICAgICAgICAgIGlmIChsdW1lQ29weSkgdGwudG8obHVtZUNvcHksIHsgeTogLTI4LCBvcGFjaXR5OiAwLjM4LCBlYXNlOiAncG93ZXIyLm91dCcsIGR1cmF0aW9uOiAwLjYgfSwgMS40Mik7CiAgICAgICAgICAgICAgICB0bC5jYWxsKCgpID0+IGRldGFpbFZpZGVvPy5wbGF5KCkuY2F0Y2goKCkgPT4ge30pLCBudWxsLCAxLjQ2KTsKICAgICAgICAgICAgICAgIHRsLmNhbGwoKCkgPT4gc2V0SW50ZXJhY3RpdmVTbGlkZSgyKSwgbnVsbCwgMS41OCk7CiAgICAgICAgICAgICAgICB0bC50byhkZXRhaWwsIHsgYXV0b0FscGhhOiAxLCBzY2FsZTogMSwgZWFzZTogJ3Bvd2VyMi5pbk91dCcsIGR1cmF0aW9uOiAwLjkgfSwgMS41NSk7CiAgICAgICAgICAgICAgICB0bC50byhkZXRhaWxNZWRpYSwgeyBzY2FsZTogMS4wNiwgZWFzZTogJ25vbmUnLCBkdXJhdGlvbjogMC45NSB9LCAxLjU1KTsNCiAgICAgICAgICAgICAgICBpZiAoZGV0YWlsQ29weSkgdGwudG8oZGV0YWlsQ29weSwgeyB5OiAwLCBvcGFjaXR5OiB0aXRsZU9wYWNpdHksIGVhc2U6ICdwb3dlcjMub3V0JywgZHVyYXRpb246IDAuNyB9LCAxLjcyKTsNCiAgICAgICAgICAgICAgICB0bC50byhsdW1lLCB7IGF1dG9BbHBoYTogMC4yNCwgZWFzZTogJ3Bvd2VyMi5vdXQnLCBkdXJhdGlvbjogMC42NSB9LCAxLjc2KTsNCiAgICAgICAgICAgICAgICB0bC5jYWxsKCgpID0+IGx1bWVWaWRlbz8ucGF1c2UoKSwgbnVsbCwgMi4wNSk7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgaW5pdFZpZGVvU2Nyb2xsKCk7DQoNCiAgICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgLy8gNC4g5qiq5ZCR6ZKJ5L2P5rua5Yqo5pWI5p6cIChTY3JvbGx5dGVsbGluZykNCiAgICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgY29uc3Qgc2xpZGVyQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NsaWRlci1jb250YWluZXInKTsNCiAgICAgICAgICAgIGNvbnN0IHNsaWRlclByZXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2xpZGVyLXByZXYnKTsNCiAgICAgICAgICAgIGNvbnN0IHNsaWRlck5leHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2xpZGVyLW5leHQnKTsNCg0KICAgICAgICAgICAgaWYgKHNsaWRlckNvbnRhaW5lcikgew0KICAgICAgICAgICAgICAgIGNvbnN0IGlzTW9iaWxlU2xpZGVyID0gKCkgPT4gd2luZG93Lm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDc2OHB4KScpLm1hdGNoZXM7DQogICAgICAgICAgICAgICAgbGV0IGdldFNjcm9sbEFtb3VudCA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgbGV0IG1heFNjcm9sbCA9IHNsaWRlckNvbnRhaW5lci5zY3JvbGxXaWR0aCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCArIDQ4Ow0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF4U2Nyb2xsID4gMCA\/IC1tYXhTY3JvbGwgOiAwOw0KICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICBjb25zdCBleHBsb3JlU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBsb3JlJyk7DQogICAgICAgICAgICAgICAgU2Nyb2xsVHJpZ2dlci5jcmVhdGUoew0KICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyOiAnI2V4cGxvcmUnLA0KICAgICAgICAgICAgICAgICAgICBzdGFydDogJ3RvcCBib3R0b20nLA0KICAgICAgICAgICAgICAgICAgICBlbmQ6ICd0b3AgdG9wJywNCiAgICAgICAgICAgICAgICAgICAgc2NydWI6IDAuMzUsDQogICAgICAgICAgICAgICAgICAgIG9uVXBkYXRlOiAoc2VsZikgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGxvcmVTZWN0aW9uKSBleHBsb3JlU2VjdGlvbi5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1leHBsb3JlLXByb2dyZXNzJywgc2VsZi5wcm9ncmVzcy50b0ZpeGVkKDMpKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgU2Nyb2xsVHJpZ2dlci5jcmVhdGUoew0KICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyOiAnI2V4cGxvcmUnLA0KICAgICAgICAgICAgICAgICAgICBzdGFydDogJ3RvcCBib3R0b20nLA0KICAgICAgICAgICAgICAgICAgICBlbmQ6ICdib3R0b20gdG9wJywNCiAgICAgICAgICAgICAgICAgICAgb25FbnRlcjogKCkgPT4gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdzY2VuZS1leHBsb3JlLXRyYW5zaXRpb24nKSwNCiAgICAgICAgICAgICAgICAgICAgb25FbnRlckJhY2s6ICgpID0+IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnc2NlbmUtZXhwbG9yZS10cmFuc2l0aW9uJyksDQogICAgICAgICAgICAgICAgICAgIG9uTGVhdmU6ICgpID0+IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnc2NlbmUtZXhwbG9yZS10cmFuc2l0aW9uJyksDQogICAgICAgICAgICAgICAgICAgIG9uTGVhdmVCYWNrOiAoKSA9PiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3NjZW5lLWV4cGxvcmUtdHJhbnNpdGlvbicpDQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICBjb25zdCBzeW5jU2Nyb2xsU3RhdGUgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IHNsaWRlclZpZXdwb3J0ID0gc2xpZGVyQ29udGFpbmVyLnBhcmVudEVsZW1lbnQ7DQogICAgICAgICAgICAgICAgbGV0IHByb2R1Y3RMb29wV2lkdGggPSAwOw0KICAgICAgICAgICAgICAgIGxldCBwcm9kdWN0TG9vcFN0YXJ0ID0gMDsNCiAgICAgICAgICAgICAgICBsZXQgcHJvZHVjdExvb3BFbmQgPSAwOw0KICAgICAgICAgICAgICAgIGxldCBwcm9kdWN0QXV0b0ZyYW1lID0gMDsNCiAgICAgICAgICAgICAgICBsZXQgcHJvZHVjdFJlc3VtZVRpbWVyID0gMDsNCiAgICAgICAgICAgICAgICBsZXQgcHJvZHVjdExhc3RBdXRvVGltZSA9IDA7DQogICAgICAgICAgICAgICAgbGV0IHByb2R1Y3RIb2xkVW50aWwgPSAwOw0KICAgICAgICAgICAgICAgIGxldCBwcm9kdWN0TGFzdFNlZW5MZWZ0ID0gMDsNCiAgICAgICAgICAgICAgICBsZXQgcHJvZHVjdExhc3RTZWVuQXQgPSBEYXRlLm5vdygpOw0KDQogICAgICAgICAgICAgICAgY29uc3QgYnVpbGRQcm9kdWN0TG9vcCA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFzbGlkZXJWaWV3cG9ydCB8fCBzbGlkZXJDb250YWluZXIuZGF0YXNldC5sb29wQ2xvbmVkID09PSAndHJ1ZScpIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxzID0gQXJyYXkuZnJvbShzbGlkZXJDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLnNsaWRlLWNhcmQ6bm90KFtkYXRhLXByb2R1Y3QtY2xvbmVdKScpKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFscy5sZW5ndGggPCAyKSByZXR1cm47DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7DQogICAgICAgICAgICAgICAgICAgIG9yaWdpbmFscy5mb3JFYWNoKChjYXJkKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVDbG9uZSA9IGNhcmQuY2xvbmVOb2RlKHRydWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQ2xvbmUuZGF0YXNldC5wcm9kdWN0Q2xvbmUgPSAnYmVmb3JlJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUNsb25lLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlLmFwcGVuZENoaWxkKGJlZm9yZUNsb25lKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJDbG9uZSA9IGNhcmQuY2xvbmVOb2RlKHRydWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJDbG9uZS5kYXRhc2V0LnByb2R1Y3RDbG9uZSA9ICdhZnRlcic7DQogICAgICAgICAgICAgICAgICAgICAgICBhZnRlckNsb25lLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIuYXBwZW5kQ2hpbGQoYWZ0ZXJDbG9uZSk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICBzbGlkZXJDb250YWluZXIucHJlcGVuZChiZWZvcmUpOw0KICAgICAgICAgICAgICAgICAgICBzbGlkZXJDb250YWluZXIuYXBwZW5kKGFmdGVyKTsNCiAgICAgICAgICAgICAgICAgICAgc2xpZGVyQ29udGFpbmVyLmRhdGFzZXQubG9vcENsb25lZCA9ICd0cnVlJzsNCiAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgY29uc3QgbWVhc3VyZVByb2R1Y3RMb29wID0gKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBpZiAoIXNsaWRlclZpZXdwb3J0KSByZXR1cm47DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0T3JpZ2luYWwgPSBzbGlkZXJDb250YWluZXIucXVlcnlTZWxlY3RvcignLnNsaWRlLWNhcmQ6bm90KFtkYXRhLXByb2R1Y3QtY2xvbmVdKScpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0T3JpZ2luYWwpIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdExvb3BTdGFydCA9IGZpcnN0T3JpZ2luYWwub2Zmc2V0TGVmdDsNCiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdExvb3BXaWR0aCA9IHByb2R1Y3RMb29wU3RhcnQ7DQogICAgICAgICAgICAgICAgICAgIHByb2R1Y3RMb29wRW5kID0gcHJvZHVjdExvb3BTdGFydCArIHByb2R1Y3RMb29wV2lkdGg7DQogICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0TG9vcFdpZHRoID4gMCAmJiBzbGlkZXJWaWV3cG9ydC5zY3JvbGxMZWZ0IDwgcHJvZHVjdExvb3BTdGFydCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyVmlld3BvcnQuc2Nyb2xsTGVmdCArPSBwcm9kdWN0TG9vcFdpZHRoOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZVByb2R1Y3RMb29wID0gKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBpZiAoIXNsaWRlclZpZXdwb3J0IHx8ICFwcm9kdWN0TG9vcFdpZHRoKSByZXR1cm47DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGd1YXJkID0gTWF0aC5tYXgoOTYsIHNsaWRlclZpZXdwb3J0LmNsaWVudFdpZHRoICogMC4wOCk7DQogICAgICAgICAgICAgICAgICAgIGxldCBuZXh0TGVmdCA9IHNsaWRlclZpZXdwb3J0LnNjcm9sbExlZnQ7DQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0TGVmdCA+PSBwcm9kdWN0TG9vcEVuZCAtIGd1YXJkKSBuZXh0TGVmdCAtPSBwcm9kdWN0TG9vcFdpZHRoOw0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV4dExlZnQgPCBwcm9kdWN0TG9vcFN0YXJ0IC0gZ3VhcmQpIG5leHRMZWZ0ICs9IHByb2R1Y3RMb29wV2lkdGg7DQogICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhuZXh0TGVmdCAtIHNsaWRlclZpZXdwb3J0LnNjcm9sbExlZnQpID4gMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyVmlld3BvcnQuc2Nyb2xsTGVmdCA9IG5leHRMZWZ0Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0UHJvZHVjdEF1dG8gPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGlmICghc2xpZGVyVmlld3BvcnQgfHwgcHJvZHVjdEF1dG9GcmFtZSB8fCB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknKS5tYXRjaGVzKSByZXR1cm47DQogICAgICAgICAgICAgICAgICAgIHByb2R1Y3RMYXN0QXV0b1RpbWUgPSAwOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGVwID0gKHRpbWUpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvZHVjdExhc3RBdXRvVGltZSkgcHJvZHVjdExhc3RBdXRvVGltZSA9IHRpbWU7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWx0YSA9IE1hdGgubWluKDQ4LCB0aW1lIC0gcHJvZHVjdExhc3RBdXRvVGltZSk7DQogICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0TGFzdEF1dG9UaW1lID0gdGltZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlclZpZXdwb3J0LnNjcm9sbExlZnQgKz0gTWF0aC5tYXgoMS4zNSwgZGVsdGEgKiAwLjEwNSk7DQogICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXJDb250YWluZXIuZGF0YXNldC5hdXRvVGlja3MgPSBTdHJpbmcoKE51bWJlcihzbGlkZXJDb250YWluZXIuZGF0YXNldC5hdXRvVGlja3MgfHwgJzAnKSArIDEpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVByb2R1Y3RMb29wKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0QXV0b0ZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApOw0KICAgICAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgICAgICBwcm9kdWN0QXV0b0ZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApOw0KICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICBjb25zdCBwYXVzZVByb2R1Y3RBdXRvID0gKHJlc3VtZURlbGF5ID0gOTAwKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIHByb2R1Y3RIb2xkVW50aWwgPSBEYXRlLm5vdygpICsgcmVzdW1lRGVsYXk7DQogICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0QXV0b0ZyYW1lKSBjYW5jZWxBbmltYXRpb25GcmFtZShwcm9kdWN0QXV0b0ZyYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdEF1dG9GcmFtZSA9IDA7DQogICAgICAgICAgICAgICAgICAgIHByb2R1Y3RMYXN0QXV0b1RpbWUgPSAwOw0KICAgICAgICAgICAgICAgICAgICBpZiAocHJvZHVjdFJlc3VtZVRpbWVyKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHByb2R1Y3RSZXN1bWVUaW1lcik7DQogICAgICAgICAgICAgICAgICAgIHByb2R1Y3RSZXN1bWVUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KHN0YXJ0UHJvZHVjdEF1dG8sIHJlc3VtZURlbGF5KTsNCiAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdFJhaWxJc1Zpc2libGUgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGlmICghZXhwbG9yZVNlY3Rpb24pIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gZXhwbG9yZVNlY3Rpb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZWN0LmJvdHRvbSA+IDgwICYmIHJlY3QudG9wIDwgd2luZG93LmlubmVySGVpZ2h0IC0gODA7DQogICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IGtlZXBQcm9kdWN0QXV0b0FsaXZlID0gKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBpZiAoIXNsaWRlclZpZXdwb3J0IHx8ICFwcm9kdWN0TG9vcFdpZHRoIHx8IGRvY3VtZW50LmhpZGRlbiB8fCBEYXRlLm5vdygpIDwgcHJvZHVjdEhvbGRVbnRpbCkgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2R1Y3RSYWlsSXNWaXNpYmxlKCkpIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgc3RhcnRQcm9kdWN0QXV0bygpOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50TGVmdCA9IHNsaWRlclZpZXdwb3J0LnNjcm9sbExlZnQ7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7DQogICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhjdXJyZW50TGVmdCAtIHByb2R1Y3RMYXN0U2VlbkxlZnQpIDwgMSAmJiBub3cgLSBwcm9kdWN0TGFzdFNlZW5BdCA+IDExMDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlclZpZXdwb3J0LnNjcm9sbExlZnQgKz0gTWF0aC5tYXgoMTgsIHNsaWRlclZpZXdwb3J0LmNsaWVudFdpZHRoICogMC4wMzUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplUHJvZHVjdExvb3AoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RMYXN0U2VlbkF0ID0gbm93Ow0KICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdExhc3RTZWVuTGVmdCA9IHNsaWRlclZpZXdwb3J0LnNjcm9sbExlZnQ7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGN1cnJlbnRMZWZ0IC0gcHJvZHVjdExhc3RTZWVuTGVmdCkgPj0gMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdExhc3RTZWVuQXQgPSBub3c7DQogICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0TGFzdFNlZW5MZWZ0ID0gY3VycmVudExlZnQ7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgbGV0IGV4cGxvcmVQaW5UcmlnZ2VyID0gbnVsbDsNCiAgICAgICAgICAgICAgICBsZXQgZXhwbG9yZVR3ZWVuID0gbnVsbDsNCiAgICAgICAgICAgICAgICBjb25zdCBzZXR1cEV4cGxvcmVNb3Rpb24gPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGlmIChleHBsb3JlUGluVHJpZ2dlcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgZXhwbG9yZVBpblRyaWdnZXIua2lsbCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZXhwbG9yZVBpblRyaWdnZXIgPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmIChleHBsb3JlVHdlZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxvcmVUd2Vlbi5raWxsKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBleHBsb3JlVHdlZW4gPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGdzYXAuc2V0KHNsaWRlckNvbnRhaW5lciwgeyBjbGVhclByb3BzOiAneCx0cmFuc2Zvcm0nIH0pOw0KICAgICAgICAgICAgICAgICAgICBpZiAoZXhwbG9yZVNlY3Rpb24pIGV4cGxvcmVTZWN0aW9uLmRhdGFzZXQuc2Nyb2xsQ29tcGxldGUgPSAndHJ1ZSc7DQogICAgICAgICAgICAgICAgICAgIHN5bmNTY3JvbGxTdGF0ZSgpOw0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgc2V0dXBFeHBsb3JlTW90aW9uKCk7DQogICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHNldHVwRXhwbG9yZU1vdGlvbik7DQogICAgICAgICAgICAgICAgYnVpbGRQcm9kdWN0TG9vcCgpOw0KICAgICAgICAgICAgICAgIG1lYXN1cmVQcm9kdWN0TG9vcCgpOw0KICAgICAgICAgICAgICAgIHN0YXJ0UHJvZHVjdEF1dG8oKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cuc2V0SW50ZXJ2YWwoa2VlcFByb2R1Y3RBdXRvQWxpdmUsIDkwMCk7DQogICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VzaG93Jywga2VlcFByb2R1Y3RBdXRvQWxpdmUpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBrZWVwUHJvZHVjdEF1dG9BbGl2ZSk7DQogICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCBrZWVwUHJvZHVjdEF1dG9BbGl2ZSk7DQogICAgICAgICAgICAgICAgc2xpZGVyVmlld3BvcnQ\/LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG5vcm1hbGl6ZVByb2R1Y3RMb29wLCB7IHBhc3NpdmU6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgc2xpZGVyVmlld3BvcnQ\/LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKCkgPT4gcGF1c2VQcm9kdWN0QXV0bygxMjAwKSwgeyBwYXNzaXZlOiB0cnVlIH0pOw0KICAgICAgICAgICAgICAgIHNsaWRlclZpZXdwb3J0Py5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVByb2R1Y3RMb29wKCk7DQogICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0UmVzdW1lVGltZXIpIHdpbmRvdy5jbGVhclRpbWVvdXQocHJvZHVjdFJlc3VtZVRpbWVyKTsNCiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdFJlc3VtZVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoc3RhcnRQcm9kdWN0QXV0bywgMjYwKTsNCiAgICAgICAgICAgICAgICB9LCB7IHBhc3NpdmU6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgc2xpZGVyVmlld3BvcnQ\/LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0UmVzdW1lVGltZXIpIHdpbmRvdy5jbGVhclRpbWVvdXQocHJvZHVjdFJlc3VtZVRpbWVyKTsNCiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdFJlc3VtZVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoc3RhcnRQcm9kdWN0QXV0bywgMjYwKTsNCiAgICAgICAgICAgICAgICB9LCB7IHBhc3NpdmU6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgc2xpZGVyVmlld3BvcnQ\/LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAoKSA9PiBwYXVzZVByb2R1Y3RBdXRvKDEyMDApLCB7IHBhc3NpdmU6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgc2xpZGVyVmlld3BvcnQ\/LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChub3JtYWxpemVQcm9kdWN0TG9vcCwgMTIwKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y3RSZXN1bWVUaW1lcikgd2luZG93LmNsZWFyVGltZW91dChwcm9kdWN0UmVzdW1lVGltZXIpOw0KICAgICAgICAgICAgICAgICAgICBwcm9kdWN0UmVzdW1lVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dChzdGFydFByb2R1Y3RBdXRvLCAyNjApOw0KICAgICAgICAgICAgICAgIH0sIHsgcGFzc2l2ZTogdHJ1ZSB9KTsNCiAgICAgICAgICAgICAgICBzbGlkZXJWaWV3cG9ydD8uYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBub3JtYWxpemVQcm9kdWN0TG9vcCwgeyBwYXNzaXZlOiB0cnVlIH0pOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIG1lYXN1cmVQcm9kdWN0TG9vcCgpOw0KICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVQcm9kdWN0TG9vcCgpOw0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgaWYgKHNsaWRlclByZXYgJiYgc2xpZGVyTmV4dCkgew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRDYXJkV2lkdGggPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkID0gc2xpZGVyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5zbGlkZS1jYXJkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ2FwID0gd2luZG93LmlubmVyV2lkdGggPiA3NjggPyA0MCA6IDI0OyANCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXJkID8gY2FyZC5vZmZzZXRXaWR0aCArIGdhcCA6IDQwMDsNCiAgICAgICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxQaW5uZWRTbGlkZXIgPSAoZGlzdGFuY2UpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlUHJvZHVjdEF1dG8oMTIwMCk7DQogICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXJDb250YWluZXIucGFyZW50RWxlbWVudD8uc2Nyb2xsQnkoeyBsZWZ0OiBkaXN0YW5jZSwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQobm9ybWFsaXplUHJvZHVjdExvb3AsIDUyMCk7DQogICAgICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICAgICAgc2xpZGVyUHJldi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFBpbm5lZFNsaWRlcigtZ2V0Q2FyZFdpZHRoKCkpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHNsaWRlck5leHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxQaW5uZWRTbGlkZXIoZ2V0Q2FyZFdpZHRoKCkpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBzbGlkZXJDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLnNsaWRlLWNhcmQnKS5mb3JFYWNoKChjYXJkKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGNhcmQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2xpbmsnKTsNCiAgICAgICAgICAgICAgICAgICAgY2FyZC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgY2FyZC5kYXRhc2V0LnByb2R1Y3RDbG9uZSA\/ICctMScgOiAnMCcpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIHNsaWRlckNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5zbGlkZS1jYXJkJyk7DQogICAgICAgICAgICAgICAgICAgIGlmICghY2FyZCkgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmNob3IgPSBldmVudC50YXJnZXQuY2xvc2VzdCgnYScpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yKSByZXR1cm47DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYC9pbmRleC5waHAvd2F0Y2gtZGV0YWlsLXpkMDA3Lz9tb2RlbD0ke2VuY29kZVVSSUNvbXBvbmVudChjYXJkLmRhdGFzZXQubW9kZWwgfHwgJ3pkMDA3Jyl9YDsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBzbGlkZXJDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5zbGlkZS1jYXJkJyk7DQogICAgICAgICAgICAgICAgICAgIGlmICghY2FyZCB8fCAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmIGV2ZW50LmtleSAhPT0gJyAnKSkgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGAvaW5kZXgucGhwL3dhdGNoLWRldGFpbC16ZDAwNy8\/bW9kZWw9JHtlbmNvZGVVUklDb21wb25lbnQoY2FyZC5kYXRhc2V0Lm1vZGVsIHx8ICd6ZDAwNycpfWA7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHU0FQIGluaXRpYWxpemF0aW9uIGZhaWxlZDsgYW5pbWF0aW9ucyBkaXNhYmxlZCwgaTE4biBzdGlsbCBhdmFpbGFibGUuJywgZXJyb3IpOw0KICAgICAgICAgICAgICAgIGluaXROb0FuaW1hdGlvbkZhbGxiYWNrKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignR1NBUCBvciBTY3JvbGxUcmlnZ2VyIG5vdCBsb2FkZWQ7IGFuaW1hdGlvbnMgZGlzYWJsZWQsIGkxOG4gc3RpbGwgYXZhaWxhYmxlLicpOw0KICAgICAgICAgICAgICAgIGluaXROb0FuaW1hdGlvbkZhbGxiYWNrKCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgLy8gNS4g6L276YePIDNEIOiFleihqOWxleekuue7hOS7tuWPiuaVsOaNruiBlOWKqA0KICAgICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBjb25zdCB3YXRjaFN0YWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dhdGNoLTNkLXN0YWdlJyk7DQogICAgICAgICAgICBjb25zdCB3YXRjaENhcmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2F0Y2gtM2QtY2FyZCcpOw0KICAgICAgICAgICAgY29uc3Qgc2hvd2Nhc2VXYXRjaEltZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaG93Y2FzZS13YXRjaC1pbWcnKTsNCiAgICAgICAgICAgIGNvbnN0IHNob3djYXNlVmlzdWFsTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hvd2Nhc2VfdmlzdWFsX2xhYmVsJyk7DQogICAgICAgICAgICBjb25zdCBtYXRlcmlhbENoaXBzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1hdGVyaWFsLWNoaXAnKTsNCiAgICAgICAgICAgIGxldCBjdXJyZW50U2hvd2Nhc2VJbmRleCA9IDA7DQoNCiAgICAgICAgICAgIGlmICh3YXRjaFN0YWdlICYmIHdhdGNoQ2FyZCkgew0KICAgICAgICAgICAgICAgIHdhdGNoU3RhZ2UuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgKGV2ZW50KSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB3YXRjaFN0YWdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCB4ID0gKGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQpIC8gcmVjdC53aWR0aCAtIDAuNTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9IChldmVudC5jbGllbnRZIC0gcmVjdC50b3ApIC8gcmVjdC5oZWlnaHQgLSAwLjU7DQogICAgICAgICAgICAgICAgICAgIHdhdGNoQ2FyZC5zdHlsZS50cmFuc2Zvcm0gPSBgcm90YXRlWSgke3ggKiAyNn1kZWcpIHJvdGF0ZVgoJHsteSAqIDIyfWRlZykgdHJhbnNsYXRlWigxOHB4KWA7DQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICB3YXRjaFN0YWdlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIHdhdGNoQ2FyZC5zdHlsZS50cmFuc2Zvcm0gPSAncm90YXRlWSgwZGVnKSByb3RhdGVYKDBkZWcpIHRyYW5zbGF0ZVooMHB4KSc7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIDNEIOaooeWdl+aWh+acrOWIh+aNouWHveaVsA0KICAgICAgICAgICAgY29uc3QgdXBkYXRlU2hvd2Nhc2VVSSA9IChpbmRleCwgaW1tZWRpYXRlID0gZmFsc2UpID0+IHsNCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGkxOG4gPT09ICd1bmRlZmluZWQnKSByZXR1cm47DQogICAgICAgICAgICAgICAgY29uc3QgdCA9IGkxOG5bZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmxhbmcgPT09ICd6aC1DTicgPyAnY24nIDogJ2VuJ10gfHwgaTE4blsnZW4nXTsNCiAgICAgICAgICAgICAgICBjdXJyZW50U2hvd2Nhc2VJbmRleCA9IGluZGV4Ow0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGNvbnN0IGVscyA9IFsnc2hvd2Nhc2VfdGl0bGUnLCAnc2hvd2Nhc2VfZGVzYycsICdzaG93Y2FzZV92MScsICdzaG93Y2FzZV92MicsICdzaG93Y2FzZV92MycsICdzaG93Y2FzZV9zMScsICdzaG93Y2FzZV9zMicsICdzaG93Y2FzZV9zMycsICdzaG93Y2FzZV9ob3QxJywgJ3Nob3djYXNlX2hvdDInXS5tYXAoaWQgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKTsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IHdyaXRlVGV4dCA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgaWYoZWxzWzBdICYmIHQuc2hvd2Nhc2VfdGl0bGVzKSBlbHNbMF0uaW5uZXJIVE1MID0gdC5zaG93Y2FzZV90aXRsZXNbaW5kZXhdOw0KICAgICAgICAgICAgICAgICAgICBpZihlbHNbMV0gJiYgdC5zaG93Y2FzZV9kZXNjcykgZWxzWzFdLmlubmVySFRNTCA9IHQuc2hvd2Nhc2VfZGVzY3NbaW5kZXhdOw0KICAgICAgICAgICAgICAgICAgICBpZihlbHNbMl0gJiYgdC5zaG93Y2FzZV92YWxzKSBlbHNbMl0uaW5uZXJIVE1MID0gdC5zaG93Y2FzZV92YWxzW2luZGV4XVswXTsNCiAgICAgICAgICAgICAgICAgICAgaWYoZWxzWzNdICYmIHQuc2hvd2Nhc2VfdmFscykgZWxzWzNdLmlubmVySFRNTCA9IHQuc2hvd2Nhc2VfdmFsc1tpbmRleF1bMV07DQogICAgICAgICAgICAgICAgICAgIGlmKGVsc1s0XSAmJiB0LnNob3djYXNlX3ZhbHMpIGVsc1s0XS5pbm5lckhUTUwgPSB0LnNob3djYXNlX3ZhbHNbaW5kZXhdWzJdOw0KICAgICAgICAgICAgICAgICAgICBpZihlbHNbNV0gJiYgdC5zaG93Y2FzZV9zcGVjcykgZWxzWzVdLmlubmVySFRNTCA9IHQuc2hvd2Nhc2Vfc3BlY3NbaW5kZXhdWzBdOw0KICAgICAgICAgICAgICAgICAgICBpZihlbHNbNl0gJiYgdC5zaG93Y2FzZV9zcGVjcykgZWxzWzZdLmlubmVySFRNTCA9IHQuc2hvd2Nhc2Vfc3BlY3NbaW5kZXhdWzFdOw0KICAgICAgICAgICAgICAgICAgICBpZihlbHNbN10gJiYgdC5zaG93Y2FzZV9zcGVjcykgZWxzWzddLmlubmVySFRNTCA9IHQuc2hvd2Nhc2Vfc3BlY3NbaW5kZXhdWzJdOw0KICAgICAgICAgICAgICAgICAgICBpZihlbHNbOF0gJiYgdC5zaG93Y2FzZV9ob3RzKSBlbHNbOF0uaW5uZXJIVE1MID0gdC5zaG93Y2FzZV9ob3RzW2luZGV4XVswXTsNCiAgICAgICAgICAgICAgICAgICAgaWYoZWxzWzldICYmIHQuc2hvd2Nhc2VfaG90cykgZWxzWzldLmlubmVySFRNTCA9IHQuc2hvd2Nhc2VfaG90c1tpbmRleF1bMV07DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBlbHMuZm9yRWFjaChlbCA9PiB7IGlmKGVsKSBlbC5zdHlsZS5vcGFjaXR5ID0gJzEnOyB9KTsNCiAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgaWYgKGltbWVkaWF0ZSkgew0KICAgICAgICAgICAgICAgICAgICB3cml0ZVRleHQoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGVscy5mb3JFYWNoKGVsID0+IHsgaWYoZWwpIGVsLnN0eWxlLm9wYWNpdHkgPSAnMCc7IH0pOw0KICAgICAgICAgICAgICAgIHNldFRpbWVvdXQod3JpdGVUZXh0LCAzMDApOw0KICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgaWYgKG1hdGVyaWFsQ2hpcHMubGVuZ3RoICYmIHNob3djYXNlV2F0Y2hJbWcgJiYgd2F0Y2hDYXJkKSB7DQogICAgICAgICAgICAgICAgY29uc3Qgc2hvd2Nhc2VWaXN1YWxzID0gew0KICAgICAgICAgICAgICAgICAgICBtZW5zOiB7DQogICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogJ2h0dHBzOi8vemRveGlnLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi96ZG94aWctemQwMDctYmx1ZS13aGl0ZS04OGE1NDM3YjA1OWIuanBnJywNCiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAiTUVOJ1MgRElTUExBWSBXQVRDSCIsDQogICAgICAgICAgICAgICAgICAgICAgICBhbHQ6ICJaRE9YSUcgbWVuJ3MgY2hyb25vZ3JhcGggZGlzcGxheSINCiAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgbWVjaGFuaWNhbDogew0KICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2U6ICdodHRwczovL3pkb3hpZy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDYvemRveGlnLXpkMDA4LWJsYWNrLW1lY2hhbmljYWwtd2hpdGUtZTJiNGE5ZTY1ZjcxLmpwZycsDQogICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ01FQ0hBTklDQUwgTU9WRU1FTlQgVklFVycsDQogICAgICAgICAgICAgICAgICAgICAgICBhbHQ6ICdaRE9YSUcgYmxhY2sgbWVjaGFuaWNhbCBtb3ZlbWVudCBkaXNwbGF5Jw0KICAgICAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICAgICBsYWRpZXM6IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiAnaHR0cHM6Ly96ZG94aWcuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA2L3pkb3hpZy1sYWRpZXMtYmx1ZS13aGl0ZS00NTg3MTQ3OWEyZTkucG5nJywNCiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnU1RPTkUtU0VUIFNRVUFSRSBXQVRDSCcsDQogICAgICAgICAgICAgICAgICAgICAgICBhbHQ6ICdaRE9YSUcgbGFkaWVzIHN0b25lLXNldCBzcXVhcmUgd2F0Y2ggZGlzcGxheScNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgY29uc3QgaW5kZXhNYXAgPSB7ICdtZW5zJzogMCwgJ21lY2hhbmljYWwnOiAxLCAnbGFkaWVzJzogMiB9Ow0KICAgICAgICAgICAgICAgIGNvbnN0IHNob3djYXNlVGhlbWVzID0gWydtZW5zJywgJ21lY2hhbmljYWwnLCAnbGFkaWVzJ107DQogICAgICAgICAgICAgICAgY29uc3Qgc2lnbmF0dXJlU2NlbmVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc2lnbmF0dXJlLXNjZW5lXScpOw0KICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZUNvdW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtc2lnbmF0dXJlLWNvdW50XScpOw0KICAgICAgICAgICAgICAgIGxldCBhY3RpdmVTaG93Y2FzZVRoZW1lID0gJyc7DQoNCiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmF0ZVNob3djYXNlVGhlbWUgPSAodGhlbWUsIG9wdGlvbnMgPSB7fSkgPT4gew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBzYWZlVGhlbWUgPSBzaG93Y2FzZVZpc3VhbHNbdGhlbWVdID8gdGhlbWUgOiAnbWVucyc7DQogICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVTaG93Y2FzZVRoZW1lID09PSBzYWZlVGhlbWUgJiYgIW9wdGlvbnMuZm9yY2UpIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgYWN0aXZlU2hvd2Nhc2VUaGVtZSA9IHNhZmVUaGVtZTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlzdWFsID0gc2hvd2Nhc2VWaXN1YWxzW3NhZmVUaGVtZV0gfHwgc2hvd2Nhc2VWaXN1YWxzLm1lbnM7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaW5kZXhNYXBbc2FmZVRoZW1lXSB8fCAwOw0KDQogICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsQ2hpcHMuZm9yRWFjaChpdGVtID0+IGl0ZW0uY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJywgaXRlbS5kYXRhc2V0LnRoZW1lID09PSBzYWZlVGhlbWUpKTsNCiAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlU2NlbmVzLmZvckVhY2goKHNjZW5lKSA9PiBzY2VuZS5jbGFzc0xpc3QudG9nZ2xlKCdpcy1hY3RpdmUnLCBzY2VuZS5kYXRhc2V0LnNpZ25hdHVyZVNjZW5lID09PSBzYWZlVGhlbWUpKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZUNvdW50KSBzaWduYXR1cmVDb3VudC50ZXh0Q29udGVudCA9IGAke1N0cmluZyhpbmRleCArIDEpLnBhZFN0YXJ0KDIsICcwJyl9IC8gMDNgOw0KICAgICAgICAgICAgICAgICAgICB3YXRjaENhcmQuZGF0YXNldC50aGVtZSA9IHNhZmVUaGVtZTsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5pbnN0YW50KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBzaG93Y2FzZVdhdGNoSW1nLnNyYyA9IHZpc3VhbC5pbWFnZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3djYXNlV2F0Y2hJbWcuYWx0ID0gdmlzdWFsLmFsdDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG93Y2FzZVZpc3VhbExhYmVsKSBzaG93Y2FzZVZpc3VhbExhYmVsLnRleHRDb250ZW50ID0gdmlzdWFsLmxhYmVsOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2hvd2Nhc2VXYXRjaEltZy5zdHlsZS5vcGFjaXR5ID0gJzEnOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2hvd2Nhc2VXYXRjaEltZy5zdHlsZS50cmFuc2Zvcm0gPSAnc2NhbGUoMSkgdHJhbnNsYXRlWSgwKSc7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBzaG93Y2FzZVdhdGNoSW1nLnN0eWxlLm9wYWNpdHkgPSAnMCc7DQogICAgICAgICAgICAgICAgICAgICAgICBzaG93Y2FzZVdhdGNoSW1nLnN0eWxlLnRyYW5zZm9ybSA9ICdzY2FsZSguOTYpIHRyYW5zbGF0ZVkoMTBweCknOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd2Nhc2VXYXRjaEltZy5zcmMgPSB2aXN1YWwuaW1hZ2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd2Nhc2VXYXRjaEltZy5hbHQgPSB2aXN1YWwuYWx0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG93Y2FzZVZpc3VhbExhYmVsKSBzaG93Y2FzZVZpc3VhbExhYmVsLnRleHRDb250ZW50ID0gdmlzdWFsLmxhYmVsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3djYXNlV2F0Y2hJbWcuc3R5bGUub3BhY2l0eSA9ICcxJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Y2FzZVdhdGNoSW1nLnN0eWxlLnRyYW5zZm9ybSA9ICdzY2FsZSgxKSB0cmFuc2xhdGVZKDApJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDE4MCk7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICB1cGRhdGVTaG93Y2FzZVVJKGluZGV4LCBvcHRpb25zLmluc3RhbnQgfHwgb3B0aW9ucy5zY3JvbGxEcml2ZW4pOw0KICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICBtYXRlcmlhbENoaXBzLmZvckVhY2goY2hpcCA9PiB7DQogICAgICAgICAgICAgICAgICAgIGNoaXAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZVNob3djYXNlVGhlbWUoY2hpcC5kYXRhc2V0LnRoZW1lIHx8ICdtZW5zJyk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgYWN0aXZhdGVTaG93Y2FzZVRoZW1lKCdtZW5zJywgeyBpbnN0YW50OiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IGFsbG93UGlubmVkU2hvd2Nhc2UgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICBpZiAoYWxsb3dQaW5uZWRTaG93Y2FzZSkgew0KICAgICAgICAgICAgICAgICAgICBTY3JvbGxUcmlnZ2VyLmNyZWF0ZSh7DQogICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyOiAnI3Nob3djYXNlLTNkJywNCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiAndG9wIHRvcCcsDQogICAgICAgICAgICAgICAgICAgICAgICBlbmQ6ICgpID0+IGArPSR7d2luZG93LmlubmVySGVpZ2h0ICogMi42NX1gLA0KICAgICAgICAgICAgICAgICAgICAgICAgcGluOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAgICAgc2NydWI6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICAgICBhbnRpY2lwYXRlUGluOiAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZU9uUmVmcmVzaDogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIG9uVXBkYXRlOiAoc2VsZikgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgc2VsZi5wcm9ncmVzcykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2lnbmF0dXJlLXByb2dyZXNzJywgcHJvZ3Jlc3MudG9GaXhlZCg0KSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zaWduYXR1cmUtc2NlbmUtcHJvZ3Jlc3MnLCBwcm9ncmVzcy50b0ZpeGVkKDQpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnNldFByb3BlcnR5KCctLWdsb2JhbC1saWdodC1wcm9ncmVzcycsIE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHByb2dyZXNzICogMC44MikpLnRvRml4ZWQoNCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnc2NlbmUtcHJvZHVjdC10cmFuc2l0aW9uJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NlbmVJbmRleCA9IE1hdGgubWluKHNob3djYXNlVGhlbWVzLmxlbmd0aCAtIDEsIE1hdGguZmxvb3IocHJvZ3Jlc3MgKiBzaG93Y2FzZVRoZW1lcy5sZW5ndGgpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZVNob3djYXNlVGhlbWUoc2hvd2Nhc2VUaGVtZXNbc2NlbmVJbmRleF0sIHsgaW5zdGFudDogcHJvZ3Jlc3MgPCAwLjAzLCBzY3JvbGxEcml2ZW46IHRydWUgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICAgICAgICAgb25MZWF2ZTogKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2lnbmF0dXJlLXByb2dyZXNzJywgJzEnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnNldFByb3BlcnR5KCctLXNpZ25hdHVyZS1zY2VuZS1wcm9ncmVzcycsICcxJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1nbG9iYWwtbGlnaHQtcHJvZ3Jlc3MnLCAnMC44MicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnc2NlbmUtcHJvZHVjdC10cmFuc2l0aW9uJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICAgICAgICAgb25MZWF2ZUJhY2s6ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnNldFByb3BlcnR5KCctLXNpZ25hdHVyZS1wcm9ncmVzcycsICcwJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zaWduYXR1cmUtc2NlbmUtcHJvZ3Jlc3MnLCAnMCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoJy0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzJywgJzAnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3NjZW5lLXByb2R1Y3QtdHJhbnNpdGlvbicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlU2hvd2Nhc2VUaGVtZSgnbWVucycsIHsgaW5zdGFudDogdHJ1ZSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zaWduYXR1cmUtcHJvZ3Jlc3MnLCAnMCcpOw0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnNldFByb3BlcnR5KCctLXNpZ25hdHVyZS1zY2VuZS1wcm9ncmVzcycsICcwJyk7DQogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoJy0tZ2xvYmFsLWxpZ2h0LXByb2dyZXNzJywgJzAnKTsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdzY2VuZS1wcm9kdWN0LXRyYW5zaXRpb24nKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgLy8gNi4g6aqM6K+B5Lit5b+D6YC76L6RIChUaGUgVmF1bHQpDQogICAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGNvbnN0IHZlcmlmeUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2ZXJpZnlfYnRuJyk7DQogICAgICAgICAgICBjb25zdCBzbklucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NuX2lucHV0Jyk7DQogICAgICAgICAgICBjb25zdCByZXNDYXJkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdF9jYXJkJyk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGNvbnN0IHJlc1N0YXR1c1RleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzX3N0YXR1c190ZXh0Jyk7DQogICAgICAgICAgICBjb25zdCByZXNNb2RlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNfbW9kZWwnKTsNCiAgICAgICAgICAgIGNvbnN0IHJlc01vdmVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc19tb3ZlbWVudCcpOw0KICAgICAgICAgICAgY29uc3QgcmVzU2VyaWFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc19zZXJpYWwnKTsNCiAgICAgICAgICAgIGNvbnN0IHJlc0dlbmRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNfZ2VuZGVyJyk7DQogICAgICAgICAgICBjb25zdCByZXNEaWFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc19kaWFsJyk7DQogICAgICAgICAgICBjb25zdCByZXNDYXNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc19jYXNlJyk7DQogICAgICAgICAgICBjb25zdCByZXNCbGVzc2luZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNfYmxlc3NpbmcnKTsNCiAgICAgICAgICAgIGNvbnN0IHJlc1JlY29yZExhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc19yZWNvcmRfbGFiZWwnKTsNCiAgICAgICAgICAgIGNvbnN0IHJlc01vZGVsTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzX21vZGVsX2xhYmVsJyk7DQogICAgICAgICAgICBjb25zdCByZXNDYWxpYnJlTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzX2NhbGlicmVfbGFiZWwnKTsNCiAgICAgICAgICAgIGNvbnN0IHJlc1NlcmlhbExhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc19zZXJpYWxfbGFiZWwnKTsNCiAgICAgICAgICAgIGNvbnN0IHJlc0dlbmRlckxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc19nZW5kZXJfbGFiZWwnKTsNCiAgICAgICAgICAgIGNvbnN0IHJlc0RpYWxMYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNfZGlhbF9sYWJlbCcpOw0KICAgICAgICAgICAgY29uc3QgcmVzQ2FzZUxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc19jYXNlX2xhYmVsJyk7DQogICAgICAgICAgICBjb25zdCByZXNJY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc19pY29uJyk7DQogICAgICAgICAgICBjb25zdCByZXNHbG93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdF9nbG93Jyk7DQoNCiAgICAgICAgICAgIGxldCBjdXJyZW50TGFuZyA9ICdjbic7DQogICAgICAgICAgICBsZXQgbGFzdFZlcmlmeVN0YXRlID0gbnVsbDsNCiAgICAgICAgICAgIGxldCBjdXJyZW50VmVyaWZ5UmVjb3JkID0gbnVsbDsNCiAgICAgICAgICAgIGxldCBpc1ZlcmlmeWluZyA9IGZhbHNlOw0KDQogICAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIC8vIDcuIOmmluWxj+WbvueJh+i9ruaSremAu+i+kQ0KICAgICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBsZXQgY3VycmVudEhlcm9TbGlkZSA9IDA7DQogICAgICAgICAgICBsZXQgaGVyb0Nhcm91c2VsVGltZXIgPSBudWxsOw0KDQogICAgICAgICAgICBjb25zdCBhcHBseUhlcm9TbGlkZSA9IChpbmRleCwgaW5zdGFudCA9IGZhbHNlKSA9PiB7DQogICAgICAgICAgICAgICAgY29uc3QgdCA9IGkxOG5bY3VycmVudExhbmddOw0KICAgICAgICAgICAgICAgIGNvbnN0IHNsaWRlcyA9IHQuaGVyb19zbGlkZXMgfHwgW107DQogICAgICAgICAgICAgICAgaWYgKCFzbGlkZXMubGVuZ3RoKSByZXR1cm47DQoNCiAgICAgICAgICAgICAgICBjdXJyZW50SGVyb1NsaWRlID0gKGluZGV4ICsgc2xpZGVzLmxlbmd0aCkgJSBzbGlkZXMubGVuZ3RoOw0KICAgICAgICAgICAgICAgIGNvbnN0IHNsaWRlID0gc2xpZGVzW2N1cnJlbnRIZXJvU2xpZGVdOw0KDQogICAgICAgICAgICAgICAgY29uc3QgaG9tZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdob21lJyk7DQogICAgICAgICAgICAgICAgY29uc3QgaGVyb1N1YiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZXJvX3N1YicpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGhlcm9UaXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZXJvX3RpdGxlJyk7DQogICAgICAgICAgICAgICAgY29uc3QgaGVyb0Rlc2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVyb19kZXNjJyk7DQogICAgICAgICAgICAgICAgY29uc3QgaGVyb0ltZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZXJvLWltZycpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGhlcm9WaWRlbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZXJvLXZpZGVvJyk7DQogICAgICAgICAgICAgICAgY29uc3QgaGVyb01ldGFSb3cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGVyby1tZXRhLXJvdycpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGhlcm9TdGF0c1JvdyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5oZXJvLXN0YXRzLXJvdycpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGhlcm9EZXRhaWxMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlcm8tZGV0YWlsLWxpbmsnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBoZXJvVHJ1c3RCYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGVyby10cnVzdC1iYXInKTsNCiAgICAgICAgICAgICAgICBjb25zdCBtb3JwaFRhcmdldHMgPSBbaGVyb1N1YiwgaGVyb1RpdGxlLCBoZXJvRGVzYywgaGVyb01ldGFSb3csIGhlcm9TdGF0c1JvdywgaGVyb0RldGFpbExpbmssIGhlcm9UcnVzdEJhcl0uZmlsdGVyKEJvb2xlYW4pOw0KICAgICAgICAgICAgICAgIGNvbnN0IHVzZU1vYmlsZUhlcm8gPSB3aW5kb3cubWF0Y2hNZWRpYSgnKG1heC13aWR0aDogNjQwcHgpJykubWF0Y2hlczsNCiAgICAgICAgICAgICAgICBjb25zdCBuZXh0SGVyb0ltYWdlID0gdXNlTW9iaWxlSGVybyAmJiBzbGlkZS5tb2JpbGVJbWFnZSA\/IHNsaWRlLm1vYmlsZUltYWdlIDogc2xpZGUuaW1hZ2U7DQogICAgICAgICAgICAgICAgY29uc3QgaWNvbnMgPSBbJ2ZhY3RvcnknLCAnY2lyY2xlLWRvdCcsICdzaGllbGQtY2hlY2snLCAnZ2xvYmUtMiddOw0KDQogICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmhlcm8tb3B0aW9uJykuZm9yRWFjaCgoYnRuLCBidG5JbmRleCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IGJ0bkluZGV4ID09PSBjdXJyZW50SGVyb1NsaWRlOw0KICAgICAgICAgICAgICAgICAgICBidG4uY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJywgaXNBY3RpdmUpOw0KICAgICAgICAgICAgICAgICAgICBpZiAodC5oZXJvX3RhYnMgJiYgdC5oZXJvX3RhYnNbYnRuSW5kZXhdKSBidG4uaW5uZXJIVE1MID0gdC5oZXJvX3RhYnNbYnRuSW5kZXhdOw0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmhlcm8tbW9iaWxlLWRvdCcpLmZvckVhY2goKGRvdCwgZG90SW5kZXgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBkb3RJbmRleCA9PT0gY3VycmVudEhlcm9TbGlkZTsNCiAgICAgICAgICAgICAgICAgICAgZG90LmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScsIGlzQWN0aXZlKTsNCiAgICAgICAgICAgICAgICAgICAgZG90LnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgaXNBY3RpdmUgPyAndHJ1ZScgOiAnZmFsc2UnKTsNCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZU1lZGlhID0gKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBbaGVyb0ltZywgaGVyb1ZpZGVvXS5mb3JFYWNoKChtZWRpYUVsKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1lZGlhRWwgfHwgIW5leHRIZXJvSW1hZ2UgfHwgbWVkaWFFbC5nZXRBdHRyaWJ1dGUoJ3NyYycpID09PSBuZXh0SGVyb0ltYWdlKSByZXR1cm47DQogICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUVsLnNyYyA9IG5leHRIZXJvSW1hZ2U7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICBpZiAoaGVyb0ltZykgaGVyb0ltZy5kYXRhc2V0LnNsaWRlID0gU3RyaW5nKGN1cnJlbnRIZXJvU2xpZGUpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoaGVyb1ZpZGVvKSBoZXJvVmlkZW8uZGF0YXNldC5zbGlkZSA9IFN0cmluZyhjdXJyZW50SGVyb1NsaWRlKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGhvbWUgJiYgc2xpZGUuaW1hZ2UpIGhvbWUuZGF0YXNldC5zY2VuZUltYWdlID0gc2xpZGUuaW1hZ2U7DQogICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZUNvbnRlbnQgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGlmIChoZXJvU3ViKSBoZXJvU3ViLmlubmVySFRNTCA9IHNsaWRlLnN1YjsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGhlcm9UaXRsZSkgaGVyb1RpdGxlLmlubmVySFRNTCA9IHNsaWRlLnRpdGxlOw0KICAgICAgICAgICAgICAgICAgICBpZiAoaGVyb0Rlc2MpIGhlcm9EZXNjLmlubmVySFRNTCA9IHNsaWRlLmRlc2M7DQogICAgICAgICAgICAgICAgICAgIGlmIChoZXJvTWV0YVJvdyAmJiBBcnJheS5pc0FycmF5KHNsaWRlLm1ldGEpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBoZXJvTWV0YVJvdy5pbm5lckhUTUwgPSBzbGlkZS5tZXRhLm1hcCgoaXRlbSwgaXRlbUluZGV4KSA9PiBgPHNwYW4+PGkgZGF0YS1sdWNpZGU9IiR7aWNvbnNbaXRlbUluZGV4XSB8fCAnc3BhcmtsZXMnfSI+PC9pPiR7aXRlbX08L3NwYW4+YCkuam9pbignJyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKGhlcm9TdGF0c1JvdyAmJiBBcnJheS5pc0FycmF5KHNsaWRlLnN0YXRzKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaGVyb1N0YXRzUm93LmlubmVySFRNTCA9IHNsaWRlLnN0YXRzLm1hcCgoc3RhdCkgPT4gYDxkaXYgY2xhc3M9Imhlcm8tc3RhdC1jYXJkIGxpcXVpZC1nbGFzcyI+PHNwYW4+JHtzdGF0Lmljb24gfHwgJy0tJ308L3NwYW4+PHN0cm9uZz4ke3N0YXQudmFsdWV9PC9zdHJvbmc+PGVtPiR7c3RhdC5sYWJlbH08L2VtPjwvZGl2PmApLmpvaW4oJycpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmIChoZXJvRGV0YWlsTGluaykgew0KICAgICAgICAgICAgICAgICAgICAgICAgaGVyb0RldGFpbExpbmsuaHJlZiA9IHNsaWRlLmRldGFpbEhyZWYgfHwgJyNleHBsb3JlJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGhlcm9EZXRhaWxMaW5rLmlubmVySFRNTCA9IGAke3NsaWRlLmRldGFpbExhYmVsIHx8ICdWaWV3IG1vZGVsJ30gPHNwYW4+LT48L3NwYW4+YDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoaGVyb1RydXN0QmFyICYmIHNsaWRlLnRydXN0KSBoZXJvVHJ1c3RCYXIudGV4dENvbnRlbnQgPSBzbGlkZS50cnVzdDsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sdWNpZGUpIHdpbmRvdy5sdWNpZGUuY3JlYXRlSWNvbnMoKTsNCiAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgaWYgKGluc3RhbnQpIHsNCiAgICAgICAgICAgICAgICAgICAgdXBkYXRlTWVkaWEoKTsNCiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ29udGVudCgpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKGhvbWUpIGhvbWUuY2xhc3NMaXN0LmFkZCgnaXMtc3dpdGNoaW5nJyk7DQogICAgICAgICAgICAgICAgbW9ycGhUYXJnZXRzLmZvckVhY2goZWwgPT4gew0KICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gJzAnOw0KICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWSgxMHB4KSBzY2FsZSguOTg1KSc7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgW2hlcm9JbWcsIGhlcm9WaWRlb10uZm9yRWFjaChlbCA9PiB7IGlmIChlbCkgZWwuc3R5bGUub3BhY2l0eSA9ICcwJzsgfSk7DQoNCiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgdXBkYXRlTWVkaWEoKTsNCiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ29udGVudCgpOw0KICAgICAgICAgICAgICAgICAgICBbaGVyb0ltZywgaGVyb1ZpZGVvXS5mb3JFYWNoKGVsID0+IHsgaWYgKGVsKSBlbC5zdHlsZS5vcGFjaXR5ID0gJzEnOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgbW9ycGhUYXJnZXRzLmZvckVhY2goZWwgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICdvcGFjaXR5IC40MnMgZWFzZSwgdHJhbnNmb3JtIC40MnMgY3ViaWMtYmV6aWVyKC4yMiwxLC4zNiwxKSc7DQogICAgICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gJzEnOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVkoMCkgc2NhbGUoMSknOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9LCAxODApOw0KDQogICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGlmIChob21lKSBob21lLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXN3aXRjaGluZycpOw0KICAgICAgICAgICAgICAgIH0sIDYyMCk7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgY29uc3QgaW5pdEhlcm9DYXJvdXNlbCA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmhlcm8tb3B0aW9uJyk7DQogICAgICAgICAgICAgICAgY29uc3QgbW9iaWxlRG90cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5oZXJvLW1vYmlsZS1kb3QnKTsNCiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMubGVuZ3RoKSByZXR1cm47DQoNCiAgICAgICAgICAgICAgICBjb25zdCByZXN0YXJ0VGltZXIgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGlmIChoZXJvQ2Fyb3VzZWxUaW1lcikgY2xlYXJJbnRlcnZhbChoZXJvQ2Fyb3VzZWxUaW1lcik7DQogICAgICAgICAgICAgICAgICAgIGhlcm9DYXJvdXNlbFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4gYXBwbHlIZXJvU2xpZGUoY3VycmVudEhlcm9TbGlkZSArIDEpLCA1MjAwKTsNCiAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgb3B0aW9ucy5mb3JFYWNoKChidG4pID0+IHsNCiAgICAgICAgICAgICAgICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlIZXJvU2xpZGUoTnVtYmVyKGJ0bi5kYXRhc2V0LnNsaWRlIHx8IDApKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RhcnRUaW1lcigpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBtb2JpbGVEb3RzLmZvckVhY2goKGRvdCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBkb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICBhcHBseUhlcm9TbGlkZShOdW1iZXIoZG90LmRhdGFzZXQuc2xpZGUgfHwgMCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzdGFydFRpbWVyKCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIGFwcGx5SGVyb1NsaWRlKDAsIHRydWUpOw0KICAgICAgICAgICAgICAgIHJlc3RhcnRUaW1lcigpOw0KICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgdmFyIGkxOG4gPSB7DQogICAgICAgICAgICAgICAgZW46IHsNCiAgICAgICAgICAgICAgICAgICAgbWVudV9idG46ICJNRU5VIiwNCiAgICAgICAgICAgICAgICAgICAgY2xvc2VfbWVudTogIkNMT1NFIiwNCiAgICAgICAgICAgICAgICAgICAgbWVudV9pdGVtczogWyJIT01FIiwgIkJSQU5EIFNUT1JZIiwgIldBVENIRVMiLCAiQ1JBRlQiLCAiVkVSSUZZIiwgIlNFUlZJQ0UiLCAiQ09OVEFDVCJdLAogICAgICAgICAgICAgICAgICAgIHRvcF9uYXY6IFsiSE9NRSIsICJCUkFORCBTVE9SWSIsICJXQVRDSEVTIiwgIkNSQUZUIiwgIlZFUklGWSIsICJTRVJWSUNFIiwgIkNPTlRBQ1QiXSwKICAgICAgICAgICAgICAgICAgICBuYXZfdmVyaWZ5X2N0YTogIlZFUklGWSBXQVRDSCIsDQogICAgICAgICAgICAgICAgICAgIGhlcm9fYnRuOiAiVkVSSUZZIFlPVVIgV0FUQ0giLA0KICAgICAgICAgICAgICAgICAgICBoZXJvX3RhYnM6IFsiTUVOJ1MiLCAiQkxBQ0sgVElUQU4iLCAiQkxBQ0sgJiBHUkVFTiJdLAogICAgICAgICAgICAgICAgICAgIGhlcm9fc2xpZGVzOiBbDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiAiTUVOJ1MgREFJTFkgV0FUQ0hFUyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICJNRU4nUzxicj5DTEFTU0lDUyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogIkV2ZXJ5ZGF5IHF1YXJ0eiBhbmQgbWVjaGFuaWNhbCB3YXRjaGVzIGZvciBidXNpbmVzcywgY2FzdWFsIGFuZCBzcG9ydCBzdHlsaW5nLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2U6ICJodHRwczovL3pkb3hpZy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDYvemRveGlnLXpkb3hpZy1oZXJvLXBvc3Rlci1pY2UtNjRkMmE0MTI2NmFkLnBuZyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlSW1hZ2U6ICJodHRwczovL3pkb3hpZy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDYvemRveGlnLWhlcm8tbW9iaWxlLW1lbnMtMDA0OGRiNDEyOGEyLndlYnAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IFsiMjAtWUVBUiBNQU5VRkFDVFVSRSIsICJJTVBPUlRFRCBRVUFSVFoiLCAiRkFDVE9SWSBESVJFQ1QiLCAiR0xPQkFMIFdSSVNUUyJdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzOiBbeyBpY29uOiAiMjAiLCB2YWx1ZTogIjIwIFllYXJzIiwgbGFiZWw6ICJGYWN0b3J5IGZvdW5kYXRpb24iIH0sIHsgaWNvbjogIjAxIiwgdmFsdWU6ICJCdXNpbmVzcyIsIGxhYmVsOiAiRGFpbHkgbWVuJ3MgY29sbGVjdGlvbiIgfV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsSHJlZjogIi9pbmRleC5waHAvd2F0Y2gtZGV0YWlsLXpkMDA3Lz9tb2RlbD16ZDAwNyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsTGFiZWw6ICJWaWV3IG1lbidzIG1vZGVsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVzdDogIkZhY3RvcnktZGlyZWN0IG1lbidzIHdhdGNoZXMgZm9yIG1vZGVybiBkYWlseSB3ZWFyIg0KICAgICAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YjogIkJMQUNLIFRJVEFOIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAiQkxBQ0s8YnI+VElUQU4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogIkRhcmsgc3RlZWwgZmluaXNoaW5nLCBsYXllcmVkIGRpYWwgZGVwdGggYW5kIGEgc2hhcnBlciBibGFjayBjYW1wYWlnbiBtb29kIGZvciB0aGUgbWVjaGFuaWNhbCBsaW5lLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogImh0dHBzOi8vemRveGlnLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi96ZG94aWctemRveGlnLWhlcm8tYmxhY2stdGl0YW4tNDI4NTAyMDhmODU4LnBuZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2JpbGVJbWFnZTogImh0dHBzOi8vemRveGlnLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi96ZG94aWctemRveGlnLWhlcm8tYmxhY2stdGl0YW4tNDI4NTAyMDhmODU4LnBuZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBbIkJMQUNLIE1FVEFMIiwgIk1VTFRJLURJQUwgREVUQUlMIiwgIlNURUVMIENBU0UiLCAiUFJFQ0lTSU9OIERBSUxZIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0czogW3sgaWNvbjogIjQ1IiwgdmFsdWU6ICI0NSBNSU4iLCBsYWJlbDogIlJvdGF0aW5nIGJlemVsIHNjYWxlIiB9LCB7IGljb246ICJTUyIsIHZhbHVlOiAiQmxhY2siLCBsYWJlbDogIkRhcmsgc3RlZWwgZmluaXNoIiB9XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbEhyZWY6ICIvaW5kZXgucGhwL3dhdGNoLWRldGFpbC16ZDAwNy8\/bW9kZWw9emQwMDgtYmxhY2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsTGFiZWw6ICJWaWV3IGJsYWNrIG1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydXN0OiAiQmxhY2sgVGl0YW4gY2FtcGFpZ24gaW1hZ2Ugbm93IGxpbmtlZCB0byB0aGUgbWF0Y2hpbmcgcHJvZHVjdCBzdG9yeSIKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiAiQVVUT01BVElDIENPTE9SIFBBSVIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICJCTEFDSyAmPGJyPkdSRUVOIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICJUd28gYXV0b21hdGljIGRpdmUtc3R5bGUgY29sb3J3YXlzIHByZXNlbnRlZCB0b2dldGhlciBmb3IgYSBzdHJvbmdlciBjb2xsZWN0aW9uLWxldmVsIGhlcm8uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiAiaHR0cHM6Ly96ZG94aWcuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA2L3pkb3hpZy16ZG94aWctaGVyby1ibGFjay1ncmVlbi1iMjY0M2VhODMwMGYucG5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vYmlsZUltYWdlOiAiaHR0cHM6Ly96ZG94aWcuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA2L3pkb3hpZy16ZG94aWctaGVyby1ibGFjay1ncmVlbi1iMjY0M2VhODMwMGYucG5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IFsiQkxBQ0sgRElBTCIsICJHUkVFTiBESUFMIiwgIkFVVE9NQVRJQyBTVFlMRSIsICJTVEVFTCBCUkFDRUxFVCJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHM6IFt7IGljb246ICIwMiIsIHZhbHVlOiAiMiBDb2xvcnMiLCBsYWJlbDogIkJsYWNrIGFuZCBncmVlbiBlZGl0aW9ucyIgfSwgeyBpY29uOiAiNDUiLCB2YWx1ZTogIkRpdmVyIiwgbGFiZWw6ICJTcG9ydCBiZXplbCBwcm9maWxlIiB9XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbEhyZWY6ICIvaW5kZXgucGhwL3dhdGNoLWRldGFpbC16ZDAwNy8\/bW9kZWw9emQwMDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsTGFiZWw6ICJWaWV3IGF1dG9tYXRpYyBwYWlyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydXN0OiAiQmxhY2sgYW5kIGdyZWVuIGVkaXRpb25zIG5vdyBjYXJyeSB0aGUgdGhpcmQgaG9tZXBhZ2UgY2Fyb3VzZWwgZnJhbWUiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBdLCAgICAgICAgICAgICAgICAgICAgdmlkMV9zdWI6ICJBRVNUSEVUSUMgUElPTkVFUiIsIHZpZDFfdGl0bGU6ICJWSVNJT05BUlk8YnI+REVTSUdOIiwKICAgICAgICAgICAgICAgICAgICB2aWQxX2Rlc2M6ICJCdWlsZCBmaXJzdC1nbGFuY2UgcmVjb2duaXRpb24gdGhyb3VnaCBmdWxsLXdhdGNoIHByb3BvcnRpb24sIGx1bWUgZGVwdGggYW5kIGRpYWwgYXRtb3NwaGVyZSBiZWZvcmUgdGhlIHNwZWNpZmljYXRpb24gdGFibGUgYXBwZWFycy4iLAogICAgICAgICAgICAgICAgICAgIHZpZDFfY3RhMTogIkVOVEVSIDNEIFNIT1dDQVNFIiwgdmlkMV9jdGEyOiAiVklFVyBDT0xMRUNUSU9OUyIsCiAgICAgICAgICAgICAgICAgICAgdmlkMl9zdWI6ICJNRUNIQU5JQ0FMIEFSVCIsIHZpZDJfdGl0bGU6ICJQUkVDSVNJT048YnI+RU5HSU5FRVJFRCIsCiAgICAgICAgICAgICAgICAgICAgdmlkMl9kZXNjOiAiS2VlcCB0aGUgbW90aW9uIGVmZmVjdHMgaW50YWN0IHdoaWxlIHRoZSBjYWxpYnJlIHJoeXRobSwgY2FzZSBjdXJ2ZSBhbmQga2V5IHByb2R1Y3QgbWVzc2FnZSBzdGF5IGluIGEgcmVhZGFibGUgc2FmZSBhcmVhLiIsCiAgICAgICAgICAgICAgICAgICAgdmlkMl9jdGExOiAiVklFVyBNQU5VRkFDVFVSRSIsIHZpZDJfY3RhMjogIlZFUklGWSBXQVRDSCIsCiAgICAgICAgICAgICAgICAgICAgdmlkM19zdWI6ICJUSU1FTEVTUyBFTEVHQU5DRSIsIHZpZDNfdGl0bGU6ICJFVkVSWURBWTxicj5MVVhVUlkiLAogICAgICAgICAgICAgICAgICAgIHZpZDNfZGVzYzogIkNvbm5lY3QgdGhlIGJyYW5kIGZpbG0sIHByb2R1Y3QgZXhwbG9yYXRpb24gYW5kIHRoZSByZXN0IG9mIHRoZSBvZmZpY2lhbCBzaXRlIHNvIHRoZSBzY3JvbGwgbmF0dXJhbGx5IGNvbnRpbnVlcyBpbnRvIHRoZSBmdWxsIGV4cGVyaWVuY2UuIiwKICAgICAgICAgICAgICAgICAgICB2aWQzX2N0YTE6ICJDT05USU5VRSBUSEVBVFJFIiwgdmlkM19jdGEyOiAiQlJBTkQgU1RPUlkiLAogICAgICAgICAgICAgICAgICAgIGNhbGlicmUxX3N1YjogIk1BVEVSSUFMICYgTU9USU9OIiwgY2FsaWJyZTFfdGl0bGU6ICJMVU1FLCBESUFMPGJyPiYgTU9WRU1FTlQgREVQVEgiLCBjYWxpYnJlMV9kZXNjOiAiRnVsbC1zY3JlZW4gbHVtZSBmb290YWdlLCBtZWNoYW5pY2FsIHN0cnVjdHVyZSBhbmQgbWljcm8gZGV0YWlscyBzaGFwZSB0aGUgbG93ZXIgaG9tZXBhZ2UgbmFycmF0aXZlLCBsZXR0aW5nIGRpYWwgZ2xvdywgY2FzZSBwcm9wb3J0aW9uIGFuZCB3cmlzdCBwcmVzZW5jZSBzcGVhayBiZWZvcmUgc3BlY2lmaWNhdGlvbnMuIiwNCiAgICAgICAgICAgICAgICAgICAgY2FsaWJyZTJfc3ViOiAiQ0FTRSBERVRBSUwiLCBjYWxpYnJlMl90aXRsZTogIk1FQ0hBTklDQUwgVklTSU9OPGJyPkJFWU9ORCBTUEVDSUZJQ0FUSU9OUyIsIGNhbGlicmUyX2Rlc2M6ICJSZXN0cmFpbmVkIGNvcHksIGltYWdlLWxlZCBzdG9yeXRlbGxpbmcuIEZ1bGwtc2NyZWVuIG1lY2hhbmljYWwgc3RydWN0dXJlIGxldHMgdGhlIG1vdmVtZW50IGJlY29tZSB0aGUgbmFycmF0aXZlIGl0c2VsZi4iLA0KICAgICAgICAgICAgICAgICAgICBjYWxpYnJlM19zdWI6ICJTTUFMTCBTRUNPTkRTIiwgY2FsaWJyZTNfdGl0bGU6ICJTTUFMTCBTRUNPTkRTPGJyPkRFVEFJTCBTVFVEWSIsIGNhbGlicmUzX2Rlc2M6ICJTbG93IHRoZSByaHl0aG0gYW5kIHN0dWR5IGV2ZXJ5IHBvbGlzaGVkIHN1cmZhY2UgYW5kIHRyYWNlIG9mIGxpZ2h0LiBJbiBjbG9zZSB2aWV3LCB0aGUgbW92ZW1lbnQgYmVjb21lcyBhcmNoaXRlY3R1cmUuIiwNCiAgICAgICAgICAgICAgICAgICAgc2hvd2Nhc2Vfc3ViOiAiUFJPRFVDVCBESVNQTEFZIiwNCiAgICAgICAgICAgICAgICAgICAgc2hvd2Nhc2VfdGl0bGVzOiBbIk1FTidTIENMQVNTSUM8YnI+SU1QT1JURUQgTU9WRU1FTlQiLCAiTUVDSEFOSUNBTDxicj5QUkVDSVNJT04iLCAiTEFESUVTPGJyPlNRVUFSRSBFTEVHQU5DRSJdLA0KICAgICAgICAgICAgICAgICAgICBzaG93Y2FzZV9kZXNjczogWw0KICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGxvcmUgYSBaRE9YSUcgZGFpbHktd2VhciB3YXRjaCB3aXRoIGltcG9ydGVkIHF1YXJ0eiBtb3ZlbWVudCwgcmVmaW5lZCBjYXNlIGZpbmlzaGluZyBhbmQgdGltZWxlc3MgZGVzaWduLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAiRXhwZXJpZW5jZSB0aGUgaGVhcnRiZWF0IG9mIFpET1hJRyB3aXRoIG91ciBhdXRvbWF0aWMgbWVjaGFuaWNhbCBjYWxpYnJlcywgdmlzaWJsZSB0aHJvdWdoIGFuIGV4aGliaXRpb24gY2FzZSBiYWNrLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAiUmVmaW5lZCBzdG9uZS1zZXQgZGV0YWlscyB3aXRoIGpld2VscnktaW5zcGlyZWQgYWVzdGhldGljcyBmb3IgZXZlcnlkYXkgZWxlZ2FuY2UuIg0KICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgICAgICBzaG93Y2FzZV92YWxzOiBbIFsiNDJNTSIsICI3MkgiLCAiODBHIl0sIFsiNDBNTSIsICI0OEgiLCAiMTEwRyJdLCBbIjMyTU0iLCAiMy1ZUiIsICI0NUciXSBdLA0KICAgICAgICAgICAgICAgICAgICBzaG93Y2FzZV9zcGVjczogWyBbIkNBU0UiLCAiUkVTRVJWRSIsICJXRUlHSFQiXSwgWyJDQVNFIiwgIlJFU0VSVkUiLCAiV0VJR0hUIl0sIFsiQ0FTRSIsICJCQVRURVJZIiwgIldFSUdIVCJdIF0sDQogICAgICAgICAgICAgICAgICAgIHNob3djYXNlX2hvdHM6IFsgWyJTRUxFQ1RFRCBNT1ZFTUVOVCIsICJDVVNUT00gRElBTCJdLCBbIkFVVE9NQVRJQyIsICJFWEhJQklUSU9OIEJBQ0siXSwgWyJTVE9ORS1TRVQiLCAiUEVBUkwgRElBTCJdIF0sCiAgICAgICAgICAgICAgICAgICAgc2hvd2Nhc2VfY2hpcDE6ICJNRU4nUyIsIHNob3djYXNlX2NoaXAyOiAiTUVDSEFOSUNBTCIsIHNob3djYXNlX2NoaXAzOiAiTEFESUVTIiwKICAgICAgICAgICAgICAgICAgICBleHBsb3JlX3ZlcmlmeV90aXRsZTogIlZFUklGWSBPV05FUlNISVAiLAogICAgICAgICAgICAgICAgICAgIGV4cGxvcmVfdmVyaWZ5X3NhbXBsZTogIlpELTAwMSIsCiAgICAgICAgICAgICAgICAgICAgZXhwbG9yZV92ZXJpZnlfZGVzYzogIkFmdGVyIGNob29zaW5nIGEgbW9kZWwsIHVzZSB0aGUgY2FzZS1iYWNrIHNlcmlhbCBudW1iZXIgdG8gdmVyaWZ5IG1vZGVsLCBtb3ZlbWVudCBhbmQgcHJvZHVjdGlvbiBiYXRjaC4iLAogICAgICAgICAgICAgICAgICAgIGV4cGxvcmVfdmVyaWZ5X2J0bjogIlZFUklGWSBOT1ciLAogICAgICAgICAgICAgICAgICAgIGhhbG9fdmVyaWZ5X2tpY2tlcjogIkhBTE8gVkVSSUZJQ0FUSU9OIiwgaGFsb192ZXJpZnlfZGVzYzogIkVudGVyIHRoZSBjYXNlLWJhY2sgc2VyaWFsIG51bWJlciB0byBjb25uZWN0IHdpdGggWkRPWElHJ3Mgb2ZmaWNpYWwgZGF0YWJhc2UgYW5kIHZlcmlmeSBhdXRoZW50aWNpdHksIG1vdmVtZW50IGFuZCBiYXRjaCByZWNvcmRzLiIsIGhhbG9fdmVyaWZ5X2J0bjogIlZFUklGWSBOT1ciLAogICAgICAgICAgICAgICAgICAgIHN0b3J5X3N1YjogIuWTgeeJjOaVheS6iyIsIHN0b3J5X3RpdGxlOiAiQlVJTFQgRk9SPGJyPlJFQUwgV0FUQ0ggQlVTSU5FU1MiLA0KICAgICAgICAgICAgICAgICAgICBzdG9yeV9kZXNjOiAiWkRPWElHIGlzIGEgY29udGVtcG9yYXJ5IENoaW5lc2Ugd2F0Y2ggYnJhbmQgZm9jdXNlZCBvbiByZWxpYWJsZSBpbXBvcnRlZCBtb3ZlbWVudCB3YXRjaGVzLCBjb3ZlcmluZyBtZW4ncyBkYWlseSwgYnVzaW5lc3MgYW5kIHNwb3J0IHN0eWxlcywgd2l0aCB3b21lbidzIHNxdWFyZSBzdG9uZS1zZXQgZGVzaWducyBmb3IgcmVmaW5lZCBvY2Nhc2lvbnMuIiwNCiAgICAgICAgICAgICAgICAgICAgc3RvcnlfczE6ICJNZW4ncyBMaW5lcyIsIHN0b3J5X3MyOiAiSW1wb3J0ZWQgTW92ZW1lbnRzIiwgc3RvcnlfczM6ICJMYWRpZXMgU3F1YXJlIiwNCiAgICAgICAgICAgICAgICAgICAgaW5ub19zdWI6ICIzRCBWSUVXIiwgaW5ub190aXRsZTogIlFVQVJUWiAmPGJyPk1FQ0hBTklDQUwgTU9WRU1FTlRTIiwNCiAgICAgICAgICAgICAgICAgICAgaW5ub19kZXNjOiAiT3VyIGNvbGxlY3Rpb25zIHVzZSBkZXBlbmRhYmxlIGltcG9ydGVkIHF1YXJ0eiBhbmQgbWVjaGFuaWNhbCBtb3ZlbWVudHMsIHNlbGVjdGVkIGZvciBzdGFibGUgdGltZWtlZXBpbmcsIHNlcnZpY2VhYmlsaXR5IGFuZCBldmVyeWRheSBkdXJhYmlsaXR5LiBFYWNoIHdhdGNoIGlzIGFzc2VtYmxlZCB3aXRoIGF0dGVudGlvbiB0byBjYXNlIGZpbmlzaGluZywgZGlhbCBjbGFyaXR5IGFuZCB3ZWFyaW5nIGNvbWZvcnQuIiwNCiAgICAgICAgICAgICAgICAgICAgaW5ub19zMTogIlF1YXJ0eiBBY2N1cmFjeSIsIGlubm9fczI6ICJNZWNoYW5pY2FsIE9wdGlvbnMiLA0KICAgICAgICAgICAgICAgICAgICBhcmNoX3N1YjogIkxVTUUgU1BFQ1MiLCBhcmNoX3RpdGxlOiAiTUVOJ1MgJiBMQURJRVMnIFdBVENIRVMiLCBjYXJkX2J0bjogIlZpZXcgTW9kZWwiLA0KICAgICAgICAgICAgICAgICAgICBwcm9kdWN0X21hdGVyaWFsczogWyJJbXBvcnRlZCBRdWFydHogLyBTdGFpbmxlc3MgU3RlZWwiLCAiSW1wb3J0ZWQgQXV0b21hdGljIC8gQnVzaW5lc3MgQ2FzZSIsICJTdG9uZS1zZXQgU3F1YXJlIC8gTGFkaWVzJyBXYXRjaCIsICJJbXBvcnRlZCBBdXRvbWF0aWMgLyBTYXBwaGlyZSIsICJJbXBvcnRlZCBRdWFydHogLyBSb3NlIEdvbGQiXSwNCiAgICAgICAgICAgICAgICAgICAgc2VydmljZV9zdWI6ICJDTElFTlQgU0VSVklDRSIsIHNlcnZpY2VfdGl0bGU6ICJTVVBQT1JUIEZPUjxicj5EQUlMWSBXRUFSIiwNCiAgICAgICAgICAgICAgICAgICAgc2VydmljZV9kZXNjOiAiRnJvbSBiYXR0ZXJ5IHJlcGxhY2VtZW50IGFuZCB3YXRlci1yZXNpc3RhbmNlIGNoZWNrcyB0byBtZWNoYW5pY2FsIG1vdmVtZW50IG1haW50ZW5hbmNlLCBaRE9YSUcgc3VwcG9ydHMgZXZlcnkgd2F0Y2ggd2l0aCBwcmFjdGljYWwgYWZ0ZXItc2FsZXMgc2VydmljZS4iLA0KICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlX2NhcmQxX3RpdGxlOiAiV2FycmFudHkgU3VwcG9ydCIsIHNlcnZpY2VfY2FyZDFfZGVzYzogIlJlZ2lzdGVyIHlvdXIgd2F0Y2ggYW5kIGtlZXAgdGhlIHB1cmNoYXNlLCBzZXJpYWwgbnVtYmVyIGFuZCBzZXJ2aWNlIHJlY29yZCB0cmFjZWFibGUuIiwNCiAgICAgICAgICAgICAgICAgICAgc2VydmljZV9jYXJkMl90aXRsZTogIkJhdHRlcnkgJiBNYWludGVuYW5jZSIsIHNlcnZpY2VfY2FyZDJfZGVzYzogIkFycmFuZ2UgYmF0dGVyeSByZXBsYWNlbWVudCwgd2F0ZXItcmVzaXN0YW5jZSBjaGVja3MsIHN0cmFwIGZpdHRpbmcgYW5kIG1lY2hhbmljYWwgbW92ZW1lbnQgY2FyZS4iLA0KICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlX2NhcmQzX3RpdGxlOiAiV2hvbGVzYWxlIENvbnN1bHRhdGlvbiIsIHNlcnZpY2VfY2FyZDNfZGVzYzogIkdldCBjb2xsZWN0aW9uIGluZm9ybWF0aW9uLCBtb2RlbCByZWNvbW1lbmRhdGlvbnMgYW5kIHByb2R1Y3Qgc3VwcG9ydCBmb3IgcmV0YWlsIG9yIGRpc3RyaWJ1dGlvbiBjaGFubmVscy4iLA0KICAgICAgICAgICAgICAgICAgICBvd25lcnNoaXBfc3ViOiAiT1dORVJTSElQIEpPVVJORVkiLCBvd25lcnNoaXBfdGl0bGU6ICJGUk9NIFNFTEVDVElPTjxicj5UTyBTRVJWSUNFIiwNCiAgICAgICAgICAgICAgICAgICAgb3duZXJzaGlwX2Rlc2M6ICJBIGNvbXBsZXRlIHdhdGNoIHdlYnNpdGUgc2hvdWxkIG1ha2UgdHJ1c3QgdmlzaWJsZTogcHJvZHVjdCBzZWxlY3Rpb24sIGF1dGhvcml6ZWQgcHVyY2hhc2UsIHNlcmlhbCByZWdpc3RyYXRpb24sIHNlcnZpY2UgYW5kIGF1dGhlbnRpY2l0eSB2ZXJpZmljYXRpb24gc2hvdWxkIGZlZWwgY29ubmVjdGVkLiIsDQogICAgICAgICAgICAgICAgICAgIG93bmVyc2hpcF9jYXJkMV90aXRsZTogIlNlbGVjdCIsIG93bmVyc2hpcF9jYXJkMV9kZXNjOiAiQ29tcGFyZSBtZW4ncyBxdWFydHosIG1lY2hhbmljYWwgYW5kIGxhZGllcycgc3F1YXJlIG1vZGVscyBieSBtb3ZlbWVudCwgY2FzZSBmaW5pc2ggYW5kIGRhaWx5IHdlYXJpbmcgc3R5bGUuIiwNCiAgICAgICAgICAgICAgICAgICAgb3duZXJzaGlwX2NhcmQyX3RpdGxlOiAiT2ZmaWNpYWwgUHVyY2hhc2UiLCBvd25lcnNoaXBfY2FyZDJfZGVzYzogIkd1aWRlIGN1c3RvbWVycyB0b3dhcmQgb2ZmaWNpYWwgY29udGFjdCwgb25saW5lIGNvbnN1bHRhdGlvbiBhbmQgdHJhY2VhYmxlIHdob2xlc2FsZSBpbnF1aXJpZXMuIiwNCiAgICAgICAgICAgICAgICAgICAgb3duZXJzaGlwX2NhcmQzX3RpdGxlOiAiUmVnaXN0ZXIiLCBvd25lcnNoaXBfY2FyZDNfZGVzYzogIktlZXAgc2VyaWFsIG51bWJlciwgcHVyY2hhc2UgZGF0ZSBhbmQgbW92ZW1lbnQgcmVjb3JkIHJlYWR5IGZvciB3YXJyYW50eSBhbmQgZnV0dXJlIHNlcnZpY2UuIiwNCiAgICAgICAgICAgICAgICAgICAgb3duZXJzaGlwX2NhcmQ0X3RpdGxlOiAiTWFpbnRhaW4iLCBvd25lcnNoaXBfY2FyZDRfZGVzYzogIk9mZmVyIHByYWN0aWNhbCBiYXR0ZXJ5LCB3YXRlci1yZXNpc3RhbmNlLCBzdHJhcCBhbmQgbWVjaGFuaWNhbCBtb3ZlbWVudCBtYWludGVuYW5jZSBwYXRod2F5cy4iLA0KICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbHNfc3ViOiAiUFJPRFVDVCBDUkFGVCIsIG1hdGVyaWFsc190aXRsZTogIkNBU0VTLCBESUFMUzxicj4mIFNUT05FIFNFVFRJTkciLA0KICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbHNfZGVzYzogIlpET1hJRyBjb21iaW5lcyBzdGFpbmxlc3Mtc3RlZWwgY2FzZXMsIGNsZWFyIGRpYWxzIGFuZCBkZWNvcmF0aXZlIHN0b25lLXNldHRpbmcgZm9yIHNlbGVjdGVkIGxhZGllcycgc3F1YXJlIHdhdGNoZXMsIGNyZWF0aW5nIGNvbGxlY3Rpb25zIHN1aXRhYmxlIGZvciBldmVyeWRheSByZXRhaWwuIiwNCiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxzX2NhcmQxX3RpdGxlOiAiU1RBSU5MRVNTIFNURUVMIiwgbWF0ZXJpYWxzX2NhcmQxX2Rlc2M6ICJSZWxpYWJsZSBjYXNlIGNvbnN0cnVjdGlvbiB3aXRoIHBvbGlzaGVkIGFuZCBicnVzaGVkIGZpbmlzaGluZyBmb3IgYnVzaW5lc3MsIGNhc3VhbCBhbmQgZHJlc3Mgd2F0Y2hlcy4iLA0KICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbHNfY2FyZDJfdGl0bGU6ICJJTVBPUlRFRCBNT1ZFTUVOVFMiLCBtYXRlcmlhbHNfY2FyZDJfZGVzYzogIlNlbGVjdGVkIHF1YXJ0eiBhbmQgbWVjaGFuaWNhbCBtb3ZlbWVudCBvcHRpb25zIHByb3ZpZGUgc3RhYmxlIHBlcmZvcm1hbmNlIGFjcm9zcyBkaWZmZXJlbnQgcHJpY2UgcmFuZ2VzLiIsDQogICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsc19jYXJkM190aXRsZTogIlNUT05FLVNFVCBTUVVBUkUiLCBtYXRlcmlhbHNfY2FyZDNfZGVzYzogIkxhZGllcycgc3F1YXJlIHdhdGNoZXMgZmVhdHVyZSByZWZpbmVkIHN0b25lLXNldHRpbmcgZGV0YWlscyBmb3IgYSBicmlnaHRlciBqZXdlbHJ5LWluc3BpcmVkIGFwcGVhcmFuY2UuIiwNCiAgICAgICAgICAgICAgICAgICAgYmVzcG9rZV9zdWI6ICJPRU0gLyBPRE0gU1VQUE9SVCIsIGJlc3Bva2VfdGl0bGU6ICJGTEVYSUJMRSBXQVRDSDxicj5ERVZFTE9QTUVOVCIsDQogICAgICAgICAgICAgICAgICAgIGJlc3Bva2VfZGVzYzogIkZvciBwYXJ0bmVycyBhbmQgZGlzdHJpYnV0b3JzLCBaRE9YSUcgY2FuIHN1cHBvcnQgY2FzZSBzZWxlY3Rpb24sIGRpYWwgYXJ0d29yaywgc3RyYXAgb3B0aW9ucyBhbmQgbW92ZW1lbnQgY29uZmlndXJhdGlvbiBmb3IgbWVuJ3MgYW5kIGxhZGllcycgd2F0Y2ggbGluZXMuIiwNCiAgICAgICAgICAgICAgICAgICAgYmVzcG9rZV9zMTogIlNUUkFQUyIsIGJlc3Bva2VfczI6ICJNT1ZFTUVOVFMiLCBiZXNwb2tlX3MzOiAiU0FNUExFIiwNCiAgICAgICAgICAgICAgICAgICAgaGVyaXRhZ2Vfc3ViOiAiTUlMRVNUT05FUyIsIGhlcml0YWdlX3RpdGxlOiAiWkRPWElHJ1M8YnI+Sk9VUk5FWSIsDQogICAgICAgICAgICAgICAgICAgIGhlcml0YWdlX2NhcmQxX3RpdGxlOiAiRklSU1QgUVVBUlRaIExJTkUiLCBoZXJpdGFnZV9jYXJkMV9kZXNjOiAiVGhlIGZpcnN0IFpET1hJRyBxdWFydHogY29sbGVjdGlvbiBmb3IgYnVzaW5lc3MgYW5kIGNhc3VhbCBkYWlseSB3ZWFyIGVudGVycyB0aGUgbWFya2V0LiIsDQogICAgICAgICAgICAgICAgICAgIGhlcml0YWdlX2NhcmQyX3RpdGxlOiAiSU1QT1JURUQgTU9WRU1FTlQiLCBoZXJpdGFnZV9jYXJkMl9kZXNjOiAiWkRPWElHIGV4cGFuZHMgbW92ZW1lbnQgc291cmNpbmcsIGltcHJvdmluZyBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIHJhbmdlLiIsDQogICAgICAgICAgICAgICAgICAgIGhlcml0YWdlX2NhcmQzX3RpdGxlOiAiTEFESUVTIFNRVUFSRSIsIGhlcml0YWdlX2NhcmQzX2Rlc2M6ICJUaGUgbGFkaWVzJyBzcXVhcmUgc3RvbmUtc2V0IHdhdGNoIGxpbmUgaXMgaW50cm9kdWNlZCBmb3IgcmVmaW5lZCBqZXdlbHJ5LXN0eWxlIG1vZGVscy4iLA0KICAgICAgICAgICAgICAgICAgICBoZXJpdGFnZV9jYXJkNF90aXRsZTogIlJFVEFJTCBFWFBBTlNJT04iLCBoZXJpdGFnZV9jYXJkNF9kZXNjOiAiVGhlIGNvbGxlY3Rpb24gZXhwYW5kcyB0byBzdXBwb3J0IHJldGFpbCBhbmQgd2hvbGVzYWxlIGNoYW5uZWxzIGFjcm9zcyBtdWx0aXBsZSByZWdpb25zLiIsDQogICAgICAgICAgICAgICAgICAgIGpvdXJuYWxfc3ViOiAiSk9VUk5BTCIsIGpvdXJuYWxfdGl0bGU6ICJaRE9YSUcgSU5TSUdIVFMiLA0KICAgICAgICAgICAgICAgICAgICBqb3VybmFsX2Rlc2M6ICJDb2xsZWN0aW9uIHVwZGF0ZXMsIHdhdGNoIGNhcmUgdGlwcyBhbmQgbGlmZXN0eWxlIHN0b3JpZXMgZnJvbSB0aGUgWkRPWElHIHRlYW0uIiwNCiAgICAgICAgICAgICAgICAgICAgam91cm5hbF90YWcxOiAiV0FUQ0ggQ0FSRSIsIGpvdXJuYWxfY2FyZDE6ICJIb3cgdG8gY2FyZSBmb3IgeW91ciBxdWFydHogb3IgbWVjaGFuaWNhbCBaRE9YSUcgd2F0Y2giLA0KICAgICAgICAgICAgICAgICAgICBqb3VybmFsX3RhZzI6ICJMVU1FIFNQRUNTIiwgam91cm5hbF9jYXJkMjogIk1lbidzIHZzIExhZGllcyc6IGZpbmRpbmcgdGhlIHJpZ2h0IFpET1hJRyBtb2RlbCBmb3IgeW91IiwNCiAgICAgICAgICAgICAgICAgICAgam91cm5hbF90YWczOiAiQkVISU5EIFRIRSBCUkFORCIsIGpvdXJuYWxfY2FyZDM6ICJIb3cgWkRPWElHIHNlbGVjdHMgcmVsaWFibGUgbW92ZW1lbnRzIGZvciBkYWlseSBwZXJmb3JtYW5jZSIsDQogICAgICAgICAgICAgICAgICAgIGZhcV9zdWI6ICJDQVJFICYgRkFRIiwgZmFxX3RpdGxlOiAiT1dORVJTSElQPGJyPlFVRVNUSU9OUyIsDQogICAgICAgICAgICAgICAgICAgIGZhcV9xMTogIkhvdyBkbyBJIHZlcmlmeSBhIFpET1hJRyB3YXRjaD8iLCBmYXFfYTE6ICJFbnRlciB0aGUgY2FzZS1iYWNrIHNlcmlhbCBudW1iZXIgaW4gPGEgaHJlZj1cIiN2YXVsdFwiIGNsYXNzPVwidGV4dC1bIzBkNmI1Nl0gdW5kZXJsaW5lIHVuZGVybGluZS1vZmZzZXQtNFwiPlRoZSBWYXVsdCB2ZXJpZmljYXRpb24gbW9kdWxlPC9hPiB0byBjaGVjayB0aGUgd2F0Y2ggcmVjb3JkLiIsDQogICAgICAgICAgICAgICAgICAgIGZhcV9xMjogIkhvdyBvZnRlbiBzaG91bGQgYSBtZWNoYW5pY2FsIHdhdGNoIGJlIHNlcnZpY2VkPyIsIGZhcV9hMjogIlNlcnZpY2UgdGltaW5nIGRlcGVuZHMgb24gd2VhciBmcmVxdWVuY3kgYW5kIHN0b3JhZ2UgY29uZGl0aW9ucy4gU3RhcnQgd2l0aCBhbiBpbnNwZWN0aW9uIGJlZm9yZSBjaG9vc2luZyBmdWxsIG1haW50ZW5hbmNlLiIsDQogICAgICAgICAgICAgICAgICAgIGZhcV9xMzogIkhvdyBjYW4gSSBsZWFybiBtb3JlIGFib3V0IHRoZSBjb2xsZWN0aW9uPyIsIGZhcV9hMzogIkNvbnRhY3QgdGhlIFpET1hJRyB0ZWFtIGZvciByZXRhaWwsIHdob2xlc2FsZSBhbmQgc2VydmljZSBndWlkYW5jZS4gT2ZmbGluZSBzaG93cm9vbXMgYXJlIG5vdCBvcGVuIGF0IHRoaXMgc3RhZ2UuIiwNCiAgICAgICAgICAgICAgICAgICAgdmF1bHRfdGl0bGU6ICJWRVJJRlkgWU9VUiBXQVRDSCIsIHZhdWx0X2Rlc2M6ICJFbnRlciB0aGUgc2VyaWFsIG51bWJlciBvbiB0aGUgY2FzZSBiYWNrIHRvIHZlcmlmeSB0aGUgbW9kZWwsIG1vdmVtZW50IHR5cGUgYW5kIHByb2R1Y3Rpb24gYmF0Y2ggb2YgeW91ciBaRE9YSUcgd2F0Y2guIiwNCiAgICAgICAgICAgICAgICAgICAgdmF1bHRfcGg6ICJFLkcuIFpELTAwMSIsIHZhdWx0X2VudGVyOiAiQ0hFQ0siLCB2YXVsdF9idG46ICJWRVJJRlkgTk9XIiwgdmF1bHRfbG9hZGluZzogIkNPTk5FQ1RJTkcgVE8gREFUQUJBU0UuLi4iLA0KICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZF9zdGF0dXM6ICJNQVRDSCBGT1VORCIsIGludmFsaWRfc3RhdHVzOiAiTk9UIEZPVU5EIC8gSU5WQUxJRCIsIHNlY3VyZV9yZWNvcmQ6ICJNT1ZFTUVOVCBSRUNPUkQiLA0KICAgICAgICAgICAgICAgICAgICBtb2RlbF9sYWJlbDogIk1vZGVsIiwgc2VyaWFsX2xhYmVsOiAiV2F0Y2ggTnVtYmVyIiwgY2FsaWJyZV9sYWJlbDogIk1vdmVtZW50IiwgZ2VuZGVyX2xhYmVsOiAiQ29sbGVjdGlvbiIsIGRpYWxfbGFiZWw6ICJEaWFsIERldGFpbHMiLCBjYXNlX2xhYmVsOiAiQ2FzZSAvIEJhdGNoIiwgYmxlc3NpbmdfbGFiZWw6ICJNZXNzYWdlIiwNCiAgICAgICAgICAgICAgICAgICAgdmFsaWRfbW92ZW1lbnQ6ICJJbXBvcnRlZCBRdWFydHogLyBTdGFpbmxlc3MgU3RlZWwiLCB2YWxpZF9tb2RlbDogIk1lbidzIENsYXNzaWMiLCBpbnZhbGlkX21vZGVsOiAiVU5SRUNPR05JWkVEIiwNCiAgICAgICAgICAgICAgICAgICAgaW52YWxpZF9zZXJpYWw6ICJObyBtYXRjaGluZyByZWNvcmQiLCBpbnZhbGlkX2dlbmRlcjogIk4vQSIsIGludmFsaWRfZGlhbDogIk4vQSIsIGludmFsaWRfY2FzZTogIk4vQSIsIGludmFsaWRfYmxlc3Npbmc6ICJUaGlzIGNvZGUgaXMgbm90IGluIHRoZSBjdXJyZW50IFpET1hJRyB2ZXJpZmljYXRpb24gZGF0YWJhc2UuIFBsZWFzZSBjaGVjayB0aGUgY2FzZS1iYWNrIG51bWJlciBvciBjb250YWN0IG9mZmljaWFsIHN1cHBvcnQuIiwNCiAgICAgICAgICAgICAgICAgICAgY29udGFjdF9zdWI6ICJDT05UQUNUIFpET1hJRyIsIGNvbnRhY3RfdGl0bGU6ICJPRkZJQ0lBTDxicj5TVVBQT1JUIiwKICAgICAgICAgICAgICAgICAgICBjb250YWN0X2Rlc2M6ICJQdXJjaGFzZSBxdWVzdGlvbnMsIHZlcmlmaWNhdGlvbiwgYWZ0ZXItc2FsZXMgc2VydmljZSBhbmQgY2hhbm5lbCBjb29wZXJhdGlvbiBzdGFydCBoZXJlLiBTZW5kIHRoZSBtb2RlbCwgc2VyaWFsIG51bWJlciBvciByZXF1ZXN0IGFuZCB0aGUgb2ZmaWNpYWwgdGVhbSB3aWxsIHJlcGx5IHdpdGggcmVhbCBwcm9kdWN0IGluZm9ybWF0aW9uLiIsCiAgICAgICAgICAgICAgICAgICAgY29udGFjdF9jYXJkMV9sYWJlbDogIkVNQUlMIiwgY29udGFjdF9jYXJkMl9sYWJlbDogIlZFUklGWSIsIGNvbnRhY3RfY2FyZDJfdGV4dDogIkF1dGhlbnRpY2l0eSBjaGVjayIsIGNvbnRhY3RfY2FyZDNfbGFiZWw6ICJQQVJUTkVSIiwgY29udGFjdF9jYXJkM190ZXh0OiAiQ2hhbm5lbCBjb29wZXJhdGlvbiIsIGNvbnRhY3RfY2FyZDRfbGFiZWw6ICJTRVJWSUNFIiwgY29udGFjdF9jYXJkNF90ZXh0OiAiQWZ0ZXItc2FsZXMgc3VwcG9ydCIsCiAgICAgICAgICAgICAgICAgICAgZm9vdGVyX2JyYW5kX2Rlc2M6ICJDb250ZW1wb3Jhcnkgd2F0Y2ggYnJhbmQgZm9jdXNlZCBvbiBzZWxlY3RlZCBpbXBvcnRlZCBtb3ZlbWVudHMgYW5kIGRhaWx5IHdlYXJpbmcgY29tZm9ydCwgc3Bhbm5pbmcgcXVhcnR6LCBtZWNoYW5pY2FsIGFuZCBsYWRpZXMnIHNxdWFyZSBzdG9uZS1zZXQgY29sbGVjdGlvbnMuIiwNCiAgICAgICAgICAgICAgICAgICAgZm9vdGVyX2NvbGxlY3Rpb25zX3RpdGxlOiAiTFVNRSBTUEVDUyIsDQogICAgICAgICAgICAgICAgICAgIGZvb3Rlcl9zdXBwb3J0X3RpdGxlOiAiU1VQUE9SVCIsDQogICAgICAgICAgICAgICAgICAgIGZvb3Rlcl9jb250YWN0X3RpdGxlOiAiQ09OVEFDVCIsDQogICAgICAgICAgICAgICAgICAgIGZvb3Rlcl9saW5rczogWyJNZW4ncyBXYXRjaGVzIiwgIkxhZGllcycgQ29sbGVjdGlvbiIsICJQcm9kdWN0IEFyY2hpdmUiLCAiU2VydmljZSAmIENhcmUiLCAiRkFRIiwgIkF1dGhlbnRpY2l0eSBDaGVjayIsICJHZXQgaW4gVG91Y2giXSwNCiAgICAgICAgICAgICAgICAgICAgZm9vdF9yOiAiwqkgMjAyNiBaRE9YSUcgV0FUQ0hFUy4gQUxMIFJJR0hUUyBSRVNFUlZFRC4iDQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICBjbjoge30NCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaTE4bi5jbiwgew0KICAgICAgICAgICAgICAgIC4uLmkxOG4uZW4sDQogICAgICAgICAgICAgICAgbWVudV9idG46ICLoj5zljZUiLA0KICAgICAgICAgICAgICAgIGNsb3NlX21lbnU6ICLlhbPpl60iLA0KICAgICAgICAgICAgICAgIG1lbnVfaXRlbXM6IFsi6aaW6aG1IiwgIuWTgeeJjOaVheS6iyIsICLohZXooajns7vliJciLCAi5Yi26KGo5bel6Im6IiwgIuecn+S8quafpemqjCIsICLmnI3liqHmlK\/mjIEiLCAi6IGU57O75oiR5LusIl0sCiAgICAgICAgICAgICAgICB0b3BfbmF2OiBbIummlumhtSIsICLlk4HniYzmlYXkuosiLCAi6IWV6KGo57O75YiXIiwgIuWItuihqOW3peiJuiIsICLnnJ\/kvKrmn6XpqowiLCAi5pyN5Yqh5pSv5oyBIiwgIuiBlOezu+aIkeS7rCJdLAogICAgICAgICAgICAgICAgbmF2X3ZlcmlmeV9jdGE6ICLmn6XpqozohZXooagiLA0KICAgICAgICAgICAgICAgIGhlcm9fYnRuOiAi5p+l6aqM6IWV6KGoIiwNCiAgICAgICAgICAgICAgICBoZXJvX3RhYnM6IFsi55S36KGoIiwgIum7kemSmyIsICLpu5Hnu78iXSwKICAgICAgICAgICAgICAgIGhlcm9fc2xpZGVzOiBbDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHN1YjogIueUt+Wjq+aXpeW4uOiFleihqCIsDQogICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogIueUt+ihqDxicj7nu4\/lhbjmrL4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogIuimhuebluWVhuWKoeOAgeS8kemXsuS4jui\/kOWKqOmjjuagvOeahOeUt+Wjq+efs+iLseWPiuacuuaisOiFleihqO+8jOmAguWQiOaXpeW4uOS9qeaItOS4jua4oOmBk+mUgOWUruOAgiIsDQogICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogImh0dHBzOi8vemRveGlnLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi96ZG94aWctemRveGlnLWhlcm8tcG9zdGVyLWljZS02NGQyYTQxMjY2YWQucG5nIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIG1vYmlsZUltYWdlOiAiaHR0cHM6Ly96ZG94aWcuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA2L3pkb3hpZy1oZXJvLW1vYmlsZS1tZW5zLTAwNDhkYjQxMjhhMi53ZWJwIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IFsiMjAg5bm05Yi26YCg5Z+656GAIiwgIui\/m+WPo+efs+iLseacuuiKryIsICLlt6XljoLnm7Tovr4iLCAi6LWw5ZCR5YWo55CD5omL6IWVIl0sDQogICAgICAgICAgICAgICAgICAgICAgICBzdGF0czogW3sgaWNvbjogIjIwIiwgdmFsdWU6ICIyMCDlubQiLCBsYWJlbDogIuW3peWOguS+m+W6lOmTvuWfuuehgCIgfSwgeyBpY29uOiAiMDEiLCB2YWx1ZTogIuWVhuWKoSIsIGxhYmVsOiAi55S35aOr5pel5bi457O75YiXIiB9XSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbEhyZWY6ICIvaW5kZXgucGhwL3dhdGNoLWRldGFpbC16ZDAwNy8\/bW9kZWw9emQwMDciLA0KICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsTGFiZWw6ICLmn6XnnIvnlLfooajor6bmg4UiLA0KICAgICAgICAgICAgICAgICAgICAgICAgdHJ1c3Q6ICLpnaLlkJHnjrDku6Pml6XluLjkvanmiLTnmoTlt6XljoLnm7Tovr7nlLflo6vohZXooagiDQogICAgICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiAi6buR6Imy6ZKb5b2xIiwKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICLpu5HoibI8YnI+6ZKb5b2xIiwKICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogIuS7pea3seiJsumSouW4puOAgeWxguasoeihqOebmOS4jum7keiJsumHkeWxnui0qOaEn++8jOW8uuWMluacuuaisOiFleihqOeahOinhuinieWGsuWHu+OAgiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiAiaHR0cHM6Ly96ZG94aWcuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA2L3pkb3hpZy16ZG94aWctaGVyby1ibGFjay10aXRhbi00Mjg1MDIwOGY4NTgucG5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlSW1hZ2U6ICJodHRwczovL3pkb3hpZy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDYvemRveGlnLXpkb3hpZy1oZXJvLWJsYWNrLXRpdGFuLTQyODUwMjA4Zjg1OC5wbmciLAogICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBbIum7keiJsumHkeWxniIsICLlpJrnm5jpnaLnu4boioIiLCAi57K+6ZKi6KGo5aOzIiwgIueos+WumuaXpeW4uOi1sOaXtiJdLAogICAgICAgICAgICAgICAgICAgICAgICBzdGF0czogW3sgaWNvbjogIjQ1IiwgdmFsdWU6ICI0NSDliIYiLCBsYWJlbDogIuaXi+i9rOihqOWciOWIu+W6piIgfSwgeyBpY29uOiAiU1MiLCB2YWx1ZTogIum7kemSoiIsIGxhYmVsOiAi5rex6Imy6YeR5bGe6LSo5oSfIiB9XSwKICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsSHJlZjogIi9pbmRleC5waHAvd2F0Y2gtZGV0YWlsLXpkMDA3Lz9tb2RlbD16ZDAwOC1ibGFjayIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbExhYmVsOiAi5p+l55yL6buR6Imy6IWV6KGoIiwKICAgICAgICAgICAgICAgICAgICAgICAgdHJ1c3Q6ICLpu5HoibLpkpvlvbHkuLvpopjlm77lt7LmjqXlhaXpppbpobXnrKzkuozlvKDova7mkq0iCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN1YjogIuiHquWKqOacuuaisOWPjOiJsiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAi6buR57u\/PGJyPuWPjOebmCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICLpu5Hnm5jkuI7nu7\/nm5jmnLrmorDpo47moLzlubbnva7lkYjnjrDvvIzorqnnrKzkuInlvKDova7mkq3mm7Tlg4\/lrozmlbTns7vliJflsZXnpLrjgIIiLAogICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogImh0dHBzOi8vemRveGlnLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNi96ZG94aWctemRveGlnLWhlcm8tYmxhY2stZ3JlZW4tYjI2NDNlYTgzMDBmLnBuZyIsCiAgICAgICAgICAgICAgICAgICAgICAgIG1vYmlsZUltYWdlOiAiaHR0cHM6Ly96ZG94aWcuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA2L3pkb3hpZy16ZG94aWctaGVyby1ibGFjay1ncmVlbi1iMjY0M2VhODMwMGYucG5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgbWV0YTogWyLpu5HoibLnm5jpnaIiLCAi57u\/6Imy55uY6Z2iIiwgIuiHquWKqOacuuaisOmjjuagvCIsICLnsr7pkqLooajluKYiXSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHM6IFt7IGljb246ICIwMiIsIHZhbHVlOiAi5Y+M6ImyIiwgbGFiZWw6ICLpu5Hnu7\/lj4zmrL7lkYjnjrAiIH0sIHsgaWNvbjogIjQ1IiwgdmFsdWU6ICLmvZzmsLQiLCBsYWJlbDogIui\/kOWKqOihqOWciOi9ruW7kyIgfV0sCiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbEhyZWY6ICIvaW5kZXgucGhwL3dhdGNoLWRldGFpbC16ZDAwNy8\/bW9kZWw9emQwMDMiLAogICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxMYWJlbDogIuafpeeci+acuuaisOWPjOiJsiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRydXN0OiAi6buR57u\/5Y+M55uY5Li76aKY5Zu+5bey5o6l5YWl6aaW6aG156ys5LiJ5byg6L2u5pKtIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgc2hvd2Nhc2Vfc3ViOiAi5Lqn5ZOB5bGV56S6IiwNCiAgICAgICAgICAgICAgICBzaG93Y2FzZV90aXRsZXM6IFsi55S36KGo57uP5YW4PGJyPui\/m+WPo+acuuiKryIsICLmnLrmorDkuYvnvo48YnI+57K+5a+G6L+Q6L2sIiwgIuWls+Wjq+aWueW9ojxicj7kvJjpm4Xplbbnn7MiXSwNCiAgICAgICAgICAgICAgICBzaG93Y2FzZV9kZXNjczogWw0KICAgICAgICAgICAgICAgICAgICAi5o6i57SiIFpET1hJRyDnlLfooajns7vliJfvvIzph4fnlKjpq5jlk4HotKjov5vlj6Pnn7Poi7HmnLroiq\/vvIzmkK3phY3nsr7nu4bmiZPno6jnmoTooajlo7PkuI7nu4\/lhbjorr7orqHjgIIiLA0KICAgICAgICAgICAgICAgICAgICAi5oSf5Y+XIFpET1hJRyDoh6rliqjmnLrmorDmnLroiq\/nmoTnsr7lr4blvovliqjvvIzkuLrmnLrmorDohZXooajniLHlpb3ogIXmiZPpgKDnqLPlrprlj6\/pnaDnmoTml6XluLjpgInmi6njgIIiLA0KICAgICAgICAgICAgICAgICAgICAi57K+6Ie06ZW255+z57uG6IqC5LiO54+g5a6d576O5a2m6J6N5ZCI77yM5LiT5Li65b2T5Luj5aWz5oCn6K6+6K6h77yM5bGV546w5pel5bi456m\/5pCt55qE5LyY6ZuF6LSo5oSf44CCIg0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgc2hvd2Nhc2VfdmFsczogW1siNDJNTSIsICI3MkgiLCAiODBHIl0sIFsiNDBNTSIsICI0OEgiLCAiMTEwRyJdLCBbIjMyTU0iLCAiMyDlubQiLCAiNDVHIl1dLA0KICAgICAgICAgICAgICAgIHNob3djYXNlX3NwZWNzOiBbWyLooajlo7MiLCAi5Yqo5YKoIiwgIumHjemHjyJdLCBbIuihqOWjsyIsICLliqjlgqgiLCAi6YeN6YePIl0sIFsi6KGo5aOzIiwgIueUteaxoCIsICLph43ph48iXV0sDQogICAgICAgICAgICAgICAgc2hvd2Nhc2VfaG90czogW1si6L+b5Y+j5py66IqvIiwgIuWumuWItuihqOebmCJdLCBbIuiHquWKqOacuuaisCIsICLpgI\/lupXorr7orqEiXSwgWyLnsr7nu4bplbbnn7MiLCAi54+N54+g5q+N6LSdIl1dLA0KICAgICAgICAgICAgICAgIHNob3djYXNlX2NoaXAxOiAi55S36KGoIiwKICAgICAgICAgICAgICAgIHNob3djYXNlX2NoaXAyOiAi5py65qKwIiwKICAgICAgICAgICAgICAgIHNob3djYXNlX2NoaXAzOiAi5aWz6KGoIiwKICAgICAgICAgICAgICAgIGV4cGxvcmVfdmVyaWZ5X3RpdGxlOiAi5bey6LSt6IWV6KGo6aqM55yfIiwKICAgICAgICAgICAgICAgIGV4cGxvcmVfdmVyaWZ5X3NhbXBsZTogIlpELTAwMSIsCiAgICAgICAgICAgICAgICBleHBsb3JlX3ZlcmlmeV9kZXNjOiAi6YCJ5Lit5qy+5byP5ZCO77yM5Y+v55So5bqV55uW5bqP5YiX5Y+35p+l6aqM5Z6L5Y+344CB5py66Iqv5LiO5om55qyh6K6w5b2V44CCIiwKICAgICAgICAgICAgICAgIGV4cGxvcmVfdmVyaWZ5X2J0bjogIueri+WNs+afpemqjCIsCiAgICAgICAgICAgICAgICBoYWxvX3ZlcmlmeV9raWNrZXI6ICLlhYnnjq\/pqoznnJ8iLAogICAgICAgICAgICAgICAgaGFsb192ZXJpZnlfZGVzYzogIui+k+WFpeW6leebluW6j+WIl+WPt++8jOi\/nuaOpSBaRE9YSUcg5a6Y5pa55pWw5o2u5bqT5p+l6aqM6IWV6KGo55yf5Lyq44CB5py66Iqv5LiO5om55qyh6K6w5b2V44CCIiwNCiAgICAgICAgICAgICAgICBoYWxvX3ZlcmlmeV9idG46ICLnq4vljbPmn6XpqowiLA0KICAgICAgICAgICAgICAgIHZhdWx0X3RpdGxlOiAi5p+l6aqM6IWV6KGo55yf5LyqIiwNCiAgICAgICAgICAgICAgICB2YXVsdF9kZXNjOiAi6L6T5YWl5bqV55uW5LiK55qE5bqP5YiX5Y+377yM5p+l6aqMIFpET1hJRyDohZXooajnmoTlnovlj7fjgIHmnLroiq\/nsbvlnovkuI7nlJ\/kuqfmibnmrKHjgIIiLA0KICAgICAgICAgICAgICAgIHZhdWx0X3BoOiAi5L6L5aaCIFpELTAwMSIsDQogICAgICAgICAgICAgICAgdmF1bHRfZW50ZXI6ICLmn6Xor6IiLA0KICAgICAgICAgICAgICAgIHZhdWx0X2J0bjogIueri+WNs+afpemqjCIsDQogICAgICAgICAgICAgICAgdmF1bHRfbG9hZGluZzogIuato+WcqOi\/nuaOpeaVsOaNruW6ky4uLiIsDQogICAgICAgICAgICAgICAgdmVyaWZpZWRfc3RhdHVzOiAi5Yy56YWN5oiQ5YqfIiwNCiAgICAgICAgICAgICAgICBpbnZhbGlkX3N0YXR1czogIuacquaJvuWIsCAvIOaXoOaViCIsDQogICAgICAgICAgICAgICAgc2VjdXJlX3JlY29yZDogIuacuuiKr+iusOW9lSIsDQogICAgICAgICAgICAgICAgbW9kZWxfbGFiZWw6ICLmiYvooajlnovlj7ciLA0KICAgICAgICAgICAgICAgIHNlcmlhbF9sYWJlbDogIuaJi+ihqOe8luWPtyIsDQogICAgICAgICAgICAgICAgY2FsaWJyZV9sYWJlbDogIuaJi+ihqOacuuiKryIsDQogICAgICAgICAgICAgICAgZ2VuZGVyX2xhYmVsOiAi55S35qy+IC8g5aWz5qy+IiwNCiAgICAgICAgICAgICAgICBkaWFsX2xhYmVsOiAi6KGo55uY5L+h5oGvIiwNCiAgICAgICAgICAgICAgICBjYXNlX2xhYmVsOiAi6KGo5aOzIC8g5om55qyhIiwNCiAgICAgICAgICAgICAgICBibGVzc2luZ19sYWJlbDogIuelneemj+ivrSIsDQogICAgICAgICAgICAgICAgdmFsaWRfbW92ZW1lbnQ6ICLov5vlj6Pnn7Poi7EgLyDnsr7pkqLooajlo7MiLA0KICAgICAgICAgICAgICAgIHZhbGlkX21vZGVsOiAi55S36KGo57uP5YW45qy+IiwNCiAgICAgICAgICAgICAgICBpbnZhbGlkX21vZGVsOiAi5pyq6K+G5YirIiwNCiAgICAgICAgICAgICAgICBpbnZhbGlkX3NlcmlhbDogIuaaguaXoOWMuemFjeiusOW9lSIsDQogICAgICAgICAgICAgICAgaW52YWxpZF9nZW5kZXI6ICJOL0EiLA0KICAgICAgICAgICAgICAgIGludmFsaWRfZGlhbDogIk4vQSIsDQogICAgICAgICAgICAgICAgaW52YWxpZF9jYXNlOiAiTi9BIiwNCiAgICAgICAgICAgICAgICBpbnZhbGlkX2JsZXNzaW5nOiAi6K+l57yW56CB5pqC5pyq5b2V5YWl5b2T5YmNIFpET1hJRyDmn6XpqozmlbDmja7lupPvvIzor7fmoLjlr7nlupXnm5bluo\/liJflj7fmiJbogZTns7vlrpjmlrnlrqLmnI3lpI3moLjjgIIiLA0KICAgICAgICAgICAgICAgIGNvbnRhY3Rfc3ViOiAi6IGU57O7IFpET1hJRyIsCiAgICAgICAgICAgICAgICBjb250YWN0X3RpdGxlOiAi5oqK6IWV6KGo6Zeu6aKYPGJyPuS6pOe7meWumOaWueWboumYnyIsCiAgICAgICAgICAgICAgICBjb250YWN0X2Rlc2M6ICLpgInotK3jgIHpqoznnJ\/jgIHllK7lkI7lkozmuKDpgZPlkIjkvZzpg73ku47ov5nph4zlvIDlp4vjgILnlZnkuIvlnovlj7fjgIHluo\/liJflj7fmiJblkIjkvZzpnIDmsYLvvIzmiJHku6zmjInnnJ\/lrp7kuqflk4Hkv6Hmga\/lm57lpI3vvIzkuI3nlKjkvaDlnKjlpJrkuKrlhaXlj6Pph4zmnaXlm57mib7jgIIiLAogICAgICAgICAgICAgICAgdmlkMV9zdWI6ICLnvo7lrablhYjplIsiLAogICAgICAgICAgICAgICAgdmlkMV90aXRsZTogIuWJjeeeuzxicj7orr7orqEiLAogICAgICAgICAgICAgICAgdmlkMV9kZXNjOiAi5Lul5pW06KGo5q+U5L6L44CB5aSc5YWJ5bGC5qyh5LiO6KGo55uY5rex5bqm5bu656uL56ys5LiA55y86K+G5Yir77yM6K6p5b2x5YOP5YWI5oqK5L2p5oi05rCU6LSo6K6y5riF5qWa44CCIiwKICAgICAgICAgICAgICAgIHZpZDFfY3RhMTogIui\/m+WFpSAzRCDlsZXnpLoiLAogICAgICAgICAgICAgICAgdmlkMV9jdGEyOiAi5p+l55yL6IWV6KGo57O75YiXIiwKICAgICAgICAgICAgICAgIHZpZDJfc3ViOiAi5py65qKw6Im65pyvIiwKICAgICAgICAgICAgICAgIHZpZDJfdGl0bGU6ICLnsr7lh4Y8YnI+5bel56iLIiwKICAgICAgICAgICAgICAgIHZpZDJfZGVzYzogIuS7juacuuiKr+iKguWlj+WIsOWjs+i6q+W8p+e6v++8jOS\/neeVmeWKqOaAgeeJueaViO+8jOWQjOaXtuiuqeWFs+mUruS\/oeaBr+Wni+e7iOWBnOWcqOWPr+ivu+WMuuWfn+OAgiIsCiAgICAgICAgICAgICAgICB2aWQyX2N0YTE6ICLmn6XnnIvliLbooajlt6XoiboiLAogICAgICAgICAgICAgICAgdmlkMl9jdGEyOiAi5p+l6aqM6IWV6KGoIiwKICAgICAgICAgICAgICAgIHZpZDNfc3ViOiAi5pel5bi45LyY6ZuFIiwKICAgICAgICAgICAgICAgIHZpZDNfdGl0bGU6ICLml6XluLg8YnI+6L275aWiIiwKICAgICAgICAgICAgICAgIHZpZDNfZGVzYzogIuaKiuWTgeeJjOW9seWDj+OAgeS6p+WTgeaOoue0ouWSjOWQjue7remhtemdouS4sui1t+adpe+8jOa7muWKqOe7k+adn+WQjuiHqueEtui\/m+WFpeWujOaVtOWumOe9keWGheWuueOAgiIsCiAgICAgICAgICAgICAgICB2aWQzX2N0YTE6ICLnu6fnu63mnLroiq\/liaflnLoiLAogICAgICAgICAgICAgICAgdmlkM19jdGEyOiAi5ZOB54mM5pWF5LqLIiwKICAgICAgICAgICAgICAgIGNhbGlicmUxX3N1YjogIuadkOaWmeS4juWKqOaAgSIsDQogICAgICAgICAgICAgICAgY2FsaWJyZTFfdGl0bGU6ICLlpJzlhYnjgIHooajnm5g8YnI+5LiO5py66Iqv5bGC5qyhIiwNCiAgICAgICAgICAgICAgICBjYWxpYnJlMV9kZXNjOiAi5YWo5bGP5aSc5YWJ5b2x5YOP44CB5py65qKw57uT5p6E5bGV56S65LiO5b6u6KeC57uG6IqC5YWx5ZCM5p6E5oiQ6aaW6aG15LiL5pa555qE5rKJ5rW45byP5Y+Z5LqL5bGC77yM6K6p6KGo55uY5YWJ5rO944CB5aOz6Lqr5q+U5L6L5LiO5L2p5oi05rCU6LSo5YWI5LqO5Y+C5pWw6K+06K+d44CCIiwNCiAgICAgICAgICAgICAgICBjYWxpYnJlMl9zdWI6ICLooajlo7Pnu4boioIiLA0KICAgICAgICAgICAgICAgIGNhbGlicmUyX3RpdGxlOiAi5py65qKw6KeG6KeJPGJyPuS4jeWPquWBnOeVmeWcqOWPguaVsCIsDQogICAgICAgICAgICAgICAgY2FsaWJyZTJfZGVzYzogIuaWh+Wtl+WFi+WItu+8jOW9seWDj+S4u+WvvOOAguWFqOWxj+acuuaisOe7k+aehOWRiOeOsO+8jOiuqeacuuiKr+aIkOS4uuWPmeS6i+acrOi6q+OAgiIsDQogICAgICAgICAgICAgICAgY2FsaWJyZTNfc3ViOiAi5bCP56eS6ZKIIiwNCiAgICAgICAgICAgICAgICBjYWxpYnJlM190aXRsZTogIuWwj+enkumSiDxicj7nu4boioLlh53op4YiLA0KICAgICAgICAgICAgICAgIGNhbGlicmUzX2Rlc2M6ICLmlL7mhaLoioLlpY\/vvIzlh53op4bmr4\/kuIDlpITmiZPno6jkuI7lhYnlvbHjgILlvq7op4LkuYvkuIvvvIzmnLroiq\/miJDkuLrlu7rnrZHjgIIiLA0KICAgICAgICAgICAgICAgIHN0b3J5X3N1YjogIuWTgeeJjOaVheS6iyIsDQogICAgICAgICAgICAgICAgc3RvcnlfdGl0bGU6ICLkvaDnmoTml7bpl7Q8YnI+55Sx5L2g5a6a5LmJIiwNCiAgICAgICAgICAgICAgICBzdG9yeV9kZXNjOiAiWkRPWElHIOaYr+S4k+azqOi\/m+WPo+acuuiKr+iFleihqOeahOW9k+S7o+S4reWbveWTgeeJjO+8jOimhueblueUt+Wjq+aXpeW4uOOAgeWVhuWKoeS4jui\/kOWKqOmjjuagvO+8jOW5tuaPkOS+m+mAguWQiOeyvuiHtOWcuuaZr+eahOWls+Wjq+aWueW9oumVtuefs+iFleihqOOAgiIsDQogICAgICAgICAgICAgICAgc3RvcnlfczE6ICLnlLflo6vns7vliJciLA0KICAgICAgICAgICAgICAgIHN0b3J5X3MyOiAi5py65qKw57O75YiXIiwNCiAgICAgICAgICAgICAgICBzdG9yeV9zMzogIuWls+Wjq+aWueihqCIsDQogICAgICAgICAgICAgICAgaW5ub19zdWI6ICLliLbooajlt6XoiboiLCBpbm5vX3RpdGxlOiAi57K+5bel5pm66YCgPGJyPuavq+WOmOW\/heS6iSIsDQogICAgICAgICAgICAgICAgaW5ub19kZXNjOiAi5oiR5Lus55qE57O75YiX6YeH55So5Y+v6Z2g55qE6L+b5Y+j55+z6Iux5LiO5py65qKw5py66Iqv77yM5YW86aG+56iz5a6a6LWw5pe244CB57u05oqk5L6\/5Yip5LiO5pel5bi46ICQ55So5oCn44CC5q+P5LiA5p6a6IWV6KGo6YO95rOo6YeN6KGo5aOz5omT56Oo44CB6KGo55uY5riF5pmw5bqm5LiO5L2p5oi06IiS6YCC5oSf44CCIiwNCiAgICAgICAgICAgICAgICBpbm5vX3MxOiAi55+z6Iux57K+5YeGIiwgaW5ub19zMjogIuacuuaisOmAieaLqSIsDQogICAgICAgICAgICAgICAgYXJjaF9zdWI6ICLlpJzlhYnlj4LmlbAiLA0KICAgICAgICAgICAgICAgIGFyY2hfdGl0bGU6ICLlpJzlhYnlsYI8YnI+5LiO5py65qKw5Y+C5pWwIiwNCiAgICAgICAgICAgICAgICBwcm9kdWN0X21hdGVyaWFsczogWyLov5vlj6Pnn7Poi7EgLyDnsr7pkqLooajlo7MiLCAi6L+b5Y+j6Ieq5Yqo5py65qKwIC8g5ZWG5Yqh6KGo5aOzIiwgIumVtuefs+aWueW9oiAvIOWls+Wjq+iFleihqCIsICLov5vlj6Poh6rliqjmnLrmorAgLyDok53lrp3nn7PplZzpnaIiLCAi6L+b5Y+j55+z6IuxIC8g546r55Gw6YeR6ImyIl0sDQogICAgICAgICAgICAgICAgc2VydmljZV9zdWI6ICLlrqLmiLfmnI3liqEiLA0KICAgICAgICAgICAgICAgIHNlcnZpY2VfdGl0bGU6ICLmnI3liqHml6XluLg8YnI+5L2p5oi05Zy65pmvIiwNCiAgICAgICAgICAgICAgICBzZXJ2aWNlX2Rlc2M6ICLku47nlLXmsaDmm7TmjaLjgIHpmLLmsLTmo4DmtYvliLDmnLrmorDmnLroiq\/kv53lhbvvvIxaRE9YSUcg5Li65q+P5LiA5p6a6IWV6KGo5o+Q5L6b5a6e55So55qE5ZSu5ZCO5pyN5Yqh5pSv5oyB44CCIiwNCiAgICAgICAgICAgICAgICBzZXJ2aWNlX2NhcmQxX3RpdGxlOiAi6LSo5L+d5pSv5oyBIiwNCiAgICAgICAgICAgICAgICBzZXJ2aWNlX2NhcmQxX2Rlc2M6ICLnmbvorrDohZXooajkv6Hmga\/vvIzorqnotK3kubDorrDlvZXjgIHluo\/liJflj7fkuI7mnI3liqHorrDlvZXkv53mjIHlj6\/ov73muq\/jgIIiLA0KICAgICAgICAgICAgICAgIHNlcnZpY2VfY2FyZDJfdGl0bGU6ICLnlLXmsaDkuI7kv53lhbsiLA0KICAgICAgICAgICAgICAgIHNlcnZpY2VfY2FyZDJfZGVzYzogIuWuieaOkueUteaxoOabtOaNouOAgemYsuawtOajgOa1i+OAgeihqOW4pumAgumFjeS4juacuuaisOacuuiKr+e7tOaKpOOAgiIsDQogICAgICAgICAgICAgICAgc2VydmljZV9jYXJkM190aXRsZTogIuaJueWPkeWSqOivoiIsDQogICAgICAgICAgICAgICAgc2VydmljZV9jYXJkM19kZXNjOiAi6I635Y+W57O75YiX6LWE5paZ44CB5Z6L5Y+35bu66K6u5LiO6Zu25ZSuL+WIhumUgOa4oOmBk+eahOS6p+WTgeaUr+aMgeOAgiIsDQogICAgICAgICAgICAgICAgb3duZXJzaGlwX3N1YjogIuaMgeacieaXheeoiyIsDQogICAgICAgICAgICAgICAgb3duZXJzaGlwX3RpdGxlOiAi5LuO6YCJ5oupPGJyPuWIsOacjeWKoSIsDQogICAgICAgICAgICAgICAgb3duZXJzaGlwX2Rlc2M6ICLlrozmlbTnmoTohZXooajlrpjnvZHlupTorqnkv6Hku7vlj6\/op4HvvJrkuqflk4HpgInmi6njgIHlrpjmlrnotK3kubDjgIHluo\/liJflj7fnmbvorrDjgIHllK7lkI7mnI3liqHkuI7nnJ\/kvKrmn6Xpqozpg73lupTnm7jkupLov57mjqXjgIIiLA0KICAgICAgICAgICAgICAgIG93bmVyc2hpcF9jYXJkMV90aXRsZTogIumAieaLqSIsDQogICAgICAgICAgICAgICAgb3duZXJzaGlwX2NhcmQxX2Rlc2M6ICLmjInmnLroiq\/jgIHooajlo7Plt6XoibrkuI7ml6XluLjkvanmiLTpo47moLzvvIzlr7nmr5TnlLflo6vnn7Poi7HjgIHmnLrmorDkuI7lpbPlo6vmlrnlvaLohZXooajjgIIiLA0KICAgICAgICAgICAgICAgIG93bmVyc2hpcF9jYXJkMl90aXRsZTogIuWumOaWuei0reS5sCIsDQogICAgICAgICAgICAgICAgb3duZXJzaGlwX2NhcmQyX2Rlc2M6ICLlvJXlr7zlrqLmiLfov5vlhaXlrpjmlrnogZTns7vjgIHlnKjnur\/lkqjor6LkuI7lj6\/ov73muq\/mibnlj5Hor6Lku7fjgIIiLA0KICAgICAgICAgICAgICAgIG93bmVyc2hpcF9jYXJkM190aXRsZTogIueZu+iusCIsDQogICAgICAgICAgICAgICAgb3duZXJzaGlwX2NhcmQzX2Rlc2M6ICLkv53nlZnluo\/liJflj7fjgIHotK3kubDml6XmnJ\/kuI7mnLroiq\/orrDlvZXvvIzkvr\/kuo7otKjkv53kuI7lkI7nu63mnI3liqHjgIIiLA0KICAgICAgICAgICAgICAgIG93bmVyc2hpcF9jYXJkNF90aXRsZTogIue7tOaKpCIsDQogICAgICAgICAgICAgICAgb3duZXJzaGlwX2NhcmQ0X2Rlc2M6ICLmj5DkvpvnlLXmsaDjgIHpmLLmsLTjgIHooajluKbkuI7mnLrmorDmnLroiq\/nu7TmiqTot6\/lvoTjgIIiLA0KICAgICAgICAgICAgICAgIG1hdGVyaWFsc19zdWI6ICLkuqflk4Hlt6XoiboiLA0KICAgICAgICAgICAgICAgIG1hdGVyaWFsc190aXRsZTogIuihqOWjs+OAgeihqOebmDxicj7kuI7plbbnn7Plt6XoiboiLA0KICAgICAgICAgICAgICAgIG1hdGVyaWFsc19kZXNjOiAiWkRPWElHIOWwhueyvumSouihqOWjs+OAgea4heaZsOihqOebmOS4juWls+Wjq+aWueW9ouiFleihqOeahOijhemlsOmVtuefs+e7k+WQiO+8jOW9ouaIkOmAguWQiOaXpeW4uOmbtuWUrueahOezu+WIl+e7hOWQiOOAgiIsDQogICAgICAgICAgICAgICAgbWF0ZXJpYWxzX2NhcmQxX3RpdGxlOiAi57K+6ZKi6KGo5aOzIiwNCiAgICAgICAgICAgICAgICBtYXRlcmlhbHNfY2FyZDFfZGVzYzogIuWPr+mdoOihqOWjs+e7k+aehOaQremFjeaKm+WFieS4juaLieS4neW3peiJuu+8jOmAgumFjeWVhuWKoeOAgeS8kemXsuS4juato+ijheiFleihqOOAgiIsDQogICAgICAgICAgICAgICAgbWF0ZXJpYWxzX2NhcmQyX3RpdGxlOiAi6L+b5Y+j5py66IqvIiwNCiAgICAgICAgICAgICAgICBtYXRlcmlhbHNfY2FyZDJfZGVzYzogIueUhOmAieefs+iLseS4juacuuaisOacuuiKr+aWueahiO+8jOS4uuS4jeWQjOS7t+S9jeaPkOS+m+eos+WumuaAp+iDveOAgiIsDQogICAgICAgICAgICAgICAgbWF0ZXJpYWxzX2NhcmQzX3RpdGxlOiAi6ZW255+z5pa55b2iIiwNCiAgICAgICAgICAgICAgICBtYXRlcmlhbHNfY2FyZDNfZGVzYzogIuWls+Wjq+aWueW9ouiFleihqOmHh+eUqOeyvuiHtOmVtuefs+e7huiKgu+8jOWRiOeOsOabtOaYjuS6rueahOePoOWuneaEn+WkluinguOAgiIsDQogICAgICAgICAgICAgICAgYmVzcG9rZV9zdWI6ICJPRU0gLyBPRE0g5pSv5oyBIiwNCiAgICAgICAgICAgICAgICBiZXNwb2tlX3RpdGxlOiAi54G15rS76IWV6KGoPGJyPuW8gOWPkeaUr+aMgSIsDQogICAgICAgICAgICAgICAgYmVzcG9rZV9kZXNjOiAi6Z2i5ZCR5ZCI5L2c5LyZ5Ly05LiO5YiG6ZSA5ZWG77yMWkRPWElHIOWPr+aUr+aMgeihqOWjs+mAieaLqeOAgeihqOebmOiuvuiuoeOAgeihqOW4pumAiemhueS4jueUt+Wjqy\/lpbPlo6vohZXooajmnLroiq\/phY3nva7jgIIiLA0KICAgICAgICAgICAgICAgIGJlc3Bva2VfczE6ICLooajluKYiLA0KICAgICAgICAgICAgICAgIGJlc3Bva2VfczI6ICLmnLroiq8iLA0KICAgICAgICAgICAgICAgIGJlc3Bva2VfczM6ICLmoLflk4EiLA0KICAgICAgICAgICAgICAgIGhlcml0YWdlX3N1YjogIuWTgeeJjOmHjOeoi+eikSIsDQogICAgICAgICAgICAgICAgaGVyaXRhZ2VfdGl0bGU6ICJaRE9YSUc8YnI+5ZOB54mM5peF56iLIiwNCiAgICAgICAgICAgICAgICBoZXJpdGFnZV9jYXJkMV90aXRsZTogIummluS4quefs+iLseezu+WIlyIsDQogICAgICAgICAgICAgICAgaGVyaXRhZ2VfY2FyZDFfZGVzYzogIlpET1hJRyDkuI7lj6\/pnaDmnLroiq\/kvJnkvLTmjqjlh7rpppbkuKrnn7Poi7HohZXooajns7vliJfjgIIiLA0KICAgICAgICAgICAgICAgIGhlcml0YWdlX2NhcmQyX3RpdGxlOiAi6L+b5Y+j5py66IqvIiwNCiAgICAgICAgICAgICAgICBoZXJpdGFnZV9jYXJkMl9kZXNjOiAi55+z6Iux5LiO6Ieq5Yqo5py65qKw57O75YiX55qE5py66Iqv5p2l5rqQ5oyB57ut5ouT5bGV77yM5o+Q5Y2H56iz5a6a5oCn5LiO5oCn6IO96KaG55uW44CCIiwNCiAgICAgICAgICAgICAgICBoZXJpdGFnZV9jYXJkM190aXRsZTogIuWls+Wjq+aWueihqCIsDQogICAgICAgICAgICAgICAgaGVyaXRhZ2VfY2FyZDNfZGVzYzogIuaOqOWHuuWls+Wjq+mVtuefs+aWueW9ouiFleihqO+8jOS6p+WTgee6v+S7jueUt+Wjq+ezu+WIl+i\/m+S4gOatpeaLk+WxleOAgiIsDQogICAgICAgICAgICAgICAgaGVyaXRhZ2VfY2FyZDRfdGl0bGU6ICLpm7bllK7mi5PlsZUiLA0KICAgICAgICAgICAgICAgIGhlcml0YWdlX2NhcmQ0X2Rlc2M6ICLns7vliJfov5vlhaXlhajnkIPpm7bllK7kuI7mibnlj5HmuKDpgZPjgIIiLA0KICAgICAgICAgICAgICAgIGpvdXJuYWxfc3ViOiAi5ZOB54mM5pel5b+XIiwNCiAgICAgICAgICAgICAgICBqb3VybmFsX3RpdGxlOiAi6LWw6L+bIFpET1hJRyIsDQogICAgICAgICAgICAgICAgam91cm5hbF9kZXNjOiAi5p2l6IeqIFpET1hJRyDlm6LpmJ\/nmoTns7vliJfmm7TmlrDjgIHohZXooajmiqTnkIblu7rorq7kuI7nlJ\/mtLvmlrnlvI\/lhoXlrrnjgIIiLA0KICAgICAgICAgICAgICAgIGpvdXJuYWxfdGFnMTogIuiFleihqOaKpOeQhiIsDQogICAgICAgICAgICAgICAgam91cm5hbF9jYXJkMTogIuWmguS9leS\/neWFu+S9oOeahCBaRE9YSUcg55+z6Iux5oiW5py65qKw6IWV6KGoIiwNCiAgICAgICAgICAgICAgICBqb3VybmFsX3RhZzI6ICLlpJzlhYnlj4LmlbAiLA0KICAgICAgICAgICAgICAgIGpvdXJuYWxfY2FyZDI6ICLnlLflo6vkuI7lpbPlo6vns7vliJfvvJrmib7liLDpgILlkIjkvaDnmoQgWkRPWElHIOWei+WPtyIsDQogICAgICAgICAgICAgICAgam91cm5hbF90YWczOiAi5ZOB54mM5bmV5ZCOIiwNCiAgICAgICAgICAgICAgICBqb3VybmFsX2NhcmQzOiAiWkRPWElHIOWmguS9leeUhOmAiemAguWQiOaXpeW4uOaAp+iDveeahOWPr+mdoOacuuiKryIsDQogICAgICAgICAgICAgICAgZmFxX3N1YjogIuS\/neWFu+S4jumXruetlCIsDQogICAgICAgICAgICAgICAgZmFxX3RpdGxlOiAi5oyB5pyJ6ICFPGJyPuW4uOingemXrumimCIsDQogICAgICAgICAgICAgICAgZmFxX3ExOiAi5aaC5L2V5p+l6aqMIFpET1hJRyDohZXooajvvJ8iLA0KICAgICAgICAgICAgICAgIGZhcV9hMTogIuWcqDxhIGhyZWY9XCIjdmF1bHRcIiBjbGFzcz1cInRleHQtWyMwZDZiNTZdIHVuZGVybGluZSB1bmRlcmxpbmUtb2Zmc2V0LTRcIj7pmLLkvKrmn6XpqozmqKHlnZc8L2E+6L6T5YWl5bqV55uW5bqP5YiX5Y+35Y2z5Y+v6aqM6K+B6IWV6KGo6K6w5b2V44CCIiwNCiAgICAgICAgICAgICAgICBmYXFfcTI6ICLmnLrmorDohZXooajlpJrkuYXpnIDopoHkv53lhbvvvJ8iLA0KICAgICAgICAgICAgICAgIGZhcV9hMjogIuS\/neWFu+WRqOacn+WPluWGs+S6juS9qeaItOmikeeOh+S4juS9v+eUqOeOr+Wig+OAguW7uuiuruWFiOWBmuajgOa1i++8jOWGjeWGs+WumuaYr+WQpumcgOimgeWujOaVtOS\/neWFu+OAgiIsDQogICAgICAgICAgICAgICAgZmFxX3EzOiAi5aaC5L2V5LqG6Kej5pu05aSa57O75YiX5L+h5oGv77yfIiwNCiAgICAgICAgICAgICAgICBmYXFfYTM6ICLlj6\/ogZTns7sgWkRPWElHIOWboumYn++8jOiOt+WPlumbtuWUruOAgeaJueWPkeS4juWUruWQjuacjeWKoeaMh+W8leOAgiIsDQogICAgICAgICAgICAgICAgY29udGFjdF9jYXJkMV9sYWJlbDogIumCrueusSIsDQogICAgICAgICAgICAgICAgY29udGFjdF9jYXJkMl9sYWJlbDogIumqjOecnyIsDQogICAgICAgICAgICAgICAgY29udGFjdF9jYXJkMl90ZXh0OiAi55yf5Lyq5p+l6aqMIiwNCiAgICAgICAgICAgICAgICBjb250YWN0X2NhcmQzX2xhYmVsOiAi5ZCI5L2cIiwKICAgICAgICAgICAgICAgIGNvbnRhY3RfY2FyZDNfdGV4dDogIua4oOmBk+WQiOS9nCIsCiAgICAgICAgICAgICAgICBjb250YWN0X2NhcmQ0X2xhYmVsOiAi5ZSu5ZCOIiwKICAgICAgICAgICAgICAgIGNvbnRhY3RfY2FyZDRfdGV4dDogIuWUruWQjuaUr+aMgSIsCiAgICAgICAgICAgICAgICBmb290ZXJfYnJhbmRfZGVzYzogIuS4k+azqOi\/m+WPo+acuuiKr+S4juaXpeW4uOS9qeaItOS9k+mqjOeahOW9k+S7o+iFleihqOWTgeeJjO+8jOimhuebluefs+iLseOAgeacuuaisOS4juWls+Wjq+aWueW9oumVtuefs+ezu+WIl+OAgiIsDQogICAgICAgICAgICAgICAgZm9vdGVyX2NvbGxlY3Rpb25zX3RpdGxlOiAi5aSc5YWJ5Y+C5pWwIiwNCiAgICAgICAgICAgICAgICBmb290ZXJfc3VwcG9ydF90aXRsZTogIuaUr+aMgSIsDQogICAgICAgICAgICAgICAgZm9vdGVyX2NvbnRhY3RfdGl0bGU6ICLogZTns7siLA0KICAgICAgICAgICAgICAgIGZvb3Rlcl9saW5rczogWyLnlLflo6vohZXooagiLCAi5aWz5aOr57O75YiXIiwgIuS6p+WTgeaho+ahiCIsICLmnI3liqHkuI7kv53lhbsiLCAi5bi46KeB6Zeu6aKYIiwgIuecn+S8quafpemqjCIsICLogZTns7vmiJHku6wiXSwNCiAgICAgICAgICAgICAgICBmb290X3I6ICLCqSAyMDI2IFpET1hJRyBXQVRDSEVTLiDkv53nlZnmiYDmnInmnYPliKnjgIIiDQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGNvbnN0IGFwcGx5VmVyaWZ5UmVzdWx0VGV4dCA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICBpZiAoIWxhc3RWZXJpZnlTdGF0ZSkgcmV0dXJuOw0KICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBpMThuW2N1cnJlbnRMYW5nXTsNCiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbCA9IChyZWNvcmQsIGtleSkgPT4gcmVjb3JkPy5bYCR7a2V5fSR7Y3VycmVudExhbmcgPT09ICdjbicgPyAnQ24nIDogJ0VuJ31gXSB8fCAnJzsNCg0KICAgICAgICAgICAgICAgIGlmIChsYXN0VmVyaWZ5U3RhdGUgPT09ICd2YWxpZCcpIHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gY3VycmVudFZlcmlmeVJlY29yZCB8fCB7fTsNCiAgICAgICAgICAgICAgICAgICAgcmVzU3RhdHVzVGV4dC5pbm5lclRleHQgPSB0LnZlcmlmaWVkX3N0YXR1czsNCiAgICAgICAgICAgICAgICAgICAgcmVzU3RhdHVzVGV4dC5zdHlsZS5jb2xvciA9ICcjMDBmZmNjJzsNCiAgICAgICAgICAgICAgICAgICAgcmVzTW9kZWwuaW5uZXJUZXh0ID0gbG9jYWwocmVjb3JkLCAnbW9kZWwnKSB8fCB0LnZhbGlkX21vZGVsOw0KICAgICAgICAgICAgICAgICAgICByZXNNb2RlbC5zdHlsZS5jb2xvciA9ICcjZmZmJzsNCiAgICAgICAgICAgICAgICAgICAgcmVzTW92ZW1lbnQuaW5uZXJUZXh0ID0gbG9jYWwocmVjb3JkLCAnbW92ZW1lbnQnKSB8fCB0LnZhbGlkX21vdmVtZW50Ow0KICAgICAgICAgICAgICAgICAgICBpZiAocmVzU2VyaWFsKSByZXNTZXJpYWwuaW5uZXJUZXh0ID0gcmVjb3JkLnNlcmlhbCB8fCByZWNvcmQuY29kZSB8fCAnWkQtMDAxJzsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc0dlbmRlcikgcmVzR2VuZGVyLmlubmVyVGV4dCA9IGxvY2FsKHJlY29yZCwgJ2dlbmRlcicpIHx8ICcnOw0KICAgICAgICAgICAgICAgICAgICBpZiAocmVzRGlhbCkgcmVzRGlhbC5pbm5lclRleHQgPSBsb2NhbChyZWNvcmQsICdkaWFsJykgfHwgJyc7DQogICAgICAgICAgICAgICAgICAgIGlmIChyZXNDYXNlKSByZXNDYXNlLmlubmVyVGV4dCA9IGxvY2FsKHJlY29yZCwgJ2Nhc2VJbmZvJykgfHwgJyc7DQogICAgICAgICAgICAgICAgICAgIGlmIChyZXNCbGVzc2luZykgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2RlbE5hbWUgPSBsb2NhbChyZWNvcmQsICdtb2RlbCcpIHx8IHQudmFsaWRfbW9kZWw7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcmlhbCA9IHJlY29yZC5zZXJpYWwgfHwgcmVjb3JkLmNvZGUgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsZXNzaW5nID0gbG9jYWwocmVjb3JkLCAnYmxlc3NpbmcnKSB8fCAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzQmxlc3NpbmcuaW5uZXJUZXh0ID0gY3VycmVudExhbmcgPT09ICdjbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYOWwiuaVrOeahCBaRE9YSUcg55So5oi377yM5oKo5p+l6K+i55qEICR7bW9kZWxOYW1lfSDlt7LlrozmiJDlrpjmlrnorrDlvZXljLnphY3vvIzohZXooajnvJblj7fkuLogJHtzZXJpYWx944CC5oS\/6L+Z5p6a6IWV6KGo6Zmq5Ly05oKo6K6w5b2V5q+P5LiA5qyh5YeG5pe25oq16L6+44CB5q+P5LiA5qyh6YeN6KaB6YCJ5oup44CCJHtibGVzc2luZ31gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGBEZWFyIFpET1hJRyBvd25lciwgeW91ciAke21vZGVsTmFtZX0gaGFzIG1hdGNoZWQgdGhlIG9mZmljaWFsIHZlcmlmaWNhdGlvbiByZWNvcmQuIFdhdGNoIG51bWJlcjogJHtzZXJpYWx9LiBNYXkgdGhpcyB3YXRjaCBhY2NvbXBhbnkgZXZlcnkgcHJlY2lzZSBhcnJpdmFsIGFuZCBldmVyeSBpbXBvcnRhbnQgY2hvaWNlLiAke2JsZXNzaW5nfWA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgcmVzU3RhdHVzVGV4dC5pbm5lclRleHQgPSB0LmludmFsaWRfc3RhdHVzOw0KICAgICAgICAgICAgICAgICAgICByZXNTdGF0dXNUZXh0LnN0eWxlLmNvbG9yID0gJyNmZjQ0NDQnOw0KICAgICAgICAgICAgICAgICAgICByZXNNb2RlbC5pbm5lclRleHQgPSB0LmludmFsaWRfbW9kZWw7DQogICAgICAgICAgICAgICAgICAgIHJlc01vZGVsLnN0eWxlLmNvbG9yID0gJyNmZjQ0NDQnOw0KICAgICAgICAgICAgICAgICAgICByZXNNb3ZlbWVudC5pbm5lclRleHQgPSAnTi9BJzsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc1NlcmlhbCkgcmVzU2VyaWFsLmlubmVyVGV4dCA9IHQuaW52YWxpZF9zZXJpYWw7DQogICAgICAgICAgICAgICAgICAgIGlmIChyZXNHZW5kZXIpIHJlc0dlbmRlci5pbm5lclRleHQgPSB0LmludmFsaWRfZ2VuZGVyOw0KICAgICAgICAgICAgICAgICAgICBpZiAocmVzRGlhbCkgcmVzRGlhbC5pbm5lclRleHQgPSB0LmludmFsaWRfZGlhbDsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc0Nhc2UpIHJlc0Nhc2UuaW5uZXJUZXh0ID0gdC5pbnZhbGlkX2Nhc2U7DQogICAgICAgICAgICAgICAgICAgIGlmIChyZXNCbGVzc2luZykgcmVzQmxlc3NpbmcuaW5uZXJUZXh0ID0gdC5pbnZhbGlkX2JsZXNzaW5nOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIGNvbnN0IHJlc2V0U2VyaWFsUHJvbXB0ID0gKCkgPT4gew0KICAgICAgICAgICAgICAgIGlmICghc25JbnB1dCkgcmV0dXJuOw0KICAgICAgICAgICAgICAgIHNuSW5wdXQucGxhY2Vob2xkZXIgPSBpMThuW2N1cnJlbnRMYW5nXS52YXVsdF9waDsNCiAgICAgICAgICAgICAgICBzbklucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ3BsYWNlaG9sZGVyLXJlZC00MDAnKTsNCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIGNvbnN0IGRvVmVyaWZ5ID0gKCkgPT4gew0KICAgICAgICAgICAgICAgIGlmICghdmVyaWZ5QnRuIHx8ICFzbklucHV0IHx8ICFyZXNDYXJkKSByZXR1cm47DQogICAgICAgICAgICAgICAgY29uc3Qgc24gPSBzbklucHV0LnZhbHVlLnRyaW0oKS50b1VwcGVyQ2FzZSgpOw0KICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTbiA9IHNuLnJlcGxhY2UoL1tccy1dL2csICcnKTsNCiAgICAgICAgICAgICAgICBpZighc24pIHsgDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IChjdXJyZW50TGFuZyA9PT0gJ2NuJyA\/ICfor7fovpPlhaXluo\/liJflj7cnIDogJ1BsZWFzZSBlbnRlciBhIHNlcmlhbCBudW1iZXInKTsNCiAgICAgICAgICAgICAgICAgICAgc25JbnB1dC5mb2N1cygpOw0KICAgICAgICAgICAgICAgICAgICBzbklucHV0LnBsYWNlaG9sZGVyID0gbXNnOw0KICAgICAgICAgICAgICAgICAgICBzbklucHV0LmNsYXNzTGlzdC5hZGQoJ3BsYWNlaG9sZGVyLXJlZC00MDAnKTsNCiAgICAgICAgICAgICAgICAgICAgc25JbnB1dC5zdHlsZS5hbmltYXRpb24gPSAnbm9uZSc7DQogICAgICAgICAgICAgICAgICAgIHZvaWQgc25JbnB1dC5vZmZzZXRIZWlnaHQ7DQogICAgICAgICAgICAgICAgICAgIHNuSW5wdXQuc3R5bGUuYW5pbWF0aW9uID0gJ3NoYWtlSW5wdXQgMC4zNXMgZWFzZSc7DQogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBzbklucHV0LnN0eWxlLmFuaW1hdGlvbiA9ICcnOyB9LCA0MDApOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm47IA0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBpMThuW2N1cnJlbnRMYW5nXTsNCiAgICAgICAgICAgICAgICBjb25zdCB2ZXJpZnlSZWNvcmRzID0gew0KICAgICAgICAgICAgICAgICAgICBaRDAwMTogeyBjb2RlOiAnWkQtMDAxJywgc2VyaWFsOiAnWkQtMDAxLTIwMjYtUVotQTAxJywgbW9kZWxDbjogJ+eUt+ihqOe7j+WFuCBaRDAwMScsIG1vZGVsRW46ICJNZW4ncyBDbGFzc2ljIFpEMDAxIiwgbW92ZW1lbnRDbjogJ+i\/m+WPo+efs+iLseacuuiKryAvIOeyvumSouihqOWjsycsIG1vdmVtZW50RW46ICdJbXBvcnRlZCBxdWFydHogbW92ZW1lbnQgLyBTdGFpbmxlc3Mgc3RlZWwgY2FzZScsIGdlbmRlckNuOiAn55S35aOr5pel5bi457O75YiXJywgZ2VuZGVyRW46ICJNZW4ncyBkYWlseSBjb2xsZWN0aW9uIiwgZGlhbENuOiAn57u\/6Imy5aSq6Ziz57q56KGo55uY77yM5aSc5YWJ5Yi75bqm77yM5LiJ6ZKI5pel5Y6G5pi+56S6JywgZGlhbEVuOiAnR3JlZW4gc3VucmF5IGRpYWwsIGx1bWlub3VzIGluZGV4ZXMsIHRocmVlLWhhbmQgZGF0ZSBkaXNwbGF5JywgY2FzZUluZm9DbjogJzMxNkwg57K+6ZKi6KGo5aOz77yM5om55qyhIDIwMjYtUVotQTAxJywgY2FzZUluZm9FbjogJzMxNkwgc3RhaW5sZXNzIHN0ZWVsLCBiYXRjaCAyMDI2LVFaLUEwMScsIGJsZXNzaW5nQ246ICfkvaDnmoTml7bpl7TvvIzmnKzmnaXlsLHor6XnlLHkvaDlrprkuYnjgIInLCBibGVzc2luZ0VuOiAnWW91ciB0aW1lIHNob3VsZCBiZSBkZWZpbmVkIGJ5IHlvdS4nIH0sDQogICAgICAgICAgICAgICAgICAgIFpEMDAzOiB7IGNvZGU6ICdaRC0wMDMnLCBzZXJpYWw6ICdaRC0wMDMtMjAyNi1BTS1CMDInLCBtb2RlbENuOiAnWkQwMDMg6buR55uY6Ieq5Yqo5py65qKwJywgbW9kZWxFbjogJ1pEMDAzIEJsYWNrIEF1dG9tYXRpYycsIG1vdmVtZW50Q246ICfov5vlj6Poh6rliqjmnLrmorDmnLroiq8gLyDnsr7pkqLooajlo7MnLCBtb3ZlbWVudEVuOiAnSW1wb3J0ZWQgYXV0b21hdGljIG1vdmVtZW50IC8gU3RhaW5sZXNzIHN0ZWVsIGNhc2UnLCBnZW5kZXJDbjogJ+eUt+Wjq+acuuaisOezu+WIlycsIGdlbmRlckVuOiAiTWVuJ3MgbWVjaGFuaWNhbCBjb2xsZWN0aW9uIiwgZGlhbENuOiAn6buR6Imy5aSc5YWJ55uY6Z2i77yM5aSa5bGC5bCP55uY77yM5ZWG5Yqh6L+Q5Yqo6aOO5qC8JywgZGlhbEVuOiAnQmxhY2sgbHVtaW5vdXMgZGlhbCwgbGF5ZXJlZCBzdWItZGlhbHMsIGJ1c2luZXNzLXNwb3J0IHN0eWxpbmcnLCBjYXNlSW5mb0NuOiAn57K+6ZKi5py65qKw6KGo5aOz77yM5om55qyhIDIwMjYtQU0tQjAyJywgY2FzZUluZm9FbjogJ1N0YWlubGVzcyBzdGVlbCBjYXNlLCBiYXRjaCAyMDI2LUFNLUIwMicsIGJsZXNzaW5nQ246ICfkv53mjIHoh6rlt7HnmoToioLlpY\/jgIInLCBibGVzc2luZ0VuOiAnS2VlcCB5b3VyIG93biBwYWNlLicgfSwNCiAgICAgICAgICAgICAgICAgICAgWkQwMDc6IHsgY29kZTogJ1pELTAwNycsIHNlcmlhbDogJ1pELTAwNy0yMDI2LUNILUMwNycsIG1vZGVsQ246ICdaRDAwNyDok53nm5jorqHml7bohZXooagnLCBtb2RlbEVuOiAnWkQwMDcgQmx1ZSBDaHJvbm9ncmFwaCcsIG1vdmVtZW50Q246ICfov5vlj6Pnn7Poi7HorqHml7bmnLroiq8gLyDnsr7pkqLooajlo7MnLCBtb3ZlbWVudEVuOiAnSW1wb3J0ZWQgcXVhcnR6IGNocm9ub2dyYXBoIC8gU3RhaW5sZXNzIHN0ZWVsIGNhc2UnLCBnZW5kZXJDbjogJ+eUt+Wjq+iuoeaXtuezu+WIlycsIGdlbmRlckVuOiAiTWVuJ3MgY2hyb25vZ3JhcGggY29sbGVjdGlvbiIsIGRpYWxDbjogJ+WGsOiTneWkqumYs+e6ueiuoeaXtuebmO+8jOaYn+acn+aXpeWOhuWwj+ebmO+8jOWknOWFieWIu+W6picsIGRpYWxFbjogJ0ljZS1ibHVlIHN1bnJheSBjaHJvbm9ncmFwaCBkaWFsLCB3ZWVrZGF5L2RhdGUgc3ViLWRpYWxzLCBsdW1pbm91cyBtYXJrZXJzJywgY2FzZUluZm9DbjogJzMxNkwg57K+6ZKi6K6h5pe26KGo5aOz77yM5om55qyhIDIwMjYtQ0gtQzA3JywgY2FzZUluZm9FbjogJzMxNkwgc3RhaW5sZXNzIGNocm9ub2dyYXBoIGNhc2UsIGJhdGNoIDIwMjYtQ0gtQzA3JywgYmxlc3NpbmdDbjogJ1lvdXIgVGltZS4gWW91ciBEZWZpbml0aW9uLicsIGJsZXNzaW5nRW46ICdZb3VyIFRpbWUuIFlvdXIgRGVmaW5pdGlvbi4nIH0sDQogICAgICAgICAgICAgICAgICAgIFpEMDA4OiB7IGNvZGU6ICdaRC0wMDgnLCBzZXJpYWw6ICdaRC0wMDgtMjAyNi1BTS1EMDgnLCBtb2RlbENuOiAnWkQwMDgg5py65qKw5py66Iqv6IWV6KGoJywgbW9kZWxFbjogJ1pEMDA4IE1lY2hhbmljYWwgTW92ZW1lbnQnLCBtb3ZlbWVudENuOiAn6L+b5Y+j6Ieq5Yqo5py65qKw5py66IqvIC8g6YCP6KeG57uT5p6EJywgbW92ZW1lbnRFbjogJ0ltcG9ydGVkIGF1dG9tYXRpYyBtb3ZlbWVudCAvIE9wZW4gbW92ZW1lbnQgdmlldycsIGdlbmRlckNuOiAn55S35aOr5py65qKw57O75YiXJywgZ2VuZGVyRW46ICJNZW4ncyBtZWNoYW5pY2FsIGNvbGxlY3Rpb24iLCBkaWFsQ246ICfpu5HoibLmnLrmorDnu5PmnoTnm5jpnaLvvIzlvIDmlL7lsYLmrKHop4blm77vvIzlpJzlhYnmjIfpkognLCBkaWFsRW46ICdCbGFjayBtZWNoYW5pY2FsIHN0cnVjdHVyZSBkaWFsLCBvcGVuLWxheWVyIHZpZXcsIGx1bWlub3VzIGhhbmRzJywgY2FzZUluZm9DbjogJ+eyvumSouacuuaisOihqOWjs++8jOaJueasoSAyMDI2LUFNLUQwOCcsIGNhc2VJbmZvRW46ICdTdGFpbmxlc3MgbWVjaGFuaWNhbCBjYXNlLCBiYXRjaCAyMDI2LUFNLUQwOCcsIGJsZXNzaW5nQ246ICfliqjlipvlnKjml7bpl7TlhoXpg6jov5DovazjgIInLCBibGVzc2luZ0VuOiAnUG93ZXIgbW92ZXMgd2l0aGluLicgfSwNCiAgICAgICAgICAgICAgICAgICAgTEFESUVTQkxVRTogeyBjb2RlOiAnTEFESUVTLUJMVUUnLCBzZXJpYWw6ICdaRC1MQi0yMDI2LVNRLUwwMScsIG1vZGVsQ246ICflpbPlo6vok53oibLmlrnlvaLohZXooagnLCBtb2RlbEVuOiAnTGFkaWVzIEJsdWUgU3F1YXJlIFdhdGNoJywgbW92ZW1lbnRDbjogJ+i\/m+WPo+efs+iLseacuuiKryAvIOmVtuefs+aWueW9ouihqOWjsycsIG1vdmVtZW50RW46ICdJbXBvcnRlZCBxdWFydHogbW92ZW1lbnQgLyBTdG9uZS1zZXQgc3F1YXJlIGNhc2UnLCBnZW5kZXJDbjogJ+Wls+Wjq+mVtuefs+aWueihqOezu+WIlycsIGdlbmRlckVuOiAiTGFkaWVzJyBzdG9uZS1zZXQgc3F1YXJlIGNvbGxlY3Rpb24iLCBkaWFsQ246ICfok53oibLmlrnlvaLooajnm5jvvIzplbbnn7PooajlnIjvvIznj6Dlrp3mhJ\/mr5TkvosnLCBkaWFsRW46ICdCbHVlIHNxdWFyZSBkaWFsLCBzdG9uZS1zZXQgYmV6ZWwsIGpld2VscnktaW5zcGlyZWQgcHJvcG9ydGlvbnMnLCBjYXNlSW5mb0NuOiAn6ZW255+z5pa55b2i6KGo5aOz77yM5om55qyhIDIwMjYtU1EtTDAxJywgY2FzZUluZm9FbjogJ1N0b25lLXNldCBzcXVhcmUgY2FzZSwgYmF0Y2ggMjAyNi1TUS1MMDEnLCBibGVzc2luZ0NuOiAn5omL6IWV5LiK55qE5LiA5p2f5a6J6Z2Z5YWJ6IqS44CCJywgYmxlc3NpbmdFbjogJ0EgcXVpZXQgbGlnaHQgb24gdGhlIHdyaXN0LicgfSwNCiAgICAgICAgICAgICAgICAgICAgTEFESUVTUElOSzogeyBjb2RlOiAnTEFESUVTLVBJTksnLCBzZXJpYWw6ICdaRC1MUC0yMDI2LVNRLUwwMicsIG1vZGVsQ246ICflpbPlo6vnsonoibLmlrnlvaLohZXooagnLCBtb2RlbEVuOiAnTGFkaWVzIFBpbmsgU3F1YXJlIFdhdGNoJywgbW92ZW1lbnRDbjogJ+i\/m+WPo+efs+iLseacuuiKryAvIOmVtuefs+aWueW9ouihqOWjsycsIG1vdmVtZW50RW46ICdJbXBvcnRlZCBxdWFydHogbW92ZW1lbnQgLyBTdG9uZS1zZXQgc3F1YXJlIGNhc2UnLCBnZW5kZXJDbjogJ+Wls+Wjq+mVtuefs+aWueihqOezu+WIlycsIGdlbmRlckVuOiAiTGFkaWVzJyBzdG9uZS1zZXQgc3F1YXJlIGNvbGxlY3Rpb24iLCBkaWFsQ246ICfnsonoibLmlrnlvaLooajnm5jvvIzplbbnn7PooajlnIjvvIzmn5Tlkoznj6Dlrp3mr5TkvosnLCBkaWFsRW46ICdQaW5rIHNxdWFyZSBkaWFsLCBzdG9uZS1zZXQgYmV6ZWwsIHNvZnQgamV3ZWxyeSBwcm9wb3J0aW9ucycsIGNhc2VJbmZvQ246ICfplbbnn7PmlrnlvaLooajlo7PvvIzmibnmrKEgMjAyNi1TUS1MMDInLCBjYXNlSW5mb0VuOiAnU3RvbmUtc2V0IHNxdWFyZSBjYXNlLCBiYXRjaCAyMDI2LVNRLUwwMicsIGJsZXNzaW5nQ246ICfkvJjpm4XkuI7lnZrlrprpg73lnKjmiYvohZXkuIrjgIInLCBibGVzc2luZ0VuOiAnR3JhY2UgYW5kIHJlc29sdmUgb24gdGhlIHdyaXN0LicgfSwNCiAgICAgICAgICAgICAgICAgICAgTEFESUVTR1JFRU46IHsgY29kZTogJ0xBRElFUy1HUkVFTicsIHNlcmlhbDogJ1pELUxHLTIwMjYtU1EtTDAzJywgbW9kZWxDbjogJ+Wls+Wjq+e7v+iJsuaWueW9ouiFleihqCcsIG1vZGVsRW46ICdMYWRpZXMgR3JlZW4gU3F1YXJlIFdhdGNoJywgbW92ZW1lbnRDbjogJ+i\/m+WPo+efs+iLseacuuiKryAvIOmVtuefs+aWueW9ouihqOWjsycsIG1vdmVtZW50RW46ICdJbXBvcnRlZCBxdWFydHogbW92ZW1lbnQgLyBTdG9uZS1zZXQgc3F1YXJlIGNhc2UnLCBnZW5kZXJDbjogJ+Wls+Wjq+mVtuefs+aWueihqOezu+WIlycsIGdlbmRlckVuOiAiTGFkaWVzJyBzdG9uZS1zZXQgc3F1YXJlIGNvbGxlY3Rpb24iLCBkaWFsQ246ICfnu7\/oibLmlrnlvaLooajnm5jvvIzplbbnn7PooajlnIjvvIzmuIXniL3ml6XluLjpo47moLwnLCBkaWFsRW46ICdHcmVlbiBzcXVhcmUgZGlhbCwgc3RvbmUtc2V0IGJlemVsLCBjbGVhciBldmVyeWRheSBzdHlsaW5nJywgY2FzZUluZm9DbjogJ+mVtuefs+aWueW9ouihqOWjs++8jOaJueasoSAyMDI2LVNRLUwwMycsIGNhc2VJbmZvRW46ICdTdG9uZS1zZXQgc3F1YXJlIGNhc2UsIGJhdGNoIDIwMjYtU1EtTDAzJywgYmxlc3NpbmdDbjogJ+iuqeavj+S4gOWkqea4heaZsOiAjOaYjuS6ruOAgicsIGJsZXNzaW5nRW46ICdLZWVwIHRoZSBkYXkgY2xlYXIgYW5kIGJyaWdodC4nIH0sDQogICAgICAgICAgICAgICAgICAgIExBRElFU1BVUlBMRTogeyBjb2RlOiAnTEFESUVTLVBVUlBMRScsIHNlcmlhbDogJ1pELUxQVS0yMDI2LVNRLUwwNCcsIG1vZGVsQ246ICflpbPlo6vntKvoibLmlrnlvaLohZXooagnLCBtb2RlbEVuOiAnTGFkaWVzIFB1cnBsZSBTcXVhcmUgV2F0Y2gnLCBtb3ZlbWVudENuOiAn6L+b5Y+j55+z6Iux5py66IqvIC8g6ZW255+z5pa55b2i6KGo5aOzJywgbW92ZW1lbnRFbjogJ0ltcG9ydGVkIHF1YXJ0eiBtb3ZlbWVudCAvIFN0b25lLXNldCBzcXVhcmUgY2FzZScsIGdlbmRlckNuOiAn5aWz5aOr6ZW255+z5pa56KGo57O75YiXJywgZ2VuZGVyRW46ICJMYWRpZXMnIHN0b25lLXNldCBzcXVhcmUgY29sbGVjdGlvbiIsIGRpYWxDbjogJ+e0q+iJsuaWueW9ouihqOebmO+8jOmVtuefs+ihqOWciO+8jOaflOWSjOekvOWTgemjjuagvCcsIGRpYWxFbjogJ1B1cnBsZSBzcXVhcmUgZGlhbCwgc3RvbmUtc2V0IGJlemVsLCBzb2Z0IGdpZnRpbmcgc3R5bGUnLCBjYXNlSW5mb0NuOiAn6ZW255+z5pa55b2i6KGo5aOz77yM5om55qyhIDIwMjYtU1EtTDA0JywgY2FzZUluZm9FbjogJ1N0b25lLXNldCBzcXVhcmUgY2FzZSwgYmF0Y2ggMjAyNi1TUS1MMDQnLCBibGVzc2luZ0NuOiAn6YeN6KaB5pe25Yi755qE5LiA54K55rip5p+U5YWJ5rO944CCJywgYmxlc3NpbmdFbjogJ0EgcXVpZXQgZ2xvdyBmb3IgaW1wb3J0YW50IG1vbWVudHMuJyB9DQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICB2ZXJpZnlSZWNvcmRzLlpEMDAxR1JFRU4gPSB2ZXJpZnlSZWNvcmRzLlpEMDAxOw0KICAgICAgICAgICAgICAgIHZlcmlmeVJlY29yZHMuWkQwMDFCTEFDS0RJQUwgPSB2ZXJpZnlSZWNvcmRzLlpEMDAxOw0KICAgICAgICAgICAgICAgIHZlcmlmeVJlY29yZHMuWkQwMDhCTEFDSyA9IHZlcmlmeVJlY29yZHMuWkQwMDg7DQogICAgICAgICAgICAgICAgdmVyaWZ5UmVjb3Jkcy5MQURJRVNCTFVFV0FUQ0ggPSB2ZXJpZnlSZWNvcmRzLkxBRElFU0JMVUU7DQogICAgICAgICAgICAgICAgdmVyaWZ5UmVjb3Jkcy5MQURJRVNQSU5LV0FUQ0ggPSB2ZXJpZnlSZWNvcmRzLkxBRElFU1BJTks7DQogICAgICAgICAgICAgICAgdmVyaWZ5UmVjb3Jkcy5MQURJRVNHUkVFTldBVENIID0gdmVyaWZ5UmVjb3Jkcy5MQURJRVNHUkVFTjsNCiAgICAgICAgICAgICAgICB2ZXJpZnlSZWNvcmRzLkxBRElFU1BVUlBMRVdBVENIID0gdmVyaWZ5UmVjb3Jkcy5MQURJRVNQVVJQTEU7DQogICAgICAgICAgICAgICAgdmVyaWZ5UmVjb3Jkcy5aRExQVSA9IHZlcmlmeVJlY29yZHMuTEFESUVTUFVSUExFOw0KICAgICAgICAgICAgICAgIHJlc2V0U2VyaWFsUHJvbXB0KCk7DQogICAgICAgICAgICAgICAgaXNWZXJpZnlpbmcgPSB0cnVlOw0KICAgICAgICAgICAgICAgIHZlcmlmeUJ0bi5pbm5lclRleHQgPSB0LnZhdWx0X2xvYWRpbmc7DQogICAgICAgICAgICAgICAgdmVyaWZ5QnRuLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7DQogICAgICAgICAgICAgICAgcmVzQ2FyZC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgICAgIHJlc0NhcmQuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7DQoNCiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgdmVyaWZ5QnRuLmlubmVyVGV4dCA9IGkxOG5bY3VycmVudExhbmddLnZhdWx0X2J0bjsNCiAgICAgICAgICAgICAgICAgICAgaXNWZXJpZnlpbmcgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgdmVyaWZ5QnRuLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7DQogICAgICAgICAgICAgICAgICAgIHJlc0NhcmQuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7DQogICAgICAgICAgICAgICAgICAgIHJlc0NhcmQucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTsNCiAgICAgICAgICAgICAgICAgICAgcmVzQ2FyZC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7DQogICAgICAgICAgICAgICAgICAgIHJlc0NhcmQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmVyaWZ5UmVjb3JkID0gdmVyaWZ5UmVjb3Jkc1tub3JtYWxpemVkU25dIHx8IG51bGw7DQogICAgICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRWZXJpZnlSZWNvcmQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWZXJpZnlTdGF0ZSA9ICd2YWxpZCc7DQogICAgICAgICAgICAgICAgICAgICAgICBhcHBseVZlcmlmeVJlc3VsdFRleHQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc0ljb24uY2xhc3NOYW1lID0gJ3ctMTAgaC0xMCByb3VuZGVkLWZ1bGwgYmctWyMwMGZmY2NdLzIwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtWyNERURCQzhdJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc0ljb24uaW5uZXJIVE1MID0gJzxzdmcgY2xhc3M9InctNSBoLTUiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNSAxM2w0IDRMMTkgNyI+PC9wYXRoPjwvc3ZnPic7DQogICAgICAgICAgICAgICAgICAgICAgICByZXNHbG93LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICdyZ2JhKDAsIDI1NSwgMjA0LCAwLjEpJzsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWZXJpZnlSZWNvcmQgPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZlcmlmeVN0YXRlID0gJ2ludmFsaWQnOw0KICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlWZXJpZnlSZXN1bHRUZXh0KCk7DQogICAgICAgICAgICAgICAgICAgICAgICByZXNJY29uLmNsYXNzTmFtZSA9ICd3LTEwIGgtMTAgcm91bmRlZC1mdWxsIGJnLVsjZmY0NDQ0XS8yMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LVsjZmY0NDQ0XSc7DQogICAgICAgICAgICAgICAgICAgICAgICByZXNJY29uLmlubmVySFRNTCA9ICc8c3ZnIGNsYXNzPSJ3LTUgaC01IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTYgMThMMTggNk02IDZsMTIgMTIiPjwvcGF0aD48L3N2Zz4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzR2xvdy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgyNTUsIDY4LCA2OCwgMC4xKSc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIHJlc0NhcmQuc3R5bGUub3BhY2l0eSA9ICcxJzsNCiAgICAgICAgICAgICAgICAgICAgcmVzQ2FyZC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWSgwKSc7DQogICAgICAgICAgICAgICAgICAgIHJlc0NhcmQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJykubWF0Y2hlcyA\/ICdhdXRvJyA6ICdzbW9vdGgnLCBibG9jazogJ25lYXJlc3QnIH0pOw0KICAgICAgICAgICAgICAgIH0sIDEyMDApOyANCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIGlmICh2ZXJpZnlCdG4gJiYgc25JbnB1dCkgew0KICAgICAgICAgICAgICAgIHZlcmlmeUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGRvVmVyaWZ5KTsNCiAgICAgICAgICAgICAgICBzbklucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgcmVzZXRTZXJpYWxQcm9tcHQpOw0KICAgICAgICAgICAgICAgIHNuSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCAoZSkgPT4gew0KICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIGRvVmVyaWZ5KCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgLy8gOC4g5Zu96ZmF5YyW5Y+M6K+t5YiH5o2iDQogICAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGNvbnN0IGFwcGx5U3RhdGljSTE4biA9IChsYW5nKSA9PiB7DQogICAgICAgICAgICAgICAgY29uc3QgY29weSA9IHsNCiAgICAgICAgICAgICAgICAgICAgY246IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RCYWRnZXM6IFsn55S35aOr57O75YiXJywgJ+acuuaisCcsICflpbPlo6vns7vliJcnLCAn6L+Q5Yqo57O75YiXJywgJ+Wls+Wjq+ezu+WIlyddLA0KICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdFRpdGxlczogWyfnn7Poi7HorqHml7bohZXooagnLCAn6Ieq5Yqo5py65qKw57uP5YW45qy+JywgJ+mVtuefs+aWueW9ouWls+ihqCcsICfmnLrmorDmvZzmsLTpo47moLwnLCAn546r55Gw6YeR57uP5YW45qy+J10sDQogICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0TWF0ZXJpYWxzOiBbJ+i\/m+WPo+efs+iLsSAvIOeyvumSouihqOWjsycsICfov5vlj6Poh6rliqjmnLrmorAgLyDllYbliqHooajnm5gnLCAn6ZW255+z5pa56KGoIC8g5aWz5aOr57O75YiXJywgJ+i\/m+WPo+iHquWKqOacuuaisCAvIOiTneWuneefs+mVnOmdoicsICfov5vlj6Pnn7Poi7EgLyDnjqvnkbDph5HoibInXSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RUYWdzOiBbJ+iuoeaXticsICfoh6rliqjmnLrmorAnLCAn5aWz6KGoJywgJ+a9nOawtOmjjuagvCcsICfnu4\/lhbjmrL4nXSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbExpbmtzOiAn5p+l55yL6K+m5oOFJywNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VMYWJlbHM6IFsn5oqk55CGJywgJ+S\/neWFuycsICfmuKDpgZMnXSwNCiAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyc2hpcExhYmVsczogWyfpgInooagnLCAn6LSt5LmwJywgJ+eZu+iusCcsICfkv53lhbsnXSwNCiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsTGFiZWxzOiBbJ+ihqOWjsycsICfmnLroiq8nLCAn6KGo55uYJ10sDQogICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlSGVhZDogWyflj4LogIPmoaPmoYgnLCAn57O75YiX5qGj5qGIPGJyPuS4jueZveW6leS6p+WTgeWbvicsICfmjInnlLfooajjgIHmnLrmorDjgIHlpbPooajliIbnu4TlvZLmoaPvvIzmqKrlkJHmu5HliqjmtY\/op4jjgILmr4\/kuIDkvY3orr\/lrqLpg73og73lnKjmraTmib7liLDlr7nlupTnmoTns7vliJflhaXlj6PjgIInXSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmVFeWVicm93czogWydaRDAwMScsICdaRDAwMycsICdaRDAwOCcsICdaRDAwOCcsICflpbPooagnLCAnWkQwMDEnLCAnWkQwMDEnLCAnWkQwMDEnLCAnWkQwMDMnLCAnWkQwMDcnLCAnWkQwMDcnLCAn5aWz6KGoJywgJ1pEMDA4J10sDQogICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlVGl0bGVzOiBbJ+e7v+iJsuaXpeW4uOeUt+ihqCcsICfpu5HoibLov5Dliqjooajnm5gnLCAn57u\/6Imy5py65qKw5py66IqvJywgJ+m7keiJsuacuuaisOihqCcsICfok53oibLmlrnlvaLlpbPooagnLCAn6buR6Imy6KGo55uY5bGV56S6JywgJ+m7keebmOeZveW6leWbvicsICfnu7\/oibLooajnm5jlsZXnpLonLCAn6L+Q5Yqo5qy+5Zy65pmv5bGV56S6JywgJ+iTneiJsuiuoeaXtuihqCcsICforqHml7bmrL7lnLrmma\/lsZXnpLonLCAn57Sr6Imy5pa55b2i5aWz6KGoJywgJ+e7v+iJsuacuuaisOWxleekuuWbviddLA0KICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZURlc2NzOiBbJ+a4heaZsOebmOmdouS4jue7j+WFuOmSouWjs+avlOS+i++8jOaXpeW4uOmAmuWLpOeahOeQhuaDs+mAieaLqeOAgicsICfmt7HoibLnm5jpnaLmkK3phY3lpJzlhYnliLvluqbvvIzov5DliqjmhJ\/kuI7lj6\/or7vmgKflhbzlpIfjgIInLCAn5by66LCD5py65qKw57uT5p6E5LiO5py66Iqv57q\/5p2h77yM5Li65py66Iqv54ix5aW96ICF5ZGI546w5pu06auY6Zi255qE6KeG6KeJ5L2T6aqM44CCJywgJ+a3seiJsueJiOacrOWRiOeOsOWGheaVm+i0qOaEn++8jOmAguWQiOaQremFjeacuuaisOezu+WIl+WvueavlOWxleekuuOAgicsICfni6znq4vkuo7nlLfooajlj5nkuovvvIznqoHlh7rplbbnn7Pnu4boioLjgIHmn5Tlkozmr5TkvovkuI7npLzlk4HlsZ7mgKfjgIInLCAn6buR6Imy55uY6Z2i5pel5bi45qy+77yM5rKJ56iz5L2O6LCD55qE55S36KGo6YCJ5oup44CCJywgJ+mrmOWvueavlOS6p+WTgeWbvu+8jOmAgumFjeivpuaDhemhteS4jueUteWVhua4oOmBk+WxleekuuOAgicsICfnu7\/nm5jlnLrmma\/lsZXnpLrlm77vvIzmoIflv5fmgKflpJzlhYnnu7\/nm5jpnaLvvIzlvLrljJblk4HniYzop4bop4nor4bliKvjgIInLCAn5aSn5rCU55qE5Zy65pmv5bGV56S677yM6YCC6YWN6KeG6aKR5ZCO55qE5Lqn5ZOB6JC95Zyw5LiO6K+m5oOF5YWl5Y+j44CCJywgJ+iuoeaXtueggeihqOiTneiJsuebmOmdou+8jOS4sOWvjOezu+WIl+iJsuadv+mAieaLqeOAgicsICfmlbTkvZPlsZXnpLrorqHml7bnoIHooajnmoTov5DliqjmhJ\/kuI7nsr7lr4bmsJTotKjjgIInLCAn5reh57Sr55uY6Z2i5pa55b2i5aWz6KGo77yM5p+U5ZKM6Imy6LCD6YCC6YWN56S85ZOB5LiO56S85pyN5Zy65pmv44CCJywgJ+acuuaisOacuuiKr+WcuuaZr+Wxleekuu+8jOaUtuW9leS6juS6p+WTgeaho+ahiOOAgiddLA0KICAgICAgICAgICAgICAgICAgICAgICAgbGFkaWVzUnVud2F5OiBbJ+Wls+Wjq+ezu+WIlycsICflpbPlo6vmlrnlvaI8YnI+6ZW255+z6IWV6KGoJywgJ+eLrOeri+S6jueUt+ihqOWPmeS6i+eahOWls+ihqOe6v+OAguaWueW9ouihqOWjs+OAgeWuneefs+mVtuW1jOS4juaflOWSjOavlOS+i++8jOWFseWQjOaehOaIkOaXpeijheS4juekvOacjeWcuuaZr+S4reeahOiFlemXtOe7huiKguOAgicsICfmjqLntKLlpbPooajns7vliJcg4oaSJ10NCiAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgZW46IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RCYWRnZXM6IFsiTUVOJ1MgU0VSSUVTIiwgJ01FQ0hBTklDQUwnLCAnTEFESUVTIFNFUklFUycsICdTUE9SVCBTRVJJRVMnLCAnTEFESUVTIFNFUklFUyddLA0KICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdFRpdGxlczogWydRdWFydHogQ2hyb25vZ3JhcGgnLCAnQXV0b21hdGljIENsYXNzaWMnLCAnU3RvbmUtc2V0IFNxdWFyZScsICdEaXZlci1pbnNwaXJlZCBNZWNoYW5pY2FsJywgJ1Jvc2UgR29sZCBDbGFzc2ljJ10sDQogICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0TWF0ZXJpYWxzOiBbJ0ltcG9ydGVkIHF1YXJ0eiAvIFN0YWlubGVzcyBzdGVlbCBjYXNlJywgJ0ltcG9ydGVkIGF1dG9tYXRpYyAvIEJ1c2luZXNzIGRpYWwnLCAnU3RvbmUtc2V0IHNxdWFyZSAvIExhZGllcyBjb2xsZWN0aW9uJywgJ0ltcG9ydGVkIGF1dG9tYXRpYyAvIFNhcHBoaXJlIGNyeXN0YWwnLCAnSW1wb3J0ZWQgcXVhcnR6IC8gUm9zZS1nb2xkIHRvbmUnXSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RUYWdzOiBbJ0NIUk9OTycsICdBVVRPJywgJ0xBRElFUycsICdESVZFUicsICdDTEFTU0lDJ10sDQogICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxMaW5rczogJ1ZpZXcgRGV0YWlscycsDQogICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlTGFiZWxzOiBbJ0NBUkUnLCAnTUFJTlQnLCAnQjJCJ10sDQogICAgICAgICAgICAgICAgICAgICAgICBvd25lcnNoaXBMYWJlbHM6IFsnU0VMRUNUJywgJ1BVUkNIQVNFJywgJ1JFR0lTVEVSJywgJ01BSU5UQUlOJ10sDQogICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbExhYmVsczogWydDQVNFJywgJ01PVkUnLCAnRElBTCddLA0KICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZUhlYWQ6IFsnUkVGRVJFTkNFIEFSQ0hJVkUnLCAnQ29sbGVjdGlvbiBBcmNoaXZlPGJyPiYgV2hpdGUtYmFja2dyb3VuZCBQcm9kdWN0IEltYWdlcycsICdCcm93c2UgYnkgbWVuLCBtZWNoYW5pY2FsIGFuZCBsYWRpZXMgZ3JvdXBzIGluIGEgaG9yaXpvbnRhbCBhcmNoaXZlLiBFdmVyeSB2aXNpdG9yIGNhbiBmaW5kIHRoZSByaWdodCBjb2xsZWN0aW9uIGVudHJ5IGhlcmUuJ10sDQogICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlRXllYnJvd3M6IFsnWkQwMDEnLCAnWkQwMDMnLCAnWkQwMDgnLCAnWkQwMDgnLCAnTEFESUVTJywgJ1pEMDAxJywgJ1pEMDAxJywgJ1pEMDAxJywgJ1pEMDAzJywgJ1pEMDA3JywgJ1pEMDA3JywgJ0xBRElFUycsICdaRDAwOCddLA0KICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZVRpdGxlczogWydHcmVlbiBEYWlseSBXYXRjaCcsICdCbGFjayBTcG9ydCBEaWFsJywgJ0dyZWVuIE1lY2hhbmljYWwgTW92ZW1lbnQnLCAnQmxhY2sgTWVjaGFuaWNhbCBXYXRjaCcsICdCbHVlIFNxdWFyZSBMYWRpZXMgV2F0Y2gnLCAnQmxhY2sgRGlhbCBEaXNwbGF5JywgJ0JsYWNrIERpYWwgV2hpdGUgQmFja2dyb3VuZCcsICdHcmVlbiBEaWFsIERpc3BsYXknLCAnU3BvcnQgU2NlbmUgRGlzcGxheScsICdCbHVlIENocm9ub2dyYXBoJywgJ0Nocm9ub2dyYXBoIFNjZW5lIERpc3BsYXknLCAnUHVycGxlIFNxdWFyZSBMYWRpZXMgV2F0Y2gnLCAnR3JlZW4gTWVjaGFuaWNhbCBEaXNwbGF5J10sDQogICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlRGVzY3M6IFsnQ2xlYXIgZGlhbCBsYXlvdXQgYW5kIGNsYXNzaWMgc3RlZWwgY2FzZSBwcm9wb3J0aW9ucyBmb3IgZGFpbHkgY29tbXV0aW5nLicsICdEYXJrIGRpYWwgd2l0aCBsdW1pbm91cyBpbmRleGVzIGZvciBzcG9ydCBjaGFyYWN0ZXIgYW5kIHJlYWRhYmlsaXR5LicsICdNZWNoYW5pY2FsIHN0cnVjdHVyZSBhbmQgY2FsaWJyZSBsaW5lcyBjcmVhdGUgYSBtb3JlIGFkdmFuY2VkIHZpc3VhbCBleHBlcmllbmNlLicsICdBIGRhcmtlciBtZWNoYW5pY2FsIGVkaXRpb24gZm9yIHJlc3RyYWluZWQgY29tcGFyaXNvbiB3aXRoaW4gdGhlIHNlcmllcy4nLCAnQSBzdGFuZGFsb25lIGxhZGllcyBsaW5lIGVtcGhhc2l6aW5nIHN0b25lLXNldHRpbmcsIHNvZnQgcHJvcG9ydGlvbnMgYW5kIGdpZnRpbmcgdmFsdWUuJywgJ0EgY2FsbSBibGFjay1kaWFsIGRhaWx5IG1vZGVsIGZvciBtZW4uJywgJ0hpZ2gtY29udHJhc3QgcHJvZHVjdCBpbWFnZSBmb3IgZGV0YWlsIHBhZ2VzIGFuZCByZXRhaWwgY2hhbm5lbHMuJywgJ0dyZWVuIGRpYWwgc2NlbmUgaW1hZ2Ugd2l0aCBhIHNpZ25hdHVyZSBsdW1pbm91cyBsb29rIGZvciBzdHJvbmdlciBicmFuZCByZWNvZ25pdGlvbi4nLCAnQXRtb3NwaGVyaWMgc2NlbmUgZGlzcGxheSBmb3IgcHJvZHVjdCBsYW5kaW5nIGFuZCBkZXRhaWwgZW50cnkuJywgJ0JsdWUgY2hyb25vZ3JhcGggZGlhbCBleHBhbmRzIHRoZSBzZXJpZXMgY29sb3IgcGFsZXR0ZS4nLCAnQSBmdWxsIHNjZW5lIGRpc3BsYXkgc2hvd2luZyBzcG9ydHkgcHJlY2lzaW9uIGZvciB0aGUgY2hyb25vZ3JhcGggbGluZS4nLCAnU29mdCBwdXJwbGUgc3F1YXJlIGxhZGllcyB3YXRjaCBmb3IgZ2lmdGluZyBhbmQgZm9ybWFsIG9jY2FzaW9ucy4nLCAnTWVjaGFuaWNhbCBtb3ZlbWVudCBzY2VuZSBkaXNwbGF5IGNvbGxlY3RlZCBpbiB0aGUgcHJvZHVjdCBhcmNoaXZlLiddLA0KICAgICAgICAgICAgICAgICAgICAgICAgbGFkaWVzUnVud2F5OiBbJ0xBRElFUyBDT0xMRUNUSU9OJywgJ0xhZGllcyBTcXVhcmU8YnI+U3RvbmUtc2V0IFdhdGNoZXMnLCAnQSBsYWRpZXMgbGluZSBpbmRlcGVuZGVudCBmcm9tIHRoZSBtZW7igJlzIG5hcnJhdGl2ZS4gU3F1YXJlIGNhc2VzLCBzdG9uZS1zZXR0aW5nIGFuZCBzb2Z0IHByb3BvcnRpb25zIGNyZWF0ZSB3cmlzdCBkZXRhaWxzIGZvciBkYWlseSBhbmQgZm9ybWFsIHN0eWxpbmcuJywgJ0V4cGxvcmUgTGFkaWVzIENvbGxlY3Rpb24g4oaSJ10NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH1bbGFuZ10gfHwge307DQoNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjc2xpZGVyLWNvbnRhaW5lciAuc2xpZGUtY2FyZCcpLmZvckVhY2goKGNhcmQsIGluZGV4KSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IGluZGV4ICUgKGNvcHkucHJvZHVjdFRpdGxlcz8ubGVuZ3RoIHx8IDEpOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBiYWRnZSA9IGNhcmQucXVlcnlTZWxlY3RvcignLmFic29sdXRlLnRvcC02LmxlZnQtNicpOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IGNhcmQucXVlcnlTZWxlY3RvcignaDMnKTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSBjYXJkLnF1ZXJ5U2VsZWN0b3IoJy5pMThuLXByb2R1Y3QtbWF0Jyk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhZyA9IGNhcmQucXVlcnlTZWxlY3RvcignLmZsZXguanVzdGlmeS1iZXR3ZWVuIHNwYW4nKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGJhZGdlICYmIGNvcHkucHJvZHVjdEJhZGdlcz8uW2l0ZW1JbmRleF0pIGJhZGdlLmlubmVySFRNTCA9IGNvcHkucHJvZHVjdEJhZGdlc1tpdGVtSW5kZXhdOw0KICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGUgJiYgY29weS5wcm9kdWN0VGl0bGVzPy5baXRlbUluZGV4XSkgdGl0bGUuaW5uZXJIVE1MID0gY29weS5wcm9kdWN0VGl0bGVzW2l0ZW1JbmRleF07DQogICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbCAmJiBjb3B5LnByb2R1Y3RNYXRlcmlhbHM\/LltpdGVtSW5kZXhdKSBtYXRlcmlhbC5pbm5lckhUTUwgPSBjb3B5LnByb2R1Y3RNYXRlcmlhbHNbaXRlbUluZGV4XTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyAmJiBjb3B5LnByb2R1Y3RUYWdzPy5baXRlbUluZGV4XSkgdGFnLmlubmVySFRNTCA9IGNvcHkucHJvZHVjdFRhZ3NbaXRlbUluZGV4XTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjc2xpZGVyLWNvbnRhaW5lciAuaTE4bi1jYXJkLWJ0biwgLmFyY2hpdmUtZGV0YWlsLWxpbmsnKS5mb3JFYWNoKGxpbmsgPT4gew0KICAgICAgICAgICAgICAgICAgICBpZiAoY29weS5kZXRhaWxMaW5rcykgbGluay5pbm5lckhUTUwgPSBjb3B5LmRldGFpbExpbmtzOw0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3NlcnZpY2UgLmdyaWQubWRcXDpncmlkLWNvbHMtMyA+IGRpdiA+IGRpdjpmaXJzdC1jaGlsZCcpLmZvckVhY2goKGVsLCBpbmRleCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBpZiAoY29weS5zZXJ2aWNlTGFiZWxzPy5baW5kZXhdKSBlbC5pbm5lckhUTUwgPSBjb3B5LnNlcnZpY2VMYWJlbHNbaW5kZXhdOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNvd25lcnNoaXAgLm93bmVyc2hpcC1zdGVwID4gcDpmaXJzdC1jaGlsZCcpLmZvckVhY2goKGVsLCBpbmRleCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBpZiAoY29weS5vd25lcnNoaXBMYWJlbHM\/LltpbmRleF0pIGVsLmlubmVySFRNTCA9IGNvcHkub3duZXJzaGlwTGFiZWxzW2luZGV4XTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjbWF0ZXJpYWxzIC5ncmlkLm1kXFw6Z3JpZC1jb2xzLTMgPiBkaXYgPiBkaXY6Zmlyc3QtY2hpbGQnKS5mb3JFYWNoKChlbCwgaW5kZXgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGNvcHkubWF0ZXJpYWxMYWJlbHM\/LltpbmRleF0pIGVsLmlubmVySFRNTCA9IGNvcHkubWF0ZXJpYWxMYWJlbHNbaW5kZXhdOw0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgY29uc3QgYXJjaGl2ZUludHJvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3JlZmVyZW5jZS1hcmNoaXZlIC5ncmlkJyk7DQogICAgICAgICAgICAgICAgaWYgKGFyY2hpdmVJbnRybyAmJiBjb3B5LmFyY2hpdmVIZWFkKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGtpY2tlciA9IGFyY2hpdmVJbnRyby5xdWVyeVNlbGVjdG9yKCdzcGFuJyk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gYXJjaGl2ZUludHJvLnF1ZXJ5U2VsZWN0b3IoJ2gyJyk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBhcmNoaXZlSW50cm8ucXVlcnlTZWxlY3RvcigncCcpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoa2lja2VyKSBraWNrZXIuaW5uZXJIVE1MID0gY29weS5hcmNoaXZlSGVhZFswXTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlKSB0aXRsZS5pbm5lckhUTUwgPSBjb3B5LmFyY2hpdmVIZWFkWzFdOw0KICAgICAgICAgICAgICAgICAgICBpZiAoZGVzYykgZGVzYy5pbm5lckhUTUwgPSBjb3B5LmFyY2hpdmVIZWFkWzJdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjcmVmZXJlbmNlLWFyY2hpdmUgLmFyY2hpdmUtY2FyZCcpLmZvckVhY2goKGNhcmQsIGluZGV4KSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IGluZGV4ICUgKGNvcHkuYXJjaGl2ZVRpdGxlcz8ubGVuZ3RoIHx8IDEpOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBleWVicm93ID0gY2FyZC5xdWVyeVNlbGVjdG9yKCcuYXJjaGl2ZS1tZXRhID4gcDpmaXJzdC1jaGlsZCcpOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IGNhcmQucXVlcnlTZWxlY3RvcignaDMnKTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzYyA9IGNhcmQucXVlcnlTZWxlY3RvcignLmFyY2hpdmUtbWV0YSBwLnRleHQtd2hpdGVcXC80MicpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoZXllYnJvdyAmJiBjb3B5LmFyY2hpdmVFeWVicm93cz8uW2l0ZW1JbmRleF0pIGV5ZWJyb3cuaW5uZXJIVE1MID0gY29weS5hcmNoaXZlRXllYnJvd3NbaXRlbUluZGV4XTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlICYmIGNvcHkuYXJjaGl2ZVRpdGxlcz8uW2l0ZW1JbmRleF0pIHRpdGxlLmlubmVySFRNTCA9IGNvcHkuYXJjaGl2ZVRpdGxlc1tpdGVtSW5kZXhdOw0KICAgICAgICAgICAgICAgICAgICBpZiAoZGVzYyAmJiBjb3B5LmFyY2hpdmVEZXNjcz8uW2l0ZW1JbmRleF0pIGRlc2MuaW5uZXJIVE1MID0gY29weS5hcmNoaXZlRGVzY3NbaXRlbUluZGV4XTsNCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IHJ1bndheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNsYWRpZXMtcnVud2F5Jyk7DQogICAgICAgICAgICAgICAgaWYgKHJ1bndheSAmJiBjb3B5LmxhZGllc1J1bndheSkgew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBraWNrZXIgPSBydW53YXkucXVlcnlTZWxlY3RvcignLmdzYXAtZmFkZS11cCBzcGFuJyk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gcnVud2F5LnF1ZXJ5U2VsZWN0b3IoJ2gyJyk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBydW53YXkucXVlcnlTZWxlY3RvcigncCcpOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5rID0gcnVud2F5LnF1ZXJ5U2VsZWN0b3IoJ2EnKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGtpY2tlcikga2lja2VyLmlubmVySFRNTCA9IGNvcHkubGFkaWVzUnVud2F5WzBdOw0KICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGUpIHRpdGxlLmlubmVySFRNTCA9IGNvcHkubGFkaWVzUnVud2F5WzFdOw0KICAgICAgICAgICAgICAgICAgICBpZiAoZGVzYykgZGVzYy5pbm5lckhUTUwgPSBjb3B5LmxhZGllc1J1bndheVsyXTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmspIGxpbmsuaW5uZXJIVE1MID0gY29weS5sYWRpZXNSdW53YXlbM107DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFyY2hpdmUtcmFpbCcpLmZvckVhY2goKHJhaWwpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgcmFpbC5kYXRhc2V0LmkxOG5TeW5jZWRBdCA9IFN0cmluZyhEYXRlLm5vdygpKTsNCiAgICAgICAgICAgICAgICAgICAgcmFpbC5kYXRhc2V0Lm5lZWRzTG9vcFJlbWVhc3VyZSA9ICd0cnVlJzsNCiAgICAgICAgICAgICAgICAgICAgcmFpbC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYXJjaGl2ZTppMThuLXN5bmMnKSk7DQogICAgICAgICAgICAgICAgICAgIHJhaWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Njcm9sbCcpKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Jlc2l6ZScpKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBTY3JvbGxUcmlnZ2VyICE9PSAndW5kZWZpbmVkJykgU2Nyb2xsVHJpZ2dlci5yZWZyZXNoKCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgd2luZG93LnN3aXRjaExhbmcgPSBmdW5jdGlvbihsYW5nKSB7DQogICAgICAgICAgICAgICAgaWYgKCFpMThuW2xhbmddKSByZXR1cm47DQogICAgICAgICAgICAgICAgY3VycmVudExhbmcgPSBsYW5nOw0KICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBpMThuW2xhbmddOw0KDQogICAgICAgICAgICAgICAgY29uc3Qgc2V0SFRNTCA9IChpZCwgdmFsdWUpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7DQogICAgICAgICAgICAgICAgICAgIGlmIChlbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSBlbC5pbm5lckhUTUwgPSB2YWx1ZTsNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgIGNvbnN0IHNldFBsYWNlaG9sZGVyID0gKGlkLCB2YWx1ZSkgPT4gew0KICAgICAgICAgICAgICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGVsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIGVsLnBsYWNlaG9sZGVyID0gdmFsdWU7DQogICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tZW4nKS5jbGFzc05hbWUgPSBsYW5nID09PSAnZW4nID8gJ3RleHQtd2hpdGUnIDogJ3RleHQtd2hpdGUvNDAgaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyc7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1jbicpLmNsYXNzTmFtZSA9IGxhbmcgPT09ICdjbicgPyAndGV4dC13aGl0ZScgOiAndGV4dC13aGl0ZS80MCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubGFuZyA9IGxhbmcgPT09ICdjbicgPyAnemgtQ04nIDogJ2VuJzsNCg0KICAgICAgICAgICAgICAgIHNldEhUTUwoJ21lbnVfYnRuX3RleHQnLCB0Lm1lbnVfYnRuKTsNCiAgICAgICAgICAgICAgICBzZXRIVE1MKCdjbG9zZV9tZW51X3RleHQnLCB0LmNsb3NlX21lbnUpOw0KICAgICAgICAgICAgICAgIHNldEhUTUwoJ25hdl92ZXJpZnlfY3RhJywgdC5uYXZfdmVyaWZ5X2N0YSk7DQogICAgICAgICAgICAgICAgY29uc3QgbmF2VmVyaWZ5TGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduYXZfdmVyaWZ5X2N0YScpPy5jbG9zZXN0KCdhJyk7DQogICAgICAgICAgICAgICAgaWYgKG5hdlZlcmlmeUxpbmspIG5hdlZlcmlmeUxpbmsuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgbGFuZyA9PT0gJ2NuJyA\/ICfmn6XpqozohZXooajnnJ\/kvKonIDogJ1ZlcmlmeSB3YXRjaCBhdXRoZW50aWNpdHknKTsNCiAgICAgICAgICAgICAgICBzZXRIVE1MKCdzY3JvbGwtdG8tZXhwbG9yZScsIHQuaGVyb19idG4pOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyN0b3AtbmF2IGFbZGF0YS10b3AtaW5kZXhdJykuZm9yRWFjaCgobGluaywgaW5kZXgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHQudG9wX25hdiAmJiB0LnRvcF9uYXZbaW5kZXhdKSBsaW5rLmlubmVySFRNTCA9IHQudG9wX25hdltpbmRleF07DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2Z1bGwtbWVudSBuYXYgYScpLmZvckVhY2goKGxpbmssIGluZGV4KSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGlmICh0Lm1lbnVfaXRlbXNbaW5kZXhdKSBsaW5rLmlubmVySFRNTCA9IHQubWVudV9pdGVtc1tpbmRleF07DQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICd2aWQxX3N1YicsICd2aWQxX3RpdGxlJywgJ3ZpZDFfZGVzYycsICd2aWQxX2N0YTEnLCAndmlkMV9jdGEyJywKICAgICAgICAgICAgICAgICAgICAndmlkMl9zdWInLCAndmlkMl90aXRsZScsICd2aWQyX2Rlc2MnLCAndmlkMl9jdGExJywgJ3ZpZDJfY3RhMicsCiAgICAgICAgICAgICAgICAgICAgJ3ZpZDNfc3ViJywgJ3ZpZDNfdGl0bGUnLCAndmlkM19kZXNjJywgJ3ZpZDNfY3RhMScsICd2aWQzX2N0YTInLAogICAgICAgICAgICAgICAgICAgICdjYWxpYnJlMV9zdWInLCAnY2FsaWJyZTFfdGl0bGUnLCAnY2FsaWJyZTFfZGVzYycsICdjYWxpYnJlMl9zdWInLCAnY2FsaWJyZTJfdGl0bGUnLCAnY2FsaWJyZTJfZGVzYycsICdjYWxpYnJlM19zdWInLCAnY2FsaWJyZTNfdGl0bGUnLCAnY2FsaWJyZTNfZGVzYycsDQogICAgICAgICAgICAgICAgICAgICdzaG93Y2FzZV9zdWInLCAnc2hvd2Nhc2VfY2hpcDEnLCAnc2hvd2Nhc2VfY2hpcDInLCAnc2hvd2Nhc2VfY2hpcDMnLAogICAgICAgICAgICAgICAgICAgICdleHBsb3JlX3ZlcmlmeV90aXRsZScsICdleHBsb3JlX3ZlcmlmeV9zYW1wbGUnLCAnZXhwbG9yZV92ZXJpZnlfZGVzYycsICdleHBsb3JlX3ZlcmlmeV9idG4nLAogICAgICAgICAgICAgICAgICAgICdoYWxvX3ZlcmlmeV9raWNrZXInLCAnaGFsb192ZXJpZnlfZGVzYycsICdoYWxvX3ZlcmlmeV9idG4nLAogICAgICAgICAgICAgICAgICAgICdzdG9yeV9zdWInLCAnc3RvcnlfdGl0bGUnLCAnc3RvcnlfZGVzYycsICdzdG9yeV9zMScsICdzdG9yeV9zMicsICdzdG9yeV9zMycsDQogICAgICAgICAgICAgICAgICAgICdpbm5vX3N1YicsICdpbm5vX3RpdGxlJywgJ2lubm9fZGVzYycsICdpbm5vX3MxJywgJ2lubm9fczInLA0KICAgICAgICAgICAgICAgICAgICAnYXJjaF9zdWInLCAnYXJjaF90aXRsZScsDQogICAgICAgICAgICAgICAgICAgICdzZXJ2aWNlX3N1YicsICdzZXJ2aWNlX3RpdGxlJywgJ3NlcnZpY2VfZGVzYycsDQogICAgICAgICAgICAgICAgICAgICdzZXJ2aWNlX2NhcmQxX3RpdGxlJywgJ3NlcnZpY2VfY2FyZDFfZGVzYycsICdzZXJ2aWNlX2NhcmQyX3RpdGxlJywgJ3NlcnZpY2VfY2FyZDJfZGVzYycsICdzZXJ2aWNlX2NhcmQzX3RpdGxlJywgJ3NlcnZpY2VfY2FyZDNfZGVzYycsDQogICAgICAgICAgICAgICAgICAgICdvd25lcnNoaXBfc3ViJywgJ293bmVyc2hpcF90aXRsZScsICdvd25lcnNoaXBfZGVzYycsDQogICAgICAgICAgICAgICAgICAgICdvd25lcnNoaXBfY2FyZDFfdGl0bGUnLCAnb3duZXJzaGlwX2NhcmQxX2Rlc2MnLCAnb3duZXJzaGlwX2NhcmQyX3RpdGxlJywgJ293bmVyc2hpcF9jYXJkMl9kZXNjJywgJ293bmVyc2hpcF9jYXJkM190aXRsZScsICdvd25lcnNoaXBfY2FyZDNfZGVzYycsICdvd25lcnNoaXBfY2FyZDRfdGl0bGUnLCAnb3duZXJzaGlwX2NhcmQ0X2Rlc2MnLA0KICAgICAgICAgICAgICAgICAgICAnbWF0ZXJpYWxzX3N1YicsICdtYXRlcmlhbHNfdGl0bGUnLCAnbWF0ZXJpYWxzX2Rlc2MnLCAnbWF0ZXJpYWxzX2NhcmQxX3RpdGxlJywgJ21hdGVyaWFsc19jYXJkMV9kZXNjJywgJ21hdGVyaWFsc19jYXJkMl90aXRsZScsICdtYXRlcmlhbHNfY2FyZDJfZGVzYycsICdtYXRlcmlhbHNfY2FyZDNfdGl0bGUnLCAnbWF0ZXJpYWxzX2NhcmQzX2Rlc2MnLA0KICAgICAgICAgICAgICAgICAgICAnYmVzcG9rZV9zdWInLCAnYmVzcG9rZV90aXRsZScsICdiZXNwb2tlX2Rlc2MnLCAnYmVzcG9rZV9zMScsICdiZXNwb2tlX3MyJywgJ2Jlc3Bva2VfczMnLA0KICAgICAgICAgICAgICAgICAgICAnaGVyaXRhZ2Vfc3ViJywgJ2hlcml0YWdlX3RpdGxlJywgJ2hlcml0YWdlX2NhcmQxX3RpdGxlJywgJ2hlcml0YWdlX2NhcmQxX2Rlc2MnLCAnaGVyaXRhZ2VfY2FyZDJfdGl0bGUnLCAnaGVyaXRhZ2VfY2FyZDJfZGVzYycsICdoZXJpdGFnZV9jYXJkM190aXRsZScsICdoZXJpdGFnZV9jYXJkM19kZXNjJywgJ2hlcml0YWdlX2NhcmQ0X3RpdGxlJywgJ2hlcml0YWdlX2NhcmQ0X2Rlc2MnLA0KICAgICAgICAgICAgICAgICAgICAnam91cm5hbF9zdWInLCAnam91cm5hbF90aXRsZScsICdqb3VybmFsX2Rlc2MnLCAnam91cm5hbF90YWcxJywgJ2pvdXJuYWxfY2FyZDEnLCAnam91cm5hbF90YWcyJywgJ2pvdXJuYWxfY2FyZDInLCAnam91cm5hbF90YWczJywgJ2pvdXJuYWxfY2FyZDMnLA0KICAgICAgICAgICAgICAgICAgICAnZmFxX3N1YicsICdmYXFfdGl0bGUnLCAnZmFxX3ExJywgJ2ZhcV9hMScsICdmYXFfcTInLCAnZmFxX2EyJywgJ2ZhcV9xMycsICdmYXFfYTMnLA0KICAgICAgICAgICAgICAgICAgICAndmF1bHRfdGl0bGUnLCAndmF1bHRfZGVzYycsDQogICAgICAgICAgICAgICAgICAgICdjb250YWN0X3N1YicsICdjb250YWN0X3RpdGxlJywgJ2NvbnRhY3RfZGVzYycsICdjb250YWN0X2NhcmQxX2xhYmVsJywgJ2NvbnRhY3RfY2FyZDJfbGFiZWwnLCAnY29udGFjdF9jYXJkMl90ZXh0JywgJ2NvbnRhY3RfY2FyZDNfbGFiZWwnLCAnY29udGFjdF9jYXJkM190ZXh0JywgJ2NvbnRhY3RfY2FyZDRfbGFiZWwnLCAnY29udGFjdF9jYXJkNF90ZXh0JywNCiAgICAgICAgICAgICAgICAgICAgJ2Zvb3Rlcl9icmFuZF9kZXNjJywgJ2Zvb3Rlcl9jb2xsZWN0aW9uc190aXRsZScsICdmb290ZXJfc3VwcG9ydF90aXRsZScsICdmb290ZXJfY29udGFjdF90aXRsZScsICdmb290X3InDQogICAgICAgICAgICAgICAgXS5mb3JFYWNoKGlkID0+IHNldEhUTUwoaWQsIHRbaWRdKSk7DQoNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaTE4bi1oZXJvLWJ0bicpLmZvckVhY2goYnRuID0+IGJ0bi5pbm5lckhUTUwgPSB0Lmhlcm9fYnRuKTsNCg0KICAgICAgICAgICAgICAgIHNldEhUTUwoJ3ZhdWx0X2VudGVyX2hpbnQnLCB0LnZhdWx0X2VudGVyKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvLyDpppblsY\/lm77niYfova7mkq3lj4zor63mm7TmlrANCiAgICAgICAgICAgICAgICBhcHBseUhlcm9TbGlkZShjdXJyZW50SGVyb1NsaWRlLCB0cnVlKTsNCg0KICAgICAgICAgICAgICAgIC8vIOWQjOatpeabtOaWsCAzRCDkuqflk4HlsZXnpLrnmoTmlofmoYgNCiAgICAgICAgICAgICAgICB1cGRhdGVTaG93Y2FzZVVJKGN1cnJlbnRTaG93Y2FzZUluZGV4KTsNCiAgICAgICAgICAgICAgICBhcHBseVN0YXRpY0kxOG4obGFuZyk7DQogICAgICAgICAgICAgICAgLy8g57O75YiX5ruR5Z2X55qE5oyJ6ZKu44CB5ZCN56ew44CB5p2Q6LSo44CB6aOO5qC855SxIGFwcGx5U3RhdGljSTE4biDnu5\/kuIDopobnm5bvvIzljIXlkKvlhYvpmobljaHniYfjgIINCg0KICAgICAgICAgICAgICAgIHNldFBsYWNlaG9sZGVyKCdzbl9pbnB1dCcsIHQudmF1bHRfcGgpOw0KICAgICAgICAgICAgICAgIHNldEhUTUwoJ3ZlcmlmeV9idG4nLCBpc1ZlcmlmeWluZyA\/IHQudmF1bHRfbG9hZGluZyA6IHQudmF1bHRfYnRuKTsNCiAgICAgICAgICAgICAgICBzZXRIVE1MKCdyZXNfcmVjb3JkX2xhYmVsJywgdC5zZWN1cmVfcmVjb3JkKTsNCiAgICAgICAgICAgICAgICBzZXRIVE1MKCdyZXNfbW9kZWxfbGFiZWwnLCB0Lm1vZGVsX2xhYmVsKTsNCiAgICAgICAgICAgICAgICBzZXRIVE1MKCdyZXNfc2VyaWFsX2xhYmVsJywgdC5zZXJpYWxfbGFiZWwpOw0KICAgICAgICAgICAgICAgIHNldEhUTUwoJ3Jlc19jYWxpYnJlX2xhYmVsJywgdC5jYWxpYnJlX2xhYmVsKTsNCiAgICAgICAgICAgICAgICBzZXRIVE1MKCdyZXNfZ2VuZGVyX2xhYmVsJywgdC5nZW5kZXJfbGFiZWwpOw0KICAgICAgICAgICAgICAgIHNldEhUTUwoJ3Jlc19kaWFsX2xhYmVsJywgdC5kaWFsX2xhYmVsKTsNCiAgICAgICAgICAgICAgICBzZXRIVE1MKCdyZXNfY2FzZV9sYWJlbCcsIHQuY2FzZV9sYWJlbCk7DQogICAgICAgICAgICAgICAgYXBwbHlWZXJpZnlSZXN1bHRUZXh0KCk7DQogICAgICAgICAgICAgICAgc3luY1ByZW1pdW1OYXJyYXRpdmVMYW5ndWFnZSgpOw0KDQogICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZm9vdGVyIGFbZGF0YS1mb290ZXItaW5kZXhdJykuZm9yRWFjaCgobGluaywgaW5kZXgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHQuZm9vdGVyX2xpbmtzW2luZGV4XSkgbGluay5pbm5lckhUTUwgPSB0LmZvb3Rlcl9saW5rc1tpbmRleF07DQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICBpZiAoaGFzU2Nyb2xsVHJpZ2dlcikgew0KICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IFNjcm9sbFRyaWdnZXIucmVmcmVzaCgpLCAxMDApOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIGNvbnN0IGluaXRQcmVzc0ZlZWRiYWNrID0gKCkgPT4gew0KICAgICAgICAgICAgICAgIGNvbnN0IHByZXNzYWJsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYnRuLW1vZGVybiwgLmhlcm8tb3B0aW9uLCAubWF0ZXJpYWwtY2hpcCwgLm5hdi12YXVsdC1jdGEsIC5oZXJvLXF1aWNrLWxpbmssICNzbGlkZXItcHJldiwgI3NsaWRlci1uZXh0LCAjYnJhbmQtaG9tZScpOw0KICAgICAgICAgICAgICAgIHByZXNzYWJsZXMuZm9yRWFjaCgoZWwpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZSA9ICgpID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXByZXNzZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCAoKSA9PiBlbC5jbGFzc0xpc3QuYWRkKCdpcy1wcmVzc2VkJykpOw0KICAgICAgICAgICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCByZWxlYXNlKTsNCiAgICAgICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmNhbmNlbCcsIHJlbGVhc2UpOw0KICAgICAgICAgICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybGVhdmUnLCByZWxlYXNlKTsNCiAgICAgICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHJlbGVhc2UpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgY29uc3QgaW5pdEJhY2tUb1RvcCA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICBjb25zdCBiYWNrVG9Ub3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFjay10by10b3AnKTsNCiAgICAgICAgICAgICAgICBpZiAoIWJhY2tUb1RvcCkgcmV0dXJuOw0KICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZUJhY2tUb1RvcCA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgYmFja1RvVG9wLmNsYXNzTGlzdC50b2dnbGUoJ2lzLXZpc2libGUnLCB3aW5kb3cuc2Nyb2xsWSA+IE1hdGgubWluKDcyMCwgd2luZG93LmlubmVySGVpZ2h0ICogMC43KSk7DQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICBiYWNrVG9Ub3AuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGVCYWNrVG9Ub3AsIHsgcGFzc2l2ZTogdHJ1ZSB9KTsNCiAgICAgICAgICAgICAgICB1cGRhdGVCYWNrVG9Ub3AoKTsNCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIGNvbnN0IGluaXRMYXp5VmlkZW9zID0gKCkgPT4gew0KICAgICAgICAgICAgICAgIGNvbnN0IHZpZGVvcyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgndmlkZW8ubGF6eS12aWRlbycpKTsNCiAgICAgICAgICAgICAgICBpZiAoIXZpZGVvcy5sZW5ndGgpIHJldHVybjsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IGxvYWRWaWRlbyA9ICh2aWRlbykgPT4gew0KICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW8uZGF0YXNldC5sb2FkZWQgPT09ICd0cnVlJykgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICB2aWRlby5xdWVyeVNlbGVjdG9yQWxsKCdzb3VyY2VbZGF0YS1zcmNdJykuZm9yRWFjaCgoc291cmNlKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Uuc3JjID0gc291cmNlLmRhdGFzZXQuc3JjOw0KICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1zcmMnKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIHZpZGVvLmRhdGFzZXQubG9hZGVkID0gJ3RydWUnOw0KICAgICAgICAgICAgICAgICAgICB2aWRlby5sb2FkKCk7DQogICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgIGlmICghKCdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93KSkgew0KICAgICAgICAgICAgICAgICAgICB2aWRlb3MuZm9yRWFjaCgodmlkZW8pID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRWaWRlbyh2aWRlbyk7DQogICAgICAgICAgICAgICAgICAgICAgICB2aWRlby5wbGF5KCkuY2F0Y2goKCkgPT4ge30pOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZGVvID0gZW50cnkudGFyZ2V0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZFZpZGVvKHZpZGVvKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlby5wbGF5KCkuY2F0Y2goKCkgPT4ge30pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2aWRlby5kYXRhc2V0LmxvYWRlZCA9PT0gJ3RydWUnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW8ucGF1c2UoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfSwgeyByb290TWFyZ2luOiAnNDIwcHggMHB4JywgdGhyZXNob2xkOiAwLjA4IH0pOw0KDQogICAgICAgICAgICAgICAgdmlkZW9zLmZvckVhY2goKHZpZGVvKSA9PiBvYnNlcnZlci5vYnNlcnZlKHZpZGVvKSk7DQogICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICBjb25zdCBpbml0SG9yaXpvbnRhbFJhaWxzID0gKCkgPT4gew0KICAgICAgICAgICAgICAgIGNvbnN0IHJhaWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFyY2hpdmUtcmFpbCcpOw0KICAgICAgICAgICAgICAgIHJhaWxzLmZvckVhY2goKHJhaWwpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHJhaWwuZGF0YXNldC5ob3Jpem9udGFsQm91bmQgPT09ICd0cnVlJykgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICByYWlsLmRhdGFzZXQuaG9yaXpvbnRhbEJvdW5kID0gJ3RydWUnOw0KDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSByYWlsLmNsb3Nlc3QoJyNyZWZlcmVuY2UtYXJjaGl2ZScpOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9scyA9IHNlY3Rpb24gPyBzZWN0aW9uLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWFyY2hpdmUtY29udHJvbF0nKSA6IFtdOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9ncmVzc0ZpbGwgPSBzZWN0aW9uID8gc2VjdGlvbi5xdWVyeVNlbGVjdG9yKCcuYXJjaGl2ZS1wcm9ncmVzcy1maWxsJykgOiBudWxsOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVmZXJzUmVkdWNlZE1vdGlvbiA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXM7DQogICAgICAgICAgICAgICAgICAgIGxldCBhdXRvRnJhbWUgPSAwOw0KICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdW1lQXV0b1JvdGF0ZSA9IDA7DQogICAgICAgICAgICAgICAgICAgIGxldCBsb29wV2lkdGggPSAwOw0KICAgICAgICAgICAgICAgICAgICBsZXQgbG9vcFN0YXJ0ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgbGV0IGxvb3BFbmQgPSAwOw0KICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdEF1dG9UaW1lID0gMDsNCiAgICAgICAgICAgICAgICAgICAgbGV0IGlzQXV0b1BhdXNlZCA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICBsZXQgYXV0b1dhdGNoZG9nID0gMDsNCiAgICAgICAgICAgICAgICAgICAgbGV0IGF1dG9GYWxsYmFjayA9IDA7DQogICAgICAgICAgICAgICAgICAgIGxldCBpc05vcm1hbGl6aW5nTG9vcCA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICBsZXQgc2Nyb2xsTm9ybWFsaXplRnJhbWUgPSAwOw0KICAgICAgICAgICAgICAgICAgICBsZXQgcGFnZVByb2dyZXNzRnJhbWUgPSAwOw0KICAgICAgICAgICAgICAgICAgICBsZXQgYXJjaGl2ZVBpblRyaWdnZXIgPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICBsZXQgaXNQYWdlRHJpdmluZ0FyY2hpdmUgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxDYXJkcyA9IEFycmF5LmZyb20ocmFpbC5xdWVyeVNlbGVjdG9yQWxsKCcuYXJjaGl2ZS1jYXJkJykpOw0KDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lQXJjaGl2ZUNhcmQgPSAoY2FyZCwgcG9zaXRpb24pID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lID0gY2FyZC5jbG9uZU5vZGUodHJ1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgICBjbG9uZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lLmRhdGFzZXQubG9vcENsb25lID0gcG9zaXRpb247DQogICAgICAgICAgICAgICAgICAgICAgICBjbG9uZS5xdWVyeVNlbGVjdG9yQWxsKCdhLCBidXR0b24nKS5mb3JFYWNoKChlbCkgPT4gZWwuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZTsNCiAgICAgICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgICAgICBjb25zdCBidWlsZEluZmluaXRlUmFpbCA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYWlsLmRhdGFzZXQubG9vcENsb25lZCA9PT0gJ3RydWUnIHx8IG9yaWdpbmFsQ2FyZHMubGVuZ3RoIDwgMikgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXBlYXRDb3VudCA9IDQ7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcmVwZWF0Q291bnQ7IGluZGV4ICs9IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbENhcmRzLmZvckVhY2goKGNhcmQpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlLmFwcGVuZENoaWxkKGNsb25lQXJjaGl2ZUNhcmQoY2FyZCwgJ2JlZm9yZScpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIuYXBwZW5kQ2hpbGQoY2xvbmVBcmNoaXZlQ2FyZChjYXJkLCAnYWZ0ZXInKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICByYWlsLnByZXBlbmQoYmVmb3JlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJhaWwuYXBwZW5kKGFmdGVyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJhaWwuZGF0YXNldC5sb29wQ2xvbmVkID0gJ3RydWUnOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmFpbC5jbGFzc0xpc3QuYWRkKCdpcy1sb29waW5nJywgJ2lzLWZyZWUtc2Nyb2xsaW5nJyk7DQogICAgICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVhc3VyZUxvb3AgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbHMgPSBBcnJheS5mcm9tKHJhaWwucXVlcnlTZWxlY3RvckFsbCgnLmFyY2hpdmUtY2FyZDpub3QoW2RhdGEtbG9vcC1jbG9uZV0pJykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RPcmlnaW5hbCA9IG9yaWdpbmFsc1swXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RPcmlnaW5hbCA9IG9yaWdpbmFsc1tvcmlnaW5hbHMubGVuZ3RoIC0gMV07DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0T3JpZ2luYWwgfHwgIWxhc3RPcmlnaW5hbCkgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocmFpbCk7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnYXAgPSBwYXJzZUZsb2F0KHN0eWxlcy5jb2x1bW5HYXAgfHwgc3R5bGVzLmdhcCB8fCAnMCcpIHx8IDA7DQogICAgICAgICAgICAgICAgICAgICAgICBsb29wU3RhcnQgPSBNYXRoLm1heCgwLCBmaXJzdE9yaWdpbmFsLm9mZnNldExlZnQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgbG9vcFdpZHRoID0gTWF0aC5tYXgoZ2V0U3RlcCgpLCAobGFzdE9yaWdpbmFsLm9mZnNldExlZnQgKyBsYXN0T3JpZ2luYWwub2Zmc2V0V2lkdGggKyBnYXApIC0gbG9vcFN0YXJ0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BFbmQgPSBsb29wU3RhcnQgKyBsb29wV2lkdGg7DQogICAgICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplTG9vcFBvc2l0aW9uID0gKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb29wV2lkdGggfHwgaXNOb3JtYWxpemluZ0xvb3ApIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGd1YXJkID0gZ2V0TG9vcEd1YXJkKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dExlZnQgPSByYWlsLnNjcm9sbExlZnQ7DQogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV4dExlZnQgPj0gbG9vcEVuZCAtIGd1YXJkKSBuZXh0TGVmdCAtPSBsb29wV2lkdGg7DQogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV4dExlZnQgPCBsb29wU3RhcnQgLSBndWFyZCkgbmV4dExlZnQgKz0gbG9vcFdpZHRoOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKG5leHRMZWZ0IC0gcmFpbC5zY3JvbGxMZWZ0KSA+IDAuNSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTm9ybWFsaXppbmdMb29wID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlsLnNjcm9sbExlZnQgPSBuZXh0TGVmdDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBcmNoaXZlUHJvZ3Jlc3NGcm9tUmFpbCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7IGlzTm9ybWFsaXppbmdMb29wID0gZmFsc2U7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldFN0ZXAgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkID0gcmFpbC5xdWVyeVNlbGVjdG9yKCcuYXJjaGl2ZS1jYXJkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyYWlsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdhcCA9IHBhcnNlRmxvYXQoc3R5bGVzLmNvbHVtbkdhcCB8fCBzdHlsZXMuZ2FwIHx8ICcwJykgfHwgMDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXJkID8gY2FyZC5vZmZzZXRXaWR0aCArIGdhcCA6IE1hdGgubWF4KHJhaWwuY2xpZW50V2lkdGggKiAwLjcyLCAzMjApOw0KICAgICAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRMb29wR3VhcmQgPSAoKSA9PiBNYXRoLm1heChnZXRTdGVwKCkgKiAxLjc1LCByYWlsLmNsaWVudFdpZHRoICogMC4zNSk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldExvb3BUcmF2ZWwgPSAoKSA9PiBNYXRoLm1heChnZXRTdGVwKCksIGxvb3BXaWR0aCB8fCAwKTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF0dXJhbEFyY2hpdmVNb2RlID0gKCkgPT4gIWFyY2hpdmVQaW5UcmlnZ2VyIHx8IHdpbmRvdy5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiA5MDBweCknKS5tYXRjaGVzOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVBcmNoaXZlUHJvZ3Jlc3NGcm9tUmFpbCA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvZ3Jlc3NGaWxsIHx8ICFsb29wV2lkdGgpIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYXZlbCA9IE1hdGgubWF4KDEsIGdldExvb3BUcmF2ZWwoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYXcgPSAoKHJhaWwuc2Nyb2xsTGVmdCAtIGxvb3BTdGFydCkgJSB0cmF2ZWwgKyB0cmF2ZWwpICUgdHJhdmVsOw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCByYXcgLyB0cmF2ZWwpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzRmlsbC5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGVYKCR7cHJvZ3Jlc3MudG9GaXhlZCg0KX0pYDsNCiAgICAgICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0QXJjaGl2ZVByb2dyZXNzID0gKHByb2dyZXNzLCBpbW1lZGlhdGUgPSBmYWxzZSkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2FmZVByb2dyZXNzID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgcHJvZ3Jlc3MpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzc0ZpbGwpIHByb2dyZXNzRmlsbC5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGVYKCR7c2FmZVByb2dyZXNzLnRvRml4ZWQoNCl9KWA7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1tZWRpYXRlICYmICFsb29wV2lkdGgpIG1lYXN1cmVMb29wKCk7DQogICAgICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZUFyY2hpdmVGcm9tUGFnZVNjcm9sbCA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VQcm9ncmVzc0ZyYW1lID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VjdGlvbikgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHNlY3Rpb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1Zpc2libGUgPSByZWN0LmJvdHRvbSA+IDAgJiYgcmVjdC50b3AgPCB3aW5kb3cuaW5uZXJIZWlnaHQ7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNWaXNpYmxlKSBzdGFydEF1dG9Sb3RhdGUoKTsNCiAgICAgICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdEFyY2hpdmVQcm9ncmVzc1VwZGF0ZSA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmNoaXZlUGluVHJpZ2dlcikgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2VQcm9ncmVzc0ZyYW1lKSByZXR1cm47DQogICAgICAgICAgICAgICAgICAgICAgICBwYWdlUHJvZ3Jlc3NGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVBcmNoaXZlRnJvbVBhZ2VTY3JvbGwpOw0KICAgICAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgICAgICBjb25zdCBtb3ZlQXJjaGl2ZSA9IChkaXJlY3Rpb24pID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9vcFdpZHRoKSBtZWFzdXJlTG9vcCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dExlZnQgPSByYWlsLnNjcm9sbExlZnQgKyBnZXRTdGVwKCkgKiBkaXJlY3Rpb247DQogICAgICAgICAgICAgICAgICAgICAgICByYWlsLmNsYXNzTGlzdC5hZGQoJ2lzLWZyZWUtc2Nyb2xsaW5nJyk7DQogICAgICAgICAgICAgICAgICAgICAgICByYWlsLnNjcm9sbFRvKHsgbGVmdDogbmV4dExlZnQsIGJlaGF2aW9yOiBwcmVmZXJzUmVkdWNlZE1vdGlvbiA\/ICdhdXRvJyA6ICdzbW9vdGgnIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQobm9ybWFsaXplTG9vcFBvc2l0aW9uLCA0NjApOw0KICAgICAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgICAgICBjb25zdCBzdG9wQXV0b1JvdGF0ZSA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0b1BhdXNlZCA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0b0ZyYW1lKSBjYW5jZWxBbmltYXRpb25GcmFtZShhdXRvRnJhbWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9GYWxsYmFjaykgd2luZG93LmNsZWFySW50ZXJ2YWwoYXV0b0ZhbGxiYWNrKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bWVBdXRvUm90YXRlKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHJlc3VtZUF1dG9Sb3RhdGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0ZyYW1lID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9GYWxsYmFjayA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVBdXRvUm90YXRlID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBdXRvVGltZSA9IDA7DQogICAgICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0QXV0b1JvdGF0ZSA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVmZXJzUmVkdWNlZE1vdGlvbiB8fCBhdXRvRmFsbGJhY2spIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmNoaXZlUGluVHJpZ2dlciAmJiBhcmNoaXZlUGluVHJpZ2dlci5pc0FjdGl2ZSkgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRvUGF1c2VkID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICByYWlsLmNsYXNzTGlzdC5hZGQoJ2lzLWZyZWUtc2Nyb2xsaW5nJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGVlZCA9IDU4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0ZhbGxiYWNrID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBdXRvUGF1c2VkIHx8IGRvY3VtZW50LmhpZGRlbikgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaWwuc2Nyb2xsTGVmdCArPSBNYXRoLm1heCgxLjI1LCBzcGVlZCAvIDQyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVMb29wUG9zaXRpb24oKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBcmNoaXZlUHJvZ3Jlc3NGcm9tUmFpbCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTYpOw0KICAgICAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXVzZVRoZW5SZXN1bWVBdXRvUm90YXRlID0gKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgc3RvcEF1dG9Sb3RhdGUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzc0ZpbGwpIHdpbmRvdy5zZXRUaW1lb3V0KHJlcXVlc3RBcmNoaXZlUHJvZ3Jlc3NVcGRhdGUsIDQyMCk7DQogICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVBdXRvUm90YXRlID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGFyY2hpdmVQaW5UcmlnZ2VyICYmIGFyY2hpdmVQaW5UcmlnZ2VyLmlzQWN0aXZlKSkgc3RhcnRBdXRvUm90YXRlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LCAxODAwKTsNCiAgICAgICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICAgICAgY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlQXJjaGl2ZShjb250cm9sLmRhdGFzZXQuZGlyID09PSAncHJldicgPyAtMSA6IDEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlVGhlblJlc3VtZUF1dG9Sb3RhdGUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICByYWlsLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgKGV2ZW50KSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJjaGl2ZVBpblRyaWdnZXIgJiYgYXJjaGl2ZVBpblRyaWdnZXIuaXNBY3RpdmUpIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhldmVudC5kZWx0YVgpID4gTWF0aC5hYnMoZXZlbnQuZGVsdGFZKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlVGhlblJlc3VtZUF1dG9Sb3RhdGUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlsLnNjcm9sbExlZnQgKz0gZXZlbnQuZGVsdGFYOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZUxvb3BQb3NpdGlvbigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUFyY2hpdmVQcm9ncmVzc0Zyb21SYWlsKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0sIHsgcGFzc2l2ZTogdHJ1ZSB9KTsNCiAgICAgICAgICAgICAgICAgICAgcmFpbC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFyY2hpdmVQaW5UcmlnZ2VyICYmIGFyY2hpdmVQaW5UcmlnZ2VyLmlzQWN0aXZlKSB8fCBpc1BhZ2VEcml2aW5nQXJjaGl2ZSkgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbE5vcm1hbGl6ZUZyYW1lKSByZXR1cm47DQogICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxOb3JtYWxpemVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsTm9ybWFsaXplRnJhbWUgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZUxvb3BQb3NpdGlvbigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUFyY2hpdmVQcm9ncmVzc0Zyb21SYWlsKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgfSwgeyBwYXNzaXZlOiB0cnVlIH0pOw0KDQogICAgICAgICAgICAgICAgICAgIHJhaWwuYWRkRXZlbnRMaXN0ZW5lcignYXJjaGl2ZTppMThuLXN5bmMnLCAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVMb29wKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvb3BXaWR0aCAmJiByYWlsLnNjcm9sbExlZnQgPCBsb29wU3RhcnQpIHJhaWwuc2Nyb2xsTGVmdCA9IGxvb3BTdGFydDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVMb29wUG9zaXRpb24oKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBcmNoaXZlUHJvZ3Jlc3NGcm9tUmFpbCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmNoaXZlUGluVHJpZ2dlcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlUGluVHJpZ2dlci5yZWZyZXNoKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyY2hpdmVQcm9ncmVzcyhhcmNoaXZlUGluVHJpZ2dlci5wcm9ncmVzcyB8fCAwLCB0cnVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QXJjaGl2ZVByb2dyZXNzVXBkYXRlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByYWlsLmRhdGFzZXQubmVlZHNMb29wUmVtZWFzdXJlOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgIGxldCBpc0RyYWdnaW5nID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgIGxldCBzdGFydFggPSAwOw0KICAgICAgICAgICAgICAgICAgICBsZXQgc3RhcnRMZWZ0ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgbGV0IGVkZ2VTcGVlZCA9IDA7DQogICAgICAgICAgICAgICAgICAgIGxldCBlZGdlRnJhbWUgPSAwOw0KDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b3BFZGdlU2Nyb2xsID0gKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgZWRnZVNwZWVkID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlRnJhbWUpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGVkZ2VGcmFtZSk7DQogICAgICAgICAgICAgICAgICAgICAgICBlZGdlRnJhbWUgPSAwOw0KICAgICAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJ1bkVkZ2VTY3JvbGwgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2VTcGVlZCB8fCBpc0RyYWdnaW5nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZUZyYW1lID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICByYWlsLmNsYXNzTGlzdC5hZGQoJ2lzLWZyZWUtc2Nyb2xsaW5nJyk7DQogICAgICAgICAgICAgICAgICAgICAgICByYWlsLnNjcm9sbExlZnQgKz0gZWRnZVNwZWVkOw0KICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplTG9vcFBvc2l0aW9uKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBlZGdlRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocnVuRWRnZVNjcm9sbCk7DQogICAgICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICAgICAgcmFpbC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIChldmVudCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICBzdG9wQXV0b1JvdGF0ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgc3RvcEVkZ2VTY3JvbGwoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJhaWwuY2xhc3NMaXN0LmFkZCgnaXMtZnJlZS1zY3JvbGxpbmcnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7DQogICAgICAgICAgICAgICAgICAgICAgICBzdGFydExlZnQgPSByYWlsLnNjcm9sbExlZnQ7DQogICAgICAgICAgICAgICAgICAgICAgICByYWlsLnNldFBvaW50ZXJDYXB0dXJlPy4oZXZlbnQucG9pbnRlcklkKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZUVkZ2VNb3ZlID0gKGV2ZW50KSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEcmFnZ2luZykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaWwuc2Nyb2xsTGVmdCA9IHN0YXJ0TGVmdCAtIChldmVudC5jbGllbnRYIC0gc3RhcnRYKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVMb29wUG9zaXRpb24oKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gcmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2UgPSBNYXRoLm1pbigxODAsIHJlY3Qud2lkdGggKiAwLjE4KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRab25lID0gZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0Wm9uZSA9IHJlY3QucmlnaHQgLSBldmVudC5jbGllbnRYOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRab25lIDwgZWRnZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2VTcGVlZCA9IC1NYXRoLm1heCg0LCAoZWRnZSAtIGxlZnRab25lKSAvIGVkZ2UgKiAxOCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0Wm9uZSA8IGVkZ2UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlU3BlZWQgPSBNYXRoLm1heCg0LCAoZWRnZSAtIHJpZ2h0Wm9uZSkgLyBlZGdlICogMTgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wRWRnZVNjcm9sbCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZUZyYW1lKSBlZGdlRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocnVuRWRnZVNjcm9sbCk7DQogICAgICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgICAgIHJhaWwuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBoYW5kbGVFZGdlTW92ZSk7DQogICAgICAgICAgICAgICAgICAgIHJhaWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgaGFuZGxlRWRnZU1vdmUpOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBzdG9wRHJhZyA9IChldmVudCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0RyYWdnaW5nKSByZXR1cm47DQogICAgICAgICAgICAgICAgICAgICAgICBpc0RyYWdnaW5nID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQ\/LnBvaW50ZXJJZCAhPT0gdW5kZWZpbmVkKSByYWlsLnJlbGVhc2VQb2ludGVyQ2FwdHVyZT8uKGV2ZW50LnBvaW50ZXJJZCk7DQogICAgICAgICAgICAgICAgICAgICAgICBwYXVzZVRoZW5SZXN1bWVBdXRvUm90YXRlKCk7DQogICAgICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgICAgIHJhaWwuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgc3RvcERyYWcpOw0KICAgICAgICAgICAgICAgICAgICByYWlsLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCBzdG9wRHJhZyk7DQogICAgICAgICAgICAgICAgICAgIHJhaWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHN0b3BBdXRvUm90YXRlLCB7IHBhc3NpdmU6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgICAgIHJhaWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVMb29wUG9zaXRpb24oKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlVGhlblJlc3VtZUF1dG9Sb3RhdGUoKTsNCiAgICAgICAgICAgICAgICAgICAgfSwgeyBwYXNzaXZlOiB0cnVlIH0pOw0KICAgICAgICAgICAgICAgICAgICByYWlsLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScsIChldmVudCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgc3RvcERyYWcoZXZlbnQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgc3RvcEVkZ2VTY3JvbGwoKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIHJhaWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHN0b3BFZGdlU2Nyb2xsKTsNCiAgICAgICAgICAgICAgICAgICAgcmFpbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgc3RvcEVkZ2VTY3JvbGwoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBcmNoaXZlUHJvZ3Jlc3NVcGRhdGUoKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIGJ1aWxkSW5maW5pdGVSYWlsKCk7DQogICAgICAgICAgICAgICAgICAgIG1lYXN1cmVMb29wKCk7DQogICAgICAgICAgICAgICAgICAgIGlmIChsb29wV2lkdGggJiYgcmFpbC5zY3JvbGxMZWZ0IDwgbG9vcFN0YXJ0KSByYWlsLnNjcm9sbExlZnQgPSBsb29wU3RhcnQ7DQogICAgICAgICAgICAgICAgICAgIHVwZGF0ZUFyY2hpdmVQcm9ncmVzc0Zyb21SYWlsKCk7DQogICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBcmNoaXZlUHJvZ3Jlc3NVcGRhdGUoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93ICYmIHNlY3Rpb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyY2hpdmVWaXNpYmlsaXR5T2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBdXRvUm90YXRlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wQXV0b1JvdGF0ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LCB7IHRocmVzaG9sZDogMC4xOCB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmVWaXNpYmlsaXR5T2JzZXJ2ZXIub2JzZXJ2ZShzZWN0aW9uKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZUxvb3AoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb29wV2lkdGggJiYgKHJhaWwuc2Nyb2xsTGVmdCA8IGxvb3BTdGFydCAtIGdldExvb3BHdWFyZCgpIHx8IHJhaWwuc2Nyb2xsTGVmdCA+IGxvb3BFbmQgKyBnZXRMb29wR3VhcmQoKSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlsLnNjcm9sbExlZnQgPSBsb29wU3RhcnQ7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBcmNoaXZlUHJvZ3Jlc3NGcm9tUmFpbCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFyY2hpdmVQcm9ncmVzc1VwZGF0ZSgpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgY29uc3QgaW5pdEFkYXB0aXZlU2NlbmVzID0gKCkgPT4gew0KICAgICAgICAgICAgICAgIGNvbnN0IHNjZW5lcyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc2NlbmUtYmddJykpLmZpbHRlcigoc2NlbmUpID0+IHNjZW5lLmlkICE9PSAnZXhwbG9yZScpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGJhY2tkcm9wSW1hZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Nyb2xsLXNjZW5lLWltYWdlJyk7DQogICAgICAgICAgICAgICAgaWYgKCFzY2VuZXMubGVuZ3RoKSByZXR1cm47DQoNCiAgICAgICAgICAgICAgICBjb25zdCBhcHBseVNjZW5lID0gKHNjZW5lKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGJnID0gc2NlbmUuZGF0YXNldC5zY2VuZUJnIHx8ICcjMDkwYjBhJzsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmcgPSBzY2VuZS5kYXRhc2V0LnNjZW5lRmcgfHwgJyNmMmYwZTgnOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBhY2NlbnQgPSBzY2VuZS5kYXRhc2V0LnNjZW5lQWNjZW50IHx8ICcjMDBmZmNjJzsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBzY2VuZS5kYXRhc2V0LnNjZW5lSW1hZ2UgfHwgJyc7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wYWNpdHkgPSBzY2VuZS5kYXRhc2V0LnNjZW5lT3BhY2l0eSB8fCAnLjEyJzsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNMaWdodCA9IGJnLnRvTG93ZXJDYXNlKCkgPT09ICcjZmZmZmZmJyB8fCBiZy50b0xvd2VyQ2FzZSgpID09PSAnI2ZmZic7DQoNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zY2VuZS1iZycsIGJnKTsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zY2VuZS1mZycsIGZnKTsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zY2VuZS1hY2NlbnQnLCBhY2NlbnQpOw0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnNldFByb3BlcnR5KCctLXNjZW5lLWltYWdlLW9wYWNpdHknLCBvcGFjaXR5KTsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdzY2VuZS1ob21lJywgc2NlbmUuaWQgPT09ICdob21lJyk7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGJhY2tkcm9wSW1hZ2UgJiYgc2NlbmUuaWQgIT09ICdob21lJyAmJiBpbWFnZSAmJiAhYmFja2Ryb3BJbWFnZS5zcmMuZW5kc1dpdGgoaW1hZ2UpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBiYWNrZHJvcEltYWdlLnNyYyA9IGltYWdlOw0KICAgICAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3BJbWFnZS5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIHNjZW5lcy5mb3JFYWNoKChpdGVtKSA9PiBpdGVtLmNsYXNzTGlzdC50b2dnbGUoJ3NjZW5lLWlzLWFjdGl2ZScsIGl0ZW0gPT09IHNjZW5lKSk7DQogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnc2NlbmUtbGlnaHQnLCBpc0xpZ2h0KTsNCiAgICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgc2NlbmVzLmZvckVhY2goKHNjZW5lKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGJnID0gc2NlbmUuZGF0YXNldC5zY2VuZUJnIHx8ICcjMDkwYjBhJzsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmcgPSBzY2VuZS5kYXRhc2V0LnNjZW5lRmcgfHwgJyNmMmYwZTgnOw0KICAgICAgICAgICAgICAgICAgICBjb25zdCBhY2NlbnQgPSBzY2VuZS5kYXRhc2V0LnNjZW5lQWNjZW50IHx8ICcjMDBmZmNjJzsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNMaWdodCA9IGJnLnRvTG93ZXJDYXNlKCkgPT09ICcjZmZmZmZmJyB8fCBiZy50b0xvd2VyQ2FzZSgpID09PSAnI2ZmZic7DQogICAgICAgICAgICAgICAgICAgIHNjZW5lLnN0eWxlLmNvbG9yID0gZmc7DQogICAgICAgICAgICAgICAgICAgIHNjZW5lLnN0eWxlLnNldFByb3BlcnR5KCctLWx1bWUnLCBhY2NlbnQpOw0KICAgICAgICAgICAgICAgICAgICBzY2VuZS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zY2VuZS1sb2NhbC1hY2NlbnQnLCBhY2NlbnQpOw0KICAgICAgICAgICAgICAgICAgICBzY2VuZS5jbGFzc0xpc3QudG9nZ2xlKCdzY2VuZS1saWdodC1zZWN0aW9uJywgaXNMaWdodCk7DQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICBpZiAoISgnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykpIHsNCiAgICAgICAgICAgICAgICAgICAgYXBwbHlTY2VuZShzY2VuZXNbMF0pOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgbGV0IGFjdGl2ZVNjZW5lID0gbnVsbDsNCiAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4gew0KICAgICAgICAgICAgICAgICAgICBjb25zdCB2aXNpYmxlID0gZW50cmllcw0KICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmlzSW50ZXJzZWN0aW5nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIuaW50ZXJzZWN0aW9uUmF0aW8gLSBhLmludGVyc2VjdGlvblJhdGlvKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2libGVbMF0\/LnRhcmdldCAmJiB2aXNpYmxlWzBdLnRhcmdldCAhPT0gYWN0aXZlU2NlbmUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVNjZW5lID0gdmlzaWJsZVswXS50YXJnZXQ7DQogICAgICAgICAgICAgICAgICAgICAgICBhcHBseVNjZW5lKGFjdGl2ZVNjZW5lKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0sIHsgcm9vdDogbnVsbCwgcm9vdE1hcmdpbjogJy04JSAwcHggLTgyJSAwcHgnLCB0aHJlc2hvbGQ6IFswLCAwLjA4LCAwLjI0LCAwLjQ4XSB9KTsNCg0KICAgICAgICAgICAgICAgIHNjZW5lcy5mb3JFYWNoKChzY2VuZSkgPT4gb2JzZXJ2ZXIub2JzZXJ2ZShzY2VuZSkpOw0KICAgICAgICAgICAgICAgIGFwcGx5U2NlbmUoc2NlbmVzWzBdKTsNCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIGNvbnN0IGdldFByZW1pdW1OYXJyYXRpdmVDaGFwdGVycyA9ICgpID0+IGN1cnJlbnRMYW5nID09PSAnY24nID8gWw0KICAgICAgICAgICAgICAgIHsgaWQ6ICdob21lJywgaW5kZXg6ICcwMScsIHRpdGxlOiAn6aaW5bGP5L+h5Y+3JywgbGFiZWw6ICfpppblsY8nIH0sDQogICAgICAgICAgICAgICAgeyBpZDogJ3ZpZGVvLXNjcm9sbC10cmFjaycsIGluZGV4OiAnMDInLCB0aXRsZTogJ+W9seWDj+WcuuWfnycsIGxhYmVsOiAn5b2x5YOPJyB9LA0KICAgICAgICAgICAgICAgIHsgaWQ6ICdjYWxpYnJlLXRoZWF0cmUnLCBpbmRleDogJzAzJywgdGl0bGU6ICfmnLroiq\/liaflnLonLCBsYWJlbDogJ+acuuiKrycgfSwNCiAgICAgICAgICAgICAgICB7IGlkOiAnc2hvd2Nhc2UtM2QnLCBpbmRleDogJzA0JywgdGl0bGU6ICfkuqflk4HoiJ7lj7AnLCBsYWJlbDogJ+WxleekuicgfSwNCiAgICAgICAgICAgICAgICB7IGlkOiAnYXRlbGllci1wcm9jZXNzJywgaW5kZXg6ICcwNScsIHRpdGxlOiAn5Yi26KGo5bel6Im6JywgbGFiZWw6ICflt6XoibonIH0sDQogICAgICAgICAgICAgICAgeyBpZDogJ2V4cGxvcmUnLCBpbmRleDogJzA2JywgdGl0bGU6ICfns7vliJflj5HluIMnLCBsYWJlbDogJ+ezu+WIlycgfQ0KICAgICAgICAgICAgXSA6IFsNCiAgICAgICAgICAgICAgICB7IGlkOiAnaG9tZScsIGluZGV4OiAnMDEnLCB0aXRsZTogJ0ZJUlNUIFNJR05BTCcsIGxhYmVsOiAnQ2FtcGFpZ24nIH0sDQogICAgICAgICAgICAgICAgeyBpZDogJ3ZpZGVvLXNjcm9sbC10cmFjaycsIGluZGV4OiAnMDInLCB0aXRsZTogJ0NJTkVNQVRJQyBGSUVMRCcsIGxhYmVsOiAnRmlsbScgfSwNCiAgICAgICAgICAgICAgICB7IGlkOiAnY2FsaWJyZS10aGVhdHJlJywgaW5kZXg6ICcwMycsIHRpdGxlOiAnQ0FMSUJSRSBUSEVBVFJFJywgbGFiZWw6ICdNb3ZlbWVudCcgfSwNCiAgICAgICAgICAgICAgICB7IGlkOiAnc2hvd2Nhc2UtM2QnLCBpbmRleDogJzA0JywgdGl0bGU6ICdQUk9EVUNUIFNUQUdFJywgbGFiZWw6ICdEaXNwbGF5JyB9LA0KICAgICAgICAgICAgICAgIHsgaWQ6ICdhdGVsaWVyLXByb2Nlc3MnLCBpbmRleDogJzA1JywgdGl0bGU6ICdBVEVMSUVSIFBST0NFU1MnLCBsYWJlbDogJ0NyYWZ0JyB9LA0KICAgICAgICAgICAgICAgIHsgaWQ6ICdleHBsb3JlJywgaW5kZXg6ICcwNicsIHRpdGxlOiAnQ09MTEVDVElPTiBSRUxFQVNFJywgbGFiZWw6ICdTZXJpZXMnIH0NCiAgICAgICAgICAgIF07DQoNCiAgICAgICAgICAgIGNvbnN0IHN5bmNQcmVtaXVtTmFycmF0aXZlTGFuZ3VhZ2UgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgY29uc3QgY2hhcHRlckNvbmZpZyA9IGdldFByZW1pdW1OYXJyYXRpdmVDaGFwdGVycygpOw0KICAgICAgICAgICAgICAgIGNoYXB0ZXJDb25maWcuZm9yRWFjaCgoY29uZmlnKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29uZmlnLmlkKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbCkgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICBlbC5kYXRhc2V0LmNoYXB0ZXJJbmRleCA9IGNvbmZpZy5pbmRleDsNCiAgICAgICAgICAgICAgICAgICAgZWwuZGF0YXNldC5jaGFwdGVyVGl0bGUgPSBjb25maWcudGl0bGU7DQogICAgICAgICAgICAgICAgICAgIGVsLmRhdGFzZXQuY2hhcHRlckxhYmVsID0gY29uZmlnLmxhYmVsOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByZW1pdW0tbmFycmF0aXZlLWxhYmVsJyk7DQogICAgICAgICAgICAgICAgaWYgKGxhYmVsKSBsYWJlbC50ZXh0Q29udGVudCA9IGN1cnJlbnRMYW5nID09PSAnY24nID8gJ1pET1hJRyDlj5nkuosnIDogJ1pET1hJRyBTVE9SWSc7DQogICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICBjb25zdCBpbml0UHJlbWl1bU5hcnJhdGl2ZSA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICBjb25zdCBjaGFwdGVyQ29uZmlnID0gZ2V0UHJlbWl1bU5hcnJhdGl2ZUNoYXB0ZXJzKCk7DQogICAgICAgICAgICAgICAgY29uc3QgY2hhcHRlcnMgPSBjaGFwdGVyQ29uZmlnDQogICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbmZpZykgPT4gKHsgY29uZmlnLCBlbDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29uZmlnLmlkKSB9KSkNCiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5lbCk7DQogICAgICAgICAgICAgICAgaWYgKCFjaGFwdGVycy5sZW5ndGgpIHJldHVybjsNCg0KICAgICAgICAgICAgICAgIGNoYXB0ZXJzLmZvckVhY2goKHsgY29uZmlnLCBlbCB9KSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ3ByZW1pdW0tbmFycmF0aXZlLWNoYXB0ZXInKTsNCiAgICAgICAgICAgICAgICAgICAgZWwuZGF0YXNldC5jaGFwdGVySW5kZXggPSBjb25maWcuaW5kZXg7DQogICAgICAgICAgICAgICAgICAgIGVsLmRhdGFzZXQuY2hhcHRlclRpdGxlID0gY29uZmlnLnRpdGxlOw0KICAgICAgICAgICAgICAgICAgICBlbC5kYXRhc2V0LmNoYXB0ZXJMYWJlbCA9IGNvbmZpZy5sYWJlbDsNCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IHVpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQogICAgICAgICAgICAgICAgdWkuY2xhc3NOYW1lID0gJ3ByZW1pdW0tbmFycmF0aXZlLXVpJzsNCiAgICAgICAgICAgICAgICB1aS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsNCiAgICAgICAgICAgICAgICB1aS5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9InByZW1pdW0tbmFycmF0aXZlLWxhYmVsIj4ke2N1cnJlbnRMYW5nID09PSAnY24nID8gJ1pET1hJRyDlj5nkuosnIDogJ1pET1hJRyBTVE9SWSd9PC9zcGFuPjxzcGFuIGNsYXNzPSJwcmVtaXVtLW5hcnJhdGl2ZS10cmFjayI+PHNwYW4gY2xhc3M9InByZW1pdW0tbmFycmF0aXZlLWZpbGwiPjwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9InByZW1pdW0tbmFycmF0aXZlLWNvdW50Ij4wMSAvIDA2PC9zcGFuPmA7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh1aSk7DQogICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB1aS5xdWVyeVNlbGVjdG9yKCcucHJlbWl1bS1uYXJyYXRpdmUtY291bnQnKTsNCg0KICAgICAgICAgICAgICAgIGNvbnN0IHNldEFjdGl2ZUNoYXB0ZXIgPSAoaXRlbSkgPT4gew0KICAgICAgICAgICAgICAgICAgICBjaGFwdGVycy5mb3JFYWNoKCh7IGVsIH0pID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoJ2NoYXB0ZXItaXMtYWN0aXZlJywgZWwgPT09IGl0ZW0uZWwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnY2hhcHRlci1pcy1sZWF2aW5nJyk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3ByZW1pdW0tbmFycmF0aXZlLWFjdGl2ZScpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQpIGNvdW50LnRleHRDb250ZW50ID0gYCR7aXRlbS5jb25maWcuaW5kZXh9IC8gJHtTdHJpbmcoY2hhcHRlcnMubGVuZ3RoKS5wYWRTdGFydCgyLCAnMCcpfWA7DQogICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LlNjcm9sbFRyaWdnZXIgPT09ICd1bmRlZmluZWQnKSB7DQogICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZUNoYXB0ZXIoY2hhcHRlcnNbMF0pOw0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnNldFByb3BlcnR5KCctLXByZW1pdW0tbmFycmF0aXZlLXByb2dyZXNzJywgJzAnKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGNoYXB0ZXJzLmZvckVhY2goKGl0ZW0sIGNoYXB0ZXJJbmRleCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBTY3JvbGxUcmlnZ2VyLmNyZWF0ZSh7DQogICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyOiBpdGVtLmVsLA0KICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6ICd0b3AgY2VudGVyJywNCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogJ2JvdHRvbSBjZW50ZXInLA0KICAgICAgICAgICAgICAgICAgICAgICAgb25FbnRlcjogKCkgPT4gc2V0QWN0aXZlQ2hhcHRlcihpdGVtKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIG9uRW50ZXJCYWNrOiAoKSA9PiBzZXRBY3RpdmVDaGFwdGVyKGl0ZW0pLA0KICAgICAgICAgICAgICAgICAgICAgICAgb25MZWF2ZTogKCkgPT4gaXRlbS5lbC5jbGFzc0xpc3QuYWRkKCdjaGFwdGVyLWlzLWxlYXZpbmcnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIG9uTGVhdmVCYWNrOiAoKSA9PiBpdGVtLmVsLmNsYXNzTGlzdC5hZGQoJ2NoYXB0ZXItaXMtbGVhdmluZycpDQogICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgIFNjcm9sbFRyaWdnZXIuY3JlYXRlKHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXI6IGl0ZW0uZWwsDQogICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogJ3RvcCBib3R0b20nLA0KICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiAnYm90dG9tIHRvcCcsDQogICAgICAgICAgICAgICAgICAgICAgICBzY3J1YjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIG9uVXBkYXRlOiAoc2VsZikgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gTWF0aC5tYXgoY2hhcHRlcnMubGVuZ3RoIC0gMSwgMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcHRlclByb2dyZXNzID0gKGNoYXB0ZXJJbmRleCArIHNlbGYucHJvZ3Jlc3MpIC8gY2hhcHRlcnMubGVuZ3RoOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJlbWl1bS1uYXJyYXRpdmUtcHJvZ3Jlc3MnLCBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBjaGFwdGVyUHJvZ3Jlc3MpKS50b0ZpeGVkKDQpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5wcm9ncmVzcyA+IDAuMDIgJiYgc2VsZi5wcm9ncmVzcyA8IDAuOTgpIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgncHJlbWl1bS1uYXJyYXRpdmUtYWN0aXZlJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgU2Nyb2xsVHJpZ2dlci5jcmVhdGUoew0KICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyOiBjaGFwdGVyc1swXS5lbCwNCiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6ICd0b3AgYm90dG9tJywNCiAgICAgICAgICAgICAgICAgICAgZW5kVHJpZ2dlcjogY2hhcHRlcnNbY2hhcHRlcnMubGVuZ3RoIC0gMV0uZWwsDQogICAgICAgICAgICAgICAgICAgIGVuZDogJ2JvdHRvbSB0b3AnLA0KICAgICAgICAgICAgICAgICAgICBvbkxlYXZlOiAoKSA9PiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3ByZW1pdW0tbmFycmF0aXZlLWFjdGl2ZScpLA0KICAgICAgICAgICAgICAgICAgICBvbkxlYXZlQmFjazogKCkgPT4gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdwcmVtaXVtLW5hcnJhdGl2ZS1hY3RpdmUnKQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGNvbnN0IGluaXRQcmVsb2FkZXIgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgY29uc3QgcHJlbG9hZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWxvYWRlcicpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJlbG9hZGVyLWNvdW50ZXInKTsNCiAgICAgICAgICAgICAgICBjb25zdCBsaW5lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWxvYWRlci1wcm9ncmVzcy1saW5lJyk7DQogICAgICAgICAgICAgICAgaWYgKCFwcmVsb2FkZXIpIHsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdpbnRyby1sb2FkaW5nJywgJ25vLXNjcm9sbCcpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgY29uc3QgZmluaXNoID0gKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICBwcmVsb2FkZXIuY2xhc3NMaXN0LmFkZCgncHJlbG9hZGVyLWhpZGUnKTsNCiAgICAgICAgICAgICAgICAgICAgcHJlbG9hZGVyLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOw0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2ludHJvLWxvYWRpbmcnLCAnbm8tc2Nyb2xsJyk7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByZWxvYWRlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgICAgICAgICB9LCA3ODApOw0KICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGdzYXAgIT09ICd1bmRlZmluZWQnKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0geyB2YWx1ZTogMCB9Ow0KICAgICAgICAgICAgICAgICAgICBnc2FwLnRvKHN0YXRlLCB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMTAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDEuODUsCiAgICAgICAgICAgICAgICAgICAgICAgIGVhc2U6ICdwb3dlcjIub3V0JywNCiAgICAgICAgICAgICAgICAgICAgICAgIG9uVXBkYXRlOiAoKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBNYXRoLnJvdW5kKHN0YXRlLnZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlcikgY291bnRlci50ZXh0Q29udGVudCA9IFN0cmluZyh2YWx1ZSkucGFkU3RhcnQoMywgJzAnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluZSkgbGluZS5zdHlsZS53aWR0aCA9IGAke3ZhbHVlfSVgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWxvYWRlci5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1sb2FkZXItcHJvZ3Jlc3MnLCBgJHt2YWx1ZX0lYCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4gd2luZG93LnNldFRpbWVvdXQoZmluaXNoLCAyNjApCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gMDsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBNYXRoLm1pbigxMDAsIHZhbHVlICsgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlcikgY291bnRlci50ZXh0Q29udGVudCA9IFN0cmluZyh2YWx1ZSkucGFkU3RhcnQoMywgJzAnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lKSBsaW5lLnN0eWxlLndpZHRoID0gYCR7dmFsdWV9JWA7DQogICAgICAgICAgICAgICAgICAgICAgICBwcmVsb2FkZXIuc3R5bGUuc2V0UHJvcGVydHkoJy0tbG9hZGVyLXByb2dyZXNzJywgYCR7dmFsdWV9JWApOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID49IDEwMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRpbWVyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmaW5pc2gsIDE4MCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0sIDU2KTsKICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIGluaXRQcmVsb2FkZXIoKTsNCiAgICAgICAgICAgIGluaXRQcmVzc0ZlZWRiYWNrKCk7DQogICAgICAgICAgICBpbml0QmFja1RvVG9wKCk7DQogICAgICAgICAgICBpbml0TGF6eVZpZGVvcygpOw0KICAgICAgICAgICAgaW5pdEhvcml6b250YWxSYWlscygpOw0KICAgICAgICAgICAgaW5pdEFkYXB0aXZlU2NlbmVzKCk7DQogICAgICAgICAgICBpbml0UHJlbWl1bU5hcnJhdGl2ZSgpOw0KICAgICAgICAgICAgaW5pdEhlcm9DYXJvdXNlbCgpOw0KICAgICAgICAgICAgc3dpdGNoTGFuZygnY24nKTsNCg0KICAgICAgICB9KTsNCiAgICA8L3NjcmlwdD4NCjxzY3JpcHQgaWQ9Inpkb3hpZy1wcm9kdWN0aW9uLXZpZGVvLWd1YXJkIj4KICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgZnVuY3Rpb24gYWN0aXZhdGVWaWRlbyh2aWRlbykgewogICAgICAgICAgICBpZiAoIXZpZGVvKSByZXR1cm47CiAgICAgICAgICAgIHZpZGVvLm11dGVkID0gdHJ1ZTsKICAgICAgICAgICAgdmlkZW8ucGxheXNJbmxpbmUgPSB0cnVlOwogICAgICAgICAgICB2aWRlby5zZXRBdHRyaWJ1dGUoJ211dGVkJywgJycpOwogICAgICAgICAgICB2aWRlby5zZXRBdHRyaWJ1dGUoJ3BsYXlzaW5saW5lJywgJycpOwogICAgICAgICAgICB2aWRlby5xdWVyeVNlbGVjdG9yQWxsKCdzb3VyY2VbZGF0YS1zcmNdJykuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7CiAgICAgICAgICAgICAgICBzb3VyY2Uuc3JjID0gc291cmNlLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKTsKICAgICAgICAgICAgICAgIHNvdXJjZS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc3JjJyk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpZiAoIXZpZGVvLmN1cnJlbnRTcmMpIHZpZGVvLmxvYWQoKTsKICAgICAgICAgICAgdmlkZW8ucGxheSgpLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHByZXBhcmVWaWRlbyh2aWRlbykgewogICAgICAgICAgICBpZiAoIXZpZGVvKSByZXR1cm47CiAgICAgICAgICAgIHZpZGVvLm11dGVkID0gdHJ1ZTsKICAgICAgICAgICAgdmlkZW8ucGxheXNJbmxpbmUgPSB0cnVlOwogICAgICAgICAgICB2aWRlby5zZXRBdHRyaWJ1dGUoJ211dGVkJywgJycpOwogICAgICAgICAgICB2aWRlby5zZXRBdHRyaWJ1dGUoJ3BsYXlzaW5saW5lJywgJycpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcGF1c2VEaXN0YW50VmlkZW8odmlkZW8pIHsKICAgICAgICAgICAgaWYgKCF2aWRlbyB8fCB2aWRlby5wYXVzZWQpIHJldHVybjsKICAgICAgICAgICAgdmlkZW8ucGF1c2UoKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGFjdGl2YXRlVmlzaWJsZVZpZGVvcygpIHsKICAgICAgICAgICAgdmFyIHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IDkwMDsKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgndmlkZW8nKS5mb3JFYWNoKGZ1bmN0aW9uICh2aWRlbykgewogICAgICAgICAgICAgICAgcHJlcGFyZVZpZGVvKHZpZGVvKTsKICAgICAgICAgICAgICAgIHZhciByZWN0ID0gdmlkZW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgICAgICB2YXIgbmVhclZpZXdwb3J0ID0gcmVjdC5ib3R0b20gPiAtdmlld3BvcnRIICogMC40NSAmJiByZWN0LnRvcCA8IHZpZXdwb3J0SCAqIDAuNzI7CiAgICAgICAgICAgICAgICBpZiAobmVhclZpZXdwb3J0KSBhY3RpdmF0ZVZpZGVvKHZpZGVvKTsKICAgICAgICAgICAgICAgIGVsc2UgcGF1c2VEaXN0YW50VmlkZW8odmlkZW8pOwogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHsKICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGFjdGl2YXRlVmlzaWJsZVZpZGVvcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWN0aXZhdGVWaXNpYmxlVmlkZW9zKCk7CiAgICAgICAgfQogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgYWN0aXZhdGVWaXNpYmxlVmlkZW9zKTsKICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgYWN0aXZhdGVWaXNpYmxlVmlkZW9zLCB7IHBhc3NpdmU6IHRydWUgfSk7CiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGFjdGl2YXRlVmlzaWJsZVZpZGVvcywgeyBwYXNzaXZlOiB0cnVlIH0pOwogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIGFjdGl2YXRlVmlzaWJsZVZpZGVvcywgeyBvbmNlOiB0cnVlIH0pOwogICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGFjdGl2YXRlVmlzaWJsZVZpZGVvcywgOTAwKTsKICAgICAgICB3aW5kb3cuc2V0VGltZW91dChhY3RpdmF0ZVZpc2libGVWaWRlb3MsIDI2MDApOwogICAgfSkoKTsKPC9zY3JpcHQ+CiAgICAgICAgPHNjcmlwdCBpZD0iemRveGlnLXJlYWN0Yml0cy1saXRlIj4KKGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CgogIHZhciByZWR1Y2VNb3Rpb24gPSB3aW5kb3cubWF0Y2hNZWRpYSAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknKS5tYXRjaGVzOwogIGlmIChyZWR1Y2VNb3Rpb24gfHwgd2luZG93Ll9femRveGlnUmVhY3RCaXRzTGl0ZSkgcmV0dXJuOwogIHdpbmRvdy5fX3pkb3hpZ1JlYWN0Qml0c0xpdGUgPSB0cnVlOwoKICB2YXIgY3NzID0gWwogICAgJy5yYi1jbGljay1jYW52YXN7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDt6LWluZGV4OjIxNDc0ODIwMDA7cG9pbnRlci1ldmVudHM6bm9uZTttaXgtYmxlbmQtbW9kZTpzY3JlZW59JywKICAgICcucmItbWFnbmV0e3dpbGwtY2hhbmdlOnRyYW5zZm9ybTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNDJzIGN1YmljLWJlemllciguMTksMSwuMjIsMSksYm94LXNoYWRvdyAuNDJzIGN1YmljLWJlemllciguMTksMSwuMjIsMSl9JywKICAgICcucmItc2hlZW57cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnLnJiLXNoZWVuOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6LTFweDtwb2ludGVyLWV2ZW50czpub25lO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDExMGRlZyx0cmFuc3BhcmVudCAwJSx0cmFuc3BhcmVudCAzOCUscmdiYSg4OSwxOTAsMjU1LC4yNCkgNDglLHJnYmEoMjU1LDI1NSwyNTUsLjM4KSA1MiUsdHJhbnNwYXJlbnQgNjQlLHRyYW5zcGFyZW50IDEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMzAlKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuOXMgY3ViaWMtYmV6aWVyKC4xOSwxLC4yMiwxKX0nLAogICAgJy5yYi1zaGVlbjpob3ZlcjphZnRlciwucmItc2hlZW46Zm9jdXMtdmlzaWJsZTphZnRlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMzAlKX0nLAogICAgJy5yYi1yZXZlYWx7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApO2NsaXAtcGF0aDppbnNldCgwIDAgMCAwKTtmaWx0ZXI6bm9uZX0nLAogICAgJ2h0bWwucmItcmVhZHkgLnJiLXJldmVhbHtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMjJweCk7Y2xpcC1wYXRoOmluc2V0KDAgMCAxOCUgMCk7ZmlsdGVyOmJsdXIoOHB4KTt0cmFuc2l0aW9uOm9wYWNpdHkgLjlzIGN1YmljLWJlemllciguMTksMSwuMjIsMSksdHJhbnNmb3JtIC45cyBjdWJpYy1iZXppZXIoLjE5LDEsLjIyLDEpLGNsaXAtcGF0aCAuOXMgY3ViaWMtYmV6aWVyKC4xOSwxLC4yMiwxKSxmaWx0ZXIgLjlzIGN1YmljLWJlemllciguMTksMSwuMjIsMSl9JywKICAgICdodG1sLnJiLXJlYWR5IC5yYi1yZXZlYWwucmItaW57b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApO2NsaXAtcGF0aDppbnNldCgwIDAgMCAwKTtmaWx0ZXI6Ymx1cigwKX0nLAogICAgJy5yYi1mb2N1cy1saW5le3Bvc2l0aW9uOnJlbGF0aXZlfScsCiAgICAnLnJiLWZvY3VzLWxpbmU6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOi0uMThlbTtoZWlnaHQ6MXB4O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LHJnYmEoODAsMTg1LDI1NSwuNzIpLHRyYW5zcGFyZW50KTt0cmFuc2Zvcm06c2NhbGVYKDApO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246dHJhbnNmb3JtIDEuMDVzIGN1YmljLWJlemllciguMTksMSwuMjIsMSl9JywKICAgICcucmItZm9jdXMtbGluZS5yYi1pbjpiZWZvcmV7dHJhbnNmb3JtOnNjYWxlWCgxKX0nCiAgXS5qb2luKCdcbicpOwoKICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOwogIHN0eWxlLnNldEF0dHJpYnV0ZSgnZGF0YS16ZG94aWctcmVhY3RiaXRzLWxpdGUnLCAnJyk7CiAgc3R5bGUudGV4dENvbnRlbnQgPSBjc3M7CiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7CiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3JiLXJlYWR5Jyk7CgogIGZ1bmN0aW9uIHJlYWR5KGZuKSB7CiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZm4sIHsgb25jZTogdHJ1ZSB9KTsKICAgIGVsc2UgZm4oKTsKICB9CgogIHJlYWR5KGZ1bmN0aW9uICgpIHsKICAgIGluc3RhbGxDbGlja1NwYXJrKCk7CiAgICBpbnN0YWxsTWFnbmV0KCk7CiAgICBpbnN0YWxsUmV2ZWFsKCk7CiAgfSk7CgogIGZ1bmN0aW9uIGluc3RhbGxDbGlja1NwYXJrKCkgewogICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOwogICAgY2FudmFzLmNsYXNzTmFtZSA9ICdyYi1jbGljay1jYW52YXMnOwogICAgY2FudmFzLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjYW52YXMpOwogICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOwogICAgdmFyIGRwciA9IE1hdGgubWluKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEsIDIpOwogICAgdmFyIHNwYXJrcyA9IFtdOwogICAgdmFyIHJhZiA9IDA7CgogICAgZnVuY3Rpb24gcmVzaXplKCkgewogICAgICBkcHIgPSBNYXRoLm1pbih3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxLCAyKTsKICAgICAgY2FudmFzLndpZHRoID0gTWF0aC5mbG9vcih3aW5kb3cuaW5uZXJXaWR0aCAqIGRwcik7CiAgICAgIGNhbnZhcy5oZWlnaHQgPSBNYXRoLmZsb29yKHdpbmRvdy5pbm5lckhlaWdodCAqIGRwcik7CiAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoICsgJ3B4JzsKICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCArICdweCc7CiAgICAgIGN0eC5zZXRUcmFuc2Zvcm0oZHByLCAwLCAwLCBkcHIsIDAsIDApOwogICAgfQoKICAgIGZ1bmN0aW9uIGFkZFNwYXJrKGV2KSB7CiAgICAgIGlmICghZXYuaXNUcnVzdGVkKSByZXR1cm47CiAgICAgIHZhciB0YXJnZXQgPSBldi50YXJnZXQgJiYgZXYudGFyZ2V0LmNsb3Nlc3QgJiYgZXYudGFyZ2V0LmNsb3Nlc3QoJ2EsYnV0dG9uLGlucHV0LHN1bW1hcnksLnNsaWRlLWNhcmQsLnNlcmllcy1kZXRhaWwtY2FyZCwuc2hvd2Nhc2UtcHJvZHVjdC1jYXJkLC5uZXdzLWNhcmQnKTsKICAgICAgaWYgKCF0YXJnZXQpIHJldHVybjsKICAgICAgc3BhcmtzLnB1c2goeyB4OiBldi5jbGllbnRYLCB5OiBldi5jbGllbnRZLCB0OiBwZXJmb3JtYW5jZS5ub3coKSwgY29sb3I6IHRhcmdldC5jbG9zZXN0KCcjbmF2YmFyJykgPyAnIzdmZjZmZicgOiAnIzU4YmZmZicgfSk7CiAgICAgIGlmICghcmFmKSByYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZHJhdyk7CiAgICB9CgogICAgZnVuY3Rpb24gZHJhdyhub3cpIHsKICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3aW5kb3cuaW5uZXJXaWR0aCwgd2luZG93LmlubmVySGVpZ2h0KTsKICAgICAgc3BhcmtzID0gc3BhcmtzLmZpbHRlcihmdW5jdGlvbiAoc3BhcmspIHsKICAgICAgICB2YXIgYWdlID0gbm93IC0gc3BhcmsudDsKICAgICAgICBpZiAoYWdlID4gNjQwKSByZXR1cm4gZmFsc2U7CiAgICAgICAgdmFyIHAgPSBhZ2UgLyA2NDA7CiAgICAgICAgdmFyIHJhZGl1cyA9IDkgKyBwICogMzI7CiAgICAgICAgY3R4LnNhdmUoKTsKICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAoMSAtIHApICogMC44NTsKICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBzcGFyay5jb2xvcjsKICAgICAgICBjdHgubGluZVdpZHRoID0gMS4yOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSArPSAxKSB7CiAgICAgICAgICB2YXIgYSA9IChNYXRoLlBJICogMiAvIDgpICogaTsKICAgICAgICAgIHZhciB4MSA9IHNwYXJrLnggKyBNYXRoLmNvcyhhKSAqIHJhZGl1cyAqIDAuMzg7CiAgICAgICAgICB2YXIgeTEgPSBzcGFyay55ICsgTWF0aC5zaW4oYSkgKiByYWRpdXMgKiAwLjM4OwogICAgICAgICAgdmFyIHgyID0gc3BhcmsueCArIE1hdGguY29zKGEpICogcmFkaXVzOwogICAgICAgICAgdmFyIHkyID0gc3BhcmsueSArIE1hdGguc2luKGEpICogcmFkaXVzOwogICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgY3R4Lm1vdmVUbyh4MSwgeTEpOwogICAgICAgICAgY3R4LmxpbmVUbyh4MiwgeTIpOwogICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgIH0KICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9KTsKICAgICAgcmFmID0gc3BhcmtzLmxlbmd0aCA\/IHJlcXVlc3RBbmltYXRpb25GcmFtZShkcmF3KSA6IDA7CiAgICB9CgogICAgcmVzaXplKCk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzaXplLCB7IHBhc3NpdmU6IHRydWUgfSk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBhZGRTcGFyaywgeyBwYXNzaXZlOiB0cnVlIH0pOwogIH0KCiAgZnVuY3Rpb24gaW5zdGFsbE1hZ25ldCgpIHsKICAgIHZhciBzZWxlY3RvcnMgPSBbCiAgICAgICcjbmF2YmFyIC5uYXYtYnJhbmQtcGlsbCcsCiAgICAgICcjbmF2YmFyIGEnLAogICAgICAnI25hdmJhciBidXR0b24nLAogICAgICAnLmJ0bi1tb2Rlcm4nLAogICAgICAnLmhlcm8tb3B0aW9uJywKICAgICAgJy5hcmNoaXZlLWNvbnRyb2wnLAogICAgICAnLnNob3djYXNlLXByb2R1Y3QtY2FyZCcsCiAgICAgICcuc2xpZGUtY2FyZCcsCiAgICAgICcuc2VyaWVzLWRldGFpbC1jYXJkJywKICAgICAgJy5uZXdzLWNhcmQnLAogICAgICAnLm5ld3MtYnJhbmQnLAogICAgICAnLnZlcmlmeS1jYXJkJywKICAgICAgJy5jb250YWN0LWFjdGlvbicKICAgIF0uam9pbignLCcpOwoKICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcnMpLCBmdW5jdGlvbiAoZWwpIHsKICAgICAgaWYgKGVsLmRhdGFzZXQucmJNYWduZXRSZWFkeSkgcmV0dXJuOwogICAgICBlbC5kYXRhc2V0LnJiTWFnbmV0UmVhZHkgPSAnMSc7CiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ3JiLW1hZ25ldCcpOwogICAgICBpZiAoZWwubWF0Y2hlcygnYSxidXR0b24sLmJ0bi1tb2Rlcm4sLmhlcm8tb3B0aW9uLC5uZXdzLWJyYW5kLC5jb250YWN0LWFjdGlvbicpKSBlbC5jbGFzc0xpc3QuYWRkKCdyYi1zaGVlbicpOwoKICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBmdW5jdGlvbiAoZXYpIHsKICAgICAgICBpZiAoZXYucG9pbnRlclR5cGUgPT09ICd0b3VjaCcpIHJldHVybjsKICAgICAgICB2YXIgciA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHZhciB4ID0gKGV2LmNsaWVudFggLSByLmxlZnQgLSByLndpZHRoIC8gMikgLyByLndpZHRoOwogICAgICAgIHZhciB5ID0gKGV2LmNsaWVudFkgLSByLnRvcCAtIHIuaGVpZ2h0IC8gMikgLyByLmhlaWdodDsKICAgICAgICB2YXIgc3RyZW5ndGggPSBlbC5jbG9zZXN0KCcjbmF2YmFyJykgPyA4IDogMTI7CiAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZTNkKCcgKyAoeCAqIHN0cmVuZ3RoKS50b0ZpeGVkKDIpICsgJ3B4LCcgKyAoeSAqIHN0cmVuZ3RoKS50b0ZpeGVkKDIpICsgJ3B4LDApJzsKICAgICAgfSwgeyBwYXNzaXZlOiB0cnVlIH0pOwoKICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmxlYXZlJywgZnVuY3Rpb24gKCkgewogICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICcnOwogICAgICB9LCB7IHBhc3NpdmU6IHRydWUgfSk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGluc3RhbGxSZXZlYWwoKSB7CiAgICB2YXIgc2VsZWN0b3JzID0gWwogICAgICAnI2hlcm9fdGl0bGUnLAogICAgICAnI2hlcm9fc3ViJywKICAgICAgJyNoZXJvX2Rlc2MnLAogICAgICAnI3ZhdWx0X3RpdGxlJywKICAgICAgJy5hcmNoaXZlLWhlcm8gaDEnLAogICAgICAnLmFyY2hpdmUtaGVybyBwJywKICAgICAgJy5uZXdzLWhlcm8gaDEnLAogICAgICAnLm5ld3MtaGVybyBwJywKICAgICAgJy5zZXJ2aWNlLWhlcm8gaDEnLAogICAgICAnLnZlcmlmeS1oZXJvIGgxJywKICAgICAgJy5zdG9yeS1oZXJvIGgxJywKICAgICAgJy5zZWN0aW9uLXRpdGxlJywKICAgICAgJy5zZXJpZXMtYmxvY2sgaDInCiAgICBdLmpvaW4oJywnKTsKCiAgICB2YXIgZWxzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcnMpKS5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7CiAgICAgIHJldHVybiBlbCAmJiAhZWwuZGF0YXNldC5yYlJldmVhbFJlYWR5OwogICAgfSk7CiAgICBlbHMuZm9yRWFjaChmdW5jdGlvbiAoZWwsIGluZGV4KSB7CiAgICAgIGVsLmRhdGFzZXQucmJSZXZlYWxSZWFkeSA9ICcxJzsKICAgICAgZWwuY2xhc3NMaXN0LmFkZCgncmItcmV2ZWFsJyk7CiAgICAgIGlmICgvSDF8SDIvLnRlc3QoZWwudGFnTmFtZSkgfHwgZWwuaWQgPT09ICdoZXJvX3RpdGxlJykgZWwuY2xhc3NMaXN0LmFkZCgncmItZm9jdXMtbGluZScpOwogICAgICBlbC5zdHlsZS50cmFuc2l0aW9uRGVsYXkgPSBNYXRoLm1pbihpbmRleCAqIDQ1LCAyODApICsgJ21zJzsKICAgIH0pOwoKICAgIGlmICghKCdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93KSkgewogICAgICBlbHMuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgZWwuY2xhc3NMaXN0LmFkZCgncmItaW4nKTsgfSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKGVudHJpZXMpIHsKICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkgewogICAgICAgIGlmICghZW50cnkuaXNJbnRlcnNlY3RpbmcpIHJldHVybjsKICAgICAgICBlbnRyeS50YXJnZXQuY2xhc3NMaXN0LmFkZCgncmItaW4nKTsKICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZW50cnkudGFyZ2V0KTsKICAgICAgfSk7CiAgICB9LCB7IHRocmVzaG9sZDogMC4xOCwgcm9vdE1hcmdpbjogJzBweCAwcHggLTglIDBweCcgfSk7CgogICAgZWxzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IG9ic2VydmVyLm9ic2VydmUoZWwpOyB9KTsKICB9Cn0oKSk7Cgo8L3NjcmlwdD4KCjxzY3JpcHQgaWQ9InpkeC1jaW5lbWF0aWMtbmF2LXNjcmlwdCI+CihmdW5jdGlvbiAoKSB7CiAgaWYgKHdpbmRvdy5fX3pkeENpbmVtYXRpY05hdk1vdW50ZWQpIHJldHVybjsKICB3aW5kb3cuX196ZHhDaW5lbWF0aWNOYXZNb3VudGVkID0gdHJ1ZTsKICBmdW5jdGlvbiByZWFkeShmbikgewogICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZuLCB7IG9uY2U6IHRydWUgfSk7CiAgICBlbHNlIGZuKCk7CiAgfQogIHJlYWR5KGZ1bmN0aW9uICgpIHsKICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnemR4LW5hdi1yZWFkeScpOwogICAgdmFyIHRvZ2dsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6ZHgtbWVudS10b2dnbGUnKTsKICAgIHZhciBtZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3pkeC1tb2JpbGUtbWVudScpOwogICAgZnVuY3Rpb24gc2V0T3BlbihvcGVuKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnemR4LW1lbnUtb3BlbicsIG9wZW4pOwogICAgICBpZiAodG9nZ2xlKSB7CiAgICAgICAgdG9nZ2xlLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIG9wZW4gPyAndHJ1ZScgOiAnZmFsc2UnKTsKICAgICAgICB0b2dnbGUuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgb3BlbiA\/ICflhbPpl63oj5zljZUnIDogJ+aJk+W8gOiPnOWNlScpOwogICAgICB9CiAgICB9CiAgICBpZiAodG9nZ2xlKSB7CiAgICAgIHRvZ2dsZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICBzZXRPcGVuKCFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnemR4LW1lbnUtb3BlbicpKTsKICAgICAgfSk7CiAgICB9CiAgICBpZiAobWVudSkgewogICAgICBtZW51LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQuY2xvc2VzdCAmJiBldmVudC50YXJnZXQuY2xvc2VzdCgnYScpKSBzZXRPcGVuKGZhbHNlKTsKICAgICAgfSk7CiAgICB9CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSBzZXRPcGVuKGZhbHNlKTsKICAgIH0pOwogIH0pOwp9KCkpOwo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+DQo=<\/script>\n<script>\n(function () {\n  var frame = document.getElementById('zdoxig-static-frame-zdoxig-home');\n  var data = document.getElementById('zdoxig-static-html-zdoxig-home');\n  if (!frame || !data) return;\n  document.title = \"ZDOXIG Official\";\n  function decodeBase64Utf8(value) {\n    var binary = atob(value.trim());\n    var bytes = new Uint8Array(binary.length);\n    for (var i = 0; i < binary.length; i += 1) bytes[i] = binary.charCodeAt(i);\n    return new TextDecoder('utf-8').decode(bytes);\n  }\n  function scrollFrameToHash(hash) {\n    if (!hash || hash === '#') return;\n    var child = frame.contentWindow;\n    var doc = frame.contentDocument || (child ? child.document : null);\n    if (!child || !doc) return;\n    var id = '';\n    try {\n      id = decodeURIComponent(hash.replace(\/^#\/, ''));\n    } catch (error) {\n      id = hash.replace(\/^#\/, '');\n    }\n    var target = id === 'home' ? doc.getElementById('home') : doc.getElementById(id);\n    if (!target) return;\n    var offset = id === 'home' || id === 'video-scroll-track' ? 0 : (child.matchMedia('(max-width: 768px)').matches ? 64 : 76);\n    var top = id === 'home' ? 0 : target.getBoundingClientRect().top + child.scrollY - offset;\n    child.scrollTo({ top: Math.max(0, top), behavior: 'auto' });\n  }\n  function syncTopHashFromFrameClick() {\n    var child = frame.contentWindow;\n    var doc = frame.contentDocument || (child ? child.document : null);\n    if (!doc || doc.documentElement.dataset.zdoxigHashBridge === 'true') return;\n    doc.documentElement.dataset.zdoxigHashBridge = 'true';\n    doc.addEventListener('click', function (event) {\n      var link = event.target ? (event.target.closest ? event.target.closest('a[href^=\"#\"]') : null) : null;\n      if (!link) return;\n      var href = link.getAttribute('href');\n      if (!href || href === '#') return;\n      try {\n        window.history.replaceState(null, '', window.location.pathname + window.location.search + href);\n      } catch (error) {}\n    }, true);\n  }\n  frame.addEventListener('load', function () {\n    syncTopHashFromFrameClick();\n    [80, 700, 1600].forEach(function (delay) {\n      setTimeout(function () { scrollFrameToHash(window.location.hash); }, delay);\n    });\n  });\n  frame.srcdoc = decodeBase64Utf8(data.textContent || '');\n  [120, 900, 2000].forEach(function (delay) {\n    setTimeout(function () {\n      syncTopHashFromFrameClick();\n      scrollFrameToHash(window.location.hash);\n    }, delay);\n  });\n  window.addEventListener('hashchange', function () {\n    scrollFrameToHash(window.location.hash);\n  });\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-33","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/zdoxig.com\/index.php\/wp-json\/wp\/v2\/pages\/33","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zdoxig.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/zdoxig.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/zdoxig.com\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/zdoxig.com\/index.php\/wp-json\/wp\/v2\/comments?post=33"}],"version-history":[{"count":67,"href":"https:\/\/zdoxig.com\/index.php\/wp-json\/wp\/v2\/pages\/33\/revisions"}],"predecessor-version":[{"id":510,"href":"https:\/\/zdoxig.com\/index.php\/wp-json\/wp\/v2\/pages\/33\/revisions\/510"}],"wp:attachment":[{"href":"https:\/\/zdoxig.com\/index.php\/wp-json\/wp\/v2\/media?parent=33"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}