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

+
+ + +
+
+
+
+ +