Unable to decode network response from AWS - arrays

I'm trying to setup a websocket for AWS transcribe, but I've been stuck for over a day trying to decode the byte data / Uint8ArrayView that I receive as a response. Any help is very much appreciated, I've tried tons of decoding, ByteBuffers, etc, and can't figure it out.
Here is a little document on how the data should be coming in:
https://docs.aws.amazon.com/transcribe/latest/dg/event-stream.html
Here is how somebody easily does this with the same response in Javascript:
Using marshaller (Full code on GitHub)
let messageWrapper = eventStreamMarshaller.unmarshall(Buffer(message.data));
let messageBody = JSON.parse(String.fromCharCode.apply(String, messageWrapper.body));
And here is the data that I receive as a response:
[0, 0, 3, 212, 0, 0, 0, 103, 76, 21, 128, 165, 15, 58, 101, 120, 99, 101, 112, 116, 105, 111, 110, 45, 116, 121, 112, 101, 7, 0, 25, 73, 110, 118, 97, 108, 105, 100, 83, 105, 103, 110, 97, 116, 117, 114, 101, 69, 120, 99, 101, 112, 116, 105, 111, 110, 13, 58, 99, 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 7, 0, 16, 97, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 47, 106, 115, 111, 110, 13, 58, 109, 101, 115, 115, 97, 103, 101, 45, 116, 121, 112, 101, 7, 0, 9, 101, 120, 99, 101, 112, 116, 105, 111, 110, 123, 34, 77, 101, 115, 115, 97, 103, 101, 34, 58, 34, 84, 104, 101, 32, 114, 101, 113, 117, 101, 115, 116, 32, 115, 105, 103, 110, 97, 116, 117, 114, 101, 32, 119, 101, 32, 99, 97, 108, 99, 117, 108, 97, 116, 101, 100, 32, 100, 111, 101, 115, 32, 110, 111, 116, 32, 109, 97, 116, 99, 104, 32, 116, 104, 101, 32, 115, 105, 103, 110, 97, 116, 117, 114, 101, 32, 121, 111, 117, 32, 112, 114, 111, 118, 105, 100, 101, 100, 46, 32, 67, 104, 101, 99, 107, 32, 121, 111, 117, 114, 32, 65, 87, 83, 32, 83, 101, 99, 114, 101, 116, 32, 65, 99, 99, 101, 115, 115, 32, 75, 101, 121, 32, 97, 110, 100, 32, 115, 105, 103, 110, 105, 110, 103, 32, 109, 101, 116, 104, 111, 100, 46, 32, 67, 111, 110, 115, 117, 108, 116, 32, 116, 104, 101, 32, 115, 101, 114, 118, 105, 99, 101, 32, 100, 111, 99, 117, 109, 101, 110, 116, 97, 116, 105, 111, 110, 32, 102, 111, 114, 32, 100, 101, 116, 97, 105, 108, 115, 46, 92, 110, 92, 110, 84, 104, 101, 32, 67, 97, 110, 111, 110, 105, 99, 97, 108, 32, 83, 116, 114, 105, 110, 103, 32, 102, 111, 114, 32, 116, 104, 105, 115, 32, 114, 101, 113, 117, 101, 115, 116, 32, 115, 104, 111, 117, 108, 100, 32, 104, 97, 118, 101, 32, 98, 101, 101, 110, 92, 110, 39, 71, 69, 84, 92, 110, 47, 115, 116, 114, 101, 97, 109, 45, 116, 114, 97, 110, 115, 99, 114, 105, 112, 116, 105, 111, 110, 45, 119, 101, 98, 115, 111, 99, 107, 101, 116, 92, 110, 88, 45, 65, 109, 122, 45, 65, 108, 103, 111, 114, 105, 116, 104, 109, 61, 65, 87, 83, 52, 45, 72, 77, 65, 67, 45, 83, 72, 65, 50, 53, 54, 38, 88, 45, 65, 109, 122, 45, 67, 114, 101, 100, 101, 110, 116, 105, 97, 108, 61, 65, 75, 73, 65, 84, 52, 55, 65, 90, 72, 82, 81, 79, 82, 88, 72, 77, 85, 77, 79, 37, 50, 70, 50, 48, 50, 49, 48, 52, 49, 48, 37, 50, 70, 117, 115, 45, 101, 97, 115, 116, 45, 50, 37, 50, 70, 116, 114, 97, 110, 115, 99, 114, 105, 98, 101, 37, 50, 70, 97, 119, 115, 52, 95, 114, 101, 113, 117, 101, 115, 116, 38, 88, 45, 65, 109, 122, 45, 68, 97, 116, 101, 61, 50, 48, 50, 49, 48, 52, 49, 48, 84, 49, 56, 48, 50, 52, 57, 90, 38, 88, 45, 65, 109, 122, 45, 69, 120, 112, 105, 114, 101, 115, 61, 56, 54, 52, 48, 48, 38, 88, 45, 65, 109, 122, 45, 83, 105, 103, 110, 101, 100, 72, 101, 97, 100, 101, 114, 115, 61, 104, 111, 115, 116, 38, 108, 97, 110, 103, 117, 97, 103, 101, 45, 99, 111, 100, 101, 61, 101, 110, 45, 85, 83, 38, 109, 101, 100, 105, 97, 45, 101, 110, 99, 111, 100, 105, 110, 103, 61, 112, 99, 109, 38, 115, 97, 109, 112, 108, 101, 45, 114, 97, 116, 101, 61, 49, 54, 48, 48, 48, 92, 110, 104, 111, 115, 116, 58, 116, 114, 97, 110, 115, 99, 114, 105, 98, 101, 115, 116, 114, 101, 97, 109, 105, 110, 103, 46, 117, 115, 45, 101, 97, 115, 116, 45, 50, 46, 97, 109, 97, 122, 111, 110, 97, 119, 115, 46, 99, 111, 109, 58, 56, 52, 52, 51, 92, 110, 92, 110, 104, 111, 115, 116, 92, 110, 101, 51, 98, 48, 99, 52, 52, 50, 57, 56, 102, 99, 49, 99, 49, 52, 57, 97, 102, 98, 102, 52, 99, 56, 57, 57, 54, 102, 98, 57, 50, 52, 50, 55, 97, 101, 52, 49, 101, 52, 54, 52, 57, 98, 57, 51, 52, 99, 97, 52, 57, 53, 57, 57, 49, 98, 55, 56, 53, 50, 98, 56, 53, 53, 39, 92, 110, 92, 110, 84, 104, 101, 32, 83, 116, 114, 105, 110, 103, 45, 116, 111, 45, 83, 105, 103, 110, 32, 115, 104, 111, 117, 108, 100, 32, 104, 97, 118, 101, 32, 98, 101, 101, 110, 92, 110, 39, 65, 87, 83, 52, 45, 72, 77, 65, 67, 45, 83, 72, 65, 50, 53, 54, 92, 110, 50, 48, 50, 49, 48, 52, 49, 48, 84, 49, 56, 48, 50, 52, 57, 90, 92, 110, 50, 48, 50, 49, 48, 52, 49, 48, 47, 117, 115, 45, 101, 97, 115, 116, 45, 50, 47, 116, 114, 97, 110, 115, 99, 114, 105, 98, 101, 47, 97, 119, 115, 52, 95, 114, 101, 113, 117, 101, 115, 116, 92, 110, 52, 57, 54, 98, 50, 57, 49, 57, 54, 100, 100, 101, 98, 100, 57, 55, 101, 53, 100, 56, 54, 56, 54, 98, 54, 54, 100, 97, 101, 102, 48, 97, 100, 98, 102, 56, 53, 49, 48, 54, 53, 54, 99, 53, 52, 102, 100, 99, 98, 98, 101, 101, 100, 98, 49, 50, 54, 101, 55, 100, 54, 51, 57, 99, 39, 92, 110, 34, 125, 25, 123, 100, 219]

Huge thanks to #Anon-Coward I converted his python code into flutter code which decodes the message and makes the headers and body readable. It's a bit sloppy, but here it is:
(testVal is the response from Amazon which is in my question).
Uint8List sample = Uint8List.fromList(testVal);
ByteData bytes = sample.buffer.asByteData();
var totalLength = bytes.lengthInBytes; //980
var headersLength = bytes.getInt8(7); //103
var data = sample.sublist(12);
var left = headersLength;
while(left > 0){
//get the header name
var nameLength = data[0];
data = data.sublist(1);
var name = utf8.decode(data.sublist(0, nameLength));
data = data.sublist(nameLength);
//get the value type
var valueType = data[0];
data = data.sublist(1);
//get the value
var tempLenList = data.sublist(0, 2);
var tempLenBytes = tempLenList.buffer.asByteData();
var valueLength = tempLenBytes.getUint16(0, Endian.big);
data = data.sublist(2);
var value = data.sublist(0, valueLength);
data = data.sublist(valueLength);
var valueFinal;
if(valueType == 7){
valueFinal = utf8.decode(value);
}
left -= (4 + nameLength + valueLength);
print(name+ ' ' + valueFinal);
}
var remainingData = utf8.decode(data.sublist(0, (data.lengthInBytes - 4)));
print(remainingData);

Related

Problem using PROGMEM with pointer to an int array

my arduino nano drives an LED Matrix. evrything works fine.
but my "outline path" ist too big for the SRAM, so i try to put it into PROGMEM.
Now reading values from this progmem array leads to totally wrong integers.
what am i doing wrong?
thx for helping!!
bye
andre
void progStarsWarp() {
const static PROGMEM int outlinePath[] = {30, 31, 29, 28, 27, 26, 36, 42, 43, 44, 45, 46, 25, 9, 8, 0, 1, 2, 4, 3, 16, 17, 56, 57, 91, 92, 101, 102, 111, 112, 121, 122, 162, 192, 193, 229, 230, 262, 263, 274, 275, 276, 277, 270, 269, 254, 239, 240, 241, 242, 243, 244, 253, 252, 251, 250, 249, 211, 210, 176, 177, 178, 179, 175, 161, 152, 151, 142, 141, 132, 131, 77, 72, 73, 74, 75, 76, 37, 31};
int *pointerOutlinePath;
FastLED.clear();
for (unsigned int i = 0; i < 79; i++) {
pointerOutlinePath = &outlinePath[i];
int test = pgm_read_word(pointerOutlinePath);
leds.m_LED[outlinePath[test]] = CRGB(getRandomColorValue(), getRandomColorValue(), getRandomColorValue());
}
FastLED.show();
delay(60000);
}

Validate credentials against AD with Elixir/Erlang

I'm trying to achieve simple AD Credential Validation with Elixir/Erlang. My code in C# works fine.
C#
private static void Main(string[] args)
{
try
{
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "132.10.100.156"))
{
bool isValid = pc.ValidateCredentials("my-username", "my-password");
Console.WriteLine(isValid);
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
Console.ReadLine();
}
Elixir
defmodule AD do
#moduledoc false
require Logger
#format [
limit: :infinity,
pretty: true,
structs: true,
width: 210,
syntax_colors: [number: :yellow, atom: :cyan, string: :green, boolean: :magenta, nil: :magenta]
]
def test do
{:ok, pid} = :eldap.open(['132.10.100.156'], log: &log/3)
:eldap.simple_bind(pid, 'my-username', 'my-password')
end
def log(_, format_string, format_args) do
Logger.debug(inspect({format_string, format_args}, #format))
end
end
Console:
iex> AD.test
[2019-11-16 18:23:53.354] {'bind request = ~p~n', [{:BindRequest, 3, 'my-username', {:simple, 'my-password'}}]}
{:error, :invalidCredentials}
[2019-11-16 18:23:53.511] {'bind reply = ~p~n',
[
ok: {:LDAPMessage, 1,
{:bindResponse,
{:BindResponse, :invalidCredentials, [],
[56, 48, 48, 57, 48, 51, 48, 56, 58, 32, 76, 100, 97, 112, 69, 114, 114, 58, 32, 68, 83, 73, 68, 45, 48, 67, 48, 57, 48, 51, 67, 56, 44, 32, 99, 111, 109, 109, 101, 110, 116, 58, 32, 65, 99, 99, 101, 112,
116, 83, 101, 99, 117, 114, 105, 116, 121, 67, 111, 110, 116, 101, 120, 116, 32, 101, 114, 114, 111, 114, 44, 32, 100, 97, 116, 97, 32, 53, 50, 101, 44, 32, 118, 50, 53, 56, 48, 0], :asn1_NOVALUE,
:asn1_NOVALUE}}, :asn1_NOVALUE}
]}
iex>
:erldap requires my-username#somedomain or a full DN in order to work correctly.

Convert from byte array to Image

I have data of length 498, and I want to convert it to an image. The data (byte array) is:
ba = [4, 41, 80, 3, 41, 130, 134, 225, 196, 184, 63, 255, 137, 50, 182, 95, 3, 86, 250, 7, 218, 114, 246, 93, 132, 101, 56, 224, 233, 234, 185, 149, 132, 245, 245, 239, 1, 171, 245, 214, 66, 198, 133, 254, 18, 19, 247, 92, 72, 151, 118, 152, 21, 131, 248, 128, 74, 103, 172, 72, 37, 163, 233, 146, 196, 54, 244, 15, 85, 91, 229, 89, 195, 22, 64, 200, 73, 131, 246, 215, 133, 166, 137, 237, 85, 27, 246, 85, 68, 70, 122, 208, 134, 179, 246, 77, 199, 119, 246, 184, 145, 147, 247, 73, 143, 217, 240, 152, 149, 3, 56, 8, 183, 58, 13, 10, 181, 131, 248, 29, 80, 8, 1, 1, 217, 131, 248, 32, 11, 248, 250, 232, 245, 99, 245, 83, 196, 22, 192, 183, 21, 156, 246, 60, 74, 104, 106, 209, 14, 212, 233, 155, 195, 248, 247, 231, 21, 236, 245, 66, 136, 87, 102, 201, 33, 92, 233, 149, 1, 200, 185, 224, 50, 100, 248, 31, 8, 184, 120, 7, 62, 20, 247, 52, 9, 136, 108, 201, 62, 4, 248, 33, 11, 185, 116, 239, 105, 156, 246, 179, 78, 40, 203, 45, 121, 204, 248, 156, 196, 117, 77, 215, 138, 20, 247, 175, 77, 57, 203, 221, 149, 156, 213, 40, 28, 186, 108, 36, 182, 252, 248, 145, 7, 185, 139, 200, 210, 180, 248, 142, 199, 167, 139, 200, 209, 252, 233, 140, 70, 248, 197, 208, 233, 12, 246, 155, 140, 105, 151, 168, 9, 213, 246, 143, 8, 152, 215, 200, 26, 29, 233, 130, 132, 249, 71, 233, 38, 37, 248, 134, 7, 199, 5, 217, 73, 69, 248, 128, 197, 214, 3, 225, 133, 93, 247, 126, 131, 215, 1, 225, 158, 237, 247, 4, 65, 7, 194, 39, 73, 28, 117, 86, 133, 198, 255, 127, 121, 165, 117, 121, 194, 24, 126, 250, 161, 45, 121, 125, 128, 246, 193, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 99, 35, 114, 51, 162, 86, 36, 33, 70, 65, 51, 69, 116, 52, 70, 70, 50, 83, 34, 54, 83, 49, 63, 67, 34, 50, 85, 109, 48, 245, 50, 98, 134, 49, 101, 1, 63, 95, 66, 101, 19, 51, 35, 55, 52, 113, 100, 82, 86, 18, 35, 114, 49, 20, 134, 67, 20, 115, 246, 36, 49, 68, 53, 19, 65, 33, 69, 52, 38, 65, 115, 19, 21, 53, 83, 68, 82, 50, 68, 113, 51, 67, 65, 47, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 203]
I tried using
Image.frombuffer('L', (498), ba, 'raw', 'L', 0, 1)
But, this gave an error saying 'size must be a tuple', I tried giving (498,0) and (0,498), this gave no error, but while saving the image there was an error as 'SystemError: tile cannot extend outside image'.
You can try fromarray function
import numpy as np
image = Image.fromarray(np.array(ba).reshape(498,1))

appIdentityService.signForApp (Java) and app_identity.sign_blob (Python) results are different

I need to sign JWT using Google Cloud appIdentity.
I tried using python agent and it is working. But the Java client gives signature error.
So I run test code to get signature of same input from Java and Python. It returns different result.
python code
import array
from google.appengine.api import app_identity
header_and_payload = "test"
(key_name, signature) = app_identity.sign_blob(header_and_payload)
print array.array('B', signature)
java code
import com.google.appengine.api.appidentity.AppIdentityService;
import com.google.appengine.api.appidentity.AppIdentityServiceFactory;
headerAndPayload = "test";
AppIdentityService appIdentityService = AppIdentityServiceFactory.getAppIdentityService();
AppIdentityService.SigningResult signingResult = appIdentityService.signForApp(headerAndPayload.getBytes());
System.out.println(Arrays.toString(signingResult.getSignature()));
Python output
[205, 130, 214, 28, 19, 7, 233, 69, 92, 161, 8, 160, 36, 162, 149, 125, 5, 100, 8, 219, 244, 235, 188, 126, 118, 45, 176, 63, 61, 88, 91, 151, 151, 114, 228, 31, 85, 209, 117, 134, 66, 120, 13, 159, 10, 155, 70, 16, 110, 56, 212, 79, 165, 40, 222, 46, 26, 74, 182, 80, 223, 57, 244, 44, 224, 122, 230, 184, 114, 236, 158, 204, 145, 152, 133, 131, 115, 43, 224, 132, 219, 232, 186, 237, 82, 86, 243, 194, 155, 127, 26, 227, 19, 165, 142, 216, 238, 163, 99, 251, 41, 191, 164, 206, 85, 239, 64, 133, 41, 49, 120, 235, 120, 226, 96, 224, 105, 68, 81, 186, 184, 65, 233, 129, 211, 231, 211, 135, 15, 88, 35, 20, 217, 95, 56, 215, 134, 71, 210, 28, 43, 22, 231, 69, 134, 116, 227, 161, 202, 94, 54, 222, 132, 158, 108, 45, 73, 68, 240, 90, 59, 139, 222, 118, 6, 82, 162, 198, 143, 7, 233, 148, 233, 232, 101, 135, 182, 71, 148, 136, 246, 168, 5, 28, 94, 11, 10, 78, 147, 4, 200, 36, 79, 244, 117, 223, 114, 33, 2, 206, 13, 66, 204, 201, 102, 147, 237, 83, 83, 17, 221, 16, 136, 206, 115, 141, 32, 149, 131, 136, 183, 96, 51, 31, 212, 174, 245, 120, 18, 120, 191, 174, 90, 111, 122, 136, 96, 152, 81, 8, 72, 52, 33, 46, 227, 241, 41, 77, 40, 176, 97, 189, 195, 197, 202, 71]
java output
[10, -64, 92, 105, 15, 35, -32, -101, 47, 111, -1, -72, 110, 105, -77, -117, 23, 69, 113, -49, -14, -104, 110, 78, 84, -78, 30, 26, 38, -43, 36, 112, 33, -10, -5, -63, -11, 47, -53, -116, -71, 2, -64, -16, 36, 122, 45, 79, 3, 49, -7, 120, -10, 125, 92, 43, -43, -34, 100, 75, -54, -36, 5, 106, -128, 106, -120, 36, 59, -31, -2, 100, 79, 65, -118, -50, -83, 11, -19, -28, -80, -125, -8, 59, -94, -125, 91, -104, -96, -12, 14, 31, -108, 61, 12, 6, 90, -6, -24, -47, -57, 55, -64, -50, 41, 26, -46, -81, -124, 122, 82, -120, 31, 19, 85, -7, -17, 40, -18, -118, -64, 114, -76, -60, 116, -12, -16, 12, -91, 55, -57, -61, 108, 88, -13, 80, -38, 100, 121, -11, -20, -5, -105, 20, 87, 60, -125, 33, -11, 111, -115, -69, 24, 0, -113, -24, 49, 21, -27, 96, 27, 12, 72, 50, 12, 15, -61, -40, -52, -76, -63, 29, -99, 114, 88, 41, 111, 9, 127, 96, -123, 58, 92, -91, 17, 114, -11, -105, -79, -110, -100, -35, 16, 103, 27, -21, -50, 7, -28, 117, 119, -124, -127, -115, -116, 86, 74, 57, -46, 114, 102, -18, -73, 97, 10, -113, 119, -1, -68, -18, -16, -119, 49, -120, 104, 121, 113, -82, -42, -119, -81, 95, -114, 16, -11, -58, 36, -24, 58, -50, 101, -117, -55, -101, -19, 62, -53, 30, -59, 106, 37, 98, 102, 75, -9, 91]
What is the issue in Java code? Thank you.
In the line:
print array.array('B', signature)
you are using the option 'B' for unsigned char according to the docs. If you use the option 'b' (for signed char) like in
print array.array('b', signature)
you will get the same results for both the Java and the python versions.
I performed tests with the sample codes for Python and Java. In the Python example I set the message variable to the same value as in Java:
message = "abcdefg"
and added this line:
self.response.write('Signature Array: {}\n'.format(array.array('b', signature)))
Hope this helps.

sine function on 16-bit microcontroller

I need to generate a sine wave to fill a char table of size 1024. The word size on the microcontroller is 16-bit and floating-point operations are not available.
The sine wave itself will oscillate between the value of 0 to 255, with 127 being the center point.
Any ideas?
You only actually need to store one quarter of the sine wave -- you can lookup the other three quarters from the first quadrant. So you only need 256 bytes.
To generate the values on the micro controller, implement CORDIC. You can store one value, and generate the whole sine wave from that.
Create a precomputed array on your PC. You only have to create a fourth of the array if ROM (or equivalent, such as flash or code segment) space is at a premium, then mirror this part out to the other 768 bytes of the array.
Write a sin table generator in your favorite language using float.
Scale and round the results to desired ranges 1024/-127..+128 (you may do that right away).
From the table, generate a source file in ASM or C, what ever works better for you.
Make sure the generated table in marked "const" in C or make go to a approbiate section in ASM so it goes to FLASH rather than RAM.
Include the file in your project.
Now intsin(x)1 is:
int intsin(int x)
limit x // 0..360° or 2PI
scale to 1024
read table at x
return x
You can improve resolution by using the table for the first quadrant only. You can than use positive values only, too (0..255). Then your intsin(x) would need to determine the quadrant and mirror the first quadrant results.
You just generate table on your PC and use it on your MCU. As somebody said you just need a quater period, but to answer your question fully, here are all 1024 chars:
for k := 0 to 1023 do
buffer[k] := (round(128+127*sin(2*pi*k/1024)));
128, 129, 130, 130, 131, 132, 133, 133, 134, 135, 136, 137, 137, 138, 139, 140, 140,
141, 142, 143, 144, 144, 145, 146, 147, 147, 148, 149, 150, 150, 151, 152, 153,
154, 154, 155, 156, 157, 157, 158, 159, 160, 160, 161, 162, 163, 163, 164, 165,
166, 166, 167, 168, 169, 169, 170, 171, 172, 172, 173, 174, 174, 175, 176, 177,
177, 178, 179, 179, 180, 181, 182, 182, 183, 184, 184, 185, 186, 186, 187, 188,
189, 189, 190, 191, 191, 192, 193, 193, 194, 195, 195, 196, 197, 197, 198, 199,
199, 200, 200, 201, 202, 202, 203, 204, 204, 205, 206, 206, 207, 207, 208, 209,
209, 210, 210, 211, 212, 212, 213, 213, 214, 214, 215, 216, 216, 217, 217, 218,
218, 219, 219, 220, 221, 221, 222, 222, 223, 223, 224, 224, 225, 225, 226, 226,
227, 227, 228, 228, 229, 229, 230, 230, 230, 231, 231, 232, 232, 233, 233, 234,
234, 234, 235, 235, 236, 236, 237, 237, 237, 238, 238, 239, 239, 239, 240, 240,
240, 241, 241, 241, 242, 242, 242, 243, 243, 243, 244, 244, 244, 245, 245, 245,
246, 246, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 250,
250, 250, 250, 250, 251, 251, 251, 251, 251, 252, 252, 252, 252, 252, 252, 253,
253, 253, 253, 253, 253, 253, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254,
254, 254, 254, 254, 254, 254, 254, 254, 254, 253, 253, 253, 253, 253, 253, 253,
252, 252, 252, 252, 252, 252, 251, 251, 251, 251, 251, 250, 250, 250, 250, 250,
249, 249, 249, 249, 248, 248, 248, 248, 247, 247, 247, 246, 246, 246, 246, 245,
245, 245, 244, 244, 244, 243, 243, 243, 242, 242, 242, 241, 241, 241, 240, 240,
240, 239, 239, 239, 238, 238, 237, 237, 237, 236, 236, 235, 235, 234, 234, 234,
233, 233, 232, 232, 231, 231, 230, 230, 230, 229, 229, 228, 228, 227, 227, 226,
226, 225, 225, 224, 224, 223, 223, 222, 222, 221, 221, 220, 219, 219, 218, 218,
217, 217, 216, 216, 215, 214, 214, 213, 213, 212, 212, 211, 210, 210, 209, 209,
208, 207, 207, 206, 206, 205, 204, 204, 203, 202, 202, 201, 200, 200, 199, 199,
198, 197, 197, 196, 195, 195, 194, 193, 193, 192, 191, 191, 190, 189, 189, 188,
187, 186, 186, 185, 184, 184, 183, 182, 182, 181, 180, 179, 179, 178, 177, 177,
176, 175, 174, 174, 173, 172, 172, 171, 170, 169, 169, 168, 167, 166, 166, 165,
164, 163, 163, 162, 161, 160, 160, 159, 158, 157, 157, 156, 155, 154, 154, 153,
152, 151, 150, 150, 149, 148, 147, 147, 146, 145, 144, 144, 143, 142, 141, 140,
140, 139, 138, 137, 137, 136, 135, 134, 133, 133, 132, 131, 130, 130, 129, 128,
127, 126, 126, 125, 124, 123, 123, 122, 121, 120, 119, 119, 118, 117, 116, 116,
115, 114, 113, 112, 112, 111, 110, 109, 109, 108, 107, 106, 106, 105, 104, 103,
102, 102, 101, 100, 99, 99, 98, 97, 96, 96, 95, 94, 93, 93, 92, 91,
90, 90, 89, 88, 87, 87, 86, 85, 84, 84, 83, 82, 82, 81, 80, 79,
79, 78, 77, 77, 76, 75, 74, 74, 73, 72, 72, 71, 70, 70, 69, 68,
67, 67, 66, 65, 65, 64, 63, 63, 62, 61, 61, 60, 59, 59, 58, 57,
57, 56, 56, 55, 54, 54, 53, 52, 52, 51, 50, 50, 49, 49, 48, 47,
47, 46, 46, 45, 44, 44, 43, 43, 42, 42, 41, 40, 40, 39, 39, 38,
38, 37, 37, 36, 35, 35, 34, 34, 33, 33, 32, 32, 31, 31, 30, 30,
29, 29, 28, 28, 27, 27, 26, 26, 26, 25, 25, 24, 24, 23, 23, 22,
22, 22, 21, 21, 20, 20, 19, 19, 19, 18, 18, 17, 17, 17, 16, 16,
16, 15, 15, 15, 14, 14, 14, 13, 13, 13, 12, 12, 12, 11, 11, 11,
10, 10, 10, 10, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 6,
6, 6, 6, 6, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 3,
3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6,
7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10, 11,
11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16,
16, 17, 17, 17, 18, 18, 19, 19, 19, 20, 20, 21, 21, 22, 22, 22,
23, 23, 24, 24, 25, 25, 26, 26, 26, 27, 27, 28, 28, 29, 29, 30,
30, 31, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 37, 37, 38, 38,
39, 39, 40, 40, 41, 42, 42, 43, 43, 44, 44, 45, 46, 46, 47, 47,
48, 49, 49, 50, 50, 51, 52, 52, 53, 54, 54, 55, 56, 56, 57, 57,
58, 59, 59, 60, 61, 61, 62, 63, 63, 64, 65, 65, 66, 67, 67, 68,
69, 70, 70, 71, 72, 72, 73, 74, 74, 75, 76, 77, 77, 78, 79, 79,
80, 81, 82, 82, 83, 84, 84, 85, 86, 87, 87, 88, 89, 90, 90, 91,
92, 93, 93, 94, 95, 96, 96, 97, 98, 99, 99, 100, 101, 102, 102, 103,
104, 105, 106, 106, 107, 108, 109, 109, 110, 111, 112, 112, 113, 114, 115, 116,
116, 117, 118, 119, 119, 120, 121, 122, 123, 123, 124, 125, 126, 126, 127

Resources