将下面这段javascript代码按照功能意思将函数名和变量名修改成有意义的名字，让我更好的理解，按照小驼峰格式，不要删除变量，保留原来的代码格式

    function expandExpression(_0x3fdd79, _0x293ede, _0x35d695, _0x32ffde) {
      _0x35d695 = _0x35d695 || {}, _0x32ffde = _0x32ffde || {};
      if (!_0x3fdd79.jsconfuserDetected) {
        return;
      }
      let _0x51d4aa = {},
        _0x46226f;
      if (_0x293ede.isFunctionDeclaration()) _0x46226f = utility.getBinding(_0x293ede.get('id'));else {
        _0x46226f = utility.getBinding(_0x293ede);
        if (!_0x46226f) {
          return;
        }
        if (_0x46226f.path.isVariableDeclarator()) {
          if (_0x51d4aa.data = _0x3fdd79.d.expander.get(_0x46226f)) {
            return _0x51d4aa.data;
          }
          if ((_0x51d4aa.id = _0x46226f.path.get('init')).isIdentifier()) {
            _0x51d4aa.data = expandExpression(_0x3fdd79, _0x51d4aa.id, _0x35d695, _0x32ffde);
            if (_0x51d4aa.data) {
              if (!_0x46226f.constant) {
                _log('# warning: derived expander is not constant:', _summarize(_0x46226f.path)), _0x46226f.constantViolations.forEach(_0x4c2267 => _log(' ', _summarize(_0x4c2267))), _abort();
              }
              return _0x3fdd79.opts.test && _log('# got derived expander.', _summarize(_0x46226f.path), 'for', _summarize(_0x51d4aa.data.path)), _0x3fdd79.d.expander.set(_0x46226f, _0x51d4aa.data), _0x51d4aa.data;
            }
          }
          return;
        } else {
          if (!_0x46226f.path.isFunctionDeclaration()) {
            return;
          }
        }
      }
      if (_0x51d4aa.data = _0x3fdd79.d.expander.get(_0x46226f)) return _0x51d4aa.data;
      if (_0x32ffde.shallow) {
        return;
      }
      let _0x5dbf9e = _0x46226f.path.get('params'),
        _0x3a6c02 = _0x46226f.path.get('body.body');
      const _0x379c81 = {};
      _0x379c81.value = false;
      if (_0x3fdd79.d.secondTable && _0x5dbf9e.length === 5 && utility.isAssignmentPattern(_0x5dbf9e[3], (_0x5a1b51, _0x41fa0d) => _0x5a1b51.isIdentifier() && (_0x51d4aa.decoder = {
        'id': _0x41fa0d
      }, _0x41fa0d).isIdentifier()) && utility.isAssignmentPattern(_0x5dbf9e[4], (_0x36a1c2, _0x1a1673) => _0x36a1c2.isIdentifier() && utility.getBinding(_0x1a1673) === _0x3fdd79.d.secondTable.cache) && _0x3a6c02.length === 2 && _0x3a6c02[0].isIfStatement() && _0x3a6c02[1].isReturnStatement() && (_0x51d4aa.v = _0x3a6c02[1].get('argument')).isConditionalExpression() && (_0x51d4aa.alt = _0x51d4aa.v.get('alternate')) && utility.isLogicalExpression(_0x51d4aa.alt, (_0xdfc392, _0x186c40, _0x2b3d68) => _0x2b3d68 === '||' && utility.isMemberExpression(_0xdfc392, (_0x97cb64, _0x16a762, _0x9c9a71) => utility.getBinding(_0x97cb64) === _0x3fdd79.d.secondTable.cache && utility.getBinding(_0x16a762) === utility.getBinding(_0x5dbf9e[0])) && utility.isSequenceExpression(_0x186c40, _0x46ba62 => _0x46ba62.length === 2 && utility.isAssignmentExpression(_0x46ba62[1], (_0x4b492f, _0x142f74, _0x351868) => _0x351868 === '=' && utility.isMemberExpression(_0x4b492f, (_0x2002ca, _0x5ac6d6, _0x4f4ac3) => utility.getBinding(_0x2002ca) === _0x3fdd79.d.secondTable.cache && utility.getBinding(_0x5ac6d6) === utility.getBinding(_0x5dbf9e[0])))))) {
        _log('# got second-expander:', _summarize(_0x46226f.path)), _0x51d4aa.decoder.bd = utility.getBinding(_0x51d4aa.decoder.id);
        !_0x51d4aa.decoder.bd && (_log('# error: no binding of decoder \'' + _0x51d4aa.decoder.id + '\''), _abort());
        _log('  decoder:', _summarize(_0x51d4aa.decoder.bd.path));
        if (!_0x51d4aa.decoder.bd.path.isFunctionDeclaration) {
          _log('# error: decoder must be FunctionDeclaration. got', _0x51d4aa.decoder.bd.path.type), _abort();
        }
        return initializeCode(_0x3fdd79, _0x51d4aa.decoder.bd.path, {
          'name': 'decoder'
        }), addMetacode(_0x3fdd79, _0x51d4aa.decoder.bd.path, 'remove second-expander decoder'), initializeCode(_0x3fdd79, _0x46226f.path, {
          'name': 'second-expander'
        }), addMetacode(_0x3fdd79, _0x46226f.path, 'remove second-expander'), _0x51d4aa.data = {
          'bd': _0x46226f,
          'path': _0x46226f.path,
          'expand': _0x3fdd79.sandbox[_0x46226f.identifier.name],
          'decoder': _0x51d4aa.decoder,
          'name': 'second-expander'
        }, _0x3fdd79.d.expander.set(_0x46226f, _0x51d4aa.data), _0x51d4aa.data;
      } else {
        if (_0x3fdd79.d.extraTable && (_0x51d4aa.body = _0x46226f.path.get('body.body')) && _0x51d4aa.body.length > 0 && ((_0x51d4aa.rs = _0x51d4aa.body[_0x51d4aa.body.length - 1]).isReturnStatement() || utility.isIfStatement(_0x51d4aa.rs, (_0x569549, _0x49feab, _0x766426) => _0x569549.isBooleanLiteral(_0x379c81) && _0x766426.isBlockStatement() && (_0x51d4aa.body = _0x766426.get('body')) && _0x51d4aa.body.length > 0 && (_0x51d4aa.rs = _0x51d4aa.body[_0x51d4aa.body.length - 1]).isReturnStatement())) && (_0x51d4aa.arg = _0x51d4aa.rs.get('argument')) && utility.isMemberExpression(_0x51d4aa.arg, (_0x43b5f0, _0x3a31bb) => utility.getBinding(_0x43b5f0) === _0x3fdd79.d.extraTable.bd)) {
          let _0x38cb1e = _0x46226f.path.get('id');
          _log('# got extra-expander:', _summarize(_0x46226f.path)), initializeCode(_0x3fdd79, _0x46226f.path, {
            'name': 'extra-expander'
          }), addMetacode(_0x3fdd79, _0x46226f.path, 'remove extra-expander');
          const _0x4cd180 = {};
          return _0x4cd180.bd = _0x46226f, _0x4cd180.path = _0x46226f.path, _0x4cd180.expand = _0x3fdd79.sandbox[_0x46226f.identifier.name], _0x4cd180.name = 'extra-expander', _0x51d4aa.data = _0x4cd180, _0x3fdd79.d.expander.set(_0x46226f, _0x51d4aa.data), _0x51d4aa.data;
        } else {
          if (_0x3fdd79.d.objectExpander && _0x46226f === _0x3fdd79.d.objectExpander.bd) {
            _log('parsing object-expander at', _0x35d695.name);
            let _0x5525c2 = new Map();
            _0x46226f.path.get('body.body').forEach(_0x59a236 => {
              _0x3fdd79.opts.test && _log('    ' + _summarize(_0x59a236)), utility.isSwitchStatement(_0x59a236, (_0x427943, _0x3cc0c2) => {
                _0x3cc0c2.forEach(_0x409e48 => {
                  utility.isSwitchCase(_0x409e48, (_0x5337af, _0x8fe485) => {
                    let _0x266583 = _0x8fe485[0],
                      _0x2b826c,
                      _0x26d3a6;
                    _0x3fdd79.opts.test && _log('      case', _summarize(_0x5337af) + ':', _gencode(_0x266583));
                    try {
                      _0x2b826c = utility.evalLiteralExpression(_0x5337af);
                    } catch (_0x4e3504) {
                      _log(_0x4e3504.name + ':', _0x4e3504.message), _log('# error:  SwitchCase.test is not literal:', _summarize(_0x266583)), _abort();
                    }
                    if (!_0x266583) _log('# error: SwtchCase has no consequent:', _summarize(_0x266583)), _abort();else {
                      if (utility.isReturnStatement(_0x266583, _0x41225d => utility.isLogicalExpression(_0x41225d, (_0x345bce, _0x2c6fe3, _0x3a0fa0) => _0x3a0fa0 === '||' && utility.isMemberExpression(_0x345bce, (_0x487745, _0x4306e8, _0x3f00ed, _0x203040) => _0x26d3a6 = _0x203040))) || utility.isExpressionStatement(_0x266583, _0x1aac8 => utility.isAssignmentExpression(_0x1aac8, (_0xc04f5c, _0x1c4236, _0x563186) => _0x563186 === '=' && _0x1c4236.isStringLiteral() && (_0x26d3a6 = _0x1c4236.node.value)))) {
                        _0x3fdd79.opts.test && _log('        ' + _0x2b826c, ':', _0x26d3a6), _0x5525c2.set(_0x2b826c, _0x26d3a6);
                      } else {
                        _log('# error: unexpected SwticCase.consequent[0]:', _gencode(_0x266583)), _abort();
                      }
                    }
                  });
                });
              });
            }), _log('# got object-expander:', _summarize(_0x46226f.path)), _log('  globals:', Array.from(_0x5525c2).map(_0x4abc6b => _0x4abc6b[1]).sort().join(', '));
            let _0x4fc8ba = {
              'bd': _0x46226f,
              'path': _0x46226f.path,
              'expand': function (_0x361fca) {
                return _0x5525c2.get(_0x361fca);
              },
              'name': 'object-expander'
            };
            _0x3fdd79.d.expander.set(_0x46226f, _0x4fc8ba), addMetacode(_0x3fdd79, _0x46226f.path, 'remove object-expander');
          } else {
            if ((_0x51d4aa.body = _0x46226f.path.get('body.body')) && utility.isSwitchStatement(_0x51d4aa.body[_0x51d4aa.body.length - 1], (_0x2d833c, _0x4a6232) => (_0x51d4aa.ope = utility.getBinding(_0x2d833c)) && utility.isVariableDeclarator(_0x51d4aa.ope.path, (_0x49ea99, _0x3afa9d) => !_0x3afa9d.node) && _0x4a6232.every(_0x29647e => utility.isSwitchCase(_0x29647e, (_0x402a36, _0x5daef8) => utility.isReturnStatement(_0x5daef8[0], _0x48722a => utility.isBinaryExpression(_0x48722a, (_0x18faf7, _0x375069, _0x2fb4ed) => ['+', '-', '*', '/'].includes(_0x2fb4ed))))))) {
              let _0x549ba2 = 'calculator';
              _log('# got', _0x549ba2 + ':', _summarize(_0x46226f.path)), _log('  operator specifier:', _summarize(_0x51d4aa.ope.path)), _0x51d4aa.ope.referencePaths.forEach(_0x1afe40 => {
                if (_0x51d4aa.directive) {
                  return;
                }
                let _0x841446 = utility.findAncestor(_0x1afe40, _0x1f02ad => !['BinaryExpression', 'AssignmentExpression', 'SequenceExpression', 'ReturnStatement', 'IfStatement', 'BlockStatement'].includes(_0x1f02ad.type));
                if (_0x841446.isFunctionDeclaration()) {
                  _0x5b5126(_0x3fdd79, _0x841446);
                  let _0x4a38d3 = _0x1afe40.parentPath,
                    _0xc5f75d = _0x4a38d3.parentPath,
                    _0x28aaf1 = _0xc5f75d.parentPath;
                  const _0x482ea7 = {};
                  _0x482ea7.value = 0;
                  if (utility.isBinaryExpression(_0x4a38d3, (_0x528c74, _0x15c3af, _0x35d6e3) => _0x35d6e3 === '+' && _0x528c74 === _0x1afe40 && utility.isSequenceExpression(_0x15c3af, _0x324f08 => utility.isAssignmentExpression(_0x324f08[0], (_0x1abc26, _0x438b91) => _0x1abc26.isIdentifier({
                    'name': _0x1afe40.node.name
                  }) && (_0x51d4aa.right = _0x438b91)) && _0x324f08[1] && _0x324f08[1].isNumericLiteral(_0x482ea7)))) {
                    utility.isAssignmentExpression(_0xc5f75d, (_0x33669c, _0x1a8d6f, _0x3be335) => utility.bothReferToSame(_0x33669c, _0x51d4aa.right) && _0x1a8d6f === _0x4a38d3) && _0x28aaf1.key === 'argument' && _0x28aaf1.parentPath.isReturnStatement() && utility.isSequenceExpression(_0x28aaf1, _0x92723e => _0x92723e[0] === _0xc5f75d && utility.bothReferToSame(_0x92723e[1], _0x51d4aa.right)) && (_0x51d4aa.dir = utility.getBinding(_0x841446.get('id')), _log('  operator directive:', _summarize(_0x841446)));
                  }
                }
              }), initializeCode(_0x3fdd79, _0x51d4aa.ope.path, {
                'name': 'calculator operator specifier'
              }), _0x3fdd79.d.expander.set(_0x51d4aa.ope, {
                'bd': _0x51d4aa.ope,
                'path': _0x51d4aa.ope.path,
                'expand': _0x3fdd79.sandbox[_0x51d4aa.ope.identifier.name],
                'name': 'calculator operator specifier'
              });
              if (_0x51d4aa.dir) {
                initializeCode(_0x3fdd79, _0x51d4aa.dir.path, {
                  'name': 'calculator operator directive'
                }), _0x3fdd79.d.expander.set(_0x51d4aa.dir, {
                  'bd': _0x51d4aa.dir,
                  'path': _0x51d4aa.dir.path,
                  'expand': _0x3fdd79.sandbox[_0x51d4aa.dir.identifier.name],
                  'name': 'calculator operator directive',
                  'noReturn': true
                });
              }
              const _0x4deaf7 = {};
              _0x4deaf7.name = _0x549ba2, initializeCode(_0x3fdd79, _0x46226f.path, _0x4deaf7);
              const _0x41d736 = {};
              _0x41d736.bd = _0x46226f, _0x41d736.path = _0x46226f.path, _0x41d736.expand = _0x3fdd79.sandbox[_0x46226f.identifier.name], _0x41d736.name = _0x549ba2, _0x51d4aa.data = _0x41d736, _0x3fdd79.d.expander.set(_0x46226f, _0x51d4aa.data);
              const _0x43d575 = {};
              return _0x43d575.bd = _0x46226f, _0x43d575.operator = _0x51d4aa.ope, _0x43d575.directive = _0x51d4aa.dir, _0x3fdd79.d.calculator = _0x43d575, _0x51d4aa.data;
            } else {
              if (_0x51d4aa.data = processBossExpander(_0x3fdd79, _0x46226f, _0x35d695)) return _0x51d4aa.data;
            }
          }
        }
      }
    }