v1.13.0 upgrade issues (checkPermissions)

Moved Technical Support
  • I am currently running 1.12.2, I ran the upgrade process as I normally do:

    git fetch
    git checkout v1.13.x
    git merge origin/v1.13.x
    ./nodebb upgrade

    However this time I get screen full of errors:

    [email protected]:~/nodebb$ ./nodebb upgrade
    Dependencies outdated or not yet installed.
    Installing them now...
    
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/@babel/runtime/node_modules/regenerator-runtime
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/@babel/runtime
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/@commitlint/cli/node_modules/supports-color
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/@commitlint/cli/node_modules/chalk
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/arr-diff
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/arr-flatten
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/arr-union
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/array-unique
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/assign-symbols
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/atob
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/copy-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/cosmiconfig/node_modules/js-yaml
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/decode-uri-component
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/eslint-restricted-globals
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/eslint/node_modules/ajv
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/eslint/node_modules/js-yaml
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/find-parent-dir
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/flat/node_modules/is-buffer
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/fn-name
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/for-in
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/get-value
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/globby/node_modules/pify
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/has-values/node_modules/kind-of
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/has-values
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/inquirer/node_modules/mute-stream
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-accessor-descriptor/node_modules/kind-of
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-accessor-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-ci
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-data-descriptor/node_modules/kind-of
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-data-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-descriptor/node_modules/kind-of
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/class-utils/node_modules/define-property
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/expand-brackets/node_modules/define-property
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-extendable
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/braces/node_modules/extend-shallow
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/expand-brackets/node_modules/extend-shallow
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/extglob/node_modules/extend-shallow
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/fill-range/node_modules/extend-shallow
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-number/node_modules/kind-of
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-path-in-cwd
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-windows
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/isobject
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/has-value
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-plain-object
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/extend-shallow/node_modules/is-extendable
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/extend-shallow
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/kind-of
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/base/node_modules/is-accessor-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/base/node_modules/is-data-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/base/node_modules/is-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/base/node_modules/define-property
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/define-property/node_modules/is-accessor-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/define-property/node_modules/is-data-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/define-property/node_modules/is-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/define-property
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/extglob/node_modules/is-accessor-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/extglob/node_modules/is-data-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/extglob/node_modules/is-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/extglob/node_modules/define-property
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/map-cache
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/fragment-cache
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/matcher
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/mixin-deep/node_modules/is-extendable
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/mixin-deep
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/mocha/node_modules/cliui/node_modules/string-width
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/mocha/node_modules/invert-kv
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/mocha/node_modules/js-yaml
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/mocha/node_modules/lcid
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/mocha/node_modules/os-locale
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/mocha/node_modules/string-width/node_modules/ansi-regex
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/mocha/node_modules/string-width/node_modules/strip-ansi
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/npm-path
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/npm-which
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/object-copy/node_modules/define-property
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/object-copy/node_modules/kind-of
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/object-copy
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/object-visit
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/map-visit
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/collection-visit
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/object.pick
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/optionator/node_modules/wordwrap
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/pascalcase
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/path-is-inside
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/posix-character-classes
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/property-expr
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/repeat-element
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/repeat-string
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/resolve-url
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/ret
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/safe-regex
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/regex-not
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/set-value/node_modules/extend-shallow
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/simple-git/node_modules/ms
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/simple-git/node_modules/debug
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/simple-git
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/g-status
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/snapdragon-node/node_modules/is-accessor-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/snapdragon-node/node_modules/is-data-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/snapdragon-node/node_modules/is-descriptor
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/snapdragon-node/node_modules/define-property
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/snapdragon-util/node_modules/kind-of
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/snapdragon-util
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/snapdragon-node
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/snapdragon/node_modules/define-property
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/snapdragon/node_modules/extend-shallow
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/snapdragon/node_modules/source-map
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/source-map-url
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/split-string
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/set-value
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/staged-git-files
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/static-extend/node_modules/define-property
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/static-extend
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/class-utils
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/synchronous-promise
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/table/node_modules/ajv
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/to-object-path/node_modules/kind-of
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/to-object-path
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/to-regex
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/toposort
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/union-value
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/unset-value/node_modules/has-value/node_modules/isobject
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/unset-value/node_modules/has-values
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/unset-value/node_modules/has-value
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/unset-value
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/cache-base
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/base
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/urix
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/source-map-resolve
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/use
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/snapdragon
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/expand-brackets
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/extglob
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/nanomatch
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/yargs-unparser/node_modules/get-caller-file
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/yargs-unparser/node_modules/invert-kv
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/yargs-unparser/node_modules/lcid
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/yargs-unparser/node_modules/os-locale
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/yargs-unparser/node_modules/require-main-filename
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/yup
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/nodebb-plugin-spam-be-gone
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/@babel/runtime/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/@commitlint/cli/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/cosmiconfig/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/eslint/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/flat/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/globby/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/has-values/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/inquirer/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-accessor-descriptor/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-data-descriptor/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-descriptor/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/class-utils/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/expand-brackets/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/braces/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/extglob/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/fill-range/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/is-number/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/extend-shallow/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/base/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/define-property/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/mixin-deep/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/mocha/node_modules/cliui/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/mocha/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/mocha/node_modules/string-width/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/object-copy/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/optionator/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/set-value/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/simple-git/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/snapdragon-node/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/snapdragon-util/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/snapdragon/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/static-extend/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/table/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/to-object-path/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/unset-value/node_modules/has-value/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/unset-value/node_modules
    npm WARN checkPermissions Missing write access to /home/bgc/nodebb/node_modules/yargs-unparser/node_modules
    npm WARN [email protected] requires a peer of [email protected]^0.4.0 but none is installed. You must install peer dependencies yourself.
    npm WARN [email protected] requires a peer of [email protected]^2.0.0 but none is installed. You must install peer dependencies yourself.
    npm WARN [email protected] requires a peer of [email protected]^0.14.2 but none is installed. You must install peer dependencies yourself.
    npm WARN [email protected] requires a peer of [email protected]^2.5.0 but none is installed. You must install peer dependencies yourself.
    
    npm ERR! code EACCES
    npm ERR! syscall access
    npm ERR! path /home/bgc/nodebb/node_modules/@babel/runtime/node_modules/regenerator-runtime
    npm ERR! errno -13
    npm ERR! Error: EACCES: permission denied, access '/home/bgc/nodebb/node_modules/@babel/runtime/node_modules/regenerator-runtime'
    npm ERR!  { [Error: EACCES: permission denied, access '/home/bgc/nodebb/node_modules/@babel/runtime/node_modules/regenerator-runtime']
    npm ERR!   stack:
    npm ERR!    'Error: EACCES: permission denied, access \'/home/bgc/nodebb/node_modules/@babel/runtime/node_modules/regenerator-runtime\'',
    npm ERR!   errno: -13,
    npm ERR!   code: 'EACCES',
    npm ERR!   syscall: 'access',
    npm ERR!   path:
    npm ERR!    '/home/bgc/nodebb/node_modules/@babel/runtime/node_modules/regenerator-runtime' }
    npm ERR!
    npm ERR! The operation was rejected by your operating system.
    npm ERR! It is likely you do not have the permissions to access this file as the current user
    npm ERR!
    npm ERR! If you believe this might be a permissions issue, please double-check the
    npm ERR! permissions of the file and its containing directories, or try running
    npm ERR! the command again as root/Administrator.
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /home/bgc/.npm/_logs/2019-12-02T15_01_51_895Z-debug.log
    Error installing dependencies!
    message: Command failed: npm install --production
    stdout: null
    stderr: null
    /home/bgc/nodebb/src/cli/package-install.js:52
                    throw e;
                    ^
    
    Error: Command failed: npm install --production
        at checkExecSyncError (child_process.js:629:11)
        at Object.execSync (child_process.js:666:13)
        at Object.installAll (/home/bgc/nodebb/src/cli/package-install.js:43:9)
        at Object.<anonymous> (/home/bgc/nodebb/src/cli/index.js:60:18)
        at Module._compile (internal/modules/cjs/loader.js:778:30)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
        at Module.load (internal/modules/cjs/loader.js:653:32)
        at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
        at Function.Module._load (internal/modules/cjs/loader.js:585:3)
        at Module.require (internal/modules/cjs/loader.js:692:17)
    
    

    It seems to be a permission issue, I know I could run sudo ./nodebb upgrade but I was told in the past to never run nodebb as root, so I am not sure why this time my usual steps are not working?

  • @dcook yeah it looks like at some point you executed a nodebb command as root. You can chown the files to your normal user.

  • @PitaJ that was the issue, not sure how that happened! I guess form now on I will do chown prior to running the upgrade command!

    I did notice that I am getting some lines saying I must install peer dependencies?

    And its also telling me to run: npm fund and npm audit fix as well, I ran those two commands but when I run the ./nodebb upgrade again after it says the same thing?

    Can you advise how I fix those?

    1. Bringing base dependencies up to date... started
      npm WARN [email protected] requires a peer of [email protected]^0.4.0 but none is installed. You must install peer dependencies yourself.
      npm WARN [email protected] requires a peer of [email protected]^2.0.0 but none is installed. You must install peer dependencies yourself.
      npm WARN [email protected] requires a peer of [email protected]^0.14.2 but none is installed. You must install peer dependencies yourself.

    audited 3779 packages in 9.73s

    6 packages are looking for funding
    run npm fund for details

    found 1 high severity vulnerability
    run npm audit fix to fix them, or npm audit for details

  • @dcook I don't recommend you run any other npm commands unless you run into issues.

  • @dcook Those are only warnings.

    6 packages are looking for funding
    run npm fund for details

    The messages themselves will tell you what you need to know. If you wish to fund one of NodeBB's dependencies, you can, but it won't help your NodeBB run any faster, unfortunately 😉

    As for the high severity vulnerability, we're not aware of any at this time...

  • I just noticed that after upgrading the calendar is now blank and says: "Error the last argument must be of type function. Received type object"


Suggested Topics


| | | |