diff --git a/conway/.gitignore b/conway/.gitignore
new file mode 100644
index 0000000..7103906
--- /dev/null
+++ b/conway/.gitignore
@@ -0,0 +1 @@
+/web_assets/web_assets
diff --git a/conway/Makefile b/conway/Makefile
index 0cda8b6..a13870d 100644
--- a/conway/Makefile
+++ b/conway/Makefile
@@ -4,18 +4,21 @@ TARGETS := \
$(LIBS) \
github.com/meatballhat/box-o-sand/conway/conways-game-of-life
-all: deps build
+all: test
-build: test
+test: build
+ go test -x -v -test.parallel=4 $(LIBS)
+
+build: web_assets.go deps
go install -x $(TARGETS)
+web_assets.go: $(wildcard web_assets/*.*)
+ ./gen-web-assets
+
clean:
go clean -x -i $(TARGETS)
-test:
- go test -x -v -test.parallel=4 $(LIBS)
-
deps:
- go get -x $(TARGETS)
+ go get -n -x $(TARGETS)
.PHONY: all build clean deps test
diff --git a/conway/conway_test.go b/conway/conway_test.go
index 3394799..1879beb 100644
--- a/conway/conway_test.go
+++ b/conway/conway_test.go
@@ -477,7 +477,7 @@ func TestHandleWebGameRootReturnsIndexPageForGET(t *testing.T) {
HandleWebGameRoot(w, req)
if w.Status != http.StatusOK {
- t.Fail()
+ t.Errorf("response status != %d: %d", http.StatusOK, w.Status)
return
}
@@ -488,7 +488,7 @@ func TestHandleWebGameRootReturnsIndexPageForGET(t *testing.T) {
}
if !matched {
- t.Fail()
+ t.Errorf("Body did not match expected
element")
return
}
}
diff --git a/conway/gen-web-assets b/conway/gen-web-assets
new file mode 100755
index 0000000..5a6cc6a
--- /dev/null
+++ b/conway/gen-web-assets
@@ -0,0 +1,6 @@
+#!/bin/sh
+set -e
+
+cd web_assets
+go build .
+./web_assets index.html | gofmt > ../web_assets.go
diff --git a/conway/web.go b/conway/web.go
index eee1349..06cc1d9 100644
--- a/conway/web.go
+++ b/conway/web.go
@@ -2,6 +2,7 @@ package conway
import (
"bytes"
+ "compress/gzip"
"encoding/base64"
"encoding/json"
"errors"
@@ -28,15 +29,56 @@ type WebGameState struct {
Img string `json:"i"`
}
-var jQueryMinJs = []byte("")
+type webAssetStrings struct {
+ IndexHTML []byte
+ NormalizeCSS []byte
+ JqueryMinJS []byte
+}
+
+var WebAssets webAssetStrings
func init() {
rand.Seed(time.Now().UTC().UnixNano())
- jqmin, err := base64.StdEncoding.DecodeString(JQUERY_MIN_JS)
+ jqmin, err := fromGzB64(JQUERY_MIN_JS)
if err != nil {
log.Fatal("Failed to decode internal jquery.min.js")
}
- jQueryMinJs = append(jQueryMinJs, jqmin...)
+ WebAssets.JqueryMinJS = jqmin
+
+ normCss, err := fromGzB64(NORMALIZE_CSS)
+ if err != nil {
+ log.Fatal("Failed to decode internal normalize.css")
+ }
+ WebAssets.NormalizeCSS = normCss
+
+ idxHt, err := fromGzB64(GAME_OF_LIFE_INDEX_HTML)
+ if err != nil {
+ log.Fatal("Failed to decode internal index.html")
+ }
+
+ WebAssets.IndexHTML = idxHt
+}
+
+func fromGzB64(input string) ([]byte, error) {
+ decoded, err := base64.StdEncoding.DecodeString(input)
+ if err != nil {
+ return []byte(""), err
+ }
+
+ buf := bytes.NewBuffer(decoded)
+ zReader, err := gzip.NewReader(buf)
+ if err != nil {
+ return []byte(""), err
+ }
+
+ defer zReader.Close()
+
+ gunzipped, err := ioutil.ReadAll(zReader)
+ if err != nil {
+ return []byte(""), err
+ }
+
+ return gunzipped, nil
}
func NewWebGameParams(q url.Values) *WebGameParams {
@@ -99,7 +141,7 @@ func HandleWebGameRoot(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "text/html")
w.WriteHeader(http.StatusOK)
- w.Write([]byte(GAME_OF_LIFE_INDEX_HTML))
+ w.Write(WebAssets.IndexHTML)
return
}
@@ -112,14 +154,14 @@ func HandleWebGameStatic(w http.ResponseWriter, req *http.Request) {
if req.URL.Path == "/static/normalize.css" {
w.Header().Set("Content-Type", "text/css")
w.WriteHeader(http.StatusOK)
- w.Write([]byte(NORMALIZE_CSS))
+ w.Write(WebAssets.NormalizeCSS)
return
}
if req.URL.Path == "/static/jquery.min.js" {
w.Header().Set("Content-Type", "text/javascript")
w.WriteHeader(http.StatusOK)
- w.Write(jQueryMinJs)
+ w.Write(WebAssets.JqueryMinJS)
return
}
diff --git a/conway/web_assets.go b/conway/web_assets.go
index 91f14cb..30c22f7 100644
--- a/conway/web_assets.go
+++ b/conway/web_assets.go
@@ -1,1861 +1,7 @@
package conway
const (
- GAME_OF_LIFE_INDEX_HTML = `
-
-
-
- Conway's Game of Life
-
-
-
-
-
- Conway's Game of Life
-
-
-
-
-
-
-
-
-
-`
- NORMALIZE_CSS = `
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-nav,
-section,
-summary {
- display: block;
-}
-audio,
-canvas,
-video {
- display: inline-block;
-}
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-[hidden] {
- display: none;
-}
-html {
- font-family: sans-serif;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
-}
-body {
- margin: 0;
-}
-a:focus {
- outline: thin dotted;
-}
-a:active,
-a:hover {
- outline: 0;
-}
-h1 {
- font-size: 2em;
-}
-abbr[title] {
- border-bottom: 1px dotted;
-}
-b,
-strong {
- font-weight: bold;
-}
-dfn {
- font-style: italic;
-}
-mark {
- background: #ff0;
- color: #000;
-}
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, serif;
- font-size: 1em;
-}
-pre {
- white-space: pre;
- white-space: pre-wrap;
- word-wrap: break-word;
-}
-q {
- quotes: "\201C" "\201D" "\2018" "\2019";
-}
-small {
- font-size: 80%;
-}
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-sup {
- top: -0.5em;
-}
-sub {
- bottom: -0.25em;
-}
-img {
- border: 0;
-}
-svg:not(:root) {
- overflow: hidden;
-}
-figure {
- margin: 0;
-}
-fieldset {
- border: 1px solid #c0c0c0;
- margin: 0 2px;
- padding: 0.35em 0.625em 0.75em;
-}
-legend {
- border: 0;
- padding: 0;
-}
-button,
-input,
-select,
-textarea {
- font-family: inherit;
- font-size: 100%;
- margin: 0;
-}
-button,
-input {
- line-height: normal;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button;
- cursor: pointer;
-}
-button[disabled],
-input[disabled] {
- cursor: default;
-}
-input[type="checkbox"],
-input[type="radio"] {
- box-sizing: border-box;
- padding: 0;
-}
-input[type="search"] {
- -webkit-appearance: textfield;
- -moz-box-sizing: content-box;
- -webkit-box-sizing: content-box;
- box-sizing: content-box;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-textarea {
- overflow: auto;
- vertical-align: top;
-}
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-`
- JQUERY_MIN_JS = `
-LyohIGpRdWVyeSB2MS44LjMganF1ZXJ5LmNvbSB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLw0KKGZ1
-bmN0aW9uKGUsdCl7ZnVuY3Rpb24gXyhlKXt2YXIgdD1NW2VdPXt9O3JldHVybiB2LmVhY2goZS5z
-cGxpdCh5KSxmdW5jdGlvbihlLG4pe3Rbbl09ITB9KSx0fWZ1bmN0aW9uIEgoZSxuLHIpe2lmKHI9
-PT10JiZlLm5vZGVUeXBlPT09MSl7dmFyIGk9ImRhdGEtIituLnJlcGxhY2UoUCwiLSQxIikudG9M
-b3dlckNhc2UoKTtyPWUuZ2V0QXR0cmlidXRlKGkpO2lmKHR5cGVvZiByPT0ic3RyaW5nIil7dHJ5
-e3I9cj09PSJ0cnVlIj8hMDpyPT09ImZhbHNlIj8hMTpyPT09Im51bGwiP251bGw6K3IrIiI9PT1y
-PytyOkQudGVzdChyKT92LnBhcnNlSlNPTihyKTpyfWNhdGNoKHMpe312LmRhdGEoZSxuLHIpfWVs
-c2Ugcj10fXJldHVybiByfWZ1bmN0aW9uIEIoZSl7dmFyIHQ7Zm9yKHQgaW4gZSl7aWYodD09PSJk
-YXRhIiYmdi5pc0VtcHR5T2JqZWN0KGVbdF0pKWNvbnRpbnVlO2lmKHQhPT0idG9KU09OIilyZXR1
-cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBldCgpe3JldHVybiExfWZ1bmN0aW9uIHR0KCl7cmV0dXJu
-ITB9ZnVuY3Rpb24gdXQoZSl7cmV0dXJuIWV8fCFlLnBhcmVudE5vZGV8fGUucGFyZW50Tm9kZS5u
-b2RlVHlwZT09PTExfWZ1bmN0aW9uIGF0KGUsdCl7ZG8gZT1lW3RdO3doaWxlKGUmJmUubm9kZVR5
-cGUhPT0xKTtyZXR1cm4gZX1mdW5jdGlvbiBmdChlLHQsbil7dD10fHwwO2lmKHYuaXNGdW5jdGlv
-bih0KSlyZXR1cm4gdi5ncmVwKGUsZnVuY3Rpb24oZSxyKXt2YXIgaT0hIXQuY2FsbChlLHIsZSk7
-cmV0dXJuIGk9PT1ufSk7aWYodC5ub2RlVHlwZSlyZXR1cm4gdi5ncmVwKGUsZnVuY3Rpb24oZSxy
-KXtyZXR1cm4gZT09PXQ9PT1ufSk7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXt2YXIgcj12LmdyZXAo
-ZSxmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlVHlwZT09PTF9KTtpZihpdC50ZXN0KHQpKXJldHVy
-biB2LmZpbHRlcih0LHIsIW4pO3Q9di5maWx0ZXIodCxyKX1yZXR1cm4gdi5ncmVwKGUsZnVuY3Rp
-b24oZSxyKXtyZXR1cm4gdi5pbkFycmF5KGUsdCk+PTA9PT1ufSl9ZnVuY3Rpb24gbHQoZSl7dmFy
-IHQ9Y3Quc3BsaXQoInwiKSxuPWUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKG4uY3JlYXRl
-RWxlbWVudCl3aGlsZSh0Lmxlbmd0aCluLmNyZWF0ZUVsZW1lbnQodC5wb3AoKSk7cmV0dXJuIG59
-ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4gZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0KVswXXx8ZS5h
-cHBlbmRDaGlsZChlLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KSl9ZnVuY3Rpb24gQXQo
-ZSx0KXtpZih0Lm5vZGVUeXBlIT09MXx8IXYuaGFzRGF0YShlKSlyZXR1cm47dmFyIG4scixpLHM9
-di5fZGF0YShlKSxvPXYuX2RhdGEodCxzKSx1PXMuZXZlbnRzO2lmKHUpe2RlbGV0ZSBvLmhhbmRs
-ZSxvLmV2ZW50cz17fTtmb3IobiBpbiB1KWZvcihyPTAsaT11W25dLmxlbmd0aDtyPGk7cisrKXYu
-ZXZlbnQuYWRkKHQsbix1W25dW3JdKX1vLmRhdGEmJihvLmRhdGE9di5leHRlbmQoe30sby5kYXRh
-KSl9ZnVuY3Rpb24gT3QoZSx0KXt2YXIgbjtpZih0Lm5vZGVUeXBlIT09MSlyZXR1cm47dC5jbGVh
-ckF0dHJpYnV0ZXMmJnQuY2xlYXJBdHRyaWJ1dGVzKCksdC5tZXJnZUF0dHJpYnV0ZXMmJnQubWVy
-Z2VBdHRyaWJ1dGVzKGUpLG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG49PT0ib2JqZWN0Ij8o
-dC5wYXJlbnROb2RlJiYodC5vdXRlckhUTUw9ZS5vdXRlckhUTUwpLHYuc3VwcG9ydC5odG1sNUNs
-b25lJiZlLmlubmVySFRNTCYmIXYudHJpbSh0LmlubmVySFRNTCkmJih0LmlubmVySFRNTD1lLmlu
-bmVySFRNTCkpOm49PT0iaW5wdXQiJiZFdC50ZXN0KGUudHlwZSk/KHQuZGVmYXVsdENoZWNrZWQ9
-dC5jaGVja2VkPWUuY2hlY2tlZCx0LnZhbHVlIT09ZS52YWx1ZSYmKHQudmFsdWU9ZS52YWx1ZSkp
-Om49PT0ib3B0aW9uIj90LnNlbGVjdGVkPWUuZGVmYXVsdFNlbGVjdGVkOm49PT0iaW5wdXQifHxu
-PT09InRleHRhcmVhIj90LmRlZmF1bHRWYWx1ZT1lLmRlZmF1bHRWYWx1ZTpuPT09InNjcmlwdCIm
-JnQudGV4dCE9PWUudGV4dCYmKHQudGV4dD1lLnRleHQpLHQucmVtb3ZlQXR0cmlidXRlKHYuZXhw
-YW5kbyl9ZnVuY3Rpb24gTXQoZSl7cmV0dXJuIHR5cGVvZiBlLmdldEVsZW1lbnRzQnlUYWdOYW1l
-IT0idW5kZWZpbmVkIj9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6dHlwZW9mIGUucXVlcnlT
-ZWxlY3RvckFsbCE9InVuZGVmaW5lZCI/ZS5xdWVyeVNlbGVjdG9yQWxsKCIqIik6W119ZnVuY3Rp
-b24gX3QoZSl7RXQudGVzdChlLnR5cGUpJiYoZS5kZWZhdWx0Q2hlY2tlZD1lLmNoZWNrZWQpfWZ1
-bmN0aW9uIFF0KGUsdCl7aWYodCBpbiBlKXJldHVybiB0O3ZhciBuPXQuY2hhckF0KDApLnRvVXBw
-ZXJDYXNlKCkrdC5zbGljZSgxKSxyPXQsaT1KdC5sZW5ndGg7d2hpbGUoaS0tKXt0PUp0W2ldK247
-aWYodCBpbiBlKXJldHVybiB0fXJldHVybiByfWZ1bmN0aW9uIEd0KGUsdCl7cmV0dXJuIGU9dHx8
-ZSx2LmNzcyhlLCJkaXNwbGF5Iik9PT0ibm9uZSJ8fCF2LmNvbnRhaW5zKGUub3duZXJEb2N1bWVu
-dCxlKX1mdW5jdGlvbiBZdChlLHQpe3ZhciBuLHIsaT1bXSxzPTAsbz1lLmxlbmd0aDtmb3IoO3M8
-bztzKyspe249ZVtzXTtpZighbi5zdHlsZSljb250aW51ZTtpW3NdPXYuX2RhdGEobiwib2xkZGlz
-cGxheSIpLHQ/KCFpW3NdJiZuLnN0eWxlLmRpc3BsYXk9PT0ibm9uZSImJihuLnN0eWxlLmRpc3Bs
-YXk9IiIpLG4uc3R5bGUuZGlzcGxheT09PSIiJiZHdChuKSYmKGlbc109di5fZGF0YShuLCJvbGRk
-aXNwbGF5IixubihuLm5vZGVOYW1lKSkpKToocj1EdChuLCJkaXNwbGF5IiksIWlbc10mJnIhPT0i
-bm9uZSImJnYuX2RhdGEobiwib2xkZGlzcGxheSIscikpfWZvcihzPTA7czxvO3MrKyl7bj1lW3Nd
-O2lmKCFuLnN0eWxlKWNvbnRpbnVlO2lmKCF0fHxuLnN0eWxlLmRpc3BsYXk9PT0ibm9uZSJ8fG4u
-c3R5bGUuZGlzcGxheT09PSIiKW4uc3R5bGUuZGlzcGxheT10P2lbc118fCIiOiJub25lIn1yZXR1
-cm4gZX1mdW5jdGlvbiBadChlLHQsbil7dmFyIHI9UnQuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1h
-eCgwLHJbMV0tKG58fDApKSsoclsyXXx8InB4Iik6dH1mdW5jdGlvbiBlbihlLHQsbixyKXt2YXIg
-aT1uPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKT80OnQ9PT0id2lkdGgiPzE6MCxzPTA7Zm9yKDtp
-PDQ7aSs9MiluPT09Im1hcmdpbiImJihzKz12LmNzcyhlLG4rJHRbaV0sITApKSxyPyhuPT09ImNv
-bnRlbnQiJiYocy09cGFyc2VGbG9hdChEdChlLCJwYWRkaW5nIiskdFtpXSkpfHwwKSxuIT09Im1h
-cmdpbiImJihzLT1wYXJzZUZsb2F0KER0KGUsImJvcmRlciIrJHRbaV0rIldpZHRoIikpfHwwKSk6
-KHMrPXBhcnNlRmxvYXQoRHQoZSwicGFkZGluZyIrJHRbaV0pKXx8MCxuIT09InBhZGRpbmciJiYo
-cys9cGFyc2VGbG9hdChEdChlLCJib3JkZXIiKyR0W2ldKyJXaWR0aCIpKXx8MCkpO3JldHVybiBz
-fWZ1bmN0aW9uIHRuKGUsdCxuKXt2YXIgcj10PT09IndpZHRoIj9lLm9mZnNldFdpZHRoOmUub2Zm
-c2V0SGVpZ2h0LGk9ITAscz12LnN1cHBvcnQuYm94U2l6aW5nJiZ2LmNzcyhlLCJib3hTaXppbmci
-KT09PSJib3JkZXItYm94IjtpZihyPD0wfHxyPT1udWxsKXtyPUR0KGUsdCk7aWYocjwwfHxyPT1u
-dWxsKXI9ZS5zdHlsZVt0XTtpZihVdC50ZXN0KHIpKXJldHVybiByO2k9cyYmKHYuc3VwcG9ydC5i
-b3hTaXppbmdSZWxpYWJsZXx8cj09PWUuc3R5bGVbdF0pLHI9cGFyc2VGbG9hdChyKXx8MH1yZXR1
-cm4gcitlbihlLHQsbnx8KHM/ImJvcmRlciI6ImNvbnRlbnQiKSxpKSsicHgifWZ1bmN0aW9uIG5u
-KGUpe2lmKFd0W2VdKXJldHVybiBXdFtlXTt2YXIgdD12KCI8IitlKyI+IikuYXBwZW5kVG8oaS5i
-b2R5KSxuPXQuY3NzKCJkaXNwbGF5Iik7dC5yZW1vdmUoKTtpZihuPT09Im5vbmUifHxuPT09IiIp
-e1B0PWkuYm9keS5hcHBlbmRDaGlsZChQdHx8di5leHRlbmQoaS5jcmVhdGVFbGVtZW50KCJpZnJh
-bWUiKSx7ZnJhbWVCb3JkZXI6MCx3aWR0aDowLGhlaWdodDowfSkpO2lmKCFIdHx8IVB0LmNyZWF0
-ZUVsZW1lbnQpSHQ9KFB0LmNvbnRlbnRXaW5kb3d8fFB0LmNvbnRlbnREb2N1bWVudCkuZG9jdW1l
-bnQsSHQud3JpdGUoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxib2R5PiIpLEh0LmNsb3NlKCk7dD1I
-dC5ib2R5LmFwcGVuZENoaWxkKEh0LmNyZWF0ZUVsZW1lbnQoZSkpLG49RHQodCwiZGlzcGxheSIp
-LGkuYm9keS5yZW1vdmVDaGlsZChQdCl9cmV0dXJuIFd0W2VdPW4sbn1mdW5jdGlvbiBmbihlLHQs
-bixyKXt2YXIgaTtpZih2LmlzQXJyYXkodCkpdi5lYWNoKHQsZnVuY3Rpb24odCxpKXtufHxzbi50
-ZXN0KGUpP3IoZSxpKTpmbihlKyJbIisodHlwZW9mIGk9PSJvYmplY3QiP3Q6IiIpKyJdIixpLG4s
-cil9KTtlbHNlIGlmKCFuJiZ2LnR5cGUodCk9PT0ib2JqZWN0Iilmb3IoaSBpbiB0KWZuKGUrIlsi
-K2krIl0iLHRbaV0sbixyKTtlbHNlIHIoZSx0KX1mdW5jdGlvbiBDbihlKXtyZXR1cm4gZnVuY3Rp
-b24odCxuKXt0eXBlb2YgdCE9InN0cmluZyImJihuPXQsdD0iKiIpO3ZhciByLGkscyxvPXQudG9M
-b3dlckNhc2UoKS5zcGxpdCh5KSx1PTAsYT1vLmxlbmd0aDtpZih2LmlzRnVuY3Rpb24obikpZm9y
-KDt1PGE7dSsrKXI9b1t1XSxzPS9eXCsvLnRlc3QocikscyYmKHI9ci5zdWJzdHIoMSl8fCIqIiks
-aT1lW3JdPWVbcl18fFtdLGlbcz8idW5zaGlmdCI6InB1c2giXShuKX19ZnVuY3Rpb24ga24oZSxu
-LHIsaSxzLG8pe3M9c3x8bi5kYXRhVHlwZXNbMF0sbz1vfHx7fSxvW3NdPSEwO3ZhciB1LGE9ZVtz
-XSxmPTAsbD1hP2EubGVuZ3RoOjAsYz1lPT09U247Zm9yKDtmPGwmJihjfHwhdSk7ZisrKXU9YVtm
-XShuLHIsaSksdHlwZW9mIHU9PSJzdHJpbmciJiYoIWN8fG9bdV0/dT10OihuLmRhdGFUeXBlcy51
-bnNoaWZ0KHUpLHU9a24oZSxuLHIsaSx1LG8pKSk7cmV0dXJuKGN8fCF1KSYmIW9bIioiXSYmKHU9
-a24oZSxuLHIsaSwiKiIsbykpLHV9ZnVuY3Rpb24gTG4oZSxuKXt2YXIgcixpLHM9di5hamF4U2V0
-dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihyIGluIG4pbltyXSE9PXQmJigoc1tyXT9lOml8fChp
-PXt9KSlbcl09bltyXSk7aSYmdi5leHRlbmQoITAsZSxpKX1mdW5jdGlvbiBBbihlLG4scil7dmFy
-IGkscyxvLHUsYT1lLmNvbnRlbnRzLGY9ZS5kYXRhVHlwZXMsbD1lLnJlc3BvbnNlRmllbGRzO2Zv
-cihzIGluIGwpcyBpbiByJiYobltsW3NdXT1yW3NdKTt3aGlsZShmWzBdPT09IioiKWYuc2hpZnQo
-KSxpPT09dCYmKGk9ZS5taW1lVHlwZXx8bi5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBl
-IikpO2lmKGkpZm9yKHMgaW4gYSlpZihhW3NdJiZhW3NdLnRlc3QoaSkpe2YudW5zaGlmdChzKTti
-cmVha31pZihmWzBdaW4gcilvPWZbMF07ZWxzZXtmb3IocyBpbiByKXtpZighZlswXXx8ZS5jb252
-ZXJ0ZXJzW3MrIiAiK2ZbMF1dKXtvPXM7YnJlYWt9dXx8KHU9cyl9bz1vfHx1fWlmKG8pcmV0dXJu
-IG8hPT1mWzBdJiZmLnVuc2hpZnQobykscltvXX1mdW5jdGlvbiBPbihlLHQpe3ZhciBuLHIsaSxz
-LG89ZS5kYXRhVHlwZXMuc2xpY2UoKSx1PW9bMF0sYT17fSxmPTA7ZS5kYXRhRmlsdGVyJiYodD1l
-LmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSk7aWYob1sxXSlmb3IobiBpbiBlLmNvbnZlcnRlcnMp
-YVtuLnRvTG93ZXJDYXNlKCldPWUuY29udmVydGVyc1tuXTtmb3IoO2k9b1srK2ZdOylpZihpIT09
-IioiKXtpZih1IT09IioiJiZ1IT09aSl7bj1hW3UrIiAiK2ldfHxhWyIqICIraV07aWYoIW4pZm9y
-KHIgaW4gYSl7cz1yLnNwbGl0KCIgIik7aWYoc1sxXT09PWkpe249YVt1KyIgIitzWzBdXXx8YVsi
-KiAiK3NbMF1dO2lmKG4pe249PT0hMD9uPWFbcl06YVtyXSE9PSEwJiYoaT1zWzBdLG8uc3BsaWNl
-KGYtLSwwLGkpKTticmVha319fWlmKG4hPT0hMClpZihuJiZlWyJ0aHJvd3MiXSl0PW4odCk7ZWxz
-ZSB0cnl7dD1uKHQpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOm4/
-bDoiTm8gY29udmVyc2lvbiBmcm9tICIrdSsiIHRvICIraX19fXU9aX1yZXR1cm57c3RhdGU6InN1
-Y2Nlc3MiLGRhdGE6dH19ZnVuY3Rpb24gRm4oKXt0cnl7cmV0dXJuIG5ldyBlLlhNTEh0dHBSZXF1
-ZXN0fWNhdGNoKHQpe319ZnVuY3Rpb24gSW4oKXt0cnl7cmV0dXJuIG5ldyBlLkFjdGl2ZVhPYmpl
-Y3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2godCl7fX1mdW5jdGlvbiAkbigpe3JldHVybiBz
-ZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cW49dH0sMCkscW49di5ub3coKX1mdW5jdGlvbiBKbihlLHQp
-e3YuZWFjaCh0LGZ1bmN0aW9uKHQsbil7dmFyIHI9KFZuW3RdfHxbXSkuY29uY2F0KFZuWyIqIl0p
-LGk9MCxzPXIubGVuZ3RoO2Zvcig7aTxzO2krKylpZihyW2ldLmNhbGwoZSx0LG4pKXJldHVybn0p
-fWZ1bmN0aW9uIEtuKGUsdCxuKXt2YXIgcixpPTAscz0wLG89WG4ubGVuZ3RoLHU9di5EZWZlcnJl
-ZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBhLmVsZW19KSxhPWZ1bmN0aW9uKCl7dmFyIHQ9
-cW58fCRuKCksbj1NYXRoLm1heCgwLGYuc3RhcnRUaW1lK2YuZHVyYXRpb24tdCkscj1uL2YuZHVy
-YXRpb258fDAsaT0xLXIscz0wLG89Zi50d2VlbnMubGVuZ3RoO2Zvcig7czxvO3MrKylmLnR3ZWVu
-c1tzXS5ydW4oaSk7cmV0dXJuIHUubm90aWZ5V2l0aChlLFtmLGksbl0pLGk8MSYmbz9uOih1LnJl
-c29sdmVXaXRoKGUsW2ZdKSwhMSl9LGY9dS5wcm9taXNlKHtlbGVtOmUscHJvcHM6di5leHRlbmQo
-e30sdCksb3B0czp2LmV4dGVuZCghMCx7c3BlY2lhbEVhc2luZzp7fX0sbiksb3JpZ2luYWxQcm9w
-ZXJ0aWVzOnQsb3JpZ2luYWxPcHRpb25zOm4sc3RhcnRUaW1lOnFufHwkbigpLGR1cmF0aW9uOm4u
-ZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKHQsbixyKXt2YXIgaT12LlR3
-ZWVuKGUsZi5vcHRzLHQsbixmLm9wdHMuc3BlY2lhbEVhc2luZ1t0XXx8Zi5vcHRzLmVhc2luZyk7
-cmV0dXJuIGYudHdlZW5zLnB1c2goaSksaX0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD9m
-LnR3ZWVucy5sZW5ndGg6MDtmb3IoO248cjtuKyspZi50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0
-P3UucmVzb2x2ZVdpdGgoZSxbZix0XSk6dS5yZWplY3RXaXRoKGUsW2YsdF0pLHRoaXN9fSksbD1m
-LnByb3BzO1FuKGwsZi5vcHRzLnNwZWNpYWxFYXNpbmcpO2Zvcig7aTxvO2krKyl7cj1YbltpXS5j
-YWxsKGYsZSxsLGYub3B0cyk7aWYocilyZXR1cm4gcn1yZXR1cm4gSm4oZixsKSx2LmlzRnVuY3Rp
-b24oZi5vcHRzLnN0YXJ0KSYmZi5vcHRzLnN0YXJ0LmNhbGwoZSxmKSx2LmZ4LnRpbWVyKHYuZXh0
-ZW5kKGEse2FuaW06ZixxdWV1ZTpmLm9wdHMucXVldWUsZWxlbTplfSkpLGYucHJvZ3Jlc3MoZi5v
-cHRzLnByb2dyZXNzKS5kb25lKGYub3B0cy5kb25lLGYub3B0cy5jb21wbGV0ZSkuZmFpbChmLm9w
-dHMuZmFpbCkuYWx3YXlzKGYub3B0cy5hbHdheXMpfWZ1bmN0aW9uIFFuKGUsdCl7dmFyIG4scixp
-LHMsbztmb3IobiBpbiBlKXtyPXYuY2FtZWxDYXNlKG4pLGk9dFtyXSxzPWVbbl0sdi5pc0FycmF5
-KHMpJiYoaT1zWzFdLHM9ZVtuXT1zWzBdKSxuIT09ciYmKGVbcl09cyxkZWxldGUgZVtuXSksbz12
-LmNzc0hvb2tzW3JdO2lmKG8mJiJleHBhbmQiaW4gbyl7cz1vLmV4cGFuZChzKSxkZWxldGUgZVty
-XTtmb3IobiBpbiBzKW4gaW4gZXx8KGVbbl09c1tuXSx0W25dPWkpfWVsc2UgdFtyXT1pfX1mdW5j
-dGlvbiBHbihlLHQsbil7dmFyIHIsaSxzLG8sdSxhLGYsbCxjLGg9dGhpcyxwPWUuc3R5bGUsZD17
-fSxtPVtdLGc9ZS5ub2RlVHlwZSYmR3QoZSk7bi5xdWV1ZXx8KGw9di5fcXVldWVIb29rcyhlLCJm
-eCIpLGwudW5xdWV1ZWQ9PW51bGwmJihsLnVucXVldWVkPTAsYz1sLmVtcHR5LmZpcmUsbC5lbXB0
-eS5maXJlPWZ1bmN0aW9uKCl7bC51bnF1ZXVlZHx8YygpfSksbC51bnF1ZXVlZCsrLGguYWx3YXlz
-KGZ1bmN0aW9uKCl7aC5hbHdheXMoZnVuY3Rpb24oKXtsLnVucXVldWVkLS0sdi5xdWV1ZShlLCJm
-eCIpLmxlbmd0aHx8bC5lbXB0eS5maXJlKCl9KX0pKSxlLm5vZGVUeXBlPT09MSYmKCJoZWlnaHQi
-aW4gdHx8IndpZHRoImluIHQpJiYobi5vdmVyZmxvdz1bcC5vdmVyZmxvdyxwLm92ZXJmbG93WCxw
-Lm92ZXJmbG93WV0sdi5jc3MoZSwiZGlzcGxheSIpPT09ImlubGluZSImJnYuY3NzKGUsImZsb2F0
-Iik9PT0ibm9uZSImJighdi5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXR8fG5uKGUubm9k
-ZU5hbWUpPT09ImlubGluZSI/cC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOnAuem9vbT0xKSksbi5v
-dmVyZmxvdyYmKHAub3ZlcmZsb3c9ImhpZGRlbiIsdi5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3N8
-fGguZG9uZShmdW5jdGlvbigpe3Aub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxwLm92ZXJmbG93WD1u
-Lm92ZXJmbG93WzFdLHAub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSk7Zm9yKHIgaW4gdCl7cz10
-W3JdO2lmKFVuLmV4ZWMocykpe2RlbGV0ZSB0W3JdLGE9YXx8cz09PSJ0b2dnbGUiO2lmKHM9PT0o
-Zz8iaGlkZSI6InNob3ciKSljb250aW51ZTttLnB1c2gocil9fW89bS5sZW5ndGg7aWYobyl7dT12
-Ll9kYXRhKGUsImZ4c2hvdyIpfHx2Ll9kYXRhKGUsImZ4c2hvdyIse30pLCJoaWRkZW4iaW4gdSYm
-KGc9dS5oaWRkZW4pLGEmJih1LmhpZGRlbj0hZyksZz92KGUpLnNob3coKTpoLmRvbmUoZnVuY3Rp
-b24oKXt2KGUpLmhpZGUoKX0pLGguZG9uZShmdW5jdGlvbigpe3ZhciB0O3YucmVtb3ZlRGF0YShl
-LCJmeHNob3ciLCEwKTtmb3IodCBpbiBkKXYuc3R5bGUoZSx0LGRbdF0pfSk7Zm9yKHI9MDtyPG87
-cisrKWk9bVtyXSxmPWguY3JlYXRlVHdlZW4oaSxnP3VbaV06MCksZFtpXT11W2ldfHx2LnN0eWxl
-KGUsaSksaSBpbiB1fHwodVtpXT1mLnN0YXJ0LGcmJihmLmVuZD1mLnN0YXJ0LGYuc3RhcnQ9aT09
-PSJ3aWR0aCJ8fGk9PT0iaGVpZ2h0Ij8xOjApKX19ZnVuY3Rpb24gWW4oZSx0LG4scixpKXtyZXR1
-cm4gbmV3IFluLnByb3RvdHlwZS5pbml0KGUsdCxuLHIsaSl9ZnVuY3Rpb24gWm4oZSx0KXt2YXIg
-bixyPXtoZWlnaHQ6ZX0saT0wO3Q9dD8xOjA7Zm9yKDtpPDQ7aSs9Mi10KW49JHRbaV0sclsibWFy
-Z2luIituXT1yWyJwYWRkaW5nIituXT1lO3JldHVybiB0JiYoci5vcGFjaXR5PXIud2lkdGg9ZSks
-cn1mdW5jdGlvbiB0cihlKXtyZXR1cm4gdi5pc1dpbmRvdyhlKT9lOmUubm9kZVR5cGU9PT05P2Uu
-ZGVmYXVsdFZpZXd8fGUucGFyZW50V2luZG93OiExfXZhciBuLHIsaT1lLmRvY3VtZW50LHM9ZS5s
-b2NhdGlvbixvPWUubmF2aWdhdG9yLHU9ZS5qUXVlcnksYT1lLiQsZj1BcnJheS5wcm90b3R5cGUu
-cHVzaCxsPUFycmF5LnByb3RvdHlwZS5zbGljZSxjPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLGg9
-T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxwPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy
-dHksZD1TdHJpbmcucHJvdG90eXBlLnRyaW0sdj1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgdi5m
-bi5pbml0KGUsdCxuKX0sbT0vW1wtK10/KD86XGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS8u
-c291cmNlLGc9L1xTLyx5PS9ccysvLGI9L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0r
-JC9nLHc9L14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLEU9L148KFx3
-KylccypcLz8+KD86PFwvXDE+fCkkLyxTPS9eW1xdLDp7fVxzXSokLyx4PS8oPzpefDp8LCkoPzpc
-cypcWykrL2csVD0vXFwoPzpbIlxcXC9iZm5ydF18dVtcZGEtZkEtRl17NH0pL2csTj0vIlteIlxc
-XHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZFxkKlwufClcZCsoPzpbZUVdW1wtK10/XGQr
-fCkvZyxDPS9eLW1zLS8saz0vLShbXGRhLXpdKS9naSxMPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQr
-IiIpLnRvVXBwZXJDYXNlKCl9LEE9ZnVuY3Rpb24oKXtpLmFkZEV2ZW50TGlzdGVuZXI/KGkucmVt
-b3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQSwhMSksdi5yZWFkeSgpKTppLnJl
-YWR5U3RhdGU9PT0iY29tcGxldGUiJiYoaS5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdl
-IixBKSx2LnJlYWR5KCkpfSxPPXt9O3YuZm49di5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnYsaW5p
-dDpmdW5jdGlvbihlLG4scil7dmFyIHMsbyx1LGE7aWYoIWUpcmV0dXJuIHRoaXM7aWYoZS5ub2Rl
-VHlwZSlyZXR1cm4gdGhpcy5jb250ZXh0PXRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXM7aWYo
-dHlwZW9mIGU9PSJzdHJpbmciKXtlLmNoYXJBdCgwKT09PSI8IiYmZS5jaGFyQXQoZS5sZW5ndGgt
-MSk9PT0iPiImJmUubGVuZ3RoPj0zP3M9W251bGwsZSxudWxsXTpzPXcuZXhlYyhlKTtpZihzJiYo
-c1sxXXx8IW4pKXtpZihzWzFdKXJldHVybiBuPW4gaW5zdGFuY2VvZiB2P25bMF06bixhPW4mJm4u
-bm9kZVR5cGU/bi5vd25lckRvY3VtZW50fHxuOmksZT12LnBhcnNlSFRNTChzWzFdLGEsITApLEUu
-dGVzdChzWzFdKSYmdi5pc1BsYWluT2JqZWN0KG4pJiZ0aGlzLmF0dHIuY2FsbChlLG4sITApLHYu
-bWVyZ2UodGhpcyxlKTtvPWkuZ2V0RWxlbWVudEJ5SWQoc1syXSk7aWYobyYmby5wYXJlbnROb2Rl
-KXtpZihvLmlkIT09c1syXSlyZXR1cm4gci5maW5kKGUpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1v
-fXJldHVybiB0aGlzLmNvbnRleHQ9aSx0aGlzLnNlbGVjdG9yPWUsdGhpc31yZXR1cm4hbnx8bi5q
-cXVlcnk/KG58fHIpLmZpbmQoZSk6dGhpcy5jb25zdHJ1Y3RvcihuKS5maW5kKGUpfXJldHVybiB2
-LmlzRnVuY3Rpb24oZSk/ci5yZWFkeShlKTooZS5zZWxlY3RvciE9PXQmJih0aGlzLnNlbGVjdG9y
-PWUuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWUuY29udGV4dCksdi5tYWtlQXJyYXkoZSx0aGlzKSl9
-LHNlbGVjdG9yOiIiLGpxdWVyeToiMS44LjMiLGxlbmd0aDowLHNpemU6ZnVuY3Rpb24oKXtyZXR1
-cm4gdGhpcy5sZW5ndGh9LHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gbC5jYWxsKHRoaXMpfSxn
-ZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/dGhpcy50b0FycmF5KCk6ZTwwP3RoaXNbdGhp
-cy5sZW5ndGgrZV06dGhpc1tlXX0scHVzaFN0YWNrOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj12Lm1l
-cmdlKHRoaXMuY29uc3RydWN0b3IoKSxlKTtyZXR1cm4gci5wcmV2T2JqZWN0PXRoaXMsci5jb250
-ZXh0PXRoaXMuY29udGV4dCx0PT09ImZpbmQiP3Iuc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisodGhp
-cy5zZWxlY3Rvcj8iICI6IiIpK246dCYmKHIuc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisiLiIrdCsi
-KCIrbisiKSIpLHJ9LGVhY2g6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdi5lYWNoKHRoaXMsZSx0KX0s
-cmVhZHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHYucmVhZHkucHJvbWlzZSgpLmRvbmUoZSksdGhpc30s
-ZXE6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9K2UsZT09PS0xP3RoaXMuc2xpY2UoZSk6dGhpcy5zbGlj
-ZShlLGUrMSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rp
-b24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVz
-aFN0YWNrKGwuYXBwbHkodGhpcyxhcmd1bWVudHMpLCJzbGljZSIsbC5jYWxsKGFyZ3VtZW50cyku
-am9pbigiLCIpKX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayh2Lm1hcCh0
-aGlzLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4sdCl9KSl9LGVuZDpmdW5jdGlvbigp
-e3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6Zixz
-b3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0sdi5mbi5pbml0LnByb3RvdHlwZT12LmZuLHYu
-ZXh0ZW5kPXYuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsbixyLGkscyxvLHU9YXJndW1lbnRz
-WzBdfHx7fSxhPTEsZj1hcmd1bWVudHMubGVuZ3RoLGw9ITE7dHlwZW9mIHU9PSJib29sZWFuIiYm
-KGw9dSx1PWFyZ3VtZW50c1sxXXx8e30sYT0yKSx0eXBlb2YgdSE9Im9iamVjdCImJiF2LmlzRnVu
-Y3Rpb24odSkmJih1PXt9KSxmPT09YSYmKHU9dGhpcywtLWEpO2Zvcig7YTxmO2ErKylpZigoZT1h
-cmd1bWVudHNbYV0pIT1udWxsKWZvcihuIGluIGUpe3I9dVtuXSxpPWVbbl07aWYodT09PWkpY29u
-dGludWU7bCYmaSYmKHYuaXNQbGFpbk9iamVjdChpKXx8KHM9di5pc0FycmF5KGkpKSk/KHM/KHM9
-ITEsbz1yJiZ2LmlzQXJyYXkocik/cjpbXSk6bz1yJiZ2LmlzUGxhaW5PYmplY3Qocik/cjp7fSx1
-W25dPXYuZXh0ZW5kKGwsbyxpKSk6aSE9PXQmJih1W25dPWkpfXJldHVybiB1fSx2LmV4dGVuZCh7
-bm9Db25mbGljdDpmdW5jdGlvbih0KXtyZXR1cm4gZS4kPT09diYmKGUuJD1hKSx0JiZlLmpRdWVy
-eT09PXYmJihlLmpRdWVyeT11KSx2fSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpm
-dW5jdGlvbihlKXtlP3YucmVhZHlXYWl0Kys6di5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGUp
-e2lmKGU9PT0hMD8tLXYucmVhZHlXYWl0OnYuaXNSZWFkeSlyZXR1cm47aWYoIWkuYm9keSlyZXR1
-cm4gc2V0VGltZW91dCh2LnJlYWR5LDEpO3YuaXNSZWFkeT0hMDtpZihlIT09ITAmJi0tdi5yZWFk
-eVdhaXQ+MClyZXR1cm47ci5yZXNvbHZlV2l0aChpLFt2XSksdi5mbi50cmlnZ2VyJiZ2KGkpLnRy
-aWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpfSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGUpe3JldHVy
-biB2LnR5cGUoZSk9PT0iZnVuY3Rpb24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9u
-KGUpe3JldHVybiB2LnR5cGUoZSk9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihlKXtyZXR1
-cm4gZSE9bnVsbCYmZT09ZS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihlKXtyZXR1cm4haXNO
-YU4ocGFyc2VGbG9hdChlKSkmJmlzRmluaXRlKGUpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBl
-PT1udWxsP1N0cmluZyhlKTpPW2guY2FsbChlKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1
-bmN0aW9uKGUpe2lmKCFlfHx2LnR5cGUoZSkhPT0ib2JqZWN0Inx8ZS5ub2RlVHlwZXx8di5pc1dp
-bmRvdyhlKSlyZXR1cm4hMTt0cnl7aWYoZS5jb25zdHJ1Y3RvciYmIXAuY2FsbChlLCJjb25zdHJ1
-Y3RvciIpJiYhcC5jYWxsKGUuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikp
-cmV0dXJuITF9Y2F0Y2gobil7cmV0dXJuITF9dmFyIHI7Zm9yKHIgaW4gZSk7cmV0dXJuIHI9PT10
-fHxwLmNhbGwoZSxyKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBl
-KXJldHVybiExO3JldHVybiEwfSxlcnJvcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoZSl9
-LHBhcnNlSFRNTDpmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIWV8fHR5cGVvZiBlIT0ic3Ry
-aW5nIj9udWxsOih0eXBlb2YgdD09ImJvb2xlYW4iJiYobj10LHQ9MCksdD10fHxpLChyPUUuZXhl
-YyhlKSk/W3QuY3JlYXRlRWxlbWVudChyWzFdKV06KHI9di5idWlsZEZyYWdtZW50KFtlXSx0LG4/
-bnVsbDpbXSksdi5tZXJnZShbXSwoci5jYWNoZWFibGU/di5jbG9uZShyLmZyYWdtZW50KTpyLmZy
-YWdtZW50KS5jaGlsZE5vZGVzKSkpfSxwYXJzZUpTT046ZnVuY3Rpb24odCl7aWYoIXR8fHR5cGVv
-ZiB0IT0ic3RyaW5nIilyZXR1cm4gbnVsbDt0PXYudHJpbSh0KTtpZihlLkpTT04mJmUuSlNPTi5w
-YXJzZSlyZXR1cm4gZS5KU09OLnBhcnNlKHQpO2lmKFMudGVzdCh0LnJlcGxhY2UoVCwiQCIpLnJl
-cGxhY2UoTiwiXSIpLnJlcGxhY2UoeCwiIikpKXJldHVybihuZXcgRnVuY3Rpb24oInJldHVybiAi
-K3QpKSgpO3YuZXJyb3IoIkludmFsaWQgSlNPTjogIit0KX0scGFyc2VYTUw6ZnVuY3Rpb24obil7
-dmFyIHIsaTtpZighbnx8dHlwZW9mIG4hPSJzdHJpbmciKXJldHVybiBudWxsO3RyeXtlLkRPTVBh
-cnNlcj8oaT1uZXcgRE9NUGFyc2VyLHI9aS5wYXJzZUZyb21TdHJpbmcobiwidGV4dC94bWwiKSk6
-KHI9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxyLmFzeW5jPSJmYWxzZSIs
-ci5sb2FkWE1MKG4pKX1jYXRjaChzKXtyPXR9cmV0dXJuKCFyfHwhci5kb2N1bWVudEVsZW1lbnR8
-fHIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmdi5lcnJvcigi
-SW52YWxpZCBYTUw6ICIrbikscn0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlv
-bih0KXt0JiZnLnRlc3QodCkmJihlLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKHQpe2UuZXZhbC5jYWxs
-KGUsdCl9KSh0KX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoQywibXMt
-IikucmVwbGFjZShrLEwpfSxub2RlTmFtZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLm5vZGVOYW1l
-JiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rp
-b24oZSxuLHIpe3ZhciBpLHM9MCxvPWUubGVuZ3RoLHU9bz09PXR8fHYuaXNGdW5jdGlvbihlKTtp
-ZihyKXtpZih1KXtmb3IoaSBpbiBlKWlmKG4uYXBwbHkoZVtpXSxyKT09PSExKWJyZWFrfWVsc2Ug
-Zm9yKDtzPG87KWlmKG4uYXBwbHkoZVtzKytdLHIpPT09ITEpYnJlYWt9ZWxzZSBpZih1KXtmb3Io
-aSBpbiBlKWlmKG4uY2FsbChlW2ldLGksZVtpXSk9PT0hMSlicmVha31lbHNlIGZvcig7czxvOylp
-ZihuLmNhbGwoZVtzXSxzLGVbcysrXSk9PT0hMSlicmVhaztyZXR1cm4gZX0sdHJpbTpkJiYhZC5j
-YWxsKCJcdWZlZmZcdTAwYTAiKT9mdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD8iIjpkLmNhbGwo
-ZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPyIiOihlKyIiKS5yZXBsYWNlKGIsIiIpfSxt
-YWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXR8fFtdO3JldHVybiBlIT1udWxsJiYobj12
-LnR5cGUoZSksZS5sZW5ndGg9PW51bGx8fG49PT0ic3RyaW5nInx8bj09PSJmdW5jdGlvbiJ8fG49
-PT0icmVnZXhwInx8di5pc1dpbmRvdyhlKT9mLmNhbGwocixlKTp2Lm1lcmdlKHIsZSkpLHJ9LGlu
-QXJyYXk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKHQpe2lmKGMpcmV0dXJuIGMuY2FsbCh0LGUs
-bik7cj10Lmxlbmd0aCxuPW4/bjwwP01hdGgubWF4KDAscituKTpuOjA7Zm9yKDtuPHI7bisrKWlm
-KG4gaW4gdCYmdFtuXT09PWUpcmV0dXJuIG59cmV0dXJuLTF9LG1lcmdlOmZ1bmN0aW9uKGUsbil7
-dmFyIHI9bi5sZW5ndGgsaT1lLmxlbmd0aCxzPTA7aWYodHlwZW9mIHI9PSJudW1iZXIiKWZvcig7
-czxyO3MrKyllW2krK109bltzXTtlbHNlIHdoaWxlKG5bc10hPT10KWVbaSsrXT1uW3MrK107cmV0
-dXJuIGUubGVuZ3RoPWksZX0sZ3JlcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT1bXSxzPTAsbz1l
-Lmxlbmd0aDtuPSEhbjtmb3IoO3M8bztzKyspcj0hIXQoZVtzXSxzKSxuIT09ciYmaS5wdXNoKGVb
-c10pO3JldHVybiBpfSxtYXA6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLHMsbz1bXSx1PTAsYT1lLmxl
-bmd0aCxmPWUgaW5zdGFuY2VvZiB2fHxhIT09dCYmdHlwZW9mIGE9PSJudW1iZXIiJiYoYT4wJiZl
-WzBdJiZlW2EtMV18fGE9PT0wfHx2LmlzQXJyYXkoZSkpO2lmKGYpZm9yKDt1PGE7dSsrKWk9bihl
-W3VdLHUsciksaSE9bnVsbCYmKG9bby5sZW5ndGhdPWkpO2Vsc2UgZm9yKHMgaW4gZSlpPW4oZVtz
-XSxzLHIpLGkhPW51bGwmJihvW28ubGVuZ3RoXT1pKTtyZXR1cm4gby5jb25jYXQuYXBwbHkoW10s
-byl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihlLG4pe3ZhciByLGkscztyZXR1cm4gdHlwZW9mIG49
-PSJzdHJpbmciJiYocj1lW25dLG49ZSxlPXIpLHYuaXNGdW5jdGlvbihlKT8oaT1sLmNhbGwoYXJn
-dW1lbnRzLDIpLHM9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseShuLGkuY29uY2F0KGwuY2FsbChh
-cmd1bWVudHMpKSl9LHMuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHx2Lmd1aWQrKyxzKTp0fSxhY2Nlc3M6
-ZnVuY3Rpb24oZSxuLHIsaSxzLG8sdSl7dmFyIGEsZj1yPT1udWxsLGw9MCxjPWUubGVuZ3RoO2lm
-KHImJnR5cGVvZiByPT0ib2JqZWN0Iil7Zm9yKGwgaW4gcil2LmFjY2VzcyhlLG4sbCxyW2xdLDEs
-byxpKTtzPTF9ZWxzZSBpZihpIT09dCl7YT11PT09dCYmdi5pc0Z1bmN0aW9uKGkpLGYmJihhPyhh
-PW4sbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGEuY2FsbCh2KGUpLG4pfSk6KG4uY2FsbChlLGkp
-LG49bnVsbCkpO2lmKG4pZm9yKDtsPGM7bCsrKW4oZVtsXSxyLGE/aS5jYWxsKGVbbF0sbCxuKGVb
-bF0scikpOmksdSk7cz0xfXJldHVybiBzP2U6Zj9uLmNhbGwoZSk6Yz9uKGVbMF0scik6b30sbm93
-OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9fSksdi5yZWFkeS5wcm9taXNl
-PWZ1bmN0aW9uKHQpe2lmKCFyKXtyPXYuRGVmZXJyZWQoKTtpZihpLnJlYWR5U3RhdGU9PT0iY29t
-cGxldGUiKXNldFRpbWVvdXQodi5yZWFkeSwxKTtlbHNlIGlmKGkuYWRkRXZlbnRMaXN0ZW5lcilp
-LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEEsITEpLGUuYWRkRXZlbnRMaXN0
-ZW5lcigibG9hZCIsdi5yZWFkeSwhMSk7ZWxzZXtpLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVj
-aGFuZ2UiLEEpLGUuYXR0YWNoRXZlbnQoIm9ubG9hZCIsdi5yZWFkeSk7dmFyIG49ITE7dHJ5e249
-ZS5mcmFtZUVsZW1lbnQ9PW51bGwmJmkuZG9jdW1lbnRFbGVtZW50fWNhdGNoKHMpe31uJiZuLmRv
-U2Nyb2xsJiZmdW5jdGlvbiBvKCl7aWYoIXYuaXNSZWFkeSl7dHJ5e24uZG9TY3JvbGwoImxlZnQi
-KX1jYXRjaChlKXtyZXR1cm4gc2V0VGltZW91dChvLDUwKX12LnJlYWR5KCl9fSgpfX1yZXR1cm4g
-ci5wcm9taXNlKHQpfSx2LmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJh
-eSBEYXRlIFJlZ0V4cCBPYmplY3QiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtPWyJbb2JqZWN0
-ICIrdCsiXSJdPXQudG9Mb3dlckNhc2UoKX0pLG49dihpKTt2YXIgTT17fTt2LkNhbGxiYWNrcz1m
-dW5jdGlvbihlKXtlPXR5cGVvZiBlPT0ic3RyaW5nIj9NW2VdfHxfKGUpOnYuZXh0ZW5kKHt9LGUp
-O3ZhciBuLHIsaSxzLG8sdSxhPVtdLGY9IWUub25jZSYmW10sbD1mdW5jdGlvbih0KXtuPWUubWVt
-b3J5JiZ0LHI9ITAsdT1zfHwwLHM9MCxvPWEubGVuZ3RoLGk9ITA7Zm9yKDthJiZ1PG87dSsrKWlm
-KGFbdV0uYXBwbHkodFswXSx0WzFdKT09PSExJiZlLnN0b3BPbkZhbHNlKXtuPSExO2JyZWFrfWk9
-ITEsYSYmKGY/Zi5sZW5ndGgmJmwoZi5zaGlmdCgpKTpuP2E9W106Yy5kaXNhYmxlKCkpfSxjPXth
-ZGQ6ZnVuY3Rpb24oKXtpZihhKXt2YXIgdD1hLmxlbmd0aDsoZnVuY3Rpb24gcih0KXt2LmVhY2go
-dCxmdW5jdGlvbih0LG4pe3ZhciBpPXYudHlwZShuKTtpPT09ImZ1bmN0aW9uIj8oIWUudW5pcXVl
-fHwhYy5oYXMobikpJiZhLnB1c2gobik6biYmbi5sZW5ndGgmJmkhPT0ic3RyaW5nIiYmcihuKX0p
-fSkoYXJndW1lbnRzKSxpP289YS5sZW5ndGg6biYmKHM9dCxsKG4pKX1yZXR1cm4gdGhpc30scmVt
-b3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIGEmJnYuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSx0KXt2
-YXIgbjt3aGlsZSgobj12LmluQXJyYXkodCxhLG4pKT4tMSlhLnNwbGljZShuLDEpLGkmJihuPD1v
-JiZvLS0sbjw9dSYmdS0tKX0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gdi5pbkFycmF5
-KGUsYSk+LTF9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGE9W10sdGhpc30sZGlzYWJsZTpmdW5j
-dGlvbigpe3JldHVybiBhPWY9bj10LHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWF9
-LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZj10LG58fGMuZGlzYWJsZSgpLHRoaXN9LGxvY2tlZDpm
-dW5jdGlvbigpe3JldHVybiFmfSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiB0PXR8fFtd
-LHQ9W2UsdC5zbGljZT90LnNsaWNlKCk6dF0sYSYmKCFyfHxmKSYmKGk/Zi5wdXNoKHQpOmwodCkp
-LHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gYy5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyks
-dGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXJ9fTtyZXR1cm4gY30sdi5leHRlbmQoe0Rl
-ZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciB0PVtbInJlc29sdmUiLCJkb25lIix2LkNhbGxiYWNrcygi
-b25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLHYuQ2FsbGJhY2tzKCJv
-bmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLHYuQ2FsbGJhY2tz
-KCJtZW1vcnkiKV1dLG49InBlbmRpbmciLHI9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG59LGFs
-d2F5czpmdW5jdGlvbigpe3JldHVybiBpLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyks
-dGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztyZXR1cm4gdi5EZWZlcnJlZChm
-dW5jdGlvbihuKXt2LmVhY2godCxmdW5jdGlvbih0LHIpe3ZhciBzPXJbMF0sbz1lW3RdO2lbclsx
-XV0odi5pc0Z1bmN0aW9uKG8pP2Z1bmN0aW9uKCl7dmFyIGU9by5hcHBseSh0aGlzLGFyZ3VtZW50
-cyk7ZSYmdi5pc0Z1bmN0aW9uKGUucHJvbWlzZSk/ZS5wcm9taXNlKCkuZG9uZShuLnJlc29sdmUp
-LmZhaWwobi5yZWplY3QpLnByb2dyZXNzKG4ubm90aWZ5KTpuW3MrIldpdGgiXSh0aGlzPT09aT9u
-OnRoaXMsW2VdKX06bltzXSl9KSxlPW51bGx9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24o
-ZSl7cmV0dXJuIGUhPW51bGw/di5leHRlbmQoZSxyKTpyfX0saT17fTtyZXR1cm4gci5waXBlPXIu
-dGhlbix2LmVhY2godCxmdW5jdGlvbihlLHMpe3ZhciBvPXNbMl0sdT1zWzNdO3Jbc1sxXV09by5h
-ZGQsdSYmby5hZGQoZnVuY3Rpb24oKXtuPXV9LHRbZV4xXVsyXS5kaXNhYmxlLHRbMl1bMl0ubG9j
-ayksaVtzWzBdXT1vLmZpcmUsaVtzWzBdKyJXaXRoIl09by5maXJlV2l0aH0pLHIucHJvbWlzZShp
-KSxlJiZlLmNhbGwoaSxpKSxpfSx3aGVuOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbj1sLmNhbGwoYXJn
-dW1lbnRzKSxyPW4ubGVuZ3RoLGk9ciE9PTF8fGUmJnYuaXNGdW5jdGlvbihlLnByb21pc2UpP3I6
-MCxzPWk9PT0xP2U6di5EZWZlcnJlZCgpLG89ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlv
-bihyKXt0W2VdPXRoaXMsbltlXT1hcmd1bWVudHMubGVuZ3RoPjE/bC5jYWxsKGFyZ3VtZW50cyk6
-cixuPT09dT9zLm5vdGlmeVdpdGgodCxuKTotLWl8fHMucmVzb2x2ZVdpdGgodCxuKX19LHUsYSxm
-O2lmKHI+MSl7dT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkociksZj1uZXcgQXJyYXkocik7Zm9y
-KDt0PHI7dCsrKW5bdF0mJnYuaXNGdW5jdGlvbihuW3RdLnByb21pc2UpP25bdF0ucHJvbWlzZSgp
-LmRvbmUobyh0LGYsbikpLmZhaWwocy5yZWplY3QpLnByb2dyZXNzKG8odCxhLHUpKTotLWl9cmV0
-dXJuIGl8fHMucmVzb2x2ZVdpdGgoZixuKSxzLnByb21pc2UoKX19KSx2LnN1cHBvcnQ9ZnVuY3Rp
-b24oKXt2YXIgdCxuLHIscyxvLHUsYSxmLGwsYyxoLHA9aS5jcmVhdGVFbGVtZW50KCJkaXYiKTtw
-LnNldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIiwidCIpLHAuaW5uZXJIVE1MPSIgIDxsaW5rLz48dGFi
-bGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLG49
-cC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLHI9cC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIp
-WzBdO2lmKCFufHwhcnx8IW4ubGVuZ3RoKXJldHVybnt9O3M9aS5jcmVhdGVFbGVtZW50KCJzZWxl
-Y3QiKSxvPXMuYXBwZW5kQ2hpbGQoaS5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSksdT1wLmdldEVs
-ZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLHIuc3R5bGUuY3NzVGV4dD0idG9wOjFweDtmbG9h
-dDpsZWZ0O29wYWNpdHk6LjUiLHQ9e2xlYWRpbmdXaGl0ZXNwYWNlOnAuZmlyc3RDaGlsZC5ub2Rl
-VHlwZT09PTMsdGJvZHk6IXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLGh0
-bWxTZXJpYWxpemU6ISFwLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIikubGVuZ3RoLHN0eWxl
-Oi90b3AvLnRlc3Qoci5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLGhyZWZOb3JtYWxpemVkOnIuZ2V0
-QXR0cmlidXRlKCJocmVmIik9PT0iL2EiLG9wYWNpdHk6L14wLjUvLnRlc3Qoci5zdHlsZS5vcGFj
-aXR5KSxjc3NGbG9hdDohIXIuc3R5bGUuY3NzRmxvYXQsY2hlY2tPbjp1LnZhbHVlPT09Im9uIixv
-cHRTZWxlY3RlZDpvLnNlbGVjdGVkLGdldFNldEF0dHJpYnV0ZTpwLmNsYXNzTmFtZSE9PSJ0Iixl
-bmN0eXBlOiEhaS5jcmVhdGVFbGVtZW50KCJmb3JtIikuZW5jdHlwZSxodG1sNUNsb25lOmkuY3Jl
-YXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCEwKS5vdXRlckhUTUwhPT0iPDpuYXY+PC86bmF2
-PiIsYm94TW9kZWw6aS5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiLHN1Ym1pdEJ1YmJsZXM6ITAs
-Y2hhbmdlQnViYmxlczohMCxmb2N1c2luQnViYmxlczohMSxkZWxldGVFeHBhbmRvOiEwLG5vQ2xv
-bmVFdmVudDohMCxpbmxpbmVCbG9ja05lZWRzTGF5b3V0OiExLHNocmlua1dyYXBCbG9ja3M6ITEs
-cmVsaWFibGVNYXJnaW5SaWdodDohMCxib3hTaXppbmdSZWxpYWJsZTohMCxwaXhlbFBvc2l0aW9u
-OiExfSx1LmNoZWNrZWQ9ITAsdC5ub0Nsb25lQ2hlY2tlZD11LmNsb25lTm9kZSghMCkuY2hlY2tl
-ZCxzLmRpc2FibGVkPSEwLHQub3B0RGlzYWJsZWQ9IW8uZGlzYWJsZWQ7dHJ5e2RlbGV0ZSBwLnRl
-c3R9Y2F0Y2goZCl7dC5kZWxldGVFeHBhbmRvPSExfSFwLmFkZEV2ZW50TGlzdGVuZXImJnAuYXR0
-YWNoRXZlbnQmJnAuZmlyZUV2ZW50JiYocC5hdHRhY2hFdmVudCgib25jbGljayIsaD1mdW5jdGlv
-bigpe3Qubm9DbG9uZUV2ZW50PSExfSkscC5jbG9uZU5vZGUoITApLmZpcmVFdmVudCgib25jbGlj
-ayIpLHAuZGV0YWNoRXZlbnQoIm9uY2xpY2siLGgpKSx1PWkuY3JlYXRlRWxlbWVudCgiaW5wdXQi
-KSx1LnZhbHVlPSJ0Iix1LnNldEF0dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksdC5yYWRpb1ZhbHVl
-PXUudmFsdWU9PT0idCIsdS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIiksdS5zZXRB
-dHRyaWJ1dGUoIm5hbWUiLCJ0IikscC5hcHBlbmRDaGlsZCh1KSxhPWkuY3JlYXRlRG9jdW1lbnRG
-cmFnbWVudCgpLGEuYXBwZW5kQ2hpbGQocC5sYXN0Q2hpbGQpLHQuY2hlY2tDbG9uZT1hLmNsb25l
-Tm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCx0LmFwcGVuZENoZWNrZWQ9
-dS5jaGVja2VkLGEucmVtb3ZlQ2hpbGQodSksYS5hcHBlbmRDaGlsZChwKTtpZihwLmF0dGFjaEV2
-ZW50KWZvcihsIGlue3N1Ym1pdDohMCxjaGFuZ2U6ITAsZm9jdXNpbjohMH0pZj0ib24iK2wsYz1m
-IGluIHAsY3x8KHAuc2V0QXR0cmlidXRlKGYsInJldHVybjsiKSxjPXR5cGVvZiBwW2ZdPT0iZnVu
-Y3Rpb24iKSx0W2wrIkJ1YmJsZXMiXT1jO3JldHVybiB2KGZ1bmN0aW9uKCl7dmFyIG4scixzLG8s
-dT0icGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlk
-ZGVuOyIsYT1pLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07aWYoIWEpcmV0dXJuO249
-aS5jcmVhdGVFbGVtZW50KCJkaXYiKSxuLnN0eWxlLmNzc1RleHQ9InZpc2liaWxpdHk6aGlkZGVu
-O2JvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246c3RhdGljO3RvcDowO21hcmdpbi10
-b3A6MXB4IixhLmluc2VydEJlZm9yZShuLGEuZmlyc3RDaGlsZCkscj1pLmNyZWF0ZUVsZW1lbnQo
-ImRpdiIpLG4uYXBwZW5kQ2hpbGQociksci5pbm5lckhUTUw9Ijx0YWJsZT48dHI+PHRkPjwvdGQ+
-PHRkPnQ8L3RkPjwvdHI+PC90YWJsZT4iLHM9ci5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKSxz
-WzBdLnN0eWxlLmNzc1RleHQ9InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5Om5v
-bmUiLGM9c1swXS5vZmZzZXRIZWlnaHQ9PT0wLHNbMF0uc3R5bGUuZGlzcGxheT0iIixzWzFdLnN0
-eWxlLmRpc3BsYXk9Im5vbmUiLHQucmVsaWFibGVIaWRkZW5PZmZzZXRzPWMmJnNbMF0ub2Zmc2V0
-SGVpZ2h0PT09MCxyLmlubmVySFRNTD0iIixyLnN0eWxlLmNzc1RleHQ9ImJveC1zaXppbmc6Ym9y
-ZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWJveC1zaXppbmc6Ym9y
-ZGVyLWJveDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6NHB4O21h
-cmdpbi10b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElOyIsdC5ib3hTaXppbmc9ci5vZmZz
-ZXRXaWR0aD09PTQsdC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldD1hLm9mZnNldFRv
-cCE9PTEsZS5nZXRDb21wdXRlZFN0eWxlJiYodC5waXhlbFBvc2l0aW9uPShlLmdldENvbXB1dGVk
-U3R5bGUocixudWxsKXx8e30pLnRvcCE9PSIxJSIsdC5ib3hTaXppbmdSZWxpYWJsZT0oZS5nZXRD
-b21wdXRlZFN0eWxlKHIsbnVsbCl8fHt3aWR0aDoiNHB4In0pLndpZHRoPT09IjRweCIsbz1pLmNy
-ZWF0ZUVsZW1lbnQoImRpdiIpLG8uc3R5bGUuY3NzVGV4dD1yLnN0eWxlLmNzc1RleHQ9dSxvLnN0
-eWxlLm1hcmdpblJpZ2h0PW8uc3R5bGUud2lkdGg9IjAiLHIuc3R5bGUud2lkdGg9IjFweCIsci5h
-cHBlbmRDaGlsZChvKSx0LnJlbGlhYmxlTWFyZ2luUmlnaHQ9IXBhcnNlRmxvYXQoKGUuZ2V0Q29t
-cHV0ZWRTdHlsZShvLG51bGwpfHx7fSkubWFyZ2luUmlnaHQpKSx0eXBlb2Ygci5zdHlsZS56b29t
-IT0idW5kZWZpbmVkIiYmKHIuaW5uZXJIVE1MPSIiLHIuc3R5bGUuY3NzVGV4dD11KyJ3aWR0aDox
-cHg7cGFkZGluZzoxcHg7ZGlzcGxheTppbmxpbmU7em9vbToxIix0LmlubGluZUJsb2NrTmVlZHNM
-YXlvdXQ9ci5vZmZzZXRXaWR0aD09PTMsci5zdHlsZS5kaXNwbGF5PSJibG9jayIsci5zdHlsZS5v
-dmVyZmxvdz0idmlzaWJsZSIsci5pbm5lckhUTUw9IjxkaXY+PC9kaXY+IixyLmZpcnN0Q2hpbGQu
-c3R5bGUud2lkdGg9IjVweCIsdC5zaHJpbmtXcmFwQmxvY2tzPXIub2Zmc2V0V2lkdGghPT0zLG4u
-c3R5bGUuem9vbT0xKSxhLnJlbW92ZUNoaWxkKG4pLG49cj1zPW89bnVsbH0pLGEucmVtb3ZlQ2hp
-bGQocCksbj1yPXM9bz11PWE9cD1udWxsLHR9KCk7dmFyIEQ9Lyg/Olx7W1xzXFNdKlx9fFxbW1xz
-XFNdKlxdKSQvLFA9LyhbQS1aXSkvZzt2LmV4dGVuZCh7Y2FjaGU6e30sZGVsZXRlZElkczpbXSx1
-dWlkOjAsZXhwYW5kbzoialF1ZXJ5Iisodi5mbi5qcXVlcnkrTWF0aC5yYW5kb20oKSkucmVwbGFj
-ZSgvXEQvZywiIiksbm9EYXRhOntlbWJlZDohMCxvYmplY3Q6ImNsc2lkOkQyN0NEQjZFLUFFNkQt
-MTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsYXBwbGV0OiEwfSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3Jl
-dHVybiBlPWUubm9kZVR5cGU/di5jYWNoZVtlW3YuZXhwYW5kb11dOmVbdi5leHBhbmRvXSwhIWUm
-JiFCKGUpfSxkYXRhOmZ1bmN0aW9uKGUsbixyLGkpe2lmKCF2LmFjY2VwdERhdGEoZSkpcmV0dXJu
-O3ZhciBzLG8sdT12LmV4cGFuZG8sYT10eXBlb2Ygbj09InN0cmluZyIsZj1lLm5vZGVUeXBlLGw9
-Zj92LmNhY2hlOmUsYz1mP2VbdV06ZVt1XSYmdTtpZigoIWN8fCFsW2NdfHwhaSYmIWxbY10uZGF0
-YSkmJmEmJnI9PT10KXJldHVybjtjfHwoZj9lW3VdPWM9di5kZWxldGVkSWRzLnBvcCgpfHx2Lmd1
-aWQrKzpjPXUpLGxbY118fChsW2NdPXt9LGZ8fChsW2NdLnRvSlNPTj12Lm5vb3ApKTtpZih0eXBl
-b2Ygbj09Im9iamVjdCJ8fHR5cGVvZiBuPT0iZnVuY3Rpb24iKWk/bFtjXT12LmV4dGVuZChsW2Nd
-LG4pOmxbY10uZGF0YT12LmV4dGVuZChsW2NdLmRhdGEsbik7cmV0dXJuIHM9bFtjXSxpfHwocy5k
-YXRhfHwocy5kYXRhPXt9KSxzPXMuZGF0YSksciE9PXQmJihzW3YuY2FtZWxDYXNlKG4pXT1yKSxh
-PyhvPXNbbl0sbz09bnVsbCYmKG89c1t2LmNhbWVsQ2FzZShuKV0pKTpvPXMsb30scmVtb3ZlRGF0
-YTpmdW5jdGlvbihlLHQsbil7aWYoIXYuYWNjZXB0RGF0YShlKSlyZXR1cm47dmFyIHIsaSxzLG89
-ZS5ub2RlVHlwZSx1PW8/di5jYWNoZTplLGE9bz9lW3YuZXhwYW5kb106di5leHBhbmRvO2lmKCF1
-W2FdKXJldHVybjtpZih0KXtyPW4/dVthXTp1W2FdLmRhdGE7aWYocil7di5pc0FycmF5KHQpfHwo
-dCBpbiByP3Q9W3RdOih0PXYuY2FtZWxDYXNlKHQpLHQgaW4gcj90PVt0XTp0PXQuc3BsaXQoIiAi
-KSkpO2ZvcihpPTAscz10Lmxlbmd0aDtpPHM7aSsrKWRlbGV0ZSByW3RbaV1dO2lmKCEobj9COnYu
-aXNFbXB0eU9iamVjdCkocikpcmV0dXJufX1pZighbil7ZGVsZXRlIHVbYV0uZGF0YTtpZighQih1
-W2FdKSlyZXR1cm59bz92LmNsZWFuRGF0YShbZV0sITApOnYuc3VwcG9ydC5kZWxldGVFeHBhbmRv
-fHx1IT11LndpbmRvdz9kZWxldGUgdVthXTp1W2FdPW51bGx9LF9kYXRhOmZ1bmN0aW9uKGUsdCxu
-KXtyZXR1cm4gdi5kYXRhKGUsdCxuLCEwKX0sYWNjZXB0RGF0YTpmdW5jdGlvbihlKXt2YXIgdD1l
-Lm5vZGVOYW1lJiZ2Lm5vRGF0YVtlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO3JldHVybiF0fHx0
-IT09ITAmJmUuZ2V0QXR0cmlidXRlKCJjbGFzc2lkIik9PT10fX0pLHYuZm4uZXh0ZW5kKHtkYXRh
-OmZ1bmN0aW9uKGUsbil7dmFyIHIsaSxzLG8sdSxhPXRoaXNbMF0sZj0wLGw9bnVsbDtpZihlPT09
-dCl7aWYodGhpcy5sZW5ndGgpe2w9di5kYXRhKGEpO2lmKGEubm9kZVR5cGU9PT0xJiYhdi5fZGF0
-YShhLCJwYXJzZWRBdHRycyIpKXtzPWEuYXR0cmlidXRlcztmb3IodT1zLmxlbmd0aDtmPHU7Zisr
-KW89c1tmXS5uYW1lLG8uaW5kZXhPZigiZGF0YS0iKXx8KG89di5jYW1lbENhc2Uoby5zdWJzdHJp
-bmcoNSkpLEgoYSxvLGxbb10pKTt2Ll9kYXRhKGEsInBhcnNlZEF0dHJzIiwhMCl9fXJldHVybiBs
-fXJldHVybiB0eXBlb2YgZT09Im9iamVjdCI/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7di5kYXRhKHRo
-aXMsZSl9KToocj1lLnNwbGl0KCIuIiwyKSxyWzFdPXJbMV0/Ii4iK3JbMV06IiIsaT1yWzFdKyIh
-Iix2LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKG4pe2lmKG49PT10KXJldHVybiBsPXRoaXMudHJpZ2dl
-ckhhbmRsZXIoImdldERhdGEiK2ksW3JbMF1dKSxsPT09dCYmYSYmKGw9di5kYXRhKGEsZSksbD1I
-KGEsZSxsKSksbD09PXQmJnJbMV0/dGhpcy5kYXRhKHJbMF0pOmw7clsxXT1uLHRoaXMuZWFjaChm
-dW5jdGlvbigpe3ZhciB0PXYodGhpcyk7dC50cmlnZ2VySGFuZGxlcigic2V0RGF0YSIraSxyKSx2
-LmRhdGEodGhpcyxlLG4pLHQudHJpZ2dlckhhbmRsZXIoImNoYW5nZURhdGEiK2kscil9KX0sbnVs
-bCxuLGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCExKSl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7
-cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3YucmVtb3ZlRGF0YSh0aGlzLGUpfSl9fSksdi5l
-eHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZihlKXJldHVybiB0PSh0fHwiZngi
-KSsicXVldWUiLHI9di5fZGF0YShlLHQpLG4mJighcnx8di5pc0FycmF5KG4pP3I9di5fZGF0YShl
-LHQsdi5tYWtlQXJyYXkobikpOnIucHVzaChuKSkscnx8W119LGRlcXVldWU6ZnVuY3Rpb24oZSx0
-KXt0PXR8fCJmeCI7dmFyIG49di5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCkscz12
-Ll9xdWV1ZUhvb2tzKGUsdCksbz1mdW5jdGlvbigpe3YuZGVxdWV1ZShlLHQpfTtpPT09ImlucHJv
-Z3Jlc3MiJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYodD09PSJmeCImJm4udW5zaGlmdCgiaW5wcm9n
-cmVzcyIpLGRlbGV0ZSBzLnN0b3AsaS5jYWxsKGUsbyxzKSksIXImJnMmJnMuZW1wdHkuZmlyZSgp
-fSxfcXVldWVIb29rczpmdW5jdGlvbihlLHQpe3ZhciBuPXQrInF1ZXVlSG9va3MiO3JldHVybiB2
-Ll9kYXRhKGUsbil8fHYuX2RhdGEoZSxuLHtlbXB0eTp2LkNhbGxiYWNrcygib25jZSBtZW1vcnki
-KS5hZGQoZnVuY3Rpb24oKXt2LnJlbW92ZURhdGEoZSx0KyJxdWV1ZSIsITApLHYucmVtb3ZlRGF0
-YShlLG4sITApfSl9KX19KSx2LmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSxuKXt2YXIgcj0y
-O3JldHVybiB0eXBlb2YgZSE9InN0cmluZyImJihuPWUsZT0iZngiLHItLSksYXJndW1lbnRzLmxl
-bmd0aDxyP3YucXVldWUodGhpc1swXSxlKTpuPT09dD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigp
-e3ZhciB0PXYucXVldWUodGhpcyxlLG4pO3YuX3F1ZXVlSG9va3ModGhpcyxlKSxlPT09ImZ4IiYm
-dFswXSE9PSJpbnByb2dyZXNzIiYmdi5kZXF1ZXVlKHRoaXMsZSl9KX0sZGVxdWV1ZTpmdW5jdGlv
-bihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7di5kZXF1ZXVlKHRoaXMsZSl9KX0sZGVs
-YXk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT12LmZ4P3YuZnguc3BlZWRzW2VdfHxlOmUsdD10fHwi
-ZngiLHRoaXMucXVldWUodCxmdW5jdGlvbih0LG4pe3ZhciByPXNldFRpbWVvdXQodCxlKTtuLnN0
-b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocil9fSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oZSl7
-cmV0dXJuIHRoaXMucXVldWUoZXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSxuKXt2YXIg
-cixpPTEscz12LkRlZmVycmVkKCksbz10aGlzLHU9dGhpcy5sZW5ndGgsYT1mdW5jdGlvbigpey0t
-aXx8cy5yZXNvbHZlV2l0aChvLFtvXSl9O3R5cGVvZiBlIT0ic3RyaW5nIiYmKG49ZSxlPXQpLGU9
-ZXx8ImZ4Ijt3aGlsZSh1LS0pcj12Ll9kYXRhKG9bdV0sZSsicXVldWVIb29rcyIpLHImJnIuZW1w
-dHkmJihpKyssci5lbXB0eS5hZGQoYSkpO3JldHVybiBhKCkscy5wcm9taXNlKG4pfX0pO3ZhciBq
-LEYsSSxxPS9bXHRcclxuXS9nLFI9L1xyL2csVT0vXig/OmJ1dHRvbnxpbnB1dCkkL2ksej0vXig/
-OmJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSxXPS9eYSg/OnJlYXwpJC9p
-LFg9L14oPzphdXRvZm9jdXN8YXV0b3BsYXl8YXN5bmN8Y2hlY2tlZHxjb250cm9sc3xkZWZlcnxk
-aXNhYmxlZHxoaWRkZW58bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3Bl
-ZHxzZWxlY3RlZCkkL2ksVj12LnN1cHBvcnQuZ2V0U2V0QXR0cmlidXRlO3YuZm4uZXh0ZW5kKHth
-dHRyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHYuYWNjZXNzKHRoaXMsdi5hdHRyLGUsdCxhcmd1bWVu
-dHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVu
-Y3Rpb24oKXt2LnJlbW92ZUF0dHIodGhpcyxlKX0pfSxwcm9wOmZ1bmN0aW9uKGUsdCl7cmV0dXJu
-IHYuYWNjZXNzKHRoaXMsdi5wcm9wLGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVQcm9w
-OmZ1bmN0aW9uKGUpe3JldHVybiBlPXYucHJvcEZpeFtlXXx8ZSx0aGlzLmVhY2goZnVuY3Rpb24o
-KXt0cnl7dGhpc1tlXT10LGRlbGV0ZSB0aGlzW2VdfWNhdGNoKG4pe319KX0sYWRkQ2xhc3M6ZnVu
-Y3Rpb24oZSl7dmFyIHQsbixyLGkscyxvLHU7aWYodi5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlz
-LmVhY2goZnVuY3Rpb24odCl7dih0aGlzKS5hZGRDbGFzcyhlLmNhbGwodGhpcyx0LHRoaXMuY2xh
-c3NOYW1lKSl9KTtpZihlJiZ0eXBlb2YgZT09InN0cmluZyIpe3Q9ZS5zcGxpdCh5KTtmb3Iobj0w
-LHI9dGhpcy5sZW5ndGg7bjxyO24rKyl7aT10aGlzW25dO2lmKGkubm9kZVR5cGU9PT0xKWlmKCFp
-LmNsYXNzTmFtZSYmdC5sZW5ndGg9PT0xKWkuY2xhc3NOYW1lPWU7ZWxzZXtzPSIgIitpLmNsYXNz
-TmFtZSsiICI7Zm9yKG89MCx1PXQubGVuZ3RoO288dTtvKyspcy5pbmRleE9mKCIgIit0W29dKyIg
-Iik8MCYmKHMrPXRbb10rIiAiKTtpLmNsYXNzTmFtZT12LnRyaW0ocyl9fX1yZXR1cm4gdGhpc30s
-cmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIG4scixpLHMsbyx1LGE7aWYodi5pc0Z1bmN0aW9u
-KGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7dih0aGlzKS5yZW1vdmVDbGFzcyhlLmNh
-bGwodGhpcyx0LHRoaXMuY2xhc3NOYW1lKSl9KTtpZihlJiZ0eXBlb2YgZT09InN0cmluZyJ8fGU9
-PT10KXtuPShlfHwiIikuc3BsaXQoeSk7Zm9yKHU9MCxhPXRoaXMubGVuZ3RoO3U8YTt1Kyspe2k9
-dGhpc1t1XTtpZihpLm5vZGVUeXBlPT09MSYmaS5jbGFzc05hbWUpe3I9KCIgIitpLmNsYXNzTmFt
-ZSsiICIpLnJlcGxhY2UocSwiICIpO2ZvcihzPTAsbz1uLmxlbmd0aDtzPG87cysrKXdoaWxlKHIu
-aW5kZXhPZigiICIrbltzXSsiICIpPj0wKXI9ci5yZXBsYWNlKCIgIituW3NdKyIgIiwiICIpO2ku
-Y2xhc3NOYW1lPWU/di50cmltKHIpOiIifX19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0
-aW9uKGUsdCl7dmFyIG49dHlwZW9mIGUscj10eXBlb2YgdD09ImJvb2xlYW4iO3JldHVybiB2Lmlz
-RnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3YodGhpcykudG9nZ2xlQ2xhc3MoZS5j
-YWxsKHRoaXMsbix0aGlzLmNsYXNzTmFtZSx0KSx0KX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe2lm
-KG49PT0ic3RyaW5nIil7dmFyIGkscz0wLG89dih0aGlzKSx1PXQsYT1lLnNwbGl0KHkpO3doaWxl
-KGk9YVtzKytdKXU9cj91OiFvLmhhc0NsYXNzKGkpLG9bdT8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFz
-cyJdKGkpfWVsc2UgaWYobj09PSJ1bmRlZmluZWQifHxuPT09ImJvb2xlYW4iKXRoaXMuY2xhc3NO
-YW1lJiZ2Ll9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNs
-YXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8ZT09PSExPyIiOnYuX2RhdGEodGhpcywiX19jbGFzc05h
-bWVfXyIpfHwiIn0pfSxoYXNDbGFzczpmdW5jdGlvbihlKXt2YXIgdD0iICIrZSsiICIsbj0wLHI9
-dGhpcy5sZW5ndGg7Zm9yKDtuPHI7bisrKWlmKHRoaXNbbl0ubm9kZVR5cGU9PT0xJiYoIiAiK3Ro
-aXNbbl0uY2xhc3NOYW1lKyIgIikucmVwbGFjZShxLCIgIikuaW5kZXhPZih0KT49MClyZXR1cm4h
-MDtyZXR1cm4hMX0sdmFsOmZ1bmN0aW9uKGUpe3ZhciBuLHIsaSxzPXRoaXNbMF07aWYoIWFyZ3Vt
-ZW50cy5sZW5ndGgpe2lmKHMpcmV0dXJuIG49di52YWxIb29rc1tzLnR5cGVdfHx2LnZhbEhvb2tz
-W3Mubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sbiYmImdldCJpbiBuJiYocj1uLmdldChzLCJ2YWx1
-ZSIpKSE9PXQ/cjoocj1zLnZhbHVlLHR5cGVvZiByPT0ic3RyaW5nIj9yLnJlcGxhY2UoUiwiIik6
-cj09bnVsbD8iIjpyKTtyZXR1cm59cmV0dXJuIGk9di5pc0Z1bmN0aW9uKGUpLHRoaXMuZWFjaChm
-dW5jdGlvbihyKXt2YXIgcyxvPXYodGhpcyk7aWYodGhpcy5ub2RlVHlwZSE9PTEpcmV0dXJuO2k/
-cz1lLmNhbGwodGhpcyxyLG8udmFsKCkpOnM9ZSxzPT1udWxsP3M9IiI6dHlwZW9mIHM9PSJudW1i
-ZXIiP3MrPSIiOnYuaXNBcnJheShzKSYmKHM9di5tYXAocyxmdW5jdGlvbihlKXtyZXR1cm4gZT09
-bnVsbD8iIjplKyIifSkpLG49di52YWxIb29rc1t0aGlzLnR5cGVdfHx2LnZhbEhvb2tzW3RoaXMu
-bm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoIW58fCEoInNldCJpbiBuKXx8bi5zZXQodGhpcyxz
-LCJ2YWx1ZSIpPT09dCl0aGlzLnZhbHVlPXN9KX19KSx2LmV4dGVuZCh7dmFsSG9va3M6e29wdGlv
-bjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUuYXR0cmlidXRlcy52YWx1ZTtyZXR1cm4hdHx8dC5z
-cGVjaWZpZWQ/ZS52YWx1ZTplLnRleHR9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihlKXt2YXIgdCxu
-LHI9ZS5vcHRpb25zLGk9ZS5zZWxlY3RlZEluZGV4LHM9ZS50eXBlPT09InNlbGVjdC1vbmUifHxp
-PDAsbz1zP251bGw6W10sdT1zP2krMTpyLmxlbmd0aCxhPWk8MD91OnM/aTowO2Zvcig7YTx1O2Er
-Kyl7bj1yW2FdO2lmKChuLnNlbGVjdGVkfHxhPT09aSkmJih2LnN1cHBvcnQub3B0RGlzYWJsZWQ/
-IW4uZGlzYWJsZWQ6bi5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik9PT1udWxsKSYmKCFuLnBhcmVu
-dE5vZGUuZGlzYWJsZWR8fCF2Lm5vZGVOYW1lKG4ucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe3Q9
-dihuKS52YWwoKTtpZihzKXJldHVybiB0O28ucHVzaCh0KX19cmV0dXJuIG99LHNldDpmdW5jdGlv
-bihlLHQpe3ZhciBuPXYubWFrZUFycmF5KHQpO3JldHVybiB2KGUpLmZpbmQoIm9wdGlvbiIpLmVh
-Y2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPXYuaW5BcnJheSh2KHRoaXMpLnZhbCgpLG4pPj0w
-fSksbi5sZW5ndGh8fChlLnNlbGVjdGVkSW5kZXg9LTEpLG59fX0sYXR0ckZuOnt9LGF0dHI6ZnVu
-Y3Rpb24oZSxuLHIsaSl7dmFyIHMsbyx1LGE9ZS5ub2RlVHlwZTtpZighZXx8YT09PTN8fGE9PT04
-fHxhPT09MilyZXR1cm47aWYoaSYmdi5pc0Z1bmN0aW9uKHYuZm5bbl0pKXJldHVybiB2KGUpW25d
-KHIpO2lmKHR5cGVvZiBlLmdldEF0dHJpYnV0ZT09InVuZGVmaW5lZCIpcmV0dXJuIHYucHJvcChl
-LG4scik7dT1hIT09MXx8IXYuaXNYTUxEb2MoZSksdSYmKG49bi50b0xvd2VyQ2FzZSgpLG89di5h
-dHRySG9va3Nbbl18fChYLnRlc3Qobik/RjpqKSk7aWYociE9PXQpe2lmKHI9PT1udWxsKXt2LnJl
-bW92ZUF0dHIoZSxuKTtyZXR1cm59cmV0dXJuIG8mJiJzZXQiaW4gbyYmdSYmKHM9by5zZXQoZSxy
-LG4pKSE9PXQ/czooZS5zZXRBdHRyaWJ1dGUobixyKyIiKSxyKX1yZXR1cm4gbyYmImdldCJpbiBv
-JiZ1JiYocz1vLmdldChlLG4pKSE9PW51bGw/czoocz1lLmdldEF0dHJpYnV0ZShuKSxzPT09bnVs
-bD90OnMpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLHMsbz0wO2lmKHQmJmUu
-bm9kZVR5cGU9PT0xKXtyPXQuc3BsaXQoeSk7Zm9yKDtvPHIubGVuZ3RoO28rKylpPXJbb10saSYm
-KG49di5wcm9wRml4W2ldfHxpLHM9WC50ZXN0KGkpLHN8fHYuYXR0cihlLGksIiIpLGUucmVtb3Zl
-QXR0cmlidXRlKFY/aTpuKSxzJiZuIGluIGUmJihlW25dPSExKSl9fSxhdHRySG9va3M6e3R5cGU6
-e3NldDpmdW5jdGlvbihlLHQpe2lmKFUudGVzdChlLm5vZGVOYW1lKSYmZS5wYXJlbnROb2RlKXYu
-ZXJyb3IoInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIpO2Vsc2UgaWYoIXYuc3VwcG9y
-dC5yYWRpb1ZhbHVlJiZ0PT09InJhZGlvIiYmdi5ub2RlTmFtZShlLCJpbnB1dCIpKXt2YXIgbj1l
-LnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19
-fSx2YWx1ZTp7Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGomJnYubm9kZU5hbWUoZSwiYnV0dG9u
-Iik/ai5nZXQoZSx0KTp0IGluIGU/ZS52YWx1ZTpudWxsfSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe2lm
-KGomJnYubm9kZU5hbWUoZSwiYnV0dG9uIikpcmV0dXJuIGouc2V0KGUsdCxuKTtlLnZhbHVlPXR9
-fX0scHJvcEZpeDp7dGFiaW5kZXg6InRhYkluZGV4IixyZWFkb25seToicmVhZE9ubHkiLCJmb3Ii
-OiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLG1heGxlbmd0aDoibWF4TGVuZ3RoIixjZWxs
-c3BhY2luZzoiY2VsbFNwYWNpbmciLGNlbGxwYWRkaW5nOiJjZWxsUGFkZGluZyIscm93c3Bhbjoi
-cm93U3BhbiIsY29sc3BhbjoiY29sU3BhbiIsdXNlbWFwOiJ1c2VNYXAiLGZyYW1lYm9yZGVyOiJm
-cmFtZUJvcmRlciIsY29udGVudGVkaXRhYmxlOiJjb250ZW50RWRpdGFibGUifSxwcm9wOmZ1bmN0
-aW9uKGUsbixyKXt2YXIgaSxzLG8sdT1lLm5vZGVUeXBlO2lmKCFlfHx1PT09M3x8dT09PTh8fHU9
-PT0yKXJldHVybjtyZXR1cm4gbz11IT09MXx8IXYuaXNYTUxEb2MoZSksbyYmKG49di5wcm9wRml4
-W25dfHxuLHM9di5wcm9wSG9va3Nbbl0pLHIhPT10P3MmJiJzZXQiaW4gcyYmKGk9cy5zZXQoZSxy
-LG4pKSE9PXQ/aTplW25dPXI6cyYmImdldCJpbiBzJiYoaT1zLmdldChlLG4pKSE9PW51bGw/aTpl
-W25dfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIG49ZS5nZXRBdHRy
-aWJ1dGVOb2RlKCJ0YWJpbmRleCIpO3JldHVybiBuJiZuLnNwZWNpZmllZD9wYXJzZUludChuLnZh
-bHVlLDEwKTp6LnRlc3QoZS5ub2RlTmFtZSl8fFcudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6
-dH19fX0pLEY9e2dldDpmdW5jdGlvbihlLG4pe3ZhciByLGk9di5wcm9wKGUsbik7cmV0dXJuIGk9
-PT0hMHx8dHlwZW9mIGkhPSJib29sZWFuIiYmKHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKG4pKSYmci5u
-b2RlVmFsdWUhPT0hMT9uLnRvTG93ZXJDYXNlKCk6dH0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIg
-cjtyZXR1cm4gdD09PSExP3YucmVtb3ZlQXR0cihlLG4pOihyPXYucHJvcEZpeFtuXXx8bixyIGlu
-IGUmJihlW3JdPSEwKSxlLnNldEF0dHJpYnV0ZShuLG4udG9Mb3dlckNhc2UoKSkpLG59fSxWfHwo
-ST17bmFtZTohMCxpZDohMCxjb29yZHM6ITB9LGo9di52YWxIb29rcy5idXR0b249e2dldDpmdW5j
-dGlvbihlLG4pe3ZhciByO3JldHVybiByPWUuZ2V0QXR0cmlidXRlTm9kZShuKSxyJiYoSVtuXT9y
-LnZhbHVlIT09IiI6ci5zcGVjaWZpZWQpP3IudmFsdWU6dH0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2
-YXIgcj1lLmdldEF0dHJpYnV0ZU5vZGUobik7cmV0dXJuIHJ8fChyPWkuY3JlYXRlQXR0cmlidXRl
-KG4pLGUuc2V0QXR0cmlidXRlTm9kZShyKSksci52YWx1ZT10KyIifX0sdi5lYWNoKFsid2lkdGgi
-LCJoZWlnaHQiXSxmdW5jdGlvbihlLHQpe3YuYXR0ckhvb2tzW3RdPXYuZXh0ZW5kKHYuYXR0ckhv
-b2tzW3RdLHtzZXQ6ZnVuY3Rpb24oZSxuKXtpZihuPT09IiIpcmV0dXJuIGUuc2V0QXR0cmlidXRl
-KHQsImF1dG8iKSxufX0pfSksdi5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtnZXQ6ai5nZXQs
-c2V0OmZ1bmN0aW9uKGUsdCxuKXt0PT09IiImJih0PSJmYWxzZSIpLGouc2V0KGUsdCxuKX19KSx2
-LnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWR8fHYuZWFjaChbImhyZWYiLCJzcmMiLCJ3aWR0aCIsImhl
-aWdodCJdLGZ1bmN0aW9uKGUsbil7di5hdHRySG9va3Nbbl09di5leHRlbmQodi5hdHRySG9va3Nb
-bl0se2dldDpmdW5jdGlvbihlKXt2YXIgcj1lLmdldEF0dHJpYnV0ZShuLDIpO3JldHVybiByPT09
-bnVsbD90OnJ9fSl9KSx2LnN1cHBvcnQuc3R5bGV8fCh2LmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1
-bmN0aW9uKGUpe3JldHVybiBlLnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKXx8dH0sc2V0OmZ1
-bmN0aW9uKGUsdCl7cmV0dXJuIGUuc3R5bGUuY3NzVGV4dD10KyIifX0pLHYuc3VwcG9ydC5vcHRT
-ZWxlY3RlZHx8KHYucHJvcEhvb2tzLnNlbGVjdGVkPXYuZXh0ZW5kKHYucHJvcEhvb2tzLnNlbGVj
-dGVkLHtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYodC5zZWxl
-Y3RlZEluZGV4LHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpLG51bGx9
-fSkpLHYuc3VwcG9ydC5lbmN0eXBlfHwodi5wcm9wRml4LmVuY3R5cGU9ImVuY29kaW5nIiksdi5z
-dXBwb3J0LmNoZWNrT258fHYuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe3Yu
-dmFsSG9va3NbdGhpc109e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoInZh
-bHVlIik9PT1udWxsPyJvbiI6ZS52YWx1ZX19fSksdi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJd
-LGZ1bmN0aW9uKCl7di52YWxIb29rc1t0aGlzXT12LmV4dGVuZCh2LnZhbEhvb2tzW3RoaXNdLHtz
-ZXQ6ZnVuY3Rpb24oZSx0KXtpZih2LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD12LmluQXJy
-YXkodihlKS52YWwoKSx0KT49MH19KX0pO3ZhciAkPS9eKD86dGV4dGFyZWF8aW5wdXR8c2VsZWN0
-KSQvaSxKPS9eKFteXC5dKnwpKD86XC4oLispfCkkLyxLPS8oPzpefFxzKWhvdmVyKFwuXFMrfClc
-Yi8sUT0vXmtleS8sRz0vXig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGljay8sWT0vXig/OmZvY3Vz
-aW5mb2N1c3xmb2N1c291dGJsdXIpJC8sWj1mdW5jdGlvbihlKXtyZXR1cm4gdi5ldmVudC5zcGVj
-aWFsLmhvdmVyP2U6ZS5yZXBsYWNlKEssIm1vdXNlZW50ZXIkMSBtb3VzZWxlYXZlJDEiKX07di5l
-dmVudD17YWRkOmZ1bmN0aW9uKGUsbixyLGkscyl7dmFyIG8sdSxhLGYsbCxjLGgscCxkLG0sZztp
-ZihlLm5vZGVUeXBlPT09M3x8ZS5ub2RlVHlwZT09PTh8fCFufHwhcnx8IShvPXYuX2RhdGEoZSkp
-KXJldHVybjtyLmhhbmRsZXImJihkPXIscj1kLmhhbmRsZXIscz1kLnNlbGVjdG9yKSxyLmd1aWR8
-fChyLmd1aWQ9di5ndWlkKyspLGE9by5ldmVudHMsYXx8KG8uZXZlbnRzPWE9e30pLHU9by5oYW5k
-bGUsdXx8KG8uaGFuZGxlPXU9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiB2PT0idW5kZWZpbmVk
-Inx8ISFlJiZ2LmV2ZW50LnRyaWdnZXJlZD09PWUudHlwZT90OnYuZXZlbnQuZGlzcGF0Y2guYXBw
-bHkodS5lbGVtLGFyZ3VtZW50cyl9LHUuZWxlbT1lKSxuPXYudHJpbShaKG4pKS5zcGxpdCgiICIp
-O2ZvcihmPTA7ZjxuLmxlbmd0aDtmKyspe2w9Si5leGVjKG5bZl0pfHxbXSxjPWxbMV0saD0obFsy
-XXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGc9di5ldmVudC5zcGVjaWFsW2NdfHx7fSxjPShzP2cu
-ZGVsZWdhdGVUeXBlOmcuYmluZFR5cGUpfHxjLGc9di5ldmVudC5zcGVjaWFsW2NdfHx7fSxwPXYu
-ZXh0ZW5kKHt0eXBlOmMsb3JpZ1R5cGU6bFsxXSxkYXRhOmksaGFuZGxlcjpyLGd1aWQ6ci5ndWlk
-LHNlbGVjdG9yOnMsbmVlZHNDb250ZXh0OnMmJnYuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVz
-dChzKSxuYW1lc3BhY2U6aC5qb2luKCIuIil9LGQpLG09YVtjXTtpZighbSl7bT1hW2NdPVtdLG0u
-ZGVsZWdhdGVDb3VudD0wO2lmKCFnLnNldHVwfHxnLnNldHVwLmNhbGwoZSxpLGgsdSk9PT0hMSll
-LmFkZEV2ZW50TGlzdGVuZXI/ZS5hZGRFdmVudExpc3RlbmVyKGMsdSwhMSk6ZS5hdHRhY2hFdmVu
-dCYmZS5hdHRhY2hFdmVudCgib24iK2MsdSl9Zy5hZGQmJihnLmFkZC5jYWxsKGUscCkscC5oYW5k
-bGVyLmd1aWR8fChwLmhhbmRsZXIuZ3VpZD1yLmd1aWQpKSxzP20uc3BsaWNlKG0uZGVsZWdhdGVD
-b3VudCsrLDAscCk6bS5wdXNoKHApLHYuZXZlbnQuZ2xvYmFsW2NdPSEwfWU9bnVsbH0sZ2xvYmFs
-Ont9LHJlbW92ZTpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBzLG8sdSxhLGYsbCxjLGgscCxkLG0s
-Zz12Lmhhc0RhdGEoZSkmJnYuX2RhdGEoZSk7aWYoIWd8fCEoaD1nLmV2ZW50cykpcmV0dXJuO3Q9
-di50cmltKFoodHx8IiIpKS5zcGxpdCgiICIpO2ZvcihzPTA7czx0Lmxlbmd0aDtzKyspe289Si5l
-eGVjKHRbc10pfHxbXSx1PWE9b1sxXSxmPW9bMl07aWYoIXUpe2Zvcih1IGluIGgpdi5ldmVudC5y
-ZW1vdmUoZSx1K3Rbc10sbixyLCEwKTtjb250aW51ZX1wPXYuZXZlbnQuc3BlY2lhbFt1XXx8e30s
-dT0ocj9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8dSxkPWhbdV18fFtdLGw9ZC5sZW5ndGgs
-Zj1mP25ldyBSZWdFeHAoIihefFxcLikiK2Yuc3BsaXQoIi4iKS5zb3J0KCkuam9pbigiXFwuKD86
-LipcXC58KSIpKyIoXFwufCQpIik6bnVsbDtmb3IoYz0wO2M8ZC5sZW5ndGg7YysrKW09ZFtjXSwo
-aXx8YT09PW0ub3JpZ1R5cGUpJiYoIW58fG4uZ3VpZD09PW0uZ3VpZCkmJighZnx8Zi50ZXN0KG0u
-bmFtZXNwYWNlKSkmJighcnx8cj09PW0uc2VsZWN0b3J8fHI9PT0iKioiJiZtLnNlbGVjdG9yKSYm
-KGQuc3BsaWNlKGMtLSwxKSxtLnNlbGVjdG9yJiZkLmRlbGVnYXRlQ291bnQtLSxwLnJlbW92ZSYm
-cC5yZW1vdmUuY2FsbChlLG0pKTtkLmxlbmd0aD09PTAmJmwhPT1kLmxlbmd0aCYmKCghcC50ZWFy
-ZG93bnx8cC50ZWFyZG93bi5jYWxsKGUsZixnLmhhbmRsZSk9PT0hMSkmJnYucmVtb3ZlRXZlbnQo
-ZSx1LGcuaGFuZGxlKSxkZWxldGUgaFt1XSl9di5pc0VtcHR5T2JqZWN0KGgpJiYoZGVsZXRlIGcu
-aGFuZGxlLHYucmVtb3ZlRGF0YShlLCJldmVudHMiLCEwKSl9LGN1c3RvbUV2ZW50OntnZXREYXRh
-OiEwLHNldERhdGE6ITAsY2hhbmdlRGF0YTohMH0sdHJpZ2dlcjpmdW5jdGlvbihuLHIscyxvKXtp
-Zighc3x8cy5ub2RlVHlwZSE9PTMmJnMubm9kZVR5cGUhPT04KXt2YXIgdSxhLGYsbCxjLGgscCxk
-LG0sZyx5PW4udHlwZXx8bixiPVtdO2lmKFkudGVzdCh5K3YuZXZlbnQudHJpZ2dlcmVkKSlyZXR1
-cm47eS5pbmRleE9mKCIhIik+PTAmJih5PXkuc2xpY2UoMCwtMSksYT0hMCkseS5pbmRleE9mKCIu
-Iik+PTAmJihiPXkuc3BsaXQoIi4iKSx5PWIuc2hpZnQoKSxiLnNvcnQoKSk7aWYoKCFzfHx2LmV2
-ZW50LmN1c3RvbUV2ZW50W3ldKSYmIXYuZXZlbnQuZ2xvYmFsW3ldKXJldHVybjtuPXR5cGVvZiBu
-PT0ib2JqZWN0Ij9uW3YuZXhwYW5kb10/bjpuZXcgdi5FdmVudCh5LG4pOm5ldyB2LkV2ZW50KHkp
-LG4udHlwZT15LG4uaXNUcmlnZ2VyPSEwLG4uZXhjbHVzaXZlPWEsbi5uYW1lc3BhY2U9Yi5qb2lu
-KCIuIiksbi5uYW1lc3BhY2VfcmU9bi5uYW1lc3BhY2U/bmV3IFJlZ0V4cCgiKF58XFwuKSIrYi5q
-b2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsLGg9eS5pbmRleE9mKCI6Iik8MD8i
-b24iK3k6IiI7aWYoIXMpe3U9di5jYWNoZTtmb3IoZiBpbiB1KXVbZl0uZXZlbnRzJiZ1W2ZdLmV2
-ZW50c1t5XSYmdi5ldmVudC50cmlnZ2VyKG4scix1W2ZdLmhhbmRsZS5lbGVtLCEwKTtyZXR1cm59
-bi5yZXN1bHQ9dCxuLnRhcmdldHx8KG4udGFyZ2V0PXMpLHI9ciE9bnVsbD92Lm1ha2VBcnJheShy
-KTpbXSxyLnVuc2hpZnQobikscD12LmV2ZW50LnNwZWNpYWxbeV18fHt9O2lmKHAudHJpZ2dlciYm
-cC50cmlnZ2VyLmFwcGx5KHMscik9PT0hMSlyZXR1cm47bT1bW3MscC5iaW5kVHlwZXx8eV1dO2lm
-KCFvJiYhcC5ub0J1YmJsZSYmIXYuaXNXaW5kb3cocykpe2c9cC5kZWxlZ2F0ZVR5cGV8fHksbD1Z
-LnRlc3QoZyt5KT9zOnMucGFyZW50Tm9kZTtmb3IoYz1zO2w7bD1sLnBhcmVudE5vZGUpbS5wdXNo
-KFtsLGddKSxjPWw7Yz09PShzLm93bmVyRG9jdW1lbnR8fGkpJiZtLnB1c2goW2MuZGVmYXVsdFZp
-ZXd8fGMucGFyZW50V2luZG93fHxlLGddKX1mb3IoZj0wO2Y8bS5sZW5ndGgmJiFuLmlzUHJvcGFn
-YXRpb25TdG9wcGVkKCk7ZisrKWw9bVtmXVswXSxuLnR5cGU9bVtmXVsxXSxkPSh2Ll9kYXRhKGws
-ImV2ZW50cyIpfHx7fSlbbi50eXBlXSYmdi5fZGF0YShsLCJoYW5kbGUiKSxkJiZkLmFwcGx5KGws
-ciksZD1oJiZsW2hdLGQmJnYuYWNjZXB0RGF0YShsKSYmZC5hcHBseSYmZC5hcHBseShsLHIpPT09
-ITEmJm4ucHJldmVudERlZmF1bHQoKTtyZXR1cm4gbi50eXBlPXksIW8mJiFuLmlzRGVmYXVsdFBy
-ZXZlbnRlZCgpJiYoIXAuX2RlZmF1bHR8fHAuX2RlZmF1bHQuYXBwbHkocy5vd25lckRvY3VtZW50
-LHIpPT09ITEpJiYoeSE9PSJjbGljayJ8fCF2Lm5vZGVOYW1lKHMsImEiKSkmJnYuYWNjZXB0RGF0
-YShzKSYmaCYmc1t5XSYmKHkhPT0iZm9jdXMiJiZ5IT09ImJsdXIifHxuLnRhcmdldC5vZmZzZXRX
-aWR0aCE9PTApJiYhdi5pc1dpbmRvdyhzKSYmKGM9c1toXSxjJiYoc1toXT1udWxsKSx2LmV2ZW50
-LnRyaWdnZXJlZD15LHNbeV0oKSx2LmV2ZW50LnRyaWdnZXJlZD10LGMmJihzW2hdPWMpKSxuLnJl
-c3VsdH1yZXR1cm59LGRpc3BhdGNoOmZ1bmN0aW9uKG4pe249di5ldmVudC5maXgobnx8ZS5ldmVu
-dCk7dmFyIHIsaSxzLG8sdSxhLGYsYyxoLHAsZD0odi5fZGF0YSh0aGlzLCJldmVudHMiKXx8e30p
-W24udHlwZV18fFtdLG09ZC5kZWxlZ2F0ZUNvdW50LGc9bC5jYWxsKGFyZ3VtZW50cykseT0hbi5l
-eGNsdXNpdmUmJiFuLm5hbWVzcGFjZSxiPXYuZXZlbnQuc3BlY2lhbFtuLnR5cGVdfHx7fSx3PVtd
-O2dbMF09bixuLmRlbGVnYXRlVGFyZ2V0PXRoaXM7aWYoYi5wcmVEaXNwYXRjaCYmYi5wcmVEaXNw
-YXRjaC5jYWxsKHRoaXMsbik9PT0hMSlyZXR1cm47aWYobSYmKCFuLmJ1dHRvbnx8bi50eXBlIT09
-ImNsaWNrIikpZm9yKHM9bi50YXJnZXQ7cyE9dGhpcztzPXMucGFyZW50Tm9kZXx8dGhpcylpZihz
-LmRpc2FibGVkIT09ITB8fG4udHlwZSE9PSJjbGljayIpe3U9e30sZj1bXTtmb3Iocj0wO3I8bTty
-KyspYz1kW3JdLGg9Yy5zZWxlY3Rvcix1W2hdPT09dCYmKHVbaF09Yy5uZWVkc0NvbnRleHQ/diho
-LHRoaXMpLmluZGV4KHMpPj0wOnYuZmluZChoLHRoaXMsbnVsbCxbc10pLmxlbmd0aCksdVtoXSYm
-Zi5wdXNoKGMpO2YubGVuZ3RoJiZ3LnB1c2goe2VsZW06cyxtYXRjaGVzOmZ9KX1kLmxlbmd0aD5t
-JiZ3LnB1c2goe2VsZW06dGhpcyxtYXRjaGVzOmQuc2xpY2UobSl9KTtmb3Iocj0wO3I8dy5sZW5n
-dGgmJiFuLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7cisrKXthPXdbcl0sbi5jdXJyZW50VGFyZ2V0
-PWEuZWxlbTtmb3IoaT0wO2k8YS5tYXRjaGVzLmxlbmd0aCYmIW4uaXNJbW1lZGlhdGVQcm9wYWdh
-dGlvblN0b3BwZWQoKTtpKyspe2M9YS5tYXRjaGVzW2ldO2lmKHl8fCFuLm5hbWVzcGFjZSYmIWMu
-bmFtZXNwYWNlfHxuLm5hbWVzcGFjZV9yZSYmbi5uYW1lc3BhY2VfcmUudGVzdChjLm5hbWVzcGFj
-ZSkpbi5kYXRhPWMuZGF0YSxuLmhhbmRsZU9iaj1jLG89KCh2LmV2ZW50LnNwZWNpYWxbYy5vcmln
-VHlwZV18fHt9KS5oYW5kbGV8fGMuaGFuZGxlcikuYXBwbHkoYS5lbGVtLGcpLG8hPT10JiYobi5y
-ZXN1bHQ9byxvPT09ITEmJihuLnByZXZlbnREZWZhdWx0KCksbi5zdG9wUHJvcGFnYXRpb24oKSkp
-fX1yZXR1cm4gYi5wb3N0RGlzcGF0Y2gmJmIucG9zdERpc3BhdGNoLmNhbGwodGhpcyxuKSxuLnJl
-c3VsdH0scHJvcHM6ImF0dHJDaGFuZ2UgYXR0ck5hbWUgcmVsYXRlZE5vZGUgc3JjRWxlbWVudCBh
-bHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBldmVudFBoYXNl
-IG1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hp
-Y2giLnNwbGl0KCIgIiksZml4SG9va3M6e30sa2V5SG9va3M6e3Byb3BzOiJjaGFyIGNoYXJDb2Rl
-IGtleSBrZXlDb2RlIi5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihlLHQpe3JldHVybiBlLndo
-aWNoPT1udWxsJiYoZS53aGljaD10LmNoYXJDb2RlIT1udWxsP3QuY2hhckNvZGU6dC5rZXlDb2Rl
-KSxlfX0sbW91c2VIb29rczp7cHJvcHM6ImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBm
-cm9tRWxlbWVudCBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRv
-RWxlbWVudCIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8sdT1uLmJ1
-dHRvbixhPW4uZnJvbUVsZW1lbnQ7cmV0dXJuIGUucGFnZVg9PW51bGwmJm4uY2xpZW50WCE9bnVs
-bCYmKHI9ZS50YXJnZXQub3duZXJEb2N1bWVudHx8aSxzPXIuZG9jdW1lbnRFbGVtZW50LG89ci5i
-b2R5LGUucGFnZVg9bi5jbGllbnRYKyhzJiZzLnNjcm9sbExlZnR8fG8mJm8uc2Nyb2xsTGVmdHx8
-MCktKHMmJnMuY2xpZW50TGVmdHx8byYmby5jbGllbnRMZWZ0fHwwKSxlLnBhZ2VZPW4uY2xpZW50
-WSsocyYmcy5zY3JvbGxUb3B8fG8mJm8uc2Nyb2xsVG9wfHwwKS0ocyYmcy5jbGllbnRUb3B8fG8m
-Jm8uY2xpZW50VG9wfHwwKSksIWUucmVsYXRlZFRhcmdldCYmYSYmKGUucmVsYXRlZFRhcmdldD1h
-PT09ZS50YXJnZXQ/bi50b0VsZW1lbnQ6YSksIWUud2hpY2gmJnUhPT10JiYoZS53aGljaD11JjE/
-MTp1JjI/Mzp1JjQ/MjowKSxlfX0sZml4OmZ1bmN0aW9uKGUpe2lmKGVbdi5leHBhbmRvXSlyZXR1
-cm4gZTt2YXIgdCxuLHI9ZSxzPXYuZXZlbnQuZml4SG9va3NbZS50eXBlXXx8e30sbz1zLnByb3Bz
-P3RoaXMucHJvcHMuY29uY2F0KHMucHJvcHMpOnRoaXMucHJvcHM7ZT12LkV2ZW50KHIpO2Zvcih0
-PW8ubGVuZ3RoO3Q7KW49b1stLXRdLGVbbl09cltuXTtyZXR1cm4gZS50YXJnZXR8fChlLnRhcmdl
-dD1yLnNyY0VsZW1lbnR8fGkpLGUudGFyZ2V0Lm5vZGVUeXBlPT09MyYmKGUudGFyZ2V0PWUudGFy
-Z2V0LnBhcmVudE5vZGUpLGUubWV0YUtleT0hIWUubWV0YUtleSxzLmZpbHRlcj9zLmZpbHRlcihl
-LHIpOmV9LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7ZGVsZWdhdGVUeXBlOiJm
-b2N1c2luIn0sYmx1cjp7ZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGJlZm9yZXVubG9hZDp7c2V0
-dXA6ZnVuY3Rpb24oZSx0LG4pe3YuaXNXaW5kb3codGhpcykmJih0aGlzLm9uYmVmb3JldW5sb2Fk
-PW4pfSx0ZWFyZG93bjpmdW5jdGlvbihlLHQpe3RoaXMub25iZWZvcmV1bmxvYWQ9PT10JiYodGhp
-cy5vbmJlZm9yZXVubG9hZD1udWxsKX19fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIg
-aT12LmV4dGVuZChuZXcgdi5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITAsb3JpZ2luYWxF
-dmVudDp7fX0pO3I/di5ldmVudC50cmlnZ2VyKGksbnVsbCx0KTp2LmV2ZW50LmRpc3BhdGNoLmNh
-bGwodCxpKSxpLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZuLnByZXZlbnREZWZhdWx0KCl9fSx2LmV2
-ZW50LmhhbmRsZT12LmV2ZW50LmRpc3BhdGNoLHYucmVtb3ZlRXZlbnQ9aS5yZW1vdmVFdmVudExp
-c3RlbmVyP2Z1bmN0aW9uKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZl
-bnRMaXN0ZW5lcih0LG4sITEpfTpmdW5jdGlvbihlLHQsbil7dmFyIHI9Im9uIit0O2UuZGV0YWNo
-RXZlbnQmJih0eXBlb2YgZVtyXT09InVuZGVmaW5lZCImJihlW3JdPW51bGwpLGUuZGV0YWNoRXZl
-bnQocixuKSl9LHYuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiB2LkV2
-ZW50KSlyZXR1cm4gbmV3IHYuRXZlbnQoZSx0KTtlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVu
-dD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJl
-dmVudGVkfHxlLnJldHVyblZhbHVlPT09ITF8fGUuZ2V0UHJldmVudERlZmF1bHQmJmUuZ2V0UHJl
-dmVudERlZmF1bHQoKT90dDpldCk6dGhpcy50eXBlPWUsdCYmdi5leHRlbmQodGhpcyx0KSx0aGlz
-LnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8di5ub3coKSx0aGlzW3YuZXhwYW5kb109ITB9LHYu
-RXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0
-UHJldmVudGVkPXR0O3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDtpZighZSlyZXR1cm47ZS5wcmV2
-ZW50RGVmYXVsdD9lLnByZXZlbnREZWZhdWx0KCk6ZS5yZXR1cm5WYWx1ZT0hMX0sc3RvcFByb3Bh
-Z2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD10dDt2YXIgZT10aGlz
-Lm9yaWdpbmFsRXZlbnQ7aWYoIWUpcmV0dXJuO2Uuc3RvcFByb3BhZ2F0aW9uJiZlLnN0b3BQcm9w
-YWdhdGlvbigpLGUuY2FuY2VsQnViYmxlPSEwfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVu
-Y3Rpb24oKXt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPXR0LHRoaXMuc3RvcFBy
-b3BhZ2F0aW9uKCl9LGlzRGVmYXVsdFByZXZlbnRlZDpldCxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpl
-dCxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpldH0sdi5lYWNoKHttb3VzZWVudGVyOiJt
-b3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0sZnVuY3Rpb24oZSx0KXt2LmV2ZW50LnNw
-ZWNpYWxbZV09e2RlbGVnYXRlVHlwZTp0LGJpbmRUeXBlOnQsaGFuZGxlOmZ1bmN0aW9uKGUpe3Zh
-ciBuLHI9dGhpcyxpPWUucmVsYXRlZFRhcmdldCxzPWUuaGFuZGxlT2JqLG89cy5zZWxlY3Rvcjtp
-ZighaXx8aSE9PXImJiF2LmNvbnRhaW5zKHIsaSkpZS50eXBlPXMub3JpZ1R5cGUsbj1zLmhhbmRs
-ZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT10O3JldHVybiBufX19KSx2LnN1cHBvcnQu
-c3VibWl0QnViYmxlc3x8KHYuZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKCl7
-aWYodi5ub2RlTmFtZSh0aGlzLCJmb3JtIikpcmV0dXJuITE7di5ldmVudC5hZGQodGhpcywiY2xp
-Y2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IixmdW5jdGlvbihlKXt2YXIgbj1lLnRhcmdldCxy
-PXYubm9kZU5hbWUobiwiaW5wdXQiKXx8di5ub2RlTmFtZShuLCJidXR0b24iKT9uLmZvcm06dDty
-JiYhdi5fZGF0YShyLCJfc3VibWl0X2F0dGFjaGVkIikmJih2LmV2ZW50LmFkZChyLCJzdWJtaXQu
-X3N1Ym1pdCIsZnVuY3Rpb24oZSl7ZS5fc3VibWl0X2J1YmJsZT0hMH0pLHYuX2RhdGEociwiX3N1
-Ym1pdF9hdHRhY2hlZCIsITApKX0pfSxwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZS5fc3VibWl0
-X2J1YmJsZSYmKGRlbGV0ZSBlLl9zdWJtaXRfYnViYmxlLHRoaXMucGFyZW50Tm9kZSYmIWUuaXNU
-cmlnZ2VyJiZ2LmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxlLCEwKSl9
-LHRlYXJkb3duOmZ1bmN0aW9uKCl7aWYodi5ub2RlTmFtZSh0aGlzLCJmb3JtIikpcmV0dXJuITE7
-di5ldmVudC5yZW1vdmUodGhpcywiLl9zdWJtaXQiKX19KSx2LnN1cHBvcnQuY2hhbmdlQnViYmxl
-c3x8KHYuZXZlbnQuc3BlY2lhbC5jaGFuZ2U9e3NldHVwOmZ1bmN0aW9uKCl7aWYoJC50ZXN0KHRo
-aXMubm9kZU5hbWUpKXtpZih0aGlzLnR5cGU9PT0iY2hlY2tib3gifHx0aGlzLnR5cGU9PT0icmFk
-aW8iKXYuZXZlbnQuYWRkKHRoaXMsInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGUp
-e2Uub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWU9PT0iY2hlY2tlZCImJih0aGlzLl9qdXN0X2No
-YW5nZWQ9ITApfSksdi5ldmVudC5hZGQodGhpcywiY2xpY2suX2NoYW5nZSIsZnVuY3Rpb24oZSl7
-dGhpcy5fanVzdF9jaGFuZ2VkJiYhZS5pc1RyaWdnZXImJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITEp
-LHYuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcyxlLCEwKX0pO3JldHVybiExfXYuZXZlbnQu
-YWRkKHRoaXMsImJlZm9yZWFjdGl2YXRlLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpe3ZhciB0PWUudGFy
-Z2V0OyQudGVzdCh0Lm5vZGVOYW1lKSYmIXYuX2RhdGEodCwiX2NoYW5nZV9hdHRhY2hlZCIpJiYo
-di5ldmVudC5hZGQodCwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9k
-ZSYmIWUuaXNTaW11bGF0ZWQmJiFlLmlzVHJpZ2dlciYmdi5ldmVudC5zaW11bGF0ZSgiY2hhbmdl
-Iix0aGlzLnBhcmVudE5vZGUsZSwhMCl9KSx2Ll9kYXRhKHQsIl9jaGFuZ2VfYXR0YWNoZWQiLCEw
-KSl9KX0saGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0O2lmKHRoaXMhPT10fHxlLmlz
-U2ltdWxhdGVkfHxlLmlzVHJpZ2dlcnx8dC50eXBlIT09InJhZGlvIiYmdC50eXBlIT09ImNoZWNr
-Ym94IilyZXR1cm4gZS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHRl
-YXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIHYuZXZlbnQucmVtb3ZlKHRoaXMsIi5fY2hhbmdlIiks
-ISQudGVzdCh0aGlzLm5vZGVOYW1lKX19KSx2LnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXN8fHYuZWFj
-aCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXt2YXIgbj0w
-LHI9ZnVuY3Rpb24oZSl7di5ldmVudC5zaW11bGF0ZSh0LGUudGFyZ2V0LHYuZXZlbnQuZml4KGUp
-LCEwKX07di5ldmVudC5zcGVjaWFsW3RdPXtzZXR1cDpmdW5jdGlvbigpe24rKz09PTAmJmkuYWRk
-RXZlbnRMaXN0ZW5lcihlLHIsITApfSx0ZWFyZG93bjpmdW5jdGlvbigpey0tbj09PTAmJmkucmVt
-b3ZlRXZlbnRMaXN0ZW5lcihlLHIsITApfX19KSx2LmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSxu
-LHIsaSxzKXt2YXIgbyx1O2lmKHR5cGVvZiBlPT0ib2JqZWN0Iil7dHlwZW9mIG4hPSJzdHJpbmci
-JiYocj1yfHxuLG49dCk7Zm9yKHUgaW4gZSl0aGlzLm9uKHUsbixyLGVbdV0scyk7cmV0dXJuIHRo
-aXN9cj09bnVsbCYmaT09bnVsbD8oaT1uLHI9bj10KTppPT1udWxsJiYodHlwZW9mIG49PSJzdHJp
-bmciPyhpPXIscj10KTooaT1yLHI9bixuPXQpKTtpZihpPT09ITEpaT1ldDtlbHNlIGlmKCFpKXJl
-dHVybiB0aGlzO3JldHVybiBzPT09MSYmKG89aSxpPWZ1bmN0aW9uKGUpe3JldHVybiB2KCkub2Zm
-KGUpLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxpLmd1aWQ9by5ndWlkfHwoby5ndWlkPXYuZ3Vp
-ZCsrKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7di5ldmVudC5hZGQodGhpcyxlLGkscixuKX0pfSxv
-bmU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24oZSx0LG4sciwxKX0sb2ZmOmZ1bmN0
-aW9uKGUsbixyKXt2YXIgaSxzO2lmKGUmJmUucHJldmVudERlZmF1bHQmJmUuaGFuZGxlT2JqKXJl
-dHVybiBpPWUuaGFuZGxlT2JqLHYoZS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGkubmFtZXNwYWNlP2ku
-b3JpZ1R5cGUrIi4iK2kubmFtZXNwYWNlOmkub3JpZ1R5cGUsaS5zZWxlY3RvcixpLmhhbmRsZXIp
-LHRoaXM7aWYodHlwZW9mIGU9PSJvYmplY3QiKXtmb3IocyBpbiBlKXRoaXMub2ZmKHMsbixlW3Nd
-KTtyZXR1cm4gdGhpc31pZihuPT09ITF8fHR5cGVvZiBuPT0iZnVuY3Rpb24iKXI9bixuPXQ7cmV0
-dXJuIHI9PT0hMSYmKHI9ZXQpLHRoaXMuZWFjaChmdW5jdGlvbigpe3YuZXZlbnQucmVtb3ZlKHRo
-aXMsZSxyLG4pfSl9LGJpbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9uKGUsbnVsbCx0
-LG4pfSx1bmJpbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vZmYoZSxudWxsLHQpfSxsaXZl
-OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdih0aGlzLmNvbnRleHQpLm9uKGUsdGhpcy5zZWxlY3Rv
-cix0LG4pLHRoaXN9LGRpZTpmdW5jdGlvbihlLHQpe3JldHVybiB2KHRoaXMuY29udGV4dCkub2Zm
-KGUsdGhpcy5zZWxlY3Rvcnx8IioqIix0KSx0aGlzfSxkZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbixy
-KXtyZXR1cm4gdGhpcy5vbih0LGUsbixyKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbil7cmV0
-dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3RoaXMub2ZmKGUsIioqIik6dGhpcy5vZmYodCxlfHwi
-KioiLG4pfSx0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
-e3YuZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0
-KXtpZih0aGlzWzBdKXJldHVybiB2LmV2ZW50LnRyaWdnZXIoZSx0LHRoaXNbMF0sITApfSx0b2dn
-bGU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLG49ZS5ndWlkfHx2Lmd1aWQrKyxyPTAsaT1m
-dW5jdGlvbihuKXt2YXIgaT0odi5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIitlLmd1aWQpfHwwKSVy
-O3JldHVybiB2Ll9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2UuZ3VpZCxpKzEpLG4ucHJldmVudERl
-ZmF1bHQoKSx0W2ldLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8ITF9O2kuZ3VpZD1uO3doaWxlKHI8
-dC5sZW5ndGgpdFtyKytdLmd1aWQ9bjtyZXR1cm4gdGhpcy5jbGljayhpKX0saG92ZXI6ZnVuY3Rp
-b24oZSx0KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8ZSl9fSksdi5l
-YWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9h
-ZCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1v
-dXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3du
-IGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUs
-dCl7di5mblt0XT1mdW5jdGlvbihlLG4pe3JldHVybiBuPT1udWxsJiYobj1lLGU9bnVsbCksYXJn
-dW1lbnRzLmxlbmd0aD4wP3RoaXMub24odCxudWxsLGUsbik6dGhpcy50cmlnZ2VyKHQpfSxRLnRl
-c3QodCkmJih2LmV2ZW50LmZpeEhvb2tzW3RdPXYuZXZlbnQua2V5SG9va3MpLEcudGVzdCh0KSYm
-KHYuZXZlbnQuZml4SG9va3NbdF09di5ldmVudC5tb3VzZUhvb2tzKX0pLGZ1bmN0aW9uKGUsdCl7
-ZnVuY3Rpb24gbnQoZSx0LG4scil7bj1ufHxbXSx0PXR8fGc7dmFyIGkscyxhLGYsbD10Lm5vZGVU
-eXBlO2lmKCFlfHx0eXBlb2YgZSE9InN0cmluZyIpcmV0dXJuIG47aWYobCE9PTEmJmwhPT05KXJl
-dHVybltdO2E9byh0KTtpZighYSYmIXIpaWYoaT1SLmV4ZWMoZSkpaWYoZj1pWzFdKXtpZihsPT09
-OSl7cz10LmdldEVsZW1lbnRCeUlkKGYpO2lmKCFzfHwhcy5wYXJlbnROb2RlKXJldHVybiBuO2lm
-KHMuaWQ9PT1mKXJldHVybiBuLnB1c2gocyksbn1lbHNlIGlmKHQub3duZXJEb2N1bWVudCYmKHM9
-dC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpKSYmdSh0LHMpJiZzLmlkPT09ZilyZXR1
-cm4gbi5wdXNoKHMpLG59ZWxzZXtpZihpWzJdKXJldHVybiBTLmFwcGx5KG4seC5jYWxsKHQuZ2V0
-RWxlbWVudHNCeVRhZ05hbWUoZSksMCkpLG47aWYoKGY9aVszXSkmJlomJnQuZ2V0RWxlbWVudHNC
-eUNsYXNzTmFtZSlyZXR1cm4gUy5hcHBseShuLHguY2FsbCh0LmdldEVsZW1lbnRzQnlDbGFzc05h
-bWUoZiksMCkpLG59cmV0dXJuIHZ0KGUucmVwbGFjZShqLCIkMSIpLHQsbixyLGEpfWZ1bmN0aW9u
-IHJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7
-cmV0dXJuIG49PT0iaW5wdXQiJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBpdChlKXtyZXR1cm4gZnVu
-Y3Rpb24odCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihuPT09ImlucHV0
-Inx8bj09PSJidXR0b24iKSYmdC50eXBlPT09ZX19ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIE4oZnVu
-Y3Rpb24odCl7cmV0dXJuIHQ9K3QsTihmdW5jdGlvbihuLHIpe3ZhciBpLHM9ZShbXSxuLmxlbmd0
-aCx0KSxvPXMubGVuZ3RoO3doaWxlKG8tLSluW2k9c1tvXV0mJihuW2ldPSEocltpXT1uW2ldKSl9
-KX0pfWZ1bmN0aW9uIG90KGUsdCxuKXtpZihlPT09dClyZXR1cm4gbjt2YXIgcj1lLm5leHRTaWJs
-aW5nO3doaWxlKHIpe2lmKHI9PT10KXJldHVybi0xO3I9ci5uZXh0U2libGluZ31yZXR1cm4gMX1m
-dW5jdGlvbiB1dChlLHQpe3ZhciBuLHIscyxvLHUsYSxmLGw9TFtkXVtlKyIgIl07aWYobClyZXR1
-cm4gdD8wOmwuc2xpY2UoMCk7dT1lLGE9W10sZj1pLnByZUZpbHRlcjt3aGlsZSh1KXtpZighbnx8
-KHI9Ri5leGVjKHUpKSlyJiYodT11LnNsaWNlKHJbMF0ubGVuZ3RoKXx8dSksYS5wdXNoKHM9W10p
-O249ITE7aWYocj1JLmV4ZWModSkpcy5wdXNoKG49bmV3IG0oci5zaGlmdCgpKSksdT11LnNsaWNl
-KG4ubGVuZ3RoKSxuLnR5cGU9clswXS5yZXBsYWNlKGosIiAiKTtmb3IobyBpbiBpLmZpbHRlciko
-cj1KW29dLmV4ZWModSkpJiYoIWZbb118fChyPWZbb10ocikpKSYmKHMucHVzaChuPW5ldyBtKHIu
-c2hpZnQoKSkpLHU9dS5zbGljZShuLmxlbmd0aCksbi50eXBlPW8sbi5tYXRjaGVzPXIpO2lmKCFu
-KWJyZWFrfXJldHVybiB0P3UubGVuZ3RoOnU/bnQuZXJyb3IoZSk6TChlLGEpLnNsaWNlKDApfWZ1
-bmN0aW9uIGF0KGUsdCxyKXt2YXIgaT10LmRpcixzPXImJnQuZGlyPT09InBhcmVudE5vZGUiLG89
-dysrO3JldHVybiB0LmZpcnN0P2Z1bmN0aW9uKHQsbixyKXt3aGlsZSh0PXRbaV0paWYoc3x8dC5u
-b2RlVHlwZT09PTEpcmV0dXJuIGUodCxuLHIpfTpmdW5jdGlvbih0LHIsdSl7aWYoIXUpe3ZhciBh
-LGY9YisiICIrbysiICIsbD1mK247d2hpbGUodD10W2ldKWlmKHN8fHQubm9kZVR5cGU9PT0xKXtp
-ZigoYT10W2RdKT09PWwpcmV0dXJuIHQuc2l6c2V0O2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmYS5p
-bmRleE9mKGYpPT09MCl7aWYodC5zaXpzZXQpcmV0dXJuIHR9ZWxzZXt0W2RdPWw7aWYoZSh0LHIs
-dSkpcmV0dXJuIHQuc2l6c2V0PSEwLHQ7dC5zaXpzZXQ9ITF9fX1lbHNlIHdoaWxlKHQ9dFtpXSlp
-ZihzfHx0Lm5vZGVUeXBlPT09MSlpZihlKHQscix1KSlyZXR1cm4gdH19ZnVuY3Rpb24gZnQoZSl7
-cmV0dXJuIGUubGVuZ3RoPjE/ZnVuY3Rpb24odCxuLHIpe3ZhciBpPWUubGVuZ3RoO3doaWxlKGkt
-LSlpZighZVtpXSh0LG4scikpcmV0dXJuITE7cmV0dXJuITB9OmVbMF19ZnVuY3Rpb24gbHQoZSx0
-LG4scixpKXt2YXIgcyxvPVtdLHU9MCxhPWUubGVuZ3RoLGY9dCE9bnVsbDtmb3IoO3U8YTt1Kysp
-aWYocz1lW3VdKWlmKCFufHxuKHMscixpKSlvLnB1c2gocyksZiYmdC5wdXNoKHUpO3JldHVybiBv
-fWZ1bmN0aW9uIGN0KGUsdCxuLHIsaSxzKXtyZXR1cm4gciYmIXJbZF0mJihyPWN0KHIpKSxpJiYh
-aVtkXSYmKGk9Y3QoaSxzKSksTihmdW5jdGlvbihzLG8sdSxhKXt2YXIgZixsLGMsaD1bXSxwPVtd
-LGQ9by5sZW5ndGgsdj1zfHxkdCh0fHwiKiIsdS5ub2RlVHlwZT9bdV06dSxbXSksbT1lJiYoc3x8
-IXQpP2x0KHYsaCxlLHUsYSk6dixnPW4/aXx8KHM/ZTpkfHxyKT9bXTpvOm07biYmbihtLGcsdSxh
-KTtpZihyKXtmPWx0KGcscCkscihmLFtdLHUsYSksbD1mLmxlbmd0aDt3aGlsZShsLS0paWYoYz1m
-W2xdKWdbcFtsXV09IShtW3BbbF1dPWMpfWlmKHMpe2lmKGl8fGUpe2lmKGkpe2Y9W10sbD1nLmxl
-bmd0aDt3aGlsZShsLS0pKGM9Z1tsXSkmJmYucHVzaChtW2xdPWMpO2kobnVsbCxnPVtdLGYsYSl9
-bD1nLmxlbmd0aDt3aGlsZShsLS0pKGM9Z1tsXSkmJihmPWk/VC5jYWxsKHMsYyk6aFtsXSk+LTEm
-JihzW2ZdPSEob1tmXT1jKSl9fWVsc2UgZz1sdChnPT09bz9nLnNwbGljZShkLGcubGVuZ3RoKTpn
-KSxpP2kobnVsbCxvLGcsYSk6Uy5hcHBseShvLGcpfSl9ZnVuY3Rpb24gaHQoZSl7dmFyIHQsbixy
-LHM9ZS5sZW5ndGgsbz1pLnJlbGF0aXZlW2VbMF0udHlwZV0sdT1vfHxpLnJlbGF0aXZlWyIgIl0s
-YT1vPzE6MCxmPWF0KGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dH0sdSwhMCksbD1hdChmdW5jdGlv
-bihlKXtyZXR1cm4gVC5jYWxsKHQsZSk+LTF9LHUsITApLGg9W2Z1bmN0aW9uKGUsbixyKXtyZXR1
-cm4hbyYmKHJ8fG4hPT1jKXx8KCh0PW4pLm5vZGVUeXBlP2YoZSxuLHIpOmwoZSxuLHIpKX1dO2Zv
-cig7YTxzO2ErKylpZihuPWkucmVsYXRpdmVbZVthXS50eXBlXSloPVthdChmdChoKSxuKV07ZWxz
-ZXtuPWkuZmlsdGVyW2VbYV0udHlwZV0uYXBwbHkobnVsbCxlW2FdLm1hdGNoZXMpO2lmKG5bZF0p
-e3I9KythO2Zvcig7cjxzO3IrKylpZihpLnJlbGF0aXZlW2Vbcl0udHlwZV0pYnJlYWs7cmV0dXJu
-IGN0KGE+MSYmZnQoaCksYT4xJiZlLnNsaWNlKDAsYS0xKS5qb2luKCIiKS5yZXBsYWNlKGosIiQx
-IiksbixhPHImJmh0KGUuc2xpY2UoYSxyKSkscjxzJiZodChlPWUuc2xpY2UocikpLHI8cyYmZS5q
-b2luKCIiKSl9aC5wdXNoKG4pfXJldHVybiBmdChoKX1mdW5jdGlvbiBwdChlLHQpe3ZhciByPXQu
-bGVuZ3RoPjAscz1lLmxlbmd0aD4wLG89ZnVuY3Rpb24odSxhLGYsbCxoKXt2YXIgcCxkLHYsbT1b
-XSx5PTAsdz0iMCIseD11JiZbXSxUPWghPW51bGwsTj1jLEM9dXx8cyYmaS5maW5kLlRBRygiKiIs
-aCYmYS5wYXJlbnROb2RlfHxhKSxrPWIrPU49PW51bGw/MTpNYXRoLkU7VCYmKGM9YSE9PWcmJmEs
-bj1vLmVsKTtmb3IoOyhwPUNbd10pIT1udWxsO3crKyl7aWYocyYmcCl7Zm9yKGQ9MDt2PWVbZF07
-ZCsrKWlmKHYocCxhLGYpKXtsLnB1c2gocCk7YnJlYWt9VCYmKGI9ayxuPSsrby5lbCl9ciYmKChw
-PSF2JiZwKSYmeS0tLHUmJngucHVzaChwKSl9eSs9dztpZihyJiZ3IT09eSl7Zm9yKGQ9MDt2PXRb
-ZF07ZCsrKXYoeCxtLGEsZik7aWYodSl7aWYoeT4wKXdoaWxlKHctLSkheFt3XSYmIW1bd10mJiht
-W3ddPUUuY2FsbChsKSk7bT1sdChtKX1TLmFwcGx5KGwsbSksVCYmIXUmJm0ubGVuZ3RoPjAmJnkr
-dC5sZW5ndGg+MSYmbnQudW5pcXVlU29ydChsKX1yZXR1cm4gVCYmKGI9ayxjPU4pLHh9O3JldHVy
-biBvLmVsPTAscj9OKG8pOm99ZnVuY3Rpb24gZHQoZSx0LG4pe3ZhciByPTAsaT10Lmxlbmd0aDtm
-b3IoO3I8aTtyKyspbnQoZSx0W3JdLG4pO3JldHVybiBufWZ1bmN0aW9uIHZ0KGUsdCxuLHIscyl7
-dmFyIG8sdSxmLGwsYyxoPXV0KGUpLHA9aC5sZW5ndGg7aWYoIXImJmgubGVuZ3RoPT09MSl7dT1o
-WzBdPWhbMF0uc2xpY2UoMCk7aWYodS5sZW5ndGg+MiYmKGY9dVswXSkudHlwZT09PSJJRCImJnQu
-bm9kZVR5cGU9PT05JiYhcyYmaS5yZWxhdGl2ZVt1WzFdLnR5cGVdKXt0PWkuZmluZC5JRChmLm1h
-dGNoZXNbMF0ucmVwbGFjZSgkLCIiKSx0LHMpWzBdO2lmKCF0KXJldHVybiBuO2U9ZS5zbGljZSh1
-LnNoaWZ0KCkubGVuZ3RoKX1mb3Iobz1KLlBPUy50ZXN0KGUpPy0xOnUubGVuZ3RoLTE7bz49MDtv
-LS0pe2Y9dVtvXTtpZihpLnJlbGF0aXZlW2w9Zi50eXBlXSlicmVhaztpZihjPWkuZmluZFtsXSlp
-ZihyPWMoZi5tYXRjaGVzWzBdLnJlcGxhY2UoJCwiIiksei50ZXN0KHVbMF0udHlwZSkmJnQucGFy
-ZW50Tm9kZXx8dCxzKSl7dS5zcGxpY2UobywxKSxlPXIubGVuZ3RoJiZ1LmpvaW4oIiIpO2lmKCFl
-KXJldHVybiBTLmFwcGx5KG4seC5jYWxsKHIsMCkpLG47YnJlYWt9fX1yZXR1cm4gYShlLGgpKHIs
-dCxzLG4sei50ZXN0KGUpKSxufWZ1bmN0aW9uIG10KCl7fXZhciBuLHIsaSxzLG8sdSxhLGYsbCxj
-LGg9ITAscD0idW5kZWZpbmVkIixkPSgic2l6Y2FjaGUiK01hdGgucmFuZG9tKCkpLnJlcGxhY2Uo
-Ii4iLCIiKSxtPVN0cmluZyxnPWUuZG9jdW1lbnQseT1nLmRvY3VtZW50RWxlbWVudCxiPTAsdz0w
-LEU9W10ucG9wLFM9W10ucHVzaCx4PVtdLnNsaWNlLFQ9W10uaW5kZXhPZnx8ZnVuY3Rpb24oZSl7
-dmFyIHQ9MCxuPXRoaXMubGVuZ3RoO2Zvcig7dDxuO3QrKylpZih0aGlzW3RdPT09ZSlyZXR1cm4g
-dDtyZXR1cm4tMX0sTj1mdW5jdGlvbihlLHQpe3JldHVybiBlW2RdPXQ9PW51bGx8fHQsZX0sQz1m
-dW5jdGlvbigpe3ZhciBlPXt9LHQ9W107cmV0dXJuIE4oZnVuY3Rpb24obixyKXtyZXR1cm4gdC5w
-dXNoKG4pPmkuY2FjaGVMZW5ndGgmJmRlbGV0ZSBlW3Quc2hpZnQoKV0sZVtuKyIgIl09cn0sZSl9
-LGs9QygpLEw9QygpLEE9QygpLE89IltcXHgyMFxcdFxcclxcblxcZl0iLE09Iig/OlxcXFwufFst
-XFx3XXxbXlxceDAwLVxceGEwXSkrIixfPU0ucmVwbGFjZSgidyIsIncjIiksRD0iKFsqXiR8IX5d
-Pz0pIixQPSJcXFsiK08rIiooIitNKyIpIitPKyIqKD86IitEK08rIiooPzooWydcIl0pKCg/Olxc
-XFwufFteXFxcXF0pKj8pXFwzfCgiK18rIil8KXwpIitPKyIqXFxdIixIPSI6KCIrTSsiKSg/Olxc
-KCg/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDJ8KFteKClbXFxdXSp8KD86KD86IitQ
-KyIpfFteOl18XFxcXC4pKnwuKikpXFwpfCkiLEI9IjooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZp
-cnN0fGxhc3QpKD86XFwoIitPKyIqKCg/Oi1cXGQpP1xcZCopIitPKyIqXFwpfCkoPz1bXi1dfCQp
-IixqPW5ldyBSZWdFeHAoIl4iK08rIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTysiKyQi
-LCJnIiksRj1uZXcgUmVnRXhwKCJeIitPKyIqLCIrTysiKiIpLEk9bmV3IFJlZ0V4cCgiXiIrTysi
-KihbXFx4MjBcXHRcXHJcXG5cXGY+K35dKSIrTysiKiIpLHE9bmV3IFJlZ0V4cChIKSxSPS9eKD86
-IyhbXHdcLV0rKXwoXHcrKXxcLihbXHdcLV0rKSkkLyxVPS9eOm5vdC8sej0vW1x4MjBcdFxyXG5c
-Zl0qWyt+XS8sVz0vOm5vdFwoJC8sWD0vaFxkL2ksVj0vaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1
-dHRvbi9pLCQ9L1xcKD8hXFwpL2csSj17SUQ6bmV3IFJlZ0V4cCgiXiMoIitNKyIpIiksQ0xBU1M6
-bmV3IFJlZ0V4cCgiXlxcLigiK00rIikiKSxOQU1FOm5ldyBSZWdFeHAoIl5cXFtuYW1lPVsnXCJd
-PygiK00rIilbJ1wiXT9cXF0iKSxUQUc6bmV3IFJlZ0V4cCgiXigiK00ucmVwbGFjZSgidyIsIncq
-IikrIikiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK1ApLFBTRVVETzpuZXcgUmVnRXhwKCJeIitIKSxQ
-T1M6bmV3IFJlZ0V4cChCLCJpIiksQ0hJTEQ6bmV3IFJlZ0V4cCgiXjoob25seXxudGh8Zmlyc3R8
-bGFzdCktY2hpbGQoPzpcXCgiK08rIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK08rIioo
-PzooWystXXwpIitPKyIqKFxcZCspfCkpIitPKyIqXFwpfCkiLCJpIiksbmVlZHNDb250ZXh0Om5l
-dyBSZWdFeHAoIl4iK08rIipbPit+XXwiK0IsImkiKX0sSz1mdW5jdGlvbihlKXt2YXIgdD1nLmNy
-ZWF0ZUVsZW1lbnQoImRpdiIpO3RyeXtyZXR1cm4gZSh0KX1jYXRjaChuKXtyZXR1cm4hMX1maW5h
-bGx5e3Q9bnVsbH19LFE9SyhmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZChnLmNyZWF0
-ZUNvbW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLEc9Syhm
-dW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLGUuZmlyc3RD
-aGlsZCYmdHlwZW9mIGUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUhPT1wJiZlLmZpcnN0Q2hpbGQu
-Z2V0QXR0cmlidXRlKCJocmVmIik9PT0iIyJ9KSxZPUsoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9
-IjxzZWxlY3Q+PC9zZWxlY3Q+Ijt2YXIgdD10eXBlb2YgZS5sYXN0Q2hpbGQuZ2V0QXR0cmlidXRl
-KCJtdWx0aXBsZSIpO3JldHVybiB0IT09ImJvb2xlYW4iJiZ0IT09InN0cmluZyJ9KSxaPUsoZnVu
-Y3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdoaWRkZW4gZSc+PC9kaXY+
-PGRpdiBjbGFzcz0naGlkZGVuJz48L2Rpdj4iLCFlLmdldEVsZW1lbnRzQnlDbGFzc05hbWV8fCFl
-LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg/ITE6KGUubGFzdENoaWxkLmNsYXNz
-TmFtZT0iZSIsZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09Mil9KSxldD1L
-KGZ1bmN0aW9uKGUpe2UuaWQ9ZCswLGUuaW5uZXJIVE1MPSI8YSBuYW1lPSciK2QrIic+PC9hPjxk
-aXYgbmFtZT0nIitkKyInPjwvZGl2PiIseS5pbnNlcnRCZWZvcmUoZSx5LmZpcnN0Q2hpbGQpO3Zh
-ciB0PWcuZ2V0RWxlbWVudHNCeU5hbWUmJmcuZ2V0RWxlbWVudHNCeU5hbWUoZCkubGVuZ3RoPT09
-MitnLmdldEVsZW1lbnRzQnlOYW1lKGQrMCkubGVuZ3RoO3JldHVybiByPSFnLmdldEVsZW1lbnRC
-eUlkKGQpLHkucmVtb3ZlQ2hpbGQoZSksdH0pO3RyeXt4LmNhbGwoeS5jaGlsZE5vZGVzLDApWzBd
-Lm5vZGVUeXBlfWNhdGNoKHR0KXt4PWZ1bmN0aW9uKGUpe3ZhciB0LG49W107Zm9yKDt0PXRoaXNb
-ZV07ZSsrKW4ucHVzaCh0KTtyZXR1cm4gbn19bnQubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVy
-biBudChlLG51bGwsbnVsbCx0KX0sbnQubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7cmV0
-dXJuIG50KHQsbnVsbCxudWxsLFtlXSkubGVuZ3RoPjB9LHM9bnQuZ2V0VGV4dD1mdW5jdGlvbihl
-KXt2YXIgdCxuPSIiLHI9MCxpPWUubm9kZVR5cGU7aWYoaSl7aWYoaT09PTF8fGk9PT05fHxpPT09
-MTEpe2lmKHR5cGVvZiBlLnRleHRDb250ZW50PT0ic3RyaW5nIilyZXR1cm4gZS50ZXh0Q29udGVu
-dDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9cyhlKX1lbHNlIGlmKGk9
-PT0zfHxpPT09NClyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSBmb3IoO3Q9ZVtyXTtyKyspbis9cyh0
-KTtyZXR1cm4gbn0sbz1udC5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiYoZS5vd25lckRvY3Vt
-ZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHQ/dC5ub2RlTmFtZSE9PSJIVE1MIjohMX0s
-dT1udC5jb250YWlucz15LmNvbnRhaW5zP2Z1bmN0aW9uKGUsdCl7dmFyIG49ZS5ub2RlVHlwZT09
-PTk/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEh
-KHImJnIubm9kZVR5cGU9PT0xJiZuLmNvbnRhaW5zJiZuLmNvbnRhaW5zKHIpKX06eS5jb21wYXJl
-RG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe3JldHVybiB0JiYhIShlLmNvbXBhcmVEb2N1
-bWVudFBvc2l0aW9uKHQpJjE2KX06ZnVuY3Rpb24oZSx0KXt3aGlsZSh0PXQucGFyZW50Tm9kZSlp
-Zih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sbnQuYXR0cj1mdW5jdGlvbihlLHQpe3ZhciBuLHI9
-byhlKTtyZXR1cm4gcnx8KHQ9dC50b0xvd2VyQ2FzZSgpKSwobj1pLmF0dHJIYW5kbGVbdF0pP24o
-ZSk6cnx8WT9lLmdldEF0dHJpYnV0ZSh0KToobj1lLmdldEF0dHJpYnV0ZU5vZGUodCksbj90eXBl
-b2YgZVt0XT09ImJvb2xlYW4iP2VbdF0/dDpudWxsOm4uc3BlY2lmaWVkP24udmFsdWU6bnVsbDpu
-dWxsKX0saT1udC5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpOLG1hdGNo
-OkosYXR0ckhhbmRsZTpHP3t9OntocmVmOmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0
-ZSgiaHJlZiIsMil9LHR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJ0eXBl
-Iil9fSxmaW5kOntJRDpyP2Z1bmN0aW9uKGUsdCxuKXtpZih0eXBlb2YgdC5nZXRFbGVtZW50QnlJ
-ZCE9PXAmJiFuKXt2YXIgcj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiByJiZyLnBhcmVudE5v
-ZGU/W3JdOltdfX06ZnVuY3Rpb24oZSxuLHIpe2lmKHR5cGVvZiBuLmdldEVsZW1lbnRCeUlkIT09
-cCYmIXIpe3ZhciBpPW4uZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIGk/aS5pZD09PWV8fHR5cGVv
-ZiBpLmdldEF0dHJpYnV0ZU5vZGUhPT1wJiZpLmdldEF0dHJpYnV0ZU5vZGUoImlkIikudmFsdWU9
-PT1lP1tpXTp0OltdfX0sVEFHOlE/ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdC5nZXRFbGVtZW50
-c0J5VGFnTmFtZSE9PXApcmV0dXJuIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSl9OmZ1bmN0aW9u
-KGUsdCl7dmFyIG49dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTtpZihlPT09IioiKXt2YXIgcixp
-PVtdLHM9MDtmb3IoO3I9bltzXTtzKyspci5ub2RlVHlwZT09PTEmJmkucHVzaChyKTtyZXR1cm4g
-aX1yZXR1cm4gbn0sTkFNRTpldCYmZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdC5nZXRFbGVtZW50
-c0J5TmFtZSE9PXApcmV0dXJuIHQuZ2V0RWxlbWVudHNCeU5hbWUobmFtZSl9LENMQVNTOlomJmZ1
-bmN0aW9uKGUsdCxuKXtpZih0eXBlb2YgdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT09cCYmIW4p
-cmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX19LHJlbGF0aXZlOnsiPiI6e2Rpcjoi
-cGFyZW50Tm9kZSIsZmlyc3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InBy
-ZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJl
-RmlsdGVyOntBVFRSOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZSgkLCIiKSxl
-WzNdPShlWzRdfHxlWzVdfHwiIikucmVwbGFjZSgkLCIiKSxlWzJdPT09In49IiYmKGVbM109IiAi
-K2VbM10rIiAiKSxlLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVb
-MV0udG9Mb3dlckNhc2UoKSxlWzFdPT09Im50aCI/KGVbMl18fG50LmVycm9yKGVbMF0pLGVbM109
-KyhlWzNdP2VbNF0rKGVbNV18fDEpOjIqKGVbMl09PT0iZXZlbiJ8fGVbMl09PT0ib2RkIikpLGVb
-NF09KyhlWzZdK2VbN118fGVbMl09PT0ib2RkIikpOmVbMl0mJm50LmVycm9yKGVbMF0pLGV9LFBT
-RVVETzpmdW5jdGlvbihlKXt2YXIgdCxuO2lmKEouQ0hJTEQudGVzdChlWzBdKSlyZXR1cm4gbnVs
-bDtpZihlWzNdKWVbMl09ZVszXTtlbHNlIGlmKHQ9ZVs0XSlxLnRlc3QodCkmJihuPXV0KHQsITAp
-KSYmKG49dC5pbmRleE9mKCIpIix0Lmxlbmd0aC1uKS10Lmxlbmd0aCkmJih0PXQuc2xpY2UoMCxu
-KSxlWzBdPWVbMF0uc2xpY2UoMCxuKSksZVsyXT10O3JldHVybiBlLnNsaWNlKDAsMyl9fSxmaWx0
-ZXI6e0lEOnI/ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKCQsIiIpLGZ1bmN0aW9uKHQp
-e3JldHVybiB0LmdldEF0dHJpYnV0ZSgiaWQiKT09PWV9fTpmdW5jdGlvbihlKXtyZXR1cm4gZT1l
-LnJlcGxhY2UoJCwiIiksZnVuY3Rpb24odCl7dmFyIG49dHlwZW9mIHQuZ2V0QXR0cmlidXRlTm9k
-ZSE9PXAmJnQuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gbiYmbi52YWx1ZT09PWV9fSxU
-QUc6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0iKiI/ZnVuY3Rpb24oKXtyZXR1cm4hMH06KGU9ZS5y
-ZXBsYWNlKCQsIiIpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZU5hbWUm
-JnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWV9KX0sQ0xBU1M6ZnVuY3Rpb24oZSl7dmFyIHQ9
-a1tkXVtlKyIgIl07cmV0dXJuIHR8fCh0PW5ldyBSZWdFeHAoIihefCIrTysiKSIrZSsiKCIrTysi
-fCQpIikpJiZrKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdChlLmNsYXNzTmFtZXx8dHlwZW9m
-IGUuZ2V0QXR0cmlidXRlIT09cCYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRS
-OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocixpKXt2YXIgcz1udC5hdHRyKHIsZSk7
-cmV0dXJuIHM9PW51bGw/dD09PSIhPSI6dD8ocys9IiIsdD09PSI9Ij9zPT09bjp0PT09IiE9Ij9z
-IT09bjp0PT09Il49Ij9uJiZzLmluZGV4T2Yobik9PT0wOnQ9PT0iKj0iP24mJnMuaW5kZXhPZihu
-KT4tMTp0PT09IiQ9Ij9uJiZzLnN1YnN0cihzLmxlbmd0aC1uLmxlbmd0aCk9PT1uOnQ9PT0ifj0i
-PygiICIrcysiICIpLmluZGV4T2Yobik+LTE6dD09PSJ8PSI/cz09PW58fHMuc3Vic3RyKDAsbi5s
-ZW5ndGgrMSk9PT1uKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4g
-ZT09PSJudGgiP2Z1bmN0aW9uKGUpe3ZhciB0LGkscz1lLnBhcmVudE5vZGU7aWYobj09PTEmJnI9
-PT0wKXJldHVybiEwO2lmKHMpe2k9MDtmb3IodD1zLmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxp
-bmcpaWYodC5ub2RlVHlwZT09PTEpe2krKztpZihlPT09dClicmVha319cmV0dXJuIGktPXIsaT09
-PW58fGklbj09PTAmJmkvbj49MH06ZnVuY3Rpb24odCl7dmFyIG49dDtzd2l0Y2goZSl7Y2FzZSJv
-bmx5IjpjYXNlImZpcnN0Ijp3aGlsZShuPW4ucHJldmlvdXNTaWJsaW5nKWlmKG4ubm9kZVR5cGU9
-PT0xKXJldHVybiExO2lmKGU9PT0iZmlyc3QiKXJldHVybiEwO249dDtjYXNlImxhc3QiOndoaWxl
-KG49bi5uZXh0U2libGluZylpZihuLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMH19fSxQ
-U0VVRE86ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkucHNldWRvc1tlXXx8aS5zZXRGaWx0ZXJzW2Uu
-dG9Mb3dlckNhc2UoKV18fG50LmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrZSk7cmV0dXJu
-IHJbZF0/cih0KTpyLmxlbmd0aD4xPyhuPVtlLGUsIiIsdF0saS5zZXRGaWx0ZXJzLmhhc093blBy
-b3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/TihmdW5jdGlvbihlLG4pe3ZhciBpLHM9cihlLHQpLG89
-cy5sZW5ndGg7d2hpbGUoby0tKWk9VC5jYWxsKGUsc1tvXSksZVtpXT0hKG5baV09c1tvXSl9KTpm
-dW5jdGlvbihlKXtyZXR1cm4gcihlLDAsbil9KTpyfX0scHNldWRvczp7bm90Ok4oZnVuY3Rpb24o
-ZSl7dmFyIHQ9W10sbj1bXSxyPWEoZS5yZXBsYWNlKGosIiQxIikpO3JldHVybiByW2RdP04oZnVu
-Y3Rpb24oZSx0LG4saSl7dmFyIHMsbz1yKGUsbnVsbCxpLFtdKSx1PWUubGVuZ3RoO3doaWxlKHUt
-LSlpZihzPW9bdV0pZVt1XT0hKHRbdV09cyl9KTpmdW5jdGlvbihlLGkscyl7cmV0dXJuIHRbMF09
-ZSxyKHQsbnVsbCxzLG4pLCFuLnBvcCgpfX0pLGhhczpOKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5j
-dGlvbih0KXtyZXR1cm4gbnQoZSx0KS5sZW5ndGg+MH19KSxjb250YWluczpOKGZ1bmN0aW9uKGUp
-e3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4odC50ZXh0Q29udGVudHx8dC5pbm5lclRleHR8fHMo
-dCkpLmluZGV4T2YoZSk+LTF9fSksZW5hYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxl
-ZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD09PSEwfSxjaGVj
-a2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdD09
-PSJpbnB1dCImJiEhZS5jaGVja2VkfHx0PT09Im9wdGlvbiImJiEhZS5zZWxlY3RlZH0sc2VsZWN0
-ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVk
-SW5kZXgsZS5zZWxlY3RlZD09PSEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWkucHNldWRv
-cy5lbXB0eShlKX0sZW1wdHk6ZnVuY3Rpb24oZSl7dmFyIHQ7ZT1lLmZpcnN0Q2hpbGQ7d2hpbGUo
-ZSl7aWYoZS5ub2RlTmFtZT4iQCJ8fCh0PWUubm9kZVR5cGUpPT09M3x8dD09PTQpcmV0dXJuITE7
-ZT1lLm5leHRTaWJsaW5nfXJldHVybiEwfSxoZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIFgudGVz
-dChlLm5vZGVOYW1lKX0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiBlLm5vZGVOYW1l
-LnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYodD1lLnR5cGUpPT09InRleHQiJiYoKG49ZS5nZXRB
-dHRyaWJ1dGUoInR5cGUiKSk9PW51bGx8fG4udG9Mb3dlckNhc2UoKT09PXQpfSxyYWRpbzpydCgi
-cmFkaW8iKSxjaGVja2JveDpydCgiY2hlY2tib3giKSxmaWxlOnJ0KCJmaWxlIikscGFzc3dvcmQ6
-cnQoInBhc3N3b3JkIiksaW1hZ2U6cnQoImltYWdlIiksc3VibWl0Oml0KCJzdWJtaXQiKSxyZXNl
-dDppdCgicmVzZXQiKSxidXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2Vy
-Q2FzZSgpO3JldHVybiB0PT09ImlucHV0IiYmZS50eXBlPT09ImJ1dHRvbiJ8fHQ9PT0iYnV0dG9u
-In0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFYudGVzdChlLm5vZGVOYW1lKX0sZm9jdXM6ZnVu
-Y3Rpb24oZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50O3JldHVybiBlPT09dC5hY3RpdmVFbGVtZW50
-JiYoIXQuaGFzRm9jdXN8fHQuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJ
-bmRleCl9LGFjdGl2ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWUub3duZXJEb2N1bWVudC5hY3Rp
-dmVFbGVtZW50fSxmaXJzdDpzdChmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6c3QoZnVuY3Rp
-b24oZSx0KXtyZXR1cm5bdC0xXX0pLGVxOnN0KGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bbjwwP24r
-dDpuXX0pLGV2ZW46c3QoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQ7bis9MillLnB1c2go
-bik7cmV0dXJuIGV9KSxvZGQ6c3QoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MTtuPHQ7bis9Mill
-LnB1c2gobik7cmV0dXJuIGV9KSxsdDpzdChmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW48MD9u
-K3Q6bjstLXI+PTA7KWUucHVzaChyKTtyZXR1cm4gZX0pLGd0OnN0KGZ1bmN0aW9uKGUsdCxuKXtm
-b3IodmFyIHI9bjwwP24rdDpuOysrcjx0OyllLnB1c2gocik7cmV0dXJuIGV9KX19LGY9eS5jb21w
-YXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dD8obD0hMCwwKToo
-IWUuY29tcGFyZURvY3VtZW50UG9zaXRpb258fCF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Uu
-Y29tcGFyZURvY3VtZW50UG9zaXRpb246ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KSY0KT8t
-MToxfTpmdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBsPSEwLDA7aWYoZS5zb3VyY2VJbmRl
-eCYmdC5zb3VyY2VJbmRleClyZXR1cm4gZS5zb3VyY2VJbmRleC10LnNvdXJjZUluZGV4O3ZhciBu
-LHIsaT1bXSxzPVtdLG89ZS5wYXJlbnROb2RlLHU9dC5wYXJlbnROb2RlLGE9bztpZihvPT09dSly
-ZXR1cm4gb3QoZSx0KTtpZighbylyZXR1cm4tMTtpZighdSlyZXR1cm4gMTt3aGlsZShhKWkudW5z
-aGlmdChhKSxhPWEucGFyZW50Tm9kZTthPXU7d2hpbGUoYSlzLnVuc2hpZnQoYSksYT1hLnBhcmVu
-dE5vZGU7bj1pLmxlbmd0aCxyPXMubGVuZ3RoO2Zvcih2YXIgZj0wO2Y8biYmZjxyO2YrKylpZihp
-W2ZdIT09c1tmXSlyZXR1cm4gb3QoaVtmXSxzW2ZdKTtyZXR1cm4gZj09PW4/b3QoZSxzW2ZdLC0x
-KTpvdChpW2ZdLHQsMSl9LFswLDBdLnNvcnQoZiksaD0hbCxudC51bmlxdWVTb3J0PWZ1bmN0aW9u
-KGUpe3ZhciB0LG49W10scj0xLGk9MDtsPWgsZS5zb3J0KGYpO2lmKGwpe2Zvcig7dD1lW3JdO3Ir
-Kyl0PT09ZVtyLTFdJiYoaT1uLnB1c2gocikpO3doaWxlKGktLSllLnNwbGljZShuW2ldLDEpfXJl
-dHVybiBlfSxudC5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJv
-ciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LGE9bnQuY29tcGlsZT1mdW5jdGlvbihl
-LHQpe3ZhciBuLHI9W10saT1bXSxzPUFbZF1bZSsiICJdO2lmKCFzKXt0fHwodD11dChlKSksbj10
-Lmxlbmd0aDt3aGlsZShuLS0pcz1odCh0W25dKSxzW2RdP3IucHVzaChzKTppLnB1c2gocyk7cz1B
-KGUscHQoaSxyKSl9cmV0dXJuIHN9LGcucXVlcnlTZWxlY3RvckFsbCYmZnVuY3Rpb24oKXt2YXIg
-ZSx0PXZ0LG49Lyd8XFwvZyxyPS9cPVtceDIwXHRcclxuXGZdKihbXiciXF1dKilbXHgyMFx0XHJc
-blxmXSpcXS9nLGk9WyI6Zm9jdXMiXSxzPVsiOmFjdGl2ZSJdLHU9eS5tYXRjaGVzU2VsZWN0b3J8
-fHkubW96TWF0Y2hlc1NlbGVjdG9yfHx5LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8eS5vTWF0Y2hl
-c1NlbGVjdG9yfHx5Lm1zTWF0Y2hlc1NlbGVjdG9yO0soZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9
-IjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlT
-ZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8aS5wdXNoKCJcXFsiK08rIiooPzpjaGVj
-a2VkfGRpc2FibGVkfGlzbWFwfG11bHRpcGxlfHJlYWRvbmx5fHNlbGVjdGVkfHZhbHVlKSIpLGUu
-cXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fGkucHVzaCgiOmNoZWNrZWQiKX0p
-LEsoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxwIHRlc3Q9Jyc+PC9wPiIsZS5xdWVyeVNlbGVj
-dG9yQWxsKCJbdGVzdF49JyddIikubGVuZ3RoJiZpLnB1c2goIlsqXiRdPSIrTysiKig/OlwiXCJ8
-JycpIiksZS5pbm5lckhUTUw9IjxpbnB1dCB0eXBlPSdoaWRkZW4nLz4iLGUucXVlcnlTZWxlY3Rv
-ckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fGkucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKX0p
-LGk9bmV3IFJlZ0V4cChpLmpvaW4oInwiKSksdnQ9ZnVuY3Rpb24oZSxyLHMsbyx1KXtpZighbyYm
-IXUmJiFpLnRlc3QoZSkpe3ZhciBhLGYsbD0hMCxjPWQsaD1yLHA9ci5ub2RlVHlwZT09PTkmJmU7
-aWYoci5ub2RlVHlwZT09PTEmJnIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJvYmplY3QiKXth
-PXV0KGUpLChsPXIuZ2V0QXR0cmlidXRlKCJpZCIpKT9jPWwucmVwbGFjZShuLCJcXCQmIik6ci5z
-ZXRBdHRyaWJ1dGUoImlkIixjKSxjPSJbaWQ9JyIrYysiJ10gIixmPWEubGVuZ3RoO3doaWxlKGYt
-LSlhW2ZdPWMrYVtmXS5qb2luKCIiKTtoPXoudGVzdChlKSYmci5wYXJlbnROb2RlfHxyLHA9YS5q
-b2luKCIsIil9aWYocCl0cnl7cmV0dXJuIFMuYXBwbHkocyx4LmNhbGwoaC5xdWVyeVNlbGVjdG9y
-QWxsKHApLDApKSxzfWNhdGNoKHYpe31maW5hbGx5e2x8fHIucmVtb3ZlQXR0cmlidXRlKCJpZCIp
-fX1yZXR1cm4gdChlLHIscyxvLHUpfSx1JiYoSyhmdW5jdGlvbih0KXtlPXUuY2FsbCh0LCJkaXYi
-KTt0cnl7dS5jYWxsKHQsIlt0ZXN0IT0nJ106c2l6emxlIikscy5wdXNoKCIhPSIsSCl9Y2F0Y2go
-bil7fX0pLHM9bmV3IFJlZ0V4cChzLmpvaW4oInwiKSksbnQubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0
-aW9uKHQsbil7bj1uLnJlcGxhY2UociwiPSckMSddIik7aWYoIW8odCkmJiFzLnRlc3QobikmJiFp
-LnRlc3QobikpdHJ5e3ZhciBhPXUuY2FsbCh0LG4pO2lmKGF8fGV8fHQuZG9jdW1lbnQmJnQuZG9j
-dW1lbnQubm9kZVR5cGUhPT0xMSlyZXR1cm4gYX1jYXRjaChmKXt9cmV0dXJuIG50KG4sbnVsbCxu
-dWxsLFt0XSkubGVuZ3RoPjB9KX0oKSxpLnBzZXVkb3MubnRoPWkucHNldWRvcy5lcSxpLmZpbHRl
-cnM9bXQucHJvdG90eXBlPWkucHNldWRvcyxpLnNldEZpbHRlcnM9bmV3IG10LG50LmF0dHI9di5h
-dHRyLHYuZmluZD1udCx2LmV4cHI9bnQuc2VsZWN0b3JzLHYuZXhwclsiOiJdPXYuZXhwci5wc2V1
-ZG9zLHYudW5pcXVlPW50LnVuaXF1ZVNvcnQsdi50ZXh0PW50LmdldFRleHQsdi5pc1hNTERvYz1u
-dC5pc1hNTCx2LmNvbnRhaW5zPW50LmNvbnRhaW5zfShlKTt2YXIgbnQ9L1VudGlsJC8scnQ9L14o
-PzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8saXQ9L14uW146I1xbXC4sXSokLyxzdD12LmV4
-cHIubWF0Y2gubmVlZHNDb250ZXh0LG90PXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEw
-LHByZXY6ITB9O3YuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLHMsbyx1
-PXRoaXM7aWYodHlwZW9mIGUhPSJzdHJpbmciKXJldHVybiB2KGUpLmZpbHRlcihmdW5jdGlvbigp
-e2Zvcih0PTAsbj11Lmxlbmd0aDt0PG47dCsrKWlmKHYuY29udGFpbnModVt0XSx0aGlzKSlyZXR1
-cm4hMH0pO289dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGUpO2Zvcih0PTAsbj10aGlzLmxlbmd0
-aDt0PG47dCsrKXtyPW8ubGVuZ3RoLHYuZmluZChlLHRoaXNbdF0sbyk7aWYodD4wKWZvcihpPXI7
-aTxvLmxlbmd0aDtpKyspZm9yKHM9MDtzPHI7cysrKWlmKG9bc109PT1vW2ldKXtvLnNwbGljZShp
-LS0sMSk7YnJlYWt9fXJldHVybiBvfSxoYXM6ZnVuY3Rpb24oZSl7dmFyIHQsbj12KGUsdGhpcyks
-cj1uLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3Q8cjt0Kysp
-aWYodi5jb250YWlucyh0aGlzLG5bdF0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1
-cm4gdGhpcy5wdXNoU3RhY2soZnQodGhpcyxlLCExKSwibm90IixlKX0sZmlsdGVyOmZ1bmN0aW9u
-KGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhmdCh0aGlzLGUsITApLCJmaWx0ZXIiLGUpfSxpczpm
-dW5jdGlvbihlKXtyZXR1cm4hIWUmJih0eXBlb2YgZT09InN0cmluZyI/c3QudGVzdChlKT92KGUs
-dGhpcy5jb250ZXh0KS5pbmRleCh0aGlzWzBdKT49MDp2LmZpbHRlcihlLHRoaXMpLmxlbmd0aD4w
-OnRoaXMuZmlsdGVyKGUpLmxlbmd0aD4wKX0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9
-MCxpPXRoaXMubGVuZ3RoLHM9W10sbz1zdC50ZXN0KGUpfHx0eXBlb2YgZSE9InN0cmluZyI/dihl
-LHR8fHRoaXMuY29udGV4dCk6MDtmb3IoO3I8aTtyKyspe249dGhpc1tyXTt3aGlsZShuJiZuLm93
-bmVyRG9jdW1lbnQmJm4hPT10JiZuLm5vZGVUeXBlIT09MTEpe2lmKG8/by5pbmRleChuKT4tMTp2
-LmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpe3MucHVzaChuKTticmVha31uPW4ucGFyZW50Tm9k
-ZX19cmV0dXJuIHM9cy5sZW5ndGg+MT92LnVuaXF1ZShzKTpzLHRoaXMucHVzaFN0YWNrKHMsImNs
-b3Nlc3QiLGUpfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT90eXBlb2YgZT09InN0cmluZyI/
-di5pbkFycmF5KHRoaXNbMF0sdihlKSk6di5pbkFycmF5KGUuanF1ZXJ5P2VbMF06ZSx0aGlzKTp0
-aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6
-ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZT09InN0cmluZyI/dihlLHQpOnYubWFrZUFycmF5
-KGUmJmUubm9kZVR5cGU/W2VdOmUpLHI9di5tZXJnZSh0aGlzLmdldCgpLG4pO3JldHVybiB0aGlz
-LnB1c2hTdGFjayh1dChuWzBdKXx8dXQoclswXSk/cjp2LnVuaXF1ZShyKSl9LGFkZEJhY2s6ZnVu
-Y3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKGU9PW51bGw/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJl
-dk9iamVjdC5maWx0ZXIoZSkpfX0pLHYuZm4uYW5kU2VsZj12LmZuLmFkZEJhY2ssdi5lYWNoKHtw
-YXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0Lm5vZGVUeXBl
-IT09MTE/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiB2LmRpcihlLCJwYXJlbnRO
-b2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHYuZGlyKGUsInBhcmVu
-dE5vZGUiLG4pfSxuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBhdChlLCJuZXh0U2libGluZyIpfSxw
-cmV2OmZ1bmN0aW9uKGUpe3JldHVybiBhdChlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpm
-dW5jdGlvbihlKXtyZXR1cm4gdi5kaXIoZSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlv
-bihlKXtyZXR1cm4gdi5kaXIoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlv
-bihlLHQsbil7cmV0dXJuIHYuZGlyKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0
-aW9uKGUsdCxuKXtyZXR1cm4gdi5kaXIoZSwicHJldmlvdXNTaWJsaW5nIixuKX0sc2libGluZ3M6
-ZnVuY3Rpb24oZSl7cmV0dXJuIHYuc2libGluZygoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGls
-ZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIHYuc2libGluZyhlLmZpcnN0Q2hpbGQp
-fSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gdi5ub2RlTmFtZShlLCJpZnJhbWUiKT9lLmNv
-bnRlbnREb2N1bWVudHx8ZS5jb250ZW50V2luZG93LmRvY3VtZW50OnYubWVyZ2UoW10sZS5jaGls
-ZE5vZGVzKX19LGZ1bmN0aW9uKGUsdCl7di5mbltlXT1mdW5jdGlvbihuLHIpe3ZhciBpPXYubWFw
-KHRoaXMsdCxuKTtyZXR1cm4gbnQudGVzdChlKXx8KHI9biksciYmdHlwZW9mIHI9PSJzdHJpbmci
-JiYoaT12LmZpbHRlcihyLGkpKSxpPXRoaXMubGVuZ3RoPjEmJiFvdFtlXT92LnVuaXF1ZShpKTpp
-LHRoaXMubGVuZ3RoPjEmJnJ0LnRlc3QoZSkmJihpPWkucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFj
-ayhpLGUsbC5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX19KSx2LmV4dGVuZCh7ZmlsdGVyOmZ1
-bmN0aW9uKGUsdCxuKXtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksdC5sZW5ndGg9PT0xP3Yu
-ZmluZC5tYXRjaGVzU2VsZWN0b3IodFswXSxlKT9bdFswXV06W106di5maW5kLm1hdGNoZXMoZSx0
-KX0sZGlyOmZ1bmN0aW9uKGUsbixyKXt2YXIgaT1bXSxzPWVbbl07d2hpbGUocyYmcy5ub2RlVHlw
-ZSE9PTkmJihyPT09dHx8cy5ub2RlVHlwZSE9PTF8fCF2KHMpLmlzKHIpKSlzLm5vZGVUeXBlPT09
-MSYmaS5wdXNoKHMpLHM9c1tuXTtyZXR1cm4gaX0sc2libGluZzpmdW5jdGlvbihlLHQpe3ZhciBu
-PVtdO2Zvcig7ZTtlPWUubmV4dFNpYmxpbmcpZS5ub2RlVHlwZT09PTEmJmUhPT10JiZuLnB1c2go
-ZSk7cmV0dXJuIG59fSk7dmFyIGN0PSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZh
-c3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxo
-Z3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1l
-fHZpZGVvIixodD0vIGpRdWVyeVxkKz0iKD86bnVsbHxcZCspIi9nLHB0PS9eXHMrLyxkdD0vPCg/
-IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSsp
-W14+XSopXC8+L2dpLHZ0PS88KFtcdzpdKykvLG10PS88dGJvZHkvaSxndD0vPHwmIz9cdys7Lyx5
-dD0vPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLGJ0PS88KD86c2NyaXB0fG9iamVjdHxlbWJlZHxv
-cHRpb258c3R5bGUpL2ksd3Q9bmV3IFJlZ0V4cCgiPCg/OiIrY3QrIilbXFxzLz5dIiwiaSIpLEV0
-PS9eKD86Y2hlY2tib3h8cmFkaW8pJC8sU3Q9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tl
-ZC4pL2kseHQ9L1wvKGphdmF8ZWNtYSlzY3JpcHQvaSxUdD0vXlxzKjwhKD86XFtDREFUQVxbfFwt
-XC0pfFtcXVwtXXsyfT5ccyokL2csTnQ9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVs
-dGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+
-Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIs
-IjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Ri
-b2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIs
-IjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0
-OlswLCIiLCIiXX0sQ3Q9bHQoaSksa3Q9Q3QuYXBwZW5kQ2hpbGQoaS5jcmVhdGVFbGVtZW50KCJk
-aXYiKSk7TnQub3B0Z3JvdXA9TnQub3B0aW9uLE50LnRib2R5PU50LnRmb290PU50LmNvbGdyb3Vw
-PU50LmNhcHRpb249TnQudGhlYWQsTnQudGg9TnQudGQsdi5zdXBwb3J0Lmh0bWxTZXJpYWxpemV8
-fChOdC5fZGVmYXVsdD1bMSwiWDxkaXY+IiwiPC9kaXY+Il0pLHYuZm4uZXh0ZW5kKHt0ZXh0OmZ1
-bmN0aW9uKGUpe3JldHVybiB2LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD92
-LnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRv
-Y3VtZW50fHxpKS5jcmVhdGVUZXh0Tm9kZShlKSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0s
-d3JhcEFsbDpmdW5jdGlvbihlKXtpZih2LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChm
-dW5jdGlvbih0KXt2KHRoaXMpLndyYXBBbGwoZS5jYWxsKHRoaXMsdCkpfSk7aWYodGhpc1swXSl7
-dmFyIHQ9dihlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0u
-cGFyZW50Tm9kZSYmdC5pbnNlcnRCZWZvcmUodGhpc1swXSksdC5tYXAoZnVuY3Rpb24oKXt2YXIg
-ZT10aGlzO3doaWxlKGUuZmlyc3RDaGlsZCYmZS5maXJzdENoaWxkLm5vZGVUeXBlPT09MSllPWUu
-Zmlyc3RDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVy
-OmZ1bmN0aW9uKGUpe3JldHVybiB2LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQp
-e3YodGhpcykud3JhcElubmVyKGUuY2FsbCh0aGlzLHQpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigp
-e3ZhciB0PXYodGhpcyksbj10LmNvbnRlbnRzKCk7bi5sZW5ndGg/bi53cmFwQWxsKGUpOnQuYXBw
-ZW5kKGUpfSl9LHdyYXA6ZnVuY3Rpb24oZSl7dmFyIHQ9di5pc0Z1bmN0aW9uKGUpO3JldHVybiB0
-aGlzLmVhY2goZnVuY3Rpb24obil7dih0aGlzKS53cmFwQWxsKHQ/ZS5jYWxsKHRoaXMsbik6ZSl9
-KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigp
-e3Yubm9kZU5hbWUodGhpcywiYm9keSIpfHx2KHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGRO
-b2Rlcyl9KS5lbmQoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJn
-dW1lbnRzLCEwLGZ1bmN0aW9uKGUpeyh0aGlzLm5vZGVUeXBlPT09MXx8dGhpcy5ub2RlVHlwZT09
-PTExKSYmdGhpcy5hcHBlbmRDaGlsZChlKX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRo
-aXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGUpeyh0aGlzLm5vZGVUeXBlPT09MXx8
-dGhpcy5ub2RlVHlwZT09PTExKSYmdGhpcy5pbnNlcnRCZWZvcmUoZSx0aGlzLmZpcnN0Q2hpbGQp
-fSl9LGJlZm9yZTpmdW5jdGlvbigpe2lmKCF1dCh0aGlzWzBdKSlyZXR1cm4gdGhpcy5kb21NYW5p
-cChhcmd1bWVudHMsITEsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShl
-LHRoaXMpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGU9di5jbGVhbihhcmd1bWVudHMpO3Jl
-dHVybiB0aGlzLnB1c2hTdGFjayh2Lm1lcmdlKGUsdGhpcyksImJlZm9yZSIsdGhpcy5zZWxlY3Rv
-cil9fSxhZnRlcjpmdW5jdGlvbigpe2lmKCF1dCh0aGlzWzBdKSlyZXR1cm4gdGhpcy5kb21NYW5p
-cChhcmd1bWVudHMsITEsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShl
-LHRoaXMubmV4dFNpYmxpbmcpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGU9di5jbGVhbihh
-cmd1bWVudHMpO3JldHVybiB0aGlzLnB1c2hTdGFjayh2Lm1lcmdlKHRoaXMsZSksImFmdGVyIix0
-aGlzLnNlbGVjdG9yKX19LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MDtmb3IoOyhuPXRo
-aXNbcl0pIT1udWxsO3IrKylpZighZXx8di5maWx0ZXIoZSxbbl0pLmxlbmd0aCkhdCYmbi5ub2Rl
-VHlwZT09PTEmJih2LmNsZWFuRGF0YShuLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLHYuY2xl
-YW5EYXRhKFtuXSkpLG4ucGFyZW50Tm9kZSYmbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pO3Jl
-dHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe3ZhciBlLHQ9MDtmb3IoOyhlPXRoaXNbdF0pIT1u
-dWxsO3QrKyl7ZS5ub2RlVHlwZT09PTEmJnYuY2xlYW5EYXRhKGUuZ2V0RWxlbWVudHNCeVRhZ05h
-bWUoIioiKSk7d2hpbGUoZS5maXJzdENoaWxkKWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKX1y
-ZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1lPT1udWxsPyExOmUsdD10
-PT1udWxsP2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB2LmNsb25lKHRoaXMsZSx0KX0p
-fSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiB2LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUpe3ZhciBu
-PXRoaXNbMF18fHt9LHI9MCxpPXRoaXMubGVuZ3RoO2lmKGU9PT10KXJldHVybiBuLm5vZGVUeXBl
-PT09MT9uLmlubmVySFRNTC5yZXBsYWNlKGh0LCIiKTp0O2lmKHR5cGVvZiBlPT0ic3RyaW5nIiYm
-IXl0LnRlc3QoZSkmJih2LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8IXd0LnRlc3QoZSkpJiYodi5z
-dXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlfHwhcHQudGVzdChlKSkmJiFOdFsodnQuZXhlYyhlKXx8
-WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9ZS5yZXBsYWNlKGR0LCI8JDE+PC8kMj4iKTt0
-cnl7Zm9yKDtyPGk7cisrKW49dGhpc1tyXXx8e30sbi5ub2RlVHlwZT09PTEmJih2LmNsZWFuRGF0
-YShuLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLG4uaW5uZXJIVE1MPWUpO249MH1jYXRjaChz
-KXt9fW4mJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0s
-cmVwbGFjZVdpdGg6ZnVuY3Rpb24oZSl7cmV0dXJuIHV0KHRoaXNbMF0pP3RoaXMubGVuZ3RoP3Ro
-aXMucHVzaFN0YWNrKHYodi5pc0Z1bmN0aW9uKGUpP2UoKTplKSwicmVwbGFjZVdpdGgiLGUpOnRo
-aXM6di5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXt2YXIgbj12KHRoaXMpLHI9
-bi5odG1sKCk7bi5yZXBsYWNlV2l0aChlLmNhbGwodGhpcyx0LHIpKX0pOih0eXBlb2YgZSE9InN0
-cmluZyImJihlPXYoZSkuZGV0YWNoKCkpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXMu
-bmV4dFNpYmxpbmcsbj10aGlzLnBhcmVudE5vZGU7dih0aGlzKS5yZW1vdmUoKSx0P3YodCkuYmVm
-b3JlKGUpOnYobikuYXBwZW5kKGUpfSkpfSxkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMu
-cmVtb3ZlKGUsITApfSxkb21NYW5pcDpmdW5jdGlvbihlLG4scil7ZT1bXS5jb25jYXQuYXBwbHko
-W10sZSk7dmFyIGkscyxvLHUsYT0wLGY9ZVswXSxsPVtdLGM9dGhpcy5sZW5ndGg7aWYoIXYuc3Vw
-cG9ydC5jaGVja0Nsb25lJiZjPjEmJnR5cGVvZiBmPT0ic3RyaW5nIiYmU3QudGVzdChmKSlyZXR1
-cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dih0aGlzKS5kb21NYW5pcChlLG4scil9KTtpZih2Lmlz
-RnVuY3Rpb24oZikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKXt2YXIgcz12KHRoaXMpO2Vb
-MF09Zi5jYWxsKHRoaXMsaSxuP3MuaHRtbCgpOnQpLHMuZG9tTWFuaXAoZSxuLHIpfSk7aWYodGhp
-c1swXSl7aT12LmJ1aWxkRnJhZ21lbnQoZSx0aGlzLGwpLG89aS5mcmFnbWVudCxzPW8uZmlyc3RD
-aGlsZCxvLmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmKG89cyk7aWYocyl7bj1uJiZ2Lm5vZGVOYW1l
-KHMsInRyIik7Zm9yKHU9aS5jYWNoZWFibGV8fGMtMTthPGM7YSsrKXIuY2FsbChuJiZ2Lm5vZGVO
-YW1lKHRoaXNbYV0sInRhYmxlIik/THQodGhpc1thXSwidGJvZHkiKTp0aGlzW2FdLGE9PT11P286
-di5jbG9uZShvLCEwLCEwKSl9bz1zPW51bGwsbC5sZW5ndGgmJnYuZWFjaChsLGZ1bmN0aW9uKGUs
-dCl7dC5zcmM/di5hamF4P3YuYWpheCh7dXJsOnQuc3JjLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNj
-cmlwdCIsYXN5bmM6ITEsZ2xvYmFsOiExLCJ0aHJvd3MiOiEwfSk6di5lcnJvcigibm8gYWpheCIp
-OnYuZ2xvYmFsRXZhbCgodC50ZXh0fHx0LnRleHRDb250ZW50fHx0LmlubmVySFRNTHx8IiIpLnJl
-cGxhY2UoVHQsIiIpKSx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX0p
-fXJldHVybiB0aGlzfX0pLHYuYnVpbGRGcmFnbWVudD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyx1
-LGE9ZVswXTtyZXR1cm4gbj1ufHxpLG49IW4ubm9kZVR5cGUmJm5bMF18fG4sbj1uLm93bmVyRG9j
-dW1lbnR8fG4sZS5sZW5ndGg9PT0xJiZ0eXBlb2YgYT09InN0cmluZyImJmEubGVuZ3RoPDUxMiYm
-bj09PWkmJmEuY2hhckF0KDApPT09IjwiJiYhYnQudGVzdChhKSYmKHYuc3VwcG9ydC5jaGVja0Ns
-b25lfHwhU3QudGVzdChhKSkmJih2LnN1cHBvcnQuaHRtbDVDbG9uZXx8IXd0LnRlc3QoYSkpJiYo
-bz0hMCxzPXYuZnJhZ21lbnRzW2FdLHU9cyE9PXQpLHN8fChzPW4uY3JlYXRlRG9jdW1lbnRGcmFn
-bWVudCgpLHYuY2xlYW4oZSxuLHMsciksbyYmKHYuZnJhZ21lbnRzW2FdPXUmJnMpKSx7ZnJhZ21l
-bnQ6cyxjYWNoZWFibGU6b319LHYuZnJhZ21lbnRzPXt9LHYuZWFjaCh7YXBwZW5kVG86ImFwcGVu
-ZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6
-ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUsdCl7di5mbltlXT1m
-dW5jdGlvbihuKXt2YXIgcixpPTAscz1bXSxvPXYobiksdT1vLmxlbmd0aCxhPXRoaXMubGVuZ3Ro
-PT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKChhPT1udWxsfHxhJiZhLm5vZGVUeXBlPT09MTEm
-JmEuY2hpbGROb2Rlcy5sZW5ndGg9PT0xKSYmdT09PTEpcmV0dXJuIG9bdF0odGhpc1swXSksdGhp
-cztmb3IoO2k8dTtpKyspcj0oaT4wP3RoaXMuY2xvbmUoITApOnRoaXMpLmdldCgpLHYob1tpXSlb
-dF0ocikscz1zLmNvbmNhdChyKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socyxlLG8uc2VsZWN0b3Ip
-fX0pLHYuZXh0ZW5kKHtjbG9uZTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxzLG87di5zdXBwb3J0
-Lmh0bWw1Q2xvbmV8fHYuaXNYTUxEb2MoZSl8fCF3dC50ZXN0KCI8IitlLm5vZGVOYW1lKyI+Iik/
-bz1lLmNsb25lTm9kZSghMCk6KGt0LmlubmVySFRNTD1lLm91dGVySFRNTCxrdC5yZW1vdmVDaGls
-ZChvPWt0LmZpcnN0Q2hpbGQpKTtpZigoIXYuc3VwcG9ydC5ub0Nsb25lRXZlbnR8fCF2LnN1cHBv
-cnQubm9DbG9uZUNoZWNrZWQpJiYoZS5ub2RlVHlwZT09PTF8fGUubm9kZVR5cGU9PT0xMSkmJiF2
-LmlzWE1MRG9jKGUpKXtPdChlLG8pLHI9TXQoZSksaT1NdChvKTtmb3Iocz0wO3Jbc107KytzKWlb
-c10mJk90KHJbc10saVtzXSl9aWYodCl7QXQoZSxvKTtpZihuKXtyPU10KGUpLGk9TXQobyk7Zm9y
-KHM9MDtyW3NdOysrcylBdChyW3NdLGlbc10pfX1yZXR1cm4gcj1pPW51bGwsb30sY2xlYW46ZnVu
-Y3Rpb24oZSx0LG4scil7dmFyIHMsbyx1LGEsZixsLGMsaCxwLGQsbSxnLHk9dD09PWkmJkN0LGI9
-W107aWYoIXR8fHR5cGVvZiB0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ9PSJ1bmRlZmluZWQiKXQ9
-aTtmb3Iocz0wOyh1PWVbc10pIT1udWxsO3MrKyl7dHlwZW9mIHU9PSJudW1iZXIiJiYodSs9IiIp
-O2lmKCF1KWNvbnRpbnVlO2lmKHR5cGVvZiB1PT0ic3RyaW5nIilpZighZ3QudGVzdCh1KSl1PXQu
-Y3JlYXRlVGV4dE5vZGUodSk7ZWxzZXt5PXl8fGx0KHQpLGM9dC5jcmVhdGVFbGVtZW50KCJkaXYi
-KSx5LmFwcGVuZENoaWxkKGMpLHU9dS5yZXBsYWNlKGR0LCI8JDE+PC8kMj4iKSxhPSh2dC5leGVj
-KHUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLGY9TnRbYV18fE50Ll9kZWZhdWx0LGw9Zlsw
-XSxjLmlubmVySFRNTD1mWzFdK3UrZlsyXTt3aGlsZShsLS0pYz1jLmxhc3RDaGlsZDtpZighdi5z
-dXBwb3J0LnRib2R5KXtoPW10LnRlc3QodSkscD1hPT09InRhYmxlIiYmIWg/Yy5maXJzdENoaWxk
-JiZjLmZpcnN0Q2hpbGQuY2hpbGROb2RlczpmWzFdPT09Ijx0YWJsZT4iJiYhaD9jLmNoaWxkTm9k
-ZXM6W107Zm9yKG89cC5sZW5ndGgtMTtvPj0wOy0tbyl2Lm5vZGVOYW1lKHBbb10sInRib2R5Iikm
-JiFwW29dLmNoaWxkTm9kZXMubGVuZ3RoJiZwW29dLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocFtv
-XSl9IXYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmcHQudGVzdCh1KSYmYy5pbnNlcnRCZWZv
-cmUodC5jcmVhdGVUZXh0Tm9kZShwdC5leGVjKHUpWzBdKSxjLmZpcnN0Q2hpbGQpLHU9Yy5jaGls
-ZE5vZGVzLGMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKX11Lm5vZGVUeXBlP2IucHVzaCh1KTp2
-Lm1lcmdlKGIsdSl9YyYmKHU9Yz15PW51bGwpO2lmKCF2LnN1cHBvcnQuYXBwZW5kQ2hlY2tlZClm
-b3Iocz0wOyh1PWJbc10pIT1udWxsO3MrKyl2Lm5vZGVOYW1lKHUsImlucHV0Iik/X3QodSk6dHlw
-ZW9mIHUuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiJiZ2LmdyZXAodS5nZXRFbGVt
-ZW50c0J5VGFnTmFtZSgiaW5wdXQiKSxfdCk7aWYobil7bT1mdW5jdGlvbihlKXtpZighZS50eXBl
-fHx4dC50ZXN0KGUudHlwZSkpcmV0dXJuIHI/ci5wdXNoKGUucGFyZW50Tm9kZT9lLnBhcmVudE5v
-ZGUucmVtb3ZlQ2hpbGQoZSk6ZSk6bi5hcHBlbmRDaGlsZChlKX07Zm9yKHM9MDsodT1iW3NdKSE9
-bnVsbDtzKyspaWYoIXYubm9kZU5hbWUodSwic2NyaXB0Iil8fCFtKHUpKW4uYXBwZW5kQ2hpbGQo
-dSksdHlwZW9mIHUuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiJiYoZz12LmdyZXAo
-di5tZXJnZShbXSx1LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSksbSksYi5zcGxpY2Uu
-YXBwbHkoYixbcysxLDBdLmNvbmNhdChnKSkscys9Zy5sZW5ndGgpfXJldHVybiBifSxjbGVhbkRh
-dGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGkscyxvPTAsdT12LmV4cGFuZG8sYT12LmNhY2hlLGY9
-di5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8sbD12LmV2ZW50LnNwZWNpYWw7Zm9yKDsoaT1lW29dKSE9
-bnVsbDtvKyspaWYodHx8di5hY2NlcHREYXRhKGkpKXtyPWlbdV0sbj1yJiZhW3JdO2lmKG4pe2lm
-KG4uZXZlbnRzKWZvcihzIGluIG4uZXZlbnRzKWxbc10/di5ldmVudC5yZW1vdmUoaSxzKTp2LnJl
-bW92ZUV2ZW50KGkscyxuLmhhbmRsZSk7YVtyXSYmKGRlbGV0ZSBhW3JdLGY/ZGVsZXRlIGlbdV06
-aS5yZW1vdmVBdHRyaWJ1dGU/aS5yZW1vdmVBdHRyaWJ1dGUodSk6aVt1XT1udWxsLHYuZGVsZXRl
-ZElkcy5wdXNoKHIpKX19fX0pLGZ1bmN0aW9uKCl7dmFyIGUsdDt2LnVhTWF0Y2g9ZnVuY3Rpb24o
-ZSl7ZT1lLnRvTG93ZXJDYXNlKCk7dmFyIHQ9LyhjaHJvbWUpWyBcL10oW1x3Ll0rKS8uZXhlYyhl
-KXx8Lyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8uZXhlYyhlKXx8LyhvcGVyYSkoPzouKnZlcnNpb258
-KVsgXC9dKFtcdy5dKykvLmV4ZWMoZSl8fC8obXNpZSkgKFtcdy5dKykvLmV4ZWMoZSl8fGUuaW5k
-ZXhPZigiY29tcGF0aWJsZSIpPDAmJi8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKyl8KS8uZXhl
-YyhlKXx8W107cmV0dXJue2Jyb3dzZXI6dFsxXXx8IiIsdmVyc2lvbjp0WzJdfHwiMCJ9fSxlPXYu
-dWFNYXRjaChvLnVzZXJBZ2VudCksdD17fSxlLmJyb3dzZXImJih0W2UuYnJvd3Nlcl09ITAsdC52
-ZXJzaW9uPWUudmVyc2lvbiksdC5jaHJvbWU/dC53ZWJraXQ9ITA6dC53ZWJraXQmJih0LnNhZmFy
-aT0hMCksdi5icm93c2VyPXQsdi5zdWI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7cmV0dXJu
-IG5ldyBlLmZuLmluaXQodCxuKX12LmV4dGVuZCghMCxlLHRoaXMpLGUuc3VwZXJjbGFzcz10aGlz
-LGUuZm49ZS5wcm90b3R5cGU9dGhpcygpLGUuZm4uY29uc3RydWN0b3I9ZSxlLnN1Yj10aGlzLnN1
-YixlLmZuLmluaXQ9ZnVuY3Rpb24ocixpKXtyZXR1cm4gaSYmaSBpbnN0YW5jZW9mIHYmJiEoaSBp
-bnN0YW5jZW9mIGUpJiYoaT1lKGkpKSx2LmZuLmluaXQuY2FsbCh0aGlzLHIsaSx0KX0sZS5mbi5p
-bml0LnByb3RvdHlwZT1lLmZuO3ZhciB0PWUoaSk7cmV0dXJuIGV9fSgpO3ZhciBEdCxQdCxIdCxC
-dD0vYWxwaGFcKFteKV0qXCkvaSxqdD0vb3BhY2l0eT0oW14pXSopLyxGdD0vXih0b3B8cmlnaHR8
-Ym90dG9tfGxlZnQpJC8sSXQ9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLHF0PS9ebWFyZ2lu
-LyxSdD1uZXcgUmVnRXhwKCJeKCIrbSsiKSguKikkIiwiaSIpLFV0PW5ldyBSZWdFeHAoIl4oIitt
-KyIpKD8hcHgpW2EteiVdKyQiLCJpIiksenQ9bmV3IFJlZ0V4cCgiXihbLStdKT0oIittKyIpIiwi
-aSIpLFd0PXtCT0RZOiJibG9jayJ9LFh0PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6
-ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxWdD17bGV0dGVyU3BhY2luZzowLGZvbnRXZWlnaHQ6
-NDAwfSwkdD1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLEp0PVsiV2Via2l0IiwiTyIs
-Ik1veiIsIm1zIl0sS3Q9di5mbi50b2dnbGU7di5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLG4p
-e3JldHVybiB2LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gciE9PXQ/di5zdHls
-ZShlLG4scik6di5jc3MoZSxuKX0sZSxuLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHNob3c6ZnVuY3Rp
-b24oKXtyZXR1cm4gWXQodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gWXQodGhpcyl9
-LHRvZ2dsZTpmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBlPT0iYm9vbGVhbiI7cmV0dXJuIHYu
-aXNGdW5jdGlvbihlKSYmdi5pc0Z1bmN0aW9uKHQpP0t0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0
-aGlzLmVhY2goZnVuY3Rpb24oKXsobj9lOkd0KHRoaXMpKT92KHRoaXMpLnNob3coKTp2KHRoaXMp
-LmhpZGUoKX0pfX0pLHYuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUs
-dCl7aWYodCl7dmFyIG49RHQoZSwib3BhY2l0eSIpO3JldHVybiBuPT09IiI/IjEiOm59fX19LGNz
-c051bWJlcjp7ZmlsbE9wYWNpdHk6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNp
-dHk6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnsi
-ZmxvYXQiOnYuc3VwcG9ydC5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6
-ZnVuY3Rpb24oZSxuLHIsaSl7aWYoIWV8fGUubm9kZVR5cGU9PT0zfHxlLm5vZGVUeXBlPT09OHx8
-IWUuc3R5bGUpcmV0dXJuO3ZhciBzLG8sdSxhPXYuY2FtZWxDYXNlKG4pLGY9ZS5zdHlsZTtuPXYu
-Y3NzUHJvcHNbYV18fCh2LmNzc1Byb3BzW2FdPVF0KGYsYSkpLHU9di5jc3NIb29rc1tuXXx8di5j
-c3NIb29rc1thXTtpZihyPT09dClyZXR1cm4gdSYmImdldCJpbiB1JiYocz11LmdldChlLCExLGkp
-KSE9PXQ/czpmW25dO289dHlwZW9mIHIsbz09PSJzdHJpbmciJiYocz16dC5leGVjKHIpKSYmKHI9
-KHNbMV0rMSkqc1syXStwYXJzZUZsb2F0KHYuY3NzKGUsbikpLG89Im51bWJlciIpO2lmKHI9PW51
-bGx8fG89PT0ibnVtYmVyIiYmaXNOYU4ocikpcmV0dXJuO289PT0ibnVtYmVyIiYmIXYuY3NzTnVt
-YmVyW2FdJiYocis9InB4Iik7aWYoIXV8fCEoInNldCJpbiB1KXx8KHI9dS5zZXQoZSxyLGkpKSE9
-PXQpdHJ5e2Zbbl09cn1jYXRjaChsKXt9fSxjc3M6ZnVuY3Rpb24oZSxuLHIsaSl7dmFyIHMsbyx1
-LGE9di5jYW1lbENhc2Uobik7cmV0dXJuIG49di5jc3NQcm9wc1thXXx8KHYuY3NzUHJvcHNbYV09
-UXQoZS5zdHlsZSxhKSksdT12LmNzc0hvb2tzW25dfHx2LmNzc0hvb2tzW2FdLHUmJiJnZXQiaW4g
-dSYmKHM9dS5nZXQoZSwhMCxpKSkscz09PXQmJihzPUR0KGUsbikpLHM9PT0ibm9ybWFsIiYmbiBp
-biBWdCYmKHM9VnRbbl0pLHJ8fGkhPT10PyhvPXBhcnNlRmxvYXQocykscnx8di5pc051bWVyaWMo
-byk/b3x8MDpzKTpzfSxzd2FwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLHM9e307Zm9yKGkgaW4g
-dClzW2ldPWUuc3R5bGVbaV0sZS5zdHlsZVtpXT10W2ldO3I9bi5jYWxsKGUpO2ZvcihpIGluIHQp
-ZS5zdHlsZVtpXT1zW2ldO3JldHVybiByfX0pLGUuZ2V0Q29tcHV0ZWRTdHlsZT9EdD1mdW5jdGlv
-bih0LG4pe3ZhciByLGkscyxvLHU9ZS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCksYT10LnN0eWxl
-O3JldHVybiB1JiYocj11LmdldFByb3BlcnR5VmFsdWUobil8fHVbbl0scj09PSIiJiYhdi5jb250
-YWlucyh0Lm93bmVyRG9jdW1lbnQsdCkmJihyPXYuc3R5bGUodCxuKSksVXQudGVzdChyKSYmcXQu
-dGVzdChuKSYmKGk9YS53aWR0aCxzPWEubWluV2lkdGgsbz1hLm1heFdpZHRoLGEubWluV2lkdGg9
-YS5tYXhXaWR0aD1hLndpZHRoPXIscj11LndpZHRoLGEud2lkdGg9aSxhLm1pbldpZHRoPXMsYS5t
-YXhXaWR0aD1vKSkscn06aS5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlJiYoRHQ9ZnVuY3Rp
-b24oZSx0KXt2YXIgbixyLGk9ZS5jdXJyZW50U3R5bGUmJmUuY3VycmVudFN0eWxlW3RdLHM9ZS5z
-dHlsZTtyZXR1cm4gaT09bnVsbCYmcyYmc1t0XSYmKGk9c1t0XSksVXQudGVzdChpKSYmIUZ0LnRl
-c3QodCkmJihuPXMubGVmdCxyPWUucnVudGltZVN0eWxlJiZlLnJ1bnRpbWVTdHlsZS5sZWZ0LHIm
-JihlLnJ1bnRpbWVTdHlsZS5sZWZ0PWUuY3VycmVudFN0eWxlLmxlZnQpLHMubGVmdD10PT09ImZv
-bnRTaXplIj8iMWVtIjppLGk9cy5waXhlbExlZnQrInB4IixzLmxlZnQ9bixyJiYoZS5ydW50aW1l
-U3R5bGUubGVmdD1yKSksaT09PSIiPyJhdXRvIjppfSksdi5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgi
-XSxmdW5jdGlvbihlLHQpe3YuY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7aWYobily
-ZXR1cm4gZS5vZmZzZXRXaWR0aD09PTAmJkl0LnRlc3QoRHQoZSwiZGlzcGxheSIpKT92LnN3YXAo
-ZSxYdCxmdW5jdGlvbigpe3JldHVybiB0bihlLHQscil9KTp0bihlLHQscil9LHNldDpmdW5jdGlv
-bihlLG4scil7cmV0dXJuIFp0KGUsbixyP2VuKGUsdCxyLHYuc3VwcG9ydC5ib3hTaXppbmcmJnYu
-Y3NzKGUsImJveFNpemluZyIpPT09ImJvcmRlci1ib3giKTowKX19fSksdi5zdXBwb3J0Lm9wYWNp
-dHl8fCh2LmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihlLHQpe3JldHVybiBqdC50ZXN0
-KCh0JiZlLmN1cnJlbnRTdHlsZT9lLmN1cnJlbnRTdHlsZS5maWx0ZXI6ZS5zdHlsZS5maWx0ZXIp
-fHwiIik/LjAxKnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsiIjp0PyIxIjoiIn0sc2V0OmZ1bmN0aW9u
-KGUsdCl7dmFyIG49ZS5zdHlsZSxyPWUuY3VycmVudFN0eWxlLGk9di5pc051bWVyaWModCk/ImFs
-cGhhKG9wYWNpdHk9Iit0KjEwMCsiKSI6IiIscz1yJiZyLmZpbHRlcnx8bi5maWx0ZXJ8fCIiO24u
-em9vbT0xO2lmKHQ+PTEmJnYudHJpbShzLnJlcGxhY2UoQnQsIiIpKT09PSIiJiZuLnJlbW92ZUF0
-dHJpYnV0ZSl7bi5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpO2lmKHImJiFyLmZpbHRlcilyZXR1
-cm59bi5maWx0ZXI9QnQudGVzdChzKT9zLnJlcGxhY2UoQnQsaSk6cysiICIraX19KSx2KGZ1bmN0
-aW9uKCl7di5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fCh2LmNzc0hvb2tzLm1hcmdpblJp
-Z2h0PXtnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdi5zd2FwKGUse2Rpc3BsYXk6ImlubGluZS1i
-bG9jayJ9LGZ1bmN0aW9uKCl7aWYodClyZXR1cm4gRHQoZSwibWFyZ2luUmlnaHQiKX0pfX0pLCF2
-LnN1cHBvcnQucGl4ZWxQb3NpdGlvbiYmdi5mbi5wb3NpdGlvbiYmdi5lYWNoKFsidG9wIiwibGVm
-dCJdLGZ1bmN0aW9uKGUsdCl7di5jc3NIb29rc1t0XT17Z2V0OmZ1bmN0aW9uKGUsbil7aWYobil7
-dmFyIHI9RHQoZSx0KTtyZXR1cm4gVXQudGVzdChyKT92KGUpLnBvc2l0aW9uKClbdF0rInB4Ijpy
-fX19fSl9KSx2LmV4cHImJnYuZXhwci5maWx0ZXJzJiYodi5leHByLmZpbHRlcnMuaGlkZGVuPWZ1
-bmN0aW9uKGUpe3JldHVybiBlLm9mZnNldFdpZHRoPT09MCYmZS5vZmZzZXRIZWlnaHQ9PT0wfHwh
-di5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyYmKGUuc3R5bGUmJmUuc3R5bGUuZGlzcGxh
-eXx8RHQoZSwiZGlzcGxheSIpKT09PSJub25lIn0sdi5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5j
-dGlvbihlKXtyZXR1cm4hdi5leHByLmZpbHRlcnMuaGlkZGVuKGUpfSksdi5lYWNoKHttYXJnaW46
-IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oZSx0KXt2LmNzc0hvb2tzW2Ur
-dF09e2V4cGFuZDpmdW5jdGlvbihuKXt2YXIgcixpPXR5cGVvZiBuPT0ic3RyaW5nIj9uLnNwbGl0
-KCIgIik6W25dLHM9e307Zm9yKHI9MDtyPDQ7cisrKXNbZSskdFtyXSt0XT1pW3JdfHxpW3ItMl18
-fGlbMF07cmV0dXJuIHN9fSxxdC50ZXN0KGUpfHwodi5jc3NIb29rc1tlK3RdLnNldD1adCl9KTt2
-YXIgcm49LyUyMC9nLHNuPS9cW1xdJC8sb249L1xyP1xuL2csdW49L14oPzpjb2xvcnxkYXRlfGRh
-dGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8
-cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLGFuPS9eKD86c2VsZWN0fHRl
-eHRhcmVhKS9pO3YuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdi5wYXJh
-bSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVy
-biB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnRzP3YubWFrZUFycmF5KHRo
-aXMuZWxlbWVudHMpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lJiYh
-dGhpcy5kaXNhYmxlZCYmKHRoaXMuY2hlY2tlZHx8YW4udGVzdCh0aGlzLm5vZGVOYW1lKXx8dW4u
-dGVzdCh0aGlzLnR5cGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXYodGhpcykudmFsKCk7
-cmV0dXJuIG49PW51bGw/bnVsbDp2LmlzQXJyYXkobik/di5tYXAobixmdW5jdGlvbihlLG4pe3Jl
-dHVybntuYW1lOnQubmFtZSx2YWx1ZTplLnJlcGxhY2Uob24sIlxyXG4iKX19KTp7bmFtZTp0Lm5h
-bWUsdmFsdWU6bi5yZXBsYWNlKG9uLCJcclxuIil9fSkuZ2V0KCl9fSksdi5wYXJhbT1mdW5jdGlv
-bihlLG4pe3ZhciByLGk9W10scz1mdW5jdGlvbihlLHQpe3Q9di5pc0Z1bmN0aW9uKHQpP3QoKTp0
-PT1udWxsPyIiOnQsaVtpLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpKyI9IitlbmNvZGVV
-UklDb21wb25lbnQodCl9O249PT10JiYobj12LmFqYXhTZXR0aW5ncyYmdi5hamF4U2V0dGluZ3Mu
-dHJhZGl0aW9uYWwpO2lmKHYuaXNBcnJheShlKXx8ZS5qcXVlcnkmJiF2LmlzUGxhaW5PYmplY3Qo
-ZSkpdi5lYWNoKGUsZnVuY3Rpb24oKXtzKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9y
-KHIgaW4gZSlmbihyLGVbcl0sbixzKTtyZXR1cm4gaS5qb2luKCImIikucmVwbGFjZShybiwiKyIp
-fTt2YXIgbG4sY24saG49LyMuKiQvLHBuPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcs
-ZG49L14oPzphYm91dHxhcHB8YXBwXC1zdG9yYWdlfC4rXC1leHRlbnNpb258ZmlsZXxyZXN8d2lk
-Z2V0KTokLyx2bj0vXig/OkdFVHxIRUFEKSQvLG1uPS9eXC9cLy8sZ249L1w/Lyx5bj0vPHNjcmlw
-dFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSxibj0vKFs/Jl0p
-Xz1bXiZdKi8sd249L14oW1x3XCtcLlwtXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKXwp
-fCkvLEVuPXYuZm4ubG9hZCxTbj17fSx4bj17fSxUbj1bIiovIl0rWyIqIl07dHJ5e2NuPXMuaHJl
-Zn1jYXRjaChObil7Y249aS5jcmVhdGVFbGVtZW50KCJhIiksY24uaHJlZj0iIixjbj1jbi5ocmVm
-fWxuPXduLmV4ZWMoY24udG9Mb3dlckNhc2UoKSl8fFtdLHYuZm4ubG9hZD1mdW5jdGlvbihlLG4s
-cil7aWYodHlwZW9mIGUhPSJzdHJpbmciJiZFbilyZXR1cm4gRW4uYXBwbHkodGhpcyxhcmd1bWVu
-dHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgaSxzLG8sdT10aGlzLGE9ZS5pbmRl
-eE9mKCIgIik7cmV0dXJuIGE+PTAmJihpPWUuc2xpY2UoYSxlLmxlbmd0aCksZT1lLnNsaWNlKDAs
-YSkpLHYuaXNGdW5jdGlvbihuKT8ocj1uLG49dCk6biYmdHlwZW9mIG49PSJvYmplY3QiJiYocz0i
-UE9TVCIpLHYuYWpheCh7dXJsOmUsdHlwZTpzLGRhdGFUeXBlOiJodG1sIixkYXRhOm4sY29tcGxl
-dGU6ZnVuY3Rpb24oZSx0KXtyJiZ1LmVhY2gocixvfHxbZS5yZXNwb25zZVRleHQsdCxlXSl9fSku
-ZG9uZShmdW5jdGlvbihlKXtvPWFyZ3VtZW50cyx1Lmh0bWwoaT92KCI8ZGl2PiIpLmFwcGVuZChl
-LnJlcGxhY2UoeW4sIiIpKS5maW5kKGkpOmUpfSksdGhpc30sdi5lYWNoKCJhamF4U3RhcnQgYWph
-eFN0b3AgYWpheENvbXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQo
-IiAiKSxmdW5jdGlvbihlLHQpe3YuZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxl
-KX19KSx2LmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSxuKXt2W25dPWZ1bmN0aW9uKGUs
-cixpLHMpe3JldHVybiB2LmlzRnVuY3Rpb24ocikmJihzPXN8fGksaT1yLHI9dCksdi5hamF4KHt0
-eXBlOm4sdXJsOmUsZGF0YTpyLHN1Y2Nlc3M6aSxkYXRhVHlwZTpzfSl9fSksdi5leHRlbmQoe2dl
-dFNjcmlwdDpmdW5jdGlvbihlLG4pe3JldHVybiB2LmdldChlLHQsbiwic2NyaXB0Iil9LGdldEpT
-T046ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2LmdldChlLHQsbiwianNvbiIpfSxhamF4U2V0dXA6
-ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9MbihlLHYuYWpheFNldHRpbmdzKToodD1lLGU9di5hamF4
-U2V0dGluZ3MpLExuKGUsdCksZX0sYWpheFNldHRpbmdzOnt1cmw6Y24saXNMb2NhbDpkbi50ZXN0
-KGxuWzFdKSxnbG9iYWw6ITAsdHlwZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13
-d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04Iixwcm9jZXNzRGF0YTohMCxhc3luYzoh
-MCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRt
-bCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2Ny
-aXB0IiwiKiI6VG59LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99
-LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxj
-b252ZXJ0ZXJzOnsiKiB0ZXh0IjplLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjp2
-LnBhcnNlSlNPTiwidGV4dCB4bWwiOnYucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEw
-LHVybDohMH19LGFqYXhQcmVmaWx0ZXI6Q24oU24pLGFqYXhUcmFuc3BvcnQ6Q24oeG4pLGFqYXg6
-ZnVuY3Rpb24oZSxuKXtmdW5jdGlvbiBUKGUsbixzLGEpe3ZhciBsLHksYix3LFMsVD1uO2lmKEU9
-PT0yKXJldHVybjtFPTIsdSYmY2xlYXJUaW1lb3V0KHUpLG89dCxpPWF8fCIiLHgucmVhZHlTdGF0
-ZT1lPjA/NDowLHMmJih3PUFuKGMseCxzKSk7aWYoZT49MjAwJiZlPDMwMHx8ZT09PTMwNCljLmlm
-TW9kaWZpZWQmJihTPXguZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSxTJiYodi5s
-YXN0TW9kaWZpZWRbcl09UyksUz14LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIiksUyYmKHYuZXRh
-Z1tyXT1TKSksZT09PTMwND8oVD0ibm90bW9kaWZpZWQiLGw9ITApOihsPU9uKGMsdyksVD1sLnN0
-YXRlLHk9bC5kYXRhLGI9bC5lcnJvcixsPSFiKTtlbHNle2I9VDtpZighVHx8ZSlUPSJlcnJvciIs
-ZTwwJiYoZT0wKX14LnN0YXR1cz1lLHguc3RhdHVzVGV4dD0obnx8VCkrIiIsbD9kLnJlc29sdmVX
-aXRoKGgsW3ksVCx4XSk6ZC5yZWplY3RXaXRoKGgsW3gsVCxiXSkseC5zdGF0dXNDb2RlKGcpLGc9
-dCxmJiZwLnRyaWdnZXIoImFqYXgiKyhsPyJTdWNjZXNzIjoiRXJyb3IiKSxbeCxjLGw/eTpiXSks
-bS5maXJlV2l0aChoLFt4LFRdKSxmJiYocC50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt4LGNdKSwt
-LXYuYWN0aXZlfHx2LmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfXR5cGVvZiBlPT0ib2JqZWN0
-IiYmKG49ZSxlPXQpLG49bnx8e307dmFyIHIsaSxzLG8sdSxhLGYsbCxjPXYuYWpheFNldHVwKHt9
-LG4pLGg9Yy5jb250ZXh0fHxjLHA9aCE9PWMmJihoLm5vZGVUeXBlfHxoIGluc3RhbmNlb2Ygdik/
-dihoKTp2LmV2ZW50LGQ9di5EZWZlcnJlZCgpLG09di5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiks
-Zz1jLnN0YXR1c0NvZGV8fHt9LGI9e30sdz17fSxFPTAsUz0iY2FuY2VsZWQiLHg9e3JlYWR5U3Rh
-dGU6MCxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7aWYoIUUpe3ZhciBuPWUudG9Mb3dl
-ckNhc2UoKTtlPXdbbl09d1tuXXx8ZSxiW2VdPXR9cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNl
-SGVhZGVyczpmdW5jdGlvbigpe3JldHVybiBFPT09Mj9pOm51bGx9LGdldFJlc3BvbnNlSGVhZGVy
-OmZ1bmN0aW9uKGUpe3ZhciBuO2lmKEU9PT0yKXtpZighcyl7cz17fTt3aGlsZShuPXBuLmV4ZWMo
-aSkpc1tuWzFdLnRvTG93ZXJDYXNlKCldPW5bMl19bj1zW2UudG9Mb3dlckNhc2UoKV19cmV0dXJu
-IG49PT10P251bGw6bn0sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gRXx8KGMu
-bWltZVR5cGU9ZSksdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZXx8UyxvJiZvLmFi
-b3J0KGUpLFQoMCxlKSx0aGlzfX07ZC5wcm9taXNlKHgpLHguc3VjY2Vzcz14LmRvbmUseC5lcnJv
-cj14LmZhaWwseC5jb21wbGV0ZT1tLmFkZCx4LnN0YXR1c0NvZGU9ZnVuY3Rpb24oZSl7aWYoZSl7
-dmFyIHQ7aWYoRTwyKWZvcih0IGluIGUpZ1t0XT1bZ1t0XSxlW3RdXTtlbHNlIHQ9ZVt4LnN0YXR1
-c10seC5hbHdheXModCl9cmV0dXJuIHRoaXN9LGMudXJsPSgoZXx8Yy51cmwpKyIiKS5yZXBsYWNl
-KGhuLCIiKS5yZXBsYWNlKG1uLGxuWzFdKyIvLyIpLGMuZGF0YVR5cGVzPXYudHJpbShjLmRhdGFU
-eXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoeSksYy5jcm9zc0RvbWFpbj09bnVsbCYmKGE9
-d24uZXhlYyhjLnVybC50b0xvd2VyQ2FzZSgpKSxjLmNyb3NzRG9tYWluPSEoIWF8fGFbMV09PT1s
-blsxXSYmYVsyXT09PWxuWzJdJiYoYVszXXx8KGFbMV09PT0iaHR0cDoiPzgwOjQ0MykpPT0obG5b
-M118fChsblsxXT09PSJodHRwOiI/ODA6NDQzKSkpKSxjLmRhdGEmJmMucHJvY2Vzc0RhdGEmJnR5
-cGVvZiBjLmRhdGEhPSJzdHJpbmciJiYoYy5kYXRhPXYucGFyYW0oYy5kYXRhLGMudHJhZGl0aW9u
-YWwpKSxrbihTbixjLG4seCk7aWYoRT09PTIpcmV0dXJuIHg7Zj1jLmdsb2JhbCxjLnR5cGU9Yy50
-eXBlLnRvVXBwZXJDYXNlKCksYy5oYXNDb250ZW50PSF2bi50ZXN0KGMudHlwZSksZiYmdi5hY3Rp
-dmUrKz09PTAmJnYuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iik7aWYoIWMuaGFzQ29udGVudCl7
-Yy5kYXRhJiYoYy51cmwrPShnbi50ZXN0KGMudXJsKT8iJiI6Ij8iKStjLmRhdGEsZGVsZXRlIGMu
-ZGF0YSkscj1jLnVybDtpZihjLmNhY2hlPT09ITEpe3ZhciBOPXYubm93KCksQz1jLnVybC5yZXBs
-YWNlKGJuLCIkMV89IitOKTtjLnVybD1DKyhDPT09Yy51cmw/KGduLnRlc3QoYy51cmwpPyImIjoi
-PyIpKyJfPSIrTjoiIil9fShjLmRhdGEmJmMuaGFzQ29udGVudCYmYy5jb250ZW50VHlwZSE9PSEx
-fHxuLmNvbnRlbnRUeXBlKSYmeC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGMuY29u
-dGVudFR5cGUpLGMuaWZNb2RpZmllZCYmKHI9cnx8Yy51cmwsdi5sYXN0TW9kaWZpZWRbcl0mJngu
-c2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLHYubGFzdE1vZGlmaWVkW3JdKSx2
-LmV0YWdbcl0mJnguc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsdi5ldGFnW3JdKSks
-eC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGMuZGF0YVR5cGVzWzBdJiZjLmFjY2VwdHNbYy5k
-YXRhVHlwZXNbMF1dP2MuYWNjZXB0c1tjLmRhdGFUeXBlc1swXV0rKGMuZGF0YVR5cGVzWzBdIT09
-IioiPyIsICIrVG4rIjsgcT0wLjAxIjoiIik6Yy5hY2NlcHRzWyIqIl0pO2ZvcihsIGluIGMuaGVh
-ZGVycyl4LnNldFJlcXVlc3RIZWFkZXIobCxjLmhlYWRlcnNbbF0pO2lmKCFjLmJlZm9yZVNlbmR8
-fGMuYmVmb3JlU2VuZC5jYWxsKGgseCxjKSE9PSExJiZFIT09Mil7Uz0iYWJvcnQiO2ZvcihsIGlu
-e3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXhbbF0oY1tsXSk7bz1rbih4bixjLG4seCk7
-aWYoIW8pVCgtMSwiTm8gVHJhbnNwb3J0Iik7ZWxzZXt4LnJlYWR5U3RhdGU9MSxmJiZwLnRyaWdn
-ZXIoImFqYXhTZW5kIixbeCxjXSksYy5hc3luYyYmYy50aW1lb3V0PjAmJih1PXNldFRpbWVvdXQo
-ZnVuY3Rpb24oKXt4LmFib3J0KCJ0aW1lb3V0Iil9LGMudGltZW91dCkpO3RyeXtFPTEsby5zZW5k
-KGIsVCl9Y2F0Y2goayl7aWYoIShFPDIpKXRocm93IGs7VCgtMSxrKX19cmV0dXJuIHh9cmV0dXJu
-IHguYWJvcnQoKX0sYWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgTW49W10s
-X249L1w/LyxEbj0vKD0pXD8oPz0mfCQpfFw/XD8vLFBuPXYubm93KCk7di5hamF4U2V0dXAoe2pz
-b25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBlPU1uLnBvcCgpfHx2
-LmV4cGFuZG8rIl8iK1BuKys7cmV0dXJuIHRoaXNbZV09ITAsZX19KSx2LmFqYXhQcmVmaWx0ZXIo
-Impzb24ganNvbnAiLGZ1bmN0aW9uKG4scixpKXt2YXIgcyxvLHUsYT1uLmRhdGEsZj1uLnVybCxs
-PW4uanNvbnAhPT0hMSxjPWwmJkRuLnRlc3QoZiksaD1sJiYhYyYmdHlwZW9mIGE9PSJzdHJpbmci
-JiYhKG4uY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVy
-bGVuY29kZWQiKSYmRG4udGVzdChhKTtpZihuLmRhdGFUeXBlc1swXT09PSJqc29ucCJ8fGN8fGgp
-cmV0dXJuIHM9bi5qc29ucENhbGxiYWNrPXYuaXNGdW5jdGlvbihuLmpzb25wQ2FsbGJhY2spP24u
-anNvbnBDYWxsYmFjaygpOm4uanNvbnBDYWxsYmFjayxvPWVbc10sYz9uLnVybD1mLnJlcGxhY2Uo
-RG4sIiQxIitzKTpoP24uZGF0YT1hLnJlcGxhY2UoRG4sIiQxIitzKTpsJiYobi51cmwrPShfbi50
-ZXN0KGYpPyImIjoiPyIpK24uanNvbnArIj0iK3MpLG4uY29udmVydGVyc1sic2NyaXB0IGpzb24i
-XT1mdW5jdGlvbigpe3JldHVybiB1fHx2LmVycm9yKHMrIiB3YXMgbm90IGNhbGxlZCIpLHVbMF19
-LG4uZGF0YVR5cGVzWzBdPSJqc29uIixlW3NdPWZ1bmN0aW9uKCl7dT1hcmd1bWVudHN9LGkuYWx3
-YXlzKGZ1bmN0aW9uKCl7ZVtzXT1vLG5bc10mJihuLmpzb25wQ2FsbGJhY2s9ci5qc29ucENhbGxi
-YWNrLE1uLnB1c2gocykpLHUmJnYuaXNGdW5jdGlvbihvKSYmbyh1WzBdKSx1PW89dH0pLCJzY3Jp
-cHQifSksdi5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBs
-aWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94
-LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9qYXZhc2NyaXB0fGVjbWFzY3JpcHQvfSxj
-b252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGUpe3JldHVybiB2Lmdsb2JhbEV2YWwo
-ZSksZX19fSksdi5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2UuY2FjaGU9PT10
-JiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIixlLmdsb2JhbD0hMSl9
-KSx2LmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oZSl7aWYoZS5jcm9zc0RvbWFpbil7
-dmFyIG4scj1pLmhlYWR8fGkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8aS5kb2N1
-bWVudEVsZW1lbnQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24ocyxvKXtuPWkuY3JlYXRlRWxlbWVudCgi
-c2NyaXB0Iiksbi5hc3luYz0iYXN5bmMiLGUuc2NyaXB0Q2hhcnNldCYmKG4uY2hhcnNldD1lLnNj
-cmlwdENoYXJzZXQpLG4uc3JjPWUudXJsLG4ub25sb2FkPW4ub25yZWFkeXN0YXRlY2hhbmdlPWZ1
-bmN0aW9uKGUsaSl7aWYoaXx8IW4ucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChu
-LnJlYWR5U3RhdGUpKW4ub25sb2FkPW4ub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsciYmbi5wYXJl
-bnROb2RlJiZyLnJlbW92ZUNoaWxkKG4pLG49dCxpfHxvKDIwMCwic3VjY2VzcyIpfSxyLmluc2Vy
-dEJlZm9yZShuLHIuZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbi5vbmxvYWQoMCwx
-KX19fX0pO3ZhciBIbixCbj1lLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4g
-SG4pSG5bZV0oMCwxKX06ITEsam49MDt2LmFqYXhTZXR0aW5ncy54aHI9ZS5BY3RpdmVYT2JqZWN0
-P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmRm4oKXx8SW4oKX06Rm4sZnVuY3Rpb24o
-ZSl7di5leHRlbmQodi5zdXBwb3J0LHthamF4OiEhZSxjb3JzOiEhZSYmIndpdGhDcmVkZW50aWFs
-cyJpbiBlfSl9KHYuYWpheFNldHRpbmdzLnhocigpKSx2LnN1cHBvcnQuYWpheCYmdi5hamF4VHJh
-bnNwb3J0KGZ1bmN0aW9uKG4pe2lmKCFuLmNyb3NzRG9tYWlufHx2LnN1cHBvcnQuY29ycyl7dmFy
-IHI7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oaSxzKXt2YXIgbyx1LGE9bi54aHIoKTtuLnVzZXJuYW1l
-P2Eub3BlbihuLnR5cGUsbi51cmwsbi5hc3luYyxuLnVzZXJuYW1lLG4ucGFzc3dvcmQpOmEub3Bl
-bihuLnR5cGUsbi51cmwsbi5hc3luYyk7aWYobi54aHJGaWVsZHMpZm9yKHUgaW4gbi54aHJGaWVs
-ZHMpYVt1XT1uLnhockZpZWxkc1t1XTtuLm1pbWVUeXBlJiZhLm92ZXJyaWRlTWltZVR5cGUmJmEu
-b3ZlcnJpZGVNaW1lVHlwZShuLm1pbWVUeXBlKSwhbi5jcm9zc0RvbWFpbiYmIWlbIlgtUmVxdWVz
-dGVkLVdpdGgiXSYmKGlbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTt0cnl7
-Zm9yKHUgaW4gaSlhLnNldFJlcXVlc3RIZWFkZXIodSxpW3VdKX1jYXRjaChmKXt9YS5zZW5kKG4u
-aGFzQ29udGVudCYmbi5kYXRhfHxudWxsKSxyPWZ1bmN0aW9uKGUsaSl7dmFyIHUsZixsLGMsaDt0
-cnl7aWYociYmKGl8fGEucmVhZHlTdGF0ZT09PTQpKXtyPXQsbyYmKGEub25yZWFkeXN0YXRlY2hh
-bmdlPXYubm9vcCxCbiYmZGVsZXRlIEhuW29dKTtpZihpKWEucmVhZHlTdGF0ZSE9PTQmJmEuYWJv
-cnQoKTtlbHNle3U9YS5zdGF0dXMsbD1hLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLGM9e30saD1h
-LnJlc3BvbnNlWE1MLGgmJmguZG9jdW1lbnRFbGVtZW50JiYoYy54bWw9aCk7dHJ5e2MudGV4dD1h
-LnJlc3BvbnNlVGV4dH1jYXRjaChwKXt9dHJ5e2Y9YS5zdGF0dXNUZXh0fWNhdGNoKHApe2Y9IiJ9
-IXUmJm4uaXNMb2NhbCYmIW4uY3Jvc3NEb21haW4/dT1jLnRleHQ/MjAwOjQwNDp1PT09MTIyMyYm
-KHU9MjA0KX19fWNhdGNoKGQpe2l8fHMoLTEsZCl9YyYmcyh1LGYsYyxsKX0sbi5hc3luYz9hLnJl
-YWR5U3RhdGU9PT00P3NldFRpbWVvdXQociwwKToobz0rK2puLEJuJiYoSG58fChIbj17fSx2KGUp
-LnVubG9hZChCbikpLEhuW29dPXIpLGEub25yZWFkeXN0YXRlY2hhbmdlPXIpOnIoKX0sYWJvcnQ6
-ZnVuY3Rpb24oKXtyJiZyKDAsMSl9fX19KTt2YXIgcW4sUm4sVW49L14oPzp0b2dnbGV8c2hvd3xo
-aWRlKSQvLHpuPW5ldyBSZWdFeHAoIl4oPzooWy0rXSk9fCkoIittKyIpKFthLXolXSopJCIsImki
-KSxXbj0vcXVldWVIb29rcyQvLFhuPVtHbl0sVm49eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbixy
-LGk9dGhpcy5jcmVhdGVUd2VlbihlLHQpLHM9em4uZXhlYyh0KSxvPWkuY3VyKCksdT0rb3x8MCxh
-PTEsZj0yMDtpZihzKXtuPStzWzJdLHI9c1szXXx8KHYuY3NzTnVtYmVyW2VdPyIiOiJweCIpO2lm
-KHIhPT0icHgiJiZ1KXt1PXYuY3NzKGkuZWxlbSxlLCEwKXx8bnx8MTtkbyBhPWF8fCIuNSIsdS89
-YSx2LnN0eWxlKGkuZWxlbSxlLHUrcik7d2hpbGUoYSE9PShhPWkuY3VyKCkvbykmJmEhPT0xJiYt
-LWYpfWkudW5pdD1yLGkuc3RhcnQ9dSxpLmVuZD1zWzFdP3UrKHNbMV0rMSkqbjpufXJldHVybiBp
-fV19O3YuQW5pbWF0aW9uPXYuZXh0ZW5kKEtuLHt0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7di5pc0Z1
-bmN0aW9uKGUpPyh0PWUsZT1bIioiXSk6ZT1lLnNwbGl0KCIgIik7dmFyIG4scj0wLGk9ZS5sZW5n
-dGg7Zm9yKDtyPGk7cisrKW49ZVtyXSxWbltuXT1WbltuXXx8W10sVm5bbl0udW5zaGlmdCh0KX0s
-cHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9Ybi51bnNoaWZ0KGUpOlhuLnB1c2goZSl9fSksdi5U
-d2Vlbj1ZbixZbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlluLGluaXQ6ZnVuY3Rpb24oZSx0LG4s
-cixpLHMpe3RoaXMuZWxlbT1lLHRoaXMucHJvcD1uLHRoaXMuZWFzaW5nPWl8fCJzd2luZyIsdGhp
-cy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhp
-cy51bml0PXN8fCh2LmNzc051bWJlcltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9
-WW4ucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOlluLnBy
-b3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPVluLnBy
-b3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9
-dD12LmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhp
-cy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz10PWUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMu
-c3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAu
-Y2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6WW4ucHJv
-cEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sWW4ucHJvdG90eXBlLmluaXQucHJvdG90
-eXBlPVluLnByb3RvdHlwZSxZbi5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7
-dmFyIHQ7cmV0dXJuIGUuZWxlbVtlLnByb3BdPT1udWxsfHwhIWUuZWxlbS5zdHlsZSYmZS5lbGVt
-LnN0eWxlW2UucHJvcF0hPW51bGw/KHQ9di5jc3MoZS5lbGVtLGUucHJvcCwhMSwiIiksIXR8fHQ9
-PT0iYXV0byI/MDp0KTplLmVsZW1bZS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGUpe3YuZnguc3RlcFtl
-LnByb3BdP3YuZnguc3RlcFtlLnByb3BdKGUpOmUuZWxlbS5zdHlsZSYmKGUuZWxlbS5zdHlsZVt2
-LmNzc1Byb3BzW2UucHJvcF1dIT1udWxsfHx2LmNzc0hvb2tzW2UucHJvcF0pP3Yuc3R5bGUoZS5l
-bGVtLGUucHJvcCxlLm5vdytlLnVuaXQpOmUuZWxlbVtlLnByb3BdPWUubm93fX19LFluLnByb3BI
-b29rcy5zY3JvbGxUb3A9WW4ucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtl
-LmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cp
-fX0sdi5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXYu
-Zm5bdF07di5mblt0XT1mdW5jdGlvbihyLGkscyl7cmV0dXJuIHI9PW51bGx8fHR5cGVvZiByPT0i
-Ym9vbGVhbiJ8fCFlJiZ2LmlzRnVuY3Rpb24ocikmJnYuaXNGdW5jdGlvbihpKT9uLmFwcGx5KHRo
-aXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoWm4odCwhMCkscixpLHMpfX0pLHYuZm4uZXh0ZW5k
-KHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKEd0KS5jc3MoIm9w
-YWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0
-ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT12LmlzRW1wdHlPYmplY3QoZSkscz12LnNwZWVkKHQs
-bixyKSxvPWZ1bmN0aW9uKCl7dmFyIHQ9S24odGhpcyx2LmV4dGVuZCh7fSxlKSxzKTtpJiZ0LnN0
-b3AoITApfTtyZXR1cm4gaXx8cy5xdWV1ZT09PSExP3RoaXMuZWFjaChvKTp0aGlzLnF1ZXVlKHMu
-cXVldWUsbyl9LHN0b3A6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPWZ1bmN0aW9uKGUpe3ZhciB0PWUu
-c3RvcDtkZWxldGUgZS5zdG9wLHQocil9O3JldHVybiB0eXBlb2YgZSE9InN0cmluZyImJihyPW4s
-bj1lLGU9dCksbiYmZSE9PSExJiZ0aGlzLnF1ZXVlKGV8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5j
-dGlvbigpe3ZhciB0PSEwLG49ZSE9bnVsbCYmZSsicXVldWVIb29rcyIscz12LnRpbWVycyxvPXYu
-X2RhdGEodGhpcyk7aWYobilvW25dJiZvW25dLnN0b3AmJmkob1tuXSk7ZWxzZSBmb3IobiBpbiBv
-KW9bbl0mJm9bbl0uc3RvcCYmV24udGVzdChuKSYmaShvW25dKTtmb3Iobj1zLmxlbmd0aDtuLS07
-KXNbbl0uZWxlbT09PXRoaXMmJihlPT1udWxsfHxzW25dLnF1ZXVlPT09ZSkmJihzW25dLmFuaW0u
-c3RvcChyKSx0PSExLHMuc3BsaWNlKG4sMSkpOyh0fHwhcikmJnYuZGVxdWV1ZSh0aGlzLGUpfSl9
-fSksdi5lYWNoKHtzbGlkZURvd246Wm4oInNob3ciKSxzbGlkZVVwOlpuKCJoaWRlIiksc2xpZGVU
-b2dnbGU6Wm4oInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNp
-dHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oZSx0KXt2
-LmZuW2VdPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdGhpcy5hbmltYXRlKHQsZSxuLHIpfX0pLHYu
-c3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJnR5cGVvZiBlPT0ib2JqZWN0Ij92LmV4dGVu
-ZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fHYuaXNGdW5jdGlvbihlKSYmZSxkdXJhdGlvbjpl
-LGVhc2luZzpuJiZ0fHx0JiYhdi5pc0Z1bmN0aW9uKHQpJiZ0fTtyLmR1cmF0aW9uPXYuZngub2Zm
-PzA6dHlwZW9mIHIuZHVyYXRpb249PSJudW1iZXIiP3IuZHVyYXRpb246ci5kdXJhdGlvbiBpbiB2
-LmZ4LnNwZWVkcz92LmZ4LnNwZWVkc1tyLmR1cmF0aW9uXTp2LmZ4LnNwZWVkcy5fZGVmYXVsdDtp
-ZihyLnF1ZXVlPT1udWxsfHxyLnF1ZXVlPT09ITApci5xdWV1ZT0iZngiO3JldHVybiByLm9sZD1y
-LmNvbXBsZXRlLHIuY29tcGxldGU9ZnVuY3Rpb24oKXt2LmlzRnVuY3Rpb24oci5vbGQpJiZyLm9s
-ZC5jYWxsKHRoaXMpLHIucXVldWUmJnYuZGVxdWV1ZSh0aGlzLHIucXVldWUpfSxyfSx2LmVhc2lu
-Zz17bGluZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihlKXtyZXR1cm4u
-NS1NYXRoLmNvcyhlKk1hdGguUEkpLzJ9fSx2LnRpbWVycz1bXSx2LmZ4PVluLnByb3RvdHlwZS5p
-bml0LHYuZngudGljaz1mdW5jdGlvbigpe3ZhciBlLG49di50aW1lcnMscj0wO3FuPXYubm93KCk7
-Zm9yKDtyPG4ubGVuZ3RoO3IrKyllPW5bcl0sIWUoKSYmbltyXT09PWUmJm4uc3BsaWNlKHItLSwx
-KTtuLmxlbmd0aHx8di5meC5zdG9wKCkscW49dH0sdi5meC50aW1lcj1mdW5jdGlvbihlKXtlKCkm
-JnYudGltZXJzLnB1c2goZSkmJiFSbiYmKFJuPXNldEludGVydmFsKHYuZngudGljayx2LmZ4Lmlu
-dGVydmFsKSl9LHYuZnguaW50ZXJ2YWw9MTMsdi5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRl
-cnZhbChSbiksUm49bnVsbH0sdi5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0
-OjQwMH0sdi5meC5zdGVwPXt9LHYuZXhwciYmdi5leHByLmZpbHRlcnMmJih2LmV4cHIuZmlsdGVy
-cy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4gdi5ncmVwKHYudGltZXJzLGZ1bmN0aW9uKHQp
-e3JldHVybiBlPT09dC5lbGVtfSkubGVuZ3RofSk7dmFyIGVyPS9eKD86Ym9keXxodG1sKSQvaTt2
-LmZuLm9mZnNldD1mdW5jdGlvbihlKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlPT09dD90
-aGlzOnRoaXMuZWFjaChmdW5jdGlvbih0KXt2Lm9mZnNldC5zZXRPZmZzZXQodGhpcyxlLHQpfSk7
-dmFyIG4scixpLHMsbyx1LGEsZj17dG9wOjAsbGVmdDowfSxsPXRoaXNbMF0sYz1sJiZsLm93bmVy
-RG9jdW1lbnQ7aWYoIWMpcmV0dXJuO3JldHVybihyPWMuYm9keSk9PT1sP3Yub2Zmc2V0LmJvZHlP
-ZmZzZXQobCk6KG49Yy5kb2N1bWVudEVsZW1lbnQsdi5jb250YWlucyhuLGwpPyh0eXBlb2YgbC5n
-ZXRCb3VuZGluZ0NsaWVudFJlY3QhPSJ1bmRlZmluZWQiJiYoZj1sLmdldEJvdW5kaW5nQ2xpZW50
-UmVjdCgpKSxpPXRyKGMpLHM9bi5jbGllbnRUb3B8fHIuY2xpZW50VG9wfHwwLG89bi5jbGllbnRM
-ZWZ0fHxyLmNsaWVudExlZnR8fDAsdT1pLnBhZ2VZT2Zmc2V0fHxuLnNjcm9sbFRvcCxhPWkucGFn
-ZVhPZmZzZXR8fG4uc2Nyb2xsTGVmdCx7dG9wOmYudG9wK3UtcyxsZWZ0OmYubGVmdCthLW99KTpm
-KX0sdi5vZmZzZXQ9e2JvZHlPZmZzZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vZmZzZXRUb3Asbj1l
-Lm9mZnNldExlZnQ7cmV0dXJuIHYuc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9m
-ZnNldCYmKHQrPXBhcnNlRmxvYXQodi5jc3MoZSwibWFyZ2luVG9wIikpfHwwLG4rPXBhcnNlRmxv
-YXQodi5jc3MoZSwibWFyZ2luTGVmdCIpKXx8MCkse3RvcDp0LGxlZnQ6bn19LHNldE9mZnNldDpm
-dW5jdGlvbihlLHQsbil7dmFyIHI9di5jc3MoZSwicG9zaXRpb24iKTtyPT09InN0YXRpYyImJihl
-LnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBpPXYoZSkscz1pLm9mZnNldCgpLG89di5j
-c3MoZSwidG9wIiksdT12LmNzcyhlLCJsZWZ0IiksYT0ocj09PSJhYnNvbHV0ZSJ8fHI9PT0iZml4
-ZWQiKSYmdi5pbkFycmF5KCJhdXRvIixbbyx1XSk+LTEsZj17fSxsPXt9LGMsaDthPyhsPWkucG9z
-aXRpb24oKSxjPWwudG9wLGg9bC5sZWZ0KTooYz1wYXJzZUZsb2F0KG8pfHwwLGg9cGFyc2VGbG9h
-dCh1KXx8MCksdi5pc0Z1bmN0aW9uKHQpJiYodD10LmNhbGwoZSxuLHMpKSx0LnRvcCE9bnVsbCYm
-KGYudG9wPXQudG9wLXMudG9wK2MpLHQubGVmdCE9bnVsbCYmKGYubGVmdD10LmxlZnQtcy5sZWZ0
-K2gpLCJ1c2luZyJpbiB0P3QudXNpbmcuY2FsbChlLGYpOmkuY3NzKGYpfX0sdi5mbi5leHRlbmQo
-e3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuO3ZhciBlPXRoaXNbMF0sdD10
-aGlzLm9mZnNldFBhcmVudCgpLG49dGhpcy5vZmZzZXQoKSxyPWVyLnRlc3QodFswXS5ub2RlTmFt
-ZSk/e3RvcDowLGxlZnQ6MH06dC5vZmZzZXQoKTtyZXR1cm4gbi50b3AtPXBhcnNlRmxvYXQodi5j
-c3MoZSwibWFyZ2luVG9wIikpfHwwLG4ubGVmdC09cGFyc2VGbG9hdCh2LmNzcyhlLCJtYXJnaW5M
-ZWZ0IikpfHwwLHIudG9wKz1wYXJzZUZsb2F0KHYuY3NzKHRbMF0sImJvcmRlclRvcFdpZHRoIikp
-fHwwLHIubGVmdCs9cGFyc2VGbG9hdCh2LmNzcyh0WzBdLCJib3JkZXJMZWZ0V2lkdGgiKSl8fDAs
-e3RvcDpuLnRvcC1yLnRvcCxsZWZ0Om4ubGVmdC1yLmxlZnR9fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rp
-b24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9mZnNldFBhcmVudHx8
-aS5ib2R5O3doaWxlKGUmJiFlci50ZXN0KGUubm9kZU5hbWUpJiZ2LmNzcyhlLCJwb3NpdGlvbiIp
-PT09InN0YXRpYyIpZT1lLm9mZnNldFBhcmVudDtyZXR1cm4gZXx8aS5ib2R5fSl9fSksdi5lYWNo
-KHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0
-aW9uKGUsbil7dmFyIHI9L1kvLnRlc3Qobik7di5mbltlXT1mdW5jdGlvbihpKXtyZXR1cm4gdi5h
-Y2Nlc3ModGhpcyxmdW5jdGlvbihlLGkscyl7dmFyIG89dHIoZSk7aWYocz09PXQpcmV0dXJuIG8/
-biBpbiBvP29bbl06by5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbaV06ZVtpXTtvP28uc2Nyb2xs
-VG8ocj92KG8pLnNjcm9sbExlZnQoKTpzLHI/czp2KG8pLnNjcm9sbFRvcCgpKTplW2ldPXN9LGUs
-aSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pLHYuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRo
-OiJ3aWR0aCJ9LGZ1bmN0aW9uKGUsbil7di5lYWNoKHtwYWRkaW5nOiJpbm5lciIrZSxjb250ZW50
-Om4sIiI6Im91dGVyIitlfSxmdW5jdGlvbihyLGkpe3YuZm5baV09ZnVuY3Rpb24oaSxzKXt2YXIg
-bz1hcmd1bWVudHMubGVuZ3RoJiYocnx8dHlwZW9mIGkhPSJib29sZWFuIiksdT1yfHwoaT09PSEw
-fHxzPT09ITA/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiB2LmFjY2Vzcyh0aGlzLGZ1bmN0aW9u
-KG4scixpKXt2YXIgcztyZXR1cm4gdi5pc1dpbmRvdyhuKT9uLmRvY3VtZW50LmRvY3VtZW50RWxl
-bWVudFsiY2xpZW50IitlXTpuLm5vZGVUeXBlPT09OT8ocz1uLmRvY3VtZW50RWxlbWVudCxNYXRo
-Lm1heChuLmJvZHlbInNjcm9sbCIrZV0sc1sic2Nyb2xsIitlXSxuLmJvZHlbIm9mZnNldCIrZV0s
-c1sib2Zmc2V0IitlXSxzWyJjbGllbnQiK2VdKSk6aT09PXQ/di5jc3MobixyLGksdSk6di5zdHls
-ZShuLHIsaSx1KX0sbixvP2k6dCxvLG51bGwpfX0pfSksZS5qUXVlcnk9ZS4kPXYsdHlwZW9mIGRl
-ZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCYmZGVmaW5lLmFtZC5qUXVlcnkmJmRlZmluZSgi
-anF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiB2fSl9KSh3aW5kb3cpOw==
-`
+ GAME_OF_LIFE_INDEX_HTML = `H4sIAAAJbogA/4xU32+bMBB+719xY5EgGoJ22vbQkrx009Zpaqs2k7anyYULcWpsio9urMr/PoOBQJJWeyGO7+77vvvl6NXHq/PFz+tPsKJMzI8i+wMQrZAl9cEciZPA+bmSv1nlavjMMgS1hG98iVFojdZRcHkPVOU4cwj/UBhr7UCBYuZoqgTqFSI5sCpwOXNCTYx4HEpVZEzwvxg03mELpeOC5zQEW7NHZm8d0EW8RVg/lFhUQcZlsNbOPAqt1/8AWR+AuCxuDRjCDJ42Z9vLiyw1V45zdtTeLUsZE1cScpWXwkRcSE6ciSbam8JT6wcwCVKkr7dXl57bCEXXN9g+KHndht6gzpXUOO0IN3ssqVqoS6PZwjcwY45caRoQ1HyBpoLLlC8r70mfQmMyvLIUwoe300MKfHDXWkn3BSW5YFXd+FGOY3ldEXsUAI204BmqkrwOwIf3x8cvEO2r8xJGzAdqiUrtw/rhx5ebcSWMFWXSi/Chjgr0QEzfz8bCt4ZHVsCkqZO1Tzz3dfP3F89Sd4DAl+D1joFAmdIKIjgZKoFdqMiAAE/qHWgh6yl3pwHLc6N4obwtX6wkMS6xcKcD2s3RHnTAiArPNXtguu7WCZ3yjKUY5jI9u2MaP7zzXXgDKGOV4PebC88mPd2v/MTraj/q7eEB34qyojE3icSCx/cjlGcnAzY7EPVY9BDdjGxFtqfhTkdh9zRFdyqp2jVfnTz3QBmLdUn4Y9OHusiFErrf/uiuJDKjZ5uEuTO/Nd8otNeHvGqhzvzafMdeUWhIOkVF/5h1zDtNdnaCDFaTkNHcvML/AgAA//9ThgD/nQUAAA==`
+ NORMALIZE_CSS = `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`
+ JQUERY_MIN_JS = `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`
)
diff --git a/conway/web_assets/gen.go b/conway/web_assets/gen.go
new file mode 100644
index 0000000..f20306f
--- /dev/null
+++ b/conway/web_assets/gen.go
@@ -0,0 +1,110 @@
+package main
+
+import (
+ "bufio"
+ "bytes"
+ "compress/gzip"
+ "encoding/base64"
+ "errors"
+ "fmt"
+ "io/ioutil"
+ "log"
+ "net/http"
+ "os"
+ "text/template"
+ "time"
+)
+
+var (
+ webAssetsTmpl = template.Must(template.New("web_assets").Parse("" +
+ "package conway\n" +
+ "\n" +
+ "const (\n" +
+ " GAME_OF_LIFE_INDEX_HTML = `{{.IndexHTML}}`\n" +
+ " NORMALIZE_CSS = `{{.NormalizeCSS}}`\n" +
+ " JQUERY_MIN_JS = `{{.JqueryMinJS}}`\n" +
+ ")\n"))
+ normalizeCssUrl = "http://necolas.github.com/normalize.css/2.0.1/normalize.css"
+ jqueryMinJsUrl = "http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"
+)
+
+type webAssetStrings struct {
+ IndexHTML string
+ NormalizeCSS string
+ JqueryMinJS string
+ Now time.Time
+}
+
+func die(err error) {
+ log.Fatal("CRUD:", err)
+}
+
+func toB64(input []byte) string {
+ return base64.StdEncoding.EncodeToString(input)
+}
+
+func toGz(input []byte) []byte {
+ var buf bytes.Buffer
+
+ zwriter := gzip.NewWriter(&buf)
+
+ zbuf := bufio.NewWriter(zwriter)
+
+ toWrite := len(input)
+ for written := 0; written < toWrite; {
+ n, err := zbuf.Write(input[written:])
+ if err != nil {
+ die(err)
+ }
+ written += n
+ }
+
+ zbuf.Flush()
+ zwriter.Close()
+ return buf.Bytes()
+}
+
+func fetchUrl(url string) []byte {
+ resp, err := http.Get(url)
+ if err != nil {
+ die(err)
+ }
+
+ defer resp.Body.Close()
+
+ body, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ die(err)
+ }
+
+ return body
+}
+
+func fetchIndexHtml(indexHtmlPath string) []byte {
+ fd, err := os.Open(indexHtmlPath)
+ if err != nil {
+ die(err)
+ }
+
+ body, err := ioutil.ReadAll(fd)
+ if err != nil {
+ die(err)
+ }
+
+ return body
+}
+
+func main() {
+ if len(os.Args) < 2 {
+ die(errors.New(fmt.Sprintf("Usage: %s ", os.Args[0])))
+ }
+
+ assets := &webAssetStrings{
+ IndexHTML: toB64(toGz(fetchIndexHtml(os.Args[1]))),
+ NormalizeCSS: toB64(toGz(fetchUrl(normalizeCssUrl))),
+ JqueryMinJS: toB64(toGz(fetchUrl(jqueryMinJsUrl))),
+ Now: time.Now(),
+ }
+
+ webAssetsTmpl.Execute(os.Stdout, assets)
+}
diff --git a/conway/web_assets/index.html b/conway/web_assets/index.html
new file mode 100644
index 0000000..7a5e37f
--- /dev/null
+++ b/conway/web_assets/index.html
@@ -0,0 +1,51 @@
+
+
+
+ Conway's Game of Life
+
+
+
+
+
+ Conway's Game of Life
+
+
+
+
+
+
+
+
+