Loading files
// ═══════════════════════════════════════════════════════════
// PatternFlow - shared console chrome + theme (PROGMEM JS bundle)
//
// Served at /pf-console.js by core_http.h and loaded by every console
// page as one parser-blocking <script src> in <head>. One file owns the
// whole cross-page system; the pages themselves carry zero nav or theme
// markup:
//
// 1. THEME — reads localStorage 'pf-theme' and stamps data-theme=light
// on <html> BEFORE first paint (parser-blocking => no dark flash),
// then injects the html[data-theme=light]{...} variable overrides.
// The block is the union of every page's palette family (console
// --cream/--ink/..., home --bg/--ghost, audio --card/--fg/...);
// variables a page does not define are inert.
//
// 2. CHROME — after DOM ready, mounts the same header band on every
// page: brand (LED dot + Patternflow + optional #pfVer, which the
// home page fills from /api/status), the nav, and the Light toggle.
// The current page is highlighted by matching location.pathname, so
// adding a page means editing the NAV table here — nowhere else.
// (The old per-page copy-pasted <nav class="pfnav"> is how /show
// went missing from half the console for a month.)
//
// Class names are pf-chrome / pf-cnav / pf-brand — deliberately NOT the
// legacy .pfnav, so any page CSS that still mentions .pfnav cannot leak
// into the shared chrome.
//
// License: MIT
// ═══════════════════════════════════════════════════════════
#pragma once
#include <pgmspace.h>
const char PF_CONSOLE_JS[] PROGMEM = R"JS((function(){
var light=false;try{light=localStorage.getItem('pf-theme')==='light'}catch(e){}
if(light)document.documentElement.setAttribute('data-theme','light');
var st=document.createElement('style');
st.textContent='html[data-theme=light]{--cream:#F4EFE6;--cream2:#FFFCFA;--ink:#1A1814;--muted:#6B6558;--faint:#9A9486;--rule:#D9D1C2;--rule-soft:#E8E2D6;--led:#FF5C2E;--ok:#2F8A55;--warn:#B88120;--panel:#FFFCFA;--bg:#F4EFE6;--ghost:#E0D9CC;--card:#FFFCFA;--card2:#E8E2D6;--fg:#1A1814;--mut:#6B6558;--ln:#D9D1C2;--bad:#B8402E;--bar:#E0D9CC;--bar-on:#FF5C2E;--accent:#FF5C2E}'
+'.pf-chrome{border-bottom:1px solid var(--rule,#242118);background:var(--cream,var(--bg,#0C0B09))}'
+'.pf-chrome-in{max-width:1140px;margin:0 auto;display:flex;align-items:center;flex-wrap:wrap;gap:8px 18px;padding:13px 20px}'
+'.pf-brand{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono,ui-monospace,monospace);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted,#8A8272);text-decoration:none;white-space:nowrap}'
+'.pf-brand .pf-dot{width:5px;height:5px;border-radius:50%;background:var(--led,#FF5C2E);box-shadow:0 0 6px var(--led,#FF5C2E)}'
+'#pfVer{color:var(--faint,#5A5546);letter-spacing:.08em}'
// A variant's name, in the LED colour, on every page. Buried in a footer
// it answered a question nobody thought to ask; the point of the badge is
// that somebody who did not flash this panel themselves can tell what it
// is running without going looking. Core shows nothing — it is the
// default and a badge on every panel would say nothing.
+'#pfVariant{display:none;align-items:center;padding:1px 6px;border:1px solid var(--led,#FF5C2E);border-radius:2px;color:var(--led,#FF5C2E);letter-spacing:.1em;text-decoration:none}'
+'#pfVariant:hover{background:var(--led,#FF5C2E);color:var(--cream,var(--bg,#0C0B09))}'
+'.pf-cnav{display:flex;flex-wrap:wrap;gap:6px 13px;font-family:var(--mono,ui-monospace,monospace);font-size:11px;letter-spacing:.04em}'
+'.pf-cnav a{color:var(--faint,#5A5546);text-decoration:none}'
+'.pf-cnav a:hover{color:var(--led,#FF5C2E)}'
+'.pf-cnav a.here{color:var(--ink,var(--fg,#EDE7DB))}'
+'.pf-theme{margin-left:auto;display:inline-flex;align-items:center;gap:6px;font-family:var(--mono,ui-monospace,monospace);font-size:11px;letter-spacing:.04em;color:var(--faint,#9A9486);cursor:pointer;user-select:none;white-space:nowrap}'
+'.pf-theme input{accent-color:var(--led,#FF5C2E);margin:0}';
(document.head||document.documentElement).appendChild(st);
function mount(){
if(document.getElementById('pfChrome'))return;
// The core's own pages, and only those. Feature pages are not listed here:
// this file used to name /show, /mqtt and /weather, which meant a core file
// knowing three optional features by path and label. They arrive from
// /api/status featureNav now, contributed by whichever features are loaded, so
// a page the core has never heard of still gets a link and a build without
// it still gets a header that is right.
var NAV=[['/','Console'],['/patterns','Patterns'],
['/status','Status'],['/wifi','Wi-Fi'],['/update','Update']];
// Where a feature's links are spliced in: after Patterns, before Status, which
// is where Sequences sat when it was hard-coded.
var NAV_AT=2;
var p=location.pathname.replace(/\/+$/,'')||'/';
var h=document.createElement('header');h.className='pf-chrome';h.id='pfChrome';
var m='<div class="pf-chrome-in"><a class="pf-brand" href="/"><span class="pf-dot"></span>Patternflow <span id="pfVer"></span></a>'
+'<a id="pfVariant" class="pf-brand" target="_blank" rel="noopener"></a>'
+'<nav class="pf-cnav">';
function navLink(e){return '<a href="'+e[0]+'"'+(p===e[0]?' class="here"':'')+'>'+e[1]+'</a>'}
// Draw the core's pages now; feature links join when /api/status answers, so
// the header never sits empty waiting on a request.
for(var i=0;i<NAV.length;i++)m+=navLink(NAV[i]);
m+='</nav><label class="pf-theme"><input type="checkbox" id="pfTheme"> Light</label></div>';
h.innerHTML=m;
document.body.insertBefore(h,document.body.firstChild);
// Fill in the capability-gated links. Failing quietly is deliberate: an
// unreachable device should not also lose the pages that do work.
fetch('/api/status',{cache:'no-store'}).then(function(r){return r.json()}).then(function(d){
var nav=h.querySelector('.pf-cnav');if(!nav)return;
// Splice whatever the device says it serves into the core's list. No caps
// check: a feature that reported a nav entry IS loaded, so there is nothing
// left to gate on - the check existed only because the paths were guesses
// written into this file.
var all=NAV.slice();
var extra=d.featureNav||[];
for(var i=0;i<extra.length;i++){
if(!extra[i]||extra[i].length<2)continue;
all.splice(NAV_AT+i,0,extra[i]);
}
var html='';
for(i=0;i<all.length;i++)html+=navLink(all[i]);
nav.innerHTML=html;
var v=document.getElementById('pfVer');
// On a variant the badge carries its own version, so this one has to say
// whose it is — unlabelled, it reads as the variant's and is wrong.
if(v&&d.version)v.textContent=(d.variant&&d.variant!=='core'?'core v':'v')+d.version;
// Only a variant gets a badge, and it links to its own entry on the
// shelf so the name is a way in rather than a label.
var vb=document.getElementById('pfVariant');
if(vb&&d.variant&&d.variant!=='core'){
vb.textContent=d.variant+(d.variantVersion?' '+d.variantVersion:'');
vb.href='https://patternflow.work/editions#'+encodeURIComponent(d.variant);
vb.style.display='inline-flex';
}
// One status fetch, shared. A page that needs to know what this build
// actually has — the home page hides rows for absent features — listens
// for this rather than asking again. window.pfStatus covers a listener
// that registered after the fetch already landed.
window.pfStatus=d;
document.dispatchEvent(new CustomEvent('pf-status',{detail:d}));
}).catch(function(){});
var c=document.getElementById('pfTheme');
c.checked=document.documentElement.getAttribute('data-theme')==='light';
c.onchange=function(){var on=c.checked;
document.documentElement.setAttribute('data-theme',on?'light':'dark');
try{localStorage.setItem('pf-theme',on?'light':'dark')}catch(e){}};
}
// Every link from here to the site carries this panel's address, so the site
// can point "send to my panel" straight at it and stop depending on
// patternflow.local resolving on that phone. Done at click time, because
// pages set some of these hrefs after status arrives.
document.addEventListener('click',function(e){
var t=e.target;var a=t&&t.closest?t.closest('a[href]'):null;if(!a)return;
if(!/^https:\/\/([a-z0-9-]+\.)*patternflow\.work([\/?#]|$)/.test(a.href))return;
var ip=(window.pfStatus&&window.pfStatus.ip)||location.hostname;if(!ip)return;
try{var u=new URL(a.href);if(!u.searchParams.has('device')){u.searchParams.set('device',ip);a.href=u.toString();}}catch(x){}
},true);
if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',mount);
else mount();
})();
)JS";
// <gz:PF_CONSOLE_JS> GENERATED by firmware/toolchain/console_pages.py build — do not edit.
// gzip -9 of PF_CONSOLE_JS (6966 bytes → 3170 bytes), served with Content-Encoding: gzip.
const uint8_t PF_CONSOLE_JS_GZ[] PROGMEM = {
0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0xb5,0x59,0xeb,0x72,0xdb,0x36,
0x16,0xfe,0xef,0xa7,0x40,0xe5,0x6e,0x28,0xad,0x25,0xea,0xb2,0x76,0xea,0x48,0x61,
0x32,0x8e,0x2f,0xb3,0x99,0x49,0xd3,0x4e,0x93,0xa6,0x3f,0x1c,0xef,0x0e,0x44,0x42,
0x22,0x6b,0x12,0x50,0x09,0xd0,0xb2,0x2a,0x7b,0x66,0x1f,0x62,0x9f,0x70,0x9f,0x64,
0xbf,0x73,0x40,0xc9,0xb4,0x1d,0xa7,0x9d,0xd9,0xd9,0x3f,0x16,0x09,0x02,0x07,0xe7,
0xfa,0x9d,0x0f,0x70,0x7b,0x56,0xe9,0xd8,0x65,0x46,0xb7,0x3b,0xeb,0x9d,0x2b,0x59,
0x8a,0x3c,0x9b,0xa7,0x2e,0x9a,0xc9,0xdc,0xaa,0x89,0x2b,0x57,0x6b,0xff,0x9e,0x9b,
0x58,0xe6,0x1f,0x9c,0x29,0xe5,0x5c,0x85,0x73,0xe5,0xde,0x3a,0x55,0xb4,0x83,0xc5,
0xac,0xe7,0x52,0x55,0xa8,0xa0,0x13,0x45,0x51,0xc0,0x33,0x83,0xdb,0x58,0xba,0x38,
0x6d,0xab,0xce,0xfa,0x76,0x27,0x9b,0xb5,0x79,0xb0,0x93,0x98,0xb8,0x2a,0x94,0x76,
0xe1,0xe6,0xe1,0x34,0x57,0xfc,0x6e,0x95,0x3b,0x72,0xae,0xcc,0xa6,0x95,0x53,0xed,
0x20,0x91,0x4e,0xd6,0x12,0xbb,0xb5,0xb8,0xce,0x84,0xb5,0xb2,0x2e,0xda,0xca,0x88,
0x4b,0x25,0x9d,0xaa,0x25,0xb4,0x03,0xeb,0x56,0xb9,0xa2,0x79,0xd6,0x85,0x4e,0x5d,
0xbb,0x63,0xa3,0x1d,0x3e,0x44,0x41,0xea,0x8a,0xfc,0xfc,0x4e,0x64,0xc4,0x02,0x2f,
0xd6,0xbd,0x1e,0x09,0x28,0xc6,0xbb,0x67,0xfb,0xa7,0x67,0xa7,0xcf,0x27,0xf5,0xfb,
0x08,0x03,0x67,0x67,0xc7,0x67,0x47,0x18,0xc8,0xf4,0xe5,0x78,0x77,0x78,0x34,0x3c,
0x1c,0xee,0xe3,0xad,0x80,0x6e,0xc9,0x78,0xf7,0xf9,0x9b,0xe7,0x07,0x07,0x87,0x78,
0x9f,0xc9,0x4c,0xbb,0xf1,0xee,0x8b,0xa3,0x17,0xfb,0x87,0xb4,0xbc,0xac,0x72,0x35,
0xde,0x3d,0x79,0x71,0x32,0x3c,0x1e,0xd5,0xaf,0x3d,0x6b,0x66,0x98,0x72,0x7a,0x78,
0x3a,0x3a,0xa1,0x29,0x39,0x09,0x38,0x3b,0x3b,0x38,0x1e,0x9d,0xe2,0xcd,0x40,0xfa,
0xe8,0xec,0xf0,0xe8,0xe0,0x00,0x2f,0x4b,0x59,0xea,0xf1,0xee,0x9b,0xc3,0xc3,0xe1,
0x68,0x80,0xd7,0x85,0xd4,0x2a,0x6f,0xa8,0x32,0x9d,0x37,0x14,0x9d,0xa7,0xc6,0x92,
0xd8,0xc1,0xc9,0x8b,0xe3,0x63,0x52,0x5c,0x96,0x49,0x63,0x2e,0xbd,0x8e,0x1a,0xbb,
0xce,0xe6,0xf7,0xad,0x68,0xd8,0x90,0xeb,0x86,0xc6,0x53,0x99,0x90,0x06,0xfb,0x03,
0xd6,0x6e,0x2a,0xcb,0xc6,0x16,0x78,0xeb,0x19,0xdd,0x50,0x5e,0xc6,0xb1,0x22,0xf3,
0xfd,0xc0,0x6d,0xb0,0xb3,0x17,0x84,0xc8,0x83,0x38,0x2d,0x4d,0xa1,0xd6,0x53,0x53,
0x26,0xaa,0xec,0x4d,0x8d,0x73,0xa6,0x18,0x0f,0x17,0xd7,0xc2,0x9a,0x3c,0x4b,0x04,
0x62,0xd8,0xf6,0xae,0xe9,0xee,0x8e,0xf6,0x47,0xc3,0xe1,0x61,0x67,0x32,0x95,0xf1,
0xe5,0xbc,0x34,0x95,0x4e,0xc6,0xfe,0x33,0xc7,0xa1,0xeb,0x9f,0xa7,0xf3,0xee,0xee,
0xe0,0x78,0xf0,0x66,0xf0,0xa2,0xd3,0x79,0xb0,0x09,0xc2,0xb3,0x2e,0xe4,0x75,0x6f,
0x99,0x25,0x2e,0x1d,0x0f,0x87,0xfb,0x83,0xc5,0xf5,0xa4,0x90,0xe5,0x3c,0xd3,0xe3,
0x81,0x90,0x95,0x33,0x93,0x24,0xb3,0x8b,0x5c,0xae,0xc6,0xb3,0x5c,0x5d,0x4f,0x24,
0x02,0xaf,0x7b,0x19,0x32,0xd6,0x8e,0x49,0x77,0x55,0x4e,0x68,0xbc,0xb7,0x2c,0xe5,
0x62,0x4c,0x7f,0x26,0x73,0x3c,0x1c,0x42,0xd7,0x21,0xfe,0x4c,0x16,0x32,0x49,0x32,
0x3d,0x1f,0x0f,0xff,0x86,0x91,0x11,0x64,0x6f,0xb7,0x9f,0x96,0x52,0x27,0xeb,0x8d,
0xec,0x4c,0xe7,0x99,0x56,0xbd,0xa7,0xb6,0xa8,0x65,0x4e,0x66,0x48,0x47,0xa4,0x4c,
0x91,0xe5,0xab,0xda,0xcc,0xc2,0x68,0xd3,0xad,0x32,0xfe,0xb5,0x0b,0x19,0xab,0xee,
0xf6,0xa9,0xe3,0xa7,0xdb,0xec,0x77,0x35,0x1e,0x92,0x59,0xb9,0x72,0x10,0xd6,0xa3,
0x8f,0xa4,0x53,0x38,0xdc,0x57,0xc5,0x84,0xb2,0xbc,0xe7,0xa0,0x8c,0x9d,0x99,0xb2,
0x18,0x57,0x8b,0x85,0x2a,0x63,0x89,0x7a,0x8d,0x4d,0x6e,0xca,0xcd,0x2e,0x94,0xb5,
0xdd,0xdd,0xc3,0xa3,0xc3,0xd1,0x77,0xa3,0x8e,0x5f,0x93,0xa8,0x18,0x15,0x4c,0xd5,
0x3e,0xd6,0x46,0xab,0xc9,0x32,0x85,0xca,0x2c,0x5c,0x61,0x80,0x5c,0x71,0xdf,0x56,
0x41,0x4f,0x89,0x71,0x6b,0xef,0xea,0x03,0x28,0x94,0x2a,0xaa,0x22,0x7e,0xac,0x63,
0x5d,0xca,0x24,0xab,0xec,0xf8,0x60,0xf0,0x97,0xc7,0x11,0xcd,0x49,0x05,0x9f,0x29,
0x88,0xb7,0xb9,0xee,0xd9,0x54,0x26,0x66,0x89,0x30,0x0d,0xc4,0x73,0xb8,0xf7,0xf1,
0x2c,0x56,0x60,0x77,0x31,0xfb,0xa4,0xca,0x75,0xd3,0x1c,0x2e,0xba,0xee,0xee,0x01,
0x8a,0x66,0xff,0x79,0xe7,0x91,0x5f,0x06,0x87,0xaa,0xc0,0xd2,0x7e,0x5f,0x1c,0x91,
0xd0,0x4c,0x6a,0x17,0x58,0xa1,0x65,0xa1,0xba,0x22,0xd3,0x02,0x00,0x20,0xde,0x9d,
0x9e,0x08,0x92,0x58,0x95,0x5d,0x61,0xb4,0x50,0x57,0xaa,0x5c,0x89,0x05,0xe1,0x99,
0x78,0x53,0x95,0x99,0x4a,0x68,0xa2,0x14,0x33,0x63,0x20,0x99,0x24,0x65,0x4e,0xc0,
0xc5,0x4b,0x55,0xe2,0x93,0x14,0xbf,0x55,0xca,0x92,0xe7,0x84,0x36,0x53,0x93,0xac,
0x20,0xd2,0x54,0xf0,0x84,0x70,0x46,0x48,0x7b,0x39,0xe1,0x2d,0x16,0x06,0x4a,0x0a,
0x33,0xe3,0x17,0x54,0xd5,0x5c,0x89,0xcc,0x92,0x28,0x97,0x4a,0x87,0x4a,0x28,0x14,
0x2f,0x5d,0xa6,0x46,0x24,0x28,0x0a,0x6d,0x9c,0x98,0xe5,0xd2,0xa6,0xf8,0x9e,0x59,
0xc1,0xa5,0x4f,0x4b,0x0b,0xab,0xf2,0x2b,0x65,0x45,0x2c,0xa1,0xb9,0xca,0x73,0x2c,
0xc0,0xf2,0xcc,0xb1,0x52,0x56,0x94,0x95,0xd6,0x30,0x5a,0x2c,0x33,0xd2,0xc1,0x89,
0xb9,0xa1,0xb7,0xdc,0x98,0x4b,0xfc,0x86,0xe2,0xd8,0x94,0x4a,0xd8,0xd4,0x2c,0x2d,
0x6d,0x90,0xd2,0xb7,0xff,0xfc,0xeb,0xdf,0x64,0x0d,0xd6,0x42,0x3a,0x49,0x49,0xd4,
0x4c,0x56,0x39,0xd9,0x47,0xa6,0x79,0x4d,0x1b,0x3e,0x21,0x3d,0x96,0xa6,0xca,0x13,
0x61,0xe5,0x6a,0x23,0x25,0xac,0x03,0xe3,0xbd,0xbb,0x2d,0x03,0x4e,0xa4,0x2f,0xe4,
0xff,0xb6,0x8c,0x10,0xe6,0xe7,0xdb,0x6c,0x79,0x04,0x09,0x0f,0x32,0xa4,0x99,0x51,
0x23,0xac,0x6a,0xa6,0xc0,0xbd,0xa9,0x8f,0x0a,0x63,0x53,0x17,0x0f,0x72,0x7c,0x9b,
0x4f,0x5e,0xed,0x71,0x6a,0x60,0xe3,0xfa,0xeb,0x89,0xda,0xdc,0xf4,0x8f,0x31,0x49,
0xcb,0xab,0xf5,0x3d,0xbc,0xf9,0x02,0xb8,0x50,0xae,0x13,0x9e,0xfc,0x0f,0x68,0x30,
0xfc,0x02,0x1a,0x0c,0xf6,0x39,0xeb,0xef,0x14,0x11,0xf2,0x6b,0x45,0xf3,0xa4,0x7f,
0xee,0x96,0xd7,0xfe,0x79,0xca,0xed,0x0f,0x66,0x87,0x29,0x8a,0xe3,0xde,0x64,0x74,
0xce,0xda,0x59,0x33,0x38,0xeb,0xf4,0xe4,0xf4,0xbb,0x93,0x37,0x0d,0x67,0x71,0x23,
0x5e,0x7b,0xac,0x86,0x60,0xf4,0xc8,0x7b,0x70,0xfd,0x27,0x20,0xf5,0xf9,0xff,0xc5,
0x89,0x93,0x2f,0x78,0xcd,0xf7,0x77,0x64,0x43,0x55,0x5a,0x7c,0xe3,0xda,0x86,0x12,
0x95,0xa5,0xc5,0x2a,0x57,0xb1,0xfb,0x43,0x10,0x65,0x73,0x01,0x2b,0x8b,0xca,0xad,
0x7d,0xdf,0xec,0x3d,0x99,0xd0,0x9b,0x06,0x76,0x1b,0x4c,0x76,0xda,0x5b,0xae,0x93,
0x2a,0x99,0xdc,0xdc,0x3c,0x45,0x9f,0x3a,0xa1,0x04,0xf6,0xeb,0xe4,0x38,0xcd,0xf2,
0xa4,0x6d,0x1d,0x48,0xd0,0x86,0xce,0x89,0x02,0xd9,0xed,0x88,0xd4,0x81,0x84,0x6d,
0xd7,0x83,0xb9,0xd5,0x4b,0xdf,0xac,0xde,0x26,0x44,0xe0,0x8e,0xb9,0xa5,0x06,0x9d,
0x4e,0xa9,0x5c,0x55,0xea,0x09,0xa1,0xc3,0x47,0xa0,0x17,0x92,0x44,0x01,0x41,0xcd,
0x52,0x33,0x46,0xda,0x2e,0x63,0x85,0xd1,0x39,0x23,0x9f,0x05,0x68,0x9e,0x81,0x85,
0x55,0x80,0x1a,0xfe,0x2c,0x24,0x9e,0x08,0xcf,0xf2,0xcc,0xa2,0xef,0x08,0x4a,0x8c,
0xb1,0x47,0x3e,0xa0,0xce,0x2c,0xcb,0x95,0x80,0xe3,0x12,0x42,0x4b,0x02,0x65,0xd1,
0x27,0x80,0xea,0x8a,0x7e,0xf1,0x9b,0xf3,0x28,0xd4,0x5f,0x42,0x1c,0x56,0x75,0x01,
0x76,0x59,0x9c,0x8a,0x42,0xa1,0x5a,0x81,0x4d,0xa4,0x07,0xaf,0x27,0x61,0x97,0xf0,
0x2f,0xe1,0x99,0x4b,0x4b,0x05,0xc0,0x5a,0x90,0xa1,0x32,0x17,0x33,0xaf,0x89,0x15,
0x53,0x02,0x2f,0x97,0xb2,0xc0,0x5c,0x4e,0x55,0x1e,0x92,0x2d,0x2b,0x28,0x57,0x66,
0x57,0x10,0x03,0x53,0x49,0x4c,0x5f,0x2e,0xb2,0xbe,0x75,0x58,0x64,0x37,0x6b,0xdf,
0x23,0x9d,0x35,0x69,0x14,0x23,0x59,0x3c,0x1d,0x4d,0x48,0x1c,0x2b,0x43,0xb0,0x78,
0xb7,0x09,0x59,0x9a,0x1b,0x99,0x20,0x78,0x40,0x32,0x92,0x27,0xd9,0x07,0x0c,0xfa,
0xac,0x6e,0x2a,0x01,0xbd,0xbc,0x08,0xe1,0x2b,0x13,0x6a,0x08,0x68,0x1d,0xc0,0x71,
0xb8,0x1f,0xeb,0xe1,0x23,0x7d,0xb9,0x81,0xde,0x0a,0x91,0xdb,0x20,0x79,0xdd,0x74,
0xee,0xcd,0xa5,0x04,0x80,0x20,0x6e,0x20,0x84,0xfd,0xd4,0x7d,0x43,0xa6,0xc4,0xef,
0x8f,0x3e,0x45,0xe7,0xe7,0x41,0x1f,0x54,0x19,0x94,0x17,0x98,0xaa,0x82,0x8b,0x2e,
0xde,0xe1,0x01,0xe4,0xa9,0xb6,0x18,0xff,0x71,0xf3,0x78,0xd1,0xdd,0xc1,0x17,0x6f,
0x32,0xc6,0x3f,0xf8,0x07,0x9e,0xbe,0xcc,0x66,0x19,0x86,0x7e,0xc9,0x7a,0x67,0x99,
0x1f,0xa9,0x16,0x20,0xcd,0xc4,0xc0,0x7f,0xf6,0x0f,0x17,0x17,0x9c,0x15,0xbf,0x50,
0x4c,0xa9,0x41,0x7a,0x47,0x20,0x39,0xc8,0x0e,0xef,0x0f,0x94,0x6f,0x16,0x73,0x07,
0x1d,0x0b,0x39,0xc3,0x9e,0x62,0xb3,0x75,0x57,0x4c,0xd5,0x8c,0x9c,0xe2,0xf7,0xac,
0xc3,0x5b,0x77,0xb2,0x25,0x8b,0xfc,0xa0,0xd0,0x5b,0x75,0x0c,0xd7,0x5a,0x18,0x89,
0x31,0x4d,0x5e,0x58,0xc2,0x89,0x29,0xbc,0x87,0x8a,0x81,0xab,0xb7,0x26,0xff,0xf3,
0xe8,0x63,0x34,0xf2,0x67,0x82,0x05,0x9f,0x4a,0x28,0x07,0x42,0x8a,0x3a,0xe5,0x55,
0x58,0x2a,0x00,0x49,0xac,0xda,0xfd,0xcf,0xfd,0xbd,0x6f,0xfb,0xdd,0x20,0xe8,0xdc,
0xdc,0xc0,0x45,0x7e,0x41,0xfa,0xe4,0x19,0xc2,0x7b,0x19,0x87,0x88,0x34,0x8c,0xd1,
0x90,0xed,0x7b,0xc8,0x8a,0x82,0x2d,0xe3,0x0c,0x30,0x9e,0x25,0xd1,0x5d,0xb9,0x78,
0x79,0x45,0x14,0xbc,0x4c,0xb2,0x2b,0xc1,0x4b,0xa2,0x56,0x93,0xa0,0xb6,0x5e,0xbd,
0x94,0x8d,0x71,0x66,0x53,0x2d,0x81,0xb4,0x9d,0x45,0xad,0x3e,0x3e,0x02,0x2e,0x74,
0xe3,0x3b,0x38,0x16,0x06,0xfb,0x34,0xfa,0xaa,0xf6,0xdc,0x2c,0x37,0x4b,0xe1,0xe7,
0x61,0xeb,0x16,0x33,0xa2,0xed,0x9c,0x97,0x7d,0xf9,0x8a,0x40,0x06,0x9b,0xd4,0x1f,
0x7d,0x7b,0x6b,0x3d,0xde,0xd3,0x01,0x57,0x94,0x8b,0x5a,0xff,0x9c,0xe6,0x52,0x5f,
0xb6,0x44,0xa9,0xf2,0xa8,0xa5,0x8d,0x01,0x6e,0x78,0x81,0xb5,0x24,0x02,0xf4,0x86,
0x21,0x78,0x6d,0xbd,0x0a,0x1a,0x78,0x82,0x81,0x77,0x88,0x37,0x1d,0xec,0x3c,0x54,
0x08,0xda,0xdd,0x5b,0x14,0xec,0xa9,0xf3,0xc1,0xc5,0x5e,0x80,0x87,0xf6,0x02,0x47,
0x41,0x7a,0x7b,0x1d,0x6c,0xc4,0x51,0x90,0x5b,0xc1,0x18,0xb1,0xd8,0x0b,0x5e,0xd1,
0xd4,0x21,0xa6,0xf2,0xbe,0xb7,0x94,0x07,0x27,0xa5,0x5c,0x6e,0x6b,0x27,0xb0,0x35,
0x9e,0xa0,0x18,0x27,0x9b,0x54,0xab,0x13,0xed,0x57,0x20,0xb0,0x4f,0x8f,0x66,0x01,
0x7b,0x8a,0x66,0x37,0xb5,0x48,0x82,0xea,0x9a,0xf1,0x25,0x68,0x33,0xd4,0x91,0x2a,
0x16,0x0e,0xc5,0x2c,0x33,0x47,0xf0,0x61,0x88,0xe7,0x95,0x8a,0x19,0x5d,0xb8,0x83,
0xec,0x6c,0x53,0x34,0xb3,0x68,0x30,0xc9,0x5e,0x22,0xc5,0xc2,0x5c,0xe9,0xb9,0x4b,
0x27,0xd9,0xde,0x5e,0xa7,0xd8,0x8b,0x36,0x86,0xe3,0xcb,0x79,0x76,0x01,0x88,0xc5,
0x18,0xd4,0xc7,0xf0,0xab,0x97,0x0c,0x32,0x0d,0xb7,0x31,0xe0,0xc3,0xa9,0x0c,0xf9,
0xc2,0xad,0x16,0x2a,0x6a,0x01,0x3f,0xe2,0x4b,0x70,0xdf,0x56,0x1d,0xaa,0x8f,0x7e,
0x8e,0x78,0x47,0xa5,0xfc,0xb2,0xcf,0x22,0x10,0x06,0x24,0x12,0xf9,0x1b,0x89,0xa6,
0x11,0x98,0xbf,0x7f,0xfc,0xfe,0x5d,0x54,0x4c,0x76,0xb6,0x09,0x4b,0xc4,0x11,0x9f,
0xd0,0x7c,0xdc,0x1b,0x2e,0xa8,0x76,0xda,0xbd,0xff,0x71,0x96,0x95,0xd6,0x71,0x27,
0xe8,0x70,0xbd,0x9e,0x11,0x8a,0xd4,0xdc,0x37,0x96,0x0b,0x39,0xcd,0xf2,0xcc,0xad,
0x7a,0x73,0x49,0xd0,0xc6,0x1e,0x05,0x86,0x4b,0x0c,0xc2,0x23,0xbf,0x55,0x99,0x72,
0x80,0x76,0xd4,0x64,0xa2,0xf2,0x6c,0xaa,0xc0,0x10,0x14,0x4a,0x59,0x93,0xa0,0x4a,
0xa3,0x58,0xe2,0x54,0x4e,0x01,0xe2,0x89,0xba,0x42,0xa1,0x13,0xbd,0x24,0x76,0x48,
0x80,0x2f,0x73,0x6b,0x80,0x87,0xd6,0xe3,0x9f,0x0f,0x1e,0xa3,0x55,0x62,0xc0,0x21,
0xcb,0x4b,0x38,0x58,0xd1,0x85,0x40,0xd0,0x08,0x5a,0xd0,0x5d,0xc7,0x90,0xa8,0xc6,
0x81,0x36,0x3d,0xeb,0x28,0xee,0xb7,0x9d,0x10,0xeb,0x75,0x7b,0x7b,0x1d,0x51,0x6e,
0xf3,0xac,0x0c,0x7f,0xb5,0x74,0x3f,0xf1,0x68,0x4a,0x52,0x5f,0x59,0x20,0x14,0x51,
0x1a,0x22,0x9c,0xe5,0xea,0x03,0x37,0x66,0x44,0x74,0xcb,0x52,0x50,0xd4,0xe8,0x80,
0xdf,0xe0,0xa9,0xd9,0xe2,0x3e,0x30,0x60,0x31,0xb1,0xe6,0x2c,0x21,0xdd,0x37,0xb6,
0xc9,0x95,0x65,0x18,0x56,0x25,0x91,0x70,0x74,0x7d,0xd3,0x4c,0x4f,0x6a,0x70,0xa1,
0x78,0x6f,0xc8,0xa7,0xcc,0xed,0x39,0xbe,0xe3,0x3b,0x60,0xf4,0xd6,0x03,0x88,0x4c,
0xe9,0xf8,0xe4,0x40,0x95,0x85,0x28,0x81,0x59,0xbf,0xfd,0xd0,0xe8,0x1c,0x24,0xb4,
0xa4,0x03,0xc2,0x86,0x60,0x93,0x30,0xe2,0x44,0xd4,0x24,0x29,0x4a,0x94,0xa7,0x3d,
0xbf,0x35,0x6d,0x21,0xd4,0xb5,0xef,0xad,0xdc,0x84,0xa7,0x2a,0x96,0xd5,0xd6,0xe9,
0x2e,0x05,0x98,0x92,0xb4,0x39,0x72,0xda,0x2a,0xd6,0x6b,0x59,0x66,0x00,0x12,0xbd,
0x31,0xa0,0x6e,0xc3,0x1e,0x48,0x65,0x9e,0x47,0x94,0xe9,0x96,0xbc,0xd0,0xae,0xef,
0x58,0xc0,0x0e,0x4b,0x19,0x25,0xe1,0x5d,0x4b,0xbc,0xb9,0x39,0x07,0xf6,0xdf,0x2f,
0x10,0x9e,0xd5,0x2c,0x11,0x66,0x18,0xdf,0xf0,0x30,0xea,0xe3,0xe6,0x66,0xf3,0x54,
0xcf,0x79,0x39,0xea,0x50,0x4f,0xcd,0x74,0xa5,0x26,0x3b,0xd8,0x37,0xf4,0xbd,0xa2,
0xed,0xb1,0x7c,0x2f,0xeb,0x0e,0xba,0x9b,0x15,0xd0,0xe3,0xd6,0x03,0xb5,0x2b,0xf2,
0x28,0x08,0xfc,0xd6,0x7e,0x5b,0x5a,0xd9,0xd8,0x94,0x66,0xdc,0x95,0x26,0x3e,0xfa,
0xe5,0x18,0x68,0xd4,0x0f,0x4d,0xf2,0xa6,0x5d,0x45,0x5f,0xa1,0x40,0x9f,0x18,0xf9,
0xc9,0x65,0x3f,0x10,0x30,0xd4,0xc7,0xc7,0xc6,0x19,0x2e,0x26,0xfe,0x40,0xa9,0xe0,
0x3c,0x21,0x42,0xc2,0x58,0xe4,0x5f,0x1d,0x44,0x38,0x16,0x34,0x90,0x9b,0x3e,0x1c,
0x8d,0xec,0x61,0xe7,0x13,0x47,0xaa,0xcf,0x5c,0x74,0xfa,0xaa,0x34,0xd7,0x39,0x31,
0x3e,0x1a,0x45,0x41,0x25,0x80,0x2e,0x3e,0x8f,0x35,0xce,0xab,0xc4,0x09,0xa8,0x2d,
0x96,0x86,0x8e,0x5b,0x70,0xeb,0xd5,0xb3,0x67,0x49,0x58,0x6f,0xd7,0xb9,0xba,0x77,
0xbd,0xd5,0xc6,0x07,0xbf,0x90,0xe7,0xf8,0xc7,0x6f,0xa2,0x28,0xe0,0x3c,0x7d,0xcd,
0x3f,0xe2,0x0a,0xb0,0x8b,0x0a,0xd8,0xdb,0x0a,0xa9,0xcd,0x44,0x02,0xdd,0x19,0x5a,
0x33,0x0d,0xb6,0xd5,0xd3,0xbc,0xcc,0xd5,0x90,0x0b,0x83,0x36,0x46,0xfb,0x0c,0x36,
0x7a,0x73,0x84,0xb4,0xa9,0xca,0x67,0x75,0x1a,0x7b,0x4e,0x97,0x91,0x94,0x25,0x0e,
0x8c,0x00,0x9d,0x92,0xc9,0x1c,0x95,0x02,0xb9,0xd4,0x73,0x31,0x1f,0x89,0xe9,0x57,
0x43,0x51,0xbb,0x02,0xe1,0x20,0xeb,0xa7,0x0d,0xd3,0xbe,0x64,0x25,0xd5,0xff,0xf4,
0x9e,0x57,0xb6,0x73,0xf6,0xee,0xfc,0xf3,0xc9,0x9b,0x8e,0x86,0x14,0xec,0x3d,0x1c,
0xa4,0xae,0x34,0x21,0x21,0xdc,0xc8,0x82,0xd4,0xb9,0x85,0x1d,0xf7,0x37,0x1c,0x8a,
0x7a,0x70,0x48,0x20,0xd6,0x57,0x49,0x46,0x90,0x63,0x77,0xd1,0xbf,0x34,0x31,0x92,
0x9f,0x7f,0x7a,0x7b,0x6c,0x8a,0x05,0x22,0x0f,0xfe,0xb0,0x95,0xea,0x65,0xf1,0x8d,
0x64,0x58,0x1f,0x6a,0xa2,0xa0,0x71,0xaa,0x09,0x28,0xc3,0x39,0x02,0xc0,0x99,0x0d,
0x01,0x05,0x3a,0x22,0x95,0xc0,0x75,0x40,0x73,0xc4,0xd1,0x86,0x4b,0x02,0x43,0xb4,
0x52,0x09,0xc7,0x80,0x78,0xaf,0xbf,0x04,0xe0,0x74,0x63,0xd2,0xc8,0xc4,0x33,0x76,
0x15,0x72,0x7f,0xc5,0xc9,0x47,0x69,0xc6,0xdd,0x0f,0x0c,0xc4,0x0b,0x49,0xb3,0x04,
0x59,0x5b,0xd2,0x4d,0x00,0x0a,0x49,0xc8,0xa9,0x85,0xb2,0x77,0x44,0x96,0x16,0x30,
0x5d,0xd7,0x8c,0x17,0x34,0x85,0xc5,0xdf,0x8b,0x9d,0xa5,0x4b,0x05,0x21,0xe7,0x38,
0x13,0x85,0xe0,0xa9,0x3a,0x81,0x47,0x16,0x33,0x4f,0xe6,0x00,0x89,0x94,0x56,0xcc,
0x68,0x49,0x8c,0xbf,0x36,0xa9,0xe1,0x6f,0x4e,0x43,0x7c,0x75,0xc2,0x7c,0x90,0x34,
0x63,0x53,0x81,0x3d,0x94,0xfd,0x2b,0x24,0x85,0x66,0x62,0xf7,0x40,0x68,0x94,0x34,
0xba,0x1e,0xf9,0x90,0xae,0x93,0x4f,0xaf,0xc8,0xcd,0x5a,0x2d,0xc5,0x71,0x85,0x7e,
0x51,0xf8,0x77,0x22,0x68,0xdb,0x86,0x92,0x28,0x87,0x66,0x36,0x4e,0x6e,0x3b,0x04,
0x23,0x9d,0xd0,0x5f,0x43,0x37,0x6e,0xb7,0x6f,0x31,0xce,0x29,0x18,0x7f,0x2d,0x03,
0x3f,0xfa,0xfb,0xec,0xc9,0x4e,0x1c,0x32,0xea,0xaa,0x24,0x7a,0xf2,0xf2,0x7a,0xfe,
0xd4,0xe5,0x75,0xe3,0x3a,0x9c,0x04,0x19,0x8d,0xee,0xa9,0xe7,0x2a,0x6a,0x68,0x43,
0x8a,0x18,0x1d,0x6d,0x77,0x69,0x1a,0xfd,0xa7,0xef,0xc8,0x29,0xa9,0xfd,0x36,0x63,
0x8c,0x97,0x97,0xa4,0x37,0xdf,0xd9,0x37,0x6f,0xeb,0xed,0xa3,0xdb,0xfa,0x2f,0xac,
0x6b,0xdc,0xda,0xdf,0xd6,0x39,0x7a,0xca,0x97,0x41,0x7c,0x56,0xa1,0x83,0x13,0x1f,
0xe9,0x44,0xdd,0x0b,0x41,0xaa,0xee,0x60,0xf1,0xee,0xf2,0x8a,0x20,0x2c,0x49,0x90,
0x5b,0x76,0xd3,0xe0,0x78,0x26,0x77,0x49,0x24,0x93,0xbf,0x1e,0x6b,0x21,0x0b,0xf9,
0x20,0x58,0xd4,0x57,0x4d,0x2d,0x94,0x42,0x29,0x49,0x1d,0xc1,0xd7,0x5c,0x0c,0x41,
0x88,0xf2,0x02,0x1d,0x99,0x4e,0xb7,0x9e,0xb2,0x91,0x90,0x66,0x59,0xb2,0x8d,0xc8,
0x33,0x1c,0x7c,0xae,0x6a,0x52,0xc7,0x99,0xb7,0x48,0x51,0x93,0xa1,0x38,0x21,0x4c,
0xc6,0x6b,0x8c,0x66,0x73,0x29,0x5c,0x46,0x17,0x81,0x75,0xcf,0xf4,0x92,0x88,0xa7,
0xc0,0x35,0x7c,0x2b,0x57,0x5f,0xd9,0x01,0xb1,0x09,0x06,0x6c,0x9d,0xb2,0x1b,0x82,
0xc9,0x87,0x47,0x1b,0xde,0x05,0x08,0x36,0x72,0x02,0xbe,0xab,0xb3,0xbe,0x1d,0xf0,
0x2e,0x41,0x77,0x1b,0x5f,0x55,0x33,0x13,0x17,0xa9,0xd0,0x13,0xf0,0x09,0xb7,0xdd,
0x08,0x30,0x86,0xc3,0x07,0xd1,0x25,0xeb,0x5e,0x6f,0x9f,0xda,0x81,0x3c,0xa7,0x9d,
0x2f,0x82,0xce,0x58,0x57,0x79,0xce,0x8c,0x45,0x6e,0xf9,0x0a,0xbd,0xf5,0xff,0xe1,
0xb1,0xe9,0x33,0x4e,0x36,0xed,0x73,0xd9,0xfb,0x7d,0xd0,0x7b,0xd1,0xbb,0xd8,0xfb,
0x1c,0x76,0xfe,0xda,0xf0,0xca,0x67,0x46,0xab,0xf6,0xf9,0xe7,0xfe,0xeb,0xdd,0x8b,
0x9b,0x6f,0x3b,0x7d,0x80,0x23,0xc4,0x4b,0x86,0xb7,0xbb,0x33,0x3e,0x77,0xf3,0x45,
0xd4,0x7e,0x50,0x7a,0xcf,0x9e,0x3d,0x18,0x08,0xb3,0x05,0xce,0x4f,0xdb,0x53,0x16,
0xfd,0xf7,0x81,0x90,0x9e,0xd5,0xc3,0xa7,0x8d,0x38,0x4a,0x39,0x12,0x59,0x45,0x54,
0xa1,0x3f,0xff,0xf4,0x6e,0xb3,0x21,0x4f,0xac,0x90,0x81,0xb2,0x8c,0xd3,0x1f,0x65,
0x29,0x0b,0x1b,0x02,0xaa,0x90,0xc4,0x4c,0xb5,0x82,0x4e,0x67,0xfd,0xe0,0x2b,0x22,
0xb2,0xfd,0xda,0xc5,0x16,0x13,0x2f,0x29,0xaa,0x42,0x67,0x3e,0xa0,0x06,0xf4,0x1c,
0x6c,0xe5,0xb6,0xce,0xd6,0x6b,0xfa,0x1f,0xd3,0x6d,0xd7,0x95,0x95,0xf2,0x0d,0x63,
0x1b,0x21,0x46,0x18,0xb2,0x41,0x71,0x25,0x82,0x73,0x61,0x65,0xd0,0xf9,0x4a,0x04,
0x4f,0x7e,0xf8,0xbe,0xee,0x21,0xef,0x98,0xa1,0x05,0x5d,0xbe,0x40,0x81,0x5c,0x95,
0x23,0x2f,0xea,0xdb,0x14,0x42,0x16,0xfa,0xfb,0x5f,0x6e,0x53,0x8d,0xca,0x36,0x1b,
0x00,0x00,
};
constexpr size_t PF_CONSOLE_JS_GZ_LEN = sizeof(PF_CONSOLE_JS_GZ);
// </gz:PF_CONSOLE_JS>
e5b871ed5This file is pinned to the selected release. Download the original to open it in your design tool.