sweetcorn 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +30 -0
- package/dist/diffusion-kernels.d.ts +44 -0
- package/dist/diffusion-kernels.js +81 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +96 -0
- package/dist/threshold-maps.json +426 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.js +1 -0
- package/package.json +42 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025-present, delucis
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# `sweetcorn`
|
|
2
|
+
|
|
3
|
+
JavaScript image dithering tools for Sharp
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install sweetcorn
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic usage
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
import sharp from 'sharp';
|
|
15
|
+
import sweetcorn from 'sweetcorn';
|
|
16
|
+
|
|
17
|
+
const inputImage = await sharp('input.png');
|
|
18
|
+
const ditheredImage = await sweetcorn(inputImage, {
|
|
19
|
+
algorithm: 'floyd-steinberg',
|
|
20
|
+
});
|
|
21
|
+
ditheredImage.webp({ lossless: true }).toFile('output.webp');
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Documentation
|
|
25
|
+
|
|
26
|
+
Learn more in the [Sweetcorn documentation site](https://delucis.github.io/sweetcorn/).
|
|
27
|
+
|
|
28
|
+
## License
|
|
29
|
+
|
|
30
|
+
[MIT](https://github.com/delucis/sweetcorn/blob/main/LICENSE)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
type Kernel = number[][];
|
|
2
|
+
/**
|
|
3
|
+
* Error diffusion dither kernels.
|
|
4
|
+
*
|
|
5
|
+
* Each kernel uses a 2D array to represent how the error from a pixel’s quantization should be
|
|
6
|
+
* distributed to neighbouring pixels. The central pixel in the first row is the current pixel,
|
|
7
|
+
* so its value is always 0, same for any preceding pixels as we process pixels from left to right
|
|
8
|
+
* and error should only be distributed to unvisited pixels.
|
|
9
|
+
*
|
|
10
|
+
* For example, the simplest kernel here distributes half the error to the pixel on the right, and
|
|
11
|
+
* half the error to the pixel directly below:
|
|
12
|
+
* ```
|
|
13
|
+
* ┌─────┬─────┐
|
|
14
|
+
* │ * │ 0.5 │
|
|
15
|
+
* ├─────┼─────┤
|
|
16
|
+
* │ 0.5 │ │
|
|
17
|
+
* └─────┴─────┘
|
|
18
|
+
* ```
|
|
19
|
+
* In our code this is represented as:
|
|
20
|
+
* ```js
|
|
21
|
+
* [
|
|
22
|
+
* [0, 0.5],
|
|
23
|
+
* [0.5, 0],
|
|
24
|
+
* ]
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* Each non-zero value in the kernel represents the fraction of the error to distribute to that
|
|
28
|
+
* pixel. The sum of all values in a kernel is usually ≤1.
|
|
29
|
+
*
|
|
30
|
+
*/
|
|
31
|
+
declare const _default: {
|
|
32
|
+
'simple-diffusion': Kernel;
|
|
33
|
+
'floyd-steinberg': Kernel;
|
|
34
|
+
'false-floyd-steinberg': Kernel;
|
|
35
|
+
'jarvis-judice-ninke': Kernel;
|
|
36
|
+
stucki: Kernel;
|
|
37
|
+
burkes: Kernel;
|
|
38
|
+
atkinson: Kernel;
|
|
39
|
+
pigeon: Kernel;
|
|
40
|
+
sierra: Kernel;
|
|
41
|
+
'sierra-two-row': Kernel;
|
|
42
|
+
'sierra-lite': Kernel;
|
|
43
|
+
};
|
|
44
|
+
export default _default;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error diffusion dither kernels.
|
|
3
|
+
*
|
|
4
|
+
* Each kernel uses a 2D array to represent how the error from a pixel’s quantization should be
|
|
5
|
+
* distributed to neighbouring pixels. The central pixel in the first row is the current pixel,
|
|
6
|
+
* so its value is always 0, same for any preceding pixels as we process pixels from left to right
|
|
7
|
+
* and error should only be distributed to unvisited pixels.
|
|
8
|
+
*
|
|
9
|
+
* For example, the simplest kernel here distributes half the error to the pixel on the right, and
|
|
10
|
+
* half the error to the pixel directly below:
|
|
11
|
+
* ```
|
|
12
|
+
* ┌─────┬─────┐
|
|
13
|
+
* │ * │ 0.5 │
|
|
14
|
+
* ├─────┼─────┤
|
|
15
|
+
* │ 0.5 │ │
|
|
16
|
+
* └─────┴─────┘
|
|
17
|
+
* ```
|
|
18
|
+
* In our code this is represented as:
|
|
19
|
+
* ```js
|
|
20
|
+
* [
|
|
21
|
+
* [0, 0.5],
|
|
22
|
+
* [0.5, 0],
|
|
23
|
+
* ]
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* Each non-zero value in the kernel represents the fraction of the error to distribute to that
|
|
27
|
+
* pixel. The sum of all values in a kernel is usually ≤1.
|
|
28
|
+
*
|
|
29
|
+
*/
|
|
30
|
+
export default {
|
|
31
|
+
'simple-diffusion': [
|
|
32
|
+
[0, 0.5],
|
|
33
|
+
[0.5, 0],
|
|
34
|
+
],
|
|
35
|
+
'floyd-steinberg': [
|
|
36
|
+
[0, 0, 7 / 16],
|
|
37
|
+
[3 / 16, 5 / 16, 1 / 16],
|
|
38
|
+
],
|
|
39
|
+
'false-floyd-steinberg': [
|
|
40
|
+
[0, 3 / 8],
|
|
41
|
+
[3 / 8, 2 / 8],
|
|
42
|
+
],
|
|
43
|
+
'jarvis-judice-ninke': [
|
|
44
|
+
[0, 0, 0, 7 / 48, 5 / 48],
|
|
45
|
+
[3 / 48, 5 / 48, 7 / 48, 5 / 48, 3 / 48],
|
|
46
|
+
[1 / 48, 3 / 48, 5 / 48, 3 / 48, 1 / 48],
|
|
47
|
+
],
|
|
48
|
+
stucki: [
|
|
49
|
+
[0, 0, 0, 8 / 42, 4 / 42],
|
|
50
|
+
[2 / 42, 4 / 42, 8 / 42, 4 / 42, 2 / 42],
|
|
51
|
+
[1 / 42, 2 / 42, 4 / 42, 2 / 42, 1 / 42],
|
|
52
|
+
],
|
|
53
|
+
burkes: [
|
|
54
|
+
[0, 0, 0, 8 / 32, 4 / 32],
|
|
55
|
+
[2 / 32, 4 / 32, 8 / 32, 4 / 32, 2 / 32],
|
|
56
|
+
],
|
|
57
|
+
atkinson: [
|
|
58
|
+
[0, 0, 1 / 8, 1 / 8],
|
|
59
|
+
[1 / 8, 1 / 8, 1 / 8, 0],
|
|
60
|
+
[0, 1 / 8, 0, 0],
|
|
61
|
+
],
|
|
62
|
+
// see: https://hbfs.wordpress.com/2013/12/31/dithering/
|
|
63
|
+
pigeon: [
|
|
64
|
+
[0, 0, 0, 2 / 14, 1 / 14],
|
|
65
|
+
[0, 2 / 14, 2 / 14, 2 / 14, 0],
|
|
66
|
+
[1 / 14, 0, 1 / 14, 0, 1 / 14],
|
|
67
|
+
],
|
|
68
|
+
sierra: [
|
|
69
|
+
[0, 0, 0, 5 / 32, 3 / 32],
|
|
70
|
+
[2 / 32, 4 / 32, 5 / 32, 4 / 32, 2 / 32],
|
|
71
|
+
[0, 2 / 32, 3 / 32, 2 / 32, 0],
|
|
72
|
+
],
|
|
73
|
+
'sierra-two-row': [
|
|
74
|
+
[0, 0, 0, 4 / 16, 3 / 16],
|
|
75
|
+
[1 / 16, 2 / 16, 3 / 16, 2 / 16, 1 / 16],
|
|
76
|
+
],
|
|
77
|
+
'sierra-lite': [
|
|
78
|
+
[0, 0, 2 / 4],
|
|
79
|
+
[1 / 4, 1 / 4, 0],
|
|
80
|
+
],
|
|
81
|
+
};
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Sharp } from 'sharp';
|
|
2
|
+
import type { DitheringAlgorithm } from './types';
|
|
3
|
+
export type { DitheringAlgorithm };
|
|
4
|
+
interface SweetcornOptions {
|
|
5
|
+
algorithm: DitheringAlgorithm;
|
|
6
|
+
}
|
|
7
|
+
export default function sweetcorn(image: Sharp, { algorithm }: SweetcornOptions): Promise<Sharp>;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import thresholdMaps from './threshold-maps.json' with { type: 'json' };
|
|
2
|
+
import diffusionKernels from './diffusion-kernels';
|
|
3
|
+
let sharp;
|
|
4
|
+
async function loadSharp() {
|
|
5
|
+
let sharpImport;
|
|
6
|
+
try {
|
|
7
|
+
sharpImport = (await import('sharp')).default;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
throw new Error('Missing sharp module');
|
|
11
|
+
}
|
|
12
|
+
// Disable the `sharp` `libvips` cache as it errors when the file is too small and operations are happening too fast (runs into a race condition) https://github.com/lovell/sharp/issues/3935#issuecomment-1881866341
|
|
13
|
+
sharpImport.cache(false);
|
|
14
|
+
return sharpImport;
|
|
15
|
+
}
|
|
16
|
+
export default async function sweetcorn(image, { algorithm }) {
|
|
17
|
+
if (!sharp)
|
|
18
|
+
sharp = await loadSharp();
|
|
19
|
+
// Convert image to greyscale before dithering.
|
|
20
|
+
// We use gamma to linearize the colorspace, and improve the perceptual quality.
|
|
21
|
+
image.gamma(2.2, 1).greyscale();
|
|
22
|
+
// Get raw pixel data for this image.
|
|
23
|
+
const rawPixels = await image.raw().toBuffer({ resolveWithObject: true });
|
|
24
|
+
const thresholdMap = thresholdMaps[algorithm];
|
|
25
|
+
const diffusionKernel = diffusionKernels[algorithm];
|
|
26
|
+
if (thresholdMap) {
|
|
27
|
+
applyThresholdMap(rawPixels, thresholdMap);
|
|
28
|
+
}
|
|
29
|
+
else if (diffusionKernel) {
|
|
30
|
+
applyDiffusionKernel(rawPixels, diffusionKernel);
|
|
31
|
+
}
|
|
32
|
+
else if (algorithm === 'white-noise') {
|
|
33
|
+
// White noise dithering (pretty rough and ugly)
|
|
34
|
+
for (let index = 0; index < rawPixels.data.length; index++) {
|
|
35
|
+
const pixelValue = rawPixels.data[index];
|
|
36
|
+
rawPixels.data[index] = pixelValue / 255 < Math.random() ? 0 : 255;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else if (algorithm === 'threshold') {
|
|
40
|
+
// Basic quantization
|
|
41
|
+
for (let index = 0; index < rawPixels.data.length; index++) {
|
|
42
|
+
const pixelValue = rawPixels.data[index];
|
|
43
|
+
rawPixels.data[index] = pixelValue < 128 ? 0 : 255;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Astro supports outputting different formats, but dithered images like this respond quite
|
|
47
|
+
// predictably to different compression methods. PNG and lossless WebP outperform lossy
|
|
48
|
+
// formats for this type of image, with lossless WebP producing slightly smaller images, so we
|
|
49
|
+
// use that here.
|
|
50
|
+
const outputImage = sharp(rawPixels.data, { raw: rawPixels.info });
|
|
51
|
+
return outputImage;
|
|
52
|
+
}
|
|
53
|
+
function applyDiffusionKernel(rawPixels, kernel) {
|
|
54
|
+
const kernelWidth = kernel[0].length;
|
|
55
|
+
const kernelHeight = kernel.length;
|
|
56
|
+
const kernelRadius = Math.floor((kernelWidth - 1) / 2);
|
|
57
|
+
for (let index = 0; index < rawPixels.data.length; index++) {
|
|
58
|
+
const original = rawPixels.data[index];
|
|
59
|
+
const quantized = original < 128 ? 0 : 255;
|
|
60
|
+
rawPixels.data[index] = quantized;
|
|
61
|
+
const error = original - quantized;
|
|
62
|
+
const [x, y] = [index % rawPixels.info.width, Math.floor(index / rawPixels.info.width)];
|
|
63
|
+
const width = rawPixels.info.width;
|
|
64
|
+
const height = rawPixels.info.height;
|
|
65
|
+
for (let diffX = 0; diffX < kernelWidth; diffX++) {
|
|
66
|
+
for (let diffY = 0; diffY < kernelHeight; diffY++) {
|
|
67
|
+
const diffusionWeight = kernel[diffY][diffX];
|
|
68
|
+
if (diffusionWeight === 0)
|
|
69
|
+
continue;
|
|
70
|
+
const offsetX = diffX - kernelRadius;
|
|
71
|
+
const offsetY = diffY;
|
|
72
|
+
const neighborX = x + offsetX;
|
|
73
|
+
const neighborY = y + offsetY;
|
|
74
|
+
// Ensure we don't go out of bounds
|
|
75
|
+
if (neighborX >= 0 && neighborY >= 0 && neighborX < width && neighborY < height) {
|
|
76
|
+
const neighborIndex = neighborY * width + neighborX;
|
|
77
|
+
rawPixels.data[neighborIndex] = clamp(rawPixels.data[neighborIndex] + error * diffusionWeight);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function clamp(value, min = 0, max = 255) {
|
|
84
|
+
return Math.min(Math.max(value, min), max);
|
|
85
|
+
}
|
|
86
|
+
/** Applies a threshold map to the raw pixel data for ordered dithering. */
|
|
87
|
+
function applyThresholdMap(rawPixels, thresholdMap) {
|
|
88
|
+
const mapWidth = thresholdMap[0].length;
|
|
89
|
+
const mapHeight = thresholdMap.length;
|
|
90
|
+
for (let index = 0; index < rawPixels.data.length; index++) {
|
|
91
|
+
const pixelValue = rawPixels.data[index];
|
|
92
|
+
const [x, y] = [index % rawPixels.info.width, Math.floor(index / rawPixels.info.width)];
|
|
93
|
+
const threshold = thresholdMap[y % mapHeight][x % mapWidth];
|
|
94
|
+
rawPixels.data[index] = pixelValue < threshold ? 0 : 255;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
{
|
|
2
|
+
"bayer-2": [
|
|
3
|
+
[0, 128],
|
|
4
|
+
[192, 64]
|
|
5
|
+
],
|
|
6
|
+
"bayer-4": [
|
|
7
|
+
[0, 128, 32, 160],
|
|
8
|
+
[192, 64, 224, 96],
|
|
9
|
+
[48, 176, 16, 144],
|
|
10
|
+
[240, 112, 208, 80]
|
|
11
|
+
],
|
|
12
|
+
"bayer-8": [
|
|
13
|
+
[0, 128, 32, 160, 8, 136, 40, 168],
|
|
14
|
+
[192, 64, 224, 96, 200, 72, 232, 104],
|
|
15
|
+
[48, 176, 16, 144, 56, 184, 24, 152],
|
|
16
|
+
[240, 112, 208, 80, 248, 120, 216, 88],
|
|
17
|
+
[12, 140, 44, 172, 4, 132, 36, 164],
|
|
18
|
+
[204, 76, 236, 108, 196, 68, 228, 100],
|
|
19
|
+
[60, 188, 28, 156, 52, 180, 20, 148],
|
|
20
|
+
[252, 124, 220, 92, 244, 116, 212, 84]
|
|
21
|
+
],
|
|
22
|
+
"bayer-16": [
|
|
23
|
+
[0, 128, 32, 160, 8, 136, 40, 168, 2, 130, 34, 162, 10, 138, 42, 170],
|
|
24
|
+
[192, 64, 224, 96, 200, 72, 232, 104, 194, 66, 226, 98, 202, 74, 234, 106],
|
|
25
|
+
[48, 176, 16, 144, 56, 184, 24, 152, 50, 178, 18, 146, 58, 186, 26, 154],
|
|
26
|
+
[240, 112, 208, 80, 248, 120, 216, 88, 242, 114, 210, 82, 250, 122, 218, 90],
|
|
27
|
+
[12, 140, 44, 172, 4, 132, 36, 164, 14, 142, 46, 174, 6, 134, 38, 166],
|
|
28
|
+
[204, 76, 236, 108, 196, 68, 228, 100, 206, 78, 238, 110, 198, 70, 230, 102],
|
|
29
|
+
[60, 188, 28, 156, 52, 180, 20, 148, 62, 190, 30, 158, 54, 182, 22, 150],
|
|
30
|
+
[252, 124, 220, 92, 244, 116, 212, 84, 254, 126, 222, 94, 246, 118, 214, 86],
|
|
31
|
+
[3, 131, 35, 163, 11, 139, 43, 171, 1, 129, 33, 161, 9, 137, 41, 169],
|
|
32
|
+
[195, 67, 227, 99, 203, 75, 235, 107, 193, 65, 225, 97, 201, 73, 233, 105],
|
|
33
|
+
[51, 179, 19, 147, 59, 187, 27, 155, 49, 177, 17, 145, 57, 185, 25, 153],
|
|
34
|
+
[243, 115, 211, 83, 251, 123, 219, 91, 241, 113, 209, 81, 249, 121, 217, 89],
|
|
35
|
+
[15, 143, 47, 175, 7, 135, 39, 167, 13, 141, 45, 173, 5, 133, 37, 165],
|
|
36
|
+
[207, 79, 239, 111, 199, 71, 231, 103, 205, 77, 237, 109, 197, 69, 229, 101],
|
|
37
|
+
[63, 191, 31, 159, 55, 183, 23, 151, 61, 189, 29, 157, 53, 181, 21, 149],
|
|
38
|
+
[255, 127, 223, 95, 247, 119, 215, 87, 253, 125, 221, 93, 245, 117, 213, 85]
|
|
39
|
+
],
|
|
40
|
+
"blue-noise": [
|
|
41
|
+
[
|
|
42
|
+
134, 22, 92, 59, 163, 190, 12, 155, 181, 119, 233, 47, 175, 12, 113, 141, 47, 183, 111, 196,
|
|
43
|
+
40, 213, 63, 237, 35, 54, 175, 76, 121, 166, 74, 141, 196, 61, 222, 100, 45, 253, 182, 226,
|
|
44
|
+
27, 131, 150, 93, 65, 235, 108, 219, 42, 91, 230, 71, 173, 210, 134, 55, 192, 28, 149, 174,
|
|
45
|
+
123, 88, 1, 103
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
48, 248, 173, 7, 240, 76, 109, 251, 67, 203, 7, 103, 225, 65, 200, 237, 89, 215, 28, 74, 135,
|
|
49
|
+
97, 16, 186, 141, 217, 110, 200, 24, 52, 226, 20, 241, 85, 183, 16, 138, 65, 124, 163, 83,
|
|
50
|
+
200, 41, 252, 180, 11, 191, 78, 132, 200, 162, 25, 245, 12, 103, 227, 168, 77, 237, 15, 215,
|
|
51
|
+
141, 203, 234
|
|
52
|
+
],
|
|
53
|
+
[
|
|
54
|
+
82, 145, 112, 216, 128, 40, 208, 20, 136, 87, 150, 195, 132, 157, 40, 172, 9, 131, 158, 227,
|
|
55
|
+
179, 245, 159, 119, 69, 7, 88, 145, 245, 186, 131, 104, 164, 36, 115, 236, 156, 210, 12, 49,
|
|
56
|
+
116, 231, 5, 106, 137, 54, 152, 27, 250, 58, 121, 99, 146, 81, 185, 42, 3, 127, 105, 46, 72,
|
|
57
|
+
181, 29, 161
|
|
58
|
+
],
|
|
59
|
+
[
|
|
60
|
+
209, 16, 67, 193, 95, 150, 171, 55, 221, 34, 246, 53, 17, 92, 219, 110, 67, 253, 99, 52, 3,
|
|
61
|
+
81, 44, 199, 228, 166, 236, 33, 65, 96, 2, 201, 54, 136, 215, 25, 76, 177, 97, 245, 186, 70,
|
|
62
|
+
171, 215, 76, 204, 238, 103, 172, 3, 221, 182, 47, 203, 118, 253, 146, 199, 218, 165, 244,
|
|
63
|
+
108, 59, 121
|
|
64
|
+
],
|
|
65
|
+
[
|
|
66
|
+
37, 227, 177, 49, 24, 230, 82, 120, 188, 161, 109, 76, 184, 241, 28, 145, 208, 38, 191, 123,
|
|
67
|
+
151, 220, 107, 27, 93, 47, 128, 208, 178, 160, 230, 78, 247, 173, 63, 193, 108, 35, 218, 148,
|
|
68
|
+
23, 135, 45, 155, 25, 119, 39, 84, 138, 195, 37, 77, 238, 17, 160, 71, 96, 56, 24, 87, 134, 7,
|
|
69
|
+
231, 187
|
|
70
|
+
],
|
|
71
|
+
[
|
|
72
|
+
103, 152, 85, 254, 133, 200, 1, 245, 97, 22, 202, 223, 141, 116, 59, 180, 85, 162, 20, 241,
|
|
73
|
+
60, 183, 140, 252, 154, 191, 78, 11, 115, 45, 140, 31, 118, 8, 93, 149, 250, 133, 56, 84, 201,
|
|
74
|
+
110, 242, 86, 228, 185, 162, 217, 64, 231, 116, 155, 129, 60, 221, 28, 178, 238, 156, 192, 41,
|
|
75
|
+
207, 145, 74
|
|
76
|
+
],
|
|
77
|
+
[
|
|
78
|
+
242, 124, 6, 164, 108, 67, 175, 44, 145, 63, 128, 8, 42, 168, 213, 4, 231, 113, 73, 207, 95,
|
|
79
|
+
13, 209, 67, 17, 106, 217, 147, 250, 88, 218, 191, 157, 211, 229, 48, 14, 198, 169, 2, 224,
|
|
80
|
+
63, 179, 14, 132, 60, 8, 112, 24, 166, 90, 11, 208, 171, 101, 138, 209, 10, 112, 68, 250, 97,
|
|
81
|
+
173, 17
|
|
82
|
+
],
|
|
83
|
+
[
|
|
84
|
+
44, 216, 60, 193, 37, 224, 152, 80, 214, 238, 173, 92, 251, 74, 101, 130, 50, 197, 139, 35,
|
|
85
|
+
172, 132, 43, 121, 181, 234, 60, 26, 197, 66, 13, 99, 42, 73, 130, 185, 82, 119, 239, 99, 128,
|
|
86
|
+
34, 148, 212, 104, 246, 195, 142, 239, 46, 189, 251, 34, 80, 243, 48, 122, 80, 229, 147, 22,
|
|
87
|
+
125, 56, 201
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
112, 175, 143, 239, 97, 19, 116, 189, 11, 108, 52, 193, 146, 23, 189, 245, 156, 17, 238, 103,
|
|
91
|
+
225, 75, 243, 88, 160, 39, 130, 164, 102, 172, 127, 237, 179, 110, 19, 158, 233, 62, 29, 157,
|
|
92
|
+
186, 253, 95, 44, 169, 30, 74, 93, 206, 125, 68, 107, 144, 194, 1, 152, 189, 31, 171, 50, 186,
|
|
93
|
+
224, 83, 158
|
|
94
|
+
],
|
|
95
|
+
[
|
|
96
|
+
26, 92, 12, 76, 134, 204, 250, 40, 135, 162, 31, 227, 119, 216, 64, 34, 91, 185, 59, 160, 7,
|
|
97
|
+
187, 143, 217, 1, 205, 84, 244, 48, 225, 34, 148, 60, 254, 200, 36, 101, 140, 213, 49, 79, 11,
|
|
98
|
+
199, 68, 121, 223, 177, 38, 152, 12, 224, 180, 52, 118, 232, 68, 217, 92, 135, 207, 105, 3,
|
|
99
|
+
134, 246
|
|
100
|
+
],
|
|
101
|
+
[
|
|
102
|
+
67, 197, 225, 182, 48, 163, 64, 90, 210, 234, 68, 86, 6, 163, 105, 141, 222, 123, 82, 209,
|
|
103
|
+
115, 54, 27, 104, 62, 118, 185, 21, 142, 203, 79, 193, 2, 137, 84, 221, 176, 6, 191, 120, 230,
|
|
104
|
+
172, 134, 234, 154, 3, 109, 249, 55, 169, 86, 25, 209, 91, 167, 40, 111, 254, 12, 66, 240,
|
|
105
|
+
163, 41, 210
|
|
106
|
+
],
|
|
107
|
+
[
|
|
108
|
+
151, 123, 35, 106, 236, 5, 123, 180, 21, 106, 145, 176, 206, 51, 241, 180, 3, 45, 254, 30,
|
|
109
|
+
149, 238, 201, 169, 251, 150, 221, 73, 110, 12, 120, 230, 96, 166, 48, 125, 66, 247, 88, 153,
|
|
110
|
+
24, 106, 57, 26, 87, 215, 135, 197, 102, 235, 129, 149, 248, 14, 136, 204, 21, 155, 178, 122,
|
|
111
|
+
30, 78, 185, 101
|
|
112
|
+
],
|
|
113
|
+
[
|
|
114
|
+
16, 253, 168, 143, 73, 196, 152, 244, 53, 200, 15, 252, 98, 132, 24, 76, 159, 198, 130, 177,
|
|
115
|
+
92, 70, 128, 40, 89, 17, 51, 175, 241, 158, 54, 177, 31, 236, 206, 20, 163, 110, 34, 220, 71,
|
|
116
|
+
204, 248, 165, 189, 62, 32, 78, 10, 211, 33, 75, 176, 48, 227, 71, 187, 53, 84, 224, 200, 143,
|
|
117
|
+
231, 54
|
|
118
|
+
],
|
|
119
|
+
[
|
|
120
|
+
216, 85, 58, 18, 213, 96, 27, 113, 78, 168, 122, 62, 34, 195, 226, 114, 214, 97, 60, 11, 223,
|
|
121
|
+
161, 15, 184, 229, 135, 100, 211, 39, 89, 219, 130, 69, 108, 151, 78, 228, 198, 57, 178, 126,
|
|
122
|
+
5, 139, 43, 118, 239, 144, 166, 185, 116, 58, 194, 103, 124, 159, 90, 119, 234, 138, 42, 95,
|
|
123
|
+
10, 114, 175
|
|
124
|
+
],
|
|
125
|
+
[
|
|
126
|
+
136, 188, 118, 233, 176, 40, 227, 138, 213, 42, 229, 186, 158, 85, 143, 55, 16, 151, 232, 190,
|
|
127
|
+
108, 48, 214, 117, 59, 196, 153, 4, 124, 172, 17, 202, 247, 7, 186, 44, 132, 13, 142, 242, 96,
|
|
128
|
+
192, 77, 212, 96, 14, 207, 93, 40, 228, 156, 244, 7, 201, 31, 242, 3, 211, 24, 194, 169, 243,
|
|
129
|
+
72, 38
|
|
130
|
+
],
|
|
131
|
+
[
|
|
132
|
+
2, 242, 44, 90, 125, 157, 57, 186, 1, 89, 144, 108, 7, 243, 38, 189, 238, 74, 35, 135, 79,
|
|
133
|
+
249, 142, 86, 30, 235, 72, 183, 249, 62, 146, 101, 49, 139, 222, 90, 252, 104, 168, 26, 46,
|
|
134
|
+
160, 227, 23, 154, 179, 52, 254, 132, 76, 19, 138, 85, 221, 61, 144, 174, 99, 69, 153, 55,
|
|
135
|
+
124, 210, 158
|
|
136
|
+
],
|
|
137
|
+
[
|
|
138
|
+
106, 67, 163, 205, 9, 77, 241, 100, 166, 249, 26, 216, 70, 204, 125, 170, 101, 122, 166, 206,
|
|
139
|
+
24, 171, 5, 202, 162, 127, 24, 111, 85, 227, 30, 183, 79, 165, 118, 31, 192, 61, 212, 82, 234,
|
|
140
|
+
119, 58, 106, 233, 72, 121, 1, 162, 214, 105, 181, 38, 166, 101, 191, 45, 131, 247, 111, 223,
|
|
141
|
+
16, 90, 192
|
|
142
|
+
],
|
|
143
|
+
[
|
|
144
|
+
132, 227, 29, 139, 224, 190, 22, 127, 68, 197, 55, 133, 177, 95, 23, 66, 220, 1, 245, 53, 115,
|
|
145
|
+
230, 66, 106, 246, 53, 218, 194, 45, 161, 114, 199, 234, 14, 213, 71, 156, 1, 116, 188, 147,
|
|
146
|
+
8, 174, 195, 37, 140, 219, 187, 62, 30, 199, 236, 69, 122, 250, 20, 82, 208, 9, 176, 36, 144,
|
|
147
|
+
251, 49
|
|
148
|
+
],
|
|
149
|
+
[
|
|
150
|
+
201, 86, 180, 103, 39, 112, 150, 212, 36, 153, 106, 234, 41, 161, 253, 149, 45, 178, 80, 146,
|
|
151
|
+
94, 188, 151, 41, 181, 96, 147, 14, 132, 213, 19, 67, 128, 45, 178, 97, 230, 134, 242, 35, 68,
|
|
152
|
+
215, 130, 89, 244, 18, 83, 110, 240, 91, 134, 49, 154, 10, 205, 139, 233, 151, 63, 94, 203,
|
|
153
|
+
80, 168, 24
|
|
154
|
+
],
|
|
155
|
+
[
|
|
156
|
+
152, 11, 243, 63, 171, 254, 52, 91, 236, 182, 8, 86, 207, 16, 109, 213, 90, 126, 196, 15, 214,
|
|
157
|
+
32, 129, 225, 9, 75, 170, 233, 62, 97, 254, 152, 89, 242, 143, 27, 197, 51, 88, 177, 101, 249,
|
|
158
|
+
28, 51, 150, 170, 202, 41, 149, 175, 20, 108, 223, 174, 90, 58, 31, 108, 184, 239, 128, 57,
|
|
159
|
+
221, 110
|
|
160
|
+
],
|
|
161
|
+
[
|
|
162
|
+
235, 52, 129, 211, 82, 7, 192, 131, 20, 115, 217, 145, 65, 131, 52, 182, 17, 237, 39, 162,
|
|
163
|
+
252, 61, 88, 206, 119, 243, 37, 110, 203, 181, 36, 171, 4, 204, 56, 122, 165, 18, 217, 144,
|
|
164
|
+
14, 160, 204, 114, 221, 64, 125, 8, 214, 57, 251, 190, 77, 36, 117, 193, 165, 226, 46, 23,
|
|
165
|
+
159, 4, 183, 70
|
|
166
|
+
],
|
|
167
|
+
[
|
|
168
|
+
192, 96, 167, 22, 119, 159, 223, 64, 170, 77, 47, 249, 168, 198, 231, 76, 142, 205, 100, 72,
|
|
169
|
+
135, 177, 22, 155, 54, 191, 135, 79, 8, 142, 55, 116, 188, 100, 224, 77, 252, 107, 65, 202,
|
|
170
|
+
118, 56, 81, 173, 12, 100, 236, 181, 85, 120, 141, 6, 150, 241, 215, 134, 2, 86, 122, 216,
|
|
171
|
+
101, 248, 139, 31
|
|
172
|
+
],
|
|
173
|
+
[
|
|
174
|
+
214, 146, 38, 196, 235, 97, 28, 146, 243, 201, 124, 30, 100, 9, 117, 33, 170, 56, 120, 224, 7,
|
|
175
|
+
107, 199, 232, 99, 15, 218, 160, 245, 87, 231, 212, 68, 33, 151, 11, 182, 134, 227, 41, 189,
|
|
176
|
+
233, 136, 38, 253, 142, 46, 156, 226, 32, 69, 205, 94, 53, 21, 71, 254, 203, 142, 74, 196, 50,
|
|
177
|
+
86, 116
|
|
178
|
+
],
|
|
179
|
+
[
|
|
180
|
+
9, 75, 249, 56, 143, 72, 213, 43, 104, 2, 157, 189, 80, 239, 155, 194, 94, 246, 27, 188, 153,
|
|
181
|
+
241, 69, 42, 141, 179, 61, 33, 114, 197, 23, 133, 162, 245, 117, 198, 45, 87, 26, 155, 94, 2,
|
|
182
|
+
180, 211, 92, 195, 72, 16, 105, 192, 169, 232, 115, 183, 159, 100, 174, 57, 14, 179, 30, 151,
|
|
183
|
+
229, 173
|
|
184
|
+
],
|
|
185
|
+
[
|
|
186
|
+
222, 127, 181, 108, 4, 172, 126, 182, 86, 230, 57, 218, 136, 43, 64, 222, 15, 129, 212, 48,
|
|
187
|
+
89, 29, 123, 167, 85, 253, 126, 190, 70, 169, 50, 102, 9, 86, 219, 64, 144, 237, 173, 113,
|
|
188
|
+
247, 76, 124, 61, 23, 165, 122, 212, 247, 55, 131, 24, 42, 213, 129, 233, 36, 149, 225, 109,
|
|
189
|
+
239, 126, 25, 63
|
|
190
|
+
],
|
|
191
|
+
[
|
|
192
|
+
157, 19, 87, 202, 229, 49, 252, 16, 197, 143, 114, 21, 178, 204, 109, 145, 83, 161, 70, 175,
|
|
193
|
+
143, 214, 187, 5, 205, 26, 101, 222, 1, 149, 215, 237, 187, 53, 169, 17, 103, 212, 9, 57, 201,
|
|
194
|
+
34, 151, 239, 107, 228, 35, 144, 91, 1, 160, 84, 246, 65, 6, 81, 117, 192, 69, 41, 165, 80,
|
|
195
|
+
199, 104
|
|
196
|
+
],
|
|
197
|
+
[
|
|
198
|
+
46, 240, 138, 33, 151, 76, 111, 159, 67, 37, 244, 72, 96, 5, 254, 31, 188, 236, 1, 113, 248,
|
|
199
|
+
58, 97, 231, 71, 158, 45, 139, 244, 90, 118, 36, 137, 209, 122, 249, 158, 73, 126, 184, 138,
|
|
200
|
+
217, 171, 17, 199, 82, 186, 62, 173, 203, 223, 110, 190, 148, 172, 203, 25, 248, 133, 98, 215,
|
|
201
|
+
3, 252, 185
|
|
202
|
+
],
|
|
203
|
+
[
|
|
204
|
+
83, 171, 65, 222, 96, 194, 23, 220, 134, 207, 174, 154, 223, 130, 168, 60, 120, 43, 206, 82,
|
|
205
|
+
20, 129, 41, 145, 112, 216, 177, 77, 21, 202, 62, 178, 78, 22, 89, 43, 192, 30, 232, 85, 14,
|
|
206
|
+
98, 69, 118, 50, 133, 11, 239, 119, 45, 71, 137, 13, 98, 46, 223, 91, 161, 12, 183, 60, 145,
|
|
207
|
+
36, 124
|
|
208
|
+
],
|
|
209
|
+
[
|
|
210
|
+
22, 214, 113, 10, 178, 125, 236, 48, 85, 11, 100, 28, 52, 81, 200, 102, 215, 154, 134, 189,
|
|
211
|
+
221, 167, 238, 182, 25, 57, 236, 107, 188, 132, 27, 254, 152, 219, 181, 143, 100, 209, 52,
|
|
212
|
+
153, 254, 41, 225, 182, 245, 151, 208, 99, 23, 147, 253, 34, 201, 241, 126, 67, 145, 39, 207,
|
|
213
|
+
238, 119, 175, 95, 233
|
|
214
|
+
],
|
|
215
|
+
[
|
|
216
|
+
191, 54, 157, 246, 38, 63, 165, 105, 181, 250, 127, 196, 238, 148, 20, 244, 9, 91, 57, 31,
|
|
217
|
+
102, 66, 9, 87, 201, 129, 13, 152, 42, 226, 165, 95, 4, 115, 62, 228, 8, 132, 175, 105, 191,
|
|
218
|
+
124, 146, 3, 89, 36, 72, 163, 225, 189, 95, 157, 60, 167, 21, 186, 235, 111, 55, 85, 17, 222,
|
|
219
|
+
69, 148
|
|
220
|
+
],
|
|
221
|
+
[
|
|
222
|
+
129, 99, 207, 78, 144, 216, 1, 139, 210, 43, 68, 166, 112, 40, 190, 74, 162, 228, 178, 252,
|
|
223
|
+
140, 205, 121, 154, 244, 72, 170, 89, 206, 68, 110, 50, 203, 239, 33, 164, 83, 242, 28, 70,
|
|
224
|
+
21, 208, 59, 109, 203, 175, 235, 53, 126, 79, 16, 214, 113, 83, 208, 101, 7, 170, 138, 199,
|
|
225
|
+
158, 47, 202, 7
|
|
226
|
+
],
|
|
227
|
+
[
|
|
228
|
+
251, 42, 15, 120, 198, 95, 239, 73, 29, 153, 232, 6, 88, 218, 120, 140, 45, 109, 23, 77, 161,
|
|
229
|
+
39, 228, 53, 28, 190, 116, 250, 5, 126, 233, 189, 140, 72, 125, 198, 49, 111, 218, 161, 235,
|
|
230
|
+
83, 165, 248, 28, 130, 103, 6, 197, 43, 178, 130, 234, 36, 149, 53, 219, 74, 253, 27, 100,
|
|
231
|
+
241, 111, 172
|
|
232
|
+
],
|
|
233
|
+
[
|
|
234
|
+
61, 162, 234, 184, 24, 52, 173, 113, 193, 94, 123, 209, 61, 176, 26, 235, 185, 206, 130, 218,
|
|
235
|
+
3, 91, 180, 109, 142, 224, 38, 58, 182, 149, 19, 37, 91, 176, 13, 247, 148, 184, 39, 141, 119,
|
|
236
|
+
9, 186, 46, 153, 66, 213, 147, 249, 107, 221, 57, 3, 175, 248, 124, 194, 37, 121, 188, 66,
|
|
237
|
+
135, 32, 81
|
|
238
|
+
],
|
|
239
|
+
[
|
|
240
|
+
221, 140, 107, 69, 154, 129, 221, 19, 247, 50, 171, 22, 146, 252, 96, 68, 11, 87, 59, 171,
|
|
241
|
+
114, 240, 63, 204, 10, 94, 160, 213, 99, 239, 80, 216, 153, 226, 105, 60, 88, 2, 199, 94, 56,
|
|
242
|
+
212, 128, 95, 223, 13, 179, 83, 29, 167, 70, 146, 195, 106, 78, 20, 144, 92, 162, 2, 231, 152,
|
|
243
|
+
209, 182
|
|
244
|
+
],
|
|
245
|
+
[
|
|
246
|
+
4, 90, 32, 210, 249, 84, 40, 161, 139, 81, 228, 198, 105, 46, 164, 224, 136, 158, 244, 40,
|
|
247
|
+
191, 134, 21, 166, 249, 74, 123, 23, 137, 46, 170, 122, 55, 21, 200, 162, 133, 224, 69, 251,
|
|
248
|
+
176, 33, 237, 71, 192, 115, 239, 56, 136, 232, 18, 92, 242, 47, 166, 226, 58, 240, 208, 110,
|
|
249
|
+
45, 87, 21, 121
|
|
250
|
+
],
|
|
251
|
+
[
|
|
252
|
+
198, 232, 169, 57, 9, 194, 102, 206, 4, 118, 32, 70, 133, 5, 189, 115, 32, 216, 104, 16, 75,
|
|
253
|
+
222, 151, 105, 37, 190, 220, 176, 66, 207, 10, 192, 252, 116, 44, 234, 31, 169, 114, 18, 146,
|
|
254
|
+
104, 161, 19, 142, 42, 164, 98, 190, 117, 201, 161, 126, 11, 211, 115, 155, 13, 77, 180, 218,
|
|
255
|
+
168, 239, 55
|
|
256
|
+
],
|
|
257
|
+
[
|
|
258
|
+
75, 134, 112, 187, 144, 121, 241, 51, 181, 237, 147, 174, 210, 230, 59, 81, 199, 53, 178, 128,
|
|
259
|
+
205, 48, 86, 235, 59, 140, 1, 90, 244, 109, 156, 92, 70, 144, 183, 78, 99, 209, 50, 232, 77,
|
|
260
|
+
218, 53, 198, 254, 79, 25, 211, 4, 51, 81, 35, 228, 67, 186, 87, 41, 192, 127, 29, 65, 131,
|
|
261
|
+
98, 157
|
|
262
|
+
],
|
|
263
|
+
[
|
|
264
|
+
254, 43, 18, 217, 65, 32, 153, 74, 98, 214, 56, 90, 19, 120, 156, 247, 10, 148, 89, 253, 156,
|
|
265
|
+
117, 27, 202, 170, 114, 230, 49, 143, 27, 227, 39, 212, 4, 242, 127, 13, 148, 193, 125, 183,
|
|
266
|
+
11, 133, 89, 120, 176, 225, 131, 156, 250, 216, 140, 174, 109, 29, 137, 251, 220, 100, 149,
|
|
267
|
+
246, 10, 193, 27
|
|
268
|
+
],
|
|
269
|
+
[
|
|
270
|
+
176, 148, 100, 237, 87, 180, 226, 14, 166, 25, 112, 194, 240, 39, 96, 172, 126, 227, 30, 65,
|
|
271
|
+
3, 225, 183, 130, 16, 77, 205, 162, 195, 79, 131, 187, 162, 101, 58, 172, 220, 70, 29, 93, 44,
|
|
272
|
+
245, 164, 210, 6, 60, 107, 45, 84, 177, 62, 20, 93, 244, 201, 161, 61, 18, 167, 50, 184, 80,
|
|
273
|
+
214, 110
|
|
274
|
+
],
|
|
275
|
+
[
|
|
276
|
+
224, 71, 193, 159, 8, 133, 107, 203, 127, 247, 43, 159, 77, 143, 207, 22, 71, 196, 112, 189,
|
|
277
|
+
165, 98, 73, 44, 250, 99, 33, 121, 15, 249, 53, 114, 23, 225, 200, 32, 110, 250, 168, 212,
|
|
278
|
+
150, 109, 69, 37, 231, 151, 202, 240, 30, 104, 125, 195, 153, 52, 2, 80, 119, 208, 85, 234,
|
|
279
|
+
115, 35, 140, 54
|
|
280
|
+
],
|
|
281
|
+
[
|
|
282
|
+
1, 124, 32, 55, 207, 251, 36, 59, 84, 187, 137, 216, 1, 184, 51, 222, 103, 43, 237, 133, 51,
|
|
283
|
+
240, 145, 211, 173, 152, 234, 67, 179, 97, 155, 236, 73, 135, 88, 154, 50, 137, 1, 79, 232,
|
|
284
|
+
22, 174, 127, 188, 78, 19, 141, 191, 232, 10, 214, 76, 224, 133, 238, 180, 44, 141, 5, 203,
|
|
285
|
+
164, 243, 93
|
|
286
|
+
],
|
|
287
|
+
[
|
|
288
|
+
154, 211, 244, 139, 75, 96, 174, 147, 219, 19, 99, 65, 123, 254, 81, 137, 179, 153, 9, 83,
|
|
289
|
+
203, 34, 17, 117, 59, 4, 136, 212, 39, 219, 5, 200, 43, 178, 10, 232, 195, 96, 204, 123, 56,
|
|
290
|
+
193, 94, 242, 50, 115, 170, 93, 55, 136, 165, 46, 118, 31, 169, 103, 21, 223, 190, 98, 66,
|
|
291
|
+
128, 22, 184
|
|
292
|
+
],
|
|
293
|
+
[
|
|
294
|
+
38, 106, 83, 164, 21, 196, 121, 4, 240, 50, 177, 233, 30, 166, 109, 15, 242, 67, 217, 174,
|
|
295
|
+
109, 158, 218, 92, 183, 199, 84, 110, 170, 139, 82, 105, 146, 254, 118, 75, 176, 20, 243, 38,
|
|
296
|
+
142, 218, 14, 149, 27, 210, 250, 0, 221, 72, 98, 254, 182, 87, 206, 60, 154, 73, 125, 253, 42,
|
|
297
|
+
215, 79, 235
|
|
298
|
+
],
|
|
299
|
+
[
|
|
300
|
+
59, 195, 12, 181, 233, 41, 213, 64, 164, 117, 140, 196, 92, 47, 227, 193, 36, 95, 122, 25, 59,
|
|
301
|
+
248, 74, 131, 239, 32, 52, 251, 21, 64, 232, 184, 17, 62, 209, 34, 132, 57, 157, 102, 171, 76,
|
|
302
|
+
117, 200, 90, 62, 128, 152, 184, 33, 201, 18, 141, 229, 10, 136, 240, 34, 173, 14, 151, 177,
|
|
303
|
+
104, 135
|
|
304
|
+
],
|
|
305
|
+
[
|
|
306
|
+
162, 228, 115, 51, 131, 101, 156, 86, 193, 32, 77, 7, 212, 157, 128, 62, 171, 142, 198, 230,
|
|
307
|
+
137, 185, 44, 13, 148, 105, 208, 157, 124, 196, 47, 120, 224, 164, 98, 150, 238, 86, 190, 225,
|
|
308
|
+
6, 248, 53, 164, 234, 179, 36, 79, 105, 241, 123, 158, 68, 41, 113, 187, 96, 201, 83, 114,
|
|
309
|
+
223, 53, 6, 205
|
|
310
|
+
],
|
|
311
|
+
[
|
|
312
|
+
20, 91, 147, 253, 69, 219, 26, 248, 106, 221, 171, 246, 111, 19, 80, 209, 8, 251, 45, 84, 0,
|
|
313
|
+
104, 202, 165, 229, 64, 179, 10, 95, 240, 150, 28, 87, 44, 198, 5, 217, 120, 24, 66, 127, 185,
|
|
314
|
+
32, 135, 8, 108, 216, 195, 15, 166, 48, 91, 218, 170, 248, 56, 17, 160, 232, 63, 191, 140,
|
|
315
|
+
247, 74
|
|
316
|
+
],
|
|
317
|
+
[
|
|
318
|
+
126, 210, 30, 190, 5, 175, 141, 56, 15, 133, 43, 62, 146, 187, 240, 107, 161, 72, 114, 176,
|
|
319
|
+
155, 216, 79, 118, 28, 88, 129, 226, 39, 76, 177, 210, 133, 247, 114, 73, 169, 48, 199, 149,
|
|
320
|
+
84, 209, 99, 220, 75, 158, 54, 237, 136, 65, 229, 203, 6, 126, 79, 150, 208, 44, 122, 25, 94,
|
|
321
|
+
35, 111, 185
|
|
322
|
+
],
|
|
323
|
+
[
|
|
324
|
+
233, 42, 83, 158, 111, 79, 207, 119, 234, 160, 204, 87, 219, 27, 52, 139, 33, 218, 194, 23,
|
|
325
|
+
242, 37, 56, 252, 173, 215, 49, 194, 140, 111, 2, 69, 168, 19, 188, 145, 31, 252, 106, 228,
|
|
326
|
+
17, 155, 58, 174, 253, 122, 24, 88, 174, 114, 29, 147, 104, 194, 28, 223, 102, 138, 250, 171,
|
|
327
|
+
204, 230, 159, 55
|
|
328
|
+
],
|
|
329
|
+
[
|
|
330
|
+
172, 138, 239, 202, 48, 245, 29, 189, 71, 98, 10, 177, 127, 101, 169, 228, 90, 128, 60, 146,
|
|
331
|
+
98, 131, 189, 143, 5, 108, 155, 18, 249, 186, 217, 46, 229, 102, 57, 211, 93, 138, 63, 175,
|
|
332
|
+
43, 236, 113, 13, 41, 192, 146, 207, 3, 246, 187, 71, 39, 238, 176, 61, 0, 187, 68, 12, 148,
|
|
333
|
+
80, 21, 97
|
|
334
|
+
],
|
|
335
|
+
[
|
|
336
|
+
2, 63, 99, 14, 127, 150, 92, 165, 46, 144, 225, 37, 251, 66, 204, 4, 183, 236, 13, 207, 70,
|
|
337
|
+
234, 25, 86, 201, 67, 232, 84, 54, 93, 153, 127, 82, 158, 243, 14, 180, 219, 0, 128, 89, 187,
|
|
338
|
+
138, 205, 95, 69, 230, 106, 52, 83, 124, 220, 156, 89, 134, 113, 242, 87, 217, 115, 51, 130,
|
|
339
|
+
215, 191
|
|
340
|
+
],
|
|
341
|
+
[
|
|
342
|
+
123, 220, 165, 186, 229, 63, 215, 6, 238, 197, 116, 80, 159, 20, 148, 82, 50, 106, 154, 179,
|
|
343
|
+
35, 112, 171, 228, 124, 41, 181, 120, 170, 27, 241, 15, 202, 33, 135, 116, 49, 82, 159, 243,
|
|
344
|
+
210, 25, 73, 244, 167, 131, 31, 182, 158, 213, 22, 172, 54, 13, 207, 163, 45, 150, 32, 180,
|
|
345
|
+
235, 167, 41, 252
|
|
346
|
+
],
|
|
347
|
+
[
|
|
348
|
+
152, 29, 75, 43, 113, 23, 178, 103, 128, 28, 60, 183, 211, 108, 238, 196, 123, 28, 253, 84,
|
|
349
|
+
220, 142, 59, 18, 161, 246, 11, 221, 137, 211, 64, 113, 182, 225, 72, 168, 235, 191, 39, 117,
|
|
350
|
+
61, 105, 156, 50, 6, 223, 61, 250, 12, 136, 98, 229, 111, 255, 73, 25, 226, 125, 199, 94, 74,
|
|
351
|
+
14, 112, 84
|
|
352
|
+
],
|
|
353
|
+
[
|
|
354
|
+
206, 102, 246, 132, 204, 82, 138, 255, 74, 168, 231, 0, 131, 54, 31, 141, 222, 167, 62, 125,
|
|
355
|
+
5, 194, 96, 212, 77, 143, 98, 69, 35, 102, 196, 144, 46, 96, 8, 210, 102, 20, 147, 200, 10,
|
|
356
|
+
231, 185, 121, 197, 101, 150, 117, 77, 196, 63, 34, 181, 137, 194, 102, 172, 59, 8, 248, 155,
|
|
357
|
+
211, 184, 53
|
|
358
|
+
],
|
|
359
|
+
[
|
|
360
|
+
9, 169, 190, 16, 235, 162, 35, 188, 49, 206, 104, 152, 247, 90, 187, 68, 8, 94, 204, 42, 160,
|
|
361
|
+
243, 37, 175, 117, 51, 205, 184, 255, 159, 4, 81, 173, 249, 150, 57, 136, 70, 255, 87, 170,
|
|
362
|
+
134, 35, 86, 214, 40, 180, 26, 220, 164, 245, 149, 85, 4, 51, 237, 81, 213, 106, 133, 30, 66,
|
|
363
|
+
137, 233
|
|
364
|
+
],
|
|
365
|
+
[
|
|
366
|
+
125, 64, 145, 47, 95, 61, 226, 8, 91, 142, 20, 76, 42, 169, 216, 116, 245, 179, 139, 229, 107,
|
|
367
|
+
76, 131, 227, 2, 237, 152, 19, 115, 50, 231, 213, 26, 117, 197, 33, 226, 164, 121, 49, 220,
|
|
368
|
+
67, 248, 18, 160, 73, 240, 93, 128, 46, 16, 120, 190, 219, 157, 128, 19, 146, 189, 47, 178,
|
|
369
|
+
220, 93, 38
|
|
370
|
+
],
|
|
371
|
+
[
|
|
372
|
+
243, 86, 222, 111, 197, 150, 122, 211, 111, 244, 163, 226, 198, 105, 16, 157, 38, 80, 23, 58,
|
|
373
|
+
192, 18, 156, 64, 190, 90, 40, 129, 75, 177, 93, 133, 64, 163, 78, 107, 180, 3, 198, 28, 148,
|
|
374
|
+
102, 191, 126, 227, 144, 2, 193, 58, 206, 100, 229, 66, 29, 109, 206, 40, 243, 70, 228, 116,
|
|
375
|
+
16, 151, 198
|
|
376
|
+
],
|
|
377
|
+
[
|
|
378
|
+
163, 30, 179, 2, 250, 26, 169, 71, 182, 37, 61, 117, 27, 140, 64, 231, 130, 210, 114, 168,
|
|
379
|
+
248, 95, 218, 32, 112, 167, 222, 193, 240, 147, 32, 186, 245, 11, 206, 236, 51, 91, 241, 112,
|
|
380
|
+
211, 12, 167, 58, 97, 44, 112, 163, 232, 138, 174, 40, 159, 243, 75, 181, 97, 164, 2, 88, 170,
|
|
381
|
+
255, 75, 108
|
|
382
|
+
],
|
|
383
|
+
[
|
|
384
|
+
52, 208, 122, 59, 137, 88, 49, 236, 15, 129, 219, 191, 85, 246, 202, 97, 54, 188, 225, 6, 143,
|
|
385
|
+
49, 179, 135, 251, 73, 15, 102, 58, 8, 224, 104, 48, 122, 148, 24, 132, 157, 70, 183, 47, 85,
|
|
386
|
+
239, 24, 209, 185, 255, 71, 31, 83, 7, 195, 91, 130, 10, 226, 58, 123, 203, 144, 25, 57, 188,
|
|
387
|
+
6
|
|
388
|
+
],
|
|
389
|
+
[
|
|
390
|
+
233, 82, 153, 230, 187, 214, 108, 199, 147, 80, 173, 11, 151, 43, 175, 3, 163, 29, 89, 66,
|
|
391
|
+
118, 209, 81, 9, 198, 51, 139, 163, 210, 125, 197, 70, 166, 215, 93, 65, 194, 222, 35, 136,
|
|
392
|
+
159, 223, 115, 147, 78, 127, 18, 149, 212, 123, 246, 145, 214, 51, 172, 140, 196, 34, 246,
|
|
393
|
+
107, 212, 127, 220, 142
|
|
394
|
+
],
|
|
395
|
+
[
|
|
396
|
+
176, 18, 103, 38, 73, 13, 159, 40, 99, 252, 48, 107, 235, 121, 79, 137, 255, 110, 149, 240,
|
|
397
|
+
164, 35, 237, 100, 154, 217, 88, 245, 39, 81, 154, 22, 238, 37, 185, 251, 113, 15, 101, 247,
|
|
398
|
+
7, 61, 188, 38, 174, 217, 56, 95, 186, 47, 107, 65, 25, 104, 253, 82, 19, 153, 72, 49, 163,
|
|
399
|
+
79, 36, 116
|
|
400
|
+
],
|
|
401
|
+
[
|
|
402
|
+
64, 249, 205, 167, 119, 246, 132, 224, 21, 195, 156, 71, 208, 18, 223, 184, 67, 215, 44, 200,
|
|
403
|
+
17, 130, 172, 47, 121, 30, 177, 18, 111, 182, 229, 118, 139, 80, 7, 160, 48, 176, 207, 81,
|
|
404
|
+
197, 130, 94, 249, 4, 109, 237, 160, 13, 229, 167, 221, 154, 200, 39, 119, 231, 99, 188, 235,
|
|
405
|
+
26, 183, 241, 92
|
|
406
|
+
],
|
|
407
|
+
[
|
|
408
|
+
155, 47, 136, 5, 184, 54, 83, 174, 66, 123, 0, 181, 139, 58, 102, 37, 124, 14, 173, 80, 104,
|
|
409
|
+
191, 74, 227, 195, 68, 231, 135, 205, 64, 3, 55, 175, 202, 105, 137, 230, 63, 120, 38, 167,
|
|
410
|
+
22, 208, 155, 72, 141, 34, 202, 129, 75, 33, 94, 0, 129, 178, 63, 205, 166, 5, 132, 100, 147,
|
|
411
|
+
12, 201
|
|
412
|
+
],
|
|
413
|
+
[
|
|
414
|
+
29, 112, 75, 236, 98, 209, 26, 143, 206, 242, 97, 219, 33, 193, 155, 233, 204, 94, 138, 222,
|
|
415
|
+
54, 251, 26, 145, 0, 103, 160, 46, 94, 148, 255, 92, 217, 42, 243, 73, 26, 153, 216, 142, 242,
|
|
416
|
+
75, 114, 47, 228, 195, 88, 60, 247, 112, 207, 184, 241, 78, 223, 15, 141, 44, 84, 225, 194,
|
|
417
|
+
55, 120, 226
|
|
418
|
+
],
|
|
419
|
+
[
|
|
420
|
+
180, 197, 219, 147, 36, 124, 230, 93, 50, 29, 161, 78, 126, 250, 81, 22, 165, 61, 244, 6, 154,
|
|
421
|
+
117, 168, 91, 205, 129, 248, 13, 222, 192, 32, 113, 157, 12, 126, 170, 199, 89, 0, 103, 56,
|
|
422
|
+
185, 220, 16, 168, 125, 23, 156, 179, 9, 143, 51, 116, 34, 159, 92, 247, 113, 208, 65, 33,
|
|
423
|
+
252, 167, 68
|
|
424
|
+
]
|
|
425
|
+
]
|
|
426
|
+
}
|
package/dist/types.d.ts
ADDED
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sweetcorn",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"description": "JavaScript image dithering tools for Sharp",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"image",
|
|
8
|
+
"dither",
|
|
9
|
+
"sharp",
|
|
10
|
+
"libvips"
|
|
11
|
+
],
|
|
12
|
+
"type": "module",
|
|
13
|
+
"files": [
|
|
14
|
+
"dist"
|
|
15
|
+
],
|
|
16
|
+
"exports": {
|
|
17
|
+
".": "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"sharp": "^0.34.5",
|
|
21
|
+
"typescript": "^5.9.3"
|
|
22
|
+
},
|
|
23
|
+
"peerDependencies": {
|
|
24
|
+
"sharp": ">=0.33.0"
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=20.10.0"
|
|
28
|
+
},
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"homepage": "https://github.com/delucis/sweetcorn",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "https://github.com/delucis/sweetcorn.git",
|
|
36
|
+
"directory": "packages/sweetcorn"
|
|
37
|
+
},
|
|
38
|
+
"bugs": "https://github.com/delucis/sweetcorn/issues",
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "tsc"
|
|
41
|
+
}
|
|
42
|
+
}
|