diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index b1ff04a0..00000000 --- a/.appveyor.yml +++ /dev/null @@ -1,17 +0,0 @@ -platform: x64 - -install: - - ps: Install-Product node $env:nodejs_version $env:platform - -build: off - -build_script: - - node --version - - npm --version - - - npm i now nupdate -g - - nupdate -a gritty - - now rm cloudcmd -y -t %NOW_TOKEN% - - now --public -t %NOW_TOKEN% - - now alias -t %NOW_TOKEN% - diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 66948953..00000000 --- a/.babelrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "presets": [ - "env" - ], - "plugins": [ - "transform-object-assign", - "transform-object-rest-spread" - ] -} - diff --git a/.babelrc.json b/.babelrc.json new file mode 100644 index 00000000..33d70c39 --- /dev/null +++ b/.babelrc.json @@ -0,0 +1,9 @@ +{ + "presets": [ + "@babel/preset-env" + ], + "plugins": [ + "module:babel-plugin-macros", + "@babel/plugin-transform-optional-chaining" + ] +} diff --git a/.bowerrc b/.bowerrc deleted file mode 100644 index 0ab1766a..00000000 --- a/.bowerrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "directory" : "modules" -} \ No newline at end of file diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 00000000..bde9f522 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,4 @@ +last 2 Chrome versions +last 2 Safari versions +Firefox ESR +not dead diff --git a/.cloudcmd.menu.js b/.cloudcmd.menu.js new file mode 100644 index 00000000..0e0126b6 --- /dev/null +++ b/.cloudcmd.menu.js @@ -0,0 +1,31 @@ +export default { + 'F2 - Rename File': renameCurrent, + 'L - Lint': run('npm run lint'), + 'F - Fix Lint': run('npm run fix:lint'), + 'T - Test': run('npm run test'), + 'C - Coverage': run('npm run coverage'), + 'D - Build Dev': run('npm run build:client:dev'), + 'P - Build Prod': run('npm run build:client'), +}; + +async function renameCurrent(DOM) { + await DOM.renameCurrent(); +} + +function run(command) { + return async ({CloudCmd, DOM}) => { + const {TerminalRun, config} = CloudCmd; + + const {CurrentInfo} = DOM; + const {dirPath} = CurrentInfo; + + const cwd = config('root') + dirPath; + + return await TerminalRun.show({ + cwd, + command, + closeMessage: 'Press any key to close Terminal', + autoClose: false, + }); + }; +} diff --git a/.dockerignore b/.dockerignore index d0221be9..1c9d9d9a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,27 +11,13 @@ yarn-error.log yarn.lock now.json -Dockerfile -Dockerfile.alpine +docker webpack.config.js +cssnano.config.js bin/release.js -modules/jquery/dist -modules/jquery/external -modules/jquery/src - -!modules/jquery/dist/jquery.min.js - -modules/fancybox/lib/ -modules/fancybox/demo -modules/fancybox/sprite.psd - -modules/execon -modules/emitify - client -legacy server_ diff --git a/.editorconfig b/.editorconfig index 09fa9422..439abfd0 100644 --- a/.editorconfig +++ b/.editorconfig @@ -9,7 +9,7 @@ root = true charset = utf-8 end_of_line = lf insert_final_newline = true -trim_trailing_whitespace = true +trim_trailing_whitespace = false indent_style = space indent_size = 4 diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 3b54c586..00000000 --- a/.eslintrc +++ /dev/null @@ -1,22 +0,0 @@ -{ - "env": { - "es6": true, - "node": true, - }, - "parserOptions": { - "ecmaVersion": 2017, - "sourceType": "module", - "ecmaFeatures": { - "experimentalObjectRestSpread": true - } - }, - "rules": { - "indent": ["error", 4], - "semi": "error", - "no-console": 0, - "no-use-before-define": ["error", "nofunc"] - }, - "extends": [ - "eslint:recommended" - ] -} diff --git a/.eslintrc.server b/.eslintrc.server deleted file mode 100644 index 2e2555ea..00000000 --- a/.eslintrc.server +++ /dev/null @@ -1,15 +0,0 @@ -{ - "env": { - "node": true - }, - "rules": { - "no-process-exit": 0 - }, - "extends": [ - ".eslintrc", - "plugin:node/recommended" - ], - "plugins": [ - "node" - ] -} diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..9fdb6d3c --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +github: coderaiser +open_collective: cloudcmd +ko_fi: coderaiser diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 6cc34cc8..00000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,12 +0,0 @@ - - -* **Version** (`cloudcmd -v`): -* **Node Version** `node -v`: -* **OS** (`uname -a` on Linux): -* **Browser name/version**: -* **Used Command Line Parameters**: -* **Changed Config**: - diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..5c1e7460 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,45 @@ +--- + +name: Bug report +about: Create a report to help us improve +title: '' +labels: needs clarification +assignees: coderaiser + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: + +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + +- **Version** (`cloudcmd -v`): +- **Node Version** `node -v`: +- **OS** (`uname -a` on Linux): +- **Browser name/version**: +- **Used Command Line Parameters**: +- **Changed Config**: + +```json +{} +``` +- [ ] 🎁 **I'm ready to donate on https://opencollective.com/cloudcmd** +- [ ] 🎁 **I'm ready to donate on https://ko-fi.com/coderaiser** +- [ ] 💪 **I'm willing to work on this issue** + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..5f41e73a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Stack Overflow + url: https://stackoverflow.com/search?q=cloudcmd + about: Please ask and answer questions here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..549a8874 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,21 @@ +--- + +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md new file mode 100644 index 00000000..17bf5831 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -0,0 +1,24 @@ +*** + +name: Tracking issue +about: Create an issue with bug report or feature request. +title: "" +labels: needs triage +assignees: coderaiser + +*** + +- **Version** (`cloudcmd -v`): +- **Node Version** `node -v`: +- **OS** (`uname -a` on Linux): +- **Browser name/version**: +- **Used Command Line Parameters**: +- **Changed Config**: + +```json +{} +``` + +- [ ] 🎁 **I'm ready to donate on https://opencollective.com/cloudcmd** +- [ ] 🎁 **I'm ready to donate on https://ko-fi.com/coderaiser** +- [ ] 💪 **I'm willing to work on this issue** diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 98b1f1ad..fb62bd82 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -4,6 +4,5 @@ about something, just do as best as you're able. --> - [ ] commit message named according to [Contributing Guide](https://github.com/coderaiser/cloudcmd/blob/master/CONTRIBUTING.md "Contributting Guide") -- [ ] `npm run codestyle` is OK +- [ ] `npm run fix:lint` is OK - [ ] `npm test` is OK - diff --git a/.github/workflows/docker-io.yml b/.github/workflows/docker-io.yml new file mode 100644 index 00000000..8cbeb042 --- /dev/null +++ b/.github/workflows/docker-io.yml @@ -0,0 +1,60 @@ +name: Docker IO +permissions: + contents: write +on: + - push +jobs: + buildx: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout + uses: actions/checkout@v5 + - uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + - name: Use Node.js 24.x + uses: actions/setup-node@v6 + with: + node-version: 24.x + - name: Install Redrun + run: bun i redrun -g --no-save + - name: NPM Install + run: bun i --no-save + - name: Lint + run: redrun lint + - name: Build + id: build + run: | + redrun build + VERSION=$(grep '"version":' package.json -m1 | cut -d\" -f4) + echo "version=$VERSION" >> $GITHUB_OUTPUT + - name: Set up QEMU + uses: docker/setup-qemu-action@v4 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v4 + - name: Login to DockerHub + uses: docker/login-action@v4 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_TOKEN }} + - name: Login to GitHub Container Registry + uses: docker/login-action@v4 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push io-image + uses: docker/build-push-action@v7 + with: + context: . + file: docker/Dockerfile.io + platforms: linux/amd64,linux/arm64 + push: true + tags: | + coderaiser/cloudcmd:io + coderaiser/cloudcmd:${{ steps.build.outputs.version }}-io + ghcr.io/${{ github.repository }}-io + ghcr.io/${{ github.repository }}:${{ steps.build.outputs.version }}-io diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 00000000..5c81d368 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,88 @@ +name: Docker CI +permissions: + contents: write +on: + push: + tags: + - "*" +jobs: + buildx: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout + uses: actions/checkout@v5 + - uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + - name: Use Node.js 22.x + uses: actions/setup-node@v6 + with: + node-version: 22.x + - name: Install Redrun + run: bun i redrun -g --no-save + - name: NPM Install + run: bun i --no-save + - name: Lint + run: redrun lint + - name: Build + id: build + run: | + redrun build + VERSION=$(grep '"version":' package.json -m1 | cut -d\" -f4) + echo "version=$VERSION" >> $GITHUB_OUTPUT + - name: Set up QEMU + uses: docker/setup-qemu-action@v4 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v4 + - name: Login to DockerHub + uses: docker/login-action@v4 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_TOKEN }} + - name: Login to GitHub Container Registry + uses: docker/login-action@v4 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push base-image + uses: docker/build-push-action@v7 + with: + context: . + file: docker/Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + tags: | + coderaiser/cloudcmd:latest + coderaiser/cloudcmd:${{ steps.build.outputs.version }} + ghcr.io/${{ github.repository }}:latest + ghcr.io/${{ github.repository }}:${{ steps.build.outputs.version }} + - name: Build and push alpine-image + uses: docker/build-push-action@v7 + with: + context: . + file: docker/Dockerfile.alpine + platforms: linux/amd64,linux/arm64 + push: true + tags: | + coderaiser/cloudcmd:alpine + coderaiser/cloudcmd:latest-alpine + coderaiser/cloudcmd:${{ steps.build.outputs.version }}-alpine + ghcr.io/${{ github.repository }}:latest-alpine + ghcr.io/${{ github.repository }}:${{ steps.build.outputs.version }}-alpine + - name: Build and push slim-image + uses: docker/build-push-action@v7 + with: + context: . + file: docker/Dockerfile.slim + platforms: linux/amd64,linux/arm64 + push: true + tags: | + coderaiser/cloudcmd:slim + coderaiser/cloudcmd:latest-slim + coderaiser/cloudcmd:${{ steps.build.outputs.version }}-slim + ghcr.io/${{ github.repository }}-slim + ghcr.io/${{ github.repository }}:${{ steps.build.outputs.version }}-slim diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml new file mode 100644 index 00000000..429e5568 --- /dev/null +++ b/.github/workflows/nodejs.yml @@ -0,0 +1,53 @@ +name: Node CI +on: + - push +permissions: + contents: write +jobs: + build: + runs-on: ubuntu-latest + env: + NAME: cloudcmd + strategy: + matrix: + node-version: + - 22.x + - 24.x + - 26.x + steps: + - uses: actions/checkout@v5 + - uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v6 + with: + node-version: ${{ matrix.node-version }} + - name: Install Redrun + run: bun i redrun madrun -g --no-save + - name: Install + run: bun i --no-save + - name: Init Madrun + run: madrun --init + - name: Lint + run: redrun fix:lint + - name: Typos + uses: coderaiser/typos.ai@v1.1.8 + with: + key: ${{ secrets.TYPOS_AI_KEY }} + - name: Commit fixes + uses: EndBug/add-and-commit@v10 + continue-on-error: true + with: + message: "chore: ${{ env.NAME }}: actions: lint ☘️" + - name: Build + run: redrun build + - name: Test + run: redrun test + - name: Coverage + run: redrun coverage coverage:report + - name: Coveralls + uses: coverallsapp/github-action@v2 + continue-on-error: true + with: + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index fb11fcaf..6aa86aa9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,30 +1,17 @@ -package-lock.json -yarn.lock -yarn-error.log -node_modules -npm-debug.log* -coverage - -modules/jquery/dist -modules/jquery/external -modules/jquery/src - -!modules/jquery/dist/jquery.min.js - -modules/fancybox/lib/ -modules/fancybox/demo -modules/fancybox/sprite.psd -modules/fancybox/*.json -modules/fancybox/gulpfile.js -modules/jquery-mousewheel - -modules/execon -modules/emitify +*.swp +*.log +*.lock .nyc_output +.DS_Store +.idea -*.swp +package-lock.json +npm-debug.log* +node_modules +coverage +modules/execon +modules/emitify dist dist-dev - diff --git a/.madrun.js b/.madrun.js new file mode 100644 index 00000000..efa8ce98 --- /dev/null +++ b/.madrun.js @@ -0,0 +1,62 @@ +import {run, cutEnv} from 'madrun'; +import {defineEnv} from 'supertape/env'; + +const testEnv = defineEnv({ + timeout: 7000, + css: true, +}); + +const buildEnv = { + NODE_ENV: 'production', +}; + +export default { + 'start': () => 'node bin/cloudcmd.js', + 'start:dev': async () => await run('start', null, { + NODE_ENV: 'development', + }), + 'build:start': () => run(['build:client', 'start']), + 'build:start:dev': () => run([ + 'build:client:dev', + 'start:dev', + ]), + 'lint:all': () => run('lint:progress'), + 'lint': () => 'redlint fix; putout .', + 'lint:progress': () => run('lint', '-f progress'), + 'watch:lint': () => 'nodemon -w client -w server -w test -w common -w .webpack -x "putout -s"', + 'fresh:lint': () => run('lint', '--fresh'), + 'lint:fresh': () => run('lint', '--fresh'), + 'fix:lint': async () => `putout --fix . && redlint fix`, + 'lint:stream': () => run('lint', '-f stream'), + 'test': () => [testEnv, `tape '{test}/**/*.js' '{bin,client,static,common,server}/**/*.spec.js' -f fail`], + 'test:e2e': () => `tape 'test-e2e/**/*.js'`, + 'test:client': () => `tape 'test/client/**/*.js'`, + 'test:server': () => `tape 'test/**/*.js' 'server/**/*.spec.js' 'common/**/*.spec.js'`, + 'wisdom': async () => await run(['lint:all', 'build', 'test'], null, { + CI: 1, + }), + 'wisdom:type': () => 'bin/release.js', + 'coverage': async () => [testEnv, `c8 ${await cutEnv('test')}`], + 'coverage:report': () => 'c8 report --reporter=lcov', + 'report': () => 'c8 report --reporter=lcov', + '6to5': () => [buildEnv, 'rspack build --config rspack.config.js'], + '6to5:client': () => run('6to5', '--mode production'), + '6to5:client:dev': async () => await run('6to5', '--mode development', { + NODE_ENV: 'development', + }), + 'pre6to5:client': () => 'rimraf dist', + 'pre6to5:client:dev': () => 'rimraf dist-dev', + 'watch:client': () => run('6to5:client', '--watch'), + 'watch:client:dev': () => run('6to5:client:dev', '--watch'), + 'watch:server': () => 'nodemon bin/cloudcmd.js', + 'watch:test': async () => [testEnv, `nodemon -w client -w server -w test -w common -x ${await cutEnv('test')}`], + 'watch:test:client': async () => `nodemon -w client -w test/client -x ${await run('test:client')}`, + 'watch:test:server': async () => `nodemon -w client -w test/client -x ${await run('test:server')}`, + 'watch:coverage': async () => [testEnv, `nodemon -w server -w test -w common -x ${await cutEnv('coverage')}`], + 'watch:fix:lint': async () => `nodemon -w client -w server -w test -w common -x '${await run('fix:lint')}'`, + 'build': async () => run('6to5:*'), + 'build:dev': async () => run('build:client:dev'), + 'build:client': () => run('6to5:client'), + 'build:client:dev': () => run('6to5:client:dev'), + 'heroku-postbuild': () => run('6to5:client'), +}; diff --git a/.npmignore b/.npmignore index c68623ca..b83b5923 100644 --- a/.npmignore +++ b/.npmignore @@ -1,33 +1,29 @@ +*.spec.* +*.config.* +*.fixture.js* +*.ai +*.cdr +*.eps +*.log +*.lock + .* -*.spec.js + manifest.yml -Dockerfile* docker-compose.yml -test +now.json +app.json +bower.json +deno.json +bin/release.* +img/logo/cloudcmd-hq.png +webpack.config.js + +docker +test* +fixture +fixture-* coverage css html -yarn-error.log -yarn.lock -now.json - -modules/jquery/dist -modules/jquery/external -modules/jquery/src - -!modules/jquery/dist/jquery.min.js - -modules/fancybox/lib/ -modules/fancybox/demo -modules/fancybox/sprite.psd - -app.json -bower.json -manifest.yml - -bin/release.js - client - -webpack.config.js - diff --git a/.nycrc.json b/.nycrc.json new file mode 100644 index 00000000..1fe174f3 --- /dev/null +++ b/.nycrc.json @@ -0,0 +1,15 @@ +{ + "checkCoverage": false, + "all": false, + "exclude": [ + "**/*.spec.js", + "**/*.*.js", + "**/*.config.*", + "**/fixture", + "**/test/**" + ], + "branches": 100, + "lines": 100, + "functions": 100, + "statements": 100 +} diff --git a/.putout.json b/.putout.json new file mode 100644 index 00000000..7154775a --- /dev/null +++ b/.putout.json @@ -0,0 +1,60 @@ +{ + "plugins": ["cloudcmd"], + "ignore": [ + "*.md", + "app.json", + "fontello.json", + "html", + "fixture*" + ], + "rules": { + "package-json/add-type": "off" + }, + "match": { + ".filesystem.json": { + "nodejs/rename-file-cjs-to-js": "off" + }, + "base64": { + "types/convert-typeof-to-is-type": "off" + }, + "*.md": { + "nodejs/convert-commonjs-to-esm": "on" + }, + ".webpack": { + "webpack": "on" + }, + "server": { + "nodejs/remove-process-exit": "on" + }, + "server/{server,exit}.js": { + "nodejs/remove-process-exit": "off" + }, + "server/{server,exit,terminal,distribute/log}.{js,mjs}": { + "remove-console": "off" + }, + "client/{client,cloudcmd,load-module}.{js,mjs}": { + "remove-console": "off" + }, + "client": { + "nodejs": "off" + }, + "client/sw": { + "remove-console": "off" + }, + "test/common/cloudfunc.js": { + "remove-console": "off" + }, + "storage.js": { + "promises/remove-useless-async": "off" + }, + "docker.yml": { + "github/set-node-versions": "off" + }, + "vim.js": { + "merge-duplicate-functions": "off" + }, + "common": { + "nodejs/declare": "off" + } + } +} diff --git a/.rspack/css.js b/.rspack/css.js new file mode 100644 index 00000000..10d28250 --- /dev/null +++ b/.rspack/css.js @@ -0,0 +1,38 @@ +import {env} from 'node:process'; +import {rspack} from '@rspack/core'; + +const {CssExtractRspackPlugin} = rspack; +const isDev = env.NODE_ENV === 'development'; + +const plugins = [ + new CssExtractRspackPlugin({ + filename: '[name].css', + }), +]; + +const rules = [{ + test: /\.css$/i, + use: [CssExtractRspackPlugin.loader, { + loader: 'css-loader', + options: { + url: true, + }, + }], +}, { + test: /\.(png|gif|svg|woff|woff2|eot|ttf)$/, + type: 'asset/inline', +}]; + +export default { + mode: isDev ? 'development' : 'production', + plugins, + module: { + rules, + }, + optimization: { + minimize: !isDev, + minimizer: [ + new rspack.LightningCssMinimizerRspackPlugin(), + ], + }, +}; diff --git a/.rspack/html.js b/.rspack/html.js new file mode 100644 index 00000000..e90038ac --- /dev/null +++ b/.rspack/html.js @@ -0,0 +1,36 @@ +import {env} from 'node:process'; +import HtmlWebpackPlugin from 'html-webpack-plugin'; + +const isDev = env.NODE_ENV === 'development'; + +export const plugins = [ + new HtmlWebpackPlugin({ + inject: false, + template: 'html/index.html', + minify: !isDev && getMinifyHtmlOptions(), + }), +]; + +function getMinifyHtmlOptions() { + return { + removeComments: true, + removeCommentsFromCDATA: true, + removeCDATASectionsFromCDATA: true, + collapseWhitespace: true, + collapseBooleanAttributes: true, + removeAttributeQuotes: true, + removeRedundantAttributes: true, + useShortDoctype: true, + removeEmptyAttributes: true, + /* оставляем, поскольку у нас + * в элемент fm генерируеться + * таблица файлов + */ + removeEmptyElements: false, + removeOptionalTags: true, + removeScriptTypeAttributes: true, + removeStyleLinkTypeAttributes: true, + + minifyJS: true, + }; +} diff --git a/.rspack/js.js b/.rspack/js.js new file mode 100644 index 00000000..251d85f6 --- /dev/null +++ b/.rspack/js.js @@ -0,0 +1,173 @@ +import {resolve, sep} from 'node:path'; +import {fileURLToPath} from 'node:url'; +import {env} from 'node:process'; +import {rspack} from '@rspack/core'; + +const resolveModule = (a) => fileURLToPath(import.meta.resolve(a)); + +const { + EnvironmentPlugin, + NormalModuleReplacementPlugin, + ProvidePlugin, +} = rspack; + +const modules = './modules'; +const dirModules = './client/modules'; +const dirCss = './css'; +const dirThemes = `${dirCss}/themes`; +const dirColumns = `${dirCss}/columns`; +const dir = './client'; +const {NODE_ENV} = env; +const isDev = NODE_ENV === 'development'; + +const rootDir = new URL('..', import.meta.url).pathname; +const dist = resolve(rootDir, 'dist'); +const distDev = resolve(rootDir, 'dist-dev'); +const devtool = isDev ? 'eval' : 'source-map'; + +const noParse = (a) => a.endsWith('.spec.js'); + +// codegen.macro is a babel-macro (build-time codegen), not supported by +// Rspack's native SWC transform, so client/sw/sw.js (the only file that +// uses it) keeps going through babel-loader. Everything else uses +// Rspack's built-in SWC loader, which is the main source of the speedup. +const rules = [{ + test: /sw\/sw\.js$/, + exclude: /node_modules/, + loader: 'babel-loader', +}, { + test: /\.[mc]?js$/, + exclude: [/node_modules/, /sw\/sw\.js$/], + loader: 'builtin:swc-loader', + options: { + jsc: { + parser: { + syntax: 'ecmascript', + }, + }, + env: { + targets: 'defaults', + }, + }, +}]; + +const plugins = [ + new NormalModuleReplacementPlugin(/^node:/, (resource) => { + resource.request = resource.request.replace(/^node:/, ''); + }), + new NormalModuleReplacementPlugin(/^putout$/, '@putout/bundle'), + new EnvironmentPlugin({ + NODE_ENV, + }), + new ProvidePlugin({ + process: 'process/browser', + }), +]; + +const splitChunks = { + chunks: 'all', + cacheGroups: { + abcCommon: { + name: 'cloudcmd.common', + chunks: (chunk) => { + const lazyChunks = [ + 'sw', + 'nojs', + 'view', + 'edit', + 'terminal', + 'config', + 'user-menu', + 'help', + 'themes/dark', + 'themes/light', + 'columns/name-size', + 'columns/name-size-date', + 'columns/name-size-time', + 'columns/name-size-date-time', + ]; + + return !lazyChunks.includes(chunk.name); + }, + minChunks: 1, + enforce: true, + priority: -1, + reuseExistingChunk: true, + }, + }, +}; + +export default { + resolve: { + symlinks: false, + alias: { + 'node:process': 'process', + 'node:path': 'path', + }, + fallback: { + path: resolveModule('path-browserify'), + process: resolveModule('process/browser'), + util: resolveModule('util'), + }, + }, + devtool, + optimization: { + splitChunks, + }, + entry: { + 'themes/dark': `${dirThemes}/dark.css`, + 'themes/light': `${dirThemes}/light.css`, + 'columns/name-size': `${dirColumns}/name-size.css`, + 'columns/name-size-date': `${dirColumns}/name-size-date.css`, + 'columns/name-size-date-time': `${dirColumns}/name-size-date-time.css`, + 'nojs': `${dirCss}/nojs.css`, + 'help': `${dirCss}/help.css`, + 'view': `${dirCss}/view.css`, + 'config': `${dirCss}/config.css`, + 'terminal': `${dirCss}/terminal.css`, + 'user-menu': `${dirCss}/user-menu.css`, + 'sw': `${dir}/sw/sw.js`, + 'cloudcmd': `${dir}/cloudcmd.js`, + [`${modules}/edit`]: `${dirModules}/edit.js`, + [`${modules}/edit-file`]: `${dirModules}/edit-file.js`, + [`${modules}/edit-file-vim`]: `${dirModules}/edit-file-vim.js`, + [`${modules}/edit-names`]: `${dirModules}/edit-names.js`, + [`${modules}/edit-names-vim`]: `${dirModules}/edit-names-vim.js`, + [`${modules}/menu`]: `${dirModules}/menu/index.js`, + [`${modules}/view`]: `${dirModules}/view/index.js`, + [`${modules}/help`]: `${dirModules}/help.js`, + [`${modules}/markdown`]: `${dirModules}/markdown.js`, + [`${modules}/config`]: `${dirModules}/config/index.js`, + [`${modules}/contact`]: `${dirModules}/contact.js`, + [`${modules}/upload`]: `${dirModules}/upload.js`, + [`${modules}/operation`]: `${dirModules}/operation/index.js`, + [`${modules}/konsole`]: `${dirModules}/konsole.js`, + [`${modules}/terminal`]: `${dirModules}/terminal.js`, + [`${modules}/terminal-run`]: `${dirModules}/terminal-run.js`, + [`${modules}/cloud`]: `${dirModules}/cloud.js`, + [`${modules}/user-menu`]: `${dirModules}/user-menu/index.js`, + [`${modules}/polyfill`]: `${dirModules}/polyfill.js`, + [`${modules}/command-line`]: `${dirModules}/command-line.js`, + }, + output: { + filename: '[name].js', + path: isDev ? distDev : dist, + pathinfo: isDev, + devtoolModuleFilenameTemplate, + publicPath: '/dist/', + }, + module: { + rules, + noParse, + }, + plugins, + performance: { + maxEntrypointSize: 800_000, + maxAssetSize: 600_000, + }, +}; + +function devtoolModuleFilenameTemplate(info) { + const resource = info.absoluteResourcePath.replace(rootDir + sep, ''); + return `file://cloudcmd/${resource}`; +} diff --git a/.stylelintrc.yml b/.stylelintrc.yml deleted file mode 100644 index ddbd3acf..00000000 --- a/.stylelintrc.yml +++ /dev/null @@ -1,16 +0,0 @@ -extends: stylelint-config-standard -rules: - indentation: 4 - declaration-block-trailing-semicolon: always - declaration-colon-space-before: null - selector-list-comma-newline-after: null - comment-empty-line-before: null - number-leading-zero: null - number-no-trailing-zeros: null - string-quotes: single - function-url-quotes: never - no-eol-whitespace: null - font-family-name-quotes: always-unless-keyword - font-family-no-missing-generic-family-keyword: null - rule-empty-line-before: null - diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 7211ed53..00000000 --- a/.travis.yml +++ /dev/null @@ -1,27 +0,0 @@ -language: node_js -node_js: - - 10 - - 8 - -script: - - npm run lint && npm run build && npm run coverage && npm run report - -notifications: - email: - on_success: never - on_failure: change - -sudo: required - -services: - - docker - -deploy: - provider: script - script: npm run docker-ci - skip_cleanup: true - on: - node: '8' - tags: true - all_branches: false - diff --git a/.typos.toml b/.typos.toml new file mode 100644 index 00000000..dc8af253 --- /dev/null +++ b/.typos.toml @@ -0,0 +1,2 @@ +[files] +extend-exclude = ["ChangeLog"] diff --git a/.webpack/css.js b/.webpack/css.js deleted file mode 100644 index 2668695f..00000000 --- a/.webpack/css.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict'; - -const fs = require('fs'); -const { - basename, - extname, - join, -} = require('path'); - -const {env} = process; -const isDev = env.NODE_ENV === 'development'; - -const ExtractTextPlugin = require('extract-text-webpack-plugin'); - -const extractCSS = (a) => new ExtractTextPlugin(`${a}.css`); -const extractMain = extractCSS('[name]'); - -const cssNames = [ - 'nojs', - 'view', - 'config', - ...getCSSList('columns'), -]; - -const cssPlugins = cssNames.map(extractCSS); - -const plugins = [ - ...cssPlugins, - extractMain, -]; - -const rules = [{ - test: /\.css$/, - exclude: /css\/(nojs|view|config|columns.*)\.css/, - use: extractMain.extract([ - 'css-loader?minimize', - ]), -}, -...cssPlugins.map(extract), { - test: /\.(png|gif|svg|woff|woff2|eot|ttf)$/, - loader: 'url-loader?limit=50000', -}]; - -module.exports = { - plugins, - module: { - rules, - }, -}; - -function getCSSList(dir) { - const base = (a) => basename(a, extname(a)); - const addDir = (name) => `${dir}/${name}`; - const rootDir = join(__dirname, '..'); - - return fs.readdirSync(`${rootDir}/css/${dir}`) - .map(base) - .map(addDir); -} - -function extract(extractPlugin) { - const {filename} = extractPlugin; - const loader = isDev ? 'css-loader' : 'css-loader?minimize'; - - return { - test: RegExp(`css/${filename}`), - use: extractPlugin.extract([ - loader - ]) - }; -} - diff --git a/.webpack/html.js b/.webpack/html.js deleted file mode 100644 index 28e40c65..00000000 --- a/.webpack/html.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -const {env} = process; -const isDev = env.NODE_ENV === 'development'; - -const HtmlWebpackPlugin = require('html-webpack-plugin'); - -const plugins = [ - new HtmlWebpackPlugin({ - inject: false, - template: 'html/index.html', - minify: !isDev && getMinifyHtmlOptions(), - }), -]; - -module.exports = { - plugins, -}; - -function getMinifyHtmlOptions() { - return { - removeComments: true, - removeCommentsFromCDATA: true, - removeCDATASectionsFromCDATA: true, - collapseWhitespace: true, - collapseBooleanAttributes: true, - removeAttributeQuotes: true, - removeRedundantAttributes: true, - useShortDoctype: true, - removeEmptyAttributes: true, - /* оставляем, поскольку у нас - * в элемент fm генерируеться - * таблица файлов - */ - removeEmptyElements: false, - removeOptionalTags: true, - removeScriptTypeAttributes: true, - removeStyleLinkTypeAttributes: true, - - minifyJS: true, - }; -} - diff --git a/.webpack/js.js b/.webpack/js.js deleted file mode 100644 index b5a02ea1..00000000 --- a/.webpack/js.js +++ /dev/null @@ -1,93 +0,0 @@ -'use strict'; - -const { - resolve, - sep, - join, -} = require('path'); - -const dir = './client'; -const dirModules = './client/modules'; -const modules = './modules'; - -const {env} = process; -const isDev = env.NODE_ENV === 'development'; - -const rootDir = join(__dirname, '..'); -const dist = resolve(rootDir, 'dist'); -const distDev = resolve(rootDir, 'dist-dev'); -const devtool = isDev ? 'eval' : 'source-map'; - -const notEmpty = (a) => a; -const clean = (array) => array.filter(notEmpty); - -const rules = clean([ - !isDev && { - test: /\.js$/, - exclude: /node_modules/, - loader: 'babel-loader', - }]); - -const splitChunks = { - chunks: 'all', - name: 'cloudcmd.common', -}; - -module.exports = { - devtool, - optimization: { - splitChunks, - }, - entry: { - cloudcmd: `${dir}/cloudcmd.js`, - [modules + '/edit']: `${dirModules}/edit.js`, - [modules + '/edit-file']: `${dirModules}/edit-file.js`, - [modules + '/edit-file-vim']: `${dirModules}/edit-file-vim.js`, - [modules + '/edit-names']: `${dirModules}/edit-names.js`, - [modules + '/menu']: `${dirModules}/menu.js`, - [modules + '/view']: `${dirModules}/view.js`, - [modules + '/help']: `${dirModules}/help.js`, - [modules + '/markdown']: `${dirModules}/markdown.js`, - [modules + '/config']: `${dirModules}/config.js`, - [modules + '/contact']: `${dirModules}/contact.js`, - [modules + '/upload']: `${dirModules}/upload.js`, - [modules + '/operation']: `${dirModules}/operation/index.js`, - [modules + '/konsole']: `${dirModules}/konsole.js`, - [modules + '/terminal']: `${dirModules}/terminal.js`, - [modules + '/cloud']: `${dirModules}/cloud.js`, - [modules + '/polyfill']: `${dirModules}/polyfill.js`, - }, - output: { - filename: '[name].js', - path: isDev ? distDev : dist, - pathinfo: isDev, - devtoolModuleFilenameTemplate, - publicPath: '/dist/', - }, - externals: [ - externals - ], - module: { - rules, - }, -}; - -function externals(context, request, fn) { - if (!isDev) - return fn(); - - const list = [ - 'es6-promise', - ]; - - if (list.includes(request)) - return fn(null, request); - - fn(); -} - -function devtoolModuleFilenameTemplate(info) { - const resource = info.absoluteResourcePath.replace(rootDir + sep, ''); - return `file://cloudcmd/${resource}`; -} - diff --git a/.yaspellerrc b/.yaspellerrc index aa540e49..7e29119e 100644 --- a/.yaspellerrc +++ b/.yaspellerrc @@ -10,6 +10,7 @@ ".md" ], "dictionary":[ + "CloudCmd", "Dev", "Dropbox", "Deepword", @@ -21,17 +22,23 @@ "Iptables", "JitSu", "Node", + "IO", "Olena", "TarZak", "Termux", "Zalitok", "WebSocket", + "auth", + "autostart", + "binded", "cd", "cloudcmd", "coderaiser", "com", - "dev", "deepword", + "dev", + "destructuring", + "dropbox", "dword", "edward", "favicon", @@ -39,12 +46,18 @@ "gz", "io", "js", + "linux", "maintainers", + "markdown", + "microservice", "minification", "mouseup", "named", "nginx", + "npm", "or io", + "patreon", + "rc", "refactor", "sexualized", "sslPort", @@ -53,6 +66,7 @@ "v0", "v1", "v2", - "yml" + "yml", + "systemd" ] } diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 7e77a3a2..0e2522dd 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -8,19 +8,19 @@ In the interest of fostering an open and welcoming environment, we as contributo Examples of behavior that contributes to creating a positive environment include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c7c9b914..b6b6b4ef 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,27 +1,30 @@ -Commit ---------------- +## Commit + Format of the commit message: **type(scope) subject** **Type**: -- feature(scope) subject -- fix(scope) subject -- docs(scope) subject -- refactor(scope) subject -- test(scope) subject -- chore(scope) subject + +- feature: scope: subject +- fix: scope: subject +- docs: scope: subject +- refactor: scope: subject +- test: scope: subject +- chore: scope: subject **Scope**: Scope could be anything specifying place of the commit change. For example util, console, view, edit, style etc... **Subject text**: + - use imperative, present tense: “change” not “changed” nor “changes” - don't capitalize first letter - no dot (.) at the end -**Message body**: + **Message body**: - just as in use imperative, present tense: “change” not “changed” nor “changes” - includes motivation for the change and contrasts with previous behavior **Examples**: -- [fix(style) .name{width}: 37% -> 35%](https://github.com/coderaiser/cloudcmd/commit/94b0642e3990c17b3a0ee3efeb75f343e1e7c050) -- [fix(console) dispatch: focus -> mouseup](https://github.com/coderaiser/cloudcmd/commit/f41ec5058d1411e86a881f8e8077e0572e0409ec) + +- [fix: style: .name{width}: 37% -> 35%](https://github.com/coderaiser/cloudcmd/commit/94b0642e3990c17b3a0ee3efeb75f343e1e7c050) +- [fix: console: dispatch: focus -> mouseup](https://github.com/coderaiser/cloudcmd/commit/f41ec5058d1411e86a881f8e8077e0572e0409ec) diff --git a/ChangeLog b/ChangeLog index d16608c0..c5e0fbca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,2932 @@ +2026.06.15, v19.19.1 + +feature: +- 78b206e0 client: key: Ctrl + L -> Ctrl + Shift + L: Log out (#466) +- b1492885 docker: io: NPM_CONFIG_PACKAGE_LOCK=false +- 76d7bf4d docker: typos, shellcheck: add + +2026.05.26, v19.19.0 + +feature: +- 4ee38db6 client: view: flac: add support + +2026.05.26, v19.18.1 + +feature: +- 40ecef5e cloudcmd: ratelimit: X-Forwarded-For (#437) + +2026.05.26, v19.18.0 + +fix: +- 161bede8 client: menu: @putout/bundle@5.5. +- 447d990f cloudcmd: server: rest: sendError + +feature: +- 5d9628ce cloudcmd: rate limit: add support (#437) +- 2be395e6 cloudcmd: get rid of manifest: 401 basic auth + +2026.05.17, v19.17.0 + +fix: +- d96f6c46 css: query: hide time on mobile +- e7c55e05 docker: io: XDG_CONFIG_HOME + +feature: +- ae1ca0f8 cloudcmd: cssnano-preset-default v8.0.1 +- 94d5096a style: owner, mode: improve +- 807f8346 cloudcmd: superc8 v12.6.0 +- 67a95722 docker: io: cline: add +- 68eacb91 qword: add +- 4acd294b docker: io: tmux +- 05c80043 cloudcmd: @supertape/loader-css v1.0.0 +- 800a6545 cloudcmd: eslint-plugin-n v18.0.1 +- a985bb36 cloudcmd: supertape v13.0.0 +- 4315ec61 docker: io XDG_CONFIG_HOME: /etc -> /usr/local/etc + +2026.05.03, v19.16.0 + +feature: +- d82d0335 client: vim: rr for rename file +- acfa27cf docker: io: nvchad: add +- 14f009f8 docker: io: bash-completion: add +- c6c60146 docker: io: f4 +- 9a6b8935 docker: io: GOPATH +- a9bc22ce cloudcmd: operation: rm useless checks +- 36bacfe9 cloudcmd: client: key: vim: cc, mm +- 591da25c cloudcmd: ponse v8.0.0 +- 1e1b073c docker: io: /usr/src/cloudcmd -> /usr/local/share/cloudcmd + +2026.04.28, v19.15.0 + +feature: +- 9d97343b cloudcmd: operation: rm useless checks +- 46a88cfa cloudcmd: client: key: vim: cc, mm + +2026.04.28, v19.14.0 + +feature: +- 36a8b641 cloudcmd: ponse v8.0.0 +- 1c263c18 docker: io: /usr/src/cloudcmd -> /usr/local/share/cloudcmd +- ea7b828c docker: io: ubuntu: resolute +- cd6c11ac docker: io: far2l +- c4beeec6 docker: io: gdu: add + +2026.04.21, v19.13.1 + +feature: +- d5cd11e8 cloudcmd: montag v2.0.1 +- dc94d2db docker: io: add latest git version +- 1637beee docker: io: /usr/local/src -> /usr/local/share +- b1bc4e73 Docker: io: pv +- 7c0dca60 docker: io: git: master + +2026.04.15, v19.13.0 + +fix: +- 48693d9e docker: io: XDG_CACHE_HOME + +feature: +- 4b2395c5 cloudcmd: Ctrl + L: logout +- 977a8aaa docker: io: strace: add +- 7d0098fd docker: io: XDG_CACHE_HOME=/tmp/cache +- a89e901b actions: docker: io: add + +2026.04.12, v19.12.5 + +feature: +- 1cfc1a6f docker: io: only amd64 + +2026.04.12, v19.12.4 + +feature: +- 3c2b5658 docker: io: haskell +- d37f8cd3 docker: io: palabra: node + +2026.04.12, v19.12.3 + +feature: +- cb6cabd4 docker: io: PALABRA_DIR + +2026.04.11, v19.12.2 + +feature: +- 2ce11fa2 docker: io: get rid of haskell: to slow install +- aa741232 docker: io: rizin, yara + +2026.04.09, v19.12.1 + +feature: +- 5bd03215 docker: io: add PREFIX + +2026.04.09, v19.12.0 + +feature: +- 13b15b7b docker: io: palabra + +2026.04.07, v19.11.14 + +feature: +- a31beab0 docker: io: rustup env + +2026.04.07, v19.11.13 + +feature: +- 6a08479a docker: io: BUN_INSTALL + +2026.04.06, v19.11.12 + +feature: +- 46c65554 docker: io: npm_config_cache + +2026.04.06, v19.11.11 + +feature: +- ae2ce388 docker: io: $DENO_DIR + +2026.04.06, v19.11.10 + +feature: +- 12ea14ac docker: io: nvm: node + +2026.04.06, v19.11.9 + +feature: +- ea96d13f docker: io: net-tools + +2026.04.06, v19.11.8 + +feature: +- 5c08565f docker: io: debian -> ubuntu + +2026.04.05, v19.11.7 + +feature: +- 36cdef37 docker: io: bookworm + +2026.04.05, v19.11.6 + +feature: +- 845f9bd1 cloudcmd: gritty v10.2.0 + +2026.04.05, v19.11.5 + +feature: +- f9c513cc docker: io: hexyl: add + +2026.04.04, v19.11.4 + +feature: +- e7347d25 docker: io: neovim: apt -> github + +2026.04.04, v19.11.3 + +feature: +- 9970ff76 docker: io: btop +- 4395a471 docker: io: $PATH: add $HOME/.local/bin + +2026.04.04, v19.11.2 + +feature: +- c40ae8e4 docker: io: htop +- f463c5c5 docker: io: aptitude: add +- d1032f09 docker: io: remove unused + +2026.04.04, v19.11.1 + +feature: +- 7787bfc2 cloudcmd: user-menu: runFromCDN + +2026.04.04, v19.11.0 + +feature: +- 32f89d38 cloudcmd: user-menu: root + +2026.04.04, v19.10.2 + +feature: +- df4fb517 cloudcmd: aleman v2.0.1 + +2026.04.03, v19.10.1 + +feature: +- ceb7ef4f docker: io: keep /var/lib/apt/lists + +2026.04.02, v19.10.0 + +fix: +- d12e7bd0 distribute: fix event listener leak on socket disconnect (#462) + +2026.04.02, v19.9.24 + +feature: +- c4d26c6a docker: io: apt-get upgrade +- 9ddb8c29 docker: io: get rid of nix +- e4d7d441 docker: io: nix + +2026.04.01, v19.9.23 + +feature: +- 5a3413ce docker: io: nix + +2026.03.31, v19.9.22 + +feature: +- b4345ed4 docker: io: DENO_DIR + +2026.03.31, v19.9.21 + +fix: +- 5c6a9a95 css: columns: name: 40% -> 35% + +2026.03.30, v19.9.20 + +feature: +- cd0b5554 iocmd: io: nvm + +2026.03.30, v19.9.19 + +feature: +- 6a52b11e docker: io: go, rust + +2026.03.30, v19.9.18 + +feature: +- 738059f2 docker: io: fzf +- 3fc8932f docker: io: less, el_GR + +2026.03.30, v19.9.17 + +feature: +- cf424d6c docker: io: command-not-found update + +2026.03.29, v19.9.16 + +feature: +- 19347a2b docker: io: add command-not-found + +2026.03.29, v19.9.15 + +feature: +- ee170552 docker: io: ubuntu +- e04c4594 docker: io: net-tools: add + +2026.03.29, v19.9.14 + +fix: +- 6c7709be docker: io: PS1 + +2026.03.29, v19.9.13 + +fix: +- 439b3710 bin: currify +- e4182841 docker: io: xterm-256color + +2026.03.29, v19.9.12 + +feature: +- 811a47fd cloudcmd: bin: get rid of require + +2026.03.29, v19.9.11 + +feature: +- 1f95f188 cloudcmd: get rid of simport + +2026.03.29, v19.9.10 + +feature: +- f0deb323 docker: io: add ja_JP.UTF-8 + +2026.03.29, v19.9.9 + +fix: +- f671f798 docker: io: PS1 environment variable in Dockerfile + +feature: +- cc7f9dc7 docker: io: use ubuntu + +2026.03.28, v19.9.8 + +feature: +- 4d1cd8cd docker: io: ffmpeg +- 54b56fdc cloudcmd: vim: ESC: use only to enable, do not use to disable + +2026.03.27, v19.9.7 + +feature: +- 110908e2 docker: io: apt-get + +2026.03.26, v19.9.6 + +feature: +- 6450a2f8 docker: io: add UTF-8 + +2026.03.26, v19.9.5 + +fix: +- e761cacb columns: name-size-date-time: 20% -> 19% + +2026.03.26, v19.9.4 + +feature: +- 69498ed6 docker: io: pull.rebase by default + +2026.03.24, v19.9.3 + +feature: +- 8763788b docker: io: healthcheck + +2026.03.23, v19.9.2 + +feature: +- 09a02074 docker: io: git config: add +- c448eaa4 docker: io: buni + +2026.03.23, v19.9.1 + +fix: +- 6e5318fa client: modules: config: input: quote + +2026.03.23, v19.9.0 + +feature: +- a1216cdd cloudcmd: add ability to hide port configuration + +2026.03.23, v19.8.15 + +feature: +- 68b2aa78 docker: io: cloudcmd_vim + +2026.03.23, v19.8.14 + +fix: +- 665ed9c2 docker: io: get back port + +2026.03.23, v19.8.13 + +feature: +- 618a5615 docker: io: PS1 + +2026.03.23, v19.8.12 + +feature: +- 556b0150 docker: io: PS1 + +2026.03.23, v19.8.11 + +fix: +- 97672ef5 docker: io: apt-get install -> apt-get + +feature: +- 67f27d84 docker: io: bun, deno + +2026.03.23, v19.8.10 + +feature: +- 025b005e docker: io: add PS1 + +2026.03.23, v19.8.9 + +fix: +- b052cf22 cloudcmd: no time available: --.--.---- -> --:--:-- (#461) + +2026.03.23, v19.8.8 + +feature: +- 02dbe56d server: user-menu: when error send it + +2026.03.23, v19.8.7 + +feature: +- ecc76e8b docker: io: renamify-cli, runny, redfork + +2026.03.23, v19.8.6 + +fix: +- 53c072ab @putout/plugin-cloudcmd: devDependencies -> dependnecies + +feature: +- 4b9922bf docker: /usr/src: app -> cloudcmd + +2026.03.23, v19.8.5 + +fix: +- 56fc8b83 docker: gritty + +2026.03.22, v19.8.4 + +feature: +- 5000227e docker: vim nvim + +2026.03.22, v19.8.3 + +fix: +- 01677e6a docker: io: slim -> io + +feature: +- 7e35c606 docker: io: curl wget + +2026.03.22, v19.8.2 + +feature: +- e5b221f7 docker: io: add + +2026.03.22, v19.8.1 + +feature: +- 708a4c6b docker: slim: add +- 80613f46 docker: slim: add + +2026.03.20, v19.8.0 + +fix: +- 59037f2c cloudcmd: bin: --show-config + +feature: +- 10934b3a cloudcmd: add ability to show modification time (#230) + +2026.03.18, v19.7.1 + +feature: +- b0c1d36c cloudcmd: @cloudcmd/fileop v9.0.7 (#460) + +2026.03.17, v19.7.0 + +feature: +- daf83875 cloudfunc: override date format (#459) + +2026.03.17, v19.6.9 + +feature: +- b28a070a cloudcmd: redzip v4.6.1 +- 43c5a011 cloudcmd: css-minimizer-webpack-plugin v8.0.0 +- 15dcae5c cloudcmd: webpack-cli v7.0.2 +- 5976da81 cloudcmd: @cloudcmd/fileop v9.0.5 +- 37cb83f2 cloudcmd: redzip v4.6.0 + +2026.02.27, v19.6.8 + +feature: +- 15fab514 cloudcmd: copymitter v10.3.0 (#458) + +2026.02.26, v19.6.7 + +feature: +- 68c7d0be cloudcmd: onezip v7.0.0 + +2026.02.26, v19.6.6 + +feature: +- 3987cc82 cloudcmd: redzip v4.5.1 (#457) + +2026.02.26, v19.6.5 + +feature: +- 964ae989 cloudcmd: redzip v4.5.0 (#457) + +2026.02.25, v19.6.4 + +feature: +- a66eeda3 cloudcmd: copymitter v10.2.0 (coderaiser/cloudcmd#457) +- 4340533a cloudcmd: c8 v11.0.0 +- 0857711f cloudcmd: redzip v4.2.0 (#457) + +2026.02.24, v19.6.3 + +feature: +- 2234f1b4 cloudcmd: redzip v4.2.0 (#475) + +2026.02.24, v19.6.2 + +feature: +- 321a54dd cloudcmd: @cloudcmd/fileop v9.0.2 (#457) + +2026.02.24, v19.6.1 + +feature: +- 7c5ac408 cloudcmd: @cloudcmd/fileop v9.0.1 (#457) + +2026.02.21, v19.6.0 + +feature: +- 6d19bf2e common: object.omit -> omit + +2026.02.18, v19.5.1 + +feature: +- 6e1cf4ef cloudcmd: supermenu v5.0.0 + +2026.02.18, v19.5.0 + +feature: +- b20539ef common: entity: encode {,} +- 7ef134f4 cloudcmd: rendy v5.0.0 + +2026.02.18, v19.4.1 + +feature: +- 1e18d513 cloudcmd: @cloudcmd/fileop v9.0.0 + +2026.02.18, v19.4.0 + +fix: +- 45cf9baf menu: prefix (#456) + +feature: +- 3e647290 cloudcmd: redlint v6.0.0 +- 800ed012 cloudcmd: putout v42.0.5 +- 525c17d4 cloudcmd: madrun v13.0.0 +- 44247499 cloudcmd: eslint-plugin-putout v31.0.0 + +2026.02.15, v19.3.9 + +feature: +- 9ffe3ef1 cloudcmd: copymitter v10.0.0 (#457) + +2026.02.15, v19.3.8 + +fix: +- d274a2b3 spinner (#456) + +2026.02.13, v19.3.7 + +feature: +- 8fd79a27 cloudcmd: win32 v8.0.0 + +2026.02.12, v19.3.6 + +feature: +- ac94eccd cloudcmd: konsole: named +- 144e4a34 cloudcmd: gritty v10.0.0 +- 938f9e76 cloudcmd: console-io v15.0.1 + +2026.02.08, v19.3.5 + +feature: +- fb40bd9c rm cssnano: has no sense for spinner, option disabled by default (https://svgo.dev/docs/plugins/convertPathData/) +- 76125be9 cloudcmd: eslint v10.0.0 + +2026.02.06, v19.3.4 + +feature: +- 66a08c7f cloudcmd: deepword v11.0.0 + +2026.02.05, v19.3.3 + +feature: +- 4a5a56f4 cloudcmd: dword v16.0.0 + +2026.02.04, v19.3.2 + +fix: +- 99d8435e cloudcmd: exports +- a266c145 cloudcmd: default -> named +- 6e3ba271 Closing X in editor disappeared (#455) + +feature: +- 30f42e94 cloudcmd: restafary v13.0.1 +- f84ce853 cloudcmd: edward v16.0.0 + +2026.02.03, v19.3.1 + +fix: +- 5661bc4f Closing X in editor disappeared (#455) + +2026.02.03, v19.3.0 + +feature: +- 4533a25c cloudcmd: migrate to ESM +- e8a81c49 client: dom: events: migrate to ESM +- 071141bc client: terminal-run: migrate to ESM + +2026.02.03, v19.2.0 + +feature: +- bb32f7c4 client: dom: migrate to ESM +- 457c83db client: migrate to ESM +- f8a941bd client: modules: markdown: migrate to ESM +- 9d6cffaf client: polifyll: migrate to ESM +- 5b704d06 client: edit-names: migrate to ESM +- 2c2ca8eb client: edit-file: migrate to ESM +- c9f57c5f client: modules: edit-file-vim: migrate to ESM +- 327ac9de client: modules: help: migrate to ESM +- dc34ee87 cloudcmd: @putout/plugin-cloudcmd v5.0.0 +- 3cd3695b client: modules: edit-names-vim: migrate to ESM +- dfcbfd63 client: modules: terminal: migrate to ESM + +2026.02.02, v19.1.21 + +feature: +- e3ad330e client: konsole: migrate to ESM +- 983fd9af client: edit: migrate to ESM +- ebabad94 common: entity: migrate to ESM +- c3b71653 client: dom: images -> #images +- 8cad7514 common: cloudfunc -> #common/cloudfunc +- 1f174870 client: view: migrate to ESM +- 7173f6cb cloudcmd: smalltalk v5.0.0 + +2026.01.31, v19.1.20 + +feature: +- c1014c9c client: dom: operations: rename-current: migrate to ESM +- 2e486f8b cloudcmd: restafary v13.0.0 +- 6addb29f cloudcmd: redzip v4.0.0 + +2026.01.30, v19.1.19 + +feature: +- 2a0feac7 cloudcmd: @cloudcmd/modal v4.0.0 + +2026.01.30, v19.1.18 + +feature: +- 73fa4961 client: modules: user-menu: migrate to ESM +- ebfdf8c0 client: modules: operation: migrate to ESM +- ad683171 client: modules: menu: migrate to ESM +- 0054cfa3 client: dom: load-remote: migrate to ESM +- e4d0ece0 client: dom: rest: migrate to ESM +- c704ffe4 client: dom: storage: migrate to ESM +- 5182cb81 client: modules: upload: migrate to ESM +- 9543f1ad client: dom: upload-files: migrate to ESM + +2026.01.29, v19.1.17 + +feature: +- f9c28319 client: dom: migrate to ESM +- 9d2c4e4a client: dom: cmd: move out +- 5a2aa70f client: dom: simplify require +- dee50a85 client: dom: files: migrate to ESM +- 23c0d770 client: dom: dom-tree: migrate to ESM +- cf2c6415 client: directory: migrate to ESM +- 0eb802e7 client: dom: dialog: migrate to ESM + +2026.01.28, v19.1.16 + +fix: +- 4c242631 css: spinner: do not minify svg + +2026.01.28, v19.1.15 + +feature: +- 265c0b49 client: key: vim: migrate to ESM +- 3bc49f02 client: set-current-by-char: migrate to ESM + +2026.01.28, v19.1.14 + +feature: +- f8a63b5a client: key: binder: migrate to ESM +- 2cc97f33 client: cloud: migrate to ESM + +2026.01.27, v19.1.13 + +feature: +- 41b5a96f client: load: migrate to ESM + +2026.01.27, v19.1.12 + +feature: +- 27a52d33 client: sw: migrate to ESM +- 6b049d95 client: sw: register: migrate to ESM + +2026.01.25, v19.1.11 + +feature: +- f849b842 client: listeners: migrate to ESM +- 091f9017 client: listeners: simplify +- 3c1a82e7 client: key: view: get rid of mock-require + +2026.01.25, v19.1.10 + +feature: +- dc5867b0 client: key: vim: get rid of mock-require +- 77b70b21 cloudcmd: aleman v2.0.0 + +2026.01.21, v19.1.9 + +feature: +- 75ad4415 cloudcmd: @putout/eslint-flat v4.0.0 +- c5d9bd7c client: key: vim: get rid of mock-require +- f437a52f client: images: migrate to EMS +- 7192a56e client: dom: current-file: migrate to ESM + +2026.01.20, v19.1.8 + +fix: +- 8a769fd5 client: modules: operation: no update after copy + +feature: +- d574a93d client: key: migrate to ESM +- 3b409074 client: modules: operation: migrate to ESM +- 3b6b0b5a client: buffer: migrate to ESM +- 8876f050 cloudcmd: eslint-plugin-putout v30.0.0 + +2026.01.17, v19.1.7 + +feature: +- 23a6a698 client: dom/events -> #dom/events +- 9cebb241 client: dom: events: migrate to ESM +- a94fa0d4 client: cloudcmd: migrate to ESM +- 3bdf47a5 client: migrate to ESM + +2026.01.16, v19.1.6 + +fix: +- a523ef65 tests + +feature: +- 64654e8d common: cloudfunc: migrate to ESM +- add31607 common: cloudfunc: get rid of bas64 +- e36de00c modulas: migrate to ESM + +2026.01.16, v19.1.5 + +feature: +- 450f1461 client: improve testability +- d979e949 server: env: migrate to ESM + +2026.01.15, v19.1.4 + +feature: +- 6e778a35 client: sort: migrate to ESM +- e27ef51d client: sort: migrate to ESM +- 917f5851 client: load-module: migrate to ESM +- 9950caca client: get-json-from-file-table: migrate to ESM + +2026.01.15, v19.1.3 + +feature: +- f903c5c9 cloudcmd: multi-rename v3.0.0 + +2026.01.14, v19.1.2 + +fix: +- 9e2c5ac6 client: edit-names: group rename not renaming (#453) +- f0dcbe94 client: key: config + +feature: +- 6856207d server: env -> env.parse +- dc99417c client: key: get rid of mock-require +- 4bb7d704 client: modules: view: get rid of mock-require + +2026.01.12, v19.1.1 + +feature: +- 5cc6f79d cloudcmd: @cloudcmd/stub v5.0.0 +- 024bc413 cloudcmd: fullstore v4.0.0 +- 53f6f9e7 cloudcmd: globals v17.0.0 +- 6d21c539 cloudcmd: madrun v12.1.0 +- 253389ea cloudcmd: supertape v12.0.0 + +2025.12.31, v19.1.0 + +feature: +- 0ff16314 cloudcmd: redlint v5.0.0 +- 43edba8c cloudcmd: try-to-catch v4.0.0 +- 06f3b782 cloudcmd: try-catch v4.0.4 +- dfcd6557 deno config: add +- ab20a462 server: bun support (oven-sh/bun#25674) + +2025.12.24, v19.0.17 + +feature: +- 0222d177 cloudcmd: gritty v9.0.0 + +2025.12.05, v19.0.16 + +feature: +- 14ec19e8 cloudcmd: find-up v8.0.0 +- e6a00979 cloudcmd: eslint-plugin-putout v29.0.2 +- 5b5352c7 cloudcmd: putout v41.0.0 + +2025.11.28, v19.0.15 + +feature: +- 00676531 cloudcmd: aleman v1.16.5 + +2025.11.27, v19.0.14 + +fix: +- 2a525e9b aleman: copy paste in text editor (#449) + +feature: +- 3ceb9a8c cloudcmd: open v11.0.0 + +2025.09.26, v19.0.13 + +feature: +- 8477f3e4 cloudcmd: aleman v1.16.3 (#446) + +2025.09.25, v19.0.12 + +feature: +- 836e908e cloudcmd: aleman v1.16.2 + +2025.09.24, v19.0.11 + +feature: +- f4386a6f cloudcmd: aleman v1.16.1 + +2025.09.23, v19.0.10 + +feature: +- 2e667ba6 cloudcmd: aleman v1.15.0 + +2025.09.22, v19.0.9 + +feature: +- 60c56164 cloudcmd: aleman v1.14.4 + +2025.09.20, v19.0.8 + +feature: +- efe81320 cloudcmd: aleman v1.14.3 + +2025.09.18, v19.0.7 + +feature: +- 5b972e2e cloudcmd: aleman v1.14.0 + +2025.09.17, v19.0.6 + +feature: +- 39a24028 cloudcmd: aleman v1.13.0 + +2025.09.16, v19.0.5 + +fix: +- 64df81bc cloudcmd: client: listeners: f9: stopPropagation + +feature: +- 38dd5101 cloudcmd: aleman v1.12.4 + +2025.09.15, v19.0.4 + +feature: +- 66db798c cloudcmd: aleman v1.12.3 + +2025.09.15, v19.0.3 + +feature: +- c5aed16f cloudcmd: aleman v1.12.2 + +2025.09.14, v19.0.2 + +feature: +- 511347d3 cloudcmd: aleman v1.11.0 + +2025.09.14, v19.0.1 + +fix: +- fc6304a1 tmpl: config: aleman, supermenu + +feature: +- a05ecdb4 cloudcmd: aleman v1.10.0 + +2025.09.14, v19.0.0 + +feature: +- 50b19dcc cloudcmd: menu: default: supermenu -> aleman +- 5970f10a cloudcmd: drop support of node < 22 + +2025.09.14, v18.8.11 + +feature: +- b0360d8e cloudcmd: aleman v1.9.1 +- 00a20129 cloudcmd: html: importsmap: add + +2025.09.14, v18.8.10 + +feature: +- ddf9e455 cloudcmd: aleman v1.9.0 + +2025.09.14, v18.8.9 + +feature: +- 2e7bdb8a cloudcmd: aleman v1.8.0 + +2025.09.13, v18.8.8 + +feature: +- 03631d95 cloudcmd: aleman v1.7.0 + +2025.09.12, v18.8.7 + +feature: +- 09408af5 cloudcmd: aleman v1.6.1 + +2025.09.12, v18.8.6 + +feature: +- 4fcaf288 cloudcmd: aleman v1.6.0 + +2025.09.10, v18.8.5 + +feature: +- c69ec16e cloudcmd: aleman v1.5.0 + +2025.09.09, v18.8.4 + +feature: +- 08d13c6d cloudcmd: aleman v1.4.9 + +2025.09.04, v18.8.3 + +feature: +- b4792fc3 cloudcmd: aleman v1.4.0 + +2025.09.04, v18.8.2 + +feature: +- a0b3285b cloudcmd: aleman v1.3.0 + +2025.09.04, v18.8.1 + +feature: +- 15b71c14 cloudcmd: aleman v1.2.5 +- d252fe5f robots.txt: add + +2025.09.02, v18.8.0 + +feature: +- 08b5c6b2 client: menu: aleman: add + +2025.08.30, v18.7.4 + +fix: +- a6d18ddb select file: name -> line +- 2077468a client: listeners: click: avoid select on conext menu +- 64e4aba4 client: menu: before show: unsetBind + +2025.07.26, v18.7.3 + +fix: +- 884c83eb client: polyfill (#442) + +2025.07.24, v18.7.2 + +feature: +- 2e775908 cloudcmd: html-looks-like: remove +- bb6a7a28 docker: npm -> bun + +2025.07.06, v18.7.1 + +fix: +- 784bb2eb build: sw + +feature: +- 8f52376d cloudcmd: revert: optimize-css-assets-webpack-plugin -> css-minimizer-webpack-plugin: broken spinner +- 82008749 cloudcmd: optimize-css-assets-webpack-plugin -> css-minimizer-webpack-plugin + +2025.07.05, v18.7.0 + +fix: +- b1e231a5 client: menu: close: ESC + +feature: +- 546d0610 cloudcmd: process v0.11.10 +- 121b114e cloudcmd: path-browserify v1.0.1 +- 8592cedc cloudcmd: mini-css-extract-plugin v2.9.2 +- a53ab67b cloudcmd: webpack-cli v6.0.1 +- de2cedd9 cloudcmd: webpack v5.99.9 +- da545ea4 cloudcmd: style-loader v4.0.0 +- db6e8334 cloudcmd: optimize-css-assets-webpack-plugin v6.0.1 +- 2f0c1a61 cloudcmd: html-webpack-plugin v5.6.3 +- e100dcf6 cloudcmd: extract-text-webpack-plugin v3.0.2 +- 76c40008 cloudcmd: css-loader v7.1.2 +- fb5e5a32 cloudcmd: clean-css-loader v4.2.1 +- 8551cd54 cloudcmd: babel-loader v10.0.0 +- c9380319 webpack 5 +- ddc94adb cloudcmd: eslint-plugin-putout v28.0.0 + +2025.07.04, v18.6.1 + +feature: +- 9eafa189 cloudcmd: http-auth v4.2.1 +- e99d0847 cloudcmd: montag v1.2.1 +- b77e9c91 cloudcmd: pipe-io v4.0.1 +- 4b476a6d cloudcmd: globals v16.3.0 +- 2057065d cloudcmd: @putout/eslint-flat v3.0.1 + +2025.07.02, v18.6.0 + +feature: +- 2eb3dc66 cloudcmd: @iocmd/wait v2.1.0 +- 1679b788 cloudcmd: webpackbar v7.0.0 +- 9a4cf388 cloudcmd: eslint-plugin-putout v27.2.1 +- f4b0f92f cloudcmd: express v5.1.0 +- 4ab4be12 thread-it: get rid (#438) +- 99ad0c21 cloudcmd: rm @putout/babel +- 8ccec23d cloudcmd: help: require -> import +- 2a97ac66 cloudcmd: yargs-parser v22.0.0 +- b26c8bba cloudcmd: thread-it v3.0.0 + +2025.04.10, v18.5.2 + +feature: +- 8450bfa6 cloudcmd: putout v40.0.3 +- 51f51b54 cloudcmd: @putout/plugin-cloudcmd v4.0.0 +- 08ab63d7 cloudcmd: supertape v11.0.4 +- e7cc9b92 cloudcmd: redlint v4.1.1 +- 368c9bb8 cloudcmd: eslint v9.23.0 +- 43fd5ed6 cloudcmd: madrun v11.0.0 +- f774d5b2 cloudcmd: eslint-plugin-putout v26.1.0 +- b0a7fc16 cloudcmd: putout v39.3.0 + +2025.02.03, v18.5.1 + +feature: +- 467f0a79 cloudcmd: webpack-merge v6.0.1 +- 353a1fb6 cloudcmd: putout v38.0.5 +- 8e98b778 cloudcmd: eslint-plugin-putout v24.0.0 + +2025.01.20, v18.5.0 + +fix: +- ad8e55d8 client: themes -> columns (#434) + +feature: +- 2fc503f7 cloudcmd: @putout/babel v3.0.0 + +2024.12.13, v18.4.1 + +feature: +- 100e940e cloudcmd: putout v37.0.1 + +2024.11.22, v18.4.0 + +fix: +- dff02672 cloudcmd: make manifest.json accessible when authentication is enabled (#428) + +2024.11.14, v18.3.0 + +feature: +- 71dc8dd6 cloudcmd: Add support for Progressive Web App (#426) + +2024.11.06, v18.2.1 + +feature: +- a733d814 css: --is-mobile: add +- f22120dc cloudcmd: prevent unselect being fired on panel click when in mobile view (#422) +- 1a0af863 docker: add image source label to dockerfiles (#421) +- 0446a74d docker: add image source label to dockerfiles (#419) + +2024.10.27, v18.2.0 + +feature: +- ac9abbd3 cloudcmd: eslint-plugin-putout v23.1.0 +- 4bc5a783 cloudcmd: add context menu option to toggle file selection (#420) + +2024.08.17, v18.1.0 + +feature: +- ddf4542b cloudcmd: add ability to hide dot files (#307) + +2024.08.16, v18.0.2 + +feature: +- 3d03efbe css: show links in one small screens + +2024.08.16, v18.0.1 + +fix: +- 62ed8411 bin: validateArgs is not a function (#147) + +feature: +- 9ec94dee cloudcmd: chalk v5.3.0 + +2024.08.16, v18.0.0 + +feature: +- 5e93bcca cloudcmd: rimraf v6.0.1 +- 74d1eb7e drop support of node < 20 + +2024.08.16, v17.4.4 + +fix: +- a6aa9bbc revert rimraf v6.0.1 + +feature: +- 282b3d5c cloudcmd: @putout/cli-validate-args v2.0.0 + +2024.07.27, v17.4.3 + +feature: +- 6e8348b8 cloudcmd: rimraf v6.0.1 +- 61ca7f36 cloudcmd: putout v36.0.2 + +2024.07.03, v17.4.2 + +feature: +- ba2d0b36 cloudcmd: just-snake-case v3.2.0 +- 4cc47e30 cloudcmd: just-capitalize v3.2.0 +- d8451e56 cloudcmd: just-pascal-case v3.2.0 +- 6abf327d cloudcmd: package-json v10.0.0 +- 2ae6ad34 docker: Dockerimage update Debian12 (#414) +- 05ef0ae4 cloudcmd: c8 v10.1.2 + +2024.05.06, v17.4.1 + +feature: +- 154b4bd6 cloudcmd: @cloudcmd/move-files v8.0.0 +- c409a2db cloudcmd: copymitter v9.0.0 + +2024.04.17, v17.4.0 + +fix: +- 6fb21020 server: route: path traversal + +feature: +- 37ab7068 publish container image to GHCR (#409) + +2024.04.03, v17.3.3 + +feature: +- b088b84e cloudcmd: deepword v10.0.0 + +2024.03.29, v17.3.2 + +fix: +- f7a6a366 typo: Wraped -> Wrapped + +2024.03.29, v17.3.1 + +feature: +- d7581829 distribute: convert to ESM + +2024.03.29, v17.3.0 + +feature: +- 6bc4f3ec dark theme: add (#332) +- 35622082 route: convert to ESM + +2024.03.29, v17.2.1 + +fix: +- cc134464 client: vim: space + +feature: +- e3f89e88 dark mode: add +- c45b23fe css: vars: add +- b1f74c00 css: add vars + +2024.03.22, v17.2.0 + +feature: +- 3e565109 convert to ESM +- 770a0812 pack: get rid of mock-require +- 25d8faea rest: get rid of mock-require +- 401a669a user-menu: get rid of mock-require +- 4e32241d terminal: get rid of mock-require + +2024.03.21, v17.1.6 + +feature: +- e01ee457 server: route: get rid of mock-require +- c7f90901 root: get rid of mock-require +- fcce26d4 cloudfunc: get rid of mock-require + +2024.03.20, v17.1.5 + +feature: +- bf90bf22 server: validate: get rid of mock-require + +2024.03.20, v17.1.4 + +feature: +- 98d3a4cc server: columns: get rid of mock-require + +2024.03.18, v17.1.3 + +feature: +- e080a540 server: cloudcmd: get rid of mock-require + +2024.03.18, v17.1.2 + +fix: +- 857c9700 docker: alpine + +feature: +- bf614e1d cloudcmd: redlint v3.13.1 + +2024.03.16, v17.1.1 + +feature: +- a92a5a0d cloudcmd: restbox v4.0.0 +- c51ba1d8 docker: drop arm v7 + +2024.03.16, v17.1.0 + +feature: +- 10d6d2e2 cloudcmd: @types/node-fetch v2.6.11 +- 2047cb7a cloudcmd: @cloudcmd/dropbox v5.0.1 +- 6b793cca cloudcmd: docker: alpine +- 5fa9fcc5 cloudcmd: pullout v5.0.0 +- bc617c17 cloudcmd: serve-once v3.0.1 + +2024.03.12, v17.0.7 + +feature: +- 97627dc2 cloudcmd: auto-globals v4.0.0 +- 683c865e cloudcmd: gritty v8.0.0 + +2024.03.11, v17.0.6 + +fix: +- d928c0b8 cloudcmd: ocker: revert alpine (#406) + +2024.03.11, v17.0.5 + +fix: +- 33201dad cloudcmd: docker: alpine (#406) + +2024.02.02, v17.0.4 + +feature: +- 7ce95450 cloudcmd: deepword v9.0.0 +- 1c73e525 cloudcmd: edward v15.0.0 +- da967f08 cloudcmd: dword v15.0.0 +- f0a6109a cloudcmd: restafary v12.0.0 + +2024.02.01, v17.0.3 + +feature: +- aca4119f cloudcmd: inly v5.0.0 + +2024.02.01, v17.0.2 + +feature: +- 5324a41a cloudcmd: supertape v10.0.0 +- d453a1b2 cloudcmd: onezip v6.0.1 +- 71b915be cloudcmd: @cloudcmd/fileop v8.0.0 + +2024.01.25, v17.0.1 + +feature: +- d79a5776 cloudcmd: putout v35.0.0 +- 8d92aa91 cloudcmd: package-json v9.0.0 +- 5ab5576e cloudcmd: open v10.0.3 +- c5cfe68c cloudcmd: c8 v9.1.0 + +2023.12.12, v17.0.0 + +feature: +- 154e3b07 cloudcmd: find-up v7.0.0 +- a02d288d cloudcmd: @putout/babel v2.0.0 +- 3314f9b9 drop support of node < 18 +- a6afa205 cloudcmd: supertape v9.0.0 +- e600c05d cloudcmd: eslint-plugin-putout v22.0.0 +- 99c00954 cloudcmd: madrun v10.0.0 +- afdf7434 cloudcmd: putout v34.0.7 + +2023.12.08, v16.18.0 + +feature: +- 4462f269 cloudcmd: markdown-it v14.0.0 +- 0cc76bd4 cloudcmd: philip v3.0.0: decrease bundle size +- 656ebd87 client: move out set-current + +2023.12.04, v16.17.9 + +fix: +- fb2d0814 github actions + +2023.12.04, v16.17.8 + +feature: +- 93aa7278 yaspeller: rm +- af9c916e cloudcmd: eslint-plugin-putout v21.0.2 +- 01dccbfd cloudcmd: putout v33.13.3 + +2023.10.12, v16.17.7 + +feature: +- 7857fb72 package: rendy v4.1.3 + +2023.09.22, v16.17.6 + +feature: +- 570cb8c0 package: nodemon v3.0.1 +- 828d10a8 package: rimraf v5.0.1 +- 88908b35 package: eslint-plugin-putout v20.0.0 +- 93f4a07e package: putout v32.0.6 +- a5f93523 github actions: use bun + +2023.09.06, v16.17.5 + +feature: +- 3b0941bc actions: docker/login-action@v2 (#396) + +2023.09.05, v16.17.4 + +feature: +- 35dedfdf github: update docker actions (#396) + +2023.09.05, v16.17.3 + +feature: +- 3c93b29b github: docker/build-push-action v4 (#396) + +2023.09.04, v16.17.2 + +fix: +- 621f52da docker + +2023.09.04, v16.17.1 + +fix: +- eb3f037a docker: bun -> node + +2023.09.04, v16.17.0 + +feature: +- 224e5397 docker: use bun instead of node +- 4b9267f3 package: edward v14.2.0 + +2023.08.10, v16.16.3 + +feature: +- 354c137d package: console-io v14.0.0 + +2023.08.09, v16.16.2 + +feature: +- e353fff7 package: redzip v3.0.0 + +2023.08.07, v16.16.1 + +feature: +- d63169cc package: @putout/babel v1.0.5 +- bb9276be package: eslint-plugin-putout v19.0.3 +- 9aed5f75 package: putout v31.0.3 + +2023.07.09, v16.16.0 + +feature: +- c4f56c59 package: memfs v4.2.0 +- 0e663e1d package: @putout/plugin-cloudcmd v3.1.1 +- ff9265b7 package: c8 v8.0.0 +- 22aa337a package: eslint-plugin-n v16.0.1 +- 13350b55 package: eslint-plugin-putout v18.0.0 +- ce196abf package: putout v30.1.1 + +2023.05.17, v16.15.0 + +feature: +- a1bf40bd package: open v9.1.0 +- ef608853 client: self signed certs on Chrome (#393) + +2023.03.21, v16.14.1 + +feature: +- b336a472 package: eslint-plugin-putout v17.1.0 +- 019e15b8 package: @cloudcmd/fileop v7.0.0 +- 64354300 package: copymitter v8.0.1 +- 27437880 package: @cloudcmd/move-files v7.0.0 + +2023.03.08, v16.14.0 + +feature: +- 6b22b241 package: putout v29.0.3 + +2023.01.30, v16.13.1 + +feature: +- client: add DIR_DIST +- client: DIRCLIENT -> DIR_CLIENT + +2023.01.29, v16.13.0 + +feature: +- client: key: vim: open editor with 'e' +- client: vim: add ability to show terminal with 'tt' + +2023.01.29, v16.12.0 + +feature: +- client: vim: add ability to create directory with 'md', and create file with 'mf' + +2023.01.22, v16.11.0 + +fix: +- lint: eslint-plugin-node -> eslint-plugin-n + +feature: +- user-menu: add support of mov +- client: user-menu: navigate: add support of \D + [JK] to speed up vim navigation + +2023.01.19, v16.10.0 + +fix: +- lint: eslint-plugin-node -> eslint-plugin-n + +feature: +- client: user-menu: navigate: add support of \D + [JK] to speed up vim navigation + +2023.01.18, v16.9.1 + +fix: +- static: user-menu: convert flac to mp3 + +2023.01.17, v16.9.0 + +feature: +- package: scroll-into-view-if-needed v3.0.4 +- package: tar-stream v3.0.0 +- static: user-menu: add recipes from Cookbook + +2023.01.16, v16.8.0 + +feature: +- package: @putout/plugin-cloudcmd v2.0.0: CloudCmd.loadDir() -> CloudCmd.changeDir()' + +2023.01.15, v16.7.0 + +feature: +- package: @cloudcmd/modal v3.0.0: add ability to not set cursor when close the modal +- package: auto-globals v3.0.0 +- package: rimraf v4.0.5 +- user-menu: rm border + +2022.10.20, v16.6.1 + +feature: +- package: package-json v8.1.0 +- package: supertape v8.1.0 +- package: putout v28.0.0 + +2022.10.09, v16.6.0 + +feature: +- package: @cloudcmd/fileop v6.0.0 +- package: @cloudcmd/move-files v6.0.0 +- package: copymitter v7.0.0 + +2022.08.06, v16.5.0 + +feature: +- client: add Command Line +- package: add funding +- (package) gritty v7.0.0 + +2022.07.20, v16.4.1 + +feature: +- (package) eslint-plugin-n v15.2.4 +- (package) putout v27.0.1 +- (package) eslint-plugin-putout v16.0.0 + + +2022.07.11, v16.4.0 + +feature: +- (cloudcmd) env: add ability to pass 0 and 1 + + +2022.07.02, v16.3.1 + +fix: +- (client) cloudcmd: rm window.Emitify + + +2022.07.01, v16.3.0 + +feature: +- (cloudcmd) terminal-run: return -1, when not load + + +2022.06.17, v16.2.0 + +feature: +- (package) markdown-it v13.0.1 +- (cloudcmd) server: convert to ESM +- (package) thread-it v2.0.0 + + +2022.05.12, v16.1.1 + +feature: +- (package) edward v14.0.0 +- (package) putout v26.0.1 + + +2022.04.23, v16.1.0 + +feature: +- (cloudcmd) improve support of NBSP + + +2022.04.22, v16.0.1 + +feature: +- (package) dword v14.0.0 +- (package) restafary v11.0.0 +- (package) @cloudcmd/stub v4.0.1 +- (package) win32 v7.0.0 +- (package) eslint-plugin-putout v14.4.0 + + +2022.02.19, v16.0.0 + +feature: +- (cloudcmd) drop support of node < 16 +- (package) supertape v7.1.0 +- (package) eslint-plugin-putout v13.11.0 +- (package) madrun v9.0.0 +- (package) putout v25.0.1 + +2022.01.20, v15.9.15 + +fix: +- (css) icons (#368) + +2022.01.13, v15.9.14 + +fix: +- (cloudcmd) client: edit-names in vim mode +- (docker) images: make dockerfiles use node:lts-buster and node:lts-buster-slim for alpine (#363) +- (docker) images: make dockerfiles use node:lts-buster-slim as base image (#357) +feature: +- (package) eslint-plugin-putout v13.0.1 +- (package) putout v24.0.2 + +2021.12.23, v15.9.13 + +feature: +- (package) putout v23.0.0 + +2021.12.16, v15.9.12 + +fix: +- (client) loadDir: history enabled by default + +2021.12.09, v15.9.11 + +fix: +- (client) load: Upload stuck for zero byte files (#359) + +2021.12.04, v15.9.10 + +fix: +- (client) operation: move and copy not working (#358) +feature: +- (package) eslint-plugin-putout v12.2.0 + +2021.11.22, v15.9.9 + +feature: +- (package) putout v22.0.2 +- (package) yargs-parser v21.0.0 +- (package) yaspeller v8.0.0 +- (package) eslint-plugin-putout v11.1.0 +- (package) putout v21.1.2 +- (package) eslint v8.0.1 +- (package) eslint-plugin-putout v10.3.0 +- (package) find-up v6.1.0 +- (package) putout v20.5.1 +- (package) supertape v6.9.1 +- (package) eslint-plugin-putout v9.0.1 + +2021.08.09, v15.9.8 + +fix: +- (cloudcmd) args: snake case -> camelCase: yargs strip dashed + + +2021.06.27, v15.9.7 + +fix: +- (config) rm broadcast: cannot change config +- (view) close modals using ESC + +feature: +- (package) package-json v7.0.0 +- (config) add more descriptive titles + + +2021.06.13, v15.9.6 + +feature: +- (package) @cloudcmd/move-files v5.0.0 + + +2021.06.08, v15.9.5 + +fix: +- (load) put: replace #: single -> multiple +- (server) user-menu: e.message -> errorFind.message + +feature: +- (package) eslint-plugin-putout v8.0.1 +- (package) es6-promisify v7.0.0 +- (package) putout v18.0.1 +- (package) putout v17.0.0 + + +2021.04.05, v15.9.4 +feature: +- (package) socket.io-client v4.0.1 +- (package) open v8.0.5 +- (package) putout v16.4.0 + +2021.03.17, v15.9.3 + +fix: +- (cloudcmd) Docker latest-alpine (15.9.2) stopped with errors (#337) + + +2021.03.16, v15.9.2 + +fix: +- (route) unable to navigate between folders (#333) + +feature: +- (package) open v8.0.2 +- (package) socket.io-client v4.0.0 +- (package) socket.io v4.0.0 + + +2021.03.01, v15.9.1 + +feature: +- (cloudcmd) icons: add archive icon for small screens +- (cloudcmd) add archive-link image + + +2021.03.01, v15.9.0 + +feature: +- feature(cloudcmd) add archive icon +- feature(client) rm unused loadCurrentTime +- feature(package) win32 v6.0.0 +- feature(package) redzip v2.0.0 + + + +2021.02.27, v15.8.1 + +feature: +- (package) restafary v9.7.0 (#330) + + +2021.02.23, v15.8.0 + +feature: +- (cloudcmd) add ability to suggest option, when wrong provided +- (package) supertape v5.0.0 + + +2021.02.21, v15.7.1 + +fix: +- (cloudcmd) prefix env has no effect (#328) + + +2021.02.19, v15.7.0 + +fix: +- chore(github-actions) add ability to autofix lint + +feature: +- (package) @cloudcmd/move-files v4.0.0 +- (package) putout v15.0.0 +- (package) copymitter v6.0.0 +- (package) @cloudcmd/olark v3.0.2 +- (client) view: unknown file type: method: GET -> HEAD: speed up + + +2021.02.03, v15.6.0 + +feature: +- (client) view: add ability to detect file type when extension is missing (coderaiser/cloudcmd#287) + + +2021.02.02, v15.5.2 + +fix: +- (client) view: isAudio (#322) + + +2021.01.31, v15.5.1 + +fix: +- (cloudcmd) cannot create a directory (#319) + + +2021.01.30, v15.5.0 + +feature: +- (package) style-loader v2.0.0 +- (cloudcmd) improve error handling when viewing or editing a file +- (package) putout v14.0.0 +- (package) eslint-plugin-putout v7.0.0 + + +2021.01.26, v15.4.4 + +feature: +- (package) win32 v5.1.11 + + +2021.01.25, v15.4.3 + +feature: +- (package) restbox v3.0.0 +- (package) ponse v6.0.0 +- (package) files-io v4.0.0 + + +2021.01.21, v15.4.2 + +feature: +- (package) mellow v3.0.0 +- (route) tokenize -> wraptile + + +2021.01.20, v15.4.1 + +feature: +- (route) redzip -> win32 (#317) + + +2021.01.19, v15.4.0 + +feature: +- (cloudcmd) add abilit to parse markdown inside zip archives + + +2021.01.19, v15.3.4 + +fix: +- (docker) images: change alpine images to be part of master image (#316) +- (dom) bug in Firefox with Imagus extension enabled: change getCurrentName to read from `data-name` instead of `title` (#313) + +feature: +- (package) deepword v8.0.0 +- (package) console-io v13.0.0 +- (package) edward v13.0.0 +- (docker) add support of multi-arch builds (#291) + + +2021.01.18, v15.3.3 + +fix: +- (dom) bug in Firefox with Imagus extension enabled: change getCurrentName to read from `data-name` instead of `title` (#313) +- (client) dom: goToDirectory + + +2021.01.18, v15.3.2 + +fix: +- (client) dom: goToDirectory + + +2021.01.17, v15.3.1 + +fix: +- (view) view html, pdf + +feature: +- (package) dword v13.0.0 +- (modules) socket.io v3.1.0 + + +2021.01.17, v15.3.0 + +feature: +- (client) improve vim support: Esc - toggle vim support in editors +- (client) view: add ability to view raw files using Shift + F3 +- (client) view: show markdown without shift +- (key) add ability to toggle global vim config on the time of session + + +2021.01.16, v15.2.0 + +fix: +- (server) distribute: simplify colors + +feature: +- (cloudcmd) add ability to open html files using F3 +- (cloudcmd) add ability to toggle vim hotkes using Esc +- (package) @cloudcmd/fileop v5.0.0 + + +2021.01.07, v15.1.0 + +feature: +- (cloudcmd) add ability to read zip files like directories (#309) + + +2021.01.05, v15.0.4 + +feature: +- (package) flop v9.0.0 +- (package) restafary v9.0.1 + + +2021.01.05, v15.0.3 + +fix: +- (cloudcmd) validateRoot: import -> simport: forEachKey is not a function (#311) + +feature: +- (package) onezip v5.0.0 +- (package) socket.io v3.0.5 (socketio/socket.io#3720) + + +2020.12.31, v15.0.2 + +fix: +- (cloudcmd) criton: crash when password set (#310) + + +2020.12.30, v15.0.1 + +fix: +- (cloudcmd) css: media query for screen size with width more then 1600 (cloudcmd/console-io#6) +- (cloudcmd) client: build: optional chaining +- (cloudcmd) drop support of node < 14 + +feature: +- (package) putout v13.0.0 + + +2020.12.28, v15.0.0 + +fix: +- (cloudcmd) app, help: remove duplicate keys +- chore(cloudcmd) menu: add lint, :lint, test, coverage +- (cloudcmd) importListen prevent server from start (#295) + +feature: +- (package) auto-globals v2.0.0 +- (cloudcmd) convert to EcmaScriptModules +- (package) supertape v4.1.0 +- (package) supertape v3.10.0 +- (package) babel-plugin-macros v3.0.0 +- (package) putout v12.0.0 +- (package) supertape v3.1.3 +- (package) madrun v8.0.0 +- (package) gritty v6.0.0 +- (package) console-io v12.0.0 +- (package) socket.io-client v3.0.1 +- (package) socket.io v3.0.1 +- (package) putout v11.0.2 +- (package) eslint-plugin-putout v6.0.0 +- (package) markdown-it v12.0.0 +- (package) putout v10.0.0 +- (package) gritty v5.0.0 +- (distribute) import: do not import if env variable set +- (package) drop support of node < 12 +- (package) table v6.0.1 + + +2020.08.21, v14.9.3 + +fix: +- (client) dom: buffer: get, set -> getJson, setJson (#295) + +feature: +- (storage) rm unused removeMatch + + +2020.08.19, v14.9.2 + +fix: +- (cloudcmd) client: edit: json files (#294) + + +2020.08.16, v14.9.1 + +feature: +- (cloudcmd) add IO.createDirectory (https://github.com/coderaiser/putout/commit/b54b5486f438804120df261dafa8e6985201a4eb) + + +2020.08.14, v14.9.0 + +feature: +- (key) vim: add ability to navigate to next and previous using w and b +- (key) vim: add ability to navigate using to first and last file using ^ and $ + + +2020.08.14, v14.8.0 + +feature: +- (cloudcmd) IO.cp -> IO.copy +- (cloudcmd) IO.mv -> IO.move +- (package) find-up v5.0.0 + + +2020.08.11, v14.7.2 + +fix: +- (client) key: F3: search appears + + +2020.08.11, v14.7.1 + +fix: +- (view) init config: copy + + +2020.08.10, v14.7.0 + +fix: +- (client) user menu: click on user menu title +- test(cloudcmd) test/server/prefixer -> server/prefixer + +feature: +- (cloudcmd) rest: add rename +- (rest) mv: improved user errors +- (client) io: promisify -> async +- (package) webpack-merge v5.0.8 +- (package) eslint-plugin-putout v5.0.0 +- (package) putout v9.0.0 +- (package) madrun v7.0.0 + + +2020.05.20, v14.6.0 + +feature: +- (package) markdown-it v11.0.0 +- (cloudcmd) client: add ability to handle existing file while rename (#289) +- (package) supertape v2.0.0 +- (package) @cloudcmd/stub v3.0.0 + + +2020.05.06, v14.5.1 + +fix: +- (docker) alpine + + +2020.05.04, v14.5.0 + +fix: +- (user-menu) choose using Enter + +feature: +- (package) eslint v7.0.0 +- (package) eslint-plugin-putout v4.0.0 +- (package) putout v8.0.0 +- (package) madrun v6.0.0 +- (client) directory: add abily to show progress dialog on upload + + +2020.04.27, v14.4.0 + +feature: +- (user-menu) add ability to run selected items without showing dialog + + +2020.04.13, v14.3.10 + +fix: +- (util) getRegExp: multiple dots +- (cloudcmd) crash on check for update (#286) + +feature: +- (package) yaspeller v7.0.0 + + +2020.04.10, v14.3.9 + +fix: +- (docker) node -> node:lts (#280) +- (env) UPPER_CASE first, and then lower_case (#283) + +feature: +- (cloudcmd) promise -> async + + +2020.04.04, v14.3.8 + +feature: +- (client) ajaxLoad: callback -> promise +- (get-json-from-file-table) mv out from client + + +2020.04.03, v14.3.7 + +fix: +- (client) dom: getCurrentType + +feature: +- (package) chalk v4.0.0 + + +2020.03.31, v14.3.6 + +fix: +- (cloudcmd) directoryStorage + + +2020.03.25, v14.3.5 + +feature: +- (package) fullstore v3.0.0 +- (package) html-webpack-plugin v4.0.1 +- (package) codegen.macro v4.0.0 +- (package) url-loader v4.0.0 + + +2020.03.03, v14.3.4 + +feature: +- (package) readjson v2.0.1 +- (package) tryrequire v3.0.0 +- (package) flop v8.0.0 +- (package) writejson v3.0.0 +- (package) try-to-catch v3.0.0 +- (package) try-catch v3.0.0 + + +2020.02.23, v14.3.3 + +feature: +- (key) vim: split DOM and vim + + +2020.02.21, v14.3.2 + +feature: +- (package) serve-once v2.0.0 +- (package) edward v12.0.0 +- (package) dword v12.0.0 +- (package) ponse v5.0.0 + + +2020.02.21, v14.3.1 + +feature: +- (package) supermenu v4.0.1 +- (package) stylelint-config-standard v20.0.0 +- (package) http-auth v4.1.2 + + +2020.01.29, v14.3.0 + +feature: +- (listeners) improve file select with ctrl + click (#269) +- (docker) add Dockerfile for arm based clients such as rpi (#268) +- (package) @cloudcmd/clipboard v2.0.0 +- (package) stylelint v13.0.0 +- (package) emitify v4.0.1 +- (package) nyc v15.0.0 +- (package) eslint-plugin-node v11.0.0 + + +2019.12.21, v14.2.1 + +feature: +- (package) for-each-key v2.0.0 +- (package) jonny v3.0.0 +- (package) jaguar v6.0.0 +- (package) ponse v4.0.0 +- (package) ponse v3.5.1 +- (package) memfs v3.0.1 +- (package) url-loader v3.0.0 +- (package) nodemon v2.0.1 +- (package) stylelint v12.0.0 + + +2019.11.15, v14.2.0 + +feature: +- (cloudcmd) add CLOUDCMD_PREFIX +- (package) chalk v3.0.0 +- (package) eslint-plugin-putout v3.0.0 +- (package) madrun v5.0.0 +- (package) putout v7.0.0 +- (package) madrun v4.0.0 +- (package) try-to-catch v2.0.0 + + +2019.10.16, v14.1.2 + +fix: +- (madrun) client test command: test:client command (#260) + +feature: +- (package) @cloudcmd/fileop v4.0.0 +- (package) inly v4.0.0 +- (package) onezip v4.0.0 +- (package) open v7.0.0 +- (package) multi-rename v2.0.0 +- (package) shortdate v2.0.0 + + +2019.10.09, v14.1.1 + +feature: +- (package) @cloudcmd/fileop v3.0.0 +- (package) @cloudcmd/move-files v3.0.0 +- (package) copymitter v5.0.0 + + +2019.10.02, v14.1.0 + +feature: +- (view) add support of webm (#256) + + +2019.09.25, v14.0.2 + +fix: +- (client) change directory with enabled dirStorage (#255) + + +2019.09.25, v14.0.1 + +fix: +- (cloudcmd) wrong editor root on multi instance + +feature: +- (package) deepword v7.0.0 +- (cloudcmd) rm now (zeit/micro/issues/377) + + +2019.09.22, v14.0.0 + +feature: +- (operation) show progress bar on first operation (#253) +- (package) pullout v4.0.0 +- (package) console-io v11.0.0 +- (package) flop v7.0.0 +- (package) restbox v2.0.0 +- (package) restafary v8.0.0 +- (package) nomine v4.0.0 +- (cloudcmd) drop support of node < 10 +- (cloudcmd) remove --progress option, make always enabled + + +2019.09.21, v13.4.2 + +fix: +- (terminal) on -> onKey + + +2019.09.20, v13.4.1 + +feature: +- (package) @cloudcmd/olark v3.0.0 +- (package) format-io v2.0.0 +- (package) limier v3.0.0 +- (package) currify v4.0.0 +- (package) limier v2.0.1 +- (package) load.js v3.0.0 +- (package) @cloudcmd/create-element v2.0.0 +- (package) supermenu v3.0.0 +- (package) smalltalk v4.0.0 +- (package) @cloudcmd/modal v2.0.0 +- (package) putout v6.0.0 +- (package) stylelint-config-standard v19.0.0 +- (package) stylelint v11.0.0 +- (package) markdown-it v10.0.0 +- (package) rm version-io +- (package) fullstore v2.0.2 +- (package) wraptile v3.0.0 +- (package) rendy v3.0.0 +- (package) eslint-plugin-node v10.0.0 +- (package) restafary v7.0.0 + + +2019.09.03, v13.4.0 + +feature: +- (view) add support of pdf +- (package) madrun v3.0.1 + + +2019.08.28, v13.3.0 + +fix: +- feature(client) remove legacy suffix, use modules as is +- (client) rm additional dialog +- (user-menu) putout path +- (edit-names) hide +- (vim) find + +feature: +- (cloudcmd) decrease bundle size: disable convertion to es5 +- (client) remove legacy suffix, use modules as is +- (package) es6-promisify v6.0.2 +- (menu) rm mute: has no sense with new ponse headers +- (markdown) move out parse to worker + + +2019.08.22, v13.2.1 + +fix: +- (buffer) copy, cut +- (key) chrome event double pass +- (user-menu) processing menu item run error + +feature: +- (user-menu) rm path + + +2019.08.20, v13.2.0 + +fix: +- (menu) autoplay on download in firefox +- (dom) getCurrentData + +feature: +- (user-menu) improve error handling +- (package) eslint-plugin-putout v2.0.0 + + +2019.08.16, v13.1.0 + +fix: +- (user-menu) hide load on error +- (key) keys block + +feature: +- (cloudcmd) add ability to remember position of current file on reload +- (madrun) disable web workers, while testing +- (user-menu) speed up user menu parsing with help of worker threads +- (user-menu) add ability to used EcmaScript Modules, improve error handling +- (server) add compress: speed up client side load + + +2019.08.14, v13.0.1 + +fix: +- (cloudcmd) rm --user-menu: always enabled + +feature: +- (package) rimraf v3.0.0 + + +2019.08.14, v13.0.0 + +fix: +- (set-listeners) can not continue first error operation error +- (view) getMediaElement: play video/audio + +feature: +- (cloudcmd) only user menu on f2 +- (cloudcmd) remove plugins +- (package) putout v5.2.1 +- (package) style-loader v1.0.0 + + +2019.08.02, v12.6.3 + +fix: +- (operation) first copy after startup fails (close #251) +- (key) chrome keydown event double pass +- (client) load +- (cloudcmd) server start when importListen enabled + +feature: +- (cloudcmd) simplify lint +- (package) markdown-it v9.0.0 +- (package) deepmerge v4.0.0 +- (package) yaspeller v6.0.0 +- (package) css-loader v3.0.0 +- (babel) remove unused @babel/plugin-syntax-dynamic-import +- (cloudcmd) rm Promise polyfill +- (package) rm Object.assign polyfill + + +2019.06.06, v12.6.2 + +fix: +- (cloudcmd) config: save -> write (#247) + +feature: +- (package) remove file-loader +- (package) url-loader v2.0.0 + + +2019.06.04, v12.6.1 + +fix: +- (config) configManager: totally move away from singletone + + +2019.05.31, v12.6.0 + +feature: +- (config-manager) add (#208) +- (package) add support of cwd in TerminalRun with help of gritty v4.7.0 +- (user-menu) add ability to ignore private methods + + +2019.05.28, v12.5.0 + +feature: +- (user-menu) add Compare Directories (#220) + + +2019.05.27, v12.4.0 + +fix: +- (terminal-run) resolve before close + +feature: +- (terminal-run) add ability to resolve exit code + + +2019.05.24, v12.3.2 + +fix: +- (user-menu) F1 and F keys overlapping +- (select-by-pattern) crash + + +2019.05.24, v12.3.1 + +fix: +- (cloudcmd) copy + + +2019.05.24, v12.3.0 + +fix: +- (user-menu) prefix (#244) +- (dom) renameCurrent: try-to-promise RESTful.mv + +feature: +- (user-menu) hide scroll when small amount of items +- (user-menu) add ability to run in mobile devices +- (upload) improve style +- (user-menu) imrove error output +- (user-menu) add default user menu +- (dialog) cancel -> tryToCatch +- (user-menu) add default option: create user menu +- (user-menu) add error handling +- (user-menu) add ability to navigate with j, k +- (cloudcmd) deprecate plugins + + +2019.05.13, v12.2.0 + +fix: +- feature(npmignore) add fixture.json +- (operation) set-listeners: alert: noCancel -> cancel +- (cloudcmd) different title + +feature: +- (key) add ability to rename file with Shift + F6 +- (user-menu) add (#221) +- (package) clean-css-loader v2.0.0 +- (package) edward v11.0.0 +- (npmignore) add fixture.json +- (package) dword v11.0.0 +- (package) smalltalk v3.4.0 +- (package) eslint v6.0.0-alpha +- (package) eslint-plugin-node v9.0.1 +- (config) speed up load: series -> parallel +- (cloudcmd) avoid service worker reoload scripts in dev mode +- (package) putout v4.23.0 +- (package) nyc v14.0.0 + + +2019.04.15, v12.1.0 + +fix: +- (heroku) app: add "}" (#236) + +feature: +- (edit-names) add bulk rename (#231) +- (package) stylelint v10.0.0 + + +2019.04.04, v12.0.2 + +fix: +- (listeners) any touch open file (#235) + + +2019.04.04, v12.0.1 + +fix: +- (listeners) unable to navigate into folders (#235) + + +2019.04.01, v12.0.0 + +fix: +- feature(cloudcmd) split prefix and prefixSocket finally + +feature: +- (cloudcmd) drop support of beautify, minify +- (cloudcmd) improved progress of file operations +- (cloudcmd) split prefix and prefixSocket finally +- (cloudcmd) view file on double click or enter +- (cloudcmd) add ability to change directory using F3 + + +2019.03.27, v11.8.6 + +fix: +- (operation) progress +- (terminal) rm IntersectionObserver handling (xtermjs/xterm.js#1929) + +feature: +- (package) opn -> open v6.0.0 +- (package) remove @babel/plugin-proposal-object-rest-spread + + +2019.02.20, v11.8.5 + +fix: +- (plugins) set content-type (#230) + +feature: +- (package) putout v4.0.0 +- (package) madrun v2.0.0 + + +2019.02.15, v11.8.4 + +fix: +- (terminal) chrome does not display anything on first open (#214) +- (rest) can not read ###files (#223) +- (help) add --terminal-auto-restart +- (cloudcmd) read root from custom config (#224) +- refactor(view) viewImage: href, prefixURL -> prefixURL +- docs(help) improve English translation of HELP.md (#211) + +feature: +- (package) tar-stream v2.0.0 +- (package) redrun -> madrun +- (package) unionfs v4.0.0 +- (package) package-json v6.0.0 +- (package) add @putout/eslint-config +- (package) tape -> supertape +- (package) add putout +- (package) add eslint-plugin-tape +- (package) file-loader v3.0.1 +- (package) css-loader v2.0.1 +- (package) kebabToCamelCase -> just-pascal-case +- (package) deepmerge v3.0.0 + + +2018.12.04, v11.8.3 + +fix: +- test(export) defaultConfig: prefix +- (edit) prefix (#207) +- feature(package) :lint: add eslint-remove-line + +feature: +- (modules) socket.io v2.2.0 +- (package) clear-module -> mock-require +- (package) auto-globals v1.7.0 +- (package) fix:lint: add eslint-remove-line +- (cloudcmd) sinon, sinon-called-with-diff -> @cloudcmd/stub + + +2018.11.22, v11.8.2 + +fix: +- (Dockerfile) WORKDIR (#182) + + +2018.11.14, v11.8.1 + +fix: +- (validate) corruption of config when root not found + +feature: +- (package) pullout v3.0.0 +- (validate) root: do not validate dropbox root + + +2018.11.09, v11.8.0 + +fix: +- (dialog) noFiles: reject on close + +feature: +- (package) add dropbox support +- (server) add graceful shutdown +- (package) sinon-called-with-diff v3.0.0 + + +2018.11.01, v11.7.1 + +fix: +- (cloudcmd) register service worker on http connection (#203) +- refactor(cloudcmd) PREFIX -> prefix +- docs(help) example: prefix -> express mount point + +feature: +- (package) criton v2.0.0 +- (package) eslint-plugin-node v8.0.0 + + +2018.10.25, v11.7.0 + +fix: +- feature(cloudcmd) add ability to set prefix for web sockets connections with --prefix-socket (#200) + +feature: +- (cloudcmd) add ability to set prefix for web sockets connections with --prefix-socket (#200) +- (package) deepword v5.0.0 +- (package) dword v9.0.0 +- (package) edward v9.0.0 +- (package) console-io v10.0.0 +- (package) ponse v3.0.0 +- (package) files-io v3.0.0 + + +2018.10.23, v11.6.0 + +feature: +- (cloudcmd) add support of express mounting point (#200) + + +2018.10.23, v11.5.4 + +fix: +- docs(changelog) rm + +feature: +- (package) supermenu v2.1.2 +- (npmignore) add ai, cdr, eps + + +2018.10.19, v11.5.3 + +feature: +- (package) console-io v9.0.0 +- (npmignore) add fixture + + +2018.10.19, v11.5.2 + +fix: +- (server) open error: exit -> warning (#196, #197, #198) + + +2018.10.17, v11.5.1 + +fix: +- (contact) load + +feature: +- (olark) bower -> npm + + +2018.10.16, v11.5.0 + +feature: +- (config) add ability to remove auth change from config with help of --config-auth flag + + +2018.10.16, v11.4.1 + +fix: +- (Docker) cloudcmd_open false (#197) + +feature: +- (package) sinon v7.0.0 + + +2018.10.12, v11.4.0 + +feature: +- (cloudcmd) add env variable CLOUDCMD_OPEN + + +2018.10.12, v11.3.1 + +fix: +- (server) crash on open error (#196) + +feature: +- (cloudcmd) add unhandledRejection listener +- (exit) add ability to receive error as argument + + +2018.10.11, v11.3.0 + +feature: +- (img) add file-link, directory-link +- (cloudcmd) show size as for links +- (cloudcmd) readify: add support of links +- (package) nomine v3.0.0 +- (package) restafary v5.0.0 +- (package) flop v6.0.0 +- (package) currify v3.0.0 + + +2018.10.04, v11.2.3 + +feature: +- (package) rm unused join-io +- (package) apart v2.0.0 +- (server) callback -> await + + +2018.09.28, v11.2.2 + +fix: +- (cloudcmd) prefix with leading slash (#195) + + +2018.09.28, v11.2.1 + +fix: +- (sw) cache favicon.ico from root (#194) + +feature: +- (package) onezip v3.0.0 + + +2018.09.28, v11.2.0 + +feature: +- (package) inly v3.0.0 +- (package) jaguar v5.0.0 +- (cloudcmd) add --terminal-auto-restart + + +2018.09.27, v11.1.0 + +feature: +- (package) redrun v7.0.0 +- (package) @cloudcmd/read-files-sync v2.0.0 +- (cloudcmd) --terminal-command: command to run in terminal (shell by default) +- (package) gritty v4.0.0 +- (package) console-io v8.0.0 + + +2018.09.26, v11.0.0 + +feature: +- (package) babel-eslint v10.0.0 +- (package) deepword v4.0.0 +- (package) edward v8.0.0 +- (package) dword v8.0.0 +- (package) restafary v4.0.0 +- (package) flop v5.0.0 +- (package) @cloudcmd/fileop v2.0.0 +- (package) @cloudcmd/move-files v2.0.1 +- (package) copymitter v4.0.2: add ability to copy symlinks (#191) +- (config) disable online by default +- (config) enable open by default +- (package) set engine to node v8.0.0 LTS +- (package) package-json v5.0.0 +- (server) drop support of VCAP_APP_PORT +- (cloudcmd) showUpdateInfo: rm rendy +- (package) squad v3.0.0 + + +2018.09.21, v10.8.2 + +fix: +- (distribute) export: config +- (sw) register: null -> stub + + +2018.09.20, v10.8.1 + +fix: +- (view) change elements position when open image + + +2018.09.19, v10.8.0 + +feature: +- (package) load -> load.js + @cloudcmd/create/element +- (cloudcmd) rm jquery + + +2018.09.14, v10.7.0 + +fix: +- (cloudcmd) onUpdateFound: doubled prefix for cloudcmd.common.js (#188) + +feature: +- (view) fancybox -> @cloudcmd/modal + + +2018.09.10, v10.6.0 + +fix: +- (view) title: xss +- (sw) navigation error + +feature: +- (events) add ability to remove all added listeners +- (cloudcmd) add ability update cloudcmd without page reload +- (cloudcmd) add --show-file-name to add file name title in view and edit (#183) + + +2018.09.08, v10.5.3 + +fix: +- (webpack) css: font resource ignores prefix setting (#185) +- (sw) no auth dialog when serve by service worker +- (sw) http auth + +feature: +- (package) babel-loader v8.0.0 +- (package) babel v7.0.0 +- (package) table v5.0.2 +- (package) style-loader v0.23.0 +- (package) nyc v13.0.1 +- (package) babel-eslint v9.0.0 + + +2018.08.25, v10.5.2 + +fix: +- (konsole) try to load console.js when console is disabled + + +2018.08.25, v10.5.1 + +fix: +- (log) makeColor: mac os + +feature: +- (export) add config send log + + +2018.08.23, v10.5.0 + +fix: +- (edit-file) multiple f4 +- (config) init: load when configDialog disabled +- (name-size-date) .name width +- (listeners) isNoCurrent: can not go to root when root is empty +- (client) parallel -> series: route + +feature: +- (distribute) add ability to import config from remote export server +- (package) file-loader v2.0.0 +- (package) watch:lint:server +- (package) add watch:test:server +- (package) yaspeller v5.0.0 +- (package) style-loader v0.22.0 +- (package) serviceworker-webpack-plugin v1.0.1 + + +2018.07.18, v10.4.1 + +fix: +- (img) loading: svg minify + + +2018.07.17, v10.4.0 + +fix: +- (sw) cache of 401 +- (polyfill) scrollIntoViewIfNeeded in firefox + +feature: +- (package) engines: node v4.5.0 +- (package) eslint-plugin-node v7.0.0 +- (package) @cloudcmd/clipboard v1.0.2 +- (package) rm unused html-webpack-exclude-assets-plugin +- (package) gritty v3.0.0 +- (package) optimize-css-assets-webpack-plugin v5.0.0 +- (package) @cloudcmd/clipboard v1.0.1 +- (package) clear-module v3.0.0 +- (package) smalltalk v3.1.0 +- (package) css-loader v1.0.0 +- (Dockerfile) mhart/alpine-node -> node:alpine + + +2018.07.02, v10.3.2 + +fix: +- (terminal) prevent init when config disabled +- (operation) next current file after delete +- (key) vim: do not react on navigation after view hide + +feature: +- (package) codegen.macro v3.0.0 + + +2018.06.25, v10.3.1 + +fix: +- (npmignore) rm dist*/modules + +feature: +- (package) eslint v5.0.0 + + +2018.06.22, v10.3.0 + +fix: +- (operation) set next file current when can not delete + +feature: +- (webpack) minimize service worker size +- (terminal) move out terminal.css from view.css +- (package) fast-async v7.0.6 +- (cloudcmd) import -> load.js +- (load-module) add + + +2018.06.21, v10.2.3 + +fix: +- (cloudcmd) env variables override (#179) +- (sw) register when prefix changed + +feature: +- (upload-files) add ability to show error message +- (gitignore) add jquery-mouse-wheel + + +2018.06.15, v10.2.2 + +fix: +- (config) set file mode permissions to readable only by current user (#61) + + +2018.06.13, v10.2.1 + +fix: +- (style) .fm: scrolling on ios + +feature: +- (dom) touchstart: set passive listener +- (package) format-io v1.0.0 +- (package) add domtokenlist-shim from npm +- (polyfill) add scroll-into-view-if-needed polyfill from npm + + +2018.06.11, v10.2.0 + +feature: +- (cloudcmd) add ability to set current file closer to removed files +- (client) add ability to clear localStorage on logOut +- (package) sinon v6.0.0 + + +2018.06.09, v10.1.2 + +fix: +- (dom) saveDataToStorage, getDataFromStorage: localStorage option check (#177) + + +2018.06.08, v10.1.1 + +fix: +- (menu) initial position + + +2018.06.07, v10.1.0 + +fix: +- (operation) deleteSilent: refresh: on error -> always +- (edit-file-vim) check is file changed on close +- (sw) "only-if-cached" can be set only with "same-origin" mode + +feature: +- (edit-names-vim) add +- (package) pullout v2.0.0 + + +2018.06.04, v10.0.3 + +fix: +- (index) zoom on tap +- (client) logout: servicer worker: unregister + +feature: +- (package) webpack-cli v3.0.1 +- (rest) add memory info +- (package) babel v7 +- (package) nyc v12.0.1 +- (cloudcmd) pullout/legacy -> pullout +- (package) nomine v2.0.0 + + +2018.05.29, v10.0.2 + +fix: +- (listeners) copyPath +- (font) copy path + + +2018.05.29, v10.0.1 + +fix: +- (font) terminal icon + + +2018.05.25, v10.0.0 + +feature: +- (cloudcmd) --one-panel-mode -> --one-file-panel +- (cloudcmd) clear storage -> copy path (#173) +- (config) rm option: htmlDialogs +- (cloudcmd) add service worker +- (config) rm option: cache +- (cloudcmd) rm option: localStorage + + 2018.05.24, v9.6.0 fix: @@ -3837,7 +6766,7 @@ fix: - (rest) onDelete: func(null, body) -> func - (rest) onStat: add var - (cloudcmd) change index path -- (server) start: url -> URL +- (server) start: url -> PREFIX - (server) start: SSLPort -> sslPort - (server) start: Port -> port - (dom) getCurrentDirPath: "," -> ";" @@ -4849,7 +7778,7 @@ with clicks on files. - Removed allowed from cache property in config. - Added ability to hide "Upload To" menu item if -no storage modules setted up in modules.json. +no storage modules set up in modules.json. - From now any file minifying only if last modified time was changed. @@ -5055,7 +7984,7 @@ in any position in anyLoadOnLoad function. - Added chainable to Cache object in DOM. - Changed default ip to null so IP would be geted from -config.json only if it setted up. +config.json only if it set up. - Fixed bug with starting node from other then projects dir. @@ -5364,7 +8293,7 @@ time was possible. - Fixed bug with undefined size on root directory of Cloud Commander. Now Cloud Commander writes size 0, if can't get size, and besides will -setted b char: "0b". +set b char: "0b". - Added supporting of Russian language in directory names. diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index f6439a18..00000000 --- a/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -FROM node:10.1 -MAINTAINER Coderaiser - -RUN mkdir -p /usr/src/app -WORKDIR /usr/src/app - -COPY package.json /usr/src/app/ - -RUN npm config set package-lock false && \ - npm install --production && \ - npm i gritty && \ - npm cache clean --force - -COPY . /usr/src/app - -WORKDIR /root - -ENV cloudcmd_terminal true -ENV cloudcmd_terminal_path gritty - -EXPOSE 8000 - -ENTRYPOINT ["/usr/src/app/bin/cloudcmd.js"] - diff --git a/Dockerfile.alpine b/Dockerfile.alpine deleted file mode 100644 index 229dfbea..00000000 --- a/Dockerfile.alpine +++ /dev/null @@ -1,28 +0,0 @@ -FROM mhart/alpine-node:10.1 -MAINTAINER Coderaiser - -RUN mkdir -p /usr/src/app -WORKDIR /usr/src/app - -COPY package.json /usr/src/app/ - -RUN npm config set package-lock false && \ - npm install --production && \ - apk update && \ - apk add --no-cache bash make g++ python && \ - npm i gritty && \ - npm cache clean --force && \ - apk del make g++ python && \ - rm -rf /usr/include /tmp/* /var/cache/apk/* - -COPY . /usr/src/app - -WORKDIR /root - -ENV cloudcmd_terminal true -ENV cloudcmd_terminal_path gritty - -EXPOSE 8000 - -ENTRYPOINT ["/usr/src/app/bin/cloudcmd.js"] - diff --git a/HELP.md b/HELP.md index 5970259c..2967f0d0 100644 --- a/HELP.md +++ b/HELP.md @@ -1,249 +1,282 @@ -# Cloud Commander v9.6.0 +# Cloud Commander v19.19.1 -### [Main][MainURL] [Blog][BlogURL] Live(![Heroku][Heroku_LIVE_IMG] [Heroku][HerokuURL], ![Now][NOW_LIVE_IMG] [Now][NowURL]) +### [Main][MainURL] [Blog][BlogURL] [Demo][DemoURL] [Deploy](#deploy) -[MainURL]: http://cloudcmd.io "Main" -[BlogURL]: http://blog.cloudcmd.io "Blog" -[HerokuURL]: http://cloudcmd.herokuapp.com/ "Heroku" -[NowURL]: https://cloudcmd.now.sh/ "Now" -[HEROKU_LIVE_IMG]: https://status-io.cloudcmd.io/host/cloudcmd.herokuapp.com/img/txt.png "Heroku" -[NOW_LIVE_IMG]: https://status-io.cloudcmd.io/host/cloudcmd.now.sh/img/txt.png "Now" +[MainURL]: https://cloudcmd.io "Main" +[BlogURL]: https://blog.cloudcmd.io "Blog" +[SupportURL]: https://patreon.com/coderaiser "Patreon" +[DemoURL]: https://cloudcmd-zdp6.onrender.com/ +[DWORD]: https://github.com/cloudcmd/dword "Editor based on CodeMirror" +[EDWARD]: https://github.com/cloudcmd/edward "Editor based on Ace" +[DEEPWORD]: https://github.com/cloudcmd/deepword "Editor based on Monaco" +[QWORD]: https://github.com/cloudcmd/qword "Editor based on CodeMirror 6" +[EDWARD_KEYS]: https://github.com/cloudcmd/edward/#hot-keys "Edward Hot keys" +[TERMUX]: https://termux.com "Termux" +[INLY]: https://github.com/coderaiser/node-inly "Extract archive" -[DWORD]: https://github.com/cloudcmd/dword "Editor based on CodeMirror" -[EDWARD]: https://github.com/cloudcmd/edward "Editor based on Ace" -[DEEPWORD]: https://github.com/cloudcmd/deepword "Editor based on Monaco" -[EDWARD_KEYS]: https://github.com/cloudcmd/edward/#hot-keys "Edward Hot keys" -[TERMUX]: https://termux.com "Termux" -[INLY]: https://github.com/coderaiser/node-inly "Extract archive" -**Cloud Commander** is an orthodox web file manager with console and editor. Will help you manage the server and work with files, directories and programs in browser from any computer, mobile or tablet. +[DeployInstaPodsIMG]: https://img.shields.io/badge/deploy%20on-InstaPods-blue +[DeployInstaPodsURL]: https://app.instapods.com/dashboard/pods/create?app=cloudcmd&ref=cloudcmd -![Cloud Commander](/img/logo/cloudcmd.png "Cloud Commander") +**Cloud Commander** is a file manager for the web. It includes a command-line console and a text editor. Cloud Commander helps you manage your server and work with files, directories and programs in a web browser from any computer, mobile or tablet. -Benefits ---------------- +![Cloud Commander](https://cloudcmd.io/img/logo/cloudcmd.png "Cloud Commander") -- Open Source (**MIT License**). +## Benefits + +- Open source (**MIT License**). - Has 2 classic panels. - Optional **authorization**. -- Client works in web browser. +- Client works in a web browser. - Server works on **Windows**, **Linux**, **Mac OS** and **Android** (with help of [Termux][TERMUX]). -- Could be used local or remotely. -- Adapting to screen size. -- **3 built-in editors** with support of **syntax highlighting**: [Dword][DWORD], [Edward][EDWARD] and [Deepword][DEEPWORD]. -- [Console](https://github.com/cloudcmd/console "Console") with support of default OS command line. +- Can be used local or remotely. +- Adapts to screen size. +- **3 built-in editors** with support of **syntax highlighting**: [Dword][DWORD], [Edward][EDWARD] [Deepword][DEEPWORD] and [Qword][QWORD]. +- [Console](https://github.com/cloudcmd/console "Console") with support of the default OS command line. - Written in **JavaScript/Node.js**. - Built-in archives pack: **zip** and **tar.gz**. - Built-in archives extract: **zip**, **tar**, **gz**, **bz2**, **.tar.gz** and **.tar.bz2** (with help of [inly][INLY]). -Install ---------------- +## Installation -The installation of file manager is very simple. +Installation is very simple: -- install latest version of [node.js](https://nodejs.org/ "node.js"). -- install `cloudcmd` via `npm` with: +- Install the latest version of [node.js](https://nodejs.org/ "node.js"). +- Install `cloudcmd` via `npm` with: ```sh npm i cloudcmd -g ``` -When in trouble use: +When in trouble, use: ```sh npm i cloudcmd -g --force ``` -Start ---------------- -For starting just type in console: +## Usage + +To start the server, just run the global *npm* binary from your terminal: ```sh cloudcmd ``` -Cloud Commander supports command line parameters: +Cloud Commander supports the following command-line parameters: -|Parameter |Operation -|:------------------------------|:------------------------------ -| `-h, --help` | display help and exit -| `-v, --version` | display version and exit -| `-s, --save` | save configuration -| `-o, --online` | load scripts from remote servers -| `-a, --auth` | enable authorization -| `-u, --username` | set username -| `-p, --password` | set password -| `-c, --config` | configuration file path -| `--show-config` | show config values -| `--editor` | set editor: "dword", "edward" or "deepword" -| `--packer` | set packer: "tar" or "zip" -| `--root` | set root directory -| `--prefix` | set url prefix -| `--port` | set port number -| `--progress` | show progress of file operations -| `--confirm-copy` | confirm copy -| `--confirm-move` | confirm move -| `--html-dialogs` | use html dialogs -| `--open` | open web browser when server started -| `--name` | set tab name in web browser -| `--one-panel-mode` | show one file panel (**deprecated**: use `--one-file-panel` instead) -| `--one-file-panel` | show one file panel -| `--keys-panel` | show keys panel -| `--contact` | enable contact -| `--config-dialog` | enable config dialog -| `--console` | enable console -| `--sync-console-path` | sync console path -| `--terminal` | enable terminal -| `--terminal-path` | set terminal path -| `--vim` | enable vim hot keys -| `--columns` | set visible columns -| `--cache` | enable cache -| `--no-server` | do not start server -| `--no-auth` | disable authorization -| `--no-online` | load scripts from local server -| `--no-open` | do not open web browser when server started -| `--no-name` | set empty tab name in web browser -| `--no-one-file-panel` | show two file panels -| `--no-one-panel-mode` | show two file panels (**deprecated**: use `--no-one-file-panel` instead) -| `--no-keys-panel` | hide keys panel -| `--no-progress` | do not show progress of file operations -| `--no-confirm-copy` | do not confirm copy -| `--no-confirm-move` | do not confirm move -| `--no-html-dialogs` | do not use html dialogs -| `--no-contact` | disable contact -| `--no-config-dialog` | disable config dialog -| `--no-console` | disable console -| `--no-sync-console-path` | do not sync console path -| `--no-terminal` | disable terminal -| `--no-vim` | disable vim hot keys -| `--no-columns` | set visible default columns -| `--no-cache` | disable cache +| Parameter |Operation +|:-----------------------------|:------------------------------ +| `-h, --help` | display help and exit +| `-v, --version` | display version and exit +| `-s, --save` | save configuration +| `-o, --online` | load scripts from remote servers +| `-a, --auth` | enable authorization +| `-u, --username` | set username +| `-p, --password` | set password +| `-c, --config` | configuration file path +| `--show-config` | show config values +| `--show-dot-files` | show dot files +| `--show-file-name` | show file name in view and edit +| `--editor` | set editor: "dword", "edward" or "deepword" +| `--packer` | set packer: "tar" or "zip" +| `--root` | set root directory +| `--prefix` | set url prefix +| `--prefix-socket` | set prefix for url connection +| `--port` | set port number +| `--confirm-copy` | confirm copy +| `--confirm-move` | confirm move +| `--open` | open web browser when server starts +| `--name` | set tab name in web browser +| `--menu` | set menu: "supermenu" or "aleman" +| `--one-file-panel` | show one file panel +| `--keys-panel` | show keys panel +| `--contact` | enable contact +| `--config-dialog` | enable config dialog +| `--config-auth` | enable auth change in config dialog +| `--config-port` | enable port change in config dialog +| `--console` | enable console +| `--sync-console-path` | sync console path +| `--terminal` | enable terminal +| `--terminal-path` | set terminal path +| `--terminal-command` | set command to run in terminal (shell by default) +| `--terminal-auto-restart` | restart command on exit +| `--vim` | enable vim hot keys +| `--columns` | set visible columns +| `--theme` | set theme 'light' or 'dark'" +| `--export` | enable export of config through a server +| `--export-token` | authorization token used by export server +| `--import` | enable import of config +| `--import-token` | authorization token used to connect to export server +| `--import-url` | url of an import server +| `--import-listen` | enable listen on config updates from import server +| `--dropbox` | enable dropbox integration +| `--dropbox-token` | set dropbox token +| `--log` | enable logging +| `--no-show-config` | do not show config values +| `--no-server` | do not start server +| `--no-auth` | disable authorization +| `--no-online` | load scripts from local server +| `--no-open` | do not open web browser when server started +| `--no-name` | set default tab name in web browser +| `--no-keys-panel` | hide keys panel +| `--no-one-file-panel` | show two file panels +| `--no-confirm-copy` | do not confirm copy +| `--no-confirm-move` | do not confirm move +| `--no-config-dialog` | disable config dialog +| `--no-config-auth` | disable auth change in config dialog +| `--no-config-port` | disable port change in config dialog +| `--no-console` | disable console +| `--no-sync-console-path` | do not sync console path +| `--no-contact` | disable contact +| `--no-terminal` | disable terminal +| `--no-terminal-command` | set default shell to run in terminal +| `--no-terminal-auto-restart` | do not restart command on exit +| `--no-vim` | disable vim hot keys +| `--no-themes` | set default visible themes +| `--no-export` | disable export config through a server +| `--no-import` | disable import of config +| `--no-import-listen` | disable listen on config updates from import server +| `--no-show-file-name` | do not show file name in view and edit +| `--no-dropbox` | disable dropbox integration +| `--no-dropbox-token` | unset dropbox token +| `--no-log` | disable logging -If no parameters given Cloud Commander reads information from `~/.cloudcmd.json` and use -port from it (`8000` default). if port variables `PORT` or `VCAP_APP_PORT` isn't exist. +For options not specified by command-line parameters, Cloud Commander then reads configuration data from `~/.cloudcmd.json`. It uses port `8000` by default. -To begin use, type in address bar of your browser: +To begin using the web client, go to this PREFIX in your browser: ``` http://localhost:8000 ``` -Update ---------------- -If you installed Cloud Commander with `npm`, stop application and -re-install it: +## Updating the app + +If you installed Cloud Commander with `npm`, stop the server. Then, reinstall it with: ```sh npm install cloudcmd -g ``` -Then start it again, clear cache of your browser and reload page. +Then, start the server again with `cloudcmd` and reload the page. -Hot keys ---------------- +## Hot keys -|Key |Operation -|:----------------------|:-------------------------------------------- -| `F1` | help -| `F2` | rename -| `F3` | view -| `Shift + F3` | view as `markdown` -| `F4` | edit -| `Shift + F4` | edit in `vim` mode -| `F5` | copy -| `Alt` + `F5` | pack -| `F6` | rename/move -| `F7` | new directory -| `Shift + F7` | new file -| `F8`, `Delete` | remove -| `Shift + Delete` | remove without prompt -| `F9` | menu -| `Alt` + `F9` | extract -| `F10` | config -| `*` | select/unselect all -| `+` | expand selection -| `-` | shrink selection -| `Ctrl + x` | cut to buffer -| `Ctrl + с` | copy to buffer -| `Ctrl + v` | paste from buffer -| `Ctrl + z` | clear buffer -| `Ctrl + p` | copy path -| `Ctrl + r` | refresh -| `Ctrl + d` | clear local storage -| `Ctrl + a` | select all files in a panel -| `Ctrl + m` | rename selected files -| `Ctrl + u` | swap panels -| `Ctrl + F3` | sort by name -| `Ctrl + F5` | sort by date -| `Ctrl + F6` | sort by size -| `Up`, `Down`, `Enter` | file system navigation -| `Alt + Left/Right` | show content of directory under cursor in target panel -| `Alt + g` | go to directory -| `Ctrl + \` | go to the root directory -| `Tab` | move via panels -| `Page Up` | up on one page -| `Page Down` | down on one page -| `Home` | to begin of list -| `End` | to end of list -| `Space` | select current file (and get size of directory) -| `Insert` | select current file (and move to next) -| `F9` | context menu -| `~` | console -| `Ctrl + Click` | open file on new tab +| Key |Operation +|:---------------------|:-------------------------------------------- +| `F1` | help +| `F2` | show `user menu` +| `F3` | view, change directory +| `Shift + F3` | view raw file, change directory +| `F4` | edit +| `F5` | copy +| `Alt` + `F5` | pack +| `F6` | rename/move +| `Shift` + `F6` | rename current file +| `F7` | new directory +| `Shift + F7` | new file +| `F8`, `Delete` | remove +| `Shift + Delete` | remove without prompt +| `F9` | menu +| `Alt` + `F9` | extract +| `F10` | config +| `*` | select/unselect all +| `+` | expand selection +| `-` | shrink selection +| `:` | open Command Line +| `Ctrl + X` | cut to buffer +| `Ctrl + C` | copy to buffer +| `Ctrl + V` | paste from buffer +| `Ctrl + Z` | clear buffer +| `Ctrl + P` | copy path +| `Ctrl + R` | refresh +| `Ctrl + D` | clear local storage +| `Ctrl + A` | select all files in a panel +| `Ctrl + M` | [rename selected files](https://github.com/coderaiser/cloudcmd/releases/tag/v12.1.0) in editor +| `Ctrl + U` | swap panels +| `Ctrl + F3` | sort by name +| `Ctrl + F5` | sort by date +| `Ctrl + F6` | sort by size +| `Ctrl + Shift + L` | logout +| `Ctrl + Command + .` | show/hide dot files +| `Up` | move cursor up +| `Down` | move cursor down +| `Enter` | change directory/view file +| `Alt + Left/Right` | show content of directory under cursor in target panel +| `Alt + G` | go to directory +| `Ctrl + \` | go to the root directory +| `Tab` | move via panels +| `Page Up` | up on one page +| `Page Down` | down on one page +| `Home` | to begin of list +| `End` | to end of list +| `Space` | select current file (and get size of directory) +| `Insert` | select current file (and move to next) +| `F9` | context menu +| `~` | console +| `Esc` | toggle vim hotkeys (`file manager`, `editor`) ### Vim -When `--vim` option provided, or configuration parameter `vim` set, next hot keys become available: +When the `--vim` option is provided, or the configuration parameter `vim` is set, the following hotkeys become available: -|Key |Operation -|:----------------------|:-------------------------------------------- -| `j` | navigate to next file -| `k` | navigate to previous file -| `dd` | remove current file -| `G` | navigate to bottom file -| `gg` | navigate to top file -| `v` | visual mode -| `y` | copy (selected in visual mode files) -| `p` | paste files -| `Esc` | unselect all -| `/` | find file in current directory -| `n` | navigate to next found file -| `N` | navigate to previous found file +| Key |Operation +|:------------|:-------------------------------------------- +| `j` | navigate to next file +| `k` | navigate to previous file +| `dd` | remove current file +| `G` or `$` | navigate to bottom file +| `gg` or `^` | navigate to top file +| `v` | visual mode +| `y` | copy (selected in visual mode files) +| `p` | paste files +| `Esc` | unselect all +| `/` | find file in current directory +| `n` | navigate to next found file +| `N` | navigate to previous found file +| `md` | make directory +| `mf` | make file +| `tt` | show terminal +| `e` | edit file +| `cc` | copy +| `mm` | move +| `rr` | rename file Commands can be joined, for example: -- `5j` will navigate `5` files below current; -- `d5j` will remove next `5` files; + +- `5j` will navigate **5** files below current; +- `d5j` will remove next **5** files; - `dG` will remove all files from current to bottom; -Drag and Drop ---------------- -Next file operations are accessible through `Drag and Drop`. +## Drag and drop + +These file operations are accessible with "drag and drop". | Drag Mouse Button | Key | Origin | Destination |Operation |:------------------|:----------|:----------|:--------------|:------------------ -| `Left` | | `Panel` | `Panel` | copy files -| `Left` | `Shift` | `Panel` | `Panel` | rename/move files -| `Left` | | `Panel` | `Desktop` | download files -| `Left` | | `Desktop` | `Panel` | upload files +| Left | | Panel | Panel | copy files +| Left | `Shift` | Panel | Panel | rename/move files +| Left | | Panel | Desktop | download files +| Left | | Desktop | Panel | upload files + +## View -View ---------------- ![View](/img/screen/view.png "View") ### Features + - View images. - View text files. -- Playing audio. -- Playing video. +- Play audio. +- Play video. -### Hot keys +### Hotkeys |Key |Operation |:----------------------|:-------------------------------------------- | `F3` | open | `Esc` | close -Edit ---------------- +## Edit + ![Edit](/img/screen/edit.png "Edit") ### Hot keys @@ -251,13 +284,13 @@ Edit |Key |Operation |:----------------------|:-------------------------------------------- | `F4` | open -| `Shift + F4` | open in `vim` mode +| `Shift + F4` | open in "vim" mode | `Esc` | close -For more details see [Edward hot keys][EDWARD_KEYS]. +For more details see [Edward hotkeys][EDWARD_KEYS]. + +## Console -Console ---------------- ![Console](/img/screen/console.png "Console") ### Hot keys @@ -265,24 +298,24 @@ Console |Key |Operation |:----------------------|:-------------------------------------------- | `~` | open -| `Ctrl + p` | paste path of current directory +| `Ctrl + P` | paste path of current directory | `Esc` | close For more details see [console hot keys](https://github.com/cloudcmd/console#hot-keys "Console Hot Keys"). -Terminal ---------------- +## Terminal + ![Terminal](/img/screen/terminal.png "Terminal") ### Install -`Terminal` disabled and not installed by default. To use it you should install [gritty](https://github.com/cloudcmd/gritty "Gritty") with: +The terminal is disabled and not installed by default. To use it, you should install [gritty](https://github.com/cloudcmd/gritty "Gritty") with: ```sh npm i gritty -g ``` -And then set the path of a terminal with: +and then set the path for the terminal with: ```sh cloudcmd --terminal --terminal-path `gritty --path` --save @@ -290,17 +323,18 @@ cloudcmd --terminal --terminal-path `gritty --path` --save ### Windows -If you can't install `gritty` on Windows try to install `windows-build-tools` first: +If you can't install `gritty` on Windows, try to install `windows-build-tools` first: ```sh npm install windows-build-tools -g ``` -Then get path of a `gritty` with: +Then get the path of `gritty` with: ```sh gritty --path ``` + It will returns something like: ```sh @@ -313,34 +347,33 @@ Set this path as `--terminal-path` with: cloudcmd --save --terminal --terminal-path "C:\Users\coderaiser\AppData\Roaming\npm\node_modules\gritty" ``` -After that you can use `terminal` in the same way as a `console`. +After that, you can use Cloud Commander's terminal in the same way as a normal shell console. -### Hot keys +### Hotkeys |Key |Operation |:----------------------|:-------------------------------------------- | `Shift` + `~` | open | `Shift` + `Esc` | close -Environment Variables ---------------- +## Environment Variables -Every program executed in `console` or `terminal` has these `environment` variables: +Every program executed in Cloud Commander's terminal has these environment variables: - `ACTIVE_DIR` - directory that contains cursor - `PASSIVE_DIR` - directory with no cursor - `CURRENT_NAME` - name of a file under cursor - `CURRENT_PATH` - path to file under cursor -On `Unix` you can use it this way: +On Unix, you can use it this way: ```sh ~> echo $CURRENT_PATH /home/coderaiser/cloudcmd/bin/cloudcmd.js ``` -Config ---------------- +## Configuration + ![Config](/img/screen/config.png "Config") ### Hot keys @@ -350,80 +383,261 @@ Config | `F10` | open | `Esc` | close -When you change one of options file `~/.cloudcmd.json` would be saved. -It could be edited manually with any text editor. -Here is description of options: +When you change any options, the `~/.cloudcmd.json` file is automatically updated. +It can also be edited manually with any text editor. +Here's a description of all options: -```js +```json { - "name" : "", /* set tab name in web browser */ - "auth" : false, /* enable http authentication */ - "username" : "root", /* username for authentication */ -    "password"         : "toor",   /* password hash for authentication */ - "algo" : "sha512WithRSAEncryption", /* cryptographic algorithm */ - "editor" : "edward", /* default, could be "dword" or "edward" */ - "packer" : "tar", /* default, could be "tar" or "zip" */ - "diff" : true, /* when save - send patch, not whole file */ - "zip" : true, /* zip text before send / unzip before save */ - "localStorage" : true, /* local storage (deprecated) */ - "buffer" : true, /* buffer for copying files */ - "dirStorage" : true, /* store directory listing to localStorage */ - "online" : true, /* load js files from cdn or local path */ - "open" : false /* open web browser when server started */ - "cache" : true, /* enable cache */ - "onePanelMode" : false, /* show one file panel (deprecated) */ - "oneFilePanel" : false, /* show one file panel */ - "keysPanel" : true, /* show classic panel with buttons of keys */ - "port" : 8000, /* http port */ - "ip" : null, /* ip or null(default) */ - "root" : "/", /* root directory */ - "prefix" : "", /* url prefix */ - "progress" : true, /* show progress of file operations */ - "confirmCopy" : true, /* confirm copy */ - "confirmMove" : true, /* confirm move */ - "htmlDialogs" : true, /* use html dialogs */ - "showConfig" : false, /* show config at startap */ - "contact" : true, /* enable contact */ - "configDialog" : true, /* enable config dialog */ - "console" : true, /* enable console */ - "syncConsolePath" : false /* do not sync console path */ - "terminal" : false, /* disable terminal */ - "terminalPath" : '', /* path of a terminal */ - "vim" : false, /* disable vim hot keys */ - "columns" : "name-size-date-owner-mode", /* set visible columns */ + "name": "", // set tab name in web browser + "auth": false, // enable http authentication + "username": "root", // username for authentication + "password": "toor", // password hash for authentication + "algo": "sha512WithRSAEncryption", // cryptographic algorithm + "editor": "edward", // default, could be "dword" or "edward" + "packer": "tar", // default, could be "tar" or "zip" + "diff": true, // when save - send patch, not whole file + "zip": true, // zip text before send / unzip before save + "buffer": true, // buffer for copying files + "dirStorage": true, // store directory listing + "online": false, // do not load js files from cdn + "open": true, // open web browser when server started + "oneFilePanel": false, // show one file panel + "keysPanel": true, // show classic panel with buttons of keys + "port": 8000, // http port + "ip": null, // ip or null(default) + "root": "/", // root directory + "prefix": "", // url prefix + "prefixSocket": "", // prefix for socket connection + "confirmCopy": true, // confirm copy + "confirmMove": true, // confirm move + "showConfig": false, // show config at startup + "showDotFiles": true, // show dot files + "showFileName": false, // do not show file name in view and edit + "contact": true, // enable contact + "configDialog": true, // enable config dialog + "configAuth": true, // enable auth change in config dialog + "console": true, // enable console + "syncConsolePath": false, // do not sync console path + "terminal": false, // disable terminal + "terminalPath": "", // path of a terminal + "terminalCommand": "", // set command to run in terminal + "terminalAutoRestart": true, // restart command on exit + "vim": false, // disable vim hot keys + "themes": "name-size-date-owner-mode", // set visible themes + "export": false, // enable export of config through a server + "exportToken": "root", // token used by export server + "import": false, // enable import of config + "import-url": "http://localhost:8000", // url of an export server + "importToken": "root", // token used to connect to export server + "importListen": false, // listen on config updates + "dropbox": false, // disable dropbox integration + "dropboxToken": "", // unset dropbox token + "log": true // logging } ``` ### Environment Variables -Some config options can be overridden with `environment variables` such: +Some config options can be overridden with environment variables, such as: - `CLOUDCMD_NAME` - set tab name in web browser +- `CLOUDCMD_OPEN` - open web browser when server started - `CLOUDCMD_EDITOR` - set editor -- `CLOUDCMD_COLUMNS` - set visible columns +- `CLOUDCMD_COLUMNS` - set visible themes +- `CLOUDCMD_THEME` - set themes "light" or "dark" +- `CLOUDCMD_MENU` - set menu "supermenu" or "aleman" - `CLOUDCMD_CONTACT` - enable contact - `CLOUDCMD_CONFIG_DIALOG` - enable config dialog +- `CLOUDCMD_CONFIG_AUTH` - enable auth change in config dialog +- `CLOUDCMD_CONFIG_PORT` - enable port change in config dialog - `CLOUDCMD_CONSOLE` - enable console - `CLOUDCMD_SYNC_CONSOLE_PATH` - sync console path - `CLOUDCMD_TERMINAL` - enable terminal - `CLOUDCMD_TERMINAL_PATH` - set terminal path +- `CLOUDCMD_TERMINAL_COMMAND` - set command to run in terminal (shell by default) +- `CLOUDCMD_TERMINAL_AUTO_RESTART` - restart command on exit - `CLOUDCMD_KEYS_PANEL` - show keys panel -- `CLOUDCMD_ONE_PANEL_MODE` - show one file panel (**deprecated**: use `CLOUDCMD_ONE_FILE_PANEL` instead) - `CLOUDCMD_ONE_FILE_PANEL` - show one file panel - `CLOUDCMD_AUTH` - enable authentication - `CLOUDCMD_USERNAME` - set username - `CLOUDCMD_PASSWORD` - set password +- `CLOUDCMD_PREFIX` - set url prefix - `CLOUDCMD_ROOT` - set root directory - `CLOUDCMD_VIM` - enable vim hot keys - `CLOUDCMD_CONFIRM_COPY` - confirm copy - `CLOUDCMD_CONFIRM_MOVE` - confirm move -- `CLOUDCMD_CACHE` - enable cache +- `CLOUDCMD_SHOW_FILE_NAME` - show file name in view and edit +- `CLOUDCMD_EXPORT` - enable export of config through a server +- `CLOUDCMD_EXPORT_TOKEN` - authorization token used by export server +- `CLOUDCMD_IMPORT` - enable import of config +- `CLOUDCMD_IMPORT_TOKEN` - authorization token used to connect to export server +- `CLOUDCMD_IMPORT_URL` - url of an import server +- `CLOUDCMD_IMPORT_LISTEN` - enable listen on config updates from import server + +### User Menu + +When you press `F2` Cloud Commander will read a file `.cloudcmd.menu.js` by walking up parent directories, if can't read it will try to read `~/.cloudcmd.menu.js`. + +Let's consider example `user menu` works file: + +```js +const RENAME_FILE = 'Rename file'; + +export default { + '__settings': { + select: [RENAME_FILE], + run: false, + }, + [`F2 - ${RENAME_FILE}`]: async ({DOM}) => { + await DOM.renameCurrent(); + }, + 'D - Build Dev': async ({CloudCmd}) => { + await CloudCmd.TerminalRun.show({ + command: 'npm run build:client:dev', + autoClose: false, // optional + closeMessage: 'Press any button to close Terminal', // optional + }); + + await CloudCmd.refresh(); + }, + 'P - Build Prod': async ({CloudCmd}) => { + await CloudCmd.TerminalRun.show({ + command: 'npm run build:client', + autoClose: true, // optional + }); + + await CloudCmd.refresh(); + }, + 'C - Create User Menu File': async ({DOM, CloudCmd}) => { + const {CurrentInfo} = DOM; + + const {dirPath} = CurrentInfo; + const path = `${dirPath}.cloudcmd.menu.js`; + const {prefix} = CloudCmd; + + const data = await readDefaultMenu({ + prefix, + }); + + await createDefaultMenu({ + path, + data, + DOM, + CloudCmd, + }); + }, +}; + +async function createDefaultMenu({path, data, DOM, CloudCmd}) { + const {IO} = DOM; + + await IO.write(path, data); + await CloudCmd.refresh(); + + DOM.setCurrentByName('.cloudcmd.menu.js'); + + await CloudCmd.EditFile.show(); +} + +async function readDefaultMenu({prefix}) { + const res = await fetch(`${prefix}/api/v1/user-menu/default`); + const data = await res.text(); + + return data; +} +``` + +You will have ability to run one of this 3 commands with help of double click, enter, or binded key (`F2`, `D` or `P` in this example). Also you can run commands in terminal, or execute any built-in function of `Cloud Commander` extended it's interface. You can find more examples in [User Menu Cookbook](https://github.com/coderaiser/cloudcmd/wiki/User-Menu-Cookbook). + +#### User Menu API + +Here you can find `API` that can be used in **User Menu**. **DOM** and **CloudCmd** two main objects you receive in arguments list using destructuring. + +**DOM** contains all base functions of `Cloud Commander` (rename, remove, download etc); + +- `renameCurrent` - shows renames current file dialog, and does renaming. + +**CloudCmd** contains all modules (`Terminal`, `View`, `Edit`, `Config`, `Console` etc); + +- `TerminalRun` - module that shows `Terminal` with a `command` from options and closes terminal when everything is done. + +**IO** Files API + +- `rename(from, to)` - rename `from` into `to` +- `move(from, to, names)` - rename files with a `names` `from` into `to`; +- `copy(from, to, names)` - copy files with a `names` `from` into `to`; +- `createDirectory(path)` - create directory with a `path`; + +### Distribute + +Being able to configure Cloud Commander remotely opens the doors to using it as microservice, and that's what the "distribute" options set out to do. + +There is an **export server** and an **import client**, which are enabled with `--export` and `--import` respectively. There is a "token", which should be the same in `--import-token` and `--export-token`. To use the *import client*, you should provide `--import-url` to the client so it can connect to an *export server*. + +There are two ways that the *import client* can receive configuration from an *export server*: + +- full config at startup (default) +- get every updated option (with help of the `--import-listen` flag) + +#### An example - using the "distribute" options to get configuration from a remote instance: + +Here's an *export server*: + +``` +coderaiser@cloudcmd:~$ cloudcmd --port 1234 --export --export-token=cloudcmd +``` + +...and an *import client*: + +``` +coderaiser@cloudcmd:~$ cloudcmd --name importer --port 4321 --import-url http://127.0.0.1:1234 --import-token=cloudcmd --no-server --save +``` + +Here's the log output from the *export server*: + +``` +url: http://localhost:1234/ +2018.08.23 13:41:45 -> export: try to auth from importer [127.0.0.1:4321] +2018.08.23 13:41:45 -> export: connected to importer [127.0.0.1:4321] +2018.08.23 13:41:45 -> export: config send to importer [127.0.0.1:4321] +2018.08.23 13:41:45 -> export: disconnected importer [127.0.0.1:4321] +``` + +...and the log output from the *import client*: + +``` +2018.08.23 13:47:36 -> import: try to auth to http://127.0.0.1:1234 +2018.08.23 13:47:36 -> import: connected to http://127.0.0.1:1234 +2018.08.23 13:47:36 -> import: config received from http://127.0.0.1:1234 +2018.08.23 13:47:36 -> import: disconnected from http://127.0.0.1:1234 +``` + +When the *import client* uses `--import-listen`, a persistent connection is used, and the *client* receives live updates from the *import server*. + +The *export server* omits the following configuration fields: + +- `auth` +- `username` +- `password` +- `algo` +- `name` +- `ip` +- `port` +- `root` +- `import` +- `importUrl` +- `importToken` +- `export` +- `exportToken` +- `log` +- `configDialog` + +## Menu -Menu ---------------- ![Menu](/img/screen/menu.png "Menu") -Right mouse click button shows context menu with items: +Right-mouse click to show a context menu with these items: - View - Edit @@ -444,22 +658,30 @@ Right mouse click button shows context menu with items: ### Hot keys -|Key |Operation -|:----------------------|:-------------------------------------------- -| `F9` | open -| `Esc` | close +| Key | Operation | +|:-------------|:------------------------| +| `F9` | open | +| `Esc` | close | +| `Up`, `j` | move cursor up | +| `Down`, `k` | move cursor down | +| `Left`, `h` | close submenu | +| `Right`, `l` | open submenu | +| `G` or `$` | navigate to bottom | +| `gg` or `^` | navigate to top | -One file panel ---------------- -Cloud Commander can work in one panel mode when screen size can not accommodate second panel or via `--one-file-panel` options flag. -It could happen when mobile device, tablet or small window size used to work with file manager. +Commands can be joined, for example: + +- `5j` will navigate **5** items below current; + +## One file panel + +Cloud Commander can work in one panel mode when your screen size can't accommodate a second panel (such as on mobile or tablet), or via the `--one-file-panel` options flag. ![One file panel](/img/screen/one-file-panel.png "One file panel") -Using as Middleware ---------------- +## Using as middleware -Cloud Commander could be used as middleware for `node.js` applications based on [socket.io](http://socket.io "Socket.IO") and [express](http://expressjs.com "Express"): +Cloud Commander can be used as middleware for `node.js` applications based on [socket.io](http://socket.io "Socket.IO") and [express](http://expressjs.com "Express"): Init `package.json`: @@ -476,33 +698,30 @@ npm i cloudcmd express socket.io -S And create `index.js`: ```js -const http = require('http'); -const cloudcmd = require('cloudcmd'); -const io = require('socket.io'); -const app = require('express')(); +import http from 'node:http'; +import {cloudcmd} from 'cloudcmd'; +import {Server} from 'socket.io'; +import express from 'express'; +const app = express(); const port = 1337; -const prefix = '/cloudcmd'; +const prefix = '/'; const server = http.createServer(app); -const socket = io.listen(server, { - path: `${prefix}/socket.io` +const socket = new Server(server, { + path: `${prefix}socket.io`, }); const config = { - prefix // base URL or function which returns base URL (optional) + name: 'cloudcmd :)', }; -const plugins = [ - __dirname + '/plugin.js' -]; - const filePicker = { data: { FilePicker: { - key: 'key' - } - } + key: 'key', + }, + }, }; // override option from json/modules.json @@ -510,32 +729,81 @@ const modules = { filePicker, }; -app.use(cloudcmd({ - socket, // used by Config, Edit (optional) and Console (required) - config, // config data (optional) - plugins, // optional +const { + createConfigManager, + configPath, +} = cloudcmd; + +const configManager = createConfigManager({ + configPath, +}); + +app.use(prefix, cloudcmd({ + socket, // used by Config, Edit (optional) and Console (required) + config, // config data (optional) modules, // optional + configManager, // optional })); server.listen(port); ``` -And you are ready to go. - -### Authorization - -If you want to enable `authorization` you can pass credentials in a `config`. -To generate password you can install `criton` with `npm i criton --save` and use it -or any other way to generate a `hash` of a `password`. +Here is example with two `Config Managers`: ```js -const criton = require('criton'); -const algo = 'sha512WithRSAEncryption'; // default +import http from 'node:http'; +import cloudcmd from 'cloudcmd'; +import {Server} from 'socket.io'; +import express from 'express'; -// you can generate hash dynamically +const app = express(); +const port = 8000; +const prefix1 = '/1'; +const prefix2 = '/2'; + +const {createConfigManager} = cloudcmd; + +const server = http.createServer(app); +const socket1 = new Server(server, { + path: `${prefix1}/socket.io`, +}); + +const socket2 = new Server(server, { + path: `${prefix2}/socket.io`, +}); + +const configManager1 = createConfigManager(); + +configManager1('name', '1'); + +const configManager2 = createConfigManager(); +configManager2('name', '2'); + +app.use(prefix1, cloudcmd({ + socket: socket1, + configManager: configManager1, +})); + +app.use(prefix2, cloudcmd({ + socket: socket2, + configManager: configManager2, +})); + +server.listen(port); +``` + +If you want to enable authorization, you can pass credentials to Cloud Commander with a config. To generate a password, you can install `criton` with `npm i criton --save`, and use it (or any other way) to generate a hash of a password. + +```js +import criton from 'criton'; + +const algo = 'sha512WithRSAEncryption'; + +// default +// you can generate a hash dynamically const password = criton('root', algo); -// or use pregenerated hash as well +// or use a pregenerated hash as well '2b64f2e..ca5d9a9'; const auth = true; @@ -545,16 +813,27 @@ const config = { algo, // optional auth, username, - pasword, -} + password, +}; ``` -Server ---------------- -Standard practices say no non-root process gets to talk to -the Internet on a port less than 1024. Anyway I suggest you -to start Cloud Commander as non-root. How it could be solved? -There is a couple easy and fast ways. One of them is port forwarding. +Now you're ready to go! + +## Authorization + +`~/.cloudcmd.json` contains [password hash](https://github.com/coderaiser/cloudcmd/blob/v11.8.3/json/config.json#L5) because of security reason, if someone steal your config, he wouldn't know your password, because hash is [very strong](https://github.com/coderaiser/cloudcmd/blob/v11.8.3/json/config.json#L6) and can be customized. + +You should never write your password as plain text to `~/.cloudcmd.json`, you can generate password using `cloudcmd` itself: + +``` +cloudcmd --username name --password password --auth --save --no-server +``` + +This command will create hash of your password and write it to `~/.cloudcmd.json`. + +## Server + +Standard practices dictate that no non-root process get to talk to the internet on a port less than 1024. Despite this, **I suggest you start Cloud Commander as a non-root process**. How can we get around this limitation? There's a couple of fast & easy ways. One of them is port forwarding: ### Iptables @@ -567,15 +846,15 @@ iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 4430 iptables -t nat -L # look rules after ``` -You should see something like this ( **8000** and **4430** should be in config as **port** and **sslPort** ) +You should see something like this (**8000** and **4430** should be in config as **port** and **sslPort**) ```sh target prot opt source destination REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 8000 REDIRECT tcp -- anywhere anywhere tcp dpt:https redir ports 4430 ``` -If you would want to get things back just clear rules ( **1** and **2** it's rule numbers, -in your list they could differ). + +If you would want to get things back just clear rules (rule numbers **1** and **2**; in your list they could differ). ```sh iptables -t nat -D PREROUTING 2 @@ -583,14 +862,15 @@ iptables -t nat -D PREROUTING 1 ``` ### nginx -Get [nginx](http://nginx.org/ "nginx"). On Linux it could be done this way: + +Get [nginx](http://nginx.org/ "nginx"). On Linux, you can run: ```sh sudo apt-get install nginx #for ubuntu and debian ``` -Then make host file **/etc/nginx/sites-available/io.cloudcmd.io** -( *io.cloudcmd.io* is your domain name) with content: +Then, make a host file **/etc/nginx/sites-available/io.cloudcmd.io** +(where, for example, *io.cloudcmd.io* is your domain name) with these contents: ```sh server { @@ -604,7 +884,7 @@ server { } ``` -If you want add **SSL**, add a couple lines to server block: +**If you want add SSL**, add a couple lines to the `server` block: ```sh server { @@ -621,7 +901,7 @@ server { } ``` -For WebSocket support (nginx >= v1.3.13) modify server block: +For WebSocket support, (nginx >= v1.3.13) modify the `server` block like so: ```sh location / { @@ -633,8 +913,7 @@ For WebSocket support (nginx >= v1.3.13) modify server block: } ``` - -If you need redirection from **http** to **https**, it's simple: +If you need redirection from **http** to **https**, simply use: ```sh server { @@ -646,30 +925,29 @@ server { ``` ```sh -# create symlink of this file +# create a symlink of this file ln -s ./sites-available/io.cloudcmd.io ./sites-enabled # restart nginx /etc/init.d/nginx restart ``` -Deploy ---------------- -`Cloud Commander` could be easily deployed to [Heroku](https://heroku.com/deploy?template=https://github.com/coderaiser/cloudcmd "Deploy to Heroku"). +## Deploy -[![Deploy to Heroku](https://www.herokucdn.com/deploy/button.png "Deploy to Heroku")]( https://heroku.com/deploy?template=https://github.com/coderaiser/cloudcmd) +`Cloud Commander` can be easily deployed to [InstaPods][DeployInstaPodsURL]. After deploy you receive email with credentials. -Docker ---------------- -`Cloud Commander` could be used as [docker container](https://hub.docker.com/r/coderaiser/cloudcmd/ "Docker container") this way: +[![Deploy on InstaPods](https://instapods.com/deploy-button.svg)](https://app.instapods.com/dashboard/pods/create?app=cloudcmd&ref=cloudcmd) + +## Docker + +`Cloud Commander` can be used as [docker container](https://hub.docker.com/r/coderaiser/cloudcmd/ "Docker container") like so: ```sh -docker run -t --rm -v ~:/root -v /:/mnt/fs -p 8000:8000 coderaiser/cloudcmd +docker run -t --rm -v ~:/root -v /:/mnt/fs -w=/root -p 8000:8000 coderaiser/cloudcmd ``` -Config would be read from home directory, hosts root file system would be mount to `/mnt/fs`, -`8000` port would be exposed to hosts port. +Configuration will be read from the home directory, the host's root file system will be mounted to `/mnt/fs`, and port `8000` port will exposed to the host's port. -Also you could use [docker compose](https://docs.docker.com/compose/ "Docker Compose") with `docker-compose.yml`: +Also, you can use [docker compose](https://docs.docker.com/compose/ "Docker Compose") with `docker-compose.yml`: ```yml version: '2' @@ -683,23 +961,535 @@ services: image: coderaiser/cloudcmd ``` -When you create this file run: +When you create this file, run: ```sh docker-compose up ``` -Get involved ---------------- +# Dropbox -There is a lot ways to be involved in `Cloud Commander` development: +Dropbox support is integrated into Cloud Commander, and you can switch from your local file system to a Dropbox account. +All you need to do is set `--dropbox` option and [generate a dropbox token](https://blogs.dropbox.com/developers/2014/05/generate-an-access-token-for-your-own-account/) for your account. -- if you find a bug or got idea to share [create issue](https://github.com/coderaiser/cloudcmd/issues/new "Create issue"); -- if you fixed a bug, typo or implemented new feature [create pull request](https://github.com/coderaiser/cloudcmd/compare "Create pull request"); -- if you know languages you can help with [site translations](https://github.com/coderaiser/cloudcmd/wiki "Cloud Commander community wiki"); +This could look like this: -Version history ---------------- +```sh +cloudcmd --dropbox --dropbox-token your-dropbox-token +``` + +While using Dropbox remember that there is no remote support for the console/terminal. Seeing the progress of file operations is also not supported. There's only basic support, but you can do the following things with files and directories: + +- create +- remove +- rename/move +- view +- edit + +## Automatically start cloudcmd on boot for `systemd` + +First, locate the command to run cloudcmd + +```sh +which cloudcmd +``` + +take note of the result and create a systemd entry by executing + +```sh +sudo nano /etc/systemd/system/cloudcmd.service +``` + +and use this template + +``` +[Unit] +Description = Cloud Commander + +[Service] +TimeoutStartSec = 0 +Restart = always +ExecStart = THE RESULT OF which cloudcmd WE'VE EXECUTED EARLIER +User = YOUR_USER + +[Install] +WantedBy = multi-user.target +``` + +Don't forget to change the line for `ExecStart` and `User` + +Save the changes and exit editor. + +You may now enable cloudcmd and set it to autostart on boot by running: + +```sh +sudo systemctl enable --now cloudcmd +``` + +## Automatically start cloudcmd on boot for `FreeBSD` + +First, locate the command to run cloudcmd + +``` +which cloudcmd +``` + +take note of the result and create a rc script + +``` +vi /usr/local/etc/rc.d/cloudcmd +``` + +and use this template + +``` +!/bin/sh +# +# PROVIDE: cloudcmd +# REQUIRE: LOGIN +# KEYWORD: shutdown + +# Author: IhatemyISP (ihatemyisp.net) +# Version: 1.0.0 + +# Description: +# This script runs Cloud Commander as a service under the supplied user on boot + +# 1) Place file in /usr/local/etc/rc.d/ +# 2) Add cloudcmd_enable="YES" to /etc/rc.conf +# 3) (Optional) To run as non-root, add cloudcmd_runAs="user" to /etc/rc.conf +# 4) (Optional) To pass Cloud Commander args, add cloudcmd_args="" to /etc/rc.conf + +# Freebsd rc library +. /etc/rc.subr + +# General Info +name="cloudcmd" # Safe name of program +program_name="cloudcmd" # Name of exec +title="CloudCommander" # Title to display in top/htop + +# RC.config vars +load_rc_config $name # Loading rc config vars +: ${cloudcmd_enable="NO"} # Default: Do not enable Cloud Commander +: ${cloudcmd_runAs="root"} # Default: Run Cloud Commander as root + +# Freebsd Setup +rcvar=cloudcmd_enable # Enables the rc.conf YES/NO flag +pidfile="/var/run/${program_name}.pid" # PID file location + +# Env Setup +export HOME=$( getent passwd "$cloudcmd_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user + +# Command Setup +exec_path="/usr/local/bin/${program_name}" # Path to the cloudcmd exec, /usr/local/bin/ when installed globally +output_file="/var/log/${program_name}.log" # Path to Cloud Commander output file + +# Command +command="/usr/sbin/daemon" +command_args="-r -t ${title} -u ${cloudcmd_runAs} -o ${output_file} -P ${pidfile} ${exec_path} ${cloudcmd_args}" + +# Loading Config +load_rc_config ${name} +run_rc_command "$1" +``` + +Enable autostart + +``` +echo cloudcmd_enable="YES" >> /etc/rc.conf +``` + +(Optional) Set user to run Cloud Commander as (default is root) + +``` +echo cloudcmd_runAs="user" >> /etc/rc.conf +``` + +Start the service (or just reboot) + +``` +service cloudcmd start +``` + +## Get involved + +There are a lot of ways to be involved in `Cloud Commander` development: + +- support project on patreon: https://patreon.com/coderaiser; +- if you find a bug or have an idea to share, [create an issue](https://github.com/coderaiser/cloudcmd/issues/new "Create issue"); +- if you fixed a bug, typo or implemented a new feature, [create a pull request](https://github.com/coderaiser/cloudcmd/compare "Create pull request"); +- if you know a language not currently translated, or would like to improve an existing translation, you can help with [site translations](https://github.com/coderaiser/cloudcmd/wiki "Cloud Commander community wiki"); + +## Version history + +- *2026.06.15*, **[v19.19.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.19.1)** +- *2026.05.26*, **[v19.19.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.19.0)** +- *2026.05.26*, **[v19.18.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.18.1)** +- *2026.05.26*, **[v19.18.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.18.0)** +- *2026.05.17*, **[v19.17.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.17.0)** +- *2026.05.03*, **[v19.16.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.16.0)** +- *2026.04.28*, **[v19.15.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.15.0)** +- *2026.04.28*, **[v19.14.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.14.0)** +- *2026.04.21*, **[v19.13.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.13.1)** +- *2026.04.15*, **[v19.13.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.13.0)** +- *2026.04.12*, **[v19.12.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.12.5)** +- *2026.04.12*, **[v19.12.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.12.4)** +- *2026.04.12*, **[v19.12.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.12.3)** +- *2026.04.11*, **[v19.12.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.12.2)** +- *2026.04.09*, **[v19.12.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.12.1)** +- *2026.04.09*, **[v19.12.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.12.0)** +- *2026.04.07*, **[v19.11.14](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.14)** +- *2026.04.07*, **[v19.11.13](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.13)** +- *2026.04.06*, **[v19.11.12](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.12)** +- *2026.04.06*, **[v19.11.11](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.11)** +- *2026.04.06*, **[v19.11.10](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.10)** +- *2026.04.06*, **[v19.11.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.9)** +- *2026.04.06*, **[v19.11.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.8)** +- *2026.04.05*, **[v19.11.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.7)** +- *2026.04.05*, **[v19.11.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.6)** +- *2026.04.05*, **[v19.11.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.5)** +- *2026.04.04*, **[v19.11.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.4)** +- *2026.04.04*, **[v19.11.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.3)** +- *2026.04.04*, **[v19.11.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.2)** +- *2026.04.04*, **[v19.11.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.1)** +- *2026.04.04*, **[v19.11.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.11.0)** +- *2026.04.04*, **[v19.10.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.10.2)** +- *2026.04.03*, **[v19.10.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.10.1)** +- *2026.04.02*, **[v19.10.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.10.0)** +- *2026.04.02*, **[v19.9.24](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.24)** +- *2026.04.01*, **[v19.9.23](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.23)** +- *2026.03.31*, **[v19.9.22](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.22)** +- *2026.03.31*, **[v19.9.21](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.21)** +- *2026.03.30*, **[v19.9.20](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.20)** +- *2026.03.30*, **[v19.9.19](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.19)** +- *2026.03.30*, **[v19.9.18](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.18)** +- *2026.03.30*, **[v19.9.17](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.17)** +- *2026.03.29*, **[v19.9.16](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.16)** +- *2026.03.29*, **[v19.9.15](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.15)** +- *2026.03.29*, **[v19.9.14](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.14)** +- *2026.03.29*, **[v19.9.13](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.13)** +- *2026.03.29*, **[v19.9.12](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.12)** +- *2026.03.29*, **[v19.9.11](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.11)** +- *2026.03.29*, **[v19.9.10](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.10)** +- *2026.03.29*, **[v19.9.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.9)** +- *2026.03.28*, **[v19.9.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.8)** +- *2026.03.27*, **[v19.9.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.7)** +- *2026.03.26*, **[v19.9.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.6)** +- *2026.03.26*, **[v19.9.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.5)** +- *2026.03.26*, **[v19.9.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.4)** +- *2026.03.24*, **[v19.9.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.3)** +- *2026.03.23*, **[v19.9.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.2)** +- *2026.03.23*, **[v19.9.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.1)** +- *2026.03.23*, **[v19.9.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.0)** +- *2026.03.23*, **[v19.8.15](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.15)** +- *2026.03.23*, **[v19.8.14](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.14)** +- *2026.03.23*, **[v19.8.13](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.13)** +- *2026.03.23*, **[v19.8.12](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.12)** +- *2026.03.23*, **[v19.8.11](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.11)** +- *2026.03.23*, **[v19.8.10](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.10)** +- *2026.03.23*, **[v19.8.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.9)** +- *2026.03.23*, **[v19.8.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.8)** +- *2026.03.23*, **[v19.8.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.7)** +- *2026.03.23*, **[v19.8.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.6)** +- *2026.03.23*, **[v19.8.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.5)** +- *2026.03.22*, **[v19.8.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.4)** +- *2026.03.22*, **[v19.8.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.3)** +- *2026.03.22*, **[v19.8.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.2)** +- *2026.03.22*, **[v19.8.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.1)** +- *2026.03.20*, **[v19.8.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.0)** +- *2026.03.18*, **[v19.7.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.7.1)** +- *2026.03.17*, **[v19.7.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.7.0)** +- *2026.03.17*, **[v19.6.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.9)** +- *2026.02.27*, **[v19.6.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.8)** +- *2026.02.26*, **[v19.6.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.7)** +- *2026.02.26*, **[v19.6.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.6)** +- *2026.02.26*, **[v19.6.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.5)** +- *2026.02.25*, **[v19.6.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.4)** +- *2026.02.24*, **[v19.6.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.3)** +- *2026.02.24*, **[v19.6.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.2)** +- *2026.02.24*, **[v19.6.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.1)** +- *2026.02.21*, **[v19.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.0)** +- *2026.02.18*, **[v19.5.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.5.1)** +- *2026.02.18*, **[v19.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.5.0)** +- *2026.02.18*, **[v19.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.4.1)** +- *2026.02.18*, **[v19.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.4.0)** +- *2026.02.15*, **[v19.3.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.9)** +- *2026.02.15*, **[v19.3.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.8)** +- *2026.02.13*, **[v19.3.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.7)** +- *2026.02.12*, **[v19.3.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.6)** +- *2026.02.08*, **[v19.3.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.5)** +- *2026.02.06*, **[v19.3.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.4)** +- *2026.02.05*, **[v19.3.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.3)** +- *2026.02.04*, **[v19.3.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.2)** +- *2026.02.03*, **[v19.3.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.1)** +- *2026.02.03*, **[v19.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.0)** +- *2026.02.03*, **[v19.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.2.0)** +- *2026.02.02*, **[v19.1.21](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.21)** +- *2026.01.31*, **[v19.1.20](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.20)** +- *2026.01.30*, **[v19.1.19](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.19)** +- *2026.01.30*, **[v19.1.18](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.18)** +- *2026.01.29*, **[v19.1.17](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.17)** +- *2026.01.28*, **[v19.1.16](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.16)** +- *2026.01.28*, **[v19.1.15](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.15)** +- *2026.01.28*, **[v19.1.14](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.14)** +- *2026.01.27*, **[v19.1.13](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.13)** +- *2026.01.27*, **[v19.1.12](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.12)** +- *2026.01.25*, **[v19.1.11](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.11)** +- *2026.01.25*, **[v19.1.10](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.10)** +- *2026.01.21*, **[v19.1.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.9)** +- *2026.01.20*, **[v19.1.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.8)** +- *2026.01.17*, **[v19.1.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.7)** +- *2026.01.16*, **[v19.1.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.6)** +- *2026.01.16*, **[v19.1.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.5)** +- *2026.01.15*, **[v19.1.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.4)** +- *2026.01.15*, **[v19.1.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.3)** +- *2026.01.14*, **[v19.1.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.2)** +- *2026.01.12*, **[v19.1.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.1)** +- *2025.12.31*, **[v19.1.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.0)** +- *2025.12.24*, **[v19.0.17](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.17)** +- *2025.12.05*, **[v19.0.16](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.16)** +- *2025.11.28*, **[v19.0.15](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.15)** +- *2025.11.27*, **[v19.0.14](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.14)** +- *2025.09.26*, **[v19.0.13](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.13)** +- *2025.09.25*, **[v19.0.12](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.12)** +- *2025.09.24*, **[v19.0.11](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.11)** +- *2025.09.23*, **[v19.0.10](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.10)** +- *2025.09.22*, **[v19.0.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.9)** +- *2025.09.20*, **[v19.0.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.8)** +- *2025.09.18*, **[v19.0.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.7)** +- *2025.09.17*, **[v19.0.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.6)** +- *2025.09.16*, **[v19.0.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.5)** +- *2025.09.15*, **[v19.0.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.4)** +- *2025.09.15*, **[v19.0.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.3)** +- *2025.09.14*, **[v19.0.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.2)** +- *2025.09.14*, **[v19.0.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.1)** +- *2025.09.14*, **[v19.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.0)** +- *2025.09.14*, **[v18.8.11](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.11)** +- *2025.09.14*, **[v18.8.10](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.10)** +- *2025.09.14*, **[v18.8.9](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.9)** +- *2025.09.13*, **[v18.8.8](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.8)** +- *2025.09.12*, **[v18.8.7](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.7)** +- *2025.09.12*, **[v18.8.6](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.6)** +- *2025.09.10*, **[v18.8.5](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.5)** +- *2025.09.09*, **[v18.8.4](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.4)** +- *2025.09.04*, **[v18.8.3](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.3)** +- *2025.09.04*, **[v18.8.2](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.2)** +- *2025.09.04*, **[v18.8.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.1)** +- *2025.09.02*, **[v18.8.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.0)** +- *2025.08.30*, **[v18.7.4](//github.com/coderaiser/cloudcmd/releases/tag/v18.7.4)** +- *2025.07.26*, **[v18.7.3](//github.com/coderaiser/cloudcmd/releases/tag/v18.7.3)** +- *2025.07.24*, **[v18.7.2](//github.com/coderaiser/cloudcmd/releases/tag/v18.7.2)** +- *2025.07.06*, **[v18.7.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.7.1)** +- *2025.07.05*, **[v18.7.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.7.0)** +- *2025.07.04*, **[v18.6.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.6.1)** +- *2025.07.02*, **[v18.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.6.0)** +- *2025.04.10*, **[v18.5.2](//github.com/coderaiser/cloudcmd/releases/tag/v18.5.2)** +- *2025.02.03*, **[v18.5.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.5.1)** +- *2025.01.20*, **[v18.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.5.0)** +- *2024.12.13*, **[v18.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.4.1)** +- *2024.11.22*, **[v18.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.4.0)** +- *2024.11.14*, **[v18.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.3.0)** +- *2024.11.06*, **[v18.2.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.2.1)** +- *2024.10.27*, **[v18.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.2.0)** +- *2024.08.17*, **[v18.1.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.1.0)** +- *2024.08.16*, **[v18.0.2](//github.com/coderaiser/cloudcmd/releases/tag/v18.0.2)** +- *2024.08.16*, **[v18.0.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.0.1)** +- *2024.08.16*, **[v18.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.0.0)** +- *2024.08.16*, **[v17.4.4](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.4)** +- *2024.07.27*, **[v17.4.3](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.3)** +- *2024.07.03*, **[v17.4.2](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.2)** +- *2024.05.06*, **[v17.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.1)** +- *2024.04.17*, **[v17.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.0)** +- *2024.04.03*, **[v17.3.3](//github.com/coderaiser/cloudcmd/releases/tag/v17.3.3)** +- *2024.03.29*, **[v17.3.2](//github.com/coderaiser/cloudcmd/releases/tag/v17.3.2)** +- *2024.03.29*, **[v17.3.1](//github.com/coderaiser/cloudcmd/releases/tag/v17.3.1)** +- *2024.03.29*, **[v17.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v17.3.0)** +- *2024.03.29*, **[v17.2.1](//github.com/coderaiser/cloudcmd/releases/tag/v17.2.1)** +- *2024.03.22*, **[v17.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v17.2.0)** +- *2024.03.21*, **[v17.1.6](//github.com/coderaiser/cloudcmd/releases/tag/v17.1.6)** +- *2024.03.20*, **[v17.1.5](//github.com/coderaiser/cloudcmd/releases/tag/v17.1.5)** +- *2024.03.20*, **[v17.1.4](//github.com/coderaiser/cloudcmd/releases/tag/v17.1.4)** +- *2024.03.18*, **[v17.1.3](//github.com/coderaiser/cloudcmd/releases/tag/v17.1.3)** +- *2024.03.18*, **[v17.1.2](//github.com/coderaiser/cloudcmd/releases/tag/v17.1.2)** +- *2024.03.16*, **[v17.1.1](//github.com/coderaiser/cloudcmd/releases/tag/v17.1.1)** +- *2024.03.16*, **[v17.1.0](//github.com/coderaiser/cloudcmd/releases/tag/v17.1.0)** +- *2024.03.12*, **[v17.0.7](//github.com/coderaiser/cloudcmd/releases/tag/v17.0.7)** +- *2024.03.11*, **[v17.0.6](//github.com/coderaiser/cloudcmd/releases/tag/v17.0.6)** +- *2024.03.11*, **[v17.0.5](//github.com/coderaiser/cloudcmd/releases/tag/v17.0.5)** +- *2024.02.02*, **[v17.0.4](//github.com/coderaiser/cloudcmd/releases/tag/v17.0.4)** +- *2024.02.01*, **[v17.0.3](//github.com/coderaiser/cloudcmd/releases/tag/v17.0.3)** +- *2024.02.01*, **[v17.0.2](//github.com/coderaiser/cloudcmd/releases/tag/v17.0.2)** +- *2024.01.25*, **[v17.0.1](//github.com/coderaiser/cloudcmd/releases/tag/v17.0.1)** +- *2023.12.12*, **[v17.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v17.0.0)** +- *2023.12.08*, **[v16.18.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.18.0)** +- *2023.12.04*, **[v16.17.9](//github.com/coderaiser/cloudcmd/releases/tag/v16.17.9)** +- *2023.12.04*, **[v16.17.8](//github.com/coderaiser/cloudcmd/releases/tag/v16.17.8)** +- *2023.10.12*, **[v16.17.7](//github.com/coderaiser/cloudcmd/releases/tag/v16.17.7)** +- *2023.09.22*, **[v16.17.6](//github.com/coderaiser/cloudcmd/releases/tag/v16.17.6)** +- *2023.09.06*, **[v16.17.5](//github.com/coderaiser/cloudcmd/releases/tag/v16.17.5)** +- *2023.09.05*, **[v16.17.4](//github.com/coderaiser/cloudcmd/releases/tag/v16.17.4)** +- *2023.09.05*, **[v16.17.3](//github.com/coderaiser/cloudcmd/releases/tag/v16.17.3)** +- *2023.09.04*, **[v16.17.2](//github.com/coderaiser/cloudcmd/releases/tag/v16.17.2)** +- *2023.09.04*, **[v16.17.1](//github.com/coderaiser/cloudcmd/releases/tag/v16.17.1)** +- *2023.09.04*, **[v16.17.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.17.0)** +- *2023.08.10*, **[v16.16.3](//github.com/coderaiser/cloudcmd/releases/tag/v16.16.3)** +- *2023.08.09*, **[v16.16.2](//github.com/coderaiser/cloudcmd/releases/tag/v16.16.2)** +- *2023.08.07*, **[v16.16.1](//github.com/coderaiser/cloudcmd/releases/tag/v16.16.1)** +- *2023.07.09*, **[v16.16.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.16.0)** +- *2023.05.17*, **[v16.15.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.15.0)** +- *2023.03.21*, **[v16.14.1](//github.com/coderaiser/cloudcmd/releases/tag/v16.14.1)** +- *2023.03.08*, **[v16.14.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.14.0)** +- *2023.01.30*, **[v16.13.1](//github.com/coderaiser/cloudcmd/releases/tag/v16.13.1)** +- *2023.01.29*, **[v16.13.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.13.0)** +- *2023.01.29*, **[v16.12.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.12.0)** +- *2023.01.22*, **[v16.11.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.11.0)** +- *2023.01.19*, **[v16.10.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.10.0)** +- *2023.01.18*, **[v16.9.1](//github.com/coderaiser/cloudcmd/releases/tag/v16.9.1)** +- *2023.01.17*, **[v16.9.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.9.0)** +- *2023.01.16*, **[v16.8.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.8.0)** +- *2023.01.15*, **[v16.7.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.7.0)** +- *2022.10.20*, **[v16.6.1](//github.com/coderaiser/cloudcmd/releases/tag/v16.6.1)** +- *2022.10.09*, **[v16.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.6.0)** +- *2022.08.06*, **[v16.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.5.0)** +- *2022.07.20*, **[v16.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v16.4.1)** +- *2022.07.11*, **[v16.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.4.0)** +- *2022.07.02*, **[v16.3.1](//github.com/coderaiser/cloudcmd/releases/tag/v16.3.1)** +- *2022.07.01*, **[v16.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.3.0)** +- *2022.06.17*, **[v16.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.2.0)** +- *2022.05.12*, **[v16.1.1](//github.com/coderaiser/cloudcmd/releases/tag/v16.1.1)** +- *2022.04.23*, **[v16.1.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.1.0)** +- *2022.04.22*, **[v16.0.1](//github.com/coderaiser/cloudcmd/releases/tag/v16.0.1)** +- *2022.02.19*, **[v16.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v16.0.0)** +- *2022.01.20*, **[v15.9.15](//github.com/coderaiser/cloudcmd/releases/tag/v15.9.15)** +- *2022.01.13*, **[v15.9.14](//github.com/coderaiser/cloudcmd/releases/tag/v15.9.14)** +- *2021.12.23*, **[v15.9.13](//github.com/coderaiser/cloudcmd/releases/tag/v15.9.13)** +- *2021.12.16*, **[v15.9.12](//github.com/coderaiser/cloudcmd/releases/tag/v15.9.12)** +- *2021.12.09*, **[v15.9.11](//github.com/coderaiser/cloudcmd/releases/tag/v15.9.11)** +- *2021.12.04*, **[v15.9.10](//github.com/coderaiser/cloudcmd/releases/tag/v15.9.10)** +- *2021.11.22*, **[v15.9.9](//github.com/coderaiser/cloudcmd/releases/tag/v15.9.9)** +- *2021.02.03*, **[v15.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v15.6.0)** +- *2021.02.02*, **[v15.5.2](//github.com/coderaiser/cloudcmd/releases/tag/v15.5.2)** +- *2021.01.31*, **[v15.5.1](//github.com/coderaiser/cloudcmd/releases/tag/v15.5.1)** +- *2021.01.30*, **[v15.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v15.5.0)** +- *2021.01.26*, **[v15.4.4](//github.com/coderaiser/cloudcmd/releases/tag/v15.4.4)** +- *2021.01.25*, **[v15.4.3](//github.com/coderaiser/cloudcmd/releases/tag/v15.4.3)** +- *2021.01.21*, **[v15.4.2](//github.com/coderaiser/cloudcmd/releases/tag/v15.4.2)** +- *2021.01.20*, **[v15.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v15.4.1)** +- *2021.01.19*, **[v15.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v15.4.0)** +- *2021.01.19*, **[v15.3.4](//github.com/coderaiser/cloudcmd/releases/tag/v15.3.4)** +- *2021.01.17*, **[v15.3.1](//github.com/coderaiser/cloudcmd/releases/tag/v15.3.1)** +- *2021.01.17*, **[v15.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v15.3.0)** +- *2021.01.16*, **[v15.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v15.2.0)** +- *2021.01.07*, **[v15.1.0](//github.com/coderaiser/cloudcmd/releases/tag/v15.1.0)** +- *2021.01.05*, **[v15.0.4](//github.com/coderaiser/cloudcmd/releases/tag/v15.0.4)** +- *2020.01.05*, **[v15.0.3](//github.com/coderaiser/cloudcmd/releases/tag/v15.0.3)** +- *2020.12.31*, **[v15.0.2](//github.com/coderaiser/cloudcmd/releases/tag/v15.0.2)** +- *2020.12.30*, **[v15.0.1](//github.com/coderaiser/cloudcmd/releases/tag/v15.0.1)** +- *2020.12.28*, **[v15.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v15.0.0)** +- *2020.08.21*, **[v14.9.3](//github.com/coderaiser/cloudcmd/releases/tag/v14.9.3)** +- *2020.08.19*, **[v14.9.2](//github.com/coderaiser/cloudcmd/releases/tag/v14.9.2)** +- *2020.08.16*, **[v14.9.1](//github.com/coderaiser/cloudcmd/releases/tag/v14.9.1)** +- *2020.08.14*, **[v14.9.0](//github.com/coderaiser/cloudcmd/releases/tag/v14.9.0)** +- *2020.08.14*, **[v14.8.0](//github.com/coderaiser/cloudcmd/releases/tag/v14.8.0)** +- *2020.08.11*, **[v14.7.2](//github.com/coderaiser/cloudcmd/releases/tag/v14.7.2)** +- *2020.08.11*, **[v14.7.1](//github.com/coderaiser/cloudcmd/releases/tag/v14.7.1)** +- *2020.08.10*, **[v14.7.0](//github.com/coderaiser/cloudcmd/releases/tag/v14.7.0)** +- *2020.05.20*, **[v14.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v14.6.0)** +- *2020.05.06*, **[v14.5.1](//github.com/coderaiser/cloudcmd/releases/tag/v14.5.1)** +- *2020.05.04*, **[v14.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v14.5.0)** +- *2020.04.27*, **[v14.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v14.4.0)** +- *2020.04.13*, **[v14.3.10](//github.com/coderaiser/cloudcmd/releases/tag/v14.3.10)** +- *2020.04.10*, **[v14.3.9](//github.com/coderaiser/cloudcmd/releases/tag/v14.3.9)** +- *2020.04.04*, **[v14.3.8](//github.com/coderaiser/cloudcmd/releases/tag/v14.3.8)** +- *2020.04.03*, **[v14.3.7](//github.com/coderaiser/cloudcmd/releases/tag/v14.3.7)** +- *2020.03.31*, **[v14.3.6](//github.com/coderaiser/cloudcmd/releases/tag/v14.3.6)** +- *2020.03.25*, **[v14.3.5](//github.com/coderaiser/cloudcmd/releases/tag/v14.3.5)** +- *2020.03.03*, **[v14.3.4](//github.com/coderaiser/cloudcmd/releases/tag/v14.3.4)** +- *2020.02.23*, **[v14.3.3](//github.com/coderaiser/cloudcmd/releases/tag/v14.3.3)** +- *2020.02.21*, **[v14.3.2](//github.com/coderaiser/cloudcmd/releases/tag/v14.3.2)** +- *2020.02.21*, **[v14.3.1](//github.com/coderaiser/cloudcmd/releases/tag/v14.3.1)** +- *2020.01.29*, **[v14.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v14.3.0)** +- *2019.12.21*, **[v14.2.1](//github.com/coderaiser/cloudcmd/releases/tag/v14.2.1)** +- *2019.11.15*, **[v14.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v14.2.0)** +- *2019.10.16*, **[v14.1.2](//github.com/coderaiser/cloudcmd/releases/tag/v14.1.2)** +- *2019.10.09*, **[v14.1.1](//github.com/coderaiser/cloudcmd/releases/tag/v14.1.1)** +- *2019.10.02*, **[v14.1.0](//github.com/coderaiser/cloudcmd/releases/tag/v14.1.0)** +- *2019.09.25*, **[v14.0.2](//github.com/coderaiser/cloudcmd/releases/tag/v14.0.2)** +- *2019.09.25*, **[v14.0.1](//github.com/coderaiser/cloudcmd/releases/tag/v14.0.1)** +- *2019.09.22*, **[v14.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v14.0.0)** +- *2019.09.21*, **[v13.4.2](//github.com/coderaiser/cloudcmd/releases/tag/v13.4.2)** +- *2019.09.20*, **[v13.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v13.4.1)** +- *2019.09.03*, **[v13.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v13.4.0)** +- *2019.08.28*, **[v13.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v13.3.0)** +- *2019.08.22*, **[v13.2.1](//github.com/coderaiser/cloudcmd/releases/tag/v13.2.1)** +- *2019.08.20*, **[v13.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v13.2.0)** +- *2019.08.16*, **[v13.1.0](//github.com/coderaiser/cloudcmd/releases/tag/v13.1.0)** +- *2019.08.14*, **[v13.0.1](//github.com/coderaiser/cloudcmd/releases/tag/v13.0.1)** +- *2019.08.14*, **[v13.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v13.0.0)** +- *2019.08.02*, **[v12.6.3](//github.com/coderaiser/cloudcmd/releases/tag/v12.6.3)** +- *2019.06.06*, **[v12.6.2](//github.com/coderaiser/cloudcmd/releases/tag/v12.6.2)** +- *2019.06.04*, **[v12.6.1](//github.com/coderaiser/cloudcmd/releases/tag/v12.6.1)** +- *2019.05.31*, **[v12.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v12.6.0)** +- *2019.05.28*, **[v12.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v12.5.0)** +- *2019.05.27*, **[v12.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v12.4.0)** +- *2019.05.24*, **[v12.3.2](//github.com/coderaiser/cloudcmd/releases/tag/v12.3.2)** +- *2019.05.24*, **[v12.3.1](//github.com/coderaiser/cloudcmd/releases/tag/v12.3.1)** +- *2019.05.24*, **[v12.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v12.3.0)** +- *2019.05.13*, **[v12.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v12.2.0)** +- *2019.04.15*, **[v12.1.0](//github.com/coderaiser/cloudcmd/releases/tag/v12.1.0)** +- *2019.04.04*, **[v12.0.2](//github.com/coderaiser/cloudcmd/releases/tag/v12.0.2)** +- *2019.04.04*, **[v12.0.1](//github.com/coderaiser/cloudcmd/releases/tag/v12.0.1)** +- *2019.04.01*, **[v12.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v12.0.0)** +- *2019.03.27*, **[v11.8.6](//github.com/coderaiser/cloudcmd/releases/tag/v11.8.6)** +- *2019.02.20*, **[v11.8.5](//github.com/coderaiser/cloudcmd/releases/tag/v11.8.5)** +- *2019.02.15*, **[v11.8.4](//github.com/coderaiser/cloudcmd/releases/tag/v11.8.4)** +- *2018.12.04*, **[v11.8.3](//github.com/coderaiser/cloudcmd/releases/tag/v11.8.3)** +- *2018.11.22*, **[v11.8.2](//github.com/coderaiser/cloudcmd/releases/tag/v11.8.2)** +- *2018.11.14*, **[v11.8.1](//github.com/coderaiser/cloudcmd/releases/tag/v11.8.1)** +- *2018.11.09*, **[v11.8.0](//github.com/coderaiser/cloudcmd/releases/tag/v11.8.0)** +- *2018.11.01*, **[v11.7.1](//github.com/coderaiser/cloudcmd/releases/tag/v11.7.1)** +- *2018.10.25*, **[v11.7.0](//github.com/coderaiser/cloudcmd/releases/tag/v11.7.0)** +- *2018.10.23*, **[v11.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v11.6.0)** +- *2018.10.23*, **[v11.5.4](//github.com/coderaiser/cloudcmd/releases/tag/v11.5.4)** +- *2018.10.19*, **[v11.5.3](//github.com/coderaiser/cloudcmd/releases/tag/v11.5.3)** +- *2018.10.19*, **[v11.5.2](//github.com/coderaiser/cloudcmd/releases/tag/v11.5.2)** +- *2018.10.17*, **[v11.5.1](//github.com/coderaiser/cloudcmd/releases/tag/v11.5.1)** +- *2018.10.16*, **[v11.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v11.5.0)** +- *2018.10.16*, **[v11.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v11.4.1)** +- *2018.10.12*, **[v11.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v11.4.0)** +- *2018.10.12*, **[v11.3.1](//github.com/coderaiser/cloudcmd/releases/tag/v11.3.1)** +- *2018.10.11*, **[v11.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v11.3.0)** +- *2018.10.04*, **[v11.2.3](//github.com/coderaiser/cloudcmd/releases/tag/v11.2.3)** +- *2018.09.28*, **[v11.2.2](//github.com/coderaiser/cloudcmd/releases/tag/v11.2.2)** +- *2018.09.28*, **[v11.2.1](//github.com/coderaiser/cloudcmd/releases/tag/v11.2.1)** +- *2018.09.28*, **[v11.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v11.2.0)** +- *2018.09.27*, **[v11.1.0](//github.com/coderaiser/cloudcmd/releases/tag/v11.1.0)** +- *2018.09.26*, **[v11.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v11.0.0)** +- *2018.09.21*, **[v10.8.2](//github.com/coderaiser/cloudcmd/releases/tag/v10.8.2)** +- *2018.09.20*, **[v10.8.1](//github.com/coderaiser/cloudcmd/releases/tag/v10.8.1)** +- *2018.09.19*, **[v10.8.0](//github.com/coderaiser/cloudcmd/releases/tag/v10.8.0)** +- *2018.09.14*, **[v10.7.0](//github.com/coderaiser/cloudcmd/releases/tag/v10.7.0)** +- *2018.09.10*, **[v10.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v10.6.0)** +- *2018.09.08*, **[v10.5.3](//github.com/coderaiser/cloudcmd/releases/tag/v10.5.3)** +- *2018.08.25*, **[v10.5.2](//github.com/coderaiser/cloudcmd/releases/tag/v10.5.2)** +- *2018.08.25*, **[v10.5.1](//github.com/coderaiser/cloudcmd/releases/tag/v10.5.1)** +- *2018.08.23*, **[v10.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v10.5.0)** +- *2018.07.18*, **[v10.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v10.4.1)** +- *2018.07.17*, **[v10.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v10.4.0)** +- *2018.07.02*, **[v10.3.2](//github.com/coderaiser/cloudcmd/releases/tag/v10.3.2)** +- *2018.06.25*, **[v10.3.1](//github.com/coderaiser/cloudcmd/releases/tag/v10.3.1)** +- *2018.06.22*, **[v10.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v10.3.0)** +- *2018.06.21*, **[v10.2.3](//github.com/coderaiser/cloudcmd/releases/tag/v10.2.3)** +- *2018.06.15*, **[v10.2.2](//github.com/coderaiser/cloudcmd/releases/tag/v10.2.2)** +- *2018.06.13*, **[v10.2.1](//github.com/coderaiser/cloudcmd/releases/tag/v10.2.1)** +- *2018.06.11*, **[v10.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v10.2.0)** +- *2018.06.09*, **[v10.1.2](//github.com/coderaiser/cloudcmd/releases/tag/v10.1.2)** +- *2018.06.08*, **[v10.1.1](//github.com/coderaiser/cloudcmd/releases/tag/v10.1.1)** +- *2018.06.07*, **[v10.1.0](//github.com/coderaiser/cloudcmd/releases/tag/v10.1.0)** +- *2018.06.04*, **[v10.0.3](//github.com/coderaiser/cloudcmd/releases/tag/v10.0.3)** +- *2018.05.29*, **[v10.0.2](//github.com/coderaiser/cloudcmd/releases/tag/v10.0.2)** +- *2018.05.29*, **[v10.0.1](//github.com/coderaiser/cloudcmd/releases/tag/v10.0.1)** +- *2018.05.25*, **[v10.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v10.0.0)** - *2018.05.24*, **[v9.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v9.6.0)** - *2018.05.15*, **[v9.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v9.5.0)** - *2018.05.08*, **[v9.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v9.4.0)** @@ -964,12 +1754,11 @@ Version history - *2012.07.11*, **[v0.1.1](//github.com/cloudcmd/archive/raw/master/cloudcmd-v0.1.1.zip)** - *2012.07.09*, **[v0.1.0](//github.com/cloudcmd/archive/raw/master/cloudcmd-v0.1.0.zip)** -Special Thanks ---------------- -- [Olena Zalitok](https://zalitok.github.io/ "Olena Zalitok") for **logo** and **favicon**. -- [TarZak](https://github.com/tarzak "TarZak") - - Russian and Ukrainian translations; - - config template and style; - - change order of directories and files; - - add ability do not hide path and header when files are scrolling; +## Special Thanks +- [Olena Zalitok](https://www.linkedin.com/in/ozalitok-ux-ui/ "Olena Zalitok") for **logo** and **favicon**. +- [TarZak](https://github.com/tarzak "TarZak") + - Russian and Ukrainian translations; + - config template and style; + - change order of directories and files; + - add ability to keep path and header when files are scrolling; diff --git a/LICENSE b/LICENSE index 37f32f80..a0d7436b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ (The MIT License) -Copyright (c) 2012-2018 Coderaiser +Copyright (c) 2012-2025 Coderaiser Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/README.md b/README.md index 26d355af..dfe8d8c6 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,33 @@ -# Cloud Commander v9.6.0 [![License][LicenseIMGURL]][LicenseURL] [![NPM version][NPMIMGURL]][NPMURL] [![Dependency Status][DependencyStatusIMGURL]][DependencyStatusURL] [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Now status][BuildAppveyorIMGURL]][BuildAppveyorURL] [![Package Quality][PackageQualityIMGURL]][PackageQualityURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] [![OpenCollective](https://opencollective.com/cloudcmd/backers/badge.svg)](#backers) [![OpenCollective](https://opencollective.com/cloudcmd/sponsors/badge.svg)](#sponsors) +# Cloud Commander v19.19.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] [![Deploy on InstaPods][DeployInstaPodsIMG]][DeployInstaPodsURL] -### [Main][MainURL] [Blog][BlogURL] Live([Heroku][HerokuURL], [Now][NowURL]) +### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] -[NPM_INFO_IMG]: https://nodei.co/npm/cloudcmd.png -[MainURL]: http://cloudcmd.io "Main" -[BlogURL]: http://blog.cloudcmd.io "Blog" -[HerokuURL]: http://cloudcmd.herokuapp.com/ "Heroku" -[NowURL]: https://cloudcmd.now.sh/ "Now" -[NPMURL]: https://npmjs.org/package/cloudcmd "npm" -[NPMIMGURL]: https://img.shields.io/npm/v/cloudcmd.svg?style=flat -[LicenseURL]: https://tldrlegal.com/license/mit-license "MIT License" -[LicenseIMGURL]: https://img.shields.io/badge/license-MIT-317BF9.svg?style=flat -[DependencyStatusURL]: https://david-dm.org/coderaiser/cloudcmd -[DependencyStatusIMGURL]: https://img.shields.io/david/coderaiser/cloudcmd.svg?style=flat -[BuildStatusURL]: https://travis-ci.org/coderaiser/cloudcmd "Build Status" -[BuildStatusIMGURL]: https://img.shields.io/travis/coderaiser/cloudcmd.svg?style=flat +[MainURL]: https://cloudcmd.io "Main" +[BlogURL]: https://blog.cloudcmd.io "Blog" +[SupportURL]: https://patreon.com/coderaiser "Patreon" +[DemoURL]: https://cloudcmd-zdp6.onrender.com +[NPM_INFO_IMG]: https://nodei.co/npm/cloudcmd.png +[BuildStatusURL]: https://github.com/coderaiser/cloudcmd/actions/workflows/nodejs.yml "Build Status" +[BuildStatusIMGURL]: https://github.com/coderaiser/cloudcmd/actions/workflows/nodejs.yml/badge.svg +[CodacyURL]: https://www.codacy.com/app/coderaiser/cloudcmd +[CodacyIMG]: https://api.codacy.com/project/badge/Grade/ddda78be780549ce8754f8d47a8c0e36 +[GitterURL]: https://gitter.im/cloudcmd/hello +[GitterIMGURL]: https://img.shields.io/gitter/room/coderaiser/cloudcmd.js.svg +[DeployURL]: https://heroku.com/deploy?template=https://github.com/coderaiser/cloudcmd "Deploy" +[DeployIMG]: https://www.herokucdn.com/deploy/button.png +[DeployInstaPodsIMG]: https://img.shields.io/badge/deploy%20on-InstaPods-blue +[DeployInstaPodsURL]: https://app.instapods.com/dashboard/pods/create?app=cloudcmd&ref=cloudcmd -[BuildAppveyorURL]: https://ci.appveyor.com/project/coderaiser/cloudcmd -[BuildAppveyorIMGURL]: https://ci.appveyor.com/api/projects/status/tse6sc8dxrqxqehi?svg=true +**Cloud Commander** a file manager for the web with console and editor. -[PackageQualityURL]: http://packagequality.com/#?package=cloudcmd "Package Quality" -[PackageQualityIMGURL]: http://packagequality.com/shield/cloudcmd.svg - -[CodacyURL]: https://www.codacy.com/app/coderaiser/cloudcmd -[CodacyIMG]: https://api.codacy.com/project/badge/Grade/ddda78be780549ce8754f8d47a8c0e36 - -[GitterURL]: https://gitter.im/cloudcmd/hello -[GitterIMGURL]: https://img.shields.io/gitter/room/coderaiser/cloudcmd.js.svg - -[DeployURL]: https://heroku.com/deploy?template=https://github.com/coderaiser/cloudcmd "Deploy" -[DeployIMG]: https://www.herokucdn.com/deploy/button.png - -**Cloud Commander** is an orthodox web file manager with console and editor. - -![Cloud Commander](http://cloudcmd.io/img/logo/cloudcmd.png "Cloud Commander") +![Cloud Commander](https://cloudcmd.io/img/logo/cloudcmd.png "Cloud Commander") ## Install ``` npm i cloudcmd -g ``` + ## Start For starting just type in console: @@ -52,7 +40,13 @@ cloudcmd Open url `http://localhost:8000` in browser. +### View + +You will see something similar to this. +![View](https://cloudcmd.io/img/screen/view.png "View") + ## Deploy + `Cloud Commander` could be easily deployed to [Heroku][DeployURL]. [![Deploy][DeployIMG]][DeployURL] @@ -76,33 +70,31 @@ npm i cloudcmd express socket.io -S And create `index.js`: ```js -const http = require('http'); -const cloudcmd = require('cloudcmd'); -const io = require('socket.io'); -const app = require('express')(); +import http from 'node:http'; +import {cloudcmd} from 'cloudcmd'; +import {Server} from 'socket.io'; +import express from 'express'; + +const app = express(); const port = 1337; -const prefix = '/cloudcmd'; +const prefix = '/'; const server = http.createServer(app); -const socket = io.listen(server, { - path: `${prefix}/socket.io` +const socket = new Server(server, { + path: `${prefix}socket.io`, }); const config = { - prefix // base URL or function which returns base URL (optional) + name: 'cloudcmd :)', }; -const plugins = [ - __dirname + '/plugin.js' -]; - const filePicker = { data: { FilePicker: { key: 'key', - } - } + }, + }, }; // override option from json/modules.json @@ -110,22 +102,40 @@ const modules = { filePicker, }; -app.use(cloudcmd({ - socket, // used by Config, Edit (optional) and Console (required) - config, // config data (optional) - plugins, // optional +const { + createConfigManager, + configPath, +} = cloudcmd; + +const configManager = createConfigManager({ + configPath, +}); + +app.use(prefix, cloudcmd({ + socket, // used by Config, Edit (optional) and Console (required) + config, // config data (optional) modules, // optional + configManager, // optional })); server.listen(port); ``` -Docker ---------------- +## Docker + +The docker images are provided for multiple architectures and types. The following list shows all existing images: + +| Architecture | Type | +|----------------|--------------| +| amd64 | linux | +| arm64 (arm/v8) | linux | +| amd64 | linux-alpine | +| arm64 (arm/v8) | linux-alpine | + `Cloud Commander` could be used as a [docker container](https://hub.docker.com/r/coderaiser/cloudcmd/ "Docker container") this way: ```sh -docker run -t --rm -v ~:/root -v /:/mnt/fs -p 8000:8000 coderaiser/cloudcmd +docker run -it --rm -v ~:/root -v /:/mnt/fs -w=/root -p 8000:8000 coderaiser/cloudcmd ``` Config would be read from home directory, hosts root file system would be mount to `/mnt/fs`, @@ -151,84 +161,19 @@ When you create this file run: docker-compose up ``` -Get involved ---------------- +## Documentation + +More documentation you can find on https://cloudcmd.io/. + +## Get involved There is a lot ways to be involved in `Cloud Commander` development: +- support project on patreon: https://patreon.com/coderaiser; - if you find a bug or got idea to share [create an issue](https://github.com/coderaiser/cloudcmd/issues/new "Create issue"); - if you fixed a bug, typo or implemented new feature [create pull request](https://github.com/coderaiser/cloudcmd/compare "Create pull request"); - if you know languages you can help with [site translations](https://github.com/coderaiser/cloudcmd/wiki "Cloud Commander community wiki"); -## Backers -Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/cloudcmd#backer)] - -[![](https://opencollective.com/cloudcmd/backer/0/avatar.svg)](https://opencollective.com/cloudcmd/backer/0/website) -[![](https://opencollective.com/cloudcmd/backer/1/avatar.svg)](https://opencollective.com/cloudcmd/backer/1/website) -[![](https://opencollective.com/cloudcmd/backer/2/avatar.svg)](https://opencollective.com/cloudcmd/backer/2/website) -[![](https://opencollective.com/cloudcmd/backer/3/avatar.svg)](https://opencollective.com/cloudcmd/backer/3/website) -[![](https://opencollective.com/cloudcmd/backer/4/avatar.svg)](https://opencollective.com/cloudcmd/backer/4/website) -[![](https://opencollective.com/cloudcmd/backer/5/avatar.svg)](https://opencollective.com/cloudcmd/backer/5/website) -[![](https://opencollective.com/cloudcmd/backer/6/avatar.svg)](https://opencollective.com/cloudcmd/backer/6/website) -[![](https://opencollective.com/cloudcmd/backer/7/avatar.svg)](https://opencollective.com/cloudcmd/backer/7/website) -[![](https://opencollective.com/cloudcmd/backer/8/avatar.svg)](https://opencollective.com/cloudcmd/backer/8/website) -[![](https://opencollective.com/cloudcmd/backer/9/avatar.svg)](https://opencollective.com/cloudcmd/backer/9/website) -[![](https://opencollective.com/cloudcmd/backer/10/avatar.svg)](https://opencollective.com/cloudcmd/backer/10/website) -[![](https://opencollective.com/cloudcmd/backer/11/avatar.svg)](https://opencollective.com/cloudcmd/backer/11/website) -[![](https://opencollective.com/cloudcmd/backer/12/avatar.svg)](https://opencollective.com/cloudcmd/backer/12/website) -[![](https://opencollective.com/cloudcmd/backer/13/avatar.svg)](https://opencollective.com/cloudcmd/backer/13/website) -[![](https://opencollective.com/cloudcmd/backer/14/avatar.svg)](https://opencollective.com/cloudcmd/backer/14/website) -[![](https://opencollective.com/cloudcmd/backer/15/avatar.svg)](https://opencollective.com/cloudcmd/backer/15/website) -[![](https://opencollective.com/cloudcmd/backer/16/avatar.svg)](https://opencollective.com/cloudcmd/backer/16/website) -[![](https://opencollective.com/cloudcmd/backer/17/avatar.svg)](https://opencollective.com/cloudcmd/backer/17/website) -[![](https://opencollective.com/cloudcmd/backer/18/avatar.svg)](https://opencollective.com/cloudcmd/backer/18/website) -[![](https://opencollective.com/cloudcmd/backer/19/avatar.svg)](https://opencollective.com/cloudcmd/backer/19/website) -[![](https://opencollective.com/cloudcmd/backer/20/avatar.svg)](https://opencollective.com/cloudcmd/backer/20/website) -[![](https://opencollective.com/cloudcmd/backer/21/avatar.svg)](https://opencollective.com/cloudcmd/backer/21/website) -[![](https://opencollective.com/cloudcmd/backer/22/avatar.svg)](https://opencollective.com/cloudcmd/backer/22/website) -[![](https://opencollective.com/cloudcmd/backer/23/avatar.svg)](https://opencollective.com/cloudcmd/backer/23/website) -[![](https://opencollective.com/cloudcmd/backer/24/avatar.svg)](https://opencollective.com/cloudcmd/backer/24/website) -[![](https://opencollective.com/cloudcmd/backer/25/avatar.svg)](https://opencollective.com/cloudcmd/backer/25/website) -[![](https://opencollective.com/cloudcmd/backer/26/avatar.svg)](https://opencollective.com/cloudcmd/backer/26/website) -[![](https://opencollective.com/cloudcmd/backer/27/avatar.svg)](https://opencollective.com/cloudcmd/backer/27/website) -[![](https://opencollective.com/cloudcmd/backer/28/avatar.svg)](https://opencollective.com/cloudcmd/backer/28/website) -[![](https://opencollective.com/cloudcmd/backer/29/avatar.svg)](https://opencollective.com/cloudcmd/backer/29/website) - -## Sponsors -Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/cloudcmd#sponsor)] - -[![](https://opencollective.com/cloudcmd/sponsor/0/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/0/website) -[![](https://opencollective.com/cloudcmd/sponsor/1/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/1/website) -[![](https://opencollective.com/cloudcmd/sponsor/2/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/2/website) -[![](https://opencollective.com/cloudcmd/sponsor/3/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/3/website) -[![](https://opencollective.com/cloudcmd/sponsor/4/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/4/website) -[![](https://opencollective.com/cloudcmd/sponsor/5/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/5/website) -[![](https://opencollective.com/cloudcmd/sponsor/6/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/6/website) -[![](https://opencollective.com/cloudcmd/sponsor/7/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/7/website) -[![](https://opencollective.com/cloudcmd/sponsor/8/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/8/website) -[![](https://opencollective.com/cloudcmd/sponsor/9/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/9/website) -[![](https://opencollective.com/cloudcmd/sponsor/10/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/10/website) -[![](https://opencollective.com/cloudcmd/sponsor/11/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/11/website) -[![](https://opencollective.com/cloudcmd/sponsor/12/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/12/website) -[![](https://opencollective.com/cloudcmd/sponsor/13/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/13/website) -[![](https://opencollective.com/cloudcmd/sponsor/14/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/14/website) -[![](https://opencollective.com/cloudcmd/sponsor/15/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/15/website) -[![](https://opencollective.com/cloudcmd/sponsor/16/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/16/website) -[![](https://opencollective.com/cloudcmd/sponsor/17/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/17/website) -[![](https://opencollective.com/cloudcmd/sponsor/18/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/18/website) -[![](https://opencollective.com/cloudcmd/sponsor/19/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/19/website) -[![](https://opencollective.com/cloudcmd/sponsor/20/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/20/website) -[![](https://opencollective.com/cloudcmd/sponsor/21/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/21/website) -[![](https://opencollective.com/cloudcmd/sponsor/22/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/22/website) -[![](https://opencollective.com/cloudcmd/sponsor/23/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/23/website) -[![](https://opencollective.com/cloudcmd/sponsor/24/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/24/website) -[![](https://opencollective.com/cloudcmd/sponsor/25/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/25/website) -[![](https://opencollective.com/cloudcmd/sponsor/26/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/26/website) -[![](https://opencollective.com/cloudcmd/sponsor/27/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/27/website) -[![](https://opencollective.com/cloudcmd/sponsor/28/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/28/website) -[![](https://opencollective.com/cloudcmd/sponsor/29/avatar.svg)](https://opencollective.com/cloudcmd/sponsor/29/website) - ## License MIT - diff --git a/app.json b/app.json index 9fe7b37d..3dbe05a0 100644 --- a/app.json +++ b/app.json @@ -11,6 +11,7 @@ "folder", "orthodox" ], + "stack": "heroku-18", "env": { "NPM_CONFIG_PRODUCTION": { "description": "Keep false to install devDependencies and build frontend", @@ -32,6 +33,11 @@ "value": "false", "required": false }, + "CLOUDCMD_CONFIG_AUTH": { + "description": "disable auth change in config dialog", + "value": "false", + "required": false + }, "CLOUDCMD_CONSOLE": { "description": "enable console", "value": "true", @@ -52,9 +58,9 @@ "value": "gritty", "required": false }, - "CLOUDCMD_CONFIG_DIALOG": { - "description": "show config dialog", - "value": "false", + "CLOUDCMD_TERMINAL_COMMAND": { + "description": "set command to run in terminal (shell by default)", + "value": "", "required": false }, "CLOUDCMD_ONE_FILE_PANEL": { @@ -92,16 +98,6 @@ "value": "", "required": false }, - "CLOUDCMD_ONE_PANEL_MODE": { - "description": "set one panel mode (deprecated use CLOUDCMD_ONE_FILE_PANEL)", - "value": "false", - "required": false - }, - "CLOUDCMD_ONE_FILE_PANEL": { - "description": "set one panel mode", - "value": "false", - "required": false - }, "CLOUDCMD_VIM": { "description": "enable vim hot keys", "value": "false", @@ -112,6 +108,11 @@ "value": "name-size-date-owner-mode", "required": false }, + "CLOUDCMD_OPEN": { + "description": "open web browser when server started", + "value": "false", + "required": false + }, "CLOUDCMD_CONFIRM_COPY": { "description": "confirm copy", "value": "true", @@ -122,9 +123,39 @@ "value": "true", "required": false }, - "CLOUDCMD_CACHE": { - "description": "enable cache", - "value": "true", + "CLOUDCMD_SHOW_FILE_NAME": { + "description": "show file name in view and edit", + "value": "false", + "required": false + }, + "CLOUDCMD_EXPORT": { + "description": "enable export of config through a server", + "value": "false", + "required": false + }, + "CLOUDCMD_EXPORT_TOKEN": { + "description": "authorization token used by export server", + "value": "root", + "required": false + }, + "CLOUDCMD_IMPORT": { + "description": "enable import of config", + "value": "false", + "required": false + }, + "CLOUDCMD_IMPORT_TOKEN": { + "description": "authorization token used to connect to export server", + "value": "root", + "required": false + }, + "CLOUDCMD_IMPORT_URL": { + "description": "url of an import server", + "value": "http://localhost:8000", + "required": false + }, + "CLOUDCMD_IMPORT_LISTEN": { + "description": "enable listen on config updates from import server", + "value": "false", "required": false } } diff --git a/bin/cloudcmd.js b/bin/cloudcmd.js index df5f877b..6ca6716c 100755 --- a/bin/cloudcmd.js +++ b/bin/cloudcmd.js @@ -1,26 +1,48 @@ #!/usr/bin/env node -'use strict'; +import process from 'node:process'; +import {promisify} from 'node:util'; +import {tryToCatch} from 'try-to-catch'; +import parse from 'yargs-parser'; +import exit from '../server/exit.js'; +import {createConfig, configPath} from '../server/config.js'; +import * as env from '../server/env.js'; +import prefixer from '../server/prefixer.js'; +import * as validate from '../server/validate.js'; +import Info from '../package.json' with { + type: 'json', +}; -const util = require('util'); -const noop = () => {}; +process.on('unhandledRejection', exit); -const Info = require('../package'); -const DIR_SERVER = '../server/'; - -const exit = require(DIR_SERVER + 'exit'); -const config = require(DIR_SERVER + 'config'); -const env = require(DIR_SERVER + 'env'); +const isUndefined = (a) => typeof a === 'undefined'; const choose = (a, b) => { - if (!a) + if (isUndefined(a)) return b; return a; }; -const argv = process.argv; -const args = require('minimist')(argv.slice(2), { +const config = createConfig({ + configPath, +}); + +const maybeRoot = (a) => { + if (a === '.') + return process.cwd(); + + return a; +}; + +const yargsOptions = { + configuration: { + 'strip-aliased': true, + 'strip-dashed': true, + }, + coerce: { + root: maybeRoot, + }, string: [ 'name', 'port', @@ -31,77 +53,109 @@ const args = require('minimist')(argv.slice(2), { 'packer', 'root', 'prefix', + 'prefix-socket', 'terminal-path', + 'terminal-command', 'columns', + 'menu', + 'theme', + 'import-url', + 'import-token', + 'export-token', + 'dropbox-token', ], boolean: [ 'auth', - 'cache', 'repl', 'save', 'server', 'online', 'open', - 'progress', 'config-dialog', + 'config-auth', + 'config-port', 'console', 'sync-console-path', 'contact', 'terminal', + 'terminal-auto-restart', 'one-file-panel', - 'one-panel-mode', 'confirm-copy', 'confirm-move', - 'html-dialogs', 'show-config', + 'show-dot-files', + 'show-file-name', 'vim', 'keys-panel', + 'color', + 'export', + 'import', + 'import-listen', + 'log', + 'zip', + 'dropbox', ], default: { - server : true, - name : choose(env('name'), config('name')), - auth : choose(env('auth'), config('auth')), - cache : choose(env.bool('cache'), config('cache')), - port : config('port'), - online : config('online'), - open : config('open'), - editor : env('editor') || config('editor'), - packer : config('packer') || 'tar', - zip : config('zip'), - username : env('username') || config('username'), - root : choose(env('root'), config('root')), - prefix : config('prefix'), - progress : config('progress'), - console : choose(env.bool('console'), config('console')), - contact : choose(env.bool('contact'), config('contact')), - terminal : choose(env.bool('terminal'), config('terminal')), + 'server': true, + 'name': choose(env.parse('name'), config('name')), + 'auth': choose(env.bool('auth'), config('auth')), + 'port': config('port'), + 'online': config('online'), + 'open': choose(env.bool('open'), config('open')), + 'editor': env.parse('editor') || config('editor'), + 'menu': env.parse('menu') || config('menu'), + 'packer': config('packer') || 'tar', + 'zip': config('zip'), + 'username': env.parse('username') || config('username'), + 'root': choose(env.parse('root'), config('root')), + 'prefix': choose(env.parse('prefix'), config('prefix')), + 'console': choose(env.bool('console'), config('console')), + 'contact': choose(env.bool('contact'), config('contact')), + 'terminal': choose(env.bool('terminal'), config('terminal')), + 'columns': env.parse('columns') || config('columns') || '', + 'theme': env.parse('theme') || config('theme') || '', + 'vim': choose(env.bool('vim'), config('vim')), + 'log': choose(env.bool('log'), config('log')), + 'import-url': env.parse('import_url') || config('importUrl'), + 'import-listen': choose(env.bool('import_listen'), config('importListen')), + 'import': choose(env.bool('import'), config('import')), + 'export': choose(env.bool('export'), config('export')), + + 'prefix-socket': config('prefixSocket'), + 'show-dot-files': choose(env.bool('show_dot_files'), config('showDotFiles')), + 'show-file-name': choose(env.bool('show_file_name'), config('showFileName')), 'sync-console-path': choose(env.bool('sync_console_path'), config('syncConsolePath')), 'config-dialog': choose(env.bool('config_dialog'), config('configDialog')), - 'terminal-path': env('terminal_path') || config('terminalPath'), - 'one-file-panel': choose(env.bool('one_file_panel'), config('onePanelMode')), - 'one-panel-mode': '', + 'config-auth': choose(env.bool('config_auth'), config('configAuth')), + 'config-port': choose(env.bool('config_port'), config('configPort')), + 'terminal-path': env.parse('terminal_path') || config('terminalPath'), + 'terminal-command': env.parse('terminal_command') || config('terminalCommand'), + 'terminal-auto-restart': choose(env.bool('terminal_auto_restart'), config('terminalAutoRestart')), + 'one-file-panel': choose(env.bool('one_file_panel'), config('oneFilePanel')), 'confirm-copy': choose(env.bool('confirm_copy'), config('confirmCopy')), 'confirm-move': choose(env.bool('confirm_move'), config('confirmMove')), - 'html-dialogs': config('htmlDialogs'), - 'vim': choose(env.bool('vim'), config('vim')), - 'columns': env('columns') || config('columns') || '', 'keys-panel': env.bool('keys_panel') || config('keysPanel'), + 'import-token': env.parse('import_token') || config('importToken'), + 'export-token': env.parse('export_token') || config('exportToken'), + + 'dropbox': config('dropbox'), + 'dropbox-token': config('dropboxToken') || '', }, alias: { - v: 'version', - h: 'help', - p: 'password', - o: 'online', - u: 'username', - s: 'save', - a: 'auth', - c: 'config' + version: 'v', + help: 'h', + password: 'p', + online: 'o', + username: 'u', + save: 's', + auth: 'a', + config: 'c', }, - unknown: (cmd) => { - exit('\'%s\' is not a cloudcmd option. See \'cloudcmd --help\'.', cmd); - } -}); +}; + +const {argv} = process; +const args = parse(argv.slice(2), yargsOptions); if (args.version) version(); @@ -110,91 +164,112 @@ else if (args.help) else main(); -function main() { - if (args.repl) - repl(); +async function main() { + const {validateArgs} = await import('@putout/cli-validate-args'); - checkUpdate(); + const error = await validateArgs(args, [ + ...yargsOptions.boolean, + ...yargsOptions.string, + ]); + + if (error) + return exit(error); + + if (args.repl) + await repl(); + + validate.columns(args.columns); + validate.theme(args.theme); port(args.port); config('name', args.name); config('auth', args.auth); - config('cache', args.cache); config('online', args.online); config('open', args.open); config('username', args.username); - config('progress', args.progress); config('console', args.console); - config('syncConsolePath', args['sync-console-path']); + config('syncConsolePath', args.syncConsolePath); + config('showDotFiles', args.showDotFiles); + config('showFileName', args.showFileName); config('contact', args.contact); config('terminal', args.terminal); - config('terminalPath', args['terminal-path']); + config('terminalPath', args.terminalPath); + config('terminalCommand', args.terminalCommand); + config('terminalAutoRestart', args.terminalAutoRestart); config('editor', args.editor); - config('prefix', args.prefix); - config('root', args.root); + config('menu', args.menu); + config('prefix', prefixer(args.prefix)); + config('prefixSocket', prefixer(args.prefixSocket)); + config('root', args.root || '/'); config('vim', args.vim); + config('theme', args.theme); config('columns', args.columns); - config('htmlDialogs', args['html-dialogs']); - config('confirmCopy', args['confirm-copy']); - config('confirmMove', args['confirm-move']); - config('onePanelMode', args['one-file-panel']); - config('oneFilePanel', args['one-file-panel']); - config('configDialog', args['config-dialog']); - config('keysPanel', args['keys-panel']); + config('log', args.log); + config('confirmCopy', args.confirmCopy); + config('confirmMove', args.confirmMove); + config('oneFilePanel', args.oneFilePanel); + config('configDialog', args.configDialog); + config('configAuth', args.configAuth); + config('configPort', args.configPort); + config('keysPanel', args.keysPanel); + config('export', args.export); + config('exportToken', args.exportToken); + config('import', args.import); + config('importToken', args.importToken); + config('importListen', args.importListen); + config('importUrl', args.importUrl); - if (args['one-panel-mode']) { - util.deprecate(noop, `cloudcmd --one-panel-mode: deprecated, use --one-file-panel instead`, 'DP0001')(); - config('oneFilePanel', true); - config('onePanelMode', true); - } else if (typeof args['one-panel-mode'] === 'boolean') { - util.deprecate(noop, `cloudcmd --no-one-panel-mode: deprecated, use --no-one-file-panel instead`, 'DP0001')(); - config('oneFilePanel', false); - config('onePanelMode', false); - } + config('dropbox', args.dropbox); + config('dropboxToken', args.dropboxToken); - if (env('one_panel_mode')) { - util.deprecate(noop, `CLOUDCMD_ONE_PANEL_MODE deprecated, use CLOUDCMD_ONE_FILE_PANEL instead`, 'DP0001')(); - config('oneFilePanel', env.bool('one_panel_mode')); - config('onePanelMode', env.bool('one_panel_mode')); - } - - readConfig(args.config); + await readConfig(args.config); const options = { - root: args.root || '/', /* --no-root */ - editor: args.editor, - packer: args.packer, - prefix: args.prefix || '', /* --no-prefix */ - columns: args.columns, + root: config('root'), + editor: config('editor'), + packer: config('packer'), + prefix: config('prefix'), + prefixSocket: config('prefixSocket'), + columns: config('columns'), + theme: config('theme'), + menu: config('menu'), }; - const password = env('password') || args.password; + const password = env.parse('password') || args.password; if (password) - config('password', getPassword(password)); + config('password', await getPassword(password)); - validateRoot(options.root); + validateRoot(options.root, config); - if (args['show-config']) - showConfig(); + if (args.showConfig) + await showConfig(); - if (!args.save) - return start(options); + const {distributeImport} = await import('../server/distribute/import.js'); + const importConfig = promisify(distributeImport); - config.save(() => { - start(options); - }); + await start(options, config); + + if (args.save) + config.write(); + + await tryToCatch(checkUpdate); + await importConfig(config); } -function validateRoot(root) { - const validate = require(DIR_SERVER + 'validate'); - validate.root(root, console.log); +function validateRoot(root, config) { + validate.root(root, config); + + if (root === '/') + return; + + if (config('log')) + console.log(`root: ${root}`); } -function getPassword(password) { - const criton = require('criton'); - +async function getPassword(password) { + const {default: criton} = await import('criton'); return criton(password, config('algo')); } @@ -202,11 +277,12 @@ function version() { console.log('v' + Info.version); } -function start(config) { - const SERVER = DIR_SERVER + 'server'; +async function start(options, config) { + if (!args.server) + return; - if (args.server) - require(SERVER)(config); + const {default: server} = await import('../server/server.js'); + server(options, config); } function port(arg) { @@ -218,40 +294,38 @@ function port(arg) { exit('cloudcmd --port: should be a number'); } -function showConfig() { - const show = require('../server/show-config'); - const data = show(config('*')); +async function showConfig() { + const {showConfig} = await import('../server/show-config.js'); + const data = showConfig(config('*')); console.log(data); } -function readConfig(name) { +async function readConfig(name) { if (!name) return; - const fs = require('fs'); - const tryCatch = require('try-catch'); - const jju = require('jju'); - const forEachKey = require('for-each-key'); + const {default: forEachKey} = await import('for-each-key'); - const readjsonSync = (name) => jju.parse(fs.readFileSync(name, 'utf8'), { - mode: 'json' + const data = await import(name, { + with: { + type: 'json', + }, }); - const result = tryCatch(readjsonSync, name); - const error = result[0]; - const data = result[1]; - - if (error) - return exit(error.message); - forEachKey(config, data); } -function help() { - const bin = require('../json/help'); - const forEachKey = require('for-each-key'); - const currify = require('currify/legacy'); +async function help() { + const {default: bin} = await import('../json/help.json', { + with: { + type: 'json', + }, + }); + + const {default: forEachKey} = await import('for-each-key'); + const {default: currify} = await import('currify'); + const usage = 'Usage: cloudcmd [options]'; const url = Info.homepage; const log = currify((a, b, c) => console.log(a, b, c)); @@ -262,36 +336,27 @@ function help() { console.log('\nGeneral help using Cloud Commander: <%s>', url); } -function repl() { +async function repl() { console.log('REPL mode enabled (telnet localhost 1337)'); - require(DIR_SERVER + 'repl'); + await import('../server/repl.js'); } -function checkUpdate() { - const load = require('package-json'); - const noop = () => {}; +async function checkUpdate() { + const {default: load} = await import('package-json'); + const {version} = await load(Info.name, 'latest'); - load(Info.name, 'latest') - .then(showUpdateInfo) - .catch(noop); + await showUpdateInfo(version); } -function showUpdateInfo(data) { - const version = data.version; +async function showUpdateInfo(version) { + if (version === Info.version) + return; - if (version !== Info.version) { - const chalk = require('chalk'); - const rendy = require('rendy'); - - const latest = rendy('update available: {{ latest }}', { - latest: chalk.green.bold('v' + version), - }); - - const current = chalk.dim(rendy('(current: v{{ current }})', { - current: Info.version - })); - - console.log('%s %s', latest, current); - } + const {default: chalk} = await import('chalk'); + + const latestVersion = chalk.green.bold(`v${version}`); + const latest = `update available: ${latestVersion}`; + const current = chalk.dim(`(current: v${Info.version})`); + + console.log('%s %s', latest, current); } - diff --git a/bin/cloudcmd.spec.js b/bin/cloudcmd.spec.js new file mode 100644 index 00000000..d09541b9 --- /dev/null +++ b/bin/cloudcmd.spec.js @@ -0,0 +1,26 @@ +import {spawnSync} from 'node:child_process'; +import {test} from 'supertape'; +import info from '../package.json' with { + type: 'json', +}; + +const cliPath = new URL('cloudcmd.js', import.meta.url).pathname; + +test('cloudcmd: bin: cli: -h', (t) => { + const {stdout} = spawnSync(cliPath, ['-h'], { + encoding: 'utf8', + }); + + t.match(stdout, `Options`); + t.end(); +}); + +test('cloudcmd: bin: cli: -v', (t) => { + const {version} = info; + const {stdout} = spawnSync(cliPath, ['-v'], { + encoding: 'utf8', + }); + + t.match(stdout, `v${version}`); + t.end(); +}); diff --git a/bin/release.js b/bin/release.js index 60a2b4ec..86e1d714 100755 --- a/bin/release.js +++ b/bin/release.js @@ -1,67 +1,72 @@ #!/usr/bin/env node -'use strict'; +import {promisify} from 'node:util'; +import process from 'node:process'; +import {tryToCatch} from 'try-to-catch'; +import minor from 'minor'; +import _place from 'place'; +import {rendy} from 'rendy'; +import shortdate from 'shortdate'; +import Info from '../package.json' with { + type: 'json', +}; -const DIR = '../'; -const Info = require(DIR + 'package'); +const place = promisify(_place); -const minor = require('minor'); -const place = require('place'); -const rendy = require('rendy'); -const shortdate = require('shortdate'); +await main(); -const ERROR = Error('ERROR: version is missing. release --patch|--minor|--major'); - -main((error) => { +async function main() { + const history = '## Version history\n\n'; + const link = '//github.com/coderaiser/cloudcmd/releases/tag/'; + + const template = '- ' + + '*{{ date }}*, ' + + '**[v{{ version }}]' + + '(' + + link + + 'v{{ version }})**\n'; + + const {version} = Info; + + const [error, versionNew] = await tryToCatch(cl); + if (error) - console.error(error.message); -}); - -function main(callback) { - const history = 'Version history\n---------------\n'; - const link = '//github.com/coderaiser/cloudcmd/releases/tag/'; - const template = '- *{{ date }}*, ' + - '**[v{{ version }}]' + - '(' + link + 'v{{ version }})**\n'; + return console.error(error); - const version = Info.version; + await replaceVersion('README.md', version, versionNew); + await replaceVersion('HELP.md', version, versionNew); - cl((error, versionNew) => { - if (error) - return callback(error); - - replaceVersion('README.md', version, versionNew, callback); - replaceVersion('HELP.md', version, versionNew, function() { - const historyNew = history + rendy(template, { - date : shortdate(), - version : versionNew - }); - - replaceVersion('HELP.md', history, historyNew, callback); + const historyNew = history + + rendy(template, { + date: shortdate(), + version: versionNew, }); - }); + + await replaceVersion('HELP.md', history, historyNew); } -function replaceVersion(name, version, versionNew, callback) { - place(name, version, versionNew, (error) => { - if (error) - return callback(error); - - callback(null, 'done: ' + name); - }); +async function replaceVersion(name, version, versionNew) { + const [error] = await tryToCatch(place, name, version, versionNew); + + if (error) + return console.error(error); + + console.log(`done: ${name}`); } -function cl(callback) { - const argv = process.argv; +async function cl() { + const {argv} = process; const length = argv.length - 1; const last = process.argv[length]; const regExp = /^--(major|minor|patch)$/; const [, match] = last.match(regExp) || []; - if (!regExp.test(last)) - return callback(ERROR); + console.log(last); - callback(null, getVersionNew(last, match)); + if (!regExp.test(last)) + throw Error('ERROR: version is missing. release --patch|--minor|--major'); + + return getVersionNew(last, match); } function getVersionNew(last, match) { @@ -70,4 +75,3 @@ function getVersionNew(last, match) { return last.substr(3); } - diff --git a/bower.json b/bower.json deleted file mode 100644 index 97c5524b..00000000 --- a/bower.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "cloudcmd", - "homepage": "https://github.com/coderaiser/cloudcmd", - "authors": [ - "coderaiser " - ], - "description": "orthodox web file manager with console and editor", - "main": "bin/cloudcmd.js", - "keywords": [ - "console", - "editor", - "file", - "file manager", - "folder", - "orthodox", - "view", - "copy", - "rename", - "move", - "delete", - "file operation" - ], - "license": "MIT", - "private": true, - "ignore": [ - "node_modules", - "modules", - "test" - ], - "dependencies": { - "domtokenlist-shim": "~1.1.0", - "olark": "^1.0.0", - "jquery": "3.3.1", - "fancybox": "^2.1.6" - } -} diff --git a/client/client.js b/client/client.js index 457187cc..a0e3cb07 100644 --- a/client/client.js +++ b/client/client.js @@ -1,64 +1,59 @@ -'use strict'; - -/* global Util, DOM */ - -const itype = require('itype/legacy'); -const Emitify = require('emitify/legacy'); -const inherits = require('inherits'); -const rendy = require('rendy/legacy'); -const exec = require('execon'); -const Images = require('./dom/images'); -const join = require('join-io/www/join'); -const jonny = require('jonny/legacy'); -const currify = require('currify/legacy'); - -const bind = (f, ...a) => () => f(...a); -const noop = () => {}; - -const { +import process from 'node:process'; +import Emitify from 'emitify'; +import inherits from 'inherits'; +import {rendy} from 'rendy'; +import load from 'load.js'; +import {tryToCatch} from 'try-to-catch'; +import {addSlashToEnd} from 'format-io'; +import pascalCase from 'just-pascal-case'; +import currify from 'currify'; +import { apiURL, formatMsg, buildFromJSON, -} = require('../common/cloudfunc'); +} from '#common/cloudfunc'; +import * as Images from '#dom/images'; +import {unregisterSW} from './sw/register.js'; +import {getJsonFromFileTable} from './get-json-from-file-table.js'; +import {Key} from './key/index.js'; +import {loadModule} from './load-module.js'; -/* global Util, DOM */ +const noJS = (a) => a.replace(/.js$/, ''); + +const isDev = process.env.NODE_ENV === 'development'; inherits(CloudCmdProto, Emitify); -module.exports = new CloudCmdProto(Util, DOM); +export const createCloudCmd = ({DOM, Listeners}) => { + return new CloudCmdProto({ + DOM, + Listeners, + }); +}; -function CloudCmdProto(Util, DOM) { - let Key; - let Debug; - let Listeners; - - const log = (str) => { - if (!Debug) - return; - - console.log(str); - }; - +load.addErrorListener((e, src) => { + const msg = `file ${src} could not be loaded`; + Images.show.error(msg); +}); + +function CloudCmdProto({DOM, Listeners}) { Emitify.call(this); const CloudCmd = this; const Info = DOM.CurrentInfo; - const Storage = DOM.Storage; - const Files = DOM.Files; - this.log = log; - this.PREFIX = ''; - this.PREFIX_URL = ''; - this.DIRCLIENT = '/dist/'; - this.DIRCLIENT_MODULES = this.DIRCLIENT + 'modules/'; + const {Storage, Files} = DOM; - this.MIN_ONE_PANEL_WIDTH = 1155; - this.HOST = location.origin || - location.protocol + '//' + location.host; - - const TITLE = 'Cloud Commander'; - this.TITLE = TITLE; + this.log = () => { + if (!isDev) + return; + }; + this.prefix = ''; + this.prefixSocket = ''; + this.prefixURL = ''; + this.MIN_ONE_PANEL_WIDTH = DOM.getCSSVar('min-one-panel-width'); + this.HOST = location.origin || location.protocol + '//' + location.host; this.sort = { left: 'name', right: 'name', @@ -69,143 +64,51 @@ function CloudCmdProto(Util, DOM) { right: 'asc', }; - log.enable = () => { - Debug = true; - }; - - log.disable = () => { - Debug = false; - }; - - const kebabToCamelCase = Util.kebabToCamelCase; - - /** - * Функция привязываеться ко всем ссылкам и - * загружает содержимое каталогов - * - * @param params - { - * paramLink - ссылка - * needRefresh - необходимость обязательной загрузки данных с сервера - * panel - * } - * @param callback - */ - this.loadDir = (params, callback) => { - const p = params; - - const refresh = p.isRefresh; - const panel = p.panel; - const history = p.history; - const noCurrent = p.noCurrent; - const currentName = p.currentName; + this.changeDir = async (path, overrides = {}) => { + const { + isRefresh, + panel, + history = true, + noCurrent, + currentName, + } = overrides; + const refresh = isRefresh; let panelChanged; - if (!noCurrent) - if (panel && panel !== Info.panel) { - DOM.changePanel(); - panelChanged = true; - } + + if (!noCurrent && panel && panel !== Info.panel) { + DOM.changePanel(); + panelChanged = true; + } let imgPosition; + if (panelChanged || refresh || !history) imgPosition = 'top'; Images.show.load(imgPosition, panel); /* загружаем содержимое каталога */ - ajaxLoad(p.path, { + await ajaxLoad(addSlashToEnd(path), { refresh, history, noCurrent, currentName, - }, panel, callback); + showDotFiles: CloudCmd.config('showDotFiles'), + }, panel); }; - /** - * function load modules - * @params = {name, path, func, dobefore, arg} - */ - function loadModule(params) { - if (!params) - return; - - let path = params.path; - const name = params.name || path && kebabToCamelCase(path); - const func = params.func; - const funcName = params.funcName; - const doBefore = params.dobefore; - - const isContain = /\.js/.test(path); - - if (!isContain) - path += '.js'; - - if (CloudCmd[name]) - return; - - CloudCmd[name] = (...args) => { - const prefix = CloudCmd.PREFIX; - const pathFull = prefix + CloudCmd.DIRCLIENT_MODULES + path; - - exec(doBefore); - - const done = (error) => { - const Proto = CloudCmd[name]; - - if (error || !itype.function(Proto)) - return; - - CloudCmd[name] = applyConstructor(Proto, args); - }; - - return DOM.load.js(pathFull, func || done); - }; - - CloudCmd[name][funcName] = CloudCmd[name]; - } - - /* - * apply arguemnts to constructor - * - * @param constructor - * @param args - */ - function applyConstructor(constructor, args) { - const F = function () { - return constructor.apply(this, args); - }; - - F.prototype = constructor.prototype; - return new F(); - } - /** * Конструктор CloudClient, который * выполняет весь функционал по * инициализации */ - this.init = (prefix, config) => { - const func = bind(exec.parallel, [ - initModules, - baseInit, - loadPlugins, - loadStyle, - exec.with(CloudCmd.route, location.hash), - ], noop); - - const funcBefore = (callback) => { - const src = prefix + '/join:' + [ - CloudCmd.DIRCLIENT_MODULES + 'polyfill.js', - '/modules/domtokenlist-shim/dist/domtokenlist.min.js', - ].join(':'); - - DOM.loadJquery(() => { - DOM.load.js(src, callback); - }); - }; - - CloudCmd.PREFIX = prefix; - CloudCmd.PREFIX_URL = prefix + apiURL; + this.init = async (prefix, config) => { + CloudCmd.prefix = prefix; + CloudCmd.prefixURL = `${prefix}${apiURL}`; + CloudCmd.prefixSocket = config.prefixSocket; + CloudCmd.DIR_DIST = `${prefix}/dist`; + CloudCmd.DIR_MODULES = `${this.DIR_DIST}/modules`; CloudCmd.config = (key) => config[key]; CloudCmd.config.if = currify((key, fn, a) => config[key] && fn(a)); @@ -214,46 +117,22 @@ function CloudCmdProto(Util, DOM) { * should be called from config.js only * after successful update on server */ - if (key === 'password') return; config[key] = value; }; - DOM.Storage.setAllowed(CloudCmd.config('localStorage')); - - if (config.onePanelMode) + if (config.oneFilePanel) CloudCmd.MIN_ONE_PANEL_WIDTH = Infinity; - exec.if(document.body.scrollIntoViewIfNeeded, func, funcBefore); - }; - - function loadStyle(callback) { - const prefix = CloudCmd.PREFIX; - const plugins = prefix + '/dist/cloudcmd.common.css'; + if (!document.body.scrollIntoViewIfNeeded) + await load.js(`${CloudCmd.DIR_MODULES}/polyfill.js`); - DOM.load.css(plugins, callback); - } - - function loadPlugins(callback) { - const prefix = CloudCmd.PREFIX; - const plugins = prefix + '/plugins.js'; + await initModules(); + await baseInit(); - DOM.load.js(plugins, callback); - } - - this.join = (urls) => { - const prefix = CloudCmd.PREFIX; - - if (!Array.isArray(urls)) - throw Error('urls should be array!'); - - const noPrefixUrls = urls.map((url) => { - return url.replace(prefix, ''); - }); - - return prefix + join(noPrefixUrls); + CloudCmd.route(location.hash); }; this.route = (path) => { @@ -263,91 +142,87 @@ function CloudCmdProto(Util, DOM) { return; const [kebabModule] = query; - const module = kebabToCamelCase(kebabModule.slice(1)); + const module = noJS(pascalCase(kebabModule.slice(1))); - const file = query[1]; + const [, file] = query; const current = DOM.getCurrentByName(file); if (file && !current) { const msg = formatMsg('set current file', file, 'error'); CloudCmd.log(msg); + return; } DOM.setCurrentFile(current); - CloudCmd.execFromModule(module, 'show'); }; - this.logOut = () => { - const url = CloudCmd.PREFIX + '/logout'; + this.logOut = async () => { + const url = CloudCmd.prefix + '/logout'; const error = () => document.location.reload(); + const {prefix} = CloudCmd; - DOM.load.ajax({url, error}); + await DOM.Storage.clear(); + unregisterSW(prefix); + DOM.load.ajax({ + url, + error, + }); }; - function initModules(callback) { - exec.if(CloudCmd.Key, () => { - Key = new CloudCmd.Key(); - CloudCmd.Key = Key; - Key.bind(); - }, (func) => { - /* привязываем клавиши к функциям */ - const path = 'key.js'; - - loadModule({ - path, - func - }); - }); + const initModules = async () => { + CloudCmd.Key = Key; + CloudCmd.Key.bind(); - Files.get('modules', (error, modules) => { - const showLoad = Images.show.load; - - const doBefore = { - 'edit': showLoad, - 'menu': showLoad, - }; - - const load = (name, path, dobefore) => { - const isTmpl = path === 'template'; - const funcName = isTmpl ? 'get' : 'show'; - - loadModule({ - name, - path, - dobefore, - funcName, - }); - }; - - if (!modules) - modules = []; - - modules.local.forEach((module) => { - load(null, module, doBefore[module]); + const [, modules] = await tryToCatch(Files.get, 'modules'); + const showLoad = Images.show.load; + + const doBefore = { + edit: showLoad, + menu: showLoad, + }; + + const load = (name, path, dobefore) => { + loadModule({ + name, + path, + dobefore, }); - - callback(); - }); + }; + + if (!modules) + return; + + for (const module of modules.local) { + load(null, module, doBefore[module]); + } + }; + + async function saveCurrentName(currentName) { + await Storage.set('current-name', currentName); } - function baseInit(callback) { + async function baseInit() { const files = DOM.getFiles(); CloudCmd.on('current-file', DOM.updateCurrentInfo); + CloudCmd.on('current-name', saveCurrentName); + + const name = await Storage.get('current-name'); + const currentFile = name && DOM.getCurrentByName(name) || files[0]; /* выделяем строку с первым файлом */ if (files) - DOM.setCurrentFile(files[0], { + DOM.setCurrentFile(currentFile, { // when hash is present // it should be handled with this.route // overwre otherwise - history: !location.hash + history: !location.hash, }); const dirPath = DOM.getCurrentDirPath(); - Listeners = CloudCmd.Listeners; + Listeners.init(); const panels = getPanels(); @@ -356,21 +231,18 @@ function CloudCmdProto(Util, DOM) { Listeners.initKeysPanel(); if (!CloudCmd.config('dirStorage')) - return callback(); + return; - Storage.get(dirPath, (error, data) => { - if (!data) { - data = getJSONfromFileTable(); - Storage.set(dirPath, data); - } - callback(); - }); + const data = await Storage.get(dirPath); + + if (!data) + await Storage.setJson(dirPath, getJsonFromFileTable()); } function getPanels() { const panels = ['left']; - if (CloudCmd.config('onePanelMode')) + if (CloudCmd.config('oneFilePanel')) return panels; return [ @@ -379,40 +251,29 @@ function CloudCmdProto(Util, DOM) { ]; } - this.execFromModule = (moduleName, funcName, ...args) => { - const obj = CloudCmd[moduleName]; - const isObj = itype.object(obj); + this.execFromModule = async (moduleName, funcName, ...args) => { + await CloudCmd[moduleName](); - exec.if(isObj, () => { - const obj = CloudCmd[moduleName]; - const func = obj[funcName]; - - func(...args); - }, obj); + const func = CloudCmd[moduleName][funcName]; + func(...args); }; - this.refresh = (options = {}, callback) => { - if (!callback && typeof options === 'function') { - callback = options; - options = {}; - } - - const panel = options.panel || Info.panel; + this.refresh = async (options = {}) => { + const {panel = Info.panel, currentName} = options; + const path = DOM.getCurrentDirPath(panel); const isRefresh = true; const history = false; - const noCurrent = options ? options.noCurrent : false; - const currentName = options.currentName; + const noCurrent = options?.noCurrent; - CloudCmd.loadDir({ - path, + await CloudCmd.changeDir(path, { isRefresh, history, panel, noCurrent, currentName, - }, callback); + }); }; /** @@ -422,176 +283,132 @@ function CloudCmdProto(Util, DOM) { * @param options * { refresh, history } - необходимость обновить данные о каталоге * @param panel - * @param callback * */ - function ajaxLoad(path, options, panel, callback) { - const create = (error, json) => { - const RESTful = DOM.RESTful; - const name = options.currentName || Info.name; - const obj = jonny.parse(json); - const isRefresh = options.refresh; - const noCurrent = options.noCurrent; - - if (!isRefresh && json) - return createFileTable(obj, panel, options, callback); - - const position = DOM.getPanelPosition(panel); - const sort = CloudCmd.sort[position]; - const order = CloudCmd.order[position]; - - const query = rendy('?sort={{ sort }}&order={{ order }}', { - sort, - order, - }); - - RESTful.read(path + query, 'json', (error, obj) => { - if (error) - return; - - options.sort = sort; - options.order = order; - - createFileTable(obj, panel, options, () => { - if (isRefresh && !noCurrent) - DOM.setCurrentByName(name); - - exec(callback); - }); - - if (!CloudCmd.config('dirStorage')) - return; - - Storage.set(path, obj); - }); - }; + async function ajaxLoad(path, options = {}, panel) { + const {RESTful} = DOM; - if (!options) - options = {}; + CloudCmd.log(`reading dir: "${path}";`); - CloudCmd.log('reading dir: "' + path + '";'); + const dirStorage = CloudCmd.config('dirStorage'); + const json = dirStorage && await Storage.getJson(path); + + const name = options.currentName || Info.name; + const {noCurrent, refresh} = options; + + if (!refresh && json) + return await createFileTable(json, panel, options); + + const position = DOM.getPanelPosition(panel); + const sort = CloudCmd.sort[position]; + const order = CloudCmd.order[position]; + + const query = rendy('?sort={{ sort }}&order={{ order }}', { + sort, + order, + }); + + const [, newObj] = await RESTful.read(path + query, 'json'); + + if (!newObj) + // that's OK, error handled by RESTful + return; + + options.sort = sort; + options.order = order; + + await createFileTable(newObj, panel, options); + + if (refresh && !noCurrent) + DOM.setCurrentByName(name); if (!CloudCmd.config('dirStorage')) - return create(); + return; - Storage.get(path, create); + Storage.setJson(path, newObj); } /** * Функция строит файловую таблицу - * @param json - данные о файлах + * @param data - данные о файлах * @param panelParam - * @param history - * @param callback + * @param options - history, noCurrent, showDotFiles */ - function createFileTable(json, panelParam, options, callback) { + async function createFileTable(data, panelParam, options) { const { history, noCurrent, + showDotFiles, } = options; - const names = ['file', 'path', 'link', 'pathLink']; + const names = [ + 'file', + 'path', + 'link', + 'pathLink', + ]; - Files.get(names, (error, templFile, templPath, templLink, templPathLink) => { - const Dialog = DOM.Dialog; - const panel = panelParam || DOM.getPanel(); + const [error, [ + file, + path, + link, + pathLink, + ]] = await tryToCatch(Files.get, names); + + if (error) + return DOM.Dialog.alert(error.responseText); + + const panel = panelParam || DOM.getPanel(); + const {prefix} = CloudCmd; + + const {dir, name} = Info; + + const {childNodes} = panel; + let i = childNodes.length; + + while (i--) + panel.removeChild(panel.lastChild); + + panel.innerHTML = buildFromJSON({ + sort: options.sort, + order: options.order, + data, + id: panel.id, + prefix, + showDotFiles, + template: { + file, + path, + pathLink, + link, + }, + }); + + Listeners.setOnPanel(panel); + + if (!noCurrent) { + let current; - const { - dir, - name, - } = Info; + if (name === '..' && dir !== '/') + current = DOM.getCurrentByName(dir); - if (error) - return Dialog.alert(TITLE, error.responseText); + if (!current) + [current] = DOM.getFiles(panel); - const childNodes = panel.childNodes; - let i = childNodes.length; - - while (i--) - panel.removeChild(panel.lastChild); - - panel.innerHTML = buildFromJSON({ - sort : options.sort, - order : options.order, - data : json, - id : panel.id, - prefix : CloudCmd.PREFIX, - template : { - file : templFile, - path : templPath, - pathLink : templPathLink, - link : templLink - } + DOM.setCurrentFile(current, { + history, }); - Listeners.setOnPanel(panel); - - if (!noCurrent) { - let current; - - if (name === '..' && dir !== '/') - current = DOM.getCurrentByName(dir); - - if (!current) - current = DOM.getFiles(panel)[0]; - - DOM.setCurrentFile(current, { - history: history - }); - - CloudCmd.emit('active-dir', Info.dirPath); - } - - exec(callback); - }); + CloudCmd.emit('active-dir', Info.dirPath); + } } - /** - * Функция генерирует JSON из html-таблицы файлов и - * используеться при первом заходе в корень - */ - function getJSONfromFileTable() { - const path = DOM.getCurrentDirPath(); - const infoFiles = Info.files || []; - - const notParent = (current) => { - const name = DOM.getCurrentName(current); - return name !== '..'; - }; - - const parse = (current) => { - const name = DOM.getCurrentName(current); - const size = DOM.getCurrentSize(current); - const owner = DOM.getCurrentOwner(current); - const mode = DOM.getCurrentMode(current); - const date = DOM.getCurrentDate(current); - - return { - name, - size, - mode, - owner, - date, - }; - }; - - const files = infoFiles - .filter(notParent) - .map(parse); - - const fileTable = { - path, - files, - }; - - return fileTable; - } - - this.goToParentDir = () => { - const dir = Info.dir; + this.goToParentDir = async () => { const { + dir, dirPath, parentDirPath, + panel, } = Info; if (dirPath === parentDirPath) @@ -599,15 +416,13 @@ function CloudCmdProto(Util, DOM) { const path = parentDirPath; - CloudCmd.loadDir({path}, () => { - const {panel} = Info; - const current = DOM.getCurrentByName(dir); - const first = DOM.getFiles(panel)[0]; - - DOM.setCurrentFile(current || first, { - history - }); + await CloudCmd.changeDir(path); + + const current = DOM.getCurrentByName(dir); + const [first] = DOM.getFiles(panel); + + DOM.setCurrentFile(current || first, { + history, }); }; } - diff --git a/client/cloudcmd.js b/client/cloudcmd.js index 9fc6ccf8..f2416fd4 100644 --- a/client/cloudcmd.js +++ b/client/cloudcmd.js @@ -1,46 +1,74 @@ -'use strict'; +import '../css/main.css'; +import process from 'node:process'; +import wraptile from 'wraptile'; +import load from 'load.js'; +import * as Util from '#common/util'; +import * as CloudFunc from '#common/cloudfunc'; +import DOM from '#dom'; +import {registerSW, listenSW} from './sw/register.js'; +import {initSortPanel, sortPanel} from './sort.js'; +import {createCloudCmd} from './client.js'; +import * as Listeners from './listeners/index.js'; -require('../css/main.css'); -require('../css/nojs.css'); -require('../css/columns/name-size-date.css'); -require('../css/columns/name-size.css'); +const isDev = process.env.NODE_ENV === 'development'; -// prevent additional loading of emitify -window.Emitify = require('emitify/legacy'); +export default init; -module.exports = window.CloudCmd = (config) => { - window.Promise = window.Promise || require('es6-promise'); - window.Util = require('../common/util'); - window.CloudFunc = require('../common/cloudfunc'); - - const DOM = require('./dom'); - - window.DOM = DOM; - window.CloudCmd = require('./client'); - - const Dialog = require('./dom/dialog'); - - const prefix = getPrefix(config.prefix); - const {htmlDialogs} = config; - - DOM.Dialog = Dialog(prefix, { - htmlDialogs +globalThis.CloudCmd = init; + +async function init(config) { + globalThis.CloudCmd = createCloudCmd({ + DOM, + Listeners, }); + globalThis.DOM = DOM; + globalThis.Util = Util; + globalThis.CloudFunc = CloudFunc; - require('./listeners'); - require('./key'); - require('./sort'); + await register(config); - window.CloudCmd.init(prefix, config); -}; + initSortPanel(); + globalThis.CloudCmd.sortPanel = sortPanel; + const prefix = getPrefix(config.prefix); + + globalThis.CloudCmd.init(prefix, config); + + if (globalThis.CloudCmd.config('menu') === 'aleman') + setTimeout(() => { + import('https://esm.sh/@putout/processor-html'); + import('https://esm.sh/@putout/bundle@5.5'); + }, 100); +} function getPrefix(prefix) { if (!prefix) return ''; - + if (!prefix.indexOf('/')) return prefix; - return '/' + prefix; + return `/${prefix}`; } +const onUpdateFound = wraptile(async (config) => { + if (isDev) + return; + + const {DOM} = globalThis; + const prefix = getPrefix(config.prefix); + + await load.js(`${prefix}/dist/cloudcmd.common.js`); + await load.js(`${prefix}/dist/cloudcmd.js`); + + console.log('cloudcmd: sw: updated'); + + DOM.Events.removeAll(); + globalThis.CloudCmd(config); +}); + +async function register(config) { + const {prefix} = config; + const sw = await registerSW(prefix); + + listenSW(sw, 'updatefound', onUpdateFound(config)); +} diff --git a/client/dom/buffer.js b/client/dom/buffer.js index 39ce58ae..c6d20ccd 100644 --- a/client/dom/buffer.js +++ b/client/dom/buffer.js @@ -1,133 +1,124 @@ -'use strict'; +/* global CloudCmd*/ +import * as Storage from '#dom/storage'; +import tryToPromiseAll from '../../common/try-to-promise-all.js'; -/* global CloudCmd */ +const CLASS = 'cut-file'; +const COPY = 'copy'; +const CUT = 'cut'; -const jonny = require('jonny/legacy'); -const exec = require('execon'); - -const Storage = require('./storage'); -const DOM = require('./'); - -module.exports = new BufferProto(); - -function BufferProto() { - const Info = DOM.CurrentInfo; - const CLASS = 'cut-file'; - const COPY = 'copy'; - const CUT = 'cut'; - const TITLE = 'Buffer'; - - const Buffer = { - cut : callIfEnabled.bind(null, cut), - copy : callIfEnabled.bind(null, copy), - clear : callIfEnabled.bind(null, clear), - paste : callIfEnabled.bind(null, paste) - }; - - function showMessage(msg) { - DOM.Dialog.alert(TITLE, msg); - } - - function getNames() { - const files = DOM.getActiveFiles(); - const names = DOM.getFilenames(files); - - return names; - } - - function addCutClass() { - const files = DOM.getActiveFiles(); - - files.forEach((element) => { - element.classList.add(CLASS); - }); - } - - function rmCutClass() { - const files = DOM.getByClassAll(CLASS); - - [...files].forEach((element) => { - element.classList.remove(CLASS); - }); - } - - function callIfEnabled(callback) { - const is = CloudCmd.config('buffer'); - - if (is) - return callback(); - - showMessage('Buffer disabled in config!'); - } - - function copy() { - const names = getNames(); - const from = Info.dirPath; - - clear(); - - if (!names.length) - return; - - Storage.remove(CUT) - .set(COPY, { - from, - names, - }); - } - - function cut() { - const names = getNames(); - const from = Info.dirPath; - - clear(); - - if (!names.length) - return; - - addCutClass(); - - Storage - .set(CUT, { - from, - names, - }); - } - - function clear() { - Storage.remove(COPY) - .remove(CUT); - - rmCutClass(); - } - - function paste() { - const copy = Storage.get.bind(Storage, COPY); - const cut = Storage.get.bind(Storage, CUT); - - exec.parallel([copy, cut], (error, cp, ct) => { - const opStr = cp ? 'copy' : 'move'; - const opData = cp || ct; - const Operation = CloudCmd.Operation; - const msg = 'Path is same!'; - const path = Info.dirPath; - - if (!error && !cp && !ct) - error = 'Buffer is empty!'; - - if (error) - return showMessage(error); - - const data = jonny.parse(opData); - data.to = path; - - if (data.from === path) - return showMessage(msg); - - Operation.show(opStr, data); - clear(); - }); - } - - return Buffer; +function showMessage(msg) { + globalThis.DOM.Dialog.alert(msg); } + +function getNames() { + const {DOM} = globalThis; + const files = DOM.getActiveFiles(); + + return DOM.getFilenames(files); +} + +function addCutClass() { + const {DOM} = globalThis; + const files = DOM.getActiveFiles(); + + for (const element of files) { + element.classList.add(CLASS); + } +} + +function rmCutClass() { + const {DOM} = globalThis; + const files = DOM.getByClassAll(CLASS); + + for (const element of files) { + element.classList.remove(CLASS); + } +} + +const checkEnabled = (fn) => () => { + const is = CloudCmd.config('buffer'); + + if (is) + return fn(); + + showMessage('Buffer disabled in config!'); +}; + +async function readBuffer() { + const [e, cp, ct] = await tryToPromiseAll([ + Storage.getJson(COPY), + Storage.getJson(CUT), + ]); + + return [ + e, + cp, + ct, + ]; +} + +export const copy = checkEnabled(async () => { + const Info = globalThis.DOM.CurrentInfo; + const names = getNames(); + const from = Info.dirPath; + + await clear(); + + if (!names.length) + return; + + await Storage.remove(CUT); + await Storage.setJson(COPY, { + from, + names, + }); +}); + +export const cut = checkEnabled(async () => { + const Info = globalThis.DOM.CurrentInfo; + const names = getNames(); + const from = Info.dirPath; + + await clear(); + + if (!names.length) + return; + + addCutClass(); + + await Storage.setJson(CUT, { + from, + names, + }); +}); + +export const clear = checkEnabled(async () => { + await Storage.remove(COPY); + await Storage.remove(CUT); + + rmCutClass(); +}); + +export const paste = checkEnabled(async () => { + const Info = globalThis.DOM.CurrentInfo; + const [error, cp, ct] = await readBuffer(); + + if (error || !cp && !ct) + return showMessage(error || 'Buffer is empty!'); + + const opStr = cp ? 'copy' : 'move'; + const data = cp || ct; + const {Operation} = CloudCmd; + const msg = 'Path is same!'; + const to = Info.dirPath; + + if (data.from === to) + return showMessage(msg); + + Operation.show(opStr, { + ...data, + to, + }); + + await clear(); +}); diff --git a/client/dom/cmd.js b/client/dom/cmd.js new file mode 100644 index 00000000..d228b315 --- /dev/null +++ b/client/dom/cmd.js @@ -0,0 +1,83 @@ +/* global DOM */ +const SELECTED_FILE = 'selected-file'; +const Cmd = { + getSelectedFiles, + isSelected, + unselectFile, + selectFile, + selectAllFiles, + toggleSelectedFile, + toggleAllSelectedFiles, +}; + +/** + * selected file check + * + * @param currentFile + */ +export function isSelected(currentFile) { + if (!currentFile) + return false; + + return DOM.isContainClass(currentFile, SELECTED_FILE); +} + +/** + * select current file + * @param currentFile + */ +export function selectFile(currentFile) { + const current = currentFile || DOM.getCurrentFile(); + + current.classList.add(SELECTED_FILE); + + return Cmd; +} + +export function unselectFile(currentFile) { + const current = currentFile || DOM.getCurrentFile(); + + current.classList.remove(SELECTED_FILE); + + return Cmd; +} + +export function toggleSelectedFile(currentFile) { + const current = currentFile || DOM.getCurrentFile(); + const name = DOM.getCurrentName(current); + + if (name === '..') + return Cmd; + + current.classList.toggle(SELECTED_FILE); + + return Cmd; +} + +export function toggleAllSelectedFiles() { + DOM + .getAllFiles() + .map(DOM.toggleSelectedFile); + + return Cmd; +} + +export function selectAllFiles() { + DOM + .getAllFiles() + .map(DOM.selectFile); + + return Cmd; +} + +/** + * unified way to get selected files + * + * @currentFile + */ +export function getSelectedFiles() { + const panel = DOM.getPanel(); + const selected = DOM.getByClassAll(SELECTED_FILE, panel); + + return Array.from(selected); +} diff --git a/client/dom/current-file.js b/client/dom/current-file.js index ed2aa790..b8113054 100644 --- a/client/dom/current-file.js +++ b/client/dom/current-file.js @@ -1,25 +1,16 @@ -'use strict'; - /* global DOM */ /* global CloudCmd */ - -const btoa = require('../../common/btoa'); - -const { - encode, - decode, -} = require('../../common/entity'); - -const { - getTitle, - FS, -} = require('../../common/cloudfunc'); +import createElement from '@cloudcmd/create-element'; +import {getTitle, FS} from '#common/cloudfunc'; +import {encode, decode} from '#common/entity'; let Title; const CURRENT_FILE = 'current-file'; -const NBSP_REG = RegExp(String.fromCharCode(160), 'g'); -const SPACE = ' '; +const encodeNBSP = (a) => a?.replace('\xa0', ' '); +const decodeNBSP = (a) => a?.replace(' ', '\xa0'); + +export const _CURRENT_FILE = CURRENT_FILE; /** * set name from current (or param) file @@ -27,18 +18,18 @@ const SPACE = ' '; * @param name * @param current */ -module.exports.setCurrentName = (name, current) => { +export const setCurrentName = (name, current) => { const Info = DOM.CurrentInfo; const {link} = Info; - const {PREFIX} = CloudCmd; - const dir = PREFIX + FS + Info.dirPath; + const {prefix} = CloudCmd; + const dir = prefix + FS + Info.dirPath; const encoded = encode(name); link.title = encoded; link.href = dir + encoded; link.innerHTML = encoded; - current.setAttribute('data-name', 'js-file-' + btoa(encodeURI(name))); + current.setAttribute('data-name', createNameAttribute(name)); CloudCmd.emit('current-file', current); return link; @@ -49,28 +40,48 @@ module.exports.setCurrentName = (name, current) => { * * @param currentFile */ -module.exports.getCurrentName = (currentFile) => { +export const getCurrentName = (currentFile) => { const current = currentFile || DOM.getCurrentFile(); if (!current) return ''; - - const link = DOM.getCurrentLink(current); - if (!link) - return ''; - - return decode(link.title) - .replace(NBSP_REG, SPACE); + return parseNameAttribute(current.getAttribute('data-name')); }; /** - * get current direcotory path + * Generate a `data-name` attribute for the given filename + * @param name The string name to encode */ -module.exports.getCurrentDirPath = (panel = DOM.getPanel()) => { +const createNameAttribute = (name) => { + const encoded = btoa(encodeURI(name)); + return `js-file-${encoded}`; +}; + +/** + * Parse a `data-name` attribute string back into the original filename + * @param attribute The string we wish to decode + */ +const parseNameAttribute = (attribute) => { + attribute = attribute.replace('js-file-', ''); + return decodeNBSP(decodeURI(atob(attribute))); +}; + +export const _parseNameAttribute = parseNameAttribute; + +const parseHrefAttribute = (prefix, attribute) => { + attribute = attribute.replace(RegExp('^' + prefix + FS), ''); + return decode(decodeNBSP(attribute)); +}; + +export const _parseHrefAttribute = parseHrefAttribute; + +/** + * get current directory path + */ +export const getCurrentDirPath = (panel = DOM.getPanel()) => { const path = DOM.getByDataName('js-path', panel); - return path.textContent - .replace(NBSP_REG, SPACE); + return path.textContent; }; /** @@ -78,36 +89,31 @@ module.exports.getCurrentDirPath = (panel = DOM.getPanel()) => { * * @param currentFile - current file by default */ -module.exports.getCurrentPath = (currentFile) => { +export const getCurrentPath = (currentFile) => { const current = currentFile || DOM.getCurrentFile(); - const element = DOM.getByTag('a', current)[0]; - const prefix = CloudCmd.PREFIX; + const [element] = DOM.getByTag('a', current); + const {prefix} = CloudCmd; - const path = element - .getAttribute('href') - .replace(RegExp('^' + prefix + FS), '') - .replace(NBSP_REG, SPACE); - - return decode(path); + return parseHrefAttribute(prefix, element.getAttribute('href')); }; /** - * get current direcotory name + * get current directory name */ -module.exports.getCurrentDirName = () => { - const href = DOM.getCurrentDirPath() +export const getCurrentDirName = () => { + const href = DOM + .getCurrentDirPath() .replace(/\/$/, ''); - const substr = href.substr(href, href.lastIndexOf('/')); - const ret = href.replace(substr + '/', '') || '/'; + const substr = href.substr(href, href.lastIndexOf('/')); - return ret; + return href.replace(`${substr}/`, '') || '/'; }; /** - * get current direcotory path + * get current directory path */ -module.exports.getParentDirPath = (panel) => { +export const getParentDirPath = (panel) => { const path = DOM.getCurrentDirPath(panel); const dirName = DOM.getCurrentDirName() + '/'; const index = path.lastIndexOf(dirName); @@ -119,11 +125,11 @@ module.exports.getParentDirPath = (panel) => { }; /** - * get not current direcotory path + * get not current directory path */ -module.exports.getNotCurrentDirPath = () => { +export const getNotCurrentDirPath = () => { const panel = DOM.getPanel({ - active: false + active: false, }); return DOM.getCurrentDirPath(panel); @@ -134,20 +140,20 @@ module.exports.getNotCurrentDirPath = () => { * * @currentFile */ -module.exports.getCurrentFile = () => { +export const getCurrentFile = () => { return DOM.getByClass(CURRENT_FILE); }; /** * get current file by name */ -module.exports.getCurrentByName = (name, panel = DOM.CurrentInfo.panel) => { - const dataName = 'js-file-' + btoa(encodeURI(name)); +export const getCurrentByName = (name, panel = DOM.CurrentInfo.panel) => { + const dataName = 'js-file-' + btoa(encodeURI(encodeNBSP(name))); return DOM.getByDataName(dataName, panel); }; /** - * private function thet unset currentfile + * private function that unset currentFile * * @currentFile */ @@ -163,9 +169,8 @@ function unsetCurrentFile(currentFile) { /** * unified way to set current file */ -module.exports.setCurrentFile = (currentFile, options) => { +export const setCurrentFile = (currentFile, options) => { const o = options; - const CENTER = true; const currentFileWas = DOM.getCurrentFile(); if (!currentFile) @@ -193,13 +198,15 @@ module.exports.setCurrentFile = (currentFile, options) => { * but it should be false * to prevent default behavior */ - if (!o || o.history !== false) { + if (!o || o.history) { const historyPath = path === '/' ? path : FS + path; DOM.setHistory(historyPath, null, historyPath); } } /* scrolling to current file */ + const CENTER = true; + DOM.scrollIntoViewIfNeeded(currentFile, CENTER); CloudCmd.emit('current-file', currentFile); @@ -209,13 +216,18 @@ module.exports.setCurrentFile = (currentFile, options) => { return DOM; }; +export const setCurrentByName = (name) => { + const current = DOM.getCurrentByName(name); + return DOM.setCurrentFile(current); +}; + /* * set current file by position * * @param layer - element * @param - position {x, y} */ -module.exports.getCurrentByPosition = ({x, y}) => { +export const getCurrentByPosition = ({x, y}) => { const element = document.elementFromPoint(x, y); const getEl = (el) => { @@ -247,7 +259,7 @@ module.exports.getCurrentByPosition = ({x, y}) => { * * @param currentFile */ -module.exports.isCurrentFile = (currentFile) => { +export const isCurrentFile = (currentFile) => { if (!currentFile) return false; @@ -259,18 +271,41 @@ module.exports.isCurrentFile = (currentFile) => { * * @param name */ - -module.exports.setTitle = (name) => { +export const setTitle = (name) => { if (!Title) - Title = DOM.getByTag('title')[0] || - DOM.load({ - name : 'title', - innerHTML : name, - parentElement : document.head - }); + Title = DOM.getByTag('title')[0] || createElement('title', { + innerHTML: name, + parent: document.head, + }); Title.textContent = name; return DOM; }; +/** + * check is current file is a directory + * + * @param currentFile + */ +export const isCurrentIsDir = (currentFile) => { + const current = currentFile || DOM.getCurrentFile(); + const path = DOM.getCurrentPath(current); + const fileType = DOM.getCurrentType(current); + + const isZip = path.endsWith('.zip'); + const isDir = /^directory(-link)?/.test(fileType); + + return isDir || isZip; +}; + +export const getCurrentType = (currentFile) => { + const current = currentFile || DOM.getCurrentFile(); + const el = DOM.getByDataName('js-type', current); + + const type = el.className + .split(' ') + .pop(); + + return type; +}; diff --git a/client/dom/current-file.spec.js b/client/dom/current-file.spec.js index 0b25c589..85b18a29 100644 --- a/client/dom/current-file.spec.js +++ b/client/dom/current-file.spec.js @@ -1,128 +1,114 @@ -'use strict'; +import {test, stub} from 'supertape'; +import {create} from 'auto-globals'; +import wraptile from 'wraptile'; +import * as currentFile from './current-file.js'; -const test = require('tape'); -const diff = require('sinon-called-with-diff'); -const sinon = diff(require('sinon')); const id = (a) => a; -const wraptile = require('wraptile'); -const returns = wraptile(id); -const currentFile = require('./current-file'); +const returns = wraptile(id); +const {_CURRENT_FILE} = currentFile; test('current-file: setCurrentName: setAttribute', (t) => { - const { - DOM, - CloudCmd, - } = global; + const {DOM, CloudCmd} = globalThis; - global.DOM = getDOM(); - global.CloudCmd = getCloudCmd(); + globalThis.DOM = getDOM(); + globalThis.CloudCmd = getCloudCmd(); - const setAttribute = sinon.stub(); - const current = { - setAttribute - }; + const current = create(); + const {setAttribute} = current; currentFile.setCurrentName('hello', current); - t.ok(setAttribute.calledWith('data-name', 'js-file-aGVsbG8='), 'should call setAttribute'); - - global.DOM = DOM; - global.CloudCmd = CloudCmd; + globalThis.DOM = DOM; + globalThis.CloudCmd = CloudCmd; + t.calledWith(setAttribute, [ + 'data-name', + 'js-file-aGVsbG8=', + ], 'should call setAttribute'); t.end(); }); test('current-file: setCurrentName: setAttribute: cyrillic', (t) => { - const { - DOM, - CloudCmd, - } = global; + const {DOM, CloudCmd} = globalThis; - global.DOM = getDOM(); - global.CloudCmd = getCloudCmd(); + globalThis.DOM = getDOM(); + globalThis.CloudCmd = getCloudCmd(); - const setAttribute = sinon.stub(); - const current = { - setAttribute - }; + const current = create(); + const {setAttribute} = current; currentFile.setCurrentName('ай', current); - t.ok(setAttribute.calledWith('data-name', 'js-file-JUQwJUIwJUQwJUI5'), 'should call setAttribute'); + globalThis.DOM = DOM; + globalThis.CloudCmd = CloudCmd; - global.DOM = DOM; - global.CloudCmd = CloudCmd; + t.calledWith(setAttribute, [ + 'data-name', + 'js-file-JUQwJUIwJUQwJUI5', + ], 'should call setAttribute'); + t.end(); +}); + +test('current-file: getCurrentName', (t) => { + const current = create(); + current.getAttribute.returns('js-file-Ymlu'); + const result = currentFile.getCurrentName(current); + + t.equal(result, 'bin'); t.end(); }); test('current-file: emit', (t) => { - const { - DOM, - CloudCmd, - } = global; + const {DOM, CloudCmd} = globalThis; - const emit = sinon.stub(); - const setAttribute = sinon.stub(); + const emit = stub(); - global.DOM = getDOM(); - global.CloudCmd = getCloudCmd({ + globalThis.DOM = getDOM(); + globalThis.CloudCmd = getCloudCmd({ emit, }); - const current = { - setAttribute, - }; + const current = create(); currentFile.setCurrentName('hello', current); - t.ok(emit.calledWith('current-file', current), 'should call emit'); - - global.DOM = DOM; - global.CloudCmd = CloudCmd; + globalThis.DOM = DOM; + globalThis.CloudCmd = CloudCmd; + t.calledWith(emit, ['current-file', current], 'should call emit'); t.end(); }); test('current-file: setCurrentName: return', (t) => { - const { - DOM, - CloudCmd, - } = global; + const {DOM, CloudCmd} = globalThis; - const setAttribute = sinon.stub(); const link = {}; - global.DOM = getDOM({ - link + globalThis.DOM = getDOM({ + link, }); - global.CloudCmd = getCloudCmd(); - - const current = { - setAttribute, - }; + globalThis.CloudCmd = getCloudCmd(); + const current = create(); const result = currentFile.setCurrentName('hello', current); + globalThis.DOM = DOM; + globalThis.CloudCmd = CloudCmd; + t.equal(result, link, 'should return link'); - - global.DOM = DOM; - global.CloudCmd = CloudCmd; - t.end(); }); test('current-file: getParentDirPath: result', (t) => { - const { - DOM, - } = global; + const {DOM} = globalThis; const getCurrentDirPath = returns('/D/Films/+++favorite films/'); const getCurrentDirName = returns('+++favorite films'); - global.DOM = getDOM({ + globalThis.DOM = getDOM({ getCurrentDirPath, getCurrentDirName, }); @@ -130,33 +116,193 @@ test('current-file: getParentDirPath: result', (t) => { const result = currentFile.getParentDirPath(); const expected = '/D/Films/'; - global.DOM = DOM; + globalThis.DOM = DOM; t.equal(result, expected, 'should return parent dir path'); t.end(); }); -function getCloudCmd({emit} = {}) { - return { - PREFIX: '', - emit: emit || sinon.stub(), - }; -} +test('current-file: isCurrentFile: no', (t) => { + const {DOM, CloudCmd} = globalThis; + + globalThis.DOM = getDOM(); + globalThis.CloudCmd = getCloudCmd(); + + const result = currentFile.isCurrentFile(); + + globalThis.DOM = DOM; + globalThis.CloudCmd = CloudCmd; + + t.notOk(result); + t.end(); +}); -function getDOM({ - link = {}, - getCurrentDirPath = sinon.stub(), - getCurrentDirName = sinon.stub(), - getByDataName = sinon.stub(), -} = {}) { +test('current-file: isCurrentFile', (t) => { + const {DOM, CloudCmd} = globalThis; + + const isContainClass = stub(); + + globalThis.DOM = getDOM({ + isContainClass, + }); + + globalThis.CloudCmd = getCloudCmd(); + + const current = {}; + currentFile.isCurrentFile(current); + + globalThis.DOM = DOM; + globalThis.CloudCmd = CloudCmd; + + t.calledWith(isContainClass, [current, _CURRENT_FILE], 'should call isContainClass'); + t.end(); +}); + +test('current-file: getCurrentType', (t) => { + const {DOM, CloudCmd} = globalThis; + + globalThis.DOM = getDOM(); + globalThis.CloudCmd = getCloudCmd(); + + const {getByDataName} = globalThis.DOM; + + getByDataName.returns({ + className: 'mini-icon directory', + }); + + const current = create(); + + currentFile.getCurrentType(current); + + globalThis.DOM = DOM; + globalThis.CloudCmd = CloudCmd; + + t.calledWith(getByDataName, ['js-type', current]); + t.end(); +}); + +test('current-file: isCurrentIsDir: getCurrentType', (t) => { + const {DOM, CloudCmd} = globalThis; + + globalThis.DOM = getDOM(); + globalThis.CloudCmd = getCloudCmd(); + + const {getCurrentType} = globalThis.DOM; + + const current = create(); + + currentFile.isCurrentIsDir(current); + + globalThis.DOM = DOM; + globalThis.CloudCmd = CloudCmd; + + t.calledWith(getCurrentType, [current]); + t.end(); +}); + +test('current-file: isCurrentIsDir: directory', (t) => { + const {DOM, CloudCmd} = globalThis; + + globalThis.DOM = getDOM({ + getCurrentType: stub().returns('directory'), + }); + + globalThis.CloudCmd = getCloudCmd(); + + const current = create(); + + const result = currentFile.isCurrentIsDir(current); + + globalThis.DOM = DOM; + globalThis.CloudCmd = CloudCmd; + + t.ok(result); + t.end(); +}); + +test('current-file: isCurrentIsDir: directory-link', (t) => { + const {DOM, CloudCmd} = globalThis; + + globalThis.DOM = getDOM({ + getCurrentType: stub().returns('directory-link'), + }); + + globalThis.CloudCmd = getCloudCmd(); + + const current = create(); + + const result = currentFile.isCurrentIsDir(current); + + globalThis.DOM = DOM; + globalThis.CloudCmd = CloudCmd; + + t.ok(result); + t.end(); +}); + +test('current-file: isCurrentIsDir: file', (t) => { + const {DOM, CloudCmd} = globalThis; + + globalThis.DOM = getDOM({ + getCurrentType: stub().returns('file'), + }); + + globalThis.CloudCmd = getCloudCmd(); + + const current = create(); + + const result = currentFile.isCurrentIsDir(current); + + globalThis.DOM = DOM; + globalThis.CloudCmd = CloudCmd; + + t.notOk(result); + t.end(); +}); + +const getCloudCmd = ({emit} = {}) => ({ + prefix: '', + emit: emit || stub(), +}); + +test('current-file: parseNameAttribute', (t) => { + const result = currentFile._parseNameAttribute('js-file-aGVsbG8mbmJzcDt3b3JsZA=='); + const expected = 'hello\xa0world'; + + t.equal(result, expected); + t.end(); +}); + +test('current-file: parseHrefAttribute', (t) => { + const prefix = '/api/v1'; + const result = currentFile._parseHrefAttribute(prefix, '/api/v1/fs/hello world'); + const expected = '/hello\xa0world'; + + t.equal(result, expected); + t.end(); +}); + +function getDOM(overrides = {}) { + const { + link = {}, + getCurrentDirPath = stub(), + getCurrentDirName = stub(), + getByDataName = stub(), + isContainClass = stub(), + getCurrentType = stub(), + getCurrentPath = stub().returns(''), + } = overrides; + return { getCurrentDirPath, getCurrentDirName, + getCurrentPath, getByDataName, + isContainClass, + getCurrentType, CurrentInfo: { link, dirPath: '/', - } + }, }; } - diff --git a/client/dom/dialog.js b/client/dom/dialog.js index 7d1ff41c..b1791d92 100644 --- a/client/dom/dialog.js +++ b/client/dom/dialog.js @@ -1,33 +1,18 @@ -'use strict'; +import {tryToCatch} from 'try-to-catch'; +import * as smalltalk from 'smalltalk'; -module.exports = Dialog; +const title = 'Cloud Commander'; -const sm = require('smalltalk'); -const smNative = require('smalltalk/native'); +export const alert = (...a) => smalltalk.alert(title, ...a, { + cancel: false, +}); -function Dialog(prefix, config) { - if (!(this instanceof Dialog)) - return new Dialog(prefix, config); - - const {htmlDialogs} = config; - const smalltalk = htmlDialogs ? sm : smNative; - - const alert = (title, message) => { - return smalltalk.alert(title, message); - }; - - this.alert = alert; - - this.prompt = (title, message, value, options) => { - return smalltalk.prompt(title, message, value, options); - }; - - this.confirm = (title, message, options) => { - return smalltalk.confirm(title, message, options); - }; - - this.alert.noFiles = (title) => { - return alert(title, 'No files selected!'); - }; -} +export const prompt = (...a) => tryToCatch(smalltalk.prompt, title, ...a); +export const confirm = (...a) => tryToCatch(smalltalk.confirm, title, ...a); +export const progress = (...a) => smalltalk.progress(title, ...a); +alert.noFiles = () => { + return smalltalk.alert(title, 'No files selected!', { + cancel: false, + }); +}; diff --git a/client/dom/directory.js b/client/dom/directory.js index 7a58025b..efbca119 100644 --- a/client/dom/directory.js +++ b/client/dom/directory.js @@ -1,33 +1,29 @@ -/* global CloudCmd */ +/* global DOM, CloudCmd */ +import philip from 'philip'; +import * as Dialog from '#dom/dialog'; +import {FS} from '#common/cloudfunc'; +import * as Images from '#dom/images'; -'use strict'; - -const philip = require('philip'); - -const Images = require('./images'); -const {FS} = require('../../common/cloudfunc'); -const DOM = require('.'); - -const { - getCurrentDirPath: getPathWhenRootEmpty, -} = DOM; - -module.exports = (items) => { - const Dialog = DOM.Dialog; - +export const uploadDirectory = (items) => { if (items.length) Images.show('top'); - const entries = [...items].map((item) => { - return item.webkitGetAsEntry(); + const entries = Array + .from(items) + .map((item) => item.webkitGetAsEntry()); + + const dirPath = DOM.getCurrentDirPath(); + const path = dirPath.replace(/\/$/, ''); + + const progress = Dialog.progress('Uploading...'); + + progress.catch(() => { + Dialog.alert('Upload aborted'); + uploader.abort(); }); - const dirPath = getPathWhenRootEmpty(); - const path = dirPath - .replace(/\/$/, ''); - const uploader = philip(entries, (type, name, data, i, n, callback) => { - const prefixURL = CloudCmd.PREFIX_URL; + const {prefixURL} = CloudCmd; const full = prefixURL + FS + path + name; let upload; @@ -49,7 +45,7 @@ module.exports = (items) => { const max = next - current; const value = current + percent(count, 100, max); - setProgress(value); + progress.setProgress(value); }); }); @@ -58,25 +54,11 @@ module.exports = (items) => { uploader.abort(); }); - uploader.on('progress', setProgress); uploader.on('end', CloudCmd.refresh); }; -function percent(i, n, per = 100) { - return Math.round(i * per / n); -} +const percent = (i, n, per = 100) => Math.round(i * per / n); -function setProgress(count) { - DOM.Images - .setProgress(count) - .show('top'); -} - -function uploadFile(url, data) { - return DOM.load.put(url, data); -} - -function uploadDir(url) { - return DOM.load.put(url + '?dir'); -} +const uploadFile = (url, data) => DOM.load.put(url, data); +const uploadDir = (url) => DOM.load.put(`${url}?dir`); diff --git a/client/dom/dom-tree.js b/client/dom/dom-tree.js index 0c468116..fad5ad40 100644 --- a/client/dom/dom-tree.js +++ b/client/dom/dom-tree.js @@ -1,6 +1,15 @@ -'use strict'; +import currify from 'currify'; -const DOM = module.exports; +const DOM = { + show, + hide, + getByClass, + getByClassAll, + getByDataName, + getById, + getByTag, + isContainClass, +}; /** * check class of element @@ -8,71 +17,76 @@ const DOM = module.exports; * @param element * @param className */ -module.exports.isContainClass = (element, className) => { +export function isContainClass(element, className) { if (!element) throw Error('element could not be empty!'); if (!className) throw Error('className could not be empty!'); - const classList = element.classList; - const ret = classList.contains(className); + if (Array.isArray(className)) + return className.some(currify( + isContainClass, + element, + )); - return ret; -}; + const {classList} = element; + + return classList.contains(className); +} /** * Function search element by tag * @param tag - className * @param element - element */ -module.exports.getByTag = (tag, element = document) => { +export function getByTag(tag, element = document) { return element.getElementsByTagName(tag); -}; +} /** * Function search element by id - * @param Id - id + * @param id + * @param element */ -module.exports.getById = (id, element = document) => { - return element.querySelector('#' + id); -}; +export function getById(id, element = document) { + return element.querySelector(`#${id}`); +} /** * Function search first element by class name * @param className - className * @param element - element */ -module.exports.getByClass = (className, element = document) => { +export function getByClass(className, element = document) { return DOM.getByClassAll(className, element)[0]; -}; +} -module.exports.getByDataName = (attribute, element = document) => { - const selector = '[' + 'data-name="' + attribute + '"]'; +export function getByDataName(attribute, element = document) { + const selector = '[' + 'data-name="' + attribute + '"]'; return element.querySelector(selector); -}; +} /** * Function search element by class name - * @param pClass - className - * @param element - element + * @param className + * @param element */ -module.exports.getByClassAll = (className, element) => { +export function getByClassAll(className, element) { return (element || document).getElementsByClassName(className); -}; +} /** * add class=hidden to element * * @param element */ -module.exports.hide = (element) => { +export function hide(element) { element.classList.add('hidden'); return DOM; -}; +} -module.exports.show = (element) => { +export function show(element) { element.classList.remove('hidden'); return DOM; -}; - +} diff --git a/client/dom/dom-tree.spec.js b/client/dom/dom-tree.spec.js new file mode 100644 index 00000000..53b376c7 --- /dev/null +++ b/client/dom/dom-tree.spec.js @@ -0,0 +1,152 @@ +import {test, stub} from 'supertape'; +import {create} from 'auto-globals'; +import {tryCatch} from 'try-catch'; +import { + isContainClass, + getByTag, + getById, + getByClass, + getByDataName, + getByClassAll, + hide, + show, +} from './dom-tree.js'; + +test('dom: isContainClass: no element', (t) => { + const [e] = tryCatch(isContainClass); + + t.equal(e.message, 'element could not be empty!', 'should throw when no element'); + t.end(); +}); + +test('dom: isContainClass: no className', (t) => { + const [e] = tryCatch(isContainClass, {}); + + t.equal(e.message, 'className could not be empty!', 'should throw when no element'); + t.end(); +}); + +test('dom: isContainClass: contains', (t) => { + const el = create(); + const {contains} = el.classList; + + const className = 'hello'; + isContainClass(el, className); + + t.calledWith(contains, [className], 'should call contains'); + t.end(); +}); + +test('dom: isContainClass: contains: array', (t) => { + const el = create(); + const {contains} = el.classList; + + const className = 'hello'; + isContainClass(el, ['world', className, 'hello']); + + t.calledWith(contains, [className], 'should call contains'); + t.end(); +}); + +test('dom: getByTag', (t) => { + const getElementsByTagName = stub(); + const element = { + getElementsByTagName, + }; + + getByTag('div', element); + + t.calledWith(getElementsByTagName, ['div'], 'should call getElementsByTagName'); + t.end(); +}); + +test('dom: getById', (t) => { + const querySelector = stub(); + const element = { + querySelector, + }; + + getById('my-id', element); + + t.calledWith(querySelector, ['#my-id'], 'should call querySelector with id selector'); + t.end(); +}); + +test('dom: getByClassAll', (t) => { + const getElementsByClassName = stub(); + const element = { + getElementsByClassName, + }; + + getByClassAll('my-class', element); + + t.calledWith(getElementsByClassName, ['my-class'], 'should call getElementsByClassName'); + t.end(); +}); + +test('dom: getByClass: calls getByClassAll', (t) => { + const element = { + getElementsByClassName: stub().returns(['first']), + }; + + const result = getByClass('my-class', element); + + t.equal(result, 'first', 'should return first element from class list'); + t.end(); +}); + +test('dom: getByDataName', (t) => { + const querySelector = stub(); + const element = { + querySelector, + }; + + getByDataName('hello', element); + + t.calledWith(querySelector, ['[data-name="hello"]'], 'should call querySelector with data-name selector'); + t.end(); +}); + +test('dom: hide', (t) => { + const add = stub(); + const element = { + classList: { + add, + }, + }; + + hide(element); + + t.calledWith(add, ['hidden'], 'should add hidden class'); + t.end(); +}); + +test('dom: show', (t) => { + const remove = stub(); + const element = { + classList: { + remove, + }, + }; + + show(element); + + t.calledWith(remove, ['hidden'], 'should remove hidden class'); + t.end(); +}); + +test('dom: getByClassAll: without element uses document', (t) => { + const getElementsByClassName = stub(); + const prevDocument = globalThis.document; + + globalThis.document = { + getElementsByClassName, + }; + + getByClassAll('my-class'); + + globalThis.document = prevDocument; + + t.calledWith(getElementsByClassName, ['my-class'], 'should fallback to document when no element'); + t.end(); +}); diff --git a/client/dom/events.js b/client/dom/events.js deleted file mode 100644 index b629524a..00000000 --- a/client/dom/events.js +++ /dev/null @@ -1,222 +0,0 @@ -'use strict'; - -const itype = require('itype/legacy'); - -module.exports = new EventsProto(); - -function EventsProto() { - const Events = this; - - function parseArgs(eventName, element, listener, callback) { - let isFunc; - const args = [ - eventName, - element, - listener, - callback, - ]; - - const EVENT_NAME = 1; - const ELEMENT = 0; - const type = itype(eventName); - - switch(type) { - default: - if (!/element$/.test(type)) - throw Error('unknown eventName: ' + type); - - parseArgs( - args[EVENT_NAME], - args[ELEMENT], - listener, - callback - ); - break; - - case 'string': - isFunc = itype.function(element); - - if (isFunc) { - listener = element; - element = null; - } - - if (!element) - element = window; - - callback(element, [ - eventName, - listener, - false - ]); - break; - - case 'array': - eventName.forEach((eventName) => { - parseArgs( - eventName, - element, - listener, - callback - ); - }); - break; - - case 'object': - Object.keys(eventName).forEach((name) => { - const eventListener = eventName[name]; - - parseArgs( - name, - element, - eventListener, - callback - ); - }); - - break; - } - } - - /** - * safe add event listener - * - * @param type - * @param element {document by default} - * @param listener - */ - this.add = (type, element, listener) => { - checkType(type); - - parseArgs(type, element, listener, (element, args) => { - element.addEventListener.apply(element, args); - }); - - return Events; - }; - - /** - * safe add event listener - * - * @param type - * @param listener - * @param element {document by default} - */ - this.addOnce = (type, element, listener) => { - const once = (event) => { - Events.remove(type, element, once); - listener(event); - }; - - if (!listener) { - listener = element; - element = null; - } - - this.add(type, element, once); - - return Events; - }; - - /** - * safe remove event listener - * - * @param type - * @param listener - * @param element {document by default} - */ - this.remove = (type, element, listener) => { - checkType(type); - - parseArgs(type, element, listener, (element, args) => { - element.removeEventListener.apply(element, args); - }); - - return Events; - }; - - /** - * safe add event keydown listener - * - * @param listener - */ - this.addKey = function(...argsArr) { - const name = 'keydown'; - const args = [name, ...argsArr]; - - return Events.add(...args); - }; - - /** - * safe remove event click listener - * - * @param listener - */ - this.rmKey = function(...argsArr) { - const name = 'keydown'; - const args = [name, ...argsArr]; - - return Events.remove(...args); - }; - - /** - * safe add event click listener - * - * @param listener - */ - this.addClick = function(...argsArr) { - const name = 'click'; - const args = [name, ...argsArr]; - - return Events.add(...args); - }; - - /** - * safe remove event click listener - * - * @param listener - */ - this.rmClick = function(...argsArr) { - const name = 'click'; - const args = [name, ...argsArr]; - - return Events.remove(...args); - }; - - this.addContextMenu = function(...argsArr) { - const name = 'contextmenu'; - const args = [name, ...argsArr]; - - return Events.add(...args); - }; - - /** - * safe add event click listener - * - * @param listener - */ - this.addError = function(...argsArr) { - const name = 'error'; - const args = [name, ...argsArr]; - - return Events.add(...args); - }; - - /** - * safe add load click listener - * - * @param listener - */ - this.addLoad = function(...argsArr) { - const name = 'load'; - const args = [name, ...argsArr]; - - return Events.add(...args); - }; - - function checkType(type) { - if (!type) - throw Error('type could not be empty!'); - } -} - diff --git a/client/dom/events/event-store.js b/client/dom/events/event-store.js new file mode 100644 index 00000000..1cbfe7a4 --- /dev/null +++ b/client/dom/events/event-store.js @@ -0,0 +1,15 @@ +let list = []; + +export const add = (el, name, fn) => { + list.push([ + el, + name, + fn, + ]); +}; + +export const clear = () => { + list = []; +}; + +export const get = () => list; diff --git a/client/dom/events/event-store.spec.js b/client/dom/events/event-store.spec.js new file mode 100644 index 00000000..6a623939 --- /dev/null +++ b/client/dom/events/event-store.spec.js @@ -0,0 +1,37 @@ +import {test} from 'supertape'; +import * as eventStore from './event-store.js'; + +test('event-store: get', (t) => { + const el = {}; + const name = 'click'; + const fn = () => {}; + + eventStore.add(el, name, fn); + const result = eventStore.get(); + + const expected = [ + [ + el, + name, + fn, + ], + ]; + + t.deepEqual(result, expected); + t.end(); +}); + +test('event-store: clear', (t) => { + const el = {}; + const name = 'click'; + const fn = () => {}; + + eventStore.add(el, name, fn); + eventStore.clear(); + + const result = eventStore.get(); + const expected = []; + + t.deepEqual(result, expected); + t.end(); +}); diff --git a/client/dom/events/index.js b/client/dom/events/index.js new file mode 100644 index 00000000..c49d2333 --- /dev/null +++ b/client/dom/events/index.js @@ -0,0 +1,203 @@ +import itype from 'itype'; +import * as EventStore from './event-store.js'; + +/** + * safe add event listener + * + * @param type + * @param element - document by default + * @param listener + */ +export const add = (type, element, listener) => { + checkType(type); + + parseArgs(type, element, listener, (element, args) => { + const [name, fn, options] = args; + + element.addEventListener(name, fn, options); + EventStore.add(element, name, fn); + }); + + return Events; +}; + +/** + * safe add event listener + * + * @param type + * @param listener + * @param element - document by default + */ +export const addOnce = (type, element, listener) => { + const once = (event) => { + Events.remove(type, element, once); + listener(event); + }; + + if (!listener) { + listener = element; + element = null; + } + + add(type, element, once); + + return Events; +}; + +/** + * safe remove event listener + * + * @param type + * @param listener + * @param element - document by default + */ +export const remove = (type, element, listener) => { + checkType(type); + + parseArgs(type, element, listener, (element, args) => { + element.removeEventListener(...args); + }); + + return Events; +}; + +/** + * remove all added event listeners + */ +export const removeAll = () => { + const events = EventStore.get(); + + for (const [el, name, fn] of events) + el.removeEventListener(name, fn); + + EventStore.clear(); +}; + +/** + * safe add event keydown listener + * + * @param args + */ +export const addKey = function(...args) { + return add('keydown', ...args); +}; + +/** + * safe remove event click listener + * + * @param args + */ +export const rmKey = function(...args) { + return Events.remove('keydown', ...args); +}; + +/** + * safe add event click listener + */ +export const addClick = function(...args) { + return Events.add('click', ...args); +}; + +/** + * safe remove event click listener + */ +export const rmClick = function(...args) { + return remove('click', ...args); +}; + +export const addContextMenu = function(...args) { + return add('contextmenu', ...args); +}; + +/** + * safe add load listener + */ +export const addLoad = function(...args) { + return add('load', ...args); +}; + +function checkType(type) { + if (!type) + throw Error('type could not be empty!'); +} + +const getEventOptions = (eventName) => { + if (eventName !== 'touchstart') + return false; + + return { + passive: true, + }; +}; + +function parseArgs(eventName, element, listener, callback) { + let isFunc; + const args = [ + eventName, + element, + listener, + callback, + ]; + + const EVENT_NAME = 1; + const ELEMENT = 0; + const type = itype(eventName); + + switch(type) { + default: + if (!type.endsWith('element')) + throw Error(`unknown eventName: ${type}`); + + parseArgs(args[EVENT_NAME], args[ELEMENT], listener, callback); + break; + + case 'string': + isFunc = itype.function(element); + + if (isFunc) { + listener = element; + element = null; + } + + if (!element) + element = window; + + callback(element, [ + eventName, + listener, + getEventOptions(eventName), + ]); + break; + + case 'array': + + for (const name of eventName) { + parseArgs(name, element, listener, callback); + } + + break; + + case 'object': + + for (const name of Object.keys(eventName)) { + const eventListener = eventName[name]; + + parseArgs(name, element, eventListener, callback); + } + + break; + } +} + +const Events = { + add, + addClick, + addContextMenu, + addKey, + addLoad, + addOnce, + remove, + removeAll, + rmClick, + rmKey, +}; diff --git a/client/dom/files.js b/client/dom/files.js index 2b11392b..395ac0fa 100644 --- a/client/dom/files.js +++ b/client/dom/files.js @@ -1,105 +1,82 @@ /* global CloudCmd */ - -'use strict'; - -const itype = require('itype/legacy'); -const currify = require('currify/legacy'); -const exec = require('execon'); - -const Storage = require('./storage'); -const load = require('./load'); -const RESTful = require('./rest'); +import itype from 'itype'; +import {promisify} from 'es6-promisify'; +import * as load from '#dom/load'; +import * as RESTful from '#dom/rest'; const Promises = {}; const FILES_JSON = 'config|modules'; const FILES_HTML = 'file|path|link|pathLink|media'; const FILES_HTML_ROOT = 'view/media-tmpl|config-tmpl|upload'; const DIR_HTML = '/tmpl/'; -const DIR_HTML_FS = DIR_HTML + 'fs/'; +const DIR_HTML_FS = `${DIR_HTML}fs/`; const DIR_JSON = '/json/'; const timeout = getTimeoutOnce(2000); -const get = currify(getFile); -const unaryMap = (array, fn) => array.map((a) => fn(a)); +export const get = getFile; -module.exports.get = get; - -function getFile(name, callback) { +function getFile(name) { const type = itype(name); - let array; + check(name); - check(name, callback); + if (type === 'string') + return getModule(name); - switch(type) { - case 'string': - getModule(name, callback); - break; - - case 'array': - array = unaryMap(name, get); - - exec.parallel(array, callback); - break; - } + if (type === 'array') + return Promise.all(name.map(getFile)); } -function check(name, callback) { +function check(name) { if (!name) throw Error('name could not be empty!'); - - if (typeof callback !== 'function') - throw Error('callback should be a function'); } -function getModule(name, callback) { - let path; - - const regExpHTML = new RegExp(FILES_HTML + '|' + FILES_HTML_ROOT); - const regExpJSON = new RegExp(FILES_JSON); +function getModule(name) { + const regExpHTML = RegExp(FILES_HTML + '|' + FILES_HTML_ROOT); + const regExpJSON = RegExp(FILES_JSON); const isHTML = regExpHTML.test(name); const isJSON = regExpJSON.test(name); - if (!isHTML && !isJSON) { - showError(name); - } else if (name === 'config') { - getConfig(callback); - } else { - path = getPath(name, isHTML, isJSON); - - getSystemFile(path, callback); - } + if (!isHTML && !isJSON) + return showError(name); + if (name === 'config') + return getConfig(); + + const path = getPath(name, isHTML, isJSON); + + return getSystemFile(path); } function getPath(name, isHTML, isJSON) { let path; - const regExp = new RegExp(FILES_HTML_ROOT); + const regExp = RegExp(FILES_HTML_ROOT); const isRoot = regExp.test(name); if (isHTML) { if (isRoot) path = DIR_HTML + name.replace('-tmpl', ''); else - path = DIR_HTML_FS + name; + path = DIR_HTML_FS + name; path += '.hbs'; } else if (isJSON) { - path = DIR_JSON + name + '.json'; + path = DIR_JSON + name + '.json'; } return path; } function showError(name) { - const str = 'Wrong file name: ' + name; - const error = new Error(str); + const str = `Wrong file name: ${name}`; + const error = Error(str); - throw(error); + throw error; } -function getSystemFile(file, callback) { - const prefix = CloudCmd.PREFIX; +const getSystemFile = promisify((file, callback) => { + const {prefix} = CloudCmd; if (!Promises[file]) Promises[file] = new Promise((success, error) => { @@ -108,7 +85,7 @@ function getSystemFile(file, callback) { load.ajax({ url, success, - error + error, }); }); @@ -118,37 +95,29 @@ function getSystemFile(file, callback) { Promises[file] = null; callback(error); }); -} +}); -function getConfig(callback) { +const getConfig = async () => { let is; if (!Promises.config) - Promises.config = new Promise((resolve, reject) => { + Promises.config = () => { is = true; - RESTful.Config.read((error, data) => { - if (error) - return reject(error); - - resolve(data); - }); - }); + return RESTful.Config.read(); + }; - Promises.config.then((data) => { + const [, data] = await Promises.config(); + + if (data) is = false; - Storage.setAllowed(data.localStorage); - - callback(null, data); - - timeout(() => { - if (!is) - Promises.config = null; - }); - }, () => { + + timeout(() => { if (!is) Promises.config = null; }); -} + + return data; +}; function getTimeoutOnce(time) { let is; @@ -165,4 +134,3 @@ function getTimeoutOnce(time) { }, time); }; } - diff --git a/client/dom/images.js b/client/dom/images.js index 19eb32cf..75663e72 100644 --- a/client/dom/images.js +++ b/client/dom/images.js @@ -1,21 +1,13 @@ -/* global CloudCmd */ /* global DOM */ - -'use strict'; - -const Images = module.exports; +import createElement from '@cloudcmd/create-element'; const LOADING = 'loading'; const HIDDEN = 'hidden'; const ERROR = 'error'; -const LoadingImage = LOADING + getLoadingType(); +const getLoadingType = () => isSVG() ? '-svg' : '-gif'; -function getLoadingType() { - return isSVG() ? '-svg' : '-gif'; -} - -module.exports.get = getElement; +export const get = getElement; /** * check SVG SMIL animation support @@ -34,54 +26,60 @@ function isSVG() { return /SVGAnimate/.test(name); } - function getElement() { - return DOM.load({ - name : 'span', - id : 'js-status-image', - className : 'icon', - attribute : 'data-progress', - notAppend : true + return createElement('span', { + id: 'js-status-image', + className: 'icon', + dataName: 'progress', + notAppend: true, }); } /* Функция создаёт картинку загрузки */ -module.exports.loading = () => { +export const loading = () => { const element = getElement(); - const classList = element.classList; + const {classList} = element; + const loadingImage = LOADING + getLoadingType(); - classList.add(LOADING, LoadingImage); + classList.add(LOADING, loadingImage); classList.remove(ERROR, HIDDEN); return element; }; /* Функция создаёт картинку ошибки загрузки */ -module.exports.error = () => { +export const error = () => { const element = getElement(); - const classList = element.classList; + const {classList} = element; + const loadingImage = LOADING + getLoadingType(); classList.add(ERROR); - classList.remove(HIDDEN, LOADING, LoadingImage); + classList.remove(HIDDEN, LOADING, loadingImage); return element; }; -module.exports.show = show; -module.exports.show.load = show; -module.exports.show.error = error; +show.load = show; +show.error = (text) => { + const image = Images.error(); + + DOM.show(image); + image.title = text; + + return image; +}; /** * Function shows loading spinner * position = {top: true}; */ -function show(position, panel) { +export function show(position, panel) { const image = Images.loading(); const parent = image.parentElement; const refreshButton = DOM.getRefreshButton(panel); let current; - + if (position === 'top') { current = refreshButton.parentElement; } else { @@ -93,7 +91,7 @@ function show(position, panel) { current = refreshButton.parentElement; } - if (!parent || (parent && parent !== current)) + if (!parent || parent && parent !== current) current.appendChild(image); DOM.show(image); @@ -101,36 +99,25 @@ function show(position, panel) { return image; } -function error(text) { - const image = Images.error(); - - DOM.show(image); - image.title = text; - - CloudCmd.log(text); - - return image; -} - /** * hide load image */ -module.exports.hide = () => { +export function hide() { const element = Images.get(); DOM.hide(element); return Images; -}; +} -module.exports.setProgress = (value, title) => { +export const setProgress = (value, title) => { const DATA = 'data-progress'; const element = Images.get(); - + if (!element) return Images; - element.setAttribute(DATA, value + '%'); + element.setAttribute(DATA, `${value}%`); if (title) element.title = title; @@ -138,7 +125,7 @@ module.exports.setProgress = (value, title) => { return Images; }; -module.exports.clearProgress = () => { +export const clearProgress = () => { const DATA = 'data-progress'; const element = Images.get(); @@ -151,3 +138,12 @@ module.exports.clearProgress = () => { return Images; }; +const Images = { + clearProgress, + setProgress, + show, + hide, + get, + error, + loading, +}; diff --git a/client/dom/index.js b/client/dom/index.js index 09a3d8b8..a82b6f72 100644 --- a/client/dom/index.js +++ b/client/dom/index.js @@ -1,984 +1,811 @@ /* global CloudCmd */ +import * as load from '#dom/load'; +import * as Files from '#dom/files'; +import * as Dialog from '#dom/dialog'; +import * as Events from '#dom/events'; +import {getExt} from '#common/util'; +import * as Storage from '#dom/storage'; +import * as RESTful from '#dom/rest'; +import * as Images from '#dom/images'; +import renameCurrent from './operations/rename-current.js'; +import * as CurrentFile from './current-file.js'; +import * as DOMTree from './dom-tree.js'; +import * as Cmd from './cmd.js'; +import * as IO from './io/index.js'; +import {uploadDirectory} from './directory.js'; +import * as Buffer from './buffer.js'; +import {loadRemote as _loadRemote} from './load-remote.js'; +import {selectByPattern} from './select-by-pattern.js'; -'use strict'; - -const itype = require('itype/legacy'); -const exec = require('execon'); -const jonny = require('jonny/legacy'); -const Util = require('../../common/util'); - -const Images = require('./images'); -const load = require('./load'); -const Files = require('./files'); -const RESTful = require('./rest'); -const Storage = require('./storage'); - -const currentFile = require('./current-file'); -const DOMTree = require('./dom-tree'); +const {assign} = Object; const DOM = { - ...DOMTree, - ...currentFile, - ...new CmdProto(), + getCurrentDirName, + getNotCurrentDirPath, + getParentDirPath, + loadRemote, + loadSocket, + promptNewDir, + promptNewFile, + unselectFiles, + getActiveFiles, + getCurrentDate, + getCurrentSize, + loadCurrentSize, + loadCurrentHash, + setCurrentSize, + getCurrentMode, + getCurrentOwner, + getCurrentData, + getRefreshButton, + getAllFiles, + expandSelection, + shrinkSelection, + setHistory, + getCurrentLink, + getFilenames, + checkStorageHash, + saveDataToStorage, + getFM, + getPanelPosition, + getCSSVar, + getPanel, + getFiles, + showPanel, + hidePanel, + remove, + deleteCurrent, + deleteSelected, + renameCurrent, + scrollIntoViewIfNeeded, + scrollByPages, + changePanel, + getPackerExt, + goToDirectory, + duplicatePanel, + swapPanels, + updateCurrentInfo, }; +assign(DOM, { + ...DOMTree, + ...CurrentFile, + ...Cmd, +}); + +export const CurrentInfo = {}; + DOM.Images = Images; DOM.load = load; DOM.Files = Files; DOM.RESTful = RESTful; +DOM.IO = IO; DOM.Storage = Storage; +DOM.Dialog = Dialog; +DOM.CurrentInfo = CurrentInfo; -module.exports = DOM; +export default DOM; -DOM.uploadDirectory = require('./directory'); -DOM.Buffer = require('./buffer'); -DOM.Events = require('./events'); +DOM.uploadDirectory = uploadDirectory; +DOM.Buffer = Buffer; +DOM.Events = Events; +const isString = (a) => typeof a === 'string'; -const loadRemote = require('./load-remote'); -const selectByPattern = require('./select-by-pattern'); +const TabPanel = { + 'js-left': null, + 'js-right': null, +}; -function CmdProto() { - let CurrentInfo = {}; - - const Cmd = this; - const SELECTED_FILE = 'selected-file'; - const TITLE = 'Cloud Commander'; - const TabPanel = { - 'js-left' : null, - 'js-right' : null - }; - - this.loadRemote = (name, options, callback) => { - loadRemote(name, options, callback); - return DOM; - }; - /** - * load jquery from google cdn or local copy - * @param callback - */ - this.loadJquery = function(callback) { - DOM.loadRemote('jquery', { - name : '$' - }, callback); - - return DOM; - }; - - this.loadSocket = function(callback) { - DOM.loadRemote('socket', { - name : 'io' - }, callback); - - return DOM; - }; - - /** - * create new folder - * - */ - this.promptNewDir = function() { - promptNew('directory', '?dir'); - }; - - /** - * create new file - * - * @typeName - * @type - */ - this.promptNewFile = () => { - promptNew('file'); - }; - - function promptNew(typeName, type) { - const {Dialog} = DOM; - const dir = DOM.getCurrentDirPath(); - const msg = 'New ' + typeName || 'File'; - const getName = () => { - const name = DOM.getCurrentName(); - - if (name === '..') - return ''; - - return name; - }; - - const name = getName(); - const cancel = false; - - Dialog.prompt(TITLE, msg, name, {cancel}).then((name) => { - if (!name) - return; - - const path = (type) => { - const result = dir + name; - - if (!type) - return result; - - return result + type; - }; - - RESTful.write(path(type), (error) => { - if (error) - return; - - const currentName = name; - - CloudCmd.refresh({ - currentName - }); - }); - }); - } - - /** -<<<<<<< HEAD - * get current direcotory name - */ - this.getCurrentDirName = () => { - const href = DOM.getCurrentDirPath() - .replace(/\/$/, ''); - - const substr = href.substr(href, href.lastIndexOf('/')); - const ret = href.replace(substr + '/', '') || '/'; - - return ret; - }; - - /** - * get current direcotory path - */ - this.getParentDirPath = (panel) => { - const path = DOM.getCurrentDirPath(panel); - const dirName = DOM.getCurrentDirName() + '/'; - const index = path.lastIndexOf(dirName); - - if (path !== '/') - return path.slice(0, index); - - return path; - }; - - /** - * get not current direcotory path - */ - this.getNotCurrentDirPath = () => { - const panel = DOM.getPanel({active: false}); - const path = DOM.getCurrentDirPath(panel); - - return path; - }; - - /** - * get current file by name - */ - this.getCurrentByName = (name, panel = CurrentInfo.panel) => { - const dataName = 'js-file-' + btoa(encodeURI(name)); - const element = DOM.getByDataName(dataName, panel); - - return element; - }; - - /** - * unified way to get selected files - * - * @currentFile - */ - this.getSelectedFiles = () => { - const panel = DOM.getPanel(); - const selected = DOM.getByClassAll(SELECTED_FILE, panel); - - return [...selected]; - }; - - /* - * unselect all files - */ - this.unselectFiles = (files) => { - files = files || DOM.getSelectedFiles(); - - [...files].forEach(DOM.toggleSelectedFile); - }; - - /** - * get all selected files or current when none selected - * - * @currentFile - */ - this.getActiveFiles = () => { - const current = DOM.getCurrentFile(); - const files = DOM.getSelectedFiles(); - const name = DOM.getCurrentName(current); - - if (!files.length && name !== '..') - return [current]; - - return files; - }; - - this.getCurrentDate = (currentFile) => { - const current = currentFile || DOM.getCurrentFile(); - const date = DOM - .getByDataName('js-date', current) - .textContent; - - return date; - }; - - /** - * get size - * @currentFile - */ - this.getCurrentSize = (currentFile) => { - const current = currentFile || DOM.getCurrentFile(); - /* если это папка - возвращаем слово dir вместо размера*/ - const size = DOM.getByDataName('js-size', current) - .textContent - .replace(/^<|>$/g, ''); - - return size; - }; - - /** - * get size - * @currentFile - */ - this.loadCurrentSize = (callback, currentFile) => { - const current = currentFile || DOM.getCurrentFile(); - const query = '?size'; - const link = DOM.getCurrentPath(current); - - Images.show.load(); - - if (name === '..') - return; - - RESTful.read(link + query, (error, size) => { - if (error) - return; - - DOM.setCurrentSize(size, current); - exec(callback, current); - Images.hide(); - }); - }; - - /** - * load hash - * @callback - * @currentFile - */ - this.loadCurrentHash = (callback, currentFile) => { - const current = currentFile || DOM.getCurrentFile(); - const query = '?hash'; - const link = DOM.getCurrentPath(current); - - RESTful.read(link + query, callback); - }; - - /** - * load current modification time of file - * @callback - * @currentFile - */ - this.loadCurrentTime = (callback, currentFile) => { - const current = currentFile || DOM.getCurrentFile(); - const query = '?time'; - const link = DOM.getCurrentPath(current); - - RESTful.read(link + query, callback); - }; - - /** - * set size - * @currentFile - */ - this.setCurrentSize = (size, currentFile) => { - const current = currentFile || DOM.getCurrentFile(); - const sizeElement = DOM.getByDataName('js-size', current); - - sizeElement.textContent = size; - }; - - /** - * @currentFile - */ - this.getCurrentMode = (currentFile) => { - const current = currentFile || DOM.getCurrentFile(); - const mode = DOM.getByDataName('js-mode', current); - - return mode.textContent; - }; - - /** - * @currentFile - */ - this.getCurrentOwner = (currentFile) => { - const current = currentFile || DOM.getCurrentFile(); - const owner = DOM.getByDataName('js-owner', current); - - return owner.textContent; - }; - - /** - * unified way to get current file content - * - * @param callback - * @param currentFile - */ - this.getCurrentData = (callback, currentFile) => { - let hash; - const Dialog = DOM.Dialog; - const Info = DOM.CurrentInfo; - const current = currentFile || DOM.getCurrentFile(); - const path = DOM.getCurrentPath(current); - const isDir = DOM.isCurrentIsDir(current); - - const func = (error, data) => { - const ONE_MEGABYTE = 1024 * 1024 * 1024; - - if (!error) { - if (itype.object(data)) - data = jonny.stringify(data); - - const length = data.length; - - if (hash && length < ONE_MEGABYTE) - DOM.saveDataToStorage(path, data, hash); - } - - callback(error, data); - }; - - if (Info.name === '..') { - Dialog.alert.noFiles(TITLE); - return callback(Error('No files selected!')); - } - - if (isDir) - return RESTful.read(path, func); - - DOM.checkStorageHash(path, (error, equal, hashNew) => { - if (error) - return callback(error); - - if (equal) - return DOM.getDataFromStorage(path, callback); - - hash = hashNew; - RESTful.read(path, func); - }); - }; - - /** - * unified way to save current file content - * - * @callback - function({data, name}) {} - * @currentFile - */ - this.saveCurrentData = (url, data, callback, query = '') => { - DOM.RESTful.write(url + query, data, (error) => { - !error && DOM.saveDataToStorage(url, data); - }); - }; - - /** - * unified way to get RefreshButton - */ - this.getRefreshButton = (panel) => { - const currentPanel = panel || DOM.getPanel(); - const refresh = DOM.getByDataName('js-refresh', currentPanel); - - return refresh; - }; - - this.setCurrentByName = (name) => { - const current = DOM.getCurrentByName(name); - return DOM.setCurrentFile(current); - }; - - /** - * select current file - * @param currentFile - */ - this.selectFile = (currentFile) => { - const current = currentFile || DOM.getCurrentFile(); - - current.classList.add(SELECTED_FILE); - - return Cmd; - }; - - this.unselectFile = (currentFile) => { - const current = currentFile || DOM.getCurrentFile(); - - current.classList.remove(SELECTED_FILE); - - return Cmd; - }; - - this.toggleSelectedFile = (currentFile) => { - const current = currentFile || DOM.getCurrentFile(); - const name = DOM.getCurrentName(current); - - if (name === '..') - return Cmd; - - current.classList.toggle(SELECTED_FILE); - - return Cmd; - }; - - this.toggleAllSelectedFiles = () => { - DOM.getAllFiles().map(DOM.toggleSelectedFile); - - return Cmd; - }; - - this.selectAllFiles = () => { - DOM.getAllFiles().map(DOM.selectFile); - - return Cmd; - }; - - this.getAllFiles = () => { - const panel = DOM.getPanel(); - const files = DOM.getFiles(panel); - const name = DOM.getCurrentName(files[0]); - - const from = (a) => a === '..' ? 1 : 0; - const i = from(name); - - return [...files].slice(i); - }; - - /** - * open dialog with expand selection - */ - this.expandSelection = () => { - const msg = 'expand'; - const files = CurrentInfo.files; - - selectByPattern(msg, files); - }; - - /** - * open dialog with shrink selection - */ - this.shrinkSelection = () => { - const msg = 'shrink'; - const files = CurrentInfo.files; - - selectByPattern(msg, files); - }; - - /** - * setting history wrapper - */ - this.setHistory = (data, title, url) => { - const ret = window.history; - - url = CloudCmd.PREFIX + url; - - if (ret) - history.pushState(data, title, url); - - return ret; - }; - - /** - * selected file check - * - * @param currentFile - */ - this.isSelected = (selected) => { - if (!selected) - return false; - - return DOM.isContainClass(selected, SELECTED_FILE); - }; - - /** - * check is current file is a directory - * - * @param currentFile - */ - this.isCurrentIsDir = (currentFile) => { - const current = currentFile || DOM.getCurrentFile(); - const fileType = DOM.getByDataName('js-type', current); - const ret = DOM.isContainClass(fileType, 'directory'); - - return ret; - }; - - /** - * get link from current (or param) file - * - * @param currentFile - current file by default - */ - this.getCurrentLink = (currentFile) => { - const current = currentFile || DOM.getCurrentFile(); - const link = DOM.getByTag('a', current); - - return link[0]; - }; - - this.getFilenames = (files) => { - if (!files) - throw Error('AllFiles could not be empty'); - - const first = files[0] || DOM.getCurrentFile(); - const name = DOM.getCurrentName(first); - - const allFiles = [...files]; - - if (name === '..') - allFiles.shift(); - - const names = allFiles.map((current) => { - return DOM.getCurrentName(current); - }); - - return names; - }; - - /** - * check storage hash - */ - this.checkStorageHash = (name, callback) => { - const parallel = exec.parallel; - const loadHash = DOM.loadCurrentHash; - const nameHash = name + '-hash'; - const getStoreHash = exec.with(Storage.get, nameHash); - - if (typeof name !== 'string') - throw Error('name should be a string!'); - - if (typeof callback !== 'function') - throw Error('callback should be a function!'); - - parallel([loadHash, getStoreHash], (error, loadHash, storeHash) => { - let equal; - const isContain = /error/.test(loadHash); - - if (isContain) - error = loadHash; - else if (loadHash === storeHash) - equal = true; - - callback(error, equal, loadHash); - }); - }; - - /** - * save data to storage - * - * @param name - * @param data - * @param hash - * @param callback - */ - this.saveDataToStorage = function(name, data, hash, callback) { - const allowed = CloudCmd.config('localStorage'); - const isDir = DOM.isCurrentIsDir(); - const nameHash = name + '-hash'; - const nameData = name + '-data'; - - if (!allowed || isDir) - return exec(callback); - - exec.if(hash, () => { - Storage.set(nameHash, hash); - Storage.set(nameData, data); - - exec(callback, hash); - }, (callback) => { - DOM.loadCurrentHash((error, loadHash) => { - hash = loadHash; - callback(); - }); - }); - }; - - /** - * save data to storage - * - * @param name - * @param data - * @param callback - */ - this.getDataFromStorage = (name, callback) => { - const nameHash = name + '-hash'; - const nameData = name + '-data'; - const allowed = CloudCmd.config('localStorage'); - const isDir = DOM.isCurrentIsDir(); - - if (!allowed || isDir) - return exec(callback); - - exec.parallel([ - exec.with(Storage.get, nameData), - exec.with(Storage.get, nameHash), - ], callback); - }; - - this.getFM = () => { - return DOM.getPanel().parentElement; - }; - - this.getPanelPosition = (panel) => { - panel = panel || DOM.getPanel(); - - return panel.dataset.name.replace('js-', ''); - }; - - /** function getting panel active, or passive - * @param options = {active: true} - */ - this.getPanel = (options) => { - let files, panel, isLeft; - let dataName = 'js-'; - - const current = DOM.getCurrentFile(); - - if (!current) { - panel = DOM.getByDataName('js-left'); - } else { - files = current.parentElement, - panel = files.parentElement, - isLeft = panel.getAttribute('data-name') === 'js-left'; - } - - /* if {active : false} getting passive panel */ - if (options && !options.active) { - dataName += isLeft ? 'right' : 'left'; - panel = DOM.getByDataName(dataName); - } - - /* if two panels showed - * then always work with passive - * panel - */ - if (window.innerWidth < CloudCmd.MIN_ONE_PANEL_WIDTH) - panel = DOM.getByDataName('js-left'); - - if (!panel) - throw Error('can not find Active Panel!'); - - return panel; - }; - - this.getFiles = (element) => { - const files = DOM.getByDataName('js-files', element); - return files.children || []; - }; - - /** - * shows panel right or left (or active) - */ - this.showPanel = (active) => { - const panel = DOM.getPanel({active: active}); - - if (!panel) - return false; - - DOM.show(panel); - - return true; - }; - - /** - * hides panel right or left (or active) - */ - this.hidePanel = (active) => { - const panel = DOM.getPanel({ - active - }); - - if (!panel) - return false; - - return DOM.hide(panel); - }; - - /** - * remove child of element - * @param pChild - * @param element - */ - this.remove = (child, element) => { - const parent = element || document.body; - - parent.removeChild(child); - - return DOM; - }; - - /** - * remove current file from file table - * @param current - * - */ - this.deleteCurrent = (current) => { - if (!current) - DOM.getCurrentFile(); - - const parent = current && current.parentElement; - const name = DOM.getCurrentName(current); - - if (current && name !== '..') { - const next = current.nextSibling; - const prev = current.previousSibling; - - DOM.setCurrentFile(next || prev); - parent.removeChild(current); - } - }; - - /** - * remove selected files from file table - * @Selected - */ - this.deleteSelected = (selected) => { - selected = selected || DOM.getSelectedFiles(); - - if (!selected) - return; - - selected.map(DOM.deleteCurrent); - }; - - /** - * rename current file - * - * @currentFile - */ - this.renameCurrent = (current) => { - const Dialog = DOM.Dialog; - - if (!DOM.isCurrentFile(current)) - current = DOM.getCurrentFile(); - - const from = DOM.getCurrentName(current); - - if (from === '..') - return Dialog.alert.noFiles(TITLE); - - const cancel = false; - - Dialog.prompt(TITLE, 'Rename', from, {cancel}).then((to) => { - const isExist = !!DOM.getCurrentByName(to); - const dirPath = DOM.getCurrentDirPath(); - - if (from === to) - return; - - const files = { - from : dirPath + from, - to : dirPath + to - }; - - RESTful.mv(files, (error) => { - if (error) - return; - - DOM.setCurrentName(to, current); - Storage.remove(dirPath); - - if (isExist) - CloudCmd.refresh(); - }); - }); - }; - - /** - * unified way to scrollIntoViewIfNeeded - * (native suporte by webkit only) - * @param element - * @param center - to scroll as small as possible param should be false - */ - this.scrollIntoViewIfNeeded = function(element, center = false) { - if (!element || !element.scrollIntoViewIfNeeded) - return; - - element.scrollIntoViewIfNeeded(center); - }; - - /* scroll on one page */ - this.scrollByPages = (element, pPages) => { - const ret = element && element.scrollByPages && pPages; - - if (ret) - element.scrollByPages(pPages); - - return ret; - }; - - this.changePanel = () => { - const Info = CurrentInfo; - let panel = DOM.getPanel(); - - CloudCmd.emit('passive-dir', Info.dirPath); - - const panelPassive = DOM.getPanel({ - active: false - }); - - let name = DOM.getCurrentName(); - const filesPassive = DOM.getFiles(panelPassive); - - let dataName = panel.getAttribute('data-name'); - - TabPanel[dataName] = name; - - panel = panelPassive; - dataName = panel.getAttribute('data-name'); - - name = TabPanel[dataName]; - - let files; - let current; - - if (name) { - current = DOM.getCurrentByName(name, panel); - - if (current) - files = current.parentElement; - } - - if (!files || !files.parentElement) { - current = DOM.getCurrentByName(name, panel); - - if (!current) - current = filesPassive[0]; - } - - DOM.setCurrentFile(current, { - history: true - }); - - CloudCmd.emit('active-dir', Info.dirPath); - - return DOM; - }; - - this.getPackerExt = (type) => { - if (type === 'zip') - return '.zip'; - - return '.tar.gz'; - }; - - this.goToDirectory = () => { - const msg = 'Go to directory:'; - const path = CurrentInfo.dirPath; - const Dialog = DOM.Dialog; - const cancel = false; - const setPath = (path) => ({ - path - }); - - Dialog.prompt(TITLE, msg, path, {cancel}) - .then(setPath) - .then(CloudCmd.loadDir); - }, - - this.duplicatePanel = () => { - const Info = CurrentInfo; - const isDir = Info.isDir; - const panel = Info.panelPassive; - const noCurrent = !Info.isOnePanel; - - const getPath = (isDir) => { - if (isDir) - return Info.path; - - return Info.dirPath; - }; - - const path = getPath(isDir); - - CloudCmd.loadDir({ - path, - panel, - noCurrent, - }); - }; - - this.swapPanels = () => { - const Info = CurrentInfo; - const {panel} = Info; - const {files} = Info; - const {element} = Info; - - const panelPassive = Info.panelPassive; - - const dirPath = DOM.getCurrentDirPath(); - const dirPathPassive = DOM.getNotCurrentDirPath(); - - let currentIndex = files.indexOf(element); - - CloudCmd.loadDir({ - path: dirPath, - panel: panelPassive, - noCurrent: true - }); - - CloudCmd.loadDir({ - path: dirPathPassive, - panel: panel - }, () => { - const files = Info.files; - const length = files.length - 1; - - if (currentIndex > length) - currentIndex = length; - - const el = files[currentIndex]; - - DOM.setCurrentFile(el); - }); - }; - - this.CurrentInfo = CurrentInfo, - - this.updateCurrentInfo = (currentFile) => { - const info = DOM.CurrentInfo; - const current = currentFile || DOM.getCurrentFile(); - const files = current.parentElement; - const panel = files.parentElement; - - const panelPassive = DOM.getPanel({ - active: false - }); - - const filesPassive = DOM.getFiles(panelPassive); - const name = DOM.getCurrentName(current); - - info.dir = DOM.getCurrentDirName(); - info.dirPath = DOM.getCurrentDirPath(); - info.parentDirPath = DOM.getParentDirPath(); - info.element = current; - info.ext = Util.getExt(name); - info.files = [...files.children]; - info.filesPassive = [...filesPassive]; - info.first = files.firstChild; - info.getData = DOM.getCurrentData; - info.last = files.lastChild; - info.link = DOM.getCurrentLink(current); - info.mode = DOM.getCurrentMode(current); - info.name = name; - info.path = DOM.getCurrentPath(current); - info.panel = panel; - info.panelPassive = panelPassive; - info.size = DOM.getCurrentSize(current); - info.isDir = DOM.isCurrentIsDir(); - info.isSelected = DOM.isSelected(current); - info.panelPosition = DOM.getPanel().dataset.name.replace('js-', ''); - info.isOnePanel = - info.panel.getAttribute('data-name') === - info.panelPassive.getAttribute('data-name'); - }; +export function loadRemote(name, options, callback) { + _loadRemote(name, options, callback); + return DOM; } +export function loadSocket(callback) { + DOM.loadRemote('socket', { + name: 'io', + }, callback); + + return DOM; +} + +/** + * create new folder + * + */ +export async function promptNewDir() { + await promptNew('directory'); +} + +/** + * create new file + * + * @typeName + * @type + */ +export async function promptNewFile() { + await promptNew('file'); +} + +async function promptNew(typeName) { + const {Dialog} = DOM; + const dir = DOM.getCurrentDirPath(); + const msg = `New ${typeName}` || 'File'; + + const getName = () => { + const name = DOM.getCurrentName(); + + if (name === '..') + return ''; + + return name; + }; + + const name = getName(); + const [cancel, currentName] = await Dialog.prompt(msg, name); + + if (cancel) + return; + + const path = `${dir}${currentName}`; + + if (typeName === 'directory') + await RESTful.createDirectory(path); + else + await RESTful.write(path); + + await CloudCmd.refresh({ + currentName, + }); +} + +/** + * get current directory name + */ +export function getCurrentDirName() { + const href = DOM + .getCurrentDirPath() + .replace(/\/$/, ''); + + const substr = href.substr(href, href.lastIndexOf('/')); + + return href.replace(`${substr}/`, '') || '/'; +} + +/** + * get current directory path + */ +export function getParentDirPath(panel) { + const path = DOM.getCurrentDirPath(panel); + const dirName = DOM.getCurrentDirName() + '/'; + const index = path.lastIndexOf(dirName); + + if (path !== '/') + return path.slice(0, index); + + return path; +} + +/** + * get not current directory path + */ +export function getNotCurrentDirPath() { + const panel = DOM.getPanel({ + active: false, + }); + + return DOM.getCurrentDirPath(panel); +} + +/* + * unselect all files + */ +export function unselectFiles(files) { + files = files || DOM.getSelectedFiles(); + + Array + .from(files) + .forEach(DOM.toggleSelectedFile); +} + +/** + * get all selected files or current when none selected + * + * @currentFile + */ +export function getActiveFiles() { + const current = DOM.getCurrentFile(); + const files = DOM.getSelectedFiles(); + const name = DOM.getCurrentName(current); + + if (!files.length && name !== '..') + return [current]; + + return files; +} + +export function getCurrentDate(currentFile) { + const current = currentFile || DOM.getCurrentFile(); + + return DOM.getByDataName('js-date', current).textContent; +} + +/** + * get size + * @currentFile + */ +export function getCurrentSize(currentFile) { + const current = currentFile || DOM.getCurrentFile(); + + /* если это папка - возвращаем слово dir вместо размера*/ + const size = DOM + .getByDataName('js-size', current) + .textContent + .replace(/^<|>$/g, ''); + + return size; +} + +/** + * get size + * @currentFile + */ +export async function loadCurrentSize(currentFile) { + const current = currentFile || DOM.getCurrentFile(); + const query = '?size'; + const link = DOM.getCurrentPath(current); + + Images.show.load(); + + if (name === '..') + return; + + const [, size] = await RESTful.read(link + query); + + DOM.setCurrentSize(size, current); + Images.hide(); + + return current; +} + +/** + * load hash + * @callback + * @currentFile + */ +export async function loadCurrentHash(currentFile) { + const current = currentFile || DOM.getCurrentFile(); + const query = '?hash'; + const link = DOM.getCurrentPath(current); + + const [, data] = await RESTful.read(link + query); + + return data; +} + +/** + * set size + * @currentFile + */ +export function setCurrentSize(size, currentFile) { + const current = currentFile || DOM.getCurrentFile(); + const sizeElement = DOM.getByDataName('js-size', current); + + sizeElement.textContent = size; +} + +/** + * @currentFile + */ +export function getCurrentMode(currentFile) { + const current = currentFile || DOM.getCurrentFile(); + const mode = DOM.getByDataName('js-mode', current); + + return mode.textContent; +} + +/** + * @currentFile + */ +export function getCurrentOwner(currentFile) { + const current = currentFile || DOM.getCurrentFile(); + const owner = DOM.getByDataName('js-owner', current); + + return owner.textContent; +} + +/** + * unified way to get current file content + * + * @param currentFile + */ +export async function getCurrentData(currentFile) { + const {Dialog} = DOM; + const Info = DOM.CurrentInfo; + const current = currentFile || DOM.getCurrentFile(); + const path = DOM.getCurrentPath(current); + const isDir = DOM.isCurrentIsDir(current); + + if (Info.name === '..') { + Dialog.alert.noFiles(); + return [ + Error('No Files'), + ]; + } + + if (isDir) + return await RESTful.read(path); + + const [hashNew, hash] = await DOM.checkStorageHash(path); + + if (!hashNew) + return [ + Error(`Can't get hash of a file`), + ]; + + if (hash === hashNew) + return [null, await Storage.get(`${path}-data`)]; + + const [e, data] = await RESTful.read(path); + + if (e) + return [ + e, + null, + ]; + + const ONE_MEGABYTE = 1024 ** 2 * 1024; + const {length} = data; + + if (hash && length < ONE_MEGABYTE) + await DOM.saveDataToStorage(path, data, hashNew); + + return [null, data]; +} + +/** + * unified way to get RefreshButton + */ +export function getRefreshButton(panel = DOM.getPanel()) { + return DOM.getByDataName('js-refresh', panel); +} + +export function getAllFiles() { + const panel = DOM.getPanel(); + const files = DOM.getFiles(panel); + const name = DOM.getCurrentName(files[0]); + + const from = (a) => a === '..' ? 1 : 0; + const i = from(name); + + return Array + .from(files) + .slice(i); +} + +/** + * open dialog with expand selection + */ +export async function expandSelection() { + const msg = 'expand'; + const {files} = CurrentInfo; + + await selectByPattern(msg, files); +} + +/** + * open dialog with shrink selection + */ +export async function shrinkSelection() { + const msg = 'shrink'; + const {files} = CurrentInfo; + + await selectByPattern(msg, files); +} + +/** + * setting history wrapper + */ +export function setHistory(data, title, url) { + const ret = globalThis.history; + const {prefix} = CloudCmd; + + url = prefix + url; + + if (ret) + history.pushState(data, title, url); + + return ret; +} + +/** + * get link from current (or param) file + * + * @param currentFile - current file by default + */ +export function getCurrentLink(currentFile) { + const current = currentFile || DOM.getCurrentFile(); + const link = DOM.getByTag('a', current); + + return link[0]; +} + +export function getFilenames(files) { + if (!files) + throw Error('AllFiles could not be empty'); + + const first = files[0] || DOM.getCurrentFile(); + const name = DOM.getCurrentName(first); + + const allFiles = Array.from(files); + + if (name === '..') + allFiles.shift(); + + return allFiles.map(DOM.getCurrentName); +} + +/** + * check storage hash + */ +export async function checkStorageHash(name) { + const nameHash = `${name}-hash`; + + if (!isString(name)) + throw Error('name should be a string!'); + + const [loadHash, storeHash] = await Promise.all([ + DOM.loadCurrentHash(), + Storage.get(nameHash), + ]); + + return [loadHash, storeHash]; +} + +/** + * save data to storage + * + * @param name + * @param data + * @param hash + */ +export async function saveDataToStorage(name, data, hash) { + const isDir = DOM.isCurrentIsDir(); + + if (isDir) + return; + + hash = hash || await DOM.loadCurrentHash(); + + const nameHash = `${name}-hash`; + const nameData = `${name}-data`; + + await Storage.set(nameHash, hash); + await Storage.set(nameData, data); + + return hash; +} + +export function getFM() { + const {parentElement} = DOM.getPanel(); + return parentElement; +} + +export function getPanelPosition(panel) { + panel = panel || DOM.getPanel(); + + return panel.dataset.name.replace('js-', ''); +} + +export function getCSSVar(name, {body = document.body} = {}) { + const bodyStyle = getComputedStyle(body); + return bodyStyle.getPropertyValue(`--${name}`); +} + +/** function getting panel active, or passive + * @param options = {active: true} + */ +export function getPanel(options) { + let files; + let panel; + let isLeft; + let dataName = 'js-'; + + const current = DOM.getCurrentFile(); + + if (!current) { + panel = DOM.getByDataName('js-left'); + } else { + files = current.parentElement; + panel = files.parentElement; + isLeft = panel.getAttribute('data-name') === 'js-left'; + } + + /* if {active : false} getting passive panel */ + if (options && !options.active) { + dataName += isLeft ? 'right' : 'left'; + panel = DOM.getByDataName(dataName); + } + + /* if two panels showed + * then always work with passive + * panel + */ + if (globalThis.innerWidth < CloudCmd.MIN_ONE_PANEL_WIDTH) + panel = DOM.getByDataName('js-left'); + + if (!panel) + throw Error('can not find Active Panel!'); + + return panel; +} + +export function getFiles(element) { + const files = DOM.getByDataName('js-files', element); + return files.children || []; +} + +/** + * shows panel right or left (or active) + */ +export function showPanel(active) { + const panel = DOM.getPanel({ + active, + }); + + if (!panel) + return false; + + DOM.show(panel); + + return true; +} + +/** + * hides panel right or left (or active) + */ +export function hidePanel(active) { + const panel = DOM.getPanel({ + active, + }); + + if (!panel) + return false; + + return DOM.hide(panel); +} + +/** + * remove child of element + * @param child + * @param element + */ +export function remove(child, element) { + const parent = element || document.body; + + parent.removeChild(child); + + return DOM; +} + +/** + * remove current file from file table + * @param current + * + */ +export function deleteCurrent(current) { + if (!current) + DOM.getCurrentFile(); + + const parent = current?.parentElement; + const name = DOM.getCurrentName(current); + + if (current && name !== '..') { + const next = current.nextSibling; + const prev = current.previousSibling; + + DOM.setCurrentFile(next || prev); + parent.removeChild(current); + } +} + +/** + * remove selected files from file table + * @Selected + */ +export function deleteSelected(selected) { + selected = selected || DOM.getSelectedFiles(); + + if (!selected) + return; + + selected.map(DOM.deleteCurrent); +} + +/** + * rename current file + * + * @currentFile + */ +export function scrollIntoViewIfNeeded(element, center = false) { + if (!element || !element.scrollIntoViewIfNeeded) + return; + + element.scrollIntoViewIfNeeded(center); +} + +/* scroll on one page */ +export function scrollByPages(element, pPages) { + const ret = element?.scrollByPages && pPages; + + if (ret) + element.scrollByPages(pPages); + + return ret; +} + +export function changePanel() { + const Info = CurrentInfo; + let panel = DOM.getPanel(); + + CloudCmd.emit('passive-dir', Info.dirPath); + + const panelPassive = DOM.getPanel({ + active: false, + }); + + let name = DOM.getCurrentName(); + const filesPassive = DOM.getFiles(panelPassive); + + let dataName = panel.getAttribute('data-name'); + + TabPanel[dataName] = name; + + panel = panelPassive; + dataName = panel.getAttribute('data-name'); + + name = TabPanel[dataName]; + + let files; + let current; + + if (name) { + current = DOM.getCurrentByName(name, panel); + + if (current) + files = current.parentElement; + } + + if (!files || !files.parentElement) { + current = DOM.getCurrentByName(name, panel); + + if (!current) + [current] = filesPassive; + } + + DOM.setCurrentFile(current, { + history: true, + }); + + CloudCmd.emit('active-dir', Info.dirPath); + + return DOM; +} + +export function getPackerExt(type) { + if (type === 'zip') + return '.zip'; + + return '.tar.gz'; +} + +export async function goToDirectory(overrides = {}) { + const {Dialog} = DOM; + const { + prompt = Dialog.prompt, + changeDir = CloudCmd.changeDir, + } = overrides; + + const msg = 'Go to directory:'; + const {dirPath} = CurrentInfo; + + const [cancel, path = dirPath] = await prompt(msg, dirPath); + + if (cancel) + return; + + await changeDir(path); +} + +export async function duplicatePanel() { + const Info = CurrentInfo; + const {isDir} = Info; + const panel = Info.panelPassive; + const noCurrent = !Info.isOnePanel; + + const getPath = (isDir) => { + if (isDir) + return Info.path; + + return Info.dirPath; + }; + + const path = getPath(isDir); + + await CloudCmd.changeDir(path, { + panel, + noCurrent, + }); +} + +export async function swapPanels() { + const Info = CurrentInfo; + const { + panel, + files, + element, + panelPassive, + } = Info; + + const path = DOM.getCurrentDirPath(); + const dirPathPassive = DOM.getNotCurrentDirPath(); + + let currentIndex = files.indexOf(element); + + await CloudCmd.changeDir(path, { + panel: panelPassive, + noCurrent: true, + }); + + await CloudCmd.changeDir(dirPathPassive, { + panel, + }); + + const length = Info.files.length - 1; + + if (currentIndex > length) + currentIndex = length; + + const el = Info.files[currentIndex]; + + DOM.setCurrentFile(el); +} + +export function updateCurrentInfo(currentFile) { + const info = DOM.CurrentInfo; + const current = currentFile || DOM.getCurrentFile(); + const files = current.parentElement; + + const panelPassive = DOM.getPanel({ + active: false, + }); + + const filesPassive = DOM.getFiles(panelPassive); + const name = DOM.getCurrentName(current); + + info.dir = DOM.getCurrentDirName(); + info.dirPath = DOM.getCurrentDirPath(); + info.parentDirPath = DOM.getParentDirPath(); + info.element = current; + info.ext = getExt(name); + info.files = Array.from(files.children); + info.filesPassive = Array.from(filesPassive); + info.first = files.firstChild; + info.getData = DOM.getCurrentData; + info.last = files.lastChild; + info.link = DOM.getCurrentLink(current); + info.mode = DOM.getCurrentMode(current); + info.name = name; + info.path = DOM.getCurrentPath(current); + info.panel = files.parentElement || DOM.getPanel(); + info.panelPassive = panelPassive; + info.size = DOM.getCurrentSize(current); + info.isDir = DOM.isCurrentIsDir(); + info.isSelected = DOM.isSelected(current); + info.panelPosition = DOM + .getPanel() + .dataset + .name + .replace('js-', ''); + info.isOnePanel = info.panel.getAttribute('data-name') === info.panelPassive.getAttribute('data-name'); +} diff --git a/client/dom/index.spec.js b/client/dom/index.spec.js new file mode 100644 index 00000000..268efe5f --- /dev/null +++ b/client/dom/index.spec.js @@ -0,0 +1,52 @@ +import {test, stub} from 'supertape'; +import {getCSSVar, goToDirectory} from '#dom'; + +globalThis.CloudCmd = {}; + +test('cloudcmd: client: dom: goToDirectory', async (t) => { + const path = ''; + const changeDir = stub(); + const prompt = stub().returns([null, path]); + + await goToDirectory({ + prompt, + changeDir, + }); + + t.calledWith(changeDir, [path]); + t.end(); +}); + +test('cloudcmd: client: dom: getCSSVar', (t) => { + const body = {}; + const getPropertyValue = stub().returns(0); + + globalThis.getComputedStyle = stub().returns({ + getPropertyValue, + }); + const result = getCSSVar('hello', { + body, + }); + + delete globalThis.getComputedStyle; + + t.notOk(result); + t.end(); +}); + +test('cloudcmd: client: dom: getCSSVar: 1', (t) => { + const body = {}; + const getPropertyValue = stub().returns(1); + + globalThis.getComputedStyle = stub().returns({ + getPropertyValue, + }); + const result = getCSSVar('hello', { + body, + }); + + delete globalThis.getComputedStyle; + + t.ok(result); + t.end(); +}); diff --git a/client/dom/io/index.js b/client/dom/io/index.js new file mode 100644 index 00000000..192769e6 --- /dev/null +++ b/client/dom/io/index.js @@ -0,0 +1,166 @@ +import {FS} from '#common/cloudfunc'; +import {sendRequest as _sendRequest} from './send-request.js'; + +const {assign} = Object; + +const imgPosition = { + top: true, +}; + +export const remove = async (url, data, overrides = {}) => { + const { + sendRequest = _sendRequest, + } = overrides; + + const request = { + method: 'DELETE', + url: FS + url, + imgPosition: { + top: Boolean(data), + }, + }; + + if (data) + assign(request, { + data, + url: `${request.url}?files`, + }); + + return await sendRequest(request); +}; + +export const patch = async (url, data) => { + return await _sendRequest({ + method: 'PATCH', + url: FS + url, + data, + imgPosition, + }); +}; + +export const write = async (url, data) => { + return await _sendRequest({ + method: 'PUT', + url: FS + url, + data, + imgPosition, + }); +}; + +export const createDirectory = async (url, overrides = {}) => { + const { + sendRequest = _sendRequest, + } = overrides; + + return await sendRequest({ + method: 'PUT', + url: `${FS}${url}?dir`, + imgPosition, + }); +}; + +export const read = async (url, dataType = 'text') => { + const notLog = !url.includes('?'); + + return await _sendRequest({ + method: 'GET', + url: FS + url, + notLog, + dataType, + }); +}; + +export const copy = async (from, to, names) => { + return await _sendRequest({ + method: 'PUT', + url: '/copy', + data: { + from, + to, + names, + }, + imgPosition, + }); +}; + +export const pack = async (data) => { + return await _sendRequest({ + method: 'PUT', + url: '/pack', + data, + }); +}; + +export const extract = async (data) => { + return await _sendRequest({ + method: 'PUT', + url: '/extract', + data, + }); +}; + +export const move = async (from, to, names) => { + return await _sendRequest({ + method: 'PUT', + url: '/move', + data: { + from, + to, + names, + }, + imgPosition, + }); +}; + +export const rename = async (from, to) => { + return await _sendRequest({ + method: 'PUT', + url: '/rename', + data: { + from, + to, + }, + imgPosition, + }); +}; + +export const Config = { + read: async () => { + return await _sendRequest({ + method: 'GET', + url: '/config', + imgPosition, + notLog: true, + }); + }, + + write: async (data) => { + return await _sendRequest({ + method: 'PATCH', + url: '/config', + data, + imgPosition, + }); + }, +}; + +export const Markdown = { + read: async (url) => { + return await _sendRequest({ + method: 'GET', + url: `/markdown${url}`, + imgPosition, + notLog: true, + }); + }, + + render: async (data) => { + return await _sendRequest({ + method: 'PUT', + url: '/markdown', + data, + imgPosition, + notLog: true, + }); + }, +}; diff --git a/client/dom/io/index.spec.js b/client/dom/io/index.spec.js new file mode 100644 index 00000000..8e9e2d08 --- /dev/null +++ b/client/dom/io/index.spec.js @@ -0,0 +1,61 @@ +import {test, stub} from 'supertape'; +import * as io from './index.js'; + +test('client: dom: io', (t) => { + const sendRequest = stub(); + + io.createDirectory('/hello', { + sendRequest, + }); + + const expected = { + imgPosition: { + top: true, + }, + method: 'PUT', + url: '/fs/hello?dir', + }; + + t.calledWith(sendRequest, [expected]); + t.end(); +}); + +test('client: dom: io: remove: no files', async (t) => { + const sendRequest = stub(); + + await io.remove('/hello', null, { + sendRequest, + }); + + const expected = { + imgPosition: { + top: false, + }, + method: 'DELETE', + url: '/fs/hello', + }; + + t.calledWith(sendRequest, [expected]); + t.end(); +}); + +test('client: dom: io: remove: files', async (t) => { + const sendRequest = stub(); + const files = ['world']; + + await io.remove('/hello', files, { + sendRequest, + }); + + const expected = { + imgPosition: { + top: true, + }, + data: ['world'], + method: 'DELETE', + url: '/fs/hello?files', + }; + + t.calledWith(sendRequest, [expected]); + t.end(); +}); diff --git a/client/dom/io/send-request.js b/client/dom/io/send-request.js new file mode 100644 index 00000000..177d34b5 --- /dev/null +++ b/client/dom/io/send-request.js @@ -0,0 +1,48 @@ +/* global CloudCmd */ +import {promisify} from 'es6-promisify'; +import * as Images from '#dom/images'; +import * as load from '#dom/load'; + +export const sendRequest = promisify((params, callback) => { + const p = params; + const {prefixURL} = CloudCmd; + + p.url = prefixURL + p.url; + p.url = encodeURI(p.url); + + p.url = replaceHash(p.url); + + load.ajax({ + method: p.method, + url: p.url, + data: p.data, + dataType: p.dataType, + error: (jqXHR) => { + const response = jqXHR.responseText; + + const {statusText, status} = jqXHR; + + const text = status === 404 ? response : statusText; + + callback(Error(text)); + }, + success: (data) => { + Images.hide(); + + if (!p.notLog) + CloudCmd.log(data); + + callback(null, data); + }, + }); +}); + +export const _replaceHash = replaceHash; + +function replaceHash(url) { + /* + * if we send ajax request - + * no need in hash so we escape # + */ + return url.replace(/#/g, '%23'); +} diff --git a/client/dom/io/send-request.spec.js b/client/dom/io/send-request.spec.js new file mode 100644 index 00000000..f8a960d8 --- /dev/null +++ b/client/dom/io/send-request.spec.js @@ -0,0 +1,11 @@ +import {test} from 'supertape'; +import {_replaceHash} from './send-request.js'; + +test('cloudcmd: client: io: replaceHash', (t) => { + const url = '/hello/####world'; + const result = _replaceHash(url); + const expected = '/hello/%23%23%23%23world'; + + t.equal(result, expected); + t.end(); +}); diff --git a/client/dom/load-remote.js b/client/dom/load-remote.js index a9c4a733..5be8e327 100644 --- a/client/dom/load-remote.js +++ b/client/dom/load-remote.js @@ -1,69 +1,58 @@ -'use strict'; - /* global CloudCmd */ +import {callbackify} from 'node:util'; +import {rendy} from 'rendy'; +import itype from 'itype'; +import * as load from 'load.js'; +import {tryToCatch} from 'try-to-catch'; +import {findObjByNameInArr} from '#common/util'; +import * as Files from '#dom/files'; -const exec = require('execon'); -const rendy = require('rendy/legacy'); -const itype = require('itype/legacy'); -const {findObjByNameInArr} = require('../../common/util'); - -const load = require('./load'); -const Files = require('./files'); - -module.exports = (name, options, callback = options) => { - const {PREFIX, config} = CloudCmd; +export const loadRemote = callbackify(async (name, options) => { + const {prefix, config} = CloudCmd; const o = options; if (o.name && window[o.name]) - return callback(); + return; - Files.get('modules', (error, modules) => { - const online = config('online') && navigator.onLine; - const module = findObjByNameInArr(modules.remote, name); + const modules = await Files.get('modules'); + + const online = config('online') && navigator.onLine; + const module = findObjByNameInArr(modules.remote, name); + + const isArray = itype.array(module.local); + const {version} = module; + + let remoteTmpls; + let local; + + if (isArray) { + remoteTmpls = module.remote; + ({local} = module); + } else { + remoteTmpls = [module.remote]; + local = [module.local]; + } + + const localURL = []; + + for (const url of local) { + localURL.push(prefix + url); + } + + const remoteURL = []; + + for (const tmpl of remoteTmpls) { + remoteURL.push(rendy(tmpl, { + version, + })); + } + + if (online) { + const [e] = await tryToCatch(load.parallel, remoteURL); - const isArray = itype.array(module.local); - const version = module.version; - - let remoteTmpls, local; - if (isArray) { - remoteTmpls = module.remote; - local = module.local; - } else { - remoteTmpls = [module.remote]; - local = [module.local]; - } - - const localURL = local.map((url) => { - return PREFIX + url; - }); - - const remoteURL = remoteTmpls.map((tmpl) => { - return rendy(tmpl, { - version: version - }); - }); - - const on = funcON(localURL, remoteURL, callback); - const off = funcOFF(localURL, callback); - - exec.if(online, on, off); - }); -}; - -function funcOFF(local, callback) { - return () => { - load.parallel(local, callback); - }; -} - -function funcON (local, remote,callback) { - return () => { - load.parallel(remote, (error) => { - if (error) - return funcOFF(); - - callback(); - }); - }; -} - + if (!e) + return; + } + + await load.parallel(localURL); +}); diff --git a/client/dom/load.js b/client/dom/load.js index f429e594..8c7011c1 100644 --- a/client/dom/load.js +++ b/client/dom/load.js @@ -1,130 +1,8 @@ -'use strict'; - -const itype = require('itype/legacy'); -const jonny = require('jonny/legacy'); -const Emitify = require('emitify/legacy'); -const exec = require('execon'); -const Images = require('./images'); -const Events = require('./events'); - -const {getExt} = require('../../common/util'); - -module.exports = load; -module.exports.getIdBySrc = getIdBySrc; -module.exports.ext = ext; - -/** - * Функция создаёт элемент и загружает файл с src. - * - * @param params = { - * name, - название тэга - * src', - путь к файлу - * func, - обьект, содержаий одну из функций - * или сразу две onload и onerror - * {onload: function() {}, onerror: function();} - * style, - * id, - * element, - * async, - true by default - * inner: 'id{color:red, }, - * class, - * notAppend - false by default - * - */ -function load(params) { - const { - src, - id = getIdBySrc(params.src), - func, - name, - async, - inner, - style, - parent = document.body, - className, - attribute, - notAppend, - } = params; - - let element = document.getElementById(id); - - if (element) { - exec(func); - return element; - } - - element = document.createElement(name); - - const funcError = () => { - const msg = `file ${src} could not be loaded`; - const error = new Error(msg); - - parent.removeChild(element); - - Images.show.error(msg); - - const callback = func && func.onerror || func.onload || func; - - exec(callback, error); - }; - - const funcLoad = () => { - const callback = func && func.onload || func; - - Events.remove('error', element, funcError); - - exec(callback); - }; - - if (/^(script|link)$/.test(name)) - Events.addOnce('load', element, funcLoad) - .addError(element, funcError); - - if (id) - element.id = id; - - if (className) - element.className = className; - - if (src) { - if (name !== 'link') { - element.src = src; - } else { - element.href = src; - element.rel = 'stylesheet'; - } - } - - if (attribute) { - const type = itype(attribute); - - switch(type) { - case 'string': - element.setAttribute(attribute, ''); - break; - - case 'object': - Object.keys(attribute).forEach((name) => { - element.setAttribute(name, attribute[name]); - }); - break; - } - } - - if (style) - element.style.cssText = style; - - if (async && name === 'script' || async === undefined) - element.async = true; - - if (!notAppend) - parent.appendChild(element); - - if (inner) - element.innerHTML = inner; - - return element; -} +import itype from 'itype'; +import jonny from 'jonny'; +import Emitify from 'emitify'; +import exec from 'execon'; +import * as Images from '#dom/images'; /** * Function gets id by src @@ -132,17 +10,18 @@ function load(params) { * * Example: http://domain.com/1.js -> 1_js */ -function getIdBySrc(src) { +export function getIdBySrc(src) { const isStr = itype.string(src); if (!isStr) return; - if (~src.indexOf(':')) + if (src.includes(':')) src += '-join'; const num = src.lastIndexOf('/') + 1; const sub = src.substr(src, num); + const id = src .replace(sub, '') .replace(/\./g, '-'); @@ -155,34 +34,37 @@ function getIdBySrc(src) { * * @param params */ -module.exports.ajax = (params) => { +export const ajax = (params) => { const p = params; const isObject = itype.object(p.data); const isArray = itype.array(p.data); const isArrayBuf = itype(p.data) === 'arraybuffer'; const type = p.type || p.method || 'GET'; - const headers = p.headers || {}; + + const {headers = {}} = p; + const xhr = new XMLHttpRequest(); xhr.open(type, p.url, true); - Object.keys(headers).forEach((name) => { + for (const name of Object.keys(headers)) { const value = headers[name]; xhr.setRequestHeader(name, value); - }); + } if (p.responseType) xhr.responseType = p.responseType; let data; + if (!isArrayBuf && isObject || isArray) data = jonny.stringify(p.data); else - data = p.data; + ({data} = p); xhr.onreadystatechange = (event) => { const xhr = event.target; - const OK = 200; + const OK = 200; if (xhr.readyState !== xhr.DONE) return; @@ -190,30 +72,30 @@ module.exports.ajax = (params) => { Images.clearProgress(); const TYPE_JSON = 'application/json'; - const type = xhr.getResponseHeader('content-type'); + const type = xhr.getResponseHeader('content-type'); if (xhr.status !== OK) return exec(p.error, xhr); const notText = p.dataType !== 'text'; - const isContain = ~type.indexOf(TYPE_JSON); + const isContain = type.includes(TYPE_JSON); let data = xhr.response; + if (type && isContain && notText) data = jonny.parse(xhr.response) || xhr.response; - + exec(p.success, data, xhr.statusText, xhr); }; xhr.send(data); }; -module.exports.put = (url, body) => { +export const put = (url, body) => { const emitter = Emitify(); const xhr = new XMLHttpRequest(); - url = encodeURI(url) - .replace('#', '%23'); + url = encodeURI(url).replace(/#/g, '#'); xhr.open('put', url, true); @@ -221,8 +103,8 @@ module.exports.put = (url, body) => { if (!event.lengthComputable) return; - const percent = (event.loaded / event.total) * 100; - const count = Math.round(percent); + const percent = event.loaded / event.total * 100; + const count = Math.round(percent); emitter.emit('progress', count); }; @@ -234,8 +116,10 @@ module.exports.put = (url, body) => { if (!over) return; - if (xhr.status === OK) + if (xhr.status === OK) { + emitter.emit('progress', 100); return emitter.emit('end'); + } const error = Error(xhr.responseText); emitter.emit('error', error); @@ -245,117 +129,3 @@ module.exports.put = (url, body) => { return emitter; }; - -function ext(src, func) { - switch (getExt(src)) { - case '.js': - return load.js(src, func); - - case '.css': - return load.css(src, func); - - default: - return load({ - src, - func, - }); - } -} - -/** - * create elements and load them to DOM-tree - * one-by-one - * - * @param params - * @param callback - */ -load.series = (params, callback) => { - if (!params) - return load; - - const funcs = params - .map((url) => ext.bind(null, url)) - .concat(callback); - - exec.series(funcs); - - return load; -}; - -/** - * improve callback of funcs so - * we pop number of function and - * if it's last we call pCallBack - * - * @param params - * @param callback - onload function - */ -load.parallel = (params, callback) => { - if (!params) - return load; - - const funcs = params.map((url) => { - return ext.bind(null, url); - }); - - exec.parallel(funcs, callback); - - return load; -}; - -/** - * Функция загружает js-файл - * - * @param src - * @param func - */ -load.js = (src, func) => { - const name = 'script'; - - return load({ - name, - src, - func, - }); -}, - -load.css = (src, func) => { - const name = 'link'; - const {head:parent} = document; - - return load({ - name, - src, - parent, - func - }); -}; - -/** - * Функция создаёт елемент style и записывает туда стили - * @param params - структура параметров, заполняеться таким - * образом: {src: ' ',func: '', id: '', element: '', inner: ''} - * все параметры опциональны - */ -load.style = (params) => { - const { - id, - src, - name = 'style', - func, - inner, - parent = document.head, - element, - } = params; - - return load({ - id, - src, - func, - name, - inner, - parent, - element, - }); -}; - diff --git a/client/dom/operations/rename-current.js b/client/dom/operations/rename-current.js new file mode 100644 index 00000000..8b6536d3 --- /dev/null +++ b/client/dom/operations/rename-current.js @@ -0,0 +1,66 @@ +/* global CloudCmd */ +import capitalize from 'just-capitalize'; +import * as _Dialog from '#dom/dialog'; +import * as Storage from '#dom/storage'; +import * as RESTful from '#dom/rest'; +import * as _currentFile from '../current-file.js'; + +export default async (current, overrides = {}) => { + const { + refresh = CloudCmd.refresh, + Dialog = _Dialog, + currentFile = _currentFile, + } = overrides; + + const { + isCurrentFile, + getCurrentName, + getCurrentFile, + getCurrentByName, + getCurrentType, + getCurrentDirPath, + setCurrentName, + } = currentFile; + + if (!isCurrentFile(current)) + current = getCurrentFile(); + + const from = getCurrentName(current); + + if (from === '..') + return Dialog.alert.noFiles(); + + const [cancel, to] = await Dialog.prompt('Rename', from); + + if (cancel) + return; + + const nextFile = getCurrentByName(to); + + if (nextFile) { + const type = getCurrentType(nextFile); + const msg = `${capitalize(type)} "${to}" already exists. Proceed?`; + const [cancel] = await Dialog.confirm(msg); + + if (cancel) + return; + } + + if (from === to) + return; + + const dirPath = getCurrentDirPath(); + + const fromFull = `${dirPath}${from}`; + const toFull = `${dirPath}${to}`; + + const [e] = await RESTful.rename(fromFull, toFull); + + if (e) + return; + + setCurrentName(to, current); + + Storage.remove(dirPath); + refresh(); +}; diff --git a/client/dom/operations/rename-current.spec.js b/client/dom/operations/rename-current.spec.js new file mode 100644 index 00000000..a5ebb415 --- /dev/null +++ b/client/dom/operations/rename-current.spec.js @@ -0,0 +1,86 @@ +import {test, stub} from 'supertape'; +import renameCurrent from './rename-current.js'; + +test('cloudcmd: client: dom: renameCurrent: isCurrentFile', async (t) => { + const current = {}; + const isCurrentFile = stub(); + + const currentFile = stubCurrentFile({ + isCurrentFile, + }); + + await renameCurrent(current, { + Dialog: stubDialog(), + currentFile, + }); + + t.calledWith(isCurrentFile, [current], 'should call isCurrentFile'); + t.end(); +}); + +test('cloudcmd: client: dom: renameCurrent: file exist', async (t) => { + const current = {}; + const name = 'hello'; + + const prompt = stub().returns([null, name]); + const confirm = stub().returns([true]); + + const getCurrentByName = stub().returns(current); + const getCurrentType = stub().returns('directory'); + + const Dialog = stubDialog({ + confirm, + prompt, + }); + + const currentFile = stubCurrentFile({ + getCurrentByName, + getCurrentType, + }); + + await renameCurrent(null, { + Dialog, + currentFile, + }); + + const expected = 'Directory "hello" already exists. Proceed?'; + + t.calledWith(confirm, [expected], 'should call confirm'); + t.end(); +}); + +const stubDialog = (fns = {}) => { + const { + alert = stub().returns([]), + confirm = stub().returns([]), + prompt = stub().returns([]), + } = fns; + + return { + alert, + confirm, + prompt, + }; +}; + +const stubCurrentFile = (fns = {}) => { + const { + isCurrentFile = stub(), + getCurrentName = stub(), + getCurrentFile = stub(), + getCurrentByName = stub(), + getCurrentType = stub(), + getCurrentDirPath = stub(), + setCurrentName = stub(), + } = fns; + + return { + isCurrentFile, + getCurrentName, + getCurrentFile, + getCurrentByName, + getCurrentType, + getCurrentDirPath, + setCurrentName, + }; +}; diff --git a/client/dom/rest.js b/client/dom/rest.js index 6e0faa01..3cf2fb66 100644 --- a/client/dom/rest.js +++ b/client/dom/rest.js @@ -1,220 +1,40 @@ -'use strict'; +import {tryToCatch} from 'try-to-catch'; +import * as Dialog from '#dom/dialog'; +import * as Images from '#dom/images'; +import {encode} from '#common/entity'; +import * as IO from './io/index.js'; -/* global CloudCmd, DOM */ +const handleError = (promise) => async (...args) => { + const [e, data] = await tryToCatch(promise, ...args); + + if (!e) + return [e, data]; + + const encoded = encode(e.message); + + Images.show.error(encoded); + Dialog.alert(encoded); + + return [e, data]; +}; -const itype = require('itype/legacy'); +export const remove = handleError(IO.remove); +export const patch = handleError(IO.patch); +export const write = handleError(IO.write); +export const createDirectory = handleError(IO.createDirectory); +export const read = handleError(IO.read); +export const copy = handleError(IO.copy); +export const pack = handleError(IO.pack); +export const extract = handleError(IO.extract); +export const move = handleError(IO.move); +export const rename = handleError(IO.rename); -const {FS} = require('../../common/cloudfunc'); -const { - encode, -} = require('../../common/entity'); +export const Config = { + read: handleError(IO.Config.read), + write: handleError(IO.Config.write), +}; -module.exports = new RESTful(); - -const Images = require('./images'); -const load = require('./load'); - -function RESTful() { - this.delete = (url, data, callback) => { - const isFunc = itype.function(data); - - if (!callback && isFunc) { - callback = data; - data = null; - } - - sendRequest({ - method : 'DELETE', - url : FS + url, - data, - callback, - imgPosition : { top: !!data } - }); - }; - - this.patch = (url, data, callback) => { - const isFunc = itype.function(data); - - if (!callback && isFunc) { - callback = data; - data = null; - } - - const imgPosition = { - top: true - }; - - sendRequest({ - method: 'PATCH', - url: FS + url, - data, - callback, - imgPosition, - }); - }; - - this.write = (url, data, callback) => { - const isFunc = itype.function(data); - - if (!callback && isFunc) { - callback = data; - data = null; - } - - sendRequest({ - method: 'PUT', - url: FS + url, - data, - callback, - imgPosition : { top: true } - }); - }; - - this.read = (url, dataType, callback) => { - const isQuery = /\?/.test(url); - const isBeautify = /\?beautify$/.test(url); - const isMinify = /\?minify$/.test(url); - const notLog = !isQuery || isBeautify || isMinify; - const isFunc = itype.function(dataType); - - if (!callback && isFunc) { - callback = dataType; - dataType = 'text'; - } - - sendRequest({ - method: 'GET', - url: FS + url, - callback, - notLog, - dataType, - }); - }; - - this.cp = (data, callback) => { - sendRequest({ - method: 'PUT', - url: '/cp', - data, - callback, - imgPosition : { top: true } - }); - }; - - this.pack = (data, callback) => { - sendRequest({ - method : 'PUT', - url : '/pack', - data, - callback, - }); - }; - - this.extract = function(data, callback) { - sendRequest({ - method : 'PUT', - url : '/extract', - data : data, - callback : callback - }); - }; - - this.mv = function(data, callback) { - sendRequest({ - method : 'PUT', - url : '/mv', - data : data, - callback : callback, - imgPosition : { top: true } - }); - }; - - this.Config = { - read: function(callback) { - sendRequest({ - method : 'GET', - url : '/config', - callback : callback, - imgPosition : { top: true }, - notLog : true - }); - }, - - write: function(data, callback) { - sendRequest({ - method : 'PATCH', - url : '/config', - data : data, - callback : callback, - imgPosition : { top: true } - }); - } - }; - - this.Markdown = { - read : function(url, callback) { - sendRequest({ - method : 'GET', - url : '/markdown' + url, - callback : callback, - imgPosition : { top: true }, - notLog : true - }); - }, - - render : function(data, callback) { - sendRequest({ - method : 'PUT', - url : '/markdown', - data : data, - callback : callback, - imgPosition : { top: true }, - notLog : true - }); - } - }; - - function sendRequest(params) { - const p = params; - const prefixUrl = CloudCmd.PREFIX_URL; - - p.url = prefixUrl + p.url; - p.url = encodeURI(p.url); - - /* - * if we send ajax request - - * no need in hash so we escape # - */ - p.url = p.url.replace('#', '%23'); - - load.ajax({ - method : p.method, - url : p.url, - data : p.data, - dataType : p.dataType, - error : (jqXHR) => { - const response = jqXHR.responseText; - const statusText = jqXHR.statusText; - const status = jqXHR.status; - const text = status === 404 ? response : statusText; - const encoded = encode(text); - - Images.show.error(encoded); - - setTimeout(() => { - DOM.Dialog.alert(CloudCmd.TITLE, encoded); - }, 100); - - p.callback(Error(text)); - }, - success: (data) => { - Images.hide(); - - if (!p.notLog) - CloudCmd.log(data); - - p.callback(null, data); - } - }); - } -} +export const Markdown = { + read: handleError(IO.Markdown.read), + render: handleError(IO.Markdown.render), +}; diff --git a/client/dom/select-by-pattern.js b/client/dom/select-by-pattern.js index 870d722f..0bada6ef 100644 --- a/client/dom/select-by-pattern.js +++ b/client/dom/select-by-pattern.js @@ -1,52 +1,46 @@ -'use strict'; - -/* global DOM */ +import {alert, prompt} from '#dom/dialog'; +import {getRegExp} from '#common/util'; +import {getCurrentName} from './current-file.js'; +import { + isSelected, + toggleSelectedFile, +} from './cmd.js'; let SelectType = '*.*'; -const TITLE = 'Cloud Commander'; -const {getRegExp} = require('../../common/util'); - -module.exports = (msg, files) => { - const allMsg = `Specify file type for ${msg} selection`; - const cancel = false; - const {Dialog} = DOM; +export const selectByPattern = async (msg, files) => { + if (!files) + return; - Dialog.prompt(TITLE, allMsg, SelectType, {cancel}).then((type) => { - SelectType = type; + const allMsg = `Specify file type for ${msg} selection`; + const [cancel, type] = await prompt(allMsg, SelectType); + + if (cancel) + return; + + SelectType = type; + + const regExp = getRegExp(type); + let matches = 0; + + for (const current of files) { + const name = getCurrentName(current); - const regExp = getRegExp(type); + if (name === '..' || !regExp.test(name)) + continue; - if (!files) - return; + ++matches; - let matches = 0; + let selected = isSelected(current); + const shouldSel = msg === 'expand'; - files.forEach((current) => { - const name = DOM.getCurrentName(current); - - if (name === '..') - return; - - const isMatch = regExp.test(name); - - if (!isMatch) - return; - - ++matches; - - let isSelected = DOM.isSelected(current); - const shouldSel = msg === 'expand'; - - if (shouldSel) - isSelected = !isSelected; - - if (isSelected) - DOM.toggleSelectedFile(current); - }); + if (shouldSel) + selected = !selected; - if (!matches) - Dialog.alert('Select Files', 'No matches found!'); - }); + if (selected) + toggleSelectedFile(current); + } + + if (!matches) + alert('No matches found!'); }; - diff --git a/client/dom/storage.js b/client/dom/storage.js index 48cb263c..d5cf231f 100644 --- a/client/dom/storage.js +++ b/client/dom/storage.js @@ -1,84 +1,26 @@ -'use strict'; +const {parse, stringify} = JSON; -const itype = require('itype/legacy'); -const jonny = require('jonny/legacy'); -const exec = require('execon'); -const tryCatch = require('try-catch'); -const setItem = localStorage.setItem.bind(localStorage); - -/* приватный переключатель возможности работы с кэшем */ -let Allowed; - -/** - * allow Storage usage - */ -module.exports.setAllowed = (isAllowed) => { - Allowed = isAllowed; +export const set = (name, data) => { + localStorage.setItem(name, data); }; -/** remove element */ -module.exports.remove = (item, callback) => { - if (Allowed) - localStorage.removeItem(item); - - exec(callback, null, Allowed); - - return module.exports; +export const setJson = (name, data) => { + localStorage.setItem(name, stringify(data)); }; -module.exports.removeMatch = (string, callback) => { - const reg = RegExp('^' + string + '.*$'); - const test = (a) => reg.test(a); - const remove = (a) => localStorage.removeItem(a); - - Object.keys(localStorage) - .filter(test) - .forEach(remove); - - exec(callback); - - return module.exports; +export const get = (name) => { + return localStorage.getItem(name); }; -/** если доступен localStorage и - * в нём есть нужная нам директория - - * записываем данные в него - */ -module.exports.set = (name, data, callback) => { - let str, error; - - if (itype.object(data)) - str = jonny.stringify(data); - - if (Allowed && name) - [error] = tryCatch(setItem, name, str || data); - - exec(callback, error); - - return module.exports; -}, - -/** Если доступен Storage принимаем из него данные*/ -module.exports.get = (name, callback) => { - let ret; - - if (Allowed) - ret = localStorage.getItem(name); - - exec(callback, null, ret); - - return module.exports; -}, - -/** функция чистит весь кэш для всех каталогов*/ -module.exports.clear = (callback) => { - const ret = Allowed; - - if (ret) - localStorage.clear(); - - exec(callback, null, ret); - - return module.exports; +export const getJson = (name) => { + const data = localStorage.getItem(name); + return parse(data); }; +export const clear = () => { + localStorage.clear(); +}; + +export const remove = (item) => { + localStorage.removeItem(item); +}; diff --git a/client/dom/storage.spec.js b/client/dom/storage.spec.js new file mode 100644 index 00000000..c538952d --- /dev/null +++ b/client/dom/storage.spec.js @@ -0,0 +1,105 @@ +import {test, stub} from 'supertape'; +import * as storage from '#dom/storage'; + +const {stringify} = JSON; + +test('cloudcmd: client: storage: set', async (t) => { + const {localStorage} = globalThis; + const setItem = stub(); + + globalThis.localStorage = { + setItem, + }; + + await storage.set('hello', 'world'); + globalThis.localStorage = localStorage; + + t.calledWith(setItem, ['hello', 'world'], 'should call setItem'); + t.end(); +}); + +test('cloudcmd: client: storage: get', async (t) => { + const {localStorage} = globalThis; + const getItem = stub().returns('world'); + + globalThis.localStorage = { + getItem, + }; + + const result = await storage.get('hello'); + + globalThis.localStorage = localStorage; + + t.equal(result, 'world'); + t.end(); +}); + +test('cloudcmd: client: storage: getJson', async (t) => { + const {localStorage} = globalThis; + const expected = { + hello: 'world', + }; + + const getItem = stub().returns(stringify(expected)); + + globalThis.localStorage = { + getItem, + }; + + const result = await storage.getJson('hello'); + + globalThis.localStorage = localStorage; + + t.deepEqual(result, expected); + t.end(); +}); + +test('cloudcmd: client: storage: setJson', async (t) => { + const {localStorage} = globalThis; + const data = { + hello: 'world', + }; + + const expected = stringify(data); + const setItem = stub(); + + globalThis.localStorage = { + setItem, + }; + + await storage.setJson('hello', data); + globalThis.localStorage = localStorage; + + t.calledWith(setItem, ['hello', expected]); + t.end(); +}); + +test('cloudcmd: client: storage: remove', async (t) => { + const {localStorage} = globalThis; + const removeItem = stub(); + + globalThis.localStorage = { + removeItem, + }; + + await storage.remove('hello'); + globalThis.localStorage = localStorage; + + t.calledWith(removeItem, ['hello'], 'should call removeItem'); + t.end(); +}); + +test('cloudcmd: client: storage: clear', async (t) => { + const {localStorage} = globalThis; + const clear = stub(); + + globalThis.localStorage = { + clear, + }; + + await storage.clear(); + globalThis.localStorage = localStorage; + + t.calledWithNoArgs(clear, 'should call clear'); + t.end(); +}); diff --git a/client/dom/upload-files.js b/client/dom/upload-files.js index 67d9eb01..1c37fe1b 100644 --- a/client/dom/upload-files.js +++ b/client/dom/upload-files.js @@ -1,27 +1,19 @@ -'use strict'; - /* global CloudCmd */ +import {eachSeries} from 'execon'; +import wraptile from 'wraptile'; +import * as load from '#dom/load'; +import {alert} from '#dom/dialog'; +import {FS} from '#common/cloudfunc'; +import * as Images from '#dom/images'; +import {getCurrentDirPath} from './current-file.js'; -const {eachSeries} = require('execon'); -const wraptile = require('wraptile/legacy'); - -const DOM = require('.'); -const load = require('./load'); -const Images = require('./images'); - -const {FS} = require('../../common/cloudfunc'); - -const onEnd = wraptile(_onEnd); const loadFile = wraptile(_loadFile); +const onEnd = wraptile(_onEnd); -const { - getCurrentDirPath: getPathWhenRootEmpty -} = DOM; - -module.exports = (dir, files) => { +export const uploadFiles = (dir, files) => { if (!files) { files = dir; - dir = getPathWhenRootEmpty(); + dir = getCurrentDirPath(); } const n = files.length; @@ -29,7 +21,7 @@ module.exports = (dir, files) => { if (!n) return; - const array = [...files]; + const array = Array.from(files); const {name} = files[0]; eachSeries(array, loadFile(dir, n), onEnd(name)); @@ -37,17 +29,17 @@ module.exports = (dir, files) => { function _onEnd(currentName) { CloudCmd.refresh({ - currentName + currentName, }); } function _loadFile(dir, n, file, callback) { let i = 0; - const name = file.name; + const {name} = file; const path = dir + name; - const {PREFIX_URL} = CloudCmd; - const api = PREFIX_URL + FS; + const {prefixURL} = CloudCmd; + const api = prefixURL + FS; const percent = (i, n, per = 100) => { return Math.round(i * per / n); @@ -57,7 +49,9 @@ function _loadFile(dir, n, file, callback) { ++i; - load.put(api + path, file) + load + .put(api + path, file) + .on('error', showError) .on('end', callback) .on('progress', (count) => { const max = step(n); @@ -68,3 +62,6 @@ function _loadFile(dir, n, file, callback) { }); } +function showError({message}) { + alert(message); +} diff --git a/client/get-json-from-file-table.js b/client/get-json-from-file-table.js new file mode 100644 index 00000000..ea90f366 --- /dev/null +++ b/client/get-json-from-file-table.js @@ -0,0 +1,44 @@ +/* global DOM */ +/** + * Функция генерирует JSON из html-таблицы файлов и + * используеться при первом заходе в корень + */ +export const getJsonFromFileTable = () => { + const Info = DOM.CurrentInfo; + const path = DOM.getCurrentDirPath(); + const infoFiles = Info.files || []; + + const files = infoFiles + .filter(notParent) + .map(parse); + + const fileTable = { + path, + files, + }; + + return fileTable; +}; + +const notParent = (current) => { + const name = DOM.getCurrentName(current); + return name !== '..'; +}; + +const parse = (current) => { + const name = DOM.getCurrentName(current); + const size = DOM.getCurrentSize(current); + const owner = DOM.getCurrentOwner(current); + const mode = DOM.getCurrentMode(current); + const date = DOM.getCurrentDate(current); + const type = DOM.getCurrentType(current); + + return { + name, + size, + mode, + owner, + date, + type, + }; +}; diff --git a/client/input.js b/client/input.js deleted file mode 100644 index 2c8c072e..00000000 --- a/client/input.js +++ /dev/null @@ -1,80 +0,0 @@ -'use strict'; - -const currify = require('currify/legacy'); - -const isType = currify((type, object, name) => { - return typeof object[name] === type; -}); - -const isBool = isType('boolean'); - -module.exports.getElementByName = getElementByName; - -function getElementByName(selector, element) { - const str = `[data-name="js-${selector}"]`; - - return element - .querySelector(str); -} - -module.exports.getName = (element) => { - const name = element - .getAttribute('data-name') - .replace(/^js-/, ''); - - return name; -}; - -module.exports.convert = (config) => { - const result = Object.assign({}, config); - const array = Object.keys(result); - - array - .filter(isBool(result)) - .forEach((name) => { - const item = result[name]; - - result[name] = setState(item); - }); - - return result; -}; - -function setState(state) { - if (state) - return ' checked'; - - return ''; -} - -module.exports.getValue = (name, element) => { - const el = getElementByName(name, element); - const type = el.type; - - switch(type) { - case 'checkbox': - return el.checked; - - case 'number': - return Number(el.value); - - default: - return el.value; - } -}; - -module.exports.setValue = (name, value, element) => { - const el = getElementByName(name, element); - const type = el.type; - - switch(type) { - case 'checkbox': - el.checked = value; - break; - - default: - el.value = value; - break; - } -}; - diff --git a/client/key/binder.js b/client/key/binder.js new file mode 100644 index 00000000..6aec97ea --- /dev/null +++ b/client/key/binder.js @@ -0,0 +1,15 @@ +export const createBinder = () => { + let binded = false; + + return { + isBind() { + return binded; + }, + setBind() { + binded = true; + }, + unsetBind() { + binded = false; + }, + }; +}; diff --git a/client/key/binder.spec.js b/client/key/binder.spec.js new file mode 100644 index 00000000..f9d54fdd --- /dev/null +++ b/client/key/binder.spec.js @@ -0,0 +1,28 @@ +import {test} from 'supertape'; +import {createBinder} from './binder.js'; + +test('client: key: binder: isBind: default', (t) => { + const binder = createBinder(); + + t.notOk(binder.isBind(), 'should not be bind by default'); + t.end(); +}); + +test('client: key: binder: setBind', (t) => { + const binder = createBinder(); + + binder.setBind(); + + t.ok(binder.isBind(), 'should be bind'); + t.end(); +}); + +test('client: key: binder: unsetBind', (t) => { + const binder = createBinder(); + + binder.setBind(); + binder.unsetBind(); + + t.notOk(binder.isBind(), 'should not be bind'); + t.end(); +}); diff --git a/client/key/index.js b/client/key/index.js index cafd351e..283a7f11 100644 --- a/client/key/index.js +++ b/client/key/index.js @@ -1,479 +1,544 @@ /* global CloudCmd, DOM */ +import clipboard from '@cloudcmd/clipboard'; +import {fullstore} from 'fullstore'; +import * as Events from '#dom/events'; +import * as Buffer from '../dom/buffer.js'; +import * as KEY from './key.js'; +import _vim from './vim/index.js'; +import setCurrentByChar from './set-current-by-char.js'; +import {createBinder} from './binder.js'; -'use strict'; - -const Info = DOM.CurrentInfo; - -const exec = require('execon'); -const clipboard = require('@cloudcmd/clipboard'); - -const Events = require('../dom/events'); -const Buffer = require('../dom/buffer'); -const KEY = require('./key'); -const vim = require('./vim'); -const setCurrentByChar = require('./set-current-by-char'); -const fullstore = require('fullstore/legacy'); const Chars = fullstore(); +const toggleVim = (keyCode, overrides = {}) => { + const {_config, config} = overrides; + + if (!config('vim') && keyCode === KEY.ESC) + _config('vim', true); +}; + +const isUndefined = (a) => typeof a === 'undefined'; + Chars([]); -KeyProto.prototype = KEY; -CloudCmd.Key = KeyProto; +const {assign} = Object; +const binder = createBinder(); -function KeyProto() { - let Binded; +const bind = () => { + Events.addKey(listener, true); + binder.setBind(); +}; + +export const Key = assign(binder, KEY, { + bind, +}); + +export const _listener = listener; + +function getChar(event) { + /* + * event.keyIdentifier deprecated in chrome v51 + * but event.key is absent in chrome <= v51 + */ + const { + key, + shift, + keyCode, + keyIdentifier, + } = event; - const Key = this; + const char = key || fromCharCode(keyIdentifier); + const symbol = getSymbol(shift, keyCode); - this.isBind = () => { - return Binded; - }; - - this.setBind = () => { - Binded = true; - }; - - this.unsetBind = () => { - Binded = false; - }; - - this.bind = () => { - Events.addKey(listener); - Binded = true; - }; - - function getChar(event) { - /* - * event.keyIdentifier deprecated in chrome v51 - * but event.key is absent in chrome <= v51 - */ - - if (event.key) - return event.key; - - return fromCharCode(event.keyIdentifier); - } - - function listener(event) { - const keyCode = event.keyCode; - const alt = event.altKey; - const ctrl = event.ctrlKey; - const shift = event.shiftKey; - const meta = event.metaKey; - const isBetween = keyCode >= KEY.ZERO && keyCode <= KEY.Z; - const isNumpad = /Numpad/.test(event.code); - - let char = getChar(event); - let isSymbol = ~['.', '_', '-', '+', '='].indexOf(char); - - if (!isSymbol) { - isSymbol = getSymbol(shift, keyCode); - - if (isSymbol) - char = isSymbol; - } - - if (!Key.isBind()) - return; - - const isVim = CloudCmd.config('vim'); - - if (!isVim && !isNumpad && !alt && !ctrl && !meta && (isBetween || isSymbol)) - return setCurrentByChar(char, Chars); - - Chars([]); - switchKey(event); - - if (isVim) - vim(char, event); - } - - function getSymbol(shift, keyCode) { - switch (keyCode) { - case KEY.DOT: - return '.'; - - case KEY.HYPHEN: - return shift ? '_' : '-'; - - case KEY.EQUAL: - return shift ? '+' : '='; - } - } - - function fromCharCode(keyIdentifier) { - const code = keyIdentifier.substring(2); - const hex = parseInt(code, 16); - const char = String.fromCharCode(hex); - - return char; - } - - function switchKey(event) { - let i, isSelected, prev, next; - let current = Info.element; - let dataName; - - const name = Info.name; - - const {Operation} = CloudCmd; - const panel = Info.panel; - const path = Info.path; - const isDir = Info.isDir; - - const keyCode = event.keyCode; - const alt = event.altKey; - const shift = event.shiftKey; - const ctrl = event.ctrlKey; - const meta = event.metaKey; - const ctrlMeta = ctrl || meta; - - if (current) { - prev = current.previousSibling; - next = current.nextSibling; - } - - switch (keyCode) { - case Key.TAB: - DOM.changePanel(); - event.preventDefault(); - break; - - case Key.INSERT: - DOM .toggleSelectedFile(current) - .setCurrentFile(next); - break; - - case Key.INSERT_MAC: - DOM .toggleSelectedFile(current) - .setCurrentFile(next); - break; - - case Key.DELETE: - if (shift) - Operation.show('delete:silent'); - else - Operation.show('delete'); - break; - - case Key.ASTERISK: - DOM.toggleAllSelectedFiles(current); - break; - - case Key.PLUS: - DOM.expandSelection(); - event.preventDefault(); - break; - - case Key.MINUS: - DOM.shrinkSelection(); - event.preventDefault(); - break; - - case Key.F1: - CloudCmd.Help.show(); - event.preventDefault(); - break; - - case Key.F2: - DOM.renameCurrent(current); - break; - - case Key.F3: - if (shift) - CloudCmd.Markdown.show(path); - else if (ctrlMeta) - CloudCmd.sortPanel('name'); - else - CloudCmd.View.show(); - - event.preventDefault(); - break; - - case Key.F4: - if (shift) - CloudCmd.EditFileVim.show(); - else - CloudCmd.EditFile.show(); - - event.preventDefault(); - break; - - case Key.F5: - if (ctrlMeta) - CloudCmd.sortPanel('date'); - else if (alt) - Operation.show('pack'); - else - Operation.show('copy'); - - event.preventDefault(); - break; - - case Key.F6: - if (ctrlMeta) - CloudCmd.sortPanel('size'); - else - Operation.show('move'); - - event.preventDefault(); - break; - - case Key.F7: - if (shift) - DOM.promptNewFile(); - else - DOM.promptNewDir(); - - event.preventDefault(); - break; - - case Key.F8: - Operation.show('delete'); - event.preventDefault(); - break; - - case Key.F9: - if (alt) - Operation.show('extract'); - else - CloudCmd.Menu.show(); - event.preventDefault(); - break; - - case Key.F10: - CloudCmd.Config.show(); - event.preventDefault(); - break; - - case Key.TRA: - event.preventDefault(); - - if (shift) - return CloudCmd.Terminal.show(); - - CloudCmd.Konsole.show(); - break; - - case KEY.BRACKET_CLOSE: - CloudCmd.Konsole.show(); - event.preventDefault(); - break; - - case Key.SPACE: - if (!isDir || name === '..') - isSelected = true; - else - isSelected = DOM.isSelected(current); - - exec.if(isSelected, () => { - DOM.toggleSelectedFile(current); - }, (callback) => { - DOM.loadCurrentSize(callback, current); - }); - - event.preventDefault(); - break; - - case Key.U: - if (ctrlMeta) { - DOM.swapPanels(); - event.preventDefault(); - } - break; - - /* navigation on file table: * - * in case of pressing button 'up', * - * select previous row */ - case Key.UP: - if (shift) - DOM.toggleSelectedFile(current); - - DOM.setCurrentFile(prev); - event.preventDefault(); - break; - - /* in case of pressing button 'down', * - * select next row */ - case Key.DOWN: - if (shift) - DOM.toggleSelectedFile(current); - - DOM.setCurrentFile(next); - event.preventDefault(); - break; - - case Key.LEFT: - if (!alt) - return; - - event.preventDefault(); - - dataName = Info.panel.getAttribute('data-name'); - - if (dataName === 'js-right') - DOM.duplicatePanel(); - - break; - - case Key.RIGHT: - if (!alt) - return; - - event.preventDefault(); - - dataName = Info.panel.getAttribute('data-name'); - - if (dataName === 'js-left') - DOM.duplicatePanel(); - - break; - - /* in case of pressing button 'Home', * - * go to top element */ - case Key.HOME: - DOM.setCurrentFile(Info.first); - event.preventDefault(); - break; - - /* in case of pressing button 'End', select last element */ - case Key.END: - DOM.setCurrentFile(Info.last); - event.preventDefault(); - break; - - /* если нажали клавишу page down проматываем экран */ - case Key.PAGE_DOWN: - DOM.scrollByPages(panel, 1); - - for (i = 0; i < 30; i++) { - if (!current.nextSibling) - break; - - current = current.nextSibling; - } - - DOM.setCurrentFile(current); - event.preventDefault(); - break; - - /* если нажали клавишу page up проматываем экран */ - case Key.PAGE_UP: - DOM.scrollByPages(panel, -1); - - for (i = 0; i < 30; i++) { - if (!current.previousSibling) - break; - - current = current.previousSibling; - } - - DOM.setCurrentFile(current); - event.preventDefault(); - break; - - /* open directory */ - case Key.ENTER: - if (Info.isDir) - CloudCmd.loadDir({ - path: path === '/' ? '/' : path + '/' - }); - break; - - case Key.BACKSPACE: - CloudCmd.goToParentDir(); - event.preventDefault(); - break; - - case Key.BACKSLASH: - if (ctrlMeta) - CloudCmd.loadDir({ - path: '/' - }); - break; - - case Key.A: - if (ctrlMeta) { - DOM.selectAllFiles(); - event.preventDefault(); - } - - break; - - case Key.G: - if (alt) { - DOM.goToDirectory(); - event.preventDefault(); - } - - break; - - case Key.M: - if (ctrlMeta) { - CloudCmd.EditNames.show(); - event.preventDefault(); - } - - break; - - case Key.P: - if (!ctrlMeta) - return; - - event.preventDefault(); - clipboard - .writeText(Info.dirPath) - .catch(CloudCmd.log); - - break; - /** - * обновляем страницу, - * загружаем содержимое каталога - * при этом данные берём всегда с - * сервера, а не из кэша - * (обновляем кэш) - */ - case Key.R: - if (ctrlMeta) { - CloudCmd.log('reloading page...\n'); - CloudCmd.refresh(); - event.preventDefault(); - } - break; - - case Key.C: - if (ctrlMeta) - Buffer.copy(); - break; - - case Key.X: - if (ctrlMeta) - Buffer.cut(); - break; - - case Key.V: - if (ctrlMeta) - Buffer.paste(); - break; - - case Key.Z: - if (ctrlMeta) - Buffer.clear(); - break; - - /* чистим хранилище */ - case Key.D: - if (ctrlMeta) { - CloudCmd.log('clearing storage...'); - - DOM.Storage.clear(() => { - CloudCmd.log('storage cleared'); - }); - - event.preventDefault(); - } - break; - } - } + return [symbol, char]; } +async function listener(event, overrides = {}) { + const { + config = CloudCmd.config, + _config = CloudCmd._config, + switchKey = _switchKey, + vim = _vim, + } = overrides; + + const {keyCode} = event; + + // strange chrome bug calls listener twice + // in second time event misses a lot fields + if (isUndefined(event.altKey)) + return; + + const alt = event.altKey; + const ctrl = event.ctrlKey; + const meta = event.metaKey; + const isBetween = keyCode >= KEY.ZERO && keyCode <= KEY.Z; + const isNumpad = /Numpad/.test(event.code); + + const [symbol, char] = getChar(event); + + if (!binder.isBind()) + return; + + toggleVim(keyCode, { + config, + _config, + }); + + const isVim = config('vim'); + + if (!isVim && !isNumpad && !alt && !ctrl && !meta && (isBetween || symbol)) + return setCurrentByChar(char, Chars); + + Chars([]); + await switchKey(event); + + if (keyCode >= KEY.F1 && keyCode <= KEY.F10) + return; + + if (isVim) + vim(char, event); +} + +function getSymbol(shift, keyCode) { + switch(keyCode) { + case KEY.DOT: + return '.'; + + case KEY.HYPHEN: + return shift ? '_' : '-'; + + case KEY.EQUAL: + return shift ? '+' : '='; + } + + return ''; +} + +function fromCharCode(keyIdentifier) { + const code = keyIdentifier.substring(2); + const hex = parseInt(code, 16); + + return String.fromCharCode(hex); +} + +async function _switchKey(event) { + const Info = DOM.CurrentInfo; + let i; + let isSelected; + let prev; + let next; + let current = Info.element; + let dataName; + + const { + name, + panel, + path, + isDir, + } = Info; + + const { + Operation, + changeDir, + config, + } = CloudCmd; + + const {keyCode} = event; + + const alt = event.altKey; + const shift = event.shiftKey; + const ctrl = event.ctrlKey; + const meta = event.metaKey; + const ctrlMeta = ctrl || meta; + + if (current) { + prev = current.previousSibling; + next = current.nextSibling; + } + + switch(keyCode) { + case KEY.TAB: + DOM.changePanel(); + event.preventDefault(); + break; + + case KEY.INSERT: + DOM + .toggleSelectedFile(current) + .setCurrentFile(next); + break; + + case KEY.INSERT_MAC: + DOM + .toggleSelectedFile(current) + .setCurrentFile(next); + break; + + case KEY.DELETE: + if (shift) + Operation.show('delete:silent'); + else + Operation.show('delete'); + + break; + + case KEY.ASTERISK: + DOM.toggleAllSelectedFiles(current); + break; + + case KEY.PLUS: + DOM.expandSelection(); + event.preventDefault(); + break; + + case KEY.MINUS: + DOM.shrinkSelection(); + event.preventDefault(); + break; + + case KEY.F1: + CloudCmd.Help.show(); + event.preventDefault(); + break; + + case KEY.F2: + CloudCmd.UserMenu.show(); + break; + + case KEY.F3: + event.preventDefault(); + + if (Info.isDir) + await changeDir(path); + else if (shift) + CloudCmd.View.show(null, { + raw: true, + }); + else if (ctrlMeta) + CloudCmd.sortPanel('name'); + else + CloudCmd.View.show(); + + break; + + case KEY.F4: + if (config('vim')) + CloudCmd.EditFileVim.show(); + else + CloudCmd.EditFile.show(); + + event.preventDefault(); + break; + + case KEY.F5: + if (ctrlMeta) + CloudCmd.sortPanel('date'); + else if (alt) + Operation.show('pack'); + else + Operation.show('copy'); + + event.preventDefault(); + break; + + case KEY.F6: + if (ctrlMeta) + CloudCmd.sortPanel('size'); + else if (shift) + DOM.renameCurrent(current); + else + Operation.show('move'); + + event.preventDefault(); + break; + + case KEY.F7: + if (shift) + DOM.promptNewFile(); + else + DOM.promptNewDir(); + + event.preventDefault(); + break; + + case KEY.F8: + Operation.show('delete'); + event.preventDefault(); + break; + + case KEY.F9: + if (alt) + Operation.show('extract'); + else + CloudCmd.Menu.show(); + + event.preventDefault(); + break; + + case KEY.F10: + CloudCmd.Config.show(); + event.preventDefault(); + break; + + case KEY.TRA: + event.preventDefault(); + + if (shift) + return CloudCmd.Terminal.show(); + + CloudCmd.Konsole.show(); + break; + + case KEY.BRACKET_CLOSE: + CloudCmd.Konsole.show(); + event.preventDefault(); + break; + + case KEY.SPACE: + event.preventDefault(); + + if (!isDir || name === '..') + isSelected = true; + else + isSelected = DOM.isSelected(current); + + if (!isSelected) + await DOM.loadCurrentSize(current); + + DOM.toggleSelectedFile(current); + + break; + + case KEY.U: + if (ctrlMeta) { + DOM.swapPanels(); + event.preventDefault(); + } + + break; + + /* navigation on file table: * + * in case of pressing button 'up', * + * select previous row */ + case KEY.UP: + if (shift) + DOM.toggleSelectedFile(current); + + DOM.setCurrentFile(prev); + event.preventDefault(); + break; + + /* in case of pressing button 'down', * + * select next row */ + case KEY.DOWN: + if (shift) + DOM.toggleSelectedFile(current); + + DOM.setCurrentFile(next); + event.preventDefault(); + break; + + case KEY.LEFT: + if (!alt) + return; + + event.preventDefault(); + + dataName = Info.panel.getAttribute('data-name'); + + if (dataName === 'js-right') + DOM.duplicatePanel(); + + break; + + case KEY.RIGHT: + if (!alt) + return; + + event.preventDefault(); + + dataName = Info.panel.getAttribute('data-name'); + + if (dataName === 'js-left') + DOM.duplicatePanel(); + + break; + + /* in case of pressing button 'Home', * + * go to top element */ + case KEY.HOME: + DOM.setCurrentFile(Info.first); + event.preventDefault(); + break; + + /* in case of pressing button 'End', select last element */ + case KEY.END: + DOM.setCurrentFile(Info.last); + event.preventDefault(); + break; + + /* если нажали клавишу page down проматываем экран */ + case KEY.PAGE_DOWN: + DOM.scrollByPages(panel, 1); + + for (i = 0; i < 30; i++) { + if (!current.nextSibling) + break; + + current = current.nextSibling; + } + + DOM.setCurrentFile(current); + event.preventDefault(); + break; + + /* если нажали клавишу page up проматываем экран */ + case KEY.PAGE_UP: + DOM.scrollByPages(panel, -1); + + for (i = 0; i < 30; i++) { + if (!current.previousSibling) + break; + + current = current.previousSibling; + } + + DOM.setCurrentFile(current); + event.preventDefault(); + break; + + case KEY.ENTER: + if (Info.isDir) + await changeDir(path); + else + CloudCmd.View.show(); + + break; + + case KEY.BACKSPACE: + CloudCmd.goToParentDir(); + event.preventDefault(); + break; + + case KEY.BACKSLASH: + if (ctrlMeta) + await changeDir('/'); + + break; + + case KEY.A: + if (ctrlMeta) { + DOM.selectAllFiles(); + event.preventDefault(); + } + + break; + + case KEY.G: + if (alt) { + DOM.goToDirectory(); + event.preventDefault(); + } + + break; + + case KEY.L: + if (ctrlMeta && shift) { + CloudCmd.logOut(); + event.preventDefault(); + } + + break; + + case KEY.M: + if (ctrlMeta) { + if (config('vim')) + CloudCmd.EditNamesVim.show(); + else + CloudCmd.EditNames.show(); + + event.preventDefault(); + } + + break; + + case KEY.P: + if (!ctrlMeta) + return; + + event.preventDefault(); + clipboard + .writeText(Info.dirPath) + .catch(CloudCmd.log); + + break; + + /** + * обновляем страницу, + * загружаем содержимое каталога + * при этом данные берём всегда с + * сервера, а не из кэша + * (обновляем кэш) + */ + case KEY.R: + if (ctrlMeta) { + CloudCmd.log('reloading page...\n'); + CloudCmd.refresh(); + event.preventDefault(); + } + + break; + + case KEY.C: + if (ctrlMeta) + Buffer.copy(); + + break; + + case KEY.X: + if (ctrlMeta) + Buffer.cut(); + + break; + + case KEY.V: + if (ctrlMeta) + Buffer.paste(); + + break; + + case KEY.Z: + if (ctrlMeta) + Buffer.clear(); + + break; + + case KEY.COLON: + CloudCmd.CommandLine.show(); + event.preventDefault(); + break; + + /* чистим хранилище */ + case KEY.D: + if (ctrlMeta) { + CloudCmd.log('clearing storage...'); + await DOM.Storage.clear(); + CloudCmd.log('storage cleared'); + event.preventDefault(); + } + + break; + + case KEY.DOT: + if (meta && shift) { + const showDotFiles = !CloudCmd.config('showDotFiles'); + CloudCmd._config('showDotFiles', showDotFiles); + CloudCmd.refresh(); + await DOM.RESTful.Config.write({ + showDotFiles, + }); + } + + break; + } +} diff --git a/client/key/index.spec.js b/client/key/index.spec.js new file mode 100644 index 00000000..bec92b31 --- /dev/null +++ b/client/key/index.spec.js @@ -0,0 +1,56 @@ +import autoGlobals from 'auto-globals'; +import supertape from 'supertape'; +import {ESC} from './key.js'; +import {Key, _listener} from './index.js'; +import {getDOM, getCloudCmd} from './vim/globals.fixture.js'; + +const test = autoGlobals(supertape); +const {stub} = supertape; + +globalThis.DOM = getDOM(); +globalThis.CloudCmd = getCloudCmd(); + +test('cloudcmd: client: key: enable vim', async (t) => { + const vim = stub(); + const config = stub().returns(true); + const _config = stub(); + + const event = { + keyCode: ESC, + key: 'Escape', + altKey: false, + }; + + Key.setBind(); + + await _listener(event, { + vim, + config, + _config, + switchKey: stub(), + }); + + t.calledWith(vim, ['Escape', event]); + t.end(); +}); + +test('cloudcmd: client: key: disable vim', async (t) => { + const _config = stub(); + const config = stub(); + + const event = { + keyCode: ESC, + key: 'Escape', + altKey: false, + }; + + Key.setBind(); + await _listener(event, { + config, + _config, + switchKey: stub(), + }); + + t.calledWith(_config, ['vim', true]); + t.end(); +}); diff --git a/client/key/key.js b/client/key/key.js index 197e521e..6772e34c 100644 --- a/client/key/key.js +++ b/client/key/key.js @@ -1,81 +1,58 @@ -'use strict'; - -module.exports = { - BACKSPACE : 8, - TAB : 9, - ENTER : 13, - ESC : 27, - - SPACE : 32, - PAGE_UP : 33, - PAGE_DOWN : 34, - END : 35, - HOME : 36, - - LEFT : 37, - UP : 38, - RIGHT : 39, - DOWN : 40, - - INSERT : 45, - DELETE : 46, - - ZERO : 48, - - SEMICOLON : 52, - - COLON : 54, - - A : 65, - - C : 67, - D : 68, - - G : 71, - - J : 74, - K : 75, - - M : 77, - - O : 79, - P : 80, - Q : 81, - R : 82, - S : 83, - T : 84, - U : 85, - - V : 86, - - X : 88, - - Z : 90, - - INSERT_MAC : 96, - - ASTERISK : 106, - PLUS : 107, - MINUS : 109, - - F1 : 112, - F2 : 113, - F3 : 114, - F4 : 115, - F5 : 116, - F6 : 117, - F7 : 118, - F8 : 119, - F9 : 120, - F10 : 121, - - EQUAL : 187, - HYPHEN : 189, - DOT : 190, - SLASH : 191, - TRA : 192, /* Typewritten Reverse Apostrophe (`) */ - BACKSLASH : 220, - - BRACKET_CLOSE: 221 -}; - +export const BACKSPACE = 8; +export const TAB = 9; +export const ENTER = 13; +export const CAPSLOCK = 20; +export const ESC = 27; +export const SPACE = 32; +export const PAGE_UP = 33; +export const PAGE_DOWN = 34; +export const END = 35; +export const HOME = 36; +export const LEFT = 37; +export const UP = 38; +export const RIGHT = 39; +export const DOWN = 40; +export const INSERT = 45; +export const DELETE = 46; +export const ZERO = 48; +export const SEMICOLON = 52; +export const A = 65; +export const C = 67; +export const D = 68; +export const G = 71; +export const J = 74; +export const K = 75; +export const L = 76; +export const M = 77; +export const O = 79; +export const P = 80; +export const Q = 81; +export const R = 82; +export const S = 83; +export const T = 84; +export const U = 85; +export const V = 86; +export const X = 88; +export const Z = 90; +export const INSERT_MAC = 96; +export const ASTERISK = 106; +export const PLUS = 107; +export const MINUS = 109; +export const F1 = 112; +export const F2 = 113; +export const F3 = 114; +export const F4 = 115; +export const F5 = 116; +export const F6 = 117; +export const F7 = 118; +export const F8 = 119; +export const F9 = 120; +export const F10 = 121; +export const COLON = 186; +export const EQUAL = 187; +export const HYPHEN = 189; +export const DOT = 190; +export const SLASH = 191; +export const TRA = 192; +export const BACKSLASH = 220; +export const BRACKET_CLOSE = 221; diff --git a/client/key/set-current-by-char.js b/client/key/set-current-by-char.js index d010fa86..92764f11 100644 --- a/client/key/set-current-by-char.js +++ b/client/key/set-current-by-char.js @@ -1,23 +1,20 @@ /* global DOM */ +import {escapeRegExp} from '#common/util'; -'use strict'; - -const Info = DOM.CurrentInfo; -const {escapeRegExp} = require('../../common/util'); - -module.exports = function setCurrentByChar(char, charStore) { +export default function setCurrentByChar(char, charStore) { + const Info = DOM.CurrentInfo; let firstByName; let skipCount = 0; - let setted = false; + let set = false; let i = 0; const escapeChar = escapeRegExp(char); - const regExp = new RegExp('^' + escapeChar + '.*$', 'i'); + const regExp = new RegExp(`^${escapeChar}.*$`, 'i'); const {files} = Info; const chars = charStore(); const n = chars.length; - while(i < n && char === chars[i]) + while (i < n && char === chars[i]) i++; if (!i) @@ -31,19 +28,21 @@ module.exports = function setCurrentByChar(char, charStore) { const isTest = (a) => regExp.test(a); const isRoot = (a) => a === '..'; const not = (f) => (a) => !f(a); + const setCurrent = (name) => { const byName = DOM.getCurrentByName(name); if (!skipCount) { - setted = true; + set = true; DOM.setCurrentFile(byName); - return true; - } else { - if (skipN === skipCount) - firstByName = byName; - --skipCount; + return true; } + + if (skipN === skipCount) + firstByName = byName; + + --skipCount; }; names @@ -51,9 +50,8 @@ module.exports = function setCurrentByChar(char, charStore) { .filter(not(isRoot)) .some(setCurrent); - if (!setted) { + if (!set) { DOM.setCurrentFile(firstByName); charStore([char]); } -}; - +} diff --git a/client/key/vim/find.js b/client/key/vim/find.js index bbf1d380..e8db825a 100644 --- a/client/key/vim/find.js +++ b/client/key/vim/find.js @@ -1,41 +1,36 @@ -'use strict'; -/* global DOM */ - -const fullstore = require('fullstore/legacy'); -const limier = require('limier/legacy'); -const Info = DOM.CurrentInfo; +import {fullstore} from 'fullstore'; +import limier from 'limier'; const searchStore = fullstore([]); const searchIndex = fullstore(0); -module.exports.find = (value) => { - const names = Info.files.map(DOM.getCurrentName); +export const find = (value, names) => { const result = limier(value, names); searchStore(result); searchIndex(0); - DOM.setCurrentByName(result[0]); + return result; }; -module.exports.findNext = () => { +export const findNext = () => { const names = searchStore(); const index = next(searchIndex(), names.length); searchIndex(index); - DOM.setCurrentByName(names[searchIndex()]); + return names[searchIndex()]; }; -module.exports.findPrevious = () => { +export const findPrevious = () => { const names = searchStore(); const index = previous(searchIndex(), names.length); searchIndex(index); - DOM.setCurrentByName(names[index]); + return names[index]; }; -module.exports._next = next; -module.exports._previous = previous; +export const _next = next; +export const _previous = previous; function next(index, length) { if (index === length - 1) @@ -50,4 +45,3 @@ function previous(index, length) { return --index; } - diff --git a/client/key/vim/find.spec.js b/client/key/vim/find.spec.js new file mode 100644 index 00000000..191a3652 --- /dev/null +++ b/client/key/vim/find.spec.js @@ -0,0 +1,55 @@ +import test from 'supertape'; +import {getDOM} from './globals.fixture.js'; +import { + _next, + _previous, + find, + findNext, + findPrevious, +} from './find.js'; + +globalThis.DOM = getDOM(); + +test('cloudcmd: client: vim: _next', (t) => { + const result = _next(1, 2); + + t.notOk(result, 'should return 0'); + t.end(); +}); + +test('cloudcmd: client: vim: _next: increment', (t) => { + const result = _next(0, 2); + + t.equal(result, 1, 'should return 1'); + t.end(); +}); + +test('cloudcmd: client: vim: _previous', (t) => { + const result = _previous(0, 2); + + t.equal(result, 1, 'should return 1'); + t.end(); +}); + +test('cloudcmd: client: vim: _previous: decrement', (t) => { + const result = _previous(1, 2); + + t.equal(result, 0, 'should return 0'); + t.end(); +}); + +test('cloudcmd: client: vim: findNext: after find', (t) => { + find('a', ['alpha', 'beta', 'apple']); + const result = findNext(); + + t.equal(result, 'beta', 'should return next found name'); + t.end(); +}); + +test('cloudcmd: client: vim: findPrevious: after find', (t) => { + find('a', ['alpha', 'beta', 'apple']); + const result = findPrevious(); + + t.equal(result, 'apple', 'should return previous found name'); + t.end(); +}); diff --git a/test/client/key/vim/globals.js b/client/key/vim/globals.fixture.js similarity index 62% rename from test/client/key/vim/globals.js rename to client/key/vim/globals.fixture.js index 81994ecf..c49894d7 100644 --- a/test/client/key/vim/globals.js +++ b/client/key/vim/globals.fixture.js @@ -1,20 +1,19 @@ -'use strict'; +const noop = () => {}; -module.exports.getDOM = () => { - const resolve = Promise.resolve.bind(Promise); +export const getDOM = () => { + const prompt = Promise.resolve.bind(Promise); const CurrentInfo = { element: {}, files: [], }; - const noop = () => {}; const Buffer = { copy: noop, paste: noop, }; const Dialog = { - prompt: resolve + prompt, }; return { @@ -28,16 +27,20 @@ module.exports.getDOM = () => { getCurrentName: noop, setCurrentByName: noop, toggleSelectedFile: noop, + prompNewDirectory: noop, + promptNewFile: noop, }; }; -module.exports.getCloudCmd = () => { +export const getCloudCmd = () => { const show = () => {}; return { - Operation: { - show - } + Operation: { + show, + }, + + config: noop, + _config: noop, }; }; - diff --git a/client/key/vim/index.js b/client/key/vim/index.js index 1c14d764..981f6f19 100644 --- a/client/key/vim/index.js +++ b/client/key/vim/index.js @@ -1,199 +1,167 @@ -'use strict'; -/* global CloudCmd, DOM */ +import vim from './vim.js'; +import * as finder from './find.js'; +import { + setCurrent, + selectFileNotParent, +} from './set-current.js'; -const KEY = require('../key'); -const Info = DOM.CurrentInfo; -const Dialog = DOM.Dialog; - -const fullstore = require('fullstore/legacy'); -const store = fullstore(''); -const visual = fullstore(false); -const { - find, - findNext, - findPrevious, -} = require('./find'); - -const TITLE = 'Cloud Commander'; - -const stopVisual = () => { - visual(false); +export default (key, event, overrides = {}) => { + const defaults = { + ...globalThis.DOM, + ...globalThis.CloudCmd, + }; + + const deps = { + ...defaults, + ...overrides, + }; + + const operations = getOperations(event, deps); + + vim(key, operations, deps); }; -const end = () => { - store(''); +const getOperations = (event, deps) => { + const { + Info = globalThis.DOM.CurrentInfo, + CloudCmd = globalThis.CloudCmd, + Operation, + unselectFiles, + setCurrentFile, + setCurrentByName, + getCurrentName, + prompt = globalThis.DOM.Dialog.prompt, + preventDefault = event?.preventDefault?.bind(event), + stopImmediatePropagation = event?.preventDefault?.bind(event), + promptNewFile = globalThis.DOM.promptNewFile, + toggleSelectedFile, + Buffer = {}, + createFindNext = _createFindNext, + createFindPrevious = _createFindPrevious, + createMakeFile = _createMakeFile, + renameCurrent, + } = deps; + + return { + makeFile: createMakeFile({ + promptNewFile, + preventDefault, + stopImmediatePropagation, + }), + findNext: createFindNext({ + setCurrentByName, + }), + findPrevious: createFindPrevious({ + setCurrentByName, + }), + escape: unselectFiles, + rename: () => { + event.preventDefault(); + renameCurrent(); + }, + remove: () => { + Operation.show('delete'); + }, + operationCopy: () => { + event.preventDefault(); + Operation.show('copy'); + }, + operationMove: () => { + event.preventDefault(); + Operation.show('move'); + }, + + makeDirectory: () => { + event.stopImmediatePropagation(); + event.preventDefault(); + globalThis.DOM.promptNewDir(); + }, + + terminal: () => { + CloudCmd.Terminal.show(); + }, + + edit: () => { + CloudCmd.EditFileVim.show(); + }, + + copy: () => { + Buffer.copy(); + unselectFiles(); + }, + + select: () => { + const current = Info.element; + toggleSelectedFile(current); + }, + + paste: Buffer.paste, + + moveNext: ({count, isVisual, isDelete}) => { + setCurrent('next', { + count, + isVisual, + isDelete, + }, { + Info, + setCurrentFile, + unselectFiles, + Operation, + }); + }, + + movePrevious: ({count, isVisual, isDelete}) => { + setCurrent('previous', { + count, + isVisual, + isDelete, + }, { + Info, + setCurrentFile, + unselectFiles, + Operation, + }); + }, + + find: async () => { + preventDefault(); + const [, value] = await prompt('Find', ''); + + if (!value) + return; + + const names = Info.files.map(getCurrentName); + const [result] = finder.find(value, names); + + setCurrentByName(result); + }, + }; }; -const rmFirst = (a) => { - return a - .split('') - .slice(1) - .join(''); +export const selectFile = selectFileNotParent; + +const _createFindPrevious = (overrides = {}) => () => { + const {setCurrentByName} = overrides; + const name = finder.findPrevious(); + + setCurrentByName(name); }; -module.exports = (key, event) => { - const current = Info.element; - const keyCode = event.keyCode; - const prevStore = store(); +const _createFindNext = (overrides = {}) => () => { + const {setCurrentByName} = overrides; + const name = finder.findNext(); - const value = store(prevStore.concat(key)); - - if (keyCode === KEY.ENTER) - return end(); - - if (keyCode === KEY.ESC) { - DOM.unselectFiles(); - visual(false); - return end(); - } - - if (key === 'j') { - move('next', { - prevStore, - current, - }); - - return end(); - } - - if (key === 'k') { - move('previous', { - prevStore, - current, - }); - - return end(); - } - - if (/gg/.test(value)) { - move('previous', { - current, - prevStore, - max: Infinity, - }); - - return end(); - } - - if (key === 'd' && (visual() || prevStore === 'd')) { - CloudCmd.Operation.show('delete'); - stopVisual(); - return end(); - } - - if (key === 'G') { - move('next', { - current, - prevStore, - max: Infinity, - }); - - return end(); - } - - if (key === 'y') { - if (!visual()) - return end(); - - DOM.Buffer.copy(); - stopVisual(); - DOM.unselectFiles(); - return end(); - } - - if (/^p$/i.test(key)) { - DOM.Buffer.paste(); - return end(); - } - - if (/^v$/i.test(key)) { - DOM.toggleSelectedFile(current); - visual(!visual()); - - return end(); - } - - if (key === '/') { - event.preventDefault(); - - Dialog.prompt(TITLE, 'Find', '', {cancel: false}) - .then(find); - - return end(); - } - - if (key === 'n') { - findNext(); - return end(); - } - - if (key === 'N') { - findPrevious(); - return end(); - } + setCurrentByName(name); }; -module.exports.selectFile = selectFile; - -function move(sibling, {max, current, prevStore}) { - const isDelete = prevStore[0] === 'd'; +const _createMakeFile = (overrides = {}) => () => { + const { + promptNewFile, + stopImmediatePropagation, + preventDefault, + } = overrides; - if (isDelete) { - visual(true); - prevStore = rmFirst(prevStore); - } - - const n = max || getNumber(prevStore); - - if (isNaN(n)) - return; - - setCurrent({ - n, - current, - sibling, - visual: visual(), - }); - - if (isDelete) - CloudCmd.Operation.show('delete'); -} - -function getNumber(value) { - if (!value) - return 1; - - if (value === 'g') - return 1; - - return parseInt(value); -} - -function selectFile(current) { - const name = DOM.getCurrentName(current); - - if (name === '..') - return; - - DOM.selectFile(current); -} - -function setCurrent({n, current, visual, sibling}) { - const select = visual ? selectFile : DOM.unselectFile; - - select(current); - - const position = `${sibling}Sibling`; - for (let i = 0; i < n; i++) { - const next = current[position]; - - if (!next) - break; - - current = next; - select(current); - } - - DOM.setCurrentFile(current); -} - + stopImmediatePropagation(); + preventDefault(); + promptNewFile(); +}; diff --git a/client/key/vim/index.spec.js b/client/key/vim/index.spec.js new file mode 100644 index 00000000..231c6577 --- /dev/null +++ b/client/key/vim/index.spec.js @@ -0,0 +1,756 @@ +import {test, stub} from 'supertape'; +import {getDOM, getCloudCmd} from './globals.fixture.js'; +import vim, {selectFile as vimSelectFile} from './index.js'; +import * as finder from './find.js'; + +globalThis.DOM = getDOM(); +globalThis.CloudCmd = getCloudCmd(); + +const {assign} = Object; +const {DOM} = globalThis; +const {Buffer} = DOM; + +test('cloudcmd: client: key: set next file: no', (t) => { + const element = {}; + const setCurrentFile = stub(); + const unselectFiles = stub(); + + const Info = { + element, + }; + + vim('j', {}, { + Info, + setCurrentFile, + unselectFiles, + }); + + t.calledWith(setCurrentFile, [element], 'should set next file'); + t.end(); +}); + +test('cloudcmd: client: key: set next file current: j', async (t) => { + const nextSibling = 'hello'; + const element = { + nextSibling, + }; + + const setCurrentFile = stub(); + + const Info = { + element, + }; + + await vim('j', {}, { + Info, + setCurrentFile, + unselectFiles: stub(), + }); + + t.calledWith(setCurrentFile, [nextSibling], 'should set next file'); + t.end(); +}); + +test('cloudcmd: client: key: set next file current: mjj', (t) => { + const nextSibling = 'hello'; + const element = { + nextSibling, + }; + + const setCurrentFile = stub(); + + const Info = { + element, + }; + + const deps = { + Info, + setCurrentFile, + unselectFiles: stub(), + }; + + vim('m', {}, deps); + vim('j', {}, deps); + vim('j', {}, deps); + + t.calledWith(setCurrentFile, [nextSibling], 'should set next file'); + t.end(); +}); + +test('cloudcmd: client: key: set next file current: g', (t) => { + const nextSibling = 'hello'; + const element = { + nextSibling, + }; + + const setCurrentFile = stub(); + + const Info = { + element, + }; + + const deps = { + Info, + setCurrentFile, + unselectFiles: stub(), + }; + + vim('g', {}, deps); + vim('j', {}, deps); + + t.calledWith(setCurrentFile, [nextSibling], 'should ignore g'); + t.end(); +}); + +test('cloudcmd: client: key: set +2 file current', (t) => { + const last = {}; + const setCurrentFile = stub(); + const element = {}; + + const Info = { + element, + }; + + const deps = { + setCurrentFile, + Info, + unselectFiles: stub(), + }; + + const event = {}; + + vim('2', event, deps); + vim('j', event, deps); + + t.calledWith(setCurrentFile, [last], 'should set next file'); + t.end(); +}); + +test('cloudcmd: client: key: select +2 files from current before delete', (t) => { + const last = {}; + const nextSibling = { + nextSibling: last, + }; + + const element = { + nextSibling, + }; + + const setCurrentFile = stub(); + + const Info = { + element, + }; + + const Operation = { + show: stub(), + }; + + const selectFile = stub(); + const getCurrentName = stub().returns('x'); + + const event = {}; + + const deps = { + Info, + setCurrentFile, + selectFile, + getCurrentName, + Operation, + }; + + vim('d', event, deps); + vim('2', event, deps); + vim('j', event, deps); + + t.calledWith(setCurrentFile, [last], 'should set next file'); + t.end(); +}); + +test('cloudcmd: client: key: delete +2 files from current', (t) => { + const last = {}; + const nextSibling = { + nextSibling: last, + }; + + const element = { + nextSibling, + }; + + const setCurrentFile = stub(); + const show = stub(); + + const deps = { + Info: { + element, + }, + Operation: { + show, + }, + setCurrentFile, + selectFile: stub(), + getCurrentName: stub().returns('x'), + unselectFiles: stub(), + }; + + const event = {}; + + vim('d', event, deps); + vim('2', event, deps); + vim('j', event, deps); + + t.calledWith(show, ['delete'], 'should call delete'); + t.end(); +}); + +test('cloudcmd: client: key: set previous file current', (t) => { + const previousSibling = 'hello'; + const element = { + previousSibling, + }; + + const setCurrentFile = stub(); + const unselectFiles = stub(); + + const Info = { + element, + }; + + const deps = { + Info, + setCurrentFile, + unselectFiles, + }; + + vim('k', {}, deps); + + t.calledWith(setCurrentFile, [previousSibling], 'should set previous file'); + t.end(); +}); + +test('cloudcmd: client: key: copy: no', (t) => { + const copy = stub(); + + vim('y', {}, { + unselectFiles: stub(), + Buffer: { + copy, + }, + }); + + t.notCalled(copy, 'should not copy files'); + t.end(); +}); + +test('cloudcmd: client: key: copy', (t) => { + const copy = stub(); + const Info = { + element: {}, + }; + + const toggleSelectedFile = stub(); + const unselectFiles = stub(); + + const deps = { + Info, + unselectFiles, + toggleSelectedFile, + Buffer: { + copy, + }, + }; + + vim('v', {}, deps); + vim('y', {}, deps); + + t.calledWithNoArgs(copy, 'should copy files'); + t.end(); +}); + +test('cloudcmd: client: key: copy: unselectFiles', (t) => { + const unselectFiles = stub(); + const Info = { + element: {}, + }; + + const toggleSelectedFile = stub(); + + const deps = { + Info, + unselectFiles, + toggleSelectedFile, + Buffer: { + copy: stub(), + }, + }; + + vim('v', {}, deps); + vim('y', {}, deps); + + t.calledWithNoArgs(unselectFiles, 'should unselect files'); + t.end(); +}); + +test('cloudcmd: client: key: paste', (t) => { + const paste = stub(); + + Buffer.paste = paste; + + vim('p', {}, { + Buffer, + }); + + t.calledWithNoArgs(paste, 'should paste files'); + t.end(); +}); + +test('cloudcmd: client: key: selectFile: ..', (t) => { + const getCurrentName = stub().returns('..'); + const selectFile = stub(); + const current = {}; + + vimSelectFile(current, { + selectFile, + getCurrentName, + }); + + t.notCalled(selectFile, 'should not call selectFile'); + t.end(); +}); + +test('cloudcmd: client: key: selectFile', (t) => { + const selectFile = stub(); + const getCurrentName = stub().returns('x'); + const current = {}; + + vimSelectFile(current, { + selectFile, + getCurrentName, + }); + + t.calledWith(selectFile, [current], 'should call selectFile'); + t.end(); +}); + +test('cloudcmd: client: key: set last file current: shift + g', async (t) => { + const last = 'last'; + const nextSibling = { + nextSibling: last, + }; + + const element = { + nextSibling, + }; + + const setCurrentFile = stub(); + + await vim('G', {}, { + Info: { + element, + }, + setCurrentFile, + unselectFiles: stub(), + }); + + t.calledWith(setCurrentFile, [last], 'should set last file'); + t.end(); +}); + +test('cloudcmd: client: key: set last file current: $', (t) => { + const last = 'last'; + const nextSibling = { + nextSibling: last, + }; + + const element = { + nextSibling, + }; + + const setCurrentFile = stub(); + + vim('$', {}, { + Info: { + element, + }, + setCurrentFile, + unselectFiles: stub(), + }); + + t.calledWith(setCurrentFile, [last], 'should set last file'); + t.end(); +}); + +test('cloudcmd: client: key: set first file current: gg', (t) => { + const first = 'first'; + const previousSibling = { + previousSibling: first, + }; + + const element = { + previousSibling, + }; + + const Operation = { + show: stub(), + }; + + const unselectFiles = stub(); + const setCurrentFile = stub(); + + const deps = { + Operation, + unselectFiles, + setCurrentFile, + Info: { + element, + }, + }; + + vim('g', {}, deps); + vim('g', {}, deps); + + t.calledWith(setCurrentFile, [first], 'should set first file'); + t.end(); +}); + +test('cloudcmd: client: key: set first file current: ^', async (t) => { + const first = 'first'; + const previousSibling = { + previousSibling: first, + }; + + const element = { + previousSibling, + }; + + const Operation = { + show: stub(), + }; + + const unselectFiles = stub(); + const setCurrentFile = stub(); + + const deps = { + setCurrentFile, + Info: { + element, + }, + unselectFiles, + Operation, + }; + + await vim('^', {}, deps); + + t.calledWith(setCurrentFile, [first], 'should set first file'); + t.end(); +}); + +test('cloudcmd: client: key: visual', (t) => { + const element = {}; + const toggleSelectedFile = stub(); + + const Info = { + element, + }; + + vim('v', {}, { + Info, + toggleSelectedFile, + }); + + t.calledWith(toggleSelectedFile, [element], 'should toggle selection'); + t.end(); +}); + +test('cloudcmd: client: key: ESC', (t) => { + const element = {}; + const unselectFiles = stub(); + + const Info = { + element, + }; + + vim('Escape', null, { + Info, + unselectFiles, + }); + + t.calledWithNoArgs(unselectFiles, 'should toggle selection'); + t.end(); +}); + +test('cloudcmd: client: key: Enter', async (t) => { + const nextSibling = 'hello'; + const element = { + nextSibling, + }; + + const unselectFiles = stub(); + const setCurrentFile = stub(); + + const Info = { + element, + }; + + await vim('Enter', null, { + Info, + setCurrentFile, + unselectFiles, + }); + + await vim('j', null, { + Info, + setCurrentFile, + unselectFiles, + }); + + t.calledWith(setCurrentFile, [nextSibling], 'should set next file'); + t.end(); +}); + +test('cloudcmd: client: key: /', (t) => { + const preventDefault = stub(); + const element = {}; + + const Info = { + element, + files: [], + }; + + const getCurrentName = stub().returns(''); + + const event = { + preventDefault, + }; + + const prompt = stub().returns([]); + + vim('/', event, { + getCurrentName, + Info, + prompt, + }); + + t.calledWithNoArgs(preventDefault); + t.end(); +}); + +test('cloudcmd: client: find', (t) => { + assign(DOM.Dialog, { + prompt: stub().returns([]), + }); + + const setCurrentByName = stub(); + + assign(DOM, { + setCurrentByName, + }); + + const event = { + preventDefault: stub(), + }; + + vim('/', event); + + t.notCalled(setCurrentByName); + t.end(); +}); + +test('cloudcmd: client: key: n', (t) => { + const findNext = stub(); + const createFindNext = stub().returns(findNext); + + const event = {}; + + vim('n', event, { + createFindNext, + }); + + t.calledWithNoArgs(findNext, 'should call findNext'); + t.end(); +}); + +test('cloudcmd: client: key: N', (t) => { + const findPrevious = stub(); + const createFindPrevious = stub().returns(findPrevious); + const event = {}; + + vim('N', event, { + createFindPrevious, + }); + + t.calledWithNoArgs(findPrevious); + t.end(); +}); + +test('cloudcmd: client: key: make directory', async (t) => { + const {DOM} = globalThis; + + assign(DOM, { + promptNewDir: stub(), + }); + + const event = { + stopImmediatePropagation: stub(), + preventDefault: stub(), + }; + + await vim('m', event); + await vim('d', event); + + t.calledWithNoArgs(DOM.promptNewDir); + t.end(); +}); + +test('cloudcmd: client: key: make file', (t) => { + const promptNewFile = stub(); + + const event = { + stopImmediatePropagation: stub(), + preventDefault: stub(), + }; + + vim('m', event); + vim('f', event, { + promptNewFile, + }); + + t.calledWithNoArgs(promptNewFile); + t.end(); +}); + +test('cloudcmd: client: vim: terminal', (t) => { + const CloudCmd = { + Terminal: { + show: stub(), + }, + }; + + const event = {}; + + vim('t', event, { + CloudCmd, + }); + vim('t', event, { + CloudCmd, + }); + + t.calledWithNoArgs(CloudCmd.Terminal.show); + t.end(); +}); + +test('cloudcmd: client: vim: edit', async (t) => { + globalThis.DOM = getDOM(); + globalThis.CloudCmd = getCloudCmd(); + + const {CloudCmd} = globalThis; + + assign(CloudCmd, { + EditFileVim: { + show: stub(), + }, + }); + + const event = {}; + + await vim('e', event); + + t.calledWithNoArgs(CloudCmd.EditFileVim.show); + t.end(); +}); + +test('cloudcmd: client: vim: rename', async (t) => { + const DOM = getDOM(); + const renameCurrent = stub(); + + assign(DOM, { + renameCurrent, + }); + + const event = { + preventDefault: stub(), + }; + + await vim('rr', event, DOM); + + t.calledWithNoArgs(renameCurrent); + t.end(); +}); + +test('cloudcmd: client: key: cc: operationCopy', (t) => { + const show = stub(); + const preventDefault = stub(); + + const Operation = { + show, + }; + + const event = { + preventDefault, + }; + + vim('c', event, { + Operation, + }); + + vim('c', event, { + Operation, + }); + + t.calledWith(show, ['copy'], 'should show copy operation'); + t.end(); +}); + +test('cloudcmd: client: key: mm: operationMove', (t) => { + const show = stub(); + const preventDefault = stub(); + + const Operation = { + show, + }; + + const event = { + preventDefault, + }; + + vim('m', event, { + Operation, + }); + + vim('m', event, { + Operation, + }); + + t.calledWith(show, ['move'], 'should show move operation'); + t.end(); +}); + +test('cloudcmd: client: key: n: findNext: real', (t) => { + const setCurrentByName = stub(); + + finder.find('a', ['alpha', 'beta', 'apple']); + + const event = {}; + + vim('n', event, { + setCurrentByName, + }); + + t.calledWith(setCurrentByName, ['beta'], 'should set current by next found name'); + t.end(); +}); + +test('cloudcmd: client: key: N: findPrevious: real', (t) => { + const setCurrentByName = stub(); + + finder.find('a', ['alpha', 'beta', 'apple']); + + const event = {}; + + vim('N', event, { + setCurrentByName, + }); + + t.calledWith(setCurrentByName, ['apple'], 'should set current by previous found name'); + t.end(); +}); diff --git a/client/key/vim/set-current.js b/client/key/vim/set-current.js new file mode 100644 index 00000000..a2fc8646 --- /dev/null +++ b/client/key/vim/set-current.js @@ -0,0 +1,33 @@ +/* global DOM */ +export function selectFileNotParent(current, {getCurrentName, selectFile} = DOM) { + const name = getCurrentName(current); + + if (name === '..') + return; + + selectFile(current); +} + +export const setCurrent = (sibling, {count, isVisual, isDelete}, {Info, setCurrentFile, unselectFiles, Operation}) => { + let current = Info.element; + const select = isVisual ? selectFileNotParent : unselectFiles; + + select(current); + + const position = `${sibling}Sibling`; + + for (let i = 0; i < count; i++) { + const next = current[position]; + + if (!next) + break; + + current = next; + select(current); + } + + setCurrentFile(current); + + if (isDelete) + Operation.show('delete'); +}; diff --git a/client/key/vim/vim.js b/client/key/vim/vim.js new file mode 100644 index 00000000..95a27caf --- /dev/null +++ b/client/key/vim/vim.js @@ -0,0 +1,220 @@ +import {fullstore} from 'fullstore'; + +const store = fullstore(''); +const visual = fullstore(false); + +const stopVisual = () => { + visual(false); +}; + +const end = () => { + store(''); +}; + +const rmFirst = (a) => { + return a + .split('') + .slice(1) + .join(''); +}; + +const noop = () => {}; + +export default (key, operations = {}) => { + const prevStore = store(); + const isVisual = visual(); + const value = store(prevStore.concat(key)); + + const { + escape = noop, + moveNext = noop, + movePrevious = noop, + remove = noop, + copy = noop, + paste = noop, + select = noop, + find = noop, + findNext = noop, + findPrevious = noop, + makeFile = noop, + makeDirectory = noop, + terminal = noop, + edit = noop, + operationCopy = noop, + operationMove = noop, + rename = noop, + } = operations; + + if (key === 'Enter') + return end(); + + if (key === 'Escape') { + visual(false); + escape(); + + return end(); + } + + if (key === 'j' || key === 'w') { + const { + count, + isDelete, + isVisual, + } = handleDelete(prevStore); + + !isNaN(count) && moveNext({ + count, + isVisual, + isDelete, + }); + + return end(); + } + + if (key === 'k' || key === 'b') { + const { + count, + isDelete, + isVisual, + } = handleDelete(prevStore); + + !isNaN(count) && movePrevious({ + count, + isVisual, + isDelete, + }); + + return end(); + } + + if (value === 'gg' || key === '^') { + const {isDelete, isVisual} = handleDelete(prevStore); + + movePrevious({ + count: Infinity, + isVisual, + isDelete, + }); + + return end(); + } + + if (value === 'md') { + makeDirectory(); + return end(); + } + + if (value === 'tt') { + terminal(); + return end(); + } + + if (value === 'e') { + edit(); + return end(); + } + + if (value === 'cc') { + operationCopy(); + return end(); + } + + if (value === 'mm') { + operationMove(); + return end(); + } + + if (value === 'mf') { + makeFile(); + return end(); + } + + if (value === 'rr') { + rename(); + return end(); + } + + if (key === 'd' && (visual() || prevStore === 'd')) { + stopVisual(); + remove(); + + return end(); + } + + if (key === 'G' || key === '$') { + moveNext({ + count: Infinity, + isVisual, + }); + + return end(); + } + + if (key === 'y') { + if (!visual()) + return end(); + + stopVisual(); + copy(); + + return end(); + } + + if (/^p$/i.test(key)) { + paste(); + return end(); + } + + if (/^v$/i.test(key)) { + visual(!visual()); + select(); + + return end(); + } + + if (key === '/') { + find(); + return end(); + } + + if (key === 'n') { + findNext(); + return end(); + } + + if (key === 'N') { + findPrevious(); + return end(); + } + + if (key === ' ') + return end(); +}; + +function handleDelete(prevStore) { + const isDelete = prevStore[0] === 'd'; + + if (isDelete) { + visual(true); + prevStore = rmFirst(prevStore); + } + + const count = getNumber(prevStore); + const isVisual = visual(); + + return { + count, + isDelete, + isVisual, + }; +} + +function getNumber(value) { + if (!value) + return 1; + + if (value === 'g') + return 1; + + return parseInt(value); +} diff --git a/client/key/vim/vim.spec.js b/client/key/vim/vim.spec.js new file mode 100644 index 00000000..02fd52d4 --- /dev/null +++ b/client/key/vim/vim.spec.js @@ -0,0 +1,100 @@ +import {test, stub} from 'supertape'; +import vim from './vim.js'; + +test('vim: no operations', (t) => { + const result = vim('hello', {}); + + t.notOk(result); + t.end(); +}); + +test('vim: space', (t) => { + const moveNext = stub(); + + vim(' '); + vim('j', { + moveNext, + }); + + const args = [{ + count: 1, + isDelete: false, + isVisual: false, + }]; + + t.calledWith(moveNext, args); + t.end(); +}); + +test('vim: ^', (t) => { + const movePrevious = stub(); + + vim('^', { + movePrevious, + }); + + const expected = { + count: Infinity, + isVisual: false, + isDelete: false, + }; + + t.calledWith(movePrevious, [expected], 'should call movePrevious'); + t.end(); +}); + +test('vim: cc', (t) => { + const operationCopy = stub(); + + vim('cc', { + operationCopy, + }); + + t.calledWithNoArgs(operationCopy); + t.end(); +}); + +test('vim: mm', (t) => { + const operationMove = stub(); + + vim('mm', { + operationMove, + }); + + t.calledWithNoArgs(operationMove); + t.end(); +}); + +test('vim: w', (t) => { + const moveNext = stub(); + + vim('w', { + moveNext, + }); + + const expected = { + count: 1, + isVisual: false, + isDelete: false, + }; + + t.calledWith(moveNext, [expected], 'should call moveNext'); + t.end(); +}); + +test('vim: b', (t) => { + const movePrevious = stub(); + + vim('b', { + movePrevious, + }); + + const expected = { + count: 1, + isVisual: false, + isDelete: false, + }; + + t.calledWith(movePrevious, [expected], 'should call movePrevious'); + t.end(); +}); diff --git a/client/listeners/get-index.js b/client/listeners/get-index.js index d7870608..45ce85e8 100644 --- a/client/listeners/get-index.js +++ b/client/listeners/get-index.js @@ -1,11 +1,10 @@ -'use strict'; +import currify from 'currify'; -module.exports = (array, item) => { +export const getIndex = currify((array, item) => { const index = array.indexOf(item); if (!~index) return 0; return index; -}; - +}); diff --git a/test/client/listeners/get-index.js b/client/listeners/get-index.spec.js similarity index 65% rename from test/client/listeners/get-index.js rename to client/listeners/get-index.spec.js index 16dd6999..0380cdc1 100644 --- a/test/client/listeners/get-index.js +++ b/client/listeners/get-index.spec.js @@ -1,9 +1,5 @@ -'use strict'; - -const test = require('tape'); - -const dir = '../../../client/listeners'; -const getIndex = require(`${dir}/get-index`); +import test from 'supertape'; +import {getIndex} from './get-index.js'; test('cloudcmd: client: listeners: getIndex: not found', (t) => { const array = ['hello']; @@ -13,9 +9,11 @@ test('cloudcmd: client: listeners: getIndex: not found', (t) => { }); test('cloudcmd: client: listeners: getIndex: found', (t) => { - const array = ['hello', 'world']; + const array = [ + 'hello', + 'world', + ]; t.equal(getIndex(array, 'world'), 1, 'should return index'); t.end(); }); - diff --git a/client/listeners/get-range.js b/client/listeners/get-range.js index ef1ea0f8..839c2287 100644 --- a/client/listeners/get-range.js +++ b/client/listeners/get-range.js @@ -1,6 +1,4 @@ -'use strict'; - -module.exports = (indexFrom, indexTo, files) => { +export const getRange = (indexFrom, indexTo, files) => { if (indexFrom < indexTo) return files.slice(indexFrom, indexTo + 1); @@ -9,4 +7,3 @@ module.exports = (indexFrom, indexTo, files) => { return [files[indexFrom]]; }; - diff --git a/client/listeners/get-range.spec.js b/client/listeners/get-range.spec.js new file mode 100644 index 00000000..77c950f4 --- /dev/null +++ b/client/listeners/get-range.spec.js @@ -0,0 +1,52 @@ +import test from 'supertape'; +import {getRange} from './get-range.js'; + +test('cloudcmd: client: listeners: getRange: direct', (t) => { + const expected = [ + 'hello', + 'world', + ]; + + const files = [ + ...expected, + 'how', + 'come', + ]; + + const result = getRange(0, 1, files); + + t.deepEqual(result, expected, 'should return range'); + t.end(); +}); + +test('cloudcmd: client: listeners: getRange: reverse', (t) => { + const expected = [ + 'hello', + 'world', + ]; + + const files = [ + ...expected, + 'how', + 'come', + ]; + + const result = getRange(1, 0, files); + + t.deepEqual(result, expected, 'should return range'); + t.end(); +}); + +test('cloudcmd: client: listeners: getRange: one', (t) => { + const expected = ['hello']; + const files = [ + ...expected, + 'how', + 'come', + ]; + + const result = getRange(0, 0, files); + + t.deepEqual(result, expected, 'should return range'); + t.end(); +}); diff --git a/client/listeners/index.js b/client/listeners/index.js index 7011e78b..babc1e0d 100644 --- a/client/listeners/index.js +++ b/client/listeners/index.js @@ -1,38 +1,30 @@ /* global DOM, CloudCmd */ - -'use strict'; - -const exec = require('execon'); -const itype = require('itype/legacy'); -const currify = require('currify/legacy'); -const getRange = require('./get-range'); - -const getIndex = currify(require('./get-index')); - -const uploadFiles = require('../dom/upload-files'); - -const { - FS, - apiURL -} = require('../../common/cloudfunc'); +import exec from 'execon'; +import itype from 'itype'; +import currify from 'currify'; +import {tryToCatch} from 'try-to-catch'; +import clipboard from '@cloudcmd/clipboard'; +import * as Events from '#dom/events'; +import {uploadFiles} from '#dom/upload-files'; +import {FS} from '#common/cloudfunc'; +import {getRange} from './get-range.js'; +import {getIndex} from './get-index.js'; const NBSP_REG = RegExp(String.fromCharCode(160), 'g'); const SPACE = ' '; -module.exports.init = () => { +export async function init() { contextMenu(); dragndrop(); unload(); pop(); resize(); - config(); header(); -}; - -CloudCmd.Listeners = module.exports; + await config(); +} const unselect = (event) => { - const isMac = /Mac/.test(window.navigator.platform); + const isMac = /Mac/.test(globalThis.navigator.platform); const { shiftKey, metaKey, @@ -46,23 +38,16 @@ const unselect = (event) => { }; const execAll = currify((funcs, event) => { - funcs.forEach((fn) => { + for (const fn of funcs) fn(event); - }); }); -const Info = DOM.CurrentInfo; -const Storage = DOM.Storage; -const Events = DOM.Events; const EventsFiles = { mousedown: exec.with(execIfNotUL, setCurrentFileByEvent), - click: execAll([ - onClick, - unselect, - ]), + click: execAll([onClick, exec.with(execIfNotMobile, unselect)]), dragstart: exec.with(execIfNotUL, onDragStart), dblclick: exec.with(execIfNotUL, onDblClick), - touchstart: exec.with(execIfNotUL, onTouch) + touchstart: exec.with(execIfNotUL, onTouch), }; let EXT; @@ -70,6 +55,7 @@ let EXT; function header() { const fm = DOM.getFM(); const isDataset = (el) => el.dataset; + const isPanel = (el) => { return /^js-(left|right)$/.test(el.dataset.name); }; @@ -81,8 +67,7 @@ function header() { if (parent.dataset.name !== 'js-fm-header') return; - const name = (el.dataset.name || '') - .replace('js-', ''); + const name = (el.dataset.name || '').replace('js-', ''); if (!/^(name|size|date)$/.test(name)) return; @@ -103,44 +88,48 @@ function getPath(el, path = []) { return getPath(el.parentElement, path.concat(el)); } -function config() { - DOM.Files.get('config', (e, config) => { - const type = config && config.packer; - EXT = DOM.getPackerExt(type); - }); +async function config() { + const [, config] = await tryToCatch(DOM.Files.get, 'config'); + const type = config?.packer; + + EXT = DOM.getPackerExt(type); } -module.exports.initKeysPanel = () => { +export const initKeysPanel = () => { const keysElement = DOM.getById('js-keyspanel'); if (!keysElement) return; - Events.addClick(keysElement, ({target}) => { - const id = target.id; + Events.addClick(keysElement, (event) => { + const {target} = event; + const {id} = target; + const operation = (name) => { - const Operation = CloudCmd.Operation; - const fn = Operation.show.bind(null, name); + const {Operation} = CloudCmd; - return fn; + return Operation.show.bind(null, name); }; const clickFuncs = { - 'f1' : CloudCmd.Help.show, - 'f2' : DOM.renameCurrent, - 'f3' : CloudCmd.View.show, - 'f4' : CloudCmd.EditFile.show, - 'f5' : operation('copy'), - 'f6' : operation('move'), - 'f7' : DOM.promptNewDir, - 'f8' : operation('delete'), - 'f9' : CloudCmd.Menu.show, - 'f10' : CloudCmd.Config.show, - '~' : CloudCmd.Konsole.show, - 'shift~' : CloudCmd.Terminal.show, - 'contact' : CloudCmd.Contact.show, + 'f1': CloudCmd.Help.show, + 'f2': CloudCmd.UserMenu.show, + 'f3': CloudCmd.View.show, + 'f4': CloudCmd.EditFile.show, + 'f5': operation('copy'), + 'f6': operation('move'), + 'f7': DOM.promptNewDir, + 'f8': operation('delete'), + 'f9': () => { + event.stopPropagation(); + CloudCmd.Menu.show(); + }, + 'f10': CloudCmd.Config.show, + '~': CloudCmd.Konsole.show, + 'shift~': CloudCmd.Terminal.show, + 'contact': CloudCmd.Contact.show, }; - + exec(clickFuncs[id]); }); }; @@ -149,10 +138,10 @@ const getPanel = (side) => { if (!itype.string(side)) return side; - return DOM.getByDataName('js-' + side); + return DOM.getByDataName(`js-${side}`); }; -module.exports.setOnPanel = (side) => { +export const setOnPanel = (side) => { const panel = getPanel(side); const filesElement = DOM.getByDataName('js-files', panel); @@ -168,41 +157,45 @@ function getPathListener(panel) { } function isNoCurrent(panel) { + const Info = DOM.CurrentInfo; const infoPanel = Info.panel; + + if (!infoPanel) + return true; + const namePanel = panel.getAttribute('data-name'); const nameInfoPanel = infoPanel.getAttribute('data-name'); return namePanel !== nameInfoPanel; } -function decodePath(path){ +function decodePath(path) { const url = CloudCmd.HOST; - const prefix = CloudCmd.PREFIX; + const {prefix} = CloudCmd; const prefixReg = RegExp('^' + prefix + FS); return decodeURI(path) .replace(url, '') - .replace(prefixReg, '') - // browser doesn't replace % -> %25% do it for him + .replace(prefixReg, '') // browser doesn't replace % -> %25% do it for him .replace('%%', '%25%') .replace(NBSP_REG, SPACE) || '/'; } - -function onPathElementClick(panel, event) { +async function onPathElementClick(panel, event) { + const Info = DOM.CurrentInfo; event.preventDefault(); const element = event.target; const attr = element.getAttribute('data-name'); const noCurrent = isNoCurrent(panel); - if (attr === 'js-clear-storage') - return Storage.clear(); + if (attr === 'js-copy-path') + return copyPath(element); if (attr === 'js-refresh') return CloudCmd.refresh({ panel, - noCurrent + noCurrent, }); if (attr !== 'js-path-link') @@ -211,13 +204,26 @@ function onPathElementClick(panel, event) { const {href} = element; const path = decodePath(href); - CloudCmd.loadDir({ - path, + await CloudCmd.changeDir(path, { isRefresh: false, - panel: noCurrent ? panel : Info.panel + panel: noCurrent ? panel : Info.panel, }); } +function copyPath(el) { + clipboard + .writeText(el.parentElement.title) + .then(CloudCmd.log) + .catch(CloudCmd.log); +} + +function execIfNotMobile(callback, event) { + const isMobile = DOM.getCSSVar('is-mobile'); + + if (!isMobile) + callback(event); +} + function execIfNotUL(callback, event) { const {target} = event; const {tagName} = target; @@ -227,30 +233,27 @@ function execIfNotUL(callback, event) { } function onClick(event) { - const ctrl = event.ctrlKey; - - if (!ctrl) - event.preventDefault(); - + event.preventDefault(); changePanel(event.target); } function toggleSelect(key, files) { - const isMac = /Mac/.test(window.navigator.platform); + const isMac = /Mac/.test(globalThis.navigator.platform); if (!key) throw Error('key should not be undefined!'); const [file] = files; - if (isMac && key.meta || key.ctrl) + if (isMac && key.meta) return DOM.toggleSelectedFile(file); if (key.shift) - return files.forEach(DOM.selectFile); + return files.map(DOM.selectFile); } function changePanel(element) { + const Info = DOM.CurrentInfo; const {panel} = Info; const files = DOM.getByDataName('js-files', panel); const ul = getULElement(element); @@ -259,21 +262,20 @@ function changePanel(element) { DOM.changePanel(); } -function onDblClick(event) { +async function onDblClick(event) { + event.preventDefault(); + const current = getLIElement(event.target); const isDir = DOM.isCurrentIsDir(current); const path = DOM.getCurrentPath(current); - if (isDir) { - CloudCmd.loadDir({ - path: path === '/' ? '/' : path + '/' - }); - - event.preventDefault(); - } + if (!isDir) + return CloudCmd.View.show(); + + await CloudCmd.changeDir(path); } -function onTouch(event) { +async function onTouch(event) { const current = getLIElement(event.target); const isDir = DOM.isCurrentIsDir(current); @@ -285,11 +287,7 @@ function onTouch(event) { if (!isCurrent) return; - CloudCmd.loadDir({ - path: DOM.getCurrentPath(current) - }); - - event.preventDefault(); + await CloudCmd.changeDir(DOM.getCurrentPath(current)); } /* @@ -297,8 +295,10 @@ function onTouch(event) { * in Chrome (HTML5) */ function onDragStart(event) { + const Info = DOM.CurrentInfo; + const {prefixURL} = CloudCmd; const element = getLIElement(event.target); - const isDir = Info.isDir; + const {isDir} = Info; let link = DOM.getCurrentLink(element); let name = DOM.getCurrentName(element); @@ -307,13 +307,15 @@ function onDragStart(event) { name += EXT; link = document.createElement('a'); link.textContent = name; - link.href = apiURL + '/pack' + Info.path + EXT; + link.href = prefixURL + '/pack' + Info.path + EXT; } - event.dataTransfer.setData('DownloadURL', - 'application/octet-stream' + ':' + - name + ':' + - link); + event.dataTransfer.setData( + 'DownloadURL', + 'application/octet-stream' + ':' + name + + ':' + + link, + ); } function getLIElement(element) { @@ -334,13 +336,14 @@ function getULElement(element) { } function setCurrentFileByEvent(event) { + const Info = DOM.CurrentInfo; const BUTTON_LEFT = 0; const key = { alt: event.altKey, ctrl: event.ctrlKey, meta: event.metaKey, - shift: event.shiftKey + shift: event.shiftKey, }; const element = getLIElement(event.target); @@ -377,7 +380,7 @@ function contextMenu() { Events.addOnce('contextmenu', fm, (event) => { CloudCmd.Menu.show({ x: event.clientX, - y: event.clientY + y: event.clientY, }); }); @@ -388,21 +391,17 @@ function contextMenu() { function dragndrop() { const panels = DOM.getByClassAll('panel'); - const select = () => { - [...panels].forEach((panel) => { - panel.classList.add('selected-panel'); - }); + const select = ({target}) => { + target.classList.add('selected-panel'); }; - const unselect = () => { - [...panels].forEach((panel) => { - panel.classList.remove('selected-panel'); - }); + const unselect = ({target}) => { + target.classList.remove('selected-panel'); }; const onDrop = (event) => { - const files = event.dataTransfer.files; - const items = event.dataTransfer.items; + const {files, items} = event.dataTransfer; + const {length: filesCount} = files; event.preventDefault(); @@ -411,7 +410,10 @@ function dragndrop() { return uploadFiles(files); const isFile = (item) => item.kind === 'file'; - const dirFiles = [...items].filter(isFile); + + const dirFiles = Array + .from(items) + .filter(isFile); if (dirFiles.length) return DOM.uploadDirectory(dirFiles); @@ -423,13 +425,13 @@ function dragndrop() { }; /** - * In Mac OS Chrome dropEffect = 'none' + * In macOS Chrome dropEffect = 'none' * so drop do not firing up when try * to upload file from download bar */ const onDragOver = (event) => { - const dataTransfer = event.dataTransfer; - const effectAllowed = dataTransfer.effectAllowed; + const {dataTransfer} = event; + const {effectAllowed} = dataTransfer; if (/move|linkMove/.test(effectAllowed)) dataTransfer.dropEffect = 'move'; @@ -439,19 +441,18 @@ function dragndrop() { event.preventDefault(); }; - Events.add('dragenter', select); - Events.add(['dragleave', 'drop'], unselect); - - [...panels].forEach((panel) => { - Events.add('dragover', panel, onDragOver) - .add('drop', panel, onDrop); - }); + for (const panel of panels) + Events + .add('dragover', panel, onDragOver) + .add('drop', panel, onDrop) + .add('dragenter', select) + .add(['dragleave', 'drop'], unselect); } function unload() { - DOM.Events.add(['unload', 'beforeunload'], (event) => { - const Key = CloudCmd.Key; - const isBind = Key && Key.isBind(); + Events.add(['unload', 'beforeunload'], (event) => { + const {Key} = CloudCmd; + const isBind = Key?.isBind(); if (isBind) return; @@ -462,15 +463,15 @@ function unload() { } function pop() { - Events.add('popstate', ({state}) => { + Events.add('popstate', async ({state}) => { const path = (state || '').replace(FS, ''); if (!path) return CloudCmd.route(location.hash); const history = false; - CloudCmd.loadDir({ - path, + + await CloudCmd.changeDir(path, { history, }); }); @@ -478,7 +479,8 @@ function pop() { function resize() { Events.add('resize', () => { - const is = window.innerWidth < CloudCmd.MIN_ONE_PANEL_WIDTH; + const Info = DOM.CurrentInfo; + const is = globalThis.innerWidth < CloudCmd.MIN_ONE_PANEL_WIDTH; if (!is) return; @@ -498,4 +500,3 @@ function resize() { DOM.changePanel(); }); } - diff --git a/client/load-module.js b/client/load-module.js new file mode 100644 index 00000000..7fc2c328 --- /dev/null +++ b/client/load-module.js @@ -0,0 +1,56 @@ +/* global CloudCmd */ +import exec from 'execon'; +import {tryToCatch} from 'try-to-catch'; +import {js as loadJS} from 'load.js'; +import pascalCase from 'just-pascal-case'; + +const noJS = (a) => a.replace(/.js$/, ''); + +/** + * function load modules + * @params = {name, path, func, dobefore, arg} + */ +export const loadModule = (params) => { + if (!params) + return; + + const {path} = params; + + const name = path && noJS(pascalCase(path)); + const doBefore = params.dobefore; + + if (CloudCmd[name]) + return; + + CloudCmd[name] = async () => { + exec(doBefore); + + const {DIR_MODULES} = CloudCmd; + const pathFull = `${DIR_MODULES}/${path}.js`; + + await loadJS(pathFull); + const newModule = async (f) => f && f(); + const module = CloudCmd[name]; + + Object.assign(newModule, module); + + CloudCmd[name] = newModule; + CloudCmd.log('init', name); + + await module.init(); + + return newModule; + }; + + CloudCmd[name].show = async (...args) => { + CloudCmd.log('show', name, args); + const m = CloudCmd[name]; + + const [e, a] = await tryToCatch(m); + + if (e) + return; + + return await a.show(...args); + }; +}; diff --git a/client/modules/cloud.js b/client/modules/cloud.js index 466ba987..cfe0d708 100644 --- a/client/modules/cloud.js +++ b/client/modules/cloud.js @@ -1,27 +1,32 @@ /* global CloudCmd, filepicker */ - -'use strict'; - -CloudCmd.Cloud = CloudProto; - -const exec = require('execon'); -const currify = require('currify/legacy'); +import exec from 'execon'; +import currify from 'currify'; +import load from 'load.js'; +import {ajax} from '#dom/load'; +import * as Files from '#dom/files'; +import * as Images from '#dom/images'; const {log} = CloudCmd; -const load = require('../dom/load'); -const Files = require('../dom/files'); -const Images = require('../dom/images'); - const upload = currify(_upload); -function CloudProto(callback) { - loadFiles(callback); +const Name = 'Cloud'; + +CloudCmd[Name] = { + init, + uploadFile, + saveFile, +}; + +export async function init() { + const [modules] = await loadFiles(); + const {key} = modules.data.FilePicker; - return module.exports; + filepicker.setKey(key); + Images.hide(); } -module.exports.uploadFile = (filename, data) => { +export function uploadFile(filename, data) { const mimetype = ''; filepicker.store(data, { @@ -30,40 +35,30 @@ module.exports.uploadFile = (filename, data) => { }, (fpFile) => { filepicker.exportFile(fpFile, log, log); }); -}; +} -module.exports.saveFile = (callback) => { +export function saveFile(callback) { filepicker.pick(upload(callback)); -}; +} function _upload(callback, file) { - const { - url, - filename, - } = file; + const {url, filename} = file; const responseType = 'arraybuffer'; const success = exec.with(callback, filename); - load.ajax({ + ajax({ url, responseType, success, }); } -function loadFiles(callback) { +function loadFiles() { const js = '//api.filepicker.io/v2/filepicker.js'; - load.js(js, () => { - Files.get('modules', (error, modules) => { - const {key} = modules.data.FilePicker; - - filepicker.setKey(key); - - Images.hide(); - exec(callback); - }); - }); + return Promise.all([ + Files.get('modules'), + load.js(js), + ]); } - diff --git a/client/modules/command-line.js b/client/modules/command-line.js new file mode 100644 index 00000000..7a1c3993 --- /dev/null +++ b/client/modules/command-line.js @@ -0,0 +1,31 @@ +/* global CloudCmd */ +import * as Dialog from '#dom/dialog'; + +export function init() {} +CloudCmd.CommandLine = { + init, + show, + hide, +}; + +export async function show() { + const [, cmd] = await Dialog.prompt('Command Line', ''); + const TERMINAL = '^(t|terminal)'; + + if (RegExp(`${TERMINAL}$`).test(cmd)) + return await CloudCmd.Terminal.show(); + + if (RegExp(TERMINAL).test(cmd)) { + const command = cmd.replace(RegExp(`${TERMINAL} `), ''); + const exitCode = await CloudCmd.TerminalRun.show({ + command: `bash -c '${command}'`, + }); + + if (exitCode === -1) + await Dialog.alert(`☝️ Looks like Terminal is disabled, start Cloud Coammnder with '--terminal' flag.`); + + return; + } +} + +export function hide() {} diff --git a/client/modules/config.js b/client/modules/config.js deleted file mode 100644 index 64ac21ea..00000000 --- a/client/modules/config.js +++ /dev/null @@ -1,316 +0,0 @@ -'use strict'; - -/* global CloudCmd, DOM, io */ - -require('../../css/config.css'); - -const rendy = require('rendy/legacy'); -const exec = require('execon'); -const currify = require('currify/legacy'); -const squad = require('squad/legacy'); -const input = require('../input'); - -const Images = require('../dom/images'); -const Events = require('../dom/events'); -const Files = require('../dom/files'); - -const {getTitle} = require('../../common/cloudfunc'); - -const {Dialog, setTitle} = DOM; - -const TITLE = 'Config'; -const alert = currify(Dialog.alert, TITLE); - -const Config = module.exports; - -const showLoad = () => { - Images.show.load('top'); -}; - -const addKey = currify((fn, input) => { - Events.addKey(input, fn); - return input; -}); - -const addChange = currify((fn, input) => { - Events.add('change', input, fn); - return input; -}); - -CloudCmd.Config = ConfigProto; - -let Loading = true; - -function ConfigProto() { - const noop = () => {}; - - if (!CloudCmd.config('configDialog')) - return { - show: noop - }; - - Loading = true; - - showLoad(); - exec.series([ - CloudCmd.View, - (callback) => { - Loading = false; - exec(callback); - DOM.loadSocket(initSocket); - }, - show - ]); - - return module.exports; -} - -const config = CloudCmd.config; - -const {Key} = CloudCmd; - -let Element; -let Template; - -function getHost() { - const {host, origin, protocol} = location; - const href = origin || `${protocol}//${host}`; - - return href; -} - -function initSocket() { - const href = getHost(); - const prefix = CloudCmd.PREFIX; - const FIVE_SECONDS = 5000; - - const socket = io.connect(href + prefix + '/config', { - 'max reconnection attempts' : Math.pow(2, 32), - 'reconnection limit' : FIVE_SECONDS, - path: prefix + '/socket.io' - }); - - const save = (data) => { - onSave(data); - socket.send(data); - }; - - authCheck(socket); - - socket.on('connect', () => { - Config.save = save; - }); - - socket.on('config', (config) => { - DOM.Storage.setAllowed(config.localStorage); - }); - - socket.on('message', onSave); - socket.on('log', CloudCmd.log); - - socket.on('disconnect', () => { - Config.save = saveHttp; - }); - - socket.on('err', alert); -} - -function authCheck(socket) { - socket.emit('auth', config('username'), config('password')); - - socket.on('reject', () => { - alert('Wrong credentials!'); - }); -} - -Config.save = saveHttp; - -module.exports.show = show; - -function show() { - const prefix = CloudCmd.PREFIX; - const funcs = [ - exec.with(Files.get, 'config-tmpl'), - exec.with(DOM.load.parallel, [ - prefix + '/dist/config.css' - ]) - ]; - - if (Loading) - return; - - showLoad(); - exec.parallel(funcs, fillTemplate); -} - -function fillTemplate(error, template) { - if (!Template) - Template = template; - - Files.get('config', (error, config) => { - if (error) - return alert('Could not load config!'); - - const obj = input.convert(config); - - obj[obj.editor + '-selected'] = 'selected'; - delete obj.editor; - - obj[obj.packer + '-selected'] = 'selected'; - delete obj.packer; - - obj[obj.columns + '-selected'] = 'selected'; - delete obj.columns; - - const inner = rendy(Template, obj); - - Element = DOM.load({ - name : 'form', - className : 'config', - inner, - attribute : { - 'data-name': 'js-config' - } - }); - - const inputs = document.querySelectorAll('input, select', Element); - const [inputFirst] = inputs; - - let afterShow; - if (inputFirst) { - onAuthChange(inputFirst.checked); - afterShow = inputFirst.focus.bind(inputFirst); - } - - const getTarget = ({target}) => target; - const handleChange = squad(onChange, getTarget); - - [...inputs] - .map(addKey(onKey)) - .map(addChange(handleChange)); - - const autoSize = true; - CloudCmd.View.show(Element, { - autoSize, - afterShow, - }); - }); -} - -module.exports.hide = () => { - CloudCmd.View.hide(); -}; - -function onChange(el) { - const obj = {}; - const name = input.getName(el); - const data = input.getValue(name, Element); - const type = el.type; - - if (name === 'name') - onNameChange(data); - else if (type === 'checkbox') - if (/^(diff|buffer|dirStorage)$/.test(name)) - onLSChange(name, data); - else if (name === 'localStorage') - onLocalStorageChange(); - else if (name === 'auth') - onAuthChange(data); - - obj[name] = data; - - Config.save(obj); -} - -function onSave(obj) { - Object.keys(obj).forEach((name) => { - const data = obj[name]; - - CloudCmd._config(name, data); - input.setValue(name, data, Element); - }); - - DOM.Storage.setAllowed(obj.localStorage); -} - -function saveHttp(obj) { - const {RESTful} = DOM; - - RESTful.Config.write(obj, (error) => { - if (error) - return; - - onSave(obj); - }); -} - -function onLocalStorageChange() { - const names = ['diff', 'buffer', 'dirStorage', 'localStorage']; - const elements = names.map((name) => { - return input.getElementByName(name, Element); - }); - const el = {}; - const msg = 'Diff, Buffer and Directory Storage do not work without localStorage'; - - let isChecked; - - elements.forEach((element) => { - const name = input.getName(element); - - el[name] = element; - - if (element.checked) - isChecked = true; - }); - - if (!isChecked || el.localStorage.checked) - return; - - alert(msg); - - elements.forEach((element) => { - if (!element.checked) - return; - - element.checked = false; - onChange(element); - }); -} - -function onLSChange(name, data) { - const elLocalStorage = input.getElementByName('localStorage', Element); - const msg = `${name} depends on localStorage`; - - if (!data || elLocalStorage.checked) - return; - - Dialog.alert(TITLE, msg); - elLocalStorage.checked = true; -} - -function onAuthChange(checked) { - const elUsername = input.getElementByName('username', Element); - const elPassword = input.getElementByName('password', Element); - - elUsername.disabled = - elPassword.disabled = !checked; -} - -function onNameChange(name) { - setTitle(getTitle({ - name - })); -} - -function onKey({keyCode, target}) { - switch (keyCode) { - case Key.ESC: - Config.hide(); - break; - - case Key.ENTER: - onChange(target); - break; - } -} - diff --git a/client/modules/config/index.js b/client/modules/config/index.js new file mode 100644 index 00000000..dfa4c105 --- /dev/null +++ b/client/modules/config/index.js @@ -0,0 +1,247 @@ +import '../../../css/config.css'; +import {rendy} from 'rendy'; +import currify from 'currify'; +import wraptile from 'wraptile'; +import squad from 'squad'; +import {promisify} from 'es6-promisify'; +import {tryToCatch} from 'try-to-catch'; +import load from 'load.js'; +import createElement from '@cloudcmd/create-element'; +import * as Events from '#dom/events'; +import * as Files from '#dom/files'; +import {getTitle} from '#common/cloudfunc'; +import * as Images from '#dom/images'; +import * as input from './input.js'; + +const {CloudCmd, DOM} = globalThis; + +const {Dialog, setTitle} = DOM; + +const Name = 'Config'; + +const loadSocket = promisify(DOM.loadSocket); + +const showLoad = () => { + Images.show.load('top'); +}; + +const addKey = currify((fn, input) => { + Events.addKey(input, fn); + return input; +}); + +const addChange = currify((fn, input) => { + Events.add('change', input, fn); + return input; +}); + +const Config = {}; + +let Template; + +const loadCSS = load.css; + +export async function init() { + if (!CloudCmd.config('configDialog')) + return; + + showLoad(); + + const {DIR_DIST} = CloudCmd; + + [Template] = await Promise.all([ + Files.get('config-tmpl'), + loadSocket(), + loadCSS(`${DIR_DIST}/config.css`), + CloudCmd.View(), + ]); + + initSocket(); +} + +const {config, Key} = CloudCmd; + +let Element; + +function getHost() { + const { + host, + origin, + protocol, + } = location; + + return origin || `${protocol}//${host}`; +} + +function initSocket() { + const href = getHost(); + const {prefixSocket, prefix} = CloudCmd; + + const ONE_MINUTE = 60 * 1000; + + const socket = globalThis.io.connect(href + prefixSocket + '/config', { + reconnectionAttempts: Infinity, + reconnectionDelay: ONE_MINUTE, + path: `${prefix}/socket.io`, + }); + + const save = (data) => { + onSave(data); + socket.send(data); + }; + + authCheck(socket); + + socket.on('connect', () => { + Config.save = save; + }); + + socket.on('message', onSave); + socket.on('log', CloudCmd.log); + + socket.on('disconnect', () => { + Config.save = saveHttp; + }); + + socket.on('err', Dialog.alert); +} + +function authCheck(socket) { + socket.emit('auth', config('username'), config('password')); + socket.on('reject', wraptile(Dialog.alert, 'Wrong credentials!')); +} + +Config.save = saveHttp; + +export async function show() { + if (!CloudCmd.config('configDialog')) + return; + + await fillTemplate(); +} + +async function fillTemplate() { + const [error, config] = await tryToCatch(Files.get, 'config'); + + if (error) + return Dialog.alert('Could not load config!'); + + const { + editor, + menu, + packer, + columns, + theme, + configAuth, + configPort, + ...obj + } = input.convert(config); + + obj[`${menu}-selected`] = 'selected'; + obj[`${editor}-selected`] = 'selected'; + obj[`${packer}-selected`] = 'selected'; + obj[`${columns}-selected`] = 'selected'; + obj[`${theme}-selected`] = 'selected'; + obj.configAuth = configAuth ? '' : 'hidden'; + obj.configPort = configPort ? '' : 'hidden'; + + const innerHTML = rendy(Template, obj); + + Element = createElement('form', { + className: 'config', + innerHTML, + }); + + const inputs = document.querySelectorAll('input, select', Element); + const [inputFirst] = inputs; + + let afterShow; + + if (inputFirst) { + onAuthChange(inputFirst.checked); + afterShow = inputFirst.focus.bind(inputFirst); + } + + const getTarget = ({target}) => target; + const handleChange = squad(onChange, getTarget); + + Array + .from(inputs) + .map(addKey(onKey)) + .map(addChange(handleChange)); + + const autoSize = true; + + CloudCmd.View.show(Element, { + autoSize, + afterShow, + }); +} + +export function hide() { + CloudCmd.View.hide(); +} + +async function onChange(el) { + const obj = {}; + const name = input.getName(el); + const data = input.getValue(name, Element); + + if (name === 'name') + onNameChange(data); + else if (name === 'auth') + onAuthChange(data); + + obj[name] = data; + + await Config.save(obj); +} + +function onSave(obj) { + for (const name of Object.keys(obj)) { + const data = obj[name]; + + CloudCmd._config(name, data); + input.setValue(name, data, Element); + } +} + +async function saveHttp(obj) { + const {RESTful} = DOM; + const [e] = await RESTful.Config.write(obj); + + if (e) + return; + + onSave(obj); +} + +function onAuthChange(checked) { + const elUsername = input.getElementByName('username', Element); + const elPassword = input.getElementByName('password', Element); + + elUsername.disabled = !checked; + elPassword.disabled = !checked; +} + +function onNameChange(name) { + setTitle(getTitle({ + name, + })); +} + +async function onKey({keyCode, target}) { + switch(keyCode) { + case Key.ESC: + return hide(); + + case Key.ENTER: + return await onChange(target); + } +} + +CloudCmd[Name] = { + init, + show, + hide, +}; diff --git a/client/modules/config/input.js b/client/modules/config/input.js new file mode 100644 index 00000000..34a4be69 --- /dev/null +++ b/client/modules/config/input.js @@ -0,0 +1,78 @@ +import {encode} from '#common/entity'; + +const isBool = (a) => typeof a === 'boolean'; +const isString = (a) => typeof a === 'string'; + +const {keys} = Object; + +export function getElementByName(selector, element) { + const str = `[data-name="js-${selector}"]`; + + return element.querySelector(str); +} + +export const getName = (element) => { + const name = element + .getAttribute('data-name') + .replace(/^js-/, ''); + + return name; +}; + +export const convert = (config) => { + const result = config; + + for (const name of keys(config)) { + const item = config[name]; + + if (isBool(item)) { + result[name] = setState(item); + continue; + } + + if (isString(item)) { + result[name] = encode(item); + continue; + } + } + + return result; +}; + +function setState(state) { + if (state) + return ' checked'; + + return ''; +} + +export const getValue = (name, element) => { + const el = getElementByName(name, element); + const {type} = el; + + switch(type) { + case 'checkbox': + return el.checked; + + case 'number': + return Number(el.value); + + default: + return el.value; + } +}; + +export const setValue = (name, value, element) => { + const el = getElementByName(name, element); + const {type} = el; + + switch(type) { + case 'checkbox': + el.checked = value; + break; + + default: + el.value = value; + break; + } +}; diff --git a/client/modules/config/input.spec.js b/client/modules/config/input.spec.js new file mode 100644 index 00000000..9d0866cd --- /dev/null +++ b/client/modules/config/input.spec.js @@ -0,0 +1,140 @@ +import {test, stub} from 'supertape'; +import { + convert, + getName, + getValue, + setValue, +} from './input.js'; + +test('cloudcmd: client: config: input: convert', (t) => { + const result = convert({ + name: 'hello ', + }); + + const expected = { + name: 'hello <world>', + }; + + t.deepEqual(result, expected); + t.end(); +}); + +test('cloudcmd: client: config: input: convert: bool', (t) => { + const result = convert({ + auth: true, + }); + + const expected = { + auth: ' checked', + }; + + t.deepEqual(result, expected); + t.end(); +}); + +test('cloudcmd: client: config: input: convert: bool false', (t) => { + const result = convert({ + auth: false, + }); + + const expected = { + auth: '', + }; + + t.deepEqual(result, expected); + t.end(); +}); + +test('cloudcmd: client: config: input: getName', (t) => { + const getAttribute = stub().returns('js-hello'); + const element = { + getAttribute, + }; + + const result = getName(element); + + t.equal(result, 'hello', 'should strip js- prefix'); + t.end(); +}); + +test('cloudcmd: client: config: input: getValue: checkbox', (t) => { + const querySelector = stub().returns({ + type: 'checkbox', + checked: true, + }); + + const element = { + querySelector, + }; + + const result = getValue('auth', element); + + t.ok(result, 'should return checked value'); + t.end(); +}); + +test('cloudcmd: client: config: input: getValue: number', (t) => { + const querySelector = stub().returns({ + type: 'number', + value: '42', + }); + + const element = { + querySelector, + }; + + const result = getValue('port', element); + + t.equal(result, 42, 'should return number'); + t.end(); +}); + +test('cloudcmd: client: config: input: getValue: default', (t) => { + const querySelector = stub().returns({ + type: 'text', + value: 'hello', + }); + + const element = { + querySelector, + }; + + const result = getValue('name', element); + + t.equal(result, 'hello', 'should return value as is'); + t.end(); +}); + +test('cloudcmd: client: config: input: setValue: checkbox', (t) => { + const el = { + type: 'checkbox', + checked: false, + }; + + const querySelector = stub().returns(el); + const element = { + querySelector, + }; + + setValue('auth', true, element); + + t.ok(el.checked, 'should set checked'); + t.end(); +}); + +test('cloudcmd: client: config: input: setValue: default', (t) => { + const el = { + type: 'text', + value: 'old', + }; + + const querySelector = stub().returns(el); + const element = { + querySelector, + }; + + setValue('name', 'new', element); + + t.equal(el.value, 'new', 'should set value'); + t.end(); +}); diff --git a/client/modules/contact.js b/client/modules/contact.js index 4e7bb89d..48c7bd19 100644 --- a/client/modules/contact.js +++ b/client/modules/contact.js @@ -1,66 +1,34 @@ /* global CloudCmd */ /* global DOM */ -/* global olark */ +import olark from '@cloudcmd/olark'; +import * as Images from '#dom/images'; -'use strict'; +CloudCmd.Contact = { + init, + show, + hide, +}; -CloudCmd.Contact = ContactProto; +const {Events} = DOM; +const {Key} = CloudCmd; -const exec = require('execon'); -const Images = require('../dom/images'); - -function ContactProto(callback) { - init(callback); - - return exports; -} - -const Events = DOM.Events; -const Key = CloudCmd.Key; - -module.exports.show = show; -module.exports.hide = hide; - -let Inited = false; - -function init(callback) { - if (Inited) - return; - - load(() => { - Inited = true; - - olark.identify('6216-545-10-4223'); - olark('api.box.onExpand', show); - olark('api.box.onShow', show); - olark('api.box.onShrink', hide); - - exec(callback); - }); - +export function init() { Events.addKey(onKey); + + olark.identify('6216-545-10-4223'); + olark('api.box.onExpand', show); + olark('api.box.onShow', show); + olark('api.box.onShrink', hide); } -function load(callback) { - const {PREFIX} = CloudCmd; - const path = `${PREFIX}/modules/olark/olark.min.js`; - - Images.show.load('top'); - - DOM.load.js(path, callback); -} - -function show() { +export function show() { Key.unsetBind(); Images.hide(); - if (Inited) - return olark('api.box.expand'); - - init(show); + olark('api.box.expand'); } -function hide() { +export function hide() { Key.setBind(); olark('api.box.hide'); } @@ -69,4 +37,3 @@ function onKey({keyCode}) { if (keyCode === Key.ESC) hide(); } - diff --git a/client/modules/edit-file-vim.js b/client/modules/edit-file-vim.js index 68398db9..16d557ae 100644 --- a/client/modules/edit-file-vim.js +++ b/client/modules/edit-file-vim.js @@ -1,54 +1,46 @@ -'use strict'; +import * as Events from '#dom/events'; -/* global CloudCmd */ +const {CloudCmd} = globalThis; -const exec = require('execon'); -const Events = require('../dom/events'); +CloudCmd.EditFileVim = { + init, + show, + hide, +}; const {Key} = CloudCmd; -CloudCmd.EditFileVim = function EditFileVimProto(callback) { - const EditFileVim = this; - - const ConfigView = { - bindKeys: false, - beforeClose: () => { - Events.rmKey(listener); - } - }; - - function init(callback) { - exec.series([ - CloudCmd.EditFile, - callback || EditFileVim.show, - ]); - } - - this.show = () => { - Events.addKey(listener); - - CloudCmd.EditFile - .show(ConfigView) - .getEditor() - .setKeyMap('vim'); - }; - - this.hide = () => { - CloudCmd.Edit.hide(); - }; - - function listener(event) { - const { - keyCode, - shiftKey, - } = event; - - if (shiftKey && keyCode === Key.ESC) { - event.preventDefault(); - EditFileVim.hide(); - } - } - - init(callback); +const ConfigView = { + bindKeys: false, + beforeClose: () => { + Events.rmKey(listener); + CloudCmd.EditFile.isChanged(); + }, }; +export async function init() { + await CloudCmd.EditFile(); +} + +export async function show() { + Events.addKey(listener); + + const editFile = await CloudCmd.EditFile.show(ConfigView); + + editFile + .getEditor() + .setKeyMap('vim'); +} + +export function hide() { + CloudCmd.Edit.hide(); +} + +function listener(event) { + const {keyCode, shiftKey} = event; + + if (shiftKey && keyCode === Key.ESC) { + event.preventDefault(); + hide(); + } +} diff --git a/client/modules/edit-file.js b/client/modules/edit-file.js index cfde7b9f..83a07e36 100644 --- a/client/modules/edit-file.js +++ b/client/modules/edit-file.js @@ -1,203 +1,193 @@ -'use strict'; - /* global CloudCmd, DOM*/ +import Format from 'format-io'; +import {fullstore} from 'fullstore'; +import exec from 'execon'; +import {supermenu} from 'supermenu'; -const Format = require('format-io'); -const currify = require('currify/legacy'); -const store = require('fullstore/legacy'); -const squad = require('squad/legacy'); -const exec = require('execon'); -const supermenu = require('supermenu'); - -const call = currify((fn, callback) => { - fn(); - callback(); -}); - -CloudCmd.EditFile = function EditFileProto(callback) { - const Info = DOM.CurrentInfo; - const Dialog = DOM.Dialog; - const EditFile = exec.bind(); - const config = CloudCmd.config; - - let Menu; - - const TITLE = 'Edit'; - const Images = DOM.Images; - - let MSG_CHANGED; - const ConfigView = { - beforeClose: () => { - exec.ifExist(Menu, 'hide'); - isChanged(); - } - }; - - function init(callback) { - const editor = store(); - - const getMainEditor = () => CloudCmd.Edit.getEditor(); - const getEditor = squad(editor, getMainEditor); - const auth = squad(authCheck, editor); - const listeners = squad(setListeners, editor); - - const show = callback ? exec : EditFile.show; - - exec.series([ - CloudCmd.Edit, - call(getEditor), - call(auth), - call(listeners), - show, - ], callback); - } - - function getName() { - const {name, isDir} = Info; - - if (isDir) - return `${name}.json`; - - return name; - } - - EditFile.show = (options) => { - const config = Object.assign({}, ConfigView, options); - - Images.show.load(); - - CloudCmd.Edit - .getEditor() - .setOption('keyMap', 'default'); - - Info.getData((error, data) => { - const path = Info.path; - const name = getName(); - - if (error) - return Images.hide(); - - setMsgChanged(name); - - CloudCmd.Edit - .getEditor() - .setValueFirst(path, data) - .setModeForPath(name) - .enableKey(); - - CloudCmd.Edit.show(config); - }); - - return CloudCmd.Edit; - }; - - EditFile.hide = () => { - CloudCmd.Edit.hide(); - }; - - function setListeners(editor) { - const element = CloudCmd.Edit.getElement(); - - DOM.Events.addOnce('contextmenu', element, setMenu); - - editor.on('save', (value) => { - DOM.setCurrentSize(Format.size(value)); - }); - } - - function authCheck(spawn) { - spawn.emit('auth', config('username'), config('password')); - spawn.on('reject', () => { - Dialog.alert(TITLE, 'Wrong credentials!'); - }); - } - - function setMenu(event) { - const position = { - x: event.clientX, - y: event.clientY - }; - - event.preventDefault(); - - if (Menu) - return; - - const options = { - beforeShow: (params) => { - params.x -= 18; - params.y -= 27; - }, - - afterClick: () => { - const editor = CloudCmd.Edit.getEditor(); - editor.focus(); - } - }; - - const element = CloudCmd.Edit.getElement(); - - Menu = supermenu(element, options, getMenuData()); - Menu.show(position.x, position.y); - } - - function getMenuData() { - const editor = CloudCmd.Edit.getEditor(); - - return { - 'Save Ctrl+S' : () => { - editor.save(); - }, - 'Go To Line Ctrl+G' : () => { - editor.goToLine(); - }, - 'Cut Ctrl+X' : () => { - editor.cutToClipboard(); - }, - 'Copy Ctrl+C' : () => { - editor.copyToClipboard(); - }, - 'Paste Ctrl+V' : () => { - editor.pasteFromClipboard(); - }, - 'Delete Del' : () => { - editor.remove('right'); - }, - 'Select All Ctrl+A' : () => { - editor.selectAll(); - }, - 'Beautify Ctrl+B' : () => { - editor.beautify(); - }, - 'Minify Ctrl+M' : () => { - editor.minify(); - }, - 'Close Esc' : () => { - EditFile.hide(); - } - }; - } - - function setMsgChanged(name) { - MSG_CHANGED = 'Do you want to save changes to ' + name + '?'; - } - - function isChanged() { - const editor = CloudCmd.Edit.getEditor(); - const is = editor.isChanged(); - - if (!is) - return; - - const cancel = false; - Dialog.confirm(TITLE, MSG_CHANGED, {cancel}) - .then(() => { - editor.save(); - }); - } - - init(callback); - - return EditFile; +CloudCmd.EditFile = { + init, + show, + hide, + isChanged, }; +const Info = DOM.CurrentInfo; + +const {Dialog, Images} = DOM; + +const {config} = CloudCmd; + +let Menu; +let MSG_CHANGED; + +const isLoading = fullstore(); + +const ConfigView = { + beforeClose: async () => { + exec.ifExist(Menu, 'hide'); + await isChanged(); + }, +}; + +export async function init() { + isLoading(true); + + await CloudCmd.Edit(); + + const editor = CloudCmd.Edit.getEditor(); + authCheck(editor); + setListeners(editor); + + isLoading(false); +} + +function getName() { + const {name, isDir} = Info; + + if (isDir) + return `${name}.json`; + + return name; +} + +export async function show(options) { + if (isLoading()) + return; + + const optionsEdit = { + ...ConfigView, + ...options, + }; + + if (CloudCmd.config('showFileName')) + optionsEdit.title = Info.name; + + Images.show.load(); + + CloudCmd.Edit + .getEditor() + .setOption('keyMap', 'default'); + + const [error, data] = await Info.getData(); + + if (error) { + Images.hide(); + return CloudCmd.Edit; + } + + const {path} = Info; + const name = getName(); + + setMsgChanged(name); + + CloudCmd.Edit + .getEditor() + .setValueFirst(path, data) + .setModeForPath(name) + .enableKey(); + + CloudCmd.Edit.show(optionsEdit); + + return CloudCmd.Edit; +} + +export function hide() { + CloudCmd.Edit.hide(); +} + +function setListeners(editor) { + const element = CloudCmd.Edit.getElement(); + + DOM.Events.addOnce('contextmenu', element, setMenu); + + editor.on('save', (value) => { + DOM.setCurrentSize(Format.size(value)); + }); +} + +function authCheck(spawn) { + spawn.emit('auth', config('username'), config('password')); + spawn.on('reject', () => { + Dialog.alert('Wrong credentials!'); + }); +} + +function setMenu(event) { + const position = { + x: event.clientX, + y: event.clientY, + }; + + event.preventDefault(); + + if (Menu) + return; + + const options = { + beforeShow: (params) => { + params.x -= 18; + params.y -= 27; + }, + + afterClick: () => { + CloudCmd.Edit + .getEditor() + .focus(); + }, + }; + + const element = CloudCmd.Edit.getElement(); + + Menu = supermenu(element, options, getMenuData()); + + Menu.addContextMenuListener(); + Menu.show(position.x, position.y); +} + +function getMenuData() { + const editor = CloudCmd.Edit.getEditor(); + + return { + 'Save Ctrl+S': () => { + editor.save(); + }, + 'Go To Line Ctrl+G': () => { + editor.goToLine(); + }, + 'Cut Ctrl+X': () => { + editor.cutToClipboard(); + }, + 'Copy Ctrl+C': () => { + editor.copyToClipboard(); + }, + 'Paste Ctrl+V': () => { + editor.pasteFromClipboard(); + }, + 'Delete Del': () => { + editor.remove('right'); + }, + 'Select All Ctrl+A': () => { + editor.selectAll(); + }, + 'Close Esc': hide, + }; +} + +function setMsgChanged(name) { + MSG_CHANGED = `Do you want to save changes to ${name}?`; +} + +export async function isChanged() { + const editor = CloudCmd.Edit.getEditor(); + const is = editor.isChanged(); + + if (!is) + return; + + const [cancel] = await Dialog.confirm(MSG_CHANGED); + + if (cancel) + return; + + editor.save(); +} diff --git a/client/modules/edit-names-vim.js b/client/modules/edit-names-vim.js new file mode 100644 index 00000000..8b3b2f89 --- /dev/null +++ b/client/modules/edit-names-vim.js @@ -0,0 +1,44 @@ +import * as Events from '#dom/events'; + +const {CloudCmd} = globalThis; + +CloudCmd.EditNamesVim = { + init, + show, + hide, +}; +const {Key} = CloudCmd; + +const ConfigView = { + bindKeys: false, + beforeClose: () => { + Events.rmKey(listener); + CloudCmd.EditNames.isChanged(); + }, +}; + +export async function init() { + await CloudCmd.EditNames(); +} + +export function show() { + Events.addKey(listener); + + CloudCmd.EditNames + .show(ConfigView) + .getEditor() + .setKeyMap('vim'); +} + +export function hide() { + CloudCmd.Edit.hide(); +} + +function listener(event) { + const {keyCode, shiftKey} = event; + + if (shiftKey && keyCode === Key.ESC) { + event.preventDefault(); + hide(); + } +} diff --git a/client/modules/edit-names.js b/client/modules/edit-names.js index cacc0b8a..7bc29054 100644 --- a/client/modules/edit-names.js +++ b/client/modules/edit-names.js @@ -1,219 +1,218 @@ -'use strict'; +import {tryToCatch} from 'try-to-catch'; +import exec from 'execon'; +import {supermenu} from 'supermenu'; +import {multiRename} from 'multi-rename'; -/* global CloudCmd, DOM */ +const {CloudCmd, DOM} = globalThis; -const currify = require('currify/legacy'); -const exec = require('execon'); -const supermenu = require('supermenu'); - -const reject = Promise.reject.bind(Promise); - -CloudCmd.EditNames = function EditNamesProto(callback) { - const Info = DOM.CurrentInfo; - const Dialog = DOM.Dialog; - - const TITLE = 'Edit Names'; - const alert = currify(Dialog.alert, TITLE); - const refresh = currify(_refresh); - - let Menu; - - const EditNames = this; - const ConfigView = { - beforeClose: () => { - exec.ifExist(Menu, 'hide'); - isChanged(); - DOM.Events.remove('keydown', keyListener); - } - }; - - function init(callback) { - let editor; - - exec.series([ - CloudCmd.Edit, - - (callback) => { - editor = CloudCmd.Edit.getEditor(); - callback(); - }, - - (callback) => { - setListeners(editor); - callback(); - }, - - (callback) => { - EditNames.show(); - callback(); - }, - ], callback); - } - - this.show = () => { - const names = getActiveNames().join('\n'); - - if (Info.name === '..' && names.length === 1) - return Dialog.alert.noFiles(TITLE); - - CloudCmd.Edit - .getEditor() - .setValueFirst('edit-names', names) - .setMode() - .setOption('keyMap', 'default') - .disableKey(); - - DOM.Events.addKey(keyListener); - - CloudCmd.Edit.show(ConfigView); - }; - - function keyListener(event) { - const ctrl = event.ctrlKey; - const meta = event.metaKey; - const ctrlMeta = ctrl || meta; - const Key = CloudCmd.Key; - - if (!ctrlMeta || event.keyCode !== Key.S) - return; - - EditNames.hide(); - } - - function getActiveNames() { - return DOM.getFilenames(DOM.getActiveFiles()); - } - - this.hide = () => { - CloudCmd.Edit.hide(); - }; - - function setListeners() { - const element = CloudCmd.Edit.getElement(); - - DOM.Events.addOnce('contextmenu', element, setMenu); - } - - function applyNames() { - const dir = Info.dirPath; - const from = getActiveNames(); - const nameIndex = from.indexOf(Info.name); - - const editor = CloudCmd.Edit.getEditor(); - const to = editor - .getValue() - .split('\n'); - - const root = CloudCmd.config('root'); - - Promise.resolve(root) - .then(rename(dir, from, to)) - .then(refresh(to, nameIndex)) - .catch(alert); - } - - function _refresh(to, nameIndex, res) { - if (res.status === 404) - return res.text().then(reject); - - const currentName = to[nameIndex]; - - CloudCmd.refresh({ - currentName - }); - } - - function getDir(root, dir) { - if (root === '/') - return dir; - - return root + dir; - } - - function rename(dir, from, to) { - return (root) => { - return fetch(CloudCmd.PREFIX + '/rename', { - method: 'put', - credentials: 'include', - body: JSON.stringify({ - from: from, - to: to, - dir: getDir(root, dir) - }) - }); - }; - } - - function setMenu(event) { - const position = { - x: event.clientX, - y: event.clientY - }; - - event.preventDefault(); - - if (Menu) - return; - - const editor = CloudCmd.Edit.getEditor(); - const options = { - beforeShow: (params) => { - params.x -= 18; - params.y -= 27; - }, - - afterClick: () => { - editor.focus(); - } - }; - - const menuData = { - 'Save Ctrl+S' : () => { - editor.save(); - EditNames.hide(); - }, - 'Go To Line Ctrl+G' : () => { - editor.goToLine(); - }, - 'Cut Ctrl+X' : () => { - editor.cutToClipboard(); - }, - 'Copy Ctrl+C' : () => { - editor.copyToClipboard(); - }, - 'Paste Ctrl+V' : () => { - editor.pasteFromClipboard(); - }, - 'Delete Del' : () => { - editor.remove('right'); - }, - 'Select All Ctrl+A' : () => { - editor.selectAll(); - }, - 'Close Esc' : () => { - EditNames.hide(); - } - }; - - const element = CloudCmd.Edit.getElement(); - - Menu = supermenu(element, options, menuData); - Menu.show(position.x, position.y); - } - - function isChanged() { - const editor = CloudCmd.Edit.getEditor(); - const msg = 'Apply new names?'; - - if (!editor.isChanged()) - return; - - Dialog.confirm(TITLE, msg) - .then(EditNames.hide) - .then(applyNames) - .catch(EditNames.hide); - } - - init(callback); +CloudCmd.EditNames = { + init, + show, + hide, + isChanged, }; +const Info = DOM.CurrentInfo; +const {Dialog} = DOM; + +let Menu; + +const ConfigView = { + beforeClose: async () => { + exec.ifExist(Menu, 'hide'); + DOM.Events.remove('keydown', keyListener); + await isChanged(); + }, +}; + +export async function init() { + await CloudCmd.Edit(); + + setListeners(); +} + +export function show(options) { + const names = getActiveNames().join('\n'); + const config = { + ...ConfigView, + ...options, + }; + + if (Info.name === '..' && names.length === 1) + return Dialog.alert.noFiles(); + + DOM.Events.addKey(keyListener); + + CloudCmd.Edit + .getEditor() + .setValueFirst('edit-names', names) + .setMode() + .setOption('keyMap', 'default') + .disableKey(); + + CloudCmd.Edit.show(config); + + return CloudCmd.Edit; +} + +async function keyListener(event) { + const ctrl = event.ctrlKey; + const meta = event.metaKey; + const ctrlMeta = ctrl || meta; + const {Key} = CloudCmd; + + if (ctrlMeta && event.keyCode === Key.S) { + hide(); + return; + } + + if (ctrlMeta && event.keyCode === Key.P) { + const [, pattern] = await Dialog.prompt('Apply pattern:', '[n][e]'); + pattern && applyPattern(pattern); + } +} + +function applyPattern(pattern) { + const newNames = multiRename(pattern, getActiveNames()); + const editor = CloudCmd.Edit.getEditor(); + + editor.setValue(newNames.join('\n')); +} + +function getActiveNames() { + return DOM.getFilenames(DOM.getActiveFiles()); +} + +export function hide() { + CloudCmd.Edit.hide(); +} + +function setListeners() { + const element = CloudCmd.Edit.getElement(); + + DOM.Events.addOnce('contextmenu', element, setMenu); +} + +async function applyNames() { + const dir = Info.dirPath; + const from = getActiveNames(); + const nameIndex = from.indexOf(Info.name); + + const editor = CloudCmd.Edit.getEditor(); + const to = editor + .getValue() + .split('\n'); + + const root = CloudCmd.config('root'); + + const response = rename(dir, from, to, root); + const [error] = await tryToCatch(refresh, to, nameIndex, response); + + if (error) + alert(error); +} + +function refresh(to, nameIndex, res) { + if (res.status === 404) { + const error = res.text(); + throw error; + } + + const currentName = to[nameIndex]; + + CloudCmd.refresh({ + currentName, + }); +} + +function getDir(root, dir) { + if (root === '/') + return dir; + + return root + dir; +} + +function rename(path, from, to, root) { + const dir = getDir(root, path); + const {prefix} = CloudCmd; + + return fetch(`${prefix}/rename`, { + method: 'put', + credentials: 'include', + body: JSON.stringify({ + from, + to, + dir, + }), + }); +} + +function setMenu(event) { + const position = { + x: event.clientX, + y: event.clientY, + }; + + event.preventDefault(); + + if (Menu) + return; + + const editor = CloudCmd.Edit.getEditor(); + + const options = { + beforeShow: (params) => { + params.x -= 18; + params.y -= 27; + }, + + afterClick: () => { + editor.focus(); + }, + }; + + const menuData = { + 'Save Ctrl+S': async () => { + await applyNames(); + hide(); + }, + 'Go To Line Ctrl+G': () => { + editor.goToLine(); + }, + 'Cut Ctrl+X': () => { + editor.cutToClipboard(); + }, + 'Copy Ctrl+C': () => { + editor.copyToClipboard(); + }, + 'Paste Ctrl+V': () => { + editor.pasteFromClipboard(); + }, + 'Delete Del': () => { + editor.remove('right'); + }, + 'Select All Ctrl+A': () => { + editor.selectAll(); + }, + 'Close Esc': hide, + }; + + const element = CloudCmd.Edit.getElement(); + + Menu = supermenu(element, options, menuData); + + Menu.addContextMenuListener(); + Menu.show(position.x, position.y); +} + +export async function isChanged() { + const editor = CloudCmd.Edit.getEditor(); + const msg = 'Apply new names?'; + + if (!editor.isChanged()) + return; + + const [cancel] = await Dialog.confirm(msg); + + !cancel && await applyNames(); +} diff --git a/client/modules/edit.js b/client/modules/edit.js index 52a6bc19..593a11cb 100644 --- a/client/modules/edit.js +++ b/client/modules/edit.js @@ -1,138 +1,127 @@ /* global CloudCmd */ +import {montag} from 'montag'; +import {promisify} from 'es6-promisify'; +import {tryToCatch} from 'try-to-catch'; +import createElement from '@cloudcmd/create-element'; +import load from 'load.js'; +import {MAX_FILE_SIZE as maxSize} from '#common/cloudfunc'; +import {time, timeEnd} from '#common/util'; -'use strict'; - -const exec = require('execon'); -const currify = require('currify/legacy'); - -const load = require('../dom/load'); - -const {MAX_FILE_SIZE: maxSize} = require('../../common/cloudfunc'); -const {time, timeEnd} = require('../../common/util'); - -CloudCmd.Edit = EditProto; - -function EditProto(callback) { - const Name = 'Edit'; - const EditorName = CloudCmd.config('editor'); - const loadFiles = currify(_loadFiles); - - let Loading = true; - let Element; - let editor; - - const ConfigView = { - afterShow: () => { - editor - .moveCursorTo(0, 0) - .focus(); - } - }; - - const Edit = exec.bind(); - - function init(callback) { - const element = createElement(); - - exec.series([ - CloudCmd.View, - loadFiles(element) - ], callback); - } - - function createElement() { - const element = load({ - name: 'div', - style: - 'width : 100%;' + - 'height : 100%;' + - 'font-family: "Droid Sans Mono";' + - 'position : absolute;', - notAppend: true - }); - - Element = element; - - return element; - } - - function checkFn(name, fn) { - if (typeof fn !== 'function') - throw Error(name + ' should be a function!'); - } - - function initConfig(options = {}) { - const config = Object.assign({}, options, ConfigView); - - if (!options.afterShow) - return config; - - checkFn('options.afterShow', options.afterShow); - - const afterShow = {config}; - - config.afterShow = () => { - afterShow(); - options.afterShow(); - }; - - return config; - } - - Edit.show = (options) => { - if (Loading) - return; - - CloudCmd.View.show(Element, initConfig(options)); - - Edit.getEditor() - .setOptions({ - fontSize: 16, - }); - - return Edit; - }; - - Edit.getEditor = () => { - return editor; - }; - - Edit.getElement = () => { - return Element; - }; - - Edit.hide = () => { - CloudCmd.View.hide(); - return Edit; - }; - - function _loadFiles(element, callback) { - const socketPath = CloudCmd.PREFIX; - const prefix = socketPath + '/' + EditorName; - const url = prefix + '/' + EditorName + '.js'; - - time(Name + ' load'); - - load.js(url, () => { - const word = window[EditorName]; - const options = { - maxSize, - prefix, - socketPath, - }; - - word(element, options, (ed) => { - timeEnd(Name + ' load'); - editor = ed; - Loading = false; - - exec(callback); - }); - }); - } - - init(callback); - - return Edit; +export function getEditor() { + return editor; } +const isFn = (a) => typeof a === 'function'; +const loadJS = load.js; + +const Name = 'Edit'; + +CloudCmd[Name] = { + init, + show, + hide, + getEditor, + getElement, +}; + +const EditorName = CloudCmd.config('editor'); + +let Loading = true; +let Element; +let editor; + +const ConfigView = { + afterShow: () => { + editor + .moveCursorTo(0, 0) + .focus(); + }, +}; + +export async function init() { + const element = create(); + + await CloudCmd.View(); + await loadFiles(element); +} + +function create() { + const element = createElement('div', { + style: montag` + width: 100%; + height: 100%; + font-family: "Droid Sans Mono"; + `, + notAppend: true, + }); + + Element = element; + + return element; +} + +function checkFn(name, fn) { + if (!isFn(fn)) + throw Error(`${name} should be a function!`); +} + +function initConfig(options = {}) { + const config = { + ...options, + ...ConfigView, + }; + + if (!options.afterShow) + return config; + + checkFn('options.afterShow', options.afterShow); + + config.afterShow = () => { + ConfigView.afterShow(); + options.afterShow(); + }; + + return config; +} + +export function show(options) { + if (Loading) + return; + + CloudCmd.View.show(Element, initConfig(options)); + + getEditor().setOptions({ + fontSize: 16, + }); +} + +export function getElement() { + return Element; +} + +export function hide() { + CloudCmd.View.hide(); +} + +const loadFiles = async (element) => { + const prefix = `${CloudCmd.prefix}/${EditorName}`; + const socketPath = CloudCmd.prefix; + const prefixSocket = `${CloudCmd.prefixSocket}/${EditorName}`; + const url = `${prefix}/${EditorName}.js`; + + time(`${Name} load`); + + await loadJS(url); + + const word = promisify(window[EditorName]); + const [ed] = await tryToCatch(word, element, { + maxSize, + prefix, + prefixSocket, + socketPath, + }); + + timeEnd(`${Name} load`); + editor = ed; + Loading = false; +}; diff --git a/client/modules/help.js b/client/modules/help.js index 29de96fa..74657a90 100644 --- a/client/modules/help.js +++ b/client/modules/help.js @@ -1,34 +1,27 @@ -'use strict'; +import * as Images from '#dom/images'; -/* global CloudCmd */ +const {CloudCmd} = globalThis; -CloudCmd.Help = HelpProto; +CloudCmd.Help = { + init, + show, + hide, +}; -const Images = require('../dom/images'); - -function HelpProto() { +export function init() { Images.show.load('top'); - show(); - - return exports; } -module.exports.show = show; -module.exports.hide = hide; - -function show() { +export function show() { const positionLoad = 'top'; const relative = true; - CloudCmd - .Markdown - .show('/HELP.md', { - positionLoad, - relative, - }); + CloudCmd.Markdown.show('/HELP.md', { + positionLoad, + relative, + }); } -function hide() { +export function hide() { CloudCmd.View.hide(); } - diff --git a/client/modules/konsole.js b/client/modules/konsole.js index 574d8070..e9a465af 100644 --- a/client/modules/konsole.js +++ b/client/modules/konsole.js @@ -1,158 +1,143 @@ -'use strict'; - /* global CloudCmd */ /* global Util */ /* global DOM */ /* global Console */ +import exec from 'execon'; +import currify from 'currify'; +import {tryToCatch} from 'try-to-catch'; +import {js as loadJS} from 'load.js'; +import createElement from '@cloudcmd/create-element'; +import * as Images from '#dom/images'; -const exec = require('execon'); -const currify = require('currify/legacy'); -const Images = require('../dom/images'); -const { - Dialog, - CurrentInfo:Info, -} = DOM; +CloudCmd.Konsole = { + init, + show, + hide, +}; + +const {Dialog, CurrentInfo: Info} = DOM; const rmLastSlash = (a) => a.replace(/\/$/, '') || '/'; -CloudCmd.Konsole = ConsoleProto; +let konsole; +const {config} = CloudCmd; -function ConsoleProto() { - let konsole; - const {config} = CloudCmd; - - const noop = () => {}; - const cd = currify((fn, dir) => fn(`cd ${rmLastSlash(dir)}`)); - +const cd = currify((fn, dir) => fn(`cd ${rmLastSlash(dir)}`)); + +const Name = 'Konsole'; + +let Element; +let Loaded; + +export async function init() { if (!config('console')) - return { - show: noop - }; + return; - const Name = 'Konsole'; - const TITLE = 'Console'; + Images.show.load('top'); - let Element; - let Loaded; - - const Konsole = this; - - function init() { - Images.show.load('top'); - - exec.series([ - CloudCmd.View, - load, - create, - Konsole.show, - ]); - - Element = DOM.load({ - name : 'div', - className : 'console' - }); - } - - this.hide = () => { - CloudCmd.View.hide(); - }; - - this.clear = () => { - konsole.clear(); - }; - - function getPrefix() { - return CloudCmd.PREFIX + '/console'; - } - - function getEnv() { - return { - ACTIVE_DIR: DOM.getCurrentDirPath.bind(DOM), - PASSIVE_DIR: DOM.getNotCurrentDirPath.bind(DOM), - CURRENT_NAME: DOM.getCurrentName.bind(DOM), - CURRENT_PATH: () => { - return Info.path; - } - }; - } - - function onPath(path) { - if (Info.dirPath === path) - return; - - CloudCmd.loadDir({ - path, - }); - } - - const getDirPath = () => { - if (config('syncConsolePath')) - return Info.dirPath; - }; - - function create(callback) { - const options = { - cwd: getDirPath(), - env: getEnv(), - prefix: getPrefix(), - socketPath: CloudCmd.PREFIX, - }; - - konsole = Console(Element, options, (spawn) => { - spawn.on('connect', exec.with(authCheck, spawn)); - spawn.on('path', config.if('syncConsolePath', onPath)); - - CloudCmd.on('active-dir', config.if('syncConsolePath', cd(spawn.handler))); - - exec(callback); - }); - - konsole.addShortCuts({ - 'P': () => { - const command = konsole.getPromptText(); - const path = DOM.getCurrentDirPath(); - - konsole.setPromptText(command + path); - } - }); - } - - function authCheck(spawn) { - spawn.emit('auth', config('username'), config('password')); - - spawn.on('reject', () => { - Dialog.alert(TITLE, 'Wrong credentials!'); - }); - } - - this.show = (callback) => { - if (!Loaded) - return; - - CloudCmd.View.show(Element, { - afterShow: () => { - konsole.focus(); - exec(callback); - } - }); - }; - - function load(callback) { - const prefix = getPrefix(); - const url = prefix + '/console.js'; - - DOM.load.js(url, (error) => { - if (error) - return Dialog.alert(TITLE, error.message); - - Loaded = true; - Util.timeEnd(Name + ' load'); - exec(callback); - }); - - Util.time(Name + ' load'); - } - - init(); + await CloudCmd.View(); + await load(); + await create(); } +export function hide() { + CloudCmd.View.hide(); +} + +export const clear = () => { + konsole.clear(); +}; + +const getPrefix = () => CloudCmd.prefix + '/console'; + +function getPrefixSocket() { + return CloudCmd.prefixSocket + '/console'; +} + +const getEnv = () => ({ + ACTIVE_DIR: DOM.getCurrentDirPath.bind(DOM), + PASSIVE_DIR: DOM.getNotCurrentDirPath.bind(DOM), + CURRENT_NAME: DOM.getCurrentName.bind(DOM), + CURRENT_PATH: () => Info.path, +}); + +async function onPath(path) { + if (Info.dirPath === path) + return; + + await CloudCmd.changeDir(path); +} + +const getDirPath = () => { + if (config('syncConsolePath')) + return Info.dirPath; +}; + +const create = async () => { + const options = { + cwd: getDirPath(), + env: getEnv(), + prefix: getPrefix(), + prefixSocket: getPrefixSocket(), + socketPath: CloudCmd.prefix, + }; + + Element = createElement('div', { + className: 'console', + }); + + konsole = await Console(Element, options); + + konsole.on('connect', exec.with(authCheck, konsole)); + konsole.on('path', config.if('syncConsolePath', onPath)); + + CloudCmd.on('active-dir', config.if('syncConsolePath', cd(konsole.handler))); + + konsole.addShortCuts({ + P: () => { + const command = konsole.getPromptText(); + const path = DOM.getCurrentDirPath(); + + konsole.setPromptText(command + path); + }, + }); +}; + +function authCheck(konsole) { + konsole.emit('auth', config('username'), config('password')); + + konsole.on('reject', () => { + Dialog.alert('Wrong credentials!'); + }); +} + +export function show(callback) { + if (!Loaded) + return; + + if (!config('console')) + return; + + CloudCmd.View.show(Element, { + afterShow: () => { + konsole.focus(); + exec(callback); + }, + }); +} + +const load = async () => { + Util.time(`${Name} load`); + + const prefix = getPrefix(); + const url = `${prefix}/console.js`; + const [error] = await tryToCatch(loadJS, url); + + Loaded = true; + Util.timeEnd(`${Name} load`); + + if (error) + return Dialog.alert(error.message, { + cancel: false, + }); +}; diff --git a/client/modules/markdown.js b/client/modules/markdown.js index 7d23af50..c94c64e8 100644 --- a/client/modules/markdown.js +++ b/client/modules/markdown.js @@ -1,58 +1,47 @@ -'use strict'; +import createElement from '@cloudcmd/create-element'; +import * as Images from '#dom/images'; +import {Markdown} from '#dom/rest'; +import {alert} from '#dom/dialog'; -/*global CloudCmd */ +const {CloudCmd} = globalThis; -CloudCmd.Markdown = MarkdownProto; - -const exec = require('execon'); - -const Images = require('../dom/images'); -const load = require('../dom/load'); -const {Markdown} = require('../dom/rest'); - -function MarkdownProto(name, options) { - Images.show.load('top'); - - exec.series([ - CloudCmd.View, - exec.with(show, name, options), - ]); - - return module.exports; -} - -module.exports.show = show; - -module.exports.hide = () => { - CloudCmd.View.hide(); +CloudCmd.Markdown = { + init, + show, + hide, }; +export async function init() { + Images.show.load('top'); + await CloudCmd.View(); +} -function show(name, options = {}) { - const relativeQuery = '?relative'; - const { - positionLoad, - relative, - } = options; +export function hide() { + CloudCmd.View.hide(); +} + +export async function show(name, options = {}) { + const {positionLoad, relative} = options; Images.show.load(positionLoad); if (relative) - name += relativeQuery; + name += '?relative'; - Markdown.read(name, (error, inner) => { - const name = 'div'; - const className = 'help'; - - const div = load({ - name, - className, - inner, + const [error, innerHTML] = await Markdown.read(name); + Images.hide(); + + if (error) + return alert(error.message, { + cancel: false, }); - - Images.hide(); - - CloudCmd.View.show(div); + + const className = 'help'; + + const div = createElement('div', { + className, + innerHTML, }); + + CloudCmd.View.show(div); } - diff --git a/client/modules/menu.js b/client/modules/menu.js deleted file mode 100644 index e82c5871..00000000 --- a/client/modules/menu.js +++ /dev/null @@ -1,369 +0,0 @@ -/* global CloudCmd, DOM */ - -'use strict'; - -CloudCmd.Menu = MenuProto; - -const exec = require('execon'); -const wrap = require('wraptile/legacy'); - -const supermenu = require('supermenu'); - -const {FS} = require('../../common/cloudfunc'); - -const load = require('../dom/load'); -const RESTful = require('../dom/rest'); - -function MenuProto(Position) { - const config = CloudCmd.config; - const Buffer = DOM.Buffer; - const Info = DOM.CurrentInfo; - - let Loading = true; - const Key = CloudCmd.Key; - const Events = DOM.Events; - const Dialog = DOM.Dialog; - const Images = DOM.Images; - const Menu = this; - const TITLE = 'Cloud Commander'; - const alertNoFiles = wrap(Dialog.alert.noFiles)(TITLE); - const uploadTo = wrap(_uploadTo); - - let MenuShowedName; - let MenuContext; - let MenuContextFile; - - this.ENABLED = false; - - function init() { - Loading = true; - Menu.show(); - - Events.addKey(listener); - } - - this.hide = () => { - MenuContext.hide(); - MenuContextFile.hide(); - }; - - this.show = (position) => { - show(position); - Images.hide(); - }; - - function getPosition(position) { - if (position) - return { - x: position.x, - y: position.y, - }; - - if (Position) - return { - x: Position.x, - y: Position.y, - }; - if (position) - return { - x: position.x, - y: position.y, - }; - - return getCurrentPosition(); - } - - function getMenuNameByEl(el) { - if (!el) - return 'context'; - - const name = DOM.getCurrentName(el); - - if (name === '..') - return 'context'; - - return 'contextFile'; - } - - function getMenuByName(name) { - if (name === 'context') - return MenuContext; - - return MenuContextFile; - } - - function show(position) { - const {x, y} = getPosition(position); - - if (!Loading) { - MenuContext.show(x, y); - MenuContextFile.show(x, y); - return; - } - - loadFileMenuData((isAuth, menuDataFile) => { - const NOT_FILE = true; - const fm = DOM.getFM(); - const menuData = getMenuData(isAuth); - const options = getOptions(NOT_FILE); - const optionsFile = getOptions(); - - MenuContext = supermenu(fm, options, menuData); - MenuContextFile = supermenu(fm, optionsFile, menuDataFile); - - const el = DOM.getCurrentByPosition({x, y}); - const menuName = getMenuNameByEl(el); - const menu = getMenuByName(menuName); - - menu.show(x, y); - - Loading = false; - Position = null; - }); - } - - function getOptions(notFile) { - let name, func; - - if (notFile) { - name = 'context'; - func = Key.unsetBind; - } else { - name = 'contextFile'; - } - - const options = { - icon : true, - beforeClose : Key.setBind, - beforeShow : exec.with(beforeShow, func), - beforeClick, - name, - }; - - return options; - } - - function getMenuData(isAuth) { - const menu = { - 'Paste': Buffer.paste, - 'New': { - 'File': DOM.promptNewFile, - 'Directory': DOM.promptNewDir - }, - 'Upload': () => { - CloudCmd.Upload.show(); - }, - 'Upload From Cloud': uploadFromCloud, - '(Un)Select All': DOM.toggleAllSelectedFiles - }; - - if (isAuth) - menu['Log Out'] = CloudCmd.logOut; - - return menu; - } - - function loadFileMenuData(callback) { - const is = CloudCmd.config('auth'); - const show = wrap((name) => { - CloudCmd[name].show(); - }); - - const menuBottom = getMenuData(is); - - const menuTop = { - 'View': show('View'), - 'Edit': show('EditFile'), - 'Rename': () => { - setTimeout(DOM.renameCurrent, 100); - }, - 'Delete': () => { - CloudCmd.Operation.show('delete'); - }, - 'Pack': () => { - CloudCmd.Operation.show('pack'); - }, - 'Extract': () => { - CloudCmd.Operation.show('extract'); - }, - 'Download': preDownload, - 'Upload To Cloud': uploadTo('Cloud'), - 'Cut': () => { - isCurrent(Buffer.cut, alertNoFiles); - }, - 'Copy': () => { - isCurrent(Buffer.copy, alertNoFiles); - }, - }; - - const menu = Object.assign({}, menuTop, menuBottom); - - callback(is, menu); - } - - function isCurrent(yesFn, noFn) { - if (Info.name !== '..') - return yesFn(); - - noFn(); - } - - function isPath(x, y) { - const {panel} = Info; - const isEmptyRoot = !panel; - - if (isEmptyRoot) - return false; - - const el = document.elementFromPoint(x, y); - const elements = panel.querySelectorAll('[data-name="js-path"] *'); - const is = ~[].indexOf.call(elements, el); - - return is; - } - - function beforeShow(callback, params) { - const name = params.name; - let el = DOM.getCurrentByPosition({ - x: params.x, - y: params.y - }); - - const menuName = getMenuNameByEl(el); - let notShow = menuName === 'contextFile'; - - if (params.name === 'contextFile') { - notShow = !notShow; - } - - if (!notShow) - MenuShowedName = name; - - exec(callback); - - if (!notShow) - notShow = isPath(params.x, params.y); - - return notShow; - } - - function beforeClick(name) { - return MenuShowedName !== name; - } - - function _uploadTo(nameModule) { - Info.getData((error, data) => { - if (error) - return; - - const name = Info.name; - const execFrom = CloudCmd.execFromModule; - - execFrom(nameModule, 'uploadFile', name, data); - }); - - CloudCmd.log('Uploading to ' + name + '...'); - } - - function uploadFromCloud() { - Images.show.load('top'); - - CloudCmd.execFromModule('Cloud', 'saveFile', (currentName, data) => { - const path = DOM.getCurrentDirPath() + currentName; - - RESTful.write(path, data, (error) => { - if (error) - return; - - CloudCmd.refresh({currentName}); - }); - }); - } - - function preDownload() { - download(config('packer')); - } - - function download(type) { - const TIME = 30 * 1000; - const prefixUr = CloudCmd.PREFIX_URL; - const PACK = '/pack'; - const date = Date.now(); - const files = DOM.getActiveFiles(); - - if (!files.length) - return alertNoFiles(); - - files.forEach((file) => { - const selected = DOM.isSelected(file); - const isDir = DOM.isCurrentIsDir(file); - const path = DOM.getCurrentPath(file); - - CloudCmd.log('downloading file ' + path + '...'); - /* - * if we send ajax request - - * no need in hash so we escape # - * and all other characters, like "%" - */ - const encodedPath = encodeURI(path).replace(/#/g, '%23'); - const id = load.getIdBySrc(path); - - let src; - - if (isDir) - src = prefixUr + PACK + encodedPath + DOM.getPackerExt(type); - else - src = prefixUr + FS + encodedPath + '?download'; - - const element = load({ - id : id + '-' + date, - name : 'iframe', - async : false, - className : 'hidden', - src, - }); - - const {body} = document; - const removeChild = body.removeChild.bind(body, element); - - setTimeout(removeChild, TIME); - - if (selected) - DOM.toggleSelectedFile(file); - }); - } - - function getCurrentPosition() { - const current = Info.element; - const rect = current.getBoundingClientRect(); - - const position = { - x: Math.round(rect.left + rect.width / 3), - y: Math.round(rect.top) - }; - - return position; - } - - function listener(event) { - const F9 = Key.F9; - const ESC = Key.ESC; - const key = event.keyCode; - const isBind = Key.isBind(); - - if (!isBind) - return; - - if (key === ESC) - return Menu.hide(); - - if (key === F9) { - const position = getCurrentPosition(); - MenuContext.show(position.x, position.y); - - event.preventDefault(); - } - } - - init(); -} diff --git a/client/modules/menu/cloudmenu.js b/client/modules/menu/cloudmenu.js new file mode 100644 index 00000000..8f7c1e68 --- /dev/null +++ b/client/modules/menu/cloudmenu.js @@ -0,0 +1,31 @@ +import {supermenu} from 'supermenu'; + +const noop = () => {}; +const {CloudCmd} = globalThis; + +export const createCloudMenu = async (fm, options, menuData) => { + const createMenu = await loadMenu(); + const menu = await createMenu(fm, options, menuData); + + menu.addContextMenuListener = menu.addContextMenuListener || noop; + + return menu; +}; + +async function loadMenu() { + if (CloudCmd.config('menu') === 'aleman') { + const {prefix} = CloudCmd; + const {host, protocol} = globalThis.location; + const url = `${protocol}//${host}${prefix}/node_modules/aleman/menu/menu.js`; + const {createMenu} = await import(/* webpackIgnore: true */url); + + return createMenu; + } + + return createSupermenu; +} + +function createSupermenu(name, options, menuData) { + const element = document.querySelector('[data-name="js-fm"]'); + return supermenu(element, options, menuData); +} diff --git a/client/modules/menu/index.js b/client/modules/menu/index.js new file mode 100644 index 00000000..7235591e --- /dev/null +++ b/client/modules/menu/index.js @@ -0,0 +1,355 @@ +import exec from 'execon'; +import wrap from 'wraptile'; +import createElement from '@cloudcmd/create-element'; +import {getIdBySrc} from '#dom/load'; +import * as RESTful from '#dom/rest'; +import {FS} from '#common/cloudfunc'; + +const {CloudCmd, DOM} = globalThis; +const {config, Key} = CloudCmd; + +const { + Buffer, + Events, + Dialog, + Images, +} = DOM; + +const Info = DOM.CurrentInfo; +const alertNoFiles = Dialog.alert.noFiles; +const uploadTo = wrap(_uploadTo); + +let MenuShowedName; +let MenuContext; +let MenuContextFile; + +export const ENABLED = false; + +CloudCmd.Menu = { + init, + show, + hide, +}; + +export async function init() { + const {isAuth, menuDataFile} = getFileMenuData(); + + const fm = DOM.getFM(); + const menuData = getMenuData(isAuth); + + const options = getOptions({ + type: 'context', + }); + + const optionsFile = getOptions({ + type: 'file', + }); + + const {createCloudMenu} = await import('./cloudmenu.js'); + + const {name} = fm.dataset; + + MenuContext = await createCloudMenu(name, options, menuData); + MenuContextFile = await createCloudMenu(name, optionsFile, menuDataFile); + + MenuContext.addContextMenuListener(); + MenuContextFile.addContextMenuListener(); + + Events.addKey(listener); +} + +export function hide() { + MenuContext.hide(); + MenuContextFile.hide(); +} + +export function show(position) { + const {x, y} = getPosition(position); + + MenuContext.show(x, y); + MenuContextFile.show(x, y); + + Images.hide(); +} + +function getPosition(position) { + if (position) + return { + x: position.x, + y: position.y, + }; + + return getCurrentPosition(); +} + +function getMenuNameByEl(el) { + if (!el) + return 'context'; + + const name = DOM.getCurrentName(el); + + if (name === '..') + return 'context'; + + return 'contextFile'; +} + +function getOptions({type}) { + let name; + let func; + + if (type === 'context') { + name = 'context'; + func = Key.unsetBind; + } else if (type === 'file') { + name = 'contextFile'; + } + + const options = { + icon: true, + infiniteScroll: false, + beforeClose: Key.setBind, + beforeHide: Key.setBind, + beforeShow: exec.with(beforeShow, func), + beforeClick, + name, + }; + + return options; +} + +function getMenuData(isAuth) { + const menu = { + 'Paste': Buffer.paste, + 'New': { + File: DOM.promptNewFile, + Directory: DOM.promptNewDir, + }, + 'Upload': () => { + CloudCmd.Upload.show(); + }, + 'Upload From Cloud': uploadFromCloud, + 'Toggle File Selection': DOM.toggleSelectedFile, + '(Un)Select All': DOM.toggleAllSelectedFiles, + }; + + if (isAuth) + menu['Log Out'] = CloudCmd.logOut; + + return menu; +} + +function getFileMenuData() { + const isAuth = CloudCmd.config('auth'); + + const menuBottom = getMenuData(isAuth); + const menuTop = { + 'View': () => { + CloudCmd.View.show(); + }, + 'Edit': () => { + const name = config('vim') ? 'EditFileVim' : 'EditFile'; + CloudCmd[name].show(); + }, + 'Rename': () => { + setTimeout(DOM.renameCurrent, 100); + }, + 'Delete': () => { + CloudCmd.Operation.show('delete'); + }, + 'Pack': () => { + CloudCmd.Operation.show('pack'); + }, + 'Extract': () => { + CloudCmd.Operation.show('extract'); + }, + 'Download': preDownload, + 'Upload To Cloud': uploadTo('Cloud'), + 'Cut': () => { + isCurrent(Buffer.cut, alertNoFiles); + }, + 'Copy': () => { + isCurrent(Buffer.copy, alertNoFiles); + }, + }; + + const menuDataFile = { + ...menuTop, + ...menuBottom, + }; + + return { + isAuth, + menuDataFile, + }; +} + +function isCurrent(yesFn, noFn) { + if (Info.name !== '..') + return yesFn(); + + noFn(); +} + +function isPath(x, y) { + const {panel} = Info; + const isEmptyRoot = !panel; + + if (isEmptyRoot) + return false; + + const el = document.elementFromPoint(x, y); + const elements = panel.querySelectorAll('[data-name="js-path"] *'); + + return !~[].indexOf.call(elements, el); +} + +function beforeShow(callback, params) { + Key.unsetBind(); + + const { + name, + position = { + x: params.x, + y: params.y, + }, + } = params; + + const {x, y} = position; + + const el = DOM.getCurrentByPosition({ + x, + y, + }); + + const menuName = getMenuNameByEl(el); + + let isShow = menuName !== 'contextFile'; + + if (params.name === 'contextFile') + isShow = !isShow; + + if (isShow) + MenuShowedName = name; + + exec(callback); + + if (isShow) + isShow = isPath(x, y); + + return isShow; +} + +const beforeClick = (name) => MenuShowedName !== name; + +async function _uploadTo(nameModule) { + const [error, data] = await Info.getData(); + + if (error) + return; + + const {name} = Info; + + CloudCmd.execFromModule(nameModule, 'uploadFile', name, data); + CloudCmd.log(`Uploading to ${name}...`); +} + +function uploadFromCloud() { + Images.show.load('top'); + + CloudCmd.execFromModule('Cloud', 'saveFile', async (currentName, data) => { + const path = DOM.getCurrentDirPath() + currentName; + const [e] = await RESTful.write(path, data); + + if (e) + return; + + await CloudCmd.refresh({ + currentName, + }); + }); +} + +function preDownload() { + download(config('packer')); +} + +function download(type) { + const TIME = 30 * 1000; + const {prefixURL} = CloudCmd; + const PACK = '/pack'; + const date = Date.now(); + const files = DOM.getActiveFiles(); + + if (!files.length) + return alertNoFiles(); + + for (const file of files) { + const selected = DOM.isSelected(file); + const isDir = DOM.isCurrentIsDir(file); + const path = DOM.getCurrentPath(file); + + CloudCmd.log(`downloading file ${path}...`); + + /* + * if we send ajax request - + * no need in hash so we escape # + * and all other characters, like "%" + */ + const encodedPath = encodeURI(path).replace(/#/g, '#'); + const id = getIdBySrc(path); + + let src; + + if (isDir) + src = prefixURL + PACK + encodedPath + DOM.getPackerExt(type); + else + src = prefixURL + FS + encodedPath + '?download'; + + const element = createElement('iframe', { + id: id + '-' + date, + async: false, + className: 'hidden', + src, + }); + + const {body} = document; + const removeChild = body.removeChild.bind(body, element); + + setTimeout(removeChild, TIME); + + if (selected) + DOM.toggleSelectedFile(file); + } +} + +function getCurrentPosition() { + const current = Info.element; + const rect = current.getBoundingClientRect(); + + const position = { + x: Math.round(rect.left + rect.width / 3), + y: Math.round(rect.top), + }; + + return position; +} + +function listener(event) { + const {F9, ESC} = Key; + + const key = event.keyCode; + const isBind = Key.isBind(); + + if (key === ESC) { + Key.setBind(); + return hide(); + } + + if (isBind && key === F9) { + const position = getCurrentPosition(); + MenuContext.show(position.x, position.y); + + event.preventDefault(); + } +} diff --git a/client/modules/operation/format.js b/client/modules/operation/format.js new file mode 100644 index 00000000..c639799e --- /dev/null +++ b/client/modules/operation/format.js @@ -0,0 +1,6 @@ +export const format = (operation, from, to) => { + if (!to) + return `${operation} ${from}`; + + return `${operation} ${from} -> ${to}`; +}; diff --git a/client/modules/operation/get-next-current-name.js b/client/modules/operation/get-next-current-name.js new file mode 100644 index 00000000..63445888 --- /dev/null +++ b/client/modules/operation/get-next-current-name.js @@ -0,0 +1,16 @@ +import currify from 'currify'; + +const not = currify((array, value) => !array.includes(value)); +const notOneOf = currify((a, b) => a.filter(not(b))); + +export const getNextCurrentName = (currentName, names, removedNames) => { + const i = names.indexOf(currentName); + + const nextNames = notOneOf(names, removedNames); + const {length} = nextNames; + + if (nextNames[i]) + return nextNames[i]; + + return nextNames[length - 1]; +}; diff --git a/client/modules/operation/index.js b/client/modules/operation/index.js index 4db35fc0..f349f7d8 100644 --- a/client/modules/operation/index.js +++ b/client/modules/operation/index.js @@ -1,472 +1,516 @@ -/* global CloudCmd */ -/* global Util */ -/* global DOM */ -/* global fileop */ +import currify from 'currify'; +import wraptile from 'wraptile'; +import {promisify} from 'es6-promisify'; +import exec from 'execon'; +import load from 'load.js'; +import {tryToCatch} from 'try-to-catch'; +import {encode} from '#common/entity'; +import {removeExtension} from './remove-extension.js'; +import {setListeners} from './set-listeners.js'; +import {getNextCurrentName} from './get-next-current-name.js'; -'use strict'; - -CloudCmd.Operation = OperationProto; - -const currify = require('currify/legacy'); -const wraptile = require('wraptile/legacy'); -const exec = require('execon'); - -const { - encode, -} = require('../../../common/entity'); - -const RESTful = require('../../dom/rest'); -const removeExtension = require('./remove-extension'); -const setListeners = require('./set-listeners'); +const {DOM, CloudCmd} = globalThis; const removeQuery = (a) => a.replace(/\?.*/, ''); -function OperationProto(operation, data) { - const Name = 'Operation'; - const { - TITLE, - config, - } = CloudCmd; - const {Dialog, Images} = DOM; - const initOperations = wraptile(_initOperations); - const authCheck = wraptile(_authCheck); +const Name = 'Operation'; + +const {config} = CloudCmd; +const {Dialog, Images} = DOM; + +const authCheck = wraptile(_authCheck); +const Operation = {}; + +let Loaded; + +let copyFn; +let moveFn; +let deleteFn; +let extractFn; +let packZipFn; +let packTarFn; + +const Info = DOM.CurrentInfo; +const showLoad = Images.show.load.bind(null, 'top'); + +const processFiles = currify(_processFiles); + +const noFilesCheck = () => { + const {length} = DOM.getActiveFiles(); + const is = Boolean(!length); - let Loaded; + if (is) + return Dialog.alert.noFiles(); - let { - cp: copyFn, - mv: moveFn, - delete: deleteFn, - extract: extractFn, - } = RESTful; + return is; +}; + +export const init = promisify((callback) => { + showLoad(); - let packZipFn = RESTful.pack; - let packTarFn = RESTful.pack; - - const Info = DOM.CurrentInfo; - const showLoad = Images.show.load.bind(null, 'top'); - const Operation = this; - const processFiles = currify(_processFiles); - - const noFilesCheck = () => { - const {length} = DOM.getActiveFiles(); - const is = Boolean(!length); - - if (is) - return Dialog.alert.noFiles(TITLE); - - return is; - }; - - function init() { - showLoad(); - - exec.series([ - DOM.loadSocket, - (callback) => { - if (!config('progress')) - return callback(); - - load(initOperations(CloudCmd.PREFIX, callback)); - }, - () => { - Loaded = true; - Images.hide(); - Operation.show(operation, data); - } - ]); - } - - function _authCheck(spawn, ok) { - const accept = wraptile(ok); - const alertDialog = wraptile(Dialog.alert); - - spawn.on('accept', accept(spawn)); - spawn.on('reject', alertDialog (TITLE, 'Wrong credentials!')); - spawn.emit('auth', config('username'), config('password')); - } - - function _initOperations(socketPrefix, fn) { - const prefix = `${socketPrefix}/fileop`; - fileop({prefix, socketPrefix}, (e, operator) => { - fn(); + exec.series([ + DOM.loadSocket, + async (callback) => { + if (config('dropbox')) + return callback(); - operator.on('connect', authCheck(operator, onConnect)); - operator.on('disconnect', onDisconnect); - }); - } - - function onConnect(operator) { - packTarFn = (data, callback) => { - operator.tar(data.from, data.to, data.names) - .then(setListeners({noContinue: true}, callback)); - }; - - packZipFn = (data, callback) => { - operator.zip(data.from, data.to, data.names) - .then(setListeners({noContinue: true}, callback)); - }; - - deleteFn = (from, files, callback) => { - from = removeQuery(from); - operator.remove(from, files) - .then(setListeners(callback)); - }; - - copyFn = (data, callback) => { - operator.copy(data.from, data.to, data.names) - .then(setListeners(callback)); - }; - - moveFn = (data, callback) => { - operator.move(data.from, data.to, data.names) - .then(setListeners(callback)); - }; - - extractFn = (data, callback) => { - operator.extract(data.from, data.to) - .then(setListeners({noContinue: true}, callback)); - }; - } - - function onDisconnect() { - packZipFn = RESTful.pack; - packTarFn = RESTful.pack; - deleteFn = RESTful.delete; - copyFn = RESTful.cp; - moveFn = RESTful.mv; - extractFn = RESTful.extract; - } - - function getPacker(type) { - if (type === 'zip') - return packZipFn; - - return packTarFn; - } - - this.hide = () => { - CloudCmd.View.hide(); - }; - - this.show = (operation, data) => { - if (!Loaded) - return; - - if (operation === 'copy') - return Operation.copy(data); - - if (operation === 'move') - return Operation.move(data); - - if (operation === 'delete') - return Operation.delete(); - - if (operation === 'delete:silent') - return Operation.deleteSilent(); - - if (operation === 'pack') - return Operation.pack(); - - if (operation === 'extract') - return Operation.extract(); - }; - - this.copy = processFiles({ - type: 'copy', - }); - - this.move = processFiles({ - type: 'move' - }); - - this.delete = () => { - promptDelete(); - }; - - this.deleteSilent = () => { - deleteSilent(); - }; - - this.pack = () => { - const isZip = config('packer') === 'zip'; - twopack('pack', isZip ? 'zip' : 'tar'); - }; - - this.extract = () => { - twopack('extract'); - }; - - /** - * prompt and delete current file or selected files - * - * @currentFile - */ - function promptDelete() { - if (noFilesCheck()) - return; - - const msgAsk = 'Do you really want to delete the '; - const msgSel = 'selected '; - - const files = DOM.getActiveFiles(); - const names = DOM.getFilenames(files); - const n = names.length; - - let msg; - if (n) { - let name = ''; - - for (let i = 0; i < 5 && i < n; i++) - name += '\n' + names[i]; - - if (n >= 5) - name += '\n...'; - - msg = msgAsk + msgSel + n + ' files/directories?\n' + encode(name); - } else { - const current = DOM.getCurrentFile(); - const isDir = DOM.isCurrentIsDir(current); - const getType = (isDir) => { - return isDir ? 'directory' : 'file'; - }; - - const type = getType(isDir) + ' '; - - const name = DOM.getCurrentName(current); - msg = msgAsk + msgSel + type + name + '?'; - } - - const cancel = false; - - Dialog.confirm(TITLE, msg, {cancel}).then(() => { - deleteSilent(files); - }); - } - - /** - * delete current or selected files - * - * @files - */ - function deleteSilent(files = DOM.getActiveFiles()) { - const query = '?files'; - const path = Info.dirPath; - - if (noFilesCheck()) - return; - - showLoad(); - - const names = DOM.getFilenames(files); - - deleteFn(path + query, names, (error) => { - const Storage = DOM.Storage; - const dirPath = Info.dirPath; - - if (error) - return CloudCmd.refresh(); - - DOM.deleteSelected(files); - Storage.removeMatch(dirPath); - }); - } - - /* - * process files (copy or move) - * @param data - * @param operation - */ - function _processFiles(options, data) { - let selFiles, files; - let panel; - let shouldAsk; - let sameName; - let ok; - - let from = ''; - let to = ''; - - let names = []; - - if (data) { - from = data.from; - to = data.to; - names = data.names; - panel = Info.panel; - } else { - from = Info.dirPath; - to = DOM.getNotCurrentDirPath(); - selFiles = DOM.getSelectedFiles(); - names = DOM.getFilenames(selFiles); - data = {}; - shouldAsk = true; - panel = Info.panelPassive; - } - - if (!names.length) - names.push(DOM.getCurrentName()); - - const name = names[0]; - - sameName = DOM.getCurrentByName(name, panel); - - if (!data && noFilesCheck()) - return; - - const {type} = options; - - const isCopy = type === 'copy'; - const option = isCopy ? 'confirmCopy' : 'confirmMove'; - const title = isCopy ? 'Copy' : 'Rename/Move'; - const operation = isCopy ? copyFn : moveFn; - - if (shouldAsk && config(option)) - return message(title, to, names.map(encode)) - .then(ask); - - ask(to); - - function ask(to) { - ok = from !== to && to; - - if (ok && !shouldAsk || !sameName) - return go(); - - const str = `"${ name }" already exist. Overwrite?`; - const cancel = false; - - Dialog.confirm(TITLE, str, {cancel}).then(go); - - function go() { - showLoad(); - - files = { - from, - to, - names, - }; - - operation(files, () => { - DOM.Storage.remove(from, () => { - const { - panel, - panelPassive, - } = Info; - - const setCurrent = () => { - const currentName = name || data.names[0]; - DOM.setCurrentByName(currentName); - }; - - if (!Info.isOnePanel) - CloudCmd.refresh({ - panel: panelPassive, - noCurrent: true, - }); - - CloudCmd.refresh({panel}, setCurrent); - }); - }); - } - } - } - - function checkEmpty(name, operation) { - if (!operation) - throw Error(name + ' could not be empty!'); - } - - function twopack(operation, type) { - let op; - let fileFrom; - let currentName = Info.name; - - const Images = DOM.Images; - const path = Info.path; - const dirPath = Info.dirPath; - const activeFiles = DOM.getActiveFiles(); - const names = DOM.getFilenames(activeFiles); - - checkEmpty('operation', operation); - - if (!names.length) - return Dialog.alert.noFiles(TITLE); - - switch(operation) { - case 'extract': - op = extractFn; - - fileFrom = { - from: path, - to: dirPath - }; - - currentName = removeExtension(currentName); - - break; - - case 'pack': - op = getPacker(type); - - if (names.length > 1) - currentName = Info.dir; - - currentName += DOM.getPackerExt(type); - - fileFrom = { - from: dirPath, - to: dirPath + currentName, - names, - }; - break; - } - - Images.show.load('top'); - - op(fileFrom, (error) => { - !error && CloudCmd.refresh({ - currentName - }); - }); - } - - function message(msg, to, names) { - const n = names.length; - const name = names[0]; - - msg += ' '; - - if (names.length > 1) - msg += n + ' file(s)'; - else - msg += '"' + name + '"'; - - msg += ' to'; - - const cancel = false; - - return Dialog.prompt(TITLE, msg, to, {cancel}); - } - - function load(callback) { - const prefix = CloudCmd.PREFIX; - const file = `${prefix}/fileop/fileop.js`; - - DOM.load.js(file, (error) => { - if (error) { - Dialog.alert(TITLE, error.message); - return exec(callback); - } + const {prefix, prefixSocket} = CloudCmd; + await loadAll(); + await initOperations(prefix, prefixSocket, callback); + }, + (callback) => { Loaded = true; - Util.timeEnd(Name + ' load'); - exec(callback); - }); - - Util.time(Name + ' load'); - } + Images.hide(); + callback(); + }, + ], callback); +}); + +function _authCheck(spawn, ok) { + const accept = wraptile(ok); + const alertDialog = wraptile(Dialog.alert); - init(); + spawn.on('accept', accept(spawn)); + spawn.on('reject', alertDialog('Wrong credentials!')); + spawn.emit('auth', config('username'), config('password')); } +const onConnect = currify((fn, operator) => { + setOperations(operator); + fn(); +}); + +async function initOperations(prefix, socketPrefix, fn) { + socketPrefix = `${socketPrefix}/fileop`; + + const operator = await globalThis.fileop({ + prefix, + socketPrefix, + }); + + operator.on('connect', authCheck(operator, onConnect(fn))); +} + +function setOperations(operator) { + packTarFn = ({from, to, names}, callback) => { + const operation = 'Tar'; + const listen = setListeners({ + operation, + callback, + noContinue: true, + from, + to, + }); + + operator + .tar(from, to, names) + .then(listen); + }; + + packZipFn = ({from, to, names}, callback) => { + const operation = 'Zip'; + const listen = setListeners({ + operation, + callback, + noContinue: true, + from, + to, + }); + + operator + .zip(from, to, names) + .then(listen); + }; + + deleteFn = (from, files, callback) => { + from = removeQuery(from); + + const operation = 'Delete'; + const listen = setListeners({ + operation, + callback, + from, + }); + + operator + .remove(from, files) + .then(listen); + }; + + copyFn = ({from, to, names}, callback) => { + const operation = 'Copy'; + const listen = setListeners({ + operation, + callback, + from, + to, + names, + }); + + operator + .copy(from, to, names) + .then(listen); + }; + + moveFn = ({from, to, names}, callback) => { + const operation = 'Move'; + const listen = setListeners({ + operation, + callback, + from, + to, + }); + + operator + .move(from, to, names) + .then(listen); + }; + + extractFn = ({from, to}, callback) => { + const operation = 'Extract'; + const listen = setListeners({ + operation, + callback, + noContinue: true, + from, + to, + }); + + operator + .extract(from, to) + .then(listen); + }; +} + +function getPacker(type) { + if (type === 'zip') + return packZipFn; + + return packTarFn; +} + +export function hide() { + CloudCmd.View.hide(); +} + +export function show(operation, data) { + if (!Loaded) + return; + + if (operation === 'copy') + return Operation.copy(data); + + if (operation === 'move') + return Operation.move(data); + + if (operation === 'delete') + return Operation.delete(); + + if (operation === 'delete:silent') + return Operation.deleteSilent(); + + if (operation === 'pack') + return Operation.pack(); + + if (operation === 'extract') + return Operation.extract(); +} + +Operation.copy = processFiles({ + type: 'copy', +}); + +Operation.move = processFiles({ + type: 'move', +}); + +Operation.delete = promptDelete; + +Operation.deleteSilent = deleteSilent; + +Operation.pack = () => { + const isZip = config('packer') === 'zip'; + twopack('pack', isZip ? 'zip' : 'tar'); +}; + +Operation.extract = () => { + twopack('extract'); +}; + +/** + * prompt and delete current file or selected files + * + * @currentFile + */ +async function promptDelete() { + if (noFilesCheck()) + return; + + const msgAsk = 'Do you really want to delete the '; + const msgSel = 'selected '; + + const files = DOM.getActiveFiles(); + const names = DOM.getFilenames(files); + const n = names.length; + + let msg; + + if (n) { + let name = ''; + + for (let i = 0; i < 5 && i < n; i++) + name += '\n' + names[i]; + + if (n >= 5) + name += '\n...'; + + msg = msgAsk + msgSel + n + ' files/directories?\n' + encode(name); + } else { + const current = DOM.getCurrentFile(); + const isDir = DOM.isCurrentIsDir(current); + const getType = (isDir) => isDir ? 'directory' : 'file'; + + const type = getType(isDir) + ' '; + + const name = DOM.getCurrentName(current); + + msg = msgAsk + msgSel + type + name + '?'; + } + + const [cancel] = await Dialog.confirm(msg); + + if (cancel) + return; + + deleteSilent(files); +} + +/** + * delete current or selected files + * + * @files + */ +function deleteSilent(files = DOM.getActiveFiles()) { + const query = '?files'; + const path = Info.dirPath; + + if (noFilesCheck()) + return; + + showLoad(); + + const removedNames = DOM.getFilenames(files); + const names = DOM.CurrentInfo.files.map(DOM.getCurrentName); + const currentName = DOM.getCurrentName(); + const nextCurrentName = getNextCurrentName(currentName, names, removedNames); + + deleteFn(path + query, removedNames, async () => { + await CloudCmd.refresh(); + + const names = Info.files.map(DOM.getCurrentName); + const isCurrent = names.includes(currentName); + + const name = isCurrent ? currentName : nextCurrentName; + + DOM.setCurrentByName(name); + }); +} + +/* + * process files (copy or move) + * @param data + * @param operation + */ +async function _processFiles(options, data) { + let selFiles; + let files; + let panel; + let shouldAsk; + let ok; + + let from = ''; + let to = ''; + + let names = []; + + if (data) { + ({ + from, + to, + names, + } = data); + + ({panel} = Info); + } else { + from = Info.dirPath; + to = DOM.getNotCurrentDirPath(); + selFiles = DOM.getSelectedFiles(); + names = DOM.getFilenames(selFiles); + data = {}; + shouldAsk = true; + panel = Info.panelPassive; + } + + if (!names.length) + names.push(DOM.getCurrentName()); + + const [name] = names; + + const sameName = DOM.getCurrentByName(name, panel); + + if (!data && noFilesCheck()) + return; + + const {type} = options; + + const isCopy = type === 'copy'; + const option = isCopy ? 'confirmCopy' : 'confirmMove'; + const title = isCopy ? 'Copy' : 'Rename/Move'; + const operation = isCopy ? copyFn : moveFn; + + if (shouldAsk && config(option)) { + const [cancel, newTo] = await prompt(title, to, names.map(encode)); + + if (!cancel) + ask(newTo); + + return; + } + + ask(to); + + function ask(to) { + ok = from !== to && to; + + if (ok && !shouldAsk || !sameName) + return go(); + + const str = `"${name}" already exist. Overwrite?`; + const cancel = false; + + Dialog + .confirm(str, { + cancel, + }) + .then(go); + + function go() { + showLoad(); + + files = { + from, + to, + names, + }; + + operation(files, async () => { + await DOM.Storage.remove(from); + + const {panel, panelPassive} = Info; + + if (!Info.isOnePanel) + CloudCmd.refresh({ + panel: panelPassive, + noCurrent: true, + }); + + CloudCmd.refresh({ + panel, + }); + }); + } + } +} + +function checkEmpty(name, operation) { + if (!operation) + throw Error(`${name} could not be empty!`); +} + +function twopack(operation, type) { + let op; + let fileFrom; + let currentName = Info.name; + + const {path, dirPath} = Info; + + const activeFiles = DOM.getActiveFiles(); + const names = DOM.getFilenames(activeFiles); + + checkEmpty('operation', operation); + + if (!names.length) + return Dialog.alert.noFiles(); + + switch(operation) { + case 'extract': + op = extractFn; + + fileFrom = { + from: path, + to: dirPath, + }; + + currentName = removeExtension(currentName); + + break; + + case 'pack': + op = getPacker(type); + + if (names.length > 1) + currentName = Info.dir; + + currentName += DOM.getPackerExt(type); + + fileFrom = { + from: dirPath, + to: dirPath + currentName, + names, + }; + break; + } + + showLoad(); + + op(fileFrom, (error) => { + !error && CloudCmd.refresh({ + currentName, + }); + }); +} + +async function prompt(msg, to, names) { + const n = names.length; + const [name] = names; + + msg += ' '; + + if (names.length > 1) + msg += `${n} file(s)`; + else + msg += `"${name}"`; + + msg += ' to'; + + return await Dialog.prompt(msg, to); +} + +globalThis.CloudCmd[Name] = { + init, + hide, + show, +}; + +async function loadAll() { + const {prefix} = globalThis.CloudCmd; + const file = `${prefix}/fileop/fileop.js`; + + const [error] = await tryToCatch(load.js, file); + + if (error) + Dialog.alert(error.message); + + Loaded = true; +} diff --git a/client/modules/operation/remove-extension.js b/client/modules/operation/remove-extension.js index 52772c30..e6ce2c46 100644 --- a/client/modules/operation/remove-extension.js +++ b/client/modules/operation/remove-extension.js @@ -1,20 +1,17 @@ -'use strict'; +import {getExt} from '#common/util'; -const {getExt} = require('../../../common/util'); - -module.exports = (name) => { +export const removeExtension = (name) => { const ext = getExtension(name); return name.replace(ext, ''); }; function getExtension(name) { - if (/\.tar\.gz$/.test(name)) + if (name.endsWith('.tar.gz')) return '.tar.gz'; - if (/\.tar\.bz2$/.test(name)) + if (name.endsWith('.tar.bz2')) return '.tar.bz2'; return getExt(name); } - diff --git a/test/client/modules/operation/remove-extension.js b/client/modules/operation/remove-extension.spec.js similarity index 81% rename from test/client/modules/operation/remove-extension.js rename to client/modules/operation/remove-extension.spec.js index 6491f052..fa11e9e2 100644 --- a/test/client/modules/operation/remove-extension.js +++ b/client/modules/operation/remove-extension.spec.js @@ -1,9 +1,5 @@ -'use strict'; - -const test = require('tape'); -const dir = '../../../../client/modules/operation'; - -const removeExtension = require(`${dir}/remove-extension`); +import test from 'supertape'; +import {removeExtension} from './remove-extension.js'; test('cloudcmd: client: modules: operation: removeExtension: .tar.gz', (t) => { const name = 'hello'; @@ -16,7 +12,7 @@ test('cloudcmd: client: modules: operation: removeExtension: .tar.gz', (t) => { test('cloudcmd: client: modules: operation: removeExtension: .tar.bz2', (t) => { const name = 'hello'; const fullName = `${name}.tar.bz2`; - + t.equal(removeExtension(fullName), name, 'should remove .tar.bz2'); t.end(); }); @@ -24,8 +20,7 @@ test('cloudcmd: client: modules: operation: removeExtension: .tar.bz2', (t) => { test('cloudcmd: client: modules: operation: removeExtension: .bz2', (t) => { const name = 'hello'; const fullName = `${name}.bz2`; - + t.equal(removeExtension(fullName), name, 'should remove .bz2'); t.end(); }); - diff --git a/client/modules/operation/set-listeners.js b/client/modules/operation/set-listeners.js index 33b7d802..e54e7d14 100644 --- a/client/modules/operation/set-listeners.js +++ b/client/modules/operation/set-listeners.js @@ -1,65 +1,75 @@ -'use strict'; - /* global DOM */ -/* global CloudCmd */ +import forEachKey from 'for-each-key'; +import wraptile from 'wraptile'; +import {format} from './format.js'; -const { - Images, - Dialog, -} = DOM; +const {Dialog, Images} = DOM; -const forEachKey = require('for-each-key/legacy'); -const { - TITLE, -} = CloudCmd; - -module.exports = (options, callback) => (emitter) => { - if (!callback) { - callback = options; - options = {}; - } +export const setListeners = (options) => (emitter) => { + const { + operation, + callback, + noContinue, + from, + to, + } = options; let done; - let lastError; + + const onAbort = wraptile(({emitter, operation}) => { + emitter.abort(); + + const msg = `${operation} aborted`; + + Dialog.alert(msg, { + cancel: false, + }); + }); const removeListener = emitter.removeListener.bind(emitter); const on = emitter.on.bind(emitter); + const message = format(operation, from, to); + const progress = Dialog.progress(message); + + progress.catch(onAbort({ + emitter, + operation, + })); + const listeners = { progress: (value) => { done = value === 100; - Images.setProgress(value); + progress.setProgress(value); }, end: () => { - Images - .hide() - .clearProgress(); - + Images.hide(); forEachKey(removeListener, listeners); + progress.remove(); - if (lastError || done) - callback(); + callback(); }, - error: (error) => { - lastError = error; - - if (options.noContinue) { + error: async (error) => { + if (noContinue) { listeners.end(error); - Dialog.alert(TITLE, error); + Dialog.alert(error); + progress.remove(); + return; } - Dialog.confirm(TITLE, error + '\n Continue?') - .then(() => { - emitter.continue(); - }, () => { - emitter.abort(); - }); - } + const [cancel] = await Dialog.confirm(`${error} + Continue?`); + + if (!done && !cancel) + return emitter.continue(); + + emitter.abort(); + progress.remove(); + }, }; forEachKey(on, listeners); }; - diff --git a/client/modules/polyfill.js b/client/modules/polyfill.js index bc85cb29..90b62689 100644 --- a/client/modules/polyfill.js +++ b/client/modules/polyfill.js @@ -1,136 +1,15 @@ -'use strict'; +import _scrollIntoViewIfNeeded from 'scroll-into-view-if-needed'; -/* global Util, DOM, $ */ +globalThis.DOM = globalThis.DOM || {}; -const itype = require('itype/legacy'); - -if (!window.XMLHttpRequest || !document.head) - DOM.load.ajax = $.ajax; - -if (!Array.isArray) - Array.isArray = itype.array.bind(); - -/* function polyfill webkit standart function - * https://gist.github.com/2581101 - */ -DOM.scrollIntoViewIfNeeded = function(element, centerIfNeeded) { - let parent, - topWidth, - leftWidth, - parentComputedStyle, - parentBorderTopWidth, - parentBorderLeftWidth, - overTop, - overBottom, - overLeft, - overRight, - alignWithTop; +export const scrollIntoViewIfNeeded = (el, overrides = {}) => { + const { + scroll = _scrollIntoViewIfNeeded, + } = overrides; - if (window.getComputedStyle) { - if (arguments.length === 1) - centerIfNeeded = false; - - parent = element.parentNode; - parentComputedStyle = window.getComputedStyle(parent, null); - - topWidth = parentComputedStyle.getPropertyValue('border-top-width'); - leftWidth = parentComputedStyle.getPropertyValue('border-left-width'); - - parentBorderTopWidth = parseInt(topWidth, 10); - parentBorderLeftWidth = parseInt(leftWidth, 10); - - overTop = element.offsetTop - parent.offsetTop < parent.scrollTop, - overBottom = - (element.offsetTop - - parent.offsetTop + - element.clientHeight - - parentBorderTopWidth) > - (parent.scrollTop + parent.clientHeight), - - overLeft = element.offsetLeft - - parent.offsetLeft < parent.scrollLeft, - - overRight = - (element.offsetLeft - - parent.offsetLeft + - element.clientWidth - - parentBorderLeftWidth) > - (parent.scrollLeft + parent.clientWidth), - - alignWithTop = overTop && !overBottom; - - if ((overTop || overBottom) && centerIfNeeded) - parent.scrollTop = - element.offsetTop - - parent.offsetTop - - parent.clientHeight / 2 - - parentBorderTopWidth + - element.clientHeight / 2; - - if ((overLeft || overRight) && centerIfNeeded) - parent.scrollLeft = - element.offsetLeft - - parent.offsetLeft - - parent.clientWidth / 2 - - parentBorderLeftWidth + - element.clientWidth / 2; - - if ((overTop || overBottom || overLeft || overRight) && !centerIfNeeded) - element.scrollIntoView(alignWithTop); - } + return scroll(el, { + block: 'nearest', + }); }; -if (!window.JSON) { - window.JSON = {}; - - window.JSON.parse = $.parseJSON; - - /* https://gist.github.com/754454 */ - window.JSON.stringify = function(obj) { - let n, v, has, - ret = '', - value = '', - json = []; - - let isStr = itype.string(obj); - let isObj = itype.object(obj); - let isArray = itype.array(obj); - - if (!isObj || obj === null) { - // simple data type - if (isStr) - obj = '"' + obj + '"'; - - ret += obj; - } else { - // recurse array or object - for (n in obj) { - v = obj[n]; - has = obj.hasOwnProperty(n); - - if (has) { - isStr = itype.string(v); - isObj = itype.object(v); - - if (isStr) - v = '"' + v + '"'; - else if (v && isObj) - v = Util.json.stringify(v); - - if (!isArray) - value = '"' + n + '":'; - - json.push(value + v); - } - } - - if (isArray) - ret = '[' + json + ']'; - else - ret = '{' + json + '}'; - } - - return ret; - }; -} - +globalThis.DOM.scrollIntoViewIfNeeded = scrollIntoViewIfNeeded; diff --git a/client/modules/polyfill.spec.js b/client/modules/polyfill.spec.js new file mode 100644 index 00000000..740947eb --- /dev/null +++ b/client/modules/polyfill.spec.js @@ -0,0 +1,20 @@ +import {test, stub} from 'supertape'; +import {scrollIntoViewIfNeeded} from './polyfill.js'; + +test('cloudcmd: client: polyfill: scrollIntoViewIfNeeded', (t) => { + const scroll = stub(); + const el = {}; + + scrollIntoViewIfNeeded(el, { + scroll, + }); + + const args = [ + el, { + block: 'nearest', + }, + ]; + + t.calledWith(scroll, args, 'should call scrollIntoViewIfNeeded'); + t.end(); +}); diff --git a/client/modules/terminal-run.js b/client/modules/terminal-run.js new file mode 100644 index 00000000..029415ea --- /dev/null +++ b/client/modules/terminal-run.js @@ -0,0 +1,147 @@ +import '../../css/terminal.css'; +import {promisify} from 'es6-promisify'; +import {tryToCatch} from 'try-to-catch'; +import {fullstore} from 'fullstore'; +import exec from 'execon'; +import load from 'load.js'; +import DOM from '#dom'; +import * as Images from '#dom/images'; + +const {Dialog} = DOM; +const {CloudCmd} = globalThis; +const {Key, config} = CloudCmd; + +CloudCmd.TerminalRun = { + init, + show, + hide, +}; + +let Loaded; +let Terminal; +let Socket; + +const exitCodeStore = fullstore(); + +const loadAll = async () => { + const {prefix} = CloudCmd; + + const prefixGritty = getPrefix(); + const js = `${prefixGritty}/gritty.js`; + const css = `${prefix}/dist/terminal.css`; + + const [e] = await tryToCatch(load.parallel, [js, css]); + + if (e) { + const src = e.target.src.replace(globalThis.location.href, ''); + return Dialog.alert(`file ${src} could not be loaded`); + } + + Loaded = true; +}; + +export async function init() { + if (!config('terminal')) + return; + + Images.show.load('top'); + + await CloudCmd.View(); + await loadAll(); +} + +export async function show(options = {}) { + return await runTerminal(options); +} + +const runTerminal = promisify((options, fn) => { + if (!Loaded) + return fn(null, -1); + + if (!config('terminal')) + return; + + create(options); + + CloudCmd.View.show(Terminal.element, { + afterShow: () => { + Terminal.focus(); + }, + afterClose: (/* exec.series args */) => { + fn(null, exitCodeStore()); + }, + }); +}); + +export function hide() { + CloudCmd.View.hide(); +} + +const getPrefix = () => CloudCmd.prefix + '/gritty'; + +function getPrefixSocket() { + return CloudCmd.prefixSocket + '/gritty'; +} + +const getEnv = () => ({ + ACTIVE_DIR: DOM.getCurrentDirPath, + PASSIVE_DIR: DOM.getNotCurrentDirPath, + CURRENT_NAME: DOM.getCurrentName, + CURRENT_PATH: DOM.getCurrentPath, +}); + +function create(createOptions) { + const { + cwd = DOM.getCurrentDirPath(), + command, + autoClose, + closeMessage = 'Press any key to close Terminal...', + } = createOptions; + + const options = { + cwd, + env: getEnv(), + prefix: getPrefixSocket(), + socketPath: CloudCmd.prefix, + fontFamily: 'Droid Sans Mono', + command, + autoRestart: false, + }; + + let commandExit = false; + + const {socket, terminal} = globalThis.gritty(document.body, options); + + Socket = socket; + Terminal = terminal; + + Terminal.onKey(({domEvent}) => { + const {keyCode, shiftKey} = domEvent; + + if (commandExit) + hide(); + + if (shiftKey && keyCode === Key.ESC) + hide(); + }); + + Socket.on('exit', (code) => { + exitCodeStore(code); + + if (autoClose) + return hide(); + + terminal.write(`\n${closeMessage}`); + commandExit = true; + }); + + Socket.on('connect', exec.with(authCheck, socket)); +} + +function authCheck(spawn) { + spawn.emit('auth', config('username'), config('password')); + + spawn.on('reject', () => { + Dialog.alert('Wrong credentials!'); + }); +} diff --git a/client/modules/terminal.js b/client/modules/terminal.js index 574f18f6..186ee0b2 100644 --- a/client/modules/terminal.js +++ b/client/modules/terminal.js @@ -1,126 +1,113 @@ -'use strict'; +import '#css/terminal.css'; +import {tryToCatch} from 'try-to-catch'; +import exec from 'execon'; +import load from 'load.js'; +import * as Images from '#dom/images'; +import DOM from '#dom'; -/* global CloudCmd, gritty */ +const loadParallel = load.parallel; -require('../../css/terminal.css'); +const {CloudCmd} = globalThis; -const exec = require('execon'); -const load = require('../dom/load'); -const DOM = require('../dom'); -const Images = require('../dom/images'); const {Dialog} = DOM; +const {Key, config} = globalThis.CloudCmd; -const TITLE = 'Terminal'; +CloudCmd.Terminal = { + init, + show, + hide, +}; -CloudCmd.Terminal = TerminalProto; - -const {Key} = CloudCmd; - -let Element; let Loaded; let Terminal; +let Socket; -const {config} = CloudCmd; - -function TerminalProto() { - const noop = () => {}; +const loadAll = async () => { + const {prefix} = CloudCmd; + const prefixGritty = getPrefix(); + const js = `${prefixGritty}/gritty.js`; + const css = `${prefix}/dist/terminal.css`; + + const [e] = await tryToCatch(loadParallel, [js, css]); + + if (e) { + const src = e.target.src.replace(globalThis.location.href, ''); + return Dialog.alert(`file ${src} could not be loaded`); + } + + Loaded = true; +}; + +export async function init() { if (!config('terminal')) - return { - show: noop - }; + return; Images.show.load('top'); - exec.series([ - CloudCmd.View, - loadAll, - create, - show, - ]); - - Element = load({ - name: 'div', - className : 'terminal', - }); - - return module.exports; + await CloudCmd.View(); + await loadAll(); + create(); } -module.exports.show = show; -module.exports.hide = hide; - -function hide () { +export function hide() { CloudCmd.View.hide(); } -function getPrefix() { - return CloudCmd.PREFIX + '/gritty'; +const getPrefix = () => CloudCmd.prefix + '/gritty'; + +function getPrefixSocket() { + return CloudCmd.prefixSocket + '/gritty'; } -function getEnv() { - return { - ACTIVE_DIR: DOM.getCurrentDirPath, - PASSIVE_DIR: DOM.getNotCurrentDirPath, - CURRENT_NAME: DOM.getCurrentName, - CURRENT_PATH: DOM.getCurrentPath, - }; -} +const getEnv = () => ({ + ACTIVE_DIR: DOM.getCurrentDirPath, + PASSIVE_DIR: DOM.getNotCurrentDirPath, + CURRENT_NAME: DOM.getCurrentName, + CURRENT_PATH: DOM.getCurrentPath, +}); -function create(callback) { +function create() { const options = { env: getEnv(), - prefix: getPrefix(), - socketPath: CloudCmd.PREFIX, + prefix: getPrefixSocket(), + socketPath: CloudCmd.prefix, fontFamily: 'Droid Sans Mono', }; - const {socket, terminal} = gritty(Element, options); + const {socket, terminal} = globalThis.gritty(document.body, options); + Socket = socket; Terminal = terminal; - terminal.on('key', (char, {keyCode, shiftKey}) => { - if (shiftKey && keyCode === Key.ESC) { + Terminal.onKey(({domEvent}) => { + const {keyCode, shiftKey} = domEvent; + + if (shiftKey && keyCode === Key.ESC) hide(); - } }); - socket.on('connect', exec.with(authCheck, socket)); - exec(callback); + Socket.on('connect', exec.with(authCheck, socket)); } function authCheck(spawn) { spawn.emit('auth', config('username'), config('password')); spawn.on('reject', () => { - Dialog.alert(TITLE, 'Wrong credentials!'); + Dialog.alert('Wrong credentials!'); }); } -function show(callback) { +export function show() { if (!Loaded) return; - CloudCmd.View.show(Element, { - afterShow: () => { - if (Terminal) - Terminal.focus(); - - exec(callback); - } - }); -} - -function loadAll(callback) { - const prefix = getPrefix(); - const url = prefix + '/gritty.js'; + if (!config('terminal')) + return; - DOM.load.js(url, (error) => { - if (error) - return Dialog.alert(TITLE, error.message); - - Loaded = true; - exec(callback); + CloudCmd.View.show(Terminal.element, { + afterShow: () => { + Terminal.focus(); + }, }); } - diff --git a/client/modules/upload.js b/client/modules/upload.js index 0337e47f..8433fbf5 100644 --- a/client/modules/upload.js +++ b/client/modules/upload.js @@ -1,60 +1,53 @@ /* global CloudCmd, DOM */ +import createElement from '@cloudcmd/create-element'; +import * as Files from '#dom/files'; +import {uploadFiles} from '#dom/upload-files'; +import * as Images from '#dom/images'; -'use strict'; +CloudCmd.Upload = { + init, + show, + hide, +}; -const exec = require('execon'); - -const load = require('../dom/load'); -const Files = require('../dom/files'); -const Images = require('../dom/images'); -const uploadFiles = require('../dom/upload-files'); - -CloudCmd.Upload = UploadProto; - -function UploadProto() { +export async function init() { Images.show.load('top'); - - exec.series([ - CloudCmd.View, - show - ]); - - return exports; + await CloudCmd.View(); } -module.exports.show = show; -module.exports.hide = hide; - -function show() { +export async function show() { Images.show.load('top'); - Files.get('upload', (error, data) => { - const autoSize = true; - - CloudCmd.View.show(data, { - autoSize, - afterShow, - }); + const innerHTML = await Files.get('upload'); + const autoSize = true; + + const el = createElement('div', { + innerHTML, + }); + + CloudCmd.View.show(el, { + autoSize, + afterShow, }); const fontFamily = [ '"Droid Sans Mono"', '"Ubuntu Mono"', '"Consolas"', - 'monospace' + 'monospace', ].join(', '); - load.style({ - id : 'upload-css', - inner : '[data-name=js-upload-file-button] {' + - `font-family: ${fontFamily};` + - 'font-size: 20px;' + - 'width: 97%' + - '}' + createElement('style', { + dataName: 'upload-css', + innerText: `[data-name=js-upload-file-button] { + font-family: ${fontFamily}; + font-size: 16px; + margin: 10px 0 10px 0; + }`, }); } -function hide() { +export function hide() { CloudCmd.View.hide(); } @@ -71,4 +64,3 @@ function afterShow() { uploadFiles(files); }); } - diff --git a/client/modules/user-menu/get-user-menu.js b/client/modules/user-menu/get-user-menu.js new file mode 100644 index 00000000..aa3a1076 --- /dev/null +++ b/client/modules/user-menu/get-user-menu.js @@ -0,0 +1,8 @@ +export const getUserMenu = (menuFn) => { + const module = {}; + const fn = Function('module', menuFn); + + fn(module); + + return module.exports; +}; diff --git a/client/modules/user-menu/get-user-menu.spec.js b/client/modules/user-menu/get-user-menu.spec.js new file mode 100644 index 00000000..606eb820 --- /dev/null +++ b/client/modules/user-menu/get-user-menu.spec.js @@ -0,0 +1,18 @@ +import test from 'supertape'; +import {getUserMenu} from './get-user-menu.js'; + +test('user-menu: getUserMenu', (t) => { + const menu = `module.exports = { + 'F2 - Rename file': ({DOM}) => { + const {element} = DOM.CurrentInfo; + DOM.renameCurrent(element); + } + }`; + + const result = getUserMenu(menu); + + const [key] = Object.keys(result); + + t.equal(key, 'F2 - Rename file'); + t.end(); +}); diff --git a/client/modules/user-menu/index.js b/client/modules/user-menu/index.js new file mode 100644 index 00000000..60d32d95 --- /dev/null +++ b/client/modules/user-menu/index.js @@ -0,0 +1,192 @@ +import '../../../css/user-menu.css'; +import currify from 'currify'; +import wraptile from 'wraptile'; +import {fullstore} from 'fullstore'; +import load from 'load.js'; +import createElement from '@cloudcmd/create-element'; +import {tryCatch} from 'try-catch'; +import {tryToCatch} from 'try-to-catch'; +import {codeFrameColumns} from '@babel/code-frame'; +import * as Dialog from '#dom/dialog'; +import * as Images from '#dom/images'; +import {getUserMenu} from './get-user-menu.js'; +import {navigate} from './navigate.js'; +import {parseError} from './parse-error.js'; +import {parseUserMenu} from './parse-user-menu.js'; +import {runSelected} from './run.js'; + +const loadCSS = load.css; +const sourceStore = fullstore(); + +const { + CloudCmd, + DOM, + CloudFunc, +} = globalThis; + +const Name = 'UserMenu'; + +CloudCmd[Name] = { + init, + show, + hide, +}; + +const {Key} = CloudCmd; + +export async function init() { + await Promise.all([ + loadCSS(`${CloudCmd.prefix}/dist/user-menu.css`), + CloudCmd.View(), + ]); +} + +const {CurrentInfo} = DOM; + +export async function show() { + Images.show.load('top'); + + const {dirPath} = CurrentInfo; + const res = await fetch(`${CloudCmd.prefix}/api/v1/user-menu?dir=${dirPath}`); + const source = await res.text(); + const [error, userMenu] = tryCatch(getUserMenu, source); + + Images.hide(); + + if (error) + return Dialog.alert(getCodeFrame({ + error, + source, + })); + + sourceStore(source); + + const { + names, + keys, + items, + settings, + } = parseUserMenu(userMenu); + + if (settings.run) + return runSelected(settings.select, items, runUserMenu); + + const button = createElement('button', { + className: 'cloudcmd-user-menu-button', + innerText: 'User Menu', + notAppend: true, + }); + + const select = createElement('select', { + className: 'cloudcmd-user-menu', + innerHTML: fillTemplate(names), + notAppend: true, + size: 10, + }); + + button.addEventListener('click', onButtonClick(userMenu, select)); + select.addEventListener('dblclick', onDblClick(userMenu)); + select.addEventListener('keydown', onKeyDown({ + keys, + userMenu, + })); + + const afterShow = () => select.focus(); + const autoSize = true; + + CloudCmd.View.show([button, select], { + autoSize, + afterShow, + }); +} + +function fillTemplate(options) { + const result = []; + + for (const option of options) + result.push(``); + + return result.join(''); +} + +export function hide() { + CloudCmd.View.hide(); +} + +const onDblClick = currify(async (items, e) => { + const {value} = e.target; + await runUserMenu(items[value]); +}); + +const onButtonClick = wraptile(async (items, {value}) => { + await runUserMenu(items[value]); +}); + +const onKeyDown = currify(async ({keys, userMenu}, e) => { + const {keyCode, target} = e; + + const keyName = e.key.toUpperCase(); + + e.preventDefault(); + e.stopPropagation(); + + let value; + + if (keyCode === Key.ESC) + return hide(); + + if (keyCode === Key.ENTER) + value = userMenu[target.value]; + else if (keys[keyName]) + value = keys[keyName]; + else + return navigate(target, e); + + await runUserMenu(value); +}); + +const runUserMenu = async (fn) => { + hide(); + + const [error] = await tryToCatch(fn, { + DOM, + CloudCmd, + CloudFunc, + tryToCatch, + }); + + if (!error) + return; + + const source = sourceStore(); + + return Dialog.alert(getCodeFrame({ + error, + source, + })); +}; + +function getCodeFrame({error, source}) { + const {code} = error; + + if (!code || code === 'frame') + return error.message; + + const [line, column] = parseError(error); + + const start = { + line, + column, + }; + + const location = { + start, + }; + + const frame = codeFrameColumns(source, location, { + message: error.message, + highlightCode: false, + }); + + return `
${frame}
`; +} diff --git a/client/modules/user-menu/navigate.js b/client/modules/user-menu/navigate.js new file mode 100644 index 00000000..0fa4d672 --- /dev/null +++ b/client/modules/user-menu/navigate.js @@ -0,0 +1,53 @@ +import {fullstore} from 'fullstore'; +import { + J, + K, + UP, + DOWN, +} from '../../key/key.js'; + +const store = fullstore(1); +const isDigit = (a) => /^\d+$/.test(a); + +export const navigate = (el, {key, keyCode}) => { + if (isDigit(key)) + store(Number(key)); + + if (keyCode === DOWN || keyCode === J) { + const count = store(); + store(1); + + return down(el, count); + } + + if (keyCode === UP || keyCode === K) { + const count = store(); + store(1); + + return up(el, count); + } +}; + +function down(el, count) { + const {length} = el; + + if (el.selectedIndex === length - 1) + el.selectedIndex = 0; + else + el.selectedIndex += count; + + if (el.selectedIndex < 0) + el.selectedIndex = length - 1; +} + +function up(el, count) { + const {length} = el; + + if (!el.selectedIndex) + el.selectedIndex = length - 1; + else + el.selectedIndex -= count; + + if (el.selectedIndex < 0) + el.selectedIndex = 0; +} diff --git a/client/modules/user-menu/navigate.spec.js b/client/modules/user-menu/navigate.spec.js new file mode 100644 index 00000000..6539c8e9 --- /dev/null +++ b/client/modules/user-menu/navigate.spec.js @@ -0,0 +1,163 @@ +import test from 'supertape'; +import {navigate} from './navigate.js'; +import { + UP, + DOWN, + J, + K, +} from '../../key/key.js'; + +test('cloudcmd: user-menu: navigate: DOWN', (t) => { + const el = { + length: 3, + selectedIndex: 0, + }; + + navigate(el, { + keyCode: DOWN, + }); + + t.equal(el.selectedIndex, 1); + t.end(); +}); + +test('cloudcmd: user-menu: navigate: J', (t) => { + const el = { + length: 3, + selectedIndex: 0, + }; + + navigate(el, { + keyCode: J, + }); + + t.equal(el.selectedIndex, 1); + t.end(); +}); + +test('cloudcmd: user-menu: navigate: DOWN: bottom', (t) => { + const el = { + length: 3, + selectedIndex: 2, + }; + + navigate(el, { + keyCode: DOWN, + }); + + t.equal(el.selectedIndex, 0); + t.end(); +}); + +test('cloudcmd: user-menu: navigate: K', (t) => { + const el = { + length: 3, + selectedIndex: 2, + }; + + navigate(el, { + keyCode: K, + }); + + t.equal(el.selectedIndex, 1); + t.end(); +}); + +test('cloudcmd: user-menu: navigate: UP', (t) => { + const el = { + length: 3, + selectedIndex: 2, + }; + + navigate(el, { + keyCode: UP, + }); + + t.equal(el.selectedIndex, 1); + t.end(); +}); + +test('cloudcmd: user-menu: navigate: UP: top', (t) => { + const el = { + length: 3, + selectedIndex: 0, + }; + + navigate(el, { + keyCode: UP, + }); + + t.equal(el.selectedIndex, 2); + t.end(); +}); + +test('cloudcmd: user-menu: navigate', (t) => { + const el = { + length: 3, + selectedIndex: 0, + }; + + navigate(el, { + keyCode: 0, + }); + + t.equal(el.selectedIndex, 0, 'should not change'); + t.end(); +}); + +test('cloudcmd: user-menu: navigate: DOWN: count', (t) => { + const el = { + length: 3, + selectedIndex: 0, + }; + + navigate(el, { + keyCode: 53, + key: '5', + }); + + navigate(el, { + keyCode: DOWN, + }); + + t.equal(el.selectedIndex, 5); + t.end(); +}); + +test('cloudcmd: user-menu: navigate: J: count: to big', (t) => { + const el = { + length: 3, + selectedIndex: -Infinity, + }; + + navigate(el, { + keyCode: 53, + key: '5', + }); + + navigate(el, { + keyCode: J, + }); + + t.equal(el.selectedIndex, 2); + t.end(); +}); + +test('cloudcmd: user-menu: navigate: K: count: to small', (t) => { + const el = { + length: 3, + selectedIndex: -Infinity, + }; + + navigate(el, { + keyCode: 53, + key: '5', + }); + + navigate(el, { + keyCode: K, + }); + + t.equal(el.selectedIndex, 0); + t.end(); +}); diff --git a/client/modules/user-menu/parse-error.js b/client/modules/user-menu/parse-error.js new file mode 100644 index 00000000..23d605e0 --- /dev/null +++ b/client/modules/user-menu/parse-error.js @@ -0,0 +1,21 @@ +const isNumber = (a) => typeof a === 'number'; + +export const parseError = (error) => { + const {lineNumber, columnNumber} = error; + + // thank you firefox + if (isNumber(lineNumber) && isNumber(columnNumber)) + return [lineNumber, columnNumber]; + + const before = error.stack.indexOf('>'); + const str = error.stack.slice(before + 1); + const after = str.indexOf(')'); + const newStr = str.slice(1, after); + + const [line, column] = newStr.split(':'); + + return [ + Number(line), + Number(column), + ]; +}; diff --git a/client/modules/user-menu/parse-error.spec.js b/client/modules/user-menu/parse-error.spec.js new file mode 100644 index 00000000..5ec8da45 --- /dev/null +++ b/client/modules/user-menu/parse-error.spec.js @@ -0,0 +1,33 @@ +import test from 'supertape'; +import {parseError} from './parse-error.js'; + +test('user-menu: parse-error', (t) => { + const result = parseError({ + lineNumber: 1, + columnNumber: 2, + }); + + const expected = [1, 2]; + + t.deepEqual(result, expected); + t.end(); +}); + +test('user-menu: parse-error: stack', (t) => { + const stack = ` + ReferenceError: s is not defined + at eval (eval at module.exports (get-user-menu.js:NaN), :1:2) + at module.exports (get-user-menu.js:6) + at tryCatch (VM12611 try-catch.js:7) + at AsyncFunction.show (index.js:67) + `; + + const result = parseError({ + stack, + }); + + const expected = [1, 2]; + + t.deepEqual(result, expected); + t.end(); +}); diff --git a/client/modules/user-menu/parse-user-menu.js b/client/modules/user-menu/parse-user-menu.js new file mode 100644 index 00000000..e4ad39e3 --- /dev/null +++ b/client/modules/user-menu/parse-user-menu.js @@ -0,0 +1,31 @@ +const {entries, assign} = Object; + +export const parseUserMenu = (userMenu) => { + const names = []; + const keys = {}; + const items = {}; + const settings = {}; + + for (const [str, fn] of entries(userMenu)) { + if (str === '__settings') { + assign(settings, userMenu[str]); + continue; + } + + if (str.startsWith('_')) + continue; + + names.push(str); + const [key, name] = str.split(' - '); + + keys[key] = fn; + items[name] = fn; + } + + return { + names, + keys, + items, + settings, + }; +}; diff --git a/client/modules/user-menu/parse-user-menu.spec.js b/client/modules/user-menu/parse-user-menu.spec.js new file mode 100644 index 00000000..fb763209 --- /dev/null +++ b/client/modules/user-menu/parse-user-menu.spec.js @@ -0,0 +1,35 @@ +import {test, stub} from 'supertape'; +import {parseUserMenu} from './parse-user-menu.js'; + +test('cloudcmd: user menu: parse', (t) => { + const fn = stub(); + const __settings = {}; + + const result = parseUserMenu({ + __settings, + 'F2 - Rename file': fn, + '_f': fn, + }); + + const names = [ + 'F2 - Rename file', + ]; + + const keys = { + F2: fn, + }; + + const items = { + 'Rename file': fn, + }; + + const expected = { + names, + keys, + items, + settings: __settings, + }; + + t.deepEqual(result, expected); + t.end(); +}); diff --git a/client/modules/user-menu/run.js b/client/modules/user-menu/run.js new file mode 100644 index 00000000..51e9fe02 --- /dev/null +++ b/client/modules/user-menu/run.js @@ -0,0 +1,5 @@ +export const runSelected = async (selectedItems, items, runUserMenu) => { + for (const selected of selectedItems) { + await runUserMenu(items[selected]); + } +}; diff --git a/client/modules/user-menu/run.spec.js b/client/modules/user-menu/run.spec.js new file mode 100644 index 00000000..86738712 --- /dev/null +++ b/client/modules/user-menu/run.spec.js @@ -0,0 +1,17 @@ +import {test, stub} from 'supertape'; +import {runSelected} from './run.js'; + +test('cloudcmd: client: user menu: run', async (t) => { + const runUserMenu = stub(); + const fn = stub(); + const selected = ['hello']; + + const items = { + hello: fn, + }; + + await runSelected(selected, items, runUserMenu); + + t.calledWith(runUserMenu, [fn]); + t.end(); +}); diff --git a/client/modules/view.js b/client/modules/view.js deleted file mode 100644 index befc0419..00000000 --- a/client/modules/view.js +++ /dev/null @@ -1,404 +0,0 @@ -'use strict'; - -/* global CloudCmd, DOM, $ */ - -require('../../css/view.css'); - -const itype = require('itype/legacy'); -const rendy = require('rendy/legacy'); -const exec = require('execon'); -const currify = require('currify/legacy'); - -const {time} = require('../../common/util'); -const {FS} = require('../../common/cloudfunc'); - -const Files = require('../dom/files'); -const Events = require('../dom/events'); -const load = require('../dom/load'); -const Images = require('../dom/images'); - -const testRegExp = currify((name, reg) => reg.test(name)); -const lifo = currify((fn, el, cb, name) => fn(name, el, cb)); - -const addEvent = lifo(Events.add); -const getRegExp = (ext) => RegExp(`\\.${ext}$`, 'i'); - -CloudCmd.View = ViewProto; - -module.exports = exec.bind(); - -module.exports.show = show; -module.exports.hide = hide; - -let Loading = false; - -const Name = 'View'; -const Info = DOM.CurrentInfo; -const Key = CloudCmd.Key; -const basename = (a) => a.split('/').pop(); - -let El, TemplateAudio, Overlay; - -const Config = { - beforeShow: (callback) => { - Images.hide(); - Key.unsetBind(); - showOverlay(); - exec(callback); - }, - beforeClose: (callback) => { - Events.rmKey(listener); - Key.setBind(); - exec(callback); - hideOverlay(); - }, - afterShow: (callback) => { - El.focus(); - exec(callback); - }, - afterClose : exec, - fitToView : true, - loop : false, - openEffect : 'none', - closeEffect : 'none', - autoSize : false, - height : '100%', - width : '100%', - minWidth : 0, - minHeight : 0, - padding : 0, - preload : 0, - keys : null, - mouseWheel : false, - arrows : false, - helpers : { - overlay : null, - title : null - } -}; - -function ViewProto(callback) { - const func = callback || exec.with(show, null); - - Loading = true; - - exec.series([ - DOM.loadJquery, - loadAll, - (callback) => { - Loading = false; - exec(callback); - } - ], func); - - Config.parent = Overlay = load({ - id : 'js-view', - name : 'div', - className : 'fancybox-overlay fancybox-overlay-fixed' - }); - - const events = [ - 'click', - 'contextmenu', - ]; - - events.forEach(addEvent(Overlay, onOverLayClick)); - - return module.exports; -} - -function show(data, options) { - const prefixUrl = CloudCmd.PREFIX_URL + FS; - - if (Loading) - return; - - if (!options || options.bindKeys !== false) - Events.addKey(listener); - - El = $('
'); - - if (data) { - const element = $(El).append(data); - $.fancybox.open(element, initConfig(Config, options)); - return; - } - - Images.show.load(); - - const path = prefixUrl + Info.path; - const type = getType(path); - - switch(type) { - default: - return Info.getData((error, data) => { - if (error) - return Images.hide(); - - const element = document.createTextNode(data); - /* add margin only for view text documents */ - El.css('margin', '2%'); - - $.fancybox.open(El.append(element), Config); - }); - - case 'image': - return showImage(path, prefixUrl); - - case 'media': - return getMediaElement(path, (element) => { - const media = DOM.getByDataName('js-media', element); - const onKey = exec.with(onMediaKey, media); - - $.fancybox.open(element, { - parent : Overlay, - beforeShow : () => { - Config.beforeShow(); - Events.addKey(onKey); - }, - beforeClose : () => { - Config.beforeClose(); - Events.rmKey(onKey); - }, - afterShow: () => { - element - .querySelector('audio, video') - .focus(); - }, - helpers: { - overlay : null, - title : null - } - }); - }); - } -} - -function initConfig(Config, options) { - const config = Object.assign({}, Config); - - if (!options) - return config; - - Object.keys(options).forEach((name) => { - const isConfig = !!config[name]; - const item = options[name]; - const isFunc = itype.function(item); - - if (!isFunc || !isConfig) { - config[name] = options[name]; - return; - } - - const func = config[name]; - config[name] = () => { - exec.series([func, item]); - }; - }); - - return config; -} - -function hide() { - $.fancybox.close(); -} - -function showImage(href, prefixUrl) { - const makeTitle = (path) => { - return { - href: prefixUrl + path, - title: basename(path), - }; - }; - - const names = Info.files - .map(DOM.getCurrentPath) - .filter(isImage); - - const titles = names - .map(makeTitle); - - const index = names.indexOf(Info.path); - const imageConfig = { - index, - autoSize : true, - type : 'image', - prevEffect : 'none', - nextEffect : 'none', - arrows : true, - keys : true, - helpers : { - overlay : null, - title : {} - } - }; - - const config = { - ...Config, - ...imageConfig, - }; - - $.fancybox.open(titles, config); -} - -function isImage(name) { - const images = [ - 'jp(e|g|eg)', - 'gif', - 'png', - 'bmp', - 'webp', - 'svg', - 'ico' - ]; - - return images - .map(getRegExp) - .some(testRegExp(name)); -} - -function isMedia(name) { - return isAudio(name) || isVideo(name); -} - -function isAudio(name) { - return /\.(mp3|ogg|m4a)$/i.test(name); -} - -function isVideo(name) { - return /\.(mp4|avi)$/i.test(name); -} - -function getType(name) { - if (isImage(name)) - return 'image'; - - if (isMedia(name)) - return 'media'; -} - -function getMediaElement(src, callback) { - check(src, callback); - - Files.get('view/media-tmpl', (error, template) => { - const {name} = Info; - - if (error) - return alert(error); - - if (!TemplateAudio) - TemplateAudio = template; - - const is = isAudio(name); - const type = is ? 'audio' : 'video'; - - const rendered = rendy(TemplateAudio, { - src, - type, - name, - }); - - const [element] = $(rendered); - callback(element); - }); -} - -function check(src, callback) { - if (typeof src !== 'string') - throw Error('src should be a string!'); - - if (typeof callback !== 'function') - throw Error('callback should be a function'); -} - -function onMediaKey(media, event) { - const {keyCode} = event; - - if (keyCode === Key.SPACE) { - if (media.paused) - media.play(); - else - media.pause(); - } -} - -/** - * function loads css and js of FancyBox - * @callback - executes, when everything loaded - */ -function loadAll(callback) { - time(Name + ' load'); - - DOM.loadRemote('fancybox', () => { - const {PREFIX} = CloudCmd; - - load.css(PREFIX + '/dist/view.css', callback); - - load.style({ - id : 'view-inlince-css', - inner : [ - '.fancybox-title-float-wrap .child {', - '-webkit-border-radius: 0;', - '-moz-border-radius: 0;', - 'border-radius: 0;', - '}' - ].join('') - }); - }); -} - -function onOverLayClick(event) { - const {target} = event; - const isOverlay = target === Overlay; - const position = { - x: event.clientX, - y: event.clientY - }; - - if (!isOverlay) - return; - - hideOverlay(); - hide(); - - setCurrentByPosition(position); -} - -function setCurrentByPosition(position) { - const element = DOM.getCurrentByPosition(position); - - if (!element) - return; - - const { - files, - filesPassive, - } = Info; - - const isFiles = ~files.indexOf(element); - const isFilesPassive = ~filesPassive.indexOf(element); - - if (!isFiles && !isFilesPassive) - return; - - const isCurrent = DOM.isCurrentFile(element); - - if (isCurrent) - return; - - DOM.setCurrentFile(element); -} - -function hideOverlay() { - Overlay.classList.remove('view-overlay'); -} - -function showOverlay() { - Overlay.classList.add('view-overlay'); -} - -function listener({keyCode}) { - if (keyCode === Key.ESC) - hide(); -} - diff --git a/client/modules/view/get-type.js b/client/modules/view/get-type.js new file mode 100644 index 00000000..a061399f --- /dev/null +++ b/client/modules/view/get-type.js @@ -0,0 +1,51 @@ +import currify from 'currify'; + +const testRegExp = currify((name, reg) => reg.test(name)); +const getRegExp = (ext) => RegExp(`\\.${ext}$`, 'i'); + +const isPDF = (a) => /\.pdf$/i.test(a); +const isHTML = (a) => a.endsWith('.html'); +const isMarkdown = (a) => /.\.md$/.test(a); + +export default (name) => { + if (isPDF(name)) + return 'pdf'; + + if (isImage(name)) + return 'image'; + + if (isMedia(name)) + return 'media'; + + if (isHTML(name)) + return 'html'; + + if (isMarkdown(name)) + return 'markdown'; +}; + +function isImage(name) { + const images = [ + 'jp(e|g|eg)', + 'gif', + 'png', + 'bmp', + 'webp', + 'svg', + 'ico', + ]; + + return images + .map(getRegExp) + .some(testRegExp(name)); +} + +function isMedia(name) { + return isAudio(name) || isVideo(name); +} + +const isAudio = (name) => /\.(mp3|ogg|m4a)$/i.test(name); + +function isVideo(name) { + return /\.(mp4|avi|webm)$/i.test(name); +} diff --git a/client/modules/view/index.js b/client/modules/view/index.js new file mode 100644 index 00000000..6626f1aa --- /dev/null +++ b/client/modules/view/index.js @@ -0,0 +1,372 @@ +import '#css/view.css'; +import {rendy} from 'rendy'; +import currify from 'currify'; +import wraptile from 'wraptile'; +import {tryToCatch} from 'try-to-catch'; +import load from 'load.js'; +import * as _modal from '@cloudcmd/modal'; +import _createElement from '@cloudcmd/create-element'; +import {time} from '#common/util'; +import * as Files from '#dom/files'; +import * as Events from '#dom/events'; +import {FS} from '#common/cloudfunc'; +import * as Images from '#dom/images'; +import {encode} from '#common/entity'; +import { + isImage, + isAudio, + getType, +} from './types.js'; + +const CloudCmd = globalThis.CloudCmd || {}; +const DOM = globalThis.DOM || {}; +const isString = (a) => typeof a === 'string'; +const {assign} = Object; +const {isArray} = Array; + +const lifo = currify((fn, el, cb, name) => fn(name, el, cb)); +const series = wraptile((...a) => { + for (const f of a) + f(); +}); + +const isFn = (a) => typeof a === 'function'; + +const noop = () => {}; +const addEvent = lifo(Events.add); + +const loadCSS = load.css; + +let Loading = false; + +const Name = 'View'; + +CloudCmd[Name] = { + init, + show, + hide, +}; + +const Info = DOM.CurrentInfo; +const {Key} = CloudCmd; + +const basename = (a) => a + .split('/') + .pop(); + +let El; +let TemplateAudio; +let Overlay; + +const Config = { + beforeShow: () => { + Images.hide(); + Key.unsetBind(); + }, + + beforeClose: () => { + Events.rmKey(listener); + Key.setBind(); + }, + + afterShow: () => { + El.focus(); + }, + + onOverlayClick, + afterClose: noop, + autoSize: false, + + helpers: { + title: {}, + }, +}; + +export const _Config = Config; + +export async function init() { + await loadAll(); + + const events = [ + 'click', + 'contextmenu', + ]; + + events.forEach(addEvent( + Overlay, + onOverlayClick, + )); +} + +export async function show(data, options = {}) { + const prefixURL = CloudCmd.prefixURL + FS; + + if (Loading) + return; + + if (!options || options.bindKeys !== false) + Events.addKey(listener); + + El = _createElement('div', { + className: 'view', + notAppend: true, + }); + + El.tabIndex = 0; + + if (data) { + if (isArray(data)) + El.append(...data); + else + El.append(data); + + _modal.open(El, initConfig(options)); + return; + } + + Images.show.load(); + + const path = prefixURL + Info.path; + const type = options.raw ? '' : await getType(path); + + switch(type) { + default: + return await viewFile(); + + case 'markdown': + return await CloudCmd.Markdown.show(Info.path); + + case 'html': + return viewHtml(path); + + case 'image': + return viewImage(Info.path, prefixURL); + + case 'media': + return await viewMedia(path); + + case 'pdf': + return viewPDF(path); + } +} + +export const _createIframe = createIframe; + +function createIframe(src, overrides = {}) { + const { + createElement = _createElement, + } = overrides; + + const element = createElement('iframe', { + src, + width: '100%', + height: '100%', + }); + + element.addEventListener('load', () => { + element.contentWindow.addEventListener('keydown', listener); + }); + + return element; +} + +export const _viewHtml = viewHtml; + +function viewHtml(src, overrides = {}) { + const {modal = _modal} = overrides; + modal.open(createIframe(src), Config); +} + +function viewPDF(src) { + const element = createIframe(src); + + const options = assign({}, Config); + + if (CloudCmd.config('showFileName')) + options.title = Info.name; + + _modal.open(element, options); +} + +async function viewMedia(path) { + const [e, element] = await getMediaElement(path); + + if (e) + return alert(e); + + const allConfig = { + ...Config, + ...{ + autoSize: true, + afterShow: () => { + element + .querySelector('audio, video') + .focus(); + }, + }, + }; + + _modal.open(element, allConfig); +} + +async function viewFile() { + const [error, data] = await Info.getData(); + + if (error) + return Images.hide(); + + const element = document.createTextNode(data); + const options = Config; + + if (CloudCmd.config('showFileName')) + options.title = Info.name; + + El.append(element); + _modal.open(El, options); +} + +const copy = (a) => assign({}, a); + +export const _initConfig = initConfig; + +function initConfig(options) { + const config = copy(Config); + + if (!options) + return config; + + const names = Object.keys(options); + + for (const name of names) { + const isConfig = Boolean(config[name]); + const item = options[name]; + + if (!isFn(item) || !isConfig) { + config[name] = options[name]; + continue; + } + + const fn = config[name]; + + config[name] = series(fn, item); + } + + return config; +} + +export function hide() { + _modal.close(); +} + +function viewImage(path, prefixURL) { + const isSupportedImage = (a) => isImage(a) || a === path; + const makeTitle = (path) => ({ + href: `${prefixURL}${path}`, + title: encode(basename(path)), + }); + + const names = Info.files + .map(DOM.getCurrentPath) + .filter(isSupportedImage); + + const titles = names.map(makeTitle); + + const index = names.indexOf(Info.path); + + const imageConfig = { + index, + autoSize: true, + arrows: true, + keys: true, + helpers: { + title: {}, + }, + }; + + const config = { + ...Config, + ...imageConfig, + }; + + _modal.open(titles, config); +} + +async function getMediaElement(src) { + check(src); + + const [error, template] = await tryToCatch(Files.get, 'view/media-tmpl'); + + if (error) + return [error]; + + const {name} = Info; + + if (!TemplateAudio) + TemplateAudio = template; + + const is = isAudio(name); + const type = is ? 'audio' : 'video'; + + const innerHTML = rendy(TemplateAudio, { + src, + type, + name, + }); + + const element = _createElement('div', { + innerHTML, + }); + + return [null, element]; +} + +function check(src) { + if (!isString(src)) + throw Error('src should be a string!'); +} + +async function loadAll() { + const {DIR_DIST} = CloudCmd; + + time(`${Name} load`); + + Loading = true; + await loadCSS(`${DIR_DIST}/view.css`); + Loading = false; +} + +function onOverlayClick(event) { + const position = { + x: event.clientX, + y: event.clientY, + }; + + setCurrentByPosition(position); +} + +function setCurrentByPosition(position) { + const element = DOM.getCurrentByPosition(position); + + if (!element) + return; + + const {files, filesPassive} = Info; + + const isFiles = files.includes(element); + const isFilesPassive = filesPassive.includes(element); + + if (!isFiles && !isFilesPassive) + return; + + const isCurrent = DOM.isCurrentFile(element); + + if (isCurrent) + return; + + DOM.setCurrentFile(element); +} + +function listener({keyCode}) { + if (keyCode === Key.ESC) + hide(); +} diff --git a/client/modules/view/index.spec.js b/client/modules/view/index.spec.js new file mode 100644 index 00000000..abfbe3f4 --- /dev/null +++ b/client/modules/view/index.spec.js @@ -0,0 +1,98 @@ +import autoGlobals from 'auto-globals'; +import {stub} from '@cloudcmd/stub'; +import {test as tape} from 'supertape'; +import { + _initConfig, + _viewHtml, + _Config, + _createIframe, +} from './index.js'; + +const test = autoGlobals(tape); + +test('cloudcmd: client: view: initConfig', (t) => { + let config; + let i = 0; + + const afterClose = () => ++i; + const options = { + afterClose, + }; + + config = _initConfig(options); + config.afterClose(); + + config = _initConfig(options); + config.afterClose(); + + t.equal(i, 2, 'should not change default config'); + t.end(); +}); + +test('cloudcmd: client: view: initConfig: no options', (t) => { + const config = _initConfig(); + const result = typeof config; + const expected = 'object'; + + t.equal(result, expected); + t.end(); +}); + +test('cloudcmd: client: view: html', (t) => { + const open = stub(); + const modal = { + open, + }; + + const src = '/hello.html'; + + _viewHtml(src, { + modal, + }); + + const [first] = open.args; + const [arg] = first; + + t.deepEqual(first, [arg, _Config]); + t.end(); +}); + +test('cloudcmd: client: view: createIframe', (t) => { + const addEventListener = stub(); + const el = { + addEventListener, + }; + + const createElement = stub().returns(el); + const src = '/hello.html'; + + _createIframe(src, { + createElement, + }); + + const expected = { + src, + height: '100%', + width: '100%', + }; + + t.calledWith(createElement, ['iframe', expected]); + t.end(); +}); + +test('cloudcmd: client: view: createIframe: returns', (t) => { + const addEventListener = stub(); + const el = { + addEventListener, + }; + + const createElement = stub().returns(el); + + const src = '/hello.html'; + const result = _createIframe(src, { + createElement, + }); + + t.equal(result, el); + t.end(); +}); diff --git a/client/modules/view/types.js b/client/modules/view/types.js new file mode 100644 index 00000000..320a4bc8 --- /dev/null +++ b/client/modules/view/types.js @@ -0,0 +1,74 @@ +import {extname} from 'node:path'; +import currify from 'currify'; + +export const isAudio = (name) => /\.(mp3|ogg|m4a|flac)$/i.test(name); + +const testRegExp = currify((name, reg) => reg.test(name)); +const getRegExp = (ext) => RegExp(`\\.${ext}$`, 'i'); + +const isPDF = (a) => /\.pdf$/i.test(a); +const isHTML = (a) => a.endsWith('.html'); +const isMarkdown = (a) => /.\.md$/.test(a); + +export const getType = async (path) => { + const ext = extname(path); + + if (!ext) + path = await detectType(path); + + if (isPDF(path)) + return 'pdf'; + + if (isImage(path)) + return 'image'; + + if (isMedia(path)) + return 'media'; + + if (isHTML(path)) + return 'html'; + + if (isMarkdown(path)) + return 'markdown'; +}; + +export function isImage(name) { + const images = [ + 'jp(e|g|eg)', + 'gif', + 'png', + 'bmp', + 'webp', + 'svg', + 'ico', + ]; + + return images + .map(getRegExp) + .some(testRegExp(name)); +} + +function isMedia(name) { + return isAudio(name) || isVideo(name); +} + +function isVideo(name) { + return /\.(mp4|avi|webm)$/i.test(name); +} + +export const _detectType = detectType; + +async function detectType(path) { + const {headers} = await fetch(path, { + method: 'HEAD', + }); + + for (const [name, value] of headers) { + if (name === 'content-type') + return `.${value + .split('/') + .pop()}`; + } + + return ''; +} diff --git a/client/modules/view/types.spec.js b/client/modules/view/types.spec.js new file mode 100644 index 00000000..f0542c18 --- /dev/null +++ b/client/modules/view/types.spec.js @@ -0,0 +1,51 @@ +import {test, stub} from 'supertape'; +import {isAudio, _detectType} from './types.js'; + +test('cloudcmd: client: view: types: isAudio', (t) => { + const result = isAudio('hello.mp3'); + + t.ok(result); + t.end(); +}); + +test('cloudcmd: client: view: types: isAudio: flac', (t) => { + const result = isAudio('hello.flac'); + + t.ok(result); + t.end(); +}); + +test('cloudcmd: client: view: types: isAudio: no', (t) => { + const result = isAudio('hello'); + + t.notOk(result); + t.end(); +}); + +test('cloudcmd: client: view: types: detectType', async (t) => { + const fetch = stub().returns({ + headers: [], + }); + + globalThis.fetch = fetch; + await _detectType('/hello'); + + const expected = ['/hello', { + method: 'HEAD', + }]; + + t.calledWith(fetch, expected); + t.end(); +}); + +test('cloudcmd: client: view: types: detectType: found', async (t) => { + globalThis.fetch = stub().returns({ + headers: [ + ['content-type', 'image/png'], + ], + }); + const result = await _detectType('/hello'); + + t.equal(result, '.png'); + t.end(); +}); diff --git a/client/sort.js b/client/sort.js index adf769c4..ed0971f3 100644 --- a/client/sort.js +++ b/client/sort.js @@ -1,35 +1,32 @@ -'use strict'; - /* global CloudCmd */ -const DOM = require('./dom'); +import {fullstore} from 'fullstore'; +import DOM from '#dom'; -const Info = DOM.CurrentInfo; -const sort = CloudCmd.sort; -const order = CloudCmd.order; -const position = DOM.getPanelPosition(); - -let sortPrevious = sort[position]; +const sortPrevious = fullstore(); const {getPanel} = DOM; -CloudCmd.sortPanel = (name, panel = getPanel()) => { - const position = panel - .dataset - .name - .replace('js-', ''); +export const initSortPanel = () => { + const {sort} = CloudCmd; + const position = DOM.getPanelPosition(); - if (name !== sortPrevious) { + sortPrevious(sort[position]); +}; + +export const sortPanel = (name, panel = getPanel()) => { + const {sort, order} = CloudCmd; + const Info = DOM.CurrentInfo; + const position = panel.dataset.name.replace('js-', ''); + + if (name !== sortPrevious()) + order[position] = 'asc'; + else if (order[position] === 'asc') + order[position] = 'desc'; + else order[position] = 'asc'; - } else { - if (order[position] === 'asc') - order[position] = 'desc'; - else - order[position] = 'asc'; - } - sortPrevious = + sortPrevious(name); sort[position] = name; - const noCurrent = position !== Info.panelPosition; CloudCmd.refresh({ @@ -37,4 +34,3 @@ CloudCmd.sortPanel = (name, panel = getPanel()) => { noCurrent, }); }; - diff --git a/client/sw/register.js b/client/sw/register.js new file mode 100644 index 00000000..928d63c9 --- /dev/null +++ b/client/sw/register.js @@ -0,0 +1,30 @@ +import {tryToCatch} from 'try-to-catch'; + +export const listenSW = (sw, ...args) => { + sw?.addEventListener(...args); +}; + +export async function registerSW(prefix) { + if (!navigator.serviceWorker) + return; + + const isHTTPS = location.protocol === 'https:'; + const isLocalhost = location.hostname === 'localhost'; + + if (!isHTTPS && !isLocalhost) + return; + + const {serviceWorker} = navigator; + const register = serviceWorker.register.bind(serviceWorker); + const [e, sw] = await tryToCatch(register, `${prefix}/sw.js`); + + if (e) + return null; + + return sw; +} + +export async function unregisterSW(prefix) { + const reg = await registerSW(prefix); + reg?.unregister(prefix); +} diff --git a/client/sw/register.spec.js b/client/sw/register.spec.js new file mode 100644 index 00000000..52699f0b --- /dev/null +++ b/client/sw/register.spec.js @@ -0,0 +1,103 @@ +import autoGlobals from 'auto-globals'; +import tape from 'supertape'; +import {stub} from '@cloudcmd/stub'; +import {tryCatch} from 'try-catch'; +import { + listenSW, + registerSW, + unregisterSW, +} from './register.js'; + +const test = autoGlobals(tape); + +test('sw: listen', (t) => { + const addEventListener = stub(); + const sw = { + addEventListener, + }; + + listenSW(sw, 'hello', 'world'); + + t.calledWith(addEventListener, ['hello', 'world'], 'should call addEventListener'); + t.end(); +}); + +test('sw: lesten: no sw', (t) => { + const [e] = tryCatch(listenSW, null, 'hello', 'world'); + + t.notOk(e, 'should not throw'); + t.end(); +}); + +test('sw: register: registerSW: no serviceWorker', async (t, {navigator}) => { + delete navigator.serviceWorker; + + await registerSW(); + + t.pass('should not call register'); + t.end(); +}); + +test('sw: register: registerSW: no https', async (t, {location, navigator}) => { + const {register} = navigator.serviceWorker; + + location.protocol = 'http:'; + + await registerSW(); + + t.notCalled(register, 'should not call register'); + t.end(); +}); + +test('sw: register: registerSW: http', async (t, {location, navigator}) => { + Object.assign(location, { + protocol: 'http:', + hostname: 'cloudcmd.io', + }); + + const {register} = navigator.serviceWorker; + + await registerSW(); + + t.notCalled(register, 'should not call register'); + t.end(); +}); + +test('sw: register: registerSW: https self-signed', async (t, {location, navigator}) => { + Object.assign(location, { + protocol: 'https:', + hostname: 'self-signed.badssl.com', + }); + + const {register} = navigator.serviceWorker; + register.throws(Error('Cannot register service worker!')); + + const result = await registerSW(); + + t.notOk(result, 'should not throw'); + t.end(); +}); + +test('sw: register: registerSW', async (t, {location, navigator}) => { + location.hostname = 'localhost'; + + const {register} = navigator.serviceWorker; + await registerSW('/hello'); + + t.calledWith(register, ['/hello/sw.js'], 'should call register'); + t.end(); +}); + +test('sw: register: unregisterSW', async (t, {location, navigator}) => { + location.hostname = 'localhost'; + + const {serviceWorker} = navigator; + const {register} = serviceWorker; + + register.returns(serviceWorker); + + await unregisterSW('/hello'); + + t.calledWith(register, ['/hello/sw.js'], 'should call register'); + t.end(); +}); diff --git a/client/sw/sw.js b/client/sw/sw.js new file mode 100644 index 00000000..5b5643a3 --- /dev/null +++ b/client/sw/sw.js @@ -0,0 +1,98 @@ +import process from 'node:process'; +import codegen from 'codegen.macro'; +import {tryToCatch} from 'try-to-catch'; +import currify from 'currify'; + +const isDev = process.env.NODE_ENV === 'development'; + +const isGet = (a) => a.method === 'GET'; +const isBasic = (a) => a.type === 'basic'; + +const wait = currify((f, e) => e.waitUntil(f())); +const respondWith = currify((f, e) => { + const {request} = e; + const {url} = request; + const pathname = getPathName(url); + + if (url.endsWith('/') || /\^\/fs/.test(pathname)) + return; + + if (!isGet(request)) + return; + + if (!isBasic(request)) + return; + + if (pathname.startsWith('/api')) + return; + + if (/^socket.io/.test(pathname)) + return; + + e.respondWith(f(e)); +}); + +const getPathName = (url) => new URL(url).pathname; + +const date = codegen`module.exports = '"' + Date() + '"'`; +const NAME = `cloudcmd: ${date}`; + +const createRequest = (a) => new Request(a, { + credentials: 'same-origin', +}); + +const getRequest = (a, request) => { + if (a !== '/') + return request; + + return createRequest('/'); +}; + +globalThis.addEventListener('install', wait(onInstall)); +globalThis.addEventListener('fetch', respondWith(onFetch)); +globalThis.addEventListener('activate', wait(onActivate)); + +async function onActivate() { + console.info(`cloudcmd: sw: activate: ${NAME}`); + + await globalThis.clients.claim(); + const keys = await caches.keys(); + const deleteCache = caches.delete.bind(caches); + + await Promise.all(keys.map(deleteCache)); +} + +async function onInstall() { + console.info(`cloudcmd: sw: install: ${NAME}`); + + await globalThis.skipWaiting(); +} + +async function onFetch(event) { + const {request} = event; + const {url} = request; + const pathname = getPathName(url); + const newRequest = getRequest(pathname, event.request); + + const cache = await caches.open(NAME); + const response = await cache.match(request); + + if (!isDev && response) + return response; + + const [e, resp] = await tryToCatch(fetch, newRequest, { + credentials: 'same-origin', + }); + + if (e) + return new Response(e.message); + + await addToCache(request, resp.clone()); + + return resp; +} + +async function addToCache(request, response) { + const cache = await caches.open(NAME); + return cache.put(request, response); +} diff --git a/common/btoa.js b/common/btoa.js deleted file mode 100644 index 0293ebbc..00000000 --- a/common/btoa.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -/* global btoa */ - -module.exports = (str) => { - if (typeof btoa === 'function') - return btoa(str); - - return Buffer - .from(str) - .toString('base64'); -}; - diff --git a/common/callbackify.js b/common/callbackify.js new file mode 100644 index 00000000..71160ac7 --- /dev/null +++ b/common/callbackify.js @@ -0,0 +1,9 @@ +const success = (f) => (data) => f(null, data); + +export default (promise) => (...a) => { + const fn = a.pop(); + + promise(...a) + .then(success(fn)) + .catch(fn); +}; diff --git a/common/callbackify.spec.js b/common/callbackify.spec.js new file mode 100644 index 00000000..d1586d5a --- /dev/null +++ b/common/callbackify.spec.js @@ -0,0 +1,26 @@ +import {promisify} from 'node:util'; +import {tryToCatch} from 'try-to-catch'; +import {test, stub} from 'supertape'; +import callbackify from './callbackify.js'; + +test('cloudcmd: common: callbackify: error', async (t) => { + const promise = stub().rejects(Error('hello')); + + const fn = callbackify(promise); + const newPromise = promisify(fn); + const [error] = await tryToCatch(newPromise); + + t.equal(error.message, 'hello'); + t.end(); +}); + +test('cloudcmd: common: callbackify', async (t) => { + const promise = stub().resolves('hi'); + + const fn = callbackify(promise); + const promiseAgain = promisify(fn); + const data = await promiseAgain(); + + t.equal(data, 'hi'); + t.end(); +}); diff --git a/common/cloudfunc.js b/common/cloudfunc.js index bb806ef6..7884d069 100644 --- a/common/cloudfunc.js +++ b/common/cloudfunc.js @@ -1,48 +1,47 @@ -'use strict'; +import {rendy} from 'rendy'; +import currify from 'currify'; +import {fullstore} from 'fullstore'; +import {encode} from '#common/entity'; -const rendy = require('rendy/legacy'); -const currify = require('currify/legacy'); -const store = require('fullstore/legacy'); -const encode = require('./entity').encode; -const btoa = require('./btoa'); - -const getHeaderField = currify(_getHeaderField); - -/* КОНСТАНТЫ (общие для клиента и сервера)*/ - -/* название программы */ +const id = (a) => a; const NAME = 'Cloud Commander'; -const FS = '/fs'; -const Path = store(); + +export const dateFormatter = fullstore(id); +export const getHeaderField = currify(_getHeaderField); +export const FS = '/fs'; + +const Path = fullstore(); Path('/'); -module.exports.FS = FS; -module.exports.apiURL = '/api/v1'; -module.exports.MAX_FILE_SIZE = 500 * 1024; -module.exports.getHeaderField = getHeaderField; -module.exports.getPathLink = getPathLink; -module.exports.getDotDot = getDotDot; +const filterOutDotFiles = ({showDotFiles}) => ({name}) => { + if (showDotFiles) + return true; + + return !name.startsWith('.'); +}; -module.exports.formatMsg = (msg, name, status) => { +export const apiURL = '/api/v1'; +export const MAX_FILE_SIZE = 500 * 1024; + +export const formatMsg = (msg, name, status) => { status = status || 'ok'; name = name || ''; if (name) - name = '("' + name + '")'; + name = `("${name}")`; - return msg + ': ' + status + name; + return `${msg}: ${status}${name}`; }; /** * Функция возвращает заголовок веб страницы * @path */ -module.exports.getTitle = (options) => { +export const getTitle = (options) => { options = options || {}; - const path = options.path || Path(); - const name = options.name; + const {path = Path(), name} = options; const array = [ name || NAME, @@ -58,7 +57,7 @@ module.exports.getTitle = (options) => { * возвращаеться массив каталогов * @param url - адрес каталога */ -function getPathLink(url, prefix, template) { +export function getPathLink(url, prefix, template) { if (!url) throw Error('url could not be empty!'); @@ -69,55 +68,68 @@ function getPathLink(url, prefix, template) { .split('/') .slice(1, -1); - const allNames = ['/'].concat(names); - const length = allNames.length - 1; + const allNames = [ + '/', + ...names, + ]; + + const lines = []; + const n = allNames.length; let path = '/'; - const pathHTML = allNames.map((name, index) => { - const isLast = index === length; + for (let i = 0; i < n; i++) { + const name = allNames[i]; + const isLast = i === n - 1; - if (index) - path += name + '/'; + if (i) + path += `${name}/`; - if (index && isLast) - return name + '/'; + if (i && isLast) { + lines.push(`${name}/`); + continue; + } - const slash = index ? '/' : ''; + const slash = i ? '/' : ''; - return rendy(template, { + lines.push(rendy(template, { path, name, slash, prefix, - }); - }).join(''); + })); + } - return pathHTML; + return lines.join(''); } -const getDataName = (name) => { +export function _getDataName(name) { const encoded = btoa(encodeURI(name)); return `data-name="js-file-${encoded}" `; -}; +} /** * Функция строит таблицу файлв из JSON-информации о файлах * @param params - информация о файлах * */ -module.exports.buildFromJSON = (params) => { - const prefix = params.prefix; - const template = params.template; +export const buildFromJSON = (params) => { + const { + prefix, + template, + sort = 'name', + order = 'asc', + showDotFiles, + } = params; + + const formatDate = dateFormatter(); + const templateFile = template.file; const templateLink = template.link; const json = params.data; const path = encode(json.path); - const files = json.files; - - const sort = params.sort || 'name'; - const order = params.order || 'asc'; + const {files} = json; /* * Строим путь каталога в котором мы находимся @@ -126,9 +138,9 @@ module.exports.buildFromJSON = (params) => { const htmlPath = getPathLink(path, prefix, template.pathLink); let fileTable = rendy(template.path, { - link : prefix + FS + path, - fullPath : path, - path : htmlPath, + link: prefix + FS + path, + fullPath: path, + path: htmlPath, }); const owner = 'owner'; @@ -139,15 +151,17 @@ module.exports.buildFromJSON = (params) => { const name = getFieldName('name'); const size = getFieldName('size'); const date = getFieldName('date'); + const time = getFieldName('time'); const header = rendy(templateFile, { - tag : 'div', - attribute : 'data-name="js-fm-header" ', - className : 'fm-header', - type : '', + tag: 'div', + attribute: 'data-name="js-fm-header" ', + className: 'fm-header', + type: '', name, size, date, + time, owner, mode, }); @@ -155,7 +169,8 @@ module.exports.buildFromJSON = (params) => { /* сохраняем путь */ Path(path); - fileTable += header + '
    '; + fileTable += `${header}
      `; + /* Если мы не в корне */ if (path !== '/') { const dotDot = getDotDot(path); @@ -163,89 +178,105 @@ module.exports.buildFromJSON = (params) => { const linkResult = rendy(template.link, { link, - title : '..', - name : '..' + title: '..', + name: '..', }); - const dataName = 'data-name="js-file-.." '; - const attribute = 'draggable="true" ' + dataName; + const dataName = _getDataName('..'); + const attribute = `draggable="true" ${dataName}`; /* Сохраняем путь к каталогу верхнего уровня*/ fileTable += rendy(template.file, { - tag : 'li', - attribute, - className : '', - type : 'directory', - name : linkResult, - size : '<dir>', - date : '--.--.----', - owner : '.', - mode : '--- --- ---' - }); - } - - fileTable += files.map((file) => { - const name = encode(file.name); - const link = prefix + FS + path + name; - - const type = getType(file.size); - const size = getSize(file.size); - - const date = file.date || '--.--.----'; - const owner = file.owner || 'root'; - const mode = file.mode; - - const linkResult = rendy(templateLink, { - link, - title: name, - name, - attribute: getAttribute(file.size) - }); - - const dataName = getDataName(file.name); - const attribute = `draggable="true" ${dataName}`; - - return rendy(templateFile, { tag: 'li', attribute, className: '', - type, + type: 'directory', name: linkResult, - size, - date, - owner, - mode, + size: '<dir>', + date: '--.--.----', + time: '--:--:--', + owner: '.', + mode: '--- --- ---', }); - }).join(''); + } + + fileTable += files + .filter(filterOutDotFiles({ + showDotFiles, + })) + .map(updateField) + .map((file) => { + const name = encode(file.name); + const link = prefix + FS + path + name; + + const { + type, + mode, + date, + time, + owner, + size, + } = file; + + const linkResult = rendy(templateLink, { + link, + title: name, + name, + attribute: getAttribute(file.type), + }); + + const dataName = _getDataName(file.name); + const attribute = `draggable="true" ${dataName}`; + + return rendy(templateFile, { + tag: 'li', + attribute, + className: '', + type, + name: linkResult, + size, + date: formatDate(date), + time, + owner, + mode, + }); + }) + .join(''); fileTable += '
    '; return fileTable; }; -function getType(size) { - if (size === 'dir') - return 'directory'; - - return 'text-file'; -} +const updateField = (file) => ({ + ...file, + date: file.date || '--.--.----', + time: file.time || '--:--:--', + owner: file.owner || 'root', + size: getSize(file), +}); -function getAttribute(size) { - if (size === 'dir') +function getAttribute(type) { + if (type === 'directory') return ''; return 'target="_blank" '; } -function getSize(size) { - if (size === 'dir') +export const _getSize = getSize; + +function getSize({size, type}) { + if (type === 'directory') return '<dir>'; + if (/link/.test(type)) + return '<link>'; + return size; } function _getHeaderField(sort, order, name) { - const arrow = order === 'asc' ? '↑' : '↓'; + const arrow = order === 'asc' ? '↑' : '↓'; if (sort !== name) return name; @@ -256,7 +287,7 @@ function _getHeaderField(sort, order, name) { return `${name}${arrow}`; } -function getDotDot(path) { +export function getDotDot(path) { // убираем последний слеш и каталог в котором мы сейчас находимся const lastSlash = path.substr(path, path.lastIndexOf('/')); const dotDot = lastSlash.substr(lastSlash, lastSlash.lastIndexOf('/')); @@ -266,4 +297,3 @@ function getDotDot(path) { return dotDot; } - diff --git a/common/cloudfunc.spec.js b/common/cloudfunc.spec.js new file mode 100644 index 00000000..b679feeb --- /dev/null +++ b/common/cloudfunc.spec.js @@ -0,0 +1,364 @@ +import {readFileSync} from 'node:fs'; +import test from 'supertape'; +import {montag} from 'montag'; +import * as cheerio from 'cheerio'; +import {tryCatch} from 'try-catch'; +import { + _getSize, + getPathLink, + buildFromJSON, + _getDataName, + dateFormatter, + formatMsg, + getTitle, + getDotDot, + getHeaderField, +} from '#common/cloudfunc'; + +const templatePath = new URL('../tmpl/fs', import.meta.url).pathname; + +const template = { + pathLink: readFileSync(`${templatePath}/pathLink.hbs`, 'utf8'), + path: readFileSync(`${templatePath}/path.hbs`, 'utf8'), + file: readFileSync(`${templatePath}/file.hbs`, 'utf8'), + link: readFileSync(`${templatePath}/link.hbs`, 'utf8'), +}; + +test('cloudfunc: buildFromJSON: ..', (t) => { + const data = { + path: '/media/', + files: [{ + date: '30.08.2016', + mode: 'rwx rwx rwx', + name: 'floppy', + owner: 'root', + size: '7b', + type: 'directory-link', + }], + }; + + const html = buildFromJSON({ + prefix: '', + template, + data, + }); + + const $ = cheerio.load(html); + const el = $('[data-name="js-file-Li4="]'); + + const result = el + .find('[data-name="js-name"]') + .text(); + + const expected = '..'; + + t.equal(result, expected); + t.end(); +}); + +test('cloudfunc: getPathLink: /', (t) => { + const {pathLink} = template; + const result = getPathLink('/', '', pathLink); + + const expected = montag` + / + `; + + t.equal(result, expected); + t.end(); +}); + +test('cloudfunc: getPathLink: /hello/world', (t) => { + const {pathLink} = template; + const result = getPathLink('/hello/world', '', pathLink); + + const expected = montag` + /hello/ + `; + + t.equal(result, expected); + t.end(); +}); + +test('cloudfunc: getPathLink: prefix', (t) => { + const {pathLink} = template; + const result = getPathLink('/hello/world', '/cloudcmd', pathLink); + + const expected = montag` + /hello/ + `; + + t.equal(result, expected); + t.end(); +}); + +test('cloudfunc: getSize: dir', (t) => { + const type = 'directory'; + const size = 0; + + const result = _getSize({ + type, + size, + }); + + const expected = '<dir>'; + + t.equal(result, expected); + t.end(); +}); + +test('cloudfunc: getSize: link: dir', (t) => { + const type = 'directory-link'; + const size = 0; + + const result = _getSize({ + type, + size, + }); + + const expected = '<link>'; + + t.equal(result, expected); + t.end(); +}); + +test('cloudfunc: getSize: link: file', (t) => { + const type = 'file-link'; + const size = 0; + + const result = _getSize({ + type, + size, + }); + + const expected = '<link>'; + + t.equal(result, expected); + t.end(); +}); + +test('cloudfunc: getSize: file', (t) => { + const type = 'file'; + const size = '100.00kb'; + + const result = _getSize({ + type, + size, + }); + + const expected = '100.00kb'; + + t.equal(result, expected); + t.end(); +}); + +test('cloudfunc: buildFromJSON: showDotFiles: false', (t) => { + const data = { + path: '/media/', + files: [{ + date: '30.08.2016', + mode: 'rwx rwx rwx', + name: '.floppy', + owner: 'root', + size: '7b', + type: 'directory-link', + }], + }; + + const html = buildFromJSON({ + prefix: '', + template, + data, + showDotFiles: false, + }); + + const $ = cheerio.load(html); + const el = $('[data-name="js-file-LmZsb3BweQ=="]'); + + const result = el + .find('[data-name="js-name"]') + .text(); + + const expected = ''; + + t.equal(result, expected); + t.end(); +}); + +test('cloudfunc: buildFromJSON: name: {{ }}', (t) => { + const data = { + path: '/media/', + files: [{ + date: '30.08.2016', + mode: 'rwx rwx rwx', + name: '{{}}', + owner: 'root', + size: '7b', + type: 'file', + }], + }; + + const html = buildFromJSON({ + prefix: '', + template, + data, + showDotFiles: false, + }); + + const $ = cheerio.load(html); + const el = $('[data-name="js-file-JTdCJTdCJTdEJTdE"]'); + + const result = el + .find('[data-name="js-name"]') + .text(); + + const expected = '{{}}'; + + t.equal(result, expected); + t.end(); +}); + +test('cloudfunc: _getDataName', (t) => { + const result = _getDataName('s'); + const expected = 'data-name="js-file-cw==" '; + + t.equal(result, expected); + t.end(); +}); + +test('cloudfunc: formatMsg: name', (t) => { + const result = formatMsg('hello', 'world'); + const expected = 'hello: ok("world")'; + + t.equal(result, expected, 'should format message with name'); + t.end(); +}); + +test('cloudfunc: formatMsg: no name', (t) => { + const result = formatMsg('hello'); + const expected = 'hello: ok'; + + t.equal(result, expected, 'should format message without name'); + t.end(); +}); + +test('cloudfunc: getTitle: no options', (t) => { + const result = getTitle(); + + t.ok(result, 'should return a title string even without options'); + t.end(); +}); + +test('cloudfunc: getTitle: with name', (t) => { + const result = getTitle({ + name: 'MyName', + }); + + t.match(result, 'MyName', 'should return title with name'); + t.end(); +}); + +test('cloudfunc: getHeaderField: sort not name', (t) => { + const result = getHeaderField('size', 'asc', 'name'); + + t.equal(result, 'name', 'should return plain name when sort does not match'); + t.end(); +}); + +test('cloudfunc: getHeaderField: sort name asc', (t) => { + const result = getHeaderField('name', 'asc', 'name'); + + t.equal(result, 'name', 'should return plain name when name asc'); + t.end(); +}); + +test('cloudfunc: getDotDot: root', (t) => { + const result = getDotDot('/'); + + t.equal(result, '/', 'should return / for root path'); + t.end(); +}); + +test('cloudfunc: getPathLink: /a/b/c', (t) => { + const {pathLink} = template; + const result = getPathLink('/a/b/c/', '', pathLink); + + t.ok(result, 'should build path link for 3-segment path'); + t.end(); +}); + +test('cloudfunc: getPathLink: no url', (t) => { + const [error] = tryCatch(getPathLink); + + t.equal(error.message, 'url could not be empty!', 'should throw when url is empty'); + t.end(); +}); + +test('cloudfunc: getPathLink: no template', (t) => { + const [error] = tryCatch(getPathLink, '/'); + + t.equal(error.message, 'template could not be empty!', 'should throw when template is empty'); + t.end(); +}); + +test('cloudfunc: getHeaderField: sort name desc', (t) => { + const result = getHeaderField('name', 'desc', 'name'); + const expected = 'name↓'; + + t.equal(result, expected, 'should return name with down arrow'); + t.end(); +}); + +test('cloudfunc: getDotDot: normal path', (t) => { + const result = getDotDot('/hello/world/'); + const expected = '/hello'; + + t.equal(result, expected, 'should return parent directory'); + t.end(); +}); + +test('cloudfunc: buildFromJSON: formatDate', (t) => { + const data = { + path: '/media/', + files: [{ + date: '30.08.2016', + mode: 'rwx rwx rwx', + name: '{{}}', + owner: 'root', + size: '7b', + type: 'file', + }], + }; + + const oldFormatter = dateFormatter(); + + const formatDate = (str) => { + const [day, month, year] = str.split('.'); + const date = new Date(year, month - 1, day); + + return date.toLocaleDateString('en-US'); + }; + + dateFormatter(formatDate); + + const html = buildFromJSON({ + prefix: '', + template, + data, + showDotFiles: false, + }); + + dateFormatter(oldFormatter); + + const $ = cheerio.load(html); + const el = $('[data-name="js-file-JTdCJTdCJTdEJTdE"]'); + + const result = el + .find('[data-name="js-date"]') + .text(); + + const expected = '8/30/2016'; + + t.equal(result, expected); + t.end(); +}); diff --git a/common/datetime.js b/common/datetime.js new file mode 100644 index 00000000..d7982ab4 --- /dev/null +++ b/common/datetime.js @@ -0,0 +1,31 @@ +import shortdate from 'shortdate'; + +export default (date) => { + date = date || new Date(); + check(date); + + const timeStr = shorttime(date); + const dateStr = shortdate(date); + + return `${dateStr} ${timeStr}`; +}; + +const addZero = (a) => { + if (a > 9) + return a; + + return `0${a}`; +}; + +function shorttime(date) { + const seconds = addZero(date.getSeconds()); + const minutes = addZero(date.getMinutes()); + const hours = addZero(date.getHours()); + + return `${hours}:${minutes}:${seconds}`; +} + +function check(date) { + if (!(date instanceof Date)) + throw Error('date should be instanceof Date!'); +} diff --git a/common/datetime.spec.js b/common/datetime.spec.js new file mode 100644 index 00000000..e3edb2ef --- /dev/null +++ b/common/datetime.spec.js @@ -0,0 +1,50 @@ +import {test} from 'supertape'; +import {tryCatch} from 'try-catch'; +import datetime from './datetime.js'; + +test('common: datetime', (t) => { + const dateStr = 'Fri, 17 Aug 2018 10:56:48'; + const result = datetime(new Date(dateStr)); + + const expected = '2018.08.17 10:56:48'; + + t.equal(result, expected); + t.end(); +}); + +test('common: datetime: no arg', (t) => { + const {Date} = globalThis; + + let called = false; + + globalThis.Date = class extends Date { + constructor() { + super(); + called = true; + } + }; + + datetime(); + + globalThis.Date = Date; + + t.ok(called, 'should call new Date'); + t.end(); +}); + +test('common: 0 before number', (t) => { + const dateStr = 'Fri, 17 Aug 2018 10:56:08'; + const result = datetime(new Date(dateStr)); + + const expected = '2018.08.17 10:56:08'; + + t.equal(result, expected); + t.end(); +}); + +test('common: datetime: wrong args', (t) => { + const [error] = tryCatch(datetime, {}); + + t.equal(error.message, 'date should be instanceof Date!', 'should throw'); + t.end(); +}); diff --git a/common/entity.js b/common/entity.js index c3c718c4..690bbd7a 100644 --- a/common/entity.js +++ b/common/entity.js @@ -1,33 +1,31 @@ -'use strict'; - const Entities = { - ' ': ' ', '<': '<', '>': '>', '"': '"', + '{': '{', + '}': '}', }; const keys = Object.keys(Entities); -module.exports.encode = (str) => { - keys.forEach((code) => { +export const encode = (str) => { + for (const code of keys) { const char = Entities[code]; const reg = RegExp(char, 'g'); str = str.replace(reg, code); - }); + } return str; }; -module.exports.decode = (str) => { - keys.forEach((code) => { +export const decode = (str) => { + for (const code of keys) { const char = Entities[code]; const reg = RegExp(code, 'g'); str = str.replace(reg, char); - }); + } return str; }; - diff --git a/test/common/entity.js b/common/entity.spec.js similarity index 53% rename from test/common/entity.js rename to common/entity.spec.js index 43b54d48..79313f7c 100644 --- a/test/common/entity.js +++ b/common/entity.spec.js @@ -1,29 +1,34 @@ -'use strict'; - -const test = require('tape'); -const entity = require('../../common/entity'); +import {test} from 'supertape'; +import * as entity from '#common/entity'; test('cloudcmd: entity: encode', (t) => { const result = entity.encode(' '); - const expected = '<hello> '; + const expected = '<hello> '; + + t.equal(result, expected, 'should encode entity'); + t.end(); +}); + +test('cloudcmd: entity: {{}}', (t) => { + const result = entity.encode('{{}}'); + const expected = '{{}}'; t.equal(result, expected, 'should encode entity'); t.end(); }); test('cloudcmd: entity: decode', (t) => { - const result = entity.decode('<hello> '); + const result = entity.decode('<hello> '); const expected = ' '; t.equal(result, expected, 'should decode entity'); t.end(); }); -test('cloudcmd: entity: encode', (t) => { +test('cloudcmd: entity: encode quote', (t) => { const result = entity.encode('"hello"'); const expected = '"hello"'; t.equal(result, expected, 'should encode entity'); t.end(); }); - diff --git a/common/omit.js b/common/omit.js new file mode 100644 index 00000000..284c2f5b --- /dev/null +++ b/common/omit.js @@ -0,0 +1,12 @@ +const difference = (a, b) => new Set(a).difference(new Set(b)); +const {keys} = Object; + +export const omit = (a, list) => { + const result = {}; + + for (const key of difference(keys(a), list)) { + result[key] = a[key]; + } + + return result; +}; diff --git a/common/omit.spec.js b/common/omit.spec.js new file mode 100644 index 00000000..ff70541c --- /dev/null +++ b/common/omit.spec.js @@ -0,0 +1,18 @@ +import {test} from 'supertape'; +import {omit} from '#common/omit'; + +test('cloudcmd: common: omit', (t) => { + const a = { + hello: 1, + world: 2, + }; + + const result = omit(a, ['world']); + + const expected = { + hello: 1, + }; + + t.deepEqual(result, expected); + t.end(); +}); diff --git a/common/try-to-promise-all.js b/common/try-to-promise-all.js new file mode 100644 index 00000000..1dcfa3a8 --- /dev/null +++ b/common/try-to-promise-all.js @@ -0,0 +1,12 @@ +import {tryToCatch} from 'try-to-catch'; + +const all = Promise.all.bind(Promise); + +export default async (a) => { + const [e, result = []] = await tryToCatch(all, a); + + return [ + e, + ...result, + ]; +}; diff --git a/common/try-to-promise-all.spec.js b/common/try-to-promise-all.spec.js new file mode 100644 index 00000000..eafb036c --- /dev/null +++ b/common/try-to-promise-all.spec.js @@ -0,0 +1,29 @@ +import {test} from 'supertape'; +import tryToPromiseAll from './try-to-promise-all.js'; + +const resolve = Promise.resolve.bind(Promise); +const reject = Promise.reject.bind(Promise); + +test('commons: try-to-promise-all', async (t) => { + const [, ...result] = await tryToPromiseAll([ + resolve('a'), + resolve('b'), + ]); + + const expected = [ + 'a', + 'b', + ]; + + t.deepEqual(result, expected); + t.end(); +}); + +test('commons: try-to-promise-all: error', async (t) => { + const [e] = await tryToPromiseAll([ + reject('a'), + ]); + + t.equal(e, 'a'); + t.end(); +}); diff --git a/common/util.js b/common/util.js index 3580b685..422b3c22 100644 --- a/common/util.js +++ b/common/util.js @@ -1,12 +1,9 @@ -'use strict'; +import exec from 'execon'; -const exec = require('execon'); +const isString = (a) => typeof a === 'string'; -module.exports.getStrBigFirst = getStrBigFirst; -module.exports.kebabToCamelCase = kebabToCamelCase; - -module.exports.escapeRegExp = (str) => { - const isStr = typeof str === 'string'; +export const escapeRegExp = (str) => { + const isStr = isString(str); if (isStr) str = str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); @@ -17,27 +14,24 @@ module.exports.escapeRegExp = (str) => { /** * get regexp from wild card */ -module.exports.getRegExp = (wildcard) => { - wildcard = wildcard || '*'; - - const escaped = '^' + wildcard // search from start of line - .replace('.', '\\.') - .replace('*', '.*') - .replace('?', '.?') + '$'; // search to end of line +export const getRegExp = (wildcard) => { + const escaped = `^${wildcard // search from start of line + .replace(/\./g, '\\.') + .replace(/\*/g, '.*') + .replace('?', '.?')}$`; + // search to end of line return RegExp(escaped); }; -module.exports.exec = exec; - /** * function gets file extension * * @param name * @return ext */ -module.exports.getExt = (name) => { - const isStr = typeof name === 'string'; +export const getExt = (name) => { + const isStr = isString(name); if (!isStr) return ''; @@ -51,22 +45,22 @@ module.exports.getExt = (name) => { }; /** - * find object by name in arrray + * find object by name in array * * @param array * @param name */ -module.exports.findObjByNameInArr = (array, name) => { +export const findObjByNameInArr = (array, name) => { let ret; if (!Array.isArray(array)) throw Error('array should be array!'); - - if (typeof name !== 'string') + + if (!isString(name)) throw Error('name should be string!'); array.some((item) => { - let is = item.name === name; + const is = item.name === name; const isArray = Array.isArray(item); if (is) { @@ -94,7 +88,7 @@ module.exports.findObjByNameInArr = (array, name) => { * start timer * @param name */ -module.exports.time = (name) => { +export const time = (name) => { exec.ifExist(console, 'time', [name]); }; @@ -102,27 +96,6 @@ module.exports.time = (name) => { * stop timer * @param name */ -module.exports.timeEnd = (name) => { +export const timeEnd = (name) => { exec.ifExist(console, 'timeEnd', [name]); }; - -function getStrBigFirst(str) { - if (!str) - throw Error('str could not be empty!'); - - const first = str[0].toUpperCase(); - - return first + str.slice(1); -} - -function kebabToCamelCase(str) { - if (!str) - throw Error('str could not be empty!'); - - return str - .split('-') - .map(getStrBigFirst) - .join('') - .replace(/.js$/, ''); -} - diff --git a/common/util.spec.js b/common/util.spec.js new file mode 100644 index 00000000..5a19a8be --- /dev/null +++ b/common/util.spec.js @@ -0,0 +1,138 @@ +import test from 'supertape'; +import {tryCatch} from 'try-catch'; +import { + findObjByNameInArr, + getRegExp, + escapeRegExp, + getExt, + time, + timeEnd, +} from '#common/util'; + +test('getExt: no extension', (t) => { + const EXT = ''; + const name = 'file-without-extension'; + const ext = getExt(name); + + t.equal(ext, EXT, 'should return "" when extension is none'); + t.end(); +}); + +test('getExt: return extension', (t) => { + const EXT = '.png'; + const name = 'picture.png'; + const ext = getExt(name); + + t.equal(ext, EXT, 'should return ".png" in files "picture.png"'); + t.end(); +}); + +test('util: getExt: no name', (t) => { + const ext = getExt(); + + t.equal(ext, '', 'should return empty string'); + t.end(); +}); + +test('util: findObjByNameInArr: no array', (t) => { + const [error] = tryCatch(findObjByNameInArr); + + t.equal(error.message, 'array should be array!', 'should throw when no array'); + t.end(); +}); + +test('util: findObjByNameInArr: no name', (t) => { + const [error] = tryCatch(findObjByNameInArr, []); + + t.equal(error.message, 'name should be string!', 'should throw when no array'); + t.end(); +}); + +test('util: findObjByNameInArr: object', (t) => { + const name = 'hello'; + const obj = { + name, + }; + + const array = [obj]; + + const result = findObjByNameInArr(array, name); + + t.equal(result, obj, 'should return obj'); + t.end(); +}); + +test('util: findObjByNameInArr: array', (t) => { + const name = 'hello'; + const data = 'abc'; + + const item = { + name, + data, + }; + + const obj = { + name: 'world', + }; + + const array = [ + name, + [obj, item], + ]; + + const result = findObjByNameInArr(array, name); + + t.equal(result, data, 'should return data'); + t.end(); +}); + +test('util: getRegExp', (t) => { + const reg = getRegExp('help?o.*'); + + t.deepEqual(reg, /^help.?o\..*$/, 'should return regexp'); + t.end(); +}); + +test('util: getRegExp: dots', (t) => { + const reg = getRegExp('h.*el?o.*'); + + t.deepEqual(reg, /^h\..*el.?o\..*$/, 'should return regexp'); + t.end(); +}); + +test('util: getRegExp: no', (t) => { + const reg = getRegExp(''); + + t.deepEqual(reg, /^$/, 'should return regexp'); + t.end(); +}); + +test('util: escapeRegExp: no str', (t) => { + const result = escapeRegExp(1); + const expected = 1; + + t.equal(result, expected); + t.end(); +}); + +test('util: escapeRegExp', (t) => { + const result = escapeRegExp('#hello'); + const expected = '\\#hello'; + + t.equal(result, expected); + t.end(); +}); + +test('util: time', (t) => { + const [error] = tryCatch(time, 'test'); + + t.notOk(error, 'should not throw'); + t.end(); +}); + +test('util: timeEnd', (t) => { + const [error] = tryCatch(timeEnd, 'test'); + + t.notOk(error, 'should not throw'); + t.end(); +}); diff --git a/css/columns/name-size-date-time.css b/css/columns/name-size-date-time.css new file mode 100644 index 00000000..f46e63f8 --- /dev/null +++ b/css/columns/name-size-date-time.css @@ -0,0 +1,26 @@ +.name { + width: 35%; +} + +.size { + float: none; +} + +.owner { + display: none; +} + +.mode { + display: none; +} + +.date { + float: right; + width: 19%; +} + +.time { + display: inline; + float: right; + width: 20%; +} diff --git a/css/columns/name-size-date.css b/css/columns/name-size-date.css index c56f3015..9248f700 100644 --- a/css/columns/name-size-date.css +++ b/css/columns/name-size-date.css @@ -1,5 +1,5 @@ .name { - width: 59%; + width: 55%; } .size { @@ -19,3 +19,7 @@ width: 19%; } +.time { + display: none; +} + diff --git a/css/columns/name-size-time.css b/css/columns/name-size-time.css new file mode 100644 index 00000000..1bbd59de --- /dev/null +++ b/css/columns/name-size-time.css @@ -0,0 +1,24 @@ +.name { + width: 55%; +} + +.size { + float: none; +} + +.owner { + display: none; +} + +.mode { + display: none; +} + +.date { + display: none; +} + +.time { + float: right; + width: 19%; +} diff --git a/css/columns/name-size.css b/css/columns/name-size.css index e58d1844..c02472a5 100644 --- a/css/columns/name-size.css +++ b/css/columns/name-size.css @@ -18,3 +18,8 @@ .date { display: none; } + +.time { + display: none; +} + diff --git a/css/config.css b/css/config.css index ab456d97..4804374a 100644 --- a/css/config.css +++ b/css/config.css @@ -1,7 +1,7 @@ .config { white-space: normal; overflow: hidden; - width : 250px; + width: 250px; } .list li { @@ -18,15 +18,24 @@ padding: 0 12px; font-size: 16px; line-height: 1.5; - color: #555; + color: var(--column-color); + background: var(--internal-background); border: 1px solid #ccc; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - -moz-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + -webkit-box-shadow: inset 0 1px 1px rgb(0 0 0 / 7.5%); + -moz-box-shadow: inset 0 1px 1px rgb(0 0 0 / 7.5%); + box-shadow: inset 0 1px 1px rgb(0 0 0 / 7.5%); + -webkit-transition: + border-color ease-in-out 0.15s, + box-shadow ease-in-out 0.15s; + -moz-transition: + border-color ease-in-out 0.15s, + box-shadow ease-in-out 0.15s; + -o-transition: + border-color ease-in-out 0.15s, + box-shadow ease-in-out 0.15s; + transition: + border-color ease-in-out 0.15s, + box-shadow ease-in-out 0.15s; } .config .form-control::-moz-placeholder { @@ -44,9 +53,15 @@ .config .form-control:focus { border-color: #66afe9; outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 1px rgba(102, 175, 233, 0.6); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 1px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 1px rgba(102, 175, 233, 0.6); + -webkit-box-shadow: + inset 0 1px 1px rgb(0 0 0 / 7.5%), + 0 0 1px rgb(102 175 233 / 60%); + -moz-box-shadow: + inset 0 1px 1px rgb(0 0 0 / 7.5%), + 0 0 1px rgb(102 175 233 / 60%); + box-shadow: + inset 0 1px 1px rgb(0 0 0 / 7.5%), + 0 0 1px rgb(102 175 233 / 60%); } .config .form-control:focus:invalid:focus { @@ -57,8 +72,8 @@ } .config .list { - padding : 0; - margin : 5%; + padding: 0; + margin: 5%; } .config .full-width { diff --git a/css/help.css b/css/help.css index 42602618..6728c589 100644 --- a/css/help.css +++ b/css/help.css @@ -1,12 +1,12 @@ .help { - margin : 25px; - white-space : normal; + margin: 25px; + white-space: normal; } .help li { - list-style-type : disc; + list-style-type: disc; } .help img { - max-width : 100%; + max-width: 100%; } diff --git a/css/icons.css b/css/icons.css index aece5439..ca4a1181 100644 --- a/css/icons.css +++ b/css/icons.css @@ -1,134 +1,144 @@ .icon-help::before { - font-family : 'Fontello'; - content : '\e801 '; + font-family: 'Fontello'; + content: '\e801 '; } .icon-rename::before { - font-family : 'Fontello'; - content : '\e802 '; + font-family: 'Fontello'; + content: '\e802 '; } .icon-view::before { - font-family : 'Fontello'; - content : '\e803 '; + font-family: 'Fontello'; + content: '\e803 '; } .icon-edit::before { - font-family : 'Fontello'; - content : '\e804 '; + font-family: 'Fontello'; + content: '\e804 '; } .icon-copy::before { - font-family : 'Fontello'; - content : '\e805 '; + font-family: 'Fontello'; + content: '\e805 '; } .icon-move::before { - font-family : 'Fontello'; - content : '\e806 '; + font-family: 'Fontello'; + content: '\e806 '; } .icon-directory::before { - font-family : 'Fontello'; - content : '\e807 '; + font-family: 'Fontello'; + content: '\e807 '; } .icon-delete::before { - font-family : 'Fontello'; - content : '\e808 '; + font-family: 'Fontello'; + content: '\e808 '; } .icon-menu::before { - font-family : 'Fontello'; - content : '\e809 '; + font-family: 'Fontello'; + content: '\e809 '; } .icon-config::before { - font-family : 'Fontello'; - content : '\e80a '; + font-family: 'Fontello'; + content: '\e80a '; } .icon-console::before { - font-family : 'Fontello'; - content : '\e80b '; + font-family: 'Fontello'; + content: '\e80b '; } .icon-contact::before { - font-family : 'Fontello'; - content : '\e80c '; + font-family: 'Fontello'; + content: '\e80c '; } .icon-file::before { - font-family : 'Fontello'; - content : '\e80d '; + font-family: 'Fontello'; + content: '\e80d '; } .icon-upload-to-cloud::before { - font-family : 'Fontello'; - content : '\e80e '; + font-family: 'Fontello'; + content: '\e80e '; } .icon-upload-from-cloud::before { - font-family : 'Fontello'; - content : '\e80f '; + font-family: 'Fontello'; + content: '\e80f '; } .icon-download::before { - font-family : 'Fontello'; - content : '\e810 '; + font-family: 'Fontello'; + content: '\e810 '; } .icon-new::before { - font-family : 'Fontello'; - content : '\e811 '; + font-family: 'Fontello'; + content: '\e811 '; +} + +.icon-toggle-file-selection::before { + font-family: 'Fontello'; + content: '\e81f '; } .icon-unselect-all::before { - font-family : 'Fontello'; - content : '\e812 '; + font-family: 'Fontello'; + content: '\e812 '; } .icon-pack::before { - font-family : 'Fontello'; - content : '\e813 '; + font-family: 'Fontello'; + content: '\e813 '; } .icon-extract::before { - font-family : 'Fontello'; - content : '\e814 '; + font-family: 'Fontello'; + content: '\e814 '; } -.icon-clear::before { - font-family : 'Fontello'; - content : '\e815 '; +.icon-copy-to-clipboard::before { + font-family: 'Fontello'; + content: '\e815 '; } .icon-refresh::before { - font-family : 'Fontello'; - content : '\e816 '; + font-family: 'Fontello'; + content: '\e816 '; } .icon-cut::before { - font-family : 'Fontello'; - content : '\e817 '; + font-family: 'Fontello'; + content: '\e817 '; } .icon-paste::before { - font-family : 'Fontello'; - content : '\e818 '; + font-family: 'Fontello'; + content: '\e818 '; } .icon-upload::before { - font-family : 'Fontello'; - content : '\e819 '; + font-family: 'Fontello'; + content: '\e819 '; } .icon-log-out::before { - font-family : 'Fontello'; - content : '\e81a '; + font-family: 'Fontello'; + content: '\e81a '; } .icon-terminal::before { - font-family : 'Fontello'; - content : '\e81b '; + font-family: 'Fontello'; + content: '\e81b '; +} + +.icon-user-menu::before { + font-family: 'Fontello'; + content: '\e81c '; } diff --git a/css/main.css b/css/main.css index ebaafe19..6b901a8e 100644 --- a/css/main.css +++ b/css/main.css @@ -1,9 +1,7 @@ -@import './urls.css'; -@import './reset.css'; -@import './style.css'; -@import './icons.css'; -@import './help.css'; -@import './query.css'; -@import './supports.css'; -@import './terminal.css'; - +@import url(./reset.css); +@import url(./urls.css); +@import url(./style.css); +@import url(./icons.css); +@import url(./help.css); +@import url(./query.css); +@import url(./supports.css); diff --git a/css/nojs.css b/css/nojs.css index 1df4bd12..350ac4e6 100644 --- a/css/nojs.css +++ b/css/nojs.css @@ -1,4 +1,5 @@ -.path-icon, .keyspanel { +.path-icon, +.keyspanel { display: none; } diff --git a/css/query.css b/css/query.css index bda5f93c..509f1b45 100644 --- a/css/query.css +++ b/css/query.css @@ -1,4 +1,31 @@ -@media only screen and (max-height: 900px) and (max-width: 600px) { +@media only screen and (width >= 1600px) { + .name { + width: 40%; + } + + .size { + width: 10%; + } + + .date { + width: 15%; + } + + .owner { + width: 12%; + } + + .mode { + width: 15%; + } +} + +:root { + --min-one-panel-width: 1155px; + --is-mobile: 0; +} + +@media only screen and (height <= 900px) and (width <= 600px) { .fm { height: 85%; } @@ -8,7 +35,7 @@ } } -@media only screen and (min-height: 550px) and (max-width: 600px) { +@media only screen and (height >= 550px) and (width <= 600px) { .fm { height: 80%; } @@ -18,43 +45,49 @@ } } -@media only screen and (max-height: 750px) and (max-width: 600px) { +@media only screen and (height <= 750px) and (width <= 600px) { .fm { height: 75%; } } -@media only screen and (max-height: 450px) and (max-width: 600px) { +@media only screen and (height <= 450px) and (width <= 600px) { .fm { height: 75%; } } -@media only screen and (max-height: 550px) and (max-width: 600px) { +@media only screen and (width <= 600px) { + :root { + --is-mobile: 1; + } +} + +@media only screen and (height <= 550px) and (width <= 600px) { .fm { height: 65%; } } -@media only screen and (max-height: 550px) and (max-width: 550px) { +@media only screen and (height <= 550px) and (width <= 550px) { .fm { height: 70%; } } -@media only screen and (min-height: 850px) and (min-width: 650px) { +@media only screen and (height >= 850px) and (width >= 650px) { .fm { height: 95%; } } -@media only screen and (max-height: 850px) { +@media only screen and (height <= 850px) { .files { height: 90%; } } -@media only screen and (max-height: 700px) and (min-width: 600px) { +@media only screen and (height <= 700px) and (width >= 600px) { .fm { height: 85%; } @@ -64,13 +97,13 @@ } } -@media only screen and (max-height: 450px) { +@media only screen and (height <= 450px) { .fm { height: 65%; } } -@media only screen and (max-height: 640px) and (max-width: 360px) { +@media only screen and (height <= 640px) and (width <= 360px) { .fm { height: 75%; } @@ -81,8 +114,8 @@ } /* iphone 6 landscape */ -@media only screen and (min-device-width: 375px) and (max-device-width: 667px) and (orientation: landscape), - @media only screen and (max-height: 360px) and (max-width: 640px) { +@media only screen and (device-width >= 375px) and (device-width <= 667px) and (orientation: landscape), + only screen and (height <= 360px) and (width <= 640px) { .fm { height: 55%; } @@ -92,14 +125,14 @@ } } -@media only screen and (max-width: 600px) { +@media only screen and (width <= 600px) { .panel { font-size: 26px; } /* текущий файл под курсором */ .current-file { - background-color: rgba(49, 123, 249, .40); + background-color: var(--border-color); color: white; } /* делаем иконки под курсом белыми */ @@ -107,25 +140,30 @@ color: white; } - .text-file::before { - color: rgba(26, 224, 124, 0.56); + .file::before { + color: rgb(26 224 124 / 56%); content: '\e80d'; } - .current-file .text-file::before { - color: white; + .file-link::before { + color: rgb(26 224 124 / 56%); + content: '\e81d'; } /* меняем иконки на шрифтовые */ .mini-icon { - color : rgba(246, 224, 124, 0.56); - font : 16px 'Fontello'; + color: rgb(246 224 124 / 56%); + font: 16px 'Fontello'; background-image: none; - padding : 1%; + padding: 1%; } - .size, .date, .owner, .mode { - display: none; + .size, + .date, + .owner, + .time, + .mode { + display: none !important; } .name { @@ -137,10 +175,26 @@ content: '\e807'; } - .text-file { + .directory-link::before { + content: '\e81e'; + } + + .file, + .file-link { background-image: none; } + .archive, + .archive-link { + background-image: none; + } + + .archive::before, + .archive-link { + color: rgb(26 224 124 / 56%); + content: '\e81d'; + } + /* убираем заголовок */ .fm-header { display: none; @@ -152,24 +206,26 @@ } } -@media only screen and (min-width: 601px) and (max-width: 785px) { +@media only screen and (width >= 601px) and (width <= 785px) { .cmd-button { width: 13%; } } -@media only screen and (min-width: 786px) and (max-width: 1155px) { +@media only screen and (width >= 786px) and (width <= 1155px) { .cmd-button { width: 10%; } } -@media only screen and (max-width: 1155px) { +@media only screen and (width <= 1155px) { .panel { width: 98%; } /* если правая панель не помещаеться - прячем её */ - .panel-right, .cmd-button#f5, .cmd-button#f6 { + .panel-right, + .cmd-button#f5, + .cmd-button#f6 { display: none; } } @@ -182,7 +238,8 @@ border: none; } - .keyspanel, .panel-right { + .keyspanel, + .panel-right { display: none; } diff --git a/css/style.css b/css/style.css index 6bb969b4..10820444 100644 --- a/css/style.css +++ b/css/style.css @@ -1,17 +1,19 @@ html { - height : 94%; + height: 94%; } body { - width : 100%; - height : 95%; - overflow : hidden; - background-color : white; + width: 100%; + height: 95%; + overflow: hidden; + background-color: var(--background); } -body, pre, code { - font-family : 'Droid Sans Mono', 'Ubuntu Mono', 'Consolas', monospace; - font-size : 16px; +body, +pre, +code { + font-family: 'Droid Sans Mono', 'Ubuntu Mono', 'Consolas', monospace; + font-size: 16px; } .hidden { @@ -22,31 +24,34 @@ body, pre, code { display: none; } -.fm, .keyspanel { - cursor : default; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); - -webkit-user-select : none; - -moz-user-select : none; - -ms-user-select : none; - -o-user-select : none; - user-select : none; +.fm, +.keyspanel { + cursor: default; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; } .links { - -webkit-user-select : initial; - -moz-user-select : initial; - -ms-user-select : initial; - -o-user-select : initial; - user-select : text; + -webkit-user-select: initial; + -moz-user-select: initial; + -ms-user-select: initial; + -o-user-select: initial; + user-select: text; + color: var(--column-color); } -.panel, .cmd-button { +.panel, +.cmd-button { border: 1px solid; - border-color: rgba(49, 123, 249, 0.4); + border-color: var(--border-color); } .icon { - margin-left : 0.5%; + margin-left: 0.5%; cursor: default; } @@ -56,7 +61,7 @@ body, pre, code { .path-icon { position: relative; - color: #222; + color: var(--icon-color); } .path-icon:active { @@ -64,41 +69,41 @@ body, pre, code { } .path-icon:hover { - color : #06e; + color: #06e; cursor: pointer; } .error::before { - font-family : 'Fontello'; - font-size : 14px; - color : rgb(222, 41, 41); - cursor : default; - content : '\e800'; + font-family: 'Fontello'; + font-size: 14px; + color: rgb(222 41 41); + cursor: default; + content: '\e800'; } .loading { - position : relative; - display : inline-block; - width : 16px; - height : 16px; - vertical-align : middle; + position: relative; + display: inline-block; + width: 16px; + height: 16px; + vertical-align: middle; } .loading::after { - position : relative; - bottom : 5px; - left : 16px; - font-size : 10px; - color : rgb(49, 123, 249); - content : attr(data-progress); + position: relative; + bottom: 5px; + left: 16px; + font-size: 10px; + color: var(--link-color); + content: attr(data-progress); } .cmd-button { width: 5%; height: 30px; margin: 20px 2px 0; - color: #222; - background-color: white; + color: var(--icon-color); + background-color: var(--button-background); transition: ease 0.1s; } @@ -109,7 +114,7 @@ body, pre, code { .cmd-button:active { color: white; - background-color: rgb(49, 123, 249); + background-color: var(--link-color); transition: ease 0.1s; } @@ -121,7 +126,8 @@ a { text-decoration: none; } -a:hover, a:active { +a:hover, +a:active { color: #06e; text-decoration: none; } @@ -145,13 +151,14 @@ a:hover, a:active { } .fm { - width : 98%; + width: 98%; height: 90%; margin: 26px auto 0; } .fm-header { font-weight: bold; + color: var(--column-color); } .panel-left { @@ -159,15 +166,30 @@ a:hover, a:active { } .current-file { - box-shadow: 0 0 0 1px rgba(49, 123, 249, 0.4) inset; + box-shadow: 0 0 0 1px var(--border-color) inset; } .cut-file { opacity: 0.7; } -.selected-file, .selected-file .name > a { - color: rgb(254, 159, 224); +.name { + float: left; + width: 26%; +} + +.name a { + color: var(--link-color); +} + +.name a:hover { + cursor: default; +} + +.selected-file, +.selected-file > span, +.selected-file .name > a { + color: rgb(254 159 224); } .panel-right { @@ -185,54 +207,55 @@ a:hover, a:active { } .selected-panel { - border-color: rgba(254, 159, 224, .40); + border-color: rgb(254 159 224 / 40%); } .keyspanel { text-align: center; } -.name { - float: left; - width: 26%; -} - -.name a:hover { - cursor: default; -} - .size { float: left; width: 12%; margin-right: 27px; text-align: right; + color: var(--column-color); } .date { float: left; width: 19%; + color: var(--column-color); +} + +.time { + color: var(--column-color); + display: none; } .owner { - display : inline-block; - width : 13%; + display: inline-block; + width: 12%; + /* when inline-block * vertical align should be * set top to prevent additional * spaces behind lines */ - vertical-align : top; + vertical-align: top; + color: var(--column-color); } .mode { float: right; - width: 18%; + width: 22%; + color: var(--column-color); } .reduce-text { - overflow : hidden; - text-overflow : ellipsis; - white-space : nowrap; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } .files { @@ -241,9 +264,9 @@ a:hover, a:active { margin: 0; overflow-y: auto; list-style-type: none; + -webkit-overflow-scrolling: touch; } .files li { overflow: hidden; } - diff --git a/css/supports.css b/css/supports.css index bf470c2d..ea2084d2 100644 --- a/css/supports.css +++ b/css/supports.css @@ -1,6 +1,6 @@ @supports (overflow: overlay) { .files { - overflow-y: overlay; + overflow-y: auto; } .fm-header { diff --git a/css/terminal.css b/css/terminal.css index 20cf94b4..e7b1fea6 100644 --- a/css/terminal.css +++ b/css/terminal.css @@ -1,4 +1,3 @@ .terminal { height: 100%; } - diff --git a/css/themes/dark.css b/css/themes/dark.css new file mode 100644 index 00000000..311a8093 --- /dev/null +++ b/css/themes/dark.css @@ -0,0 +1,49 @@ +:root { + --link-color: #317bf9; + --border-color: rgb(49 123 249 / 40%); + --background: #22272e; + --column-color: #727e8c; + --icon-color: #478be6; + --button-background: #22272e; + --internal-background: #373e47; +} + +.view { + background: var(--internal-background) !important; + color: var(--column-color) !important; +} +.view a { + color: var(--link-color) !important; +} + +.smalltalk .page, +.smalltalk header, +.smalltalk .button-strip button, +.smalltalk input { + background: var(--internal-background) !important; + color: var(--link-color) !important; + text-shadow: none !important; +} + +.cloudcmd-user-menu, +.cloudcmd-user-menu-button { + background: var(--internal-background) !important; + color: var(--link-color) !important; +} + +.jqconsole { + background: #373e47 !important; +} + +.jqconsole-prompt { + color: var(--column-color) !important; +} + +.log-msg { + color: var(--column-color) !important; +} + +.menu { + color: var(--link-color) !important; + background: var(--internal-background) !important; +} diff --git a/css/themes/light.css b/css/themes/light.css new file mode 100644 index 00000000..e95eb441 --- /dev/null +++ b/css/themes/light.css @@ -0,0 +1,9 @@ +:root { + --link-color: blue; + --selected-menu-item-color: #317bf9; + --border-color: rgb(49 123 249 / 40%); + --background: white; + --column-color: black; + --icon-color: #222; + --button-background: white; +} diff --git a/css/urls.css b/css/urls.css index e071784c..be90e235 100644 --- a/css/urls.css +++ b/css/urls.css @@ -17,28 +17,47 @@ } @font-face { - font-family : 'Droid Sans Mono'; - src : url(https://themes.googleusercontent.com/static/fonts/droidsansmono/v5/ns-m2xQYezAtqh7ai59hJTwtzT4qNq-faudv5qbO9-U.eot); - src : + font-family: 'Droid Sans Mono'; + src: url(https://themes.googleusercontent.com/static/fonts/droidsansmono/v5/ns-m2xQYezAtqh7ai59hJTwtzT4qNq-faudv5qbO9-U.eot); + src: local('Droid Sans Mono'), local('DroidSansMono'), url(../font/DroidSansMono.eot) format('embedded-opentype'), - url(https://themes.googleusercontent.com/static/fonts/droidsansmono/v5/ns-m2xQYezAtqh7ai59hJTwtzT4qNq-faudv5qbO9-U.eot?#iefix) format('embedded-opentype'), - url(https://themes.googleusercontent.com/static/fonts/droidsansmono/v5/ns-m2xQYezAtqh7ai59hJTwtzT4qNq-faudv5qbO9-U.eot) format('embedded-opentype'), + url(https://themes.googleusercontent.com/static/fonts/droidsansmono/v5/ns-m2xQYezAtqh7ai59hJTwtzT4qNq-faudv5qbO9-U.eot?#iefix) + format('embedded-opentype'), + url(https://themes.googleusercontent.com/static/fonts/droidsansmono/v5/ns-m2xQYezAtqh7ai59hJTwtzT4qNq-faudv5qbO9-U.eot) + format('embedded-opentype'), url(../font/DroidSansMono.woff2) format('woff2'), url(../font/DroidSansMono.woff) format('woff'), - url(https://themes.googleusercontent.com/static/fonts/droidsansmono/v5/ns-m2xQYezAtqh7ai59hJUYuTAAIFFn5GTWtryCmBQ4.woff) format('woff'), + url(https://themes.googleusercontent.com/static/fonts/droidsansmono/v5/ns-m2xQYezAtqh7ai59hJUYuTAAIFFn5GTWtryCmBQ4.woff) + format('woff'), local('Consolas'); - font-style : normal; - font-weight : 400; + font-style: normal; + font-weight: 400; } .directory { - background-image: url(../img/dir.png); + background-image: url(../img/directory.png); } -.text-file { - background-image: url(../img/txt.png); +.directory-link { + background-image: url(../img/directory-link.png); +} + +.file { + background-image: url(../img/file.png); +} + +.file-link { + background-image: url(../img/file-link.png); +} + +.archive { + background-image: url(../img/archive.png); +} + +.archive-link { + background-image: url(../img/archive-link.png); } .loading-svg { @@ -48,4 +67,3 @@ .loading-gif { background: url(../img/spinner.gif); } - diff --git a/css/user-menu.css b/css/user-menu.css new file mode 100644 index 00000000..792747f4 --- /dev/null +++ b/css/user-menu.css @@ -0,0 +1,23 @@ +.cloudcmd-user-menu { + font-size: 16px; + font-family: 'Droid Sans Mono', 'Ubuntu Mono', 'Consolas', monospace; + border: 0; +} + +.cloudcmd-user-menu:focus { + outline: 0; +} + +.cloudcmd-user-menu > option:checked { + box-shadow: 20px -20px 0 2px var(--selected-menu-item-color) inset; +} + +.cloudcmd-user-menu-button { + display: block; + width: 100%; + font-size: 16px; + padding: 2px; + -webkit-appearance: none; + border: 0; + overflow: auto; +} diff --git a/css/view.css b/css/view.css index 381075d4..b6fb20ed 100644 --- a/css/view.css +++ b/css/view.css @@ -2,6 +2,7 @@ font-size: 16px; white-space: pre; height: 100%; + overflow: auto; } .view:focus { @@ -14,23 +15,12 @@ } .view-overlay { - display : block; - background : rgba(255, 255, 255, 0.1); + display: block; + background: rgb(255 255 255 / 10%); } -.fancybox-wrap { - /* - * when search element with - * document.elementFromPoint - */ - z-index: 1; -} - -.fancybox-overlay { - z-index: 0; -} - -.media, video { +.media, +video { width: 100%; } diff --git a/deno.json b/deno.json new file mode 100644 index 00000000..64c1bde2 --- /dev/null +++ b/deno.json @@ -0,0 +1,14 @@ +{ + "tasks": { + "start": "deno run -P=cloudcmd bin/cloudcmd.mjs" + }, + "permissions": { + "cloudcmd": { + "env": true, + "read": true, + "sys": true, + "net": true, + "run": true + } + } +} diff --git a/docker-compose.yml b/docker-compose.yml index e358cb83..0fb72a34 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,4 @@ -version: '2' +version: "2" services: web: ports: @@ -7,4 +7,3 @@ services: - ~:/root - /:/mnt/fs image: coderaiser/cloudcmd - diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 00000000..7c5d7b64 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,29 @@ +FROM node + +LABEL maintainer="Coderaiser" +LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" + +RUN mkdir -p /usr/src/cloudcmd + +WORKDIR /usr/src/cloudcmd + +COPY package.json /usr/src/cloudcmd/ + +RUN curl -fsSL https://bun.com/install | bash && \ + ln -s /root/.bun/bin/bun /usr/local/bin/bun && \ + chmod +x /usr/local/bin/bun && \ + bun r gritty --omit dev && \ + bun i gritty --omit dev && \ + bun pm cache rm + +COPY . /usr/src/cloudcmd + +WORKDIR / + +ENV cloudcmd_terminal=true +ENV cloudcmd_terminal_path=gritty +ENV cloudcmd_open=false + +EXPOSE 8000 + +ENTRYPOINT ["/usr/src/cloudcmd/bin/cloudcmd.js"] diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine new file mode 100644 index 00000000..5e38ab8a --- /dev/null +++ b/docker/Dockerfile.alpine @@ -0,0 +1,34 @@ +FROM node:alpine + +LABEL maintainer="Coderaiser" +LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" + +RUN mkdir -p /usr/src/cloudcmd + +WORKDIR /usr/src/cloudcmd + +COPY package.json /usr/src/cloudcmd/ + +RUN apk update && \ + apk add --no-cache curl bash make g++ python3 && \ + curl -fsSL https://bun.sh/install | bash && \ + ln -s ~/.bun/bin/bun /usr/local/bin/bun && \ + chmod +x /usr/local/bin/bun && \ + bun r gritty --omit dev && \ + bun i gritty --omit dev && \ + bun pm cache rm && \ + apk del make g++ python3 && \ + rm -rf /usr/include /tmp/* /var/cache/apk/* + +COPY . /usr/src/cloudcmd + +WORKDIR / + +ENV cloudcmd_terminal=true +ENV cloudcmd_terminal_path=gritty +ENV cloudcmd_open=false +ENV cloudcmd_vim=true + +EXPOSE 8000 + +ENTRYPOINT ["/usr/src/cloudcmd/bin/cloudcmd.js"] diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io new file mode 100644 index 00000000..d5a24459 --- /dev/null +++ b/docker/Dockerfile.io @@ -0,0 +1,113 @@ +FROM ubuntu:resolute + +LABEL maintainer="Coderaiser" +LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" + +RUN mkdir -p /usr/local/share/cloudcmd + +WORKDIR /usr/local/share/cloudcmd + +COPY package.json /usr/local/share/cloudcmd/ + +ENV DEBIAN_FRONTEND=noninteractive \ + NVM_DIR=/usr/local/share/nvm \ + npm_config_cache=/tmp/npm-cache \ + GOPATH=/usr/local/share/go \ + PATH=/usr/local/share/bun/bin:$PATH \ + BUN_INSTALL=/usr/local/share/bun \ + NPM_CONFIG_CACHE=/tmp/.npm \ + NPM_CONFIG_PREFIX=/usr/local \ + NPM_CONFIG_PACKAGE_LOCK=false \ + PALABRA_DIR=/usr/local/share \ + XDG_CONFIG_HOME=/usr/local/etc + +ARG UBUNTU_DEPS="libatomic1 curl wget git net-tools iproute2 software-properties-common" +ARG RUST_DEPS="build-essential" +ARG DEPS="pv gcc gdb strace upx-ucl less ffmpeg net-tools netcat-openbsd mc far2l iputils-ping vim bat fzf locales sudo command-not-found ncdu aptitude htop btop hexyl tmux" +ARG PALABRA_DEPS="nvm node rust go deno fasm nvchad rizin yara gdu f4 typos shellcheck gh" +ARG BUN_DEPS="palabra wisdom nupdate version-io redrun superc8 supertape madrun redlint putout renamify-cli runny redfork cline" + +RUN apt-get update && \ + apt-get upgrade -y && \ + apt-get autoremove && \ + apt-get install -y ${UBUNTU_DEPS} ${RUST_DEPES} ${DEPS} && \ + echo "> Install git" && \ + add-apt-repository ppa:git-core/ppa -y && \ + echo "> Update command-not-found database. Run 'sudo apt update' to populate it." && \ + apt-get update && \ + apt-get upgrade -y && \ + apt-get autoremove && \ + apt-get clean && \ + echo "> create user" && \ + useradd -m -s /bin/bash -u 1337 instalador && \ + chown -R instalador /usr/local && \ + chown -R instalador /tmp + +USER instalador + +RUN echo "> install bun" && \ + curl https://bun.sh/install | bash && \ + echo "> install npm globals" && \ + bun i ${BUN_DEPS} -g && \ + echo "> install rust go deno bun fasm nvim" && \ + bun ${BUN_INSTALL}/bin/palabra i ${PALABRA_DEPS} && \ + echo "> install node" && \ + . $NVM_DIR/nvm.sh + +USER root + +RUN echo "> remove user" && \ + userdel -r instalador && \ + echo "> install gritty" && \ + bun r gritty --omit dev && \ + bun i gritty --omit dev && \ + bun pm cache rm && \ + echo "> setup cloudcmd" && \ + ln -s /usr/local/share/cloudcmd/bin/cloudcmd.js /usr/local/bin/cloudcmd && \ + echo "> setup git" && \ + git config --global core.whitespace -trailing-space && \ + git config --global pull.rebase true && \ + git config --global init.defaultBranch master && \ + echo "> configure bash" && \ + echo "alias ls='ls --color=auto'" >> /etc/bash.bashrc && \ + echo "alias buni='bun i --no-save'" >> /etc/bash.bashrc && \ + echo "alias bat='batcat'" >> /etc/bash.bashrc && \ + echo ". /usr/local/share/nvm/nvm.sh" >> /etc/bash.bashrc && \ + echo ". /usr/share/bash-completion/completions/git" >> /etc/bash.bashrc && \ + echo 'PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "' >> /etc/bash.bashrc && \ + echo "> setup inputrc" && \ + echo "set editing-mode vi" >> /etc/inputrc && \ + echo "TAB: menu-complete" >> /etc/inputrc && \ + echo "set UTF-8" && \ + echo " > configure languages" && \ + echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ + echo "ru_RU.UTF-8 UTF-8" >> /etc/locale.gen && \ + echo "uk_UA.UTF-8 UTF-8" >> /etc/locale.gen && \ + echo "es_ES.UTF-8 UTF-8" >> /etc/locale.gen && \ + echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen && \ + echo "el_GR.UTF-8 UTF-8" >> /etc/locale.gen && \ + locale-gen + +COPY . /usr/local/share/cloudcmd + +WORKDIR / + +ENV cloudcmd_terminal=true \ + cloudcmd_terminal_path=gritty \ + cloudcmd_vim=true \ + cloudcmd_open=false \ + PATH=node_modules/.bin:$PATH \ + PATH=~/.local/bin:$PATH \ + BUN_INSTALL_CACHE_DIR=/tmp/bun-cache \ + DENO_DIR=/tmp/deno-cache \ + LANG=en_US.UTF-8 \ + LANGUAGE=en_US:en \ + LC_ALL=en_US.UTF-8 \ + TERM=xterm-256color \ + XDG_CACHE_HOME=/tmp \ + XDG_DATA_HOME=/usr/local/share \ + XDG_CONFIG_HOME=~/.config + +EXPOSE 8000 + +ENTRYPOINT ["/usr/local/share/cloudcmd/bin/cloudcmd.js"] diff --git a/docker/Dockerfile.slim b/docker/Dockerfile.slim new file mode 100644 index 00000000..c6f273b8 --- /dev/null +++ b/docker/Dockerfile.slim @@ -0,0 +1,39 @@ +FROM node:slim AS build + +RUN mkdir -p /usr/src/cloudcmd/ + +WORKDIR /usr/src/cloudcmd + +COPY package.json /usr/src/cloudcmd/ + +RUN apt-get update && \ + apt-get install -y build-essential python3 libncurses5-dev pkg-config && \ + apt-get install -y --no-install-recommends curl ca-certificates unzip && \ + curl -fsSL https://bun.sh/install | bash && \ + ln -s ~/.bun/bin/bun /usr/local/bin/bun && \ + chmod +x /usr/local/bin/bun && \ + bun r gritty --omit dev && \ + bun i gritty --omit dev && \ + ~/.bun/bin/bun pm cache rm && \ + rm -rf /var/lib/apt/lists/* + +COPY . /usr/src/cloudcmd + +FROM node:slim AS runtime + +COPY --from=build /usr/src/cloudcmd /usr/src/cloudcmd +COPY --from=build /root/.bun /root/.bun + +LABEL maintainer="Coderaiser" +LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" + +WORKDIR / + +ENV cloudcmd_terminal=true +ENV cloudcmd_terminal_path=gritty +ENV cloudcmd_open=false +ENV PATH="/root/.bun/bin:$PATH" + +EXPOSE 8000 + +ENTRYPOINT ["/usr/src/cloudcmd/bin/cloudcmd.js"] diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..22add654 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,31 @@ +import {safeAlign} from 'eslint-plugin-putout'; +import {defineConfig} from 'eslint/config'; +import globals from 'globals'; +import {matchToFlat} from '@putout/eslint-flat'; + +export const match = { + 'bin/release.js': { + 'no-console': 'off', + 'n/hashbang': 'off', + }, + 'client/dom/index.*': { + 'no-multi-spaces': 'off', + }, + 'client/**': { + 'n/no-unsupported-features/node-builtins': 'off', + }, +}; +export default defineConfig([ + safeAlign, { + ignores: ['**/fixture'], + rules: { + 'key-spacing': 'off', + }, + }, { + files: ['{client,common,static}/**/*.js'], + languageOptions: { + globals: globals.browser, + }, + }, + ...matchToFlat(match), +]); diff --git a/font/fontello.eot b/font/fontello.eot index ae073b83..e144bd82 100644 Binary files a/font/fontello.eot and b/font/fontello.eot differ diff --git a/font/fontello.json b/font/fontello.json index 7271a684..c8bad6be 100644 --- a/font/fontello.json +++ b/font/fontello.json @@ -1,228 +1,258 @@ -{ - "name": "fontello", - "css_prefix_text": "icon-", - "css_use_suffix": false, - "hinting": true, - "units_per_em": 1000, - "ascent": 850, - "glyphs": [ - { - "uid": "b035c28eba2b35c6ffe92aee8b0df507", - "css": "attention-circled", - "code": 59392, - "src": "fontawesome" - }, - { - "uid": "17ebadd1e3f274ff0205601eef7b9cc4", - "css": "help-circled", - "code": 59393, - "src": "fontawesome" - }, - { - "uid": "67f793f91864e379458a92ccc61d9ccf", - "css": "sort-alphabet", - "code": 59394, - "src": "typicons" - }, - { - "uid": "60617c8adc1e7eb3c444a5491dd13f57", - "css": "attention-circled-1", - "code": 59395, - "src": "custom_icons", - "selected": false, - "svg": { - "path": "M429 71Q545 71 644 129T800 285T857 500T800 715T644 871T429 929T213 871T58 715T0 500T58 285T213 129T429 71ZM500 767V661Q500 653 495 648T483 643H376Q368 643 363 648T357 661V767Q357 775 363 780T376 786H483Q490 786 495 780T500 767ZM499 575L509 229Q509 222 503 219Q498 214 490 214H367Q359 214 354 219Q348 222 348 229L358 575Q358 581 363 585T377 589H480Q488 589 493 585T499 575Z", - "width": 857.1 - }, - "search": [ - "attention-circled" - ] - }, - { - "uid": "c5fd349cbd3d23e4ade333789c29c729", - "css": "eye", - "code": 59395, - "src": "fontawesome" - }, - { - "uid": "41087bc74d4b20b55059c60a33bf4008", - "css": "edit", - "code": 59396, - "src": "fontawesome" - }, - { - "uid": "9347a40928618e76958fa67e5333f1c5", - "css": "doc-text-1", - "code": 59397, - "src": "custom_icons", - "selected": false, - "svg": { - "path": "M212 542L212 452L492 452L492 542L212 542ZM600 50Q642 50 671 79T700 150L700 850Q700 890 671 920T600 950L100 950Q60 950 30 920T0 850L0 150Q0 108 30 79T100 50L600 50ZM600 850L600 150L100 150L100 850L600 850ZM490 258L490 346L210 346L210 258L490 258ZM490 650L490 738L210 738L210 650L490 650Z", - "width": 700 - }, - "search": [ - "doc-text" - ] - }, - { - "uid": "c8585e1e5b0467f28b70bce765d5840c", - "css": "docs", - "code": 59397, - "src": "fontawesome" - }, - { - "uid": "6405321f27abab4a505476c917d8c748", - "css": "folder-1", - "code": 59398, - "src": "custom_icons", - "selected": false, - "svg": { - "path": "M954 350Q986 350 994 362T1000 398L958 850Q956 874 946 887T904 900L98 900Q46 900 42 850L0 398Q-2 374 6 362T46 350L954 350ZM920 240L930 280L84 280L98 148Q102 128 118 114T154 100L318 100Q370 100 404 134L434 164Q466 200 520 200L860 200Q880 200 898 212T920 240Z", - "width": 1001 - }, - "search": [ - "folder" - ] - }, - { - "uid": "6020aff067fc3c119cdd75daa5249220", - "css": "exchange", - "code": 59398, - "src": "fontawesome" - }, - { - "uid": "2ba2063e74ee7b74f6c46a949d37a130", - "css": "cog-2", - "code": 59399, - "src": "custom_icons", - "selected": false, - "svg": { - "path": "M0 498Q0 460 7 415Q57 419 102 396T172 328Q197 283 195 233T165 142Q229 86 315 56Q338 97 379 122T469 146T558 122T622 56Q707 86 772 142Q751 181 751 227T774 313Q798 354 839 377T926 400Q937 449 937 498Q937 530 930 572Q885 573 846 597T783 660Q758 704 760 752T786 841Q720 901 641 934Q618 892 577 867T487 842Q434 842 391 870T327 944Q245 918 174 862Q202 821 204 771T181 676Q154 630 107 606T9 589Q0 548 0 498ZM293 498Q293 571 344 622T469 673T593 622T644 498T593 374T469 322T344 374T293 498Z", - "width": 937.5 - }, - "search": [ - "cog-1" - ] - }, - { - "uid": "0ccb084ddeeae372673793ed0b45bb4a", - "css": "folder", - "code": 59399, - "src": "entypo" - }, - { - "uid": "f48ae54adfb27d8ada53d0fd9e34ee10", - "css": "trash", - "code": 59400, - "src": "fontawesome" - }, - { - "uid": "559647a6f430b3aeadbecd67194451dd", - "css": "menu", - "code": 59401, - "src": "fontawesome" - }, - { - "uid": "7336247ba3db350dec8d6c0a47cef966", - "css": "cog-1", - "code": 59402, - "src": "mfglabs" - }, - { - "uid": "fa10777b2d88cc64cd6e4f26ef0e5264", - "css": "terminal", - "code": 59403, - "src": "fontawesome" - }, - { - "uid": "85528017f1e6053b2253785c31047f44", - "css": "comment", - "code": 59404, - "src": "fontawesome" - }, - { - "uid": "1189604bf305b6b03a74685ce60e6632", - "css": "doc-text", - "code": 59405, - "src": "entypo" - }, - { - "uid": "de2fc7a5c986ab8c622f63455d7cf814", - "css": "upload-cloud", - "code": 59406, - "src": "fontawesome" - }, - { - "uid": "f5999a012fc3752386635ec02a858447", - "css": "download-cloud", - "code": 59407, - "src": "fontawesome" - }, - { - "uid": "9a76bc135eac17d2c8b8ad4a5774fc87", - "css": "download", - "code": 59408, - "src": "fontawesome" - }, - { - "uid": "9e0404ba55575a540164db9a5ad511df", - "css": "doc-new", - "code": 59409, - "src": "elusive" - }, - { - "uid": "823a9e02e643318116fea40a00190e4e", - "css": "asterisk", - "code": 59410, - "src": "fontawesome" - }, - { - "uid": "3c24ee33c9487bbf18796ca6dffa1905", - "css": "resize-small", - "code": 59411, - "src": "fontawesome" - }, - { - "uid": "e594fc6e5870b4ab7e49f52571d52577", - "css": "resize-full", - "code": 59412, - "src": "fontawesome" - }, - { - "uid": "ebc57fa8400e4ede049ac5dc665210e1", - "css": "eraser", - "code": 59413, - "src": "fontawesome" - }, - { - "uid": "3bd18d47a12b8709e9f4fe9ead4f7518", - "css": "arrows-ccw", - "code": 59414, - "src": "entypo" - }, - { - "uid": "8772331a9fec983cdb5d72902a6f9e0e", - "css": "scissors", - "code": 59415, - "src": "fontawesome" - }, - { - "uid": "b429436ec5a518c78479d44ef18dbd60", - "css": "paste", - "code": 59416, - "src": "fontawesome" - }, - { - "uid": "eeec3208c90b7b48e804919d0d2d4a41", - "css": "upload", - "code": 59417, - "src": "fontawesome" - }, - { - "uid": "2d76f2c8d13be40694ecadfea7fb83c3", - "css": "logout", - "code": 59418, - "src": "entypo" - } - ] -} +{ + "name": "fontello", + "css_prefix_text": "icon-", + "css_use_suffix": false, + "hinting": true, + "units_per_em": 1000, + "ascent": 850, + "glyphs": [ + { + "uid": "b035c28eba2b35c6ffe92aee8b0df507", + "css": "attention-circled", + "code": 59392, + "src": "fontawesome" + }, + { + "uid": "17ebadd1e3f274ff0205601eef7b9cc4", + "css": "help-circled", + "code": 59393, + "src": "fontawesome" + }, + { + "uid": "67f793f91864e379458a92ccc61d9ccf", + "css": "sort-alphabet", + "code": 59394, + "src": "typicons" + }, + { + "uid": "c5fd349cbd3d23e4ade333789c29c729", + "css": "eye", + "code": 59395, + "src": "fontawesome" + }, + { + "uid": "41087bc74d4b20b55059c60a33bf4008", + "css": "edit", + "code": 59396, + "src": "fontawesome" + }, + { + "uid": "c8585e1e5b0467f28b70bce765d5840c", + "css": "docs", + "code": 59397, + "src": "fontawesome" + }, + { + "uid": "6020aff067fc3c119cdd75daa5249220", + "css": "exchange", + "code": 59398, + "src": "fontawesome" + }, + { + "uid": "0ccb084ddeeae372673793ed0b45bb4a", + "css": "folder", + "code": 59399, + "src": "entypo" + }, + { + "uid": "f48ae54adfb27d8ada53d0fd9e34ee10", + "css": "trash", + "code": 59400, + "src": "fontawesome" + }, + { + "uid": "559647a6f430b3aeadbecd67194451dd", + "css": "menu", + "code": 59401, + "src": "fontawesome" + }, + { + "uid": "7336247ba3db350dec8d6c0a47cef966", + "css": "cog-1", + "code": 59402, + "src": "mfglabs" + }, + { + "uid": "fa10777b2d88cc64cd6e4f26ef0e5264", + "css": "terminal", + "code": 59403, + "src": "fontawesome" + }, + { + "uid": "85528017f1e6053b2253785c31047f44", + "css": "comment", + "code": 59404, + "src": "fontawesome" + }, + { + "uid": "1189604bf305b6b03a74685ce60e6632", + "css": "doc-text", + "code": 59405, + "src": "entypo" + }, + { + "uid": "de2fc7a5c986ab8c622f63455d7cf814", + "css": "upload-cloud", + "code": 59406, + "src": "fontawesome" + }, + { + "uid": "f5999a012fc3752386635ec02a858447", + "css": "download-cloud", + "code": 59407, + "src": "fontawesome" + }, + { + "uid": "9a76bc135eac17d2c8b8ad4a5774fc87", + "css": "download", + "code": 59408, + "src": "fontawesome" + }, + { + "uid": "9e0404ba55575a540164db9a5ad511df", + "css": "doc-new", + "code": 59409, + "src": "elusive" + }, + { + "uid": "823a9e02e643318116fea40a00190e4e", + "css": "asterisk", + "code": 59410, + "src": "fontawesome" + }, + { + "uid": "3c24ee33c9487bbf18796ca6dffa1905", + "css": "resize-small", + "code": 59411, + "src": "fontawesome" + }, + { + "uid": "e594fc6e5870b4ab7e49f52571d52577", + "css": "resize-full", + "code": 59412, + "src": "fontawesome" + }, + { + "uid": "3bd18d47a12b8709e9f4fe9ead4f7518", + "css": "arrows-ccw", + "code": 59414, + "src": "entypo" + }, + { + "uid": "8772331a9fec983cdb5d72902a6f9e0e", + "css": "scissors", + "code": 59415, + "src": "fontawesome" + }, + { + "uid": "b429436ec5a518c78479d44ef18dbd60", + "css": "paste", + "code": 59416, + "src": "fontawesome" + }, + { + "uid": "eeec3208c90b7b48e804919d0d2d4a41", + "css": "upload", + "code": 59417, + "src": "fontawesome" + }, + { + "uid": "2d76f2c8d13be40694ecadfea7fb83c3", + "css": "logout", + "code": 59418, + "src": "entypo" + }, + { + "uid": "e92e6cad2da0ee4bc374a1ef4c6ab12b", + "css": "terminal-1", + "code": 59419, + "src": "websymbols" + }, + { + "uid": "b95cfc96d48a72dd665e0ab109880b5e", + "css": "clipboard", + "code": 59413, + "src": "entypo" + }, + { + "uid": "f805bb95d40c7ef2bc51b3d50d4f2e5c", + "css": "th-list", + "code": 59420, + "src": "fontawesome" + }, + { + "uid": "e15f0d620a7897e2035c18c80142f6d9", + "css": "link-ext", + "code": 59421, + "src": "fontawesome" + }, + { + "uid": "e35de5ea31cd56970498e33efbcb8e36", + "css": "link-ext-alt", + "code": 59422, + "src": "fontawesome" + }, + { + "uid": "12f4ece88e46abd864e40b35e05b11cd", + "css": "ok", + "code": 59423, + "src": "fontawesome" + }, + { + "uid": "60617c8adc1e7eb3c444a5491dd13f57", + "css": "attention-circled-1", + "code": 59395, + "src": "custom_icons", + "selected": false, + "svg": { + "path": "M429 71Q545 71 644 129T800 285T857 500T800 715T644 871T429 929T213 871T58 715T0 500T58 285T213 129T429 71ZM500 767V661Q500 653 495 648T483 643H376Q368 643 363 648T357 661V767Q357 775 363 780T376 786H483Q490 786 495 780T500 767ZM499 575L509 229Q509 222 503 219Q498 214 490 214H367Q359 214 354 219Q348 222 348 229L358 575Q358 581 363 585T377 589H480Q488 589 493 585T499 575Z", + "width": 857.1 + }, + "search": [ + "attention-circled" + ] + }, + { + "uid": "9347a40928618e76958fa67e5333f1c5", + "css": "doc-text-1", + "code": 59397, + "src": "custom_icons", + "selected": false, + "svg": { + "path": "M212 542L212 452L492 452L492 542L212 542ZM600 50Q642 50 671 79T700 150L700 850Q700 890 671 920T600 950L100 950Q60 950 30 920T0 850L0 150Q0 108 30 79T100 50L600 50ZM600 850L600 150L100 150L100 850L600 850ZM490 258L490 346L210 346L210 258L490 258ZM490 650L490 738L210 738L210 650L490 650Z", + "width": 700 + }, + "search": [ + "doc-text" + ] + }, + { + "uid": "6405321f27abab4a505476c917d8c748", + "css": "folder-1", + "code": 59398, + "src": "custom_icons", + "selected": false, + "svg": { + "path": "M954 350Q986 350 994 362T1000 398L958 850Q956 874 946 887T904 900L98 900Q46 900 42 850L0 398Q-2 374 6 362T46 350L954 350ZM920 240L930 280L84 280L98 148Q102 128 118 114T154 100L318 100Q370 100 404 134L434 164Q466 200 520 200L860 200Q880 200 898 212T920 240Z", + "width": 1001 + }, + "search": [ + "folder" + ] + }, + { + "uid": "2ba2063e74ee7b74f6c46a949d37a130", + "css": "cog-2", + "code": 59399, + "src": "custom_icons", + "selected": false, + "svg": { + "path": "M0 498Q0 460 7 415Q57 419 102 396T172 328Q197 283 195 233T165 142Q229 86 315 56Q338 97 379 122T469 146T558 122T622 56Q707 86 772 142Q751 181 751 227T774 313Q798 354 839 377T926 400Q937 449 937 498Q937 530 930 572Q885 573 846 597T783 660Q758 704 760 752T786 841Q720 901 641 934Q618 892 577 867T487 842Q434 842 391 870T327 944Q245 918 174 862Q202 821 204 771T181 676Q154 630 107 606T9 589Q0 548 0 498ZM293 498Q293 571 344 622T469 673T593 622T644 498T593 374T469 322T344 374T293 498Z", + "width": 937.5 + }, + "search": [ + "cog-1" + ] + } + ] +} \ No newline at end of file diff --git a/font/fontello.svg b/font/fontello.svg index d57b1f5d..ff664681 100644 --- a/font/fontello.svg +++ b/font/fontello.svg @@ -1,7 +1,7 @@ -Copyright (C) 2017 by original authors @ fontello.com +Copyright (C) 2024 by original authors @ fontello.com @@ -48,7 +48,7 @@ - + @@ -61,6 +61,14 @@ + + + + + + + + - \ No newline at end of file + diff --git a/font/fontello.ttf b/font/fontello.ttf index e79f2905..bfec5c43 100644 Binary files a/font/fontello.ttf and b/font/fontello.ttf differ diff --git a/font/fontello.woff b/font/fontello.woff index 61c5a5f4..a23a854d 100644 Binary files a/font/fontello.woff and b/font/fontello.woff differ diff --git a/font/fontello.woff2 b/font/fontello.woff2 index b4d6b0af..f0210ad6 100644 Binary files a/font/fontello.woff2 and b/font/fontello.woff2 differ diff --git a/html/index.html b/html/index.html index 77bf3061..d366ed1c 100644 --- a/html/index.html +++ b/html/index.html @@ -5,22 +5,25 @@ - + - + + -
    {{ fm }}
    +
    {{ fm }}
    - + @@ -38,5 +41,15 @@ + diff --git a/img/archive-link.png b/img/archive-link.png new file mode 100644 index 00000000..b134c2b8 Binary files /dev/null and b/img/archive-link.png differ diff --git a/img/archive.png b/img/archive.png new file mode 100644 index 00000000..fd4bbccd Binary files /dev/null and b/img/archive.png differ diff --git a/img/directory-link.png b/img/directory-link.png new file mode 100644 index 00000000..a28afa79 Binary files /dev/null and b/img/directory-link.png differ diff --git a/img/dir.png b/img/directory.png similarity index 100% rename from img/dir.png rename to img/directory.png diff --git a/img/favicon/favicon-256.png b/img/favicon/favicon-256.png new file mode 100644 index 00000000..4e01d43c Binary files /dev/null and b/img/favicon/favicon-256.png differ diff --git a/img/file-link.png b/img/file-link.png new file mode 100644 index 00000000..0667fa5e Binary files /dev/null and b/img/file-link.png differ diff --git a/img/txt.png b/img/file.png similarity index 100% rename from img/txt.png rename to img/file.png diff --git a/img/logo/cloudcmd-hq.png b/img/logo/cloudcmd-hq.png new file mode 100644 index 00000000..8e4d1d3b Binary files /dev/null and b/img/logo/cloudcmd-hq.png differ diff --git a/img/screen/config.png b/img/screen/config.png index 8587130e..deb4ed8f 100644 Binary files a/img/screen/config.png and b/img/screen/config.png differ diff --git a/img/screen/console.png b/img/screen/console.png index e559af54..665d6668 100644 Binary files a/img/screen/console.png and b/img/screen/console.png differ diff --git a/img/screen/edit.png b/img/screen/edit.png index d85a4a5a..e61c148d 100644 Binary files a/img/screen/edit.png and b/img/screen/edit.png differ diff --git a/img/screen/menu.png b/img/screen/menu.png index be2e7fd3..9c4ef201 100644 Binary files a/img/screen/menu.png and b/img/screen/menu.png differ diff --git a/img/screen/one-file-panel.png b/img/screen/one-file-panel.png index b2f4a791..e95fd4bc 100644 Binary files a/img/screen/one-file-panel.png and b/img/screen/one-file-panel.png differ diff --git a/img/screen/terminal.png b/img/screen/terminal.png index b309995e..d38ab47f 100644 Binary files a/img/screen/terminal.png and b/img/screen/terminal.png differ diff --git a/img/screen/view.png b/img/screen/view.png index 287faddf..98e3e7e4 100644 Binary files a/img/screen/view.png and b/img/screen/view.png differ diff --git a/json/config.json b/json/config.json index 42fc4bca..3bbb65f4 100644 --- a/json/config.json +++ b/json/config.json @@ -5,34 +5,46 @@ "password": "2b64f2e3f9fee1942af9ff60d40aa5a719db33b8ba8dd4864bb4f11e25ca2bee00907de32a59429602336cac832c8f2eeff5177cc14c864dd116c8bf6ca5d9a9", "algo": "sha512WithRSAEncryption", "editor": "edward", + "menu": "aleman", "packer": "tar", "diff": true, - "zip" : true, - "localStorage": true, + "zip": true, "buffer": true, "dirStorage": false, - "online": true, - "open": false, - "cache": true, + "online": false, + "open": true, "keysPanel": true, "port": 8000, "ip": null, "root": "/", "prefix": "", - "progress": true, - "htmlDialogs": true, + "prefixSocket": "", "contact": true, "confirmCopy": true, "confirmMove": true, "configDialog": true, - "onePanelMode": false, + "configAuth": true, + "configPort": true, "oneFilePanel": false, "console": true, "syncConsolePath": false, "terminal": false, "terminalPath": "", + "terminalCommand": "", + "terminalAutoRestart": true, + "showDotFiles": true, "showConfig": false, + "showFileName": false, "vim": false, - "columns": "name-size-date-owner-mode" + "columns": "name-size-date-owner-mode", + "theme": "light", + "export": false, + "exportToken": "root", + "import": false, + "importToken": "root", + "importUrl": "http://localhost:8000", + "importListen": false, + "log": true, + "dropbox": false, + "dropboxToken": "" } - diff --git a/json/help.json b/json/help.json index 81a481eb..44f79248 100644 --- a/json/help.json +++ b/json/help.json @@ -8,47 +8,70 @@ "-p, --password ": "set password", "-c, --config ": "configuration file path", "--show-config ": "show config values", + "--show-dot-files ": "show dot files", + "--show-file-name ": "show file name in view and edit", "--editor ": "set editor: \"dword\", \"edward\" or \"deepword\"", "--packer ": "set packer: \"tar\" or \"zip\"", "--root ": "set root directory", "--prefix ": "set url prefix", + "--prefix-socket ": "set prefix for socket connection", "--port ": "set port number", - "--progress ": "show progress of file operations", "--confirm-copy ": "confirm copy", "--confirm-move ": "confirm move", - "--html-dialogs ": "use html dialogs", "--open ": "open web browser when server started", "--name ": "set tab name in web browser", - "--one-panel-mode ": "show one file panel (deprecated use --one-file-panel instead)", + "--menu ": "set menu: \"supermenu\" or \"aleman\"", "--one-file-panel ": "show one file panel", "--keys-panel ": "show keys panel", "--config-dialog ": "enable config dialog", + "--config-auth ": "enable auth change in config dialog", + "--config-port ": "enable port change in config dialog", "--console ": "enable console", "--sync-console-path ": "sync console path", "--contact ": "enable contact", "--terminal ": "enable terminal", "--terminal-path ": "set terminal path", + "--terminal-command ": "set command to run in terminal (shell by default)", + "--terminal-auto-restart ": "restart command on exit", "--vim ": "enable vim hot keys", "--columns ": "set visible columns", - "--cache ": "enable cache", + "--theme ": "set theme 'light' or 'dark'", + "--export ": "enable export of config through a server", + "--export-token ": "authorization token used by export server", + "--import ": "enable import of config", + "--import-url ": "url of an export server", + "--import-token ": "authorization token used to connect to export server", + "--import-listen ": "enable listen on config updates from import server", + "--dropbox ": "enable dropbox integration", + "--dropbox-token ": "set dropbox token", + "--log ": "enable logging", + "--no-show-config ": "do not show config values", "--no-server ": "do not start server", "--no-auth ": "disable authorization", "--no-online ": "load scripts from local server", "--no-open ": "do not open web browser when server started", "--no-name ": "set default tab name in web browser", - "--no-one-panel ": "show two file panels", - "--no-keys-panel ": "hide keys panel", "--no-one-file-panel ": "show two file panels", - "--no-progress ": "do not show progress of file operations", + "--no-keys-panel ": "hide keys panel", "--no-confirm-copy ": "do not confirm copy", "--no-confirm-move ": "do not confirm move", - "--no-html-dialogs ": "do not use html dialogs", "--no-config-dialog ": "disable config dialog", + "--no-config-auth ": "disable auth change in config dialog", + "--no-config-port ": "disable port change in config dialog", "--no-console ": "disable console", "--no-sync-console-path ": "do not sync console path", "--no-contact ": "disable contact", "--no-terminal ": "disable terminal", + "--no-terminal-command ": "set default shell to run in terminal", + "--no-terminal-auto-restart ": "do not restart command on exit", "--no-vim ": "disable vim hot keys", "--no-columns ": "set default visible columns", - "--no-cache ": "disable cache" + "--no-export ": "disable export config through a server", + "--no-import ": "disable import of config", + "--no-import-listen ": "disable listen on config updates from import server", + "--no-show-dot-files ": "do not show dot files", + "--no-show-file-name ": "do not show file name in view and edit", + "--no-dropbox ": "disable dropbox integration", + "--no-dropbox-token ": "unset dropbox token", + "--no-log ": "disable logging" } diff --git a/json/modules.json b/json/modules.json index cc243403..6ed586d1 100644 --- a/json/modules.json +++ b/json/modules.json @@ -4,39 +4,27 @@ "edit-file", "edit-file-vim", "edit-names", + "edit-names-vim", "menu", "view", "help", "markdown", "config", "contact", + "command-line", "upload", "operation", "konsole", "terminal", - "cloud" + "terminal-run", + "cloud", + "user-menu" ], "remote": [{ - "name": "jquery", - "version": "3.3.1", - "local": "/modules/jquery/dist/jquery.min.js", - "remote": "https://code.jquery.com/jquery-{{ version }}.min.js" - }, { "name": "socket", - "version": "2.1.1", + "version": "4.0.1", "local": "/socket.io/socket.io.js", "remote": "https://cdnjs.cloudflare.com/ajax/libs/socket.io/{{ version }}/socket.io.js" - }, { - "name": "fancybox", - "version": "2.1.6", - "local": [ - "/modules/fancybox/source/jquery.fancybox.css", - "/modules/fancybox/source/jquery.fancybox.pack.js" - ], - "remote": [ - "//cdnjs.cloudflare.com/ajax/libs/fancybox/{{ version }}/css/jquery.fancybox.min.css", - "//cdnjs.cloudflare.com/ajax/libs/fancybox/{{ version }}/js/jquery.fancybox.min.js" - ] }], "data": { "FilePicker": { diff --git a/man/cloudcmd.1 b/man/cloudcmd.1 index 94c05dca..dab36a2c 100644 --- a/man/cloudcmd.1 +++ b/man/cloudcmd.1 @@ -31,48 +31,73 @@ programs in browser from any computer, mobile or tablet device. -p, --password set password -c, --config configuration file path --show-config show config values - --editor set editor: "dword", "edward" or "deepword" + --show-dot-files show dot files + --show-file-name show file name in view and edit modes + --editor set editor: "dword", "edward", "deepword" or "qword" + --menu set menu: "supermenu" or "aleman" --packer set packer: "tar" or "zip" --root set root directory --prefix set url prefix + --prefix-socket set prefix for socket connection --port set port number - --progress show progress of file operations --confirm-copy confirm copy --confirm-move confirm move - --html-dialogs use html dialogs --open open web browser when server started --name set tab name in web browser - --one-panele-mode show one file panel (deprecated use --one-file-panel instead) - --one-file-panele show one file panel + --one-file-panel show one file panel --keys-panel show keys panel --contact enable contact --config-dialog enable config dialog + --config-auth enable auth change in config dialog + --config-port enable port change in config dialog --console enable console --sync-console-path sync console path --terminal enable terminal --terminal-path set terminal path + --terminal-command set command to run in terminal (shell by default) + --terminal-auto-restart restart command on exit --vim enable vim hot keys --columns set visible columns - --cache enable cache - --no-auth disable authorization + --theme set theme 'light' or 'dark' + --export enable export of config through a server + --export-token authorization token used by export server + --import enable import of config + --import-url url of an import server + --import-token authorization token used to connect to export server + --import-listen enable listen on config updates from import server + --dropbox enable dropbox integration + --dropbox-token set dropbox token + --log enable logging + --no-show-config do not show config values + --no-show-dot-files do not show dot files --no-server do not start server + --no-auth disable authorization --no-online load scripts from local server --no-open do not open web browser when server started --no-name set default tab name in web browser --no-one-file-panel show two file panels --no-keys-panel hide keys panel - --no-progress do not show progress of file operations --no-confirm-copy do not confirm copy --no-confirm-move do not confirm move - --no-html-dialogs do not use html dialogs --no-contact disable contact --no-config-dialog disable config dialog + --no-config-auth disable auth change in config dialog + --no-config-port disable port change in config dialog --no-console disable console --no-sync-console-path do not sync console path --no-terminal disable terminal + --no-terminal-command set default shell to run in terminal + --no-terminal-auto-restart do not restart command on exit --no-vim disable vim hot keys --no-columns set visible default columns - --no-cache disable cache + --no-export disable export of config through a server + --no-import disable import of config + --no-import-url url of an import server + --no-import-listen disable listen on config updates from import server + --no-show-file-name do not show file name in view and edit modes + --no-dropbox disable dropbox integration + --no-dropbox-token unset dropbox token + --no-log disable logging .SH RESOURCES AND DOCUMENTATION diff --git a/manifest.yml b/manifest.yml index 97b2810f..c10c360d 100644 --- a/manifest.yml +++ b/manifest.yml @@ -1,4 +1,3 @@ ---- applications: .: name: cloudcmd @@ -7,7 +6,7 @@ applications: info: mem: 512M description: Node.js Application - exec: + exec: null url: ${name}.${target-base} mem: 128M instances: 2 diff --git a/modules/domtokenlist-shim/.bower.json b/modules/domtokenlist-shim/.bower.json deleted file mode 100644 index 302d2e21..00000000 --- a/modules/domtokenlist-shim/.bower.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "domtokenlist-shim", - "description": "A super strict shim/polyfill for DOMTokenList", - "main": "dist/domtokenlist.js", - "license": "MIT", - "ignore": [ - "**/.*", - "*.json", - "*.md", - "gulpfile.js", - "src", - "tests", - "node_modules", - "bower_components", - "test" - ], - "keywords": [ - "classlist", - "domtokenlist", - "polyfill", - "rellist", - "shim" - ], - "authors": [ - "Jonathan Wilsson ", - "Bogdan Chadkin " - ], - "homepage": "https://github.com/jwilsson/domtokenlist", - "version": "1.1.1", - "_release": "1.1.1", - "_resolution": { - "type": "version", - "tag": "v1.1.1", - "commit": "83b9acb080e47a5dcdaa75f2351a0602ab8351b5" - }, - "_source": "https://github.com/jwilsson/domtokenlist.git", - "_target": "~1.1.0", - "_originalSource": "domtokenlist-shim" -} \ No newline at end of file diff --git a/modules/domtokenlist-shim/bower.json b/modules/domtokenlist-shim/bower.json deleted file mode 100644 index 938c8b10..00000000 --- a/modules/domtokenlist-shim/bower.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "domtokenlist-shim", - "description": "A super strict shim/polyfill for DOMTokenList", - "main": "dist/domtokenlist.js", - "license": "MIT", - "ignore": [ - "**/.*", - "*.json", - "*.md", - "gulpfile.js", - "src", - "tests", - "node_modules", - "bower_components", - "test" - ], - "keywords": [ - "classlist", - "domtokenlist", - "polyfill", - "rellist", - "shim" - ], - "authors": [ - "Jonathan Wilsson ", - "Bogdan Chadkin " - ], - "homepage": "https://github.com/jwilsson/domtokenlist" -} diff --git a/modules/domtokenlist-shim/browserstack-logo.svg b/modules/domtokenlist-shim/browserstack-logo.svg deleted file mode 100644 index 0f24cc33..00000000 --- a/modules/domtokenlist-shim/browserstack-logo.svg +++ /dev/null @@ -1,12954 +0,0 @@ - - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - eJzsveuuHMl1LvgE+Q41PwxIB2Yp4x6pMQzs2hePZnSDWpZtGAcNir3V4jGbbLDZ8tE8/Xzfiois -zFhR+9KkNDJMJtQiq7Iy47JirW/d/+7/+PUXL66+evf7+xfuOB+mv/u76/f3Lz+8e//Tg3x6+Nmb -N99/9+E9P/rRb358MOk446arn+Uv642/u3//3et3b3/Kr4x8ecdf/+jq22/f3P/48KMf45Pfvv7w -5h6f/fzd1++O3371hx+39+CHNy8/4CsTfzL7nxh/MD81y+HXv+ANL9/+6eV3373+f+Vrlx0+O737 -/u1Xr99+fXr3v/Ghy4cXwflDdMvhhckRN/xfr39z/11/19FYE2yI1jsT+RN3zGZxyxySzUvA7/Mx -p2z9vCR+Ig874muzmJDmmAKefPPu1fff3L/98Ov3717df/fd9bs3795/99PD9Z9fvj384uXX+Obl -4d/u37x595+H05uXr/5jwiKFL+9ev7nHenzz8gMGwtW5+pmxX56+f/3mq19+/83v77FSNjl+7L6U -R/7zd3gWHsu/8+P05c++wSdf3H/4gBnhhVzh61/82/+zHQdmWa8f/ftv7r9+LRuGtf2fP65Pfv/u -229evv+P77hL/mhdios3S16cObxwJhydcSablM1ssZyzPaZoHdbDZuPs4YW1GLs1M36RljjX8f72 -/ptv32D3ZJndEo8BD5v5f9t/1HuxDnLfC+OPfsGfOefoY/bYD5+PMSbjZ5dnBxpIMR/DjD+LMS5g -AGY+OmdzWKJZYo6mPPO8I/d/en3/nz89/PLd2/uy7FfvP3xRCMf7eS7/Ld/85vs39+//+e3rD1iL -yI+Wsu6/ePfV/Rtsxvr7uzcvZbnlMuf/lht++/L91/cfQGvv3nz/Qcg/tzdgX3/+8s/3JA5TXvCr -b+/f/vbd72SML5w9+rgkY0HR+P/EFcGhmn2cjXPOLDgDR0f6zKBAUCnOA3YHVBrxlyyDSPg/Lstm -dGY7Or6Qr2vjSKCZX4OKfvX+9dev3/50mQ8v0mwLef3T+9dfnakLT83lP/K4Y57ljzGLnRe7PPWT -Rf6kaEI23j7lk7JSWPQPH+7f1pXDSbn+xYby5+MvvsBMbt9+df3uG+78d2QJoPe3OAxv3n1dvlv/ -Lt/g599/W1ZF/v0liOTX71+/5TOnX8o3+ctfv/keX/3T+3fff/uzt394N/2o8L7f3b8CgwMdfXX4 -1e//F/4Bdian8fDb9y9f4QH493rP8eXrb3/84OMwuff3h/Ilfin/bP//+K9v7v8APnL+efn09u2f -7t+8+3bz2PWTl2+/OvzLy/ffPv7oX795+fbl+4N8vj7556//hG9eYqXOzz5/9oSHgvK+xeLIT+SW -7gUP3LD56gkvevnhj2C592+/+m59dvnnfuDls8ef98Ur0uD7w+n999/98fDbd+/erI/df7U+vX4s -n/L+v413/Fp+8PZXb8sC6TfVG/o3gff9zb0Fd19+A778W3769cs3b15//f7lt398/Wr0gsH365vK -d88hrD9/8/t3b15/982Znjaf/Prl+w+vX725/+LP3324/+bJm3u4/eo1mNyFY/zgPV/858sPr/74 -89e/f//y/ev7B08fN+APr99+Bdr/4vvXH+7PC/Tum2+J6A5f/PHlt/cyjQ9/vJM7v1gfGL4E698y -9xcvJnM4vd2w/n96//Kr15AaAKL//Pbty2/A1r+uHx2M/fE0/BRy0B5OX03/Pv3DlJaUU0rAg8kn -lwyg4V28jTfxOp7iVSQ0STHGAFzjoo0mzuEu3IabcB1O4SosIYcUYgjBBwc8aqYw+zt/62/89fSP -03z4uy9P7/Gi+Yinm7lI9XgIFPH4CqLvy9FXp+/wC7vENLvzx2be/Gb0JX51ulkXri3NA4LSzhdX -8+4l0fbhi//4MxZx8w+8sa4dxD2nNc1YReCkf8TWrJPNAANewAZRhCtARk/i4dtkEdZbBA31Kzf8 -9tFl2EzzV+9fvv36/u8rysdUuw/wuNBIZQ4/8Irja9r89R/x/NPpdH26Od2e7q7na3Ntr921vw7X -8Tpd5+vl+ur6+vrm+vb67ma+MTf2xt34m3ATb9JNvllurm5ON9c3Nze3N3e38625tbduuvW34Tbe -ptssz8fdT7/849e0+StIve0/Fso9cPnnX5P6aLe+Mrnsc8gRGl/OS77Kp3ydb/JtvlugcADA+gWK -BhQdItSr5bRcLzfL7XJ3NV+ZK3vlrvxVuIpX6SpfLVdXV6er6+nq5ur26u40n8zJntzJn8IpntIp -n5bT1elUFjQ964qPXdPgw82edItsP+3VP/ChPXzwkqWBIrS4K3dy1+7G3bo7bBoUAu+898FHn3z2 -i7/yJ38N6rn1d9hGqvMejDSCoUItBHM9gcnegNnexXkC57XgwB6cGHoluPIC7nwCl74Bt75LMzg3 -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 -oWu952Qx0njVAylaKUOfN73GmT724u1SL4hAsrJxDCspiyVRyeqS2hVRrSlEkfVgd9j6cw9LOCyL -8qCFI2701AtQmElmkFyGAbTkuc03hQ/YlLGPs9/kZaP7Yk+4YTETbPvpOBzDdFmvsrzXidI/+/Vs -c/acbMWqynwFntBQ+pJUj97BpFIEFIfpiSK1o81ESjKdd62Nd/khDjao8+ePsgQhlqQKDO7e0L88 -Vy6hxKL1V/hIwjUh7q/yWzN+UbVUqahwLO5d+O1sLK8TeeHK4z229WAde1pBNeZTL0xkFCVDnJAq -XTMfnSEDsWKYZnP7xi0AYcjt0fp520aeLmXdXco63GGT6+3gKrSEnl6CuGihO3OddJKXmRwtaegi -J3yCX/J0UuySzrOEM4dkL7yELvOvZnUuuBZDUQR63YS/GNcDloPbyiiwdPGOBCfUqOiIRYNg1Lkl -y2WWBAttEjSmFAS7dUv56eMBx19YhuDDMT3PZPq7qAuSx1dS7B4Q01eYEBBo9kTuwa5FcyJHhEDE -2fEu0S/RCJPwGg7XQmmh52aYy/OERGNYpNo+GbymF7fvbvKHQvq7SxLQpAXPk0Ou9g== - - - qzicPyXYR5Tbr9Ju/8jBEvaw/T2hVv/j15Rk3v7sz9/+4e+/frL89hd/9cMP//z2Z3/5i7/95Y8/ -fvf73377i3/59u+++913v/zxu19/e/7ATvW639/88je//fbTD7/7j29/+Kdv//rXv/nxv/z+h3/9 -3RcXt3/yCtLbX/zdd7/8YmiG+uH33/7n33z/7d9+9/tffffbH7/9P777Dxu3vf3FL37744ve/Ncv -/59//s4u6PMPv3r8DQlKN001RN7Xzvjff3P+/u9/8+sf/+dXf7b3/PzdP/347fn1/+vvf/it36P+ -tSv7299/92+/+e7fz4X987/81Lj//Yff/bHD/t0P//6Tw3Irz335zXf/8sVd+cM34n/77jf/43/+ -+PJx/vXP/pe//EX99q9/+2v/Q/7d+fe3//WH3/7teWl/PO/tz39uzX/13f84v+ndgZ/9199xZNmR -v/r9v/7L/4xx/uz//O1vf/n9d79+G3/+s/T2l+f//+HffyY6+b8+/us//+wLCnl6+9/P//h/T9O/ -v7W3v3n7v/7v9PZr/vLvfvbzs3Ch/sjC/g20hp+jiUHOeETb5y/bxCs488vnd3/7qs3/9rePq/pv -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 -cwRpeuafYtgS72hoRuLQFyt8ugyIueOz0UaYP98pBdL13RaGa3rkKNMKtkSov5rpUPx9RBPsDSM5 -tUUSiE0vocln7/3QqlG2Wk0j0ITJYCI0zhpfc8oOLDqvy7u9uK+69F079nuukKSed07Srv0OkCId -6fAuNbbbaCkZGvNj1JweA6yraqPcxWdvdoSYHqLPdTTvvG8AlWzkAj8yJqB9T7dvuVcfw69+Zn1b -joSCk0N2uigF7Yxm9sbV0l3eWjyeR0JguhzCTg+q8DRQCI0ykIpYLaCp27bQsYXp0RWrEg8xLPG4 -dT9XaAuUd38fgLyhGJa2eRcR5b2qN44VM1qLXfO2ksLV1PEbsN5v0A3LRmO7Uj+93QuQ722crK4e -fXe6q3Zv3jjXfTPtj3egCxSU6tUUoDky4ufcuiKh6mOSlrqj/p7mq1HhzD0a5410k4npqueMIkoJ -SSBYlA8ptuo7UFrn/Tx1r7zxBuvNELA7VxN0sAvYe/mw9V32yXEjND42Fq7Opp5XbKYE9PJsS67S -wQiV4TPx28JpE7IhWM/rDx3tvbCaDbBvCC+w//S+6360znn+Gt2Tvjde8DqM+rbYGA== - - - Z/9caMz3E4gaMM2YpPgA/z9p7/kd15HkC37YD3t2d3R23tuZfTPT0z2anlYbtdQNb0hKFL0DQYAA -4b0p770veIJWlERJpOgdPFDeGziCJDzKXldVANX93t+xkVV1C5TpN7tnP9ShlKjKmzczMuL3i4yI -pKMvy1HJ8HyaxxSWZpJhC/IzZyqZ72aOhlEF830eVZg9MEFfLS2mD8kKyrKRg+jL+dnaTmW0li9P -1yynDyWzmDbdmInQezfkAA23LD93kJ8JXcnkvNJ5DlkmhmYGwDwdz0L7FlFzQT4dzoZuLM5+N5ub -nw5Hodv2E2aKSrOBI+nf51IF8rJqNh/FkNCDzdYXKs/PuYTSQcdldAdlGauVDbUsz054fhZEZb+d -lYRSWk+jOJsMckNClz3MT4dhFeVEMSs0dJhKRba5uDAXVZnJL0SN+6kGxZlyYGlZLsqFztHuPtSc -V0Cf/GczNsrRhXwFdJxkSab8WXoEuSCo9EEj3UE2xRINtyD7sMJ3Qioy9ZlRW/YAIx1JlvUSpLde -OT3Y3NzmuGQ6NKuc3qToUij6XUv2OyjIpSuUIr9vRbY5rzwX14MCmGmlUpZPRyYV5WUnDF1XRAtN -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 -vClik9OJbJk00y8tA0/Oa8r/YNXVv+foqf6rWVP8J/dg42f36Rfehfr8MQGctjXMOO3srvtwnF/8 -uyHGxd89pV/83StJ2Z8DD5jHlofYpz03Wj6PTXIuR8aZZxOTxO9+6Tgwpzn/jtlQ+r5roO6TCcXF -d0GTqxCTgrE1zC+OjPGvLD9p/941WPvXOVXZO/PKij+YDLXv3+s8+28T0spPFx/TTsYnpfVbr7lF -i4/bvlm8C5qrh/4crPk4+KDpa/g+f0mOiZrXx3UizwPW8dURQWnS3N29PiKscPTX/m2ce+5fRzkX -f3+7/cR/s05+/P8sPKo/vTFSe2BOefI//LcqPkoZKecSs53APS0HE1OUkxkzuzxrVTBiU4KylFnF -iZuV3MBdzpHgHfL3wdv1f/MMVn+09LBlf2qaV2bqr/+h5qc//y/fYPWxrF2rCjzuPDWpufQ/qy9r -9228qPkieLPk3aUHtV8g8/yqO8xjf4kM06uzwJvro4yTi49bvnFeu/qeY6Doz0bN5T9Yuqo/HCQf -+9/9dQf+ff0Z9Yz/QdO+KUXR718Li383Jrr6n/Pq6j+O8c7//iXtxH+Oa4v/QD3z0f9rUpfv34Ga -9t5l/OTor/rQ2lX2rklf9qdp2ZX/Pc678O+z6uoPH3FKPrrfeuq/114KLk8o6j8A5Pidp6/ivfVH -rd/NKYr+NMz45V9c+gvvBO8zT9m6GMcW7wkuxiblTaBvv649afs2fKvx04WbLfsc3TV/temr3gve -ov88JW373NNNIvTxyNJj6k/bLwVF4Yf0g8G7nQeC99sOTqmO/7fnRvnftl8p6teeCov8tynfrb8Q -XFh/xT61/pL688rz9v3LT1u/Dd6t+dzaW/yepav0L/47/KO+u5xfVp6zT4QfdO73DjZ/6rvZ/IWt -r/7jGW3dR/eo5/99iHfpnZXntDNrr7jn3QONHxn1Ve9OyK6+M68ve9/eV/5X7/XyTzZG2n8e0V58 -76Xg7HuxKUUn9GCFG36Wraf8XedAzV9BDz4Zl57/7xeik++oqn74twnFlU/RWUHN6pPW/cuPwPee -tewP3av7Grz2q5UnFz+0dJ3848oo+ULULGiOTHFLtsCD3Dc6v1q6T/vJd5305cK9zp8gX+4391R/ -AtnyF4KDwg9bDqwOcc56bnV8Y+1p/NB9o3XfwlP22Y0xcSXBWUb9lT8sPyMf9txs+w== - - - ynMdmHqYccp1vfFbe0/DJwu3SV+nCM+4335wVlX3ua239ZvlZ/xiZ0/LpwsPWEecg9RvZ1U177r6 -mz4J3KH+YNQ1fCYo+vZfnNeAe18wz45Jr/x5hHv2P4yK4ndcvbUf+m43f7U91vELYmGUzw9c/eI+ -48i/2K61fLM+0sULPOSfn9U3fD7MvfL+MLvk3RnJ5XdGOMf+a/lZy9Hll/Xfbo3SLqC2rp68V6n6 -/zj66q82tr3vtKc9p+5CS12hhZbSUqxocXcJgQAh7q5EILi7E0ICCRESJDhBkxDFoT3n3uc+z3r/ -kXe4P8yC1bIme/b+fiwz893b3VlvVMwfVzTciBvG5rTHxvp0t9Um8AtjB+yTRpz/ScmHfNhXlWNP -9Sz4gQoTbeuHfjN3QT9tdRV/WGnLA3x5adhyFzJznJ/pMd9U+OlkipANeJHPm63ZT7c78t/Ni7Pf -LjUUfjlR8cjHeiHNOc7M2xnlQkxD2JCtfqjXSkv+q7mq7CczFYn35iqT7h9oSDnrA9DPy82l3ot1 -hKCpCpjHQh301UpjyfuVFrTvED//ac5393Pj9ETffQWnZLkD+U3BDf5TwQ38U8mOuCwnRV011kPf -T1SBXxXFfbxc5vf0vGOUkq5gpd6SESMuqpnRV2aESTfHqZHXZKSwm5vdhT48aOA1RMi7i7OC4ph/ -z/LpdjnMf6Mb8m6+Juexgp58oxcZflFbnvFwiJ3plh/87o9JbvZ70yAqQiPKfDZdkf12tiLjSR82 -7DIwXRc6St6dW+tKe9nPTX3bS45135Fgo82DOEBbSnwAbHgtN+c803Djbgyivl/ogHqd13Cj3Vpw -8Q87cMlvASzFr3cgvq23l340DyC+bffBvy40Qj36UAF/9cH8LgJe29PYDfsC6GyoTUpKMw1gw60S -TMjZd2q/dJiE31OYxJXOjLcTrER36wgPahlmZq53oQIXmorer7YWfTD1wP02u5B+CkHqc3yCx1+D -pPg3rlFSkp4fcW2mIubefG3mcxnx563Z8ogHOz0JXqau9O/2cWzSaj/YwzVOzHAB2WIJyJMLDdC3 -EmLi1QFs9F8TjKRbrpEyf9cEOkpeEf+alPTq0lYfJc3QiPiqKk+7ry6PvWvpLflu7od/X24ueLXc -CH613lnyeakV6rvcWvL9QCUgOOTcAlM/KmCpOee5sTXnpYQSe1Oc63thnJPo3oSPfdSMinUzATwz -D2QaQ3Xh89mqrCdj9PhbtQVBf9ESfM5N1xd41OPiX2OiP/8FXM5DpxSXtK8gpR0CucUuL/Jbbo2+ -Oy0KuabjR95e7S75Xo9OfsYr+HlfW4uJ3ZFyisz9iCDbYMFHc0/u25XW9PdS0tcrxtbMDwcaCnit -s9R/pS731XYfNHK9pzjaOoj4sdUBfm3qR/jNNRS9ZSZ/uVhXGOF+MMEuA7QlA/DCcfNVyY+WajKe -mPugnw40qGizrOyHqCTgJjbR8+JSDzRsB/DRizX5z1frcp4u16W6jVNDbzpl+Nj9CQ7cPsbI31Nx -4fYJPmZrCB0EZNSP01XZj7WcuBsL4vjbG+2ZL5yT+FR5ReKjhSZsgm24gbHZy0lbaCx8NVmZ+WSc -m/NCWQ59OUBKebPehs4+0Yi5az3k6Jn6tMez9Ului02ZT41NRe+2u3ABk1WQ1+Ki4Mvt0DDAq9DB -M1X5z+Yqs5+sNIBf63jx1xfFmY+3Ooo+bvXDvwlLQ67Sk75eX6iBJ/7bwGfujJR8W+8s/rDZiQD8 -WYmnmp1631AFedlHT3vw86PbOQk57t1aPza2jxx7s7no6x8ybNhfQ9iISy3F/n+NEgOuWUZK/NnF -gXdZOd5XHXJsxlZ/me9Sc7a7oS7Lbb4h99lUZdbTCUb8nUlO0mNTD+JHZUn4zSZ4FKC/5BRDDfgV -oFtu64DnMrYVvJkSpz3sRX67oqQG3Vvryvs0QIt8bBvEpP1rXlS9qySmWwBtAjJP4IGiLPhIVRZi -lxV+ma0Dv9XWIoLGBfneNikdvNWH/bHRUfxppx/uvzOEDFwBPJqKk3xvrQUWbB8hJ09yYm9td8F+ -WIYo6RudyJDdEWTU/5ujlPzvDAnslJUELrelvTjWMMtcQH5b7IB/WutGByo5OW5jtLQ7K/UFr/fH -EaH7k+h4TX36e1qK56XVVmLUlLjUS0ZJvK7hJbpttkE8ATyHbfVhwvbk+MRdGTbWUJ/1arm9wNch -55Vu9tJiNntRfhu9xV82uksAH18WrKvK/rzWXRbWSU1+3UlMeG6WEGLUgpynclryTQUz8dYYPfnB -MCn1uYSR6TXfBQ8tjv18NejFXVArLPzhrylG2e5ZTxDAzxk7cl6sNCW6LTckPd/oADKGkpRBzva/ -mu7/4vwoPz8CyEDJemHcw9mKGABHMbdVrMBrY5RvN019YD+nEhs3SI1+qK/I9vzbwMH/NjDRjlFs -9FxVuttife5LJSfxPjnq9fn2ktCH842wELUo7+PBJB3lHEXFWwFOcMmwUXZpWch0beaLFmTItXZs -xL1NCTp+QgQB8g30o11CSttXYdId4yXhm32FH+cb0p7ONWQ+d03Qixb6kT8WO0u+OsfoOTYJKXm7 -u/DjzgD4g0Na9MUOZNvF7pJAq5SL31XWCrYGuFnz9SjvMXaGWw8q8vJcRd6zPRkx9p/ZctrplIhj -k/KhZgkPutaDDV5uy3u5VJ/+SMfLfiCjxl/thoVcMDZCfc0SYrJeXPhivZ0ctdVF+dmN8LsgwYdd -m6nMejxbmw/4/hw3Yxvcf3+MAzue5CBMfTBf5yg12zZKz11phnoYKrIfqTkZD8bp6Xfl1Mzna03o -n5ZhYelCM/7HbFXR51lR7jO9IOWOoSL9vrUP+sWppGRMN8NDDM3FgQcaFnx7GB1i7IX5bo0SU+0a -RqlxEBU4yc+6Py3IebTWgvDRizIezYqz3lqGqMkLTWWfNtpRftYhfIR1CP1jZwAdYhumFB6pGViX -hlEiKPG/B+SqkH8vVdTvTZJyrUDm3VPg4nfHMZH7E9joQxUxxSmnZhiaEEEqYf773XEuSV+d/2YI -H3RJJwi/ud2f/lzBD78+VZ5yz9SBDNAAOshL8bxq6kZl/p7lkU6mqOADLTbBIYcGbHWmvJoTBV5Z -a896+0vPJQIePm+6tvDV9jAxaq4e/FzDSb6lYPy80YX7drOLEHB3uib56VJT3suVPnySGPrj7gg9 -7dPhBJe4L6ekAhyb5pTDI0396V5bXbme8zUpD9bbCz+bhtgZtYjY+6rqAj/XBCnNKkUEzzXkfVjv -zPE2Dxb7bfbkfTDUpD6Z7yj2H6LH35+pAn80dqGDtgewEVYgW+wqGUXrw6gwVWW+p4yT6Q3gMH9X -RctzKGg5u2p26SawlptdEI+dodKvAD+9WWwt9DK0FX6eaisI3xjBZErZCa9mROlPTF1F361DpaG7 -Clj8kZYIPdbh062yEv8RWvi19Y7S0CMto9ghw0SYB8q+akXJdyb5afe0/LQH49zo56bBoghNdZ6/ -ID/g6toQEbYjgYUuAv53s63QUy9IuD8ED/5zCB91d7Y+94MTwC4nO/ByOyYRwBOXejCFz98ayPCw -SIgJ9hF24aGyHHeo5iK3h5HB5hFMjEvFg1uGcHG2gVLfpfrslwZx2mOA6wJ+z7JR+xpanmmUFLvY -QQw40FQL99R8vE2Kidw9e9d2GOJzMFn4w6UsCbAAvHg8LWRagNy71E4LX2rAB6y2oL4u1Oa/OfvO -xdxX5rfQVPButQvmaxwgx4zXFHr14xKuLVYXe1kHCVE2CT7SPIQM3uyHfDUPgYH5zHmzVJfhZh0g -JFuk3CJAx99q+enPJvmZz6b4GQ9tPciwfRkDvNqFCp+tg36xScoxuka0fzMs4GJ7qe+fU8KER6bB -Mv89FT1/Xw0cWmapQ4FJPJlhoE+XKmpdUyK2SUZJWW5DfDe2IHy32pG+xibYR9cwI88ySE1XcBLu -LDZmv7GOEOOAcX+cFMTdVbFTHugrC16udhIigJrKPlSXk37Nc9mHM2zC/mRd3fGUqHylu/S7RpQO -1FDq/SlB5I3N5gJAa2E+Dnk5Zr0PEz7TkPlksx/88ew+FVAv32xDlESnlJ2nLM95M85Ifr83ysTu -qZll64OFHxxAZnYCtecYxoQfSMuC9hREoHax8VsDZ32dkIEHWhZCX536fJQW/tdic+YbbVWet4yT -8nKlNf/jkZpeOgcE9YqSH3eVImjqiVpIX28teLNYl/xQwwu/KWME3t7szfuwN1YWtjdGSl8bwEUJ -YUG3J2ryI3e1tMKZ+vx3g5TIhwp+/OuF5qy3Sy1pr5xy1M/ZNsh3KS/+iWOCCAH41a8P739VyQ65 -u9qV/35TUuK3OVjy1S5DRu5ICAnAurxb7yGnH+rE/J0xWtZya/Gntc4Sn3FeovsIOfKmVY4I3zPw -2dM9+LziKI/bCz0lPw/1tGKHHB9nHkH/MEuQP1aBLK3gRj4cJIfc3wey+URtUcgAPvqBpR8d4xwX -4mzjIrxtnA05mKIWHxnIsL1pUo5DTwW79FxcDznq4VxtptehioV2TvCwh2pm8TFw/r8NRLBLWfzD -Ki30/2eRzf7PhnjgYIoEMY0UfDk1VDefzlaKjybL8XYZKdEC8COgcdEbY4T4ZmLYg3lRqe/+cCXG -JeVA9sZpOcc6SoFpCOqzNQjzs8hYOWfvLlhV5JzNvmIf60Dp19XW3Pfbg1kfDyfRSbtKctbRNBu1 -M87I3hxiJG4N8/Nmm5CfAd/9zdKL8FtvhbwDMP9kuaPUf7YD8b0RF327n5DiZurj5lmlnPy5ppKP -Y7yk+zJWzJ3ZmtQ3G+1gP3N/WfCegpq5Poj/OdNc+HZfxYFZpejIhaYk92FS0M0xduz9TkzgX92Y -oGvrneS0sRqMX0NZ1FWtEOx7pKYhf82SwCc6Up5zHB272g32WOlKfXE21l8Geql1jJDoHOfBdicr -2VvDtNSpiuwno+Sf1+TM+GdjrOgHHSjfi1Jm6L3ZtlKfNlLUfTk77rGpDx1nkxCTgLmGHmvZZfsq -WtG2DOJrVSFi93QC6p5aRDONMHONXdhoIEcHbLeDvU6UmLg9OTZms6fMzzQAD7MM46KcY2zozig5 -QVeT+HCuqdTHIiUnWKTEmH01B3Y4JWA51KzSzVH0T+dMdatrumnIpWLBtnpKPxsasp/pqzKfLDQX -ejsVlCxAJ3M14tRnCm78PZeCDLWN0rK3emHf5+vTny41573fHCbGbEvoWY4xEWFHQstaai79YhrA -JAI4S3Mp8cln9xjWusAfJ8UpL8bLY+7syNGRe5NstG2CBlnsLgt0qflEp4qLsEix0cZO8Jft3kLv -rf6CT1YlKnp3hga1AibPPIgM3ZWjE/eVyKitvoJvakG8m4QaekPOAPxBTcbzIw0HfTRVKXCoRVTn -RBUTqFW4XU5K3OyEeRvq8zynmqHfVwfxMSs92Mi/l8oFNjkudb297PNSM/yjaRgb6Q== - - - UOFS7Epsys44JsE+xcZ1cjJ8eXlfb1uGaZQjQ9OIXV8lMqtZ0HUJKmilD/bdpQOwMs/nrUlJ6eEe -90BViOjA3amqJrOShzN2lX5e6ch/s9Gf9WqxPeWZoTHl/d+L/MrjOUHVApCPnBp82vFsZfW+Tkjd -VfHKdhXsop1hWvJ2PyVquYcY2oJLfDzJRHxxDdSTLH38vNVm/Pf1VnygqYsYZR0mp7jUvDK7noNZ -ADIv4E+/HyjYpY5RJtg5xoTua7goxwQj36EkppqHcaGWIVKUScLOaMHEXdeJit5ttOEDbH3keMcQ -I2dHwi00dlNjZ8TQN+ud+GjLmAi7PECOm6wqfKGuhHivtGNjnKNs5G+9kGUfRUdtdRf4LLdmvlju -KPLeVQow232ooLna9KcjlLhH44yM5xo++OtSIxLITGKchFP2rg4SfXOpEZ/37/nK2rP7RfaRIp/t -waJPG0PwSJscn3o6RS851BDS55vSX210MpJ3FPW8lV5mik6Q/xTg8Qd9uKi7o9S4B+OstHcLTbCI -mRbcD15h5N3qgtBbf0+LOLtKHMDlxUEWKdRvtRvibR5HxDp1VLhTx0HZFGyIdYwDPquD/QkuDPDC -fk5J0XfbMOTLUmOi22xNzCOXDJ9xqBGzlrvo0YAH/L7RR8ncV3MBveaU7cgJ8TtKXNyOCp/gmmaU -ORdqOi26+mbLRDnSPEpJW++DB5kG0dGuCVrRWQ9k8wgqdHMA9n2rDxV5oOHTDLUlHxZrC14aG4t8 -TL34nCNdOd2lYZUt9SCjNZXpz3dktKyjmcrKY4NIaJVj4reHYN8W2sBe2uqUN/Nt2QEHk1ToL+D/ -bOOUvJkm8JuTGXHNNqCpqx1IP50w+4mltzTQNoLO3NNwiPtT5WTXBKsQwHvBvpJZtN1T5KPlx90c -Z8XcHufGus/Wp3k6xkvjznq8ndW9aYSS4VTWsO0TAF5ltFRjW+mHUeLPKxp+zO21nnyPnRFCzNmz -+E45u3hngJZk6qWnAd48Zm0Q+sPQmu0z25bptTGGjlkfJUFW+lAFx/qKxqOF6jbrGUY0QqZ5ggbe -n+XQfy0LxEdzfJ5Rgo/lFYc8lNZCMg5WRC1mgE82ewGulyLizfKyWMsYNtuuJBacLvA4Lj2tbLaj -4L11AhtvGcEn7qlrym3jVVSThJe32ILxA6ziUwUF7q7nEDz0HOIHGRnp0QXLf9BRlH9zFA19aBQz -Is1dzMSlVsS3tSFk0HIf7ItFTgHWuYpnV1aQtqSCYmM/I2Glkxi03Ez+vt7OjDQ2syKmKomfBblh -5/uQWXemBUQvS1d5pqWLnTxXRwmaYCBergjwXrvSauKmVFCirkd9mWshhDnVtXUbQyywGfA7h2oB -3tAAfjkjSr671Vbg6RphZq12lKdNiwheq3W0gOUaZoippTzN1V8JM7UJc+eEFVHjWNKTKSrWY6dV -kG8d5OabBpD+jhFq+q6ST3ZpW4dcajHLqaSDF5oKP6j5qY+MbfyMtf5GnLGzIme1kR6y1VkBXm3m -p6w2MsO3O7iJ88BYh8mI533w4ofzfPJPx5CwZKMX/n29t8jHpcVlHkzRaUcLtf2HC7U9Lj2fMtNU -4D3fAvUB8kKSS82FLTbDvZbqCl5sd0G9rP1lIU4JPnNfzgTbBgRgQzUzYK1ZmLo7XE/eHRZjzN3M -JL0o5yngB1OP5nnc/YWaXtOkgLSuYOZtKeiZVhWnZG+ynHA8ySfuKjmlW4PY0M32ko+7o8S4YzUX -sSPjFTeXpV7pRmTcnq8kRx5KWmsPx4Wkrd7Sb8YOyFfrKAZ8PFfdfjRX3Xw4WyF0TDCL7RPUvMNp -gWBPzyYcz7Jx1rGS0K3BQv/lNrDHWi/000Y/Lq4WGnuvFZburufjP5p7WYWHihqhQyJCrTcTQixd -lOg9aRVurZNdPFVZ6GEZxMVaR3Cxuyo6ZH+SWbynKotXicIeydiht4zd8MB9bU3FGUa2gYC02IL8 -tNZBTtgGPN72EDZso58Ybmwn/dRyi95r2UXv5uoI4YZGtM98C/j9bEPm+8X2PN+jRV7l77X6ib9X -qwfMcnzWQm/ZD6tOxN2bb5IfLVd1HC0xCRtS+E9tXfYrQ1vOK5sSHXuyUC44Xqist47zSrf6yIn/ -zNR3/Z5q6P41U9NkHyuNnm+JfrXUnf7WqkHHHi2wCGt92NCVHk7KRBXlWzel5G4rLv+6MD/pL2x0 -yB8lQf7n0r19QAGvXoCe378OunnpAsj9+p+gb0/vniMmfL2s4OS7b/djY/5Z5DJ+L3MZFg01R9uB -/aJoJH0er8a+H+Mjng+xsE/bsSV3RJDMK2jgnJTYsHPc+Jhz1Zlpf3JTYy5RY4P/IKYF/xH55SUo -xuP1+UZY1pN6RNIjlRDutdnHSNqRsaDGLmKksZPwY2uAmzHfyUtUiMhe3WTki1Zs2f0qSNFlZnLK -BVRE+PlCv6/nODERF/ip4ZeI0d8vZH35fC7i7RtQ0As3UOibxyBwgOe5dnjm/dV2VtKOVAi3KaqY -m2MChKGb9GMawPJ8a1X2ZFV5qISBedaNgdzux5Y8kJBwnv0Y+LNeVOHDhqLMW0Xhfuc9Hz8APb99 -ExT++tl5RkrE1SF6wQtdHfIHoBuU/QU6btdAQ1pUVMhse5mPqjrv/ZaUUryvr+SvDjEzZJzSRwo2 -/PmkAPlBL0D5abiIT00l8TeYqWEX0FFBF2M+vD2PCve/TIoJuESI+P7nQi06bk9NxzonmRjXTDlz -c5wQvyVHR2xJEQGAb/pplnEgc82UIH011W9cQPMdZZd5dOMznwrzIu9CQ79cLAoLPO//0h309t4t -UMjrJ+dpCWH32nFJr6W8nCBjDzJnT8uAuSa5mH0AzyYpPX1bSop3aTnowxkeyaGl5ix0FHtpBAVP -pqswvlOV+O8VeUnXwH5fzkED/M6RYqIuoiK/XyQk/LhMTYq8BIz7QujLx+fSfD5eQsWG3qjKjbu0 -1U9OdGr5JMekiL4l5eav9aF+LHSA/dYliJ8zrUifxR5K+Ewb9tu4qPRlCyLrWjse9wGolVuC3ORL -tNTYK1Feb/9wu/oX6CFw3Lt2CfTy7k1QXqDXn6P8wpBfC4KGf62xha5JbOZyX5aPvjn+w/Eig7pn -EFVY1ACXjJATbBP4+D0dvciu5sC3pcz8tUEKRFkNDxcVJz5jpUVdr8yNv4qJDryZF/DpmrAg2m2U -kfhAyct4ZuzDpP5t5NX8n004sCzjgIG48baVCr0jQuRdohfkXCiIigSFf/IEvXG7DXp66ybo3YP7 -oBcPboOuXPoT9OTGdVCox0tQbpDPuWZY2i2dKPvpkZ6S75yhQw1D2KDZQXbiRCv/51AF+UM9Jvca -vyj9EjMn9QI0KuRcmOcLoFafgpK9PEG5fr6goDfPQB73boCiP74C+b57Arp26SIo4h1Qy4Hvz4nz -o67ONqI+6+pK34xxih5NVqDfLbaxoyZqOQHtFPJTVgH0CiI55Vz2jx+gZN9vIP+XL0Evbl0HfX34 -EBT24inoi/s90J1rf4H+AIFAt/+6CIz7GsjX3Q0ErOMfcibk6VI79ptxgBFvHBGjtW28uNFK2qdm -LPJxCw7l1oCC3aRnplzID/Y/F//pMyjT5wsoz9cHFP/xA8jrkRvoFTAf92/eBP35xx+gF7evn80F -iJcX/ae2FvFpU4GK3NGhEpYHij7PNgIaoKYXmtR83HQfM3FETPCsRxffIKcnXID//HEOHhoAQoYH -giI9noG8H98DfXR7ALp96Qro1l8XQK/uXgM9Aa4n9L37xVpYxL3pxsL35jFU+NpIsa9ZhotaaYd/ -XurAfR8VIV53UUrvVsPA19DxcRdKwoNB2X7eoNiPb0FebndBb+/cBnncvQ16dfsW6M6Vq6BLF87/ -l+e83YF5//zoD5Uw3/9Qx2cez4kqdqf45MMZPg3IH2U2BTlttZ8QoanHf25EQe6joyP/xEZGn8/0 -8QV53b8Pen/3Dijo2TNQxJs3wLzfBj27eQvk8eAh6N7Vq6AL5/8APQE+L/mzF4iRGXVHV4v/tj4k -hJhkrWKHplpkmxBg1kaYaap6+Lt+DtS9Ep5+i5AaAcxJ6Lmfnh6gDw/vgb4+cQcFv3gBegyc78bF -i6BnwGc8v/sAdO3iXyDPe/dB8J/Bf0rZBS/1NXmv1vtggYezdMy/N3gVR8tCsVHOylsZ4WQbuomh -E9XwtxJu2dsBBuJDDTTnNibm5x8JX7zPvQc+4ylQEyEA/7+7dwd0CVjLO0B9J3p7gkojQi/gk8Ou -z3fCwnYUpZFLY3xYfwX2dTOt9C4fWXCFmg+5iE3PuwCJSfoj4IP3uQc3b4PuAnP7/O590NvHz0A/ -P36/gE/NulWPgr+YEBGDltqRX51aGtih46GNo+XQeUllsbqrJmeopjygCtAPQmbceWRC9Lmy2Ohz -6cEBIO9nj0GfgSPM8z3o25sXwLr9BczJfVDM54/nfnp5/EFKCrnTjklxH+UUvF/up8TPdBIC1dV4 -b20N/Zu2gR3UyYI9bSAgH1ZhCffReXmXgz95gYI8PoD8Xr8Fvbh7D3QPuE4PgDPfP7gHcr9zB3T9 -z8sg92u3QIHP34LKwhKuNsJy383UYkKNvbQ4Yx87ydArzJVW0f26GEj3itLsy5WwwmuVqLLruMyM -ixGfvEGv3R6BXgJ19sntPijw5RvQm/vuoEc374CeAuvlfs8N4A430E/vDyB6VuxFpQDx2jLBKrCo -GeCVAXTwYnvhxx0lJd0o4+ZP9rDihmtYX6uwOLfChJg/fnh7gL69fAqK9/IGfXj8GJjjy6Abf/4J -en3PHXT3+i3Qu4fuoGgfv/Mxnz5fqAAnPFhqw0XYFLTcTQn+5/oAPnSxDfvd0EoOHGBjXnQxcc9E -MMhNcET4ueTv30AJPj6gaO9PoA/uj0HXL1wEPbpyBZiPh6AvLz1Ad67fAPjiJijC4+25rJCvNyWc -bC+nilFyYOCz9hf4nL1ZLsGpY8E2RknxE7Wlr5V1hM9VyOL7kLCQC2lfvoKSvD4CWHYD3QWwfPev -SwAOHwPz/gB09+p10ENg3O8fPQU9u/8I5OH+HJQXEvonPjn63mQtyX+1j5duljUJ7epq8VI3JXqu -ixYx1Un60UotfoRIirgQ+vE16ONjN5Dv85cgd2B+716+CuDiFug1gMWbl6/89/yfgTX0evIK5PH4 -Kagg/Mf5KkjiH92I+Cub/ZiY38uCqr1ZJsY2JaBuKCrIJm1N9apciB7mo18JoLmXkPHRf8R6fTgX -8/ETMDc+IK+nz0BXL/4JenztOvC5j0DvnjwGvQTWMunL93PUrPRbYkTG2/mOsmB9Q5b71CAnRVJN -8RoRM31HqoXh3WSORxuW8riDxHkrRjCeo1NKbxRF5l5FJ0NvU3Nht/tZdbGK6p6yue526uZoA2tb -UUF0AJnPMV0t3pmsqVydqMCq+nnJo23MoIEqmncXm/lJjEC6V8OxjxtwPA96LsG9OA== - - - tvg2JCb3GiE98yY+KeEmIyXFvQON8tHWstKNA8T41e7ST5uDuAiLpoK5rRIzjKPVxAVJA0U/UAsX -IZNv1SDynkhrxHHt4ppILpLymphbeq8sIecyJDzzop+nF+jtw9tALT8EPb3zCJToE3yRkgp+3IrC -++rrhemLnfTobRm3wKIQYc1jIvT8AA8sQqbcLYfEXZHxsB9kQubXNi7bs4rMeEkrwjxICo6/8PXN -B9ALgDvdbwH89tIL9MP76/mIr0Hn08JTz0MS8y9xYcUvhrhI78U2cohDU0GzjHEhzgku6lAnrDqa -razZnRILzdpqnm6opnigriFeSMQ/LczMvBLi6/tHuKcPKOJLGMjzuSfo9tVboJgvIReR2TA3WinO -o5vD/DbKZwYv99YwdpT1tZujPMjZYRkvh++Ml5etj4hgc4N1OE27IF5SRfWpo6Of4YpK7uVFJV1M -CY46H/zJH8D4M6B274JuXb4BevfUC5QaGv8HJgXq1k4pj1sZqmLtqFhlO0pa9t6MgHu4VD96tCxu -PVisbNzUcJC6ftJPdS8rtotDedVEIL4ohxTdI2dl38ZkZNwsTUm9FfY14C+/dx9AP339QLEBP84n -BP+8GPHN/xwkLe0yA17sPl5HCTUOlCOs8mqmVVFBsii5xZsjrOypZpS3oZsetzpWTVa2lSdW46Fu -mLSYy/H+vpeyIkL/QmYk3EiLCLr86dVz0JfXnhey43PvJcYl3syMS7hIAxffFiDRb7q4BF9tPeqb -gp/1YLGzNPh4QVR3tMQTAP4w16YVEC366so1VRVD0coMqSYh72Nzsv/6+dn3XITXJ1BuWBQoPyrh -QrR/wMVPrx6BkoJ9z6NzUy5X4WAvB3i08Pl+EdKkKEft6TgYxwxXuK1uatoCDMzGWB19dbSWsNjD -iJpqJvhKBIh3nSToy5W2FsTGQAd3c7iRah2vpttVYrZFKcSa5DyoY1LMc8y2qu2GqgbLJA+9reSW -mjVCwtpEOWJVVY5YGqvCLQzWI/Tt7MjpDl7C8miHaFXSW2kc6SxfHGhArvTVwbb66LGHEzzEIYAv -p76CZVMxwFY5B+Ycq6tyKrtGLJq62g2lELelErM2FZXElW52orFblLPUW1es7W4s0g31CVQ9PRRp -XWPiiKgutJPB8KwuhdxqRqGej1dUpq0NNRAdqoaqXVVD3a66WrA3ycPvz/AIB9NC9u5kBWd1gJk6 -30H+uTbELdgarUQsDVQWqturU1WdjfkTbU2ZsrrmGEVtbdSYiOc/QMO/1DTVZsgb65J7+DyfXnFl -5Hh/fenaRBVtR8VH70xwoNsyRvpqJ+LLjpSY/s9SnXR/ikdZkWAiVuWERN0QN7W/nhMw1Fjxc7il -JVva2pxdR8a6t3HqAvoq22O6OILP2mZ26FJ/bbFxSJBnVRJS7TpGictQUemYqWm0T9e326Ybe/fn -atpPgQx4ME2HmscpKUYZIUrZXPZR2UYLH2hgxWCy0q6xYbDHXeKG+BZ+uf9AtSiwpbz8Q0O5+NNY -E+fHirRZuDPZo95fqOvdNYhr95capAfLtYO7hsq6s3sT9ik2YlvNyFuWUGL1gP4pm8t/qht5YXP9 -VUUL0q6q6YHqEm0XNXxqgJ0y1sQM6gN8cJcA66HqbEeNtVbE6Qb4mSvjFVjXtJDzrwWh6F/z5ZWH -OhpqcwQTaRwiRmxKeHlmhZgKrCltUcbONnQRAtYHKTHrMkC7qrKeDlAib4xwEu/N9XKypoYlzeNd -LRB5myhW2ysuXJY2MswTDZU2jYC0MYiK1lTG3t0cgnw9mucJTteaDbuzDLhNTctz6AXU9Yly+IK8 -Aj7RU5E+1iqKHW+uSVS0cMJUfXVl6pEOrn60Eb8gpScuDpOj5geIoYt96O9OvZBuVvAxS13IbyYJ -6sffWzWyvZk25f5sXadDV11hVldQrYA32B4lxSlri7/UFYfc3FfwsLuT5VSTjJRikeOiTaPYn3YV -gNUJWvbuJAe1bxBXWzXcMpcGwN10q/xwtkV2PFvXfrggrjFruWjTBDVzdQgVtCHFRa/J8FmAVyg6 -na0Q7k1WCXbV9UDtsqGHU+S8g2lqsWmCkGxVs4p3J+ubbGM1ApdKSDKr+ZiNcT7GrKhiuyYr2XYZ -JX1nkByz2UeMWO2nxmzJmso3gcM4UoXaGq3Bb0iE0LU+eoJdzi870IpYNsXZHmIVtaezLYrjmfoe -l5aNdulYpbYJFsQi5xVvS3gFe5MVzD1dJdeu4eNduurqnYlaoU1dKzIpuSVrUmLUupQQZR6npplG -SYk7EzzYXC8vdamzEmyf6BnfW64ZcEwzMECtZtjVVIhDiY7eGgR7OlWYpF+LIrFjkk/cUQmou7PV -Lfa5up41XX3rxmRL97qmvXtdVcteGKRGLQ4LwUZ5NWZbxYEcGJjY41kh99Qg4Py3R+YWr+KsD6Jd -S8136LkE10JlDcD5Z/3QSWf9iI711KJTAxPt0jKLzHI2WFmN/M6Dxr4fECLzjOrOYcN4RdmSip6z -qGBCjIpyxP7MWd/q+qHDeXGjTUcAH8xXtB4ttc4cLlZ37GgYhYDn4hzOAb5rCljbSTbcOSkgbI3S -Mla64b42FQu+O13butqHDTO0gN+uDiB+zAzgoowTTLRJK2Bu6yrZvYKMN4vDRBSgSSOHc+KmQw0q -bl8BC7XLYSGbw8hQh4KWfajlofbVXPjJvIC7N8MhbEtK/Lb6871X2lOfzNSlvZngRbgZO3MC9qcr -aw3DfKa8rviHScUiHi43qY9mKsW7ehbGKCkNkgnib01UxDy2KRFZv9Yqu+3zNV3jjeAgi5IEP+s1 -eTwnFB3M8OkAz0DXpfDQmZacjws9Bd7OhXKec7l2YBsYh2OaR9qfE/JdMxz0/iytaHeSmOmcICRt -D5f6bQwWf/69Jmo+0Df1uVQd/S51a49T19S1O8kqcSopqWYpKXahqcTbqiRmTHcWf5tqKvE0Schx -O2OEONckrcClJec4lPjEfR0Ttqel5R4BdXc016I6mm2SnmHgeEHAtUxSwSYlMcEkJ8RbJyg56qZs -z3FBzKdfC1XtB7MNvS6NmGWTkxLNkmJfi7TM/+y9druGi1yQMIqGy/N8t4ewmYczte17usZOl7ah -2a7mYZbas95udEO8tgeRgdsyaoayGhOnq8Vm2RQVdABDrGMDn362p9XRNCFnZ7QoaKE9+pFLS4Ac -zlQ3WSeF9KlOZIBNw0Hv6SrK93XVtQfaCtaumlmyOYyO3ZbDw4/mhML9qUrBmcZYlZxSm5JR6FAx -S/b0wBzOcPB2DQnwgyh/yzAj60Df0Lk3TUdtSWH+64PIIACPKcd6YoFrAh73y0DH/loQVQDngDm1 -YuHJYpPiaLletjNb026fqWu36atrTSo6dGeCkmnXcGB70+Wko3k29n+3KrvPetweTDNRh7MEyK9F -bP7RLLnAriIm7+tokKOFcrZDzSzbO9sHbE1Y/78r5fx/L7EpuxpK9koX4puhEe5jlbPhBzNVHbvz -VW3bWnqBa0lYe2CsHf1tFHf9z1q5+NcSl783SytbleZ57RmIRYcGccPRnLj+wFAhPlmp7gNqi3cA -rOfJFAvhUpMzNofAXpv9ue8OphjIdQkNstKF+mEbJacfzLCweyvl5Ufr4u7jlcqmHT29SNGY4rE8 -jC3bW6jp2hyng+3jiMjTaUrJqeGsZzML41KiEzZ6swO2BwqDD/S04h0Fs2i2Mfepvir57kpHzptd -LS7FMYFOP5ml44/mq1rnhjDpI8Jo9x0VHnVqrBlxKMkZtgl80oYcm7QwiIyxaSllR4v8mpP1Wrl5 -WlzdzU52N49hC/9e5PPtE6T0fQ01x6nCxW9Li77Otya/MsmLIk9WufwDQN9sWk7Z/lxVy958XbdV -xyfsTJDSbGNlgY6xUj+TpNDHIkdE/WtD1OpQcZFLnezczQ5m3rGutvnUUM442wfQIcOEmvrR/qs9 -xV4aUeY9Q33xB/MII9UyTIi0yvHRmwNlX7cHin1dY5ioX4AO/G2gFv3bWC46XRBVH0yxUb+Btftn -UwBwFTnTqSFn7U7SIZtSTMx6X0nE34vi5sPZmkbHhADjHKNlmXrLvrikuJjTyXKCQynEaJqJ4e2E -VLetHkT07xlh+Z6Gh7YpOEVArUJ25IRsh5oO39UJ6NsTNcxKRMqjprIEnx05n2NVCbB2DTHVrkZH -OdSYWIu8LNQshQRaJ4jp63J65kIPIWxHIWAezdcNnPVptyq5CNsYJW1HCg9a6857bxrJ83ZMEjOm -Wos+L3Ugwg8na1vOPOCeVki2q1iFdg093zyGiXCo8Eln+9NuAP+mrC/wALCdcTTNFxwvVtT/XuHx -jg1E8KmBVHgySys1dpd8cirZmF8LdQN2LRe7PcYtcujFQptWXL6j5uKA+qw/neOzz3TUpsIlnO1P -cLZnt11NStvVE7MP9bSS09nq5uMpYNxabPLGQNHX2cZCT8sIIe5klkM42wvmeIZScDRNKz67z2eR -kzOO58rpfy8JRGYFPNqiwqYdGRs0gJ9SOCdpsO1R8BfLeEnYgYFcdLxEJZ2s8kRmJROyMUrNOJqv -aHToORjgWihnz10cT/GpBwAH7uuwqYdT2PT9KVLuICPJTc7J9XacPRcgJ6buKJEJOxp8ulWDT7FP -4hMPZ2klRwsVDUDd9Vo0AtquXsA4nePRT+dopcdT+MzVzrSng+RPl7SiqFfHUzTY7iSfvDVMTnRM -nO11QycczmHSzDJ4iLEfGbzQiwvdGEWHb8kQEdYJct7hHJe0p6cW7s1UVO/ONkoPl6u6DldFDScr -wM8FUY1DzyOu9ONCXRpq/tmeqKZRYuzRlJCzrxey92e45MO5yvZfxurR3+uCut0perFLRy8+WmqZ -dc3V922reAiril7wbyOD9r9GGul/jUzG/60Jm/9vjV9nmWAharARbj3IyKd/a0XVvwH/vDdWFmwb -zHu33pzhvlib9XijrcjbPIKLGhBlvxFk+d3eldDzTtQVtN/6cuLpFAHgU3SKXVkUYJFkvPmXgQE/ -41unnoH6e7W8at/AQO4o8UkWJSHRqSOkHOiI2XsqfM72MPanaVhYst3LynGMUBP35LQ0uwQfaerD -/3DIgN+l+BhzP/TTWmfWM4sUHuxQ0nM2+km5Lhmr2CSjpK1JsJFr/cRI2yivYHecW7KrZaN2lPTc -M+ydzDYO/AJ8zdFMOZAVKenmMVLSpgwXaRmnA7VcKT6Y5XMBz8Fw6MSVB9NV1adTNOipHpt4oCkJ -ssrhwdtSVMi2BBlknWBADO34H3aViLE/XV27p2cjXABfu87271Likxf7MUG16IhHxj4M+GSuuvXA -UFXnmqLkOzSoBED/o+xKZIQL0JY9YJ1WZZwSUWn4XbW4MOJovr5/d7aqzgZ4J8fZnipyVLhlDBnp -mmIDOY+WtjmIDd2R0fNPZms7T4GsdzglFuxpeVingpC22Q8PcE0wCy1ScuIAKfH2eg== - - - R1nE/6zWDP17WzwM+DScE/DigNZlGgcQQQudRT4Hcyz87rK4eUvFLjVLKWn/sypu/7dR3P6fdVHL -/2wIWg5mcLnrEtjXxd4yn+0RUuzWCD78YJKL/jUrrjqcFDIPdDysSwOsnxwZNl2b9miEFHl7c4Cc -A3ANbrQ867VGnPzaqaUU/1rkcf9Z5VeeLpVznXoudmucVeSarm45WqjtsY6Tc5fa89+stoNfH6iB -nDZPx/w9RSuzDsBD5qqTHipYcXfXe2HxJ3N0rEuNiDSPwH8AXJjk0gtZTp2Itj/PFR7MUcln+5P8 -B+DdQwB/B7MCwa8lGmp3lk2wT9IB3mHB9w1c8q+Vct7vRR7rQE8p6SSHPjB0IbJ/rzQqfy+dcTcD -uSmH+DunkYmuKXTKyRyx6F+rFe170zwmkEM4+/ONCpe+Srw7yUXs61hlR3pGiU0CD7Kp+cSpZtjX -5WZM5O9JsfBwgl28L6ek70oJ8ZvtRR4OoBadMmr6Wj8ypI0UeaM8yeuOE9Bb+zijYGsAGbg2UOC5 -MgD2XOgCeLiv0Pc/c0LBhoII7hfEPzUOlCb+Y6zuP1nglwO4hboAjKwNFn2VscNunT0PpG/ChpSD -A913+tBx9mFK3FJDyfv5mtynhqrsJ7OV6Q/nKpPv7AwUf7XLqJnaVkR4foTn1V5U/Du7nFlsm+Dh -d7Uc5L6WDrGNISJXezLfW2QlQQfTbIpTRUMC3MXe1dGgTjU+aX8SHXukR8XuauCR64Ngv7VuqN+e -mkvanWrosWpYgG/BJ51MkrIP1NQip5qQ4dKS0qwKfMz2CC58uhH8cn0Yl6hvLU1Y6YL676kZBRYp -JszUX/rZCvi9w3FS8omOXnI0xTjz17wTg5DzG8gKZ31PrGOYaECHfU1A9t4YJ6caWoBak7EIFiUT -tz1OBdsBX3s0x6O6tLRCm5KY5VLTSxzjtCy7jJAA6HXs7gSz9OyZ0IPpSuGBobbtYL6yakdJTrbI -SUkbPQg/HSf+1t4INvXXdEXVPsBJLh0DZleySo+BLLOv4WGPdGy0VYlNNStwGTY1HXJiqKz537Oe -ucuVzb8XyzmHBlrJrg4euaOABW6PwL5aZPDgHRnqh12Oj3ONU7Jso4RYxwQtZx+4Noeakm+WYuK2 -++ERe1M86pKUCiZlf7+x1I3P+r1SJzteqGza1TGRdjU+2aKgpAF8BAH8WxNQf4xtGTFpS0pON8no -BWZg7IZG8BdDVc47cwfi+1pzwSfLECrWPk7JWe1FBNhVpIJfK8K601UO+8BAhLh02KQdVWGwRZnv -f7pAKPxnlU21aWl5813F3872j9ibr6jZB7z96Yq49fdaZevhHKV0V4eIWe8v+jTXlvd+b5rLO5gR -VZ7M8ZjHcyyaQ09AnK6wub9X6EQgBxeZJIiw5Q6ot3mcnL40SM6YaeFl2pWtzXva2orDKQH1SEMH -OzWMIquMFOeUMc56HWB3BnA/HRJy6pGCVbjRBv1g7oX6rLSDP6hEsXc1gujrc1XZnzZHyGnTLbAv -Ky1wH5OUBjHLOaXWMR7iEMDbP9PiCpOcmK2oSn273oNKOQX00AnUqk11xguA5xlBR2kq0z0XmqBf -dY0lXtycrw/Mnfhkcw81ZkqQ/3iSl3Zbw0m9M1uZDWhY9hOHDPfTLKFn9pXnfQj/7Hael/L90a6y -nGhRMuCbUmSsWVYavNyd9nKuJd7dNgYLNQ6VhmnFKa93JwhF/wC+Z1+PTnSMQfzMA5mexo6YR3px -yI21ttz3+wpG0c44D77ciwk8e475l56HP9EJWQ4lNcckwYZuD6IDgVqJ3ewr/ayoyvUkZ/hcHSSF -ux0AGXxzCP9zrR3yYasz96N9GOqz3Z/zca031fN4ilS2r2WhbTJM/AFQ984JKsQ0ioo9WCAWH6/Q -8YeAdjn1TPRMR7GPcRATfzjLI54C+cKspOWuDGBDraP46B0JMnizryRYI0p5Y6jNeutSMPNdgGfZ -n6moOZgTCYFaL9gcxASvNEFeLVal3HcNwcMtA7DI7cGi7ydzAiDPVlU4VUyksas4xDJUFr7aXeC5 -2JX/3qE621equvt0Xtx8dNaXarGi9mSBTTrb/9c6jgy1ytHhDgUi7ECLS3AAOmodhn2zj6CCHGMs -8PF/965nlu2qCWnbg4igtX5M+Hw3OriDnua9KWES9wy17XYdF78BjN8KZIVdHRtxMldZdzxf2705 -io/bGCWlunSVlc7pmvoNOQusry8NnK8v+W6XEGM3uqFfrFJ4FMAnscb+Mr+dMXzK0RyDdDiHBx/M -YFL3dGc9x856HJNgf69Q0a5JfAbgv0Jm2iAfTDJsmnOKg3Fo2WUHs+Ws05WKepsGl+jSYpJs49gE -p5qce2DgC4zDmMg9HQt/utyiP1mt6jlYYJFsGmySSYaL2hxER2z0o8Idahp4vgv+3dBGTXLpOsZc -k3W1Lm05Zk9Nzz+c4uL3tZRMhwITbezK+6AXxd1f6yr5stJc/NnSgwgydcG/bncAeGgCe5r7i/3s -amJaT03GB2T6h78GsQkvTudq2p0aAdGu4sJdgD5tSVDh6/2l37eGYN+O9AKebUrEBTgo82iahfu1 -xBcBf0swSyjJK60l3gsNeS/m6/Lfm4e5ecudjBgND/zY0g9k/H5ijLkPHbjRBfM2NOY9V1WkP5Cy -k260IoL/NHaQC3ekYuJyHyIQWHsPsxQR7pogF7mUgGYo6LmrnSU+S3VgzyM1HX+2p5mxP+fdpDD6 -uoYbf2OlMfe9fRQRdwzo/YmWBjFJsT9nGiGvtvvRwXYpKdEqISdsD1HiNnoxAZvdaD/L2f26Vtz3 -uRrMNzkz33Ouuvjb9igfoRTlPZVTIy9PCWJuO0dLv9tGSvytEmjQr2kGtr88xYOY5HFdwc8NP53l -821yaODJbGHE4WxR5EJ30vu5lkj3lc7c11Y5KXNrhJBo7AHGr+ezXVPVLYfAXK11FnqOMKOvVxd+ -Oa8TJT1zjFPy61FRr9oJkR/29eXijWFy8owY8mJGkHlvRpByW04PudaP8/xzpib8KVDHqG0pC7zZ -S4y2DlHADiUb5xwnpe4p0TF/G+iIk1kW9nBawDqZFfB+LwD8q2eUHs1Qio5nqMWHWnLmIZCz7EMl -fsa69Mfb7ZnPj1TYBLucV2rswYWbhrCR9jFC3I4Mn7A9SPi52YPyn67KfrfSVhKyM8FGnPG5c4pH -Op7jsw50HOTJtJDt0HJRu5NM+MmcqGpvWly5peDDbPq6Bru2gm0bZ+a6FKTktS7Ip9X2XE+nHBm+ -q0BHmIYKvujFUW7zzUnPf80ziL+XxW37OlyWXQEPc2mwiWYZCvhJynYBudGuRMRsDqPCAN1KtSjO -8pSgfH+ajT2aZqMBn1TqUuESd8ZRMav9pd8Opnnc48XW6b0Fce3BUkXjwWJF654B0NIZFtYyhokB -fEOiVYmOsqpIma5pIc8OZOPdGZHwaKGywaXh0+xjxDiLBBNmqMt7e/auyzAv/iE5zePP2XpIlGWY -mGCoTnNfacl+bxoo+a4QxT8YFybcmqvNenKqZuGO5ypqrQpyyg6gr2cauCVHRlrHcMlnmPi9yOev -DFLipuuK31lllLyThXLmlpQUu9GD/LbWUey1WJvzZrML+tk4iAsdLM98wkj68Me+kofdGsT9XGrO -fTZdnfXYUJf/alqc+XimKtN9ta3gA5B/YWuDhOjlLhSAQWE54EUEtnFynmUUHr7SkfNqEBtyaZz6 -88megli8Ny3iWeWM7EM1s/R0qpz6C/AsAJYKrJJSv6WmpMeD5MBLSx0wn+WOMl9DLfStbZhTcKip -r7ePsSGr7civw4Tkq+zkryBR5tc/5ZQEN3MfKVrZhI9oREZfX20pjfj3rICzC2TkudoCr5nq7E87 -Q/nB8005r4Zp2c8XWrEpxzN0+EJTkttaT+ZHpwoRuy0tDjIPl4QeqlnIAyATa2ry3in46W8Op8r5 -f69U9x7PcvBbA+jAzT5UoHkQG/1LxybsqVjoEVryUw0v55tzRIhbakX5j9PT7knxybeUjJxHOkHm -k6WGXK+tLlTSxgg9J8P/6XlK0rdH23103NFMZdVGX9Y7Q2X0rfmqhLvmEYjPrwUOfX+6nNfDSfVt -RAbc/79tUcfhDLnEOgz9slyV/nCSFnNNTYu8ut6Y+eJURcmda0fE5QQ8/0NUFPQW8CuCvSkmYr27 -yHtKFHenudj7ipL3w+1wmo7ZMzQOLw8zckxyQuY/C5U1v2cF3H/m6GWOsdIQ2yj0v98TAX4CwEgF -2zTOKdiR09P3Nazi9Y7iLzOi5EeTnLhbEoz/xQGk74VxVribSVqS8p9tQcswN+btUmd+yMkcm3QK -4Pp0rpx/YgDOMwYLU/PCbyy2ZHoczDBRu1M8ws4EE7IpIyc4J9mIwxku5azn+r/nSQUngJc4msSm -uSYwWU49ufTEWDWwvySos+qpBUBuhlkBf21R4FJ2pwh5J4scskPPQe6omJBdfWXF+jAHfTwj4p/t -h3eo4aHso+w8i4QUu9IO9dCJ8l9YJXSIeQgbNV2R/Gi+OvnJWS8EJT/6sRHwGA4ZMuJ4ls8zKbnw -tUFq7Nmz34c6LuZ0jo74e5mO/XuFQT1ZwOVvjRR9No9go/Z1HNyqFJVmaD7b51yAcciFuEMNH++Q -ExIALDwbZ8RcHyfHXN6SUVIlvMzXakHOO6eEXWiTkOKWmwrfr7cXeduliNDp2oznGmHi/ZU26Jdf -MxVVFhn653xL3rulzkKfxbYin9Xm4m82wG8dTRKzTTJivGmYnvHPfHX7v5fELXs6Zsl8G/j1clv2 -85XmzGeAX/Kwj1EztodJ8TPV0FdbXYSIvQl2iWkY/WO9B/l9Qgh5WQeNvCLI8b/Sg459YOmnJksE -kI/k1C+XtOL8HyeTjGJDQ6p7Y+nnP2hxz0Ay7JcrO325n5wyUs4vIBOYlejU6cZ0z5MZHuPXkqjK -pQE8uo5WcHzWz1lJytrsh3461LGx/yxXNh0beNRdHSV3b5JHPNBQ83fH8elb3aVBxnaw11xN/gtj -BzpIwsr/LAIHPzJ2IUJ2Rhh5OyNCtGuUFO+S4BK2ujBJ2oo8z4Yi/7/UwtyQfaWAv6tkQCeFUbdn -azLeb/aUBP2ep2GOZ3gUh4YNVzcVBEi48e/OPJdTQ8m3SbHRlgFMIuCvosz9gI/pKvYyVBZ6jlIS -H5Ynf7owhI98/59lTsWempy12Vv00TQI9bPLsCkHOnTqf7bY3MN5wNNIMFGrA5j0fy3Xjx7r2RTL -YN7njZ7kJ+YhsPf2UMHnEwOX7dIJ6BYZI9Ol4iGcSlZhBzzqsjDd71xXWcQlGTXy5lprtveJlgr5 -Z0lQ+WuJw2FlvD6vEiUE/F5gkvd0+Nz1fujXg2l8pk2BiJ1tyAb8LaXkH8A/WVUC6mRDmZdRQk5y -zTeMHq42T/+zyuPvjcGCNtvS3I2tae5LLWkvXTp46v40uWhjpDTAOU0qOjTWDP9e/w== - - - b7/kirPe4EcGFsapoxceAnx1oOfhRpi5L0/mhfyT6XLiyRSf7FJwoDtSXISpB/xup7fE50jDglmG -8RHbXZhA5ygxaVeJTwA8hY9DCv1qlwMeVk3NWx9jZG+PsfJ3dTycY5KUtTeDTnJNlYSeHUez8LhD -HTLldI5FAPwiTVGf6akWFfw4nmoZPgG86QnAsztSxI/pqvRHWl7ivSkh5N1MDymWDfl2pQMd9XJ3 -tBw931jwYZAQfEVKCbo+JY6/L2f/vD5Gj7yx1VUc9NsgFK0PwP22R/BJ1gkO0q7ko/ZVlKx9VVmE -ZRT8bbY+5alpABv593xV0685kcg+AXixXri/VYpLcsmJaQ454FOV+ETzEDrkv33ChkmxZ+8srHbD -Ppuk5BTjED11QlDgPsFOv6tipT/Q8sGePYTY+xJawkNjDzx0uQPmrxWlPVRwU19KyMnv1xoh/r8B -D/D/OXrr90TP9H14t93adrbtSEc67VjHXTOZTJKZibsbcSQEd3eLuzsxPGggEAjE8ABxmZm2u/s9 -Pu8f8j7sDxwBjgA3931d53WePJd8NjNRh4ssrG0MHGPoKHj02c4TfHbymwMArngmqh97pupe+KYB -Hi6HxH1ycLl7ZiYmqCIW7ehpkOMlYdOWHPnB1V91W81MP2USZ51Z7q666xzDpzRBsy5BEu5+7RyE -pgK2TgypKTX+mdpnBkn2r211z3/gFdz7Sk3LAPgfsWxXwyNb2qBv1vrqXuxp6dBjMxv3HxdP/NnG -puzqSeWRBVz2np4Miui4JM8MJnNbRas/AbRktLdrSAZ5tdINutFT//5bQsrNvwvzbn+5LMl98OcS -HeOfxaTtaoglB3pa7bGJi9814IsjxsY8rwzgXApo3PESh/XZ3jK0q6XBNkZK74VV0NRjMx0FfFY1 -8BpYWEEGbYzC34Tk1GhNDWyaVnwZgLHblvbaZ+sDlbcjczWx2/PQ5K0ZSOr6YOVLDTv+hx0lrDT6 -u/DmWNXDzdGGROAzSNG5Q4eLFMhfzv/NzWmPLNCgpo7K60E1Exu29S3uOXqMB8C+bssaAXsGPQxK -wQm7GkLl/3lpjM9WfNWurjHrxMVpPlxrlR3bGbiTZYCLWumNAI8r2NETS4+A2BRRESvNTaV3PBpy -hb4b8tQ/T647Mok5/hls6mpP0a/ekdLf/RPVT5wdhVcCUnTG7iIbvQFoHI8UFrMtR2cC+1Qa0dFq -gecx+0sc4v9+u7bQkbtAjNsx07E7ZiA2AvrwT2fTCODnQ8DzZOc4LHZfTyV8XG4ZOl4SSz4CfrO3 -QC7bmsUke0aRb9aGcPHWPmysUlhyzT4E+eCeJeXM0XN+mMZF6/2Lrju7UO88E9TyrRly9d4CpSY6 -J2ZNior3AngZWeTTw2pKZXC+7P5Kf+rPi60ffpIz33y3q8YXHy7xgPiOL3SNNMQcA3HzAMCyfR0X -fWTEFQZm6564J+oehuYQCb4ZfLKcB7qsEJZf35yj17tVfISxHXxnHJP0z66a2C/ba+K/pOfc/fsC -N+uKB8AIYt2rc7DUBz9uDOOzt5XM2gM1sTAyB42z9+TfVnDe/SKlxf+wZ2zI/e+6qDc6v2JvAZO3 -OVL32D0Ofravx5d9dLCZRyscdlQ7hzTYPICzwPeMTIBvNbzcGIW9WB+Fv9uS4wrCamLR5iw+zdha -e3sek/Hj1jQ889BCgRk6c6/qWpNPW3pKbo8Skn8bQX34BYgF6YDGJFiGENnID3f/udZfFfufdTbv -yIKvDsrA8b450JOICuAAizR4dKZ5QMWoBTDh6ZacVL5vEDJ8c6gk52D1LXt31Q05o+C8qDT2VB8s -/qJ/HJLqHAPHsipjz3vnCbX7Bnrj+lh9jL2/+patr+KaY7Dkt7Cq7tXnZR533yzkemT0sh0do+Fk -Wdj6p0vYdmCigK3tpb/rOUXnlztAN4LzuMwtFbt+qRf5YlfHpwFnQl/rB93rqn743RDk+bdKUuI3 -BnbmT5G5xoz/5+Z1+7SNYHHVo3/5xnHFn60tfZ+tbOqnJWzFiQVR4Jspe2btzrhs68k4/3lF1Llj -65oLasVCv4xa/tEm6Tsxsymflli4Qz21dlcFS3aPFT8MztW8/cMl6AiZJK1+JRd9YBU1HTnY1D0d -sWwb0Ob+qYa4MXTSeXHho++2jALG5jwpN6Kn1ke0jGidTvwmYEuekfon7sGyG+6+wuuROVRe9BqO -oavm5uYUrXRLxUF65rDp3jlsmmcWleiTIRJDOkzWjoWJ3DO3Dx0sdc0fWNvHT+xt4x/tAtFnB18A -/BXsA+s8WAa4pJ5YHNDSa8MGEds9g43qkzf2Tsh9R0f9LZOw8KKrt+qVT4rIsA/Cniz3kN66xyXg -jVExeHOKU70xTcp0A3xwbaLhjXMC9PDATK6OADFwQ04HbamYtbtaMTuiYzd65fis8AImE8AD+J6Z -VOnXoNJ989j86KzVHSMXv63joHYNgH8bWajorK4TG6XBL0Mk2fpqbq6OouJ8ChZsU86FLPfSkhwd -rBSbCPNIQ624ME/OPaOVlN7RdVTcHyCk/6DiVr8MzFBLHf31z5Za8q8EJupiV3rL7tva8676Jkvv -H9uQeftmfNmGFPXePYvPOLIIWIcWNv5kmUM/srHIu4BeDiygc+xDFXdCmobULS2lMjTPhh5o+6RH -pj4F8F1QaxPgp6vjZTcsHVkXR+EvzqyPwONXJrApvaikn1Z7ap8cLXLJ+0YueUfPBHCQAgmoELmO -kfpnelHZ1b/s0RmcHKFPDcTWKD82c+ifra1Dn4DbAfAa3ywmdX0M/DSkiuZ+CUiWblSCT0Yu3QP0 -976eCTtQsht255mQwCQuSynM+mWclPbL9gIbuzaOzVULCy4FFJhsAA/Rh3YO48TJYZ0A+LdnFvHc -c9SKiE7ACcpZ1QdGam1IjcxcG6l96hmFv90chT2P9u7yjTWkzDNzbmxMIPPWJvGgWVbxXTW7+Kpv -HJ68r0BnHi3Q6/ZUjMb18dr0lYGC586+/CvHFjrp0MLnbYxD4tbHSm9uTBTdXu4quuWV1sX96SQ0 -AP7UuW9ls8e5xc/7iPn3P660TR/bRC2HBgYsIG1842gruWoQpF/eHK9889cav9M2An+vFEMSI4ut -w8drrfNhNa1ybRTxBtCpz9fGMRl7Bjpid5nL3I/2ezdTwd5ZbKpPikvxz5HzXdE+Sx3Fl1e6Cq4s -cN+fWe4ouLoxBH+2LRMg7EONKWpx7qWNcXj8zgKx4qONCP5oJ0EOHQz8/qKAd2ARig+tIsnRkqT1 -k6N9JjoH75OdLzi00VFhEzpn20IoD5hIZaYx9LthUt4vQSm1zDtBzlHTC893VD79oq3s0ZdqctJp -72DNg8AcOc8yRs7qJhdfH6YkX9yYQiTuaHj4PR2PuGciVhxa8KDgAqALhtHxXgW7MaBuFiyPUTKd -U8RMn4JYsqMD/MKCzPljhQz508Hjn1jFEmCNtP1FMf/Q2jp4ZJU0Hyyxids6XHFAXhfnl9e/D8ko -ZRElF7o5Tc1TccHXhjGlv/c3pF8ahCaf6m34cLq9Lv7HKULaeZuk5EpkllYsb6p+2olJO7s2SioP -K0UE9yQu1TsDidnWQN4GZNWP9hZR+bsmKtyvYqCOVppHty002I6ZVLVrQhdum7AVYSOTsKWjY/aW -uGyPEpflmYpeHyXUWPtQJSEFFxqSR9eDzdmW43L8E8h41zAqTikG3RTUxP64PopM2ZzCpzqHYE8D -89iM9XHke/sQ6OH6dO3roBKdAfgjcbG/4Z26reIuEPP5n1ebRk+i/SJNpBpftLfkPCLJN9+YHlCT -K+0j6ETATm/umbncQyufF9LgC+19Jb9rONlnlYy8n/oaX/9g7Sq4H9ZSIVJ26f0+VPK5Y4C7RUwM -BLD+hv/l2pkBv9ByMZtz1CKfig3VSiB31sbweXtA/I72UD8wshDeSURctK+pnp7yrwHE85+Wemtf -tmOyribcPPs3a19F3F9OMiqirk5cHym4b2otvs4tffS1oPTut74JUMx/3bz2LR2p2iNDJgH6DrBb -Pvuzgyf4a53J/HMVB92QFsavjpTGrE40JAPrQR/ZeNydRR55d5FLPDRxaSd6DvU/Djrxv+sU9ImD -2Lg6Bnm9OU7MALCVtWNq7d4xifi7ZnHLgUUk3tHzKGE5sRLgSJQ9A644okRk+aWwWP808i3As5+Y -W6qvOVqjveaq7y0K8q6udZff9Y82vHAPY5LkwtyrQ7jYb1aHoPEfl1iET3Yy7HAJWwpgdWZESyjd -BXTGLhAzdo0c3Cdb69CJVcD9aOWzjqKfZSPX7wC8z69n1JsHCB9m6FW37b2IeDm34sF4Y8aPGmZZ -jI5T8sTRCnBZKfjVjgqXtwT4Uhch49woOfZfYRURdGxqEu9oheSQOppn2ZgQkOOyNqfRSUElsXB1 -ipCt74A89MzTwHtmceu+iVK/vQBJCKnq4kMKeBawXtyxmUs+MAtZ+xYhb9fEIR5bhZJjK18YnVu/ -bwQ4/jS5wD1CSN0cw71Tiqpulb+98UXmvXN/G8dkX10fRmcvd9Q/XOmuuStnZv6qFhTemRbk/dpP -zrpm7SfkOADSszaBit+UwhM3pZCX29rG9E8uEvovN6/to7Np+NAh6YmY6dFrwpSTFbbgo1M8eORo -ndi3Sdp3AVwJ6ihVwPnGzHHzfhvBZ5w/0omZB9HZ7VpSyb6aXukdQ8cvd5dfsXUV/7o2Cn3rl9Nr -Z3hl1zRNFXd3dADXNXJJYUBXRwyEkoieWBJcIBZpOyEvlC01L/bswuFDp7AtpCOX+pXE/K0FasPJ -CocHxHd8SMuCeeWE7JUh+JudRRagLam1QTUuf3W0McvaUfVqdRCauDkFy/HPwZLcMlzONK/09zFa -9q1jIB4GtdRKr5xSGtDQarbNXFJAy0F4FPTKoJYNN/c0vnVJgTNYahsJAI9DalqFbxqTtDnc8Hqt -D/JybaIxw6vgQGXNyGRKWdwl13BN7JaiLsHWl3bB0pV2eWWs5o2+szxusbPiXViBzP1zjStyzWGy -FrrqHgaUTOSJvXX0xE7FHVkbCkLqksdSxuNvpMQX/9ycqHn/2ckTrUvxWbYRfEpQx2N8sncp/2Nv -HvzvKp30hxNfs2NApK0M1j0JzdHKIjJu/c6CgHC80j574mybObaKWwOzuExHR82NoyUeoEHgb5zd -JdfWBspvRmcgWLvr7650YV5tT0ga13swb4y84l8UrIyLPfCXP/DL7n7HLrr9ZTf0xbeeSVy+Z5aU -HVLic3dN5MptA6X+eEkgPrI3j+wvS7p3Fzm4ExuXFZQT8vf1LDygP+if7BxqyMgnuZVcsG9OCFvr -Z2fKOdXXm6rffSvFFv+yPSOAeYeQcc6usmvm1syzju6y6+sTqDjHYMNL72RD/JGRhQzNEXNDMlrp -tpYFCavRaSElItk/D43XNmdeWRDnnPNO1cZ8stOpAT0FsqVGpm6pYAkRDTzjcJEI+Q== - - - t53a8O9lSsPn6ExmCwu9paJVRPnztl5A2zM2t4Y0AqKtFxE3gs053QtPPasVVN/sR+dcbq1OPmdv -x2ZsTpGLV/pgT1cHG2MG0Onn55nZv4UVpIqggo9ZHmJmDxDzzmqa695uqQXksJ4BO7SQ6g6WcFW7 -ZjRgl9icsIkBDS+ykPu2pq7DZUHTEcCXj+wds/vWlp59a1OHGzh/xzDksbW35v5ST/0T5wiuuBMZ -f1HGzf09PMMq94+g3y4KM88usJNO29qL7rhGoHGjpIyzckHxowNA8wUU2Hz7QM19+3DNfXd0voWB -VgfoDPa+pan/42aresfGoQYW2PCgqpW/a+yTfVwRtm2b6FBgrZBdYL3RGdv7S2wgrhEL94H7h6a2 -vu0FOjioxGWvTULjTO3l11ZGkfEBFbX2yM5r9qhxIPs4KmPbLBAfOCWDkUUONmLm4AILtJoA4DuH -NnHbtqW5c8vYLPGoGZXbegn/0Cxp+7gkao5o2Y2uGVreipRT6ppk5HrmSAXWPvBrauGjf7aA31zY -0ZJQER2mwCtreO8aq3tp7S697lUQCtdlArRTyqwH+CXlxCZq2tIQirY06FyfGprsloOznGOgFyE1 -pnjPKuI7xtkllmHCuy0Dn/vXarty30CLcibI/hITe2QXtu1bRK1HZhF/X8/F7Gp5mH2Ag+6aJE3b -Wg4quMBCbakodcC+NG7NEdK35ykFYQW5KDiLSlnqLLhqbi675uijJHdA0n4Yx2WcXpCU3Jhl5l2Z -wGScnSdnnbN3VN7xzRIyjR2wR45+bMa2Xkj1q5mNe4tc2qG9dWx7SdLi19KqPQDGu8Yb492z2AxN -U/7VbQWxbs/S0h2tgwnIiDlLrTU3+qDvvm6tePmFklN0gVoW8x05+8G3traq+IgSnx9WYTLDKmyO -bwaauDJQ/NgoSfhZTYs9tdpd+XhzhpSnaSr8dVFScs3VD4kFdG60r3npX04S7GQJB3LPVz6OaDHF -fwA4/YezZeLfDr5wTwFJiMxUPd1Tw1MPzUzMAYCZPgU6e6mz8nevlAbyyzkYYzvslbgu+efKt7dP -iSve/Whrqr2+2Q++75tGpgygE/41hHh/drUPnxqc4cFWh8HP59l5vyw0gW47RpCx2rbGl8sj1LIt -fbM4oCWDggpsXkTLwh6auYyPy3zhkY1E2DPhENsGQl1Yhy+O6GkNRyutU3vL4vaIWcBcnUJkrE9V -v4yoYe+2tZicxV5kchcy+5q+BZ7omeBUODobnkgxSWd662PPyIgfLpt4KRe9Y3UxByYaRt1THsMt -e/Gjf4IFOTC0NG8bOaRDIM7v6EmgnUU86GiVSQtbyfVOGSZ9iJ53vaMx4fJHV8vkgb1TcQDYcnSe -9/pw9RPfNDw+rCEUAtwIrWyqfNyPST67MgSOB7hN7RYQa4IyUrEPuPm1TLBjFJvolhLLdwG7X5ml -1LvG0QXbBhFnxyRg75hZ2L1lYXNkEYhtBg5qS89BhE090+55HmVdSimNGHl0j4petdAEfTyIzL04 -ikn/1dld+btakPv7YicocWMKVTSC/XDer4AXHi7RMYcWQHcvMxkHdhpt14Ct9U9H4ygx79Am6dqz -SAZ8Kjoueh0zZGSjfRoqyKNhQoIA59i1SlqA+N21IaNXrU9Tyg7s3Qu7tj7TvqPH9L/eEFZJ646J -1egE9OKaglmpaKq7a+oG3lsvaDEPIcp3NGxkYIaQ6htHxKwP1d51dVdc1fJST2sERb8NcGt+Tbh7 -7m/iyre/+mcwaZuTiLfW9rrbzr76uxsjNQ89k6B74TlCJqAP0K45YmUf6f3FiIpQFzH1zvi1/ZP+ -hbbmHZOQe2wTt+wvCTiOcWyKa5wMxG9sYUhFAvnn0MmrvfAXSlbFrVlq8VVgr+7gChP/Rc5+/YOl -GZy2NYPJWOkvvuIcLr2mb864MIp+fmqK+PaClJL0m2uw9o15CPqiBZZy2tHBLA5LW0m7GjLo0ITM -3dE3prmltc/9czUx+3oi+NjMJobUxJJDPaXmPzYa6t/A7b9OvuSzVcA7MtHgzqGSu2vD5Q/XZ7CZ -Yvi781P04lvrQ8QkVy/sqbWt+De9MPXnaXLcT23gpz8KC+58scDK/03GLb/DLXt7wdkDerLcU5/k -GgE0sQyXFVTQKgMydF5ACc/enKt7Behb9K5O3LyzwMDs6kk1HlnZm3VpUYx3HpywbQR4o4NF3rZQ -YD41Mh3QAKLPDknfJwcRfLiEyI9oEGn7AL7vLFBBvhlcqmsIFeMZo+YAvlzsBx4f6Igl7nFo3Aj+ -/YUJWtZ1BWDPU4yKd55xZvXqKKPAPoZ+c7AEcHIrGXW0RIAc26moA+C9fXp8mayl5MEkO/P+R1fT -SEDDp/gVPEREw6OH5ZjKLSk8yT8OzQrJMaVSduHVQWLGvdWJxqL1aXyBYxAf7xxGJ6xPYVK9Mkrh -2gg62o8t168mlstb65/N8MtehXRNLduLkpZobiOAk1VBLQ0UAfxtzyEQR8xi8eIgNlnfjXoT1Iu4 -rjkGaJZeeaWtJumnzpo3328MgG5uK2CpezpUWR8+/cL7exe/nG0uTTlc5tIPlgQsrwJb4AFwziev -ivXN1rzfNTBRBxYB3z6KyJEx885Z+xFvQkaxeN8h7tlz8pvCUZ6kB3BQz2q0TVEyN2dZdSE9CbEp -hxceLPPajuw9xj9WJQPR2VVBEw2y62Bgw9E+YQukInM/5DU259k/d3RiRnCeUR7t3+4dRbxe6wbf -WW6rvLLYBrszyABdqHt/+x8TpNyH3ml0ikaU/4uak3PG2Vd7e2O05kFYBn57ZGA17hiEZMMoIr0h -87dvnB31eTvG0aWwcUB1YGsfO3bwRYc2Di3KO9bn6UUjovqn3IqEc8udDbl7GlrV1hQuxTtGTnP0 -oF9aWhvvK+m1v2jZ9bd9E5QSWwfkqbm56BePFPbGNVL71DVY+dwnRWcAHDneM9P4fmWi/olaBLq5 -3MEs0gkwHzxjsLdHZiJ0W0ODbM1RwR8X6ZiPFjZ5S4XK8M1DYvZ1hLIdFbbgzyUG/r8ucddHC4Dv -OlLFxmjda/9MY/bGLC67Df3+Fymj5NbqID7R2VN/zyjKu6Cgp50FzOIncdXrHyeQaVeW2+qfDBPz -rhY/vfy31d7a+D1VVMMgk73TiPcr/ZAn7snKBwE56Jl3tvpZWEmvWhlpyFEC2OieQiYfLZHRxzYi -8shGhnx0UBtPHBREWIfMDCob3n+ycXkHJpHo2NrcF/WXfRMdsa8nlAVmoG/tPaW3NLyMi2sjiHeO -MXzRKCP3tra5+IF3FpM/Sc1/MEkuuAHop7Q9DQcBaPxS1yg6fmMWm3RsZ5KPbVTCsY3ceGgl1u7Z -SPVhGxMfiOaFLzOZn1Y5Euc4IsE5SsjY0YrEf9jZbM943WsF5cP5RVHejfVh6Is9NblsT0etUQpB -N6zduDchBa0ipMTmOwZrny11Vv2+Olb7wCuHxQU0lKotLYMQMQlYG/PU6pCBz44sCthBDeAjBib8 -0MkGHjMQXgW1JNr3CNAvtatSwPdHSanL3Y0vpbi0H/tgb862g1/8Iq5+8lsHJPFfHdjiBLuUgAob -KBCvHF8SWGDBQwYObs9MAYei/Xg1pMqQhlRsH4W8NnZU3lwaQn3YWhSIvXoizqsn1IetPI5PT4d6 -tQywzyjk7AK6L6BpyHFNlt6L6CgoxygJ83mF1/SXW9C9a6PjjleomIgOmbcJaOHN6cY0bWdNll8e -1QXMksA8p9o9SUqzd0DvzpLzfuqFpXzX15D49Sw65cyWlF69NkHImadn/eAbbUzcluEzIwps+na0 -blCOzHTPEnItg8T3Y+TSW8EpBnnf0a2N2Pi8XSCuHy7TUbtmHjWsF1B9aglZKsEmttZkXFrtxNce -KBn1ru7q3zcGES/sndC7OkbJGbuw9GJgHP1hdZKUxal7d6YDlnR5W8uERftKhNTIZOcw6P4UI+P8 -CDnttH2g+p5Hikwc5dUkFMXdPjVHTbnz10arfN8kEe8C+H1gwFfYh2qfaltyz2+MVz3Z0TEbelDv -f1psrsj4w9Y0+BHQ7Id6csWellAYUeByPROIt8s90AeaFsidLkz+pQlC3s/hGU7DxiCwL12oF45e -bNz6ACl1QVD9e2td/ClJ6dMvgpOotMWWinvmpuIrERkydWeBVLOjJhQcGcig6Pw7YH0fzF0Vd0xt -FffC8uhvGE29fgUu3zlR92w3+nuXBVt4ZMPX/nedwYjO146ouehDXffotrqJvaWiV0bzPpxdJdfM -TXmXTeLc33Y0hEp1V9VbcOrtr8QVr/61b2JhnP3oeEcH7MFqN/QhYNPPovE5ssAAR7RclEsKTZUL -Un71y6Dpn1cAH1xi4XaW2OS9JTb1zzVR77YRXbQ2BXk2yiy8hch8cMEfzWezECDrI/Xx3jFw3JEO -me+ZrHljac2/MYp8881KH+J1Ly7rDin/8Q8yTsHVAzMZcbhEAh+aCRXA/ZoIgENBDbHAryQWB3R8 -4qaCUb2t4xH2jTzyx2UW8U8XV/hpiYE8Anx/Y6zigaE1/zdTV0PsGLXo5jA8+Z/tFW++aiuP/baz -Ov70Sndt3L6GAd+YRBctiEpuqziF533ztDIgjqWG5OiCLRWmZEtNrgRwgHK0wqAe2OmEnWUOw6tn -IBd6Kx86Jhs+HK+1qw9WJL0hI5cYNAlZERs7OvMU9nGZgvHKGnO74Ynn9o1k7P8FJXPRmdNhNSrN -NwN+sT5W83DfiK34r1c4uKMVkkIKPmxrTgDzTTOLNwbwiUZe6S8z2JRvtcy0H4Jj1c/dg/Bke0ft -w0VR+cWwklS8Mlrz2t5Xdnult/KOvbf4xuZQw8vILBP0GdB4n1aY7F0bkxC2sDD7Nj73Dydgi/aW -4QOzWBRWs+t3lKyaQw238VAtJK4N4N+vdhAS/KO8cmsL9OEsPu0Hg6Dwd7249KaGV3RRJ674dWWA -kBZeEBJCeibUI8cke+fRKVvAGoJySjSHpGB1jJAr5VXdo5a8OWtur8w6crRNB1QU0Ooo/I1bikja -05ErDk3EygMDtnRLRiqzdIIfuUexJUfm1n7Al/jHizTozgK5fHMS8w7Ah3uuIdJ7ZSvmRSeq/OdZ -Wt2VaD6zubni2hQu4dvehpf/6EPEfzdNyj8HSKFfl9vBLw19DfFlMdf+gX1349sDNQ7gKwSQTpx3 -YYIc+09zd/J5S0/6ubXR6hd7C0z4/mJzq74Tkbg2gc3+BNjL/+dlCf7Py+L/Z52M/LSMLd/VIlOt -PbUPaYVvfiDlvPjWPUOBnyxySEcaJnRXTihxj8KS5Jz8eyphGqDBUs/szCEyA3Jq3VJz7e3gBCYt -IqOWhBW47IgKVxBRURp3NBSwmpdxZmMY/P7ExGMAWqIuokRmhXT4km0DFfrZLundM7AQBxYOZXOW -AVmQgF/vaGm1B2Y6yj2OfGcSl15R87PO9sLfnRvBJv+6MQZLALRWIa7k7ekPdy59PQ== - - - Ri559Qmwyy01/H1QBX8fUMASdnQEYG8ZcEA7YDbncBl+JbXs0NQk2dVyiO6pxpSdBWJlcAaRaBLl -XB6Bv/qXoQV0rwWTcyPv9c3v+tHZlybQGd+PQOK/0lJSvtfSAS2MePPPLmjiudb6hEsL/OK7CmHF -k8RbZ/8Gfn/7e7eMjHBNo99vzkLids1kmEeFK3RMwGKcsw0Ju4Df/j8vt219ApUSVrHxR8stQweO -1smTjTbVp03hwMcVKvYYwCjfVP0TjxT+1tAOurc6ikoKTGNTPCOQWO9ofaJ7uOrNen/58z0dF7Mx -SgSwsP7xPLPgxvogFlh/xTUlJfvHKVTy91LUu+9k+Hf/tIpyL3mGwY+XhmoeC2Gvv+1sSDjln8Rm -Bucak4zi/BuW5rzbQWn+w4i69PHhEhZ0vMzjnTii9YZs0pGZz4peVz8wCWj7OnrdjoJSHJqnly61 -ge8uNTU8VHDqHvVCU05113/4UVT29vsRZPppo6D42tZUY3xEQSj1TCNy3LPIjC0NCxLRi+j7Jkpd -QAZLWBDlnJdzUk8v94BuBacxafsGDjEE8JOwlgXbN4jYe0YeMSLHpIfkda880oJb9n6Aj4wjEj+a -uKQDA4/im6OW7+l51D29mOWdoeWvA5p7sa320YK49q6lHXJvdRgduznNqtBLqq8rOYWX5xkFd5d7 -qu8Bcei2XlT2aKUflmLsQ8aL6tLPdYKzbwXnaDB7X+19o7jq1lIr5MX6ECR2axb+9sjERBxEawa0 -HERTQ9r3SnHFixMbE/dphY49tmGKjq2IrCMLMhvgiZWG9rontJI33w/hcx/tWXjtARkue6Ov5vZK -e/kVJTP9J3bRg2/xqVe/mES/+n5bhcyeFIKeskEJvzgG0FVbKlq1uavouoIVe1pKenzG1PzmZ9dg -9cuQkoYKLDAR5IqXl+a56c//vcqXROdlfzRz6Xs6QpFfCou3thbf13HTfosAun2cVfR8iJB3L6Kh -IYIKfFFAinzvGYMmaZtKnkmJqed1gryLix01sWEVE6cQg6JzBrIBjsb5Y5Xf/NHOYUZUiDTPVN3L -9cnaR9HakwPg/NfGkICdFP/inkQnB+TEXP8MvsAzSsjdknMgK6PY99rmutuuUWLGLCXnQhvo1dcL -7LzLi01VDzZG0WnA96ryyMgl1v6GREn121OQxBtf9KHeXQupUAUb0sqnPjksc8dIx3g1PG7EKuw4 -XuO3RWtg/3LTWa7RaoA/cISfnF26E6eo53CFy99fYRAPrITKsLLh3c4CriyiJUKWRyGpAQWxLgRg -kZ5TcGmgLubr9opHf5cRP5wOyEglWnHZb0Po99/yy599MUkr+JlZ9PLbMUTmBYsAel9GyPnJwMj6 -ydUKaOd+0IN+QsJP/KpnX04RM352jze+XRuueagTFv5ubCq65xkpebK3gCw4svHFx/a2KcBH+gIL -1PKAilkdWRAQdw0i+paCWuqX4pK9k7j3KwC/snU03O9oSP0Xryj2HxZRw0s9F3xbRS88p+fn/2Zp -zr+l4Sf8NkePObvYkn8jImfVB+ZZMM8kIjHaH3N9GBy7MVzxKDBV8XBjsOBRUFoTt63HZO3qGOAD -vZAelJEKI/PotGMdoWpfA88OqxGFW3Js9rGJ3hBSEYucgKYFuGZjaKGJ45mmFTp6IY/UvMyf5qgZ -pwDu9MvWPPI9wDEz51nll4zNDY99Unb5cnvNnUnshx/FFU++7q57dcreWvO7qwf71j3GhzjHmKAR -UtY5ew85yz8lqPeNYz6E5tBJQQWx2A3YhFdNKVUDWsbSB0+I6BnQPQsDeWClIgBNDTtYJFbuL5Kq -bX31j7VNVbc2prCFH1clo0EVuXRzvDF+fRj9wTWETdHwK++ModLOmcWld8NKCqiZkPdrffKjUwst -8GKfnAbSiNLOKDmJv6mFyU8c/bmvD40cwuGiWORboEHxZS/Oj9MzX/7h5AkOzED81ETz3Ouf2rtL -r+j46ed0/Mzrm/PkEnRh7FlcTvy1iE7QumsgQywtBden8fE/8ovvfdlWfv8LZ0fBjX09qdqrYIHz -Ym5+w6tNuH9ooBD+XOO3HlspCM8U6P7qcNHVkLrhw0e7qC2oYWJm2AU39aLCmx9tvGjuMHRbRwH5 -pLhM7yTynWug+s7qUO3DdSk5i1L4+nt0xoNvFrur3kUAPN2YhCbbeyteGVpKbw2g0v7FKXz65Rw9 -6UJgDpy8pUJneObAr3f1bEBvtQ6frHRqgD0bO7KzGECcBPg5LPVkGVf3ea1p0quk0BY6i+IPVxjk -Ixe/+WSFSdk34Ys/LVORxzY83KtC5Pg1tDr3DCl/fajxjVaQf0PDS/81PA995xzDJ6kFRWeVzPwz -M6TCMxJo6reY1CdfzpFLbzs7G55IKp9/Q8u+/uUA9Ok3k+S336HSf/vbOPbtj+ujkFhtT+XdDnjs -94vNde+O9DzyoZEKcc8hP7imqaU+NZ+wY+bR/VoOTD+ESJByi6+uTeILIloBOaxg1bvHMe+Xmsov -G7nFP0sJ6d/P4nNPr3Rh3/Yjcn+WkfLOWwRl16yi0iuurrInmwP1yYFxVLq3HxVrlpRfd3WAn+zN -sKsjUnL2UXRO9ljNk5XWnMtH8+APfy7hy/ZVqPTAWEOcs7v6dngWOIdBZEpwFBq3o2h4F5hrjA/J -UUlbclzGrpbVuGvkoD0ySpFvhlnmneDXmNvKr09i4r6ZQMZ9N0/58LOOX3BhqRV0FcCzd+Yu5Js+ -cMqp5eb655bmqucTiLhTZl729Y3euhhgX99pmiB3e7E5FzzTHOSuTki3dJTcWh+tfe6TYdJd4/DX -2wZS1a6Zg/fM08odI8gY/zwy5d9u0cjnVUHbroGN2JyiZBlbS66uAfpzz0SG7NtYFNswIsav4MKC -qnZRQNnCUPGrb1Lzn39HyH3y4wAi+dJiV909Wx883a8UMNxKPnx9Gpu9v8gVHS8Lm/bMfLp3llis -EZfdXWitvGvpBT/b1nEFH1daRg+XePSIjlYTkNOrvXP06k0pKds3yyjfkHFq58WQF/pWXOmusX3Q -NYGIn8Jm/Gug/t1X04Tsn23tFfe2VfAUwJ+r1qYZheAPr77rQKQ+PjJQsJ8cbEZQhU7bM+Cqj5eo -2EMLEx3ScrBeBaNWIap+sDwIT/u3p3nuaJmGCumwWZtS+GvvFPSlbxLyDMCjpKVBXCw6O+5rbM7T -H1fGoOVbakzhPDvhlIab8rO5FfS7pbv+hb2/+sWOHlN6aOUytzRColKcd8krw1WeOIStIT22PKCA -JPiVmAyfilIW0ZNq/9gQDwVNAv4ws/RxSdyvX+7ZBW0na5KRIzs7OvO71C0FP18ZrbhjGQK/cExz -aydptZddo+SsPT2tfkdVHxeaqnqyNi1E6iR1Vxe4pWdV7LIzGl7lxaV22F3nMPaNRlx1ZQiW9n0f -OPfiLLnixlJb3U17N/iedwz6KjiHzbENod5ImYVXncONySElpdA3j0tzz+NzN2RMkF8twO8tiYRB -LQ+9LgO05wypYNsg5oeNYo5/nl6y0t/wYoqQ8mNz2cOvBuGJ38loJWcHabXnYu5e+hsq7enPri5I -HKDnH5qE2ResbQW3TZK838axid8KS598M4r6cFbJLfsNm/bgm/WeqthjLana2Qm6b+BlXzYIPvzU -D7n/ZV/t03/M4ZK/nxcUXkt/dPZvZS8u/WNbhoRGa43+sNKQH400xK4MWeQZBT139JdfUzdVXSMU -Jp7uAaf/pKTk/TyDzTyrIBVcsIohv8+Ti84A4eSspDLuO3rW869MTaB7cm7RXWbBo6/QSbe/a618 -/YOcln52paf+rm8ameybqc3wSkFvj4wU6L5RyNjRUkAA7pZv69C5vrmGt6sj8JhAtGZvGuBhi9h6 -71zjB0D3IEKyzqaIhgTyTILjN0br4twzjfHhBWLR9gIH6RjCZk1Scn9xDeISdc3o+Gl23TNTa9Xd -9eGyJ8HZKoCPQDMDGmxOtI/TR4egad/MJq7P0AtDC8yGkAZXsm+hYz+5uJJDK5saXMDnhQ2UqhDw -v555UplnjlTqnaUUro/h369PwGN2NNT6I6NYFNHwCL55do1npoO2OdHU6Byipy/3IV/O0HIvj+NT -zriGkfG+GXZFRMmsCwE2GTZwcRGTRLylY5ADamKdV4bNXR2GvghrKTXbJg7+ANBgBxYqct/KIuxa -BMwtHRe3p6GDtfzS6xO4rJ+UrKJzzv6aOxE5NufQzCHbJzEpS0OwmC01pdw9h08L6/AFQS0iwzXZ -8MYrJxTs6rnIoJxUEs2ROFzmsiMWKvyzW9Dz0S0eOwFix6GdzfWoqA1uFRuyOUPN88mopScbzbNh -M5exZxUIPjlapZ/sTb2frHz20RKXum0RctaltBxvdN7hHDPaJ/22vavsum2MV2Vog9/Xiequqzhl -Py9Kii+4BiGP1qaIKUuDmJjF5obbzj5R6Up/R+1KHz1pY5yYbOuquLbUWnRpY7Dx5b6Bjdo2UGrW -Z+Dxa5PIlONlUfOBTSTaWRSyIkYOJqAmF28vckm7ZrFw19Lat70oZPoVjAr/PKNifQSfstxR80Ar -Lr08Sck/14+vPMMsSf2uH5l/Tc4qudoNjv1qDB33VWvtiy964e+/Uwsqb1t7sMm2AeTr6HUeLujd -aUdXfexyd/V9gB/9MIhM+lFOyzirF5Tfs7ZCY109hPeaNvgrQkHMd4y8N6fC87j6tZGqu57xuseO -ntKbfdCnXw1Ann9laKm8McIBXXn/8LcviGmxP670IJ4ZJTU35KTSX6XYokuMnFdflz65/LesW+f+ -Vvn0yhfCusSvs1/f+AL+4f4XjnZgHzuq7m4MVd2xtOX9JiXHn5KAbn01inr8bXCmIWl1GpszScm8 -ZmmteL2vpyD2dHRMcI5asqMkFriHKu7IGfGnl7tAT/xztPJhQtlzx2hDgXO4LmG5rSZmox8Zuw0s -YnMc/F7Jy7zUUffyH+vD9GxTOz7H3AFN9U/AExTslMsyWtzp1YHc24eLsPRtDTzd1V8CcNDq+G0d -D2/pJxQHFPgqgAPBDq3Euo/LVMTxEqnu0zKb4ptH5wAc5srGJDJzR82AB6fRmVJSwhk5Nev6ej8s -xjMGj9kcIST7Z5ow7nEeyD8jaPDLmsgbk5za9XFqnnsSnwxo2ZTVIexbzxQxLbIgpKyNEHJ7YMkX -51jFb46s/Gb3JPx9SAvwuiUebXuRBvbMN8Rv6WmNexahYHUUnQj4SB3AoZG+KULe5lDtI1Nz6lXv -VH2sX4bLcM1RCgBOUuiXU4pXJ9Bv95cYmE8uwO7nCcUrw/B43yw8KSgDOIIMl7VrpII/bwi7D2xM -EmBzFaEFavW+mYryq4mw/SUe99jG5x5aOMQ9CxPvUZLL9ixc7oGVz/9kFzb9scxhHC9S6rY1lBL/ -DDEjAPiTow8TYxDXXN1ZIJaqu8kfDG3IF2ujtDxbD+rl2jD44eZE3SPXCPippafm9g== - - - UifkrmtEUG7tF5U6emlJ3mlW+Vo0b3ug+rZntOF5YB6d61chU+0TNQ8t/fVP95YE3BDgE34NGxrS -cpHbBi5l39oycLTcNh79bWHLSKrzyFApQQ29emOSlOOT4lOUgtLLPcjkbzsgqV9r2PXXVwdYBYvt -mHfj+OyfjU0NLxT8hteGFvgLj5SU6ZPRK9amEG8BDhC3PNAYA+juImML+J6GX30DwNi0wDQ6LSSj -lwcB7rQyQElZGiAmapthjy3tiLgdNQdriuahdYMfrvTVPx8npv82wyi5re2hxI8IsPdQeR++HWwE -/W7rJyVP0souCIrffUHPfPt3Qsrzv+OTnn9DTIr9XlScfGYQU30Zk5t0SlARf2qcmvkLp+TRv2YI -CT/MkhO+GcYk/HOMkHpJJyy545shlxn6GxPRqXf+0Qd9f+uzjd9ybOHzfDPR+QENrxwdOefVrJTz -62PYYvsEtbAu+fEpY1ddweEiDbIPYKejo/qRQZB3dbDx1anuukf/mMMnfL86Qc5lVH34pSrx1o/T -5Ox74TlcrncMFrMzD08Mz1a9m6HHXW2rvvuNmpH2axDgUaTiuB/GSVkxR0Ya5bOTzfq8TGnc12EL -Q3JYuoL/4bdJQtIvK6MN7wYpWQ9HMB/OzTHSrivoBQ82B1HJOypCqXcSnbQKAJSGWXjbPdSYsyXn -U8zd6JyNcUopcH6Z7klm1ZaMBQ7OEfMc3dDEKVzSL5Tk638fwyTdtw9Bc1cG6l+GtdH8PR5z18LC -ARoMs23isQJqBlIlLL7hlmLSrf3oSm1zTaJ7HByr5SVd3BwC3Y8ogc83kMo3J+HvAD70flNa9+rA -QoH6ZdjS5V74q6UOyGP3JCIppCBW7Go5pBMbX/TXprAvoECnhtTE0sMlNu3EyuZ9tnPEf7j4kk8r -fOHxMo91tMLlflwV9vy5LuwNa0mgzw6+6N9OQcuhllK9Ngh96eqpu7faC3uyPtz4cnO84fXxEgVi -GWXkbk4yKncWJGz/DK/WM0lKt/dW37R1lvxi7yq57B7BJLjG6JnGTsIrZx/+bUglxDqGoC+N4txz -lpb8C3pxzgXfLCo1omU0bOsFnG2LqGlpAvvBPIxNCOlFwL60D+1ZW4cPbQLxoZmJC2pRmVsA53Cr -0LkKYdk1/zSzZHWcnL3ci4o18CuvrPc2Pt8cJqa6BhpjDeL8ixvjjLKAso0H8LOyLXljvK2n+Opy -V8HljbHaJ2ENpSK4wIY6hxCvfABp/mQRcAAeX+mVEbNdw6jY5R7Y440JbGK0tmrXwCPumSWizXl6 -eUAloES0YlZAxqzblHHqTROCYtUAPVHTiXmxMsYsNA8zsuZFiDtScsP1GTLqkVaMeOXowiettGFf -W5pgd1WchpuTWNA5o7jm+hi97Bon7+W3k6i009Fzs4/ik9fnGOUeuRC5Km+jq/oICR2IjNMqTsWT -aM8112T9M9tI9e2V0WhPY+ibkIJatTbbw9X2t9ZLoKUXfTJiTUgBiV8bLv/d2Jz/8wgi4ZteSOK3 -4+iUH5a76p5YJxglDXnxPzy/fPpvrdXvLm5NI1OszfnXLYKU8zLMs2+Zub//vRP67pSSB7m12M1O -rvvw7Atu2Yub22oc+Q8nm+0ZAz1cbs2/oOam/thcdfcLQ1PZE10vNAGW+fAUM/fJV5/MDNyJkQY/ -1NHqvDMN74YwcT/wC+59Lcm793dHW+nDaW7JM/Dba9/M0nNe7RpZiIiSj1ofQXzQijIuDkDf/IOV -d/fv0+SEn12DoGfU4kdnFPy82D+c4r6Pq+KeEweTumNAF/uVyHRTV+WtKXLGKZcUl4UreXsh69Hl -fzhHoCXbMshbz0j5Le8Y6P7GUPGtHvCDb8RFN77R8N//HjaRqvD5T77Hpj3+ydBcm/jRLOB+sook -JxYBb9dIR4Z1mOItZX3MfzcZrBMnS0iufP0Alv34ZkBJIZ84OpXHzg7Vf/xN8v96eb3HFiRoY6Lo -1paWAOlBpd+bIOc/2JxEpG2MweO80+jUiIZQvK/H5v5hIVX5FPjMgIrb4JFz6myDpHdBpaAxpAI0 -4jwF0PfQZ9a20hsyVsEvI6i071c66595ZWyYvqP2vqO37sm+hlF3aGTAji1MzImNzdgxsglr88yy -5Ula7oZSzNjUdLYsS5ugHnWnZFsn4UTk5MJtGS7nwECuCmvQWdsqfN62RohfAXjwUgf07gKj8Fxf -/dvvxhs/fK+iJP1kb8+9tasTMDxKPt45hk3c1tJqwzpS2UcbE/vRziRtW+iNHhk6c7EddMcrhedH -dCSQZQD6NKjkI0IqPmZfRwFH584D/Aa8o2fBg4BGdc5iUiIWPse/wMYvAhzJNY6Md05j0jaVxKLI -Ih3hWWDVLw5hXpu6UU/Wx/lVAUV3S3RuhnuKmu3sI74HaNL53oa0H0awmReX+xvfAP/3EsC154C/ -gVyTtJKVMUr6uoxW7NFwoM55Xu26jF25s8inHVtFzbsmKsynxmYBmqHBo+CBg1omeNfMxjpnyTlr -Cka5W8kC7Zqj/X4IeW6Aa/gUzFpAD1S5pcxi9yy9yDVGTDUM4GJnROAbckH1Hb8Un21uq7w9S02/ -qGYX/r7Yhny1MkjNdoxy8k0Dwlz9gDDHMU7L2jcwCSd2LmdTRshelWLS3LOkIp+cVe9X8/E+nYgE -fH6htRfy3DcBeX2yRIE7+qpuLXdWXnONNLyUUnMvjaIyTut4oKueeUb1XBv2TRM042eluOxtYAFf -Yu2tv23tgjxcGWh8vTpMSlvuJ6b6VfSasIEBWZvEpPll+MqTFZ4oWnO+rUXnrI5X3V8B/H9dCnuz -MUctNI/xC+fEiGcT1PI7ATke5Gwr/9XZUXLFwE3/ScfL+tnYDHpi66h+5p4hlDhlTZhOTN6vbZD3 -V4AYVXoA2N3aBOxFUEko9CmJxa5pVNoOwGO2bSKBcQyRBc99+n1F/N1LYTWF+J9NfsdfTgrxryVM -BRBz39s6Cq4tdZTdNQ4S8gpf3fu6JvHBhZCJ2vxpUzh4aKORfPP1723tGZeU+Pjv98wsXHBRxFqZ -YVWYenExXiW7LorNvnlaEXD2L6J6ao5RckXFB931TlNKl6YYZQPkkksKYfWjXR0LGe11555BJPjn -8Vmbs5SiTWUT1adtb/Hqu/sd8l6RYaQbZpsab3PN9gk2pmkFi6ICIJZWP/BO1T4NzqGSV2c4lUMs -0O/tjak/LbVDn60PYd45eurvO/uL7+wuwLLDeg5+Vcatt0/RCwN6IXNrkU8KaKkgv45Y7FZhM1fG -IC/8MmTyrh5b4tfiCpxz2KSVOUKGVFzxeJSUcWFPzazbkjGrtxSM6oiRiQB4MSNoErOXp1nV6ub6 -mP0lLv3IKWw6cgokR9HZe1p6rU9JKXTPUvI2pcwSt5wLXerDvHKN0HO8M03IZeC+XlJ+xd5Tdndt -rPaZWpx3ztpb/XRLw6yfFoDuKETVj7ZNbOzuIgcf0rBgewZcyR9ORPmhtT7No4DERb/Dprq7wzjM -KLKNYRIObBxWxETHHNjo6BM7Fb5vIdZsaXB5u4uUWoA/k1dHkbHeaWzKlgqb7RwBP7eNIF575NTS -HUAfb+u4mGgPbn+056pezHXOCiCbMh7ULeeA1+eY1T4VE7ZrZMBPlvm8bbOQtS4XQIOLre1hs4gf -zZ8MGETMVSWj0qsg5nlnUElhNb4grBNSDS2wx4tN8BcBhQi3OccGuYYpqRtSWt7KFDl9cZiWsjzB -KvHrmzgOKb1I14F9tT7Xzlif7+Z6ZHyACzGrnOOE5LVpYmZ0T/bMfMYOoL8DKkCXGqgN0VqfoIZa -vWvhMbw6PtYyxS93zbPKgzoWbEvHRuh4FZdXgbjknSeU+mWEgpCWWuVVkkvW50h5tjFq+rqSC/Xr -JeJtW8tQtK+eR0mrP4729l0V9wYWm5uXpjqJFqkErB/BxS901911juMQn6I5cC6uYN+CKI4oGlND -cmxRQEGudU20wKzDXegpDuqtphVR+HlF0BsCYtzqaNVDFTfrzDT+/alpfOqFMHCeAHZCN+Tsmo15 -EW5NJsF4gVjiUwjgmzOcqrUJaqatDxdj60e/3pihFS+Ns/MXB5mFrmk2NLIIvBbQ5OvT5Hy/jF0H -xBhwyNQsWVcJUGvqJqpd1knXj3RBzBPDLMtYB2x1WlBnbkHFu0cI2SEFrTao5jQujjNy2wilFwW1 -aT9Yesj5nllqga2/+s5Cc+r5lcHi234lDbShkpDd2hZ+wNQk9Bu4GK+KA/Ut8LA+LQ/lUTKrAip8 -jncWGudRojN9RmaDaYqczUFlXiJkv/gqNM8Bh1UifEDBAYcMzEa/jg7dULPB60oeNKiTiCNLkuaQ -hUsEYgsj2sdzW8eA7BpYyD0TlxDRc5CbMnLu8gAmZmOKXbUxJ4DpW6G3DM3Vd61dVY8Arv3INVb7 -wjOHzNjSMerNg41J5j7Yh91FNiGoplbbBuqeWvuzbx4sVsUeWsFpOxYqdsvc1rem6m41DnOr7ROM -sqOV9tljZ/PogY1NC+uROWFdQ3JEhy3aM1NqI3pq1XI/7KFnFpd1YKHCdg2E0rCWXL73v5oYAsgv -J5XYB5ExQQ2zYdve1OvWCdketQAfMTe1HVibuj8D+B1WE6K9SnI9akbNhkzUGDS29S6ONmZre6vi -fAs0mE/PRAf1VJhXSaoMaBhQn1pM0TQ1PjO2YZJC2hbJ+hynyjXJzNuYZZW7Zunlq/M8xKqylbem -6WxamRXUq1rpifb50QHb3FDrhoIPA86r3DNPKQuqmfAds4B9sNzct2sTNoWjNU6uVumOXdQWMDBh -YQuP5l9k45waNmzTwMFtWXhMn46LnmNXXF4aweb7dGKaW04t2QJ4g09FrXbLKRVuOQsWsrQOBJc6 -JgLmptYNDRsSsbT27y6LO8MWCsKno9aahyjvLCOUJEd05qqBVPfZ1TL50dWhPHG2jB06JMN7FlHr -bnQWiEkiso0KK+wTQtD6rAQZ0rV1nTjapJ55bObaBCLBNgBPWOpufLE6jk7cNooFAY2EvbPY0hMx -9Wtdyq5mj0wEDyjF+BUpv0rRjHpg6EQ/t48QP3jk3Aa3vJ3nV/V2h41CesiIyAho6JXReWmablic -ilV8/aNZIgkZ2gf8+u5xr65nzDbXQTZLW+CmAW6GY1Jca2hnp7r6WcVhjZi8Ms0snm5qvKPqxLxa -HmeUb8gleEMvPsY6RPrgmgT2R0GrP7IKxVsGAS2g5xNWpkk5jilCkgcQ8UF9i8iva+F5F5qY/gUe -OqRlE3eXOTy/kQoxjZJS5prhT2QCeIxDKoGbB9gZm7Psil0zC71l4NPcC3xUwMhBf16XjO47RK1b -Rg4yYmrpiJh65k6i9cQmXLlfDkvakIJjXOOQpyuAtnIrRETjCKNwgl5+bnUE4BMAT3AONcZsSpHx -1kHoU1179S1AYzyPaOn1EQCf12eYlc4JepVnHg+L1p6fOBjYg2WB2K0V4NcVYsDP2w== - - - eD5dz/CGprvXqZDgNtQSqlctoO9b2HTAD0CrU43vNubw6QEVExrWcbB+JalofaohBtB+H0Lq+rdr -E/k3NqYhsSEVwCMBrRUC8NpvlPCCi13jPq2Q4QdiGKDL8u0jlNS1aVrJtlncvG/tmPEam7t6qSU3 -JbDkM+tzVOiWqbnJvyjmeBZ5RPscvdCt4aPdAAcL6MX8iLVtaFMB6KoZToUPeD5oFLHXVCLCsqwF -b5ttQbrmJAjb+LDELpuYWJweFtlmW5FewM7XZwg57jlCfsTAxoTMYn7QICBvmYTMPVenJrwiEG8t -iZtDKy1j4dXW2e3VprEdO1/kNzDRa0p6hW2KmmebEjfI2mipQmjWOUDbgSJWkWhriUtZVzBqt4ws -vM/II6wvMGq8RjZqyyzuWRptiFseBz8JGADuraTXbOm5xF27qP3jZos82i8goGcivBouJmLt1jhn -OY0rU5RyYD2coEkk2LEKm/eWW4bCSy39GzoOalVJLnDr6PX+RT5lQ0Up8sgb3hxE68+t3cpDW492 -39o5vS7nN9hGGZmOKQlYMygulEDLThk78Nm7RjE3oucS/HIWOJqzHwD4zZYSVxjUd7RrR7nlbHjq -hcoXl77a/v85euu+ttLtfZjOmelYO3V3WuqU4hR3d0uAQIKFGHEPBA2aAAkx4iFKFHcJ7m5tR845 -39/neR/P5vxLks3Ofa91Sfbe69LT8UeTgom90a7+FVsTbUrDzBmV1KY5u9jxI7Lmovry7Out0MRX -yyoWc3+kvWd3qIG2B/D+xW/Cizo2dFrGgYxKWgpsPbQ4Rwf0g6sfnbhsoIKXdTWwtYFG0pSsqWRS -00MbVXUgJlT0tGVDC2FO11U3b+5gz+nrK4cE6MhZObN0XtvVMK5VSwaEYpytoyVlSc4lbPV31axq -eptdBm7NjKY6dclQFHQ4Ri4/GGRVHwH4vjPKt27YaqtcSmr6ooqRv21llu07abAdOwW6YmaVTyjp -6fN6dsWysY0xJaEkjLaVvNg2MmAbVjZ201FH2LTXIFYGWGVTSkrqGKDNd2wczsV8/KPxOubuKB29 -bCXmrdlrMJv2tlZXfwvZ3FkXp+tuSxlUdMAXB3jtG7b29jVjHWJCgAx2tBS9WTMQ8necbIpLTS4w -Nxa/GOdXeh9NtAh2J1t6tkbq6avWBuyKqQa2YiRnL/SjotYvZg6NNrVY+ciwgS5k8LyBWz8sFzHH -1E3QuYtaB449pW9Gzem7mxf0wm5jKzu5tjD/7pS6ibQ11S7bAjB/f67DsD/XKt8crWMCNZs/rWUV -bg03MQ+maOjdcSJkwdJeN2ns5bmsQtWag6+Z1vXy9ILuor7W7vi+5q4oK59baGogeU721uRt2rtE -u6Nc+d54m3Bvqom7MshEbo3XEHan2hV7012OfRfXvjPFYrj0qKQFHTZrZbCOMmlgw+xCZpytlx41 -ISMmbAI9vDrIxi7ZapHT/Y3YnTFO18EMb2BnukO3NtImXhlsapozkHIXLTWY1ZGO7h2gr3f+pw3Y -lHUHEbwzhM3dH2fg9yfbFdsTXYZpNSltQUcr2x3vUOxONHP3xtkMl4EBGVMS4uZtVNjuDINyvFjb -uT7CIm8MNbH3ZlrE+2PNrXuT5Mr9CSZhzdHZPtLHR9uFKoKxW4/paxEnyWgNn8a7hMh5mZg5JKhP -NLYwPju4TTEzoq7SGbmS41QoOQP8luz+Jry/rRkVdzzWqdkbbxevORupIypmhkVanzbQJ8Zq+Qq4 -uLkrkofCvzDV0DNX1dyWPXt767ajDr2ga4ROSDqLTO29qdpGfoKqsTeFg2N54POy/yWnl3lv27rF -Wza+bN3WqxlTtSMtYiFS1y0sHBAJykbVshZtl6hU2SpIN/N12CGFXeGUG0V6gbFW2qAqFLOlSeQy -yisKCP2GC2Z5K/DCWD1HUWTn9kBciib014k69l8z9ZyLrJDdiTaxU9JRNNApAVu50hJHd2vGvL6m -YEaDi10yUAo27U11a0Bfj6raUYZW1hdDDfn9KJ+VrW+Gx0z3MSoW+ltw84ZG3Iq1mX040Sb9Nteh -B3qsesuKyTmebuBe7NGyo7N1qK8mT8vBfRSTCc9sAh501shlbzrbOlbNtRUjYla6s4scP9/HzFsB -tK6Zg/w4LqAkTghxqXNycs62s7luxdpEXjA2wGc0baghGadkRltbtGRpxCyZmTDA66fM9bPynYqO -Mr1UgZO1ibNMPdx8u7inwsjnQ41iVY2Br63t7zbWcCm9Ee2ohg9OYTdqwdjJWLE34BadTbRFQMMu -2ZilmyOs6k3AS6w6a1BLDkCr2ZoIwxqt0Ko0iQc1/UKzuBfGbxNHNzdKg1lUwXtCZdc9QkXzk6L4 -whvEwmp/WXtryaymGb5iacIvD9ZWz1lpxXvTTbyL2VeH0+2a7YnamrWhevLSaCd3wtZOt2u78Tox -r9Ao6oEMiLthU4bumkmjoM0m5iPsQineIpA1WcQ8woiqCTuho4BH5bj4NWszdXu4R7M1Lhzen+Wa -difbJAdTzbzT+cbuYxeT/fd6neCvlaa+s/lm0f50Xd3meD1rwcHtmDLwW0wdrPgpXStlwtDKGFQw -s2etHPbeVG3dkhUPmtGSclet7Z07oz3GzeHW9hlbY/WklVfn0Okk/YLhekn7GJpX78hoY2iC2nGC -9yKyLFrG6s/oYanDSZgu9wow7Rm9pMGHR5Ul85g9qcbOttRhUVOWS9tavTEidCzYhfIxUy9HJxdU -SSX9SLFksr6LNwZvZCi8xQxVlIFjgJnaFDBbe3eOXaBEqFr7QcIac0IdxfgFnIV/VJiIfoAAN9xC -gdhXpYyOuA17r3xnmCuaM7QxHJK6TLOYX6Hka1FigQ0n5DtxHHZ/XANF5dPCGkjgcSYrOWxzMo0o -9y7Kot6DZFHvRsRgfn73PuuS15OYH1L8iq8yynsDZPW2IiuvD7FqIGXvD1fn7YwQCsd1NRBlR28q -v0YTyaPLA7prhYEqgapExe1OdUp4iDm9pGtMp+DphcJSaX3HFwm57SOnqvpNRUzYb9JqZNSsWF6/ -aupq3RrmSo6m2wCPwaAvqqCBG0ZU+sFYq3jOoZ6yypVsdRcvq6+5OUzW0JPikBrax/olzdOGXs6I -jAsTNbSEMqDQ62IyxcfeycvoRNAea2s5KbOKbuaKjlc7La3NcikZuWMCZOhMX2OFXaFssioFGKui -F6PltyZpuPXB/YLebBG3P4/HG4Wx8JJ3xPKa142Urrj2Zm0GmSgOLMoiPc9KwjxPjKm6nZtSfb84 -A/6uGdcU2M/tSXXqJI3TA9zGZUC3LdkoxbMaXPJ4Pwdp14rpWpGO0NlkAjcw1GlNDGV6E00fTCBa -3pWj1I9AhW1X0lNqfkxNZ/748lWYm8fzkMt5WcTr9CrWqx5WU7hZwiufNHQx5wfamGvWBpZLRyqY -MTAKnHpJs1qtZfb2yvK7OmQpXVx9AadOHVlLEn9hEztjiXB6SElW1duqfNqHgjTC24xE+CNQav59 -YkXRY1FzbUBfYytY2Sai2JXy7o1xnmwd0CX7k40tZwvNosOZuoa9WZ5+e6rbtDbS3Tfr4HFGLH08 -tVROkPAk+fy6zhBlTx9MKVLhxRxenIzTFmUQtSQbhDWJk/oW2u5El/lwsl2yaG9tNmu0XEmfg80V -L7Cb2hchOKrTu7RSeh8NlzxAlPJvZiTif44Oh/+Wnlx/JSNf8utrf6TbwxdpP/j7QX7JTa7+vQ5b -/1Ld2ZE8ruLhpoxSqbXfrJEph7raxUNoVrsrk8E5zKLWb8VVk0beYqs0T0kIjTsZpX2OqxTdh5UI -noLyOu+Cc/nXM3K7fvHwArs9f5HmFh1F+xGOMD3htY3BxnVa8Zqd1zWlbaocU7cgHRpJY5/C2ljT -M1tYzZ4PQNNmPYurjPdTs1t/y87jXwMVyK5mZvMve/kjLz12T3PzCsJd+vSF4vbkHcTttysf3fx8 -Yb/k5zbeJMB7n6k7uuJnzU34BXsDyShtAUs6FXmdTbZ0ds1AMJlm9WQ1LSez2ItxzU2TGXV07Zca -kiKoltrvi0NKnmRnMH91fxLww6enwW6JAaCreck4dxKU7qXv1GGntXr5kqWjadVYi9tx8hSrTtm4 -SW9Q8QUjeJ5gFNXZPV7J61mjdHUvkVqbBhKbWf3BjTRTAIli8yrKrfm5IA33W1Em4V5SDOqXD68j -/0gLy3bvoYlT+GTWSykJ/EBaHfbbtBAdb9IYhBLRAInf60Q3do2D8MzBz5BS0ZOScpl7NX3St7hU -edvrM+SHjx/zLmfkca6mgfi/vPOEuN19EOd2/0mKm38k/dKDN1A370D8Tzis6WOvcIji1Mu7Fwa5 -PTMD9WiHRtAglzlbO3vnSYzm2aTyavOz0Cjqzx89iy9HhuN+zQFJf0/MFPwYFEG/9Op9sZtfKOlS -QAz70oNXJW7uXgS3TLDxt/JK3SMGUfpB2i7JUXe2JQz3sVJH+mgJlj4BpqtntLquYz6f2jweVUUw -uWcXtN0rqlA+gFYY7kRFkv71/l3Opfv3gt1ev0p1++SLcLvxJM/t8mV3N3f3+EuQUtn9iPia31+9 -K7qakEh8LO4QFq0Mt3ceTrX0bg7WMyY1zWV2tbZbrzYLlIqhnl7xBJsn3mhgNk0nYYi6V9VYpQeJ -av+MIVg+QCDdD4P9i35PSiJfi4uB3UqKznCXtLALVkwcwoKtFt2vklA6ew3FrPaZdELDfGgpZdwj -tUR6NTKZ+kN0Eu1ffuFVbk89c9x+veXj9tojwy0wku7m4QN3u++e6hYfi7nMIks/SjuVYIecW2kT -NqSaZH0kidRMbuoeKaRwVhNRNSvelbRxj0KM/U5MZuu//EIQbuExlB8SUpr+FRRNd3vqVex2AzjW -vZfZbh980G5vfQmX3vphfiwoar7N79BlWSRi5LyBV7dgEvBGDT2N/bIOMF8syqXyRpPAhMlHOfDB -axml5quRmV0/vQ+lud18BnZ78abYLTiKdelDEMXt8ftKtxdeKLeAuKZLvjGcH94FMS/7RdZeQQK9 -KmjuSpi1cFvnBppqHPqe2iZmxycWS+XHrHeEIIjDr5LzRb/4RrJ+ikzt/C0+reOn1+8L3T56l/8Q -Ecf6MSyl+dK1J8luv171c3v8Mt/tdQDW7dYT0CW/L4RrOLwmQiMc4s4Z1JZ5Y1fHmKGNqZKLEHUc -WwKraxVCF+zBKmuWvaDYoSdlmOGnxWWGmxnZXZdDousux6V0/uT7BXvpzsNYt3deELdXH4vc7jxK -uOQXCP+BgRe6C2i015YWtO+amQVX93DSunnK7IaO0Uxc83I4cMzPcWDJnXfBxJ/fBWEvRSY2/xCT -1Pwvn+Dqf911z7z0KRBzKQL4m28Yze2hB9jtfRjxUmyR8XIK1PYHijER2M0zgKyKHtTycJdsfaZ7 -0GDW9HUIZyn0jrVsVN2ML4LkfAmt0N7OBHGvfPKv+OnhS9ClZx9gbi+9St1eesLcPA== - - - Q4g/eUbV/BSYKvgppcRwG0Ed+9jQNpEl7HbAzQpV/ZiyqWjewII4JaQoSTPTs5Ep/cxuGU2mtS+m -Ilgrn9ILZH+Ex7MvAz33Q3Bk3aXPASS3V+9K3dzfFgNYh3fzim12e+5L/OGuR8W/Xvngf4jKkP6a -BHM8zoFJXnc1SzMWLPXMRX11vEtHz7FLO4p7mvsSWtuGQfXt0zlYxrBXGW7qBQQz/ii/YuB6fGrn -v958Rrp9DCD+8DmEcun63Vi3P26GXIpMbvg5JAp7BZSBe+7U8PHzZg5JKeaXCMT9yA7ROKaeO5VP -5czHoVhjXoVI5f2otIbfguMpl31jiD/e9ki/9Mu1z24vPKFAvTF/SM1t+IOI6P4i7uwvt6nE5AVT -M2pcTksallGTbfLadEVfX2VH7yic1WqPxTMVbxBY9cNCxMDTwKRGgIvKf3j1MdUtNavp52SQ+LfQ -1PbLnqGkX0JjWTdLoJIXZILgvayjzn+sjxk3pyEnrpgZEJexETOlqy/TidlxYkFHEldsrqjljmXj -GUZvHM3kiSBb36SVyG57R1F/e+9f9mNIDOmnqJS6n+Kz2TeySrse5aKkDytwuhcMmv0Lt96aru1S -I1YsHLrLVJU4Iq8Ks6nbkPwOAZjbpStvF9hKazi26FK0/ElEeutVn+janz8E4i+994UD9VB86dHr -LDfvUPwl72i224MPpW53AY7yjG52i8y3/ZxbbnhFrbWk6WQDLYtmbuuYojrSLoF/HlSz82QyLbaZ -P1hQK5wpxvK3cmGMuY+Flabb4DLttcSctl/uPM92e/Aiz+31J7jbE48it7uPU918g9CXElI5P2Xl -tP/eQJH7W3s78+a1rIIlM71Y24H300t64eJefUVNncqvpmMum9y5nolgz4UWYLTvsku6HhZXCu+X -Y9XP4gq6778OQPziG4a8FJPReDkqt+N2fFHrq0qK0pvVPBArFNmwQ1oufMFSW7o1Vs/anW4RDhk6 -yXKlpbmzb4Je2zUCorM1gVSa+D2ttu8TiiTxyCsVeSQXtL5IyK1xT8mrfY5kmQIraswh6Bp9QANH -FqpWCIosaj5iUN2FWrB01M1oaBnzOlLGhIqYOKRkZUs7muME3ZLcbmF/IZsjDyDWSN8iWQbvtJLe -J8FJbbdeBdJ+ffi25NLncPzlyJzOG5Gg3ps5uMGnINrwm6xq+ZuqGkNmj3yY6TDKaNNqcsqMHOq/ -asIXbg41NUwYOhlqdX8bT+akNwmGSqic4XBkzUJgCX74eQF64G5qofiXl55ll36/Gef2+BUEwGbY -DwHx8McVuHbf9hZBhEPSVrxjoSBdxhaCTaPi6dX97TK5Gt8r0BZ18Cx5je3mJFajIRhPVr5F4uTv -ShCSZ7HZdX+ExODvJGU2Piuu4H+oY6kSzV0DtFGVTrJkEwgB/40d7q30MbeB3EfE5b5DmoZCrUqK -6+IJU+ikmhdERM09Nmcqs4pm9wWVdT1NSCq7gkK0Pqgm9r1AYKRPcURVcGO9PEPC05QYRD1gl4kO -PhgkQw+HCAVbA9i0RQ0hYUlLTHII8AEmcVOOViNnKZQyjEggyRF0q/J4XENuXb06AE/tfYvEtr/C -4Hre4EkCv6bmrsj27q6Qzh5hTF+XstgmVZNd+l7atp1DORplEVatmIx5ExMxburttutUQqNO0axU -i1BcbmtYXW33RyzV8B6KNb+Jy+HeDomr/Skuq/U3v8jqywGxuB8jMxt/iMhp+TkK1HottUx6s4Jk -9+rpGSVYtcbWYVljxbaDgVgZwINWzCTIziibNmntIPf1NifweLz4VukkoYbnAuFrnQEohu1jOdny -NjC55vrd5ymXHr3IdPMJRl36Elv9ew648TESIfZooKmDjF1C8JScmjwlhfuvGCj5Lg2raNHMwY5o -mgr7uhh+QpEayuNbINwuYzZPZChpF6jALe2SqGaeMoHR6UipIPX5lyEb3bE0gSe7ywTu6ZNnKxS9 -BWYtHz5h6sQdjNcSvy4wmX8us9vO5uuax9T0DLNGSNfq1C1anYKhFPXkynjcBEl3R1wvvydRINIW -C6SaCr5ICenq0ub09NnIvf0GqkLNh6g6q32mtcycBXMTZnGgCbdsrkfZuUifZSMNujHYyFobbq6b -sbYx7ZrWMhWfGsWvhz7uasa+7hTKMxmt2qgqkuRVGdOQmY/qiIaT+GGkFlMkqcUQXsvVRjTwFGGd -EhXIaBvQL4x292wN0SrXBuCxm3Z82cFki/RghmdbHu5WWA1irlwpqhZK+oo7etRZbcJROLvDmUrh -OGLgAK5mFLY/jMpieqQV139G0huDuXIB1mLkkUZkhITxjhxfA+3Li2UjMWekj5wzoWpEjGk7q4eU -LSU2aWehXc4rs0i5RbJWTpCkTZIsatfm8tu0BbJuTYW+R1Hq6OWDp/t4FavKNsSetb3pcKSlfcfO -rJiTkVIW5ZSiA3sde9tRg57uZ+Y5ZA25eh4jTttBiTRpNG3SPkVFb1dPoryzOdrc15xrU3ERdmUX -csbU27jsaKWt2DjkDUcT5WC0se5koqF+316dMyXIezXBA79c7SelzsjJ8bOauuIJfSt2UMHMnDZx -iJPGDrpT3QBStFe6S5srnyrb0a+NopaMAWVP5bCGlTmqJEa79B1121ax8cDRyDx2VmfuDpQFr/RX -hcyqUeFzehZ0ydmrW7T3qid1HPSQsjbbJmNlmMQtebLu3mxBS188p1buRyRKPWhMgy+R0veWRGl7 -wWR3hTS0ypLbub2xIkFX6qRB2rrtlBg3LM11y/2UgpOhltbz8Q7FRSbA9gA8eUQAemfhFbw096B8 -TVIRViowYzqBWm3rtVe2CoeQ1Lpe31Io9hoUDL9GxtKecloavfuEYohJKqeMq3vpiypWzq6NVLhr -JUNOh2qq54XFX6z1MY8c7fH3nJLiDyPauqI2cvEnanHc7ZH+GuriWGfPpLGh3K6gJ+oF5DAtjxxo -FLOiB3XNMNdEE3N9gg7fn21oP3U1Cc7na1gnozjQ2QSh9GSCVLXrJBTMaYjpM87OjiGToHnGzGXv -jXHatgdbORuOZvqms656w8koXRqg5C+aqXlzJg561ioQzNlbGOsjbNK6g0VZ0FOz16y04tUBbPaS -qjx4Xlr66XCQivk2367bubjW7qCWLJgYRRNydISrvzR02UIpmjS34QFOL+/rYATaLNJus6o23Sol -htjUDTnDlg7SjLUOPm9ml21PNHNO5zl9O05i4YYVl3o0XcM6W+QOH8/znPtTjVyXpQZhkdTlWSTM -zDGAD4f1fNaAphOulXEhKq26XqQ0MPuk/SS1XIo2qZtBg0Zy8vpUI+dgvK7RJYcGjnBSHozw8sLn -5SWfDazsxyOt2OglZTN2RUMvmO9DfhnuyHUf5xa9XlbXFrj6OcihPmZeH73cc8fQ1X4y0iE6H2WR -N7WlwUtSyPslOcRzXYeM3DLik+fV2BQlNePlXE9p4l8jFPiRDZm4N4BL2x3AZRwNkcs3HJTiBXMN -dM3RdpH7qDqYqCEBvZ+7aqgK3xpAxx8MkgoOHJSiwyFaqaufkLxurqk4H2Phvo3T0edjDNT2AD53 -tg8dNiVEB07L8JFD/OqgOTU5e0GDT1tQY2O2LeTCixnS6/3IiCVVVeQCsPZzkiqfWTE6aEZOz5jv -q044sGCzjy6eobFTS46HSMW7FtxFrmn+4SATsz7AKltSs8DTUkLSlASfO6/ARI4JyrzHBMigCSkx -alLXhh6Rd1QOS+rTZ5S0lI0BvnjV3M7ZtJLLlzRFXxZFae57BlTG0WAD82yyhf91ok1ydjFnygFP -WlKUBO1ZarCHQw11hyPs+o2BasiimZg/Y26nTJi6auzKJoipA+O3oK2FbRrZVRsGImTZUJW+Z8OB -Dxx40KGDCQeOJz6bqAd6nV6yqMJEDndmvF7TwOLPx7FFB0N05PYArWJKCPMe7ynyOZ5i1B+MM6pX -dQDfKDDxC5LysAMbFnyR33E4SCpeM8JDVvXIiJNxOvbbHJ22Y4XHD3WkPV+4mGGgKv2yb8Fk/T1L -xe1NM8mTOmrWuJyedT7fJNrQIaLne4reTrWBX9rrs57P9RR/ODDjsk6GmKglHQliasx+vKBBZG9Z -adB5GcxzWpjnMd6d+XxOkP3y3xPEiv/O1jT+PV3bdjRMKD+ZYjG+LnTaTicbOlZUJV+mO9KejXdk -Pnf1FXqdTBLh54uNot0xBvp0hob7z3pj37cZdtuWoSpvUZYbMCdJfe6Sgz+fjxIg3yfJlX/Nsup2 -R2rZLj01f91GrzycalMcznUOHM42C3fG2Kw1C6VkWo2JmlSTsteGO0RLzs7OBWsdcmmgtmLFyIId -DtGrz8ao+NMhMurYigWdDeELvq60DSwKC17tqPGJAPZntKNjnmlI6a/3tJTMTWV17K4On7rUh4te -lKFCZyTlfgZG+sMDXR1y11SDWVPjU2Z5lYF7/di0Exsu99henbGmKPa3Nic+4BR8+snKzPz8zxi7 -5tsIFrShzHmzJEp5sKUp+LhrQsXt2xilh4464rqeUryiQfzvPqF9KxF0aMekrmsKfBal+R/XgD1a -VCJDltTYuNNhasWxg1S8b6EWbhngcYvSUp/pnrL3yzLElx0TIXtKWOo33AF+tqTGxM6Iy+M2tZiY -DXm573R7+t15bvbDue4Cj3ngPUtKXLy5NuHqsgIWtTvAgM8LcQmb6ur4RVGZz6aqKvTIhI47MKJj -XeJSz4H6tFsSTMyVHR0x59tYfe3xIB2xqUfEHjmI4D0TLnVXh4k5sJILRsQV8Zqa1FcXc0Tme6Gx -W0po6LGlPPrADInY6E8P+DpWDTl0EHKPHLSyY3s9Y8/aULtlqUG6VOiYdU2+364VFrc/xsTvDNfi -XRpk+KoSHntgJRStKsu+TLTnuY+1Zbjv6WEh+8byL8dWXBbwWum6Bh2/ZcQl7zposCUtOvlokFR6 -PkGB75hwWVtaZNShuSrmnwlC+T/zzFpgjbO3BxpIhyMczp6Didi34MDruoqwTQMyZl1fFbNnxaRs -m5Bx6zp4+KIc9vl8nFZ9NIgDHzng6fsDsMTjiyxoQ1XUnhmb+n2yvunrDLvZpaoMXFGj4g9stVSg -b5E7GlTMngYes6eDxy5Jy3xXlIiwLQMhd89CBh1a0El/j5PLvw2Ri04GUInzXWmvV8W5nxd6sl4v -irM8/rPEqPs2TaWu65Hxrr6q5EMbsexwEJl1PlGVczYGB2+aKtN2bZiMi5kr36ZrWTsGTMq0MD9w -QpAdtm9FQ8/HWayvY/iK7f6SiK1+iO+0DB6+YWOhT6cbO/92cWQnM3WNu+O19N0hRvWerTr/dJRU -tu8glezZqch1MxmyN93QfDDT1LliupiFDfu8JIF8XJMWf9q4mKNjror7Z5XVvKstDdjSVIWN82Ge -nPKgK3pqzqcjPatkr5+cfmAkZc31ln1YEBa/WZKWvF+Vwf1WFITEsc4yz6muys+HOg== - - - NuK7vR7/DcDiHSMsZLAp5tYQO+rqWFPKwy0FKnnPxCjf0MKDV/vA71el+e8OjeVhJ5aL3MnS0Dlh -UcAUvwBYp1KvEwcFeuKklq+qSnxdwqT7y5KMF1vaYv89U3XSoQ2fs29GxG2oy/33jHRAwzEq19XI -MJe4zBPQi88HW1Kfj3XmPJ0RFHmM8yFvu+GhN9akiLAdJTJ8vDHlrh4fdkWBCvldgw27OtqY9tDZ -kHRjQVUaZuVBQoTwmDvHJnrJno6YtamsDFuR5LyfaEtwd7Cj7ww3xl+fbM99vqsj5S7Lq1KXgHPe -7K8I2zOi4tZlZX6bfeU+q/KKUCUz6QEfHnDFJYIl/DXS2HhmI0FmurPejrRE3p/uDr1/aIH4njnR -KSc2bP6BCZtzMcNhx1qL2jbVov8aYeC+T1AqD4bI0P/N6B3AxJ84q3MWJMUfZ/nFb9fl1OI9HaXw -xIJM3O0v9l2TFnlNdGQ8dfUWfQD6JftwhFLez858MCcp9T8dopR+G6klHxirk/cMFRF7ekjoujzX -b1ODjNgeuLjnsRYzI0OGLcoq/Nb6q6IOnBTovg1fsCwrCJzrzXOf7sl7NsUHvfg6RUGvaqFBaxqw -90Z/UeCJA5tzZsfl/zVCKPnvLJV44kSD50T5Hpt6eOrX8frGPRMxf0uNiFjvg/psKiFe29qK0LNB -WvmxjVi8KCz0P7aiEoE1y1jpK484MCASFvjZXhuKorBlEchrR1UccOZAFazICgJm+PmvTgdZtCMn -DX48hMrYd5RFbeggAS4JxHvXjEo8GsLlHjrxoCVZyeezSWwpwHuk79M1jH0HpXJZURY81ZXtsaOH -hh4MMWtOJ2uZ36YpyPNRbPH5TEPb4RTX9G22Xfv/XKyGb8OIrFU1xH+xr/DTpg4eBvAY+WiMjlvW -ApihQ8QeWrFFx1Y8+MiGz73IAHbJwGHbuhKfEW7G/eH2/CcLogqfbTUlc12Bjl7gl37c01Bz1pTY -qA0lsK6ykg9rCnjgZDf0rb0BdG+hFxF4amEhViXw4AMTJunQWp2+pUYmf7ch0r87SkLO7JUxy2pk -6Gwv9MOZjVJyPIDPWZMBfSou8HDWR99QYD7/ZGGEXzm5uD/eQQLZRCW+EnLqzVMzAfzXCA70fRST -fWQvj1hTgt5Pt6feneak314WI4KmRIToSW7pmy05OnxZUhm8Ii+PWlNWhqzJKnxneOAXk52FXpty -YtJMV6VfD/TLZUlpzBUrPfPRRGvmi1Ux6N2+ERG/YUBG6RuzX4kQ0TfOL3Le5cjI0db0e6Mt0dfs -zOhrw+yUB2tiyOfTAWTcDKAj1ISo34Y4Ge7nY8TSKQHorQwb/buOkvjHACvhDxE88Lel3gLPPQMm -fQPg1DVFVfiqHJW2qSFU7ujQGWpywB9a8qcbg2z/63O8lIcHdnTSjomUNydAJy8LyqP+O8Ukn09Q -kbu2iqg1LcC30rQPC73ZTyc7QU821DXlLhEycq475+myOOf5Rl/B28G6+Gt6UtgNQCu/c4nyPzub -k24uS8sCDgcoBUtSgA/kpT6L4pKPLmH+m0153qfvwzjAExELpyVQPxUt+fq6DpdxMkyD79uJIJcU -6j3eGv9kQw7+uKMo/HBoLgv5Ok6A2ttSX49254X8NU5DnTpRyUCt5RzZqxKWpRmvXD3JjzeVuR/P -hxHZzk6wP7vQ/8mRDVv671km89/T1Op9Q1X0hgLgwNZkd1nlx8sbuvIQZoH/rRSv+7+YGzJ9/jtD -w/85SijekBf7OchRd3SogKsORtTVxV4wcEwSbLQD7DEjBPt/nyJh/llg1h+YqtNPbdWZOwCXjnUk -PFgQZ748n8Eh94cJiGUVKmbXwkIdOBrazkaZtf83QyP8NUyo2pSDQ1ZEaR4TLXF3/rvY0Hs02tC1 -ZSZXnAwSik7HMAUHTnTBoR2V9X0CCz4fRGcuinI/TvOyn58M0TAXM9NPBi80Cz7jYACTONeT8fTA -hkndtWBTdwzomG0t1HddUfhxkBN9S48P/21Vgk2e7K70HmspfDbYBHpkrwfdn+gs8XCJUAFLEkzI -shgd6mRn3p7tKXm/rkQEb6urgl3ivFdjbXE3RznxNxcl4Nf7BkTkVyurcl9Hzl4UlX/a0eITdnTI -iC011Gtbnf/uwAAJXZaCPw7UJt4wM7Mf7ZrI4Lnekk+LYpjXqgzms6MrD1rrg3xY7Cl+6xIjQ6Wk -tDv8yojf53vKAnZ15KxtLS7RJSnzsdem3jJUh/y+zC9wnxYgvSWU3Mdl0W8uGUj5HqdGKmhXCwsc -b0u6Y2OHXzNSI645G/JebPXTQF+H62jb/bikHR02ab+fDt5VEOLPTeTcDVl5oJEeflWJ97881Jhy -B9h3/1V1RYijMfHGlqoyGMDrpA150fvBurh7s7z0D2vyAt85fr77FLfA59zR3rmpbmePtaH8hxor -Ama6oEHnNmTK8UBZ+KoK/GmCl+fBR0Rc76oIu/nXOJt1dpFjZYR9Mdb73VNgPl5fEcbf39dfPK+K -iSOkv/rR3JDmdTpMhGzqKkJUhKir2DiPX3ExHj/LK0N/WRVBAE7BZs71QUMgUU9/neqBBP8b0O6n -zqrUNXnWm+nO6HsW5perErTXL4NNcXfXtbgULSP7gYNT/PHc0cA4tZIK97QQf1dP3D0V3utXEyP+ -uo4ef2tZDgvdM1UlDLdkvDwdxBedDgP6TwH1WwHwf0MOCtzVFYSPtifeV5Oj7x3aq7MX5MVfprip -j9blxV5r0gr/VVl5wN5AZdxKPzxGgIy/zs7y/RHo5eRdU1XOnDD39Vwv+PUisM872tKQXWM5gN+I -jE19WYi9LvHOZFea1/8tksnfpvBQgJ8/XcwpHG/Nee6sT338dZKCPgX4zNkF8tHTk26cjdJJf88y -63YNkLA1Wdqz9b4CvxUJ2HdfXxJ1ZC2N/O8ClWDpBEdTwb5/jAnL4v9c7LCfTtS37JqqM5ekWc+s -zLA/OoveXrE1JL45HSchWKCPV8Z44OBTBxV65iAXHuohn4/s2ByA3zMPBpAxi+LMp4PNIb/3VLz+ -QVTpe2VGWhXejk2+qqOBXi7LcNELUmTAjAD63lqf88xSm3HPysq4OckpfLGixEbaOAWvnfXp93cN -mKQ1KSZiXYr8cmisDANqM2BTCfUBePftWEvWvS0t4HP0+OQNVXnAFC/+1nBD8O92WtRvY7Upt4DP -hI+JS/2FqLBfR5pKfIGaBbmEkA8T7ZlPFITIq03Ffr+3gD1/MlATb0wJYJ/UNZnPdIzMpwuSioCx -9nx3CzPh9kR72hNnc9ZjBSHmSjc05PJgPdxbw8p6raCE33L1FnpvqStjdlSo+N1+YuaGGpG4rYOE -LknyXgJaLmRegg5T4dOeufhlsceAl3aJCj0Xe/PebcgKP27Liz9ZmTHXVOiAKxf9ttAL9pzj5jyV -wiPuimF+18bqYu7ua6EB3534vBMbqXBOAP8yVAd+sqdsI8/xUDE76vKIbU2Rz3hb+rOJtsxXyyIo -0OOE1O/jdbXbxuq0ZTncf0mEjdyUVPjvqfI8VsXZr+b5Oe6TXND7TS25bFPPKh9sL3af673QmfiM -qc5SLwct4/p4c4H7SEvum5HWzGdD7dmvdwyEol19dcY8H/xqtjv//Xx3ccAcr/DtLDfj8br0Yn5a -ts8IJ/3hXA/E+9jGRFvrc5+a6Qm3ARz/DPS4z6qsMnhZUh64DXiLCT74Pa8y9OaqEpm4qcMmy/CJ -t9iZnj/wiwMv63BRV50APkzzIYFLGnxmU0X4fWqWx7/Oh4iQfTMue6K7wNtIi3pgYcTdtDFSb9kZ -CbeOrMgsGsjnek919JstC7FwvZ+YZmcm39HiAY1PCfnD2RB11cII+HVTnR/273kyatOAijm0kYvn -ego/zPFyPizw8r1WhYUxAOYHjremv5zpTr3/fysU0qETDZrqyXff1pdFno9y2s5Hmhr/PceqORlG -pAIeIGBVC/NbUEH9DodpuG8zLX1HDgJ4Q1sZumuAhR+YKxJ2TRXRgKeBngEcw0f6/T7cCfI5Bvzj -gZmYfVG3xw5C/t4AKvZ/WYeayog5ft77waa01xd4uKTFJ4oY+fdtDTDfLT2jaEGO+DLCzbrfhwv7 -VYIO+dnGTr8921X22SUjxGgunsOiJd86cdZgdoHaXhJW+Y+0JT6zsL/cHG9JuTXRlnV3qgPsviiH -hzpb8t/Mi8qDXCLoh+m2zHsznJzHa70wz20NImKYm/FMgw/+daYd4rvbT81xNmbeGm3Pe66mpj1s -Lg69LqkKvT/FhfgsKFHhUnrqAxU57dGyAh032FbwoQ0W9BOv1O9HGTr0Zw02/OdBdsa9iR5aIrs0 -+loTLOj6jo5QcgJojG01HPAeZX7j7RlPp7lpD1aleS93DRVhw12wd7VZ/j8NNRWE7AOec6wjy2Op -F9A//Kyng7Wxt7sgn4FjB92YFoHfdcKDrqow0Xc3ROjIuTbQyw1xzqs9Ndjb1RPvNdEW8dJRF3V3 -/SLTSozOoOd4/yHHRzw9tmBL9s2YrAN9Rfh+f1nIlrLiC7BXyUOdGc+snKyH7ZVJT2XV8c8OAF0B -aPsvAE8FnFtxOQd6XO5cDzRIR4q9utWPSV7TEMEjbcUfRhrznk60gj0cdemPp7k5r08BPbRvQqWP -Nmc/Bdb6xZGFCF6XISOm2nKejnOSbk1w4q7ba4N+H+Mk3F4CvM2KBhldX/jllxZI4M3lvvKoEycu -G8D56NHWrLdWdtyLqS7Ap/BhfnsmevmaBpeiICXdEFXHPxhqhQTM91T4r0jLvCe7Id6WRpBnW1nw -VR4i5NHxIAXqkpUFaqmJt+TI0GtzbdlvNqUlPpt9JT7r6tKARmjItf66/MhtBwO1KMdEONg5T2zs -jPcjnXnB80KQ97YK5P/XKKrw37Nk5JIKGbY7QIYAmHhHAPG+rEME/zzZkPJopD7lxXhz6vMdbd7n -/7gIlQtKWISGlXJ/RVuRsGGqw1xkspyO4gsPnJWRG9piry1DWcjxaDX4rwV2y4GTWLbWXxpyaMfm -/WeeQf02gS3aMhb5bxnAAYvS5DfzvdnuRw58yfkIs3rPhE0BODLj6CKLxVAdf/EbzYmThTq2kPMB -bR2/3FfqPdNT6LEgLv+4LkdH7ZhZsEUNIX5ZXRU63V3yYawN7L4ihwftAr5+vR8ROsXLe7YqLPH+ -Ot7ceeGtl0RwP3tD4l17Q9TdFTHMe1eLTT63MaqWdZgUU2P6/TlxVcyKhphircm80Y+PutJPiL7e -hwm4osL6/2Slxd5YEVSG7RloeUZG6p2LOUXbBgpoQYgO3gC8B+A7A0e4kNejHUXPV2WYyHWA6MYF -6CBHKzZioL7Ma7yt5MOCAOa5oUCGz0soCYMdpR+meiq+nNobWBt6ZOSGEh6yq6FBdhQM2LKwwntB -AHKf5We/nOoGfH9bhd+WjlY2JUYmNAH7IoD5/rrQBXKf5ua/HmwCv5sXVobMK1AxIg== - - - YgqAFXF39gzo5OHGuOvjLVHX5nipDyYaw26vilLf7qihcWeDdIxTUO7XAou4Zmbl+fw93sjdH0Ak -znIzH021pt9Z6AG/mOMXvRvrKf5k4BS8KIp9/1Np9Mtb3wdx+eeO6sx9Y0nwYm/am35cwDU+5NXl -AVLg7+vaipCm8uj7oKDnPw3UZ3/4PkiA7GtBnoe6bM+D/lxPR23YTSX887/GmtIf71spxTOCMs9Z -PvTzZj8yFfDOmbs6VNqeGZkM1EnYOL/gHb8q+nduefS9kQ6Yp5Sc+GRaCPFblZfFLEmLY06s6Nxv -FxnuNlrpuqYidKgt7Y5LVhGwIC4NXhTAAE5GR+prU+6pKdE3prqz3+xd/Laix8QPdUJejHWXft7U -o1LWxXke023JDyY5mQ/neLlP1lWlPkdOQO87yLAJXuGrXTMm9ewiJ32IWb2jR0RuynLeTbeHv5ju -SHq1rUPFbJsIWQM1RU/kqPRrSwJ43F9jzJqzQSp8W1sRPdIc/WqoNcN3gl/0YVZWGnE0TKe41DUV -Y10lH/ZsyMw/58jo/7io1P8sUEh/zmAr9u2IzAlB8uPhzshbqxpYqLkxI8DZkfZxb7C6+HCYUH06 -gqj4e5pY/XWiGrKmBnBAlP3scBCZvNJXHrAqQwVv63CJx04qdKsfG7tvqk7c0gAYJ4d6HZtRcadW -Qu62npK9JMdFHFtZ8FUFJmqyvfDZbHeR+4IE/GqQE3V7iB15Z0cKDz0eYFRMd5a8c3XDvM6s9NJ9 -Ezp+S4UI3lQjw0ZaM54vKUq85sVgj3V1VfS2hQ5xNOfdt7OzHk60FbxdEkE/b0iQYfsqYvauGpU2 -0Zn7drwt59mBGZuxa8KnryoQX5aVlcEjPMhHR0vR+5mu0s/nDhZiWUPOmupGeq/J66HzCkamqw8V -5JJAvUZbMh66hIXvNgF+2tFhYk6cpMI1ZYnPmqws9MBUj5/twadNtcFe2WozHmiIoTfMtKjrJxY2 -ettaj52S4GJNzJzbOypswgmgS4+d+NwtY3mIvT7n0QAT9Nham/totR+dsGFGxa6qygBuxuV/G21g -f3XQKyd4oE8idOj1flr8nTkR5OPeABH8baSB/e1ipqe01GtdQ8g+tjfV7puZsNkeeICtpfSToanE -oxud+ruVAwG0MA60qsx/syTLfO2S5vkB5xu0Lin+dKAvj5gRFXhr6al3JEB/Arq2+NSOyVwUpDwf -rQt6MNse/9IlLPBbFII99/SV0Rezd8WEmOuG2hzfIxsFduasztk3IaKH21Iey6r9/+inxj+0Nma9 -cHAgn0yNRW8KIl9eUVCjPc7t8KQ5buaLyeb/1fajkYa0+9Pd+a93LdU5EmaGe6rnbTdK8offt3UE -6LGTUrGuKPCe46e8GGtNvj3Zmf9sXlz2eU5e9aUTE3G7Fep9dVuLjD00kLKOjciYLU1J6II4129T -XRhwZC0PO3KiUoa6oMHAFj7Y1mIST+2V8SfWirRvo9XQb5PkylU1Js7RVOChJqRe39IRi9f01fFL -mqqQWVGRp5IY8URKiH65ZahMPh/DV5+Pk9mzitIoGTX63qquLPM/K8z6v11U/LquJNzaEH1ntCPJ -Y0NT8OVkCJ44IS4JgEa/+40O9n/9fb5BAHia5j9HKjKP7LCwaXG2+1hv1ts5BaAj9cQMoC4/barx -CfsDFNCujQpxSRH+23pk7LaqxP/EBI/c1paFTHWnPJvtzXCf7Sl4tT9Aylvvx6XM8cs8V6VVX4D6 -A/wrJv7IjE7YAbBmgpvrYSBHX5nvggR/G2pg7ZhQMZuqqi/banT0eAv47ZYGk7w3gM/dNZGyL2bo -jLeDHq/I0LF7Bmr+grDk40xH3vORxoS7A7SwK4Jy/1+szOSHe3pCzooclzDbU/HxbJSBPhwkFuxb -qzN3DBVRRxZ4AuAtozZVqLAdLQsyzscGL/Who88HaWVHVkzq91EC5HyQDN1QV4YsS8FvNhTFnjta -VOyampDMRyXcuJgRutmPT1pXlPuu90Hen9poZWuA9h7m5r9UYqJ+O7YS87eM2PRl4DtsGJBxc6LS -kLG2kk/T3BLvA+vF9UdKwRIg7nZNZMjREAt/kSc5wiuNkFMz/UY7S+L/nqHT/jNLo3wdxlftGxHp -C1Ko16qeUjIjp1bNCFHRQ80l79SktHsXuUdjHMj7AyujFMDf2BVlqffpEA15NlbHuMgqmhWA3xoY -sTeUWN9fN/qyPvw5gcr+Z56CnRSVfQZ43fPITIN9G2Ezvk3W0L9P4iEHtrKo5b7cd0uCfI8zJx21 -M0Cq0DFSnm1q0PE7A4SSHTM299BOBPayKsbRmuxpaYx4Nc6Lf3I2jASdDiKzZ7uzPZZEJXEndjLi -0Eot3bfRoHvDDIRdUPypCx521UDPeLqho+Yt9lX6D7dkPRuoTXo80wX6AOjJrGM7qWBTj0kyNKQ/ -tbRkee9bqMVLUkTwkrDw1TAn9YmWGHp3sj3F/dswGvR1mlI9JoKG6RhZz7b02OwdS1XsqgwStiTK -CQD8QvBMb9FbS33Sw1Fenj/gYYr5xMQXfcysT4tacsG+vaZqz0TKXegt8dXiox+ocKF39q3I5KNB -YvHpOLl8y4lO3x7EZJxPkdCHQ/jy81EyEuDSfJe0NGxWggx1dlcFrhiqC77NUPHLssLA2Z7kB0fD -uNKDcSbzaIbdvD1CRS8YKPk7+gvvUhFxZEEkAryXNNNT/nFJXuo3yU1/uKUs8V7qg352NsTeGG9L -vLMsKfY6cdIr9wfplet6fOKemVq4KCn32gT895qiwHO4JfamtTbuDysrEdBXpVFfR+tYGxd5YyZC -+qGBmLEpqQrc1+IyTuwU6KYOEz/ZBXkz1pr7eEONS12QomKdjVl353hF74H++jzbUew71lT8aVlQ -5ntgIGSvyRHhS0Loh7NRauWWsTJ0ux/ms64s+bwLaM0TGzrlzEYC75uoYEsT+NVIC+jzsZmQu69H -RJ0NAZrlf3NtK4NW5dCAwwFsxo4OFb0E4LmJnnT92EYquch3t9RnPRxrz364ri73X1bCvKb4BW+H -OVmvTp2kohU1JnZRiYq4yN88dOBz15XA95WU+ezrMSkHZmrBpoYB2tTRwFPiyqDpXkTQnqW5dt/K -aTgbqmf8s8Bkng6i0tflkM8uAfjNug6TOaOjwYSs/PdyasbjfRMdtqmqTtpWIqL3+5Gx66rKiFV1 -ecCGHhF+PFSDnZGiU0c7oH7TPZXhI50lEa7ewohzR3nK33PoorNxFHiIm/Nkprs46MTOpm+Z6PBd -Oy736xShdMdSHrOqAHkfGsuSv148A9mPyexBRl/fMeEL/1po6DwZpSKO7ITcRTkssJ/x5b6O7vdw -XZH18f9bolH/nCAjdg3w8PNRBvl4mII8HaUjd23k/FUjNsGlqQic6QW/vpiFtajCxY/yKj8tK2mg -jX5m+cEAtfjQgkpaVZYFzAqL3wG18+nESSzaszIqhjpKPoy05T09HEAmAT7Nf1cNC/pnHA87GETk -rhtKg1bVZb4XeVtLQG9Z2dkPHDWpDw8tVYAfwGTsDSDTTseJiP0xGqqHmPxcysjzmVNSC+alxOTx -7iqvwebilwZy2gN7fcab7xOkqn8vsGr/nKGgN+2IhDULMuG/66zmP+coxK1+eMwMwIcOQOsDfO5/ -MEwp/Q54kgMHNnuqB/zG1Vfi/5erUXA+U9+xN0hBLajLvyyo4EHL8qIPk9z4m6vilEcr4rwX60pi -8rahpnxJQc5a0xJTdo1AbSurgvf08PBTW1Xc90Fk+kVPbegQkXuOWswUv8Rjlp/7eF6c/XRWkO2+ -oYCHn5hx2d+chIKLe0g2TdS8PTMTCniXkBFO6i1nfeLNpT7wx3Vtmf+CqNQT8Doxy3JCkq0F7G5v -yLq7b6CDDgz0wgMdHbwuRYXzK4KuccCe14zEyJtrIsi7Iwe9fEZQ8n62M//J0cX/maCivo5gso6s -VfELUsiHXgD7tbSsF7P8Sm8jI/32rgmZcDZEgZ06KEWnNlzWdn9F6LKs6P1EZ/ptZ23kb3tmVAqA -SdnWltI3UwJE0LYRm3xgqU49dZCLtnUX88/APkAd+WzqqzO+T9XX75gB7dhfGbwmr/Rfl1X4nFmI -uV8dLNS+hQwe4oGfz8kqQ46GO6WHQzzF6VAD7dsUwAWD6LQTMzLhxFyddQxww+oACTIiLgua7UMk -fB2ppWyqYf7r8sIPq5K8l/P8fI9DC6DbJujokxEW1txS8mqwtTxox1gPeEhW2bchSvGRHR6/IMl+ -tSIHvT8wVyV/H6GRvgKafloCD9w0Vif/M8difB0nVZ464AnbuoLAsa6kl872hIfjXXnP/5lnNWxa -qgsszfkvZ3qrgk6HWOTjQTL2ZJAI3zdWxa4rC3wP9BUR+wZ03P5QHV1Tl/HC1Jjlf2Cllh05aWXH -DgLofIxU9W2STlrToWOnxWXeF1nKJ2OczovrPnvm6pRdAzYF8LuZZ048+N+T+NIjGz5vUlDiOdkL -+XA0SC7XUeOedBd5XZtsyX651Ff4cccMTzgdo6DOJuvqloFamRBVh130+9EIDb5nRcZv6qBAX+a/ -X9Ug4zZt9NJdez1xUU3JVdFB9xydqACXphayoiDGngN6eEcPC58R5H9c15eF7zpQqWezta0nU8ya -IV6ht60R7A6sa83JKJn8fZbGArRYw8EQKmdeUvjeJYO83x8iwvaHa2iLKmT4hhGTuDOELzybppNW -VNjopT5M+KYGGw/0PAjQQdmAPko5AvDoaJgIvsh3XlNV+K8pYABfFLw71IHeH5tgAYdmZNyhlVG2 -qSUk7VkJeccTVPiOA5O6Y6oMW1eA3iwJUx+tyUo+HRrqKo8sLaxNHRM2I8LGLCpxqRsmdOKatjLI -JYR9WBAWvnE0pN2zsxNu7gC67myIhV5RY1Mmu0s8hltAj2TYuJsiRPTdidaCjztqVIydnfvUREq9 -7uoqev/nUC1t2wxPnBWlu69pYF+W5dBPq31VIS4JKnZKWO4/wE67dWjHl5yNMYkLomLvWW7y7dGW -1PvrKqj3nqEi+NiGTj60kQrXDcSsZS0xacNch9i2UYvW+2H+8+J8d1NN3M2B+thnLik0dN9MKP0+ -WUPbNsFjdoBa2u7HxDrqs+472FHXVqSgt2uqUt8pPujtsROTcz5OQR/YyNBDG7P8ZJiOXJAUfBhq -SLo1VJd+18mOuzXbmfj0zFKZeOqoQU4LEIG2xoxbwPl9OhxAJ20pYf47/WWhayrI5zVlmc+OsTph -20wvsnMrg1pLI37bMWCS/wb65yLPEfgOUTu6qtQFcY6HS5z6eENT7P/nNIt2AOiLFW2x95YBFrGp -h0UuyfO8dwzlsd/HGax/llidm1ZkhrMN9GxdVZ16YCdCAb9avD+Iy1/th0ftGtFpF3P2v4/SCFtm -KlZByXlqqQOHH1npyCVZeeAkN+vRnBD8dk0L8dq3lYb9NUPDA7zU83WqnrPcX53wdQ== - - - trFzXUcATXVD3tnrEm9zcp5e1lSHXJvvLfY/m27gLllrqZbmwmfTvWWBRw7AIw1TscdDVOzREBVz -5KRWbAAYtGPFgc4n2LUr/YS0LcDPfp/Cl/89R8H/M89u/zpBp/zvfSZy7pySnjmv5iBmpaycZSUx -6esYrQpYe+TZRC37L1ez7O9ljvZ0hk7ftGOzl/txibsDDYw9ax0HwDvIt0lCxdcZTOGqFhq5rIRG -H40gwd9dzLoVQBcs6xiQ3cHWjjNXffv3JSZrA/Akh8N11IPBi3lNxPwNXYnfsiLXY89QGnjmJOSd -DZOLt/WICMDHp5wAr+8Zq0I3+0sDpgWZbyc7kz1WhGU+gPav+vc8u+l4mFS8b8VnX8y13AE8y3Jf -id80F+S7LC2N29BQwKtGbvPSALd51VAHX1LiYmZ6YO9Gm1Nv6wmRv1toMXfOLIi0r6P1rGVtI3xS -ykiZklLiF/qI0asKXNSqDBlia0i82wvz/clBSX2w21cZfGzFZiypkCEuBT5l18IsA7g0dJCTfK+j -7N3PXRWvf3bWf/nj6xQVsz3IQM1K4YGr8vKAPVN1OsBhgVs6qP+esdDn/2fvvZrjurJ0wae53XW7 -VK5VLZVKhlKJkugJOpAgQAIgvPcuE+m99x5IAAS9SJGiBUh4j/TeZ8InEon03gAgVdU98y9mdqrn -3pd+uQ8TMYgbWIwkyIxzcM7ae61vfd8xexl/rPir603riaAcYJBqgOUaIxeuvsPmb4yRqzfHKVVh -JaVl38FjJnQcvGcMeV17p+ovrhfdpwA/BNyw55j1cW9eRMbuznGyiJJSvz7acdX8sOJLx9Pmv3kB -rtresGve0kt+tySs/Etwmt4QmMAX7ryBXPSNw4q3x1A3FiUN/6Z90P2VB2gu4wtMkWqg+avt8d78 -rfGOk95J6FnvFPbW2lvcDfXD7u/mpU1/2Qba1z1Lr7f+3PGt+XH7t+YnPedW30Dyg0u4prSRTUzb -xGIvwM+VGcINv/K2JKDgIqNKUlNEQWpYedN1ZleGLNmchl/xzKJvpIxslP0V9MT6JLY4YREywhpa -T2ARW7E50nna/qTpa+Ojhi92ZugNMa1UsDPP7JANNH/iHifcDMnobSEZ9taBlQbLjQvgY7jcM6Eb -s8y2qHXoR9cEvdbwDH/F8YZcYnnWc2F3htiQ0Io5Yd3AoG2CUW8fIxaFtWJGWMdBrryFXXLPoG7u -LOCrQipmV8LA7Mk6xJKkRTq0AjjJzgK2bM+VywtqS0RGqQ8sYYv9C7neS/TWgGZQuqN4/LPpJa3E -/BxxCugNwj+270xnnKKBGMCptEPIjxgZqKiZTUpaBNyk6fYD5T143pSw9nOfnNzxi1vyILsi6k/Y -OGyfEle/q6K2hYxCZtLWfzvjuPsmauLTohYW0g/4StJy56dfn3lT9BEDMkp1WIa9GVzAFHonMTcA -n73hmYCc88+RqpKaPvrODPGGcwR2Un6v6lPlQNHvN5/1nkgBPNgzs3EhwAEiGiHBLx9kb8/yO9QP -Wo6Nki7/N5W08I/b75BFfuX9u875O7S1mQHU1rSwfWuM27j2Bl+wCmrw9kjvGe9Ub757Cl+9PtEH -XZm4i1+bvkPamhK0b76jFG28JRWZHnfmntE6ufkMdmbnJeLc9ijy/OobwpWtaQHEJxOhvTPEEtOj -3rOvaDc/HaHm/3njZf33CQMDsg34kHuWWRtYFqL8y2yIa6Tnu80JyBn3ZPcZx7P6456p7ksJHbMn -t2aic4JWAup4Z1Dx4KF/WUIE2qcobqJ3+2XkmtXnsNOO59353jlq68Ykp0F9F/XtzgyrMaLiIr1z -uGLPDOqK7m7Np+a7lZ9vv+25HFTwEc637BrVnY5Tzp9RFTGFCL/9FpGnEFd+PMko+q1aWvEn1WDV -Z+5Jwi2fjNe79LD3jHywOy+pZSN987B846OqT0fpxX94gr7yr9PM4n+1Pen+3q8SYvUvCQUj7Oo/ -qh/0nArJhZS4TkhNGgWUkJzSuvIWXrQFtKVbwer0qe8Om15iby4N1h4DOqvct4CtjxvZZBCHiJ15 -WEVQjq7dHIecDQLOENKyUcpHjd+r7tR/4X4Hy98eh90ILBIakwYhI2kWcwH3qFHe6zzmW2B1bU8S -agwP6o55xnouhgB2hmWcnqiah02apbdj1oE7a3P8TteUsGttWtitfwI9ufYGds23QOkMAS29M08s -i+m5hH2n9G5uLd2wmgkH8SvwKaiQjWl4uV+Gu+WXU9sCah7KNYYrCasp7WkbnxlWMSFxNQeV0nNx -YK6gQYCn29OEro0Jeqf1Bfyc8w30h4SO3vP3zeF3GTuHFDcyIPsrfP6ejUmJq8iAa1PhnllCjfbH -rq/tI8hrYT0HFzGz8UENtTVioiECalJn3CbsSznF0riJQw6p6NC1cdTVsI7Zu69j4T64bj+LG4eG -/MpBtmeOXuWZQuRZf2758hXlwm9ekb77zZLw8n9fe915OqET0bxzzLr1ccrNrSly6e4U4lJgovfs -zljnGftPpX9R3yn4XcLAJ+7k+uy+Zpe6XlNvOp/1nI5MQ6/9w0ju/MXJJjlnei/JHjV8bXrac863 -0I93T0kggL9WucdRF5cHKv5kftxxMrhwmx9ceHxvZ0YM3xzFXNsYxV/xLnC6/AoJcX2KWaka7vxG -Ja79eGcEdSE8T62OqXPrIpNqdmdxRbsLYqTlNe2G8yUub+1F17fbE4iLYQUbaCMhOaqVsj0L9Pqt -id4zgWV8RVgjwO8uUGtWXjUeX3lZ+TfffFeed5HRGFLffRDXPR7zL4twO3PogoyDTUhYOFjvEqVq -bQxdsDVNLneMEK86RsnXdxfZbSEVD+WZId+KKnk43xy5wjuFuAJy73v9vZLj3unOM2E5pTqqlHID -ymHpKPfW75XDrWc3RsjNwTlKW1pD6kioKa1AN1VZnkK+25xktPuXmG3Gx8DHgaY/L/Z3fSsbaj29 -CWpxQsbqjagY3c532Cuan6CnHCMEEG+DgxGdgJA080hRDaF6dxZfmbbyOQerfXeytr4B2yi+WDbc -edIv49MSgCuGtTysZxp7Y15y67PF/hu/98zArmXsQjAutLZX9LI/Tolq/gY4d28QaF3/MqZ4ZaT7 -7MoryGmgwy9G1AxIwtwncb3BXTU/hp0OzjNh7639g2mQcxE5ttY9Br3uWYDf2FbwoGtLQqh1jF01 -LWzL9Zq7mtYyEP9YEQgicmJVUktuT6gJTSsv207GzXxaxDb40PoOX6Z71vptTMdEAQ3H3V8beJp1 -9j+MaWmA/1PrI2o2JOvok/rlHJTzJeKC5XHrl+YfGz73zhHKAwpSE9Bf+H0TjxJREFoCcnhxxs7E -7Czjq7dGOn9wPGz9enMEnu9XULsDWhYR5AI37RJL3Ep8hf4FIi+kH36Ucd2fPHD3PwnocusAUlsC -Sh7Aej4B1GVhVElrSup4qJCCD/PMcZrc06w600+936qGuz9TDHR+Ietr/tL+BHben3ueVJ7rk04o -dE8za7ammbWGH5s/XxRf/41yoPQPJlBX1t+0nwSaDLIzK4ZujwmbAnPg5yTy4tbb5i9D860gXmo/ -Nz4r+1f5/fK/Ol5B8kPLA0zPrAi6NU4r2Z3jtfmWeF3+BUpt8Nf+hNjrk/zrH70inPiXnQl0RUIv -FQbU/cyNSW69F2zrnSLccL+CnIouEsosjyu/1A6X/pt/HlPsk/PgC3d6TxieYAriCh4MYDIibWQg -Ylpyg1+BKzH8VPuJ6VH5J7nnvhNmqcQv7yN75vC3dqZ7LiUUuJq0noeJaliwiJLRaX3aeWKOV/Rx -TEtqD2gY7dsLpNLAEqkmuESujKlYPQkDj+hbJlV45oklnjlWa0Q9PLAxjrm0PtJzclFa/e1r/JXP -gvOw8vd2kSCpl/DB2HbaRzBX/XIBJSAX4jzTmKurr2q+ekc7+8dxxuVPvFMYoPHuDNpfM4q1DxHf -ah8ij+8sC1DON5CTQOOdXHtZ/+Xq8+qvgkvYqoSeR0mbh+5vz5Cr1iZwN5JWSX/G0TcU0zK7YipC -zfZE+5mVV5Wf+hZJFeB4qKh+aGhX2UdfnWA3+GVDXO9iPykg50JiWg5qZxld7F1GFXkXKVUBFac3 -906NZ45QHFGzoAEFCxpaJtektOS2jJGG35pjdVmeEQEfZ9Sm7IOP1+dJ9dbX3afNT1uOO593nY1o -aF25a8RuuRjrnODWW0cELZtzA7SVCWqH/FHbFcMTaJ75p7bvPVPwoqgcV/vLmmgwBPB5c1mCcS/z -e+KmgaGQmgMNKKmNm9OoKxsT8AshDa0j6xRJ3m8OPt+YpTepHiF+2Jzh9WYd0tt/35Q82LfQkaHZ -7ssbz0r+rJVWfGV/jby1ox7oV78gFsuG2v625xBL/90z8GrfyZccmOnEqKy32jfZdG59vOW7sInH -zvXfdozj66cHqj7Z25A+eb8xPL7n5PaHZKiK9TfQkyE1FxFSCpC+JT7Eu8BqXntHvukcoRe7cms7 -j4qbPXN9yKCyj+RT8nqd71DnbT9Dj6+/JV3fmee2rr0l37Q9xV/aBuMeUXKgSROfCGpUsw/orO1x -UpF/ltu8PUUo3HgLzfGoc7vTPScDMlRhRJObR25vaJ4D2XyLKFx93XbKO4MpCSl4va5XyDPb08Sb -HoDH5ifQC5536Jv7Oh4haxKxfXJ6i/M1Jm9zknzDMdLzvelBzceBaWxhcBZfGpfRmtNaETEB5jgw -S6kKzdPqs2Yhw7uAvuadBXxChrkRVpNqAwpyc9LAwh0AjRFScaC7S9zuiH5wIKwf6A8rRNiYhgN3 -z0LPeRfgV7anEYVAG9elLVz87jKtPqpmdOxbuGCM8bdCC+jC7Ynuc+FlItDeDGhcKeHGNPcfOUZx -VzanmS25WupbYLcG55CFPhAPO+PQiys/d36f1oiZe7ahR3G9mLm7RKkEudgRXKY370yjrvtm4WUg -x+rkw3UnrE/bT2wB3u6RceBmwPG8s6T6sBzEiomJ2rcJuFENk+gcgd7yTHdfCKvJzSnbwL2IYXAg -rpdwE/och0bc3J5qP31gZxPjOjYhKGfBd2WcrtUpRktAM3x7VzHECyqEyKCc2e6ZQZd459HFMR2r -F9QgVkRNa/fNE27FVLn32volYQWx2j0JuWh+XP5X67PuH8JKPinrGHwYsYn5k7db/qL8Ceg7hZgY -MYoZUS2ozUo+YkfJR3oUPJRX9+CxdfYu6+1t+AV4xenfmN/QegB3Y4Hj0NImOnx3ruNaRENpDeRy -VTE04JXfue0aJV7bnKHVxIxCdszIRqdsAnbSxmNFDEyUV0ZrAGPS69MO3A7oJLygklDpn0cX+ucR -BXENqjoFamfEPDDs1w0NuKa4rVvT9OZfNgaeZexc9sY76OntEehZ6+PG85tvm4o+uOi0f9/pe5Zd -EfDci/h6+1toaUTPE5p+hhSvv+sA3KW3KmUh94IxZfrlQqR7jtcBfl+F4zX6vHuB0w== - - - ur0khOwsS9AhrYTmV4kJXjkftjFNvLH2Dn3BAeJ47R3++uYkvXxtlFftn5diEvo+JqjDgl05pQbg -cpF7klLimeK3eGYF7e4pZtX2FLnYM4G6ENVRGoNqWtPOLK5w/Q3stExc8ftl0Y1/XnvZ8X0ExKh7 -klWdi62witeby5mkjtGR0pAaAovoG2tv4Wcdz9GnN8ZJQKej8zbHEBeTKi48skSqTirJDYE5RPH6 -q9oTnnddJ71TyCtxAxvhWyKV784TSsMqVldcz+zJxfuencdIGEmd7mnYJcC16uK2O68C5qEHm9OM -2qSRTw4oMcUJA6H2vZOF2bexUGEluck7hypI6cjNCT0DcEP4xfASssA/B7ua0XCQ/7AN3n1vGn6Y -0Eq5gMvV7ioF2C2ZCLvylnjNMwG/uDUKOQfyJD+2SGlOafpZMZUQD2plh2eeWpEySbih3D2Yceg5 -18vGrxyv2k7OiG/8K9Dk5wMyPso1y2q2v6HeimqGBpLGgf6EltYRkmNLXSMdp5aHSv/sne28mDTR -ezMOiSSsF5KiegE9Y//1ndsu/xL6enAZU7I13n1u413vhYhWQE7ZB+5H9WK2b5HblbsfnDGK6DEF -qzsiI9cGl/Hl7unuKyuj7adz9zkOLNLBtEUiAnq5eXeB0rY+BruxNgo5v2fhUtJ2HnNTQanXvULk -rc5ykH79wEDI1CcIgxyJGCS8uK1/MOUSinb1Yo5pgl2neoG/MDsMvxLUDt1NWAeGorleVnJ62+ZE -T1HazCLuOUV9KfuDGZ9CRHO9hny/+hZ5Oensu7+roLWF1LSWkJrS6JNTG6MgT9K5exiu+1ObSzzE -7hK+JGlkITN2HiVlZ+OigG9FLUJmyMDDAk2DiBu4qIM1Uf/2IqFB87D7K/8iFwo0M3t/VSD9+wZb -ENURu/xyUJdNlLb3awKx4kdoGbvx9G/Uj9sqP2z1//R/7rJ5ITm1AeAJJqga4AYUYoA37O6gOtfD -gNMVN4lZcZOIvivnQ3eWeJ3eJX731hSnYeUttWxzilK5s8hqcY2SrrneQE67J2BXctfygmoxMajk -w/3Lgt6AvJ8SVErB/kIQq5y23P3XmJaH9C5xu9YnsFftzyBfGx92f235EfaDe4yc41sdgEe1xoB2 -TpjE7KhBSMr1AI2oCRWBJQzARfRVH4hB/xK7NSBnd8TBfAAM7rI+qf5kc6T2c/e7us+3xxu+Dyzg -Sv2LzBa/ggfxLbKaQ2oB1gficOVt43H3ZPN33gXYJe887JJvHlsc1wgpKcfQ49xao2sztPK4UUB2 -z0GvuGfbfggpECDGsDc2xwD+THWdSOoZPeuz7BbXBOYqwPGuuIbSHF6EFWWNmLqoElO2PtZzZg3E -Yxjo59ya5pN93Z97pmm10dx7fUvwa9EleBHQmUWrI4R89xStPCgTE5LGwaGtadItoLVPh+RMWEDG -6gJz0gx0OCthHrq7q+yn78yLEbk+wZ55ARzU6HKQszUhJbEhpqEhf1nhsfddbHJIjatbn+g5757B -lqRt0oGEhU+NqOmtUSWzJywn1oYVtPa4to+zbxdwQY5V239u+dr5EnJ6e44Cu4e4+m+j9OLPwjJ0 -ZVSFbw4t4KvTWmbPvllIT+h4+ICC2hzLvb+l6GdsjSEuAA5S5JNjy/wGDi5pE0sP1oZeHGyI77iX -cLUBLRud66Wwq2IiAhpc9eoM/OLqDOrKLuDpScOvfaPugrjixYy5d5sevI7ZBx/tuQS8mArfGFIA -Hb5Iqd5dxJemTEzc3lr/I/mDrm9CKlrPhw3hwN4q4FurAmHUyqO7FZxexwStdFdGafz71tDrDxsD -P0cNbHhUz8dnVwX8gy3xcHZVKEhZGfAdObZkfQZ3c1fBRKett39Mmgf6gc4QBOSkpp0FUkNYS4Wk -7SxMWM/HaX/GXZ8dbDnlVxIxHzZY9LACciUkx1UkdSxISs9BJjWMzgzIvQ9mqXTPKpUmjGI60D1l -rjfIs1uT5GLfsgAakg0ww7lrirm+hvNiWI77OF80fb7xtuWboAxf4ZORKwMyekPGJKQfOIae7Duk -QwkjFx1WMttADDSH5AM078IA0ScTIwPLnPbAIqk8uEyrBXhe6Z2jVabUAsKetR+MpZjt17C7fQoJ -OagYFu0uCWE7C7SanQVC6coI6px7Cl/gX6Y3gP1qV99AT2++Q1wMLJOrgD7vcE+SStZG0ZedryEn -QguUmrRZ2h/SSZjbC9Rq9wzpll/BhQY0gA+APFubolZaXyPOO99i84FOgwNeL8iN1a4MaHclF+KX -sdu8S7Qa7zKlyiej1bnGcJe9S/S6hFFISVvYGOfz+i/c423fe2dhl9bG4OdDClL1LtBTq/PsJtNL -Ql4cHDckY0DWRrtPbL7tOh1c/PXdypaEhofLaIfvJ7RcDIj3KlBbW6IGCSuk4sP3HXTovp3WHdfT -WvedXMqeo38wou1nW34m5O/OMVv2HYMPMjYuzbfQe2l7svU7z3TX6fW3Hed9i6iqFKg1EY2IE9Ew -4Em9kJoFXCkoR9/YXUAVrL+EnjHcr/k354uuM7tz5PqAQkgwvCbV9EMvffSSVnUmuMzsjcmJdeEF -3M0I0HlRwG23JnE3Vkbh+VEDB+9e4EHsz9EXsnYRN23rE8f1fMqelYZMqLEV3pnWk5vvmo5nHP13 -1uXU1rkHDce8CjoF5AM7a+Lh39uApjbTYKsvW76VD1b9efUdtjJivv/WA+LNr+UiASZykmYRN2EV -cUFNEf1jU9CfNuFbtie7TmYAz9pbEw/ELAxIQEVrzc2jV87p3F7mQ3J9cWMqMt7xoqXQ+qz5b2mH -kJt08Mi5T9RM6dhegF/dBto9YmZhgSZ5mTYJuZsTpPKAkoN9vz48mnbyeFEdo2d7nlCyMUW6ubNE -rYlZmNhfPPz+9xsslncJURPXsIEmQxXEVNiSXz8gzrM6DiZtFNKiuVhZJlZvT+FLcs/0+eSYUvd0 -17moilgX03PgfhkfsjvPrHfPogqsz5u+WH/b+UPSQGrMWsnt+3ZSd9KIb3vv4lIzVi4eaExMWM6D -BJZpjZ45UrlvmdvpW2K3geND0jo+5ld9Ime3u553nvHOoEpiOmZ31MhBRXRD0t3lR3e3FwaAJgKc -b1kI90wwKzfe4K7oHzZ+63ze/m1widkEeAmodeyWrQVuq/4p5qzmQddX4Hd9F5NR6wNL1LaNKUKZ -B/Abr6yfBLQhZH2e3bg5L4I5x8SY1XEhEuQgiFV69+YEpmZ3mdnlV4twMYu0373IbnNN4K9tzlOr -vL8+u0WpiCopdQkNpQXwnp7QMqMJYC0uohZTPPNADy/TGzfGsJd9uXthi8RbUTUbujNLq9scx1+L -KnjQhJqHBNrjmutFy7frr7rP+hdgFyNKdBHATUTCzMGAOtKaMAmISTMHDTTUTf9iz7Wklt4VWma1 -u8fwhVkdn3Kwdn8uZODS1sbh53YW8DVhNR+fNA1I0/b+234ZtU05XH1McbviK5CbPSG5kOh4Azu1 -NUUsz/UR3p1ntacBjicMIpbjJTJPPtD4+Qyz6OOV59AyMDct1ufNf92eQhYm1BxESicgZMxc/IFT -wD1YEYp3lhmtKyPkkviv18f4WPcUriCYu96vokPCShZ2zyIQgBp2J6TnonaV9PaoZehJyjp4L61j -wxNqYk1UiSreHO3N251ltCf0UknKNnjfswhqoo6DS9lEAAd7b0bU0IKoHlsRNxDqvIvw65tzpK64 -degnwLtux20cbNZ5+3lCy8f753BVzp+bT688bzw9Sj73h3vdX/yT+VnV2V+2JQ+iVj4VfCjZVfFw -2s5nZl3i/pSdx91dxraYnrZ8b3rc9tXOHLEy6xRyF4drvlmf7L2VNDPg7+1cyi9WOiK2TOy1/9xV -+YZRdJxT98X/kdAIsAkdrSNlpHVE1biyzYn2474lVFFUC7iEkYuJGdgw4H97TMvs9MlRN73zkKv7 -Znpv2pTrAU+pAPNfAfRsg2eWWO1foNQd2NjomAZd6l/uPLO72H1uH9Sw9y4+IwWwJKoUYnxLxHLP -HOpaUMHu8i6COjBHqooDnQ1wFRFYYjbannaf2ZlCF8f11LaMjQGL6NgowPOgOzIBzK+WkLxyCc4z -ya7ZeE0okA9UfOoeazsdWsJXemdIlbtyXs/GsgjumhL1bE7xuiNyNtQ7i7thf97zw8oo7Dz4XYig -VkTeWqRVby2ym32yO2DeX0z6FPcGwto++vYMssD4Y9MXvnlKfVwnIqftIv52rj/xIqvVr+sXhg19 -vNx7xdvTmOtrr9uPA51xOizndoOYY4eBxvDMMRvCCjHJN8doiCnozcElfMXWKLxgYxR1cXMMmx+W -cbvjKjHRM0Eqdf7c9cPam+6zEQWuPKrElobkqHLvAuTm9iyh1K8a4IV1g33bc9hi58uGrwMLpMrA -ArN5dwp/8xczl/J+9faroEFA25qnVYcNUlHIMHwvbBp+EDb28TwLhHLTk8ZT9pdtN2JqHskzK0aa -fsKd2Rxn1fsWxWjfIq4yrsE2+hcxpfan3d/M86v+NE4t/Nj6pOvK1jS1fGm44WPAgysiagbMPQYv -CMzjKsJqQkNQQ2r0KelNIVUfJ2qSSt1z1Br3DKE47RD3pWxiYczAp0c0NFRURWoOK2lNcT0Xk3Le -m0zbBx/u2/uH921CwZ5VwIwqeei4lo9LgHkNKXB1qyPdPwTUtK6kjc9wz3dfDqvQ1SENHQq0MzFm -lIgipkfTcdu9txELhxY2kpozNunt0DK9yfms9W/z7IJ/1g6U/Vlzu/yk61Vj8Z6TRv37tvTnIMCs -gIaD2Fsb+Cli4hE98+TatXewK6ZnTd+sjkNKgnJCI+ChbUkjGzHbX/6Zc7T7RtbBJWcMtK7gWOsZ -laTs04fdF/9Z1HzxozuIq8cAVuAjAMuDampjREMB3AVfEtewgJZnwzensdc9c9ii3VlScXCR0ZCx -8CkfnFzqewcLkzTS2oMySk1widWU1HIRaZ2QEJGx2pNaNjSqZHTGtUx4ysDBhlXM9qiW1e2X08Ac -sVtiagEmDDhUQMntdk1ir2kfd3wTWKTUZoxcrB9gclLTx0zqBUB7kuqjOnRxWI2+mdMEoJ7WxXQs -qE/JApqFURNR8BFBGbMrqiRUWh43HrM8aP0a6J2ukBZoD4UYH1T1MyIqCSmiFlDDasCbjQx4TI+r -3V2E5XuBlk0Y2eg9y/CjqP7ujzvLPHB+fDioc2jA3esCS+iba6PNZx3Py44FwHyDejKQcA795FXz -ULn6DrQW3j/L7AzOUmsDs5ibu3MIoJNwJTGlmBxRD9/2TFErtscwlw33G7+wPWz+AvD7sriK1hID -WBBT5XJI0OWf50MSWhE1rmZ370zDr1qfVPzF8rj8s4iCBk1Zh58kLX2SkJrZFZDzsFFdPx/wXkZS -R20JLfRejaopzX6QgxEdn5Bx3RkBeH0voO/nh41DQyENBxZcptQGl8D4qRjdnml67Q== - - - xjt6aXBRhHZPsepX3rR84Z7o+G7zHfL81hi9YnuC2x5aYEMiMi58c4paZnuByouohCwQE7itcWje -9gS+KKCgNcfNTHjGJeAnzbcfRfT9gh3AJ4HuYqbW704CnU7YniPd2pXhyjMmKvS9g8/dB3mTtkoH -EzoJY98+9PgAjF9Uw0WDOtkeVP5676UwALYPyGndaWvfQMbZfzvt4DEzjsHHCYuYHzdx8Wkrhxo3 -cohxUGNDenz1zlLvhTSIE+808eb2JKZgZ5bSEVNzKR8ckjv/vsHiJI2o+u1Zcp1zhFzkeE25Edbd -eerTcuCAm9UEFYzerI0n/WWFzwstMVq900D/zmMLN6fgeRENvSfHH8Oq3PW7rjOr72DXnWO45vUl -FjpilPRnQKxHtYTKsJpYsQdyYN8i4R1Yxby0iU9wz+FLVkd7vlt/3f7N7rveiwkFpnbfxsEdOMWC -A5dYmLJyMCHAdYPz0LzQAupqWIYtiqvozSkdB5EA8RzXsnsSQOdkLAJqxiKkxnXMrpASeyuoYnUE -FGJMSDXA8S0N0iJKATKh42ODALODcmZLVM3sSOg48JRRSA6DfDc+q/1qlnP+n40Dt/41piUDjGdC -IyouNqBgQ3YX2a27M/yunUlymf3Hui/d4Fx9k9iC6BKjMQ50atrApaasQmbcwsUBfOoIq+itMSO+ -LqBovxhYav5he7LjhxjQAiljvzipv/dsV0Ztsb5s+pvrTeOJ3TloYdpI7QF6sg3U1lv2MczFrTl6 -I9BqAyEFt9f8tOt7x9P6b5JqYn3WyEbGVFSIexpZ7nwDxmyceGNX1k8Jyvm97ml86dJg5SczgtJ/ -2Z2ilCaBDojLQN2aBBpnHnszY+TjEzouIiinNG6+azy5MdLwtW8OeiFpYKOSprvPYvpBaUjFQ0QB -lgWWc9uDuNKRe4IL3SVROQZoJUbTxjy9Lmbq7/ODnHON4AuWpR3f2H/s/FtcgbiWNpFa9uwCTlgj -JOwsMOqCCgnBLxtiBZSD7K1p3A3Tjw2fGR80fGJ82PApyOX2jKV/MGEWcTIOES9luf0QxO39vTU+ -K+1kILanKLeCCgEqbpSKU7l4totvB5Ws3JposIxr+HXWJRk6cHGZnnlEheXHtu/SGh7AIundpFF8 -N6bj0wKKfmpMJxXE9X2SrEMk+WWz7z7IA3QIYGlYxeo5WBGJ4hY2LqSltgGuWhuSU5oyVhbqwMEm -Z63U3pia2LTxDnJidx5z8/2K5G5ISW1zjXYcX3nd+N3WOKwI+EgG+rMvZRh+GNUMDntBLIVtQt7e -5tArEK+k3Hsn4/S6T4x3EWcTIFdTOmp3TMsgxQ005NY06rJfyWiNaFnQ3RnEdfuzhi91D4s/Btu0 -pQz46oQOWxYH9TRr5OH3LX3CrEUqCapZndbX3d9q7lf9UTVY9C/Onyo/O7Bxie9dYvHBiliUMrOR -ufeXEwpmV0JBqQsuQi64x7vObr2DnvMtEkqiGkbre6eA894lEmTMfEJMl3s/oPu8b5lcGQLcPGMW -c9JmMTtjBvEJtC3AVXIQzHdomVQVU5LqIgpqq1/ObF2bxBQ7Xndf2ZnAlKZNdMj2bPcl55vW79y5 -Xt8L/B6/bIDumWU2rjxHXI/MkirDs8Ty9ZftZ2SCSx+vv2o8njLyCCmbdChmvn03oJFQt5dxpetT -HRcCS5ha/xyywDeHuLa7gLy1NYO+tasQEwPqPnbC1MfP2EXs3DOMK68heVtj6JJdwJ2jahLIUVKj -ZwFb6FumN6T1LFhaT20PLKNvWH+q/tT6pPYr3zzsWkxNbQ6qRXjvErd9c5JRaX9FKjT/CD3uHccV -Wn9s+k4lrfxKP1z5cRBw7oyRhw2pWO3Ot5Az1qd1x2MKeFnGhG/wLeFrdhfIjSEZqyssl+DD6ju3 -IxoeyjuHKrT8WPvXee7l3+687bqUW38opmfBQ2oaBOjHKs8Mu8k9Juxc+ZmY75/rPZ8wIG7G9YTa -pFFAjgPsydj6+4BuGIyaRIztJS58/S25yj2Ou+6dQ+Su9+WuWZX7VPjKrIvHzDoG7iXMAkbMxOxN -WgT0iJqPCsiYHf4Fcr13DlcSUGLKUxYOcc81+DS9cn/GLaM3B5TU5riehU7qWQjvFLrE/KT1gvZh -3emtaWxtUHn3tk82yDO/wJY5Rnuvvt8YehXW8bC5PrJ7eqBL9MhGwO1a40Y+KWkZ/iltkQ6HlIQa -7wIs3zPbe9G7gCgMqxCFWTupc3+Vid9VwPK352GXAJdn7q0MPcutMZM25O53EptDClL9noOJ2V8V -CLNrA0/8Rh5ua5HbDvhMe1zBaA3N9l433S39dElS9Efn6+YfdpbxgOeyuzcmiOXau62frbyGXvfO -I+r3zSJmxkztCMkAB5mB5SW0bEhGL6ZnTFJxUMvsto6gLxqfI86Zn7WfAPNZ+Msqi7jvYKH37Bx8 -XMeC7Jlu30mpJbSEktboneo6tfqi4/j2COJieJFYFlfibu0ZGZCMhYtPGriolIlPSgHOF1ERqnxL -8JsJHbombaJ2gpwUpwDXj6r56N0FoG9H4We23/b8sDna8wOIyzKgXTrieh46puPCc/cfvfOoW2A+ -bwKt2Lo9C3jxHL3eO8/piMr7abl33qyPu76R99X8aZpy8bfeccjV9wBD9x3S4Yh+aGBlmtPiWeJ0 -RDQiehzwE8BHuranIOe2pjrPbM/Di+Lm2w9j5qF7fjUHHdMLyN5FAWJnhtkQV/HRUSWtZWe29/zu -AuJyQI67lQS5F1Mx2sMyXHFgGVe2NYEoiisprbnrPMFFaL4X1AjvErvZM8dr25rmNq2/wV6wPoL+ -bY5f9rs5TsnHq8/aTqb1xIasmQkLKkjV2/O4IjB/PVEVtsq/CL28MtJzwj2GvBxbojelgd5J6AYH -AyoBZn2ScGPlDTJ/Y6T3ekJGqEyqyY1BwFu2pnPP+mKuRxVsqGeC1ay90/u1bx5TAnQdLutgYves -TEJYiSoPyAj1cT0DGjHwsVHj3Se7yxKy7RX26to7xEXPFORSXE9szdjo6IydTogZaL1bAFM3ZxDX -EhYhx69mQbamkZe8s6hrkWViXcpCgf6yweW9XxX0B3UsqltJrsut+wjycBDkbe/qG+g50+PWMysj -XUUxJeBNahF/bRxTon/W+cPqFKZqf/2BLKIVMTbeYW5svOo44Z/tOAU0U3XSzCUerA88SVn4nI2p -3vOeBVxVWMuhJs0sjG8Zds0nhwFtj6/2yGCXdhaRRXtOkQRoI1FEz+6NG1i4PSdfkrFyyEk1vimm -xTeGDSyUz8hF+3U8lF9Ob96dwV5bfdF23Pyg9nvbq+5KL9DzQQ0t9wwKzP4KV6C4C/k6qOMz9lb6 -htJ6AT6lZXRGlwhlewYm8r1NwMwaOIi0kQ33KSl1foUYt7vYjwf1FMQVoiBp6S3M2AmN+3Y6PGvh -kfaMg0NRGaMtKqfUxeWszqRMgIwskGrXXjZ8q5Ge//3Kj9XHIgpiTdrCI+7Z+qVJPRu2OQM5b3tZ -+Ulgrv10UoMv3zMyoVkzHx9Rc3qCufcDQJ6EwPmEFpFXvTMgJucIxb5FSlVQyWxPGiUsoJFZST0P -FZJT61dew077F4nlKQMPlzIIyfpHXV/phtGn1l/yGoOzTMBXSY3uiabT3pmufN+yEOlZ4HXGNVJe -XDso3pxh1gMOwM7aBfysg8fKOLgUwMtYQR0T5niLyPNN8yGrb3md8v7Wv26+RhclcxxPQWnOmNnY -XH1Mm/lkzxSxMLBIvJUycNEJLQ+V0+q+adTV7fGeM0CjlMYAvwG6iOKXi3FbU8xq5yt+/dpbblto -iQUJLWJKNHeuf7L1rumHnWlYXlhN64ho+3g706SywDyzK67k4+MKHmrtBfLaFLf0ywVx2deuUdL1 -TeDDrpoL357DF5sfNX8dlROq0kZaZ9ZKh+3bmOjdOVix8WHj166XmPy4UcxL2ISshIUBjarwVWBM -C6LLuNw6jrD3oE6mTQND3iVW+8o74g2g8fAhGaY4poYX+5e6r6ruFn7qnoZcDirJLSENtRtwL4Ff -RW30KfC3onpqa0LH7Aa6tCumB3VKByvcXYJdS5o5xP2V4degDvf5ZeTqPSuf8d7JY8ZVhCbbw7YT -G8/qj7me13wZkKHLP6z1PXy/Ln0cVnGgnhlyNZjH5oye0ZPQMiD+RWSVe7ot3zODLgwoyU1pm0S6 -5xh8GAO8xwvGLaAgNKQtLLQfcNLgHORiSk9uj5s5qKiFi0lY+fQUmNOIltkbUhKbsi4OD3BF8b6L -iti3U7p8ckrN+gSp0L/M7onpeOQ95+DjtF3A9gNM31kglvqWqfWgrsMTFh7VNgq9GFMwOw60/Zys -SoA6ALwQnGNXUou7Fdejbrpne07FQX3yyZitu4v0moCcWvfexcL9+xaH/X6DhkpbKJ3b0/DLmyPw -s5FFRmt0mQ8PzJOrg0uYUuuzxq8UktKPN553nAD8uefADs5bxwW6g4cOqvjwiIrZkTFSW6LK7vNh -WdvJ4DL8WmCZXh9WCTFeGRfoFXrT1lT3KeVgyW/XXnQdD8zm3ovjAiwU87MWOhzo19asVcTKmAW0 -mBJftfGu9lvHy4pP3W9xV8LzfZiwfFgQ1ogIkVxNXaA2JBQ8bEo/NAi0Es47Db/km8eXBJa5nQeu -2z/vu6T30yCOokYmJGlmQlM5LQT0dUbNQkSWyXWecaDrFkg1v7hEfXEDvStr5xD2nGx8RMPoCMs5 -XWkD0NVKQtXm2/bvEipc3QdrnyilEdO3xhH525NdJ3LvsW2ME4s2J1hVAVkfYW2GVe8aw+f75smV -uzOE8vdWDvEfKwLegZ1LCwE8CSzR6qIKKTutGxCujRLy5dLOz6c5tR8DLnkhre/nZq19koRJQN5a -wJfYXkHyYrnrJEDrbU3DLq6P95zcGOs+tT0FL0gbpbcT1ieyuEnECcgoNTkcSWvYveHFnvPud9Wf -O5/d+hjooUKgmxvjBgGIFaCr9SKGT0auCSopjQmDgLa/0nd7f0X6KAG0M4jN6zvzxFtxnZAYN3Ax -9tfQUzEjF//3DdHALy4WwEsa5N9dQuGBk0nI6U73LCp/c4ZQ7HgDB3hBqU2q2ej3FnLLf7joqP9Y -p+OSBkSZ80XTl45XyLywlkcKafmU9VHUxaW+ik/HGJd/Z/+57WxCy0J/WBNJf1kXSBIGJjS3pkDW -yiMfOPhsoM0qXuO//Sdt//W/RBbRt35Z4/MONoR9Phmm2jna/m3CzOMdbD/Q/LI98CqqxXeoBHm/ -k4tKP3bnnl9S0BpiOjYcjO9V7xy9KWsT0A+cHALguPUpfceNtdfF3zzHfPNP29Ot3wfm8Tf3tFzE -no4N3TOyejM6RmfGgK9KGdDFCQ2qMGmidWxM4gvcE9y2oPxuX9YmYr5fZeFTLkKTX9172fRT06e+ -cWJZVtvHdI5gi2aFJX9JqnN1hd4QXWA3H4Dal7UQG1NGfJV/AVMQWKQ3AuzqiwNeHQ== - - - UxLKVkZu/cn+vPh3ufUYY1pWT+4Z1Nz1dfcCtXJ1An9ta4xc8sHCQv5fa0x8xoJv9itaTm9OV/wF -4Fzee5dQlLEKaIElfNnKq8Zj7rGW4wkZvWlfJ6ZlLRKuX81sSxhElKxl+GHWPvQgouegtqc7f9gY -bTkWWMDeTOslrAOn9F7CwMMkjDzM+9W+2xkLGx1exN1ce9l8XC69/JHpXvkf/IDDHFiYqL+D8Q/p -KI37K3zWL5uigaxVwk8CrZ3U0Tp3pnvOTrLy/sn4oPSLrJ6NCM7Ra4GO+X7zXdvfdueQ1wDPgB2Y -+jjvLSKWT06q3pzF5Ec0AnzaKCAl9YyOiIpStz7W88PGu47j+1ZC/YGVDnKVBcldWw8AvhaRc3sS -Kl5vWg+wW0+uj2pogPczW/ctYt6+VSxIgrrvWSSVh1RceMLAx+/bJII0+D6k42J35eSa3HMv4WUe -0Pm0mt0Z6Pm1101fbIx0n8hY2Zj3a5KBrKtvIGkVMOK5+62aAW5Q389OrQw+yq5I70YBZ/Isogu8 -C6irca2EkTTevhMG2nFlHHstZuyX7K9JhoKK3hLtwK3fe8Ygp0Mq+NWwFleZG2/XNLVc8xP5kmd+ -SJi133uXAro3Ku8855mo/dL+ovT3QAsWZUxi4f7q0M+Od5ib0/yaP+3MsNqBVhX9x/rA0w9OHss3 -35vvnug+sz2DvBgDtRzMFXF9HFuwlluDYBJZvmcWS/7uEvdlgYaLqFFl5meVf1UMFf0+piUj3m8P -jmRcAk7uekhonlgHuNOdX7b7fjywc8hZA6sXjEed8wXytF9Gb9sDvMj1ovVvU+y8/6a/V/rZ9lj7 -+f/YoGP/7/9NDPH/9wn8f2VHjhw2O3LksNmRI4fNjhw5bHbkyGGzI0cOmx05ctjsyJHDZkeOHDY7 -cuSw2ZEjh82OHDlsduTIYbMjRw6bHTly2OzIkcNmR44cNjty5LDZkSOHzY4cOWx25MhhsyNHDpsd -OXLY7MiRw2ZHjhw2O3LksNmRI4fNjhw5bHbkyGGzI0cOmx05ctjsyJHDZkeOHDY7cuSw2ZEjh82O -HDlsduTIYbMjRw6bHTly2OzIkcNmR44cNjty5LDZkSOHzY4cOWx25MhhsyNHDpsdOXLY7MiRw2ZH -jhw2O3LksNmRI4fNEIH/Tazh2P8m9tvjx8tpmDIkB/lRV9VHx0uqL8PB/1uQbA6W9VHDR8fh50pY -nDIimkOk05As4bEC8NX5sxcuHTvXgkVSjv3wn1seAxsda2QR8UQa+LIVjaRgTxw7DTa9Dj4fnT+W -d+z8r3+6hB+dyc+/lH8273LepSt5589fvXbpWP7VS1fPXjh/LT//ytX8qxevHKPmNrp68ezF/PwL -Vy7k5V2+dPW/bkTJbXT51++ugd9z+cr5C2Cj/F/3yruYn3f1Ut6l/9zovxzuf2mj/3I4wkedH9E+ -av7o2rEfThzr6gRelWA/Yv5P5/Jyzv06fhVECrbgP/9ZigUj8v8OJtgLbFP50bkyLI+Ixt6q7649 -1tXwESS3d25A//OvY//Tq5zPF6+czb9yrPfYhfN5x/LOX8mNIOF/bY/cKf2Pvf7Hz6vHLoFTyLv6 -6xlfOpbb9/xHx4//epK5CCg4dvXyhQv5H3VV//eImg1J6MSUqFJMDMo4Hf4lZrtPQe+O6ujdGSul -I6HFVodluMqohtocNbB6E2YhI6Ri9ngW8CX+ZXJ1YIneEFfzUCmdkJzQimlRJR8ZVXMguX5ZuXVp -PYu87u0ZWuPaKK7cM4krCy8RyqLLhPKEilgdkSOvJ/UCYkR772FYd/+noG5A5F/m9/rmaNW7s5iC -4FyuhwDmZmyRVpuQCeBpnYS5+pZS455gNMW07F6/DF28s4C44p7sOReR4WpTZkp7VIa7FVdTW5NG -DiZlEjHiGnp7VEGpCysoNdsT6PyEnNH13trfnzZwsTEVuzeuFdLSVhE7ZuAgvYukss1JWJ5vBlcc -mqc3JDUialTBR4SXxATvpACWkA/yg/PAnzH0Bc9Y13dbbxq/CEz1Xk4qmO0plRCX1glJW1Pwy2sv -Oo67R6Bn3O+gFzfftn4fnEcWAB+a02oRJSynN0UUrM6Elo/LGPt4SbN0IKjqZ/plfSTvIg/qm2dC -U8aBAXA+qLie1pU1cYngQ0jrueiYit4aUZDrIkpWR0BOr4+qme1JPbVtfartpHum60JaT27eM/CJ -B1YRL2sWcxJgTrZn8aU7c6SauE7CSRj7uH4ludYnI5SHwRilrVxKxinkxYx8wo6c3OR813MuoeFj -I1oOLqCiNGUcQuHeivRh2sajpKwcXNLMwactbHRUQ6iKKQkVSR2xNqElNb63g+NZBfSUmYNOmBiw -mIkJC2nI9REttTllZWPiBlp72sQjZS194qSBC+aFjUybeYSkkUfxKYk1XjmuIqZjwVMWFurAJmB+ -cEkfvgfH3XP0SVP2fmlQKyD5VBykP9dvB8Rf3NQnCYJYS1huP87Y7r7JmAeGUkYxO2XiEbN2Ni7X -yzpuovckzSxk1i5kp8A+EQW9JaHjE5OW24+SVhEr6xAJ9lx9g0krCx0zEBoTJkJrVI+vDSkI5d5F -QoP8QfMV6zNsWUg11Jc05HouY8u3x7GFvjlKRdIIxtLeJ0nY2JikidoaU+FrkhpKe64/EDgeK6ii -t7jncIXuBWJZxMTDbs7gbgSXmM1JNYgRvYQZ13OQYQW+PCTHlfmVXOjqFKc+bhgcSBgGBwNKkH9L -8CtRJeJ6SostT2owZTENtSmgpLUEVRxYzCgVRlR8pHcaX7j5BnrCO4m4HFpCFiTllLqMio+KaliQ -qf5bvzU/gZ4CuYiO63iowDK8YGu8+q/emebvElpCddrAQaT0IlLCKKIkDGJaEpxTyiCmJw1CYjzX -Z1JNqsmYmNC0iQXLWsW8fZe4L2mScEAMMcIqdk9wmd2W1HLhCRB//gVM4eZY83HLz03fyPqbPvVP -iEkxuZTunyfd2hmDnlp73vDX7dGOkwkZrjSuIFaHVJT6uTulf1AP13yZWOYgMyYxy7+IuOZ6WfnJ -5tuGr5MqXGlShS9LAaxJmcSMhJGPj+X6Qvzac6ZfeOCU3s1Y+dS4UUACsUDPOgbvZx3S20kjyGcN -oz0iZ7TEZYzWjJ7VkzHSu7JmelfGQGuNydldaZ2YmdSRW+JKQnXWBGLBwMNmLAJK2iSkps0Sbto6 -OBw3iJlBFR8RUUtICUMfJ2UXC5IOPj1uEVDTIM5zuRC3MmCOKcjZ1UnYxaxT+mN6deDHtFPSl3VJ -7+X68GRsYkHayIKlDZSmuA5bmrXi6rJ2QmvYALsR0CCKc33bEiY+IQ4wJ6qltSXNlJasjdyWtVI7 -ohp8hXcBcS2m5mL3TPdf7tvuv01auPighlS3q8De9KmwJXEdH3fgGnoKcleYdnBJufX007b7Ywnr -nWchE58UNZAaIjpSXdjARmRzfRlsXAoYQ1zGKh1MmaWSlFnE2LOzMP/Y4LKydg4pZeaT0np6V0Ke -63XORUZN0v6YUcTK9QfLuKR342Ymcmex56xnofPkzmL36ZCaWO0Y6y4Yxpz67TSn8XjG8pPCt4At -yfWvXnveczy8SK7OWoXMjFPES1rYqJSZRwRzJ9i3SgR7NiEjZeKgd2bIJTvz1Iqghgv36RmQheGa -T93jpIqMro+1bx4cDOtp3VsTrd96Jju+Dyk5UICPhKRV2h/W8wmeeRIYA4ApekbPnpHendTgK31L -iPzNid7Tu0ukqrBeTHPPU6pWXyPOeN6Rb4ZmeR1RGa0+riRWhZfxtzzTqCvqB81/2ZrA3Yio+eiA -itHuneu9tDvVfSmmwNRmrHRYQktvS4DciYEPiD1qxnz7fto00J/QS2hxHQea1FNa92ygPhoJoO5Q -O+ImQkNMy0Em9VJ+SC1A+xcE3Qm1CJdUs3u8s73nbU9L/2C8X/En872ObyIzEnxgkdezM0Up2Z0g -3QxMEG8kZMRK73Tnadvz2i9WRrtPaZ+0fu14Ds1PaQW0KMB+7xymcOttz5XAPLI0oyfWZXTo4pSB -2JjrVeAH9Q3EEnrf3t+/b5OIDpxCftJI64iDvElZxdz9XKw4+vpjBnZvUseB7xtFzF9MAvJ7C6Xt -wIarzVrRlYH5zvOxRWZ3Rj80GFQSaoNLiII9K5/23ikW/WO9bzhrEzDiBh4ubpCwY4AvxAwCQlwv -psTBz6QNYL9LMphZ6b+bcfUPZewiTtLOo2zLCJU+UFdAjtzPrvbfA587++sDj/dWpQ+y9qFHIPfo -KQOtLaxEFCT0iMKYHlnsV3Vf9KtgBbneF2EwB0kTD58wsGAZGw2SMuNrMmYCwGj4Vfd0x/cROb1n -z3zvVcY6dD+q52FDamZPREPrjBuZ8LiOi8w6JH0pO4+WBLi8vzo8knXefRu3DAxGTHxy0kJsyFhI -zXsOJjptZ+LjJlzNropY41Oye7eXAVZYBof/vioU/GODRY4b6Z0xHQe2Z6Z1H5hx1UmAnyEtHwPm -BZ+xDz9LWCUiUPPgQTWxIWag9sSM5LaQjlzvWYAXWJ81fLv1Gl+etT5e3p1h1G2OoS/75/HFWSOj -O2ugtGXNDGjKwOzJmCX8tHlAmjT2seN6ESWqYncnVTxY+tf4Y8PdclKV4kHLF/55VmdSB3iWmt0b -0pIbQ3JMWUpL7do35frWibkRPQu6A3jM9gzxRhLETWCB2RiTs9riSmpDUpvrKUxuShjYqIRFwl2b -wBXYnvZ84x4j3lwbId/cGSOXRJbpTYEF4i3fDL4wME8qiyrpLXEdo8s5BsvzjJNBfg4NgTouSloY -0JAKczNhoDSnjLR2gNfQrAVghlFETYK4SOik3AOQ6+9ddERMjy0PKZEFETW+LKYlNyQBtkc0zM6g -nNPpW2Q0+eepIC8p1f551HXvBOS0fwp9JSFndWxPIvLc47j8wBytcnuSeis0xa7bGOn4XvOg5A+O -nxs+jymYnRmdmJUxSbjuXM96JR91YB18sAfmwydDFm2MNXzpnm7/3r+MKvTLydURba7XDhcT07B7 -siYRO2ORCPdt/f2gZnNSFiYyZeZi43pmd8rARe0ZBcQ9MJb7JnLjng1blTTBC/2LDd+A2lGTArG2 -NQu7GFxAFR4AfvFhRSz+AGIlBmI5qmVB4wYhJa4TEhKghsb0tNYE4Dspu4CZXZM+SrmE3JRDxE85 -+gZBXtxNWjiYqAHEglPAOlgVSw9WhcKsS8BJg/w5WBl+nbX3SXM97sJKUs2+mUc9cPKY+04uY9/F -pWVsTERIRa5LAE4V0dJacr0mMwYBbc8koKYM9M6EDnMrY2L07oF6E1TTO0KqAW7SONCXtQgZub5L -MQMflwD1L2pm9sZMHNTBuvRxdkUozABetL8+9CK7QoNHNLgyMMdtCRO5dc/JxAV11Na1GULRxiyl -LGu7/eOv/RBdfFbWJhZlAA6kjeTmhLbn8s4s5PzOHO5GxsIj77sGn6TsA3fS9sEHSQ== - - - 2723GeftZyEwtrax3pOBZdzNjI7Ssm8VsrKr0oeBxfv9ITXg3GpqQ1hFKAvJEAUZPaUZ1PLOhJ4J -8cmJ5TtL7M6AcrgvqBGT4ypGW0yJLfUvwS65Z7AFviVWS1grwG0tEsrtL5r+mgJ1OGkAMWng48MK -RmtEDWqAhlAZUVMaknpa++4S5sb6KCovJuch31sGB9O5PvBaUl1QRagIqSm1O7PEG95ZUolzEnGJ -hzj5m0la5WexeQkmLhfjokvUmvAy5oYH4PvGRM8PKyM9x4OLtEaAa4w4OG4GcOY0wJi4Fn49LO88 -G1F0nw0rYFfCMnRRTM+GeRTMnp1ZXMl7wCMBdyQc2FlYMG9dARmmMCRDX4/KsTc2pmAX5oYq/mR4 -3HEqreljRTX0Vu8cLG99pO3r9dctX6y/av3KO4UrXJ/BFAwQ8/5l9RGp/EAvFaYBZmRNpEagCVqC -SnzFrgJ/K6CiAszjEfdz/ANwj7CK2ZHDln07G7sPjp11sglpKxubNIGaCsY6rX/0NmkaHAJjh0sZ -2cikldL2YZXP3ncx0VkHtccrx5Z65+gNH2xDDz+sCUQfVik9CR3kUkgOyQvKAIdV426lTfTOtJmD -ydqEzKytT5QwD91N/toreOheCnCCKIjTsJ7SGNJTm+NWFjLj5FEzDgEzxzsSNulQ0iKkZ2wSwcGK -pO/DmmTwYEXA2V8V8LJOkLNWoItALGfMQ3cyljtPMo6Hs3vOgYf7qyJhdoXHSIExBfnXljKx4GkT -n5I08on75tsP90AOAC2Aj2nprQCXrgM9Ux03UFuDKmJFwizhhbVseFBFqUtbBbSs4/bTPdfg41xf -lYN18UB2hU1OOKndmTUeJ7Ui4McsQBPZhp9m7ffffdiQPgGcjBvW5Xg60GHOgUf7zv7hBIiDRO5c -HUIB0HQdACshSR2jM6LElYaUhPKojlQfM9F64gALUrY7z9OOe2NRk4QX1PAAPx68/YtNevsfK2Jp -WEdqNr9p+iKuu/Mgp1fjOlAfcz2kdOzejInSGlb2Xt+aavlua6btuBtg9+aiBGkewRetjSIvReS0 -RqAf2+IqDiS0zOsG/KjcNQ49vTbS+bc9Gw/odEbjLtAoKUOuTybYToevimkxZWEV9PLGu+YvN9/B -z0UVXETCLKB7pvFFESW9PawCmAPG1zuPzF8fhf0/JL3ld1xXtu59zzmN6XQn6TiJQ3ZMiZmZLYOY -GUpUzMwklixbMsqWbDFzMYOYpZKKuSSnz71/xzt33g81PIZcqtp7rTmf5/esvbb2GX1r7sFn+Ct/ -nRBm/eYdE5bvjFCTncPY284R9G3XOPGJc5z42DGMvuFTEFNc09gnHhU5I2Tik53T5KTNkcpbjrEy -mAvsk50pzL2NYcjh45U3p18k/aRpSvj5k4WJ3rUyK/0ayEJTpPitccJD5wTxsXMc/2BpoOyS8X3+ -ydUB/JMA8JwbedargprpnMA/WusvOrXQkX3EMYi7u9xTeaWFeO2f1uclNz8BC4NWEn2gA84xPHwW -NSugY1eAZqMQXQ1DlgWfr4yAP3gMAuLOFCnJNUl45AOtdgN7BoHZA3pSatgs4kcWeKygsbouaKqp -j0J9Bs2sSp+OmOwErlnozf9tc5iaErXK630WemXIxCiNGWkl4P+lYT2wipaY7NEQkwImcnbEziiP -gU6GzQ1v/Ya6Zp8BMqFBzHSDJ21NkxJ21JS0HeiVbRUuHo4RszcvlvtBX5E+2JsTy2J2AQfYix8B -ZovOSGTwkgaMfKJXC3xhEnNCwElBe927IGSY3QWh8PdlScPegrg6bGGUujW4x8hzgkIwv1GTRODX -MfL9wChhyAYemGMvjLsfmNKroWUHDMizzpmFLg01M2IVsMN2sThsl0gic2JJDPQBeoQEPiKIzEjk -4TkR/J9UFrbWvw9aquD7pA3RGVl9FLwPXvVhyFchC/KMVXqRRw8sCNy0OYa+7dfyMCGjGLIyPc+n -pkFtI97KRkMek0ZsNS+A7eRuyDdujZC8C5/rVzNLPApG/tYYHNc0lxow1DQizyoLwHwivuGBDO1W -ld9Z6kk9OPsu6fuNkYpbWwpW/vIEL3+qpeCI/nnBca+CW+KaoqY7J2hpG4O0J8iztmzvS09u9BEf -7tpEgrVRSsLGKC0J8hJ5qb/k4uZowemt8byTzqmiC47hogveKaSGRNRN4CzL69KzQZWMG4Dj82op -WXOdmQfNLzP26xszvtHVZv2w9YEGvEPNNLSmH17tRF3a1bPKwxpmoR+Oc70fdW6lO/fYclfOUfCB -B8g5bI1S4v1qbmXExCWEjewKN/jA2kDZxZW+guPGV8k/LnfkXfrdSskPQx4JQIZHnnvnnKalOScp -SZvD2Ftbo7h7PjU1K6RnFns1UEPjlJSgXszwqVlFq/2l542tyd+t95Rf2OzDXLO/Qp3zTbErdi0i -vg9hJhUPHdJIWFGdXBI2CGlOFTnFpYEMDbk0ahbQd2eltVsaesEi/K5nGjjQXNUQhroI6MF7JlHX -3GpcUniRgQ3aa1oD5uoG0G62H7QZeq0igGQYTSVkGVJ62MqleEzUIqhZyu+QJfbsEjny7HLQoyLI -AdTYHL3y0xK58BPof9QslUQs1Y1hS80zH5wHzHW+S03NdOvoeZvAmQuDxaedoCUxO5sYtQvYkCfw -fgM1z2+kFQStEqnHyKdCNhJGrFUNQbOIFTKxMWEL8LyFTwGd5vqNrLLYPI8VmeVCDubTIzYBx2dk -lHn1dPB1ITsErOhWkZPBQ3KCwLxOFSV9awL/wKWipHoRTTYIqW7Q+K0J7P2QgYUOwPvDdll1yCYS -BS0s7O6CSBKdrW5B/CUyK2+MAvtFZ4WioI2NRXxmdxbJSLKqkFkqDAHPhm3QK3axFPyRHjAzy1xK -ehaSjdwGduWWipgM2RrGo+5V2F7/LrIgfxE08ekuNSXbMUVO9ull8qixqtajYJW4pmGswNdDtpYp -JFe6dcwCRA92VLSc7SlK4g7wlWOEGO+ZZJWEzHyKS8+tXJ2mppjaio+tdOHuBg083NYo5p5nnJru -HhWWbw0Liha7+Omr/dIy6AvKH+ux/ajzPsilCz0Fx12TmDi/GjKgkV70HzsLH4Y+d06TkleGK69v -9JPiQ6pqsWuCX+qcZGRuDBIebY+Qk3eGSPHBKVpGcJqVv9qDuqR/lvTtSmf5FeiPIv8UKcEPHOMY -xt3dGkRdcI6WgrdV3PQC020OE+NCOiEZOLgC6rowqBUQnBPYBztjhWd806grETX2cViLiQuB38bM -kFGBfXYmKEmeKU5RUMcjhkH7YlYuKWym5m9PFV9wTbHKfFqpaGuEmgT+me2eYpb5p5h5QQU9Mwia -5FVSstZHy24t9haeDqr4lKBGzPCrBPiAWoD1q4CZjDzif2bFkk8zImBjPm1LRU5bHMDd9KqFlLCt -7rVfz8HtTCC+Qsv1aXmk8LxAEJwRS6A2ySGbWBiw1oNWi4V+AzHDoyq86NGU3vTo8Uk+MyU3Cpob -mwW+mKl+EbXUwqv+bcza+CE2w6FE54jZMTsT+ICWA3NIi1jl1ciaJbI2iazlRWxCjhP0wzFFTQ0Y -qPl7oNdRG4/q1zNLXGpSsgsyy7aOh1lTgo9qga8szb1ha+3ziI2ND1oYqLCNURZC/rWwsX4LG72h -QJ7pKxEGLc9GgpAJQlaZHDiBAjm80KOmZXo17NKgXibYmsY8cExV3gMOo4aNda1/5F0jDw+8iTwD -mhA0CcgRe/UzOGeRC3wmhKyjWRreRuz17cjzUHeB/yIzTAzyvPrYnFiKeJxPL6T4gVGR548Ca9VE -5+A9s0J+xCbiBQwiGvIsbcNH1NW++oRvYuaalt2Zpv6wvea5x0wvWR8hPVzq42VtjVfxQpZnwxHg -rIBBzPZqn3U6NW16p/HpR4+GW+k3CqlBq1QassmqvCoRwa+VC/zaGnlAJwV/gh6fxj9an8Q/2Bih -xAc1AlLYxKc6RvEPPaPsfL+yoc45LidvjQtL10bZGZtQSyvdqAubg9gHIY2YDuwRF1KB1hqlAuR5 -oH7wv9XBkvPLvaWXHGOU5LBWyg9pa2q9kG29U/yyoFJC9U/zSpF1JfcE5t5SZ9pPm/1Fp50j+Af+ -aX7FSl/F1dVu1OWQVkDyaQQ4zzT+8VpvxuH5t8nfO/vLIVczc8I6IcmnAq+Z5JWGIVO4J9H3nKN5 -xz1juSc8E0WX/Eokb/FwEciGS/2oi6u9FbcjeokgapJXQ7bmB00cXNDEQHnVjIKoBcZExyzbghzn -V/CxIWPts50JYuJaV9EJx0DpFe8kJc2vpOf6VcziKLDM5ijpyTbkwqhGSNmDDAD+UuRE+hl0Cubj -kUvFyEWeGx6C3nFDLg2DBoWNjW1B4/OBoKWmJWyravJBJnBCRvdoeeiwteY56KMgoBXRAhoZPwqZ -IWrnM4JWOipooRVGZxgVkRk+e2+u6jnoqRzYBXKAGGpaBrxU/XRvRloVsfJpIaOQHgNe2puVN4XM -VXV+hHuAqwNaKTuo5+NgngvdcB7Ag9KgWSoOwfcE4X1unZju1ckEPlNdy/IYH7U6Qkv069mVuzNC -3h7U4e+L4rrIDI/uNQGHGGUSr+HFpBMYeweYLGgWMqM2PmMPYTWrTBowSQVODT7NMYa6EdIK2RFT -Y1vYKJc7lcw8lxJYGzKYz8jFxeaqX8bAH6M2ET+gfTnu1zW3B01VVQGzhOcGZvXDnIRna17tIWtt -syKxG8ZpR8lBgebG+bX0giiMYdRa3xazNXVHbFX1CAe4FbzSrXF6WtQsq3Kq+PS1US7KpapvdKpf -9G+pXo069c/7fGaRYFtFyVgdJT7enJZwNrS19bMDLMi7MnHQJGQFQFP9JshPCm6pX1tbsz0tZzkm -+cVhg5QfNoq54Ouk4B/Pk5fLEIZ0TJCeuMYYWW51lWS1l5XiGoO6hrEJ6aX8KIwV1BwniDzrujvz -qGO0Ms6rYxQvfsDe9E9Wc6H3eGGTiB02ysQBg1SwM81DL/Wgr60NYG6sDVETFtrQl9wjdMg81Gz3 -BD4hokfW7jiYkIaFWujMOTr/LueIX8lAOSHHLLTnHl7vLjjrHsU8isCcx3Q8vA/Oc6U378LS++Jz -OxP07IWO0jM7fYS4iEbA2AMW+GQDvzWJII8zclaGyi7tTODjIYsy14YoKRGjgPYJeBxqgB+1CujA -5/jV0dIrCz1FJ5xjjEyXXsi1tpWfW3vPSPFPNTTtwjnE9FJuRCum+VTsYuPrtEPm5w9/9I5gE71q -XuVSN+66e0KA8aiqJQEkZ0CtBvSccq+Wnj8/UnJhc5KQHDLUt7q0NXVONR8fNDx9F0QyBLARsI4o -CJnfp+GivdNytmfqeatXJSYHDVxMyMIlhawcQmyOy/y0xBf8vsTj+s3k3B3oQb9eLoaXJGSU8mP2 -qiZEiwMmMS8KGvtpTt4ctnBIbi36McK2QbWM5VNIyH61jIfU1u58LfhWdb3/j5qsaQ== - - - 2FYKsV6jVLSu4OOtXbT7XkUVJ2IRsSN2LsmvZ5XsqKiZITuHEJnjkIMWidhvanjjULNRTr2QCbor -D1ghKyHeY+JgPTpuObAlK2ziEQJqCdMxzq8M6uWikKm6IWisqonZZDW78wJ+bE5SA/mf7NHR4Fzq -Wzzauka3VsoMWarqIrM1LyNzDV0hYCXk+e2xOfBnq5i3PIxOeI4//U/gAULQ+rTXa6ptCZhqm8M2 -ETcK8x2zSMV7VgETWdPSvSm6pnxWfn9L9WJ0VdHyfmG8mrWmEOHdwBHAepSgUcD06QV0p4ZTYXpb -etynZ5V5DSyUx8Ap9yHXpXVCakBX1+SYkjOXh+lJMWt1w+6ctC42z+cELDyiVyMie9T8yu0pRrZH -xUevKxllmuaCYxt99JK9Gcg/5uo64OzaoFZEdU9TU2c7co7tTBBSVsYw8X2cR/tCU01P/YaqKo+e -i3GpOWUuNbtoc5yRsdSDubYxTH6s7yi7MshN2LfRTUjbtUqRWmaGoU69Okr2+kjxJX3LvS/m3mb8 -4lfQC7anqBmrHyuuBaf5uLBWQPEoqZkeyMOOkYpr8+0ZR1c6is5beysevKHf3WdvqYjfMzd+AMbn -Bc0cgh8ymktBz96ZLr/hUxNSfAZGqeVt3rGojlH6aVEkDVpZOGSd1G9glW6MYe6vD2HuBTR8kkNH -KVM1ZR9YaxfgfJrX434D5AAFG4V44M4YK1P9NO2AuvbJge0BXMLSGDlxtCrzV99EDehK63DI2tjp -UrFLEV9xq2hZyyMVd7YmyBlB0IztKQHapRSRA4bnfQFTw2uvobrBg3iHnod3TjKzXJMijFNRLVzq -BJZUi2i7tqrmXXtV8++L0nroE0bAQs5zadH3IHuWOpUCwvIgKQV+rzBmb+wK25p6Q9aGjrCt5jni -JZCry93q8rs+LSnNrxISfNNSWlDTCMxW+zI2J633A9t7DFJeENjKD/96DALa4jAtZaaDdjeirqtF -rrkEIeuB/5A8Oh4phrDNvEjsh3zi0DDLl8FLnRoR26Hmoh1KWobXwCNBj4rAn2RIn+7CMfi0fIKx -rfjMzgT0jbmhLQg8BT0GOYNaHLbzIUtw8D4jrTBkrapfmxQRloa4udAjDZBNXoTtVY0he1V9dE5a -DT0iidnFIsckIbtfGHfcN1ld5zbXv94CP/UZa59G7LVvwraGDoTfPs0zCSEjo2T2Q+n1uY+4NKf+ -aeeKolawNFFFc2iqJNGZurdRu0jiVDBKNsaI8QEdvcA1SU7y6RklUeDeMLBWBMY8CL7u1QqJ25DL -N8aZ6eDhz3bnpTWReR4TzhWzMy3CeNRikg/4zKVjoRaHK64ZXxQedYzQi2MzVU9dagnFpZYy/tA7 -LeSeaV6FXy3Aw5wlDvETvgpOVwu2FbzyzUlaikvFzIPMUuRWsgu9Kl65WyHCad9VXvtIe/D5UntF -IrKG7tMjeYmWu6XEP14frrw5967gjHOEnBrRC+k+nYDk7GelxpQ1EscYGzXXWXnRr4BspWKXBdXM -EvcENUXRmv+btPDM/0xUZV6N2eTPdrT0PI+OVRrSi9kxs0wWNJU/2JkoPL8zWX59vTvv15iamBae -oVduKrFxPrWYE4Z+9mv4WPCEipBeSHOoSWkrfZg7vimpMAyauTVFSoRazPMq5RzPtJzpGuWVeca4 -pe4pfrmiHXWRmXXiq51hiSBoau52KMS0uU7iXSeMSdgsBe6RNiBrHB7osaUeyn3PtJDoN4oFLpWY -6tJI2R6NAB9DrkXogYWBq+eGKp+0Vlz6xjcuoO5aa1p8Og42ZOaR/MgekD/2XfDoYYuIM9uFj/vI -i/ta/TT7eMze1OMzPetz6xtfO7VSyNVV9bszsrpd4LOgnoVyTTMyfUp+pV8rJIUsdFTUymeGIQP5 -oM6C1vq3Pvj8DSXh8fII4Z5jlJsXM1RV+3T0wqCRS9y11b4Km2VSL2S4dRUzf0PFyFudoKQsDhLi -dlQ87Ew/8b5XK+MHbfXtoZkm0HZ5tcckoLn17PLtKVr6XCfm2uYwvxjRzKC1utFrqG0K2sSyoE1e -F7JKJFGbgAU6QV4Y4uUsDrLSI1aJFF7iIOSu0Ex9e3hWXh9E9giA90esIn7IAFnf0Ny5qaSgViex -TwKm+ja/5aXGY3zWB98tC1oJ6R4NJStk5GDBCwUBOH6vTSr1WasaA9aGdyFb7Uu/mY2D4yMGLSL5 -p3mRNAwZOqiT8HbtdW/BkxtC4JVuLbfCq+cAF7IrI3YBd29BjPiZBLnW6rfJa51KMdGlEeI3pqkZ -c32oc9sDhPveaXYh1BHOC9nJo5ZxvZBnPODRfrUQvzNJz9gcpjwG5knbGaen+sA7Vvqxt5Y/YC65 -JjkFbhUrf2eCmeme5hRvT3DyFnrJD5yjzKzfzULO77MCHsLRYWBAyFHMsEEuhuxS5ZzilDommNnO -KUbW9hDhXhBY1D3JyguoRfQ9hN3B69eH0Ldm3hYeW27LO+zoLb8cmATWNohYyN4EYEdOVF8tixqq -pJ4peo5nCll3JqX7VOV3YkZCxsZowXnITNdDhppnAU2V2KcWUbxa4CmYn905LnVvjoHftbMpyFpV -UFstDWifdfg1rf1+fXO7W8UtXx8svbjwseycvZ1yx/ASdy9olte6dELGKtSYa/rFR6+6pTtorK71 -GjjorSn0HY8K/8irJCeFjTyC18AocquA27S1dV61iIRcm3WMM7McoGfLQwXnZ15kn94zivhR4BJk -r4NP/7TdY3za4Uf4zNTwymuUybZG6anrfYT7oIGpYcj+bo2M69LXNXmN9a1Qr++9kIH8Zg7Wb2AU -7wIHxWzMSr8Bm+CYzD4RUNMKIpbqJh8yNtr6hqAZyTU86u4MhxizsTB+NSZ+rS/3151xUgrMDc1v -4OH8cH6hmbq2ALDaDuQ5n1UidOq52NkB3E3QZV4Eft8HWdypETOCNgnUqpAJGYkaM3MJXshrW9Og -MzoO3mt6PhKckz/zWPgUrxHZf1UNnlXzPGhFuBN4DObWpxez/Mb6lw6tTLw2Tc+IzdS0RpHXbPXz -CLyCf+y9I+cE9TRUxFr31qGRcjYVcr7f2NwbskNen5c2ROx8VsjCZ/hMHPy2GpcQsgqFoTlx1ZqG -mBybq327u9w4Gp6rbg1ahAgX0qKmqlrw2NdRu7wmYpPXI+vNsTkhP2RnYDwGQgZwCT5s59HCsyJJ -aFZW69HwMX6dhOPVSbhQbzRkD5pfzyxbH8c+dExR07zIvie1kLg+zExzTfJBr6EmwW92zdT8iBGf -ujaUfmrhQ8qPqx8LTvgQ7lCy8j2IjmmkTCSn+PR8PLK+sWthYiMmZvkucCTUQ7UL2QczSUsPqGXs -jVFOwcYEPQvZf7bal39qvb/oim+KUbJnlVX5FNQMn5Ka7lEA8yt4aM9Y1klHX9KBnYHicwHI8WET -Gx3U0fL8SmqOX82u9E02VPmmqlguNTlzrjPl0PZoGfQGOTdqZhOiiEZqWEVuNZ8ItdUWmZE1hK20 -Yr8e88inxT4J6hhFEZOYE7HJasNQs5BJpR4Fv3xniJ3rGROi3eM8VNBAzglbqUUeLQvl1cv4iHbB -+JBcUyKsV1ktAuYgeRS4x66J8ltB4MmgiYtHrr/6NJwyj4KWGdQJyQiLBcFLfAZShhf8LWCk5HoN -tIIgcm3a0tTp1NfWu/UNL926F6NBY8NryFSkmIGLDeuZpR4lPS8I9eY1VcmC5tqWMHh90PZHPb3Y -nRVLd61sXNhIzgkY8Mm7dmrJno1WEjDg0nbUhFS3WswNW6Sgpch6H3LtkE8P6uglfg01N2Tk4iEv -5G9Old/xmcVSn62m1WUSULZNYq4HfMA/IxR4TLikkIleEjSzK0IW0Htz7fOwXVrjM7DL/XpGcdBA -zfWoSGnr45W31yYJT/w2WUNglscMwntCtmdjfssrHXBiN7BVQ3im+nl0pv5DFGoVWcsL2SUyv5WN -2Z2TVME40GEOavbma98i6xm7c0Le3jyPA3XLmuvD34NayQyY5LXbJi7ZZ+EBA0HeMEkh98ufhmdE -0sgsj+2z4XIXp/LOxubq3kfna9uA5Zp2wav25hp6gPUhawk5YZtYFEGOxS6rRfYc+Ey0Iqca8qRF -xN2dk0EeEYmBt1huLSMfWYeOAt9FLaARoENuPSFlfbzilk/LrESOdVNBz5vtxF52T4gIe9CDEQO9 -2Kcpu7M9nntqqSfxqGOo9K5vmpIfMvAICz3l4LeUnLBRLoGXdFvBzN2cJMZvT6LvutWUtLAZNN8u -kTv05JzZvrILfkWNxA9M7NMKiJvDZdfsb1P2r3Tnng2oaCURE5/iGCm74pnGPIwie/TMQuZWf+Yx -R3/OpcA0KS9i4JP9WlquY7gU2eN12jmNe+KY4qDXeihpXhXM93D544Cag48iGVfPRnuUjELkmqRX -y8XBPD11atjAzszSvRlG5acZevmenUPcm+FSQ1ZqsVuLTXSrKBkBrQDvHOeXuUeFla4JWkbAWPEw -aqEAm/CpQWTfw6xIvKGgZWyPi7BBbXO7Xy/lO0aICdtDpNSwTkCPWQRsn5aWvz1RdnNrFHUpDMcc -1EsFPo2QGDRycH4dtTBgohUHTIzSvVkBZ29WUu2CzOLRyaWgleBPcjmypr0Lr5hVIo+YYRxskH+N -rHLgscrYLJ8TXaj7GLTXvETWZ2M2kej3eT730xyH8mmOTfKoy+9tTeae3JosuQzjn+VQEtKcCh4+ -pG96G7U0vIkYpWKXklOyo+SjNyeZ+ZsTFQ88BolwSyfjbUC29JqbOgLAd+FFSYPXUv4Y+YyAkUcC -JqKFkJxq5dM8WnqO38AlRGckNXsLQml4loH1Wih5oRkmNjBLKYIabAhZW5UBe6smANofnq1qji3W -93xarh+MLUgaQnYBx2/hUUP/fz8IQ8h+Ybus/j+L1a8DJkpB0Mwoj9jJkGXIuUuD6Nvb0+QUr55V -sTyFf+RD9j3M1n8MzzZ0B2ekNUE7n+23Mit9FkK+20RBx+ZqXodsUnkYxge8oy00IxRuThRcDkLu -hCxVGwAdDlqkEugLpC6l0BsN0RkhL2KR8OGcMJCjsEETu/ITzAvk+NqgiU9G6jACnxObFcn2FuTP -Q3aRyKnBxW+NVF4H5heETVIR1F+WR0XO8qvY+JC26mnMWP9i1yyvgdxcsdxbeWV7gpaH7E+HfIr1 -aSDrq6R8r04sADYF9mOjdiADbCpwjzZHyAleZfNr55Sc45oQlO0MMbI8o5QsvxpqCnLBxhjunmsc -cztqIuXvQS14NQKMVyETBXXVTSFjdX0YeA3Zl+2D3ggp8IlRO6V46G38iT7Bk7NhlZgfs4qFQQMX -7zNwMJuga+5pRn5QB2NjkVYhazbW7srLMdCT/13gMMImXKpTgXvo/eMaMjnTryOkhA2sSpeWUtgu -uHXgA+veL95pPnNvXlz/+7xYDn7OcWh4GIeWXjQzgrnlUPMIThPUloJVFNJU10Q0zQ== - - - HTFjTaNbRU7fGKm4ttZfeHJ7vOJmwCCib4zzirfGuHlhYIy9meqXu3YWNmQCHTaxygNGdrkXWe81 -yavcBh55W8EogCzfFLVIhGGELc1iyNHkVKcenxSEmtmdZ5GiC0KxB2rFa6x9Fp2r74zNC0UePS3f -b2Jj/EYuNWpj0f/vApcLTImeHSo6uTjEL9uBcd9RSsBHqqvd6to6l+rZe4/2WSf4TO2OXkRbUvJK -lyaZGUFrU7cX2Mhjk0j9VnGNz1TdHLBUN4ZsdYj+N4cslNxtBTHBZ+CzYvO17/wzbLLbSsp2G0np -Li0hyWcnZgZsyP6wpyOxpbrO6GzV0yjU7e5SbWdkUSiLwLF7Ifu7kTVRmK+QhYXzqNFxYRMd+oTP -iJiZlTErl/r7HI/7fxcEor0ZAR+pWbeGkr4+WXkjoGeVItdQIG9wgxYx32+paQ3P1r4Lz9Z/cMNx -B6wCptfEJwVtUhnUssADPBjUykRR5Bzg/dtaPs6l4+NAf4R74Cl+yEJOyGExc1VdzFrVELNLq/bs -Qn7EyiUi+4JDoPEBfeOLyGzNq+i8BPxRxPfDz8CHaDG7gI2scXu1fPgOPiFmq3kZtTV0RM3VjTFj -dV1IL+Eh66DI/qWAnl7m11LzPQpSUkhTJfNqn7btKGUsp0bG2Z4SYnwaPiEKYx6ycmlOHROz0Afe -00/L2zM0vAobeCTHOClha4KSClkM2JpHRjQxNsMhRMCLwd9bNlUy7saUCP3HWihkiIiZWuhRYuIc -4+jbsx2Zv6y+K7kW08pkEYuQuw29ETRIRVFr3ZsYaGLMVP8qbJTwfHCcHg0tD/IIPWiigS8wy+Gz -X3j0zR8jdokEsjMR+Kh0uafiirop+7CuueBMUC/g+kyIfnPxXoOYs60W4D0GHn5LwyjY0nPKN/Ts -krUJesYujO0u5NGwkYsLmQTM2AyfgdT/xhglYW2cmgx5JN2tYOVGLKBvZlk1MHyhT83DhgzV9ci1 -taC14X14pvYV5EYxeDs3DHqzNERImvtYfiVmldcFbVzS3gKXEZvj0D4h16bnBTzkOrTfLGRDhm+M -2KVy4MhG0Or+8FzTUAi5ZwQ80m+mFjhUlBwPzJPXIhWtTzLzAtrGlz7D836vqf4lkoM9BpnQB8fl -t4klAcjBIascclZ1tdfU1Om3tkz5LDVNfptE7LcLOU4zs8wxDTxu4BJDM+CnSnrhyhgnz61reBm0 -NPcha2+xxYb+2Hz1y9hC1YuQjUP6NCdrCgEbes3VTS7TS1VgrrHfa61+vqYSEre0AlzIwkbv2qjF -u1Z6xeYE4dEeZKL/QF/9buczYxZWhVdHz3eC7qwPY+9vjeIeRMyMsphNyIX5IoQgr/gtL9R+q7zB -bRKxPeAFMWRtHNn3MiORIeu5YWBZv1bM9Ch5ZV4tr9JrENECZgEFshk2pGeVgacWI/dfBJRShkfB -q3ApmcC2PAKy5z9o4pHC4CFIloaeZIdsQk5sXizbXZDWh2bEYi9kY5+eWxmArLFrkHBhruoDJhEH -ei43CPoWtVTV+0D/lgfxtxc6y8+v9ZdfBX4uCeokbKeKR9gYY2S4puurXFNVHJ+GB/mSVe6ADLA0 -jLrknqbnRNRSwZ5NVjXbVXh5c4Re5NPJRRGzVBSDHt2b4XNiM0zMfxbZFI+OVbI0xEpzTPFRyPX3 -kI6N8qvJkM+JmX4NsLWClhNQMvJjwNFRq5Dl17KKkOtMYRMcn1pEjRhrm8Lm2taoTd64O8NjuTT4 -RGSPJnAPFqkvr1EOHiNkevWQt5H7E6bo2Wu92Fvrg7j7QRMx26vFxSPXISOWp90BY8MbZL/WtpqR -5wfGj8I4BUx8KnJ9G+a47I8Mq6+pDVhYaGTtc3OCnuOEYwuZqHkeHSHRZaDmIPdHhAxSftRc0wRc -2xBE9jjNyOoiMJ+7CwL4OZ/iUrGLTB2VN5A1+f+F7Bme4UFuYZSGrKAdUHN7CyLpf5Z5vN8XueyI -mY2PWHj03XlZc2RR9iy2KG+JzMmfQ41U7y5Ute4tyV9G5kUyv03A3JqmpYMf1wYttS1uk5jlMlTX -hOwNnaCPjQgDRYHJ/UYpL2yRV0cgd/lMVXUeS12r1/x82GdpHgzaq577IMMi/Ria4TDmhgrPro2I -iTuqdqPL+ErjNFc1AVc9g8+riy6A5gKXRe1iEXL/it8ir3Xq32j8lvq3fmAQ8Kd6JMv7TAzUjgLz -yKnAJvh0jOJPs9Kq/12QN3+yi2AsBIyAWVoL+fst+FFr1MKnxazM8qCZXuxH8rFdwIvMyJudRlaF -0wTMM9fYA/0JvSmRIGwYBW0JW9l45yQtbXuEGu+aYuZ4gXmR/fsBDTXTNUF8tDNOSQioeRXbw/Tk -zX7iXccg6cGuVcQFhuWFoEcgt+E8Kma+R83Mh5rB7M0Keci6kVsnILi0QuQ+J1pYI6GHtQJSUMdF -I+/bhs91Keg5Xi2nYmuakbU8xEha6aclbI0RHwc05AznNDVjR0nL3hijJm6PS4nz3cSHS32V13dA -fzyg5U4FPX/XKBHs6mWikJGNUbUm/7g2SC1wqSUst1JM2DXKZf+Zkz/9NMeHXmFhkX1z0EPJ2+MM -ZB9mRkBNy9qzcin/D/T0P/AK/HFPGDUN+iU/YmZVBLT0PL+akrszTkjwTnGKo6anH0Pmp8AU4KsG -yMAqSpZPQ84Mm8hZQSMhw6djlwdNUnEYvAC5JupTUfPNb5N/Nrcl/ehWl96C/JsQRnK4Xsz266pk -AcgLPr2QFrGKBcBg1cDqBOh/VNhEyQkZGJDtheSAkVWG8K7fJJNC1gVPppW4tOi4LSXmQcTERkfA -s5BrYeA1FQETBws5sgnR3d0lgRgZZxd4ztow5fHWICnu/y3ImiJ/7AkTMUPW+nfhOfmz8AyLsDtP -RX2CV8RIzowYaHkx0OzQHI+5tyCW7y7UtAEHvYdXWxQ0PTIHuQZZx7EyKyKQl9yQ1cADshzqmpqA -rRo8h0UAXhPH5oG1LWJe2MrEBIzMCqeaXeK2gNeaXpu8ltbpoL32lQd+HrRwcAELvcRnwKX6dGKe -R/9i1GVq7l4HjglCb0Xmat+HZ6U1Hh2zNGDhU4J2IRvZlxMy17/26+Sy2ExNS8Ra0+LVyAQBM58O -34UJGegVYSN4CnBozMbE7Vr5dOCjht2Fp+PRlfqB2GLVy90ZAQ/+r8JvoBd49bScoIle5DfQikCz -CraUAlLAVNMaBU0BhhMEzaBdVi4pYqEXb4/h7y93Vp5f68PeWOkl3V/qwF1zT9DT3BPkBBf83/Yo -4f5qT+XFlc6SE0vt+UfDWlJ6WMcoCmjYJSHIDx4lJdWrpKUHNMyCsI5T4Z5g57mmRTivVsIK6KUc -r4JX5p5kZjtGkfs+qGnuKVqac4L0ZHuM+GBrFH9va5ydtTJIjV8bxN30KAhPXApivBvq2q2ipm+O -EeJ0b9J/tLzPO7o+BL+vEpO8ah5yPwLJr2IVuRS4uO2J8psBHSVnZ5qW4RhhpEQ1YuonyKJR0OeA -GvKEhlnoHCM93hnG3XGO4e4GtbScPTsX8imfG7MLuT41t2JnnJbiUzJydoHtQ1pG/uZQ6eXFj0W/ -eUaZWSG1hAm6LYDs+4c//W4XS/0qarZrvPKmdxp1+RNk9l179fOw5Q/fIUNdPtwcICTCOWb/Z57N -iNlZmJCRXuhVkpK3x0hPQiaJwIPsE4dsEgGmDYAeB0w8fMBIzdtWVNz2KMmpIQ2rGOkdp15IWR9j -ZrjV5NSgkQSZh5KxZ+HiI3p2aVDLLASWAPYWsJB7UZF16eicWBRDru/peMh6Q3YYzvV3YAJk301I -J+UAGza7NOCjJg4+amMTYzD/n+xsfEBNyXCMY++7tLgnMTuHHEOul8FxRqzVTWHogai9ujkyIxJ4 -TUhmYZTswPw4kD20FsgaMC5hK+JD4qronEgStNBRIRMlN2ikFfrgu0LA/gFgCI9JzPNb616DlzyL -zHBJ0RkO+fd5PselZRbtAEtvKLilS8O0RK+2rslrqKrdnGDmLfdir4YsPHIY+BnJXa5pctoWZNKA -QUB2KXjlK0PsjChwYgw4JqznYp3jpCd+DSExqCGnRzSsEmSPaWSmuiU4U/0cWZeMzda2R2HMQ3oB -0a8V4F1KWub6YPnlpd7Ky4s96CvbY7iHyPVlr0nMDlklgj/uQ0Hux9Uh+z0ID7dHiPctrRW/Lb/H -X9keocSvdGOvOEcIcc4xdvZaH/H+QgfquK0l+4eV9qLfnGPEh8g969sqMWX+I+aaa4wUH9DQ8zxQ -1+4pVt7mIPkhcr/i9hAzZbWLdMs5ycpZHyQ/WmrHXtgepjxC1mZ3oP5XuyrPz7wtOTb7rvL0Wjf2 -qneSnOTXkNNWhyqvLfdVXnFOUZLcSmKiV0VJc4xQnqz30x5bXpf86hikJoZUvPKAipLum8LcdY+X -Xd0ZLr/sHsXcDqrIqX4FPXtzmPRwoR1z3jPBLVntLjmz2pl/zDOOfxRUMfI9k4RH3mligmeSkro5 -QI7zTQrKfFOCsqBKgHGP84rcE7ySjQEqfB/uxmpP6dn1/rJLzincQ5eamOzVImtXjALQc0xIT81G -7onZRe7FMYhZyPUgr5KFihrF7ICWWxk1szGIXyMe5Z2mpHimqKlwTiluOAa/lo/xKqVMr0bOd0yy -sr1qbqVfzSl1TZDiHcjag4KSstyHubbaT7jtgFzimqZnOMdpySElu+h3Exe3B68A5JqNfvSVzX78 -Le8UsyBmlVbFIEOG9Xyyd5pV7J2kpvkmKUlbA4Tbaz2gfWO0ZPcEI9M1xi/ZGRWU+lX8Sq+Ci9oc -ojzcGMDdck8R4yNmDtY7zcj2q7llYeBPP9STzyRkuoAJnBo+zqcTUbeVNPB6SqpTQUxG/s6BF+Yd -2XMe0DEKP9nY2JiRh4PjoCLXwvx6RsGOkpi0PIK541Yzsb/PyZp3rTxqwEArDNs4hICVhXZr6blb -MDZLPeQ7s28IlxbeU24ttjMfampLDq10V1yNgt5HIct4QD+9CmycX01K2Rqjp9h7afdnewi33eOM -PKgHzNYg5WHYwCf8Z1Ykipng+6fZ+QgbuVQSilddLXMp5PyFj+wE56SYuD4sQG0MM1IhAydujaCv -bw2XXdqZKrm0PYG+i/x8c4hfHDFV1wFPPQb+RgFrpIL+3V94izu/3U+6t9aFubTYjj670UOJW+1k -JWz28zJWPjLiLM/Ljlqflhxa7ybdWe+jPV7oYSQo6/N+2OgjPfAq2Plbo+TH0OePVrrQV9a68bcc -/bRHW33UuM1hSrz5Deq0tqHo4A5ofUjNLED6bLkTfQHpj7k29OnFd6XHvROVd7zT5Xe2x4mJm6Ni -9Pa4GA1zVb49Rn681Im7svyRcG29h3ArqGAVRDS8SgdyL/0ILdk5Sk+Ffn6wM1h5daO76MTqx+KT -y+ADG30VF5YHSAnqprRvlzuKzse0XJx7kpS0grynu+C3zb6Ss/Ceyy7Qas8kHxVQCw== - - - cKAJOZ5JKXFnXErYGOXk2t6UnzS3FB+afVd+wt5W+tvaAOZ6RMsuj0IOhz5/6JqkpYT07LKQgYdz -KzhFYci3yJpS1CzmBXWc8tiMSAhsy/BA/TsVzOztSUL8Ui/q/OYAePQQPXmtl5qw+AF/Y3OAkeGZ -EmJBQx47hsmPHEOUxxu92OtrXehLM20lv863l59Zfk+46hlipP+vFbI2fPb2BC3ZMUy4v9mP3EdK -uO9T8Cu34XcXOyuuquqzfp55UXrC0U28vfi+/NTC+9ITC+/Kzmx0Y2/ZX5SdmH1LuAJ9glrr5+ea -WgnnDc1lx+beYS8Ce5Z5lUzk3vlsL/i/c5SZsTJAfrgzieytkknCZhHPB8zghR7eGsbc3AYW2B4B -1uhEX17twdx0TdKhBzn5PoWg0o9c4/zj3gTMDX1L3gHT87yfXSOEBETjveD7Pj0bdEQi8Kol9J1p -Hmqlh3TX2lx+xPy06IBClr2/n5b4me153gEXeIdjgJLkVZBS/3eBVh7SE5KcwOxL/dhrupe5P9lf -Fxzd7MNcdwwTHyL3doXMIqZLy0dvj7KztqE+dkYZ6cjfEZlrR1+wvao4Pv8ec36hi/7EpxLTghp6 -wc4Y9r5HSUwJGWj5PmTPbTfm6uI77OX1HlLi9jD+vlfBKQHtz3WOMzOh9u85+nA3Nnsxl5c/VJ61 -tBQf0dUVHllqZz1afM+Ln31NurzwhnB58S3h8txLzNmVDsrt2deYs+udxFtbvdRHW5ArPJPgL8Os -jK0BZvJGL/ne0oeKc7Z3+cdG5QlfjYrSvrK8LD2z/AF9cwd6EvzgyVIn6dbSR+L12TeFh1c7sn6x -tDz5bvkD6tb2mLBypZ+b454SVm6Ps/OWu0h3ESZc6UCdcQ9h73mGcQ9mX2UfXO7C3ljupjzc7Kcl -bQ9RE9Y6Uae3essubg+WX9keRl+zvq+8MCZN/XKlo+LWrk5EQ2pp4UPh8ZWukjNbg5jbW0PYWw7o -6+1hWsLOCCVprQd9zTMhxnumagWbo5KKhQ/0uLk22p2Z17hz1paSQwvvyk85+kiP3GOMrPVewp2g -mk/w/+GhlD8YEvkbFsj6FNQaGvJcYsjAwXvUjEKXAnKbUkjwwfvn2otOWFvzD9qeFx+zvyz91f6y -7NfFd7hLmzBmW/2Ux55xVtbOACNpvYtwfb0Ld832quAX8NtfzU1FB1c7SXeDOgnTqeCXbyD3OwOX -OSfwD1b7ys7Pv6+4NPMGdVz/NPPHQc79v5ma8g5tdJLvzbehji9/LD9nbM47qBKnf6MSZ31teVp6 -ZKmDcNP6hnxrVFTy/Zgo72t1TdEBF/iMY5QSv9mHv+3oJz+AY7ix1Em8sTZATZl+lnMXsmSxV8Us -Wu8j3N1APG4Ed3e+HXVSU5f9velpwc/z7ZhL0zVFJ8wt6HsBpQDGkV2w0oO/YX9Tetz2rPCAtTn/ -gHOI9CSoZqPs78ridgbZ5V5lQ8PWCL9kvgMH2ky6aW0tOjwlTvpyiP7oLzPPCw7pnhZdeEd6tH+x -s/T2ro2YvzVYeG6jD3V2ra8UaivvqKom8eul9sLffApaTgTyvEsjwG0peKXLvbRHM68qTi29rzg7 -/7b4N1VV6j5TU85Pq52Yy5ZX2Ot94vTrjiF8akDPRv5WC9qnoWQ5pypvrXYVHp97lfmjsTl531pv -xRV9a+HpnRF6dsgoYu6M0zNWP6JOzrVlHdA2Ju7rpl//ywvsqT93chL/3UFO2Tf7Cntl+QPptrm5 -9LDlKerQwhvcOVNz6dFRYfy/eyl3/zXbWnZpe5CVtT3Ey98Y5GYstBOvLn9EX9Q35n6vrsnZP/um -4sxH6r3PJgUZh51drKSdAXb6Qgfl5sxbwiVLc/HB1bb8Iwsvcg6tvyu/uP4Be8XyrPCX7SEJ1jNV -J1kf4GTOvis7YWpI+9pUk/Jvc236PnN92r65tqJjI+K0/fom9O2Fd6w4e2vpseWO0tOrH0tPL3WU -njS1lBxWyrK/MTcXHFnrxd1dbMfc9k2Iac5hbsnWICNxtZd4B/rs6sL7ijMWYEl9Y8p+6O+0tV5O -xvwH+oOtwWrCarckf7mTHjfzuuSosTH/B2Nj3k+K2rQfhyXx324N09LXoZ42B7A3V7oxV9aAbRc6 -Sk7b3xQf1zen/6ipT/x+5k3moZ0x3JOwQcR2T/FK1weID5G/a2FvQR1daq88t4p4ZDv2IvTKibUP -+HvuQVrSFtTmeif++kpH5Xn7y4JDq+Anyqq0b1d7SXFbE2LM+pig2KEREJBs6VYS4heBJ6ekGV+p -5QX7dXU5PyilSV8bm4sOvyE83gf1ed4FnLbRS7yvr83/aYiR9Fkn8clnHYQnn/Vw07+xvSXdWuyk -3Dc9Rx3ZGaEmOIZIca4R5G+/VF6YlD76Ulmd9r2hKf/gsPDJPtDkbK9CSNzoZSQ5BhnJi+0VZwzN -eT9MitO/nBJlfqWozvv+NTrur8O8rEPz7/F3nSO8go0BWuL8+7KT869Ac6ugP5tzD9jfFp+A8/nO -PcguWR2Ss01vybeX+5hpbmVt7WofK1PXmPfLEO3hX/qpTz5/UXHnX+S7B/7P7LuC+2t9eRcmRXf/ -bm3N/NkzjX3omkAD96AuuUaxdwNKSkZILSTujDLTPUox1akU0WyvqNfsLzFn7C8KfjE15/y80IY6 -6xmjpysaC87lXvzmfyzNObdCWpnY9h59b0Qa/+1yd96xta7co/aWlH0Lb/OOeqcY2S9Jt75z9BJy -QsCbq/3Eu/PvUSf1T1P365oSv5mWJnylqsn5qRlz64vG/At/W/2Ae2B9W3xsVJj4+QAr6bNBduo/ -piQ5/x6kP/q8G3/nH0OypK9wD37+b4Uk4+wW1LT5FfGirjH7J3VN+j5FVfrXY/zkL4boj/82Icn5 -6R015ec3pff+tdLNTBgWFvwIyPGZqSFz/+q70tOTwsSve4nX/2yoevyl/Q3pnqaGeGv+NfPJzoig -GPTtxkp72am51qJDsy2oY7ra3B80Vdn77a2Eq6O8siOm2nJEH68tvMdd3OxmJs61ES7ZX6Ev2N+U -XRoV3/6X6XnGL5s9woKVDlai9QX29GoX8/FqD+Xeajfu6tLHirOLHaWn7K9yj6jrk/aratK+s75k -3LS8ol5f+ki5M/cWfdbcXHLI0lJyVNNQcGBclv/za9yjv3XS479c+oh/sNJDe2RsKvp5uip73zA/ -9cupqvTvtQ0ZP5ifZRxc66u42id7sr+bGbd/Z1SIhh7MNMJnaeoy9umbcn8APTg4xHv0ry723S/F -2ef+OixMPuSfYOYut5eeXXwHvvcBdXbmdf4J8NrjS+1PflLV3P33Uj/m8baSWeIYpaVsgAcZn6OP -L7zBX7Q8K/9t9jX6IuTLs8q6nIOQLa8jHDTXhrqw3EmNM7VWnlTXFf1kfF56bLaDErc2yMlCOGu6 -KvmrxQ+YK6aWsuOmZ8DUvcR7hmdFp7R1hQdnX5Sf8CCe8abi0oQ4/4imvvTk4gdGkr4OdWj2Lfma -vhl3akKcu8/QWHzQ9hJ3blpeeJiZeOrP+qfAvV2kuEFe8jd9tLi/TwuTvjTU5/1keVFyfHOw8rpX -RcyYako9+oZ47c+ap6iTq301dFsb49FEVeGRXlry972UlH3j3IQv+6i3/rn4AXVzsbvg1EY//rFf -U1MXNYvEi+9yjo7zb382KX7wL3trxg/25sz9tpaiX+xv0Gcn6wrPjspKTjrHpWS/UoB1jZMer38o -u7zcVnZ2oa38pPVVAXB55T1LGz57WJZ93NCCOutT0XKBRc7Nv8z9efFN4a+Gutxj5meoC75xCdOr -rOJsDfMLVvvFJUtd5DsLH8pOW18UHtbX5/6kqUnep69N+cY1ycib/Vh2ztJaecb0lHZTVYM+bnxa -dtj6vOI36wvixS5Z4c95V3/8r2Fu8kXniKjC8gZ/eUR86y8j4ht/GRU++Psg49E/7M1lv43VFx0u -TTj1d8yVn/97s5+VOSJI/3KA/uDPE/zHn2mqUr4YZsd9PsC498X8O9R5SdmNz3F3fv2zVl7+JKqV -cTcG0dfm3pX8amjM+2GEm/qvdvz9P09Js77rEmbvL7z16/9Mi3N/W+okPJiszj6grsk9pq3J+qmD -fO/vMFx/elPx63/NtGUc+iBOP9bOjP9xtYf8eLmTAt5ScR5647SlNe/ApDjhX52Eq396U3b6vyfF -j/e/oCR+94aSegx6KXH2De7y7OvKU8sfcZcXO7CXjM/LjncQrv+1A33lz8DaJ+zv0BfAZ++u9zEy -lj6S76/1kO4ga2oBBSkpqCIlW99mHRsTJP+41ispW+nmZ8+2EW4YW0p/s70sPbn0Hntlvg1/ZUSe -fpCadPyvnYzEo45+RopS9uBzTc2TfYam7IMD9IdfaqUPvl19n3R6qS3z6sYwOcX2oei4Y5ie5YBs -YYY8aXxWdqyHnvyPj+THfx3jpXzp6MVcc4wRHw3WJB5hpBz+20IHK0P3HHdpXJrxzYQ0/uuV9oqr -yx+wVy2txYctz4sOz76tOGd+WXbR8rLiqmtcTtscFBcvfSBcN7fmHbS/zDvUw4r/oi7/4p+GRck/ -tlDjv28lxO9fAp0xQKbRNaAOautzfhriJn7ZVHzzr5yk8/+lbi4+3kxJPEJ6fO6vcDrfbfVRUpwj -jAw35JaNwdIrlpePv1ZX3/lcIYv7yvau4mozMfWApPjhN1NNpPjVPlHp8gfczfXO4lPL7/OPWV9m -/tbHuPSZ/WX2Sdckq2jmbeU169P8w4sdZXGz78sfr3Xibi+8KTqy9AF3Rf+s9Bg/9cKfn6Ie/Oga -E2LAW7KAhRMM9anfmxuzflruKDvrmiQ8Xh7A3K6uuP4FOfnEn83vy+6tAkebGgsP2p7m/Wx5mr5/ -mH33i60BarxzTITdGOIV7oyLsRtjMtJCF/EmZNRT6vrcH6ZECf8y1iV+Nfc6+5etaWr6YE3y98YW -ctJ69zPefLsow/gcdXi6NvunYXHeL6PSskMfGWlHZ18Rc32TdeKZ98zHmuaMH7TNKftNLdk/21tK -f11so1yfri85Uld66++vy+4Bq3CLNPWFB/S1uT9ZnxUdUUgS/2mqy/5h4U3pqYUP2MtVlXf+wU25 -9E9jIzY5qpPxV3srLs++LT85/xYHfFZxYkKY/o2uvuRQBzfj24en9v9XDzPh15kP5PgOZvwXraWX -/meAfO+vXeQHf3tRfu2v/fTrn6/0VlwTlt/4WpB35h+bg+SshQ+Yi+bW3B91T3P2G57lH1DV5vw8 -xkv897Qo5Yel97jbtRX3v2jBPgL/ZabpGosOg2/tnwXmsr8qPqqqy/iuHX/5s1H2zX0zbQVnP3Li -fljvJGVEDNUN26P0zBXwJsg8N1wjmFueccydjQHUBe3TomNTTbibw/LCM+t93KKFDvLtuTflZ1c/ -YK+tduFvWIHRxkWp+2ZeoG9t9DJTp0XxXy62oW+vdLEy597i72z34h/9R8+q2NMwig== - - - tgYqblheZfzineRjHJDfTG+wZ2feEW+MivL2D3Ey/m1tLj7iHMbddU4TEyebM3/jpJ34m+0l/ZGq -rvL0ACv5n5OS5P3zr0pOQD/fW+gg3dsZpCZvD5Djdc05hy2viy9uDkoq59s5T+bbCVfm2ssvzL2r -AI7H3FLU556beYe595adeuQtPengcg/tyYQ87+dBTuoXI/zkL4e4qd92M9IP9vCyTxvasHfL48/9 -4+YvX/+fl+j73wVUPMw28jdBgOfsb/J+sbYk77c8Szk49wYyxigji5l77R+Z1375735Z4QPIQKnK -qoTvtDVPoI+efDUuuPH5EOvyF0sdRVe2RskJnezH3ylrck+EdCJqUMcnbvaTH+vrM/ebmvMPjYqS -v2E+OvLfryvufmd4jr4zUV1wyjXNJWz1ExLXQBMcA+RHG32YO+qm7F9e4O98/pr8YN98DzFxrLoE -8k3ZqY0eRoZznJS5OVxxf74DdcrwLONn/bPsg44xbqnxA/626W3Fpa0hbt56DyN18R3q1OrHopOb -faUXNiDbmt5V3FjrE1O3R5vkCx/FOYZmwpkhYdb+94S4v+trCg7sDNDjw1opx6+qFq33ycqWeyRl -M+/JtyyvCg6ZmzO/V0hyvx1gJ/7jHfrOn+zPyy4u99BTlXWoX2ZfMx8ttLEevsNd+VMP9d7nmtqc -H7RNhcD9efvtr7DXnEMitHdahFvqQF/c6mfnrvdz862tZcd1NbnfT4iyvh3mZn49yM4+ONNCfLjS -XVVpbKXe1taXntNW5x9QytP+ravJ/Gato+zC1igrS92KvaNrLb/hmhRgF7uJd+zt6IsL/fT0jUle -pb2TcGNalvONWp73/cwL3Hllddb32rqcYytd7FRjC+bs3GvClbUu6oO1LuLt1Y/EO+vdLJRngkd2 -TPIq5BXX9kGuuhM11zTvTDPy1yDz7oxQEreHSXHOMfJj9zg9bWuQnaVrwd0cryr8bXtYzFA2FB7t -ot78m0J+/4vFD5kHR2T3/6mSpu1beoO/Pgk+KEk78Y+ld4TsoFbC8KnYRa4pctLmYNn1hbdph/XV -Nz6beZ1zLKAU04HhC9RNqMOL3fRH+uaig5Oi1C9HeA//1Ua5/EUb7frX6sbUn80tBYesHdSUurLb -X/dyM866x8R05yArHTQ2Y2sQG7f0IfP0Qlv+CUNj2rezr1HnlrqEWU24+G/GG4qvOMYYGWt9uFv6 -ZwUnZ9/mnVnuLL8y/77gpK4x/SfDm/JrXdzEbzT1RafsbcSbix/JD9YgW2yP8kpnuwn3xmsLTwyI -ss9AHxZuj3MKNkc4edsTwsp5mMv5tpLjq12Vl0Cfjppeok7rXqHOqV4V35/rJWX3CZMOa6ozf1pq -K7261lV5d3sEneiZopd5FdTMtYGKa72c+5/Pvqm865nilW8OkB4sf8RcmqpO/fe0LGPflCzj22Hx -44NLnaUPJhsKrskLr/9jpouOXu1B3zUB/86/Qp1QypO+6cLe+ksX9dHX2ub8k1vQu6LcG39/TUqG -fhKzXSpq4cLHrOMrPfSkjV4hyj0qpbgnxPjFbvyt5V7SE8e4BLvSRUlY/1h50dyce0hXl/EDaN31 -oFZIcE5yCpb6GfGmN/TrrsmGqp0JGXW9jxS3jdxr211y3jWNuu0Yrbi+ArroVVfxVyD3ml9z7puf -Ua/bXhAuGZsKjyJrLssdmCvGluJfbW3oi/aPzCfDjajTHyhJn5sayk+vddIerfdQ45a78LfmP5Rc -Wu4qgvHMO2p+mrV/7SMtdaVPXAo+fmxKlnlgWpZ9QCXL+m79Pf6ec4BXZGsj3Nc+Lbuw3iMlKZ4T -r7Wir//5deXFv6iqkr5f6sRc2xnnFjon4DXFr9wcISX7NDyi31zT5FBVC5cGWGmWV7ir9he4iwuv -8RftLehTjm5ewUonO3NElPRv0/Pco2u99AQ47lPT8oSvx4Vp3ypriw/Z3tIeQE3luiekjIBBLHRr -hDTn9NOnXlW11Pqu8upkdSbUUPo3Knncv+Zbi8Fr0ec3B6Wk2Q7Sfc2z7J/mPxSdQq5TQb1cXu9i -JW/1CQtGpXlHh3mpv+3088k7E3zMbCfq5CZk5i2ovc1u0n1XH+bmzggdapecuPAR+btO+BuuKQFO -2ZB+sJ9z/6+m1uyjU/UFZwZEaYesLwtPeSa4lXoI6jUVt78erS5L901UcWdfFh81PU39blJy/4sB -3o2v5tsLTu4MYe7tDDEyZz5SHlWhb3411lgYtz3FQWmaC3/tZMV9NyJLPGJszTlmfpFxeGuQ8PD/ -4+it29rKuv/h1GY6nal7qSu0tKXeUkpxd5fgxN3dSHB3l0AgThIiuEMSiBOk7cz87vt7PW/kObn/ -OFe4Apyzs/daH8nZZy1DO/ijmB1/2y7HgQF8/dCP+fSnjPHt8nJ3/rON0bIPG0Nl72wTsAjrKDYB -WJena72EdK9GxLVOkrMW20pfrXaVBU2xE/3GCBHndyTQMLeRy5jpxeSVRvlfnOsti/RqyaV2CSbO -PIYIMY/CQpYBLy1lRVwfIny76gG8ubyu+NsgJvqaZQAR45jio3enBJjdKQZ4T0cq3TcSKtwz+By7 -llTg1LLQvYSo66a6zECvgo5wyNkor5JWegCc/5cRV+CUlYbsiIs+/T3PYPxnXTS4p8ODt8cK3xwZ -a1qODELR/jQHY5vAJ1oAfAQ4Lnp9Ehvfgvt+bVZQ/tYzIkQ6xUywe4qcc6AhFm4PlwRtDlV8sEzQ -c3zPLuwoCDkb/aVBO4Pl75bbcp9tDWW98E4jklwyQtb+DANunaJmbwxTEzdHuHmGZthrQHe/t/RB -P6y1gZ8COX97sbP8k6ET+rEJHX1xAJtyY7uflbcjZuabmsteTLKTrk7QYy4ZalMfr3cUfDAPVH51 -S0mZa0OYSH1L0ROPglmxI0ZEzDUn+Y3gg89PMmKvdiG//N6DDP5rrYuQNlmL/NBYGfWnml/wdl9J -hv0w4AsONfg8xxQidrmnwH+pO/W+b6w/jJTynUlsomOKXeGaFjI2R8ipuqrs2+OEyL8ktPi7k/To -a53wt6fEtNArhvbyoHZ81FUJI+7Wdj8ibncUlwTMdcmBmlHpUZCLtybAb3cU0Fi3hkdyKwXk7TFa -7ko3Khrw0Z+3OgoCD2XIOLcEFbPRW/lhexDy3TKCjnJMMkqs44QETW3idVNzeZBFTEiwiHExHiWz -wqvj0e1KevnGOCLSoa9pc840DzsV9IrN3vLXxsbsu9rqzNtzLUUvHVJiFsCTuSpR6l0pK/6KU0oo -2R0nZ2/2VXycbUi/s9CS92xjBBezNUrJsk8KsNZRctZCS/mb7UFkIpBnaU4ZJtl3j2G1u+DFtCjl -/hQn5pJVgohwTzMQu3IyeL6n8otTycU5FCyoRYyKXukqeLPVV/Ryc6Dw1Y4MHu3Sk0t2AJFnHoKF -uiSIRI8MFrXZX/heyYu/MUoKPSehAvqgNuPevoqJ2NcJeXalgOSQV9OAWIXYJPjEja6Kl8aGvABd -S8nH5SFMzFIvKuLXAoe3K0GnrnVUvl5ogbzYHkFF2BXoFJsMlWKdQibYdAx0FzPjLTvv3UXLCJm4 -b2wes2mrBWYlvWRtFB681F/x0akBcmWWy14V49PD/K+AqqHRX1y66mazjI1e6S5/vdSZ/3h9IOvh -fEfKXWNTyrNf81zhgYlXPQf4I4cKk3ZgENZ4NHySS8GudEkZxdYRcvLWADFqsRcX2opOvDVNg75x -DjbgLf3cvOUWzMe1NsyX7W5c1M4IIcWpZFfatEzkHOB5AX36cU/KKLeP0wock7QSj4oFt8up+XYZ -LtU8gg61DOOjtkcZGa3IuLMaQfHT9XbM591+Qrx9mJpjHWUVrfSQYvWiksdrXZhoy6QAtThIiJuu -LrqvFIJfLnWgYhzjDNhPLZ9uG0dEbfYUBi22Zd5f7Cx+6ZLxkFv98GBTXfqdMWLczSlqxj0Vt+Dd -QhMM8Ewi9Ciz8mk9OPr8QhMm799ZYZ3vfpFtrDhoa6j41fowJGJXgkk90lHKvCps+mxz+sP1Lmqy -VdrAXuqjpWh4+XcAHL/Wj466PE6KuzZFT3s611wRrm9Fh7CLIi7XFIZe+DUjYLpkaADLS4Mt4pIP -yz3gl+YpaKxDQ4I4NEz4rpQB3plkFvjiwCNnVQBa+INjtPjj7gj4zUJT4g1DbcxN5wQmw6sS0Re7 -KdGABvy43k/M9ChZAF8zK60SbLxVho6zKjAJzhlqpWOutsuiaWixyDkw8zgxba0fErw9hIh2ysnF -vhrI5jF46MZgxcfNfnjEnopLNtaVPZ+vK3yw0lQctN2HydnXcChOFb1yoRcWrRKm37NOkLP29ULh -gVHA35Eg47eGK97PtRcEqmtSHs+2Z3/emyaV/AB+tztFzNM3Fzw+1ItqtwBOXe6EfdDws29b+sq/ -7I4hMt0qJs6j4xCccnoRkO+FHhmteKu3OEjNjTs/RY+5OMWK9TM0pAXYp8rjfDXefHG/PUbMcMhq -GTY5kK8T5NSV9vLn47jIMypuzMXV3nx/6xg2xrcX3yFhlFoHyUnbfZQ0QJvHrA6VhBjbsoMM7ZmB -65OImLVxPHipH154oK1q2p+rad/x5YiKTzPLyQUeA5PyY5En2jdx2SujmFh26bfr4jpwxt6SoNUM -4MlGH4D1Ymi8WVIZa5lEZdtkuMKjOTbTqSVXGjoLn+3IUfGWMUyiW1nL2Z2qJm2PsvPmW5EfAKl4 -R0qE+GmZWH8tE/d8ggDz767Iv9ZZnH9+HFFyfUVEjTB30xIX2qDvV4dhwYv9FW8sEiKwztVsm6wK -vynmla4MUBOWunDBiy2Ej2sdtIiVFnq4Toh7zcv9frwflnVphocLtHRzMi3djGRTPTFYToU+WOJh -Al3iGtyGmFembIC/MbVivzuUdfXrw/QCM6B3vEoexthY8EAvSL682V4Y4ByjZS13ctJmBNjA5Xry -58Va2rftVk6ac0BYsd3OzzXxq6KmUPjbOhLK39rGy98ZYuVvD8I+2cdI6S4Zl+BUtw07lSK6Q0Yp -mGsueq7kpt5caedmrA40oVe6qnKWmyjfNruqCpZbuCnLTbSwrU5W4iww1hEC9F4/pPT6LJcQaR/m -l633QT6u9RUHOdXozD0dhbw/VzfgnavrdWq5RH1z4cvZ1pIgwC8kOZWsivkWSOBCfeH9re6SwJ2B -ym+OUUymR0Ir2B3kFRhraJ9XW/iprpEGgmtEhDT30JK0gpw7gB5M3Z9lszxztX3b0zz8mpSWtyml -ZO4omGXuaQ72YJqLc8mY5ZtDqNCNjrIXrnFc3IGSBbVOsEtbKlPP9EAzLs4KCRHe0bY67xQfv9lX -/n6lE/xuZxxZcGCq6dg31bR4DVV8u5xWapOT8rwzPJ5by8AeGBjoncmy0M2hok+L7QX+q30lr9YH -0HF1JbFX2irS/bRczAtzH73IK63l20cF8LUW7DdLNzHaLa5Gr3YxSnXCIn/LEDp2Zw== - - - DB3rUlDAnmlaqVtRGa8QfL85wQi9sNID+eJR11b5cmQLMEjzrbBXq52EhC1A420No76vD+DCVjrw -kWpW8TM1o/ipqR4bZmxCBM22FjwzNGY+m+/Ie7s/zxb+XG2Q/1quGTRLMFlzfZUhOxoByz3bLNlf -rO7cX6Bh18WQSHV99kNje87DXRki9nCOwzuYEzbsTLHLN/sJiX/rG7p/6hp7fuhrm22T5dGzrdEP -F3rSn+yoELH7c3Tsaj8qdKmXmSKvJr7vIZZdbkPnn+XnJ/2Oiv52oiz407H0l0Ggzw/vg+5dPQs6 -f/okyO/sb6D3dy4fwyW8+0PKzPfbGkDF/D3Pov5cZFEtKlKOuhP1RtqEfz1Vg3o2yYXeG6aj7nSg -yi4JwJlnEMA5ibHfj7HiY47VZKb9xkqNOU2K/XoCl/b1RMSbB6AY/0fHmyqybjdAk24q+JDAjX5q -knWCXrLSjYtY6cKGbA6yMma72IlSASGwhwC734aqvFoNLv6DlpxyEh4edrzow7tjzJjwk9zUsNO4 -6I8ns968Phb+5DEo+P4NUOjjW6CCzwHHOiCZV5c76ElWMR+yK62mbUzyoMYefMgMkMuzbdXZ09Wc -0FEq8m4PEnxxAFV2bRSPDhhAQu72wYuuNxZnXigO+3A84NY10L2L50Fhj+4ep6aE/zlMKbyvqYeF -ALxB9MxR0C4jGWZRkMCGjsogRU3es00xsdSjFXKXh2kZE8zym1IG5N40D/Zcy4N/ULGgr5rL4s/R -Ur+fREQFn4p5/uQ4POzTH/iYz6ex4R9/m6tDxLmVFJRjmoZ06jm0jSls/KYEEb4phn4GdFOkeYIJ -NrUQg7U1pA9TPPLbcUalfw8m8w4/L+JySeibU8Xfvxz/9MAP9OTKBdC3R7ePkxO+X+lAJz0Ss3OC -V3phOW41tcI5zUJ6gHzeFlPSt8T4eKeaifDq2Xi7mpQz11kaqOIV3p6pRr7VCTEfq/KS/ir48OZY -yecPx/AxUafgER9PYRNC/iAlRZwGxn0y9MGtY2lBL07DY0PPVefGnd4cICQ61Fy8fVpA2RSz8lf7 -4SFznQUf1kahkfo2WNB8LzFM3456PyUof9AKzfqrA4N+DsTKBV5u8mlyauyZqMAnJ278+TvoOnBc -+es06MHl86C8L4G/jXOLvv2Y4zX+s8rgO6dRmYv9WUHalvjnB/NUktsoqLIoASwZIyTsyjHxbg2l -2KZkQrbEtPzVISJYVgMJE5Qm3qWnRZ0V5sb/iYz+cj7v86u/+IXRN8apiddk7Iy7K/3I1F8r7Nr/ -2+UPLk4wCwC78aSNVHJJAM07TSnMOVkYFQEKexUAenzjIujOhfOgp9eugu5fuwg6c/o30O1zZ0Gh -/g9AucFBx1oq0i5oBNl39rXEfIeeUmIcRgUbhhiJ8jZu5HAV4XkDMvcvbnH6aVpO6smSqG/Hvgfc -B2L1Dig5MACU++EtKPjxXZD/lXOg6BcPQW+f3gb9dfoUKPwpEMtfnh0T5Uf9aWiCv9bUlz+eZBbf -nK5CPJ1vZ0TJ65ifO4iEO/TCkjPQ5JRj2SEhoOS370GfHjwA3b9wFvTu+nXQ9/t3QG/8roAu/fU7 -6AQIBLr4+ylg3H+B3vrdAAHreEJCA99Z6EC9Xxmkxq+MiRDqdnbcuJD8qgUFu9WKht9ohFecp2Sm -nMz/+ulY/KvXoMygN6C8t0Gg+BfPQYE3b4AeAvNx9fx50G8nToDuXzzrmwsQOy/6N3Ud9NWGFB5h -1cATFgeLXxuaAA5QUoq2lVz0TD8tcUyEDWhAlJ4jpCechESGHIOEfgbBwr6AIvzvgl7eugJ6ceMa -6OLpM6ALv58EPbz8F+g28HlCn/mdqqsIvzLTVPTMPAkPWx0rfWueQEctdUBeL3SiP44LoI+6ieWX -ayoK/kLEx50sC/sKyv7wEhT74gko8MZl0JNLF0H+ly+CHl68ALp05k/Q6ZPH/4dzL/2AeX9984SC -n//Jq+HSDkyCKpeOS/DquWTAf1TuSglpywPYcFUD5nUTHHwVER3xGyoi+nhm0FtQ4NWroGeXL4GC -794FhT9+DMz7RdDd8xdA/teug678+Sfo5PEToNvA9ZJfB4KomVGXNHWY92vDfPD2RJvIrqoR7Mp5 -yNUxWpqiAfJ0gFniJ4SkX8CmhgNzEnosMsAf9Pz6FdC7236gr/fvg24B5zt36hToLnCNe5evgf46 -9Tso4MpVECTy629iRuEDbW3ew7X+ii9eAwX57zq7an+RL1qR0POWxpjZxh5cqLwG8mSUVflkkAp9 -XluScxEZE3ki4c3LY8+Aa9wBYuIbgP9Pr1wCnQbW8hIQ34kvA0Dl4aEnMcnfz852VXy3SssjFia5 -FQNVqEct5PLLXFjhGVI++BQqPe8kOCbpxOfnL49dO38RdBmY23uXr4Ke3LoLinzx8SQmNetCAxxy -Xy7ABS90wN451OQCu4aNWBnnlMyOCkuV3bU5w7Wcz9UAf2Az447DEqKPVcZGH0v/+hn08u4t0Gvg -+B7wDPT+8X1g3X4H5uQqKOb1i2ORgf4n8EnfLnUgU/zGmYXPFgeI8fou7BdlDealupbyXt3ICO6i -V9xpxMKuV6OwVxF5eX98fRUICvZ/Dvrw6Ano/uUroCvA5/QHMPPZtSsgv0uXQGd/+wPk99cF0Jd7 -T0CV3xP+bKrIfaqvQ4au9JHjVvoZScY+fq64mvKhmwrzqyrP/kNYUfSXEF55Fp2ZcSr81UvQoxs3 -QQ+AOHt14yroy4PHoMdX/UA3z18C3QHWy+/KDQA7boAiXz4HUbJiT8l40EcWOb3QoqQWLA0ivs53 -FL2wyojpKxOs/OleetxILf1dNQp9oygh5kTIS3/Q+wd3QPGBL0HPb90C5vgP0LnffgM9uuIHunz2 -AujpdT9QdNCH4zGvXp+sKki4ttCODt+VknM3RjGRa4OY0Pl21EdjG+HLIAN5v5uGviuoAJ8vCA87 -lvzxPSghKAgU/fIV6LnfLdDZk6dAN8+cAebjOujNA3/QpbPnALw4Dwr3f3Is69u786PM7ECHglq2 -Z+TSPXNcptvAwjo09Ir1cXy8vK78kawe+7oaVnoV/P3bybQ370BJgS+AXL4Bugzk8uXfTwN5eAuY -92ugy3+eBV0Hxv3s5h3Q3as3Qf5+90B530J/wyRHX5muw39a7menmyea+TZljWihhxht6iaH67rw -IW2k0pvQpPCToS8egV7cugF6e+8ByA+Y38t//AnkxQXQIyAXz/9x5n/nfw2sYeDthyD/W3dAhWEh -x6vBiSd6oPFnNgaQMT8XedVuAw25q+OR1qVVhG11bc2yhI8Y4SIe8kpyT8Pio0/EBj4/FvPiFTA3 -QaDAO3dBf576DXTrr7PAdW+Cnt6+BXoArGXSm4/HSFnpF0TQjCeznZVftY1ZfrohZspoDTFwTER7 -O1bDD+shMP3bUcRbnXjmExGUeg+RUn6uOCL3T0RyyUVSbsXFAXp9rLSmt9LU00HaGG+kb0mrcHbA -89lnakTW6VrhsrwKpRhgJ4+304IHq8kvuxm0VyIozK8GgrrViGb7U3KxfqWxpRfBMbl/YdMzz2OS -Es5TU1L8OhHwIHUdPX1lEBe/3FP+amMIHW5RVdG2FCLqyngNbm60kagdrIMIYMkXaqF5t8W1orgO -UW0EC0Z8hMstv1KZkPMHOCzz1IeAQNCT6xeBWL4OunPpJigx6OspYmrBrTY45q22gZ8+30WJ3ppg -FVqkApR5UoCYHWQXCGAplznguDMTbNTzCT7tXTuLEVBNoD4gFyOvJX2NP/nu8XPQfQA7/S4A+PYg -EBTy8t3x8HfBx9PCUo+DE/NPsypK7w+zYC/n2wnf7KoqsmWSBXbIWXCvhl+9bxDWunQivlldw9YM -15YO1jfG83GYO0WZmWe+vX17IiwgCBT+5jso4F4A6OKfF0Axb76dgmVX3CCXo/17mLT341za18W+ -WqpV1lC3Mc4G+w7LFAdineJUro0JKkxD9WhVBy9+tJoUVE9B3EUXl13Ji0o6lfI16vjXV5+AHL8L -xO5l0IU/zoGe3gkEpYbGn0CmlNzoIHLiloar6VYFvdIqI2e79TyWd6FhfH9R1LY3L2zaUDFhmgF8 -pLKPHtvNJD5sxuLuc8DFVwhZ2ReRGRnny1NSL3x/9/n3D0+fgyLffgDFfg45nvA18lT4+0/HwGlp -f1AhpX5T9cTQlUEOdEdSQ9uRVuEtMlbpxhg9W9cCf2nsocQtT9YQZO2cxBpMyQ1kWswf8Z/ens4K -D/0dlpFwLi08+I9XD++B3jwKOJkdn3slMS7xfGZcwilyQelFHgzxuJuFfatugL+XcrOuzXeVfz2Y -E9TvL7B5gD7M3VXzcBZtjXBVUU2VttG+1eBhV1E52b9Hvn57LDzwFSj3exQoPyrhZPSnz6dePbwJ -Svr69jgiN+WPanTFg0E2OWx2QADblnLgbg0Tadez+FvK5uZNQMCsT9ZTlsfrsPO91ChdC/btKA/6 -tAtf8mCpvRW6PtjJ2hhpIu1M1VBsChHDIuOjtiXsEvu0iG03tCltxupGyzQbsSVjlZtVfOyqnANd -VnCgC5PV6LmhBqi2gxEx08lOWBzvFCyP9glXxro484ONsKX++orNfkqsV86GeoH8cmir6LsKasGO -hFnhmKyvdsi6xyyq+rp1GR+9qRDRN6RC3FIPI3GlR5Cz0Fdfqu5pKtYM9/MUvb1EcX1T4pigPrSL -Sg2oKQdfaIHD701VCdNWhxtxdkVjtUvRWO9S1vDc02yMR8/G7s3wGa7pKubyIC11tpMQuTrMKtwc -F0IXBoVFyo6aVEVXU768vTlzor4lRlpXFzUpYH8aJGMeqJrrMiRN9cm9XHZQn0gYMTXQUL4qryZb -FVyEVc4s2Zqgpi93Qd9Yxbj0vxfqxR4dm7g0igxflmATNcOs1IEG5ufhpqrIkdbWbHFbS3Y9AeXX -zqz/3C/siOlm8l6rWxihCwN1pSvDvLwdGTbVpqGWOY1VQru+tsk209CxO9PU5zHVdhwBHnBvhlJi -niKmrExgo2QtlS9k7eSwwUZ6DDIr7S9GRcWtblFjfCuX82mwRvCllcN53sgRvZpsZoYsiVv41ule -pWeuvs9lFNV5FhrFe4t1Qy6jsN53b8KmY0C3lNS8xVFirBbgP1kLJ1LZxP5uGqgunhN3V88M1pSp -u0lhukFGymQzLbgf0MHdPJS/oqsDPtlWFacZ5GYuTVWhnDN85j9zfME/sxyhV0OGb4whI1aGceEb -o+w8s1REAtaUPD/ByDZ2Yz+vDRFj1iYA7qrOujNIjDg3xky8YupjZulGRlumulvBknZBrLpPVLQo -bqKa5Y3CXRUPvz4Ej1YJYy9vDIPf7c+yeUerLUaXgQrZVZLz7FoeaU3OgcxJqiDy3qr0yTZB7FRL -baK0lfld0V9fqRzrZGnHmzBzYkri/AghanYQFzrfj/jo0PIpZikXudANe789Cg/5tQ== - - - WTvh1rfLPIb6LrumpsqsrCLtANpgaxwfJ6srfVNf+u28R8pGuaY5pO0JfIpFgo7eHkdF2hRArsrJ -2a5pJtxjFNXsqFiVThWQdzNtEq+hdeLAUN/hnRPVmtUsxLaclLk8DA9eF6OjVycwWYBWKD4yVPHd -09U8l7IBiF1GiVdHyNubIZVuy7HJO0p6qWu6oXl3spbnVPDxZiUXuT7FRZql1QzntJBhmyCmW4cI -MRv9uPDlAVLM5kQzZwM4Vsaq4ZvjtZj1UX7Jaj8lwSbhVu6pBfRdqa+HWFXdkaFVeqBv6HWqGQin -hl6+K6eDLRJ26dYou9A9XUVza4Qsm4qLcWpqaqzyOv6usk6wLWOVrYpxUWtibJR5ipS2PY5PtMrZ -FaY+dupCl7DAJu+dci/WDtpnqEggVjNsShLYLkNEbw4VBDgUyKQf8wKRfZqLsyp4JJehptVmqu9d -1TS0rU+39qypOnrWFHWMuSFS1PwIv2BFUoPcUjDBe0Ya6sDAZx0Zecz/1cjcZFf56iDa1KR8u5aF -dc4JawHM99VDx/vqER1oScVHRhrCqaYVmyWMAlkN7CO7JPbZIB+Wt6LsGjFOVVUuKCg581IaeEXK -gXr0vrrVDcPeWVHTrgZbsDdb1ba/0Kb3ztd0WlXUIkBzMb0mQHfpgLWdZkAc0zzs5jg5Y6kH8nZX -QYe4ZuralvtR342tBU+WB6Eh+kF01IqchthW82hbGiGjj5fxeH4EBwc4acxrEjV7VfA4j7Qi1Cap -+LYxAgu1S8nZXjUb7lGyIIezPJZbz8RujZZ92BzIf7nUkXpbX5/2WM4Ov7HSlfPZMyOsM45waZL6 -0pBtBR3nXWxW7uuFIpeWjlwZLQ+e4MVfkFfF3NqVQbN+rAp7bLO13VNNBcEWGR7iqzV5YOIL9vRc -CoAzJWtiSKi+NefFXG/hS8cch+1YrBvcAsZhn2HjPSY+16lnIjwGcrFrGpfpkGOTtkbKP6wPlb7+ -uSpo2dM29zsVnQNOZVuvQ9Pc7ZqmlzlkxFSzGB8711z2ckeGy5jpKn2vay4L2B4lxFknsXHOaXKh -U03IscswiR4NrcKtJufuA3G3b2pV7Buaxb4cOJjjsSzTpIJtGS5hW4KN35ETc5TN2QFTvJhXP+aq -O/YMjX1OlYi+K8EnmkdL31rElZ98z7XbVCzY3Ci1eIST93ZrGJXp1dd1uDVNXU51Y4tNyUYudGQ9 -We8BB24Nwb5sTZAyZDXIOE0dKmtXWkUBcoh+YORSfD2t9mewOdbx4uC5juibTjUW7NXXNO9M8ym6 -LtjnXRUT4dZUcTyamro9dRXdpaSVbYwgYrckkLB9E5/v0Ql5Po7ZkTHLd2XUIruCVubWAnOoZ2Js -KjygB+GfLCPUrD1tY5d7hgLfFFd8WhuCBQP5mHKgxRU65ZC4H0YK6secoAo4R4VDLeIfzjdL9xcb -JqyG2g6bvr5jV1tTt62glFjlxEybilnhnuHg92cZqP9uCnt8NW73ZmhwrwEL/jGPyt83EAptClyy -R0MG789xGHYlrdLt6wO2ym/47xKH++8Cg+hSEbOXuqHvjU2QoB0JA7Knr+50zVa3b6kphc4Fft3e -St34zxVR9/9b5Yh+LLC4bgO5clmcF+g24oq9RlHjvknUsGesEh0u1fQDscXeA9bzUEeHOpWEjI3h -gsCNgdynezoqbG2UDF7qhofsjhPS9/R0lHuJw9lfE/UcLAmbrVpKsbQpxX9xBFXpnqvt3piiFNim -oBFHM8SyI6OvZjMd6ZQhEtb7sj9vDRZ93dOSS61SWrGhKfeOtjr58lJnzmOXGp1ilyPSDw0UzP5s -dZtpGJk+xo/2syow8KOV2jG7jJCxK8ckrUtQSXNDsJhdNbFyf55be7hWJzHPiGp6GMl+5klU0a95 -Ltcmx6d7VKQchwIdvyUufjfblvxwW1IccbjM4u4B/LarZlZ6TNWt7tn6nh0NF2uV49N2Jyu/2CfL -P2yPFgVZJNCof9YFbXYFC7bQxcjd6KTlHWjqWo6MHKqvD6B9Ahm6PYD4tNxbGqgSZF4xNpQ+N49R -Uy0j2IgdCSZ6Y7Dy3dZg6VvnJDLqB8ADv4yk4n9XOIKjOUHNno4B/wms3d8bPACrCJkOFSHLNU0B -b4iRMWv9ZeG/5kUtXkNtk13OQzomyVnbfZVvnGJ0zNE0B2uX8ZGqFlxYBzb1xmYvNPqnns9xq9iI -XSmzGIhVsFWCzbYrKRCXhkfZktfShNCUm82VCUFWCZe5o+ChbCpcqk2JiLIrkbEWSWWoWQz+siPH -pa9JKJlzvdjvVimPtj9bP+ir074jY0F3J4lpVjEkeLUn79n2WN5L+zQuQ9dW/HqhExrmna5r9WlA -t5pPsCnoRTYVJd88iQy3KzBJvv6068B7soZCfyC3M/ZnuLyD+aqGn0ts9oERV3BkxBcdGsjlKz1l -rxwyBvLHXP2gTc1CbU2yiu1aEX9XLeJYlSw0EJ8NRyYuw8ejuwp0gq8/ga9nt02JT3NpcdleLbns -yFDTcqADxq1GJa8PFr8zNBUFWMawcYcGJtbXC+ZATyzcnyGX+u7zWSSEjAMTh/JrgScwSyHRFgUq -bX+lUQXoKaljmlyxNV7wxjJV9n3PSCg+WCDhD5fZArOMBl4fJ2Xsz1Y12bVMJPBZiL59Fwc6LmkP -wECPBpXq1aHSPTp87hA16YaEmfvS7tsXIMGlWmWwBKsKk76jwqTYpjGJXgO5bH+uqhGIuz6Likd2 -aXnUIxObcmQilx/oMJnLXWl3hgivTqsFUQ8PdOQK1zSXsDlCSLTLfb1uKFivCZlmnoB8WxmAfZ3r -Q4eujyPCNieg4TtyQp7XxMK7taQit76qxmVoEnsXq7u9y4LGwyXgdU5Qa9eycUsD6FCnipTv64m6 -PY6L3dfxmR4tn+HRswhek7Djx0rN+M81Xr1LRyl1aiil+wutBqepoX9LwYbuKCiF/65Qyf9dIeP/ -u0Kj/t8qv+X/Vrn1FjkdWosKv9ELi7jzSy2o+QnoZ/dk5dfdobynay0ZfvN1WbfW24tfmsfQUYOC -7Me8rA8XXaOUvENlFfmnloM70mEBPEWk2GTFny2jGY//MVIhPrx1aKnwX8ucao+RCrPKMEkWGTbR -ocGm7Glw2W4FJmdrBBW5PcIv2+qj59jHSIluCTnNNoqJ2O7HhNgngJ/FmBjzQMmr1a6suxYx5Ktd -RslZH8DnOifopdsTxLTVUVTE6gAuYnecXeiaYpW51Ay4VUbJ9eXeoaFp8Aega/b1HMArEtPNk/ik -jQl0hGWKAsSyULRn4LIAzUG1a0TCvZnqmiMdueRIi0rcU5UF70ggX7fE8G9bo7DgHTkVbOzAhNgU -AqpnpqbOrWVAnQBeO339u2SY5PkBZHAdIvzmSj+y4NBU07ZnrK536oj5dhU8AeD/KJsMFu4EuMUN -rNPyBLNMUB52WSkqCt+fbRhwGarrdwHtZPf1VJHAwyyTsAinjgH4PHLaxhAq1DpByT801HUdAV7P -qxPx3Go2yiHFpm0MQD475bQii5iQOIhPvLjWWRn+/5Zrh//dEo0AOg3tALQ4wHWZK4PQ4Lmu4qA9 -Ex3jWhS1bCoY5WYxMe3/LYs6/l0RdfxnTdD6/9Z5rXt6dO7aaMW7+b7KoK0xfOzmGCZsb5qF+GEQ -VXun+bQ9DRvlVAHrJ4F9n6lLuzmGj7i4MUjIAbAGPc7JeqQSJT9yqImlP+bZrL+XucKjBQ7LoWWh -Nqfoxc6Zmtb9ubrenSlC7kJH/uPljoJHe0rAp81SkL905MqdQcg3U03SdSk97vJaX0X8oYmCciqh -EeYxSAiAhUlOLZ/u0AjInlkWf89EIvj6k/wHwF0vkH97Bh7vxwIZ7jIwsLZpCoA7dIjHyCL8WOKw -f86z6XtaYlkXIfSasRua/XOpSfZzwYfdVNiGBPzJMQNLdOoQKYcmXPE/y1Ud7hk2DfAhTM9sk9Sp -rRa5pllQj4Zeua+llu2OQoJ3lVycrqXi3WILMuLntIjvlTNKPRJiukuMjd/oKPa3A7HomCClrw7A -vrXjI85xkgIvOQC+tU1RCzcHYV9WBwsDlgYLAua6ARzuL3r7HxOfty7FFQzw4u+sDJYn/r1SM3A4 -x+UAeVviBHJkdaj43QTj+wXffiBtM+obp+CLn7UfEWcbIcYtNJY9m63NvWOszr5tEKZfNwmTL1kH -S9/ZJkiZ6jZoWH54wJ998PinNgmtdFfOxrjUTJhHTQHvTkIjlnszn1kmyoL3ZhhEh4IMA7CL4dKQ -SxxKTJJnGhG7r4XHulSQiLWhgg+rPSUf3EoW3qVr7N1R0QHdgkk6nMZn7ylJxQ4lNsOpxqftSDEx -W2PosJmmggdrI+hEbVt5wlJ3ySe3klpoESO/bw+Uv94B9J53Cp98qKGU7euoPn3NPjTymT8Br+Cr -e7IziYwGePjtNuC916cIqcZWINYm6FiLjIbemiIV2ABdu29ik5xqctGuDJflVFLK7FPkLNsENgHg -61iXnFbu2xO6NyPk7xnr2vdmhdVWGSHZIsEnrfdCP2iY8RfcY6jUHzNV1R4Ak5waaoVNRi8/ALyM -R8VG7WsYiB0ZKtUsRWfsKingQ6Ow9r++mrmLwpaf8xym10guc2kgEVZpxZetsYp3lgnIV+sEPMQm -wcQ5p4hZu+PYWLucnOMBPptdScw3i5FxWwOQcLeOTVoQkwrw2R/PLfRgsn4u1U8czAmbXRoazKbE -JFukxDQAj8CAfmsG4o+6NYFL2hQT0rcnKIVmYOzGpoI3xuqcp+ZO6MfVlsJXlmF4rG2KmLPcB/1s -U+ALfyzx64+WmYw9Iw7s1KCSrIqirxZZ/qejOWzR38sM0q6anDfbXfre1z/CPVtV6wG0/dGSqO3n -qrDNayKWuzTQmLWB4lem9rxn7hkWe08vEB6a2LQDE51s12KhR0sM1s8lCg7wwcXbo9Dvi50lL81T -hPSFIUKGvpWdaZO1tbjVdVVeHY+0r6IUOFTU4p0JfJxjguqrdYCyDqIj7aOE1H0pvWi9veS5ua8k -aKmj4LlCEHtZxYs+a6rOfrUxRkibaa14s9QKCdoWk8FmCbN8Z5IN9QL59veMqGpbgsuWVqc+WeuF -pxwBfOgAYnVX4cMFQPOMIaJUwvSAueaSd5qmskBWzrtr5i5MsrmXFKPj5d+aZqddVDFTLxmE2QCH -Zd+2T6AjzaOUzH5O3vOw1zeOs1M+3nTJODiLjArZEMNizRPlXxd70h6YWuP9dicrQleGy7+rRSmP -XHJs8d+A7vFoEYn2SfAH82BmwEpnzE2t6Nu51fbcZx4ptdg6xYYs9iG/+PYx/9CyMYcaPt0uI+Vs -j6JCt4YQX4BYid3oL38trc4NIGQE/TmED7uxB3jwjWFM5GoH+PlmV+4L20hJ0NZAzovVvtSAAx2+ -0qOmI3YnkPF7QNw75CTw9jg8dm8OV3qwRMF4Ae5yaGkIfWdp0MoQMt5rYOOOAH9hlg== - - - kXOXBlGhO+OYaOso7OtGf9lXlSDlsbEu64lTSst3AprFo6+q3TMJ+ECsF24MIb8uNYMfzlenXHUO -Q8IsgxURW0PFHw9NPMDPVlc5FDTYSnfpN8twZdhyT2HAfHf+M7vC11eqpudoVtSy76tLNV9VdzjH -wPv6/+5MwUJ3JIgwuxT6fU+NTrADPLozUvHeNgYPtk/SCw7+17ueVulSYtO2hqDBqwPIsNkexNdO -StrLjVEazm2s67BpWJh1YPw7gFdwaRjQQ5Ow/mC2rmdjHBO3Po5PdWqEQsdMbcO6hF6gbSj/MttQ -9tE2iotd7yl5syOGRAF4ErsyUPnBOolJ2TdR8V4TpmBPj0x1a3w1x3w1jvEVv5ZICOc0JgPQX9/0 -7eDn2xOoNIeOibSrGZV7Bg79aKmqYVeFTnSqkUm7U6gEh5KQu2fk8lZGkBFuDR1ztNiqPVyu7t2b -o+N3Vaik7Ql01MYQInx9AB5mV5ILZrshH43tpCSnpnPSOV1f51RzkG4lJd+rY2E8amKmXYqMXunO -e64VxF1d7S57s9RS+trSCw3e7oa82+oE8qG5IMA8UPrBpsSl9dZmPIelP/99CJVw/8hU2+FQ8XA2 -BQviBPhpcxQetjZQ/nFzuOL9vpbH3tUJWAAGZe7P0NE/FrgC4G+x5lFi8lJb2cu5xrz7s/X5z8wj -rLzFLmqMil1wyzIAePwBXIy5H/FlvbvipbEp756iKv2amJF0rg369beVTkKRVSzCLfZDvwBr728W -Q8OcckKxUwZwhpSSu9xVFrRQXxCwr6RgfD3NVgZynk7zo8+qWPHnlppyn9nGoXEHAN8fqsngbTEq -Ut8Efrg1gPhqE+MTd0YJCVvDxLj1PuTnjR7EB4vvfl0b+qOpFvleQssPMNWUvt8a50Jlgrw7ElLE -HzpezEXHePnH3bGyTzujJcE/ZqioAU6KPy7J/6yUmxt2ZOBydyUlXw4NReFeQ3HEXE/SM1NrhN9S -V+6jHQk+c3MMm7jSC4xfy2U4dTWtXmCuVruKAsZo0Wdrit4c1wiS7tqniPkN8KiHHdiI5x4tR7Q+ -QkjWi8D39bzMK3peykUJ5dtfA+iA3/S1YXeAOIZviekFG3246J1hYoFdxkA7pvCpbhki5peRAj00 -0FHeGR790MBj/5wD8FdLLd/XE4sP9KRSr5qQ6QV8lm247MNKffqtrY7Me/sKVIJNwi5f6UWHbQ+j -ImyT2DjrBCZhawgbudEL/zRTnf10qb3sm1XOgPrw3KFj4w9MXPqehgk7nOEz7GoW3DVNgxyaBNXu -GZFwU8qt2NXWN9rUVYzdKVquU4pPXu0Gv1ruyA1wSGBhLikifHu48I1WFHVjtiXp3o9ZKu7noqjd -o0Fn2aSQ704VKtE8AQde8dlOwDfaZNCYjRH4d4C3Ui1Sn5/icTwzDNT+DAMB6KRypwKdaJ2CxywP -lL/fm2GzDubbZtxzorq9haqmvfmqNrcR4FI9HWWZRMYAuiFxR4aI2lHgM50zfLYN8MYuvYC/Pyds -dKq4ZNskLs4yivxurM974nvWZYQdf52Q5v+boQEcZRnBJRhr0vyWWrOfbQ+WfZQK4q9N8RMumOqy -bh8p6egDU1XdjpSQYgX41ceBmxJYxM4kOtmXEz/nudylIWLcTH3p050JYt7hHIe2KcbHrvfC3q92 -lgbO1+U83ugueb0yhA4d4mTepiY9P+GRsVGbQ+jIhZbcuzM1WbeM9fkPZ0SZt/TVmX7L7YXPAf9b -sTqEjV7shgM5yOcAWoS3O0XIs4xDwpY6cx4Oob6dniJF3nZLcaXuGQF7R0LN9ipp5Uc6DukHoFmA -XCrcGS3/sNCcdGuI8OX0QmdF0GJn5VtjXcmT3RFmoVfV0GCbZICXO2DvRrDJfzKS34EEme9+kxAT -bpj78dGyZkx4Eyz67HJrefi/Bh7TBXhkU11hoL4m+5V1OP/rbHPOwxFy9r25NlTKgZ4CmWtOurHa -m/nCoYDGbolLg80jZaFeJR22B3hiVW3eUyk3/bFXx+H+WqrpOzAwMZuDiC8b/fAv5iFU9A8NA+tW -0BFj5OQ7KnbOe8cYH73QBv80RUm7IsYkX5BRc25qeJm3FxpzAze74UnrY5ScjE93jhOT3t/c6qeg -9/XC6vX+rKdGYfSF2eqEy+YxcNCPOSbFM8Nh9zJT3zbBPl/9vy1Bp1dPKNsZKXmzWJ1+fZoc85eS -HPHnWlPm/SMFMdfUAY3L+XzvhKA4+AmgV3huHQ261lP8UieIu9RS+vKMjB1ywztDQbqNTSOLI9Sc -bQk28+85Ye1PA4/1t4lSaZ8s/7Y7XvK/74kAPQHkSBVje4pZaJVQ0j0qeulaZ+kbvSD55jQz7sIo -8tOpQdjbk1P0sBvb4rKU/2zxWkdYMU8WuvK/HZoY+CMgr49MHO6hETjPZMV3JTvs3Hxrpv+engZ3 -6dhYq5wG3pggJDimGVCvnkX01Vz/dxZfeAhoif1pVJpTjsxyaAnlhyvVg54FXv2OllQI+OaKHUBf -W6ToFJcOm3c4zyTYtUyYVUEDu7TCqrURJuJAL+D6+uF5VWy4bZyRZxnFxy51lPhrBPn3d0YpYPMw -KmqmKvnmbE3ybV8tBBk3+tYKoDHsE7DwAwOXvS1jQVaHSLG+vd9eDQt5ZKJAfy1SUL+WqKTDOXT+ -5ljxa/MYKsqjYaKXxfA0Y4uvzzkPaZfw0V4VF2OXYBOAXLg7RY05O0WI+WNzgpg6ys58pOTlPHWM -Mop2R/Fxi81Fz9Y6il/axNDQmbqMeyp+4tWl9pI3P/RV1ZYJRORsa97Tha6ioPn24qDlltL3u4De -2p/GZW9P4OK3RygZf8/WdPy7IGp1a2hls+0Fjxbbs+8ttWTeBfSSv22SlLE1go/X15Q83OzGhrvl -jLLtEUTIWi/so5wPflBfEnGGl/PpTC8i9pplgJQ8ygO/IKS+Oa0W5YccTlNLjY2pfk3lr0+Q4+6C -JlBvzlj7c185JvA5PwBPYJYhUmea0gMO9WzqjwVBtVMFaHQNufDAV89Zhs/aGCh55dUwUH8vCpsP -jGySS0PMdU+zcXsqUr5rCpO+2VMevNJREGiqzb+/0okIHqXnvxYUfL250g39Zh2j5lnH+AjnOD7e -OYpO2OxGJqmr8gIaiz/9ruTnfvPIeFyXjFoyzY+6aKjNeLbRWxb8c5aMPNCziXYVA6JsLvw8yop/ -6tNcDhUxf1eMirYMIhMBfRVlHgB0THdpoFFYFDBOTLzOSX51chgT8ew/i8wqt5KQtdFX/GJ7qOSD -bQKVsqdBpP5nk8HyzgKaZhQZtTyITP9nsWH8QMsgWobyXq/3Jt82Dxe83BoufH1oZDGcGh7FMkHN -dCrYUIeMXtQJifqDn/7hWHdl+OkJUsT51bbsl4dqEvjvBZ7wxwKTSc94dFwhSPj8c45GcGswuWsD -Je/2ZjCZu1JorKExG9C3xLK/Af20o+CRphsrA1dGCUnO2cZx73LLzN/LbK57siJ4oz3Nb6UtzW+h -Ne2BUwNJ9cwQitfHyj87ZvDF3pXakZ9r/6uXXOWrDb5vpCMdGkqRF8CrPS0bPUbLfXA4y+ceznBw -hzouwSlllljF6PDt3oKn1r6yoH0VvcIyggnf6kZ+cYzjklwyTAKgKYLs4pJ3NgmgYZWkvLVJavbW -JD3fpWGj7dP4LLcekeTUlYX6jn0DJM6rgaUcmehYQC+SpQ2ZAUpBYciBrnXkENCmhwDOWsXQkJnq -9JtqduIVHR/8VN+Lj2WA35/pREQ9cI1zELNNhc+HsF/PiInBZ3Wi+KsSRuTZSUrEuc3u0uCfRr5g -bRDyYWsMk7QjZ8JsMi7coyBmeRSV4ZbxgveGhpQ724OoiF+z1c0/TAKBTQ5osT7Ipx0xOskpwaXZ -JYBOlWESzcOIb/+rEzaCj/U9s7DcU/F6W0xIWRmmpMp5hX5yRvplBT39mppbENCLjb06Sk64vtIL -CV3srPikFqRdl7JSH4wSkp+tNoE//QQ0wC89A7k/w8TM9pd91DSmvfw1z+X/WuLVWAFc2RoEv9oa -LnlnHgV0+GR58M8FDsejZ6B3ZIQM1zS1/NAoqN6dRIQvdxQ+lTNi/9IJEy7NtRT6L/XjoqorEm6W -f/P/bamrIhqIdYJNTi6yjBW/0YgSb9eXvD3HTQs4JafGAfqPkONWcEmG+oovq+0l7zwqWsWhnoX9 -zzJX+GuWRXZPE3MdSmyiZ5qU71BziFtj6HinjFp6BHhJX21Xm6T8w2JL/sPW0rDT+KjHxwQpT0/M -iZJf/GOkoS1idIxbQcjyTlOLD3UcnFuDy3RoYSnbEkBzTVUEHxrZzF/ztd1uFbVyvTc7wC6riD7U -05DAtcDA/1Tap0j5633QL7ZJiu+ZmspRaqYfAGNPDQ3Fb9Y6C546xos+OycqInfHyqPXugreK1gh -51zSymzf98Ib/YWBG32QUOAaRF/fof0Zcvm/S//rm9PgUFIrdI0FD3bkDIx9tn3Gs9Cq9QLz6pTA -gHjOD9wZKfvmVuAL/r9tKv2XCVfoVsMSjpbZNfurdZLDeTr2aA7QoiYaDNBxaa5pQvYBwE0OGaFA -X539bEtByptuKQ+yTJBKDnRCtmUME73SmnF7uzf7kWUQ/HqpMf2udQQV555hodYBj7M1UvnROYmK -B+Yp26GmFgPvo/eMbML/vrs20BBugONcehrGpQe4EfCH/yxV9wJ53g28T1oaqPy8N03B/5ir7T40 -CkU/gLzxKEk5u2J05FYf4stqNzbE1I75LBVk3Z/vLg/fFBOTxmlJ50axvuf9Mx4sNSO/bw1ScnfH -SGCPklzk6xOzOoIM2Qbw0jHDo9nl5IKdiZznix3RV2fqwi9MMr784ZbjMveNXIDfcenLvZCPhwBv -egEs21NzUAdabLpVXPJ6c7Ak0DYO/2Yew0VOcvP9pgS5DzbGaaWbMh5c21D2bAAdcaa56POJhqKQ -E7Qk/2NKTsLdLQAjCCUfrlRGvzi/3oNLdEoZxV45Id0xXhE835r6dIr9/dYINeScRwtJ/u9aVZuv -f4VHiU7Z6C15tTlQ9mZvGpfzY4HFOFhks3ze2abApACaBerRMgC9BXm/3lf5bq0P+n13EptmlxMy -NsS4GG1d8dMJdNz53VFo/L6BXKlpSr6nrou8aGjNetqHj7zTiwy/BXBBLOAx8YZueCIi3P/Makfh -5/+ssbgHBhx4R1IWYh7Pf+2QARpghgr19TS3yujFACYE7U4Sc/c0Arp5HBmx1AV+Mt9S+HCSnnat -KvvzX+2VITcsA+XRS/1ln5kFn69tT+CL9zQ02Fp/6cf5DvCT2fa8+wtdWXfsspIPv+a4nD29gLMl -oeW41HTI0Zyg7p9lQb1XRy4zNWQ/mmZnXJtrzH+4M4GN35WxSo1tiHduNY8KrAlttSM/oBkc+Ed3 -+dvTUmLo7xpW/AXHOCzu/za5LWYVrExY+PKseQCb+ctU2/7LxKL8NGLyjgzwNPNYzg== - - - G1NLnN9sa9y1X4tVTa7Z5vEdlVBgkVByf8yK2o/0LPJPIxO7P00pdssqIzf7MwN3xou+/r3Mb7Tp -RHUWKQflNVVVHyywKB41IccJeHPLMCS4HxVxTZj+8o9dLZ++MUFMdkxTSh0quu85nZANIJa2ektf -b3blPNxsT3/gGEem+O7haJqLHm8MU7N3ZWzE1jgmdnscE7MlRoaaJfBQmxqd4DIwEB59Q7fX2Dzh -NTUMHM3XD/yY51f9WuDxgVf+HjBO7xygJacJmVYVrdiuqWJtjmF8/uTLfFP584XG0ic6QfqN5bbC -D+YReNx8V+XruVbi180BUdl6n7BsY5gNXh8lxm8CenB1EPJlaTA/0KsngR0AB65P0vJ3ZYxit0rI -cqhZsO1JXIJdiY4H8ADq0RMLLApkrHkCk+rrterScnBONRvp1gD5rWUifb26jmbJEIsEHjHbXvR4 -pQ8ZbJ5iVm5Mcsrn2qgRC43MqNkq9EsFJe/6BCn5kkqU/UzdmPe8Ex97TsYBv7eOUbIXOkrfGGtT -71oHSz4vtuU8n21IuWceyn5+OItI2dPjctZHkGGbYlzcgYHP3DewcEdzbNrBLJPkBvyyVYlKmu/O -e2ZTQKJ3VeQC2wSrwqtqHznQtU8BnwW5OlgWtDKQ89DQmHCjD/ru0lovNGRxEBPVhoy4sNJa/Ppg -hkPa03JIrmkGgIPkcqsMnrzQW/pmuirn3r/zvh6cbIFZDnCrTx/r2bRfprrun8DhBf7HLEZHr/WX -Bdlkvr1ffKKhBfnNLCFlewD/vTfNqPRKWRD3BKPcOoRNkAoSbg0QY245lSzM6gAmWS5Iu2mdQicC -eIjan2fTj5bYzCMA/zz6Ku7mOCXPoeazdyaZYK+WUmyTI+JXe4uDtvqgXzf6Kt/6aneZ+yFRE4yk -h+uDiJTVIVy+mJnpL2dl3jMPQCP3plDxB0paiUdGh60NFMcudqa9XWpPvXtooBH3DTzu+kB58Fp/ -9uP1wYync80ZT7ZHSoL/WcJDgHxq2jOxWAOczLfthNTnPxbrRw9nq2r3NfRK6wjsy0J91j0NP9Zv -Y6Dgy7+rvKbZXmiYVFge6pip6zlcrZuwy6kFq33wL4BPfbs6gI7zaGhw9xyHseer966nlG2LMdHm -EWyUZZyUuuyrs9SY6bfYnHZXyQm7NNeYdm+9G/rGKeHD57thUXJh8s31AWiIS0nI+zFLKPsxTyzf -X6Dj9mb4XK9BINw3VYkOjKK6nwsNY74+eD/nefz9WRrSrkMlOQ34XKuOmKPrR33vIabc2hmh5GwP -kpLktPRrjQVBx+tzXp6QkyIubncVvbCOk1IM/aSEFlLmgx5y5I31YXioS8HFedRcgkdHyNs34PJ3 -lIAv6EGFbE+xYFZ5DX+unxy/NEyIN08RslxqIC8MiKS/F0nl/yxweUcmoQgYI3VvRsjbN9V1HZhE -NV4ji+BUYzOtkyXBlsnSMJuEnOOQcio2RikpMk7Z/R509qMOSOzNrorIv9og4RcbSkLOD+Njrs2K -su46xNTMyWpwUBM65vJqHzHXLq3Cbw5ho7fHyj86FeVfrRLwS88MMtWto0AtMjryYLGmz2mgVrr0 -xEK3DpXu1GHy7FoGfldNQ3uMHNaWFJuwNey7P4ovMrUjs2xTnArbpG88mCTnJDbJMogIWe5BBkuF -+Y/5RZ/Pr/UhojaGcdFL3ZVB1glM3NoAImy+Oz9wbbT4044UFQfkI2GmA/JdXp/nD3A+79dKdd+R -r16kjlhk9tWWnIBHmCdgsVY5qWC+FxUKxOljj57D2TfxuDYFLn2+PeuRgp14WUpPudAO+3TO1Jz2 -3K6ilI+wsp+3IyOvHALazaGjw4HxQ/63104P5IWKg94Yp2SYZawKlaj82Wo/LsUD8LevhrpXy4Rv -D8GDfXVNp2lRZzvhby8Y24rfN6AT7n17fBlkas8L/neJhHTIwaFrvWnPdXWZDzjZL3/jZ/ufNg/m -f/zvJrdhV00Eb0kQEYC/A+KWx/q1wOX/u8Zg/LOCrVgfSQ9Z6c3+uDIIiQTGgzqY5XJcM1ySe4ZD -2NdxqEfTbMp/FmiE/66RUUcLBNhKf/mnjQFCHICtTJeursWlq+K59cJar6FK6Jrmku2ThAJAI5E9 -GmymQwpPsIxUfraMIr4COvu1vhZ8f6HOV2sOHDDDT7m32pLrb+mDvNvsQUdMCpLvdWM//77SXRHy -w8jE/5wnVe4bMdkAVsc7VPhsN+Az3ABnuLVs7M/Zuu4jE5/zw8RjHviuNUsqdQG6zzJNL9V34sPH -aIVP59vgIZOcvBcDsLjzCkbORzU76/VCHaBlR8o+uGTYFCOQS834uCt9pM9n7TJC/qGuWuhSCUg2 -uW+fJeybdRKbsDGKitiREtJXhvGJ043lgVsT1DKPXli3pyOXOpXl32yykhDbFDQBGC/2UM8hefUC -5p5BwHXr2IRDk0B0aOIJfH3r97SAxh8lpW324qM3+rHfpVWFT3K/PjweH3AFNIBOvLfWg0qcaywN -XGwp8p9kxN+W89OfjfJTbneQEu6bOvD/P0fn/ZZmuvX7TM/MZGoyk2QyqZPeq0mMGmPvvXcFEaT3 -3kHFXgEbKtKlKQjSrFQBuykze+93n+ucP+Q8vD9wXeCF8HDfq3y+cK+18pwA9KxNtidsyiBJm7KW -5zv6tsxPHhz831ss0Ue3UHzkFAxELeTYb8KEDy4656ObP3rs7Jo8sAu694C4EjIQaoH9jZMzCy5K -0Fm/Hxv41MPY7HY9ruxAS67xjcMTVvorL9n7Sv9ck4LeBJTkhllWxRWdsOr2rgFgXTMTFwF0ddSE -KYsasWWhBWyJvrflmbqz/tm+gys+cnNFYQO+PKDGFm4vEFs/uBgsIL+jw3oa2KfE5LrGIK93l2iA -tiQ2hLSowlVpW46tp/bF6igoaXManBeQg1O2FKi8GVb5X+Ok3BvvgXwY0hNrfEpCeVBHqt+xMHFB -PQPqVZFrQno6xDLQ9sYjA/ZgWSQJAo/DWlKVfwaRsilufbk21PJ8bbIty6digBQdsFRCRfx5j7j+ -1baqMdE+lHHW2pdxwTVe/9rYWxm/1Fv1NqKC5f9rjcnzyBE5C32N94NqKuyDo0v6wUFEHdtai8La -socyysNvZNhn321O1if/7Wbx1mXoHLsEnRYysCifHH3q/3F0jP53lYz7x42u3zVBM1yjjY/CclJF -VMFs2l3gYN67uuc+uEWz7238ruAcKtvZU3/teJkFaBDIa3d/2ZW1kcrrsRkItv6m264+xIudSUHb -+gDitZlV+oeKlnVuAPL8R3bF7W/pJTe/6Ac9O+mdQhV653C5YTU6f28RX7NjIjS9X+bwjx0dkoMV -Qf/eEgP1wc6khZSYwgMjDQ3oD/InB4MYNrNxW2pms1/OBa8N07OVjLqrwrq3J2XI0j92Zjlg3xgs -3t1XccXSlX3a2V9xdX2yPd452vrcN9WacGymwcJybH5YQSrf0dNaIlp4RlgNTQ3MgxL0HdmXFvh5 -Z3zTDXGfHGRi0Eho2dbC0rc14MSoDpJ1tIRt+Y+D2PqfFULr37GZzFYafFtDqorx846RQ9o3d3SF -dRysfRAaL0Hm/TIIST+t59RdH4bnXeiqSz3j6EZmbU7jS11D4Mero21xI/DM3+epuRcjKlxVSMVG -rIxRc0ewBad1HY1vtrUcfMRIAR9ZcY2Hy6jaPQscsEtkXmSRAoos0WAHdmHf0QpHeAzw8rGjZ+7A -1jlwYBP2bAH77xS3PLQN1t9dHmh65JagSnthCecUzPy/IrO0yoAE/maJm316gZ7yi7275JZHAoqX -4rJOKzmlDw4BzRdUIQsdI/V3HeL6u1ux+RYmUiOgM+gHVuHwx80u7a6dQQwu0CEhTRd7zzyk+Oji -inYWySDgWlv2gOuNzdg+WKYDeQ1bfADcP1oUDe0skJtDalTu2hQofrG78opLCksIaogNxw5Wh1eL -qnZMtGftWDj8Q7dgNLrEQEYtDFRwgVQfBHznyM4X7Vg7erfNHQKvllKzYxSwjywC0cdlXkdUT2/z -zJIKXDJGuWeKku+V44psQ80vicUPvutsfn12V49rjxoQRT5Fa7JnvPG5rb/8qk+FKV5XcOBuGbUJ -4EvCBztPuK3DlGzr4Pl+LSh1S9mc4x6vfhbWIkr3bTy2c4JeZhVj3m6b2Mx/r3arD0ykGDO1HCxT -kccOrujAyus6tvDYB0YmYk/PQhwADLq3KBDu6BntoQVa+7aG0AisS9u2HJO5M08oiqjwJaG59rTl -3qLLlo6KK84hQmpPS8aPE6isXxYEZdfmqAWXJhFZp+fxOWccPTW3/HOYbHMP+IFzGJm1Y+QSA1pq -2/4Sk3Tk6BrfWRZ0BvSkOi8Q4z0TbQlbc8gsnbDw8o4K27hv7eyP1cEEFdi85a76a0Ogt193VT3/ -XM0oOUusiPsWn3vvpF1UmxBVowsjGkR2RIPM88+CklwjpQ/NgsTftKRXp1b7ax5uzuIKdMLiP5cE -ZVc8wy2vAJ0b62te/m83DvxhGVW9NV/zMKpHlP4DxOl/3J2T/3GyufuqlsTobO3jfS0k/chCRRwC -MdOvgucu99b85ZORqgNKBsLcDX7Bb0z9rebNzVP8qrc/2YUNVzeHm+/6Z2BpI/DEH8agyadXh9Dp -oVkWeFXc/HSeXvDHgrD6plMCe6UXtT1fkRArto0d/KAeXx1SIQuiehryyMKkfFxhc4/tOMz+Igq6 -Y8I0Rgzo0qiR1Hrs6preX+F3Ry0c6uo0NGt9uu55VAt+u6NH5C0NwlL7YLlXjJ2QJO8ko8rZ2/pI -hkj5dbDp1a8K7LsLi6y0c77xxrjDRRJCO1AZx6x49lNgktZyaOrs2DEzcEdAnt814qp3l9DVx6tU -UsSGb3IrEJlj5IKrPW2JFz56OqcOHb2qQ8CWY/O818V1j/wzkISIDlMMsBFcLax5OIxIPe0aa04A -2KZhG8g1IQWu1A/cAnpqs1OKTNqSYSv3ALt3zRGaPBPwoh0Tj7G7yKHvWmjI/RVuR3QJyG0mRvu2 -kQGNLA7MbM2zCOsyQnnUzCJ7NeTaBSHo4Sgs/5wUkfmnu7/mLy0n/6+l3uqkjen2Egny3e8BFaT4 -aJmMOLICunuFSjl0kEh7JmRDYCaWR7EFR3ZB375VMOLXkFGx3zHDZjrcryNWe3XUlhDAHHs2QSeQ -v/s2FOTa9RlCxaGjf2HPPrR44BxY/N/eEDZB1+4irc0N6MU1FbVGJWy8vdgPvLaR02kZg1bu6uiw -4Cwm3T8BjVsfa7jt6a+6rGel/6LjlFwcYdb/mXj7zAl+zZs/A7OIjM0p6Btbd+NN91DT7Q1J/X3v -VPWdiByTDegDuEeOrRnCJZ+LajCN0cXB2YB+eCqwIOrYXeQy39v5nQfLHIZzApnmmcAD+RtZHNbg -qgNyeOrqIOSZmlZ1Y45YehlYq1uo4qQf8Lkvf7R2NGdszyKyXMOll9zi8ivGjqyzUg== - - - +NNT09g3Z2WElIue0YbXljHQs05w2i/OHmppRNaF29Phq48WYfm7xraMLVnD04C8Pu7AiG1+b6Fj -w1ps2ZGRUP8/dlL7f4Dbf91swd82Dut4kQRxj5XdXhNX3l+fRWbzIW9/nyaX3lgfw6Z4BsGPbaLS -i0Zu+m8z+PifRc2Pf+IW3fp8gVZ4UcGsvMWseHPWPVD9aGWgKcUjATSxApUTUpFqggp4QVANyd2U -N74A9C18z8Dv2F2gIPaMuHqvouL1uqwkzjffnLhjBrjRScPvWAlgvxaWCWgA3t9OwdAnJ7b5aBla -GNVBMw6A+L67QKz2z6LSPWPtcd5xYh7gy6UB4PGhAVu2NQGKl6CTz06Scq6qAHueplS99U5Q61al -lCLHOPz14TLA5DZ8+/EypuW9g9h+CLy234iuUHSW3ZuiZ9/96BFKgjo2IaBiQaM6FjmiRNRsyyAp -gQlQTliJKJfRiy+PYrPurE62lazPoIuco+gEtxieuD6NSPcpCMVrEnisH1t+QIutVHY1PZllV7wI -G4SdO0uCztjZRiBO1ob0pOoo4G/7Tg4/auHzl0aRqcb+9tchI4/pkVOq58g1l0T1KT/31r/+fmOk -+vqOCpy+b2ivGEJnnk2+c+6LuY7ytKMVJvlwmUPzqZBFXiDO+ZW1r/xz9cl7Jmr7oZXDdkiheQpq -wRnbMPR12MznHzj5A/tutjAS4yQjEAeNtDb7NCF7c47WGDbioJtKSPHhCkt07Bgw/7MqGInNrgot -klr2nBRkJNYnbAFXYhlueYnMe/LdroFPCc1TKmP9231S6Mu1/uZbK6KaS0si8K1RSvXZxuSbX07i -8u/7ZuBpOl7hH1pG3q/uoYabG9L6exFF85tjE61t18TFm6TQzNbsi9+4e5oKds3S5Yh5RHNo7x5/ -72TzjuwMUow71ufJJRJe02NmVeKZld7W/H0dqXZ7GpXmG8dnOAfgz61dbXfV5IY/9PSmm/5JQpm9 -p+WxpaPkD68M/NojaXjsGa156pfBswBGTvDOtiW7JpseaXnV11d6qCUGDuKddxz85tiCBe3oSC3b -cmLzxyUy4qOVjt/WtGf551viDgyYil0NsuhfyxT0fz38vo9WIL4bcFUb0saXgdm23I05VK4InvyH -jFJ2Y3UUneQeaLpj5hWcVZEzTgNm8TO/9uVPk7CMSyuipkdibMHl0scXTqwONiTsa2IaBpbqm4Em -u4ZbHm1N1dwLKquf+ObqnkTU5FqXpDVPDcTGrWlY6vEyHv7ejoUd2/EtH53Etg9OAjRigGWH1K3J -n+xM1uEij/fe1jEU85eDRTL0wIipCM6C3jgGym/oWFnn1iTQt85xdImUkn9T31F6zzeHKJwiFt6b -whddA/RTxr6OAQU0frlHCk/YmEOmvHdQ8e/tRMx7O77tyIZt2LfjmiJ2KjoYOxe+QqV+WmUI3BPQ -RLcUk7Wr5/H/cdDp3onGlyrCu9+XeAXX1sWgZ/tafMW+gViv5lZfs/WjXodVpKqwGlnoHG14stxb -+9fqeMM9nxIcH9QRarf1FEx0kUPbmCfWhU1senSJQw/pAB8xUSFHbjrwmAL1qYhlsb5HgH5pWJUB -vi/Fpa/0tz2XoTJ+GgK/Pt3d/OwPft2jiz0tST/0IEsTHTJMe8REaPEp0WXBBRokbGKg9i2E5nCs -H68OVxPW4Uod0paX5p6a68tj7e+2lzh8nxGL8hkxTREbi+E3kkE+PaXZb+Yy9gDdF9S15nmmyu9E -DYR2pxSH+NvFEv57i9O/Zyej3ruIiKgBVrAJaOHNmbYMfW99TkAZ0wXUsuA8o25rCpfh6AHdnsMX -/DwITvt2qDXp6zl42q/bMnLd2iQmb56c86Nf2pa0o0BnR1XIzJ1Y3aASlr01h8m3jmKTx/HlN0LT -FPyBs18ftbNZe0BeP1oht+9ZWMSIkUP0awV4mQCZ1FWfdX61F91wqKY0efrr/toYhT5z9IJuGyhl -vzq45eeCE/B3q1O4HEbj2197wCkXdvRUcKyvRFgLS3WLq+9OU7J+l+AzfnGM1N3xymBJUlZ9Ykn8 -zVNyYtqtf290KQ8WBfw9IH4fmtBVjrGGx/rO/N83Jmof7RqorQPtyT8vdVRl/WMXjn4ENPuREV+1 -r8cUR1WofO8k9M3KAOierrPlVh+i8PwkpuC3yCyjdWMUWJe+9mfOQWT8+ggufYFT91dXY8IpQfnj -z0NT7RlLnVV3LMLSS1EFLH13AVe/q8UUHZvw1bH5d8D1vbP0Vd1aFFXdiShj32EIBwMqVKF7svHJ -Xuz7Liuy+NiObvjvOoUSm68d1TLhR4Z+6Y5WSN/WkGti5z7cfWVXLMKCC4v8/Iu7OkyNtq/2TXP6 -za/4VS9+OFikIdzD8ARnD/jeaj/oPmDTT2L5ObpAaY7qme0eGShdyUn7M6AAZf7tAnxwmYbaXabj -95fpxH+t8QZ3zPCStemWJ1Jq8Q1o9r2zgdh5NiumZV3SlOAbb44/NsAKvVP1r61dhdeksNffuIag -LwdRObdwhQ9/VDCKLh9a8NCjZVzzkQVTBdyvjwJxKKTDFgXU2NKggY3dVFHqdgwszIGZhf+4QsP+ -y8PkflqmwI4B398Yr7pn6iq8uNjX+mqcWHJdDEn9rrvq9Veiylcne+sSfnH1N8Qf6CiQjSl4yQKv -7KaGUfy7f55UAeSx9LASXrStQZRta/E1QBwgHLsoxEMHGbO7wqD4jBTYwmDNfedU67v3a93aQ5dg -MGxmYkOLXFrUTo/NPAV/XCEgfIq2/H5I0pkDMx75f0MCeWzmdETbnuGfbX62Pl5//8CMrPqvjzu6 -q+fiwio2eFvOAftnqKUbI+gkM6v8j1lk2kk9NePH0Hjd061RSKqjp+H+Eq/yXESNK3VJ6186hipu -ugZrbjkGS69tjrU+j85Rq/8GNN4nF5W+Z6diIlYa4sDOZv7jBmzR0Sk+tPB5ES29aVdNqz/SMduO -tFzs2gg6ebUHkxiQsiptnaD7c+iMH02c4r+M/PLrOlbJOQO/6k/XCCYjssDFhI1UkFeJSPXNw9O2 -gWsIKQmxMyRFq+OYfBmr9g6x7PVpS3dNzrFTNBPUEKpXpZDXWzJoyr4BX3W0iK05NCHLtxW4Cmtv -84MtKbLs2NI1DPgS+/0SCbS7gK/cnEK8BeLDHc8YLlndhXjW21752xyp8VLsPLOlo+rKNCrx5GDr -8y+HoAnfzuAKzwBS6M+V7ubnpqHWhIq4K18i3147eahFAbyCqTbwC85O4l99Z+lP/d06kHlmTVr3 -bH+BCjlY6ugy9kKT1iaRuZ8Ae/l/Phrn//po7P9Zx8M+rSAr9/SwdNtAw31S8esfcXnPTm7NEiAf -lhi4Yx0VtKfElG1JwSlKRuEdDTcD0GDpv+7KodlBJbFxuaPhZmgSkRFVEMsiKlRuVIMqimoIbbs6 -QrOWlfXrhrg5+cMiiwJoicaoGpYTNqDLdkxE0N8OweC+iQY9tDIIm3OUlgVB88tdPanh0EJu35qA -vV3kl1/SsnNOD0LenpEgU//cGAcnAlqrGFX25pd3t85/PY4ve/EJsMttLSQ5pIEkB1XgxF0DBlhb -CgTQDohNOSoroCZWHC0KBXt6BnZrui1tdwFbE5qFJi3y8i5IIC9+MHVW3+lE5F0reHn922F47vlJ -eNb3kpaEr/SEtO/1ZEALQ19/1wdKOtPVlHh+gV16W8WtepR04/SJ5uSb328p8FDPDDx5c64lfs+C -B3s1qGLnJDjOPdeauAf47f/xMUXrk+1pEQ0dfbzSOXbo7Jr6sCHSfNrkjnx0EZHvgRjln2565JVB -3pi6q++sSttTgjPINK+k5ZVP2pS0Ja59vT5c+XTfwERsSLFALGx6OE8turY+igSuv+qKmpD703R7 -6vey9rffKtBvv7Px8s97xc0Pl8fqH3LBL0/2tiaeCkwhs0PythQzv/CataPgZkhWeD+qLX94tIys -fr/CYn1wxuoN6bhjC5sW+139cJFDOjCQG3dVhNLwPLl8WdR8e1nYel/FaHwwCEo71d/07idexZvv -JbDMX8yc0ivb020JURWm3DsDzduag2Vt62gtUSOPfLBIaAwqwIkLvLzflYz0X1YGqm+EZhAZByYG -NgzwSURPAx+YePR9MwsbVSIyw8rGF15Z0Q3HMMAjE9Ckj4tM3KGJRfDLiZX7RhZx38in+WZJheuA -5l4SNTxY4Dfctna33FkVw19tztCqjIK6q2pG8YV5StHtlYG6O0AeumnkVTxwDYPTzEOwBF5j5pne -5twbITkJ7BhquGvm195Y7mp5tj7W8mp7DvLmeJEKPYzVDOgZUGFrxvdqftWzD3Yq6pOLjHxvR5S8 -t0Fzjq2wXIATa0zdjY9IZa+/H0PnP9i3srqDClTuxlD9TVd35SU1NfNnesm9k+j0y59PwV98v6OB -5U5xqx/TqxP/cI7Aa7c1pDpLX8lVFe3VLzLcw18XO17/5hmtex5Wk9qDC1Qovur5+Xlm5tP/rLIF -sXnZHy1M8r4BUxKQgRNsXaV3DcyMi1FAt0/QSp6OYQruRHUkaEiFLgnKYMnecVCKXlj2RIZN/93A -KTi31FP/KqKholT86ticgVyA0Rj/rLI7PjoY1KgGmuGdbny+PtXwIFZ7cgjs/9o4DLCT0j+2puCp -QSU2PzCLLvJKMfnbSkaLS4pM1nc03vRIsVlzhLyzouoXXy/QCy4sCWvvbUjhGcDnqvUq8GW24dYk -Qd2bUy1J1z4fan97JaxpL9qQ1Tz2K8HZu2YywqdjMaM2bs/7NbYoVgP77y0yzSOtA/iBwf3k7jN8 -cPMGjlxM9oGLgj20YWoi6ta3uwuoiqge27IibUkPqrCNYSAWGRlF50ca477urnrwmQL77pegAlem -51dcHIMnn2RXPvl8ilT0G7Xk+clxaPZZKwd0V4HJ+9lEyfnZ0wVo5+Hqe8OYxJ/ZtU++mMZm/bY1 -0fZmTVx/38At/sssLLnjlZQ92l+AFR3b2fz3DtE04CNDwQViZVBDrYsucLB7Jh55W0UsD8hQqb4p -VLIL4Ct7T+vdntb0H1glr7608lqfG5nNNzXk4jNGduFFa0fhDR078aKcHHd6qbPwWlRJawrO08De -KWhSrD/murj51Ya46kFwuur+xmjRg5CsPn7HiMjZM1CaD41cckiBK47OwzPeGzC1BzpIbkQLLd5W -InPfL5JbwxpsiRvQtABrtoUXhAzvDKnYOdjyQMvK/llOzDoFsNMf2/OwZIAxs+dplefNHa0P/TJ6 -5Up3/a0p5Luf+FWPvu5vfHHK0VX/l2cA+WZrnN3iHqdWS3A5ZxwD+JzANKfJP4F4F5bDU0IqbOkW -YBM+LaFcC2gZ6xAkMWqkgPatFNihjQgFNDX4cAlbc7CEq7MPNT3UC2tvbEwjiz+uCqQhDb58c6It -YV0Mf+cZQ6bp2DW3xtszzlj45bcjakJ1B6bgz6bUB6cWOiGlfiWpWsfL+FXNSLqo5Q== - - - pj5yDue/PDIzMEdLfJ5/gQRCVzz7fYKc/fwfN4tzaAHypy52zr3psaO//JKBnXnGwM6+ujmPL4MX -vzqNyku4EjVwuvZM+BZrZ9HVGXTCT+zSO1+IKu9+7u4punZgxNX5VLTmgrjr37AaEu8emQiYf62x -u97bCFDvdPXdVXHJ5bC29d1HB08U0lERs/Si60Ze8fWPdlbs7DBox0Co9stQ2b4p2FvPSN2t1bGG -++syfA6h+OX38Kx73yz1176NAvF0YwqU6hisemHqLL8x0p7xA6P48RdycsrZoLw5dVsDz/LKm1/u -GemA3uoSf3D16oA1Gz920ChAngT4HJz+YQXV+PeacMqnJpAWeksSjlwU/LGH3fHBRSUcLKJLP60Q -Ye/taIhPA80L6EiNW7O4wvWxttd6TuE1HSvzz8g86K17HJ2i5ZScVlMLf53FFf8qAKWfRKQ/+kKO -L7/p7m19JKh5+g0p9+oXI6DH30zh33zbnnnxxATyzU/r0pZX+oGa2z2QV98vdTS+PTay8EdmYsuW -HPbOM0Ms92vZmF0LixzQM8DGMWiijFl6eW0KXRTVc/ARFa1pawKRvCysvGBmlv4mw2R+P4fO/8XV -h3wzDM3/TYEr+N3Kqbhi45Vf8vRVPNocaUoNTrRn+obbX1kElVc9Pc2P9mfpdVEZPvc4Nid7vP6R -qyvvwvF887t/LaMrDjTtmcHx1nh3f93NyBywD6OwtJAUFL+ran0blLclhJXtKdtKVNaenta2Z2bA -vQpCiX+WWuGbZNdbRJVXpxDx30zC4r+dJ7z7zcAuOrvcVX0ZiGdvLX2w10PNaadWOpqeWjtqn05C -409ZWLlXNwYb44B1fasTttweROad9c4wYHsGLtnaU3ZjXdrw1K9AZHomIC93TLjaPQsD7Z0nVTol -sLjAPCztP1s8yd+rHNGeiQ7dnCbkmLvKLq8B+nN/Ed9yYKcR7GJoXEDFBIc03bygupOiYdddJxY+ -/RaT/+inEWjq+aW+xjv2IUhmQM2hbKnZkPUZZO7BEpP3foUr3Lewyb45bKmOX3F7oavmtnWw+cmO -gcn56OqUHi2zyFEDqT6oJNf55OS6TRku1z9HqdxQMBrm+S3PjF2o8j1z96hnEpowjcz6YaTp7Vcz -mNzf7N1Vd3Y0kDTAn2vXZijFze9efNsDTX94bCIgPznplJAGnrFvQtW9XyYij6xUeFjPQPpUlAYV -r+7eyigk4z/eDvnxCqk9bEDmbMogL33ToOf+qZYnQDxKWR5FvYLnxn+NzHv8k2scVLmtRRTP0xNP -6Zhpv1m6qv+y9jc9cwzXPds1IsqPbEzqto6LVfMLzvsUqJoPTm5X2IisDKpaEgNqRJZfQ6iIGnEN -/2zwx0KLHLaYWv6wLP7PL/YdHNGHNYHk2EGPzfwu35I1P3VJq25Zx5qfOWeYDVOkhgseKT5n30hq -2tU0xYenax+tzXBhBkHj5QVm+WkNveJXHavm3HI3+LZbjHyt49deGgNnfD/UnH9uDl91bVnUeN3R -33zHNw56EZIj8+xj7a9l1OLLbnFbalhNKPbPozK25tH5GwpqdUDLQe8v87ghPQu+rgC05yyuaMfE -Z0fMfEZgnlzmGm59No1J+6mj4v5Xo5CkbxWkstOjpIYzcbfPn2jPePybp68lHtDz9xe5uWdtoqKb -i4KCixPIpJPc8kffSNvfnVYzKy4iM+59sz5Q++q9Hlfn7q2+a2LlXjBx3v083HL3i6GGx1/KUanf -z3OKr2Q+OH2i4tn5L3cUMFCs1ugfGwn20UyC7ilgJV5p9VPncOUVrbD2CqY46ZeB5syf1YSC32aR -2adVuKKzNn7LX/P4kl+BdHJaUBP/LTnn6VeLwuo7SmbJbWrRg6/gKTe/7ap5+aOSlHnaNdB02z8D -S/XPNmT5ZNVvjs0E0IGZS9nVE6qBuFu5Y4Dn++Wtb1YlkLhgrGZvBuCwJWSTT972DtA90LCiVxjV -4aq9U80JG9LG+K3ZtoTIArZkZ4EBc44hc6YI+X94RlFJhg54wgy98cliV+3tdXHFo9BcLcAjoOyg -DpkX6+P00ckRHljo2PVZcnF4gdoa1qHKDqxk5CcPU3BkoxNDC+iCiIlQGwae653HVXjluHLfHKF4 -fRydvD4JidvVEZuOzXxeVMfC+Ofp9d7ZHtLmpLDNPUbOXBmCPZ8l5V+YQKf96hHDEvyz9KqomtoY -BmwyYmKioosC/raBgg9qsY0+BTJ/VQx6FtET6ncWGehDQIMdWomwAxsNs2flULcNTNS+jtysZ5df -nUTl/KymlZxxD9ffiiqReUcWBt4xhUhbHgPHbWsJlVtydEbEgC4K6aFZnqnW1z4lpmjPyISFlLiy -2BmJoxUmPWolQv7e4gx83OKPfwByx5GDzvRqiK1bGnrL5iyxwK8gln/Y6JiLWJiUfRuH88nZJfvk -EA5+srHpx8tM4o6Vy1iXkfJ8sXmHcmqsT/pNR1/FVfs4q9Ykgtw18BqvahgVvy0JSs96RlserE1j -05ZHEXFLHa033UO8ctdwT4NriJyyMYFNtfdVXVnuKjm/Mdr2/MBEb98xEerXZyEJa1OwtPcrvI5D -O4+3u8SlRc0MRFCLL91ZYuL2LHzunrVraGeJSw2oKFWBeUrVugSdttJTf0/PL78wRSg8M4yu+ZVa -lv7tMKzwipJWdrm/+dVX4/D4r7oann0+CEn+VsupuWkbQKbaR2AvY7/zMKvf/uLsa3q10l93F+Cj -H0dhKT8pSVmnjZzKO7Yu0CvPACZZJ4K8wBTFfUspeH0qMo9qWpPU3vZOND50DpRfHwI9/mqk5elX -ps6aaxJG9aXk+xc/x2a8+sk1AH1iFtRfU+LK/5QhS85T8l58Xf7owomcG2dO1Dy+9Dm3Menr3JfX -Poe8u/u5sxtYx57a2xtjtbesooKLMnzCKUH1ja+k7Q9PhmZbU1ZnkHlThOwr1q6qlwdGAnTfQEaE -5MSyXTW2aGus6paSkvDLSl/1o4CcVCnGVDx1SluL3OLGxBVRfdzGMOzVDnARmxPNyWpW9vmexudf -rovJuYvd6DxLDyg9MAlJVNHTLihI8b+sjuTfPFoCZ+7oIJme4TKAQesSdgwstHUYUxpUoWsBBgIf -2bCNH1eI0PfLuMZPK3SCfx6eBzDMpY0pWPaulgIJzcCzZbjEX5XEnKvrw+A47zgkblOCSQ3MChFb -E6zqwCynNaAQ4jemGA3rE8SCrSl0KqBl01bHkG+809iM6AKXsCbB5A+AU8/JaaWvj23sjq0pSHJY -D3DdMou0s0Rq9s63JmwbSW37Vi5nVQpPAnykEWBomH8aU7A51vBgsSP9sm+66VVAgcryyAlFAJMU -B5SE0tVJ+JuDZQrikwew+3lMqUsMSfDPQVJCCoARFKicPTOx+e8Nbv+hnYoDbK4qvECsO7AQ2wNa -LPhgmcV8b2czj6wM7L6Vivaq8RX7Vibz0MZmf3Jwhf+sMCjvlwiNOzpCWWAWmxUE/Mk5hIgz8esv -7y5gy7X9+HcmEezZmpRUYB9of74mbr6/Odn4wCNpfmwdqL+53Nty2yPhVNqGeeXOQVKKb4ZWuRY7 -tz1Sd9MrbX0anIfnBzSwdMdk/X3rcNPj/WUOMwz4REBHB4X1TNiOiUk4sHWOHK+IJmLfLWybcY1e -RXtaSEeu25jC5fll6DQ1p/zCACz1ZE9L+tc6etPV1RFa0VI34u0EOvc3s7D1mYrd+tLUCXnmleGy -/Qpy1do09A3AAPErI21xgO4uMXc239Gx664BMTYjOAPPCCvIlSGAnVwjhLTlEWySvgP80NoNjd/V -MpCLsXNo/c33XUNNTyewmRdnKWU39QOEBAkHeae94N3J0bbqv+zDuNQpUsVZTunbz8nZbz7DpD39 -DJ3y9BtsyqvveaWpv44i6i4g8lNOcaoSTk0Qs/9glD34YRaT+OMcPvEbMSLxu3FM+nkDt+yWfxZf -YRpuS4Kn3/pyCJR84287u/O9lc3yz8bmB7S+cPbk/a6lpf2+Po4sdUwSixtTH54y9zUWHS2RWg6A -2OnsqXtg4hRcHm17caq/8cGXcnTi96uT+HxK7bs/apNu/DSDz70TkaPyfePguN15SFJkrvbtLDn+ -sqju9jdaSsafIYCjcKXxP07gcuKOzSTC32467e8VQtuBAVkcVoIzVex3F6cwKX+4pK1vRwk59yWI -d2fklIyrKnLRvc3R9tRdDabcNwVPWQUClI5afHNrrC1vW8kmWPrheRsThHJg/7K3pqi12wpac0iO -LXD2g5KmUSl/EFKvfjaOSLnrGAPlu0aankf0sfN7LOqelYYCNBhiZ5FFC2opMA239NqWDJFpG4bX -6Dvqk7Ymml/pWSnnNseq70bVwPubcJWbU5C3AA8lb8oaXxxaCaCAAlm+Mgh5sdzT8nBrCpoSVmGr -9vQM3Ac7m/fvTe5QUAVPD2ux5UfLdNIHG531t4PB/8fDFnxysbnvV1i0YxeT+XGVO/Cvde5gRI+r -/tvJ5v3Hzek80hPq1kZBzz0DjXdWB8GP1sVtzzcnWl++Xya0WKWU/M0pSs3ugoAemGU1eKdwmY7B -uuv23rI/HH1lF7YkiETPODnb3It54R5CvwlruEjnGOi5mZ9/xtpZeNbIzzvrn2tPj+oprTtGDmPH -yhMuTyLfWcTIxLCRB6xL99i+rUt8ZOfwjyxUVEjfnr0NMMeWBp6v4lZcCcxQy1Yn8Lkrg+2vTOya -S+uDbU83xdh0z0jbKxO/8NzGBKUiqBaxAD6r2Fa2JdgHSi+v9BVd2BhveBTREapCC3SQewz6wg9A -8ycrhwFwfI1Pgc31iNtfrQyAH25MIpNitVV7JhZ23yLgbc6TK4MaDiGq59OCCmrjpoLRtDjJKdWM -kJN0vYhnrnFqsUVMyZnnQW/J8K1XZ/HtD/R86AtnHzrFJUK+tArBtzWM1utTyOozZn791XFyxRVG -wfOTU+0Zv8T2zSFFp67LKZVeJRe2qhSRNUOYxB5o1i8aRtWjWM81z1TTE7uk7qZLGutpDHodVhFr -1+YGmPrhriYBqPycX4GtD6taEtbElX+ZOwp/k0ATvxlsSTo5AU/7caWv8ZFtklLWWpDw49MLv5zo -qnt7bnsGlmbrKLxq5aT9rkA8OUnN/+uzXtDbU2pWy42lfnpq47snnzMrnl3f0aLw/7jpdO949f2V -rsKzWmb6Tx21tz83CSseGQZBieDs+6eo+Y+++mShoD6YSZAjA6nRN9v6dgwR/yO76M7XgoI7nzlF -5fdnmGVPmt9c+WaOnPdiz0yDRtXs9nUJ9J2el3VuBPT6S1rB7c9m8Im/eUarnxBLH/yqYhe8+sfN -H/q4yh/44KQSd03w0oAalrnYV3NjGp91yiND5aDK3pzNeXDhS7cEVLajaHnjlVTe8I1X390YK70x -0HzvG37JtW907OS/Iou4WnTho++RGQ9/NnU0JH20cJifbDzBByuHtWcmwyIGROm2ug== - - - Ke6/mxTaBzeNi695eQ+c+/B6UE3Af3D2qt+7ezT/ExAq/+tjDb63wqo3JktubOsxLQPtmXcm8YX3 -NqegGRvjkHjfDDw9qsOUHhiR+f9YcbV+FTo7qGG2epWMRvso7m1IzWkLawCNOE8A9D3oiU1Ufk1B -K/pD0p7xvau36YlPQQcbexruOgcbHx3oKI1HZgr4vZWK+GCnU3bNdMzaPLViZYqUv6HmUzZ1vZ0r -MiHIq+0V7BgEjKgSX7yjQOUdmvC1ER08Z0eDLtjRcdEugIOXe0C3FyjFZ4aa3nw70fbuew0h5WdH -d/6NPQOH4lWz0e5xZNKOntQQMeAqPtqpyI8OKm7HSm7zKuDZS93Vt3wySGHUgKu2joAeh9RsaFjD -RhwYCM2xufMA3zTvGmmQEKBR3XOItKiVzQgs0NFLACN5JmAJ7hlExqYaWxJdIkO9C7SmpTHEy8X+ -9kfrE+zaoKq/MzY3Y2uamOsewiYDmPT7YGvGjxJk9rmV4bbXwPOeA3HtKeBv1Z4pUplrnJC5riCV -enUMkHue1bCuoNfsLrFJ7228jr1FItivReYAmqHVq2I1h/TU5j0LHemew+etqSiVW2pa9Z4l1u8H -U7AFsIZfRW0A9EDtloxaujVHLvGMY9NNI6hXs7zma0pO3a2ADJ1rEdXcnCNmntPSi/9aEsFeuEaJ -uU4po3BxhJtvHOHmOSdIOQcmKuaDg8nYVGByV2WIjK05XIlfSWsKaNlov4GHA96/2DbY8tQ/2fLy -wzIB4hyqvbHSW3PFI2l9LiPmn5e2Z/1iYFVf9s5T6uQi5GshKOs3Nb/iTXABXWYbbLpp62u57xpp -e7kqxmWsDGPTAxpyfcREaVmbQmQEFOiaDy4WL1ZzvqOH561O1N51Af6/LgO/3pATiy3j7GI5H/pk -klh5K6hEV7tFlX+6e8oumZiZPxtYOb+ZO6of2XvqnmzNYsrcCiGiF1Hwp6gl+RKQo8oPAbtbmwQ/ -C6kxxX41ttQz056xC3DMjp3HMY9DcyD5j7+vSrh9PqIlYP9nk93zbzcB++9lRBWQc5PtPUVXlnsq -bptHMQXFL+58XZ9072x4kdjxaZM7emQn4fzzTcn27qzzanTC9/sWGiq0xKO5ZmlVi4OoOJ+a3hiL -zf55Ugmw989iekpOKbukYVff9s0QypenKRUj+LLzKm7dgz0DDRbrdbc1C00MzKNzNucIJZtqIdGv -7+70GfuHncpBnknSD7ZPT4g8c0OcjRlS0RKvCMildfd80w2PQ/L21NVZRs0Yrfqv7rb0n5e7QU/W -xxBvnQNNd93Dpbf2FsC5ESMDvapgNjmmycVBI5e6vcTGBfXE6oABW7qlQWa7xlueBRSw1D0jsiyg -RxW55cgUlxyTJeNXPZTiss7ua6mN2wpq3baKUhc1U6EAF1NCi3z6ygytTtvRFHewzCQfu7nCYzdH -cBybvacnN/jVhOKtOULBpoxatqVkgpaHEC88EnKeb1YIWwHuGwWVlxwDFbfXxhueaPkFZ2yDdY+3 -ddSmGU71LRWv7sHOIh25t8RAh3U08L4JVfaPG1p5ZGvK8Kpa4mOfYVPb32MWU0rs44jEQzuDFl0k -Iw7tZPgHBxFyYMXWb+tQBXtLhAaAn/GrUtgr3wwybVuDzHVLmp/aJdCXXiWxfBfQxzsGJiLWgzsQ -67lq5DPdc5yWTQULtKVkNK/LqXV+DRW8Z6ZAPqywWTsWLm1dyQGFlrq6IxYeO3Z+MmjiUVfVlBqf -Clvgm21PiWjRRREDl2jqBD9cEkKeBVU81KacXu0RE9I3ZKQC1zQ+c0lMSluZpJUFjEKGU0YuMfQg -X6zLuynr8/1Mr4INsBC11j2BSV2bwWbH1mTfwqbsAvo7qAF0qYnYGqv1CemIdXtWFsVnYCOt0+xK -zzytMmSggbcNdKiBVXVhFchLvnlMeUCBKQrribU+Nb5sXY4rsI8TM9fVTFDAKODv2DvHYn31vGpS -0/tYb99V/mBwqaNjeboXa5UJmo0SVMJCf+Nt9wQK+il2Bs7D5BxYoaVRVVt6WIksCarwDZ7JTrBN -3AefZrS/0XVBi/92cQbDQI5bldbe1zBzfp1BJ5+aQaefjQD7CcRO0IaSXr8xz0OtKQQIH5BL/CoO -ZHOWUbs2Scy2D6Hi7MPwlxuzpNLlCXrh0ii12DNDB0WXgP8FNPn6DL4woKA3AjmmObzYIVjXcNrX -tEKiQ9FLNkr6WiyTYpp1vAe8OsNptHS2J2xJMLlhFakhpGW0LU1Q8kWY8nOchowfrQP4Qu8cscg+ -XHdroSP9d9do6c2AmlS9oRHgt/Sd7OCikBswMRE+DQPkX2Ah/XpWu1dNrQ1q0Hm+OVC8Vw3P9pup -rYvT+FxGe/Z5TO6zr8LzjOaIhocOqhjNYRO1LWAggza09OZ1NQsUMgj40WVBR9jKxAK5hRLr47lj -oLTsmWiw/UUmJmpkwDYV+PyVEUTcxjS9dkPOARu7QDdMHXW3bX21DwDWfuAZb3jmlcOytg2UJsto -W4plCPxub4mOCWmJdfaRxse24dzrh0u1r45szRm7ViJy2yIaWtP0d5nFzDrHJKXi2NU9997dIT20 -00kRIywvYmhNjRqQJfsWQkPUSKxdGQbf986hcg6tRPCeCVMe0eMr9/+3JgZTHVDiyhyjsLiQjtq6 -4xAObhm4dK+Wg45ahKJDm7D/byB+R7SYWK+SfK+WUr+h4LWFzKLBJWlbrn6wNt6/QAL7jVR4yEgE -+9S4mqCOAvJr+QSdsO2JWYRICes7BetyRq1nilqwMUer9MyRK1fnWdBVdRdrTdcrdM1xmjRd5CTH -vHTELh/r2lCxwcB+VXrnCRUhLRWya+HQD1c6hvbsXGEkVuPk6ZLtOniioIkKjlhZpMASHeXW0cGb -JgZq28qi+g1MuJxedWFZgiz0G/ikLSWxbBvgBr+GWLelJFRtKWngsLVrJLTcMxm0CLs2dPSWqLVr -eG+F3xuxEqB+A7HBMkZ4a5UQUpyxmasmXOPfns6pj54e9Qd35/iRUyDet/K69mKzQBYFPLuUW+WY -5FavzwlgYYOo74NTJPPOI7PXJqGJ9hFI4nJ/27PVCXjSjpnPCeoE9N2lzoHo4rDeo+7r8Cp4kKCa -j3bJ2LWqjvZ7pl74U4cE+86rZLZuKbtZAc1gf8TMJYfN0KygjlwTm5em6wfHa2ilVz9aBIKwqXsk -YOyf8BkGxu3yHrxF1glZHGFmOaf4DaZuerpnmFYa0fHxrhlq6Yyw7ZamF/FiZYJSuaEUoE2D6Djb -GO6dZwpYHxWp6djG5W+bOKSgkY1xzeDynNOYFC8g4kPGTl7A0MnyLQipgQUWPKynY/dWGKyAmdiy -KMWlyTsgjxQcSJxTJoBYRuhZm3P0qj0LDb5tYpO2FtjtQTMD/ve6QHrg5HVtmxmw6GJnT3RxQP4h -Vk+8iKoMKMEpG7LmOM9Ey2MXoK22VDysWUIpniRXnlmVADwBcIJ7rC1uUwZLsI2CHhu6624AGuNp -VE9uigLxeX2WWuOeJNd659HgWO35BycFebjC4W/pOeh1FR/wcxHLbxgQb+j6B90qAWpDKyD6tBzy -gZVOBvygenW67e2GHJ0Z1FBBEQMDGVDjStanW+MA7fcurG16szZZeG1jpuVVWANwJKC1wkC8DpgF -rNBS34Rfz6UEgBwG6LJCh4SQvjZDKtux8DsObD2zPnNH3yCx7LoAnPrrupwI2l7sEAaW+AzvEgvr -kJOLt3Rs+BbAYEEjnx21icY2VYCummVU+YG/h8w8+pqGh1lRdKLtc50wj1wAtU+IBQ7F5OTSjJhn -n+uC+QA7X5/F5G3JMYVREx0RtvDZIRMHv73Ipe57enURF4e/vczvCLs6xyOrXXM7q8LxXQebFzBR -4WtqcpV9mlhgn+a3KkSkdC4o5wyg7aqjNh5ve5lJWFdRGrbNNLTfzMKsL1DqfWZ6+7aFP7AsbY1f -mWh+FDQB7K0m128bmdg9B6/742anMtYvIGikQn06JiJq69e55xhtrmlCJXA9jNAij7Nr43bsr3SO -RZY7hzcMjPZVNb5oy0BuCiyxCRsaQolX2fr6MFZ/butXH9kH9Ae23pl1JbvVLqVkO6cFzbpRfrEA -VHHK3IPO3TPzmVEjExNQ0ppjZ/aDAN9sq1HFIWNPt17KrKRD0s/WPDv/1Y6CgjlYGbbvWPvlXj2f -7JillVolzHxTPyvDMiGo5YBKfu5szLq+JaPTdi2iwegil7wD5P3Yd8Ib86xG54SwzirpqNYPktON -3Y331uXwrC0lqWprntHk1/Lwjgl+w8rsINkq64baZZT8LWUH1jPfz17VdLM8Ck7r4jA82T1Ja16d -6+fa5mYk2lExWt/dkbs52YvdlvczfLMjgnVlL8M1i8zbVNa+2l8mgPbMdOQBEN8j1qGFoJ7Ztj5N -KtiQUSvCC7SWXRO5KWIgNno1dJB9mlKwqmCBt1RdVIeEmGntargaVlGbggssVMjIxoYMDKhXS29x -TBPzlgE2j+iFwlh//AMbmxa1UuBbC7hyv4GBCBm6OtflHQRNDzt9fqAr1zzVDdnQ9omCepHIr2JD -7cOweGNH7S2/ElsRMbGI6zOEag2v/qptqPXJgb1jOLrSMbht4VB8C1yUV81o8qoIJWvy9neBWM8h -K79jYQiWqO2Hxa8qezlLk2O05Rl+oydm68BrOxSCdo9iQLCmGB1QdbJymDUVvztm+Phth2hiG4j5 -u55u5a6nczJkZdMAm61wztFrtpf4tD0HGR614erWdCL2imqkb31hVOY3Ds0650f6FMMDteOdAxnj -gv53C0O9NWou/sHKCKM8ZOgfi1p7J3dsXaM7Dn6v10yDbdsY2KhDNLXj7DfurvcaIg46dV3Rnr02 -jyr2mtnEFSWryTBKS9ePUN7ZJ3CZIcCHfWYWalPPhDnlPFRkWdi/5+rTRpzd835Ll9hr5vM9SnzZ -ho6B8Fm6ByKAX0f+lw1YxIARVxVZRJXt2qiY3RXRVNjer3TO4PPX5sktUVv3VNQu6N2xsajrSmrd -8jQ2fVVPaoq6qMTDDWZPwEInBBf5rB1Xh3h3WdC5s0Jo3bXTsH5jj8gyPgQ3jMqwqgEFYrxDnD1B -5j609Y/CVifEtMVhTpaqg/rY2MtPdY31N7smp4WmqWmhdqijRM7HvNAL2tMPl3tmd2wisd/EI1lk -tEKdlJOvHRej5oamIGJBf3JfO+aqmkEp8s30duwYRJ1hIxu+Ns9rtEt6atWikbw53lCmjDeSK0TT -b2DKS76YpLQ8CesHxNv6oYmAfmR2WSaC6cSjsPmB0Rrt2HCLdWaiY65/rHm6c7hAMzSPWpwyTJkm -VWOKYRVTypXViFnSbEIL8TqxEn6rt4r+ZAozmqYQTtUaegfr1qf48I92NutfLo4wNiskau8SmyTd -tdoeSdVCr7TBONBZuKpgVLtm0WmbSmJ1yMBn+wG/tspE7cpO+mslg3DXOkQvUQggqQ== - - - znEqeE3egV5V8tDeBQFr394l/eTpVgA+htxeQJQeOrm9sT3aMvZ0Lo4zyueE6PtiAvayfriv0a3q -ZYVMXd0+DRNsEdMLTP2EjNVxWrkXYF2NEHbfNkzMso+i8zyThNKwScD2LvAJayouxDXb1b44IWxw -zTFrN3U8xKaG1gRo/VyPnF5hmupuUUin0BNd4mL1YG+FQTwIVg0NNarEMoZyaI4pH1Axeokjb0Xt -3Hum0YH2NVUP1WvgojdMfPIGwLCbelpzyEJHhgAt4TMx2jeNAKvp+dil2bnRhWm12DwrH9WIR5qG -usQpAp40nk4avott7T+LBQsu1mbU/IKrQb6YEHU2uGcFEK+Oj9kyM5GeBXL9jpPfF+t9te8UzYbt -TIZ/kUPYtPb02vUiimFuADMv7qtRjQ3WacUDTQ7lAGNFNdylFw9BDaNSjG54gq8T92EtMj7KPk+s -sk6iM/wLAlJ4aXB22za6tOvuVUdXuiR7DkHf8Spv4HCdxvp3gD38Ly9//P2qYGzXyWaHbBz6mrG3 -26Ec6lB30zMc851Eu7KTap6ilbgXhKwdB5O9uYCpdM3hy3wLop6IdVAVWuoUufQ85MpCH9s4Py+R -Dy9xJKJleB/HWNhFnX0lQg/fHSNMpEzQ5YWD9JkkPKL/GriKfJnSwH3aR5rI6aMN5ql6uvKWxvjF -63OdyKBl1LhmGJ1cVo8I5yeH26QSOUwsWeH09y1DeNSpJ2Kq7J1SqGxSd0016UUDpYbhaaisU145 -ytBksomq11XFmAs1WfDz0Cru6fZK1g9Sand60DAyGVnqHfMou6hGCbtIIx4CTw/NtYuH9ejRIRNa -yJKnc4mypx10bWafcKVVyNLkkHGTT2qLSWfrikm/v01FfHPnbvFnjy6mfp77vP4HKmgkboKjr13o -G4f6lPiS3SVkecSCrbHNM+qmu0fyhhizyX2UybgB5uhL2bCsQdY7kGeS9EE9Ckn/8vxUn2J0tFnK -6X4tIXTdF7Yhb4FTE7+TImHv3OJJjk/d37m91Cs5cHYBGoNK2ZA1vgyq2gv2ljvFHuOMY2FymjXT -31c8LhAkTnAHc41SpWhZLhE4lSNCy0Rv0xi3I4Ha2PizmEB8aujpK+yBkv+cYwpz3VMDNO98H9Mp -ZRavT1PLlodhCa5xHtgwNc1fmB5GLEyNIOaGOrNneznx8uGRkrFeeXlfn7WJjpHcwYEYN3nE/nSR -YK6QgBO/rC3GXynORlzJSm07U5aLPFdfCLkjQPNfynsH80zzEp5T28vbArhtU0+sd8+ic2xyIcww -J6bMjc1je/jqKi51Jp9PnS7gkxXxWJzuDqh95kJlTdepglzGl3kFtC//up544saVN1+XF+N+prTR -rw/S+UkaSR9oRdlPW9V20fwLXPr6PL7apaRWmxQSwczMHG1kZKKiv3sit79XUS1kzyQz8eLXLFxP -Gg5CedNQ3Ha7rYJ8rzofe7swC3KhMq/iHA5c++eYgBk3zuusmu4aIxqmJweCtr6JAMAluyu8jvdr -grF9F5u74+5ThB0Dar9lYNxt7BNadON9M9JJrKRPUjHE7nkzPTjeND0mw4iFfekTwq53yrGOHOUo -I2tF0UGO2vs1+ysiyYahU6CZneuVjBtZveI1Fl+0UYcmmZ40t0rPwSGS89DmoV8LszDfpCRBvivI -4ZwqrJB8e/MF7MQfV/M/f/G87mRZDvJ7Norz10xPd45N1od2qKTSBblmdmJ6sV8kXoTTRetFVOF+ -MYmznY7EW26j2mYv4aGz1wjtc1fQrWPnmhqGL1WW9/xeVTb0c2FZ/8kbj6pOXLmafyLlHflLCFR9 -sa9ruck2Pyf2G/r6HXP81uWZDphxVsIbn1rgMQbdNUjWahyc7H5Q36Y6l1fS+V1J+dBPldUTPxSV -DH396AXssz+v5Z949Ar92cPXxBMX79Sd+O7U/RPPnzWdrCjj/YqFjFye6e7PcGv4mDUDF6+SdlRJ -eqbKe/j6AhZDG08gLzyg87dy6KyNdAF/pZBNmXvNwE+9YpLkz9AwycWSQtq31y7Gff7wUvyJrLjK -H8pz0NfwjZRHip55lHNOMbmp6+b7VEx0xNQ35TNN2NQKpWxo2ILpG7a29wzYWvsG/cT+gU18J1+b -JaDL43lkdRyeqH9UW8b4pjof/V1tEfZsdmr7yXs3k3/MTyy5NkgW5w4R6H9J8VXnpcjE75yj8Az1 -rHJUMqbFD42Y4Lx+WyWGZn5c1zx2sQE0cQ1JWXlW3zx95tHjus/v3y//urBc+EN+5dDJOw/qTvx+ -Pv3EuYu5J14kUz47f6vxxJOXmK/QKPX9kdFFokkxObBm7h10aTlw4+wwd3LC1NkzsoqnCtzZIKTm -csI70jf3H9R/nZyE/ra0Uvp9VtHwl6/eUj67frf+xPME/GdxqazPzl9vOHHtEfZEUZXqO1Dr/AUq -TnpPKpKUzvR0ZS6N0/Ms4+RM3fgwon/QimR3r1aQBLZ3bVj1tZLqrrO14OnzjWDlb++S8V/cvVP6 -2f/n6LvfEsuyta2e6e7pWDnnKq2gZVlmy5xzTqCSBSRJjmLOOQcUERARJIM5Y0RUQMxVXd09c+/9 -/o/vOD/5PIoH2HutN8A+631wP9jljWuqy0dfnMvNp3kuP/zwyuXVq/hrEOTIg4j48l9c3xf9lpBI -fzLY2l+0bWppcy429lkN1bwFST1KK5Z2TYiVvaJRY3ff4Hxlx+BeTVndUhKJLnMtJYvcGGztJxJN -5QGBdD0K9i/6JSmJeT0uBnE7KTrj1VBjZcG2ooG2rqkgjo8Nsdr65FB+y3I6rWYtFMmac0uFCX6L -TGZ/F53E+YdfeInLM88cl59u+7i8cctwCYzkurj5YF0evEp1iY8l/cBnCj4I2kRgnbAdo+mvSVWM -DDOGBEpmXdd0IathJ5FQvu2N4cy5FZK0d2Mym/7hF4JzCY9hfZeQUvePoGiuyzMvqMtN4Fr3X2e7 -ePgQXd750q698yP9s6Co/k5PqyxLNTSIX5N3VK0rejtm5N214yOt4J7BgVx2x0wSmLbwOAdruJ6B -VP4Wmdn5vXsox+XWc7DLy7dQl+Ao/jWPIJbLE3eMy0svgktAXN0135iG794Hlf3gF1nxKx7o1d76 -zoQVVXvT6lRduW6iu6KurPUjnz/mV1atC8HRTa7J+QP/8o3kfx+Z2vZzfFrr92/cC10+eBd/FxHH -/2dYSv2160+TXX76zc/lyet8lzcBZJfbT0HX/D7TrlOokghJv7F9VS5WrU12ts7Km8vGhAO4qgZN -Ar9zB8LttSMw5VtecLLxKYpkegZFyW9lZHf+EBJd9UNcStv3vp/J1+4+inV57wVxcf1Q5HL3ccI1 -v0Dsdzxq/6teDueNqpHou6vkY8XdDWldHaLsmtaZTEr9VjhwzU9x4KG774PpP74PIl+LTKz/Liap -/h8+waX/uPcq89rHQNK1COB3vmEcl0duYBf3MPq12KLJH1Lgmt8JvPnArg45SD3aTdgydY5YlrsM -cqVkuLV/hcVt3c0mVC374hj613C09E4mqP3Xj/7o7x+9Bl177oFwee2FdHntiXDxDKF/7xlV/n1g -au/3KTD5HRx79kNN83xWf5cOqxwdq54V1RWtyfkQ/RAjaqi+zLO2TPCpsnEmmdOykYrjb39MLxj5 -PTy+8geg574Ljqy69imA4eL6Huny6h0UwDqqi1dsvcsLX/p399zQ/3D1oX4XlSH4KQmhe5KDGHrT -WS/IWFdVl21MlMabZdwcraAV2l0/nNDUbAJVtyzlkHkmLxRl8SWENPc4Hz11Iz617R9vP+FdPgTQ -v/sUwrp2416sy++3Qq5FJtf8GBJF/hWUQXmhl/RQ15QNDNFgD6x3cBzfOjBHqm5fzGc3rMUR+LNe -hXjRg6i0mp+D41k/+MbQ/3nHLf3av65/cnnpCQfqrey71Nya3+m4rs+DbePFmrFB5rqinjAn5CSZ -RtjJGmFF+ujwMKa1bwbLb9LGUstG3+LI4keFuKlngUm1ABcVf+f6IdUlNavux2TQ4M+hqS0/eIYy -/hUay78Fgw+9ZNJ63Udaq/xnh8viViXMxG0lD2KerCUtyqpRssHKuMHe1qT2QSW6on02m8qb9KZw -FJ44pvptGmzkjncU+2d3f9Q/Q2IY30elVH0fn115MwvZ+TiXIHiEpshe8jjaz+3V6nRppxi3rWrg -mhUlidPCkjCNuBnf09oLbu+UFbf0apDlDZpoJFH4NCK96Tef6IofPQKp19x9sUA9QK89fpPl4h1K -veYdXeny0APpcg/gKM/oepfIfM2PucVyV3aFKk02MtW4oWxvmh0tjdQOYT8ZxJV5IyNScn2PoaCi -fxlK7tnPRfBWPxRiFHfAKOn1xJzmf919ke3y8GWey5uPWJenbkUu956kuvgGEa8lpDZ8n5XT8ksN -S+iv7mvLW5PyCzaVXKi0leo3MdSHHeybQJdXjfmVt65mM9ssmbjK1dACkvR9NqzzERTT/6CYLH4e -V9D14E0A7l++YfhrMRm1P0Tltt6JL2pyxbBE3vz6qdj+AQ3ZKG3HrqsqkPuz1XzbUmO/Ud7GFIpU -9W3D89yKzmkQt1ISyOYMunMqhj8SGENuecgBt+SCppcJueWvUvIqXuD5ikB0uTKEWD4RUNMwEioe -7S1SiXtwBnEnYV3VWrUs4WSsyRgZ82P0RKOIny1orY/r7RrK7eofL6xsEAbQywXv8Hy5dxqs72lw -UvNt10DOT4/ewa59Cqf+EJnTdjMS1Hcrh2J4BuKY3maVCt+WlMszu4WmMt3kCGdJzExZFsL9dxTU -QquxrmZe3sYTi8ebO0b03LpeI4zdYArHl68HwqimFwXEqXuphYP/eu2JuvbLrTiXJ64QAJsR3wXE -Y5+gKS2+LY29EbqhZuihioU3TzbSNJKxjgnxeMuIUEzt65UWtXao8mpblEn8WnkwlSl6h6cI38Nw -Q89js6t+D4mh3k3KrH0ORfd4VPHHEpWdU5yZMdnQpqa3H/DfZFMfxkfZDHo1PVjsa5TUFErHBJTO -jv4ULqP8JR1Xfr+yYTGzhKP1BaE6nyUkoX4l4JoeltKHX+JIgmcU+lhwbbUwY6hDApMPdIPNCi74 -yMCEO420gv0pctqGhJawKaUn6XqpAYrBuhypRMgfFY2QBnqHcnq7xvI62uW5VdXiACq77x2e3OJK -onS/pTJ6/erqOyNbujpD2rr7Y4Y7RVCNQMw0T/RxDrQNrOMZPm1HTcpYU5Th5hR9XVrZWP+kbLRe -JB4gtLc3hVVVdH0gs+XucLLybVxO+52QuIrv47KafvaLLP0hIJbyz8jM2u8ichp/jAI1XU9FCW6h -GVqv7u4Zmlo62WQaqUUf6Hi47SkqaFvJgBzOVHIW1K3M4b76hI6OjvgmwQKtvMMMolboAwg8zYdi -pupdYHL5jXsvUq49fpnp4hNMuPY5tvSXHHDtEzxu0K2GIw6a7OwHLwrZyYsCrP+2nA== - - - lW+W8Is2lA3kaUld4XAnz69/QAzv6FFB2jsnszsG5LCW3jFwY8tQVH2HKIHXpktBM4b9UfjaV2RO -r2dlpwLcPSzMHh3tK1BKe7DzijbK0VwF/XK9rOyPrcrm87Wq+lkxN0Mp6edKZeJGqWyUJxrozh3p -aE8Y6mqN6+vpTuwdkEJ7BRJ0z4AI0tkpzeke1jD7xuXsUXEPZKyt1GdJWpazrqwjbUzVUbaU1QRt -O95na5ID3zPU8ndN9VXL6uYyraQJNdbDjuqphj/prCe/aesXZvKapFEljCFXVJk8M5/QGo1l9IQx -GhWRjEZ5eEW7NKKmYzSsbWgMNKmZmlif6ereN3Iwu1PYWKuWijpaaBQcLXdotkxdo2r5YLtQNFDa -PzQMbe0WZzX3z2ArW/WprAZdDBbA1YzClkdRWWVuadDqT3hubXC7sJesmuxgTI/QEuZac3zlnM8v -tybpOdPDzJz5sVrcrLSt1ChqhGkEbYVaYQdKJWgvGmlqCBpqHkoeaJHm9jRLC0a6JOiJ7lGkrq8H -vDTcgd4RNePs6pY653Rjy6G2DL06wkjZELKKjrRVlQe6cuLSeFmebqQmd6KDFydtZUUqJJJmwfAo -uq+zO1HYVh+tHK7P1Yy147SiTvyyoq92S9fE2dY0MPd0dayjmdqq0/maaoe2NGexN891vgP8emec -kbosZMavSKqg8xNNZMNoWeaSooG+MNnK1YtrQKMtmFeCeswzUQvxzeRAY8aUqBtjkvAzZ0T0aPNE -a9WBenDySFdbdqIvzbRNoYK3x0tCVsSE8NUJPnxT3yfb0PaJF2QNRKOoIlszws9QDDbmjXT1Zfc2 -Dsc3VAj96HSBG6dM7ktnDb9jsJpfllV2htQ0jSS3tPfFDvR2pi7IBU0H+qHJPVV91dY4q+DU2Nh0 -Mdc6epUJcDCFTZ7uBb1XdRS8VnYTfBWCAbKgV0lqA2q1uU+Laeo34tlVfb5IOPk6HIy9ziRznjU0 -1noP9w9CFAIha07cx90Y4+fYNIxCm5oJOTOWl671Qz+rq2Me61ri7+uHoB7T0qqiZib0Ixsad2d6 -vJy9MdvWvTBZU6wd5SZO9DLDpB3MwMlBfrRBVo8wz9eVWea5WMdKTcuZua73Yq2cfzpDAZ3P05Cn -84wSm55WsCqhpy/r21qNit76ZWV7pX22ofnA0NSwp6vnWvVVpXt6HnJzipW/oWTnrSoaiCvq3t5V -bSPPMl3JsOj4rPUJdvaumgPdmSJnb44VB68JkB+dBjbpy1qL7PDqu3YdG7au4BXNC4kR5nFk6JaK -VbSgbKYCnF483MoL1KgEXcqxinS1gB6iEdfkmFStjGV1FXZNWYk6mK9vOFtrGD7U0wv31JTU46Vy -/vlGu+lkrUPvWKxtN6vKcaqhqjzVUFnmLMCHpoke/pSkDSsdaYeMScXVAyJ52bBgnCEWCogKcT3I -MMlMtizWNhzNVdWahfDA6YaUh9MdeeFrQtgnOT/7yXQTOXpTVE/elnAL1obxn02tua/m2ovebIkr -CszjDXjjcFneMLfY81De2XI63TpwMcNnWqXI4E0BxH1TCPG0yPCR+5PU5DUxOUXEzni92o1M/DbN -wh5r8In2KUqabYqScWxkFu/pWNB1ZTl8V9d8lfs4djRfzgB6P3dHXhK+P0WMPzIwCo50rCKnkYM0 -j9OSLcpy9MUsn/Jljku8mOURDqaouSvDxLDFfmLg0gg10thTGrQqZmavS6hp62JyzIGKWXg1Q9oy -jo/YHCuJXAfWfnWoxGdlkBi0LORmrA2XJhypyNnHV/fQaNmwEyMDalNRrnJN852GMpJlio/aFPPB -SwJa0uIQNXdtlBQ524vynu3FB80L6FELsmbitLAVYxqqTl8WcVL2pnoGd5QtDVY1s3hTUvR5YyDt -lV1OyDg21JSdLzT2XM43D51fzZnSYZM2R2FBdlU52WmsqXJOV1bvTZVCNpT0/GVlC2te0VmuFdVB -FK0kv3VpBcI6WVmyJ6dDtuQl6XYNBXyko4KcujIscL3B8/lqoNe5sI0xUqSpLePNrgQRfzFHLjoy -cvEHUxz0Yj/Ce667yOdkkVd9NMcr3ZEBfDNKil8fKg470pDBV/kdTgMDujuJDdmZwEecznHJX1a5 -nEM1Nt7YmvZi/WqGwRjys0NFyvpzhU2xL5UxF2TsrDkhN+tirW5gT4aLXusuerfYDH6trc56sdoN -9ThSUrJOjWWETRkDoqjNfrIuwWXvqznwtRGE51J/nttcV+aL1d7s13/P09H/WSmv/XOpovnYRCs+ -XeTzLtfbNGcLNa3bY7DPS61pz+daM1+Yhwu9Thfo2IuN2gHbLI94tsyh/NtSO/xlubJ5X16StzGS -G7A6lPrCLAR/upihQb4uMDHfVvhVtumKSvMEO9+i4WKci82jztW2KedKff/hbCV/V8WCLYlJUQti -RvauqXVgU9/Wtq6uwm9OVaC3J/kIp5Fbej7Lpp4ZmYQTNRl0bqQWXG43T230F7geiqmJAPZntBBj -nksY6W/sUlamVVQaa5NRUzeHKdEbI4TQ5aFiPzkv/dGRrApvU5STdsXUlJUOTKB9nJx2qqHknmhL -M3ZHof7q+sSHDQUfv1eXZX76a7ay/Ms0GbQnynm7OZDycF9S8MGmIMQ5NDykU1dFt0ywoNsS3H/P -CTnUdJBTS0q1SAp8NgT5H3aBPdoQ4UM2xeS4MxMbfaJjQB0qduG+HBu3IUD6LHWj3LdGcJ8PFbTs -xX6kn6kV/HxTTIpdHiyOs0pJMXvCYt+llvR7a+3Zj1a7CtzWgMdsiijxyoqE37ZGEVG2KR52rZ+S -YBWXxm8MoHysYyWhxwpi3NEkMdY8iPScqk67PUSK+fVQRs/5MltdcWLg4qwTuNhjHR1sV1BSbTJS -zJGaWTA9iI6XlKe6Xs0RWeuDx+6L4KEnquLoIyUkYm88PeBythTi1NFyj3Uc1Im2mmdX11Tsq8rx -5jFijEWS72dTI+Ics2XUQ1MF1SzBh++IsLFHalrRjgj1eb4l79Vsc8Yr+wQixDFZ/PlETckC/oa0 -SIjx+5OUZJuOg9iUEpOPDQzkxTwLe6igZO1L8VFOZUnMX/O04r/WyiqANc4+mKphOKcbGuy6MpxD -RQFbZOgwqxwfY5koibGrSSkHCnycRYYN3xAiPl3McUqPDRTwsQ6b7phCJJ5cZUHLS6LsSnLq14Xq -usvlynrzGCZwW0yIP9JUsIG+xR9KCDF2CTbGLsPGbgpQvtsiXNi+nJZrVzFBThUx6c85ZvEXI7Po -dIqQuNaZ9mZnMPfTenfWm43BLLd/b/Kqviyx2ZYJfLx5uCTZqaGjnAZ81sV8Sc75LBZsVWDSbBpS -xtXMlS9LFfxDOSllqT8/cL43O8yhJsIv5vj8y1kq+mAcFrE/DvFdGsGG72n4xLOl2rY/zQ0jp8tV -tba5Cq7NyCu1a0rzz2YYKIeOAbNr2XiLkgmxL9XUHy3XtW0rrmZhIz5tDkE+7AqgH/eu5ugoS+L+ -2uHX26TIgH1JSdhcD8KzoTjo1wl2zsfjCT7MPs5MP5pkZK32oTzW+6FvNwUw950RrN/2KC1xtg3l -udiJ+eSUVeK+aqupXwAsPpxEhBjqYm4bK6N+m61LebQ/Ski2K3jFe1Js8M4w2H1HkP/eOVkcdqq6 -yp1Ehq72FwUs9hQA64T0OtWx4Kd6dvHOGMzX3J/0YGso4+W+FOpvV5QmOTXUHIcSF7cnLva3T3IB -DcfDWMT4MPMgyhPQiy8MjakvZttyni33FrnN9UDedWFDb+4KcGGHInz4XG3KvQlq2K+jhJBfJOSw -32Zq0x7pa5Juro8hw9QdkJB+bMzdEwUXZpfRs6wiTNj2UI77fHPCK11l9F1TbfyNhZbcFzYZI3dL -WJK6Cbxm6zg6zD5JiLOMoPysw8U+O0J0qKgs6WEPNuBX8wAi4dt0be25hgFZ7sp6N90Y+WCpK/SB -UwXxPdcTU0415PwjBTnnaobDobqCcKCoIH6b5lG+zrMwR0Ym/L8zeqdI8af60pz1IeiHlR7oO4uQ -DbXLWIWnKnyibRzquyso8ppvzXhm7ivyAPol2znNKh6vzHy4OoT0PzOykF+mK5hHk6XJdjk6wj4B -CbUIc/2sEnzEwdTVmccK0vIIPmxjBO23O14SdaRnwR0aasHWSEHgal/eq6XuvOeLPaCXl4ss4o4U -HrQrAXvvjRcFnurIOedaSv63aRrsPyts+qmeCF4dyHezTmBTL+eqa+0Kev6+GBdhGYb7WEUQrwMp -OvTcwCk+0dChG/2F/idqQiKwZhnbw8URR3JcwnpPttfeaFHY1gDI63AMGnCuIxRsjxQELPfku54Z -+JxjPQd7YiRkOHSoqD0ZJMA8BPG2KQmJx0ZKrlNPBW2OwD6dL5CRAO8xvi6V8xw6FmZrFBW82Jnt -djgBDz0ylpWfLVSUfVli4S9myNCL5Zpm52K74stKi/R/zfyaLyZc1o4Y4r8xXPjRKsOGATzGPJ7l -UrakAGbIcLFONbnoRE0FH2uouVcZwOYRcNiBDOYz3Z7xwNSS/3R9AO1zIGZlWkaJ0es9yA92CTtn -V0SO2hMB6zoC89gdxQYudMHfaWtA99f7cIFnKj5uZwgbfKQgJTnVpen7YnzyVw0u/asOFnKuxcRs -ifGhK31wj3MNC3YyRc3ZHQH6dLDATV8dfXOU9Ol7FS/819Or8/E6BkgzAPMdYqbeOlPSwN+mKaCv -M6TsY21xxK4I5L7UknpvqSH9ztYgLmhxgBa90I58uy8khm8NYYK3hcVRuyJMyO4I2ne5A/xyoa3Q -yyqkJy13Yvy64Z9/GELG/KrmZj6eb8p8uTMIeu+YxMXvyfFRE7XZrgO46JsXVznvQnzkTFP6/ZnG -6OvasujrpsqUh7uDkE9nU/i4ZUBHiGlRPxsbMl5dzNKRi72gdyPk6F9krMTfp/gJvw9gA3/e7Cvw -tMtJ6XsAp+6OloTvCAlpVgkNcygjZoiZAb9LmR9vGir9b6x2pDw60hKTDhWMvNVeYvJWb3HUfxbL -mBfzbLxNg47alQJ8K0jzWO/LfrbQBnq6Jy4vNg/gI1e7cp5tDea82BsueGeoir8+wQi7CWjl9+aB -/E/6+qRbWwJUgHOKVbApAPhAiPTZGIR9MPfnv7UK8z5+NVEAT0QvXBqC+41xkm9YZJSMUxMH69DS -QWYB3HuuKf7pnhD84XC00MOpRIVcztHg2ubUNzNdeSHf5jiEMz0hGai1nGNtScKWIMPV3J38xCrK -/XBhwmXr28D+lYX+T481ZOTfK2Vlfy+xSx3ykui9UYADm5JfjWA+/LAnKw4pK/C/neL14F/Kmkyf -/yxzqH/M0KB7Qqifjhl1V0YI+E3Hi/ptow8MXJOBmGkFuy33g/2/LjJIf62XVR8pStPPNKWZhwCX -zrYmPFwfzHx9sUzBO0w03NYYIcam4hOOdDXN5zNlFf+zzKF9M9FKrEJwyPZAmtt8Yw== - - - 3N3/bNT0Hc/UdO4rmehTA63obJZUcKQnFji1hKyv82TwhYGYuTGQ+2GpI/vFqZFDupqZfmq40izU -jKMpUuJqd8azIw0p1aYipx7KiTEHUrivZbTwg6Eh+vYENfznnSFy8kIXxnu2sfC5oQ70WFsNejDf -BnMzDxACNodIIVuDxFB9ZeadlW6Yu0WECz4QlwSbB/NcZ5vjbs00xN/aGAK/cchxkZdqPsYhY2Zv -DBR/PJRSEw5l+Ih9MdzrQJz//kgOCd0SgD9MVSTeVJZlP7YpmODVPtjHjUGE184IwudQVhy0Owzx -2OiGvjMP4kMFjLS7PZiIX9a6UQE2GTPrQEpJNA+hfLQVqbflpSG/bPUUvFrqxXsPsXKfoKLfXpMz -8t3OJtkgmxQRONecdFdTGX59kh1xXV+T93J/nAO6NFVxDsYpSYcycpJjnAu2jdLiLxTM3L2R4sBJ -bvhvIqr/D8balLvAvvvviNEhutrEm/tjmGAAr5P2hEXuhqq4+ysd6R67wgLf1Z78V4vtBT4XupY2 -q7ilcraZ4G+sRQcsd8KDLjT4lJMpVPjOGPjjfEeeWw8u4kYnOuzWt7lK/vlVjtUk4vNktd/9UdKH -G9v98Q8cE1f3q5LiaOmu/1TWpHmdmegQqwwdMkaL+o0c5/YTJcbtRyEm9F87AxCAU8iZq8PwEEjU -s58WuyHBfwPa/UxfkrorzHq71BZ9X1X2+bchote/DHVx9yxSSoqUl/1Q1wD9cKGr4Z2pGYV2KcTf -3B13f4zq9ZOCF39Dxo2/vSVEhNoVJQmmxozXZwZq0ZkJ0H+jcL9tAP/3hKBAm6wgfKYl8YGYGX3f -qS3NXhdCPy+2pz62CKFeuwK0/85IcYB9ChO3PY6N6cXH36jM8v0n0MvJNkVJzmp/7pvVPvCbDWCf -D6XIENtkMYDfuAzrBCpEW5V4d6Ezzet/NpjML4tUOMDPH6/mFM415bzQV6c+uVxgEc8APtN3gnwm -uEk3z2e4jD9XyqpsckjY7kjac8twgd/2ENjXMQGLOlYjI/+zzqap2sDRbLDv77P9qPg/Nlq1Z/PV -jTZFaeamIOu5uizs97aid79qahLfns0xcHzQh19nO8DBZzo2/FzHLHROQD4da8k5AL9nHk3hYzYG -M58Z6kN+6Ua/+W4A4/vrsqAkvIWc/JuMA3q9NUKJXhfgA5Z74e7q6pznqoqM+2p+xq2FhsKX2yJy -pKah4I2+Ov2BTU5K2hWQIiwC/GfnJCYMqM0AqwjuA/Duu9nGrPv7UsDnTFCT98aKAxY74m+baoJ/ -0XKifp6tSLkN/E/47CDSv58Q9tN0HcwXqFmQuR/iMd+S+XSUFvlbHdTvl0aw5/dyduLNxV7ER3F5 -5nMZL/PZ+hA6YLYl/5WqLOHOfEvaU3191pNRWsyvXfCQHwzVWG8JP+vNKCv8trmv0HtfjIk5HCPE -28bpmXtiXOKBDBK6OZT3GtByIWtDxLAxatpzcw8q9gTw0uaBQs+Nvrz3eyOFHw6E0I/qspjrY8SA -X6/6bb0P7LnanvNMgI24N4jwuz5bFXPPIYUHfNVT8041jMLVXuxnYxX4qV3UzFztIMQciosjDiRF -PnPN6c/nmzNdtwbgQI/TUr/OVVUcTJambQmx/psD5EjrENrfPpbntjOY7brWk/NqoR3kbpUyUdYJ -frGhBfpqte9KZ1IzFtuQXjpOxo25+oJX0425b6ebMp8bW7LfHMppRbaJ0oy1HrDrSle++1oXNGC1 -o/DdSnvGE4vgan5ats90Q/qj1W6I94mmjKiuzn2m5CbcAXD8E9DjPjsjmOCtoeLAA8BbzPeA3Tsw -obd2RPhEq4ycPEJNvF2Z6fldDzTwBxkl6jc9gA9LPZDATQk1sw4d/oCd5faPCyMd4lBSsue7Crwn -OVEPVby4Wxpe6m0tL+H2sRqfxQH53OgujX67r6IXWsbpadqy5LtSKqDxWSG/62uiflPxAn6yivPD -/l5jEqxyQoxTw4Sudhd6rHbkeKx35Hvt9BfGAJgfONeU/nq5K/XB/2yzGE49EbTYnf/qYAIVeTHT -0HwxXVf79yq//NSESwU8QMCOFOG3Pgb3c5o4lC/LjcPHOhp4T4oJtckR4UdKdIJNgY4GPA38HOCY -HrzfL6Y2kM8J4B+PlPTsq7o90dHy7VOE2P9mHUowEas9ee6GurQ3V3i4KaUmDvDyH2hqEL77E7yi -dSHu83R71oNhSthPQ8SQHzWV6XdWOlGfzCO0GMnVfVic5Nun+nKSDajtzf4S/+nmxOeqys+35hpT -bs83Z91bbAW/2hBiQ/WN+W/XBoqDzANwj6XmzPvLDTlPdvsQngcSXISpPeO5hBr803ILxNc2zs7R -12benmnJeyFmpz2qh4beGCoJfbDYDvFZFxHCBdzUh2PMtMdbo8Q4Q3OBRzMi6PsOpN8/R4ihP0rI -4T8aKjPuz3dzEiuR0dfrEEE3DmU02CmgMQ7EWMB7oPzmWjKeLbWnPdwR5L22ydFhpk7E+4os/++N -dQUhDsBzzrZmuW32AfqnJ+uZoSL2TifkE3DtoJtLA+D3bdig38ZI0ff2BoiRq82g13uDOa52Mdjb -3B3vNd8c8VpXFXXPcpVpNUjM4OZ4/y6kRjw7UZFhDiUp62gCHe4YR4Xsi9Cfgb1KNrZlPFc3ZD1q -wSQ9GymNf34E6ApA238GeCrgQk3JOZqg5K52w4NkjNjf9sdJybsSOni6GeoxXZv3bL4J7KarSn+y -1J7z5gzQQw4FIX2mPvsZsNYvj1V0sGUEH7HYnPNsriHp9nxD3A1tRdAvsw0JdzYBb7MtwUdXF37+ -VyMk8NbWcHHUqZ6SDeB89ExT1jt1ZdzLxU7Ap/Qg/OwKbvGuhJIyyki6OVAa/9DYBAlY60b7bwtQ -3gtdEG9VLcizGRX8Wwcu5PGJgQU3j6ACpezE20J86PXV5uy3VgHMxzoM87GIkQG18JDr41X5kQc6 -HmFDSIrQVeY81VRmuE+35QWv9YO8D8ZA/t9mCIV/rzDxm2P4MNsUEwJg4t1eiPcPMlzwjws1KY+n -q1NeztWnvjiU5n36t5mGWRchIiT8lAfbUnTCnqKKdJXJcjZDLTzSYyL3pFCvfTkq5GSmFPxtvbLx -SE9H7Y4jQ5xact6/13jsL/Pkov3JIv99OThgQ5D8dq0v+9Wxjgq7mC4rtSvIKQBHZhxfZbHIS+Ov -PqM51fMJJypmPqCt47eGkd7L3YVu64PFHyxCYtShko/YkNDit8QloUtdMI/ZZvCrbSE2yAb4ess4 -LnSxI+/5Tj/M+3Kuvu3KW28OYP20NYn3tDVR97YHEd42KTn5QsMr2ZKRUhS16Q9WB0titiX0FHV5 -5s1xatSv47ToG8OkgF/HyP7fqzmxN7d7MWF2OSdvkpd692pO0YGcBVrvJwbvAd4D8J2B0+2QNzOt -RS92RkiRFoDo5nqJQbomcsRUNcprrhnmsd6L8NwbxYevDbESDK1Ij8Vu9OczbQ1/bwIfuSfChtgk -HMjhKA+x1Y/2Xu8FvVrpyX692AX4/ma0376Mg1ocxCfUAfvSi/D9ab0T9GqpPf+NoQ78fq0fE7I2 -SogZoKcAWBF31y4nJptq427MNUZdX+1IfThfG3ZnZyD13aEYHndu4JL0vcV+jYiI60p+ns+fc7Xt -jilc4kp75uPFpvS7693gl6s9Re9nu6Ef5Q0FL4ti3b9HRr++/dVAyb/QlWY6JmHBG31pb8cpAdd7 -IK4/TDECf7FI0SF1xdEPQEEvvp+qzvb4aqBBHFKQp1OW7Xk0nuupqwi7JcJ++sdsXfoTh5oFXe5F -ea70wD9Zx/GpgHfOtMkIaXYlPhmok7C5noL3PSXRv7QXR9+fbkV4CpiJT5f6IX47QlTMpgAac6om -5n65ynDXcJAWCTrU2Jx21zyCDlgfRAZv9CIATiZGTlSk3Bezom8udmW/tV99tjJBije2QV7OdiE/ -WScIKZbBPLel5uSHCw2Zj1Y7cp9axpA+x3pA7+uYiPmOQlebkpR6fpWTbiwrPZzARVpHct4vtYS/ -XGpNcj2QEWIOFLSsqfKip0JC+vXNXmzct9my8nMDG3sgRUdP10e7GpsyfOd7ijxWRpARxyYuyywu -R892wjzsGnzmH6tM4r/NbPa/11mMP5bJaIcWlznfm/zE1BZ5e0eCCFXWZgToW9M+2A2lUKeJVno2 -jUP/uUQvvZwvheyKARwYyH7uNOCTt4eLA3ZGCMEHMkriiZ4N3x8nxzoUpYn7EgDjhHCvEyUh7kxN -yz2YYGVvCikRJ2o+dmeUFLXQUvh8pavo1foQ2NXQEHXHWBl591CADT2Z4qGX2mDvzV0Ir3M1F+lQ -EOP3x3DBVjE+bLop48XmKMxrbRDsZhGXRB+ouBBdfd4DbWXWo/nmgnebA/BPe0P4MMcYPdsmJqTN -t+W+m2vOeX6kJGfYFNT0nVHc5y0RJni6A/JB11jkvtyJ/HSh4+O2JMysxS68966wGr42yss0DxOC -zENwr5nGjEfm/sL3VoCfDmWkmFM9o3BXBPPZHUGFHimqqSvd1LTFZoSrpiLjoYQeelPJibpxqqok -HqiryYtDlFhFWc6dwzFywimgS0/01Nz9yeIQbXXO46ky0BN1Re7jnXFiwp6SELszhgK4mZL/Zaam -8lLHxcx3gD4OEENvjHPi764OQD7Yp+jgL9M1lV+uZnoKkF4WCS37RFtX4VCWIVa6sQGaRuRHeR3M -rYuY+ou6AQJoYQpoR5T/dnMk841ZkOcHvN4gyxD049FEccTyQIG3lJt6dwjoT0DXQs+0pMyN3pQX -M1VBD1da4l+b+wv8NvrBnvYJTPTV7N1BWswNeUWO77GGhTjXl+Y4FLhoU3PKk5FS/9/H2fGP1LVZ -L3UNkI+K2qK3BZGvfx1lR7tdaLFJq+2ZLxfq/1vbj6dr0h4sdeW/salKc4bKMl6let5xYSV7/HIg -o8FP9Cy0ZbTAe7Un5eVsU/Kdhbb852uDqE+rwpLPbaSIO01w798OpPhYp5yRdTKJj9mXwELXB3P9 -rOLCgGN1cdixnpBi7IQHA1v48EBKSjzTYuJP1ei0LzOl8C8LTMyOmBSnqytwE9NSb+zL6NDdidL4 -TUlJyMpAkaeIHvFUQIt+vS/HJF/MUksv5piVK6PIqBF29P0dGSrz39tl1X+a2VSLDBaurom+O9Oa -5LYnKfh8asQmzg/CAuDR73/mgv3ffF2r6QU8Tf0f0+jMYy0ibGkw+9VsX9a71VFAR07QM4C6/GgV -UxMcUyyQTcOGmAU4/4MJfOzBGMz/VIGNPJCiQha7Up6v9GW8WukucHVMMfIs45SU1R6U546g5DNQ -f4B/JcUfK4kJhwDWzLfnusmZ0b+udUKCvxhr+IcKQox1rOTzgZgYPdcIfrcvISXbp6i5NgUj+2qG -zlwL6Mn2CDHWLmfnr/fDPiy35r2Yrk24N8UJ+7W32P9f6rLkR/YJWs62kJKw0o3+cA== - - - PsMjOg30Aoe6NPNQjo46VmETAG8ZZR0jhB1K+ZC5HnLw5jAx+sLAQR2rSalfZ2iQCwMTvifGhGwJ -wG/3RqGeh1JC7K6YltxDSLh5NSPUOk5NsowW+1qGIe5nGg5qF9Depvb81yJS1M8nanr+/iQ5fQt4 -D3tyfNzqADJkthn2cakd5n2kvvr+kVWwCYg7m4IJOTbyqVd5ktMdyAghO9Nvpg0W/+cyl/PvFQ7r -0kQtcUzi0tcFcK+dCRZsWcguWe4nRBvrYe/FjLT7V7lHsw0Q9yM1Dwngb+y2COl9ZuTgz2ereFdZ -RSu94HdyXuxNEdn3p73hLI8/5gnZf62xyAsDqE8Ar3seKzmIL9OVvC8L5dyvC1TIkQYVtTWc+36z -N9/tXM8lHE4x0DJeynOrhBh/OEWDHSrJuU4tHdjLkhhdU7KnqjbCda4j/um5CQ86M+CzV7qy3TYH -YHGnWibOqWYjHRoO3G7i4bS90I+d2LDf5NyMZ3sydt7GMMbf1Jj1fKoi6clyJ8gD0JNZJ1pGgXWC -lCSvSX+maszydqjY0E0BLnizv9DV1JD6VEoPvbfQkvLqi4kIulxilc4OwMNkvKzn+xPk7ENVSezO -CCRscyAnAPALwct9Re9U1UmPZjry/AEPA+2hJ74cLsv6uCFlFji05SV2BSN3vQ/mK6VGPxyjhN51 -qPHJxwY69GyOWbyvJ6YfGEgZF4sMotNILb6YYeIBLs03C5BhK0P4UH1XSeC2vLTgyzKbujVSGLjS -nfzw2ERBHs2VlR0vV9YfTLOJ63JW/uHElXdBRxyrcIkA7yUtdxd/2BQi/Rba0x/ti2Dem8PwT/qa -2JtzzYl3t4agXqd6LsZh4GIsE9REu5JduDFU7GUF/PfuaIGnqTH2lroi7nc1PxHQV8ioy5kq/t5V -3piClu6U0zOsQyWBDikl41TLgltlpPiFTsjb2abcJ3tiSuq6gBCrr826t9pR5A7016eVVqjvbB30 -41YvyvdITsveFeLCN/vhHuczbMz+JCb0YBzhYxHBPtkArXmqIaacaxhgh4INVtWBXacbQZ9OlLRc -xwQu6twIaJb/zrXFBO0I4QHOKXLGoYwQvQnguYKbdONEw4Bd5burqrMezbZkP7KIi/23RAivxZ6C -d6aGLNczPaNoW0yK3RARIq7yN506aq5FBLzfIZSPY4KUcqRkF1glPJBVxgEvDmKClvpwQXZVfYVD -3VBzbqzm/bVeVnZmIKRbhJBP5l7wW4uMlLks4yD6+fnuQnbGE4eCi7COlSYdiHDRjnF8rGUME7Ej -Lg7Ym8CFnxjLycsCYupMK9xvqRsTPt0GizD3FUZc6IpT/lwlFp3PEcDG9pyny13QoFNtJXdfwcXa -tJTcy0Ua8lBVHLMzCvJ2TqKSL6/ugRwnZXbjo28cKqiF39Zr2k5n2LhjLS13Q4gIHOd9fiDj+j2y -jGZ9+H+bHPYf80ycTY4Nv5jhMU9MLPzZDBdv0zDzdybJCWYJOnC5D/zmahbWxhglfqYD83FLxAHt -jZcVH02xoU4VIWlHhApY6Ye+B2rn46meXmRX89DGVpjHdHPeM+cUPgnwaf42MSLorzkq4siAy7XI -kUE7YpTvVd7WJtBb6srsh7ry1EdOVQngB0gZ9il82tkcHeeY5RC66ckvBLw8n1URu2BNQE+e6yrx -MtRDX8uZaQ+11Rlvv84zSv5e51f8scwiWrW4hF0VPuE/Fn79H6ss+v44NmYZ4EMdoPUBPvc/MrGQ -XwFPcqQjZy92g9+ah2H+38y1vRfL1a12A4uwLi7+vD6GDdoSFnkstMff2hlMebw9mPfSIqInH8jL -izdHmVm7UnqKbRKobVFJsH0CG36mKYn7asCnX/XUngwXaddVkBZ7YG4rPblP1gazn630Zr/aG8WG -nyop2V/0tIKrMyRWBTvPriyDA94lZLoh9ba+OvHW5jD4g0WK8l8fQHoCXidmS0hL0jSCX2lrsu45 -5FzQkZxbeCTjgi0CQngPOuh6A9jz+iQ98tbuAOT9sY5bvNwLc19py396fPU882zC5TQp61hdEr8u -gHj0Adgv5WS9XOnBeE/y0u/YFPiEcyMLcaZjFZ1pKFkH4+jQrZEi9/m29Dv6isif7UpCCoBJ2epG -5NvFXlzQwSQ5+UhVmnqmYxYdyK7mn4F9gDrysU6UZnxdrK4+VALacRwTvCvE+FtG0D7nKnrupY5P -cKiYYGMH+MXqCCbk2NQmcBo7Rs+MNZwviwAXGIhpp0p8wqmyNOsE4IadKQZkehAVtDKMS7icrmBZ -xQh/i7DQY2co7/VaT76bUwXotnku8XSaT1Y2wlwNTcVBh5PVgIfko74YWdBjLTZ+fSjbdVsIcj9S -liR/neYwLgFNvzSEDbROlib/tcrnXc4xMGc6bMKBrCBwtjPptb4l4dFcZ96Lv9b4NVZVaYGqPv/1 -cl9J0JmRzzwxMMmnBjrWMVkSaxEV+B5NoCMccmKcw1jFlVRlvFTUZvkfqdmoYz0HdaKjgS5mGSVf -FriMXRkxdmkQ5X2VpXw629B29b2PXVmaYpOTUwC/m3mup4L/XqAijzXUvIVemOdCH8Tj2MAslrHj -nnYVeV1faMx+vTlc+OFQiU04m2URzheqqraAWpkfKA276vfjaQ7WrsbHW2VwoC/z3Xck+Dirhou0 -aavpG2JW7hgXdF/XRggwSyog26P02AtADx9OIMKXe/M/WCZQ4TYdIfV8paLpdLGs3NhR6K2pBb8C -1rX8dIbJ/LrC4QNarObISMhZGyp0N49A3B1GOsJhKudsjOHD9yZJiYdGauH5EpexPUaO3hwmhVsl -5Hig50GADsoG9FHKMYBHxyY6+CrfeXcM7b87igD4ouC9UwZyP1EgApxKfJxTzUNZpbQku5qWdzLP -xh7qSKmHCkyYZRT0drM/9fHuCOyjU16FOVY18q2yMsTyADlmQ0RJ3VMQE3elmCBzP8Jjvb/wra4m -7b62MuHWIaDrzo184raYnLLQBXMzNYIej5Djbg3gou/NNxV8OBQTYrSVuc8UjNQb5s4i9z+MFZwD -JTZxZSD91a4E8XlLCP+4M1wSYh4ixC72F/tPVabddmqpsPPZMvr6ANR7pT35zkxj6gPLGNzbLkcH -n2iIyU4No9Aip2dtSelJe8oq3IGGXWQZR/ivDea/UpTH3Zqqjn1uFsBDHUoa8utCOedAgY05BGrp -YJwUq6vOeqCrjLq+LQC92x1D+i72gN6d6Ek5F3Ms4pGGCXdqyopPTVz8+lCBh7Em6baxKv2evjLu -9kpb4rNzFSbxTFeOX+rFBWpqM24Dr++jc4qYtC9C+B+Oo0J3xyCfdkUon8PJ0oQDJbdI244JakJG -/HwoJyX/CfTPVZ4j8B6iDmUlqeuDOW7mwdQnexKo/x9LfM4RoC+2pVDvfTkiwjqBiNwU5nkfyotj -v87x+H9t8tusanyGvhn03DJWmnqkpcMBvwp1GCj5O+PYKNskMe1qzv7XGQ5tX8kmj7JynqmqwOHH -ai5+c6Q4cKE96/FqP/jdrhTi5dAgw74tc6gAL3VfLlY3bI2XJlyu1LZZZDTQYhfkvbYq8U5DzrMf -JKUh19f6oP7nSzXtm+oKtqq+8PlSHyrwWAd4JBObfGJkk4+NbNKxno3eAzDoUE0BXcxXVmyP09L2 -AT/7dZFa/Ocqi/rXWmXL5TyX9d/HKZi5qyJu5pq4Abci4OdsiehJl7OcEmDt8efzFZXfzPUjf241 -SM+WuVyrlpy9NU5JtE3V8OzqqgYA7yBfFmjoy2VS4Y4UHrklgkcfT+PBX81lVduALtiS8SA2Q1Pr -ubm65etmGX8P8CROUxX7yHA1r4mevyeD+W2N5rrZ5cjAcz0t79zEhB5M4CIAH59yCvzdPlkSah1H -Biz1Zr5baEt22+5H+QDav+Tvtcq6ExMD6lBTs6/mWh4CnmVrGOa31A7y3RIg4/YkLPDOZHv95lR7 -/Y68CrsposQsdyPez9Sn3pmgRf6i4sTcPVfh0i5nqvlb0lrsgoCXsihgxa8P06N3RilROyP4EE1N -4r0+hO/3OlbqQ9swJvhETc7YHMOHmEepKTZVGQrg0lBDQ/L9VtT7HzvRb37UV3/+/XKRTTow8Agr -AmzgjrA4wK4oTQc4LHBfBve3Txb6zLXHP14X5Lw/0gAYpK+mr4uIoRujmMBtETFpZ4yUeKwjZf+1 -yqZdTDNLrCJkiKkh8eF6f4EHoA8BbVj4YqkD6n2iZhRcabITHSltayQ/aKE1/tlqd9brAwBXlwWM -ZCEl6vcpXsLDo3FKukNcErovKPK1jcEi90SocGV5+j1TS8FzK+C55vrRYfrqrOd7Y9DA3bF89wMJ -5OOBFBOzKcSGG1oL3kxWZT7cA7yvZYKSttSb77rQkee60FnotSEoCjyawmZ+nWPgvy7z+QcAfppl -uHC7rq7coWUhT3WEzBMtId0sAHseqpFRO+PwAOtEcfiXOQZqZRDyfkuCibxY5FGPjeRChxITvzMM -+rDSmflyri396b6Mkn5mquLuT9Ly1dVZ9y1juAinmpLrVGNi/l4iw67WBdBj2KszodsTtNzTpdr2 -dTElZbanJGBVQIxa7Cn0OZTh0y9MfObxdHXNspiatiLChx2b+NTjaSbSLIT5WWSoiH1FSaJTTwNf -zNIKv63yyy8Xq2rNgCbZV2Bi/1y/6ovS7BM1Kc0xhYm0K66ylyg5DmNN1b62o3d+gBy10IfwAPwG -7v/2Gsb/WCurPgNw6usqj3MyR0WdLjAIl4tc1uV8XYuuCe4t5aU8sWmI+f9jKW/5Zi6rvFhmMmw6 -bNqhvjTXOcejXS5X1v2x2ig4neeQTxfpSDugVy4XG7r+e+ZNW4F3qElJx2pMxJECHXogQYcDejbc -Ki7ysssJiZfGCsq+DB++Ngxz1zQlPtBVh13f6YG+/wLgwZ8LDKwT0AAnRh7Orqlh7E1w8g0t2S9G -CP4/6KtCb+6NIsPsuubGtckG8qasGrU7zsvbFbEyNgUlwRsAB+8NQz0PpNBAi7QkaUtcATGLG0s2 -xxsIu1Ju3s4oKWxbSAib7wBdndFy3+mBee4PILz2RpCfNgS4gN1xbpFNXVZ8IMNHzbdBPw6SIx4M -lwbe3R5Ie3sxSy3aA/SQZYKW4lDxUHYVo2h9uPDNjrjI0yIp8FztSXOzSgv8LqZphVczE9fE5CiA -x0FH2pZWu6ocD3ifsPN5SoFdTUze6IN9WO0rCDyQl+ZsS5jphkaU676MnnGiZyEP5NhIqwwVMN2Y -/GChMeHJnrDQ/0jLQawJGcn6hnyPtV5U/Jm2rGRPiPDW8hPuSKhhvxqq4m/paxIfWSS4GJuaDZ1q -hXpqagq8L00MpG0SFjjXlvhghBJ5o7M44PY4LfL2cmfBW7ueh5kZwAUPM5JuGloKPZwaHul8mld6 -OcclOTWkHLMQHrYLeEuLlg6yGRrr5wcwEVM1KS8AnxVnU2DSzucYRKAOEfuTsPgjTQ== - - - ccrOWNHHI0AzOE0MlK4t462+Ie2pZRQWuDcGC3cocRmXszzq5QKfBWiPZF0T6IVNQQfvSXDJsy2p -L6yiQl8ngJ3HambhqYGNuVyoqjtbqm7YlHNA61IeeHOcVzDTCXHfFMA+2xQkkBPw0vuT+NizGRbu -r7WqxqtZuscGGhyoX65NW1q0PQ6Ps6uxMXZNaa7DwEati7BRxwZS3tdlDu1YTys6NzBRX2ZYWGCv -IEcAnu6N48DbYgpoqR/utSaAvLuYphT+70796B8rTML5HLXoLzOH8+cyjXSuJwJauxRuncAlm9rB -L1eGkZ+PZ5jYkwVGyZGxNOdknoxwGAig82VexZc1ftX5PJPo1FMgm2OooONpGvSvaTr2P+t1Pedz -tbV2XQ3DKqckWqUI76Xe7GeDJJ+fBglvfpri+f+8OQT6cDFdRj6Q01K3xkgRu1Ji9KEU4ecQQz/u -i0CeK13RDw0Nwb9fzHLw+1c5u0OM6PWh0oi1nsIPJ+OQz/83RwT9zxqDsCaD+qnb0l/Odxd62RSV -JRZpeRGgXxMtYyhfVXX8rYWOfPcjRR3nSNHRtC/jw3dG0J+3R0oCDhRMsF1bjt+S0hL09aBXen7K -nf1hlM/xZGnSmeFqLjIh+XACG3ao4CMXh8jhawNY781+sOueGOF7rGUA3ohHPDVVMawKStquGOrp -UJXEHxu5JYeK0mTzYIabeSDhtW0S7H2gpGY4DY0t59MdIruqDLsvLw7+Y5WBu1hkYg6mSImbouLg -3XFi3OowPmh1hBhyqGTkOvVslFVGjDnVsbE2OTH+QIoIAHrv7UxTlNvBOMjzWENKOtVVsRy6+qoR -Vsx1XX3Ox+1hYtaRnJT71UjIvzCQcgDflLjYXfRmR0LNs0/Rcuc6gPdYnXlXWQl2VdfmfNgBuPhC -TYee6KkFa6OYAGMXxGN1GAfUW03NyTQXd7nAJpwacUmHEyUJX5c4zL83Khq+LVdUL4+URKrrQe52 -NYd8AWjFYxMbYx3HhE+WxzxSVoZft8pgn/9Y4QHrQs4dpMTelJYlvwY0N/QI8Lp2FTrSPFzw0TxY -9AHw4b4nBmrRxUJF+boAG7TQAftwNEmD/XupsuYr0HMnGkyKRQQJsSrg4XtaNmRzigdZEjESx3m5 -V1lzQV9NVMT/mbncEw0+8dJEzLsw4DLNA7nu5wsc8slyTevSaEnsdE+O69k0DQV4ONZfm9Xd39Yq -W89MZED/l6adGBhF31YrquwaJmptAOGz2JHzbKE9/cmBHBfn0BIyAf9V8tc8m3SixWU7NPDIP1Zo -6H1VSdLuMOjdamvOy51heKBdW1rgMNHxQC+wvq7zyy26kviZfoS3c6a+7Y/1ZsnflspOx/TVHMDS -bIeODWA9BwfwMu9UR868nGajnFoOzCpnZlrG6anzXVBXfX3BI2016Km6IuvZSifsk/3qPKnmKicd -F2oZpyXvjtNSZtuznij5IT/pqqNvzAO8siXIcwc8WdH+BB+yJ+JlOuTATwnSd1eY9cw5mQPUS8qT -uZ7Y25rmuMerg0WBTlU1zTpRBtkdI0cdytm5tik22K4gpRz9N58QEyLhhPw2iHv/y764OP5iporn -MFTStiWstAPgsQdSXLhlsMjjVImLXexIeGaqj75nn0RH2jRsuKIB+n62Ex18rmXDAExGfJ2jIs5M -xHS7Fhs125Vyf74t7v7Vue+Lhapyu6aCaJWXxOyPF/pdaLHJX2fY6FMjHXaio4KWukHv5eywO2cm -Qp7DSM3bUxCiHVOE5KMpYsKZnl54McvG21SEeOskPsoqp+ecGOqrt8fQflvDhe7KqiTXoZKAR0eT -sLh/r5RxL2fKOcDaglaG0UF2DZfk0PCw1nF00MZg8vNR8sebY1T/+wdSNODxGmpWhqiRplaEq6kV -6bav4qLWBEXugMdz3xxIe7bRl/T8aAqTeDHDJn1dqG3ekxETN8XY8Mul8so/Vitqz0w08Jkel7wn -zvM0DyY8sCkJ8cDzoU5namsPdRWUDTEj3a6uZR0oKwkODavozMRE7auKIw9UqLADJSnRoWdCr+6p -scpxkScGOsShpUOcKmLyFxMx9485csmunA5e7MEDepya8mWlpmNrkpC2NFTwYaE7222tD/zxxEgG -X31GbNHwMWtiVtrSMDd7R15NNotL8zVtuQGznRDvha7ct1YpPOxUg035n82yGieAzzuqcrRFxSk8 -n6+udRqYEIeuNGNnHBWwLYb7OI3k/G9rZeX/3qnp256gZOrbEO92ZGzot9Wquv/dKW/5a5GCdE4U -+G/3RN01VcU/XxlCxuwbqisN/fhIdW3u6z9X+VX/z1o9+Ncap/zvBQr+VA1NskkyvbbGst8cz7MZ -V/nbq2MlaePViff/3K7q/Pd2/difa6xKpxoVvyWAuDsNLIRTx0XapjhFBwp61uYoMWJtmBK5fjXb -eYSfZZVXII90FQSbjg1dG0V9Wu6FuG0JCSH7k6ycTSExYrm7xG8PWPcTHRNyOc/BAxyVZQN81t4Y -Icw+wcrak+JCt4WQKx3ldThe6O5Qo0JPjFf7yII6J5lFO0JE6MZQrseBDB3l1LKh64NIz71xfIQV -wOOFToiPdbQ44q9pNu7bfBnDpqFkrw2hvXckxPDV4cL/z957P8d1ZWmCP+1093Spu6dG3aUyKlEq -USIlek/QAoQHCO9Neu+9TyQcvZEoegPCAwmk9z7hbXr70gNkVffsf7F7H2tndmZiN2J+2IhFdOAo -nhKZfJnvnnvP+c73vcz3zve2e9Wfhybwl8NTxJKkitGYMUrIEFjj0BStMjLDuJmzi1m+WexF3xTg -Eyrc1aieUhPSUBtTFg5hB2iMiI7X45/jd8bMA/1Rc39fVCPBJww85MZUz3HfLPLc5gTqMtDGtRkH -n+ifZ9yM61ltBQcfzDHxRmQWe3lztPN4dJ4MtDerJ6mV8ROGuw88bwjn1ibYTXAtDcxym8PT6MsB -EA/b73tOL/7S/n3GIGXnXYMPkmYp2z9HqwC52BaeZzZuT2AuBaaQpSDHatXDtYedP7ceXge8fUvF -Q9oBx/NNUW5G1SBWbGxMwSXixw1ssvd1z42tic5TUT21Me3qvxOzDPQnzTI+ZIY5NOra5njrkR03 -l5w0cUlhNQfpV/E6lsZZTSHD8JBfMygIa8TosJrdujWJLfbNYK8nTJxeUIM4MT2jNTBDupHQwde1 -9cmiGnLVxlj3afujst87n3QeimqFlJxn4H7MJRWODTX9VvsT0HcaKTlmlbLiRlCbtULUtlaI3tII -MD7TvUfOqduct0PIU8jyI39nf8XoAtyNA47DyNiYSP9028WYgdYcgnNVM9jvU98aWnhDvrg2yahO -WMXchJWLTbtE3JRLwIlZ2BifilEH5qQ3YOwfCplkgrCWVBGcwV4OzqCKkgZMVRrUzpi9fzhoGuxf -GOc3r08wGz+u9j/Juvnc1Xc9RzZf9xxzPqo/sfa24cqHBSbjX7flT3KLIsGGknjT/banJGYWiG2/ -dF9fedcGuEtvZdpB7QVzyg6qxeiNaUEb+Lxyz0vsiY1ZXvPmnLh7e16GjRhljKBOSvKphYjVCfLV -5XfYUx4Qx8vviJfWxphly28EVcEZBQ4yy9mgDov8alo1wOUrG2O04q1xYdPWlKh1Y5xduTlOvb41 -ijkVN9Hqw3pGw/YU4fLKK8QRlbT8H+clV/92+Xnb9zEQoxtjnCo4tqI6QS+cMykTqy1toNSFlNir -y2+RxzxPsUdW31OATseeXBtBnU7p+MjYHKUqpaXWhaZR11de1Bzeetfxg28cfS5p4aICc5Qy/wyp -JKrjdCTN7C443vNuAQuyUto3JhBnANeqTbpuvQjZB++tTbBqUlYhNaTFXYcspJpdLwdXcHEwUS21 -wTeNKUqbqI2QmQW4IfJ0dA5dFJxGXMgaeOi/uAZu79qG70NGBR9wuRq/VoRfV0nwi2/JF7dGkafX -33QfB3lyPqGkNaYNfZyETkwEtbJta4ZenrbJ+BH4O5j3PccXntd/5XnR8sOk9Op/Bpr8REglxCxM -cRrdr+g34obB/pS1vw8yMtoianzJwuu2H+cHS/7ZN9V+OmVj9mY9MlnULKbEzSJm1v3pmtuO4Bz2 -UngeV7z+vvP46rveUzGjiJp299+Nm6XcgJLfAX8fnLVKmAkNpzOmotaE54llGxOd5xbftB6Bv+fY -cSgGMg6ZBOjlRv8srWVlBHF1+U33ibyDT8u4Bew1De2m6QXq5NIUDx009/dHbHJRFORIzCITJF19 -A+kFscRvlvJso9xa3TPiqalh5LmwcfA25OwfjMO9rNTMlrXRrisZO4ec90rkafe9yYBGwlh42f39 -0lv02ZRXftevYbRE9IymiJ5WH1DT6+MgTzLwdxgLd8fX5gQo/xyxOGXloLNuAS3t5hLigG/FHWJ2 -xCLAA02DSlr4mJ1lSd+mklRnuN/5VVDJ7wGamVtYEin+vMoVxU3kjqAa1GUbrWV3WSTVPOwp5dYf -+Tv9o5aKD+t9P/0XP1cQUdPrAJ7gwrp+fkgjBXjD7Qzr4R4GvI6kTcpJ2iRMv1rYsz0naPfNCTvX -x3l1i2/ppWvjtIptJadp4Q3l4sKr7iMbo4hz8Lm8sF5KDmuFyOC8qDek7qOFtQrwfjGIVV4L/P1r -wihA++b4HSuj+AvuJ91fW+93fu14iDi0MUKF+VYb4FHNCaCdIZuUG7eIKXAP0JieVB6awwFcxF4I -gBgMznGbQ2puWxKsB8DgDufjqt+sva75w8a72j9svq/7PjRLKAkq2U1BjaA7oOQ0RvQifADE4eLb -+oMbY43f+WYRZ3wziDOBGfz1pEFMS3sGH8H3Gl2eZJQlrSLqxnTPuY2plkMRDQrEGP7q2gjAn/GO -wykzq2tlitu0MIq7AHC8I2mgNUaViCs5K642rsWVrox0HV0G8RgF+hm+p/mYvPMPWxOMmjh8Xd8c -8mJ8DnkF6MwrS69J5zfGGWVhlZSUsg4Mrk9QbgCtfSSiZiNCKk4HWJNGoMM5kH3wtl/bx9yekaLg -PsFbMyIkqNFlIGerI1pyXcLAQH9cFHALC1xqRE+oXRntOrExiS/OuBT9kENIj+mZzXEtuyuqJtdE -NYzWpFHOK7hFfJBjVe5fmr72Pu8+sjlNQ9xBXfiXN8zrv4uqsBVxHbExMkusyhjZXQW7mAmZBMSQ -ht6YgK/f0vSx1kdQpwAHuRJQ40uDFh4h5ZIqdpYHn+2sSm9tzBFqQkYuFu6l4NexUSEDoWppEnl6 -aRJzzg94esryqW/UbRBXgoQVvrbp3suEe+BBfkEkSOiI9REN0OFKWpVfSSxJ29iE/HLfA/W9jm8i -OkbXh1Vxf34J8K0lkTjuFDA3NLxezyijxK+i1f95ffDlh9X+X+IWLjJuFhJzSyLhzrp0OLckFqWd -LOS2Gl+8Mkm45tewsRnn0MOUvb8P6AxRSE1p2J6l1EWN9O6Mm4OLmoUE4y+ES1MDTQ== - - - Pwa1ZNyHVQ4zquk+F1ETylMmTnfazEOnDKz2LMi9D3aFIu9UKCCrlAl0T+nCK/Sx9THq9cC8qCei -6mdH4XOKcF/DGSkC5j7eZw1/WH3b9E1YRSwPqKgVIRWzLmsTM3c8g48LHsUgZOVjo1p2C4iBxoi6 -n+Gb7ScHVFJ0aJ7XGlJSysLzjBqA5xW+aUZFWi8i5Z19YC6l3KCB2xnQyKhhzbDEPydGbM8yqrdn -SSWLrzHHN8aJRcF5Zh14X83Sq54ja+9Qp0Pz1Eqgz9s2xijFy2+wZ70vuw9HZmnVGbuiL2KSsTdn -6VUbk5QbQQ2/J2QAfADk2fI4vcL5EnXC+xZ/Hug0JOD1Iniu/Cqg3bX87qCK2+KbY1T75mmVARWj -dmGEcNY3x6yFrGJaxsHFeZ/e/HLjfcv3vinEmeUR5ImIhlLlB3pqaYbbYHtOOpkEx42oWN3LbzoP -r73tOBJWfrq2sgkyCAhZ4/BdyMjHgXivBLW1KW6RcSI6IbLgYfYU3IzOpJnRXPDyaXlP30DM2Md1 -/EI6759mNxU8A/eyLj4jMNt7ZnOs+butiY4jK2/bTgSUmMo0qDUxg4QXM7CQKbOYngNcKazGXvXP -YopWnvcctdyt/hfvs46j/mnqzZBGTLK8pFT39Zz57Dmj8mh4nt2bUJNro7OEazGg8+KA266PEa4u -vkGej1t4xI1ZQbf7KfZUzi3hZ1xyadIspOWdDDSkx5f7Jpt/WHvXcDDr6bu1oqY3T9+rO+DTMGkg -H7g5m4C46wKa2s5ALD1v+lY9UPnPS+/wFTH73bdbIN6CRj4aYCIvZZfwIaeED2qK5C9ror6Mjdi0 -OdbxQxbwrPyytD/hYHWHdIxmeB19al775rywG+6Lm9BRiZ5nTZedTxr/lPGI+SmPgApvcTutbXMW -eWETaPeYnYMHmuR5xibmr41SykJaHn53ZfhNxisQxE2srs0ZUvHqOOXa9hy9OuFg4z9uCft2Vzkc -3xyqOmngAk2GKUro8MWfNhDnORMPl7GKGXE4VubJVZvjxGL4N30BNa5kY6LjeFxHrk2YecigStjt -n2Hf3JjCFDmfNny58rb9UMpCqc85qa0FN6UzZSW27C7w6Vknnwg0Ji6qFnSH5hn1W9OUssA8vz0w -x20Bx+/OmIS4T/pEzW1deNp+1DeJKU6Y2J1xKw8TMw0q/PMPbm/O9gNNBDjfvBi5NcquWH1FOGe+ -X/+t92nrt+E5dgPgJaDWcZvWZ/nN5p9xxwz3Or4Cn/VdQkW/GZqjt6yOk0q3AL/xqfooQBt2r8xw -69dmJAjviBS39F6MBjkIYpXZuTaKq/bPszuCegkh4VD0bSi5LQujxItrM/RK36ffbtHK41paLWSg -NQHe0xWZZzUArCXE9FLa1gzQw/PM+tUR/NkA/F2Yknwjruf2bE8xatfeEy/GNYIeSC9AA+1xceFZ -07crLzqPBWcRp2Na7BWAmyjIzsOBOtIM2UTklJ2HBRrqWlDZdTFlZHZE5jmtGyPEyzmTkLazfHc6 -YuEzlt8jj2/PEqujeiExZetXZNx9Q0EVvUU7XHVAM1T+FcjNrohaTPa8Qvy4Pk4ug/sI+2c4rRmA -45BFwvE8R59U99f/YZJ95fPFpz2lYG2anE8bf785jr4M6XmotElEytr5xB2viL+zKJZuz7OaF19T -i5Ofzo8J8RvjhKIwfL5fx+yOajn4vEMkAjXsVsTMx/i1zNa4Y/Bx2jlwJ2PiIiE9uTquxVxfe9N7 -0j/FaoXMClnaNXB3SwlqoolHSLskAAd7r8X0PUVxM748aSHV+pTIS2vTlI6kc/AnwLuGki4ePucd -egoZhcTgNKHS+0vjkcWn9UfeUI//053OL//G/qTy2MdN2b24U0gHGy23JB3OuIXs3IK0L+0W8P3z -+Cbbz03f2x61fLU9Ta7IecV85XD1NytjvTdSdhZy182nfXQyUYl5cq/7l46KV6wrB3m1X/5vkEGE -h0yMtrSV0RbXE0rXRlsPBuYwV+JGwCWsfFzCwkUA/1sTRnZ7QI255pvpvlCwM3szNrgHPK0crH85 -0LN1W1PkquAsrXbHxcUmDNiS4Hz7Ub+y83gB1LDdBSErDbAkrhXjAnPksq1pzMWwhtvhU4I6ME2p -TAKdDXAVFZpj17t+7jy6PY69njTTW7IuFiJm4mIAz+vZVokQQb2M4lPLCFtj3OrVl6QidX/5Fxsj -LUcic8QK3ySlwq8WdK3OS5AL45KutXFBZ0zN7fFNEa66n3YdWnyDOAE+CxU2SqjrSkbVupLbGFDd -Auv+bCygudMfNcqZm5PoIuvDhi8DM7SbSZOEmnFLhJtwf2Ilpzlo6hNHLXIBfF3x5gTu0vLL1oNA -ZxyJqvmdIOa4UaAxtqbZdVGNlBKYZtUlNMzG8ByxfP0Nsmj1Deb02gj+fFTF70zqpOStUUqJ95eO -Q8uvOo/FNISyuBZfElFjynyz3dc2p0glQV2/IGoakG9O4697n9d9HZqlVIRm2Y3+ceK1j3Y+bXdp -6EXYImKszzCqohaFJGIZvhO1Dd+LWuWCrVlSme1x/Y/u5y1XE3oBZWtKirb9RDi69p5zM6CUYgNK -QkXSgK8PKnEl7p87v5kRVv76Pf3y587HHefWJ+hlc8N1nwMeXB7TsxAbI8ii0AyhPKon1YUNlPqA -ltkQ0cl5cZtCsTFNr96YJF3PeKTytEsqTliEzJiBgYnrKI1RLaMhaebj0t47Yxn3wP2Cu2+44BKL -8k4RO64VYJNGIQEC6xrREGqXXnceCukZHSmXkLUx03k2qsNWRQzMHqCdyQmrTBKzPZhIuu68jTl4 -jKiV0ph1KYYi88wG75PmP81wi/7W2F/6z4ahsh8WXtRfz3sZ9D9vKn4JA8wKGXio/HL/TzGbgLw1 -Q61Zfoc4Z3vS8M3S++7isJpUD3hoS8rKRU31lf3O+6bzas7Dp2YtjI7wSPNRnaz0i/udp/9W0nj6 -s1uoCwcAVhBjAMvDenp9zEAD3IVYnDRwgJbnItcm8Je2pvFX/FOU62Elqy7rENI+ePn0XQ8Hl7Iy -WsMqWnV4jtOQMvJRGZOYFFNxWlNGbk9cy2pPGtnItIWHj+rYrXEjpzOoZoA14jYl9CJcFHCokJbf -uTCGv2h81PZNSEmryVr5+CDA5JRBzk6ZRUB7Um7GTdjrUT32GqwJQD2tTZg4PQEtB2gWVnVMI0SF -VeyOuJZU4XhUf8Bxr/lroHc6IkagPTRSYljXx4rpZJSYXkSP6gFvtrKQCTOhxq9EnPcBLQtZudi8 -Y/hB3Hz74fa8AIxPiAR1Dgu4e21oDntt+U3jMc/T0gMhsN6gnvRD3sGffHoBBq7vQGsRg1Ps9vAU -vSY0hbvmn0YBnUQoTmil1Jh+eGhrnF6+OYI7a7lb/6XrfuOXgN+XJnWMpgTAgoQOziFRR3BG2A0Z -JfSkntu5PYG84Hxc/lvHo7LfxTSMnrRz+HHKIZdF9OyOkFqAj5v6hID3slImelNktvdCXE9rDIIc -jJmEpOzCrdcAr++EzH3CqHVwMGLgIcLztJrwHJg/Hatza4JZs/qOWRJWSrAb45ybi6+avtwYbftu -7R36xPoIs3xzlN8ameV2x1R85No4vdT1DHMyphNzQEwQ1t/3nNwcJV4JaRiNSTsbmV0QCVP2oQcx -c59oG/BJoLvY6ZXbY0CnkzanKTf8KkJZ1kbv2fUI+QWQNxmnYgAyyVgF9+CjHTB/cQMfC+pka1j7 -6buXyyGwf0jN6Mw45f1Zb99QxiNgZz0DjyCHVJi08YkZJ4+etPLISVBjI2Zi1fZc76kMiBPfBPna -5hiuaHuK1pbQ82kfPLJb/7rK4aWsmJubU9Ra72vqFc9L2tWo6dbPASMPCbhZdVjD6s25BIqPi0JB -ZI7V7JsA+ncGf3ltHHkyZmB2wfwxqoPP33UcXXqHuOQdITSuzHGwMausLwtiPW4kVUT15PI8yIGC -QybYcUoFGZuQtDFNLF560/XdysvWb/zvek9DGlxNwcUj7Hilop0FqTjt5OEigOuGZ3pORmYxF6Iq -/JWkjtmYNvFQEIjnpJHbBQGdk3WI6FmHmJ40sTsiWvyNsI7TFtJIcRFdPy8wN8CIaUVoyCTEhwFm -h9Xsprie3QaZeMi0VUyNgny3Pqn5aop34m+t/Tf+c8JIBRjP7onp+PiQhtvtV3Kb/ZPCju0xaqn7 -Ye0fN8BYA2P4ovgcqz4JdGrGwqennWJ20sEnAHxqi+qYzQkrsTakaT0dmms8tDnWdigBtEDa2idN -me888avoTc7nDX9aeFV/2D/dczljpXcBPdkCausN9wju9Po0sx5otf6Iht9r/7nje8/PN79J6ck3 -c1YuOqGjd29MoMu8r8CcvSdf9av6aGG1sHdjglgyN1Dxm0lRyd/7x2klKaADkipQt8aAxpnBX8ta -hUTIxEeF1bT6tXf1P6y+rvs6MN1zKmXhYlK2208S5gFFRCdAxQGWhebh/UFcmahd4dnO4rgaB7QS -q2F1hlmbsPXJgyDnFl4Ti+YVbd+4H7b/KalBXczYKE15t4gXNYhJ27Os2rBGRgqqBjkh7QB3fYJw -1faw7nfWe3W/sd6v+wLkcmvW0TcA2SW8rEciSDuG7oO4vZtfFnIyXhZqc5x2I6wRYZJWhTQNx7Nb -OhTWcuB7oiGyC8MvcwuywZ0FPntrBlXueNjyXcYgAFikuJ2ySm8nTEJGSNNHT5gUoqRZLst5JLKP -a/K7IA+wEYClUR2na2dRIkk6uISIkd4CuGpNRE1ryDo5mB0Pl5pz0nsTenLD6rvuw/4Z3LXdRdnt -iJbesvCm7eDiy/rv1t8jrgAfqUB/ytOW4ftxw8CwD8RS1CUW5NcGX4B4pcDXnbxn1v7Geht1DAK5 -mjbROxNGFiVpYaDXJzBng1pWc8zI6fFPoi65n9T90XT/+udgn5a0hVgFmfClSVBPc1YBseCQi3MO -hSys57Q7X3Z+a7hb+Z90A1f+3vtTxe92XHzy7oJUurMolaTtXDR8/TKkYXdAGlptWNl9auN9x7H1 -dz3HA0pScdzAat71ini7CxJR1i4kJUzw9QGdJwLz1IoI4OZZu5SXsUu5WTuIT6BtAa5Sw2C9I/OU -yoSWUhvT0JuDanbz8hjuuudl57ntUVxJxsbs3pzqPON91fzdBtzre1bYFVT1M7em2PWLT1GXYlOU -iugUuWzleetRlejM5ysv6g+mrQJS2qUYTNiHbocMMvrmPKFkZbztVGgOVxOcRhcFplEX/bPoG+uT -2Bt+jZQc0su5kE0uzLolXPg3jIsvu0+uj2CL/YA7x/UUkKOU+q1Z/OXAPLMuY+YgMmZ6a2gee9X5 -U9UXzsc1XwVmEBcTenpjWC8h+ub4rWtjrAr3C8pl+8Oeg773hMvOhw3f6RQVX5mHKz4PA86dtQrw -ER2n1fu2+6jz59qDCQ2yNGsj1gXmiNX+WWp9RMXpiKplxKj+1lDMIMD4pjGXHQ9rfg== - - - P8M/+6vttx1n4PsPJcwcZETP6Ab6sXJrktuwMSJuX/yFfD443XsCsqCuJc2kmpRVRE0C7Mm6+uRA -NwzEbRLW5hwfufKWWrnxnnDJN42Cz/fB56zKAjpiRW5BwM55+u9AdhErYWP3phwiZkwvxIRU7Lbg -LPWmb5pQHNLiytIOHjm/MPBzZvHu5IaK2RjS0huTZg42ZeagfOPYYvvj5lPG+7VH1ifwNWHt7aGA -akBgf4Yv9bzpvbC7OvgiahLg4T6yeTPQJWZ0PeB2zUmrkJJyDP+UcSiGI1pStW8WcX5rqve0bxZ1 -OapDXc65Ke2FJTbRr0Gc35xBnAFcnp1fHHwC32MmY4G/7yQ3RjSUm3kPG1dYEolzy/2Pg1YBYV3J -bwV8pjWpYTVHpnov2W6XfDEnu/KfvC8bD23PEwHP5XaujpLLjLebf7f4sueSbwZ1s2CXsLN2eltE -BTjIJOIkZOR2Z81SZtamkIaN7E7na+xp61PUcfuT1sNgPS9/XOKQCx4ONu/mEZMmTnfeNnQrrZcx -IC2j3jfe8ePSs7aDm69Rp6NKcmlSS7iRt7K6sw4+MWXhY9I2ISUNOF9MR6oMzCGvQSZsdcZGbwc5 -KU0Drh/XC7H+WaBv3yCPbr7tOrT2pusQiMtSoF3akmYBNmHiI+HvH30zmBtgPa8Brdi8OQV48TTz -pm+G1xZX9zHga96cjzq+Ucurfz1BO/0r3/vuC7sAQwsexXDMPNi/OMFr2prjtcUMEmYS8BPARzo2 -x7uPr4+3H92cQV5J2ofuJ+yDd4J6HjZhFlF9ShFqe5Jdl9QJsXEto2l7qveEfxZ1NqQm3EiB3Evo -WK1RFeF6aJ5Quj6KupLU0prh8zxhZc95H6gRvjlu49a0oGV9gt+w8gp/yvmg50/TwtJ/mOYVf770 -pOWHjJlcl7OzEWENpWpzhnAFrF9XXIevDCp7zi6+7jq8MYI+m5hjNmSA3oFMAwMhnQi3Mka6uvgK -fX71de8lSEWqSOmp9WHAW9Yn4N/64i7FNdyerVFOo/FW79eBGVwx0HWEnIeNzzvZpKgWUxZSkW4m -zayemEWIj1tvP/bPy6iuF/gLy+9Qp7fGu88kzeTmrIuJzbqZpISF0bsOMHVtEnURcoh5QT2ne30C -fcY3hbkYmyfXph20no+rfMHukqgvbOLQN7TUWvi+jyAPB0De9i696jlue9R8dPF1x5WEFvAmvUS4 -/B5XbH7SfmhpHFdZWLmnihklrNV3uKurL9oOB6fafgSaqSpl55N3Vvofpx1C3up474mtWUJl1Mij -p+wcXGAecTGgRgBtT6zaUiHObCvRV/JeiQxoI0nMzO1NWjiEvFcoyzp51JSe2JAwEuujFg4mYOVj -gyYBJqhmNvon8ReXnrUctN+r+d71orPCB/R82MCAf4OCcL8gFGlud38dNglZ+UX5YMYsIqaNrPb4 -HKk0b2Gjd10ids7CQ2WsXGRAS6sNaqQEv7KPCOopiCtUUcrReznrJtUX3ExkziGg5K0Dg3EVqyWu -ptUm1Zz2lEqEjs1Sapaf131rUJz4x8WHVQdiGnJ1xiEg5119ipSZi1ib7D7hel7xm9B065GUgViW -t7J7cnYhMabndYXh6wNAnkTAeCJK9AXfJIjJadL1gJJWGdayW1NWGQdoZE7KLMBE1PSbiy8RR4JK -clnaIiCkLWKq+UHHV6Zh7I8rzwX14Sk24KuU+o3RhiO+yY7zgXkxemtW0J40KARJ44B0bZJ9E3AA -bs4tEuY8Ak7Ww6cBXsYJm9gIz1vUycCEsHvpraBd3df8+7WX2CspmONpaI1ZOxcP18eMXUjdGidf -DinJN9IWPhYyCjCwVg9MYC5svu86CjRKSQLwG6CLaEG1lLA+zq7yvhDeXH7Lb4nMcbojSlyx4dal -36y/azi0PYE4GdUz2mJGuWB7glIammF3JLVCYlIjwCw/Q18c55f8cVZa+vXCG8qlNeCDX89Hbk4T -r9sfNH4dV5MqM1ZGe87JRBRcbKx/GnHder/+64XnuPNJq1QAucQcyMHqieuIlWBOi+LzBPg+johd -UCcztv5B3xyndfEd+SrQeMSICnc9oUdeD851XtDdvvzFxkT32bCW2hQx0DsB9xIFdfT6gIZ4I26m -N0MmdifQpR0JM6hTJsRl/xziYsrOIxcWh1+COiwPqqhVeaeQtesVsJM6UoPrfsvh1Sc3Dyw8rf5j -SIUt+7Asv7+7ongU1fF6tiapVWAdG7NmVhdkZHUHlejKjYmW81uT2MshLbUh45Ip8p6B+wnAe3xg -3kIaUl3GwcEGAScNT3efTpuprUk7DxN38HGQU8hMgzWNGdm9ES25IbfAEwCuKC0s0FEFN60joKZV -r4xSLgfnuV0Jk4Ca9w48yrhF3CDA9O1Zcklgnn4T1HUk5BDQXW96Tic07LYdYx8vpxNhdgAvBGPs -SBkJN5JmzLWNqa4fk6A+BVTsZr+SWR1S02t3FziEf13ncXdXGZiMg9a+OYE8u/YaeSymZDXH54XI -0Ay1KjyHK3E+qf9KIyv5fPVp22HAn7t23GDcJj7QHQJsWCdExnTstqyV3hTXdp6Iqlp+CM8jL4bm -mTejOjHOp+IDvcJsWB/v/FE7UPyr5WcdB0NT8HVxfICFUmHOwUQC/dqcc0o4WbuIkdASK1ff1Xzr -eV7+xcZbwrnojBwXVQ+LogYJKQbX1Fl6HaQR4NPmwQGglQi+CeSZwAyxODTPb99ZGPqlsKC4mwFx -FLeyu1N2dk8a1kJAX2f1HFRsnlq79R7oullK9ccFiTxpYXbk3DxS3sslxgystqia15GxAF2tJVWu -vW39DtIRaj845ZK0Qcpcf486vznWcRi+jm31PfnK2iinMqSSk5YnOTcXRojnAzPUCv8kqWzXySP/ -ZVEk2HHzGRGAJ6E5Rm1co+BmTP3i5Tek82pF+x8meDWfAy55KmPu4+ecchlkE1HXZ4nFrhfdJxPw -eRKg9dYnEKdX3nf9sDrS+ePmOLIoY1UMQc7HqqRNwgupaNUwjmQM3N6osuvExruqP3if3Pgc6KHL -QDfXJy0iECtAV5slrICKWh3W0uohi4hRWJQPFRYVDyCgnUFsXtqeId9ImsTkpIWPc7/s+TFh5RP/ -vCrp/7jAAXjJ6P7XBbF4x8smwbpzYwpzfm2SdN3zCgnwglaT0nOxuw5q078tMDH/tsIkpCyoUu+z -hj96XqBPRo0CSsQopK28wZyek5d/McI6+w/uX1qOQUYO9sOyRPFxRSSDLOwe+J4COaeAuuMRcoE2 -K39J/PZvjH2XfhtTYm98XBYKdlbF8oAKV+V90/otZBcIdjbvGT5u9r+IG4ltOtHJf1BLSj7fgH+/ -pGHUJUxcJJjfC75pZkPOJWLueHkkwHFvps1tV5dfXv/mKe6bv9mcaP4+NEO8ljfyUXkTtydv5fRm -Taz2rIVYmbZgr0MGzOWUjdG2OkYs2hjlt4TVt+U5l4S9u8QhphdIDUF971nbTw1fBN6TS3NGOdv7 -Gn9lSlz825QerivMuvgst3EH1L6cg1yfthIrg7O4opCSWQ+wS54EvDqhJZUuvr7xa/fT6/8A348x -YeR0wb9Bhc+vb8zSK5ZGiRfXR6jFHxwc9P++zCZmHcTGoKbpyNpE+W8Bzp3cXRBLsk4RIzRHLF18 -UX9gY6TpIKRiNhRMUkbOIeMH9ewWyCKh5RzD93PuwXsxMw+zOdF+aPVN04HQLP5axizj7HgVdyCL -AAdZBbjdJflQ1sHFRpWEa8vPGw+qFWc/s90p+6cg4DA7Djbmz2D+IyZafWFRyPm4JunPOWXCFNDa -KROjfXui69gY5+TfWO+VfJkzc1HhaWYN0DHfr71r+ZN/Gn0R8AzEjk3O23VIOAE1pWptCnc+ZhAR -M1YRJWVmtcV0tNqVka5Dq+/aDhacpJs7TibIVU43fG49BPhaTM3vgnSC3owZYLeZejNuYADez24u -OKSCglMqSoG6v6WklEV0fCRkERILLpkoA16PmPh4v5paDf/uJTovADqfUe2f7Dmx/LLhy9XXnYez -Ti5ud1nWn1uQ96ecIlYS/r7V0M8Pm/u46cWBB7lFxe044ExbSmyRbxZzIWmUsVLWoVtRoB0X3+Mv -Jqx9ssKybDCs6S029t/4x62R7iMRHfJC1EiogOd7YYJeZviJemZrZlCcc995lwa6N65uP741WvNH -97OSfwRa8ErWJhUXlgZ/8bzDXZsQVv96e5LTCrSq5N9W+n/+4BVwAjO95zdGO49uTqJPJ0AtB2tF -XnmPL1qG70Ewhi7L26WyPy9I5Tmg4WJ6TKn9ScXvNYNX/jFhpKJ2NwdeZxdEPPh8SGSGXAu4062P -m/KHO24eNWfh9IL5qPU+Qx8JqpgtecCLFp41/2mce/I/mO+U/G5zpPXEv60y8f/HvxND/f89gP+v -bN+RvWb7juw123dkr9m+I3vN9h3Za7bvyF6zfUf2mu07stds35G9ZvuO7DXbd2Sv2b4je832Hdlr -tu/IXrN9R/aa7Tuy12zfkb1m+47sNdt3ZK/ZviN7zfYd2Wu278hes31H9prtO7LXbN+RvWb7juw1 -23dkr9m+I3vN9h3Za7bvyF6zfUf2mu07stds35G9ZvuO7DXbd2Sv2b4je832Hdlrtu/IXrN9R/aa -7Tuy12zfkb1m+47sNdt3ZK/ZviN7zfYd2Wu278hes31H9prtO7LXbN+RvWb7juw123dkrxkq9O/E -6g78O7FfHTxYxsCVonnozzoqPztYXHUWCZ43obk8POezus8OIo8Xc3ilZCyPzGSgOeIDReClE8dO -nTlwvAmPph049Nc9D4CdDtRzyEQyA7zYjEXT8IcPHAG7XgLbZycOnDxw4tN/HeLPjp4/f+H0sdPn -z586d+rkybNnLhw4f+HCmWNnTp89e/786Yunzl44QP9/3OnMhWOnTlw8f/7cBfBv5w7Q4J3Ofnrt -4okTF86eO3EK7HT+07tOnj5/8sKZk2f+X3b6nw5H+18ZE+0z0mftnzE+a/zs4oFDhw90tH/W+t/9 -BebtAjxvJRw+l9SA5oEpYfz1xRI8mJP/4eVDrQwGmo7HHfj06gHw8oFTp84dBrNUDLYOIfwH/jP+ -/zhrJw5Ugz8o4CXhgZMnDtw80N174gAO3r8JHv3Fs/CIz/515s6cO3b+3F+f1/73z09/eqz9b/v/ -z88/7c/4vw8PHtj/bRQn4VF8Co9yMg1f9Nc/Pzn3f8UKmAqwT8Vnx0vxAjIWf+NmZ82BjrrPusF7 -j34KmL/+Hzz7NNlnz/51Kc4e6D1w6sRJ4NQ52FPS/9Ib4AH91zf918cLB86AAZy88Gm8Zw7Abzzx -2cGDn4YIh3fRgQtnT506/1lH1X+M6bndkElKi2ul5LCK1xacY7cGNMzOuInZmXXS2iAjviqqIlTE -DfTGuIXTC9nFrIiO3bU1SywOzlOrQnPMuqRegEmbxFTIKGXEtUJ0XM/rhpuBwTfd3Q== - - - Ugo6NycZ9ctvCGVbY4TS6BypND5PKoN05KqYGn0pZRaRY8Y796Omuz+FTf2S4LywNzDNqPJP4YrC -03CDBNy1hJJRA6lEyIxJxl56S6veGGU1JIzc3qAKe317FnVuY6zreExFqEnbaa1xFeFGUk9vTll5 -uLRNwkoamK1xDa02qqFVb45iz0NqVseus68vY+HjEzpub9IoZmScEm7CwkP7lJTStTHEycAk4Xpk -hlmXMkjocY0QFZ2TknxjIgSkHhCGZ4A/I9hTWyMd362/qv8yNN57NqVht6Z1YkLGJKasjyPPLj9r -O7jxuufoxrue02tvm78Pz6CLgA+NGb2EFlUzG2IaTjtkFBKyVrkgZVf0h3V97KBKTvEpBT2BGXZP -2trfD8aDSZoZHTkbnww2UsbMxyZ0zOaYhlob03LaQmrmzbie3Zoy01tWxlt+2JjsOJUxUxvzFiF5 -xykR5OxSHgTWZHOKWLI9TalOmmQ8yCrnB7XUmoCKVBYFc5Rx8mlZr1iQsApJ22pqg/dd13HIIMTH -jDxCSEdryHrE4vyi4n7GJaClnTxCys4jZhxcbNxAqkxoSeUpE7kGMlLqd93geE4RM23nYSEbC5Gw -sRERA/VmzEhvTDu5uKSF0ZqxCSg5h1yasvDBunDRGbuAlLIKaAEtudqnJpQnTBxk2sHB7LhE7A8L -ivu74Lh5j1yRdvcpwkYRJaDjoYNwMyEQf0mbXBYGsQY5hh5lXbdfZe39g2mrlJu2Ccg5N5cAN+pO -2phdKTsHnXOLuWnwnpiG2QSZhOSUY+hByinh5DwSUX5BPpBycrAJC6kespGa42ZiTURDKvMpSXXq -e43nnE/wpRHdoDxlgRtK48s23+MvB6Zp5SkrmEu3XAa5uLiUjd6c0BGrUwZaK9z8CByPE9Yxmzam -CZc3ZsmlMZsAvzZJuBqeYzem9CBGzDJ20sxDRzXEsoiaUBrU8nuWxnk3k5aBfsgyMBDSgvybQ56L -a1GX0kZ8WcqAK00Y6A0hLaMprOMhElaFOKYTon0TxMtrr3oO+8ZQZyNz6KKUmlab1QkxcQOne7zv -xq/sj3t+BLmITZoEmNA8smj9fdXvfZON30FGUlXGwkOlzRIKZJXQIIuUkQJjSlukzJRFTE7CTTT1 -lOqsjd2TsXEQOadUUFiQylM2GQ/EECuq43aF57ktKSMfCYH4C87iLq+NNB50/NLwjaqv4YvgqJSS -UCuYwRnKje2Rnh+Xn9b9fvNN2w+QilCS1JCrIjrazelbJf+kH67+IzTPQ2dtUk5Qibq48LziN2tv -675O6QglKR2xNA2wJm2TsiCrkJiAm158aqjTJ97xKm5nnUJ60iqigFhg5jwDd3MexVDKCvLZwGqN -qVlNSRWrOWvmdGWtzI6cndmRtTCaE2puR8YkZadM1KakllSVs4FYsAjwWYeIlrGJ6Rm7jJ9xDgwn -LVJ2WCdExfQyCmSR89JuqSjlETKTDhE9A+IczoWkk4XwjHcfWxpDnM55FQ8zS/0PM16ZPLeguAM3 -Gcq6pKKMlYPIWGgNSRO+JOck1ObcpOaoBXE1ZEBdh5vSQTYhKQkwJ25ktKTstKaci9qSc9Lb4gZi -uW8WdTGh5+PztrvPC667b1MOPjFsoNT6NfhrAR2+OGkSEnYWBn8GuSvOePgUuFlAxnV3BHLeehKx -CSlxC6UuZqLURi1cVA5uOuHi08AcErJOxUDarpCl7RJW3s3B/WWVz8m5eZS0XUjJmJkdkBpu5M5H -x22KvoRVwoGbn2UXFLeTdjZ6W9l1bGu2/YdtZeeRiJ5c5RnpLBrG/firCV79wazjJ01gFl8MN+de -ftp1MKqkVuWcYnbWKxGkHFxM2i4gg7UTFZwyUd4lZqVtPOz2JLV4e4ZeHjbwkQEzq3t2uPqLjfeU -8qxJzinYBwaiZkbn+mjzt1tjbd9HtLwegI+klFPRFzULSVszFDAHAFPMrK68ldmZMhArAnOo82uj -vUf8c5TKqFnK2JihVS69RB3deke9FpkStMVVjJtJLbkyOk+8sTWBOae/1/jb9VHC1ZheiA3pWK2+ -6d4z/vHOMwkNribrZCIgI7MFArmTABuIPXrWPnQ3Y+vvg8wyRtLE60mZac15F6iPVhKoO/S2pI1U -lzDy0CmzQhjRi7DBWVEnpJcQUnpul2+q94Tr55J/st4t/7X9Tts3sUkZMaQUdG2P04r9o5RroVHy -VUhFrvBNtB9xPa35cvFN54/Gx81fe572nE8bRYw4wH7fNO7y+tuuc6EZdEnWTK7NmrDX0xZyPdyI -IQjqG4glbMHd11dwySQ7XrEwZWW0JUHepJ1SfgGOFY+8L2Hh9qZMPGTBKmF/tImouw5ay46LUJNz -YitCM+0nEkp2Z9Y8OBDWkmrCc6iivFPI2PVKJX9ZkQ/nXCJW0iIgJC0ybgLwhYRFREqapbQkeEy5 -APYvyAayi323swt9g1m3hJdyC2ibKlJFANQVkCN3c0t9d8B2q7DS/yi/pLiXcw8+ALnHTFsYLVEt -qggyoy4nzOjrQV3n6aAOUQQ39oiCNUjZBETIwkFkXYzutJ1YnbWTAEYjL2xMtH0fUzO78vY7L7LO -wbtxswAf0bO7YgZGe9LKRiZNfHTOI5On3QJGCuByYWn4dc57+23S0T8QswmpKQe5LuugNOY9bGzG -zSYmbYRqv45cHdByezfnAVY4Bob/vCQW/WWVQ01ame0JEw+RtzM6d+yEqhTAz4hRiAPrQsy6h59A -TpkE1DxkWE+uS1joXQkrtSViot7cmkUWOZ/Ufbv+kliWcz6a90+yatdGsGeDM8TrOSurM2ehteTs -rJ60hd2VtcuEGXu/ImWVc5NmCS2u43amdAJE5lP8cZEbakql5l7Tl8EZTnvKBHiWntsbMVLrI2pc -adpI7yjY4KZ8Un7MzOnZBjxmc5J8NQXiJjTLrk+oOS1JLb0uZYQbJlMbIAsXAzlk/OVRQpHr565v -NkbI15ZfU69tj1CLY/PMhtAs+UZgkng5NEMpjWuZTUkTq8M7gji59Z4K8nNwENRxScrB6onocNcg -C60xbWW0ArzuyTkAZlgl9BSIC8ik4O+AXN9dYKISZnxZRIsuiumJpQkjtS4FsD1mYLeH1bz2gJLV -EJyhg7ykVQVnMJd8o91HguPYc5Ca07Y5hjq58Z5wPjTNqNgco9+IjHNrV1+3fW+4V/xPnl/q/pDQ -sNuzJikna5PxN+aplVGtELPjHLiXB+sRUKGvrI7U/XFjovX74DzmclBNrYoZ4UZCfFzCwO3K2STc -rEMmLrj6+kDN5qUdbHTazscnzezOtIWPyVtF5DyYy4KNWp934StTNuTloLLuG1A7qtMg1tanEKfD -s5jLO4BffFiUSj+AWEmAWI4bOT1Ji5iWNIlJEKihCTOjGQJ8J+0WsXPLigfpBTE/7ZEI0x75AMiL -2ykHDxe3gFjwijg7S1LFzpJYnFsQ8TIgf3YWh1/m3HIF3MAvqqVUF+wC+o5XwC54+azCAp+RdbFR -ER21FgKcKmZkNMGNNLMWESNvE9HTFmY7ZMLdyNpYvXlQb8J6ZltE189PWfvlOYeYBTeVSliEBAjU -v7id3Zuw8TA7K4pHuUWxOAt4UWFl8FlukYGMGQilYI1bIBu1Oe9lE8ImevPyJOnK6hStNOcaevip -2eOCkJNzSSVZgAMZK7URMnad3Z7qPrE9TbiadQiohYWBx2l3/62Me+BeynXnbdY79CQC5tY10vtD -aJ5wLWuiNRWcYk5uSXE/pLzbF9EDzq2n10V1pNKIClWUNdMaQS1vh8zs7oCaXLY9x20PaYflYYOU -mtSxWhJafElwDnFmYxJfFJjjNEWNIsK6klTmftbw+zSowykLiEmLkBjVsJpjelADDKSKmJ5WlzIz -Wv1zuKsrbzAnE2oBetcxMJCBm9wbKbVhHak8oqfVbE+Rr/qmKMXeMdQZAeqHvxtjVPwuMSPDJdVS -QnyOXh2dx13dAvi+Otp1aPF118GwklEPcI2VBMfNAs6cARiTNCIvRdXtx2KazmNRDeJcVIW9kjBz -EVsadtf2FKF4F/BIwB1JO24OHqxbR0iFuxxRYS/F1firq+OIU9OD5b+2PGr7MWOQc+IGZrNvGnFy -5XXL1ysvm75cedH8lW+ccHllElfUTz7590sPKGU7ZoU4AzAjZ6PUA03QFNYSy/0a4o2Qjg4wT0Au -wPwDcI+ojt0GY0vBzcUXwLFzXi4p4+TiUzZQU8FcZ8wP3qZsA4Ng7ghpKxedctJaPiwJuYUFNjbn -oXf51PgS3zSz7oNr8P6HZZHkwxKtCzJ1n4mou0+GVYDD6gk3MjZme8bOw+VcYnbOJZdA9sHbqU+N -kAfvpAEniIM4jZpp9REzvTHp5KCzXgE96xGxYd4BuRSDKYeYmXXJRDuLMvmHZdnAzqKIV1gSCXJe -kLNOoItALGftg7eyjluPs577U3lv//3CkkScWxSw0mBOQf61pG0cZMYmpKWsQnLBPnQ/D3IAaAFi -wshsBrh0CeiZqqSF3hzWkcshu0wQNXKRYR2tNuMUMXKeoZ/zCwOP4KYxOyvS/twilwp56Z3ZZQEv -vSgSJhxAE7mGf8657777sKp4DDgZP2qCeTrQYd7+BwVv3zAE4gCCx+oRi4CmawNY2Z0ysdpjWkJJ -REsqi5soNxM2RlcSYEHadetpxnNnJG6TCcIGAeDHA0MfXYqhvyxKFVETpdH+quHLpOnWPVivJk2g -PsINskzc3qyN1hzV9l5aH2/6bn2y5eAGwO41pQxtf028svwGfSamZtQD/diS1PG6I/OCTsCPyhbe -9xxZft3+p7xLAHQ6q94PNEraAjcBBfuZiJUJI640qus5u/qu8Y9r75DH4xo+CrKLmFsTxCsxLbM1 -qgOYA+bXN4M+v/IGcdT6uPWrB8Szf6MSN32fmBOjwrP0msgM/nJkFns5Ok8uj8yTy4Iz2ItJHbk2 -qsWXxw3UhoxDSI1oqdX+Wcyl4BwSrAW+PKzBXfPNAB0+jynS/lT9B9Pdyi8/uNjYHTcbA5mAFtJQ -KgLzpBsRFbksMk8sXptEnra/bP9hc5JYngJ8LgY3stXRGyMqYunWRNePK6+b/xScIlxdH8WcfUQ+ -/5n7YU/RB8CFAVaSkwAHInNE8Fn0ppSFiwaY3QvjahZoWVDnMTlQH+I2ETmsoVRH1aTSJMDqGOCe -acDZU1bKzaxTIsytCDhp+8Bw2jF4Kw/iM+3kYJIWck0E8JqVsfbv/TP02rxbcSvpYmIyDhaiYGf0 -gPqPyFoBVzGTa+ImcnXKQW3OeVmoAsDJrPP2M8g2fD9pA5rQJmXHQE0KaCmVYSOtLgxyJWQgVIAx -4naXpQoI4CucB7tL0r6CV8QD3EuYA5wtvyDrA5s8ZReSE2bALxxSXgbwpLR3+EUaaJidFbH447rs -9u6KdCDrYiFiJkIZ3AQpA9Y375CJIAurHQIcJQu0QRyscQLMOwQ4ZcLEaE7Z4Ebu7A== - - - zqiJ3phzi7hZr1Sa9cpkuSWprADwAeQIBdQRUW5BpsguScC/yfuy7lsv065+cDz57fxC3608qH1g -u5UF+irjghvIMrviVsAFAW/yz2EvQ2YBLmOXAq3MbEsaGSC24drKxQI9Js95Bn8C3E4RA/omZhJT -d8DnQkZ2T1zHag/MgXFp+fSUbfAO3IgtBdYTrhtxoKFjBtSVtdGbXy2+qP6tbxZ9KaDjtK+rBO2a -Rx1/sj7sOJTQ8XuiGnp9RMWo800xyuFGYp6XiB984+QbOx6JaEtJq/QpGdVAL1HXJnpO+ZUdRwLz -bT9ENF0ngzNdJxMaOIYkdD/gWa5fEMfShj5+CowvYaY1Lb1r/Mr5c8MX1jsN/2wZavpd4A0D8B16 -o+1x/Teb73pP71g5qKyJ3QmBcW5P9B7feN96cH2k5VtQB4phHwJKWgVk5GNyDj4pa+eiY6AObE0i -T22MdxyyP6n5/frrttMf3bT2LNAjKaDh4aZ+ES2jLqKmVftn8JcCSsK1pJHelLGyuxMmEEPztNq0 -VcpKGjldmxOIE/bHNb/ZHkWd9I/jznuf9B5ParjoHZdEmIQ5k0GAzZhknLxFIcvaxIyIgVobNQEN -DXRp3ili7izKhwImZscqeG9cC3igs/92FsRFygpqj7r3fMxIqM6usvBp7+DjlHPgNsBuLgSwGeQa -OgVrGBMGaBlKfdbNp8Ud9C4Qs7SPQEvsemUKuDE7wKMuoAPohSUm5sMatfMDwP+8Uy7LuQbuZF2D -D5LAD7DW7VEjvTFmYbb5Ac9cmeo+EgFYUvByyXmviAv0BBGy0dsgO6Mj7ZbJ43YhHWgjcc7dfzvt -lHAyDi4u6wJ83iWkAZzmQ3YOsrAs4OQW+UAHC5k5j4iXtLOQCSsT1HUxNwO4YsxArQE1pCUNOG/E -QKsPqIjFUQPtZgLGZJuYHgMYH1Dhr2dsHGwK7J/19g1kPBJJ2sXB76xIZPnFgUdwfcktKu7kAffL -L4olaQ8XD9eZnUVYI/X1Z5xycQbw2awH5IpXKgf1kZlyspFRPbMJ1kYxGxcTMJBrgLYG8zH8JOu9 -9SK3ovgp7RAyo0Zac1BDrUla+xR5e/9QXMfpiWrBXIG6nvE80sC6MmZhd8B4EDYwWkIaWlUY8Kvg -LLkirub0ZJxCWtTKx2xq6bWO590HN0YIV9M2ASGgxF2Lz9PrY0oxKjAj6lodEdZvTsiRIC9on87H -TvSeSAJdujLacSiqxpVARqAB7cyuP3s5xCzI84iWUrMxg7ngm6BUZAwD0qhKiIioWY2+KVJpaJZa -E56mVKQ1jIa0ltO+Odp72vqg+l823qHOgvzogjSUSgjwmOAM4WpgqvdkRIkAtQ1dlACczj9DLslY -xFTAg9EgrjvTZhEposIXh+c6jya1vWdzRnxZ1owryYB6W3ACjQq4T1hFq45reF1pi4CcBdhXcPMp -WSe9PaTpPhnVcJBJs1wSmKVXg/rZHNOwkZCG3ZbWMRvTAJMSelrTthJ5aXWs80jaIKSlTVIWZBAR -U0YRHjIAzmQXkP+8KJV9WJAAbixkBAzUutVJQlHCKKZlPcO/QFYeIayC6wqjNWkWULLLIlF6QSoD -sUnNeKTilPsWwGqpGLKRG+KGzlNxE6IobiVWJ5201jzA3MIi4BcLAz/lXUNgu/Ws4L7zprDAo+WX -yM0FLxvwA0YLWENGzq0YgM9Zwucm4XN5OY+YFwH4EdTQb6Zs9PZdgNd5j4AOWdk9USOlJgo0S8gi -wG3pQR01A37luj+WdQ89zHm4xLSL1Zv1sJAZ+NHFxUMuLtangxsWy8Rp14PZNNAEGXefAvAEGtDh -nXEjozFh4iLS1j5RQIsrDmow1wAPo2ftw48/6V27gAj4JtzgmpR2iKg578AD4LMkCupMBj6P5rr9 -LOe99Qpu9roD+F9ugY3LwHVySSqHa1zSKqZBgKPCzVUB1xrML4F9FsXCnEciSNkkDLhRuO1t77nx -W5X/XHAOPtpZuDuR9Q4+jDuZPduzlBtr44KmwHy/ION6MJMDPCtlk3IT5gfvIqbn1oj93tu4iY+B -7GJ62i2XZzx9/QmDhASZFSLIPKhIWeSgPoEc1xJLt9XEYt8srSJtElGyDiE9qCTeiCu57ZD+9nBk -XkENzIsRW0pugx/E0sb73pP+KXxxxiRlAu5RkjEArLXLRXCzUwjUv82pnhPrY4jTwTlaTdYsF2bM -g0MJoG0TGiEyrZfRIa0AAZ9Xiqlw19be1f3BP9F1JDJLLIa0QvTGOPrc5vveMxmziJI0iQhxLbFs -a6zhm+VnNb+NTKCArma3ZC1iStIAao1agMgCTRFTY69FlG2H4nOth+OqrtOQHtZbAkIOaMO1id5T -m2PoyzmrTJR3KAaAthamHTxC2sHqTRhZHXkXmBMLGxkAOg7SCfEZ+9CDsIpctTXSdTg4iTibUNPq -ID2zFTKwu/OAy/iVlPIQ0IV5k5i2CzQAqC9dETifAU6B9SiNGlitcFP0DMidGNClWYBBWfud52n7 -w8m0a/BR1tN/Nwk0QQRo9LhZgM26Bx8CfBSlzBJGytQnzAPNkPcKWWk3szftYnTmF1jo3IKQu7vU -/xDgqQJwF6ADpCCm+wBfGri3uyDvz7mFjIxdzCwAvrS7qLibcfYPQzDvAbw6ZZZz01YhAaxzZwz4 -AfigPO2USzPgOGmwX8wiZSYsfaKkY/jR+pywd3OWUQVZuZidBbFgF8Thx1XpcG5BwEw4AA+x98kS -tp/UEcCxw4CTpZ1idt4jZO3CXM3dJ0855KKIiVgXnOu9mDGLuTnHnedZu0IR0bPbonrAtYEGS9r5 -hMLSwM8FUB/zHokwZf55HrLcf5V29PennDJBDHBWCKxJdnHwyS58rm1RIo2BeQrreb0Ac0sgM7Mj -D+Yw7771vOC5+z7n6b8F84CYToAIzDPr8s6+/ohByNxS8nujhlt3IsafJgKGJ8qI9eF40ikRhQy0 -hk0lucyvlfF85qFbi5McoHf7pGmHmJMCmAo5gH7S8RGQeWgwpFVwgmphd9YmF2btUj6o65S0XcIG -PvXBHDKoopRH51hNMWO/bHOMUxudA3EN5iZjlQvzYK5AzPHScCPv943fBpWYkoSF1b36Bl8EqQf4 -IPcEWYeEm7X3SVM2uSisFWDXRrHntyZxF7em6ZUrz7GnY7NMoHnozTEVsTJnhc/d8XAZE6d35V3L -t8svWv4E6Vm9EaBjVl61frP9vuNYTIkrzYE1L1gExCTwc2Os7eTay+7jYRWzeeU14mh4nFSSM4lY -u4ALfPCAeuuQAD3OatmYRp4Oq4gVQIuyt6ZptTm7iPEB8HEQA8K8W8QE/Jy4qUScXRntOhyZYzVG -rWK++znq+NZLVi2kuX13B/hQsMr5ObOUkTRwu+2/1H3tfHjj94lZfFXCKMCsvSdciKlEuLhhQJaC -dQaI1ZSVh0qYme3Lsz0n/WpSTcZ26/8k6a2/27rSN94OdDrTdkpJ2rQNN2mY43AcxzEzsy3LYmYm -M8V2zMzMYpZlZluymAxp53vv33H36f1BK2vZsnS0z/s+z+fZoDTYVaXlNgUH49PWtPugDAHYCLAO -3wcyv1vJQrjmJQznXF2DSy4g+LQspN/IwvtNTOzxMov2xzqH++c6m+UxENIPQA96NBIBeAj9OhHn -2FxcDWmxVy9gHwGN/WNZUhswMvEOFSIcYlufQkx3S4UEj0LMhmrrZKUM+FZJheevmiyttMp4KJdO -xN+RcjCmPnKIS1rMPDTyGYdmFt6joecdyEnJfjMTe7jMJPiMQoFHX9liUTDybRoeDeiuxGsCWQny -Hj0T5VSzCgFb0gN6NtarENIs05win0bC9+tLKn264tLjBXHpyQqXc7wsLAX5n+BUk8Fnqah3qsqr -HCoRzW8sLj9cKm08XK7s8wNWgv5z+uNl4M8mAXtjHBFVh7nzX8ADWJ+pZtClL6v36stqAwt81hG4 -38dGkeCTiUuD5rTULTnPZB8KQ/blHye3pPUdq9Ml9G0pH+MAHAFYj+jTcWluDZdiUzLh+taCG24N -HebS0vOdWmahG1qXVvNIXnV5tWVOQtsYp8Qcm0oqT5ZF5ccrHKbXyMa5lHyCU8Epss5RU51yDmJH -RoUpa7Ou7Q5R8j4tgvxjKCkHnF3mU/FJjnlS/FJX2rWDGWzc5hQycogZdto/V13j0RYXOzUspF3B -hNkVjJy9aWrS+gDy2e44IVzTBQsaZUWd3u3HJpyYRFAt0wKgTl1qYurORO5jTf3bb5dbky55pJQs -6xwpaasH/sw3z0EHVFyiU0ZKdoI8bJmAP1vpTLq62ZXzwDQIf9dCCT5trodHfjJUdQPGZ/sMTKwH -ZDS7lJJ6MF/4wq3Axrm11AJja8a1IzW14I81vshnoqOheVKPll6wO4UM2RlDvvUqOXiLmgiTV6de -2O7kot3K5mmPFuQAKSMf8sCDKXqyoibhgqIs4oJ1BB21PkWInixO/t09Uwp0pWHcb6rqtcsZBZCv -OOTklI0J+Jv9GUKSD2iGdY6LsMv4BK+2bsirr2x2aUsqnZB3aNgY2ywtxT7LR9qkJbz1XsCSCj75 -ZKG49sRcXPvnmqgC9AnVayRk2FWItyB7FthkXOzGKD4O/F32sbmqL7BQPeg3VXYFFkrrIC8BubrQ -oSgMdqvwCR45D+ueF5F9yirAbGWNx8uiCg9ge6dWxPYBtvKAf51aLnltnBy32EUOPlSUl0FrLj6Q -9YD/4J1qNv4YYpsVvsAD8olFSSvcAF5qU/IZFgULYZGRk1xaNh70KB/4kxjq0xNwDW4VB6try717 -MAP6xlDZ5gM8BXoM5AxSbsDMAVmCiXHryNl+U3HF9iwfuz7GSgc9UgmyyceAubjKby6uOFoWlYAe -ER6bBXzLLDZ1mBd6wz1bUu4wVDTvAz9168pqDs1lLYGFyi6I3/5YoWH9OmreUnfB8+UedIJNU9O7 -KS3jrs8Uky3KYuHRYnnrkZkvtEmpebtTuEivmpJlnyXEuDXUvCPAvQHAWodgzH3A110qHs4Kcvnu -NC0RePiHkxVR6eEKmwY+K/Jgno90KgR4N+Azu5qevzYOf6b7mH3VMkHJPV4srrErhES7QkT9S+9U -IPfMs+EeBRcD7ln0GCfqe998CdcqZRfuzZLj7HJaBsgsOQ4ZI9slZxc6pHy0qr3oWQ/53dfrnfBo -aA7drYHyEjl9X4YJ3xkverncnnXXNkGIP9TwKG41F28bpscfy0qFlilG/nJv0SOPFGQrOQPmU9Dy -HDOkOGlD5nVR9t1/zBQnPz1ekHw4UFEynGp6gV8jYBwbxGKfvvDdwUz2g4PZwuc7/Rm/HytwCYFF -StGeDBXqVgiYAdDPHiUHBTwB7tfwyBYFPmFzCPnGPSfiBYBm7s/ho0EtZrhkEqZzXkKzT7JhzilW -gWOOUyjtzH9ES7n5/cG4kOvT1/ZbpALyci8u2AbGJGAQAe4RVUJzHE7QY+sDxBDnPA== - - - D+fRCbh2uYBkV4oYTiUXcwytRWgACwOuXh4rimiAPz7jnuaSTkyl9W41E+U3sPEeaA/IX/su2JSA -kc9c6sOE9rBDTylqUm8cm6sH3PoPQw5NVbNNJQK5urjiZFFcfgL4zKeh59vnqcluGafIo+Lh/UZK -/pGJQwuADOQGdeYzVbS6wevvyrDhGxPYt5ZJVsaxtrjEraZk+3Qs3MlCWVPAIBa5QIbbkdMyd+XU -jK0ZYtzaKDb0QM5GLQ7jQlwqMce3UNHpX6wG2i4pceq5ZIeGUWidIycu9yKf7Y1zciHN9JlKqlza -smrfgkDsW5CU+01C4dEClw50grA6xk5bG6UnHpqEIvAQ+EDu8i9WdAaWJBU+aI8A8P5DE5/j14Ks -r63t3ZMR87dmURFefUWbx9iodOo+DIH3FvtM2ESnkpji1zFRwAu5XnD9rgWRyG0qrvKaKtv9C2WN -HgMDDa4P5zPyJX+s8EUBkKF9aiH7xFzeCjy50g+80qFiwV0aJuBCRtGhmcv6tCqA/EwIrbV6FiRl -NpkAZ1fyMLvzpKTlofz71hFsiGuekQ3qCO0C2cmpELNcIM84gUd7FDzMwSwlaW+cGA6YJ+FgmhLv -Bt6xOYx6tdGNfGyfZWY55PTMgxlasmOemWudYWasDhLe2SZpKX8aeMw/l7hsiKMDgAFBjqIFtBIB -yC7FtjlmgWWGlmqbo6ZYx7BvfYBFHbP0DK+CT/kEsTvw+p0xxKvF1uxrG20ZVyyDhU+8s4C1tXw6 -tDcBsCPzSFMiPtIWi5xzlDTnHDTvjE90ywvfHOuwSbuTWQ9AZnru15Z+8CqLBW4Fn+hSAZ4C9+dk -mUX6tEzFnJgZRGiuyqcqEXlVH7o8yoZhj6a20yFnFe6MFjxa7YHdN3cS32gb0W99BkmZXc2jboEa -s89/7HEp6vt9upIyl5aJ2J9DvHHKMWEuGSEmoGNjXVpqjkMOuE1VVu5S8PHQ2qxlmpZiAXq2MZb1 -YPFj6p1POj7nCHAJtNfBranpdOpqujwQn+krm1w6sXh/khK/M4QNARoYHwDZ36EUs+ya8mqXrqIB -1GuHC2Qgj4GJ8mipuSeAg44XaEUeLSrKMpt606sgZx0aS6rd0NioKip9BijXsEkni0zc8QId6VEg -I7eH0n8/mMbHgXtD9mjZaA/4fP7F8jYvYLUDkOfcJiHPpmGhlkbQL4Eusw/B37tBFrcpBVTfghDU -Ko8GMhLp2MDCukBe258HOqNmYlz6ugnfsuSD08ghunTQ/qsS4FmldT4TxJ2Ax8C9dWsEdI+uotGi -Egu25ylJx4ulDUfQY6mk7hA8fH/tvSOk+TTk/ENTeatFKWLuSSUcj6520G8GeX1FVHlo5tD9Rg7V -rWdirAp0lN/E4/mXBcXbSlzs8XJZ68lG1WRguaTBZ+RBXEg+0heXAY9tPjJLSg8XJBXQfPPxMo/j -N1ORTi02CXAJJmBmkwNLfKF/SVzmVHKQHrWQ6VILWaDeyNAeNI+GBtuZRr23zJESXNC+JwUPtzNO -S7DPcoBeg5oEfnNiIGUe6jDx22OJt1e7437d6sm66Ya4Q0bPdEI6phTRoJzi1nAw0PzGiZGGOtTT -Ck8AR4J6KLFD+2BmyYlehZixO8nM2p2hpED7z7aGMm/vDOcEueeoeZ9M4mK3lJTklpESnVLA/FI2 -wjmVcssyFHPhYCT3vhfk+ICegfCpyRkeGSnNo2AUuWcri91zxXS7gpC83Bt32ToJA71BSD8yMLBH -kEYq6TkOBQcHaqvtcFFcGTCRcz0aZJhbhYrwqak5h3oB83BBXBYANQsyqcgp5RQejDHSnVM8hGOa -ne/TEtICJlKOU0XPd2nEHEi7wPjg7XN8lEtWwgfMgXdK0eH2mcJXPsCTPj0LA62/upVMmFNKTvap -eQSIxXzAS9xafJIL+JtXR0x3aclZPmht2ljda9OUVTg0lY0O9cdJn66yGWQq/LGWhQpoaAVOGSXD -B+rNpS8W+wxl9QHg9b6Fv+rp48mSQHRiYqADOkKaV4uJPTGT8j4tkPO8WnTCgQIb71AIWAGjCGgp -NN8HrR1yKD41Jc+jJKX7dSwMyAuZe3OFb9wGgci9UNpg13OJVr2A5QQ+4FnkcZ16dIxfT8nzGRhw -vxHovaGsLmAWlbq1jEKPhprr05LSnXJ8ws500evtWWyEZ0Fc6V1i03zgOf6FD1MeY5MacGI/YKvK -wGJJ3dFiRfcRqFVoLs9vFoo9JgbyZFlYDMaBAu5B6aeVslZoPuNkmcf+tMJmgrqlLw9h3oJaSfbq -JWVWPYvgNrIBA4G8oReB3C+pCSzyRYdLbIZ7AZ2+Npdx73i5vONopawNsFz1CfCqT8uVA4D1Qdbi -MQMLAv4hdC1mcRm058CtJ+fYFCBPGvmsk2UxyCN8AeAtukNFzYTmoY8A3x0ZgUYAHXJosHE70/BX -bhWtCLrWPSklY6kX9cQxw8d+Aj14qKXkupWwN9bp9NvrA9FXLWMFwe55YqZfy8auDhQCvyWmBXQS -IXiIrFJa+t4sLtI6iwh2KIgJAQPQfLNQYtEQ0paGYA890lKhBzCxW8XF7Y3Dnplb485u9qff88rJ -eYd6DtEyAQtyziPfH0F79Aw82v5w8jXLcNpj7zw+41DLIXhU5HTLeAG0x+uObR4dYZljIrYHiAku -Objf44XhXgUTcwRlXA0D4ZRRs6E1SZeKhQb3qcamZAB2phV8WqQW/bFIKfxkZuI+LbJIfhMp16FC -RTvkxCSviouxTXNgjklekX2GnOTVwd8fGYmATTgkH7TvYYkv2JWSk6zTfJRPVdvp0Yg4lglclHUM -Hx9QcynHRi7DrSJnWmdgL/cn8x8HwDX7NCKuW8nD+XRMtEdNyvbqyblePbXg0xKX+WlJWGIHmcWp -loiAVgJ/kkigOe0T8Dg2CSWHBjAOCyD/6uiFgMeKjpc4zKPV8h6fubQRmp89XuDz/1zhsP5YZhL/ -WGbgnYrCt/uz6bf2Z/OegPFPsciwCTYpG+PXVLceGStbDnUigV3GzDuQcRB7s7TMvRn4O6dWyNtX -i9m7IFu6DNVdXsB3gTVhpctYGA69hlfHxgMmIvuhnGrikJ0qSppHy8IeLQpLP63yRIElKsplJGb4 -F2ko7xIxB9Rgpd/UIPOaG5ReoP2BpeLa47WKgT82KkaPV4WVfjOX6TGySf7/vx94fmi/sFlc8b+1 -kmavnpjlM1ALD80EkGUI6eujiNfWeUKcS0OHb8xhwtzQvoelip7AUmW/b1FU6jNzGB4TrchtxGY6 -9ETE8XJps39BJAmA8QHe0eZf5PH2ZrKe+EDuBFmqzAt02GcUCUFfQHUpAr1RebTIYx8ahRzwmZAg -R6F8ekbRH+C+gBxf5tNzCFAdHoLXOV7iiz+tSur8Zj7fpkRH7k8UPQfMzw3oRXxQfylOOSHFI2dg -/KrimmNdxccTg6QU5Gb4xmBRkHWGnAHtTwf5FOVWgqwvF3FcagEXsClgP0b+AcgAe1J02N4EIcol -q222zUmY9hku7GCMmuKcJKZ4FKCmQC7YnUK/tU8jXx/p8ZmfQC24lFykSyrm+9Ql1X5dSUUA8Bq0 -L9sNesMvxUQfmYm5Y62RN4e4EfcCcgHn2CTg+bQsjFvLRO4BXXPMUzN9ajA2RlExNGdj6i96cgz0 -5P9WmdSAHh1vk6Lfu/5aQyYke9TYuICWXmRXEbM7ua8udNPfXnLNc2ifVgQVf64IJMDPmRYlG2lR -UXIWJ5CvLAo21qYHtSWl5/iVJaWHytquY11plUNOSNydgD/bHs6+ZZ2Gv/Rq+ZTdaXbu/hQrIwAY -49NiSeOJmY7y64EO6+mFXh2j0AXN9+olxQ4tm2CVUrNAlq8+Mgp5AYgtDQKQownxNg0mxgdq5mSF -jj9a5QmcoFZcurIPR8sVvccrPL5TQ8706BlIj45FOlqgU/6fVRYLMCViaSzn1toYB3YAxv1AJgQ+ -UlLiUJSV2+UfOpyqD73AZ8oONHzyuoxdsD5LS/KZqvtdgI2cC0KRxyQodetLar3Gkir/Qjmk/7V+ -IzHdKsVFubUc+vFKWbtnkUFwmPCpDh0+0a7CxrjNuGTvArQ/rGbieL2892ipuOYI1O3Jelnv4RpP -fAiu3QWyvwOaEwX3y2+ko50KRGhATwF9wqEeGmhFxyYW6c9lNuv/WeXyPy1yOVDNOpTExJ3Zohde -Db0AWkMBeYPlMwo4HmNpQ2CprD2wVNHtANftNXFpLj0H71sQiUEtc52AB30qMf8I+gzg+VYVB21X -c9BAf3ifgKd4QBaygRx2bCguPzYVVx6bRcWfzDzOoYmFg/YF+4HGezVVHw+XSpuOVoTAH/kcD/gZ -8CHysZnLgOa4XSoOeA8O9nihtPFoobLryFBSdawrKfdrhGxoHhTav+TVUGAeFSnTKcXH+JXFYpeq -pu1AJqbblGKmdY6HdCs52CMw5n4Ti2xT05CrQ8B7hskZn7SVTQEtG2+ZxkftzxDjQRYDbM0mQJp4 -vMjEHgIvBv5evycXs3bn+Ii/5kJBhjg0kLKdMmSoZRrxeqkr+dJWe96zY5VYfGjksaygN3xaEf/I -VN5yDDTxWF/RFNAJ2W5wnU4lOQPkEYpPTwa+QCsEr/3RqantOTQLhSA74wAfFWwMwIMU1alX1LVZ -d30aLsuth/SbhXFpBUyrgotxatmYfSU1a1/DLNzVMPK2ZyhJJ2BsT0AeDehYaL+eSzte5FCh+t+d -IkZtT5NiQR5JdEjp6YdGoG8GcQlg+Gy3go3ya0sqoLU1n6myI7BY1gRyowB4OysA9GZ9DBuz3FMY -dGySlPsWWPhPqyzq8TKT/Ae0Nr3CZUPr0B4DjwEyfNWhWSQBHFkFtHo4sFw95ofOjACP9BhIWRY5 -Mc0J7pPLKOLvzNIyvKqqRre2btilr2iEcrBTK+a5wXV5FgRCL8jBfpME5KySEpe+utdjqp9zG0ur -PQtCgcfMY9oMNJhlHvC4loXzLwI/lVGyN6eYGQ51ZaPPWDsEzb0dr1UOH6+UNB6vFn/0LzDxfyyL -q/2ADV2Gkmq7vlHuXa4adplK6rblPNy+iov2GxmIkwVS7omJAt+bwYZ9Apnof6Cv/jRzaMdGOtyl -pmTagO7sjKNC9ifR7w4NVNjxAo8F7hfWD/KKx/hR4TFJKh16PsMJvOAYmhuH9r0sCsXQfG4AsKxH -JaA5ZWyYS8Uucmn5ZK+BSwTZDOXX0GHAU3Oh8xdemYjqlLLhdhkNsC0bC+359+nZ+ADwEChLg55k -+Bd4zOMVgfhkVVThXxQIXCAbuzWsIi/IGidaIQvcqwqvns8EPZfuA/p2ZCyucAP92xjFvF7tLXyw -PVz4FPBznk8tZNjkbOzuFDXJPl9RbJ8rZrqVbJAv6YUWkAHWx/MfO+YpaYcKEffTgrh4qS/7yd4E -JcetlvAPDSL+MejRT4sc5vEiDfm/NQbRqabnrY/REyxznHxo/d2vZuR7FASQz3HJHg== - - - JWBrKTnNK6NmHgOOPjLx6B4VPQdaZwrowfUp+KRDXVl1wFDWcLQgqTpZZNPtSkw0tEcTcA8Kqi+X -TgI8hkdzaUDehs4nzFFStwdRr3ZG0SE+PS7VpUJHQuuQh8aafq+usgXar2VVUDM8gPGPwDh59RwS -tL4N7jHsrwyrKS3zGukIaO5zb4aSZgPX5teTMpxqbLRdS0qDzkf4tSLOkaG0GnBtpQ/a47QoLj8E -9/NklQt+ziHa5YwcfVfRC2hO/v9A9gwsskFuoRb4TUA7QM19WuWL/rfBZv+5xmIcGhiYQyObcrIi -rj1cE384XpPUHy5L6kCNlJysFjd8Wpc0Hq7wxZ4FLm1/npwI/LjMZyyrd+gFdLu2pNRvruwF+lgF -MdARYHKPTsQOGCUlhyB3ufXF5U5jeYPLUDfuNtaO+szFdW6QYaF+9C8yqctj2fe2JwS4A3mnzq5r -UtoMxdWAqz6A1ys/WgWaC7jsyCzgQ+dXPEZJmU3TovQYK1o9gEGAP1VAWd6tp+YfSJFhNikqyq2m -5v6xJCr+v1VJ7R9mPhgLLtVrEJWB/N0K/KjhyMghH5tohT4DJdcD5WMzl324KKm16ehwmx4wz3LV -AOhP0JtCIcSGR0BbAiYGxjZLTrBOkCLtc7Q0F2BeaP++V0lKts/gwg6miVFeBRtuHafE7g3jgi2j -+HcnJj4LMCzbD3oE5Da0U07LdCpomaBmkJ+WeGxo3sih5mLtKh50zokcUAopARUX71OzENDzrOB1 -7VJKmkvFhO/PU1M2xqgxm8PkqP0pXLhXSUiyzZOSDmTk1N0pUrR1WoRb6ce9Xx8qen4A9McJtNwm -pWSe6ITcE42Y79cxkPKG2F+3R0lZdoWQ7pAJsCc6ifh/y5KaP5Y5oFfoKGjfHOihWOs0FdqHmeRV -kFM+mVjE/xfo6f/Aw/vXmTBSAuiXzEMDHe5VUTI8CmL6wTQ2yjXHzD3S1/T4DTWAKYCvakEGlhNT -3EpCckBPSPHpsEluNaPQpxcJAsALoDVRt5yUaWiNPW9oi/nVoSh4BfJvVADK4RoBw6MuFntBXnBr -eORDk4ALGKwEsDoW9H9+QE9M82upINvzCF4dHQbxrkcvFoGsCzyZnGdXIUL3Zch3h3oG4hB4FrQW -BrwG7tUzUSBHVkO6e7LOFUDjbAeesz1ODN8fxYf+v6vi6sO/9oTxaX5TRXtgWfIhsEjHnqyQ8v8A -j0MdIflQS844BprtX2bTPq0KJCerpW2AgzrAo+0IaPrhMsg10DyOiQY/BHnJAbIa8IAUi6K01LtQ -AjyHjgW8JjheAaxtFLADJhrSq6PBbQpGnsMIvFbfrHcZG+Z95rImJ/i5z8hEe42UPLcWHe9WC9hO -zcdJu762fwdwjA/01uFyWUdgSVTqVNMKvEYO0WfmMaB9OX5DRbNHLREfL5bWH5pK611KMddr4FDA -eyH9Wgo8oAOeAjj0eIGGPjFxKICPKk9Wa6aPNitGjteKG08WuWzwO7hHS8lyachpPj0lx6Ml5wDN -ytqXcfFefWnDEdAUwHBcnwFol4mFPzRScq1TmJCN3qIH20OoF5uD+JD1LvQzxwwlwTFDiLKD31kn -sSFbA0WPNnvzbq53Zl4NqPCJATU1x6tk5PlBfnDKiPEuGTnRq6RlBdRMuGOGkWGf56NdKiHdqxEx -XVI2zDFLS7VMQuc+SAmOOXKCbQYfYZ3CvdufxLzdn2akbI6SIrdH0S+dUmyEXYqLdIC6dshJiXtT -2FB1S+Kvxo6Mqztj4O/lArxLwYbOI+A9cnqOXYoOtc4UvvSqiWkH8+QkywQ17kgpIP0BsugR0Gev -AuQJJS3bNoUPPxhHv7FNoYN9KnLaJzML5FMO69jMY7kVLPjBNDnOLaOmnQC296uomXtjBU/WenKu -OydpKX6FkAZ0mwuy71/+9KdZIPLISan26aKXrvn8J3+AzH5iLqkLGP/yHQKoy/d7I9ho8BlT/7fC -oB6b6Ui/jpLtkuFjrVP4CL9eyHVC+8RBNjkETOsFeuzVszFeHSnDKoW/dsoI8X4lPRfqHZuGR9yZ -oiU5FIR4nw4PMg8x6ZORhTnUMAp8Klo2YAnA3lw6dBYVmpc+Whbwj6H1PTUbmm9IDYDP+idgAmjf -jV8tYgI2rLUrgY/qmZijBQbuGNz/P8wMjFdBTLJMo0LsKnTEsZlJOIbWy8B1HppKqgOgB47MJbWH -i3yuSw9lFmreAbg/FmgPrRFkDTAuARPkQ4Lio2W+0Gek5Pv1xHSfjpztBu/lB+zvBQzh1AvYHlN5 -M/CSD4eLLPzRIpPw5wqHaVfRcg4AS+9KWQXr4+Rol6q82qUtLtuboWVsDKKe+o1sQgDwM5S77POE -hH2QSb1aLsEuZRdujjGSjgAnHgOOCWhYKNs0PsKjxEb7lITEQyU9D9pjerhYUu9bLKmD5iWPl8o6 -j8CY+zVcnEfFxdhl5OSd0cIn64NFT9YGEEHWKfR7aH3ZpRcw/CYh969zKNB5XDW03wP73jqBCzE2 -wK9vdGCCrBPEyM1+VJBtAhtqm2Kkbg/hQla78m8s1Kf+stmZc902hXsPnVm3ygXElR7kM/sUPtKr -pGQ4QV075ugZe6OE99B5ResYLW6rD//KNktP2xklhK13oh5ax4lh0NzsAaj/rb6iB4utedeW2ovu -bPejnrpmCTEeJSFha6zo2cZQUZBtjhjjkOGiXXJigmWCGLEzTA43Nuf9bhklRfvl7EKvnJjonkMG -O6ZhTw/GC584JpGvfXJCvEdKSd0bx79f7UQ+cM6w8rb68+5u9WZec05jwnxyaqZzFhvmmsdFOWeJ -8XsjhFD3LBfmnuPCfHIu0jHNznHMsPN2R0jg/dAvtgYK7u0Mwx7b5tDv7QpcrEsFzV1Rs4CeI/0a -Uip0JuYEOoujFdCh9SCXjJ5/pBMwvCpW0ZGBgYT8GvIo1zwxzjlHigefKc4BrsGj4iBdMhHNpZRw -LLP0VJeCVeRRMAvsM/hICzT3ICXGbQwhn20NY19bQC6xz1OSbNPkWL+MkfOnnoX+BB5ekGt2hxFB -e8OYV645WtaxSVR8DDJkQMMhuObpua5ZUoJ7lhizP4J9vT0AtG+KHOuYoSbbpzh5B5PcAo+cU+SS -svL3xojvd0fQrxxzuMhDAxPlmqemehQsWADwpwfUk1vPo9kBE9iUHLRbzSdZZWTg9cR4mxQXC33P -gQvcd2jPuVdNzf5jgYE61rHR4DpI0FqYR0PNOpDhYjYmkG8cChrqz2Vx7YmJTfJqydmBBSbWa6Ij -HCpK+j4Ym/UBwpulFuzj1Q7iq7VO2ntlWd7lzX740yOg90cgyziBfrqkqFCPAh+3P0WJMw+SQ5YG -sK8d09QMUA/I/VHi+4CWg/3fEp9/rAfvP8/IhNjILhcSXYoSsV0q4az2MKJsswLczjg3f3ecGg8y -cPT+BOL5/jjs8cFc3mPrDCIY+vneGCf3UF9SDngqHPB3PmCNeKB/Iaut6AfWYfzb7T7k47VOxL3d -AWLoVi89am+YnbTZQw011sGummryLu/049/sDJHDVweoUbKKjF92h/DvXFJG5v4kIRz0edhmHyJo -ux/zyjJMDtsfIoXujRMjDS35d1SVORcPgNb7FbQsqM82ehEPof5YbkPcWWsvuOGaKXrjmi98Y53G -Re9NChDWaQEC3KtC6xQhfL0XHbTRg322M4B95ZPSsw6V7CILdJZ+ghxrm6TEg35+dzBa9HS3P+fm -Vk/urQ3gA7tD8IcbI/goRXXCjxtdOQ+OVSy0YxYfswk9pz/r+t5Q3j3wnCd2oNXOWU6+V8FFA01I -c86KcAfTIuzuJDN9oaXwlqE+9/JSe+FNc1vB9e0R5PNDFaPwCORw0Ofv7bPkOL+GAfNr2WiHlJkT -APkWmlM6MgjYPjWz8HiRzwNsS3WC+rdJaanWWWzk+mD+g70R4NFjlNjtQVLUWjfmxd4INck5x0MB -DQm3jBPCLGPE8N1B1PPtPsTjxba831c6C+9udGCfOseoif9nAlkbvLZ1hhxrGceG7A1D50ixIW4p -p8gK/natF/5UXpFyfvFjwU1LP+71Wkfh7dWOgpur7bC7u/2oV+aPsJtLrdgg0Cf528OcdH0D9oG2 -FnZtuR31CLAnzCWjQWfnU13A/22TtKTNEcL7g1lob5VYGDDw2W7ADC7Qw/vjyJdWwALWCcAavYgn -WwPIl/ZZCuhBZqZbyi3yQGucf51NQL7Q1Gdc0NdlnLdPYKMgjXcB33drGEBHhFyXQkg5mGfnbw7g -g021hb8ZanIuSMWpZ4fJ0V8u1GVcsAPvsIwQY1xSfPz/rZIL/RpsjA0w+/ow6pm6Mf2cuTnr6t4Q -8rllHPceOtvlN/BpdhUHYZ1kpFhBfRxMUhOh7xFZ7kQ8XGiC31jpQD5Y7aNEuOUCsk9JyTqYQoU4 -Zbg4v5ac6Yb23PYjn661o57sDOCjreOYEJeUmQe0P902TUsGtf/WMoR+sTeIfLLRXXTPWJ/7m7o8 -+7f1TnrYWgc7cqkZ/2S1BftkrRX7ZLkReW+zi/h6qRl5b6cX92p/kBS2D3KFcxb4yzg9aX+EFrs7 -SHi73g2/v9CeeW1SEvX9JD/he2Njwd2NbsTLA9CTwA8i1nvxr9Z7cM+XWrKvbHWlXDLWR/y00Z3/ -yjrFK9ocZqU55nhF1mlGxkYfPhhiws2u/LuOMdRb5zj63VJT6sWNPtSLjX7i+71hcox1jBS13Zt/ -Z38Q9sg6WhhkHUc8M3UUPZwSxX+32QV/daLmk6FaWu3OvrHZl3d3fxT5en8M9coC+to6To46mCDG -bA8gnjlnBBjnXBl3b1IIX+2mhC63kd8sNqPvm+rzLq+2F962DOHDHFPUlJ1B7BufgoP1/OWhxL8Y -EvoOC2h+CtQaAuS5aL+WiXEqqNl2KchtMh7WDZ6/3Jlz09SQeXGhLveaubHgd3Mj7Pe1dvTjPTBm -+8PEcOc0PeVghBqz04d9vtOHfrbQlHUJ+O3vhuqci1u9+GCfWkizSTmFu9B5Z8BlthnMu60h2IOV -DvjjxZb8G5qa5F9HmSH/1ldnXN7tJbxdacu/sdFTeF9Xm3FRLkg8IxeknDLWFPy23oV9aWohvJrk -5/08xc84pSjNuWAHPmOZJEbuDWFeW4YJ78A1vFjvxb3YHiHFzX9ICwZZMtclp+XsDGGDdyGPm0AH -r3Tm31KWp/6sr8k6v9KJfDxfmnPTUI9465VxwTgysjYHMC/MLQU3Fj5kXzDVZl6wjeEjfApGvrkd -Fnowyih0ySor9yc4eStdaKDN+Jemhpwrc4KY78YoYf9arMu6rK7JediODzu71lvw+mQBl7k/mn1/ -dyj/3vZQAaitjKvy0uhT653Z191SctohyPN2JRe9L2UXbAySwxab4LfXO+D3Vlpzr8uL40/rq9PO -bfUinxibUM+HBInPLWOYeK+GAX1XC8KtJKbY5opebfVl31huSv5VVxt7ensQHqRpyA== - - - vnMwQUn16/i0g2lK0lZP/q3ltpQLqqro0/2U5//6iLr9eS8z+ocuQtzppSZU0EY3/rWhtuCKsSb/ -8moL+r6+tuDqJC/yh0Fi8DdLDbDH1lF6inWMnbk7ykpa7cQ93ehBPNJUpf+sKE07u9QCv9tDevvl -LDfpiq2PHnMwwkhc7SK+XGzFPjbW5l7casv8bfVj2uWd9sJHO92oIOOH7EvWMSHKOVcu3BlhJi+1 -w27qKxNO6UvjfjCUJZ42VCScXm7LuTYhSDirqUa8Xm2nh5obCq5tdBXc2eopuLPeVXBLX593RSZO -PWOozfptexAdvNaJfO2eEZBt46y8/VFq9NYg7g3os6erHfC7RsCSmqq4s6C/E7YHmUkr3ZR3+6Ml -2K1+YeZGLyV0sTnvqq4q8xddVcY5aVnCr+PCyB/3x8mJO6Ce9kZQLzf7kUHbgG1Xu/LumFtyb2hq -E39VVkT/vNiSfPlgCh0R0PIZjjl2wc4I7j30vRbm+vyr651F97cgj+xEPQK9cnO7G/PWMUqO2Qe1 -udOLeb7ZVfTA3Jh1eQv4iaw44cetQXzo/owAuTPFzbUouVgoWzpk2Mg1wJNzoqTvFZKss+rytF9k -ophTutqcKy3Y8NOgPh/YAaftDuJCNGWZ58aoMV/24iK+7MJGfDnASjyz0Ip/tdZLDNHX5f92MEGK -sozhQ+0T0He/FD2cFYV9JytJ+FlbnXlxnBdxGmhyqkvKw+0OUmMso9TYtU74XW1txi+zgsTv5vjJ -30tLMn5uRoR+Mc5OubzSgQm2TbCzdkfI0SsdsFsrTUBzi0F/1qZfMLfm3gSf5yfHKCNva0zC0LcS -Xm8M0RIcsrKyrSF6sroq49IY+f2/hkkRX3+Ev/mGEHzhs6X2rJDtoYyHs/zg/5gaks8751Hv7TMI -wD35j+2TqGCvjJjkV/BwB5O0RKdMQLLJ+OSFJtIzcyPyrvlj1iV9bdr51bb8e84pSqK0Kut++qMz -/zDWpr3yq8SChQ7E2wlR5I8b/RnXtvvSr5rr406vtmZcdc1RUxvxr36yDGLT/IA3t4ZxwSsd+bc0 -NfFn1dXRZ+ZFUd/LS9PO1SJffVuV+fDfW93od6bW3GuTvOivR+gxX44y4r+aE6b9MEoJ+7of8+ar -MXHM9+h35/8uFSbd2wc1bWjCPVJXpZ5TlCaelhYnnprixH47Rgn/94ww7Vw7Ke58S8Hbbzb7aVHj -vKxfAXJ8qa9MPrvVXnBnlhd9ahD3/HNtcfh35hb8W2Up7tVKMy3iYIKbC/TtxWYn7PZyQ87lpfr8 -a+qy9F+UxalnzQ3Yp5Ns2G/6skJIH5+tdqAf7fXTopfbsI/NTYiH5hbY40nB62/0dUmX9gZ4WZtd -9GjTR9SdrT5a+NYA8e1WP/rpeg/83lpXwW1zU/pvioqYs/LShJ9MjdSXxibS8/Ue4pvlVsQ9Q23e -ZWN93lVlZdaFaXHm+WZ02L97KZHfrfdg3m0OkMN01Tnn54tTT49z4r+bK078WVWZ9IvhQ9LF7SH4 -0yFxxNl+WujZg0keAvRgsg68lrI86bSmOv0XoAcXx9hh3/Qxgr8TpN7/YpwXe9kzQ0vf6Cy4t9YO -fK87/95ic+ZN4LU31jsjzslLg39YH0aGW2W0PMskOW4XeJCuDnFjtQXzyPih8PpSM+IRyJf3ZOVp -F0G2fA5x0HJb/sONXlKovqHolqI855yuruDaUhcxdHuUmQJx1nxx7Pdr3cggfT3shv4DYOpB3Fvt -h5zbqvLsi0sfC286Ic9ogT+eEWT+pqwouLXWTY3RlOdfXmolPNPUom/PCNJPa6tyLy40ou/PS7Kv -0KJvf66pAdzbhw8dZceeGSKH/meeF/OdtiLjnPFj3o290aLnLjkuaa46/moL7tnnypr8W1tDpZSF -NmrYTHH2b4Pk2J8HiXGnp1lR3w2RXv13rTv/5Vp/1u3dYUy4R1lafmTgC9ba065Oc15/OSt49425 -IekXc23y2YX6nEvmFsS92fLse5PivFu2aRHBI+Oi7NP48J1u2JONNti91bbCW6amLMDlRW+NbZjU -cXHqDW19/j23nJwOWOT+SmP6+bWW7N+15enXDB/yH7qnhTSXrJi5P87J2hoW5K33Ed6sdsPumD5m -X9FUpJ9Tlsae1pTFnbHPUjOWemD3jQ1Fd/U15JfyUsQNXQ3siqkOft30EfeoT5x9PuPpr38bZ8U+ -sk3w4cYWzJMJwat/TQhe/GuS9+4/o9Swr8y1sOtTFTlXCqJu/wcZdP7ve8P05Alu4ncjlHefz3DC -v1QWx307zgj9eoT69tuV9vwHQtiLr9Fvfv9cJSmMOFKJWbujiGfL7Xm/a6syfplgxX/TiQn5fE6U -8lMfL/Vs9qvf/zEvSL++3ot9N1uSekFRmn5NVZpyrovw9j9guP7ZAv/9b4ttSZe7BYnXOmmRv24N -EMI3eonAW+APQG/cMTZkXJgVRH3Ti336zxbYnb/PCsLPfiRG/9RCjL8Geil6qQX9ZKm56PZGD/rJ -Whfqsa4OdqML+/yLLkTQ54C1b5rbEQ+BzwbvDFGT1nsIIdsD+DfQnJpXio/xyfGxptaUa1Pc2F+3 -B4WwzX5O6lIb9oWuvuD6QmPBrfUOVNBKGyZoQpJ4kRRz44teavRVyzA1TiZ+97WyNOK0tjr14gjl -/Xcq0bsftzpi7qy3JT/dHSfELXTn3LCMU1IsIFsYQJ7UfYBdG6DEftVDCP9iih33nWUQ+cwyhQsb -LY3+jRp35d+rXfQkdR368bQo6cyMKPLUZif86UY36qmxIfeKsS7nylIr/L6hEfbI2Ah/ap+WkPdG -Bbnr3djnhoaMi+bGjMsD9MhvyzMf/XOcH/trPSny5wZs5Nl1oDNakGnUlfkXVRVp58ZY0d9V5778 -ghnz4G+K2twbtcTo3/Dh978AH+en/SFinG2CmuQAuWV3tCDI2Bh+SlHy5mupOPT7hXb401pc/AVh -7vszc9X4yK0hfsFGN/rlTm/u7Y2OzGumxuTrQ9THX5obU2/ZZ+k5i61Fz0w1mVfWumChSx2F4du9 -6NerLTm/rXejgzQfCq5x4h9+XpP/7lf7FA8JvCUFsHCUtiL+Z0NVyrmNLtg9+yw2fGME+boE/vxb -QuzNzw0dsLdbgKP1VdkXF2oyzhtrEs+OM4K/3R8hRdqm+KjdMXb2wbQAtTslxq/24V6CjHpbUZH+ -yxw/6htdefT3y82pl/bnSYmjpbE/6+oJMTv9H9grnfwkXV3+lfmy1HPjgoxLkyLY5R5qwtWlJly6 -e7ZcsNhBC1fWJv2iqo07q69PPW+uL/h9rY34fL4i77fyglf/aYa9BazCylFWZF/QlKWfM33I+U0q -jP6vvjz1l9WWgtur3agnxUVvvmLFPf6vrgoVe6QWc7YG4U+WWgtvrbSiAZ/Bb87wEs+oK/Iud7GS -fnx/++zfBmhRvy92EyK7aJHfNhQ8/scI4e0XfYR3//5Y+OyLYcrzrzcH4c94hS9OcTPufrU3SkhZ -7UY+MjSk/6quSTur/ZB5QV6Wdn6KHf3DPD/ul/UO9OsyeMi39agw4L+0BHVVzhXgW2eXAHOZm3Kv -ysuTfurEPPlykvHy9GJb1r0eZugvO734pENtSaV1kpK8CbwJZJ4X9gnkK+c08s3uSP5DVU3Otblq -9MtxSfbdnSFWzmoX4fVyS+G9rW7Us60+zAsTYLRpfvzpxY+IV7uDtPh5fuR3a22I15t99OTlVswb -6yAm7H8aOvyTkpqzPwJ/YWxKuuSa5SAtIL/pW1D3FttxLyb5GWfHmEk/mGpzf7ONo4Nt87jo2drk -68yEm/9eaKSEycuL7ozQY/87K4w9u9KUdxP089vVLvzbg1FSrHWEEKmuTbtibM59tDcqLFrpZEas -dGKDljsLHy63wwHHI19JK9LvL7Yj37Yy4n9rpcRc3BggR8xIMs6PMuO/neDEfjfGiv+xn5p4cYCd -ekfbhgoujLz/1ctLpz5rRIT85JWzkVboO0EAz5lbMi6Z6mPPGj/EXVxuARljkppCS3/2VfKzS38f -Fme/AxkoXlYc9ZOqNAL0UcT309wXX4/Rn3y73pUTtD9JiOplhP8kK02/6VfzST41B7c3TAjXVCSf -1ddmXp7kx56hhf3292Z48E/aOsSbmZKs2/Z5FnZ/GBu9DTTBMkII2x1CvlFUp176iHnzdTPh3emV -AVz0VEkeyDew27sD1CTbND55bxwestKVf1v7Iem85kPqRcsUq0DXjXmtb4U/3h9jZewMUOPX2vNv -b/Xk3NobKni4C7Ktvh3+YntIQLJOVktWewRp2lrs3TFeytkObOh/NKVZFw5GKJEBlYjpkZfwd4bE -sI0BIWyxg/DK2JR12VCb/LNUmP7jCCP6q3bEm3+a62CPNgYo8bLy/EtLzbSw1Tb6+3Z00D8HSG+/ -Vpal/aKqzgbcn3HW3IR6ZhvjI1zzfPR6F+LR/jAjfWeYlWlqgN1Ql6b/PMNP+XGclXxqlJF6cbEe -936zv7hI10B6raoouK8qybwgkyT8oC5NPrPdBXu4P0lPUTSg3qgbCl/YZ7motX7cG3Mn4tHqMCVx -d5ZdZO7FvpgXp51RSDJ+XvyIfiArSflZVZ52bbOPEa+rR95bbsYGbfeR3m334V5v9eDe7PTT850z -bIJllg2XwJ+dBrnqzZGhtPZgnpq5DTLvwQQx2jqOD7VNEcId05SE/VFGiroe/XK6OPu6dVxAlVVm -X+0jvfy3VBLy7Vp38sUJcch/5aKE0+stmOezwAeFCTe/Wm/HpvpUQqpbzsixzxFi9kZhz1dbE65o -Sl58udicds0rE1AAw2cpqvOvrPVTwjS1ORdn+fHfTbDff9NGfPJtG/n5KUVV/HlDfdZlUxcprhz2 -+tQgK+meY0pAsY3SE4HGJu2PokLXu5PvrLZl3tRWJfy41Jx/f72Pl1KNjjwzXZkbZJmiJm0PoV9p -PmTdWmrNuLvRWxi00pF1S12VeE7bUvisjxV9RlmRc9vchnu51kN4tw2yhXWSXbDUj307XZZ9c4Sf -ehf0YbZ1mpm1N8HMsM7wilbAvVxpy7ux1Vf0GOjTVX1j/h11U/59eVNuyPIgPnWIF3NFWZJ8br2t -4Ol2X1GwdQIR7ZyjwFxSUvL2CPzZIDPk66WWomDnHLtwbwT/bqMH+XiuJP6HeXHS6Tlx0o/jgvCL -670F72Yrs55Jsp9/tdhHQWwNIIL1gH9XmvJvyiQxZ/pQr/7VRwo7parNvLUPepef/uI/zfhY0E8C -hl1Oyl7tSbmxOUCJ2R3k5TsmRUTHjACz1o95tTGIj7BMC1GbfcSonZ6iR4ba9Mvq8qRfgNY996l4 -WNssM2t9mBqpb6E8t89WFh/MiEk7Q/hQK3TWtj/vgX0+/7VlEv58E+iiS1HM2QS519DMDDF8ID1f -+Ih9rKvOvgrNuWx0IYN09bm/L7QhHpl7aBHjVfl3uokxX+srC+9s95LDdgZIoRt9mA== - - - VyvdeY83+nLAeGZcNdSknN3uIcdvDgkKgI9fmxMnX5gXp16Qi1N+2unAvLWNsHMW2rAhqhrYw50B -EV5ah3vWgHj+eXPRo3/Ji2N+Xu9FPjuYZmXbZsBjjlO0N4GPdSvZOI+htNoiL+Gtj9ATjE3op+aP -6EerzZhH5nrEbUs/O2uzl5E8wY/5QV+XfnV7kBIFrvv2vCTq1DQv4UdZWe7lhVbyO1BT6Y4ZEdWr -FfAcSh7ZNl9T45KXiEztRU9nS5JBDSWekUtCv1lpyAVei3iwNyrCL3XhQ5QfUs+tdOfchtapQL08 -2emjx+4P8bImRRlXx9nx1w+GOYSDGQ5yqTf/1h7IzPug9vb68SH2IeTLgwkKqF1C9GoP9L1OmBf2 -OS5aVpl4cZgZ8oW+IfXqXEXW3RF+wmVTY/Zt5wyrSAOCein89anJEliie6aYtdSYe1VfE//TrDDk -2xH2i+9XOrNuHYwh3x6MUZMXe4hhxYiX309VZYda55j5ytrs33vpoT9NiKN/0zWkXTN8TLqyP4p9 -r2rKezokjD63N0XJA/oa1EV69tUk782phbbs6ysD8KCVXvjj3RFM6NYAOQbcl9+XOmjJDmm5eGuM -mWZsLLy32Ap/MC6M/XWQFvrt9ig65EAt5ik6SFmFYTe+13XA3ztkzMK9UVLUxiDu9cYA5vUCyNIT -gtCfemlvzthANp+qLnjTQwr/cbMbF7E/XkzcGS8h7Yzz8uxyRqFTTUMcKKgZezJGjkUmIHbQwn7S -VKfecUxzcftTQoJjhlPoAq/vV1NyLJOFr7eH8p8F9DzeyXJ5j11OzVsfzH3oUVc2eFRl5c55EWl3 -hBq7CfQReFz48hg5uoHy9kdtSdEjW38Z3jLEzzsYZ2a4pPTc9T7Yg9VeRNDmCDcDOruwPU3LWOkq -fLDdU/R4oTHz+lpv2m3HPC7OOklLcyp42K1xdvpKHzt2tV+cparH3Afc/WSzEx201Jj3O+j5c8aW -omeqFvTTOmL4993khLPrXYKs7SF+tqYefntMGHdmhBvxg6oq8epyc07QRjfy1cEEI3Wpl/Re2ZB/ -zTbNR2wP4UJ19XG/9lNffjvGizzTin/xRTv+5ddLrbSksSp80Adk2FdzxTmPnDNMjFdFzXFLqVn7 -47jIhfacG6a2xEvQtXrVrKLtMXLs/rgQYZ0v4632MxPlpennhmnvvx7lRF8Y44b/2IJ99PkQJ/i0 -qqnoQRM17MwoL+qX9S5c1M4AJQ6MNcw1x0PappkFayN5j7an0ZEHUgnjYKaEuT7IyTS3EcJBjn6+ -1pxzxz2JjzoYJUSsdCCD1ntQbzf7iWH7YzzY1jAtRloV+5OmvujB5hAtZnOIEmGb4SMccgl3b4Zb -tDKMe7+vrGy0KOr7LNNcxGpH0X31h/QLsorUc7qG/Lv7E/Q04JOZs+WJFyYE0actEzTYzjAzfbUT -8VRbm3ze0JB1faWfErE2wErbGyshbw0w0wwNRQ/Xe/CxoM+SLJOkeGiNYbEt5/Z8ecKlcVHED1uj -uNCDeR5uZ4qZp29HvrDMiCn70wL05hAh3Nya83CtM//uanfuve1JbLhVyYRtA8jb6MUEW0dxsbZJ -TNhqV+6TGUn02QFG8DejbMAHVSkXnbN8nFNeJtmbKWHsT1VwQK2idkepsSutiLvq2qyb8gbY04Ve -UoSpgxDqN4gkO6PExKVm5H1DA+r2ej8hdG+amLA7SUjYGsfH7Mp5xFZ+yiNh1uPvN/uZdKe6fnBX -VlGyMcOFLQ1gX5q6EE8tUtArWrFwcYiaHHLj9GcV6PAXVnlF/cakkGhuK7pvasm+utyddkXfnHBB -XZdw3a8Xl7k0kgodyEf7s6Qkl6qs0iYtZlinhUjrBK9gq58Zv9ZNDzN2UII/EmN/meegH1p6aqmb -XeKshQbS06VG0ov1NkrYdj8twTIjRO7K+HgdyLyAT5/aJ3hFe8OcnP0xDsw2K8DuTbGz9yYpiRv9 -xODNPmrY+gAv5SM+6r/SkoLfl5tIz3e6aNF7feyMrQFBvrmdEaksh11daiWFb46VEIw9tKj5ivxL -M2V5d03NhIj9YR7GJyvm7g7jwlbbcx8YG1MvGVsK7lonJfi1LuxLTXXy+UF61M/j7JSLs+Kcx4Y6 -DMhM5cQBPvL3mrzwbw11pKwjbVk1tF60O1jwYK234N5yHyp0Z5SU6JGz4I5ZcrK2PvnKcis7fmui -Vmjq5CRIJdnngY7/2EUMOzXMiPpxnJv0u64e8U75kfhamB96qjI3+Du/ooRvnSQCLS98uTkEC1po -z7u7MY6O3JcyUPtSPnZngpe3PcbPgerANiVAABYO2h8oeLrTn/fQUBd7VlUV8bNlhJTimC3nGttY -4YABny530VNtMwLg13zk1ig5emuSGLU1TYqxKNjIfV1V66a0tmFzSoTZGKYnLXWhXq734sItU8wC -6DuQNwaxwSs9iKerXdhQ+6yYqa6G39JX51421xU8WO8kZTilIpZllos0dGDCZ8uSL26NMNOcyrIy -l7qkeHsUH73Wh3iia8q5M1eZcFXblP7cPs+AecHvdsbpWcr6nKtuZXnVGvDUhRZMkLQ4/dxmZ9GL -nUFc6sEsn2KTi2iWKW4+6Pdc2ySnYK2j4MGcOOrbcW7E9+OCyF9VtUk398aLoqDveIPqfn2QnrI/ -WcXbnQL9OsJMNDcV3RqmvP9yVhzx/WJH9o2tQXIEtBd/f5RXuNXDjFvvZCUBNo9Y7IW9VjemP1A1 -pd5ZHsNFLA1T80xd2FyXrLTOqats2oZ6ZLaYszHFzLGp+CyvUVLu1IiF5gFSpLDwzU9D1XkpdlPJ -xw2gJyudQOuH0NEbo8jIzTFC+u4kJdejE/ItMiZS1ZJ7fXuKEL05SIo9mKkS7YxXMNYHhFn6j/gg -gIrnJ+ioX2V88g0Zn3JrhIa50YbI/rGlIPvbYRzsJ3M5O3SjjRNraEQ/WezDvDR2IR5ujtLBfa4Q -7k6WUleHJIXmbnaMqZXy0thAe7rUzAk1N3Dfycso9yWZb//ehUn7QSGh3NlsE6VutvHiNTX0l1Ns -9GWThHTHOlRJWRmSwGdqsQ81H8lv92eqa5b7uDkbgHccMxKS+kPOZWVJ/KnVptyblkFO2kKLKElR -Qr6zUMN8bqzivFn/KEqydJch1puKMzXFpWHjBOo5OYNwY6tRkr3dK8he78E82xtkJFsnxTTLXGOf -Zaacuz/JytHV59+aESf+bG4Spyx21xHNraUZC3WsN6utpTkLDeKEhTpOyFqLIFYLrrWfhr7YhSr8 -SSumvd/rK4Yvd6KeLnUWPLDMEVPtchbTqavuduiqOywyMV1Zn3tX+xH2AOSFOMuMAKFvQN0x1ORe -WmuD3dnuRr7ZHyCl2kY5OTs9khx1Jef5YkNxorW/lmbtL8dvtHPiZCUZ5wEPJjq1QoFNV9W5Pi+h -Lk1wslYnWKnb03z4wbyI7JoXU6yT/KLVXkLwSjP8tnWYEuWaEaC3RoSFDcjEL9vRKd9ry2ihjoHG -asd4MXW1s+iJuSXv8fYwPselqWx2aiobHKrS4r0pTuHuFCPLoZBIDmQ8skvFI26PwYNXe/OfGZty -bix2wu4tdxOjqmGRpxsRyb/KxKTbG53cfMdEVfHeQAl2qYH8ZrONHn4wVEFcbOUVysvyb2z2EiO3 -B4mR1mlWnm2eU3gwjYyeLnn78wgv+DtzO+qFba6qFOqRNRCQ9B8x9xZbaDFrgPHW+ghvl7spIeZm -6vs5QcH1OV7B75oacoi6DvdA+zHnuupD6nV9c9Yjp15Y5lusnfIvVPZsjJLSdJ3I19vSEsGBtn7U -aaxocRo45OUh1Pu5mvQr6qaMKzuTuEi3TiRx6cpqt8eFRatdtNiAsrbNJ//Q7lVW1e+OFYVrP4Zf -MbQnX9uexUU6dVzyYhch2NTBT5iqoD9pp8NPNRKz/1ucHfcFIfzNP+Avn/0t+e6Dz55fufTZxTP/ -/ezbf//zs1//+6/Pnpw/9TdKzOP/TPCzf13rJkQE9AK2zyhgb84yMuZaCA8n6qj3xysJ18fE6It9 -XML5ZgL8h5K81C9x4DXpkW//JoiO+FtlatK/BIkR/2ZEvvoHJenVP0IfXv4s4sZvf69DpJ2rRcf9 -PF2MurPSxY7bGuHCzG2UUHMr+fVqjyBF2yqMnSih3WmnYS41EpBnKvIK/sOJT/gn9l3I3/ODHv+N -H/Hun+LEkH9Twp/+M+3h/b+9u3b1s5eXzn4WfPWXz3Ke3/xbMyr1zEIzN25rqBi1M1HBWRmToNXt -1NcK0Mvaxor0+QpR8AAbf6Edn/d9NwH+4wCVeLMbj7rQic3/6UNB6ncFIUF/v/nLj59d/P7bz0J+ -u/B3dsK7r/pYuZekNZjXwDfoNh2LaFX/fxx99Vtb2fZ3Om1nOjN1d3el3gKluLu7E3d3IcHd3QNx -FyC4JYF4grUzc+d+n/cfeU/uD+cJ5IFzdvZe6yM5+6xFhFikhEJ9Z2WAtDb3ycYEvtSj5rOXRijp -U/TyayJa1R0lB/JczYF+lDPAr1vK4k5TUr4fg0UGHo9+/ugXaOjn37HRX06gwz79OlcPi3XLSAiH -kgJ36liU9Rl03IYQFrYxAf4C6KYI8xS90NiKD1TXEj7OcIjvJmmVT3tRGbe4ueEXSkLeHi/+/vWX -z/dugB5dPAv69uDmL8T47xc7kYkPJpjZgct9kGy3glzhVDLgHiCftyZIaZsT2Dingg7z6ZhYu4KQ -PddV+lLOKbiprYG/0/BRn6pzE0/mf3x7pOTLxyPY6Mjj0PBPx9Hxwb8TEsNPAOM+FnLv+pHUgBcn -oDEhp2tyYk9sDOISHAo21q7kkTYmGHkrA9Dgua78j6tj4AhdOyRgvg8fqutAfJjhld9rA2ee7EQh -nwOxcpaTk3SCmBLzR+TLR0ev/vkb6ApwXDx5AnTvwhlQ7teXv06yi74dznGa/l6hcZ1KRMbCQGaA -ujXu+d48meA28KotMgBLxnHxOxJUnFtFKrbJ6FWbE5S8lWF8obi2KpRXmnCbmhp5ip8T9yc86uuZ -3C+vT3ILoq5OkhMui5npt5cH4Ck/l5l1/7fDHVqYoucDduNRO6HkPA+ce4JUkH2sIDIcFPr6Gejh -1XOgW2fPgB5fvgS6e/kc6I8Tv4Junj4FCnl6D5QTGHCktSL1rIqXdWtXjc9z6EglhhFEoH6YliBp -Z0eMVOOeN8JzTrKL005QslOOlUR+O/L92V0gVm+Bkl4+A+V8fAcKfHgb9PTiaVDUi/ugd49vgk6e -OA4KewzE8tcnRwR5kX/qm6FvVA3lD6fpxdeU1bDH8x20SEk9/UsnHneLWlDyBzgp+UhWcDAo6d0H -0Od790B3z54Cvb9yBfT97i3Q2xsXQedP/gY6CgKBzv12HBj3SdC7G1dBwDoeFVIKb5k6ER+Wh8hx -y+MCmKKDGTvJJ75uRUCutyGhV5ugFWdIGcnH8oI+H4l7/QaUEfAWlPsuABT34jno5Q== - - - taug+8B8XDpzBvTr0aOgu+dO+ecCxMyN+lVRD369LoKGW1XQ+IWh4jf6ZoADZKSiLRkbqR2gJIwL -0M8aYaWncWnxx6oigo9UhXwBQUK/gsKf3ga9un4R9OLqZdC5E3+Azv52DHT/wknQTeDzhDy5cby+ -IuyitrnoiXkaGroyXvrOPIWMXOysemPqQn6a5IEf9ODLL9RW5J+ExcUeKwsNAmV9fAWKefEI9PLq -BdCj8+dATy+cA90/dxZ0/o8/QSeO/fI/nHt1A5j3N9eOSrl5n30qNmXPyKt2adg4n45NBPxH5Y4I -l7o0iA6TN6LeNEMLL8Giwn9FhEf9khHwDvTy0iXQkwvnQYG3b4PCHj4E5v0c6PaZs6Cnl6+ALv75 -J+jYL0dBN4HrJb15CSJnRJ5X1aM+rI5wC7em2gV2eS1vR8KBr4xTUqWNVY8H6SU3+FVpZ9EpYcCc -hByJePYU9PzKRdD7mzdAQXfvgq4D5zt9/DjoNnCNOxcug04e/w307OIlUFVE0K8TtIJ76rrc+6sD -FV99ehL8nzVm9e4CV7AspOYujtOzDL2YEElt1aMxRuWjITL4eV1J9jl4dMTR+LevjjwBrnELiIlv -AP4/vngedAJYy/NAfCe8egYqDws5hkr6fmq2u+K7VVQebppmVwxWIx60EssvsCEFfxDyCo8j0nKP -FUYnHv3y/NWRy2fOgS4Ac3vnwiXQo+u3QREvPh1DpWSebYRW3ZXwMIGmTsh7h4KYb1cxYcuTrJLZ -MX6prKcue6SO9aUG4A90RuwvkPioI5UxUUfSgr6AXt2+DnoDHN+fPQF9eHgXWLffgDm5BIp+8+JI -xMunR7GJ3853wpNvTNILniwM4uN03eivslrUK0Ud6YOiiRbYTa241YSGXKlBoC/BcnN/D3r9EhT4 -9Dno44NHoLsXLoIuAp/zKYCZTy5fBN04fx506tffQTdOngV9vfMIVPk9/s/mipzHunp4yHI/MXZ5 -gJZo6OfmTNSQPvaQITeqy7N+51cUneRDK08hM9KPh71+BXpw9RroHhBnr69eAn299xD08NIN0LUz -50G3gPW6cfEqgB1XQRGvnoNImTHHxRzwA4uEWmCRkfMXh2BB851FL6xifNryFCNP2UeNHa2jvq9B -IK8WxUcfDX71FPTh3i1Q3MtXoOfXrwNz/Dvo9K+/gh5cvAG6cOos6PGVG6CogI+/RL9+c6w6P/6y -qQMZtiMi5qyPoSJWh1Ah8x2IT4Z23NchGvxuDwV5m1dReCY/LPRI0qcPoPiAAFDUq9eg5zeug04d -Ow669scfwHxcAb299xR0/tRpAC/OgMKePjqS+e39mTF61kuHlFzmNbCpnjk23a1noB0qasXaJDZO -Ul/+QNyAflMDKb1U+P3bsdS370GJL18AuXwVdAHI5Qu/nQDy8Dow75dBF/48BboCjPvJtVug25eu -gZ7euAPK/RbyKyop6qKyHvt5aYCZZp5q4dpktQJTLz7K2EMM03Rjg9sJpdfAiWHHQl48AL24fhX0 -7s490A1gfi/8/ieQF2dBD4BcPPP7H/87/xtgDV/evA96ev0WqCA0+JeawoSjveC4P9YH4dE/Fjg1 -bj0FvqPhENZE1bgtRV3tkpALG2XD7nNKck5A4qKOxrx8fiT6xWtgbgJAL2/dBv15/FfQ9ZOngOte -Az2+eR10D1jLxLefjhAy084KwOmPZrsqg9RNmTc0w/TksVr8y3EB5d14LTe0F0d/2oHAX+/C0h8J -wOQ7sOTy08XhOX/CkkrOEXIqzg1SG2JEtX2Vxt5OwvpkE3VTVI2xA57Prq0VWJV1/CVJNUI6yEya -7KAEDtUQX/XQKK8FYMiN2irE9SYk8ykpB32jNKb0XGF0zkl0WsYZVGL8GXJy8o0uGDRAUU9NWx7C -xC31lr9eH0aGWeTVlE2pgLw8WYuZG2vCq4fqq3iQpLN14NybE3WC2E5BXTgDgn+AySm/WBmf/Xth -aMbxj89egh5dOQfE8hXQrfPXQAkBQcfxKfnX26God+pGbtp8Nylqc4pRYBHxEOZpHmx2iJnPgyRf -YBXG/jHFRDyf4lLedzBoz2pw5HvEYvjlxKC4Y+8fPgfdBbDzxlkA3+69BAW/ev9L2PvAX1JDU34p -TMg7wagovTvCgLya78B9s8uriZZpRqFDwoD6VNyaXT2/zqURcM2KWqZqpK50qKEpjotB3SrKyPjj -27t3R0OfBYDC3n4HPbvzDHTuz7Og6LffjkOyKq4Sy5FPe+mUD5NsStBCfx3ZKm6sX59kFvoPywyr -yjrDqlwd51UYhxuQ8k5O3FgNIaCBBLuNLC67mBuZeDw5KPKXoNefgRy/DcTuBdDZ30+DHt96CUoJ -iTsKTy652olnxS6O1FCtUmqlVUzMcus4DJ+pcXJ3QdDunec3r8vpENUgNkLWT43poePvt6Axd1mF -xRdxmVnn4OnpZ8qTU85+f//lt4+Pn4Mi3n0ExXwJ/iU+KOJ42IfPRwpTU38nV5XemGnAhywPscDb -wlrKtqgaaxEzStfHqVmaVugrQy8pdmm6FifuYCXUokquwlOjf4/7/O5EZljIb5D0+NOpYYG/v75/ -B/T2wbNjWXE5FxNiE85kxMYfJ+aXnuNAYA97GOh3ikboBxE78/J8d3nQ3hyvYdfE5AD6MGdHwcFY -1LX8FWkNWdRO+VaLhVxCZGf9FvHm3ZGwl69BOd8jQXmR8ceiPn85/vr+NVBi0LtfYDnJv9cgK+4N -MYmhs4M8yJaIBXWr6HC7jsHdlLW0bAACZm26gbQ0WY+e7yNHalrR78Y44Mfd2JJ7ix1t4LWhLsb6 -aDNhe6aWZJMKaBYxF7ElZJbYlQKmXd8usxlqmixKJmxTzCg3y7noFQkLvCRlgU3TNci54UawupMW -ru1ixi9MdvGWxvr5y+PdrPmhJsjiQEPFxgApxidhgn1AfjnU1dQdKTl/W0ivcEw31DjEPeMWeUP9 -mpiL3JAKqOsiPmaxl5aw3MvLNvU3lCp6m4tVIwMcaV8ffqKhOWGc1xDSTSY/qy0vPNsKhd6Zqean -row0YezSphqXtKnBJavluJVMlEfHRHu1XJpLWU1fGqKkzHbhIlZGGAUbk3ywaYhfJOusTZF2N+dJ -Oloyphpao0X19ZHTPObnISLqnrylPl3Y3JDUx2YG9Av44TODjeUrkhqiVcqGWSX0ks0pctpSN/it -dQKT9pepYcKjYeIXx+BhS0J0gmqEkTLYSP8y0lwdMdrWljXR3prVgEPc6KA3fBngd0b30DlvFK20 -ENNgfenyCCd3W4xOsanIZU5DNd+uq2u2aRs7d7TN/R5jXecB4AG9WlKJeQafvDyFjhS3Vr4QdxBD -h5qo0fDM1JO0iorrPYKmuDY26/NQLe9rG4v1vIkleD3dQg9enGjlWpV9Ms9cQ7/LIKj3mJomvAv1 -wy4Dv8F/b8KmoYE3ZeTchTF8jBrgP3ErK0LWzPxuHKwpnpvoqdEO1ZYpegihmiFa8nQLJXAA0ME9 -HMRTaXcndLq9OlY1xM5YnKlGOLVc+t9zXN7fsyy+T0WEro/Dw5dHMGHrY8xcs0hAANaUOD9FyzL0 -oL+sDuOjV6cA7qrJvDWEDz89Tk+4aOynZ2pGx1pnetoKhR28GEW/oGhhoplsljTxd+Qc7NowNErO -j7mwPlL4fneWyTlYaTW49OSqHRkx167mEFYlrKo5YXWVpK86bbqdFzPTWpcgaqN/lw40VMrGuxjq -yWbU3AQpYX4UFzk7hAmZH4B9cqi5JLOIDTf1QD5sjUGDf27UTbl1HWKPvqHbrqqtNsuqCduANtic -xMaK60vfNpR+O+MRMREuJYuwNYVNtgiRUVuTiAibFMhVCTHLpaRDPQZB7bacUemUA3mnbRf69G1T -e/qGTt+coM6sYMC2JISMpRFo4NoEMmplCpUJaIXiA301162s4bhkjUDs0kp8GlyuV0so3ZKgk7Zl -1FKXsrFlZ7qO45RysWYZG742w4abRTU0p5JPs03h06zDuOj1AUzY0iAhemOqhbUOHMvjNdCNyTrU -2hi3ZGWAFG8Tsiu9Ch51R+TvIVZdf6BvE+3pGvucChrMqaKW70iohRYhs3RzjFngVlZT3Co+wyZn -o5yq2lqrpJ67I6vnbYkZZSsTmMjVCXSkeYaQujWJTbBKmBXGfmaKqZufb5P0zbgX6obsWjIciNV0 -m4xQaBfDojaG8585pPDEw3mewK5kY6xSDsGlr22zGRv6VlSN7WvKtt5VeWfvqrSeNjdMiJwf5eYv -C2vhm1J6oddAQezpuYwDA4f+vxqZG8xqfx1Em4KQZ1cz0M45fh2A+f566Fh/PaI9NaH4wECBORWU -YrOQli+uhXxilsQ8GeJCcpdl3aOGmepKk5SUPS+iFC6LWGCPzl+3unHENyto3lGh872z1e27pnad -b762yyonFwGai+4zArpLA6ytklblUHLQG5PE9MXeqnc7UmqVS1vfvjSA+G5oy3+0NAQO1g0hI5cl -FNiWgkPZVPFp/Zz0h/OjGCjASeM+o6DFJ4fGekQVITZhxbf1UUiIXUTM8imYUI+MUbU/y2G4dXT0 -5ljZx43BvFeLnSk3dQ2pDyXMsKvL3dlfPFp+vWGUTRE2lAZvSakY30KLbFfHF7jUVPjyWHngFCfu -rKQ6+vqOGJx5uMLvtc3W9cw05wdaxNgqf63JPSOX59WxSQDOlKxOVIXo2rJfzPUVvHLMsZiOhfqh -TWAcdi0T6zFy2U4dHebRE4tdSkyGQ4JO3Bwt/7g2XPrmxwqv1atuGXBKuwadsvY+h6qlx6WkljnE -+BTzBDZmrqXs1bYYk67tLv2gaSl7tjWGi7VOo2OdSmKBU4HLtotRCR4VpcKtIObsAnG3a2yT7upb -Jvw5sDfHYViUhPwtMSZ+S4iO25bgs2UtWc9mONGvD+dqOr36pn6nXEDdEWITzGOl7ywTlZ/9z7Xb -5AzI3Bi5eJSV+25zBJHh09V3ulXN3U5FU6tNxoSbOjMfrfUWvtwchnzdnCKki2vhsap6ROaOqJoE -5BB1z8Am+Xta7WrR2dbJ4sC5zqhrTgW60KerbdlWckmabsiXHTkd5lZVszyq2nqvoprqklHK1kdh -MZvCqtBdI5fr0fA5fo7ZFtPLd8TkIruUUuZWA3Ooo6NsciygB6GfLaPkTK+6qdutJUE3Jio+rw5D -AoF8TN5TYwqckqrYQwMJcTjHqwbOUeFQCLj78y2i3YXGKau+rtOma+jcUdfWb0lJJVYJPsMmp1e4 -tSzs7iwN8d8Nfq+/xq1XS4H69OjCw3lE3q4eV2CTYpI8KmLh7hyLZpdRKt3+PmAr3Mb/LrLY/5ho -eJccn7XYA/5gaK4K2BbSqry6mi7XbE3HpoJU4DRx673L9ZM/lgU9/1lhCQ5NDLZbT6xcmsh96TZg -in0GQdOuUdDoNVQL9hdrB4DYYnqB9dzXUMFOGS59fST/5fpgzmOvhgxZHSMWLvZAgw== - - - dyZxaV4dFeFeZLF2VwW9e4v8FquaVCxqTn66MIqodM/V9azPkPJtM+DwAy2+7MDgr9lMhTvFsPi1 -/qwvm0NFQV41sdQqohTrm3NuqWuSLix2ZT90KZDJdgksbV9PQu3O1rQbR+Bp49yoG1YpCnqwXDdu -F+PSdySoxDUhInFuGBK9o8BX7s6z6/ZX64VmraC2l5Z0wzyNKPo5z2bbJNg0j5yQ7ZAi4zYnit/P -tifd3xIWh+8vMdhegN92FPRKj7GmzT3b0LutYqOtEmzqznTlV/t0+cetsaIAixAc+fcar90uZUBM -3bSc9S5K7p6qvvXAwCL7+wDap+AhW4Owz0t9pS/lvIyLhsbS5+ZxcoplFB2+LURFrQ9Vvt8cKn3n -nIZHHgI88NNAKP5nmcU7mOPVejU06A9g7f5a5wBYhctwyHGZLiWpcH0CHr06UBb2c17Q6tPXNdsl -HLhjmpi51V/51jmBjD5QstB2MRcub8WEdqJTrm70gaN+6Lgst5wJ2xHRi4FYLbQK0Vl2GanKpeKQ -NiV1FD44+VpLZXyAVcimb0s5CJsck2KTwSLtMniMRVgZYp4o/LotwaStCkkZc33o71YRh7I72zDk -r9O+LWaAd6bxqdaJqsCV3twnW+O5r+xKTLqmvfiNqQsc6lPWt/k1oFvBxdmk1CKbnJRnnoaH2aWo -RH9/2jXgPXFjwVMgt9N3tWzO3nx1449FJnPPgMk/MGCL9vXE8uXestcOMQ1+ONcwZFMwEJvTjGK7 -WsDdUQhYVhkDCcRn44GRTfPz6I4UGe/vT+Dv2W2TYVNdakyWT00sO9DXtu5pgHErEElrQ8Xv9c1F -zyzj6Nh9PR3t7wWzp8MX7GqJpf77fBYhLn3PyCL9NHF4ZlFVlEWKSN1dbpIDekrkUBIrNifz31pm -yr57DbjiPRMBu7/E5JnFlMK1SUL67mx1s11NhwOfBe/fd7GnYRO8AAZ6VIgUnwaR5tFgc4bJiVeF -9JxXdv++ACEmxSqGxFvlqLRtOSrZpkQl+PTEst256iYg7votcg7RpeaQD4xM0oGRWL6nQWUsdafe -Gsa9PqHgRd7f0xArXEo2bmMUl2CX+HvdkNA+IzzVPFX1bXkQEjTXjwxZm4SFbkyBw7YluFyfkYF1 -qwlFbl11rUvfPOFbqOnxLfGa9heB1zlenV3NxCwOIkOcckKevyfq1iQmZlfDpXvUXJpHx8D5jPzO -w+XayR+rnAaXhlTqVJFKd01teqexcWBTygRvS0kF/yyTif9dJmL/u0wh/98Kt/X/VtgNFgkVXIcI -u9oHCb/1U8Gr/QHoZ/d0ZdDOcO7j1db0G/P1mdfXOopfmceRkUO8rIeczI/nXGOk3H1ZNfGHmoU5 -0KABPIUl28TFXyxj6Q//NpCr/HjrUJOhP5dYNR4DGWIVoxItYnSCQ4VO9qowWW4pKntzFBGxNcot -2+ynZtvHCQluITHVNoYK3xpABdungJ8nUNHmwZLXK92Zty0TVUF2MSl7bRCb45yilm5N4VNXxhDh -K4OY8J1JZoFrhlHmUtCgVjEpx597+/rmoUNA1+zqWIBXxKeZp7GJ61PIcMsMCYhlvsCrZzMAzUG2 -qwR8r7am9kBDLDlQIxK88rLAbWFV0OYE9NvmGCRwW0IuNHSigm1SHtmjra13q2lgJ4DXTn//LjEq -aX4QHlgPC7u2PADP3zfWtnsNNQ1ODT7PLofGA/wfaRNDwpwAt7iBdVqaopfxykMvyARFYbuzjYMu -fU3DDqCd7P6eKkJoqGUaEu7U0ACfR0xdH0aEWKdIefv6+u4DwOv5NAKOW8FEOETo1PXBqi9OCaXI -MoFLGMImnFvtqgz7z1LdyD+bglFApyEdgBYHuC5jeQgcONddHOA1UlGuBUHrhpRWbp7Ap/5nSdD5 -z7Kg899VXtt/1jhtXh0yZ3Ws4v18f2XA5jg2ZmMcFepVMmCHekGNT8mleFVMhFMOrJ8Q8l1bn3pt -HBt+bn0Ilw1gDXKSlflALkh64FDgSw/nmYy/ltj8AxOL4VAzEBsz1GKntrZtd66+b3sGl2PqzHu4 -1Jn/wCsDfNosCf5TQ6zcHqr6ZqxNvCKixl5Y7a+I2zeSEE4ZONw8XhUMYGGiU82lOlQ8omeWwfUa -CTh/f5J/Adz1Afnn1XM4hyYi1KWnoW1KEoA71CqPgYE7XGQxf8wzqV41vqwbF3LZ0APO+rHYLP5h -8mM3GbIuLPzs0EISnBpY8r4RU/z3UnWnW8ukAD6E7pltFjnVNQKXkgH2qKiVu2py2c5YVeCOjI3R -tFa8X2iFh/9QCrg+Ca3UI8SnuSbQceudxU/tQCw6pghpK4OQbx3Y8NOsxJfnHQDf2mbIBRtDkK8r -QwXPFofyn831ADg8UPTuXyOXsybC5A9y4m4tD5Un/LVcO7g/x2YBeVviBHJkZbj4/RTt+1n/fiB1 -C+IbK//rDesALNY2io81NZU9ma3LuWWoybqp56ddMfKTzluHSt/bpggZinZwaF7Ysz/7oXGPbUJK -6Y6EiXIp6BCPglS4Mw0OX+rLeGKZKgv0aml4h5QIAbCL5lIRSxwyVKJHCYvZVUNjXPKq8NXh/I8r -vSUf3TIG1qVp6tuWUwHdgkrcV2KzvDJCsUOGTncqsKnbIlT05jgyVNucf291FJmgbi+PX+wp+eyW -kQssE/DvW4Plb7YBveebwSbtq0hluxqyX18z9w1c+g/AK/jrnmxPw6MAHn63BXjvtRlciqENiLUp -KtoipiA3Zwj5NkDX7hqZBKeCWLQjxmQ6ZaQy+wwx0zaFjgf4OsYloZT794R6tXyu11Df4Z3l11jF -uCSLEJu41gf+qKLHnXWPI1IOtdU1HgCTnCpyhU1MLd8DvIxHzkTsqmiwbTEixSxCpu/ISIX7Bn7d -f/01cxf4rT/mWXSfgVjmUlWFW0UVXzfHK95bpqqCrFPQYJsQFeucwWfuTKJj7BJitgf4bHYZPs88 -AY/dHKwKc2uYBNMEIR+b9em0qReV+WOxYWpvjt/iUlEgNhkqySLCpwJ4VAjotxYg/sibU5jEjQlc -2tYUqcAMjN3QnP/WUJP92NwF/rTSWvDaMgKNsc3gs5f6wV9sUmzB4SK34WCJTvMaMIVOFSLRKi0K -sojzPh/MoYv+WqIRdhTE3Nme0g/+/hHu2eo6D6DtDxYF7T9W+O0+I77cpQJHrw4WvzZ25D5xaxlM -r47H3zcyKXtGKtGuRoMPFmmMH4skDOCDi7fGwN8XukpemWdwaaZhXLqujZlhE7e3uhX11T4Nh7Ar -J+U75OTi7SlsrGOK7K91gLAOISPsY7iUXRG1aK2j5Lm5vyRgsTP/uZQXc0HOiTplrMl6vT6OS9W2 -VbxdbKsK2JogFpqF9PLtaSbYB+TbX1pB9ZYQkyWqSXm02gdNPgD40AHE6o7UjwuA5hmHRcr5ac/m -Wkreq5rLXjKy3182d6OSzH2EaA0n77qSmXpOTk85r+dnARyWddM+hYwwj5EyBli5z0PfXP2Fmfzp -mkvMwljE5Kr1CUiMeao8aKE39Z6xLe7GznRFyPJI+XeFIPmBS4Iu/gvQPR41LME+XfjRPJTxbLkr -+ppa8O30SkfOE4+IXGydYVYt9MO/+vcxH6qZqH0Vl2oXE7K3xhAhm8Owr0CsxKwPlL8R1eQ8w6UH -/DmMDb3qBTz4+ggqYqWz8PlGd84L22hJwOZg9ouV/pRnexpspUdBhe1MweO8QNw7JITCrUlojHcO -U7q3SEL5AO5yqCkwXVdpwPIwPM6nZ2IOAH9hFhNzFocQIduTqCjrGCRofaAsSM5Lfmioz3zkFFHy -nIBm8eiq67xGHheI9YL1YXjQYkvh/fma5EvOkapQy1BF+OZw8ad9IwfwszXVDikFstxT+s0yUhm6 -1FvwbL4n74ld6u8rVdt7MCto3fXXpZqvrt+fo2H9/X+3ZyAh20JYqF0E/u5VIOPtAI9uj1Z8sI1D -A+3T1Py9//Wup1S6ZOjUzWFw4MogPHS2FxbURUp9tT5GwbgN9Z02FQO1Box/G/AKLhUNvG/kN+zN -1veuT6Ji1yaxKU4Vn+/Q1jWuCan56sbyr7ONZZ9sY5iYtd6St9sTVZEAnsQsD1Z+tE6jkneNZKzP -iMr36uApbpW/5pi/xjG24uciAeZUotIB/fVN11H4fGsKkerQ0OF2Ba3Sq2dRDxarG3fkyASnAp64 -M4OId8hwOV4Dm7M8Cg93q6iog4U29f5STZ93jordkSMSt6aQkevDsLC1QWioXUbMn+2p+mToICQ6 -VV3TTmVDvVPBgrtlpDyfhoHyKPAZdhE8arkn97maF3tppafs7WJr6RtLHzhwq6fq/WYXkA8t+c/M -g6UfbTJMal9d+nNI2vPfhhHxdw+MdZ0OOQdjkzKqnAA/bYxBQ1cHyz9tjFR82FVzmDsaHgPAoIxd -LRV5aGLzgL9Fm8fwSYvtZa/mmnLvzjbkPTGPMnIXusnRcmb+dcsg4PEHMdHmAdjXtZ6KV4bm3DvS -6rTLE7TE0+3goF+Xu3BF1gkBZmEA/BVY+6fmCXCoU4IrdooBzhCRcpa6ywJMDfnPdmUklL+n2fJg -9mMlN+qUnBF3erE554ltEhy7B/D9voJYuDWBiNA1F97fHIQF2SawCdtjuPjNEXzsWj/8y3ov7KPF -f7+uHfnJWAf/IKTkPTPWln7YnGSDxbzcW0JC+O8aTvQ5x2T5p53xss/bYyWBh1oyYpCV/BST+PSU -iJ0TeqBns3eEJV/39UVhPn1x+Fxv4hNjW/iNxe6cB9tCbMbGODphuQ8Yv5pNc2pq23zAXK10Fz0b -p0Sdqi16+4uKl3jbPoPPa4RG3u9Ehz/3qFmCtVFckk5QeFfHybio4ySfE5K+nRxEPvtVVxd6C4hj -6OYENX+9HxO1PYLPt4tpSMcMNsUthkX/NJDA+3oqwqflUPf1HOaPOQB/1eTyXR2+eE9HKPUpcBk+ -wGfZRso+LjekXd/szLizK0XE24TM8uU+ZOjWCCLcNo2OtU6h4jeH0RHrfdDP2pqsx4sdZd+sEhrY -j+cODRO7Z2RTvSo6ZF/LpdkVDKhLSanaN/Jq3FoBf0PErthRNzTZFNW0nRlKjlOETVrpKXy91Jnz -zCGEhLpEsLCtkYK3akHk1dnWxDuHs2TMjwVBh0eFzLSJqr475YgE8xQUeMVmOQHfaBODo9dHod8B -3kqxiPx+isPyaGmIXS0NBuikcqcUmWCdgUYvDZZ/8GqZjL35dq17TlDvNVU3e+er290GgEt1VIRl -Gh4N6IaEbTEscluKzXBquUwb4I1dOh53d47f5JSzibZpTKxlDP7d0JD7yP+syygz7gou9emv+sbC -SMsoJt5Qm3pjsS3rydZQ2ScRL+7yDDf+rLE+8+aBjIrcM1bXb4twyVaAX/0cuCGEhG9PI5P8OfFj -ns1eHMbHahtKH29P4XP351iUjQlszFof5MNKV+nL+frsh+s9JW+Wh5Ehw6yMm+TE5w== - - - Rz1iJmJjGBlhas25ra3NvG5oyLuvFWRc19Vk3FjqKHgO+N+KlWF01EIPFMhBLgvQIpydGVyuZbIq -dLEr+/4w4tuJGULETbcIU+rW8pjbQnKWT0YpP9CwCIeAZgFyqWB7rPyjqSXx+jDu6wlTV0XAQlfl -O0N9yaOdUXqBT97YaJumFS51Qt6PopP+pCW9B/Ey3v8qxMdfNQ9go8QtqLBmSNSppbbysH/0HLoL -8MjG+oKXutqs19aRvKDZluz7o8SsO3PtiOQ9HalqriXx6kpfxguHFByzOVEaaB4tC/HJqBAv4Inl -dbmPRey0hz4Ni/1zsbZ/T09HbQzBvq4PQL+ahxFRhyoa2i2lwsaJSbfkzOwPjnEu0tQO/TxDSr04 -gUo6KyZnX1NxMm6amnJebvRAE9fGSdnpn2/9gk/8cG1zgITc1fFr1gYyHxv4UWdna+IvmMcLAw7n -6CSPlsXso6e8a4Z8ufR/m7wunw5Xtj1a8nahJu2Kkhh9UkYM/3O1OePugRSfY+wEx2Z/uXOUVxz4 -CNArHLeGAl7tLX6l4cWeby199YeYGXzVpyXB3Ybm0YVRcvaWEJ3x1xy/7oeew/jLSKq0T5d/25ks -+d/3RICeAHKkmrY1Qy+wCklpHjm1dLWr9K2Ol3RNSY89Owb/fHwI8u7YDDX06tZEWfK/m5y2UUb0 -I1N33rd9Iw17AOT1gZHF3jcA55mu+C5jhp6eb8t46tVRoC4NE22VUArXp3DxDiUN7NMx8P6a6//M -Ygv2AS2xq0SkOiXwTIcaV76/XDPkMXEattWEAsA3V2wD+toiQia7NOjc/Xk6zq6mQ6xSSqFLza9e -HaXD9nQ8tr8fnk/OhNomabmWMWzMYmfJUxUv7+72GKnQPIKI1FYnXZutTbrpr4UgZkddXwY0hn0K -EranZzO3xIyqlWFCjH/vt0/FgB8YSeCfCyTEz0UyYX8OmbcxXvzGPI6I9KjoyKUJaKqh1d/nnAO3 -C7lIn5yNsgvR8UAu3J4hR5+awUX/vjGFTxljZjyQcbIfO8ZoRTtj2NiFlqInq53Fr2wT4BBtffod -OTfh0mJHydtDXXWNZQoWMduW+9jUXRQw31EcsNRa+mEH0Fu7SkzW1hQmbmuUlP7XbG3nPyZBm1tF -KZvtyH+w0JF1Z7E14zagl57apgnpm6PYOF1tyf2NHnSYW0Ir2xqFBa/2QT5JuIX3GkrC/+Bkf/6j -DxZz2TJISBrjFL7Apbw9oRDkBe8ryaWGppQbzeVvjhJjb4OmEG//sA7kvHZMYbMPAU9gFsNStM1p -z/Z1TPKhiVfjlAMaXUUs2PPXcxZjM9cHS177VDTEXwv8lj0Dk+BS4XPcSibGKyfkuWZQaRu95YHL -nfkvjXV5d5e7YIFj1Lw3vPyga8s94G/WcXKudZwLc05i45xjyPiNHniiojr3WVPx599k3JxvHjGH -7RKTS5TcyHP6uvQn631lgT9mifA9HRNvl9OqZC0FX8YYcY/9msshx+ftTCCiLEPwBEBfRZoHAR3T -U/rSwC96NolPuMJKen1sBBX+5N8FerVbhstc7y9+sTVc8tE2hUj2qmAp/27QGL5ZQNOMwSOXhuBp -fy80Tu6paXjLcO6btb6km+aR/FebIwVv9g0MmlPFIVmmyBlOKRPsEFOLuqoif+emfTzSUxl2YooQ -fmalPevVvoJQ+JeJwz800enU9Ae/SHnxX37MUXBuFSpndbDkvVeLytgRgWP0TVmAvsWX/QXop20p -h6Bsqny5PIZLdM42TfqWWrV/LTHZ7umKwPWO1BvL7ak3TG2p95yqqhSPFle8Nl7+xaHFFvuW60Z/ -rP6vXnK1vzb4roEKd6hIRT4Ar7xqJnKcknNvf5bL3teyMPsaNs4popdYJ5BhW335j639ZQG7cmqF -ZRQVttkD/+qYxCS6xKh4QFME2CdK3tuEgIaVEXJXp8lZm9PUPJeKibQrsZluHSzRqSkL8R+7+qpY -nwqSfGCkogG9SBQ1ZjyT8QqC9zRto/uANt0HcNY6AQ7W1qRdUzATLmq4hY91fdgYWuGHP7pgkfdc -kyzYbHPB82F00B8T+MBTGkHcJSEt4tQ0Kfz0Rk9p4A8Dl7c6VPVxcxyVuC2hQ2xiNtQjxWd6pJVh -lsn8D/rG5FtbQ4jwn7M1LYdGHs8mAbRYf9Xn7QlkolOISbULAZ0qRiWYR2Df/lcnbBQb439mYam3 -4s3WBC55eYSUIuEU3JDQ0i5IqWmXFez8Z33omEtjxPgry31VIQtdFZ8VvNQrIkbKvTFc0pOV5sLP -PwAN8FNHg+9q6ajZgbJPqqbUVz/n2dyfi5xaK4Arm0OFrzdHSt6bxwAdPl0e+MPEYnl0NOS2GJfu -UpLL9w28mp1pWNhSZ8FjCS3mpIYff36uteDp4gAmsqYi/lr5t6e/LnZXRAGxjrNJiEWW8eK3KkHC -zYaSd6fZqc+OS8ixgP7DZbulbIK+oeLrSkfJe4+cUrGvY6D/XWLzf84yiG4lPschQyd4lIQ8h4KF -3xxHxjnF5NIDwEv6a7vahOUfF1rz7reVhp7ARj48wkt+fHROkPTibwMFaZlARruluEyfkly8r2Fh -3CpMhkMNSd4SApprpiJw38Ck/5yv63HLyZVrfVnP7OKKqH0dBQ5cqxD4n0r7DCFvrR/81TZN8j9T -UzlGzrgBwNhjfWPx29Wu/MeOyaIvzqmKiJ3x8qjV7vwPUkbwaZeoMsv/vfD6QMHL9f6qEOAaeH/f -oV0tsfyfxf/1zWl0yMgVmqb8e9sSGso+26H1mNrUPmBenUIIEM95L7dHy765pdj8/7dFpv40Ygrc -Ckj8wRKzdnelXrg/T0UfzAFa1EiBADou1aXEZe0B3OQQ4/J1NVlPNqWEXGVreYBlilCyp+EzLeOo -qOW29JtbfVkPLEOFbxab0m5bRxGxbi0DsQZ4nM3Ryk/OaUQcME9ZDgW5GHgf6TUwcf/77lpPgbkB -jnPpKCiXDuBGwB/+vVjTB+R5D/A+YXGw8otXScIeztX17Bv4gkMgbzwyQvbOBDJisx/2daUHHWzs -QH0R8TLvzveUh21M4BMnKYmnx9D+5/3T7y22wL9vDpFydsYJhR4ZscjfJ2ZlFB68BeClQ8uh2CXE -/O2p7OcLnVGXtPVhZ6dpX393SzAZuwY2wO+YtKW+qk/7AG/6ACzzKliIPTU6zTpR8mZjqOSlbRL6 -zTyOiZhm592Y4eXcW5+klG6IOVB1Y9mTQWT4Hy1FX442FgUfpSQ+PSJjxd/eBDACV/LxYmXUizNr -vZgEp4hW7JPg0hyTFYHzbSmPZ5jfr4+Sg0971FVJ/12tbvf3r/DIkMnrfSWvNwbL3nqVmOxDE4O2 -t8Bk+L2zTYpKBjQL2KOmAXqr6sNaf+X71X7w951pdKpdgktfn8BEq+uLH08hY8/sjIHjdvXESlVz -0h1FfcQ5fVvm435sxK0+eNh1gAtiAI+J1fdAE2BhT/9Y6Sz48u8qg72nxxRuC8uCzZN5bxxiQANo -yWB/T3OrmFoMYELAzjQ+x6viUc2T8PDF7sJH860F96epqZers76c7KgMvmoZLI9aHCj7Qs//cnlr -ClvsVVEgqwOln+Y7Cx/NduTeNXVn3rKLSz7+nGOzvDoea1NIyXYpqFUHc7z6v5d4DT4NsczYmPVA -yUy/PNeUd397Ch23I2aUGtph790KDhlYE8pKZ96zlsKXv/eUvzshwof8pmLEnXVMQmL/b4PdapZD -yvgFr06ZB9EZP411HT+NDNIPAyr3QA9NNY9nvzW2xt6YbYu9/HOhutk12zK5LefzLEJSzuGsoONA -xyD+MNDRu0pSsVtcGbExkPFye7Io6K8lbpNNI6i3iFgIn7G6Zs/EIHkUuGwn4M0tI1WBA4jwy/y0 -V7/vqLnU9Sl8kkNJKnXIqf7ndILXgVja7Ct9s9GdfX+jI+2eYxKe7L+Ho2operg+Qs7aETNhm5Oo -mK1JVPTmBDzELISG2BTIeJeeBvPoGnt8hpYpn7Fx8GC+YfBwnlv908ThAq9cLzBO3xygJZW4DKuc -UmxXVTM2xlF+f/J1vrn8uamp9JGGl3Z1qb3go3kUGjvfXflmrg0ftDEoKFvr55etjzAL18bwcRuA -HlwZqvq6OJT30qcjFDoADlybpuTtiGnFbjmf4VAwIFvTmHi7DBkH4AHYo8PnW6TwGPMUKsXfa9Wl -ZmGcCibcrQLyW02H+3t1HcwSqyxCaPhsR9HD5X54oHmGXrk+zSqfayeHm5rokbPVyFdSUu6VKULS -ebkg64miKfd5FzbmtJhV+ME6TsoydZa+NdSl3LYOlXxZaM9+PtuYfMc8nPV8fxaW7NVhstdG4aEb -E5jYPT2XvqtnYA7mmJS9WTrBDfhlqwyRON+T+8QmrYrakRPzbVOMCp+8Y3RP0zEDfBb4ylBZwPJg -9n19U/zVfvD786t94OCFIVRkOzz87HJb8Zs9LYvgVbMILiUNwEFiuVUMTTL1lb5VVmff+Wfe34OT -yTNLAG7162Mdk/LTWN/zAzh8wP+YJ5BRqwNlATaxf+8XF69vhX8zCwlZHsB/e5W0Sp+IUeWeopVb -h9HxIl789UF89HWnjIFaGUQlSXip16wzyAQADxG780zqwSKTfgDgn0dXzd6YJOU6FFzm9jS90Kcm -FdsksLiVvuKAzX5w0Hp/5Tt/7S7zQFXkFC3x/toQLHllGJM3Qc94KmFk3DEPgiO8M4i4PRmlxCOm -QlYHi2MWulLfLXak3N7XU/C7eg57bbA8cHUg6+HaUPrjuZb0R1ujJYF/L2KrgHxq9hoZjEFWxrsO -XMrzw4WGsf3Z6rpdFbXSOgr5amrIvKPixtxYH8z/+s8Kp3m2Dxwq4peHOLT1vfsr9VN2CTl/pR/6 -FfCp71YGkbEeFQXqnmPRvP567zpS2dYEKso8io60TBJSlvx1lpoybiy0pN6WsULPzzWl3lnrAb91 -CrnQ+R5IpISfdG1tEBzskuFyD2dxZYfz+PJdExXj1XLZPj2Pv2usFuwZBPU/TI3j/j54P+Y53N1Z -CtyuQSQ69dgcqwafrRlAfO/FJ1/fHiVlbw0REiWUtMtN+QG/NGS/OiohhJ/b6i56YZ0kJOsHCPGt -hIx7vcSIq2sj0BCXlI3xKNg4jwaXu6vH5G3LAF/QiwjemmFArJJa7twAMW5xBBdnnsFluhRAXuhh -iX8tEMr/NrE5B0a+ABgj2avlc3aN9d17RkGtz8DAORXoDOt0SaBlujTUJiRmO0SsivUxUrKYVXa3 -F5n1oLMq5lp3RcTJ9qqwc40lwWdGsNGXZwWZtx0T5IzpmsKAZmT0hZV+fI5dVI3dGEZHbY2Xf3JK -y4OswsJXHi08xa0hgS1iKnxvobbfqSdXunT4ArcGkebUoHLtahp2R0FBegwsxqYIHb854r8/ii0y -dsAzbTOsCtu0fzyoROc0OtEyBAte6oUHivh5D7lFX86s9sMi10cwUYs9lQHWKVTs6g== - - - ICx0vifv5epY8edtESIWyEectrPqu6Qh9ynA+ZyfyzX9B/56kRp8kdlfW3IKGm6egsRYJYT8+T5E -CBCnDz06FmvXyGHbpJi0+Y7MB1JmwgURNflsB+TzaWNL6nO7nFQ+ysh63gGPuLgPaDeHhgoFxl/1 -v712OiAv5Czk+iQp3SxmVMgF5U9WBjDJHoC//TXUfWo6dGsYGuiva6qkRJ7qgr47a2gv/tCIjL/z -7eEFkLEjN/CfRQLcISkMWe1Lfa6pz7jHynr1Kzfr6QnzUN6n/26wG3cU+MJNISwc8HdA3HIYP01s -7j+rNNrfy+iKtdG04OW+rE/LQ1URwHgQe7NslkvLJri1LNyuhkU+UDJJ/5oouP+uEhEHJhxkeaD8 -8/ogLhbAVrpLU9/q0lRz3Dp+nU9fzXcp2UT7NC4f0EhEjwqd4RBB4y2jlV8sY7AgQGe/0dUV3jXV -+2vNFT7TcpPvrLTmPLX0V73f6EWGT/OS7vSgv/y23FMRfGigY3/MEyp3DagsAKvjHHJslhvwGW6A -M9xqJvrHbH3PgZHLOjRy6Hv+a80SSl2A7rMoqaW6LmzYOKXg8Xw7NHialftiEBJ7RkrL/qRgZr4x -1QNadrTso0uMTjYAudSCjb3YT/hyyi7G5e1ravguOY9gk/j3WUK+WafR8etjiPBtES5teQSboGwq -f7k5RS7z6Pj1Xg2x1Ckr/2YTlwTbZsDxwHjR+zoWwafj0b16HtutYeL2jTzBvpHD8/et96oBjT9G -SN3ow0atD6C/i6oLHuUE3f8l7tlF0CAy4c5qLyJhrqn05UJr0dNpWtxNCTftyRg3+WYnIf6usROb -aAJEz8oQPHh9FByyPlr+wSmHxPxYwiP+2WA3HC7W9O6aBG0OHcV/T5h4sMDgHi7yu/dM9UPeWUGj -G8CVbQWxAFjfT5Os5Ft9mNjLewo+zefv3S7HZ3ollPytAUTwXGvO7dmWjJsr/RVBlmlK8Tg7+660 -JvepSwFoXTULbwd8tUOFzXQocZnbMly6vLn8vaiu6L1nnte7u8hrsCkIWRYRLmVHRqo6WGCyAX7H -2OT0yq1pbMJCD/irS0sHvCWpeFuCTlnuh8Qbmwo+LndXhKyPVCZaJivDN4ToxDF21oMBcsKjfYAP -t+Wk/K1pYpZVSi5y6lh4q5wJ3Zyh5G/LGWBdGyRoaRRYA0NDnxX43SYh55rHkOHrvVWfVzrKP6wM -QWK3ZpgVwlpYBDE78NpSb9GXnZmSb7Md0Vf0LdE3FgaKviqbcwK1zbnf7TOwpL9XWNVLk8h4WUvJ -S6uIBjuYr+8/mCeh94xVqTZJ5utR6uvfRnHv/1gfKgr9uciuXh3FxM/2YSK3FWzqj/kW0b/ztd3/ -Xabg/1rEFLlU0OiF7pI3tklytkPIKnXJuNj9hcaJg8WG8X0jv946gY4zNRXd3zOwAQ8C/rrYmnl3 -pSvnob8HgrG19OlCC/Kjc0gAWW1DflWzM67P0GOvtoE/nOZkP/2dkf74aGvF+xObw+iUzQl8gk2E -SXJrCPlOFbF038Dl783X9nnnBK1uLRN9MMuib09jU7xKOgbwH5Qf80ySTc3Bb4hYZeZJXuVKJyNu -mll4r6bw+4lRVMZ15zi3cqsHFrjYkn1XVx93wdSafW91CB5o6q76sDVcFbynpsNsk7gkm5Cc5ZTT -y+0SRLRNBI2wTFUEy2vjbsv4iRe3Roo//ZinkKxKYvmOBBa1I6785pCCY3e1uPL/zJOq/jNHrPrp -78mspyN2xORcv352Krlkj7q23ibl4mbboYF9qMRz7eCoC3Ju4cNOROKN+sKIi/ONqNj1EULGQkdl -wHI35FMXIubyFC3hln0Gn7s9w0HO9dASunDJF6S1JUE7Ei7BrqRW7urxJT4DusCtQwBxiUq0a6gV -di0d5p2tadmd49bsAXp5b75pwmusa/Maa5o2gPU39Za/NrYXPTe0lb5Z7ENnNMOCrwpZSQ/s4/Qc -Sx8iSMuLuyBjhJ+bbUx/stRXEdiPj70wzc145QM8n3UGlTLfVfR8vrfo+Ya/v4WKXAL4DIZXX9N5 -uF4vcc0ySVYZA7wtrue41R3CwwVeg1NDqQDGWu4Gxuvvse01MABew6V5gZ93NQ0dThmlbFuETlgZ -rgjUNObcXeiHBVvFpOK9eXbtpgSdNz8Ij3XquHzfoqDboWWiHDom2iojF1mB3Nmd5Tc49bXNO+pa -waaEmu9UCji7OkHDoaG61iFnQJbGyckLo8yspWFq0uYkPtXYUfaZlPbqj7qyr1dccjzcoUCmbgmr -QpcGSj4YW7Pubc1g01aFXMTiKK0U0JfEg9nqmh0pNn1HikgySyoiNqbL4hcH8t7bJMgMj7GaYxpk -ZOp7sd93VBzWP8uNIq+K7NdM5V4DDbU3z2vw6qvr93TVHK+ShXTL2UgvoEHdGkGNU86Eb8vo8B0x -sQSYF8jOJDbGOUVMtc8Q0rcn4JGG5tQ7utrsu6YOYkRTefTpQXTsOZkg8/4ELfn2EDL2whQh/uJ8 -U/4T8wQ2Tt1U+crUiYp1Knkki4QG8WhZ5N35+gGnQVBnkZMLNwGMXxqEBG9MoGKlNSl3nDO4Eo++ -rtX/HIxViEs01Bfd76j4/mt97odfRMz0K6TsT78TEl6cmG0oCHaIMCl2MTLOLkYlmscrQha6Ml6r -Bd8uSchfTi635r9eH8cnS2vSbmoFmXeXOsu/AD7XX9c8659FfOWBAZ23MZX/2iFHZvwF4PRfi3VD -/zFxeJ6Z8m+O8YIAjwQctaujIX0AZppnEAmG5vwHW6PkPMs0E6lurPzIL4m4lB/0+CQ/9/uZ2Zri -e+udZc/NY7DILsS3Uz3Q0AvLHZio7XF25XJv2bspRvJ1WU3eY1Mf7Iu8AfJhro+UvaOs5VvlhLzt -GVSyQ05H7epY1MM5Dm9vFo/1aNBQpwpbYldgMhxKctXeQv2IZ47f6NBxacsj0NjVkcIPDknld6cc -mahth0W0wBLuKuvAIZtDzFxTc9WbUWT4+fbSL+eFuLAbGnbk1a2Bkk8+DRkpacv5xMp+f8YyRC/3 -qepqnWomfhfgeZcSn+fSYvL2lmlku5FQuihExvRQku81Qb7dOFyqG/bNN8/4gFj29/Ne7S18Yx4D -B9ul2DRAGyFENfmvO5ERFxZ6yoIBbVO8A3DNthCfYQYOi5xWZupHhWyM4nLcQNwvTBBLlwYRqU5V -NdOl4TJcOjrKM8erdWgBblMx4TtKJtSuaRvbmGITV0eJWQ41m7IpphTIaiped8OSrvYjY24utuY/ -kHCTHmib80LWRuDpfaiwy5YZcNqugYLc1QO+e45G9c2TyW4Vqtgy5udRXPLurKDFoxd0mcUUtP8+ -pk3NQJilpLxNKa18G9AcbqOgDuDvljUhpWB1jJjtm2+VuWc7NF5Tm+Z/tSGMgnqXhg5ZBPziygwt -f6am5KmmFTi3klun64HmuKQMmHUcG2UehH5a7Sl+utSae0fOjjon5abf6mIV3fz29CKInx900zKO -jF4fhgYZG0seL3aUPl3rK3q5OZz3zD6JjQP8AWJpEpffgQ+96hBjSxya9nGLvHPYImuodWl4rP1Z -fp3XwGWaBlGRS4MEgL9RaTYxPs8yiYhYbge/F9FzH02QMu4Ac/UEnRZyipDw+bS+tix6ZxwZu9CZ -cXuxN+uusjb2Sj/i3ckRXNCVUWL4raXu4q+6nor3dZWR50xNtAz7aD3eLSXk7WpgSS4lJHpjtPid -ZbLok1eJK9vXMXA2CS5zV0ks+neWDP8PcPx3kSP4aeSy9zRk8GJP5tOV3pyXq+OoOD74++URSsaj -1R5c+FJ7ZYCxIeOWkhd1aYwQeLahLOAML/XJLzJ6yi0hK+cJKzvoymJb3pu5ttLwpT7AEwvR8dsz -5HyrEJFsFYET1idLPgL+FuFW8GtdMirSrcQXbQqzv66Opn/amir75lQDutFEJzj1xEqzBBYDeIDq -nyZBxw8TrmzXAE1xSKHRXgDfXTJSnnkcHbXUA/+0OUBKBHI5wwL87lPgMjcGKwL7MKFXhsjx92aA -eB6h5n7fHKQVLvdTU+cHEF99BkCTGwnwPQO2fH+eBPcB5zYrMdnCuswXw4y454dLNX1WKYdomWFD -HVI2xT6NzN8ZBYdbBivibdPIrFFG2p1uXOyz5SFI+uoYJtXUjQle7EV8Wx1BRm0JiWkrfQh/PbYk -iwSXM11f+nack/3Rpqipc2oFdf69jQBOFmzLyXkOIN88Ji7foePztd2oCGUr/Ou2spq1NEnNm6Dk -324oCj/bXPT1z7WuvIfOmcoojwKe3YGJuRL67OrRidqsyN05FsVn4NK3ZlCpmwDOmacLvpgnikLd -Khrcp+dy5vuhiUJa8kVjJ/SrTc3ne038Ns8ip8bu10lKAAeVdMjsCDFufYJeYlPioevT4DTfHLth -b75N/deyoMvfu2pbQy53m6gou79OmAyfruss/4xKfPuHS8Gnbk9Rc/z127f6oZ9XWsuezDXk39Y2 -VD7ppuZdKQl9fGwIn/RyawwRKa1OuS5hJp5f7Ch+vNZf9MIuLAvaU9EhLhWPoOqHxlTF3fptsak0 -2aXuN9jVXWLfbOPAvolTvTvLJPt1x+oUJb2vujSAlfvt4lxzVZJHSi7YGUFHbg0Qok1tiA/6eshz -EaX4upxR+tg8RMycbSoP+P8cvfdbmmnX92sykzKTTMuk994Tk5iYxKix9957RQSk995BUEFFpfcO -UlRQ7BV7N33mvp/32ce7/5B9uX9DDoSL81zl870411oBYdHlsB70fkZR92Kmv+rVir4tA2Dk2LCx -NWFK0xDp4lbeHe+kFHnZ8MSwCvThSwDTvOMmNm2YCY3fR0jw70EabsMJy1ixNEUfeNFlu05EwX9G -yaj/neFJvgeB+O7FViwo69+uGluzF0zIbHFbwmU9ueTebD8qfrq74dEQN++CnZT2N2AWf/Kq3/6h -gaZdHxc3RMoxeTeKX1yJmO2pi913HmoYaPKyAZIwJWuKXNJWPVmzVb5cNtW83HKQqqcULTkOIDYu -6aDJX0ZxbV9DGOiXEK7p+ySh9dskHrLlhWauO1oSfoQYzE/DXO7XMWHvob8cDJMgBz502Zqx+cNE -d+k9NzPj4pwC8nFShSpSknPve4TFT5ZN8HwtIf+JFldwG9BPaftuOgTQ+KUzyrbYBRMi6esEBfc1 -REB/DeFaP49h6vZD2IatEAW1dngufJxC+TFL50+rIXHTSnTGrofL+3eCRgur69/a8YnnR7h5t+fl -zVH7LlzZvpdQ6+BU3h6TIt9v2okVmw5E/mR/3cvRruo7s6q6J8s2UMyaG1+94SGjt4fZ1AULoWbT -z6Jtj7Bp627AR/wU8OdpGvA3GbJsJ5Qc9j0C9EvdrB7wfSU2dVza+lqPTPujF/T+747GqMu8mshr -nU3xv3UiiuMm9GjYlh/ftGxDlawNUsGbfjpyP4Bv3Dzsx+vGVm26scUTyqa3Q51Vdw== - - - RwdgiRsjbN6yD4Nc9qEbtsaY9BUfqXnZQ25cGeLQ9wDdt+ZuyZnRlj7a9uJhk0os/J8ppuC/S2zp -XoiE/DpFgG97oXmLgBZeNLSmebpqs1Zth7qAUrJmodcsabFpE53ND024vD97QCm/9LbEHze1pZzZ -0JNq5jToHAsp6/cVZWv8jhWVuW1HpO8c1g3aoJlLJnRusB+ToMKV3lvXkXEHk1LPdojF3APy+udx -EmwvwCRs+diEFRcfp+cj4kW1GZdmu1B1nxzkhhlpzZ2FfkjURFfzQy+55MwEp/TimrotcVaLzaLX -fzzTCUq6suOhgA77Smy6oMnT8srHOnLGeQUu7a+JvppHYT00XsmsjSuKuX/aTEh58N8Fke1gmM/b -A+L3Jz+qYmKg7oWnPff8gro6ctdLaemGJfw5IqzI+Dck6P8OaPbPPlzFvgdduG1H5oY1kA/j3c1P -3O1NDyTw/EsadN65LSO9ZaEfWBcJLGqyBxEz34dNHWTX3BHVx57ml744uq6FpY20VzwKCIqvb1uh -qbuD2NpdF7rgix9XeTj/Dri+xICk4sGwuOLRlu3wHoagZ9WOzJ/W1L/cO7zfFUQUfgmh6v53nkw+ -nK+97WK0ffZKlTsuAW3DSao6PPcxLSm5GRDkXRnm5V7bdaOrXJLqD42p94/xKt78djBMhU/L2mIn -O0FPZqXNTwGbfnmYn7cHyY3bHgZsRt+camOnXF21Nqf/MwX44CgVuTtKw+2P0gj/meP27Ay1Fc3p -ml4qKYX3IJlPLqwenmcLopvmFQ2xy6rGmC9eaH5YW/s+KMq/rYS+PzHVC3nbg8x6gM1//ruVXnDj -UwAH+TyKbfwcQFcAj2u3gTi07sYUrDowxWteFmbRTq7Z8TLRB0NM3PdxKuY/MwzOj1Ey9Avg+wuq -iid+Uf61YUnLOxWh6K4cnPxrR8X7Y+Lydye7amL/mpLWxRy4yeAFbVvRILfkvpNeeH7FQiwD8ljq -pq2tYMMJL9lw4aqAOID/MkUmfJogoXfH6eRlHxk62FP1dFLbkvh1rsP1aYrfsznEwKwPc6jbIdrh -zFPQ93E8fNnamisFx589GMIh/u8633w4c3rLBUtbMTZGzatqnx4MISr+d5nTv+vhYDftLNCGmQ1a -MVCKF/pQ8UPM0stGRMpJDyXt93VVzaulfnDyRGfd0xFu+cUtB7Z4Sln7dqK37P5UT9WDiZ7i24sD -La+3TZTKfwCN92OKQtsLUdBbQSr8IMRi/DsN2OJEu/xTgMfdctEadh3U2s9uRutnFwcz14dKmO1E -x60qmeVj7c1PTai03/3swjs+XuldN7PoopdXcXWqD522NchBb/oozWEbPHnZ0payAVzDug1/eIak -YFaFztUzqx8RSt7/HeioyvoyKTasOfGVs0rw+yU9JGnfi6v4PIyp+uRHlG5YsWXBrsZnS0pEyZeA -SAb4EuvrCLF5dxBXvqiFfwTiw6OZAWyCQwSP6oKVnzMR668fnmcOCCtu6pBxJ3taXv/cC4n9xYDN -PwtIoavjHY2v/b0tsWXRN39GfLx98pMLCfAKutLLy7ugwb37NSBNPh/sTj87p6yJ2h+kgA9GhCJf -FyR+ToPI/gHYy/+7TGX/32Uq6//M46A/xhHlex5o6lh33VNi4fvfsTlRJ5eMePC3ETr2i5vSvGdD -lywpQUk2ev4jJycN0GCpZ3bNkMw1G6F+VFh3f10DT9u2Ekq27MjsbSeyYNuJb9114xtdzIwzC/LG -hG/DTDKgJeq3HdCsTS+qZMdPaP5ngt+z76dCPgXp+EUTuWmQ3/h210Os+xQgwZbU0I/DvNLrLlbW -3z3gj2cViOSrCypQHKC1CpElH/5KfHDpuApX8uYHYJcbLnDCuhOcsGYHxe160cDaksGAdoAvmpEZ -qw5C2edhAX/PQ8cs6VpTdgcxVetGSPwwN+eKAvzmN3975aN2eM7tvLd3f5G1ZV/StGWcUjTFHvPg -U055SIAWhrz/VdIcf1bUEHdpkFX80M6piIy/93dEY8L9U0tWHGTG0JawaGqK2QvgQGEnsnBSA4qe -NrXE7QF++/8sM8TzGljKlpOG+jLePvBpUqT9tiB2/ljk9H2fIiC+AjFqRdcQGdaDP/g7Kh/NKmFJ -awZESljR9G5Z2RC/JK9+Py8rf7XvZcAXlBggFjY8t1AKbs/3I4Drr7jpwGf/oYMln9LDPv5iRX38 -dYybeyksb3w+OlD7nAN6e7KrJe70qhaRuW5uTRri5d8OCvPur+vzn267Sp9/HkVUfh1nMr9NHtYb -0rBfAizq4e/qn4bZxAMvqX7Xji/etJBKR8WND0cFLU/t9PpnPc0pp6UNiX9wyz6cUkDT/xpiF9/c -0LXGbtvRpWEDJGfJBM3YcFObtn1c0sEwvn7NCoob5Oact9FT/xrvrry3boCnHfjpmE2AT7Y8VNCB -n0vbH2Jitm3w9E1b/ZuwvuDehAzgETUk/vswA/vJz8SvmAnl+z4mYd/Hoy4bifnzgOYeEdc9G+TV -PQx2ND2albe9WzRQK3z8mlsOeuEVC7ng4Xh3zSMgD933ccueTclAKUO90FhuffrZrsbse+tmImii -t+7xEK/63qioKWp+oOndhgn84cswBfLpsGbAQ4cIWtJOOXgVUd9CFOSPKRLiawhe9HUMkvUlCM0G -OLHK31EfSSx5f2oAlftsP8jsWLMisxd6a+9PdZRfd1DS/6QVPTmJSr1xVNv25tSOE5qt5VS+oFXG -XZ7sa6vecBJrApKiW3bqu7/02OdnhoXvz83017zedBBha4MUCK7i9SULI/3V/8yy+Ifzsr8HGKR9 -L7poVQ+KHRMVP/Yy0q5tA7pdTS16NYDOe7TtJkLW7aiiNT00IaxqTvIISl7qMannvey8iyOdte+2 -nBSknVd5OGcgG2A0+r+zLOH3CTpl2wlJC+vqX89r654d1p58AvZ/TgUF7KT48pK2LXnNhsldNaIK -wkp07oaN3jSlRCR4hPX3Z5SYDBM+54K48s3xQVrelRFB9ZMFZVsa8L2qw1ZcyZisJZ5f8+F0U/zt -o72wjzc3nbCCBX3VixUbKHN3iARfdjMZ22Oczq9zLPFhDex/l0jUGWUNwA90zo9piffbNLf78xSD -dTBFxnwaQ1dtOVo+7g4iy7Y9mKZxZVPqmh1TvwnEIh+94FJfffTxjopnR6yYxL/WrNgSD6/s2kBb -wklW+cujWmLBOUrR65MqSOaFILv5sRWd86efnPXnjAjQzrLKJzJ03J+s6pc/6TAZ55bUrR/m5LVP -vZzCO0OCokdhRUnk/iC04EuIxfs6IdYBPtK7NkgoX3NSarYH2Zg9P5e0YSeUruqRyctaZMIUwFeh -zpbHnS2pvzGL3v0c5La89jEa7ztJhWd9rPxrQWH+PTcr7pqZFP33SHv+7W0btWHNQgWFtZD4w/6Y -8/LGdwvyimdruoqnC/0Fz9b1tTE7PnjWnpfc+MnHIa1bsYXblra0r1509YEbnL3lghRu2BDZX4dJ -LZtOTNE0oGkB1mzdHBTQwwZi4WRP0zMXM/NPMyHjNMBOlzcs0ASAMTMt1PJLQ8KW5yt6Wvl4R+0D -LSLxD15F5HFp/ZvTE6LaOzPdiA9LKlbTtIpSqcBmnZ3oxmWt6tgNK2p44qa5LWndjileAmxi2YUv -dQFaJtgLjtv2kZv3g2TopzECBNDUoE8jmKqDEWxNqLfhuUdQfW9Bhyj8PstXrjtxpYvq1th5eVvi -zAAixc2qeqCCpZ0N8EofbjnwlUJ03tWG5GenB9vBxSs2YqWbm3bGQY+/5uIkR07Kct9+HqKjP4/w -uCuDxGZUWdR5NSnz9b/TTPanAJA/3Yfn3BteTEhLr3tZ6We9rMxbixZcSVvhu7+RObE3t71s0Z4f -1xRsL7hlQMX+wSp+9JO4/PHR6c6C2wc+bM2yndqYF333BLMu7vFnPx79nzmW6OsYHhLWVT6elRfd -2HS1JH6f4IrX3RS4kVZw18ctvPs9xDw8O9y848VXruiRmcta6MeZvpoHswN1T+f1uCx84dtTbRlP -ToxIqz9uA/F0QducPNFT8cbfXnqvD5b2G73wxU9mUtKFNXNj8oazLSNsbny756MBeksk/zbV5QbW -TPVlgkoG8iTA56DUb+PI+n/mBNplB5442FUU+3mKjPsywxJ+m6LgD4ZRxT/GCdCvIRR42QnJWXUT -65eM2Pz5gdb3Hnb+bTcz/eqWpfnjtAqV5GIX/e2g5J8xYgvP8JtTT8JTI38y40rvT3e1RPKrXp0g -Zt/6qa/5xQkt7sMvsPRrEWrEhz/mlU3vPN1VDzvB706NCOs/fvExcZ+HCE1LZmjijIFQuuJioXcD -TNKqhw7yDUDi9IziG3NaVMG2h43bslMbltTwhFFB+ZUhRvE5PTr9lAmV+9eUBPFBBsk9Z8XmnQ+y -y26OcUuvz0jKIhf7GpLX1LD0ZRnsXYBffmumszFy30ir2dbjsr8czslW1UZOiXKufLE0Jv5nFFV2 -4ISlr6laYqalNfe3TMA+9ENT1pXNMbv2lo9r5tbYTRssacOGzNjzUFv3huhtYSu+aMVIKVvWsGoD -4vJbWnjMCQ005hcLPvGcl1VwYVRUeQOIZx8DEuj73saU0+PChldBYfUrDSTmdICZfWuhpz4aWNeP -bkHTwx5EzoWwgQ7d83JIwc6Se/PKulcrVnj6jBr8dsePrd4L0FFhC7F8UgGNXrVAU/5niav4Z5Yt -3vPTIIs6fNaQqOTGHKA/94dxTQchKj4kh0Sv2hmgdWcHd83RTnayau4S8l/9gs6N/KMPknxpRFL/ -KNQLTl91sMlLDhZ43oDIPhhhcL+OcwT7ARZp2YQpdvPKHg6Kqh4Gexpf7ngZ7O9T7crPo0zStpdY -u2Yj1SybSTWLemz2iolcvmCl11l4TVE+EbJ0b6ijf0YDidUhMn7ra/h4zIDOPhfqqHi04wSnAP5c -PWcgFzYmvvmlE5L6/Isfj/gxSSOvO9vS9v3Imq+jBMTnIKVt00NHLNvJdXZuzZPxfnDa/4SF5i/j -RNimF5G1qAe/XdY1v17RNr0E4lHSaD/yXVt2zHFEzos/plTN5RsueKGFFnfazUg5FxBV3glKG6Im -ZDVRuz546ecxBmXDzcE4eHmXlq3Iqm+THNGmD1G+Zm+KW3XAM1ac+LJtH7bu3wXewPowmyWnlD4v -ibn60/4EW/xtjq/4MkE7nPlduqRvfDWlrHgQHGiMmjQw6rTEuiszSlzWvo/YsOtsiNnUVUfOGThQ -L7/+xiCj9G8nreyMm1l1cbQD9HBajnjv5lVfHwClneptzL1owlXcHhXX352QNj5aVjW/WTcjckID -sPd6SuGNaXlr8qYDX7hiQaYtWVC5C1ZK5aqLjdof5XLWPcy2eSugPY3Ygh0/j7U1xKOvWkglU7KW -KB065Q9h2dNj/eD4X6zEkr/7iXVnox9eioClvTg3I2mKAfT802FO9oUxccH9YX7eNQ== - - - NSL+JKc08oQSlvi3g1F2DZH25MR8d/W7rx5szXRX5WM/M/uKn534p6zp8U+9dS9+NiOTT1nYhTfT -n/0dURZ16ecdK7T5sNbo3zEi9PsQEbJnhRaFlZWvJmXlN12C6pvowvi/uhvT/3Tg884ZEZl/27EF -F8Z4TXcsuKIzQDr5m18V8wsp69WxYUHlIxuj6CGl4NmxtqT7v4iq3v5uI6b/PdXd8HDFAE1eMdZl -LOsrP3wZwjcfDHHIux58JRB3y3e8bbkr5pYPswpw9NphzZ4B4LARRMOyuTUR0D2QTWuXYNuNrQxr -G2MXlPUxS8bW2K1BTNHOIB06OYDI0uJzL8/0I+O9wrZYA63+5bCo+uG8vCxy3VQN8Ehz5pobkXPY -x+n7JFtwEKBh5o2kws1BSsumG1lyECQhfsww+J/HaIT1QVTelh9fvQm8NmzBloXN2NJlE75wXoVK -mNeAo3fdhIYvQzzutpuJXrHQasPGTuKiRtA6PUBKH++FvjYSc6+oUSlnZuTQ2BUjrWLbQanfBGxy -y89Abg/zeRteMm7NhalftiJyZ+XNUVsefO3OMB31CdBgn4IE6MEYFb0XZFM2vAzkvpvU6GGV3tIg -s/50UIvOTstqH2zbEDmfA3TchBaeMjoAit5w4cuXzKi0LS+qYN0DyZjRtrxftqEL9nwM6LoNW3J4 -RuLzOIO2HSSA/1lid39f4qm+Abnj8wSNEXYSWpactKZFIyFvxUoo/bYgNG0FGOT9MTb7x6RI/2NC -0PNjjEX7Msog7AQ59Hk9MWf5cN6hmXLYJ/3+hKTsVkjFrPaLwY+93PpbTnrZuRF+8YWZ/qZnczpM -ymg/PHpE2HJ/updbOiXrrJvqJSUtqDHJIUnFzVFR0aWF/tbXB34abMePr503gmPntNCUr+Nc4acQ -l7s7wqFuD9Hhay5c8c4IA7sX4HH2gqLenREOZdVOrli1kCvmFaiU8c7aJx5e6RUtPv+sDFV1hlKS -+osMmn/TRi25IW18d0zVFnNMVBd1tAec8IuLXXV/rBuRHOqDvj38nYdR+fGvSUnDu3FpzWOAj37v -hyb9YSNm/O1jlz8aEzW/m+lGJ7jF4DfoguhfyHnvT29ZkA1ziuqHYXX988nu0ru9zS+O9TW9OuZv -r7qtoFdeT3h67Sgm7d0fU92Ql0P82ts2bOlVPaLoEjnnzfHSyCsRWffORlS9uH6UUx9/PPvt7aPg -xMdHJzuAdeysfrgwUP0gKM67psfFnuZX3jumhD0/uW5sSZo1IHK0+MybQVHF2wMfHrLvJcHXzYSS -XQemYGmg4oGNHPvXuKQyctVMLJejy15NKlsKpuX1cePi2ugFGfTdDnARi+rGBAcz81Jn/euf5+Wk -7OEOVE6gszl1VQOOs9NSrliJMX/N9uXe/zwCSt9xg9NnZCUAg9bE7niZqKAMXbxmR1UDDAT6PIap -/z5OgHwdxdb/GKfhVyxtOQDDXF/QQjN3XWTwuqEtU4+NO2MjZN2al4Giwypw9KICnbxqFMCX1MzK -VSO7ZdUqwC1o6XXzakLekhaVDGjZlNkBxIewDpO2PcjBzynQud2g5ItmavH7L2Ms4ZIWnLDpAbhu -lEncGSE2hi0tsRs+Yut+kMOeVbbFAz5SDzA0dEWHzlscqHs2LEy9saxreLdqRWbMmPEFAJMUrtrw -xbOatg8Ho2T4jxnA7i3o4ik5OHbFBE5atwKMYEVm7Q0RGv9Z4Eg/hShYwOYqNgcJNQcBAmzVhQEd -jDIZX0MsxucgHbMfpKDCDlzZfpDB+DTGYv2Y4Aj+HaeTv47g63fc+JJVIyZjDfCnyV54tJ9Xe2N3 -EFPqkuIS/WJo1JySmBfqhr2ekzc+XdTUP5tRNL4IdtfeH+1qejijYJePybilkz3EpGUDtXzu8Nx2 -X839sLLl1ZqlLXfVCU2d0NQ+DcoaXuyPshmbgE+sumnNmx4GdMfPwB+Mtfd9GRerD+8tbAxh68NW -WMq6m1SzoMXmrOhRKQ526ZVuaPLJzqbU425aw63ZPmrBSAf8oxqVfW5I0BJlZ7W89beDo8J6bOaK -lVQxp4N8ABggZryvNRrQ3UVD7Y2P3Kya20CMTVsztKVtWknl6wA7TfXhU0b7MPEeIeh5sAMSs+ui -I4YPz6FJG59O9Ta8UmPSrxnJJfc93fhYBRvxCJaXeLK/tfJOSIZN1hLLLrCLPx4lZX44gk55dQSV -9OoEJundKW5x8pl+eM0VeG7SaXZF7Gk1IfMyveTZb0Z03O8mXNwJOTzuVxU69ZKXU/JgxYgr88ta -49tSH/zc25xw758Qq/1rkMVcMR7OD2h5M9mZc95FTTk/r0IUT2gIhfXJz08PSeoLPo8Qmw6A2DnZ -WfPMz8670d/65rS0/tnPZlTcqVkNLpdcnXi5Ov7eHwZc9qMtMzJ3WQWK3rWA47dM1R+NpJgb4pqH -J1zktKvrAEdhi2N+V2Ozor8MEfH/TNOo/4zjWw+8iMJNGyjdzkq8pkUnXZ5Stnzsx2c9VcATz5rJ -abfspIIni/2w5F0nunRZ25Y0CwQoN6Xw/tJAa86GjYUPSNtyFtT4UmD/Mpe0lOoNK7Vx3YzJm5Q2 -x+uQSZfxybeOqOBJjycGmnOn+hpeb3kOz+8xKXtBKhLQYPCdYSZ1zUWGOjnFt5f08PQxWVuVR1gb -v6RufOdhJl1cHKh8vO0APt+PLV/Ugj8CPJSwqK9/8ymIb161IkrHe8BvRjubni9pIUmbdkzFnoeO -/RZicf+7yOlds7elbrowpZ9HacRvYzTmPxN03r8zLP6PKRbn6ziT+mWKwfg+y+n+zzynZ8uDrfxn -ksX9n2l2+2cPvmauv/n1THf9o9keUOS8vPX1orrl7ddRfFNQSc5d1JKrdgf5tFUjsy6sxaZP9NTc -DXWVXJ6QlFxZUsDjZlSkzKEu9JvpXtSHTScHMTnQ/HqIl3s22J5/wcfLubBigqVue8gtOz42fSfI -FYxqEIkBOSJu08cF1qVjYH9MJP8cYvM+ByjIdQ8scwNgjiVnW66dU3Zz1UApmVXjssd7YO/8rKrr -8z2trxblmNSZvtZ3fl7+xQU1uWzNIWYCfFa2YWuNDXUX3xiXFFxZUNVFbrnxFeuDtObpAcibFQCa -fwTZdIDjq5atmOwZOezdeDfo+YIGEX9YW7XnZ2L2A3zuooVUvuZk47c9POqalVK/aKU3DGvYxc4+ -Ury7Cx41paIUBuTkLAsX8kCPa7llxMGeeXiQN5MSVNKUGPE2KAA9dNJb7moRlWeHeLW3VKSym/S8 -1ye1sLS/DvdtQolKnjeTy8M2DnTWJiY5e9FxnZCMv5z0isjDnmsz2oaXIUXN/SnlYU/j5vebdkL1 -nKmb4ZGJGvjNpRdXrJjaTXtT7Jy8/M6QMP+cAhJ3oqcp/qS6LeX3cUl95JiGXNKSF/v7qyt/RYhq -Pl7cMEBTxoT5t4LslPNW+MuTlNw7R7qaP552MJvujUhpyfWJL48yyqLu7riQuH+nabSwqvLpuCj/ -gouR+oew+uFRv6As0tvTHAfKfHqakht57EeAjPw2RAR/9hLrl40tHwfgMb+zCh4d5+c9OjIpLn1q -YJS8bPxw84SJlPNmb4gK2XawYPMKSKKHm3Gxr/n9z9S8h0cMuLhzM/2VLwnFz87YWXnv/p3m9X6f -5XV/m6QQdv1txasOaPqwpOqeDpdxekaPzEKWfLiQ9ezKz9OK5pIda9OHsKL83rKq8vHCQPG97sYn -J3hFt0+4WQl3toax1aj8yFOItOd/+oV18d8DbMaPMS7/W5DN3BsiQbe88OINR0P0/y6Sqd+mqRxc -1dsnoOznd9cceNy3yS7H1+lO5/9ZFdj+d5nZ8zUIrVzQFN3b8KCbumHpjzS4/CeLWkjaggocs2xo -S912o4sPfIjcf4PY6hU7KnPNyWgJ2+j1oX7sx3UHu3XTCWhECx7Q980vx8Slt63UgssKWNqpqa6G -l8tWGsjXWfd4sqc+8sBNrv88RAZ9DVLg30I08u4QDT1noZSNa4m5Cw4eedHd1T6uFzSHXV38HS+f -vm3DFe5YkTmf/LjqLXdb1o4Tlbfj5qCmAA4e7Wx+OEguPNvb8OEXdWviKSc+6c+Jjtx7e142Oexg -oaZViPgdD7Fuy4st+x6iIL5PULA7QVJr2NqWOdJR+WBZD87f9mIrg33NL9YdLMimkwU/8OIbD+fO -A3zTuOujgtcBjTptgqdsB1n01UEaagRgpBk1NHbaAE9bdGCKtkdIkPAgtWFkAP52WAqLnFezqtfs -0vbDuRlLOkL2dC8mAcCk8z0tab8rEJkXx2Wt74HXvQbi2ivA3ypntMSSKRU+fd5KLA676c3TFmbd -vJVWtTvCIn4d4wr3hgmgFRciC9AMLWE7s3HdQ2ncC9AQ0yZczpydXL7koFbuBQ77/aDzlgDWWLFT -6gA9UL2kpxQvmUhFMypMqr8P+c7IbbxtY9c8WNWjsgPiqvsmQvpFF63wzogY+maqn5A9qaTnD/dx -cn19nJxJNTHrwE9Bf5tg0Bet6OxZPTxtyYQtWrFRG1ZdLNSKl4sFPr9wrKfp1Yqm6e23UTx4srf6 -3nhX1c0ZRctrPSH3khKW8ZeXWXkjbCHXmMWI94LmjHMOXtmHtUFUyVhPw/0xSdPTqb7Wt7NybNq4 -DJO66iTVbvnJTXNaeNqqFVX1bYrJPaw53/G05cyqqx9PAf4/rwe9XzATCgMqVqGZB3mpIZQ/WLOh -KqfF5VenO0uu+xnpf3qZWeeGhJWRoc6al0tGdMm0VQDvguddFTclXAdyVOknwO7mNKCodQe6cMWB -KZ4xwNJ2AY7ZCXHZQypIFjj3xamK2IeXtlx4zP9ZZHX+dxqP+e8ovALIuQmhzoKbo51lD4f60XmF -bx4dr41/cmFzmCD8scjp/xwiYlcsDQmhjoxLDlTsqf0AFbk+wqVOGakVwz3I6GUHrf4wNq9YiEXA -3kcd6ikzueS6k1X5cNmALx3Vkcv6cCWX7JyaZ3teKvSw192SERK3akFlLZrwRYsOAWHF09G+7JPK -Jm09XL9CCgrp1OIZUy97wUAsGOEWALm05smyru7FuhmWPGukVw1QK+90tKb+OdrR/HJ+AP5xsrvh -8bSs+MHeICh7y0dHzVoZDRM6UuGaj0PZGGFh1zyEylUvpnjJicicUjVFrVqhyXs+RMmqB1kwbUYk -TZnRGXpexXMlNuPCvotSv2Gl1GzYyTXbQxQIwMXk9WEebdxArXEJG6IPRhmkL9McwZdpNv/L4ew9 -D6luxYEvXDLh8xb1lJIlG6N5tBf+ZkZBylk2CqDjwGMfv/z6RHfZwzlV3UsXL+/sWE/Niw03pcHA -rnxg59Y82xmmIfZG6KhNNxW070eW/DsNKf881pAWtjfFHH6HRZe0c0hOLgqp4HGfQnTq9jAJ/ilE -avs2QQAfBDG1G25k3t4Ivg7gZ9ysEvpu2YBI2XAisqcVja9CCsjbsI1Qugvo4x0vAw== - - - ftiDe/Ww56qPx5g2sZsWrczmJRu9cd5MqVlxUkB7Q2Twt3EWcyfAoc7b2M3rI6KOrQCXdXh+cs3P -pcw6yFXLdkzeshGWtOVCFWx5OQR/O+j5iAActWbnIhfNtMoZOT51QU/Mm9Lh0kfkxJRxDbVk1Seg -T+pJRd5OxJt5cwd53iJlhK0sgIUo1dNqdPKcAZN5uCb7ARZ5F9Dfa05Al/oJLYe1PutuQs1ekEle -9rIQQR2rfMZCLV/3UkEbXhrEy6y4MgvkpWULunTVii7Y9BCqlx24knkzNi+kIqTPOxjNqz4+byfU -PnDYVy/sIDZ8PeztO8vrWRsRCkd1XZignt/oUyBjB6X1D6fVSMiPwzNwMwz2QRBSvG1vTd20IYrW -7Li6GU07aEwuadPRYR/cIkjhP1Psnk0gx80qq586GVlnDKiE0wZU6oUtYD+B2Nm8YKPVLli4yDkr -H74M5JIVOxu8aKRXz2kImaFeZHRI1vZ2wUgsHlXT8kf6KYUzBlrz9gjwv4Amnzfg8lettHogxzRu -Dgv58042bM4lIExYu0g+haQpoJFTg6pO0KyBXR9oh8UuKdDZm3Zi3bqL3jqiJueK0aUX2XVpvwe7 -cflhE6EgJKt5MChMPT/VX3x/1UGsXHDycUuedtbasICz6mfAl5305pVBJmLFw4SFHZTqNScqZ9nU -HBN2tGWuDFFahnW4bDos8xI6O+rYpoXeuOXkotbs9MZNP6V11UtqXnDRGucdzOZ1L5+3PcoXbgYZ -GCC3kA/7eO54yU17fip0f5iB3vbRoYtWXO54Hzx6QUerXjCzQT5R8z2/sObhmKT6GcDaz2ZUdVFh -MzRjw0tuCPS3JgV6QYl7IzT0uotQE+qrfzEmy777aaT63eexxrTdIAGxERD3zjmloiE5o2ZCQy77 -MtVh+jotVH4K0YhbPmjOlrcleduLKNoP4Ou2fYTqcRnoadiEzPoUJID2/OjSLQ+ufP//r4lBV67a -sCUT/dDodTelZWdC0LPk5dDCLjZqOyAQfxoTSP8B4veWC33YqyQ37CLXLli5retD4p4RZWu2p6c6 -ZmWQCFrxUdrWfQTQsgNbteYmN6+4eHi3oPXlkBietOlp58+b6dUzWkregolaPmMilc9amJBZh4g5 -5+4STJnYDU4RKX7CouwLmQdEC3YWCNiv8rAFX7buooB3A2zap3Fh716II9g6rHGaEel3J7jiNT8F -tBVkEldHaMhpNw206KcjN4JMyoqX0WamVVwZVSDyV7w84pKNULIBcMOKk1CzZMNXLNmooM2gqG99 -tFOzFhCIFty0pu2gSLY3zuvaCuIhK15CXWAA/zGowCdNHs5c9WPr/5lp136f6XR8m25XfZ7ky/eD -XNHe4SyQYT43pORUTGg4lfMmPnTTK5Z8mxTrwxZE5pwGEhfqA8eNSlujZtVt8TtDPPaam0/bHWnv -3h6WeWYcEmHYygWvOXioKT2r2i6EPfF3tb2aUGASwzZGy5Ktg7nq7JFuDXFIm0OQjDU3qepwXppb -CopxUotvfQ/w+Zv+jr5Vn1S97O1WhcyduIC+HTzcx8iY1PLq/B201BkZtXjLzcNNGSjFBkHrA2cX -/M24mly+YOOj/D2o6LEBbOKMFlgfO7HhyxiHt+FnE9d8LPSUAZszqUMnhQERv+5r565625nLgwLK -6iCzbdNDw+yN05mrQ4SmYSU2xSwER1rZ4OhJPR8c6KNlLJpoFXsBatuGn0VcGmTB1obobf/M85UH -k1zRxhAduj3c3rk93G3+dlhPPIwsX7WBkhb0jdEz6qYXU4C2WrJzMUMKcqGGVH52VgHwBMAJ0wOt -0Yt6aOxYf/MLb0fNPUBjvNr2kBq2gfg8b6RUTWtI1WELCnRYe/5tkoz4NM7mLXnYqHk7D/BzMXPF -2y1fcEt7pu185IKLT1h2sUkHQRoJ8IPKWV3rxwUzKn3NSWne8tIRqw5s0byuJRrQfombroYPc5r8 -2wuGpnebToAjAa21CcTr1SE+c31Eol7xcMirQA4DdFn+hAKfOmcgluwEeMKDsU7j8pBQ0kMoucsH -JZ+ZNxOaN4aFgtURHj08wsRMmEmFS25W2xLAYGs+Hmt7TDywaAd0lZFesQI8vz7Epc05uehxazsq -ZGqHzpj5kJBazp+wajQjBjk3ZBJBlwE7nzeic5bM6PxtPw2+GeCx1v1s3MYwh7I/0+XemmLzNkZ5 -ws2pdtXWrMi0MytQ7U6wuKt+Stucg1QR0hHyQjpei1VMTOU0Z50FtF3l9hiXuzHKwM/byXUbQ1TU -yhATPT9Irl0eosE2ArzuUWVLzLi6MXLND7C3g1S74WNg9ia4Hd8X222H/QLWfBTIspsB3x6TuqdN -9NYpHb4cuB76+jCXvTvGEe6Ptw9sjbbLFrx02KwDV7DkJTWsjrDwC058UdjW8v7TYf35mNTxOdTt -ORjrMszbWC0hJTlzUsdvdPfzCvnNZaeHOlHZe0M8xraPgV61URsPz+yvAXyz4UAWrvs6OzxKRjkN -nHqhKurSsR0rGX0wLgvtBKXmsIdHmjBSi4MKRq5fykwLqPnV7OaiP9vrM+4u6WnU3YC4Z3uYQ9oB -8v7hPeEFC7N+Ui2oCSqElZ4eUqqvo/7JvLktY8lGrFiy0BtWXFzchJpXN27sIQX1HZCQnpy7ZBNi -ZixS1qyzgzljZbcMy9oSpjXUxlmTlDNmMihc/XKUp0OYvajpwmyYpfRlYx9/3tZFnzIichZt1e/2 -R/HNe0M0xAEQ37eCvYNrHkbrvI6Yt6CnlG0OUpt2/aSGLS+hPuykNYd05LxZKxO0ZBdRJhSE9KCo -7tamndKwNshErvtYmHUvHRJ20ZomdIScUYDNtzwCwWF//IMxFnU7SG5bGsSWrnjp8HWvqH3eLMQ7 -O1mplm5R9pC2A7zgkojXPGLxip0FCcmgMT5h9YMVG6Zsy88kzBvwlU5u7a2x3paXByGhbHtc2LMR -YJOXBznIsIPeELbji+bMsMTVw55DQZ5wsBca55JCY2ZtXewRzQB11MCrnzm0deC9J6x82Iy1mz9n -7e+2tzOzGFVl5ycMPNzGhFi9AcT83ZkO2+5Mu2Y9yKICNls2aaJVbYzwqHsTpLbtMWzNnFvMGrf3 -SeYH+/Urvl7jpKVPYpV1V6vau9NUfGniYG9XlYODezbeRy9d90oHtoNdmp0xUf/OBK8rPESFbozR -MdsTYu3OpNS3O9/l3ZqgUeatsMw5C7IwPMQijNuYDd5+aqqnj5wYUmPT1wEfXh5iIhc9DOikmYvc -GhVI96Ykrq3JDstKQCQPD/F4MzZcyYKbDl8OdHRvAX699f+zAZOw6sNWbA0jS3bHKOjdcbF2MyS1 -TRpwuXMWUtP2WId2O8Tv2hljUuZtlJpRHSZ11kNs2J6iED4tMDpXAzT82jCPuTMllO+O8tt3xvEt -uyEqZsXXKQ6oetu8/XqMvdsKVwnlmWoS5/mYtB86q5ZTh2XsDLuQ8sLXxUueGpA2Tml0Ar9WJ3D1 -CovMPPQbDx+W+mm007gzJpav+LnEgJ6a71ayc10qOdLUqwXL+dIECQx9y0EnFywbuoQ7XnH7po/V -Nmfh1ocUndUOcV+Oidubruf2ZQtQtHvo0qKfNOSml5uebvmGp1e96ukzjurFULe8H2rp7q9yDcia -gga10CQdaNS1y/KcvRbksNar9WvsA1aZnaHk6KvkTGUmvolwl1De9qCrgvZSi+5PsQq01d6unpp5 -La/te4jF/M8UW3A4K2Q7JJL7FR3Vrk5FxWCXss7X3Z4/a6VXThlRKYs2QuW6l8daAfw6qBfDbO20 -9zY6/nGwl1Zk5YOTJ1UU0JxZiJq1cVHhQT5zPyRS/pjpsAI+htgYhBd/muR0He7Rkq+zfVhFLzUJ -UE/leMwNj0xSP23vYq77RR3LTgYoIKfl+aX4tFkVtTQMsK5TAH06JiNkhPpROTMafPGmn88KD/Lw -c3YOeMoogg2rBXVTJkb1opsLX3RSGwCtnz1jppX5tR1NVqUWpRbJCx09XWVeeQ/I3ttbb5fr6bZe -E8Pcbad3Efo+imGcJ/7+bticvZMS9nJQC34eaQFg2EUPtXE9QEOsA1pi2U+HLfoAVvPwMCNGU/+g -ziEfMpr7nfK+hl6RPInPVcbQiLLHmBbpBQyIf606reovbBXijVrcXjdt5IPDbh56aYiBmBkk1e5M -8iSHva/2J8XGzRCDvjLMxi8GO7tCHjHZa+pGW+SSKvtAT41L3t0wYeumj9tlIo+8F+LtV6LdMjXP -LZdgAnoeMmQhVAQ1qLSVQT5xc6THuDHWP7I73eXYHhcp9ib4ki+z3O5P81Tmf1dZsv+Eeaqvs/yB -3UkWa32MTZvzdXVM2HqFjg5a2oSlnRCytVOGtNSi6UEBc2eCwVocRJdPmXAly4Pizq1gj319pF08 -5eEixgclLJ/FojDLRtgK8WibhO3LF1GM78Qo2eMBvDpJTTPn99AM8Ti49DaognSDXMd5JSGqsyTU -nhx7pyhnZIBXOG9qR6wF+n1z3n7NqKNPYNHIWpUKM1SuGGdLJaNgLkX7Uk7RJ9oEtgaHSNvgEXcX -e2U6iL7dXN5Pd6azCPb3FYXoK1UZbZcgFZy/YeXM35SUjtQ1b59ma6RrYMYmovgUrAKnvBek6zXB -5DIPqr/XjxIwzakcgv6VkOZKlwjGWwRMZxYJq3lZXUi8UFNIPP8xGX7i0ePCI5HXko9mv679jdLc -F61me6oHJSrIsg1XtDuCKN0KYKrGLPQaXUdfTi/dmCAha6K7Gf1v9TJ9nb6rO8evkEBmrArpqEUr -sfb3NyrZHe8VeNFTQSviASg57lclApo4Ldewlx3S9o2RLsXBpAjQGBTygr7+7Zodlrc32i6f8Rkm -BjU6pkEqKVTx+XFqTk+2T2kTj5oV/ElbnyCg7moY4AhjKfX1f8rxhFfeTkl+J4R01cQQZE9ru6lh -i4QxqWQUzusoJaMyaOyUigvyanW8QZ0MPqjtg5t62zONXewYs6yvaKDLXCqRBBtoaMUjbDP9Ppcg -TRXzTfl4rPxtdSHuZmEm/GZGcuvZkmzExdp88CM+ivfW3NWT47couJOuLu4SwG2LHkLttBGVNWYW -QL0mOdk0YMF08hwVHIohl0fR5fFI1hgM1v2oGWa4Ul4lOp2XTf85J4/68527cRH3bn44XlqI/ZPc -SrvbQ+PFOxWS5nGblDrrElFXBjm0eQuucspGqfRbFXyDwUTt61OXSTvU2dIua6WAZUhg4OTvmdjO -FCyY/KGusPVhaxnpSWUu5mF+BvhKeU7ZRSyo+uoAnxGt4rZX6EQDBK9O0702JlGvAlyyO84Vfp3j -D+xPsTg70xLr5kS3YyXQrZr2SQQBt0piUGowComirJfV+UHXo2rQDejRcoEkVS0QJdoGhFm2fnrG -uFVI2g5JnfvjYsWCt53vNJq6FCofs0s+x+SJF2pQRP/LxhblxTaw4hKksfdMfgb6RA== - - - Ujz417ws9un8MsUv999AIy7fyj365nXNyZIsxCkWkn3H0NmRNaaXoCbsSuWg2WlU64alYvlwG008 -X0AR7BcS2RupCFzgIbLVeB0HMd7Gw0w3US0DFxvqZNfLSzvPV5T0/plfIj15L7Ii4uat3IikRNLP -YIjjmkQ02jBmMclXvBLphInXMmoQQn1GBVelHeTSe6arEMzZ6DbS9LPaVvvFnKL2X4tKe/8or1T/ -VlDUezzyDfTI1du5EZHvUEeevydEXHtUE/Hr6acRr6MaTpaVcM9gwH03DB3StGknDz3n5eDsSmGF -olNb2snz5DHprhg8afAZjbeURWMupPJ54/kssuk9Had9xyCao1BQxbWifOovt69FH31+PSYiI7r8 -t9Is1G1cPTnS2mlBTpqsmkV3B2/ZzkBt+SXaZb96zGG16XtlAbREFoR1do+1SHpWCNLuRVw7z5XB -p5ljuCRHNI7giawuoZ+ozEX9Wl2AuZCZDDv55H7C77lxRbd7SPLsXjztjhJXcUmJiPt1sr8tzWG0 -9SsGXLjePn8bVzpWjqYOvahpHLhW16y+jSCPR9U26s5Gvqg5+vRp6fH8UsFvueW9Jx89q4k4fyk1 -4uK17Ig3CeQjlx7UR7x8iz6GQjqe9vUPE/xWTffcUFfPlIvd5jPKOBq1v72zbxZH4U9nNiOcN2IT -iSeePqs9nhCP+qW4XHkqo0D287uP5CN3H9dGvI7FHYlOZh65dLcu4nYkJqKgwv5rc4vlCgWrfKIU -K4oNnaL0ERUtJ6AipbtVMri0J4hgdcyWEfljia0Yx+2iStGFapDuUj3Idi4xAffT40fFRy5eiIm4 -fzcn4nkUJOKva6URx4/fjrh9O+1ITaP64sc0+qm7j6p/S8/AXpV39FeHR8Sd+xPCvvUhNmXcyG/y -GkzdVoNTptMO9/TJQ0yJfI1D5U1mwrGWuwik7h6O6H0Bx7if1NR0X455U30qMxP/R2pyw9+ZSfm3 -FUJmZdghwMx5GG1mvYLQ2WerpYmn8jCc2dhGwti9nDrlbwlZxKNJmaSfXse3Rlx/Vhzxy9+vIu7f -y494m0COuPcKHHHxdk5EWgr8OA2vfKrs1FX4NF0tnn5OjkOtwimUTjyvO1BFECxnwOjhly2ksXtV -cO+55IL2n15/gETEJxOOpmfzfnqXRI64Hlkb8RfwXhfuFEU8edUW8TAKc+Tha/jPldX8s70dlkK3 -Qg6dtUlYcw6ZJGjr4ZrVHRW98oESoiSYWYEZv1IMHvojv9H5W0KB9NjjWFLEmRsVEbce1EbEJNKO -PHlHiLj6uCXiViQsIjqVdyQqWXD00Tvq8dcJjNNQwFdlfGn6tLurfcbFo/usPQweteM5jaZ/TWX7 -PkCwI3ezygZORiXQjiXkdP6alttx7P7jqoinL5uPfkyl/RyXzT/yx7WsiF9+ex1x9U5ZxP1oZMTf -18qPvH6P+QOFNn409g93zdgM7lm7tGPUJqLqNQMQlsCTTpMu15BlOw0t9KXIeuTwtSb4yPXaJtuZ -/CLp8Q9JrOOp2Z3Hot4jj5y7nBLxKLIm4u7T6ohzV9KPvH4LPkpB99+WkUj33cK2qBUnDWzoEeR2 -S3RFnI5gAYq/FA+854vUCsW5RzHYE4/eIY8kZPCPJmfyf3oVg/jp/O2CI8/fwo98BJ6LiiNFXL5X -EfE4Dnskpdp+PLve8zuMEnrbLbGVD2p7YEsjUvXqVPeQzWlUdfRPE8gdK0Uw1lQUBOe/Uw8ynS0o -7zr9/A3o2OU75UduPGmIuBPZGHHnWUPEsw/YY88S6cfe5siOZdfZzkKIo085olBhf7cP7NTq2aM6 -XvWsjVbjV+ASFXzqMy5V+YIpDGaRxAs5EFr4eV6l+vf4NOZxwOeOxiSwjryIxkXcfdQYcfthLRDr -0BGRKfyIm1HYo+fvgX66+wp9NDFf+Utmg+9qcYPivpSvzJ9zs6kLVkTavIVc7FV21PbwVentopFy -tniyGEkZiWxCTdyqgY9dKQO5/kzL6fzpwQtoxNNo7NEXHwhH/jyfEvH7mQ9HErI4Jz4kIk+X56Nu -+o296FmnAKeT99bJ5GZox8AYnN01UUYUzKbCaKORVVDdxcRczq8xaYTjUcnYn8/eyzty8o8XEbee -1QP2Rj2aU8L5HQvpfi/vNDd79HL8nIMPG9OQMkfUxCyPhpGnValaOvqCYFq7NwVN1T6AIA2XqyCu -628zuUAuaj5692lORE4h70RWufzX2Bzx8WexuJOxKbQzdfWKW3iM7LG6g/VmVEVNnTHiM8JOSs28 -nQufsLCbLHJmqlzWkdkld4IYXaNFaIr9JYrkeAbBDz7IrVOffZlI/PXxm6afPyTjjiVms46lFTH/ -KmyUXimBKS+DUJZbFJL3fRd7MM8kNUDCbgF53tGaEdC0xnkMImhvh6yiS2ppFss8jXSBJ6mxTXPt -Y177b6+SGCeevEUfeRwFBuyh9siV+4URL2PRR14mMSMuPWmMOA/kqGdJ/IiEMs+JkmbbXSLDnWtR -u4QLzq72US0iwasAvxgyMEvVahOS3ztUyeifqkX2bpQ0UGaeVrU4zlY0mf7IKBadPHezKOLSrdKI -+8/BEdfuVUecv5oTEfWu7Uh6juBYYbH4FIegeTPY11k6a6JVLjrJtaYO9Gurog8s77OC6Cz9a3rH -TBG+c7UAwpyJrYSbHhXVSS/XtvRfbEYabqRWdl+8Hw05GRUHPZKczz2eWNJxNq26/W4LQfeSxnel -9A94kMOmLvCcm9G4McqmbU8K+4dtnXiNzs3vVIXIDGmgnMw0viWS5I9JDNVzGE5xr7Rx4F5WZfut -9BL67exSxk0ozfEWRHd+aKNbozkCdaxBK6t2G3ohQwYpbM7dwZoykvJnLbj8kB6bMayjFSk7+Kmy -bkVJd7+5iinQRGPpyodQmu1lbl3ftZhM0d9335J+ufyw7siLePTxhOLOvxLK+84Uo4aul5NGHhQi -NA9a6baCHs0I1WdXkyYN+OwpTf2bZQe6an2YxwnZOikGg1kkUfvJPNlwHVEwEg+lz72tQ4/crGxz -nc+pkp+886zpyKkzqRFX79YAsbnhaHQa+CoIJY4SC2UffQpR7ZabAJ23CzEeo15iNZjFao0B3Scz -VXdI3KVcsTOTxrXFoPG6h1CU5lEdRHEjpYj1+4dk9LnMAu6NWlDvExZNn+GUukhBvUWx6JH1A/ob -OdLX8sopKr8dkDdHDRs5VSa9EiWV9GeTcfRbWAj9AlMwUdBK8kaVN0mvp2c2nYZB2i8hsKpbELjy -Ogqrj+GyNfkKibHONtBTMe8gV+wN4ev3hzGVGy5k7oIRk75owmb6ZOhoh5xXbDJqaFqdGj4gUxTL -uvWlki5bCYttiEYT+x5CkeK7cFTPAzRO9prHlyaIu6UfOnv6k1VSXa1HacDPW/tIm14B4SBIwywP -wvNnHVTImKOv22vR99stWr7OMADr6mqPYzG6nyKJtsf1SOeD1OKusx9SGcdSC9t/fZ2AOB6dgvo5 -oYB79GOx8ERiefsfOU3KMyCcN7KnJ4gZNNnbR9Rc0KaPAgm70OVhJ65mK8gkjQ924FV9/HSJRJLW -rhzH0CXz5WiGPxpG8Txtxrsfvs2i/3n+ZvaRK7cKIl7FwI68T0GcKq7gXoVC5Pc4JMM7u7S/YkJD -zJpQgt+EbYSyeSOtesEpQAaMvCqVlPK6f8BQL+l113RJ7UWSAVudWKavEIoViXyJLp3S6csG4VRv -mqDc20iS7BlT6qjoUWmKtNq+SqepFxxydKL2xhjY73NU6r9LTNHXWRZ/1EDOdxr7ySaLQWiyaCm6 -gZ4StaQrXdHdkdrX25MhGzDVypRGUO+ArkYqNRX3qDz4PrONqDX01ug7Ea8mTdTiOScPvuDioZac -bJi3C/pqyU6qXxvi0lZG+KypQRHVa2xv0vcSE3vZ9VelfOT9zn5NAaXdlNiKU9xtotoKymAdSWBc -bxxO6EjACW3xjC7TR45EG9ep0JfbPS7rXLC7Z2OY1LLiAqese9FNe+NC5d6UxLM00q0dtMm7NLoB -RL9CVdvRYygU9QfBzA5/DkHgSwYDcTW/Snw5sZB6L7eW/QJK5sZ0aWRIt12CC6gx6WMdxVE20vtb -S3ZscUCFLw7puZBRUydiWCes8yg7q7waSZNb2VWtbhe8U4gUWQNiU0mvyFSp7jaCrD3aRl9fb8Wk -SgJa1okgO4Ni3n5AKN7yUkEzalz2goZQvedlMTd99LZJM7XUp+aUWCWUVFMHIcFhNIqUKi2oT9qT -oenkJzlV/BKPvgvi1UmhU44+7pKvnRT2CPBrPh5hL8hlfQ5x2LteRPGErPRuSFJxZ9mMy5nS4NOm -jazakLUdOaSlFkw6BNhxewfZb+CUa8Utt5X8lus6cdt9+4Aw36XraRkx0gqCOmzSvLWDtTkot+/5 -uNRPfkTBtqspJmxu/TBtgMXPWGn1i/4+y4K3zzBuEbQN6xhFHjUt3yEXlqq7+4pkQlWagKF5jcUq -75GotigsQfUQRxDdojKlHzjt6ixxV1/KgEyaM25Ttm/6Ff8fR+/Z1ta1ro2e8757lawky0kcxyWO -ezcuYJpN770XCVDvDfWK6AYMxtiA6U0IIQTqEkU0gRAISagXqkuStfe+zt84U/nAxQeEyhjPcxfN -OZ57ziZva9qd4VQFdR1vjlfeToQyARwLuNzFftBDeU/V7fle0gvZyCB1pH+e0g3UaudHFfbNgI7I -bfr4AgmnnoODcefYVN619o7W8NGBIYhsZJyzIvrI35kSlrmUrGqXgg051NXXbg1AXyqa035Vd2Ve -1AxDHy+Km2o62dCnXGjGz4sz9dyd5e7e1bkWtGqCnz3bz04Q97Bj5oaEqVpJG8JkeF1nNfBxns2W -rkPT6/7jrXphcIkGOjIwkEEDC+/SMKqM08zCDU33W52sv21j/l2je7m906F9025Tt/HtmqZam0aA -NC9wKnfmuRVGWTt5U9Hfb1R1CKyLjSyrWsjZnuWW7it4UMsCtdQ8hX61NYJ86tNyKadbXRJn6Fq7 -mgvblglqDOPkJNMMMn5XzqlZne+kA5yOHn0riFHKRz7MTzUUKkaYcUpRS5le/pa1oWjCbc03ohyG -tvbDrfZRp4ZZbVPQ8v3r9cKjnXf6wFaPxrPW+s4kryfIh5sq5MN1xcsAH+pn+4QL09048dg7yJRY -1Dw4Ka0bHZlhicZHyDJRG0g7x861rrW2e1eaWk3j8JjF9rzLiz0ViVvjsOdSYenVxTfUVPNkG3Vv -ml+1NUp8qX9bfmvlXc29XVFDlWmmnagbrasY5aOfOKXvu4KLbwePl4Rsuxj5yjwCeWQehzyxSojJ -B3P03C0RNW+SW3Tb2IvM/rzIwfmVxGz3Aq3AtUAr8uvYaJuaA92er4fvqztDuY9TXkM9C+j9cosU -n3iwQM70allVXjWnxqfjIU0zjFzrfD3meFlIO13hk4+XBSTHAr18c5ScsDZAjlkfow== - - - J+v6amONInbp9jS9YFtETXPI2dWhGdLWGWKSeQqfvA2svXEYH7E5RI7dGOcXbY3WZnnl1FJ/6AyN -igsL6FhQl5wWyjWt9GnrKNYFIcosEoLXRxg5a8P08q0JSvJyPyp8uZ8YaxhhpqxKOsmL42+x+uHm -wo1JXp5toW/IMt/Vblew0ebpmpc7gwW33FJSkV/bUne02tF3YugcPgrNmVLjcswTsFi3vJ7q07U0 -+RYbm20LtZCdeWblxnwXxyB7X6+afA2RvaVEbosbEPa5RrxNyoTsSvGFbiUN7FXTQT51HQ54vqEj -QzPQ63zYzhQlWd9ddG9/GpF5vEKt8er4RMcCD7M2gAhf6a2JCKwJmr0rglqLBOCbCUrm9jA6wauk -gkP5HT4tC7o/h4uzzBKTgit86qmRz3MqcJm6twU3tkMzDKaQLz1ySsmXTS7NvV7HXpVwS1bG+SXH -W68HbRJC6lZvzYO1TvBtVXPJDWMv9LF3nlYS1NWRzBIWRNZaenV7mlB6oODBt8YQT9YHKu6ufCi+ -Yewvvf27gYn5c7O+9ct6Q6dfz0AH14SCk+1u5eFqy9u9KdjL9bcF11feFt8wjVY/C64yccc7rYOu -ZQH5cINH+8PaOnq60dh5IMVX7IyVRxuH82+YxsHPj5cYkLNVNvbzprDJtdjQaJrlVlqVfKxvrXPC -Z+xe8G22DTiXG4X7cg5sXURJWRWxSvf1bwfNmu7ubUUT0bzQgNmbEyJ8On7t0TKXfqhjkwIKKuhI -R6862etc2BmouuMU0bMB7C/qIqddn2YV3nOLOcX2ydp0l4Sebx6lpe6MkeI3htGRUkHhFa+kieiS -1VP2RfS8zR5sjHuGWhBU0soDqtqi/QlolKIt+3J71dO/KeqKn39dbqw/XaSCbJNl982DeZcPpqvC -XDJShkcpQPrUTUzrLAe6N0346z4hj4IJ8qko+dbpqoidkcqwfWCPdiaJcWYRNeNQz8UE1CyoR86t -PpDiMnZGkBHrvahHu2OEl04Zo3RtABmpfwu+bhZR0jeG0Bl2MSXNNo5+sd5V+MvWu9Irxg9Vd7eA -x5gnaZnzDVnf704gUlwLAtzWAC3LLqrN3BlERdin8PF+GTnDO0dONw0hnyw0F5wfpqR955Qwy06X -mxsCWj7BPktI96uZYLeMlu+SUNK8CnbV4hAmc7o+/05ojsjWR3j6wSQ8PiBHp3rnIUm2mcLok+Va -iE/NKPereaiAqlngVrQ0HMjriaYpcpp1ujLSpUBkeJbr6E59A900TUy0TOLSvQpGjWUS9dLQVXFr -ubPolnsWEeeZQ78MKGglwN+Q1mly5sEcLdel5iHMYnKuX8tCHhs4OKeMVnIgJqb45vFpXw0M9Net -ugZgjUsdCy0s32J7u1tdR/DIaWCrBJNglxLTrLP4NLeCkueQETOsElzizjji+fEKr9avpYH9alyh -ZwGRHQhlQUvxKe55av7ZavPrk43GNtMUNmZPRMr0Khu4QN8SndOkNPc0Ls0twaWbR1Av9iYJCQdS -Rrlbzgb55OScLyts9KmOXRNcIGVvvS+4Zxkqf77dW3JvZ6jk7h9mQdPpOpdrnSVmmkbxuT4lE+XT -EkuODfiyo2Uc2C7DFriUlKLQzJXT9QahU0rJWx+ojDH0lyZ4FGT48YpQeLJMxzhmYEkHM5AX62O4 -RJtSSD5cb+3+YmofC240tbpWGvgunaDWraytPFxioTxqFsyt4hKt82yIe72lzbvxuntPFpqFjXhu -HoaE7Y9An9pCc3Tm8RlfLcI2lxgZfTCNT1jpQzxpR8d+N8ste+qfFcLcM+xC7xyrxPgR9Xh7AHrf -PAJ7ZBnDRe5NMLKXu1FP1t5jn/skjYQzVTP9FMBi5xwiTvs67byuMeX75dd5Vw4mSLlumQBtE+Ne -WUbBjywjlQ99c+iEoDyUO4mMNw7URK/1VQHrhHwWVHPgQQ0XbZmCvTAN5FzaHS66eSCGRrlltTk+ -Jb3MM0/IsInQUe45PqDhBFiriJhgGkI9AfTiDW1H/o3l7rJrG/01d1f6IA8+4OJ/3B8hJDgniYkr -rXm/zNITvpsgxX07TU34fqm14IqmJefH7SlkgqIHEjeAS7sQkPFhbgmzxD6JTdgbLntk6My6pW5M -vaBvzfxhtav8hkvCKt8dx+ebgfdsn8EkuOdIGdYxVKR9FB1hGcfET9blXO7DRX9nGkRkfV5sbT1S -siAbH0oeLHYkX1r/EH/JJ4e8ONKQ84JKaqVXRi0LzXBwKhpIDlkD+fOigHZm4GC9Ojb8rxm9C5TM -oKa2bHsYGrbZB31gHedC3RJOdVBOzHbNQF/sj9Q8M7wtumb6WPMY6JdS3yIHPdNYfNk4jIw61HGQ -p4sNbO9cba5biklyz0LirePlkfZpYpJjIXTPYwNlY4yYsDOGidyfwad4NRy4R0mv2h2rijF+rLi1 -3ltxfa0PdPNkjUO2iOGx+9PgcNtMTUxQTS07UtEqPy8yYH9ucplBDRlsHKy8a5/F5Z+sNLe6ZczK -AxEhyToKj7BPQp45xJj4Iy0PHVAyoTsD1VEBBSkbWLOivVF0kldKyNruK31mm6hJ2B0EPXNOQaOP -1KSqvbGq6I2+yjuHWiHPr+HhAjpSkUeNSrFJINGmYUi4a56U7dfRyn0aOsg8Bnt+tEpFArzHOluv -F3jUHOzuBOrV2vvSu85ZeLxXV1d/uNpQd7rOIR4vUaHHGy2dvrV3stPNLvF/m4Qtp3pCiUUEidoZ -rX5ql+ASAB5j+5f5tF0xgBkSQrpPQa0JKOhgv5JeHsoANo2BExwSWMTiu6JL+q7K37YHMREOEafY -OkFO3e5DhrmnuWX7k9QU2ySwrmOwx/sTuJjVD/AHqhbQxe2PhJhDuZBgGca98sooOT5FbeGBiJh7 -piQUnqlhcUcqbNquiBi/+RH++EjJgQUW6GX7Y0CfDlXd1TSn/jhBef43uSDxu2Do/ng1C6QchL0Y -Zuf/dDjPAH9epIHOliilfhU6aX8S9Gi9K/+X9fbCn3eHCLFrg4zU1XfI+wfj5MTdYeyrvXF0yv4k -Nm5/DPNiowd8c7W7+pl9nJmz8R4b2Qt/+fdhZNp3Cn7xr4Y3xTctQ6CHnjlCpk1KTJltLb0zSEj9 -8TiU8z5OTF56U3hxqSP1nKou9Zy+Me/y/hDk+eECMWMD0BEiRsq/dO1Ft46Xmci1ftCDMWrqtxJO -9r8XhFn/HsTF/Mv8seqJW0optAGcuj+BT7SMkwrs0wysU0IuErGj/y1mP/1R2xj1g7En74pXRc5x -ylgVxn5y7m4/OuXPtTr2sYFLdCkxKftigG9HCh5vfyy9ttoN+s0mqkebBonJxg9l13aHym7YRqse -aJsyz82yEn4EtPJD02Dlc01bzk+7I6ho3wKnyjwC8ME4MmJnCBZmGqi8bx+veHqmpwGeiFm9PgyP -nOLl/mCV0IqCeh7Oo2KCTCPw8JU3mb/ZxsFhzonqx755VNzJCgOu6sy/t/ShIu7zCo90qCHlArVW -5lfhs3ZHiu6YenOv2ifLw471hFJNNziqsTrqN7+Sivx9s67u93VurUeKT7VNABz4JvfWGDbs7zYJ -Oq6uKup83rNL/5xvKY74c4NH/7TEgNrGoZFqdsoFCSn6e7Ug5fudj2DgOVmIpbfguxsD4KizNRbl -63Zds1dWW3iorC12Aly6/Dbr8vZQ8e3jDRrRo2cQdqdIaS65kORVt3QeLdU1/GeDx/isZ+Dt4+C4 -vcGCu4aOjAt/7rR89C+1vD+YZ2OCWkbN4TKlyqshV/lUpJIzAxV8rCUX7wyWh633lN4I6niU0Mz0 -oDakWehF3gVKtrG36JpXScl3yan5Tik5zSGGv7BOVIdp21PPz9IT/2UZpuaufsCGL3dUX9e+Bv2q -agZdMnTD7poGSdHmYUrc7hA5XtNY/PNmL+yRdZLwyiHCvzINVdxZ7sz4aak986edYfA9j5SQfKIQ -Yj0SdunOIPqpU0zPckqISQci+DOHqPKhVwqJ3x0Bhy00ZP84X1f6q0vGBhs/wp7uDCGeWcYQEU4J -OnZ/FPJ4pxf6wDREjB9hFVzowyZ9u9WLinZJ2CUOMS3bNIyKUDXkn5fWxn2721d1a72fGD7MKb+K -Sr3//0pZlXcP57gglxgRs9KZc0HZmHhujpt0TtNScfNghgc60TfxHDO0HKeEmuOZ4YNdE4zMYxm7 -3DaGjpnjJ34/SY/6u6417wKw71EWESZO3Zr948EU9hWA1zm28ZpH2qaMi5s9hY/3x6teGPsqb629 -q4o4Vnd120VdjcudpChdKyZ64z089lhJzAssoBItU+Cnhp6Ku32EpB/eYxJ++rzSKDwK5VjNIV7O -NUdenKCE/bA3kHnJMxs6r0rJYBTe+a/5loJnh3omxC7BxE0xUr6nZtz9hpZ29x/j2Ph/WgYhAKdQ -i42j8DhIyrVv1nohr34HtPuhBp+/P15yf7079aK87uX3w+Rn/9S+zvjFKqbliQWll9Xt0LBjdYvg -UMGqdoshUabejItT9GffyASZP0j4med3xxHxbhk+S99RdPtQS6851AP6bwIeuQfgv20cFOOSVCUu -dWVfErFTL/pUtaXb49CXa+/yf7WOQ5/tj2CiLGPoaPcCNmNvBpfWT8z8obHkxX8BvZzrkuHLjAPl -94wfwfd2gH12ipFxrjk0gN+EIvssKk7VlH1h9X3Bs//ssNmna3Q4wM9PQ3MKV96U3dA05189WeWQ -DwE+07wHRczyc348WuKzvmzWNbmkkIT9sYLr1tGqyL1h8AvPLCzFr0Am/7nNZci7walc8It/Lw+g -Mj/tvFUdGpo7XLLaYvNIyXVFXcK/u2sefKdsyb5/uMIiCEFh3y33gF8dqrnwIzW72jcLee5XUcsA -fi/2LhDTdoaKr2nb4r7txdz7P4PYF99tjOATu6i530t4oNu7Y7TU7RFi9EY//JGiuey6vKHookJY -9NNqe/XNvUlqsrK96p6mufCSS0rJ2R+hJFlHiC99c9gEoDaj7ZPwCIB3Hyx3lFw8EAM+Z5aea5tC -R6/1ZJ7Xt7z6VsVL+ddyQ9554H8Sl4eQUQOkhG8WX8NeADULMg1AHhu6in+bYCR//xoa+W0H+Mnf -pNzsH9f6EU9F9cXXJYLia9vDmOjlrspb8rqsnw1dBb9p2kquTjDSvvsAj/u7thkXPi0suTfBSTxv -+lgdfiDCpjmnSJmuGWaxTUTIdkgg8ebhituAlovbGiYnTNELrpv6UOkBwEubBquf7HyseGgbqw5z -jEOfKurSzk2Ro78L9dv2R/AT47uyayO4pF+GEJHnlpvSfvGI4dFnGnpFUMmqNvbjXuqawL+5JzvZ -xh5SmlOETnJM10SsdBZeN3QW39kdhAM9zsg/W2lqcMzVFuyO46LMg9Rk+zAmyj1VcdcyVHpnq6/s -1uo70CO7mI2yzwrR2i7oLePHkM6kF611I5+peUU/rLRV3VrsKL+/+Kb4uq6r9J5Tyg== - - - qHHN1hZt9YHvbH6ofLT1ARpt7Kl+sPmu6Kp1JDQ/rTRisb3wirEXEh5Q1pEVzeXX5vlZPwM4/hzo -8QjLGPbV7jA6xgF4C0Mf+FEPNv4nyyQx2y6h5o7Rs883Fj/5P33QmL9LaCnfawB8WO+DxJin6cWv -MYmXuCV3/++xjgnxzNNKDR+qwud4KZflgoyflIL88ypB1nm/gljCA0X80Fubev9Azqy2zjALVHW5 -F8R0QONz4v6taUn5Xi6I/sYuqkz4fYtNsktJaT4lG2rsrX5s7Cl7vN1T+cwyUJ0GYH7MypvC2xsf -8i/9Z4/D8mnIoLXeyluOWVTy8VJ75/Hi69bfjcL6oJ6QD3iAaIsYEbk9BY/06Xm0042OUb+aAbaJ -sfEuKSLRO4/JcskwqYCngR8BHNNHjPxW3w2KCAD+0TvPLA3VbUDNqHQvkNL/yjqcxiYZ+yoeaV8X -3AvhoVlMzx4UVF5StiBeHMwKarbHCS8X35VcGqUlfDNMjvuHsrHw5833qOemMUbadOgcFi/3fFBT -T3EBtW0ewEctdmZflze+/GmlI++8obPkl7W34Fs747h4TUfl/a1BdKxpEP54vbP44kZ72dX9j4gn -jmlCkv5d0fVp+qtvNrogL1wz3DJNa/H5pa6KGyJuwZU2aPwPw/j4S2vvIBHbk6TEEX7+5Sl2wa+7 -E+QMbWfV405E7N96kJH/NUaO/8c0NfEf2saii4ZeXnYjMvXca0TsD04JAxYENIZDhAO8Bypypavo -2vq7gsuWkYrbLikmQf8e8bChJOpvutdVcR7Acy6/Lblr/gjon76Sa9qG9J/fQ54Dzx374/og+GE3 -Lvb7KUrqL7ZBcrKxE3TbNlR2xy0Ch5t6M58ZOpNuq5tSfrGGMq2GyEX8svB/j9OTrgXkVJhnnlLi -ncUkemZQcQeTmJfAXuXquouuK9pLrnRhc66N1WZe9wK6AtD2LwGeij5W0Mq8s7RyYy88VsJK//5g -hpK7P80EL3ZCHy+2VlwzvAHfVTcVXl1/V3bvENBDHhmpcKmt9Bqw1jf9cibYOkZMWussu7bSnnPe -0J7xg6oh9tvl9qyfzYC32ZsmpjZXv/xnByTmp91RdEpQQysFcD516U3JA0Vjxs2194BP6UNEumV8 -9P40LW+ClfPjYG3mZd0bSPRWLyZqbwQVvvoBEi5vBT3pRL36vocQ92tAy4GbxlAxYm72+XFi/Dlj -Z+l9+wgswj4Ki7CKkNGt8LhzM02VyQ61gLQzTklSN5b9pmwserTYXfFqawAU7pgCRX1eIlX/vskm -mqeICa4FNgTAxAv9kPC/Swiv/rHakvfrYnPezZW2/BtOccXzP0wM7PYkImlamHdpT4zJssmaKKFM -lsMlerVXg022iaHPDqSouMBSLfjzdmOHV8NE7c8g43wqasUfWwLuqYFaczBXE3UgBUfvjOTe3/pY -esuvpsOOF+tq3TJqHsCRRf5QFou0NjP0HU1QIyQF5OxKQFtn7o4iwzd6q+9uD6HDrOPkFOe8ELEz -zcjcFeHj1z/AHi93gm/tjeNiXYCvt84Q4td6Kq5bBmDhJytt3SFvbR7ERapasn9RtaT8sjeECHeJ -qbnHSgF+V0LJk7UWXjIO4dP2ppl5ivriH2foKd/NMFJ/GKVEfzdFjfqbgpf+414/NsEt5VXMCfIv -hOYUOaQc0PYA+ZUN8B6A74xZfAe5t/S25oZljJJsBYhupZ8cq35DTVpoRj1b6YQ93u5HPLFNEBO3 -hjlZ2rfIx2u9mJeHqhahbZaYbJvExbmmeRDnhACxO4AJ3+4H3drsK7299gHw/Z2YyAMJD7U2RMx6 -DexLP+LFN9vvQbfW31Xe074GP9wawMZtTZDSBpl5AFZkXHBLybn61owfVjpSzhl78i8bWhN+tgzm -P3CK4BlHWj5F04+O7EAknZsXVkR8WWl951kgZG++K/517U3hhe1e8E1jX83D5V7oU2l71c2a9Ed/ -Q6bePn+mpVUeq2uLPXOwVzsfC+7P0KLP9UHu/H2BFfOtVYyJe41OvQSKvfG3hebSx2daBsQjBj3x -SUqfeGfKn6gbEn6axD3/v8uvC696FBzoRj/qyWYf/Ll9hpgPeOdil4RU4J4n5gJ1krDSV/WwD5/6 -7Tt06sXFt4gnI+zs39YHIJGWcVSaeQSaFlSQy09DGe5KHtI6jYnXdRZcMI1horeHkK92+hEAJ5OT -ZxvyLoo4qT+ufSi97w59tzJLydR1Q24uf0A+t8+S8qxDFXfXO3Mvr7YXXzH2lP9mnUJG+DWA3lez -EYae6juueUr+USgnXVdX65wlJNvHyh6udyXeXH+bc8chIaU5ZIyShfqa38ZJhefM/biMz8t19Uda -Ls4hxqQutqXe0b0pemHoq3m8OYZM8uv5HJOoHrP8HvbYrSQWfzKyyX+YuNw/tjmsTxtUjEdFKDb0 -517Vdyeft0wj4udbi6I1bwvC3NpaqE/PqD1cJGC+rDNrTwy1kH0RgAODpdd9WmLu3ig62jJGeuWQ -0LIDGi78YIaa7pHVZh9MAxg3Dn8WmCdlHCoY5Y5ZTql5nJYUUAhxlglKympX9fXNDzW3tofBd7Tt -KT/rGpMvOEdw8YEFAWa9G/bQ9AHx7EjBR3pk5MyDKcIru4iYsPim6IZ5AvZsawh81yrCpzrkfIi6 -reKSqrHkiqGz6oF5EP7cNkxM8EwxS10iUoGhu/zBSmfZde88tcgloxdaJggvdyexrxZ7IGHqjppH -G++Rz4/VQsLuNLtk7QMxfH+8Gb41ISg2jZJiTcPwZ0sdRVdMA9UP7QA/OSWUtKCGVb0/CYvYH0PF -e2XN9M1eesFaJ+KOsqHo8jQz/sd5XsoPQXkj2aFopq4N09JldWU/O6eoWUFAlwY09PKDOXScqrns -14U60FVFQ/mvlhlylm2elG6ZQgHcTKs8XWppPFHzsYYe0NNBcvwPM7zMC8ZBSJh7gQk+XWxpPA3N -9BxBPrNOM0oDqtcNnvk6xGYvLlrZgXwqfQ27+4Gc/62iHQJoYRrIMll53zxWfM80UhEJvN9Y6zD0 -qXcWnbQxWBUu5udfGAb6E9C10EMVpXinP+/GUlPs5c2uzNumgarInQHwE/csNjU0e3eIkfaDtKHs -hV/JQRxpass8MkKqvjPv6lht1L9nuJlXFK0lN9XtkKey1pr7Vcm3v5vgpt49VuFyjO+Kb662/VXb -vy62FFxa/1B5zyWvLRuuK7qV/+Tn/4eT+/hbh4QBD2g4GOtEVbixL+/m8pvcn1e7K69vDaGeG8fx -L7spST+/gYd/7xAT031SVklgjph2MA2L3x4qj7SLqqP9CnSCX0PK072HvwK28LJDTMk+VGEzgwpM -welSLfx0lY21iCgZ6tdVd0WM/B8OJEzo/mxtpnkaH7c5WPNkkpn02wgj9faBFJt7vEyvPV5hN25O -IFPGuKkXLRJU8R97dc1fTFy6VQJLVLSkXlh6m3PXNl31MqjDZRuGYNHw1If/4oOj7p1ttfQDnqbt -0yKm2K9CJKwPld5a/ljywDgB6MhZZhFQl0/tInqWZ4EDcim5ENMIIcoxS0x3TMGigjJcskOMilv7 -kHd982PRrc3eqjueBVaFdYaWZ+xDPbGM4F8C9Qf4V0qmf56c5QSwxvCu/K6Unfrd1nvIq1Ndi9Ap -I6XZp/AvHSJy6koH+MHBNCXXvUAvd8lYpaEZOitdoKt7Y+R0t5RbuT0AC9t4W3FjsTXrlwVewnf9 -6Kh/Kupyr7hnGWV747SszV5M2NGSgOzTMqs8itpipxST4pfjsgBvmWKfIiU4xULISh/1lXmUnHqs -5aH8Ckr+2RIDcqxlw20ibNzuCPi+bQL6xCkmpe+LGLl9pKwfQzNC7TP0HOsE+oV1FPLoUMlD7QPa -W/+u8vYkJeVfAQWz8mCOWrgLfAablJhhHETGLXfCnq6/g4V7FaHrj5wqMyDuXDI2xK8T0kN5kos9 -yKRxbnHkUjcs88sGn/fHJo9zoqfjPXOEwu0R+DPLLAe2Mc7FbwyQUnVtsIciVsHFUO7RcjvkkVch -QAL4m743iQw/1PGIR8tNglBW0WY/+IFUkP7jJPXFN7bRksefDKTSr1sc6uog6jnA60/88zzE6WKj -4HS1nn+2Sod4laiU3dHyh+b+yrtHGj7JucDCSAR51+3T5EznAgPmnKeW+1RMYC/xaeo3uU/krUl3 -VnoyfzvSE0GHWmLp5ofSu+ZBWEZQxSb4FFykR8mDu/UCgqof+vQ9LuF7Kb/omk3CrdgZxUbpO0qu -LzTkXN14D3oM6MmSgIpVZZ+l5EhbCq/JO0rCPXIu1DxCeGUeqL6jb8//TcyM/2W1K+/WqZ4MOlnn -1C4PwhMkgpLrB7PUUqccn24ZgySYB8uiAb/wauNjzQN5c86VpZ6KKMDDQPuY2TdH60qe7ojZVR5V -Pd4tY5Vvf4S9ENNTL0/R4i94FMRcv5YJPVxhow805EKHllJ0vMYi+3R09PESmwhwaaVpBJmwOUyM -13zAx+xJa6tON7j03bHqmM3e3Mt+PQ3pXamr8280tjkWueRtKafSORvyLpgkv5yQDfBezkYvOsw8 -joxcfVd45WASFm4ehT/XtKT/uNKZfWF3GPosqOFjPVo+1jpLz3bPc6t3htHP7ID/3p+oeqLvSP9J -0ZDxb4UwG9BXyJSTpSahLZQ3JmMU+qTMIvswPsYjphUFVRy4XULJXH0Pub/8pvyqTUTL3x4hpWta -S34x9tQ8Avrr+eZb6Ivl19Cnu/2oF14po3R/nJBoHoA/PlriYg/msPGOGUSEdRL23AVozaCSnHek -ZIE9Mi5Y/hp8Z7ED9Dwwzyj3zBJSjnSAZvlrri021jIOj/YtUIucElKqGcBzGT/nh4CSBQvlu8ub -S64sd5VesYrQUbuTiGdrfVUP9O0ldw41rJo9ESV9Z5KUFMrf9Knp5dZJ4PMOoyI8s5Q87zy3yj4t -ANklPPDaEDZ2/SMh1i1va/Ao2luOdM2Cr9t1dYdaUqF1HPLc1A++b5VQijckPMSAsPLROLfoqkfG -R9inanMck4RUzwwx3TqFTbKI0NG2WUJiQFdP3Rgh5y+9hUeu92ITF7thSaaP1UnHanTeFyO55miF -BNa9K/tt4wM0Nqhq5B/I+DiXilZ+ssZAOuXoNMsEKNw3h8o9CZ2BnKEU9xJTf3DK6NWft1u6g0tc -gl/FKN8ZR8TMCF5ekvAjr1gnSsL+18zjfjKwCS4pLvF4ScAO6DnEwyU+0aVkV1rmqFmmaUzMxkfw -vdAsrJ0pWuZSD/bp7iQPZJupQ3sXuFCfnJRjmURFbw5AHwK18zSoYda4FQKM7i3s8WJnxTXfAjEH -8GlRLhEi9usKHeHVEsqtUmSsRYR6EcrbMgO9pWgsvayuz7/ik+MBP0Apci8QCw5XmATPMo/Uy8y9 -MSKoiDBOcqu2Rpi5Kx/wz7Rt0NtSdsFlVXPR/TMDC//7trDh0waHbFcRsvblxKw/rQ== - - - wrZPRg7zYAaXtgHwoRrQ+gCfR3n1HOQZ4Em8amrpWi/4vmkUFvXZ1Np/vNH81q3lkLZF6JfbU7jY -3fGax6vvMn+yDOX9ujdUcdM6ycx1SOvR5gl2yb6YmeeaA2p7Ev/KPYtLPFTiM860xMJQT9kkhGS3 -uoGy1ge7u9lXfnVrqPTaZn/pLdsELjE4Tys91TCqQveQ2GXcCvd8HRzwLnGL7fnnNc3ZP5lHwWFW -MSpqexD5BPA6abvjjBxlB/iWqqXkF4+UD/JK+dVeCR9sHSEl9mFiz7WDn5ybYyb/tD8IeehX89Eb -/bBHm92Vv/lDr2Pgkk4WKSV+BT5zewTy+COA/WJeyc3NPmz4nKDwZ5eMmHWk4yAO1ZyaQyWtxDGD -id8dq3lk6C78WdOQ/C/3PCkPwKRSRQfy/lo/IdYxR831ymvzD9XsGockNP8MHAHUUYR9trbobK25 -2TkPaMcZ7Kv9cWyUdQwTcSRnlp+ohSSPnA3W9YBvGMewcX5994hP1zNxqGvhna4BXKAlFwTniVnB -+dqSAMANlgUWZHEIFbs5Ssg6WWzg2EWIKOt49WPLcMXtrb7Kuz45oNsMfHJwUUid74Dd0b5Bxzrn -mgEPKUSd6jhQvwqXuT1cemdvHPTIO4/PPVvksU4ATb8+jIuxz9XmfjUKBScrLOyhGpflkFTFLL/P -ua3pyrqy8r7ixtctYYtdXlslb6u8vfERH3uoE7IDWjY1qGXiPHP4dOtk1QvvLCbJIyVneHRN/Omm -opuy1pIor4KL8mt4qICaATpeZuFPV/msfQk5fX0IFR7KUg4ut3eHrvu452vzXFJqHuB3i480dPDv -q3SkX0mvWO2HPVn9CHns17LREm7Gbx9qnp1b7Si9bR6tDnPO47IOlzmko9Wmpl2gVgyDtQmhfvcv -8nBuBTHTLoEDfVn5yDJNzLAr+UiXqpm5I+KUT/FBF9XdpGjTdANkb4KZfgzoYecsInGjvzLMOotK -dKlJ+UebDW+Ca3X1up7qcGUr+BawrvXBJTb7bJMnBLRYi1dHKtsarn5kGoM88uiYCI++nrczRUy0 -zVGynTp69dE6n7U3RU01j1IS7dPUTKDnQYAOKgX0UZ4fwCO/ngkO5TvvT2Gi9icQAF9UPfRJQI8C -MkS0b56Y4VMIUHYxI8etYFQEDFycU03Jd8qwCdYJ0H3zQP6v+2Owpz5pE9Yv7xDaJXWIjUFq2s4k -Ld8mI2fvi7GxpgHE4+2B6vvqloKLqsasn5yArjvSCcl7Imre6gfYXX0H6NcxasZPg4TUXwxvqsKc -IlKaqrH8moyV/4Ppfc2jT7oGnmMel705WHhrfxrxcncc/tQyio8zDZPS1wbQUQuNBed9KjrsaLmO -uT0IDd98l/vzUkf+JesUPNwtxbwKKMm5PiWr2iplluyKmTm2+SaCQ8mtsc4goraGKm/J6jN+WmhO -v24agcd75hnIs9V6nkOGS3MCteSYoaSrm0suqRtTzu2NgB7sTyFfrPWBHgQ0lLLjFQ7Zq2TDfco6 -dFDPJ24PVz3WteSc1zUV/qJpzDi/2Z197UiOzT5U1xPX+wkxytai88D7e+pbIOccTCKinDOo+P0p -yPP9SVSEc642yzHPr1G9w8a+QSb9yyml5H4B+ieU5wh8hhSnBJ+/PVR21zSUf9U2DY36tC7keQF9 -sSeGhh9IEUn2WUSyebwi3ClFp5+tCIRfzcJuu4JYpOkEXbdO1eZ7VUw44FehHi2t0jKDS3HNkQtC -c/bPlniMg3kudYJTdk3eBE70K/hE8xg6ZvVdya/GAfCDfTHkmUeJTPi8waMDvNR7stbcvjtTm3Wy -2dptlTBAax8gD1VN2T+3l137+3Rt3Lmtj9Coo/WWd2ZFA1feVn19/SMqxq8GPJKeSw3ouFS/jkvx -a7gYG4BBTgUNdGxobNibYRQcAH72bI2O/mLk0L9uNXadGPicvx4nY5cbJ/nFW6J2wuaIsGx3kplz -sszDA2tPPDI0NH42tY192W0XH27w+XYVtXR3hpbtWmgRuBVN7QDeQU5XGZiTDUq1RQxP3p2Ep/oX -ieAzU13THqALdiUCiEv75u2RqbnrzFwntAGexKdv4nq1oXlNzEqbBBa5O1F+1y1FxhxpGBVHejbU -MUtIAnx8XhD4u3sOH2+fQUav9xc/WO3Ovbs3gIoAtD/+963G1wE9C+pR0EtDcy2dgGfZHYVFrr8D -vdgdQWbYpjlgy9y7NvPCuzaLtAlnnqSlbfQiHi615f88y0j+Vs5Lu3AkJxScLDULd8WtuNURQd7a -CCdze5SZapmgpVjGiHHKluxfPiJe/E3Nyb/sGsW+CiioReYpYpxpgp7nktehAC6N17bnXnyLeviP -95h7/9A0v/z3yRqX4tAKSJsjuBjLODraLastBDgs5kACj3LPVUesvMv8dXuk7KFXCWCQppm5PUmO -35nAxuxNknMsU5Rsv5pS+tXIZRwvsvH2SWScvj378vZA1WNAHwLasPrGeg80PKBgVYU0WUBNKdgd -q4xdfZt5zdhbctsB4OrGCCt3nJby7wVB1mXvDK3QI8LHH4zUvHBNwZJtk6jE+frCX/RdVdftgOda -GcAkaJpLrtumoDH7U5WPHNOQpw4xNs08jkvUvq26N9dUfNkGeF/rLK1gvb/yzmpPxZ3V99XPdkZq -YrwLuOKzFRbxbEModAD4aZIQEt3q1/UeFQcZVJOKAypSoWkE/MSpQKZYZuDR9ll04ukKC7U5BHm4 -O41NPl4T0P06arVnHptpGQWFbb4vvrnSXfjbgYRWeKhv4h/MMSoVzSUXrVOEJJ+CVu5TYNN+X6fC -QusC6DFc6J7QvVlGeXC99d22iJa33IePNo6QU9b6qiOcEmLhsV7I9i82t2yI6AWbk8QEv15I9y+y -kaZxWKRVgko6kOGzfRoG+HiZUf3ZKKw/WWtqNQGa5ECGTf+yHeqL2tKAglLgWcAmu2Wh7CVamUfX -0nSg6uk3DFJTVj8iHgN+g/A/tvaZT1t1zYcATp0ZBbzACh0VXGWRTtb4nBPD6y71G3i4WJB31aUk -V/7HWt/12VTXeLzBZrnUuAKnprbctyJgnGw0vv5k7BgJGnjU4BoT6Qb0ysla+4e/7nlTNRA9CkqO -X4FN8sow8Y5pTCKgZxPtoppnbikp+0TXQDuQEBO3RmGPlG+yL6mbE85Z+qAPTwE8+LLKwvkADRDQ -CQhuZQvLNsur1HaV3hgjRf1d0xT/o20CmeBWd3ZszbVTzZJm1P6MoGJ/klNkHsG/2gE42DYKfeIQ -Q2OsYnzOrqgBYhJ14M0z7aR9Mb/CMkFJ2BsnJRh6QKF7tB5Z+mBPDgYRz2xjyOc7I4To/Rl+jUtR -h3ZIiCmGbujTIWrSpdHamAt7gwX3j5fpNTZAD1lnGXkeuQDllrNqtker71lENU+s01VPjH0Fd+3i -qsjjRUZ1aGbiloiaAvA4yKvqeuuW1xMB75NwZKBVuRXk3J2PsDDjx6oYh7S2bG+aXajtQN05kDCL -AhoO0iHFJdslqOjFjtxLqx1ZV23j1VFeFQ+xNc7K1bRXPt7qR2UequrwtnFEuEqY9fM0PeE7bVPm -T5qW7CvWaUKaS8GFLryFPlG2VIWf6FlI1xwsZqU7+9IYLfmH9+jo8zOM5PMb76vuuzUC7NIg4dUo -K+dHbVf1Y59SQDlaFNSerPApPiWlzDQOT9gHvKVVxQS5tB1thkFs0kJL3g3AZ2W4ZNiCoxUWGahD -xMEcLNOrROdZpmqeegHN4NOzUOruovua9oLfrBOwGNsULNEzTyg6WRbQT1aFHEB75KrfgG64ZEyw -bZqQu9yVf8M+Wf3CB2CnX8GuDmq52JPVpteH683tZikPtC0WgM0zgqql95BH5hHYS5eMAvIBXvpg -jph+uMQhfN1q6gjN0vVrGXCgfvkuVW3N3gw8w63ApbmVteUeLRe1PYlL8WspFWcbPIZfw6g50rJR -p0scHLBXEC+Ap7YZAnhPRAOtD8CfbY1AHhwv0qr/29I28WmTTTpaodd8NfF4XzYYlCMNGdDatXD7 -LCFX/w58c3MU+dK/xMYFVll4r662LGCgIjxaEuhoQ9BwuiVsOjKwyT4NDWKeQsX6FxnQr4tM3J/b -r/uOVlpb3eoWll1Ky7aLEeHr/aXXhigR3wyR7n2zIIj6l3kYFHa8WEd1SBn5u1OUpH0xOdUpRkR6 -RNCnB5OgJ5sfUi9r21/9+3iZRzwI5ewOs1K3h2uTtvqqwwIzkJf/s0IG/WeLRdqSQCMV3YU3Db3V -z1yyRrxVXF8D6Nds6xTqhbw586fVnspHXtlrnlfW8+ZAIoRbxjAv98bw0Q4ZG+xW1RN3xYwsTRvo -lkaY9/PBKCrCP1ebc6gNzUUm5TpncQlOmRC5NkxN3BrEhZsHwHdsIsQLv4oFeCMBOahvYtlltIJ9 -EfSJR47P9Ov4eKesNtc0VHTXNJh12zUHDnfM04t82o6uo8WeSbe8DncgRb/6ZGQRjtfYWMcCJds8 -iX61P0POMI4SY41j5DjnPKvcp+Gi7BJyWlDNxbmk5EyHGBEN9N79pTcpdx0zoCd+JSUnqG7ieNRt -TWOctHPqtrKne6PkEq+UUn6mI1UeayllgG/KXuutuWeZple4FxjlKz3AZ2wuvjDfCL6jaC0LswBc -fKxgQgMaetXWBDZa9wHy2DhKAOqtpSWwyCecrHJJQR0hxzmLzzpb57F/32lo/7zR0Lwxhk9WtIEe -uRU86jGgFf16LtY+g02cq0+7Mt+YeM4ugb38tCkA1oVaPkRL/1Fcl3sb0NxQL+B13XJMsmm06qlp -qCYM8OEvAlp6zfFqQ/32CC52tQcW5p1jwP5Yb2w5A3ouoMTmWSchcXYZPNGm4kLMCwLI+iQre0ZQ -Hsqaiz3T0xH/Y+LzA0pi9omeXHGsJRSbBssfHa3yqIGNlrfrE/j0xb6yO4eLDBTg4Thfzc29n7ca -3x7qqYD+ry0IaFk1n40NTW4lG7U1iIhY6ym7tvqu8KpDSsjwqEjFgP/CfzVwKQEVodSjhCd/2mRg -DuT4nP1R0APj27KbllF4jFtVW+XRM4lAL3DOtoX1VjU+c2kAEe5bauv+tN05/bu18b1nMTQHsLbU -o+YCWM8jALwsCKqpxSeLXJRPxYPZpexi6wwz3/ABekfTVnVF1Qz6TdFQcm3zPey5O3Q/qTKUk06I -t84wcvdnGHnL70quzgvjvlE3p/5gAHhld6TiEeDJag5mhRDbpKDYIwV+TyNf7I+XXPPNlQH1knd1 -pS/9vLIz41fjUE2MT97MsM/WQfanqClOKbfctcAFu2WUPO9f+YTYuGle3PdDhIffHojQmcdLTQKP -tpGxN80pcACPdYgJidahmsfBeUL6Wk/WNX1b6i/uOUyyS8mFy9qhD5ffY14dqbgwAJMRZyt0xKGe -XOhW4VKWP+RdNHRnXAzd93282lTvVjaQ7VJ82sFMdeSxCpd7tsTFBHVMWEBNB633gg== - - - Hkq5CT8f6kkVHh29wiYjpXoWSLneBXLWoYZZfbzMJbrkpEz7HDHFLmWWBbRtzXtTmMjd0epH8005 -d4bx0Ve8c7CMPzbr+CdL9TxgbUGbo5hYt5JP8SgFOPsMJnZnKPf6BPXpj1P0qIsOMQbweO0tm8P0 -ZP1bxB39W+TdAzkftTVS8wjweI/MgwXXdj7mXPcuYLOPl7iUs9XWTpuEnG0W4RJP1usbPxkbWg/1 -DPChhpBrE1U8MQ1lXXLNkzKB10MFl1pbneoG2o6IVehWtHIc840kj5JTc6hnow7k6GSHHJXgmKdk -ezRsaOhMjV1KSA5omRCPignxycm5p3py+acVKn5fygSv9REBPU7PO91s6dmdIxWsD1eFrfaW3t36 -CH4a0FHBoe+IrUohdkvEKVgf5ZdapM1Uk6i2UtldHr38HhK++qH8vl0MTwgqcXn/Mde1+AB8tsjr -MVY5r/rI0Nzq07IhHnVtkWUGFb0ngkf4dNTKz1t19X9YWj7uzdKKNd2IBxYJF/rZ2PT6vy31XV/X -aEjfbFXUXl/KBX1T5vXNYWTagba5UTtATFa0lt/+YhQ2/a+9eejrFq/+91UaMaiA5rimi5/tTpXe -8xu4rFD+tnEKXzDTnH3xy17T+z/22qa+bHEafQpU5u4I5JFPy0H41Hyka4FX45AxS8wT5KStUVry -dmi285iwxC5tQHrVDSSXmgvdmkA93+iH3N0dJ8UdzHHKzOPkpI1efKQNWPeAmg05MfCIAEeVuACf -ZZsiJbhnOSU2MSF+bxwS0lHPnDPVjzwKVHxAF9pHDtQ3x66xjCPid4bLHzskmBSfigvdHkI+sc0Q -k+wAHq++h0TYJ9BJXxe5hM+GOpZLSSvdGsaEW6bJicbR6vuGrtyfPTPYeO8sPvVIQS0509cRj4E9 -9sxSsn1z1ILPqwK6Q4Z+6ZgF9IQCk+jXkvI8KnLJyTIT9zvgMXwaNsS5wKkKLLU0+5eaG/2qOuyh -jg23zkKeOWTwaNsMIh7wxvlnaxy8U04tCGrplV/XOMAa49N8MnS8TVT1zC8nAt6bDjlS13MOdZ3d -xjFctGWGURriUpeMVeaVIuNdQD0cTEFemPpB9890QsaXjdbuoyUhw7lAyQJ6sdIrp5UczKDiXLPw -dKDH8pVt+Q/Xeyse7gO63a5gw1cBjeeYJRX4lUCtGBiorxt8TlDHIG6NQtLsM1URfi255HSj+U1g -uaX5aKmec7wU0tCIJJu4Iuz3TRbxaJFF8CqZcKeCDd4R00s9urbXTlUr16sSIL1KRoVdgk5xzKGT -DxeZUICDmAEttcI1R0g71ITOtTXW+1XEHOt0zYvVnoxf1/uqHvjVPNJnY8vbwIaQN/269LL6A+Dv -VEJiYEVID+oBblbzEAdqHtKu4qIci10967MdzPHX8Ah4Ztg3qyPUakC7MYHXoZ4ZaHCntPJlQEcp -84R6VdXa7FC2v94eI760SKi5hysC1uEKC326wWedbHCZgWUGyqGgFgJrAnXpm197Fuu5XjUhyz2H -jnfPIV4d6VA5pwB3Blab29yLrc3bYk7Z/gyt5D97zX2fNjmsvQlImG0U8nS9p+i5Zbw44c9tGvV/ -Dxr6Ppv4XOs8vmBzHJIaWOIKDP01ybsTlYB2gWafrpGhwJoy3EoB0irlVgLPl2kcRj+3ythltgVB -zYG8Hu3T11PdGiHBoeTB9maIieYJdIQRqGPzBD7OMk3LMI9xc9xzTZjjpQYGwMN8p5KSC+BygnWa -kmIX80rts/wKq5iRbROTk+0iVERwkVLk1VKLD2Zx8bsjsDCFMPOcvC7xn+bByvsBoEat08ycUG35 -NVxoqGdOFumVpzpSoWcenWgehz81fkSH7U2RAJ+ODrdMIl6caDjwwAIp50RNLvRIEcm7Q3kP7RPg -Rw4xMvpomYVwLZAynHOEVL+GCT5aYlSH6v3LJpd+vEICWWdgkYDWyj/aaB/yrLZ2WWboeScrPLJH -jUk+Xibk/bHFxHzdYKL8anKxQ4p6dbpILjleogPaEP7Cv4B85ZbCYj/p2Mj/2Wjp+MPQ9vZY38QB -tFyeU83H7ivqsKZx4ku7CP5if6zmGdAnMYfzlJJTXSPzUCPAA1xZaZ+rzTw11HN8oWswU5Bn24NF -141D5Y8kwsTzgCd/7lHwUNuzzJLNkdq0oK61+WSlufFYT630KbGp26OVj+WtqRccs6AXJwYa9JOx -vt6/JCAFl/i0T5t/nbkFuxfQcV45JmV/qurZ3gQ0IqDnk083mzuDS0KWa54DDl0P/rRSRztUMasC -CnKeV47PsM5URZvGKsJC1zl+X2tqOVurrwP8colTRinfnYQlmsdqnn9Z41DONrkMi4pSsDiECN+Z -ZSPdS83NPkMD3w/0SGC5nnu00dhyui2ocy4J2QYRK18zgI+YbYNHe/WtHcfrza3BUJaVklZuEVUn -nK0yiV+26hpON7skLlUddXu45v7OODLqZKuh06milvu01FKfllLkUtYWBYE+OQtdw9juFFsWuAjn -Aj7lZIWJ/LTJpZxusnBBQG8F1wQM3zIXC3gaxNEyB/W7ua7RNk8o1L2tuu6e50AAz8z6usNv+u89 -Fj+4SAS7lQAvGyjlf5j5QtU7SDqrKOwbbU951p/7jR/+PyeL61PWFgJ4gvFqmjkelRDAG1aVVxvK -MGCDjwxC5pGhjuZU8iAHC1yQY4FXtS9mF5rGa9MtYkrWwTyzdHuM9HJ7pCbMKoJFh77L82qFRK+a -B3fL+VCPspHiVTcB/y8AapVdHrr+eqjnIh0LHPCuCBu72Vdzc+Vt1c21d7AH1klySG9VAjqq7BDw -zscGISu4LCCFMkADWkKmZwED4CI61gXUoHuBVeZRsiqPgP0AMBi8/j7nomU076p1Iv+qbarwvkeG -S3XPM0rdKm6Na55Z4tPysS6gDk3jRXet0yX3HDJYpGMOFumawyYf6QSUU2NrT2jWqFlCzTha4ZOt -Uki0dbb8gU+FAGoMm2iZBPBHDH54skSv3p1llW6LMLEAjoOPdJQS/zws4fMKJj+oxqTvTlY/MQP1 -6Af8c2im+XRD1VX7DDUvGDrXtwB/GVyAJwA+M2FnlBBjFVMzvAoh4WSlpXV/hpQGeO0wn5IB8yiY -YGBPSgAfzjxebe1wqhtpB3NCRCgn2D7HhwMcnQH0bK5PTSw81FGR/zFxWV+3WWSfFpe/K6p+bpVg -U842mpqP13i1AS2tLKhmVPuVxDy/ilpxpG9gf93kc4Aey9nsL725NVgTZpNSYG8Qsb+M0ZKv+BXo -rKAGX+KT4XPO9Izqr6sC2vEiF+9R1ZYchs5vqRrp+5OICECDJLiU2HT3Mht3siFs+t3cOvD7nrDd -uoDL8+hZ6FCWglPDQHh0uJwdCfzFjgQV7QR0+snyX7lRHUBdcQ9XQmebuoYPN1u6v2zzuYcafJFP -BfjweUqOcx6fempg4L6YG7uVXeBbPg21+s89QfOXHUBv7fAFwXUuzapiQ40iaqpTQSn67/3W4T/3 -mvuDyyx4cImH/7zD5/2+L2z7vCPgn67T4QdKbMquBJfkVDHQZ+uv352sNjcCPoPvUZKKD2SkQr++ -tuZsk4nxL/Fw+n5c3GxL6WO3moj5c49J86tqon1KXObJIrPmdImNPNHRQZ+A3vtztanpy3pT0/GK -kAb4nvTtEeTT/WlyskvOh/gUzQx/6DvFUK7hnBAW0j5bA8VX98ZLb3kV+EyXgpzlUdAKPxkEtN+N -re+/Gptaj1c4aL+aUQ7UQIlP2Ux1yJqJLoUQ6ZGzKzzzpAyvnJoH4HmWQ0rNOtXyCV/WG4G1FLLc -OlaVS1VP9qra6pwLAtiBjJp7ICOkmkZRz6xi/Cu3nFYI/F/ezggkzDKBeOGRk7MBf15pnSalmMfQ -UVvDNQ99Mkru2WpTo2+xnmGT1eZYJaQ0t4oD8egAPQD0mVlcm7U+jHi+NY6NAXwaHND1/NBaORWA -d1dzatwKVrljgZrrkFOyXQpq/vYkLsqxQMs/XhFQztZYmK2PBb9Zp8rvO2ZhkeZJ+HOfipTjBPzU -zhyr2DBICD8CXtenoNeYx6oeWsbBYd75v85Wlh7ruLhP+rbOYz0HA9R7NsCtpcHleqZPw4N/NdIg -XzepVUdL1LKvWxzKF2NjS0DfyFrrJ8Q4pYzSr8aWrk8bHKpLBo20TZfds8+Aw3bHK5+75lHZpwDX -BHR17ICODj9ZEtR+BrSSV4lOdMpQr3YHIU+WO3N/2RoAP3FKyQUelYCwPEzKbYREfj9IzX7ilTOg -h0pivl+GSwoAPi8IaNv9aVyiaQweE1xm460ybs3mR3TE5806ztlGg/BoiUf5sk5FHmuxmQ5J2SPL -RPHdT8bG9l1lbZm0q/CGQ0WjAP3A+mzg4v/YADz1KhW2M1h6R9mSfWFnApsVWO0ctwP15tZzkAAm -sk9W6zjH63UcgFPq/sfCbzwz4Ett0+BHnwCd9cUsbD5co9d4NNSy0D46lGyQTc6rCeXiHmrIeONA -afx6X8ntM6OAc2LkkkM/wVVKpU0Gj7UB3j2wysQCnmTwzCDgWESkDI+ajf1jt23sbIvLDS7Sq21z -hJQ9MSnpYKE293CNgf2Pndf4xx6T6VhA5B7pWIAnQ7061GBT/voB6vzzIhtztiKgBkO1Iifm2MT4 -lNA9fS4lJtU6A34W1BDzD5fYcLeCV+OcYxRYZ1Gv1j8W/7Y7Dnpwskwq+rxOrvi6Sao6WcGX/7HN -qf20zsEDHhPjV3JrPHJqkV1KynDJOSDXAqsceP2as0Ue5i9/omRVbH8EPXH8/+y99XMk95Yv+MPG -7szuXA/c53nXF2y3fd1maHQzSw2SWsxYUjEzk7iZ7GYWQzFziVnFVZmVRVL3nZnY/2L3pN++98PG -bsT7YSNW8ULHUaF2d5Yqz/d7zgeysuqMdJ1L2fhNSaeoK2Hr1W5O3xpcnegGTwSab1resfaGf2nx -KeVn+82KL4K/1n0RneJXgi4BrhNWL0+Ia+z3ST9abjR+Cr/ry5SOfTUyxa5dHKIVrYG+2dBpGOAN -WxbGhRVL44r24Cslae61vBN6EGqV27T0hlSyOc1vDJsVlJRHq1mZFNbOvKEeWxpnX9747d4t1sWk -kVWGWljVoHuaY9O8SsBaSsKsZK2Ngx+e5lYsviIfDuHvhU3SLyTNwtb1UU7Z0mvqsaRB0oqaJZ3g -PY7NPKz+YuFx04/hifaDCSPxFOAmAXWLSMAjNahLRk+7RUTwUGfCk83H0lZuY2xaULfyinoyZ5Oy -tuavj8UcYs78646f1ieoJXGzlJp2dWszfk1fWMeuNfZf2WPou/gp9GZzTC+nB562f7c8RC/G5whv -jgvqMoDjqEMhCDzq3K/vrvjLCP/Uh7O/thbB3lR7f6368+pQ50nULCJgNhkt6xZTt4Iy8dasXLk+ -zauZfcY8h/x2fUxKXhmiHI/i1/tN3Ja4UUDOe2Qy4LCBmF3ctWnk1iU9vXcxb8+1jA== - - - TdiBmuklSWPX2aXnbfs3R3l1qF2rwnw919cmgRNtIgrmUwAOtp1JmFuPJ+3ki4iDVrYx2XFiaYzR -iHh774Hu6kN8InIu2PcrapVSw2OUy8Ffqr6f/bXi++fMn/75WtPHf+d+cPnH96uqG0mvlA0PVm5O -2Z/xS/m5GaUG80vEm9Pkatf96q9cd2o/XR+jX8oF5eLJ/pLPF962XUi7eR3bfjHrvZdLSE3T2/y/ -NF56yju1V1T28f+MWmRk1Mapx5yc+qSZUrT0pm5vaKrrVNIKWsIpJqUcwnbIvy5l5TeE9F1nNsZb -jhbc3LaMC58Bz7oI+38R/Gz52ij9SniCVbblExJTFuL58HTDD5uTTT8VgMO2Z6Q8DLAkaZSTQlP0 -4rWxrmNRg7BxYxJ4YIxxGQGfDbhKiEzxK3z3m35YHyKeRezs2qyP156wCbtA57Wu62TtYbOKsaFX -UdbeCksWn9CO67svfrTyqvb72BT10sYI49KmXtK8OK3omBlSNC8NSZoSemHrxijltP/X5q9nn7fv -g99FiFoVzOVJzpXlSWFVSDcA+/7wbchwrTtuVXNXRzqPO29XfhwaZ11FbApmxq+QruLziScFNWGb -Rh53qCX454pXh0kn5p/U7QWf8X1cL26CmhPGwWOsjfHL4wYlIzTGK08ZuFXRKerF5ecdxxefdx1c -ekU+EteJmxCTkr72hnE++Evj1/NPm35MGCjFSSP5fEzfVbwx0XJmdZR2PmzqlsRtPerVMfLZ4KPy -zyITjEuRCX7V5hD1zHu3mLU91/c46pBxlsc5V+IOrSLm6L8Wd/XfiDvVkrUJWrHrbsV3/ke1p1Nm -CWNtVNnpukf5Yem14GpoUkkMTVIuIRZyRXiSdN5/v+nzcenl379mn/zQe7fx5+VhdvFUf/mHoIMv -Jsy89pVXHccj45SLcTOtPGphVISM3MqYSS1KurTalTF2ycoI7WwmoFRjPqU85ZByExZOV9LEqIob -OZWIXUzCgtfeZvw9Nwt+TX/BJ5flvTJ+0ighIlYpBYV9jRkoZXPPmr6OmDmNaZ+UtzLedDhuIl6J -Wbit4J3pKadKkXDdGkZ8114kPCJO3Mmoyvq0fbFpbmXwQc1fx4XH/97aXfSvlr7ib2ceV5zNBzns -v61qf4kCZkUsIkJ+vvtewiWhr40zS+dftv/selD5+dzrlnNRPa0CdGht2ikkjGqK/xR83nQ6FxAz -sw5OY/RVzQ8mVdFHN5sO/r2i6uAHA4SjewArqAnA8qiZXZGwsEC7UM8hFgF4eWHH0jD5xNoY+dTm -KONsdJJXnvVIWe+CYvZ2QEBKOzl1UR2rJDolqExbxYSMTU5L6AR1aauwNWnkNSBWfgfmEJHjJn5d -0ipoCus5sEfC6pRZRoqDhooYxU0zb8nHrHfqP49MskqzTjE5DJictqj5absMvCfjatJGPBs3E8/g -ngD4tCxlE7SGjALwLLyShEFKiOr4jUkj7ZLnTsUez42az8DvNMas4D0MSmrUpOElTCpGwixjx82g -m528jpSdUro52X5kA7ws6hQS857+W0n74O31aQmcn7QDeI4I2r0sMkU8M/+86sfAr0V7IrDfwCfd -aLD33oZZ0oXzO3gtaniU3xAdZZdGRklnNscI4JMo51JGJTNh7u9bG2JfXH1FOuy4XvGx72bVx6Dv -ixATpzoFWJAy4T0kawyPS1tQq4KNmIVN68MdR713L/7Rc6f4TwkDpxXz9t9Ne9SqmJnfGNFLyEmb -Rgq6l5e2satjE21Hk2ZWVRh6MGGT0rIzA88Ar69F7Bpp3NnbG7OI2qPTrNLoFKyfide0NswtXXzJ -PR+dVBBXhgRXZ59Wf7zypv7LpZed+5ZfcS+uvhHXxSaELQmduGNpiF3ke9i1P2GSC6AmKMuvW/ev -vqGeihg4VYib35GdkUnT7r5bCbtGtg56EnwXH1sYfAs+nbY6xriwqaMUZ13s1u2AVFyAvsl4tT2o -TcUr+HvvbMH6JS1iIvBkXdT423svJyNwfETPacp41d3ZoKYvE5Dws4GeO6hHKUVcYmrGK2IjThEd -AY6N2alX1qfaDmSgTjaG6WdW35KOr4+y6lNmMetdQDXw74sCUdrZdXV1lFkWfMY8FXjCOh23DdwP -WUUdoM1KogZeW84n0b6flUpiU7yajWHwv+Pkk0tDHfsTFm4zrh/jJvz6XeMPcy/bTwRfUaoWpgTE -hFOlyUKtJ620S3Ez/WIeeqDgUUm2vEpJxiWlrYxRz809b/5y4Und55sv2w6iBlJpwSeibAWVsq0Z -pRzzikgx0LrR8db9sYmuo3Ed+RRi4lZhNhEBhXpGrMJmFHxO1iNjZz1yNmLjN8aM5AtRk6A+YlCS -YqZuUWiqh5MwyjpRm5QcBcyO6vnVSTO/HrWJOjCnnBmHfnc+KP10VLTv753dF/5TysoEjOe3Jkxi -csQgbNmcFNZsjkgb198yi/y3yz5ZgXMNvSUfT07xKhDwqRmHmI155XzEI6YAPtXHTdyalJNaFjHU -HYxMVX29+rb+6xR4AcypUabt1x5s6tjV3keVf515WvHN5ljryYyT3Qx+sha49YL/Feng8hi3Arxa -d8wgbnPfb/wqcP/q52kz/WrOKexMmdgtK8OdxcGnsGav6ac3dRpWVC9tWxmmnp/qufSHEdn5f9gc -Yp1Pgw9AdMBbb8HjjJPPZJ1SKmoTE6J6VsXSy4pvF5+VfxYaaz2Qdgi70q7BByl7jzZmkhCSgGWR -afx4qCsbszk60XQuqSeBV+JVLo5zy1IujToMPTfzjHp8Wlv/uf92w18RA+FYxsWozvtlorhFTluf -4JVFDSpaWNcriBh7hMvDlNOu2+V/ct4o/4PzZvlH0Mt1WY+mB3UrRNmAQoJ5+m5C3V7Pz0sFmSCP -sDrEuhA1yLoQp1aJ4fXsV/ZFjQL8O9HaszP9T3Izqt6tGTF/bZxw0XO79suMRQJYpB1MO5WDKZuU -EzFo2CmbVobY1apcQKF6v6S+Dn1AjAGWxk2C5q1ZhQLxCCkxK7sWtGppTM+qzHoFXVsBITPnZbel -zPTKxZct32yOk85sz6oGY0Z27czz+r2zTyq+XH7dfgpyZIL/VGOO/ptJS0//BtRS3CeX5Jd6H0O9 -MvDPnbzmlv3BOUj4EYVexWzsppSVx0AcnM7l4a7DYSOvJmEVtG6OEE74H5R/Yrt59kM4phZzUK+g -NnIRAnyac0qoBY9anvNoVVGzoMH7pOkLy/XL/2LqOfUPwXuX/rTlE9O3Z5TKrVmlAnMLO/HPL6MG -fiNqYJVFJ1sOrLxu/HH5ZetPoUnauaSFV7MdlIm2ZxSyrFtKS9nwzwc07QtNMy/FQJtn3UpRxq0U -Zt1Qn+BtAVeZUdjv2DTjcsrIKEsY2DVhPb9m/i3pbOBJ08/rb0jnMy5uy+po06Hg05ovV/BZ3xPS -5rCum7s2yq+Y/ZVwIjHKuBQfpRcvPKr7QSc79OHC44q9mFNCw3za3pS7bzBiUbFXpynnF4bqD0Sm -SKXhsc7joTHCsc2JzgvLI8QLmwYlPWJWC1GXWpr1K4T4PYyzT1r2L78intsE7Zw0M6BHGRVrE+ST -oWluecYuaM/Y2XWRaeJp770rH3nvln4aGm8/ljKzq6JmBXVjSly39JZ3yf+YcdJ9u3XvxmvKSe/t -yi9N2kuf2vsvfRgFzZ11Ssgxk6Au+KLlB+/9sr0pQ0dR1kUtD01RSzYnmBUxnaAxrldR4+aBvoRF -0rUx1nXSc7v0z+Piw79bf9F4CP/+oZRd0BEzc1rAP15eGxFWrrySN8z+Qj8SHmvbhzoIZxA7rTTt -lDERwJ6sT6MG39CTdCl4q1PijoUXzMsrryknNsYI+PU+/JpVcchEvZSbkfBzge5rqFvGS7n4bWmP -jJswS7siOn59eIJ5dWOMci5iJBVjHhE9P9NzPzN7fWRFx62KGNlViF1ATNsFhI0h4jn33ZoD1ptl -3y8Pk0ujxsG+kK5H4n5ILgo8bzu6vdj7OG6TkPE5snk7+BJ7ZwVouxrEKWWkPf33Mh5tf8xIK9mY -aD+yNtp2cGOCcDJuIpzM+RkNhTk+ddPQfmR1vP0QaHl+frb3Af4dMxkH/n4nvSpmYFzNB/ikwpxM -npvvvht2SijLk+I60DN1iIFXExttO+EaPP/RlOrUvwSfVH29Pk0FnStsWnxDL7YO1vxp9knriY1x -wtWCW8HPutn1MR1okJH2/ahV2JK1K7lZl1YZtfKbvM+IB52/En5yP6j7Bvbz5Ps5Ab0QEBDzfhEV -sQla8q6+Acys4qBGTsXGUON3cw/r964+IxyMT9KLECPlQt7Ja8l6xNS0Q9yFuaQMDDRfwkS7HJrq -OIPaiCUZF7sBelKJgdZPmqXEzQnwt887flh90fz10vPmr6Eui8C71CN2CTFlE3fg7z9ujHddgP08 -A16xZnUUdPEY9+rGuKg+qddw8M+8ee80fq5Xl/x+mHXwdxuvW45uA4YWAtr+hL23e3ZYVL02JapP -WBRcBPQJ6JHG1aGWn5aHGn5YHe84hbj7bqbcvdfCZhExZZcxNyZlhPURfjlikhKTRk71+mjbvs0J -wuGInnIhDb2XMvHq4jrK2cg0pWj5DeEUYmTV4Nd5opOtRzaAIzamhFVrY5La5WFx5cJT8gHvrda/ -jkmL/nFMdO7DuQe132bs9PKcm98eNTCurI5TTsH+NSdN5MvhydbDs8+av1l51Xk4NcWtzIDfQW09 -PRGTjLTwlnZ69mnnkcVnbSdQHe1S2sysiIJuWR7G7/UlnUgahK1rbwRV1oG2z0LjpHPg6yi5AJ+c -9/JpcWNXcURHu4rYea0Jh5ScdA7e3ZxWMX2PyUfnXxIOrg21HELs9Jqsj0vM+rm0lIPTtgyYujRC -OIZ65KKwWdCyPNx5aGO061himl6GeVit7xfFku05mSZqE7BXjMwy/HsfoQ97oG/b5p62/uS6U/PD -7LPGUykj6CazQjr/mnTO/qDh67kh0uXCwg1dwqrgLb4knV58XP9NeLT+O/BMV9JuMX1rofsu5pGK -Fofa9q1NUC7HrSJ22i0ghabbj4X07eDtqVfWdO2H1ic7T+WDChV4I0XCLmxDHAJKPihVZb0iZtpM -rUxZqRVxh6Ar5BQTwzZJV1jPrdocIR+be1i7132j9Cvf46ZLG+DnoxYOfg9Ku/8x5bhhsOWzqE3K -y8+qezN2GRWz8hqSU7SivIPfue2T8XMOESHjFHaEjKyysEFJ2ZzUUIFPoa4Ix9OetpNZP62i4Od2 -5DwSRt7Z05vU8WqTelYZohc0pHWyzsQEo3T+UfkXFu2+f5q9fWVPwkAvyXgk9LxPo03bhe1LIy37 -fI8u/SEyVvd92kItzjv5rTm3lJowi5qj+OcDoE9icD6xyc6jGyNQk2O0s6FJ1uWokV+XdqoE4JEF -abukK6ZnX5190v59eJJejDkkFMwhZ9pvNX5q6yd+t/BIUhEd5YNeZVSsvKn8fmOk8Q== - - - SGha3rk2IWlALFoJYu1RLo3wr4IGEOb8MmkuIBFkA2IW6DJB1MZvD7wg7A8NS1vmXkga9JqaPy89 -IZ5K4xrPwKrKuoVknB8zbilzbYh+MjJJv4A5xETUKunCvXpouOvo6uvmH8CjnE+BvgFfxArrlZTl -If6V4GPp1fkX4trYlKAlNkk6Zxk48Yfll5Vfrw+374+bOfUJq1qyPswoiozzGxGjlIoYJF3zDzuP -DYnPfzKhLPps5jnjxBLksGkWd6yOUc+6b1V9ltTTLmecnIacl9te8PGJm2PtZ503Kz6beUQ6gjiV -EtQnF6AeXmvSRL0Ma3o8OU3Bv8exfRt4MuPq7t2YEtTNvqSfBo9HjelIZ1PmjrPhqaajpsGTH60M -txyOGpnVMQu7CbSXLGxiV4QM1AtJO7sGtfGbwJc2puzAU7b2k5tT7cfSbhG9MNv/BHhYHdYxr+S9 -Ut52UMJHTLRK383abxYfXN0z82vJJxEdsfjdvPrm9oL2Ttwkal0bYV6BfazK2nnNqJXXEp7svLwy -XHtkbYR4MmJkVmZ8Km0+0HMzBbpnA9YtYqCVZzwCYhg0aXSs5SBmZ9YhblFX0iMmoV4pF4M9TVj5 -bTEjvTI3I5KAVlQWZtiEgp/VGNKzShbeME6Gp4XNKZuEmQ/23Mn4ZcIwYPr6BP18aJp9FXi9A/VI -2L7nrQdTBn79llUjyplkXVugC+EcG9NWygXE3nVmZbT5OwT4KaTj12xOcksienbZ9oyA8u/LIuH2 -Iqcr42E1rA53HF561vFjYpJXk5yWdkTGmVeiU6Tz3gcVnxpU5z9c/LX+G9DPzVt+OG+bGHyHhBg1 -STsSJn591smuThqb9sV1td9GpzuORaa5V+MmOWlDJwa/wq1cHmr6zthz7nfzDxv3Rkbxz8WJAQuV -0pyH2wH+tSbnVQiybhknZaReXnxZ+kXg0cWPVl5Qfo6Pq0lxfb8sblHQEjinTrDLUYOEjNl7e8Ar -UTaGOw6FxqnnItPihq2Zvl8KM9rrGaijpJPfknbzWzHcC4G/zpoFhMQ0s2ztNfi6CUbJ+xmFGnFw -G3N+ES0fFFITFl59XC9qzDjAVxtpl5de1H2Jmihl77xqBWZRcpdfE46svm38Bv8c2+Jr+qmlN4LL -EZ2aNj8iuDrzinokNM68tDlCK972iuj/NiuTbPnFnBjgSWSKU5Y0aIUZW7d8/jntiF7b8JdhUemH -oCUPZOwacc6rVqEuGXN5gnrO97hlfwq/TgJeb3m4/eDC6+ZvF181fbc61HE849T2od67OsSlEEV0 -rBIcRzIWYVt8snnfyssrfwk+uPAh+KGT4JsrEIcMagV8tV3BC+mYJVEjqwJ1yDiFWXVfYVZ7CwXv -DLV5Yn2cfgGxyemIQ0zyP2n9LuUUU/+2qOh+PyMAvOS0/PuMXL4V5NNw37ky2nVkaYR2NvC0A/CC -VZo2C4nbHmb1f8xwu/5jgUtJOwhFwYeVnwQed+6PWyWMmFXKWnjedXBKffGjV7zD/+j/pfZH1Cog -vptXaN8vyFSog9+Kf6dAzithbgWkQvBmF59Qv/g7q+bEHxOTxAvv56WSrUW5OqQjXQk+r/sCdUsk -W6s3LO9Xux8nrdR6k2z/P+oV5z9cwe9fMnDKUzZhB6zv0Y0xbmXOJ+NuBUU00LhXMXv96fknZz// -lfT5360O13wVGaeeyVvFhLxN2Jp3CtqyNl5D1kG9jDmIZ1FL18m0i1O/+JZ6fOWNuDaqH1TnfAr+ -9pyAis3QKsPmtsOue5UfhV7Ti3JWNT/4jHxqVH7uj2kzzivc8uSEsGoLuC/noVdgTurl8ATpeGSS -WwHYpUZAV6eMtKLZZxd+7//17D/i38eYsgqa8XtQ8evrKxPsS3NvqMeWXzHPvfMIOv/3eT4166FW -hQ3V3y8NX/wj4Nz+7Rm5IuuVcSJT1KLZxxV7Vl5V70V13MqCTcnJeVTisJlfizoUrJyn/2bO33sj -YRd1rQ43fL34vHpPZIJ8JmNXCbaC2muoQ0JCnRLS9py6L+sREuOTlDPzj6r26rWHP3BdK/7nMGiY -LQ+/62+w/jEbq6IwKxW8X1J057wqaRq8dtrGaVgfbv7xrWD/3zlvnP84ZxcSomPcUvAxXy29rP3r -5ljnMdAZ7VsutWjboxCE9IwrS6OkIwmLjJpxyhhpO68+YWKVLbxq/nrxZf3egpd2dcvLhV4VtODX -1iOg1xJ6cTNqkrRl7IDddubVpIUDup9fU/AoJQWvUpYG3l+bZBTHTOIO1CGlFnwqWQb+PmYTkzf1 -zBL8vpf4tAR8Pqdkc6R13/yTyo8XnzV9k/UKSdvzqu7cjLo77ZXxEPz9Vku3OGrXCLHZnlu5We1g -EjTT2iTx+MZE11HEquKlnX0DcfCOs6/Jx1JOjaowr+qNGtrOWbsv/NPaq5bvY6aOo3Er5RK+3jPD -7GLLPeahtfFeec5/7SUGvjepb/hp7U3pJ/6H5/8JvOCprEspL8z1/hJ4STozLC35/fqIoA68quI/ -FrrvvwtKBKHxtiMrb5p+WB3pPJgCLoe9oi+8Jh+fx7+D4G1ncd6tVP1tRqnOgYdLmLuK3A8u/dnQ -e+qfUlYmYXu151l2RibCr4fExulloJ0G3q+qb2/5RcycQ9AG61EWfNj5fVjHrc2DLpp5WPPXIeH+ -/8V+7fyfVl/V7fuPRS75//gfJAj/f5/A/1exm8hOi91EdlrsJrLTYjeRnRa7iey02E1kp8VuIjst -dhPZabGbyE6L3UR2WuwmstNiN5GdFruJ7LTYTWSnxW4iOy12E9lpsZvITovdRHZa7Cay02I3kZ0W -u4nstNhNZKfFbiI7LXYT2Wmxm8hOi91EdlrsJrLTYjeRnRa7iey02E1kp8VuIjstdhPZabGbyE6L -3UR2WuwmstNiN5GdFruJ7LTYTWSnxW4iOy12E9lpsZvITovdRHZa7Cay02I3kZ0Wu4nstNhNZKfF -biI7LXYT2Wmxm8hOi91EdlrsJrLTghD5HyTK9/wPEr/bu7eYQyrqFHV+0Hj5g73nrhzugP+v7hSK -yIIPyj/Y2/HTOYGoiE4U0bmcToF8z3H4q30/Hji056dqcidrz9f/5cg9cNCeCgGdSufAX9YQO1nk -b/Z8D4eegMcH+/bs37Pvt/8a5R/8cOTI4aM/Hjx64OcDRw8d2nf05z1Hjh499OPP+44eOXbg6LEj -B/fvYf8/HnTk4I+HD+87ePjgvsP7Dhzcw8IPOgp/d+jYsaNHjxz6+edDcNCh35517Nj+I8f2HTny -/3LQ/+3lWP8958T6gPZBwwecD6o+OLbn62/2NDZAVufIH/D/W3L78eR+W7+LdBb5+H/543kyrMj/ -tZjwLDjm0gc/FZEldCL5wtWm0j2N5R+07PltOfFf8cNvf4KTOXb4v6Vy9NCetj0H9u3fs3/fz/gC -0v67noD/43990n/9eXTPITiB/Ud/O99De377DR/s3fvbKeL7f3zP0cMHDhz5oPHK/5YwC1tQm5KV -NCrpUZ2oPjzFrwsZuE1JG7cp62XVo1bylbiOcilpYVclHYI21C3nxUz85rUJ6rnwNPNKZIpbjpgl -XZhNzkStSk7SKO1MmkUt+LQs/Ftp1yYlTasjnIr555TitbeUovgUrSg5TStGTfQrCX3nibRdRk9Y -r92M267fi9q6FeFpaVtojHNlc5R0PDqGTxAgnUlNckpRnawjY1Px516wSlbe8CpTVmFbWEc8uz5B -+HnlbfNPCR2lFHOz6pI6ygXEzK5JO0UkzKXgIRZuXdLAKosbWCWrb4hHUD2vcdur0WQcYnLKJGxD -rHJOxqsQphyizo1JRtHS2/b9oRHK2dg4tzxtUbCTBikhPqWkbbyVtaP6Hml0HPJ5RTyw9qrxy+Wn -FR9HhtoOpw38Oswkp2RscsbyUMfh+Yf1e1eetf6w8rL14NKLmq+i453HIYeqjFnBiuu5lQmDoAG1 -SilZp1qSdmu7oyYNP6xTMzYmJa2hcX4r5uzuhvPpQuycxpxLTIcHLWMXE1Mmbk3CwCxLGAX1ET33 -atLMr0vb2bULQ7Xfrow0HsjYmVV5h5S+5VVIcm6lCIU9WR2lnl8fY5QgNpUIdarFYSOzNKSjFcdh -jTJeMSsblEtSTiltXc+sDL5s/gm1SMkJq4gSMbEqswG5PD+rvZnxSViYV0RJu0XUjEdITFpol1NG -2sW0jV6KWhkV2354Pa+Mi7lFRNTFa0+5+O0xC/NqwsquwrxCEuLg1GVcEkbOo1amHWLYF2Fnxi2h -pZ0SVshIL9nQUy6mbIIOzCPo2vLJ+O9mtDe34XXzAbUW82u0UauMETKJOsP4tB2oP8SlVkWh1lBP -352sb/Bp1t3dizmVQswloef8Qgo+yRpxcZvTbkFnzi8XYvCchIFbjdqk9LSn71baqxDkAgpZfkbd -k/YKiCkHrQJ10WqSdmppzEAr3pikletvVP3sfUAuipl61WkHPnGZXLz6mnwyNMa6mHbCWvrVKtQn -JKVd7JqUiVqStrDq8OlA8HqCqIlbvTJGObkyQS9KuCTkpRHK6egUvypthhqxq/iIXdQZN1CLY3pK -Udgobp0bEl1FHD3dqKOnJ2KE/pvq+DlpJJzArOTitIVUlLKwKyNGTnXUJGpPObXyhEnauTFMPbn0 -tPWbjbeEw7GpzuNpPassa5J2JS2CliHNhd+577Z+B71IRGySrsh0x/Hl11f+vDFS9SVqpV3JOEQE -zK5goE4FC3UoOWk4J8yh5KYdcjqCT5k0M0qyLn5rxiVoz3mVksKMUp12qURQQ7y4SdgcnRbWpq3i -DhTqLzxBOrn0qmqv55fKz3Wayo/Cb5SMlF7LDY8zLqy/av1u/tfyP68+r/8W1VHOIwb6lZiJdXVs -4Pw/m/tLPkGnRZ1Zl1IQniQcm3l06Q9LL8o/S5so59MmahEGWIO5lDzUKaWm8KkQv02c0ci3gtrB -rFfKRpwyBtQCNxfouZ4LaPvSTuhnC68uoedVIzpeTdYuaM46uY05N7cx6+DUpPTCxoxNyU/bmNWI -kXYl54JacEjIWY+MlXHJ2Rm3Spzx9vQjDiU/apISEmYVA3WoRZhfKUsHpFzEI2NnoM7xXkC8vPbA -UMuPc2/bD+aC2tuZue7bmaBKnZvRXsOn8GR9SlnGKWjPOFiViI18PuellOX8tJq4o/10xEI4i09t -Q11SGgKYk7RyatNuVnXOx6zNedn1SQv14sYE4VjKLCbnXdcfFXzXX6Q9YmrUwijbNJDPhEzkc4hN -Stma6b0PvSvPBMQM/Nv0M77rr1DvwIOYS8pIOhjlCRujLO4QEnL4VAafmAVrSMl6tT2YW6vC3Ape -3i8g/duiWJDzixiYW8rI2LmNqB6fdC7uTLq0mpRTIcCng2VntIOIm9+5Ptn849pEw7frk03fx8z0 -K4FXTcf7Sd/9blhUsTfruWcITZDP4dOr539t3hufZF7JeeX8bFAhSXuEXZhbQoe9kw== - - - FbwqWd4n52EuEXF9hHlufZx9MWoRd4TsvJaJ/pKPVl4zLmZtakHB3dMTt3Oalt/UfLH2tv6rmFHU -CvhIS3u1mrhdSlsbZ8AaAKbYec15J7cpbaFeCk0Rjiy9aft+c4pxOW5XclbGWZfnnhB+WHvJPBMb -ldQndZyriJF+OT5NvbA23PWz+UbVH5ffUE4nzFJixMSr2xhrO7Q51HQoZSCVZr3cdtTKrUWhd1Lw -gNpjZ9191zOubg1qV3EQm6g1bWfV5H3Aj04a8A67HnHRylNWUWfarpXGzDJieELWhJoVlLRZ2Lwx -2rbPd//8PzuvX/y9+1r954kRFTUyKWleH2Kd23zDOBN5Qz+N6uiXNoYbvvf9Wvrx7POm76x3az4L -/Np6BLPKOEnA/o0x0snlF80/R8Y7z2ft9LKsjXgWc9Ar8EkFYeA3qCViwa/RFHwqxVZQLk07OfUI -9A3mVYoLeK0E1JqUQ9iWtok6Ck4F/71Lxtz2sGq3fJTSnJd4KTLesC81yW/K2nt7okZaaXSKcDzv -lXK2g0rFvy2o+3M+GQ9xSCiIQyVMgV5IOWQ0xK5kIfAz7QPsn1H1ZGc1g9kZTW/WrxCl/RLWqo52 -KQS8Aj1yPTenuQaPgcJC9538nPZGzt97C3qPizk4tXEj4ThqJ5xM2TvPhk1NB8Om9uP45Is47EHa -JaGiDkF71sdpwdzUkqybBhjdcXRluP6rhJ7bnHdfe5z19l5P2iXkmJnfnLBwGhAnvwOxiTtzAZUa -80s4acDlwlz/s1xw8AXi6e5JuKTMtIdenvUwqvIBPjHj51MRF6Vk00QvCRmFbavTgBWenv6/zcll -/7YoYCJObkPKJmrPuzlNW27KlTTgZ8wqJcG+ULP+/geoV6UAzuuImunlKQe7OeVk1sZszKtrEx3H -vQ/Kv1h+Qi3Oee9Mb47wypZeEQ+Hx6lnc05eU87Bqs25ea2Yg9+cdaukGXe3Nu1UCxG7gpU0CZvS -Jkl75rf6E3as6BmXDTeqPw6PCxrSNtBZZmFbzMqsiOlJRZiV3Vhw4VPrlOKEXdC6DjpmdYR+Og11 -E5ngV6T0glrEyC5PW/GJwsxK1CHsQj0q8fwbynHf/ebPV17Rz8w/Y55Zf8U8l5jmVkYm6BdCI9ST -kXFGUdLIrUZsvMbgq/b9a6+Z0J+9vcDjirSH1xozkc6gDlYV5uTUAV635jyAGU4FOw11gdq04i3o -9e0ZLiFlJxfHjJ3HE2ZqUcrKLE8Dtics/IaoXtQQmuRVhsfZ0JesK+HxrhMbb1q+Dw8Rf0b1gvrV -t4T9K68pRyJjnEurb9kXYkPCssVn9V9Zbpz758Av5X9JGfgNWZtSkHWpxCv4xHqjtGvL23MjD/sR -0nWeWnxV/snKcN1X4emuk2E980rCik/aEZNSFmFzzqUQZj0qecGn0QBnizAPvxNzi8mInd+EOcRd -eaeMnoe1LLiYFXkf+XLa1XEyPFn+OXBHCQa1tjzafjA60XVyC/TFu1ml8h3USgpqOWkVtCIOOQux -yWkocGjKzqlBQe9gfhk/N6+9hc3IxVhAIcUC6h7oi8G0R0RKOqAWgjLB1pxSuzUnl+dmZKIM9M/W -bP+TnF+txSfcxY2MkoJbwt4KSviFoJhXmBFzsj4+IWZilqGgqRJWTjU+aTLrkHHyLhkbc3AbUBvp -QtbFa8sD30TN3PqYqVucdnarcx45D5+6lHJIKSjwX9LNb0u5RF1bC9o7uVm5PAu6qLDQ+zA3y+lI -WChFsMe1qItZkw/yKVEbu2Z+hHZqcZRVlPP13f5tGuKMVJDzKRVZwIGMk1mFWpsPr4+27Fsfo5zO -eiTMwkzPXczfPZDx99xI+669yAb7HsRgbX2v2r6NTFPOZG2s6oJXLsjNaW9GJq9rYmbQ3GZ2edxE -K4rpCMezdlYVcHkDaue3hPT04vUpYUPE2K+OWpRMxMSrTRnJ58NT7YdWRsjHQ1OC6rhVRlmepBX7 -H1b+GQMeTjugJh1SatzAq0mYgQMstEsJM6s8befUbU6RTi8879qf0ks6tz09PRl8CryVURY10S7G -zKzS9VH66Y1RxrngW8IhCeHb//Ut59KfUuMqEqJXUpJT7JL4NOn0GuD74pvmr2efNe+NTnIqANd4 -CLxuFjRzBjAGsXaciOsbfkwYmn6MG9p/juuIp1J2Yfuagd+8Pko5tw06ErQjbcsvIMO+NUZ0pJMx -HfFEUk8+vTjUfmCs9+LvHXfqv8tY1IKkhVuzMda+f+FZ7WcLT6o/Xnhc8+nGEOXkwgjpeDd9/z/M -3WIUb9m18gxgRs7FqABPUB01Ui9uGqgXIiY2YJ6EXsD1B2iPuIlfj2NLwS8kF+C1c0EhLeMVktMu -4FRY64z91ou0q6cX1o6COYWdaS+r9t2cVFiY4RNzAXbzhp58fmOMW/7O13vz3bxM8W6O1YzaWg7F -9C37ozrQsGbKhYyL25Bxi0g5n5yf86kVqLt3MP3bpODeaxhogiTUadzOqojZ2VWIV9CZDUrY2YCM -j+sO1KftTXvk3KxPJduaVanfzat6tmZlosKcTJILQs96wRdBLWfdvQNZz8DdbODmaD7YfbMwp5Dn -ZiU8DNYU+q8Wcwk6Mi4pK+2U0gvuvpt56AHwAtSUlVsDuHQC/MwVxMGuiZroF1G3ShK3CjuiJlZZ -xivj5AJ99/MzPXfwqSpbC8ru3KyQiQbZTdl5iQiblUlTHvBEvv77Of/1l+8WtXdBk4njNlyngw8L -dt8qBDX9KNQBip9rQC4DT1cPWNmStvEaEkbK+ZiRVpy0Ma6mXJxmBLAA8w38mglce5V0qSRRiwT0 -cU/fe5+2799mldq4jVHlflr5MWIbuIH7VcQG/IhPkLIJ27IuVk3c2HZieaj6y+WR2r0rgN1Lk6pO -9zPqqfnnnYcSek4F+MdaxCRqiU1LmkAfFc+8bv1+/lnDX/M+Cfh0XsUmeBTMgU/JhONs1MspK6ko -bmo9vPiy6pOllx0/JQ1iAuqWcdeGqacSRm5d3ASYA+u7Md55ZOF5+w/Ou3Wf3qIe/judvPqr1JSc -EJ1gl8bGySdjE8ST8Wn6xdg0vTg8TjyGmOhlcSP5YtLCrMx4pMyYkVmyOdF1IjzVAXtBvhg1kM5s -jIMPn+46brxX8hfb9csfv/PxiVt+fhdqAy9kYFwKTdMuxHT04tg09dzSSMdB95OGb1dHqBfToOcS -+KRXE7sqpqMWrQ03f7fwrOav4VHK6eU3XYfv0I984L/devwdaGHASjoCOBCbosLvYlenHcJOwOw2 -HFez4GWB57tywA9Jl4weNTBK4npaEQJYnQDtiYFmTzsZV7NehTS3IBFg7p5+zNM7kIf6xLyCLsRB -L42Brll42/DV5ji7LO/XDiA+blfGw2svuDmtwP/tWSdoFTu9NGmjl6Q9zJpckEcoAE5mvYMPUVf/ -TcQFntCl5CeAk0JGxuWolVUehV6JWCiX4BxJ2/NKLQr4ivfB9pxSUwjKRKC9pDnQbPkZlQYe6rRb -Sk/ZQV94lKIM6CQs2P8YAw+ztSCXv19WDW4vKHuyPl57wkYpxqcEZWB/8x6VDHXwGlDQKFnwBknY -4xSsOwqaMmXj1KRd+KRzflPcxq7K+WXCbFCpzAZVqtycUlUAfIAeYQCPyHIzKm12TgH/ptZk/QNP -MF83vJ56MD+jGcgD98FjIAv+KuPDJ6xym5NO0IKgmzaniCdRu4SUcSvBK3PrESsHahvnViER/Jg6 -F+i9B9pOmwB/k7DJmVvwe1ErvzVp4jWEpuC8jGJ22tV7DZ9Ulob9xHkjCR46YSGcWnpz9dPZxyV/ -3JjoPBEyCRqWdZIGw53GvzpvN36dMolb4wZ2RUzHKd8Y5VzEJ20FnrR/uzFEv7AVUMjWJlmXNyY5 -JeCXmEvDrQc2Jxu/D03XfxszNO8PjzfvTxnwGlKwN0Fn+X5p/xGzaMRpOL+UnVU997LqU+/9yo+c -1yr/1dFX/afQcw7oHXaV627F56sv2w5uOQWErI3fhMJ5rg+3/bTyum7v8qvaL4AHzuE5hCZZl1Cr -uCvnEdOybmFnAnhgbaTjwMpQ49fuB6V/Xn5Wf/C9n9WQBT+SBg+PT72LGTnlMT2rZHOcfCI0STmD -WNnVGSe/JWWDGppmlWFOJQ+xCppXh9v3ue+W/mH9DWH/5hDpSPBB20+IQdi55VNIEVwzWSTEjE0l -yDu0qqxLzolZmGVxG3ho8KV5r4y7NavuC9m4jYvw3KQRdKC3ezALdZF2Avfo244krJSS7CKPjAV7 -76a9PYOA3UIUsBl6rTONexhbF3gZRkXWL2YlPexmqFnWe/AS20GVFp9cDnjUDD6AXZjjdr1bYja9 -A/zPe9WqnK/nWtbXewuBPGCvG+JWdlXCwa3fBJ25MNryfQywpBAU0vNBmRD8BBV1setRN6cR86vU -SbeUDd5InvN3D2JehSDjEZKyPtDzPikLcFqMugUdhXmJIDcrBh8s5eYCMhHi5nWknFzgdbkwA1ox -YWGWAofUYqB5YxZWRUhHPRe3sK6mcEx2ydkJwPiQjnw24xIQ03B8NqjpyQQUCswnIG8tKFT52Z47 -OL/kZrXX8qD98rNyBRYQknGe2ZrFPZKmO+NVyzOgZ7MB6JWgUg38yE17+R1xM7ca90YJl7ArZKGX -greG9eh/kA0OPM4taO9hHik3bmXVhA3MUsSp0ebd3X1Jk6A1boS1Al7PBO4YcF+ZcPAbcTyIWji1 -EQPrShT0VXiCfimpF7RmvFJW3CnuWjWyyzyPWvauvKKcxlwSSmiSdCY5za5ITMoJoXFZ8+IracXq -sLoD+oL12/XY4bZ9CPjShTeNX8f1pPOoFTygm9v8t6CAmoU+jxkZpSvjXUc3hhmXMpYeZVwnbY/p -eVUbo7SiyASzNDrGuIQZOJWYUdCw+qbtoPNWyX9eeUk4DP3RjBoYl1HQMeFxyunQaNv+2GQ7cFvn -8RRous1x+vmMQ84EHdwJdd2E2WW0mI58LjrV9ANibDucs5KLs3bS+QzwbcELHhW0T1THKkkaRM2Y -Q0LPAvYV/GJG1stuiBha9scNgg7ErlaEJtglwJ81CQO/AzXw6zETtwoDTEqZWdXrkx0nFt82fY9Z -pCzMpuShFhk1bZWRUQtoJreE/rdZperdjAK0sZQTsjDLF0cox1NWOSsb6P8FdYooUR3OK5w6xC5h -ZOdlMmxGqYLaZGYCSnnaPwBYrZSjLnpl0tJ0IGlrP550UksQL6suD5hbmAV9MdNzL+/rg8fAw4L/ -2vPCjIiVn6PXFIJ80AecWthDTs6v7cGvWeLXJvFrebmAXBQD/Agb2FfTLnbDNuB1PiBho05+a9zK -KI2DZ4k4JKQ1M/CoHfSV7+bbrL/vdi4gpGI+Xls2wOvI4D99QjLqExI3TPhEX5Uc892awMATZPwa -LegEFvjwpqSVU5WyCdsxp0YWMpLOhQ1dZ0CHsbPu/ru/+V23hAp6E58ATcM8MmYu2A== - - - cwtyVsSBZzL4dTTf4MNccOApPg11C/RfboZPwqfVF+aUapzjEKechYJGxaePgtbqzc/BMbNyaS6g -kKRdCg4+Sdv1ou3noYHL/1rw9t7Zmrk+nA323k56ua3rE4wLS0OS6tB0tyTjuzWeA52VdimFKfut -lzHbI2fMfeNF0ibuQt1yNuZXqzMBTXfKoqChdq0Mtfdq0w418BP0uJFatK6nntuYYF3CbDJG1iNl -hyepF5KTwgbUPNgfm9YyQ9Py9rVJYeUm1NLK67b9m6Pkcxmbkgva43zGAljrVsvwaaAo8N/qaOu+ -5bftB8NTrNKsXS3N2Hv7UuBtUwZpB2ZWsVGjpB2/rpTQkc4svSz/y+Zw8/exCeo51CjtXBnq/Hn1 -dduhjF3GQGwyStJILV57W/n5/MPSP8aGCeCr+bVZh5yBWIBr9JL2LHiKhJ54JjZZ/3Vyqu6bpK75 -IGrG/ZaEkgNvuDTcdmD1befJnFMly3u0PeCtpZhHRME8vLaUldeY98GaOPgdIfBxqElKzrj7bkV1 -9Ctrr5q/CY+0H07pWeWomVuHWvgtedAym5OMixHwhXmbnLUNHgD4pTmG9zPgFOxHUdzCq8Onhmeg -dxLgS7OAQVn3tUeY+/YI5uu9kw10X0fAE8TAoyftEmLW33sb8FGWtis4aZtGmgfPkA9KeZif24b5 -OE35GV5nbkYq3J7rvg14qgXtAj5ACTWtAb3Uc2N7Rt2d80s5GbecWwC9tD2rvZ7xdvejuO4BXZ22 -q4WYU0qBfW5KQB6gB9WYV63MwOtgcFzCoeSmHBoZ4um/szwlbVud4FxBncKurRm5ZBvq8P2isj83 -I+GmPKBD3BpVynVPHwONHQVNhnnl/HxAytvGtZpfo0571LKYjVoenmo7lrHLhTnPtUdZt1YbM/Pr -42bQ2uDBELeYUpjruV8AfswHFNK0/f406rj5FPN0d6e9KkkCNCsKe5Kd7X2wjV9rm1UoE7BOUbOo -DTD3PGrnNuZhDfP+gUeFwPXXuUD3AK4DEiZJe2iaW573arpjFil3bVLcFrcMXItZ7w2HLA8mY87b -Q4hXIYtYWJWrk/TiTaNKtGHvG5gdEYDf1Sgxj1yQBkxFPeCfTOJ21N7XGzFqBWG9tCXrUkuzbqUY -eJ2B/TZNXqvBNWRYx7gYn+JVJ6zdqtW3grL4FNQ1rE3GqZbmYa2g5kQYPun6ddUX4cmu8ykHr2Xx -Ofk4qu8RQ+9Jsh6FMOvWKNMutSxqlBCX3hCPrI2Qjq2NsS8vPCIeTExwwfOwaxI66uWcE792JyJl -bIK2hZe1X8w/rv0raua1xcDHLDyt+3z9deOPiUlSUQ72vOCQUBHIc+Vt/f6lJy0/RXXcmoVn7T9E -h2jnczYZbxu0wLsA8K1HAX6cV7sy1nEwqqNeAi/KXxtjleXcMs470ONQA9K8X8YFfU5dnWw/vPCm -+ZvYFK8q7pSL/Y8IP6094ZWhhsHrW5BDwakW5+xKDmIRtrh/Kf/Me/vCn1MT5Cspq6Rr6TXlaEIn -IyUtPao07jOgVtNOESFl5zbMT7Tu39TTSjOugbtxe29/zCqlYq4bjzHcQ4A2Aq2jwMDzIzYxMWXU -CpOG23dTFiUTc4lJGZ+YkfGLaIU5Mf/dklT2fkkiRr3Muij0IOrUKuGhyrjV0kKw+zqOxWmPUpIH -jH03p72Z9YkYCTuxGNe2mFUjQEwqJmrVSPDa2prvA97qGUB/q8newYhZTk651Yp1k5Tqf8U5mzJ1 -i3I+hTAXFDNQp6A1amFXZYIiWm5OxMR8KiXqGfw1bBW2xZxyPuCuNu0Hr4Rzj0dETjrEBNCWgqxH -QktbVfzwtLQLc2oVGU/PIObu7i0ENL1b8zJpYU7VC/6fmXRwIJeBO0l7/7WEXc3P+Lr7c7O993Nz -g68yoJXw6e2FOeBnv1KyPE68fJv6/QegB2iY/8bblKfvTtrTdzMbUIjzsN8Fn1q57Zfx8Wtajl+b -j5hvEc6GLPcmV013nixM9wjWTApqAnQEaD0W5pbxEaeMG7OJOj0P279GnIKOlEvQlnSJCAj+vrRD -zk47+q+HDVr+8ji3pODvGdyaU/cX5qWitE9CT9kUzKRV2hUx8GqSFilx3czrsN1s3LsxxG3dngH/ -4+3pB53dh9kV7ISRfXX2We3eqI5WtjJFujQkKvowY7h+A3V1dyedYlLcKuqIW4XNm9O8yqU3pCMb -48xi57OOw6Piyx9uvKaVb/nVeC3zs1CnKQerZn2i5aDzzpl/mntYuQc1cRsjBnbl6ovOI5hRSsna -ZaykmV2VBD8cnug8Mv+08ouVZ837/G87z/3KPf1h8E7npW3vteeg8SWYV0RDwaPFTdyaqJFwDLHS -yhAXr933sH5v3sFrf7eoUGN+AQW/Toq6BO0bU6Sz62OkM2mblBF2sDos12s+WXsqoyC2X6ZRF/gA -k7AN58DolKDKeqP8E2vfxU8iI5TLS1PMK5PdVV8iul7AlbvjGf+1l3GLsB3nlYSFU7080XkqpGNW -YoAZEYOMGDcrmGnX7aG0Z/CXlKtnMIlzh1NCjen51XG9ghQz9ciXXoKWtCo4W4Hum1vB7pvvF9UD -0Ce8tI9ZH7cTz4D3bI+ZZbTlUUYZPK+pELz2Khu4/jbjH3yWDfTexrkEfDUhYSWcRuyMctQipyFG -NQezXQPN1ne/MKceQEHbJ11qCQbaCoWfSZeMszjOKZt5xjmds/b34e+5YOD1gH8YSYeEUcC1zbxC -iYI/Cdv4hGXg0phNIQxbxcSwmVOZckkY0KMK4CcN3qdbcA6IXUpzP2r5IaqDvvEOPsJAT0GPgc9g -t2SDUvASIiri5jRl/N0Da3oFbWlMXAc9Mgje5F422H0tE+weyM+pe6BHVIWgUhHW02qG5ee/RvQ9 -/QnvwC8h4FPE3XcjF+z7NRsYfIbrt3fzfFrGzWudfd5+dO4FpTzmvPFyxdQnW9J1c8K2blV+pv9h -PqhQxUy81o0p+qW0g9sY1zNLECevNQ+6NwtaKwdrjgGvp+xyegR8+cY0vwI4/NbWvLo3Ny/hQ66k -qFFBSlqVDAT0WdwhaFsc7zzivtf0RXiC21KY6b4Rt6pYcaua9xve2cH3GCWdqFVGhT27Mia9/C+Y -sUcWMUkIm3pOWdzCrwfP0pwwC5tSFgkhYVJQ7I+7jrzgnPvd0tPOK/g1dMSJ+yVOXchMLV4f7zo+ -97jxh9gE82rOKeciDhkjNiy4WjD3qsJTwra5l10HUBN4K4uwA7PyWxM6dpnpbsNX6qYf/iddd9XP -hYD2VtTOrU86BO0Zp1JY8Go0mIdwLqpr2hfVE46uv67/smCll2dnuF2bZvJ5xKoUZaGfUZuUDJzQ -mXHKOWEro3xliHQKMajlWcDMkIFxBWqxPmXWipJGLT8+KelITonbEwYpwfS07QC/+pt/iY6rZJjn -5uuwScmZe0k/HYM1yXrVoHvUg/g1jiT02NIb1tmkUU5H3UpZ3KJkx21qYdImoxbw9yKcoIVBV8+N -dV2823nwX5FpGXvL33sHcYjIGa+EgeL3gPx234WEm/UpRLOvqOdfSM7/J+uNmq8LwetvEM+toYTz -2i8xuxp8dffA1oymfwv0GeYUtMWNvCrELO1C7XJGxsdty/ul/Cx4IATqDPMPPETg92+YacXLE7Qz -4UlxfcHV3YM4uE2YW0zfCvQ9yHo16hR4uHULv2HDwqtf1bHKFkdp56MWCXlmmH42ZddIscDA08zM -dcB2bU/SI+MknEJCxMCpmHtJOrI5Lm3BMRPz91xLufquYwGlBgto+zN+lSofkAkAJ5gLY5LaxVFB -Rc6vUsNDiYHvyswMPM3Oagcw/B4B4P6cXyHNuMDru26+3DSz2lb15Itpz8Aj1HfflnTfGoLX1mB+ -WkXSxqrOuEVk4EJZGs4/FVCrEX/3tbR/8HEm0Hcf9QopcH50zKfQvptXqLPgoTGHSrIV7H8InDyY -Aa5M2MWdKacIdKGwKxeUibcXlDifqfD3WtGAti9mVtLjNjl1w8iunBtq+ykyQjubMgqboI4oKfBO -SatGnAI/kwSORq1yalTPrdwcZxWD5imPTnOvIsAdK8PkE8vPSQfjelFjwiJoiOr4VQmjqCWiE9Uv -vGWei03yq9975aL3szIJrqOzoAHBR/GzLq0SvEt3zCBqD+v4NTEDrzoyRjuDgRZN6AX1aauCu41r -d+D69THiiZmHTXuXH9V/Hn5LOJTWg9Z2KQT4vQmgHUV5Z48m7+pWJw3c2qQBv+7MqEAshFMFN61y -Y7JxH3imoxlX7620rVuJWBWslB30FOzP1pyYvT3Ho24FhSz8WhVm71Gn7beeoba7w6jz5tOERUxY -H20/sPCi46fgU9Yp133KGcyr7Ys75LxVqLG48d6LlPXOa8zd05dyiYghA/FU0kItSpmZJVm3hJZy -8ZoTFtBt9r7+lFXBwN+bDU/zq8OAZ8tjjftm7tV8v+1WSPOgS/B7HRDnjadJ941nKK7PPIMPUm6N -JjTJvbo+RDsLGHg1C94/YdOI487+6yn3wF2o1ycp8ECoV0RGXbyWLdBBhQC/C3WRL4f1Nd+krZzG -nK/nOoKvjX1gEPPivkbC3poR0QsBAQm1ki6tDdV9GZ1mlMHecFCXhIJCfpmZ/kdp0GpR8HOIXyWP -OcXk2RHKccBlSQ6ej4AXj9mUPCygglqV88EjsQteMS0Ffi1kBJxxiKgpz+0JbE57K+mTslJu/P6r -HuCs3tuYH9edoMdgbxGnUoC6B+6H7RrlmpFbWZjpvZvHH7M9t3PwwH67945Zizk5bTl//8OwTS3a -NGmlqPvm20wQ/Pq8ejAXlAoyPikP8YioESvlcsYvl2fmlN1rNnppYa7v4dbytcnsXM9dzCfHdSEn -7+nuA479JR/U9uYC2gH8enNhTi7NBHmkpItWCbqEmg1KONlZhSozq+lL2qQk1KESpRwqMdQbB78H -DXXyO9anyRfCBnZ5Cr/vySqnr4/zy+N6KeA11CTwzZaX3ZBzU6+ujVV8t/C87M+rLxq/QXDdYRY0 -JHEcs6n5uE9BnFIqfn1jy8cn5zx8whboSKiHnjh+H4yeU5G2aoQbk6LGDR23Gr//bHWo4bv14ebD -iIHXuu3XdCMmdiViZlckTaD5TRJicqr62/BQySfRkZaf0uDjsx4hEXNw6lEzuxa1CrsQ/WA3YugW -xK3MqrmXZZ9FJjugN5h1ea+Qlscx0iZoTlildKitR7kZzWDWz2lBnaQixE6+iDl4zTmPUpQLaPqy -ULPgSdVJk5QQHRPWJafkxMS0pA1zMWuzfnZz0i5oSzk1Uhy7YH0YcYOCnDL3KEBzMJImSnFcRziB -gZ7EPGIq/v4rYhN1JE2cKswhZ+JaDAMuQVyMyhTwW9rNqku5OI0Y/t607/rLmLNvIOEcvJ9w3JvE -3IO/gKdiFFxictbJb0+aufUY1FvK063BvH13ssD1WOC3erq3NatUb/mFlKybWZt2UQ== - - - S7eC7NbtAKc17aKUR620qwmrUpz1qQFL8et9+HuHUi7m4LaiNnZdxi2mgl9o2DQQTiFepRoJ9N6N -e2SsiEcpTgIPoDNyWdJDKcl4uK2YV9iZ8QHee/tuZ4Pq/5OEr3xoK9viTTvtTG2qtKWlRpVSSile -3N2dIIG4uyckBPfi7u4aJCQECQ4hSIJDO/fe9/6OtzPvw/kSwsk+a6/1k73XPhmH04yUoylqwsk0 -KVo7hg/Z7Ic7bQxifY7mRDnHC2zaCfjO6Vxh35G8bBLoxGagrXLO5iVFF/PZ9RcgV/VreadKoehI -wUD+WhSmgzhQwBxk/F7KrNSvZ/xa5LF/L7GZIG/pi20YV5Ar4ccycaZGxiIcytlAAwG/IUsDvl+c -fzbPTztfYDMO59DRy0Mx5peLWTUXS5lVQMvl/QJc9XsxpwVofeC1eMyzOQH/XD8WpShT33NwKCND -98aBn5TzWb8WRcCP8AVAb9EPpNRY/Tr0BdB3F3KAEQCHDqawQZv9qY6HUhpcP9btEUrMQiPK+mCA -j/0NavB8mpJwOAFz1vRHf1lp8X+/05XscjhMjD2dZmNVLSmAb4lRZzNiIbjSNCO06O1BnK9mEOFy -ME4MOZsFmK8UinemCFELbbDvRyMZwiOgiQ+lXNx2N8xOWRlkuNYcbX48Rk48l3GIOz0wG+0w0vNC -36M3y6Op28M/7LRHWR0P42POpzmEIyk5eqc7Wd/jZbY3jPbZGWIiNlqIIboxMN/dKd7H40zMhd7j -TjEQ2lFqvH5PUidlocE85e9NMIB2piX/nqfC/5mnpPxWMnG/51mkUwUp4UCK8j8YI4YdS7mYvX4O -7KCXB98fIIcdz6R6XsiJQJtwSCf6vocFvmBrhBym6eejTqQFtUdTaZydHpyfpgsffDbJpVzKuYxD -KTlWMwBzUPcmWZ2BMZ9MpXEPJ3i4kxkm+miSFH8sIyccy6jJvxe4zN8LQsk+8CzaSXEawErAT2Kx -fk37F7guFULx+SyIwxzwvzP0FKDH4JcLHOaFKqvhRJlRql+fvZzj8/+zxGH9s8gk/rPIwGvHU1zV -g9Gm6sFEaxD/iJ1RbMjeCBtzOpVXeSHPqTifSRPsjzITd0c5iO1BWuz2QKq7dlrIU0+K2FvAW+pm -8+qOgb47Wxbm6OQp3vp7HM+w8UATkU/1PlXBIWullKijaRb2Yl6Y8VvFSztboKJ0cmLM6TwNdbxA -hIIczDlVlIweK0smjgH2ny2kF1wuZ7f8s5rdeakS5pwqucwjOZt0+v/rgXeq7xdWirL/uywpP5YR -405mqSnnSgLwMoTolU6Ek2aYEKSboqeuDmG8DvV9DwvZDWcLOc0n82kZJ0oO40hBgx/KsbEHMiLi -cjGj/HQuTXwG4gO4o+p0nsfbHoizPgG+E3ipzGOAwyfyNCGoC31epoHayLmY57HP5UIOeCYk8FGo -ExkD/g+YF+DjM09kHII+D8/BfS4X+KLfKnHRqZLP35tA+6p74PZA83PPZGl8kH8R2jFCxNEYA3Mq -Tc+/nMn++WtWnAF8c+pqK9xGM0CO0fenA3+KOpwAXn8sjaObFHCBNgXaj5G0CzzA9gjaa7uH4Kcb -LSjfGxIz9we4sN0uaoS2lxhxNA5yCviCrT60634/0ulCho/9DXJBN8FF6kZE/JNJSd7pjCT7DOg1 -fV/2IaiN0xGM/4WSmNBV6fu5jetjfjYm4FwqBLyTaRbmcJqJ3Aa4djBMjT2ZBLGRp6Xr12wUzXDr -S4An/1MxqWcydPDeCNpT9+8eMiH8aBIbdDZNh+9LifG1XMdX9XTXN7phDu33kiD7P0sCMeBz5s4E -G7kjpUDne5COO+Ns7J4M5NYIHXo6Ick4nyiou5zJyD0YI4Ru9aTabbTHm2r6Ux2Op/mUrX52grqP -FXMGNMbveUnpLyUddSoDOCyjpxzPMFJ0+vVemTj9YJpN0IxQ44CXz7uQC3lnem05KwA+mhC8N4UJ -OAE582uJjr9Q8QRakCu6mczCi8XsxsslHl87RY49kjGQRzMs0sUcnfJ/VCwW0JSIhS6o6XIXB7YL -4r47KgQ8IpEcjGdm7Y8V1milhY2AZzJ3p/jklVF28sogLexEkdesA9pIOydMO1IIMg5lkoJjuST3 -dC5Lj/8Fp3JitGYE53c4zaFfLmVWH80zCAcKfOTBDD50X4oNOFTiwo/n9P1h+T2XK1mNFwvp+Rcg -b3+tZDaeL/NE52DsOuD9D/RromC+TuV0tHYc4XEmo4A64VDPZ2nwSwWL9J9FNuv/qLj83/Ncjj5n -DyaIoZuD8B/HU/Rk/R4K8BusE7mAcyTPKDlbyKw+W8iuPwDjPlZwaToZB38ylyYCuczVAj14IhXx -L/TPAL6vkXLQ+5McNMAf3m/AKUfAC+0BH3Y5m551qUjPuVSmpf9W8jjnChZO3xd8CjD+eCr35/lC -RtnFkhDwI59zBD4DPES+VHIZ+jVunZQDfoODvZzLKL2Yy6m7mJXkXs5Isk6nhGz9Oqi+f+l4igI7 -kpJitSP4gNOJdJFOml+1Oyqi702ImJohHvJwgoO9ADE/VbDIe5M0pKoNcE87Oeb3dE7Z2TQbv9OP -91MPEIOBFwPamk3QY+LlPBN7DrgY8Hvx9piItTXER/y7Fgo8xPksKV47ivTY6Uc4LdSFv1mvTrS7 -lIpE53IeSwNq42Q6jX+hyKq4BJh4KcsuO5sRsg/BOLUT5BjgRygnMjLgBVoKuPdP7VRBw7lSKATe -GQf0UfJqS6rNeF7k28mCuK8nU1zWoUyP3yyMblrA1IxzMdppNkY9QY1TTzFTtqYYiRsDlLBfILa/ -gB89m2GhT2Vc2uU8h6rP/60+ot9GPykQ+JHQgxF69Lkc4NusSAI0fPzhOBt1Oi3J1u+tnShyas7m -M8uAbxQAbmedAbxZ6cIGLDak2FwqxFkncyz8bxWLernIJP+j35te4rL1+9BHszwG8PC558o0MdCR -uQCr288W87pO9WdGAEcezZLidsaIUVowTzp5Gn9zkBZzLM0tPZwuatfJskv1Plg7LeIdgnEdzQmE -x8AHnyrEwGdJJDpZXuORonjoUJ6RdzQnFBwpecy9WRpsZxjo8WkW7nQe8OkoJX6tjxlzMJlTeiIv -aNOvvV0u57RfLklKL1XpP0/nmPh/FkV5p0Ab6mYlefuy0rHjxdx2nUJStDHGw6mlXPSpnIH4NUdK -+KWgpG4PYL1+A0/0X1BX/1FyaJdyeqpukhK7B3Bnsxvlpu5Fu5/PUmGXczwWmC/sKfArR/Kf40cK -cc6BjM/QAi641K+N6/te5oUi/XruGdCyR1IBTTvKhumkbLhumk8+nuUSgTdDnU7RYYBTE/TnL45H -06jaEXbq/igNaFs2Vt/zfyJj488Ah+i9NKhJxukcj3m5JBD9UqVln84LBDrgjQ+nWPBj4DV+TQtZ -YK6yj2V8Jqi56BOAbxfy9OxDgH+rnRgnVWOKxUZ7ii3Qz4knk0LG3hgbu9VHDdsfzk7fH0pnHk6w -gb+kp+wAD7DSnWR1MEyJOh9P4/6eE6UvNMVbb/dQoIeTYv75bBr/EtTo73kO83KehvzvMoOonaQn -rnTRQ3aGOEn6/ffTSUbS0TgB+HNc+NEE0NYj5KjjUWrsJdDRFwoe/UhKh+r3mc5kYHzjfNL5TGbe -2WxmycWcOPfXPJu+P4Hx1/doAt2D0ueXbkYMOIZH000Bv60/nzBEidxoRTludqLdTmS4SJ0U7avf -hzyX5zcfz+RU6Pu1NOPUmCOg8S9AnI5lHJJ+fxvMMexfDzuVkXkspyP0a5/bA5SoPTC2UxkpRjuJ -9d+fJkXpz0ecTqdxLmYz8oCuzTnR9zjNi7LOwXz+UnHB5xzi/hgDKquD/9Cvyf8PeM+zeTbwLdTk -UwXADpBzv1X8tP+ustn/WWYxzmcZmHM5m/JrSVRwviwqvFwWF58viotAjkh+qdJLfq+IS8+X+KKj -OS5NPUwOBXyceSLPLD6QCej705KMU2VOI8DHXL0GugCa/GgmjX0mF0vOge86lKVnaeVZJbrZou5D -eUHniTK96BB4WH09ns4zqYtd8eYbPQLc7ljtzP5M2cTebHoe0FWF4H5ZFyqAuUCXXSgFfP35lSO5 -OHNvqmLiSJ5deQQ0COCnbL2XP5RRk3ZHkF57Iyi/w0lqwj8Laen/U4kL/lHyQSy41OPZtEzgvysB -H5VcyDnkSwUt5WSWknCk98dKLvt8XlywN0NP3ZMBzbOY2wLqE9SmUKjXhhcAW84UDMzeIDlE00Py -3R+iRemA5tX37x9PkML3B3Beu/1Ev+NxdqqmmxK43Y5z2enEu/9S8FlAw7JPQY0A34bWjtFiteO0 -WJAzyN8LPLZ+3ehgkovdl/L055zIZxNCypmUiz+ZZCH039OA++6PUKJ0UmaqepgasdpFDVhrJ/up -+3DexxOEsL1hUtjuKDlyq4/kr+lPwy014zxX2uD2uwB/tADL90Yosb9mhNxfUyL+6QwDOVYSaLTR -SYrbHxfSD0YF2F8zYtF/F8X5/yxyQK3QUfq+OVBDgZp+qr4PM+x4nBzxW8Ei/l+Ap/8F1/G/Z8JI -IaBeYs9n6anHUkrM0Tgxercf66cbYiZcyPIbTmfzgaYAvDoNPPAYMeJwghB+JiNEnMxgww4nGSkn -sjTBGeAC/Z7o4RgpdrYy8OVsVYDRwXiyI/C/fmd6Hz4lYBxNpouOgV84nOKRzxUCLtBgEqDVsaD+ -k85kxKjTaSrw9jzC8Qwdpte7RzJRGvC6gJPJiftShId6FOl+LmMgzgFn6ffCANekHsuYKOAj8/S4 -+2uFK9DHeR9wzkY30Vvdiff4vypR3vm/PWF82qkiu/psUVx4Nk/H/loiJf0DrvMZQvj5NDnmEmD2 -6SKb9lslEP9SZVQBHVQDrqoLgOnni8DX6NdxFLTUc+CXDoBXAxwQsTOekXE8JwGcQ8cCvSa4XAJa -Wy5gnyloyOMZWureOCPxQA64VlYu08lLhk+UmWVa8PmJnIk+llMSD6fRwYeTArZ26mfvvqygeRPo -mBNQW+eLmTVnC2kZ2kla8rGcQzxR8hj6vpzT2ezyo0mx6HI+o/hckVGsmxBxj2c5FPBbyNNpSurZ -DOAUoEMv52joXwoOBeijnF+q/P6LteyOy+X00l/zXDb4W+rRNCVON0WOOpFRoEfTZCjArDj1KBd/ -LMsouQCYAjQc92QWYJeChT+XUxI0fRi31Ua4xUYb6sdaK95tpQ5tdzBACTkYIPjtg79perFu6y1w -y7XGxM8rtbHvz6T40LNJKvR4gpF4CvyDdpQYrBslhx5P0OLOJpmpBwOMmP1hPlonFdKPp9KYuhE2 -7GCQFrnTqz/3QQo5GCKH7A3gfTR9OHd1L8ZV3c+IWOsk+W50oh20I1if/RGc7wHI64MxUuh2H9Zj -siLUSF4T836zC/z/mACvG2frzyPgj8bo0P0RtIdmIMXheJIYtTtMDtvpoQZdTAhI/w== - - - AC96AfD5eBz4iQla/F4f3nu3G+2814d2OZGSo34rWcCfcliXSh7rcJyVuttPDjocpUb9Atr+VEqN -3e5Ktl5ugH7S9tIiTseFNIDbXOB9/+Wn/ygFaUdjpMj9friDbjjJ+h/g2X8pJUVn8n95hwDy0nO7 -A+sPnjHyv0sM6qWSjjydocTrRvGBmj68z6lMyNXq+8SBNzkHmvYY4PGxjI05niHFaEZSnbSjhODT -CXqCvnb2pnjEzT5a2ME4IfhkBg88DzHst5yFOZ9iJJ9IafFASwDtzaXrz6Lq16UvFgX8S/3+3iRb -v94QeQae9T9AE+j7bk4n05hAGxbsTwAelTExF3MM3CWY/3+UDMzxODFspx/lti9F+1wqmYRL/X4Z -GOe5QpJ3BmrgQikpOJ/nc3UyvWehJu6C+dnR99DKgdcAcTlT6HlIkH6xyBeeyClJpzJi9MkMOf4Q -/NYp0P7HQENoZQL2kSKrHHBJ4fk8C38xzyT8Z4nD3JfSoLtAS2+NsJJXusn+OmlWnm46PXN7gBaz -2oqyPZWzCWdAP+t91/4wIUQNPOnxNJewP8JOWetihF0AnXgJdMzZFAu114/3OZrA+p9MEELPJ+iJ -+h7T83lJ8cm8pEi/Lnm5kFl7AWJ+OsXFHUm5mP1RcvhmZ4r1SivcerkFYaPpQ3vq95d1MgHjVCHk -/nsORX8ed1Lf74H11PTg3OQlqZ9WazA2mh6i71ozymavB+ux18eI3GjDuanqkkzmiiOfr9VCP+31 -4Tz1Z9Y1YwLiUgPSbr8P73s8QYnRgrw+GKLHbHcSPPXnFTVdtKD1Jrzj3iA9arOT4LVSi/qu6SZ6 -6ddmd0H+rzfBLeYrEz8sVMPNNppRtrpBQsDRBCFkvQtut9oGt9kbIgYcjOL8dWPEkJ0eos9mO9lb -Xp74caeT5H86xk45HiOGHg4hXQ76Yba73SnWB71Ip5MxQvDRCCVyuxvvqapFWmgHWInrzYlf1xtj -P2j7MV4nY9RY7SDWSzeM89MOEoO3Owgeh4Nc2OEQF3YyxkUe9LOhBwPsxK0OEvg99I/1lmTzzXaY -1d4Q2nN/HBeok+rXrqhxAM+Rp1OkSP2ZmF/6szjTArp+P0g3Sk+6mBEwjqUs+MUsA6nnaz1H6YaJ -QdohUjB4pqADMIYjKQepG02j6SbEnJ1BeqRunAU/Gmcm7w/gfXf0aw8jxKDVNqTdejvWaQf4kv1h -SthePznwdJQB/Y+Mhf4NrmPga7baETbb7RhH3RAt7lKRln4JPOTZFIegG6Yn6AZJIYeDxAB1B9Zp -owVgXx858GCAGr7fx0nc7eUmH41x4LoRVtJ2F9FzqwPteDCE8z2fZaJ0w9TIo3EW7AzozyOQT4cy -Hm0faIK9CQ76cJJP0oySAdcTg/dGcIH69xzowLzre86PJ6nx/8wxUJczbDQYB0m/F3Y0RY3bHcUF -rPYgnQ/Gaaj/LIoKfinYpONpcvzZHBN7rKAjDqSUaDWIzUoLwXmhAmulqiE6LtfSPCcyE43XmlNt -LwDeXwAvowX4qRtBeRyN44PUfZQgZSvZbaEF63TQT40B+YBUdxI9z6Y52P8u8PmXMvD7w4xYvTba -HxMSdeMS0f6ImKNqYPjtDQpwm93cpK1uajDwwP7qHoS9uhtmtTuUaKUZQLjoP9/u4iScyyRZQE95 -A/2dBLRGMMA/N1Ul2kLTjnfdaEJaLdcizLdaiB7rjXS/7XZ22FoD1UNeBHuvyE803mzGO2+2kb1V -LVS/0eyY51tteHfdCCNW3UvwBnXutdaEsNloxjjutJO91G0kj+1uou9sRZKZNAf6ehdg/ek4LU5f -Z6uNiO/6+lisQpgtVyeb6AbgzrrhFGdNP85/u1eA0PQLEGCuUjR9BO+VRrTNagPWbrMF63gyQo87 -n2DDd/Rn6XvIgXu9lGBQz+67nXDbrWbo5/WGBNNVwANbbanfVzvwfuN5IU9W66AWl1IW+mAQH7Cm -/05z3KfttkRz8B3rfYDV2kFO0vE4Fw0wIUo7mIbb7U/DbvUyo+cqUkxnixOMF6pTPiurkj9tdCDt -z6WMlAvgw0Gde+4PkoNOpxiw02k2+mCECT0D/la/pnQxK2CfTDJTLuf5PKBtqVqQ/3sjtEjNINZ3 -pTXJYrsDcHQXJXCjleS3XI/5sd1BDdMO8VAAQ7x3ugleO11E761WlP1GE8Jqvirx41JtytfVGqyt -tosa+j8F8Nrg3poBcuBON9Ztu11/jhTrdjjCgWvA/y43ptqOZUe8nP+Z/HmnGee0XJPyRVWT/FlV -Dfu61YxyVP6EfV6oxNqAOknaaOdEy0qwFtMFsA+L1ShLoD1hulGa/ux8pA7w/14vLWytg+C5O6jv -rRIJz2b57EOgGXSghtXdSAcN0AKaHqA1GhHW6y1Ih/1BCqhBZuzhCBd+pN/j/PdsAvLHVHHMK1lR -zMv9HqyfHuN1gPcPpxgAR4Rc3biQsjvMTlprwbsoClLezeZDX42IIg3byf635opiXu0D7tjpIAbo -RvDB/1ORU06nsAF7QLOvtKPsJkujXyjL495vtyHtd7pxnvqzXaezfNq+lIPQ9DIiNCA/dnupofr3 -iCzWIr7PlaWaLNUgLVRNFJ/DMQH5ZIISt9uHctOO4oJOp8mxh/qe22ak7XI1ynqzBe+v6ca46UaY -iQD7o/f6aeEg91132tA/tluR1qv1cHN5ccK7yaz4dyu1dK/lGrbvQjneWlWBtV6uxFovliLN1+qI -TgvlSPPNRpyjupXkpQa+QjsI+KWbHqbuoAVutRJcV+pTv81Vx37oFfs96OWHPJCXJn9drUc47IKa -BHzgs9KId1xpwNkvVMS/Xa+LeCMv9nm6Wp/kqOnjwdfaWVEHQzy4pp8Rs9qEd9FrwrW6pK8HXShX -bTfafaEs8vVqE+rHajPRc7udHKDpIvltNCaZqVthlprOFBtNN8JOUQP/3pcWfH+tLtXx1ySfrM8l -VX28yVpT4ld1J9JJ3YVy3AF1rekm++32EAM2WhB22gEBRjuUyd3uFaaq6ikei1Vk5/ly9DdFcaKx -qjrly04b3uugjxqx2Yp1PhnnYI/+5VDivxpS/w4L/foUyDUE8HP+p9NMjHacGr8/AnzbKA97CL6/ -WAv9rCiJfT1XlPBBWZr8UVkK+7hcjbbaBjFTtxO9tf30iN0OasBmE9Z+swltN1cW9wbw7cfZPOjr -9Ua8y8mkkLY3wknZ0p93BrpsbwDjvt4Gs1iqSbWar0gymcoPN+pkut2Q5cUYbzUSXJeqkkxWG1K+ -zRTEvB4ThD4eE0Q8kucnv1upwzooKgiOvfzEZ338mEfjGdBX+4BndnqJvtttGKeddoI7GMOPlUbc -j40OUtBwYZQL8JIJujEadLMN67Kl57getMtSbZLpRFbkM1l+3MulWqTVcAb082wxwvV4lAviyIhb -a8H8UFYkm8wVxr9SFMS+2uvC+5yMM5KU1TCP3U5Gim40J0fdw0lcqkMDbMY7KEqgb4cEAfe7KF5/ -zhfFGU/mQ79X470MlxuTnX7N4WLVnfHfttqSzDfakkFuxbwfy/B/tFIb/+lwhBx1Dvz8/gQXrR5h -J6+2kr3my1K/rNSkmi9VJnwaSw82kOVFvVhvRFrLy1D2bYJQ+50uTPDxFEP/rhbE4QQxYm8I7rje -FG+yWBZuNFMQaLDRmmozVRJvtttDiTyd4dN2+ylh6w1JpotVEa+kuf4GzRT7P3+ivlxvZPo/rCME -GSyUoWxW6/FOswXJb+X5ScaqCvQ3WUHy+16e78NWosvdhRKYlaaTHqHpYsdudbLCVLU429UGhOVU -bvSz8Ywow4WK1K8NJNdbg9ywt3tN9IDdDkaoqo7oMF+JtZIXJLxer4p9p/oZZbxZnWK5WY+ykRfG -v9F0CVHaoSzhZgczfKEa9lmWE/JIlhH0cDYz1GA2O8RgsQr6oUcQYjiVh3BSVdM9lCXJH1brks3W -G5LNVuqSTWXFiW9HRZGPZwvi3m20ol2Wa5FOhwMC8l43K1HdSfVfb8U5gzqzVdWkfpUDLTmVG2QI -6jtko5UZtlRPcVd3SrDrzcLY1UaKx3x54vuZ3NjnM7kxL0YyQ4y6hb5P1N3k0E2QT9sdKIe1ZqTN -BtC2qrpEM2VFgslUQajRRLb/s/mKcOPdPrTP2TSfcTDETt7swHnq32uhLE56v1IL/7au58halCWo -lc8b9RjXg05ygBrk5mYjxn6tDm6hLI0zXgd8Mpoe8mS9Fe+hHhAgN/u4CTsTXKzeWx6MYn2XgZ4c -Sgt7MC6OM5zMino+mhbwaKYA+rYC620A8tNiH+i0rVac21Rm7IsuasCtRpzPrTqsz60WVujjuUq8 -43Ij0U1WlPRut4fkt9OF99jv0b/7Bf59MM3r/qgk5Nl0Xuzrbp6PAcDkSN0ID7fVSg3Y6aQGLtem -fp0uiHk+KAi9P8QPfzAiiXlWjvD4q5sdYbxUg3HZ62HHbXWQ/ZdqYKZLZQBz00F9FkS/UlYmfAbP -8/Sgk5G43iVmyCoJTqtttJCD0czM9TZ6+GRuzJsusuef7SSfOz9Tne8SXF5BFqrj3DbaYr4P8l1u -KkrCX2qHUZ77Awige5Ks9ntRLsejxLDTcR5ut5cWqh0VkPZG+eS5MpKdshT5Vfkz7o2sIOqlqirJ -XNtHCR3JjfsWbfn4D3lBlOOpVCSYq0G49qT5Plltjvmw0RT9XlkcZKCqjHmvG6JGluIdn+60YqNO -gd5cb8e5LNUkmU7lBxtO5vk/Hk7zezCWEfWiAOl4Lzf2+431erS7ojLhQy/P/04HPeBWJyP49pAw -6mEnxetOM8b5dpco4AHa/eXVEWGYuRrk9GwZznIyN/LFeEaowUh66KM+TuC9Lor3jQFh1ItqUtDL -imTXu2vNNL9uXpwRkBy3ZDnhhuvVyWaDPP9HrTj769Pp3veVFXjXiQyc41I5zWe3h5sA8O3HWi3s -y2IJ1HihOOnDZGb084n0SENlCda2lw17J8tM0eOjnaoGbbndTPNfrMJaKcsQ35UVMKtegdNdWVHY -m+0WXtxaHd1f8RNltt5E815vIbquN6NtVxpSzZfrkr8oy6LfjWcHGI5lhDxVlFId5GUk+5UGovNi -JcJ8tiDRWF6c+H4iJ+5Vvyj2ZTna60Yjxff+SgPGfa2F7DWTB305nB5p0M0Jvj+UHvpMmhP2fLYw -7PVGW6ptm8jHsJnmYbjby0OAGgyfAfeayAozmMqLfg7w4HUX2+tuE8PlviDy21/dvEDjowFa9Gpt -svlyNeC9+iTz+fLYz4BrTVZqfV6MZbg8XGlHemtGaYk7veSgLcBBM0UIE1UFxlJemPJpoRxhCfyl -+WhW1GvgLe31OmixKun7aiPJQ1YCNx3Pgr6YKUr+sFBH9NjoZEboddZweuCD5XqkjawYZiIrBJq6 -Fec6XQj9Is2Kf73wM+WzVs8ZFalWA4LYdxPZyabL9dSAqawk44VKgt1UAfrLgCDaYA== - - - Ojfh9Vwp+tuwOP4tzf/L9al8oHub8B6d7MDHbWSPm8O8gPvT2TEv5D8TTbY74fa6MVzYUF7w+wqc -3fWJ/CTT9bYMylwV1WsgPf5dKznwWSsxyKCf5Xe/jeT493J9ksNyc9yXrXaM99FERtbFLF+wXB31 -vp/jdGtQ4H5XWRL2XFkQbjhXDH2jrECYD2bFm/eKEk33+tMIR6Nc1H4/3nuzHma9WgUzV1WlmCrK -4oAuh7vKqzCR3aJIk+niJPPDMXI00CLflkqjXy5XxH+czor+MFuY9P2wX0jTjaYz1d2cuPV2QeJK -E8FZVQ8zU/yMfzuVHf1iIiPQYCoz6PH+IDVmoQH2TV4C/yrLJzuMZSBMZvJhbxVFqZ8UP3GWTaL4 -lzG2Rle6WYGWez38VHkFxrpH4Phnj+DHn70895udVK/bygLYp75s6Ntkvy83kTYvr26308N7uKH3 -Oyju1wc43rcm0oPudTM87nRQXe8tVSdZCGE/7qCdP16XilN8LqQi1lYnwm6xOvHjdG7M8x5W8N1a -jNv1obSIp028SMN4x49/DAuiP600Yt0HJZGvxjOiP0gzIl7UEVxvgnBdq0j9eGW+Ksy4XhD6oZbm -a7TeQvBebSQCbkm1ALVhJi+JeTUo8LvbiLW9VgEzuzoo8Db8SfR/WkEM/gBqyX+hAm29UA7/stqA -tl6uQ1nNFMFM6rD2f9UhbK4Drf1ZWY34DnjWZbONGrbSQHDbaME769fUjkfwASdj+EBFZcSHPm6g -0UarELbWzIlcqML+mClO/jRXmmy6UoOyWarC2PSIQ1+TAkz+aqT6v99ppwaNitzvTGT4GEznRb7u -oHjel6a5P1mvCTBbqQq33eomBM3VQ012uikRO8BbzAI/OVMI+9BCCbzdQPD+q48ddH+nFWm304fz -6szwf0cNentDVUcPmyxCW/WnhT0eSPN9tFabartaj7KVlyS8lRdB3y5Upn6bLYVZyktTbff7xeTt -TkHCSj3WfrYk5rWyNMa4he57LyvW8lo3P9ComOT7rATra7gCcGYaeJrJnKTX0uyoF10s//t5CQ5/ -MQMsrowXJJgUEP3f4b2//QUe56m6jRi010MNOwC+Zasz2UZe6v1oXOJ8Z0Tk8WCuOtW2ABf8Spjg -+XgoD++73sZPXq1HO2w2JnxZrYn9oCgN/9RGtbqlLI003R+kQ+cr4XaK/Ni3y3Uwj4WaFO+NRrST -qgL6bqUebTNVmPyBE/z9en6Su9F+Hw8JuCUCaGG/6ezgZ7O5ES9W62Dm+4NY79UOpJMk1f4eIfDz -9dkamOs60NGy3PjXc/kxL+X5oYbdDJd76g6S714fH7XVxY7f7RegtvpEeFUTzgF41C/j2dHPh/h+ -d2ey/B8slke+UQ+TQjszAp/NFBMCNpsL2Uu1/LCZoqS3w5mRL7oFMW9602DGDdSQ9wtluOjDwSzB -fA3Ne6Ig7Lm0IMhQVhz5Ulmc/HG5img/nJ34LivZ8WY5zBVoFRZ0Ijv+1VRm9AtFIfTdiND/b1lW -5HNVRfIXVT3KOh3ufJsVZPX3TC4q8GJSxFlvTbVeqEwxXapEA32W+nmAF/p4MjvRuI4V9sTzi+GV -Fprfx/l6gm8dzfdeSbLVHx0E17+aCO43fqbY/dVOsb+z1ppqx0v58Ygb8/X2dichQlWPtJwtiTaa -zI8ynC6MfTWWGfWyj+3/cJgf9HylBu2Umep2rxjlBfiXFjKZC30LeMtwAWguZVnC+7GssKe1GOtb -vQwHg/mqOPMGpsfzzUZ82Pm0JEfTSwlfA9wEPM+P/R6ko7Yf6bzVkfRdmg/9MJSHdugWx3/dbGNB -VXUEp8WKFPP1epTdehPmhwJotH5+sMH8T4TjVisteJjve3+5CuG01kQPX6zEOGtaMV7/naKn/p6g -QtUdqT/kZWFvdIMc5A7wb7IKlPl8Ne5HLz/GsIsZ9lBRkPBurxvtsjeM8x8sCP/EDPl8Y66U4jWW -BTfroAf+PSgMNFwqS/wM6tlVVYd33e0kBWo6CL6TBVFv5eUJltudQvhSLdNnqRZrs1ib8n2xOhXo -eKTjSHb0t/lqpGslI/hdJSXg9WoL2WdAHPOykxl8r4cTeL+LFfykmRr6uoUdaTZdhXJJ8f122+HN -I0gpwu3p8RgbqdG/EwToOWVFzBtFcaChvDDo9WIF8Bi91AhatN3tcLs3V9tF8e7AAwWPpvs9lWb4 -gDryedDP/XGni259b6UOaqPuJfg1MryfjmZEfz6d5JNOJjm47XaC91R2uKGsINa4lx/4mOb17mp5 -qsvT6SKE84Ak7sv+MAurbsf6bwBM2OkgeG21IZ3H8yLf/MQ43yknuBssteD8+ySJwN/Avmy1UMP2 -+vHh292pbkt1SV+mC8NeThVGvt7pYyXP1GOcZJWpVuouVsxmCzV4uTrpy3oD1HS7Lfn7FvC2surU -HxttApKmN0+sahBETRdgv3bxIgxrsB43pzLiXu12UHzPpGnMozEJf7NNBFttEcLmawiO8rI449mC -8GcjwugnHQz/29UI52vKIpjlagsleDQr6c1COc1LVUX3rEbbXGshud6ZyIx6Ls2LB7o/xlBZhrLb -6+IjdMN89EodwlLdzojebGfFKkpgJpMZ0c8G+BFPulnhjzoZka/ni3Gea83p8JkSkpM0O/mbVBL7 -alQc8nAyI/zxRh3su7qXHjFegnKeLEn5sT/IRS0345yVtQhLVTsldGuQDVc2Yn8Mi6Iej4tjns3/ -RFuMSiKeSbOiPqw1MYJnipHmi+VYm40mkvtGE85pvQHnvNlMT9IOsAk7g+xUcaqdAfBVzhezGQW7 -w9TYDeB5d3uI/ppuvMdeH8H7oJ8Sou5kREwWox360+M/aboF1NGc+PdNJIcbI2K3e8v14a97RG5/ -j6WFGKxUYOwHAQ8KQz7fXqnGRp5IhdTDMQZ0f4gQsN0Js1dVhrydkvy4NV8e9eF4VEABGj5uPC/p -7XIzxWuqAPp6kB98v4ftebeKaH2vimz/aDw3+OVscZyxoo4UlAVzetTKCjM/6BNQ9jrpoQBjw9Sd -KI+V+nAzVVXs5+nckCcL5UnfVpp4EXlo38f9OQk2O33UsI02tONUYZzpQmXM19XGFJulmjjTydzQ -F9MVKXZNLP/HE9nQL8oqnMNyA8F9A3gLTS87eaEZ69qfGf+5gx/5FdRhvKafGbfdw4zRDPDgS2Au -l6oSTdab4FYAn97LSpPMJsuSvo2VJbgttuIj23gBbyck4S9WqpJtN5rgLpoehL92iALTjZDCNzpS -7VqZbncWKuAu2iF2ynYH3n21AWk1JAl+OCwKMxgShT3pFni/XmlMdh/MibMTx9vfnm+iINZbEC4y -oH+XypI+j4oDHjehHP9sInk9khbEmqpB7fKjf9wsxweCehIw9sdI8aqGCJO1FkrAVisv6aA3jXgw -IMAsN2McV1vxPjv9QtRaE9FvswFuOVsQbTyZFfYcYJ39iZSH3Rtkxq20U31lFRT7/cGc9N0BEWmz -De+h0Z+1bU602B9OctrpTbVfA7ioG0/nrAHfO1vOdJstJNnP/cRazeTFv9evuazWIW1mihM+zlUh -LJUNNJ/u3CSzemLAHVlOitlGI9lrs4XksdqEcVyqT7RabYKCeMa8n82PMNxoIAevtQmSAY9/GBKF -vxoWRb4aE0U83azBuO51sKFzVVg3aT7s+2ZLGn6kCGdXgrC/Xg63/HMsPeDZSiPSbrefFb83AK4h -Dny7Bx94OMHGHc1m5O2MSXgrHfQQeRnaVvkTbakqx1gqixFfdprZcWuNjPAefsBDWVH0+41Wih8Y -95dhsd+jfl7Ik9HMBOO5SrI7yKnog4E06vG0gHcwwSPvDefn68YkaYpquO2gJBzkUOjjMbHH3aWS -BMC1CIvtzjT8Qh3ebaIw8sVSPfSLfp8K5Iv1ZhM9UN3Gi+tNi3nfzQ7+tNvOIewOcJALjUmm28Az -q0HubTfj3fbbkA67PRSQuwR/VYP+vU6YH/tDXPRoTujrdqbbX7KSyPdD2XFfO/ghxorS+C/aARZ8 -Chj1jFSnR70SWOjhQDproTThvSw/+Omg0O1eB/vHg6XaONPdLqTrbhc1fL6B6JWOcHjQlxvvoRli -Jk0UxH9spHs87RH5v5spifow+zPsrboT6yktS7RtE/q/2O6jJAJ8takj2d3u5Tk/mquK/7TUkmqz -1JhqtdWB8VhvIQeAefm4UEMLPxjJEq13MaPkpSnm85WpFt3CQKNWmse9jU602+6kiDdeQ4pL8TJ5 -MFOT6nkwykzZ7iT5rbbinFZbME5zwEv3CDyeNtKcH+8Bb96Xl+zcQPJ+slaP81F3pxM3uyWkzW5e -4v4YI0U7SUPsjlNjtkcZ0J1RAbGG5vV0Ki/S7KCfi1P3CQkHA5wUHbj/6SQFutOb4rTRlmR3JuPx -fi1mNeyPURNXWhO+H03mlBxJM7O0w2mkrQ5q4BrAR8Bx3otdZP8SiuuTaQnccq85E7/Txk/c7WbG -6EboCStNMAtVI8JmrYMboz+7sNFPi1mqS7HYaIBbzZXGflpujPpyMIwL0vTSorTjPOx6Nzt6qYkd -qGoWxUmLMd+A7rZeq0XbLJQmfgQ1/0JeAbeTVqBti4jeD+rJIYYrdYK4jTZ+/FRx6pcuYdDjDq7P -Q2lu6PvFcqjNaj3ScbeHEbnQSPKcKEn6sNfPR2y04TxmioOMmqkO97p4vo8r8T/+qsY73FmopIV1 -5eJtCpFet4fSoZbaASbmWEqFHo5Q49TdON+5aqiJoir0jX6sx5Ms+EYXOVDdLURohjN5qmZm6FhG -9It2muedTo7/qy6u95MKrOX1No6LgbQMblFG9XrcyfN7vlKH89tsoQSBWMN0QzzkXj8zebkj0XKj -H+27OyJm7A5ImCutnFhlFcEb+Gj75XKo2WEv3m+3k+CzVIO0WWlAua41E73UXTzYejstYCQ38OlU -MdxirY0WsNZG8dkb4CMOxsTc7QEufKkd56meyCndGS9u2unnIlQ18G+ThdGvRrMjX8yUJH1V99Cj -AE/GDmaFvuoR+Bvs9NBgm+3MaFUtwna6IPzlbEncp6Vmis9yCytqu0tCXm9hRs2WwL+vNOADQZ2F -7fSSgvV7DPNV0C/DWSFvutN8Hq534jx2h3m4zT5moqwa+WNnQERR9wvQa20Eb2Ul9PtybdJXVX2C -+UYv1lszwYRtAJG32ohx0XTiAvd6MV6qugTrAbG/YQvD5W4nG+iD3IjX2kE+TjuWKd4ekDDUfdkc -kKuorU5q4FIl4utkQdznsRKY7VwjyUdRQ/A4nU0Tb3YSQxfKkd9mS1BfVpoJHtv9xJCtXkLIejc+ -YGuMR6zkR1gK46werDUz6drJ4tat0WzJ6gAXttCCdVDUIWx3RkCtTIuE823UcDcTA0g22vuHZiy7 -eLVXSFRWwb8pKuLfL9ZHvZWVh7yaLAr5dCoTZeqmxNkzwB+pB0lhOmlmzt5IOkPTLw== - - - RGp6eMnrzczg5Xq6l7yG4vKTGPh8mIP+vtNQQF2rE8XNlZBsF0pJP1aqKF4bzbSQnQEhcmuUj58B -nhfoU9v9Hh58u50DVXdxYHuDAux2Hzt+u5cSutpMdFlronqttPAifuL9/h6RJH9cLCPZb9bR/Leb -2DHrLYIkZTXDdyIL9n6hkuS91iUhyBtofsPZSW8GMhO/KsoJPup2HuZkNJ271Y7zUlUnWMhLI9/I -K5K/anrF+OU6rMNUXvjLVrrfs252xOtBEdRqtggDPFMWsYWP/Jif6H1vtogUdzGdmaffL9pqTbZY -bkw2X2xCeWx2kkKPxlipB4Pk8Oni8LeLlezg9Z4CoaKWEzIijn8JcPxJHdHrUTvD70k3N+zjTDHC -feIn0UmY5PEoJ8Hl/um4hK/pJQIsT3FYa4PZzFUnfl3tRvuqRxgo9Qgfu9nDS9zo4kP1ebDXJ0AA -LWyjbkm23WxO/D5bFGgozfV5ttNBijgYzOLKq1jeQAPaLtbRI/cGBICv+cj1TrL/ei/Rb72fFLAz -zkaqZ3Ir10YKStb60jCr7fSwhTqUw0ojznunj5msfwfyaivWZakBYauqw3rsD4qYk3mpprK8BGNl -UbLFSi0pRjuSxtoZ5CJnazDeg5nhr9c7mFHaicxM3aQkfaMT77/chLCeKYOaDeWEvJ8ui7bfH2bA -jsHfNrvpcRPF0PeHE1m5y4BT5yowNiPp0S/WauE/NltxkbuDfMreWBptp4+bBOo9Ya+Xk7xck2wx -JPK71831edAt8DWSFoR93u6G++nf8abP+5VWeoS6N5e31QfqtYMZqiyDm7ZTPG8NinwezNfEm6y3 -kn30vfjqTl7KegMzaKWWFQa0uc98I8xpsjTaQloWabbYhfNZaKcmKuqwCbrRjCLtTE7Zhr5GBtM5 -q31M6J6UzzqWi7O0UyKhsoXkK0xxftqWlxixr5D8XAV4slQLsL4N7b/aifRd6yJEb/VSEo5mhPyd -USZSWpHwaaOP4L/WSgrcHchN2+zOZqy0CONkP/E2QCq+7KGjjEb5ZJNRPsW0g4YxqULEP6lIjr/X -joM9VWaxPVarOIGzpWjr+SaMg7wO8X2tkw7mOVu41ZtBVbWJU5T17ABFJcVBXkKzXSjneChLuO5j -mZRv4ljXq3WYqIfjYorZWlVa5FoVL3gqn+7Qx0YbK8QkM01bDmWpTZw6UID9PvWT7KoeyMtfbOJC -V4HeORgQkyYLocYTkuBHqrKEzzutnKi5irSwcQnZbC6faS/P5Tiv/EwL26nPRKyUpcdOpWd4dROo -L8YYBJP1UnH8RqMgfqUBY7fdygjX9IpoO0OlTTsDWVx1Lws6U5xkOiAKfaYsE0XM1xcRlZUZMXNF -LGdVZQZ0rkQUMlfEcVuuEAROg7E209Cv61ApT6dFNM/tpvTUxVqU7UJtssXOEDFyf4zF1M7k1R/M -5NXsjIroE8UJX6d/wiyAXwjaGRAgZCUos9n8hDfLVTCzjXqks7qFFLnXyYFuNoihkzkc+/mS9FBN -cwFN05yFX63mBI1KYl4CPRiqnRYK9mZya1eGxdSFHk6cqocVudHPT90dTiPrhkUUTS8frmokuCyV -p37RtFP8dAMC9HqHMKUEGXqrGh3xYDqT5nHQUpp30J1OVdXCrZUViVYb7XiobiqnXDuVU3IgzUjf -7uOkbPUx4g7GxeLdUR5ZJ+URN7pSXVSNSXbyMqjJfC3MfLGe6JcH8zUoRYQbjYpIX1ZruUkHPbnp -2y0S7EIJ2Xmtiu6925ZNnK/kpYxlJpmsNRJ9N1qJvpp+VuLeMCdltx/p3y9xfdbBc7mvrEb92BvK -zdDXyDIwSLKfGPP5ClrAMtB4y00E18V6ipuynOo5JEj+NMRL/jiVT3abLMJZTP+EfpIWRn6SlcdZ -amXCzJP5gr7TuZyG1U5S1Ewt0mljRCLYnS7u1MqzK7SzHPJiG8pzKD/67WRZzNvNXpzv4UyaWDeT -WbDRLYSr6miBZxMFVSdjhdXHE7nFW11w7+mf3m9nq8M/bAzifLUzXPJ8HcFFUcMP6cumW1fTUx+V -EuP/To8P+ovg7fxHqoPdlfCvFhD7t28grx//Dbl34xrE6O8/IdYvH12hBFjd7OHHGy3XE3zOZAL2 -iVzAXhtkxAxVEL73FFG/decQPnWJ0K+buISX5YTUh5LEyFs4cE+6r+sVgb/PlZzIsD8FoT43GL6O -f1DCHP/w+G4M8TF5d7UIEfWiAB30rD8dZbZUxw5a7+DClFUUD2Ul2UnVIIiYrhQG9khoZtU0zJtS -AvJxdmLyTU5wyDWsu9vVJBurK3wf92uiULcbFG/ba1Hfv11x//Ae4vDGEOLy/jkEav/5Sjkq8vFc -OTdovS0dtdmTzVnqEqMnq6lO46CWp0uzo4ez01xa2PhX1fjEB/WE1CctVOLnejzqVS026WlhcuT9 -ZDebq5+fP4G8fnAP4vbu1VV2iPvtJlbCm5F8jBPgDfreDIuomWRi1voZidJypEV/TtwnVRs9ZW80 -UzTXxIno4MOf9fBQr4fFGNNRMdZmUIA2L071v8sJdb2G83K47mP64SrWze4m1cf+Btnd9s+ZPJzf -7gCLoB7m4Hcm0jhL3WR/VSfOXdWGtge6yXO1g584VUJ3GM1h2HSLmZbtPKRJNSnyZXqcxyOYy/fr -ya4/rtoZG0E+GNyHOL97cZUZ4GpQTgx61yaMcVDWYGJ2h9iInWEBfg/U80obK3y5jeq/M8THHUwI -qdtDjJiZihSzQXHCi/FsvOVYJsk2Iy7oDtTm+xWYvc0Vqo/XdayH7XVygNNNRpDHDTDuay7Gz6+E -WXy5gfV1uZsd63dDVU8LVA+JqNvDEpaqTRA/X4d1mqmA2iy0oD0nSjEWshq620QZwbpbAjf+iY66 -U04imoJcuS+ODb7BDPW95WX24Q/D239BnoLL4M4NiPGje5C4H2Z/touSnI9nxIXn87z0nWFCpLwu -ymK0xN9UJ2MzdiclGWsDAEtaaQGbfST/3RFW8tYAH7Xcxomfb6Qn9uag3CQpga+4YV5/Z8b638Z7 -/7gXZ29+Jz3B27CdHfikVxjxSlmHDz1VCnP/2UxvkHfwocBufChlwB5K0HE3WAkx1xK8PCBu5p8h -7w0fQF7evwf5+OQx5M2TB5BbN/6EvLj7N8TFxBgS62BxpQQRdn9EEv1SO0qPV0+wYJNNBAdpIy+w -r1Tk2ZRBMy3Ax94RJYff4MSEXoN5OV9x/fwG5OpLSLDZZ0isjSXE4f0riInBXYj3l7cQy48vIHdu -XIe4fwS5/OPTlax4r9vSIuy3kXz4+y5+8rPhDNxHWRnPqy+Pb19Op73kJsBuoYNDrkQ7OUGCLa0h -dsbGkDf3/4ZYPX0KcX3zEvLdyADy8M5fkD8gEMiDv66Dcd+BWBoZQsA8/tHJSXw5W06wVjaw/ZWt -WbihMqFfeybTvISAef6TiDUsxCLusSJDrsU72l3xN/8GibT4DomztID4fzGFmD0zhLwF8Xh87x7k -zz/+gLx58Lc+FhBhnPefQ3lo86UerMf6CDZA3pD8TVoEOGCAlbQyICKO13ECW7PInwtwKXdp4QHX -UJ5OV1Au9hCM2w+Ih8kryNfnBpAvhk8gD27cgtz/6xrk7aM7kBfgeVw+GV3PQ7gbjBclfVrtwrrN -t6ZYrnYQvRTlqG+zFUTbdgn6XRUd/igHAb2D8/e7lurmCIm2+Qrx/fIBYmb4CPLh4QOIyaMHkLcP -7kMe3roNuXHt6r8499UIxP3bsz/60+PtDkZEHN2UJEMzJqIdTIiYwH8gN3toYXP1ZPfBAtK3Imzi -Y5y3x58ED++rkRaWELPHjyGfHj2EOLx6BXF//x7E/QHk1b37EJMnTyEGt29Drl39A/IC/F7wNzMI -O9Lr4UgeyXqhKT1xpaM0a3swR7LZJ8bPt3LC+gtQH+v5MKNMVPh9cqg7iInLFc/PJhDTpwYQqxdG -EMc3byDPwf3uXr8OeQV+4/WjJ5A71/+CfDZ4DEF5Ov7ZxkswHs2Ne7tQh/hxIGXhLxaFGVp5epay -kxunaOVHT1ZTXPpyUB9aBMgPDWy0aS4s5gHex/OPgO9fr3wCv/ES5IQzwP+PBg8hN8BcPgT5Hfj1 -MwTu7nKNFOz693QlwnW9B+4x2yVC1GcQ3pUw4Y9EmIRbjPjE64TwuGuJPkF/2Jt+vfLk3gPIIxDb -148eQz48fwXx/GJ7jRQadb8Ai3rTJ6E4zJZjrNRDTOj2iBCnbE+DTbdkpgxU5cY05abZZwP+IEf6 -XcUEeF9B+npfCXe0h3x99RzyDVyunz9BrN+/AfP2F4jJY4jPty9XPM1M/qAGOT8sx4cYtfMTPsnr -6f4TleQfAzmkr0O5LOuhQp5DJRfxspCMeZpNID/GxcXddDQ3gziYmEJs3n2AvHlkADEAz2kCMPPT -EwOI0cOHkL//vAkxunMf8uP1BwjSNeB2ESL240Qe3kVZy/RT1vGCJmvTY9uyWTZVbIxRBjz6ZiYi -6U4mFvk3MTLiurv5V8g7w2cQY5Bn5oaPIT+M30PePzaCPLv3EPISzJeRgSHADkOI51dTCCvK93qv -GP1urY+bsDbAhioacI6y8qQv6730cGWHIH64huvXnMu1yiYQDZMCfP5w+moCsTZ+CfE3+woxff4c -xPgm5O6ff0LeGRhBHv19H/LxqRHE28Lmqo/5t2sZ0IAns2VE980eZuxSC8lzoYHkIisj2E6W0n40 -8PBvqjjEVxJE4j2ou9uVYFtrSICFBcT7qznE1Og55O9r1yHPbt0C8XgK+W5sAnn4912AF/cg7iYf -rkQ5W91r4UebqfvZqfuTIu7ejIi/KxWQ1SNcxGI71b8vD/6uN5/8LRuT8jjR1fla2HcrSJDZF1DL -hpBHoJYf/XUD1OFzEPcnkEe3/4Y8BeP+9Owl5NXjZxATo9eQOGeXP0nB3gbDeVS7uTph+GpHcfrW -QE7WbDXde6qK6T5WSXUqZaQ8Qwe5X3P58g7y5bkhxPK1McQIxPfRzdugLu5D3oFavHfz1r/3/wbm -0OzFW4jJ85eQBDenq9mJgX9Uo/1vLdXjfU7k4uxdKQe/OSZmLPZk0FaGcnPmOtNxzSLcWzEs9gbG -3/sPXzPTKz5fzEFsLCBmL19Bbl//E/L8zt/gd59BPr54DjEGcxn03fYKIyr8fhY64sN0BdJxtDDK -aKyRH9KSQzdrzeJYtuaku1XT+CZlBPrzCir/Qxaa/RoXAr+b7BF7GxcMe8CIRTyo5+b79uTUIKeq -yxlL7YXc5Z4MyjbwfNvjOVnrw7mZc30ZhP56YXB7GcehIZv5tYrHMc9CY4xyUITnhUShCSuWbJTi -m/Ig0Sf2Djk88h4pKOAeOyTEqAKHtRjK44YrGyj+c9Vw86VGovvaYAZnuT+LrWzPocy0FNJHG/JQ -Ekzw/Vx03Iu23Cy/8qxcDwGG/o4SCzdABsTcTHSLvG7z2Qzy4ekDkMtPIS8fPoMEWg== - - - OF6nh0Kfl2JJlqMF6eGySpb3cocgYa1HQljtkuCmG4RQCSbkUVqi360OIcG0I51jVSbgfc6msY2Z -yfgnQY7+16zem0LeAOw0ug/wzdgM4vTV6qq7lcPVMLfQq4mB8TcEiJQ3TQLMV1kZzXl7MIO51iVI -VPcJsAcj6dlaaWauZiwrfXUoRzjSlJvSkF/on04hvUyKjLzlbGn5h9tnC4j7d1fI59efIQ9u34f4 -fHe+jolGGDLhRJNqPse6XcRxlNfmstd7C/KW2oWJ+mutOw213p2GXGiVIKYa84mD5WL/lmyGRT4L -94qYnGoQ5xV0PcTR66qjuR2o8Vcgdx9B7t+8C/n40gwS6uL/Bz4EZlhOT/NTNGVz1/u5yPVeZvTu -hFhwMFvQrpVnle7LMouWBvmYkXqq50At17eKT39bTKa8SUtMNqBFRT/AR0Tcg4eE3ne1sv/L5qMp -xNPSBuJr73Q1wNHzuru13ZXEsLCbbFSKUXc+3UXZkIbe6MzhbPRkUNd6BSlLrdzosRLs18lqlt9c -Vw6ttywtMIcEM8SH+dz0t7O8EeXu8hcmIuBumLvDTfO3ryHf332+Fu0faxDoF3gv0i/gOhOa8kCM -wb2vEpAthwqw1j2iqCeySrijbkaSr50VioE+jN0cElPWRnMy5/uz2T2lHOccKuYxISb6L89vllfc -zcwhsa5ekHivgGvedvbXzd8+gwQ5Wl7FxYbczCYijBuETLfpeglmpScNuzvCx29PCNKXB4qLVUDA -LHbls+ba88iyGrbXWAnZskWM/lhJhRkryn6iFxsqBEvNRYyN7hzWVn8Wb603nbDSKYRtD2cJt6Wl -A1uT2YVrw0Lccq8AvjqYTp7vS0PP9aehZ7uyiTONBejRcp7HeIUwQN5eIZlrqc1UtlamyRoKMYq6 -fISqjuV70CdEH4D6Uo9mcDf72dCNTj5C3ZWfre6tal0bzM9b7E0nqvqzuEs9mRRFNS9QWS2Jma3N -TxmqLkoeaaoT99fU0Nv+H0df2d1WlqXd0z3TXcwQqFRSqQozx47jOI6ZmVG2ZTEzy5KZmWWSxYy2 -LLOYyZRUddWseX/Ie9Uf7hIsWzq6Z+8H7j1n796B3GVub/IEiXSrC1T31RAEclnUwSvaXexH+2T9 -nUFZf29Q3sUOqRjIsJ6Biug41KCqg7Y9Ty40j2Pf7S7Saw9XeWDLPK9ePtZVKJsYqJaODpau9Q5l -iHt60ta5jBfzBOQvisGeEuFAb/40i/Fwhs9LFc31gXalnQSXjAV1SWmNtjVS8fYE+JFrBV38wdK7 -EtYycNYl2NttISpXvUgvnOujvVwc6HgnGB4uXxkZKu/Fwi+O0npfzvLGMiZp7AfKIWqyZa6naWeR -XeWWoAq9alJzwNjB8+m7B7y6vjGPbmAmbOoeOwE8YERHbHSIcAU7a6g0yVDrHckoIWW+n5IBKyv6 -jNrScmGS3589zGK+mO/iJgwzmbf7mfz764O0JOvKEMelmpaHN3pngkZ+T9jSvxLZ6lkIGnm98XsT -Xi0VbJOTqraWcJkagP8kQ8x38gHGG9NcZ8PGymSnbr6rWTmJT9HOUwvWB8mJs4AOnmTDb8omxiDr -Ix1Z6nlWqVXUAQ/oOLTfNzjc381MXlRNgBwsw1J3FtFvD5YYVQ4xHw/MKWFzjVpunES93FvAZeyt -AdzVWXZpHpf6xTIt9zvTDK1MK1gaEk0O1wlHuZnKGX791soAySHt53kUbMz+AiRdwcv89mCx7knM -zGCf7A4ZgwZSm0dOqPJp2Pg9KbNtQ9jRJp3uKF4f4WaKhrpzxcO0N7LZ3lb58jhdszqA3Fgh5m4K -sGnmeXTy5iz0uV/DITrELJhlsv2pfQmS9P6wey2kH5WEDb0TPnVXh0PegXcD2sC2ismS9DQ96m16 -/WVYzIAHVUy8fQ1T4BQi0u2r8HdeGZCrUkJ5UEWDhI38LreC3hpQAHmnGxFGDcNrR4besegGv9uh -pEPtUnzp9iIkcX8Fkb67hiwDtELDiaGDE1J1soPyPiB2qY1RLbYqosM32aWofLec0hRU9Q161rvZ -ARkH45CzYPsiFswh7qQGVDyqdw1X7FrAZhzMot9uz+EzDtcGmQfAsbPcCTlc7UbuL3Ead2eJOV4h -qzWi5FI84ngPsY6eE8Ow+EjfNx1QUqEBNQXkkVLqnEJGk22JURtSdZBDah7dq2AhA+quLpe0h+OR -93DtEnrz7go6bW8FleYQ4Yvsq5hcl5TRYpphFFomeDVe6bQotNU979ORYECslnjl+DqfBJp+uFBz -yy+D5Z1ucvk+FQvtkrHxQUPXsNfUO72r7hvZVw1P7SnGpvZkPdSNBXzapoBTsyPsgtlktLqIkQw/ -MnDoJ0Y27T81Mg8ZHfE6iF4lvtqnoaMCG7xuAPPj9dAx8XpERxp8w4mRDA0oyQ0OIbVG0tX+nNGY -eWOe0161I58QGEUdrRYZsWJTTK7bETPBYX28bnXfYtTMH/CoUTURc8dIzDKij252jbsUpHpAc9Gi -JkB3aYG5VVHb/Co26nCVUGKdanvskVHagrqeke1Z+BvjcM217Xlwkn4ekbYjJUPtSjbZpuZRZ9gl -v20K0BCAk5ajJv5gVAHJCotbkr3CltcHgvZkn5hQHlUyIGE5ve3YzKaH9DSUban52eFc9T3rWOFP -+t6i36SMt+d2JipehnW8HqOARRb2NiXZZRR0dGtQHtPz+EENBbazBEpcY2d/Je3IuOCRgMtOd3lT -XnP3pGigJtEpwbTFa00emTjciJ5FBHCmcW+lLVk/XHFnY7r2nn+DyfBv9czbgHH4dAxM2MRhBfQ0 -aNhAaAiq0KV+KSrPJgA9219oenC2yx2KaAZnA7LxuYB8ZNqvHpwMqijNfgmu0LGCydwYbL7nlqBL -dBNNT7WDzbfsS9gs1zoqK6Ai1AaU2AqfBJkbVpNbQkpCZQyIu5hpWBYzDK7Ec+Bog013qvA1dgk6 -xy5EZbuluAr5YPktETvj/ulG51jE0D8TUPApHiEm17HU9Ni50voivq/dq6C3byyRGgTMqse2RXhp -VN8zFlIPTASU/UNeOQNmGSu7tj9Vd9e20J5gW8OXSLpgWeoeeJlH3EEEcohyZGQR4z2tYjpUhWu1 -IXFjLP18QImqi+q7Bt0qDlE70f7So6BBQ+oOZljd1RNRdlCCcnLzgQCaaRO2pcRMHE5Yy2PHOcYt -oYE8ElK9T0ZuDmmAc6inIb0KDKAHIS+cAlJZRNM/EdIRIYcrLS/2FtoTgXwsONKgawPStqxTIxF+ -usHtAD6jxa/kc443B8Wxrb41l6F7zKvvHfNounrsMmKjS4or9SpoLSEdExMzU+F/HfKm4jVuIzoy -JGpA1Z1uwqtjBmytV4bOD6sJdbENJtUnJ7eG4n3Adjl9f1mZrD8sVFxQgSu3ToKfGgfaHrqF1LaI -vnM8aO4ctSmJtQELpyey07N6tsOf/Pcuk39qobNCBkLr9krV3ZAR3RA18vtjJn5fxNjBP7Z2zQKx -xYgA83mspYADcmzJwWLN3YO5yusRLal9b4lQZ52EJHlWscURPQUesjKZsT3+1JGVN+jSEBvEAwU3 -twTw1tBG9+SBiFjjFYFTT3S45hNjvGYzBRaQQHP2Z8pf2ubrX0U0hCaXmNxgGKi8pOnM/9Y6XvFb -UIko8EmhxccGIjJm7hwxLcKKlznpF10yJORkp3vZJ8GWeKTIvH0hPG9joT3Do8S1xjZZ3cd7PUKH -jt81Rc2/6FiH17/fZLG8UkxxWIGv8MsQ2baVhifmkfyrdmFD6vE2nRUB+M2jpLWGTZ3DIXPvlFvN -QrmkmCLPemuCbx30zL5U/9ApBKf9vs8d8cno7ZYJauXBOLnqSN0zdGJkkuJ9AH1rsGT7HPTF9nTT -XQW39DtjX9NtxzKp0ClApbqFyPSD+dYntvmmx4F1WNopwAPvjfiGP3aY3JMNbldES4WcAXP34YAN -YBW21K/AlgVVxLqDFVjG3mzz2/eb/KGooXvAJ2XD/OuEMvtM66PACiLjRMVE+SQcmGIInTKGKjx3 -OA1OP9NzmCEFA+oR0xqAWK1zCVHlPjmxLahmE23SbjIPXHB+sDXnoUvIorllbLhXgS70yqFpPjks -0ylsTXas1CW4pejiPSGxdGMa9cYlZpNj5t75eJ12t4QO9qzjilwrbYm7U1U37MtV93wqdIl2pOGB -ZRycElX1DMc1YEjJwXpllHqvgljtWIe99cmQefH+tPvAe5K+2ptAbpfEdCz20WZH35mVwTgyomtO -jJj6YwMBtDPVfN8vocJON3rnvUo63LZOb/Bp+ByPks90yekIID77TkwsapxHPTJETrw/Qbxnt1eO -KQpq0OVRDaH5xNA1dKQFxq2E5+/PNzwxDNTfci6jso4NNFS8F8yRHlcb0xGa4vf5nEJsyZGJSXxv -YXMd4rZ0pwxeFNvpVwB6SuxXEVpsqzWPnKLmNxEjtuHIgsccbzO4Dgm5bn8VXxIzdwz4NDQY8Ftw -8XUXR1oWPgJgYFgNL4xq4cVhLaZygZR3TkirvOeLrwsQogtdkvYclwJZ7FYgC7wqZG7UQGiObXT0 -A3E341SwCUENm3RiYhBPTATQkRZZuj1RdGkBe/8jJTft6pGW0BJUsbCHAmyuTxrvdUNERU2wIsda -2+udufZXGzOI5P1VaMrhGvitW4qtipromJAGXx/Sd3QFDQMr0a3Oyeg2t//YCjxucLt9GgbaOodI -Dijw1fGeqPZVdGZMy6GFNRxqWE/HRk28sdOdrtWzPXZvUEtsCqiJTTHLsCFg6pu1yRhgt4xY+8cO -ifDXDgHz1w6Z9L+7nKH/3WX1OqUUcDf87bnp9tRL75XcrjNAP4fWW195Fqqu7w2VXNzsKbuwP9pw -z7GMSJvnlv/GLnv2dXCJWHUs7yCcaZjoEy0KwFNogVfS8NK5VPLb70ZSWxxv/RoS5P02szNsJLW7 -JMg8pwSV61ejCiJqdHlIhqywCeDv7AJOs22GUuFbxueGhIQi7xIy1T6LTPKtAc9XkBmOucb7uxNl -PztX2l75JMSK/TlMZWCN0mRfwxXtLsFTd+fQqZ5VRm1QRG8OKqkQl4RYGc+9Y8PA/Cmga2J6JuAV -ccWOdUzewRoi1SkiArHM40cMLDqgOUg+NZ8X0XV2nWgJjScaeG5E0ZzoFra9sq1AXtuW2hPdUlKd -cQyZ5JVxSWFdV09IQwUHALwOxPt3SZD5m3OwxB7o2/M7s7CaY1PXSMTY2RvQ4qp9CkgOwP9pXkn7 -2wDALSFgnrbXaM1cUMq3cn7925i5by5o6Oz1ANrJF++pIoSkONfbUwNaKuDzCEUHC/Bk1xqx+tjQ -M3ECeL2ols8OKRlwvxhVdDDX9jIgJdc7V7C585jcr/fGW9/+e7t78Q8bXwDoNIQf0OIA15XuzIMT -NyYaHkZMFGRwiz90KKOCHCu4on9v88f+2OGP/bnHHf73Pns4okdU7i21PNmcaX1oWw== - - - xmQeLiNTIio69NTA74yqOOSImgEPKID5E7a/0fUUnV/GpH59MI+tALAGscos+1XBz//Vr8Q1nW4y -6B+2WbwTC5Pu19DhhyJKQ0DXNRzb6Jl2i7CVlrHq37bHan6NyAGfZibC3msJre75ttemrrwfxZSs -b/dmWrKPTUR4QA5OdSy3JQFYmBfQcCh+NZcQNtM5ERMeG+9P8ieAu1Eg/yIGNvvUQoAEDVSUV0UE -cIfSFjbSsadWJuNsk0GJaHDNE9jkH4yT4PIz64DkzBLHblL7gbDuhV/XnhvQQguOTeiG37c7xkI6 -BhnwIbSweUAc0HTygyo6OKymtMY0pGbPUluiR85Ca4danmwNwVLPVHxOVEptCgtxxcEVVPbBWMNN -HxCL/jV88e5c++tRTOoXzLy73/gBvvWKSLWH8+0Ju/O1t6zzNbc2JgEcnq1//KeJw94Xo2vm2NmX -duZBuR92uuaON1hMIG8bA0CO7C40PFmjvvkqvh5IMwh/zaxJuOiahWZ5BbgsS3/zDXN35SVjZ/lP -Bl7xjyZe/jeu+aYn3jV8qXIEnFL99tanM5Ds614huckjZSCDSlp7WEms86yDU7enS28415oTIzoq -zi8jtAPYRQ2qCY1+OTIvrIJmxjSQzKCiLXVvoebZ7lTjs5Ccjglq+6fdCgqgW5B5xypMeUSOb/DL -USUBJabILUZm2JYRKbqBml/2BIhczQgoxzrZ+CIkJ9U6V2Bv7HOgB25A70VFmPxjNbE5piXF9TXj -2MihnQFeIV73xL0OSwd4+LEd8N77ImyhcRiItTUKyikhI2wifI0X0LUxEwMfUBLqPRJ0WUBObPaJ -CGXeNVQOwNeZQSkZFF8TGtHxOBFjz2jEzOt0SbD5TiEmb38a/ExNy/4qtAwvPNV1dIYBTAqoSS1e -CQV0BHiZsIIBj6mpULcEXugQI0o8cmLdsZHX/Ve8Zu4Wb+hsk0mLGgnNQXVbqkvckmBbbnniXGt7 -5VqDJHmFyKyACFfmWUVl+qSEijDw23xyXLVjBZZlm2t7G9Iy8JYVfA2m/PkXlilk2Zm1d+1ogzcY -VJPbvXJkvlOMKwLwqA7Qb4NA/JFsa+i8wxVssX2NWOsAxm4cqHlk7Ky47hgHP98dqr3vXIRkekW4 -iu0Z8EuvDFN7auX0nmzTqBEjui6ghue5ZPWvnJLqFycbqPoP21S8R0moMk82PY33jwiZO7rDgLY/ -sfJHznZ5I1ETDhRUgzP25hrum0arboR0dEZEz+UdmxjkIxOF4NOgwCdWKv3MSkQDPrjBvgR+szXe -eM8hwhZbFrAl+mFGqVcyMhRS9nREtWx8TEGs8StIDe41TJZ/jRSvdQB3zSPe+ZawhTExpX5/tPG2 -Y6bxoXWs5raMm/mtgp3+uamz/P7BMrZIN9zyyDrc9tC+QqhzCGkg9zoDHAXy7YOO32EXosvFnYXX -9qYhBScAH/qBWPXI4rgAaJ5laJqCV3xrY7DxiXqg+S694skPjglkvmMan6FlV19QMYq+VtAKvzHw -ygEOK//Jt4Z451gils4yq26nPDj3d0bB8/NBCRPtlJDaDlbaMx1roFdbU0W/mIazL3rWW5J3FkFv -lPyCX4NSVMMHQPeENdBc33rdM8d86a2d8YzzGv7rL3ZHK2+ExaQGl4jRtjUDS4ivYz7VMJDHag7F -J8FX2JfgybYFaAIQK5kHs6AH4s7KW9iSh58uYFLORQAPfrCIfLc7Vnf7cKLyjlfQ+NA2V3Fnd6bw -1pEW0xpWUqCeNVh2BIh7vxRfZ1+FZEY20E1HViIyCnCXX0OG6sebHu4swLKjBgb6BPAXDgmh0joP -T3avItNdS+2vDmabXym4Bb8Ze8quBcTk6gCgWcL6ju6IicsBYr32YAH2yjpYd3Wzs+D7wGJbinO+ -JdW20PD82MQG/Gxnh19Gbt+ZbHrtXGxN2Z6qvbU5WX3DJ4v3leqaOjHzh2LxulSbHT3HG1RMvP+v -W9Se7BZCU3xi8JuIEpHjA3jULWh56l2GJPrWKTVH/+ldT24NylFFtgVw4u4cLMU8BX01Tiy6d7BE -RoeMPWNeNR25D4zfDXiFoJoKPjbxeo/MPVMHq8is/VVMYUDN4/l13X37QkqNpg+UYO5rfu5dQmfu -TzU+cq+0pQF4krkz1/rMtY4siJlImKgJWRPRwwpD6njNsXiNY0zLeyseGlAhSwD99Vo/WnfbvgYv -8mtpMJ+S2hoxMCkn1o4+jwKRG1DC8jwieI5fjq2MGFnsHQEsNaSmIE+2hjXH253TkQ0KxqOA59nX -EGkHC9C3+3OQFJ+cUGOebHtuHMXnBdTj6wFVb09AyYSF5MTqqJaODCtxpT4xLH1nsuq2hpv1/e5k -8yPrUNMD5zQ40T7Z9sQ2DuTDYM0tx1zTM68cXTTdXXK7vfj2vxbgOVdOTN1jfgUb7ZXR2wIAPx0u -QVL25kDPDxdbnsY0bIZHy6UDGFQa01EQpxYWF/hblGMJl28dab630V91xdxbfcMhoFdtTZAyFIya -C845wOPPoTMcs9CE/cmWe8aBqsuyjuIfVqh5X4yAX/1zZxxb71rho7dmwQnA3N90rIBTAlJsQ0AC -cIaYWLk90fzQ0ltzKyYnIuM9zXbmKq6rOOmfK+jZX1gHKm94V8FZRwDfHysJdfYV+Dv9QN1V2xz0 -lXcFk+tewubYFnFZ+zOwlwdT0GfO+P26EcRzUzfsqZBcfcvU1fTUtsoCS7hVl4T41I+17Iyv/aug -557l5hfupcbEUx0JPscsuInOu/m5mFWZcmJgsTzCxoRjQ/3bqKEhdWMq74ZpOPWidaLyV7cQU3q4 -jMrdmQbGr2FRA9qu4ShwrnYn6m8tk9M/76p/9Hc1N+9nnwhX3QdJuzqGSr0d1jD5+wJsvp5fd0XP -Lv1Ozy74Wkh8/dkc4tY/9d0pl4A4hthWKDUHM+h09yKuxiehIvwiTGFIAs14bySCjw0UeFTHphwb -2IyzDQB/NSRQTI9rONLjm6JKbGkU8FnexeZnO73FF2xjpZdjMniOV8gA7UwjUuyL8FTvOirLtYbM -sS2g3h1MQ17oOsuvW0ebX7ukVHAcz/1aBubIxKJE1LT2Yx2H6lPSIUEVue3YxO0M6fi8QzGrxaPp -7fcqO6geEbkyIMbk707W3d8eq7zlF7anBMXQt/bF2kcafto581De5VMzCX22xR8NqxFlXnHbm4AC -nutYgwCPmPIA4Bu9EnDGgQDyBuCtQqc47qfYzLCOCo/pqFBAJ4ECMkSuSwTJ2J4DPY3oGPSjzRFd -aIPfE7F0DEQ2O0ZCRoBL9RS4cx2WAeiGXLcEmuaWYUoDOg7DC3jjoJ7LiW3w+gMKFsG7js5yLsHe -GHurrsX3uggY2T9ii27+09BXl+YUoHOMXUUXrcPlN+zzzc/F3OwfRJycr0w9ZT+dyCmII1NHj1uM -LXAB/BrnwENhe6p7HZEfz4mzTRbLuoDL0vU2XXev4aqON5jkwxVM5v50+9Pd8aa7mz0Vvx1MNj7Y -WUAkLzBLfyLl3f5HWMKAHy4g3lmGKn/WdZVdMPZWX9XxSy/oO0svbo/W3gb8b8vuAip9axIC5CCH -CWgRtkeErXKutqVYxyuuLsBffyTCv/spJEY3hXRchltIKo/KyaATLRN/CmgWIJdq3UugZ5bBvAsL -2ISPLOMtD7fGWx8bexqveQS02qiir8+7Tq3bHmt/IkDlf0rNf/I3bumTfwpxOeccs5h0ySDy7UB7 -+ufbw6C3fxjYtCDgkU09tXf1XeX3XYvVr8yDFVcFhPLLGyPwgiM9sW1jMO/c7nTpHb8MnGlbaUp0 -CJqTo3JKewTwxIruqutiVvFvUS2T9d7aNXNkoCEP56EJB7OQBMcCPP1UTUWFZBToMiH/koJR8dS/ -zEFYRiAvRMSi71aQ+V9JSBXn1ezSnyz9lXcPJyF5+8vEipIXl/6Oy3t63jZLRMT0vM792bLrRl76 -V+bOnG8dy3UPTzdoxLCOyZimFT4eaH/5/f/auONRPbbZLWh8tNVZ/KOKkPGZnJD66d5A6ZUTGa7S -NAbOqnh5+R/chsRrgF5hh7Rk8N5Uwz0tN+uboaZ7n0gYSeeiOiIsZBwQbAlIFXYhqvTDBq/7zMCm -fzARW33roNee1cb/XCcC9ASQIx1Uu4hW6xISi8MKStPeeNMjPTf/vIqW9dUS7MX/zLc//m8RJeWc -faW54E8be1hAz7hmmah+fWyiYk6AvD4xMVnHRuBz1lveyBkpX2wOl96M6MmQoJaBcknJdQdr2By/ -igqO6um4eM31P8yY2mNAS8RU8KKAFFbm12BBxzud82ELu9etwdcCvrnFDehrpxhRENSiqo43aVif -htbukpHrghpex56ABj3Sc1nxfnhRBQPiXaVWOZcwmdaxxptqbvUV9xKxzrEIT9N15J83d+X/FK+F -IGGlX9gBNIZvrf3tkYHFsEvobbsL+Mz42u+omg47MRHB77eI8PdWEv54A1F9uNzwwLEMTwuraYjt -FUiRcSje55wN8wk5iKiChfQJUTlALvwsImV8LsJmfHy4hitcYpT+KmdXXPcvUes9S5isrcH6G3tj -Dfe8K+BkXU/JZQUn93vraOOjU31Hp3MN+s48XHXdMlH/cHO04eH2UNNTD6C3Yip0uX0NnW0XEEs+ -mLvG/rDwh0NqcrN5tObXrdHyy9ah0p8BvXTTu44vsQkw2fquxquHk6i3ISm12S6AJu1Ntz+Xcup+ -6W1M/YRd8eKTaWjmD845fP4Su+4OtvDRR0p+ddKxitRk7C+8OAB68A9C1s9/W4M/+sQ1W3nfv4ap -OAU8gUMCLdQNFN861jNIpxZuZ0ABaHQ1ofYoXs9Zgik7mGu8H1VT4R+2eINHRgY+qMZVhlQMdESB -rw6KkMWHU6DEnbGau6bu6is749DEJUr1A27Nq/M7k+DXrmVSlWuZAw2sYrIDS4icw0lYnrKj6lZ/ -w4t/yTmVr8MSNisoITWqOGlfG7pLbhxMNyeemQmwIz0D51NQ2+SDtS+X6NnX45rLr8BVe1bg6c55 -WC6gr9Icc4COmWy6a+TV31rF5f7IzL//34vI1Bt/btE6QnJs2cFMwx37QuMz7xq8IKKGFv55SKVH -zYCmWYKlbc/Din/f6ls90lBxzoWqB/vT+T85Fmvu2RZrHxwb6dSAmk10rpFKAzIG2C+h1I+3pX3M -KX72X5Otbz9aw6d+uTtSfu9Yia/7YGHzTi00GqXk17/LuDkvzzbI2JAaWbk31/gkokOWesTgTEN/ -OaBvcc0fAP3klrHxqv7WuztL2LyAuX81uj2k+7DNYIXWWxIPRosu7owUXbQMF/0SULcVhnXYhv1l -0Eu/DtMQ3ekWnO39p15yR7w2eMxIgfnVxPoogFcRDQOxTK785djMYR3rmOhjLQsbENMaXSuIt/bp -muuumeaHMQWlxSlAvrVNwhL8q+i8oASZA2iKh76VxideIaBh5fiqvXVSuW2dUh1UMw== - - - ED4Vpiykh+YFtM3J8SNmaMuKqtsLTkwUFKAXCeK+0ltybm3SkXZYcAxo02MAZ10r4CRdZ/F5JSP3 -Oy2n7rp+GpNJrXv6yTg07ZfgKhNqHqi9vYB69ckKLvFzLT/7eyH13efrxNQvDiebEs+MHO7efNsz -2zIyzy2ltXslLEhYhisLy1rfOldrnhr6Ci7Z5+Gp782dg6cmLtcrBbTYTNsL9woiLyBEF/mEgE6V -IHMdi9DX/6kTJsBkxvcsbE+1PLCvYAt2FomFUnbtRSm1+FsZpfgHJavm1jQq8/slQs6PO9NtyVvj -LS+U3KIfxfTCX5aw+Td2B+penAEa4L2eCovpaEjzbPNzdX/RvfebLM57K7vLBeCKbb7uvm2x8Ylj -CdDh66DEMwuTGdZTEW4JtiSoIoGOjdxOzzr07fZY7XUpNfMzLS/nm42h2pvWWXRaZ0vOedDrm/+0 -TrSkA7GO9UoJ9c7lhkdqfu5PvY2Pv2AV3fofKSkL0H/YipCMhTf0tiTsjjY+CSvILcd6OurPbRbv -vZlOCKlwlX45Kjeswlf7lUycbRmRHZCQmk4ALxmv7eoVgp5tDVVfHW5K+QiT9tt/cQuu/2ODn3/n -dyMZ4VxBZIRk2LKoitRwrGWiQ2p0qV/TXmAXAppL1JJ4bGTQ3m92T4YUpNb96fJbPklL+rGeDAO+ -qw74n1afCF+9PwNO8K4T43tqWpdIpRcBGLtu6Gt4tDdec92/Wv8ysNbyzrMMSt+bqHkqoyd9ERS3 -lsevCx/M1t49mGlLBr4DF+87FNMRQH9Y/9M3p88vJ7Vo+2t+cUupSJ95VBe2DGuiwHkNCNuBeK6+ -6xY0vw7JMDX/ZydR3pvQtSFle87JNqMrttsjPN6koE42AC1qIrcDOq4oqMKWHwHc5Jdga/Sd5Tds -MnyVagj00LmGbzzS8hjOZWT6znDJT/bp8l+d83UPrP3FP7sE8KyQjg7fBzyOTdD6PLAOzwbOU7lf -SWoA3kdEjAzsf65dG8jQEMBxQT0ZGdQD3Aj4w9+tndNAnk8C7+Otc60vIyoi5nSje/LYyOOfAnkT -luMrPCuId7YZaMLuJCrJNIp8KeaWXdmcBL09XMHlrZLzvlhCxff7l/xiHYS9sc0TKz3L+LqwnFAf -7xOzK4Al2QG89OvYZJ+UUONeq7i9NZb+va7n7Vfr1ISPQ1J0aczIAvgdXbw93fb8GODNKIBlESUT -fqRBFbtWGh8czjfe9a5CXjuW0e/WWdUXRdzKXw5WyU2HEjZE09d8Yw6R+slg/ct/9NUn/YOcd/O/ -5Mycn20ARmAbn33Xmn7ny/0pdG5ATG2ISrHF/tWWxM3hwusixpsLAlLSF2FNW/5fex0j8f4VYTmi -4GC68f7hXPOjiApdcWqhU4+2GPS4d/bKkAWAZgGHNVRAb7U93Z9pfbI3A37jWUcV+aTYkoMVdIam -p+H6GiLrS88SODtmILSqB/IvK3vefW0YLrs+g3l3aRr29gLABZmAx8QYJiG50Lc3P9kdq3355x6d -dWRA17mFzUmO1eoHfgmgAXQkcLynuUtCaQAw4aFnHVcZUXMpjlVYqnWi7trmUO3VdUrRDx3lLz8b -bU0655wDpVtnm1/Sal7+YF/DNETU5Pa92abnm2N118yjVVcsE2WXfJLGZ+83WMyInsu0CckVQSWl -7WSD2/P7Nrc3qiU0m/rKf1UxSn7Y6K++6l5DZXsk9CbjCPRJSMkmAXNC3h2rvjVYd/fjSdDjj8S4 -5H+p6dlf+Vfbs/73kDXkULQ382rvfe6YQ5W+N3WPvjfRiWdGZNWJAVLkWK54ZBrKumgezvrh/VbH -QNA8uOpW8LhOIbHy1MwfPdHTCWdGGiqmIjaEJK3vDmdL77pX61992Ob0e7X8HqeYCY+aOjqPLHRi -WImtCADe3LnYljgLT/2BV3zvY4+GQzlYw+X7VcQmv4IS36eTdADEkm266cHhRMXVw9HiX/yrsIL4 -PRz1YP1vB4ukco+EAbWtIjPtq8gM2wos2SGEJHuViJyggQoN6/smo8bBtaipb+5ks3fudJPT8d7C -5gCPnAgwzugGoCVV2FKXgtzgU3fQD5eRcX+SsDkAum3pb7qm5Raf2x6pfeYQQLI2J1ofbAzjXh3O -8Zv3Z3jNB4uMuv0lXPYhoAd359sSrPPVd6N6fJ0f4MD9dXK1R0JtCCl4dL+S3m5fR+f45IhsAA/A -YT2uximDZTrWkIXxXqtBDRMdUDJgITWQ3xoaLN6r68RMaHMKIanm0frfdmZgiQ4RrfVgnQnaGCGl -WvppaeYOxD0ZserHNXz+Nwp++Q1lf9XtcUzmFxJm3VPXMrHcMtb0yNhd+LNrvvHl1kjFbXNfwWXH -QvntYzO0IKJHV+wLYCmHK+isIwOHFjPQ0ScbDPKRmYYPAX7ZJYfnbU5W3fDK2tI9CkKNd43eElWM -Co60oyLgt8B255sf7sxVXDX055ybAT/5Zm8anLQ1j0wbgaV+tTPc8OBIx8RHNEx8UEUFcJAAckkg -+ZbppkeqjorLf2zGe3AyuA4pwK1xfaxnkN+beibPgCMK/I9jBZG+N9v80CuJr/3i4AxDsNcOIb48 -DPjviIraGhXT20JrVJBrAZUj5uZcmMNlXAjI6cjdOWS+lFt03iVC5AJ4CI9tMignVgbtBMC/sL6D -dbhKrPIrOQz3Oq0uqiE2eKXQ7N3phoe2GfCrg5nWx/HaXY7ZtrQ1at7V/Xlowe4CunqFVnpTSi+9 -7JgDv4uI4NlHcnJjWEJp35tryNwaL3psHS38+dhAxsUMbNb+HChxb7b8t/35kusbgyXX7ILGxN+t -mDYgnwYiJjp9jln6eBRbePt0q3fp2NzRHVNTWl2C9gRLb9llNSfz4sFcTcIfu+wB8zQ4RcwDJft1 -PVPHuz1rPimpZncGkgD41Me7c4issJoMCW0wqZF4vXc9sdm+gkx3CFBpzlV84Xa8zlJ/6cWtwaKf -5cyUbzb6iy7vT4IfBYQcyOZke5qUl39+fw6cFJRjq07N2ObTTRwoZqGgIzoOK2rg8mKmDv6Rkd9z -ZulbjvfBO9tkc2JmMsynhecFDJhKlxZXoZ2Fv5nCFVxwC4gV9nl8npRc/EN/zcO/91bc+4cUn/q1 -faL+jmsVX2CYxecM4Ut/mSK8O7e/CEkOyljosJKFDWuxVTEDutotB3zBFDzJLqK3u6RdnI1ZQrZ1 -EZvtEGHLgkogLwzQvA9beNDvFhb7xMTjA2MkRXQ8dszUM3Fk4ndFjXRsQIkqda03JjrXm1K8QkKF -X8xsOVgiFkiYzVemEOW/jrVlnp9oeffZSNvbr/sak75cxGT8YOaX/exfIZWud9Y9HEBkfLs7g6v0 -iTswhwuodPsy6HlABnrlEtbdC+tghSEtEeyUUGBHW10zAQOpNajH1Ya08OKAFlnl01AxHiUZETYy -6TYxKse2GL8/iqk3jcLKvCJmi3c9Ph5kXmAdleechyZtT8ESxbzq3zj1L7/cm4GmHSyi062TrQ9d -a8isvTloyuZk9d29pYYXbjE8C8hHrG6s7Y20t+omwPns9zudMyfxepFaXL0jXltyDZLqWGvPdEnx -NZvT8GQgTn8L65nMmInN8srQxZujZb/KGLnfiikFX422v/jCNFh026cgggT08tujsHffHQPaza+l -QIDxt/1nrZ0eyAsFE3GwSixxSOgtCj7oxu4suiAM8He8hnpUQ4PYFyCJ8bqmKnLa5+OQx18ZRxqe -9iFyLr/+7du/mUarEv+w4mF+aV3y3nTRbW1P6S/M8nv/5JTf/MgxX/38r0NWn0eJq7MJoamAvwPi -lk1/b2Fx/tijUn/fQbXsC4qTdqbLn+/Mt70DxgM/MrOYQR0LH9IxsTEtk3SiYhD/tJCxf+0R4CcW -bPvOLOjFwRw2C8BWWlDbMxTUdrBDel531NDBC6pYBN86tgbQSISwGlXqF0NynILWl84l6CtAZz/Q -d9ddsfTEa83V3dJxCi7vDlXedM60PTmcQqSuc/MvT6Je/mtnsiXp1EjDnG3iW2NGZDmA1dl+BaY8 -BPiMEMAZIQ0DdWbumTwxcZinJjbtKP5dZnxTENB9ThWlST+OebtMrr2+OQJJWmdW3Zlrz/pSRq14 -rmSUPbD0AFpW0PwsKEEVGIFcGsRkfTeDf/m5T4KtPtZ28oIKLt4rja+zbH/tWkflHCzBU91ibPHO -IiZX1Q+6a1sjNYf1vJ6IltAUkINeeyWNSV4ROAcYL+pYz8RH9VxaxMBlhbQM7LGJyz82sbnxvvUR -DaDxl/BFh9OY9INZ1BtxR+21yldX/55967u/zSFyL+9NwXM3+pvubg3V31ynZv8k5RTfWOIU/DSG -z7liGsPkWQDRszsPSzoQgJMPBKCnAUV75tk2Dv7HIav31No5FbPwh/16cvyeMOFki845tfImjiw9 -8xEzvy8E4IpbSagF5vf5KrPg0jQ664cjJY8ajfduV+DKIlJyjX0WnrQxVPmzebD0p92ZllfOdXLD -Mqviiqyz6mZQCWhdDRPnA3y1X40p86uwZW45tkQxAHoi7q5/Et7kTsWs3F6vEl/uFGMLPXJi28kW -gwXwO9qroLXa1zG5W5PghKCOBnhLYoNbiircmWnPMfXXPtuZaEk+WGzNc662ph4KUXlLrPJfZ0m5 -144BPnQriDX2dUK5S0aqD+iZOJeCAbGJyDVuBR2sH25/tS0A5sDYO+0CXnulpCrHEiL1YKrtxe4o -6OnufHuWXcRoEXZB3xEqEs9vT9W/9IgaX5tHM340DGZc3JqtT1ANVCbqBqre+ETQ/N93mR3bq4gc -+WDjXZeYCj3Z7Jk52SSijkxtRV5p2X0B5f6/BNgnnxzM16e8t7I69gToHPM0Os2tZFHONgfFf252 -Tfy1Q8Z9sKLrg2pIxtZE4wPvKqnCL2Q2BeUczPFW38qJtXf52MTrca2gsi399VePjCzAg4ATrENl -V3bHK3+L90AwDTXd3BpEPAvM89v3hhEJGlbpBREt69ww+OkX7IqbH9NLrv9jqOXJR7YFVKFtBZfr -FaPzQ1p8TUBNaDo2cnhHm13TkQ3+UEjHQJ2YmTT3OqYwoqKhAf9BPttkEL0aNu5QzGx2rHJbd8fo -2euMul866958JECWXggsc1rtk9BE62DFFX1P9reWoYpf9uZhiZaJtqf2hbakIw0N6l3F5nuFpPKA -ggbySeEZXjHknXOtJUnRlf2znJf3nX2x4fnZJpnoUhFAHik03SNpfe2XgbNiOizo35vEtn9vENre -x3syG2hwj4RUFdfPARWHFNZ09XhlHKx5BJI4jcz7egSc/q2CU/fbGDzvYk/du+82+5BZB4v40q3R -1oc7E+3Px+GZP6xRcy/5RLgqt4iN2Jik5o5jC76VdTW+8kg5eJ+K0hoz4BqjRlRtSA8H4hKZ59NS -Wnw6GjRi7hyMbXA6jwC9fLTZvxIxdQ9HTJ39h8D8W6ZA900j9beNw00PrNOo0gFo0g== - - - OSEz/1ffMq3SOQ1/peNmfyunp35t7iu5sT3dkjiDy/p2nVN6Lwp4PpcIWbg5Xn97c6r+9mG8v4Wa -1Aj4DHrE0Dl2etAjDZoZRJecDnZLetghzajwdIvbG9CSW4CxgkLAeOM9tiNGOsBr2OII8Dym7R0N -yMnNbjEqd3ehJVHbV3llawaa5JIQG442WV02Kap6cw6WFdBzeFErf8KvYyD9egbKJSfVu4DciZl5 -vQFD14BH08W3SSk1ARWfHdPze0+NHV1+Bb19e5lUsCVglG8vUPJtq7gi02jzC2LxvU+6mxN+DCpw -ML8SUWQXtqVszzY+NQ2V/2IXYYr3hBy4VUBtAvQl4cTc0emRYUo8Mni+Q9ry7nC9Occ6W/3EK0WU -hk0dbMscvcwwhXnjUbOZf+z0iSNqUlwzgSJGKvJok9sbMXT0HOk72BEVExFSsBARQIOGtPzOgIIB -c8tpMI+E0Aicl3bPKiYzsEYo8onwJe4VWJpxoOiyvqviimWU8K4flPHFHCrrazm/7OoKteDneUTW -t2v4nO82+2tuOFYw2Zr+1nuWMWRWQMUlOqXU9rCOSYpt9swGjPxup4JUZwMwfnuuPelwBZkl6yy8 -HBBhG8OG7qH4PhiXEJtn7Km/Otry5p89VU//LmaU/EiseP4xPvfOR+be2iS/GF3okyCyfRJknmO5 -JXlrvPS+hv/6eynp5Wc7QzX3D5ZxBbLO4p90/LIr22Ogl4DPjdc1L//Dims9MaKqD9dq7vsViNIP -AE5/sHbP/9vC5oZFoNf+5dqHYSk4PaanIqIAZjpE8FzjQM2vdgGp2rnOQGj6Wp/xGt99X/Pq+me8 -qjdfmjsbfjkYa77tWIKmjcNffz4JSfl2ZxSd7l5mte5MNT9eoxdckHdWX7dMQ18qetufbkwTKzyq -Lp5Lga92i5AFfgUNGdMzKacbbO6RGYcJa1GQgBrT6FOiS/0qUtvRVs9ieIPX59dzqDuLkKy9xbqn -fmnrm4ACkacbgb4bhOZeUXWDk23zjCrLQNsDASL1m5Gml98IsW8vallp5+yzjc+jWhJCOlz5nFnx -5EvnPA0UVXd3BTQMXAzg+aAKVx3UoauPdqgknwnfZBUiMifJBb/0t7++eLrdvRDdHBBFgViO9/Pe -m6p74FgCJ/lkmGJAG8HFnTX3xxDvvt2abE4CtE2DB+AatxBX6gAOp4LabJlBJh8KsJUhIO63VghN -23PwooC6gxHUcuhBPQ0Z3uB2+XUAt6kZMI+KAfFph5cO11iEPQGh3K9hkW0Scq28s+X+BDT/3Awi -8yfrUM2vUk7+r7qB6uT9RVjJNPLtD04RuDhmJCNiBsB3b1Ap0U0SKaRGNjiX4jyKLYiZ+YNhA3/c -ISGj4vcxvRo63CEjVttkVJAb0BwhE78b4O/BfSG5dm+JUBHdHJKHzKPaiGVY+5/aECZ+T1BLa7cC -fnFXRK0RdTbe1A4Bn63idOsnIZVBGR3qWsakO+Ygz/cmG25uD1VdVrDSv5ZxSi6NM+t/en3zu7/x -al795FxGZBwsQF6Z+hqvW0ebbu5P19+1LVTf8q1isgF/AN9exdaM4lLO+SWYRr92ZNmpGFtwynu7 -glou89jM644YOQzLHDJtew4P8Dey2CvBVTtX4e92RsBPxLSqayvE0svAubqBKk7+HJ/74gtDV3OG -ZxmRtTVW+rN1qvyKqivrxxn4488Wsa9+FBBSL21PNCToJ1uedLemfW3pp5b6BD24kAxfHdNC84Oq -9oxDQcNj52r984gK23ysp2O9UmxZTEWo/9NMgv0bOP6ysvnvTRzWkZYEtk6W3dydqry7t4zM5oHf -/LBILr22N4lN3R5pfWjqLb2k4qZ/v4RP/Kq3+eGX3KIbf5fTCi8JmZU3mBWvfrQOVz/YGG5K3Z4G -PLEQleMWkWpcQniBSwzOPVhtfAb4W3hIyesKyimIkApXbxNWJOwJSp7b15pfBzSAbrTQ8AEDodUh -hWYCHqDjvYU/embBNseMkEK/DJIRAfA9KCdWO5ZR6duTsOe2WWIekMulTuB1VIktO5xrSZxGp/w4 -T8r5RQTE8yKl6o1tjlq3M0Mp2pyFJ0SNgCY34WFHRgzoeJMIiwKf7VChK4TdZXcW6Nm3T7c7p10y -NsEpYkH8MhbZt46o8QjAqc65lhzvOqJcQC++PIHNurUz316yt4Quskygk6xT8Nd7i4h0u5BQvDsN -j9djy3dKsZXrPU2PltkVz7zKzu6Ajt8dX9sI4GStW0Gq9gP5FrZweH49j6ebQL5TDcES3KoO5vYq -pXqFXPNzb33qVwP1CZ/uj1f/FhC1poeVsIpRdOaPKbfO/WOlqzwttsEkR40cml2ELLIBOOdYr33p -WKlPCampsKiBw96cgeQJqQXfmcYgCV4Njxex8IbDVnanL66TVAAOqmjt5kVC9sEKrdGrwkEO1sHF -0Q1W79HmsObDDn883rvKrSWBQhYK0hevEybHlejHQC+QeY8+CSp5FPcapTJev90+A3mxO9R8Y6O3 -5mddb+uNCUr1j40p1/97Hpd/174ET5N1FF6QMvK+sY42XN+fqb/jEza/OlLT2oNqLl49A8lsy770 -L2t/U0FQM2P0acYlUXPf7LGF3REzM0hx3bG3Ri6Z7mh6yKx6/d3GQFt+WEaq9Syi0uyz+AzLMPyp -oaf9tpjccEFBb7rumCeUmftBD/VdJRdsgtaE7emGh9sTNY8dAngWoJGTbMvtKVvzTQ+kHdW/bfRT -S5QcxFvbbOurIz22JSAjgTyrxOZTHRlxaqDjPRJYlmMN9DyixFQEJcii340U9F/bvMFTA4DvSlzV -/kzjC+dye+7+Ciq3F55yQUApu7YzgU62Djfd0nQU/CgiZ3wLhMVXvNoXX85DM37e6G16MIUtuFz6 -8OLfdkYaksKSuIeBvrMvQVK2xkAPDhdq7rjWqx/ZV+oe+cTk2q3ptjwxgI2Hi9B3R0Y8/NiMhR6Z -8aBTC7H9xEKA+JTQbLe4LeXMzGRFtR0dx6au0Xi+RLRkSESFqXAtt7zaHC6/JmNlndudhryxzKJL -Zij51xVdpXfsK4jCBWLhnQV80VXAP2WEZQwI4PHLt2fgSfsryNTjTSr+2EzEHJvx7TETtiFsxjX5 -zFS0K74ufINKPdth8K1zkNfWGUxWUNHB+7BJp9vmGl+ICG9/0HUUXN2bankSluIrwkpivZhbfdU0 -hErwikhVXjGy0DLR8Mg4UPvrzmzDHft6a6JLRqj1KCgYv5ZD218j1nnVbLpfx6G7ZUCOqKngmJUO -vKZA7CJiWbzuEeBfGnYEQO7P4NI3htqfClAZX462Jnzb1/zkAq/uwaV+UPLn/cjS15sCDMynJoDs -6+gyl5wG9qoZqLCe0OyN1+OV4Wq8Mlzp5gzohaa/5jfjJOytR8fh2VVYlF2FafKZWAyHitxiV1Ca -HRouIwT4PpesLW97ofyWX0mAWWZwiPdbrM4/DjlDITMZdbxFRPiV0IIDwAsfLLVnKAbqc5zrcV9A -LXOtMeoOF3AZm/0tN1fwBV+NtKZ9PNqW/M8VeNo3HgG5bncek7dGzvnCMdOeHBCis/0iZGYgvm9w -HZp9uILJN0xgU2bx5dfcixR8xDKk8JvZrBDA67ENMiykZxF9Kg7RIeXjBXxkck991vmdAXRDVExp -2h6q+3V/AvJkc6DlppJS9s0mt/ycaw7+dmcBl8NofPNNf2vqxYCC2hqvK+GVQt9Zp6pvL1KyfpjG -Z3y9OV53yyaAJs+w6l+XJF7/bJWYduOP/Z71iJbPCwH4HVWjqzYnGx4quvN/2J+rfRBUUtuGYSlf -6bqqsj6YOydOAc8eU+GrwgpMsV+EyrfNQ15tDLfckXWDbgwiCs/PYwq+9y0z2vYngPMyCHtiGUEm -7o3j0uWcul97GpM+45c//Lt7AZah6666pe8s/dkvhKYH5bj6oBRTdKTGV8f73wHje6sfrLqh7a26 -5VuPX8PoHHGKUIXW+cZHofj1LgOy+MiMbvhrj0KJ99f2S5nwmHJoJiDtpHsk5Jr4ug/rYNkVfWfB -RS0v/1JQhqmRDta+ak6//j+8qmefR7Q0hHUMnmTpb72zM9RyF4jpR3F+9sspzX4FE7YtaElf56T9 -5BS2ZL7fAnLQSEMFjXR82Egn/r7bMRLQwEt2F0GPZqjF1yDZd350xtezGTCgvemmJPtsc+KRElpo -W6hPMPQUXp2BJvxraxTyYgSVcwNXeP8LIaPoclSPh8SMuOaYHlMFPK/3AzjklmGLnGJsqUvJxh6I -KHUBJQsT0bDwpxs07O/bTO6ZkQI9AnJ/f7bqjrqn8JJ2sO3lLLHktynwu0/6qhL+p7fy5UcDdUlf -bw01JEZkFPD+ArxE3lF2XcIo/sGxRqoAeCzduw4v8kgQZR4pvgbAAcLRFoUY3SRjghsMil1FgcpH -au5aFtreHu/2SaNb/BGvhol1a7k0v5ke73naerpBQNiF7flD4OTvIho88v/c/NV4z2mfFJbhWG5+ -sjdbfzeiQVb9ZedOBBVcnFfEbvWsclodS9TS/XF0soZVfmEZmfaRgprxhXu27vHhBPjdZn/DXV1H -5TmfGFe6NVP/YnO04vrWSM2NzZHSqweTbU/9K9Tq94DHO9ui0kNmKsZnoCEiZjbzgxWIxc3uqaie -1+GT0puCYlp9TMZsj0m52N1xdMpOP+a1c4ZVaepuubuCzvhCzSn+VcUr/03GKjmn5FX9tDWOyfDJ -uRivitpiW0e8s6/B0zzAGNzrhPgakqKdWUy+gFV7i1iW8K2+rybnyNK75JIQqndmwAmHAkhqWImv -immxNVE1stwjxFUYBprvHc4gy470PWNALrGPdaSWoBxfebCAeAPgw63tSVyKuAfxZABW+f0KqfHn -+HpmfVfVlUXU649G2p7+9ygk6eMlXOF3gBX6aaOv+al6tC2p4vmV/0a+ufpRVIoC9AqmWskr+HEe -//IT/dC7HwzDmd/tztQ9Ccup4Iiuq0c1AEnenUfmngHx8v/sNM7/2WnsP/fw0LMNZGVIAU03DTfc -JRUnfIHLe/LR4TIBfKJj4I5k1JbQOqbscKY1dZ1ReEvCzQA8WPo3wVVItmud2Gjsarjunkdk+IXE -Mp8IleuXoIr8EkJ7UEZolrKyvtmfak450bIogJdo9IuhOV4luiygJra83+SPhNU0SNTAIBysUEBy -fvOLoILUENWTYYdz0DdaXvnPUnbOtyPgN99NI9/9tD/b+hrwWsWosldfv71x/p+z+LJnZ0BceqTg -FLcEnOIStb4OKjHAuaWAAe+AOFhFZTnFxIqYtpMfUjCwh4vtaUE5tsa9DEnWduRdnAY/+1zdXX2r -G5F3teDFbx+PwXPPz8OzPp0GJf2PgpD2qYIMeGFIwieDLcnf9TS9Pi9nl94UcaseJF/79m/NKdc/ -PRTiIdtL8JSDFVBiSI9vtUlQxZb51ufWlbbXISBv/9fO7N2bh6X5JHT00Ub3ZNTSsw== - - - cLLfKzk74I6fbhGRxwBGORabHtgE4FfqvupbOzOwVNcSMs02DXppn2lKPpyqTdgbq3wcVjIR+zNY -AAub7q9Ri67uTSCB8VddERNyv1yEvftUAHvzsRD95hNTR/5521TzfeNk/X1u64uPBtpef+ZcQGa7 -V9tTNbzCq4augutuQeFdv7T8fsyIrD7eYLFOLPH9hnTckZ5Ni99Xj2o5pIiS3BgUEUq9a+RyY2/z -TWNn210Ro/HeSEvaZ0NNb7/sqHj16TQ082sNp/SKZ7E9yS/ClNuWIHmHK9Asj4wG8qs6yBEtodEl -bH0t78j7YZ2R/vXGcPU19xIiI6JmYL2APvEpaK0RdQc9rGFh/euITO964zOboOja5higR+Ygyada -Ji6qZhEcq8TKsIpFDKt4NPsyqXAP8Ny63oZ7cl7DTUMf6NbOFPzlwRKtSsWv+0XMKL64Rim6uTFc -dwvgoeuqjop7W2OtaZpRaFJHY+Z3A82519yrpNbN0YbbGl7tNWMP6MneJOilZwX86khLhUTjewYU -DEhnW8anYl7VkxMzFXW2RUYemxElxyZIzpEBmgvoxBp1X+MDUlnCp5Po/HthA6vPJUTl7o/WX9/q -q/xZTM38il5y5yN0+uW/L8CffRqQQHMXuNUP6dWvL1jG4bUeCalOP1jyi4j28msB7v432q6E77cn -6p56xSSYS06F4Kuenl9jZj7+9w6bH++XfapnksNKTIlT0Jpk6im9rWRmXPIDvn2OVvJ4ElNwyy8j -QdwidIlLAE2xzbakKjrLHgmw6T8oOQXndP31L30SKkrEq473GcgFNBrjww6763STQfVLIBm2xcan -ewsN9+J7T6LA/O/OQoE4Kb1wuAB/51rH5juX0UW2GUy+Z50B2ppBpii6Gq9vz2CzVgh5P/ZWP/un -nF5wUddZe2d/Bp4B/K5amxBfZhprS+bXvfoMlHz176OwN1e8EljRvqDmoWO9NTuoISPsMhbTb+L2 -H++ye+N7YP84JNO2Z+oA/cDgnlkHlSfWjuHYFpMd2aJgoyZMjU/c9iYoR1X4FVjQxgwo3SXCNnoB -LFIxis6PNz7/Z1/Vvf8SYt9+7RLiyhS8ikuT8JSP2JWP/r5AKvqeWvL0o1lI9o8GTsttISbvKzUl -56vtHsA7j1XfGcO8/opd++gfi9is7w/n2l/tTtXfVXKLf9V0lvx/jt7zLc3sa/82mclkSqZnJslk -0ns1iYlJjCb23nvBiiJI772DgggqKr33jgqCDcXea0ybb7nv3/H8Iw/e7zzw8uJy773W+pyw97nu -Lcsr4w/ckNIPYSb345RQG4uRwXU3vmbdQQbsuFnofT+HuGnDV63pEBkrGkTqTIyvwqKO+6KOrB8Z -5a++DnI6nvvorbcdxLKzPmbJpWB3yS0XM+WSiZj4+3hPyfUdK6Vl3UxpX9aA3x77Y0Zlra8WZLWP -1rW1DxeGSx9t6BqTdn2w/H0vqfW9j03csGDKdszQ7I9eVMOhC1Sw7QSXbVrhBR/HiB1bDnT5bEzT -xlizc8vNpy3rCWXTA22PnIy8X0z43DMxdvpr0wxJjTFmnplSc2G0u+Pxqo5aM9nbeEcDT/uZWxv/ -jaT5xZkpQeONSD/8zZKS2TarJNfJMflnp/qx+WtaVsuqCpa2ZYKmb9jQFUuxNbHixFU5Y1omOAhK -2fGRgAdBEuR9CA+Oaer29+Po+sNxDCA82PLYw2+4taCFl32e4yk2HNiqRVVnclQGTYuMwDNdzPo7 -yq7sswFu1d1tO66uG1X8d0vGozPuHlDFqpVQ5+Jk/2anvb3kZGfET0uLXh6N0lBH41zOqpsARFYn -/Kki5j3/1yyD9T4Qq5+u433uLU+mJFWXvcycs15m3rVFM7YSWvbqd0Rh8tUdL0uw78e2BXtKr+mR -yT8zK+59Jay5f3JWVHr90IcBrNgorcWJN08zmlLuH/lxqH/PMwUfQzjwsrbu/pys/MqWsyPt8xRH -uOEiwwzU0ps+TtnNz2HG8d5h4K4XV7eqQ+StaCDvIkOAO3MjTQ+jOmw+ruzlD9DcB6fHJQ3vdmL5 -dEEDzJgaqH3h76m6NdSV/SOt7MlXJmL6uXVTa8amA5q7bGp9ue+jxvSWQPZpps8VGzPlhykKKVYn -Y3zenvVpEtH8zzxfs2LHEdx95clHMyTshwiz+9MMGXc4hqz4MomHfAwjQSsOcOGai9C8ZMCUREc6 -X3tYJdddjJy/t83Ad7NKZLqTVf67nVzymwFT9hsPmPUtLCv+KxO26vZsX0c8r/7ZaULBta+GgE9O -a7BvvuvKuRSngr/5Oapoe+Xpr78rAr36Yby7+d0HHwN7NIpvWzJB0iJ6fNWqk4naCzCIax5au28E -nKKjV1yZ1yBLdzws7LaN0rKkgqVO8GsujtIr/tChcn4wIot+nRHD30jBRX9YMMV/BlnVV0OcqssR -cXX84lBLxrqqK2dF2vUqwKu5FhG1xh8YqIAdHbbgw3GfbGVj/Iyg8OIHc2vavyeQ1YeOrpx1ZUfS -rARwe9sYm4dhSOaGApi0Z+t4t27qTN6ydqVvWhG5+x5K5/4oDbpswZWvGsjVK2pmY0BYc00DSzqt -hiR9Z8al/eFllp6bENRdieWzdwEx5PVga+aZye6WZ8HuhmdqcNKZAKPg2sJAc2JsXN+5+G13B+CF -55b1NMi+l00MiipvRRVNz1YtsJyICvRy149p2A/QkMtmQs20HJK4ZoZk/neJI/9njiXc91PBi1pc -/qig8sp8TH8ejGHbDsMUXFgGTlyz0ds3HL2cdXsPycEE3MSXPPsOVRT/8xA448K4uPleeBCUs2Zn -kZbsTFBUDy84HKdzPk6y+QcBJnHFiK5wcavvugX1d4MDrU93vXTW55kexdEEg7jjJTSuW4mAFRMR -sKjDFKwaSTULFlqTmduW4BMgqvZHe4cjanCyFp7741DLu1N6VMEf4d7ae7sOUGYsnhvm9aSy1rQX -34nAWY8/+HHwL9NU0oYDmn3gRwA+TuDhR0EydMtDg6/YSE02DuDB5DAo+7/L3aYPk4SuLS88f1EH -ermiBT5f1bQ9jeWj9IlhxCtoQdI38MInP88ogTWbTliZmZpyxkXP/CMgqLsRlLQkTEkBCXs+WNVR -iE7edLHRdm7xhRULov7TNFuw5YPXrNvaUtbssNxVB656x4dp+tcCd2RjjMWUkaseVyb9/dXBFEv4 -aZ4n/zBFPe75XbWka302o6i9ExxpTZjW05s0hKaLEQU2/8BHaNlztCRtaRvi5/VsiJfXfMVNr/rd -Qa3+zcWoPz/R2353VgZ/7eI2XB5pz/5hsLXovBFbe31C2HxzStJ6b0UJfLFhgheGR7pe68hlV2Zl -nRlbdlzZqhmRvWRGFi1YyHVrThbyYILD3vAwoFFLTHsaMKW7fi5ze5RLWzMTK2ekHQlaVObP3dUP -Tw2D3n5nIVT+PkxoOpt490JcV/aTPyLitqSYnn84xi44FxKW3h7jFV9Swd9+y66KP63oSvvdTq++ -BM9+cDra3/DqowcDmO2ru+9nFFz0s9J+kbbd/2qw6cnXJkTGD2ZW2dWcR7/HVSdc+HrXAgEenzX6 -V4gA+TxKAO9bIOXLirpn09Kaq05+w1VU2dtf+1tzfrHjiv8wwPN+t2FKz4W4bTfM2PLfYuXkd159 -0nfE/Genxvh196z08rvk0kenoOm3vxPUv/zJSsj5faa/5e6qHpKxamjKXdHVvfkwigMejrJJex5c -XSzv1ux6oUWrpo43c3JQ4vrxmT19jMPG4S0rps60mO4Bb1n6+DsuTN2ypjV5QdGctGToTN52o8t3 -3TTI9Ag8X4Mr+isyjHjr7YYm66nNT8cEDXejsur4DWNDjEeAeesueOGxj9PnaRb/MEBFRw3Esi03 -uWPLhag8DBLhXyJ03lGIit9wI4u3/biGrdi1y2ZM9bIJU7VixJVFlcjUqBqUuOfCt3wY5XJ2XAzU -qpnauGwQERbV/M7ZEWLO5CDkuYFQdFGFzPwtIoMkrxqotTt2cvNWbE1u++mInTEed9NLwq470c0r -FnjRnAyYsO3BNe6O0ZDvYxrsfRAPOQxRUPtBFnnTS0ccuIitHmbVNTUi/xc7pfzsrLTxzo4VXngU -oGGnNLDMiZH2xE0nrmbJhMze9iJLNzzg3Iim4/WKFVW676NDNqyYyuM9EkeTdOpOEA/6Z4nV/3mJ -q/wUqx1HU1T6sgPfseSgti0a8MWrFnzVp4Vu43aATjoIsVhfpgW6L1P8gS8hJvXDBB2/G2TTojpC -4cpxv0MT+dgn/faUuPpaWMlo8AtB972c5msOWvUf47yKc5HhtkfzWnTmxDAscby74/bsIKdqRipq -mhkkpi+o0Blhce3VCUH5hYXhzueHfmrXrh/XGDWAkuc1kMyPk5zu92EOZ2+cTdkZpcHWndiK3XE6 -Zj/AZe8HBYO742zymo1Uu2Ym1UblyMxJUeMDD7fqogZXclaKrP+NXJn1nRRSctVKqbwiaX11SglN -OiVoSjg5AEr9zsmqvx3qh2eEhyAvj7/node9+3Va3PJqUgK4H+Ojn4Yh6T9bCbm/+1g190IC4KtI -PyrVJQS9QJUmfkcqfn1m24xomZc33F1WNT+e7q+6OQh8cmqo7dkpf0/9dTmt7nLqw0sn0dmvfp7p -Bz8d5TVet2Kq/tbByy+QCl98UxV/MS7/1tm4+ieXT7Kb335T8PL6SVDa/ZPTvbFxFDXcXRhpuBMU -Fl/SYZPP8OpunVJ0Pf52w9CRPqeHF2pweVeDgtqXhz4c+MBLhG2Y8JV7dnTp0kjtHSsp+ddJcV38 -molQI0NVP5tWdJTOyppTJoWNiQtSyKvd2EMsqlpT7Yy8C6Lm519HZcSCsV5kYUAEzFpTg1Js1MyL -FkLSr3NDRbePxttzdl2gnIi0MsaggORdLwMZlKIq1m3IhhgDtR+F0M2fJ/HgjxOY5i+TVNyqGVoY -Y5jLCxpI3p6TBNrQQ/N0mJTfrPj8a1Fpe+KyEpS4KEdlrBn4sCUVo27NwOpYs/CxCxpaU1SFL17S -IDNiWjZzbgT+ZlmLzt5xs3HzclRRf3vGeROl4vWHELN7SQNK3fLEuG6CQdgdJ7QumzuSN32EzoMg -mzWngL6NxUhzjKEhq1pU8eJI06Ox7qwrK9qWV2sWRG7EhCuNMUnZmhVXMaeGvjmcIMG+RGLr3oyq -mJGBkleNoPQNS4wRLIj8/VF86z8LbMn7MBkTW3O1W2484DCA71pzotsPJxj0j2Em/ShIQx8Eychl -O7b6IEinvw8xmV+m2Px/TdJIH8dxzbsuXOWaAZ27Houn6UFYop/beGXPja5ySrBpfiEkYV5BKA73 -dz2fl7U+XFQ3P4rIW58E+xtvT/S13Y3IWTUhKadqeoCQvqKn1Mwf79seAtxeVnQ8WzdDi9YckKwp -dePDoLTlycEEi74Vi4k1FxW45aFDdv103GGoZ+jDpFB1/NnC5iimednSlbnhIgIWNA== - - - mMJVHTLTzqq62A/J+FbUlvWNi9pybW6IUjreC3unQhb8McrvSLAxO176e0AJyzpM3qqFWDuvBb+J -MUDS5FBnYkx3l4/2tN5zMQHXYzk2e10Pzd6yEGs2Yuw0M4TLnBhCv/V0tz8O9oKT9pw0+NjxPjRJ -68OZwZZnKnTOJQOp8ranH5csZ8HvdRWnfTvcWXcjLMVkaAjV51gV704S896cQGU+O4FMf3Yanf7q -B05Fxm/DMMBFWFH6GVZt8hkVPu8vWuWjHw2olJ+M2JTTMljK90pU1gUvu/LOqgFb7Zd2voVm3fl6 -EJh6658ws+djkMlYNRz3D+h4MS0q/NNJyfwzqoRXTKnxZc0Zj8+MiptLj8YJbYex3DktAjzys4qv -DHe+OCNpfvS1CZnyw5waW0RqSPur4e2tn/XYgnvbJkTRirI9cc8MerttbHhnICZdEQLunnaSsv/e -iHEUpiLpJxUmP/HDKAH3zyyV8s8krvPQCy/bsrbn2JhplzSo9L9mFB3vhnH5D+WwtLMmUvY1G7H0 -weJwV8aeA1W1ooGmz8USlItcdntppLNw08rEBSTQwgUVrio2f3lLGnLDpoXSumFCF09LgG+1iPS/ -cBnXTihh6fenRoBFM0Mtz7c9x/v3GOT9IAUR02Cw3TEGZd1JgjjYFdeXdLCckBRa7+lufLukan3l -YaSfXxypu79jj72/H1OzqAG9i/FQ6qKu+cX7IA64ZoFXTQ6AXkyI2h4vacDpWzZ07b6HhvkUZnL+ -s8geXLdBs7ac6KqjCSrhU4jK+GeKxv1XhMn7MsNkf5xkUD7M0Omf59j9/46yB7Y9mLp/ppmc/86y -eo48OMD8MPB5pL/53txAe3xU1vl8UdXx8uMEri2oIBUtakj1e24edc3AaFrWYHKmBgA3w32Vf02J -Ky8uyWEpESUxb7QP9WJ2EPlmy8GGT48An49yi84Ge0rO+biF51aNXVk7HlLHro9F2w1y+BNqeFpA -Bk/Z8nFi49I7chASyI7CLO5RgIzY8HTlbcaYY8kBLbKxq6+u6cmVcypsweRA1ys/s/5ydKDz2aIM -nRUZ6nzl55acX1CRqtftQkaMz6o3rZ3J4f6KK5Pi0osLyqb4bReudsNNBc6OgF+sxqD5S5BFi3F8 -/YoFXRCRdb2a7G9/vKCGvz0+W7XvZ6APAjzOoplYs+5g4XY8XMq6hdy8aKG1jKlZFY4h4ltXHyxh -RkkuC8hI+WYO+I4O23HNgO165OGCX0yLkekzQvjLIL/9roPWcVMDrzs7ym28piRWX6UVP/9W05X9 -6/G8TSmQGVETqWbZyobMWYVExyAqRQTO/dVBq40/9lyLaFqehuWA2zOKY09j4OstG75h3thP90gF -LTxg1flVC7pxy9aWPC+ruTHaXfKHHJxyeqDt7bcqaOZPk+Lm+JCaVNlRnPzTs4u/xgkA785v6iGZ -oe6Sa0FW5p8W2NNvyUU3TvQB352xM9pujUuoGc1pT0/SqxNu7joR2H/NUqnLyrqHk4KSc0561s/d -DXdP+vnV8d4BYEp73sMz5KL4U18CJMSnUQLoyEtoXjF0vBuBJf3ELL33Da/43olpYdVDPb3yaeub -q6eNxMIX+6MU8I6d2RWVg9M8nNzzQ8DXX1OK757QY1P+iAzXPcVXPPrNxix+9a9Z7uDnOW7/p2ky -fs8PrVizQ3LGxPW3tNjcMxEdIh9R+eZc/qOLX8/KgZW7lrY3y/KaWyvKuvsLIxW3+lsfnOaWXz/t -Yqbe2B7DNCBL4n+AZz/+xd/d9PZzgEX/EuLwPgVZjP1RImTbC6vYtLck/u8iifJplsLG1r980F7w -+Oa6HYf9NN1n/zgrcvzPGt/6vyuMgY9BSN2CuvzWpgfV1t+Vc0+NLXmwqAFnLyhBSSt6aNaOC1Vx -6IMX/SuIaVi1IfPWHfSOZSutOTyMebdhZ3VuOWIa0YyL6Xvg05Cw6rqFUvqXvCv7h5m+lqcrFmq7 -T9R0f3qgOf7QRWo+GiW1fwySYZ/CVNLeKBU1byZXT2oIRQt2LmnR1dczqeMDl519vF0vj7ZjxZbt -WhCF7/3Yhm0XNH/XgSzedbGRMzEOnhAB77pJZWcHW958p+pM+8GBS/9lqrfo1r6XRVq2M5GzSvjb -XQ+haduLqf4cJsM/T5Exu0Fi57IFmjfeW3dnRQcq2fFi6oJDwCcbdiZ4y8GEHXpxrcd952N807rn -o4A2Yhp11gjL3AkyaWtuKnI8xkgRFSR5Vg/LXrSjy3fGieBlN6VlfAT2ckzSFR9VMRvWbZKe474Z -S1p8wewgOjWGSX8OdGT/JIfnnZ+Udr6OXfc8lteexeKtLqIhVM4ocTlRC6Fi2UUDzpoZTVELtX5v -nEn4GOJ074/h21ed8PyYZuhYtjFaNzzk1v0AFT5rxBbO20g1S3ZK3X7g2O8HVbwUY41VG7kppgca -lnTkiiUjsTyiRGf5hxCvDJzW61YW4M6aDlkQENbfNuJzzjupZTfGhZAXM8P4gmkFrWRsiF3kG2IX -TqsI+Yd+MurTFJ22aEEVzOlg2UtGTPmqldKy5mQiV70cTOz9y0IDbc9W1W0vP03gQNODDbcm++qv -RuQdz3X4oguKrtxfvYy6K8tmEsAkhL/mA3P/sHOr36y7kZWhgZbbIXHbw5mhzpdzMkz2pBSdteYg -Nm77SW3zGlj2mgVZ/2mGwTk+c77rgRbOqRruz8TiP6prf71gwpcFlMwyExf8VI2vubNuRdbNCmv+ -nhVVXvbTc37xMvL/GO2uiw+LAE+XDKjKWQsf1gcr/lvYlno5VqOq3sfW3by6PWHDjipbtaMrIvqu -7L0Yx+yGOaxRJTgfVPTkh9rkuxe2nTj0/ywyRf+ZxaH/MwGrjdXc1LCo9OqEqPru6DCquOzFvW8a -3z44tzWG7/6yyB4+ChMwq+aW1HBv7gU7MvmHgwAFsTHOocwYKLVjA4jEFTu1+Tg3r5oJ5bG5TzjW -UyZS5WUHs+7uih5XNaElVQ9hKy/Y2IBH+14K5NjrbskATlkzI/MXjbjyRTsfv+rp7VnxSaTT1gGO -Xy5pD2tVwohxkLWgJ5SOc0pjtRTwYEXb9GTD1JUxZ6DVj1DqbvR2Zv0y0Qt8Gh2BvZvub7k/K624 -s+9uL9j20ZBzFnrLlJZYtu5jkzfHmZh1D75uzYuuWHLA82aUbQlrFkjGvg9eueZBlM6a4OkzJlSu -jlv7WIHJPXfgJDdvWsiATRsJsDNKBse4mLQxxqVO6ikAZ3dL4uEEnfhhls3/MMvifTjuvechNq3a -cWVLRlzxoo5cuWSlAycGYS8icmLhioEPmYz97OPVXJ7qr747r2x66uQWnw0NAJ5susgtelbdHRsH -8Gh3jArfH6cht1yU9gM/ovJfs+Cao1BL9rKtLen4f1h0SkSjMlJ5WAlLeR+mUXbGiLD3YSL00xQe -dBhEN266EMX747imGD9j5xSQVyt6eOamA14wK299FpaDXy5b8VV7MX2866XDjj241449V31c+qyR -1bZoYQCXrLTWqIkMWHWQ2/dHSaBPk0zGboBNiVpZwI1xQe92gMM83j+57ueQ5+yk+hUbunjF0JW+ -7USWbnvZeH9P++NxPihh3cZBLJqodREZLmtBRyie0WJzxmWEzEk1pXLNx6dN64jlXhH8RdTUS4qa -JfRlCzPGQuSGWRUqY16Pzjsek4MAk7QX09/rjpgu9eM7js/6bLjwgP0gg7TiZcKDWmZNxEyp2fBS -2je9VLCXUXtxLlaXVsyoqjULqnTLg29YsWMroyZMcViJz4na6cA1H4+7G+4ZOfbVW7YTWj4ee/vO -cQfWx7u7J7R96KCO1+qTI5Ldkua7syoE+MvxHrgInXUYBFfs2Dqztqzw8nUbtimi7mkPycRQLa3r -jUsALvtnhjWwFatxc4qGhw56/m96ZOoZPTLr3HZsPmO5E7hgpTYumDmIeQsPthKrJas2FmjRQGuY -V+PzwoOIxLAU+nLBQKiYUFFLxofJZRE9FbgzHvvbmCaP6rElaxZqc6zGtG6NdfOiDlbXvJOPn7L0 -EX1ycVtALaMElaL2OT2rOdDTlbwkRxVs2QhNG05a57iKVCREVZ1nNWX/FOzHliwb8aVhKeCOuzvr -z5nhittrdkLdgoOHXfL0MNfH+Ow1Px224qABV90M+KqH0bVsJzesO5CFK0Zg0rIdmrc6Su4Y02IL -aF15F1AFCae2zLTWbQcHuW6jtW75yZ1rXiJwwUltjdoZwA0vj7szweveCtLRsdpCOvbx3PWS2vb9 -FMjBGB2146NBFi3YoskhWOKCltqwYGK1+wTAW/5uwN2QuOFRjLUfRZRNCcsmSO6ml9QSGO5MDwy2 -p+2PU1EbTjwgPNT8JCQtuPl+vOHVUag1ey+Ih28GhIPzDolgVEYHTKlJ1R9meo0fZ7sV78NUwrYP -Urjt7cjY8cLLDwK4ph0fvmFS2v5w2YjIfx/Et+/7UVXbHmzNwf+diUHVrVkxlVPDkMQNF7ljd4o/ -sORlU5edLOROgC98H+JL/onl720n6tirpGjZSWpcsHA6N0aFA+OKzgLPQEPSqpvQvuojQzd8+PYV -O6Z+3UUCrjq5OBe/8+moEJa+5enhRU20hoiGXLxgpNREjMSaOTMDPGcXMOZdffwZI6vFISC+nTIr -hsKmEcGCjdkem6+aZTOuesNJBu0FWNT3k92D+2E2f/v4jFNEoNub4gjX/eT27SCDsDZORcy6qO2L -fhpiM8ggr3rpUBO19uKEHF6y6uUSlqz4ys0YN6w68IAlK652yUpp3woKhjYmROr1AF+w4KK27QQF -0v1Jbt92EAde9eKbAiO4d0E5Ln36uOeqH9P8T6RH8zkisn+a7VEeTfNkB0GOYP+4F8gYjxNWsGun -1Oy6qJEH2fIKxZ+mhbplMzxvXg1OCQ+BUiYknQlzKujb3VEua93Fo+6N9/TvjEk9Ebu4e9nCAa3b -ucgZHbPB1t31wN8HfTYlR6ctW+kdS9ZexppjQLI9yiZujYJz113E+uN+aS5Je5KDUnHtc4DH2/L3 -Dq35JKoVb78ybBJhA7oe0NgQPXdaw23y91KzIlJKxbaLi53Rkyv0/M47jj7Yi0kVqWbBykP6B5CJ -oRFMWkQTGx8boeVDiM3d9LMI6z4makaPKZzWotKXYyJ+w9fDWfP2MFbcfPKamwHd8lDR+5M0xtoo -vm1Mgck0dYPiLSxQ4rSOBwoMUXMXjdTa/QAFuulnEpbczK71URr0nyhPcTjNEWyO0iA7Yz2inbF+ -06fj88RjiJo1a3v6gq41MaJqezIT01ZLNg56VE4qUxNrzs7JYzwR44TZkc7ERR0kOTQMfOLtBdyK -aYxnOx5iy04sP0cN5PpZNbFh2YxsPz57/mmaBH8/yeIueVjIqI0bi3MhY9XbL1twSQZmbTzEgpOH -X3GyiIdBKjEWB3Vz2s53CyZkzrqDDNz20uBrdkx5VNuRGNN+aVvOljfz6pLrC/q2Vw== - - - W44YR8a01lYsX6+N8hgb42LVqodNWovVsJguK5mS47Lm9YTK3QC3+zAkMqyMdosH8JU3ee0Zv0VN -eODmWDd/bZxLWx5noKdMxLIlFxO6FGOwdR+XuRMSjizaYrrKQKtdjb2+Mcqhzjs4qElLDzJs7IFE -TDxwWCXjTVnU6nG9jBM2CiArsXUeNaAKl0yokh0/FbYV4DI3/Czs5hibfBDpc23PsLibE9zurZke -5facwLg7x1fuTTE5a34ydN5OrA1r8cVhLbfDIiRksYH5Z2Parm4nxOFsTtBxURupaXOUglwdZaCi -blLjyii1azPA7Z9QdCRNqlrj1/0x9rYTGzd9dPT+FKf382KP9dgvYN1HBq+46LCdkMQ1a6R1zmhx -NbHnoW2McVh7IXb3wWTPyPZEj3TBS+uas2NLl7zElrVxJm7BgStftna8fn98/jwksR+F+z2HoT59 -1MrsCCtIedNaXqtrmFvGA1afGRUhC/ZHufQdHx21ZqW0Hu/ZX4/xzaYdUbbhE/V6FPQaKijrXH3C -hVO7FhLqcFIa3g1KTMseLnHKQKkIyulFfgkjO6DiNbCA5b/0NOfeXNJRKXsB4cDOGJu4G6v7x58J -L5gZzdMqPiAo767zDBCzfL3ND6ImaO6SlVC7ZKa1rDo52CkVt2nSMEAM6nrBYR2paMnajY6YJcw5 -Ry8jYmF1jEmhqbNqSuucUcIOGfVy57AM6entLlhU96E3TRLaimGIF7X20WYM8MJFa8OrgwkccH+U -Cj+M5fft4KB73UPvjGoJxQs6cvWWm9K25ye2bHvxzcsOKjCsJRXPWRjtSzYBeUqOzwkKmq5t2cgt -624GYsPHRG94aeBlJ7VtSosvnIix+baHzz/2xz8MMSk7QRJ0yY2pWvXSYBteQU/U1I1ziJhZ5n5B -waimF7TgFAvXPULhqo0JDkshSb7uhjurVnT1tp+Bj+pxdQ5O47XQYMfTw3C3dGeye2AzwCKtuNmI -ZTutZdmGK583daWtHXsOBbnd7kFIilMCSZqz9rHG1SOUCT23OXK81mP3nrLwuiKWft68Zbjf1sPI -p9dX/zml52I3p4SqzVjO34v0WvciPeqNIJMSW7PV00Zq/eY4l7I/RYTuhDCAeZeQOWkbEkfdw7pV -36Bh2jwktkj7G5Q9/dlKniTNPdhXb2djH00O0ao2vJKRnWCfejckGN6d4vYtj1IgmyEaemdKqNmd -lvj2on3e7SkqOWrpyps3I8qWR5n4SSujxTtMyfIMkdLCKkzORiyGV0YZiEUPHTJt4iC2J/iS/Rmx -c3u617waEMiWR7nciBVbueCiwVYCvf3bsbje/j82YODXfJja7TFE5V6IjNqbFGq2whLrtB5bNG8m -tu2EejU7YV7fbohBjlrJgAktOmvOQ2jZmSHj3y/QRWsBKm59jMvYnemW7U3wenYncR17YQp61ScS -BpSDUO+wDm3rt8CU3bI8FZH9OCQZhsypZJQxKSvX1k1+4uvjZsyMSFpn1Fq+X6PlOwe7y01c1AsP -ryvr/YTIsBsSylb9HEJARylxKVhFTqUMYRzUgGQ8Saq4C3XNTiOVruj7une9wp4tHxM6b+Y0h+Wi -BrtwqNDIGczRcYYK+EjqLVRV+VdqUtvTLU+/bNMzqFrzDBkmdEKISzYMMfcP1ztHpG1BvarbKBlp -1fZIix2DZsSYxqvxq20jFqmNrmDr6mUMRR6uDX8TXwO901dLfapBDWda+JoGb98AIKrhQj+HmYx/ -z7D4x71CdsICmV/e2+AUyWvdfYomX39PyZyFVjdjQGYuWvF1G14uczUW10GdsMvaQ31tpeHuBwep -5RYeKGNaSW6fN3Uj56wc5LKbxzgICxRfIr2WWIzBN92wivfT7L7jOVryiXrGlLQqIx/5UIZDX/FI -xc2ztj7Ghl/Qu+Kgtwdk1GK/BJc9p6RULcdY18GHPAxJ8bnhYWRhRI2r2PLzmMtuLm7exgbNGARd -Yyp+04yR3rDo4sAWHZSWmNYviJio1X5Nb5tFoUGqBLIy+0BftVc20G4bHGy2yXQ066CRbuq30frw -Q++EXewH/uH+rnmbiLzsZSMX/FziQoxhFz2U1o0AFb4R0xIrflrXoi/Gah4uetxgHHZr7bJRg2nY -IRtqGRTI0nkcRRKVIL2P7pCcQ7fzLjVk1/+KqYe/UAl7mmYNPNCyi4taGqXDI25i4+40V3zsfXUw -LTRshem01TEWbjEo6gt7hCSvsR9llonrbSMDAKesv2XK2k+btEkFHtkg2DusQLmkKq5LJkYHdFxE -2IyvDaqR2atuHmFrfMCwGRoe35vts+9MCuT7UzzxhzlO//sohfGfNab038tc5cc53sjeNJO5EWJR -5319vVPWwW57LzV7ytyDD1t7yKMaSvmsm8/YnaIzF92omhkjtnLFLRRtBwdsG+M9whkPBz7pFjN9 -ZrPcJB1nyYUTUDHLVyIgG14JkdL7IzhVuopqKhmg6t9iYZLr7bXEK6Qm9jMxQZUvpgwU2kSCwvER -blnU2ANfDwz75r3D6gn7EN+slnYq5CaITD7JkognQByy5qmMrEuz8q0tdoGmxSPsr/BKtWBdj6lm -mObIYeJtr2vLUBfrc6EXwLXs37tqGD8qyL1Z694h9fZ430jEKiD75MxSh2ywXTto7JJJPcjhQT+S -zzBlsfG6Z91UZ46YP9nBZzjyiRj104YywjlAGeHPdxmw0/ful52Iv5RxsuB5449k4FCiiuVpcIuV -4BUrtnxvHF61HUDXh8w0gLZ3qHCQZkgVk9SJ/fThlzqprknX11/ol4vBEYtcMmHWiC3Dw60KVu9r -OU7wkN8Jv9OekfK9Ag5Jm5WpWSt2Sc/meJ/8cFoQ0xhk0oKu+eW6rat4f6JHFvHpp9xqLUMvEZcp -ebwUFXugwKewCidMct60dYgfUPW1jLC7k8nNzb/IcPhnXpG4RAQm/m2k8wtmNf2UZbOYPq2gl0W1 -5MoJKSR5Rslp92q0XLdWCnNrhmDGwZ48Qx8rySQdKh/pM1WJxcEWKkp+DwOk3ebgJVlCnrEEh5G9 -bCjDXi3Lg13Nzeg8W1kAP99YArrHQ3JfmvoGCv1mOWfa2cdZinHbogffOGtA5odMfIjXKCMZR8xo -Eddeyybri7hkbTGXaElCY1z3gF36izX1gjPFBbSvC4spX9+4mRJ36+qbb6rKML+QOqk3B6jctw65 -GDhplVDmnALKqptNjZqxdTNWcp3fIufp9UbK0JCqWtKrKpD0Wer4TH0qHSt7zcCIMjEg0pumss67 -ndXEB3VF6LsluaCLNYXV5zHtDX+P8OiJSk5PrVYwgvdq1f3rIbFqLcYle5Oc7o/zvJGDGSZ7d1Zs -2Zrqt68G+pWzPjE/4FKK9Qo1Wi6WVw8yRW+0A8oW7YgOJeOLs1R8QZp1pDvfOkzLnbR0E3fCEsfB -pFC+4O3hOQzGPrnSx+iTzTO4wgUAkuB/2tqhOA8FyS+AWwd/K8lFnU5/C/q+OJ91pqRa/t3tF5C4 -v64VnXzxHPBtZT78ByaCdUMv6s0P6cTIKZtC4TY5DCrtmEQoG4NShdFSMv+gjMDazIJjA3cRnYbL -WLDhOq7LeBXZMXK+pUl6uaZK9Gdt5eAvJZWSb2/F18ZdvVYUl55G/BoEtl8SCyZaQmajbNUrlkwZ -uR0T+m6IzyDnKDVuDm1gth7OmEuEEmcfNXbazheW93xfXjX4c02d6sfS8sFv4l9ATvx9vSgu/hXy -xOPX+LhL9wBx3595GPc8oeXb6krOb2jQ0BV9ryR71sFFzXvZWJuiu1Yu0lSJuJ5iBs2ZhCO6H1G5 -S/lUxkIWjztZwiQZX9Owmld0gikBCZFfKi+hfHf9UuLJx5eT4nITa36sykdexzaT4i0iM2LaaFEv -unq5KzY6ctsv1qz4VSG7xaoblAZQYmmwS9Qf6hAPrOIl/YvYHq4zl0c1JXGI9kQs3hPfUEk7XVeE -/L6hFH0uL6Pr2we3U38qSim/PkCUFQziqDcU2NoLCnjK99PD0Gy7wTosH3FiB4f8UI4kVIOijD4B -tI5cagKqrsNJkwmNrdqz8U8AJx8+rPqmpIr/Y1HN4Lf3HgHi/ryQFXf+UkHci1TSiQt3muOevkSd -QiLsD4eGx/B+i7p/frRvYMbJgvoMUrZa5e8RDc1hybzZPCDccSU5jXD64aPGb1LfIr+rqFH8kFsq -/frVO9KJm/cb454nY08kZjBOXLjZFHc9Hh1XWmv7HthhvkjGKB4ohPIKvUiQM66kFgaUxByXUgqT -DAThzN65agIvlNaJtl8vrxOca2jXXmhut/6Rlor96v69ihPnzyXF3b5ZGPc4ARz366WquG++uR53 -/Xr2CUCr6vy7bNoPN+81/JiTi/lb1jvcsDwuFB1MdQ9tjLLIkwZem1dv7LfoHVKtZmxgSBZmiGXr -bAp3Og+GMd+EI7S3sATvExja9QAA6P8r6UXDD3l5uJ+zMlp+z0svuS7vZtQt2/noeQ8datLJ8aIh -ayNVOFOMZs8lt+JDtwqbFD+m5hNOpucRv3r+tjPu8qOKuO9+fxZ3+1ZJ3MtUUtytZ6C489cL47Iz -Yd9QcYqHCpG21qfu6/AMswvtKiVWrnDguP2Bejx/JbeLtvy0gxi6VQ/z/pFR2vPV8zfguLcZ+JM5 -BdyvXqWT4i7HN8b9GrvXuRvlcQ+eQePuJqBP3H0O+7qugXd2sNdc5pLLIHNWMXPeLhUHrQMck6q3 -dlA2UkkQB/Nq0ZMXK0CjP5e0On5MLZWcup9MjPvtSm3ctTuNcUlp1BMPXuHj/r7fEXctvisuMYt7 -IiGDf/LeK8o3z1PpZyCxWJXyJDmzrr6eiJNL81kG6FxK72MqVfecwvK9AWPGb+ZXj3ybkEo9lVoo -+j67qPfU7fv1cQ+fAk++y6J+nVLAO/Hzpfy47358Hvf3jeq424mIuN8v1Zx4/hr9MxJleGcYHuuL -WPWuOZukd8IqoOjUI2Am35NDlawASNLdlg7aUnwzYuxSG2z8cmOb9beScsk3b9KZ32QViE4lvEac -+OOvzLh78YC4mw8b4v64mHPi+UvQSTJq+LqUSLzt6oYmrDqoIP0Av6hfrC1n9wZLkbylt7F7Psmq -lf9xLwlz+t4rxInUXN7JjDzeV8+S4F/9eb30xOOXsBPvYq8lpBDj/rpVG3c/BXMis8H2TUGz56cu -cvhlv9ha49YMdC2NS1RrM/2jVodB2Ts8iyf1rpZ3MWcSwFj/jeZ249nSmr4zj1+0n/rrRs2JKw9a -4m7Et8bdeNQS9+gN5tSjNNqpl4XSUwVN1rNgwsRDtiBcNtzvAzk0OtaEltswZ6UC/HJsmpxHecSh -KJ4wuoP5ROFCIZi6/Li4TvXT22zGN7GYO5mUyjzxJBEbd/Nea9z1u42xXIeKi8/kxV1NwJz881b7 -VzefoU6mlSi+y2vx/V3RIr8t4SlK5l0syoIFnh01kyq8it7GAZ4yp0cwXsMSTlcgyA== - - - 4/FtyKlrAFjoYnW785fsQtFXd55A4h4mYk4+eYM/8cufmXE//fbmRGo++/SbNMSZmhLkVb9hEDXn -4GO1ssEmqcwE6R0JwVh9U9UE/lxWF3Uivh6iPZ9WxP4+KRv/TUIG5uuzt4pPfPvzk7hrj5pj641y -srCS/RMG3P9aJjIBPToZbt7O6wqpiXnjKkK+R00v1iiVHb1DQRC1x5uJomjugBH6v+rBzssv8zix -WgQ8efNhYVxhGfd0fo3s++RC4TePkrHfJmdSf2tqll/DoaX3Vb3MFxNKSlbEgMtddpABURsHNmVm -tZlljCyZtDevT+Zop/dNlKPItqdIov0RGOe+U9SkOvs0jfD9/RdtX7/JwJ5KK2Ceyi5n/FrWKrlY -2aX4qx1pvkYmel/3sdzFRokevOzik6L2ztyAujPFoxdABnultX0SM1Ao9bTS+J70Vqj60rvinh+f -pdNPP3iJOnE/ARRbD40nLt4ui3uajDrxNJ0Rd+FBa9yfsRr1KJ0Xl1rtOV0JtN4k0F1FZpWze8HR -1zOhgad65aAno3pGlUplRPAGR+vowzONiMHNyhZy5GF9h/1sbZvx59wKwbd/XC2Pu3CtKu72Y1Dc -pVsNcX/+XRiX8Ap6IqeQf6qsQvgDG69+4R4SVc0ZqXWLDlKjsRf13CIfAsmGLO00pu45rTdSjhOt -lYIZkeQ6mPFeeZPkr8aO4fNAhP5KVl3/+duJ4G8TUiAnMko436RV9p7Nbui52YHXPqXynJnDIx7E -mLEPNO+it25OsKg7093DY1YRTq118UTKMIkuCdSQGIaXBKLsPpGufNyFld+qah25lV/Xcy2nkna9 -oIp+FUK1v2ynOd5AaZZENl+VrNdIG1z6QfCoXtI17+plzhiIJXNmbElYh8kd01LLFb28LGm/vLJ/ -2FTP4KsTMTTFXQjV+rSoaehSUp7g95svid/9dbfpxJO3qG9SK0S/ptYM/VaBHL1cQxy/UwZX3+mk -WUsH1OMUn01FnNbjCmbUzS9W7Kj6jTEuO2wVkfV6k0Cs8pO40rEmAn/8LYQ2/7IJNX61Dur8s7Be -9u2NR20nfvgtK+7vm4BYbm45mZgN+rsdKUwQdkvf+eSCxm0XHhK1daM9Bp3YojcJVWo9akhqbOgV -u6o4QkcelWNNQuG0dyFI9b0msPxKZjnzpzcZqD/ySjlXGtsHHzCpulyHxEkM6szyRY90OKa/EeND -Hc8cgprrARkwYczArjfqFEiJeLiAhKVdw4Bp5xj8qdJOojehpk1yOSev7UwXuOcCHKO8BoYpLiMx -uiQOS10iFxuarCMDtVE7qXZ/FNd8MIau23QiihYM6JxFIybPJ0Ul2mXcCqNBTdVoVbARqbxC2q+r -EvdZK5ksfSKKMHQXghDehCEH7qCw0udcniRV2C95IxoYzlBKtI0ehR4XtQwRt7x8/GGQil5xw0rm -7BRwyD7U7zXrhm1mDU+rH+nq6+tJYdL7HyII1vvNCMedrIq+s2+y6Keyynq+f54K/yYxE/l1ainn -5LuK7tNpNT0/F7YpfmvHeuMHBoJot9HWM67itG/5yOBlJ6pm2YEFbAcZxEl3L045xMsRi8XZPYpJ -NE0crUHR/YldZM9DIM5192U+7Zc/rxacuHitNO5ZUteJ15nwHypqOX9DwLJbbKL+lU0yXDulJuRP -KUAvlq346qiB2rDg4CMCBm69UkJ+PjyibxYPugB9Elu5eMTaJJTqaruF8jSeWJtDFvkK2rHKF20Q -znUEUfqIIbHXDijV5RrNUJ3DOAgK20XI/RAd83meQvnXEkPwcY7Jm9CTShyGYZLRrO82mjVk7chA -pUrclyPv780aGhzIlY4YG6UKQ/vgiBYgkRgrBpQe3JDJStDoBwE6EfzZtJFSMe/gwhacXOSSg9Xl -7YM8W7IRm9dHOdTVcR5zxi2geA09bbpBQtogq/lvCQ9xWzSsLiX3GNM6sfKbbRRraXVXbzoIO5iC -7banYrutb+l9xndssSZFJNfV2DxOy3ywf2BzjNix6gRlbnhRbfuT3Yr9GbFnabxf47bK+tTaEfiw -XNnYO6AvEwwHQYxefyGe78sAxfJqSb3wr7Qyyq2iRtYTCImT1KeWIlw2MTagQueEeisSrMTX15Zs -mIqAElcR1nHAE0YRfEzb3eRRiOq9anGbS9HXoOrhv5IL5PkjQmPloMBYp+o3tFsGNK2+ocHaaaW4 -fUUrAO+6hdyDQLdw20tpj6iwBQtqfMO+l8nY8tGg0yZKlU/FrrSIyVnGXnyq3WAQKJSa9iHJQK5a -xEt3KHmVHl0f2KuVQGbsQ5wlXw9x2cPHrfu4+P0gh3kUZrP2vPCKKWnVzbC49saKCVs4o8ZlzxqY -jWFLD2JUQymdtvMxk7Zekl/PrtEIO64reB2XtULobdtId4lTO9AxbqCWBrWY9Kill7nlltn2fRzK -ez+8dMfZlrRs6nwzq+96G7FQmxf9Q+YF75B+0syHjmnp5R4VtcQu665S9Q+VS7uV2Xy6+jkGo7hF -pFgTMHjlXSxecI3CkLxh96jyhX1DmSNSSeGkVdGz5Zfb1l085pIJX3c01t3zKdSrOe4JsOUE5Qek -Nfdc4robjoGuBLtiBKGQOmCi2FoVDHk7eobHIATmUEJrM+Ln5lrQzzgE8TK/m/NUOSwD2BVqfEg/ -RFrQUSt2PNj6HTcO8GGMBp8bbnztZmVc9Amzz/nljQ8CRmaDANf4mNCYdTZgohEWJkQDkzY20Ksh -5VqkuBSjGPfSJqOmj5p5LdEwl7IWJoH2ZtnCD1Gu9NMcjXoURNZ8DKNbj8LYzh0/ui5iwBTP+EW9 -Y3Ypb8bRx9id4Au2Rnv46z4eacPPhK/7ya2LTnz1goNQFbHzobNuqTTi7SavBRjYNR8VP28hlK+6 -iY0rTkT5og6YNKdofXwwSoB9mROat4+/a/cRmubt5IawGvouampNXnLhGyYdAlSspgOVveSXHpei -36GjF7sVmDcePbti3NWLnXEzQXMORttWmMf/MMdXbvsx9etuZOHhNI36caFv/P2c2L83xemLumhg -l5xZ5ZJTSidi9XDcMkh1GkQgo6oPoDPqWSNaK0WpMGH1agXUrufVjNpw+WtTHP5+iMmJqptfBvgF -FwLiqrdz6qYnVmr534EeRPqilodYNpDq5pSQ1+O9lddDfQ23l/T0uqiJDxlTUqqUJOCjbatEeBTo -HfkUpOI2jK1JiwrA/UU14NGaGZK6aUPlz+kRBVpCyY3IQGvuvwN40KEHkrvrRBbtOJElh2M44LoP -3zjvoDWv+gTHfR91+2EaNhb7lSvWzrebTmj2/ii2bt+HbzgYI7ZGTej8NQet/dMEFfklRIJ+miB3 -bTlRlbNKaMrUMPTltAqVOjYIfxXR48rnDaiieT0iY8uFqz/2kF4zQd4t6jpT52NjH5F3PpuVQV/N -qEklc0p4zr4LUX54fIbGS2h6P4Zt3HEhj/uaVh+MUmBrTmrbop5aO61A503JUZVzGljqhLTt6YQU -8iqswKRNmgXQgLq3Y1zOKp7REgvWnYOyFYeQv+HGARcNDa8XRoqu71q7Sg5H2ZSPk92Dn8MC+cdj -nykfKG9R0/Rq10VDHIyxmQcBBmvdCQcsODDVMw4hPmyX0LxaLsDeC3s+b6S3bNgYnetWDGDJ2lm8 -60HW7vtQNQc+Cih2P9nHMCsW66SmBR0sdVxUcnvV0JL9KYRo2B8jQbacxPap4ZanoYGGZ++nyKz9 -EBm+Yo7VGw0se14OTNn3IGqP+3ccjGIbV22gNysWyLujEAnxJUIibrtB2WO9RVfnjz0MdK2v91yw -sv/MEpC70xTcpJlQFlKTyj7NcUfWzeD0uYGGu1OC2hteVtnVyEDjg30HsuxojNK1aMYC7Jzyv+cN -4PJNN7F5TtXyaHq46laov/RqRFp+43/CmPb/N0vj/GeaLjgcRwOPpqjkz/Miz4dJdu+yrun1dG/R -lVBv6dWosj7+aBID+rTAGdmZIEM/zBCR/7vGUX6ZYQg2rZ1VC6rKxIi88GpUXfvkUxAN+GcS1/Hv -WSpzJ0BnRC2E6jUPqeNgSqA5iIicB7O84e0JBnXVhW+a1sPSJvXY8tXx3pFFv0g072ZCFp309mUb -teVgjAT/OEFAfRjDdb13I2o+jqHqPi8LnAvDdTe39ajcWO4vEUIzrhiwxbd3jfjSDS08c8eMKlxU -ItMXVF3JM3Lgcyu5+K99MxOyY6fBVvWogllxx8tdE6LoyIOsfO+Fl6xqGl+4ebkX+HWPT7kppU/+ -O8GgfQkgata1FXcWRwoubBrqHu7Yu7L2POTWAx8Ts2bBNy4bwP+3T2jPjak58MIK1wx1zxYU1Q9X -Y3O0oIW8WdQjsj6ME9rf+7CNey5C/aYVlLWgaH02PdB2f0kFfr1tR5dPDbc+H++tvbKoh2XOyIBZ -G0ZYxroamDAtLP5zrq/8r0h/3a252DWLWmS2g57z45KmJW3HSQbNDSNzNvTw7IWRtmcbus7kQzs0 -a98GzYzKWh85WUW/y2EZZ7bNmIovEyz6+1ESeMMCzjz0YWp37cjCHTMsY9+NqwvI2rMNtMKbxz4i -c0PNmZva5uT3LmD6vgPwbt1UnPh5Ag448KErD33EtvdeFnnXzaZvumiQqA6asWaofr7jbsnam6Cg -tsfpqKgB8nZFC8rcd6MbVrRtr8PCqusTgpLru5aWN3s24Ov3bmRZ7HetawZo9qYNmb/jI7YsGqH5 -h6PY1k9hPGjbjizbNELSDhydGf8No4H/naPQY2NcvuVkYw8CfP6ujwLecyFr18ztKRtWSMaapTNj -1w0r2LJDstbMoLcL6pYnn0JE+OEosvbQByrec7bkvj/uBW3tTNt1IAr/mWRxP88weFFdx8tlfVf2 -vodOiMUtZNvQlbFrAGXsmkGZi4q2hGUtOGXTiq7cdeFqDlzQvP+EcMAvY7iGI2dX7pyk6PaKrPLJ -/EDZ7QVZ2a3/XSQzv0wTCGsWSHZU2Zl/4MG0HYxCyj6FOys+ToBqN+wdRTseWMmx58qXaTp12wor -mB6ufhmWlqfsuaHNn0JU6ucJVPuWqendpgmQMK0CvV33UKEfpjmi/0T5qqMZJmcnRCftjJHhux54 -9Ycgtm3Ph23a9RIgaw4cYHeazduf4YqW7cde2C1PFuWAh6uKxsfrxz46js6s/65QeTvG1sRNQ2dK -aLDlER/46oyFUPH40EJt2jXhivdt2LLIUNuD+eHGO4uKpvsrKtDzZQ06d0LU9mhK0vHkwMwA/+Nl -ob7EcvG2reXNKDfj9zFG2o8T3IK/NjVd+bt2MnDdCEpaUdbeX1FU3zuwAVOOXMd9J1uTI8MNiVOD -dbFxao0/8uGbj/wE4IquKSE6nHd+SV5ybdPY+GLXDs878KAq9hzgrHU98MWujRRjOHLHmh6SEpW1 -PYrx4tXR7sKrE6KKyzPShluhQcDdflDyr6sKcMq2FvI2xCn404JKOaPpevODAZHyYw== - - - kFP0l5+d9+u8rjXFLQa8GQZl/PHeTmraNWPKNrQdKcvyivthQc51HyP9j3FO9i+TwsqrO2Zs5ZK6 -s3Ax9swbpvaUXVtX1pqq7fmGEvhsRd2erKXkXRgEJZ6JjrTk/DvA4Xz0YAEz/WV3A92p56f7k88f -uAAJH/3QgiMPonrfjqg49nDYdtO7tux06L8DZOQ/YXzH/hiu+f88ep2w7CM/vGJe3vhwdrDx7pqa -0LhrxtcfuSC5O6bGhFVFQ3y4t+RydKjhQSxeyg8CeKCJUXohIm998WEM3/olQMft2+D5u9b2d7sW -QPKauvL5hgHybst5vOeRDptRQVIWVO3PV02daft+fPOeB1W3pKp7GRmquj49UHVlarDm2ucpPHTF -2Pxq1VD7dN3U8PLIh6j46EVW/zuAbvp/swTMkR9aGxmpvrVhARV+DrE4u3ZM9aYe/G5N2fxsQwuI -3zK2J38cJQLfezCNC8P1L967u3JjY1ayrAS+27eCc+YHy+PXNQ0pSyM18du6xsSPvq66ZVVd4sxg -9c0Po1TioZ8Iej/WVbLna0tbNwMSo3LA0x1HV+7hGLLywI+qWVQ1Pfk4iWiN1T3sP9M08p4P37Gk -aUuakpTf2rY0J++PUWgfJumUL9N4yKcgovHTDFtwMNVn/zIrNP5/USr7yzi4bEUPeLGgrH+8YQal -xOoY7nCChFwyxnKGGZx54EY0vHejag89qMrjHsBRVW3KlrnpWaCv5Py4sPrS/Ej7sy09vnRNA02f -H2x9uGsgVKxqEWnr2ti4qpoerGpALyf7m+962TXn5ofALz+4qOAVOShp3w7LO3DDizf1kPx/PODi -f3xNbz56OzKW9JDk2aHmBx89+Kb3TlTFqioWp7K6W35W+q8a2JNTLvLbM0fH++N92BrPSFOCHFf4 -2wcHuvbfAWTNP0FY+aEX+G5VW3N/Wlj45zS/+OySDPxqagSdPtnXemfz/+foLd/aTNu17/d9nnXL -3OPTdtrpVKbuQltoi7u7JhCSEOLuQvACpaW0QIu7hEBcIMGChyTEHanNrLW29994z8wHtn5oSMh1 -Hse+779LzmOYFLvTj4ncHa5O2BvFRO0NoR+vdkIuLXWUP7AMMzNW32KedCGe/7O/Kuk7KT//d/3L -/EvGvrJbzll8qllESJhpLrzai0/8ORia8z5MiF94mXt6oS3xR3lN4o+a+qzf9vpgD/3zhJRVkCPG -GQn/UbfmXQ4uMquWe8puDlETv53mpP8wL0z7oRf79D/b76H3HCJyrhl46t4ILtY4TMyxTDAwtmlS -3jg74odJ9v2fVfXhPxk6s8665KQMm5hVYughZe70VCf8uVzDDuq5BLsMnbA3Cfx2IOfOxvvCC0sd -ZefN47XVm72EeMO7ogs7fUV/mAehN1UNqT/OsGJ+Bln51mZv6UNlS8YvOwOoCPc8B7o9APxguOrR -Vh/87uaH0huW4ZL7RxoaYCJm+Uo/4skYL/Mn0zQtz6fhYZ1yZtnmACJM9zL1vHkYctc2Un7HPYeK -OtAxEPL27OsL70qiPup4RL+SmAlqrcgjx6XtDORd3ezKPGcZLb4b1OALlR2Q8Pry8PMeGbXqy1pN -zZcVLsUpwiWaR4AHvsy8PIS5+0/zdHVUDTT8RNaDM/+ea8p/9Ocqj368wKg0D1c+UbATTk0TI75X -CBK+33oPAe/JQi68hlxb/QAJP1pmkT9v1DS6xJRcv4ySbwNeuvg67beNvvwrwVUawalh4HfGiEl2 -iZDoUjS1BxZq6v5a5TE+ahg4yzAkarc355q+LeXUn1tN7z0LTW/359hon4pR4V8kQ11KEtQtJxYc -6amQoIqUv9VbfHels/APn5pHDu2Z7lOFMgs9zzVPTjd05V1wycjZdgk12yYiJVknEY9NI+V3Va2J -J2bosf8x9lMzl95hwhbbyi+qXpT9Lm8sO6PvgF/b7CVGbPeTo3b6SNHK+vyTa13w26ZRfKR1HBe5 -2VdydbE95ZeF1tRftvoh150ifPyBVIhxTrMLt3qr79sm6Wm2aULc/jjigXW89JZLBIveGYDcna9L -/3mupvB3u5gNMbyH39/qQz4wDiEf2aarn+0Nwu5sdVXe3OwjRA+wck51Y+K+Xe9CRdin2QXWSVr6 -Zj/qkbwu+4SIEvXtTjf08koPIayfU3wOlXjj/xWxSq/5Z7ll9knkU117xilZfeyPs9y4H5VNJZf2 -p3hlB5oGnnWKlmGbpmY4p/gQ+wgjNShmF5uHqp/O8mO/H6WH/1PdnHUKrHu4cRwdpWhO/3l/DBMJ -9DrDPFxxW9WQcnqtM/fO3jD0saG79PLyG+ijoOJVh2X8Vf1iOzFc3YyOWH2LeBaUEbK886hY4xjk -vr6z5Fo3Pu6nt+iYXz7q6oWB0ByrWeTz2cYnp0fId3/a/ZB6xjkTel6VnMLIvfpfc005D/waJswy -jY4aYyR8T0259g0t6dq/hjHR/zb2woCnUPMNg4goWMKFb5a7YJFfQHb3K3HZe8MFN1Y6Ek9Lap5/ -30968G/Vi5RfTZO0rElB4W+K1sq7QUWTwC9llTsmYeGbXSmnx+gPvhELUn+a5qee2BlGRjvEuDRN -W94Vv4pe4deA/DeCeLIL9N88XPbUPg2NXXiVfmacnXjaLacUbgxXPl9+k/27abjywd4AOtw4VB3h -mMek7E5hk3oIqT/VFzz+L9DLmXYxrsjwofi64T3k+hZYZ9tkVZR9throNz7PMoOKkjekn1p6m/Pg -ry02+3CZjgD+fD+0T6HuZdEfysbscwdLHJIf+JnybdmjGX7Gz4EFPuvTWk2DXQSL2RvKuWgahD7Z -7Yc8ds7AEzzSqvg/N7gMSQckkQt5/MPiB1Tq8dZruV/f2GYXU/K3BwouSmtifuiouPmdrCn9hl/H -wgvL7n632AmJ9Cu4iICCXe6egT30yKlFwN/zXfOEpK2+/Auqlqhvu9DX/08v5vF3qwO42FfUzO+n -eWVXdoZoiRsDhIjVHsRtaWPRRUld3mmpMO+XpdbyS7uj1HhZK/S6sjH3jF1EztgbIMeZBgjP3bOY -GFCbEZZRxCPguzcX2wpO708CzpmhZ5rHqiOWO1NPaJoiv5XzEv6zWJd1AvxO7GJfVfgHYsw32hfw -x6BmyzY/wO7oX+WfH2HEf/+i8sm3bZB7/xBx039e7kHeH6/NvzgtyL+w0Y+OWHxVellSk3ZS/yrn -vLKl4NwII+m7d4iof6oasWETwoLrI5zYE5vvy8P2xzFJtjFiqn2KmW8ex6dbp2HR2/0lV0CWi1rv -J8WM0XMubnajkr2ApTd7y+9tvS+5ZR4qv2sdrrwvrUn6cYwU8V2o3zbeQ+4Z3hRdGMDG/dqHfPLj -YkPSr85JRMSRkl7ik7HKDT3Y5+oGyHnHaDvb0ElMso1Xx1knKh7p2nMv6tvzr+70IkCPM7KPdA11 -1llKzs4wNny7lxpv6UeHO8ZKrhn7Cq+udxddXnpTdtsyyUZZZoTVqleVlw3vQzmTnrfcUfVAwcv7 -SdcCvaxtK76hfZl/Uf2q8LpNxKiwz1Dy1rshV9feld5ef1cZYegsv7n2Ju+caSC0f1rhI21r7llD -FyzMK6shSRuLL8zx004CHX8IevyRcQgTudNf/dQK2ELfDbndiYn+xThKSLdMUzOH6Okn6vPv/Z/u -yqf/nKYlfK8E+rDSDXu6PUHPf4GOPcMtuPZ/g2omzDlHK9S/g4bN8hJ+kwhSfpEJsk/IBWknPFJC -Aa/s0U9dlMQb+xJmuWmKmSOvyTw1SQcZnxP1g7Ip4XuJIOIby3hpzJd1NtEiIia5ZexKQ1f5HUNn -0Z2NztIHxg/lSUDzn+pe5l5ZfZd95q9dDsutJJUtd5Vets6g4oMLre1B7YvmLwZhrU+DzwYMEGGc -RD7ZGEM8cWt4tMPVtkGPggExT2Ki7SJkrGsOnWYXoxMB0yACwGO6CU++1XSUPfICfnTNMQtDdetV -MEod88Tkv2cdTmDiDN0lt1Uvcq6H9HB7kp7eKyg9I2tCPt6fEVRsDOOfa98UnBmkxXzTT4r6l6w+ -9+TaW9TDzSFG0kToOSxe5gmfspZsB7W9/QEXrm1Pvyipf/6Lri3rhL694Nfl15DLW8PYaGVb6Y31 -3upnm72IOyvt+adXW4vO7b1H3rNO4OM0b/IuTtAjv1l9BXtsn+IWKZvzTyy8KvljnJtztqUy+qd+ -XPSZ5TewRxujxNgBfvZvY+yc33dGSCmqduidduSzf3RWPfmvIVL0vyaosf9S1eed1nfx0uurEn98 -gXz2k22aAfeBjGEdxwL2QD3Rvcq7sPIm5zfjQMkVuwgdo3mLvFVXEP4P9QtolBMw5+Lrgmvb70H+ -6S64oKpLPvkW9hC897OfV3ohtzqwz74fIyf+au4lxRvay66Y+4quOsYhYZtdqQ/07XFXFA0Jv5pC -M636SHn8orAfhulxF7wSKtw5Ry5wzaBjnVOoqP1R9HOwVpnqjryL0taCs68wGReGKKkXXSBXgGz/ -HPhURFBKK3LN0IoNXYhn06zk7/enyJl7E0yItr3yjra55IL+JeSaoiH33Mqbout+kIecYmLuQkvh -BXCsL3kkTIhpiBC33F50QdeacULfmvKTvO7Zt4utaSe3AdvsThASG8uf/7sN9vSXncHqBJ+SVgh0 -PnHhZcFNaX3KpeW3gFO6kU8cYn713gQta4SV8XMvJfU39UtYxHoXOnx3ABW29A4WJmkuu9eOivy+ -Ex/1u1fFQWwOoZ5OctNPDBOifzS0F96wDMAfWQbhj0zjVRHNiKgfpxpK460KAXFrmBynqC86L6vP -u63tKIlc/1AWZh0rC/+4QCz/ssYmbI8RYuzzbBjQxFM9sLB/TuMj/7XUlPW7tjHrkq4l+w/bZMnD -r5sMzMYoMm5CmHVmdxKdZhY3kEMzWfwL9HKXEhNvnqx8sC9CRXkXKJCPG/VtLiUTtTdVFeWWU0u+ -rgu4h3pqxf5sRfi+CBKxNZB5Y/194WWPgg4PamsoDjE1C3hknic0i0VESQ2do/EphUSvhF0KsnXq -zmBV2GpX+bWNvuq7pmFSgm1OiNyaYKTujOOiV97B7yy2Qy7vDmOf2QHXm6bw0cudJReNH+BhB7qW -jhBbb/din8ib0n+VNyX8utuHDLNPUjODMgFuZ5qcJW7OPWPowyXtTjCzpLX5P0/RE76bYiT+NEiO -+G6MGv4PKS/5590eTIxDxCuZFWSfCu1TZBVxyjY+kCLNgD0Adz7VvoFdX3hd8YdxiBxvAkan6yE9 -U7ykxs03oh7o2uF3NnqQ98wjhNj1fk6a6nXVneUu9HO/vEloniHEm0exUfYJHsw2IkDufECHbfSU -XV7rLryy/A5wfzv6yf40D7XcR0h7AdalB/n4m423ZZdX3pReV72A3Fr/gIlaHyEm9TKzgFaknHKI -SJma5pSfdG0JPxo6s3/TN8ecNPZm37SNI1ICKj5Z2VP9pA0Z9+OcsOTRJ13zG+c8Pg== - - - fe1N/u/LL3NPbXRBLhm6K24tdlXeF7VCL1Uk3/5HVeKVE0cqWmlQQcl3zsIjt97n3JiiRfzYDbv6 -z3nW029Nk+ioF9WJZ8qe/fGP+cbCO0cqBsw5WXbPPV14zzVVfE9RF/PLKPbh/118kXvOKeVUrvag -7q11Ix5apgjZgJ3z7dPEHMccIRPUSYyuG3qrG5f47ZvqxNPa18h7A+z08ysfYE+Mw6ik7YHKJJ+U -VHwYmuEu41WZJtDR6vacU5tD6IiNvqrIrR4k8GRS/Exd1ulxTuLPy+8KbzhC51ZmyKnqDtilxXdV -Dy0zxCxTX8m1lfbM35Za888aOovPm8aqHnmUIO8r2Eh9Z/lV+xw5OxCak66uodhm8PGWoaJbK69i -L628zrhqnSYmWcWMgvnaivPDxNwft3uwKR8Xa2oDKi7WOolO1LYkXlW/zHus7664szZUFefR8Dmb -47XoxbfwOw4ZIf/YwCZ93eRyv25wWMerVLRTjs/X92Se03TEnzBOIKPnmvMilK9z7jpUlEq3hkHx -a/HoTytMyoGeAtsbBzrQW3jRrSJk7g5WRxiHiJHWaVq6V8lF7E9Rk51iSvr+BNC4YcQD7xwxxS9l -FFtnOIXbw7Q4r1SINY6QE5ZelV9ce1dxeaMfclXVmnBSXR9/yjaAjfbOC9ArHfBbm++QDwJSfpVT -TErdH8NHWsYJMdqXeX9sj8AfrPdBrpnGcYlWCR+maCk5I68vOKtvh97c7kU8NPcTYpxjzEL7ODFH -31F8U9dedNE1R82zi+m5xhH8851RTKS2E3ZX0VZxe/Vt1cOgQojfmWAXLL8jhO0NNyLWRwT5m4PE -Z5v9iAcLbXlnNz+U37IAf7JNk5N8Slb53ij80d4QKtolbqSvddFzltuRV2V1eb9NMKN/nuMl/OST -1JOs0kbqcj8tWVxTdNI2Rk3zgVzqVdKL92ero+SNRb/P15Sdk9YV/26cIqWZ54jJxjEU8GZa6eFC -U/2Bgo/Rd5bd7yVF/zTFSz1l6IXddcwzIYfapvrD0J6eA1UPTBOMQq/8RZ1zrga51oWNkLVV3Re9 -gF97R8r+VtoKA1mYVmYcLb2xPZR/fXOg5An4e5+Z+ivvu2aq41Z7oWGT/OxT/aA/Qa6t9MvJ+Vs9 -WX8sNDz7be1V6pXND9AnWx8g9xwzmMTQ3rt9jKSfRHVFjz0yDjKgpBQ5xfhETXvWuSFK+A9T3NSz -0uaCS4pW2H1xc8UNaPyV70a4ideCcmyG4U3+paWWv2v7d21TzpmVd6XX7RJKUX9N3uXseyf/H07m -nW+t0wyEV8lBm0agYYburEuLLzNPLnWUXlzvQz00DOOed5DjTr5EhH1vnSQku0WsAu8sIWl/Ah69 -0Vf8xDJeHuGRVsd4lMQs9VtEJFjC36yT5HS/HJPqk6JzDhcoiMMlNsY4Tk5RvIBeG2dk/7Q/zazc -m6Gkbk/gotZ6K+6NMuPODzASr+yLMJnBRTolqGPXr41UJQxxE08bp1H5X3drGj9tcummaXistCnx -1MLrjGvmCehznxqbru+DRyASb/2HDwm/frTe1AOYpuVYi873yJExK32FlxffF9w0jIAcOcPMA3V5 -3zJOT3POc8rsMi5scwAfbp0hJFvH4OE+MTbeOomKWn6XdXHtfd7ltS7oVec8q8Q0RcsydKPuGQdw -z0H9AX4lp3rmSGk2oDX6N8XXROzE79bfwiIP1U1Cm5iYZBnDPbeOkxJ1bZCb+xPkTMc8vdguZhWG -9tDRvSo7tztESnaIuKUbH+B3V1+X/KFtTvt1nhfzXU91+L+lNZlnHTOMot1hWtpaF/puYEFAcquY -UKeUkm8ToRM8EmwaYMsEyxgxxjYphOm6qZHbg6TEoIqH8kjJ2UcLDFhQxUaYxzFROwOQG+aRynu2 -SWLy3jgjs5uY9nNoj1DLFD3DNFL92DQIu+2X8VB7IHtr3pReGSUn/McrZZbuz1Jzd8B3MIsIKYbe -qqjFdvj9lTfwMJc0dP2RA90G4c4uZsM8aiE9NE9S21kVN8zNf7LQAU/9tMrnfV3jcQ40dJxzFp+7 -MYB4YJzhwFeHubjVD8REdQv81jgr53Ro7tFiK+y2SyqoAvqbvDtaFeZX8wiBxQZBaFbRWg/kpkiQ -/PMo9fE35sGCO8d6YuHndQ51qRf1EPj6Pc8cD3morRccLtXyj5boMJcMlbAzWHxru6f0WkDJJ9rm -WehpQdZFywQp1TbPgNvmqMVuOROsJS5J8TLznqQ57qquM/V8QEMo86sIhWvvCq9t98JTfHI23i3l -VjllPIRDI8DLeyrvv8XGfC/i510wT3NLtgYx4Zq2govzdRnnVt+W3QF5ssArZ0EtM+QMUVPuBUlb -QZhTwq3cHsBHbn8ov6ppzT4/yYz+delV1uVDDansYIVDWexFxEwLCi7uz1ALbRJcsnEIFrPdWxQB -eCFy9X3FTUljxtmFzpJwwDCV3cz0S4M1Bfe3JtlQp7wW5xCzijfewx9P0hN/G6NFn3JKCZkeFbPS -r2NX7ytJuVYVOS+4zCK51fTq4AKbALy0dHOgKmatnxCtfId7uiuiQA9XufSdofKna12Zv3k0tCqX -rqbGs1rfYtVySRsiTqltJsQu6DiPBJ8OfC9jtav67vZw1ZOlN7ln90fhYduDiIfKpuSfde3pp3b6 -Kx/4lHyMU8XHmGbo6Y45bvlWf/UDC+DvvRHoPU1b8i/SupQfpMJ0kK+qEg4WGoTm0LwxMSPXLWLm -WfpxT52TtDyfnIOwTJNTl97Cbiy+LD5nHqdlbwwQk5XNBb8aOitug/56uPa68vHii8r7Oz2oxy4R -o3BvGB+7/QFxJ7DAxezPYqKtU8hHplH4QzvImj4ZKSsgY0GcYi5E8gJyVdtW9tA7xyh2zuATAmqQ -Wf7e1xbzzDiMiHDPU/Ns08TEbaDnYn7GT14ZCx6a7y5pLDi7+KrwrGm8OnxnFPlguRt6U9NacNWv -ZFXsjpOTt0aJcaH5m24Fvdg0Cr5vP+qRc4ac5ZrjQi0TgjLLNA+y3Id5tvIe/8whaalzSlubAupG -weeNmhq/iphrGoY93OyB3DBNk/NXp3nID8LS28PcvHNOMR9pGaNkWEfxic4pQrJpDBNnHK+OMM/g -Y73qWurqACl74TXiyUoXJlbbAY/bfF8eF1RUZ30ykCoCOiJE/abo/Oq7ymc+eT1/X8zH2uW04oNl -RpVNUp1kHCkLc8+iMg9Cz0BOkfO7CIk/2cT08o8bTR2+BS7eI2cUbw0jn04Jnp+Z5j85axopuPu/ -2zzusZ6Nt4uwscEFAdur4RD8C3yCXcYuNc5S0zYn0E9X30Ouh/bC2hqjpS50Yu7vjPLKzFM11a55 -bqVbQswwjqIi1j5U3gK1c9+nZFY4pAK0+jX8jra95IJ7npABOC3cPo589llHR7pU+GKTqOqZcRz1 -ODRvaxv0lrS+8DdFbfZZtwQHeICc55gn5Ph1TLxzkUfsYmb+MSAoeWQY5ULXB5iZune4B6qWyisi -ds5v8sa8G0d6Fu7LhrDueJVDssjxaXsSQtqfJmHLsYHD3J/CJq0CP1SArA/8PNyl4VQdASZxKaiF -y12QG5uD8PCPm809wdXG1w4Vh7gxXv18Ywz7bGe44s7Sm9RfjH1Zv+/2lVwyjTIzraLa6u0RdsHe -JDPLPgtqexQX6ZjBxvpluJQjFSE31FPmaXy8Q1FHXu6GX1vrLj633ld4Ya2n8LJ5BBvrm6MVHioZ -0NA9JBYxt8QxV4MA7BKlbc0+oWxM/2V7EHLXNIkK3+itugdYJ2lnmJEha4NcljcV/OoU8ctcIn65 -a5oPMQ0QY7vRz35shdz7cZYZ/8teL+yWR8GvXu2B317rKD3vCX2Onks80JILPFJc6sYA7M57oP2T -vIJLa92YsFlB7km7mJAWUHOQfgWnwi+jFVin0NE7QxW39R25J5V18f9xzBGzgCYVStuqbiz34J9Z -Z6mZLgkl269gV1inQ/ufQR6BOnpkmaHkHS03NtrmQHacwkTuDWPCTUPoRwEJs/hAISQ6JWyIuhPy -h2EIE+XRdAy41Z0jfnUT73AZeIGKlOObI6T55igFXuANxnkWTNuHerY2iE870NZxLOPIcNNw+R1j -f8mV9e7Sa24JyG16PsmnFVLn2uBXVS+rn9lmGwFDClGHak6lR45N3egvvLo7XHbbNYfLPNLyWAcg -06/0Y59aZimZnw1CwYGOhfErsGnWaejTxbcZV5Sv0s7q3pb88Xld2GSRUKCSltIrq+9xz/xqIdur -YlN9KibWOYtLNo1CH7tm0HFOESnFqW7gTzTkXRI3F4S7pFyUR8lDeRWMsuAiC3e4xGftTZOSV/pQ -YaFZyr7F1o7QdR/HHCXLLqJmAd7NDyjpkC9L9CqPjF6y1AO/t/QedsejYldPc1POv6t48ONSW+GV -7cHyu7Y5bJp/kUMMLDU07IBa0fdSYkL97tHysA4pIdUyjQB9WXrbOEFIscj4VXZ5I3NrnFM8xi87 -reggRmxO1MF2R5jJQZCHbTPI2NWe0rumGVSsXUHMDqzVvfQt19SqO8vDZM2Qy+C41voW2OyjNZ4Q -ZLEml5pYtN5ffntzCHbbqWYinZpa3tYYIdY8S063qenlgRU+a3eMmrg9SI61TFBTQc+XgRxUCPJR -lgfokUfDhITmO++NocP3RpDAL6C33NNlt71iZIR7jpDilgpQlklGhkPKKPHquVibgpxtE2NiTCNl -N7Y/ZP++NwS/7xY1YDySNqFluga52ktN2hqlZZvFpPS9ScyzzQ/IOxsfym8omnJOy+vTfrGBXBdQ -C0m749SspXfwa5q2st+HqCm/9OITf9W/hN61jROT5PXFF8Ss7J8231bcPlbX8axz2PS13tzLexPI -5zvDiPvGQVzUZj8xeflDdfh8fc4Jt5wODyzWMDd6K8PW3mSeXGjLPmMaQ4Q5ROhIr4yU6Zaxyk0i -ZsHOJDPDPNeAt8q4FaYpZPh6X+llcW3KL/ONyRc3BxDRzjlG1dFSLc8qxibZQC1Zp8jJisaCM4r6 -hB93B8pu7o1VPV7uLrvpVZKLgjoOySVjI9yymmqfhk/Y6IfeUTdlnFA35P6qrE85sdaRfiEgwaT7 -FbWElR78U1lz3gnw9913z5My9keR4bYpVPTeGOzh3ijqkW2Wkmad41fI32CevayK+49NRM78BPon -NM8RfIcE2zQue6Ov6NpmX/Y580Rl+PGKkOcC+WJ3sjJsX4SMs8wg47eHS8JsourkI51A+Hlb2GGR -EvKU7WUXTWOUbJeciQC8WulU0UqNU9gE+ywpJ7TP/tECj7E/x6WOcIouSBogsR4pn7A9VP106U3B -74YPkJt7k7AHTllVzMdVHh34UtfBcmPrzhQl7WCtucM0zShbfge7JW9IP9ladOGfE5SoH9ffV4YH -VprebEvruJKW8osr71FPPQrASBou1avmUj1qLtmj5KLNQINsUlpZUF9ftzvFyNkHPA== - - - e7RMr/5k4NA/r9e/OtDzOX+/TswuNozy89fHW/FrA8KinVFmxsEiDweOPSGgr6v/uNky9GmnddK/ -yudb5NTCnSlaun2+SeCQNrQCvYMdLjHQB6vkcuMkIn5nFJHo0RIgR5s1DbsgF+xMC2B21cvXgc3G -V0fbNUIzYBK3poHrUoX2a2KWmqfhT3ZGiq85RFVPA0pGSUDDrrTO4OMAx2f5wP87ZnHRlqmqiJWe -/JtLHZnXdj+gHoHsj/uyXv/Cq2FVOqX0wtC+ljbALDuD8Ccrb8oe7wxUpZgnOBDj7JuW7fk3LUZR -A3Z7lJa02oW8tdCSfXKGEf+thJd0KiDB5xwsNAp3JpuxSwOCrOUBTurGIDPROEJLMA4RomRN6b++ -Rz7+h4KT/Zt9EBPplVLztscIUZsj9Cy7pAYFvDRa1Zp5+jXq1r/eoq//S9n4/IeDZS7ZqhIQ1waw -T43D1REOMSUXeNjT/WlEuGO2/JHuTervGwNFt1wyoEHKRubGKCl6awTzdHeUlGEcI6d7FOTCzwYu -I6hl4yyjVVGa1vTfNj5A74B8CLJh+R8rnZVhXikLGspkXgU5Z2eo9NnS69QLhq6CK1agq6sDrMxh -WsIP84K031xTtFznOC56f6DisX0MHm8eRcXO1eb+qnkFvWgBzKX7gI5RNhZcNI9VPt0bK71tnYDd -t05ikraHsbGq19Drsw35v5kB+5pmaDkrPaVXlzpLri69LX+wNVDx1DWPzT/SsQhHq0KhFejn5jQ+ -1qF4UeuUc6p8CmK+V07M3RyA3LNJqxKMU4gIy0x17KGOhVrrg93amcDEB5cFdI+aWu6cw6QaB8vu -rr3Nv6TryD2/P03L9Wsa+PuzjFJpY8Fp0xg+zi2lFbulmKQvK1R46LiAPIYN3RO6O8Mo9q00v9kY -p2UtduMiDAOkhOXu8ke2aUJuUCNke7SNTavj9Jy1UUKMRyOke7Tsqs1h+BPTNCpuX4xLdysZkOAi -o/yjQVh7sNzQvAkyyb4Yk/xpI9QXlEKvlJzjnMfEO8Sh2Uu0Iqe6qWFf3tmj76UmLL1H3gG8gf8f -c+vU8XpNox/o1JFBwPPq6CjfEot4sMznHOhfvFK8RIRNCrLO2WWk0r9Mta8+btbUB1fZLLsCm2NT -UordOgHjYLX+xbGhbcCn51F9y8wqB8grB8ut7/6+501eR3BKyRkeKSbOJUZHWyfQsSDPxlrGKx44 -RMT0A3UdbX+aELs+CL8te5l+RtEY86Oxu/LWIdCDT0ssrBtkAK9agHfImljmGV6p6lXhH0PE8H8q -G6J/No9UxTgU7W3rs63U7elG1N6UoGRvlJO3PYCL3AIebB6svGedrHxqmsRl7IzXwTbH23DbU63E -vUl+iXGEHLM7TIzRd5aF7tG6beyG39vvRT4wD1U93BrAR+xN8Svs0ppq6zQhQd9Reb+PGndmkPL0 -1G5vzo3gIr3CDPKQaYaR5ZQIUA4Jq2JjsPy6cbzinmkCes/QnXPNMgl9EtQyykN7Jq6PUxOAj5e5 -5K9eOyS1BMA+MQE9DeqQkjK33sPvGt5Dn1pFlKLdCXauqg11dX+amedVcqqsImy8ZRoVoW3LPLPU -lnbOPFwe7pLzkOvDrExla+md9R5Uql9egzMPI8PkwrSTE/SY71QNqb8om9LPmibwSXYpt3L+deU9 -WRM07EDDqrLPwp/qOtLPDNHif3pbHXFiihF/YvUt9IZDKcAs9OIjB1kZP6teld9xywTkgFZAOdDx -yW4ZuWhzGBGzB9jSJGeW2VVtLfpeTNx8U9YfgLNS7GJMTkDHIoE6RO7PwlNdsuos41jFfRfIDG4N -C6XoyLuhbM05bxqBPzWPwWOdc/i8g0UB/WBJyAHZI1PxsuwPu5gJMU/gMxdfZf9hGS1/7Aba6ZGy -y30qLuZgqeGFf6WxdVvEK9uYFEC2pwTQhbew29sD8Od2MbnMDVh6f5aQ7F/g4D+vN7SF9tL1qBgI -UL98u5xSsTuFSHFIsUkOGaXYqeKiNkaxCR4VueRolcfwKBkVARUbdbjAwYK1grmAnpqn8JDdcVrZ -ygfEg/UB2M2gllb+38aWkeM1NjGgo1d83uTxPq0yyAElCWRtCsIyg8/UvIFcWhuseu5ZYGO9Syyc -S00p8uqpSKeKWBZYFdQdrgsbAno2ya2kwbbHUM88WkblZy0T++fGi+6ArrnZoWhiWUS0dMskMmyl -p/BCH/nRN33E69/MC8L/s91fdjeoraFaRYzsnTFy3N4kKdE2iXziHK+8vz9adm/tXeJvqtbIH4KL -PMJ+aM5uPytxo58St95dftc7BXv+PzpS2V/rLOL6dOUTaUfuJX1X+QO7uB5nmqytAPk13TSGeixp -TP1lqbP0tkv8gucSd77cnxYijEPo57tDuAirmA1xyGsJO5OMNGVL2WWlMOvk/iDqkWeWkuFXhfZF -JmbaZrAxNrGwarmfGrveiw3b/gC5ah5HPvbIWYCNBCSfpoFlEdNy9sYr7zkluFSPmo+ziSmZm315 -1zZ7067YZyFh1jl6nlvV9iqg7Rx1SGqw+6LqyGMDCx9cZmOs8+T07dHqyL0pUophkPDMMESKss2x -it1KLsoyTUryKbhYu4iUap1ERoDeu7HwMuGadarsnkdGzvApGjhORUvDECfpR0VL0f3dQVKBS0Qu -PlITS4MqchHgpvTlrorrxgl6iWOeUazrBN+xMf/UXD3kqrS56K4ReHFQyqz0KunQ9RFMhPod7I5h -EA/qranJq+XjD5a4RJ8an2GbwaUdrfDYX7bqWj+u1jWuDuHipS1ltx1SHjUIsqJHw8VYpjCxs7VJ -Z+fqY3+0TMOfH68JwHGhFvfRkn+erMm8AjJ3pQuwrkOCjt8chN7f7Ku4Czj8sVdFrwgu1dVuDGCf -LXXC77pmGfCvK/VNR6DnvDJMlmkUFmURI2LNci5se14AWxllpU8JikOz5p4daejI/9nk870yQvqB -hlQSVOHzN3uLbweWeFTvatPrlRFcsra76Kpfy0ABhuN83m7s+rhe/9qvoYL8T8nxqlgVHw11DQ4Z -G7Xei3y03Fl0YelN7jmrCJ/ilBPzAX/hPuu5ZK8cX+iUIeKP1xjofQkuY2+w7KbhddEl4yDiqUNO -gTo1TALoBc7RhrDWpMClLnxAhrkXWjqON9onvpjq3zq1oX0AKYVOBRdoPQ8PfFngU1DzD7RclFvO -g1tE7HzTFDNb/67yqrIFelbeWHZeWldwYe0t/KEjdD+pLDQnHR9tmmJk7k0xshbfFJybE0Z9o2hM -/EkPfGVnoOQ2YLKK/RkhzDwqyHeKwL8TVY/3hgsuuGeLQL1kndN1J5+Qtaf8buireOqWNDIsMzWw -vTFqgk3ELbbPcyEOMTnL9fd8QkzUBC/q+z78rW/3x6tTgwsNAqeqnrE7wcmxgtdaJ/Gxpr6KO745 -fPJyZ9oFTUvir45ZdLxdxkWIWytvLb5FRwbkXDjQZOSRjo70a0i5Djk2YfFd1ml9R8rp0H3fwaWG -WoesjmQR4ZL2p8qfBOXYzKMFLtqnZsK9CnrZSlfZLRE35qRfQyxxquklZjEx0TlPzHTNk9L8SmZ5 -cJFLsEuIqZZZQoJFxCzyqload8fQT3YGy2/PNWRc7cdFnHXNwlO+rtXwDxZqeeDYlq0Nop85ZHyy -UybAWqbQz7b6Mi+OUO//PEYPP22dRAPGa21a66fHa14jr2peV13bl/BR6wMVtwHj3d7uzbmw9T7j -omsekx5c4JKPlprbzdOk9O1xbOzBSm39saGu2a9hQPxKfKZ5vOTeZl/aGfscMRV8Hsq30NxsU9TR -tsZZuQ5pM8c6V090yjgVfg0btS+pjrdKUDHWOXK6U8muDD1TYxHh470qJswpZ8LcElLmoYZUfKyj -4vZETMhyNwHkcXrW4VpT584sMWelH3p3qavw2vp7yH2vmgoJnSM2yYSY9XFOzsogv9AoaqRujlNK -ZR3FEYtvYWFL74pvWCYRMT4ZNuuv7ZomN9Bno6QWbZLwygP6xma3ig1zKih5xilUxO444pFbTS39 -uF5T+9XY9H53hpav7EDeNE5zKz8aGl78t7H21edlWpV7Bhq+251wStOQenGtvyppX9VYr/pAiJc2 -F1/5ZBA2/K+lse/zOq/2yxKN4JNWZtgn8h/sjBVe9+i5rND8bcMYLmeqMf30p92Gt193W8Y+rXPq -3VJU6s4A7LZbxUG6Ffwq+zyvwipmFmyPkOLWB2nxG6G9nYeEBRZRXZVLUUe0K7iV6yOoh6s9sGs7 -w8So/VlO0fYwKW61C/fEDI67V8GGHeh5BOBRBXbAWeYxYoxjhlNgnsRH7w7DQjnqgW2q/LZTior2 -qkPryKl0z7IrjMPI6K3+4jvWaXSCW86t3OirumeeIsRZgB4vvYU9soxUx33WcvEf9TUsu4xWuN6P -DjNOkGINg+U39K8yTzqnMNGuGVxiQEotONLUEIJgjZ0z5HT3LDXn45KAbhVXP7fOgDwhRcd6VMQs -p5xUcLDIxH4BjOFWsmG2eQ7Uu9DU6FlorPfIazB+NRthmoE9sIoREeYpZDRg4+yjZQ7OJqHm+FT0 -0s/LHHCMcUlucXW0eRz6wCMhAPamwwKKWo5f3d5hGMJGGKcYhSEvtYtZRS5RVbQd1MP+GOzxZk/Z -jSO1kPFptbkjsCBk2ObJaaAXS10SWsH+FCrKPoNIBj2WLWvJvrXSVXJrD+R2i5SNWAIZzzpDzPHI -QK3oGajPq3yOT80grA/CkixT0EceFangcLXxpXexqTGwUMsJLoQyNDLOPFly98saixDQsvAuGRNh -k7IhW5P0Qqe65YVN3sx1yQVVLhmjxDJdnWCdrY73a5mVwIOYXhW1xD6LT/IrQ8+11dd65IQM00TF -46XOlN9XuqE3PQoe8aOh6bV3VcibeFH4m+Id4Du5kODVCek+DfBmBQ+5r+BVWeRclFX7qnNlpo05 -/ALxCJF695ulAWo5yG5M8DnUIz0NYROVPveqyUXOUK/KmxutstYXG0OE58ZpaqZfJ2D5dazqw1U+ -62CVy/QuMlBWKTUXHJNKu6bxhVNby3Up8GmO2epoxywyMqBGZRwC7/QuNbY4tM2NG5Ocor0pWsFf -u43dx2sc1u4I7K55EHZ/pTPvoXE4P+bPDRr1f/fruj9u8rmmOVzO2jAs0bvAFeh7KuJ3RkpBdqlM -P1wmVYJjynDIBFUmEbcUvF+qob/6oUnMLjLPCyr2JbXVbk0t1aEU4q0yHnx3ihC7PVL9yADqeHsE -F2WcoKVsD3EzHLMN6OBCHQP4MN8mI2cCXY4xTZATLJO8QssMv8Q0yUg3T5LiLeOoRz4tOc+loubv -z2Cjdwbgd6XC1B8lNbH/3u4tveEFNWqaYGaEasuj5FaGeuZASy89VBNznXPVsdvDiPuG99V3d8eI -gNOrw4yjyMcHSg7CO0/MOFCQcp0iZPxOX9YtywjktnWyKiKwyELa54kptll8okfJhA== - - - BBYY5aF6/7TGpQd1xDLTFPwJyFrZgdXWPudS8yvjFD3rQMcjORXo+OAiPuvrOhP9eZWJ8ihI+VYR -KvJQSyoILtBBNkQ89sxXRTpE8GfHanbV/6w2tX3Vt7wOaho4IMtl2RR8zJ60BrM5THhuGUc83huq -eAD65Kl/jlxwqK5n+pUCHPDKUsssJfVQX8txh67BjMEebPTmXTT0Fd+eFsaeAEz+0CnloTZmmAVr -A5Qkn7q58UDXWB/UUEvdMkzixmDpHUlz4inrTNnjAz2t8thQW+tZEBB9C3za8drfz9xCHPPVUS4J -OmFvDPpgd6TykVfDJx2uNbb7FoQs+xwHEroefKyrofnlTKhXSspySXAppiloxOZQyd3QdY4vyw1N -R8u1NYCXC2xicvHOKDx2e6ji4adlDvlojcswysk52j5k2NYMu8qx0Njo1tfxPaBHvIu13MBqfdPh -hqDGtiBk68dZ2coPuEczLYgIl6a5LbjS2OwLzbKS0YqN4+UxR0tMwqf1mrrDtVfTdnkNdaO/4sbW -cFX4wXpdu01OLXarqIVuFTnPLqPk+UCfHIWuYWy0TxrnuUjbPC7hQMesOl7jkg/XWFgfyFu+ZQHD -vcjFAKZBBhY5qC/bNfXmOXyu+jX0omOOAwPMzPq8xW/4710W36clQBwy4Mt6cvHXbb5Q/gaWzMq7 -+42qszjtz736d/+fjcV1yyi5QE/QLmUjxykXAr1hQV2q0AwDNiSgFzID+hqaTcaD7c9zy6zzPOje -JDt3c5iSbJwkp+3PMQs3hojPNwYq7prG4RGhc3kulZDgUvAQDgm/0imrJ7sUDeD3BaBW2cWh669+ -DbfKOs+B7Ixjnq11V1zSvYZeWn4Dv2kaJYXyVinIUUV+wM5BvZDlWxQQQzNAvSp8qnMeDXSx+pkd -1KBjnlXklLFKA2A9gAZDVt5mnDYOZp0zjWSfM4/l3nCKsYmOOUahQ86tsM8xC9wqPsYO6nBzOO+a -aaLgulUMf2KdhT+xz2LiA2oB+dDQ3Bnaa3R7mpoS0PFJJhEswjRTfNMtR4Iaw8QaR4H+TEJuHSzQ -y3dmWIUb4+hnQMchATW5wDMHj/moQ2f7FOjkndHye9ugHj2An0N7mk/UQc9ZpqhZvtBzffOI5755 -RAzgzJitQfxT0yQ1xSUV4g90Tc17U8QkwNp33TIG3CllQsCaFAAOZwaXmttsinra/qwQGZoTbJnl -I4BHp4CezXQrCLl+NbXqr00u6/MGi+RWYbN3xssfmqYxCUerDY3BZR7Fq6IV+RSMco+MkOWRU0sC -mjr25zU+B/RYxlpP4aX13oq7ZhEZ/hL57NchWvxZj7Q6zafEFbjFuIwjDaP885KAFtRycU45pcAf -en5LXk/fG0U+Ahkkxi7DJDsW2diDVWHDl+3mD192ha2meWyWU8OqDs1SsCkZSKcam7E1jXi8NY2K -sIGcfrD499yoNlBXXL8u9GzTq37/WlPHpw0+16/E5bnlgMPnyBm2OVzioZ6B/bRd3yF7BbnsVlLL -/9wVNH7aAnlriy/wrXBpJjm70jBOTbRJyXn/vdfc/+duY49vkYXwLfBwH7f4vC97wpaPWwL+4Qod -sS/DJOxMY+Nsckb10cqLNwdLjfWAM/hOGTF/X0zM9WgoFUdrTLRngYfV9GCjZpoK7zgUBPSfu0ya -R14R4ZZhUw+0zIrDBXbVgZpedgx678+lhoZPKw0NQZ2QBrgneWOg6v7eBCneLuHD3NJGhid0TjE0 -13BWCA9ln/UP+ed2hwsvu6S4VLuUlOaU0nKP9QLaF0Pz28+GhuagjlPtUTCKQQ0UuGWNVKu4kWCX -CqucEnaJc46Y4pJQs4Cep1lF1LRDFR//aaUeHEshy6FmQe3yWpJL3lJjmxfA98XUzH0xPnFzEPXA -NImLdEhoueD3srYGYHeNI8jHTgkpHfB5qWmCmLA9VB2+3l9xyy0mZx4tNdS7tbUMs5iSYZomJjnk -HJhTDfIA6LPtSUraSj/y4fow5ingNATI9fzQsbJJAbsrOBUOKavYOk/NtErI6XYpNXtjFBtunadl -B3UC8tEyC73+Pue8aaz4hnUG/mR7FPHQLSdm2ABPbc2y8vW9+LAA+Fy3lF6xPQS9ZRyG3HXN/f1s -ZWFQzcUea1ragxoOGtR7OvDWQt9iLdOt5CE+G2iwz2tUaGCBWvR5nUP+ZKhv8mrqWcs9+Kc2EaPw -s6Hp1fEqh2oXVz4xTxRdt0xB7u4Mlz60z6HSD4HXeNU1bK+ajjhYEFA+gqzkklXH2sSoyJ1e2L3F -9sxf1z9A7tlEpBynXIBf7Cdm1sOefN9LTb/nkjAq/TJCtkeMjfMCzvOBbLs3gY3dHEI89S2ycSYx -t2LtffWjj2s1nKPVOmFggUf+tEKtCqowqdbpotvGkfxrx4b61h0ZpUj0KvcPq5xGBv3A+qjn4r6u -AqZeosK3eguvyprST22NYNK8S+3DFlBvDg2nCmgi+2CphhNcqeEAT6n5HyO//kiPKzRPQG4fg5z1 -aVvY6F+mVziV1KLQOlpl7DKzhFcRmovrV5Jwhg+F0SvdBVeODALOgYFLCv34lsilZjHimRmwu3eJ -iQFM0nukF3CM48QUp4KN+brTMnS0zuX6tPRy8yw+YXeSGLc/T8n0LzMwf1l49V93mUzrPDIzoGYB -JkNF+pWYhL9/QJ1/1LLRRzoB1ReqFQkhwzyJSwjd02eXoRNNU5AHPiUh27/ARjikvArbLCPHNIOK -XHmff35nuOzmwSIx7+MKqeTzGhF6oMMVf93gUI5XODjAmGiPjFvhlFDzLCJiil3CKbPPs4rB51cc -aXnov/lExirZeF92zzqNSvBrGVCfjo3yapsbbJKONrO4ETARyHwSAcIyzkjbHcBGLLzOu7r+vuSq -a56RD3IJ8DpW4Z6YU7TQhb6vfgW5CN7rul9KyXHOU4p3J/HJFpBvrNJ6ImDDip1ZVp5xtga+PipE -b40JqkAPglqlQY3j6EybhAFxqGqw/uWGetMcq3hjHPfcOEtJt/597xY51acgZwfV5EKQe8rdEno+ -0FqsVyUkW2YBD0toebujmHB76FrYHCHJp2LB9meo2cYx3HOfnAsLqrhVgD2eb3wovLrTB73vEMMf -exXVMUA3kcElNhr4SFFQzyccLLGrAUPFOebKnx9oaBC3hFliGsVFf9TyyF+220XuRQ51ewzxYF+M -y/SoeLgDfWPD0Vr9C4eUUqxoyfhD/iL1IujNcrdMQDAMwO/sTRJSQnOEbbPMkiOg48HFGqahtypM -1ph3bpoRc3LzPSwZrE3hyvuC382TVdFBFRt5qOXjj5c4uC/rfM6XTYFwX0Iv2hwkJQT+Pj/Gw5gm -sZGu0Pl+Ja3Co2BiPi3z+cDDWt0LHJRNQSvxLTe/PVxpenmkZSGCKkKmT4GKNw5Vhtlm6CXBhYba -w9Wmdssc8EQtG3u4WgN0sDLOq4JF+hYwqYFFfLZ1DhFlFBEhgZXmdyB3vQissjEf11+8D2p4OIcI -m77eU3B3833e3SHSg59eQs//a6k7/f5f5tpXvhUeBfyQP24JW47WeIyPG8L6wzUuxybBFOq7Cm/o -O4sv7osIaR/XBZy5lszLOxOVSQdLdMTXNQ75rxUa0i8hVK71QNIG6DHX2Nnn/xFU8zFBLbX0UEct -9amwycbxkmv2eVSMTwOyhI6D9i+y4OD7l/g1jDK7DBVnna149nmJVnmkD82AJ6eC9U8FPJtrmSFk -OMTk7C+rrGq/ujrRISm7Z5uDPvgMPOzrBo9+CLTEpxCg7fOEFIsI9dwlZ0Gsc8AHRMT0AOBsoKtI -5zwjb7ULem9/sjo+sEApPl6lw71aFgrkPNi+lA93qGqJVlkt1jLBytztx0fKGlPPmEaL77rncWnW -aWKaTcYt35XUIDYma8qNk1yoV8aCWWewsWvvy29uDsEfgvdCujQ1pL05asbeHKvALm0F6/5hwi5/ -2ejR1NHM01WRujf55+2z5JyAtoZ0tFbDM4fmE88xixzaeoFnsY4beq7YPIWO2u4vuQY4465HxoGC -mmN5AGNYRIxcj1xItIvouX45rcA1j0vdG0JE7g6hHhtHMU89Ug40oBQSLOPExPUeyM3tAeh9rxyb -4lNgEt0yVIpVXBFnnsEnOpSNXI+2qc4swsSv9+ZecoqJaU4xo8A2iYv7a4lD/rr1os+1yKfuzVIz -PIsNNe7Flpcefcsrj66OaxHjU/Rv8+6s9RbH+lVcomVGWKV/h71nHGPm2OeE1fY5bFpAjclzzKET -17qgl2d56b+MUaJPrryFROxNUVLmW3JPghyc6lXR4aZRRKRzFpvqUeFzXWpinl1By3cr69g+fUOD -SUTJNE3j448MwrrDVaHAv8ijedVUlE9JLPAoqPmBBQ76cP3lxNFa0+vPa/Utn1cF/E8rfIZPwa0O -aHjYIFhXtxybvTUIvelUUSEHqzy6aRYa7lFWZ7jVNBhgZ4JfV1vj1XdMBVZfDnuX2VSPjlhwvNrw -wi2h5a93F12ZZUX+W9OYfEr9IuX2Rl9e/Kd1KuW/zQ09LqBZTjUb+Wm78Z1XzyVYZklZ2yPwCH13 -/uWtsYoElwyfB3Jo8YGOhZypTzm7PgSN/WjgkI4XqRDXaNE9ZW3ymdfQx/+uKXj8fSvy2R9AK3Be -oOUuFSXPqyaD7IJLCKiZgOVZCOMUJsoiwsTYZojxrjl67vEyj/znOofy1cBEH+ioJS4pOdM1z8w/ -0HCQR1oB3itllhxoWDCfgl4W0DAQh4tsjEfJKPFpmFCHjArWiFXoV/HRHpChnAoOdGMC81zTWXrZ -OUfOOtZxMA6gyQfqOsbBAh+wJzHHp62O96iq40JMAPw0269lwuwKJmAWeqZXzkO6pAyIT4FPW+7M -+2P5VdElwDsQtwawh1yIcynr6V5lLdGr4lM8KpCbdXSEfwGbZZuDP7UClg3qWNWflls6fAttb/Yl -XPD38RDA56pBds92zlfHbQ8V3De8T/7DCdYb+EljcL35nVXFRYX8HbAWzjHDKHPNULKcM+g4mwgJ -OAmb4FcISV5VywvLJCXVPIoOX2zPO7/6uuA8yPfJASW10A+0wK8M9RAf4pjlVQQ1NZSAigXdn0I8 -W3mb+ttyZ8pZr5wKO1xpeXuwXFfrVjEgThkX49PW80DupR9oKYVuceUzn4pc4AA96NXy8McbrYNA -r186F+p5Hl1zs1vNhrsk5CzXPDh+SjrUMkXL2h2hJbrmaqpNk8yczYHC86bx0uvGkaqHe6O0VPM4 -p8QtZlV4pRyEcZKSvPoBFeZVCpigJrB7Y7Aw8zguximnFgSWGIjjDT7vYOlFh3ehnr8P8iTgLsbh -TtsE4HS8WURMskmxKcd6Cuyrgcf5DPrmaKWhKaitpX9ea+78Ao6fT82pBj5Z4lL8fe0l2gle75RR -oUcrdY3H6/UvjgxcxrGhqTO4LOQF9Bzc0QqbEtCxCQHgse4FXMb+fOWjI1An1ilCnA== - - - eQIduT9DLvWrOOQ/DbWt/7vLZB/oUDnmGVL2+iApxtBPjvVoW7vsGjYCZLNMl5xe+XGV2/DXJo/r -nqcXWacA/85ioo2TiDCvmlYeyo8eZej8HeTe1gg8an0UW7Azz6z26mrrj0Gt+zT4NI+KkPoJ9MDn -5VrulxUh90jPw5tEuIStofLrO/0ll20jlY+DcnTW51U29su6kP9lQyg4XGGj3SDrumZhYW4x6plH -iokJKGkFh1o2MgjqOaBhlQcB5xwv8ynHywJKQMuAuBWYJJeSWeqUC9FuZSPbPt9E9Sr4VUEtD+MC -mu2SMQp9KkZpUMtGHOoEJA/od1131sUZ9sN/6xqTTvg1JKDxDJhXycE45awK2xyryDbNg+xPkJLX -3mRfMIG/1T6BifTN0/MCgFOPFjmUwxUBI7DMwQJ9KvUoaUV+HS7bKS957JwvuGmeKL3pByxwqKsX -Hiy87LZJKYUrvflXNgbybtlEsOgjHaUc8GQx8NaktVH04z0RLQ+wWqNbzqlc6oLcMHTlXD5QEXI+ -6lhVfiWlwjRVlbI+AI7ZGCHWJq0nu2S8StMULnG+Ke30ND/xW9skOfEAcEBACnxrAjDOLCbuWMfD -BbUcpEtGzjOO5N3eHcy9ZBfBHh0sslAH+rZu/0JTg1vJRfqAljklodeDutKSyl1iaIJPhgasRM/f -naVl+/X1dQ7QcxuDuEhJQ+nltTdlVwJy5PMjPbHw0xqf7VEL8PtierZLXot3SJuZTkUTa28KG6t/ -k3tW9yr3tO517hnQyyXHy/VNwaUa9rGhhnu4/OI1qNv2T9s85tE6HWmeJCe55HxUQNcgPAzV85rw -hUvBDO2JBj/eaOn/uFHb/GWDw7DMIlOX3xRfP1JzgRY1tB3ohG1+LY/qlNdT/NoGfmChrvajoab2 -L2NdO+iDajfQUo+SWf5ls6YmsMzCujWUYpBVs9wycv7xChP1xcAifVyhVPpVhPzdkYpbtll03NfN -2ja3glK8MVR6bbM/7/reGDwGfEcS4M+6w8WW1z51U4sV1JJnVcD9ZGzuA/VKDD13MkbLPq1rQ94P -gl491FKgfg2dGFikVu1NocIdCnqRV8OE2aaRUWvduRe0r+NPgtcUHy7iMoJaTHIA+OlHHRf3eblO -8HG5odalYpat9EOvqtvTf1Y2xXy7/i7t7JdVDuHrhlD4ZVNYc7jEqgo9vxyUMyBBOTnbNVfxyDQG -ub83Antgn8Mn+NT0oq/rfPbXjRr+8RIP79eGng+APrRLSGlukM2Pl4TsoyUh63gJ1CdgW6CrJBdY -b7eEmO5XELO9ckqRQ8Yo2p5Axxv6oRH74+jEIz2twjwDfbL+/7P35u9xHNeh6G8vvwTJu/n8fde5 -uTdBFiaSbUDd1V29iFJsEpS1gSLFTZQoLuBgAAyxDDgYACQlavN24yROHNtyvEi2qIWSuIqbSGoh -tVOiuO+rFOfdfO+/eO8sVb0OiRlYBGagRr5Y4EF3dZ2qs59Tp/59/t9+hHd9bxx96OimJ4ofv7B6 -zsGfrJh+6oVVd558oXDHez9b2LJpjf2V956eM+3CnpGeC288/tSZvd/5/rHXHu0/9GrXzPeeWySO -vdJ579EXO2498uIK/9ONHW0fPp9r+3TLI4Vj29cPnXt9/eilN9cNYQ3jwZ8vMT98JjfjU7CdT29f -BTy6as7HG/O3HXm1eN/FXaVlF3f1Lzz2au7v9//L3V/d/6N7/+LIS8v8M9v77z++fV334VeGF37w -28E733x61W17/+nhaYef7bpt/z/N/dttj9/5F7u+e+dXjoPNfWnPSP7EttLCt3+1pGX/v7ZPO7Nl -+axLr3ffd+SV7ns+3dg758Sm0uKTmx/tPrn9e9859drIysMvrrxt3z/d+2cvDcs//ORXi23sP3Rm -V2n5ie0DS8B/vOvj54fmfvTM2gcO/lvBPfriUuPc7hXfPLur597ze9b0ngXZc+mNx9aD3/Dk6dfX -DR56ZXj5e7/qveujZ7umH35xBcb7MGZ1x5Ft3XdePjCy+vJbT/zg3N41g2deX730/L41xVPbR1ce -27R60dGNvbMPv9g149jWzjsu7CsXrhx48l8vHvzfz3+0qXj/sa3995/dVcqd31Vacfi53Iy9P5ov -dvyw/Rsfbsjfe3zr979zZNOTI3t/mp/11i+Xep+//9TTJ3eO5PEe2Su7wC/Z1TEHbLv5Z/eMrjq/ -77v/cnHf4989sbXnnsMbl7kfv7DUOrxxxW0nt6247fKbqx64+s7q7k+3LHMPvbTMBlt+9ZWDT/0Y -e8xc3I35zsL9J7asmn3lrdWdV99Zs/byu0/86Oieka4PXx5eCPbMwrNbBuefeGHp9Ne/P/Orrzx6 -+397++f33/TJq91g5w49+P5vCnfs+P78/3Hw5w9PP/zSitlX965bfWlv/6ITm8AGeX6ZeW7H0JJL -ux4pXnr98UeO71j94P5f5Kw9P1lxy94fL7wZ9vO2371TKlx9q5S78ma5++zO0pIrr3/nexe2Pzpw -buvAnMPPLf76Oz9dNO3QL1ZYJ18uzDq7tavtyp7BJZf2DXef3z288sLro6sugM13alvPXUdeWf7N -cztz91x8vf8B4MlHLoCtf3r7aO7TjeDf/nJ5y6FfPXTTB7986Cagy1nguyw6u2skd2bn8HLMPx5+ -aWUb7Oc3wVecf+gFsItfLM4+/FJ50enNjw3gmbf9/7z4rzavv+dPNvRZf3j42SXe5yBDr771+HdP -7XrqiYMbyvM+fqW86NRr64pnwT4Be2TxoeeW3PLhcw+0HHpp+e1n937nh2f2PvWDo9vLuTO71vQe -fnnNik+eX33f2W2judNbB+Z98sJS49ONK+SxzV1t54H3zmwbXHhyU9e3jr3aNevD36y4/ezWvvkY -5zn+8sPuYdARh18Zuv/jF0cWfLhheO57/54X+//x4b9+cXTWH71YnvGVd3684GsXdxXuu7x39bLj -W1bdfeilrtth/x46vS1/19GXH5YHf/HQzR890yHPvFKcexH8nXM7n3zy2LY1ne/9tufvD/57h/v+ -L5ZOP7ep587z23vnHAe75cMNWOvbOf30lqGHP/5N6f4d31v6l0de6pwBfl3X5bdW56/sX91zcuvK -O45t6pl9dtfgw6d2j+ZP7/n+jz599dHeN57Oe+/+eoX18XNL7LO7CvMvvVHMXXqz2HNm98DSD0Gm -fvD8Cv/cvrXlo9tLSz7c0GEffmGlf+rVQvuFfX0P/+794ZHP31nz2PGdpf6Ptva2Y99H4MMngW+X -vvPvD9/y+j/Pbzn4i8W3n9kKdtP2daPvPts5Y9ePH7jpnec677r63j9sOrVj3eD7v+78+/efXnTz -0RcWfR18prvP7x0ufPbeEz+6sG+0/P5zS42PN3bddXJHuf/83lLnkVeX+Uc2LwPfvvvujzctsz95 -ueP2K2+vexR8o3Wndg0tPbu71HXl7dFHL+0v957f3j33zI7uOSd3l1Ye2TOcO7pzZOXRzcX7P30+ -77/z0wXT9v7DvX/3xtMP3nkY/Pnjrw1gDcqyN5/uunXL95f85fGdo4NXDq5/6uKuNd0Xdgw+cPqV -nllXdq/u+PyNNasv7y6vuLhnaPmRrX3tR7c80vXpy491gz4Fulpx6/l9S2+79GbPnKtvFpdf3jey -6sqeJ586vWlwwenNfe1nN5ceOL9pTcepjavuffdn9/3Na48bf3zwn+5uPrWlcM/FfSOFK2889vj5 -XUPLPnh+ifHGz+7878deXPiN869133Flz+qHL+8d7T61vfzQcTwfAHxyAuZz4uUO7/DzQJMv9nzr -yMt9dx3funrh+T2PlsBHLp3fNbLyxOb+2Qd/vuwbR18u3HFh90jXhd1re3f94+K/2Pnd3Nff+9nI -nOMvrAZ7ddWcj34z9xuHn1/sHnl1bcfHG0ceOPva4yNndzz5yAfPr54NNsDQ5TfXjF5+a6R06a3h -PrDLSsd3rl721q9WmEc2jC5551cjD2x+bP6fffDz3O3n0cbb0nf/pb1DedSPF/eO9n78XOG2Yy8X -2i7sHs6d2zGyEn31IxtWeoeefagFfJSZZ8C+Ab+o7+jmR7o+fG713W8/PTr73V8NLzjxSmnJiZc7 -Z7z2ven//cNfz73pkw3LzJPbBxad2rF+5JMNq2Yde2n14rNbR7vPbhlZ+e5PO/znhmf++cZHZv3l -gV+umv4B4PDp9uHlh17s/tbef7z/L09v7rnr4p6BBy7vLy67+sbq3KcvLvvWnh/O+csDP+t0z+55 -ZOTcG2tL5/YNPnx6W/ddsKa3nn61C/s4Lvsc9OTF15946vArpYUHf134e/Dxuk9s6vzWme3Lv3X0 -lQe9bd+/7asfbVgij2/tnXfitf4HwfZac3Rb/5wjW7rbTu/qn39u5+oHwS9dfGYX6Kmdy2779JVl -/vm95cLVg9/9Oejh9Uc39d59Zf/o4Odvj6w+u61n7hs/XHDz+z+e3XzgJ/f8+bFNuTv+4931P/z8 -vcf/+eS28sMfP997N+zj/Zd2DT50bsfgkqMvd9z10YYF7sfP5247trV37sU3Hn38yltP/vAM2D2H -Yd2Obem57+K+Uu4o2KTHX1xiXdjVu/Ds3vLK0/uGO8/tHy1egD09tWP10hNbC3MvHyiPgK34yNUD -/Suuvtm3+Mjmvnve+82q246+OvTQmZ0jvVfefvKfL765ZugoyPRPNhZmHnm1fzbo9eXn9o30v/HL -h60zW1Yv+mzHY+XL29as/AzsQpjj4vM7utrO7lr5zY9eeOjrZ0E/Hdm0ev6nLxfvOba5v/3zA6Wu -//Nheejz9wdWXtzX98ChDcvlB79Y3nrq5cH5p18dXX7spd67j7/SOXP/j+f8xZZHZ37l/Z8suhns -54c+exPmvXMY/I6R3PFto8tPbVu96NKe/nmntz5onNy04GvHX13uH3u1OPvktrWdhzcNg79SnPvh -cw9+feuTM/7w3Z8unnbsBTwXNwyy8JHRy/uKy8F/nX95/7rSpb1rBs5s7b7r/V/f+zdv/ezbX/3o -V13OyZfWd57c/N01J19b13MKderG/vvObRnJX9j11JPgK3Ud3rDcPvJS94xjrw4/8NmB7/zb1QOP -/++LQEen96xecn7v6ocvoC8E/vWl7aUVp17tbf/4WfDrNq6653cH1q0/u7u4+PKb5Z4rbw91n3pt -cNHJzeXFF3eDX721564PfrXwb89t62r/j/3r11147ZHih8+ucA/9dvHNeI7t/WcLt3/wm9Jdxzat -73n3+dLsA890u0de6r3z0+d77vh8f7nw/xxcM/LZm8MDJ0CeHHtloP30lseHLu58Yu27v+xxNz/+ -wP/cUL73K2BLiou7Hhu+vH/9o+deX9P74cbuGW88vcQ8g3ES8PU+3LDMeu/Zh772/jMPfv3Qc8tv -vbjn8e+c2/+jTWdfX1c+tqnvHpQjF18bWnry5YeMj3599/98+8dtXwF/6Dbwm+ec3Q== - - - vQZoBfzqXesGj2zqvef41r4553avGbh6cP13rh58/B/Pge8MtDn9k5cKbWd3ri2c3T3c+ebPH/76 -mT3D3f/5/ronfnegBPJyYMn/ObB27Wdvr+5Bv/OjF1a6Hzzf8623/n05yIu+e89vH8p9vq933n8d -KK78r/eKXed3r5j19k/n/vlbT3eYJ3eMrDqxY7TvvV+utF5Z/+2vPjMo/+jNf1vQem5HKfcf7657 -/HfvrXn03O7VD2NPgcv7R3o/e2t0CHyzb/+8+2/+YMdj0//01Mu5tt+9Ozry2ftr1x/Z1Hn3279c -+Dfn9o6MfHboH1773aEnnj69o3vRtjXmH21eN/MrH2H90paB+87sHFoO6+sdfrE49/Iba4qfvV3u -ARt39oVdi/7+3Z9/669+0vlXf3Bow/y/O/ZS9zev7BhecWXn0MNX9pSWXto5+MCl3d13Xdid+9a5 -11bedv71gUXv/7b71o9+M7zg+Obvr7/8xrrVn79T6r5woGfu0e1L5ev/MverR54tzLq8Y/3qt3+R -v/2FtTP+9Px21CvF+05vHLr/M9B9l/cV5lzY033X0Y2dtx57uTgHZNf6s2BXn9naM+vgL9r+5M2f -fOuPsB/jmR2lh7AGFePrH23sv/Od33T7Hz7TO+M/9pU6/t93V3df2td9/9Et877xwYZv/ynIOfPz -A2vXXdq/ZuDYK92zDj49p/mjZ+ZNO7epOPfqzkcGLu97dPjo9tULzu1e13d533d/ePnNp/7h1K7y -ykMbHrjp/V/Oaz62Mf/Ni7seLX329uM/OLd7pPPcnpHOz99Z/51L+4ZyJ1/u+ua7P7t/2ubHZdPr -P7jj/z4KNsxn+1av/E9Y/xM7++ZcPTha+t0H6564vP/R0fPga5/fOfDAJxseav1tyfyDPf8w839d -3jW04viLxXvBj/m7D3694K8/fbHDBztj2Wevry9/vm9d6cjmVXd/8EKne+q1Nd0X96xZdX7X4KJT -2/ra33vmoZve//WiaVf398z+bH8ReLW0BGPrx8BeO7V5+KFz20aWXtwFsntX7+zTrw2A3b96/tV9 -j4xc3f/ImvOg9z9+edUdJ7YNLz+3e7T76huPrrkI8BM7h/Ofbu69B+teTr46An7+wD2fPv+w8e7P -5/6v93/x4M2X9g91fv7uo09cPrD+ifP71wyexXzra08MH9/12NCFg0/+4+WDj3//NNhMH7+cu/Xw -xpXe2R2PDp7f853vnQTf8eCzef/Mnscevfruo08d37J0xo4n2v7442eWfOPEtuXeyR1dd+J6H9jQ -f8dr/9Jrf/zSU2svv/mDX18Av/f05gdu+fg39/75mz+d+cfgC95+6fVH1l5956l/e+vXnd/cMHrP -n3zyfGkh+Krr/uu9J/71P94eKR15aan70W8ebDn0fId1BnQ57FXhvWfzt76LPQh+23HHlb2PPPqf -Bx5Zfxl8uFPbV87a++M7/2zLU7f/8ZkdvSs+P/TkLy4dWFPGeMiJlwrtYDt973eH1v/TZ2+Wey/v -Li2F9Wh/+6cd3zi6qbjgCthFB346/6+fGzL/r10/mPk/Dj2z0Piv94v5/2+K/KyY7Al8UT8ZIvX2 -kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFS -bz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8Z -IvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2 -kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2kyFSbz8ZIvX2s+LY -FPm5r3mK/PzhtGl3DHTO6ih3NC2+q2najLvlcvj3vI6hcr7UdF/TtOW3zCiVZxVy5UJxoKO0tvlW -ABmtwm6+ZV6+o6/5Jn6yGR5qnlMqdBcGADg/19GXv7n5G/DodPj/JqPZbDbo/xavbWpxXdtttYRt -ep6A/4hm13OtVikNS1qGNITV3I8PSa/V8oQjPNs2PCf9UB8+5AHM9n3Pc23HseEhm97yfdP1Ddfl -h1Kfq+qh1Od6mh5oGmi6v8lvvunm5sUPNC2M/Abr5uG6zSwND/XM7SjDkgwEi7n8vuLA3FJhoFwY -6G5pYfDMPCxV9A9N9w3iX0yD/zR/0Z3fLvThHtwS/Aprf8vi2e33FTvz+GtsU675h+nNN63p7xuA -P7XAtEqFlcPl/BDuDexrqSPxRK6n0NdZyg/g30XzLXcPlMO/4f+U1w7Svt5kGsa0m5tvWThQyAF4 -Pow70B1/dKSjb5if7ckXunvK1396oKOfHoa56Me/Uc84jRY6yz1Vo6SennCMiitX5XPlmcXhgU6Y -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 -LbkgPL6F0aM0xuMbAyfXGI9vIly/7ijm9TlrNYfC9RtR9zA22/bwrLh+ozV5djy4CFy/YW/4Sx1J -PF/9VgN1vhNJHHcNx+H6jY43D2YRnB/Xb3C3Q2vxvHh8Z0vSGI7HdwHXp4vqNzkeX5MipnHdG3Su -xtmg+MKK1Mlw/QYc2wrVr6oYmhzXr1sqNQpXdGJcv9FqzhAeOzOu32hUv4m7NtW4fhP6+hri+jWo -e70AXL/RqH5nxuM7VxVuIC01rt/5i+H7UP36vjIRrp92Jfej+g3rcnZWXL/R6V3BK3ZuXL/RiU6B -T+ncuH7GufSh+o3uC9cc1+/8fsvBHTt7zdMQu3ICXL+e4LJQ/c6dPRjg+o3kiD4EkMlw/UYrhpX1 -Ojmu3+iC2PpFnhjXb3CRIaqf0scad7IaxPUbrgRVOsyYTlYNcf0a6TAT4/r1n6QO4Iyorh1yP21c -v9GPw8gqzgsriK3e/RXjeXgzSkd7vGtnfIR9pf6uOioGbyV+O9y1OzrxPihbHOCmDo/1ojc3b/zq -r4OvfFP1p+YGXsj2z97GRCuPD7Pufj4asER3Tlj75k7+nsazcn968e2jK9HK3re8Ig== - - - Yj3V9JWHN++1o7mj6ZWDt798cvz3/c2b39+XT3cX5pZ/zM+u/V6Ltr8+unP595+1bPrd/pcE//p0 -eyYtrm1fffj497P097fXb6dm8rTtD4qHm3vtB+3j6XRny39ae/Zt99aX5w+zV3+/OHyU/n45d/jX -lVd35v3Gv5dePHvwbfX79b2fh7fmjn5/zH/PHN8+yh5Nv3p0a/ZKMreVzfz19t69+T9/X37rf747 -XK3vvtR23tx98fzldHvxw+1p9/X3y8XryeztaHPtwVq0+dfB/Wgru/rs+PhTOXd8Ury6d3L5Q/b5 -JP389km30vLF4o2V5VftZKe81Cl7+3fl+OTdT4LNlZer2motQwbqS6+92flY3jl4+osGdRcCkniS -fz7FMwt3bu/ctzZLNgPLPb3Kc0muTA9dq1Q0zu3PHj65/PLNi5tXjo5XNq86//XP5e9fpr+wkvR+ -pzh0+s/SL/+I+WoPj6QmcfrO5osXM9GVwy9i7z/5Oaiy/wquD5b2ZL2vaK7nb+1bGsSatQ83s5n1 -P1MzG282D/cEQHP9/dazvezR+pdLt1dOr9+/vXLy5dpmefnbk7uvbicfsG1HN7e+v9x7d2c7m/6M -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 -B0TQ - - - diff --git a/modules/domtokenlist-shim/dist/domtokenlist.js b/modules/domtokenlist-shim/dist/domtokenlist.js deleted file mode 100644 index d8f6e9cd..00000000 --- a/modules/domtokenlist-shim/dist/domtokenlist.js +++ /dev/null @@ -1,211 +0,0 @@ -/*! DOMTokenlist shim | Copyright 2015 Jonathan Wilsson and Bogdan Chadkin. */ -;(function (window) { - 'use strict'; - - if (!window.DOMTokenList) { - return; - } - - var el = document.createElement('a').classList; - var dtp = DOMTokenList.prototype; - var add = dtp.add; - var remove = dtp.remove; - var toggle = dtp.toggle; - - el.add('c1', 'c2'); - - // Older versions of the HTMLElement.classList spec didn't allow multiple - // arguments, easy to test for - var iterateArg = function (fn) { - return function () { - var tokens = arguments; - var i; - - for (i = 0; i < tokens.length; i += 1) { - fn.call(this, tokens[i]); - } - }; - }; - - if (!el.contains('c2')) { - dtp.add = iterateArg(add); - dtp.remove = iterateArg(remove); - } - - // Older versions of the spec didn't have a forcedState argument for - // `toggle` either, test by checking the return value after forcing - if (!el.toggle('c1', true)) { - dtp.toggle = function (cls, force) { - if (force === undefined) { - return toggle.call(this, cls); - } - - (force ? add : remove).call(this, cls); - return !!force; - }; - } -}(window)); - -;(function (window) { - 'use strict'; - - var arr = []; - - var inArray = function (array, value) { - var i; - - if (arr.indexOf) { - return arr.indexOf.call(array, value); - } - - for (i = 0; i < array.length; i++) { - if (array[i] === value) { - return i; - } - } - - return -1; - }; - - var validateToken = function (token) { - var whitespace = /[\u0009\u000A\u000C\u000D\u0020]/; - - if (token === '' || whitespace.test(token)) { - throw new Error('Token must not be empty or contain whitespace.'); - } - }; - - var DOMTokenList = function (element, prop) { - var inst = this; - var i; - var values = []; - - if (element && prop) { - inst.element = element; - inst.prop = prop; - - if (element[prop]) { - values = element[prop].replace(/^\s+|\s+$/g, '').split(/\s+/); - - for (i = 0; i < values.length; i++) { - inst[i] = values[i]; - } - } - } - - inst.length = values.length; - }; - - DOMTokenList.prototype = { - add: function () { - var inst = this; - var i; - var tokens = arguments; - - for (i = 0; i < tokens.length; i++) { - validateToken(tokens[i]); - - if (!inst.contains(tokens[i])) { - arr.push.call(inst, tokens[i]); - } - } - - if (inst.element) { - inst.element[inst.prop] = inst; - } - }, - - contains: function (token) { - validateToken(token); - - return inArray(this, token) !== -1; - }, - - item: function (index) { - return this[index] || null; - }, - - remove: function () { - var tokens = arguments; - var inst = this; - var key; - var i; - - for (i = 0; i < tokens.length; i++) { - validateToken(tokens[i]); - - key = inArray(inst, tokens[i]); - - if (key !== -1) { - arr.splice.call(inst, key, 1); - } - } - - if (inst.element) { - inst.element[inst.prop] = inst; - } - }, - - toggle: function (token, force) { - var inst = this; - - if (inst.contains(token)) { - if (force) { - return true; - } - - inst.remove(token); - - return false; - } else { - if (force === false) { - return false; - } - - inst.add(token); - - return true; - } - }, - - toString: function () { - return arr.join.call(this, ' '); - } - }; - - window.DOMTokenList = DOMTokenList; -}(window)); - -;(function () { - 'use strict'; - - if ('classList' in document.createElement('a') && !window.QUnit) { - return; - } - - Object.defineProperty(Element.prototype, 'classList', { - get: function () { - return new DOMTokenList(this, 'className'); - } - }); -}()); - -;(function () { - 'use strict'; - - if ('relList' in document.createElement('a') && !window.QUnit) { - return; - } - - var i; - var elements = [HTMLAnchorElement, HTMLAreaElement, HTMLLinkElement]; - var getter = function () { - return new DOMTokenList(this, 'rel'); - }; - - for (i = 0; i < elements.length; i++) { - Object.defineProperty(elements[i].prototype, 'relList', { - get: getter - }); - } -}()); diff --git a/modules/domtokenlist-shim/dist/domtokenlist.min.js b/modules/domtokenlist-shim/dist/domtokenlist.min.js deleted file mode 100644 index a684da66..00000000 --- a/modules/domtokenlist-shim/dist/domtokenlist.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! DOMTokenlist shim | Copyright 2015 Jonathan Wilsson and Bogdan Chadkin. */ -!function(t){"use strict";if(t.DOMTokenList){var e=document.createElement("a").classList,n=DOMTokenList.prototype,r=n.add,i=n.remove,o=n.toggle;e.add("c1","c2");var c=function(t){return function(){var e,n=arguments;for(e=0;e=1.10", - "jquery-mousewheel": "~3.1.3" - }, - "homepage": "https://github.com/fancyapps/fancyBox", - "version": "2.1.6", - "_release": "2.1.6", - "_resolution": { - "type": "version", - "tag": "v2.1.6", - "commit": "c00852a5394ef18517598bfa3b9e885cdf5c7450" - }, - "_source": "https://github.com/fancyapps/fancyBox.git", - "_target": "^2.1.6", - "_originalSource": "fancybox" -} \ No newline at end of file diff --git a/modules/fancybox/CHANGELOG.md b/modules/fancybox/CHANGELOG.md deleted file mode 100644 index b0d847e2..00000000 --- a/modules/fancybox/CHANGELOG.md +++ /dev/null @@ -1,125 +0,0 @@ -fancyBox - Changelog -========= - -### Version 2.1.5 - June 14, 2013 -* Fixed #493 - Broken slideshow -* Fixed #556 - Parent option -* Retina graphics (#564) and retina display support (#420) -* Improved "lock" feature - -### Version 2.1.4 - January 10, 2013 -* Update to be compatible with jQuery v1.9 -* Small changes that should fix usability issues for certain users - -### Version 2.1.3 - October 23, 2012 - -* Fixed #426 - Broken IE7 -* Fixed #423 - Background flickering on iOS -* Fixed #418 - Automatically Grow/Shrink and Center -* Updated the script to work with jQuery 1.6 -* Media helper supports YouTube video series - -### Version 2.1.2 - October 15, 2012 - -* Fixed #414 - Don't allow nextClick if there is only one item -* Fixed #397 - Button helper 'Menu' not visible in IE7 -* Overlay can be opened/closed manually: -* $.fancybox.helpers.overlay.open(); -* $.fancybox.helpers.overlay.open({closeClick : false}); -* $.fancybox.helpers.overlay.close(); -* Optimized for Internet Explorer 10 (Windows 8) - -### Version 2.1.1 - October 01, 2012 - -* Fixed #357 - Converting values like 'auto' in getScalar() -* Fixed #358 - Updated overlay background image -* New "fancybox-href" and "fancybox-title" HTML5 data-attributes (#317) -* Improved helpers: -* - now they can have a property 'defaults' that contains default settings -* - updated vimeo and youtube parsers for media helper -* Content locking now can be turned off - -### Version 2.1.0 - August 20, 2012 - -* Fixed #103 - DOM element re-injection after closing -* Fixed #188 - navigation keys inside editable content -* New animation directions (see https://github.com/fancyapps/fancyBox/issues/233#issuecomment-5512453) -* New option "iframe" - it is now possible to separate scrolling for iframe and wrapping element; choose to preload -* New option "swf" - brings back functionality from fancyBox v1 -* Improved media helper - better support for vimeo and youtube; links are now configurable -* Rewritten overlay helper: -* - new option "showEarly" - toggles if should be open before of after content is loaded -* - Facebook-style (https://github.com/fancyapps/fancyBox/issues/24) and therefore uses image for background -* Option "padding" accepts array (e.g., padding: [15, 50, 10, 5]) -* One of dimensions (width or height) can now be set to "auto" (option "autoSize" needs to be "false") -* Updated callbacks: -* - "beforeClose" is now called only once -* - "afterLoad" receives current and previous object as arguments -* Method "$.fancybox.update();" recalculates content width/height -* Updated to work with jQuery v1.8 - -### Version 2.0.6 - April 16, 2012 - -* Fixed #188 - keystrokes in contenteditable -* Fixed #171 - non-images should not be preloaded -* Fixed #158 - 'closeClick: true' breaks gallery navigation -* New "media" helper - detects and displays various media types -* New option "groupAttr" - name of group selector attribute, default is "data-fancybox-group" -* New feature - selector expressions in URLs, see #170 -* Improved 'overlay' helper to use "position: fixed" -* Improved autoSize, fixed wrong height in some cases -* Improved centering and iframe scrolling for iOS -* Updated markup, new element '.fancybox-skin' is now used for styling - -### Version 2.0.5 - February 21, 2012 - -* Fixed #155 - easing for prev/next animations -* Fixed #153 - overriding "keys" options -* Fixed #147 - IE7 problem with #hash links -* Fixed #130 - changing dynamically data-fancybox-group -* Fixed #126 - obey minWidth/minHeight -* Fixed #118 - placement of loading icon and navigation arrows -* Fixed #101 - "index" option not working -* Fixed #94 - "orig" option not working -* Fixed #80 - does not work on IE6 -* Fixed #72 - can't set overlay opacity to 0 -* Fixed #63 - properly set gallery index -* New option "autoCenter" - toggles centering on window resize or scroll, disabled for mobile devices by default -* New option "autoResize" - toggles responsivity, disabled for mobile devices by default -* New option "preload" - number of images to preload -* New feature to target mobile/desktop browsers using CSS, see #108 -* Changed ajax option defaults to "{ dataType: 'html', headers: { 'X-fancyBox': true } }", see #150 and #128 -* Updated loading icon for IE7, IE8 -* Calculates height of the iframe if 'autoSize' is set to 'true' and the iframe is on the same domain as the main page - -### Version 2.0.4 - December 12, 2011 - -* Fixed #47 - fix overriding properties -* New option "position" to thumbnail and button helpers - - -### Version 2.0.3 - November 29, 2011 - -* Fixed #29 - broken elastic transitions - - -### Version 2.0.2 - November 28, 2011 - -* Fixed slideshow -* Fixed scrollbars issue when displayed a very tall image -* New option "nextClick" - navigate to next gallery item when user clicks the content -* New option "modal" - to disable navigation and closing -* Add 'metadata' plugin support -* Add ability to create groups using 'data-fancybox-group' attribute -* Updated manual usage to match earlier releases - - -### Version 2.0.1 - November 23, 2011 - -* Fixed keyboard events inside form elements -* Fixed manual usage - - -### Version 2.0.0 - November 21, 2011 - -First release - completely rewritten, many new features and updated graphics. \ No newline at end of file diff --git a/modules/fancybox/README.md b/modules/fancybox/README.md deleted file mode 100644 index 08a91074..00000000 --- a/modules/fancybox/README.md +++ /dev/null @@ -1,244 +0,0 @@ -fancyBox -======== - -fancyBox is a tool that offers a nice and elegant way to add zooming functionality for images, html content and multi-media on your webpages. - -More information and examples: http://www.fancyapps.com/fancybox/ - -License: http://www.fancyapps.com/fancybox/#license - -Copyright (c) 2012 Janis Skarnelis - janis@fancyapps.com - - -How to use ----------- - -To get started, download the plugin, unzip it and copy files to your website/application directory. -Load files in the section of your HTML document. Make sure you also add the jQuery library. - -```html - - - - - -``` - -Create your links with a `title` (or `data-fancybox-title`) if you want a title to be shown, and add a class: - -```html - -``` - -If you have a set of related items that you would like to group, -additionally include a group name in the `rel` (or `data-fancybox-group`) attribute: - -```html - - -``` - -Initialise the script like this: - -```html - -``` - -May also be passed an optional options object which will extend the default values. Example: - -```html - -``` - -Tip: Automatically group and apply fancyBox to all images: - -```js -$("a[href$='.jpg'],a[href$='.jpeg'],a[href$='.png'],a[href$='.gif']").attr('rel', 'gallery').fancybox(); -``` - -Script uses the `href` attribute of the matched elements to obtain the location of the content and to figure out content type you want to display. -You can specify type directly by adding classname (fancybox.image, fancybox.iframe, etc) or `data-fancybox-type` attribute: - -```html -//Ajax: -Example -//or -Example - -//Iframe: -Example - -//Inline (will display an element with `id="example"`) -Example - -//SWF: -Example - -//Image: -Example -``` - -Note, ajax requests are subject to the [same origin policy](http://en.wikipedia.org/wiki/Same_origin_policy). -If fancyBox will not be able to get content type, it will try to guess based on 'href' and will quit silently if would not succeed. -(this is different from previsous versions where 'ajax' was used as default type or an error message was displayed). - -Advanced --------- - -### Helpers - -Helpers provide a simple mechanism to extend the capabilities of fancyBox. There are two built-in helpers - 'overlay' and 'title'. -You can disable them, set custom options or enable other helpers. Examples: - -```js -//Disable title helper -$(".fancybox").fancybox({ - helpers: { - title: null - } -}); - -//Disable overlay helper -$(".fancybox").fancybox({ - helpers: { - overlay : null - } -}); - -//Change title position and overlay color -$(".fancybox").fancybox({ - helpers: { - title : { - type : 'inside' - }, - overlay : { - css : { - 'background' : 'rgba(255,255,255,0.5)' - } - } - } -}); - -//Enable thumbnail helper and set custom options -$(".fancybox").fancybox({ - helpers: { - thumbs : { - width: 50, - height: 50 - } - } -}); -``` - -### API - -Also available are event driven callback methods. The `this` keyword refers to the current or upcoming object (depends on callback method). Here is how you can change title: - -```js -$(".fancybox").fancybox({ - beforeLoad : function() { - this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : ''); - - /* - "this.element" refers to current element, so you can, for example, use the "alt" attribute of the image to store the title: - this.title = $(this.element).find('img').attr('alt'); - */ - } -}); -``` - -It`s possible to open fancyBox programmatically in various ways: - -```js -//HTML content: -$.fancybox( '

    Lorem Lipsum

    Lorem lipsum

    ', { - title : 'Custom Title' -}); - -//DOM element: -$.fancybox( $("#inline"), { - title : 'Custom Title' -}); - -//Custom object: -$.fancybox({ - href: 'example.jpg', - title : 'Custom Title' -}); - -//Array of objects: -$.fancybox([ - { - href: 'example1.jpg', - title : 'Custom Title 1' - }, - { - href: 'example2.jpg', - title : 'Custom Title 2' - } -], { - padding: 0 -}); -``` - -There are several methods that allow you to interact with and manipulate fancyBox, example: - -```js -//Close fancybox: -$.fancybox.close(); -``` - -There is a simply way to access wrapping elements using JS: - -```js -$.fancybox.wrap -$.fancybox.skin -$.fancybox.outer -$.fancybox.inner -``` - -You can override CSS to customize the look. For example, make navigation arrows always visible, -change width and move them outside of area (use this snippet after including fancybox.css): - -```css -.fancybox-nav span { - visibility: visible; -} - -.fancybox-nav { - width: 80px; -} - -.fancybox-prev { - left: -80px; -} - -.fancybox-next { - right: -80px; -} -``` - -In that case, you might want to increase space around box: - -```js -$(".fancybox").fancybox({ - margin : [20, 60, 20, 60] -}); -``` - -Bug tracker ------------ - -Have a bug? Please create an issue on GitHub at https://github.com/fancyapps/fancyBox/issues diff --git a/modules/fancybox/source/blank.gif b/modules/fancybox/source/blank.gif deleted file mode 100644 index 35d42e80..00000000 Binary files a/modules/fancybox/source/blank.gif and /dev/null differ diff --git a/modules/fancybox/source/fancybox_loading.gif b/modules/fancybox/source/fancybox_loading.gif deleted file mode 100644 index a03a40c0..00000000 Binary files a/modules/fancybox/source/fancybox_loading.gif and /dev/null differ diff --git a/modules/fancybox/source/fancybox_loading@2x.gif b/modules/fancybox/source/fancybox_loading@2x.gif deleted file mode 100644 index 9205aeb0..00000000 Binary files a/modules/fancybox/source/fancybox_loading@2x.gif and /dev/null differ diff --git a/modules/fancybox/source/fancybox_overlay.png b/modules/fancybox/source/fancybox_overlay.png deleted file mode 100644 index a4391396..00000000 Binary files a/modules/fancybox/source/fancybox_overlay.png and /dev/null differ diff --git a/modules/fancybox/source/fancybox_sprite.png b/modules/fancybox/source/fancybox_sprite.png deleted file mode 100644 index fd8d5ca5..00000000 Binary files a/modules/fancybox/source/fancybox_sprite.png and /dev/null differ diff --git a/modules/fancybox/source/fancybox_sprite@2x.png b/modules/fancybox/source/fancybox_sprite@2x.png deleted file mode 100644 index d0e4779f..00000000 Binary files a/modules/fancybox/source/fancybox_sprite@2x.png and /dev/null differ diff --git a/modules/fancybox/source/helpers/fancybox_buttons.png b/modules/fancybox/source/helpers/fancybox_buttons.png deleted file mode 100644 index 07872072..00000000 Binary files a/modules/fancybox/source/helpers/fancybox_buttons.png and /dev/null differ diff --git a/modules/fancybox/source/helpers/jquery.fancybox-buttons.css b/modules/fancybox/source/helpers/jquery.fancybox-buttons.css deleted file mode 100644 index 302d6d5b..00000000 --- a/modules/fancybox/source/helpers/jquery.fancybox-buttons.css +++ /dev/null @@ -1,97 +0,0 @@ -#fancybox-buttons { - position: fixed; - left: 0; - width: 100%; - z-index: 8050; -} - -#fancybox-buttons.top { - top: 10px; -} - -#fancybox-buttons.bottom { - bottom: 10px; -} - -#fancybox-buttons ul { - display: block; - width: 166px; - height: 30px; - margin: 0 auto; - padding: 0; - list-style: none; - border: 1px solid #111; - border-radius: 3px; - -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); - -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); - box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); - background: rgb(50,50,50); - background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51))); - background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); - background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); - background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); - background: linear-gradient(to bottom, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 ); -} - -#fancybox-buttons ul li { - float: left; - margin: 0; - padding: 0; -} - -#fancybox-buttons a { - display: block; - width: 30px; - height: 30px; - text-indent: -9999px; - background-color: transparent; - background-image: url('fancybox_buttons.png'); - background-repeat: no-repeat; - outline: none; - opacity: 0.8; -} - -#fancybox-buttons a:hover { - opacity: 1; -} - -#fancybox-buttons a.btnPrev { - background-position: 5px 0; -} - -#fancybox-buttons a.btnNext { - background-position: -33px 0; - border-right: 1px solid #3e3e3e; -} - -#fancybox-buttons a.btnPlay { - background-position: 0 -30px; -} - -#fancybox-buttons a.btnPlayOn { - background-position: -30px -30px; -} - -#fancybox-buttons a.btnToggle { - background-position: 3px -60px; - border-left: 1px solid #111; - border-right: 1px solid #3e3e3e; - width: 35px -} - -#fancybox-buttons a.btnToggleOn { - background-position: -27px -60px; -} - -#fancybox-buttons a.btnClose { - border-left: 1px solid #111; - width: 35px; - background-position: -56px 0px; -} - -#fancybox-buttons a.btnDisabled { - opacity : 0.4; - cursor: default; -} diff --git a/modules/fancybox/source/helpers/jquery.fancybox-buttons.js b/modules/fancybox/source/helpers/jquery.fancybox-buttons.js deleted file mode 100644 index 352bb5f0..00000000 --- a/modules/fancybox/source/helpers/jquery.fancybox-buttons.js +++ /dev/null @@ -1,122 +0,0 @@ - /*! - * Buttons helper for fancyBox - * version: 1.0.5 (Mon, 15 Oct 2012) - * @requires fancyBox v2.0 or later - * - * Usage: - * $(".fancybox").fancybox({ - * helpers : { - * buttons: { - * position : 'top' - * } - * } - * }); - * - */ -;(function ($) { - //Shortcut for fancyBox object - var F = $.fancybox; - - //Add helper object - F.helpers.buttons = { - defaults : { - skipSingle : false, // disables if gallery contains single image - position : 'top', // 'top' or 'bottom' - tpl : '
    ' - }, - - list : null, - buttons: null, - - beforeLoad: function (opts, obj) { - //Remove self if gallery do not have at least two items - - if (opts.skipSingle && obj.group.length < 2) { - obj.helpers.buttons = false; - obj.closeBtn = true; - - return; - } - - //Increase top margin to give space for buttons - obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30; - }, - - onPlayStart: function () { - if (this.buttons) { - this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn'); - } - }, - - onPlayEnd: function () { - if (this.buttons) { - this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn'); - } - }, - - afterShow: function (opts, obj) { - var buttons = this.buttons; - - if (!buttons) { - this.list = $(opts.tpl).addClass(opts.position).appendTo('body'); - - buttons = { - prev : this.list.find('.btnPrev').click( F.prev ), - next : this.list.find('.btnNext').click( F.next ), - play : this.list.find('.btnPlay').click( F.play ), - toggle : this.list.find('.btnToggle').click( F.toggle ), - close : this.list.find('.btnClose').click( F.close ) - } - } - - //Prev - if (obj.index > 0 || obj.loop) { - buttons.prev.removeClass('btnDisabled'); - } else { - buttons.prev.addClass('btnDisabled'); - } - - //Next / Play - if (obj.loop || obj.index < obj.group.length - 1) { - buttons.next.removeClass('btnDisabled'); - buttons.play.removeClass('btnDisabled'); - - } else { - buttons.next.addClass('btnDisabled'); - buttons.play.addClass('btnDisabled'); - } - - this.buttons = buttons; - - this.onUpdate(opts, obj); - }, - - onUpdate: function (opts, obj) { - var toggle; - - if (!this.buttons) { - return; - } - - toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn'); - - //Size toggle button - if (obj.canShrink) { - toggle.addClass('btnToggleOn'); - - } else if (!obj.canExpand) { - toggle.addClass('btnDisabled'); - } - }, - - beforeClose: function () { - if (this.list) { - this.list.remove(); - } - - this.list = null; - this.buttons = null; - } - }; - -}(jQuery)); diff --git a/modules/fancybox/source/helpers/jquery.fancybox-media.js b/modules/fancybox/source/helpers/jquery.fancybox-media.js deleted file mode 100644 index 99e62127..00000000 --- a/modules/fancybox/source/helpers/jquery.fancybox-media.js +++ /dev/null @@ -1,201 +0,0 @@ -/*! - * Media helper for fancyBox - * version: 1.0.6 (Fri, 14 Jun 2013) - * @requires fancyBox v2.0 or later - * - * Usage: - * $(".fancybox").fancybox({ - * helpers : { - * media: true - * } - * }); - * - * Set custom URL parameters: - * $(".fancybox").fancybox({ - * helpers : { - * media: { - * youtube : { - * params : { - * autoplay : 0 - * } - * } - * } - * } - * }); - * - * Or: - * $(".fancybox").fancybox({, - * helpers : { - * media: true - * }, - * youtube : { - * autoplay: 0 - * } - * }); - * - * Supports: - * - * Youtube - * http://www.youtube.com/watch?v=opj24KnzrWo - * http://www.youtube.com/embed/opj24KnzrWo - * http://youtu.be/opj24KnzrWo - * http://www.youtube-nocookie.com/embed/opj24KnzrWo - * Vimeo - * http://vimeo.com/40648169 - * http://vimeo.com/channels/staffpicks/38843628 - * http://vimeo.com/groups/surrealism/videos/36516384 - * http://player.vimeo.com/video/45074303 - * Metacafe - * http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/ - * http://www.metacafe.com/watch/7635964/ - * Dailymotion - * http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people - * Twitvid - * http://twitvid.com/QY7MD - * Twitpic - * http://twitpic.com/7p93st - * Instagram - * http://instagr.am/p/IejkuUGxQn/ - * http://instagram.com/p/IejkuUGxQn/ - * Google maps - * http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17 - * http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16 - * http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56 - */ -;(function ($) { - "use strict"; - - //Shortcut for fancyBox object - var F = $.fancybox, - format = function( url, rez, params ) { - params = params || ''; - - if ( $.type( params ) === "object" ) { - params = $.param(params, true); - } - - $.each(rez, function(key, value) { - url = url.replace( '$' + key, value || '' ); - }); - - if (params.length) { - url += ( url.indexOf('?') > 0 ? '&' : '?' ) + params; - } - - return url; - }; - - //Add helper object - F.helpers.media = { - defaults : { - youtube : { - matcher : /(youtube\.com|youtu\.be|youtube-nocookie\.com)\/(watch\?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*)).*/i, - params : { - autoplay : 1, - autohide : 1, - fs : 1, - rel : 0, - hd : 1, - wmode : 'opaque', - enablejsapi : 1, - ps: 'docs', - controls: 1 - }, - type : 'iframe', - url : '//www.youtube.com/embed/$3' - }, - vimeo : { - matcher : /(?:vimeo(?:pro)?.com)\/(?:[^\d]+)?(\d+)(?:.*)/, - params : { - autoplay : 1, - hd : 1, - show_title : 1, - show_byline : 1, - show_portrait : 0, - fullscreen : 1 - }, - type : 'iframe', - url : '//player.vimeo.com/video/$1' - }, - metacafe : { - matcher : /metacafe.com\/(?:watch|fplayer)\/([\w\-]{1,10})/, - params : { - autoPlay : 'yes' - }, - type : 'swf', - url : function( rez, params, obj ) { - obj.swf.flashVars = 'playerVars=' + $.param( params, true ); - - return '//www.metacafe.com/fplayer/' + rez[1] + '/.swf'; - } - }, - dailymotion : { - matcher : /dailymotion.com\/video\/(.*)\/?(.*)/, - params : { - additionalInfos : 0, - autoStart : 1 - }, - type : 'swf', - url : '//www.dailymotion.com/swf/video/$1' - }, - twitvid : { - matcher : /twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i, - params : { - autoplay : 0 - }, - type : 'iframe', - url : '//www.twitvid.com/embed.php?guid=$1' - }, - twitpic : { - matcher : /twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i, - type : 'image', - url : '//twitpic.com/show/full/$1/' - }, - instagram : { - matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i, - type : 'image', - url : '//$1/p/$2/media/?size=l' - }, - google_maps : { - matcher : /maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i, - type : 'iframe', - url : function( rez ) { - return '//maps.google.' + rez[1] + '/' + rez[3] + '' + rez[4] + '&output=' + (rez[4].indexOf('layer=c') > 0 ? 'svembed' : 'embed'); - } - } - }, - - beforeLoad : function(opts, obj) { - var url = obj.href || '', - type = false, - what, - item, - rez, - params; - - for (what in opts) { - if (opts.hasOwnProperty(what)) { - item = opts[ what ]; - rez = url.match( item.matcher ); - - if (rez) { - type = item.type; - params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null)); - - url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params ); - - break; - } - } - } - - if (type) { - obj.href = url; - obj.type = type; - - obj.autoHeight = false; - } - } - }; - -}(jQuery)); diff --git a/modules/fancybox/source/helpers/jquery.fancybox-thumbs.css b/modules/fancybox/source/helpers/jquery.fancybox-thumbs.css deleted file mode 100644 index 63d29436..00000000 --- a/modules/fancybox/source/helpers/jquery.fancybox-thumbs.css +++ /dev/null @@ -1,55 +0,0 @@ -#fancybox-thumbs { - position: fixed; - left: 0; - width: 100%; - overflow: hidden; - z-index: 8050; -} - -#fancybox-thumbs.bottom { - bottom: 2px; -} - -#fancybox-thumbs.top { - top: 2px; -} - -#fancybox-thumbs ul { - position: relative; - list-style: none; - margin: 0; - padding: 0; -} - -#fancybox-thumbs ul li { - float: left; - padding: 1px; - opacity: 0.5; -} - -#fancybox-thumbs ul li.active { - opacity: 0.75; - padding: 0; - border: 1px solid #fff; -} - -#fancybox-thumbs ul li:hover { - opacity: 1; -} - -#fancybox-thumbs ul li a { - display: block; - position: relative; - overflow: hidden; - border: 1px solid #222; - background: #111; - outline: none; -} - -#fancybox-thumbs ul li img { - display: block; - position: relative; - border: 0; - padding: 0; - max-width: none; -} \ No newline at end of file diff --git a/modules/fancybox/source/helpers/jquery.fancybox-thumbs.js b/modules/fancybox/source/helpers/jquery.fancybox-thumbs.js deleted file mode 100644 index 1aec7df8..00000000 --- a/modules/fancybox/source/helpers/jquery.fancybox-thumbs.js +++ /dev/null @@ -1,165 +0,0 @@ - /*! - * Thumbnail helper for fancyBox - * version: 1.0.7 (Mon, 01 Oct 2012) - * @requires fancyBox v2.0 or later - * - * Usage: - * $(".fancybox").fancybox({ - * helpers : { - * thumbs: { - * width : 50, - * height : 50 - * } - * } - * }); - * - */ -;(function ($) { - //Shortcut for fancyBox object - var F = $.fancybox; - - //Add helper object - F.helpers.thumbs = { - defaults : { - width : 50, // thumbnail width - height : 50, // thumbnail height - position : 'bottom', // 'top' or 'bottom' - source : function ( item ) { // function to obtain the URL of the thumbnail image - var href; - - if (item.element) { - href = $(item.element).find('img').attr('src'); - } - - if (!href && item.type === 'image' && item.href) { - href = item.href; - } - - return href; - } - }, - - wrap : null, - list : null, - width : 0, - - init: function (opts, obj) { - var that = this, - list, - thumbWidth = opts.width, - thumbHeight = opts.height, - thumbSource = opts.source; - - //Build list structure - list = ''; - - for (var n = 0; n < obj.group.length; n++) { - list += '
  • '; - } - - this.wrap = $('
    ').addClass(opts.position).appendTo('body'); - this.list = $('
      ' + list + '
    ').appendTo(this.wrap); - - //Load each thumbnail - $.each(obj.group, function (i) { - var el = obj.group[ i ], - href = thumbSource( el ); - - if (!href) { - return; - } - - $("").on("load", function () { - var width = this.width, - height = this.height, - widthRatio, heightRatio, parent; - - if (!that.list || !width || !height) { - return; - } - - //Calculate thumbnail width/height and center it - widthRatio = width / thumbWidth; - heightRatio = height / thumbHeight; - - parent = that.list.children().eq(i).find('a'); - - if (widthRatio >= 1 && heightRatio >= 1) { - if (widthRatio > heightRatio) { - width = Math.floor(width / heightRatio); - height = thumbHeight; - - } else { - width = thumbWidth; - height = Math.floor(height / widthRatio); - } - } - - $(this).css({ - width : width, - height : height, - top : Math.floor(thumbHeight / 2 - height / 2), - left : Math.floor(thumbWidth / 2 - width / 2) - }); - - parent.width(thumbWidth).height(thumbHeight); - - $(this).hide().appendTo(parent).fadeIn(300); - - }) - .attr('src', href) - .attr('title', el.title); - }); - - //Set initial width - this.width = this.list.children().eq(0).outerWidth(true); - - this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))); - }, - - beforeLoad: function (opts, obj) { - //Remove self if gallery do not have at least two items - if (obj.group.length < 2) { - obj.helpers.thumbs = false; - - return; - } - - //Increase bottom margin to give space for thumbs - obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15); - }, - - afterShow: function (opts, obj) { - //Check if exists and create or update list - if (this.list) { - this.onUpdate(opts, obj); - - } else { - this.init(opts, obj); - } - - //Set active element - this.list.children().removeClass('active').eq(obj.index).addClass('active'); - }, - - //Center list - onUpdate: function (opts, obj) { - if (this.list) { - this.list.stop(true).animate({ - 'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)) - }, 150); - } - }, - - beforeClose: function () { - if (this.wrap) { - this.wrap.remove(); - } - - this.wrap = null; - this.list = null; - this.width = 0; - } - } - -}(jQuery)); diff --git a/modules/fancybox/source/jquery.fancybox.css b/modules/fancybox/source/jquery.fancybox.css deleted file mode 100644 index fb2c6dd2..00000000 --- a/modules/fancybox/source/jquery.fancybox.css +++ /dev/null @@ -1,275 +0,0 @@ -/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ -.fancybox-wrap, -.fancybox-skin, -.fancybox-outer, -.fancybox-inner, -.fancybox-image, -.fancybox-wrap iframe, -.fancybox-wrap object, -.fancybox-nav, -.fancybox-nav span, -.fancybox-tmp -{ - padding: 0; - margin: 0; - border: 0; - outline: none; - vertical-align: top; -} - -.fancybox-wrap { - position: absolute; - top: 0; - left: 0; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - z-index: 8020; -} - -.fancybox-skin { - position: relative; - background: #f9f9f9; - color: #444; - text-shadow: none; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.fancybox-opened { - z-index: 8030; -} - -.fancybox-opened .fancybox-skin { - -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); - box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); -} - -.fancybox-outer, .fancybox-inner { - position: relative; -} - -.fancybox-inner { - overflow: hidden; -} - -.fancybox-type-iframe .fancybox-inner { - -webkit-overflow-scrolling: touch; -} - -.fancybox-error { - color: #444; - font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; - margin: 0; - padding: 15px; - white-space: nowrap; -} - -.fancybox-image, .fancybox-iframe { - display: block; - width: 100%; - height: 100%; -} - -.fancybox-image { - max-width: 100%; - max-height: 100%; -} - -#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { - background-image: url(fancybox_sprite.png); -} - -#fancybox-loading { - position: fixed; - top: 50%; - left: 50%; - margin-top: -22px; - margin-left: -22px; - background-position: 0 -108px; - opacity: 0.8; - cursor: pointer; - z-index: 8060; -} - -#fancybox-loading div { - width: 44px; - height: 44px; - background: url(fancybox_loading.gif) center center no-repeat; -} - -.fancybox-close { - position: absolute; - top: -18px; - right: -18px; - width: 36px; - height: 36px; - cursor: pointer; - z-index: 8040; -} - -.fancybox-nav { - position: absolute; - top: 0; - width: 40%; - height: 100%; - cursor: pointer; - text-decoration: none; - background: transparent url(blank.gif); /* helps IE */ - -webkit-tap-highlight-color: rgba(0,0,0,0); - z-index: 8040; -} - -.fancybox-prev { - left: 0; -} - -.fancybox-next { - right: 0; -} - -.fancybox-nav span { - position: absolute; - top: 50%; - width: 36px; - height: 34px; - margin-top: -18px; - cursor: pointer; - z-index: 8040; - visibility: hidden; -} - -.fancybox-prev span { - left: 10px; - background-position: 0 -36px; -} - -.fancybox-next span { - right: 10px; - background-position: 0 -72px; -} - -.fancybox-nav:hover span { - visibility: visible; -} - -.fancybox-tmp { - position: absolute; - top: -99999px; - left: -99999px; - max-width: 99999px; - max-height: 99999px; - overflow: visible !important; -} - -/* Overlay helper */ - -.fancybox-lock { - overflow: visible !important; - width: auto; -} - -.fancybox-lock body { - overflow: hidden !important; -} - -.fancybox-lock-test { - overflow-y: hidden !important; -} - -.fancybox-overlay { - position: absolute; - top: 0; - left: 0; - overflow: hidden; - display: none; - z-index: 8010; - background: url(fancybox_overlay.png); -} - -.fancybox-overlay-fixed { - position: fixed; - bottom: 0; - right: 0; -} - -.fancybox-lock .fancybox-overlay { - overflow: auto; - overflow-y: scroll; -} - -/* Title helper */ - -.fancybox-title { - visibility: hidden; - font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; - position: relative; - text-shadow: none; - z-index: 8050; -} - -.fancybox-opened .fancybox-title { - visibility: visible; -} - -.fancybox-title-float-wrap { - position: absolute; - bottom: 0; - right: 50%; - margin-bottom: -35px; - z-index: 8050; - text-align: center; -} - -.fancybox-title-float-wrap .child { - display: inline-block; - margin-right: -100%; - padding: 2px 20px; - background: transparent; /* Fallback for web browsers that doesn't support RGBa */ - background: rgba(0, 0, 0, 0.8); - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; - text-shadow: 0 1px 2px #222; - color: #FFF; - font-weight: bold; - line-height: 24px; - white-space: nowrap; -} - -.fancybox-title-outside-wrap { - position: relative; - margin-top: 10px; - color: #fff; -} - -.fancybox-title-inside-wrap { - padding-top: 10px; -} - -.fancybox-title-over-wrap { - position: absolute; - bottom: 0; - left: 0; - color: #fff; - padding: 10px; - background: #000; - background: rgba(0, 0, 0, .8); -} - -/*Retina graphics!*/ -@media only screen and (-webkit-min-device-pixel-ratio: 1.5), - only screen and (min--moz-device-pixel-ratio: 1.5), - only screen and (min-device-pixel-ratio: 1.5){ - - #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { - background-image: url(fancybox_sprite@2x.png); - background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/ - } - - #fancybox-loading div { - background-image: url(fancybox_loading@2x.gif); - background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/ - } -} \ No newline at end of file diff --git a/modules/fancybox/source/jquery.fancybox.js b/modules/fancybox/source/jquery.fancybox.js deleted file mode 100755 index cef01701..00000000 --- a/modules/fancybox/source/jquery.fancybox.js +++ /dev/null @@ -1,2018 +0,0 @@ -/*! - * fancyBox - jQuery Plugin - * version: 2.1.5 (Fri, 14 Jun 2013) - * requires jQuery v1.6 or later - * - * Examples at http://fancyapps.com/fancybox/ - * License: www.fancyapps.com/fancybox/#license - * - * Copyright 2012 Janis Skarnelis - janis@fancyapps.com - * - */ - -;(function (window, document, $, undefined) { - "use strict"; - - var H = $("html"), - W = $(window), - D = $(document), - F = $.fancybox = function () { - F.open.apply( this, arguments ); - }, - IE = navigator.userAgent.match(/msie/i), - didUpdate = null, - isTouch = document.createTouch !== undefined, - - isQuery = function(obj) { - return obj && obj.hasOwnProperty && obj instanceof $; - }, - isString = function(str) { - return str && $.type(str) === "string"; - }, - isPercentage = function(str) { - return isString(str) && str.indexOf('%') > 0; - }, - isScrollable = function(el) { - return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight))); - }, - getScalar = function(orig, dim) { - var value = parseInt(orig, 10) || 0; - - if (dim && isPercentage(orig)) { - value = F.getViewport()[ dim ] / 100 * value; - } - - return Math.ceil(value); - }, - getValue = function(value, dim) { - return getScalar(value, dim) + 'px'; - }; - - $.extend(F, { - // The current version of fancyBox - version: '2.1.5', - - defaults: { - padding : 15, - margin : 20, - - width : 800, - height : 600, - minWidth : 100, - minHeight : 100, - maxWidth : 9999, - maxHeight : 9999, - pixelRatio: 1, // Set to 2 for retina display support - - autoSize : true, - autoHeight : false, - autoWidth : false, - - autoResize : true, - autoCenter : !isTouch, - fitToView : true, - aspectRatio : false, - topRatio : 0.5, - leftRatio : 0.5, - - scrolling : 'auto', // 'auto', 'yes' or 'no' - wrapCSS : '', - - arrows : true, - closeBtn : true, - closeClick : false, - nextClick : false, - mouseWheel : true, - autoPlay : false, - playSpeed : 3000, - preload : 3, - modal : false, - loop : true, - - ajax : { - dataType : 'html', - headers : { 'X-fancyBox': true } - }, - iframe : { - scrolling : 'auto', - preload : true - }, - swf : { - wmode: 'transparent', - allowfullscreen : 'true', - allowscriptaccess : 'always' - }, - - keys : { - next : { - 13 : 'left', // enter - 34 : 'up', // page down - 39 : 'left', // right arrow - 40 : 'up' // down arrow - }, - prev : { - 8 : 'right', // backspace - 33 : 'down', // page up - 37 : 'right', // left arrow - 38 : 'down' // up arrow - }, - close : [27], // escape key - play : [32], // space - start/stop slideshow - toggle : [70] // letter "f" - toggle fullscreen - }, - - direction : { - next : 'left', - prev : 'right' - }, - - scrollOutside : true, - - // Override some properties - index : 0, - type : null, - href : null, - content : null, - title : null, - - // HTML templates - tpl: { - wrap : '
    ', - image : '', - iframe : '', - error : '

    The requested content cannot be loaded.
    Please try again later.

    ', - closeBtn : '', - next : '', - prev : '', - loading : '
    ' - }, - - // Properties for each animation type - // Opening fancyBox - openEffect : 'fade', // 'elastic', 'fade' or 'none' - openSpeed : 250, - openEasing : 'swing', - openOpacity : true, - openMethod : 'zoomIn', - - // Closing fancyBox - closeEffect : 'fade', // 'elastic', 'fade' or 'none' - closeSpeed : 250, - closeEasing : 'swing', - closeOpacity : true, - closeMethod : 'zoomOut', - - // Changing next gallery item - nextEffect : 'elastic', // 'elastic', 'fade' or 'none' - nextSpeed : 250, - nextEasing : 'swing', - nextMethod : 'changeIn', - - // Changing previous gallery item - prevEffect : 'elastic', // 'elastic', 'fade' or 'none' - prevSpeed : 250, - prevEasing : 'swing', - prevMethod : 'changeOut', - - // Enable default helpers - helpers : { - overlay : true, - title : true - }, - - // Callbacks - onCancel : $.noop, // If canceling - beforeLoad : $.noop, // Before loading - afterLoad : $.noop, // After loading - beforeShow : $.noop, // Before changing in current item - afterShow : $.noop, // After opening - beforeChange : $.noop, // Before changing gallery item - beforeClose : $.noop, // Before closing - afterClose : $.noop // After closing - }, - - //Current state - group : {}, // Selected group - opts : {}, // Group options - previous : null, // Previous element - coming : null, // Element being loaded - current : null, // Currently loaded element - isActive : false, // Is activated - isOpen : false, // Is currently open - isOpened : false, // Have been fully opened at least once - - wrap : null, - skin : null, - outer : null, - inner : null, - - player : { - timer : null, - isActive : false - }, - - // Loaders - ajaxLoad : null, - imgPreload : null, - - // Some collections - transitions : {}, - helpers : {}, - - /* - * Static methods - */ - - open: function (group, opts) { - if (!group) { - return; - } - - if (!$.isPlainObject(opts)) { - opts = {}; - } - - // Close if already active - if (false === F.close(true)) { - return; - } - - // Normalize group - if (!$.isArray(group)) { - group = isQuery(group) ? $(group).get() : [group]; - } - - // Recheck if the type of each element is `object` and set content type (image, ajax, etc) - $.each(group, function(i, element) { - var obj = {}, - href, - title, - content, - type, - rez, - hrefParts, - selector; - - if ($.type(element) === "object") { - // Check if is DOM element - if (element.nodeType) { - element = $(element); - } - - if (isQuery(element)) { - obj = { - href : element.data('fancybox-href') || element.attr('href'), - title : $('
    ').text( element.data('fancybox-title') || element.attr('title') || '' ).html(), - isDom : true, - element : element - }; - - if ($.metadata) { - $.extend(true, obj, element.metadata()); - } - - } else { - obj = element; - } - } - - href = opts.href || obj.href || (isString(element) ? element : null); - title = opts.title !== undefined ? opts.title : obj.title || ''; - - content = opts.content || obj.content; - type = content ? 'html' : (opts.type || obj.type); - - if (!type && obj.isDom) { - type = element.data('fancybox-type'); - - if (!type) { - rez = element.prop('class').match(/fancybox\.(\w+)/); - type = rez ? rez[1] : null; - } - } - - if (isString(href)) { - // Try to guess the content type - if (!type) { - if (F.isImage(href)) { - type = 'image'; - - } else if (F.isSWF(href)) { - type = 'swf'; - - } else if (href.charAt(0) === '#') { - type = 'inline'; - - } else if (isString(element)) { - type = 'html'; - content = element; - } - } - - // Split url into two pieces with source url and content selector, e.g, - // "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id" - if (type === 'ajax') { - hrefParts = href.split(/\s+/, 2); - href = hrefParts.shift(); - selector = hrefParts.shift(); - } - } - - if (!content) { - if (type === 'inline') { - if (href) { - content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7 - - } else if (obj.isDom) { - content = element; - } - - } else if (type === 'html') { - content = href; - - } else if (!type && !href && obj.isDom) { - type = 'inline'; - content = element; - } - } - - $.extend(obj, { - href : href, - type : type, - content : content, - title : title, - selector : selector - }); - - group[ i ] = obj; - }); - - // Extend the defaults - F.opts = $.extend(true, {}, F.defaults, opts); - - // All options are merged recursive except keys - if (opts.keys !== undefined) { - F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false; - } - - F.group = group; - - return F._start(F.opts.index); - }, - - // Cancel image loading or abort ajax request - cancel: function () { - var coming = F.coming; - - if (coming && false === F.trigger('onCancel')) { - return; - } - - F.hideLoading(); - - if (!coming) { - return; - } - - if (F.ajaxLoad) { - F.ajaxLoad.abort(); - } - - F.ajaxLoad = null; - - if (F.imgPreload) { - F.imgPreload.onload = F.imgPreload.onerror = null; - } - - if (coming.wrap) { - coming.wrap.stop(true, true).trigger('onReset').remove(); - } - - F.coming = null; - - // If the first item has been canceled, then clear everything - if (!F.current) { - F._afterZoomOut( coming ); - } - }, - - // Start closing animation if is open; remove immediately if opening/closing - close: function (event) { - F.cancel(); - - if (false === F.trigger('beforeClose')) { - return; - } - - F.unbindEvents(); - - if (!F.isActive) { - return; - } - - if (!F.isOpen || event === true) { - $('.fancybox-wrap').stop(true).trigger('onReset').remove(); - - F._afterZoomOut(); - - } else { - F.isOpen = F.isOpened = false; - F.isClosing = true; - - $('.fancybox-item, .fancybox-nav').remove(); - - F.wrap.stop(true, true).removeClass('fancybox-opened'); - - F.transitions[ F.current.closeMethod ](); - } - }, - - // Manage slideshow: - // $.fancybox.play(); - toggle slideshow - // $.fancybox.play( true ); - start - // $.fancybox.play( false ); - stop - play: function ( action ) { - var clear = function () { - clearTimeout(F.player.timer); - }, - set = function () { - clear(); - - if (F.current && F.player.isActive) { - F.player.timer = setTimeout(F.next, F.current.playSpeed); - } - }, - stop = function () { - clear(); - - D.unbind('.player'); - - F.player.isActive = false; - - F.trigger('onPlayEnd'); - }, - start = function () { - if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) { - F.player.isActive = true; - - D.bind({ - 'onCancel.player beforeClose.player' : stop, - 'onUpdate.player' : set, - 'beforeLoad.player' : clear - }); - - set(); - - F.trigger('onPlayStart'); - } - }; - - if (action === true || (!F.player.isActive && action !== false)) { - start(); - } else { - stop(); - } - }, - - // Navigate to next gallery item - next: function ( direction ) { - var current = F.current; - - if (current) { - if (!isString(direction)) { - direction = current.direction.next; - } - - F.jumpto(current.index + 1, direction, 'next'); - } - }, - - // Navigate to previous gallery item - prev: function ( direction ) { - var current = F.current; - - if (current) { - if (!isString(direction)) { - direction = current.direction.prev; - } - - F.jumpto(current.index - 1, direction, 'prev'); - } - }, - - // Navigate to gallery item by index - jumpto: function ( index, direction, router ) { - var current = F.current; - - if (!current) { - return; - } - - index = getScalar(index); - - F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ]; - F.router = router || 'jumpto'; - - if (current.loop) { - if (index < 0) { - index = current.group.length + (index % current.group.length); - } - - index = index % current.group.length; - } - - if (current.group[ index ] !== undefined) { - F.cancel(); - - F._start(index); - } - }, - - // Center inside viewport and toggle position type to fixed or absolute if needed - reposition: function (e, onlyAbsolute) { - var current = F.current, - wrap = current ? current.wrap : null, - pos; - - if (wrap) { - pos = F._getPosition(onlyAbsolute); - - if (e && e.type === 'scroll') { - delete pos.position; - - wrap.stop(true, true).animate(pos, 200); - - } else { - wrap.css(pos); - - current.pos = $.extend({}, current.dim, pos); - } - } - }, - - update: function (e) { - var type = (e && e.originalEvent && e.originalEvent.type), - anyway = !type || type === 'orientationchange'; - - if (anyway) { - clearTimeout(didUpdate); - - didUpdate = null; - } - - if (!F.isOpen || didUpdate) { - return; - } - - didUpdate = setTimeout(function() { - var current = F.current; - - if (!current || F.isClosing) { - return; - } - - F.wrap.removeClass('fancybox-tmp'); - - if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) { - F._setDimension(); - } - - if (!(type === 'scroll' && current.canShrink)) { - F.reposition(e); - } - - F.trigger('onUpdate'); - - didUpdate = null; - - }, (anyway && !isTouch ? 0 : 300)); - }, - - // Shrink content to fit inside viewport or restore if resized - toggle: function ( action ) { - if (F.isOpen) { - F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView; - - // Help browser to restore document dimensions - if (isTouch) { - F.wrap.removeAttr('style').addClass('fancybox-tmp'); - - F.trigger('onUpdate'); - } - - F.update(); - } - }, - - hideLoading: function () { - D.unbind('.loading'); - - $('#fancybox-loading').remove(); - }, - - showLoading: function () { - var el, viewport; - - F.hideLoading(); - - el = $(F.opts.tpl.loading).click(F.cancel).appendTo('body'); - - // If user will press the escape-button, the request will be canceled - D.bind('keydown.loading', function(e) { - if ((e.which || e.keyCode) === 27) { - e.preventDefault(); - - F.cancel(); - } - }); - - if (!F.defaults.fixed) { - viewport = F.getViewport(); - - el.css({ - position : 'absolute', - top : (viewport.h * 0.5) + viewport.y, - left : (viewport.w * 0.5) + viewport.x - }); - } - - F.trigger('onLoading'); - }, - - getViewport: function () { - var locked = (F.current && F.current.locked) || false, - rez = { - x: W.scrollLeft(), - y: W.scrollTop() - }; - - if (locked && locked.length) { - rez.w = locked[0].clientWidth; - rez.h = locked[0].clientHeight; - - } else { - // See http://bugs.jquery.com/ticket/6724 - rez.w = isTouch && window.innerWidth ? window.innerWidth : W.width(); - rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height(); - } - - return rez; - }, - - // Unbind the keyboard / clicking actions - unbindEvents: function () { - if (F.wrap && isQuery(F.wrap)) { - F.wrap.unbind('.fb'); - } - - D.unbind('.fb'); - W.unbind('.fb'); - }, - - bindEvents: function () { - var current = F.current, - keys; - - if (!current) { - return; - } - - // Changing document height on iOS devices triggers a 'resize' event, - // that can change document height... repeating infinitely - W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update); - - keys = current.keys; - - if (keys) { - D.bind('keydown.fb', function (e) { - var code = e.which || e.keyCode, - target = e.target || e.srcElement; - - // Skip esc key if loading, because showLoading will cancel preloading - if (code === 27 && F.coming) { - return false; - } - - // Ignore key combinations and key events within form elements - if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) { - $.each(keys, function(i, val) { - if (current.group.length > 1 && val[ code ] !== undefined) { - F[ i ]( val[ code ] ); - - e.preventDefault(); - return false; - } - - if ($.inArray(code, val) > -1) { - F[ i ] (); - - e.preventDefault(); - return false; - } - }); - } - }); - } - - if ($.fn.mousewheel && current.mouseWheel) { - F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) { - var target = e.target || null, - parent = $(target), - canScroll = false; - - while (parent.length) { - if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) { - break; - } - - canScroll = isScrollable( parent[0] ); - parent = $(parent).parent(); - } - - if (delta !== 0 && !canScroll) { - if (F.group.length > 1 && !current.canShrink) { - if (deltaY > 0 || deltaX > 0) { - F.prev( deltaY > 0 ? 'down' : 'left' ); - - } else if (deltaY < 0 || deltaX < 0) { - F.next( deltaY < 0 ? 'up' : 'right' ); - } - - e.preventDefault(); - } - } - }); - } - }, - - trigger: function (event, o) { - var ret, obj = o || F.coming || F.current; - - if (obj) { - if ($.isFunction( obj[event] )) { - ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1)); - } - - if (ret === false) { - return false; - } - - if (obj.helpers) { - $.each(obj.helpers, function (helper, opts) { - if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) { - F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj); - } - }); - } - } - - D.trigger(event); - }, - - isImage: function (str) { - return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i); - }, - - isSWF: function (str) { - return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i); - }, - - _start: function (index) { - var coming = {}, - obj, - href, - type, - margin, - padding; - - index = getScalar( index ); - obj = F.group[ index ] || null; - - if (!obj) { - return false; - } - - coming = $.extend(true, {}, F.opts, obj); - - // Convert margin and padding properties to array - top, right, bottom, left - margin = coming.margin; - padding = coming.padding; - - if ($.type(margin) === 'number') { - coming.margin = [margin, margin, margin, margin]; - } - - if ($.type(padding) === 'number') { - coming.padding = [padding, padding, padding, padding]; - } - - // 'modal' propery is just a shortcut - if (coming.modal) { - $.extend(true, coming, { - closeBtn : false, - closeClick : false, - nextClick : false, - arrows : false, - mouseWheel : false, - keys : null, - helpers: { - overlay : { - closeClick : false - } - } - }); - } - - // 'autoSize' property is a shortcut, too - if (coming.autoSize) { - coming.autoWidth = coming.autoHeight = true; - } - - if (coming.width === 'auto') { - coming.autoWidth = true; - } - - if (coming.height === 'auto') { - coming.autoHeight = true; - } - - /* - * Add reference to the group, so it`s possible to access from callbacks, example: - * afterLoad : function() { - * this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : ''); - * } - */ - - coming.group = F.group; - coming.index = index; - - // Give a chance for callback or helpers to update coming item (type, title, etc) - F.coming = coming; - - if (false === F.trigger('beforeLoad')) { - F.coming = null; - - return; - } - - type = coming.type; - href = coming.href; - - if (!type) { - F.coming = null; - - //If we can not determine content type then drop silently or display next/prev item if looping through gallery - if (F.current && F.router && F.router !== 'jumpto') { - F.current.index = index; - - return F[ F.router ]( F.direction ); - } - - return false; - } - - F.isActive = true; - - if (type === 'image' || type === 'swf') { - coming.autoHeight = coming.autoWidth = false; - coming.scrolling = 'visible'; - } - - if (type === 'image') { - coming.aspectRatio = true; - } - - if (type === 'iframe' && isTouch) { - coming.scrolling = 'scroll'; - } - - // Build the neccessary markup - coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' ); - - $.extend(coming, { - skin : $('.fancybox-skin', coming.wrap), - outer : $('.fancybox-outer', coming.wrap), - inner : $('.fancybox-inner', coming.wrap) - }); - - $.each(["Top", "Right", "Bottom", "Left"], function(i, v) { - coming.skin.css('padding' + v, getValue(coming.padding[ i ])); - }); - - F.trigger('onReady'); - - // Check before try to load; 'inline' and 'html' types need content, others - href - if (type === 'inline' || type === 'html') { - if (!coming.content || !coming.content.length) { - return F._error( 'content' ); - } - - } else if (!href) { - return F._error( 'href' ); - } - - if (type === 'image') { - F._loadImage(); - - } else if (type === 'ajax') { - F._loadAjax(); - - } else if (type === 'iframe') { - F._loadIframe(); - - } else { - F._afterLoad(); - } - }, - - _error: function ( type ) { - $.extend(F.coming, { - type : 'html', - autoWidth : true, - autoHeight : true, - minWidth : 0, - minHeight : 0, - scrolling : 'no', - hasError : type, - content : F.coming.tpl.error - }); - - F._afterLoad(); - }, - - _loadImage: function () { - // Reset preload image so it is later possible to check "complete" property - var img = F.imgPreload = new Image(); - - img.onload = function () { - this.onload = this.onerror = null; - - F.coming.width = this.width / F.opts.pixelRatio; - F.coming.height = this.height / F.opts.pixelRatio; - - F._afterLoad(); - }; - - img.onerror = function () { - this.onload = this.onerror = null; - - F._error( 'image' ); - }; - - img.src = F.coming.href; - - if (img.complete !== true) { - F.showLoading(); - } - }, - - _loadAjax: function () { - var coming = F.coming; - - F.showLoading(); - - F.ajaxLoad = $.ajax($.extend({}, coming.ajax, { - url: coming.href, - error: function (jqXHR, textStatus) { - if (F.coming && textStatus !== 'abort') { - F._error( 'ajax', jqXHR ); - - } else { - F.hideLoading(); - } - }, - success: function (data, textStatus) { - if (textStatus === 'success') { - coming.content = data; - - F._afterLoad(); - } - } - })); - }, - - _loadIframe: function() { - var coming = F.coming, - iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime())) - .attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling) - .attr('src', coming.href); - - // This helps IE - $(coming.wrap).bind('onReset', function () { - try { - $(this).find('iframe').hide().attr('src', '//about:blank').end().empty(); - } catch (e) {} - }); - - if (coming.iframe.preload) { - F.showLoading(); - - iframe.one('load', function() { - $(this).data('ready', 1); - - // iOS will lose scrolling if we resize - if (!isTouch) { - $(this).bind('load.fb', F.update); - } - - // Without this trick: - // - iframe won't scroll on iOS devices - // - IE7 sometimes displays empty iframe - $(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show(); - - F._afterLoad(); - }); - } - - coming.content = iframe.appendTo( coming.inner ); - - if (!coming.iframe.preload) { - F._afterLoad(); - } - }, - - _preloadImages: function() { - var group = F.group, - current = F.current, - len = group.length, - cnt = current.preload ? Math.min(current.preload, len - 1) : 0, - item, - i; - - for (i = 1; i <= cnt; i += 1) { - item = group[ (current.index + i ) % len ]; - - if (item.type === 'image' && item.href) { - new Image().src = item.href; - } - } - }, - - _afterLoad: function () { - var coming = F.coming, - previous = F.current, - placeholder = 'fancybox-placeholder', - current, - content, - type, - scrolling, - href, - embed; - - F.hideLoading(); - - if (!coming || F.isActive === false) { - return; - } - - if (false === F.trigger('afterLoad', coming, previous)) { - coming.wrap.stop(true).trigger('onReset').remove(); - - F.coming = null; - - return; - } - - if (previous) { - F.trigger('beforeChange', previous); - - previous.wrap.stop(true).removeClass('fancybox-opened') - .find('.fancybox-item, .fancybox-nav') - .remove(); - } - - F.unbindEvents(); - - current = coming; - content = coming.content; - type = coming.type; - scrolling = coming.scrolling; - - $.extend(F, { - wrap : current.wrap, - skin : current.skin, - outer : current.outer, - inner : current.inner, - current : current, - previous : previous - }); - - href = current.href; - - switch (type) { - case 'inline': - case 'ajax': - case 'html': - if (current.selector) { - content = $('
    ').html(content).find(current.selector); - - } else if (isQuery(content)) { - if (!content.data(placeholder)) { - content.data(placeholder, $('
    ').insertAfter( content ).hide() ); - } - - content = content.show().detach(); - - current.wrap.bind('onReset', function () { - if ($(this).find(content).length) { - content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false); - } - }); - } - break; - - case 'image': - content = current.tpl.image.replace(/\{href\}/g, href); - break; - - case 'swf': - content = ''; - embed = ''; - - $.each(current.swf, function(name, val) { - content += ''; - embed += ' ' + name + '="' + val + '"'; - }); - - content += ''; - break; - } - - if (!(isQuery(content) && content.parent().is(current.inner))) { - current.inner.append( content ); - } - - // Give a chance for helpers or callbacks to update elements - F.trigger('beforeShow'); - - // Set scrolling before calculating dimensions - current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling)); - - // Set initial dimensions and start position - F._setDimension(); - - F.reposition(); - - F.isOpen = false; - F.coming = null; - - F.bindEvents(); - - if (!F.isOpened) { - $('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove(); - - } else if (previous.prevMethod) { - F.transitions[ previous.prevMethod ](); - } - - F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ](); - - F._preloadImages(); - }, - - _setDimension: function () { - var viewport = F.getViewport(), - steps = 0, - canShrink = false, - canExpand = false, - wrap = F.wrap, - skin = F.skin, - inner = F.inner, - current = F.current, - width = current.width, - height = current.height, - minWidth = current.minWidth, - minHeight = current.minHeight, - maxWidth = current.maxWidth, - maxHeight = current.maxHeight, - scrolling = current.scrolling, - scrollOut = current.scrollOutside ? current.scrollbarWidth : 0, - margin = current.margin, - wMargin = getScalar(margin[1] + margin[3]), - hMargin = getScalar(margin[0] + margin[2]), - wPadding, - hPadding, - wSpace, - hSpace, - origWidth, - origHeight, - origMaxWidth, - origMaxHeight, - ratio, - width_, - height_, - maxWidth_, - maxHeight_, - iframe, - body; - - // Reset dimensions so we could re-check actual size - wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp'); - - wPadding = getScalar(skin.outerWidth(true) - skin.width()); - hPadding = getScalar(skin.outerHeight(true) - skin.height()); - - // Any space between content and viewport (margin, padding, border, title) - wSpace = wMargin + wPadding; - hSpace = hMargin + hPadding; - - origWidth = isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100 : width; - origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height; - - if (current.type === 'iframe') { - iframe = current.content; - - if (current.autoHeight && iframe && iframe.data('ready') === 1) { - try { - if (iframe[0].contentWindow.document.location) { - inner.width( origWidth ).height(9999); - - body = iframe.contents().find('body'); - - if (scrollOut) { - body.css('overflow-x', 'hidden'); - } - - origHeight = body.outerHeight(true); - } - - } catch (e) {} - } - - } else if (current.autoWidth || current.autoHeight) { - inner.addClass( 'fancybox-tmp' ); - - // Set width or height in case we need to calculate only one dimension - if (!current.autoWidth) { - inner.width( origWidth ); - } - - if (!current.autoHeight) { - inner.height( origHeight ); - } - - if (current.autoWidth) { - origWidth = inner.width(); - } - - if (current.autoHeight) { - origHeight = inner.height(); - } - - inner.removeClass( 'fancybox-tmp' ); - } - - width = getScalar( origWidth ); - height = getScalar( origHeight ); - - ratio = origWidth / origHeight; - - // Calculations for the content - minWidth = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth); - maxWidth = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth); - - minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight); - maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight); - - // These will be used to determine if wrap can fit in the viewport - origMaxWidth = maxWidth; - origMaxHeight = maxHeight; - - if (current.fitToView) { - maxWidth = Math.min(viewport.w - wSpace, maxWidth); - maxHeight = Math.min(viewport.h - hSpace, maxHeight); - } - - maxWidth_ = viewport.w - wMargin; - maxHeight_ = viewport.h - hMargin; - - if (current.aspectRatio) { - if (width > maxWidth) { - width = maxWidth; - height = getScalar(width / ratio); - } - - if (height > maxHeight) { - height = maxHeight; - width = getScalar(height * ratio); - } - - if (width < minWidth) { - width = minWidth; - height = getScalar(width / ratio); - } - - if (height < minHeight) { - height = minHeight; - width = getScalar(height * ratio); - } - - } else { - width = Math.max(minWidth, Math.min(width, maxWidth)); - - if (current.autoHeight && current.type !== 'iframe') { - inner.width( width ); - - height = inner.height(); - } - - height = Math.max(minHeight, Math.min(height, maxHeight)); - } - - // Try to fit inside viewport (including the title) - if (current.fitToView) { - inner.width( width ).height( height ); - - wrap.width( width + wPadding ); - - // Real wrap dimensions - width_ = wrap.width(); - height_ = wrap.height(); - - if (current.aspectRatio) { - while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) { - if (steps++ > 19) { - break; - } - - height = Math.max(minHeight, Math.min(maxHeight, height - 10)); - width = getScalar(height * ratio); - - if (width < minWidth) { - width = minWidth; - height = getScalar(width / ratio); - } - - if (width > maxWidth) { - width = maxWidth; - height = getScalar(width / ratio); - } - - inner.width( width ).height( height ); - - wrap.width( width + wPadding ); - - width_ = wrap.width(); - height_ = wrap.height(); - } - - } else { - width = Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_))); - height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_))); - } - } - - if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) { - width += scrollOut; - } - - inner.width( width ).height( height ); - - wrap.width( width + wPadding ); - - width_ = wrap.width(); - height_ = wrap.height(); - - canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight; - canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight)); - - $.extend(current, { - dim : { - width : getValue( width_ ), - height : getValue( height_ ) - }, - origWidth : origWidth, - origHeight : origHeight, - canShrink : canShrink, - canExpand : canExpand, - wPadding : wPadding, - hPadding : hPadding, - wrapSpace : height_ - skin.outerHeight(true), - skinSpace : skin.height() - height - }); - - if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) { - inner.height('auto'); - } - }, - - _getPosition: function (onlyAbsolute) { - var current = F.current, - viewport = F.getViewport(), - margin = current.margin, - width = F.wrap.width() + margin[1] + margin[3], - height = F.wrap.height() + margin[0] + margin[2], - rez = { - position: 'absolute', - top : margin[0], - left : margin[3] - }; - - if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) { - rez.position = 'fixed'; - - } else if (!current.locked) { - rez.top += viewport.y; - rez.left += viewport.x; - } - - rez.top = getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio))); - rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio))); - - return rez; - }, - - _afterZoomIn: function () { - var current = F.current; - - if (!current) { - return; - } - - F.isOpen = F.isOpened = true; - - F.wrap.css('overflow', 'visible').addClass('fancybox-opened'); - - F.update(); - - // Assign a click event - if ( current.closeClick || (current.nextClick && F.group.length > 1) ) { - F.inner.css('cursor', 'pointer').bind('click.fb', function(e) { - if (!$(e.target).is('a') && !$(e.target).parent().is('a')) { - e.preventDefault(); - - F[ current.closeClick ? 'close' : 'next' ](); - } - }); - } - - // Create a close button - if (current.closeBtn) { - $(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) { - e.preventDefault(); - - F.close(); - }); - } - - // Create navigation arrows - if (current.arrows && F.group.length > 1) { - if (current.loop || current.index > 0) { - $(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev); - } - - if (current.loop || current.index < F.group.length - 1) { - $(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next); - } - } - - F.trigger('afterShow'); - - // Stop the slideshow if this is the last item - if (!current.loop && current.index === current.group.length - 1) { - - F.play( false ); - - } else if (F.opts.autoPlay && !F.player.isActive) { - F.opts.autoPlay = false; - - F.play(true); - } - }, - - _afterZoomOut: function ( obj ) { - obj = obj || F.current; - - $('.fancybox-wrap').trigger('onReset').remove(); - - $.extend(F, { - group : {}, - opts : {}, - router : false, - current : null, - isActive : false, - isOpened : false, - isOpen : false, - isClosing : false, - wrap : null, - skin : null, - outer : null, - inner : null - }); - - F.trigger('afterClose', obj); - } - }); - - /* - * Default transitions - */ - - F.transitions = { - getOrigPosition: function () { - var current = F.current, - element = current.element, - orig = current.orig, - pos = {}, - width = 50, - height = 50, - hPadding = current.hPadding, - wPadding = current.wPadding, - viewport = F.getViewport(); - - if (!orig && current.isDom && element.is(':visible')) { - orig = element.find('img:first'); - - if (!orig.length) { - orig = element; - } - } - - if (isQuery(orig)) { - pos = orig.offset(); - - if (orig.is('img')) { - width = orig.outerWidth(); - height = orig.outerHeight(); - } - - } else { - pos.top = viewport.y + (viewport.h - height) * current.topRatio; - pos.left = viewport.x + (viewport.w - width) * current.leftRatio; - } - - if (F.wrap.css('position') === 'fixed' || current.locked) { - pos.top -= viewport.y; - pos.left -= viewport.x; - } - - pos = { - top : getValue(pos.top - hPadding * current.topRatio), - left : getValue(pos.left - wPadding * current.leftRatio), - width : getValue(width + wPadding), - height : getValue(height + hPadding) - }; - - return pos; - }, - - step: function (now, fx) { - var ratio, - padding, - value, - prop = fx.prop, - current = F.current, - wrapSpace = current.wrapSpace, - skinSpace = current.skinSpace; - - if (prop === 'width' || prop === 'height') { - ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start); - - if (F.isClosing) { - ratio = 1 - ratio; - } - - padding = prop === 'width' ? current.wPadding : current.hPadding; - value = now - padding; - - F.skin[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) ) ); - F.inner[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) ); - } - }, - - zoomIn: function () { - var current = F.current, - startPos = current.pos, - effect = current.openEffect, - elastic = effect === 'elastic', - endPos = $.extend({opacity : 1}, startPos); - - // Remove "position" property that breaks older IE - delete endPos.position; - - if (elastic) { - startPos = this.getOrigPosition(); - - if (current.openOpacity) { - startPos.opacity = 0.1; - } - - } else if (effect === 'fade') { - startPos.opacity = 0.1; - } - - F.wrap.css(startPos).animate(endPos, { - duration : effect === 'none' ? 0 : current.openSpeed, - easing : current.openEasing, - step : elastic ? this.step : null, - complete : F._afterZoomIn - }); - }, - - zoomOut: function () { - var current = F.current, - effect = current.closeEffect, - elastic = effect === 'elastic', - endPos = {opacity : 0.1}; - - if (elastic) { - endPos = this.getOrigPosition(); - - if (current.closeOpacity) { - endPos.opacity = 0.1; - } - } - - F.wrap.animate(endPos, { - duration : effect === 'none' ? 0 : current.closeSpeed, - easing : current.closeEasing, - step : elastic ? this.step : null, - complete : F._afterZoomOut - }); - }, - - changeIn: function () { - var current = F.current, - effect = current.nextEffect, - startPos = current.pos, - endPos = { opacity : 1 }, - direction = F.direction, - distance = 200, - field; - - startPos.opacity = 0.1; - - if (effect === 'elastic') { - field = direction === 'down' || direction === 'up' ? 'top' : 'left'; - - if (direction === 'down' || direction === 'right') { - startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance); - endPos[ field ] = '+=' + distance + 'px'; - - } else { - startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance); - endPos[ field ] = '-=' + distance + 'px'; - } - } - - // Workaround for http://bugs.jquery.com/ticket/12273 - if (effect === 'none') { - F._afterZoomIn(); - - } else { - F.wrap.css(startPos).animate(endPos, { - duration : current.nextSpeed, - easing : current.nextEasing, - complete : F._afterZoomIn - }); - } - }, - - changeOut: function () { - var previous = F.previous, - effect = previous.prevEffect, - endPos = { opacity : 0.1 }, - direction = F.direction, - distance = 200; - - if (effect === 'elastic') { - endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px'; - } - - previous.wrap.animate(endPos, { - duration : effect === 'none' ? 0 : previous.prevSpeed, - easing : previous.prevEasing, - complete : function () { - $(this).trigger('onReset').remove(); - } - }); - } - }; - - /* - * Overlay helper - */ - - F.helpers.overlay = { - defaults : { - closeClick : true, // if true, fancyBox will be closed when user clicks on the overlay - speedOut : 200, // duration of fadeOut animation - showEarly : true, // indicates if should be opened immediately or wait until the content is ready - css : {}, // custom CSS properties - locked : !isTouch, // if true, the content will be locked into overlay - fixed : true // if false, the overlay CSS position property will not be set to "fixed" - }, - - overlay : null, // current handle - fixed : false, // indicates if the overlay has position "fixed" - el : $('html'), // element that contains "the lock" - - // Public methods - create : function(opts) { - var parent; - - opts = $.extend({}, this.defaults, opts); - - if (this.overlay) { - this.close(); - } - - parent = F.coming ? F.coming.parent : opts.parent; - - this.overlay = $('
    ').appendTo( parent && parent.length ? parent : 'body' ); - this.fixed = false; - - if (opts.fixed && F.defaults.fixed) { - this.overlay.addClass('fancybox-overlay-fixed'); - - this.fixed = true; - } - }, - - open : function(opts) { - var that = this; - - opts = $.extend({}, this.defaults, opts); - - if (this.overlay) { - this.overlay.unbind('.overlay').width('auto').height('auto'); - - } else { - this.create(opts); - } - - if (!this.fixed) { - W.bind('resize.overlay', $.proxy( this.update, this) ); - - this.update(); - } - - if (opts.closeClick) { - this.overlay.bind('click.overlay', function(e) { - if ($(e.target).hasClass('fancybox-overlay')) { - if (F.isActive) { - F.close(); - } else { - that.close(); - } - - return false; - } - }); - } - - this.overlay.css( opts.css ).show(); - }, - - close : function() { - W.unbind('resize.overlay'); - - if (this.el.hasClass('fancybox-lock')) { - $('.fancybox-margin').removeClass('fancybox-margin'); - - this.el.removeClass('fancybox-lock'); - - W.scrollTop( this.scrollV ).scrollLeft( this.scrollH ); - } - - $('.fancybox-overlay').remove().hide(); - - $.extend(this, { - overlay : null, - fixed : false - }); - }, - - // Private, callbacks - - update : function () { - var width = '100%', offsetWidth; - - // Reset width/height so it will not mess - this.overlay.width(width).height('100%'); - - // jQuery does not return reliable result for IE - if (IE) { - offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth); - - if (D.width() > offsetWidth) { - width = D.width(); - } - - } else if (D.width() > W.width()) { - width = D.width(); - } - - this.overlay.width(width).height(D.height()); - }, - - // This is where we can manipulate DOM, because later it would cause iframes to reload - onReady : function (opts, obj) { - var overlay = this.overlay; - - $('.fancybox-overlay').stop(true, true); - - if (!overlay) { - this.create(opts); - } - - if (opts.locked && this.fixed && obj.fixed) { - obj.locked = this.overlay.append( obj.wrap ); - obj.fixed = false; - } - - if (opts.showEarly === true) { - this.beforeShow.apply(this, arguments); - } - }, - - beforeShow : function(opts, obj) { - if (obj.locked && !this.el.hasClass('fancybox-lock')) { - if (this.fixPosition !== false) { - $('*:not(object)').filter(function(){ - return ($(this).css('position') === 'fixed' && !$(this).hasClass("fancybox-overlay") && !$(this).hasClass("fancybox-wrap") ); - }).addClass('fancybox-margin'); - } - - this.el.addClass('fancybox-margin'); - - this.scrollV = W.scrollTop(); - this.scrollH = W.scrollLeft(); - - this.el.addClass('fancybox-lock'); - - W.scrollTop( this.scrollV ).scrollLeft( this.scrollH ); - } - - this.open(opts); - }, - - onUpdate : function() { - if (!this.fixed) { - this.update(); - } - }, - - afterClose: function (opts) { - // Remove overlay if exists and fancyBox is not opening - // (e.g., it is not being open using afterClose callback) - if (this.overlay && !F.coming) { - this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this )); - } - } - }; - - /* - * Title helper - */ - - F.helpers.title = { - defaults : { - type : 'float', // 'float', 'inside', 'outside' or 'over', - position : 'bottom' // 'top' or 'bottom' - }, - - beforeShow: function (opts) { - var current = F.current, - text = current.title, - type = opts.type, - title, - target; - - if ($.isFunction(text)) { - text = text.call(current.element, current); - } - - if (!isString(text) || $.trim(text) === '') { - return; - } - - title = $('
    ' + text + '
    '); - - switch (type) { - case 'inside': - target = F.skin; - break; - - case 'outside': - target = F.wrap; - break; - - case 'over': - target = F.inner; - break; - - default: // 'float' - target = F.skin; - - title.appendTo('body'); - - if (IE) { - title.width( title.width() ); - } - - title.wrapInner(''); - - //Increase bottom margin so this title will also fit into viewport - F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) ); - break; - } - - title[ (opts.position === 'top' ? 'prependTo' : 'appendTo') ](target); - } - }; - - // jQuery plugin initialization - $.fn.fancybox = function (options) { - var index, - that = $(this), - selector = this.selector || '', - run = function(e) { - var what = $(this).blur(), idx = index, relType, relVal; - - if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) { - relType = options.groupAttr || 'data-fancybox-group'; - relVal = what.attr(relType); - - if (!relVal) { - relType = 'rel'; - relVal = what.get(0)[ relType ]; - } - - if (relVal && relVal !== '' && relVal !== 'nofollow') { - what = selector.length ? $(selector) : that; - what = what.filter('[' + relType + '="' + relVal + '"]'); - idx = what.index(this); - } - - options.index = idx; - - // Stop an event from bubbling if everything is fine - if (F.open(what, options) !== false) { - e.preventDefault(); - } - } - }; - - options = options || {}; - index = options.index || 0; - - if (!selector || options.live === false) { - that.unbind('click.fb-start').bind('click.fb-start', run); - - } else { - D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run); - } - - this.filter('[data-fancybox-start=1]').trigger('click'); - - return this; - }; - - // Tests that need a body at doc ready - D.ready(function() { - var w1, w2; - - if ( $.scrollbarWidth === undefined ) { - // http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth - $.scrollbarWidth = function() { - var parent = $('
    ').appendTo('body'), - child = parent.children(), - width = child.innerWidth() - child.height( 99 ).innerWidth(); - - parent.remove(); - - return width; - }; - } - - if ( $.support.fixedPosition === undefined ) { - $.support.fixedPosition = (function() { - var elem = $('
    ').appendTo('body'), - fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 ); - - elem.remove(); - - return fixed; - }()); - } - - $.extend(F.defaults, { - scrollbarWidth : $.scrollbarWidth(), - fixed : $.support.fixedPosition, - parent : $('body') - }); - - //Get real width of page scroll-bar - w1 = $(window).width(); - - H.addClass('fancybox-lock-test'); - - w2 = $(window).width(); - - H.removeClass('fancybox-lock-test'); - - $("").appendTo("head"); - }); - -}(window, document, jQuery)); diff --git a/modules/fancybox/source/jquery.fancybox.pack.js b/modules/fancybox/source/jquery.fancybox.pack.js deleted file mode 100755 index 2db12808..00000000 --- a/modules/fancybox/source/jquery.fancybox.pack.js +++ /dev/null @@ -1,46 +0,0 @@ -/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ -(function(s,H,f,w){var K=f("html"),q=f(s),p=f(H),b=f.fancybox=function(){b.open.apply(this,arguments)},J=navigator.userAgent.match(/msie/i),C=null,t=H.createTouch!==w,u=function(a){return a&&a.hasOwnProperty&&a instanceof f},r=function(a){return a&&"string"===f.type(a)},F=function(a){return r(a)&&0
    ',image:'',iframe:'",error:'

    The requested content cannot be loaded.
    Please try again later.

    ',closeBtn:'',next:'',prev:''},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0, -openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1, -isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=u(a)?f(a).get():[a]),f.each(a,function(e,c){var l={},g,h,k,n,m;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),u(c)?(l={href:c.data("fancybox-href")||c.attr("href"),title:f("
    ").text(c.data("fancybox-title")||c.attr("title")).html(),isDom:!0,element:c}, -f.metadata&&f.extend(!0,l,c.metadata())):l=c);g=d.href||l.href||(r(c)?c:null);h=d.title!==w?d.title:l.title||"";n=(k=d.content||l.content)?"html":d.type||l.type;!n&&l.isDom&&(n=c.data("fancybox-type"),n||(n=(n=c.prop("class").match(/fancybox\.(\w+)/))?n[1]:null));r(g)&&(n||(b.isImage(g)?n="image":b.isSWF(g)?n="swf":"#"===g.charAt(0)?n="inline":r(c)&&(n="html",k=c)),"ajax"===n&&(m=g.split(/\s+/,2),g=m.shift(),m=m.shift()));k||("inline"===n?g?k=f(r(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):l.isDom&&(k=c): -"html"===n?k=g:n||g||!l.isDom||(n="inline",k=c));f.extend(l,{href:g,type:n,content:k,title:h,selector:m});a[e]=l}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==w&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1===b.trigger("onCancel")||(b.hideLoading(),a&&(b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(), -b.coming=null,b.current||b._afterZoomOut(a)))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(b.isOpen&&!0!==a?(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]()):(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&& -(b.player.timer=setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};!0===a||!b.player.isActive&&!1!==a?b.current&&(b.current.loop||b.current.index=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==w&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,l;c&&(l=b._getPosition(d),a&&"scroll"===a.type?(delete l.position,c.stop(!0,!0).animate(l,200)):(c.css(l),e.pos=f.extend({},e.dim,l)))}, -update:function(a){var d=a&&a.originalEvent&&a.originalEvent.type,e=!d||"orientationchange"===d;e&&(clearTimeout(C),C=null);b.isOpen&&!C&&(C=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),C=null)},e&&!t?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,t&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"), -b.trigger("onUpdate")),b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('
    ').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){27===(a.which||a.keyCode)&&(a.preventDefault(),b.cancel())});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}));b.trigger("onLoading")},getViewport:function(){var a=b.current&& -b.current.locked||!1,d={x:q.scrollLeft(),y:q.scrollTop()};a&&a.length?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=t&&s.innerWidth?s.innerWidth:q.width(),d.h=t&&s.innerHeight?s.innerHeight:q.height());return d},unbindEvents:function(){b.wrap&&u(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");q.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(q.bind("orientationchange.fb"+(t?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c= -e.which||e.keyCode,l=e.target||e.srcElement;if(27===c&&b.coming)return!1;e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||l&&(l.type||f(l).is("[contenteditable]"))||f.each(d,function(d,l){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();0!==c&&!k&&1g||0>l)&&b.next(0>g?"up":"right"),d.preventDefault())}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&& -b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0,{},b.helpers[d].defaults,e),c)})}p.trigger(a)},isImage:function(a){return r(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return r(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=m(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c, -c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"=== -c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio=!0);"iframe"===c&&t&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(t?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,x(d.padding[a]))});b.trigger("onReady"); -if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href");"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width= -this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload=this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming, -d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",t?"auto":a.iframe.scrolling).attr("src",a.href);f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);t||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload|| -b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload,e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,l,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove()); -b.unbindEvents();e=a.content;c=a.type;l=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("
    ").html(e).find(a.selector):u(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('
    ').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder", -!1)}));break;case "image":e=a.tpl.image.replace(/\{href\}/g,g);break;case "swf":e='',h="",f.each(a.swf,function(a,b){e+='';h+=" "+a+'="'+b+'"'}),e+='"}u(e)&&e.parent().is(a.inner)||a.inner.append(e);b.trigger("beforeShow"); -a.inner.css("overflow","yes"===l?"scroll":"no"===l?"hidden":l);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(!b.isOpened)f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();else if(d.prevMethod)b.transitions[d.prevMethod]();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,l=b.skin,g=b.inner,h=b.current,c=h.width,k=h.height,n=h.minWidth,v=h.minHeight,p=h.maxWidth, -q=h.maxHeight,t=h.scrolling,r=h.scrollOutside?h.scrollbarWidth:0,y=h.margin,z=m(y[1]+y[3]),s=m(y[0]+y[2]),w,A,u,D,B,G,C,E,I;e.add(l).add(g).width("auto").height("auto").removeClass("fancybox-tmp");y=m(l.outerWidth(!0)-l.width());w=m(l.outerHeight(!0)-l.height());A=z+y;u=s+w;D=F(c)?(a.w-A)*m(c)/100:c;B=F(k)?(a.h-u)*m(k)/100:k;if("iframe"===h.type){if(I=h.content,h.autoHeight&&1===I.data("ready"))try{I[0].contentWindow.document.location&&(g.width(D).height(9999),G=I.contents().find("body"),r&&G.css("overflow-x", -"hidden"),B=G.outerHeight(!0))}catch(H){}}else if(h.autoWidth||h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(D),h.autoHeight||g.height(B),h.autoWidth&&(D=g.width()),h.autoHeight&&(B=g.height()),g.removeClass("fancybox-tmp");c=m(D);k=m(B);E=D/B;n=m(F(n)?m(n,"w")-A:n);p=m(F(p)?m(p,"w")-A:p);v=m(F(v)?m(v,"h")-u:v);q=m(F(q)?m(q,"h")-u:q);G=p;C=q;h.fitToView&&(p=Math.min(a.w-A,p),q=Math.min(a.h-u,q));A=a.w-z;s=a.h-s;h.aspectRatio?(c>p&&(c=p,k=m(c/E)),k>q&&(k=q,c=m(k*E)),cA||z>s)&&c>n&&k>v&&!(19p&&(c=p,k=m(c/E)),g.width(c).height(k),e.width(c+y),a=e.width(),z=e.height();else c=Math.max(n,Math.min(c,c-(a-A))),k=Math.max(v,Math.min(k,k-(z-s)));r&&"auto"===t&&kA||z>s)&&c>n&&k>v;c=h.aspectRatio?cv&&k
    ').appendTo(d&&d.lenth?d:"body");this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(q.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay", -function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive?b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){q.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),this.el.removeClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%"); -J?(b=Math.max(H.documentElement.offsetWidth,H.body.offsetWidth),p.width()>b&&(a=p.width())):p.width()>q.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&this.fixed&&b.fixed&&(b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){b.locked&&!this.el.hasClass("fancybox-lock")&&(!1!==this.fixPosition&&f("*").filter(function(){return"fixed"=== -f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin"),this.scrollV=q.scrollTop(),this.scrollH=q.scrollLeft(),this.el.addClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float", -position:"bottom"},beforeShow:function(a){var d=b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(r(e)&&""!==f.trim(e)){d=f('
    '+e+"
    ");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),J&&d.width(d.width()),d.wrapInner(''),b.current.margin[2]+=Math.abs(m(d.css("margin-bottom")))}d["top"===a.position?"prependTo": -"appendTo"](c)}}};f.fn.fancybox=function(a){var d,e=f(this),c=this.selector||"",l=function(g){var h=f(this).blur(),k=d,l,m;g.ctrlKey||g.altKey||g.shiftKey||g.metaKey||h.is(".fancybox-wrap")||(l=a.groupAttr||"data-fancybox-group",m=h.attr(l),m||(l="rel",m=h.get(0)[l]),m&&""!==m&&"nofollow"!==m&&(h=c.length?f(c):e,h=h.filter("["+l+'="'+m+'"]'),k=h.index(this)),a.index=k,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;c&&!1!==a.live?p.undelegate(c,"click.fb-start").delegate(c+":not('.fancybox-item, .fancybox-nav')", -"click.fb-start",l):e.unbind("click.fb-start").bind("click.fb-start",l);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===w&&(f.scrollbarWidth=function(){var a=f('
    ').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});f.support.fixedPosition===w&&(f.support.fixedPosition=function(){var a=f('
    ').appendTo("body"), -b=20===a[0].offsetTop||15===a[0].offsetTop;a.remove();return b}());f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(s).width();K.addClass("fancybox-lock-test");d=f(s).width();K.removeClass("fancybox-lock-test");f("").appendTo("head")})})(window,document,jQuery); \ No newline at end of file diff --git a/modules/jquery/.bower.json b/modules/jquery/.bower.json deleted file mode 100644 index 69272f92..00000000 --- a/modules/jquery/.bower.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "jquery", - "main": "dist/jquery.js", - "license": "MIT", - "ignore": [ - "package.json" - ], - "keywords": [ - "jquery", - "javascript", - "browser", - "library" - ], - "homepage": "https://github.com/jquery/jquery-dist", - "version": "3.3.1", - "_release": "3.3.1", - "_resolution": { - "type": "version", - "tag": "3.3.1", - "commit": "9e8ec3d10fad04748176144f108d7355662ae75e" - }, - "_source": "https://github.com/jquery/jquery-dist.git", - "_target": "3.3.1", - "_originalSource": "jquery" -} \ No newline at end of file diff --git a/modules/jquery/AUTHORS.txt b/modules/jquery/AUTHORS.txt deleted file mode 100644 index 4bb5da15..00000000 --- a/modules/jquery/AUTHORS.txt +++ /dev/null @@ -1,313 +0,0 @@ -Authors ordered by first contribution. - -John Resig -Gilles van den Hoven -Michael Geary -Stefan Petre -Yehuda Katz -Corey Jewett -Klaus Hartl -Franck Marcia -Jörn Zaefferer -Paul Bakaus -Brandon Aaron -Mike Alsup -Dave Methvin -Ed Engelhardt -Sean Catchpole -Paul Mclanahan -David Serduke -Richard D. Worth -Scott González -Ariel Flesler -Jon Evans -TJ Holowaychuk -Michael Bensoussan -Robert Katić -Louis-Rémi Babé -Earle Castledine -Damian Janowski -Rich Dougherty -Kim Dalsgaard -Andrea Giammarchi -Mark Gibson -Karl Swedberg -Justin Meyer -Ben Alman -James Padolsey -David Petersen -Batiste Bieler -Alexander Farkas -Rick Waldron -Filipe Fortes -Neeraj Singh -Paul Irish -Iraê Carvalho -Matt Curry -Michael Monteleone -Noah Sloan -Tom Viner -Douglas Neiner -Adam J. Sontag -Dave Reed -Ralph Whitbeck -Carl Fürstenberg -Jacob Wright -J. Ryan Stinnett -unknown -temp01 -Heungsub Lee -Colin Snover -Ryan W Tenney -Pinhook -Ron Otten -Jephte Clain -Anton Matzneller -Alex Sexton -Dan Heberden -Henri Wiechers -Russell Holbrook -Julian Aubourg -Gianni Alessandro Chiappetta -Scott Jehl -James Burke -Jonas Pfenniger -Xavi Ramirez -Jared Grippe -Sylvester Keil -Brandon Sterne -Mathias Bynens -Timmy Willison <4timmywil@gmail.com> -Corey Frang -Digitalxero -Anton Kovalyov -David Murdoch -Josh Varner -Charles McNulty -Jordan Boesch -Jess Thrysoee -Michael Murray -Lee Carpenter -Alexis Abril -Rob Morgan -John Firebaugh -Sam Bisbee -Gilmore Davidson -Brian Brennan -Xavier Montillet -Daniel Pihlstrom -Sahab Yazdani -avaly -Scott Hughes -Mike Sherov -Greg Hazel -Schalk Neethling -Denis Knauf -Timo Tijhof -Steen Nielsen -Anton Ryzhov -Shi Chuan -Berker Peksag -Toby Brain -Matt Mueller -Justin -Daniel Herman -Oleg Gaidarenko -Richard Gibson -Rafaël Blais Masson -cmc3cn <59194618@qq.com> -Joe Presbrey -Sindre Sorhus -Arne de Bree -Vladislav Zarakovsky -Andrew E Monat -Oskari -Joao Henrique de Andrade Bruni -tsinha -Matt Farmer -Trey Hunner -Jason Moon -Jeffery To -Kris Borchers -Vladimir Zhuravlev -Jacob Thornton -Chad Killingsworth -Nowres Rafid -David Benjamin -Uri Gilad -Chris Faulkner -Elijah Manor -Daniel Chatfield -Nikita Govorov -Wesley Walser -Mike Pennisi -Markus Staab -Dave Riddle -Callum Macrae -Benjamin Truyman -James Huston -Erick Ruiz de Chávez -David Bonner -Akintayo Akinwunmi -MORGAN -Ismail Khair -Carl Danley -Mike Petrovich -Greg Lavallee -Daniel Gálvez -Sai Lung Wong -Tom H Fuertes -Roland Eckl -Jay Merrifield -Allen J Schmidt Jr -Jonathan Sampson -Marcel Greter -Matthias Jäggli -David Fox -Yiming He -Devin Cooper -Paul Ramos -Rod Vagg -Bennett Sorbo -Sebastian Burkhard -Zachary Adam Kaplan -nanto_vi -nanto -Danil Somsikov -Ryunosuke SATO -Jean Boussier -Adam Coulombe -Andrew Plummer -Mark Raddatz -Isaac Z. Schlueter -Karl Sieburg -Pascal Borreli -Nguyen Phuc Lam -Dmitry Gusev -Michał Gołębiowski-Owczarek -Li Xudong -Steven Benner -Tom H Fuertes -Renato Oliveira dos Santos -ros3cin -Jason Bedard -Kyle Robinson Young -Chris Talkington -Eddie Monge -Terry Jones -Jason Merino -Jeremy Dunck -Chris Price -Guy Bedford -Amey Sakhadeo -Mike Sidorov -Anthony Ryan -Dominik D. Geyer -George Kats -Lihan Li -Ronny Springer -Chris Antaki -Marian Sollmann -njhamann -Ilya Kantor -David Hong -John Paul -Jakob Stoeck -Christopher Jones -Forbes Lindesay -S. Andrew Sheppard -Leonardo Balter -Roman Reiß -Benjy Cui -Rodrigo Rosenfeld Rosas -John Hoven -Philip Jägenstedt -Christian Kosmowski -Liang Peng -TJ VanToll -Senya Pugach -Aurelio De Rosa -Nazar Mokrynskyi -Amit Merchant -Jason Bedard -Arthur Verschaeve -Dan Hart -Bin Xin -David Corbacho -Veaceslav Grimalschi -Daniel Husar -Frederic Hemberger -Ben Toews -Aditya Raghavan -Victor Homyakov -Shivaji Varma -Nicolas HENRY -Anne-Gaelle Colom -George Mauer -Leonardo Braga -Stephen Edgar -Thomas Tortorini -Winston Howes -Jon Hester -Alexander O'Mara -Bastian Buchholz -Arthur Stolyar -Calvin Metcalf -Mu Haibao -Richard McDaniel -Chris Rebert -Gabriel Schulhof -Gilad Peleg -Martin Naumann -Marek Lewandowski -Bruno Pérel -Reed Loden -Daniel Nill -Yongwoo Jeon -Sean Henderson -Richard Kraaijenhagen -Connor Atherton -Gary Ye -Christian Grete -Liza Ramo -Julian Alexander Murillo -Joelle Fleurantin -Jae Sung Park -Jun Sun -Josh Soref -Henry Wong -Jon Dufresne -Martijn W. van der Lee -Devin Wilson -Steve Mao -Zack Hall -Bernhard M. Wiedemann -Todor Prikumov -Jha Naman -William Robinet -Alexander Lisianoi -Vitaliy Terziev -Joe Trumbull -Alexander K -Damian Senn -Ralin Chimev -Felipe Sateler -Christophe Tafani-Dereeper -Manoj Kumar -David Broder-Rodgers -Alex Louden -Alex Padilla -南漂一卒 -karan-96 -Boom Lee -Andreas Solleder -CDAGaming -Pierre Spring -Shashanka Nataraj -Erik Lax -Matan Kotler-Berkowitz <205matan@gmail.com> -Jordan Beland -Henry Zhu -Saptak Sengupta -Nilton Cesar -basil.belokon diff --git a/modules/jquery/LICENSE.txt b/modules/jquery/LICENSE.txt deleted file mode 100644 index e4e5e00e..00000000 --- a/modules/jquery/LICENSE.txt +++ /dev/null @@ -1,36 +0,0 @@ -Copyright JS Foundation and other contributors, https://js.foundation/ - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/jquery/jquery - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -All files located in the node_modules and external directories are -externally maintained libraries used by this software which have their -own licenses; we recommend you read them, as their terms may differ from -the terms above. diff --git a/modules/jquery/README.md b/modules/jquery/README.md deleted file mode 100644 index 83e7b937..00000000 --- a/modules/jquery/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# jQuery - -> jQuery is a fast, small, and feature-rich JavaScript library. - -For information on how to get started and how to use jQuery, please see [jQuery's documentation](http://api.jquery.com/). -For source files and issues, please visit the [jQuery repo](https://github.com/jquery/jquery). - -If upgrading, please see the [blog post for 3.3.1](https://blog.jquery.com/2017/03/20/jquery-3.3.1-now-available/). This includes notable differences from the previous version and a more readable changelog. - -## Including jQuery - -Below are some of the most common ways to include jQuery. - -### Browser - -#### Script tag - -```html - -``` - -#### Babel - -[Babel](http://babeljs.io/) is a next generation JavaScript compiler. One of the features is the ability to use ES6/ES2015 modules now, even though browsers do not yet support this feature natively. - -```js -import $ from "jquery"; -``` - -#### Browserify/Webpack - -There are several ways to use [Browserify](http://browserify.org/) and [Webpack](https://webpack.github.io/). For more information on using these tools, please refer to the corresponding project's documention. In the script, including jQuery will usually look like this... - -```js -var $ = require("jquery"); -``` - -#### AMD (Asynchronous Module Definition) - -AMD is a module format built for the browser. For more information, we recommend [require.js' documentation](http://requirejs.org/docs/whyamd.html). - -```js -define(["jquery"], function($) { - -}); -``` - -### Node - -To include jQuery in [Node](nodejs.org), first install with npm. - -```sh -npm install jquery -``` - -For jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as [jsdom](https://github.com/tmpvar/jsdom). This can be useful for testing purposes. - -```js -require("jsdom").env("", function(err, window) { - if (err) { - console.error(err); - return; - } - - var $ = require("jquery")(window); -}); -``` diff --git a/modules/jquery/bower.json b/modules/jquery/bower.json deleted file mode 100644 index 95798d5a..00000000 --- a/modules/jquery/bower.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "jquery", - "main": "dist/jquery.js", - "license": "MIT", - "ignore": [ - "package.json" - ], - "keywords": [ - "jquery", - "javascript", - "browser", - "library" - ] -} \ No newline at end of file diff --git a/modules/jquery/dist/jquery.min.js b/modules/jquery/dist/jquery.min.js deleted file mode 100644 index 4d9b3a25..00000000 --- a/modules/jquery/dist/jquery.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("