~evanj/cms

7e0c364e9f63ae00fd6c09ed056d24ae6a402208 — Evan M Jones 5 months ago 96c1eff
WIP(html/css): Refactor of HTML/CSS. Using Bootstrap.
M internal/c/c.go => internal/c/c.go +4 -4
@@ 84,14 84,14 @@ func (c *Controller) SetCookieUser(w http.ResponseWriter, r *http.Request, user 
}

func (c *Controller) String(w http.ResponseWriter, r *http.Request, str string) {
	w.WriteHeader(http.StatusOK)
	w.Header().Add("Content-Type", "text/plain")
	w.WriteHeader(http.StatusOK)
	fmt.Fprintf(w, str)
}

func (c *Controller) Error(w http.ResponseWriter, r *http.Request, code int, str string) {
	w.WriteHeader(code)
	w.Header().Add("Content-Type", "text/plain")
	w.WriteHeader(code)
	fmt.Fprintf(w, str)
}



@@ 106,8 106,8 @@ func (c *Controller) HTML(w http.ResponseWriter, r *http.Request, tmpl *template
			return
		}

		w.WriteHeader(http.StatusOK)
		w.Header().Add("Content-Type", "text/html")
		w.WriteHeader(http.StatusOK)
		io.Copy(w, &buf)
		return
	}


@@ 124,7 124,7 @@ func (c *Controller) JSON(w http.ResponseWriter, r *http.Request, data interface
		return
	}

	w.WriteHeader(http.StatusOK)
	w.Header().Add("Content-Type", "application/json")
	w.WriteHeader(http.StatusOK)
	w.Write(bytes)
}

M internal/s/tmpl/css/main.css => internal/s/tmpl/css/main.css +2 -0
@@ 1,3 1,4 @@
/*
body { 
  margin-left: auto;
  margin-right: auto;


@@ 7,6 8,7 @@ body main {
  margin-left: 10px;
  margin-right: 10px;
}
*/

fieldset {
  display: inline-block;

M internal/s/tmpl/html/_footer.html => internal/s/tmpl/html/_footer.html +41 -3
@@ 1,3 1,41 @@
<footer>
  <center>© 2020 Evan Jones</center>
</footer>
<div class=container>
  <footer class="pt-4 my-md-5 pt-md-5 border-top">
    <div class="row">
      <div class="col-12 col-md">
        <small class="d-block text-muted">Evan Jones</small>
        <small class="d-block mb-3 text-muted">© 2020</small>
      </div>
      <!--
      <div class="col-6 col-md">
        <h5>Features</h5>
        <ul class="list-unstyled text-small">
          <li><a class="text-muted" href="#">Cool stuff</a></li>
          <li><a class="text-muted" href="#">Random feature</a></li>
          <li><a class="text-muted" href="#">Team feature</a></li>
          <li><a class="text-muted" href="#">Stuff for developers</a></li>
          <li><a class="text-muted" href="#">Another one</a></li>
          <li><a class="text-muted" href="#">Last time</a></li>
        </ul>
      </div>
      <div class="col-6 col-md">
        <h5>Resources</h5>
        <ul class="list-unstyled text-small">
          <li><a class="text-muted" href="#">Resource</a></li>
          <li><a class="text-muted" href="#">Resource name</a></li>
          <li><a class="text-muted" href="#">Another resource</a></li>
          <li><a class="text-muted" href="#">Final resource</a></li>
        </ul>
      </div>
      <div class="col-6 col-md">
        <h5>About</h5>
        <ul class="list-unstyled text-small">
          <li><a class="text-muted" href="#">Team</a></li>
          <li><a class="text-muted" href="#">Locations</a></li>
          <li><a class="text-muted" href="#">Privacy</a></li>
          <li><a class="text-muted" href="#">Terms</a></li>
        </ul>
      </div>
      -->
    </div>
  </footer>
</div>

M internal/s/tmpl/html/_head.html => internal/s/tmpl/html/_head.html +2 -1
@@ 1,3 1,4 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="https://favicon.evanjon.es/255/0/0/32/favicon.ico" />
<link rel="icon" type="image/x-icon" href="https://favicon.evanjon.es/0/105/217/32/favicon.ico" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" />

M internal/s/tmpl/html/_header.html => internal/s/tmpl/html/_header.html +34 -21
@@ 1,23 1,36 @@
<header>
  <nav>
    <a href="/">CMS</a>
    <ul>
      {{ if .Space }}
      <li><a href="/">Home</a></li>
      {{ end }}
      {{ if .ContentType }}
      <li><a href="/space/{{ .Space.ID }}">{{ .Space.Name }}</a></li>
      {{ end }}
      {{ if .Hook }}
      <li><a href="/space/{{ .Space.ID }}">{{ .Space.Name }}</a></li>
      {{ end }}
      {{ if .Content }}
      <li><a href="/contenttype/{{ .Space.ID}}/{{ .ContentType.ID }}">{{ .ContentType.Name }}</a></li>
      {{ end }}
      <li><a href="//git.sr.ht/~evanj/cms">Source</a></li>
    </ul>
<header class='bg-primary'>
  <nav class='container navbar navbar-expand-lg navbar-dark'>
    <a class='navbar-brand' href='/'>CMS</a>
    <button class='navbar-toggler' type='button' data-toggle='collapse' data-target='#navbarSupportedContent' aria-controls='navbarSupportedContent' aria-expanded='false' aria-label='Toggle navigation'>
      <span class='navbar-toggler-icon'></span>
    </button>
    <div class='collapse navbar-collapse' id='navbarSupportedContent'>
      <ul class='navbar-nav ml-auto'>
        {{ if .Space }}
        <li class='nav-item'><a class='nav-link' href='/'>Home</a></li>
        {{ end }}
        {{ if .ContentType }}
        <li class='nav-item'><a class='nav-link' href='/space/{{ .Space.ID }}'>{{ .Space.Name }}</a></li>
        {{ end }}
        {{ if .Hook }}
        <li class='nav-item'><a class='nav-link' href='/space/{{ .Space.ID }}'>{{ .Space.Name }}</a></li>
        {{ end }}
        {{ if .Content }}
        <li class='nav-item'><a class='nav-link' href='/contenttype/{{ .Space.ID}}/{{ .ContentType.ID }}'>{{ .ContentType.Name }}</a></li>
        {{ end }}
        <li class='nav-item'><a class='nav-link' href='//git.sr.ht/~evanj/cms'>Source</a></li>
        {{ if and .Space (not .ContentType) }}
          <li class='nav-item'><a data-toggle="modal" data-target="#copyModal" class='nav-link' href='#'>Copy</a></li>
          <li class='nav-item'><a data-toggle="modal" data-target="#deleteModal" class='nav-link' href='#'>Delete</a></li>
        {{ end }}
        {{ if .User }}
          <li class='nav-item'>
            <form method=POST action='/user/logout' enctype='multipart/form-data'>
              <input type=submit class="btn btn-link nav-link" value=Logout />
            </form>
          </li>
        {{ end}}
      </ul>
    </div>
  </nav>
  <!--
  <h1>A <u>minimalist</u> content management infrastructure for <mark>most</mark>.</h1>
  -->
</header>

A internal/s/tmpl/html/_scripts.html => internal/s/tmpl/html/_scripts.html +3 -0
@@ 0,0 1,3 @@
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>

M internal/s/tmpl/html/index.html => internal/s/tmpl/html/index.html +95 -93
@@ 1,111 1,113 @@
<!DOCTYPE html>
<!DOCTYPE html>
<html lang=en>
<head>
  {{ template "html/_head.html" }}
  <title>CMS</title>
</head>
<body class=index style='max-width: 600px;'>
<body class='index bg-light'>
  <style>{{ template "css/main.css" }}</style>
  <main>
    {{ template "html/_header.html" $ }}
    <hr/>
    <div class="pricing-header px-3 py-3 pt-md-5 pb-md-4 mx-auto text-center">
      <h1 class="display-4">CMS</h1>
      <p class="lead">An old-school content management <mark>infrastructure</mark> for most.</p>
    </div>
    <article>
      {{ if .User }}
        <h1>Actions</h1>
        <details>
          <summary>Create a New Space</summary>
          <form method=POST action='/space/new' enctype='multipart/form-data'>
            <br>
            <fieldset>
              <label for='create-name'>Name</label>
              <br>
              <input id='create-name' autofocus required type=text name=name placeholder=name />
              <br>
              <br>
              <label for='create-desc'>Description</label>
              <br>
              <input id='create-desc' required type=text name=desc placeholder=description />
              <br>
              <br>
              <input type=submit value=Create />
            </fieldset>
            <br>
          </form>
        </details>
        <details>
          <summary>Logout</summary>
          <form method=POST action='/user/logout' enctype='multipart/form-data'>
            <br>
            <fieldset>
              <input autofocus type=submit value=Logout />
            </fieldset>
            <br>
          </form>
        </details>
        <br>
        <h2>Your Spaces</h2>
        {{ if .Spaces }}
          <ul>
            {{ range .Spaces }}
            <li><a href="/space/{{ .ID }}">{{ .Name }}</a></li>
            {{ end }}
          </ul>
        {{ else }}
          <p>You haven't created any spaces yet.</p>
        {{ end }}
        <form method=POST action='/space/new' enctype='multipart/form-data'>
          <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
            <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
              <div class="modal-content">
                <div class="modal-header">
                  <h5 class="modal-title" id="exampleModalLabel">Create a new space</h5>
                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                  </button>
                </div>
                <div class="modal-body">
                  <label for="spaceName">Name</label>
                  <input name=name type=text id="spaceName" class="mb-3 form-control" placeholder="Name" required>
                  <label for="spaceDesc">Description</label>
                  <input name=desc type=text id="spaceDesc" class="mb-3 form-control" placeholder="Description" required>
                </div>
                <div class="modal-footer">
                  <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                  <button type="submit" class="btn btn-primary">Go</button>
                </div>
              </div>
            </div>
          </div>
        </form>
        <div class="container">
          <div class='row'>
            <div class='offset-lg-3 col-lg-6'>
              <div class="my-3 p-3 bg-white rounded shadow-sm">
                  <small class="d-block text-right float-right" data-toggle="modal" data-target="#exampleModal">
                    <a href="#">Create a new space</a>
                  </small>
                <h6 class="border-bottom border-gray pb-2 mb-0">Your spaces</h6>
                {{ if .Spaces }}
                  {{ range .Spaces }}
                  <div class="media text-muted pt-3">
                    <a href='/space/{{ .ID }}'  class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray">
                      <strong class="d-block text-gray-dark">{{ .Name }}</strong>
                      {{ .Desc }}
                    </a>
                  </div>
                  {{ end }}
                  <small class="d-block text-right mt-3">
                    <a href="#">Load more</a>
                  </small>
                {{ else }}
                  <div class="mt-3 alert alert-primary" role="alert">
                    You haven't created any spaces yet. 
                  </div>
                {{ end }}
              </div>
            </div>
          </div>
        </div>
      {{ else }}
        <h1>Account</h1>
        <details>
          <summary>Login</summary>
          <form method=POST action='/user/login' enctype='multipart/form-data'>
            <br>
            <fieldset>
              <label for='login-username'>Username</label>
              <br>
              <input id='login-username' autocomplete=on required type=text name=username placeholder=username autofocus />
              <br>
              <br>
              <label for='login-password'>Password</label>
              <br>
              <input id='login-password' autocomplete=on required type=password name=password placeholder=password />
              <br>
              <br>
              <input type=submit value=Login />
            </fieldset>
            <br>
          </form>
        </details>
        <details>
          <summary>Signup</summary>
          <form method=POST action='/user/signup' enctype='multipart/form-data'>
            <br>
            <fieldset>
              <label for='signup-username'>Username</label>
              <br>
              <input id='signup-username' autocomplete=on required type=text name=username placeholder=username autofocus />
              <br>
              <br>
              <label for='signup-password'>Password</label>
              <br>
              <input id='signup-password' autocomplete=on required type=password name=password placeholder=password />
              <br>
              <br>
              <label for='signup-verify'>Verify</label>
              <br>
              <input id='signup-verify' autocomplete=on required type=password name=verify placeholder=verify />
              <br>
              <br>
              <input type=submit value=Signup />
            </fieldset>
            <br>
          </form>
        </details>
        <div class="container">
          <div class='row justify-content-center'>
          <div class="card-deck mb-3 text-center">
            <div class="card mb-4 shadow-sm">
              <div class="card-header">
                <h4 class="my-0 font-weight-normal">Signup</h4>
              </div>
              <div class="card-body">
                <form method=POST action='/user/signup' enctype='multipart/form-data'>
                  <label for="signupInputUsername" class="sr-only">Email address</label>
                  <input name=username type="text" id="signupInputUsername" class="mb-3 form-control" placeholder="Username" required>
                  <label for="signupInputPassword" class="sr-only">Password</label>
                  <input name=password type="password" id="signupInputPassword" class="mb-3 form-control" placeholder="Password" required>
                  <label for="signupInputVerify" class="sr-only">Confirm Password</label>
                  <input name=verify type="password" id="signupInputVerify" class="mb-3 form-control" placeholder="Confirm Password" required>
                  <button class="btn btn-lg btn-primary btn-block" type="submit">Go</button>
                </form>
              </div>
            </div>
            <div class="card mb-4 shadow-sm">
              <div class="card-header">
                <h4 class="my-0 font-weight-normal">Login</h4>
              </div>
              <div class="card-body d-flex">
                <form class='d-flex flex-grow-1 flex-column' method=POST action='/user/login' enctype='multipart/form-data'>
                  <label for="loginInputUsername" class="sr-only">Email address</label>
                  <input name=username type="text" id="loginInputUsername" class="mb-3 form-control" placeholder="Username" required>
                  <label for="loginInputPassword" class="sr-only">Password</label>
                  <input name=password type="password" id="loginInputPassword" class="mb-3 form-control" placeholder="Password" required>
                  <button class="mt-auto btn btn-lg btn-primary btn-block" type="submit">Go</button>
                </form>
              </div>
            </div>
          </div>
          </div>
        </div>
      {{ end }}
    </article>
    <hr/>
    {{ template "html/_footer.html" }}
  </main>
  {{ template "html/_scripts.html" }}
</body>

</html>

M internal/s/tmpl/html/space.html => internal/s/tmpl/html/space.html +171 -113
@@ 1,134 1,192 @@
<!DOCTYPE html>
<html lang=en>

<head>
  {{ template "html/_head.html" }}
  <title>CMS | {{ .Space.Name }}</title>
</head>

<body class=space style='max-width: 600px;'>
<body class='space bg-light'>
  <style>{{ template "css/main.css" }}</style>
  <main>
    {{ template "html/_header.html" $ }}
    <hr/>
    <div class="pricing-header px-3 py-3 pt-md-5 pb-md-4 mx-auto text-center">
      <h1 class="display-4">{{.Space.Name}}</h1>
      <p class="lead">{{.Space.Desc}}</p>
    </div>
    <article>

      <h1>{{ .Space.Name }}</h1>

      <details>
        <summary>Create Content Type</summary>
        <form method=POST action='/contenttype/new' enctype='multipart/form-data'>
          <input required type=hidden name=space value="{{ .Space.ID }}" />
          <br>
          <fieldset>
            <legend>Content type name</legend>
            <label for='create-name'>Name</label>
            <br>
            <input id='create-name' autofocus required type=text name=name placeholder="name" />
          </fieldset>
          <br>
          <fieldset>
          <legend>Fields</legend>
          <div id='first-fieldset'>
            <input readonly="readonly" required type=text name="field_name_1" value="name" />
            <select readonly="readonly" required name="field_type_1">
              <option disabled value>Field Type</option>
              <option selected value="StringSmall">String Small</option>
              <option disabled value="StringBig">String Big</option>
              <option disabled value="InputHTML">HTML</option>
              <option disabled value="InputMarkdown">Markdown</option>
              <option disabled value="File">File</option>
              <option disabled value="Date">Date</option>
              <option disabled value="Reference">Reference</option>
              <option disabled value="ReferenceList">ReferenceList</option>
            </select>
            <input disabled type=button value='Remove Field' />
      <form method=POST action='/contenttype/new' enctype='multipart/form-data'>
        <input required type=hidden name=space value="{{ .Space.ID }}" />
        <div class="modal fade" id="create-contenttype" tabindex="-1" role="dialog" aria-labelledby="Create a new content type modal." aria-hidden="true">
          <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
            <div class="modal-content">
              <div class="modal-header">
                <h5 class="modal-title" id="contenttypeModalLabel">Create a new content type</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                  <span aria-hidden="true">&times;</span>
                </button>
              </div>
              <div class="modal-body">
                <label for="contenttypeName">Name</label>
                <input name=name type=text id="contenttypeName" class="mb-3 form-control" placeholder="Name" required>
                <div id='first-fieldset' class='container-fluid px-0'>
                  <label for="fieldsetFirst">Fields</label>
                  <input id="fieldsetFirst" class="mb-3 form-control" readonly="readonly" required type=text name="field_name_1" value="name" />
                  <div class='form-group row'>
                    <div class='col-6'>
                      <select class="w-100 form-control" readonly="readonly" required name="field_type_1">
                        <option disabled value>Field Type</option>
                        <option selected value="StringSmall">String Small</option>
                        <option disabled value="StringBig">String Big</option>
                        <option disabled value="InputHTML">HTML</option>
                        <option disabled value="InputMarkdown">Markdown</option>
                        <option disabled value="File">File</option>
                        <option disabled value="Date">Date</option>
                        <option disabled value="Reference">Reference</option>
                        <option disabled value="ReferenceList">ReferenceList</option>
                      </select>
                    </div>
                    <div class='col-6'>
                      <input class='w-100 btn btn-primary' disabled type=button value='Remove Field' />
                    </div>
                  </div>
                </div>
                <a href='#' class='btn btn-link' id='add-fieldbtn'>Add Another Field</a>
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                <button type="submit" class="btn btn-primary">Go</button>
              </div>
            </div>
          </div>
          <br>
          <input type=button id='add-fieldbtn' value='Add Another Field' />
          <input type=submit value=Create />
          </fieldset>
          <br>
        </form>
      </details>

      <details>
        <summary>Create Webhook</summary>
        <form method=POST action='/hook/new' enctype='multipart/form-data'>
          <input required type=hidden name=space value="{{ .Space.ID }}" />
          <br>
          <fieldset>
            <label for='webhook-url'>URL</label>
            <br>
            <input id='webhook-url' autofocus required type=url name=url placeholder='Must enter full URL of target' />
            <br>
            <br>
            <input type=submit value=Create />
          </fieldset>
          <br>
        </form>
      </details>

      <details>
        <summary>Copy Space</summary>
        <form method=POST action='/space/copy' enctype='multipart/form-data'>
          <input required type=hidden name=space value="{{ .Space.ID }}" />
          <br>
          <fieldset>
            <label for='create-name'>Name</label>
            <br>
            <input id='create-name' autofocus required type=text name=name placeholder=name />
            <br>
            <br>
            <label for='create-desc'>Description</label>
            <br>
            <input id='create-desc' required type=text name=desc placeholder=description />
            <br>
            <br>
            <input type=submit value=Create />
          </fieldset>
          <br>
        </form>
      </details>
        </div>
      </form>

      <details>
        <summary>Delete {{ .Space.Name }} Space</summary>
        <form method=POST action='/space/delete' enctype='multipart/form-data'>
          <br>
          <fieldset>
            <input required type=hidden name=space value="{{ .Space.ID }}" />
            <input type=submit value=Delete />
          </fieldset>
          <br>
        </form>
      </details>
      <form method=POST action='/hook/new' enctype='multipart/form-data'>
        <input required type=hidden name=space value="{{ .Space.ID }}" />
        <div class="modal fade" id="hookModal" tabindex="-1" role="dialog" aria-labelledby="hookModalLabel" aria-hidden="true">
          <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
            <div class="modal-content">
              <div class="modal-header">
                <h5 class="modal-title" id="hookModalLabel">Create a new hook</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                  <span aria-hidden="true">&times;</span>
                </button>
              </div>
              <div class="modal-body">
                <label for="hookURL">URL</label>
                <input name=url type=url id="hookURL" class="mb-3 form-control" placeholder="Must enter full URL of target" required>
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                <button type="submit" class="btn btn-primary">Go</button>
              </div>
            </div>
          </div>
        </div>
      </form>

      <h2>Browse Content By Type</h2>
      {{ if .ContentTypes }}
        <ul>
          {{ range .ContentTypes }}
            <li><a href='/contenttype/{{ $.Space.ID }}/{{ .ID }}'>{{ .Name }}</a></li>
          {{ end }}
        </ul>
      {{ else }}
        <p>You haven't created any content types yet.</p>
      {{ end }}
      <form method=POST action='/space/copy' enctype='multipart/form-data'>
        <input required type=hidden name=space value="{{ .Space.ID }}" />
        <div class="modal fade" id="copyModal" tabindex="-1" role="dialog" aria-labelledby="copyModalLabel" aria-hidden="true">
          <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
            <div class="modal-content">
              <div class="modal-header">
                <h5 class="modal-title" id="copyModalLabel">Copy {{.Space.Name}}</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                  <span aria-hidden="true">&times;</span>
                </button>
              </div>
              <div class="modal-body">
                <label for="spaceName">Name</label>
                <input name=name type=text id="spaceName" class="mb-3 form-control" placeholder="Name" required>
                <label for="spaceDesc">Description</label>
                <input name=desc type=text id="spaceDesc" class="mb-3 form-control" placeholder="Description" required>
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                <button type="submit" class="btn btn-primary">Go</button>
              </div>
            </div>
          </div>
        </div>
      </form>
      
      <form method=POST action='/space/delete' enctype='multipart/form-data'>
        <input required type=hidden name=space value="{{ .Space.ID }}" />
        <div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="deleteModalLabel" aria-hidden="true">
          <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
            <div class="modal-content">
              <div class="modal-header">
                <h5 class="modal-title" id="deleteModalLabel">Delete {{.Space.Name}}</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                  <span aria-hidden="true">&times;</span>
                </button>
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                <button type="submit" class="btn btn-primary">Go</button>
              </div>
            </div>
          </div>
        </div>
      </form>

      <h2>Browse Webhooks</h2>
      {{ if .Hooks}}
        <ul>
          {{ range .Hooks}}
            <li><a href='/hook/{{ $.Space.ID }}/{{ .ID }}'>{{ .URL }}</a></li>
          {{ end }}
        </ul>
      {{ else }}
        <p>You haven't created any webhooks yet.</p>
      {{ end }}
      <div class="container">
        <div class='row'>
          <div class='col-lg-6'>
            <div class="my-3 p-3 bg-white rounded shadow-sm">
                <small class="d-block text-right float-right" data-toggle="modal" data-target="#create-contenttype">
                  <a href="#">Create a new content type</a>
                </small>
              <h6 class="border-bottom border-gray pb-2 mb-0">Your content types</h6>
              {{ if .ContentTypes }}
                {{ range .ContentTypes }}
                <div class="media text-muted pt-3">
                  <a href='/contenttype/{{ $.Space.ID }}/{{ .ID }}'  class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray">
                    <strong class="d-block text-gray-dark">{{ .Name }}</strong>
                  </a>
                </div>
                {{ end }}
                <small class="d-block text-right mt-3">
                  <a href="#">Load more</a>
                </small>
              {{ else }}
                <div class="mt-3 alert alert-primary" role="alert">
                  You haven't created any content types yet. 
                </div>
              {{ end }}
            </div>
          </div>
          <div class='col-lg-6'>
            <div class="my-3 p-3 bg-white rounded shadow-sm">
                <small class="d-block text-right float-right" data-toggle="modal" data-target="#hookModal">
                  <a href="#">Create a new webhook</a>
                </small>
              <h6 class="border-bottom border-gray pb-2 mb-0">Your webhooks</h6>
              {{ if .ContentTypes }}
                {{ range .Hooks }}
                <div class="media text-muted pt-3">
                  <a href='/hook/{{ $.Space.ID }}/{{ .ID }}'  class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray">
                    <strong class="d-block text-gray-dark">{{ .URL }}</strong>
                  </a>
                </div>
                {{ end }}
                <small class="d-block text-right mt-3">
                  <a href="#">Load more</a>
                </small>
              {{ else }}
                <div class="mt-3 alert alert-primary" role="alert">
                  You haven't created any webhooks yet. 
                </div>
              {{ end }}
            </div>
          </div>
        </div>
      </div>

    </article>
    <hr/>
    {{ template "html/_footer.html" }}
  </main>
  {{ template "html/_scripts.html" }}
  <script>{{ template "js/space.js" }}</script>
</body>


M internal/s/tmpl/js/space.js => internal/s/tmpl/js/space.js +28 -23
@@ 8,22 8,27 @@
    e.stopPropagation()
    var el = document.createElement('div')
    el.innerHTML = `
      <div>
        <input required type=text name="field_name_${i}" placeholder="field name" />
        <select required name="field_type_${i}">
          <option disabled selected value>Field Type</option>
          <option value="StringSmall">String Small</option>
          <option value="StringBig">String Big</option>
          <option value="InputHTML">HTML</option>
          <option value="InputMarkdown">Markdown</option>
          <option value="File">File</option>
          <option value="Date">Date</option>
          <option value="Reference">Reference</option>
          <option value="ReferenceList">ReferenceList</option>
        </select>
        <input type=button id='remove-fieldbtn_${i}' value='Remove Field' />
      <div class='container-fluid px-0'>
        <input class="mb-3 form-control" required type=text name="field_name_${i}" value="name" />
        <div class='form-group row'>
          <div class='col-6'>
            <select class="w-100 form-control" required name="field_type_${i}">
              <option disabled value>Field Type</option>
              <option selected value="StringSmall">String Small</option>
              <option value="StringBig">String Big</option>
              <option value="InputHTML">HTML</option>
              <option value="InputMarkdown">Markdown</option>
              <option value="File">File</option>
              <option value="Date">Date</option>
              <option value="Reference">Reference</option>
              <option value="ReferenceList">ReferenceList</option>
            </select>
          </div>
          <div class='col-6'>
            <input id='remove-fieldbtn_${i}' class='w-100 btn btn-primary' type=button value='Remove Field' />
          </div>
        </div>
      </div>
      <br>
    `
    addFieldBtn.parentNode.insertBefore(el, addFieldBtn)
    var removeFieldBtn = document.getElementById(`remove-fieldbtn_${i}`)


@@ 38,12 43,12 @@

// For update: remove old fields
(function() { 
  var btns = document.querySelectorAll("form div input[type=button]");
  for (var e = 0; e < btns.length; e++) {
    (function(btn) {
      btn.addEventListener("click", function handelClick() { 
        btn.parentElement.parentElement.removeChild(btn.parentElement);
      });
    })(btns[e]);
  }
  // var btns = document.querySelectorAll("form div input[type=button]");
  // for (var e = 0; e < btns.length; e++) {
  //   (function(btn) {
  //     btn.addEventListener("click", function handelClick() { 
  //       btn.parentElement.parentElement.removeChild(btn.parentElement);
  //     });
  //   })(btns[e]);
  // }
})();

M internal/s/tmpl/tmpls_embed.go => internal/s/tmpl/tmpls_embed.go +10 -8
@@ 14,29 14,31 @@ func tostring(in string) string {
func init() {
	tmpls = make(map[string]string)

	tmpls["css/main.css"] = tostring("Ym9keSB7IAogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKYm9keSBtYWluIHsKICBtYXJnaW4tbGVmdDogMTBweDsKICBtYXJnaW4tcmlnaHQ6IDEwcHg7Cn0KCmZpZWxkc2V0IHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi5jb250ZW50dHlwZSBkZXRhaWxzOm50aC1jaGlsZCgyKSBmb3JtIGZpZWxkc2V0LAouY29udGVudCBkZXRhaWxzOm50aC1jaGlsZCgyKSBmb3JtIGZpZWxkc2V0IHsKICBkaXNwbGF5OiBibG9jazsKfQoKZmllbGRzZXQgKyBiciB7IAogIGhlaWdodDogMjBweDsgCiAgY29udGVudDogIiAiOyAKICBkaXNwbGF5OiBibG9jazsgCn0KCmhlYWRlciBuYXYgeyAKICBkaXNwbGF5OiBmbGV4OwogIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgpoZWFkZXIgbmF2IHVsLApoZWFkZXIgbmF2IGxpIHsgCiAgbGlzdC1zdHlsZTogbm9uZTsKfQoKaGVhZGVyIG5hdiBsaSB7IAogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbi1sZWZ0OiAxMHB4Owp9CgoudG94LnRveC10aW55bWNlIHsKICBtaW4taGVpZ2h0OiA2MDBweDsKfQoKLmFhLWRyb3Bkb3duLW1lbnUgewogIGJhY2tncm91bmQ6ICNmMWYxZjE7CiAgd2lkdGg6IGNhbGMoMTAwJSUgLSA0cHgpOwogIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOwogIHBhZGRpbmc6IDcuNXB4IDA7Cn0KCi5hYS1kcm9wZG93bi1tZW51IHAgewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiA3LjVweCAxNXB4OwogIGN1cnNvcjogcG9pbnRlcjsKfQoKLmFhLWRyb3Bkb3duLW1lbnUgcDpob3ZlciB7CiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA1KTsKfQoKc3Bhbi50b3gtc3RhdHVzYmFyX19icmFuZGluZyB7CiAgZGlzcGxheTogbm9uZTsKfQoKc3VtbWFyeSB7CiAgY3Vyc29yOiBwb2ludGVyOwp9Cg==")
	tmpls["css/main.css"] = tostring("LyoKYm9keSB7IAogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKYm9keSBtYWluIHsKICBtYXJnaW4tbGVmdDogMTBweDsKICBtYXJnaW4tcmlnaHQ6IDEwcHg7Cn0KKi8KCmZpZWxkc2V0IHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi5jb250ZW50dHlwZSBkZXRhaWxzOm50aC1jaGlsZCgyKSBmb3JtIGZpZWxkc2V0LAouY29udGVudCBkZXRhaWxzOm50aC1jaGlsZCgyKSBmb3JtIGZpZWxkc2V0IHsKICBkaXNwbGF5OiBibG9jazsKfQoKZmllbGRzZXQgKyBiciB7IAogIGhlaWdodDogMjBweDsgCiAgY29udGVudDogIiAiOyAKICBkaXNwbGF5OiBibG9jazsgCn0KCmhlYWRlciBuYXYgeyAKICBkaXNwbGF5OiBmbGV4OwogIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgpoZWFkZXIgbmF2IHVsLApoZWFkZXIgbmF2IGxpIHsgCiAgbGlzdC1zdHlsZTogbm9uZTsKfQoKaGVhZGVyIG5hdiBsaSB7IAogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbi1sZWZ0OiAxMHB4Owp9CgoudG94LnRveC10aW55bWNlIHsKICBtaW4taGVpZ2h0OiA2MDBweDsKfQoKLmFhLWRyb3Bkb3duLW1lbnUgewogIGJhY2tncm91bmQ6ICNmMWYxZjE7CiAgd2lkdGg6IGNhbGMoMTAwJSUgLSA0cHgpOwogIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOwogIHBhZGRpbmc6IDcuNXB4IDA7Cn0KCi5hYS1kcm9wZG93bi1tZW51IHAgewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiA3LjVweCAxNXB4OwogIGN1cnNvcjogcG9pbnRlcjsKfQoKLmFhLWRyb3Bkb3duLW1lbnUgcDpob3ZlciB7CiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA1KTsKfQoKc3Bhbi50b3gtc3RhdHVzYmFyX19icmFuZGluZyB7CiAgZGlzcGxheTogbm9uZTsKfQoKc3VtbWFyeSB7CiAgY3Vyc29yOiBwb2ludGVyOwp9Cg==")

	tmpls["css/mvp.css"] = tostring("OnJvb3QgewogICAgLS1ib3JkZXItcmFkaXVzOiA1cHg7CiAgICAtLWJveC1zaGFkb3c6IDJweCAycHggMTBweDsKICAgIC0tY29sb3I6ICMxMThiZWU7CiAgICAtLWNvbG9yLWFjY2VudDogIzExOGJlZTBiOwogICAgLS1jb2xvci1iZzogI2ZmZjsKICAgIC0tY29sb3ItYmctc2Vjb25kYXJ5OiAjZTllOWU5OwogICAgLS1jb2xvci1zZWNvbmRhcnk6ICM5MjBkZTk7CiAgICAtLWNvbG9yLXNlY29uZGFyeS1hY2NlbnQ6ICM5MjBkZTkwYjsKICAgIC0tY29sb3Itc2hhZG93OiAjZjRmNGY0OwogICAgLS1jb2xvci10ZXh0OiAjMDAwOwogICAgLS1jb2xvci10ZXh0LXNlY29uZGFyeTogIzk5OTsKICAgIC0taG92ZXItYnJpZ2h0bmVzczogMS4yOwogICAgLS1qdXN0aWZ5LWltcG9ydGFudDogY2VudGVyOwogICAgLS1qdXN0aWZ5LW5vcm1hbDogbGVmdDsKICAgIC0tbGluZS1oZWlnaHQ6IDE1MCU7CiAgICAtLXdpZHRoLWNhcmQ6IDI4NXB4OwogICAgLS13aWR0aC1jYXJkLW1lZGl1bTogNDYwcHg7CiAgICAtLXdpZHRoLWNhcmQtd2lkZTogODAwcHg7CiAgICAtLXdpZHRoLWNvbnRlbnQ6IDEwODBweDsKfQoKLyogTVZQLmNzcyB2MS4wIC0gYnkgQW5keSBCcmV3ZXIgKi8KCi8qIExheW91dCAqLwphcnRpY2xlIGFzaWRlIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXNlY29uZGFyeS1hY2NlbnQpOwogICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1jb2xvci1zZWNvbmRhcnkpOwogICAgcGFkZGluZzogMC4wMXJlbSAwLjhyZW07Cn0KCmJvZHkgewogICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmcpOwogICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpOwogICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCBPeHlnZW4tU2FucywgVWJ1bnR1LCBDYW50YXJlbGwsICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpOwogICAgbWFyZ2luOiAwOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgcGFkZGluZzogMXJlbSAwOwp9Cgpmb290ZXIsCmhlYWRlciwKbWFpbiB7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIG1heC13aWR0aDogdmFyKC0td2lkdGgtY29udGVudCk7CiAgICBwYWRkaW5nOiAycmVtIDFyZW07Cn0KCmhyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJnLXNlY29uZGFyeSk7CiAgICBib3JkZXI6IG5vbmU7CiAgICBoZWlnaHQ6IDFweDsKICAgIG1hcmdpbjogNHJlbSAwOwp9CgpzZWN0aW9uIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHZhcigtLWp1c3RpZnktaW1wb3J0YW50KTsKfQoKc2VjdGlvbiBhc2lkZSB7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1iZy1zZWNvbmRhcnkpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7CiAgICBib3gtc2hhZG93OiB2YXIoLS1ib3gtc2hhZG93KSB2YXIoLS1jb2xvci1zaGFkb3cpOwogICAgbWFyZ2luOiAxcmVtOwogICAgcGFkZGluZzogMS4yNXJlbTsKICAgIHdpZHRoOiB2YXIoLS13aWR0aC1jYXJkKTsKfQoKc2VjdGlvbiBhc2lkZTpob3ZlciB7CiAgICBib3gtc2hhZG93OiB2YXIoLS1ib3gtc2hhZG93KSB2YXIoLS1jb2xvci1iZy1zZWNvbmRhcnkpOwp9CgpzZWN0aW9uIGFzaWRlIGltZyB7CiAgICBtYXgtd2lkdGg6IDEwMCU7Cn0KCi8qIEhlYWRlcnMgKi8KYXJ0aWNsZSBoZWFkZXIsCmRpdiBoZWFkZXIsCm1haW4gaGVhZGVyIHsKICAgIHBhZGRpbmctdG9wOiAwOwp9CgpoZWFkZXIgewogICAgdGV4dC1hbGlnbjogdmFyKC0tanVzdGlmeS1pbXBvcnRhbnQpOwp9CgpoZWFkZXIgYSBiLApoZWFkZXIgYSBlbSwKaGVhZGVyIGEgaSwKaGVhZGVyIGEgc3Ryb25nIHsKICAgIG1hcmdpbi1sZWZ0OiAxcmVtOwogICAgbWFyZ2luLXJpZ2h0OiAxcmVtOwp9CgpoZWFkZXIgbmF2IGltZyB7CiAgICBtYXJnaW46IDFyZW0gMDsKfQoKc2VjdGlvbiBoZWFkZXIgewogICAgcGFkZGluZy10b3A6IDA7CiAgICB3aWR0aDogMTAwJTsKfQoKLyogTmF2ICovCm5hdiB7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZGlzcGxheTogZmxleDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgbWFyZ2luLWJvdHRvbTogN3JlbTsKfQoKbmF2IHVsIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBwYWRkaW5nOiAwOwp9CgpuYXYgdWwgbGkgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbWFyZ2luOiAwIDAuNXJlbTsKfQoKLyogVHlwb2dyYXBoeSAqLwpjb2RlIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIG1hcmdpbjogMCAwLjFyZW07CiAgICBwYWRkaW5nOiAwcmVtIDAuNXJlbTsKfQoKY29kZSwKc2FtcCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7CiAgICB0ZXh0LWFsaWduOiB2YXIoLS1qdXN0aWZ5LW5vcm1hbCk7Cn0KCmgxLApoMiwKaDMsCmg0LApoNSwKaDYgewogICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTsKfQoKbWFyayB7CiAgICBwYWRkaW5nOiAwLjFyZW07Cn0KCm9sIGxpLAp1bCBsaSB7CiAgICBwYWRkaW5nOiAwLjJyZW0gMDsKfQoKcCB7CiAgICBtYXJnaW46IDAuNzVyZW0gMDsKICAgIHBhZGRpbmc6IDA7Cn0KCnNhbXAgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDFyZW0gMDsKICAgIG1heC13aWR0aDogdmFyKC0td2lkdGgtY2FyZC13aWRlKTsKICAgIHBhZGRpbmc6IDFyZW07Cn0KCnNtYWxsIHsKICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7Cn0KCnN1cCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1zZWNvbmRhcnkpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7CiAgICBjb2xvcjogdmFyKC0tY29sb3ItYmcpOwogICAgZm9udC1zaXplOiB4eC1zbWFsbDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgbWFyZ2luOiAwLjJyZW07CiAgICBwYWRkaW5nOiAwLjJyZW0gMC4zcmVtOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdG9wOiAtMnB4Owp9CgovKiBMaW5rcyAqLwphIHsKICAgIGNvbG9yOiB2YXIoLS1jb2xvci1zZWNvbmRhcnkpOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCmE6aG92ZXIgewogICAgZmlsdGVyOiBicmlnaHRuZXNzKHZhcigtLWhvdmVyLWJyaWdodG5lc3MpKTsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgphIGIsCmEgZW0sCmEgaSwKYSBzdHJvbmcsCmJ1dHRvbiB7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIGZvbnQtc2l6ZTogbWVkaXVtOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBtYXJnaW46IDEuNXJlbSAwIDAuNXJlbSAwOwogICAgcGFkZGluZzogMXJlbSAycmVtOwp9CgppbnB1dFt0eXBlPXN1Ym1pdF06aG92ZXIsCmJ1dHRvbjpob3ZlciB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmaWx0ZXI6IGJyaWdodG5lc3ModmFyKC0taG92ZXItYnJpZ2h0bmVzcykpOwp9CgphIGIsCmEgc3Ryb25nLAppbnB1dFt0eXBlPXN1Ym1pdF0sCmJ1dHRvbiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvcik7CiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xvcik7CiAgICBjb2xvcjogdmFyKC0tY29sb3ItYmcpOwp9CgphIGVtLAphIGkgewogICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7CiAgICBjb2xvcjogdmFyKC0tY29sb3IpOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcGFkZGluZzogMXJlbSAycmVtOwp9CgovKiBJbWFnZXMgKi8KZmlndXJlIHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7Cn0KCmZpZ3VyZSBmaWdjYXB0aW9uIHsKICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7Cn0KCi8qIEZvcm1zICovCmZvcm0gewogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItYmctc2Vjb25kYXJ5KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpOwogICAgYm94LXNoYWRvdzogdmFyKC0tYm94LXNoYWRvdykgdmFyKC0tY29sb3Itc2hhZG93KTsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWF4LXdpZHRoOiB2YXIoLS13aWR0aC1jYXJkLXdpZGUpOwogICAgbWluLXdpZHRoOiB2YXIoLS13aWR0aC1jYXJkKTsKICAgIHBhZGRpbmc6IDEuNXJlbTsKICAgIHRleHQtYWxpZ246IHZhcigtLWp1c3RpZnktbm9ybWFsKTsKfQoKZm9ybSBoZWFkZXIgewogICAgbWFyZ2luOiAxLjVyZW0gMDsKICAgIHBhZGRpbmc6IDEuNXJlbSAwOwp9CgppbnB1dCwKbGFiZWwsCnNlbGVjdCwKdGV4dGFyZWEgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLWNhcmQtd2lkZSk7Cn0KCmlucHV0LApzZWxlY3QsCnRleHRhcmVhIHsKICAgIG1hcmdpbi1ib3R0b206IDFyZW07Cn0KCmlucHV0LApzZWxlY3QsCnRleHRhcmVhIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJnLXNlY29uZGFyeSk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTsKICAgIHBhZGRpbmc6IDAuNHJlbSAwLjhyZW07Cn0KCmxhYmVsIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgbWFyZ2luLWJvdHRvbTogMC4ycmVtOwp9CgovKiBUYWJsZXMgKi8KdGFibGUgewogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItYmctc2Vjb25kYXJ5KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpOwogICAgYm9yZGVyLXNwYWNpbmc6IDA7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcGFkZGluZzogMDsKfQoKdGFibGUgdGQsCnRhYmxlIHRoLAp0YWJsZSB0ciB7CiAgICBwYWRkaW5nOiAwLjRyZW0gMC44cmVtOwogICAgdGV4dC1hbGlnbjogdmFyKC0tanVzdGlmeS1pbXBvcnRhbnQpOwp9Cgp0YWJsZSB0aGVhZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvcik7CiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7CiAgICBjb2xvcjogdmFyKC0tY29sb3ItYmcpOwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKfQoKdGFibGUgdGhlYWQgdGg6Zmlyc3QtY2hpbGQgewogICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7Cn0KCnRhYmxlIHRoZWFkIHRoOmxhc3QtY2hpbGQgewogICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpOwp9Cgp0YWJsZSB0aGVhZCB0aDpmaXJzdC1jaGlsZCwKdGFibGUgdHIgdGQ6Zmlyc3QtY2hpbGQgewogICAgdGV4dC1hbGlnbjogdmFyKC0tanVzdGlmeS1ub3JtYWwpOwp9CgovKiBRdW90ZXMgKi8KYmxvY2txdW90ZSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogeC1sYXJnZTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7CiAgICBtYXJnaW46IDFyZW0gYXV0bzsKICAgIG1heC13aWR0aDogdmFyKC0td2lkdGgtY2FyZC1tZWRpdW0pOwogICAgcGFkZGluZzogMS41cmVtIDFyZW07CiAgICB0ZXh0LWFsaWduOiB2YXIoLS1qdXN0aWZ5LWltcG9ydGFudCk7Cn0KCmJsb2NrcXVvdGUgZm9vdGVyIHsKICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSk7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogc21hbGw7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpOwogICAgcGFkZGluZzogMS41cmVtIDA7Cn0KCi8qIEN1c3RvbSBzdHlsZXMgKi8K")

	tmpls["html/_footer.html"] = tostring("PGZvb3Rlcj4KICA8Y2VudGVyPsKpIDIwMjAgRXZhbiBKb25lczwvY2VudGVyPgo8L2Zvb3Rlcj4K")
	tmpls["html/_footer.html"] = tostring("PGRpdiBjbGFzcz1jb250YWluZXI+CiAgPGZvb3RlciBjbGFzcz0icHQtNCBteS1tZC01IHB0LW1kLTUgYm9yZGVyLXRvcCI+CiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8ZGl2IGNsYXNzPSJjb2wtMTIgY29sLW1kIj4KICAgICAgICA8c21hbGwgY2xhc3M9ImQtYmxvY2sgdGV4dC1tdXRlZCI+RXZhbiBKb25lczwvc21hbGw+CiAgICAgICAgPHNtYWxsIGNsYXNzPSJkLWJsb2NrIG1iLTMgdGV4dC1tdXRlZCI+wqkgMjAyMDwvc21hbGw+CiAgICAgIDwvZGl2PgogICAgICA8IS0tCiAgICAgIDxkaXYgY2xhc3M9ImNvbC02IGNvbC1tZCI+CiAgICAgICAgPGg1PkZlYXR1cmVzPC9oNT4KICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQgdGV4dC1zbWFsbCI+CiAgICAgICAgICA8bGk+PGEgY2xhc3M9InRleHQtbXV0ZWQiIGhyZWY9IiMiPkNvb2wgc3R1ZmY8L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBjbGFzcz0idGV4dC1tdXRlZCIgaHJlZj0iIyI+UmFuZG9tIGZlYXR1cmU8L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBjbGFzcz0idGV4dC1tdXRlZCIgaHJlZj0iIyI+VGVhbSBmZWF0dXJlPC9hPjwvbGk+CiAgICAgICAgICA8bGk+PGEgY2xhc3M9InRleHQtbXV0ZWQiIGhyZWY9IiMiPlN0dWZmIGZvciBkZXZlbG9wZXJzPC9hPjwvbGk+CiAgICAgICAgICA8bGk+PGEgY2xhc3M9InRleHQtbXV0ZWQiIGhyZWY9IiMiPkFub3RoZXIgb25lPC9hPjwvbGk+CiAgICAgICAgICA8bGk+PGEgY2xhc3M9InRleHQtbXV0ZWQiIGhyZWY9IiMiPkxhc3QgdGltZTwvYT48L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb2wtNiBjb2wtbWQiPgogICAgICAgIDxoNT5SZXNvdXJjZXM8L2g1PgogICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bnN0eWxlZCB0ZXh0LXNtYWxsIj4KICAgICAgICAgIDxsaT48YSBjbGFzcz0idGV4dC1tdXRlZCIgaHJlZj0iIyI+UmVzb3VyY2U8L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBjbGFzcz0idGV4dC1tdXRlZCIgaHJlZj0iIyI+UmVzb3VyY2UgbmFtZTwvYT48L2xpPgogICAgICAgICAgPGxpPjxhIGNsYXNzPSJ0ZXh0LW11dGVkIiBocmVmPSIjIj5Bbm90aGVyIHJlc291cmNlPC9hPjwvbGk+CiAgICAgICAgICA8bGk+PGEgY2xhc3M9InRleHQtbXV0ZWQiIGhyZWY9IiMiPkZpbmFsIHJlc291cmNlPC9hPjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC02IGNvbC1tZCI+CiAgICAgICAgPGg1PkFib3V0PC9oNT4KICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQgdGV4dC1zbWFsbCI+CiAgICAgICAgICA8bGk+PGEgY2xhc3M9InRleHQtbXV0ZWQiIGhyZWY9IiMiPlRlYW08L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBjbGFzcz0idGV4dC1tdXRlZCIgaHJlZj0iIyI+TG9jYXRpb25zPC9hPjwvbGk+CiAgICAgICAgICA8bGk+PGEgY2xhc3M9InRleHQtbXV0ZWQiIGhyZWY9IiMiPlByaXZhY3k8L2E+PC9saT4KICAgICAgICAgIDxsaT48YSBjbGFzcz0idGV4dC1tdXRlZCIgaHJlZj0iIyI+VGVybXM8L2E+PC9saT4KICAgICAgICA8L3VsPgogICAgICA8L2Rpdj4KICAgICAgLS0+CiAgICA8L2Rpdj4KICA8L2Zvb3Rlcj4KPC9kaXY+Cg==")

	tmpls["html/_head.html"] = tostring("PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgo8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iaHR0cHM6Ly9mYXZpY29uLmV2YW5qb24uZXMvMjU1LzAvMC8zMi9mYXZpY29uLmljbyIgLz4K")
	tmpls["html/_head.html"] = tostring("PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgo8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iaHR0cHM6Ly9mYXZpY29uLmV2YW5qb24uZXMvMC8xMDUvMjE3LzMyL2Zhdmljb24uaWNvIiAvPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vc3RhY2twYXRoLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzQuNS4wL2Nzcy9ib290c3RyYXAubWluLmNzcyIgLz4K")

	tmpls["html/_header.html"] = tostring("PGhlYWRlcj4KICA8bmF2PgogICAgPGEgaHJlZj0iLyI+Q01TPC9hPgogICAgPHVsPgogICAgICB7eyBpZiAuU3BhY2UgfX0KICAgICAgPGxpPjxhIGhyZWY9Ii8iPkhvbWU8L2E+PC9saT4KICAgICAge3sgZW5kIH19CiAgICAgIHt7IGlmIC5Db250ZW50VHlwZSB9fQogICAgICA8bGk+PGEgaHJlZj0iL3NwYWNlL3t7IC5TcGFjZS5JRCB9fSI+e3sgLlNwYWNlLk5hbWUgfX08L2E+PC9saT4KICAgICAge3sgZW5kIH19CiAgICAgIHt7IGlmIC5Ib29rIH19CiAgICAgIDxsaT48YSBocmVmPSIvc3BhY2Uve3sgLlNwYWNlLklEIH19Ij57eyAuU3BhY2UuTmFtZSB9fTwvYT48L2xpPgogICAgICB7eyBlbmQgfX0KICAgICAge3sgaWYgLkNvbnRlbnQgfX0KICAgICAgPGxpPjxhIGhyZWY9Ii9jb250ZW50dHlwZS97eyAuU3BhY2UuSUR9fS97eyAuQ29udGVudFR5cGUuSUQgfX0iPnt7IC5Db250ZW50VHlwZS5OYW1lIH19PC9hPjwvbGk+CiAgICAgIHt7IGVuZCB9fQogICAgICA8bGk+PGEgaHJlZj0iLy9naXQuc3IuaHQvfmV2YW5qL2NtcyI+U291cmNlPC9hPjwvbGk+CiAgICA8L3VsPgogIDwvbmF2PgogIDwhLS0KICA8aDE+QSA8dT5taW5pbWFsaXN0PC91PiBjb250ZW50IG1hbmFnZW1lbnQgaW5mcmFzdHJ1Y3R1cmUgZm9yIDxtYXJrPm1vc3Q8L21hcms+LjwvaDE+CiAgLS0+CjwvaGVhZGVyPgo=")
	tmpls["html/_header.html"] = tostring("PGhlYWRlciBjbGFzcz0nYmctcHJpbWFyeSc+CiAgPG5hdiBjbGFzcz0nY29udGFpbmVyIG5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG5hdmJhci1kYXJrJz4KICAgIDxhIGNsYXNzPSduYXZiYXItYnJhbmQnIGhyZWY9Jy8nPkNNUzwvYT4KICAgIDxidXR0b24gY2xhc3M9J25hdmJhci10b2dnbGVyJyB0eXBlPSdidXR0b24nIGRhdGEtdG9nZ2xlPSdjb2xsYXBzZScgZGF0YS10YXJnZXQ9JyNuYXZiYXJTdXBwb3J0ZWRDb250ZW50JyBhcmlhLWNvbnRyb2xzPSduYXZiYXJTdXBwb3J0ZWRDb250ZW50JyBhcmlhLWV4cGFuZGVkPSdmYWxzZScgYXJpYS1sYWJlbD0nVG9nZ2xlIG5hdmlnYXRpb24nPgogICAgICA8c3BhbiBjbGFzcz0nbmF2YmFyLXRvZ2dsZXItaWNvbic+PC9zcGFuPgogICAgPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSdjb2xsYXBzZSBuYXZiYXItY29sbGFwc2UnIGlkPSduYXZiYXJTdXBwb3J0ZWRDb250ZW50Jz4KICAgICAgPHVsIGNsYXNzPSduYXZiYXItbmF2IG1sLWF1dG8nPgogICAgICAgIHt7IGlmIC5TcGFjZSB9fQogICAgICAgIDxsaSBjbGFzcz0nbmF2LWl0ZW0nPjxhIGNsYXNzPSduYXYtbGluaycgaHJlZj0nLyc+SG9tZTwvYT48L2xpPgogICAgICAgIHt7IGVuZCB9fQogICAgICAgIHt7IGlmIC5Db250ZW50VHlwZSB9fQogICAgICAgIDxsaSBjbGFzcz0nbmF2LWl0ZW0nPjxhIGNsYXNzPSduYXYtbGluaycgaHJlZj0nL3NwYWNlL3t7IC5TcGFjZS5JRCB9fSc+e3sgLlNwYWNlLk5hbWUgfX08L2E+PC9saT4KICAgICAgICB7eyBlbmQgfX0KICAgICAgICB7eyBpZiAuSG9vayB9fQogICAgICAgIDxsaSBjbGFzcz0nbmF2LWl0ZW0nPjxhIGNsYXNzPSduYXYtbGluaycgaHJlZj0nL3NwYWNlL3t7IC5TcGFjZS5JRCB9fSc+e3sgLlNwYWNlLk5hbWUgfX08L2E+PC9saT4KICAgICAgICB7eyBlbmQgfX0KICAgICAgICB7eyBpZiAuQ29udGVudCB9fQogICAgICAgIDxsaSBjbGFzcz0nbmF2LWl0ZW0nPjxhIGNsYXNzPSduYXYtbGluaycgaHJlZj0nL2NvbnRlbnR0eXBlL3t7IC5TcGFjZS5JRH19L3t7IC5Db250ZW50VHlwZS5JRCB9fSc+e3sgLkNvbnRlbnRUeXBlLk5hbWUgfX08L2E+PC9saT4KICAgICAgICB7eyBlbmQgfX0KICAgICAgICA8bGkgY2xhc3M9J25hdi1pdGVtJz48YSBjbGFzcz0nbmF2LWxpbmsnIGhyZWY9Jy8vZ2l0LnNyLmh0L35ldmFuai9jbXMnPlNvdXJjZTwvYT48L2xpPgogICAgICAgIHt7IGlmIGFuZCAuU3BhY2UgKG5vdCAuQ29udGVudFR5cGUpIH19CiAgICAgICAgICA8bGkgY2xhc3M9J25hdi1pdGVtJz48YSBkYXRhLXRvZ2dsZT0ibW9kYWwiIGRhdGEtdGFyZ2V0PSIjY29weU1vZGFsIiBjbGFzcz0nbmF2LWxpbmsnIGhyZWY9JyMnPkNvcHk8L2E+PC9saT4KICAgICAgICAgIDxsaSBjbGFzcz0nbmF2LWl0ZW0nPjxhIGRhdGEtdG9nZ2xlPSJtb2RhbCIgZGF0YS10YXJnZXQ9IiNkZWxldGVNb2RhbCIgY2xhc3M9J25hdi1saW5rJyBocmVmPScjJz5EZWxldGU8L2E+PC9saT4KICAgICAgICB7eyBlbmQgfX0KICAgICAgICB7eyBpZiAuVXNlciB9fQogICAgICAgICAgPGxpIGNsYXNzPSduYXYtaXRlbSc+CiAgICAgICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL3VzZXIvbG9nb3V0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9ImJ0biBidG4tbGluayBuYXYtbGluayIgdmFsdWU9TG9nb3V0IC8+CiAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgIDwvbGk+CiAgICAgICAge3sgZW5kfX0KICAgICAgPC91bD4KICAgIDwvZGl2PgogIDwvbmF2Pgo8L2hlYWRlcj4K")

	tmpls["html/content.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+CjxoZWFkPgogIHt7IHRlbXBsYXRlICJodG1sL19oZWFkLmh0bWwiIH19CiAgPHRpdGxlPkNNUyB8IHt7IC5TcGFjZS5OYW1lIH19IHwge3sgLkNvbnRlbnRUeXBlLk5hbWUgfX0gfCB7eyAoLkNvbnRlbnQuTXVzdFZhbHVlQnlOYW1lICJuYW1lIikuVmFsdWUgfX08L3RpdGxlPgo8L2hlYWQ+Cjxib2R5IGNsYXNzPWNvbnRlbnQgc3R5bGU9J21heC13aWR0aDogODAwcHg7Jz4KICA8c3R5bGU+e3sgdGVtcGxhdGUgImNzcy9tYWluLmNzcyIgfX08L3N0eWxlPgogIDxtYWluPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2hlYWRlci5odG1sIiAkIH19CiAgICA8aHIvPgogICAgPGFydGljbGU+CiAgICAgIDxoMT57eyAuU3BhY2UuTmFtZSB9fSwge3sgLkNvbnRlbnRUeXBlLk5hbWUgfX0sIHt7ICguQ29udGVudC5NdXN0VmFsdWVCeU5hbWUgIm5hbWUiKS5WYWx1ZSB9fTwvaDE+CiAgICAgIDxkZXRhaWxzPgogICAgICAgIDxzdW1tYXJ5PlVwZGF0ZSBDb250ZW50PC9zdW1tYXJ5PgogICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL2NvbnRlbnQvdXBkYXRlJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50dHlwZSB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLklEIH19IiAvPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9Y29udGVudCB2YWx1ZT0ie3sgLkNvbnRlbnQuSUQgfX0iIC8+CgogICAgICAgICAgPGJyPgogICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAge3sgcmFuZ2UgJGluZGV4LCAkaXRlbSA6PSAuQ29udGVudFR5cGUuRmllbGRzIH19CiAgICAgICAgICAgIHt7ICR2YWwgOj0gJC5Db250ZW50Lk11c3RWYWx1ZUJ5TmFtZSAoICRpdGVtLk5hbWUgKSB9fQoKICAgICAgICAgICAge3sgaWYgJHZhbCB9fSAKICAgICAgICAgICAgICB7eyBpZiBlcSAkaW5kZXggMCB9fQogICAgICAgICAgICAgIHt7IGVsc2UgfX0KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIDxsYWJlbCBmb3I9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSI+e3sgJHZhbC5OYW1lIH19PC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CgogICAgICAgICAgICAgIHt7IGlmIGVxICR2YWwuVHlwZSAiU3RyaW5nU21hbGwiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiB2YWx1ZT0ie3sgJHZhbC5WYWx1ZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgcGxhY2Vob2xkZXI9Int7ICR2YWwuTmFtZSB9fSIgLz4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgJHZhbC5UeXBlICJTdHJpbmdCaWciIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBwbGFjZWhvbGRlcj0ie3sgJHZhbC5OYW1lIH19Ij57eyAkdmFsLlZhbHVlIH19PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgJHZhbC5UeXBlICJJbnB1dEhUTUwiIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBjbGFzcz0naW5wdXQtaHRtbCcgdmFsdWU9Int7ICR2YWwuVmFsdWUgfX0iIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIHBsYWNlaG9sZGVyPSJ7eyAkdmFsLk5hbWUgfX0iPnt7ICR2YWwuVmFsdWUgfX08L3RleHRhcmVhPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAkdmFsLlR5cGUgIklucHV0TWFya2Rvd24iIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBjbGFzcz0naW5wdXQtbWFya2Rvd24nIHZhbHVlPSJ7eyAkdmFsLlZhbHVlIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBwbGFjZWhvbGRlcj0ie3sgJHZhbC5OYW1lIH19Ij57eyAkdmFsLlZhbHVlIH19PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgJHZhbC5UeXBlICJGaWxlIiB9fQogICAgICAgICAgICAgICAgPGlucHV0IHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgdmFsdWU9Int7ICR2YWwuVmFsdWUgfX0iIHR5cGU9ZmlsZSBuYW1lPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIG11bHRpcGxlPWZhbHNlIC8+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIHt7IGlmIGVxICR2YWwuVHlwZSAiRGF0ZSIgfX0KICAgICAgICAgICAgICAgIDxpbnB1dCB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIHZhbHVlPSJ7eyAkdmFsLlZhbHVlIH19IiByZXF1aXJlZCB0eXBlPWRhdGUgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBwbGFjZWhvbGRlcj0ie3sgJHZhbC5OYW1lIH19IiAvPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAkdmFsLlR5cGUgIlJlZmVyZW5jZSIgfX0KICAgICAgICAgICAgICAgIDxpbnB1dCB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIGNsYXNzPSdvdXRwdXQtcmVmJyByZXF1aXJlZCB0eXBlPWhpZGRlbiB2YWx1ZT0ie3sgJHZhbC5WYWx1ZSB9fSIgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEfX0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9Int7IGlmICAkdmFsLlJlZk5hbWUgfX17eyAkdmFsLlJlZk5hbWUgfX17eyBlbHNlIH19T3Blbnt7IGVuZH19Ii8+CiAgICAgICAgICAgICAgICA8ZGlhbG9nPgogICAgICAgICAgICAgICAgICA8bWVudT4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGNlbnRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+U2VhcmNoIGZvciBjb250ZW50IHRvIHVzZSBhcyByZWZlcmVuY2UuPC9wPgogICAgICAgICAgICAgICAgICAgICAgPC9jZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2ZvY3VzIGNsYXNzPSdpbnB1dC1jb250ZW50dHlwZScgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCB0eXBlJyAvPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIGNsYXNzPSdpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBjb250ZW50IG5hbWUnIC8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvbWVudT4KICAgICAgICAgICAgICAgIDwvZGlhbG9nPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAkdmFsLlR5cGUgIlJlZmVyZW5jZUxpc3QiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gdmFsdWU9Int7ICR2YWwuVmFsdWUgfX0iIG5hbWU9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgLz4KICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0naW5wdXQtcmVmJyB0eXBlPWJ1dHRvbiB2YWx1ZT0ie3sgaWYgICR2YWwuUmVmTGlzdE5hbWVzIH19e3sgJHZhbC5SZWZMaXN0TmFtZXMgfX17eyBlbHNlIH19T3Blbnt7IGVuZH19Ii8+CiAgICAgICAgICAgICAgICA8ZGlhbG9nPgogICAgICAgICAgICAgICAgICA8bWVudT4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGNlbnRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+U2VhcmNoIGZvciBjb250ZW50IHRvIHVzZSBhcyByZWZlcmVuY2UuPC9wPgogICAgICAgICAgICAgICAgICAgICAgPC9jZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2ZvY3VzIGNsYXNzPSdpbnB1dC1jb250ZW50dHlwZScgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCB0eXBlJyAvPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIGNsYXNzPSdpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBjb250ZW50IG5hbWUnIC8+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9bGVmdCB0eXBlPWJ1dHRvbiB2YWx1ZT1DbGVhciAvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9cmlnaHQgdHlwZT1idXR0b24gdmFsdWU9RG9uZSAvPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvbWVudT4KICAgICAgICAgICAgICAgIDwvZGlhbG9nPgogICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAge3sgZWxzZSB9fQogICAgICAgICAgICAgIHt7IGlmIGVxICRpbmRleCAwIH19CiAgICAgICAgICAgICAge3sgZWxzZSB9fQogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ2YWx1ZV91cGRhdGVfe3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iPnt7IC5OYW1lIH19PC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CgogICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJTdHJpbmdTbWFsbCIgfX0KICAgICAgICAgICAgICAgIDxpbnB1dCB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IC5OYW1lIH19IiAvPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAuVHlwZSAiU3RyaW5nQmlnIiB9fQogICAgICAgICAgICAgICAgPHRleHRhcmVhIHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iID48L3RleHRhcmVhPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAuVHlwZSAiSW5wdXRIVE1MIiB9fQogICAgICAgICAgICAgICAgPHRleHRhcmVhIHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgY2xhc3M9J2lucHV0LWh0bWwnIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IC5OYW1lIH19IiA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIklucHV0TWFya2Rvd24iIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0naW5wdXQtbWFya2Rvd24nIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IC5OYW1lIH19IiA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIkZpbGUiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiByZXF1aXJlZCB0eXBlPWZpbGUgbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIG11bHRpcGxlPWZhbHNlIC8+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJEYXRlIiB9fQogICAgICAgICAgICAgICAgPGlucHV0IHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT1kYXRlIG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJSZWZlcmVuY2UiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgICAgPGRpYWxvZz4KICAgICAgICAgICAgICAgICAgPG1lbnU+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgIDxjZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlNlYXJjaCBmb3IgY29udGVudCB0byB1c2UgYXMgcmVmZXJlbmNlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgIDwvY2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9mb2N1cyBjbGFzcz0naW5wdXQtY29udGVudHR5cGUnIHR5cGU9dGV4dCBwbGFjZWhvbGRlcj0nU2VhcmNoIGJ5IGNvbnRlbnQgdHlwZScgLz4KICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkaXNhYmxlZCBjbGFzcz0naW5wdXQtY29udGVudCcgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCBuYW1lJyAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L21lbnU+CiAgICAgICAgICAgICAgICA8L2RpYWxvZz4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIlJlZmVyZW5jZUxpc3QiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgICAgPGRpYWxvZz4KICAgICAgICAgICAgICAgICAgPG1lbnU+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgIDxjZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlNlYXJjaCBmb3IgY29udGVudCB0byB1c2UgYXMgcmVmZXJlbmNlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgIDwvY2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9mb2N1cyBjbGFzcz0naW5wdXQtY29udGVudHR5cGUnIHR5cGU9dGV4dCBwbGFjZWhvbGRlcj0nU2VhcmNoIGJ5IGNvbnRlbnQgdHlwZScgLz4KICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkaXNhYmxlZCBjbGFzcz0naW5wdXQtY29udGVudCcgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCBuYW1lJyAvPgogICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPWxlZnQgdHlwZT1idXR0b24gdmFsdWU9Q2xlYXIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPXJpZ2h0IHR5cGU9YnV0dG9uIHZhbHVlPURvbmUgLz4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L21lbnU+CiAgICAgICAgICAgICAgICA8L2RpYWxvZz4KICAgICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAge3sgZW5kfX0KCiAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9VXBkYXRlIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kZXRhaWxzPgoKICAgICAgPGRldGFpbHM+CiAgICAgICAgPHN1bW1hcnk+RGVsZXRlIENvbnRlbnQ8L3N1bW1hcnk+CiAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvY29udGVudC9kZWxldGUnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPWNvbnRlbnR0eXBlIHZhbHVlPSJ7eyAuQ29udGVudFR5cGUuSUQgfX0iIC8+CiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50IHZhbHVlPSJ7eyAuQ29udGVudC5JRCB9fSIgLz4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPURlbGV0ZSAvPgogICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgIDxicj4KICAgICAgICA8L2Zvcm0+CiAgICAgIDwvZGV0YWlscz4KCiAgICA8L2FydGljbGU+CiAgICA8aHIvPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2Zvb3Rlci5odG1sIiB9fQogIDwvbWFpbj4KICA8c2NyaXB0IHNyYz0iLy91bnBrZy5jb20vdGlueW1jZUA1LjIuMC90aW55bWNlLm1pbi5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Jy8vdW5wa2cuY29tL2F1dG9jb21wbGV0ZS5qc0AwLjM3LjEvZGlzdC9hdXRvY29tcGxldGUubWluLmpzJz48L3NjcmlwdD4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9jb250ZW50LmpzIiAkIH19PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4K")
	tmpls["html/_scripts.html"] = tostring("PHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0zLjUuMS5zbGltLm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3BvcHBlci5qc0AxLjE2LjAvZGlzdC91bWQvcG9wcGVyLm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJodHRwczovL3N0YWNrcGF0aC5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC80LjUuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4K")

	tmpls["html/content.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+CjxoZWFkPgogIHt7IHRlbXBsYXRlICJodG1sL19oZWFkLmh0bWwiIH19CiAgPHRpdGxlPkNNUyB8IHt7IC5TcGFjZS5OYW1lIH19IHwge3sgLkNvbnRlbnRUeXBlLk5hbWUgfX0gfCB7eyAoLkNvbnRlbnQuTXVzdFZhbHVlQnlOYW1lICJuYW1lIikuVmFsdWUgfX08L3RpdGxlPgo8L2hlYWQ+Cjxib2R5IGNsYXNzPWNvbnRlbnQgc3R5bGU9J21heC13aWR0aDogODAwcHg7Jz4KICA8c3R5bGU+e3sgdGVtcGxhdGUgImNzcy9tYWluLmNzcyIgfX08L3N0eWxlPgogIDxtYWluPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2hlYWRlci5odG1sIiAkIH19CiAgICA8aHIvPgogICAgPGFydGljbGU+CiAgICAgIDxoMT57eyAuU3BhY2UuTmFtZSB9fSwge3sgLkNvbnRlbnRUeXBlLk5hbWUgfX0sIHt7ICguQ29udGVudC5NdXN0VmFsdWVCeU5hbWUgIm5hbWUiKS5WYWx1ZSB9fTwvaDE+CiAgICAgIDxkZXRhaWxzPgogICAgICAgIDxzdW1tYXJ5PlVwZGF0ZSBDb250ZW50PC9zdW1tYXJ5PgogICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL2NvbnRlbnQvdXBkYXRlJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50dHlwZSB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLklEIH19IiAvPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9Y29udGVudCB2YWx1ZT0ie3sgLkNvbnRlbnQuSUQgfX0iIC8+CgogICAgICAgICAgPGJyPgogICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAge3sgcmFuZ2UgJGluZGV4LCAkaXRlbSA6PSAuQ29udGVudFR5cGUuRmllbGRzIH19CiAgICAgICAgICAgIHt7ICR2YWwgOj0gJC5Db250ZW50Lk11c3RWYWx1ZUJ5TmFtZSAoICRpdGVtLk5hbWUgKSB9fQoKICAgICAgICAgICAge3sgaWYgJHZhbCB9fSAKICAgICAgICAgICAgICB7eyBpZiBlcSAkaW5kZXggMCB9fQogICAgICAgICAgICAgIHt7IGVsc2UgfX0KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIDxsYWJlbCBmb3I9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSI+e3sgJHZhbC5OYW1lIH19PC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CgogICAgICAgICAgICAgIHt7IGlmIGVxICR2YWwuVHlwZSAiU3RyaW5nU21hbGwiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiB2YWx1ZT0ie3sgJHZhbC5WYWx1ZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgcGxhY2Vob2xkZXI9Int7ICR2YWwuTmFtZSB9fSIgLz4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgJHZhbC5UeXBlICJTdHJpbmdCaWciIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBwbGFjZWhvbGRlcj0ie3sgJHZhbC5OYW1lIH19Ij57eyAkdmFsLlZhbHVlIH19PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgJHZhbC5UeXBlICJJbnB1dEhUTUwiIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBjbGFzcz0naW5wdXQtaHRtbCcgdmFsdWU9Int7ICR2YWwuVmFsdWUgfX0iIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIHBsYWNlaG9sZGVyPSJ7eyAkdmFsLk5hbWUgfX0iPnt7ICR2YWwuVmFsdWUgfX08L3RleHRhcmVhPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAkdmFsLlR5cGUgIklucHV0TWFya2Rvd24iIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBjbGFzcz0naW5wdXQtbWFya2Rvd24nIHZhbHVlPSJ7eyAkdmFsLlZhbHVlIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBwbGFjZWhvbGRlcj0ie3sgJHZhbC5OYW1lIH19Ij57eyAkdmFsLlZhbHVlIH19PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgJHZhbC5UeXBlICJGaWxlIiB9fQogICAgICAgICAgICAgICAgPGlucHV0IHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgdmFsdWU9Int7ICR2YWwuVmFsdWUgfX0iIHR5cGU9ZmlsZSBuYW1lPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIG11bHRpcGxlPWZhbHNlIC8+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIHt7IGlmIGVxICR2YWwuVHlwZSAiRGF0ZSIgfX0KICAgICAgICAgICAgICAgIDxpbnB1dCB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIHZhbHVlPSJ7eyAkdmFsLlZhbHVlIH19IiByZXF1aXJlZCB0eXBlPWRhdGUgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBwbGFjZWhvbGRlcj0ie3sgJHZhbC5OYW1lIH19IiAvPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAkdmFsLlR5cGUgIlJlZmVyZW5jZSIgfX0KICAgICAgICAgICAgICAgIDxpbnB1dCB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIGNsYXNzPSdvdXRwdXQtcmVmJyByZXF1aXJlZCB0eXBlPWhpZGRlbiB2YWx1ZT0ie3sgJHZhbC5WYWx1ZSB9fSIgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEfX0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9Int7IGlmICAkdmFsLlJlZk5hbWUgfX17eyAkdmFsLlJlZk5hbWUgfX17eyBlbHNlIH19T3Blbnt7IGVuZH19Ii8+CiAgICAgICAgICAgICAgICA8ZGlhbG9nPgogICAgICAgICAgICAgICAgICA8bWVudT4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGNlbnRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+U2VhcmNoIGZvciBjb250ZW50IHRvIHVzZSBhcyByZWZlcmVuY2UuPC9wPgogICAgICAgICAgICAgICAgICAgICAgPC9jZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2ZvY3VzIGNsYXNzPSdpbnB1dC1jb250ZW50dHlwZScgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCB0eXBlJyAvPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIGNsYXNzPSdpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBjb250ZW50IG5hbWUnIC8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvbWVudT4KICAgICAgICAgICAgICAgIDwvZGlhbG9nPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAkdmFsLlR5cGUgIlJlZmVyZW5jZUxpc3QiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gdmFsdWU9Int7ICR2YWwuVmFsdWUgfX0iIG5hbWU9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgLz4KICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0naW5wdXQtcmVmJyB0eXBlPWJ1dHRvbiB2YWx1ZT0ie3sgaWYgICR2YWwuUmVmTGlzdE5hbWVzIH19e3sgJHZhbC5SZWZMaXN0TmFtZXMgfX17eyBlbHNlIH19T3Blbnt7IGVuZH19Ii8+CiAgICAgICAgICAgICAgICA8ZGlhbG9nPgogICAgICAgICAgICAgICAgICA8bWVudT4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGNlbnRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+U2VhcmNoIGZvciBjb250ZW50IHRvIHVzZSBhcyByZWZlcmVuY2UuPC9wPgogICAgICAgICAgICAgICAgICAgICAgPC9jZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2ZvY3VzIGNsYXNzPSdpbnB1dC1jb250ZW50dHlwZScgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCB0eXBlJyAvPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIGNsYXNzPSdpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBjb250ZW50IG5hbWUnIC8+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9bGVmdCB0eXBlPWJ1dHRvbiB2YWx1ZT1DbGVhciAvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9cmlnaHQgdHlwZT1idXR0b24gdmFsdWU9RG9uZSAvPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvbWVudT4KICAgICAgICAgICAgICAgIDwvZGlhbG9nPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAge3sgZWxzZSB9fQogICAgICAgICAgICAgIHt7IGlmIGVxICRpbmRleCAwIH19CiAgICAgICAgICAgICAge3sgZWxzZSB9fQogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ2YWx1ZV91cGRhdGVfe3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iPnt7IC5OYW1lIH19PC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CgogICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJTdHJpbmdTbWFsbCIgfX0KICAgICAgICAgICAgICAgIDxpbnB1dCB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IC5OYW1lIH19IiAvPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAuVHlwZSAiU3RyaW5nQmlnIiB9fQogICAgICAgICAgICAgICAgPHRleHRhcmVhIHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iID48L3RleHRhcmVhPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAuVHlwZSAiSW5wdXRIVE1MIiB9fQogICAgICAgICAgICAgICAgPHRleHRhcmVhIHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgY2xhc3M9J2lucHV0LWh0bWwnIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IC5OYW1lIH19IiA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIklucHV0TWFya2Rvd24iIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0naW5wdXQtbWFya2Rvd24nIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IC5OYW1lIH19IiA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIkZpbGUiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiByZXF1aXJlZCB0eXBlPWZpbGUgbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIG11bHRpcGxlPWZhbHNlIC8+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJEYXRlIiB9fQogICAgICAgICAgICAgICAgPGlucHV0IHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT1kYXRlIG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJSZWZlcmVuY2UiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgICAgPGRpYWxvZz4KICAgICAgICAgICAgICAgICAgPG1lbnU+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgIDxjZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlNlYXJjaCBmb3IgY29udGVudCB0byB1c2UgYXMgcmVmZXJlbmNlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgIDwvY2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9mb2N1cyBjbGFzcz0naW5wdXQtY29udGVudHR5cGUnIHR5cGU9dGV4dCBwbGFjZWhvbGRlcj0nU2VhcmNoIGJ5IGNvbnRlbnQgdHlwZScgLz4KICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkaXNhYmxlZCBjbGFzcz0naW5wdXQtY29udGVudCcgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCBuYW1lJyAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L21lbnU+CiAgICAgICAgICAgICAgICA8L2RpYWxvZz4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIlJlZmVyZW5jZUxpc3QiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgICAgPGRpYWxvZz4KICAgICAgICAgICAgICAgICAgPG1lbnU+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgIDxjZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlNlYXJjaCBmb3IgY29udGVudCB0byB1c2UgYXMgcmVmZXJlbmNlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgIDwvY2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9mb2N1cyBjbGFzcz0naW5wdXQtY29udGVudHR5cGUnIHR5cGU9dGV4dCBwbGFjZWhvbGRlcj0nU2VhcmNoIGJ5IGNvbnRlbnQgdHlwZScgLz4KICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkaXNhYmxlZCBjbGFzcz0naW5wdXQtY29udGVudCcgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCBuYW1lJyAvPgogICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPWxlZnQgdHlwZT1idXR0b24gdmFsdWU9Q2xlYXIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPXJpZ2h0IHR5cGU9YnV0dG9uIHZhbHVlPURvbmUgLz4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L21lbnU+CiAgICAgICAgICAgICAgICA8L2RpYWxvZz4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAge3sgZW5kfX0KCiAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9VXBkYXRlIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kZXRhaWxzPgoKICAgICAgPGRldGFpbHM+CiAgICAgICAgPHN1bW1hcnk+RGVsZXRlIENvbnRlbnQ8L3N1bW1hcnk+CiAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvY29udGVudC9kZWxldGUnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPWNvbnRlbnR0eXBlIHZhbHVlPSJ7eyAuQ29udGVudFR5cGUuSUQgfX0iIC8+CiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50IHZhbHVlPSJ7eyAuQ29udGVudC5JRCB9fSIgLz4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPURlbGV0ZSAvPgogICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgIDxicj4KICAgICAgICA8L2Zvcm0+CiAgICAgIDwvZGV0YWlscz4KCiAgICA8L2FydGljbGU+CiAgICA8aHIvPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2Zvb3Rlci5odG1sIiB9fQogIDwvbWFpbj4KICA8c2NyaXB0IHNyYz0iLy91bnBrZy5jb20vdGlueW1jZUA1LjIuMC90aW55bWNlLm1pbi5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Jy8vdW5wa2cuY29tL2F1dG9jb21wbGV0ZS5qc0AwLjM3LjEvZGlzdC9hdXRvY29tcGxldGUubWluLmpzJz48L3NjcmlwdD4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9jb250ZW50LmpzIiAkIH19PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4K")

	tmpls["html/contenttype.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+Cgo8aGVhZD4KICB7eyB0ZW1wbGF0ZSAiaHRtbC9faGVhZC5odG1sIiB9fQogIDx0aXRsZT5DTVMgfCB7eyAuU3BhY2UuTmFtZSB9fSB8IHt7IC5Db250ZW50VHlwZS5OYW1lIH19PC90aXRsZT4KPC9oZWFkPgoKPGJvZHkgY2xhc3M9Y29udGVudHR5cGUgc3R5bGU9J21heC13aWR0aDogODAwcHg7Jz4KICA8c3R5bGU+e3sgdGVtcGxhdGUgImNzcy9tYWluLmNzcyIgfX08L3N0eWxlPgogIDxtYWluPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2hlYWRlci5odG1sIiAkIH19CiAgICA8aHIvPgogICAgPGFydGljbGU+CiAgICAgIDxoMT57eyAuU3BhY2UuTmFtZSB9fSwge3sgLkNvbnRlbnRUeXBlLk5hbWUgfX08L2gxPgogICAgICA8ZGV0YWlscz4KICAgICAgICA8c3VtbWFyeT5DcmVhdGUgYSB7eyAuQ29udGVudFR5cGUuTmFtZSB9fSBDb250ZW50PC9zdW1tYXJ5PgogICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL2NvbnRlbnQvbmV3JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50dHlwZSB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLklEIH19IiAvPgoKICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgIHt7IHJhbmdlIC5Db250ZW50VHlwZS5GaWVsZHMgfX0KCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImNyZWF0ZS17eyAuVHlwZSB9fS17eyAuTmFtZSB9fSI+e3sgLk5hbWUgfX08L2xhYmVsPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJTdHJpbmdTbWFsbCIgfX0KICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImNyZWF0ZS17eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICB7eyBpZiBlcSAuVHlwZSAiU3RyaW5nQmlnIiB9fQogICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0iY3JlYXRlLXt7IC5UeXBlIH19LXt7IC5OYW1lIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHBsYWNlaG9sZGVyPSJ7eyAuTmFtZSB9fSIgPjwvdGV4dGFyZWE+CiAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICB7eyBpZiBlcSAuVHlwZSAiSW5wdXRIVE1MIiB9fQogICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0iY3JlYXRlLXt7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0naW5wdXQtaHRtbCcgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iID48L3RleHRhcmVhPgogICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIklucHV0TWFya2Rvd24iIH19CiAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIGNsYXNzPSdpbnB1dC1tYXJrZG93bicgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iID48L3RleHRhcmVhPgogICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIkZpbGUiIH19CiAgICAgICAgICAgICAgPGlucHV0IGlkPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHJlcXVpcmVkIHR5cGU9ZmlsZSBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgbXVsdGlwbGU9ZmFsc2UgLz4KICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJEYXRlIiB9fQogICAgICAgICAgICAgIDxpbnB1dCBpZD0iY3JlYXRlLXt7IC5UeXBlIH19LXt7IC5OYW1lIH19IiByZXF1aXJlZCB0eXBlPWRhdGUgbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHBsYWNlaG9sZGVyPSJ7eyAuTmFtZSB9fSIgLz4KICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJSZWZlcmVuY2UiIH19CiAgICAgICAgICAgICAgPGlucHV0IGlkPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIGNsYXNzPSdvdXRwdXQtcmVmJyByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgLz4KICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgIDxkaWFsb2c+CiAgICAgICAgICAgICAgICA8bWVudT4KICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8cD5TZWFyY2ggZm9yIGNvbnRlbnQgdG8gdXNlIGFzIHJlZmVyZW5jZS48L3A+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nc2VhcmNoLWN0Jz5Db250ZW50IHR5cGU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9J3NlYXJjaC1jdCcgYXV0b2ZvY3VzIGNsYXNzPSdpbnB1dC1jb250ZW50dHlwZScgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCB0eXBlJyAvPgogICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nc2VhcmNoLWMnPkNvbnRlbnQgbmFtZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0nc2VhcmNoLWMnIGRpc2FibGVkIGNsYXNzPSdpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBjb250ZW50IG5hbWUnIC8+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9tZW51PgogICAgICAgICAgICAgIDwvZGlhbG9nPgogICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIlJlZmVyZW5jZUxpc3QiIH19CiAgICAgICAgICAgICAgPGlucHV0IGlkPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIGNsYXNzPSdvdXRwdXQtcmVmJyByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgLz4KICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgIDxkaWFsb2c+CiAgICAgICAgICAgICAgICA8bWVudT4KICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8Y2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgPHA+U2VhcmNoIGZvciBjb250ZW50IHRvIHVzZSBhcyByZWZlcmVuY2UuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvY2VudGVyPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvZm9jdXMgY2xhc3M9J2lucHV0LWNvbnRlbnR0eXBlJyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBjb250ZW50IHR5cGUnIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIGNsYXNzPSdpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBjb250ZW50IG5hbWUnIC8+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1sZWZ0IHR5cGU9YnV0dG9uIHZhbHVlPUNsZWFyIC8+CiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9cmlnaHQgdHlwZT1idXR0b24gdmFsdWU9RG9uZSAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvbWVudT4KICAgICAgICAgICAgICA8L2RpYWxvZz4KICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Q3JlYXRlIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kZXRhaWxzPgoKICAgICAgPGRldGFpbHM+CiAgICAgICAgPHN1bW1hcnk+VXBkYXRlIHt7IC5Db250ZW50VHlwZS5OYW1lIH19IENvbnRlbnQgVHlwZTwvc3VtbWFyeT4KICAgICAgICA8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jy9jb250ZW50dHlwZS91cGRhdGUnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPWNvbnRlbnR0eXBlIHZhbHVlPSJ7eyAuQ29udGVudFR5cGUuSUQgfX0iIC8+CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8ZmllbGRzZXQ+CiAgICAgICAgICAgIDxsZWdlbmQ+Q29udGVudCB0eXBlIG5hbWU8L2xlZ2VuZD4KICAgICAgICAgICAgPGxhYmVsIGZvcj0ndXBkYXRlLW5hbWUnPk5hbWU8L2xhYmVsPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxpbnB1dCBpZD0ndXBkYXRlLW5hbWUnIGF1dG9mb2N1cyByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT1uYW1lIHBsYWNlaG9sZGVyPSJuYW1lIiB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLk5hbWUgfX0iIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgPGxlZ2VuZD5GaWVsZHM8L2xlZ2VuZD4KICAgICAgICAgIHt7IHJhbmdlICRpbmRleCwgJGl0ZW0gOj0gLkNvbnRlbnRUeXBlLkZpZWxkcyB9fQoKICAgICAgICAgICAge3sgaWYgZXEgJGluZGV4IDAgfX0KICAgICAgICAgICAgICA8ZGl2IGlkPSdmaXJzdC1maWVsZHNldCc+CiAgICAgICAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT0iZmllbGRfdXBkYXRlX2lkX3t7IGluYyAkaW5kZXggfX0iIHZhbHVlPSJ7eyAuSUQgfX0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgcmVhZG9ubHk9InJlYWRvbmx5IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0iZmllbGRfdXBkYXRlX25hbWVfe3sgaW5jICRpbmRleCB9fSIgdmFsdWU9Int7IC5OYW1lIH19IiAvPgogICAgICAgICAgICAgICAgPHNlbGVjdCB2YWx1ZT0ie3sgLlR5cGUgfX0iIHJlYWRvbmx5PSJyZWFkb25seSIgcmVxdWlyZWQgbmFtZT0iZmllbGRfdXBkYXRlX3R5cGVfe3sgaW5jICRpbmRleCB9fSI+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU+RmllbGQgVHlwZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSJTdHJpbmdTbWFsbCI+U3RyaW5nIFNtYWxsPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IlN0cmluZ0JpZyI+U3RyaW5nIEJpZzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJJbnB1dEhUTUwiPkhUTUw8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iSW5wdXRNYXJrZG93biI+TWFya2Rvd248L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iRmlsZSI+RmlsZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJEYXRlIj5EYXRlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IlJlZmVyZW5jZSI+UmVmZXJlbmNlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IlJlZmVyZW5jZUxpc3QiPlJlZmVyZW5jZUxpc3Q8L29wdGlvbj4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIHR5cGU9YnV0dG9uIHZhbHVlPSdSZW1vdmUgRmllbGQnIC8+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIHt7IGVsc2UgfX0KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9ImZpZWxkX3VwZGF0ZV9pZF97eyBpbmMgJGluZGV4IH19IiB2YWx1ZT0ie3sgLklEIH19IiAvPgogICAgICAgICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJmaWVsZF91cGRhdGVfbmFtZV97eyBpbmMgJGluZGV4IH19IiB2YWx1ZT0ie3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICA8c2VsZWN0IHZhbHVlPSJ7eyAuVHlwZSB9fSIgcmVhZG9ubHk9InJlYWRvbmx5IiByZXF1aXJlZCBuYW1lPSJmaWVsZF91cGRhdGVfdHlwZV97eyBpbmMgJGluZGV4IH19Ij4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT5GaWVsZCBUeXBlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24ge3sgaWYgZXEgLlR5cGUgIlN0cmluZ1NtYWxsIiB9fSAgIHNlbGVjdGVkIHt7IGVsc2UgfX0gZGlzYWJsZWQge3sgZW5kIH19IHZhbHVlPSJTdHJpbmdTbWFsbCI+U3RyaW5nIFNtYWxsPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24ge3sgaWYgZXEgLlR5cGUgIlN0cmluZ0JpZyIgfX0gICAgIHNlbGVjdGVkIHt7IGVsc2UgfX0gZGlzYWJsZWQge3sgZW5kIH19IHZhbHVlPSJTdHJpbmdCaWciPlN0cmluZyBCaWc8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiB7eyBpZiBlcSAuVHlwZSAiSW5wdXRIVE1MIiB9fSAgICAgc2VsZWN0ZWQge3sgZWxzZSB9fSBkaXNhYmxlZCB7eyBlbmQgfX0gdmFsdWU9IklucHV0SFRNTCI+SFRNTDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICA8b3B0aW9uIHt7IGlmIGVxIC5UeXBlICJJbnB1dE1hcmtkb3duIiB9fSBzZWxlY3RlZCB7eyBlbHNlIH19IGRpc2FibGVkIHt7IGVuZCB9fSB2YWx1ZT0iSW5wdXRNYXJrZG93biI+TWFya2Rvd248L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiB7eyBpZiBlcSAuVHlwZSAiRmlsZSIgfX0gICAgICAgICAgc2VsZWN0ZWQge3sgZWxzZSB9fSBkaXNhYmxlZCB7eyBlbmQgfX0gdmFsdWU9IkZpbGUiPkZpbGU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiB7eyBpZiBlcSAuVHlwZSAiRGF0ZSIgfX0gICAgICAgICAgc2VsZWN0ZWQge3sgZWxzZSB9fSBkaXNhYmxlZCB7eyBlbmQgfX0gdmFsdWU9IkRhdGUiPkRhdGU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiB7eyBpZiBlcSAuVHlwZSAiUmVmZXJlbmNlIiB9fSAgICAgc2VsZWN0ZWQge3sgZWxzZSB9fSBkaXNhYmxlZCB7eyBlbmQgfX0gdmFsdWU9IlJlZmVyZW5jZSI+UmVmZXJlbmNlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24ge3sgaWYgZXEgLlR5cGUgIlJlZmVyZW5jZUxpc3QiIH19IHNlbGVjdGVkIHt7IGVsc2UgfX0gZGlzYWJsZWQge3sgZW5kIH19IHZhbHVlPSJSZWZlcmVuY2VMaXN0Ij5SZWZlcmVuY2VMaXN0PC9vcHRpb24+CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWJ1dHRvbiB2YWx1ZT0nUmVtb3ZlIEZpZWxkJyAvPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgPGJyPgogICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICA8aW5wdXQgdHlwZT1idXR0b24gaWQ9J2FkZC1maWVsZGJ0bicgdmFsdWU9J0FkZCBBbm90aGVyIEZpZWxkJyAvPgogICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVVwZGF0ZSAvPgogICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgIDxicj4KICAgICAgICA8L2Zvcm0+CiAgICAgIDwvZGV0YWlscz4KCiAgICAgIDxkZXRhaWxzPgogICAgICAgIDxzdW1tYXJ5PkRlbGV0ZSB7eyAuQ29udGVudFR5cGUuTmFtZSB9fSBDb250ZW50IFR5cGU8L3N1bW1hcnk+CiAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvY29udGVudHR5cGUvZGVsZXRlJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50dHlwZSB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLklEIH19IiAvPgogICAgICAgICAgPGJyPgogICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9RGVsZXRlIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kZXRhaWxzPgoKICAgICAgPGgyPkJyb3dzZSB7eyAuQ29udGVudFR5cGUuTmFtZSB9fSBDb250ZW50PC9oMj4KICAgICAge3sgaWYgLkNvbnRlbnRMaXN0IH19CiAgICAgICAgPHVsPgogICAgICAgICAge3sgcmFuZ2UgLkNvbnRlbnRMaXN0IH19CiAgICAgICAgICAgIDxsaT4gCiAgICAgICAgICAgICAgPGEgaHJlZj0nL2NvbnRlbnQve3sgJC5TcGFjZS5JRCB9fS97eyAkLkNvbnRlbnRUeXBlLklEIH19L3t7IC5JRCB9fSc+CiAgICAgICAgICAgICAgICB7eyAoLk11c3RWYWx1ZUJ5TmFtZSAibmFtZSIpLlZhbHVlIH19CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2xpPgogICAgICAgICAge3sgZW5kIH19CiAgICAgICAgPC91bD4KICAgICAge3sgZWxzZSB9fQogICAgICAgIDxwPk5vIGNvbnRlbnQgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIGEgY29udGVudCB0eXBlIG9mIHt7IC5Db250ZW50VHlwZS5OYW1lIH19PC9wPgogICAgICB7eyBlbmQgfX0KCiAgICA8L2FydGljbGU+CiAgICA8aHIvPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2Zvb3Rlci5odG1sIiB9fQogIDwvbWFpbj4KICA8c2NyaXB0IHNyYz0nLy91bnBrZy5jb20vdGlueW1jZUA1LjIuMC90aW55bWNlLm1pbi5qcyc+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Jy8vdW5wa2cuY29tL2F1dG9jb21wbGV0ZS5qc0AwLjM3LjEvZGlzdC9hdXRvY29tcGxldGUubWluLmpzJz48L3NjcmlwdD4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9zcGFjZS5qcyIgfX08L3NjcmlwdD4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9jb250ZW50LmpzIiAkIH19PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4K")

	tmpls["html/hook.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+Cgo8aGVhZD4KICB7eyB0ZW1wbGF0ZSAiaHRtbC9faGVhZC5odG1sIiB9fQogIDx0aXRsZT5DTVMgfCB7eyAuU3BhY2UuTmFtZSB9fSB8IHt7IC5Ib29rLlVSTCB9fTwvdGl0bGU+CjwvaGVhZD4KCjxib2R5IGNsYXNzPWluZGV4IHN0eWxlPSdtYXgtd2lkdGg6IDYwMHB4Oyc+CiAgPHN0eWxlPnt7IHRlbXBsYXRlICJjc3MvbWFpbi5jc3MiIH19PC9zdHlsZT4KICA8bWFpbj4KICAgIHt7IHRlbXBsYXRlICJodG1sL19oZWFkZXIuaHRtbCIgJCB9fQogICAgPGhyLz4KICAgIDxhcnRpY2xlPgogICAgICA8aDE+e3sgLlNwYWNlLk5hbWUgfX0sIHt7IC5Ib29rLlVSTCB9fTwvaDE+CiAgICAgIDxkZXRhaWxzPgogICAgICAgIDxzdW1tYXJ5PkRlbGV0ZSBXZWJob29rPC9zdW1tYXJ5PgogICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL2hvb2svZGVsZXRlJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1ob29rIHZhbHVlPSJ7eyAuSG9vay5JRCB9fSIgLz4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPURlbGV0ZSAvPgogICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgIDxicj4KICAgICAgICA8L2Zvcm0+CiAgICAgIDwvZGV0YWlscz4KICAgIDwvYXJ0aWNsZT4KICAgIDxoci8+CiAgICB7eyB0ZW1wbGF0ZSAiaHRtbC9fZm9vdGVyLmh0bWwiIH19CiAgPC9tYWluPgogIDxzY3JpcHQgc3JjPScvL3VucGtnLmNvbS90aW55bWNlQDUuMi4wL3RpbnltY2UubWluLmpzJz48L3NjcmlwdD4KICA8c2NyaXB0IHNyYz0nLy91bnBrZy5jb20vYXV0b2NvbXBsZXRlLmpzQDAuMzcuMS9kaXN0L2F1dG9jb21wbGV0ZS5taW4uanMnPjwvc2NyaXB0PgogIDxzY3JpcHQ+e3sgdGVtcGxhdGUgImpzL2NvbnRlbnQuanMiICQgfX08L3NjcmlwdD4KPC9ib2R5PgoKPC9odG1sPgo=")

	tmpls["html/index.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjwhRE9DVFlQRSBodG1sPgo8aHRtbCBsYW5nPWVuPgo8aGVhZD4KICB7eyB0ZW1wbGF0ZSAiaHRtbC9faGVhZC5odG1sIiB9fQogIDx0aXRsZT5DTVM8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5IGNsYXNzPWluZGV4IHN0eWxlPSdtYXgtd2lkdGg6IDYwMHB4Oyc+CiAgPHN0eWxlPnt7IHRlbXBsYXRlICJjc3MvbWFpbi5jc3MiIH19PC9zdHlsZT4KICA8bWFpbj4KICAgIHt7IHRlbXBsYXRlICJodG1sL19oZWFkZXIuaHRtbCIgJCB9fQogICAgPGhyLz4KICAgIDxhcnRpY2xlPgogICAgICB7eyBpZiAuVXNlciB9fQogICAgICAgIDxoMT5BY3Rpb25zPC9oMT4KICAgICAgICA8ZGV0YWlscz4KICAgICAgICAgIDxzdW1tYXJ5PkNyZWF0ZSBhIE5ldyBTcGFjZTwvc3VtbWFyeT4KICAgICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL3NwYWNlL25ldycgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICAgIDxsYWJlbCBmb3I9J2NyZWF0ZS1uYW1lJz5OYW1lPC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGlucHV0IGlkPSdjcmVhdGUtbmFtZScgYXV0b2ZvY3VzIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPW5hbWUgcGxhY2Vob2xkZXI9bmFtZSAvPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nY3JlYXRlLWRlc2MnPkRlc2NyaXB0aW9uPC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGlucHV0IGlkPSdjcmVhdGUtZGVzYycgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9ZGVzYyBwbGFjZWhvbGRlcj1kZXNjcmlwdGlvbiAvPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUNyZWF0ZSAvPgogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8YnI+CiAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kZXRhaWxzPgogICAgICAgIDxkZXRhaWxzPgogICAgICAgICAgPHN1bW1hcnk+TG9nb3V0PC9zdW1tYXJ5PgogICAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvdXNlci9sb2dvdXQnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICA8aW5wdXQgYXV0b2ZvY3VzIHR5cGU9c3VibWl0IHZhbHVlPUxvZ291dCAvPgogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8YnI+CiAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kZXRhaWxzPgogICAgICAgIDxicj4KICAgICAgICA8aDI+WW91ciBTcGFjZXM8L2gyPgogICAgICAgIHt7IGlmIC5TcGFjZXMgfX0KICAgICAgICAgIDx1bD4KICAgICAgICAgICAge3sgcmFuZ2UgLlNwYWNlcyB9fQogICAgICAgICAgICA8bGk+PGEgaHJlZj0iL3NwYWNlL3t7IC5JRCB9fSI+e3sgLk5hbWUgfX08L2E+PC9saT4KICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICA8L3VsPgogICAgICAgIHt7IGVsc2UgfX0KICAgICAgICAgIDxwPllvdSBoYXZlbid0IGNyZWF0ZWQgYW55IHNwYWNlcyB5ZXQuPC9wPgogICAgICAgIHt7IGVuZCB9fQogICAgICB7eyBlbHNlIH19CiAgICAgICAgPGgxPkFjY291bnQ8L2gxPgogICAgICAgIDxkZXRhaWxzPgogICAgICAgICAgPHN1bW1hcnk+TG9naW48L3N1bW1hcnk+CiAgICAgICAgICA8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jy91c2VyL2xvZ2luJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICA8ZmllbGRzZXQ+CiAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nbG9naW4tdXNlcm5hbWUnPlVzZXJuYW1lPC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGlucHV0IGlkPSdsb2dpbi11c2VybmFtZScgYXV0b2NvbXBsZXRlPW9uIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPXVzZXJuYW1lIHBsYWNlaG9sZGVyPXVzZXJuYW1lIGF1dG9mb2N1cyAvPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nbG9naW4tcGFzc3dvcmQnPlBhc3N3b3JkPC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGlucHV0IGlkPSdsb2dpbi1wYXNzd29yZCcgYXV0b2NvbXBsZXRlPW9uIHJlcXVpcmVkIHR5cGU9cGFzc3dvcmQgbmFtZT1wYXNzd29yZCBwbGFjZWhvbGRlcj1wYXNzd29yZCAvPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUxvZ2luIC8+CiAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgIDwvZm9ybT4KICAgICAgICA8L2RldGFpbHM+CiAgICAgICAgPGRldGFpbHM+CiAgICAgICAgICA8c3VtbWFyeT5TaWdudXA8L3N1bW1hcnk+CiAgICAgICAgICA8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jy91c2VyL3NpZ251cCcgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICAgIDxsYWJlbCBmb3I9J3NpZ251cC11c2VybmFtZSc+VXNlcm5hbWU8L2xhYmVsPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8aW5wdXQgaWQ9J3NpZ251cC11c2VybmFtZScgYXV0b2NvbXBsZXRlPW9uIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPXVzZXJuYW1lIHBsYWNlaG9sZGVyPXVzZXJuYW1lIGF1dG9mb2N1cyAvPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nc2lnbnVwLXBhc3N3b3JkJz5QYXNzd29yZDwvbGFiZWw+CiAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgIDxpbnB1dCBpZD0nc2lnbnVwLXBhc3N3b3JkJyBhdXRvY29tcGxldGU9b24gcmVxdWlyZWQgdHlwZT1wYXNzd29yZCBuYW1lPXBhc3N3b3JkIHBsYWNlaG9sZGVyPXBhc3N3b3JkIC8+CiAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8bGFiZWwgZm9yPSdzaWdudXAtdmVyaWZ5Jz5WZXJpZnk8L2xhYmVsPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8aW5wdXQgaWQ9J3NpZ251cC12ZXJpZnknIGF1dG9jb21wbGV0ZT1vbiByZXF1aXJlZCB0eXBlPXBhc3N3b3JkIG5hbWU9dmVyaWZ5IHBsYWNlaG9sZGVyPXZlcmlmeSAvPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVNpZ251cCAvPgogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8YnI+CiAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kZXRhaWxzPgogICAgICB7eyBlbmQgfX0KICAgIDwvYXJ0aWNsZT4KICAgIDxoci8+CiAgICB7eyB0ZW1wbGF0ZSAiaHRtbC9fZm9vdGVyLmh0bWwiIH19CiAgPC9tYWluPgo8L2JvZHk+Cgo8L2h0bWw+Cg==")
	tmpls["html/index.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+CjxoZWFkPgogIHt7IHRlbXBsYXRlICJodG1sL19oZWFkLmh0bWwiIH19CiAgPHRpdGxlPkNNUzwvdGl0bGU+CjwvaGVhZD4KPGJvZHkgY2xhc3M9J2luZGV4IGJnLWxpZ2h0Jz4KICA8c3R5bGU+e3sgdGVtcGxhdGUgImNzcy9tYWluLmNzcyIgfX08L3N0eWxlPgogIDxtYWluPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2hlYWRlci5odG1sIiAkIH19CiAgICA8ZGl2IGNsYXNzPSJwcmljaW5nLWhlYWRlciBweC0zIHB5LTMgcHQtbWQtNSBwYi1tZC00IG14LWF1dG8gdGV4dC1jZW50ZXIiPgogICAgICA8aDEgY2xhc3M9ImRpc3BsYXktNCI+Q01TPC9oMT4KICAgICAgPHAgY2xhc3M9ImxlYWQiPkFuIG9sZC1zY2hvb2wgY29udGVudCBtYW5hZ2VtZW50IDxtYXJrPmluZnJhc3RydWN0dXJlPC9tYXJrPiBmb3IgbW9zdC48L3A+CiAgICA8L2Rpdj4KICAgIDxhcnRpY2xlPgogICAgICB7eyBpZiAuVXNlciB9fQogICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL3NwYWNlL25ldycgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0iZXhhbXBsZU1vZGFsIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJleGFtcGxlTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLWNlbnRlcmVkIG1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJleGFtcGxlTW9kYWxMYWJlbCI+Q3JlYXRlIGEgbmV3IHNwYWNlPC9oNT4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPgogICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InNwYWNlTmFtZSI+TmFtZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPW5hbWUgdHlwZT10ZXh0IGlkPSJzcGFjZU5hbWUiIGNsYXNzPSJtYi0zIGZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9Ik5hbWUiIHJlcXVpcmVkPgogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJzcGFjZURlc2MiPkRlc2NyaXB0aW9uPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9ZGVzYyB0eXBlPXRleHQgaWQ9InNwYWNlRGVzYyIgY2xhc3M9Im1iLTMgZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iRGVzY3JpcHRpb24iIHJlcXVpcmVkPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5IiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+R288L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZm9ybT4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ncm93Jz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0nb2Zmc2V0LWxnLTMgY29sLWxnLTYnPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im15LTMgcC0zIGJnLXdoaXRlIHJvdW5kZWQgc2hhZG93LXNtIj4KICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSJkLWJsb2NrIHRleHQtcmlnaHQgZmxvYXQtcmlnaHQiIGRhdGEtdG9nZ2xlPSJtb2RhbCIgZGF0YS10YXJnZXQ9IiNleGFtcGxlTW9kYWwiPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPkNyZWF0ZSBhIG5ldyBzcGFjZTwvYT4KICAgICAgICAgICAgICAgICAgPC9zbWFsbD4KICAgICAgICAgICAgICAgIDxoNiBjbGFzcz0iYm9yZGVyLWJvdHRvbSBib3JkZXItZ3JheSBwYi0yIG1iLTAiPllvdXIgc3BhY2VzPC9oNj4KICAgICAgICAgICAgICAgIHt7IGlmIC5TcGFjZXMgfX0KICAgICAgICAgICAgICAgICAge3sgcmFuZ2UgLlNwYWNlcyB9fQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZWRpYSB0ZXh0LW11dGVkIHB0LTMiPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Jy9zcGFjZS97eyAuSUQgfX0nICBjbGFzcz0ibWVkaWEtYm9keSBwYi0zIG1iLTAgc21hbGwgbGgtMTI1IGJvcmRlci1ib3R0b20gYm9yZGVyLWdyYXkiPgogICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz0iZC1ibG9jayB0ZXh0LWdyYXktZGFyayI+e3sgLk5hbWUgfX08L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAgIHt7IC5EZXNjIH19CiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz0iZC1ibG9jayB0ZXh0LXJpZ2h0IG10LTMiPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPkxvYWQgbW9yZTwvYT4KICAgICAgICAgICAgICAgICAgPC9zbWFsbD4KICAgICAgICAgICAgICAgIHt7IGVsc2UgfX0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtMyBhbGVydCBhbGVydC1wcmltYXJ5IiByb2xlPSJhbGVydCI+CiAgICAgICAgICAgICAgICAgICAgWW91IGhhdmVuJ3QgY3JlYXRlZCBhbnkgc3BhY2VzIHlldC4gCiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIHt7IGVsc2UgfX0KICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ncm93IGp1c3RpZnktY29udGVudC1jZW50ZXInPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1kZWNrIG1iLTMgdGV4dC1jZW50ZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIG1iLTQgc2hhZG93LXNtIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9Im15LTAgZm9udC13ZWlnaHQtbm9ybWFsIj5TaWdudXA8L2g0PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CiAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jy91c2VyL3NpZ251cCcgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpZ251cElucHV0VXNlcm5hbWUiIGNsYXNzPSJzci1vbmx5Ij5FbWFpbCBhZGRyZXNzPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9dXNlcm5hbWUgdHlwZT0idGV4dCIgaWQ9InNpZ251cElucHV0VXNlcm5hbWUiIGNsYXNzPSJtYi0zIGZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9IlVzZXJuYW1lIiByZXF1aXJlZD4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2lnbnVwSW5wdXRQYXNzd29yZCIgY2xhc3M9InNyLW9ubHkiPlBhc3N3b3JkPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9cGFzc3dvcmQgdHlwZT0icGFzc3dvcmQiIGlkPSJzaWdudXBJbnB1dFBhc3N3b3JkIiBjbGFzcz0ibWItMyBmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSJQYXNzd29yZCIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpZ251cElucHV0VmVyaWZ5IiBjbGFzcz0ic3Itb25seSI+Q29uZmlybSBQYXNzd29yZDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPXZlcmlmeSB0eXBlPSJwYXNzd29yZCIgaWQ9InNpZ251cElucHV0VmVyaWZ5IiBjbGFzcz0ibWItMyBmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSJDb25maXJtIFBhc3N3b3JkIiByZXF1aXJlZD4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1sZyBidG4tcHJpbWFyeSBidG4tYmxvY2siIHR5cGU9InN1Ym1pdCI+R288L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQgbWItNCBzaGFkb3ctc20iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0ibXktMCBmb250LXdlaWdodC1ub3JtYWwiPkxvZ2luPC9oND4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkgZC1mbGV4Ij4KICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPSdkLWZsZXggZmxleC1ncm93LTEgZmxleC1jb2x1bW4nIG1ldGhvZD1QT1NUIGFjdGlvbj0nL3VzZXIvbG9naW4nIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJsb2dpbklucHV0VXNlcm5hbWUiIGNsYXNzPSJzci1vbmx5Ij5FbWFpbCBhZGRyZXNzPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9dXNlcm5hbWUgdHlwZT0idGV4dCIgaWQ9ImxvZ2luSW5wdXRVc2VybmFtZSIgY2xhc3M9Im1iLTMgZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iVXNlcm5hbWUiIHJlcXVpcmVkPgogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJsb2dpbklucHV0UGFzc3dvcmQiIGNsYXNzPSJzci1vbmx5Ij5QYXNzd29yZDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPXBhc3N3b3JkIHR5cGU9InBhc3N3b3JkIiBpZD0ibG9naW5JbnB1dFBhc3N3b3JkIiBjbGFzcz0ibWItMyBmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSJQYXNzd29yZCIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im10LWF1dG8gYnRuIGJ0bi1sZyBidG4tcHJpbWFyeSBidG4tYmxvY2siIHR5cGU9InN1Ym1pdCI+R288L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICB7eyBlbmQgfX0KICAgIDwvYXJ0aWNsZT4KICAgIHt7IHRlbXBsYXRlICJodG1sL19mb290ZXIuaHRtbCIgfX0KICA8L21haW4+CiAge3sgdGVtcGxhdGUgImh0bWwvX3NjcmlwdHMuaHRtbCIgfX0KPC9ib2R5Pgo8L2h0bWw+Cg==")

	tmpls["html/space.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+Cgo8aGVhZD4KICB7eyB0ZW1wbGF0ZSAiaHRtbC9faGVhZC5odG1sIiB9fQogIDx0aXRsZT5DTVMgfCB7eyAuU3BhY2UuTmFtZSB9fTwvdGl0bGU+CjwvaGVhZD4KCjxib2R5IGNsYXNzPXNwYWNlIHN0eWxlPSdtYXgtd2lkdGg6IDYwMHB4Oyc+CiAgPHN0eWxlPnt7IHRlbXBsYXRlICJjc3MvbWFpbi5jc3MiIH19PC9zdHlsZT4KICA8bWFpbj4KICAgIHt7IHRlbXBsYXRlICJodG1sL19oZWFkZXIuaHRtbCIgJCB9fQogICAgPGhyLz4KICAgIDxhcnRpY2xlPgoKICAgICAgPGgxPnt7IC5TcGFjZS5OYW1lIH19PC9oMT4KCiAgICAgIDxkZXRhaWxzPgogICAgICAgIDxzdW1tYXJ5PkNyZWF0ZSBDb250ZW50IFR5cGU8L3N1bW1hcnk+CiAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvY29udGVudHR5cGUvbmV3JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8ZmllbGRzZXQ+CiAgICAgICAgICAgIDxsZWdlbmQ+Q29udGVudCB0eXBlIG5hbWU8L2xlZ2VuZD4KICAgICAgICAgICAgPGxhYmVsIGZvcj0nY3JlYXRlLW5hbWUnPk5hbWU8L2xhYmVsPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxpbnB1dCBpZD0nY3JlYXRlLW5hbWUnIGF1dG9mb2N1cyByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT1uYW1lIHBsYWNlaG9sZGVyPSJuYW1lIiAvPgogICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgIDxsZWdlbmQ+RmllbGRzPC9sZWdlbmQ+CiAgICAgICAgICA8ZGl2IGlkPSdmaXJzdC1maWVsZHNldCc+CiAgICAgICAgICAgIDxpbnB1dCByZWFkb25seT0icmVhZG9ubHkiIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJmaWVsZF9uYW1lXzEiIHZhbHVlPSJuYW1lIiAvPgogICAgICAgICAgICA8c2VsZWN0IHJlYWRvbmx5PSJyZWFkb25seSIgcmVxdWlyZWQgbmFtZT0iZmllbGRfdHlwZV8xIj4KICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPkZpZWxkIFR5cGU8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSJTdHJpbmdTbWFsbCI+U3RyaW5nIFNtYWxsPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iU3RyaW5nQmlnIj5TdHJpbmcgQmlnPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iSW5wdXRIVE1MIj5IVE1MPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iSW5wdXRNYXJrZG93biI+TWFya2Rvd248L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJGaWxlIj5GaWxlPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iRGF0ZSI+RGF0ZTwvb3B0aW9uPgogICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IlJlZmVyZW5jZSI+UmVmZXJlbmNlPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iUmVmZXJlbmNlTGlzdCI+UmVmZXJlbmNlTGlzdDwvb3B0aW9uPgogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIHR5cGU9YnV0dG9uIHZhbHVlPSdSZW1vdmUgRmllbGQnIC8+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxpbnB1dCB0eXBlPWJ1dHRvbiBpZD0nYWRkLWZpZWxkYnRuJyB2YWx1ZT0nQWRkIEFub3RoZXIgRmllbGQnIC8+CiAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Q3JlYXRlIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kZXRhaWxzPgoKICAgICAgPGRldGFpbHM+CiAgICAgICAgPHN1bW1hcnk+Q3JlYXRlIFdlYmhvb2s8L3N1bW1hcnk+CiAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvaG9vay9uZXcnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgPGxhYmVsIGZvcj0nd2ViaG9vay11cmwnPlVSTDwvbGFiZWw+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGlucHV0IGlkPSd3ZWJob29rLXVybCcgYXV0b2ZvY3VzIHJlcXVpcmVkIHR5cGU9dXJsIG5hbWU9dXJsIHBsYWNlaG9sZGVyPSdNdXN0IGVudGVyIGZ1bGwgVVJMIG9mIHRhcmdldCcgLz4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1DcmVhdGUgLz4KICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICA8YnI+CiAgICAgICAgPC9mb3JtPgogICAgICA8L2RldGFpbHM+CgogICAgICA8ZGV0YWlscz4KICAgICAgICA8c3VtbWFyeT5Db3B5IFNwYWNlPC9zdW1tYXJ5PgogICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL3NwYWNlL2NvcHknIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgPGxhYmVsIGZvcj0nY3JlYXRlLW5hbWUnPk5hbWU8L2xhYmVsPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxpbnB1dCBpZD0nY3JlYXRlLW5hbWUnIGF1dG9mb2N1cyByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT1uYW1lIHBsYWNlaG9sZGVyPW5hbWUgLz4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9J2NyZWF0ZS1kZXNjJz5EZXNjcmlwdGlvbjwvbGFiZWw+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGlucHV0IGlkPSdjcmVhdGUtZGVzYycgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9ZGVzYyBwbGFjZWhvbGRlcj1kZXNjcmlwdGlvbiAvPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUNyZWF0ZSAvPgogICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgIDxicj4KICAgICAgICA8L2Zvcm0+CiAgICAgIDwvZGV0YWlscz4KCiAgICAgIDxkZXRhaWxzPgogICAgICAgIDxzdW1tYXJ5PkRlbGV0ZSB7eyAuU3BhY2UuTmFtZSB9fSBTcGFjZTwvc3VtbWFyeT4KICAgICAgICA8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jy9zcGFjZS9kZWxldGUnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgPGJyPgogICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1zcGFjZSB2YWx1ZT0ie3sgLlNwYWNlLklEIH19IiAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9RGVsZXRlIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kZXRhaWxzPgoKICAgICAgPGgyPkJyb3dzZSBDb250ZW50IEJ5IFR5cGU8L2gyPgogICAgICB7eyBpZiAuQ29udGVudFR5cGVzIH19CiAgICAgICAgPHVsPgogICAgICAgICAge3sgcmFuZ2UgLkNvbnRlbnRUeXBlcyB9fQogICAgICAgICAgICA8bGk+PGEgaHJlZj0nL2NvbnRlbnR0eXBlL3t7ICQuU3BhY2UuSUQgfX0ve3sgLklEIH19Jz57eyAuTmFtZSB9fTwvYT48L2xpPgogICAgICAgICAge3sgZW5kIH19CiAgICAgICAgPC91bD4KICAgICAge3sgZWxzZSB9fQogICAgICAgIDxwPllvdSBoYXZlbid0IGNyZWF0ZWQgYW55IGNvbnRlbnQgdHlwZXMgeWV0LjwvcD4KICAgICAge3sgZW5kIH19CgogICAgICA8aDI+QnJvd3NlIFdlYmhvb2tzPC9oMj4KICAgICAge3sgaWYgLkhvb2tzfX0KICAgICAgICA8dWw+CiAgICAgICAgICB7eyByYW5nZSAuSG9va3N9fQogICAgICAgICAgICA8bGk+PGEgaHJlZj0nL2hvb2sve3sgJC5TcGFjZS5JRCB9fS97eyAuSUQgfX0nPnt7IC5VUkwgfX08L2E+PC9saT4KICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgIDwvdWw+CiAgICAgIHt7IGVsc2UgfX0KICAgICAgICA8cD5Zb3UgaGF2ZW4ndCBjcmVhdGVkIGFueSB3ZWJob29rcyB5ZXQuPC9wPgogICAgICB7eyBlbmQgfX0KCiAgICA8L2FydGljbGU+CiAgICA8aHIvPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2Zvb3Rlci5odG1sIiB9fQogIDwvbWFpbj4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9zcGFjZS5qcyIgfX08L3NjcmlwdD4KPC9ib2R5PgoKPC9odG1sPgo=")
	tmpls["html/space.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+CjxoZWFkPgogIHt7IHRlbXBsYXRlICJodG1sL19oZWFkLmh0bWwiIH19CiAgPHRpdGxlPkNNUyB8IHt7IC5TcGFjZS5OYW1lIH19PC90aXRsZT4KPC9oZWFkPgo8Ym9keSBjbGFzcz0nc3BhY2UgYmctbGlnaHQnPgogIDxzdHlsZT57eyB0ZW1wbGF0ZSAiY3NzL21haW4uY3NzIiB9fTwvc3R5bGU+CiAgPG1haW4+CiAgICB7eyB0ZW1wbGF0ZSAiaHRtbC9faGVhZGVyLmh0bWwiICQgfX0KICAgIDxkaXYgY2xhc3M9InByaWNpbmctaGVhZGVyIHB4LTMgcHktMyBwdC1tZC01IHBiLW1kLTQgbXgtYXV0byB0ZXh0LWNlbnRlciI+CiAgICAgIDxoMSBjbGFzcz0iZGlzcGxheS00Ij57ey5TcGFjZS5OYW1lfX08L2gxPgogICAgICA8cCBjbGFzcz0ibGVhZCI+e3suU3BhY2UuRGVzY319PC9wPgogICAgPC9kaXY+CiAgICA8YXJ0aWNsZT4KICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvY29udGVudHR5cGUvbmV3JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1zcGFjZSB2YWx1ZT0ie3sgLlNwYWNlLklEIH19IiAvPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJjcmVhdGUtY29udGVudHR5cGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9IkNyZWF0ZSBhIG5ldyBjb250ZW50IHR5cGUgbW9kYWwuIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLWNlbnRlcmVkIG1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJjb250ZW50dHlwZU1vZGFsTGFiZWwiPkNyZWF0ZSBhIG5ldyBjb250ZW50IHR5cGU8L2g1PgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPgogICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iY29udGVudHR5cGVOYW1lIj5OYW1lPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPW5hbWUgdHlwZT10ZXh0IGlkPSJjb250ZW50dHlwZU5hbWUiIGNsYXNzPSJtYi0zIGZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9Ik5hbWUiIHJlcXVpcmVkPgogICAgICAgICAgICAgICAgPGRpdiBpZD0nZmlyc3QtZmllbGRzZXQnIGNsYXNzPSdjb250YWluZXItZmx1aWQgcHgtMCc+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImZpZWxkc2V0Rmlyc3QiPkZpZWxkczwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iZmllbGRzZXRGaXJzdCIgY2xhc3M9Im1iLTMgZm9ybS1jb250cm9sIiByZWFkb25seT0icmVhZG9ubHkiIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJmaWVsZF9uYW1lXzEiIHZhbHVlPSJuYW1lIiAvPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdmb3JtLWdyb3VwIHJvdyc+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLTYnPgogICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0idy0xMDAgZm9ybS1jb250cm9sIiByZWFkb25seT0icmVhZG9ubHkiIHJlcXVpcmVkIG5hbWU9ImZpZWxkX3R5cGVfMSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU+RmllbGQgVHlwZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSJTdHJpbmdTbWFsbCI+U3RyaW5nIFNtYWxsPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IlN0cmluZ0JpZyI+U3RyaW5nIEJpZzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJJbnB1dEhUTUwiPkhUTUw8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iSW5wdXRNYXJrZG93biI+TWFya2Rvd248L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iRmlsZSI+RmlsZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJEYXRlIj5EYXRlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IlJlZmVyZW5jZSI+UmVmZXJlbmNlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IlJlZmVyZW5jZUxpc3QiPlJlZmVyZW5jZUxpc3Q8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC02Jz4KICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0ndy0xMDAgYnRuIGJ0bi1wcmltYXJ5JyBkaXNhYmxlZCB0eXBlPWJ1dHRvbiB2YWx1ZT0nUmVtb3ZlIEZpZWxkJyAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGEgaHJlZj0nIycgY2xhc3M9J2J0biBidG4tbGluaycgaWQ9J2FkZC1maWVsZGJ0bic+QWRkIEFub3RoZXIgRmllbGQ8L2E+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNsb3NlPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+R288L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9mb3JtPgoKICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvaG9vay9uZXcnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9Imhvb2tNb2RhbCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0iaG9va01vZGFsTGFiZWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctY2VudGVyZWQgbW9kYWwtZGlhbG9nLXNjcm9sbGFibGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSIgaWQ9Imhvb2tNb2RhbExhYmVsIj5DcmVhdGUgYSBuZXcgaG9vazwvaDU+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWxhYmVsPSJDbG9zZSI+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJob29rVVJMIj5VUkw8L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9dXJsIHR5cGU9dXJsIGlkPSJob29rVVJMIiBjbGFzcz0ibWItMyBmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSJNdXN0IGVudGVyIGZ1bGwgVVJMIG9mIHRhcmdldCIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNsb3NlPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+R288L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9mb3JtPgoKICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvc3BhY2UvY29weScgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CiAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0iY29weU1vZGFsIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJjb3B5TW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1jZW50ZXJlZCBtb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9Im1vZGFsLXRpdGxlIiBpZD0iY29weU1vZGFsTGFiZWwiPkNvcHkge3suU3BhY2UuTmFtZX19PC9oNT4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj4KICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPiZ0aW1lczs8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InNwYWNlTmFtZSI+TmFtZTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1uYW1lIHR5cGU9dGV4dCBpZD0ic3BhY2VOYW1lIiBjbGFzcz0ibWItMyBmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSJOYW1lIiByZXF1aXJlZD4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InNwYWNlRGVzYyI+RGVzY3JpcHRpb248L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9ZGVzYyB0eXBlPXRleHQgaWQ9InNwYWNlRGVzYyIgY2xhc3M9Im1iLTMgZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iRGVzY3JpcHRpb24iIHJlcXVpcmVkPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5IiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPkdvPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZm9ybT4KICAgICAgCiAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL3NwYWNlL2RlbGV0ZScgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CiAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0iZGVsZXRlTW9kYWwiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9ImRlbGV0ZU1vZGFsTGFiZWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctY2VudGVyZWQgbW9kYWwtZGlhbG9nLXNjcm9sbGFibGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSIgaWQ9ImRlbGV0ZU1vZGFsTGFiZWwiPkRlbGV0ZSB7ey5TcGFjZS5OYW1lfX08L2g1PgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPgogICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5IiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPkdvPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZm9ybT4KCiAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0ncm93Jz4KICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1sZy02Jz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXktMyBwLTMgYmctd2hpdGUgcm91bmRlZCBzaGFkb3ctc20iPgogICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSJkLWJsb2NrIHRleHQtcmlnaHQgZmxvYXQtcmlnaHQiIGRhdGEtdG9nZ2xlPSJtb2RhbCIgZGF0YS10YXJnZXQ9IiNjcmVhdGUtY29udGVudHR5cGUiPgogICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIj5DcmVhdGUgYSBuZXcgY29udGVudCB0eXBlPC9hPgogICAgICAgICAgICAgICAgPC9zbWFsbD4KICAgICAgICAgICAgICA8aDYgY2xhc3M9ImJvcmRlci1ib3R0b20gYm9yZGVyLWdyYXkgcGItMiBtYi0wIj5Zb3VyIGNvbnRlbnQgdHlwZXM8L2g2PgogICAgICAgICAgICAgIHt7IGlmIC5Db250ZW50VHlwZXMgfX0KICAgICAgICAgICAgICAgIHt7IHJhbmdlIC5Db250ZW50VHlwZXMgfX0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lZGlhIHRleHQtbXV0ZWQgcHQtMyI+CiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Jy9jb250ZW50dHlwZS97eyAkLlNwYWNlLklEIH19L3t7IC5JRCB9fScgIGNsYXNzPSJtZWRpYS1ib2R5IHBiLTMgbWItMCBzbWFsbCBsaC0xMjUgYm9yZGVyLWJvdHRvbSBib3JkZXItZ3JheSI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz0iZC1ibG9jayB0ZXh0LWdyYXktZGFyayI+e3sgLk5hbWUgfX08L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz0iZC1ibG9jayB0ZXh0LXJpZ2h0IG10LTMiPgogICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIj5Mb2FkIG1vcmU8L2E+CiAgICAgICAgICAgICAgICA8L3NtYWxsPgogICAgICAgICAgICAgIHt7IGVsc2UgfX0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTMgYWxlcnQgYWxlcnQtcHJpbWFyeSIgcm9sZT0iYWxlcnQiPgogICAgICAgICAgICAgICAgICBZb3UgaGF2ZW4ndCBjcmVhdGVkIGFueSBjb250ZW50IHR5cGVzIHlldC4gCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1sZy02Jz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXktMyBwLTMgYmctd2hpdGUgcm91bmRlZCBzaGFkb3ctc20iPgogICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSJkLWJsb2NrIHRleHQtcmlnaHQgZmxvYXQtcmlnaHQiIGRhdGEtdG9nZ2xlPSJtb2RhbCIgZGF0YS10YXJnZXQ9IiNob29rTW9kYWwiPgogICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIj5DcmVhdGUgYSBuZXcgd2ViaG9vazwvYT4KICAgICAgICAgICAgICAgIDwvc21hbGw+CiAgICAgICAgICAgICAgPGg2IGNsYXNzPSJib3JkZXItYm90dG9tIGJvcmRlci1ncmF5IHBiLTIgbWItMCI+WW91ciB3ZWJob29rczwvaDY+CiAgICAgICAgICAgICAge3sgaWYgLkNvbnRlbnRUeXBlcyB9fQogICAgICAgICAgICAgICAge3sgcmFuZ2UgLkhvb2tzIH19CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZWRpYSB0ZXh0LW11dGVkIHB0LTMiPgogICAgICAgICAgICAgICAgICA8YSBocmVmPScvaG9vay97eyAkLlNwYWNlLklEIH19L3t7IC5JRCB9fScgIGNsYXNzPSJtZWRpYS1ib2R5IHBiLTMgbWItMCBzbWFsbCBsaC0xMjUgYm9yZGVyLWJvdHRvbSBib3JkZXItZ3JheSI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz0iZC1ibG9jayB0ZXh0LWdyYXktZGFyayI+e3sgLlVSTCB9fTwvc3Ryb25nPgogICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSJkLWJsb2NrIHRleHQtcmlnaHQgbXQtMyI+CiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPkxvYWQgbW9yZTwvYT4KICAgICAgICAgICAgICAgIDwvc21hbGw+CiAgICAgICAgICAgICAge3sgZWxzZSB9fQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtMyBhbGVydCBhbGVydC1wcmltYXJ5IiByb2xlPSJhbGVydCI+CiAgICAgICAgICAgICAgICAgIFlvdSBoYXZlbid0IGNyZWF0ZWQgYW55IHdlYmhvb2tzIHlldC4gCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgPC9hcnRpY2xlPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2Zvb3Rlci5odG1sIiB9fQogIDwvbWFpbj4KICB7eyB0ZW1wbGF0ZSAiaHRtbC9fc2NyaXB0cy5odG1sIiB9fQogIDxzY3JpcHQ+e3sgdGVtcGxhdGUgImpzL3NwYWNlLmpzIiB9fTwvc2NyaXB0Pgo8L2JvZHk+Cgo8L2h0bWw+Cg==")

	tmpls["js/content.js"] = tostring("Ly8gU2V0dXAgaW5wdXRzIGZvciBjb250ZW50IGNyZWF0ZS91cGRhdGUuCihmdW5jdGlvbigpIHsgCgogIC8vIEhUTUwKICB0aW55bWNlLmluaXQoeyAKICAgIHNlbGVjdG9yOiAndGV4dGFyZWEuaW5wdXQtaHRtbCcsCiAgICBwbHVnaW5zOiAiY29kZSIsCiAgICBmb3JjZWRfcm9vdF9ibG9jayA6ICIiLCAvKiBObyB3cmFwcGluZyBwYXJhZ3JhcGggdGFnLiAqLwogICAgLy8gc3RhdHVzYmFyOiBmYWxzZSwKICAgIHNldHVwOiBmdW5jdGlvbihpdGVtKSB7IAogICAgICBpdGVtLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsgCiAgICAgICAgaXRlbS50YXJnZXRFbG0udmFsdWUgPSBpdGVtLmdldENvbnRlbnQoKQogICAgICB9KQogICAgfQogIH0pCgogIC8vIE1BUktET1dOCiAgdGlueW1jZS5pbml0KHsKICAgIHNlbGVjdG9yOiAidGV4dGFyZWEuaW5wdXQtbWFya2Rvd24iLAogICAgcGx1Z2luOiAndGV4dHBhdHRlcm4nLAogICAgZXh0ZXJuYWxfcGx1Z2luczogeyAKICAgICAgdGV4dHBhdHRlcm46ICcvL3VucGtnLmNvbS90aW55bWNlQDUuMi4wL3BsdWdpbnMvdGV4dHBhdHRlcm4vcGx1Z2luLm1pbi5qcycKICAgIH0sCiAgICBtZW51YmFyOiBmYWxzZSwKICAgIHRvb2xiYXI6ICd1bmRvIHJlZG8nLAogICAgLy8gc3RhdHVzYmFyOiBmYWxzZSwKICAgIHRleHRwYXR0ZXJuX3BhdHRlcm5zOiBbCiAgICAgIHtzdGFydDogJyonLCBlbmQ6ICcqJywgZm9ybWF0OiAnaXRhbGljJ30sCiAgICAgIHtzdGFydDogJyoqJywgZW5kOiAnKionLCBmb3JtYXQ6ICdib2xkJ30sCiAgICAgIHtzdGFydDogJ18nLCBlbmQ6ICdfJywgZm9ybWF0OiAnYm9sZCd9LAogICAgICB7c3RhcnQ6ICcjJywgZm9ybWF0OiAnaDEnfSwKICAgICAge3N0YXJ0OiAnIyMnLCBmb3JtYXQ6ICdoMid9LAogICAgICB7c3RhcnQ6ICcjIyMnLCBmb3JtYXQ6ICdoMyd9LAogICAgICB7c3RhcnQ6ICcjIyMjJywgZm9ybWF0OiAnaDQnfSwKICAgICAge3N0YXJ0OiAnIyMjIyMnLCBmb3JtYXQ6ICdoNSd9LAogICAgICB7c3RhcnQ6ICcjIyMjIyMnLCBmb3JtYXQ6ICdoNid9LAogICAgICB7c3RhcnQ6ICcxLiAnLCBjbWQ6ICdJbnNlcnRPcmRlcmVkTGlzdCd9LAogICAgICB7c3RhcnQ6ICcqICcsIGNtZDogJ0luc2VydFVub3JkZXJlZExpc3QnfSwKICAgICAge3N0YXJ0OiAnLSAnLCBjbWQ6ICdJbnNlcnRVbm9yZGVyZWRMaXN0J30KICAgIF0sCiAgICBzZXR1cDogZnVuY3Rpb24oaXRlbSkgeyAKICAgICAgaXRlbS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7IAogICAgICAgIGl0ZW0udGFyZ2V0RWxtLnZhbHVlID0gaXRlbS5nZXRDb250ZW50KCkKICAgICAgfSkKICAgIH0KICB9KTsKCiAgLy8gUkVGRVJFTkNFCiAgdmFyIHJlZnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJmb3JtIGRpYWxvZyIpCiAgdmFyIG1lbnVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZm9ybSBkaWFsb2cgbWVudSIpCiAgdmFyIHJlZmJ0bnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuaW5wdXQtcmVmIikKICB2YXIgdG9idG5zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLm91dHB1dC1yZWYiKQogIGZvciAoaSA9IDA7IGkgPCByZWZzLmxlbmd0aDsgaSsrKSB7IAogICAgKGZ1bmN0aW9uKGJ0biwgbWVudSwgZGlhbG9nLCBvdXRwdXQpIHsgCiAgICAgIHZhciBpc0xpc3QgPSBvdXRwdXQuZ2V0QXR0cmlidXRlKCJuYW1lIikuaW5kZXhPZigiUmVmZXJlbmNlTGlzdCIpICE9IC0xCiAgICAgIHZhciBjbGVhckJ0biA9IGRpYWxvZy5xdWVyeVNlbGVjdG9yKCIubGVmdCIpCiAgICAgIHZhciBkb25lQnRuID0gZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoIi5yaWdodCIpCgogICAgICB2YXIgY2hvc2VuQ29udGVudFR5cGVJRCAvLyB1c2VkIGJ5IGJvdGgKICAgICAgdmFyIGNob3NlbkNvbnRlbnRJRHMgPSBbXSAvLyBvbmx5IHVzZWQgYmUgcmVmbGlzdAogICAgICB2YXIgY2hvc2VuQ29udGVudE5hbWVzID0gW10gLy8gb25seSB1c2VkIGJlIHJlZmxpc3QKCiAgICAgIC8vIE9QRU4KICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgeyAKICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpCiAgICAgICAgZGlhbG9nLnNob3dNb2RhbCgpCiAgICAgIH0pCgogICAgICAvLyBDTE9TRQogICAgICBkaWFsb2cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7IAogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCkKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCkKICAgICAgICBpZiAoaXNMaXN0KSB7IAogICAgICAgICAgLy8gRG9uJ3QgbGV0IHJlZmxpc3QgaW5wdXQgY2xvc2UgYnkgb2ZmIGNsaWNrLCB1c2VyIG11c3QgY2hvb3NlIHRvCiAgICAgICAgICAvLyBjbGVhciBpbnB1dCB0byBjbG9zZSwgb3IgYmUgZG9uZSB0byBjbG9zZS4KICAgICAgICAgIHJldHVybiAKICAgICAgICB9CiAgICAgICAgZGlhbG9nLmNsb3NlKCkKICAgICAgfSkKCiAgICAgIC8vIFNUT1AKICAgICAgbWVudS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsgCiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKQogICAgICAgIGUucHJldmVudERlZmF1bHQoKQogICAgICB9KQoKICAgICAgaWYgKGlzTGlzdCkgewogICAgICAgIC8vIENMRUFSCiAgICAgICAgY2xlYXJCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbGVhckJ0bkhhbmRsZSkKICAgICAgICBmdW5jdGlvbiBjbGVhckJ0bkhhbmRsZShlKSB7IAogICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKQogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpCiAgICAgICAgICBvdXRwdXQudmFsdWUgPSAnJwogICAgICAgICAgYnRuLnZhbHVlID0gJ09wZW4nCiAgICAgICAgICBjaG9zZW5Db250ZW50SURzID0gW10KICAgICAgICAgIGNob3NlbkNvbnRlbnROYW1lcyA9IFtdCiAgICAgICAgICBkaWFsb2cuY2xvc2UoKQogICAgICAgIH0KCiAgICAgICAgLy8gRE9ORQogICAgICAgIGRvbmVCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7IAogICAgICAgICAgaWYgKGNob3NlbkNvbnRlbnRJRHMubGVuZ3RoIDwgMSkgewogICAgICAgICAgICByZXR1cm4gY2xlYXJCdG5IYW5kbGUoZSkKICAgICAgICAgIH0KICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCkKICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKQogICAgICAgICAgb3V0cHV0LnZhbHVlID0gY2hvc2VuQ29udGVudElEcy5qb2luKCctJykKICAgICAgICAgIGJ0bi52YWx1ZSA9IGNob3NlbkNvbnRlbnROYW1lcy5qb2luKCcsICcpCiAgICAgICAgICBjaG9zZW5Db250ZW50SURzID0gW10KICAgICAgICAgIGNob3NlbkNvbnRlbnROYW1lcyA9IFtdCiAgICAgICAgICBkaWFsb2cuY2xvc2UoKQogICAgICAgIH0pCiAgICAgIH0KCiAgICAgIC8vIElOUFVUUyBFVkVOVFMgQU5EIFJFU1VMVFMKICAgICAgdmFyIGlucHV0cyA9IGRpYWxvZy5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpCiAgICAgIHZhciBjb250ZW50dHlwZSA9IGlucHV0c1swXQogICAgICB2YXIgY29udGVudCA9IGlucHV0c1sxXQoKICAgICAgdmFyIG9wdHMgPSB7CiAgICAgICAgYXV0b3NlbGVjdDogdHJ1ZSwKICAgICAgICBhdXRvc2VsZWN0T25CbHVyOiB0cnVlLCAKICAgICAgICB0YWJBdXRvY29tcGxldGU6IHRydWUsCiAgICAgICAgLy8gY2xlYXJPblNlbGVjdGVkOiB0cnVlLAogICAgICAgIGhpbnQ6IGZhbHNlCiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGdldG9wdHModXJsLCB0cmFuc2Zvcm0sIGRpc3BsYXlLZXkpIHsgCiAgICAgICAgdmFyIGNvbnRlbnR0eXBlQWJvcnQgPSBmdW5jdGlvbigpIHt9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGRpc3BsYXlLZXk6IGRpc3BsYXlLZXksCiAgICAgICAgICBzb3VyY2U6IGZ1bmN0aW9uKHF1ZXJ5LCBjYikgeyAKICAgICAgICAgICAgY2IoW10pCiAgICAgICAgICAgIGNvbnRlbnR0eXBlQWJvcnQoKQogICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCkKICAgICAgICAgICAgY29udGVudHR5cGVBYm9ydCA9IGZ1bmN0aW9uKCkgeyByZXEuYWJvcnQoKSB9IAogICAgICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPSA0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyAhPSAyMDApIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc3BvbnNlVGV4dCAhPSAiIikgewogICAgICAgICAgICAgICAgICBhbGVydCh0aGlzLnJlc3BvbnNlVGV4dCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNiKFtdKQogICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICB0cnkgeyAKICAgICAgICAgICAgICAgIGNiKHRyYW5zZm9ybShKU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KSkpCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhdGNoKGUpIHsgCiAgICAgICAgICAgICAgICB2YXIgbXNnID0gZS50b1N0cmluZygpCiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh7ZSxtc2d9KQogICAgICAgICAgICAgICAgaWYgKG1zZyAhPSAiIikgeyAvLyBDYW5jZWxsZWQgcmVxdWVzdHMgaGl0IHRoaXMuCiAgICAgICAgICAgICAgICAgIGFsZXJ0KG1zZykKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcsIHVybCgpICsgcXVlcnksIHRydWUpCiAgICAgICAgICAgIHJlcS5zZW5kKCkKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZhciBjb250ZW50dHlwZU9wdHMgPSBnZXRvcHRzKAogICAgICAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gJy9jb250ZW50dHlwZS9zZWFyY2g/c3BhY2U9e3sgLlNwYWNlLklEIH19JnF1ZXJ5PSc7IH0sIAogICAgICAgIGZ1bmN0aW9uKGRhdGEpIHsgcmV0dXJuIGRhdGEgfSwKICAgICAgICAnQ29udGVudFR5cGVOYW1lJwogICAgICApCgogICAgICB3aW5kb3cuYXV0b2NvbXBsZXRlKGNvbnRlbnR0eXBlLCBvcHRzLCBbY29udGVudHR5cGVPcHRzXSkub24oJ2F1dG9jb21wbGV0ZTpzZWxlY3RlZCcsIG9uQ29udGVudFR5cGVTZWxlY3RlZCkKICAgICAgZnVuY3Rpb24gb25Db250ZW50VHlwZVNlbGVjdGVkKGUsIGl0ZW0sIGRhdGFzZXQsIGN0eCkgewogICAgICAgIGNob3NlbkNvbnRlbnRUeXBlSUQgPSBpdGVtLkNvbnRlbnRUeXBlSUQKICAgICAgICBjb250ZW50LmRpc2FibGVkID0gZmFsc2UKICAgICAgfQoKICAgICAgdmFyIGNvbnRlbnRPcHRzID0gZ2V0b3B0cygKICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuICcvY29udGVudC9zZWFyY2g/c3BhY2U9e3sgLlNwYWNlLklEIH19JmNvbnRlbnR0eXBlPScgKyBjaG9zZW5Db250ZW50VHlwZUlEICsgJyZxdWVyeT0nOyB9LCAKICAgICAgICBmdW5jdGlvbihkYXRhKSB7IAogICAgICAgICAgLy8gQmlnIGhhY2suCiAgICAgICAgICBkYXRhID0gZGF0YSA/IGRhdGEgOiBbXQogICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsgLy8gVGhpcyByZXNwb25zZSBpcyBwYWdlZCwgZG9uJ3Qgd29ycnkgYWJvdXQgT14yLiBNYXggb2YgMjAgaXRlbXMuCiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBkYXRhW2ldLkNvbnRlbnRWYWx1ZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICBpZiAoZGF0YVtpXS5Db250ZW50VmFsdWVzW2pdLkZpZWxkTmFtZSA9PSAibmFtZSIpIHsgLy8gV2UncmUgZ3VhcmFudGVlZCB0byBoYXZlIHRoaXMuCiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGRhdGFbaV0sIGRhdGFbaV0uQ29udGVudFZhbHVlc1tqXSkKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkYXRhCiAgICAgICAgfSwKICAgICAgICAnRmllbGRWYWx1ZScKICAgICAgKQoKICAgICAgLy8gVE9ETzogV2VpcmQgYmVoYXZpb3IgaGVyZSwgd2h5IGRvIEkgaGF2ZSB0byBpbmxpbmUgdGhpcyBjbGVhciBvbgogICAgICAvLyBzZWxlY3RlZD8gV2h5IGNhbid0IGl0IGV4aXN0cyBpbiBjb250ZW50T3B0cz8KICAgICAgd2luZG93LmF1dG9jb21wbGV0ZShjb250ZW50LCBPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7Y2xlYXJPblNlbGVjdGVkOnRydWV9KSwgW2NvbnRlbnRPcHRzXSkub24oJ2F1dG9jb21wbGV0ZTpzZWxlY3RlZCcsIG9uQ29udGVudFNlbGVjdGVkKQogICAgICBmdW5jdGlvbiBvbkNvbnRlbnRTZWxlY3RlZChlLCBpdGVtLCBkYXRhc2V0LCBjdHgpIHsKICAgICAgICBpZiAoaXNMaXN0KSB7CiAgICAgICAgICBjaG9zZW5Db250ZW50SURzLnB1c2goaXRlbS5Db250ZW50SUQpCiAgICAgICAgICBjaG9zZW5Db250ZW50TmFtZXMucHVzaChpdGVtLkZpZWxkVmFsdWUpCiAgICAgICAgICBidG4udmFsdWUgPSBjaG9zZW5Db250ZW50TmFtZXMuam9pbignLCAnKQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIG91dHB1dC52YWx1ZSA9IGl0ZW0uQ29udGVudElECiAgICAgICAgICBidG4udmFsdWUgPSBpdGVtLkZpZWxkVmFsdWUKICAgICAgICAgIGRpYWxvZy5jbG9zZSgpCiAgICAgICAgfQogICAgICB9CgogICAgfSkocmVmYnRuc1tpXSwgbWVudXNbaV0sIHJlZnNbaV0sIHRvYnRuc1tpXSkKICB9Cgp9KSgpOwo=")

	tmpls["js/space.js"] = tostring("Ly8gQWRkIG1vcmUgZmllbGRzIHRvIHNwYWNlIGNyZWF0ZS4KKGZ1bmN0aW9uKCkgeyAKICB2YXIgYWRkRmllbGRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRkLWZpZWxkYnRuJykKICB2YXIgaSA9IDEKICBhZGRGaWVsZEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsgCiAgICBpKysKICAgIGUucHJldmVudERlZmF1bHQoKQogICAgZS5zdG9wUHJvcGFnYXRpb24oKQogICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykKICAgIGVsLmlubmVySFRNTCA9IGAKICAgICAgPGRpdj4KICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9ImZpZWxkX25hbWVfJHtpfSIgcGxhY2Vob2xkZXI9ImZpZWxkIG5hbWUiIC8+CiAgICAgICAgPHNlbGVjdCByZXF1aXJlZCBuYW1lPSJmaWVsZF90eXBlXyR7aX0iPgogICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCBzZWxlY3RlZCB2YWx1ZT5GaWVsZCBUeXBlPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJTdHJpbmdTbWFsbCI+U3RyaW5nIFNtYWxsPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJTdHJpbmdCaWciPlN0cmluZyBCaWc8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9IklucHV0SFRNTCI+SFRNTDwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iSW5wdXRNYXJrZG93biI+TWFya2Rvd248L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9IkZpbGUiPkZpbGU8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9IkRhdGUiPkRhdGU8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9IlJlZmVyZW5jZSI+UmVmZXJlbmNlPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJSZWZlcmVuY2VMaXN0Ij5SZWZlcmVuY2VMaXN0PC9vcHRpb24+CiAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgPGlucHV0IHR5cGU9YnV0dG9uIGlkPSdyZW1vdmUtZmllbGRidG5fJHtpfScgdmFsdWU9J1JlbW92ZSBGaWVsZCcgLz4KICAgICAgPC9kaXY+CiAgICAgIDxicj4KICAgIGAKICAgIGFkZEZpZWxkQnRuLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsLCBhZGRGaWVsZEJ0bikKICAgIHZhciByZW1vdmVGaWVsZEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGByZW1vdmUtZmllbGRidG5fJHtpfWApCiAgICByZW1vdmVGaWVsZEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsgCiAgICAgIGktLQogICAgICBlLnByZXZlbnREZWZhdWx0KCkKICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKQogICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKQogICAgfSkKICB9KQp9KSgpOwoKLy8gRm9yIHVwZGF0ZTogcmVtb3ZlIG9sZCBmaWVsZHMKKGZ1bmN0aW9uKCkgeyAKICB2YXIgYnRucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImZvcm0gZGl2IGlucHV0W3R5cGU9YnV0dG9uXSIpOwogIGZvciAodmFyIGUgPSAwOyBlIDwgYnRucy5sZW5ndGg7IGUrKykgewogICAgKGZ1bmN0aW9uKGJ0bikgewogICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbiBoYW5kZWxDbGljaygpIHsgCiAgICAgICAgYnRuLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChidG4ucGFyZW50RWxlbWVudCk7CiAgICAgIH0pOwogICAgfSkoYnRuc1tlXSk7CiAgfQp9KSgpOwo=")
	tmpls["js/space.js"] = tostring("Ly8gQWRkIG1vcmUgZmllbGRzIHRvIHNwYWNlIGNyZWF0ZS4KKGZ1bmN0aW9uKCkgeyAKICB2YXIgYWRkRmllbGRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRkLWZpZWxkYnRuJykKICB2YXIgaSA9IDEKICBhZGRGaWVsZEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsgCiAgICBpKysKICAgIGUucHJldmVudERlZmF1bHQoKQogICAgZS5zdG9wUHJvcGFnYXRpb24oKQogICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykKICAgIGVsLmlubmVySFRNTCA9IGAKICAgICAgPGRpdiBjbGFzcz0nY29udGFpbmVyLWZsdWlkIHB4LTAnPgogICAgICAgIDxpbnB1dCBjbGFzcz0ibWItMyBmb3JtLWNvbnRyb2wiIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJmaWVsZF9uYW1lXyR7aX0iIHZhbHVlPSJuYW1lIiAvPgogICAgICAgIDxkaXYgY2xhc3M9J2Zvcm0tZ3JvdXAgcm93Jz4KICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC02Jz4KICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0idy0xMDAgZm9ybS1jb250cm9sIiByZXF1aXJlZCBuYW1lPSJmaWVsZF90eXBlXyR7aX0iPgogICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU+RmllbGQgVHlwZTwvb3B0aW9uPgogICAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9IlN0cmluZ1NtYWxsIj5TdHJpbmcgU21hbGw8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJTdHJpbmdCaWciPlN0cmluZyBCaWc8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJJbnB1dEhUTUwiPkhUTUw8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJJbnB1dE1hcmtkb3duIj5NYXJrZG93bjwvb3B0aW9uPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IkZpbGUiPkZpbGU8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJEYXRlIj5EYXRlPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iUmVmZXJlbmNlIj5SZWZlcmVuY2U8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJSZWZlcmVuY2VMaXN0Ij5SZWZlcmVuY2VMaXN0PC9vcHRpb24+CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtNic+CiAgICAgICAgICAgIDxpbnB1dCBpZD0ncmVtb3ZlLWZpZWxkYnRuXyR7aX0nIGNsYXNzPSd3LTEwMCBidG4gYnRuLXByaW1hcnknIHR5cGU9YnV0dG9uIHZhbHVlPSdSZW1vdmUgRmllbGQnIC8+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgCiAgICBhZGRGaWVsZEJ0bi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbCwgYWRkRmllbGRCdG4pCiAgICB2YXIgcmVtb3ZlRmllbGRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcmVtb3ZlLWZpZWxkYnRuXyR7aX1gKQogICAgcmVtb3ZlRmllbGRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7IAogICAgICBpLS0KICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpCiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCkKICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCkKICAgIH0pCiAgfSkKfSkoKTsKCi8vIEZvciB1cGRhdGU6IHJlbW92ZSBvbGQgZmllbGRzCihmdW5jdGlvbigpIHsgCiAgLy8gdmFyIGJ0bnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJmb3JtIGRpdiBpbnB1dFt0eXBlPWJ1dHRvbl0iKTsKICAvLyBmb3IgKHZhciBlID0gMDsgZSA8IGJ0bnMubGVuZ3RoOyBlKyspIHsKICAvLyAgIChmdW5jdGlvbihidG4pIHsKICAvLyAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24gaGFuZGVsQ2xpY2soKSB7IAogIC8vICAgICAgIGJ0bi5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoYnRuLnBhcmVudEVsZW1lbnQpOwogIC8vICAgICB9KTsKICAvLyAgIH0pKGJ0bnNbZV0pOwogIC8vIH0KfSkoKTsK")

}