{"version":3,"sources":["jsdelivr-header.js","/npm/icc@3.0.0/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACHA,aAIA,MAAM,WAAa,CACjB,SAAY,MACZ,SAAY,MACZ,SAAY,MACZ,SAAY,MACZ,SAAY,MACZ,SAAY,MACZ,SAAY,OAGR,UAAY,CAChB,EAAG,aACH,EAAG,WACH,EAAG,aACH,EAAG,YAGC,SAAW,CAEf,KAAM,UACN,KAAM,UACN,KAAM,UACN,KAAM,OACN,KAAM,WACN,KAAM,QACN,KAAM,cAEN,KAAM,QACN,KAAM,QACN,KAAM,YACN,KAAM,mBACN,IAAK,mBACL,KAAM,YAGF,OAAS,CACb,KAAM,cACN,KAAM,YACN,KAAM,yBACN,KAAM,+BACN,KAAM,cAGF,2BAA6B,CAAC,EAAQ,KAC1C,MAAM,EAAQ,EAAO,MAAM,EAAQ,EAAS,GAAG,WAAW,OAC1D,OAAQ,EAAM,gBAAiB,SAAY,SAAS,EAAM,eAAiB,CAAK,EAG5E,mBAAqB,CAAC,EAAQ,IAA2C,IAAhC,EAAO,aAAa,GAE7D,kBAAoB,CAAC,EAAQ,EAAO,KACxC,MAAM,EAAO,EAAO,MAAM,EAAO,GACjC,IAAI,EAAQ,GACZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,GAAK,EACpC,GAAS,OAAO,aAAwB,IAAV,EAAK,GAAY,EAAK,EAAI,IAE1D,OAAO,CAAK,EAGR,QAAW,GAAW,IAAI,MAAM,wBAAwB,KAE9D,OAAO,QAAQ,MAAS,IAGtB,GADa,EAAO,aAAa,KACpB,EAAO,OAClB,MAAM,QAAQ,mBAIhB,GAAkB,SADA,EAAO,MAAM,GAAI,IAAI,WAErC,MAAM,QAAQ,qBAGhB,MAAM,EAAU,CACd,QAAS,WAAW,EAAO,aAAa,IACxC,OAAQ,UAAU,EAAO,aAAa,MAGxC,CACE,CAAC,EAAG,OACJ,CAAC,GAAI,eACL,CAAC,GAAI,cACL,CAAC,GAAI,mBACL,CAAC,GAAI,YACL,CAAC,GAAI,gBACL,CAAC,GAAI,SACL,CAAC,GAAI,YACL,SAAQ,IACJ,mBAAmB,EAAQ,EAAK,MAClC,EAAQ,EAAK,IAAM,2BAA2B,EAAQ,EAAK,IAC7D,IAGF,MAAM,EAAW,EAAO,aAAa,KACrC,IAAI,EAAkB,IACtB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAU,IAAK,CACjC,MAAM,EAAe,2BAA2B,EAAQ,GACxD,GAAI,KAAgB,OAAQ,CAC1B,MAAM,EAAY,EAAO,aAAa,EAAkB,GAClD,EAAU,EAAO,aAAa,EAAkB,GACtD,GAAI,EAAY,EAAO,OACrB,MAAM,QAAQ,4BAEhB,MAAM,EAAU,2BAA2B,EAAQ,GAEnD,GAAgB,SAAZ,EAAoB,CACtB,MAAM,EAAe,EAAO,aAAa,EAAY,GACrD,GAAI,EAAe,EACjB,MAAM,QAAQ,gDAAgD,KAEhE,EAAQ,OAAO,IAAiB,EAAO,MAAM,EAAY,GAAI,EAAY,EAAe,IAAI,UAC9F,CAKA,GAHgB,SAAZ,IACF,EAAQ,OAAO,IAAiB,EAAO,MAAM,EAAY,EAAG,EAAY,EAAU,GAAG,YAEvE,SAAZ,GAAsB,KAAgB,OAAQ,CAEhD,MAAM,EAAgB,EAAO,aAAa,EAAY,GAEtD,GAAuB,KADA,EAAO,aAAa,EAAY,IAErD,MAAM,QAAQ,4CAA4C,KAE5D,GAAI,EAAgB,EAAG,CAIrB,MAAM,EAAa,EAAO,aAAa,EAAY,IAE7C,EAAY,EADC,EAAO,aAAa,EAAY,IAE7C,EAAW,EAAY,EAC7B,EAAQ,OAAO,IAAiB,kBAAkB,EAAQ,EAAW,EACvE,CACF,CACgB,QAAZ,IACF,EAAQ,OAAO,IAAiB,CAC9B,EAAO,YAAY,EAAY,GAAK,MACpC,EAAO,YAAY,EAAY,IAAM,MACrC,EAAO,YAAY,EAAY,IAAM,OAG3C,CACA,GAAoC,EACtC,CACA,OAAO,CAAO","file":"/npm/icc@3.0.0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/icc@3.0.0/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// Copyright 2015 Lovell Fuller and others.\n// SPDX-License-Identifier: Apache-2.0\n\n'use strict';\n\n// http://www.color.org/profileheader.xalter\n\nconst versionMap = {\n  0x02000000: '2.0',\n  0x02100000: '2.1',\n  0x02400000: '2.4',\n  0x04000000: '4.0',\n  0x04200000: '4.2',\n  0x04300000: '4.3',\n  0x04400000: '4.4'\n};\n\nconst intentMap = {\n  0: 'Perceptual',\n  1: 'Relative',\n  2: 'Saturation',\n  3: 'Absolute'\n};\n\nconst valueMap = {\n  // Device\n  scnr: 'Scanner',\n  mntr: 'Monitor',\n  prtr: 'Printer',\n  link: 'Link',\n  abst: 'Abstract',\n  spac: 'Space',\n  nmcl: 'Named color',\n  // Platform\n  appl: 'Apple',\n  adbe: 'Adobe',\n  msft: 'Microsoft',\n  sunw: 'Sun Microsystems',\n  sgi: 'Silicon Graphics',\n  tgnt: 'Taligent'\n};\n\nconst tagMap = {\n  desc: 'description',\n  cprt: 'copyright',\n  dmdd: 'deviceModelDescription',\n  vued: 'viewingConditionsDescription',\n  wtpt: 'whitepoint'\n};\n\nconst getContentAtOffsetAsString = (buffer, offset) => {\n  const value = buffer.slice(offset, offset + 4).toString().trim();\n  return (value.toLowerCase() in valueMap) ? valueMap[value.toLowerCase()] : value;\n};\n\nconst hasContentAtOffset = (buffer, offset) => buffer.readUInt32BE(offset) !== 0;\n\nconst readStringUTF16BE = (buffer, start, end) => {\n  const data = buffer.slice(start, end);\n  let value = '';\n  for (let i = 0; i < data.length; i += 2) {\n    value += String.fromCharCode((data[i] * 256) + data[i + 1]);\n  }\n  return value;\n};\n\nconst invalid = (reason) => new Error(`Invalid ICC profile: ${reason}`);\n\nmodule.exports.parse = (buffer) => {\n  // Verify expected length\n  const size = buffer.readUInt32BE(0);\n  if (size !== buffer.length) {\n    throw invalid('length mismatch');\n  }\n  // Verify 'acsp' signature\n  const signature = buffer.slice(36, 40).toString();\n  if (signature !== 'acsp') {\n    throw invalid('missing signature');\n  }\n  // Integer attributes\n  const profile = {\n    version: versionMap[buffer.readUInt32BE(8)],\n    intent: intentMap[buffer.readUInt32BE(64)]\n  };\n  // Four-byte string attributes\n  [\n    [4, 'cmm'],\n    [12, 'deviceClass'],\n    [16, 'colorSpace'],\n    [20, 'connectionSpace'],\n    [40, 'platform'],\n    [48, 'manufacturer'],\n    [52, 'model'],\n    [80, 'creator']\n  ].forEach(attr => {\n    if (hasContentAtOffset(buffer, attr[0])) {\n      profile[attr[1]] = getContentAtOffsetAsString(buffer, attr[0]);\n    }\n  });\n  // Tags\n  const tagCount = buffer.readUInt32BE(128);\n  let tagHeaderOffset = 132;\n  for (let i = 0; i < tagCount; i++) {\n    const tagSignature = getContentAtOffsetAsString(buffer, tagHeaderOffset);\n    if (tagSignature in tagMap) {\n      const tagOffset = buffer.readUInt32BE(tagHeaderOffset + 4);\n      const tagSize = buffer.readUInt32BE(tagHeaderOffset + 8);\n      if (tagOffset > buffer.length) {\n        throw invalid('tag offset out of bounds');\n      }\n      const tagType = getContentAtOffsetAsString(buffer, tagOffset);\n      // desc\n      if (tagType === 'desc') {\n        const tagValueSize = buffer.readUInt32BE(tagOffset + 8);\n        if (tagValueSize > tagSize) {\n          throw invalid(`description tag value size out of bounds for ${tagSignature}`);\n        }\n        profile[tagMap[tagSignature]] = buffer.slice(tagOffset + 12, tagOffset + tagValueSize + 11).toString();\n      }\n      // text\n      if (tagType === 'text') {\n        profile[tagMap[tagSignature]] = buffer.slice(tagOffset + 8, tagOffset + tagSize - 7).toString();\n      }\n      if (tagType === 'mluc' && tagSignature in tagMap) {\n        // 4 bytes signature, 4 bytes reserved (must be 0), 4 bytes number of names, 4 bytes name record size (must be 12)\n        const numberOfNames = buffer.readUInt32BE(tagOffset + 8);\n        const nameRecordSize = buffer.readUInt32BE(tagOffset + 12);\n        if (nameRecordSize !== 12) {\n          throw invalid(`mluc name record size must be 12 for tag ${tagSignature}`);\n        }\n        if (numberOfNames > 0) {\n          // Entry: 2 bytes language code, 2 bytes country code, 4 bytes length, 4 bytes offset from start of tag\n          // const languageCode = buffer.slice(tagOffset + 16, tagOffset + 18).toString();\n          // const countryCode = buffer.slice(tagOffset + 18, tagOffset + 20).toString();\n          const nameLength = buffer.readUInt32BE(tagOffset + 20);\n          const nameOffset = buffer.readUInt32BE(tagOffset + 24);\n          const nameStart = tagOffset + nameOffset;\n          const nameStop = nameStart + nameLength;\n          profile[tagMap[tagSignature]] = readStringUTF16BE(buffer, nameStart, nameStop);\n        }\n      }\n      if (tagType === 'XYZ') {\n        profile[tagMap[tagSignature]] = [\n          buffer.readInt32BE(tagOffset + 8) / 65536,\n          buffer.readInt32BE(tagOffset + 12) / 65536,\n          buffer.readInt32BE(tagOffset + 16) / 65536\n        ];\n      }\n    }\n    tagHeaderOffset = tagHeaderOffset + 12;\n  }\n  return profile;\n};\n"]}