]> foleosoft.com Git - RosadoAPI.git/commitdiff
Mon Jan 20 04:20:50 PM EST 2025
authorserver <[email protected]>
Mon, 20 Jan 2025 21:20:50 +0000 (16:20 -0500)
committerserver <[email protected]>
Mon, 20 Jan 2025 21:20:50 +0000 (16:20 -0500)
build.sh
src/http.c
src/javascript.h
src/main.c
src/www/.frontend.html.swp [new file with mode: 0644]
src/www/frontend.html
src/www/rosado-api.min.js [new file with mode: 0644]

index 352afcadc42eb03db19719b00eccbe70e5a4aea0..d2fb72b7f41443de2f2eedff033d74fc2e2e9ecd 100644 (file)
--- a/build.sh
+++ b/build.sh
@@ -1,20 +1,22 @@
 #!/bin/bash
+set -e
 if [ "$1" == "run" ]
 then
        while [ 1 ]
        do
-               ./bin/rosado
+               ./bin/rosado-api
        done
 elif [ "$1" = "install" ]
 then
-       sudo cp bin/rosado /usr/local/bin/rosado
+       sudo cp bin/rosado-api /usr/local/bin/rosado-api
 elif [ "$1" = "uninstall" ]
 then
-       sudo rm /usr/local/bin/rosado
+       sudo rm /usr/local/bin/rosado-api
 else
+       uglifyjs src/www/rosado-api.js -o src/www/rosado-api.min.js
        cat src/www/frontend.html | xxd -i > src/frontend.h
-       cat src/www/rosado-api.js | xxd -i > src/javascript.h
+       cat src/www/rosado-api.min.js | xxd -i > src/javascript.h
        cat src/www/favicon.ico | xxd -i > src/favicon.h
-       gcc ./src/main.c -o ./bin/rosado $(mysql_config --cflags --libs) -lCryptoFoleo
+       gcc ./src/main.c -o ./bin/rosado-api $(mysql_config --cflags --libs) -lCryptoFoleo
        rm ./src/frontend.h
 fi
index 6316f77580a0e9d0266335cdd55588ef655121e3..b62247cdb8de8655a4a0208f192a05811d34e62b 100644 (file)
@@ -234,59 +234,69 @@ void httpError(int session_fd, int error, char *msg)
        free(page);
 }
 
-int httpFileOut(int session_fd, char* path, uint8_t fileType)
+int httpFileOut(int session_fd, char* path, const char* fileType, size_t bufferSize)
 {
-       char* safePath;
-       int safePathLen;
-       int pathLen = strlen(path);
-       if (pathLen == 0) return 0;
-       if (path[0] == '/')
+       char* fileData;
+       size_t fileSize;
+       if (bufferSize == 0)
        {
-               safePath = malloc(1);
-               safePath[0] = '.';
-               safePathLen = 1;
-       }
-       else
-       {
-               safePath = malloc(0);
-               safePathLen = 0;
-       }
-       for (int i = 0; i < pathLen; i++)
-       {
-               if (i > 0 && path[i] == '.')
+               char* safePath;
+               int safePathLen;
+               int pathLen = strlen(path);
+               if (pathLen == 0) return 0;
+               if (path[0] == '/')
                {
-                       if (path[i - 1] == '/' || path[i - 1] == '.')
-                       {
-                               continue;
-                       }
+                       safePath = malloc(1);
+                       safePath[0] = '.';
+                       safePathLen = 1;
                }
-               if (path[i] == '/' && safePathLen > 0)
+               else
                {
-                       if (safePath[safePathLen - 1] == '/')
+                       safePath = malloc(0);
+                       safePathLen = 0;
+               }
+               for (int i = 0; i < pathLen; i++)
+               {
+                       if (i > 0 && path[i] == '.')
+                       {
+                               if (path[i - 1] == '/' || path[i - 1] == '.')
+                               {
+                                       continue;
+                               }
+                       }
+                       if (path[i] == '/' && safePathLen > 0)
                        {
-                               continue;
+                               if (safePath[safePathLen - 1] == '/')
+                               {
+                                       continue;
+                               }
                        }
+                       safePath = realloc(safePath, ++safePathLen);
+                       safePath[safePathLen - 1] = path[i];
                }
                safePath = realloc(safePath, ++safePathLen);
-               safePath[safePathLen - 1] = path[i];
-       }
-       safePath = realloc(safePath, ++safePathLen);
-       safePath[safePathLen - 1] = 0;
+               safePath[safePathLen - 1] = 0;
 
-       FILE *fd = fopen(safePath, "r");
-       free(safePath);
-       if (fd == NULL)
+               FILE *fd = fopen(safePath, "r");
+               free(safePath);
+               if (fd == NULL)
+               {
+                       httpError(session_fd, 404, "Page Not Found");
+                       return 1;
+               }
+               fseek(fd, 0, SEEK_END);
+               size_t fileSize = ftell(fd);
+               rewind(fd);
+               char* fileData = malloc(fileSize);
+               fread(fileData, 1, fileSize, fd);
+               fclose(fd);
+       }
+       else
        {
-               httpError(session_fd, 404, "Page Not Found");
-               return 1;
+               fileSize = bufferSize;
+               fileData = malloc(fileSize);
+               memcpy(fileData, path, fileSize);
        }
-       fseek(fd, 0, SEEK_END);
-       size_t fileSize = ftell(fd);
-       rewind(fd);
-       char* fileData = malloc(fileSize);
-       fread(fileData, 1, fileSize, fd);
-       fclose(fd);
-
 
        if (fileSize < 0)
        {
@@ -299,35 +309,21 @@ int httpFileOut(int session_fd, char* path, uint8_t fileType)
        httpRespond(session_fd, HTTP_SERVER);
 
        //Spit out file content length part of the HTTP message
-       char* contentLengthTemplate;
-       const char contentLengthTemplate0[] = "Access-Control-Allow-Origin: *\nContent-Type: application/octet-stream\nContent-Length: %i\n\n";
-       const char contentLengthTemplate1[] = "Access-Control-Allow-Origin: *\nContent-Type: image/x-icon\nContent-Length: %i\n\n";
-       switch (fileType)
-       {
-               case 0:
-                       contentLengthTemplate = malloc(strlen(contentLengthTemplate0) + 1);
-                       strcpy(contentLengthTemplate, contentLengthTemplate0);
-               break;
-               case 1:
-                       contentLengthTemplate = malloc(strlen(contentLengthTemplate1) + 1);
-                       strcpy(contentLengthTemplate, contentLengthTemplate1);
-               break;
-       }
-       size_t contentLengthLen = snprintf(NULL, 0, contentLengthTemplate, fileSize);
+       const char contentLengthTemplate[] = "Access-Control-Allow-Origin: *\nContent-Type: %s\nContent-Length: %i\n\n";
+       size_t contentLengthLen = snprintf(NULL, 0, contentLengthTemplate, fileType, fileSize);
        char* contentLength = malloc(contentLengthLen + 1);
-       sprintf(contentLength, contentLengthTemplate, fileSize);
+       sprintf(contentLength, contentLengthTemplate, fileType, fileSize);
        httpRespond(session_fd, contentLength);
        free(contentLength);
        for (size_t i = 0; i < fileSize; i++)
        {
                if (i == 0)
                {
-                       printf(">%02X<\n", fileData[i]);
+                       //printf(">%02X<\n", fileData[i]);
                }
                httpRespondByte(session_fd, fileData[i]);
        }
        free(fileData);
-       free(contentLengthTemplate);
 }
 
 int httpStringOut(int session_fd, char* str)
index 3c232cd2a8acaaa81e8b6881c2ca00f14d59511f..86d188ae483902665cf72d765754f24476316df6 100644 (file)
   0x76, 0x61, 0x72, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50,
-  0x49, 0x20, 0x3d, 0x0a, 0x7b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x6e,
-  0x61, 0x6d, 0x65, 0x3a, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e,
-  0x65, 0x64, 0x2c, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79, 0x3a,
-  0x20, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x2c, 0x0a,
-  0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x3a, 0x20, 0x75,
-  0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x2c, 0x0a, 0x0a, 0x09,
-  0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x3a, 0x0a, 0x09, 0x7b, 0x0a, 0x09,
-  0x09, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x3a, 0x20, 0x61, 0x20, 0x3d, 0x3e,
-  0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x77, 0x68, 0x69, 0x6c,
-  0x65, 0x20, 0x28, 0x61, 0x20, 0x3c, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20,
-  0x61, 0x20, 0x3e, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
-  0x46, 0x46, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x61, 0x20, 0x2b, 0x3d,
-  0x20, 0x61, 0x20, 0x3c, 0x20, 0x30, 0x20, 0x3f, 0x20, 0x30, 0x78, 0x31,
-  0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x3a, 0x20, 0x2d,
-  0x30, 0x78, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3b,
-  0x0a, 0x09, 0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61,
-  0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x2c, 0x0a, 0x09, 0x09, 0x73, 0x68, 0x6c,
-  0x3a, 0x20, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x3d, 0x3e, 0x20,
-  0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61,
-  0x74, 0x68, 0x33, 0x32, 0x2e, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x61,
-  0x20, 0x3c, 0x3c, 0x20, 0x62, 0x29, 0x2c, 0x0a, 0x09, 0x09, 0x73, 0x68,
-  0x72, 0x3a, 0x20, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x3d, 0x3e,
-  0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d,
-  0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28,
-  0x61, 0x20, 0x3e, 0x3e, 0x3e, 0x20, 0x62, 0x29, 0x2c, 0x0a, 0x09, 0x09,
-  0x72, 0x74, 0x6c, 0x3a, 0x20, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20,
-  0x3d, 0x3e, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49,
-  0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x63, 0x6c, 0x61, 0x6d,
-  0x70, 0x28, 0x28, 0x61, 0x20, 0x3c, 0x3c, 0x20, 0x62, 0x29, 0x20, 0x7c,
-  0x20, 0x28, 0x61, 0x20, 0x3e, 0x3e, 0x3e, 0x20, 0x28, 0x33, 0x32, 0x20,
-  0x2d, 0x20, 0x62, 0x29, 0x29, 0x29, 0x2c, 0x0a, 0x09, 0x09, 0x72, 0x74,
-  0x72, 0x3a, 0x20, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x3d, 0x3e,
-  0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d,
-  0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28,
-  0x28, 0x61, 0x20, 0x3e, 0x3e, 0x3e, 0x20, 0x62, 0x29, 0x20, 0x7c, 0x20,
-  0x28, 0x61, 0x20, 0x3c, 0x3c, 0x20, 0x28, 0x33, 0x32, 0x20, 0x2d, 0x20,
-  0x62, 0x29, 0x29, 0x29, 0x2c, 0x0a, 0x09, 0x09, 0x61, 0x64, 0x64, 0x3a,
-  0x20, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x52,
+  0x49, 0x3d, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x3a,
+  0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x2c, 0x61, 0x70,
+  0x69, 0x6b, 0x65, 0x79, 0x3a, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e,
+  0x65, 0x64, 0x2c, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x3a,
+  0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x2c, 0x4d, 0x61,
+  0x74, 0x68, 0x33, 0x32, 0x3a, 0x7b, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x3a,
+  0x61, 0x3d, 0x3e, 0x7b, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x28, 0x61, 0x3c,
+  0x30, 0x7c, 0x7c, 0x61, 0x3e, 0x34, 0x32, 0x39, 0x34, 0x39, 0x36, 0x37,
+  0x32, 0x39, 0x35, 0x29, 0x61, 0x2b, 0x3d, 0x61, 0x3c, 0x30, 0x3f, 0x34,
+  0x32, 0x39, 0x34, 0x39, 0x36, 0x37, 0x32, 0x39, 0x36, 0x3a, 0x2d, 0x34,
+  0x32, 0x39, 0x34, 0x39, 0x36, 0x37, 0x32, 0x39, 0x36, 0x3b, 0x72, 0x65,
+  0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x7d, 0x2c, 0x73, 0x68, 0x6c, 0x3a,
+  0x28, 0x61, 0x2c, 0x62, 0x29, 0x3d, 0x3e, 0x52, 0x6f, 0x73, 0x61, 0x64,
+  0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e,
+  0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x61, 0x3c, 0x3c, 0x62, 0x29, 0x2c,
+  0x73, 0x68, 0x72, 0x3a, 0x28, 0x61, 0x2c, 0x62, 0x29, 0x3d, 0x3e, 0x52,
   0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74,
-  0x68, 0x33, 0x32, 0x2e, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x61, 0x20,
-  0x2b, 0x20, 0x62, 0x29, 0x2c, 0x0a, 0x09, 0x09, 0x73, 0x75, 0x62, 0x3a,
-  0x20, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x52,
+  0x68, 0x33, 0x32, 0x2e, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x61, 0x3e,
+  0x3e, 0x3e, 0x62, 0x29, 0x2c, 0x72, 0x74, 0x6c, 0x3a, 0x28, 0x61, 0x2c,
+  0x62, 0x29, 0x3d, 0x3e, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50,
+  0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x63, 0x6c, 0x61,
+  0x6d, 0x70, 0x28, 0x61, 0x3c, 0x3c, 0x62, 0x7c, 0x61, 0x3e, 0x3e, 0x3e,
+  0x33, 0x32, 0x2d, 0x62, 0x29, 0x2c, 0x72, 0x74, 0x72, 0x3a, 0x28, 0x61,
+  0x2c, 0x62, 0x29, 0x3d, 0x3e, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41,
+  0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x63, 0x6c,
+  0x61, 0x6d, 0x70, 0x28, 0x61, 0x3e, 0x3e, 0x3e, 0x62, 0x7c, 0x61, 0x3c,
+  0x3c, 0x33, 0x32, 0x2d, 0x62, 0x29, 0x2c, 0x61, 0x64, 0x64, 0x3a, 0x28,
+  0x61, 0x2c, 0x62, 0x29, 0x3d, 0x3e, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f,
+  0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x63,
+  0x6c, 0x61, 0x6d, 0x70, 0x28, 0x61, 0x2b, 0x62, 0x29, 0x2c, 0x73, 0x75,
+  0x62, 0x3a, 0x28, 0x61, 0x2c, 0x62, 0x29, 0x3d, 0x3e, 0x52, 0x6f, 0x73,
+  0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33,
+  0x32, 0x2e, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x61, 0x2b, 0x62, 0x29,
+  0x2c, 0x6f, 0x72, 0x3a, 0x28, 0x61, 0x2c, 0x62, 0x29, 0x3d, 0x3e, 0x52,
   0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74,
-  0x68, 0x33, 0x32, 0x2e, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x61, 0x20,
-  0x2b, 0x20, 0x62, 0x29, 0x2c, 0x0a, 0x09, 0x09, 0x6f, 0x72, 0x3a, 0x20,
-  0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x52, 0x6f,
-  0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68,
-  0x33, 0x32, 0x2e, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x61, 0x20, 0x7c,
-  0x20, 0x62, 0x29, 0x2c, 0x0a, 0x09, 0x09, 0x78, 0x6f, 0x72, 0x3a, 0x20,
-  0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x52, 0x6f,
+  0x68, 0x33, 0x32, 0x2e, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x61, 0x7c,
+  0x62, 0x29, 0x2c, 0x78, 0x6f, 0x72, 0x3a, 0x28, 0x61, 0x2c, 0x62, 0x29,
+  0x3d, 0x3e, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e,
+  0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x63, 0x6c, 0x61, 0x6d, 0x70,
+  0x28, 0x61, 0x5e, 0x62, 0x29, 0x7d, 0x2c, 0x48, 0x4d, 0x41, 0x43, 0x53,
+  0x48, 0x41, 0x32, 0x35, 0x36, 0x3a, 0x7b, 0x73, 0x69, 0x67, 0x6e, 0x3a,
+  0x61, 0x73, 0x79, 0x6e, 0x63, 0x28, 0x6b, 0x65, 0x79, 0x2c, 0x6d, 0x73,
+  0x67, 0x29, 0x3d, 0x3e, 0x7b, 0x6b, 0x65, 0x79, 0x3d, 0x6e, 0x65, 0x77,
+  0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28,
+  0x6b, 0x65, 0x79, 0x29, 0x3b, 0x6d, 0x73, 0x67, 0x3d, 0x6e, 0x65, 0x77,
+  0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28,
+  0x6d, 0x73, 0x67, 0x29, 0x3b, 0x76, 0x61, 0x72, 0x20, 0x69, 0x6b, 0x65,
+  0x79, 0x3d, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x63, 0x72, 0x79, 0x70,
+  0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x74, 0x6c, 0x65, 0x2e, 0x69, 0x6d,
+  0x70, 0x6f, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x28, 0x22, 0x72, 0x61, 0x77,
+  0x22, 0x2c, 0x6b, 0x65, 0x79, 0x2c, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3a,
+  0x22, 0x48, 0x4d, 0x41, 0x43, 0x22, 0x2c, 0x68, 0x61, 0x73, 0x68, 0x3a,
+  0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x22, 0x53, 0x48, 0x41, 0x2d, 0x32,
+  0x35, 0x36, 0x22, 0x7d, 0x7d, 0x2c, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c,
+  0x5b, 0x22, 0x73, 0x69, 0x67, 0x6e, 0x22, 0x2c, 0x22, 0x76, 0x65, 0x72,
+  0x69, 0x66, 0x79, 0x22, 0x5d, 0x29, 0x3b, 0x72, 0x65, 0x74, 0x75, 0x72,
+  0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41,
+  0x72, 0x72, 0x61, 0x79, 0x28, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x77,
+  0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f,
+  0x2e, 0x73, 0x75, 0x62, 0x74, 0x6c, 0x65, 0x2e, 0x73, 0x69, 0x67, 0x6e,
+  0x28, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x22, 0x48, 0x4d, 0x41, 0x43,
+  0x22, 0x7d, 0x2c, 0x69, 0x6b, 0x65, 0x79, 0x2c, 0x6d, 0x73, 0x67, 0x29,
+  0x29, 0x7d, 0x7d, 0x2c, 0x43, 0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30,
+  0x3a, 0x7b, 0x51, 0x52, 0x3a, 0x28, 0x63, 0x63, 0x2c, 0x61, 0x2c, 0x62,
+  0x2c, 0x63, 0x2c, 0x64, 0x29, 0x3d, 0x3e, 0x7b, 0x63, 0x63, 0x5b, 0x61,
+  0x5d, 0x3d, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e,
+  0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x61, 0x64, 0x64, 0x28, 0x63,
+  0x63, 0x5b, 0x61, 0x5d, 0x2c, 0x63, 0x63, 0x5b, 0x62, 0x5d, 0x29, 0x3b,
+  0x63, 0x63, 0x5b, 0x64, 0x5d, 0x3d, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f,
+  0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x78,
+  0x6f, 0x72, 0x28, 0x63, 0x63, 0x5b, 0x64, 0x5d, 0x2c, 0x63, 0x63, 0x5b,
+  0x61, 0x5d, 0x29, 0x3b, 0x63, 0x63, 0x5b, 0x64, 0x5d, 0x3d, 0x52, 0x6f,
   0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68,
-  0x33, 0x32, 0x2e, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x61, 0x20, 0x5e,
-  0x20, 0x62, 0x29, 0x0a, 0x09, 0x7d, 0x2c, 0x0a, 0x09, 0x48, 0x4d, 0x41,
-  0x43, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x3a, 0x0a, 0x09, 0x7b, 0x0a,
-  0x09, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x61, 0x73, 0x79, 0x6e,
-  0x63, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x2c, 0x20, 0x6d, 0x73, 0x67, 0x29,
-  0x20, 0x3d, 0x3e, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x6b,
-  0x65, 0x79, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e,
-  0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x6b, 0x65, 0x79, 0x29,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x6d, 0x73, 0x67, 0x20, 0x3d, 0x20, 0x6e,
-  0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61,
-  0x79, 0x28, 0x6d, 0x73, 0x67, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x76,
-  0x61, 0x72, 0x20, 0x69, 0x6b, 0x65, 0x79, 0x20, 0x3d, 0x20, 0x61, 0x77,
-  0x61, 0x69, 0x74, 0x20, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x73,
-  0x75, 0x62, 0x74, 0x6c, 0x65, 0x2e, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74,
-  0x4b, 0x65, 0x79, 0x0a, 0x09, 0x09, 0x09, 0x28, 0x0a, 0x09, 0x09, 0x09,
-  0x09, 0x22, 0x72, 0x61, 0x77, 0x22, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x09,
-  0x6b, 0x65, 0x79, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x7b, 0x20, 0x6e,
-  0x61, 0x6d, 0x65, 0x3a, 0x20, 0x22, 0x48, 0x4d, 0x41, 0x43, 0x22, 0x2c,
-  0x20, 0x68, 0x61, 0x73, 0x68, 0x3a, 0x20, 0x7b, 0x20, 0x6e, 0x61, 0x6d,
-  0x65, 0x3a, 0x20, 0x22, 0x53, 0x48, 0x41, 0x2d, 0x32, 0x35, 0x36, 0x22,
-  0x20, 0x7d, 0x7d, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x66, 0x61, 0x6c,
-  0x73, 0x65, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x5b, 0x22, 0x73, 0x69,
-  0x67, 0x6e, 0x22, 0x2c, 0x20, 0x22, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79,
-  0x22, 0x5d, 0x0a, 0x09, 0x09, 0x09, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09,
-  0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55,
-  0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x61, 0x77,
-  0x61, 0x69, 0x74, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x63,
-  0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x74, 0x6c, 0x65,
-  0x2e, 0x73, 0x69, 0x67, 0x6e, 0x28, 0x7b, 0x20, 0x6e, 0x61, 0x6d, 0x65,
-  0x3a, 0x20, 0x22, 0x48, 0x4d, 0x41, 0x43, 0x22, 0x2c, 0x20, 0x7d, 0x2c,
-  0x20, 0x69, 0x6b, 0x65, 0x79, 0x2c, 0x20, 0x6d, 0x73, 0x67, 0x29, 0x29,
-  0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d, 0x2c, 0x0a, 0x09, 0x43,
-  0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x3a, 0x0a, 0x09, 0x7b, 0x0a,
-  0x09, 0x09, 0x51, 0x52, 0x3a, 0x20, 0x28, 0x63, 0x63, 0x2c, 0x20, 0x61,
-  0x2c, 0x20, 0x62, 0x2c, 0x20, 0x63, 0x2c, 0x20, 0x64, 0x29, 0x20, 0x3d,
-  0x3e, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x63, 0x5b,
-  0x61, 0x5d, 0x20, 0x3d, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41,
-  0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x61, 0x64,
-  0x64, 0x28, 0x63, 0x63, 0x5b, 0x61, 0x5d, 0x2c, 0x20, 0x63, 0x63, 0x5b,
-  0x62, 0x5d, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x63, 0x5b, 0x64,
-  0x5d, 0x20, 0x3d, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50,
-  0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x78, 0x6f, 0x72,
-  0x28, 0x63, 0x63, 0x5b, 0x64, 0x5d, 0x2c, 0x20, 0x63, 0x63, 0x5b, 0x61,
-  0x5d, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x63, 0x5b, 0x64, 0x5d,
-  0x20, 0x3d, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49,
-  0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x72, 0x74, 0x6c, 0x28,
-  0x63, 0x63, 0x5b, 0x64, 0x5d, 0x2c, 0x20, 0x31, 0x36, 0x29, 0x3b, 0x0a,
-  0x0a, 0x09, 0x09, 0x09, 0x63, 0x63, 0x5b, 0x63, 0x5d, 0x20, 0x3d, 0x20,
-  0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61,
-  0x74, 0x68, 0x33, 0x32, 0x2e, 0x61, 0x64, 0x64, 0x28, 0x63, 0x63, 0x5b,
-  0x63, 0x5d, 0x2c, 0x20, 0x63, 0x63, 0x5b, 0x64, 0x5d, 0x29, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x63, 0x63, 0x5b, 0x62, 0x5d, 0x20, 0x3d, 0x20, 0x52,
+  0x33, 0x32, 0x2e, 0x72, 0x74, 0x6c, 0x28, 0x63, 0x63, 0x5b, 0x64, 0x5d,
+  0x2c, 0x31, 0x36, 0x29, 0x3b, 0x63, 0x63, 0x5b, 0x63, 0x5d, 0x3d, 0x52,
   0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74,
-  0x68, 0x33, 0x32, 0x2e, 0x78, 0x6f, 0x72, 0x28, 0x63, 0x63, 0x5b, 0x62,
-  0x5d, 0x2c, 0x20, 0x63, 0x63, 0x5b, 0x63, 0x5d, 0x29, 0x3b, 0x0a, 0x09,
-  0x09, 0x09, 0x63, 0x63, 0x5b, 0x62, 0x5d, 0x20, 0x3d, 0x20, 0x52, 0x6f,
-  0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68,
-  0x33, 0x32, 0x2e, 0x72, 0x74, 0x6c, 0x28, 0x63, 0x63, 0x5b, 0x62, 0x5d,
-  0x2c, 0x20, 0x31, 0x32, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x63,
-  0x63, 0x5b, 0x61, 0x5d, 0x20, 0x3d, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64,
+  0x68, 0x33, 0x32, 0x2e, 0x61, 0x64, 0x64, 0x28, 0x63, 0x63, 0x5b, 0x63,
+  0x5d, 0x2c, 0x63, 0x63, 0x5b, 0x64, 0x5d, 0x29, 0x3b, 0x63, 0x63, 0x5b,
+  0x62, 0x5d, 0x3d, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49,
+  0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x78, 0x6f, 0x72, 0x28,
+  0x63, 0x63, 0x5b, 0x62, 0x5d, 0x2c, 0x63, 0x63, 0x5b, 0x63, 0x5d, 0x29,
+  0x3b, 0x63, 0x63, 0x5b, 0x62, 0x5d, 0x3d, 0x52, 0x6f, 0x73, 0x61, 0x64,
   0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e,
-  0x61, 0x64, 0x64, 0x28, 0x63, 0x63, 0x5b, 0x61, 0x5d, 0x2c, 0x20, 0x63,
-  0x63, 0x5b, 0x62, 0x5d, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x63,
-  0x5b, 0x64, 0x5d, 0x20, 0x3d, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f,
-  0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x78,
-  0x6f, 0x72, 0x28, 0x63, 0x63, 0x5b, 0x64, 0x5d, 0x2c, 0x20, 0x63, 0x63,
-  0x5b, 0x61, 0x5d, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x63, 0x5b,
-  0x64, 0x5d, 0x20, 0x3d, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41,
-  0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x72, 0x74,
-  0x6c, 0x28, 0x63, 0x63, 0x5b, 0x64, 0x5d, 0x2c, 0x20, 0x38, 0x29, 0x3b,
-  0x0a, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x63, 0x5b, 0x63, 0x5d, 0x20, 0x3d,
-  0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d,
-  0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x61, 0x64, 0x64, 0x28, 0x63, 0x63,
-  0x5b, 0x63, 0x5d, 0x2c, 0x20, 0x63, 0x63, 0x5b, 0x64, 0x5d, 0x29, 0x3b,
-  0x0a, 0x09, 0x09, 0x09, 0x63, 0x63, 0x5b, 0x62, 0x5d, 0x20, 0x3d, 0x20,
+  0x72, 0x74, 0x6c, 0x28, 0x63, 0x63, 0x5b, 0x62, 0x5d, 0x2c, 0x31, 0x32,
+  0x29, 0x3b, 0x63, 0x63, 0x5b, 0x61, 0x5d, 0x3d, 0x52, 0x6f, 0x73, 0x61,
+  0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32,
+  0x2e, 0x61, 0x64, 0x64, 0x28, 0x63, 0x63, 0x5b, 0x61, 0x5d, 0x2c, 0x63,
+  0x63, 0x5b, 0x62, 0x5d, 0x29, 0x3b, 0x63, 0x63, 0x5b, 0x64, 0x5d, 0x3d,
   0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61,
   0x74, 0x68, 0x33, 0x32, 0x2e, 0x78, 0x6f, 0x72, 0x28, 0x63, 0x63, 0x5b,
-  0x62, 0x5d, 0x2c, 0x20, 0x63, 0x63, 0x5b, 0x63, 0x5d, 0x29, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x63, 0x63, 0x5b, 0x62, 0x5d, 0x20, 0x3d, 0x20, 0x52,
-  0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74,
-  0x68, 0x33, 0x32, 0x2e, 0x72, 0x74, 0x6c, 0x28, 0x63, 0x63, 0x5b, 0x62,
-  0x5d, 0x2c, 0x20, 0x37, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x2c, 0x0a,
-  0x09, 0x09, 0x44, 0x52, 0x3a, 0x20, 0x28, 0x63, 0x63, 0x29, 0x20, 0x3d,
-  0x3e, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x52, 0x6f, 0x73,
-  0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43, 0x68, 0x61, 0x43, 0x68,
-  0x61, 0x32, 0x30, 0x2e, 0x51, 0x52, 0x28, 0x63, 0x63, 0x2c, 0x20, 0x30,
-  0x2c, 0x20, 0x34, 0x2c, 0x20, 0x20, 0x38, 0x2c, 0x20, 0x31, 0x32, 0x29,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41,
-  0x50, 0x49, 0x2e, 0x43, 0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e,
-  0x51, 0x52, 0x28, 0x63, 0x63, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x35, 0x2c,
-  0x20, 0x20, 0x39, 0x2c, 0x20, 0x31, 0x33, 0x29, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43,
+  0x64, 0x5d, 0x2c, 0x63, 0x63, 0x5b, 0x61, 0x5d, 0x29, 0x3b, 0x63, 0x63,
+  0x5b, 0x64, 0x5d, 0x3d, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50,
+  0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x72, 0x74, 0x6c,
+  0x28, 0x63, 0x63, 0x5b, 0x64, 0x5d, 0x2c, 0x38, 0x29, 0x3b, 0x63, 0x63,
+  0x5b, 0x63, 0x5d, 0x3d, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50,
+  0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32, 0x2e, 0x61, 0x64, 0x64,
+  0x28, 0x63, 0x63, 0x5b, 0x63, 0x5d, 0x2c, 0x63, 0x63, 0x5b, 0x64, 0x5d,
+  0x29, 0x3b, 0x63, 0x63, 0x5b, 0x62, 0x5d, 0x3d, 0x52, 0x6f, 0x73, 0x61,
+  0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x33, 0x32,
+  0x2e, 0x78, 0x6f, 0x72, 0x28, 0x63, 0x63, 0x5b, 0x62, 0x5d, 0x2c, 0x63,
+  0x63, 0x5b, 0x63, 0x5d, 0x29, 0x3b, 0x63, 0x63, 0x5b, 0x62, 0x5d, 0x3d,
+  0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61,
+  0x74, 0x68, 0x33, 0x32, 0x2e, 0x72, 0x74, 0x6c, 0x28, 0x63, 0x63, 0x5b,
+  0x62, 0x5d, 0x2c, 0x37, 0x29, 0x7d, 0x2c, 0x44, 0x52, 0x3a, 0x63, 0x63,
+  0x3d, 0x3e, 0x7b, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49,
+  0x2e, 0x43, 0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e, 0x51, 0x52,
+  0x28, 0x63, 0x63, 0x2c, 0x30, 0x2c, 0x34, 0x2c, 0x38, 0x2c, 0x31, 0x32,
+  0x29, 0x3b, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e,
+  0x43, 0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e, 0x51, 0x52, 0x28,
+  0x63, 0x63, 0x2c, 0x31, 0x2c, 0x35, 0x2c, 0x39, 0x2c, 0x31, 0x33, 0x29,
+  0x3b, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43,
   0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e, 0x51, 0x52, 0x28, 0x63,
-  0x63, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x36, 0x2c, 0x20, 0x31, 0x30, 0x2c,
-  0x20, 0x31, 0x34, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x52, 0x6f, 0x73,
-  0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43, 0x68, 0x61, 0x43, 0x68,
-  0x61, 0x32, 0x30, 0x2e, 0x51, 0x52, 0x28, 0x63, 0x63, 0x2c, 0x20, 0x33,
-  0x2c, 0x20, 0x37, 0x2c, 0x20, 0x31, 0x31, 0x2c, 0x20, 0x31, 0x35, 0x29,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41,
-  0x50, 0x49, 0x2e, 0x43, 0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e,
-  0x51, 0x52, 0x28, 0x63, 0x63, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x35, 0x2c,
-  0x20, 0x31, 0x30, 0x2c, 0x20, 0x31, 0x35, 0x29, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43,
+  0x63, 0x2c, 0x32, 0x2c, 0x36, 0x2c, 0x31, 0x30, 0x2c, 0x31, 0x34, 0x29,
+  0x3b, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43,
+  0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e, 0x51, 0x52, 0x28, 0x63,
+  0x63, 0x2c, 0x33, 0x2c, 0x37, 0x2c, 0x31, 0x31, 0x2c, 0x31, 0x35, 0x29,
+  0x3b, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43,
+  0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e, 0x51, 0x52, 0x28, 0x63,
+  0x63, 0x2c, 0x30, 0x2c, 0x35, 0x2c, 0x31, 0x30, 0x2c, 0x31, 0x35, 0x29,
+  0x3b, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43,
   0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e, 0x51, 0x52, 0x28, 0x63,
-  0x63, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x36, 0x2c, 0x20, 0x31, 0x31, 0x2c,
-  0x20, 0x31, 0x32, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x52, 0x6f, 0x73,
+  0x63, 0x2c, 0x31, 0x2c, 0x36, 0x2c, 0x31, 0x31, 0x2c, 0x31, 0x32, 0x29,
+  0x3b, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43,
+  0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e, 0x51, 0x52, 0x28, 0x63,
+  0x63, 0x2c, 0x32, 0x2c, 0x37, 0x2c, 0x38, 0x2c, 0x31, 0x33, 0x29, 0x3b,
+  0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43, 0x68,
+  0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e, 0x51, 0x52, 0x28, 0x63, 0x63,
+  0x2c, 0x33, 0x2c, 0x34, 0x2c, 0x39, 0x2c, 0x31, 0x34, 0x29, 0x7d, 0x2c,
+  0x43, 0x42, 0x3a, 0x63, 0x63, 0x3d, 0x3e, 0x7b, 0x76, 0x61, 0x72, 0x20,
+  0x69, 0x3b, 0x76, 0x61, 0x72, 0x20, 0x78, 0x3d, 0x6e, 0x65, 0x77, 0x20,
+  0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x31, 0x36, 0x29, 0x3b, 0x66, 0x6f,
+  0x72, 0x28, 0x69, 0x3d, 0x30, 0x3b, 0x69, 0x3c, 0x31, 0x36, 0x3b, 0x69,
+  0x2b, 0x2b, 0x29, 0x7b, 0x78, 0x5b, 0x69, 0x5d, 0x3d, 0x63, 0x63, 0x5b,
+  0x69, 0x5d, 0x7d, 0x66, 0x6f, 0x72, 0x28, 0x69, 0x3d, 0x30, 0x3b, 0x69,
+  0x3c, 0x31, 0x30, 0x3b, 0x69, 0x2b, 0x2b, 0x29, 0x7b, 0x52, 0x6f, 0x73,
   0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43, 0x68, 0x61, 0x43, 0x68,
-  0x61, 0x32, 0x30, 0x2e, 0x51, 0x52, 0x28, 0x63, 0x63, 0x2c, 0x20, 0x32,
-  0x2c, 0x20, 0x37, 0x2c, 0x20, 0x20, 0x38, 0x2c, 0x20, 0x31, 0x33, 0x29,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41,
-  0x50, 0x49, 0x2e, 0x43, 0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e,
-  0x51, 0x52, 0x28, 0x63, 0x63, 0x2c, 0x20, 0x33, 0x2c, 0x20, 0x34, 0x2c,
-  0x20, 0x20, 0x39, 0x2c, 0x20, 0x31, 0x34, 0x29, 0x3b, 0x0a, 0x09, 0x09,
-  0x7d, 0x2c, 0x0a, 0x09, 0x09, 0x43, 0x42, 0x3a, 0x20, 0x28, 0x63, 0x63,
-  0x29, 0x20, 0x3d, 0x3e, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09,
-  0x76, 0x61, 0x72, 0x20, 0x69, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x76, 0x61,
-  0x72, 0x20, 0x78, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x41, 0x72,
-  0x72, 0x61, 0x79, 0x28, 0x31, 0x36, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09,
-  0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20,
-  0x69, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29,
-  0x0a, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x78, 0x5b,
-  0x69, 0x5d, 0x20, 0x3d, 0x20, 0x63, 0x63, 0x5b, 0x69, 0x5d, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20,
-  0x28, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20,
-  0x31, 0x30, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x0a, 0x09, 0x09, 0x09,
-  0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f,
-  0x41, 0x50, 0x49, 0x2e, 0x43, 0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30,
-  0x2e, 0x44, 0x52, 0x28, 0x63, 0x63, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09,
-  0x7d, 0x0a, 0x09, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x20,
-  0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x3b,
-  0x20, 0x69, 0x2b, 0x2b, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09,
-  0x09, 0x09, 0x09, 0x63, 0x63, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x52,
+  0x61, 0x32, 0x30, 0x2e, 0x44, 0x52, 0x28, 0x63, 0x63, 0x29, 0x7d, 0x66,
+  0x6f, 0x72, 0x28, 0x69, 0x3d, 0x30, 0x3b, 0x69, 0x3c, 0x31, 0x36, 0x3b,
+  0x69, 0x2b, 0x2b, 0x29, 0x7b, 0x63, 0x63, 0x5b, 0x69, 0x5d, 0x3d, 0x52,
   0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x4d, 0x61, 0x74,
   0x68, 0x33, 0x32, 0x2e, 0x61, 0x64, 0x64, 0x28, 0x63, 0x63, 0x5b, 0x69,
-  0x5d, 0x2c, 0x20, 0x78, 0x5b, 0x69, 0x5d, 0x29, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x7d, 0x0a, 0x09, 0x09, 0x7d, 0x2c, 0x0a, 0x09, 0x09, 0x53, 0x3a,
-  0x20, 0x28, 0x63, 0x63, 0x2c, 0x20, 0x63, 0x73, 0x29, 0x20, 0x3d, 0x3e,
-  0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20,
-  0x28, 0x76, 0x61, 0x72, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20,
-  0x69, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29,
-  0x0a, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x63, 0x73,
-  0x5b, 0x34, 0x20, 0x2a, 0x20, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x63,
-  0x63, 0x5b, 0x69, 0x5d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x29,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x63, 0x73, 0x5b, 0x34, 0x20, 0x2a,
-  0x20, 0x69, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x28,
-  0x63, 0x63, 0x5b, 0x69, 0x5d, 0x20, 0x3e, 0x3e, 0x20, 0x38, 0x29, 0x20,
-  0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09,
-  0x09, 0x63, 0x73, 0x5b, 0x34, 0x20, 0x2a, 0x20, 0x69, 0x20, 0x2b, 0x20,
-  0x32, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x63, 0x63, 0x5b, 0x69, 0x5d,
-  0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78,
-  0x46, 0x46, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x63, 0x73, 0x5b,
-  0x34, 0x20, 0x2a, 0x20, 0x69, 0x20, 0x2b, 0x20, 0x33, 0x5d, 0x20, 0x3d,
-  0x20, 0x28, 0x28, 0x63, 0x63, 0x5b, 0x69, 0x5d, 0x20, 0x3e, 0x3e, 0x20,
-  0x32, 0x34, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x29, 0x3b,
-  0x0a, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x7d, 0x2c, 0x0a, 0x09,
-  0x09, 0x42, 0x3a, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x2c, 0x20, 0x6e, 0x6f,
-  0x6e, 0x63, 0x65, 0x2c, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, 0x20,
-  0x6f, 0x75, 0x74, 0x29, 0x20, 0x3d, 0x3e, 0x0a, 0x09, 0x09, 0x7b, 0x0a,
-  0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x63, 0x63, 0x20, 0x3d, 0x0a,
-  0x09, 0x09, 0x09, 0x5b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x30, 0x78, 0x36,
-  0x31, 0x37, 0x30, 0x37, 0x38, 0x36, 0x35, 0x2c, 0x20, 0x30, 0x78, 0x33,
-  0x33, 0x32, 0x30, 0x36, 0x34, 0x36, 0x65, 0x2c, 0x20, 0x30, 0x78, 0x37,
-  0x39, 0x36, 0x32, 0x32, 0x64, 0x33, 0x32, 0x2c, 0x20, 0x30, 0x78, 0x36,
-  0x62, 0x32, 0x30, 0x36, 0x35, 0x37, 0x34, 0x2c, 0x0a, 0x0a, 0x09, 0x09,
-  0x09, 0x09, 0x6b, 0x65, 0x79, 0x5b, 0x30, 0x5d, 0x20, 0x7c, 0x20, 0x28,
-  0x6b, 0x65, 0x79, 0x5b, 0x31, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29,
-  0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x5b, 0x32, 0x5d, 0x20, 0x3c,
-  0x3c, 0x20, 0x31, 0x36, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79,
-  0x5b, 0x33, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x34, 0x29, 0x2c, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x6b, 0x65, 0x79, 0x5b, 0x34, 0x5d, 0x20, 0x7c,
-  0x20, 0x28, 0x6b, 0x65, 0x79, 0x5b, 0x35, 0x5d, 0x20, 0x3c, 0x3c, 0x20,
-  0x38, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x5b, 0x36, 0x5d,
-  0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x6b,
-  0x65, 0x79, 0x5b, 0x37, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x34, 0x29,
-  0x2c, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x6b, 0x65, 0x79, 0x5b, 0x38, 0x5d,
-  0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x5b, 0x39, 0x5d, 0x20, 0x3c,
-  0x3c, 0x20, 0x38, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x5b,
-  0x31, 0x30, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36, 0x29, 0x20, 0x7c,
-  0x20, 0x28, 0x6b, 0x65, 0x79, 0x5b, 0x31, 0x31, 0x5d, 0x20, 0x3c, 0x3c,
-  0x20, 0x32, 0x34, 0x29, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x6b, 0x65,
-  0x79, 0x5b, 0x31, 0x32, 0x5d, 0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79,
-  0x5b, 0x31, 0x33, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x20, 0x7c,
-  0x20, 0x28, 0x6b, 0x65, 0x79, 0x5b, 0x31, 0x34, 0x5d, 0x20, 0x3c, 0x3c,
-  0x20, 0x31, 0x36, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x5b,
-  0x31, 0x35, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x34, 0x29, 0x2c, 0x0a,
-  0x0a, 0x09, 0x09, 0x09, 0x09, 0x6b, 0x65, 0x79, 0x5b, 0x31, 0x36, 0x5d,
-  0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x5b, 0x31, 0x37, 0x5d, 0x20,
-  0x3c, 0x3c, 0x20, 0x38, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79,
-  0x5b, 0x31, 0x38, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36, 0x29, 0x20,
-  0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x5b, 0x31, 0x39, 0x5d, 0x20, 0x3c,
-  0x3c, 0x20, 0x32, 0x34, 0x29, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x6b,
-  0x65, 0x79, 0x5b, 0x32, 0x30, 0x5d, 0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65,
-  0x79, 0x5b, 0x32, 0x31, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x20,
-  0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x5b, 0x32, 0x32, 0x5d, 0x20, 0x3c,
-  0x3c, 0x20, 0x31, 0x36, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79,
-  0x5b, 0x32, 0x33, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x34, 0x29, 0x2c,
-  0x0a, 0x09, 0x09, 0x09, 0x09, 0x6b, 0x65, 0x79, 0x5b, 0x32, 0x34, 0x5d,
-  0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x5b, 0x32, 0x35, 0x5d, 0x20,
-  0x3c, 0x3c, 0x20, 0x38, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79,
-  0x5b, 0x32, 0x36, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36, 0x29, 0x20,
-  0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x5b, 0x32, 0x37, 0x5d, 0x20, 0x3c,
-  0x3c, 0x20, 0x32, 0x34, 0x29, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x6b,
-  0x65, 0x79, 0x5b, 0x32, 0x38, 0x5d, 0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65,
-  0x79, 0x5b, 0x32, 0x39, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x20,
-  0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x5b, 0x33, 0x30, 0x5d, 0x20, 0x3c,
-  0x3c, 0x20, 0x31, 0x36, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x6b, 0x65, 0x79,
-  0x5b, 0x33, 0x31, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x34, 0x29, 0x2c,
-  0x0a, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2c,
-  0x0a, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5b,
-  0x30, 0x5d, 0x20, 0x7c, 0x20, 0x28, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5b,
-  0x31, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x20, 0x7c, 0x20, 0x28,
-  0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5b, 0x32, 0x5d, 0x20, 0x3c, 0x3c, 0x20,
-  0x31, 0x36, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x6e, 0x6f, 0x6e, 0x63, 0x65,
-  0x5b, 0x33, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x34, 0x29, 0x2c, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5b, 0x34, 0x5d,
-  0x20, 0x7c, 0x20, 0x28, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5b, 0x35, 0x5d,
-  0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x6e, 0x6f,
-  0x6e, 0x63, 0x65, 0x5b, 0x36, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36,
-  0x29, 0x20, 0x7c, 0x20, 0x28, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5b, 0x37,
-  0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x34, 0x29, 0x2c, 0x0a, 0x09, 0x09,
-  0x09, 0x09, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5b, 0x38, 0x5d, 0x20, 0x7c,
-  0x20, 0x28, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5b, 0x39, 0x5d, 0x20, 0x3c,
-  0x3c, 0x20, 0x38, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x6e, 0x6f, 0x6e, 0x63,
-  0x65, 0x5b, 0x31, 0x30, 0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x36, 0x29,
-  0x20, 0x7c, 0x20, 0x28, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5b, 0x31, 0x31,
-  0x5d, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x34, 0x29, 0x0a, 0x09, 0x09, 0x09,
-  0x5d, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x52, 0x6f, 0x73, 0x61, 0x64,
-  0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43, 0x68, 0x61, 0x43, 0x68, 0x61, 0x32,
-  0x30, 0x2e, 0x43, 0x42, 0x28, 0x63, 0x63, 0x29, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43,
-  0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e, 0x53, 0x28, 0x63, 0x63,
-  0x2c, 0x20, 0x6f, 0x75, 0x74, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x2c,
-  0x0a, 0x09, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x3a, 0x20,
-  0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x28, 0x6b, 0x65, 0x79, 0x2c, 0x20,
-  0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x2c, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
-  0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, 0x3d, 0x3e, 0x0a, 0x09,
-  0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x63, 0x6f,
-  0x75, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6c,
-  0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x69, 0x66,
-  0x20, 0x28, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x28, 0x32,
-  0x37, 0x34, 0x38, 0x37, 0x37, 0x39, 0x30, 0x36, 0x39, 0x34, 0x34, 0x20,
-  0x2d, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x2a, 0x20, 0x36, 0x34,
-  0x29, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x75,
-  0x6c, 0x6c, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x72,
-  0x65, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x41, 0x72, 0x72,
-  0x61, 0x79, 0x28, 0x30, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x76, 0x61,
-  0x72, 0x20, 0x63, 0x63, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x3d, 0x20,
+  0x5d, 0x2c, 0x78, 0x5b, 0x69, 0x5d, 0x29, 0x7d, 0x7d, 0x2c, 0x53, 0x3a,
+  0x28, 0x63, 0x63, 0x2c, 0x63, 0x73, 0x29, 0x3d, 0x3e, 0x7b, 0x66, 0x6f,
+  0x72, 0x28, 0x76, 0x61, 0x72, 0x20, 0x69, 0x3d, 0x30, 0x3b, 0x69, 0x3c,
+  0x31, 0x36, 0x3b, 0x69, 0x2b, 0x2b, 0x29, 0x7b, 0x63, 0x73, 0x5b, 0x34,
+  0x2a, 0x69, 0x5d, 0x3d, 0x63, 0x63, 0x5b, 0x69, 0x5d, 0x26, 0x32, 0x35,
+  0x35, 0x3b, 0x63, 0x73, 0x5b, 0x34, 0x2a, 0x69, 0x2b, 0x31, 0x5d, 0x3d,
+  0x63, 0x63, 0x5b, 0x69, 0x5d, 0x3e, 0x3e, 0x38, 0x26, 0x32, 0x35, 0x35,
+  0x3b, 0x63, 0x73, 0x5b, 0x34, 0x2a, 0x69, 0x2b, 0x32, 0x5d, 0x3d, 0x63,
+  0x63, 0x5b, 0x69, 0x5d, 0x3e, 0x3e, 0x31, 0x36, 0x26, 0x32, 0x35, 0x35,
+  0x3b, 0x63, 0x73, 0x5b, 0x34, 0x2a, 0x69, 0x2b, 0x33, 0x5d, 0x3d, 0x63,
+  0x63, 0x5b, 0x69, 0x5d, 0x3e, 0x3e, 0x32, 0x34, 0x26, 0x32, 0x35, 0x35,
+  0x7d, 0x7d, 0x2c, 0x42, 0x3a, 0x28, 0x6b, 0x65, 0x79, 0x2c, 0x6e, 0x6f,
+  0x6e, 0x63, 0x65, 0x2c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, 0x6f, 0x75,
+  0x74, 0x29, 0x3d, 0x3e, 0x7b, 0x76, 0x61, 0x72, 0x20, 0x63, 0x63, 0x3d,
+  0x5b, 0x31, 0x36, 0x33, 0x34, 0x37, 0x36, 0x30, 0x38, 0x30, 0x35, 0x2c,
+  0x38, 0x35, 0x37, 0x37, 0x36, 0x30, 0x38, 0x37, 0x38, 0x2c, 0x32, 0x30,
+  0x33, 0x36, 0x34, 0x37, 0x37, 0x32, 0x33, 0x34, 0x2c, 0x31, 0x37, 0x39,
+  0x37, 0x32, 0x38, 0x35, 0x32, 0x33, 0x36, 0x2c, 0x6b, 0x65, 0x79, 0x5b,
+  0x30, 0x5d, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x31, 0x5d, 0x3c, 0x3c, 0x38,
+  0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x32, 0x5d, 0x3c, 0x3c, 0x31, 0x36, 0x7c,
+  0x6b, 0x65, 0x79, 0x5b, 0x33, 0x5d, 0x3c, 0x3c, 0x32, 0x34, 0x2c, 0x6b,
+  0x65, 0x79, 0x5b, 0x34, 0x5d, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x35, 0x5d,
+  0x3c, 0x3c, 0x38, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x36, 0x5d, 0x3c, 0x3c,
+  0x31, 0x36, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x37, 0x5d, 0x3c, 0x3c, 0x32,
+  0x34, 0x2c, 0x6b, 0x65, 0x79, 0x5b, 0x38, 0x5d, 0x7c, 0x6b, 0x65, 0x79,
+  0x5b, 0x39, 0x5d, 0x3c, 0x3c, 0x38, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x31,
+  0x30, 0x5d, 0x3c, 0x3c, 0x31, 0x36, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x31,
+  0x31, 0x5d, 0x3c, 0x3c, 0x32, 0x34, 0x2c, 0x6b, 0x65, 0x79, 0x5b, 0x31,
+  0x32, 0x5d, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x31, 0x33, 0x5d, 0x3c, 0x3c,
+  0x38, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x31, 0x34, 0x5d, 0x3c, 0x3c, 0x31,
+  0x36, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x31, 0x35, 0x5d, 0x3c, 0x3c, 0x32,
+  0x34, 0x2c, 0x6b, 0x65, 0x79, 0x5b, 0x31, 0x36, 0x5d, 0x7c, 0x6b, 0x65,
+  0x79, 0x5b, 0x31, 0x37, 0x5d, 0x3c, 0x3c, 0x38, 0x7c, 0x6b, 0x65, 0x79,
+  0x5b, 0x31, 0x38, 0x5d, 0x3c, 0x3c, 0x31, 0x36, 0x7c, 0x6b, 0x65, 0x79,
+  0x5b, 0x31, 0x39, 0x5d, 0x3c, 0x3c, 0x32, 0x34, 0x2c, 0x6b, 0x65, 0x79,
+  0x5b, 0x32, 0x30, 0x5d, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x32, 0x31, 0x5d,
+  0x3c, 0x3c, 0x38, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x32, 0x32, 0x5d, 0x3c,
+  0x3c, 0x31, 0x36, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x32, 0x33, 0x5d, 0x3c,
+  0x3c, 0x32, 0x34, 0x2c, 0x6b, 0x65, 0x79, 0x5b, 0x32, 0x34, 0x5d, 0x7c,
+  0x6b, 0x65, 0x79, 0x5b, 0x32, 0x35, 0x5d, 0x3c, 0x3c, 0x38, 0x7c, 0x6b,
+  0x65, 0x79, 0x5b, 0x32, 0x36, 0x5d, 0x3c, 0x3c, 0x31, 0x36, 0x7c, 0x6b,
+  0x65, 0x79, 0x5b, 0x32, 0x37, 0x5d, 0x3c, 0x3c, 0x32, 0x34, 0x2c, 0x6b,
+  0x65, 0x79, 0x5b, 0x32, 0x38, 0x5d, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x32,
+  0x39, 0x5d, 0x3c, 0x3c, 0x38, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x33, 0x30,
+  0x5d, 0x3c, 0x3c, 0x31, 0x36, 0x7c, 0x6b, 0x65, 0x79, 0x5b, 0x33, 0x31,
+  0x5d, 0x3c, 0x3c, 0x32, 0x34, 0x2c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2c,
+  0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5b, 0x30, 0x5d, 0x7c, 0x6e, 0x6f, 0x6e,
+  0x63, 0x65, 0x5b, 0x31, 0x5d, 0x3c, 0x3c, 0x38, 0x7c, 0x6e, 0x6f, 0x6e,
+  0x63, 0x65, 0x5b, 0x32, 0x5d, 0x3c, 0x3c, 0x31, 0x36, 0x7c, 0x6e, 0x6f,
+  0x6e, 0x63, 0x65, 0x5b, 0x33, 0x5d, 0x3c, 0x3c, 0x32, 0x34, 0x2c, 0x6e,
+  0x6f, 0x6e, 0x63, 0x65, 0x5b, 0x34, 0x5d, 0x7c, 0x6e, 0x6f, 0x6e, 0x63,
+  0x65, 0x5b, 0x35, 0x5d, 0x3c, 0x3c, 0x38, 0x7c, 0x6e, 0x6f, 0x6e, 0x63,
+  0x65, 0x5b, 0x36, 0x5d, 0x3c, 0x3c, 0x31, 0x36, 0x7c, 0x6e, 0x6f, 0x6e,
+  0x63, 0x65, 0x5b, 0x37, 0x5d, 0x3c, 0x3c, 0x32, 0x34, 0x2c, 0x6e, 0x6f,
+  0x6e, 0x63, 0x65, 0x5b, 0x38, 0x5d, 0x7c, 0x6e, 0x6f, 0x6e, 0x63, 0x65,
+  0x5b, 0x39, 0x5d, 0x3c, 0x3c, 0x38, 0x7c, 0x6e, 0x6f, 0x6e, 0x63, 0x65,
+  0x5b, 0x31, 0x30, 0x5d, 0x3c, 0x3c, 0x31, 0x36, 0x7c, 0x6e, 0x6f, 0x6e,
+  0x63, 0x65, 0x5b, 0x31, 0x31, 0x5d, 0x3c, 0x3c, 0x32, 0x34, 0x5d, 0x3b,
+  0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43, 0x68,
+  0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e, 0x43, 0x42, 0x28, 0x63, 0x63,
+  0x29, 0x3b, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e,
+  0x43, 0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e, 0x53, 0x28, 0x63,
+  0x63, 0x2c, 0x6f, 0x75, 0x74, 0x29, 0x7d, 0x2c, 0x65, 0x6e, 0x63, 0x72,
+  0x79, 0x70, 0x74, 0x3a, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x28, 0x6b, 0x65,
+  0x79, 0x2c, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x2c, 0x62, 0x6c, 0x6f, 0x63,
+  0x6b, 0x2c, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3d, 0x3e, 0x7b, 0x76, 0x61,
+  0x72, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3d, 0x64, 0x61, 0x74, 0x61,
+  0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x69, 0x66, 0x28, 0x63,
+  0x6f, 0x75, 0x6e, 0x74, 0x3e, 0x32, 0x37, 0x34, 0x38, 0x37, 0x37, 0x39,
+  0x30, 0x36, 0x39, 0x34, 0x34, 0x2d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2a,
+  0x36, 0x34, 0x29, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x75,
+  0x6c, 0x6c, 0x3b, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x74, 0x3d, 0x6e,
+  0x65, 0x77, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x30, 0x29, 0x3b,
+  0x76, 0x61, 0x72, 0x20, 0x63, 0x63, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x3d,
   0x6e, 0x65, 0x77, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x36, 0x34,
-  0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x73, 0x69,
-  0x7a, 0x65, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x77,
-  0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20,
-  0x3e, 0x20, 0x36, 0x34, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09,
-  0x09, 0x09, 0x09, 0x72, 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74,
-  0x68, 0x20, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x20, 0x36,
-  0x34, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x52, 0x6f, 0x73, 0x61, 0x64,
-  0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43, 0x68, 0x61, 0x43, 0x68, 0x61, 0x32,
-  0x30, 0x2e, 0x42, 0x28, 0x6b, 0x65, 0x79, 0x2c, 0x20, 0x6e, 0x6f, 0x6e,
-  0x63, 0x65, 0x2c, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2b, 0x2b, 0x2c,
-  0x20, 0x63, 0x63, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x29, 0x3b, 0x0a, 0x09,
-  0x09, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x76, 0x61, 0x72, 0x20,
-  0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x36,
-  0x34, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x72, 0x65, 0x74, 0x5b,
-  0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x20, 0x69, 0x5d, 0x20, 0x3d, 0x20,
-  0x63, 0x63, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x69, 0x5d, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b, 0x3d, 0x20,
-  0x36, 0x34, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x63, 0x6f, 0x75, 0x6e,
-  0x74, 0x20, 0x2d, 0x3d, 0x20, 0x36, 0x34, 0x3b, 0x0a, 0x09, 0x09, 0x09,
-  0x7d, 0x0a, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6f, 0x75,
-  0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x7b,
-  0x0a, 0x09, 0x09, 0x09, 0x09, 0x72, 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e,
-  0x67, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b,
-  0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09,
+  0x29, 0x3b, 0x76, 0x61, 0x72, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x3d, 0x30,
+  0x3b, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x28, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+  0x3e, 0x36, 0x34, 0x29, 0x7b, 0x72, 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e,
+  0x67, 0x74, 0x68, 0x3d, 0x73, 0x69, 0x7a, 0x65, 0x2b, 0x36, 0x34, 0x3b,
   0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43, 0x68,
   0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e, 0x42, 0x28, 0x6b, 0x65, 0x79,
-  0x2c, 0x20, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x2c, 0x20, 0x62, 0x6c, 0x6f,
-  0x63, 0x6b, 0x2c, 0x20, 0x63, 0x63, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x29,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x76,
-  0x61, 0x72, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20,
-  0x3c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x20, 0x69, 0x2b, 0x2b,
-  0x29, 0x20, 0x72, 0x65, 0x74, 0x5b, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2b,
-  0x20, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x63, 0x63, 0x62, 0x6c, 0x6f, 0x63,
-  0x6b, 0x5b, 0x69, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09,
-  0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x69,
-  0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x64, 0x61,
-  0x74, 0x61, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x20, 0x69,
-  0x2b, 0x2b, 0x29, 0x20, 0x72, 0x65, 0x74, 0x5b, 0x69, 0x5d, 0x20, 0x5e,
-  0x3d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x5b, 0x69, 0x5d, 0x3b, 0x0a, 0x09,
-  0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77,
+  0x2c, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x2c, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
+  0x2b, 0x2b, 0x2c, 0x63, 0x63, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x29, 0x3b,
+  0x66, 0x6f, 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, 0x69, 0x3d, 0x30, 0x3b,
+  0x69, 0x3c, 0x36, 0x34, 0x3b, 0x69, 0x2b, 0x2b, 0x29, 0x72, 0x65, 0x74,
+  0x5b, 0x73, 0x69, 0x7a, 0x65, 0x2b, 0x69, 0x5d, 0x3d, 0x63, 0x63, 0x62,
+  0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x69, 0x5d, 0x3b, 0x73, 0x69, 0x7a, 0x65,
+  0x2b, 0x3d, 0x36, 0x34, 0x3b, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2d, 0x3d,
+  0x36, 0x34, 0x7d, 0x69, 0x66, 0x28, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3e,
+  0x30, 0x29, 0x7b, 0x72, 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74,
+  0x68, 0x3d, 0x73, 0x69, 0x7a, 0x65, 0x2b, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+  0x3b, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43,
+  0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e, 0x42, 0x28, 0x6b, 0x65,
+  0x79, 0x2c, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x2c, 0x62, 0x6c, 0x6f, 0x63,
+  0x6b, 0x2c, 0x63, 0x63, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x29, 0x3b, 0x66,
+  0x6f, 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, 0x69, 0x3d, 0x30, 0x3b, 0x69,
+  0x3c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x69, 0x2b, 0x2b, 0x29, 0x72,
+  0x65, 0x74, 0x5b, 0x73, 0x69, 0x7a, 0x65, 0x2b, 0x69, 0x5d, 0x3d, 0x63,
+  0x63, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x69, 0x5d, 0x7d, 0x66, 0x6f,
+  0x72, 0x28, 0x76, 0x61, 0x72, 0x20, 0x69, 0x3d, 0x30, 0x3b, 0x69, 0x3c,
+  0x64, 0x61, 0x74, 0x61, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b,
+  0x69, 0x2b, 0x2b, 0x29, 0x72, 0x65, 0x74, 0x5b, 0x69, 0x5d, 0x5e, 0x3d,
+  0x64, 0x61, 0x74, 0x61, 0x5b, 0x69, 0x5d, 0x3b, 0x72, 0x65, 0x74, 0x75,
+  0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38,
+  0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x72, 0x65, 0x74, 0x29, 0x7d, 0x7d,
+  0x2c, 0x42, 0x61, 0x73, 0x65, 0x36, 0x34, 0x3a, 0x7b, 0x65, 0x6e, 0x63,
+  0x6f, 0x64, 0x65, 0x3a, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x78, 0x3d,
+  0x3e, 0x7b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x77, 0x61,
+  0x69, 0x74, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69,
+  0x73, 0x65, 0x28, 0x72, 0x3d, 0x3e, 0x7b, 0x63, 0x6f, 0x6e, 0x73, 0x74,
+  0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x3d, 0x6e, 0x65, 0x77, 0x20,
+  0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x61, 0x64, 0x65, 0x72, 0x3b, 0x72,
+  0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65,
+  0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x28, 0x22,
+  0x6c, 0x6f, 0x61, 0x64, 0x22, 0x2c, 0x28, 0x29, 0x3d, 0x3e, 0x72, 0x28,
+  0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x73, 0x75, 0x6c,
+  0x74, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x22, 0x2c, 0x22, 0x29,
+  0x5b, 0x31, 0x5d, 0x29, 0x29, 0x3b, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72,
+  0x2e, 0x72, 0x65, 0x61, 0x64, 0x41, 0x73, 0x44, 0x61, 0x74, 0x61, 0x55,
+  0x52, 0x4c, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x42, 0x6c, 0x6f, 0x62, 0x28,
+  0x5b, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72,
+  0x72, 0x61, 0x79, 0x28, 0x78, 0x29, 0x5d, 0x29, 0x29, 0x7d, 0x29, 0x7d,
+  0x2c, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x3a, 0x62, 0x36, 0x34, 0x3d,
+  0x3e, 0x7b, 0x76, 0x61, 0x72, 0x20, 0x64, 0x65, 0x63, 0x31, 0x3d, 0x76,
+  0x3d, 0x3e, 0x7b, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x28, 0x76, 0x29,
+  0x7b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x41, 0x22, 0x3a, 0x72, 0x65, 0x74,
+  0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x42,
+  0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x3b, 0x63,
+  0x61, 0x73, 0x65, 0x22, 0x43, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72,
+  0x6e, 0x20, 0x32, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x44, 0x22, 0x3a,
+  0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x33, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x45, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x34, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x46, 0x22, 0x3a, 0x72, 0x65,
+  0x74, 0x75, 0x72, 0x6e, 0x20, 0x35, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22,
+  0x47, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x36, 0x3b,
+  0x63, 0x61, 0x73, 0x65, 0x22, 0x48, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75,
+  0x72, 0x6e, 0x20, 0x37, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x49, 0x22,
+  0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x38, 0x3b, 0x63, 0x61,
+  0x73, 0x65, 0x22, 0x4a, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+  0x20, 0x39, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x4b, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x30, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x4c, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x31, 0x31, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x4d, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x32, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x4e, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x31, 0x33, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x4f, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x34, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x50, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x31, 0x35, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x51, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x36, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x52, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x31, 0x37, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x53, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x38, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x54, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x31, 0x39, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x55, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x32, 0x30, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x56, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x32, 0x31, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x57, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x32, 0x32, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x58, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x32, 0x33, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x59, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x32, 0x34, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x5a, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x32, 0x35, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x61, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x32, 0x36, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x62, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x32, 0x37, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x63, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x32, 0x38, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x64, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x32, 0x39, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x65, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x33, 0x30, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x66, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x33, 0x31, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x67, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x33, 0x32, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x68, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x33, 0x33, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x69, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x33, 0x34, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x6a, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x33, 0x35, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x6b, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x33, 0x36, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x6c, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x33, 0x37, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x6d, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x33, 0x38, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x6e, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x33, 0x39, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x6f, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x34, 0x30, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x70, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x34, 0x31, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x71, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x34, 0x32, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x72, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x34, 0x33, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x73, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x34, 0x34, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x74, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x34, 0x35, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x75, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x34, 0x36, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x76, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x34, 0x37, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x77, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x34, 0x38, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x78, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x34, 0x39, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x79, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x35, 0x30, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x7a, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x35, 0x31, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x30, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x35, 0x32, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x31, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x35, 0x33, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x32, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x35, 0x34, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x33, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x35, 0x35, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x34, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x35, 0x36, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x35, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x35, 0x37, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x36, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x35, 0x38, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x37, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x35, 0x39, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x38, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x36, 0x30, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x39, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x36, 0x31, 0x3b, 0x63, 0x61, 0x73, 0x65, 0x22, 0x2b, 0x22, 0x3a, 0x72,
+  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x36, 0x32, 0x3b, 0x63, 0x61, 0x73,
+  0x65, 0x22, 0x2f, 0x22, 0x3a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x36, 0x33, 0x7d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x32, 0x35,
+  0x35, 0x7d, 0x3b, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x74, 0x3d, 0x6e,
+  0x65, 0x77, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x30, 0x29, 0x3b,
+  0x76, 0x61, 0x72, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3d, 0x30,
+  0x3b, 0x76, 0x61, 0x72, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53,
+  0x3d, 0x30, 0x3b, 0x66, 0x6f, 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, 0x69,
+  0x3d, 0x30, 0x3b, 0x69, 0x3c, 0x62, 0x36, 0x34, 0x2e, 0x6c, 0x65, 0x6e,
+  0x67, 0x74, 0x68, 0x3b, 0x69, 0x2b, 0x2b, 0x29, 0x7b, 0x69, 0x66, 0x28,
+  0x62, 0x36, 0x34, 0x5b, 0x69, 0x5d, 0x3d, 0x3d, 0x22, 0x3d, 0x22, 0x29,
+  0x7b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x3d, 0x30, 0x3b, 0x63,
+  0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x7d, 0x76, 0x61, 0x72, 0x20,
+  0x76, 0x61, 0x6c, 0x3d, 0x64, 0x65, 0x63, 0x31, 0x28, 0x62, 0x36, 0x34,
+  0x5b, 0x69, 0x5d, 0x29, 0x3b, 0x69, 0x66, 0x28, 0x76, 0x61, 0x6c, 0x3d,
+  0x3d, 0x32, 0x35, 0x35, 0x29, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+  0x6e, 0x75, 0x6c, 0x6c, 0x3b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3d,
+  0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3c, 0x3c, 0x36, 0x7c, 0x76,
+  0x61, 0x6c, 0x29, 0x26, 0x36, 0x35, 0x35, 0x33, 0x35, 0x3b, 0x62, 0x75,
+  0x66, 0x66, 0x65, 0x72, 0x53, 0x2b, 0x3d, 0x36, 0x3b, 0x69, 0x66, 0x28,
+  0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x3e, 0x3d, 0x38, 0x29, 0x7b,
+  0x76, 0x61, 0x72, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x3d, 0x31, 0x36,
+  0x2d, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x26, 0x32, 0x35, 0x35,
+  0x3b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3d, 0x62, 0x75, 0x66, 0x66,
+  0x65, 0x72, 0x3c, 0x3c, 0x73, 0x68, 0x69, 0x66, 0x74, 0x26, 0x36, 0x35,
+  0x35, 0x33, 0x35, 0x3b, 0x72, 0x65, 0x74, 0x5b, 0x72, 0x65, 0x74, 0x2e,
+  0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5d, 0x3d, 0x62, 0x75, 0x66, 0x66,
+  0x65, 0x72, 0x3e, 0x3e, 0x3e, 0x38, 0x26, 0x32, 0x35, 0x35, 0x3b, 0x62,
+  0x75, 0x66, 0x66, 0x65, 0x72, 0x3d, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72,
+  0x26, 0x32, 0x35, 0x35, 0x3b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3d,
+  0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x3e, 0x3e, 0x73, 0x68, 0x69,
+  0x66, 0x74, 0x26, 0x36, 0x35, 0x35, 0x33, 0x35, 0x3b, 0x62, 0x75, 0x66,
+  0x66, 0x65, 0x72, 0x53, 0x2d, 0x3d, 0x38, 0x7d, 0x7d, 0x69, 0x66, 0x28,
+  0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x3e, 0x30, 0x29, 0x7b, 0x62,
+  0x75, 0x66, 0x66, 0x65, 0x72, 0x3d, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72,
+  0x3c, 0x3c, 0x31, 0x36, 0x2d, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53,
+  0x26, 0x36, 0x35, 0x35, 0x33, 0x35, 0x3b, 0x72, 0x65, 0x74, 0x5b, 0x72,
+  0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5d, 0x3d, 0x62,
+  0x75, 0x66, 0x66, 0x65, 0x72, 0x3e, 0x3e, 0x3e, 0x38, 0x26, 0x32, 0x35,
+  0x35, 0x7d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77,
   0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28,
-  0x72, 0x65, 0x74, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d,
-  0x2c, 0x0a, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x36, 0x34, 0x3a, 0x0a,
-  0x09, 0x7b, 0x0a, 0x09, 0x09, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x3a,
-  0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x28, 0x78, 0x29, 0x20, 0x3d,
-  0x3e, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x72, 0x65, 0x74,
-  0x75, 0x72, 0x6e, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x6e, 0x65,
-  0x77, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x28, 0x72, 0x20,
-  0x3d, 0x3e, 0x0a, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09,
-  0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72,
-  0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x46, 0x69, 0x6c, 0x65, 0x52,
-  0x65, 0x61, 0x64, 0x65, 0x72, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09,
-  0x09, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x61, 0x64, 0x64, 0x45,
-  0x76, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72,
-  0x28, 0x22, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x2c, 0x20, 0x28, 0x29, 0x20,
-  0x3d, 0x3e, 0x20, 0x72, 0x28, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e,
-  0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74,
-  0x28, 0x22, 0x2c, 0x22, 0x29, 0x5b, 0x31, 0x5d, 0x29, 0x29, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x72,
-  0x65, 0x61, 0x64, 0x41, 0x73, 0x44, 0x61, 0x74, 0x61, 0x55, 0x52, 0x4c,
-  0x28, 0x6e, 0x65, 0x77, 0x20, 0x42, 0x6c, 0x6f, 0x62, 0x28, 0x5b, 0x6e,
-  0x65, 0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61,
-  0x79, 0x28, 0x78, 0x29, 0x5d, 0x29, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09,
-  0x7d, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x2c, 0x0a, 0x0a, 0x09, 0x09,
-  0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x3a, 0x20, 0x28, 0x62, 0x36, 0x34,
-  0x29, 0x20, 0x3d, 0x3e, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09,
-  0x76, 0x61, 0x72, 0x20, 0x64, 0x65, 0x63, 0x31, 0x20, 0x3d, 0x20, 0x28,
-  0x76, 0x29, 0x20, 0x3d, 0x3e, 0x0a, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09,
-  0x09, 0x09, 0x09, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x76,
-  0x29, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09,
-  0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x41, 0x27, 0x3a, 0x20, 0x72,
-  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x42, 0x27, 0x3a,
-  0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x20, 0x31, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x43,
-  0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x20, 0x32,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20,
-  0x27, 0x44, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-  0x20, 0x33, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73,
-  0x65, 0x20, 0x27, 0x45, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-  0x6e, 0x20, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63,
-  0x61, 0x73, 0x65, 0x20, 0x27, 0x46, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74,
-  0x75, 0x72, 0x6e, 0x20, 0x20, 0x35, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09,
-  0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x47, 0x27, 0x3a, 0x20, 0x72,
-  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x20, 0x36, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x48, 0x27, 0x3a,
-  0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x20, 0x37, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x49,
-  0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x20, 0x38,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20,
-  0x27, 0x4a, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-  0x20, 0x39, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73,
-  0x65, 0x20, 0x27, 0x4b, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-  0x6e, 0x20, 0x31, 0x30, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63,
-  0x61, 0x73, 0x65, 0x20, 0x27, 0x4c, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74,
-  0x75, 0x72, 0x6e, 0x20, 0x31, 0x31, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09,
-  0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x4d, 0x27, 0x3a, 0x20, 0x72,
-  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x4e, 0x27, 0x3a,
-  0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x33, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x4f,
-  0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x34,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20,
-  0x27, 0x50, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-  0x31, 0x35, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73,
-  0x65, 0x20, 0x27, 0x51, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-  0x6e, 0x20, 0x31, 0x36, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63,
-  0x61, 0x73, 0x65, 0x20, 0x27, 0x52, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74,
-  0x75, 0x72, 0x6e, 0x20, 0x31, 0x37, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09,
-  0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x53, 0x27, 0x3a, 0x20, 0x72,
-  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x38, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x54, 0x27, 0x3a,
-  0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x31, 0x39, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x55,
-  0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x32, 0x30,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20,
-  0x27, 0x56, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-  0x32, 0x31, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73,
-  0x65, 0x20, 0x27, 0x57, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-  0x6e, 0x20, 0x32, 0x32, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63,
-  0x61, 0x73, 0x65, 0x20, 0x27, 0x58, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74,
-  0x75, 0x72, 0x6e, 0x20, 0x32, 0x33, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09,
-  0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x59, 0x27, 0x3a, 0x20, 0x72,
-  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x32, 0x34, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x5a, 0x27, 0x3a,
-  0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x32, 0x35, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x61,
-  0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x32, 0x36,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20,
-  0x27, 0x62, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-  0x32, 0x37, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73,
-  0x65, 0x20, 0x27, 0x63, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-  0x6e, 0x20, 0x32, 0x38, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63,
-  0x61, 0x73, 0x65, 0x20, 0x27, 0x64, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74,
-  0x75, 0x72, 0x6e, 0x20, 0x32, 0x39, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09,
-  0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x65, 0x27, 0x3a, 0x20, 0x72,
-  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x33, 0x30, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x66, 0x27, 0x3a,
-  0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x33, 0x31, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x67,
-  0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x33, 0x32,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20,
-  0x27, 0x68, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-  0x33, 0x33, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73,
-  0x65, 0x20, 0x27, 0x69, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-  0x6e, 0x20, 0x33, 0x34, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63,
-  0x61, 0x73, 0x65, 0x20, 0x27, 0x6a, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74,
-  0x75, 0x72, 0x6e, 0x20, 0x33, 0x35, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09,
-  0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x6b, 0x27, 0x3a, 0x20, 0x72,
-  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x33, 0x36, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x6c, 0x27, 0x3a,
-  0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x33, 0x37, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x6d,
-  0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x33, 0x38,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20,
-  0x27, 0x6e, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-  0x33, 0x39, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73,
-  0x65, 0x20, 0x27, 0x6f, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-  0x6e, 0x20, 0x34, 0x30, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63,
-  0x61, 0x73, 0x65, 0x20, 0x27, 0x70, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74,
-  0x75, 0x72, 0x6e, 0x20, 0x34, 0x31, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09,
-  0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x71, 0x27, 0x3a, 0x20, 0x72,
-  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x34, 0x32, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x72, 0x27, 0x3a,
-  0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x34, 0x33, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x73,
-  0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x34, 0x34,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20,
-  0x27, 0x74, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-  0x34, 0x35, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73,
-  0x65, 0x20, 0x27, 0x75, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-  0x6e, 0x20, 0x34, 0x36, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63,
-  0x61, 0x73, 0x65, 0x20, 0x27, 0x76, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74,
-  0x75, 0x72, 0x6e, 0x20, 0x34, 0x37, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09,
-  0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x77, 0x27, 0x3a, 0x20, 0x72,
-  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x34, 0x38, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x78, 0x27, 0x3a,
-  0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x34, 0x39, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x79,
-  0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x35, 0x30,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20,
-  0x27, 0x7a, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-  0x35, 0x31, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73,
-  0x65, 0x20, 0x27, 0x30, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-  0x6e, 0x20, 0x35, 0x32, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63,
-  0x61, 0x73, 0x65, 0x20, 0x27, 0x31, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74,
-  0x75, 0x72, 0x6e, 0x20, 0x35, 0x33, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09,
-  0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x32, 0x27, 0x3a, 0x20, 0x72,
-  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x35, 0x34, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x33, 0x27, 0x3a,
-  0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x35, 0x35, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x34,
-  0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x35, 0x36,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20,
-  0x27, 0x35, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-  0x35, 0x37, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73,
-  0x65, 0x20, 0x27, 0x36, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
-  0x6e, 0x20, 0x35, 0x38, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63,
-  0x61, 0x73, 0x65, 0x20, 0x27, 0x37, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74,
-  0x75, 0x72, 0x6e, 0x20, 0x35, 0x39, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09,
-  0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x38, 0x27, 0x3a, 0x20, 0x72,
-  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x36, 0x30, 0x3b, 0x0a, 0x09, 0x09,
-  0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x39, 0x27, 0x3a,
-  0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x36, 0x31, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20, 0x27, 0x2b,
-  0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x36, 0x32,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x61, 0x73, 0x65, 0x20,
-  0x27, 0x2f, 0x27, 0x3a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-  0x36, 0x33, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09,
-  0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x32, 0x35, 0x35,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x7d, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x09,
-  0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x65,
-  0x77, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x30, 0x29, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65,
-  0x72, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x76, 0x61,
-  0x72, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x20, 0x3d, 0x20,
-  0x30, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x76,
-  0x61, 0x72, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20,
-  0x3c, 0x20, 0x62, 0x36, 0x34, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
-  0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x7b, 0x0a,
-  0x09, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x62, 0x36, 0x34, 0x5b,
-  0x69, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x3d, 0x27, 0x29, 0x20, 0x7b,
-  0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x20, 0x3d, 0x20, 0x30,
-  0x3b, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x3b, 0x20,
-  0x7d, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x76,
-  0x61, 0x6c, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x31, 0x28, 0x62, 0x36,
-  0x34, 0x5b, 0x69, 0x5d, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x69,
-  0x66, 0x20, 0x28, 0x76, 0x61, 0x6c, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x35,
-  0x35, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x75,
-  0x6c, 0x6c, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x62, 0x75, 0x66, 0x66,
-  0x65, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65,
-  0x72, 0x20, 0x3c, 0x3c, 0x20, 0x36, 0x29, 0x20, 0x7c, 0x20, 0x76, 0x61,
-  0x6c, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x3b,
-  0x0a, 0x09, 0x09, 0x09, 0x09, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53,
-  0x20, 0x2b, 0x3d, 0x20, 0x36, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x69,
-  0x66, 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x20, 0x3e,
-  0x3d, 0x20, 0x38, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09,
-  0x09, 0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x73, 0x68, 0x69, 0x66,
-  0x74, 0x20, 0x3d, 0x20, 0x28, 0x31, 0x36, 0x20, 0x2d, 0x20, 0x62, 0x75,
-  0x66, 0x66, 0x65, 0x72, 0x53, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46,
-  0x46, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x62, 0x75, 0x66, 0x66,
-  0x65, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72,
-  0x20, 0x3c, 0x3c, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x29, 0x20, 0x26,
-  0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x3b, 0x0a, 0x09, 0x09, 0x09,
-  0x09, 0x09, 0x72, 0x65, 0x74, 0x5b, 0x72, 0x65, 0x74, 0x2e, 0x6c, 0x65,
-  0x6e, 0x67, 0x74, 0x68, 0x5d, 0x20, 0x3d, 0x20, 0x28, 0x62, 0x75, 0x66,
-  0x66, 0x65, 0x72, 0x20, 0x3e, 0x3e, 0x3e, 0x20, 0x38, 0x29, 0x20, 0x26,
-  0x20, 0x30, 0x78, 0x46, 0x46, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09,
-  0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x66,
-  0x66, 0x65, 0x72, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x30, 0x46, 0x46,
-  0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x62, 0x75, 0x66, 0x66, 0x65,
-  0x72, 0x20, 0x3d, 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20,
-  0x3e, 0x3e, 0x3e, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x29, 0x20, 0x26,
-  0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x3b, 0x0a, 0x09, 0x09, 0x09,
-  0x09, 0x09, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x20, 0x2d, 0x3d,
-  0x20, 0x38, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09,
-  0x09, 0x7d, 0x0a, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x62, 0x75,
-  0x66, 0x66, 0x65, 0x72, 0x53, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x0a, 0x09,
-  0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x62, 0x75, 0x66, 0x66,
-  0x65, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72,
-  0x20, 0x3c, 0x3c, 0x20, 0x28, 0x31, 0x36, 0x20, 0x2d, 0x20, 0x62, 0x75,
-  0x66, 0x66, 0x65, 0x72, 0x53, 0x29, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78,
-  0x46, 0x46, 0x46, 0x46, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x72, 0x65,
-  0x74, 0x5b, 0x72, 0x65, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
-  0x5d, 0x20, 0x3d, 0x20, 0x28, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20,
-  0x3e, 0x3e, 0x3e, 0x20, 0x38, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46,
-  0x46, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x09, 0x72,
-  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69,
-  0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x72, 0x65, 0x74,
-  0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d, 0x2c, 0x0a, 0x0a,
-  0x09, 0x48, 0x65, 0x78, 0x3a, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x65,
-  0x6e, 0x63, 0x6f, 0x64, 0x65, 0x3a, 0x20, 0x28, 0x78, 0x29, 0x20, 0x3d,
-  0x3e, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x76, 0x61, 0x72,
-  0x20, 0x72, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x22, 0x22, 0x3b, 0x0a, 0x09,
-  0x09, 0x09, 0x78, 0x2e, 0x66, 0x6f, 0x72, 0x45, 0x61, 0x63, 0x68, 0x28,
-  0x79, 0x20, 0x3d, 0x3e, 0x20, 0x7b, 0x20, 0x72, 0x65, 0x74, 0x20, 0x2b,
-  0x3d, 0x20, 0x79, 0x2e, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
-  0x28, 0x31, 0x36, 0x29, 0x2e, 0x70, 0x61, 0x64, 0x53, 0x74, 0x61, 0x72,
-  0x74, 0x28, 0x32, 0x2c, 0x20, 0x22, 0x30, 0x22, 0x29, 0x3b, 0x20, 0x7d,
-  0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-  0x20, 0x72, 0x65, 0x74, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x2c, 0x0a, 0x09,
-  0x09, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x3a, 0x20, 0x28, 0x78, 0x29,
-  0x20, 0x3d, 0x3e, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x76,
-  0x61, 0x72, 0x20, 0x61, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77,
-  0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x30, 0x29, 0x3b, 0x0a, 0x09,
-  0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x69,
-  0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x78, 0x2e,
-  0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x20, 0x69, 0x20, 0x2b, 0x3d,
-  0x20, 0x32, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09,
-  0x09, 0x61, 0x72, 0x72, 0x5b, 0x61, 0x72, 0x72, 0x2e, 0x6c, 0x65, 0x6e,
-  0x67, 0x74, 0x68, 0x5d, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65,
+  0x72, 0x65, 0x74, 0x29, 0x7d, 0x7d, 0x2c, 0x48, 0x65, 0x78, 0x3a, 0x7b,
+  0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x3a, 0x78, 0x3d, 0x3e, 0x7b, 0x76,
+  0x61, 0x72, 0x20, 0x72, 0x65, 0x74, 0x3d, 0x22, 0x22, 0x3b, 0x78, 0x2e,
+  0x66, 0x6f, 0x72, 0x45, 0x61, 0x63, 0x68, 0x28, 0x79, 0x3d, 0x3e, 0x7b,
+  0x72, 0x65, 0x74, 0x2b, 0x3d, 0x79, 0x2e, 0x74, 0x6f, 0x53, 0x74, 0x72,
+  0x69, 0x6e, 0x67, 0x28, 0x31, 0x36, 0x29, 0x2e, 0x70, 0x61, 0x64, 0x53,
+  0x74, 0x61, 0x72, 0x74, 0x28, 0x32, 0x2c, 0x22, 0x30, 0x22, 0x29, 0x7d,
+  0x29, 0x3b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x74,
+  0x7d, 0x2c, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x3a, 0x78, 0x3d, 0x3e,
+  0x7b, 0x76, 0x61, 0x72, 0x20, 0x61, 0x72, 0x72, 0x3d, 0x6e, 0x65, 0x77,
+  0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x30, 0x29, 0x3b, 0x66, 0x6f,
+  0x72, 0x28, 0x76, 0x61, 0x72, 0x20, 0x69, 0x3d, 0x30, 0x3b, 0x69, 0x3c,
+  0x78, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3b, 0x69, 0x2b, 0x3d,
+  0x32, 0x29, 0x7b, 0x61, 0x72, 0x72, 0x5b, 0x61, 0x72, 0x72, 0x2e, 0x6c,
+  0x65, 0x6e, 0x67, 0x74, 0x68, 0x5d, 0x3d, 0x70, 0x61, 0x72, 0x73, 0x65,
   0x49, 0x6e, 0x74, 0x28, 0x78, 0x2e, 0x63, 0x68, 0x61, 0x72, 0x41, 0x74,
-  0x28, 0x69, 0x29, 0x20, 0x2b, 0x20, 0x78, 0x2e, 0x63, 0x68, 0x61, 0x72,
-  0x41, 0x74, 0x28, 0x69, 0x20, 0x2b, 0x20, 0x31, 0x29, 0x2c, 0x20, 0x31,
-  0x36, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x09,
-  0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55,
-  0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x61, 0x72,
-  0x72, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d, 0x2c, 0x0a,
-  0x0a, 0x09, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65,
-  0x71, 0x75, 0x65, 0x73, 0x74, 0x3a, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63,
-  0x20, 0x28, 0x6d, 0x73, 0x67, 0x29, 0x20, 0x3d, 0x3e, 0x0a, 0x09, 0x7b,
-  0x0a, 0x09, 0x09, 0x6d, 0x73, 0x67, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77,
-  0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72,
-  0x28, 0x29, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x6d, 0x73,
-  0x67, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x6b, 0x65,
-  0x79, 0x20, 0x3d, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50,
-  0x49, 0x2e, 0x48, 0x65, 0x78, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65,
-  0x28, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x61,
-  0x70, 0x69, 0x6b, 0x65, 0x79, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x2f, 0x2f,
-  0x76, 0x61, 0x72, 0x20, 0x73, 0x65, 0x73, 0x73, 0x20, 0x3d, 0x20, 0x63,
-  0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x67, 0x65, 0x74, 0x52, 0x61, 0x6e,
-  0x64, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x28, 0x6e, 0x65,
-  0x77, 0x20, 0x55, 0x69, 0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79,
-  0x28, 0x31, 0x32, 0x29, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x76, 0x61, 0x72,
-  0x20, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x29, 0x20, 0x3d, 0x3e, 0x20, 0x7b,
-  0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x4d, 0x61, 0x74, 0x68,
-  0x2e, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x4d, 0x61, 0x74, 0x68, 0x2e,
-  0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x29, 0x20, 0x2a, 0x20, 0x31,
-  0x30, 0x30, 0x30, 0x30, 0x29, 0x20, 0x25, 0x20, 0x32, 0x35, 0x36, 0x20,
-  0x7d, 0x3b, 0x3b, 0x0a, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x73, 0x65,
-  0x73, 0x73, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e,
-  0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, 0x72, 0x28, 0x29,
-  0x2c, 0x20, 0x72, 0x28, 0x29, 0x2c, 0x20, 0x72, 0x28, 0x29, 0x2c, 0x20,
-  0x72, 0x28, 0x29, 0x2c, 0x20, 0x72, 0x28, 0x29, 0x2c, 0x20, 0x72, 0x28,
-  0x29, 0x2c, 0x20, 0x72, 0x28, 0x29, 0x2c, 0x20, 0x72, 0x28, 0x29, 0x2c,
-  0x20, 0x72, 0x28, 0x29, 0x2c, 0x20, 0x72, 0x28, 0x29, 0x2c, 0x20, 0x72,
-  0x28, 0x29, 0x2c, 0x20, 0x72, 0x28, 0x29, 0x5d, 0x29, 0x3b, 0x0a, 0x09,
-  0x09, 0x76, 0x61, 0x72, 0x20, 0x72, 0x61, 0x77, 0x64, 0x61, 0x74, 0x61,
-  0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x52, 0x6f, 0x73,
-  0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x43, 0x68, 0x61, 0x43, 0x68,
-  0x61, 0x32, 0x30, 0x2e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x28,
-  0x6b, 0x65, 0x79, 0x2c, 0x20, 0x73, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x30,
-  0x2c, 0x20, 0x6d, 0x73, 0x67, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x76, 0x61,
-  0x72, 0x20, 0x64, 0x67, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61,
-  0x69, 0x74, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49,
-  0x2e, 0x48, 0x65, 0x78, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28,
+  0x28, 0x69, 0x29, 0x2b, 0x78, 0x2e, 0x63, 0x68, 0x61, 0x72, 0x41, 0x74,
+  0x28, 0x69, 0x2b, 0x31, 0x29, 0x2c, 0x31, 0x36, 0x29, 0x7d, 0x72, 0x65,
+  0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69, 0x6e,
+  0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x61, 0x72, 0x72, 0x29,
+  0x7d, 0x7d, 0x2c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52,
+  0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3a, 0x61, 0x73, 0x79, 0x6e, 0x63,
+  0x20, 0x6d, 0x73, 0x67, 0x3d, 0x3e, 0x7b, 0x6d, 0x73, 0x67, 0x3d, 0x28,
+  0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x63, 0x6f,
+  0x64, 0x65, 0x72, 0x29, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28,
+  0x6d, 0x73, 0x67, 0x29, 0x3b, 0x76, 0x61, 0x72, 0x20, 0x6b, 0x65, 0x79,
+  0x3d, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x48,
+  0x65, 0x78, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x52, 0x6f,
+  0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x61, 0x70, 0x69, 0x6b,
+  0x65, 0x79, 0x29, 0x3b, 0x76, 0x61, 0x72, 0x20, 0x72, 0x3d, 0x28, 0x29,
+  0x3d, 0x3e, 0x7b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x4d, 0x61,
+  0x74, 0x68, 0x2e, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x4d, 0x61, 0x74,
+  0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x29, 0x2a, 0x31,
+  0x65, 0x34, 0x29, 0x25, 0x32, 0x35, 0x36, 0x7d, 0x3b, 0x76, 0x61, 0x72,
+  0x20, 0x73, 0x65, 0x73, 0x73, 0x3d, 0x6e, 0x65, 0x77, 0x20, 0x55, 0x69,
+  0x6e, 0x74, 0x38, 0x41, 0x72, 0x72, 0x61, 0x79, 0x28, 0x5b, 0x72, 0x28,
+  0x29, 0x2c, 0x72, 0x28, 0x29, 0x2c, 0x72, 0x28, 0x29, 0x2c, 0x72, 0x28,
+  0x29, 0x2c, 0x72, 0x28, 0x29, 0x2c, 0x72, 0x28, 0x29, 0x2c, 0x72, 0x28,
+  0x29, 0x2c, 0x72, 0x28, 0x29, 0x2c, 0x72, 0x28, 0x29, 0x2c, 0x72, 0x28,
+  0x29, 0x2c, 0x72, 0x28, 0x29, 0x2c, 0x72, 0x28, 0x29, 0x5d, 0x29, 0x3b,
+  0x76, 0x61, 0x72, 0x20, 0x72, 0x61, 0x77, 0x64, 0x61, 0x74, 0x61, 0x3d,
   0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f,
-  0x41, 0x50, 0x49, 0x2e, 0x48, 0x4d, 0x41, 0x43, 0x53, 0x48, 0x41, 0x32,
-  0x35, 0x36, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x28, 0x6b, 0x65, 0x79, 0x2c,
-  0x20, 0x72, 0x61, 0x77, 0x64, 0x61, 0x74, 0x61, 0x29, 0x29, 0x3b, 0x0a,
-  0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x3d,
-  0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64,
-  0x6f, 0x41, 0x50, 0x49, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x36, 0x34, 0x2e,
-  0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x72, 0x61, 0x77, 0x64, 0x61,
-  0x74, 0x61, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x72,
-  0x65, 0x73, 0x70, 0x20, 0x3d, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3d,
-  0x22, 0x20, 0x2b, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50,
-  0x49, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x3b, 0x0a,
-  0x09, 0x09, 0x72, 0x65, 0x73, 0x70, 0x20, 0x2b, 0x3d, 0x20, 0x22, 0x26,
-  0x73, 0x65, 0x73, 0x73, 0x3d, 0x22, 0x20, 0x2b, 0x20, 0x52, 0x6f, 0x73,
-  0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x48, 0x65, 0x78, 0x2e, 0x65,
-  0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x73, 0x65, 0x73, 0x73, 0x29, 0x3b,
-  0x0a, 0x09, 0x09, 0x72, 0x65, 0x73, 0x70, 0x20, 0x2b, 0x3d, 0x20, 0x22,
-  0x26, 0x64, 0x67, 0x73, 0x74, 0x3d, 0x22, 0x20, 0x2b, 0x20, 0x64, 0x67,
-  0x73, 0x74, 0x3b, 0x0a, 0x09, 0x09, 0x72, 0x65, 0x73, 0x70, 0x20, 0x2b,
-  0x3d, 0x20, 0x22, 0x26, 0x64, 0x61, 0x74, 0x61, 0x3d, 0x22, 0x20, 0x2b,
-  0x20, 0x64, 0x61, 0x74, 0x61, 0x3b, 0x0a, 0x09, 0x09, 0x72, 0x65, 0x74,
-  0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x70, 0x3b, 0x0a, 0x09, 0x7d,
-  0x2c, 0x0a, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x73, 0x65, 0x52, 0x65, 0x73,
-  0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63,
-  0x20, 0x28, 0x6d, 0x73, 0x67, 0x29, 0x20, 0x3d, 0x3e, 0x0a, 0x09, 0x7b,
-  0x0a, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x21, 0x6d, 0x73, 0x67, 0x2e,
-  0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x22, 0x75, 0x73,
-  0x65, 0x72, 0x3d, 0x22, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x21, 0x6d, 0x73,
-  0x67, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x22,
-  0x26, 0x73, 0x65, 0x73, 0x73, 0x3d, 0x22, 0x29, 0x20, 0x7c, 0x7c, 0x20,
-  0x21, 0x6d, 0x73, 0x67, 0x2e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65,
-  0x73, 0x28, 0x22, 0x26, 0x64, 0x67, 0x73, 0x74, 0x3d, 0x22, 0x29, 0x20,
-  0x7c, 0x7c, 0x20, 0x21, 0x6d, 0x73, 0x67, 0x2e, 0x69, 0x6e, 0x63, 0x6c,
-  0x75, 0x64, 0x65, 0x73, 0x28, 0x22, 0x26, 0x64, 0x61, 0x74, 0x61, 0x3d,
-  0x22, 0x29, 0x29, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x72,
-  0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x7b, 0x20, 0x73, 0x75, 0x63, 0x63,
-  0x65, 0x73, 0x73, 0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20,
-  0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a, 0x20, 0x22, 0x69,
-  0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f,
-  0x6e, 0x73, 0x65, 0x22, 0x20, 0x7d, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a,
-  0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x3d,
-  0x20, 0x6d, 0x73, 0x67, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x22,
-  0x75, 0x73, 0x65, 0x72, 0x3d, 0x22, 0x29, 0x5b, 0x31, 0x5d, 0x2e, 0x73,
-  0x70, 0x6c, 0x69, 0x74, 0x28, 0x22, 0x26, 0x22, 0x29, 0x5b, 0x30, 0x5d,
-  0x2e, 0x74, 0x72, 0x69, 0x6d, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x76,
-  0x61, 0x72, 0x20, 0x73, 0x65, 0x73, 0x73, 0x20, 0x3d, 0x20, 0x6d, 0x73,
-  0x67, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x22, 0x26, 0x73, 0x65,
-  0x73, 0x73, 0x3d, 0x22, 0x29, 0x5b, 0x31, 0x5d, 0x2e, 0x73, 0x70, 0x6c,
-  0x69, 0x74, 0x28, 0x22, 0x26, 0x22, 0x29, 0x5b, 0x30, 0x5d, 0x2e, 0x74,
-  0x72, 0x69, 0x6d, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x76, 0x61, 0x72,
-  0x20, 0x64, 0x67, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x73, 0x67, 0x2e,
-  0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x22, 0x26, 0x64, 0x67, 0x73, 0x74,
-  0x3d, 0x22, 0x29, 0x5b, 0x31, 0x5d, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74,
-  0x28, 0x22, 0x26, 0x22, 0x29, 0x5b, 0x30, 0x5d, 0x2e, 0x74, 0x72, 0x69,
-  0x6d, 0x28, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x64,
-  0x61, 0x74, 0x61, 0x20, 0x3d, 0x20, 0x6d, 0x73, 0x67, 0x2e, 0x73, 0x70,
-  0x6c, 0x69, 0x74, 0x28, 0x22, 0x26, 0x64, 0x61, 0x74, 0x61, 0x3d, 0x22,
-  0x29, 0x5b, 0x31, 0x5d, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x22,
-  0x26, 0x22, 0x29, 0x5b, 0x30, 0x5d, 0x2e, 0x74, 0x72, 0x69, 0x6d, 0x28,
-  0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x75, 0x73,
-  0x65, 0x72, 0x20, 0x21, 0x3d, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f,
-  0x41, 0x50, 0x49, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65,
-  0x29, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x72, 0x65, 0x74,
-  0x75, 0x72, 0x6e, 0x20, 0x7b, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73,
-  0x73, 0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x72, 0x65,
-  0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a, 0x20, 0x22, 0x69, 0x6e, 0x76,
-  0x61, 0x6c, 0x69, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x69, 0x6e,
-  0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x7d,
-  0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x64, 0x61, 0x74, 0x61,
-  0x20, 0x3d, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49,
-  0x2e, 0x42, 0x61, 0x73, 0x65, 0x36, 0x34, 0x2e, 0x64, 0x65, 0x63, 0x6f,
-  0x64, 0x65, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x0a, 0x09, 0x09,
-  0x73, 0x65, 0x73, 0x73, 0x20, 0x3d, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64,
-  0x6f, 0x41, 0x50, 0x49, 0x2e, 0x48, 0x65, 0x78, 0x2e, 0x64, 0x65, 0x63,
-  0x6f, 0x64, 0x65, 0x28, 0x73, 0x65, 0x73, 0x73, 0x29, 0x3b, 0x0a, 0x09,
-  0x09, 0x76, 0x61, 0x72, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x3d, 0x20, 0x52,
-  0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x48, 0x65, 0x78,
-  0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x52, 0x6f, 0x73, 0x61,
-  0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79,
-  0x29, 0x3b, 0x0a, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x73, 0x69, 0x67,
-  0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x52, 0x6f, 0x73,
-  0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x48, 0x65, 0x78, 0x2e, 0x65,
-  0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20,
-  0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x48, 0x4d,
-  0x41, 0x43, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x2e, 0x73, 0x69, 0x67,
-  0x6e, 0x28, 0x6b, 0x65, 0x79, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x29,
-  0x29, 0x3b, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x73, 0x69, 0x67,
-  0x20, 0x21, 0x3d, 0x20, 0x64, 0x67, 0x73, 0x74, 0x29, 0x0a, 0x09, 0x09,
-  0x7b, 0x0a, 0x09, 0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
-  0x7b, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x3a, 0x20, 0x66,
-  0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-  0x73, 0x65, 0x3a, 0x20, 0x22, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64,
-  0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x20,
-  0x7d, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x76, 0x61, 0x72,
-  0x20, 0x72, 0x65, 0x73, 0x70, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61, 0x69,
+  0x41, 0x50, 0x49, 0x2e, 0x43, 0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30,
+  0x2e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x28, 0x6b, 0x65, 0x79,
+  0x2c, 0x73, 0x65, 0x73, 0x73, 0x2c, 0x30, 0x2c, 0x6d, 0x73, 0x67, 0x29,
+  0x3b, 0x76, 0x61, 0x72, 0x20, 0x64, 0x67, 0x73, 0x74, 0x3d, 0x61, 0x77,
+  0x61, 0x69, 0x74, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50,
+  0x49, 0x2e, 0x48, 0x65, 0x78, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65,
+  0x28, 0x61, 0x77, 0x61, 0x69, 0x74, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64,
+  0x6f, 0x41, 0x50, 0x49, 0x2e, 0x48, 0x4d, 0x41, 0x43, 0x53, 0x48, 0x41,
+  0x32, 0x35, 0x36, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x28, 0x6b, 0x65, 0x79,
+  0x2c, 0x72, 0x61, 0x77, 0x64, 0x61, 0x74, 0x61, 0x29, 0x29, 0x3b, 0x76,
+  0x61, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x3d, 0x61, 0x77, 0x61, 0x69,
+  0x74, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e,
+  0x42, 0x61, 0x73, 0x65, 0x36, 0x34, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64,
+  0x65, 0x28, 0x72, 0x61, 0x77, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x76,
+  0x61, 0x72, 0x20, 0x72, 0x65, 0x73, 0x70, 0x3d, 0x22, 0x75, 0x73, 0x65,
+  0x72, 0x3d, 0x22, 0x2b, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50,
+  0x49, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x3b, 0x72,
+  0x65, 0x73, 0x70, 0x2b, 0x3d, 0x22, 0x26, 0x73, 0x65, 0x73, 0x73, 0x3d,
+  0x22, 0x2b, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e,
+  0x48, 0x65, 0x78, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x73,
+  0x65, 0x73, 0x73, 0x29, 0x3b, 0x72, 0x65, 0x73, 0x70, 0x2b, 0x3d, 0x22,
+  0x26, 0x64, 0x67, 0x73, 0x74, 0x3d, 0x22, 0x2b, 0x64, 0x67, 0x73, 0x74,
+  0x3b, 0x72, 0x65, 0x73, 0x70, 0x2b, 0x3d, 0x22, 0x26, 0x64, 0x61, 0x74,
+  0x61, 0x3d, 0x22, 0x2b, 0x64, 0x61, 0x74, 0x61, 0x3b, 0x72, 0x65, 0x74,
+  0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x70, 0x7d, 0x2c, 0x70, 0x61,
+  0x72, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a,
+  0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x6d, 0x73, 0x67, 0x3d, 0x3e, 0x7b,
+  0x69, 0x66, 0x28, 0x21, 0x6d, 0x73, 0x67, 0x2e, 0x69, 0x6e, 0x63, 0x6c,
+  0x75, 0x64, 0x65, 0x73, 0x28, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3d, 0x22,
+  0x29, 0x7c, 0x7c, 0x21, 0x6d, 0x73, 0x67, 0x2e, 0x69, 0x6e, 0x63, 0x6c,
+  0x75, 0x64, 0x65, 0x73, 0x28, 0x22, 0x26, 0x73, 0x65, 0x73, 0x73, 0x3d,
+  0x22, 0x29, 0x7c, 0x7c, 0x21, 0x6d, 0x73, 0x67, 0x2e, 0x69, 0x6e, 0x63,
+  0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x22, 0x26, 0x64, 0x67, 0x73, 0x74,
+  0x3d, 0x22, 0x29, 0x7c, 0x7c, 0x21, 0x6d, 0x73, 0x67, 0x2e, 0x69, 0x6e,
+  0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x28, 0x22, 0x26, 0x64, 0x61, 0x74,
+  0x61, 0x3d, 0x22, 0x29, 0x29, 0x7b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+  0x7b, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x3a, 0x66, 0x61, 0x6c,
+  0x73, 0x65, 0x2c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a,
+  0x22, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x72, 0x65, 0x73,
+  0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7d, 0x7d, 0x76, 0x61, 0x72, 0x20,
+  0x75, 0x73, 0x65, 0x72, 0x3d, 0x6d, 0x73, 0x67, 0x2e, 0x73, 0x70, 0x6c,
+  0x69, 0x74, 0x28, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3d, 0x22, 0x29, 0x5b,
+  0x31, 0x5d, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x22, 0x26, 0x22,
+  0x29, 0x5b, 0x30, 0x5d, 0x2e, 0x74, 0x72, 0x69, 0x6d, 0x28, 0x29, 0x3b,
+  0x76, 0x61, 0x72, 0x20, 0x73, 0x65, 0x73, 0x73, 0x3d, 0x6d, 0x73, 0x67,
+  0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x22, 0x26, 0x73, 0x65, 0x73,
+  0x73, 0x3d, 0x22, 0x29, 0x5b, 0x31, 0x5d, 0x2e, 0x73, 0x70, 0x6c, 0x69,
+  0x74, 0x28, 0x22, 0x26, 0x22, 0x29, 0x5b, 0x30, 0x5d, 0x2e, 0x74, 0x72,
+  0x69, 0x6d, 0x28, 0x29, 0x3b, 0x76, 0x61, 0x72, 0x20, 0x64, 0x67, 0x73,
+  0x74, 0x3d, 0x6d, 0x73, 0x67, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28,
+  0x22, 0x26, 0x64, 0x67, 0x73, 0x74, 0x3d, 0x22, 0x29, 0x5b, 0x31, 0x5d,
+  0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x22, 0x26, 0x22, 0x29, 0x5b,
+  0x30, 0x5d, 0x2e, 0x74, 0x72, 0x69, 0x6d, 0x28, 0x29, 0x3b, 0x76, 0x61,
+  0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x3d, 0x6d, 0x73, 0x67, 0x2e, 0x73,
+  0x70, 0x6c, 0x69, 0x74, 0x28, 0x22, 0x26, 0x64, 0x61, 0x74, 0x61, 0x3d,
+  0x22, 0x29, 0x5b, 0x31, 0x5d, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28,
+  0x22, 0x26, 0x22, 0x29, 0x5b, 0x30, 0x5d, 0x2e, 0x74, 0x72, 0x69, 0x6d,
+  0x28, 0x29, 0x3b, 0x69, 0x66, 0x28, 0x75, 0x73, 0x65, 0x72, 0x21, 0x3d,
+  0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x75, 0x73,
+  0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x7b, 0x72, 0x65, 0x74, 0x75,
+  0x72, 0x6e, 0x7b, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x3a, 0x66,
+  0x61, 0x6c, 0x73, 0x65, 0x2c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+  0x65, 0x3a, 0x22, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x75,
+  0x73, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f,
+  0x6e, 0x73, 0x65, 0x22, 0x7d, 0x7d, 0x64, 0x61, 0x74, 0x61, 0x3d, 0x52,
+  0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x42, 0x61, 0x73,
+  0x65, 0x36, 0x34, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x64,
+  0x61, 0x74, 0x61, 0x29, 0x3b, 0x73, 0x65, 0x73, 0x73, 0x3d, 0x52, 0x6f,
+  0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x48, 0x65, 0x78, 0x2e,
+  0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x73, 0x65, 0x73, 0x73, 0x29,
+  0x3b, 0x76, 0x61, 0x72, 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x52, 0x6f, 0x73,
+  0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x48, 0x65, 0x78, 0x2e, 0x64,
+  0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f,
+  0x41, 0x50, 0x49, 0x2e, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79, 0x29, 0x3b,
+  0x76, 0x61, 0x72, 0x20, 0x73, 0x69, 0x67, 0x3d, 0x61, 0x77, 0x61, 0x69,
+  0x74, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e,
+  0x48, 0x65, 0x78, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x61,
+  0x77, 0x61, 0x69, 0x74, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41,
+  0x50, 0x49, 0x2e, 0x48, 0x4d, 0x41, 0x43, 0x53, 0x48, 0x41, 0x32, 0x35,
+  0x36, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x28, 0x6b, 0x65, 0x79, 0x2c, 0x64,
+  0x61, 0x74, 0x61, 0x29, 0x29, 0x3b, 0x69, 0x66, 0x28, 0x73, 0x69, 0x67,
+  0x21, 0x3d, 0x64, 0x67, 0x73, 0x74, 0x29, 0x7b, 0x72, 0x65, 0x74, 0x75,
+  0x72, 0x6e, 0x7b, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x3a, 0x66,
+  0x61, 0x6c, 0x73, 0x65, 0x2c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+  0x65, 0x3a, 0x22, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x73,
+  0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x7d, 0x7d, 0x76,
+  0x61, 0x72, 0x20, 0x72, 0x65, 0x73, 0x70, 0x3d, 0x61, 0x77, 0x61, 0x69,
   0x74, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e,
   0x43, 0x68, 0x61, 0x43, 0x68, 0x61, 0x32, 0x30, 0x2e, 0x65, 0x6e, 0x63,
-  0x72, 0x79, 0x70, 0x74, 0x28, 0x6b, 0x65, 0x79, 0x2c, 0x20, 0x73, 0x65,
-  0x73, 0x73, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x29,
-  0x3b, 0x0a, 0x09, 0x09, 0x72, 0x65, 0x73, 0x70, 0x20, 0x3d, 0x20, 0x6e,
-  0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64,
-  0x65, 0x72, 0x28, 0x29, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28,
-  0x72, 0x65, 0x73, 0x70, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x72, 0x65, 0x73,
-  0x70, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x70, 0x20, 0x3f, 0x20, 0x72,
-  0x65, 0x73, 0x70, 0x20, 0x3a, 0x20, 0x22, 0x28, 0x6e, 0x75, 0x6c, 0x6c,
-  0x29, 0x22, 0x3b, 0x0a, 0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
-  0x20, 0x7b, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x3a, 0x20,
-  0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-  0x73, 0x65, 0x3a, 0x20, 0x72, 0x65, 0x73, 0x70, 0x20, 0x7d, 0x3b, 0x0a,
-  0x09, 0x7d, 0x2c, 0x0a, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
-  0x74, 0x3a, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x28, 0x6d, 0x73,
-  0x67, 0x29, 0x20, 0x3d, 0x3e, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x69,
-  0x66, 0x20, 0x28, 0x6d, 0x73, 0x67, 0x2e, 0x74, 0x72, 0x69, 0x6d, 0x28,
-  0x29, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x3d, 0x3d, 0x20,
-  0x30, 0x29, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x7b, 0x20,
-  0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x3a, 0x20, 0x74, 0x72, 0x75,
-  0x65, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a,
-  0x20, 0x22, 0x22, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x09, 0x09, 0x76,
-  0x61, 0x72, 0x20, 0x72, 0x65, 0x71, 0x20, 0x3d, 0x20, 0x61, 0x77, 0x61,
-  0x69, 0x74, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49,
-  0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
-  0x75, 0x65, 0x73, 0x74, 0x28, 0x6d, 0x73, 0x67, 0x29, 0x3b, 0x0a, 0x09,
-  0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x77, 0x61, 0x69,
-  0x74, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73,
-  0x65, 0x28, 0x72, 0x20, 0x3d, 0x3e, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09,
-  0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x78, 0x68, 0x72, 0x20,
-  0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x58, 0x4d, 0x4c, 0x48, 0x74, 0x74,
-  0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x29, 0x3b, 0x0a,
-  0x09, 0x09, 0x09, 0x78, 0x68, 0x72, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x28,
-  0x22, 0x50, 0x4f, 0x53, 0x54, 0x22, 0x2c, 0x20, 0x52, 0x6f, 0x73, 0x61,
-  0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69,
-  0x6e, 0x74, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0x3b, 0x0a, 0x09,
-  0x09, 0x09, 0x78, 0x68, 0x72, 0x2e, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71,
-  0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x28, 0x22,
-  0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65,
-  0x22, 0x2c, 0x20, 0x22, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+  0x72, 0x79, 0x70, 0x74, 0x28, 0x6b, 0x65, 0x79, 0x2c, 0x73, 0x65, 0x73,
+  0x73, 0x2c, 0x30, 0x2c, 0x64, 0x61, 0x74, 0x61, 0x29, 0x3b, 0x72, 0x65,
+  0x73, 0x70, 0x3d, 0x28, 0x6e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x78, 0x74,
+  0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x29, 0x2e, 0x64, 0x65, 0x63,
+  0x6f, 0x64, 0x65, 0x28, 0x72, 0x65, 0x73, 0x70, 0x29, 0x3b, 0x72, 0x65,
+  0x73, 0x70, 0x3d, 0x72, 0x65, 0x73, 0x70, 0x3f, 0x72, 0x65, 0x73, 0x70,
+  0x3a, 0x22, 0x28, 0x6e, 0x75, 0x6c, 0x6c, 0x29, 0x22, 0x3b, 0x72, 0x65,
+  0x74, 0x75, 0x72, 0x6e, 0x7b, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73,
+  0x3a, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+  0x73, 0x65, 0x3a, 0x72, 0x65, 0x73, 0x70, 0x7d, 0x7d, 0x2c, 0x72, 0x65,
+  0x71, 0x75, 0x65, 0x73, 0x74, 0x3a, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20,
+  0x6d, 0x73, 0x67, 0x3d, 0x3e, 0x7b, 0x69, 0x66, 0x28, 0x6d, 0x73, 0x67,
+  0x2e, 0x74, 0x72, 0x69, 0x6d, 0x28, 0x29, 0x2e, 0x6c, 0x65, 0x6e, 0x67,
+  0x74, 0x68, 0x3d, 0x3d, 0x30, 0x29, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
+  0x7b, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x3a, 0x74, 0x72, 0x75,
+  0x65, 0x2c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a, 0x22,
+  0x22, 0x7d, 0x3b, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x71, 0x3d, 0x61,
+  0x77, 0x61, 0x69, 0x74, 0x20, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41,
+  0x50, 0x49, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52,
+  0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x6d, 0x73, 0x67, 0x29, 0x3b,
+  0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74,
+  0x20, 0x6e, 0x65, 0x77, 0x20, 0x50, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65,
+  0x28, 0x72, 0x3d, 0x3e, 0x7b, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x78,
+  0x68, 0x72, 0x3d, 0x6e, 0x65, 0x77, 0x20, 0x58, 0x4d, 0x4c, 0x48, 0x74,
+  0x74, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3b, 0x78, 0x68,
+  0x72, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x22, 0x50, 0x4f, 0x53, 0x54,
+  0x22, 0x2c, 0x52, 0x6f, 0x73, 0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e,
+  0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x74, 0x72, 0x75,
+  0x65, 0x29, 0x3b, 0x78, 0x68, 0x72, 0x2e, 0x73, 0x65, 0x74, 0x52, 0x65,
+  0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x28,
+  0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70,
+  0x65, 0x22, 0x2c, 0x22, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
   0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x77, 0x77, 0x77, 0x2d, 0x66, 0x6f,
   0x72, 0x6d, 0x2d, 0x75, 0x72, 0x6c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65,
-  0x64, 0x22, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x78, 0x68, 0x72, 0x2e,
-  0x6f, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65,
-  0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x78, 0x29,
-  0x20, 0x3d, 0x3e, 0x0a, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x20,
-  0x20, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x78, 0x68, 0x72, 0x2e, 0x72,
-  0x65, 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x3d,
-  0x3d, 0x20, 0x58, 0x4d, 0x4c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71,
-  0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x4f, 0x4e, 0x45, 0x29, 0x0a, 0x09,
-  0x09, 0x20, 0x20, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x20, 0x20, 0x09,
-  0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x78, 0x68, 0x72, 0x2e, 0x73, 0x74,
-  0x61, 0x74, 0x75, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x20, 0x32, 0x30, 0x30,
-  0x29, 0x0a, 0x09, 0x09, 0x20, 0x20, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09,
-  0x09, 0x20, 0x20, 0x09, 0x09, 0x09, 0x09, 0x52, 0x6f, 0x73, 0x61, 0x64,
-  0x6f, 0x41, 0x50, 0x49, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x52, 0x65,
-  0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x78, 0x68, 0x72, 0x2e, 0x72,
-  0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x65, 0x78, 0x74, 0x29,
-  0x2e, 0x74, 0x68, 0x65, 0x6e, 0x28, 0x70, 0x72, 0x20, 0x3d, 0x3e, 0x20,
-  0x7b, 0x20, 0x72, 0x28, 0x70, 0x72, 0x29, 0x3b, 0x20, 0x7d, 0x29, 0x2e,
-  0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x78, 0x20, 0x3d, 0x3e, 0x20, 0x61,
-  0x6c, 0x65, 0x72, 0x74, 0x28, 0x22, 0x45, 0x52, 0x52, 0x28, 0x33, 0x29,
-  0x22, 0x29, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x20, 0x20, 0x09, 0x09, 0x09,
-  0x7d, 0x0a, 0x09, 0x09, 0x20, 0x20, 0x09, 0x09, 0x09, 0x65, 0x6c, 0x73,
-  0x65, 0x0a, 0x09, 0x09, 0x20, 0x20, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09,
-  0x09, 0x20, 0x20, 0x09, 0x09, 0x09, 0x09, 0x72, 0x28, 0x7b, 0x73, 0x75,
-  0x63, 0x63, 0x65, 0x73, 0x73, 0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65,
-  0x2c, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a, 0x20,
-  0x78, 0x68, 0x72, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x74,
-  0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x29, 0x7d, 0x29, 0x3b,
-  0x0a, 0x09, 0x20, 0x20, 0x09, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09,
-  0x20, 0x20, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x20, 0x20, 0x09, 0x09, 0x7d,
-  0x0a, 0x09, 0x09, 0x09, 0x78, 0x68, 0x72, 0x2e, 0x73, 0x65, 0x6e, 0x64,
-  0x28, 0x72, 0x65, 0x71, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x29, 0x2e,
-  0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x78, 0x20, 0x3d, 0x3e, 0x20, 0x61,
-  0x6c, 0x65, 0x72, 0x74, 0x28, 0x22, 0x45, 0x52, 0x52, 0x28, 0x31, 0x29,
-  0x3a, 0x20, 0x22, 0x20, 0x2b, 0x20, 0x78, 0x29, 0x29, 0x3b, 0x0a, 0x09,
-  0x7d, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a
+  0x64, 0x22, 0x29, 0x3b, 0x78, 0x68, 0x72, 0x2e, 0x6f, 0x6e, 0x72, 0x65,
+  0x61, 0x64, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x63, 0x68, 0x61, 0x6e,
+  0x67, 0x65, 0x3d, 0x78, 0x3d, 0x3e, 0x7b, 0x69, 0x66, 0x28, 0x78, 0x68,
+  0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65,
+  0x3d, 0x3d, 0x3d, 0x58, 0x4d, 0x4c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65,
+  0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x4f, 0x4e, 0x45, 0x29, 0x7b,
+  0x69, 0x66, 0x28, 0x78, 0x68, 0x72, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75,
+  0x73, 0x3d, 0x3d, 0x3d, 0x32, 0x30, 0x30, 0x29, 0x7b, 0x52, 0x6f, 0x73,
+  0x61, 0x64, 0x6f, 0x41, 0x50, 0x49, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65,
+  0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x78, 0x68, 0x72,
+  0x2e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x65, 0x78,
+  0x74, 0x29, 0x2e, 0x74, 0x68, 0x65, 0x6e, 0x28, 0x70, 0x72, 0x3d, 0x3e,
+  0x7b, 0x72, 0x28, 0x70, 0x72, 0x29, 0x7d, 0x29, 0x2e, 0x63, 0x61, 0x74,
+  0x63, 0x68, 0x28, 0x78, 0x3d, 0x3e, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x28,
+  0x22, 0x45, 0x52, 0x52, 0x28, 0x33, 0x29, 0x22, 0x29, 0x29, 0x7d, 0x65,
+  0x6c, 0x73, 0x65, 0x7b, 0x72, 0x28, 0x7b, 0x73, 0x75, 0x63, 0x63, 0x65,
+  0x73, 0x73, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x72, 0x65, 0x73,
+  0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a, 0x78, 0x68, 0x72, 0x2e, 0x73, 0x74,
+  0x61, 0x74, 0x75, 0x73, 0x2e, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e,
+  0x67, 0x28, 0x29, 0x7d, 0x29, 0x7d, 0x7d, 0x7d, 0x3b, 0x78, 0x68, 0x72,
+  0x2e, 0x73, 0x65, 0x6e, 0x64, 0x28, 0x72, 0x65, 0x71, 0x29, 0x7d, 0x29,
+  0x2e, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x78, 0x3d, 0x3e, 0x61, 0x6c,
+  0x65, 0x72, 0x74, 0x28, 0x22, 0x45, 0x52, 0x52, 0x28, 0x31, 0x29, 0x3a,
+  0x20, 0x22, 0x2b, 0x78, 0x29, 0x29, 0x7d, 0x7d, 0x3b
index 8f686ff0f8de652386565f9b4aaff5c2dd6fd29c..9fb1c2c7e6def8e564a5cbf0c0de47c1dde44352 100644 (file)
@@ -360,27 +360,15 @@ void *handleRequest(void *vargp)
                        info = httpParse("Path", buff, buff_len);
                        if ( strcmp(info, "/") == 0 )
                        {
-                               uint8_t* frontend = malloc(sizeof(FRONTEND) + 1);
-                               memcpy(frontend, FRONTEND, sizeof(FRONTEND));
-                               frontend[sizeof(FRONTEND)] = 0;
-                               httpStringOut(session_fd, frontend);
-                               free(frontend);
+                               httpFileOut(session_fd, FRONTEND, "text/html", sizeof(FRONTEND));
                        }
-                       else if ( strcmp(info, "/rosado-api.js") == 0 )
+                       else if ( strcmp(info, "/rosado-api.min.js") == 0 )
                        {
-                               uint8_t* frontend = malloc(sizeof(JAVASCRIPT) + 1);
-                               memcpy(frontend, JAVASCRIPT, sizeof(JAVASCRIPT));
-                               frontend[sizeof(JAVASCRIPT)] = 0;
-                               httpStringOut(session_fd, frontend);
-                               free(frontend);
+                               httpFileOut(session_fd, JAVASCRIPT, "application/javascript", sizeof(JAVASCRIPT));
                        }
                        else if ( strcmp(info, "/favicon.ico") == 0 )
                        {
-                               uint8_t* frontend = malloc(sizeof(FAVICON) + 1);
-                               memcpy(frontend, FAVICON, sizeof(FAVICON));
-                               frontend[sizeof(FAVICON)] = 0;
-                               httpStringOutByType(session_fd, frontend, "image/x-icon");
-                               free(frontend);
+                               httpFileOut(session_fd, FAVICON, "image/x-icon", sizeof(FAVICON));
                        }
                        else
                        {
@@ -404,12 +392,12 @@ void *handleRequest(void *vargp)
        httpEnd(session_fd);
 }
 
-void get_sqlpass()
+void get_conf()
 {
-       FILE *f = fopen("/usr/share/rosadoapi/password", "r");
+       FILE *f = fopen("/etc/rosado-api.conf", "r");
        if (!f)
        {
-               fprintf(stderr, "RosadoAPI: Could not access /usr/share/rosadoapi/password\n");
+               fprintf(stderr, "RosadoAPI: Could not access /etc/rosado-api.conf\n");
                exit(1);
        }
        int c;
@@ -421,33 +409,14 @@ void get_sqlpass()
                if (plen == sizeof(SQLPASS) - 2) break;
        }
        SQLPASS[plen] = 0;
-}
-
-void get_webport()
-{
-       FILE *f = fopen("/usr/share/rosadoapi/port", "r");
-       if (!f)
-       {
-               WEBPORT[0] = '8';
-               WEBPORT[1] = '6';
-               WEBPORT[2] = '6';
-               WEBPORT[3] = '6';
-               WEBPORT[4] = 0;
-               fprintf(stderr, "RosadoAPI: Could not access /usr/share/rosadoapi/port\n");
-               fprintf(stderr, "RosadoAPI: Using default port %s.\n", WEBPORT);
-               printf("RosadoAPI: Listening on port %s...\n", WEBPORT);
-               return;
-       }
-       int c;
-       int plen = 0;
+       plen = 0;
        while ( (c = fgetc(f)) != EOF)
        {
-               if (c == '\n' || c == '\r' || c == ' ') break;
+               if (c == '\n' || c == '\r' || c == ' ') continue;
                WEBPORT[plen++] = c;
                if (plen == sizeof(WEBPORT) - 2) break;
        }
        WEBPORT[plen] = 0;
-       printf("RosadoAPI: Listening on port %s...\n", WEBPORT);
 }
 
 void get_hostname()
@@ -486,8 +455,8 @@ void get_hostname()
 void main()
 {
        get_hostname();
-       get_sqlpass();
-       get_webport();
+       get_conf();
+       printf("Listening on port %s...\n", WEBPORT);
 
     MYSQL *conn;
     MYSQL_RES *res;
diff --git a/src/www/.frontend.html.swp b/src/www/.frontend.html.swp
new file mode 100644 (file)
index 0000000..5effef6
Binary files /dev/null and b/src/www/.frontend.html.swp differ
index f1326174227c7ecc938a8d77d9a383b5e91e822e..2c97901fb0d96227da7528a8e3e436f586ca97ff 100644 (file)
@@ -2,7 +2,7 @@
 <html>
        <head>
                <title>RosadoAPI</title>
-               <script type="text/javascript" src="rosado-api.js"></script>
+               <script type="text/javascript" src="rosado-api.min.js"></script>
                <style type="text/css">
                        .tdlabel { width: 10%; text-align: center; }
                        .tdfield { width: 85%; text-align: center; }
diff --git a/src/www/rosado-api.min.js b/src/www/rosado-api.min.js
new file mode 100644 (file)
index 0000000..af64fd4
--- /dev/null
@@ -0,0 +1 @@
+var RosadoAPI={username:undefined,apikey:undefined,endpoint:undefined,Math32:{clamp:a=>{while(a<0||a>4294967295)a+=a<0?4294967296:-4294967296;return a},shl:(a,b)=>RosadoAPI.Math32.clamp(a<<b),shr:(a,b)=>RosadoAPI.Math32.clamp(a>>>b),rtl:(a,b)=>RosadoAPI.Math32.clamp(a<<b|a>>>32-b),rtr:(a,b)=>RosadoAPI.Math32.clamp(a>>>b|a<<32-b),add:(a,b)=>RosadoAPI.Math32.clamp(a+b),sub:(a,b)=>RosadoAPI.Math32.clamp(a+b),or:(a,b)=>RosadoAPI.Math32.clamp(a|b),xor:(a,b)=>RosadoAPI.Math32.clamp(a^b)},HMACSHA256:{sign:async(key,msg)=>{key=new Uint8Array(key);msg=new Uint8Array(msg);var ikey=await crypto.subtle.importKey("raw",key,{name:"HMAC",hash:{name:"SHA-256"}},false,["sign","verify"]);return new Uint8Array(await window.crypto.subtle.sign({name:"HMAC"},ikey,msg))}},ChaCha20:{QR:(cc,a,b,c,d)=>{cc[a]=RosadoAPI.Math32.add(cc[a],cc[b]);cc[d]=RosadoAPI.Math32.xor(cc[d],cc[a]);cc[d]=RosadoAPI.Math32.rtl(cc[d],16);cc[c]=RosadoAPI.Math32.add(cc[c],cc[d]);cc[b]=RosadoAPI.Math32.xor(cc[b],cc[c]);cc[b]=RosadoAPI.Math32.rtl(cc[b],12);cc[a]=RosadoAPI.Math32.add(cc[a],cc[b]);cc[d]=RosadoAPI.Math32.xor(cc[d],cc[a]);cc[d]=RosadoAPI.Math32.rtl(cc[d],8);cc[c]=RosadoAPI.Math32.add(cc[c],cc[d]);cc[b]=RosadoAPI.Math32.xor(cc[b],cc[c]);cc[b]=RosadoAPI.Math32.rtl(cc[b],7)},DR:cc=>{RosadoAPI.ChaCha20.QR(cc,0,4,8,12);RosadoAPI.ChaCha20.QR(cc,1,5,9,13);RosadoAPI.ChaCha20.QR(cc,2,6,10,14);RosadoAPI.ChaCha20.QR(cc,3,7,11,15);RosadoAPI.ChaCha20.QR(cc,0,5,10,15);RosadoAPI.ChaCha20.QR(cc,1,6,11,12);RosadoAPI.ChaCha20.QR(cc,2,7,8,13);RosadoAPI.ChaCha20.QR(cc,3,4,9,14)},CB:cc=>{var i;var x=new Array(16);for(i=0;i<16;i++){x[i]=cc[i]}for(i=0;i<10;i++){RosadoAPI.ChaCha20.DR(cc)}for(i=0;i<16;i++){cc[i]=RosadoAPI.Math32.add(cc[i],x[i])}},S:(cc,cs)=>{for(var i=0;i<16;i++){cs[4*i]=cc[i]&255;cs[4*i+1]=cc[i]>>8&255;cs[4*i+2]=cc[i]>>16&255;cs[4*i+3]=cc[i]>>24&255}},B:(key,nonce,block,out)=>{var cc=[1634760805,857760878,2036477234,1797285236,key[0]|key[1]<<8|key[2]<<16|key[3]<<24,key[4]|key[5]<<8|key[6]<<16|key[7]<<24,key[8]|key[9]<<8|key[10]<<16|key[11]<<24,key[12]|key[13]<<8|key[14]<<16|key[15]<<24,key[16]|key[17]<<8|key[18]<<16|key[19]<<24,key[20]|key[21]<<8|key[22]<<16|key[23]<<24,key[24]|key[25]<<8|key[26]<<16|key[27]<<24,key[28]|key[29]<<8|key[30]<<16|key[31]<<24,block,nonce[0]|nonce[1]<<8|nonce[2]<<16|nonce[3]<<24,nonce[4]|nonce[5]<<8|nonce[6]<<16|nonce[7]<<24,nonce[8]|nonce[9]<<8|nonce[10]<<16|nonce[11]<<24];RosadoAPI.ChaCha20.CB(cc);RosadoAPI.ChaCha20.S(cc,out)},encrypt:async(key,nonce,block,data)=>{var count=data.length;if(count>274877906944-block*64)return null;var ret=new Array(0);var ccblock=new Array(64);var size=0;while(count>64){ret.length=size+64;RosadoAPI.ChaCha20.B(key,nonce,block++,ccblock);for(var i=0;i<64;i++)ret[size+i]=ccblock[i];size+=64;count-=64}if(count>0){ret.length=size+count;RosadoAPI.ChaCha20.B(key,nonce,block,ccblock);for(var i=0;i<count;i++)ret[size+i]=ccblock[i]}for(var i=0;i<data.length;i++)ret[i]^=data[i];return new Uint8Array(ret)}},Base64:{encode:async x=>{return await new Promise(r=>{const reader=new FileReader;reader.addEventListener("load",()=>r(reader.result.split(",")[1]));reader.readAsDataURL(new Blob([new Uint8Array(x)]))})},decode:b64=>{var dec1=v=>{switch(v){case"A":return 0;case"B":return 1;case"C":return 2;case"D":return 3;case"E":return 4;case"F":return 5;case"G":return 6;case"H":return 7;case"I":return 8;case"J":return 9;case"K":return 10;case"L":return 11;case"M":return 12;case"N":return 13;case"O":return 14;case"P":return 15;case"Q":return 16;case"R":return 17;case"S":return 18;case"T":return 19;case"U":return 20;case"V":return 21;case"W":return 22;case"X":return 23;case"Y":return 24;case"Z":return 25;case"a":return 26;case"b":return 27;case"c":return 28;case"d":return 29;case"e":return 30;case"f":return 31;case"g":return 32;case"h":return 33;case"i":return 34;case"j":return 35;case"k":return 36;case"l":return 37;case"m":return 38;case"n":return 39;case"o":return 40;case"p":return 41;case"q":return 42;case"r":return 43;case"s":return 44;case"t":return 45;case"u":return 46;case"v":return 47;case"w":return 48;case"x":return 49;case"y":return 50;case"z":return 51;case"0":return 52;case"1":return 53;case"2":return 54;case"3":return 55;case"4":return 56;case"5":return 57;case"6":return 58;case"7":return 59;case"8":return 60;case"9":return 61;case"+":return 62;case"/":return 63}return 255};var ret=new Array(0);var buffer=0;var bufferS=0;for(var i=0;i<b64.length;i++){if(b64[i]=="="){bufferS=0;continue}var val=dec1(b64[i]);if(val==255)return null;buffer=(buffer<<6|val)&65535;bufferS+=6;if(bufferS>=8){var shift=16-bufferS&255;buffer=buffer<<shift&65535;ret[ret.length]=buffer>>>8&255;buffer=buffer&255;buffer=buffer>>>shift&65535;bufferS-=8}}if(bufferS>0){buffer=buffer<<16-bufferS&65535;ret[ret.length]=buffer>>>8&255}return new Uint8Array(ret)}},Hex:{encode:x=>{var ret="";x.forEach(y=>{ret+=y.toString(16).padStart(2,"0")});return ret},decode:x=>{var arr=new Array(0);for(var i=0;i<x.length;i+=2){arr[arr.length]=parseInt(x.charAt(i)+x.charAt(i+1),16)}return new Uint8Array(arr)}},generateRequest:async msg=>{msg=(new TextEncoder).encode(msg);var key=RosadoAPI.Hex.decode(RosadoAPI.apikey);var r=()=>{return Math.floor(Math.random()*1e4)%256};var sess=new Uint8Array([r(),r(),r(),r(),r(),r(),r(),r(),r(),r(),r(),r()]);var rawdata=await RosadoAPI.ChaCha20.encrypt(key,sess,0,msg);var dgst=await RosadoAPI.Hex.encode(await RosadoAPI.HMACSHA256.sign(key,rawdata));var data=await RosadoAPI.Base64.encode(rawdata);var resp="user="+RosadoAPI.username;resp+="&sess="+RosadoAPI.Hex.encode(sess);resp+="&dgst="+dgst;resp+="&data="+data;return resp},parseResponse:async msg=>{if(!msg.includes("user=")||!msg.includes("&sess=")||!msg.includes("&dgst=")||!msg.includes("&data=")){return{success:false,response:"invalid response"}}var user=msg.split("user=")[1].split("&")[0].trim();var sess=msg.split("&sess=")[1].split("&")[0].trim();var dgst=msg.split("&dgst=")[1].split("&")[0].trim();var data=msg.split("&data=")[1].split("&")[0].trim();if(user!=RosadoAPI.username){return{success:false,response:"invalid user in response"}}data=RosadoAPI.Base64.decode(data);sess=RosadoAPI.Hex.decode(sess);var key=RosadoAPI.Hex.decode(RosadoAPI.apikey);var sig=await RosadoAPI.Hex.encode(await RosadoAPI.HMACSHA256.sign(key,data));if(sig!=dgst){return{success:false,response:"invalid signature"}}var resp=await RosadoAPI.ChaCha20.encrypt(key,sess,0,data);resp=(new TextDecoder).decode(resp);resp=resp?resp:"(null)";return{success:true,response:resp}},request:async msg=>{if(msg.trim().length==0)return{success:true,response:""};var req=await RosadoAPI.generateRequest(msg);return await new Promise(r=>{const xhr=new XMLHttpRequest;xhr.open("POST",RosadoAPI.endpoint,true);xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.onreadystatechange=x=>{if(xhr.readyState===XMLHttpRequest.DONE){if(xhr.status===200){RosadoAPI.parseResponse(xhr.responseText).then(pr=>{r(pr)}).catch(x=>alert("ERR(3)"))}else{r({success:false,response:xhr.status.toString()})}}};xhr.send(req)}).catch(x=>alert("ERR(1): "+x))}};
\ No newline at end of file