Changeset - 9d47c44d4ae4
[Not reviewed]
default
0 5 1
drewp@bigasterisk.com - 19 months ago 2023-06-08 21:54:26
drewp@bigasterisk.com
experimental tiled-layout home page
6 files changed with 144 insertions and 2 deletions:
0 comments (0 inline, 0 general)
light9/web/TiledHome.ts
Show inline comments
 
new file 100644
 
import * as React from "react";
 
import { createRoot } from "react-dom/client";
 
import * as FlexLayout from "flexlayout-react";
 
export { Light9DeviceSettings } from "./live/Light9DeviceSettings";
 
export { Light9CollectorUi } from "./collector/Light9CollectorUi";
 

	
 
const config:FlexLayout.IJsonModel = {
 
  global: {},
 
  borders: [],
 
  layout: {
 
    type: "row",
 
    weight: 100,
 
    children: [
 
      {
 
        type: "tabset",
 
        weight: 50,
 
        children: [{ type: "tab", name: "devsettings", component: "light9-device-settings" }],
 
      },
 
      {
 
        type: "tabset",
 
        weight: 50,
 
        children: [{ type: "tab", name: "collector", component: "light9-collector-ui" }],
 
      },
 
    ],
 
  },
 
};
 

	
 
const e = React.createElement;
 

	
 
// see https://github.com/lit/lit/tree/main/packages/labs/react
 

	
 
class Main extends React.Component {
 
  constructor(props) {
 
    super(props);
 
    this.state = { model: FlexLayout.Model.fromJson(config) };
 
  }
 

	
 
  factory = (node) => {
 
    var component = node.getComponent();
 
    return e(component, null, "");
 
  };
 

	
 
  render() {
 
    return e(FlexLayout.Layout, { model: this.state.model, factory: this.factory });
 
  }
 
}
 

	
 
const root = createRoot(document.getElementById("container")!);
 
root.render(React.createElement(Main));
light9/web/index.html
Show inline comments
 
<!DOCTYPE html>
 
<html>
 
  <head>
 
    <title>light9 home</title>
 
    <meta charset="utf-8" />
 
    <link rel="stylesheet" href="style.css" />
 
    <link rel="stylesheet" href="flexlayout-react/style/dark.css" />
 
    <script type="module" src="TiledHome.ts"></script>
 
  </head>
 
  <body>
 
    <div id="container"></div>
 
  </body>
 
</html>
light9/web/style.css
Show inline comments
 
body {
 
  background: black;
 
  color: white;
 
  --color-background: black;
 
  --color-text: white;
 
  font-family: sans-serif;
 
}
 

	
 
h1 {
 
  margin: 0;
 
}
 

	
 
h2 {
 
  margin: 0;
 
  padding: 0;
 
  font-size: 100%;
 
}
 

	
 
ul {
 
  margin: 0;
light9/web/vite.config.ts
Show inline comments
 
import { defineConfig } from "vite";
 

	
 
export default defineConfig({
 
  base: "/",
 
  root: "./light9/web",
 
  // publicDir: ".",
 
  publicDir: "../../node_modules",
 
  server: {
 
    host: "0.0.0.0",
 
    strictPort: true,
 
    port: 8300,
 
    hmr: {
 
      port: 8301,
 
    },
 
  },
 
  clearScreen: false,
 
  define: {
 
    global: {},
 
  },
package.json
Show inline comments
 
@@ -16,29 +16,36 @@
 
    "@microsoft/fast-components": "^2.30.6",
 
    "@types/async": "^3.2.20",
 
    "@types/d3": "^7.4.0",
 
    "@types/debug": "^4.1.7",
 
    "@types/fpsmeter": "^0.3.31",
 
    "@types/n3": "^1.10.4",
 
    "@types/node": "^20.2.0",
 
    "@types/reconnectingwebsocket": "^1.0.7",
 
    "@types/underscore": "^1.11.4",
 
    "async": "^3.2.4",
 
    "d3": "^7.8.4",
 
    "debug": "^4.3.4",
 
    "flexlayout-react": "^0.7.7",
 
    "fpsmeter": "^0.3.1",
 
    "immutable": "^4.3.0",
 
    "knockout": "^3.5.1",
 
    "lit": "^2.7.4",
 
    "n3": "^1.16.4",
 
    "onecolor": "^4.0.0",
 
    "parse-prometheus-text-format": "^1.1.1",
 
    "react": "^18.2.0",
 
    "react-dom": "^18.2.0",
 
    "reconnectingwebsocket": "^1.0.0",
 
    "sub-events": "^1.9.0",
 
    "sylvester": "^0.0.21",
 
    "typescript": "^5.0.4",
 
    "underscore": "^1.13.6",
 
    "vite": "^4.3.7",
 
    "vite-plugin-rewrite-all": "^1.0.1",
 
    "vitest": "^0.31.1"
 
  },
 
  "devDependencies": {
 
    "@types/react": "^18.2.9",
 
    "@types/react-dom": "^18.2.4"
 
  }
 
}
pnpm-lock.yaml
Show inline comments
 
@@ -3,36 +3,41 @@ lockfileVersion: 5.4
 
specifiers:
 
  '@material/mwc-button': ^0.27.0
 
  '@material/mwc-dialog': ^0.27.0
 
  '@material/mwc-slider': ^0.27.0
 
  '@material/mwc-textfield': ^0.27.0
 
  '@microsoft/fast-components': ^2.30.6
 
  '@types/async': ^3.2.20
 
  '@types/d3': ^7.4.0
 
  '@types/debug': ^4.1.7
 
  '@types/fpsmeter': ^0.3.31
 
  '@types/n3': ^1.10.4
 
  '@types/node': ^20.2.0
 
  '@types/react': ^18.2.9
 
  '@types/react-dom': ^18.2.4
 
  '@types/reconnectingwebsocket': ^1.0.7
 
  '@types/underscore': ^1.11.4
 
  async: ^3.2.4
 
  d3: ^7.8.4
 
  debug: ^4.3.4
 
  flexlayout-react: ^0.7.7
 
  fpsmeter: ^0.3.1
 
  immutable: ^4.3.0
 
  knockout: ^3.5.1
 
  lit: ^2.7.4
 
  n3: ^1.16.4
 
  onecolor: ^4.0.0
 
  parse-prometheus-text-format: ^1.1.1
 
  react: ^18.2.0
 
  react-dom: ^18.2.0
 
  reconnectingwebsocket: ^1.0.0
 
  sub-events: ^1.9.0
 
  sylvester: ^0.0.21
 
  typescript: ^5.0.4
 
  underscore: ^1.13.6
 
  vite: ^4.3.7
 
  vite-plugin-rewrite-all: ^1.0.1
 
  vitest: ^0.31.1
 

	
 
dependencies:
 
  '@material/mwc-button': 0.27.0
 
  '@material/mwc-dialog': 0.27.0
 
@@ -41,40 +46,47 @@ dependencies:
 
  '@microsoft/fast-components': 2.30.6
 
  '@types/async': 3.2.20
 
  '@types/d3': 7.4.0
 
  '@types/debug': 4.1.7
 
  '@types/fpsmeter': 0.3.31
 
  '@types/n3': 1.10.4
 
  '@types/node': 20.2.0
 
  '@types/reconnectingwebsocket': 1.0.7
 
  '@types/underscore': 1.11.4
 
  async: 3.2.4
 
  d3: 7.8.4
 
  debug: 4.3.4
 
  flexlayout-react: 0.7.7_biqbaboplfbrettd7655fr4n2y
 
  fpsmeter: 0.3.1
 
  immutable: 4.3.0
 
  knockout: 3.5.1
 
  lit: 2.7.4
 
  n3: 1.16.4
 
  onecolor: 4.0.0
 
  parse-prometheus-text-format: 1.1.1
 
  react: 18.2.0
 
  react-dom: 18.2.0_react@18.2.0
 
  reconnectingwebsocket: 1.0.0
 
  sub-events: 1.9.0
 
  sylvester: 0.0.21
 
  typescript: 5.0.4
 
  underscore: 1.13.6
 
  vite: 4.3.7_@types+node@20.2.0
 
  vite-plugin-rewrite-all: 1.0.1_vite@4.3.7
 
  vitest: 0.31.1
 

	
 
devDependencies:
 
  '@types/react': 18.2.9
 
  '@types/react-dom': 18.2.4
 

	
 
packages:
 

	
 
  /@esbuild/android-arm/0.17.19:
 
    resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
 
    engines: {node: '>=12'}
 
    cpu: [arm]
 
    os: [android]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
  /@esbuild/android-arm64/0.17.19:
 
@@ -862,28 +874,50 @@ packages:
 

	
 
  /@types/n3/1.10.4:
 
    resolution: {integrity: sha512-FfRTwcbXcScVHuAjIASveRWL6Fi6fPALl1Ge8tMESYLqU7R42LJvtdBpUi+f9YK0oQPqIN+zFFgMDFJfLMx0bg==}
 
    dependencies:
 
      '@types/node': 20.2.0
 
      rdf-js: 4.0.2
 
    dev: false
 

	
 
  /@types/node/20.2.0:
 
    resolution: {integrity: sha512-3iD2jaCCziTx04uudpJKwe39QxXgSUnpxXSvRQjRvHPxFQfmfP4NXIm/NURVeNlTCc+ru4WqjYGTmpXrW9uMlw==}
 
    dev: false
 

	
 
  /@types/prop-types/15.7.5:
 
    resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
 
    dev: true
 

	
 
  /@types/react-dom/18.2.4:
 
    resolution: {integrity: sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==}
 
    dependencies:
 
      '@types/react': 18.2.9
 
    dev: true
 

	
 
  /@types/react/18.2.9:
 
    resolution: {integrity: sha512-pL3JAesUkF7PEQGxh5XOwdXGV907te6m1/Qe1ERJLgomojS6Ne790QiA7GUl434JEkFA2aAaB6qJ5z4e1zJn/w==}
 
    dependencies:
 
      '@types/prop-types': 15.7.5
 
      '@types/scheduler': 0.16.3
 
      csstype: 3.1.2
 
    dev: true
 

	
 
  /@types/reconnectingwebsocket/1.0.7:
 
    resolution: {integrity: sha512-17pnIZsGi9P8YNp7c0ueY2WEauSxDivuFeGuMuPPJMA3qk34CnFgBHGqkxgun3HUifEuwNr8cf+9rU7vSd8i5g==}
 
    dev: false
 

	
 
  /@types/scheduler/0.16.3:
 
    resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
 
    dev: true
 

	
 
  /@types/trusted-types/2.0.3:
 
    resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==}
 
    dev: false
 

	
 
  /@types/underscore/1.11.4:
 
    resolution: {integrity: sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==}
 
    dev: false
 

	
 
  /@vitest/expect/0.31.1:
 
    resolution: {integrity: sha512-BV1LyNvhnX+eNYzJxlHIGPWZpwJFZaCcOIzp2CNG0P+bbetenTupk6EO0LANm4QFt0TTit+yqx7Rxd1qxi/SQA==}
 
    dependencies:
 
      '@vitest/spy': 0.31.1
 
@@ -1014,24 +1048,28 @@ packages:
 
      js-string-escape: 1.0.1
 
      lodash: 4.17.21
 
      md5-hex: 3.0.1
 
      semver: 7.5.1
 
      well-known-symbols: 2.0.0
 
    dev: false
 

	
 
  /connect-history-api-fallback/1.6.0:
 
    resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==}
 
    engines: {node: '>=0.8'}
 
    dev: false
 

	
 
  /csstype/3.1.2:
 
    resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
 
    dev: true
 

	
 
  /d3-array/3.2.3:
 
    resolution: {integrity: sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ==}
 
    engines: {node: '>=12'}
 
    dependencies:
 
      internmap: 2.0.3
 
    dev: false
 

	
 
  /d3-axis/3.0.0:
 
    resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==}
 
    engines: {node: '>=12'}
 
    dev: false
 

	
 
@@ -1347,24 +1385,34 @@ packages:
 
    resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
 
    engines: {node: '>=0.8.x'}
 
    dev: false
 

	
 
  /exenv-es6/1.1.1:
 
    resolution: {integrity: sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==}
 
    dev: false
 

	
 
  /fast-diff/1.3.0:
 
    resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
 
    dev: false
 

	
 
  /flexlayout-react/0.7.7_biqbaboplfbrettd7655fr4n2y:
 
    resolution: {integrity: sha512-BOS+lueEBdLVsrB2Jekr/z4WIuerMhkDhYcT+3E56o/ZHz6xkmv8YEkB9qimrGxRt2uAnozzH5VPUnxXMQCu0Q==}
 
    peerDependencies:
 
      react: ^18.0.0
 
      react-dom: ^18.0.0
 
    dependencies:
 
      react: 18.2.0
 
      react-dom: 18.2.0_react@18.2.0
 
    dev: false
 

	
 
  /fpsmeter/0.3.1:
 
    resolution: {integrity: sha512-i3zzNJwGkA+9WWIXpAtP0TCN64eO5VkKQgirYE7ZCVqyC3NfUPszU35R044fmSCjiMqefiBs5NiGKvD7lFJ87Q==}
 
    dev: false
 

	
 
  /fsevents/2.3.2:
 
    resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
 
    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
 
    os: [darwin]
 
    requiresBuild: true
 
    dev: false
 
    optional: true
 

	
 
@@ -1388,24 +1436,28 @@ packages:
 
    dev: false
 

	
 
  /internmap/2.0.3:
 
    resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
 
    engines: {node: '>=12'}
 
    dev: false
 

	
 
  /js-string-escape/1.0.1:
 
    resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==}
 
    engines: {node: '>= 0.8'}
 
    dev: false
 

	
 
  /js-tokens/4.0.0:
 
    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
 
    dev: false
 

	
 
  /jsonc-parser/3.2.0:
 
    resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
 
    dev: false
 

	
 
  /knockout/3.5.1:
 
    resolution: {integrity: sha512-wRJ9I4az0QcsH7A4v4l0enUpkS++MBx0BnL/68KaLzJg7x1qmbjSlwEoCNol7KTYZ+pmtI7Eh2J0Nu6/2Z5J/Q==}
 
    dev: false
 

	
 
  /lit-element/3.3.2:
 
    resolution: {integrity: sha512-xXAeVWKGr4/njq0rGC9dethMnYCq5hpKYrgQZYTzawt9YQhMiXfD+T1RgrdY3NamOxwq2aXlb0vOI6e29CKgVQ==}
 
    dependencies:
 
      '@lit-labs/ssr-dom-shim': 1.1.1
 
@@ -1427,24 +1479,31 @@ packages:
 
      lit-html: 2.7.4
 
    dev: false
 

	
 
  /local-pkg/0.4.3:
 
    resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
 
    engines: {node: '>=14'}
 
    dev: false
 

	
 
  /lodash/4.17.21:
 
    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
 
    dev: false
 

	
 
  /loose-envify/1.4.0:
 
    resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
 
    hasBin: true
 
    dependencies:
 
      js-tokens: 4.0.0
 
    dev: false
 

	
 
  /loupe/2.3.6:
 
    resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
 
    dependencies:
 
      get-func-name: 2.0.0
 
    dev: false
 

	
 
  /lru-cache/6.0.0:
 
    resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
 
    engines: {node: '>=10'}
 
    dependencies:
 
      yallist: 4.0.0
 
    dev: false
 
@@ -1552,28 +1611,45 @@ packages:
 
    dev: false
 

	
 
  /queue-microtask/1.2.3:
 
    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
 
    dev: false
 

	
 
  /rdf-js/4.0.2:
 
    resolution: {integrity: sha512-ApvlFa/WsQh8LpPK/6hctQwG06Z9ztQQGWVtrcrf9L6+sejHNXLPOqL+w7q3hF+iL0C4sv3AX1PUtGkLNzyZ0Q==}
 
    dependencies:
 
      '@rdfjs/types': 1.1.0
 
    dev: false
 

	
 
  /react-dom/18.2.0_react@18.2.0:
 
    resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
 
    peerDependencies:
 
      react: ^18.2.0
 
    dependencies:
 
      loose-envify: 1.4.0
 
      react: 18.2.0
 
      scheduler: 0.23.0
 
    dev: false
 

	
 
  /react-is/17.0.2:
 
    resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
 
    dev: false
 

	
 
  /react/18.2.0:
 
    resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      loose-envify: 1.4.0
 
    dev: false
 

	
 
  /readable-stream/4.4.0:
 
    resolution: {integrity: sha512-kDMOq0qLtxV9f/SQv522h8cxZBqNZXuXNyjyezmfAAuribMyVXziljpQ/uQhfE1XLg2/TLTW2DsnoE4VAi/krg==}
 
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 
    dependencies:
 
      abort-controller: 3.0.0
 
      buffer: 6.0.3
 
      events: 3.3.0
 
      process: 0.11.10
 
    dev: false
 

	
 
  /reconnectingwebsocket/1.0.0:
 
    resolution: {integrity: sha1-C4Jbq7N7ZwRFxlqn0+2XgwAgVEQ=}
 
@@ -1590,24 +1666,30 @@ packages:
 
    optionalDependencies:
 
      fsevents: 2.3.2
 
    dev: false
 

	
 
  /rw/1.3.3:
 
    resolution: {integrity: sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=}
 
    dev: false
 

	
 
  /safer-buffer/2.1.2:
 
    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
 
    dev: false
 

	
 
  /scheduler/0.23.0:
 
    resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
 
    dependencies:
 
      loose-envify: 1.4.0
 
    dev: false
 

	
 
  /semver/7.5.1:
 
    resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==}
 
    engines: {node: '>=10'}
 
    hasBin: true
 
    dependencies:
 
      lru-cache: 6.0.0
 
    dev: false
 

	
 
  /shallow-equal/1.2.1:
 
    resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==}
 
    dev: false
 

	
0 comments (0 inline, 0 general)