1/* Copyright (C) 2023 Raymond Sun - All Rights Reserved 2 * You may not use, distribute and modify this code without the author's written permission. 3 */ 4 5const US_STATE_KEY_RE = /^US-[A-Z]{2}$/; 6 7function getGroupCode(countryCode) { 8 let groupCode = []; 9 10 // US state profiles (US-XX) render under the US parent, inheriting its group tabs 11 // (G7/G20/OECD). 'US' is unshifted to the front by collateSearchTerms. 12 if (US_STATE_KEY_RE.test(countryCode)) { 13 return ['US'].concat(getGroupCode('US')); 14 } 15 16 const bricsList = ['BR', 'RU', 'IN', 'CN', 'ZA', 'EG', 'ET', 'ID', 'IR', 'AE'] 17 const euList = ['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE'] 18 const g7List = ['US', 'GB', 'CA', 'FR', 'IT', 'DE', 'JP'] 19 const g20List = ['AR', 'AU', 'BR', 'CA', 'CN', 'FR', 'DE', 'IN', 'ID', 'IT', 'JP', 'KR', 'MX', 'RU', 'SA', 'ZA', 'TR', 'GB', 'US', 'EU', 'AU']; 20 const oecdList = ["AU", "AT", "BE", "CA", "CL", "CZ", "DK", "EE", "FI", "FR", "DE", "GR", "HU", "IS", "IE", "IL", "IT", "JP", "KR", "LU", "MX", "NL", "NZ", "NO", "PL", "PT", "SK", "ES", "SE", "CH", "TR", "GB", "US"]; 21 const aseanList = ['BN', 'KH', 'ID', 'LA', 'MY', 'MM', 'PH', 'SG', 'TH', 'VN'] 22 const lacList = ['BR', 'CL', 'CO', 'CR', 'CU', 'DO', 'EC', 'SV', 'GT', 'HN', 'JM', 'MX', 'PE', 'PY', 'SR', 'UY', 'VE', 'VC'] 23 const cladList = ['MX', 'PE', 'VE', 'DO', 'CL', 'BO', 'AR', 'CO', 'EC', 'HN', 'GT', 'PA', 'NI', 'CR', 'UY', 'BR', 'CU', 'SV', 'PY', 'PT', 'AD', 'AO', 'GQ'] 24 const africanUnionList = [ 25 'DZ', 'AO', 'BJ', 'BW', 'BF', 'BI', 'CV', 'CM', 'CF', 'TD', 'KM', 'CG', 'CD', 'DJ', 'ER', 'SZ', 'ET', 'GA', 'GM', 'GH', 'GN', 'GW', 'CI', 'LS', 'LR', 'LY', 'MG', 'MW', 'ML', 'MR', 'MU', 'MA', 'MZ', 'NA', 'NE', 'RW', 'ST', 'SN', 'SC', 'SL', 'SO', 'ZA', 'SS', 'SD', 'TZ', 'TG', 'TN', 'UG', 'ZM', 'ZW' 26 ]; 27 const easternAfricaList = ["KM", "DJ", "KE", "MG", "MU", "SC", "SO", "SS", "UG"]; 28 const southernAfricaList = ['BW', 'MW', 'MZ', 'NA', 'ZA', 'ZM', 'ZW']; 29 const councilofeurope = ['AL', 'AD', 'AM', 'AT', 'AZ', 'BE', 'BA', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'GE', 'DE', 'GR', 'HU', 'IS', 'IE', 'IT', 'LV', 'LI', 'LT', 'LU', 'MT', 'MD', 'MC', 'ME', 'NL', 'MK', 'NO', 'PL', 'PT', 'RO', 'SM', 'RS', 'SK', '
29SI', 'ES', 'SE', 'CH', 'TR', 'UA', 'GB'] 30 const cisList = ["AM", "AZ", "BY", "KZ", "KG", "RU", "TJ", "UZ", "TM"] 31 const franceterritoryList = ["GP", "GF", "MQ", "RE", "YT"] 32 33 if (euList.includes(countryCode)) { 34 // countryCode = 'Europe' 35 groupCode.push('Europe') 36 } 37 if(bricsList.includes(countryCode)){ 38 groupCode.push('BRICS') 39 } 40 if (g7List.includes(countryCode)) { 41 groupCode.push('G7') 42 } 43 if (g20List.includes(countryCode)) { 44 groupCode.push('G20') 45 } 46 if (oecdList.includes(countryCode)) { 47 groupCode.push('OECD') 48 } 49 if (councilofeurope.includes(countryCode)) { 50 groupCode.push('COE') 51 } 52 if (aseanList.includes(countryCode)) { 53 groupCode.push('ASEAN') 54 } 55 if (lacList.includes(countryCode)) { 56 groupCode.push('LAC') 57 } 58 if (cladList.includes(countryCode)) { 59 groupCode.push('CLAD') 60 } 61 if (africanUnionList.includes(countryCode)) { 62 groupCode.push('AFU') 63 } 64 if (easternAfricaList.includes(countryCode)) { 65 groupCode.push('EARFAI') 66 } 67 if (southernAfricaList.includes(countryCode)) { 68 groupCode.push('SARFAI') 69 } 70 if (cisList.includes(countryCode)) { 71 groupCode.push('CIS') 72 } 73 if (franceterritoryList.includes(countryCode)) { 74 groupCode.push('FR') 75 } 76 return groupCode 77} 78 79const globalReg = { 80 data: { 81 regStatus: { 82 }, 83 84 // category: { 85 // thresholdMax: 2, 86 // thresholdMin: 0 87 // } 88 }, 89 // applyData: 'category', 90 values: { 91 92 //---OCEANIA & PACIFIC--- 93 // Australia 94 AU: { regStatus: 'Read summary' }, 95 // Cook Island 96 CK: { regStatus: 'Read summary' }, 97 // Fiji 98 FJ: { regStatus: 'Read summary' }, 99 // Federated States of Micronesia 100 FM: { regStatus: 'Read summary' }, 101 // Kiribati 102 KI: { regStatus: 'Read summary' }, 103 // New Caledonia 104 NC: { regStatus: 'Read summary' }, 105 // Naura 106 NR: { regStatus: 'Read summary' }, 107 // Niue 108 NU: { regStatus: 'Read summary' }, 109 // New Zealand 110 NZ: { regStatus: 'Read summary' }, 111 // French Polynesia 112 PF: { regStatus: 'Read summary' }, 113 //Papua New Guinea 114 PG: { regStatus: 'Read summary' }, 115 // Palau 116 PW: { regStatus: 'Read summary' }, 117 // Soloman Islands 118 SB: { regStatus: 'Read summary' }, 119 // Tonga 120 TO: { regStatus: 'Read summary' }, 121 // Tuvalu 122 TV: { regStatus: 'Read summary' }, 123 // Vanuatu 124 VU: { regStatus: 'Read summary' }, 125 // Samoa 126 WS: { regStatus: 'Read summary' }, 127 //Timor-Leste 128 "TL": { regStatus: 'Read summary' }, 129 130 131 //---EUROPE--- 132 // European Union 133 //Austria 134 AT: { regStatus: 'Read summary' }, 135 //Belgium 136 BE: { regStatus: 'Read summary' }, 137 //Bulgaria 138 BG: { regStatus: 'Read summary' }, 139 //Croatia 140 HR: { regStatus: 'Read summary' }, 141 //Cyprus 142 CY: { regStatus: 'Read summary' }, 143 //Czech Republic 144 CZ: { regStatus: 'Read summary' }, 145 //Denmark 146 DK: { regStatus: 'Read summary' }, 147 //Estonia 148 EE: { regStatus: 'Read summary' }, 149 //Finland 150 FI: { regStatus: 'Read summary' }, 151 //France 152 FR: { regStatus: 'Read summary' }, 153 //Germany 154 DE: { regStatus: 'Read summary' }, 155 //Greece 156 GR: { regStatus: 'Read summary' }, 157 //Hungary 158 HU: { regStatus: 'Read summary' }, 159 //Ireland 160 IE: { regStatus: 'Read summary' }, 161 //Italy 162 IT: { regStatus: 'Read summary' }, 163 //Latvia 164 LV: { regStatus: 'Read summary' }, 165 //Lithuana 166 LT: { regStatus: 'Read summary' }, 167 //Luxembourg 168 LU: { regStatus: 'Read summary' }, 169 //Malta 170 MT: { regStatus: 'Read summary' }, 171 //Netherlands 172 NL: { regStatus: 'Read summary' }, 173 //Poland 174 PL: { regStatus: 'Read summary' }, 175 //Portugal 176 PT: { regStatus: 'Read summary' }, 177 //Romania 178 RO: { regStatus: 'Read summary' }, 179 //Slovakia 180 SK: { regStatus: 'Read summary' }, 181 //Slovenia 182 SI: { regStatus: 'Read summary' }, 183 //Spain 184 ES: { regStatus: 'Read summary' }, 185 //Sweden 186 SE: { regStatus: 'Read summary' }, 187 188 // Great Britain 189 GB: { regStatus: 'Read summary' }, 190 //Switzerland 191 CH: { regStatus: 'Read summary' }, 192 //Norway 193 NO: { regStatus: 'Read summary' }, 194 //Gibraltar 195 GI: { regStatus: 'Read summary' }, 196 //Iceland 197 IS: { regStatus: 'Read summary' }, 198 //Ã land Islands 199 AX: { regStatus: 'Read summary' }, 200 //Faroe Islands 201 FO: { regStatus: 'Read summary' }, 202 //Greenland 203 GL: { regStatus: 'Read summary' }, 204 //Vatican City 205 VA: { regStatus: 'Read summary' }, 206 //Liechtenstein 207 LI: { regStatus: 'Read summary'}, 208 209 // Armenia 210 AM: { regStatus: 'Read Summary' }, 211 // Azerbaijan 212 AZ: { regStatus: 'Read Summary' }, 213 // Republic of Moldova 214 MD: { regStatus: 'Read Summary' }, 215 // Monaco 216 MC: { regStatus: 'Read Summary' }, 217 // Montenegro 218 ME: { regStatus: 'Read Summary' }, 219 // North Macedonia 220 MK: { regStatus: 'Read Summary' }, 221 // Kosovo 222 XK: { regStatus: 'Read Summary' }, 223 224 //France territory 225 //French Guiana 226 GF: { regStatus: 'Read summary' }, 227 //Guadeloupe 228 GP: { regStatus: 'Read Summary' }, 229 //Martinique 230 MQ: { regStatus: 'Read Summary' }, 231 //Reunion 232 RE: { regStatus: 'Read Summary' }, 233 //Mayotte 234 YT: { regStatus: 'Read Summary' }, 235 236 //---EAST EUROPE--- 237 //Russia 238 RU: { regStatus: 'Read summary' }, 239 //Ukraine 240 UA: { regStatus: 'Read summary' }, 241 //Albania 242 AL: { regStatus: 'Read summary' }, 243 // Bosnia and Herzegovina 244 BA: { regStatus: 'Read Summary' }, 245 // Georgia 246 GE: { regStatus: 'Read Summary' }, 247 // San Marino 248 SM: { regStatus: 'Read Summary' }, 249 // Serbia 250 RS: { regStatus: 'Read Summary' }, 251 252 253 //---EAST ASIA--- 254 //China 255 CN: { regStatus: 'Read summary' }, 256 //Taiwan 257 TW: { regStatus: 'Read summary' }, 258 //Hong Kong 259 HK: { regStatus: 'Read summary' }, 260 //Macau 261 MO: { regStatus: 'Read summary' }, 262 //Japan 263 JP: { regStatus: 'Read summary' }, 264 //South Korea 265 KR: { regStatus: 'Read summary' }, 266 //North Korea 267 KP: { regStatus: 'Read summary' }, 268 269 270 //---SOUTH ASIA--- 271 //Bangladesh 272 BD: { regStatus: 'Read summary' }, 273 //Bhutan 274 BT: { regStatus: 'Read summary' }, 275 // India 276 IN: { regStatus: 'Read summary' }, 277 // Pakistan 278 PK: { regStatus: 'Read summary' }, 279 // Sri Lanka 280 LK: { regStatus: 'Read summary' }, 281 // Nepal 282 NP: { regStatus: 'Read summary' }, 283 284 //---CENTRAL ASIA--- 285 //Uzbekistan 286 UZ: { regStatus: 'Read summary' }, 287 //Kazakhstan 288 KZ: { regStatus: 'Read summary' }, 289 //Mongolia 290 MN: { regStatus: 'Read summary' }, 291 //Belarus 292 BY: { regStatus: 'Read summary' }, 293 //Kyrgyzstan 294 KG: { regStatus: 'Read summary' }, 295 //Tajikistan 296 TJ: { regStatus: 'Read summary' }, 297 //Turkmenistan 298 TM: { regStatus: 'Read summary' }, 299 //Afghanistan 300 AF: { regStatus: 'Read summary' }, 301 302 //---SOUTH EAST ASIA--- 303 //Malaysia 304 MY: { regStatus: 'Read summary' }, 305 // Indonesia 306 ID: { regStatus: 'Read summary' }, 307 // Singapore 308 SG: { regStatus: 'Read summary' }, 309 // Thailand 310 TH: { regStatus: 'Read summary' }, 311 // Vietnam 312 VN: { regStatus: 'Read summary' }, 313 // Brunei 314 BN: { regStatus: 'Read summary' }, 315 //Cambodia 316 KH: { regStatus: 'Read summary' }, 317 //Laos 318 LA: { regStatus: 'Read summary' }, 319 //Myanmar 320 MM: { regStatus: 'Read summary' }, 321 //Phillipines 322 PH: { regStatus: 'Read summary' }, 323 324 325 //---MIDDLE EAST--- 326 // Saudia Arabia 327 SA: { regStatus: 'Read summary' }, 328 // Israel 329 IL: { regStatus: 'Read summary' }, 330 //Turkey 331 TR: { regStatus: 'Read summary' }, 332 //United Arab Emirates 333 AE: { regStatus: 'Read summary' }, 334 //Lebanon 335 LB: { regStatus: 'Read summary' }, 336 //Oman 337 OM: { regStatus: 'Read summary' }, 338 //Qatar 339 QA: { regStatus: 'Read summary' }, 340 //Bahrain 341 BH: { regStatus: 'Read summary' }, 342 //Iran 343 IR: { regStatus: 'Read summary' }, 344 //Iraq 345 IQ: { regStatus: 'Read summary' }, 346 //Syria 347 SY: { regStatus: 'Read summary' }, 348 //Jordan 349 JO: { regStatus: 'Read summary' }, 350 //Yemen 351 YE: { regStatus: 'Read summary' }, 352 //Kuwait 353 KW: { regStatus: 'Read summary' }, 354 //Palestine 355 PS: { regStatus: 'Read summary' }, 356 357 //---AMERICA--- 358 //United States 359 US: { regStatus: 'Read summary' }, 360 //Brazil 361 BR: { regStatus: 'Read summary' },
362 //Canada 363 CA: { regStatus: 'Read summary' }, 364 //Argentina 365 AR: { regStatus: 'Read summary' }, 366 //Peru 367 PE: { regStatus: 'Read summary' }, 368 //Costa Rica 369 CR: { regStatus: 'Read summary' }, 370 //Chile 371 CL: { regStatus: 'Read summary' }, 372 //Colombia 373 CO: { regStatus: 'Read summary' }, 374 //Costa Rica 375 CR: { regStatus: 'Read summary' }, 376 //Cuba 377 CU: { regStatus: 'Read summary' }, 378 //Dominican Republic 379 DO: { regStatus: 'Read summary' }, 380 //Ecuador 381 EC: { regStatus: 'Read summary' }, 382 //El Salvador 383 SV: { regStatus: 'Read summary' }, 384 //Guatemala 385 GT: { regStatus: 'Read summary' }, 386 //Honduras 387 HN: { regStatus: 'Read summary' }, 388 //Jamaica 389 JM: { regStatus: 'Read summary' }, 390 //Mexico 391 MX: { regStatus: 'Read summary' }, 392 //Peru 393 PE: { regStatus: 'Read summary' }, 394 //Paraguay 395 PY: { regStatus: 'Read summary' }, 396 //Suriname 397 SR: { regStatus: 'Read summary' }, 398 //Uruguay 399 UY: { regStatus: 'Read summary' }, 400 //Venezuela 401 VE: { regStatus: 'Read summary' }, 402 //Bolivia 403 BO: { regStatus: 'Read summary' }, 404 //Panama 405 PA: { regStatus: 'Read summary' }, 406 //Nicaragua 407 NI: { regStatus: 'Read summary' }, 408 //Andorra 409 AD: { regStatus: 'Read summary' }, 410 //Saint Vincent and the Grenadines 411 VC: { regStatus: 'Read summary' }, 412 // Liechtenstein 413 LI: { regStatus: 'Read Summary' }, 414 // Antigua and Barbuda 415 AG: { regStatus: 'Read Summary' }, 416 417 //Bahamas 418 "BS": { regStatus: 'Read summary' }, 419 //Haiti 420 "HT": { regStatus: 'Read summary' }, 421 //Cayman Islands 422 "KY": { regStatus: 'Read summary' }, 423 //Puerto Rico 424 "PR": { regStatus: 'Read summary' }, 425 //Dominica 426 "DM": { regStatus: 'Read summary' }, 427 //Montserrat 428 "MS": { regStatus: 'Read summary' }, 429 //Saint Kitts and Nevis 430 "KN": { regStatus: 'Read summary' }, 431 //Sint Maarten 432 "SX": { regStatus: 'Read summary' }, 433 //Anguilla 434 "AI": { regStatus: 'Read summary' }, 435 //US Virgin Islands 436 "VI": { regStatus: 'Read summary' }, 437 //British Virgin Islands 438 "VG": { regStatus: 'Read summary' }, 439 //Trinidad and Tobago 440 "TT": { regStatus: 'Read summary' }, 441 //Grenada 442 "GD": { regStatus: 'Read summary' }, 443 //Barbados 444 "BB": { regStatus: 'Read summary' }, 445 //Aruba 446 "AW": { regStatus: 'Read summary' }, 447 //Curaçao 448 "CW": { regStatus: 'Read summary' }, 449 //Falkland Islands 450 "FK": { regStatus: 'Read summary' }, 451 //Turks and Caicos 452 "TC": { regStatus: 'Read summary' }, 453 //Saint Lucia 454 "LC": { regStatus: 'Read summary' }, 455 //Belize 456 "BZ": { regStatus: 'Read summary' }, 457 458 //---AFRICA--- 459 //Algeria 460 DZ: { regStatus: 'Read summary' }, 461 //Angola 462 AO: { regStatus: 'Read summary' }, 463 //Benin 464 BJ: { regStatus: 'Read summary' }, 465 //Botswana 466 BW: { regStatus: 'Read summary' }, 467 //Burkina Faso 468 BF: { regStatus: 'Read summary' }, 469 //Burundi 470 BI: { regStatus: 'Read summary' }, 471 //Cabo Verde 472 CV: { regStatus: 'Read summary' }, 473 //Cameroon 474 CM: { regStatus: 'Read summary' }, 475 //Central African Republic 476 CF: { regStatus: 'Read summary' }, 477 //Chad 478 TD: { regStatus: 'Read summary' }, 479 //Comoros 480 KM: { regStatus: 'Read summary' }, 481 //Congo (Congo-Brazzaville) 482 CG: { regStatus: 'Read summary' }, 483 //Congo, Democratic Republic of the 484 CD: { regStatus: 'Read summary' }, 485 //Djibouti 486 DJ: { regStatus: 'Read summary' }, 487 //Egypt 488 EG: { regStatus: 'Read summary' }, 489 //Equatorial Guinea 490 GQ: { regStatus: 'Read summary' }, 491 //Eritrea 492 ER: { regStatus: 'Read summary' }, 493 //Eswatini (fmr. "Swaziland") 494 SZ: { regStatus: 'Read summary' }, 495 //Ethiopia 496 ET: { regStatus: 'Read summary' }, 497 //Gabon 498 GA: { regStatus: 'Read summary' }, 499 //Gambia 500 GM: { regStatus: 'Read summary' }, 501 //Ghana 502 GH: { regStatus: 'Read summary' }, 503 //Guinea 504 GN: { regStatus: 'Read summary' }, 505 //Guinea-Bissau 506 GW: { regStatus: 'Read summary' }, 507 //Guyana 508 GY: { regStatus: 'Read summary' },
509 //Ivory Coast 510 CI: { regStatus: 'Read summary' }, 511 //Kenya 512 KE: { regStatus: 'Read summary' }, 513 //Lesotho 514 LS: { regStatus: 'Read summary' }, 515 //Liberia 516 LR: { regStatus: 'Read summary' }, 517 //Libya 518 LY: { regStatus: 'Read summary' }, 519 //Madagascar 520 MG: { regStatus: 'Read summary' }, 521 //Malawi 522 MW: { regStatus: 'Read summary' }, 523 //Mali 524 ML: { regStatus: 'Read summary' }, 525 //Mauritania 526 MR: { regStatus: 'Read summary' }, 527 //Mauritius 528 MU: { regStatus: 'Read summary' }, 529 //Morocco 530 MA: { regStatus: 'Read summary' }, 531 //Mozambique 532 MZ: { regStatus: 'Read summary' }, 533 //Namibia 534 NA: { regStatus: 'Read summary' }, 535 //Niger 536 NE: { regStatus: 'Read summary' }, 537 //Nigeria 538 NG: { regStatus: 'Read summary' }, 539 //Rwanda 540 RW: { regStatus: 'Read summary' }, 541 //São Tomé and PrÃncipe 542 ST: { regStatus: 'Read summary' }, 543 //Senegal 544 SN: { regStatus: 'Read summary' }, 545 //Seychelles 546 SC: { regStatus: 'Read summary' }, 547 //Sierra Leone 548 SL: { regStatus: 'Read summary' }, 549 //Somalia 550 SO: { regStatus: 'Read summary' }, 551 //South Africa 552 ZA: { regStatus: 'Read summary' }, 553 //South Sudan 554 SS: { regStatus: 'Read summary' }, 555 //Sudan 556 SD: { regStatus: 'Read summary' }, 557 //Tanzania 558 TZ: { regStatus: 'Read summary' }, 559 //Togo 560 TG: { regStatus: 'Read summary' }, 561 //Tunisia 562 TN: { regStatus: 'Read summary' }, 563 //Uganda 564 UG: { regStatus: 'Read summary' }, 565 //Western Sahara 566 EH: { regStatus: 'Read summary' }, 567 //Zambia 568 ZM: { regStatus: 'Read summary' }, 569 //Zimbabwe 570 ZW: { regStatus: 'Read summary' } 571 572 } 573}; 574 575/** 576 * Template 577 "****": { 578 "name": { 579 "style": "h2", 580 "text": "**********" 581 }, 582 "bulletSummaryHeading": { 583 "style": "h4", 584 "text": "Regulation Status" 585 }, 586 "bulletSummary": { 587 "style": "ul", 588 "text": [ 589 "***************", 590 "********************", 591 "**************" 592 ] 593 }, 594 "recentHeadlinesHeading": { 595 "style": "h4", 596 "text": "Latest Developments" 597 }, 598 "_recentHeadlines": { 599 "style": "ul", 600 "text": [ 601 { 602 "href": "**************", 603 "label": "**************", 604 "desc": "*******************************************************" 605 }, 606 ] 607 }, 608 "linkHeading": { 609 "style": "h4", 610 "text": "Official Materials" 611 }, 612 "_usefulLinks": { 613 "style": "ul", 614 "text": [ 615 { 616 "href": "**************", 617 "label": "**********************", 618 "desc": "*************************************************************" 619 } 620 ] 621 }, 622 "proseSummaryHeading": { 623 "style": "h4", 624 "text": "My Commentary" 625 }, 626 "proseSummary": { 627 "style": "ul", 628 "text": [ 629 "*******", 630 "********" 631 ] 632 }, 633 634 "linkedinHeading": { 635 "style": "h4", 636 "text": "My Linkedin Posts" 637 }, 638 639 "linkedin":{ 640 style: 'iframe', 641 refs: [ 642 "***" 643 ] 644 }, 645 "communityInput": { 646 "style": "ul", 647 "text": [ 648 { 649 "href": "***", 650 "label": "", 651 "desc": " .", 652 "myRec": "" 653 }, 654 ] 655 }, 656 }, 657 658 * 659 */ 660 661 662 663 664 665 666
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.