[
  {
    "tags": [],
    "description": {
      "full": "",
      "summary": "",
      "body": ""
    },
    "isPrivate": false,
    "isConstructor": false,
    "line": 1,
    "codeStart": null,
    "code": "function divmod(\n  number: number[],\n  firstDigit: number,\n  base: number,\n  divisor: number\n) {\n  let remainder = 0;\n  for (let i = firstDigit; i < number.length; i++) {\n    let digit = number[i] & 0xff,\n      temp = remainder * base + digit;\n    number[i] = temp / divisor;\n    remainder = temp % divisor;\n  }\n  return remainder;\n}\n\nexport namespace Base58 {\n  const CHARS: string =\n    '123456789ABCDEFGHJKLMNPQRSTU' + 'VWXYZabcdefghijkmnopqrstuvwxyz';\n\n  const ZERO = CHARS[0];\n\n  const INDEXES = [];\n\n  function initialize(): void {\n    for (let i = 0; i < 128; i++) {\n      INDEXES[i] = -1;\n    }\n    for (let i = 0; i < CHARS.length; i++) {\n      INDEXES[CHARS[i]] = i;\n    }\n  }\n\n  export function encode(value: number[]): string {\n    if (!value) {\n      return '';\n    }\n\n    let zeros = 0;\n    while (zeros < value.length && value[zeros] === 0) {\n      ++zeros;\n    }\n    let input = value.slice(),\n      encoded = [],\n      outputStart = input.length * 2;\n\n    for (let inputStart = zeros; inputStart < input.length; ) {\n      encoded[--outputStart] = CHARS[divmod(input, inputStart, 256, 58)];\n      if (input[inputStart] == 0) {\n        ++inputStart;\n      }\n    }\n\n    while (outputStart < encoded.length && encoded[outputStart] == ZERO) {\n      ++outputStart;\n    }\n    while (--zeros >= 0) {\n      encoded[--outputStart] = ZERO;\n    }\n    return encoded.slice(outputStart, encoded.length - outputStart).join('');\n  }\n\n  initialize();\n}",
    "ctx": {
      "type": "function",
      "name": "divmod",
      "string": "divmod()"
    }
  }
]