
.chat-nav-btn {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  height: 36px;
  min-width: 94px;
  padding: 0 14px;
  border: 0;
  border-radius: 999px;
  color: #fff;
  font-weight: 700;
  font-size: 13px;
  letter-spacing: 0.3px;
  cursor: pointer;
  background: linear-gradient(135deg, #2f72d6, #1c5fbe);
  box-shadow: 0 6px 16px rgba(28, 95, 190, 0.35);
  transition: transform 0.2s ease, box-shadow 0.2s ease, filter 0.2s ease;
}
.chat-client-id,
.chat-header-client-id {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}
.chat-copy-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: none;
  background: linear-gradient(135deg, #8b5cf6, #6366f1);
  color: #fff;
  border-radius: 999px;
  padding: 3px 10px;
  font-size: 11px;
  font-weight: 600;
  line-height: 1.4;
  cursor: pointer;
  box-shadow: 0 6px 14px rgba(99, 102, 241, 0.22);
  transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease, background 0.18s ease, color 0.18s ease;
}
.chat-copy-btn:hover {
  background: linear-gradient(135deg, #7c3aed, #4f46e5);
  box-shadow: 0 8px 18px rgba(79, 70, 229, 0.28);
  transform: translateY(-1px);
}
.chat-copy-btn i {
  font-size: 13px;
}
.chat-copy-btn.is-copied {
  background: linear-gradient(135deg, #34d399, #22c55e);
  color: #f0fdf4;
  box-shadow: 0 8px 18px rgba(34, 197, 94, 0.24);
}
.chat-title-wrap {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.chat-header-client-id {
  font-size: 11px;
  opacity: 0.95;
}
.chat-copy-btn.is-header {
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.3), rgba(219, 234, 254, 0.18));
  border: 1px solid rgba(255, 255, 255, 0.42);
  border-color: rgba(255, 255, 255, 0.42);
  color: #fff;
  box-shadow: 0 8px 18px rgba(20, 66, 148, 0.22);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}
.chat-copy-btn.is-header:hover {
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.38), rgba(191, 219, 254, 0.24));
  border-color: rgba(255, 255, 255, 0.62);
  box-shadow: 0 10px 22px rgba(20, 66, 148, 0.28);
}
.chat-copy-btn.is-header i {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.16);
  font-size: 11px;
}
.chat-copy-btn.is-header.is-copied {
  background: linear-gradient(135deg, rgba(52, 211, 153, 0.28), rgba(22, 163, 74, 0.24));
  border-color: rgba(187, 247, 208, 0.78);
  color: #effef5;
  box-shadow: 0 10px 22px rgba(22, 101, 52, 0.26);
}
.chat-copy-btn.is-header.is-copied i {
  background: rgba(255, 255, 255, 0.2);
}
.chat-queue-list .chat-copy-btn {
  background: linear-gradient(135deg, #8b5cf6, #6366f1);
  color: #fff;
}
.chat-nav-btn .icon {
  font-size: 16px;
}
.chat-nav-label {
  line-height: 1;
}
.chat-nav-btn:hover {
  transform: translateY(-1px);
  box-shadow: 0 8px 20px rgba(28, 95, 190, 0.45);
  filter: brightness(1.03);
}
.chat-nav-btn:active {
  transform: translateY(0);
}
.chat-badge-animated {
  position: absolute;
  top: 0;
  right: 0;
  transform: translate(45%, -45%);
  z-index: 2;
  background: linear-gradient(135deg, #ff3860, #ff6384, #ff3860);
  color: #fff;
  font-weight: 700;
  border-radius: 999px;
  min-width: 20px;
  height: 20px;
  padding: 0 6px;
  font-size: 11px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 2px solid #fff;
  box-shadow: 0 0 8px rgba(255, 56, 96, 0.7), 0 0 15px rgba(255, 56, 96, 0.4);
  animation: popIn 0.4s ease, pulseGlow 2s infinite ease-in-out;
  transform-origin: center;
}
@keyframes popIn {
0% {
    transform: scale(0);
    opacity: 0;
}
60% {
    transform: scale(1.3);
    opacity: 1;
}
100% {
    transform: scale(1);
}
}
@keyframes pulseGlow {
0% {
    box-shadow: 0 0 6px rgba(255, 56, 96, 0.7), 0 0 10px rgba(255, 56, 96, 0.4);
}
50% {
    box-shadow: 0 0 14px #ff3860, 0 0 20px rgba(255, 56, 96, 0.6);
    transform: scale(1.1);
}
100% {
    box-shadow: 0 0 6px rgba(255, 56, 96, 0.7), 0 0 10px rgba(255, 56, 96, 0.4);
    transform: scale(1);
}
}
.badge-bounce-enter-active,
.badge-bounce-leave-active {
  transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
.badge-bounce-enter-from,
.badge-bounce-leave-to {
  transform: scale(0);
  opacity: 0;
}
.chat-window {
  position: fixed;
  width: 420px;
  height: 500px;
  background: #ffffff;
  border-radius: 14px;
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
  overflow: hidden;
  animation: slideUp 0.4s ease;
  display: flex;
  flex-direction: column;
}
.chat-window-enter-active,
.chat-window-leave-active {
  transition: opacity 0.25s ease, transform 0.25s ease;
}
.chat-window-enter,
.chat-window-leave-to {
  opacity: 0;
  transform: translateY(10px);
}
@keyframes slideUp {
0% {
    transform: translateY(40px) scale(0.9);
    opacity: 0;
}
100% {
    transform: translateY(0) scale(1);
    opacity: 1;
}
}
.chat-header {
  background: linear-gradient(135deg, #3273dc, #4a90e2);
  color: #fff;
  padding: 10px 14px;
  font-weight: 600;
  font-size: 15px;
  cursor: move;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.chat-title {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.minimized-unread-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 18px;
  height: 18px;
  padding: 0 6px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 700;
  color: #fff;
  background: #ff3860;
}
.chat-header-actions {
  display: flex;
  align-items: center;
  gap: 6px;
}
.header-btn {
  background: transparent;
  border: none;
  color: white;
  font-size: 16px;
  cursor: pointer;
  width: 26px;
  height: 26px;
  border-radius: 4px;
}
.header-btn:hover {
  background: rgba(255, 255, 255, 0.2);
}
.chat-body {
  flex: 1;
  padding: 10px;
  overflow-y: auto;
  background: #f8f9fb;
}
.chat-queue-box {
  background: rgba(255, 255, 255, 0.95);
  border-radius: 14px;
  padding: 20px;
}
.chat-queue-box h3 {
  font-size: 18px;
  font-weight: 700;
  color: #2563eb;
  border-bottom: 2px solid #2563eb;
  padding-bottom: 8px;
  margin-bottom: 12px;
}
.chat-queue-list li {
  list-style: none;
  background: #f9fafc;
  border-radius: 10px;
  padding: 10px 14px;
  margin-bottom: 8px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.chat-queue-list li p {
  margin: 0;
  font-weight: 600;
  color: #111827;
}
.chat-queue-list li small {
  color: #6b7280;
  font-size: 12px;
}
.chat-queue-list button {
  background: linear-gradient(135deg, #8b5cf6, #6366f1);
  border: none;
  color: #fff;
  font-weight: 600;
  border-radius: 8px;
  padding: 6px 14px;
  cursor: pointer;
}
.chat-queue-list button:disabled {
  opacity: 0.7;
  cursor: not-allowed;
}
.chat-open-actions {
  display: flex;
  gap: 8px;
}
.chat-close-btn {
  background: linear-gradient(135deg, #ff5e62, #ff3b6b);
}
.chat-empty-state {
  margin-top: 8px;
  margin-bottom: 14px;
  color: #6b7280;
  font-size: 12px;
}
.chat-window.is-minimized {
  width: 320px;
  height: auto;
}
.chat-window.is-minimized .chat-header {
  cursor: pointer;
}
.minimized-overflow-indicator {
  position: fixed;
  right: 16px;
  bottom: 60px;
  height: 30px;
  padding: 0 12px;
  border: 0;
  border-radius: 999px;
  color: #fff;
  font-weight: 700;
  font-size: 12px;
  cursor: pointer;
  background: #1f2937;
  box-shadow: 0 6px 14px rgba(0, 0, 0, 0.25);
  z-index: 8000;
}
.b-dialog {
  z-index: 9999 !important;
}
@media (max-width: 1023px) {
.chat-nav-btn {
    height: 34px;
    min-width: 84px;
    padding: 0 12px;
    font-size: 12px;
}
.chat-window {
    width: calc(100vw - 16px);
    max-width: 420px;
}
.chat-window.is-minimized {
    width: calc(100vw - 16px);
    max-width: 320px;
}
}

.chat-container {
  display: flex;
  flex-direction: column;
  height: 100%;
  background: #f9fafc;
  border-radius: 14px;
  overflow: hidden;
}
.messages {
  flex: 1;
  padding: 10px;
  overflow-y: auto;
  background: linear-gradient(to bottom, #ffffff, #f2f6fb);
  scroll-behavior: smooth;
}
.message-wrapper {
  display: flex;
  margin-bottom: 6px;
  max-width: 90%;
}

/* Cliente y Técnico */
.message-wrapper.client { justify-content: flex-start;
}
.message-wrapper.own { justify-content: flex-end;
}
.message-wrapper.client .bubble {
  background: #e9edf5;
  color: #111;
  border-radius: 14px 14px 14px 4px;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
}
.message-wrapper.own .bubble {
  background: linear-gradient(135deg, #5a93f7, #3b82f6);
  color: #fff;
  border-radius: 14px 14px 4px 14px;
  box-shadow: 0 2px 6px rgba(91, 141, 239, 0.35);
}
.bubble {
  position: relative;
  padding: 8px 12px 10px 12px;
  font-size: 14px;
  line-height: 1.4;
  display: inline-block;
  max-width: 80%;
  word-wrap: break-word;
  white-space: pre-wrap;
  animation: fadeIn 0.25s ease;
}
.meta { font-size: 12px; margin-bottom: 2px; font-weight: 600; opacity: 0.9;
}
.text { margin-bottom: 2px;
}
.timestamp {
  font-size: 11px;
  opacity: 0.7;
  text-align: right;
  margin-top: 2px;
  display: block;
}

/* Lightbox */
.img-lightbox {
  position: fixed;
  top: 0; left: 0;
  width: 100%; height: 100%;
  background: rgba(0, 0, 0, 0.8);
  z-index: 3000;
  display: flex;
  align-items: center;
  justify-content: center;
}
.img-lightbox-bg {
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0; left: 0;
}
.img-lightbox-content {
  max-width: 90%;
  max-height: 90%;
  border-radius: 12px;
  box-shadow: 0 0 25px rgba(0, 0, 0, 0.5);
  animation: zoomIn 0.25s ease;
}
@keyframes zoomIn {
from { transform: scale(0.85); opacity: 0;
}
to { transform: scale(1); opacity: 1;
}
}

/* Footer */
.chat-footer {
  display: flex;
  align-items: center;
  padding: 8px;
  border-top: 1px solid #ddd;
  background: #fff;
}
.chat-input-wrapper {
  display: flex;
  align-items: center;
  position: relative;
  width: 100%;
}
.chat-input-wrapper input {
  flex: 1;
  border: 1px solid #ccc;
  border-radius: 8px;
  padding: 7px 9px;
  font-size: 14px;
}
.chat-input-wrapper button {
  background: linear-gradient(135deg, #4a90e2, #5b9dfc);
  border: none;
  color: white;
  border-radius: 8px;
  padding: 7px 10px;
  margin-left: 8px;
  cursor: pointer;
  transition: transform 0.2s ease, background 0.2s ease;
}
.chat-input-wrapper button:hover {
  transform: scale(1.05);
  background: linear-gradient(135deg, #3b82f6, #4a90e2);
}
.char-counter {
  position: absolute;
  top: -16px;
  right: 12px;
  font-size: 11px;
  opacity: 0.6;
  color: #555;
}
.char-counter.warning { color: #eab308; opacity: 0.9;
}
/* ✨ Animación de subida */
.chat-uploading {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 10px;
  background: #eef5ff;
  color: #004aad;
  padding: 8px 14px;
  border-radius: 12px;
  font-size: 13px;
  margin: 8px auto;
  width: fit-content;
  box-shadow: 0 2px 6px rgba(0,0,0,0.1);
  animation: fadeIn 0.3s ease;
}
.chat-uploading .spinner {
  width: 18px;
  height: 18px;
  border: 2px solid #c7d8ff;
  border-top: 2px solid #004aad;
  border-radius: 50%;
  animation: spin 0.8s linear infinite;
}
@keyframes spin {
to { transform: rotate(360deg);
}
}
.upload-text {
  font-weight: 500;
}
.fade-out {
  opacity: 0;
  transform: translateY(-5px);
  transition: opacity 0.4s ease, transform 0.4s ease;
}
/* === 🖼️ Overlay arrastrar imagen SOLO DENTRO DEL CHAT === */
.drag-overlay {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.4);
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  font-size: 18px;
  font-weight: 500;
  text-align: center;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.3s ease;
  border-radius: 10px;
}
.drag-overlay.visible {
  opacity: 1;
  pointer-events: all;
}
.drag-inner {
  border: 2px dashed #fff;
  border-radius: 12px;
  padding: 25px 40px;
  background: rgba(255, 255, 255, 0.1);
  text-shadow: 0 2px 6px rgba(0,0,0,0.3);
}


/* === 🖱️ Cursor tipo mano en imágenes === */
.text img {
  cursor: pointer;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
  border-radius: 8px;
  display: block;
  width: 320px !important;
  max-width: 100% !important;
  height: auto !important;
  box-shadow: 0 2px 6px rgba(0,0,0,0.15);
}
.text img:hover {
  transform: scale(1.05);
  box-shadow: 0 0 8px rgba(0,0,0,0.3);
}

/* === 🔍 Overlay ampliación imagen === */
.img-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.85);
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 10000;
  animation: fadeIn 0.2s ease;
}
.img-overlay img {
  max-width: 90%;
  max-height: 90%;
  border-radius: 10px;
  box-shadow: 0 0 20px rgba(255,255,255,0.2);
}
.img-overlay.fade-out {
  opacity: 0;
  transition: opacity 0.3s ease;
}

/* === 🖼️ Overlay arrastrar imagen === */
.drag-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.45);
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  font-size: 20px;
  font-weight: 500;
  text-align: center;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.3s ease;
  z-index: 9999;
}
.drag-overlay.visible {
  opacity: 1;
  pointer-events: all;
}
.drag-inner {
  border: 2px dashed #fff;
  border-radius: 12px;
  padding: 30px 50px;
  background: rgba(255,255,255,0.15);
  text-shadow: 0 2px 6px rgba(0,0,0,0.3);
}
.img-overlay img {
  animation: zoomIn 0.25s ease;
}
@keyframes zoomIn {
from { transform: scale(0.85); opacity: 0;
}
to { transform: scale(1); opacity: 1;
}
}



/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9tZW50cy9HbG9iYWxDaGF0TGF1bmNoZXIudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb21lbnRzL2Fzc2V0cy9qcy9jb21wb21lbnRzL0NoYXQudnVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUErbUJBO0VBQ0UsbUJBQWtCO0VBQ2xCLHFCQUFvQjtFQUNwQixvQkFBbUI7RUFDbkIsU0FBUTtFQUNSLGFBQVk7RUFDWixnQkFBZTtFQUNmLGdCQUFlO0VBQ2YsVUFBUztFQUNULHFCQUFvQjtFQUNwQixZQUFXO0VBQ1gsaUJBQWdCO0VBQ2hCLGdCQUFlO0VBQ2Ysc0JBQXFCO0VBQ3JCLGdCQUFlO0VBQ2Ysc0RBQXFEO0VBQ3JELCtDQUE4QztFQUM5Qyx3RUFBdUU7Q0FDeEU7QUFFRDs7RUFFRSxxQkFBb0I7RUFDcEIsb0JBQW1CO0VBQ25CLFNBQVE7RUFDUixnQkFBZTtDQUNoQjtBQUVEO0VBQ0UscUJBQW9CO0VBQ3BCLG9CQUFtQjtFQUNuQixTQUFRO0VBQ1IsYUFBWTtFQUNaLHNEQUFxRDtFQUNyRCxZQUFXO0VBQ1gscUJBQW9CO0VBQ3BCLGtCQUFpQjtFQUNqQixnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQixpQkFBZ0I7RUFDaEIsZ0JBQWU7RUFDZixnREFBK0M7RUFDL0MsMEhBQXlIO0NBQzFIO0FBRUQ7RUFDRSxzREFBcUQ7RUFDckQsK0NBQThDO0VBQzlDLDRCQUEyQjtDQUM1QjtBQUVEO0VBQ0UsZ0JBQWU7Q0FDaEI7QUFFRDtFQUNFLHNEQUFxRDtFQUNyRCxlQUFjO0VBQ2QsK0NBQThDO0NBQy9DO0FBRUQ7RUFDRSxjQUFhO0VBQ2IsdUJBQXNCO0VBQ3RCLFNBQVE7RUFDUixhQUFZO0NBQ2I7QUFFRDtFQUNFLGdCQUFlO0VBQ2YsY0FBYTtDQUNkO0FBRUQ7RUFDRSx5RkFBd0Y7RUFDeEYsNENBQTJDO0VBQzNDLHdDQUF1QztFQUN2QyxZQUFXO0VBQ1gsK0NBQThDO0VBQzlDLDJC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Q0E7Q0FDQTtBQUVBO0VBQ0E7RUFDQTtFQUNBO0NBQ0E7O0FBRUE7QUFDQTtDQUFBO0FBQ0E7Q0FBQTtBQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDQTtBQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0NBQ0E7QUFFQTtDQUFBO0FBQ0E7Q0FBQTtBQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtDQUNBOztBQUVBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDQTtBQUNBO0FBQ0E7Q0FBQTtBQUNBO0NBQUE7Q0FDQTs7QUFFQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDQTtBQUNBO0NBQUE7QUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDQTtBQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0NBQ0E7QUFFQTtBQUNBO0NBQUE7Q0FDQTtBQUVBO0VBQ0E7Q0FDQTtBQUVBO0VBQ0E7RUFDQTtFQUNBO0NBQ0E7QUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDQTs7O0FBR0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7RUFDQTtDQUNBOztBQUVBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0VBQ0E7Q0FDQTs7QUFFQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7Q0FDQTtBQUNBO0FBQ0E7Q0FBQTtBQUNBO0NBQUE7Q0FDQSIsImZpbGUiOiJnbG9iYWxfY2hhdC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLmNoYXQtbmF2LWJ0biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogOHB4O1xuICBoZWlnaHQ6IDM2cHg7XG4gIG1pbi13aWR0aDogOTRweDtcbiAgcGFkZGluZzogMCAxNHB4O1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBsZXR0ZXItc3BhY2luZzogMC4zcHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzJmNzJkNiwgIzFjNWZiZSk7XG4gIGJveC1zaGFkb3c6IDAgNnB4IDE2cHggcmdiYSgyOCwgOTUsIDE5MCwgMC4zNSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2UsIGJveC1zaGFkb3cgMC4ycyBlYXNlLCBmaWx0ZXIgMC4ycyBlYXNlO1xufVxuXG4uY2hhdC1jbGllbnQtaWQsXG4uY2hhdC1oZWFkZXItY2xpZW50LWlkIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNnB4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi5jaGF0LWNvcHktYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNnB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM4YjVjZjYsICM2MzY2ZjEpO1xuICBjb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gIHBhZGRpbmc6IDNweCAxMHB4O1xuICBmb250LXNpemU6IDExcHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm94LXNoYWRvdzogMCA2cHggMTRweCByZ2JhKDk5LCAxMDIsIDI0MSwgMC4yMik7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE4cyBlYXNlLCBib3gtc2hhZG93IDAuMThzIGVhc2UsIGJvcmRlci1jb2xvciAwLjE4cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMThzIGVhc2UsIGNvbG9yIDAuMThzIGVhc2U7XG59XG5cbi5jaGF0LWNvcHktYnRuOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzdjM2FlZCwgIzRmNDZlNSk7XG4gIGJveC1zaGFkb3c6IDAgOHB4IDE4cHggcmdiYSg3OSwgNzAsIDIyOSwgMC4yOCk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbn1cblxuLmNoYXQtY29weS1idG4gaSB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cblxuLmNoYXQtY29weS1idG4uaXMtY29waWVkIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzM0ZDM5OSwgIzIyYzU1ZSk7XG4gIGNvbG9yOiAjZjBmZGY0O1xuICBib3gtc2hhZG93OiAwIDhweCAxOHB4IHJnYmEoMzQsIDE5NywgOTQsIDAuMjQpO1xufVxuXG4uY2hhdC10aXRsZS13cmFwIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAycHg7XG4gIG1pbi13aWR0aDogMDtcbn1cblxuLmNoYXQtaGVhZGVyLWNsaWVudC1pZCB7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgb3BhY2l0eTogMC45NTtcbn1cblxuLmNoYXQtY29weS1idG4uaXMtaGVhZGVyIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpLCByZ2JhKDIxOSwgMjM0LCAyNTQsIDAuMTgpKTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQyKTtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDIpO1xuICBjb2xvcjogI2ZmZjtcbiAgYm94LXNoYWRvdzogMCA4cHggMThweCByZ2JhKDIwLCA2NiwgMTQ4LCAwLjIyKTtcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7XG4gIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7XG59XG5cbi5jaGF0LWNvcHktYnRuLmlzLWhlYWRlcjpob3ZlciB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zOCksIHJnYmEoMTkxLCAyMTksIDI1NCwgMC4yNCkpO1xuICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42Mik7XG4gIGJveC1zaGFkb3c6IDAgMTBweCAyMnB4IHJnYmEoMjAsIDY2LCAxNDgsIDAuMjgpO1xufVxuXG4uY2hhdC1jb3B5LWJ0bi5pcy1oZWFkZXIgaSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6IDE4cHg7XG4gIGhlaWdodDogMThweDtcbiAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNik7XG4gIGZvbnQtc2l6ZTogMTFweDtcbn1cblxuLmNoYXQtY29weS1idG4uaXMtaGVhZGVyLmlzLWNvcGllZCB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoNTIsIDIxMSwgMTUzLCAwLjI4KSwgcmdiYSgyMiwgMTYzLCA3NCwgMC4yNCkpO1xuICBib3JkZXItY29sb3I6IHJnYmEoMTg3LCAyNDcsIDIwOCwgMC43OCk7XG4gIGNvbG9yOiAjZWZmZWY1O1xuICBib3gtc2hhZG93OiAwIDEwcHggMjJweCByZ2JhKDIyLCAxMDEsIDUyLCAwLjI2KTtcbn1cblxuLmNoYXQtY29weS1idG4uaXMtaGVhZGVyLmlzLWNvcGllZCBpIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xufVxuXG4uY2hhdC1xdWV1ZS1saXN0IC5jaGF0LWNvcHktYnRuIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzhiNWNmNiwgIzYzNjZmMSk7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG4uY2hhdC1uYXYtYnRuIC5pY29uIHtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuXG4uY2hhdC1uYXYtbGFiZWwge1xuICBsaW5lLWhlaWdodDogMTtcbn1cblxuLmNoYXQtbmF2LWJ0bjpob3ZlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgYm94LXNoYWRvdzogMCA4cHggMjBweCByZ2JhKDI4LCA5NSwgMTkwLCAwLjQ1KTtcbiAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMDMpO1xufVxuXG4uY2hhdC1uYXYtYnRuOmFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLmNoYXQtYmFkZ2UtYW5pbWF0ZWQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDQ1JSwgLTQ1JSk7XG4gIHotaW5kZXg6IDI7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmZjM4NjAsICNmZjYzODQsICNmZjM4NjApO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gIG1pbi13aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICBwYWRkaW5nOiAwIDZweDtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNmZmY7XG4gIGJveC1zaGFkb3c6IDAgMCA4cHggcmdiYSgyNTUsIDU2LCA5NiwgLjcpLCAwIDAgMTVweCByZ2JhKDI1NSwgNTYsIDk2LCAuNCk7XG4gIGFuaW1hdGlvbjogcG9wSW4gMC40cyBlYXNlLCBwdWxzZUdsb3cgMnMgaW5maW5pdGUgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbn1cblxuQGtleWZyYW1lcyBwb3BJbiB7XG4gIDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgwKTsgb3BhY2l0eTogMDsgfVxuICA2MCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMyk7IG9wYWNpdHk6IDE7IH1cbiAgMTAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH1cbn1cblxuQGtleWZyYW1lcyBwdWxzZUdsb3cge1xuICAwJSB7IGJveC1zaGFkb3c6IDAgMCA2cHggcmdiYSgyNTUsIDU2LCA5NiwgLjcpLCAwIDAgMTBweCByZ2JhKDI1NSwgNTYsIDk2LCAuNCk7IH1cbiAgNTAlIHsgYm94LXNoYWRvdzogMCAwIDE0cHggcmdiYSgyNTUsIDU2LCA5NiwgMSksIDAgMCAyMHB4IHJnYmEoMjU1LCA1NiwgOTYsIC42KTsgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOyB9XG4gIDEwMCUgeyBib3gtc2hhZG93OiAwIDAgNnB4IHJnYmEoMjU1LCA1NiwgOTYsIC43KSwgMCAwIDEwcHggcmdiYSgyNTUsIDU2LCA5NiwgLjQpOyB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9XG59XG5cbi5iYWRnZS1ib3VuY2UtZW50ZXItYWN0aXZlLFxuLmJhZGdlLWJvdW5jZS1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBhbGwgMC40cyBjdWJpYy1iZXppZXIoMC4xNzUsIDAuODg1LCAwLjMyLCAxLjI3NSk7XG59XG5cbi5iYWRnZS1ib3VuY2UtZW50ZXItZnJvbSxcbi5iYWRnZS1ib3VuY2UtbGVhdmUtdG8ge1xuICB0cmFuc2Zvcm06IHNjYWxlKDApO1xuICBvcGFjaXR5OiAwO1xufVxuXG4uY2hhdC13aW5kb3cge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHdpZHRoOiA0MjBweDtcbiAgaGVpZ2h0OiA1MDBweDtcbiAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgYm9yZGVyLXJhZGl1czogMTRweDtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBhbmltYXRpb246IHNsaWRlVXAgMC40cyBlYXNlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuXG4uY2hhdC13aW5kb3ctZW50ZXItYWN0aXZlLFxuLmNoYXQtd2luZG93LWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yNXMgZWFzZSwgdHJhbnNmb3JtIDAuMjVzIGVhc2U7XG59XG5cbi5jaGF0LXdpbmRvdy1lbnRlcixcbi5jaGF0LXdpbmRvdy1sZWF2ZS10byB7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTtcbn1cblxuQGtleWZyYW1lcyBzbGlkZVVwIHtcbiAgMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCkgc2NhbGUoMC45KTsgb3BhY2l0eTogMDsgfVxuICAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDEpOyBvcGFjaXR5OiAxOyB9XG59XG5cbi5jaGF0LWhlYWRlciB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMzMjczZGMsICM0YTkwZTIpO1xuICBjb2xvcjogI2ZmZjtcbiAgcGFkZGluZzogMTBweCAxNHB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBmb250LXNpemU6IDE1cHg7XG4gIGN1cnNvcjogbW92ZTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uY2hhdC10aXRsZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDhweDtcbn1cblxuLm1pbmltaXplZC11bnJlYWQtYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1pbi13aWR0aDogMThweDtcbiAgaGVpZ2h0OiAxOHB4O1xuICBwYWRkaW5nOiAwIDZweDtcbiAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQ6ICNmZjM4NjA7XG59XG5cbi5jaGF0LWhlYWRlci1hY3Rpb25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA2cHg7XG59XG5cbi5oZWFkZXItYnRuIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgY29sb3I6IHdoaXRlO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgd2lkdGg6IDI2cHg7XG4gIGhlaWdodDogMjZweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4uaGVhZGVyLWJ0bjpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbn1cblxuLmNoYXQtYm9keSB7XG4gIGZsZXg6IDE7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIGJhY2tncm91bmQ6ICNmOGY5ZmI7XG59XG5cbi5jaGF0LXF1ZXVlLWJveCB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7XG4gIGJvcmRlci1yYWRpdXM6IDE0cHg7XG4gIHBhZGRpbmc6IDIwcHg7XG59XG5cbi5jaGF0LXF1ZXVlLWJveCBoMyB7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY29sb3I6ICMyNTYzZWI7XG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjMjU2M2ViO1xuICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xufVxuXG4uY2hhdC1xdWV1ZS1saXN0IGxpIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZDogI2Y5ZmFmYztcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgcGFkZGluZzogMTBweCAxNHB4O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmNoYXQtcXVldWUtbGlzdCBsaSBwIHtcbiAgbWFyZ2luOiAwO1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogIzExMTgyNztcbn1cblxuLmNoYXQtcXVldWUtbGlzdCBsaSBzbWFsbCB7XG4gIGNvbG9yOiAjNmI3MjgwO1xuICBmb250LXNpemU6IDEycHg7XG59XG5cbi5jaGF0LXF1ZXVlLWxpc3QgYnV0dG9uIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzhiNWNmNiwgIzYzNjZmMSk7XG4gIGJvcmRlcjogbm9uZTtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgcGFkZGluZzogNnB4IDE0cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmNoYXQtcXVldWUtbGlzdCBidXR0b246ZGlzYWJsZWQge1xuICBvcGFjaXR5OiAwLjc7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5jaGF0LW9wZW4tYWN0aW9ucyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogOHB4O1xufVxuXG4uY2hhdC1jbG9zZS1idG4ge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmY1ZTYyLCAjZmYzYjZiKTtcbn1cblxuLmNoYXQtZW1wdHktc3RhdGUge1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIG1hcmdpbi1ib3R0b206IDE0cHg7XG4gIGNvbG9yOiAjNmI3MjgwO1xuICBmb250LXNpemU6IDEycHg7XG59XG5cbi5jaGF0LXdpbmRvdy5pcy1taW5pbWl6ZWQge1xuICB3aWR0aDogMzIwcHg7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLmNoYXQtd2luZG93LmlzLW1pbmltaXplZCAuY2hhdC1oZWFkZXIge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5taW5pbWl6ZWQtb3ZlcmZsb3ctaW5kaWNhdG9yIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICByaWdodDogMTZweDtcbiAgYm90dG9tOiA2MHB4O1xuICBoZWlnaHQ6IDMwcHg7XG4gIHBhZGRpbmc6IDAgMTJweDtcbiAgYm9yZGVyOiAwO1xuICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kOiAjMWYyOTM3O1xuICBib3gtc2hhZG93OiAwIDZweCAxNHB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIHotaW5kZXg6IDgwMDA7XG59XG5cbi5iLWRpYWxvZyB7XG4gIHotaW5kZXg6IDk5OTkgIWltcG9ydGFudDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDEwMjNweCkge1xuICAuY2hhdC1uYXYtYnRuIHtcbiAgICBoZWlnaHQ6IDM0cHg7XG4gICAgbWluLXdpZHRoOiA4NHB4O1xuICAgIHBhZGRpbmc6IDAgMTJweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gIH1cblxuICAuY2hhdC13aW5kb3cge1xuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMTZweCk7XG4gICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgfVxuXG4gIC5jaGF0LXdpbmRvdy5pcy1taW5pbWl6ZWQge1xuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMTZweCk7XG4gICAgbWF4LXdpZHRoOiAzMjBweDtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vYXNzZXRzL2pzL2NvbXBvbWVudHMvR2xvYmFsQ2hhdExhdW5jaGVyLnZ1ZSIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImNoYXQtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VzXCIgcmVmPVwibWVzc2FnZXNDb250YWluZXJcIj5cbiAgICAgIDx0cmFuc2l0aW9uLWdyb3VwIG5hbWU9XCJmYWRlLXNsaWRlXCIgdGFnPVwiZGl2XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICB2LWZvcj1cIihtLCBpKSBpbiBkaXNwbGF5ZWRNZXNzYWdlc1wiXG4gICAgICAgICAgOmtleT1cIm0uaWQgfHwgaVwiXG4gICAgICAgICAgY2xhc3M9XCJtZXNzYWdlLXdyYXBwZXJcIlxuICAgICAgICAgIDpjbGFzcz1cIntcbiAgICAgICAgICAgIGNsaWVudDogbS5hdXRob3IgJiYgbS5hdXRob3IudG9Mb3dlckNhc2UoKSAhPT0gYXV0aG9yLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICBvd246IG0uYXV0aG9yICYmIG0uYXV0aG9yLnRvTG93ZXJDYXNlKCkgPT09IGF1dGhvci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnViYmxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0YVwiPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IG0uYXV0aG9yIH19PC9zdHJvbmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0XCIgdi1odG1sPVwibS5tZXNzYWdlXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZXN0YW1wXCIgdi1pZj1cIm0uY3JlYXRlZEF0XCI+e3sgZm9ybWF0RGF0ZShtLmNyZWF0ZWRBdCkgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RyYW5zaXRpb24tZ3JvdXA+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2hhdC1mb290ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjaGF0LWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoYXItY291bnRlclwiIDpjbGFzcz1cInsgd2FybmluZzogbmVhckxpbWl0IH1cIj5cbiAgICAgICAgICB7eyBuZXdNZXNzYWdlLmxlbmd0aCB9fS97eyBtYXhMZW5ndGggfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdi1tb2RlbD1cIm5ld01lc3NhZ2VcIlxuICAgICAgICAgIEBrZXl1cC5lbnRlcj1cInNlbmRNZXNzYWdlXCJcbiAgICAgICAgICBAcGFzdGU9XCJoYW5kbGVQYXN0ZVwiXG4gICAgICAgICAgQGRyb3AucHJldmVudD1cImhhbmRsZURyb3BcIlxuICAgICAgICAgIEBkcmFnb3Zlci5wcmV2ZW50XG4gICAgICAgICAgOmRpc2FibGVkPVwiY2hhdENsb3NlZFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFc2NyaWJlIHVuIG1lbnNhamUgbyBwZWdhIHVuYSBpbWFnZW4uLi5cIlxuICAgICAgICAgIDptYXhsZW5ndGg9XCJtYXhMZW5ndGhcIlxuICAgICAgICAvPlxuICAgICAgICA8YnV0dG9uIEBjbGljaz1cInNlbmRNZXNzYWdlXCIgOmRpc2FibGVkPVwiY2hhdENsb3NlZFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1zZW5kXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgXCJyZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGNoYXRVaWQ6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGF1dGhvcjogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgaXNUZWNoVXNlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFwaUJhc2VVcmw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBcIi9hcGlcIiB9LFxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5ld01lc3NhZ2U6IFwiXCIsXG4gICAgICBtZXNzYWdlczogW10sXG4gICAgICBjaGF0Q2xvc2VkOiBmYWxzZSxcbiAgICAgIHBvbGxlcjogbnVsbCxcbiAgICAgIG91dHNpZGVDbGlja0hhbmRsZXI6IG51bGwsXG4gICAgICBoYXNMb2FkZWRPbmNlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZ01lc3NhZ2VzOiBmYWxzZSxcbiAgICAgIGhhc1BlbmRpbmdNZXNzYWdlc1JlbG9hZDogZmFsc2UsXG4gICAgICBzaG91bGRTY3JvbGxUb0JvdHRvbU9uTmV4dFJlbmRlcjogdHJ1ZSxcbiAgICB9O1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlzcGxheWVkTWVzc2FnZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXNzYWdlcy5maWx0ZXIoKG0pID0+ICF0aGlzLnNob3VsZEhpZGVNZXNzYWdlKG0pKTtcbiAgICB9LFxuICAgIGlzVGVjaCgpIHtcbiAgICAgIGlmICh0aGlzLmlzVGVjaFVzZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hdXRob3JcbiAgICAgICAgLm5vcm1hbGl6ZShcIk5GRFwiKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCBcIlwiKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAuaW5jbHVkZXMoXCJ0ZWNuaWNvXCIpO1xuICAgIH0sXG4gICAgbWF4TGVuZ3RoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUZWNoID8gNTAwIDogMzAwO1xuICAgIH0sXG4gICAgbmVhckxpbWl0KCkge1xuICAgICAgcmV0dXJuIHRoaXMubmV3TWVzc2FnZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCAtIDUwO1xuICAgIH0sXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBjaGF0VWlkKCkge1xuICAgICAgdGhpcy5uZXdNZXNzYWdlID0gXCJcIjtcbiAgICAgIHRoaXMubWVzc2FnZXMgPSBbXTtcbiAgICAgIHRoaXMuY2hhdENsb3NlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5oYXNMb2FkZWRPbmNlID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3VsZFNjcm9sbFRvQm90dG9tT25OZXh0UmVuZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMubG9hZE1lc3NhZ2VzKCk7XG4gICAgfSxcbiAgICBtZXNzYWdlcygpIHtcbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy4kcmVmcy5tZXNzYWdlc0NvbnRhaW5lcjtcbiAgICAgICAgaWYgKGNvbnRhaW5lciAmJiB0aGlzLnNob3VsZFNjcm9sbFRvQm90dG9tT25OZXh0UmVuZGVyKSB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxNZXNzYWdlc1RvQm90dG9tKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG91bGRTY3JvbGxUb0JvdHRvbU9uTmV4dFJlbmRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldHVwSW1hZ2VQcmV2aWV3KCk7IC8vIPCfkYggQcORQURFIEVTVEEgTMONTkVBIEFRVcONXG4gICAgICB9KTtcbiAgICB9LFxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgICB0aGlzLmxvYWRNZXNzYWdlcygpO1xuICAgICAgdGhpcy5zdGFydFBvbGxpbmcoKTtcbiAgICAgIHRoaXMuc2V0dXBEcmFnT3ZlcmxheSgpO1xuICAgICAgdGhpcy5iaW5kTWVzc2FnZXNTY3JvbGwoKTtcblxuICAgICAgLy8g8J+RhyBGdWVyemEgcXVlIGVsIGNoYXQgdGVuZ2EgZm9jbyBuYWRhIG3DoXMgY2FyZ2Fyc2VcbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgY29uc3QgY2hhdElucHV0ID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgICAgICBpZiAoY2hhdElucHV0KSBjaGF0SW5wdXQuZm9jdXMoKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyDwn5GHIFNpIGVsIHVzdWFyaW8gaGFjZSBjbGljayBmdWVyYSB5IHZ1ZWx2ZSwgcmVjdXBlcmEgZWwgZm9jbyBhdXRvbcOhdGljYW1lbnRlXG4gICAgICB0aGlzLm91dHNpZGVDbGlja0hhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYXRJbnB1dCA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcbiAgICAgICAgaWYgKGNoYXRJbnB1dCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBjaGF0SW5wdXQpIHtcbiAgICAgICAgICBjaGF0SW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5vdXRzaWRlQ2xpY2tIYW5kbGVyKTtcbiAgICB9LFxuXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5wb2xsZXIpIGNsZWFySW50ZXJ2YWwodGhpcy5wb2xsZXIpO1xuICAgIGlmICh0aGlzLm91dHNpZGVDbGlja0hhbmRsZXIpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5vdXRzaWRlQ2xpY2tIYW5kbGVyKTtcbiAgICAgIHRoaXMub3V0c2lkZUNsaWNrSGFuZGxlciA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuJHJlZnMubWVzc2FnZXNDb250YWluZXI7XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5oYW5kbGVNZXNzYWdlc1Njcm9sbCk7XG4gICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGFuZGxlSW1hZ2VDbGljayk7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiaW5kTWVzc2FnZXNTY3JvbGwoKSB7XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuJHJlZnMubWVzc2FnZXNDb250YWluZXI7XG4gICAgICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG4gICAgICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuaGFuZGxlTWVzc2FnZXNTY3JvbGwpO1xuICAgICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLmhhbmRsZU1lc3NhZ2VzU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGlzTmVhckJvdHRvbSgpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuJHJlZnMubWVzc2FnZXNDb250YWluZXI7XG4gICAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuIHRydWU7XG4gICAgICBjb25zdCB0aHJlc2hvbGQgPSA4MDtcbiAgICAgIHJldHVybiBjb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gY29udGFpbmVyLnNjcm9sbFRvcCAtIGNvbnRhaW5lci5jbGllbnRIZWlnaHQgPD0gdGhyZXNob2xkO1xuICAgIH0sXG4gICAgaGFuZGxlTWVzc2FnZXNTY3JvbGwoKSB7XG4gICAgICB0aGlzLnNob3VsZFNjcm9sbFRvQm90dG9tT25OZXh0UmVuZGVyID0gdGhpcy5pc05lYXJCb3R0b20oKTtcbiAgICB9LFxuICAgIHNjcm9sbE1lc3NhZ2VzVG9Cb3R0b20oKSB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLiRyZWZzLm1lc3NhZ2VzQ29udGFpbmVyO1xuICAgICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0O1xuICAgIH0sXG4gICAgbm9ybWFsaXplVGV4dCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSB8fCBcIlwiKVxuICAgICAgICAucmVwbGFjZSgvPFtePl0qPi9nLCBcIiBcIilcbiAgICAgICAgLm5vcm1hbGl6ZShcIk5GRFwiKVxuICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgXCJcIilcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoL1teYS16MC05IF0rL2csIFwiIFwiKVxuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCBcIiBcIilcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9LFxuICAgIGlzU3lzdGVtQ29ubmVjdGVkVHJpZ2dlcihtZXNzYWdlSXRlbSkge1xuICAgICAgaWYgKCFtZXNzYWdlSXRlbSkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgYXV0aG9yID0gU3RyaW5nKG1lc3NhZ2VJdGVtLmF1dGhvciB8fCBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChhdXRob3IgIT09IFwic2lzdGVtYSBkYXNpXCIpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZVRleHQobWVzc2FnZUl0ZW0ubWVzc2FnZSk7XG4gICAgICByZXR1cm4gbm9ybWFsaXplZC5pbmNsdWRlcyhcInVuIHRlY25pY28gc2UgaGEgY29uZWN0YWRvIGFsIGNoYXRcIik7XG4gICAgfSxcbiAgICBzaG91bGRIaWRlTWVzc2FnZShtZXNzYWdlSXRlbSkge1xuICAgICAgaWYgKCF0aGlzLmlzVGVjaFVzZXIpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0aGlzLmlzU3lzdGVtQ29ubmVjdGVkVHJpZ2dlcihtZXNzYWdlSXRlbSk7XG4gICAgfSxcbiAgICBhcGlVcmwocGF0aCkge1xuICAgICAgY29uc3QgY2xlYW5CYXNlID0gU3RyaW5nKHRoaXMuYXBpQmFzZVVybCB8fCBcIi9hcGlcIikucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICAgICAgY29uc3QgY2xlYW5QYXRoID0gU3RyaW5nKHBhdGggfHwgXCJcIikucmVwbGFjZSgvXlxcLy8sIFwiXCIpO1xuICAgICAgcmV0dXJuIGAke2NsZWFuQmFzZX0vJHtjbGVhblBhdGh9YDtcbiAgICB9LFxuICAgIGFzeW5jIGxvYWRNZXNzYWdlcygpIHtcbiAgICAgIGlmICh0aGlzLmlzTG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICAgIHRoaXMuaGFzUGVuZGluZ01lc3NhZ2VzUmVsb2FkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzTG9hZGluZ01lc3NhZ2VzID0gdHJ1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU3RpY2tUb0JvdHRvbSA9IHRoaXMuaXNOZWFyQm90dG9tKCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZXMgPSBBcnJheS5pc0FycmF5KHRoaXMubWVzc2FnZXMpID8gdGhpcy5tZXNzYWdlcyA6IFtdO1xuICAgICAgICBjb25zdCBwcmV2aW91c0lkcyA9IG5ldyBTZXQoXG4gICAgICAgICAgcHJldmlvdXNNZXNzYWdlcy5tYXAoKG0pID0+IFN0cmluZyhtLmlkIHx8IGAke20uYXV0aG9yfXwke20uY3JlYXRlZEF0fXwke20ubWVzc2FnZX1gKSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBheGlvcy5nZXQodGhpcy5hcGlVcmwoYGNoYXQvaGlzdG9yeS8ke3RoaXMuY2hhdFVpZH1gKSk7XG4gICAgICAgIGNvbnN0IG5leHRNZXNzYWdlcyA9IEFycmF5LmlzQXJyYXkocmVzLmRhdGEpID8gcmVzLmRhdGEgOiBbXTtcbiAgICAgICAgdGhpcy5zaG91bGRTY3JvbGxUb0JvdHRvbU9uTmV4dFJlbmRlciA9ICF0aGlzLmhhc0xvYWRlZE9uY2UgfHwgc2hvdWxkU3RpY2tUb0JvdHRvbTtcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG5leHRNZXNzYWdlcztcblxuICAgICAgICBjb25zdCBsYXN0ID0gdGhpcy5tZXNzYWdlc1t0aGlzLm1lc3NhZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbGFzdCAmJlxuICAgICAgICAgIHR5cGVvZiBsYXN0Lm1lc3NhZ2UgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICBsYXN0Lm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImNlcnJhZG9cIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jaGF0Q2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoYXRDbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc0xvYWRlZE9uY2UpIHtcbiAgICAgICAgICBjb25zdCBpbmNvbWluZ0NvdW50ID0gbmV4dE1lc3NhZ2VzLnJlZHVjZSgoYWNjLCBtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBTdHJpbmcobS5pZCB8fCBgJHttLmF1dGhvcn18JHttLmNyZWF0ZWRBdH18JHttLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNJZHMuaGFzKGtleSkpIHJldHVybiBhY2M7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRIaWRlTWVzc2FnZShtKSkgcmV0dXJuIGFjYztcblxuICAgICAgICAgICAgY29uc3QgbXNnQXV0aG9yID0gU3RyaW5nKG0uYXV0aG9yIHx8IFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3Qgb3duQXV0aG9yID0gU3RyaW5nKHRoaXMuYXV0aG9yIHx8IFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIG1zZ0F1dGhvciAhPT0gb3duQXV0aG9yID8gYWNjICsgMSA6IGFjYztcbiAgICAgICAgICB9LCAwKTtcblxuICAgICAgICAgIGlmIChpbmNvbWluZ0NvdW50ID4gMCkge1xuICAgICAgICAgICAgdGhpcy4kZW1pdChcImluY29taW5nLW1lc3NhZ2VzXCIsIHtcbiAgICAgICAgICAgICAgY2hhdFVpZDogdGhpcy5jaGF0VWlkLFxuICAgICAgICAgICAgICBjb3VudDogaW5jb21pbmdDb3VudCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFzTG9hZGVkT25jZSA9IHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCLinYwgRXJyb3IgY2FyZ2FuZG8gaGlzdG9yaWFsOlwiLCBlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTWVzc2FnZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5oYXNQZW5kaW5nTWVzc2FnZXNSZWxvYWQpIHtcbiAgICAgICAgICB0aGlzLmhhc1BlbmRpbmdNZXNzYWdlc1JlbG9hZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMubG9hZE1lc3NhZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RhcnRQb2xsaW5nKCkge1xuICAgICAgaWYgKHRoaXMucG9sbGVyKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5wb2xsZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5wb2xsZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmxvYWRNZXNzYWdlcygpLCA0MDAwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoKSB7XG4gICAgICBpZiAodGhpcy5jaGF0Q2xvc2VkKSByZXR1cm47XG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5uZXdNZXNzYWdlLnRyaW0oKTtcbiAgICAgIGlmICghdGV4dCkgcmV0dXJuO1xuXG4gICAgICBpZiAodGV4dC5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgICB0aGlzLiRidWVmeS50b2FzdC5vcGVuKHtcbiAgICAgICAgICBtZXNzYWdlOiBg4pqg77iPIE3DoXhpbW8gJHt0aGlzLm1heExlbmd0aH0gY2FyYWN0ZXJlcy5gLFxuICAgICAgICAgIHR5cGU6IFwiaXMtd2FybmluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBheGlvcy5wb3N0KHRoaXMuYXBpVXJsKFwiY2hhdC9zdG9yZVwiKSwge1xuICAgICAgICAgIGNoYXRfdWlkOiB0aGlzLmNoYXRVaWQsXG4gICAgICAgICAgYXV0aG9yOiB0aGlzLmF1dGhvcixcbiAgICAgICAgICBtZXNzYWdlOiB0ZXh0LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uZXdNZXNzYWdlID0gXCJcIjtcbiAgICAgICAgdGhpcy5zaG91bGRTY3JvbGxUb0JvdHRvbU9uTmV4dFJlbmRlciA9IHRydWU7XG4gICAgICAgIHRoaXMubG9hZE1lc3NhZ2VzKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCLinYwgRXJyb3IgZW52aWFuZG8gbWVuc2FqZTpcIiwgZSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFBFR0FSIG8gQVJSQVNUUkFSXG4gICAgYXN5bmMgaGFuZGxlUGFzdGUoZSkge1xuICAgICAgY29uc3QgaXRlbXMgPSBlLmNsaXBib2FyZERhdGEuaXRlbXM7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgaWYgKGl0ZW0udHlwZS5pbmRleE9mKFwiaW1hZ2VcIikgIT09IC0xKSB7XG4gICAgICAgICAgY29uc3QgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRJbWFnZShmaWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgaGFuZGxlRHJvcChlKSB7XG4gICAgICBjb25zdCBmaWxlID0gZS5kYXRhVHJhbnNmZXIuZmlsZXNbMF07XG4gICAgICBpZiAoZmlsZSAmJiBmaWxlLnR5cGUuc3RhcnRzV2l0aChcImltYWdlL1wiKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlKGZpbGUpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGxvYWRJbWFnZShmaWxlKSB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgZm9ybURhdGEuYXBwZW5kKFwiZmlsZVwiLCBmaWxlKTtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChcImNoYXRfdWlkXCIsIHRoaXMuY2hhdFVpZCk7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoXCJhdXRob3JcIiwgdGhpcy5hdXRob3IpO1xuXG4gICAgICAvLyDwn4yAIENyZWFyIGFuaW1hY2nDs24gZGUgY2FyZ2EgZGVudHJvIGRlbCBjaGF0XG4gICAgICBjb25zdCBjaGF0Qm94ID0gdGhpcy4kcmVmcy5tZXNzYWdlc0NvbnRhaW5lcjtcbiAgICAgIGlmICghY2hhdEJveCkgcmV0dXJuO1xuICAgICAgY29uc3QgbG9hZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGxvYWRlci5jbGFzc05hbWUgPSBcImNoYXQtdXBsb2FkaW5nXCI7XG4gICAgICBsb2FkZXIuaW5uZXJIVE1MID0gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXRleHRcIj5TdWJpZW5kbyBpbWFnZW4uLi48L2Rpdj5cbiAgICAgIGA7XG4gICAgICBjaGF0Qm94LmFwcGVuZENoaWxkKGxvYWRlcik7XG4gICAgICB0aGlzLnNjcm9sbE1lc3NhZ2VzVG9Cb3R0b20oKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXhpb3MucG9zdCh0aGlzLmFwaVVybChcImNoYXQvdXBsb2FkXCIpLCBmb3JtRGF0YSwge1xuICAgICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbG9hZGVyLnF1ZXJ5U2VsZWN0b3IoXCIudXBsb2FkLXRleHRcIikudGV4dENvbnRlbnQgPSBcIvCfk7ggSW1hZ2VuIGVudmlhZGFcIjtcbiAgICAgICAgbG9hZGVyLnF1ZXJ5U2VsZWN0b3IoXCIuc3Bpbm5lclwiKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cbiAgICAgICAgLy8g8J+UhCBlbGltaW5hciBlbCBsb2FkZXIgY29uIHVuIGZhZGUgZWxlZ2FudGVcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgbG9hZGVyLmNsYXNzTGlzdC5hZGQoXCJmYWRlLW91dFwiKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGxvYWRlci5yZW1vdmUoKSwgNTAwKTtcbiAgICAgICAgfSwgMTAwMCk7XG5cbiAgICAgICAgdGhpcy5zaG91bGRTY3JvbGxUb0JvdHRvbU9uTmV4dFJlbmRlciA9IHRydWU7XG4gICAgICAgIHRoaXMubG9hZE1lc3NhZ2VzKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHN1YmllbmRvIGltYWdlbjpcIiwgZXJyKTtcbiAgICAgICAgbG9hZGVyLnF1ZXJ5U2VsZWN0b3IoXCIudXBsb2FkLXRleHRcIikudGV4dENvbnRlbnQgPSBcIuKdjCBFcnJvciBhbCBzdWJpclwiO1xuICAgICAgICBsb2FkZXIucXVlcnlTZWxlY3RvcihcIi5zcGlubmVyXCIpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgbG9hZGVyLnN0eWxlLmJhY2tncm91bmQgPSBcIiNmY2U0ZTRcIjtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBsb2FkZXIucmVtb3ZlKCksIDIwMDApO1xuICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8vIPCfkYcgTlVFVk86IFZpc3RhIHByZXZpYSB5IGFtcGxpYWNpw7NuXG4gICAgc2V0dXBJbWFnZVByZXZpZXcoKSB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLiRyZWZzLm1lc3NhZ2VzQ29udGFpbmVyO1xuXG4gICAgICAvLyDwn5S5IEVsaW1pbmEgY3VhbHF1aWVyIGxpc3RlbmVyIHByZXZpbyAoZXZpdGEgZHVwbGljYWRvcylcbiAgICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5oYW5kbGVJbWFnZUNsaWNrKTtcblxuICAgICAgLy8g8J+UuSBWdWVsdmUgYSBhZ3JlZ2FyIGVsIGxpc3RlbmVyXG4gICAgICB0aGlzLmhhbmRsZUltYWdlQ2xpY2sgPSAoZSkgPT4ge1xuICAgICAgICBjb25zdCBpbWcgPSBlLnRhcmdldC5jbG9zZXN0KFwiaW1nXCIpO1xuICAgICAgICBpZiAoIWltZykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBvdmVybGF5LmNsYXNzTmFtZSA9IFwiaW1nLW92ZXJsYXlcIjtcbiAgICAgICAgb3ZlcmxheS5pbm5lckhUTUwgPSBgPGltZyBzcmM9XCIke2ltZy5zcmN9XCIgYWx0PVwiaW1hZ2VuIGFtcGxpYWRhXCI+YDtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdmVybGF5KTtcblxuICAgICAgICBjb25zdCBjbG9zZU92ZXJsYXkgPSAoKSA9PiB7XG4gICAgICAgICAgb3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwiZmFkZS1vdXRcIik7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBvdmVybGF5LnJlbW92ZSgpLCAyNTApO1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGVzY0hhbmRsZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGVzY0hhbmRsZXIgPSAoZXYpID0+IHtcbiAgICAgICAgICBpZiAoZXYua2V5ID09PSBcIkVzY2FwZVwiKSBjbG9zZU92ZXJsYXkoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbG9zZU92ZXJsYXkpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBlc2NIYW5kbGVyKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5oYW5kbGVJbWFnZUNsaWNrKTtcbiAgICB9LFxuXG4gICAgLy8gPT09IPCflrHvuI8gT3ZlcmxheSBjdWFuZG8gYXJyYXN0cmFzIGltw6FnZW5lcyBzb2JyZSBlbCBjaGF0ID09PVxuICAgIHNldHVwRHJhZ092ZXJsYXkoKSB7XG4gICAgICBjb25zdCBjaGF0ID0gdGhpcy4kcmVmcy5tZXNzYWdlc0NvbnRhaW5lcjtcbiAgICAgIGlmICghY2hhdCkgcmV0dXJuO1xuXG4gICAgICBjaGF0LmFkZEV2ZW50TGlzdGVuZXIoXCJkcmFnb3ZlclwiLCAoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgLy8g8J+RhyBmdWVyemEgZm9jbyBlbiBlbCBpbnB1dCAocGFyYSBoYWJpbGl0YXIgZWwgZHJvcClcbiAgICAgICAgY29uc3QgY2hhdElucHV0ID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgICAgICBpZiAoY2hhdElucHV0KSBjaGF0SW5wdXQuZm9jdXMoKTtcblxuICAgICAgICBvdmVybGF5LmNsYXNzTGlzdC5hZGQoXCJ2aXNpYmxlXCIpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIENyZWFyIG92ZXJsYXkgREVOVFJPIGRlbCBjaGF0LCBubyBkZWwgYm9keVxuICAgICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBvdmVybGF5LmNsYXNzTmFtZSA9IFwiZHJhZy1vdmVybGF5XCI7XG4gICAgICBvdmVybGF5LmlubmVySFRNTCA9IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctaW5uZXJcIj5cbiAgICAgICAgICDwn5O4IDxici8+IDxzcGFuPkFycmFzdHJhIHR1IGltYWdlbiBhcXXDrTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgICAgY2hhdC5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjsgLy8gYXNlZ3VyYSBxdWUgZWwgb3ZlcmxheSBzZSBwb3NpY2lvbmUgZGVudHJvXG4gICAgICBjaGF0LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuXG4gICAgICAvLyBNb3N0cmFyL29jdWx0YXIgb3ZlcmxheSBzb2xvIGRlbnRybyBkZWwgY2hhdFxuICAgICAgY2hhdC5hZGRFdmVudExpc3RlbmVyKFwiZHJhZ292ZXJcIiwgKGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvdmVybGF5LmNsYXNzTGlzdC5hZGQoXCJ2aXNpYmxlXCIpO1xuICAgICAgfSk7XG5cbiAgICAgIGNoYXQuYWRkRXZlbnRMaXN0ZW5lcihcImRyYWdsZWF2ZVwiLCAoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIG92ZXJsYXkuY2xhc3NMaXN0LnJlbW92ZShcInZpc2libGVcIik7XG4gICAgICB9KTtcblxuICAgICAgY2hhdC5hZGRFdmVudExpc3RlbmVyKFwiZHJvcFwiLCBhc3luYyAoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIG92ZXJsYXkuY2xhc3NMaXN0LnJlbW92ZShcInZpc2libGVcIik7XG5cbiAgICAgICAgY29uc3QgZmlsZSA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzWzBdO1xuICAgICAgICBpZiAoZmlsZSAmJiBmaWxlLnR5cGUuc3RhcnRzV2l0aChcImltYWdlL1wiKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkSW1hZ2UoZmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBmb3JtYXREYXRlKGRhdGVTdHIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlU3RyKTtcbiAgICAgICAgcmV0dXJuIGQudG9Mb2NhbGVUaW1lU3RyaW5nKFwiZXMtRVNcIiwge1xuICAgICAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHJldHVybiBkYXRlU3RyO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbi5jaGF0LWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZDogI2Y5ZmFmYztcbiAgYm9yZGVyLXJhZGl1czogMTRweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLm1lc3NhZ2VzIHtcbiAgZmxleDogMTtcbiAgcGFkZGluZzogMTBweDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2ZmZmZmZiwgI2YyZjZmYik7XG4gIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xufVxuXG4ubWVzc2FnZS13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luLWJvdHRvbTogNnB4O1xuICBtYXgtd2lkdGg6IDkwJTtcbn1cblxuLyogQ2xpZW50ZSB5IFTDqWNuaWNvICovXG4ubWVzc2FnZS13cmFwcGVyLmNsaWVudCB7IGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsgfVxuLm1lc3NhZ2Utd3JhcHBlci5vd24geyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyB9XG5cbi5tZXNzYWdlLXdyYXBwZXIuY2xpZW50IC5idWJibGUge1xuICBiYWNrZ3JvdW5kOiAjZTllZGY1O1xuICBjb2xvcjogIzExMTtcbiAgYm9yZGVyLXJhZGl1czogMTRweCAxNHB4IDE0cHggNHB4O1xuICBib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA4KTtcbn1cbi5tZXNzYWdlLXdyYXBwZXIub3duIC5idWJibGUge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNWE5M2Y3LCAjM2I4MmY2KTtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDE0cHggMTRweCA0cHggMTRweDtcbiAgYm94LXNoYWRvdzogMCAycHggNnB4IHJnYmEoOTEsIDE0MSwgMjM5LCAwLjM1KTtcbn1cblxuLmJ1YmJsZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogOHB4IDEycHggMTBweCAxMnB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LXdpZHRoOiA4MCU7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjI1cyBlYXNlO1xufVxuXG4ubWV0YSB7IGZvbnQtc2l6ZTogMTJweDsgbWFyZ2luLWJvdHRvbTogMnB4OyBmb250LXdlaWdodDogNjAwOyBvcGFjaXR5OiAwLjk7IH1cbi50ZXh0IHsgbWFyZ2luLWJvdHRvbTogMnB4OyB9XG5cbi50aW1lc3RhbXAge1xuICBmb250LXNpemU6IDExcHg7XG4gIG9wYWNpdHk6IDAuNztcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIG1hcmdpbi10b3A6IDJweDtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qIExpZ2h0Ym94ICovXG4uaW1nLWxpZ2h0Ym94IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7IGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTtcbiAgei1pbmRleDogMzAwMDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG4uaW1nLWxpZ2h0Ym94LWJnIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB0b3A6IDA7IGxlZnQ6IDA7XG59XG4uaW1nLWxpZ2h0Ym94LWNvbnRlbnQge1xuICBtYXgtd2lkdGg6IDkwJTtcbiAgbWF4LWhlaWdodDogOTAlO1xuICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICBib3gtc2hhZG93OiAwIDAgMjVweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIGFuaW1hdGlvbjogem9vbUluIDAuMjVzIGVhc2U7XG59XG5Aa2V5ZnJhbWVzIHpvb21JbiB7XG4gIGZyb20geyB0cmFuc2Zvcm06IHNjYWxlKDAuODUpOyBvcGFjaXR5OiAwOyB9XG4gIHRvIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgb3BhY2l0eTogMTsgfVxufVxuXG4vKiBGb290ZXIgKi9cbi5jaGF0LWZvb3RlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDhweDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG59XG4uY2hhdC1pbnB1dC13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbn1cbi5jaGF0LWlucHV0LXdyYXBwZXIgaW5wdXQge1xuICBmbGV4OiAxO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIHBhZGRpbmc6IDdweCA5cHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbn1cbi5jaGF0LWlucHV0LXdyYXBwZXIgYnV0dG9uIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzRhOTBlMiwgIzViOWRmYyk7XG4gIGJvcmRlcjogbm9uZTtcbiAgY29sb3I6IHdoaXRlO1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIHBhZGRpbmc6IDdweCAxMHB4O1xuICBtYXJnaW4tbGVmdDogOHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2UsIGJhY2tncm91bmQgMC4ycyBlYXNlO1xufVxuLmNoYXQtaW5wdXQtd3JhcHBlciBidXR0b246aG92ZXIge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjM2I4MmY2LCAjNGE5MGUyKTtcbn1cbi5jaGFyLWNvdW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogLTE2cHg7XG4gIHJpZ2h0OiAxMnB4O1xuICBmb250LXNpemU6IDExcHg7XG4gIG9wYWNpdHk6IDAuNjtcbiAgY29sb3I6ICM1NTU7XG59XG4uY2hhci1jb3VudGVyLndhcm5pbmcgeyBjb2xvcjogI2VhYjMwODsgb3BhY2l0eTogMC45OyB9XG4vKiDinKggQW5pbWFjacOzbiBkZSBzdWJpZGEgKi9cbi5jaGF0LXVwbG9hZGluZyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgZ2FwOiAxMHB4O1xuICBiYWNrZ3JvdW5kOiAjZWVmNWZmO1xuICBjb2xvcjogIzAwNGFhZDtcbiAgcGFkZGluZzogOHB4IDE0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbWFyZ2luOiA4cHggYXV0bztcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuICBib3gtc2hhZG93OiAwIDJweCA2cHggcmdiYSgwLDAsMCwwLjEpO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2U7XG59XG5cbi5jaGF0LXVwbG9hZGluZyAuc3Bpbm5lciB7XG4gIHdpZHRoOiAxOHB4O1xuICBoZWlnaHQ6IDE4cHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNjN2Q4ZmY7XG4gIGJvcmRlci10b3A6IDJweCBzb2xpZCAjMDA0YWFkO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGFuaW1hdGlvbjogc3BpbiAwLjhzIGxpbmVhciBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBzcGluIHtcbiAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9XG59XG5cbi51cGxvYWQtdGV4dCB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5mYWRlLW91dCB7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNXB4KTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2UsIHRyYW5zZm9ybSAwLjRzIGVhc2U7XG59XG4vKiA9PT0g8J+WvO+4jyBPdmVybGF5IGFycmFzdHJhciBpbWFnZW4gU09MTyBERU5UUk8gREVMIENIQVQgPT09ICovXG4uZHJhZy1vdmVybGF5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjQpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBvcGFjaXR5OiAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2U7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG59XG4uZHJhZy1vdmVybGF5LnZpc2libGUge1xuICBvcGFjaXR5OiAxO1xuICBwb2ludGVyLWV2ZW50czogYWxsO1xufVxuLmRyYWctaW5uZXIge1xuICBib3JkZXI6IDJweCBkYXNoZWQgI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgcGFkZGluZzogMjVweCA0MHB4O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG4gIHRleHQtc2hhZG93OiAwIDJweCA2cHggcmdiYSgwLDAsMCwwLjMpO1xufVxuXG5cbi8qID09PSDwn5ax77iPIEN1cnNvciB0aXBvIG1hbm8gZW4gaW3DoWdlbmVzID09PSAqL1xuLnRleHQgaW1nIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlLCBib3gtc2hhZG93IDAuMnMgZWFzZTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDMyMHB4ICFpbXBvcnRhbnQ7XG4gIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcbiAgYm94LXNoYWRvdzogMCAycHggNnB4IHJnYmEoMCwwLDAsMC4xNSk7XG59XG4udGV4dCBpbWc6aG92ZXIge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xuICBib3gtc2hhZG93OiAwIDAgOHB4IHJnYmEoMCwwLDAsMC4zKTtcbn1cblxuLyogPT09IPCflI0gT3ZlcmxheSBhbXBsaWFjacOzbiBpbWFnZW4gPT09ICovXG4uaW1nLW92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGluc2V0OiAwO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuODUpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgei1pbmRleDogMTAwMDA7XG4gIGFuaW1hdGlvbjogZmFkZUluIDAuMnMgZWFzZTtcbn1cbi5pbWctb3ZlcmxheSBpbWcge1xuICBtYXgtd2lkdGg6IDkwJTtcbiAgbWF4LWhlaWdodDogOTAlO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBib3gtc2hhZG93OiAwIDAgMjBweCByZ2JhKDI1NSwyNTUsMjU1LDAuMik7XG59XG4uaW1nLW92ZXJsYXkuZmFkZS1vdXQge1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTtcbn1cblxuLyogPT09IPCflrzvuI8gT3ZlcmxheSBhcnJhc3RyYXIgaW1hZ2VuID09PSAqL1xuLmRyYWctb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaW5zZXQ6IDA7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40NSk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG9wYWNpdHk6IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTtcbiAgei1pbmRleDogOTk5OTtcbn1cbi5kcmFnLW92ZXJsYXkudmlzaWJsZSB7XG4gIG9wYWNpdHk6IDE7XG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XG59XG4uZHJhZy1pbm5lciB7XG4gIGJvcmRlcjogMnB4IGRhc2hlZCAjZmZmO1xuICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICBwYWRkaW5nOiAzMHB4IDUwcHg7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7XG4gIHRleHQtc2hhZG93OiAwIDJweCA2cHggcmdiYSgwLDAsMCwwLjMpO1xufVxuLmltZy1vdmVybGF5IGltZyB7XG4gIGFuaW1hdGlvbjogem9vbUluIDAuMjVzIGVhc2U7XG59XG5Aa2V5ZnJhbWVzIHpvb21JbiB7XG4gIGZyb20geyB0cmFuc2Zvcm06IHNjYWxlKDAuODUpOyBvcGFjaXR5OiAwOyB9XG4gIHRvIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgb3BhY2l0eTogMTsgfVxufVxuXG5cbjwvc3R5bGU+XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9hc3NldHMvanMvY29tcG9tZW50cy9hc3NldHMvanMvY29tcG9tZW50cy9DaGF0LnZ1ZSJdLCJzb3VyY2VSb290IjoiIn0=*/